From db2a739b8a60f99e2688cf6e770197449d349946 Mon Sep 17 00:00:00 2001 From: arthurtilly <32559225+arthurtilly@users.noreply.github.com> Date: Wed, 29 Nov 2023 09:36:33 +1300 Subject: [PATCH 01/25] Remove macro objects and free up bparam3 (#558) * BoB, WF, JRB, CCM * HMC and LLL * SSL * DDD to RR * bowser courses * overworld * all stages done * remove macro object code * fix bparam3 and respawn info * rename script_func_locals to be unique * Remove level_misc_macros * formatting changes :) * added some enums for respawn info --------- Co-authored-by: Arceveti --- include/level_commands.h | 9 +- include/level_misc_macros.h | 28 -- include/macro_preset_names.h | 382 ----------------- include/macro_presets.h | 393 ------------------ include/object_constants.h | 9 +- include/object_fields.h | 5 - include/special_preset_names.h | 93 ----- include/special_presets.h | 111 ----- include/surface_terrains.h | 11 +- include/types.h | 5 +- levels/bbh/areas/1/collision.inc.c | 27 -- levels/bbh/areas/1/macro.inc.c | 38 -- levels/bbh/header.h | 1 - levels/bbh/leveldata.c | 5 - levels/bbh/script.c | 83 +++- levels/bitdw/areas/1/collision.inc.c | 24 -- levels/bitdw/areas/1/macro.inc.c | 63 --- levels/bitdw/header.h | 1 - levels/bitdw/leveldata.c | 5 - levels/bitdw/script.c | 102 ++++- levels/bitfs/areas/1/collision.inc.c | 25 -- levels/bitfs/areas/1/macro.inc.c | 44 -- levels/bitfs/header.h | 1 - levels/bitfs/leveldata.c | 4 - levels/bitfs/script.c | 84 +++- levels/bits/areas/1/collision.inc.c | 23 - levels/bits/areas/1/macro.inc.c | 60 --- levels/bits/header.h | 1 - levels/bits/leveldata.c | 4 - levels/bits/script.c | 94 ++++- levels/bob/areas/1/collision.inc.c | 18 - levels/bob/areas/1/macro.inc.c | 92 ---- levels/bob/header.h | 1 - levels/bob/leveldata.c | 5 - levels/bob/script.c | 126 +++++- levels/bowser_1/areas/1/collision.inc.c | 23 - levels/bowser_1/leveldata.c | 3 - levels/bowser_1/script.c | 28 ++ levels/bowser_2/areas/1/collision.inc.c | 3 - levels/bowser_2/leveldata.c | 3 - levels/bowser_2/script.c | 12 +- levels/bowser_3/areas/1/collision.inc.c | 8 - levels/bowser_3/leveldata.c | 3 - levels/bowser_3/script.c | 17 +- .../castle_courtyard/areas/1/collision.inc.c | 20 - levels/castle_courtyard/areas/1/macro.inc.c | 8 - levels/castle_courtyard/header.h | 1 - levels/castle_courtyard/leveldata.c | 5 - levels/castle_courtyard/script.c | 40 +- levels/castle_grounds/areas/1/collision.inc.c | 31 -- levels/castle_grounds/areas/1/macro.inc.c | 21 - levels/castle_grounds/header.h | 1 - levels/castle_grounds/leveldata.c | 5 - levels/castle_grounds/script.c | 73 +++- levels/castle_inside/areas/1/collision.inc.c | 12 - levels/castle_inside/areas/1/macro.inc.c | 16 - levels/castle_inside/areas/2/collision.inc.c | 5 - levels/castle_inside/areas/2/macro.inc.c | 5 - levels/castle_inside/areas/3/collision.inc.c | 6 - levels/castle_inside/areas/3/macro.inc.c | 10 - levels/castle_inside/header.h | 3 - levels/castle_inside/leveldata.c | 7 - levels/castle_inside/script.c | 79 +++- levels/ccm/areas/1/collision.inc.c | 22 - levels/ccm/areas/1/macro.inc.c | 41 -- levels/ccm/areas/2/collision.inc.c | 3 - levels/ccm/areas/2/macro.inc.c | 45 -- levels/ccm/header.h | 2 - levels/ccm/leveldata.c | 6 - levels/ccm/script.c | 132 +++++- levels/cotmc/areas/1/collision.inc.c | 2 - levels/cotmc/areas/1/macro.inc.c | 25 -- levels/cotmc/header.h | 1 - levels/cotmc/leveldata.c | 5 - levels/cotmc/script.c | 37 +- levels/ddd/areas/1/macro.inc.c | 22 - levels/ddd/areas/2/macro.inc.c | 50 --- levels/ddd/header.h | 2 - levels/ddd/leveldata.c | 6 - levels/ddd/script.c | 100 ++++- levels/hmc/areas/1/collision.inc.c | 14 - levels/hmc/areas/1/macro.inc.c | 88 ---- levels/hmc/header.h | 1 - levels/hmc/leveldata.c | 5 - levels/hmc/script.c | 122 +++++- levels/jrb/areas/1/collision.inc.c | 2 - levels/jrb/areas/1/macro.inc.c | 66 --- levels/jrb/areas/2/collision.inc.c | 2 - levels/jrb/areas/2/macro.inc.c | 5 - levels/jrb/header.h | 2 - levels/jrb/leveldata.c | 6 - levels/jrb/script.c | 100 ++++- levels/lll/areas/1/collision.inc.c | 2 - levels/lll/areas/1/macro.inc.c | 55 --- levels/lll/areas/2/collision.inc.c | 2 - levels/lll/areas/2/macro.inc.c | 30 -- levels/lll/header.h | 2 - levels/lll/leveldata.c | 6 - levels/lll/script.c | 121 +++++- levels/pss/areas/1/collision.inc.c | 2 - levels/pss/areas/1/macro.inc.c | 45 -- levels/pss/header.h | 1 - levels/pss/leveldata.c | 5 - levels/pss/script.c | 50 ++- levels/rr/areas/1/collision.inc.c | 24 -- levels/rr/areas/1/macro.inc.c | 65 --- levels/rr/header.h | 1 - levels/rr/leveldata.c | 4 - levels/rr/script.c | 104 ++++- levels/sa/areas/1/collision.inc.c | 2 - levels/sa/areas/1/macro.inc.c | 21 - levels/sa/header.h | 1 - levels/sa/leveldata.c | 4 - levels/sa/script.c | 33 +- levels/sl/areas/1/collision.inc.c | 11 - levels/sl/areas/1/macro.inc.c | 51 --- levels/sl/areas/2/collision.inc.c | 2 - levels/sl/areas/2/macro.inc.c | 22 - levels/sl/header.h | 2 - levels/sl/leveldata.c | 6 - levels/sl/script.c | 106 ++++- levels/ssl/areas/1/collision.inc.c | 8 - levels/ssl/areas/1/macro.inc.c | 50 --- levels/ssl/areas/2/collision.inc.c | 5 - levels/ssl/areas/2/macro.inc.c | 54 --- levels/ssl/areas/3/macro.inc.c | 4 - levels/ssl/header.h | 3 - levels/ssl/leveldata.c | 7 - levels/ssl/script.c | 148 ++++++- levels/thi/areas/1/collision.inc.c | 3 - levels/thi/areas/1/macro.inc.c | 44 -- levels/thi/areas/2/collision.inc.c | 4 - levels/thi/areas/2/macro.inc.c | 72 ---- levels/thi/areas/3/macro.inc.c | 19 - levels/thi/header.h | 3 - levels/thi/leveldata.c | 7 - levels/thi/script.c | 178 +++++++- levels/totwc/areas/1/collision.inc.c | 24 -- levels/totwc/areas/1/macro.inc.c | 32 -- levels/totwc/header.h | 1 - levels/totwc/leveldata.c | 4 - levels/totwc/script.c | 67 ++- levels/ttc/areas/1/collision.inc.c | 2 - levels/ttc/areas/1/macro.inc.c | 114 ----- levels/ttc/header.h | 1 - levels/ttc/leveldata.c | 4 - levels/ttc/script.c | 126 +++++- levels/ttm/areas/1/collision.inc.c | 30 -- levels/ttm/areas/1/macro.inc.c | 43 -- levels/ttm/areas/2/macro.inc.c | 15 - levels/ttm/areas/3/macro.inc.c | 26 -- levels/ttm/areas/4/macro.inc.c | 13 - levels/ttm/header.h | 4 - levels/ttm/leveldata.c | 8 - levels/ttm/script.c | 169 +++++++- levels/vcutm/areas/1/collision.inc.c | 2 - levels/vcutm/areas/1/macro.inc.c | 35 -- levels/vcutm/header.h | 1 - levels/vcutm/leveldata.c | 4 - levels/vcutm/script.c | 52 ++- levels/wdw/areas/1/collision.inc.c | 2 - levels/wdw/areas/1/macro.inc.c | 65 --- levels/wdw/areas/2/collision.inc.c | 3 - levels/wdw/areas/2/macro.inc.c | 45 -- levels/wdw/header.h | 2 - levels/wdw/leveldata.c | 6 - levels/wdw/script.c | 137 +++++- levels/wf/areas/1/collision.inc.c | 7 - levels/wf/areas/1/macro.inc.c | 47 --- levels/wf/header.h | 1 - levels/wf/leveldata.c | 5 - levels/wf/script.c | 75 +++- levels/wmotr/areas/1/collision.inc.c | 2 - levels/wmotr/areas/1/macro.inc.c | 30 -- levels/wmotr/header.h | 1 - levels/wmotr/leveldata.c | 4 - levels/wmotr/script.c | 42 +- src/engine/level_script.c | 23 +- src/engine/surface_load.c | 21 +- src/engine/surface_load.h | 2 +- src/game/area.c | 4 +- src/game/area.h | 28 +- src/game/behavior_actions.c | 1 - src/game/behaviors/bobomb.inc.c | 5 +- src/game/behaviors/chain_chomp.inc.c | 4 +- src/game/behaviors/coin.inc.c | 5 +- src/game/behaviors/fire_piranha_plant.inc.c | 4 +- src/game/behaviors/goomba.inc.c | 15 +- src/game/behaviors/mr_blizzard.inc.c | 4 +- src/game/behaviors/respawner.inc.c | 4 + src/game/farcall_helpers.h | 1 - src/game/macro_special_objects.c | 293 ------------- src/game/macro_special_objects.h | 21 - src/game/obj_behaviors.c | 1 - src/game/object_list_processor.c | 31 +- src/game/object_list_processor.h | 1 - src/game/spawn_object.c | 4 +- 197 files changed, 2449 insertions(+), 4002 deletions(-) delete mode 100644 include/level_misc_macros.h delete mode 100644 include/macro_preset_names.h delete mode 100644 include/macro_presets.h delete mode 100644 include/special_preset_names.h delete mode 100644 include/special_presets.h delete mode 100644 levels/bbh/areas/1/macro.inc.c delete mode 100644 levels/bitdw/areas/1/macro.inc.c delete mode 100644 levels/bitfs/areas/1/macro.inc.c delete mode 100644 levels/bits/areas/1/macro.inc.c delete mode 100644 levels/bob/areas/1/macro.inc.c delete mode 100644 levels/castle_courtyard/areas/1/macro.inc.c delete mode 100644 levels/castle_grounds/areas/1/macro.inc.c delete mode 100644 levels/castle_inside/areas/1/macro.inc.c delete mode 100644 levels/castle_inside/areas/2/macro.inc.c delete mode 100644 levels/castle_inside/areas/3/macro.inc.c delete mode 100644 levels/ccm/areas/1/macro.inc.c delete mode 100644 levels/ccm/areas/2/macro.inc.c delete mode 100644 levels/cotmc/areas/1/macro.inc.c delete mode 100644 levels/ddd/areas/1/macro.inc.c delete mode 100644 levels/ddd/areas/2/macro.inc.c delete mode 100644 levels/hmc/areas/1/macro.inc.c delete mode 100644 levels/jrb/areas/1/macro.inc.c delete mode 100644 levels/jrb/areas/2/macro.inc.c delete mode 100644 levels/lll/areas/1/macro.inc.c delete mode 100644 levels/lll/areas/2/macro.inc.c delete mode 100644 levels/pss/areas/1/macro.inc.c delete mode 100644 levels/rr/areas/1/macro.inc.c delete mode 100644 levels/sa/areas/1/macro.inc.c delete mode 100644 levels/sl/areas/1/macro.inc.c delete mode 100644 levels/sl/areas/2/macro.inc.c delete mode 100644 levels/ssl/areas/1/macro.inc.c delete mode 100644 levels/ssl/areas/2/macro.inc.c delete mode 100644 levels/ssl/areas/3/macro.inc.c delete mode 100644 levels/thi/areas/1/macro.inc.c delete mode 100644 levels/thi/areas/2/macro.inc.c delete mode 100644 levels/thi/areas/3/macro.inc.c delete mode 100644 levels/totwc/areas/1/macro.inc.c delete mode 100644 levels/ttc/areas/1/macro.inc.c delete mode 100644 levels/ttm/areas/1/macro.inc.c delete mode 100644 levels/ttm/areas/2/macro.inc.c delete mode 100644 levels/ttm/areas/3/macro.inc.c delete mode 100644 levels/ttm/areas/4/macro.inc.c delete mode 100644 levels/vcutm/areas/1/macro.inc.c delete mode 100644 levels/wdw/areas/1/macro.inc.c delete mode 100644 levels/wdw/areas/2/macro.inc.c delete mode 100644 levels/wf/areas/1/macro.inc.c delete mode 100644 levels/wmotr/areas/1/macro.inc.c delete mode 100644 src/game/macro_special_objects.c delete mode 100644 src/game/macro_special_objects.h diff --git a/include/level_commands.h b/include/level_commands.h index 323312863..ddfb04db4 100644 --- a/include/level_commands.h +++ b/include/level_commands.h @@ -65,7 +65,7 @@ enum LevelCommands { /*0x36*/ LEVEL_CMD_SET_MUSIC, /*0x37*/ LEVEL_CMD_SET_MENU_MUSIC, /*0x38*/ LEVEL_CMD_FADEOUT_MUSIC, - /*0x39*/ LEVEL_CMD_SET_MACRO_OBJECTS, + /*0x39*/ LEVEL_CMD_39, /*0x3A*/ LEVEL_CMD_3A, /*0x3B*/ LEVEL_CMD_CREATE_WHIRLPOOL, /*0x3C*/ LEVEL_CMD_GET_OR_SET_VAR, @@ -452,9 +452,10 @@ enum GoddardScene { #define SET_ECHO(console, emulator) \ CMD_BBBB(LEVEL_CMD_SET_ECHO, 0x04, console, emulator) -#define MACRO_OBJECTS(objList) \ - CMD_BBH(LEVEL_CMD_SET_MACRO_OBJECTS, 0x08, 0x0000), \ - CMD_PTR(objList) +// unused (previously MACRO_OBJECTS) +#define CMD39(unk4) \ + CMD_BBH(LEVEL_CMD_39, 0x08, 0x0000), \ + CMD_PTR(unk4) // unused #define CMD3A(unk2, unk4, unk6, unk8, unk10) \ diff --git a/include/level_misc_macros.h b/include/level_misc_macros.h deleted file mode 100644 index 91ccd784f..000000000 --- a/include/level_misc_macros.h +++ /dev/null @@ -1,28 +0,0 @@ -#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(preset, yaw, posX, posY, posZ) \ - MACRO_OBJECT_WITH_BEH_PARAM(preset, yaw, posX, posY, posZ, 0) - -#define MACRO_OBJECT_END() \ - 0x001E - -#define SPECIAL_OBJECT(preset, posX, posY, posZ) \ - preset, posX, posY, posZ - -#define SPECIAL_OBJECT_WITH_YAW(preset, posX, posY, posZ, yaw) \ - preset, posX, posY, posZ, yaw - -#define SPECIAL_OBJECT_WITH_YAW_AND_PARAM(preset, posX, posY, posZ, yaw, param) \ - preset, posX, posY, posZ, yaw, param - -#define TRAJECTORY_POS(trajId, x, y, z) \ - trajId, x, y, z - -#define TRAJECTORY_END() \ - -1 - -#endif // LEVEL_MISC_MACROS_H diff --git a/include/macro_preset_names.h b/include/macro_preset_names.h deleted file mode 100644 index 99ed4c76a..000000000 --- a/include/macro_preset_names.h +++ /dev/null @@ -1,382 +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_bub_spawner, - 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, -#ifdef FLOOMBAS - macro_empty_365, - macro_floomba, - macro_huge_floomba, - macro_tiny_floomba, - macro_floomba_triplet_spawner, - macro_floomba_quintuplet_spawner -#else - macro_empty_365 -#endif -}; - -#endif // MACRO_PRESET_NAMES_H diff --git a/include/macro_presets.h b/include/macro_presets.h deleted file mode 100644 index 6eb10edbd..000000000 --- a/include/macro_presets.h +++ /dev/null @@ -1,393 +0,0 @@ -#ifndef MACRO_PRESETS_H -#define MACRO_PRESETS_H - -#include "macro_preset_names.h" -#include "behavior_data.h" -#include "model_ids.h" -#include "object_constants.h" - -struct MacroPreset { - /*0x00*/ const BehaviorScript *behavior; - /*0x04*/ ModelID16 model; - /*0x06*/ s16 param; -}; - -struct MacroPreset MacroObjectPresets[] = { - {bhvYellowCoin, MODEL_YELLOW_COIN, 0}, // macro_yellow_coin - {bhvOneCoin, MODEL_YELLOW_COIN, 0}, // macro_yellow_coin_2 - {bhvMovingBlueCoin, MODEL_BLUE_COIN, 0}, // macro_moving_blue_coin - {bhvBlueCoinSliding, MODEL_BLUE_COIN, 0}, // macro_sliding_blue_coin - unused - {bhvRedCoin, MODEL_RED_COIN, 0}, // macro_red_coin - {bhvYellowCoin, MODEL_YELLOW_COIN, 0}, // macro_empty_5 - {bhvCoinFormation, MODEL_NONE, ( 0 )}, // macro_coin_line_horizontal - {bhvCoinFormation, MODEL_NONE, ( COIN_FORMATION_FLAG_RING )}, // macro_coin_ring_horizontal - {bhvCoinFormation, MODEL_NONE, ( COIN_FORMATION_FLAG_ARROW )}, // macro_coin_arrow - {bhvCoinFormation, MODEL_NONE, (COIN_FORMATION_FLAG_FLYING )}, // macro_coin_line_horizontal_flying - {bhvCoinFormation, MODEL_NONE, (COIN_FORMATION_FLAG_FLYING | COIN_FORMATION_FLAG_VERTICAL)}, // macro_coin_line_vertical - {bhvCoinFormation, MODEL_NONE, (COIN_FORMATION_FLAG_FLYING | COIN_FORMATION_FLAG_RING )}, // macro_coin_ring_horizontal_flying - {bhvCoinFormation, MODEL_NONE, (COIN_FORMATION_FLAG_FLYING | COIN_FORMATION_FLAG_RING | COIN_FORMATION_FLAG_VERTICAL)}, // macro_coin_ring_vertical - {bhvCoinFormation, MODEL_NONE, (COIN_FORMATION_FLAG_FLYING | COIN_FORMATION_FLAG_ARROW )}, // macro_coin_arrow_flying - unused - {bhvHiddenStarTrigger, MODEL_NONE, 0}, // macro_hidden_star_trigger - {bhvYellowCoin, MODEL_YELLOW_COIN, 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 - {bhvUnusedFakeStar, MODEL_STAR, 0}, // macro_fake_star - unused - {bhvMessagePanel, MODEL_WOODEN_SIGNPOST, 0}, // macro_wooden_signpost - {bhvCannonClosed, MODEL_DL_CANNON_LID, 0}, // macro_cannon_closed - {bhvBobombBuddyOpensCannon, MODEL_BOBOMB_BUDDY, 0}, // macro_bobomb_buddy_opens_cannon - {bhvButterfly, MODEL_BUTTERFLY, 0}, // macro_butterfly - unused - {bhvBouncingFireball, MODEL_NONE, 0}, // macro_bouncing_fireball_copy - unused - {bhvFishSpawner, MODEL_NONE, FISH_SPAWNER_BP_MANY_BLUE}, // macro_fish_group_3 - unused - {bhvFishSpawner, MODEL_NONE, FISH_SPAWNER_BP_FEW_BLUE }, // macro_fish_group - {bhvBetaFishSplashSpawner, MODEL_NONE, 0}, // macro_beta_fish_splash_spawner - {bhvHidden1upInPoleSpawner, MODEL_NONE, 0}, // macro_hidden_1up_in_pole - {bhvGoomba, MODEL_GOOMBA, GOOMBA_SIZE_HUGE}, // macro_huge_goomba - {bhvGoomba, MODEL_GOOMBA, GOOMBA_SIZE_TINY}, // macro_tiny_goomba - {bhvGoombaTripletSpawner, MODEL_NONE, 0}, // macro_goomba_triplet_spawner - {bhvGoombaTripletSpawner, MODEL_NONE, 8}, // macro_goomba_quintuplet_spawner - unused - {bhvSignOnWall, MODEL_NONE, 0}, // macro_sign_on_wall - {bhvChuckya, MODEL_CHUCKYA, 0}, // macro_chuckya - {bhvCannon, MODEL_CANNON_BASE, 0}, // macro_cannon_open - {bhvGoomba, MODEL_GOOMBA, 0}, // macro_goomba - {bhvHomingAmp, MODEL_AMP, 0}, // macro_homing_amp - {bhvCirclingAmp, MODEL_AMP, 0}, // macro_circling_amp - {bhvYellowCoin, MODEL_UNKNOWN_7D, 0}, // macro_unknown_40 - unused (was bhvCarrySomething1) - {bhvBetaTrampolineTop, MODEL_TRAMPOLINE, 0}, // macro_beta_trampoline_top - unused - {bhvFreeBowlingBall, MODEL_BOWLING_BALL, 0}, // macro_free_bowling_ball - unused - {bhvSnufit, MODEL_SNUFIT, 0}, // macro_snufit - {bhvRecoveryHeart, MODEL_HEART, 0}, // macro_recovery_heart - {bhv1upSliding, MODEL_1UP, 0}, // macro_1up_sliding - {bhv1Up, MODEL_1UP, MUSHROOM_BP_REQUIRES_NONE}, // macro_1up - {bhv1upJumpOnApproach, MODEL_1UP, 0}, // macro_1up_jump_on_approach - unused - {bhvHidden1up, MODEL_1UP, 0}, // macro_hidden_1up - {bhvHidden1upTrigger, MODEL_NONE, 0}, // macro_hidden_1up_trigger - {bhv1Up, MODEL_1UP, MUSHROOM_BP_REQUIRES_BOWSER_1}, // macro_1up_2 - {bhv1Up, MODEL_1UP, MUSHROOM_BP_REQUIRES_BOWSER_2}, // macro_1up_3 - {bhvYellowCoin, MODEL_YELLOW_COIN, 0}, // macro_empty_52 - {bhvBlueCoinSwitch, MODEL_BLUE_COIN_SWITCH, 0}, // macro_blue_coin_switch - {bhvHiddenBlueCoin, MODEL_BLUE_COIN, 0}, // macro_hidden_blue_coin - {bhvCapSwitch, MODEL_CAP_SWITCH, CAP_SWITCH_BP_WING_CAP }, // macro_wing_cap_switch - unused - {bhvCapSwitch, MODEL_CAP_SWITCH, CAP_SWITCH_BP_METAL_CAP }, // macro_metal_cap_switch - unused - {bhvCapSwitch, MODEL_CAP_SWITCH, CAP_SWITCH_BP_VANISH_CAP}, // macro_vanish_cap_switch - unused - {bhvCapSwitch, MODEL_CAP_SWITCH, CAP_SWITCH_BP_YELLOW_CAP}, // macro_yellow_cap_switch - unused - {bhvWaterLevelDiamond, MODEL_BREAKABLE_BOX, 0}, // macro_water_level_breakable_box - unused - {bhvExclamationBox, MODEL_EXCLAMATION_BOX, EXCLAMATION_BOX_BP_WING_CAP }, // macro_box_wing_cap - {bhvExclamationBox, MODEL_EXCLAMATION_BOX, EXCLAMATION_BOX_BP_METAL_CAP } , // macro_box_metal_cap - {bhvExclamationBox, MODEL_EXCLAMATION_BOX, EXCLAMATION_BOX_BP_VANISH_CAP}, // macro_box_vanish_cap - {bhvExclamationBox, MODEL_EXCLAMATION_BOX, EXCLAMATION_BOX_BP_KOOPA_SHELL}, // macro_box_koopa_shell - {bhvExclamationBox, MODEL_EXCLAMATION_BOX, EXCLAMATION_BOX_BP_COINS_1}, // macro_box_one_coin - unused - {bhvExclamationBox, MODEL_EXCLAMATION_BOX, EXCLAMATION_BOX_BP_COINS_3}, // macro_box_three_coins - {bhvExclamationBox, MODEL_EXCLAMATION_BOX, EXCLAMATION_BOX_BP_COINS_10}, // macro_box_ten_coins - {bhvExclamationBox, MODEL_EXCLAMATION_BOX, EXCLAMATION_BOX_BP_1UP_WALKING}, // macro_box_1up - {bhvExclamationBox, MODEL_EXCLAMATION_BOX, EXCLAMATION_BOX_BP_STAR_1}, // macro_box_star_1 - {bhvBreakableBox, MODEL_BREAKABLE_BOX, BREAKABLE_BOX_BP_NO_COINS}, // macro_breakable_box_no_coins - {bhvBreakableBox, MODEL_BREAKABLE_BOX, BREAKABLE_BOX_BP_3_COINS}, // macro_breakable_box_three_coins - {bhvPushableMetalBox, MODEL_METAL_BOX, 0}, // macro_pushable_metal_box - {bhvBreakableBoxSmall, MODEL_BREAKABLE_BOX, 0}, // macro_breakable_box_small - {bhvFloorSwitchHiddenObjects, MODEL_PURPLE_SWITCH, 0}, // macro_floor_switch_hidden_objects - {bhvHiddenObject, MODEL_BREAKABLE_BOX, BREAKABLE_BOX_BP_NO_COINS}, // macro_hidden_box - {bhvHiddenObject, MODEL_BREAKABLE_BOX, BREAKABLE_BOX_BP_3_COINS }, // macro_hidden_object_2 - unused - {bhvHiddenObject, MODEL_BREAKABLE_BOX, BREAKABLE_BOX_BP_5_COINS }, // macro_hidden_object_3 - unused - {bhvBreakableBox, MODEL_BREAKABLE_BOX, BREAKABLE_BOX_BP_LARGE }, // macro_breakable_box_giant - {bhvKoopaShellUnderwater, MODEL_KOOPA_SHELL, 0}, // macro_koopa_shell_underwater - {bhvExclamationBox, MODEL_EXCLAMATION_BOX, EXCLAMATION_BOX_BP_1UP_RUNNING_AWAY}, // macro_box_1up_running_away - {bhvYellowCoin, MODEL_YELLOW_COIN, 0}, // macro_empty_80 - {bhvBulletBill, MODEL_BULLET_BILL, 0}, // macro_bullet_bill_cannon - unused - {bhvHeaveHo, MODEL_HEAVE_HO, 0}, // macro_heave_ho - {bhvYellowCoin, MODEL_YELLOW_COIN, 0}, // macro_empty_83 - {bhvThwomp2, MODEL_THWOMP, 0}, // macro_thwomp - unused (was thwomp2) - {bhvFireSpitter, MODEL_BOWLING_BALL, 0}, // macro_fire_spitter - {bhvFlyGuy, MODEL_FLYGUY, FLY_GUY_BP_SHOOTS_FIRE}, // macro_fire_fly_guy - {bhvJumpingBox, MODEL_BREAKABLE_BOX, 0}, // macro_jumping_box - {bhvTripletButterfly, MODEL_BUTTERFLY, TRIPLET_BUTTERFLY_BP_0 }, // macro_butterfly_triplet - {bhvTripletButterfly, MODEL_BUTTERFLY, TRIPLET_BUTTERFLY_BP_NO_BOMBS}, // macro_butterfly_triplet_2 - {bhvYellowCoin, MODEL_YELLOW_COIN, 0}, // macro_empty_90 - {bhvYellowCoin, MODEL_YELLOW_COIN, 0}, // macro_empty_91 - {bhvYellowCoin, MODEL_YELLOW_COIN, 0}, // macro_empty_92 - {bhvSmallBully, MODEL_BULLY, 0}, // macro_bully - {bhvSmallBully, MODEL_BULLY_BOSS, 0}, // macro_bully_2 - unused - {bhvYellowCoin, MODEL_YELLOW_COIN, 0}, // macro_empty_95 - {bhvYellowCoin, MODEL_UNKNOWN_58, 0}, // macro_unknown_96 - unused (was bhvStub1D0C) - {bhvBouncingFireball, MODEL_NONE, 0}, // macro_bouncing_fireball - {bhvFlamethrower, MODEL_NONE, FLAMETHROWER_BP_UPWARDS}, // macro_flamethrower - {bhvYellowCoin, MODEL_YELLOW_COIN, 0}, // 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 - {bhvWoodenPost, MODEL_WOODEN_POST, 0}, // macro_wooden_post - {bhvWaterBombSpawner, MODEL_NONE, 0}, // macro_water_bomb_spawner - {bhvEnemyLakitu, MODEL_ENEMY_LAKITU, 0}, // macro_enemy_lakitu - {bhvKoopa, MODEL_KOOPA_WITH_SHELL, KOOPA_BP_KOOPA_THE_QUICK_BASE}, // macro_bob_koopa_the_quick - unused - {bhvKoopaRaceEndpoint, MODEL_NONE, 0}, // macro_koopa_race_endpoint - unused - {bhvBobomb, MODEL_BLACK_BOBOMB, BOBOMB_BP_STYPE_GENERIC }, // macro_bobomb - {bhvWaterBombCannon, MODEL_CANNON_BASE, 0}, // macro_water_bomb_cannon_copy - unused - {bhvBobombBuddyOpensCannon, MODEL_BOBOMB_BUDDY, 0}, // macro_bobomb_buddy_opens_cannon_copy - unused - {bhvWaterBombCannon, MODEL_CANNON_BASE, 0}, // macro_water_bomb_cannon - {bhvBobomb, MODEL_BLACK_BOBOMB, BOBOMB_BP_STYPE_STATIONARY}, // macro_bobomb_still - {bhvYellowCoin, MODEL_YELLOW_COIN, 0}, // 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 - {bhvUnusedFakeStar, MODEL_UNKNOWN_54, 0}, // macro_unknown_123 - unused - {bhvYellowCoin, MODEL_YELLOW_COIN, 0}, // macro_empty_124 - {bhvUnagi, MODEL_UNAGI, 0}, // macro_unagi - unused - {bhvSushiShark, MODEL_SUSHI, 0}, // macro_sushi - unused - {bhvYellowCoin, MODEL_YELLOW_COIN, 0}, // 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 - {bhvStaticObject, MODEL_KLEPTO, 0}, // macro_static_klepto - unused - {bhvTweester, MODEL_TWEESTER, 0}, // macro_tornado - unused - {bhvPokey, MODEL_NONE, 0}, // macro_pokey - {bhvPokey, MODEL_NONE, 0}, // macro_pokey_copy - unused - {bhvToxBox, MODEL_SSL_TOX_BOX, 0}, // macro_tox_box - unused - {bhvYellowCoin, MODEL_YELLOW_COIN, 0}, // 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 - {bhvMontyMole, MODEL_MONTY_MOLE, MONTY_MOLE_BP_NO_ROCK}, // macro_monty_mole_2 - unused - {bhvMontyMole, MODEL_MONTY_MOLE, MONTY_MOLE_BP_ROCK}, // macro_monty_mole - {bhvMontyMoleHole, MODEL_DL_MONTY_MOLE_HOLE, 0}, // macro_monty_mole_hole - {bhvFlyGuy, MODEL_FLYGUY, 0}, // macro_fly_guy - {bhvYellowCoin, MODEL_YELLOW_COIN, 0}, // macro_empty_155 - {bhvWigglerHead, MODEL_WIGGLER_HEAD, 0}, // macro_wiggler - unused - {bhvYellowCoin, MODEL_YELLOW_COIN, 0}, // 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 - {bhvSpindrift, MODEL_SPINDRIFT, 0}, // macro_spindrift - {bhvMrBlizzard, MODEL_MR_BLIZZARD_HIDDEN, MR_BLIZZARD_STYPE_NO_CAP}, // macro_mr_blizzard - {bhvMrBlizzard, MODEL_MR_BLIZZARD_HIDDEN, MR_BLIZZARD_STYPE_NO_CAP}, // macro_mr_blizzard_copy - unused - {bhvYellowCoin, MODEL_YELLOW_COIN, 0}, // macro_empty_168 - {bhvSmallPenguin, MODEL_PENGUIN, 0}, // macro_small_penguin - unused - {bhvTuxiesMother, MODEL_PENGUIN, 0}, // macro_tuxies_mother - unused - {bhvTuxiesMother, MODEL_PENGUIN, 0}, // macro_tuxies_mother_copy - unused - {bhvMrBlizzard, MODEL_MR_BLIZZARD_HIDDEN, MR_BLIZZARD_STYPE_JUMPING}, // macro_mr_blizzard_2 - unused - {bhvYellowCoin, MODEL_YELLOW_COIN, 0}, // 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 - {bhvHauntedChair, MODEL_HAUNTED_CHAIR, 0}, // macro_haunted_chair_copy - unused - {bhvHauntedChair, MODEL_HAUNTED_CHAIR, 0}, // macro_haunted_chair - {bhvHauntedChair, MODEL_HAUNTED_CHAIR, 0}, // macro_haunted_chair_copy2 - unused - {bhvGhostHuntBoo, MODEL_BOO, 0}, // macro_boo - unused - {bhvGhostHuntBoo, MODEL_BOO, 0}, // macro_boo_copy - unused - {bhvCourtyardBooTriplet, MODEL_BOO, 0}, // macro_boo_group - unused - {bhvBooWithCage, MODEL_BOO, 0}, // macro_boo_with_cage - unused - {bhvAlphaBooKey, MODEL_BETA_BOO_KEY, 0}, // macro_beta_key - unused - {bhvYellowCoin, MODEL_YELLOW_COIN, 0}, // 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 - {bhvBubSpawner, MODEL_NONE, 0}, // macro_bub_spawner - {bhvSeaweedBundle, MODEL_NONE, 0}, // macro_seaweed_bundle - {bhvBetaChestBottom, MODEL_TREASURE_CHEST_BASE, 0}, // macro_beta_chest - unused - {bhvBowserBomb, MODEL_WATER_MINE, 0}, // macro_water_mine - unused - {bhvFishSpawner, MODEL_NONE, FISH_SPAWNER_BP_MANY_CYAN}, // macro_fish_group_4 - unused - {bhvFishSpawner, MODEL_NONE, FISH_SPAWNER_BP_FEW_CYAN }, // macro_fish_group_2 - {bhvJetStreamRingSpawner, MODEL_WATER_RING, 0}, // macro_jet_stream_ring_spawner - unused - {bhvJetStreamRingSpawner, MODEL_WATER_RING, 0}, // macro_jet_stream_ring_spawner_copy - unused - {bhvSkeeter, MODEL_SKEETER, 0}, // macro_skeeter - {bhvClamShell, MODEL_CLAM_SHELL, 0}, // macro_clam_shell - {bhvYellowCoin, MODEL_YELLOW_COIN, 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 - {bhvMacroUkiki, MODEL_UKIKI, UKIKI_BP_CAGE}, // macro_ukiki - unused - {bhvMacroUkiki, MODEL_UKIKI, UKIKI_BP_CAP}, // macro_ukiki_2 - unused - {bhvPiranhaPlant, MODEL_PIRANHA_PLANT, 0}, // macro_piranha_plant - unused - {bhvYellowCoin, MODEL_YELLOW_COIN, 0}, // macro_empty_254 - {bhvSmallWhomp, MODEL_WHOMP, 0}, // macro_whomp - {bhvChainChomp, MODEL_CHAIN_CHOMP, 0}, // macro_chain_chomp - {bhvYellowCoin, MODEL_YELLOW_COIN, 0}, // macro_empty_257 - {bhvKoopa, MODEL_KOOPA_WITH_SHELL, KOOPA_BP_NORMAL }, // macro_koopa - {bhvKoopa, MODEL_KOOPA_WITHOUT_SHELL, KOOPA_BP_UNSHELLED}, // macro_koopa_shellless - unused - {bhvWoodenPost, MODEL_WOODEN_POST, 0}, // macro_wooden_post_copy - unused - {bhvFirePiranhaPlant, MODEL_PIRANHA_PLANT, FIRE_PIRANHA_PLANT_BP_NORMAL}, // macro_fire_piranha_plant - {bhvFirePiranhaPlant, MODEL_PIRANHA_PLANT, FIRE_PIRANHA_PLANT_BP_THI }, // macro_fire_piranha_plant_2 - unused - {bhvKoopa, MODEL_KOOPA_WITH_SHELL, KOOPA_BP_TINY}, // macro_thi_koopa_the_quick - {bhvYellowCoin, MODEL_YELLOW_COIN, 0}, // 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 - {bhvMoneybagHidden, MODEL_YELLOW_COIN, 0}, // macro_moneybag - {bhvYellowCoin, 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 - {bhvSwoop, MODEL_SWOOP, SWOOP_BP_0}, // macro_swoop - {bhvSwoop, MODEL_SWOOP, SWOOP_BP_1}, // macro_swoop_2 - {bhvMrI, MODEL_NONE, 0}, // macro_mr_i - {bhvScuttlebugSpawn, MODEL_NONE, 0}, // macro_scuttlebug_spawner - {bhvScuttlebug, MODEL_SCUTTLEBUG, 0}, // macro_scuttlebug - {bhvYellowCoin, MODEL_YELLOW_COIN, 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_UNKNOWN_54, 0}, // macro_unknown_303 - unused - {bhvYellowCoin, MODEL_YELLOW_COIN, 0}, // 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 - {bhvTTCRotatingSolid, MODEL_TTC_ROTATING_CUBE, TTC_ROTATING_SOLID_BP_CUBE }, // macro_ttc_rotating_cube - {bhvTTCRotatingSolid, MODEL_TTC_ROTATING_PRISM, TTC_ROTATING_SOLID_BP_TRIANGULAR_PRISM}, // macro_ttc_rotating_prism - {bhvTTCPendulum, MODEL_TTC_PENDULUM, 0}, // macro_ttc_pendulum - {bhvTTCTreadmill, MODEL_TTC_LARGE_TREADMILL, TREADMILL_BP_LARGE}, // macro_ttc_large_treadmill - {bhvTTCTreadmill, MODEL_TTC_SMALL_TREADMILL, TREADMILL_BP_SMALL}, // macro_ttc_small_treadmill - {bhvTTCMovingBar, MODEL_TTC_PUSH_BLOCK, 0}, // macro_ttc_push_block - {bhvTTCCog, MODEL_TTC_ROTATING_HEXAGON, TTC_COG_BP_SHAPE_HEXAGON }, // macro_ttc_rotating_hexagon - {bhvTTCCog, MODEL_TTC_ROTATING_TRIANGLE, TTC_COG_BP_SHAPE_TRIANGLE}, // macro_ttc_rotating_triangle - {bhvTTCPitBlock, MODEL_TTC_PIT_BLOCK, TTC_PIT_BLOCK_BP_0}, // macro_ttc_pit_block - {bhvTTCPitBlock, MODEL_TTC_PIT_BLOCK_UNUSED, TTC_PIT_BLOCK_BP_1}, // macro_ttc_pit_block_2 - unused - {bhvTTCElevator, MODEL_TTC_ELEVATOR_PLATFORM, 0}, // macro_ttc_elevator_platform - {bhvTTC2DRotator, MODEL_TTC_CLOCK_HAND, TTC_2D_ROTATOR_BP_HAND}, // macro_ttc_clock_hand - {bhvTTCSpinner, MODEL_TTC_SPINNER, 0}, // macro_ttc_spinner - {bhvTTC2DRotator, MODEL_TTC_SMALL_GEAR, TTC_2D_ROTATOR_BP_2D_COG}, // macro_ttc_small_gear - {bhvTTC2DRotator, MODEL_TTC_LARGE_GEAR, TTC_2D_ROTATOR_BP_2D_COG}, // macro_ttc_large_gear - {bhvTTCTreadmill, MODEL_TTC_LARGE_TREADMILL, TREADMILL_BP_UNKNOWN | TREADMILL_BP_LARGE}, // macro_ttc_large_treadmill_2 - {bhvTTCTreadmill, MODEL_TTC_SMALL_TREADMILL, TREADMILL_BP_UNKNOWN | TREADMILL_BP_SMALL}, // macro_ttc_small_treadmill_2 - {bhvYellowCoin, MODEL_YELLOW_COIN, 0}, // 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 - {bhvExclamationBox, MODEL_EXCLAMATION_BOX, EXCLAMATION_BOX_BP_STAR_2}, // macro_box_star_2 - {bhvExclamationBox, MODEL_EXCLAMATION_BOX, EXCLAMATION_BOX_BP_STAR_3}, // macro_box_star_3 - {bhvExclamationBox, MODEL_EXCLAMATION_BOX, EXCLAMATION_BOX_BP_STAR_4}, // macro_box_star_4 - {bhvExclamationBox, MODEL_EXCLAMATION_BOX, EXCLAMATION_BOX_BP_STAR_5}, // macro_box_star_5 - unused - {bhvExclamationBox, MODEL_EXCLAMATION_BOX, EXCLAMATION_BOX_BP_STAR_6}, // macro_box_star_6 - {bhvYellowCoin, MODEL_YELLOW_COIN, 0}, // 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 - {bhvSlidingPlatform2, MODEL_BITS_SLIDING_PLATFORM, 0}, // macro_bits_sliding_platform - unused - {bhvSlidingPlatform2, MODEL_BITS_TWIN_SLIDING_PLATFORMS, 0}, // macro_bits_twin_sliding_platforms - unused - {bhvAnotherTiltingPlatform, MODEL_BITDW_SLIDING_PLATFORM, 0}, // macro_bits_tilting_platform - unused - {bhvOctagonalPlatformRotating, MODEL_BITS_OCTAGONAL_PLATFORM, 0}, // macro_bits_octagonal_platform - unused - {bhvAnimatesOnFloorSwitchPress, MODEL_BITS_STAIRCASE, 0}, // macro_bits_staircase - unused - {bhvYellowCoin, MODEL_YELLOW_COIN, 0}, // macro_empty_355 - {bhvYellowCoin, MODEL_YELLOW_COIN, 0}, // macro_empty_356 - {bhvFerrisWheelAxle, MODEL_BITS_FERRIS_WHEEL_AXLE, 0}, // macro_bits_ferris_wheel_axle - unused - {bhvActivatedBackAndForthPlatform, MODEL_BITS_ARROW_PLATFORM, 0}, // macro_bits_arrow_platform - unused - {bhvSeesawPlatform, MODEL_BITS_SEESAW_PLATFORM, 0}, // macro_bits_seesaw_platform - unused - {bhvSeesawPlatform, MODEL_BITS_TILTING_W_PLATFORM, 0}, // macro_bits_tilting_w_platform - unused - {bhvYellowCoin, MODEL_YELLOW_COIN, 0}, // 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 -#ifdef FLOOMBAS - {bhvYellowCoin, MODEL_YELLOW_COIN, 0}, // macro_empty_365 - {bhvFloomba, MODEL_GOOMBA, GOOMBA_SIZE_REGULAR}, // macro_floomba - {bhvFloomba, MODEL_GOOMBA, GOOMBA_SIZE_HUGE }, // macro_huge_floomba - {bhvFloomba, MODEL_GOOMBA, GOOMBA_SIZE_TINY }, // macro_tiny_floomba - {bhvFloombaTripletSpawner, MODEL_NONE, 0}, // macro_floomba_triplet_spawner - {bhvFloombaTripletSpawner, MODEL_NONE, 8} // macro_floomba_quintuplet_spawner - unused -#else - {bhvYellowCoin, MODEL_YELLOW_COIN, 0} // macro_empty_365 -#endif -}; - -#endif // MACRO_PRESETS_H diff --git a/include/object_constants.h b/include/object_constants.h index 7ee6ad171..2fbeed852 100644 --- a/include/object_constants.h +++ b/include/object_constants.h @@ -20,14 +20,9 @@ enum ObjActiveFlags { ACTIVE_FLAG_IGNORE_ENV_BOXES = (1 << 10), // 0x0400 }; -/* respawnInfoType */ -enum RespawnInfoType { - RESPAWN_INFO_TYPE_NULL, - RESPAWN_INFO_TYPE_NORMAL, - RESPAWN_INFO_TYPE_MACRO_OBJECT -}; - /* respawnInfo */ +#define RESPAWN_INFO_NONE 0x00 +#define RESPAWN_INFO_NO_COINS 0x01 #define RESPAWN_INFO_DONT_RESPAWN 0xFF /* oFlags */ diff --git a/include/object_fields.h b/include/object_fields.h index d3487dadc..5bb7429f8 100644 --- a/include/object_fields.h +++ b/include/object_fields.h @@ -180,11 +180,6 @@ #define /*0x108*/ oPathedTargetPitch OBJECT_FIELD_S32(0x20) #define /*0x10C*/ oPathedTargetYaw OBJECT_FIELD_S32(0x21) -/* Special Object Macro */ -#define /*0x108*/ oMacroUnk108 OBJECT_FIELD_F32(0x20) -#define /*0x10C*/ oMacroUnk10C OBJECT_FIELD_F32(0x21) -#define /*0x110*/ oMacroUnk110 OBJECT_FIELD_F32(0x22) - /* Mario */ #define /*0x0F4*/ oMarioParticleFlags OBJECT_FIELD_S32(0x1B) #define /*0x108*/ oMarioReadingSignDYaw OBJECT_FIELD_S32(0x20) diff --git a/include/special_preset_names.h b/include/special_preset_names.h deleted file mode 100644 index 229d2878d..000000000 --- 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 deleted file mode 100644 index 152e52af4..000000000 --- a/include/special_presets.h +++ /dev/null @@ -1,111 +0,0 @@ -#ifndef SPECIAL_PRESETS_H -#define SPECIAL_PRESETS_H - -#include "special_preset_names.h" -#include "behavior_data.h" -#include "model_ids.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 { - /*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*/ ModelID16 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 } -}; - -#endif // SPECIAL_PRESETS_H diff --git a/include/surface_terrains.h b/include/surface_terrains.h index 765abacdd..80c539aeb 100644 --- a/include/surface_terrains.h +++ b/include/surface_terrains.h @@ -265,7 +265,6 @@ enum TerrainLoadCmd { TERRAIN_LOAD_VERTICES = 0x40, // Begins vertices list for collision triangles TERRAIN_LOAD_CONTINUE, // Stop loading vertices but continues to load other collision commands TERRAIN_LOAD_END, // End the collision list - TERRAIN_LOAD_OBJECTS, // Loads in certain objects for level start TERRAIN_LOAD_ENVIRONMENT // Loads water/HMC gas }; @@ -314,13 +313,17 @@ enum TerrainType { // End Collision Data #define COL_END() TERRAIN_LOAD_END -// Special Object Initiate -#define COL_SPECIAL_INIT(num) TERRAIN_LOAD_OBJECTS, num - // Water Boxes Initiate #define COL_WATER_BOX_INIT(num) TERRAIN_LOAD_ENVIRONMENT, num // Water Box #define COL_WATER_BOX(id, x1, z1, x2, z2, y) id, x1, z1, x2, z2, y +// Trajectories +#define TRAJECTORY_POS(trajId, x, y, z) \ + trajId, x, y, z + +#define TRAJECTORY_END() \ + -1 + #endif // SURFACE_TERRAINS_H diff --git a/include/types.h b/include/types.h index 81b4813f6..e26e6ce49 100644 --- a/include/types.h +++ b/include/types.h @@ -166,7 +166,6 @@ typedef s32 DrawingLayer; typedef s16 PaintingData; typedef s32 CameraTransitionAngle; typedef s16 Movtex; -typedef s16 MacroObject; typedef s16 Trajectory; typedef u8 CutsceneID; @@ -326,7 +325,7 @@ struct Object { /*0x1D0*/ u32 bhvStackIndex; /*0x1D4*/ uintptr_t bhvStack[8]; /*0x1F4*/ s16 bhvDelayTimer; - /*0x1F6*/ s16 respawnInfoType; + /*0x1F6*/ u8 respawnInfo; /*0x1F8*/ f32 hitboxRadius; /*0x1FC*/ f32 hitboxHeight; /*0x200*/ f32 hurtboxRadius; @@ -337,7 +336,7 @@ struct Object { /*0x214*/ struct Object *platform; /*0x218*/ void *collisionData; /*0x21C*/ Mat4 transform; - /*0x25C*/ void *respawnInfo; + /*0x25C*/ u8 *respawnInfoPointer; #ifdef PUPPYLIGHTS struct PuppyLight puppylight; #endif diff --git a/levels/bbh/areas/1/collision.inc.c b/levels/bbh/areas/1/collision.inc.c index 1abb9baf8..3b1d92d7a 100644 --- a/levels/bbh/areas/1/collision.inc.c +++ b/levels/bbh/areas/1/collision.inc.c @@ -3741,33 +3741,6 @@ const Collision bbh_seg7_collision_level[] = { COL_TRI(8, 11, 9), COL_TRI(12, 14, 15), COL_TRI_STOP(), - COL_SPECIAL_INIT(26), - SPECIAL_OBJECT_WITH_YAW(/*preset*/ special_null_start, /*pos*/ 1434, -204, 4710, /*yaw*/ 128), // unused, probably an early way to set initial position - SPECIAL_OBJECT_WITH_YAW(/*preset*/ special_haunted_door, /*pos*/ 0, -2457, 2099, /*yaw*/ 128), - SPECIAL_OBJECT_WITH_YAW(/*preset*/ special_haunted_door, /*pos*/ -1996, -2457, 205, /*yaw*/ 192), - SPECIAL_OBJECT_WITH_YAW(/*preset*/ special_haunted_door, /*pos*/ 1587, -2457, 205, /*yaw*/ 64), - SPECIAL_OBJECT_WITH_YAW(/*preset*/ special_haunted_door, /*pos*/ -2136, -204, 4527, /*yaw*/ 224), - SPECIAL_OBJECT_WITH_YAW(/*preset*/ special_haunted_door, /*pos*/ 0, -2457, 4659, /*yaw*/ 128), - SPECIAL_OBJECT_WITH_YAW(/*preset*/ special_haunted_door, /*pos*/ 2099, 1741, 486, /*yaw*/ 64), - SPECIAL_OBJECT_WITH_YAW(/*preset*/ special_haunted_door, /*pos*/ 589, 1922, 1894, /*yaw*/ 0), - SPECIAL_OBJECT_WITH_YAW(/*preset*/ special_haunted_door, /*pos*/ 742, 1922, 1894, /*yaw*/ 128), - SPECIAL_OBJECT_WITH_YAW(/*preset*/ special_haunted_door, /*pos*/ -1970, 1024, 1075, /*yaw*/ 128), - SPECIAL_OBJECT_WITH_YAW(/*preset*/ special_haunted_door, /*pos*/ -2021, 0, 1075, /*yaw*/ 128), - SPECIAL_OBJECT_WITH_YAW(/*preset*/ special_haunted_door, /*pos*/ 2099, 819, 1818, /*yaw*/ 192), - SPECIAL_OBJECT_WITH_YAW(/*preset*/ special_haunted_door, /*pos*/ 3354, 0, 1075, /*yaw*/ 0), - SPECIAL_OBJECT_WITH_YAW(/*preset*/ special_haunted_door, /*pos*/ 742, 0, 2099, /*yaw*/ 128), - SPECIAL_OBJECT_WITH_YAW(/*preset*/ special_haunted_door, /*pos*/ 589, 0, 2099, /*yaw*/ 0), - SPECIAL_OBJECT_WITH_YAW(/*preset*/ special_haunted_door, /*pos*/ 2099, 0, 1459, /*yaw*/ 192), - SPECIAL_OBJECT_WITH_YAW(/*preset*/ special_haunted_door, /*pos*/ 179, 819, -50, /*yaw*/ 0), - SPECIAL_OBJECT_WITH_YAW(/*preset*/ special_haunted_door, /*pos*/ 2099, 819, 486, /*yaw*/ 192), - SPECIAL_OBJECT_WITH_YAW(/*preset*/ special_haunted_door, /*pos*/ 435, 0, -50, /*yaw*/ 0), - SPECIAL_OBJECT_WITH_YAW(/*preset*/ special_haunted_door, /*pos*/ 1613, 0, -50, /*yaw*/ 0), - SPECIAL_OBJECT_WITH_YAW(/*preset*/ special_haunted_door, /*pos*/ 1613, 819, -50, /*yaw*/ 0), - SPECIAL_OBJECT_WITH_YAW(/*preset*/ special_haunted_door, /*pos*/ -1561, 0, -1586, /*yaw*/ 0), - SPECIAL_OBJECT_WITH_YAW(/*preset*/ special_haunted_door, /*pos*/ -767, 819, 1408, /*yaw*/ 64), - SPECIAL_OBJECT_WITH_YAW(/*preset*/ special_haunted_door, /*pos*/ -767, 819, 640, /*yaw*/ 64), - SPECIAL_OBJECT_WITH_YAW(/*preset*/ special_haunted_door, /*pos*/ -50, 0, 640, /*yaw*/ 64), - SPECIAL_OBJECT_WITH_YAW(/*preset*/ special_haunted_door, /*pos*/ -50, 0, 1459, /*yaw*/ 64), COL_WATER_BOX_INIT(2), COL_WATER_BOX(0, -4812, 1485, 640, 7270, -2405), COL_WATER_BOX(1, 1536, -1637, 3789, 2662, -2508), diff --git a/levels/bbh/areas/1/macro.inc.c b/levels/bbh/areas/1/macro.inc.c deleted file mode 100644 index acc59b677..000000000 --- a/levels/bbh/areas/1/macro.inc.c +++ /dev/null @@ -1,38 +0,0 @@ -// 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_END(), -}; diff --git a/levels/bbh/header.h b/levels/bbh/header.h index de769e945..09206284a 100644 --- a/levels/bbh/header.h +++ b/levels/bbh/header.h @@ -97,7 +97,6 @@ extern const Gfx bbh_seg7_dl_070202F0[]; extern const Gfx bbh_seg7_dl_070206F0[]; extern const Collision bbh_seg7_collision_level[]; 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[]; extern const Collision bbh_seg7_collision_07026B1C[]; diff --git a/levels/bbh/leveldata.c b/levels/bbh/leveldata.c index ec907c201..22702aa6a 100644 --- a/levels/bbh/leveldata.c +++ b/levels/bbh/leveldata.c @@ -2,11 +2,7 @@ #include "sm64.h" #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 "textures.h" -#include "dialog_ids.h" #include "make_const_nonconst.h" #include "levels/bbh/texture.inc.c" @@ -59,7 +55,6 @@ #include "levels/bbh/coffin/model.inc.c" #include "levels/bbh/areas/1/collision.inc.c" #include "levels/bbh/areas/1/room.inc.c" -#include "levels/bbh/areas/1/macro.inc.c" #include "levels/bbh/staircase_step/collision.inc.c" #include "levels/bbh/tilting_trap_platform/collision.inc.c" #include "levels/bbh/tumbling_platform_near/collision.inc.c" diff --git a/levels/bbh/script.c b/levels/bbh/script.c index 8c13b2eaf..71c463215 100644 --- a/levels/bbh/script.c +++ b/levels/bbh/script.c @@ -17,7 +17,72 @@ #include "levels/bbh/header.h" -static const LevelScript script_func_local_1[] = { +static const LevelScript script_bbh_macro_objects[] = { + // Macro objects + OBJECT(/*model*/ MODEL_HAUNTED_CHAIR, /*pos*/ -1960, -20, 340, /*angle*/ 0, 90, 0, /*behParam*/ 0x00000000, /*beh*/ bhvHauntedChair), + OBJECT(/*model*/ MODEL_WOODEN_SIGNPOST, /*pos*/ -800, -204, 2915, /*angle*/ 0, 0, 0, /*behParam*/ (DIALOG_063 << 16), /*beh*/ bhvMessagePanel), + OBJECT(/*model*/ MODEL_WOODEN_SIGNPOST, /*pos*/ 400, -204, 3057, /*angle*/ 0, 0, 0, /*behParam*/ (DIALOG_085 << 16), /*beh*/ bhvMessagePanel), + OBJECT(/*model*/ MODEL_HAUNTED_CHAIR, /*pos*/ -1080, 20, 160, /*angle*/ 0, 270, 0, /*behParam*/ 0x00000000, /*beh*/ bhvHauntedChair), + OBJECT(/*model*/ MODEL_EXCLAMATION_BOX, /*pos*/ 1268, 1050, 1860, /*angle*/ 0, 0, 0, /*behParam*/ (EXCLAMATION_BOX_BP_VANISH_CAP << 16), /*beh*/ bhvExclamationBox), + OBJECT(/*model*/ MODEL_RED_COIN, /*pos*/ -1164, 0, 2325, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvRedCoin), + OBJECT(/*model*/ MODEL_RED_COIN, /*pos*/ 2540, 820, 2174, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvRedCoin), + OBJECT(/*model*/ MODEL_RED_COIN, /*pos*/ 2600, 815, -380, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvRedCoin), + OBJECT(/*model*/ MODEL_RED_COIN, /*pos*/ 2950, 815, -1250, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvRedCoin), + OBJECT(/*model*/ MODEL_RED_COIN, /*pos*/ -1500, 550, 960, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvRedCoin), + OBJECT(/*model*/ MODEL_RED_COIN, /*pos*/ -420, 550, 60, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvRedCoin), + OBJECT(/*model*/ MODEL_RED_COIN, /*pos*/ 2856, 50, 2144, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvRedCoin), + OBJECT(/*model*/ MODEL_RED_COIN, /*pos*/ 50, 900, -1400, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvRedCoin), + OBJECT(/*model*/ MODEL_EXCLAMATION_BOX, /*pos*/ 660, 3200, 1160, /*angle*/ 0, 0, 0, /*behParam*/ (EXCLAMATION_BOX_BP_1UP_WALKING << 16), /*beh*/ bhvExclamationBox), + OBJECT(/*model*/ MODEL_BLUE_COIN_SWITCH, /*pos*/ 640, 1741, 760, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvBlueCoinSwitch), + OBJECT(/*model*/ MODEL_BLUE_COIN, /*pos*/ 1400, 1840, 1100, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvHiddenBlueCoin), + OBJECT(/*model*/ MODEL_BLUE_COIN, /*pos*/ 1700, 1840, 1100, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvHiddenBlueCoin), + OBJECT(/*model*/ MODEL_BLUE_COIN, /*pos*/ 0, 1840, 1100, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvHiddenBlueCoin), + OBJECT(/*model*/ MODEL_BLUE_COIN, /*pos*/ -400, 1840, 1100, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvHiddenBlueCoin), + OBJECT(/*model*/ MODEL_WOODEN_SIGNPOST, /*pos*/ 2026, -204, 2966, /*angle*/ 0, 0, 0, /*behParam*/ (DIALOG_102 << 16), /*beh*/ bhvMessagePanel), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ 480, 10, -653, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvMrI), + OBJECT(/*model*/ MODEL_SCUTTLEBUG, /*pos*/ -346, -204, -2813, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvScuttlebug), + OBJECT(/*model*/ MODEL_SCUTTLEBUG, /*pos*/ 1146, -203, -2280, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvScuttlebug), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ -2369, -204, 5184, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvMrI), + OBJECT(/*model*/ MODEL_WOODEN_SIGNPOST, /*pos*/ -1546, -204, 4813, /*angle*/ 0, 135, 0, /*behParam*/ (DIALOG_086 << 16), /*beh*/ bhvMessagePanel), + OBJECT(/*model*/ MODEL_SCUTTLEBUG, /*pos*/ 3466, -204, 5106, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvScuttlebug), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ 1640, 840, -733, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvMrI), + OBJECT(/*model*/ MODEL_EXCLAMATION_BOX, /*pos*/ -1960, 300, -120, /*angle*/ 0, 0, 0, /*behParam*/ (EXCLAMATION_BOX_BP_VANISH_CAP << 16), /*beh*/ bhvExclamationBox), + OBJECT(/*model*/ MODEL_EXCLAMATION_BOX, /*pos*/ 460, 2140, -560, /*angle*/ 0, 0, 0, /*behParam*/ (EXCLAMATION_BOX_BP_VANISH_CAP << 16), /*beh*/ bhvExclamationBox), + OBJECT(/*model*/ MODEL_EXCLAMATION_BOX, /*pos*/ 700, 80, -2800, /*angle*/ 0, 0, 0, /*behParam*/ (EXCLAMATION_BOX_BP_COINS_10 << 16), /*beh*/ bhvExclamationBox), + OBJECT(/*model*/ MODEL_BREAKABLE_BOX, /*pos*/ -3800, -204, 4600, /*angle*/ 0, 45, 0, /*behParam*/ (BREAKABLE_BOX_BP_3_COINS << 16), /*beh*/ bhvBreakableBox), + OBJECT(/*model*/ MODEL_BREAKABLE_BOX, /*pos*/ -3659, -204, 4459, /*angle*/ 0, 45, 0, /*behParam*/ (BREAKABLE_BOX_BP_3_COINS << 16), /*beh*/ bhvBreakableBox), + OBJECT(/*model*/ MODEL_BREAKABLE_BOX, /*pos*/ -220, -220, 6140, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvJumpingBox), + OBJECT(/*model*/ MODEL_1UP, /*pos*/ -3040, 1120, 5460, /*angle*/ 0, 0, 0, /*behParam*/ (MUSHROOM_BP_REQUIRES_NONE << 16), /*beh*/ bhv1Up), + // Special objects + OBJECT(/*model*/ MODEL_CASTLE_WOODEN_DOOR_UNUSED, /*pos*/ 0, -2457, 2099, /*angle*/ 0, 180, 0, /*behParam*/ (0 << 24), /*beh*/ bhvDoor), + OBJECT(/*model*/ MODEL_CASTLE_WOODEN_DOOR_UNUSED, /*pos*/ -1996, -2457, 205, /*angle*/ 0, 270, 0, /*behParam*/ (0 << 24), /*beh*/ bhvDoor), + OBJECT(/*model*/ MODEL_CASTLE_WOODEN_DOOR_UNUSED, /*pos*/ 1587, -2457, 205, /*angle*/ 0, 90, 0, /*behParam*/ (0 << 24), /*beh*/ bhvDoor), + OBJECT(/*model*/ MODEL_CASTLE_WOODEN_DOOR_UNUSED, /*pos*/ -2136, -204, 4527, /*angle*/ 0, 315, 0, /*behParam*/ (0 << 24), /*beh*/ bhvDoor), + OBJECT(/*model*/ MODEL_CASTLE_WOODEN_DOOR_UNUSED, /*pos*/ 0, -2457, 4659, /*angle*/ 0, 180, 0, /*behParam*/ (0 << 24), /*beh*/ bhvDoor), + OBJECT(/*model*/ MODEL_CASTLE_WOODEN_DOOR_UNUSED, /*pos*/ 2099, 1741, 486, /*angle*/ 0, 90, 0, /*behParam*/ (0 << 24), /*beh*/ bhvDoor), + OBJECT(/*model*/ MODEL_CASTLE_WOODEN_DOOR_UNUSED, /*pos*/ 589, 1922, 1894, /*angle*/ 0, 0, 0, /*behParam*/ (0 << 24), /*beh*/ bhvDoor), + OBJECT(/*model*/ MODEL_CASTLE_WOODEN_DOOR_UNUSED, /*pos*/ 742, 1922, 1894, /*angle*/ 0, 180, 0, /*behParam*/ (0 << 24), /*beh*/ bhvDoor), + OBJECT(/*model*/ MODEL_CASTLE_WOODEN_DOOR_UNUSED, /*pos*/ -1970, 1024, 1075, /*angle*/ 0, 180, 0, /*behParam*/ (0 << 24), /*beh*/ bhvDoor), + OBJECT(/*model*/ MODEL_CASTLE_WOODEN_DOOR_UNUSED, /*pos*/ -2021, 0, 1075, /*angle*/ 0, 180, 0, /*behParam*/ (0 << 24), /*beh*/ bhvDoor), + OBJECT(/*model*/ MODEL_CASTLE_WOODEN_DOOR_UNUSED, /*pos*/ 2099, 819, 1818, /*angle*/ 0, 270, 0, /*behParam*/ (0 << 24), /*beh*/ bhvDoor), + OBJECT(/*model*/ MODEL_CASTLE_WOODEN_DOOR_UNUSED, /*pos*/ 3354, 0, 1075, /*angle*/ 0, 0, 0, /*behParam*/ (0 << 24), /*beh*/ bhvDoor), + OBJECT(/*model*/ MODEL_CASTLE_WOODEN_DOOR_UNUSED, /*pos*/ 742, 0, 2099, /*angle*/ 0, 180, 0, /*behParam*/ (0 << 24), /*beh*/ bhvDoor), + OBJECT(/*model*/ MODEL_CASTLE_WOODEN_DOOR_UNUSED, /*pos*/ 589, 0, 2099, /*angle*/ 0, 0, 0, /*behParam*/ (0 << 24), /*beh*/ bhvDoor), + OBJECT(/*model*/ MODEL_CASTLE_WOODEN_DOOR_UNUSED, /*pos*/ 2099, 0, 1459, /*angle*/ 0, 270, 0, /*behParam*/ (0 << 24), /*beh*/ bhvDoor), + OBJECT(/*model*/ MODEL_CASTLE_WOODEN_DOOR_UNUSED, /*pos*/ 179, 819, -50, /*angle*/ 0, 0, 0, /*behParam*/ (0 << 24), /*beh*/ bhvDoor), + OBJECT(/*model*/ MODEL_CASTLE_WOODEN_DOOR_UNUSED, /*pos*/ 2099, 819, 486, /*angle*/ 0, 270, 0, /*behParam*/ (0 << 24), /*beh*/ bhvDoor), + OBJECT(/*model*/ MODEL_CASTLE_WOODEN_DOOR_UNUSED, /*pos*/ 435, 0, -50, /*angle*/ 0, 0, 0, /*behParam*/ (0 << 24), /*beh*/ bhvDoor), + OBJECT(/*model*/ MODEL_CASTLE_WOODEN_DOOR_UNUSED, /*pos*/ 1613, 0, -50, /*angle*/ 0, 0, 0, /*behParam*/ (0 << 24), /*beh*/ bhvDoor), + OBJECT(/*model*/ MODEL_CASTLE_WOODEN_DOOR_UNUSED, /*pos*/ 1613, 819, -50, /*angle*/ 0, 0, 0, /*behParam*/ (0 << 24), /*beh*/ bhvDoor), + OBJECT(/*model*/ MODEL_CASTLE_WOODEN_DOOR_UNUSED, /*pos*/ -1561, 0, -1586, /*angle*/ 0, 0, 0, /*behParam*/ (0 << 24), /*beh*/ bhvDoor), + OBJECT(/*model*/ MODEL_CASTLE_WOODEN_DOOR_UNUSED, /*pos*/ -767, 819, 1408, /*angle*/ 0, 90, 0, /*behParam*/ (0 << 24), /*beh*/ bhvDoor), + OBJECT(/*model*/ MODEL_CASTLE_WOODEN_DOOR_UNUSED, /*pos*/ -767, 819, 640, /*angle*/ 0, 90, 0, /*behParam*/ (0 << 24), /*beh*/ bhvDoor), + OBJECT(/*model*/ MODEL_CASTLE_WOODEN_DOOR_UNUSED, /*pos*/ -50, 0, 640, /*angle*/ 0, 90, 0, /*behParam*/ (0 << 24), /*beh*/ bhvDoor), + OBJECT(/*model*/ MODEL_CASTLE_WOODEN_DOOR_UNUSED, /*pos*/ -50, 0, 1459, /*angle*/ 0, 90, 0, /*behParam*/ (0 << 24), /*beh*/ bhvDoor), + RETURN(), +}; + +static const LevelScript script_bbh_objects_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), @@ -27,7 +92,7 @@ static const LevelScript script_func_local_1[] = { RETURN(), }; -static const LevelScript script_func_local_2[] = { +static const LevelScript script_bbh_objects_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), @@ -37,7 +102,7 @@ static const LevelScript script_func_local_2[] = { RETURN(), }; -static const LevelScript script_func_local_3[] = { +static const LevelScript script_bbh_objects_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), @@ -69,7 +134,7 @@ static const LevelScript script_func_local_3[] = { RETURN(), }; -static const LevelScript script_func_local_4[] = { +static const LevelScript script_bbh_objects_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), @@ -103,16 +168,16 @@ const LevelScript level_bbh_entry[] = { LOAD_MODEL_FROM_GEO(MODEL_BBH_WOODEN_TOMB, geo_bbh_000658), AREA(/*index*/ 1, geo_bbh_000F00), - JUMP_LINK(script_func_local_1), - JUMP_LINK(script_func_local_2), - JUMP_LINK(script_func_local_3), - JUMP_LINK(script_func_local_4), + JUMP_LINK(script_bbh_objects_1), + JUMP_LINK(script_bbh_objects_2), + JUMP_LINK(script_bbh_objects_3), + JUMP_LINK(script_bbh_objects_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), TERRAIN(/*terrainData*/ bbh_seg7_collision_level), - MACRO_OBJECTS(/*objList*/ bbh_seg7_macro_objs), + JUMP_LINK(script_bbh_macro_objects), ROOMS(/*surfaceRooms*/ bbh_seg7_rooms), SHOW_DIALOG(/*index*/ 0x00, DIALOG_098), SET_BACKGROUND_MUSIC(/*settingsPreset*/ 0x0006, /*seq*/ SEQ_LEVEL_SPOOKY), diff --git a/levels/bitdw/areas/1/collision.inc.c b/levels/bitdw/areas/1/collision.inc.c index 1d4de531d..62700af4d 100644 --- a/levels/bitdw/areas/1/collision.inc.c +++ b/levels/bitdw/areas/1/collision.inc.c @@ -1323,29 +1323,5 @@ const Collision bitdw_seg7_collision_level[] = { COL_TRI(522, 542, 540), COL_TRI(485, 486, 489), COL_TRI_STOP(), - COL_SPECIAL_INIT(23), - SPECIAL_OBJECT_WITH_YAW(/*preset*/ special_null_start, /*pos*/ -7443, -3153, 3886, /*yaw*/ 64), // unused, probably an early way to set initial position - SPECIAL_OBJECT_WITH_YAW(/*preset*/ special_level_geo_03, /*pos*/ -6368, -3972, 3883, /*yaw*/ 0), - SPECIAL_OBJECT_WITH_YAW(/*preset*/ special_level_geo_04, /*pos*/ -3245, -3358, 3893, /*yaw*/ 0), - SPECIAL_OBJECT_WITH_YAW(/*preset*/ special_level_geo_05, /*pos*/ -2405, -1228, 1740, /*yaw*/ 0), - SPECIAL_OBJECT_WITH_YAW(/*preset*/ special_level_geo_06, /*pos*/ -5861, -434, 306, /*yaw*/ 0), - SPECIAL_OBJECT_WITH_YAW(/*preset*/ special_level_geo_07, /*pos*/ -5062, 922, -1895, /*yaw*/ 0), - SPECIAL_OBJECT_WITH_YAW(/*preset*/ special_level_geo_08, /*pos*/ -7116, 717, -819, /*yaw*/ 0), - SPECIAL_OBJECT_WITH_YAW(/*preset*/ special_level_geo_09, /*pos*/ -4601, 0, -312, /*yaw*/ 0), - SPECIAL_OBJECT_WITH_YAW(/*preset*/ special_level_geo_0A, /*pos*/ 797, -3282, 3868, /*yaw*/ 0), - SPECIAL_OBJECT_WITH_YAW(/*preset*/ special_level_geo_0B, /*pos*/ -2047, -1868, 3685, /*yaw*/ 0), - SPECIAL_OBJECT_WITH_YAW(/*preset*/ special_level_geo_0C, /*pos*/ -966, 922, 44, /*yaw*/ 0), - SPECIAL_OBJECT_WITH_YAW(/*preset*/ special_level_geo_0D, /*pos*/ 2207, 922, 44, /*yaw*/ 0), - SPECIAL_OBJECT_WITH_YAW(/*preset*/ special_level_geo_0E, /*pos*/ -7108, 209, 356, /*yaw*/ 0), - SPECIAL_OBJECT_WITH_YAW(/*preset*/ special_level_geo_0E, /*pos*/ -7103, 844, -2088, /*yaw*/ 0), - SPECIAL_OBJECT_WITH_YAW(/*preset*/ special_level_geo_0E, /*pos*/ -6466, 9, 986, /*yaw*/ 0), - SPECIAL_OBJECT_WITH_YAW(/*preset*/ special_level_geo_0E, /*pos*/ -4013, -670, 990, /*yaw*/ 0), - SPECIAL_OBJECT_WITH_YAW(/*preset*/ special_level_geo_0E, /*pos*/ -5251, -276, 967, /*yaw*/ 0), - SPECIAL_OBJECT_WITH_YAW(/*preset*/ special_level_geo_0E, /*pos*/ -7665, 502, -251, /*yaw*/ 0), - SPECIAL_OBJECT_WITH_YAW(/*preset*/ special_level_geo_0F, /*pos*/ 5382, 1536, -6, /*yaw*/ 0), - SPECIAL_OBJECT_WITH_YAW(/*preset*/ special_level_geo_10, /*pos*/ -1658, -3281, 3893, /*yaw*/ 0), - SPECIAL_OBJECT_WITH_YAW(/*preset*/ special_level_geo_10, /*pos*/ -2656, 889, -2156, /*yaw*/ 0), - SPECIAL_OBJECT_WITH_YAW(/*preset*/ special_level_geo_10, /*pos*/ -2052, 889, -928, /*yaw*/ 0), - SPECIAL_OBJECT_WITH_YAW(/*preset*/ special_level_geo_11, /*pos*/ -3168, 710, 607, /*yaw*/ 0), COL_END(), }; diff --git a/levels/bitdw/areas/1/macro.inc.c b/levels/bitdw/areas/1/macro.inc.c deleted file mode 100644 index cf1783a11..000000000 --- a/levels/bitdw/areas/1/macro.inc.c +++ /dev/null @@ -1,63 +0,0 @@ -// 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_END(), -}; diff --git a/levels/bitdw/header.h b/levels/bitdw/header.h index 15dbd35d7..f995c30e2 100644 --- a/levels/bitdw/header.h +++ b/levels/bitdw/header.h @@ -59,7 +59,6 @@ extern const Gfx bitdw_seg7_dl_0700CC00[]; extern const Gfx bitdw_seg7_dl_0700D190[]; extern const Gfx bitdw_seg7_dl_0700D3E8[]; extern const Collision bitdw_seg7_collision_level[]; -extern const MacroObject bitdw_seg7_macro_objs[]; extern const Collision bitdw_seg7_collision_0700F688[]; extern const Collision bitdw_seg7_collision_0700F70C[]; extern const Collision bitdw_seg7_collision_moving_pyramid[]; diff --git a/levels/bitdw/leveldata.c b/levels/bitdw/leveldata.c index de889e209..fa93d9a51 100644 --- a/levels/bitdw/leveldata.c +++ b/levels/bitdw/leveldata.c @@ -2,11 +2,7 @@ #include "sm64.h" #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 "textures.h" -#include "dialog_ids.h" #include "make_const_nonconst.h" #include "levels/bitdw/texture.inc.c" @@ -37,7 +33,6 @@ #include "levels/bitdw/collapsing_stairs_4/model.inc.c" #include "levels/bitdw/collapsing_stairs_5/model.inc.c" #include "levels/bitdw/areas/1/collision.inc.c" -#include "levels/bitdw/areas/1/macro.inc.c" #include "levels/bitdw/sliding_platform/collision.inc.c" #include "levels/bitdw/seesaw_platform/collision.inc.c" #include "levels/bitdw/square_platform/collision.inc.c" diff --git a/levels/bitdw/script.c b/levels/bitdw/script.c index 75b1d870d..dad70eb3e 100644 --- a/levels/bitdw/script.c +++ b/levels/bitdw/script.c @@ -16,7 +16,95 @@ #include "make_const_nonconst.h" #include "levels/bitdw/header.h" -static const LevelScript script_func_local_1[] = { + +static const LevelScript script_bitdw_macro_objects[] = { + // Macro objects + OBJECT(/*model*/ MODEL_EXCLAMATION_BOX, /*pos*/ -6420, -2900, 3880, /*angle*/ 0, 0, 0, /*behParam*/ (EXCLAMATION_BOX_BP_METAL_CAP << 16), /*beh*/ bhvExclamationBox), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ -1660, -3000, 3900, /*angle*/ 0, 0, 0, /*behParam*/ ((COIN_FORMATION_FLAG_FLYING | COIN_FORMATION_FLAG_RING) << 16), /*beh*/ bhvCoinFormation), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ -2400, -800, 1900, /*angle*/ 0, 0, 0, /*behParam*/ ((COIN_FORMATION_FLAG_NONE ) << 16), /*beh*/ bhvCoinFormation), + OBJECT(/*model*/ MODEL_AMP, /*pos*/ -5300, 20, 1000, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvCirclingAmp), + OBJECT(/*model*/ MODEL_AMP, /*pos*/ -7140, 500, 380, /*angle*/ 0, 0, 0, /*behParam*/ (1 << 16), /*beh*/ bhvCirclingAmp), + OBJECT(/*model*/ MODEL_AMP, /*pos*/ -7120, 1050, -2080, /*angle*/ 0, 0, 0, /*behParam*/ (1 << 16), /*beh*/ bhvCirclingAmp), + OBJECT(/*model*/ MODEL_AMP, /*pos*/ -6480, 240, 1000, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvCirclingAmp), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ -2060, 1200, -940, /*angle*/ 0, 0, 0, /*behParam*/ ((COIN_FORMATION_FLAG_FLYING | COIN_FORMATION_FLAG_RING) << 16), /*beh*/ bhvCoinFormation), + OBJECT(/*model*/ MODEL_YELLOW_COIN, /*pos*/ -170, 1070, 300, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvYellowCoin), + OBJECT(/*model*/ MODEL_YELLOW_COIN, /*pos*/ -170, 1070, 700, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvYellowCoin), + OBJECT(/*model*/ MODEL_YELLOW_COIN, /*pos*/ 1450, 1400, 300, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvYellowCoin), + OBJECT(/*model*/ MODEL_YELLOW_COIN, /*pos*/ 1450, 1400, 700, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvYellowCoin), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ 1660, -1980, 3660, /*angle*/ 0, 90, 0, /*behParam*/ ((COIN_FORMATION_FLAG_NONE ) << 16), /*beh*/ bhvCoinFormation), + OBJECT(/*model*/ MODEL_GOOMBA, /*pos*/ 3180, 1020, 240, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvGoomba), + OBJECT(/*model*/ MODEL_GOOMBA, /*pos*/ 2860, 1020, 580, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvGoomba), + OBJECT(/*model*/ MODEL_YELLOW_COIN, /*pos*/ 4640, 2360, 0, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvYellowCoin), + OBJECT(/*model*/ MODEL_YELLOW_COIN, /*pos*/ 4900, 2600, 0, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvYellowCoin), + OBJECT(/*model*/ MODEL_YELLOW_COIN, /*pos*/ 5180, 2820, 0, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvYellowCoin), + OBJECT(/*model*/ MODEL_YELLOW_COIN, /*pos*/ 2760, 1940, 500, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvYellowCoin), + OBJECT(/*model*/ MODEL_YELLOW_COIN, /*pos*/ 2760, 1940, 180, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvYellowCoin), + OBJECT(/*model*/ MODEL_YELLOW_COIN, /*pos*/ -2460, 812, 800, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvOneCoin), + OBJECT(/*model*/ MODEL_YELLOW_COIN, /*pos*/ -3080, 813, 840, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvOneCoin), + OBJECT(/*model*/ MODEL_YELLOW_COIN, /*pos*/ -3660, 873, 620, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvOneCoin), + OBJECT(/*model*/ MODEL_YELLOW_COIN, /*pos*/ -4060, 1011, 240, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvOneCoin), + OBJECT(/*model*/ MODEL_AMP, /*pos*/ -4620, 1220, -300, /*angle*/ 0, 0, 0, /*behParam*/ (2 << 16), /*beh*/ bhvCirclingAmp), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ -4620, 1220, -300, /*angle*/ 0, 0, 0, /*behParam*/ ((COIN_FORMATION_FLAG_RING ) << 16), /*beh*/ bhvCoinFormation), + OBJECT(/*model*/ MODEL_EXCLAMATION_BOX, /*pos*/ -4860, 1380, -300, /*angle*/ 0, 0, 0, /*behParam*/ (EXCLAMATION_BOX_BP_1UP_WALKING << 16), /*beh*/ bhvExclamationBox), + OBJECT(/*model*/ MODEL_YELLOW_COIN, /*pos*/ -150, -1200, 3660, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvYellowCoin), + OBJECT(/*model*/ MODEL_EXCLAMATION_BOX, /*pos*/ -5120, 1460, -2140, /*angle*/ 0, 0, 0, /*behParam*/ (EXCLAMATION_BOX_BP_COINS_3 << 16), /*beh*/ bhvExclamationBox), + OBJECT(/*model*/ MODEL_YELLOW_COIN, /*pos*/ 4380, 2120, 0, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvYellowCoin), + OBJECT(/*model*/ MODEL_YELLOW_COIN, /*pos*/ 5420, 3000, 0, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvYellowCoin), + OBJECT(/*model*/ MODEL_YELLOW_COIN, /*pos*/ -2357, 1200, -2454, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvYellowCoin), + OBJECT(/*model*/ MODEL_YELLOW_COIN, /*pos*/ -2357, 1300, -2454, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvYellowCoin), + OBJECT(/*model*/ MODEL_GOOMBA, /*pos*/ -2560, -1433, 3280, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvGoomba), + OBJECT(/*model*/ MODEL_GOOMBA, /*pos*/ -2060, -1433, 3540, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvGoomba), + OBJECT(/*model*/ MODEL_GOOMBA, /*pos*/ -2720, -1433, 3860, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvGoomba), + OBJECT(/*model*/ MODEL_GOOMBA, /*pos*/ -1680, 1024, 580, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvGoomba), + OBJECT(/*model*/ MODEL_RED_COIN, /*pos*/ -3100, -2900, 4520, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvRedCoin), + OBJECT(/*model*/ MODEL_RED_COIN, /*pos*/ -4740, 1050, -2130, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvRedCoin), + OBJECT(/*model*/ MODEL_RED_COIN, /*pos*/ -3120, 1160, -2570, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvRedCoin), + OBJECT(/*model*/ MODEL_RED_COIN, /*pos*/ -4613, 1220, -427, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvRedCoin), + OBJECT(/*model*/ MODEL_RED_COIN, /*pos*/ -1000, 1933, 466, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvRedCoin), + OBJECT(/*model*/ MODEL_1UP, /*pos*/ 33, 1900, 333, /*angle*/ 0, 0, 0, /*behParam*/ (MUSHROOM_BP_REQUIRES_BOWSER_1 << 16), /*beh*/ bhv1Up), + OBJECT(/*model*/ MODEL_RED_COIN, /*pos*/ -6475, 125, 890, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvRedCoin), + OBJECT(/*model*/ MODEL_RED_COIN, /*pos*/ -7810, -3100, 4900, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvRedCoin), + OBJECT(/*model*/ MODEL_RED_COIN, /*pos*/ 1500, 1066, -166, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvRedCoin), + OBJECT(/*model*/ MODEL_WOODEN_SIGNPOST, /*pos*/ 5940, 2765, -280, /*angle*/ 0, 0, 0, /*behParam*/ (DIALOG_066 << 16), /*beh*/ bhvMessagePanel), + OBJECT(/*model*/ MODEL_YELLOW_COIN, /*pos*/ -2357, 1400, -2454, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvYellowCoin), + OBJECT(/*model*/ MODEL_YELLOW_COIN, /*pos*/ -170, 1070, 500, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvYellowCoin), + OBJECT(/*model*/ MODEL_YELLOW_COIN, /*pos*/ 1450, 1400, 500, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvYellowCoin), + OBJECT(/*model*/ MODEL_1UP, /*pos*/ 610, 1045, -167, /*angle*/ 0, 0, 0, /*behParam*/ (MUSHROOM_BP_REQUIRES_NONE << 16), /*beh*/ bhv1Up), + OBJECT(/*model*/ MODEL_1UP, /*pos*/ -485, 1054, -167, /*angle*/ 0, 0, 0, /*behParam*/ (MUSHROOM_BP_REQUIRES_BOWSER_1 << 16), /*beh*/ bhv1Up), + OBJECT(/*model*/ MODEL_1UP, /*pos*/ 1100, 2080, 363, /*angle*/ 0, 0, 0, /*behParam*/ (MUSHROOM_BP_REQUIRES_BOWSER_2 << 16), /*beh*/ bhv1Up), + OBJECT(/*model*/ MODEL_PURPLE_SWITCH, /*pos*/ -3100, -2946, 3530, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvFloorSwitchHiddenObjects), + OBJECT(/*model*/ MODEL_BREAKABLE_BOX, /*pos*/ -7810, -3360, 4500, /*angle*/ 0, 0, 0, /*behParam*/ (BREAKABLE_BOX_BP_NO_COINS << 16), /*beh*/ bhvHiddenObject), + OBJECT(/*model*/ MODEL_BREAKABLE_BOX, /*pos*/ -7810, -3360, 4700, /*angle*/ 0, 0, 0, /*behParam*/ (BREAKABLE_BOX_BP_NO_COINS << 16), /*beh*/ bhvHiddenObject), + OBJECT(/*model*/ MODEL_BREAKABLE_BOX, /*pos*/ -7810, -3360, 4900, /*angle*/ 0, 0, 0, /*behParam*/ (BREAKABLE_BOX_BP_NO_COINS << 16), /*beh*/ bhvHiddenObject), + OBJECT(/*model*/ MODEL_BREAKABLE_BOX, /*pos*/ -3100, -3145, 4518, /*angle*/ 0, 0, 0, /*behParam*/ (BREAKABLE_BOX_BP_NO_COINS << 16), /*beh*/ bhvHiddenObject), + OBJECT(/*model*/ MODEL_EXCLAMATION_BOX, /*pos*/ -2420, -1140, 3700, /*angle*/ 0, 0, 0, /*behParam*/ (EXCLAMATION_BOX_BP_1UP_RUNNING_AWAY << 16), /*beh*/ bhvExclamationBox), + // Special objects + OBJECT(/*model*/ MODEL_LEVEL_GEOMETRY_03, /*pos*/ -6368, -3972, 3883, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvStaticObject), + OBJECT(/*model*/ MODEL_LEVEL_GEOMETRY_04, /*pos*/ -3245, -3358, 3893, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvStaticObject), + OBJECT(/*model*/ MODEL_LEVEL_GEOMETRY_05, /*pos*/ -2405, -1228, 1740, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvStaticObject), + OBJECT(/*model*/ MODEL_LEVEL_GEOMETRY_06, /*pos*/ -5861, -434, 306, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvStaticObject), + OBJECT(/*model*/ MODEL_LEVEL_GEOMETRY_07, /*pos*/ -5062, 922, -1895, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvStaticObject), + OBJECT(/*model*/ MODEL_LEVEL_GEOMETRY_08, /*pos*/ -7116, 717, -819, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvStaticObject), + OBJECT(/*model*/ MODEL_LEVEL_GEOMETRY_09, /*pos*/ -4601, 0, -312, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvStaticObject), + OBJECT(/*model*/ MODEL_LEVEL_GEOMETRY_0A, /*pos*/ 797, -3282, 3868, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvStaticObject), + OBJECT(/*model*/ MODEL_LEVEL_GEOMETRY_0B, /*pos*/ -2047, -1868, 3685, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvStaticObject), + OBJECT(/*model*/ MODEL_LEVEL_GEOMETRY_0C, /*pos*/ -966, 922, 44, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvStaticObject), + OBJECT(/*model*/ MODEL_LEVEL_GEOMETRY_0D, /*pos*/ 2207, 922, 44, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvStaticObject), + OBJECT(/*model*/ MODEL_LEVEL_GEOMETRY_0E, /*pos*/ -7108, 209, 356, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvStaticObject), + OBJECT(/*model*/ MODEL_LEVEL_GEOMETRY_0E, /*pos*/ -7103, 844, -2088, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvStaticObject), + OBJECT(/*model*/ MODEL_LEVEL_GEOMETRY_0E, /*pos*/ -6466, 9, 986, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvStaticObject), + OBJECT(/*model*/ MODEL_LEVEL_GEOMETRY_0E, /*pos*/ -4013, -670, 990, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvStaticObject), + OBJECT(/*model*/ MODEL_LEVEL_GEOMETRY_0E, /*pos*/ -5251, -276, 967, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvStaticObject), + OBJECT(/*model*/ MODEL_LEVEL_GEOMETRY_0E, /*pos*/ -7665, 502, -251, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvStaticObject), + OBJECT(/*model*/ MODEL_LEVEL_GEOMETRY_0F, /*pos*/ 5382, 1536, -6, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvStaticObject), + OBJECT(/*model*/ MODEL_LEVEL_GEOMETRY_10, /*pos*/ -1658, -3281, 3893, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvStaticObject), + OBJECT(/*model*/ MODEL_LEVEL_GEOMETRY_10, /*pos*/ -2656, 889, -2156, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvStaticObject), + OBJECT(/*model*/ MODEL_LEVEL_GEOMETRY_10, /*pos*/ -2052, 889, -928, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvStaticObject), + OBJECT(/*model*/ MODEL_LEVEL_GEOMETRY_11, /*pos*/ -3168, 710, 607, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvStaticObject), + RETURN(), +}; + +static const LevelScript script_bitdw_objects_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), @@ -32,13 +120,13 @@ static const LevelScript script_func_local_1[] = { RETURN(), }; -static const LevelScript script_func_local_2[] = { +static const LevelScript script_bitdw_objects_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), RETURN(), }; -static const LevelScript script_func_local_3[] = { +static const LevelScript script_bitdw_objects_3[] = { OBJECT(/*model*/ MODEL_NONE, /*pos*/ 7180, 3000, 0, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvBowserCourseRedCoinStar), RETURN(), }; @@ -94,11 +182,11 @@ const LevelScript level_bitdw_entry[] = { 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), - JUMP_LINK(script_func_local_1), - JUMP_LINK(script_func_local_2), - JUMP_LINK(script_func_local_3), + JUMP_LINK(script_bitdw_objects_1), + JUMP_LINK(script_bitdw_objects_2), + JUMP_LINK(script_bitdw_objects_3), TERRAIN(/*terrainData*/ bitdw_seg7_collision_level), - MACRO_OBJECTS(/*objList*/ bitdw_seg7_macro_objs), + JUMP_LINK(script_bitdw_macro_objects), SHOW_DIALOG(/*index*/ 0x00, DIALOG_090), SET_BACKGROUND_MUSIC(/*settingsPreset*/ 0x0000, /*seq*/ SEQ_LEVEL_KOOPA_ROAD), TERRAIN_TYPE(/*terrainType*/ TERRAIN_STONE), diff --git a/levels/bitfs/areas/1/collision.inc.c b/levels/bitfs/areas/1/collision.inc.c index e88d3d172..0f38e009f 100644 --- a/levels/bitfs/areas/1/collision.inc.c +++ b/levels/bitfs/areas/1/collision.inc.c @@ -2052,30 +2052,5 @@ const Collision bitfs_seg7_collision_level[] = { COL_TRI(35, 33, 34), COL_TRI(801, 802, 509), COL_TRI_STOP(), - COL_SPECIAL_INIT(24), - SPECIAL_OBJECT_WITH_YAW(/*preset*/ special_null_start, /*pos*/ -7577, -2764, 0, /*yaw*/ 64), // unused, probably an early way to set initial position - SPECIAL_OBJECT_WITH_YAW(/*preset*/ special_level_geo_03, /*pos*/ -5938, -3071, 0, /*yaw*/ 0), - SPECIAL_OBJECT_WITH_YAW(/*preset*/ special_level_geo_04, /*pos*/ -5488, -1535, 41, /*yaw*/ 0), - SPECIAL_OBJECT_WITH_YAW(/*preset*/ special_level_geo_04, /*pos*/ 4342, 1741, 41, /*yaw*/ 0), - SPECIAL_OBJECT_WITH_YAW(/*preset*/ special_level_geo_05, /*pos*/ -1965, -3030, 10, /*yaw*/ 0), - SPECIAL_OBJECT_WITH_YAW(/*preset*/ special_level_geo_06, /*pos*/ -1996, 3277, -19, /*yaw*/ 0), - SPECIAL_OBJECT_WITH_YAW(/*preset*/ special_level_geo_06, /*pos*/ -4914, 0, -19, /*yaw*/ 0), - SPECIAL_OBJECT_WITH_YAW(/*preset*/ special_level_geo_07, /*pos*/ 1843, -3071, -398, /*yaw*/ 0), - SPECIAL_OBJECT_WITH_YAW(/*preset*/ special_level_geo_08, /*pos*/ 4659, -1663, 307, /*yaw*/ 0), - SPECIAL_OBJECT_WITH_YAW(/*preset*/ special_level_geo_09, /*pos*/ 3123, -511, 307, /*yaw*/ 0), - SPECIAL_OBJECT_WITH_YAW(/*preset*/ special_level_geo_0A, /*pos*/ 1382, 0, -6, /*yaw*/ 0), - SPECIAL_OBJECT_WITH_YAW(/*preset*/ special_level_geo_0B, /*pos*/ 1229, 205, -410, /*yaw*/ 0), - SPECIAL_OBJECT_WITH_YAW(/*preset*/ special_level_geo_0B, /*pos*/ -3225, 3482, -825, /*yaw*/ 0), - SPECIAL_OBJECT_WITH_YAW(/*preset*/ special_level_geo_0B, /*pos*/ -1381, 3482, -821, /*yaw*/ 0), - SPECIAL_OBJECT_WITH_YAW(/*preset*/ special_level_geo_0C, /*pos*/ -1433, 717, -127, /*yaw*/ 0), - SPECIAL_OBJECT_WITH_YAW(/*preset*/ special_level_geo_0D, /*pos*/ -741, 589, 307, /*yaw*/ 0), - SPECIAL_OBJECT_WITH_YAW(/*preset*/ special_level_geo_0E, /*pos*/ -5017, 205, 310, /*yaw*/ 0), - SPECIAL_OBJECT_WITH_YAW(/*preset*/ special_level_geo_0F, /*pos*/ -6297, 3251, 1, /*yaw*/ 0), - SPECIAL_OBJECT_WITH_YAW(/*preset*/ special_level_geo_10, /*pos*/ -4556, 3482, 97, /*yaw*/ 0), - SPECIAL_OBJECT_WITH_YAW(/*preset*/ special_level_geo_11, /*pos*/ 1946, 4506, 96, /*yaw*/ 0), - SPECIAL_OBJECT_WITH_YAW(/*preset*/ special_level_geo_12, /*pos*/ 1946, 4352, 96, /*yaw*/ 0), - SPECIAL_OBJECT_WITH_YAW(/*preset*/ special_level_geo_13, /*pos*/ 6540, 3796, 83, /*yaw*/ 0), - SPECIAL_OBJECT_WITH_YAW(/*preset*/ special_level_geo_14, /*pos*/ 6740, 4224, 74, /*yaw*/ 0), - SPECIAL_OBJECT_WITH_YAW(/*preset*/ special_level_geo_15, /*pos*/ 3123, 3277, -19, /*yaw*/ 0), COL_END(), }; diff --git a/levels/bitfs/areas/1/macro.inc.c b/levels/bitfs/areas/1/macro.inc.c deleted file mode 100644 index 3e7a7bb2f..000000000 --- a/levels/bitfs/areas/1/macro.inc.c +++ /dev/null @@ -1,44 +0,0 @@ -// 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_END(), -}; diff --git a/levels/bitfs/header.h b/levels/bitfs/header.h index a8b7536bb..d65883fcb 100644 --- a/levels/bitfs/header.h +++ b/levels/bitfs/header.h @@ -73,7 +73,6 @@ extern const Gfx bitfs_seg7_dl_07011BA0[]; extern const Gfx bitfs_seg7_dl_07011D98[]; extern const Gfx bitfs_seg7_dl_07011E28[]; extern const Collision bitfs_seg7_collision_level[]; -extern const MacroObject bitfs_seg7_macro_objs[]; extern const Collision bitfs_seg7_collision_elevator[]; extern const Collision bitfs_seg7_collision_sinking_cage_platform[]; extern const Collision bitfs_seg7_collision_inverted_pyramid[]; diff --git a/levels/bitfs/leveldata.c b/levels/bitfs/leveldata.c index 1d22a4f88..e179d417f 100644 --- a/levels/bitfs/leveldata.c +++ b/levels/bitfs/leveldata.c @@ -2,9 +2,6 @@ #include "sm64.h" #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 "textures.h" #include "make_const_nonconst.h" @@ -43,7 +40,6 @@ #include "levels/bitfs/sinking_platforms/model.inc.c" #include "levels/bitfs/seesaw_platform/model.inc.c" #include "levels/bitfs/areas/1/collision.inc.c" -#include "levels/bitfs/areas/1/macro.inc.c" #include "levels/bitfs/elevator/collision.inc.c" #include "levels/bitfs/sinking_cage_platform/collision.inc.c" #include "levels/bitfs/tilting_square_platform/collision.inc.c" diff --git a/levels/bitfs/script.c b/levels/bitfs/script.c index fdf0aa2d4..d45032592 100644 --- a/levels/bitfs/script.c +++ b/levels/bitfs/script.c @@ -15,7 +15,77 @@ #include "make_const_nonconst.h" #include "levels/bitfs/header.h" -static const LevelScript script_func_local_1[] = { + +static const LevelScript script_bitfs_macro_objects[] = { + // Macro objects + OBJECT(/*model*/ MODEL_YELLOW_COIN, /*pos*/ -1990, -2780, -590, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvYellowCoin), + OBJECT(/*model*/ MODEL_YELLOW_COIN, /*pos*/ -2860, -2780, -580, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvYellowCoin), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ 1130, -3000, 400, /*angle*/ 0, 0, 0, /*behParam*/ ((COIN_FORMATION_FLAG_FLYING ) << 16), /*beh*/ bhvCoinFormation), + OBJECT(/*model*/ MODEL_1UP, /*pos*/ -4320, -2640, -500, /*angle*/ 0, 0, 0, /*behParam*/ (MUSHROOM_BP_REQUIRES_NONE << 16), /*beh*/ bhv1Up), + OBJECT(/*model*/ MODEL_BULLY, /*pos*/ 2340, -2764, 580, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvSmallBully), + OBJECT(/*model*/ MODEL_AMP, /*pos*/ 6600, -2770, 280, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvCirclingAmp), + OBJECT(/*model*/ MODEL_HEART, /*pos*/ 3660, -2700, 280, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvRecoveryHeart), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ 3880, -1140, 260, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvHidden1upInPoleSpawner), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ -1900, 652, 320, /*angle*/ 0, 0, 0, /*behParam*/ ((COIN_FORMATION_FLAG_FLYING | COIN_FORMATION_FLAG_RING ) << 16), /*beh*/ bhvCoinFormation), + OBJECT(/*model*/ MODEL_BULLY, /*pos*/ -1720, 1320, -340, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvSmallBully), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ -640, 800, 180, /*angle*/ 0, 0, 0, /*behParam*/ ((COIN_FORMATION_FLAG_NONE ) << 16), /*beh*/ bhvCoinFormation), + OBJECT(/*model*/ MODEL_BULLY, /*pos*/ -5340, 410, 20, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvSmallBully), + OBJECT(/*model*/ MODEL_BULLY, /*pos*/ -5200, 410, 700, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvSmallBully), + OBJECT(/*model*/ MODEL_EXCLAMATION_BOX, /*pos*/ -7400, 1500, 0, /*angle*/ 0, 0, 0, /*behParam*/ (EXCLAMATION_BOX_BP_1UP_WALKING << 16), /*beh*/ bhvExclamationBox), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ -6150, 1480, 500, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvHidden1upTrigger), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ -6150, 2600, 500, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvHidden1upTrigger), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ -6150, 3080, 500, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvHidden1upTrigger), + OBJECT(/*model*/ MODEL_1UP, /*pos*/ -6460, 2760, 320, /*angle*/ 0, 0, 0, /*behParam*/ (3 << 16), /*beh*/ bhvHidden1up), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ -6360, 3760, -840, /*angle*/ 0, 90, 0, /*behParam*/ ((COIN_FORMATION_FLAG_NONE ) << 16), /*beh*/ bhvCoinFormation), + OBJECT(/*model*/ MODEL_HEART, /*pos*/ -20, 3850, 160, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvRecoveryHeart), + OBJECT(/*model*/ MODEL_EXCLAMATION_BOX, /*pos*/ 2440, 5520, 140, /*angle*/ 0, 0, 0, /*behParam*/ (EXCLAMATION_BOX_BP_1UP_WALKING << 16), /*beh*/ bhvExclamationBox), + OBJECT(/*model*/ MODEL_1UP, /*pos*/ 1198, 5478, 103, /*angle*/ 0, 0, 0, /*behParam*/ (MUSHROOM_BP_REQUIRES_BOWSER_2 << 16), /*beh*/ bhv1Up), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ -2610, 3600, 0, /*angle*/ 0, 0, 0, /*behParam*/ ((COIN_FORMATION_FLAG_FLYING ) << 16), /*beh*/ bhvCoinFormation), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ 1231, -2168, -1747, /*angle*/ 0, 0, 0, /*behParam*/ ((COIN_FORMATION_FLAG_RING ) << 16), /*beh*/ bhvCoinFormation), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ -5705, 800, 0, /*angle*/ 0, 0, 0, /*behParam*/ ((COIN_FORMATION_FLAG_FLYING | COIN_FORMATION_FLAG_VERTICAL) << 16), /*beh*/ bhvCoinFormation), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ 3660, -2764, 300, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvGoombaTripletSpawner), + OBJECT(/*model*/ MODEL_1UP, /*pos*/ -174, -2840, -138, /*angle*/ 0, 0, 0, /*behParam*/ (MUSHROOM_BP_REQUIRES_BOWSER_2 << 16), /*beh*/ bhv1Up), + OBJECT(/*model*/ MODEL_RED_COIN, /*pos*/ 2888, -1375, 310, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvRedCoin), + OBJECT(/*model*/ MODEL_RED_COIN, /*pos*/ 1230, -1900, -1747, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvRedCoin), + OBJECT(/*model*/ MODEL_RED_COIN, /*pos*/ 5800, -2000, 0, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvRedCoin), + OBJECT(/*model*/ MODEL_RED_COIN, /*pos*/ -1846, 1600, -476, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvRedCoin), + OBJECT(/*model*/ MODEL_RED_COIN, /*pos*/ -4210, 2615, 280, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvRedCoin), + OBJECT(/*model*/ MODEL_BLACK_BOBOMB, /*pos*/ -5361, 3686, 315, /*angle*/ 0, 0, 0, /*behParam*/ (BOBOMB_BP_STYPE_GENERIC << 16), /*beh*/ bhvBobomb), + OBJECT(/*model*/ MODEL_RED_COIN, /*pos*/ -1390, 3575, -420, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvRedCoin), + OBJECT(/*model*/ MODEL_RED_COIN, /*pos*/ 3065, 4610, 92, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvRedCoin), + OBJECT(/*model*/ MODEL_RED_COIN, /*pos*/ 4330, -790, -50, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvRedCoin), + OBJECT(/*model*/ MODEL_EXCLAMATION_BOX, /*pos*/ 7220, -1800, 260, /*angle*/ 0, 0, 0, /*behParam*/ (EXCLAMATION_BOX_BP_COINS_3 << 16), /*beh*/ bhvExclamationBox), + OBJECT(/*model*/ MODEL_BOWLING_BALL, /*pos*/ -7280, 3100, -925, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvFireSpitter), + OBJECT(/*model*/ MODEL_AMP, /*pos*/ -2325, 3625, 0, /*angle*/ 0, 0, 0, /*behParam*/ (2 << 16), /*beh*/ bhvCirclingAmp), + OBJECT(/*model*/ MODEL_EXCLAMATION_BOX, /*pos*/ -5340, 4000, 100, /*angle*/ 0, 0, 0, /*behParam*/ (EXCLAMATION_BOX_BP_COINS_10 << 16), /*beh*/ bhvExclamationBox), + // Special objects + OBJECT(/*model*/ MODEL_LEVEL_GEOMETRY_03, /*pos*/ -5938, -3071, 0, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvStaticObject), + OBJECT(/*model*/ MODEL_LEVEL_GEOMETRY_04, /*pos*/ -5488, -1535, 41, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvStaticObject), + OBJECT(/*model*/ MODEL_LEVEL_GEOMETRY_04, /*pos*/ 4342, 1741, 41, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvStaticObject), + OBJECT(/*model*/ MODEL_LEVEL_GEOMETRY_05, /*pos*/ -1965, -3030, 10, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvStaticObject), + OBJECT(/*model*/ MODEL_LEVEL_GEOMETRY_06, /*pos*/ -1996, 3277, -19, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvStaticObject), + OBJECT(/*model*/ MODEL_LEVEL_GEOMETRY_06, /*pos*/ -4914, 0, -19, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvStaticObject), + OBJECT(/*model*/ MODEL_LEVEL_GEOMETRY_07, /*pos*/ 1843, -3071, -398, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvStaticObject), + OBJECT(/*model*/ MODEL_LEVEL_GEOMETRY_08, /*pos*/ 4659, -1663, 307, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvStaticObject), + OBJECT(/*model*/ MODEL_LEVEL_GEOMETRY_09, /*pos*/ 3123, -511, 307, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvStaticObject), + OBJECT(/*model*/ MODEL_LEVEL_GEOMETRY_0A, /*pos*/ 1382, 0, -6, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvStaticObject), + OBJECT(/*model*/ MODEL_LEVEL_GEOMETRY_0B, /*pos*/ 1229, 205, -410, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvStaticObject), + OBJECT(/*model*/ MODEL_LEVEL_GEOMETRY_0B, /*pos*/ -3225, 3482, -825, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvStaticObject), + OBJECT(/*model*/ MODEL_LEVEL_GEOMETRY_0B, /*pos*/ -1381, 3482, -821, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvStaticObject), + OBJECT(/*model*/ MODEL_LEVEL_GEOMETRY_0C, /*pos*/ -1433, 717, -127, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvStaticObject), + OBJECT(/*model*/ MODEL_LEVEL_GEOMETRY_0D, /*pos*/ -741, 589, 307, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvStaticObject), + OBJECT(/*model*/ MODEL_LEVEL_GEOMETRY_0E, /*pos*/ -5017, 205, 310, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvStaticObject), + OBJECT(/*model*/ MODEL_LEVEL_GEOMETRY_0F, /*pos*/ -6297, 3251, 1, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvStaticObject), + OBJECT(/*model*/ MODEL_LEVEL_GEOMETRY_10, /*pos*/ -4556, 3482, 97, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvStaticObject), + OBJECT(/*model*/ MODEL_LEVEL_GEOMETRY_11, /*pos*/ 1946, 4506, 96, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvStaticObject), + OBJECT(/*model*/ MODEL_LEVEL_GEOMETRY_12, /*pos*/ 1946, 4352, 96, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvStaticObject), + OBJECT(/*model*/ MODEL_LEVEL_GEOMETRY_13, /*pos*/ 6540, 3796, 83, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvStaticObject), + OBJECT(/*model*/ MODEL_LEVEL_GEOMETRY_14, /*pos*/ 6740, 4224, 74, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvStaticObject), + OBJECT(/*model*/ MODEL_LEVEL_GEOMETRY_15, /*pos*/ 3123, 3277, -19, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvStaticObject), + RETURN(), +}; + +static const LevelScript script_bitfs_objects_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), @@ -38,14 +108,14 @@ static const LevelScript script_func_local_1[] = { RETURN(), }; -static const LevelScript script_func_local_2[] = { +static const LevelScript script_bitfs_objects_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), RETURN(), }; -static const LevelScript script_func_local_3[] = { +static const LevelScript script_bitfs_objects_3[] = { OBJECT(/*model*/ MODEL_NONE, /*pos*/ 1200, 5700, 160, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvBowserCourseRedCoinStar), RETURN(), }; @@ -107,11 +177,11 @@ const LevelScript level_bitfs_entry[] = { 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), - JUMP_LINK(script_func_local_1), - JUMP_LINK(script_func_local_2), - JUMP_LINK(script_func_local_3), + JUMP_LINK(script_bitfs_objects_1), + JUMP_LINK(script_bitfs_objects_2), + JUMP_LINK(script_bitfs_objects_3), TERRAIN(/*terrainData*/ bitfs_seg7_collision_level), - MACRO_OBJECTS(/*objList*/ bitfs_seg7_macro_objs), + JUMP_LINK(script_bitfs_macro_objects), SET_BACKGROUND_MUSIC(/*settingsPreset*/ 0x0000, /*seq*/ SEQ_LEVEL_KOOPA_ROAD), TERRAIN_TYPE(/*terrainType*/ TERRAIN_STONE), END_AREA(), diff --git a/levels/bits/areas/1/collision.inc.c b/levels/bits/areas/1/collision.inc.c index af2e6c24d..3c2ff3c89 100644 --- a/levels/bits/areas/1/collision.inc.c +++ b/levels/bits/areas/1/collision.inc.c @@ -2399,28 +2399,5 @@ const Collision bits_seg7_collision_level[] = { COL_TRI(135, 215, 216), COL_TRI(135, 216, 214), COL_TRI_STOP(), - COL_SPECIAL_INIT(22), - SPECIAL_OBJECT_WITH_YAW(/*preset*/ special_null_start, /*pos*/ -7039, -4812, 4, /*yaw*/ 64), // unused, probably an early way to set initial position - SPECIAL_OBJECT_WITH_YAW(/*preset*/ special_level_geo_03, /*pos*/ -4505, -5119, 0, /*yaw*/ 0), - SPECIAL_OBJECT_WITH_YAW(/*preset*/ special_level_geo_04, /*pos*/ -2291, -2073, -762, /*yaw*/ 0), - SPECIAL_OBJECT_WITH_YAW(/*preset*/ special_level_geo_05, /*pos*/ 3891, -3276, -705, /*yaw*/ 0), - SPECIAL_OBJECT_WITH_YAW(/*preset*/ special_level_geo_06, /*pos*/ 1753, -1986, -531, /*yaw*/ 0), - SPECIAL_OBJECT_WITH_YAW(/*preset*/ special_level_geo_07, /*pos*/ -5414, -1330, -787, /*yaw*/ 0), - SPECIAL_OBJECT_WITH_YAW(/*preset*/ special_level_geo_07, /*pos*/ -3182, 2059, -904, /*yaw*/ 0), - SPECIAL_OBJECT_WITH_YAW(/*preset*/ special_level_geo_08, /*pos*/ -3182, 1854, -904, /*yaw*/ 0), - SPECIAL_OBJECT_WITH_YAW(/*preset*/ special_level_geo_08, /*pos*/ 759, 5628, -1008, /*yaw*/ 0), - SPECIAL_OBJECT_WITH_YAW(/*preset*/ special_level_geo_09, /*pos*/ -4902, -895, -1171, /*yaw*/ 0), - SPECIAL_OBJECT_WITH_YAW(/*preset*/ special_level_geo_0A, /*pos*/ -3882, -357, -1241, /*yaw*/ 0), - SPECIAL_OBJECT_WITH_YAW(/*preset*/ special_level_geo_0B, /*pos*/ -1199, -387, -1308, /*yaw*/ 0), - SPECIAL_OBJECT_WITH_YAW(/*preset*/ special_level_geo_0C, /*pos*/ 5584, 2735, -1851, /*yaw*/ 0), - SPECIAL_OBJECT_WITH_YAW(/*preset*/ special_level_geo_0D, /*pos*/ -5248, 3800, -895, /*yaw*/ 0), - SPECIAL_OBJECT_WITH_YAW(/*preset*/ special_level_geo_0D, /*pos*/ -1356, 3800, -895, /*yaw*/ 0), - SPECIAL_OBJECT_WITH_YAW(/*preset*/ special_level_geo_0E, /*pos*/ -6459, 3800, -904, /*yaw*/ 0), - SPECIAL_OBJECT_WITH_YAW(/*preset*/ special_level_geo_0F, /*pos*/ -930, 2884, -904, /*yaw*/ 0), - SPECIAL_OBJECT_WITH_YAW(/*preset*/ special_level_geo_10, /*pos*/ 2486, -438, -899, /*yaw*/ 0), - SPECIAL_OBJECT_WITH_YAW(/*preset*/ special_level_geo_11, /*pos*/ 563, 2249, -904, /*yaw*/ 0), - SPECIAL_OBJECT_WITH_YAW(/*preset*/ special_level_geo_12, /*pos*/ -6459, 2039, -904, /*yaw*/ 0), - SPECIAL_OBJECT_WITH_YAW(/*preset*/ special_level_geo_13, /*pos*/ 1143, 4670, -494, /*yaw*/ 0), - SPECIAL_OBJECT_WITH_YAW(/*preset*/ special_level_geo_14, /*pos*/ 349, 6268, -4054, /*yaw*/ 0), COL_END(), }; diff --git a/levels/bits/areas/1/macro.inc.c b/levels/bits/areas/1/macro.inc.c deleted file mode 100644 index 663871c0f..000000000 --- a/levels/bits/areas/1/macro.inc.c +++ /dev/null @@ -1,60 +0,0 @@ -// 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_END(), -}; diff --git a/levels/bits/header.h b/levels/bits/header.h index 9a7b9e64f..5b08ddd97 100644 --- a/levels/bits/header.h +++ b/levels/bits/header.h @@ -71,7 +71,6 @@ extern const Gfx bits_seg7_dl_07016300[]; extern const Gfx bits_seg7_dl_07016AA0[]; extern const Gfx bits_seg7_dl_07016DA0[]; extern const Collision bits_seg7_collision_level[]; -extern const MacroObject bits_seg7_macro_objs[]; extern const Collision bits_seg7_collision_0701A9A0[]; extern const Collision bits_seg7_collision_0701AA0C[]; extern const Collision bits_seg7_collision_0701AA84[]; diff --git a/levels/bits/leveldata.c b/levels/bits/leveldata.c index 50b749abc..dbd54bf4d 100644 --- a/levels/bits/leveldata.c +++ b/levels/bits/leveldata.c @@ -2,9 +2,6 @@ #include "sm64.h" #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 "textures.h" #include "make_const_nonconst.h" @@ -42,7 +39,6 @@ #include "levels/bits/areas/1/31/model.inc.c" #include "levels/bits/areas/1/32/model.inc.c" #include "levels/bits/areas/1/collision.inc.c" -#include "levels/bits/areas/1/macro.inc.c" #include "levels/bits/areas/1/20/collision.inc.c" #include "levels/bits/areas/1/21/collision.inc.c" #include "levels/bits/areas/1/22/collision.inc.c" diff --git a/levels/bits/script.c b/levels/bits/script.c index 3a0fd1924..1827b7e45 100644 --- a/levels/bits/script.c +++ b/levels/bits/script.c @@ -15,7 +15,91 @@ #include "make_const_nonconst.h" #include "levels/bits/header.h" -static const LevelScript script_func_local_1[] = { + +static const LevelScript script_bits_macro_objects[] = { + // Macro objects + OBJECT(/*model*/ MODEL_YELLOW_COIN, /*pos*/ -1400, -4000, 0, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvYellowCoin), + OBJECT(/*model*/ MODEL_YELLOW_COIN, /*pos*/ -272, -4000, 0, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvYellowCoin), + OBJECT(/*model*/ MODEL_YELLOW_COIN, /*pos*/ 840, -4000, 0, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvYellowCoin), + OBJECT(/*model*/ MODEL_AMP, /*pos*/ 4100, -1320, -1800, /*angle*/ 0, 0, 0, /*behParam*/ (1 << 16), /*beh*/ bhvCirclingAmp), + OBJECT(/*model*/ MODEL_GOOMBA, /*pos*/ 6180, -1791, 0, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvGoomba), + OBJECT(/*model*/ MODEL_GOOMBA, /*pos*/ 6260, -1453, -1800, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvGoomba), + OBJECT(/*model*/ MODEL_PIRANHA_PLANT, /*pos*/ 1920, -1187, -1840, /*angle*/ 0, 0, 0, /*behParam*/ (FIRE_PIRANHA_PLANT_BP_NORMAL << 16), /*beh*/ bhvFirePiranhaPlant), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ -5080, -2457, -800, /*angle*/ 0, 0, 0, /*behParam*/ ((COIN_FORMATION_FLAG_NONE) << 16), /*beh*/ bhvCoinFormation), + OBJECT(/*model*/ MODEL_1UP, /*pos*/ 1380, -1740, -660, /*angle*/ 0, 0, 0, /*behParam*/ (MUSHROOM_BP_REQUIRES_NONE << 16), /*beh*/ bhv1Up), + OBJECT(/*model*/ MODEL_WHOMP, /*pos*/ -4180, -1330, -800, /*angle*/ 0, 90, 0, /*behParam*/ 0x00000000, /*beh*/ bhvSmallWhomp), + OBJECT(/*model*/ MODEL_CHUCKYA, /*pos*/ -3909, -409, -1199, /*angle*/ 0, 90, 0, /*behParam*/ 0x00000000, /*beh*/ bhvChuckya), + OBJECT(/*model*/ MODEL_YELLOW_COIN, /*pos*/ 600, -200, -900, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvYellowCoin), + OBJECT(/*model*/ MODEL_YELLOW_COIN, /*pos*/ 900, 60, -900, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvYellowCoin), + OBJECT(/*model*/ MODEL_YELLOW_COIN, /*pos*/ 1200, 310, -900, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvYellowCoin), + OBJECT(/*model*/ MODEL_YELLOW_COIN, /*pos*/ 1500, 560, -900, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvYellowCoin), + OBJECT(/*model*/ MODEL_YELLOW_COIN, /*pos*/ 1800, 810, -900, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvYellowCoin), + OBJECT(/*model*/ MODEL_YELLOW_COIN, /*pos*/ 2100, 1060, -900, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvYellowCoin), + OBJECT(/*model*/ MODEL_HEART, /*pos*/ 1279, 2639, -959, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvRecoveryHeart), + OBJECT(/*model*/ MODEL_1UP, /*pos*/ -1399, 2750, -1159, /*angle*/ 0, 0, 0, /*behParam*/ (MUSHROOM_BP_REQUIRES_NONE << 16), /*beh*/ bhv1Up), + OBJECT(/*model*/ MODEL_BLACK_BOBOMB, /*pos*/ -2839, 2059, -959, /*angle*/ 0, 0, 0, /*behParam*/ (BOBOMB_BP_STYPE_GENERIC << 16), /*beh*/ bhvBobomb), + OBJECT(/*model*/ MODEL_BLACK_BOBOMB, /*pos*/ -3479, 2059, -799, /*angle*/ 0, 0, 0, /*behParam*/ (BOBOMB_BP_STYPE_GENERIC << 16), /*beh*/ bhvBobomb), + OBJECT(/*model*/ MODEL_YELLOW_COIN, /*pos*/ -7200, 2080, -890, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvYellowCoin), + OBJECT(/*model*/ MODEL_YELLOW_COIN, /*pos*/ -6600, 2080, -180, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvYellowCoin), + OBJECT(/*model*/ MODEL_YELLOW_COIN, /*pos*/ -6600, 2080, -1550, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvYellowCoin), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ -6600, 2080, -180, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvHidden1upTrigger), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ -7200, 2080, -890, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvHidden1upTrigger), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ -6600, 2080, -1550, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvHidden1upTrigger), + OBJECT(/*model*/ MODEL_1UP, /*pos*/ -6640, 2280, -890, /*angle*/ 0, 0, 0, /*behParam*/ (3 << 16), /*beh*/ bhvHidden1up), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ -5239, 3839, -999, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvGoombaTripletSpawner), + OBJECT(/*model*/ MODEL_BLACK_BOBOMB, /*pos*/ -1559, 3800, -1079, /*angle*/ 0, 0, 0, /*behParam*/ (BOBOMB_BP_STYPE_GENERIC << 16), /*beh*/ bhvBobomb), + OBJECT(/*model*/ MODEL_BLACK_BOBOMB, /*pos*/ -1079, 3800, -1039, /*angle*/ 0, 0, 0, /*behParam*/ (BOBOMB_BP_STYPE_GENERIC << 16), /*beh*/ bhvBobomb), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ 1879, 4639, -1559, /*angle*/ 0, 0, 0, /*behParam*/ ((COIN_FORMATION_FLAG_NONE) << 16), /*beh*/ bhvCoinFormation), + OBJECT(/*model*/ MODEL_1UP, /*pos*/ -259, 6059, -3759, /*angle*/ 0, 0, 0, /*behParam*/ (MUSHROOM_BP_REQUIRES_NONE << 16), /*beh*/ bhv1Up), + OBJECT(/*model*/ MODEL_HEART, /*pos*/ 359, 6099, -3219, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvRecoveryHeart), + OBJECT(/*model*/ MODEL_PIRANHA_PLANT, /*pos*/ 3680, 2428, -1840, /*angle*/ 0, 0, 0, /*behParam*/ (FIRE_PIRANHA_PLANT_BP_NORMAL << 16), /*beh*/ bhvFirePiranhaPlant), + OBJECT(/*model*/ MODEL_AMP, /*pos*/ -6460, 2080, -900, /*angle*/ 0, 0, 0, /*behParam*/ (2 << 16), /*beh*/ bhvCirclingAmp), + OBJECT(/*model*/ MODEL_AMP, /*pos*/ -6460, 2280, -900, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvCirclingAmp), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ 360, 6040, -2880, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvGoombaTripletSpawner), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ -302, -2457, -800, /*angle*/ 0, 0, 0, /*behParam*/ ((COIN_FORMATION_FLAG_NONE) << 16), /*beh*/ bhvCoinFormation), + OBJECT(/*model*/ MODEL_RED_COIN, /*pos*/ 1590, -1120, -2055, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvRedCoin), + OBJECT(/*model*/ MODEL_RED_COIN, /*pos*/ -2960, -3360, 0, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvRedCoin), + OBJECT(/*model*/ MODEL_RED_COIN, /*pos*/ -298, -2600, -1600, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvRedCoin), + OBJECT(/*model*/ MODEL_RED_COIN, /*pos*/ 7618, 4850, -1909, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvRedCoin), + OBJECT(/*model*/ MODEL_RED_COIN, /*pos*/ -136, 3109, -909, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvRedCoin), + OBJECT(/*model*/ MODEL_RED_COIN, /*pos*/ -3330, 4050, -900, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvRedCoin), + OBJECT(/*model*/ MODEL_RED_COIN, /*pos*/ -4830, 2103, -1030, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvRedCoin), + OBJECT(/*model*/ MODEL_RED_COIN, /*pos*/ 348, 5921, -4585, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvRedCoin), + OBJECT(/*model*/ MODEL_METAL_BOX, /*pos*/ -2300, -4100, 0, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvPushableMetalBox), + OBJECT(/*model*/ MODEL_BOWLING_BALL, /*pos*/ -4769, 2344, -904, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvFireSpitter), + OBJECT(/*model*/ MODEL_BOWLING_BALL, /*pos*/ 377, 4140, -2042, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvFireSpitter), + OBJECT(/*model*/ MODEL_1UP, /*pos*/ -1751, -1246, -805, /*angle*/ 0, 0, 0, /*behParam*/ (MUSHROOM_BP_REQUIRES_NONE << 16), /*beh*/ bhv1Up), + OBJECT(/*model*/ MODEL_BOWLING_BALL, /*pos*/ -6712, -899, -796, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvFireSpitter), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ 7322, 4566, -1922, /*angle*/ 0, 0, 0, /*behParam*/ ((COIN_FORMATION_FLAG_NONE) << 16), /*beh*/ bhvCoinFormation), + OBJECT(/*model*/ MODEL_BOWLING_BALL, /*pos*/ -3600, -2433, -800, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvFireSpitter), + OBJECT(/*model*/ MODEL_BOWLING_BALL, /*pos*/ -2656, -2442, -800, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvFireSpitter), + OBJECT(/*model*/ MODEL_EXCLAMATION_BOX, /*pos*/ 4100, -1050, -1800, /*angle*/ 0, 0, 0, /*behParam*/ (EXCLAMATION_BOX_BP_1UP_RUNNING_AWAY << 16), /*beh*/ bhvExclamationBox), + // Special objects + OBJECT(/*model*/ MODEL_LEVEL_GEOMETRY_03, /*pos*/ -4505, -5119, 0, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvStaticObject), + OBJECT(/*model*/ MODEL_LEVEL_GEOMETRY_04, /*pos*/ -2291, -2073, -762, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvStaticObject), + OBJECT(/*model*/ MODEL_LEVEL_GEOMETRY_05, /*pos*/ 3891, -3276, -705, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvStaticObject), + OBJECT(/*model*/ MODEL_LEVEL_GEOMETRY_06, /*pos*/ 1753, -1986, -531, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvStaticObject), + OBJECT(/*model*/ MODEL_LEVEL_GEOMETRY_07, /*pos*/ -5414, -1330, -787, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvStaticObject), + OBJECT(/*model*/ MODEL_LEVEL_GEOMETRY_07, /*pos*/ -3182, 2059, -904, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvStaticObject), + OBJECT(/*model*/ MODEL_LEVEL_GEOMETRY_08, /*pos*/ -3182, 1854, -904, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvStaticObject), + OBJECT(/*model*/ MODEL_LEVEL_GEOMETRY_08, /*pos*/ 759, 5628, -1008, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvStaticObject), + OBJECT(/*model*/ MODEL_LEVEL_GEOMETRY_09, /*pos*/ -4902, -895, -1171, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvStaticObject), + OBJECT(/*model*/ MODEL_LEVEL_GEOMETRY_0A, /*pos*/ -3882, -357, -1241, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvStaticObject), + OBJECT(/*model*/ MODEL_LEVEL_GEOMETRY_0B, /*pos*/ -1199, -387, -1308, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvStaticObject), + OBJECT(/*model*/ MODEL_LEVEL_GEOMETRY_0C, /*pos*/ 5584, 2735, -1851, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvStaticObject), + OBJECT(/*model*/ MODEL_LEVEL_GEOMETRY_0D, /*pos*/ -5248, 3800, -895, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvStaticObject), + OBJECT(/*model*/ MODEL_LEVEL_GEOMETRY_0D, /*pos*/ -1356, 3800, -895, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvStaticObject), + OBJECT(/*model*/ MODEL_LEVEL_GEOMETRY_0E, /*pos*/ -6459, 3800, -904, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvStaticObject), + OBJECT(/*model*/ MODEL_LEVEL_GEOMETRY_0F, /*pos*/ -930, 2884, -904, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvStaticObject), + OBJECT(/*model*/ MODEL_LEVEL_GEOMETRY_10, /*pos*/ 2486, -438, -899, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvStaticObject), + OBJECT(/*model*/ MODEL_LEVEL_GEOMETRY_11, /*pos*/ 563, 2249, -904, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvStaticObject), + OBJECT(/*model*/ MODEL_LEVEL_GEOMETRY_12, /*pos*/ -6459, 2039, -904, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvStaticObject), + OBJECT(/*model*/ MODEL_LEVEL_GEOMETRY_13, /*pos*/ 1143, 4670, -494, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvStaticObject), + OBJECT(/*model*/ MODEL_LEVEL_GEOMETRY_14, /*pos*/ 349, 6268, -4054, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvStaticObject), + RETURN(), +}; + +static const LevelScript script_bits_objects_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*/ 0x014F0000, /*beh*/ bhvSlidingPlatform2), OBJECT(/*model*/ MODEL_BITS_TWIN_SLIDING_PLATFORMS, /*pos*/ -4700, 3544, -904, /*angle*/ 0, 180, 0, /*behParam*/ 0x010F0000, /*beh*/ bhvSlidingPlatform2), @@ -38,7 +122,7 @@ static const LevelScript script_func_local_1[] = { RETURN(), }; -static const LevelScript script_func_local_2[] = { +static const LevelScript script_bits_objects_2[] = { OBJECT(/*model*/ MODEL_NONE, /*pos*/ 350, 6800, -6800, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvBowserCourseRedCoinStar), RETURN(), }; @@ -97,10 +181,10 @@ const LevelScript level_bits_entry[] = { 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), - JUMP_LINK(script_func_local_1), - JUMP_LINK(script_func_local_2), + JUMP_LINK(script_bits_objects_1), + JUMP_LINK(script_bits_objects_2), TERRAIN(/*terrainData*/ bits_seg7_collision_level), - MACRO_OBJECTS(/*objList*/ bits_seg7_macro_objs), + JUMP_LINK(script_bits_macro_objects), SET_BACKGROUND_MUSIC(/*settingsPreset*/ 0x0000, /*seq*/ SEQ_LEVEL_KOOPA_ROAD), TERRAIN_TYPE(/*terrainType*/ TERRAIN_STONE), END_AREA(), diff --git a/levels/bob/areas/1/collision.inc.c b/levels/bob/areas/1/collision.inc.c index 11d9867be..3addc17c4 100644 --- a/levels/bob/areas/1/collision.inc.c +++ b/levels/bob/areas/1/collision.inc.c @@ -1644,23 +1644,5 @@ const Collision bob_seg7_collision_level[] = { COL_TRI(54, 261, 260), COL_TRI(260, 124, 259), COL_TRI_STOP(), - COL_SPECIAL_INIT(17), - SPECIAL_OBJECT(/*preset*/ special_bubble_tree, /*pos*/ -5792, 1024, -4654), - SPECIAL_OBJECT(/*preset*/ special_bubble_tree, /*pos*/ -1509, 144, 5094), - SPECIAL_OBJECT(/*preset*/ special_bubble_tree, /*pos*/ -4095, 768, 3072), - SPECIAL_OBJECT(/*preset*/ special_bubble_tree, /*pos*/ -5119, 768, 2048), - SPECIAL_OBJECT(/*preset*/ special_bubble_tree, /*pos*/ 5444, 863, 6016), - SPECIAL_OBJECT(/*preset*/ special_bubble_tree, /*pos*/ -6655, 768, 3584), - SPECIAL_OBJECT(/*preset*/ special_bubble_tree, /*pos*/ -6130, 900, -6507), - SPECIAL_OBJECT(/*preset*/ special_bubble_tree, /*pos*/ -6804, 1024, -4866), - SPECIAL_OBJECT(/*preset*/ special_bubble_tree, /*pos*/ 6033, 2194, -7660), - SPECIAL_OBJECT(/*preset*/ special_bubble_tree, /*pos*/ -4095, 768, 1536), - SPECIAL_OBJECT(/*preset*/ special_bubble_tree, /*pos*/ -4268, 0, 4768), - SPECIAL_OBJECT(/*preset*/ special_bubble_tree, /*pos*/ -3583, 768, 2560), - SPECIAL_OBJECT(/*preset*/ special_bubble_tree, /*pos*/ -6172, 1024, -430), - SPECIAL_OBJECT(/*preset*/ special_bubble_tree, /*pos*/ 4096, 3072, 1638), - SPECIAL_OBJECT(/*preset*/ special_bubble_tree, /*pos*/ 6799, 2008, -5587), - SPECIAL_OBJECT(/*preset*/ special_bubble_tree, /*pos*/ 2911, 768, 5917), - SPECIAL_OBJECT(/*preset*/ special_bubble_tree, /*pos*/ 4208, 927, 3772), COL_END(), }; diff --git a/levels/bob/areas/1/macro.inc.c b/levels/bob/areas/1/macro.inc.c deleted file mode 100644 index e7127c57e..000000000 --- a/levels/bob/areas/1/macro.inc.c +++ /dev/null @@ -1,92 +0,0 @@ -// 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_END(), -}; diff --git a/levels/bob/header.h b/levels/bob/header.h index 207e07e50..4440830ac 100644 --- a/levels/bob/header.h +++ b/levels/bob/header.h @@ -20,7 +20,6 @@ extern const Gfx bob_seg7_dl_0700E458[]; extern const Gfx bob_seg7_dl_0700E768[]; extern const Gfx bob_seg7_dl_0700E8A0[]; extern const Collision bob_seg7_collision_level[]; -extern const MacroObject bob_seg7_macro_objs[]; extern const Collision bob_seg7_collision_chain_chomp_gate[]; extern const Collision bob_seg7_collision_bridge[]; extern const Collision bob_seg7_collision_gate[]; diff --git a/levels/bob/leveldata.c b/levels/bob/leveldata.c index 3c0befd18..7795bc01c 100644 --- a/levels/bob/leveldata.c +++ b/levels/bob/leveldata.c @@ -2,11 +2,7 @@ #include "sm64.h" #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 "textures.h" -#include "dialog_ids.h" #include "make_const_nonconst.h" #include "levels/bob/texture.inc.c" @@ -20,7 +16,6 @@ #include "levels/bob/seesaw_platform/model.inc.c" #include "levels/bob/grate_door/model.inc.c" #include "levels/bob/areas/1/collision.inc.c" -#include "levels/bob/areas/1/macro.inc.c" #include "levels/bob/chain_chomp_gate/collision.inc.c" #include "levels/bob/seesaw_platform/collision.inc.c" #include "levels/bob/grate_door/collision.inc.c" diff --git a/levels/bob/script.c b/levels/bob/script.c index cdf8e14cc..0ef8de92a 100644 --- a/levels/bob/script.c +++ b/levels/bob/script.c @@ -16,7 +16,119 @@ #include "make_const_nonconst.h" #include "levels/bob/header.h" -static const LevelScript script_func_local_1[] = { + +static const LevelScript script_bob_macro_objects[] = { + // Macro objects + OBJECT(/*model*/ MODEL_CHAIN_CHOMP, /*pos*/ 260, 735, 1920, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvChainChomp), + OBJECT(/*model*/ MODEL_BREAKABLE_BOX, /*pos*/ -3979, 0, 6827, /*angle*/ 0, 0, 0, /*behParam*/ (BREAKABLE_BOX_BP_NO_COINS << 16), /*beh*/ bhvBreakableBox), + OBJECT(/*model*/ MODEL_GOOMBA, /*pos*/ -2713, 152, 5778, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvGoomba), + OBJECT(/*model*/ MODEL_GOOMBA, /*pos*/ -342, 400, 5433, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvGoomba), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ 3620, 4000, 4800, /*angle*/ 0, 0, 0, /*behParam*/ (15 << 16), /*beh*/ bhvWaterBombSpawner), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ -5141, 3764, -743, /*angle*/ 0, 0, 0, /*behParam*/ (25 << 16), /*beh*/ bhvWaterBombSpawner), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ -4208, 3769, -2036, /*angle*/ 0, 0, 0, /*behParam*/ (10 << 16), /*beh*/ bhvWaterBombSpawner), + OBJECT(/*model*/ MODEL_CANNON_BASE, /*pos*/ 1388, 2918, -2383, /*angle*/ 0, 315, 0, /*behParam*/ 0x00000000, /*beh*/ bhvWaterBombCannon), + OBJECT(/*model*/ MODEL_WOODEN_POST, /*pos*/ -6500, 768, 1800, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvWoodenPost), + OBJECT(/*model*/ MODEL_WOODEN_POST, /*pos*/ -5500, 768, 1800, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvWoodenPost), + OBJECT(/*model*/ MODEL_WOODEN_POST, /*pos*/ -6500, 768, 3000, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvWoodenPost), + OBJECT(/*model*/ MODEL_WOODEN_POST, /*pos*/ -5500, 768, 3000, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvWoodenPost), + OBJECT(/*model*/ MODEL_WOODEN_SIGNPOST, /*pos*/ -4000, 0, 6050, /*angle*/ 0, 270, 0, /*behParam*/ (DIALOG_015 << 16), /*beh*/ bhvMessagePanel), + OBJECT(/*model*/ MODEL_WOODEN_SIGNPOST, /*pos*/ 1230, 768, 3258, /*angle*/ 0, 0, 0, /*behParam*/ (DIALOG_008 << 16), /*beh*/ bhvMessagePanel), + OBJECT(/*model*/ MODEL_DL_CANNON_LID, /*pos*/ -5018, 1332, -3533, /*angle*/ 0, 0, 0, /*behParam*/ (0x00 << 16), /*beh*/ bhvCannonClosed), + OBJECT(/*model*/ MODEL_DL_CANNON_LID, /*pos*/ 6349, 2080, -7066, /*angle*/ 0, 0, 0, /*behParam*/ (0xC0 << 16), /*beh*/ bhvCannonClosed), + OBJECT(/*model*/ MODEL_DL_CANNON_LID, /*pos*/ 4243, 3071, -2451, /*angle*/ 0, 0, 0, /*behParam*/ (0xC0 << 16), /*beh*/ bhvCannonClosed), + OBJECT(/*model*/ MODEL_DL_CANNON_LID, /*pos*/ 4352, 3072, 1229, /*angle*/ 0, 0, 0, /*behParam*/ (0x80 << 16), /*beh*/ bhvCannonClosed), + OBJECT(/*model*/ MODEL_DL_CANNON_LID, /*pos*/ 5376, 1537, 4610, /*angle*/ 0, 0, 0, /*behParam*/ (0x40 << 16), /*beh*/ bhvCannonClosed), + OBJECT(/*model*/ MODEL_BLACK_BOBOMB, /*pos*/ -3080, 0, -5200, /*angle*/ 0, 0, 0, /*behParam*/ (BOBOMB_BP_STYPE_GENERIC << 16), /*beh*/ bhvBobomb), + OBJECT(/*model*/ MODEL_BLACK_BOBOMB, /*pos*/ -3688, 885, -3813, /*angle*/ 0, 0, 0, /*behParam*/ (BOBOMB_BP_STYPE_GENERIC << 16), /*beh*/ bhvBobomb), + OBJECT(/*model*/ MODEL_BLACK_BOBOMB, /*pos*/ -4629, 1024, -1772, /*angle*/ 0, 0, 0, /*behParam*/ (BOBOMB_BP_STYPE_GENERIC << 16), /*beh*/ bhvBobomb), + OBJECT(/*model*/ MODEL_BLACK_BOBOMB, /*pos*/ -3480, 891, -2120, /*angle*/ 0, 0, 0, /*behParam*/ (BOBOMB_BP_STYPE_GENERIC << 16), /*beh*/ bhvBobomb), + OBJECT(/*model*/ MODEL_BLACK_BOBOMB, /*pos*/ -3800, 1024, -460, /*angle*/ 0, 0, 0, /*behParam*/ (BOBOMB_BP_STYPE_GENERIC << 16), /*beh*/ bhvBobomb), + OBJECT(/*model*/ MODEL_BLACK_BOBOMB, /*pos*/ 6888, 2002, -5608, /*angle*/ 0, 0, 0, /*behParam*/ (BOBOMB_BP_STYPE_GENERIC << 16), /*beh*/ bhvBobomb), + OBJECT(/*model*/ MODEL_HEART, /*pos*/ 3603, 3659, -7070, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvRecoveryHeart), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ -6060, 1060, -5340, /*angle*/ 0, 0, 0, /*behParam*/ ((COIN_FORMATION_FLAG_RING) << 16), /*beh*/ bhvCoinFormation), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ -129, 0, 5668, /*angle*/ 0, 90, 0, /*behParam*/ ((COIN_FORMATION_FLAG_NONE) << 16), /*beh*/ bhvCoinFormation), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ 1851, 2917, -2234, /*angle*/ 0, 75, 0, /*behParam*/ ((COIN_FORMATION_FLAG_NONE) << 16), /*beh*/ bhvCoinFormation), + OBJECT(/*model*/ MODEL_RED_COIN, /*pos*/ -5500, 768, 2400, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvRedCoin), + OBJECT(/*model*/ MODEL_RED_COIN, /*pos*/ -6500, 768, 2400, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvRedCoin), + OBJECT(/*model*/ MODEL_RED_COIN, /*pos*/ 1135, 1920, -7161, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvRedCoin), + OBJECT(/*model*/ MODEL_RED_COIN, /*pos*/ 250, 1000, 1920, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvRedCoin), + OBJECT(/*model*/ MODEL_RED_COIN, /*pos*/ 1600, 980, 4440, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvRedCoin), + OBJECT(/*model*/ MODEL_RED_COIN, /*pos*/ -2755, 0, -4083, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvRedCoin), + OBJECT(/*model*/ MODEL_RED_COIN, /*pos*/ 4934, 1352, 861, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvRedCoin), + OBJECT(/*model*/ MODEL_RED_COIN, /*pos*/ 4100, 3672, 1629, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvRedCoin), + OBJECT(/*model*/ MODEL_EXCLAMATION_BOX, /*pos*/ -6710, 1300, -2170, /*angle*/ 0, 0, 0, /*behParam*/ (EXCLAMATION_BOX_BP_WING_CAP << 16), /*beh*/ bhvExclamationBox), + OBJECT(/*model*/ MODEL_BREAKABLE_BOX, /*pos*/ -3740, 0, 6180, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvBreakableBoxSmall), + OBJECT(/*model*/ MODEL_WOODEN_SIGNPOST, /*pos*/ -4000, 0, 6300, /*angle*/ 0, 270, 0, /*behParam*/ (DIALOG_095 << 16), /*beh*/ bhvMessagePanel), + OBJECT(/*model*/ MODEL_1UP, /*pos*/ -6060, 1060, -5340, /*angle*/ 0, 0, 0, /*behParam*/ (4 << 16), /*beh*/ bhvHidden1up), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ -5760, 1060, -5340, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvHidden1upTrigger), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ -6360, 1060, -5340, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvHidden1upTrigger), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ -6060, 1060, -5640, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvHidden1upTrigger), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ -6060, 1040, -5040, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvHidden1upTrigger), + OBJECT(/*model*/ MODEL_EXCLAMATION_BOX, /*pos*/ 3789, 3340, 1818, /*angle*/ 0, 0, 0, /*behParam*/ (EXCLAMATION_BOX_BP_WING_CAP << 16), /*beh*/ bhvExclamationBox), + OBJECT(/*model*/ MODEL_BLACK_BOBOMB, /*pos*/ 2350, 757, 3700, /*angle*/ 0, 0, 0, /*behParam*/ (BOBOMB_BP_STYPE_GENERIC << 16), /*beh*/ bhvBobomb), + OBJECT(/*model*/ MODEL_BLACK_BOBOMB, /*pos*/ -1750, 0, -2800, /*angle*/ 0, 0, 0, /*behParam*/ (BOBOMB_BP_STYPE_GENERIC << 16), /*beh*/ bhvBobomb), + OBJECT(/*model*/ MODEL_BLACK_BOBOMB, /*pos*/ -1400, 0, -950, /*angle*/ 0, 0, 0, /*behParam*/ (BOBOMB_BP_STYPE_GENERIC << 16), /*beh*/ bhvBobomb), + OBJECT(/*model*/ MODEL_BLACK_BOBOMB, /*pos*/ -2650, 0, 1750, /*angle*/ 0, 0, 0, /*behParam*/ (BOBOMB_BP_STYPE_GENERIC << 16), /*beh*/ bhvBobomb), + OBJECT(/*model*/ MODEL_BLACK_BOBOMB, /*pos*/ -1900, 0, 3450, /*angle*/ 0, 0, 0, /*behParam*/ (BOBOMB_BP_STYPE_GENERIC << 16), /*beh*/ bhvBobomb), + OBJECT(/*model*/ MODEL_1UP, /*pos*/ -2531, 0, -4201, /*angle*/ 0, 0, 0, /*behParam*/ (MUSHROOM_BP_REQUIRES_NONE << 16), /*beh*/ bhv1Up), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ 5444, 1400, 6016, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvHidden1upInPoleSpawner), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ 3640, 768, 6280, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvGoombaTripletSpawner), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ 6060, 877, 2000, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvGoombaTripletSpawner), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ -6050, 768, 1250, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvGoombaTripletSpawner), + OBJECT(/*model*/ MODEL_EXCLAMATION_BOX, /*pos*/ 400, 350, 6500, /*angle*/ 0, 0, 0, /*behParam*/ (EXCLAMATION_BOX_BP_WING_CAP << 16), /*beh*/ bhvExclamationBox), + OBJECT(/*model*/ MODEL_WOODEN_SIGNPOST, /*pos*/ 66, 0, 6977, /*angle*/ 0, 270, 0, /*behParam*/ (DIALOG_113 << 16), /*beh*/ bhvMessagePanel), + OBJECT(/*model*/ MODEL_WOODEN_SIGNPOST, /*pos*/ 3394, 3072, 1846, /*angle*/ 0, 0, 0, /*behParam*/ (DIALOG_064 << 16), /*beh*/ bhvMessagePanel), + OBJECT(/*model*/ MODEL_WOODEN_SIGNPOST, /*pos*/ -3110, 104, 5064, /*angle*/ 0, 270, 0, /*behParam*/ (DIALOG_035 << 16), /*beh*/ bhvMessagePanel), + OBJECT(/*model*/ MODEL_WOODEN_SIGNPOST, /*pos*/ 6860, 2041, -6640, /*angle*/ 0, 0, 0, /*behParam*/ (DIALOG_074 << 16), /*beh*/ bhvMessagePanel), + OBJECT(/*model*/ MODEL_WOODEN_SIGNPOST, /*pos*/ -6020, 768, 2957, /*angle*/ 0, 0, 0, /*behParam*/ (DIALOG_104 << 16), /*beh*/ bhvMessagePanel), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ -1506, 5317, 1250, /*angle*/ 0, 90, 0, /*behParam*/ ((COIN_FORMATION_FLAG_FLYING | COIN_FORMATION_FLAG_RING | COIN_FORMATION_FLAG_VERTICAL) << 16), /*beh*/ bhvCoinFormation), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ -1506, 5517, 1250, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvHiddenStarTrigger), + OBJECT(/*model*/ MODEL_BREAKABLE_BOX, /*pos*/ 7157, 2027, -6714, /*angle*/ 0, 0, 0, /*behParam*/ (BREAKABLE_BOX_BP_NO_COINS << 16), /*beh*/ bhvBreakableBox), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ 1000, 3400, 1250, /*angle*/ 0, 90, 0, /*behParam*/ ((COIN_FORMATION_FLAG_FLYING | COIN_FORMATION_FLAG_RING | COIN_FORMATION_FLAG_VERTICAL) << 16), /*beh*/ bhvCoinFormation), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ 2000, 3400, 1250, /*angle*/ 0, 90, 0, /*behParam*/ ((COIN_FORMATION_FLAG_FLYING | COIN_FORMATION_FLAG_RING | COIN_FORMATION_FLAG_VERTICAL) << 16), /*beh*/ bhvCoinFormation), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ 3000, 3400, 1250, /*angle*/ 0, 90, 0, /*behParam*/ ((COIN_FORMATION_FLAG_FLYING | COIN_FORMATION_FLAG_RING | COIN_FORMATION_FLAG_VERTICAL) << 16), /*beh*/ bhvCoinFormation), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ 1000, 3600, 1250, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvHiddenStarTrigger), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ 2000, 3600, 1250, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvHiddenStarTrigger), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ 3000, 3600, 1250, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvHiddenStarTrigger), + OBJECT(/*model*/ MODEL_BLACK_BOBOMB, /*pos*/ 1127, 2897, -2495, /*angle*/ 0, 0, 0, /*behParam*/ (BOBOMB_BP_STYPE_STATIONARY << 16), /*beh*/ bhvBobomb), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ 4836, 3079, -2707, /*angle*/ 0, 120, 0, /*behParam*/ ((COIN_FORMATION_FLAG_NONE ) << 16), /*beh*/ bhvCoinFormation), + OBJECT(/*model*/ MODEL_WOODEN_SIGNPOST, /*pos*/ -3530, 1415, 430, /*angle*/ 0, 45, 0, /*behParam*/ (DIALOG_050 << 16), /*beh*/ bhvMessagePanel), + OBJECT(/*model*/ MODEL_WOODEN_SIGNPOST, /*pos*/ 5053, 3073, 2180, /*angle*/ 0, 0, 0, /*behParam*/ (DIALOG_053 << 16), /*beh*/ bhvMessagePanel), + OBJECT(/*model*/ MODEL_YELLOW_COIN, /*pos*/ -1506, 5517, 1250, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvYellowCoin), + OBJECT(/*model*/ MODEL_YELLOW_COIN, /*pos*/ 1000, 3600, 1250, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvYellowCoin), + OBJECT(/*model*/ MODEL_YELLOW_COIN, /*pos*/ 2000, 3600, 1250, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvYellowCoin), + OBJECT(/*model*/ MODEL_YELLOW_COIN, /*pos*/ 3000, 3600, 1250, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvYellowCoin), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ -300, 4200, 1250, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvHiddenStarTrigger), + OBJECT(/*model*/ MODEL_WOODEN_SIGNPOST, /*pos*/ -2224, 990, -4359, /*angle*/ 0, 270, 0, /*behParam*/ (DIALOG_039 << 16), /*beh*/ bhvMessagePanel), + OBJECT(/*model*/ MODEL_WOODEN_SIGNPOST, /*pos*/ 3911, 3529, -7081, /*angle*/ 0, 60, 0, /*behParam*/ (DIALOG_112 << 16), /*beh*/ bhvMessagePanel), + OBJECT(/*model*/ MODEL_WOODEN_SIGNPOST, /*pos*/ -7000, 1024, -2099, /*angle*/ 0, 0, 0, /*behParam*/ (DIALOG_032 << 16), /*beh*/ bhvMessagePanel), + OBJECT(/*model*/ MODEL_BREAKABLE_BOX, /*pos*/ -3979, 0, 6627, /*angle*/ 0, 0, 0, /*behParam*/ (BREAKABLE_BOX_BP_3_COINS << 16), /*beh*/ bhvBreakableBox), + OBJECT(/*model*/ MODEL_EXCLAMATION_BOX, /*pos*/ 5540, 3350, 1200, /*angle*/ 0, 0, 0, /*behParam*/ (EXCLAMATION_BOX_BP_STAR_3 << 16), /*beh*/ bhvExclamationBox), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ -300, 4000, 1250, /*angle*/ 0, 90, 0, /*behParam*/ ((COIN_FORMATION_FLAG_FLYING | COIN_FORMATION_FLAG_RING | COIN_FORMATION_FLAG_VERTICAL) << 16), /*beh*/ bhvCoinFormation), + OBJECT(/*model*/ MODEL_YELLOW_COIN, /*pos*/ -300, 4200, 1250, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvYellowCoin), + OBJECT(/*model*/ MODEL_BREAKABLE_BOX, /*pos*/ -6800, 1024, 40, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvBreakableBoxSmall), + // Special objects + OBJECT(/*model*/ MODEL_BOB_BUBBLY_TREE, /*pos*/ -5792, 1024, -4654, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvTree), + OBJECT(/*model*/ MODEL_BOB_BUBBLY_TREE, /*pos*/ -1509, 144, 5094, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvTree), + OBJECT(/*model*/ MODEL_BOB_BUBBLY_TREE, /*pos*/ -4095, 768, 3072, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvTree), + OBJECT(/*model*/ MODEL_BOB_BUBBLY_TREE, /*pos*/ -5119, 768, 2048, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvTree), + OBJECT(/*model*/ MODEL_BOB_BUBBLY_TREE, /*pos*/ 5444, 863, 6016, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvTree), + OBJECT(/*model*/ MODEL_BOB_BUBBLY_TREE, /*pos*/ -6655, 768, 3584, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvTree), + OBJECT(/*model*/ MODEL_BOB_BUBBLY_TREE, /*pos*/ -6130, 900, -6507, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvTree), + OBJECT(/*model*/ MODEL_BOB_BUBBLY_TREE, /*pos*/ -6804, 1024, -4866, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvTree), + OBJECT(/*model*/ MODEL_BOB_BUBBLY_TREE, /*pos*/ 6033, 2194, -7660, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvTree), + OBJECT(/*model*/ MODEL_BOB_BUBBLY_TREE, /*pos*/ -4095, 768, 1536, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvTree), + OBJECT(/*model*/ MODEL_BOB_BUBBLY_TREE, /*pos*/ -4268, 0, 4768, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvTree), + OBJECT(/*model*/ MODEL_BOB_BUBBLY_TREE, /*pos*/ -3583, 768, 2560, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvTree), + OBJECT(/*model*/ MODEL_BOB_BUBBLY_TREE, /*pos*/ -6172, 1024, -430, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvTree), + OBJECT(/*model*/ MODEL_BOB_BUBBLY_TREE, /*pos*/ 4096, 3072, 1638, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvTree), + OBJECT(/*model*/ MODEL_BOB_BUBBLY_TREE, /*pos*/ 6799, 2008, -5587, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvTree), + OBJECT(/*model*/ MODEL_BOB_BUBBLY_TREE, /*pos*/ 2911, 768, 5917, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvTree), + OBJECT(/*model*/ MODEL_BOB_BUBBLY_TREE, /*pos*/ 4208, 927, 3772, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvTree), + RETURN(), +}; + +static const LevelScript script_bob_objects_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), @@ -25,7 +137,7 @@ static const LevelScript script_func_local_1[] = { RETURN(), }; -static const LevelScript script_func_local_2[] = { +static const LevelScript script_bob_objects_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), @@ -44,7 +156,7 @@ static const LevelScript script_func_local_2[] = { RETURN(), }; -static const LevelScript script_func_local_3[] = { +static const LevelScript script_bob_objects_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), @@ -75,9 +187,9 @@ const LevelScript level_bob_entry[] = { LOAD_MODEL_FROM_GEO(MODEL_BOB_BARS_GRILLS, bob_geo_000470), AREA(/*index*/ 1, bob_geo_000488), - JUMP_LINK(script_func_local_1), - JUMP_LINK(script_func_local_2), - JUMP_LINK(script_func_local_3), + JUMP_LINK(script_bob_objects_1), + JUMP_LINK(script_bob_objects_2), + JUMP_LINK(script_bob_objects_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), @@ -91,7 +203,7 @@ const LevelScript level_bob_entry[] = { 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), TERRAIN(/*terrainData*/ bob_seg7_collision_level), - MACRO_OBJECTS(/*objList*/ bob_seg7_macro_objs), + JUMP_LINK(script_bob_macro_objects), SHOW_DIALOG(/*index*/ 0x00, DIALOG_000), SET_BACKGROUND_MUSIC(/*settingsPreset*/ 0x0000, /*seq*/ SEQ_LEVEL_GRASS), TERRAIN_TYPE(/*terrainType*/ TERRAIN_GRASS), diff --git a/levels/bowser_1/areas/1/collision.inc.c b/levels/bowser_1/areas/1/collision.inc.c index e2a25a550..71d2e5cb3 100644 --- a/levels/bowser_1/areas/1/collision.inc.c +++ b/levels/bowser_1/areas/1/collision.inc.c @@ -76,28 +76,5 @@ const Collision bowser_1_seg7_collision_level[] = { COL_TRI(25, 26, 27), COL_TRI(25, 27, 28), COL_TRI_STOP(), - COL_SPECIAL_INIT(22), - SPECIAL_OBJECT_WITH_YAW(/*preset*/ special_null_start, /*pos*/ 0, 1843, 0, /*yaw*/ 1423), // unused, probably an early way to set initial position - SPECIAL_OBJECT(/*preset*/ special_mine, /*pos*/ 2949, 589, 0), - SPECIAL_OBJECT(/*preset*/ special_mine, /*pos*/ 0, 589, -2949), - SPECIAL_OBJECT(/*preset*/ special_mine, /*pos*/ 0, 589, 2949), - SPECIAL_OBJECT(/*preset*/ special_mine, /*pos*/ -2949, 589, 0), - SPECIAL_OBJECT(/*preset*/ special_bowser, /*pos*/ 0, 300, -1000), - SPECIAL_OBJECT_WITH_YAW(/*preset*/ special_level_geo_03, /*pos*/ 0, 384, 3072, /*yaw*/ 0), - SPECIAL_OBJECT_WITH_YAW(/*preset*/ special_level_geo_03, /*pos*/ -2171, 384, -2171, /*yaw*/ 0), - SPECIAL_OBJECT_WITH_YAW(/*preset*/ special_level_geo_03, /*pos*/ 0, 384, -3071, /*yaw*/ 0), - SPECIAL_OBJECT_WITH_YAW(/*preset*/ special_level_geo_03, /*pos*/ -3071, 384, 0, /*yaw*/ 0), - SPECIAL_OBJECT_WITH_YAW(/*preset*/ special_level_geo_03, /*pos*/ -2171, 384, 2172, /*yaw*/ 0), - SPECIAL_OBJECT_WITH_YAW(/*preset*/ special_level_geo_03, /*pos*/ -2621, 384, 1086, /*yaw*/ 0), - SPECIAL_OBJECT_WITH_YAW(/*preset*/ special_level_geo_03, /*pos*/ 2172, 384, 2172, /*yaw*/ 0), - SPECIAL_OBJECT_WITH_YAW(/*preset*/ special_level_geo_03, /*pos*/ 3072, 384, 0, /*yaw*/ 0), - SPECIAL_OBJECT_WITH_YAW(/*preset*/ special_level_geo_03, /*pos*/ 2172, 384, -2171, /*yaw*/ 0), - SPECIAL_OBJECT_WITH_YAW(/*preset*/ special_level_geo_03, /*pos*/ -1085, 384, 2622, /*yaw*/ 0), - SPECIAL_OBJECT_WITH_YAW(/*preset*/ special_level_geo_03, /*pos*/ 2622, 384, 1086, /*yaw*/ 0), - SPECIAL_OBJECT_WITH_YAW(/*preset*/ special_level_geo_03, /*pos*/ -2621, 384, -1085, /*yaw*/ 0), - SPECIAL_OBJECT_WITH_YAW(/*preset*/ special_level_geo_03, /*pos*/ -1085, 384, -2621, /*yaw*/ 0), - SPECIAL_OBJECT_WITH_YAW(/*preset*/ special_level_geo_03, /*pos*/ 1086, 384, -2621, /*yaw*/ 0), - SPECIAL_OBJECT_WITH_YAW(/*preset*/ special_level_geo_03, /*pos*/ 2622, 384, -1085, /*yaw*/ 0), - SPECIAL_OBJECT_WITH_YAW(/*preset*/ special_level_geo_03, /*pos*/ 1086, 384, 2622, /*yaw*/ 0), COL_END(), }; diff --git a/levels/bowser_1/leveldata.c b/levels/bowser_1/leveldata.c index d198f19a0..4907325b8 100644 --- a/levels/bowser_1/leveldata.c +++ b/levels/bowser_1/leveldata.c @@ -2,9 +2,6 @@ #include "sm64.h" #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 "textures.h" #include "make_const_nonconst.h" diff --git a/levels/bowser_1/script.c b/levels/bowser_1/script.c index 6c4bdd532..11a422759 100644 --- a/levels/bowser_1/script.c +++ b/levels/bowser_1/script.c @@ -16,6 +16,33 @@ #include "make_const_nonconst.h" #include "levels/bowser_1/header.h" + +static const LevelScript script_bowser_1_macro_objects[] = { + // Special objects + OBJECT(/*model*/ MODEL_WATER_MINE, /*pos*/ 2949, 589, 0, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvBowserBomb), + OBJECT(/*model*/ MODEL_WATER_MINE, /*pos*/ 0, 589, -2949, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvBowserBomb), + OBJECT(/*model*/ MODEL_WATER_MINE, /*pos*/ 0, 589, 2949, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvBowserBomb), + OBJECT(/*model*/ MODEL_WATER_MINE, /*pos*/ -2949, 589, 0, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvBowserBomb), + OBJECT(/*model*/ MODEL_BOWSER, /*pos*/ 0, 300, -1000, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvBowser), + OBJECT(/*model*/ MODEL_LEVEL_GEOMETRY_03, /*pos*/ 0, 384, 3072, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvStaticObject), + OBJECT(/*model*/ MODEL_LEVEL_GEOMETRY_03, /*pos*/ -2171, 384, -2171, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvStaticObject), + OBJECT(/*model*/ MODEL_LEVEL_GEOMETRY_03, /*pos*/ 0, 384, -3071, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvStaticObject), + OBJECT(/*model*/ MODEL_LEVEL_GEOMETRY_03, /*pos*/ -3071, 384, 0, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvStaticObject), + OBJECT(/*model*/ MODEL_LEVEL_GEOMETRY_03, /*pos*/ -2171, 384, 2172, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvStaticObject), + OBJECT(/*model*/ MODEL_LEVEL_GEOMETRY_03, /*pos*/ -2621, 384, 1086, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvStaticObject), + OBJECT(/*model*/ MODEL_LEVEL_GEOMETRY_03, /*pos*/ 2172, 384, 2172, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvStaticObject), + OBJECT(/*model*/ MODEL_LEVEL_GEOMETRY_03, /*pos*/ 3072, 384, 0, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvStaticObject), + OBJECT(/*model*/ MODEL_LEVEL_GEOMETRY_03, /*pos*/ 2172, 384, -2171, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvStaticObject), + OBJECT(/*model*/ MODEL_LEVEL_GEOMETRY_03, /*pos*/ -1085, 384, 2622, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvStaticObject), + OBJECT(/*model*/ MODEL_LEVEL_GEOMETRY_03, /*pos*/ 2622, 384, 1086, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvStaticObject), + OBJECT(/*model*/ MODEL_LEVEL_GEOMETRY_03, /*pos*/ -2621, 384, -1085, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvStaticObject), + OBJECT(/*model*/ MODEL_LEVEL_GEOMETRY_03, /*pos*/ -1085, 384, -2621, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvStaticObject), + OBJECT(/*model*/ MODEL_LEVEL_GEOMETRY_03, /*pos*/ 1086, 384, -2621, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvStaticObject), + OBJECT(/*model*/ MODEL_LEVEL_GEOMETRY_03, /*pos*/ 2622, 384, -1085, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvStaticObject), + OBJECT(/*model*/ MODEL_LEVEL_GEOMETRY_03, /*pos*/ 1086, 384, 2622, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvStaticObject), + RETURN(), +}; + const LevelScript level_bowser_1_entry[] = { INIT_LEVEL(), LOAD_YAY0(/*seg*/ 0x07, _bowser_1_segment_7SegmentRomStart, _bowser_1_segment_7SegmentRomEnd), @@ -33,6 +60,7 @@ const LevelScript level_bowser_1_entry[] = { 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), TERRAIN(/*terrainData*/ bowser_1_seg7_collision_level), + JUMP_LINK(script_bowser_1_macro_objects), SET_BACKGROUND_MUSIC(/*settingsPreset*/ 0x0002, /*seq*/ SEQ_LEVEL_BOSS_KOOPA), TERRAIN_TYPE(/*terrainType*/ TERRAIN_STONE), END_AREA(), diff --git a/levels/bowser_2/areas/1/collision.inc.c b/levels/bowser_2/areas/1/collision.inc.c index 628b171ea..2f5a32759 100644 --- a/levels/bowser_2/areas/1/collision.inc.c +++ b/levels/bowser_2/areas/1/collision.inc.c @@ -18,8 +18,5 @@ const Collision bowser_2_seg7_collision_lava[] = { COL_TRI(0, 7, 6), COL_TRI(0, 5, 7), COL_TRI_STOP(), - COL_SPECIAL_INIT(2), - SPECIAL_OBJECT_WITH_YAW(/*preset*/ special_null_start, /*pos*/ 0, 1229, 0, /*yaw*/ 128), // unused, probably an early way to set initial position - SPECIAL_OBJECT(/*preset*/ special_bowser, /*pos*/ -8, 1229, -1418), COL_END(), }; diff --git a/levels/bowser_2/leveldata.c b/levels/bowser_2/leveldata.c index 7c9e48bfb..c1bdc3fa6 100644 --- a/levels/bowser_2/leveldata.c +++ b/levels/bowser_2/leveldata.c @@ -2,9 +2,6 @@ #include "sm64.h" #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 "textures.h" #include "make_const_nonconst.h" diff --git a/levels/bowser_2/script.c b/levels/bowser_2/script.c index 0511bf1c5..f9857e2c2 100644 --- a/levels/bowser_2/script.c +++ b/levels/bowser_2/script.c @@ -15,7 +15,14 @@ #include "make_const_nonconst.h" #include "levels/bowser_2/header.h" -static const LevelScript script_func_local_1[] = { + +static const LevelScript script_bowser_2_macro_objects[] = { + // Special objects + OBJECT(/*model*/ MODEL_BOWSER, /*pos*/ -8, 1229, -1418, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvBowser), + RETURN(), +}; + +static const LevelScript script_bowser_2_objects_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), @@ -42,8 +49,9 @@ const LevelScript level_bowser_2_entry[] = { 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), - JUMP_LINK(script_func_local_1), + JUMP_LINK(script_bowser_2_objects_1), TERRAIN(/*terrainData*/ bowser_2_seg7_collision_lava), + JUMP_LINK(script_bowser_2_macro_objects), SET_BACKGROUND_MUSIC(/*settingsPreset*/ 0x0002, /*seq*/ SEQ_LEVEL_BOSS_KOOPA), TERRAIN_TYPE(/*terrainType*/ TERRAIN_STONE), END_AREA(), diff --git a/levels/bowser_3/areas/1/collision.inc.c b/levels/bowser_3/areas/1/collision.inc.c index 68d64090a..5ca1334ba 100644 --- a/levels/bowser_3/areas/1/collision.inc.c +++ b/levels/bowser_3/areas/1/collision.inc.c @@ -67,13 +67,5 @@ const Collision bowser_3_seg7_collision_level[] = { COL_TRI(0, 1, 2), COL_TRI(0, 2, 3), COL_TRI_STOP(), - COL_SPECIAL_INIT(7), - SPECIAL_OBJECT_WITH_YAW(/*preset*/ special_null_start, /*pos*/ 0, 307, 0, /*yaw*/ 128), // unused, probably an early way to set initial position - SPECIAL_OBJECT(/*preset*/ special_bowser, /*pos*/ 13, 307, -1024), - SPECIAL_OBJECT_WITH_YAW(/*preset*/ special_level_geo_03, /*pos*/ -3362, -204, 1121, /*yaw*/ 0), - SPECIAL_OBJECT_WITH_YAW(/*preset*/ special_level_geo_03, /*pos*/ 0, -204, 3584, /*yaw*/ 0), - SPECIAL_OBJECT_WITH_YAW(/*preset*/ special_level_geo_03, /*pos*/ 3362, -204, 1126, /*yaw*/ 0), - SPECIAL_OBJECT_WITH_YAW(/*preset*/ special_level_geo_03, /*pos*/ 2123, -204, -2912, /*yaw*/ 0), - SPECIAL_OBJECT_WITH_YAW(/*preset*/ special_level_geo_03, /*pos*/ -2122, -204, -2912, /*yaw*/ 0), COL_END(), }; diff --git a/levels/bowser_3/leveldata.c b/levels/bowser_3/leveldata.c index 3505aed35..b159830d1 100644 --- a/levels/bowser_3/leveldata.c +++ b/levels/bowser_3/leveldata.c @@ -2,9 +2,6 @@ #include "sm64.h" #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 "textures.h" #include "make_const_nonconst.h" diff --git a/levels/bowser_3/script.c b/levels/bowser_3/script.c index 3d6df9bf7..014de8f94 100644 --- a/levels/bowser_3/script.c +++ b/levels/bowser_3/script.c @@ -15,7 +15,19 @@ #include "make_const_nonconst.h" #include "levels/bowser_3/header.h" -static const LevelScript script_func_local_1[] = { + +static const LevelScript script_bowser_3_macro_objects[] = { + // Special objects + OBJECT(/*model*/ MODEL_BOWSER, /*pos*/ 13, 307, -1024, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvBowser), + OBJECT(/*model*/ MODEL_LEVEL_GEOMETRY_03, /*pos*/ -3362, -204, 1121, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvStaticObject), + OBJECT(/*model*/ MODEL_LEVEL_GEOMETRY_03, /*pos*/ 0, -204, 3584, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvStaticObject), + OBJECT(/*model*/ MODEL_LEVEL_GEOMETRY_03, /*pos*/ 3362, -204, 1126, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvStaticObject), + OBJECT(/*model*/ MODEL_LEVEL_GEOMETRY_03, /*pos*/ 2123, -204, -2912, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvStaticObject), + OBJECT(/*model*/ MODEL_LEVEL_GEOMETRY_03, /*pos*/ -2122, -204, -2912, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvStaticObject), + RETURN(), +}; + +static const LevelScript script_bowser_3_objects_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), @@ -58,9 +70,10 @@ const LevelScript level_bowser_3_entry[] = { 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), - JUMP_LINK(script_func_local_1), + JUMP_LINK(script_bowser_3_objects_1), WARP_NODE(/*id*/ 0xF1, /*destLevel*/ LEVEL_BITS, /*destArea*/ 0x01, /*destNode*/ 0x0C, /*flags*/ WARP_NO_CHECKPOINT), TERRAIN(/*terrainData*/ bowser_3_seg7_collision_level), + JUMP_LINK(script_bowser_3_macro_objects), SET_BACKGROUND_MUSIC(/*settingsPreset*/ 0x0002, /*seq*/ SEQ_LEVEL_BOSS_KOOPA_FINAL), TERRAIN_TYPE(/*terrainType*/ TERRAIN_STONE), END_AREA(), diff --git a/levels/castle_courtyard/areas/1/collision.inc.c b/levels/castle_courtyard/areas/1/collision.inc.c index 8d1f2bd37..ad7076358 100644 --- a/levels/castle_courtyard/areas/1/collision.inc.c +++ b/levels/castle_courtyard/areas/1/collision.inc.c @@ -846,26 +846,6 @@ const Collision castle_courtyard_seg7_collision[] = { COL_TRI(136, 150, 138), COL_TRI(136, 45, 133), COL_TRI_STOP(), - COL_SPECIAL_INIT(19), - SPECIAL_OBJECT_WITH_YAW(/*preset*/ special_null_start, /*pos*/ 15, 0, 202, /*yaw*/ 128), // unused, probably an early way to set initial position - SPECIAL_OBJECT_WITH_YAW(/*preset*/ special_level_geo_03, /*pos*/ 0, 2048, 2662, /*yaw*/ 0), - SPECIAL_OBJECT(/*preset*/ special_spiky_tree, /*pos*/ 2272, -214, -1432), - SPECIAL_OBJECT(/*preset*/ special_spiky_tree, /*pos*/ 818, 10, 203), - SPECIAL_OBJECT(/*preset*/ special_spiky_tree, /*pos*/ -820, 10, 201), - SPECIAL_OBJECT(/*preset*/ special_spiky_tree, /*pos*/ 1681, -214, -132), - SPECIAL_OBJECT(/*preset*/ special_spiky_tree, /*pos*/ 2382, -214, -843), - SPECIAL_OBJECT(/*preset*/ special_spiky_tree, /*pos*/ -817, 10, -3630), - SPECIAL_OBJECT(/*preset*/ special_spiky_tree, /*pos*/ 2769, -214, -1523), - SPECIAL_OBJECT(/*preset*/ special_spiky_tree, /*pos*/ 2444, -214, -2330), - SPECIAL_OBJECT(/*preset*/ special_spiky_tree, /*pos*/ 2042, -214, -3032), - SPECIAL_OBJECT(/*preset*/ special_spiky_tree, /*pos*/ 824, 10, -3633), - SPECIAL_OBJECT(/*preset*/ special_spiky_tree, /*pos*/ -2537, -214, -759), - SPECIAL_OBJECT(/*preset*/ special_spiky_tree, /*pos*/ -1640, -214, -3228), - SPECIAL_OBJECT(/*preset*/ special_spiky_tree, /*pos*/ -2732, -214, -2166), - 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), COL_WATER_BOX_INIT(1), COL_WATER_BOX(0, -656, -2405, 674, -1074, 51), COL_END(), diff --git a/levels/castle_courtyard/areas/1/macro.inc.c b/levels/castle_courtyard/areas/1/macro.inc.c deleted file mode 100644 index 0f88dfd21..000000000 --- a/levels/castle_courtyard/areas/1/macro.inc.c +++ /dev/null @@ -1,8 +0,0 @@ -// 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_END(), -}; diff --git a/levels/castle_courtyard/header.h b/levels/castle_courtyard/header.h index d5a7e18c0..63608fde1 100644 --- a/levels/castle_courtyard/header.h +++ b/levels/castle_courtyard/header.h @@ -14,7 +14,6 @@ extern const Gfx castle_courtyard_seg7_dl_07005078[]; extern const Gfx castle_courtyard_seg7_dl_07005698[]; extern const Gfx castle_courtyard_seg7_dl_07005938[]; extern const Collision castle_courtyard_seg7_collision[]; -extern const MacroObject castle_courtyard_seg7_macro_objs[]; extern const struct MovtexQuadCollection castle_courtyard_movtex_star_statue_water[]; // script diff --git a/levels/castle_courtyard/leveldata.c b/levels/castle_courtyard/leveldata.c index 913cee43c..145c7ae17 100644 --- a/levels/castle_courtyard/leveldata.c +++ b/levels/castle_courtyard/leveldata.c @@ -2,11 +2,7 @@ #include "sm64.h" #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 "textures.h" -#include "dialog_ids.h" #include "make_const_nonconst.h" #include "levels/castle_courtyard/areas/1/1/model.inc.c" @@ -14,5 +10,4 @@ #include "levels/castle_courtyard/areas/1/2/model.inc.c" #include "levels/castle_courtyard/areas/1/3/model.inc.c" #include "levels/castle_courtyard/areas/1/collision.inc.c" -#include "levels/castle_courtyard/areas/1/macro.inc.c" #include "levels/castle_courtyard/areas/1/movtext.inc.c" diff --git a/levels/castle_courtyard/script.c b/levels/castle_courtyard/script.c index a532c56a4..55ea6bc5e 100644 --- a/levels/castle_courtyard/script.c +++ b/levels/castle_courtyard/script.c @@ -3,6 +3,7 @@ #include "behavior_data.h" #include "model_ids.h" #include "seq_ids.h" +#include "dialog_ids.h" #include "segment_symbols.h" #include "level_commands.h" @@ -15,14 +16,43 @@ #include "make_const_nonconst.h" #include "levels/castle_courtyard/header.h" -static const LevelScript script_func_local_1[] = { + +static const LevelScript script_castle_courtyard_macro_objects[] = { + // Macro objects + OBJECT(/*model*/ MODEL_WOODEN_SIGNPOST, /*pos*/ 3180, 20, 330, /*angle*/ 0, 225, 0, /*behParam*/ (DIALOG_158 << 16), /*beh*/ bhvMessagePanel), + OBJECT(/*model*/ MODEL_WOODEN_SIGNPOST, /*pos*/ -3180, 20, 330, /*angle*/ 0, 135, 0, /*behParam*/ (DIALOG_159 << 16), /*beh*/ bhvMessagePanel), + OBJECT(/*model*/ MODEL_WOODEN_SIGNPOST, /*pos*/ 300, 0, -3600, /*angle*/ 0, 0, 0, /*behParam*/ (DIALOG_102 << 16), /*beh*/ bhvMessagePanel), + OBJECT(/*model*/ MODEL_WOODEN_SIGNPOST, /*pos*/ -300, 0, -3600, /*angle*/ 0, 0, 0, /*behParam*/ (DIALOG_160 << 16), /*beh*/ bhvMessagePanel), + // Special objects + OBJECT(/*model*/ MODEL_LEVEL_GEOMETRY_03, /*pos*/ 0, 2048, 2662, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvStaticObject), + OBJECT(/*model*/ MODEL_COURTYARD_SPIKY_TREE, /*pos*/ 2272, -214, -1432, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvTree), + OBJECT(/*model*/ MODEL_COURTYARD_SPIKY_TREE, /*pos*/ 818, 10, 203, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvTree), + OBJECT(/*model*/ MODEL_COURTYARD_SPIKY_TREE, /*pos*/ -820, 10, 201, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvTree), + OBJECT(/*model*/ MODEL_COURTYARD_SPIKY_TREE, /*pos*/ 1681, -214, -132, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvTree), + OBJECT(/*model*/ MODEL_COURTYARD_SPIKY_TREE, /*pos*/ 2382, -214, -843, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvTree), + OBJECT(/*model*/ MODEL_COURTYARD_SPIKY_TREE, /*pos*/ -817, 10, -3630, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvTree), + OBJECT(/*model*/ MODEL_COURTYARD_SPIKY_TREE, /*pos*/ 2769, -214, -1523, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvTree), + OBJECT(/*model*/ MODEL_COURTYARD_SPIKY_TREE, /*pos*/ 2444, -214, -2330, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvTree), + OBJECT(/*model*/ MODEL_COURTYARD_SPIKY_TREE, /*pos*/ 2042, -214, -3032, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvTree), + OBJECT(/*model*/ MODEL_COURTYARD_SPIKY_TREE, /*pos*/ 824, 10, -3633, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvTree), + OBJECT(/*model*/ MODEL_COURTYARD_SPIKY_TREE, /*pos*/ -2537, -214, -759, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvTree), + OBJECT(/*model*/ MODEL_COURTYARD_SPIKY_TREE, /*pos*/ -1640, -214, -3228, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvTree), + OBJECT(/*model*/ MODEL_COURTYARD_SPIKY_TREE, /*pos*/ -2732, -214, -2166, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvTree), + OBJECT(/*model*/ MODEL_COURTYARD_SPIKY_TREE, /*pos*/ -2446, -214, -1786, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvTree), + OBJECT(/*model*/ MODEL_COURTYARD_SPIKY_TREE, /*pos*/ -2820, -214, -1317, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvTree), + OBJECT(/*model*/ MODEL_COURTYARD_SPIKY_TREE, /*pos*/ -1868, -214, -45, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvTree), + OBJECT(/*model*/ MODEL_CASTLE_WOODEN_DOOR, /*pos*/ 0, 0, 461, /*angle*/ 0, 0, 0, /*behParam*/ (1 << 16), /*beh*/ bhvDoorWarp), + RETURN(), +}; + +static const LevelScript script_castle_courtyard_objects_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), RETURN(), }; -static const LevelScript script_func_local_2[] = { +static const LevelScript script_castle_courtyard_objects_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), @@ -55,10 +85,10 @@ const LevelScript level_castle_courtyard_entry[] = { 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), - JUMP_LINK(script_func_local_1), - JUMP_LINK(script_func_local_2), + JUMP_LINK(script_castle_courtyard_objects_1), + JUMP_LINK(script_castle_courtyard_objects_2), TERRAIN(/*terrainData*/ castle_courtyard_seg7_collision), - MACRO_OBJECTS(/*objList*/ castle_courtyard_seg7_macro_objs), + JUMP_LINK(script_castle_courtyard_macro_objects), SET_BACKGROUND_MUSIC(/*settingsPreset*/ 0x0000, /*seq*/ SEQ_SOUND_PLAYER), TERRAIN_TYPE(/*terrainType*/ TERRAIN_STONE), END_AREA(), diff --git a/levels/castle_grounds/areas/1/collision.inc.c b/levels/castle_grounds/areas/1/collision.inc.c index 64a1fa823..5dddc02b2 100644 --- a/levels/castle_grounds/areas/1/collision.inc.c +++ b/levels/castle_grounds/areas/1/collision.inc.c @@ -1382,37 +1382,6 @@ const Collision castle_grounds_seg7_collision_level[] = { COL_TRI(469, 473, 489), COL_TRI(472, 473, 469), COL_TRI_STOP(), - COL_SPECIAL_INIT(30), - SPECIAL_OBJECT_WITH_YAW(/*preset*/ special_level_geo_03, /*pos*/ 0, 2867, -3924, /*yaw*/ 0), - SPECIAL_OBJECT(/*preset*/ special_bubble_tree, /*pos*/ -1333, 711, 1881), - SPECIAL_OBJECT(/*preset*/ special_bubble_tree, /*pos*/ -6220, 468, 3458), - SPECIAL_OBJECT(/*preset*/ special_bubble_tree, /*pos*/ -5069, 350, 3221), - SPECIAL_OBJECT(/*preset*/ special_bubble_tree, /*pos*/ -2566, 438, 2626), - SPECIAL_OBJECT(/*preset*/ special_bubble_tree, /*pos*/ -1900, 401, 2868), - SPECIAL_OBJECT(/*preset*/ special_bubble_tree, /*pos*/ 6399, 494, -1680), - SPECIAL_OBJECT(/*preset*/ special_bubble_tree, /*pos*/ 767, 498, 2598), - SPECIAL_OBJECT(/*preset*/ special_bubble_tree, /*pos*/ 1476, 189, 3280), - SPECIAL_OBJECT(/*preset*/ special_bubble_tree, /*pos*/ 3153, 206, 469), - SPECIAL_OBJECT(/*preset*/ special_bubble_tree, /*pos*/ 6178, 219, 167), - SPECIAL_OBJECT(/*preset*/ special_bubble_tree, /*pos*/ -6510, 260, 1411), - SPECIAL_OBJECT(/*preset*/ special_bubble_tree, /*pos*/ 5457, 528, -3259), - SPECIAL_OBJECT(/*preset*/ special_bubble_tree, /*pos*/ 5868, 698, -4453), - SPECIAL_OBJECT(/*preset*/ special_bubble_tree, /*pos*/ 6408, 869, -5314), - SPECIAL_OBJECT(/*preset*/ special_bubble_tree, /*pos*/ -4711, 342, 433), - SPECIAL_OBJECT(/*preset*/ special_bubble_tree, /*pos*/ 1132, 365, 1977), - SPECIAL_OBJECT(/*preset*/ special_bubble_tree, /*pos*/ -5506, 364, -661), - SPECIAL_OBJECT(/*preset*/ special_bubble_tree, /*pos*/ -6269, 402, -2145), - SPECIAL_OBJECT(/*preset*/ special_bubble_tree, /*pos*/ -5600, 440, -2627), - SPECIAL_OBJECT(/*preset*/ special_bubble_tree, /*pos*/ 1919, 268, 1157), - SPECIAL_OBJECT(/*preset*/ special_bubble_tree, /*pos*/ -5957, 517, -3447), - SPECIAL_OBJECT(/*preset*/ special_bubble_tree, /*pos*/ -2021, 633, 1468), - SPECIAL_OBJECT(/*preset*/ special_bubble_tree, /*pos*/ -109, 613, 3008), - 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), 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/macro.inc.c b/levels/castle_grounds/areas/1/macro.inc.c deleted file mode 100644 index 94ea23304..000000000 --- a/levels/castle_grounds/areas/1/macro.inc.c +++ /dev/null @@ -1,21 +0,0 @@ -// 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_END(), -}; diff --git a/levels/castle_grounds/header.h b/levels/castle_grounds/header.h index 5e32ed949..19d685238 100644 --- a/levels/castle_grounds/header.h +++ b/levels/castle_grounds/header.h @@ -31,7 +31,6 @@ extern const struct Animation *const castle_grounds_seg7_anims_flags[]; extern const Gfx castle_grounds_seg7_dl_0700EA58[]; extern const Gfx castle_grounds_seg7_us_dl_0700F2E8[]; extern const Collision castle_grounds_seg7_collision_level[]; -extern const MacroObject castle_grounds_seg7_macro_objs[]; extern const Collision castle_grounds_seg7_collision_moat_grills[]; extern const Collision castle_grounds_seg7_collision_cannon_grill[]; extern const struct MovtexQuadCollection castle_grounds_movtex_water[]; diff --git a/levels/castle_grounds/leveldata.c b/levels/castle_grounds/leveldata.c index 1263f0624..df5d482ad 100644 --- a/levels/castle_grounds/leveldata.c +++ b/levels/castle_grounds/leveldata.c @@ -2,11 +2,7 @@ #include "sm64.h" #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 "textures.h" -#include "dialog_ids.h" #include "make_const_nonconst.h" #include "levels/castle_grounds/texture.inc.c" @@ -27,7 +23,6 @@ #include "levels/castle_grounds/areas/1/13/model.inc.c" // Peach signature #endif #include "levels/castle_grounds/areas/1/collision.inc.c" -#include "levels/castle_grounds/areas/1/macro.inc.c" #include "levels/castle_grounds/areas/1/7/collision.inc.c" #include "levels/castle_grounds/areas/1/8/collision.inc.c" #include "levels/castle_grounds/areas/1/movtext.inc.c" diff --git a/levels/castle_grounds/script.c b/levels/castle_grounds/script.c index 6e44620b4..1aedda682 100644 --- a/levels/castle_grounds/script.c +++ b/levels/castle_grounds/script.c @@ -3,6 +3,7 @@ #include "behavior_data.h" #include "model_ids.h" #include "seq_ids.h" +#include "dialog_ids.h" #include "segment_symbols.h" #include "level_commands.h" @@ -15,7 +16,61 @@ #include "make_const_nonconst.h" #include "levels/castle_grounds/header.h" -static const LevelScript script_func_local_1[] = { + +static const LevelScript script_castle_grounds_macro_objects[] = { + // Macro objects + OBJECT(/*model*/ MODEL_WOODEN_SIGNPOST, /*pos*/ 5288, 722, -800, /*angle*/ 0, 262, 0, /*behParam*/ (DIALOG_050 << 16), /*beh*/ bhvMessagePanel), + OBJECT(/*model*/ MODEL_WOODEN_SIGNPOST, /*pos*/ 1740, 35, 2500, /*angle*/ 0, 90, 0, /*behParam*/ (DIALOG_065 << 16), /*beh*/ bhvMessagePanel), + OBJECT(/*model*/ MODEL_WOODEN_SIGNPOST, /*pos*/ -1566, 260, 3503, /*angle*/ 0, 0, 0, /*behParam*/ (DIALOG_167 << 16), /*beh*/ bhvMessagePanel), + OBJECT(/*model*/ MODEL_WOODEN_SIGNPOST, /*pos*/ -4666, 260, 922, /*angle*/ 0, 82, 0, /*behParam*/ (DIALOG_051 << 16), /*beh*/ bhvMessagePanel), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ -6270, 975, -2145, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvHidden1upInPoleSpawner), + OBJECT(/*model*/ MODEL_1UP, /*pos*/ -440, 3180, -5000, /*angle*/ 0, 0, 0, /*behParam*/ (MUSHROOM_BP_REQUIRES_NONE << 16), /*beh*/ bhv1Up), + OBJECT(/*model*/ MODEL_1UP, /*pos*/ 0, 3180, -5200, /*angle*/ 0, 0, 0, /*behParam*/ (MUSHROOM_BP_REQUIRES_NONE << 16), /*beh*/ bhv1Up), + OBJECT(/*model*/ MODEL_1UP, /*pos*/ 440, 3180, -5000, /*angle*/ 0, 0, 0, /*behParam*/ (MUSHROOM_BP_REQUIRES_NONE << 16), /*beh*/ bhv1Up), + OBJECT(/*model*/ MODEL_EXCLAMATION_BOX, /*pos*/ 13, 3476, -5646, /*angle*/ 0, 0, 0, /*behParam*/ (EXCLAMATION_BOX_BP_WING_CAP << 16), /*beh*/ bhvExclamationBox), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ 0, 535, -500, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvHidden1upTrigger), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ 0, 535, -1774, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvHidden1upTrigger), + OBJECT(/*model*/ MODEL_1UP, /*pos*/ 0, 510, -1170, /*angle*/ 0, 0, 0, /*behParam*/ (2 << 16), /*beh*/ bhvHidden1up), + OBJECT(/*model*/ MODEL_YELLOW_COIN, /*pos*/ 0, 540, -1774, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvYellowCoin), + OBJECT(/*model*/ MODEL_YELLOW_COIN, /*pos*/ 0, 540, -500, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvYellowCoin), + OBJECT(/*model*/ MODEL_CANNON_BASE, /*pos*/ 2384, 70, 1961, /*angle*/ 0, 0, 0, /*behParam*/ (0x40 << 16), /*beh*/ bhvCannon), + OBJECT(/*model*/ MODEL_BUTTERFLY, /*pos*/ -6240, 295, 320, /*angle*/ 0, 0, 0, /*behParam*/ (TRIPLET_BUTTERFLY_BP_NO_BOMBS << 16), /*beh*/ bhvTripletButterfly), + OBJECT(/*model*/ MODEL_BUTTERFLY, /*pos*/ 6330, 710, -3760, /*angle*/ 0, 0, 0, /*behParam*/ (TRIPLET_BUTTERFLY_BP_NO_BOMBS << 16), /*beh*/ bhvTripletButterfly), + // Special objects + OBJECT(/*model*/ MODEL_LEVEL_GEOMETRY_03, /*pos*/ 0, 2867, -3924, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvStaticObject), + OBJECT(/*model*/ MODEL_BOB_BUBBLY_TREE, /*pos*/ -1333, 711, 1881, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvTree), + OBJECT(/*model*/ MODEL_BOB_BUBBLY_TREE, /*pos*/ -6220, 468, 3458, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvTree), + OBJECT(/*model*/ MODEL_BOB_BUBBLY_TREE, /*pos*/ -5069, 350, 3221, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvTree), + OBJECT(/*model*/ MODEL_BOB_BUBBLY_TREE, /*pos*/ -2566, 438, 2626, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvTree), + OBJECT(/*model*/ MODEL_BOB_BUBBLY_TREE, /*pos*/ -1900, 401, 2868, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvTree), + OBJECT(/*model*/ MODEL_BOB_BUBBLY_TREE, /*pos*/ 6399, 494, -1680, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvTree), + OBJECT(/*model*/ MODEL_BOB_BUBBLY_TREE, /*pos*/ 767, 498, 2598, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvTree), + OBJECT(/*model*/ MODEL_BOB_BUBBLY_TREE, /*pos*/ 1476, 189, 3280, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvTree), + OBJECT(/*model*/ MODEL_BOB_BUBBLY_TREE, /*pos*/ 3153, 206, 469, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvTree), + OBJECT(/*model*/ MODEL_BOB_BUBBLY_TREE, /*pos*/ 6178, 219, 167, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvTree), + OBJECT(/*model*/ MODEL_BOB_BUBBLY_TREE, /*pos*/ -6510, 260, 1411, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvTree), + OBJECT(/*model*/ MODEL_BOB_BUBBLY_TREE, /*pos*/ 5457, 528, -3259, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvTree), + OBJECT(/*model*/ MODEL_BOB_BUBBLY_TREE, /*pos*/ 5868, 698, -4453, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvTree), + OBJECT(/*model*/ MODEL_BOB_BUBBLY_TREE, /*pos*/ 6408, 869, -5314, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvTree), + OBJECT(/*model*/ MODEL_BOB_BUBBLY_TREE, /*pos*/ -4711, 342, 433, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvTree), + OBJECT(/*model*/ MODEL_BOB_BUBBLY_TREE, /*pos*/ 1132, 365, 1977, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvTree), + OBJECT(/*model*/ MODEL_BOB_BUBBLY_TREE, /*pos*/ -5506, 364, -661, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvTree), + OBJECT(/*model*/ MODEL_BOB_BUBBLY_TREE, /*pos*/ -6269, 402, -2145, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvTree), + OBJECT(/*model*/ MODEL_BOB_BUBBLY_TREE, /*pos*/ -5600, 440, -2627, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvTree), + OBJECT(/*model*/ MODEL_BOB_BUBBLY_TREE, /*pos*/ 1919, 268, 1157, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvTree), + OBJECT(/*model*/ MODEL_BOB_BUBBLY_TREE, /*pos*/ -5957, 517, -3447, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvTree), + OBJECT(/*model*/ MODEL_BOB_BUBBLY_TREE, /*pos*/ -2021, 633, 1468, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvTree), + OBJECT(/*model*/ MODEL_BOB_BUBBLY_TREE, /*pos*/ -109, 613, 3008, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvTree), + OBJECT(/*model*/ MODEL_BOB_BUBBLY_TREE, /*pos*/ 5774, 413, -1114, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvTree), + OBJECT(/*model*/ MODEL_BOB_BUBBLY_TREE, /*pos*/ 5954, 526, -2846, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvTree), + OBJECT(/*model*/ MODEL_BOB_BUBBLY_TREE, /*pos*/ -5204, 296, 811, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvTree), + OBJECT(/*model*/ MODEL_CASTLE_METAL_DOOR, /*pos*/ 3292, -511, -2931, /*angle*/ 0, 225, 0, /*behParam*/ (2 << 16), /*beh*/ bhvDoorWarp), + OBJECT(/*model*/ MODEL_CASTLE_CASTLE_DOOR, /*pos*/ -76, 803, -3155, /*angle*/ 0, 0, 0, /*behParam*/ (0 << 16), /*beh*/ bhvDoorWarp), + OBJECT(/*model*/ MODEL_CASTLE_CASTLE_DOOR, /*pos*/ 77, 803, -3155, /*angle*/ 0, 180, 0, /*behParam*/ (1 << 16), /*beh*/ bhvDoorWarp), + RETURN(), +}; + +static const LevelScript script_castle_grounds_objects_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), @@ -40,7 +95,7 @@ static const LevelScript script_func_local_1[] = { RETURN(), }; -static const LevelScript script_func_local_2[] = { +static const LevelScript script_castle_grounds_objects_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), @@ -67,7 +122,7 @@ static const LevelScript script_func_local_2[] = { RETURN(), }; -static const LevelScript script_func_local_3[] = { +static const LevelScript script_castle_grounds_objects_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), @@ -75,7 +130,7 @@ static const LevelScript script_func_local_3[] = { RETURN(), }; -static const LevelScript script_func_local_4[] = { +static const LevelScript script_castle_grounds_objects_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), @@ -119,12 +174,12 @@ const LevelScript level_castle_grounds_entry[] = { AREA(/*index*/ 1, castle_grounds_geo_00073C), WARP_NODE(/*id*/ 0xF1, /*destLevel*/ LEVEL_CASTLE_GROUNDS, /*destArea*/ 0x01, /*destNode*/ 0x03, /*flags*/ WARP_NO_CHECKPOINT), - JUMP_LINK(script_func_local_1), - JUMP_LINK(script_func_local_2), - JUMP_LINK(script_func_local_3), - JUMP_LINK(script_func_local_4), + JUMP_LINK(script_castle_grounds_objects_1), + JUMP_LINK(script_castle_grounds_objects_2), + JUMP_LINK(script_castle_grounds_objects_3), + JUMP_LINK(script_castle_grounds_objects_4), TERRAIN(/*terrainData*/ castle_grounds_seg7_collision_level), - MACRO_OBJECTS(/*objList*/ castle_grounds_seg7_macro_objs), + JUMP_LINK(script_castle_grounds_macro_objects), SET_BACKGROUND_MUSIC(/*settingsPreset*/ 0x0000, /*seq*/ SEQ_SOUND_PLAYER), TERRAIN_TYPE(/*terrainType*/ TERRAIN_GRASS), END_AREA(), diff --git a/levels/castle_inside/areas/1/collision.inc.c b/levels/castle_inside/areas/1/collision.inc.c index a081bccfe..27b808880 100644 --- a/levels/castle_inside/areas/1/collision.inc.c +++ b/levels/castle_inside/areas/1/collision.inc.c @@ -3740,17 +3740,5 @@ const Collision inside_castle_seg7_area_1_collision[] = { COL_TRI(77, 78, 79), COL_TRI(77, 79, 80), COL_TRI_STOP(), - COL_SPECIAL_INIT(11), - 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(/*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), - SPECIAL_OBJECT_WITH_YAW(/*preset*/ special_3star_door, /*pos*/ 1075, 205, -229, /*yaw*/ 192), - SPECIAL_OBJECT_WITH_YAW(/*preset*/ special_3star_door, /*pos*/ -2303, 0, -1074, /*yaw*/ 0), COL_END(), }; diff --git a/levels/castle_inside/areas/1/macro.inc.c b/levels/castle_inside/areas/1/macro.inc.c deleted file mode 100644 index cf28d2375..000000000 --- a/levels/castle_inside/areas/1/macro.inc.c +++ /dev/null @@ -1,16 +0,0 @@ -// 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_END(), -}; diff --git a/levels/castle_inside/areas/2/collision.inc.c b/levels/castle_inside/areas/2/collision.inc.c index 395d20b5c..f2ae20093 100644 --- a/levels/castle_inside/areas/2/collision.inc.c +++ b/levels/castle_inside/areas/2/collision.inc.c @@ -3730,10 +3730,5 @@ const Collision inside_castle_seg7_area_2_collision[] = { COL_TRI(38, 35, 33), COL_TRI(38, 37, 35), COL_TRI_STOP(), - COL_SPECIAL_INIT(4), - SPECIAL_OBJECT_WITH_YAW(/*preset*/ special_0stars_door, /*pos*/ -2695, 1203, 1828, /*yaw*/ 64), - SPECIAL_OBJECT_WITH_YAW(/*preset*/ special_0stars_door, /*pos*/ 6994, 1203, 1828, /*yaw*/ 64), - SPECIAL_OBJECT_WITH_YAW(/*preset*/ special_0stars_door, /*pos*/ 1670, 1203, 1828, /*yaw*/ 192), - SPECIAL_OBJECT_WITH_YAW(/*preset*/ special_wooden_door, /*pos*/ -997, 1203, 1178, /*yaw*/ 0), COL_END(), }; diff --git a/levels/castle_inside/areas/2/macro.inc.c b/levels/castle_inside/areas/2/macro.inc.c deleted file mode 100644 index 5ae3bd183..000000000 --- a/levels/castle_inside/areas/2/macro.inc.c +++ /dev/null @@ -1,5 +0,0 @@ -// 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_END(), -}; diff --git a/levels/castle_inside/areas/3/collision.inc.c b/levels/castle_inside/areas/3/collision.inc.c index a74959bc6..fb86638ad 100644 --- a/levels/castle_inside/areas/3/collision.inc.c +++ b/levels/castle_inside/areas/3/collision.inc.c @@ -2511,12 +2511,6 @@ const Collision inside_castle_seg7_area_3_collision[] = { COL_TRI(49, 53, 52), COL_TRI(49, 52, 50), COL_TRI_STOP(), - COL_SPECIAL_INIT(5), - SPECIAL_OBJECT_WITH_YAW(/*preset*/ special_wooden_door, /*pos*/ -3097, -1279, 1434, /*yaw*/ 0), - 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), 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/macro.inc.c b/levels/castle_inside/areas/3/macro.inc.c deleted file mode 100644 index ab8212f72..000000000 --- a/levels/castle_inside/areas/3/macro.inc.c +++ /dev/null @@ -1,10 +0,0 @@ -// 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_END(), -}; diff --git a/levels/castle_inside/header.h b/levels/castle_inside/header.h index 891fee827..398e0f495 100644 --- a/levels/castle_inside/header.h +++ b/levels/castle_inside/header.h @@ -138,9 +138,6 @@ extern const Collision inside_castle_seg7_area_2_collision[]; extern const Collision inside_castle_seg7_area_3_collision[]; extern const Collision inside_castle_seg7_collision_ddd_warp[]; 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 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[]; diff --git a/levels/castle_inside/leveldata.c b/levels/castle_inside/leveldata.c index fd4277576..eee12c20f 100644 --- a/levels/castle_inside/leveldata.c +++ b/levels/castle_inside/leveldata.c @@ -2,11 +2,7 @@ #include "sm64.h" #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 "textures.h" -#include "dialog_ids.h" #include "make_const_nonconst.h" #include "levels/castle_inside/texture.inc.c" @@ -72,9 +68,6 @@ #include "levels/castle_inside/areas/1/collision.inc.c" #include "levels/castle_inside/areas/2/collision.inc.c" #include "levels/castle_inside/areas/3/collision.inc.c" -#include "levels/castle_inside/areas/1/macro.inc.c" -#include "levels/castle_inside/areas/2/macro.inc.c" -#include "levels/castle_inside/areas/3/macro.inc.c" #include "levels/castle_inside/areas/1/room.inc.c" #include "levels/castle_inside/areas/2/room.inc.c" #include "levels/castle_inside/areas/3/room.inc.c" diff --git a/levels/castle_inside/script.c b/levels/castle_inside/script.c index 001156030..dd92e900d 100644 --- a/levels/castle_inside/script.c +++ b/levels/castle_inside/script.c @@ -16,7 +16,64 @@ #include "make_const_nonconst.h" #include "levels/castle_inside/header.h" -static const LevelScript script_func_local_1[] = { + +static const LevelScript script_inside_castle_area_1_macro_objects[] = { + // Macro objects + OBJECT(/*model*/ MODEL_NONE, /*pos*/ 1178, 614, -2434, /*angle*/ 0, 90, 0, /*behParam*/ (DIALOG_075 << 16), /*beh*/ bhvSignOnWall), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ -3185, 205, -410, /*angle*/ 0, 270, 0, /*behParam*/ (DIALOG_046 << 16), /*beh*/ bhvSignOnWall), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ -3185, 205, -51, /*angle*/ 0, 270, 0, /*behParam*/ (DIALOG_070 << 16), /*beh*/ bhvSignOnWall), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ 435, 0, -1137, /*angle*/ 0, 180, 0, /*behParam*/ (DIALOG_069 << 16), /*beh*/ bhvSignOnWall), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ 1670, 307, -1144, /*angle*/ 0, 45, 0, /*behParam*/ (DIALOG_147 << 16), /*beh*/ bhvSignOnWall), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ -2278, -410, -3002, /*angle*/ 0, 180, 0, /*behParam*/ (DIALOG_052 << 16), /*beh*/ bhvSignOnWall), + OBJECT(/*model*/ MODEL_YELLOW_COIN, /*pos*/ -618, 388, -324, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvOneCoin), + OBJECT(/*model*/ MODEL_YELLOW_COIN, /*pos*/ -1430, 388, -324, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvOneCoin), + OBJECT(/*model*/ MODEL_YELLOW_COIN, /*pos*/ -724, 388, -324, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvOneCoin), + OBJECT(/*model*/ MODEL_YELLOW_COIN, /*pos*/ -1324, 388, -324, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvOneCoin), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ 2005, 800, -1694, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvHidden1upTrigger), + OBJECT(/*model*/ MODEL_1UP, /*pos*/ 2036, 800, -1673, /*angle*/ 0, 0, 0, /*behParam*/ (1 << 16), /*beh*/ bhvHidden1up), + // Special objects + OBJECT(/*model*/ MODEL_CASTLE_WOODEN_DOOR_UNUSED, /*pos*/ -271, 0, -824, /*angle*/ 0, 45, 0, /*behParam*/ (0 << 24), /*beh*/ bhvDoor), + OBJECT(/*model*/ MODEL_CASTLE_WOODEN_DOOR_UNUSED, /*pos*/ -1775, 0, -824, /*angle*/ 0, 315, 0, /*behParam*/ (0 << 24), /*beh*/ bhvDoor), + OBJECT(/*model*/ MODEL_CASTLE_CASTLE_DOOR, /*pos*/ -1100, 0, 2202, /*angle*/ 0, 0, 0, /*behParam*/ (0 << 16), /*beh*/ bhvDoorWarp), + OBJECT(/*model*/ MODEL_CASTLE_CASTLE_DOOR, /*pos*/ -946, 0, 2202, /*angle*/ 0, 180, 0, /*behParam*/ (1 << 16), /*beh*/ bhvDoorWarp), + OBJECT(/*model*/ MODEL_CASTLE_WOODEN_DOOR, /*pos*/ -1023, -101, -5170, /*angle*/ 0, 0, 0, /*behParam*/ (2 << 16), /*beh*/ bhvDoorWarp), + OBJECT(/*model*/ MODEL_CASTLE_DOOR_0_STARS, /*pos*/ -3122, 205, -793, /*angle*/ 0, 90, 0, /*behParam*/ (0 << 24), /*beh*/ bhvDoor), + OBJECT(/*model*/ MODEL_CASTLE_DOOR_1_STAR, /*pos*/ 256, 0, -1074, /*angle*/ 0, 0, 0, /*behParam*/ (1 << 24), /*beh*/ bhvDoor), + OBJECT(/*model*/ MODEL_CASTLE_DOOR_1_STAR, /*pos*/ 644, 614, -1476, /*angle*/ 0, 315, 0, /*behParam*/ (1 << 24), /*beh*/ bhvDoor), + OBJECT(/*model*/ MODEL_CASTLE_DOOR_3_STARS, /*pos*/ 1075, 205, -229, /*angle*/ 0, 270, 0, /*behParam*/ (3 << 24), /*beh*/ bhvDoor), + OBJECT(/*model*/ MODEL_CASTLE_DOOR_3_STARS, /*pos*/ -2303, 0, -1074, /*angle*/ 0, 0, 0, /*behParam*/ (3 << 24), /*beh*/ bhvDoor), + RETURN(), +}; + +static const LevelScript script_inside_castle_area_2_macro_objects[] = { + // Macro objects + OBJECT(/*model*/ MODEL_NONE, /*pos*/ 164, 1203, 2278, /*angle*/ 0, 90, 0, /*behParam*/ (DIALOG_019 << 16), /*beh*/ bhvSignOnWall), + // Special objects + OBJECT(/*model*/ MODEL_CASTLE_DOOR_0_STARS, /*pos*/ -2695, 1203, 1828, /*angle*/ 0, 90, 0, /*behParam*/ (0 << 24), /*beh*/ bhvDoor), + OBJECT(/*model*/ MODEL_CASTLE_DOOR_0_STARS, /*pos*/ 6994, 1203, 1828, /*angle*/ 0, 90, 0, /*behParam*/ (0 << 24), /*beh*/ bhvDoor), + OBJECT(/*model*/ MODEL_CASTLE_DOOR_0_STARS, /*pos*/ 1670, 1203, 1828, /*angle*/ 0, 270, 0, /*behParam*/ (0 << 24), /*beh*/ bhvDoor), + OBJECT(/*model*/ MODEL_CASTLE_WOODEN_DOOR_UNUSED, /*pos*/ -997, 1203, 1178, /*angle*/ 0, 0, 0, /*behParam*/ (0 << 24), /*beh*/ bhvDoor), + RETURN(), +}; + +static const LevelScript script_inside_castle_area_3_macro_objects[] = { + // Macro objects + OBJECT(/*model*/ MODEL_NONE, /*pos*/ 6400, -1178, -1270, /*angle*/ 0, 0, 0, /*behParam*/ (DIALOG_077 << 16), /*beh*/ bhvSignOnWall), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ 2130, -2508, -946, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvHidden1upTrigger), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ 2130, -2508, -92, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvHidden1upTrigger), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ 3515, -2508, -946, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvHidden1upTrigger), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ 3515, -2508, -92, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvHidden1upTrigger), + OBJECT(/*model*/ MODEL_1UP, /*pos*/ 2861, -2508, -515, /*angle*/ 0, 0, 0, /*behParam*/ (4 << 16), /*beh*/ bhvHidden1up), + // Special objects + OBJECT(/*model*/ MODEL_CASTLE_WOODEN_DOOR_UNUSED, /*pos*/ -3097, -1279, 1434, /*angle*/ 0, 0, 0, /*behParam*/ (0 << 24), /*beh*/ bhvDoor), + OBJECT(/*model*/ MODEL_CASTLE_WOODEN_DOOR_UNUSED, /*pos*/ -332, -767, 205, /*angle*/ 0, 0, 0, /*behParam*/ (0 << 24), /*beh*/ bhvDoor), + OBJECT(/*model*/ MODEL_CASTLE_WOODEN_DOOR_UNUSED, /*pos*/ 717, -1177, -869, /*angle*/ 0, 270, 0, /*behParam*/ (0 << 24), /*beh*/ bhvDoor), + OBJECT(/*model*/ MODEL_CASTLE_DOOR_0_STARS, /*pos*/ 1126, -1074, -2661, /*angle*/ 0, 270, 0, /*behParam*/ (0 << 24), /*beh*/ bhvDoor), + OBJECT(/*model*/ MODEL_CASTLE_METAL_DOOR, /*pos*/ 7885, -1586, -511, /*angle*/ 0, 270, 0, /*behParam*/ (2 << 16), /*beh*/ bhvDoorWarp), + RETURN(), +}; + +static const LevelScript script_castle_inside_area_1_objects_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), @@ -90,7 +147,7 @@ static const LevelScript script_func_local_1[] = { RETURN(), }; -static const LevelScript script_func_local_2[] = { +static const LevelScript script_castle_inside_area_2_objects_1[] = { 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), @@ -159,7 +216,7 @@ static const LevelScript script_func_local_2[] = { RETURN(), }; -static const LevelScript script_func_local_3[] = { +static const LevelScript script_castle_inside_area_3_objects_1[] = { 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), @@ -202,7 +259,7 @@ static const LevelScript script_func_local_3[] = { RETURN(), }; -static const LevelScript script_func_local_4[] = { +static const LevelScript script_castle_inside_area_3_objects_2[] = { 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), @@ -260,11 +317,11 @@ const LevelScript level_castle_inside_entry[] = { 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), - JUMP_LINK(script_func_local_1), + JUMP_LINK(script_castle_inside_area_1_objects_1), WARP_NODE(/*id*/ 0xF1, /*destLevel*/ LEVEL_CASTLE_GROUNDS, /*destArea*/ 0x01, /*destNode*/ 0x03, /*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), + JUMP_LINK(script_inside_castle_area_1_macro_objects), SET_BACKGROUND_MUSIC(/*settingsPreset*/ 0x0001, /*seq*/ SEQ_LEVEL_INSIDE_CASTLE), TERRAIN_TYPE(/*terrainType*/ TERRAIN_STONE), END_AREA(), @@ -277,11 +334,11 @@ const LevelScript level_castle_inside_entry[] = { 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), - JUMP_LINK(script_func_local_2), + JUMP_LINK(script_castle_inside_area_2_objects_1), WARP_NODE(/*id*/ 0xF1, /*destLevel*/ LEVEL_CASTLE_GROUNDS, /*destArea*/ 0x01, /*destNode*/ 0x03, /*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), + JUMP_LINK(script_inside_castle_area_2_macro_objects), INSTANT_WARP(/*index*/ 0, /*destArea*/ 2, /*displace*/ 0, -205, 410), SET_BACKGROUND_MUSIC(/*settingsPreset*/ 0x0001, /*seq*/ SEQ_LEVEL_INSIDE_CASTLE), TERRAIN_TYPE(/*terrainType*/ TERRAIN_STONE), @@ -294,12 +351,12 @@ const LevelScript level_castle_inside_entry[] = { 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), - JUMP_LINK(script_func_local_3), - JUMP_LINK(script_func_local_4), + JUMP_LINK(script_castle_inside_area_3_objects_1), + JUMP_LINK(script_castle_inside_area_3_objects_2), WARP_NODE(/*id*/ 0xF1, /*destLevel*/ LEVEL_CASTLE_GROUNDS, /*destArea*/ 0x01, /*destNode*/ 0x03, /*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), + JUMP_LINK(script_inside_castle_area_3_macro_objects), SET_BACKGROUND_MUSIC(/*settingsPreset*/ 0x0001, /*seq*/ SEQ_LEVEL_INSIDE_CASTLE), TERRAIN_TYPE(/*terrainType*/ TERRAIN_STONE), END_AREA(), diff --git a/levels/ccm/areas/1/collision.inc.c b/levels/ccm/areas/1/collision.inc.c index 450683721..1ecaf53ad 100644 --- a/levels/ccm/areas/1/collision.inc.c +++ b/levels/ccm/areas/1/collision.inc.c @@ -1746,28 +1746,6 @@ const Collision ccm_seg7_area_1_collision[] = { COL_TRI(333, 610, 335), COL_TRI(336, 609, 616), COL_TRI_STOP(), - COL_SPECIAL_INIT(21), - SPECIAL_OBJECT_WITH_YAW(/*preset*/ special_null_start, /*pos*/ -1512, 2560, -2305, /*yaw*/ 100), // unused, probably an early way to set initial position - SPECIAL_OBJECT_WITH_YAW(/*preset*/ special_level_geo_03, /*pos*/ -409, 2765, -1637, /*yaw*/ 0), - SPECIAL_OBJECT_WITH_YAW(/*preset*/ special_level_geo_04, /*pos*/ 2355, -4095, 4096, /*yaw*/ 0), - SPECIAL_OBJECT_WITH_YAW(/*preset*/ special_level_geo_05, /*pos*/ -4210, -1446, 1874, /*yaw*/ 0), - SPECIAL_OBJECT_WITH_YAW(/*preset*/ special_level_geo_05, /*pos*/ 2560, 2560, -1023, /*yaw*/ 0), - SPECIAL_OBJECT_WITH_YAW(/*preset*/ special_level_geo_06, /*pos*/ -818, 102, 2048, /*yaw*/ 0), - SPECIAL_OBJECT_WITH_YAW(/*preset*/ special_level_geo_07, /*pos*/ -511, -3071, -3583, /*yaw*/ 0), - SPECIAL_OBJECT(/*preset*/ special_snow_tree, /*pos*/ -5201, -1740, 2994), - SPECIAL_OBJECT(/*preset*/ special_snow_tree, /*pos*/ 1989, -4607, 4949), - SPECIAL_OBJECT(/*preset*/ special_snow_tree, /*pos*/ 1248, -4607, 5474), - SPECIAL_OBJECT(/*preset*/ special_snow_tree, /*pos*/ -5508, -1740, 4148), - SPECIAL_OBJECT(/*preset*/ special_snow_tree, /*pos*/ -4576, -1740, 4814), - SPECIAL_OBJECT(/*preset*/ special_snow_tree, /*pos*/ -488, 2560, -2305), - SPECIAL_OBJECT(/*preset*/ special_snow_tree, /*pos*/ -5892, -1740, 811), - SPECIAL_OBJECT(/*preset*/ special_snow_tree, /*pos*/ -3748, -4607, 4464), - SPECIAL_OBJECT(/*preset*/ special_snow_tree, /*pos*/ 2237, 2560, -1630), - SPECIAL_OBJECT(/*preset*/ special_snow_tree, /*pos*/ 2885, 2560, -1638), - 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), COL_WATER_BOX_INIT(1), COL_WATER_BOX(0, 3137, 4228, 3925, 4945, -4638), COL_END(), diff --git a/levels/ccm/areas/1/macro.inc.c b/levels/ccm/areas/1/macro.inc.c deleted file mode 100644 index a49d9c81f..000000000 --- a/levels/ccm/areas/1/macro.inc.c +++ /dev/null @@ -1,41 +0,0 @@ -// 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_END(), -}; diff --git a/levels/ccm/areas/2/collision.inc.c b/levels/ccm/areas/2/collision.inc.c index d75bdf588..8b1be65c4 100644 --- a/levels/ccm/areas/2/collision.inc.c +++ b/levels/ccm/areas/2/collision.inc.c @@ -1872,8 +1872,5 @@ const Collision ccm_seg7_area_2_collision[] = { COL_TRI(18, 21, 22), COL_TRI(19, 23, 24), 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), COL_END(), }; diff --git a/levels/ccm/areas/2/macro.inc.c b/levels/ccm/areas/2/macro.inc.c deleted file mode 100644 index e4e91f293..000000000 --- a/levels/ccm/areas/2/macro.inc.c +++ /dev/null @@ -1,45 +0,0 @@ -// 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_END(), -}; diff --git a/levels/ccm/header.h b/levels/ccm/header.h index 6e81721f4..a4e7a83d8 100644 --- a/levels/ccm/header.h +++ b/levels/ccm/header.h @@ -38,7 +38,6 @@ extern const Gfx ccm_seg7_dl_07012BD8[]; extern const Gfx ccm_seg7_dl_070136D0[]; extern const Gfx ccm_seg7_dl_07013870[]; extern const Collision ccm_seg7_area_1_collision[]; -extern const MacroObject ccm_seg7_area_1_macro_objs[]; extern const Collision ccm_seg7_collision_ropeway_lift[]; extern const Trajectory ccm_seg7_trajectory_snowman[]; extern const Trajectory ccm_seg7_trajectory_ropeway_lift[]; @@ -51,7 +50,6 @@ extern const Gfx ccm_seg7_dl_0701FD78[]; extern const Gfx ccm_seg7_dl_0701FE60[]; extern const Gfx ccm_seg7_dl_070207F0[]; extern const Collision ccm_seg7_area_2_collision[]; -extern const MacroObject ccm_seg7_area_2_macro_objs[]; extern const Trajectory ccm_seg7_trajectory_penguin_race[]; // script diff --git a/levels/ccm/leveldata.c b/levels/ccm/leveldata.c index fef53dddc..9f70fc2fc 100644 --- a/levels/ccm/leveldata.c +++ b/levels/ccm/leveldata.c @@ -2,11 +2,7 @@ #include "sm64.h" #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 "textures.h" -#include "dialog_ids.h" #include "make_const_nonconst.h" #include "levels/ccm/texture.inc.c" @@ -31,7 +27,6 @@ #include "levels/ccm/snowman_head/1.inc.c" #include "levels/ccm/snowman_head/2.inc.c" #include "levels/ccm/areas/1/collision.inc.c" -#include "levels/ccm/areas/1/macro.inc.c" #include "levels/ccm/ropeway_lift/collision.inc.c" #include "levels/ccm/areas/1/trajectory.inc.c" #include "levels/ccm/areas/1/movtext.inc.c" @@ -43,5 +38,4 @@ #include "levels/ccm/areas/2/6/model.inc.c" #include "levels/ccm/areas/2/7/model.inc.c" #include "levels/ccm/areas/2/collision.inc.c" -#include "levels/ccm/areas/2/macro.inc.c" #include "levels/ccm/areas/2/trajectory.inc.c" diff --git a/levels/ccm/script.c b/levels/ccm/script.c index f98b31864..97d324266 100644 --- a/levels/ccm/script.c +++ b/levels/ccm/script.c @@ -16,12 +16,124 @@ #include "make_const_nonconst.h" #include "levels/ccm/header.h" -static const LevelScript script_func_local_1[] = { + +static const LevelScript script_ccm_area_1_macro_objects[] = { + // Macro objects + OBJECT(/*model*/ MODEL_WOODEN_SIGNPOST, /*pos*/ -2412, 2912, -878, /*angle*/ 0, 180, 0, /*behParam*/ (DIALOG_040 << 16), /*beh*/ bhvMessagePanel), + OBJECT(/*model*/ MODEL_MR_BLIZZARD_HIDDEN, /*pos*/ 3054, -2674, 2072, /*angle*/ 0, 0, 0, /*behParam*/ (MR_BLIZZARD_STYPE_NO_CAP << 16), /*beh*/ bhvMrBlizzard), + OBJECT(/*model*/ MODEL_SPINDRIFT, /*pos*/ 2542, 2622, -1714, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvSpindrift), + OBJECT(/*model*/ MODEL_SPINDRIFT, /*pos*/ -6090, -1740, 1936, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvSpindrift), + OBJECT(/*model*/ MODEL_SPINDRIFT, /*pos*/ 4346, -3068, 400, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvSpindrift), + OBJECT(/*model*/ MODEL_SPINDRIFT, /*pos*/ -5054, -4659, -1054, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvSpindrift), + OBJECT(/*model*/ MODEL_SPINDRIFT, /*pos*/ -5033, -4740, -2666, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvSpindrift), + OBJECT(/*model*/ MODEL_BOBOMB_BUDDY, /*pos*/ -1220, -3583, 5969, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvBobombBuddyOpensCannon), + OBJECT(/*model*/ MODEL_DL_CANNON_LID, /*pos*/ -3615, -4607, 4790, /*angle*/ 0, 0, 0, /*behParam*/ (0x00 << 16), /*beh*/ bhvCannonClosed), + OBJECT(/*model*/ MODEL_DL_CANNON_LID, /*pos*/ -5045, -1740, 4615, /*angle*/ 0, 0, 0, /*behParam*/ (0x00 << 16), /*beh*/ bhvCannonClosed), + OBJECT(/*model*/ MODEL_DL_CANNON_LID, /*pos*/ 1090, -4607, 5729, /*angle*/ 0, 0, 0, /*behParam*/ (0x80 << 16), /*beh*/ bhvCannonClosed), + OBJECT(/*model*/ MODEL_WOODEN_SIGNPOST, /*pos*/ -1060, 2560, -1840, /*angle*/ 0, 270, 0, /*behParam*/ (DIALOG_087 << 16), /*beh*/ bhvMessagePanel), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ -180, 3100, -1480, /*angle*/ 0, 0, 0, /*behParam*/ ((COIN_FORMATION_FLAG_FLYING | COIN_FORMATION_FLAG_VERTICAL) << 16), /*beh*/ bhvCoinFormation), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ 3560, 2100, -280, /*angle*/ 0, 0, 0, /*behParam*/ ((COIN_FORMATION_FLAG_NONE ) << 16), /*beh*/ bhvCoinFormation), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ -1942, 1334, 1678, /*angle*/ 0, 77, 0, /*behParam*/ ((COIN_FORMATION_FLAG_NONE ) << 16), /*beh*/ bhvCoinFormation), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ -1020, 646, -2706, /*angle*/ 0, 90, 0, /*behParam*/ ((COIN_FORMATION_FLAG_NONE ) << 16), /*beh*/ bhvCoinFormation), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ -1460, -888, -3933, /*angle*/ 0, 93, 0, /*behParam*/ ((COIN_FORMATION_FLAG_NONE ) << 16), /*beh*/ bhvCoinFormation), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ -2586, -4889, -4093, /*angle*/ 0, 75, 0, /*behParam*/ ((COIN_FORMATION_FLAG_ARROW ) << 16), /*beh*/ bhvCoinFormation), + OBJECT(/*model*/ MODEL_WOODEN_SIGNPOST, /*pos*/ -4350, -4864, -4813, /*angle*/ 0, 270, 0, /*behParam*/ (DIALOG_094 << 16), /*beh*/ bhvMessagePanel), + OBJECT(/*model*/ MODEL_WOODEN_SIGNPOST, /*pos*/ -1037, -3583, 5872, /*angle*/ 0, 0, 0, /*behParam*/ (DIALOG_091 << 16), /*beh*/ bhvMessagePanel), + OBJECT(/*model*/ MODEL_WOODEN_SIGNPOST, /*pos*/ -309, -4889, -3690, /*angle*/ 0, 180, 0, /*behParam*/ (DIALOG_049 << 16), /*beh*/ bhvMessagePanel), + OBJECT(/*model*/ MODEL_WOODEN_SIGNPOST, /*pos*/ 1900, -1535, 3500, /*angle*/ 0, 0, 0, /*behParam*/ (DIALOG_040 << 16), /*beh*/ bhvMessagePanel), + OBJECT(/*model*/ MODEL_RED_COIN, /*pos*/ -488, 3100, -2305, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvRedCoin), + OBJECT(/*model*/ MODEL_RED_COIN, /*pos*/ -3120, -1200, -2080, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvRedCoin), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ -5200, -1345, 2995, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvHidden1upInPoleSpawner), + OBJECT(/*model*/ MODEL_RED_COIN, /*pos*/ 2940, -1400, 2630, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvRedCoin), + OBJECT(/*model*/ MODEL_RED_COIN, /*pos*/ -600, -505, 1940, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvRedCoin), + OBJECT(/*model*/ MODEL_RED_COIN, /*pos*/ -3814, -2112, 6427, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvRedCoin), + OBJECT(/*model*/ MODEL_RED_COIN, /*pos*/ 2700, -4600, 1230, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvRedCoin), + OBJECT(/*model*/ MODEL_RED_COIN, /*pos*/ 1990, -4040, 4950, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvRedCoin), + OBJECT(/*model*/ MODEL_BLUE_COIN_SWITCH, /*pos*/ 3400, -820, 0, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvBlueCoinSwitch), + OBJECT(/*model*/ MODEL_BLUE_COIN, /*pos*/ 3400, -640, -740, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvHiddenBlueCoin), + OBJECT(/*model*/ MODEL_BLUE_COIN, /*pos*/ 3400, -320, -1740, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvHiddenBlueCoin), + OBJECT(/*model*/ MODEL_HEART, /*pos*/ -270, -4650, -3100, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvRecoveryHeart), + OBJECT(/*model*/ MODEL_RED_COIN, /*pos*/ 4408, -4550, -1534, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvRedCoin), + OBJECT(/*model*/ MODEL_EXCLAMATION_BOX, /*pos*/ -4887, -1300, -4003, /*angle*/ 0, 0, 0, /*behParam*/ (EXCLAMATION_BOX_BP_1UP_RUNNING_AWAY << 16), /*beh*/ bhvExclamationBox), + OBJECT(/*model*/ MODEL_EXCLAMATION_BOX, /*pos*/ -1557, -205, 1794, /*angle*/ 0, 0, 0, /*behParam*/ (EXCLAMATION_BOX_BP_1UP_RUNNING_AWAY << 16), /*beh*/ bhvExclamationBox), + // Special objects + OBJECT(/*model*/ MODEL_LEVEL_GEOMETRY_03, /*pos*/ -409, 2765, -1637, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvStaticObject), + OBJECT(/*model*/ MODEL_LEVEL_GEOMETRY_04, /*pos*/ 2355, -4095, 4096, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvStaticObject), + OBJECT(/*model*/ MODEL_LEVEL_GEOMETRY_05, /*pos*/ -4210, -1446, 1874, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvStaticObject), + OBJECT(/*model*/ MODEL_LEVEL_GEOMETRY_05, /*pos*/ 2560, 2560, -1023, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvStaticObject), + OBJECT(/*model*/ MODEL_LEVEL_GEOMETRY_06, /*pos*/ -818, 102, 2048, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvStaticObject), + OBJECT(/*model*/ MODEL_LEVEL_GEOMETRY_07, /*pos*/ -511, -3071, -3583, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvStaticObject), + OBJECT(/*model*/ MODEL_CCM_SNOW_TREE, /*pos*/ -5201, -1740, 2994, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvTree), + OBJECT(/*model*/ MODEL_CCM_SNOW_TREE, /*pos*/ 1989, -4607, 4949, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvTree), + OBJECT(/*model*/ MODEL_CCM_SNOW_TREE, /*pos*/ 1248, -4607, 5474, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvTree), + OBJECT(/*model*/ MODEL_CCM_SNOW_TREE, /*pos*/ -5508, -1740, 4148, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvTree), + OBJECT(/*model*/ MODEL_CCM_SNOW_TREE, /*pos*/ -4576, -1740, 4814, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvTree), + OBJECT(/*model*/ MODEL_CCM_SNOW_TREE, /*pos*/ -488, 2560, -2305, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvTree), + OBJECT(/*model*/ MODEL_CCM_SNOW_TREE, /*pos*/ -5892, -1740, 811, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvTree), + OBJECT(/*model*/ MODEL_CCM_SNOW_TREE, /*pos*/ -3748, -4607, 4464, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvTree), + OBJECT(/*model*/ MODEL_CCM_SNOW_TREE, /*pos*/ 2237, 2560, -1630, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvTree), + OBJECT(/*model*/ MODEL_CCM_SNOW_TREE, /*pos*/ 2885, 2560, -1638, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvTree), + OBJECT(/*model*/ MODEL_CCM_SNOW_TREE, /*pos*/ -1146, -3583, 5919, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvTree), + OBJECT(/*model*/ MODEL_CCM_SNOW_TREE, /*pos*/ -1768, 2560, -1793, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvTree), + OBJECT(/*model*/ MODEL_CCM_SNOW_TREE, /*pos*/ -3443, 807, -2713, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvTree), + OBJECT(/*model*/ MODEL_CASTLE_WOODEN_DOOR, /*pos*/ 2464, -4607, 4302, /*angle*/ 0, 222, 0, /*behParam*/ (20 << 16), /*beh*/ bhvDoorWarp), + RETURN(), +}; + +static const LevelScript script_ccm_area_2_macro_objects[] = { + // Macro objects + OBJECT(/*model*/ MODEL_YELLOW_COIN, /*pos*/ 2255, 4091, -536, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvOneCoin), + OBJECT(/*model*/ MODEL_YELLOW_COIN, /*pos*/ 2055, 4352, -497, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvYellowCoin), + OBJECT(/*model*/ MODEL_YELLOW_COIN, /*pos*/ 1843, 4486, -433, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvYellowCoin), + OBJECT(/*model*/ MODEL_YELLOW_COIN, /*pos*/ 1603, 4567, -347, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvYellowCoin), + OBJECT(/*model*/ MODEL_YELLOW_COIN, /*pos*/ 1397, 4530, -287, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvYellowCoin), + OBJECT(/*model*/ MODEL_WOODEN_SIGNPOST, /*pos*/ -5320, 6656, -6540, /*angle*/ 0, 0, 0, /*behParam*/ (DIALOG_054 << 16), /*beh*/ bhvMessagePanel), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ -4980, 2180, -1980, /*angle*/ 0, 0, 0, /*behParam*/ ((COIN_FORMATION_FLAG_NONE) << 16), /*beh*/ bhvCoinFormation), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ 6640, -60, -800, /*angle*/ 0, 0, 0, /*behParam*/ ((COIN_FORMATION_FLAG_NONE) << 16), /*beh*/ bhvCoinFormation), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ 6640, -1020, 440, /*angle*/ 0, 0, 0, /*behParam*/ ((COIN_FORMATION_FLAG_NONE) << 16), /*beh*/ bhvCoinFormation), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ 6640, -1820, 1760, /*angle*/ 0, 0, 0, /*behParam*/ ((COIN_FORMATION_FLAG_NONE) << 16), /*beh*/ bhvCoinFormation), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ 6640, -2260, 2620, /*angle*/ 0, 0, 0, /*behParam*/ ((COIN_FORMATION_FLAG_NONE) << 16), /*beh*/ bhvCoinFormation), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ -6460, -5000, -3200, /*angle*/ 0, 0, 0, /*behParam*/ ((COIN_FORMATION_FLAG_NONE) << 16), /*beh*/ bhvCoinFormation), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ -6460, -5540, -4100, /*angle*/ 0, 0, 0, /*behParam*/ ((COIN_FORMATION_FLAG_NONE) << 16), /*beh*/ bhvCoinFormation), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ -6460, -5200, -5000, /*angle*/ 0, 0, 0, /*behParam*/ ((COIN_FORMATION_FLAG_NONE) << 16), /*beh*/ bhvCoinFormation), + OBJECT(/*model*/ MODEL_EXCLAMATION_BOX, /*pos*/ -5600, -4500, -6644, /*angle*/ 0, 0, 0, /*behParam*/ (EXCLAMATION_BOX_BP_1UP_WALKING << 16), /*beh*/ bhvExclamationBox), + OBJECT(/*model*/ MODEL_BLUE_COIN, /*pos*/ -3160, 6267, -6120, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvMovingBlueCoin), + OBJECT(/*model*/ MODEL_YELLOW_COIN, /*pos*/ -700, 5923, -6240, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvOneCoin), + OBJECT(/*model*/ MODEL_YELLOW_COIN, /*pos*/ 2260, 5342, -6440, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvOneCoin), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ 2960, 4280, -880, /*angle*/ 0, 120, 0, /*behParam*/ ((COIN_FORMATION_FLAG_NONE) << 16), /*beh*/ bhvCoinFormation), + OBJECT(/*model*/ MODEL_YELLOW_COIN, /*pos*/ 1900, 659, -2340, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvOneCoin), + OBJECT(/*model*/ MODEL_YELLOW_COIN, /*pos*/ 1720, 690, -2220, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvOneCoin), + OBJECT(/*model*/ MODEL_YELLOW_COIN, /*pos*/ 3400, 302, -5240, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvOneCoin), + OBJECT(/*model*/ MODEL_YELLOW_COIN, /*pos*/ 3600, 297, -5420, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvOneCoin), + OBJECT(/*model*/ MODEL_YELLOW_COIN, /*pos*/ 6120, 4435, -5020, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvOneCoin), + OBJECT(/*model*/ MODEL_YELLOW_COIN, /*pos*/ 6140, -152, -5540, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvOneCoin), + OBJECT(/*model*/ MODEL_YELLOW_COIN, /*pos*/ 6320, -200, -5320, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvOneCoin), + OBJECT(/*model*/ MODEL_YELLOW_COIN, /*pos*/ 3960, -3297, 6440, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvOneCoin), + OBJECT(/*model*/ MODEL_YELLOW_COIN, /*pos*/ 1400, -3560, 5840, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvOneCoin), + OBJECT(/*model*/ MODEL_YELLOW_COIN, /*pos*/ -220, -3780, 4960, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvOneCoin), + OBJECT(/*model*/ MODEL_YELLOW_COIN, /*pos*/ -520, -3890, 4360, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvOneCoin), + OBJECT(/*model*/ MODEL_YELLOW_COIN, /*pos*/ -740, -4008, 3540, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvOneCoin), + OBJECT(/*model*/ MODEL_YELLOW_COIN, /*pos*/ -920, -4094, 2760, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvOneCoin), + OBJECT(/*model*/ MODEL_YELLOW_COIN, /*pos*/ -960, -4101, 2080, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvOneCoin), + OBJECT(/*model*/ MODEL_YELLOW_COIN, /*pos*/ -860, 3391, -760, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvOneCoin), + OBJECT(/*model*/ MODEL_YELLOW_COIN, /*pos*/ -1120, 3293, -1140, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvOneCoin), + OBJECT(/*model*/ MODEL_YELLOW_COIN, /*pos*/ -1560, 2989, -3280, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvOneCoin), + OBJECT(/*model*/ MODEL_YELLOW_COIN, /*pos*/ -1740, 2926, -3780, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvOneCoin), + OBJECT(/*model*/ MODEL_YELLOW_COIN, /*pos*/ -2849, 2677, -4608, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvOneCoin), + OBJECT(/*model*/ MODEL_YELLOW_COIN, /*pos*/ -4620, 2353, -4120, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvOneCoin), + OBJECT(/*model*/ MODEL_1UP, /*pos*/ -4890, 1452, 552, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhv1upSliding), + OBJECT(/*model*/ MODEL_1UP, /*pos*/ -6369, -1538, 3726, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhv1upSliding), + // Special objects + OBJECT(/*model*/ MODEL_CASTLE_WOODEN_DOOR, /*pos*/ -7628, -5836, -6988, /*angle*/ 0, 90, 0, /*behParam*/ (20 << 16), /*beh*/ bhvDoorWarp), + RETURN(), +}; + +static const LevelScript script_ccm_area_1_objects_1[] = { OBJECT(/*model*/ MODEL_CCM_ROPEWAY_LIFT, /*pos*/ 531, -4430, 6426, /*angle*/ 0, 0, 0, /*behParam*/ 0x07120000, /*beh*/ bhvPlatformOnTrack), RETURN(), }; -static const LevelScript script_func_local_2[] = { +static const LevelScript script_ccm_area_1_objects_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), @@ -30,7 +142,7 @@ static const LevelScript script_func_local_2[] = { RETURN(), }; -static const LevelScript script_func_local_3[] = { +static const LevelScript script_ccm_area_1_objects_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), @@ -39,7 +151,7 @@ static const LevelScript script_func_local_3[] = { RETURN(), }; -static const LevelScript script_func_local_4[] = { +static const LevelScript script_ccm_area_2_objects_1[] = { 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), @@ -87,11 +199,11 @@ const LevelScript level_ccm_entry[] = { 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), - JUMP_LINK(script_func_local_1), - JUMP_LINK(script_func_local_2), - JUMP_LINK(script_func_local_3), + JUMP_LINK(script_ccm_area_1_objects_1), + JUMP_LINK(script_ccm_area_1_objects_2), + JUMP_LINK(script_ccm_area_1_objects_3), TERRAIN(/*terrainData*/ ccm_seg7_area_1_collision), - MACRO_OBJECTS(/*objList*/ ccm_seg7_area_1_macro_objs), + JUMP_LINK(script_ccm_area_1_macro_objects), SHOW_DIALOG(/*index*/ 0x00, DIALOG_048), SET_BACKGROUND_MUSIC(/*settingsPreset*/ 0x0000, /*seq*/ SEQ_LEVEL_SNOW), TERRAIN_TYPE(/*terrainType*/ TERRAIN_SNOW), @@ -103,9 +215,9 @@ const LevelScript level_ccm_entry[] = { 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), - JUMP_LINK(script_func_local_4), + JUMP_LINK(script_ccm_area_2_objects_1), TERRAIN(/*terrainData*/ ccm_seg7_area_2_collision), - MACRO_OBJECTS(/*objList*/ ccm_seg7_area_2_macro_objs), + JUMP_LINK(script_ccm_area_2_macro_objects), SET_BACKGROUND_MUSIC(/*settingsPreset*/ 0x0001, /*seq*/ SEQ_LEVEL_SLIDE), TERRAIN_TYPE(/*terrainType*/ TERRAIN_SLIDE), END_AREA(), diff --git a/levels/cotmc/areas/1/collision.inc.c b/levels/cotmc/areas/1/collision.inc.c index b4f278906..afe36d028 100644 --- a/levels/cotmc/areas/1/collision.inc.c +++ b/levels/cotmc/areas/1/collision.inc.c @@ -989,8 +989,6 @@ const Collision cotmc_seg7_collision_level[] = { COL_TRI(201, 207, 202), COL_TRI(208, 206, 207), COL_TRI_STOP(), - COL_SPECIAL_INIT(1), - SPECIAL_OBJECT_WITH_YAW(/*preset*/ special_null_start, /*pos*/ -4185, 20, -47, /*yaw*/ 64), // unused, probably an early way to set initial position COL_WATER_BOX_INIT(1), COL_WATER_BOX(0, -1535, -7679, 1536, 3389, 0), COL_END(), diff --git a/levels/cotmc/areas/1/macro.inc.c b/levels/cotmc/areas/1/macro.inc.c deleted file mode 100644 index 0792e633f..000000000 --- a/levels/cotmc/areas/1/macro.inc.c +++ /dev/null @@ -1,25 +0,0 @@ -// 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_END(), -}; diff --git a/levels/cotmc/header.h b/levels/cotmc/header.h index d788998da..b03585458 100644 --- a/levels/cotmc/header.h +++ b/levels/cotmc/header.h @@ -11,7 +11,6 @@ extern const Gfx cotmc_seg7_dl_07007D48[]; extern const Gfx cotmc_seg7_dl_0700A160[]; extern const Gfx cotmc_seg7_dl_0700A4B8[]; extern const Collision cotmc_seg7_collision_level[]; -extern const MacroObject cotmc_seg7_macro_objs[]; extern const Gfx cotmc_dl_water_begin[]; extern const Gfx cotmc_dl_water_end[]; extern Movtex cotmc_movtex_tris_water[]; diff --git a/levels/cotmc/leveldata.c b/levels/cotmc/leveldata.c index ae5abbeaa..e24d46fd5 100644 --- a/levels/cotmc/leveldata.c +++ b/levels/cotmc/leveldata.c @@ -2,11 +2,7 @@ #include "sm64.h" #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 "textures.h" -#include "dialog_ids.h" #include "make_const_nonconst.h" #include "levels/cotmc/texture.inc.c" @@ -14,5 +10,4 @@ #include "levels/cotmc/areas/1/2/model.inc.c" #include "levels/cotmc/areas/1/3/model.inc.c" #include "levels/cotmc/areas/1/collision.inc.c" -#include "levels/cotmc/areas/1/macro.inc.c" #include "levels/cotmc/movtext.inc.c" diff --git a/levels/cotmc/script.c b/levels/cotmc/script.c index 149a11b2e..b1db1ebc7 100644 --- a/levels/cotmc/script.c +++ b/levels/cotmc/script.c @@ -16,14 +16,41 @@ #include "make_const_nonconst.h" #include "levels/cotmc/header.h" -static const LevelScript script_func_local_1[] = { + +static const LevelScript script_cotmc_macro_objects[] = { + // Macro objects + OBJECT(/*model*/ MODEL_SNUFIT, /*pos*/ -2920, 220, -20, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvSnufit), + OBJECT(/*model*/ MODEL_SNUFIT, /*pos*/ -1380, 240, 740, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvSnufit), + OBJECT(/*model*/ MODEL_EXCLAMATION_BOX, /*pos*/ -360, 300, -200, /*angle*/ 0, 0, 0, /*behParam*/ (EXCLAMATION_BOX_BP_METAL_CAP << 16), /*beh*/ bhvExclamationBox), + OBJECT(/*model*/ MODEL_SNUFIT, /*pos*/ 360, 200, -1120, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvSnufit), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ 400, 256, -4300, /*angle*/ 0, 0, 0, /*behParam*/ ((COIN_FORMATION_FLAG_NONE) << 16), /*beh*/ bhvCoinFormation), + OBJECT(/*model*/ MODEL_EXCLAMATION_BOX, /*pos*/ 300, 620, -5280, /*angle*/ 0, 0, 0, /*behParam*/ (EXCLAMATION_BOX_BP_METAL_CAP << 16), /*beh*/ bhvExclamationBox), + OBJECT(/*model*/ MODEL_SNUFIT, /*pos*/ -340, 260, -2620, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvSnufit), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ 0, -450, -7000, /*angle*/ 0, 0, 0, /*behParam*/ ((COIN_FORMATION_FLAG_RING) << 16), /*beh*/ bhvCoinFormation), + OBJECT(/*model*/ MODEL_1UP, /*pos*/ 900, 260, -3620, /*angle*/ 0, 0, 0, /*behParam*/ (MUSHROOM_BP_REQUIRES_NONE << 16), /*beh*/ bhv1Up), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ 0, -170, -1660, /*angle*/ 0, 0, 0, /*behParam*/ ((COIN_FORMATION_FLAG_NONE) << 16), /*beh*/ bhvCoinFormation), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ -20, -211, -3940, /*angle*/ 0, 0, 0, /*behParam*/ ((COIN_FORMATION_FLAG_NONE) << 16), /*beh*/ bhvCoinFormation), + OBJECT(/*model*/ MODEL_WOODEN_SIGNPOST, /*pos*/ -71, 20, 720, /*angle*/ 0, 270, 0, /*behParam*/ (DIALOG_123 << 16), /*beh*/ bhvMessagePanel), + OBJECT(/*model*/ MODEL_RED_COIN, /*pos*/ 200, -291, -5600, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvRedCoin), + OBJECT(/*model*/ MODEL_RED_COIN, /*pos*/ 980, 260, -3430, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvRedCoin), + OBJECT(/*model*/ MODEL_RED_COIN, /*pos*/ -540, -352, -5940, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvRedCoin), + OBJECT(/*model*/ MODEL_RED_COIN, /*pos*/ -300, 450, -6240, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvRedCoin), + OBJECT(/*model*/ MODEL_RED_COIN, /*pos*/ -200, -400, -6680, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvRedCoin), + OBJECT(/*model*/ MODEL_RED_COIN, /*pos*/ 250, 450, -6400, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvRedCoin), + OBJECT(/*model*/ MODEL_RED_COIN, /*pos*/ 540, -361, -6340, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvRedCoin), + OBJECT(/*model*/ MODEL_RED_COIN, /*pos*/ 980, 260, -3810, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvRedCoin), + OBJECT(/*model*/ MODEL_EXCLAMATION_BOX, /*pos*/ -20, 180, 2060, /*angle*/ 0, 0, 0, /*behParam*/ (EXCLAMATION_BOX_BP_1UP_RUNNING_AWAY << 16), /*beh*/ bhvExclamationBox), + RETURN(), +}; + +static const LevelScript script_cotmc_objects_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), RETURN(), }; -static const LevelScript script_func_local_2[] = { +static const LevelScript script_cotmc_objects_2[] = { OBJECT(/*model*/ MODEL_NONE, /*pos*/ 0, -200, -7000, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvHiddenRedCoinStar), RETURN(), }; @@ -50,10 +77,10 @@ const LevelScript level_cotmc_entry[] = { 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), - JUMP_LINK(script_func_local_2), - JUMP_LINK(script_func_local_1), + JUMP_LINK(script_cotmc_objects_1), + JUMP_LINK(script_cotmc_objects_2), TERRAIN(/*terrainData*/ cotmc_seg7_collision_level), - MACRO_OBJECTS(/*objList*/ cotmc_seg7_macro_objs), + JUMP_LINK(script_cotmc_macro_objects), SHOW_DIALOG(/*index*/ 0x00, DIALOG_130), SET_BACKGROUND_MUSIC(/*settingsPreset*/ 0x0004, /*seq*/ SEQ_LEVEL_UNDERGROUND), TERRAIN_TYPE(/*terrainType*/ TERRAIN_STONE), diff --git a/levels/ddd/areas/1/macro.inc.c b/levels/ddd/areas/1/macro.inc.c deleted file mode 100644 index 6544cfdb6..000000000 --- a/levels/ddd/areas/1/macro.inc.c +++ /dev/null @@ -1,22 +0,0 @@ -// 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_END(), -}; diff --git a/levels/ddd/areas/2/macro.inc.c b/levels/ddd/areas/2/macro.inc.c deleted file mode 100644 index f442f3505..000000000 --- a/levels/ddd/areas/2/macro.inc.c +++ /dev/null @@ -1,50 +0,0 @@ -// 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_END(), -}; diff --git a/levels/ddd/header.h b/levels/ddd/header.h index 0d946f1ae..4b8252c46 100644 --- a/levels/ddd/header.h +++ b/levels/ddd/header.h @@ -30,8 +30,6 @@ extern const Gfx ddd_seg7_dl_0700CE48[]; extern const Gfx ddd_seg7_dl_0700D2A0[]; extern const Collision ddd_seg7_area_1_collision[]; extern const Collision ddd_seg7_area_2_collision[]; -extern const MacroObject ddd_seg7_area_1_macro_objs[]; -extern const MacroObject ddd_seg7_area_2_macro_objs[]; extern const Collision ddd_seg7_collision_submarine[]; extern const Collision ddd_seg7_collision_bowser_sub_door[]; extern const struct MovtexQuadCollection ddd_movtex_area1_water[]; diff --git a/levels/ddd/leveldata.c b/levels/ddd/leveldata.c index 4b0434c5c..7326c7f4e 100644 --- a/levels/ddd/leveldata.c +++ b/levels/ddd/leveldata.c @@ -2,11 +2,7 @@ #include "sm64.h" #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 "textures.h" -#include "dialog_ids.h" #include "make_const_nonconst.h" #include "levels/ddd/texture.inc.c" @@ -28,8 +24,6 @@ #include "levels/ddd/pole/model.inc.c" #include "levels/ddd/areas/1/collision.inc.c" #include "levels/ddd/areas/2/collision.inc.c" -#include "levels/ddd/areas/1/macro.inc.c" -#include "levels/ddd/areas/2/macro.inc.c" #include "levels/ddd/submarine/collision.inc.c" #include "levels/ddd/sub_door/collision.inc.c" #include "levels/ddd/areas/1/movtext.inc.c" diff --git a/levels/ddd/script.c b/levels/ddd/script.c index 470ae37c9..e45433587 100644 --- a/levels/ddd/script.c +++ b/levels/ddd/script.c @@ -3,6 +3,7 @@ #include "behavior_data.h" #include "model_ids.h" #include "seq_ids.h" +#include "dialog_ids.h" #include "segment_symbols.h" #include "level_commands.h" @@ -15,7 +16,82 @@ #include "make_const_nonconst.h" #include "levels/ddd/header.h" -static const LevelScript script_func_local_1[] = { + +static const LevelScript script_ddd_area_1_macro_objects[] = { + // Macro objects + OBJECT(/*model*/ MODEL_NONE, /*pos*/ -2880, -5120, -1850, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvSeaweedBundle), + OBJECT(/*model*/ MODEL_CLAM_SHELL, /*pos*/ -4760, -5120, 580, /*angle*/ 0, 90, 0, /*behParam*/ 0x00000000, /*beh*/ bhvClamShell), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ -3510, -5120, 1950, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvSeaweedBundle), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ -4760, -5100, 580, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvHidden1upTrigger), + OBJECT(/*model*/ MODEL_1UP, /*pos*/ -4760, -5080, 580, /*angle*/ 0, 0, 0, /*behParam*/ (1 << 16), /*beh*/ bhvHidden1up), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ -1000, -4250, 0, /*angle*/ 0, 90, 0, /*behParam*/ ((COIN_FORMATION_FLAG_FLYING | COIN_FORMATION_FLAG_RING | COIN_FORMATION_FLAG_VERTICAL) << 16), /*beh*/ bhvCoinFormation), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ -4646, -4615, -800, /*angle*/ 0, 0, 0, /*behParam*/ (FISH_SPAWNER_BP_FEW_BLUE << 16), /*beh*/ bhvFishSpawner), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ -1804, -2560, 1292, /*angle*/ 0, 0, 0, /*behParam*/ (FISH_SPAWNER_BP_FEW_CYAN << 16), /*beh*/ bhvFishSpawner), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ -3760, -4560, 660, /*angle*/ 0, 0, 0, /*behParam*/ ((COIN_FORMATION_FLAG_FLYING | COIN_FORMATION_FLAG_VERTICAL ) << 16), /*beh*/ bhvCoinFormation), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ -4240, -4786, 1180, /*angle*/ 0, 0, 0, /*behParam*/ ((COIN_FORMATION_FLAG_FLYING | COIN_FORMATION_FLAG_VERTICAL ) << 16), /*beh*/ bhvCoinFormation), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ -4840, -1137, 1860, /*angle*/ 0, 315, 0, /*behParam*/ ((COIN_FORMATION_FLAG_NONE ) << 16), /*beh*/ bhvCoinFormation), + OBJECT(/*model*/ MODEL_YELLOW_COIN, /*pos*/ -2180, -5119, 1720, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvOneCoin), + OBJECT(/*model*/ MODEL_YELLOW_COIN, /*pos*/ -1460, -5119, 1300, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvOneCoin), + OBJECT(/*model*/ MODEL_YELLOW_COIN, /*pos*/ -1320, -5119, 840, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvOneCoin), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ -3580, -2280, -1120, /*angle*/ 0, 0, 0, /*behParam*/ (FISH_SPAWNER_BP_FEW_BLUE << 16), /*beh*/ bhvFishSpawner), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ -2020, -3460, -120, /*angle*/ 0, 0, 0, /*behParam*/ (FISH_SPAWNER_BP_FEW_BLUE << 16), /*beh*/ bhvFishSpawner), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ 0, -4250, 0, /*angle*/ 0, 90, 0, /*behParam*/ ((COIN_FORMATION_FLAG_FLYING | COIN_FORMATION_FLAG_RING | COIN_FORMATION_FLAG_VERTICAL) << 16), /*beh*/ bhvCoinFormation), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ -2000, -4250, 0, /*angle*/ 0, 90, 0, /*behParam*/ ((COIN_FORMATION_FLAG_FLYING | COIN_FORMATION_FLAG_RING | COIN_FORMATION_FLAG_VERTICAL) << 16), /*beh*/ bhvCoinFormation), + RETURN(), +}; + +static const LevelScript script_ddd_area_2_macro_objects[] = { + // Macro objects + OBJECT(/*model*/ MODEL_EXCLAMATION_BOX, /*pos*/ 6800, 500, -850, /*angle*/ 0, 0, 0, /*behParam*/ (EXCLAMATION_BOX_BP_METAL_CAP << 16), /*beh*/ bhvExclamationBox), + OBJECT(/*model*/ MODEL_EXCLAMATION_BOX, /*pos*/ 6800, 500, -150, /*angle*/ 0, 0, 0, /*behParam*/ (EXCLAMATION_BOX_BP_VANISH_CAP << 16), /*beh*/ bhvExclamationBox), + OBJECT(/*model*/ MODEL_PURPLE_SWITCH, /*pos*/ 6800, 110, 2000, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvFloorSwitchHiddenObjects), + OBJECT(/*model*/ MODEL_BREAKABLE_BOX, /*pos*/ 6075, -100, 2000, /*angle*/ 0, 0, 0, /*behParam*/ (BREAKABLE_BOX_BP_NO_COINS << 16), /*beh*/ bhvHiddenObject), + OBJECT(/*model*/ MODEL_BREAKABLE_BOX, /*pos*/ 5875, 100, 2000, /*angle*/ 0, 0, 0, /*behParam*/ (BREAKABLE_BOX_BP_NO_COINS << 16), /*beh*/ bhvHiddenObject), + OBJECT(/*model*/ MODEL_BREAKABLE_BOX, /*pos*/ 5675, 100, 2000, /*angle*/ 0, 0, 0, /*behParam*/ (BREAKABLE_BOX_BP_NO_COINS << 16), /*beh*/ bhvHiddenObject), + OBJECT(/*model*/ MODEL_BREAKABLE_BOX, /*pos*/ 5475, 300, 2000, /*angle*/ 0, 0, 0, /*behParam*/ (BREAKABLE_BOX_BP_NO_COINS << 16), /*beh*/ bhvHiddenObject), + OBJECT(/*model*/ MODEL_BREAKABLE_BOX, /*pos*/ 5275, 300, 2000, /*angle*/ 0, 0, 0, /*behParam*/ (BREAKABLE_BOX_BP_NO_COINS << 16), /*beh*/ bhvHiddenObject), + OBJECT(/*model*/ MODEL_BREAKABLE_BOX, /*pos*/ 5075, 500, 2000, /*angle*/ 0, 0, 0, /*behParam*/ (BREAKABLE_BOX_BP_NO_COINS << 16), /*beh*/ bhvHiddenObject), + OBJECT(/*model*/ MODEL_BREAKABLE_BOX, /*pos*/ 4875, 500, 2000, /*angle*/ 0, 0, 0, /*behParam*/ (BREAKABLE_BOX_BP_NO_COINS << 16), /*beh*/ bhvHiddenObject), + OBJECT(/*model*/ MODEL_BREAKABLE_BOX, /*pos*/ 6275, -100, 2000, /*angle*/ 0, 0, 0, /*behParam*/ (BREAKABLE_BOX_BP_NO_COINS << 16), /*beh*/ bhvHiddenObject), + OBJECT(/*model*/ MODEL_BREAKABLE_BOX, /*pos*/ 6475, -100, 2000, /*angle*/ 0, 0, 0, /*behParam*/ (BREAKABLE_BOX_BP_NO_COINS << 16), /*beh*/ bhvHiddenObject), + OBJECT(/*model*/ MODEL_RED_COIN, /*pos*/ 4680, 1155, -2200, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvRedCoin), + OBJECT(/*model*/ MODEL_RED_COIN, /*pos*/ 3525, 1155, -2250, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvRedCoin), + OBJECT(/*model*/ MODEL_RED_COIN, /*pos*/ 3850, 1111, 3550, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvRedCoin), + OBJECT(/*model*/ MODEL_RED_COIN, /*pos*/ 4400, 1288, 3595, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvRedCoin), + OBJECT(/*model*/ MODEL_RED_COIN, /*pos*/ 2974, 1015, 3584, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvRedCoin), + OBJECT(/*model*/ MODEL_RED_COIN, /*pos*/ 5550, 1015, 3575, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvRedCoin), + OBJECT(/*model*/ MODEL_RED_COIN, /*pos*/ 3300, 1111, -1900, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvRedCoin), + OBJECT(/*model*/ MODEL_RED_COIN, /*pos*/ 2100, 1025, -1600, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvRedCoin), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ 2061, -3323, 2246, /*angle*/ 0, 0, 0, /*behParam*/ (FISH_SPAWNER_BP_FEW_BLUE << 16), /*beh*/ bhvFishSpawner), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ 5661, -2923, -1415, /*angle*/ 0, 0, 0, /*behParam*/ (FISH_SPAWNER_BP_FEW_CYAN << 16), /*beh*/ bhvFishSpawner), + OBJECT(/*model*/ MODEL_CLAM_SHELL, /*pos*/ 1273, -4106, 2320, /*angle*/ 0, 90, 0, /*behParam*/ 0x00000000, /*beh*/ bhvClamShell), + OBJECT(/*model*/ MODEL_WOODEN_SIGNPOST, /*pos*/ 3086, 110, 6120, /*angle*/ 0, 180, 0, /*behParam*/ (DIALOG_053 << 16), /*beh*/ bhvMessagePanel), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ 6420, -4106, -2026, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvSeaweedBundle), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ 6340, -4106, -1413, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvSeaweedBundle), + OBJECT(/*model*/ MODEL_CLAM_SHELL, /*pos*/ 1966, -4106, 3226, /*angle*/ 0, 135, 0, /*behParam*/ 0x00000000, /*beh*/ bhvClamShell), + OBJECT(/*model*/ MODEL_CLAM_SHELL, /*pos*/ 3886, -4006, 5130, /*angle*/ 0, 180, 0, /*behParam*/ 0x00000000, /*beh*/ bhvClamShell), + OBJECT(/*model*/ MODEL_BREAKABLE_BOX, /*pos*/ 5740, 710, 3900, /*angle*/ 0, 0, 0, /*behParam*/ (BREAKABLE_BOX_BP_NO_COINS << 16), /*beh*/ bhvHiddenObject), + OBJECT(/*model*/ MODEL_BREAKABLE_BOX, /*pos*/ 5740, 510, 4100, /*angle*/ 0, 0, 0, /*behParam*/ (BREAKABLE_BOX_BP_NO_COINS << 16), /*beh*/ bhvHiddenObject), + OBJECT(/*model*/ MODEL_BREAKABLE_BOX, /*pos*/ 5740, 310, 4300, /*angle*/ 0, 0, 0, /*behParam*/ (BREAKABLE_BOX_BP_NO_COINS << 16), /*beh*/ bhvHiddenObject), + OBJECT(/*model*/ MODEL_BREAKABLE_BOX, /*pos*/ 5740, 110, 4500, /*angle*/ 0, 0, 0, /*behParam*/ (BREAKABLE_BOX_BP_NO_COINS << 16), /*beh*/ bhvHiddenObject), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ 2999, -4092, 4430, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvSeaweedBundle), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ 4876, -4087, 4430, /*angle*/ 0, 0, 0, /*behParam*/ ((COIN_FORMATION_FLAG_RING ) << 16), /*beh*/ bhvCoinFormation), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ 3892, -4030, -3830, /*angle*/ 0, 0, 0, /*behParam*/ ((COIN_FORMATION_FLAG_FLYING | COIN_FORMATION_FLAG_VERTICAL) << 16), /*beh*/ bhvCoinFormation), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ 3923, 110, 5953, /*angle*/ 0, 90, 0, /*behParam*/ ((COIN_FORMATION_FLAG_NONE ) << 16), /*beh*/ bhvCoinFormation), + OBJECT(/*model*/ MODEL_BOWLING_BALL, /*pos*/ 938, 153, 4107, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvFireSpitter), + OBJECT(/*model*/ MODEL_BREAKABLE_BOX, /*pos*/ 5940, 110, 4500, /*angle*/ 0, 0, 0, /*behParam*/ (BREAKABLE_BOX_BP_NO_COINS << 16), /*beh*/ bhvHiddenObject), + OBJECT(/*model*/ MODEL_BLUE_COIN_SWITCH, /*pos*/ 1614, 928, 922, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvBlueCoinSwitch), + OBJECT(/*model*/ MODEL_BLUE_COIN, /*pos*/ 1414, 1020, 622, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvHiddenBlueCoin), + OBJECT(/*model*/ MODEL_BLUE_COIN, /*pos*/ 1814, 1020, 622, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvHiddenBlueCoin), + OBJECT(/*model*/ MODEL_BLUE_COIN, /*pos*/ 1814, 1020, 1222, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvHiddenBlueCoin), + OBJECT(/*model*/ MODEL_BLUE_COIN, /*pos*/ 1414, 1020, 1222, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvHiddenBlueCoin), + OBJECT(/*model*/ MODEL_BLUE_COIN, /*pos*/ 1414, 1020, 922, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvHiddenBlueCoin), + OBJECT(/*model*/ MODEL_BLUE_COIN, /*pos*/ 1814, 1020, 922, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvHiddenBlueCoin), + OBJECT(/*model*/ MODEL_KOOPA_SHELL, /*pos*/ 3886, -4050, 5100, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvKoopaShellUnderwater), + RETURN(), +}; + +static const LevelScript script_ddd_area_1_objects_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), @@ -26,13 +102,13 @@ static const LevelScript script_func_local_1[] = { RETURN(), }; -static const LevelScript script_func_local_2[] = { +static const LevelScript script_ddd_area_1_objects_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), RETURN(), }; -static const LevelScript script_func_local_3[] = { +static const LevelScript script_ddd_area_2_objects_1[] = { 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), @@ -47,12 +123,12 @@ static const LevelScript script_func_local_3[] = { RETURN(), }; -static const LevelScript script_func_local_4[] = { +static const LevelScript script_ddd_area_2_objects_2[] = { OBJECT(/*model*/ MODEL_NONE, /*pos*/ 3404, -3319, -489, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvJetStream), RETURN(), }; -static const LevelScript script_func_local_5[] = { +static const LevelScript script_ddd_area_2_objects_3[] = { 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), @@ -87,11 +163,11 @@ const LevelScript level_ddd_entry[] = { 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), WHIRLPOOL(/*index*/ 0, /*acts*/ ALL_ACTS, /*pos*/ -3174, -4915, 102, /*strength*/ 20), - JUMP_LINK(script_func_local_1), - JUMP_LINK(script_func_local_2), + JUMP_LINK(script_ddd_area_1_objects_1), + JUMP_LINK(script_ddd_area_1_objects_2), INSTANT_WARP(/*index*/ 3, /*destArea*/ 2, /*displace*/ -8192, 0, 0), TERRAIN(/*terrainData*/ ddd_seg7_area_1_collision), - MACRO_OBJECTS(/*objList*/ ddd_seg7_area_1_macro_objs), + JUMP_LINK(script_ddd_area_1_macro_objects), SET_BACKGROUND_MUSIC(/*settingsPreset*/ 0x0003, /*seq*/ SEQ_LEVEL_WATER), TERRAIN_TYPE(/*terrainType*/ TERRAIN_WATER), END_AREA(), @@ -102,12 +178,12 @@ const LevelScript level_ddd_entry[] = { 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), - JUMP_LINK(script_func_local_3), - JUMP_LINK(script_func_local_4), - JUMP_LINK(script_func_local_5), + JUMP_LINK(script_ddd_area_2_objects_1), + JUMP_LINK(script_ddd_area_2_objects_2), + JUMP_LINK(script_ddd_area_2_objects_3), INSTANT_WARP(/*index*/ 2, /*destArea*/ 1, /*displace*/ 8192, 0, 0), TERRAIN(/*terrainData*/ ddd_seg7_area_2_collision), - MACRO_OBJECTS(/*objList*/ ddd_seg7_area_2_macro_objs), + JUMP_LINK(script_ddd_area_2_macro_objects), SET_BACKGROUND_MUSIC(/*settingsPreset*/ 0x0003, /*seq*/ SEQ_LEVEL_WATER), TERRAIN_TYPE(/*terrainType*/ TERRAIN_WATER), END_AREA(), diff --git a/levels/hmc/areas/1/collision.inc.c b/levels/hmc/areas/1/collision.inc.c index 4fe8d8295..add3881f9 100644 --- a/levels/hmc/areas/1/collision.inc.c +++ b/levels/hmc/areas/1/collision.inc.c @@ -3598,20 +3598,6 @@ const Collision hmc_seg7_collision_level[] = { COL_TRI(55, 56, 57), COL_TRI(55, 58, 56), COL_TRI_STOP(), - COL_SPECIAL_INIT(13), - SPECIAL_OBJECT_WITH_YAW(/*preset*/ special_null_start, /*pos*/ -7601, 2253, 7630, /*yaw*/ 96), // unused, probably an early way to set initial position - SPECIAL_OBJECT_WITH_YAW(/*preset*/ special_wooden_door, /*pos*/ 922, -4689, 2330, /*yaw*/ 192), - SPECIAL_OBJECT_WITH_YAW(/*preset*/ special_wooden_door, /*pos*/ -3586, 1536, 647, /*yaw*/ 19), - SPECIAL_OBJECT_WITH_YAW(/*preset*/ special_wooden_door, /*pos*/ 5911, -204, 870, /*yaw*/ 0), - SPECIAL_OBJECT_WITH_YAW(/*preset*/ special_wooden_door, /*pos*/ 3817, 205, 870, /*yaw*/ 0), - SPECIAL_OBJECT_WITH_YAW(/*preset*/ special_metal_door, /*pos*/ 1127, -409, -4709, /*yaw*/ 64), - SPECIAL_OBJECT_WITH_YAW(/*preset*/ special_metal_door, /*pos*/ -468, -4279, 6711, /*yaw*/ 32), - SPECIAL_OBJECT_WITH_YAW(/*preset*/ special_metal_door, /*pos*/ -359, -4279, 6602, /*yaw*/ 160), - SPECIAL_OBJECT_WITH_YAW(/*preset*/ special_metal_door, /*pos*/ -3634, 2355, -2764, /*yaw*/ 64), - SPECIAL_OBJECT_WITH_YAW(/*preset*/ special_metal_door, /*pos*/ -4863, 1843, -7551, /*yaw*/ 192), - SPECIAL_OBJECT_WITH_YAW(/*preset*/ special_metal_door, /*pos*/ 3328, -409, -6911, /*yaw*/ 0), - SPECIAL_OBJECT_WITH_YAW(/*preset*/ special_hmc_door, /*pos*/ 358, 2048, 3661, /*yaw*/ 192), - SPECIAL_OBJECT_WITH_YAW(/*preset*/ special_hmc_door, /*pos*/ -6553, 1536, 1459, /*yaw*/ 0), COL_WATER_BOX_INIT(3), COL_WATER_BOX(0, -7628, -2559, 563, 7654, -4791), COL_WATER_BOX(50, 1690, -6348, 6298, 819, -818), diff --git a/levels/hmc/areas/1/macro.inc.c b/levels/hmc/areas/1/macro.inc.c deleted file mode 100644 index 96a75fbbe..000000000 --- a/levels/hmc/areas/1/macro.inc.c +++ /dev/null @@ -1,88 +0,0 @@ -// 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_END(), -}; diff --git a/levels/hmc/header.h b/levels/hmc/header.h index 9ff10e5f3..f75dac136 100644 --- a/levels/hmc/header.h +++ b/levels/hmc/header.h @@ -77,7 +77,6 @@ extern const Gfx hmc_seg7_dl_070242A0[]; extern const Texture *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 RoomData hmc_seg7_rooms[]; extern const Collision hmc_seg7_collision_elevator[]; extern const Collision hmc_seg7_collision_grill_door[]; diff --git a/levels/hmc/leveldata.c b/levels/hmc/leveldata.c index 8ff0b7525..72d363d81 100644 --- a/levels/hmc/leveldata.c +++ b/levels/hmc/leveldata.c @@ -2,11 +2,7 @@ #include "sm64.h" #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 "textures.h" -#include "dialog_ids.h" #include "make_const_nonconst.h" #include "levels/hmc/texture.inc.c" @@ -50,7 +46,6 @@ #include "levels/hmc/rolling_rock_fragment_2/model.inc.c" #include "levels/hmc/areas/1/painting.inc.c" #include "levels/hmc/areas/1/collision.inc.c" -#include "levels/hmc/areas/1/macro.inc.c" #include "levels/hmc/areas/1/room.inc.c" #include "levels/hmc/elevator_platform/collision.inc.c" #include "levels/hmc/grill_door/model.inc.c" diff --git a/levels/hmc/script.c b/levels/hmc/script.c index a38c1fb17..b2a863d21 100644 --- a/levels/hmc/script.c +++ b/levels/hmc/script.c @@ -3,6 +3,7 @@ #include "behavior_data.h" #include "model_ids.h" #include "seq_ids.h" +#include "dialog_ids.h" #include "segment_symbols.h" #include "level_commands.h" @@ -15,7 +16,110 @@ #include "make_const_nonconst.h" #include "levels/hmc/header.h" -static const LevelScript script_func_local_1[] = { + +static const LevelScript script_hmc_macro_objects[] = { + // Macro objects + OBJECT(/*model*/ MODEL_WOODEN_SIGNPOST, /*pos*/ -6060, 2048, 5960, /*angle*/ 0, 315, 0, /*behParam*/ (DIALOG_089 << 16), /*beh*/ bhvMessagePanel), + OBJECT(/*model*/ MODEL_WOODEN_SIGNPOST, /*pos*/ -6770, 1845, 4577, /*angle*/ 0, 0, 0, /*behParam*/ (DIALOG_050 << 16), /*beh*/ bhvMessagePanel), + OBJECT(/*model*/ MODEL_SWOOP, /*pos*/ -439, 220, -2540, /*angle*/ 0, 0, 0, /*behParam*/ (SWOOP_BP_1 << 16), /*beh*/ bhvSwoop), + OBJECT(/*model*/ MODEL_SWOOP, /*pos*/ 80, 140, -4660, /*angle*/ 0, 0, 0, /*behParam*/ (SWOOP_BP_0 << 16), /*beh*/ bhvSwoop), + OBJECT(/*model*/ MODEL_SWOOP, /*pos*/ 800, 60, -7500, /*angle*/ 0, 0, 0, /*behParam*/ (SWOOP_BP_0 << 16), /*beh*/ bhvSwoop), + OBJECT(/*model*/ MODEL_SWOOP, /*pos*/ 1880, 100, -7620, /*angle*/ 0, 0, 0, /*behParam*/ (SWOOP_BP_1 << 16), /*beh*/ bhvSwoop), + OBJECT(/*model*/ MODEL_WOODEN_SIGNPOST, /*pos*/ 2500, 217, 50, /*angle*/ 0, 0, 0, /*behParam*/ (DIALOG_071 << 16), /*beh*/ bhvMessagePanel), + OBJECT(/*model*/ MODEL_WOODEN_SIGNPOST, /*pos*/ 2900, 217, 50, /*angle*/ 0, 0, 0, /*behParam*/ (DIALOG_062 << 16), /*beh*/ bhvMessagePanel), + OBJECT(/*model*/ MODEL_WOODEN_SIGNPOST, /*pos*/ 838, 2052, 3580, /*angle*/ 0, 270, 0, /*behParam*/ (DIALOG_088 << 16), /*beh*/ bhvMessagePanel), + OBJECT(/*model*/ MODEL_SCUTTLEBUG, /*pos*/ -6320, 2048, 6740, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvScuttlebug), + OBJECT(/*model*/ MODEL_SCUTTLEBUG, /*pos*/ -5455, 1536, 521, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvScuttlebug), + OBJECT(/*model*/ MODEL_RED_COIN, /*pos*/ 2140, 2048, 6540, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvRedCoin), + OBJECT(/*model*/ MODEL_RED_COIN, /*pos*/ 2900, 2048, 6500, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvRedCoin), + OBJECT(/*model*/ MODEL_RED_COIN, /*pos*/ 6400, 2090, 5320, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvRedCoin), + OBJECT(/*model*/ MODEL_RED_COIN, /*pos*/ 6820, 1024, 3300, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvRedCoin), + OBJECT(/*model*/ MODEL_RED_COIN, /*pos*/ 6260, 1124, 4960, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvRedCoin), + OBJECT(/*model*/ MODEL_RED_COIN, /*pos*/ 4080, 1124, 5760, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvRedCoin), + OBJECT(/*model*/ MODEL_RED_COIN, /*pos*/ 4640, 2250, 3980, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvRedCoin), + OBJECT(/*model*/ MODEL_RED_COIN, /*pos*/ 2960, 1124, 5140, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvRedCoin), + OBJECT(/*model*/ MODEL_EXCLAMATION_BOX, /*pos*/ -6924, 2440, 7364, /*angle*/ 0, 45, 0, /*behParam*/ (EXCLAMATION_BOX_BP_METAL_CAP << 16), /*beh*/ bhvExclamationBox), + OBJECT(/*model*/ MODEL_SCUTTLEBUG, /*pos*/ 4160, 28, 6308, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvScuttlebug), + OBJECT(/*model*/ MODEL_SCUTTLEBUG, /*pos*/ 5392, 28, 3587, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvScuttlebug), + OBJECT(/*model*/ MODEL_SNUFIT, /*pos*/ 2260, -627, -1660, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvSnufit), + OBJECT(/*model*/ MODEL_SNUFIT, /*pos*/ 5760, -623, -1600, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvSnufit), + OBJECT(/*model*/ MODEL_SNUFIT, /*pos*/ 4560, -620, -1499, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvSnufit), + OBJECT(/*model*/ MODEL_EXCLAMATION_BOX, /*pos*/ 5860, -550, -739, /*angle*/ 0, 0, 0, /*behParam*/ (EXCLAMATION_BOX_BP_METAL_CAP << 16), /*beh*/ bhvExclamationBox), + OBJECT(/*model*/ MODEL_EXCLAMATION_BOX, /*pos*/ 1939, -600, -2920, /*angle*/ 0, 0, 0, /*behParam*/ (EXCLAMATION_BOX_BP_METAL_CAP << 16), /*beh*/ bhvExclamationBox), + OBJECT(/*model*/ MODEL_EXCLAMATION_BOX, /*pos*/ 5100, -600, -4500, /*angle*/ 0, 0, 0, /*behParam*/ (EXCLAMATION_BOX_BP_METAL_CAP << 16), /*beh*/ bhvExclamationBox), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ -6580, 1680, -5780, /*angle*/ 0, 0, 0, /*behParam*/ ((COIN_FORMATION_FLAG_NONE) << 16), /*beh*/ bhvCoinFormation), + OBJECT(/*model*/ MODEL_BREAKABLE_BOX, /*pos*/ 1022, 1848, 5120, /*angle*/ 0, 0, 0, /*behParam*/ (BREAKABLE_BOX_BP_NO_COINS << 16), /*beh*/ bhvBreakableBox), + OBJECT(/*model*/ MODEL_BREAKABLE_BOX, /*pos*/ 3500, 2150, 3000, /*angle*/ 0, 0, 0, /*behParam*/ (BREAKABLE_BOX_BP_NO_COINS << 16), /*beh*/ bhvBreakableBox), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ 3240, -4720, 2360, /*angle*/ 0, 270, 0, /*behParam*/ 0x00000000, /*beh*/ bhvScuttlebugSpawn), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ -3600, -4240, 3600, /*angle*/ 0, 0, 0, /*behParam*/ ((COIN_FORMATION_FLAG_RING) << 16), /*beh*/ bhvCoinFormation), + OBJECT(/*model*/ MODEL_EXCLAMATION_BOX, /*pos*/ -3000, -2250, -6400, /*angle*/ 0, 0, 0, /*behParam*/ (EXCLAMATION_BOX_BP_METAL_CAP << 16), /*beh*/ bhvExclamationBox), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ -3420, 1800, 5960, /*angle*/ 0, 270, 0, /*behParam*/ 0x00000000, /*beh*/ bhvScuttlebugSpawn), + OBJECT(/*model*/ MODEL_SWOOP, /*pos*/ 6080, 3060, 4660, /*angle*/ 0, 0, 0, /*behParam*/ (SWOOP_BP_0 << 16), /*beh*/ bhvSwoop), + OBJECT(/*model*/ MODEL_SWOOP, /*pos*/ 5480, 3000, 7120, /*angle*/ 0, 0, 0, /*behParam*/ (SWOOP_BP_0 << 16), /*beh*/ bhvSwoop), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ -2700, 2060, -6400, /*angle*/ 0, 0, 0, /*behParam*/ ((COIN_FORMATION_FLAG_RING) << 16), /*beh*/ bhvCoinFormation), + OBJECT(/*model*/ MODEL_SWOOP, /*pos*/ -5440, 1720, -320, /*angle*/ 0, 0, 0, /*behParam*/ (SWOOP_BP_1 << 16), /*beh*/ bhvSwoop), + OBJECT(/*model*/ MODEL_YELLOW_COIN, /*pos*/ -2220, 2048, 4440, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvOneCoin), + OBJECT(/*model*/ MODEL_HEART, /*pos*/ -7511, 1420, -666, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvRecoveryHeart), + OBJECT(/*model*/ MODEL_WOODEN_SIGNPOST, /*pos*/ -3359, 1536, 298, /*angle*/ 0, 270, 0, /*behParam*/ (DIALOG_122 << 16), /*beh*/ bhvMessagePanel), + OBJECT(/*model*/ MODEL_WOODEN_SIGNPOST, /*pos*/ -3092, 2033, -7685, /*angle*/ 0, 0, 0, /*behParam*/ (DIALOG_138 << 16), /*beh*/ bhvMessagePanel), + OBJECT(/*model*/ MODEL_WOODEN_SIGNPOST, /*pos*/ 5439, 0, 2785, /*angle*/ 0, 0, 0, /*behParam*/ (DIALOG_125 << 16), /*beh*/ bhvMessagePanel), + OBJECT(/*model*/ MODEL_WOODEN_SIGNPOST, /*pos*/ -3184, 0, 699, /*angle*/ 0, 0, 0, /*behParam*/ (DIALOG_126 << 16), /*beh*/ bhvMessagePanel), + OBJECT(/*model*/ MODEL_WOODEN_SIGNPOST, /*pos*/ 500, -4300, 3644, /*angle*/ 0, 270, 0, /*behParam*/ (DIALOG_127 << 16), /*beh*/ bhvMessagePanel), + OBJECT(/*model*/ MODEL_EXCLAMATION_BOX, /*pos*/ -4960, 2700, 80, /*angle*/ 0, 0, 0, /*behParam*/ (EXCLAMATION_BOX_BP_1UP_WALKING << 16), /*beh*/ bhvExclamationBox), + OBJECT(/*model*/ MODEL_WOODEN_SIGNPOST, /*pos*/ 2006, 0, 6713, /*angle*/ 0, 180, 0, /*behParam*/ (DIALOG_124 << 16), /*beh*/ bhvMessagePanel), + OBJECT(/*model*/ MODEL_WOODEN_SIGNPOST, /*pos*/ 2510, 0, 2800, /*angle*/ 0, 0, 0, /*behParam*/ (DIALOG_140 << 16), /*beh*/ bhvMessagePanel), + OBJECT(/*model*/ MODEL_WOODEN_SIGNPOST, /*pos*/ 510, 0, 5380, /*angle*/ 0, 90, 0, /*behParam*/ (DIALOG_139 << 16), /*beh*/ bhvMessagePanel), + OBJECT(/*model*/ MODEL_YELLOW_COIN, /*pos*/ -2340, 2040, 4560, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvOneCoin), + OBJECT(/*model*/ MODEL_YELLOW_COIN, /*pos*/ -2460, 2040, 4660, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvOneCoin), + OBJECT(/*model*/ MODEL_YELLOW_COIN, /*pos*/ -2060, 2040, 4380, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvOneCoin), + OBJECT(/*model*/ MODEL_YELLOW_COIN, /*pos*/ -1920, 2040, 4320, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvOneCoin), + OBJECT(/*model*/ MODEL_BLUE_COIN_SWITCH, /*pos*/ 5145, -767, -2954, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvBlueCoinSwitch), + OBJECT(/*model*/ MODEL_BLUE_COIN, /*pos*/ 3945, -1023, -2918, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvHiddenBlueCoin), + OBJECT(/*model*/ MODEL_BLUE_COIN, /*pos*/ 3800, -1023, -4009, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvHiddenBlueCoin), + OBJECT(/*model*/ MODEL_BLUE_COIN, /*pos*/ 3036, -858, -4118, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvHiddenBlueCoin), + OBJECT(/*model*/ MODEL_BLUE_COIN, /*pos*/ 2018, -921, -4154, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvHiddenBlueCoin), + OBJECT(/*model*/ MODEL_BLUE_COIN, /*pos*/ 1836, -921, -4700, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvHiddenBlueCoin), + OBJECT(/*model*/ MODEL_BLUE_COIN, /*pos*/ 1836, -721, -4700, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvHiddenBlueCoin), + OBJECT(/*model*/ MODEL_BLUE_COIN, /*pos*/ 1836, -521, -4700, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvHiddenBlueCoin), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ 2800, 205, 463, /*angle*/ 0, 90, 0, /*behParam*/ ((COIN_FORMATION_FLAG_NONE ) << 16), /*beh*/ bhvCoinFormation), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ 1800, -409, -7390, /*angle*/ 0, 90, 0, /*behParam*/ ((COIN_FORMATION_FLAG_NONE ) << 16), /*beh*/ bhvCoinFormation), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ -5342, 2809, -1790, /*angle*/ 0, 144, 0, /*behParam*/ ((COIN_FORMATION_FLAG_FLYING) << 16), /*beh*/ bhvCoinFormation), + OBJECT(/*model*/ MODEL_SWOOP, /*pos*/ 5632, -563, -4454, /*angle*/ 0, 0, 0, /*behParam*/ (SWOOP_BP_1 << 16), /*beh*/ bhvSwoop), + OBJECT(/*model*/ MODEL_SWOOP, /*pos*/ 4915, -665, -5274, /*angle*/ 0, 0, 0, /*behParam*/ (SWOOP_BP_1 << 16), /*beh*/ bhvSwoop), + OBJECT(/*model*/ MODEL_SWOOP, /*pos*/ 5120, -665, -4660, /*angle*/ 0, 0, 0, /*behParam*/ (SWOOP_BP_0 << 16), /*beh*/ bhvSwoop), + OBJECT(/*model*/ MODEL_SWOOP, /*pos*/ 5427, -665, -5070, /*angle*/ 0, 0, 0, /*behParam*/ (SWOOP_BP_0 << 16), /*beh*/ bhvSwoop), + OBJECT(/*model*/ MODEL_SNUFIT, /*pos*/ 2439, -722, -5499, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvSnufit), + OBJECT(/*model*/ MODEL_DL_MONTY_MOLE_HOLE, /*pos*/ 2714, -768, -4096, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvMontyMoleHole), + OBJECT(/*model*/ MODEL_DL_MONTY_MOLE_HOLE, /*pos*/ 3011, -768, -1272, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvMontyMoleHole), + OBJECT(/*model*/ MODEL_DL_MONTY_MOLE_HOLE, /*pos*/ 3324, -768, -1475, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvMontyMoleHole), + OBJECT(/*model*/ MODEL_MONTY_MOLE, /*pos*/ 3940, -768, -2880, /*angle*/ 0, 0, 0, /*behParam*/ (MONTY_MOLE_BP_ROCK << 16), /*beh*/ bhvMontyMole), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ 4740, 1060, 4680, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvMrI), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ 6700, 1020, 6820, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvMrI), + OBJECT(/*model*/ MODEL_BREAKABLE_BOX, /*pos*/ 2960, 1024, 5140, /*angle*/ 0, 0, 0, /*behParam*/ (BREAKABLE_BOX_BP_NO_COINS << 16), /*beh*/ bhvBreakableBox), + OBJECT(/*model*/ MODEL_BREAKABLE_BOX, /*pos*/ 4080, 1024, 5760, /*angle*/ 0, 0, 0, /*behParam*/ (BREAKABLE_BOX_BP_NO_COINS << 16), /*beh*/ bhvBreakableBox), + OBJECT(/*model*/ MODEL_BREAKABLE_BOX, /*pos*/ 6260, 1024, 4960, /*angle*/ 0, 0, 0, /*behParam*/ (BREAKABLE_BOX_BP_NO_COINS << 16), /*beh*/ bhvBreakableBox), + OBJECT(/*model*/ MODEL_WOODEN_SIGNPOST, /*pos*/ -4370, 2860, -2243, /*angle*/ 0, 135, 0, /*behParam*/ (DIALOG_043 << 16), /*beh*/ bhvMessagePanel), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ -2900, 1620, 4640, /*angle*/ 0, 0, 0, /*behParam*/ (FLAMETHROWER_BP_UPWARDS << 16), /*beh*/ bhvFlamethrower), + OBJECT(/*model*/ MODEL_BOWLING_BALL, /*pos*/ 1420, -380, -7040, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvFireSpitter), + OBJECT(/*model*/ MODEL_BOWLING_BALL, /*pos*/ 2500, -380, -7740, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvFireSpitter), + OBJECT(/*model*/ MODEL_EXCLAMATION_BOX, /*pos*/ -2700, 2100, -6400, /*angle*/ 0, 0, 0, /*behParam*/ (EXCLAMATION_BOX_BP_1UP_RUNNING_AWAY << 16), /*beh*/ bhvExclamationBox), + // Special objects + OBJECT(/*model*/ MODEL_CASTLE_WOODEN_DOOR_UNUSED, /*pos*/ 922, -4689, 2330, /*angle*/ 0, 270, 0, /*behParam*/ (0 << 24), /*beh*/ bhvDoor), + OBJECT(/*model*/ MODEL_CASTLE_WOODEN_DOOR_UNUSED, /*pos*/ -3586, 1536, 647, /*angle*/ 0, 26, 0, /*behParam*/ (0 << 24), /*beh*/ bhvDoor), + OBJECT(/*model*/ MODEL_CASTLE_WOODEN_DOOR_UNUSED, /*pos*/ 5911, -204, 870, /*angle*/ 0, 0, 0, /*behParam*/ (0 << 24), /*beh*/ bhvDoor), + OBJECT(/*model*/ MODEL_CASTLE_WOODEN_DOOR_UNUSED, /*pos*/ 3817, 205, 870, /*angle*/ 0, 0, 0, /*behParam*/ (0 << 24), /*beh*/ bhvDoor), + OBJECT(/*model*/ MODEL_HMC_METAL_DOOR, /*pos*/ 1127, -409, -4709, /*angle*/ 0, 90, 0, /*behParam*/ (0 << 24), /*beh*/ bhvDoor), + OBJECT(/*model*/ MODEL_HMC_METAL_DOOR, /*pos*/ -468, -4279, 6711, /*angle*/ 0, 45, 0, /*behParam*/ (0 << 24), /*beh*/ bhvDoor), + OBJECT(/*model*/ MODEL_HMC_METAL_DOOR, /*pos*/ -359, -4279, 6602, /*angle*/ 0, 225, 0, /*behParam*/ (0 << 24), /*beh*/ bhvDoor), + OBJECT(/*model*/ MODEL_HMC_METAL_DOOR, /*pos*/ -3634, 2355, -2764, /*angle*/ 0, 90, 0, /*behParam*/ (0 << 24), /*beh*/ bhvDoor), + OBJECT(/*model*/ MODEL_HMC_METAL_DOOR, /*pos*/ -4863, 1843, -7551, /*angle*/ 0, 270, 0, /*behParam*/ (0 << 24), /*beh*/ bhvDoor), + OBJECT(/*model*/ MODEL_HMC_METAL_DOOR, /*pos*/ 3328, -409, -6911, /*angle*/ 0, 0, 0, /*behParam*/ (0 << 24), /*beh*/ bhvDoor), + OBJECT(/*model*/ MODEL_HMC_HAZY_MAZE_DOOR, /*pos*/ 358, 2048, 3661, /*angle*/ 0, 270, 0, /*behParam*/ (0 << 24), /*beh*/ bhvDoor), + OBJECT(/*model*/ MODEL_HMC_HAZY_MAZE_DOOR, /*pos*/ -6553, 1536, 1459, /*angle*/ 0, 0, 0, /*behParam*/ (0 << 24), /*beh*/ bhvDoor), + RETURN(), +}; + +static const LevelScript script_hmc_objects_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), @@ -38,7 +142,7 @@ static const LevelScript script_func_local_1[] = { RETURN(), }; -static const LevelScript script_func_local_2[] = { +static const LevelScript script_hmc_objects_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), @@ -50,7 +154,7 @@ static const LevelScript script_func_local_2[] = { RETURN(), }; -static const LevelScript script_func_local_3[] = { +static const LevelScript script_hmc_objects_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), @@ -58,7 +162,7 @@ static const LevelScript script_func_local_3[] = { RETURN(), }; -static const LevelScript script_func_local_4[] = { +static const LevelScript script_hmc_objects_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), @@ -101,12 +205,12 @@ const LevelScript level_hmc_entry[] = { 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), - JUMP_LINK(script_func_local_1), - JUMP_LINK(script_func_local_2), - JUMP_LINK(script_func_local_3), - JUMP_LINK(script_func_local_4), + JUMP_LINK(script_hmc_objects_1), + JUMP_LINK(script_hmc_objects_2), + JUMP_LINK(script_hmc_objects_3), + JUMP_LINK(script_hmc_objects_4), TERRAIN(/*terrainData*/ hmc_seg7_collision_level), - MACRO_OBJECTS(/*objList*/ hmc_seg7_macro_objs), + JUMP_LINK(script_hmc_macro_objects), ROOMS(/*surfaceRooms*/ hmc_seg7_rooms), SET_BACKGROUND_MUSIC(/*settingsPreset*/ 0x0004, /*seq*/ SEQ_LEVEL_UNDERGROUND), TERRAIN_TYPE(/*terrainType*/ TERRAIN_STONE), diff --git a/levels/jrb/areas/1/collision.inc.c b/levels/jrb/areas/1/collision.inc.c index cb0eba6de..dc9adcbfd 100644 --- a/levels/jrb/areas/1/collision.inc.c +++ b/levels/jrb/areas/1/collision.inc.c @@ -871,8 +871,6 @@ const Collision jrb_seg7_area_1_collision[] = { COL_TRI(7, 6, 5), COL_TRI(7, 5, 0), COL_TRI_STOP(), - COL_SPECIAL_INIT(1), - SPECIAL_OBJECT_WITH_YAW(/*preset*/ special_null_start, /*pos*/ -6750, 1126, 1482, /*yaw*/ 64), // unused, probably an early way to set initial position COL_WATER_BOX_INIT(3), COL_WATER_BOX(0, -6304, -669, 7992, 7814, 1024), COL_WATER_BOX(1, 4433, -4253, 5969, -669, -3016), diff --git a/levels/jrb/areas/1/macro.inc.c b/levels/jrb/areas/1/macro.inc.c deleted file mode 100644 index f183a655f..000000000 --- a/levels/jrb/areas/1/macro.inc.c +++ /dev/null @@ -1,66 +0,0 @@ -// 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_END(), -}; diff --git a/levels/jrb/areas/2/collision.inc.c b/levels/jrb/areas/2/collision.inc.c index f91b3e0c8..f7093c85d 100644 --- a/levels/jrb/areas/2/collision.inc.c +++ b/levels/jrb/areas/2/collision.inc.c @@ -583,8 +583,6 @@ const Collision jrb_seg7_area_2_collision[] = { COL_TRI(28, 77, 76), COL_TRI(29, 79, 80), COL_TRI_STOP(), - COL_SPECIAL_INIT(1), - SPECIAL_OBJECT_WITH_YAW(/*preset*/ special_null_start, /*pos*/ 866, 798, -1248, /*yaw*/ 128), // unused, probably an early way to set initial position COL_WATER_BOX_INIT(1), COL_WATER_BOX(0, -4095, -4095, 4096, 4096, 2765), COL_END(), diff --git a/levels/jrb/areas/2/macro.inc.c b/levels/jrb/areas/2/macro.inc.c deleted file mode 100644 index 54c9469ed..000000000 --- a/levels/jrb/areas/2/macro.inc.c +++ /dev/null @@ -1,5 +0,0 @@ -// 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_END(), -}; diff --git a/levels/jrb/header.h b/levels/jrb/header.h index f142c5c05..410245413 100644 --- a/levels/jrb/header.h +++ b/levels/jrb/header.h @@ -39,7 +39,6 @@ extern const Gfx jrb_seg7_dl_0700AC68[]; extern const Gfx jrb_seg7_dl_0700AE48[]; extern const Gfx jrb_seg7_dl_0700AFB0[]; extern const Collision jrb_seg7_area_1_collision[]; -extern const MacroObject jrb_seg7_area_1_macro_objs[]; extern const Collision jrb_seg7_collision_rock_solid[]; extern const Collision jrb_seg7_collision_floating_platform[]; extern const Collision jrb_seg7_collision_floating_box[]; @@ -57,7 +56,6 @@ extern const Gfx jrb_seg7_dl_0700EF00[]; extern const Gfx jrb_seg7_dl_0700FE48[]; extern const Gfx jrb_seg7_dl_07010548[]; extern const Collision jrb_seg7_area_2_collision[]; -extern const MacroObject jrb_seg7_area_2_macro_objs[]; extern const struct MovtexQuadCollection jrb_movtex_sunken_ship_water[]; // script diff --git a/levels/jrb/leveldata.c b/levels/jrb/leveldata.c index 12cc6b729..c0e435d34 100644 --- a/levels/jrb/leveldata.c +++ b/levels/jrb/leveldata.c @@ -2,11 +2,7 @@ #include "sm64.h" #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 "textures.h" -#include "dialog_ids.h" #include "make_const_nonconst.h" #include "levels/jrb/texture.inc.c" @@ -24,7 +20,6 @@ #include "levels/jrb/falling_pillar/model.inc.c" #include "levels/jrb/falling_pillar_base/model.inc.c" #include "levels/jrb/areas/1/collision.inc.c" -#include "levels/jrb/areas/1/macro.inc.c" #include "levels/jrb/rock/collision.inc.c" #include "levels/jrb/floating_platform/collision.inc.c" #include "levels/jrb/sliding_box/collision.inc.c" @@ -37,5 +32,4 @@ #include "levels/jrb/areas/2/2/model.inc.c" #include "levels/jrb/areas/2/3/model.inc.c" #include "levels/jrb/areas/2/collision.inc.c" -#include "levels/jrb/areas/2/macro.inc.c" #include "levels/jrb/areas/2/movtext.inc.c" diff --git a/levels/jrb/script.c b/levels/jrb/script.c index 76be65b4f..787ae2e61 100644 --- a/levels/jrb/script.c +++ b/levels/jrb/script.c @@ -3,6 +3,7 @@ #include "behavior_data.h" #include "model_ids.h" #include "seq_ids.h" +#include "dialog_ids.h" #include "segment_symbols.h" #include "level_commands.h" @@ -15,7 +16,81 @@ #include "make_const_nonconst.h" #include "levels/jrb/header.h" -static const LevelScript script_func_local_1[] = { + +static const LevelScript script_jrb_area_1_macro_objects[] = { + // Macro objects + OBJECT(/*model*/ MODEL_WOODEN_SIGNPOST, /*pos*/ -6325, 1126, 1730, /*angle*/ 0, 250, 0, /*behParam*/ (DIALOG_060 << 16), /*beh*/ bhvMessagePanel), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ 5060, -4420, 720, /*angle*/ 0, 0, 0, /*behParam*/ ((COIN_FORMATION_FLAG_FLYING | COIN_FORMATION_FLAG_RING | COIN_FORMATION_FLAG_VERTICAL) << 16), /*beh*/ bhvCoinFormation), + OBJECT(/*model*/ MODEL_EXCLAMATION_BOX, /*pos*/ 2077, 1832, 7465, /*angle*/ 0, 0, 0, /*behParam*/ (EXCLAMATION_BOX_BP_METAL_CAP << 16), /*beh*/ bhvExclamationBox), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ -1780, -650, 4200, /*angle*/ 0, 0, 0, /*behParam*/ ((COIN_FORMATION_FLAG_FLYING | COIN_FORMATION_FLAG_RING) << 16), /*beh*/ bhvCoinFormation), + OBJECT(/*model*/ MODEL_PURPLE_SWITCH, /*pos*/ 2260, 1536, 6854, /*angle*/ 0, 45, 0, /*behParam*/ 0x00000000, /*beh*/ bhvFloorSwitchHiddenObjects), + OBJECT(/*model*/ MODEL_BREAKABLE_BOX, /*pos*/ 4269, 1336, 4866, /*angle*/ 0, 45, 0, /*behParam*/ (BREAKABLE_BOX_BP_NO_COINS << 16), /*beh*/ bhvHiddenObject), + OBJECT(/*model*/ MODEL_BREAKABLE_BOX, /*pos*/ 4128, 1336, 5007, /*angle*/ 0, 45, 0, /*behParam*/ (BREAKABLE_BOX_BP_NO_COINS << 16), /*beh*/ bhvHiddenObject), + OBJECT(/*model*/ MODEL_BREAKABLE_BOX, /*pos*/ 3400, 1336, 5155, /*angle*/ 0, 45, 0, /*behParam*/ (BREAKABLE_BOX_BP_NO_COINS << 16), /*beh*/ bhvHiddenObject), + OBJECT(/*model*/ MODEL_BREAKABLE_BOX, /*pos*/ 3261, 1336, 5294, /*angle*/ 0, 45, 0, /*behParam*/ (BREAKABLE_BOX_BP_NO_COINS << 16), /*beh*/ bhvHiddenObject), + OBJECT(/*model*/ MODEL_BREAKABLE_BOX, /*pos*/ 3120, 1336, 5435, /*angle*/ 0, 45, 0, /*behParam*/ (BREAKABLE_BOX_BP_NO_COINS << 16), /*beh*/ bhvHiddenObject), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ 3551, -5120, 2744, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvSeaweedBundle), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ 4201, -5120, 3863, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvSeaweedBundle), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ -2440, -2980, -4120, /*angle*/ 0, 0, 0, /*behParam*/ ((COIN_FORMATION_FLAG_RING) << 16), /*beh*/ bhvCoinFormation), + OBJECT(/*model*/ MODEL_EXCLAMATION_BOX, /*pos*/ 279, -2600, -7340, /*angle*/ 0, 0, 0, /*behParam*/ (EXCLAMATION_BOX_BP_METAL_CAP << 16), /*beh*/ bhvExclamationBox), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ 4846, -5119, 1213, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvSeaweedBundle), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ -800, -1023, 4040, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvSeaweedBundle), + OBJECT(/*model*/ MODEL_BREAKABLE_BOX, /*pos*/ 3621, 1336, 6529, /*angle*/ 0, 45, 0, /*behParam*/ (BREAKABLE_BOX_BP_NO_COINS << 16), /*beh*/ bhvHiddenObject), + OBJECT(/*model*/ MODEL_BREAKABLE_BOX, /*pos*/ 3485, 1336, 6665, /*angle*/ 0, 45, 0, /*behParam*/ (BREAKABLE_BOX_BP_NO_COINS << 16), /*beh*/ bhvHiddenObject), + OBJECT(/*model*/ MODEL_BREAKABLE_BOX, /*pos*/ 2671, 1336, 6459, /*angle*/ 0, 45, 0, /*behParam*/ (BREAKABLE_BOX_BP_NO_COINS << 16), /*beh*/ bhvHiddenObject), + OBJECT(/*model*/ MODEL_RED_COIN, /*pos*/ 4900, 1800, 4700, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvRedCoin), + OBJECT(/*model*/ MODEL_RED_COIN, /*pos*/ -2535, 2110, 6113, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvRedCoin), + OBJECT(/*model*/ MODEL_RED_COIN, /*pos*/ -1845, -1003, 3518, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvRedCoin), + OBJECT(/*model*/ MODEL_RED_COIN, /*pos*/ -546, 530, 5930, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvRedCoin), + OBJECT(/*model*/ MODEL_RED_COIN, /*pos*/ 648, -490, 4256, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvRedCoin), + OBJECT(/*model*/ MODEL_RED_COIN, /*pos*/ 3642, -5103, 3175, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvRedCoin), + OBJECT(/*model*/ MODEL_RED_COIN, /*pos*/ 4400, 2200, 1300, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvRedCoin), + OBJECT(/*model*/ MODEL_RED_COIN, /*pos*/ 5400, 2200, 1300, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvRedCoin), + OBJECT(/*model*/ MODEL_WOODEN_SIGNPOST, /*pos*/ -900, -2966, -2200, /*angle*/ 0, 180, 0, /*behParam*/ (DIALOG_073 << 16), /*beh*/ bhvMessagePanel), + OBJECT(/*model*/ MODEL_WOODEN_SIGNPOST, /*pos*/ -2552, 1331, 6573, /*angle*/ 0, 80, 0, /*behParam*/ (DIALOG_051 << 16), /*beh*/ bhvMessagePanel), + OBJECT(/*model*/ MODEL_CLAM_SHELL, /*pos*/ -1800, -1023, 3500, /*angle*/ 0, 315, 0, /*behParam*/ 0x00000000, /*beh*/ bhvClamShell), + OBJECT(/*model*/ MODEL_CLAM_SHELL, /*pos*/ -480, 512, 5980, /*angle*/ 0, 225, 0, /*behParam*/ 0x00000000, /*beh*/ bhvClamShell), + OBJECT(/*model*/ MODEL_CLAM_SHELL, /*pos*/ 700, -511, 4250, /*angle*/ 0, 270, 0, /*behParam*/ 0x00000000, /*beh*/ bhvClamShell), + OBJECT(/*model*/ MODEL_CLAM_SHELL, /*pos*/ 3600, -5119, 3200, /*angle*/ 0, 90, 0, /*behParam*/ 0x00000000, /*beh*/ bhvClamShell), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ -2523, -246, 4676, /*angle*/ 0, 0, 0, /*behParam*/ (FISH_SPAWNER_BP_FEW_BLUE << 16), /*beh*/ bhvFishSpawner), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ 5876, -4738, 3476, /*angle*/ 0, 0, 0, /*behParam*/ (FISH_SPAWNER_BP_FEW_BLUE << 16), /*beh*/ bhvFishSpawner), + OBJECT(/*model*/ MODEL_BLUE_COIN_SWITCH, /*pos*/ 6011, -2966, -5511, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvBlueCoinSwitch), + OBJECT(/*model*/ MODEL_BLUE_COIN, /*pos*/ 5900, -2966, -7347, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvHiddenBlueCoin), + OBJECT(/*model*/ MODEL_BLUE_COIN, /*pos*/ 5300, -2966, -7347, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvHiddenBlueCoin), + OBJECT(/*model*/ MODEL_BLUE_COIN, /*pos*/ 4700, -2966, -7347, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvHiddenBlueCoin), + OBJECT(/*model*/ MODEL_BLUE_COIN, /*pos*/ 4100, -2966, -7347, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvHiddenBlueCoin), + OBJECT(/*model*/ MODEL_BLUE_COIN, /*pos*/ 3500, -2966, -7347, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvHiddenBlueCoin), + OBJECT(/*model*/ MODEL_BLUE_COIN, /*pos*/ 2900, -2966, -7347, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvHiddenBlueCoin), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ 3305, -2966, -6147, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvGoombaTripletSpawner), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ 255, 1160, 7633, /*angle*/ 0, 0, 0, /*behParam*/ ((COIN_FORMATION_FLAG_FLYING | COIN_FORMATION_FLAG_VERTICAL) << 16), /*beh*/ bhvCoinFormation), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ 51, 960, 2744, /*angle*/ 0, 0, 0, /*behParam*/ ((COIN_FORMATION_FLAG_FLYING | COIN_FORMATION_FLAG_RING ) << 16), /*beh*/ bhvCoinFormation), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ 5060, -4220, 720, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvHidden1upTrigger), + OBJECT(/*model*/ MODEL_1UP, /*pos*/ 5140, -4380, 0, /*angle*/ 0, 0, 0, /*behParam*/ (1 << 16), /*beh*/ bhvHidden1up), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ 4072, -4463, 2027, /*angle*/ 0, 0, 0, /*behParam*/ (FISH_SPAWNER_BP_FEW_CYAN << 16), /*beh*/ bhvFishSpawner), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ -290, 190, 4645, /*angle*/ 0, 0, 0, /*behParam*/ (FISH_SPAWNER_BP_FEW_CYAN << 16), /*beh*/ bhvFishSpawner), + OBJECT(/*model*/ MODEL_DL_CANNON_LID, /*pos*/ -4235, 1247, 2137, /*angle*/ 0, 0, 0, /*behParam*/ (0x00 << 16), /*beh*/ bhvCannonClosed), + OBJECT(/*model*/ MODEL_BREAKABLE_BOX, /*pos*/ 2536, 1336, 6594, /*angle*/ 0, 45, 0, /*behParam*/ (BREAKABLE_BOX_BP_NO_COINS << 16), /*beh*/ bhvHiddenObject), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ 4220, 1536, 5700, /*angle*/ 0, 45, 0, /*behParam*/ ((COIN_FORMATION_FLAG_NONE ) << 16), /*beh*/ bhvCoinFormation), + OBJECT(/*model*/ MODEL_BREAKABLE_BOX, /*pos*/ 3987, 1336, 5148, /*angle*/ 0, 45, 0, /*behParam*/ (BREAKABLE_BOX_BP_NO_COINS << 16), /*beh*/ bhvHiddenObject), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ 3280, 1536, 5940, /*angle*/ 0, 45, 0, /*behParam*/ ((COIN_FORMATION_FLAG_NONE ) << 16), /*beh*/ bhvCoinFormation), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ 3200, 1536, 6720, /*angle*/ 0, 45, 0, /*behParam*/ ((COIN_FORMATION_FLAG_NONE ) << 16), /*beh*/ bhvCoinFormation), + OBJECT(/*model*/ MODEL_EXCLAMATION_BOX, /*pos*/ -7160, 1340, 2580, /*angle*/ 0, 0, 0, /*behParam*/ (EXCLAMATION_BOX_BP_METAL_CAP << 16), /*beh*/ bhvExclamationBox), + OBJECT(/*model*/ MODEL_WOODEN_SIGNPOST, /*pos*/ -6910, 1120, 2380, /*angle*/ 0, 180, 0, /*behParam*/ (DIALOG_113 << 16), /*beh*/ bhvMessagePanel), + OBJECT(/*model*/ MODEL_EXCLAMATION_BOX, /*pos*/ -5800, 1340, -750, /*angle*/ 0, 0, 0, /*behParam*/ (EXCLAMATION_BOX_BP_COINS_3 << 16), /*beh*/ bhvExclamationBox), + OBJECT(/*model*/ MODEL_1UP, /*pos*/ 670, 3000, 3315, /*angle*/ 0, 0, 0, /*behParam*/ (MUSHROOM_BP_REQUIRES_NONE << 16), /*beh*/ bhv1Up), + OBJECT(/*model*/ MODEL_KOOPA_SHELL, /*pos*/ -1480, -1000, 4820, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvKoopaShellUnderwater), + OBJECT(/*model*/ MODEL_CLAM_SHELL, /*pos*/ -1480, -1040, 4820, /*angle*/ 0, 180, 0, /*behParam*/ 0x00000000, /*beh*/ bhvClamShell), + OBJECT(/*model*/ MODEL_WOODEN_SIGNPOST, /*pos*/ 5290, -2966, -4740, /*angle*/ 0, 0, 0, /*behParam*/ (DIALOG_169 << 16), /*beh*/ bhvMessagePanel), + RETURN(), +}; + +static const LevelScript script_jrb_area_2_macro_objects[] = { + // Macro objects + OBJECT(/*model*/ MODEL_EXCLAMATION_BOX, /*pos*/ 0, 1600, 3000, /*angle*/ 0, 0, 0, /*behParam*/ (EXCLAMATION_BOX_BP_STAR_1 << 16), /*beh*/ bhvExclamationBox), + RETURN(), +}; + +static const LevelScript script_jrb_area_1_objects_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), @@ -37,7 +112,7 @@ static const LevelScript script_func_local_1[] = { RETURN(), }; -static const LevelScript script_func_local_2[] = { +static const LevelScript script_jrb_area_1_objects_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), @@ -91,7 +166,7 @@ static const LevelScript script_func_local_2[] = { RETURN(), }; -static const LevelScript script_func_local_3[] = { +static const LevelScript script_jrb_area_1_objects_3[] = { OBJECT_WITH_ACTS(/*model*/ MODEL_NONE, /*pos*/ 4900, 2400, 800, /*angle*/ 0, 0, 0, /*behParam*/ 0x03000000, /*beh*/ 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), @@ -102,15 +177,11 @@ static const LevelScript script_func_local_3[] = { RETURN(), }; -static const LevelScript script_func_local_4[] = { +static const LevelScript script_jrb_area_2_objects_1[] = { OBJECT(/*model*/ MODEL_NONE, /*pos*/ 400, -350, -2700, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvTreasureChestsShip), RETURN(), }; -static const LevelScript script_func_local_5[] = { - RETURN(), -}; - const LevelScript level_jrb_entry[] = { INIT_LEVEL(), LOAD_YAY0( /*seg*/ 0x07, _jrb_segment_7SegmentRomStart, _jrb_segment_7SegmentRomEnd), @@ -147,11 +218,11 @@ const LevelScript level_jrb_entry[] = { 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), WHIRLPOOL(/*index*/ 0, /*acts*/ ACT_2 | ACT_3 | ACT_4 | ACT_5 | ACT_6, /*pos*/ 4979, -5222, 2482, /*strength*/ -30), - JUMP_LINK(script_func_local_1), - JUMP_LINK(script_func_local_2), - JUMP_LINK(script_func_local_3), + JUMP_LINK(script_jrb_area_1_objects_1), + JUMP_LINK(script_jrb_area_1_objects_2), + JUMP_LINK(script_jrb_area_1_objects_3), TERRAIN(/*terrainData*/ jrb_seg7_area_1_collision), - MACRO_OBJECTS(/*objList*/ jrb_seg7_area_1_macro_objs), + JUMP_LINK(script_jrb_area_1_macro_objects), SET_BACKGROUND_MUSIC(/*settingsPreset*/ 0x0003, /*seq*/ SEQ_LEVEL_WATER), TERRAIN_TYPE(/*terrainType*/ TERRAIN_WATER), END_AREA(), @@ -161,10 +232,9 @@ const LevelScript level_jrb_entry[] = { 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), - JUMP_LINK(script_func_local_4), - JUMP_LINK(script_func_local_5), + JUMP_LINK(script_jrb_area_2_objects_1), TERRAIN(/*terrainData*/ jrb_seg7_area_2_collision), - MACRO_OBJECTS(/*objList*/ jrb_seg7_area_2_macro_objs), + JUMP_LINK(script_jrb_area_2_macro_objects), SET_BACKGROUND_MUSIC(/*settingsPreset*/ 0x0003, /*seq*/ SEQ_LEVEL_WATER), TERRAIN_TYPE(/*terrainType*/ TERRAIN_WATER), END_AREA(), diff --git a/levels/lll/areas/1/collision.inc.c b/levels/lll/areas/1/collision.inc.c index a8d8f87df..d4d71579f 100644 --- a/levels/lll/areas/1/collision.inc.c +++ b/levels/lll/areas/1/collision.inc.c @@ -1356,7 +1356,5 @@ const Collision lll_seg7_area_1_collision[] = { COL_TRI(3, 0, 52), COL_TRI(3, 52, 71), COL_TRI_STOP(), - COL_SPECIAL_INIT(1), - SPECIAL_OBJECT_WITH_YAW(/*preset*/ special_null_start, /*pos*/ -3839, 154, 6272, /*yaw*/ 64), // unused, probably an early way to set initial position COL_END(), }; diff --git a/levels/lll/areas/1/macro.inc.c b/levels/lll/areas/1/macro.inc.c deleted file mode 100644 index f48130734..000000000 --- a/levels/lll/areas/1/macro.inc.c +++ /dev/null @@ -1,55 +0,0 @@ -// 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_END(), -}; diff --git a/levels/lll/areas/2/collision.inc.c b/levels/lll/areas/2/collision.inc.c index 2e747d31d..74a6f1904 100644 --- a/levels/lll/areas/2/collision.inc.c +++ b/levels/lll/areas/2/collision.inc.c @@ -1548,8 +1548,6 @@ const Collision lll_seg7_area_2_collision[] = { COL_TRI(323, 324, 450), COL_TRI(324, 451, 450), COL_TRI_STOP(), - COL_SPECIAL_INIT(1), - SPECIAL_OBJECT_WITH_YAW(/*preset*/ special_null_start, /*pos*/ -955, 103, -1029, /*yaw*/ 84), // unused, probably an early way to set initial position COL_WATER_BOX_INIT(1), COL_WATER_BOX(10, -3071, -3071, 3072, 3072, 20), COL_END(), diff --git a/levels/lll/areas/2/macro.inc.c b/levels/lll/areas/2/macro.inc.c deleted file mode 100644 index 92590b4d9..000000000 --- a/levels/lll/areas/2/macro.inc.c +++ /dev/null @@ -1,30 +0,0 @@ -// 0x070283D4 - 0x070284DA -const MacroObject lll_seg7_area_2_macro_objs[] = { - MACRO_OBJECT(/*preset*/ macro_yellow_coin_2, /*yaw*/ 0, /*pos*/ -20, 82, -1400), - MACRO_OBJECT(/*preset*/ macro_yellow_coin_2, /*yaw*/ 0, /*pos*/ 600, 82, -1480), - MACRO_OBJECT(/*preset*/ macro_yellow_coin_2, /*yaw*/ 0, /*pos*/ 1080, 82, -1680), - MACRO_OBJECT(/*preset*/ macro_yellow_coin_2, /*yaw*/ 0, /*pos*/ 2180, 173, -1860), - 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_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), - MACRO_OBJECT(/*preset*/ macro_yellow_coin_2, /*yaw*/ 0, /*pos*/ -1380, 102, 1640), - MACRO_OBJECT(/*preset*/ macro_yellow_coin_2, /*yaw*/ 0, /*pos*/ -2043, 1678, 1500), - MACRO_OBJECT(/*preset*/ macro_yellow_coin_2, /*yaw*/ 0, /*pos*/ -2283, 1863, 800), - MACRO_OBJECT(/*preset*/ macro_yellow_coin_2, /*yaw*/ 0, /*pos*/ -2420, 1981, 280), - MACRO_OBJECT(/*preset*/ macro_yellow_coin_2, /*yaw*/ 0, /*pos*/ -2620, 2089, -280), - MACRO_OBJECT(/*preset*/ macro_yellow_coin_2, /*yaw*/ 0, /*pos*/ -2540, 2268, -940), - MACRO_OBJECT(/*preset*/ macro_yellow_coin_2, /*yaw*/ 0, /*pos*/ 1330, 3201, 1313), - MACRO_OBJECT(/*preset*/ macro_yellow_coin_2, /*yaw*/ 0, /*pos*/ 1069, 3130, 1243), - MACRO_OBJECT(/*preset*/ macro_yellow_coin_2, /*yaw*/ 0, /*pos*/ 704, 3028, 1156), - 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_END(), -}; diff --git a/levels/lll/header.h b/levels/lll/header.h index 600945e1f..94810884f 100644 --- a/levels/lll/header.h +++ b/levels/lll/header.h @@ -94,7 +94,6 @@ extern const Gfx lll_seg7_dl_bowser_puzzle_piece_shadow[]; extern const Gfx lll_seg7_dl_0701A878[]; extern const Gfx lll_seg7_dl_0701AD70[]; extern const Collision lll_seg7_area_1_collision[]; -extern const MacroObject lll_seg7_area_1_macro_objs[]; extern const Collision lll_seg7_collision_octagonal_moving_platform[]; extern const Collision lll_seg7_collision_drawbridge[]; extern const Collision lll_seg7_collision_rotating_fire_bars[]; @@ -115,7 +114,6 @@ extern const Gfx lll_seg7_dl_07025A48[]; extern const Gfx lll_seg7_dl_07025BD8[]; extern const Gfx lll_seg7_dl_07025EC0[]; extern const Collision lll_seg7_area_2_collision[]; -extern const MacroObject lll_seg7_area_2_macro_objs[]; extern const Collision lll_seg7_collision_falling_wall[]; extern const Trajectory lll_seg7_trajectory_0702856C[]; extern const Trajectory lll_seg7_trajectory_07028660[]; diff --git a/levels/lll/leveldata.c b/levels/lll/leveldata.c index 17596093d..7e549a166 100644 --- a/levels/lll/leveldata.c +++ b/levels/lll/leveldata.c @@ -2,11 +2,7 @@ #include "sm64.h" #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 "textures.h" -#include "dialog_ids.h" #include "make_const_nonconst.h" #include "levels/lll/texture.inc.c" @@ -41,7 +37,6 @@ #include "levels/lll/sinking_rock_block/model.inc.c" #include "levels/lll/rolling_log/model.inc.c" #include "levels/lll/areas/1/collision.inc.c" -#include "levels/lll/areas/1/macro.inc.c" #include "levels/lll/moving_octagonal_mesh_platform/collision.inc.c" #include "levels/lll/drawbridge_part/collision.inc.c" #include "levels/lll/rotating_block_fire_bars/collision.inc.c" @@ -62,7 +57,6 @@ #include "levels/lll/areas/2/5/model.inc.c" #include "levels/lll/volcano_falling_trap/model.inc.c" #include "levels/lll/areas/2/collision.inc.c" -#include "levels/lll/areas/2/macro.inc.c" #include "levels/lll/volcano_falling_trap/collision.inc.c" #include "levels/lll/areas/2/trajectory.inc.c" #include "levels/lll/areas/2/movtext.inc.c" diff --git a/levels/lll/script.c b/levels/lll/script.c index 398620704..e8568c808 100644 --- a/levels/lll/script.c +++ b/levels/lll/script.c @@ -16,8 +16,95 @@ #include "make_const_nonconst.h" #include "levels/lll/header.h" -// Unlike most levels, level geometry objects in LLL are defined as regular objects instead of terrain objects. -static const LevelScript script_func_local_1[] = { + +static const LevelScript script_lll_area_1_macro_objects[] = { + // Macro objects + OBJECT(/*model*/ MODEL_RED_COIN, /*pos*/ -5800, 220, 250, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvRedCoin), + OBJECT(/*model*/ MODEL_RED_COIN, /*pos*/ -5100, 220, 250, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvRedCoin), + OBJECT(/*model*/ MODEL_RED_COIN, /*pos*/ -5100, 220, 1000, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvRedCoin), + OBJECT(/*model*/ MODEL_RED_COIN, /*pos*/ -4400, 220, 1000, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvRedCoin), + OBJECT(/*model*/ MODEL_RED_COIN, /*pos*/ -4400, 220, 1750, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvRedCoin), + OBJECT(/*model*/ MODEL_RED_COIN, /*pos*/ -5100, 220, 1750, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvRedCoin), + OBJECT(/*model*/ MODEL_RED_COIN, /*pos*/ -5800, 220, 1750, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvRedCoin), + OBJECT(/*model*/ MODEL_RED_COIN, /*pos*/ -5800, 220, 1000, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvRedCoin), + OBJECT(/*model*/ MODEL_WOODEN_SIGNPOST, /*pos*/ -3728, 154, 6057, /*angle*/ 0, 0, 0, /*behParam*/ (DIALOG_068 << 16), /*beh*/ bhvMessagePanel), + OBJECT(/*model*/ MODEL_WOODEN_SIGNPOST, /*pos*/ 1350, 154, 5942, /*angle*/ 0, 315, 0, /*behParam*/ (DIALOG_016 << 16), /*beh*/ bhvMessagePanel), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ -5760, 100, 3040, /*angle*/ 0, 0, 0, /*behParam*/ ((COIN_FORMATION_FLAG_FLYING) << 16), /*beh*/ bhvCoinFormation), + OBJECT(/*model*/ MODEL_1UP, /*pos*/ -5100, 540, -4070, /*angle*/ 0, 0, 0, /*behParam*/ (4 << 16), /*beh*/ bhvHidden1up), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ -5400, 320, -4070, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvHidden1upTrigger), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ -4800, 320, -4070, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvHidden1upTrigger), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ -5100, 320, -3770, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvHidden1upTrigger), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ -5100, 320, -4370, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvHidden1upTrigger), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ -1920, 50, -4120, /*angle*/ 0, 90, 0, /*behParam*/ ((COIN_FORMATION_FLAG_FLYING) << 16), /*beh*/ bhvCoinFormation), + OBJECT(/*model*/ MODEL_YELLOW_COIN, /*pos*/ 3300, 50, -2692, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvYellowCoin), + OBJECT(/*model*/ MODEL_YELLOW_COIN, /*pos*/ 3330, 50, -3700, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvYellowCoin), + OBJECT(/*model*/ MODEL_YELLOW_COIN, /*pos*/ 4340, 50, -3700, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvYellowCoin), + OBJECT(/*model*/ MODEL_YELLOW_COIN, /*pos*/ 4340, 50, -2692, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvYellowCoin), + OBJECT(/*model*/ MODEL_YELLOW_COIN, /*pos*/ 0, 200, 1200, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvYellowCoin), + OBJECT(/*model*/ MODEL_YELLOW_COIN, /*pos*/ 1200, 200, 0, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvYellowCoin), + OBJECT(/*model*/ MODEL_YELLOW_COIN, /*pos*/ -1200, 200, 0, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvYellowCoin), + OBJECT(/*model*/ MODEL_1UP, /*pos*/ 0, 307, -2085, /*angle*/ 0, 0, 0, /*behParam*/ (MUSHROOM_BP_REQUIRES_NONE << 16), /*beh*/ bhv1Up), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ 3000, 50, 520, /*angle*/ 0, 90, 0, /*behParam*/ ((COIN_FORMATION_FLAG_FLYING) << 16), /*beh*/ bhvCoinFormation), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ 7160, 320, 1400, /*angle*/ 0, 0, 0, /*behParam*/ ((COIN_FORMATION_FLAG_RING ) << 16), /*beh*/ bhvCoinFormation), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ 3800, 320, -5600, /*angle*/ 0, 0, 0, /*behParam*/ ((COIN_FORMATION_FLAG_RING ) << 16), /*beh*/ bhvCoinFormation), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ 6673, 154, -3060, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvMrI), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ 6673, 154, -3060, /*angle*/ 0, 0, 0, /*behParam*/ ((COIN_FORMATION_FLAG_RING ) << 16), /*beh*/ bhvCoinFormation), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ 6300, 755, -6580, /*angle*/ 0, 45, 0, /*behParam*/ ((COIN_FORMATION_FLAG_NONE ) << 16), /*beh*/ bhvCoinFormation), + OBJECT(/*model*/ MODEL_1UP, /*pos*/ 6326, 686, -6580, /*angle*/ 0, 0, 0, /*behParam*/ (MUSHROOM_BP_REQUIRES_NONE << 16), /*beh*/ bhv1Up), + OBJECT(/*model*/ MODEL_1UP, /*pos*/ 0, 46, -7400, /*angle*/ 0, 0, 0, /*behParam*/ (MUSHROOM_BP_REQUIRES_NONE << 16), /*beh*/ bhv1Up), + OBJECT(/*model*/ MODEL_1UP, /*pos*/ -3133, 230, -2126, /*angle*/ 0, 0, 0, /*behParam*/ (MUSHROOM_BP_REQUIRES_NONE << 16), /*beh*/ bhv1Up), + OBJECT(/*model*/ MODEL_YELLOW_COIN, /*pos*/ -3320, 161, -1860, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvOneCoin), + OBJECT(/*model*/ MODEL_YELLOW_COIN, /*pos*/ -3346, 70, -1486, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvOneCoin), + OBJECT(/*model*/ MODEL_YELLOW_COIN, /*pos*/ -2760, 113, -2260, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvOneCoin), + OBJECT(/*model*/ MODEL_YELLOW_COIN, /*pos*/ -2440, 67, -2286, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvOneCoin), + OBJECT(/*model*/ MODEL_1UP, /*pos*/ -2333, 653, 886, /*angle*/ 0, 0, 0, /*behParam*/ (MUSHROOM_BP_REQUIRES_NONE << 16), /*beh*/ bhv1Up), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ -1960, 38, 3693, /*angle*/ 0, 0, 0, /*behParam*/ ((COIN_FORMATION_FLAG_FLYING) << 16), /*beh*/ bhvCoinFormation), + OBJECT(/*model*/ MODEL_YELLOW_COIN, /*pos*/ -6966, 41, 3906, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvOneCoin), + OBJECT(/*model*/ MODEL_YELLOW_COIN, /*pos*/ -6806, 188, 4653, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvOneCoin), + OBJECT(/*model*/ MODEL_YELLOW_COIN, /*pos*/ -6033, 70, 4973, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvOneCoin), + OBJECT(/*model*/ MODEL_1UP, /*pos*/ -6780, 275, -6766, /*angle*/ 0, 0, 0, /*behParam*/ (MUSHROOM_BP_REQUIRES_NONE << 16), /*beh*/ bhv1Up), + OBJECT(/*model*/ MODEL_WOODEN_SIGNPOST, /*pos*/ -3980, 154, 6057, /*angle*/ 0, 0, 0, /*behParam*/ (DIALOG_086 << 16), /*beh*/ bhvMessagePanel), + OBJECT(/*model*/ MODEL_BREAKABLE_BOX, /*pos*/ 4170, 154, -1940, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvJumpingBox), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ 1400, -20, 3720, /*angle*/ 0, 0, 0, /*behParam*/ (FLAMETHROWER_BP_UPWARDS << 16), /*beh*/ bhvFlamethrower), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ 7100, -20, 3420, /*angle*/ 0, 0, 0, /*behParam*/ (FLAMETHROWER_BP_UPWARDS << 16), /*beh*/ bhvFlamethrower), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ 7300, -20, 5160, /*angle*/ 0, 0, 0, /*behParam*/ (FLAMETHROWER_BP_UPWARDS << 16), /*beh*/ bhvFlamethrower), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ 7100, -20, 5700, /*angle*/ 0, 0, 0, /*behParam*/ (FLAMETHROWER_BP_UPWARDS << 16), /*beh*/ bhvFlamethrower), + OBJECT(/*model*/ MODEL_EXCLAMATION_BOX, /*pos*/ -5900, 460, 6400, /*angle*/ 0, 0, 0, /*behParam*/ (EXCLAMATION_BOX_BP_WING_CAP << 16), /*beh*/ bhvExclamationBox), + RETURN(), +}; + +static const LevelScript script_lll_area_2_macro_objects[] = { + // Macro objects + OBJECT(/*model*/ MODEL_YELLOW_COIN, /*pos*/ -20, 82, -1400, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvOneCoin), + OBJECT(/*model*/ MODEL_YELLOW_COIN, /*pos*/ 600, 82, -1480, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvOneCoin), + OBJECT(/*model*/ MODEL_YELLOW_COIN, /*pos*/ 1080, 82, -1680, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvOneCoin), + OBJECT(/*model*/ MODEL_YELLOW_COIN, /*pos*/ 2180, 173, -1860, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvOneCoin), + OBJECT(/*model*/ MODEL_YELLOW_COIN, /*pos*/ 2520, 174, -1220, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvOneCoin), + OBJECT(/*model*/ MODEL_YELLOW_COIN, /*pos*/ 2840, 249, -460, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvOneCoin), + OBJECT(/*model*/ MODEL_YELLOW_COIN, /*pos*/ 2800, 449, 460, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvOneCoin), + OBJECT(/*model*/ MODEL_BULLY, /*pos*/ 1300, 1029, 2300, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvSmallBully), + OBJECT(/*model*/ MODEL_BULLY, /*pos*/ -960, 2442, -2610, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvSmallBully), + OBJECT(/*model*/ MODEL_YELLOW_COIN, /*pos*/ 2180, 775, 1720, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvOneCoin), + OBJECT(/*model*/ MODEL_YELLOW_COIN, /*pos*/ 1700, 1029, 2100, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvOneCoin), + OBJECT(/*model*/ MODEL_YELLOW_COIN, /*pos*/ 940, 1029, 2540, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvOneCoin), + OBJECT(/*model*/ MODEL_YELLOW_COIN, /*pos*/ -1380, 102, 1640, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvOneCoin), + OBJECT(/*model*/ MODEL_YELLOW_COIN, /*pos*/ -2043, 1678, 1500, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvOneCoin), + OBJECT(/*model*/ MODEL_YELLOW_COIN, /*pos*/ -2283, 1863, 800, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvOneCoin), + OBJECT(/*model*/ MODEL_YELLOW_COIN, /*pos*/ -2420, 1981, 280, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvOneCoin), + OBJECT(/*model*/ MODEL_YELLOW_COIN, /*pos*/ -2620, 2089, -280, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvOneCoin), + OBJECT(/*model*/ MODEL_YELLOW_COIN, /*pos*/ -2540, 2268, -940, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvOneCoin), + OBJECT(/*model*/ MODEL_YELLOW_COIN, /*pos*/ 1330, 3201, 1313, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvOneCoin), + OBJECT(/*model*/ MODEL_YELLOW_COIN, /*pos*/ 1069, 3130, 1243, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvOneCoin), + OBJECT(/*model*/ MODEL_YELLOW_COIN, /*pos*/ 704, 3028, 1156, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvOneCoin), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ 1078, 4170, -2270, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvHidden1upInPoleSpawner), + OBJECT(/*model*/ MODEL_HEART, /*pos*/ -1627, 1750, 750, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvRecoveryHeart), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ 182, 2623, -2529, /*angle*/ 0, 90, 0, /*behParam*/ ((COIN_FORMATION_FLAG_NONE) << 16), /*beh*/ bhvCoinFormation), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ 740, 0, -1840, /*angle*/ 0, 25, 0, /*behParam*/ 0x00000000, /*beh*/ bhvBouncingFireball), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ 1420, 0, -1720, /*angle*/ 0, 225, 0, /*behParam*/ 0x00000000, /*beh*/ bhvBouncingFireball), + RETURN(), +}; + +static const LevelScript script_lll_area_1_objects_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), @@ -35,7 +122,7 @@ static const LevelScript script_func_local_1[] = { RETURN(), }; -static const LevelScript script_func_local_2[] = { +static const LevelScript script_lll_area_1_objects_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), @@ -52,7 +139,7 @@ static const LevelScript script_func_local_2[] = { RETURN(), }; -static const LevelScript script_func_local_3[] = { +static const LevelScript script_lll_area_1_objects_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), @@ -62,7 +149,7 @@ static const LevelScript script_func_local_3[] = { RETURN(), }; -static const LevelScript script_func_local_4[] = { +static const LevelScript script_lll_area_1_objects_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), @@ -83,13 +170,13 @@ static const LevelScript script_func_local_4[] = { RETURN(), }; -static const LevelScript script_func_local_5[] = { +static const LevelScript script_lll_area_1_objects_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), RETURN(), }; -static const LevelScript script_func_local_6[] = { +static const LevelScript script_lll_area_2_objects_1[] = { 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), @@ -107,7 +194,7 @@ static const LevelScript script_func_local_6[] = { RETURN(), }; -static const LevelScript script_func_local_7[] = { +static const LevelScript script_lll_area_2_objects_2[] = { 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), RETURN(), @@ -182,13 +269,13 @@ const LevelScript level_lll_entry[] = { 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), - JUMP_LINK(script_func_local_1), - JUMP_LINK(script_func_local_2), - JUMP_LINK(script_func_local_3), - JUMP_LINK(script_func_local_4), - JUMP_LINK(script_func_local_5), + JUMP_LINK(script_lll_area_1_objects_1), + JUMP_LINK(script_lll_area_1_objects_2), + JUMP_LINK(script_lll_area_1_objects_3), + JUMP_LINK(script_lll_area_1_objects_4), + JUMP_LINK(script_lll_area_1_objects_5), TERRAIN(/*terrainData*/ lll_seg7_area_1_collision), - MACRO_OBJECTS(/*objList*/ lll_seg7_area_1_macro_objs), + JUMP_LINK(script_lll_area_1_macro_objects), SHOW_DIALOG(/*index*/ 0x00, DIALOG_097), SET_BACKGROUND_MUSIC(/*settingsPreset*/ 0x0000, /*seq*/ SEQ_LEVEL_HOT), TERRAIN_TYPE(/*terrainType*/ TERRAIN_STONE), @@ -199,10 +286,10 @@ const LevelScript level_lll_entry[] = { 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), - JUMP_LINK(script_func_local_6), - JUMP_LINK(script_func_local_7), + JUMP_LINK(script_lll_area_2_objects_1), + JUMP_LINK(script_lll_area_2_objects_2), TERRAIN(/*terrainData*/ lll_seg7_area_2_collision), - MACRO_OBJECTS(/*objList*/ lll_seg7_area_2_macro_objs), + JUMP_LINK(script_lll_area_2_macro_objects), SET_BACKGROUND_MUSIC(/*settingsPreset*/ 0x0004, /*seq*/ SEQ_LEVEL_HOT), TERRAIN_TYPE(/*terrainType*/ TERRAIN_STONE), END_AREA(), diff --git a/levels/pss/areas/1/collision.inc.c b/levels/pss/areas/1/collision.inc.c index 49d7a2324..386c6c424 100644 --- a/levels/pss/areas/1/collision.inc.c +++ b/levels/pss/areas/1/collision.inc.c @@ -1812,7 +1812,5 @@ const Collision pss_seg7_collision[] = { COL_TRI(117, 127, 128), COL_TRI(118, 131, 129), COL_TRI_STOP(), - COL_SPECIAL_INIT(1), - SPECIAL_OBJECT_WITH_YAW(/*preset*/ special_null_start, /*pos*/ 5632, 6656, -5631, /*yaw*/ 192), COL_END(), }; diff --git a/levels/pss/areas/1/macro.inc.c b/levels/pss/areas/1/macro.inc.c deleted file mode 100644 index f45eab39f..000000000 --- a/levels/pss/areas/1/macro.inc.c +++ /dev/null @@ -1,45 +0,0 @@ -// 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_END(), -}; diff --git a/levels/pss/header.h b/levels/pss/header.h index 830cae6a8..4c0f8cd64 100644 --- a/levels/pss/header.h +++ b/levels/pss/header.h @@ -15,7 +15,6 @@ extern const Gfx pss_seg7_dl_0700DAD8[]; extern const Gfx pss_seg7_dl_0700E2B0[]; extern const Gfx pss_seg7_dl_0700E3E8[]; extern const Collision pss_seg7_collision[]; -extern const MacroObject pss_seg7_macro_objs[]; // script extern const LevelScript level_pss_entry[]; diff --git a/levels/pss/leveldata.c b/levels/pss/leveldata.c index 8f98eff14..40cbccd97 100644 --- a/levels/pss/leveldata.c +++ b/levels/pss/leveldata.c @@ -2,11 +2,7 @@ #include "sm64.h" #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 "textures.h" -#include "dialog_ids.h" #include "make_const_nonconst.h" #include "levels/pss/texture.inc.c" @@ -18,4 +14,3 @@ #include "levels/pss/areas/1/6/model.inc.c" #include "levels/pss/areas/1/7/model.inc.c" #include "levels/pss/areas/1/collision.inc.c" -#include "levels/pss/areas/1/macro.inc.c" diff --git a/levels/pss/script.c b/levels/pss/script.c index bae599039..d765c07c5 100644 --- a/levels/pss/script.c +++ b/levels/pss/script.c @@ -3,6 +3,7 @@ #include "behavior_data.h" #include "model_ids.h" #include "seq_ids.h" +#include "dialog_ids.h" #include "segment_symbols.h" #include "level_commands.h" @@ -15,6 +16,53 @@ #include "make_const_nonconst.h" #include "levels/pss/header.h" + +static const LevelScript script_pss_macro_objects[] = { + // Macro objects + OBJECT(/*model*/ MODEL_YELLOW_COIN, /*pos*/ -3233, 4688, -5600, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvOneCoin), + OBJECT(/*model*/ MODEL_YELLOW_COIN, /*pos*/ -5636, 4331, -5054, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvOneCoin), + OBJECT(/*model*/ MODEL_YELLOW_COIN, /*pos*/ -5980, 3453, 945, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvOneCoin), + OBJECT(/*model*/ MODEL_YELLOW_COIN, /*pos*/ -2870, 2837, 2300, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvOneCoin), + OBJECT(/*model*/ MODEL_YELLOW_COIN, /*pos*/ 3930, 274, 2425, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvOneCoin), + OBJECT(/*model*/ MODEL_YELLOW_COIN, /*pos*/ 5174, 61, 3200, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvOneCoin), + OBJECT(/*model*/ MODEL_YELLOW_COIN, /*pos*/ 5707, -128, 4565, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvOneCoin), + OBJECT(/*model*/ MODEL_YELLOW_COIN, /*pos*/ 5194, -310, 5845, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvOneCoin), + OBJECT(/*model*/ MODEL_YELLOW_COIN, /*pos*/ 3640, -543, 6450, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvOneCoin), + OBJECT(/*model*/ MODEL_YELLOW_COIN, /*pos*/ 2550, -700, 6050, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvOneCoin), + OBJECT(/*model*/ MODEL_YELLOW_COIN, /*pos*/ 1821, -921, 4616, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvOneCoin), + OBJECT(/*model*/ MODEL_YELLOW_COIN, /*pos*/ -20, -2542, -6304, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvOneCoin), + OBJECT(/*model*/ MODEL_YELLOW_COIN, /*pos*/ -1197, -2929, -4692, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvOneCoin), + OBJECT(/*model*/ MODEL_YELLOW_COIN, /*pos*/ -2565, -3268, -3525, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvOneCoin), + OBJECT(/*model*/ MODEL_YELLOW_COIN, /*pos*/ -4909, -3633, -4218, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvOneCoin), + OBJECT(/*model*/ MODEL_YELLOW_COIN, /*pos*/ -6290, -3937, -2545, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvOneCoin), + OBJECT(/*model*/ MODEL_WOODEN_SIGNPOST, /*pos*/ 3580, 6140, -5180, /*angle*/ 0, 90, 0, /*behParam*/ (DIALOG_149 << 16), /*beh*/ bhvMessagePanel), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ 3000, 6180, -5640, /*angle*/ 0, 90, 0, /*behParam*/ ((COIN_FORMATION_FLAG_NONE) << 16), /*beh*/ bhvCoinFormation), + OBJECT(/*model*/ MODEL_BLUE_COIN_SWITCH, /*pos*/ 5423, 6140, -6540, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvBlueCoinSwitch), + OBJECT(/*model*/ MODEL_BLUE_COIN, /*pos*/ 780, 5613, -5600, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvHiddenBlueCoin), + OBJECT(/*model*/ MODEL_BLUE_COIN, /*pos*/ 2360, 5979, -5600, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvHiddenBlueCoin), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ 1880, -1440, 60, /*angle*/ 0, 0, 0, /*behParam*/ ((COIN_FORMATION_FLAG_NONE) << 16), /*beh*/ bhvCoinFormation), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ 1860, -1760, -1720, /*angle*/ 0, 0, 0, /*behParam*/ ((COIN_FORMATION_FLAG_NONE) << 16), /*beh*/ bhvCoinFormation), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ 1860, -1200, 1680, /*angle*/ 0, 0, 0, /*behParam*/ ((COIN_FORMATION_FLAG_NONE) << 16), /*beh*/ bhvCoinFormation), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ 1860, -1220, 1700, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvHidden1upTrigger), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ 1880, -1460, 80, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvHidden1upTrigger), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ 1860, -1820, -1680, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvHidden1upTrigger), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ -6380, -4550, 6320, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvHidden1upTrigger), + OBJECT(/*model*/ MODEL_1UP, /*pos*/ -6380, -4500, 5980, /*angle*/ 0, 0, 0, /*behParam*/ (4 << 16), /*beh*/ bhvHidden1up), + OBJECT(/*model*/ MODEL_1UP, /*pos*/ 1847, -961, 3863, /*angle*/ 0, 180, 0, /*behParam*/ 0x00000000, /*beh*/ bhv1upSliding), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ 260, 2580, 2280, /*angle*/ 0, 90, 0, /*behParam*/ ((COIN_FORMATION_FLAG_NONE) << 16), /*beh*/ bhvCoinFormation), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ -880, 2880, 2280, /*angle*/ 0, 90, 0, /*behParam*/ ((COIN_FORMATION_FLAG_NONE) << 16), /*beh*/ bhvCoinFormation), + OBJECT(/*model*/ MODEL_BLUE_COIN, /*pos*/ -809, 5245, -5600, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvHiddenBlueCoin), + OBJECT(/*model*/ MODEL_BLUE_COIN, /*pos*/ -2409, 4877, -5600, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvHiddenBlueCoin), + OBJECT(/*model*/ MODEL_YELLOW_COIN, /*pos*/ -6400, -4146, -590, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvOneCoin), + OBJECT(/*model*/ MODEL_YELLOW_COIN, /*pos*/ -6400, -4335, 1409, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvOneCoin), + OBJECT(/*model*/ MODEL_YELLOW_COIN, /*pos*/ -6400, -4530, 3481, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvOneCoin), + OBJECT(/*model*/ MODEL_BLUE_COIN, /*pos*/ -4445, 4490, -5536, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvHiddenBlueCoin), + OBJECT(/*model*/ MODEL_BLUE_COIN, /*pos*/ -6263, 4150, -4009, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvHiddenBlueCoin), + OBJECT(/*model*/ MODEL_YELLOW_COIN, /*pos*/ 1854, -2132, -4290, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvOneCoin), + OBJECT(/*model*/ MODEL_EXCLAMATION_BOX, /*pos*/ -6385, -4200, 5770, /*angle*/ 0, 0, 0, /*behParam*/ (EXCLAMATION_BOX_BP_STAR_1 << 16), /*beh*/ bhvExclamationBox), + RETURN(), +}; + const LevelScript level_pss_entry[] = { INIT_LEVEL(), LOAD_YAY0( /*seg*/ 0x07, _pss_segment_7SegmentRomStart, _pss_segment_7SegmentRomEnd), @@ -35,7 +83,7 @@ const LevelScript level_pss_entry[] = { 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), TERRAIN(/*terrainData*/ pss_seg7_collision), - MACRO_OBJECTS(/*objList*/ pss_seg7_macro_objs), + JUMP_LINK(script_pss_macro_objects), TERRAIN_TYPE(/*terrainType*/ TERRAIN_SLIDE), SET_BACKGROUND_MUSIC(/*settingsPreset*/ 0x0001, /*seq*/ SEQ_LEVEL_SLIDE), END_AREA(), diff --git a/levels/rr/areas/1/collision.inc.c b/levels/rr/areas/1/collision.inc.c index 53c20403e..2c683b8a9 100644 --- a/levels/rr/areas/1/collision.inc.c +++ b/levels/rr/areas/1/collision.inc.c @@ -2699,29 +2699,5 @@ const Collision rr_seg7_collision_level[] = { COL_TRI_SPECIAL(35, 45, 46, 0x100), COL_TRI_SPECIAL(35, 46, 47, 0x100), COL_TRI_STOP(), - COL_SPECIAL_INIT(23), - SPECIAL_OBJECT_WITH_YAW(/*preset*/ special_null_start, /*pos*/ 2599, -1833, 2071, /*yaw*/ 64), // unused, probably an early way to set initial position - SPECIAL_OBJECT_WITH_YAW(/*preset*/ special_level_geo_03, /*pos*/ 1902, -1833, 1063, /*yaw*/ 0), - SPECIAL_OBJECT_WITH_YAW(/*preset*/ special_level_geo_04, /*pos*/ 3803, -1833, 2036, /*yaw*/ 0), - SPECIAL_OBJECT_WITH_YAW(/*preset*/ special_level_geo_05, /*pos*/ -4888, -2550, 5847, /*yaw*/ 0), - SPECIAL_OBJECT_WITH_YAW(/*preset*/ special_level_geo_06, /*pos*/ 5324, -2038, 6155, /*yaw*/ 0), - SPECIAL_OBJECT_WITH_YAW(/*preset*/ special_level_geo_07, /*pos*/ -409, -3164, 5207, /*yaw*/ 0), - SPECIAL_OBJECT_WITH_YAW(/*preset*/ special_level_geo_08, /*pos*/ -3193, -4726, 6670, /*yaw*/ 0), - SPECIAL_OBJECT_WITH_YAW(/*preset*/ special_level_geo_08, /*pos*/ -4680, -1910, 296, /*yaw*/ 0), - SPECIAL_OBJECT_WITH_YAW(/*preset*/ special_level_geo_09, /*pos*/ 6506, -1295, 762, /*yaw*/ 0), - SPECIAL_OBJECT_WITH_YAW(/*preset*/ special_level_geo_0A, /*pos*/ -4629, 137, -113, /*yaw*/ 0), - SPECIAL_OBJECT_WITH_YAW(/*preset*/ special_level_geo_0B, /*pos*/ 2639, 2724, -622, /*yaw*/ 0), - SPECIAL_OBJECT_WITH_YAW(/*preset*/ special_level_geo_0C, /*pos*/ 3577, 2486, -2346, /*yaw*/ 0), - SPECIAL_OBJECT_WITH_YAW(/*preset*/ special_level_geo_0D, /*pos*/ 614, -1116, 3671, /*yaw*/ 0), - SPECIAL_OBJECT_WITH_YAW(/*preset*/ special_level_geo_0D, /*pos*/ 3554, 4276, -2346, /*yaw*/ 0), - SPECIAL_OBJECT_WITH_YAW(/*preset*/ special_level_geo_0E, /*pos*/ 5280, 4937, 603, /*yaw*/ 128), - SPECIAL_OBJECT_WITH_YAW(/*preset*/ special_level_geo_0F, /*pos*/ -4197, 4608, -5119, /*yaw*/ 0), - SPECIAL_OBJECT_WITH_YAW(/*preset*/ special_level_geo_10, /*pos*/ 2628, -143, -1611, /*yaw*/ 0), - SPECIAL_OBJECT_WITH_YAW(/*preset*/ special_level_geo_11, /*pos*/ 5094, 3440, 4029, /*yaw*/ 0), - SPECIAL_OBJECT_WITH_YAW(/*preset*/ special_level_geo_12, /*pos*/ -3708, 2006, 270, /*yaw*/ 0), - SPECIAL_OBJECT_WITH_YAW(/*preset*/ special_level_geo_13, /*pos*/ 5994, -988, 1341, /*yaw*/ 0), - SPECIAL_OBJECT_WITH_YAW(/*preset*/ special_level_geo_14, /*pos*/ 3917, 624, -1133, /*yaw*/ 0), - SPECIAL_OBJECT_WITH_YAW(/*preset*/ special_level_geo_15, /*pos*/ -3981, 3328, -2736, /*yaw*/ 0), - SPECIAL_OBJECT_WITH_YAW(/*preset*/ special_level_geo_16, /*pos*/ -6053, 4096, -3197, /*yaw*/ 0), COL_END(), }; diff --git a/levels/rr/areas/1/macro.inc.c b/levels/rr/areas/1/macro.inc.c deleted file mode 100644 index 1b8bfcca6..000000000 --- a/levels/rr/areas/1/macro.inc.c +++ /dev/null @@ -1,65 +0,0 @@ -// 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_END(), -}; diff --git a/levels/rr/header.h b/levels/rr/header.h index 85096443d..85e62adf9 100644 --- a/levels/rr/header.h +++ b/levels/rr/header.h @@ -101,7 +101,6 @@ extern const Collision rr_seg7_collision_07029FA4[]; extern const Collision rr_seg7_collision_0702A32C[]; extern const Collision rr_seg7_collision_0702A6B4[]; extern const Collision rr_seg7_collision_level[]; -extern const MacroObject rr_seg7_macro_objs[]; extern const Trajectory rr_seg7_trajectory_0702EC3C[]; extern const Trajectory rr_seg7_trajectory_0702ECC0[]; extern const Trajectory rr_seg7_trajectory_0702ED9C[]; diff --git a/levels/rr/leveldata.c b/levels/rr/leveldata.c index 218f1e344..ff568af12 100644 --- a/levels/rr/leveldata.c +++ b/levels/rr/leveldata.c @@ -2,9 +2,6 @@ #include "sm64.h" #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 "textures.h" #include "make_const_nonconst.h" @@ -64,5 +61,4 @@ #include "levels/rr/tricky_triangles_4/collision.inc.c" #include "levels/rr/tricky_triangles_5/collision.inc.c" #include "levels/rr/areas/1/collision.inc.c" -#include "levels/rr/areas/1/macro.inc.c" #include "levels/rr/areas/1/trajectory.inc.c" diff --git a/levels/rr/script.c b/levels/rr/script.c index 25a20623f..e440b8159 100644 --- a/levels/rr/script.c +++ b/levels/rr/script.c @@ -15,7 +15,97 @@ #include "make_const_nonconst.h" #include "levels/rr/header.h" -static const LevelScript script_func_local_1[] = { + +static const LevelScript script_rr_macro_objects[] = { + // Macro objects + OBJECT(/*model*/ MODEL_RED_COIN, /*pos*/ -5850, -1000, -50, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvRedCoin), + OBJECT(/*model*/ MODEL_RED_COIN, /*pos*/ -2950, -190, -50, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvRedCoin), + OBJECT(/*model*/ MODEL_RED_COIN, /*pos*/ -5850, 1150, 50, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvRedCoin), + OBJECT(/*model*/ MODEL_RED_COIN, /*pos*/ -5050, 800, -50, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvRedCoin), + OBJECT(/*model*/ MODEL_RED_COIN, /*pos*/ -4550, 650, -50, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvRedCoin), + OBJECT(/*model*/ MODEL_RED_COIN, /*pos*/ -5300, 200, -50, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvRedCoin), + OBJECT(/*model*/ MODEL_RED_COIN, /*pos*/ -3550, 1000, -50, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvRedCoin), + OBJECT(/*model*/ MODEL_RED_COIN, /*pos*/ -5800, -400, -50, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvRedCoin), + OBJECT(/*model*/ MODEL_BOBOMB_BUDDY, /*pos*/ -4200, 1648, 0, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvBobombBuddyOpensCannon), + OBJECT(/*model*/ MODEL_DL_CANNON_LID, /*pos*/ 5545, 3333, -2345, /*angle*/ 0, 0, 0, /*behParam*/ (0xC0 << 16), /*beh*/ bhvCannonClosed), + OBJECT(/*model*/ MODEL_EXCLAMATION_BOX, /*pos*/ -6750, 2600, -50, /*angle*/ 0, 0, 0, /*behParam*/ (EXCLAMATION_BOX_BP_1UP_WALKING << 16), /*beh*/ bhvExclamationBox), + OBJECT(/*model*/ MODEL_AMP, /*pos*/ 6500, -900, 900, /*angle*/ 0, 0, 0, /*behParam*/ (1 << 16), /*beh*/ bhvCirclingAmp), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ 6500, -1000, 900, /*angle*/ 0, 0, 0, /*behParam*/ ((COIN_FORMATION_FLAG_RING ) << 16), /*beh*/ bhvCoinFormation), + OBJECT(/*model*/ MODEL_ENEMY_LAKITU, /*pos*/ 615, -584, 0, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvEnemyLakitu), + OBJECT(/*model*/ MODEL_HEART, /*pos*/ -550, -1050, -50, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvRecoveryHeart), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ 600, -1040, 1200, /*angle*/ 0, 0, 0, /*behParam*/ ((COIN_FORMATION_FLAG_FLYING | COIN_FORMATION_FLAG_RING ) << 16), /*beh*/ bhvCoinFormation), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ 600, -1040, -1300, /*angle*/ 0, 0, 0, /*behParam*/ ((COIN_FORMATION_FLAG_FLYING | COIN_FORMATION_FLAG_RING ) << 16), /*beh*/ bhvCoinFormation), + OBJECT(/*model*/ MODEL_HEART, /*pos*/ -7071, -1705, -31, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvRecoveryHeart), + OBJECT(/*model*/ MODEL_BLACK_BOBOMB, /*pos*/ -3295, -1782, 524, /*angle*/ 0, 0, 0, /*behParam*/ (BOBOMB_BP_STYPE_GENERIC << 16), /*beh*/ bhvBobomb), + OBJECT(/*model*/ MODEL_BLACK_BOBOMB, /*pos*/ -5872, -1782, 572, /*angle*/ 0, 0, 0, /*behParam*/ (BOBOMB_BP_STYPE_GENERIC << 16), /*beh*/ bhvBobomb), + OBJECT(/*model*/ MODEL_FLYGUY, /*pos*/ 971, -3059, 4912, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvFlyGuy), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ 615, -3275, 5660, /*angle*/ 0, 0, 0, /*behParam*/ ((COIN_FORMATION_FLAG_NONE ) << 16), /*beh*/ bhvCoinFormation), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ -2203, -3500, 6572, /*angle*/ 0, 0, 0, /*behParam*/ ((COIN_FORMATION_FLAG_FLYING | COIN_FORMATION_FLAG_VERTICAL) << 16), /*beh*/ bhvCoinFormation), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ -1866, -1116, 4933, /*angle*/ 0, 90, 0, /*behParam*/ ((COIN_FORMATION_FLAG_NONE ) << 16), /*beh*/ bhvCoinFormation), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ 799, -1446, 6622, /*angle*/ 0, 90, 0, /*behParam*/ ((COIN_FORMATION_FLAG_NONE ) << 16), /*beh*/ bhvCoinFormation), + OBJECT(/*model*/ MODEL_1UP, /*pos*/ 6666, -1000, 6533, /*angle*/ 0, 0, 0, /*behParam*/ (MUSHROOM_BP_REQUIRES_NONE << 16), /*beh*/ bhv1Up), + OBJECT(/*model*/ MODEL_YELLOW_COIN, /*pos*/ 3960, -41, -3640, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvOneCoin), + OBJECT(/*model*/ MODEL_YELLOW_COIN, /*pos*/ 5680, 600, -2400, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvYellowCoin), + OBJECT(/*model*/ MODEL_BREAKABLE_BOX, /*pos*/ 2560, 1000, -1600, /*angle*/ 0, 0, 0, /*behParam*/ (BREAKABLE_BOX_BP_NO_COINS << 16), /*beh*/ bhvBreakableBox), + OBJECT(/*model*/ MODEL_GOOMBA, /*pos*/ -1440, -1960, 6640, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvGoomba), + OBJECT(/*model*/ MODEL_1UP, /*pos*/ 5040, 2100, 280, /*angle*/ 0, 0, 0, /*behParam*/ (MUSHROOM_BP_REQUIRES_NONE << 16), /*beh*/ bhv1Up), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ 3542, 4892, -2371, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvHidden1upInPoleSpawner), + OBJECT(/*model*/ MODEL_ENEMY_LAKITU, /*pos*/ 4714, 3507, -2371, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvEnemyLakitu), + OBJECT(/*model*/ MODEL_BLACK_BOBOMB, /*pos*/ 3485, 2889, -2057, /*angle*/ 0, 0, 0, /*behParam*/ (BOBOMB_BP_STYPE_GENERIC << 16), /*beh*/ bhvBobomb), + OBJECT(/*model*/ MODEL_BLACK_BOBOMB, /*pos*/ 2628, 2893, -2371, /*angle*/ 0, 0, 0, /*behParam*/ (BOBOMB_BP_STYPE_GENERIC << 16), /*beh*/ bhvBobomb), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ 3542, 2923, -2371, /*angle*/ 0, 0, 0, /*behParam*/ ((COIN_FORMATION_FLAG_RING ) << 16), /*beh*/ bhvCoinFormation), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ -3342, 3222, -5071, /*angle*/ 0, 0, 0, /*behParam*/ ((COIN_FORMATION_FLAG_NONE ) << 16), /*beh*/ bhvCoinFormation), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ -7771, 4352, -3871, /*angle*/ 0, 0, 0, /*behParam*/ ((COIN_FORMATION_FLAG_NONE ) << 16), /*beh*/ bhvCoinFormation), + OBJECT(/*model*/ MODEL_AMP, /*pos*/ -6571, 4000, -2328, /*angle*/ 0, 0, 0, /*behParam*/ (1 << 16), /*beh*/ bhvCirclingAmp), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ -6057, 4676, -5242, /*angle*/ 0, 90, 0, /*behParam*/ ((COIN_FORMATION_FLAG_FLYING ) << 16), /*beh*/ bhvCoinFormation), + OBJECT(/*model*/ MODEL_CHUCKYA, /*pos*/ 5114, 3828, 4028, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvChuckya), + OBJECT(/*model*/ MODEL_1UP, /*pos*/ -165, 3543, -2352, /*angle*/ 0, 0, 0, /*behParam*/ (MUSHROOM_BP_REQUIRES_NONE << 16), /*beh*/ bhv1Up), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ 250, 1400, -180, /*angle*/ 0, 0, 0, /*behParam*/ ((COIN_FORMATION_FLAG_FLYING | COIN_FORMATION_FLAG_VERTICAL) << 16), /*beh*/ bhvCoinFormation), + OBJECT(/*model*/ MODEL_1UP, /*pos*/ -735, 2860, -150, /*angle*/ 0, 0, 0, /*behParam*/ (MUSHROOM_BP_REQUIRES_NONE << 16), /*beh*/ bhv1Up), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ -2175, 2365, -60, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvHidden1upInPoleSpawner), + OBJECT(/*model*/ MODEL_BLUE_COIN_SWITCH, /*pos*/ -6930, -1791, 521, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvBlueCoinSwitch), + OBJECT(/*model*/ MODEL_BLUE_COIN, /*pos*/ -6500, 1700, 0, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvHiddenBlueCoin), + OBJECT(/*model*/ MODEL_BLUE_COIN, /*pos*/ -6200, 1700, 0, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvHiddenBlueCoin), + OBJECT(/*model*/ MODEL_BLUE_COIN, /*pos*/ -5900, 1700, 0, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvHiddenBlueCoin), + OBJECT(/*model*/ MODEL_BLUE_COIN, /*pos*/ -5600, 1700, 0, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvHiddenBlueCoin), + OBJECT(/*model*/ MODEL_BLUE_COIN, /*pos*/ -6750, -1495, 0, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvHiddenBlueCoin), + OBJECT(/*model*/ MODEL_BLUE_COIN, /*pos*/ -5300, 1700, 0, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvHiddenBlueCoin), + OBJECT(/*model*/ MODEL_BOWLING_BALL, /*pos*/ -3233, 1291, -52, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvFireSpitter), + OBJECT(/*model*/ MODEL_YELLOW_COIN, /*pos*/ -7338, -2260, 6700, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvYellowCoin), + OBJECT(/*model*/ MODEL_YELLOW_COIN, /*pos*/ -7338, -2260, 6350, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvYellowCoin), + OBJECT(/*model*/ MODEL_YELLOW_COIN, /*pos*/ -6715, -1900, 6700, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvYellowCoin), + OBJECT(/*model*/ MODEL_YELLOW_COIN, /*pos*/ -6715, -1900, 6350, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvYellowCoin), + OBJECT(/*model*/ MODEL_EXCLAMATION_BOX, /*pos*/ -4844, -4240, 6622, /*angle*/ 0, 0, 0, /*behParam*/ (EXCLAMATION_BOX_BP_1UP_RUNNING_AWAY << 16), /*beh*/ bhvExclamationBox), + OBJECT(/*model*/ MODEL_EXCLAMATION_BOX, /*pos*/ -3428, 6770, -5128, /*angle*/ 0, 0, 0, /*behParam*/ (EXCLAMATION_BOX_BP_1UP_RUNNING_AWAY << 16), /*beh*/ bhvExclamationBox), + OBJECT(/*model*/ MODEL_EXCLAMATION_BOX, /*pos*/ 5000, 4100, 4440, /*angle*/ 0, 0, 0, /*behParam*/ (EXCLAMATION_BOX_BP_STAR_6 << 16), /*beh*/ bhvExclamationBox), + OBJECT(/*model*/ MODEL_BOWLING_BALL, /*pos*/ -6000, -440, -40, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvFireSpitter), + // Special objects + OBJECT(/*model*/ MODEL_LEVEL_GEOMETRY_03, /*pos*/ 1902, -1833, 1063, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvStaticObject), + OBJECT(/*model*/ MODEL_LEVEL_GEOMETRY_04, /*pos*/ 3803, -1833, 2036, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvStaticObject), + OBJECT(/*model*/ MODEL_LEVEL_GEOMETRY_05, /*pos*/ -4888, -2550, 5847, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvStaticObject), + OBJECT(/*model*/ MODEL_LEVEL_GEOMETRY_06, /*pos*/ 5324, -2038, 6155, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvStaticObject), + OBJECT(/*model*/ MODEL_LEVEL_GEOMETRY_07, /*pos*/ -409, -3164, 5207, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvStaticObject), + OBJECT(/*model*/ MODEL_LEVEL_GEOMETRY_08, /*pos*/ -3193, -4726, 6670, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvStaticObject), + OBJECT(/*model*/ MODEL_LEVEL_GEOMETRY_08, /*pos*/ -4680, -1910, 296, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvStaticObject), + OBJECT(/*model*/ MODEL_LEVEL_GEOMETRY_09, /*pos*/ 6506, -1295, 762, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvStaticObject), + OBJECT(/*model*/ MODEL_LEVEL_GEOMETRY_0A, /*pos*/ -4629, 137, -113, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvStaticObject), + OBJECT(/*model*/ MODEL_LEVEL_GEOMETRY_0B, /*pos*/ 2639, 2724, -622, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvStaticObject), + OBJECT(/*model*/ MODEL_LEVEL_GEOMETRY_0C, /*pos*/ 3577, 2486, -2346, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvStaticObject), + OBJECT(/*model*/ MODEL_LEVEL_GEOMETRY_0D, /*pos*/ 614, -1116, 3671, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvStaticObject), + OBJECT(/*model*/ MODEL_LEVEL_GEOMETRY_0D, /*pos*/ 3554, 4276, -2346, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvStaticObject), + OBJECT(/*model*/ MODEL_LEVEL_GEOMETRY_0E, /*pos*/ 5280, 4937, 603, /*angle*/ 0, 180, 0, /*behParam*/ 0x00000000, /*beh*/ bhvStaticObject), + OBJECT(/*model*/ MODEL_LEVEL_GEOMETRY_0F, /*pos*/ -4197, 4608, -5119, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvStaticObject), + OBJECT(/*model*/ MODEL_LEVEL_GEOMETRY_10, /*pos*/ 2628, -143, -1611, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvStaticObject), + OBJECT(/*model*/ MODEL_LEVEL_GEOMETRY_11, /*pos*/ 5094, 3440, 4029, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvStaticObject), + OBJECT(/*model*/ MODEL_LEVEL_GEOMETRY_12, /*pos*/ -3708, 2006, 270, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvStaticObject), + OBJECT(/*model*/ MODEL_LEVEL_GEOMETRY_13, /*pos*/ 5994, -988, 1341, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvStaticObject), + OBJECT(/*model*/ MODEL_LEVEL_GEOMETRY_14, /*pos*/ 3917, 624, -1133, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvStaticObject), + OBJECT(/*model*/ MODEL_LEVEL_GEOMETRY_15, /*pos*/ -3981, 3328, -2736, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvStaticObject), + OBJECT(/*model*/ MODEL_LEVEL_GEOMETRY_16, /*pos*/ -6053, 4096, -3197, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvStaticObject), + RETURN(), +}; + +static const LevelScript script_rr_objects_1[] = { OBJECT(/*model*/ MODEL_RR_SLIDING_PLATFORM, /*pos*/ -3400, -2038, 6564, /*angle*/ 0, 0, 0, /*behParam*/ 0x04560000, /*beh*/ bhvSlidingPlatform2), OBJECT(/*model*/ MODEL_RR_SLIDING_PLATFORM, /*pos*/ -2684, -1423, -36, /*angle*/ 0, 0, 0, /*behParam*/ 0x04590000, /*beh*/ bhvSlidingPlatform2), OBJECT(/*model*/ MODEL_RR_FLYING_CARPET, /*pos*/ 4571, -1782, 2036, /*angle*/ 0, 180, 0, /*behParam*/ 0x00000000, /*beh*/ bhvPlatformOnTrack), @@ -50,7 +140,7 @@ static const LevelScript script_func_local_1[] = { RETURN(), }; -static const LevelScript script_func_local_2[] = { +static const LevelScript script_rr_objects_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), @@ -59,7 +149,7 @@ static const LevelScript script_func_local_2[] = { RETURN(), }; -static const LevelScript script_func_local_3[] = { +static const LevelScript script_rr_objects_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), @@ -127,11 +217,11 @@ const LevelScript level_rr_entry[] = { 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), - JUMP_LINK(script_func_local_1), - JUMP_LINK(script_func_local_2), - JUMP_LINK(script_func_local_3), + JUMP_LINK(script_rr_objects_1), + JUMP_LINK(script_rr_objects_2), + JUMP_LINK(script_rr_objects_3), TERRAIN(/*terrainData*/ rr_seg7_collision_level), - MACRO_OBJECTS(/*objList*/ rr_seg7_macro_objs), + JUMP_LINK(script_rr_macro_objects), SET_BACKGROUND_MUSIC(/*settingsPreset*/ 0x0000, /*seq*/ SEQ_LEVEL_SLIDE), TERRAIN_TYPE(/*terrainType*/ TERRAIN_STONE), END_AREA(), diff --git a/levels/sa/areas/1/collision.inc.c b/levels/sa/areas/1/collision.inc.c index c4806fd14..3444fae5e 100644 --- a/levels/sa/areas/1/collision.inc.c +++ b/levels/sa/areas/1/collision.inc.c @@ -104,8 +104,6 @@ const Collision sa_seg7_collision[] = { COL_TRI(29, 47, 30), COL_TRI(30, 47, 12), COL_TRI_STOP(), - COL_SPECIAL_INIT(1), - SPECIAL_OBJECT_WITH_YAW(/*preset*/ special_null_start, /*pos*/ 0, -1535, 0, /*yaw*/ 64), // unused, probably an early way to set initial position COL_WATER_BOX_INIT(1), COL_WATER_BOX(0, -3173, -3173, 3174, 3174, 102), COL_END(), diff --git a/levels/sa/areas/1/macro.inc.c b/levels/sa/areas/1/macro.inc.c deleted file mode 100644 index 99a81020c..000000000 --- a/levels/sa/areas/1/macro.inc.c +++ /dev/null @@ -1,21 +0,0 @@ -// 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_END(), -}; diff --git a/levels/sa/header.h b/levels/sa/header.h index e8c5cf471..e74eec2eb 100644 --- a/levels/sa/header.h +++ b/levels/sa/header.h @@ -10,7 +10,6 @@ extern const GeoLayout sa_geo_000170[]; extern const Gfx sa_seg7_dl_07002DE8[]; extern const Gfx sa_seg7_dl_07002FD0[]; extern const Collision sa_seg7_collision[]; -extern const MacroObject sa_seg7_macro_objs[]; // script extern const LevelScript level_sa_entry[]; diff --git a/levels/sa/leveldata.c b/levels/sa/leveldata.c index 30c3d28a1..fb8b1bea5 100644 --- a/levels/sa/leveldata.c +++ b/levels/sa/leveldata.c @@ -2,13 +2,9 @@ #include "sm64.h" #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 "textures.h" #include "make_const_nonconst.h" #include "levels/sa/areas/1/1/model.inc.c" #include "levels/sa/areas/1/2/model.inc.c" #include "levels/sa/areas/1/collision.inc.c" -#include "levels/sa/areas/1/macro.inc.c" diff --git a/levels/sa/script.c b/levels/sa/script.c index 575edac56..05ebc0603 100644 --- a/levels/sa/script.c +++ b/levels/sa/script.c @@ -15,13 +15,36 @@ #include "make_const_nonconst.h" #include "levels/sa/header.h" -static const LevelScript script_func_local_1[] = { + +static const LevelScript script_sa_macro_objects[] = { + // Macro objects + OBJECT(/*model*/ MODEL_RED_COIN, /*pos*/ -2400, -4607, -2400, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvRedCoin), + OBJECT(/*model*/ MODEL_RED_COIN, /*pos*/ -2400, -4607, 2400, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvRedCoin), + OBJECT(/*model*/ MODEL_RED_COIN, /*pos*/ 2400, -4607, 2400, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvRedCoin), + OBJECT(/*model*/ MODEL_RED_COIN, /*pos*/ 2400, -4607, -2400, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvRedCoin), + OBJECT(/*model*/ MODEL_RED_COIN, /*pos*/ 0, -2200, -1500, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvRedCoin), + OBJECT(/*model*/ MODEL_RED_COIN, /*pos*/ -1500, -2200, 0, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvRedCoin), + OBJECT(/*model*/ MODEL_RED_COIN, /*pos*/ 0, -2200, 1500, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvRedCoin), + OBJECT(/*model*/ MODEL_RED_COIN, /*pos*/ 1500, -2200, 0, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvRedCoin), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ 1927, -2909, 0, /*angle*/ 0, 0, 0, /*behParam*/ (FISH_SPAWNER_BP_FEW_BLUE << 16), /*beh*/ bhvFishSpawner), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ 0, -2400, -1500, /*angle*/ 0, 90, 0, /*behParam*/ ((COIN_FORMATION_FLAG_FLYING | COIN_FORMATION_FLAG_RING | COIN_FORMATION_FLAG_VERTICAL) << 16), /*beh*/ bhvCoinFormation), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ -1500, -2400, 0, /*angle*/ 0, 0, 0, /*behParam*/ ((COIN_FORMATION_FLAG_FLYING | COIN_FORMATION_FLAG_RING | COIN_FORMATION_FLAG_VERTICAL) << 16), /*beh*/ bhvCoinFormation), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ 0, -2400, 1500, /*angle*/ 0, 90, 0, /*behParam*/ ((COIN_FORMATION_FLAG_FLYING | COIN_FORMATION_FLAG_RING | COIN_FORMATION_FLAG_VERTICAL) << 16), /*beh*/ bhvCoinFormation), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ 1500, -2400, 0, /*angle*/ 0, 0, 0, /*behParam*/ ((COIN_FORMATION_FLAG_FLYING | COIN_FORMATION_FLAG_RING | COIN_FORMATION_FLAG_VERTICAL) << 16), /*beh*/ bhvCoinFormation), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ 0, -3500, 0, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvHidden1upTrigger), + OBJECT(/*model*/ MODEL_1UP, /*pos*/ 0, -3800, 0, /*angle*/ 0, 0, 0, /*behParam*/ (1 << 16), /*beh*/ bhvHidden1up), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ 0, -3500, 0, /*angle*/ 0, 0, 0, /*behParam*/ ((COIN_FORMATION_FLAG_FLYING | COIN_FORMATION_FLAG_RING) << 16), /*beh*/ bhvCoinFormation), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ -1000, -4080, -1740, /*angle*/ 0, 0, 0, /*behParam*/ (FISH_SPAWNER_BP_FEW_CYAN << 16), /*beh*/ bhvFishSpawner), + RETURN(), +}; + +static const LevelScript script_sa_objects_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), RETURN(), }; -static const LevelScript script_func_local_2[] = { +static const LevelScript script_sa_objects_2[] = { OBJECT(/*model*/ MODEL_NONE, /*pos*/ 0, -4250, 0, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvHiddenRedCoinStar), RETURN(), }; @@ -46,10 +69,10 @@ const LevelScript level_sa_entry[] = { 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), - JUMP_LINK(script_func_local_1), - JUMP_LINK(script_func_local_2), + JUMP_LINK(script_sa_objects_1), + JUMP_LINK(script_sa_objects_2), TERRAIN(/*terrainData*/ sa_seg7_collision), - MACRO_OBJECTS(/*objList*/ sa_seg7_macro_objs), + JUMP_LINK(script_sa_macro_objects), SET_BACKGROUND_MUSIC(/*settingsPreset*/ 0x0003, /*seq*/ (SEQ_LEVEL_WATER | SEQ_VARIATION)), TERRAIN_TYPE(/*terrainType*/ TERRAIN_WATER), END_AREA(), diff --git a/levels/sl/areas/1/collision.inc.c b/levels/sl/areas/1/collision.inc.c index b5579698a..12ac55750 100644 --- a/levels/sl/areas/1/collision.inc.c +++ b/levels/sl/areas/1/collision.inc.c @@ -1422,17 +1422,6 @@ const Collision sl_seg7_area_1_collision[] = { COL_TRI(510, 513, 327), COL_TRI(510, 327, 321), COL_TRI_STOP(), - COL_SPECIAL_INIT(10), - SPECIAL_OBJECT_WITH_YAW(/*preset*/ special_null_start, /*pos*/ 5541, 1024, 443, /*yaw*/ 192), // unused, probably an early way to set initial position - SPECIAL_OBJECT(/*preset*/ special_snow_tree, /*pos*/ 5395, 1054, -5443), - SPECIAL_OBJECT(/*preset*/ special_snow_tree, /*pos*/ 0, 4864, 0), - SPECIAL_OBJECT(/*preset*/ special_snow_tree, /*pos*/ 5666, 1024, -3341), - SPECIAL_OBJECT(/*preset*/ special_snow_tree, /*pos*/ 1919, 1024, -4759), - SPECIAL_OBJECT(/*preset*/ special_snow_tree, /*pos*/ 3645, 1024, -5889), - SPECIAL_OBJECT(/*preset*/ special_snow_tree, /*pos*/ 1658, 1536, -3605), - SPECIAL_OBJECT(/*preset*/ special_snow_tree, /*pos*/ -3769, 1024, -1197), - SPECIAL_OBJECT(/*preset*/ special_snow_tree, /*pos*/ -2745, 1024, -582), - SPECIAL_OBJECT(/*preset*/ special_snow_tree, /*pos*/ 1766, 2816, -942), COL_WATER_BOX_INIT(2), COL_WATER_BOX(0, -6194, -409, 154, 4198, 973), COL_WATER_BOX(1, -1279, -6143, 1485, -3071, 973), diff --git a/levels/sl/areas/1/macro.inc.c b/levels/sl/areas/1/macro.inc.c deleted file mode 100644 index d75dac182..000000000 --- a/levels/sl/areas/1/macro.inc.c +++ /dev/null @@ -1,51 +0,0 @@ -// 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_END(), -}; diff --git a/levels/sl/areas/2/collision.inc.c b/levels/sl/areas/2/collision.inc.c index 86113712e..54faedfbe 100644 --- a/levels/sl/areas/2/collision.inc.c +++ b/levels/sl/areas/2/collision.inc.c @@ -406,8 +406,6 @@ const Collision sl_seg7_area_2_collision[] = { COL_TRI(146, 188, 187), COL_TRI(146, 187, 145), COL_TRI_STOP(), - COL_SPECIAL_INIT(1), - SPECIAL_OBJECT_WITH_YAW(/*preset*/ special_null_start, /*pos*/ 0, 0, 2867, /*yaw*/ 128), // unused, probably an early way to set initial position COL_END(), }; diff --git a/levels/sl/areas/2/macro.inc.c b/levels/sl/areas/2/macro.inc.c deleted file mode 100644 index 7603edc1e..000000000 --- a/levels/sl/areas/2/macro.inc.c +++ /dev/null @@ -1,22 +0,0 @@ -// 0x0700F978 - 0x0700FA2E -const MacroObject sl_seg7_area_2_macro_objs[] = { - MACRO_OBJECT(/*preset*/ macro_yellow_coin_2, /*yaw*/ 0, /*pos*/ 1740, 0, 900), - MACRO_OBJECT(/*preset*/ macro_yellow_coin_2, /*yaw*/ 0, /*pos*/ 1440, 0, 900), - MACRO_OBJECT(/*preset*/ macro_yellow_coin_2, /*yaw*/ 0, /*pos*/ 1140, 0, 900), - MACRO_OBJECT(/*preset*/ macro_goomba, /*yaw*/ 0, /*pos*/ 1760, 0, 200), - 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_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), - MACRO_OBJECT(/*preset*/ macro_spindrift, /*yaw*/ 0, /*pos*/ 800, 60, 2000), - MACRO_OBJECT(/*preset*/ macro_coin_line_horizontal, /*yaw*/ 90, /*pos*/ 1500, 0, 500), - MACRO_OBJECT(/*preset*/ macro_coin_line_horizontal_flying, /*yaw*/ 90, /*pos*/ 1500, 100, 500), - MACRO_OBJECT(/*preset*/ macro_coin_line_horizontal_flying, /*yaw*/ 90, /*pos*/ 1500, 200, 500), - MACRO_OBJECT(/*preset*/ macro_coin_line_horizontal_flying, /*yaw*/ 90, /*pos*/ 1500, 300, 500), - MACRO_OBJECT(/*preset*/ macro_1up, /*yaw*/ 0, /*pos*/ 1700, 20, -100), - MACRO_OBJECT(/*preset*/ macro_box_1up_running_away, /*yaw*/ 0, /*pos*/ -120, 300, -1740), - MACRO_OBJECT_END(), -}; diff --git a/levels/sl/header.h b/levels/sl/header.h index 457fb093b..6953037c5 100644 --- a/levels/sl/header.h +++ b/levels/sl/header.h @@ -27,11 +27,9 @@ extern const Gfx sl_seg7_dl_0700BCF8[]; extern const Gfx sl_seg7_dl_0700C9E8[]; extern const Gfx sl_seg7_dl_0700CB58[]; extern const Collision sl_seg7_area_1_collision[]; -extern const MacroObject sl_seg7_area_1_macro_objs[]; extern const Collision sl_seg7_collision_sliding_snow_mound[]; extern const Collision sl_seg7_collision_pound_explodes[]; extern const Collision sl_seg7_area_2_collision[]; -extern const MacroObject sl_seg7_area_2_macro_objs[]; extern const struct MovtexQuadCollection sl_movtex_water[]; // script diff --git a/levels/sl/leveldata.c b/levels/sl/leveldata.c index c7132a5a8..f38e4d490 100644 --- a/levels/sl/leveldata.c +++ b/levels/sl/leveldata.c @@ -2,11 +2,7 @@ #include "sm64.h" #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 "textures.h" -#include "dialog_ids.h" #include "make_const_nonconst.h" #include "levels/sl/texture.inc.c" @@ -25,9 +21,7 @@ #include "levels/sl/areas/2/3/model.inc.c" #include "levels/sl/areas/2/4/model.inc.c" #include "levels/sl/areas/1/collision.inc.c" -#include "levels/sl/areas/1/macro.inc.c" #include "levels/sl/snow_mound/collision.inc.c" #include "levels/sl/unused_cracked_ice/collision.inc.c" #include "levels/sl/areas/2/collision.inc.c" -#include "levels/sl/areas/2/macro.inc.c" #include "levels/sl/areas/1/movtext.inc.c" diff --git a/levels/sl/script.c b/levels/sl/script.c index f937ddd18..bb3e1512a 100644 --- a/levels/sl/script.c +++ b/levels/sl/script.c @@ -3,6 +3,7 @@ #include "behavior_data.h" #include "model_ids.h" #include "seq_ids.h" +#include "dialog_ids.h" #include "segment_symbols.h" #include "level_commands.h" @@ -16,19 +17,104 @@ #include "levels/sl/header.h" -static const LevelScript script_func_local_1[] = { +static const LevelScript script_sl_area_1_macro_objects[] = { + // Macro objects + OBJECT(/*model*/ MODEL_WOODEN_SIGNPOST, /*pos*/ 4086, 1024, 400, /*angle*/ 0, 90, 0, /*behParam*/ (DIALOG_086 << 16), /*beh*/ bhvMessagePanel), + OBJECT(/*model*/ MODEL_YELLOW_COIN, /*pos*/ 1285, 2210, 385, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvOneCoin), + OBJECT(/*model*/ MODEL_YELLOW_COIN, /*pos*/ 1728, 2560, -671, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvOneCoin), + OBJECT(/*model*/ MODEL_YELLOW_COIN, /*pos*/ 1371, 2188, -500, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvOneCoin), + OBJECT(/*model*/ MODEL_YELLOW_COIN, /*pos*/ 1814, 3174, 114, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvOneCoin), + OBJECT(/*model*/ MODEL_YELLOW_COIN, /*pos*/ 28, 3328, 1885, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvOneCoin), + OBJECT(/*model*/ MODEL_YELLOW_COIN, /*pos*/ -228, 3482, 1742, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvOneCoin), + OBJECT(/*model*/ MODEL_DL_CANNON_LID, /*pos*/ 4483, 821, 1168, /*angle*/ 0, 0, 0, /*behParam*/ (0x80 << 16), /*beh*/ bhvCannonClosed), + OBJECT(/*model*/ MODEL_MR_BLIZZARD_HIDDEN, /*pos*/ -3452, 1110, -3364, /*angle*/ 0, 0, 0, /*behParam*/ (MR_BLIZZARD_STYPE_NO_CAP << 16), /*beh*/ bhvMrBlizzard), + OBJECT(/*model*/ MODEL_MR_BLIZZARD_HIDDEN, /*pos*/ 5422, 1065, -1288, /*angle*/ 0, 0, 0, /*behParam*/ (MR_BLIZZARD_STYPE_NO_CAP << 16), /*beh*/ bhvMrBlizzard), + OBJECT(/*model*/ MODEL_MR_BLIZZARD_HIDDEN, /*pos*/ -6533, 2048, -2444, /*angle*/ 0, 0, 0, /*behParam*/ (MR_BLIZZARD_STYPE_NO_CAP << 16), /*beh*/ bhvMrBlizzard), + OBJECT(/*model*/ MODEL_RED_COIN, /*pos*/ 4750, 1061, -5230, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvRedCoin), + OBJECT(/*model*/ MODEL_RED_COIN, /*pos*/ 416, 1050, -4522, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvRedCoin), + OBJECT(/*model*/ MODEL_RED_COIN, /*pos*/ -6560, 2040, -5080, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvRedCoin), + OBJECT(/*model*/ MODEL_RED_COIN, /*pos*/ -6760, 2040, -1360, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvRedCoin), + OBJECT(/*model*/ MODEL_RED_COIN, /*pos*/ -6880, 1857, 1000, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvRedCoin), + OBJECT(/*model*/ MODEL_RED_COIN, /*pos*/ -4211, 1092, -4723, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvRedCoin), + OBJECT(/*model*/ MODEL_RED_COIN, /*pos*/ -6271, 1390, 4764, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvRedCoin), + OBJECT(/*model*/ MODEL_RED_COIN, /*pos*/ -529, 1050, -5329, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvRedCoin), + OBJECT(/*model*/ MODEL_SPINDRIFT, /*pos*/ -3760, 1120, 1240, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvSpindrift), + OBJECT(/*model*/ MODEL_SPINDRIFT, /*pos*/ 3840, 1240, -5280, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvSpindrift), + OBJECT(/*model*/ MODEL_SPINDRIFT, /*pos*/ -3440, 1400, -40, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvSpindrift), + OBJECT(/*model*/ MODEL_SPINDRIFT, /*pos*/ 400, 1060, 5860, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvSpindrift), + OBJECT(/*model*/ MODEL_SPINDRIFT, /*pos*/ 880, 1080, 4860, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvSpindrift), + OBJECT(/*model*/ MODEL_SPINDRIFT, /*pos*/ 1400, 1080, 3860, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvSpindrift), + OBJECT(/*model*/ MODEL_SPINDRIFT, /*pos*/ 3400, 1660, -2920, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvSpindrift), + OBJECT(/*model*/ MODEL_SPINDRIFT, /*pos*/ -3171, 1075, -4765, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvSpindrift), + OBJECT(/*model*/ MODEL_SPINDRIFT, /*pos*/ -4241, 1009, -3834, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvSpindrift), + OBJECT(/*model*/ MODEL_EXCLAMATION_BOX, /*pos*/ -5450, 1300, 5900, /*angle*/ 0, 0, 0, /*behParam*/ (EXCLAMATION_BOX_BP_KOOPA_SHELL << 16), /*beh*/ bhvExclamationBox), + OBJECT(/*model*/ MODEL_AMP, /*pos*/ 4060, 900, -2940, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvCirclingAmp), + OBJECT(/*model*/ MODEL_SPINDRIFT, /*pos*/ -4096, 1125, 3062, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvSpindrift), + OBJECT(/*model*/ MODEL_SPINDRIFT, /*pos*/ -4536, 1125, 3782, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvSpindrift), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ -660, 2120, 1340, /*angle*/ 0, 65, 0, /*behParam*/ ((COIN_FORMATION_FLAG_NONE) << 16), /*beh*/ bhvCoinFormation), + OBJECT(/*model*/ MODEL_YELLOW_COIN, /*pos*/ -1520, 1040, 940, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvYellowCoin), + OBJECT(/*model*/ MODEL_YELLOW_COIN, /*pos*/ -1340, 1280, 1020, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvYellowCoin), + OBJECT(/*model*/ MODEL_YELLOW_COIN, /*pos*/ -1180, 1520, 1120, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvYellowCoin), + OBJECT(/*model*/ MODEL_WOODEN_SIGNPOST, /*pos*/ -835, 1125, -3856, /*angle*/ 0, 295, 0, /*behParam*/ (DIALOG_061 << 16), /*beh*/ bhvMessagePanel), + OBJECT(/*model*/ MODEL_WOODEN_SIGNPOST, /*pos*/ -5050, 1020, 6026, /*angle*/ 0, 180, 0, /*behParam*/ (DIALOG_016 << 16), /*beh*/ bhvMessagePanel), + OBJECT(/*model*/ MODEL_FLYGUY, /*pos*/ 2766, 1522, -3633, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvFlyGuy), + OBJECT(/*model*/ MODEL_WOODEN_SIGNPOST, /*pos*/ -3600, 1024, -800, /*angle*/ 0, 135, 0, /*behParam*/ (DIALOG_148 << 16), /*beh*/ bhvMessagePanel), + OBJECT(/*model*/ MODEL_YELLOW_COIN, /*pos*/ 2440, 1024, 4840, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvMoneybagHidden), + OBJECT(/*model*/ MODEL_YELLOW_COIN, /*pos*/ -2400, 1177, -4200, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvMoneybagHidden), + OBJECT(/*model*/ MODEL_EXCLAMATION_BOX, /*pos*/ -3380, 1360, -4140, /*angle*/ 0, 0, 0, /*behParam*/ (EXCLAMATION_BOX_BP_1UP_RUNNING_AWAY << 16), /*beh*/ bhvExclamationBox), + OBJECT(/*model*/ MODEL_EXCLAMATION_BOX, /*pos*/ -4700, 1300, 5850, /*angle*/ 0, 0, 0, /*behParam*/ (EXCLAMATION_BOX_BP_STAR_4 << 16), /*beh*/ bhvExclamationBox), + OBJECT(/*model*/ MODEL_YELLOW_COIN, /*pos*/ 2909, 1024, 4245, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvOneCoin), + OBJECT(/*model*/ MODEL_YELLOW_COIN, /*pos*/ 3418, 1024, 3554, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvOneCoin), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ 0, 5420, 0, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvHidden1upInPoleSpawner), + // Special objects + OBJECT(/*model*/ MODEL_CCM_SNOW_TREE, /*pos*/ 5395, 1054, -5443, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvTree), + OBJECT(/*model*/ MODEL_CCM_SNOW_TREE, /*pos*/ 0, 4864, 0, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvTree), + OBJECT(/*model*/ MODEL_CCM_SNOW_TREE, /*pos*/ 5666, 1024, -3341, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvTree), + OBJECT(/*model*/ MODEL_CCM_SNOW_TREE, /*pos*/ 1919, 1024, -4759, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvTree), + OBJECT(/*model*/ MODEL_CCM_SNOW_TREE, /*pos*/ 3645, 1024, -5889, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvTree), + OBJECT(/*model*/ MODEL_CCM_SNOW_TREE, /*pos*/ 1658, 1536, -3605, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvTree), + OBJECT(/*model*/ MODEL_CCM_SNOW_TREE, /*pos*/ -3769, 1024, -1197, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvTree), + OBJECT(/*model*/ MODEL_CCM_SNOW_TREE, /*pos*/ -2745, 1024, -582, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvTree), + OBJECT(/*model*/ MODEL_CCM_SNOW_TREE, /*pos*/ 1766, 2816, -942, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvTree), + RETURN(), +}; + +static const LevelScript script_sl_area_2_macro_objects[] = { + // Macro objects + OBJECT(/*model*/ MODEL_YELLOW_COIN, /*pos*/ 1740, 0, 900, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvOneCoin), + OBJECT(/*model*/ MODEL_YELLOW_COIN, /*pos*/ 1440, 0, 900, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvOneCoin), + OBJECT(/*model*/ MODEL_YELLOW_COIN, /*pos*/ 1140, 0, 900, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvOneCoin), + OBJECT(/*model*/ MODEL_GOOMBA, /*pos*/ 1760, 0, 200, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvGoomba), + OBJECT(/*model*/ MODEL_SPINDRIFT, /*pos*/ 1600, 80, -800, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvSpindrift), + OBJECT(/*model*/ MODEL_EXCLAMATION_BOX, /*pos*/ 1660, 300, -1720, /*angle*/ 0, 0, 0, /*behParam*/ (EXCLAMATION_BOX_BP_VANISH_CAP << 16), /*beh*/ bhvExclamationBox), + OBJECT(/*model*/ MODEL_EXCLAMATION_BOX, /*pos*/ -720, 300, -1740, /*angle*/ 0, 0, 0, /*behParam*/ (EXCLAMATION_BOX_BP_COINS_3 << 16), /*beh*/ bhvExclamationBox), + OBJECT(/*model*/ MODEL_BOBOMB_BUDDY, /*pos*/ -1400, 0, -1740, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvBobombBuddyOpensCannon), + OBJECT(/*model*/ MODEL_GOOMBA, /*pos*/ -20, 0, 960, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvGoomba), + OBJECT(/*model*/ MODEL_GOOMBA, /*pos*/ 320, 0, -1220, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvGoomba), + OBJECT(/*model*/ MODEL_SPINDRIFT, /*pos*/ -860, 40, 2040, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvSpindrift), + OBJECT(/*model*/ MODEL_SPINDRIFT, /*pos*/ 800, 60, 2000, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvSpindrift), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ 1500, 0, 500, /*angle*/ 0, 90, 0, /*behParam*/ ((COIN_FORMATION_FLAG_NONE ) << 16), /*beh*/ bhvCoinFormation), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ 1500, 100, 500, /*angle*/ 0, 90, 0, /*behParam*/ ((COIN_FORMATION_FLAG_FLYING) << 16), /*beh*/ bhvCoinFormation), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ 1500, 200, 500, /*angle*/ 0, 90, 0, /*behParam*/ ((COIN_FORMATION_FLAG_FLYING) << 16), /*beh*/ bhvCoinFormation), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ 1500, 300, 500, /*angle*/ 0, 90, 0, /*behParam*/ ((COIN_FORMATION_FLAG_FLYING) << 16), /*beh*/ bhvCoinFormation), + OBJECT(/*model*/ MODEL_1UP, /*pos*/ 1700, 20, -100, /*angle*/ 0, 0, 0, /*behParam*/ (MUSHROOM_BP_REQUIRES_NONE << 16), /*beh*/ bhv1Up), + OBJECT(/*model*/ MODEL_EXCLAMATION_BOX, /*pos*/ -120, 300, -1740, /*angle*/ 0, 0, 0, /*behParam*/ (EXCLAMATION_BOX_BP_1UP_RUNNING_AWAY << 16), /*beh*/ bhvExclamationBox), + RETURN(), +}; + +static const LevelScript script_sl_area_1_objects_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), RETURN(), }; -static const LevelScript script_func_local_2[] = { +static const LevelScript script_sl_area_1_objects_2[] = { OBJECT(/*model*/ MODEL_NONE, /*pos*/ 977, 1024, 2075, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvSnowMoundSpawn), RETURN(), }; -static const LevelScript script_func_local_3[] = { +static const LevelScript script_sl_area_1_objects_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), @@ -37,7 +123,7 @@ static const LevelScript script_func_local_3[] = { RETURN(), }; -static const LevelScript script_func_local_4[] = { +static const LevelScript script_sl_area_2_objects_1[] = { OBJECT_WITH_ACTS(/*model*/ MODEL_STAR, /*pos*/ 0, 500, 1000, /*angle*/ 0, 0, 0, /*behParam*/ 0x05000000, /*beh*/ bhvStar, /*acts*/ ALL_ACTS), RETURN(), }; @@ -75,13 +161,13 @@ const LevelScript level_sl_entry[] = { 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), - JUMP_LINK(script_func_local_1), - JUMP_LINK(script_func_local_2), - JUMP_LINK(script_func_local_3), + JUMP_LINK(script_sl_area_1_objects_1), + JUMP_LINK(script_sl_area_1_objects_2), + JUMP_LINK(script_sl_area_1_objects_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), TERRAIN(/*terrainData*/ sl_seg7_area_1_collision), - MACRO_OBJECTS(/*objList*/ sl_seg7_area_1_macro_objs), + JUMP_LINK(script_sl_area_1_macro_objects), SET_BACKGROUND_MUSIC(/*settingsPreset*/ 0x0000, /*seq*/ SEQ_LEVEL_SNOW), TERRAIN_TYPE(/*terrainType*/ TERRAIN_SNOW), END_AREA(), @@ -91,11 +177,11 @@ const LevelScript level_sl_entry[] = { 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), - JUMP_LINK(script_func_local_4), + JUMP_LINK(script_sl_area_2_objects_1), 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), TERRAIN(/*terrainData*/ sl_seg7_area_2_collision), - MACRO_OBJECTS(/*objList*/ sl_seg7_area_2_macro_objs), + JUMP_LINK(script_sl_area_2_macro_objects), SET_BACKGROUND_MUSIC(/*settingsPreset*/ 0x0004, /*seq*/ SEQ_LEVEL_UNDERGROUND), TERRAIN_TYPE(/*terrainType*/ TERRAIN_SNOW), END_AREA(), diff --git a/levels/ssl/areas/1/collision.inc.c b/levels/ssl/areas/1/collision.inc.c index 64e77cf65..abc6336ed 100644 --- a/levels/ssl/areas/1/collision.inc.c +++ b/levels/ssl/areas/1/collision.inc.c @@ -1553,14 +1553,6 @@ const Collision ssl_seg7_area_1_collision[] = { COL_TRI(478, 479, 480), COL_TRI(482, 483, 484), COL_TRI_STOP(), - COL_SPECIAL_INIT(7), - SPECIAL_OBJECT_WITH_YAW(/*preset*/ special_null_start, /*pos*/ 653, 38, 6566, /*yaw*/ 64), // unused, probably an early way to set initial position - SPECIAL_OBJECT_WITH_YAW(/*preset*/ special_level_geo_03, /*pos*/ 5760, 0, 5751, /*yaw*/ 0), - SPECIAL_OBJECT_WITH_YAW(/*preset*/ special_level_geo_03, /*pos*/ -3583, 0, 2935, /*yaw*/ 0), - SPECIAL_OBJECT_WITH_YAW(/*preset*/ special_level_geo_03, /*pos*/ -511, 0, 2935, /*yaw*/ 0), - SPECIAL_OBJECT_WITH_YAW(/*preset*/ special_level_geo_03, /*pos*/ 1024, 0, 3822, /*yaw*/ 0), - SPECIAL_OBJECT_WITH_YAW(/*preset*/ special_level_geo_03, /*pos*/ 3072, 0, 375, /*yaw*/ 0), - SPECIAL_OBJECT(/*preset*/ special_palm_tree, /*pos*/ -5989, 0, -4850), COL_WATER_BOX_INIT(3), COL_WATER_BOX(51, 1024, -7065, 7578, -716, -50), COL_WATER_BOX(52, -3993, -7065, 1024, -4197, -50), diff --git a/levels/ssl/areas/1/macro.inc.c b/levels/ssl/areas/1/macro.inc.c deleted file mode 100644 index 79def1eea..000000000 --- a/levels/ssl/areas/1/macro.inc.c +++ /dev/null @@ -1,50 +0,0 @@ -// 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_END(), -}; diff --git a/levels/ssl/areas/2/collision.inc.c b/levels/ssl/areas/2/collision.inc.c index 2a960a73b..c5ccb2adb 100644 --- a/levels/ssl/areas/2/collision.inc.c +++ b/levels/ssl/areas/2/collision.inc.c @@ -2654,11 +2654,6 @@ const Collision ssl_seg7_area_2_collision[] = { COL_TRI(359, 419, 416), COL_TRI(359, 420, 419), COL_TRI_STOP(), - COL_SPECIAL_INIT(4), - SPECIAL_OBJECT_WITH_YAW(/*preset*/ special_null_start, /*pos*/ 0, 0, 6451, /*yaw*/ 128), // unused, probably an early way to set initial position - SPECIAL_OBJECT_WITH_YAW(/*preset*/ special_level_geo_04, /*pos*/ 1741, -101, 1843, /*yaw*/ 0), - SPECIAL_OBJECT_WITH_YAW(/*preset*/ special_level_geo_04, /*pos*/ 0, -101, 528, /*yaw*/ 0), - SPECIAL_OBJECT_WITH_YAW(/*preset*/ special_level_geo_04, /*pos*/ -1740, -101, 1843, /*yaw*/ 0), COL_END(), }; diff --git a/levels/ssl/areas/2/macro.inc.c b/levels/ssl/areas/2/macro.inc.c deleted file mode 100644 index 86d06d6ce..000000000 --- a/levels/ssl/areas/2/macro.inc.c +++ /dev/null @@ -1,54 +0,0 @@ -// 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_END(), -}; diff --git a/levels/ssl/areas/3/macro.inc.c b/levels/ssl/areas/3/macro.inc.c deleted file mode 100644 index 81ba34028..000000000 --- a/levels/ssl/areas/3/macro.inc.c +++ /dev/null @@ -1,4 +0,0 @@ -// 0x07027ECC - 0x07027ECE -const MacroObject ssl_seg7_area_3_macro_objs[] = { - MACRO_OBJECT_END(), -}; diff --git a/levels/ssl/header.h b/levels/ssl/header.h index cf1b0c858..3634fcb0d 100644 --- a/levels/ssl/header.h +++ b/levels/ssl/header.h @@ -35,7 +35,6 @@ extern const Gfx ssl_seg7_dl_0700BD00[]; extern const Gfx ssl_seg7_dl_0700BF18[]; extern const Gfx ssl_seg7_dl_0700FCE0[]; extern const Collision ssl_seg7_area_1_collision[]; -extern const MacroObject ssl_seg7_area_1_macro_objs[]; extern const Collision ssl_seg7_collision_pyramid_top[]; extern const Collision ssl_seg7_collision_tox_box[]; extern const struct MovtexQuadCollection ssl_movtex_puddle_water[]; @@ -62,8 +61,6 @@ extern const Gfx ssl_seg7_dl_070233A8[]; extern const Gfx ssl_seg7_dl_070235C0[]; extern const Collision ssl_seg7_area_2_collision[]; extern const Collision ssl_seg7_area_3_collision[]; -extern const MacroObject ssl_seg7_area_2_macro_objs[]; -extern const MacroObject ssl_seg7_area_3_macro_objs[]; extern const Collision ssl_seg7_collision_grindel[]; extern const Collision ssl_seg7_collision_spindel[]; extern const Collision ssl_seg7_collision_0702808C[]; diff --git a/levels/ssl/leveldata.c b/levels/ssl/leveldata.c index 6f7aa0688..00e3ee297 100644 --- a/levels/ssl/leveldata.c +++ b/levels/ssl/leveldata.c @@ -1,12 +1,8 @@ #include #include -#include "dialog_ids.h" -#include "level_misc_macros.h" #include "macros.h" -#include "macro_preset_names.h" #include "moving_texture_macros.h" -#include "special_preset_names.h" #include "surface_terrains.h" #include "textures.h" #include "types.h" @@ -25,7 +21,6 @@ #include "levels/ssl/pyramid_top/model.inc.c" #include "levels/ssl/tox_box/model.inc.c" #include "levels/ssl/areas/1/collision.inc.c" -#include "levels/ssl/areas/1/macro.inc.c" #include "levels/ssl/pyramid_top/collision.inc.c" #include "levels/ssl/tox_box/collision.inc.c" #include "levels/ssl/areas/1/movtext.inc.c" @@ -40,8 +35,6 @@ #include "levels/ssl/pyramid_elevator/model.inc.c" #include "levels/ssl/areas/2/collision.inc.c" #include "levels/ssl/areas/3/collision.inc.c" -#include "levels/ssl/areas/2/macro.inc.c" -#include "levels/ssl/areas/3/macro.inc.c" #include "levels/ssl/grindel/collision.inc.c" #include "levels/ssl/spindel/collision.inc.c" #include "levels/ssl/moving_pyramid_wall/collision.inc.c" diff --git a/levels/ssl/script.c b/levels/ssl/script.c index 05725d14f..edd9df7c5 100644 --- a/levels/ssl/script.c +++ b/levels/ssl/script.c @@ -3,6 +3,7 @@ #include "behavior_data.h" #include "model_ids.h" #include "seq_ids.h" +#include "dialog_ids.h" #include "segment_symbols.h" #include "level_commands.h" @@ -15,12 +16,130 @@ #include "make_const_nonconst.h" #include "levels/ssl/header.h" -static const LevelScript script_func_local_1[] = { + +static const LevelScript script_ssl_area_1_macro_objects[] = { + // Macro objects + OBJECT(/*model*/ MODEL_GOOMBA, /*pos*/ 6068, 51, 2800, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvGoomba), + OBJECT(/*model*/ MODEL_GOOMBA, /*pos*/ 5535, 51, 3377, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvGoomba), + OBJECT(/*model*/ MODEL_GOOMBA, /*pos*/ 5980, 51, 3911, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvGoomba), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ 4602, 40, 4622, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvPokey), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ 5057, 143, 256, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvPokey), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ -6858, 8, -3711, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvPokey), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ -5372, 64, 3083, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvPokey), + OBJECT(/*model*/ MODEL_BREAKABLE_BOX, /*pos*/ 5900, 51, 4400, /*angle*/ 0, 0, 0, /*behParam*/ (BREAKABLE_BOX_BP_NO_COINS << 16), /*beh*/ bhvBreakableBox), + OBJECT(/*model*/ MODEL_BREAKABLE_BOX, /*pos*/ 5900, 51, 2311, /*angle*/ 0, 0, 0, /*behParam*/ (BREAKABLE_BOX_BP_NO_COINS << 16), /*beh*/ bhvBreakableBox), + OBJECT(/*model*/ MODEL_BOBOMB_BUDDY, /*pos*/ -5990, 0, -3871, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvBobombBuddyOpensCannon), + OBJECT(/*model*/ MODEL_YELLOW_COIN, /*pos*/ -5869, 1200, -2535, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvYellowCoin), + OBJECT(/*model*/ MODEL_YELLOW_COIN, /*pos*/ -5896, 1200, 773, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvYellowCoin), + OBJECT(/*model*/ MODEL_YELLOW_COIN, /*pos*/ 1800, 1200, 800, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvYellowCoin), + OBJECT(/*model*/ MODEL_YELLOW_COIN, /*pos*/ 1805, 1200, -2536, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvYellowCoin), + OBJECT(/*model*/ MODEL_EXCLAMATION_BOX, /*pos*/ 6900, 350, -5400, /*angle*/ 0, 0, 0, /*behParam*/ (EXCLAMATION_BOX_BP_WING_CAP << 16), /*beh*/ bhvExclamationBox), + OBJECT(/*model*/ MODEL_EXCLAMATION_BOX, /*pos*/ -3000, 500, 800, /*angle*/ 0, 0, 0, /*behParam*/ (EXCLAMATION_BOX_BP_WING_CAP << 16), /*beh*/ bhvExclamationBox), + OBJECT(/*model*/ MODEL_DL_CANNON_LID, /*pos*/ 6863, 0, -6860, /*angle*/ 0, 0, 0, /*behParam*/ (0xC0 << 16), /*beh*/ bhvCannonClosed), + OBJECT(/*model*/ MODEL_BREAKABLE_BOX, /*pos*/ 5900, 50, 3440, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvBreakableBoxSmall), + OBJECT(/*model*/ MODEL_RED_COIN, /*pos*/ -4500, 1500, -3500, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvRedCoin), + OBJECT(/*model*/ MODEL_RED_COIN, /*pos*/ -4500, 1500, 1500, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvRedCoin), + OBJECT(/*model*/ MODEL_RED_COIN, /*pos*/ 500, 1500, -3500, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvRedCoin), + OBJECT(/*model*/ MODEL_RED_COIN, /*pos*/ 500, 1500, 1500, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvRedCoin), + OBJECT(/*model*/ MODEL_RED_COIN, /*pos*/ 3380, 10, -4900, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvRedCoin), + OBJECT(/*model*/ MODEL_RED_COIN, /*pos*/ -5270, -170, -6780, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvRedCoin), + OBJECT(/*model*/ MODEL_RED_COIN, /*pos*/ -7450, 10, 7560, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvRedCoin), + OBJECT(/*model*/ MODEL_RED_COIN, /*pos*/ 5900, 70, 2311, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvRedCoin), + OBJECT(/*model*/ MODEL_EXCLAMATION_BOX, /*pos*/ 5840, 940, 2500, /*angle*/ 0, 0, 0, /*behParam*/ (EXCLAMATION_BOX_BP_KOOPA_SHELL << 16), /*beh*/ bhvExclamationBox), + OBJECT(/*model*/ MODEL_EXCLAMATION_BOX, /*pos*/ 5860, 940, 4180, /*angle*/ 0, 0, 0, /*behParam*/ (EXCLAMATION_BOX_BP_WING_CAP << 16), /*beh*/ bhvExclamationBox), + OBJECT(/*model*/ MODEL_WOODEN_SIGNPOST, /*pos*/ 5702, 614, 2974, /*angle*/ 0, 0, 0, /*behParam*/ (DIALOG_016 << 16), /*beh*/ bhvMessagePanel), + OBJECT(/*model*/ MODEL_WOODEN_SIGNPOST, /*pos*/ -3260, 256, 800, /*angle*/ 0, 0, 0, /*behParam*/ (DIALOG_032 << 16), /*beh*/ bhvMessagePanel), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ -6000, 600, -4800, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvHidden1upInPoleSpawner), + OBJECT(/*model*/ MODEL_1UP, /*pos*/ -250, 0, 4200, /*angle*/ 0, 0, 0, /*behParam*/ (MUSHROOM_BP_REQUIRES_NONE << 16), /*beh*/ bhv1Up), + OBJECT(/*model*/ MODEL_FLYGUY, /*pos*/ 3500, 149, 5600, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvFlyGuy), + OBJECT(/*model*/ MODEL_BLACK_BOBOMB, /*pos*/ 3800, 0, 6000, /*angle*/ 0, 0, 0, /*behParam*/ (BOBOMB_BP_STYPE_GENERIC << 16), /*beh*/ bhvBobomb), + OBJECT(/*model*/ MODEL_BLACK_BOBOMB, /*pos*/ 1750, 0, 6450, /*angle*/ 0, 0, 0, /*behParam*/ (BOBOMB_BP_STYPE_GENERIC << 16), /*beh*/ bhvBobomb), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ -5920, 200, -920, /*angle*/ 0, 0, 0, /*behParam*/ ((COIN_FORMATION_FLAG_NONE) << 16), /*beh*/ bhvCoinFormation), + OBJECT(/*model*/ MODEL_BOWLING_BALL, /*pos*/ -386, 512, -2228, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvFireSpitter), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ -2290, 787, -2180, /*angle*/ 0, 90, 0, /*behParam*/ ((COIN_FORMATION_FLAG_NONE) << 16), /*beh*/ bhvCoinFormation), + OBJECT(/*model*/ MODEL_FLYGUY, /*pos*/ 1440, 800, -960, /*angle*/ 0, 0, 0, /*behParam*/ (FLY_GUY_BP_SHOOTS_FIRE << 16), /*beh*/ bhvFlyGuy), + OBJECT(/*model*/ MODEL_FLYGUY, /*pos*/ -3400, 1160, -1120, /*angle*/ 0, 0, 0, /*behParam*/ (FLY_GUY_BP_SHOOTS_FIRE << 16), /*beh*/ bhvFlyGuy), + OBJECT(/*model*/ MODEL_BOWLING_BALL, /*pos*/ -5125, 135, -3138, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvFireSpitter), + OBJECT(/*model*/ MODEL_BREAKABLE_BOX, /*pos*/ 1120, 0, 6480, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvJumpingBox), + OBJECT(/*model*/ MODEL_1UP, /*pos*/ 5757, 230, 5761, /*angle*/ 0, 0, 0, /*behParam*/ (MUSHROOM_BP_REQUIRES_NONE << 16), /*beh*/ bhv1Up), + OBJECT(/*model*/ MODEL_BREAKABLE_BOX, /*pos*/ -5200, 0, 1700, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvJumpingBox), + OBJECT(/*model*/ MODEL_EXCLAMATION_BOX, /*pos*/ -1200, 500, 800, /*angle*/ 0, 0, 0, /*behParam*/ (EXCLAMATION_BOX_BP_1UP_RUNNING_AWAY << 16), /*beh*/ bhvExclamationBox), + OBJECT(/*model*/ MODEL_WOODEN_SIGNPOST, /*pos*/ 5130, 26, -370, /*angle*/ 0, 0, 0, /*behParam*/ (DIALOG_157 << 16), /*beh*/ bhvMessagePanel), + // Special objects + OBJECT(/*model*/ MODEL_LEVEL_GEOMETRY_03, /*pos*/ 5760, 0, 5751, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvStaticObject), + OBJECT(/*model*/ MODEL_LEVEL_GEOMETRY_03, /*pos*/ -3583, 0, 2935, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvStaticObject), + OBJECT(/*model*/ MODEL_LEVEL_GEOMETRY_03, /*pos*/ -511, 0, 2935, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvStaticObject), + OBJECT(/*model*/ MODEL_LEVEL_GEOMETRY_03, /*pos*/ 1024, 0, 3822, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvStaticObject), + OBJECT(/*model*/ MODEL_LEVEL_GEOMETRY_03, /*pos*/ 3072, 0, 375, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvStaticObject), + OBJECT(/*model*/ MODEL_SSL_PALM_TREE, /*pos*/ -5989, 0, -4850, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvTree), + RETURN(), +}; + +static const LevelScript script_ssl_area_2_macro_objects[] = { + // Macro objects + OBJECT(/*model*/ MODEL_GOOMBA, /*pos*/ 3263, 778, 3157, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvGoomba), + OBJECT(/*model*/ MODEL_WOODEN_SIGNPOST, /*pos*/ 2196, 640, -3329, /*angle*/ 0, 270, 0, /*behParam*/ (DIALOG_043 << 16), /*beh*/ bhvMessagePanel), + OBJECT(/*model*/ MODEL_EXCLAMATION_BOX, /*pos*/ -3536, 252, -3705, /*angle*/ 0, 0, 0, /*behParam*/ (EXCLAMATION_BOX_BP_1UP_WALKING << 16), /*beh*/ bhvExclamationBox), + OBJECT(/*model*/ MODEL_GOOMBA, /*pos*/ 3389, 0, -1978, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvGoomba), + OBJECT(/*model*/ MODEL_GOOMBA, /*pos*/ -3638, 0, 1928, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvGoomba), + OBJECT(/*model*/ MODEL_EXCLAMATION_BOX, /*pos*/ -1242, 252, -3957, /*angle*/ 0, 0, 0, /*behParam*/ (EXCLAMATION_BOX_BP_1UP_WALKING << 16), /*beh*/ bhvExclamationBox), + OBJECT(/*model*/ MODEL_YELLOW_COIN, /*pos*/ 1873, 0, -3495, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvOneCoin), + OBJECT(/*model*/ MODEL_YELLOW_COIN, /*pos*/ 1200, 0, -3495, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvOneCoin), + OBJECT(/*model*/ MODEL_AMP, /*pos*/ 3056, 736, -3267, /*angle*/ 0, 0, 0, /*behParam*/ (1 << 16), /*beh*/ bhvCirclingAmp), + OBJECT(/*model*/ MODEL_GOOMBA, /*pos*/ 3263, 652, 2200, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvGoomba), + OBJECT(/*model*/ MODEL_GOOMBA, /*pos*/ 3431, 673, -1373, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvGoomba), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ -2, 1774, 2794, /*angle*/ 0, 90, 0, /*behParam*/ ((COIN_FORMATION_FLAG_FLYING ) << 16), /*beh*/ bhvCoinFormation), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ 2694, 850, -2889, /*angle*/ 0, 0, 0, /*behParam*/ ((COIN_FORMATION_FLAG_FLYING | COIN_FORMATION_FLAG_RING ) << 16), /*beh*/ bhvCoinFormation), + OBJECT(/*model*/ MODEL_HEART, /*pos*/ -400, 1978, -2250, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvRecoveryHeart), + OBJECT(/*model*/ MODEL_YELLOW_COIN, /*pos*/ 736, 2652, -2250, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvYellowCoin), + OBJECT(/*model*/ MODEL_YELLOW_COIN, /*pos*/ 736, 2546, -2250, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvYellowCoin), + OBJECT(/*model*/ MODEL_YELLOW_COIN, /*pos*/ 1368, 3263, -2250, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvYellowCoin), + OBJECT(/*model*/ MODEL_YELLOW_COIN, /*pos*/ 1368, 3135, -2250, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvYellowCoin), + OBJECT(/*model*/ MODEL_AMP, /*pos*/ 1621, 3368, -1142, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvHomingAmp), + OBJECT(/*model*/ MODEL_AMP, /*pos*/ 1621, 3389, 478, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvHomingAmp), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ -210, 4521, -994, /*angle*/ 0, 90, 0, /*behParam*/ ((COIN_FORMATION_FLAG_NONE ) << 16), /*beh*/ bhvCoinFormation), + OBJECT(/*model*/ MODEL_GOOMBA, /*pos*/ -2100, 0, 3316, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvGoomba), + OBJECT(/*model*/ MODEL_BLUE_COIN_SWITCH, /*pos*/ -719, 0, 4772, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvBlueCoinSwitch), + OBJECT(/*model*/ MODEL_BLUE_COIN, /*pos*/ 0, 0, 2381, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvHiddenBlueCoin), + OBJECT(/*model*/ MODEL_BLUE_COIN, /*pos*/ 0, 100, 2381, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvHiddenBlueCoin), + OBJECT(/*model*/ MODEL_BLUE_COIN, /*pos*/ 0, 200, 2381, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvHiddenBlueCoin), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ 2064, -81, -1901, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvHidden1upTrigger), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ 2569, -81, -2022, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvHidden1upTrigger), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ 2698, -81, -2535, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvHidden1upTrigger), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ 2698, -81, -3049, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvHidden1upTrigger), + OBJECT(/*model*/ MODEL_1UP, /*pos*/ 1940, -81, -1360, /*angle*/ 0, 0, 0, /*behParam*/ (4 << 16), /*beh*/ bhvHidden1up), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ -260, 2940, -600, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvHiddenStarTrigger), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ 260, 1967, -600, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvHiddenStarTrigger), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ -1940, 1229, -600, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvHiddenStarTrigger), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ -1940, 1229, 2320, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvHiddenStarTrigger), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ 290, 4479, -940, /*angle*/ 0, 0, 0, /*behParam*/ ((COIN_FORMATION_FLAG_FLYING | COIN_FORMATION_FLAG_VERTICAL) << 16), /*beh*/ bhvCoinFormation), + OBJECT(/*model*/ MODEL_WOODEN_SIGNPOST, /*pos*/ -3560, 0, -4065, /*angle*/ 0, 0, 0, /*behParam*/ (DIALOG_103 << 16), /*beh*/ bhvMessagePanel), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ 260, 3913, -600, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvHiddenStarTrigger), + OBJECT(/*model*/ MODEL_YELLOW_COIN, /*pos*/ -260, 2950, -600, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvYellowCoin), + OBJECT(/*model*/ MODEL_YELLOW_COIN, /*pos*/ 260, 1977, -600, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvYellowCoin), + OBJECT(/*model*/ MODEL_YELLOW_COIN, /*pos*/ -1940, 1239, -600, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvYellowCoin), + OBJECT(/*model*/ MODEL_YELLOW_COIN, /*pos*/ -1940, 1239, 2320, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvYellowCoin), + OBJECT(/*model*/ MODEL_YELLOW_COIN, /*pos*/ 260, 3923, -600, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvYellowCoin), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ 3181, 0, 3587, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvGoombaTripletSpawner), + OBJECT(/*model*/ MODEL_1UP, /*pos*/ -3350, 980, -1240, /*angle*/ 0, 0, 0, /*behParam*/ (MUSHROOM_BP_REQUIRES_NONE << 16), /*beh*/ bhv1Up), + OBJECT(/*model*/ MODEL_1UP, /*pos*/ 2870, 1050, -2640, /*angle*/ 0, 0, 0, /*behParam*/ (MUSHROOM_BP_REQUIRES_NONE << 16), /*beh*/ bhv1Up), + OBJECT(/*model*/ MODEL_YELLOW_COIN, /*pos*/ -2047, 1664, 3076, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvOneCoin), + OBJECT(/*model*/ MODEL_YELLOW_COIN, /*pos*/ -2047, 1536, 2870, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvOneCoin), + OBJECT(/*model*/ MODEL_YELLOW_COIN, /*pos*/ -1840, 1357, 3076, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvOneCoin), + OBJECT(/*model*/ MODEL_YELLOW_COIN, /*pos*/ -1840, 1408, 2870, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvOneCoin), + // Special objects + OBJECT(/*model*/ MODEL_LEVEL_GEOMETRY_04, /*pos*/ 1741, -101, 1843, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvStaticObject), + OBJECT(/*model*/ MODEL_LEVEL_GEOMETRY_04, /*pos*/ 0, -101, 528, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvStaticObject), + OBJECT(/*model*/ MODEL_LEVEL_GEOMETRY_04, /*pos*/ -1740, -101, 1843, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvStaticObject), + RETURN(), +}; + +static const LevelScript script_ssl_area_1_objects_1[] = { OBJECT(/*model*/ MODEL_SSL_PYRAMID_TOP, /*pos*/ -2047, 1536, -1023, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvPyramidTop), RETURN(), }; -static const LevelScript script_func_local_2[] = { +static const LevelScript script_ssl_area_1_objects_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), @@ -32,13 +151,13 @@ static const LevelScript script_func_local_2[] = { RETURN(), }; -static const LevelScript script_func_local_3[] = { +static const LevelScript script_ssl_area_1_objects_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), RETURN(), }; -static const LevelScript script_func_local_4[] = { +static const LevelScript script_ssl_area_2_objects_1[] = { 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), @@ -56,13 +175,13 @@ static const LevelScript script_func_local_4[] = { RETURN(), }; -static const LevelScript script_func_local_5[] = { +static const LevelScript script_ssl_area_2_objects_2[] = { 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), RETURN(), }; -static const LevelScript script_func_local_6[] = { +static const LevelScript script_ssl_area_3_objects_1[] = { OBJECT(/*model*/ MODEL_NONE, /*pos*/ 0, -1534, -3693, /*angle*/ 0, 0, 0, /*behParam*/ 0x03000000, /*beh*/ bhvEyerokBoss), RETURN(), }; @@ -103,11 +222,11 @@ const LevelScript level_ssl_entry[] = { 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), - JUMP_LINK(script_func_local_1), - JUMP_LINK(script_func_local_2), - JUMP_LINK(script_func_local_3), + JUMP_LINK(script_ssl_area_1_objects_1), + JUMP_LINK(script_ssl_area_1_objects_2), + JUMP_LINK(script_ssl_area_1_objects_3), TERRAIN(/*terrainData*/ ssl_seg7_area_1_collision), - MACRO_OBJECTS(/*objList*/ ssl_seg7_area_1_macro_objs), + JUMP_LINK(script_ssl_area_1_macro_objects), SET_BACKGROUND_MUSIC(/*settingsPreset*/ 0x0000, /*seq*/ SEQ_LEVEL_HOT), TERRAIN_TYPE(/*terrainType*/ TERRAIN_SAND), END_AREA(), @@ -123,11 +242,11 @@ const LevelScript level_ssl_entry[] = { 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), - JUMP_LINK(script_func_local_4), - JUMP_LINK(script_func_local_5), + JUMP_LINK(script_ssl_area_2_objects_1), + JUMP_LINK(script_ssl_area_2_objects_2), INSTANT_WARP(/*index*/ 3, /*destArea*/ 3, /*displace*/ 0, 0, 0), TERRAIN(/*terrainData*/ ssl_seg7_area_2_collision), - MACRO_OBJECTS(/*objList*/ ssl_seg7_area_2_macro_objs), + JUMP_LINK(script_ssl_area_2_macro_objects), SET_BACKGROUND_MUSIC(/*settingsPreset*/ 0x0004, /*seq*/ SEQ_LEVEL_UNDERGROUND), TERRAIN_TYPE(/*terrainType*/ TERRAIN_STONE), END_AREA(), @@ -135,9 +254,8 @@ const LevelScript level_ssl_entry[] = { 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), - JUMP_LINK(script_func_local_6), + JUMP_LINK(script_ssl_area_3_objects_1), TERRAIN(/*terrainData*/ ssl_seg7_area_3_collision), - MACRO_OBJECTS(/*objList*/ ssl_seg7_area_3_macro_objs), INSTANT_WARP(/*index*/ 2, /*destArea*/ 2, /*displace*/ 0, 0, 0), SET_BACKGROUND_MUSIC(/*settingsPreset*/ 0x0004, /*seq*/ SEQ_LEVEL_UNDERGROUND), TERRAIN_TYPE(/*terrainType*/ TERRAIN_STONE), diff --git a/levels/thi/areas/1/collision.inc.c b/levels/thi/areas/1/collision.inc.c index 75e146273..8b5ff796a 100644 --- a/levels/thi/areas/1/collision.inc.c +++ b/levels/thi/areas/1/collision.inc.c @@ -1255,9 +1255,6 @@ const Collision thi_seg7_area_1_collision[] = { COL_TRI(413, 414, 415), COL_TRI(412, 320, 319), COL_TRI_STOP(), - COL_SPECIAL_INIT(2), - SPECIAL_OBJECT_WITH_YAW(/*preset*/ special_null_start, /*pos*/ -7372, -2969, 7373, /*yaw*/ 106), // unused, probably an early way to set initial position - SPECIAL_OBJECT(/*preset*/ special_bubble_tree, /*pos*/ 4813, -511, 2254), COL_WATER_BOX_INIT(3), COL_WATER_BOX(0, -8191, -8191, -5119, 6246, -3071), COL_WATER_BOX(1, -4607, 4506, 6963, 8192, -3071), diff --git a/levels/thi/areas/1/macro.inc.c b/levels/thi/areas/1/macro.inc.c deleted file mode 100644 index e622e4db6..000000000 --- a/levels/thi/areas/1/macro.inc.c +++ /dev/null @@ -1,44 +0,0 @@ -// 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_END(), -}; diff --git a/levels/thi/areas/2/collision.inc.c b/levels/thi/areas/2/collision.inc.c index 71f500740..711621d58 100644 --- a/levels/thi/areas/2/collision.inc.c +++ b/levels/thi/areas/2/collision.inc.c @@ -969,10 +969,6 @@ const Collision thi_seg7_area_2_collision[] = { COL_TRI(242, 244, 148), COL_TRI(244, 25, 148), COL_TRI_STOP(), - COL_SPECIAL_INIT(3), - SPECIAL_OBJECT_WITH_YAW(/*preset*/ special_null_start, /*pos*/ -2211, -890, 2212, /*yaw*/ 106), // unused, probably an early way to set initial position - SPECIAL_OBJECT_WITH_YAW(/*preset*/ special_level_geo_03, /*pos*/ -40, -767, -4494, /*yaw*/ 0), - SPECIAL_OBJECT(/*preset*/ special_bubble_tree, /*pos*/ 1444, -153, 676), COL_WATER_BOX_INIT(3), COL_WATER_BOX(0, -2457, -2457, -1535, 1874, -921), COL_WATER_BOX(1, -1381, 1352, 2089, 2458, -921), diff --git a/levels/thi/areas/2/macro.inc.c b/levels/thi/areas/2/macro.inc.c deleted file mode 100644 index a825abe49..000000000 --- a/levels/thi/areas/2/macro.inc.c +++ /dev/null @@ -1,72 +0,0 @@ -// 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_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_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), - MACRO_OBJECT(/*preset*/ macro_tiny_goomba, /*yaw*/ 0, /*pos*/ 1822, -460, -1511), - MACRO_OBJECT(/*preset*/ macro_tiny_goomba, /*yaw*/ 0, /*pos*/ 2148, -460, -918), - MACRO_OBJECT(/*preset*/ macro_yellow_coin_2, /*yaw*/ 0, /*pos*/ -133, -491, -1481), - MACRO_OBJECT(/*preset*/ macro_yellow_coin_2, /*yaw*/ 0, /*pos*/ -1466, -70, -814), - MACRO_OBJECT(/*preset*/ macro_yellow_coin_2, /*yaw*/ 0, /*pos*/ -1466, -107, -518), - MACRO_OBJECT(/*preset*/ macro_yellow_coin_2, /*yaw*/ 0, /*pos*/ -1466, -151, -162), - MACRO_OBJECT(/*preset*/ macro_yellow_coin_2, /*yaw*/ 0, /*pos*/ 133, -491, -1496), - MACRO_OBJECT(/*preset*/ macro_box_1up, /*yaw*/ 0, /*pos*/ -1866, -400, 311), - MACRO_OBJECT(/*preset*/ macro_yellow_coin_2, /*yaw*/ 0, /*pos*/ -380, -480, 370), - MACRO_OBJECT(/*preset*/ macro_yellow_coin_2, /*yaw*/ 0, /*pos*/ -60, -480, 370), - MACRO_OBJECT(/*preset*/ macro_yellow_coin_2, /*yaw*/ 0, /*pos*/ -1171, -153, 1023), - MACRO_OBJECT(/*preset*/ macro_tiny_goomba, /*yaw*/ 0, /*pos*/ -923, 295, -614), - MACRO_OBJECT(/*preset*/ macro_tiny_goomba, /*yaw*/ 0, /*pos*/ 1466, -460, 999), - 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_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), - MACRO_OBJECT(/*preset*/ macro_hidden_star_trigger, /*yaw*/ 0, /*pos*/ 140, -153, 360), - MACRO_OBJECT(/*preset*/ macro_hidden_star_trigger, /*yaw*/ 0, /*pos*/ -1330, -900, 1945), - MACRO_OBJECT(/*preset*/ macro_hidden_star_trigger, /*yaw*/ 0, /*pos*/ 0, 1150, -450), - MACRO_OBJECT(/*preset*/ macro_hidden_star_trigger, /*yaw*/ 0, /*pos*/ -1392, 92, -633), - MACRO_OBJECT(/*preset*/ macro_fire_spitter, /*yaw*/ 0, /*pos*/ 1348, -148, 666), - MACRO_OBJECT(/*preset*/ macro_fire_spitter, /*yaw*/ 0, /*pos*/ 1733, -770, 1718), - 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_tiny_goomba, /*yaw*/ 0, /*pos*/ -2020, -890, 1720), - MACRO_OBJECT_END(), -}; diff --git a/levels/thi/areas/3/macro.inc.c b/levels/thi/areas/3/macro.inc.c deleted file mode 100644 index 0286585b0..000000000 --- a/levels/thi/areas/3/macro.inc.c +++ /dev/null @@ -1,19 +0,0 @@ -// 0x0700E190 - 0x0700E228 -const MacroObject thi_seg7_area_3_macro_objs[] = { - MACRO_OBJECT(/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ 1038, 1122, 998), - MACRO_OBJECT(/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ 1590, 1078, 160), - MACRO_OBJECT(/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ 1038, 1112, -823), - MACRO_OBJECT(/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ -238, 1122, -1319), - MACRO_OBJECT(/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ -523, 824, -500), - MACRO_OBJECT(/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ -1838, 1068, 338), - MACRO_OBJECT(/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ -240, 1500, 1040), - MACRO_OBJECT(/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ -1914, 1360, -1909), - MACRO_OBJECT(/*preset*/ macro_1up, /*yaw*/ 0, /*pos*/ -1920, 1540, -1040), - MACRO_OBJECT(/*preset*/ macro_blue_coin_switch, /*yaw*/ 0, /*pos*/ -1495, 1434, 1595), - MACRO_OBJECT(/*preset*/ macro_hidden_blue_coin, /*yaw*/ 0, /*pos*/ -540, 1500, 1240), - MACRO_OBJECT(/*preset*/ macro_hidden_blue_coin, /*yaw*/ 0, /*pos*/ -840, 1500, 1440), - MACRO_OBJECT(/*preset*/ macro_coin_line_horizontal, /*yaw*/ 45, /*pos*/ -1200, 2200, -1200), - MACRO_OBJECT(/*preset*/ macro_coin_line_horizontal, /*yaw*/ 45, /*pos*/ 1200, 2200, 1200), - MACRO_OBJECT(/*preset*/ macro_fire_spitter, /*yaw*/ 0, /*pos*/ -224, 1456, 672), - MACRO_OBJECT_END(), -}; diff --git a/levels/thi/header.h b/levels/thi/header.h index a3b7ea1a3..4a369bf90 100644 --- a/levels/thi/header.h +++ b/levels/thi/header.h @@ -28,9 +28,6 @@ extern const Gfx thi_seg7_dl_07009F58[]; extern const Collision thi_seg7_area_1_collision[]; extern const Collision thi_seg7_area_2_collision[]; extern const Collision thi_seg7_area_3_collision[]; -extern const MacroObject thi_seg7_area_1_macro_objs[]; -extern const MacroObject thi_seg7_area_2_macro_objs[]; -extern const MacroObject thi_seg7_area_3_macro_objs[]; extern const Collision thi_seg7_collision_top_trap[]; extern const Trajectory thi_seg7_trajectory_koopa[]; extern const struct MovtexQuadCollection thi_movtex_area1_water[]; diff --git a/levels/thi/leveldata.c b/levels/thi/leveldata.c index f00bbf307..65f869d72 100644 --- a/levels/thi/leveldata.c +++ b/levels/thi/leveldata.c @@ -2,11 +2,7 @@ #include "sm64.h" #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 "textures.h" -#include "dialog_ids.h" #include "make_const_nonconst.h" #include "levels/thi/texture.inc.c" @@ -25,9 +21,6 @@ #include "levels/thi/areas/1/collision.inc.c" #include "levels/thi/areas/2/collision.inc.c" #include "levels/thi/areas/3/collision.inc.c" -#include "levels/thi/areas/1/macro.inc.c" -#include "levels/thi/areas/2/macro.inc.c" -#include "levels/thi/areas/3/macro.inc.c" #include "levels/thi/areas/1/6/collision.inc.c" #include "levels/thi/areas/1/trajectory.inc.c" #include "levels/thi/areas/1/movtext.inc.c" diff --git a/levels/thi/script.c b/levels/thi/script.c index 82d371c2d..766890618 100644 --- a/levels/thi/script.c +++ b/levels/thi/script.c @@ -3,6 +3,7 @@ #include "behavior_data.h" #include "model_ids.h" #include "seq_ids.h" +#include "dialog_ids.h" #include "segment_symbols.h" #include "level_commands.h" @@ -15,22 +16,162 @@ #include "make_const_nonconst.h" #include "levels/thi/header.h" -static const LevelScript script_func_local_1[] = { + +static const LevelScript script_thi_area_1_macro_objects[] = { + // Macro objects + OBJECT(/*model*/ MODEL_DL_CANNON_LID, /*pos*/ 6656, -2832, 6964, /*angle*/ 0, 0, 0, /*behParam*/ (0x80 << 16), /*beh*/ bhvCannonClosed), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ 870, -502, 2828, /*angle*/ 0, 0, 0, /*behParam*/ ((COIN_FORMATION_FLAG_NONE) << 16), /*beh*/ bhvCoinFormation), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ 4800, -110, 2250, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvHidden1upInPoleSpawner), + OBJECT(/*model*/ MODEL_WOODEN_SIGNPOST, /*pos*/ 6728, -2559, 1561, /*angle*/ 0, 90, 0, /*behParam*/ (DIALOG_091 << 16), /*beh*/ bhvMessagePanel), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ -66, -1637, -4944, /*angle*/ 0, 90, 0, /*behParam*/ ((COIN_FORMATION_FLAG_NONE) << 16), /*beh*/ bhvCoinFormation), + OBJECT(/*model*/ MODEL_GOOMBA, /*pos*/ 7069, -1535, -4758, /*angle*/ 0, 0, 0, /*behParam*/ (GOOMBA_SIZE_HUGE << 16), /*beh*/ bhvGoomba), + OBJECT(/*model*/ MODEL_GOOMBA, /*pos*/ 7177, -1535, -3522, /*angle*/ 0, 0, 0, /*behParam*/ (GOOMBA_SIZE_HUGE << 16), /*beh*/ bhvGoomba), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ 5711, -1677, -2944, /*angle*/ 0, 0, 0, /*behParam*/ ((COIN_FORMATION_FLAG_NONE) << 16), /*beh*/ bhvCoinFormation), + OBJECT(/*model*/ MODEL_YELLOW_COIN, /*pos*/ -1200, -1540, 1150, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvOneCoin), + OBJECT(/*model*/ MODEL_YELLOW_COIN, /*pos*/ -250, -1540, 1150, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvOneCoin), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ -1200, -1540, 1150, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvHidden1upTrigger), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ -250, -1550, 1150, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvHidden1upTrigger), + OBJECT(/*model*/ MODEL_1UP, /*pos*/ -777, -1544, 1233, /*angle*/ 0, 0, 0, /*behParam*/ (2 << 16), /*beh*/ bhvHidden1up), + OBJECT(/*model*/ MODEL_GOOMBA, /*pos*/ 4600, -1544, 3455, /*angle*/ 0, 0, 0, /*behParam*/ (GOOMBA_SIZE_HUGE << 16), /*beh*/ bhvGoomba), + OBJECT(/*model*/ MODEL_GOOMBA, /*pos*/ 3444, -522, 3011, /*angle*/ 0, 0, 0, /*behParam*/ (GOOMBA_SIZE_HUGE << 16), /*beh*/ bhvGoomba), + OBJECT(/*model*/ MODEL_GOOMBA, /*pos*/ -3622, -511, 3100, /*angle*/ 0, 0, 0, /*behParam*/ (GOOMBA_SIZE_HUGE << 16), /*beh*/ bhvGoomba), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ -4911, -395, -1433, /*angle*/ 0, 0, 0, /*behParam*/ ((COIN_FORMATION_FLAG_NONE) << 16), /*beh*/ bhvCoinFormation), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ 199, 2233, 433, /*angle*/ 0, 90, 0, /*behParam*/ ((COIN_FORMATION_FLAG_NONE) << 16), /*beh*/ bhvCoinFormation), + OBJECT(/*model*/ MODEL_GOOMBA, /*pos*/ -3177, 1255, -2366, /*angle*/ 0, 0, 0, /*behParam*/ (GOOMBA_SIZE_HUGE << 16), /*beh*/ bhvGoomba), + OBJECT(/*model*/ MODEL_CHUCKYA, /*pos*/ -1800, 2233, -322, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvChuckya), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ -6222, -3400, -1455, /*angle*/ 0, 0, 0, /*behParam*/ (FISH_SPAWNER_BP_FEW_BLUE << 16), /*beh*/ bhvFishSpawner), + OBJECT(/*model*/ MODEL_ENEMY_LAKITU, /*pos*/ -1905, -2223, 6541, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvEnemyLakitu), + OBJECT(/*model*/ MODEL_FLYGUY, /*pos*/ -1911, 0, -5822, /*angle*/ 0, 0, 0, /*behParam*/ (FLY_GUY_BP_SHOOTS_FIRE << 16), /*beh*/ bhvFlyGuy), + OBJECT(/*model*/ MODEL_FLYGUY, /*pos*/ 6493, -2186, 5189, /*angle*/ 0, 0, 0, /*behParam*/ (FLY_GUY_BP_SHOOTS_FIRE << 16), /*beh*/ bhvFlyGuy), + OBJECT(/*model*/ MODEL_1UP, /*pos*/ -6000, -3566, -1320, /*angle*/ 0, 0, 0, /*behParam*/ (MUSHROOM_BP_REQUIRES_NONE << 16), /*beh*/ bhv1Up), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ -6550, -3450, 4100, /*angle*/ 0, 0, 0, /*behParam*/ (FISH_SPAWNER_BP_FEW_BLUE << 16), /*beh*/ bhvFishSpawner), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ -1750, -3450, 7800, /*angle*/ 0, 0, 0, /*behParam*/ (FISH_SPAWNER_BP_FEW_BLUE << 16), /*beh*/ bhvFishSpawner), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ 1950, -3500, 7600, /*angle*/ 0, 0, 0, /*behParam*/ (FISH_SPAWNER_BP_FEW_BLUE << 16), /*beh*/ bhvFishSpawner), + OBJECT(/*model*/ MODEL_EXCLAMATION_BOX, /*pos*/ -5712, -2190, 1100, /*angle*/ 0, 0, 0, /*behParam*/ (EXCLAMATION_BOX_BP_1UP_RUNNING_AWAY << 16), /*beh*/ bhvExclamationBox), + OBJECT(/*model*/ MODEL_EXCLAMATION_BOX, /*pos*/ 6022, -1722, -633, /*angle*/ 0, 0, 0, /*behParam*/ (EXCLAMATION_BOX_BP_1UP_RUNNING_AWAY << 16), /*beh*/ bhvExclamationBox), + OBJECT(/*model*/ MODEL_WOODEN_POST, /*pos*/ -5822, -2969, 5822, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvWoodenPost), + OBJECT(/*model*/ MODEL_WOODEN_SIGNPOST, /*pos*/ -886, -2559, 6655, /*angle*/ 0, 90, 0, /*behParam*/ (DIALOG_165 << 16), /*beh*/ bhvMessagePanel), + OBJECT(/*model*/ MODEL_WOODEN_SIGNPOST, /*pos*/ -2370, -511, 2320, /*angle*/ 0, 0, 0, /*behParam*/ (DIALOG_166 << 16), /*beh*/ bhvMessagePanel), + OBJECT(/*model*/ MODEL_EXCLAMATION_BOX, /*pos*/ 2600, 3500, -2400, /*angle*/ 0, 0, 0, /*behParam*/ (EXCLAMATION_BOX_BP_STAR_2 << 16), /*beh*/ bhvExclamationBox), + OBJECT(/*model*/ MODEL_GOOMBA, /*pos*/ -3180, -511, 2080, /*angle*/ 0, 0, 0, /*behParam*/ (GOOMBA_SIZE_HUGE << 16), /*beh*/ bhvGoomba), + OBJECT(/*model*/ MODEL_FLYGUY, /*pos*/ -300, -2340, 3940, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvFlyGuy), + OBJECT(/*model*/ MODEL_WOODEN_POST, /*pos*/ -520, -2560, 6660, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvWoodenPost), + OBJECT(/*model*/ MODEL_KOOPA_WITH_SHELL, /*pos*/ -800, -2236, 3080, /*angle*/ 0, 0, 0, /*behParam*/ (KOOPA_BP_NORMAL << 16), /*beh*/ bhvKoopa), + OBJECT(/*model*/ MODEL_BUTTERFLY, /*pos*/ -3111, -511, 2400, /*angle*/ 0, 0, 0, /*behParam*/ (TRIPLET_BUTTERFLY_BP_0 << 16), /*beh*/ bhvTripletButterfly), + OBJECT(/*model*/ MODEL_BUTTERFLY, /*pos*/ 4844, -533, 2266, /*angle*/ 0, 0, 0, /*behParam*/ (TRIPLET_BUTTERFLY_BP_0 << 16), /*beh*/ bhvTripletButterfly), + // Special objects + OBJECT(/*model*/ MODEL_BOB_BUBBLY_TREE, /*pos*/ 4813, -511, 2254, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvTree), RETURN(), }; -static const LevelScript script_func_local_2[] = { +static const LevelScript script_thi_area_2_macro_objects[] = { + // Macro objects + OBJECT(/*model*/ MODEL_BOBOMB_BUDDY, /*pos*/ 1902, -767, 1318, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvBobombBuddyOpensCannon), + OBJECT(/*model*/ MODEL_PURPLE_SWITCH, /*pos*/ -1380, -766, -1770, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvFloorSwitchHiddenObjects), + OBJECT(/*model*/ MODEL_BREAKABLE_BOX, /*pos*/ -1140, -970, -1920, /*angle*/ 0, 0, 0, /*behParam*/ (BREAKABLE_BOX_BP_NO_COINS << 16), /*beh*/ bhvHiddenObject), + OBJECT(/*model*/ MODEL_BREAKABLE_BOX, /*pos*/ -1140, -970, -1720, /*angle*/ 0, 0, 0, /*behParam*/ (BREAKABLE_BOX_BP_NO_COINS << 16), /*beh*/ bhvHiddenObject), + OBJECT(/*model*/ MODEL_BREAKABLE_BOX, /*pos*/ -940, -970, -1920, /*angle*/ 0, 0, 0, /*behParam*/ (BREAKABLE_BOX_BP_NO_COINS << 16), /*beh*/ bhvHiddenObject), + OBJECT(/*model*/ MODEL_BREAKABLE_BOX, /*pos*/ -940, -970, -1720, /*angle*/ 0, 0, 0, /*behParam*/ (BREAKABLE_BOX_BP_NO_COINS << 16), /*beh*/ bhvHiddenObject), + OBJECT(/*model*/ MODEL_BREAKABLE_BOX, /*pos*/ -340, -970, -2120, /*angle*/ 0, 0, 0, /*behParam*/ (BREAKABLE_BOX_BP_NO_COINS << 16), /*beh*/ bhvHiddenObject), + OBJECT(/*model*/ MODEL_BREAKABLE_BOX, /*pos*/ -340, -970, -1920, /*angle*/ 0, 0, 0, /*behParam*/ (BREAKABLE_BOX_BP_NO_COINS << 16), /*beh*/ bhvHiddenObject), + OBJECT(/*model*/ MODEL_BREAKABLE_BOX, /*pos*/ -540, -970, -1920, /*angle*/ 0, 0, 0, /*behParam*/ (BREAKABLE_BOX_BP_NO_COINS << 16), /*beh*/ bhvHiddenObject), + OBJECT(/*model*/ MODEL_BREAKABLE_BOX, /*pos*/ -740, -970, -1920, /*angle*/ 0, 0, 0, /*behParam*/ (BREAKABLE_BOX_BP_NO_COINS << 16), /*beh*/ bhvHiddenObject), + OBJECT(/*model*/ MODEL_BREAKABLE_BOX, /*pos*/ -540, -970, -1720, /*angle*/ 0, 0, 0, /*behParam*/ (BREAKABLE_BOX_BP_NO_COINS << 16), /*beh*/ bhvHiddenObject), + OBJECT(/*model*/ MODEL_BREAKABLE_BOX, /*pos*/ -140, -970, -2120, /*angle*/ 0, 0, 0, /*behParam*/ (BREAKABLE_BOX_BP_NO_COINS << 16), /*beh*/ bhvHiddenObject), + OBJECT(/*model*/ MODEL_BREAKABLE_BOX, /*pos*/ 40, -970, -2520, /*angle*/ 0, 0, 0, /*behParam*/ (BREAKABLE_BOX_BP_NO_COINS << 16), /*beh*/ bhvHiddenObject), + OBJECT(/*model*/ MODEL_BREAKABLE_BOX, /*pos*/ -740, -970, -1720, /*angle*/ 0, 0, 0, /*behParam*/ (BREAKABLE_BOX_BP_NO_COINS << 16), /*beh*/ bhvHiddenObject), + OBJECT(/*model*/ MODEL_BREAKABLE_BOX, /*pos*/ -140, -970, -2320, /*angle*/ 0, 0, 0, /*behParam*/ (BREAKABLE_BOX_BP_NO_COINS << 16), /*beh*/ bhvHiddenObject), + OBJECT(/*model*/ MODEL_BREAKABLE_BOX, /*pos*/ 40, -970, -2320, /*angle*/ 0, 0, 0, /*behParam*/ (BREAKABLE_BOX_BP_NO_COINS << 16), /*beh*/ bhvHiddenObject), + OBJECT(/*model*/ MODEL_BREAKABLE_BOX, /*pos*/ 40, -970, -3120, /*angle*/ 0, 0, 0, /*behParam*/ (BREAKABLE_BOX_BP_NO_COINS << 16), /*beh*/ bhvHiddenObject), + OBJECT(/*model*/ MODEL_BREAKABLE_BOX, /*pos*/ -140, -970, -2720, /*angle*/ 0, 0, 0, /*behParam*/ (BREAKABLE_BOX_BP_NO_COINS << 16), /*beh*/ bhvHiddenObject), + OBJECT(/*model*/ MODEL_BREAKABLE_BOX, /*pos*/ -140, -970, -3320, /*angle*/ 0, 0, 0, /*behParam*/ (BREAKABLE_BOX_BP_NO_COINS << 16), /*beh*/ bhvHiddenObject), + OBJECT(/*model*/ MODEL_BREAKABLE_BOX, /*pos*/ 40, -970, -3320, /*angle*/ 0, 0, 0, /*behParam*/ (BREAKABLE_BOX_BP_NO_COINS << 16), /*beh*/ bhvHiddenObject), + OBJECT(/*model*/ MODEL_BREAKABLE_BOX, /*pos*/ -140, -970, -2520, /*angle*/ 0, 0, 0, /*behParam*/ (BREAKABLE_BOX_BP_NO_COINS << 16), /*beh*/ bhvHiddenObject), + OBJECT(/*model*/ MODEL_BREAKABLE_BOX, /*pos*/ 40, -970, -2720, /*angle*/ 0, 0, 0, /*behParam*/ (BREAKABLE_BOX_BP_NO_COINS << 16), /*beh*/ bhvHiddenObject), + OBJECT(/*model*/ MODEL_BREAKABLE_BOX, /*pos*/ -140, -970, -3120, /*angle*/ 0, 0, 0, /*behParam*/ (BREAKABLE_BOX_BP_NO_COINS << 16), /*beh*/ bhvHiddenObject), + OBJECT(/*model*/ MODEL_BREAKABLE_BOX, /*pos*/ 40, -970, -2920, /*angle*/ 0, 0, 0, /*behParam*/ (BREAKABLE_BOX_BP_NO_COINS << 16), /*beh*/ bhvHiddenObject), + OBJECT(/*model*/ MODEL_BREAKABLE_BOX, /*pos*/ -140, -970, -2920, /*angle*/ 0, 0, 0, /*behParam*/ (BREAKABLE_BOX_BP_NO_COINS << 16), /*beh*/ bhvHiddenObject), + OBJECT(/*model*/ MODEL_BREAKABLE_BOX, /*pos*/ -40, -970, -3720, /*angle*/ 0, 0, 0, /*behParam*/ (BREAKABLE_BOX_BP_NO_COINS << 16), /*beh*/ bhvHiddenObject), + OBJECT(/*model*/ MODEL_BREAKABLE_BOX, /*pos*/ 40, -970, -3520, /*angle*/ 0, 0, 0, /*behParam*/ (BREAKABLE_BOX_BP_NO_COINS << 16), /*beh*/ bhvHiddenObject), + OBJECT(/*model*/ MODEL_BREAKABLE_BOX, /*pos*/ -140, -970, -3520, /*angle*/ 0, 0, 0, /*behParam*/ (BREAKABLE_BOX_BP_NO_COINS << 16), /*beh*/ bhvHiddenObject), + OBJECT(/*model*/ MODEL_BREAKABLE_BOX, /*pos*/ -140, -970, -1920, /*angle*/ 0, 0, 0, /*behParam*/ (BREAKABLE_BOX_BP_NO_COINS << 16), /*beh*/ bhvHiddenObject), + OBJECT(/*model*/ MODEL_BREAKABLE_BOX, /*pos*/ 40, -970, -2120, /*angle*/ 0, 0, 0, /*behParam*/ (BREAKABLE_BOX_BP_NO_COINS << 16), /*beh*/ bhvHiddenObject), + OBJECT(/*model*/ MODEL_BREAKABLE_BOX, /*pos*/ -340, -970, -1720, /*angle*/ 0, 0, 0, /*behParam*/ (BREAKABLE_BOX_BP_NO_COINS << 16), /*beh*/ bhvHiddenObject), + OBJECT(/*model*/ MODEL_PIRANHA_PLANT, /*pos*/ -1837, -613, -1214, /*angle*/ 0, 0, 0, /*behParam*/ (FIRE_PIRANHA_PLANT_BP_NORMAL << 16), /*beh*/ bhvFirePiranhaPlant), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ 29, 666, 148, /*angle*/ 0, 90, 0, /*behParam*/ ((COIN_FORMATION_FLAG_NONE) << 16), /*beh*/ bhvCoinFormation), + OBJECT(/*model*/ MODEL_YELLOW_COIN, /*pos*/ 266, -162, 829, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvOneCoin), + OBJECT(/*model*/ MODEL_GOOMBA, /*pos*/ 1881, -778, 1614, /*angle*/ 0, 0, 0, /*behParam*/ (GOOMBA_SIZE_TINY << 16), /*beh*/ bhvGoomba), + OBJECT(/*model*/ MODEL_GOOMBA, /*pos*/ 1822, -460, -1511, /*angle*/ 0, 0, 0, /*behParam*/ (GOOMBA_SIZE_TINY << 16), /*beh*/ bhvGoomba), + OBJECT(/*model*/ MODEL_GOOMBA, /*pos*/ 2148, -460, -918, /*angle*/ 0, 0, 0, /*behParam*/ (GOOMBA_SIZE_TINY << 16), /*beh*/ bhvGoomba), + OBJECT(/*model*/ MODEL_YELLOW_COIN, /*pos*/ -133, -491, -1481, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvOneCoin), + OBJECT(/*model*/ MODEL_YELLOW_COIN, /*pos*/ -1466, -70, -814, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvOneCoin), + OBJECT(/*model*/ MODEL_YELLOW_COIN, /*pos*/ -1466, -107, -518, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvOneCoin), + OBJECT(/*model*/ MODEL_YELLOW_COIN, /*pos*/ -1466, -151, -162, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvOneCoin), + OBJECT(/*model*/ MODEL_YELLOW_COIN, /*pos*/ 133, -491, -1496, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvOneCoin), + OBJECT(/*model*/ MODEL_EXCLAMATION_BOX, /*pos*/ -1866, -400, 311, /*angle*/ 0, 0, 0, /*behParam*/ (EXCLAMATION_BOX_BP_1UP_WALKING << 16), /*beh*/ bhvExclamationBox), + OBJECT(/*model*/ MODEL_YELLOW_COIN, /*pos*/ -380, -480, 370, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvOneCoin), + OBJECT(/*model*/ MODEL_YELLOW_COIN, /*pos*/ -60, -480, 370, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvOneCoin), + OBJECT(/*model*/ MODEL_YELLOW_COIN, /*pos*/ -1171, -153, 1023, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvOneCoin), + OBJECT(/*model*/ MODEL_GOOMBA, /*pos*/ -923, 295, -614, /*angle*/ 0, 0, 0, /*behParam*/ (GOOMBA_SIZE_TINY << 16), /*beh*/ bhvGoomba), + OBJECT(/*model*/ MODEL_GOOMBA, /*pos*/ 1466, -460, 999, /*angle*/ 0, 0, 0, /*behParam*/ (GOOMBA_SIZE_TINY << 16), /*beh*/ bhvGoomba), + OBJECT(/*model*/ MODEL_EXCLAMATION_BOX, /*pos*/ 1849, -325, -183, /*angle*/ 0, 0, 0, /*behParam*/ (EXCLAMATION_BOX_BP_COINS_3 << 16), /*beh*/ bhvExclamationBox), + OBJECT(/*model*/ MODEL_GOOMBA, /*pos*/ 1033, -162, 916, /*angle*/ 0, 0, 0, /*behParam*/ (GOOMBA_SIZE_TINY << 16), /*beh*/ bhvGoomba), + OBJECT(/*model*/ MODEL_GOOMBA, /*pos*/ -550, 666, -150, /*angle*/ 0, 0, 0, /*behParam*/ (GOOMBA_SIZE_TINY << 16), /*beh*/ bhvGoomba), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ 383, -1022, 2133, /*angle*/ 0, 0, 0, /*behParam*/ (FISH_SPAWNER_BP_FEW_BLUE << 16), /*beh*/ bhvFishSpawner), + OBJECT(/*model*/ MODEL_GOOMBA, /*pos*/ 2133, -767, 466, /*angle*/ 0, 0, 0, /*behParam*/ (GOOMBA_SIZE_TINY << 16), /*beh*/ bhvGoomba), + OBJECT(/*model*/ MODEL_GOOMBA, /*pos*/ -1033, -153, 1050, /*angle*/ 0, 0, 0, /*behParam*/ (GOOMBA_SIZE_TINY << 16), /*beh*/ bhvGoomba), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ 1980, -880, 2100, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvHiddenStarTrigger), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ 140, -153, 360, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvHiddenStarTrigger), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ -1330, -900, 1945, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvHiddenStarTrigger), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ 0, 1150, -450, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvHiddenStarTrigger), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ -1392, 92, -633, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvHiddenStarTrigger), + OBJECT(/*model*/ MODEL_BOWLING_BALL, /*pos*/ 1348, -148, 666, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvFireSpitter), + OBJECT(/*model*/ MODEL_BOWLING_BALL, /*pos*/ 1733, -770, 1718, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvFireSpitter), + OBJECT(/*model*/ MODEL_BOWLING_BALL, /*pos*/ -2133, -770, 296, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvFireSpitter), + OBJECT(/*model*/ MODEL_BOWLING_BALL, /*pos*/ -160, -608, 666, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvFireSpitter), + OBJECT(/*model*/ MODEL_BUTTERFLY, /*pos*/ -1693, -890, 1746, /*angle*/ 0, 0, 0, /*behParam*/ (TRIPLET_BUTTERFLY_BP_0 << 16), /*beh*/ bhvTripletButterfly), + OBJECT(/*model*/ MODEL_KOOPA_WITH_SHELL, /*pos*/ -600, -153, 800, /*angle*/ 0, 0, 0, /*behParam*/ (KOOPA_BP_TINY << 16), /*beh*/ bhvKoopa), + OBJECT(/*model*/ MODEL_BREAKABLE_BOX, /*pos*/ -40, -970, -3920, /*angle*/ 0, 0, 0, /*behParam*/ (BREAKABLE_BOX_BP_NO_COINS << 16), /*beh*/ bhvHiddenObject), + OBJECT(/*model*/ MODEL_YELLOW_COIN, /*pos*/ 280, -640, -4140, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvYellowCoin), + OBJECT(/*model*/ MODEL_GOOMBA, /*pos*/ -2020, -890, 1720, /*angle*/ 0, 0, 0, /*behParam*/ (GOOMBA_SIZE_TINY << 16), /*beh*/ bhvGoomba), + // Special objects + OBJECT(/*model*/ MODEL_LEVEL_GEOMETRY_03, /*pos*/ -40, -767, -4494, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvStaticObject), + OBJECT(/*model*/ MODEL_BOB_BUBBLY_TREE, /*pos*/ 1444, -153, 676, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvTree), + RETURN(), +}; + +static const LevelScript script_thi_area_3_macro_objects[] = { + // Macro objects + OBJECT(/*model*/ MODEL_RED_COIN, /*pos*/ 1038, 1122, 998, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvRedCoin), + OBJECT(/*model*/ MODEL_RED_COIN, /*pos*/ 1590, 1078, 160, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvRedCoin), + OBJECT(/*model*/ MODEL_RED_COIN, /*pos*/ 1038, 1112, -823, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvRedCoin), + OBJECT(/*model*/ MODEL_RED_COIN, /*pos*/ -238, 1122, -1319, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvRedCoin), + OBJECT(/*model*/ MODEL_RED_COIN, /*pos*/ -523, 824, -500, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvRedCoin), + OBJECT(/*model*/ MODEL_RED_COIN, /*pos*/ -1838, 1068, 338, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvRedCoin), + OBJECT(/*model*/ MODEL_RED_COIN, /*pos*/ -240, 1500, 1040, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvRedCoin), + OBJECT(/*model*/ MODEL_RED_COIN, /*pos*/ -1914, 1360, -1909, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvRedCoin), + OBJECT(/*model*/ MODEL_1UP, /*pos*/ -1920, 1540, -1040, /*angle*/ 0, 0, 0, /*behParam*/ (MUSHROOM_BP_REQUIRES_NONE << 16), /*beh*/ bhv1Up), + OBJECT(/*model*/ MODEL_BLUE_COIN_SWITCH, /*pos*/ -1495, 1434, 1595, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvBlueCoinSwitch), + OBJECT(/*model*/ MODEL_BLUE_COIN, /*pos*/ -540, 1500, 1240, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvHiddenBlueCoin), + OBJECT(/*model*/ MODEL_BLUE_COIN, /*pos*/ -840, 1500, 1440, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvHiddenBlueCoin), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ -1200, 2200, -1200, /*angle*/ 0, 45, 0, /*behParam*/ ((COIN_FORMATION_FLAG_NONE) << 16), /*beh*/ bhvCoinFormation), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ 1200, 2200, 1200, /*angle*/ 0, 45, 0, /*behParam*/ ((COIN_FORMATION_FLAG_NONE) << 16), /*beh*/ bhvCoinFormation), + OBJECT(/*model*/ MODEL_BOWLING_BALL, /*pos*/ -224, 1456, 672, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvFireSpitter), + RETURN(), +}; + +static const LevelScript script_thi_area_2_objects_1[] = { OBJECT_WITH_ACTS(/*model*/ MODEL_NONE, /*pos*/ 0, -700, -4500, /*angle*/ 0, 0, 0, /*behParam*/ 0x03000000, /*beh*/ bhvHiddenStar, /*acts*/ ALL_ACTS), RETURN(), }; -static const LevelScript script_func_local_3[] = { +static const LevelScript script_thi_area_3_objects_1[] = { 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), RETURN(), }; -static const LevelScript script_func_local_4[] = { +static const LevelScript script_thi_area_1_objects_1[] = { 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), @@ -46,18 +187,18 @@ static const LevelScript script_func_local_4[] = { RETURN(), }; -static const LevelScript script_func_local_5[] = { +static const LevelScript script_thi_area_1_objects_2[] = { OBJECT(/*model*/ MODEL_THI_HUGE_ISLAND_TOP, /*pos*/ 0, 3891, -1533, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvThiHugeIslandTop), RETURN(), }; -static const LevelScript script_func_local_6[] = { +static const LevelScript script_thi_area_2_objects_2[] = { 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), RETURN(), }; -static const LevelScript script_func_local_7[] = { +static const LevelScript script_thi_area_1_objects_3[] = { 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), @@ -67,7 +208,7 @@ static const LevelScript script_func_local_7[] = { RETURN(), }; -static const LevelScript script_func_local_8[] = { +static const LevelScript script_thi_area_2_objects_3[] = { 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), @@ -110,12 +251,11 @@ const LevelScript level_thi_entry[] = { 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), - JUMP_LINK(script_func_local_7), - JUMP_LINK(script_func_local_1), - JUMP_LINK(script_func_local_5), - JUMP_LINK(script_func_local_4), + JUMP_LINK(script_thi_area_1_objects_1), + JUMP_LINK(script_thi_area_1_objects_2), + JUMP_LINK(script_thi_area_1_objects_3), TERRAIN(/*terrainData*/ thi_seg7_area_1_collision), - MACRO_OBJECTS(/*objList*/ thi_seg7_area_1_macro_objs), + JUMP_LINK(script_thi_area_1_macro_objects), SET_BACKGROUND_MUSIC(/*settingsPreset*/ 0x0000, /*seq*/ SEQ_LEVEL_GRASS), TERRAIN_TYPE(/*terrainType*/ TERRAIN_GRASS), END_AREA(), @@ -129,11 +269,11 @@ const LevelScript level_thi_entry[] = { 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), - JUMP_LINK(script_func_local_8), - JUMP_LINK(script_func_local_2), - JUMP_LINK(script_func_local_6), + JUMP_LINK(script_thi_area_2_objects_1), + JUMP_LINK(script_thi_area_2_objects_2), + JUMP_LINK(script_thi_area_2_objects_3), TERRAIN(/*terrainData*/ thi_seg7_area_2_collision), - MACRO_OBJECTS(/*objList*/ thi_seg7_area_2_macro_objs), + JUMP_LINK(script_thi_area_2_macro_objects), SET_BACKGROUND_MUSIC(/*settingsPreset*/ 0x0000, /*seq*/ SEQ_LEVEL_GRASS), TERRAIN_TYPE(/*terrainType*/ TERRAIN_GRASS), END_AREA(), @@ -147,9 +287,9 @@ const LevelScript level_thi_entry[] = { 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), - JUMP_LINK(script_func_local_3), + JUMP_LINK(script_thi_area_3_objects_1), TERRAIN(/*terrainData*/ thi_seg7_area_3_collision), - MACRO_OBJECTS(/*objList*/ thi_seg7_area_3_macro_objs), + JUMP_LINK(script_thi_area_3_macro_objects), SET_BACKGROUND_MUSIC(/*settingsPreset*/ 0x0004, /*seq*/ SEQ_LEVEL_UNDERGROUND), TERRAIN_TYPE(/*terrainType*/ TERRAIN_GRASS), END_AREA(), diff --git a/levels/totwc/areas/1/collision.inc.c b/levels/totwc/areas/1/collision.inc.c index fb8816b16..0172de92a 100644 --- a/levels/totwc/areas/1/collision.inc.c +++ b/levels/totwc/areas/1/collision.inc.c @@ -586,29 +586,5 @@ const Collision totwc_seg7_collision[] = { COL_TRI(81, 98, 97), COL_TRI(81, 97, 67), COL_TRI_STOP(), - COL_SPECIAL_INIT(23), - SPECIAL_OBJECT_WITH_YAW(/*preset*/ special_null_start, /*pos*/ -4095, 2935, 0, /*yaw*/ 64), // unused, probably an early way to set initial position - SPECIAL_OBJECT_WITH_YAW(/*preset*/ special_level_geo_03, /*pos*/ 4608, -357, -511, /*yaw*/ 0), - SPECIAL_OBJECT_WITH_YAW(/*preset*/ special_level_geo_03, /*pos*/ -4095, 666, 512, /*yaw*/ 0), - SPECIAL_OBJECT_WITH_YAW(/*preset*/ special_level_geo_03, /*pos*/ -5631, -1893, 6144, /*yaw*/ 0), - SPECIAL_OBJECT_WITH_YAW(/*preset*/ special_level_geo_03, /*pos*/ -2047, -869, 2048, /*yaw*/ 0), - SPECIAL_OBJECT_WITH_YAW(/*preset*/ special_level_geo_03, /*pos*/ 1024, 1178, 1536, /*yaw*/ 0), - SPECIAL_OBJECT_WITH_YAW(/*preset*/ special_level_geo_03, /*pos*/ -2047, -357, -2559, /*yaw*/ 0), - SPECIAL_OBJECT_WITH_YAW(/*preset*/ special_level_geo_03, /*pos*/ 2560, -2917, 2560, /*yaw*/ 0), - SPECIAL_OBJECT_WITH_YAW(/*preset*/ special_level_geo_03, /*pos*/ 1024, 1178, 4096, /*yaw*/ 0), - SPECIAL_OBJECT_WITH_YAW(/*preset*/ special_level_geo_03, /*pos*/ -1023, -869, 5632, /*yaw*/ 0), - SPECIAL_OBJECT_WITH_YAW(/*preset*/ special_level_geo_03, /*pos*/ -5119, -2405, 1024, /*yaw*/ 0), - SPECIAL_OBJECT_WITH_YAW(/*preset*/ special_level_geo_03, /*pos*/ 512, -2917, 3584, /*yaw*/ 0), - SPECIAL_OBJECT_WITH_YAW(/*preset*/ special_level_geo_03, /*pos*/ 1024, -1893, -3071, /*yaw*/ 0), - SPECIAL_OBJECT_WITH_YAW(/*preset*/ special_level_geo_03, /*pos*/ -511, -869, -4095, /*yaw*/ 0), - SPECIAL_OBJECT_WITH_YAW(/*preset*/ special_level_geo_03, /*pos*/ 4608, -3429, 1536, /*yaw*/ 0), - SPECIAL_OBJECT_WITH_YAW(/*preset*/ special_level_geo_03, /*pos*/ 6144, -3429, -5119, /*yaw*/ 0), - SPECIAL_OBJECT_WITH_YAW(/*preset*/ special_level_geo_03, /*pos*/ -2559, -2405, -6655, /*yaw*/ 0), - SPECIAL_OBJECT_WITH_YAW(/*preset*/ special_level_geo_03, /*pos*/ 3072, -869, 5632, /*yaw*/ 0), - SPECIAL_OBJECT_WITH_YAW(/*preset*/ special_level_geo_03, /*pos*/ 6144, -1381, -511, /*yaw*/ 0), - SPECIAL_OBJECT_WITH_YAW(/*preset*/ special_level_geo_03, /*pos*/ 4096, 666, -1535, /*yaw*/ 0), - SPECIAL_OBJECT_WITH_YAW(/*preset*/ special_level_geo_03, /*pos*/ -4607, -1381, -2559, /*yaw*/ 0), - SPECIAL_OBJECT_WITH_YAW(/*preset*/ special_level_geo_03, /*pos*/ -1535, -2917, -6143, /*yaw*/ 0), - SPECIAL_OBJECT_WITH_YAW(/*preset*/ special_level_geo_03, /*pos*/ 2560, -3429, -3583, /*yaw*/ 0), COL_END(), }; diff --git a/levels/totwc/areas/1/macro.inc.c b/levels/totwc/areas/1/macro.inc.c deleted file mode 100644 index fc788a92b..000000000 --- a/levels/totwc/areas/1/macro.inc.c +++ /dev/null @@ -1,32 +0,0 @@ -// 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_END(), -}; diff --git a/levels/totwc/header.h b/levels/totwc/header.h index 8579fa4b0..d1754759f 100644 --- a/levels/totwc/header.h +++ b/levels/totwc/header.h @@ -13,7 +13,6 @@ extern const Gfx totwc_seg7_dl_07007048[]; extern const Gfx totwc_seg7_dl_070078B8[]; extern const Gfx totwc_seg7_dl_070079A8[]; extern const Collision totwc_seg7_collision[]; -extern const MacroObject totwc_seg7_macro_objs[]; // script extern const LevelScript level_totwc_entry[]; diff --git a/levels/totwc/leveldata.c b/levels/totwc/leveldata.c index 94e0dcae0..d6a6490da 100644 --- a/levels/totwc/leveldata.c +++ b/levels/totwc/leveldata.c @@ -2,9 +2,6 @@ #include "sm64.h" #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 "textures.h" #include "make_const_nonconst.h" @@ -14,4 +11,3 @@ #include "levels/totwc/areas/1/3/model.inc.c" #include "levels/totwc/cloud/model.inc.c" #include "levels/totwc/areas/1/collision.inc.c" -#include "levels/totwc/areas/1/macro.inc.c" diff --git a/levels/totwc/script.c b/levels/totwc/script.c index ea322edee..9a779a9a9 100644 --- a/levels/totwc/script.c +++ b/levels/totwc/script.c @@ -16,12 +16,69 @@ #include "make_const_nonconst.h" #include "levels/totwc/header.h" -static const LevelScript script_func_local_1[] = { + +static const LevelScript script_totwc_macro_objects[] = { + // Macro objects + OBJECT(/*model*/ MODEL_EXCLAMATION_BOX, /*pos*/ 0, -1760, -600, /*angle*/ 0, 0, 0, /*behParam*/ (EXCLAMATION_BOX_BP_WING_CAP << 16), /*beh*/ bhvExclamationBox), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ 0, -1000, 3000, /*angle*/ 0, 90, 0, /*behParam*/ ((COIN_FORMATION_FLAG_FLYING | COIN_FORMATION_FLAG_RING | COIN_FORMATION_FLAG_VERTICAL) << 16), /*beh*/ bhvCoinFormation), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ -3500, -200, 0, /*angle*/ 0, 0, 0, /*behParam*/ ((COIN_FORMATION_FLAG_FLYING | COIN_FORMATION_FLAG_RING | COIN_FORMATION_FLAG_VERTICAL) << 16), /*beh*/ bhvCoinFormation), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ 4500, 1400, 0, /*angle*/ 0, 0, 0, /*behParam*/ ((COIN_FORMATION_FLAG_FLYING | COIN_FORMATION_FLAG_RING | COIN_FORMATION_FLAG_VERTICAL) << 16), /*beh*/ bhvCoinFormation), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ 0, 600, -4000, /*angle*/ 0, 90, 0, /*behParam*/ ((COIN_FORMATION_FLAG_FLYING | COIN_FORMATION_FLAG_RING | COIN_FORMATION_FLAG_VERTICAL) << 16), /*beh*/ bhvCoinFormation), + OBJECT(/*model*/ MODEL_RED_COIN, /*pos*/ -100, 800, -4000, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvRedCoin), + OBJECT(/*model*/ MODEL_RED_COIN, /*pos*/ -3500, 0, 100, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvRedCoin), + OBJECT(/*model*/ MODEL_RED_COIN, /*pos*/ 100, -800, 3000, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvRedCoin), + OBJECT(/*model*/ MODEL_RED_COIN, /*pos*/ 4500, 1600, -100, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvRedCoin), + OBJECT(/*model*/ MODEL_RED_COIN, /*pos*/ 100, 800, -4000, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvRedCoin), + OBJECT(/*model*/ MODEL_RED_COIN, /*pos*/ -3500, 0, -100, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvRedCoin), + OBJECT(/*model*/ MODEL_RED_COIN, /*pos*/ -100, -800, 3000, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvRedCoin), + OBJECT(/*model*/ MODEL_RED_COIN, /*pos*/ 4500, 1600, 100, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvRedCoin), + OBJECT(/*model*/ MODEL_YELLOW_COIN, /*pos*/ 2913, 1200, -2941, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvYellowCoin), + OBJECT(/*model*/ MODEL_YELLOW_COIN, /*pos*/ 3954, 1400, -1817, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvYellowCoin), + OBJECT(/*model*/ MODEL_YELLOW_COIN, /*pos*/ 1554, 1000, -3680, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvYellowCoin), + OBJECT(/*model*/ MODEL_YELLOW_COIN, /*pos*/ -2657, 400, -2742, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvYellowCoin), + OBJECT(/*model*/ MODEL_YELLOW_COIN, /*pos*/ -1485, 600, -3628, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvYellowCoin), + OBJECT(/*model*/ MODEL_YELLOW_COIN, /*pos*/ -3231, 200, -1514, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvYellowCoin), + OBJECT(/*model*/ MODEL_YELLOW_COIN, /*pos*/ -2197, -400, 2142, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvYellowCoin), + OBJECT(/*model*/ MODEL_YELLOW_COIN, /*pos*/ -3056, -200, 1310, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvYellowCoin), + OBJECT(/*model*/ MODEL_YELLOW_COIN, /*pos*/ -1144, -600, 2742, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvYellowCoin), + OBJECT(/*model*/ MODEL_YELLOW_COIN, /*pos*/ 3680, 1800, 1439, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvYellowCoin), + OBJECT(/*model*/ MODEL_YELLOW_COIN, /*pos*/ 2080, 2000, 2080, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvYellowCoin), + OBJECT(/*model*/ MODEL_YELLOW_COIN, /*pos*/ 920, 2200, 1920, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvYellowCoin), + OBJECT(/*model*/ MODEL_YELLOW_COIN, /*pos*/ -40, 2400, 1520, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvYellowCoin), + OBJECT(/*model*/ MODEL_YELLOW_COIN, /*pos*/ -960, 2600, 1040, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvYellowCoin), + OBJECT(/*model*/ MODEL_YELLOW_COIN, /*pos*/ -1760, 2800, 600, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvYellowCoin), + // Special objects + OBJECT(/*model*/ MODEL_LEVEL_GEOMETRY_03, /*pos*/ 4608, -357, -511, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvStaticObject), + OBJECT(/*model*/ MODEL_LEVEL_GEOMETRY_03, /*pos*/ -4095, 666, 512, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvStaticObject), + OBJECT(/*model*/ MODEL_LEVEL_GEOMETRY_03, /*pos*/ -5631, -1893, 6144, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvStaticObject), + OBJECT(/*model*/ MODEL_LEVEL_GEOMETRY_03, /*pos*/ -2047, -869, 2048, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvStaticObject), + OBJECT(/*model*/ MODEL_LEVEL_GEOMETRY_03, /*pos*/ 1024, 1178, 1536, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvStaticObject), + OBJECT(/*model*/ MODEL_LEVEL_GEOMETRY_03, /*pos*/ -2047, -357, -2559, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvStaticObject), + OBJECT(/*model*/ MODEL_LEVEL_GEOMETRY_03, /*pos*/ 2560, -2917, 2560, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvStaticObject), + OBJECT(/*model*/ MODEL_LEVEL_GEOMETRY_03, /*pos*/ 1024, 1178, 4096, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvStaticObject), + OBJECT(/*model*/ MODEL_LEVEL_GEOMETRY_03, /*pos*/ -1023, -869, 5632, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvStaticObject), + OBJECT(/*model*/ MODEL_LEVEL_GEOMETRY_03, /*pos*/ -5119, -2405, 1024, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvStaticObject), + OBJECT(/*model*/ MODEL_LEVEL_GEOMETRY_03, /*pos*/ 512, -2917, 3584, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvStaticObject), + OBJECT(/*model*/ MODEL_LEVEL_GEOMETRY_03, /*pos*/ 1024, -1893, -3071, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvStaticObject), + OBJECT(/*model*/ MODEL_LEVEL_GEOMETRY_03, /*pos*/ -511, -869, -4095, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvStaticObject), + OBJECT(/*model*/ MODEL_LEVEL_GEOMETRY_03, /*pos*/ 4608, -3429, 1536, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvStaticObject), + OBJECT(/*model*/ MODEL_LEVEL_GEOMETRY_03, /*pos*/ 6144, -3429, -5119, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvStaticObject), + OBJECT(/*model*/ MODEL_LEVEL_GEOMETRY_03, /*pos*/ -2559, -2405, -6655, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvStaticObject), + OBJECT(/*model*/ MODEL_LEVEL_GEOMETRY_03, /*pos*/ 3072, -869, 5632, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvStaticObject), + OBJECT(/*model*/ MODEL_LEVEL_GEOMETRY_03, /*pos*/ 6144, -1381, -511, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvStaticObject), + OBJECT(/*model*/ MODEL_LEVEL_GEOMETRY_03, /*pos*/ 4096, 666, -1535, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvStaticObject), + OBJECT(/*model*/ MODEL_LEVEL_GEOMETRY_03, /*pos*/ -4607, -1381, -2559, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvStaticObject), + OBJECT(/*model*/ MODEL_LEVEL_GEOMETRY_03, /*pos*/ -1535, -2917, -6143, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvStaticObject), + OBJECT(/*model*/ MODEL_LEVEL_GEOMETRY_03, /*pos*/ 2560, -3429, -3583, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvStaticObject), + RETURN(), +}; + +static const LevelScript script_totwc_objects_1[] = { OBJECT(/*model*/ MODEL_CAP_SWITCH, /*pos*/ 0, -2047, 10, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvCapSwitch), RETURN(), }; -static const LevelScript script_func_local_2[] = { +static const LevelScript script_totwc_objects_2[] = { OBJECT(/*model*/ MODEL_NONE, /*pos*/ 800, -1700, 0, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvHiddenRedCoinStar), RETURN(), }; @@ -47,10 +104,10 @@ const LevelScript level_totwc_entry[] = { 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), - JUMP_LINK(script_func_local_2), - JUMP_LINK(script_func_local_1), + JUMP_LINK(script_totwc_objects_1), + JUMP_LINK(script_totwc_objects_2), TERRAIN(/*terrainData*/ totwc_seg7_collision), - MACRO_OBJECTS(/*objList*/ totwc_seg7_macro_objs), + JUMP_LINK(script_totwc_macro_objects), SHOW_DIALOG(/*index*/ 0x00, DIALOG_131), SET_BACKGROUND_MUSIC(/*settingsPreset*/ 0x0000, /*seq*/ SEQ_LEVEL_SLIDE), TERRAIN_TYPE(/*terrainType*/ TERRAIN_STONE), diff --git a/levels/ttc/areas/1/collision.inc.c b/levels/ttc/areas/1/collision.inc.c index 5fc0f7cbf..cc5e6edaf 100644 --- a/levels/ttc/areas/1/collision.inc.c +++ b/levels/ttc/areas/1/collision.inc.c @@ -1889,7 +1889,5 @@ const Collision ttc_seg7_collision_level[] = { COL_TRI(519, 626, 526), COL_TRI(526, 625, 624), COL_TRI_STOP(), - COL_SPECIAL_INIT(1), - SPECIAL_OBJECT_WITH_YAW(/*preset*/ special_null_start, /*pos*/ 1046, -4822, -266, /*yaw*/ 192), // unused, probably an early way to set initial position COL_END(), }; diff --git a/levels/ttc/areas/1/macro.inc.c b/levels/ttc/areas/1/macro.inc.c deleted file mode 100644 index 93db79e8f..000000000 --- a/levels/ttc/areas/1/macro.inc.c +++ /dev/null @@ -1,114 +0,0 @@ -// 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_END(), -}; diff --git a/levels/ttc/header.h b/levels/ttc/header.h index 241d36858..af2a7d73c 100644 --- a/levels/ttc/header.h +++ b/levels/ttc/header.h @@ -54,7 +54,6 @@ extern const Collision ttc_seg7_collision_070157D8[]; extern const Collision ttc_seg7_collision_clock_platform[]; extern const Collision ttc_seg7_collision_clock_main_rotation[]; extern const Collision ttc_seg7_collision_rotating_clock_platform2[]; -extern const MacroObject ttc_seg7_macro_objs[]; extern const Texture ttc_yellow_triangle[]; extern const Gfx ttc_dl_surface_treadmill_begin[]; extern const Gfx ttc_dl_surface_treadmill_end[]; diff --git a/levels/ttc/leveldata.c b/levels/ttc/leveldata.c index 60449b501..01fbaf527 100644 --- a/levels/ttc/leveldata.c +++ b/levels/ttc/leveldata.c @@ -2,9 +2,6 @@ #include "sm64.h" #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 "textures.h" #include "make_const_nonconst.h" @@ -42,5 +39,4 @@ #include "levels/ttc/elevator_platform/collision.inc.c" #include "levels/ttc/clock_hand/collision.inc.c" #include "levels/ttc/spinner/collision.inc.c" -#include "levels/ttc/areas/1/macro.inc.c" #include "levels/ttc/areas/1/movtext.inc.c" diff --git a/levels/ttc/script.c b/levels/ttc/script.c index 70c9f781c..e30eab16c 100644 --- a/levels/ttc/script.c +++ b/levels/ttc/script.c @@ -15,13 +15,129 @@ #include "make_const_nonconst.h" #include "levels/ttc/header.h" -static const LevelScript script_func_local_1[] = { + +static const LevelScript script_ttc_macro_objects[] = { + // Macro objects + OBJECT(/*model*/ MODEL_TTC_ROTATING_CUBE, /*pos*/ -1032, -3291, 1070, /*angle*/ 0, 45, 0, /*behParam*/ (TTC_ROTATING_SOLID_BP_CUBE << 16), /*beh*/ bhvTTCRotatingSolid), + OBJECT(/*model*/ MODEL_TTC_ROTATING_CUBE, /*pos*/ -1881, 1767, -446, /*angle*/ 0, 90, 0, /*behParam*/ (TTC_ROTATING_SOLID_BP_CUBE << 16), /*beh*/ bhvTTCRotatingSolid), + OBJECT(/*model*/ MODEL_TTC_ROTATING_CUBE, /*pos*/ -1870, 2068, 362, /*angle*/ 0, 90, 0, /*behParam*/ (TTC_ROTATING_SOLID_BP_CUBE << 16), /*beh*/ bhvTTCRotatingSolid), + OBJECT(/*model*/ MODEL_TTC_ROTATING_CUBE, /*pos*/ -770, -4361, -423, /*angle*/ 0, 225, 0, /*behParam*/ (TTC_ROTATING_SOLID_BP_CUBE << 16), /*beh*/ bhvTTCRotatingSolid), + OBJECT(/*model*/ MODEL_TTC_ROTATING_CUBE, /*pos*/ -1314, -3691, 788, /*angle*/ 0, 135, 0, /*behParam*/ (TTC_ROTATING_SOLID_BP_CUBE << 16), /*beh*/ bhvTTCRotatingSolid), + OBJECT(/*model*/ MODEL_TTC_ROTATING_CUBE, /*pos*/ -1314, -2892, 1353, /*angle*/ 0, 135, 0, /*behParam*/ (TTC_ROTATING_SOLID_BP_CUBE << 16), /*beh*/ bhvTTCRotatingSolid), + OBJECT(/*model*/ MODEL_TTC_ROTATING_PRISM, /*pos*/ 780, 5767, -1027, /*angle*/ 0, 315, 0, /*behParam*/ (TTC_ROTATING_SOLID_BP_TRIANGULAR_PRISM << 16), /*beh*/ bhvTTCRotatingSolid), + OBJECT(/*model*/ MODEL_TTC_ROTATING_PRISM, /*pos*/ 1063, 5562, -744, /*angle*/ 0, 315, 0, /*behParam*/ (TTC_ROTATING_SOLID_BP_TRIANGULAR_PRISM << 16), /*beh*/ bhvTTCRotatingSolid), + OBJECT(/*model*/ MODEL_TTC_PENDULUM, /*pos*/ -1350, 748, -1208, /*angle*/ 0, 45, 0, /*behParam*/ 0x00000000, /*beh*/ bhvTTCPendulum), + OBJECT(/*model*/ MODEL_TTC_PENDULUM, /*pos*/ -690, 901, -910, /*angle*/ 0, 45, 0, /*behParam*/ 0x00000000, /*beh*/ bhvTTCPendulum), + OBJECT(/*model*/ MODEL_TTC_PENDULUM, /*pos*/ -1389, -3030, -1028, /*angle*/ 0, 45, 0, /*behParam*/ 0x00000000, /*beh*/ bhvTTCPendulum), + OBJECT(/*model*/ MODEL_TTC_PENDULUM, /*pos*/ 937, -3867, -1041, /*angle*/ 0, 45, 0, /*behParam*/ 0x00000000, /*beh*/ bhvTTCPendulum), + OBJECT(/*model*/ MODEL_TTC_LARGE_TREADMILL, /*pos*/ -139, -4408, -1056, /*angle*/ 0, 135, 0, /*behParam*/ (TREADMILL_BP_LARGE << 16), /*beh*/ bhvTTCTreadmill), + OBJECT(/*model*/ MODEL_TTC_SMALL_TREADMILL, /*pos*/ 618, 3656, 148, /*angle*/ 0, 90, 0, /*behParam*/ (TREADMILL_BP_SMALL << 16), /*beh*/ bhvTTCTreadmill), + OBJECT(/*model*/ MODEL_TTC_SMALL_TREADMILL, /*pos*/ 963, 3297, 608, /*angle*/ 0, 270, 0, /*behParam*/ (TREADMILL_BP_SMALL << 16), /*beh*/ bhvTTCTreadmill), + OBJECT(/*model*/ MODEL_TTC_SMALL_TREADMILL, /*pos*/ 1306, 2939, 1069, /*angle*/ 0, 90, 0, /*behParam*/ (TREADMILL_BP_SMALL << 16), /*beh*/ bhvTTCTreadmill), + OBJECT(/*model*/ MODEL_TTC_SMALL_TREADMILL, /*pos*/ -1179, -1453, -792, /*angle*/ 0, 315, 0, /*behParam*/ (TREADMILL_BP_SMALL << 16), /*beh*/ bhvTTCTreadmill), + OBJECT(/*model*/ MODEL_TTC_PUSH_BLOCK, /*pos*/ 174, 1248, 2040, /*angle*/ 0, 180, 0, /*behParam*/ ( 2 << 16), /*beh*/ bhvTTCMovingBar), + OBJECT(/*model*/ MODEL_TTC_PUSH_BLOCK, /*pos*/ -1321, 1490, -1563, /*angle*/ 0, 45, 0, /*behParam*/ ( 0 << 16), /*beh*/ bhvTTCMovingBar), + OBJECT(/*model*/ MODEL_TTC_PUSH_BLOCK, /*pos*/ -1076, 1730, -1808, /*angle*/ 0, 45, 0, /*behParam*/ ( 5 << 16), /*beh*/ bhvTTCMovingBar), + OBJECT(/*model*/ MODEL_TTC_PUSH_BLOCK, /*pos*/ -1319, 1970, -1564, /*angle*/ 0, 45, 0, /*behParam*/ (10 << 16), /*beh*/ bhvTTCMovingBar), + OBJECT(/*model*/ MODEL_TTC_PUSH_BLOCK, /*pos*/ -517, 3175, 2040, /*angle*/ 0, 180, 0, /*behParam*/ ( 0 << 16), /*beh*/ bhvTTCMovingBar), + OBJECT(/*model*/ MODEL_TTC_PUSH_BLOCK, /*pos*/ -170, 1248, 2040, /*angle*/ 0, 180, 0, /*behParam*/ ( 1 << 16), /*beh*/ bhvTTCMovingBar), + OBJECT(/*model*/ MODEL_TTC_PUSH_BLOCK, /*pos*/ -515, 1248, 2040, /*angle*/ 0, 180, 0, /*behParam*/ ( 0 << 16), /*beh*/ bhvTTCMovingBar), + OBJECT(/*model*/ MODEL_TTC_PUSH_BLOCK, /*pos*/ -175, -1351, -2039, /*angle*/ 0, 0, 0, /*behParam*/ ( 0 << 16), /*beh*/ bhvTTCMovingBar), + OBJECT(/*model*/ MODEL_TTC_PUSH_BLOCK, /*pos*/ -515, -2590, 2040, /*angle*/ 0, 180, 0, /*behParam*/ ( 0 << 16), /*beh*/ bhvTTCMovingBar), + OBJECT(/*model*/ MODEL_TTC_PUSH_BLOCK, /*pos*/ 518, 3175, 2040, /*angle*/ 0, 180, 0, /*behParam*/ ( 3 << 16), /*beh*/ bhvTTCMovingBar), + OBJECT(/*model*/ MODEL_TTC_PUSH_BLOCK, /*pos*/ -171, 3175, 2040, /*angle*/ 0, 180, 0, /*behParam*/ ( 1 << 16), /*beh*/ bhvTTCMovingBar), + OBJECT(/*model*/ MODEL_TTC_PUSH_BLOCK, /*pos*/ 174, 3175, 2040, /*angle*/ 0, 180, 0, /*behParam*/ ( 2 << 16), /*beh*/ bhvTTCMovingBar), + OBJECT(/*model*/ MODEL_TTC_ROTATING_HEXAGON, /*pos*/ 1490, -2088, -873, /*angle*/ 0, 0, 0, /*behParam*/ (TTC_COG_BP_SHAPE_HEXAGON << 16), /*beh*/ bhvTTCCog), + OBJECT(/*model*/ MODEL_TTC_ROTATING_HEXAGON, /*pos*/ -708, -1606, -1589, /*angle*/ 0, 0, 0, /*behParam*/ (TTC_COG_BP_SHAPE_HEXAGON << 16), /*beh*/ bhvTTCCog), + OBJECT(/*model*/ MODEL_TTC_ROTATING_HEXAGON, /*pos*/ 954, -1627, -1448, /*angle*/ 0, 0, 0, /*behParam*/ (TTC_COG_BP_SHAPE_HEXAGON << 16), /*beh*/ bhvTTCCog), + OBJECT(/*model*/ MODEL_TTC_ROTATING_HEXAGON, /*pos*/ 1215, -1781, -1215, /*angle*/ 0, 0, 0, /*behParam*/ (TTC_COG_BP_SHAPE_HEXAGON << 16), /*beh*/ bhvTTCCog), + OBJECT(/*model*/ MODEL_TTC_ROTATING_HEXAGON, /*pos*/ 1052, -1934, -769, /*angle*/ 0, 0, 0, /*behParam*/ (TTC_COG_BP_SHAPE_HEXAGON << 16), /*beh*/ bhvTTCCog), + OBJECT(/*model*/ MODEL_TTC_ROTATING_TRIANGLE, /*pos*/ -620, 1229, 1233, /*angle*/ 0, 225, 0, /*behParam*/ (TTC_COG_BP_SHAPE_TRIANGLE << 16), /*beh*/ bhvTTCCog), + OBJECT(/*model*/ MODEL_TTC_ROTATING_TRIANGLE, /*pos*/ 1050, -19, -1037, /*angle*/ 0, 315, 0, /*behParam*/ (TTC_COG_BP_SHAPE_TRIANGLE << 16), /*beh*/ bhvTTCCog), + OBJECT(/*model*/ MODEL_TTC_PIT_BLOCK, /*pos*/ -1100, -71, -1030, /*angle*/ 0, 315, 0, /*behParam*/ (TTC_PIT_BLOCK_BP_0 << 16), /*beh*/ bhvTTCPitBlock), + OBJECT(/*model*/ MODEL_TTC_CLOCK_HAND, /*pos*/ 0, 6011, 0, /*angle*/ 0, 225, 0, /*behParam*/ (TTC_2D_ROTATOR_BP_HAND << 16), /*beh*/ bhvTTC2DRotator), + OBJECT(/*model*/ MODEL_TTC_CLOCK_HAND, /*pos*/ 0, -2487, 0, /*angle*/ 0, 45, 0, /*behParam*/ (TTC_2D_ROTATOR_BP_HAND << 16), /*beh*/ bhvTTC2DRotator), + OBJECT(/*model*/ MODEL_TTC_SPINNER, /*pos*/ 1102, -3619, 1682, /*angle*/ 0, 135, 0, /*behParam*/ 0x00000000, /*beh*/ bhvTTCSpinner), + OBJECT(/*model*/ MODEL_TTC_SPINNER, /*pos*/ 424, -3312, 1959, /*angle*/ 0, 90, 0, /*behParam*/ 0x00000000, /*beh*/ bhvTTCSpinner), + OBJECT(/*model*/ MODEL_TTC_SPINNER, /*pos*/ 1102, -3004, 1682, /*angle*/ 0, 135, 0, /*behParam*/ 0x00000000, /*beh*/ bhvTTCSpinner), + OBJECT(/*model*/ MODEL_TTC_SPINNER, /*pos*/ 1584, -2697, 1200, /*angle*/ 0, 135, 0, /*behParam*/ 0x00000000, /*beh*/ bhvTTCSpinner), + OBJECT(/*model*/ MODEL_TTC_SPINNER, /*pos*/ 1582, -3619, 1203, /*angle*/ 0, 135, 0, /*behParam*/ 0x00000000, /*beh*/ bhvTTCSpinner), + OBJECT(/*model*/ MODEL_TTC_SPINNER, /*pos*/ -762, 4347, 1047, /*angle*/ 0, 135, 0, /*behParam*/ 0x00000000, /*beh*/ bhvTTCSpinner), + OBJECT(/*model*/ MODEL_TTC_SPINNER, /*pos*/ 424, -3926, 1959, /*angle*/ 0, 90, 0, /*behParam*/ 0x00000000, /*beh*/ bhvTTCSpinner), + OBJECT(/*model*/ MODEL_TTC_SPINNER, /*pos*/ 1102, -4233, 1682, /*angle*/ 0, 135, 0, /*behParam*/ 0x00000000, /*beh*/ bhvTTCSpinner), + OBJECT(/*model*/ MODEL_TTC_SPINNER, /*pos*/ 1102, -4848, 1682, /*angle*/ 0, 135, 0, /*behParam*/ 0x00000000, /*beh*/ bhvTTCSpinner), + OBJECT(/*model*/ MODEL_TTC_SPINNER, /*pos*/ 424, -4540, 1959, /*angle*/ 0, 90, 0, /*behParam*/ 0x00000000, /*beh*/ bhvTTCSpinner), + OBJECT(/*model*/ MODEL_TTC_SPINNER, /*pos*/ -1037, 4244, 772, /*angle*/ 0, 315, 0, /*behParam*/ 0x00000000, /*beh*/ bhvTTCSpinner), + OBJECT(/*model*/ MODEL_TTC_SPINNER, /*pos*/ 1828, 3835, -50, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvTTCSpinner), + OBJECT(/*model*/ MODEL_TTC_SPINNER, /*pos*/ 1459, 3835, -357, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvTTCSpinner), + OBJECT(/*model*/ MODEL_TTC_SPINNER, /*pos*/ 1091, 3835, -665, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvTTCSpinner), + OBJECT(/*model*/ MODEL_TTC_SMALL_GEAR, /*pos*/ 1580, -4854, -825, /*angle*/ 0, 0, 0, /*behParam*/ (TTC_2D_ROTATOR_BP_2D_COG << 16), /*beh*/ bhvTTC2DRotator), + OBJECT(/*model*/ MODEL_TTC_SMALL_GEAR, /*pos*/ -1692, 1022, -1157, /*angle*/ 0, 0, 0, /*behParam*/ (TTC_2D_ROTATOR_BP_2D_COG << 16), /*beh*/ bhvTTC2DRotator), + OBJECT(/*model*/ MODEL_TTC_SMALL_GEAR, /*pos*/ 2098, 7007, 2243, /*angle*/ 0, 0, 0, /*behParam*/ (TTC_2D_ROTATOR_BP_2D_COG << 16), /*beh*/ bhvTTC2DRotator), + OBJECT(/*model*/ MODEL_TTC_LARGE_GEAR, /*pos*/ 1801, -4843, -731, /*angle*/ 0, 0, 0, /*behParam*/ (TTC_2D_ROTATOR_BP_2D_COG << 16), /*beh*/ bhvTTC2DRotator), + OBJECT(/*model*/ MODEL_TTC_LARGE_GEAR, /*pos*/ -1477, 1044, -1088, /*angle*/ 0, 0, 0, /*behParam*/ (TTC_2D_ROTATOR_BP_2D_COG << 16), /*beh*/ bhvTTC2DRotator), + OBJECT(/*model*/ MODEL_TTC_LARGE_GEAR, /*pos*/ 2268, 7030, 2227, /*angle*/ 0, 0, 0, /*behParam*/ (TTC_2D_ROTATOR_BP_2D_COG << 16), /*beh*/ bhvTTC2DRotator), + OBJECT(/*model*/ MODEL_RED_COIN, /*pos*/ 800, -4400, 1900, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvRedCoin), + OBJECT(/*model*/ MODEL_RED_COIN, /*pos*/ 800, -3700, 1900, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvRedCoin), + OBJECT(/*model*/ MODEL_RED_COIN, /*pos*/ 800, -3000, 1900, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvRedCoin), + OBJECT(/*model*/ MODEL_RED_COIN, /*pos*/ 1780, -3300, 1000, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvRedCoin), + OBJECT(/*model*/ MODEL_RED_COIN, /*pos*/ 1388, -3300, 1428, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvRedCoin), + OBJECT(/*model*/ MODEL_RED_COIN, /*pos*/ 200, -3000, 2000, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvRedCoin), + OBJECT(/*model*/ MODEL_RED_COIN, /*pos*/ 200, -3700, 2000, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvRedCoin), + OBJECT(/*model*/ MODEL_RED_COIN, /*pos*/ 200, -4400, 2000, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvRedCoin), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ -1080, 90, 1575, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvHidden1upInPoleSpawner), + OBJECT(/*model*/ MODEL_TTC_ELEVATOR_PLATFORM, /*pos*/ -1179, 445, 1413, /*angle*/ 0, 45, 0, /*behParam*/ (6 << 16), /*beh*/ bhvTTCElevator), + OBJECT(/*model*/ MODEL_TTC_ELEVATOR_PLATFORM, /*pos*/ -1524, -1454, 1129, /*angle*/ 0, 315, 0, /*behParam*/ (2 << 16), /*beh*/ bhvTTCElevator), + OBJECT(/*model*/ MODEL_AMP, /*pos*/ -980, -700, 1450, /*angle*/ 0, 0, 0, /*behParam*/ (1 << 16), /*beh*/ bhvCirclingAmp), + OBJECT(/*model*/ MODEL_BLUE_COIN_SWITCH, /*pos*/ -1203, -19, -170, /*angle*/ 0, 45, 0, /*behParam*/ 0x00000000, /*beh*/ bhvBlueCoinSwitch), + OBJECT(/*model*/ MODEL_BLUE_COIN, /*pos*/ 0, 20, -1400, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvHiddenBlueCoin), + OBJECT(/*model*/ MODEL_BLUE_COIN, /*pos*/ -250, 20, -1700, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvHiddenBlueCoin), + OBJECT(/*model*/ MODEL_BLUE_COIN, /*pos*/ 250, 20, -1700, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvHiddenBlueCoin), + OBJECT(/*model*/ MODEL_BLUE_COIN, /*pos*/ 0, 20, -2000, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvHiddenBlueCoin), + OBJECT(/*model*/ MODEL_BLUE_COIN, /*pos*/ 500, 20, -2000, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvHiddenBlueCoin), + OBJECT(/*model*/ MODEL_BLUE_COIN, /*pos*/ -500, 20, -2000, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvHiddenBlueCoin), + OBJECT(/*model*/ MODEL_HEAVE_HO, /*pos*/ 880, -19, 1160, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvHeaveHo), + OBJECT(/*model*/ MODEL_BOWLING_BALL, /*pos*/ 800, -2460, 160, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvFireSpitter), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ -1120, -820, 1320, /*angle*/ 0, 45, 0, /*behParam*/ ((COIN_FORMATION_FLAG_NONE) << 16), /*beh*/ bhvCoinFormation), + OBJECT(/*model*/ MODEL_BOWLING_BALL, /*pos*/ -571, 6020, -1414, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvFireSpitter), + OBJECT(/*model*/ MODEL_HEART, /*pos*/ 620, -5150, 1540, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvRecoveryHeart), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ -520, 1351, 1919, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvHidden1upTrigger), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ -165, 1351, 1919, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvHidden1upTrigger), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ 182, 1351, 1919, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvHidden1upTrigger), + OBJECT(/*model*/ MODEL_1UP, /*pos*/ 657, 1368, 1879, /*angle*/ 0, 0, 0, /*behParam*/ (3 << 16), /*beh*/ bhvHidden1up), + OBJECT(/*model*/ MODEL_AMP, /*pos*/ -700, -2350, -700, /*angle*/ 0, 0, 0, /*behParam*/ (1 << 16), /*beh*/ bhvCirclingAmp), + OBJECT(/*model*/ MODEL_EXCLAMATION_BOX, /*pos*/ 1883, 4150, 550, /*angle*/ 0, 0, 0, /*behParam*/ (EXCLAMATION_BOX_BP_1UP_WALKING << 16), /*beh*/ bhvExclamationBox), + OBJECT(/*model*/ MODEL_HEART, /*pos*/ -1333, 350, 1116, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvRecoveryHeart), + OBJECT(/*model*/ MODEL_EXCLAMATION_BOX, /*pos*/ -1101, 6316, -685, /*angle*/ 0, 45, 0, /*behParam*/ (EXCLAMATION_BOX_BP_1UP_WALKING << 16), /*beh*/ bhvExclamationBox), + OBJECT(/*model*/ MODEL_BLACK_BOBOMB, /*pos*/ 1077, -4822, 638, /*angle*/ 0, 0, 0, /*behParam*/ (BOBOMB_BP_STYPE_GENERIC << 16), /*beh*/ bhvBobomb), + OBJECT(/*model*/ MODEL_BLACK_BOBOMB, /*pos*/ 1683, -4822, 189, /*angle*/ 0, 0, 0, /*behParam*/ (BOBOMB_BP_STYPE_GENERIC << 16), /*beh*/ bhvBobomb), + OBJECT(/*model*/ MODEL_BLUE_COIN, /*pos*/ 0, 20, -1700, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvHiddenBlueCoin), + OBJECT(/*model*/ MODEL_TTC_ROTATING_HEXAGON, /*pos*/ -1020, 1229, 537, /*angle*/ 0, 0, 0, /*behParam*/ (TTC_COG_BP_SHAPE_HEXAGON << 16), /*beh*/ bhvTTCCog), + OBJECT(/*model*/ MODEL_EXCLAMATION_BOX, /*pos*/ 2350, 5600, 2350, /*angle*/ 0, 45, 0, /*behParam*/ (EXCLAMATION_BOX_BP_COINS_10 << 16), /*beh*/ bhvExclamationBox), + OBJECT(/*model*/ MODEL_EXCLAMATION_BOX, /*pos*/ 0, 4783, 0, /*angle*/ 0, 0, 0, /*behParam*/ (EXCLAMATION_BOX_BP_COINS_10 << 16), /*beh*/ bhvExclamationBox), + OBJECT(/*model*/ MODEL_EXCLAMATION_BOX, /*pos*/ -1140, -3720, -1620, /*angle*/ 0, 45, 0, /*behParam*/ (EXCLAMATION_BOX_BP_COINS_3 << 16), /*beh*/ bhvExclamationBox), + OBJECT(/*model*/ MODEL_EXCLAMATION_BOX, /*pos*/ 840, -2200, 860, /*angle*/ 0, 45, 0, /*behParam*/ (EXCLAMATION_BOX_BP_COINS_3 << 16), /*beh*/ bhvExclamationBox), + OBJECT(/*model*/ MODEL_YELLOW_COIN, /*pos*/ -770, -3800, -440, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvYellowCoin), + OBJECT(/*model*/ MODEL_YELLOW_COIN, /*pos*/ -770, -3700, -440, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvYellowCoin), + OBJECT(/*model*/ MODEL_EXCLAMATION_BOX, /*pos*/ 280, -4920, 1660, /*angle*/ 0, 0, 0, /*behParam*/ (EXCLAMATION_BOX_BP_COINS_10 << 16), /*beh*/ bhvExclamationBox), + OBJECT(/*model*/ MODEL_EXCLAMATION_BOX, /*pos*/ 1240, 300, 840, /*angle*/ 0, 45, 0, /*behParam*/ (EXCLAMATION_BOX_BP_COINS_3 << 16), /*beh*/ bhvExclamationBox), + OBJECT(/*model*/ MODEL_EXCLAMATION_BOX, /*pos*/ 520, 300, 1500, /*angle*/ 0, 45, 0, /*behParam*/ (EXCLAMATION_BOX_BP_COINS_3 << 16), /*beh*/ bhvExclamationBox), + OBJECT(/*model*/ MODEL_EXCLAMATION_BOX, /*pos*/ -400, 3600, 1880, /*angle*/ 0, 0, 0, /*behParam*/ (EXCLAMATION_BOX_BP_COINS_10 << 16), /*beh*/ bhvExclamationBox), + OBJECT(/*model*/ MODEL_EXCLAMATION_BOX, /*pos*/ -40, 4160, -1280, /*angle*/ 0, 0, 0, /*behParam*/ (EXCLAMATION_BOX_BP_COINS_3 << 16), /*beh*/ bhvExclamationBox), + OBJECT(/*model*/ MODEL_EXCLAMATION_BOX, /*pos*/ -1160, 2920, -840, /*angle*/ 0, 45, 0, /*behParam*/ (EXCLAMATION_BOX_BP_COINS_3 << 16), /*beh*/ bhvExclamationBox), + OBJECT(/*model*/ MODEL_EXCLAMATION_BOX, /*pos*/ -780, 6316, -1020, /*angle*/ 0, 45, 0, /*behParam*/ (EXCLAMATION_BOX_BP_COINS_10 << 16), /*beh*/ bhvExclamationBox), + OBJECT(/*model*/ MODEL_TTC_LARGE_TREADMILL, /*pos*/ 1313, 6190, 1313, /*angle*/ 0, 45, 0, /*behParam*/ ((TREADMILL_BP_UNKNOWN | TREADMILL_BP_LARGE) << 16), /*beh*/ bhvTTCTreadmill), + OBJECT(/*model*/ MODEL_TTC_SMALL_TREADMILL, /*pos*/ 1851, -2488, -98, /*angle*/ 0, 0, 0, /*behParam*/ ((TREADMILL_BP_UNKNOWN | TREADMILL_BP_SMALL) << 16), /*beh*/ bhvTTCTreadmill), + RETURN(), +}; + +static const LevelScript script_ttc_objects_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), RETURN(), }; -static const LevelScript script_func_local_2[] = { +static const LevelScript script_ttc_objects_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), @@ -64,10 +180,10 @@ const LevelScript level_ttc_entry[] = { 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), - JUMP_LINK(script_func_local_1), - JUMP_LINK(script_func_local_2), + JUMP_LINK(script_ttc_objects_1), + JUMP_LINK(script_ttc_objects_2), TERRAIN(/*terrainData*/ ttc_seg7_collision_level), - MACRO_OBJECTS(/*objList*/ ttc_seg7_macro_objs), + JUMP_LINK(script_ttc_macro_objects), SET_BACKGROUND_MUSIC(/*settingsPreset*/ 0x0001, /*seq*/ SEQ_LEVEL_SLIDE), TERRAIN_TYPE(/*terrainType*/ TERRAIN_STONE), END_AREA(), diff --git a/levels/ttm/areas/1/collision.inc.c b/levels/ttm/areas/1/collision.inc.c index dd923702b..29e2e4112 100644 --- a/levels/ttm/areas/1/collision.inc.c +++ b/levels/ttm/areas/1/collision.inc.c @@ -2292,36 +2292,6 @@ const Collision ttm_seg7_area_1_collision[] = { COL_TRI(516, 819, 365), COL_TRI(516, 430, 819), COL_TRI_STOP(), - COL_SPECIAL_INIT(29), - SPECIAL_OBJECT_WITH_YAW(/*preset*/ special_null_start, /*pos*/ 102, -4332, 5734, /*yaw*/ 32), // unused, probably an early way to set initial position - SPECIAL_OBJECT_WITH_YAW(/*preset*/ special_level_geo_03, /*pos*/ -3276, -4423, -3685, /*yaw*/ 0), - SPECIAL_OBJECT_WITH_YAW(/*preset*/ special_level_geo_03, /*pos*/ 7293, -5056, 1429, /*yaw*/ 0), - SPECIAL_OBJECT_WITH_YAW(/*preset*/ special_level_geo_03, /*pos*/ 4938, -5568, 5115, /*yaw*/ 0), - SPECIAL_OBJECT_WITH_YAW(/*preset*/ special_level_geo_04, /*pos*/ 4198, -4508, -2866, /*yaw*/ 0), - SPECIAL_OBJECT_WITH_YAW(/*preset*/ special_level_geo_04, /*pos*/ 1470, -4507, -4298, /*yaw*/ 0), - SPECIAL_OBJECT_WITH_YAW(/*preset*/ special_level_geo_04, /*pos*/ 3277, -4508, -4095, /*yaw*/ 0), - SPECIAL_OBJECT_WITH_YAW(/*preset*/ special_level_geo_05, /*pos*/ 3891, -4489, -3532, /*yaw*/ 0), - SPECIAL_OBJECT_WITH_YAW(/*preset*/ special_level_geo_05, /*pos*/ 3277, -4489, -3071, /*yaw*/ 0), - SPECIAL_OBJECT_WITH_YAW(/*preset*/ special_level_geo_05, /*pos*/ 2509, -4489, -3378, /*yaw*/ 0), - SPECIAL_OBJECT_WITH_YAW(/*preset*/ special_level_geo_05, /*pos*/ 534, -4490, -4176, /*yaw*/ 0), - SPECIAL_OBJECT_WITH_YAW(/*preset*/ special_level_geo_06, /*pos*/ 2358, -4594, -4386, /*yaw*/ 0), - SPECIAL_OBJECT_WITH_YAW(/*preset*/ special_level_geo_06, /*pos*/ 1843, -4515, -3583, /*yaw*/ 0), - SPECIAL_OBJECT_WITH_YAW(/*preset*/ special_level_geo_06, /*pos*/ 2317, -4635, -3838, /*yaw*/ 0), - SPECIAL_OBJECT_WITH_YAW(/*preset*/ special_level_geo_07, /*pos*/ 102, -4363, 5734, /*yaw*/ 0), - SPECIAL_OBJECT_WITH_YAW(/*preset*/ special_level_geo_08, /*pos*/ 4710, -4656, -101, /*yaw*/ 0), - SPECIAL_OBJECT_WITH_YAW(/*preset*/ special_level_geo_09, /*pos*/ 5018, -4249, -3481, /*yaw*/ 0), - SPECIAL_OBJECT_WITH_YAW(/*preset*/ special_level_geo_0A, /*pos*/ -306, -3356, 3584, /*yaw*/ 0), - SPECIAL_OBJECT_WITH_YAW(/*preset*/ special_level_geo_0B, /*pos*/ 1434, -2279, 3277, /*yaw*/ 0), - SPECIAL_OBJECT_WITH_YAW(/*preset*/ special_level_geo_0C, /*pos*/ 2970, -1854, 4301, /*yaw*/ 0), - SPECIAL_OBJECT_WITH_YAW(/*preset*/ special_level_geo_0D, /*pos*/ 4608, -1854, 2560, /*yaw*/ 0), - SPECIAL_OBJECT_WITH_YAW(/*preset*/ special_level_geo_0F, /*pos*/ 2355, 1309, 1229, /*yaw*/ 0), - SPECIAL_OBJECT_WITH_YAW(/*preset*/ special_level_geo_10, /*pos*/ 1843, 1295, 1024, /*yaw*/ 0), - SPECIAL_OBJECT_WITH_YAW(/*preset*/ special_level_geo_11, /*pos*/ 819, 2349, -101, /*yaw*/ 0), - SPECIAL_OBJECT_WITH_YAW(/*preset*/ special_level_geo_12, /*pos*/ -1945, -918, -3071, /*yaw*/ 0), - SPECIAL_OBJECT_WITH_YAW(/*preset*/ special_level_geo_13, /*pos*/ -1842, -1791, -2866, /*yaw*/ 0), - SPECIAL_OBJECT_WITH_YAW(/*preset*/ special_level_geo_14, /*pos*/ -1228, -613, -3071, /*yaw*/ 0), - SPECIAL_OBJECT_WITH_YAW(/*preset*/ special_level_geo_15, /*pos*/ -1740, -204, -2354, /*yaw*/ 0), - SPECIAL_OBJECT_WITH_YAW(/*preset*/ special_level_geo_16, /*pos*/ -2764, -2661, 3789, /*yaw*/ 0), COL_WATER_BOX_INIT(4), COL_WATER_BOX(0, -2047, 2765, 1946, 5069, -4402), COL_WATER_BOX(2, 2358, 2849, 3792, 3474, -3839), diff --git a/levels/ttm/areas/1/macro.inc.c b/levels/ttm/areas/1/macro.inc.c deleted file mode 100644 index a19e73174..000000000 --- a/levels/ttm/areas/1/macro.inc.c +++ /dev/null @@ -1,43 +0,0 @@ -// 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_END(), -}; diff --git a/levels/ttm/areas/2/macro.inc.c b/levels/ttm/areas/2/macro.inc.c deleted file mode 100644 index 4864d011d..000000000 --- a/levels/ttm/areas/2/macro.inc.c +++ /dev/null @@ -1,15 +0,0 @@ -// 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_END(), -}; diff --git a/levels/ttm/areas/3/macro.inc.c b/levels/ttm/areas/3/macro.inc.c deleted file mode 100644 index 460406c80..000000000 --- a/levels/ttm/areas/3/macro.inc.c +++ /dev/null @@ -1,26 +0,0 @@ -// 0x07030338 - 0x07030416 -const MacroObject ttm_seg7_area_3_macro_objs[] = { - MACRO_OBJECT(/*preset*/ macro_yellow_coin_2, /*yaw*/ 0, /*pos*/ -5414, 3830, 6571), - MACRO_OBJECT(/*preset*/ macro_yellow_coin_2, /*yaw*/ 0, /*pos*/ -6328, 3349, 5771), - MACRO_OBJECT(/*preset*/ macro_yellow_coin_2, /*yaw*/ 0, /*pos*/ -6842, 2616, 4400), - MACRO_OBJECT(/*preset*/ macro_1up_sliding, /*yaw*/ 0, /*pos*/ -7128, 1807, 2285), - MACRO_OBJECT(/*preset*/ macro_coin_line_horizontal, /*yaw*/ 0, /*pos*/ -1471, -3848, 1198), - MACRO_OBJECT(/*preset*/ macro_yellow_coin_2, /*yaw*/ 0, /*pos*/ -2839, -618, -6855), - MACRO_OBJECT(/*preset*/ macro_yellow_coin_2, /*yaw*/ 0, /*pos*/ -1242, -1448, -4400), - MACRO_OBJECT(/*preset*/ macro_yellow_coin_2, /*yaw*/ 0, /*pos*/ -2444, -618, -6666), - MACRO_OBJECT(/*preset*/ macro_yellow_coin_2, /*yaw*/ 0, /*pos*/ -2044, -680, -6400), - MACRO_OBJECT(/*preset*/ macro_yellow_coin_2, /*yaw*/ 0, /*pos*/ -1556, -850, -6044), - MACRO_OBJECT(/*preset*/ macro_moving_blue_coin, /*yaw*/ 0, /*pos*/ -7066, 1199, -44), - MACRO_OBJECT(/*preset*/ macro_moving_blue_coin, /*yaw*/ 0, /*pos*/ -7054, 2372, 3854), - MACRO_OBJECT(/*preset*/ macro_moving_blue_coin, /*yaw*/ 0, /*pos*/ -1709, 5054, 7054), - MACRO_OBJECT(/*preset*/ macro_yellow_coin_2, /*yaw*/ 0, /*pos*/ -618, -5826, 5745), - MACRO_OBJECT(/*preset*/ macro_yellow_coin_2, /*yaw*/ 0, /*pos*/ -72, -5923, 6254), - MACRO_OBJECT(/*preset*/ macro_yellow_coin_2, /*yaw*/ 0, /*pos*/ 690, -6027, 6618), - MACRO_OBJECT(/*preset*/ macro_yellow_coin_2, /*yaw*/ 0, /*pos*/ 3490, -6511, 6727), - MACRO_OBJECT(/*preset*/ macro_yellow_coin_2, /*yaw*/ 0, /*pos*/ 4327, -6849, 5963), - MACRO_OBJECT(/*preset*/ macro_yellow_coin_2, /*yaw*/ 0, /*pos*/ 4036, -6695, 6400), - MACRO_OBJECT(/*preset*/ macro_yellow_coin_2, /*yaw*/ 0, /*pos*/ 4690, -7155, 3200), - MACRO_OBJECT(/*preset*/ macro_yellow_coin_2, /*yaw*/ 0, /*pos*/ -3309, -541, -6981), - MACRO_OBJECT(/*preset*/ macro_yellow_coin_2, /*yaw*/ 0, /*pos*/ -1300, -2672, -1550), - MACRO_OBJECT_END(), -}; diff --git a/levels/ttm/areas/4/macro.inc.c b/levels/ttm/areas/4/macro.inc.c deleted file mode 100644 index 3d5d290ca..000000000 --- a/levels/ttm/areas/4/macro.inc.c +++ /dev/null @@ -1,13 +0,0 @@ -// 0x07030418 - 0x07030474 -const MacroObject ttm_seg7_area_4_macro_objs[] = { - MACRO_OBJECT(/*preset*/ macro_coin_line_horizontal, /*yaw*/ 90, /*pos*/ 2128, 1085, -4800), - MACRO_OBJECT(/*preset*/ macro_yellow_coin_2, /*yaw*/ 0, /*pos*/ 5878, 2583, 2430), - MACRO_OBJECT(/*preset*/ macro_yellow_coin_2, /*yaw*/ 0, /*pos*/ 6620, 2348, 1621), - MACRO_OBJECT(/*preset*/ macro_yellow_coin_2, /*yaw*/ 0, /*pos*/ 6642, 1995, -666), - MACRO_OBJECT(/*preset*/ macro_yellow_coin_2, /*yaw*/ 0, /*pos*/ -2000, 4551, 2678), - MACRO_OBJECT(/*preset*/ macro_yellow_coin_2, /*yaw*/ 0, /*pos*/ 847, 3575, 2621), - MACRO_OBJECT(/*preset*/ macro_yellow_coin_2, /*yaw*/ 0, /*pos*/ 3631, 2914, 2819), - MACRO_OBJECT(/*preset*/ macro_yellow_coin_2, /*yaw*/ 0, /*pos*/ 6472, 1613, -2945), - MACRO_OBJECT(/*preset*/ macro_yellow_coin_2, /*yaw*/ 0, /*pos*/ 5272, 1342, -4254), - MACRO_OBJECT_END(), -}; diff --git a/levels/ttm/header.h b/levels/ttm/header.h index 3c0605263..a91ca0d4a 100644 --- a/levels/ttm/header.h +++ b/levels/ttm/header.h @@ -77,7 +77,6 @@ extern const Gfx ttm_seg7_dl_07013608[]; extern const Collision ttm_seg7_collision_pitoune_2[]; extern const Collision ttm_seg7_collision_ukiki_cage[]; extern const Collision ttm_seg7_area_1_collision[]; -extern const MacroObject ttm_seg7_area_1_macro_objs[]; extern const Trajectory ttm_seg7_trajectory_070170A0[]; extern const struct MovtexQuadCollection ttm_movtex_puddle[]; extern Movtex ttm_movtex_tris_begin_waterfall[]; @@ -104,9 +103,6 @@ extern const Collision ttm_seg7_area_2_collision[]; extern const Collision ttm_seg7_area_3_collision[]; extern const Collision ttm_seg7_area_4_collision[]; extern const Collision ttm_seg7_collision_podium_warp[]; -extern const MacroObject ttm_seg7_area_2_macro_objs[]; -extern const MacroObject ttm_seg7_area_3_macro_objs[]; -extern const MacroObject ttm_seg7_area_4_macro_objs[]; // script extern const LevelScript level_ttm_entry[]; diff --git a/levels/ttm/leveldata.c b/levels/ttm/leveldata.c index c8fb72fff..0524ebecf 100644 --- a/levels/ttm/leveldata.c +++ b/levels/ttm/leveldata.c @@ -2,11 +2,7 @@ #include "sm64.h" #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 "textures.h" -#include "dialog_ids.h" #include "make_const_nonconst.h" #include "levels/ttm/texture.inc.c" @@ -46,7 +42,6 @@ #include "levels/ttm/rolling_log/collision.inc.c" #include "levels/ttm/star_cage/collision.inc.c" #include "levels/ttm/areas/1/collision.inc.c" -#include "levels/ttm/areas/1/macro.inc.c" #include "levels/ttm/areas/1/trajectory.inc.c" #include "levels/ttm/areas/1/movtext.inc.c" #include "levels/ttm/areas/2/1/model.inc.c" @@ -65,6 +60,3 @@ #include "levels/ttm/areas/3/collision.inc.c" #include "levels/ttm/areas/4/collision.inc.c" #include "levels/ttm/slide_exit_podium/collision.inc.c" -#include "levels/ttm/areas/2/macro.inc.c" -#include "levels/ttm/areas/3/macro.inc.c" -#include "levels/ttm/areas/4/macro.inc.c" diff --git a/levels/ttm/script.c b/levels/ttm/script.c index 899aef619..3f50beea4 100644 --- a/levels/ttm/script.c +++ b/levels/ttm/script.c @@ -3,6 +3,7 @@ #include "behavior_data.h" #include "model_ids.h" #include "seq_ids.h" +#include "dialog_ids.h" #include "segment_symbols.h" #include "level_commands.h" @@ -15,12 +16,143 @@ #include "make_const_nonconst.h" #include "levels/ttm/header.h" -static const LevelScript script_func_local_1[] = { + +static const LevelScript script_ttm_area_1_macro_objects[] = { + // Macro objects + OBJECT(/*model*/ MODEL_BOBOMB_BUDDY, /*pos*/ 799, -2668, 3320, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvBobombBuddyOpensCannon), + OBJECT(/*model*/ MODEL_DL_CANNON_LID, /*pos*/ 5035, -3994, -3445, /*angle*/ 0, 45, 0, /*behParam*/ (0xC0 << 16), /*beh*/ bhvCannonClosed), + OBJECT(/*model*/ MODEL_WOODEN_SIGNPOST, /*pos*/ 3644, -1304, 1422, /*angle*/ 0, 90, 0, /*behParam*/ (DIALOG_072 << 16), /*beh*/ bhvMessagePanel), + OBJECT(/*model*/ MODEL_WOODEN_SIGNPOST, /*pos*/ 622, -4331, 5466, /*angle*/ 0, 0, 0, /*behParam*/ (DIALOG_094 << 16), /*beh*/ bhvMessagePanel), + OBJECT(/*model*/ MODEL_RED_COIN, /*pos*/ 1450, -2750, -4250, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvRedCoin), + OBJECT(/*model*/ MODEL_RED_COIN, /*pos*/ 2550, -2750, -3400, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvRedCoin), + OBJECT(/*model*/ MODEL_RED_COIN, /*pos*/ 4150, -2700, -2800, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvRedCoin), + OBJECT(/*model*/ MODEL_RED_COIN, /*pos*/ -1600, -1650, -2500, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvRedCoin), + OBJECT(/*model*/ MODEL_RED_COIN, /*pos*/ -1200, -1600, -3250, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvRedCoin), + OBJECT(/*model*/ MODEL_RED_COIN, /*pos*/ -1850, 100, -2850, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvRedCoin), + OBJECT(/*model*/ MODEL_RED_COIN, /*pos*/ -1500, -800, -2750, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvRedCoin), + OBJECT(/*model*/ MODEL_WOODEN_SIGNPOST, /*pos*/ -1126, -3448, -4400, /*angle*/ 0, 180, 0, /*behParam*/ (DIALOG_091 << 16), /*beh*/ bhvMessagePanel), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ 1740, -4236, 5320, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvGoombaTripletSpawner), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ 4540, -4607, 1060, /*angle*/ 0, 0, 0, /*behParam*/ ((COIN_FORMATION_FLAG_RING ) << 16), /*beh*/ bhvCoinFormation), + OBJECT(/*model*/ MODEL_1UP, /*pos*/ -3713, -4130, 3530, /*angle*/ 0, 0, 0, /*behParam*/ (MUSHROOM_BP_REQUIRES_NONE << 16), /*beh*/ bhv1Up), + OBJECT(/*model*/ MODEL_BLACK_BOBOMB, /*pos*/ -3507, -2480, -1046, /*angle*/ 0, 0, 0, /*behParam*/ (BOBOMB_BP_STYPE_GENERIC << 16), /*beh*/ bhvBobomb), + OBJECT(/*model*/ MODEL_BLACK_BOBOMB, /*pos*/ -3538, -2409, -61, /*angle*/ 0, 0, 0, /*behParam*/ (BOBOMB_BP_STYPE_GENERIC << 16), /*beh*/ bhvBobomb), + OBJECT(/*model*/ MODEL_BLACK_BOBOMB, /*pos*/ -3538, -2330, 1046, /*angle*/ 0, 0, 0, /*behParam*/ (BOBOMB_BP_STYPE_GENERIC << 16), /*beh*/ bhvBobomb), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ -521, -2047, 3568, /*angle*/ 0, 82, 0, /*behParam*/ ((COIN_FORMATION_FLAG_NONE ) << 16), /*beh*/ bhvCoinFormation), + OBJECT(/*model*/ MODEL_BLACK_BOBOMB, /*pos*/ 2369, -1451, -3876, /*angle*/ 0, 0, 0, /*behParam*/ (BOBOMB_BP_STYPE_GENERIC << 16), /*beh*/ bhvBobomb), + OBJECT(/*model*/ MODEL_BLACK_BOBOMB, /*pos*/ 707, -1223, -3846, /*angle*/ 0, 0, 0, /*behParam*/ (BOBOMB_BP_STYPE_GENERIC << 16), /*beh*/ bhvBobomb), + OBJECT(/*model*/ MODEL_1UP, /*pos*/ -1010, -705, -3385, /*angle*/ 0, 0, 0, /*behParam*/ (MUSHROOM_BP_REQUIRES_NONE << 16), /*beh*/ bhv1Up), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ -584, 195, 1476, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvGoombaTripletSpawner), + OBJECT(/*model*/ MODEL_1UP, /*pos*/ 1530, 620, 1670, /*angle*/ 0, 0, 0, /*behParam*/ (MUSHROOM_BP_REQUIRES_NONE << 16), /*beh*/ bhv1Up), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ 3476, 708, -896, /*angle*/ 0, 0, 0, /*behParam*/ ((COIN_FORMATION_FLAG_NONE ) << 16), /*beh*/ bhvCoinFormation), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ 2461, 1461, 1960, /*angle*/ 0, 125, 0, /*behParam*/ ((COIN_FORMATION_FLAG_NONE ) << 16), /*beh*/ bhvCoinFormation), + OBJECT(/*model*/ MODEL_EXCLAMATION_BOX, /*pos*/ 3261, -2553, -4092, /*angle*/ 0, 0, 0, /*behParam*/ (EXCLAMATION_BOX_BP_1UP_WALKING << 16), /*beh*/ bhvExclamationBox), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ -1907, -861, -3138, /*angle*/ 0, 330, 0, /*behParam*/ ((COIN_FORMATION_FLAG_FLYING) << 16), /*beh*/ bhvCoinFormation), + OBJECT(/*model*/ MODEL_BREAKABLE_BOX, /*pos*/ 1950, 880, 1321, /*angle*/ 0, 30, 0, /*behParam*/ (BREAKABLE_BOX_BP_NO_COINS << 16), /*beh*/ bhvHiddenObject), + OBJECT(/*model*/ MODEL_PURPLE_SWITCH, /*pos*/ -1200, 1543, 460, /*angle*/ 0, 50, 0, /*behParam*/ 0x00000000, /*beh*/ bhvFloorSwitchHiddenObjects), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ -600, 1177, -1340, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvGoombaTripletSpawner), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ -780, -4580, 4440, /*angle*/ 0, 0, 0, /*behParam*/ (FISH_SPAWNER_BP_FEW_BLUE << 16), /*beh*/ bhvFishSpawner), + OBJECT(/*model*/ MODEL_BREAKABLE_BOX, /*pos*/ -900, 1540, 580, /*angle*/ 0, 55, 0, /*behParam*/ (BREAKABLE_BOX_BP_NO_COINS << 16), /*beh*/ bhvHiddenObject), + OBJECT(/*model*/ MODEL_CHUCKYA, /*pos*/ -2676, -2145, 2923, /*angle*/ 0, 270, 0, /*behParam*/ 0x00000000, /*beh*/ bhvChuckya), + OBJECT(/*model*/ MODEL_RED_COIN, /*pos*/ 1840, -2880, -3600, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvRedCoin), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ -880, 1750, 580, /*angle*/ 0, 0, 0, /*behParam*/ ((COIN_FORMATION_FLAG_FLYING | COIN_FORMATION_FLAG_VERTICAL) << 16), /*beh*/ bhvCoinFormation), + OBJECT(/*model*/ MODEL_FLYGUY, /*pos*/ 2300, -1384, 3753, /*angle*/ 0, 0, 0, /*behParam*/ (FLY_GUY_BP_SHOOTS_FIRE << 16), /*beh*/ bhvFlyGuy), + OBJECT(/*model*/ MODEL_BUTTERFLY, /*pos*/ -606, 1186, -1290, /*angle*/ 0, 0, 0, /*behParam*/ (TRIPLET_BUTTERFLY_BP_0 << 16), /*beh*/ bhvTripletButterfly), + OBJECT(/*model*/ MODEL_BREAKABLE_BOX, /*pos*/ 4980, -4607, 2680, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvJumpingBox), + // Special objects + OBJECT(/*model*/ MODEL_LEVEL_GEOMETRY_03, /*pos*/ -3276, -4423, -3685, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvStaticObject), + OBJECT(/*model*/ MODEL_LEVEL_GEOMETRY_03, /*pos*/ 7293, -5056, 1429, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvStaticObject), + OBJECT(/*model*/ MODEL_LEVEL_GEOMETRY_03, /*pos*/ 4938, -5568, 5115, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvStaticObject), + OBJECT(/*model*/ MODEL_LEVEL_GEOMETRY_04, /*pos*/ 4198, -4508, -2866, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvStaticObject), + OBJECT(/*model*/ MODEL_LEVEL_GEOMETRY_04, /*pos*/ 1470, -4507, -4298, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvStaticObject), + OBJECT(/*model*/ MODEL_LEVEL_GEOMETRY_04, /*pos*/ 3277, -4508, -4095, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvStaticObject), + OBJECT(/*model*/ MODEL_LEVEL_GEOMETRY_05, /*pos*/ 3891, -4489, -3532, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvStaticObject), + OBJECT(/*model*/ MODEL_LEVEL_GEOMETRY_05, /*pos*/ 3277, -4489, -3071, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvStaticObject), + OBJECT(/*model*/ MODEL_LEVEL_GEOMETRY_05, /*pos*/ 2509, -4489, -3378, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvStaticObject), + OBJECT(/*model*/ MODEL_LEVEL_GEOMETRY_05, /*pos*/ 534, -4490, -4176, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvStaticObject), + OBJECT(/*model*/ MODEL_LEVEL_GEOMETRY_06, /*pos*/ 2358, -4594, -4386, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvStaticObject), + OBJECT(/*model*/ MODEL_LEVEL_GEOMETRY_06, /*pos*/ 1843, -4515, -3583, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvStaticObject), + OBJECT(/*model*/ MODEL_LEVEL_GEOMETRY_06, /*pos*/ 2317, -4635, -3838, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvStaticObject), + OBJECT(/*model*/ MODEL_LEVEL_GEOMETRY_07, /*pos*/ 102, -4363, 5734, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvStaticObject), + OBJECT(/*model*/ MODEL_LEVEL_GEOMETRY_08, /*pos*/ 4710, -4656, -101, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvStaticObject), + OBJECT(/*model*/ MODEL_LEVEL_GEOMETRY_09, /*pos*/ 5018, -4249, -3481, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvStaticObject), + OBJECT(/*model*/ MODEL_LEVEL_GEOMETRY_0A, /*pos*/ -306, -3356, 3584, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvStaticObject), + OBJECT(/*model*/ MODEL_LEVEL_GEOMETRY_0B, /*pos*/ 1434, -2279, 3277, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvStaticObject), + OBJECT(/*model*/ MODEL_LEVEL_GEOMETRY_0C, /*pos*/ 2970, -1854, 4301, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvStaticObject), + OBJECT(/*model*/ MODEL_LEVEL_GEOMETRY_0D, /*pos*/ 4608, -1854, 2560, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvStaticObject), + OBJECT(/*model*/ MODEL_LEVEL_GEOMETRY_0F, /*pos*/ 2355, 1309, 1229, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvStaticObject), + OBJECT(/*model*/ MODEL_LEVEL_GEOMETRY_10, /*pos*/ 1843, 1295, 1024, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvStaticObject), + OBJECT(/*model*/ MODEL_LEVEL_GEOMETRY_11, /*pos*/ 819, 2349, -101, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvStaticObject), + OBJECT(/*model*/ MODEL_LEVEL_GEOMETRY_12, /*pos*/ -1945, -918, -3071, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvStaticObject), + OBJECT(/*model*/ MODEL_LEVEL_GEOMETRY_13, /*pos*/ -1842, -1791, -2866, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvStaticObject), + OBJECT(/*model*/ MODEL_LEVEL_GEOMETRY_14, /*pos*/ -1228, -613, -3071, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvStaticObject), + OBJECT(/*model*/ MODEL_LEVEL_GEOMETRY_15, /*pos*/ -1740, -204, -2354, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvStaticObject), + OBJECT(/*model*/ MODEL_LEVEL_GEOMETRY_16, /*pos*/ -2764, -2661, 3789, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvStaticObject), + RETURN(), +}; + +static const LevelScript script_ttm_area_2_macro_objects[] = { + // Macro objects + OBJECT(/*model*/ MODEL_NONE, /*pos*/ 6100, 4836, 6981, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvHidden1upTrigger), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ 6645, 4800, 7563, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvHidden1upTrigger), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ 7845, 4836, 6327, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvHidden1upTrigger), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ 7263, 4836, 5745, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvHidden1upTrigger), + OBJECT(/*model*/ MODEL_1UP, /*pos*/ 6936, 4800, 6654, /*angle*/ 0, 0, 0, /*behParam*/ (4 << 16), /*beh*/ bhvHidden1up), + OBJECT(/*model*/ MODEL_YELLOW_COIN, /*pos*/ 6281, 4836, 6472, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvOneCoin), + OBJECT(/*model*/ MODEL_1UP, /*pos*/ 6754, 4800, 5963, /*angle*/ 0, 0, 0, /*behParam*/ (MUSHROOM_BP_REQUIRES_NONE << 16), /*beh*/ bhv1Up), + OBJECT(/*model*/ MODEL_1UP, /*pos*/ 1764, 2943, 1480, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhv1upSliding), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ 2972, 3963, 2690, /*angle*/ 0, 45, 0, /*behParam*/ ((COIN_FORMATION_FLAG_NONE) << 16), /*beh*/ bhvCoinFormation), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ 27, 2145, -290, /*angle*/ 0, 45, 0, /*behParam*/ ((COIN_FORMATION_FLAG_NONE) << 16), /*beh*/ bhvCoinFormation), + OBJECT(/*model*/ MODEL_YELLOW_COIN, /*pos*/ -2763, -37, -2981, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvOneCoin), + RETURN(), +}; + +static const LevelScript script_ttm_area_3_macro_objects[] = { + // Macro objects + OBJECT(/*model*/ MODEL_YELLOW_COIN, /*pos*/ -5414, 3830, 6571, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvOneCoin), + OBJECT(/*model*/ MODEL_YELLOW_COIN, /*pos*/ -6328, 3349, 5771, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvOneCoin), + OBJECT(/*model*/ MODEL_YELLOW_COIN, /*pos*/ -6842, 2616, 4400, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvOneCoin), + OBJECT(/*model*/ MODEL_1UP, /*pos*/ -7128, 1807, 2285, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhv1upSliding), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ -1471, -3848, 1198, /*angle*/ 0, 0, 0, /*behParam*/ ((COIN_FORMATION_FLAG_NONE) << 16), /*beh*/ bhvCoinFormation), + OBJECT(/*model*/ MODEL_YELLOW_COIN, /*pos*/ -2839, -618, -6855, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvOneCoin), + OBJECT(/*model*/ MODEL_YELLOW_COIN, /*pos*/ -1242, -1448, -4400, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvOneCoin), + OBJECT(/*model*/ MODEL_YELLOW_COIN, /*pos*/ -2444, -618, -6666, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvOneCoin), + OBJECT(/*model*/ MODEL_YELLOW_COIN, /*pos*/ -2044, -680, -6400, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvOneCoin), + OBJECT(/*model*/ MODEL_YELLOW_COIN, /*pos*/ -1556, -850, -6044, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvOneCoin), + OBJECT(/*model*/ MODEL_BLUE_COIN, /*pos*/ -7066, 1199, -44, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvMovingBlueCoin), + OBJECT(/*model*/ MODEL_BLUE_COIN, /*pos*/ -7054, 2372, 3854, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvMovingBlueCoin), + OBJECT(/*model*/ MODEL_BLUE_COIN, /*pos*/ -1709, 5054, 7054, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvMovingBlueCoin), + OBJECT(/*model*/ MODEL_YELLOW_COIN, /*pos*/ -618, -5826, 5745, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvOneCoin), + OBJECT(/*model*/ MODEL_YELLOW_COIN, /*pos*/ -72, -5923, 6254, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvOneCoin), + OBJECT(/*model*/ MODEL_YELLOW_COIN, /*pos*/ 690, -6027, 6618, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvOneCoin), + OBJECT(/*model*/ MODEL_YELLOW_COIN, /*pos*/ 3490, -6511, 6727, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvOneCoin), + OBJECT(/*model*/ MODEL_YELLOW_COIN, /*pos*/ 4327, -6849, 5963, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvOneCoin), + OBJECT(/*model*/ MODEL_YELLOW_COIN, /*pos*/ 4036, -6695, 6400, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvOneCoin), + OBJECT(/*model*/ MODEL_YELLOW_COIN, /*pos*/ 4690, -7155, 3200, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvOneCoin), + OBJECT(/*model*/ MODEL_YELLOW_COIN, /*pos*/ -3309, -541, -6981, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvOneCoin), + OBJECT(/*model*/ MODEL_YELLOW_COIN, /*pos*/ -1300, -2672, -1550, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvOneCoin), + RETURN(), +}; + +static const LevelScript script_ttm_area_4_macro_objects[] = { + // Macro objects + OBJECT(/*model*/ MODEL_NONE, /*pos*/ 2128, 1085, -4800, /*angle*/ 0, 90, 0, /*behParam*/ ((COIN_FORMATION_FLAG_NONE) << 16), /*beh*/ bhvCoinFormation), + OBJECT(/*model*/ MODEL_YELLOW_COIN, /*pos*/ 5878, 2583, 2430, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvOneCoin), + OBJECT(/*model*/ MODEL_YELLOW_COIN, /*pos*/ 6620, 2348, 1621, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvOneCoin), + OBJECT(/*model*/ MODEL_YELLOW_COIN, /*pos*/ 6642, 1995, -666, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvOneCoin), + OBJECT(/*model*/ MODEL_YELLOW_COIN, /*pos*/ -2000, 4551, 2678, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvOneCoin), + OBJECT(/*model*/ MODEL_YELLOW_COIN, /*pos*/ 847, 3575, 2621, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvOneCoin), + OBJECT(/*model*/ MODEL_YELLOW_COIN, /*pos*/ 3631, 2914, 2819, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvOneCoin), + OBJECT(/*model*/ MODEL_YELLOW_COIN, /*pos*/ 6472, 1613, -2945, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvOneCoin), + OBJECT(/*model*/ MODEL_YELLOW_COIN, /*pos*/ 5272, 1342, -4254, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvOneCoin), + RETURN(), +}; + +static const LevelScript script_ttm_area_1_objects_1[] = { OBJECT(/*model*/ MODEL_TTM_ROLLING_LOG, /*pos*/ 4360, -1722, 4001, /*angle*/ 0, 48, 0, /*behParam*/ 0x00000000, /*beh*/ bhvTtmRollingLog), RETURN(), }; -static const LevelScript script_func_local_2[] = { +static const LevelScript script_ttm_area_1_objects_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), @@ -41,7 +173,7 @@ static const LevelScript script_func_local_2[] = { RETURN(), }; -static const LevelScript script_func_local_3[] = { +static const LevelScript script_ttm_area_1_objects_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), @@ -51,7 +183,7 @@ static const LevelScript script_func_local_3[] = { RETURN(), }; -static const LevelScript script_func_local_4[] = { +static const LevelScript script_ttm_area_2_objects_1[] = { 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), @@ -59,7 +191,7 @@ static const LevelScript script_func_local_4[] = { RETURN(), }; -static const LevelScript script_func_local_5[] = { +static const LevelScript script_ttm_area_3_objects_1[] = { 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), @@ -69,17 +201,13 @@ static const LevelScript script_func_local_5[] = { RETURN(), }; -static const LevelScript script_func_local_6[] = { +static const LevelScript script_ttm_area_4_objects_1[] = { 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), RETURN(), }; -static const LevelScript script_func_local_7[] = { - RETURN(), -}; - const LevelScript level_ttm_entry[] = { INIT_LEVEL(), LOAD_YAY0( /*seg*/ 0x07, _ttm_segment_7SegmentRomStart, _ttm_segment_7SegmentRomEnd), @@ -134,11 +262,11 @@ const LevelScript level_ttm_entry[] = { 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), - JUMP_LINK(script_func_local_1), - JUMP_LINK(script_func_local_2), - JUMP_LINK(script_func_local_3), + JUMP_LINK(script_ttm_area_1_objects_1), + JUMP_LINK(script_ttm_area_1_objects_2), + JUMP_LINK(script_ttm_area_1_objects_3), TERRAIN(/*terrainData*/ ttm_seg7_area_1_collision), - MACRO_OBJECTS(/*objList*/ ttm_seg7_area_1_macro_objs), + JUMP_LINK(script_ttm_area_1_macro_objects), SET_BACKGROUND_MUSIC(/*settingsPreset*/ 0x0000, /*seq*/ SEQ_LEVEL_GRASS), TERRAIN_TYPE(/*terrainType*/ TERRAIN_STONE), END_AREA(), @@ -148,9 +276,9 @@ const LevelScript level_ttm_entry[] = { 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), - JUMP_LINK(script_func_local_4), + JUMP_LINK(script_ttm_area_2_objects_1), TERRAIN(/*terrainData*/ ttm_seg7_area_2_collision), - MACRO_OBJECTS(/*objList*/ ttm_seg7_area_2_macro_objs), + JUMP_LINK(script_ttm_area_2_macro_objects), INSTANT_WARP(/*index*/ 2, /*destArea*/ 3, /*displace*/ 10240, 7168, 10240), SET_BACKGROUND_MUSIC(/*settingsPreset*/ 0x0001, /*seq*/ SEQ_LEVEL_SLIDE), TERRAIN_TYPE(/*terrainType*/ TERRAIN_SLIDE), @@ -159,9 +287,9 @@ const LevelScript level_ttm_entry[] = { 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), - JUMP_LINK(script_func_local_5), + JUMP_LINK(script_ttm_area_3_objects_1), TERRAIN(/*terrainData*/ ttm_seg7_area_3_collision), - MACRO_OBJECTS(/*objList*/ ttm_seg7_area_3_macro_objs), + JUMP_LINK(script_ttm_area_3_macro_objects), INSTANT_WARP(/*index*/ 3, /*destArea*/ 4, /*displace*/ -11264, 13312, 3072), SET_BACKGROUND_MUSIC(/*settingsPreset*/ 0x0001, /*seq*/ SEQ_LEVEL_SLIDE), TERRAIN_TYPE(/*terrainType*/ TERRAIN_SLIDE), @@ -172,10 +300,9 @@ const LevelScript level_ttm_entry[] = { 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), - JUMP_LINK(script_func_local_6), - JUMP_LINK(script_func_local_7), + JUMP_LINK(script_ttm_area_4_objects_1), TERRAIN(/*terrainData*/ ttm_seg7_area_4_collision), - MACRO_OBJECTS(/*objList*/ ttm_seg7_area_4_macro_objs), + JUMP_LINK(script_ttm_area_4_macro_objects), SET_BACKGROUND_MUSIC(/*settingsPreset*/ 0x0001, /*seq*/ SEQ_LEVEL_SLIDE), TERRAIN_TYPE(/*terrainType*/ TERRAIN_SLIDE), END_AREA(), diff --git a/levels/vcutm/areas/1/collision.inc.c b/levels/vcutm/areas/1/collision.inc.c index f0489e16b..97536b80e 100644 --- a/levels/vcutm/areas/1/collision.inc.c +++ b/levels/vcutm/areas/1/collision.inc.c @@ -843,7 +843,5 @@ const Collision vcutm_seg7_collision[] = { COL_TRI(32, 28, 39), COL_TRI(40, 27, 30), COL_TRI_STOP(), - COL_SPECIAL_INIT(1), - SPECIAL_OBJECT_WITH_YAW(/*preset*/ special_null_start, /*pos*/ -6143, 5734, -6143, /*yaw*/ 0), // unused, probably an early way to set initial position COL_END(), }; diff --git a/levels/vcutm/areas/1/macro.inc.c b/levels/vcutm/areas/1/macro.inc.c deleted file mode 100644 index 04fcfc104..000000000 --- a/levels/vcutm/areas/1/macro.inc.c +++ /dev/null @@ -1,35 +0,0 @@ -// 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_END(), -}; diff --git a/levels/vcutm/header.h b/levels/vcutm/header.h index eb88d7312..1bd67e305 100644 --- a/levels/vcutm/header.h +++ b/levels/vcutm/header.h @@ -14,7 +14,6 @@ extern const Gfx vcutm_seg7_dl_07008E10[]; extern const Gfx vcutm_seg7_dl_070093E8[]; extern const Gfx vcutm_seg7_dl_070096E0[]; extern const Collision vcutm_seg7_collision[]; -extern const MacroObject vcutm_seg7_macro_objs[]; extern const Collision vcutm_seg7_collision_0700AC44[]; // script diff --git a/levels/vcutm/leveldata.c b/levels/vcutm/leveldata.c index bb2aa0ecc..956442ae1 100644 --- a/levels/vcutm/leveldata.c +++ b/levels/vcutm/leveldata.c @@ -2,9 +2,6 @@ #include "sm64.h" #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 "textures.h" #include "make_const_nonconst.h" @@ -15,5 +12,4 @@ #include "levels/vcutm/areas/1/4/model.inc.c" #include "levels/vcutm/seesaw/model.inc.c" #include "levels/vcutm/areas/1/collision.inc.c" -#include "levels/vcutm/areas/1/macro.inc.c" #include "levels/vcutm/seesaw/collision.inc.c" diff --git a/levels/vcutm/script.c b/levels/vcutm/script.c index 01e08bdfa..3a096011d 100644 --- a/levels/vcutm/script.c +++ b/levels/vcutm/script.c @@ -16,10 +16,46 @@ #include "make_const_nonconst.h" #include "levels/vcutm/header.h" -static const LevelScript script_func_local_1[] = { + +static const LevelScript script_vcutm_macro_objects[] = { + // Macro objects + OBJECT(/*model*/ MODEL_EXCLAMATION_BOX, /*pos*/ -3434, 2951, -3076, /*angle*/ 0, 0, 0, /*behParam*/ (EXCLAMATION_BOX_BP_1UP_WALKING << 16), /*beh*/ bhvExclamationBox), + OBJECT(/*model*/ MODEL_1UP, /*pos*/ -4711, 1594, -2532, /*angle*/ 0, 0, 0, /*behParam*/ (MUSHROOM_BP_REQUIRES_NONE << 16), /*beh*/ bhv1Up), + OBJECT(/*model*/ MODEL_1UP, /*pos*/ -5952, -393, -1141, /*angle*/ 0, 0, 0, /*behParam*/ (MUSHROOM_BP_REQUIRES_NONE << 16), /*beh*/ bhv1Up), + OBJECT(/*model*/ MODEL_EXCLAMATION_BOX, /*pos*/ 3980, 300, -6220, /*angle*/ 0, 0, 0, /*behParam*/ (EXCLAMATION_BOX_BP_VANISH_CAP << 16), /*beh*/ bhvExclamationBox), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ 4200, 0, -4940, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvHidden1upTrigger), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ 4740, 0, -4940, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvHidden1upTrigger), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ 4740, 0, -4400, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvHidden1upTrigger), + OBJECT(/*model*/ MODEL_1UP, /*pos*/ 4460, 0, -4700, /*angle*/ 0, 0, 0, /*behParam*/ (3 << 16), /*beh*/ bhvHidden1up), + OBJECT(/*model*/ MODEL_YELLOW_COIN, /*pos*/ 4200, 0, -4940, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvOneCoin), + OBJECT(/*model*/ MODEL_YELLOW_COIN, /*pos*/ 4740, 0, -4940, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvOneCoin), + OBJECT(/*model*/ MODEL_YELLOW_COIN, /*pos*/ 4740, 0, -4400, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvOneCoin), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ -2100, -3276, 20, /*angle*/ 0, 0, 0, /*behParam*/ ((COIN_FORMATION_FLAG_NONE) << 16), /*beh*/ bhvCoinFormation), + OBJECT(/*model*/ MODEL_AMP, /*pos*/ -2100, -2800, -3866, /*angle*/ 0, 0, 0, /*behParam*/ (1 << 16), /*beh*/ bhvCirclingAmp), + OBJECT(/*model*/ MODEL_EXCLAMATION_BOX, /*pos*/ -2145, -2160, -5963, /*angle*/ 0, 0, 0, /*behParam*/ (EXCLAMATION_BOX_BP_COINS_3 << 16), /*beh*/ bhvExclamationBox), + OBJECT(/*model*/ MODEL_RED_COIN, /*pos*/ -5920, 4575, -4618, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvRedCoin), + OBJECT(/*model*/ MODEL_RED_COIN, /*pos*/ -4740, 3581, -3854, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvRedCoin), + OBJECT(/*model*/ MODEL_RED_COIN, /*pos*/ -4727, -227, -1161, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvRedCoin), + OBJECT(/*model*/ MODEL_RED_COIN, /*pos*/ -3418, -559, -836, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvRedCoin), + OBJECT(/*model*/ MODEL_RED_COIN, /*pos*/ -600, -1400, -6300, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvRedCoin), + OBJECT(/*model*/ MODEL_RED_COIN, /*pos*/ 900, -1400, -6300, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvRedCoin), + OBJECT(/*model*/ MODEL_RED_COIN, /*pos*/ 2750, -800, -6300, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvRedCoin), + OBJECT(/*model*/ MODEL_RED_COIN, /*pos*/ 4509, 0, -5527, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvRedCoin), + OBJECT(/*model*/ MODEL_BOWLING_BALL, /*pos*/ -1740, -3240, 1580, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvFireSpitter), + OBJECT(/*model*/ MODEL_BOWLING_BALL, /*pos*/ -2400, -3240, 600, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvFireSpitter), + OBJECT(/*model*/ MODEL_BOWLING_BALL, /*pos*/ -1740, -3240, 0, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvFireSpitter), + OBJECT(/*model*/ MODEL_BOWLING_BALL, /*pos*/ -2400, -3240, -1079, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvFireSpitter), + OBJECT(/*model*/ MODEL_BOWLING_BALL, /*pos*/ -2920, -3240, 880, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvFireSpitter), + OBJECT(/*model*/ MODEL_BOWLING_BALL, /*pos*/ -4000, -3240, 1600, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvFireSpitter), + OBJECT(/*model*/ MODEL_EXCLAMATION_BOX, /*pos*/ -6020, -2976, 1240, /*angle*/ 0, 0, 0, /*behParam*/ (EXCLAMATION_BOX_BP_VANISH_CAP << 16), /*beh*/ bhvExclamationBox), + OBJECT(/*model*/ MODEL_BOWLING_BALL, /*pos*/ -2100, -2840, -3866, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvFireSpitter), + OBJECT(/*model*/ MODEL_BOWLING_BALL, /*pos*/ -4600, 5760, -6140, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvFireSpitter), + RETURN(), +}; + +static const LevelScript script_vcutm_objects_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), - //! @bug invalid model IDs - model ID 0x37 isn't loaded OBJECT(/*model*/ MODEL_NONE, /*pos*/ 3251, -1082, -6256, /*angle*/ 0, 270, 0, /*behParam*/ 0x014B0000, /*beh*/ bhvCheckerboardElevatorGroup), OBJECT(/*model*/ MODEL_NONE, /*pos*/ 2355, -1901, -6256, /*angle*/ 0, 270, 0, /*behParam*/ 0x014B0000, /*beh*/ bhvCheckerboardElevatorGroup), OBJECT(/*model*/ MODEL_NONE, /*pos*/ 1459, -1594, -6256, /*angle*/ 0, 90, 0, /*behParam*/ 0x014B0000, /*beh*/ bhvCheckerboardElevatorGroup), @@ -27,12 +63,12 @@ static const LevelScript script_func_local_1[] = { RETURN(), }; -static const LevelScript script_func_local_2[] = { +static const LevelScript script_vcutm_objects_2[] = { OBJECT(/*model*/ MODEL_CAP_SWITCH, /*pos*/ 4506, 26, -6246, /*angle*/ 0, 0, 0, /*behParam*/ 0x00020000, /*beh*/ bhvCapSwitch), RETURN(), }; -static const LevelScript script_func_local_3[] = { +static const LevelScript script_vcutm_objects_3[] = { OBJECT(/*model*/ MODEL_NONE, /*pos*/ 4600, 250, -4500, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvHiddenRedCoinStar), RETURN(), }; @@ -58,11 +94,11 @@ const LevelScript level_vcutm_entry[] = { 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), - JUMP_LINK(script_func_local_3), - JUMP_LINK(script_func_local_1), - JUMP_LINK(script_func_local_2), + JUMP_LINK(script_vcutm_objects_1), + JUMP_LINK(script_vcutm_objects_2), + JUMP_LINK(script_vcutm_objects_3), TERRAIN(/*terrainData*/ vcutm_seg7_collision), - MACRO_OBJECTS(/*objList*/ vcutm_seg7_macro_objs), + JUMP_LINK(script_vcutm_macro_objects), SHOW_DIALOG(/*index*/ 0x00, DIALOG_129), SET_BACKGROUND_MUSIC(/*settingsPreset*/ 0x0000, /*seq*/ SEQ_LEVEL_SLIDE), TERRAIN_TYPE(/*terrainType*/ TERRAIN_STONE), diff --git a/levels/wdw/areas/1/collision.inc.c b/levels/wdw/areas/1/collision.inc.c index 36b06e9c3..c4864aa29 100644 --- a/levels/wdw/areas/1/collision.inc.c +++ b/levels/wdw/areas/1/collision.inc.c @@ -1345,8 +1345,6 @@ const Collision wdw_seg7_area_1_collision[] = { COL_TRI(85, 157, 158), COL_TRI(85, 159, 157), COL_TRI_STOP(), - COL_SPECIAL_INIT(1), - SPECIAL_OBJECT_WITH_YAW(/*preset*/ special_null_start, /*pos*/ 3395, 1280, 384, /*yaw*/ 128), // unused, probably an early way to set initial position COL_WATER_BOX_INIT(1), COL_WATER_BOX(0, -3839, -3839, 4608, 4608, 31), COL_END(), diff --git a/levels/wdw/areas/1/macro.inc.c b/levels/wdw/areas/1/macro.inc.c deleted file mode 100644 index 74d7d8fec..000000000 --- a/levels/wdw/areas/1/macro.inc.c +++ /dev/null @@ -1,65 +0,0 @@ -// 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, 3200, 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_END(), -}; diff --git a/levels/wdw/areas/2/collision.inc.c b/levels/wdw/areas/2/collision.inc.c index 2473157f1..9562a762c 100644 --- a/levels/wdw/areas/2/collision.inc.c +++ b/levels/wdw/areas/2/collision.inc.c @@ -1317,9 +1317,6 @@ const Collision wdw_seg7_area_2_collision[] = { COL_TRI(129, 164, 162), COL_TRI(131, 163, 165), COL_TRI_STOP(), - COL_SPECIAL_INIT(2), - SPECIAL_OBJECT(/*preset*/ special_bubble_tree, /*pos*/ 1664, -2457, -946), - SPECIAL_OBJECT(/*preset*/ special_bubble_tree, /*pos*/ 1664, -2457, -1637), COL_WATER_BOX_INIT(1), COL_WATER_BOX(0, -3839, -3839, 4608, 4608, -127), COL_END(), diff --git a/levels/wdw/areas/2/macro.inc.c b/levels/wdw/areas/2/macro.inc.c deleted file mode 100644 index f2619ad96..000000000 --- a/levels/wdw/areas/2/macro.inc.c +++ /dev/null @@ -1,45 +0,0 @@ -// 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_END(), -}; diff --git a/levels/wdw/header.h b/levels/wdw/header.h index 4d5a5bd9d..97051fb71 100644 --- a/levels/wdw/header.h +++ b/levels/wdw/header.h @@ -30,9 +30,7 @@ extern const Gfx wdw_seg7_dl_07013B70[]; extern const Gfx wdw_seg7_dl_07013E40[]; extern const Gfx wdw_seg7_dl_070140E0[]; extern const Collision wdw_seg7_area_1_collision[]; -extern const MacroObject wdw_seg7_area_1_macro_objs[]; extern const Collision wdw_seg7_area_2_collision[]; -extern const MacroObject wdw_seg7_area_2_macro_objs[]; extern const Collision wdw_seg7_collision_square_floating_platform[]; extern const Collision wdw_seg7_collision_arrow_lift[]; extern const Collision wdw_seg7_collision_070184C8[]; diff --git a/levels/wdw/leveldata.c b/levels/wdw/leveldata.c index 6eba89e80..52d7bf06d 100644 --- a/levels/wdw/leveldata.c +++ b/levels/wdw/leveldata.c @@ -2,11 +2,7 @@ #include "sm64.h" #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 "textures.h" -#include "dialog_ids.h" #include "make_const_nonconst.h" #include "levels/wdw/texture.inc.c" @@ -24,9 +20,7 @@ #include "levels/wdw/rectangular_floating_platform/model.inc.c" #include "levels/wdw/rotating_platform/model.inc.c" #include "levels/wdw/areas/1/collision.inc.c" -#include "levels/wdw/areas/1/macro.inc.c" #include "levels/wdw/areas/2/collision.inc.c" -#include "levels/wdw/areas/2/macro.inc.c" #include "levels/wdw/square_floating_platform/collision.inc.c" #include "levels/wdw/arrow_lift/collision.inc.c" #include "levels/wdw/water_level_diamond/collision.inc.c" // Unused diff --git a/levels/wdw/script.c b/levels/wdw/script.c index e647ec140..c32840487 100644 --- a/levels/wdw/script.c +++ b/levels/wdw/script.c @@ -3,6 +3,7 @@ #include "behavior_data.h" #include "model_ids.h" #include "seq_ids.h" +#include "dialog_ids.h" #include "segment_symbols.h" #include "level_commands.h" @@ -15,7 +16,123 @@ #include "make_const_nonconst.h" #include "levels/wdw/header.h" -static const LevelScript script_func_local_1[] = { + +static const LevelScript script_wdw_area_1_macro_objects[] = { + // Macro objects + OBJECT(/*model*/ MODEL_WOODEN_SIGNPOST, /*pos*/ -2077, 2816, -660, /*angle*/ 0, 0, 0, /*behParam*/ (DIALOG_081 << 16), /*beh*/ bhvMessagePanel), + OBJECT(/*model*/ MODEL_BOBOMB_BUDDY, /*pos*/ -2, 3200, 3583, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvBobombBuddyOpensCannon), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ -2057, 2800, -500, /*angle*/ 0, 0, 0, /*behParam*/ ((COIN_FORMATION_FLAG_RING) << 16), /*beh*/ bhvCoinFormation), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ 1500, 1741, 2191, /*angle*/ 0, 90, 0, /*behParam*/ ((COIN_FORMATION_FLAG_NONE) << 16), /*beh*/ bhvCoinFormation), + OBJECT(/*model*/ MODEL_BLUE_COIN_SWITCH, /*pos*/ 500, 384, 250, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvBlueCoinSwitch), + OBJECT(/*model*/ MODEL_BLUE_COIN, /*pos*/ 1124, 400, -218, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvHiddenBlueCoin), + OBJECT(/*model*/ MODEL_BLUE_COIN, /*pos*/ 1124, 400, 830, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvHiddenBlueCoin), + OBJECT(/*model*/ MODEL_BLUE_COIN, /*pos*/ 832, 400, 1194, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvHiddenBlueCoin), + OBJECT(/*model*/ MODEL_BLUE_COIN, /*pos*/ 1124, 400, 282, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvHiddenBlueCoin), + OBJECT(/*model*/ MODEL_EXCLAMATION_BOX, /*pos*/ -2200, 2600, 3500, /*angle*/ 0, 0, 0, /*behParam*/ (EXCLAMATION_BOX_BP_STAR_1 << 16), /*beh*/ bhvExclamationBox), + OBJECT(/*model*/ MODEL_AMP, /*pos*/ -1360, 3880, -1340, /*angle*/ 0, 0, 0, /*behParam*/ (2 << 16), /*beh*/ bhvCirclingAmp), + OBJECT(/*model*/ MODEL_AMP, /*pos*/ 640, 700, 3720, /*angle*/ 0, 0, 0, /*behParam*/ (2 << 16), /*beh*/ bhvCirclingAmp), + OBJECT(/*model*/ MODEL_AMP, /*pos*/ -2100, 2400, -500, /*angle*/ 0, 0, 0, /*behParam*/ (2 << 16), /*beh*/ bhvCirclingAmp), + OBJECT(/*model*/ MODEL_HEAVE_HO, /*pos*/ -2656, 2300, -1352, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvHeaveHo), + OBJECT(/*model*/ MODEL_HEAVE_HO, /*pos*/ -2909, 1140, 442, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvHeaveHo), + OBJECT(/*model*/ MODEL_DL_CANNON_LID, /*pos*/ -2688, 3328, 3198, /*angle*/ 0, 0, 0, /*behParam*/ (0x40 << 16), /*beh*/ bhvCannonClosed), + OBJECT(/*model*/ MODEL_METAL_BOX, /*pos*/ -2200, 384, 1145, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvPushableMetalBox), + OBJECT(/*model*/ MODEL_1UP, /*pos*/ -1129, 3857, 1404, /*angle*/ 0, 0, 0, /*behParam*/ (MUSHROOM_BP_REQUIRES_NONE << 16), /*beh*/ bhv1Up), + OBJECT(/*model*/ MODEL_1UP, /*pos*/ -882, 4018, 1164, /*angle*/ 0, 0, 0, /*behParam*/ (MUSHROOM_BP_REQUIRES_NONE << 16), /*beh*/ bhv1Up), + OBJECT(/*model*/ MODEL_CHUCKYA, /*pos*/ -2963, 3840, -3063, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvChuckya), + OBJECT(/*model*/ MODEL_HEAVE_HO, /*pos*/ -3040, 384, 1840, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvHeaveHo), + OBJECT(/*model*/ MODEL_METAL_BOX, /*pos*/ -1843, 2304, -3694, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvPushableMetalBox), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ 943, 3830, -1779, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvHiddenStarTrigger), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ -2200, 384, 1145, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvHiddenStarTrigger), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ -2075, 3000, -524, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvHiddenStarTrigger), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ -3760, 650, 4120, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvHiddenStarTrigger), + OBJECT(/*model*/ MODEL_AMP, /*pos*/ -827, 3880, -827, /*angle*/ 0, 0, 0, /*behParam*/ (2 << 16), /*beh*/ bhvCirclingAmp), + OBJECT(/*model*/ MODEL_BREAKABLE_BOX, /*pos*/ 1360, 205, -1384, /*angle*/ 0, 0, 0, /*behParam*/ (BREAKABLE_BOX_BP_NO_COINS << 16), /*beh*/ bhvBreakableBox), + OBJECT(/*model*/ MODEL_PURPLE_SWITCH, /*pos*/ 920, 2300, -840, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvFloorSwitchHiddenObjects), + OBJECT(/*model*/ MODEL_BREAKABLE_BOX, /*pos*/ 470, 2300, -1310, /*angle*/ 0, 0, 0, /*behParam*/ (BREAKABLE_BOX_BP_NO_COINS << 16), /*beh*/ bhvHiddenObject), + OBJECT(/*model*/ MODEL_BREAKABLE_BOX, /*pos*/ 470, 2500, -1510, /*angle*/ 0, 0, 0, /*behParam*/ (BREAKABLE_BOX_BP_NO_COINS << 16), /*beh*/ bhvHiddenObject), + OBJECT(/*model*/ MODEL_BREAKABLE_BOX, /*pos*/ 470, 2700, -1710, /*angle*/ 0, 0, 0, /*behParam*/ (BREAKABLE_BOX_BP_NO_COINS << 16), /*beh*/ bhvHiddenObject), + OBJECT(/*model*/ MODEL_BREAKABLE_BOX, /*pos*/ 470, 2900, -1910, /*angle*/ 0, 0, 0, /*behParam*/ (BREAKABLE_BOX_BP_NO_COINS << 16), /*beh*/ bhvHiddenObject), + OBJECT(/*model*/ MODEL_BREAKABLE_BOX, /*pos*/ 470, 3100, -2110, /*angle*/ 0, 0, 0, /*behParam*/ (BREAKABLE_BOX_BP_NO_COINS << 16), /*beh*/ bhvHiddenObject), + OBJECT(/*model*/ MODEL_BOWLING_BALL, /*pos*/ 3140, 1300, 2040, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvFireSpitter), + OBJECT(/*model*/ MODEL_BOWLING_BALL, /*pos*/ -20, 400, 1520, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvFireSpitter), + OBJECT(/*model*/ MODEL_BOWLING_BALL, /*pos*/ -1780, 1160, -40, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvFireSpitter), + OBJECT(/*model*/ MODEL_BOWLING_BALL, /*pos*/ -2280, 2320, -2280, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvFireSpitter), + OBJECT(/*model*/ MODEL_BOWLING_BALL, /*pos*/ 1240, 2340, -3300, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvFireSpitter), + OBJECT(/*model*/ MODEL_BOWLING_BALL, /*pos*/ -2240, 2320, 3820, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvFireSpitter), + OBJECT(/*model*/ MODEL_BOWLING_BALL, /*pos*/ -220, 3860, 60, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvFireSpitter), + OBJECT(/*model*/ MODEL_BOWLING_BALL, /*pos*/ -240, 400, -440, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvFireSpitter), + OBJECT(/*model*/ MODEL_BREAKABLE_BOX, /*pos*/ 4509, 0, 3069, /*angle*/ 0, 0, 0, /*behParam*/ (BREAKABLE_BOX_BP_3_COINS << 16), /*beh*/ bhvBreakableBox), + OBJECT(/*model*/ MODEL_BREAKABLE_BOX, /*pos*/ 4509, 0, 2873, /*angle*/ 0, 0, 0, /*behParam*/ (BREAKABLE_BOX_BP_3_COINS << 16), /*beh*/ bhvBreakableBox), + OBJECT(/*model*/ MODEL_METAL_BOX, /*pos*/ -3689, 0, 3205, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvPushableMetalBox), + OBJECT(/*model*/ MODEL_BREAKABLE_BOX, /*pos*/ 470, 3100, -2310, /*angle*/ 0, 0, 0, /*behParam*/ (BREAKABLE_BOX_BP_NO_COINS << 16), /*beh*/ bhvHiddenObject), + OBJECT(/*model*/ MODEL_BREAKABLE_BOX, /*pos*/ -3093, 300, 3300, /*angle*/ 0, 0, 0, /*behParam*/ (BREAKABLE_BOX_BP_LARGE << 16), /*beh*/ bhvBreakableBox), + OBJECT(/*model*/ MODEL_AMP, /*pos*/ -1500, 2360, 3120, /*angle*/ 0, 0, 0, /*behParam*/ (2 << 16), /*beh*/ bhvCirclingAmp), + OBJECT(/*model*/ MODEL_BLUE_COIN, /*pos*/ 420, 400, 1504, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvHiddenBlueCoin), + OBJECT(/*model*/ MODEL_BLUE_COIN, /*pos*/ -12, 400, 1808, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvHiddenBlueCoin), + OBJECT(/*model*/ MODEL_EXCLAMATION_BOX, /*pos*/ -2075, 3050, -524, /*angle*/ 0, 0, 0, /*behParam*/ (EXCLAMATION_BOX_BP_COINS_10 << 16), /*beh*/ bhvExclamationBox), + OBJECT(/*model*/ MODEL_EXCLAMATION_BOX, /*pos*/ 943, 3880, -1779, /*angle*/ 0, 0, 0, /*behParam*/ (EXCLAMATION_BOX_BP_COINS_10 << 16), /*beh*/ bhvExclamationBox), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ -3689, 0, 3205, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvHiddenStarTrigger), + OBJECT(/*model*/ MODEL_BREAKABLE_BOX, /*pos*/ 4500, 0, 1240, /*angle*/ 0, 0, 0, /*behParam*/ (BREAKABLE_BOX_BP_3_COINS << 16), /*beh*/ bhvBreakableBox), + OBJECT(/*model*/ MODEL_EXCLAMATION_BOX, /*pos*/ -2200, 3060, -3700, /*angle*/ 0, 0, 0, /*behParam*/ (EXCLAMATION_BOX_BP_COINS_3 << 16), /*beh*/ bhvExclamationBox), + OBJECT(/*model*/ MODEL_EXCLAMATION_BOX, /*pos*/ -3760, 700, 4120, /*angle*/ 0, 0, 0, /*behParam*/ (EXCLAMATION_BOX_BP_COINS_10 << 16), /*beh*/ bhvExclamationBox), + OBJECT(/*model*/ MODEL_EXCLAMATION_BOX, /*pos*/ 3388, 1600, 1155, /*angle*/ 0, 0, 0, /*behParam*/ (EXCLAMATION_BOX_BP_COINS_3 << 16), /*beh*/ bhvExclamationBox), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ 740, 3072, -3560, /*angle*/ 0, 90, 0, /*behParam*/ ((COIN_FORMATION_FLAG_NONE) << 16), /*beh*/ bhvCoinFormation), + OBJECT(/*model*/ MODEL_EXCLAMATION_BOX, /*pos*/ 1550, 4350, 100, /*angle*/ 0, 0, 0, /*behParam*/ (EXCLAMATION_BOX_BP_STAR_2 << 16), /*beh*/ bhvExclamationBox), + OBJECT(/*model*/ MODEL_WOODEN_SIGNPOST, /*pos*/ 740, 3060, -3680, /*angle*/ 0, 0, 0, /*behParam*/ (DIALOG_053 << 16), /*beh*/ bhvMessagePanel), + OBJECT(/*model*/ MODEL_BREAKABLE_BOX, /*pos*/ 4500, 0, 1040, /*angle*/ 0, 0, 0, /*behParam*/ (BREAKABLE_BOX_BP_3_COINS << 16), /*beh*/ bhvBreakableBox), + RETURN(), +}; + +static const LevelScript script_wdw_area_2_macro_objects[] = { + // Macro objects + OBJECT(/*model*/ MODEL_RED_COIN, /*pos*/ -3720, -1131, 520, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvRedCoin), + OBJECT(/*model*/ MODEL_RED_COIN, /*pos*/ -2930, -850, 2560, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvRedCoin), + OBJECT(/*model*/ MODEL_RED_COIN, /*pos*/ 100, -1771, -1500, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvRedCoin), + OBJECT(/*model*/ MODEL_RED_COIN, /*pos*/ 1820, -1387, 1020, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvRedCoin), + OBJECT(/*model*/ MODEL_RED_COIN, /*pos*/ -370, -1795, -180, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvRedCoin), + OBJECT(/*model*/ MODEL_RED_COIN, /*pos*/ -1180, -1795, -180, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvRedCoin), + OBJECT(/*model*/ MODEL_RED_COIN, /*pos*/ -780, -2155, 2860, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvRedCoin), + OBJECT(/*model*/ MODEL_RED_COIN, /*pos*/ -780, -1020, 3400, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvRedCoin), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ -772, -2320, 772, /*angle*/ 0, 0, 0, /*behParam*/ ((COIN_FORMATION_FLAG_FLYING | COIN_FORMATION_FLAG_RING) << 16), /*beh*/ bhvCoinFormation), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ -524, -2560, 524, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvHidden1upTrigger), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ -1034, -2560, 524, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvHidden1upTrigger), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ -1034, -2560, 1034, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvHidden1upTrigger), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ -524, -2560, 1034, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvHidden1upTrigger), + OBJECT(/*model*/ MODEL_1UP, /*pos*/ -772, -2180, 772, /*angle*/ 0, 0, 0, /*behParam*/ (4 << 16), /*beh*/ bhvHidden1up), + OBJECT(/*model*/ MODEL_BREAKABLE_BOX, /*pos*/ -870, -300, 870, /*angle*/ 0, 0, 0, /*behParam*/ (BREAKABLE_BOX_BP_NO_COINS << 16), /*beh*/ bhvBreakableBox), + OBJECT(/*model*/ MODEL_BREAKABLE_BOX, /*pos*/ -670, -300, 870, /*angle*/ 0, 0, 0, /*behParam*/ (BREAKABLE_BOX_BP_NO_COINS << 16), /*beh*/ bhvBreakableBox), + OBJECT(/*model*/ MODEL_BREAKABLE_BOX, /*pos*/ -670, -300, 670, /*angle*/ 0, 0, 0, /*behParam*/ (BREAKABLE_BOX_BP_NO_COINS << 16), /*beh*/ bhvBreakableBox), + OBJECT(/*model*/ MODEL_BREAKABLE_BOX, /*pos*/ -870, -300, 670, /*angle*/ 0, 0, 0, /*behParam*/ (BREAKABLE_BOX_BP_NO_COINS << 16), /*beh*/ bhvBreakableBox), + OBJECT(/*model*/ MODEL_EXCLAMATION_BOX, /*pos*/ -770, 80, 770, /*angle*/ 0, 0, 0, /*behParam*/ (EXCLAMATION_BOX_BP_METAL_CAP << 16), /*beh*/ bhvExclamationBox), + OBJECT(/*model*/ MODEL_EXCLAMATION_BOX, /*pos*/ -1779, -2240, 3644, /*angle*/ 0, 0, 0, /*behParam*/ (EXCLAMATION_BOX_BP_VANISH_CAP << 16), /*beh*/ bhvExclamationBox), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ 1089, -1279, 968, /*angle*/ 0, 0, 0, /*behParam*/ ((COIN_FORMATION_FLAG_NONE ) << 16), /*beh*/ bhvCoinFormation), + OBJECT(/*model*/ MODEL_SKEETER, /*pos*/ -1240, -520, 540, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvSkeeter), + OBJECT(/*model*/ MODEL_SKEETER, /*pos*/ -260, -620, 1560, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvSkeeter), + OBJECT(/*model*/ MODEL_PURPLE_SWITCH, /*pos*/ -1520, -2516, -1940, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvFloorSwitchHiddenObjects), + OBJECT(/*model*/ MODEL_BREAKABLE_BOX, /*pos*/ 2200, -2559, 3240, /*angle*/ 0, 0, 0, /*behParam*/ (BREAKABLE_BOX_BP_NO_COINS << 16), /*beh*/ bhvHiddenObject), + OBJECT(/*model*/ MODEL_EXCLAMATION_BOX, /*pos*/ 1300, -2260, 3740, /*angle*/ 0, 0, 0, /*behParam*/ (EXCLAMATION_BOX_BP_VANISH_CAP << 16), /*beh*/ bhvExclamationBox), + OBJECT(/*model*/ MODEL_BOWLING_BALL, /*pos*/ -2060, -1580, -1260, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvFireSpitter), + OBJECT(/*model*/ MODEL_BOWLING_BALL, /*pos*/ 2240, -1420, 2140, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvFireSpitter), + OBJECT(/*model*/ MODEL_BOWLING_BALL, /*pos*/ 2280, -1400, -100, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvFireSpitter), + OBJECT(/*model*/ MODEL_BOWLING_BALL, /*pos*/ -2280, -2520, -740, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvFireSpitter), + OBJECT(/*model*/ MODEL_BOWLING_BALL, /*pos*/ 720, -2520, -740, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvFireSpitter), + OBJECT(/*model*/ MODEL_BREAKABLE_BOX, /*pos*/ -2930, -1000, 2560, /*angle*/ 0, 0, 0, /*behParam*/ (BREAKABLE_BOX_BP_LARGE << 16), /*beh*/ bhvBreakableBox), + OBJECT(/*model*/ MODEL_BREAKABLE_BOX, /*pos*/ -3690, -1151, 520, /*angle*/ 0, 0, 0, /*behParam*/ (BREAKABLE_BOX_BP_LARGE << 16), /*beh*/ bhvBreakableBox), + OBJECT(/*model*/ MODEL_BREAKABLE_BOX, /*pos*/ -1180, -1945, -180, /*angle*/ 0, 0, 0, /*behParam*/ (BREAKABLE_BOX_BP_LARGE << 16), /*beh*/ bhvBreakableBox), + OBJECT(/*model*/ MODEL_BREAKABLE_BOX, /*pos*/ -370, -1945, -180, /*angle*/ 0, 0, 0, /*behParam*/ (BREAKABLE_BOX_BP_LARGE << 16), /*beh*/ bhvBreakableBox), + OBJECT(/*model*/ MODEL_BREAKABLE_BOX, /*pos*/ 100, -1791, -1500, /*angle*/ 0, 0, 0, /*behParam*/ (BREAKABLE_BOX_BP_LARGE << 16), /*beh*/ bhvBreakableBox), + OBJECT(/*model*/ MODEL_BREAKABLE_BOX, /*pos*/ 1820, -1407, 1020, /*angle*/ 0, 0, 0, /*behParam*/ (BREAKABLE_BOX_BP_LARGE << 16), /*beh*/ bhvBreakableBox), + OBJECT(/*model*/ MODEL_BREAKABLE_BOX, /*pos*/ -780, -2175, 2810, /*angle*/ 0, 0, 0, /*behParam*/ (BREAKABLE_BOX_BP_LARGE << 16), /*beh*/ bhvBreakableBox), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ 100, -1791, -2100, /*angle*/ 0, 90, 0, /*behParam*/ ((COIN_FORMATION_FLAG_NONE ) << 16), /*beh*/ bhvCoinFormation), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ -770, -320, 2820, /*angle*/ 0, 0, 0, /*behParam*/ ((COIN_FORMATION_FLAG_NONE ) << 16), /*beh*/ bhvCoinFormation), + OBJECT(/*model*/ MODEL_EXCLAMATION_BOX, /*pos*/ 1655, -2160, -1293, /*angle*/ 0, 0, 0, /*behParam*/ (EXCLAMATION_BOX_BP_1UP_RUNNING_AWAY << 16), /*beh*/ bhvExclamationBox), + // Special objects + OBJECT(/*model*/ MODEL_BOB_BUBBLY_TREE, /*pos*/ 1664, -2457, -946, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvTree), + OBJECT(/*model*/ MODEL_BOB_BUBBLY_TREE, /*pos*/ 1664, -2457, -1637, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvTree), + RETURN(), +}; + +static const LevelScript script_wdw_area_1_objects_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), @@ -47,7 +164,7 @@ static const LevelScript script_func_local_1[] = { RETURN(), }; -static const LevelScript script_func_local_2[] = { +static const LevelScript script_wdw_area_2_objects_1[] = { 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), @@ -55,13 +172,13 @@ static const LevelScript script_func_local_2[] = { RETURN(), }; -static const LevelScript script_func_local_3[] = { +static const LevelScript script_wdw_area_1_objects_2[] = { 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), RETURN(), }; -static const LevelScript script_func_local_4[] = { +static const LevelScript script_wdw_area_2_objects_2[] = { 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), RETURN(), @@ -99,25 +216,25 @@ const LevelScript level_wdw_entry[] = { 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), - JUMP_LINK(script_func_local_3), - JUMP_LINK(script_func_local_1), + JUMP_LINK(script_wdw_area_1_objects_1), + JUMP_LINK(script_wdw_area_1_objects_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), 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), + JUMP_LINK(script_wdw_area_1_macro_objects), SET_BACKGROUND_MUSIC(/*settingsPreset*/ 0x0003, /*seq*/ SEQ_LEVEL_UNDERGROUND), TERRAIN_TYPE(/*terrainType*/ TERRAIN_STONE), END_AREA(), AREA(/*index*/ 2, wdw_geo_000724), - JUMP_LINK(script_func_local_4), - JUMP_LINK(script_func_local_2), + JUMP_LINK(script_wdw_area_2_objects_1), + JUMP_LINK(script_wdw_area_2_objects_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), 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), + JUMP_LINK(script_wdw_area_2_macro_objects), SET_BACKGROUND_MUSIC(/*settingsPreset*/ 0x0003, /*seq*/ SEQ_LEVEL_UNDERGROUND), TERRAIN_TYPE(/*terrainType*/ TERRAIN_WATER), END_AREA(), diff --git a/levels/wf/areas/1/collision.inc.c b/levels/wf/areas/1/collision.inc.c index 3a13fd682..a6a4798a0 100644 --- a/levels/wf/areas/1/collision.inc.c +++ b/levels/wf/areas/1/collision.inc.c @@ -1074,13 +1074,6 @@ const Collision wf_seg7_collision_070102D8[] = { COL_TRI(4, 5, 6), COL_TRI(4, 7, 5), COL_TRI_STOP(), - COL_SPECIAL_INIT(6), - SPECIAL_OBJECT_WITH_YAW(/*preset*/ special_null_start, /*pos*/ 2560, 256, 5120, /*yaw*/ 64), // unused, probably an early way to set initial position - SPECIAL_OBJECT_WITH_YAW(/*preset*/ special_level_geo_0E, /*pos*/ 3584, 154, 4864, /*yaw*/ 0), - SPECIAL_OBJECT_WITH_YAW(/*preset*/ special_level_geo_0F, /*pos*/ 4608, 256, 1792, /*yaw*/ 0), - SPECIAL_OBJECT_WITH_YAW(/*preset*/ special_level_geo_11, /*pos*/ -2499, 1792, -261, /*yaw*/ 0), - SPECIAL_OBJECT_WITH_YAW(/*preset*/ special_level_geo_12, /*pos*/ -2661, 384, 640, /*yaw*/ 0), - SPECIAL_OBJECT(/*preset*/ special_bubble_tree, /*pos*/ 2560, 256, 4608), COL_WATER_BOX_INIT(1), COL_WATER_BOX(0, -1023, 1024, 3226, 4096, 973), COL_END(), diff --git a/levels/wf/areas/1/macro.inc.c b/levels/wf/areas/1/macro.inc.c deleted file mode 100644 index ee3d2c05f..000000000 --- a/levels/wf/areas/1/macro.inc.c +++ /dev/null @@ -1,47 +0,0 @@ -// 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_END(), -}; diff --git a/levels/wf/header.h b/levels/wf/header.h index 44f3cf14e..5e1beff7a 100644 --- a/levels/wf/header.h +++ b/levels/wf/header.h @@ -93,7 +93,6 @@ extern const Collision wf_seg7_collision_rotating_platform[]; extern const Collision wf_seg7_collision_tower[]; extern const Collision wf_seg7_collision_bullet_bill_cannon[]; extern const Collision wf_seg7_collision_070102D8[]; -extern const MacroObject wf_seg7_macro_objs[]; extern const struct MovtexQuadCollection wf_movtex_water[]; // script diff --git a/levels/wf/leveldata.c b/levels/wf/leveldata.c index 071a395a3..e31eeb858 100644 --- a/levels/wf/leveldata.c +++ b/levels/wf/leveldata.c @@ -2,11 +2,7 @@ #include "sm64.h" #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 "textures.h" -#include "dialog_ids.h" #include "make_const_nonconst.h" #include "levels/wf/texture.inc.c" @@ -65,5 +61,4 @@ #include "levels/wf/areas/1/10/collision.inc.c" #include "levels/wf/areas/1/11/collision.inc.c" #include "levels/wf/areas/1/collision.inc.c" -#include "levels/wf/areas/1/macro.inc.c" #include "levels/wf/areas/1/movtext.inc.c" diff --git a/levels/wf/script.c b/levels/wf/script.c index 57105e5d9..2ed31cdad 100644 --- a/levels/wf/script.c +++ b/levels/wf/script.c @@ -16,9 +16,62 @@ #include "make_const_nonconst.h" #include "levels/wf/header.h" -// 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[] = { + +static const LevelScript script_wf_macro_objects[] = { + // Macro objects + OBJECT(/*model*/ MODEL_NONE, /*pos*/ 3760, 960, 2740, /*angle*/ 0, 0, 0, /*behParam*/ ((COIN_FORMATION_FLAG_NONE ) << 16), /*beh*/ bhvCoinFormation), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ -1400, 1160, 3900, /*angle*/ 0, 90, 0, /*behParam*/ ((COIN_FORMATION_FLAG_NONE ) << 16), /*beh*/ bhvCoinFormation), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ 1254, 2586, 2299, /*angle*/ 0, 90, 0, /*behParam*/ ((COIN_FORMATION_FLAG_NONE ) << 16), /*beh*/ bhvCoinFormation), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ -2500, 1795, -260, /*angle*/ 0, 0, 0, /*behParam*/ ((COIN_FORMATION_FLAG_RING ) << 16), /*beh*/ bhvCoinFormation), + OBJECT(/*model*/ MODEL_BLUE_COIN_SWITCH, /*pos*/ -2500, 384, -250, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvBlueCoinSwitch), + OBJECT(/*model*/ MODEL_BLUE_COIN, /*pos*/ -2500, 450, -1150, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvHiddenBlueCoin), + OBJECT(/*model*/ MODEL_BLUE_COIN, /*pos*/ -2500, 450, -900, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvHiddenBlueCoin), + OBJECT(/*model*/ MODEL_BLUE_COIN, /*pos*/ -2500, 450, -650, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvHiddenBlueCoin), + OBJECT(/*model*/ MODEL_EXCLAMATION_BOX, /*pos*/ 2750, 1370, -3400, /*angle*/ 0, 0, 0, /*behParam*/ (EXCLAMATION_BOX_BP_METAL_CAP << 16), /*beh*/ bhvExclamationBox), + OBJECT(/*model*/ MODEL_YELLOW_COIN, /*pos*/ 0, 2650, 2900, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvYellowCoin), + OBJECT(/*model*/ MODEL_YELLOW_COIN, /*pos*/ -500, 2650, 2900, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvYellowCoin), + OBJECT(/*model*/ MODEL_YELLOW_COIN, /*pos*/ 250, 2650, 2800, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvYellowCoin), + OBJECT(/*model*/ MODEL_YELLOW_COIN, /*pos*/ -750, 2650, 2800, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvYellowCoin), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ -2500, 4560, -256, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvHidden1upInPoleSpawner), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ 0, 2650, 2900, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvHidden1upTrigger), + OBJECT(/*model*/ MODEL_1UP, /*pos*/ -250, 2650, 2400, /*angle*/ 0, 0, 0, /*behParam*/ (2 << 16), /*beh*/ bhvHidden1up), + OBJECT(/*model*/ MODEL_WOODEN_SIGNPOST, /*pos*/ 4200, 256, 5160, /*angle*/ 0, 315, 0, /*behParam*/ (DIALOG_018 << 16), /*beh*/ bhvMessagePanel), + OBJECT(/*model*/ MODEL_WOODEN_SIGNPOST, /*pos*/ -2540, 2560, -900, /*angle*/ 0, 0, 0, /*behParam*/ (DIALOG_036 << 16), /*beh*/ bhvMessagePanel), + OBJECT(/*model*/ MODEL_WOODEN_SIGNPOST, /*pos*/ 1600, 2560, 2600, /*angle*/ 0, 90, 0, /*behParam*/ (DIALOG_042 << 16), /*beh*/ bhvMessagePanel), + OBJECT(/*model*/ MODEL_WOODEN_SIGNPOST, /*pos*/ -2705, 2560, 59, /*angle*/ 0, 270, 0, /*behParam*/ (DIALOG_051 << 16), /*beh*/ bhvMessagePanel), + OBJECT(/*model*/ MODEL_WOODEN_SIGNPOST, /*pos*/ 3460, 2304, -40, /*angle*/ 0, 180, 0, /*behParam*/ (DIALOG_096 << 16), /*beh*/ bhvMessagePanel), + OBJECT(/*model*/ MODEL_DL_CANNON_LID, /*pos*/ -1844, 1026, 3893, /*angle*/ 0, 0, 0, /*behParam*/ (0x40 << 16), /*beh*/ bhvCannonClosed), + OBJECT(/*model*/ MODEL_WOODEN_SIGNPOST, /*pos*/ -2932, 386, -157, /*angle*/ 0, 270, 0, /*behParam*/ (DIALOG_078 << 16), /*beh*/ bhvMessagePanel), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ -500, 2650, 2900, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvHidden1upTrigger), + OBJECT(/*model*/ MODEL_RED_COIN, /*pos*/ -250, 2650, 2970, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvRedCoin), + OBJECT(/*model*/ MODEL_RED_COIN, /*pos*/ 1746, 3620, -3120, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvRedCoin), + OBJECT(/*model*/ MODEL_RED_COIN, /*pos*/ 1277, 2600, 1350, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvRedCoin), + OBJECT(/*model*/ MODEL_RED_COIN, /*pos*/ 1585, 2595, -80, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvRedCoin), + OBJECT(/*model*/ MODEL_RED_COIN, /*pos*/ 3350, 3000, -1520, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvRedCoin), + OBJECT(/*model*/ MODEL_RED_COIN, /*pos*/ 2700, 3600, -900, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvRedCoin), + OBJECT(/*model*/ MODEL_RED_COIN, /*pos*/ 3770, 1380, 650, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvRedCoin), + OBJECT(/*model*/ MODEL_RED_COIN, /*pos*/ -270, 1720, 2250, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvRedCoin), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ 1215, 3600, -2609, /*angle*/ 0, 135, 0, /*behParam*/ ((COIN_FORMATION_FLAG_ARROW ) << 16), /*beh*/ bhvCoinFormation), + OBJECT(/*model*/ MODEL_BLUE_COIN, /*pos*/ -2500, 450, -1400, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvHiddenBlueCoin), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ 4611, 256, 141, /*angle*/ 0, 0, 0, /*behParam*/ ((COIN_FORMATION_FLAG_RING ) << 16), /*beh*/ bhvCoinFormation), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ 1558, 922, 2329, /*angle*/ 0, 0, 0, /*behParam*/ ((COIN_FORMATION_FLAG_RING ) << 16), /*beh*/ bhvCoinFormation), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ 3396, 1380, 3280, /*angle*/ 0, 0, 0, /*behParam*/ ((COIN_FORMATION_FLAG_NONE ) << 16), /*beh*/ bhvCoinFormation), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ 3234, 3345, -1787, /*angle*/ 0, 0, 0, /*behParam*/ ((COIN_FORMATION_FLAG_FLYING | COIN_FORMATION_FLAG_RING) << 16), /*beh*/ bhvCoinFormation), + OBJECT(/*model*/ MODEL_WOODEN_SIGNPOST, /*pos*/ 4800, 256, 3000, /*angle*/ 0, 0, 0, /*behParam*/ (DIALOG_104 << 16), /*beh*/ bhvMessagePanel), + OBJECT(/*model*/ MODEL_WOODEN_SIGNPOST, /*pos*/ 2930, 1075, -3740, /*angle*/ 0, 90, 0, /*behParam*/ (DIALOG_113 << 16), /*beh*/ bhvMessagePanel), + OBJECT(/*model*/ MODEL_BREAKABLE_BOX, /*pos*/ 4320, 256, 1880, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvBreakableBoxSmall), + OBJECT(/*model*/ MODEL_BREAKABLE_BOX, /*pos*/ -2940, 384, -1320, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvBreakableBoxSmall), + OBJECT(/*model*/ MODEL_BUTTERFLY, /*pos*/ 4574, 300, 1130, /*angle*/ 0, 0, 0, /*behParam*/ (TRIPLET_BUTTERFLY_BP_NO_BOMBS << 16), /*beh*/ bhvTripletButterfly), + // Special objects + OBJECT(/*model*/ MODEL_LEVEL_GEOMETRY_0E, /*pos*/ 3584, 154, 4864, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvStaticObject), + OBJECT(/*model*/ MODEL_LEVEL_GEOMETRY_0F, /*pos*/ 4608, 256, 1792, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvStaticObject), + OBJECT(/*model*/ MODEL_LEVEL_GEOMETRY_11, /*pos*/ -2499, 1792, -261, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvStaticObject), + OBJECT(/*model*/ MODEL_LEVEL_GEOMETRY_12, /*pos*/ -2661, 384, 640, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvStaticObject), + OBJECT(/*model*/ MODEL_BOB_BUBBLY_TREE, /*pos*/ 2560, 256, 4608, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvTree), + RETURN(), +}; + +static const LevelScript script_wf_objects_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), @@ -31,7 +84,7 @@ static const LevelScript script_func_local_1[] = { RETURN(), }; -static const LevelScript script_func_local_2[] = { +static const LevelScript script_wf_objects_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), @@ -51,7 +104,7 @@ static const LevelScript script_func_local_2[] = { RETURN(), }; -static const LevelScript script_func_local_3[] = { +static const LevelScript script_wf_objects_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), @@ -81,7 +134,7 @@ static const LevelScript script_func_local_3[] = { RETURN(), }; -static const LevelScript script_func_local_4[] = { +static const LevelScript script_wf_objects_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), @@ -148,12 +201,12 @@ const LevelScript level_wf_entry[] = { 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), - JUMP_LINK(script_func_local_1), - JUMP_LINK(script_func_local_2), - JUMP_LINK(script_func_local_3), - JUMP_LINK(script_func_local_4), + JUMP_LINK(script_wf_objects_1), + JUMP_LINK(script_wf_objects_2), + JUMP_LINK(script_wf_objects_3), + JUMP_LINK(script_wf_objects_4), TERRAIN(/*terrainData*/ wf_seg7_collision_070102D8), - MACRO_OBJECTS(/*objList*/ wf_seg7_macro_objs), + JUMP_LINK(/*objList*/ script_wf_macro_objects), SHOW_DIALOG(/*index*/ 0x00, DIALOG_030), SET_BACKGROUND_MUSIC(/*settingsPreset*/ 0x0005, /*seq*/ SEQ_LEVEL_GRASS), TERRAIN_TYPE(/*terrainType*/ TERRAIN_STONE), diff --git a/levels/wmotr/areas/1/collision.inc.c b/levels/wmotr/areas/1/collision.inc.c index 1a3670fc0..0e7e16767 100644 --- a/levels/wmotr/areas/1/collision.inc.c +++ b/levels/wmotr/areas/1/collision.inc.c @@ -2054,7 +2054,5 @@ const Collision wmotr_seg7_collision[] = { COL_TRI(286, 287, 278), COL_TRI(288, 286, 289), COL_TRI_STOP(), - COL_SPECIAL_INIT(1), - SPECIAL_OBJECT_WITH_YAW(/*preset*/ special_null_start, /*pos*/ -67, 1669, -16, /*yaw*/ 192), // unused, probably an early way to set initial position COL_END(), }; diff --git a/levels/wmotr/areas/1/macro.inc.c b/levels/wmotr/areas/1/macro.inc.c deleted file mode 100644 index 2f548eed5..000000000 --- a/levels/wmotr/areas/1/macro.inc.c +++ /dev/null @@ -1,30 +0,0 @@ -// 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_END(), -}; diff --git a/levels/wmotr/header.h b/levels/wmotr/header.h index d411d8c85..8a79b671f 100644 --- a/levels/wmotr/header.h +++ b/levels/wmotr/header.h @@ -11,7 +11,6 @@ extern const Gfx wmotr_seg7_dl_0700C1F8[]; extern const Gfx wmotr_seg7_dl_0700EFD8[]; extern const Gfx wmotr_seg7_dl_07010608[]; extern const Collision wmotr_seg7_collision[]; -extern const MacroObject wmotr_seg7_macro_objs[]; // script extern const LevelScript level_wmotr_entry[]; diff --git a/levels/wmotr/leveldata.c b/levels/wmotr/leveldata.c index d80b826c1..ad4642670 100644 --- a/levels/wmotr/leveldata.c +++ b/levels/wmotr/leveldata.c @@ -2,13 +2,9 @@ #include "sm64.h" #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 "textures.h" #include "make_const_nonconst.h" #include "levels/wmotr/texture.inc.c" #include "levels/wmotr/areas/1/model.inc.c" #include "levels/wmotr/areas/1/collision.inc.c" -#include "levels/wmotr/areas/1/macro.inc.c" diff --git a/levels/wmotr/script.c b/levels/wmotr/script.c index dcd8363c1..11d6aea90 100644 --- a/levels/wmotr/script.c +++ b/levels/wmotr/script.c @@ -15,7 +15,39 @@ #include "make_const_nonconst.h" #include "levels/wmotr/header.h" -static const LevelScript script_func_local_1[] = { + +static const LevelScript script_wmotr_macro_objects[] = { + // Macro objects + OBJECT(/*model*/ MODEL_DL_CANNON_LID, /*pos*/ -4456, 827, 191, /*angle*/ 0, 0, 0, /*behParam*/ (0x00 << 16), /*beh*/ bhvCannonClosed), + OBJECT(/*model*/ MODEL_DL_CANNON_LID, /*pos*/ 3712, -2740, 5200, /*angle*/ 0, 0, 0, /*behParam*/ (0x80 << 16), /*beh*/ bhvCannonClosed), + OBJECT(/*model*/ MODEL_BOBOMB_BUDDY, /*pos*/ 3684, -2712, 4660, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvBobombBuddyOpensCannon), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ -3050, 2100, -4200, /*angle*/ 0, 0, 0, /*behParam*/ ((COIN_FORMATION_FLAG_FLYING | COIN_FORMATION_FLAG_RING) << 16), /*beh*/ bhvCoinFormation), + OBJECT(/*model*/ MODEL_EXCLAMATION_BOX, /*pos*/ -2744, 4899, -4439, /*angle*/ 0, 0, 0, /*behParam*/ (EXCLAMATION_BOX_BP_1UP_WALKING << 16), /*beh*/ bhvExclamationBox), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ 3995, -1850, 5478, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvHidden1upInPoleSpawner), + OBJECT(/*model*/ MODEL_RED_COIN, /*pos*/ -2980, 3990, -4248, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvRedCoin), + OBJECT(/*model*/ MODEL_RED_COIN, /*pos*/ 2735, 3140, -3085, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvRedCoin), + OBJECT(/*model*/ MODEL_RED_COIN, /*pos*/ -3640, 4600, -4200, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvRedCoin), + OBJECT(/*model*/ MODEL_RED_COIN, /*pos*/ 4400, 240, 80, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvRedCoin), + OBJECT(/*model*/ MODEL_RED_COIN, /*pos*/ 3440, -2680, 5240, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvRedCoin), + OBJECT(/*model*/ MODEL_RED_COIN, /*pos*/ -600, -1360, 5040, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvRedCoin), + OBJECT(/*model*/ MODEL_EXCLAMATION_BOX, /*pos*/ -400, 1960, -120, /*angle*/ 0, 0, 0, /*behParam*/ (EXCLAMATION_BOX_BP_WING_CAP << 16), /*beh*/ bhvExclamationBox), + OBJECT(/*model*/ MODEL_EXCLAMATION_BOX, /*pos*/ -240, -1080, 4520, /*angle*/ 0, 0, 0, /*behParam*/ (EXCLAMATION_BOX_BP_WING_CAP << 16), /*beh*/ bhvExclamationBox), + OBJECT(/*model*/ MODEL_EXCLAMATION_BOX, /*pos*/ 3600, -2480, 5440, /*angle*/ 0, 0, 0, /*behParam*/ (EXCLAMATION_BOX_BP_WING_CAP << 16), /*beh*/ bhvExclamationBox), + OBJECT(/*model*/ MODEL_EXCLAMATION_BOX, /*pos*/ 3960, 520, 440, /*angle*/ 0, 0, 0, /*behParam*/ (EXCLAMATION_BOX_BP_WING_CAP << 16), /*beh*/ bhvExclamationBox), + OBJECT(/*model*/ MODEL_EXCLAMATION_BOX, /*pos*/ -3200, 4880, -4040, /*angle*/ 0, 0, 0, /*behParam*/ (EXCLAMATION_BOX_BP_WING_CAP << 16), /*beh*/ bhvExclamationBox), + OBJECT(/*model*/ MODEL_EXCLAMATION_BOX, /*pos*/ -2760, 2320, -4080, /*angle*/ 0, 0, 0, /*behParam*/ (EXCLAMATION_BOX_BP_WING_CAP << 16), /*beh*/ bhvExclamationBox), + OBJECT(/*model*/ MODEL_1UP, /*pos*/ -3630, -430, 3180, /*angle*/ 0, 0, 0, /*behParam*/ (MUSHROOM_BP_REQUIRES_NONE << 16), /*beh*/ bhv1Up), + OBJECT(/*model*/ MODEL_RED_COIN, /*pos*/ 320, 1725, 40, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvRedCoin), + OBJECT(/*model*/ MODEL_RED_COIN, /*pos*/ -2560, 4600, -4800, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvRedCoin), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ -50, 2180, 1900, /*angle*/ 0, 0, 0, /*behParam*/ ((COIN_FORMATION_FLAG_FLYING | COIN_FORMATION_FLAG_RING | COIN_FORMATION_FLAG_VERTICAL) << 16), /*beh*/ bhvCoinFormation), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ -2850, 1550, 2280, /*angle*/ 0, 40, 0, /*behParam*/ ((COIN_FORMATION_FLAG_FLYING | COIN_FORMATION_FLAG_RING | COIN_FORMATION_FLAG_VERTICAL) << 16), /*beh*/ bhvCoinFormation), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ 1710, -650, 4850, /*angle*/ 0, 85, 0, /*behParam*/ ((COIN_FORMATION_FLAG_FLYING | COIN_FORMATION_FLAG_RING | COIN_FORMATION_FLAG_VERTICAL) << 16), /*beh*/ bhvCoinFormation), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ 2350, 2300, 240, /*angle*/ 0, 0, 0, /*behParam*/ ((COIN_FORMATION_FLAG_FLYING | COIN_FORMATION_FLAG_RING | COIN_FORMATION_FLAG_VERTICAL) << 16), /*beh*/ bhvCoinFormation), + OBJECT(/*model*/ MODEL_1UP, /*pos*/ -3260, 3370, -3945, /*angle*/ 0, 0, 0, /*behParam*/ (MUSHROOM_BP_REQUIRES_NONE << 16), /*beh*/ bhv1Up), + RETURN(), +}; + +static const LevelScript script_wmotr_objects_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), @@ -25,7 +57,7 @@ static const LevelScript script_func_local_1[] = { RETURN(), }; -static const LevelScript script_func_local_2[] = { +static const LevelScript script_wmotr_objects_2[] = { OBJECT(/*model*/ MODEL_NONE, /*pos*/ -160, 1950, -470, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvHiddenRedCoinStar), RETURN(), }; @@ -53,10 +85,10 @@ const LevelScript level_wmotr_entry[] = { 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), - JUMP_LINK(script_func_local_1), - JUMP_LINK(script_func_local_2), + JUMP_LINK(script_wmotr_objects_1), + JUMP_LINK(script_wmotr_objects_2), TERRAIN(/*terrainData*/ wmotr_seg7_collision), - MACRO_OBJECTS(/*objList*/ wmotr_seg7_macro_objs), + JUMP_LINK(script_wmotr_macro_objects), SET_BACKGROUND_MUSIC(/*settingsPreset*/ 0x0000, /*seq*/ SEQ_LEVEL_SLIDE), TERRAIN_TYPE(/*terrainType*/ TERRAIN_SNOW), END_AREA(), diff --git a/src/engine/level_script.c b/src/engine/level_script.c index 3dad0c35b..8c813fcfb 100644 --- a/src/engine/level_script.c +++ b/src/engine/level_script.c @@ -20,7 +20,6 @@ #include "geo_layout.h" #include "graph_node.h" #include "level_script.h" -#include "level_misc_macros.h" #include "level_commands.h" #include "math_util.h" #include "surface_collision.h" @@ -472,6 +471,7 @@ static void level_cmd_init_mario(void) { gMarioSpawnInfo->activeAreaIndex = -1; gMarioSpawnInfo->areaIndex = 0; + gMarioSpawnInfo->respawnInfo = RESPAWN_INFO_NONE; gMarioSpawnInfo->behaviorArg = CMD_GET(u32, 4); gMarioSpawnInfo->behaviorScript = CMD_GET(void *, 8); gMarioSpawnInfo->model = gLoadedGraphNodes[CMD_GET(ModelID16, 0x2)]; // u8, 3? @@ -498,6 +498,7 @@ static void level_cmd_place_object(void) { spawnInfo->areaIndex = sCurrAreaIndex; spawnInfo->activeAreaIndex = sCurrAreaIndex; + spawnInfo->respawnInfo = RESPAWN_INFO_NONE; spawnInfo->behaviorArg = CMD_GET(u32, 16); spawnInfo->behaviorScript = CMD_GET(void *, 20); @@ -661,22 +662,8 @@ static void level_cmd_set_rooms(void) { sCurrentCmd = CMD_NEXT; } -static void level_cmd_set_macro_objects(void) { - if (sCurrAreaIndex != -1) { -#ifndef NO_SEGMENTED_MEMORY - gAreas[sCurrAreaIndex].macroObjects = segmented_to_virtual(CMD_GET(void *, 4)); -#else - // The game modifies the macro object data (for example marking coins as taken), - // so it must be reset when the level reloads. - MacroObject *data = segmented_to_virtual(CMD_GET(void *, 4)); - s32 len = 0; - while (data[len++] != MACRO_OBJECT_END()) { - len += 4; - } - gAreas[sCurrAreaIndex].macroObjects = alloc_only_pool_alloc(sLevelPool, len * sizeof(MacroObject)); - memcpy(gAreas[sCurrAreaIndex].macroObjects, data, len * sizeof(MacroObject)); -#endif - } +// Unused. Previously level_cmd_set_macro_objects +static void level_cmd_39(void) { sCurrentCmd = CMD_NEXT; } @@ -974,7 +961,7 @@ static void (*LevelScriptJumpTable[])(void) = { /*LEVEL_CMD_SET_MUSIC */ level_cmd_set_music, /*LEVEL_CMD_SET_MENU_MUSIC */ level_cmd_set_menu_music, /*LEVEL_CMD_FADEOUT_MUSIC */ level_cmd_fadeout_music, - /*LEVEL_CMD_SET_MACRO_OBJECTS */ level_cmd_set_macro_objects, + /*LEVEL_CMD_39 */ level_cmd_39, // previously level_cmd_set_macro_objects /*LEVEL_CMD_3A */ level_cmd_3A, /*LEVEL_CMD_CREATE_WHIRLPOOL */ level_cmd_create_whirlpool, /*LEVEL_CMD_GET_OR_SET_VAR */ level_cmd_get_or_set_var, diff --git a/src/engine/surface_load.c b/src/engine/surface_load.c index 4474bbb2e..56bc412da 100644 --- a/src/engine/surface_load.c +++ b/src/engine/surface_load.c @@ -7,7 +7,6 @@ #include "behavior_data.h" #include "game/memory.h" #include "game/object_helpers.h" -#include "game/macro_special_objects.h" #include "surface_collision.h" #include "math_util.h" #include "game/mario.h" @@ -460,10 +459,6 @@ u32 get_area_terrain_size(TerrainData *data) { data += 3 * numVertices; break; - case TERRAIN_LOAD_OBJECTS: - data += get_special_objects_size(data); - break; - case TERRAIN_LOAD_ENVIRONMENT: numRegions = *data++; data += 6 * numRegions; @@ -497,7 +492,7 @@ u32 get_area_terrain_size(TerrainData *data) { * Process the level file, loading in vertices, surfaces, some objects, and environmental * boxes (water, gas, JRB fog). */ -void load_area_terrain(s32 index, TerrainData *data, RoomData *surfaceRooms, s16 *macroObjects) { +void load_area_terrain(TerrainData *data, RoomData *surfaceRooms) { PUPPYPRINT_GET_SNAPSHOT(); s32 terrainLoadType; TerrainData *vertexData = NULL; @@ -527,8 +522,6 @@ void load_area_terrain(s32 index, TerrainData *data, RoomData *surfaceRooms, s16 load_static_surfaces(&data, vertexData, terrainLoadType, &surfaceRooms); } else if (terrainLoadType == TERRAIN_LOAD_VERTICES) { vertexData = read_vertex_data(&data); - } else if (terrainLoadType == TERRAIN_LOAD_OBJECTS) { - spawn_special_objects(index, &data); } else if (terrainLoadType == TERRAIN_LOAD_ENVIRONMENT) { load_environmental_regions(&data); } else if (terrainLoadType == TERRAIN_LOAD_CONTINUE) { @@ -541,18 +534,6 @@ void load_area_terrain(s32 index, TerrainData *data, RoomData *surfaceRooms, s16 } } - if (macroObjects != NULL && *macroObjects != -1) { - // If the first macro object presetID is within the range [0, 29]. - // Generally an early spawning method, every object is in BBH (the first level). - if (0 <= *macroObjects && *macroObjects < 30) { - spawn_macro_objects_hardcoded(index, macroObjects); - } - // A more general version that can spawn more objects. - else { - spawn_macro_objects(index, macroObjects); - } - } - surfacePoolData = (uintptr_t)gCurrStaticSurfacePoolEnd - (uintptr_t)gCurrStaticSurfacePool; gTotalStaticSurfaceData += surfacePoolData; main_pool_realloc(gCurrStaticSurfacePool, surfacePoolData); diff --git a/src/engine/surface_load.h b/src/engine/surface_load.h index fcfc3c7f8..68beff6cf 100644 --- a/src/engine/surface_load.h +++ b/src/engine/surface_load.h @@ -43,7 +43,7 @@ void alloc_surface_pools(void); #ifdef NO_SEGMENTED_MEMORY u32 get_area_terrain_size(TerrainData *data); #endif -void load_area_terrain(s32 index, TerrainData *data, RoomData *surfaceRooms, MacroObject *macroObjects); +void load_area_terrain(TerrainData *data, RoomData *surfaceRooms); void clear_dynamic_surfaces(void); void load_object_collision_model(void); void load_object_static_model(void); diff --git a/src/game/area.c b/src/game/area.c index b917c14ef..7c0fcd6a7 100644 --- a/src/game/area.c +++ b/src/game/area.c @@ -194,7 +194,6 @@ void clear_areas(void) { gAreaData[i].graphNode = NULL; gAreaData[i].terrainData = NULL; gAreaData[i].surfaceRooms = NULL; - gAreaData[i].macroObjects = NULL; gAreaData[i].warpNodes = NULL; gAreaData[i].paintingWarpNodes = NULL; gAreaData[i].instantWarps = NULL; @@ -243,8 +242,7 @@ void load_area(s32 index) { gMarioCurrentRoom = 0; if (gCurrentArea->terrainData != NULL) { - load_area_terrain(index, gCurrentArea->terrainData, gCurrentArea->surfaceRooms, - gCurrentArea->macroObjects); + load_area_terrain(gCurrentArea->terrainData, gCurrentArea->surfaceRooms); } if (gCurrentArea->objectSpawnInfos != NULL) { diff --git a/src/game/area.h b/src/game/area.h index f6dd36100..11c3c8b4e 100644 --- a/src/game/area.h +++ b/src/game/area.h @@ -31,6 +31,7 @@ struct SpawnInfo { /*0x06*/ Vec3s startAngle; /*0x0C*/ s8 areaIndex; /*0x0D*/ s8 activeAreaIndex; + /*0x0E*/ u8 respawnInfo; /*0x10*/ u32 behaviorArg; /*0x14*/ void *behaviorScript; /*0x18*/ struct GraphNode *model; @@ -62,21 +63,20 @@ struct Area { /*0x04*/ struct GraphNodeRoot *graphNode; // geometry layout data /*0x08*/ TerrainData *terrainData; // collision data (set from level script cmd 0x2E) /*0x0C*/ RoomData *surfaceRooms; // (set from level script cmd 0x2F) - /*0x10*/ MacroObject *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; - /*0x3A*/ u8 useEchoOverride; // Should area echo be overridden using echoOverride? - /*0x3B*/ s8 echoOverride; // Value used to override the area echo values defined in level_defines.h + /*0x10*/ struct ObjectWarpNode *warpNodes; + /*0x14*/ struct WarpNode *paintingWarpNodes; + /*0x18*/ struct InstantWarp *instantWarps; + /*0x1C*/ struct SpawnInfo *objectSpawnInfos; + /*0x20*/ struct Camera *camera; + /*0x24*/ struct UnusedArea28 *unused; // Filled by level script 0x3A, but is unused. + /*0x28*/ struct Whirlpool *whirlpools[2]; + /*0x30*/ u8 dialog[2]; // Level start dialog number (set by level script cmd 0x30) + /*0x32*/ u16 musicParam; + /*0x34*/ u16 musicParam2; + /*0x36*/ u8 useEchoOverride; // Should area echo be overridden using echoOverride? + /*0x37*/ s8 echoOverride; // Value used to override the area echo values defined in level_defines.h #ifdef BETTER_REVERB - /*0x3C*/ u8 betterReverbPreset; + /*0x38*/ u8 betterReverbPreset; #endif }; diff --git a/src/game/behavior_actions.c b/src/game/behavior_actions.c index d2f80578a..eedca642c 100644 --- a/src/game/behavior_actions.c +++ b/src/game/behavior_actions.c @@ -19,7 +19,6 @@ #include "game_init.h" #include "ingame_menu.h" #include "interaction.h" -#include "level_misc_macros.h" #include "level_table.h" #include "level_update.h" #include "levels/bob/header.h" diff --git a/src/game/behaviors/bobomb.inc.c b/src/game/behaviors/bobomb.inc.c index 32801b15a..5f8a6fb64 100644 --- a/src/game/behaviors/bobomb.inc.c +++ b/src/game/behaviors/bobomb.inc.c @@ -20,10 +20,9 @@ void bhv_bobomb_init(void) { } void bobomb_spawn_coin(void) { - if (!(GET_BPARAM3(o->oBehParams) & RESPAWN_INFO_TYPE_NORMAL)) { + if (!(o->respawnInfo & RESPAWN_INFO_NO_COINS)) { obj_spawn_yellow_coins(o, 1); - SET_FULL_BPARAM3(o->oBehParams, RESPAWN_INFO_TYPE_NORMAL); - set_object_respawn_info_bits(o, RESPAWN_INFO_TYPE_NORMAL); + set_object_respawn_info_bits(o, RESPAWN_INFO_NO_COINS); } } diff --git a/src/game/behaviors/chain_chomp.inc.c b/src/game/behaviors/chain_chomp.inc.c index a23480d1e..4ad40a92c 100644 --- a/src/game/behaviors/chain_chomp.inc.c +++ b/src/game/behaviors/chain_chomp.inc.c @@ -455,7 +455,7 @@ void bhv_wooden_post_update(void) { if (o->oWoodenPostOffsetY != 0.0f) { o->oPosY = o->oHomeY + o->oWoodenPostOffsetY; - } else if (!GET_BPARAM3(o->oBehParams)) { // Whether the post has coins or not + } else if (!(o->respawnInfo & RESPAWN_INFO_NO_COINS)) { // Whether the post has coins or not // Reset the timer once mario is far enough if (o->oDistanceToMario > 400.0f) { o->oTimer = o->oWoodenPostTotalMarioAngle = 0; @@ -465,7 +465,7 @@ void bhv_wooden_post_update(void) { o->oWoodenPostTotalMarioAngle += (s16)(o->oAngleToMario - o->oWoodenPostPrevAngleToMario); if (absi(o->oWoodenPostTotalMarioAngle) > 0x30000 && o->oTimer < 200) { obj_spawn_loot_yellow_coins(o, 5, 20.0f); - set_object_respawn_info_bits(o, RESPAWN_INFO_TYPE_NORMAL); + set_object_respawn_info_bits(o, RESPAWN_INFO_NO_COINS); } } diff --git a/src/game/behaviors/coin.inc.c b/src/game/behaviors/coin.inc.c index 802ceda27..4f23050b7 100644 --- a/src/game/behaviors/coin.inc.c +++ b/src/game/behaviors/coin.inc.c @@ -223,7 +223,7 @@ void spawn_coin_in_formation(s32 index, s32 shape) { } void bhv_coin_formation_init(void) { - o->oCoinRespawnBits = GET_BPARAM3(o->oBehParams); + o->oCoinRespawnBits = o->respawnInfo; } void bhv_coin_formation_loop(void) { @@ -250,8 +250,7 @@ void bhv_coin_formation_loop(void) { break; } - // Casting to u8 doesn't seem to match - set_object_respawn_info_bits(o, o->oCoinRespawnBits & RESPAWN_INFO_DONT_RESPAWN); + set_object_respawn_info_bits(o, o->oCoinRespawnBits); } void coin_inside_boo_act_dropped(void) { diff --git a/src/game/behaviors/fire_piranha_plant.inc.c b/src/game/behaviors/fire_piranha_plant.inc.c index 58c553b21..c49b97f36 100644 --- a/src/game/behaviors/fire_piranha_plant.inc.c +++ b/src/game/behaviors/fire_piranha_plant.inc.c @@ -35,7 +35,7 @@ void bhv_fire_piranha_plant_init(void) { o->oFlags |= OBJ_FLAG_PERSISTENT_RESPAWN; o->oHealth = 1; - if (GET_BPARAM3(o->oBehParams)) { + if (o->respawnInfo & RESPAWN_INFO_NO_COINS) { o->oNumLootCoins = 0; } else { o->oNumLootCoins = 2; @@ -68,7 +68,7 @@ static void fire_piranha_plant_act_hide(void) { } obj_die_if_health_non_positive(); - set_object_respawn_info_bits(o, RESPAWN_INFO_TYPE_NORMAL); + set_object_respawn_info_bits(o, RESPAWN_INFO_NO_COINS); } } else if (sNumActiveFirePiranhaPlants < 2 && o->oTimer > 100 && o->oDistanceToMario > 100.0f && o->oDistanceToMario < 800.0f) { diff --git a/src/game/behaviors/goomba.inc.c b/src/game/behaviors/goomba.inc.c index 2180243e0..8cfd4b296 100644 --- a/src/game/behaviors/goomba.inc.c +++ b/src/game/behaviors/goomba.inc.c @@ -80,18 +80,18 @@ void bhv_goomba_triplet_spawner_update(void) { 0x10000 / (((o->oBehParams2ndByte & GOOMBA_TRIPLET_SPAWNER_BP_EXTRA_GOOMBAS_MASK) >> 2) + 3); - for (angle = 0, goombaFlag = 1 << 8; angle < 0xFFFF; angle += dAngle, goombaFlag <<= 1) { + for (angle = 0, goombaFlag = 1; angle < 0xFFFF; angle += dAngle, goombaFlag <<= 1) { // Only spawn goombas which haven't been killed yet - if (!(o->oBehParams & goombaFlag)) { + if (!(o->respawnInfo & goombaFlag)) { s16 dx = 500.0f * coss(angle); s16 dz = 500.0f * sins(angle); #ifdef FLOOMBAS - spawn_object_relative((o->oBehParams2ndByte & GOOMBA_TRIPLET_SPAWNER_BP_SIZE_MASK) | (goombaFlag >> 6), - dx, 0, dz, o, MODEL_GOOMBA, (o->oIsFloomba ? bhvFloomba : bhvGoomba)); + const void *goombaBhv = (o->oIsFloomba ? bhvFloomba : bhvGoomba); #else - spawn_object_relative((o->oBehParams2ndByte & GOOMBA_TRIPLET_SPAWNER_BP_SIZE_MASK) | (goombaFlag >> 6), - dx, 0, dz, o, MODEL_GOOMBA, bhvGoomba); + const void *goombaBhv = bhvGoomba; #endif + spawn_object_relative((o->oBehParams2ndByte & GOOMBA_TRIPLET_SPAWNER_BP_SIZE_MASK) | (goombaFlag << 2), + dx, 0, dz, o, MODEL_GOOMBA, goombaBhv); } } @@ -154,9 +154,6 @@ 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->oBehParams = - o->parentObj->oBehParams | (o->oBehParams2ndByte & GOOMBA_BP_TRIPLET_FLAG_MASK) << 6; } } diff --git a/src/game/behaviors/mr_blizzard.inc.c b/src/game/behaviors/mr_blizzard.inc.c index cd74cc6af..cc0064ca3 100644 --- a/src/game/behaviors/mr_blizzard.inc.c +++ b/src/game/behaviors/mr_blizzard.inc.c @@ -237,9 +237,9 @@ static void mr_blizzard_act_death(void) { if (o->oMrBlizzardScale != 0.0f) { if ((o->oMrBlizzardScale -= 0.03f) <= 0.0f) { o->oMrBlizzardScale = 0.0f; - if (!GET_BPARAM3(o->oBehParams)) { + if (!(o->respawnInfo & RESPAWN_INFO_NO_COINS)) { obj_spawn_loot_yellow_coins(o, o->oNumLootCoins, 20.0f); - set_object_respawn_info_bits(o, RESPAWN_INFO_TYPE_NORMAL); + set_object_respawn_info_bits(o, RESPAWN_INFO_NO_COINS); } } } diff --git a/src/game/behaviors/respawner.inc.c b/src/game/behaviors/respawner.inc.c index d94159103..fec36766f 100644 --- a/src/game/behaviors/respawner.inc.c +++ b/src/game/behaviors/respawner.inc.c @@ -5,6 +5,8 @@ void bhv_respawner_loop(void) { if (!is_point_within_radius_of_mario(o->oPosX, o->oPosY, o->oPosZ, o->oRespawnerMinSpawnDist)) { spawnedObject = spawn_object(o, o->oRespawnerModelToRespawn, o->oRespawnerBehaviorToRespawn); spawnedObject->oBehParams = o->oBehParams; + spawnedObject->respawnInfo = o->respawnInfo; + spawnedObject->respawnInfoPointer = o->respawnInfoPointer; o->activeFlags = ACTIVE_FLAG_DEACTIVATED; } } @@ -15,4 +17,6 @@ void create_respawner(ModelID32 model, const BehaviorScript *behToSpawn, s32 min respawner->oRespawnerModelToRespawn = model; respawner->oRespawnerMinSpawnDist = minSpawnDist; respawner->oRespawnerBehaviorToRespawn = behToSpawn; + respawner->respawnInfo = o->respawnInfo; + respawner->respawnInfoPointer = o->respawnInfoPointer; } diff --git a/src/game/farcall_helpers.h b/src/game/farcall_helpers.h index 1b49a2379..a015a4e77 100644 --- a/src/game/farcall_helpers.h +++ b/src/game/farcall_helpers.h @@ -23,7 +23,6 @@ #include "game_init.h" #include "obj_behaviors_2.h" #include "level_headers.h" -#include "level_misc_macros.h" s32 obj_is_rendering_enabled(void); s32 obj_get_pitch_from_vel(void); diff --git a/src/game/macro_special_objects.c b/src/game/macro_special_objects.c deleted file mode 100644 index 458ba2a11..000000000 --- a/src/game/macro_special_objects.c +++ /dev/null @@ -1,293 +0,0 @@ -#include - -#include "sm64.h" -#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" - -/* - * Converts the rotation value supplied by macro objects into one - * that can be used by in-game objects. - */ -s32 convert_rotation(s16 inRotation) { - u16 rotation = ((u16)(inRotation & 0xFF) << 8); - switch (rotation) { - case 0x3F00: rotation = 0x4000; break; - case 0x7F00: rotation = 0x8000; break; - case 0xBF00: rotation = 0xC000; break; - case 0xFF00: rotation = 0x0000; break; - } - return (s16) rotation; -} - -/* - * Spawns an object at an absolute location with rotation around the y-axis and - * parameters filling up the upper 2 bytes of newObj->oBehParams. - * The object will not spawn if 'behavior' is NULL. - */ -void spawn_macro_abs_yrot_2params(ModelID32 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; - } -} - -/* - * 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. - * The object will not spawn if 'behavior' is NULL. - */ -void spawn_macro_abs_yrot_param1(ModelID32 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; - } -} - -/* - * Spawns an object at an absolute location with currently 3 unknown variables that get converted to - * floats. Oddly enough, this function doesn't care if 'behavior' is NULL or not. - */ -void spawn_macro_abs_special(ModelID32 model, const BehaviorScript *behavior, s16 x, s16 y, s16 z, s16 unkA, s16 unkB, s16 unkC) { - struct Object *newObj = - spawn_object_abs_with_rot(&gMacroObjectDefaultParent, 0, model, behavior, x, y, z, 0, 0, 0); - - // Are all three of these values unused? - newObj->oMacroUnk108 = (f32) unkA; - newObj->oMacroUnk10C = (f32) unkB; - newObj->oMacroUnk110 = (f32) unkC; -} - -UNUSED static void spawn_macro_coin_unknown(const BehaviorScript *behavior, s16 a1[]) { - struct Object *obj; - ModelID16 model = bhvYellowCoin == behavior ? MODEL_YELLOW_COIN : MODEL_NONE; - - obj = spawn_object_abs_with_rot(&gMacroObjectDefaultParent, 0, model, behavior, - a1[1], a1[2], a1[3], 0, convert_rotation(a1[0]), 0); - - obj->oUnusedCoinParams = a1[4]; - obj->oBehParams = (a1[4] & 0xFF) >> 16; -} - -struct LoadedMacroObject { - /*0x00*/ s16 yaw; - /*0x02*/ Vec3s pos; - /*0x08*/ s16 params; -}; - -void spawn_macro_objects(s32 areaIndex, MacroObject *macroObjList) { - s32 presetID; - struct LoadedMacroObject macroObject; - struct Object *newObj; - struct MacroPreset preset; - - gMacroObjectDefaultParent.header.gfx.areaIndex = areaIndex; - gMacroObjectDefaultParent.header.gfx.activeAreaIndex = areaIndex; - - while (TRUE) { - if (*macroObjList == -1) { // An encountered value of -1 means the list has ended. - break; - } - - presetID = (*macroObjList & 0x1FF) - 31; // Preset identifier for MacroObjectPresets array - - if (presetID < 0) { - break; - } - - // Set macro object properties from the list - macroObject.yaw = ((*macroObjList++ >> 9) & 0x7F) << 1; // Y-Rotation - macroObject.pos[0] = *macroObjList++; // X position - macroObject.pos[1] = *macroObjList++; // Y position - macroObject.pos[2] = *macroObjList++; // Z position - macroObject.params = *macroObjList++; // Behavior params - - // Get the preset values from the MacroObjectPresets list. - preset = MacroObjectPresets[presetID]; - - // If the preset has a defined param, replace the lower bits with the preset param. - // The lower bits are later used for bparam2. - if (preset.param != 0) { - macroObject.params = (macroObject.params & 0xFF00) + (preset.param & 0x00FF); - } - - // If object has been killed (bparam3 check), prevent it from respawning - if ((GET_BPARAM3(macroObject.params) & RESPAWN_INFO_DONT_RESPAWN) != RESPAWN_INFO_DONT_RESPAWN) { - // Spawn the new macro object. - newObj = spawn_object_abs_with_rot( - &gMacroObjectDefaultParent, // Parent object - 0, // Unused - preset.model, // Model ID - preset.behavior, // Behavior address - macroObject.pos[0], // X-position - macroObject.pos[1], // Y-position - macroObject.pos[2], // Z-position - 0x0, // X-rotation - convert_rotation(macroObject.yaw), // Y-rotation - 0x0 // Z-rotation - ); - - newObj->oUnusedCoinParams = macroObject.params; - newObj->oBehParams = (((macroObject.params & 0x00FF) << 16) // Set 2nd byte from lower bits (shifted). - | (macroObject.params & 0xFF00)); // Set 3rd byte from upper bits. - newObj->oBehParams2ndByte = (macroObject.params & 0x00FF); // Set 2nd byte from lower bits. - newObj->respawnInfoType = RESPAWN_INFO_TYPE_MACRO_OBJECT; - newObj->respawnInfo = macroObjList - 1; - newObj->parentObj = newObj; - } - } -} - -void spawn_macro_objects_hardcoded(s32 areaIndex, MacroObject *macroObjList) { - // This version of macroObjList has the preset and Y-Rotation separated, - // and lacks behavior params. Might be an early version of the macro object list? - Vec3s pos; - s16 macroObjPreset; - s16 yaw; - - gMacroObjectDefaultParent.header.gfx.areaIndex = areaIndex; - gMacroObjectDefaultParent.header.gfx.activeAreaIndex = areaIndex; - - while (TRUE) { - macroObjPreset = *macroObjList++; - - if (macroObjPreset < 0) { - break; - } - - pos[0] = *macroObjList++; - pos[1] = *macroObjList++; - pos[2] = *macroObjList++; - yaw = *macroObjList++; - - // Spawn objects based on hardcoded presets, and most seem to be for Big Boo's Haunt. - // However, BBH doesn't use this function so this might just be an early test? - switch (macroObjPreset) { - case 0: spawn_macro_abs_yrot_2params(MODEL_NONE, bhvBooStaircase, pos[0], pos[1], pos[2], yaw, 0); break; - case 1: spawn_macro_abs_yrot_2params(MODEL_BBH_TILTING_FLOOR_PLATFORM, bhvBbhTiltingTrapPlatform, pos[0], pos[1], pos[2], yaw, 0); break; - case 2: spawn_macro_abs_yrot_2params(MODEL_BBH_TUMBLING_PLATFORM, bhvBbhTumblingBridge, pos[0], pos[1], pos[2], yaw, 0); break; - case 3: spawn_macro_abs_yrot_2params(MODEL_BBH_MOVING_BOOKSHELF, bhvHauntedBookshelf, pos[0], pos[1], pos[2], yaw, 0); break; - case 4: spawn_macro_abs_yrot_2params(MODEL_BBH_MESH_ELEVATOR, bhvMeshElevator, pos[0], pos[1], pos[2], yaw, 0); break; - case 20: spawn_macro_abs_yrot_2params(MODEL_YELLOW_COIN, bhvYellowCoin, pos[0], pos[1], pos[2], yaw, 0); break; - case 21: spawn_macro_abs_yrot_2params(MODEL_YELLOW_COIN, bhvYellowCoin, pos[0], pos[1], pos[2], yaw, 0); break; - default: break; - } - } -} - -void spawn_special_objects(s32 areaIndex, TerrainData **specialObjList) { - s32 i; - s32 offset; - Vec3s pos; - s16 extraParams[4]; - ModelID16 model; - u8 type; - u8 presetID; - u8 defaultParam; - const BehaviorScript *behavior; - - s32 numOfSpecialObjects = *(*specialObjList)++; - - gMacroObjectDefaultParent.header.gfx.areaIndex = areaIndex; - gMacroObjectDefaultParent.header.gfx.activeAreaIndex = areaIndex; - - for (i = 0; i < numOfSpecialObjects; i++) { - presetID = *(*specialObjList)++; - pos[0] = *(*specialObjList)++; - pos[1] = *(*specialObjList)++; - pos[2] = *(*specialObjList)++; - - offset = 0; - while (TRUE) { - if (SpecialObjectPresets[offset].preset_id == presetID) { - break; - } - offset++; - } - - model = SpecialObjectPresets[offset].model; - behavior = SpecialObjectPresets[offset].behavior; - type = SpecialObjectPresets[offset].type; - defaultParam = SpecialObjectPresets[offset].defParam; - - switch (type) { - case SPTYPE_NO_YROT_OR_PARAMS: - spawn_macro_abs_yrot_2params(model, behavior, pos[0], pos[1], pos[2], 0, 0); - break; - case SPTYPE_YROT_NO_PARAMS: - extraParams[0] = *(*specialObjList)++; // Y-rotation - spawn_macro_abs_yrot_2params(model, behavior, pos[0], pos[1], pos[2], extraParams[0], 0); - break; - case SPTYPE_PARAMS_AND_YROT: - extraParams[0] = *(*specialObjList)++; // Y-rotation - extraParams[1] = *(*specialObjList)++; // Params - spawn_macro_abs_yrot_2params(model, behavior, pos[0], pos[1], pos[2], extraParams[0], extraParams[1]); - break; - case SPTYPE_UNKNOWN: - extraParams[0] = *(*specialObjList)++; // Unknown, gets put into obj->oMacroUnk108 as a float - extraParams[1] = *(*specialObjList)++; // Unknown, gets put into obj->oMacroUnk10C as a float - extraParams[2] = *(*specialObjList)++; // Unknown, gets put into obj->oMacroUnk110 as a float - spawn_macro_abs_special(model, behavior, pos[0], pos[1], pos[2], extraParams[0], extraParams[1], extraParams[2]); - break; - case SPTYPE_DEF_PARAM_AND_YROT: - extraParams[0] = *(*specialObjList)++; // Y-rotation - spawn_macro_abs_yrot_param1(model, behavior, pos[0], pos[1], pos[2], extraParams[0], defaultParam); - break; - default: - break; - } - } -} - -#ifdef NO_SEGMENTED_MEMORY -u32 get_special_objects_size(s16 *data) { - s16 *startPos = data; - s32 i; - u8 presetID; - s32 offset; - - s32 numOfSpecialObjects = *data++; - - for (i = 0; i < numOfSpecialObjects; i++) { - presetID = (u8) *data++; - data += 3; - offset = 0; - - while (TRUE) { - if (SpecialObjectPresets[offset].preset_id == presetID) { - break; - } - offset++; - } - - switch (SpecialObjectPresets[offset].type) { - case SPTYPE_NO_YROT_OR_PARAMS: - break; - case SPTYPE_YROT_NO_PARAMS: - data++; - break; - case SPTYPE_PARAMS_AND_YROT: - data += 2; - break; - case SPTYPE_UNKNOWN: - data += 3; - break; - case SPTYPE_DEF_PARAM_AND_YROT: - data++; - break; - default: - break; - } - } - - return data - startPos; -} -#endif diff --git a/src/game/macro_special_objects.h b/src/game/macro_special_objects.h deleted file mode 100644 index 63b495b2a..000000000 --- a/src/game/macro_special_objects.h +++ /dev/null @@ -1,21 +0,0 @@ -#ifndef MACRO_SPECIAL_OBJECTS_H -#define MACRO_SPECIAL_OBJECTS_H - -#include - -#include "types.h" - -s32 convert_rotation(s16 inRotation); - -void spawn_macro_abs_yrot_2params(ModelID32 model, const BehaviorScript *behavior, s16 x, s16 y, s16 z, s16 ry, s16 params); -void spawn_macro_abs_yrot_param1(ModelID32 model, const BehaviorScript *behavior, s16 x, s16 y, s16 z, s16 ry, s16 params); -void spawn_macro_abs_special(ModelID32 model, const BehaviorScript *behavior, s16 x, s16 y, s16 z, s16 unkA, s16 unkB, s16 unkC); - -void spawn_macro_objects(s32 areaIndex, MacroObject *macroObjList); -void spawn_macro_objects_hardcoded(s32 areaIndex, MacroObject *macroObjList); -void spawn_special_objects(s32 areaIndex, TerrainData **specialObjList); -#ifdef NO_SEGMENTED_MEMORY -u32 get_special_objects_size(s16 *data); -#endif - -#endif // MACRO_SPECIAL_OBJECTS_H diff --git a/src/game/obj_behaviors.c b/src/game/obj_behaviors.c index 46c699df0..35cac62ec 100644 --- a/src/game/obj_behaviors.c +++ b/src/game/obj_behaviors.c @@ -15,7 +15,6 @@ #include "game_init.h" #include "ingame_menu.h" #include "interaction.h" -#include "level_misc_macros.h" #include "level_table.h" #include "level_update.h" #include "levels/bob/header.h" diff --git a/src/game/object_list_processor.c b/src/game/object_list_processor.c index abb281834..b75ee0463 100644 --- a/src/game/object_list_processor.c +++ b/src/game/object_list_processor.c @@ -69,11 +69,6 @@ u32 gTimeStopState; */ struct Object gObjectPool[OBJECT_POOL_CAPACITY]; -/** - * A special object whose purpose is to act as a parent for macro objects. - */ -struct Object gMacroObjectDefaultParent; - /** * A pointer to gObjectListArray. * Given an object list index idx, gObjectLists[idx] is the head of a doubly @@ -402,24 +397,11 @@ s32 unload_deactivated_objects_in_list(struct ObjectNode *objList) { /** * OR the object's respawn info with bits << 8. If bits = 0xFF, this prevents * the object from respawning after leaving and re-entering the area. - * For macro objects, respawnInfo points to the 16 bit entry in the macro object - * list. For other objects, it points to the 32 bit behaviorArg in the - * SpawnInfo. */ void set_object_respawn_info_bits(struct Object *obj, u8 bits) { - u32 *info32; - u16 *info16; - - switch (obj->respawnInfoType) { - case RESPAWN_INFO_TYPE_NORMAL: - info32 = (u32 *) obj->respawnInfo; - *info32 |= bits << 8; - break; - - case RESPAWN_INFO_TYPE_MACRO_OBJECT: - info16 = (u16 *) obj->respawnInfo; - *info16 |= bits << 8; - break; + obj->respawnInfo |= bits; + if (obj->respawnInfoPointer != NULL) { + *obj->respawnInfoPointer |= bits; } } @@ -471,8 +453,7 @@ void spawn_objects_from_info(UNUSED s32 unused, struct SpawnInfo *spawnInfo) { script = segmented_to_virtual(spawnInfo->behaviorScript); // If the object was previously killed/collected, don't respawn it - if ((spawnInfo->behaviorArg & (RESPAWN_INFO_DONT_RESPAWN << 8)) - != (RESPAWN_INFO_DONT_RESPAWN << 8)) { + if ((spawnInfo->respawnInfo & RESPAWN_INFO_DONT_RESPAWN) != RESPAWN_INFO_DONT_RESPAWN) { object = create_object(script); // Behavior parameters are often treated as four separate bytes, but @@ -486,8 +467,8 @@ void spawn_objects_from_info(UNUSED s32 unused, struct SpawnInfo *spawnInfo) { object->unused1 = 0; // Record death/collection in the SpawnInfo - object->respawnInfoType = RESPAWN_INFO_TYPE_NORMAL; - object->respawnInfo = &spawnInfo->behaviorArg; + object->respawnInfo = spawnInfo->respawnInfo; + object->respawnInfoPointer = &spawnInfo->respawnInfo; // Usually this checks if bparam4 is 1 to decide if this is mario // This change allows any object to use that param diff --git a/src/game/object_list_processor.h b/src/game/object_list_processor.h index 83aec8702..9351354f5 100644 --- a/src/game/object_list_processor.h +++ b/src/game/object_list_processor.h @@ -79,7 +79,6 @@ extern s16 gDebugInfoOverwrite[][8]; extern u32 gTimeStopState; extern struct Object gObjectPool[]; -extern struct Object gMacroObjectDefaultParent; extern struct ObjectNode *gObjectLists; extern struct ObjectNode gFreeObjectList; diff --git a/src/game/spawn_object.c b/src/game/spawn_object.c index adb191bbc..573457938 100644 --- a/src/game/spawn_object.c +++ b/src/game/spawn_object.c @@ -181,8 +181,8 @@ struct Object *allocate_object(struct ObjectNode *objList) { mtxf_identity(obj->transform); - obj->respawnInfoType = RESPAWN_INFO_TYPE_NULL; - obj->respawnInfo = NULL; + obj->respawnInfo = RESPAWN_INFO_NONE; + obj->respawnInfoPointer = NULL; obj->oDistanceToMario = 19000.0f; obj->oRoom = -1; From 219f4683f7fbfc6d778e6c339e901ef91be89f5a Mon Sep 17 00:00:00 2001 From: arthurtilly <32559225+arthurtilly@users.noreply.github.com> Date: Tue, 19 Mar 2024 10:22:04 +1300 Subject: [PATCH 02/25] ASCII/UTF-8 Text and Full Multilang Support (#775) Co-authored-by: Axollyon <20480418+Axollyon@users.noreply.github.com> Co-authored-by: Reonu Co-authored-by: Arceveti Co-authored-by: Gregory Heskett --- Makefile | 54 +- Makefile.split | 8 +- README.md | 10 +- bin/eu/translation_de.c | 15 - bin/eu/translation_en.c | 15 - bin/eu/translation_fr.c | 15 - bin/segment2.c | 1748 +++++++------ bin/translation_de.c | 17 + bin/translation_en.c | 17 + bin/translation_es.c | 17 + bin/translation_fr.c | 17 + bin/translation_jp.c | 17 + charmap.txt | 357 --- charmap_menu.txt | 30 - enhancements/reonucam.patch | 543 ---- include/config/config_game.h | 20 +- include/config/config_safeguards.h | 11 + include/eu_translation.h | 20 - include/macros.h | 3 + include/segment_symbols.h | 25 +- include/text_menu_strings.h.in | 18 - include/text_strings.h.in | 537 ---- levels/ending/header.h | 7 - levels/ending/leveldata.c | 250 -- levels/menu/header.h | 66 +- levels/menu/leveldata.c | 925 ++++--- levels/menu/main_menu_seg7.acute.ia8.png | Bin 0 -> 4602 bytes levels/menu/main_menu_seg7.cedilla.ia8.png | Bin 0 -> 4693 bytes levels/menu/main_menu_seg7.circumflex.ia8.png | Bin 0 -> 4605 bytes levels/menu/main_menu_seg7.colon.ia8.png | Bin 0 -> 78 bytes .../main_menu_seg7.course_lower.rgba16.png | Bin 0 -> 3676 bytes .../main_menu_seg7.course_upper.rgba16.png | Bin 0 -> 4687 bytes levels/menu/main_menu_seg7.grave.ia8.png | Bin 0 -> 4600 bytes ...enu_seg7.inverted_exclamation_mark.ia8.png | Bin 0 -> 4699 bytes ...n_menu_seg7.inverted_question_mark.ia8.png | Bin 0 -> 4682 bytes .../main_menu_seg7.kana_dakuten_ge.rgba16.png | Bin 0 -> 882 bytes .../main_menu_seg7.kana_dakuten_ji.rgba16.png | Bin 0 -> 904 bytes .../main_menu_seg7.katakana_ra.rgba16.png | Bin 0 -> 766 bytes .../menu/main_menu_seg7.kurs_upper.rgba16.png | Bin 0 -> 4719 bytes .../main_menu_seg7.missing_character.ia8.png | Bin 0 -> 4696 bytes .../main_menu_seg7.niveau_upper.rgba16.png | Bin 0 -> 4818 bytes .../main_menu_seg7.nivel_upper.rgba16.png | Bin 0 -> 4193 bytes .../main_menu_seg7.tilde_diacritic.ia8.png | Bin 0 -> 4598 bytes levels/menu/main_menu_seg7.umlaut.ia8.png | Bin 0 -> 76 bytes sm64.ld | 30 +- src/audio/external.c | 100 +- src/audio/external.h | 2 +- src/game/area.c | 24 +- src/game/geo_misc.c | 22 - src/game/hud.c | 55 +- src/game/ingame_menu.c | 2044 ++++++++------- src/game/ingame_menu.h | 327 ++- src/game/level_update.c | 24 +- src/game/mario_actions_cutscene.c | 52 +- src/game/print.c | 419 +-- src/game/print.h | 36 +- src/game/puppycam2.c | 62 +- src/game/save_file.c | 24 +- src/game/save_file.h | 29 +- src/game/segment2.h | 12 +- src/game/segment7.h | 25 +- src/menu/file_select.c | 917 ++++--- src/menu/file_select.h | 12 +- src/menu/star_select.c | 166 +- src/menu/title_screen.c | 4 +- text/de/courses.h | 126 +- text/de/dialogs.h | 817 +++--- text/define_courses.inc.c | 21 +- text/define_text.inc.c | 45 +- text/es/courses.h | 80 + text/es/dialogs.h | 2273 +++++++++++++++++ text/fr/courses.h | 126 +- text/fr/dialogs.h | 897 +++---- text/jp/courses.h | 126 +- text/jp/dialogs.h | 725 +++--- text/us/courses.h | 126 +- text/us/dialogs.h | 924 +++---- textures/segment2/font_graphics.acute.ia4.png | Bin 0 -> 4584 bytes .../segment2/font_graphics.amogus.ia4.png | Bin 0 -> 4707 bytes .../segment2/font_graphics.backslash.ia4.png | Bin 0 -> 5716 bytes .../segment2/font_graphics.cedilla.ia4.png | Bin 0 -> 4620 bytes .../segment2/font_graphics.circumflex.ia4.png | Bin 0 -> 80 bytes .../font_graphics.double_low_quote.ia4.png | Bin 0 -> 4607 bytes .../segment2/font_graphics.eszett.ia4.png | Bin 0 -> 115 bytes textures/segment2/font_graphics.grave.ia4.png | Bin 0 -> 4586 bytes .../segment2/font_graphics.i_no_dot.ia4.png | Bin 0 -> 4606 bytes ...graphics.inverted_exclamation_mark.ia4.png | Bin 0 -> 4598 bytes ...nt_graphics.inverted_question_mark.ia4.png | Bin 0 -> 4628 bytes .../font_graphics.missing_character.ia4.png | Bin 0 -> 4664 bytes textures/segment2/font_graphics.plus.ia4.png | Bin 0 -> 5553 bytes textures/segment2/font_graphics.slash.ia4.png | Bin 0 -> 5501 bytes .../font_graphics.tilde_diacritic.ia4.png | Bin 0 -> 4591 bytes .../segment2/font_graphics.umlaut.ia4.png | Bin 0 -> 75 bytes .../segment2/segment2.ampersand.rgba16.png | Bin 188 -> 355 bytes .../segment2/segment2.beta_key.rgba16.png | Bin 198 -> 210 bytes .../segment2/segment2.blue_coin.rgba16.png | Bin 1108 -> 0 bytes .../segment2.decimal_point.rgba16.png | Bin 123 -> 4782 bytes .../segment2.double_exclamation.rgba16.png | Bin 126 -> 249 bytes .../segment2/segment2.exclamation.rgba16.png | Bin 125 -> 184 bytes textures/segment2/segment2.floomba.rgba16.png | Bin 0 -> 1188 bytes .../segment2/segment2.hud_char_j.rgba16.png | Bin 189 -> 414 bytes .../segment2/segment2.hud_char_q.rgba16.png | Bin 190 -> 502 bytes .../segment2/segment2.hud_char_v.rgba16.png | Bin 188 -> 370 bytes .../segment2/segment2.hud_char_x.rgba16.png | Bin 200 -> 510 bytes .../segment2/segment2.hud_char_z.rgba16.png | Bin 185 -> 493 bytes textures/segment2/segment2.jp_period.ia1.png | Bin 0 -> 4595 bytes textures/segment2/segment2.minus2.rgba16.png | Bin 136 -> 0 bytes textures/segment2/segment2.percent.rgba16.png | Bin 171 -> 285 bytes .../segment2/segment2.question.rgba16.png | Bin 193 -> 421 bytes .../segment2/segment2.red_coin.rgba16.png | Bin 1108 -> 0 bytes .../segment2/segment2.silver_coin.ia16.png | Bin 596 -> 0 bytes .../segment2/segment2.silver_coin.rgba16.png | Bin 596 -> 0 bytes .../segment2/segment2.umlaut_us.rgba16.png | Bin 126 -> 156 bytes tools/.gitignore | 1 - tools/Makefile | 4 +- tools/hashtable.c | 89 - tools/hashtable.h | 13 - tools/textconv.c | 524 ---- tools/utf8.c | 74 - tools/utf8.h | 6 - 120 files changed, 8143 insertions(+), 8002 deletions(-) delete mode 100644 bin/eu/translation_de.c delete mode 100644 bin/eu/translation_en.c delete mode 100644 bin/eu/translation_fr.c create mode 100644 bin/translation_de.c create mode 100644 bin/translation_en.c create mode 100644 bin/translation_es.c create mode 100644 bin/translation_fr.c create mode 100644 bin/translation_jp.c delete mode 100644 charmap.txt delete mode 100644 charmap_menu.txt delete mode 100644 enhancements/reonucam.patch delete mode 100644 include/eu_translation.h delete mode 100644 include/text_menu_strings.h.in delete mode 100644 include/text_strings.h.in create mode 100644 levels/menu/main_menu_seg7.acute.ia8.png create mode 100644 levels/menu/main_menu_seg7.cedilla.ia8.png create mode 100644 levels/menu/main_menu_seg7.circumflex.ia8.png create mode 100644 levels/menu/main_menu_seg7.colon.ia8.png create mode 100644 levels/menu/main_menu_seg7.course_lower.rgba16.png create mode 100644 levels/menu/main_menu_seg7.course_upper.rgba16.png create mode 100644 levels/menu/main_menu_seg7.grave.ia8.png create mode 100644 levels/menu/main_menu_seg7.inverted_exclamation_mark.ia8.png create mode 100644 levels/menu/main_menu_seg7.inverted_question_mark.ia8.png create mode 100644 levels/menu/main_menu_seg7.kana_dakuten_ge.rgba16.png create mode 100644 levels/menu/main_menu_seg7.kana_dakuten_ji.rgba16.png create mode 100644 levels/menu/main_menu_seg7.katakana_ra.rgba16.png create mode 100644 levels/menu/main_menu_seg7.kurs_upper.rgba16.png create mode 100644 levels/menu/main_menu_seg7.missing_character.ia8.png create mode 100644 levels/menu/main_menu_seg7.niveau_upper.rgba16.png create mode 100644 levels/menu/main_menu_seg7.nivel_upper.rgba16.png create mode 100644 levels/menu/main_menu_seg7.tilde_diacritic.ia8.png create mode 100644 levels/menu/main_menu_seg7.umlaut.ia8.png create mode 100644 text/es/courses.h create mode 100644 text/es/dialogs.h create mode 100644 textures/segment2/font_graphics.acute.ia4.png create mode 100644 textures/segment2/font_graphics.amogus.ia4.png create mode 100644 textures/segment2/font_graphics.backslash.ia4.png create mode 100644 textures/segment2/font_graphics.cedilla.ia4.png create mode 100644 textures/segment2/font_graphics.circumflex.ia4.png create mode 100644 textures/segment2/font_graphics.double_low_quote.ia4.png create mode 100644 textures/segment2/font_graphics.eszett.ia4.png create mode 100644 textures/segment2/font_graphics.grave.ia4.png create mode 100644 textures/segment2/font_graphics.i_no_dot.ia4.png create mode 100644 textures/segment2/font_graphics.inverted_exclamation_mark.ia4.png create mode 100644 textures/segment2/font_graphics.inverted_question_mark.ia4.png create mode 100644 textures/segment2/font_graphics.missing_character.ia4.png create mode 100644 textures/segment2/font_graphics.plus.ia4.png create mode 100644 textures/segment2/font_graphics.slash.ia4.png create mode 100644 textures/segment2/font_graphics.tilde_diacritic.ia4.png create mode 100644 textures/segment2/font_graphics.umlaut.ia4.png delete mode 100644 textures/segment2/segment2.blue_coin.rgba16.png create mode 100644 textures/segment2/segment2.floomba.rgba16.png create mode 100644 textures/segment2/segment2.jp_period.ia1.png delete mode 100644 textures/segment2/segment2.minus2.rgba16.png delete mode 100644 textures/segment2/segment2.red_coin.rgba16.png delete mode 100644 textures/segment2/segment2.silver_coin.ia16.png delete mode 100644 textures/segment2/segment2.silver_coin.rgba16.png delete mode 100644 tools/hashtable.c delete mode 100644 tools/hashtable.h delete mode 100644 tools/textconv.c delete mode 100644 tools/utf8.c delete mode 100644 tools/utf8.h diff --git a/Makefile b/Makefile index b63fe099a..5bfda7a9c 100644 --- a/Makefile +++ b/Makefile @@ -501,15 +501,15 @@ DEF_INC_CFLAGS := $(foreach i,$(INCLUDE_DIRS),-I$(i)) $(C_DEFINES) # C compiler options CFLAGS = -G 0 $(OPT_FLAGS) $(TARGET_CFLAGS) $(MIPSISET) $(DEF_INC_CFLAGS) ifeq ($(COMPILER),gcc) - CFLAGS += -mno-shared -march=vr4300 -mfix4300 -mabi=32 -mhard-float -mdivide-breaks -fno-stack-protector -fno-common -fno-zero-initialized-in-bss -fno-PIC -mno-abicalls -fno-strict-aliasing -fno-inline-functions -ffreestanding -fwrapv -Wall -Wextra + CFLAGS += -mno-shared -march=vr4300 -mfix4300 -mabi=32 -mhard-float -mdivide-breaks -fno-stack-protector -fno-common -fno-zero-initialized-in-bss -fno-PIC -mno-abicalls -fno-strict-aliasing -fno-inline-functions -ffreestanding -fwrapv -Wall -Wextra -Wno-trigraphs CFLAGS += -Wno-missing-braces else ifeq ($(COMPILER),clang) - CFLAGS += -mfpxx -target mips -mabi=32 -G 0 -mhard-float -fomit-frame-pointer -fno-stack-protector -fno-common -I include -I src/ -I $(BUILD_DIR)/include -fno-PIC -mno-abicalls -fno-strict-aliasing -fno-inline-functions -ffreestanding -fwrapv -Wall -Wextra + CFLAGS += -mfpxx -target mips -mabi=32 -G 0 -mhard-float -fomit-frame-pointer -fno-stack-protector -fno-common -I include -I src/ -I $(BUILD_DIR)/include -fno-PIC -mno-abicalls -fno-strict-aliasing -fno-inline-functions -ffreestanding -fwrapv -Wall -Wextra -Wno-trigraphs CFLAGS += -Wno-missing-braces else CFLAGS += -non_shared -Wab,-r4300_mul -Xcpluscomm -Xfullwarn -signed -32 endif -ASMFLAGS = -G 0 $(OPT_FLAGS) $(TARGET_CFLAGS) -mips3 $(DEF_INC_CFLAGS) -mno-shared -march=vr4300 -mfix4300 -mabi=32 -mhard-float -mdivide-breaks -fno-stack-protector -fno-common -fno-zero-initialized-in-bss -fno-PIC -mno-abicalls -fno-strict-aliasing -fno-inline-functions -ffreestanding -fwrapv -Wall -Wextra +ASMFLAGS = -G 0 $(OPT_FLAGS) $(TARGET_CFLAGS) -mips3 $(DEF_INC_CFLAGS) -mno-shared -march=vr4300 -mfix4300 -mabi=32 -mhard-float -mdivide-breaks -fno-stack-protector -fno-common -fno-zero-initialized-in-bss -fno-PIC -mno-abicalls -fno-strict-aliasing -fno-inline-functions -ffreestanding -fwrapv -Wall -Wextra -Wno-trigraphs ASFLAGS := -march=vr4300 -mabi=32 $(foreach i,$(INCLUDE_DIRS),-I$(i)) $(foreach d,$(DEFINES),--defsym $(d)) RSPASMFLAGS := $(foreach d,$(DEFINES),-definelabel $(subst =, ,$(d))) @@ -530,7 +530,6 @@ N64CKSUM := $(TOOLS_DIR)/n64cksum N64GRAPHICS := $(TOOLS_DIR)/n64graphics N64GRAPHICS_CI := $(TOOLS_DIR)/n64graphics_ci BINPNG := $(TOOLS_DIR)/BinPNG.py -TEXTCONV := $(TOOLS_DIR)/textconv AIFF_EXTRACT_CODEBOOK := $(TOOLS_DIR)/aiff_extract_codebook VADPCM_ENC := $(TOOLS_DIR)/vadpcm_enc EXTRACT_DATA_FOR_MIO := $(TOOLS_DIR)/extract_data_for_mio @@ -571,7 +570,7 @@ endif # For non-IDO, use objcopy instead of extract_data_for_mio ifneq ($(COMPILER),ido) - EXTRACT_DATA_FOR_MIO := $(OBJCOPY) -O binary --only-section=.data + EXTRACT_DATA_FOR_MIO := $(OBJCOPY) -O binary --only-section=.data --only-section=.rodata endif # Common build print status function @@ -646,29 +645,6 @@ $(BUILD_DIR)/src/libz/%.o: OPT_FLAGS := -Os $(BUILD_DIR)/src/libz/%.o: CFLAGS += -Wno-implicit-fallthrough -Wno-unused-parameter -Wno-pointer-sign endif -ifeq ($(VERSION),eu) - TEXT_DIRS := text/de text/us text/fr - - # EU encoded text inserted into individual segment 0x19 files, - # and course data also duplicated in leveldata.c - $(BUILD_DIR)/bin/eu/translation_en.o: $(BUILD_DIR)/text/us/define_text.inc.c - $(BUILD_DIR)/bin/eu/translation_de.o: $(BUILD_DIR)/text/de/define_text.inc.c - $(BUILD_DIR)/bin/eu/translation_fr.o: $(BUILD_DIR)/text/fr/define_text.inc.c - $(BUILD_DIR)/levels/menu/leveldata.o: $(BUILD_DIR)/include/text_strings.h - $(BUILD_DIR)/levels/menu/leveldata.o: $(BUILD_DIR)/text/us/define_courses.inc.c - $(BUILD_DIR)/levels/menu/leveldata.o: $(BUILD_DIR)/text/de/define_courses.inc.c - $(BUILD_DIR)/levels/menu/leveldata.o: $(BUILD_DIR)/text/fr/define_courses.inc.c -else - ifeq ($(VERSION),sh) - TEXT_DIRS := text/jp - $(BUILD_DIR)/bin/segment2.o: $(BUILD_DIR)/text/jp/define_text.inc.c - else - TEXT_DIRS := text/$(VERSION) - # non-EU encoded text inserted into segment 0x02 - $(BUILD_DIR)/bin/segment2.o: $(BUILD_DIR)/text/$(VERSION)/define_text.inc.c - endif -endif - $(BUILD_DIR)/src/usb/usb.o: OPT_FLAGS := -O0 $(BUILD_DIR)/src/usb/usb.o: CFLAGS += -Wno-unused-variable -Wno-sign-compare -Wno-unused-function $(BUILD_DIR)/src/usb/debug.o: OPT_FLAGS := -O0 @@ -686,17 +662,11 @@ $(BUILD_DIR)/src/game/rendering_graph_node.o: OPT_FLAGS := $(GRAPH_NODE_OPT_FLAG # $(info MATH_UTIL_OPT_FLAGS: $(MATH_UTIL_OPT_FLAGS)) # $(info GRAPH_NODE_OPT_FLAGS: $(GRAPH_NODE_OPT_FLAGS)) -ALL_DIRS := $(BUILD_DIR) $(addprefix $(BUILD_DIR)/,$(SRC_DIRS) asm/debug $(GODDARD_SRC_DIRS) $(LIBZ_SRC_DIRS) $(ULTRA_BIN_DIRS) $(BIN_DIRS) $(TEXTURE_DIRS) $(TEXT_DIRS) $(SOUND_SAMPLE_DIRS) $(addprefix levels/,$(LEVEL_DIRS)) rsp include) $(YAY0_DIR) $(addprefix $(YAY0_DIR)/,$(VERSION)) $(SOUND_BIN_DIR) $(SOUND_BIN_DIR)/sequences/$(VERSION) +ALL_DIRS := $(BUILD_DIR) $(addprefix $(BUILD_DIR)/,$(SRC_DIRS) asm/debug $(GODDARD_SRC_DIRS) $(LIBZ_SRC_DIRS) $(ULTRA_BIN_DIRS) $(BIN_DIRS) $(TEXTURE_DIRS) $(SOUND_SAMPLE_DIRS) $(addprefix levels/,$(LEVEL_DIRS)) rsp include) $(YAY0_DIR) $(addprefix $(YAY0_DIR)/,$(VERSION)) $(SOUND_BIN_DIR) $(SOUND_BIN_DIR)/sequences/$(VERSION) # Make sure build directory exists before compiling anything DUMMY != mkdir -p $(ALL_DIRS) -$(BUILD_DIR)/include/text_strings.h: $(BUILD_DIR)/include/text_menu_strings.h -$(BUILD_DIR)/src/menu/file_select.o: $(BUILD_DIR)/include/text_strings.h -$(BUILD_DIR)/src/menu/star_select.o: $(BUILD_DIR)/include/text_strings.h -$(BUILD_DIR)/src/game/ingame_menu.o: $(BUILD_DIR)/include/text_strings.h -$(BUILD_DIR)/src/game/puppycam2.o: $(BUILD_DIR)/include/text_strings.h - #==============================================================================# @@ -823,20 +793,6 @@ $(BUILD_DIR)/assets/demo_data.c: assets/demo_data.json $(wildcard assets/demos/* @$(PRINT) "$(GREEN)Generating demo data $(NO_COL)\n" $(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 - $(call print,Encoding:,$<,$@) - $(V)$(TEXTCONV) charmap.txt $< $@ -$(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 - $@ -$(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 - $@ - # Level headers $(BUILD_DIR)/include/level_headers.h: levels/level_headers.h.in $(call print,Preprocessing level headers:,$<,$@) diff --git a/Makefile.split b/Makefile.split index 8ea95df2d..f5d1c09de 100644 --- a/Makefile.split +++ b/Makefile.split @@ -243,9 +243,11 @@ $(BUILD_DIR)/bin/machine.elf: SEGMENT_ADDRESS := 0x09000000 $(BUILD_DIR)/bin/mountain.elf: SEGMENT_ADDRESS := 0x09000000 $(BUILD_DIR)/bin/grass.elf: SEGMENT_ADDRESS := 0x09000000 # EU segment 19 translations -$(BUILD_DIR)/bin/eu/translation_de.elf: SEGMENT_ADDRESS := 0x19000000 -$(BUILD_DIR)/bin/eu/translation_en.elf: SEGMENT_ADDRESS := 0x19000000 -$(BUILD_DIR)/bin/eu/translation_fr.elf: SEGMENT_ADDRESS := 0x19000000 +$(BUILD_DIR)/bin/translation_de.elf: SEGMENT_ADDRESS := 0x19000000 +$(BUILD_DIR)/bin/translation_en.elf: SEGMENT_ADDRESS := 0x19000000 +$(BUILD_DIR)/bin/translation_fr.elf: SEGMENT_ADDRESS := 0x19000000 +$(BUILD_DIR)/bin/translation_jp.elf: SEGMENT_ADDRESS := 0x19000000 +$(BUILD_DIR)/bin/translation_es.elf: SEGMENT_ADDRESS := 0x19000000 # -------------------------------------- # Skybox Rules diff --git a/README.md b/README.md index 37850f2d2..cda57beb6 100644 --- a/README.md +++ b/README.md @@ -17,9 +17,9 @@ This is a fork of the ultrasm64 repo by CrashOveride which includes the followin - **MrComit**: General use object defines, JUMP_KICK_FIX - **aglab2**: Bugfixes (particularly puppycam), refactor stuff - **someone2639**: math.s and crash screen disam, stack trace, map packing, shiftable segments 2, S2DEX engine -- **Arthurtilly**: Platform Displacement 2 +- **Arthurtilly**: ASCII / UTF-8 support, Multilang, Platform Displacement 2 - **Fazana**: PuppyLib, ucode swapping, audio load time optimisations (with Arctic), general hacker qol improvements, visual debug -- **Reonu**: Starting the project/repo, widescreen, reonucam, various defines for hacker QoL +- **Reonu**: Starting the project + widescreen, reonucam, various defines for hacker QoL, and a custom Spanish (Spain) translation of the game. - **JoshDuMan**: Decomp guy, general assistance - **Arceveti**: Silhouette, shadow optimisation, better hanging, breath meter, 4 controller support - **axollyon**: Console testing, bugfixes, idea-guying, and had a hand in silhouettes @@ -87,9 +87,9 @@ Thanks to Frame#5375 and AloXado320 for also helping with silhouette stuff - You can set a test level in `config/config_debug.h` in order to boot straight into it, so you can quickly test the level you're working on. * - Allow all surfaces in the game to have a `force` parameter. Activating this doesn't REQUIRE you to set `force` for every surface: If you don't set, it will default to 0x0000 rather than crashing. Increases RAM usage of collision. * - The clown font includes the entire English alphabet. -- Colored ia4 text support. Format: `"@XXXXXXXX[YOUR TEXT]@--------"` (By ArcticJaguar725) - - Example Text: `"@FF0000FFRED @00FF00FFGREEN @0000FFFFBLUE @FFFFFF00INVISIBLE @--------NORMAL"` - - NOTE: It is not mandatory to reset the text color with `"@--------"`, but text will need to be recolored each time it scrolls in a dialog box, or the custom color will reset. +- Colored ia4 text support. Format: `"@XXXXXX[YOUR TEXT]@--------"` (By Arthurtilly) + - Example Text: `"@FF0000RED @00FF00GREEN @0000FFBLUE @FFFFFFWHITE"` + - NOTE: Text will need to be recolored each time it scrolls in a dialog box, or the custom color will reset. The text will use gDialogTextAlpha as the alpha value when changing the color. - Toggle visiblity of collision surfaces and object hitboxes with Visual Surface Debug. `config/config_debug.h` has VISUAL_DEBUG which can be turned on to enable this feature. - Workaround for infinite death loops caused by using the wrong warp type for death warps. Mario's HP will be restored when being warped to any warp if (and only if) he was warped while dead. * diff --git a/bin/eu/translation_de.c b/bin/eu/translation_de.c deleted file mode 100644 index d7c1f5970..000000000 --- a/bin/eu/translation_de.c +++ /dev/null @@ -1,15 +0,0 @@ -// SM64 (EU) Segment 19 - Deutsch - -#include "macros.h" - -#include "game/ingame_menu.h" - -#include "make_const_nonconst.h" - -// Include text/define_text.inc.c, preprocessed with -I text/de/ to get the -// right translation strings, with symbols renamed as below. -#define seg2_course_name_table course_name_table_eu_de -#define seg2_act_name_table act_name_table_eu_de -#define seg2_dialog_table dialog_table_eu_de - -#include "text/de/define_text.inc.c" diff --git a/bin/eu/translation_en.c b/bin/eu/translation_en.c deleted file mode 100644 index 9817bc5a0..000000000 --- a/bin/eu/translation_en.c +++ /dev/null @@ -1,15 +0,0 @@ -// SM64 (EU) Segment 19 - English - -#include "macros.h" - -#include "game/ingame_menu.h" - -#include "make_const_nonconst.h" - -// Include text/define_text.inc.c, preprocessed with -I text/us/ to get the -// right translation strings, with symbols renamed as below. -#define seg2_course_name_table course_name_table_eu_en -#define seg2_act_name_table act_name_table_eu_en -#define seg2_dialog_table dialog_table_eu_en - -#include "text/us/define_text.inc.c" diff --git a/bin/eu/translation_fr.c b/bin/eu/translation_fr.c deleted file mode 100644 index 119839c93..000000000 --- a/bin/eu/translation_fr.c +++ /dev/null @@ -1,15 +0,0 @@ -// SM64 (EU) Segment 19 - Français - -#include "macros.h" - -#include "game/ingame_menu.h" - -#include "make_const_nonconst.h" - -// Include text/define_text.inc.c, preprocessed with -I text/fr/ to get the -// right translation strings, with symbols renamed as below. -#define seg2_course_name_table course_name_table_eu_fr -#define seg2_act_name_table act_name_table_eu_fr -#define seg2_dialog_table dialog_table_eu_fr - -#include "text/fr/define_text.inc.c" diff --git a/bin/segment2.c b/bin/segment2.c index 260e007fe..88dca977e 100644 --- a/bin/segment2.c +++ b/bin/segment2.c @@ -231,15 +231,9 @@ ALIGNED8 static const Texture texture_hud_char_I[] = { #include "textures/segment2/segment2.02400.rgba16.inc.c" }; -#if defined(VERSION_JP) || defined(VERSION_SH) || defined(COMPLETE_EN_US_SEGMENT2) -ALIGNED8 static const Texture texture_hud_char_J[] = { -#include "textures/segment2/segment2.02600.rgba16.inc.c" -}; -#else ALIGNED8 static const Texture texture_hud_char_J[] = { #include "textures/segment2/segment2.hud_char_j.rgba16.inc.c" }; -#endif ALIGNED8 static const Texture texture_hud_char_K[] = { #include "textures/segment2/segment2.02800.rgba16.inc.c" @@ -265,15 +259,9 @@ ALIGNED8 static const Texture texture_hud_char_P[] = { #include "textures/segment2/segment2.03200.rgba16.inc.c" }; -#if defined(VERSION_JP) || defined(VERSION_SH) || defined(COMPLETE_EN_US_SEGMENT2) -ALIGNED8 static const Texture texture_hud_char_Q[] = { -#include "textures/segment2/segment2.03400.rgba16.inc.c" -}; -#else ALIGNED8 static const Texture texture_hud_char_Q[] = { #include "textures/segment2/segment2.hud_char_q.rgba16.inc.c" }; -#endif ALIGNED8 static const Texture texture_hud_char_R[] = { #include "textures/segment2/segment2.03600.rgba16.inc.c" @@ -291,43 +279,25 @@ 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) || defined(COMPLETE_EN_US_SEGMENT2) -ALIGNED8 static const Texture texture_hud_char_V[] = { -#include "textures/segment2/segment2.03E00.rgba16.inc.c" -}; -#else ALIGNED8 static const Texture texture_hud_char_V[] = { #include "textures/segment2/segment2.hud_char_v.rgba16.inc.c" }; -#endif ALIGNED8 static const Texture texture_hud_char_W[] = { #include "textures/segment2/segment2.04000.rgba16.inc.c" }; -#if defined(VERSION_JP) || defined(VERSION_SH) || defined(COMPLETE_EN_US_SEGMENT2) -ALIGNED8 static const Texture texture_hud_char_X[] = { -#include "textures/segment2/segment2.04200.rgba16.inc.c" -}; -#else ALIGNED8 static const Texture texture_hud_char_X[] = { #include "textures/segment2/segment2.hud_char_x.rgba16.inc.c" }; -#endif 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) || defined(COMPLETE_EN_US_SEGMENT2) -ALIGNED8 static const Texture texture_hud_char_Z[] = { -#include "textures/segment2/segment2.04600.rgba16.inc.c" -}; -#else ALIGNED8 static const Texture texture_hud_char_Z[] = { #include "textures/segment2/segment2.hud_char_z.rgba16.inc.c" }; -#endif ALIGNED8 static const Texture texture_hud_char_apostrophe[] = { #include "textures/segment2/segment2.04800.rgba16.inc.c" @@ -337,37 +307,6 @@ ALIGNED8 static const Texture texture_hud_char_double_quote[] = { #include "textures/segment2/segment2.04A00.rgba16.inc.c" }; -#if defined(VERSION_EU) || defined(COMPLETE_EN_US_SEGMENT2) -ALIGNED8 static const Texture texture_hud_char_umlaut[] = { -#include "textures/segment2/segment2.umlaut.rgba16.inc.c"// EU ¨ -}; -#else -ALIGNED8 static const Texture texture_hud_char_umlaut[] = { -#include "textures/segment2/segment2.umlaut_us.rgba16.inc.c"// EU ¨ -}; -#endif - -#if defined(VERSION_JP) || defined(VERSION_SH) || defined(COMPLETE_EN_US_SEGMENT2) -ALIGNED8 static const Texture texture_hud_char_exclamation[] = { -#include "textures/segment2/segment2.04C00.rgba16.inc.c"// JP ! -}; - -ALIGNED8 static const Texture texture_hud_char_double_exclamation[] = { -#include "textures/segment2/segment2.04E00.rgba16.inc.c"// JP !! -}; - -ALIGNED8 static const Texture texture_hud_char_question[] = { -#include "textures/segment2/segment2.05000.rgba16.inc.c"// JP ? -}; - -ALIGNED8 static const Texture texture_hud_char_ampersand[] = { -#include "textures/segment2/segment2.05200.rgba16.inc.c"// JP & -}; - -ALIGNED8 static const Texture texture_hud_char_percent[] = { -#include "textures/segment2/segment2.05400.rgba16.inc.c"// JP % -}; -#else ALIGNED8 static const Texture texture_hud_char_exclamation[] = { #include "textures/segment2/segment2.exclamation.rgba16.inc.c"// JP ! }; @@ -377,8 +316,7 @@ ALIGNED8 static const Texture texture_hud_char_double_exclamation[] = { }; ALIGNED8 static const Texture texture_hud_char_question[] = { -#include "textures/segment2/segment2.question.rgba16.inc.c"// JP ? -// #include "levels/menu/main_menu_seg7.0A1D0.rgba16.png" +#include "textures/segment2/segment2.question.rgba16.inc.c" }; ALIGNED8 static const Texture texture_hud_char_ampersand[] = { @@ -388,7 +326,6 @@ ALIGNED8 static const Texture texture_hud_char_ampersand[] = { ALIGNED8 static const Texture texture_hud_char_percent[] = { #include "textures/segment2/segment2.percent.rgba16.inc.c"// JP % }; -#endif ALIGNED8 static const Texture texture_hud_char_minus[] = { #include "textures/segment2/segment2.minus.rgba16.inc.c" @@ -402,14 +339,6 @@ ALIGNED8 static const Texture texture_hud_char_coin[] = { #include "textures/segment2/segment2.05800.rgba16.inc.c" }; -ALIGNED8 static const Texture texture_hud_char_red_coin[] = { -#include "textures/segment2/segment2.red_coin.rgba16.inc.c" -}; - -ALIGNED8 static const Texture texture_hud_char_silver_coin[] = { -#include "textures/segment2/segment2.silver_coin.rgba16.inc.c" -}; - ALIGNED8 static const Texture texture_hud_char_mario_head[] = { #include "textures/segment2/segment2.05A00.rgba16.inc.c" }; @@ -418,15 +347,6 @@ ALIGNED8 static const Texture texture_hud_char_star[] = { #include "textures/segment2/segment2.05C00.rgba16.inc.c" }; -#if defined(VERSION_JP) || defined(VERSION_SH) || defined(COMPLETE_EN_US_SEGMENT2) -ALIGNED8 static const Texture texture_hud_char_decimal_point[] = { -#include "textures/segment2/segment2.05E00.rgba16.inc.c" -}; - -ALIGNED8 static const Texture texture_hud_char_beta_key[] = { -#include "textures/segment2/segment2.06000.rgba16.inc.c" -}; -#else ALIGNED8 static const Texture texture_hud_char_decimal_point[] = { #include "textures/segment2/segment2.decimal_point.rgba16.inc.c" }; @@ -434,7 +354,14 @@ ALIGNED8 static const Texture texture_hud_char_decimal_point[] = { ALIGNED8 static const Texture texture_hud_char_beta_key[] = { #include "textures/segment2/segment2.beta_key.rgba16.inc.c" }; -#endif + +ALIGNED8 static const Texture texture_hud_char_floomba[] = { +#include "textures/segment2/segment2.floomba.rgba16.inc.c" +}; + +ALIGNED8 const Texture texture_hud_char_umlaut[] = { +#include "textures/segment2/segment2.umlaut_us.rgba16.inc.c"// EU ¨ +}; ALIGNED8 static const Texture texture_credits_char_3[] = { #include "textures/segment2/segment2.06200.rgba16.inc.c" @@ -556,8 +483,8 @@ ALIGNED8 static const Texture texture_credits_char_period[] = { #include "textures/segment2/segment2.07080.rgba16.inc.c" }; +#ifdef JAPANESE_CHARACTERS // JP Small Font -#if defined(VERSION_JP) || defined(VERSION_SH) ALIGNED8 static const Texture texture_font_char_jp_0[] = { #include "textures/segment2/segment2.07100.ia1.inc.c" }; @@ -714,8 +641,8 @@ ALIGNED8 static const Texture texture_font_char_jp_dakuten[] = { #include "textures/segment2/segment2.07360.ia1.inc.c" }; -ALIGNED8 static const Texture texture_font_char_jp_handakuten[] = { -#include "textures/segment2/segment2.07370.ia1.inc.c" +ALIGNED8 static const Texture texture_font_char_jp_period[] = { +#include "textures/segment2/segment2.jp_period.ia1.inc.c" }; ALIGNED8 static const Texture texture_font_char_jp_percent[] = { @@ -726,38 +653,18 @@ ALIGNED8 static const Texture texture_font_char_jp_question[] = { #include "textures/segment2/segment2.07390.ia1.inc.c" }; -ALIGNED8 static const Texture texture_font_char_jp_left_right_arrow[] = { -#include "textures/segment2/segment2.073A0.ia1.inc.c" -}; - ALIGNED8 static const Texture texture_font_char_jp_open_parentheses[] = { #include "textures/segment2/segment2.073B0.ia1.inc.c" }; -ALIGNED8 static const Texture texture_font_char_jp_close_open_parentheses[] = { -#include "textures/segment2/segment2.073C0.ia1.inc.c" -}; - ALIGNED8 static const Texture texture_font_char_jp_close_parentheses[] = { #include "textures/segment2/segment2.073D0.ia1.inc.c" }; -ALIGNED8 static const Texture texture_font_char_jp_coin[] = { -#include "textures/segment2/segment2.073E0.ia1.inc.c" -}; - ALIGNED8 static const Texture texture_font_char_jp_multiply[] = { #include "textures/segment2/segment2.073F0.ia1.inc.c" }; -ALIGNED8 static const Texture texture_font_char_jp_star_filled[] = { -#include "textures/segment2/segment2.07400.ia1.inc.c" -}; - -ALIGNED8 static const Texture texture_font_char_jp_star_hollow[] = { -#include "textures/segment2/segment2.07410.ia1.inc.c" -}; - ALIGNED8 static const Texture texture_font_char_jp_hiragana_a[] = { #include "textures/segment2/segment2.07420.ia1.inc.c" }; @@ -770,7 +677,7 @@ ALIGNED8 static const Texture texture_font_char_jp_hiragana_u[] = { #include "textures/segment2/segment2.07440.ia1.inc.c" }; -ALIGNED8 static const Texture texture_font_char_jp_hiragana_c[] = { +ALIGNED8 static const Texture texture_font_char_jp_hiragana_e[] = { #include "textures/segment2/segment2.07450.ia1.inc.c" }; @@ -866,7 +773,7 @@ ALIGNED8 static const Texture texture_font_char_jp_hiragana_hi[] = { #include "textures/segment2/segment2.075C0.ia1.inc.c" }; -ALIGNED8 static const Texture texture_font_char_jp_hiragana_hu[] = { +ALIGNED8 static const Texture texture_font_char_jp_hiragana_fu[] = { #include "textures/segment2/segment2.075D0.ia1.inc.c" }; @@ -1094,7 +1001,7 @@ ALIGNED8 static const Texture texture_font_char_jp_katakana_hi[] = { #include "textures/segment2/segment2.07950.ia1.inc.c" }; -ALIGNED8 static const Texture texture_font_char_jp_katakana_hu[] = { +ALIGNED8 static const Texture texture_font_char_jp_katakana_fu[] = { #include "textures/segment2/segment2.07960.ia1.inc.c" }; @@ -1210,419 +1117,13 @@ ALIGNED8 static const Texture texture_font_char_jp_double_quotation_close[] = { #include "textures/segment2/segment2.07B20.ia1.inc.c" }; -ALIGNED8 static const Texture texture_font_char_jp_wave_dash[] = { +ALIGNED8 static const Texture texture_font_char_jp_tilde[] = { #include "textures/segment2/segment2.07B30.ia1.inc.c" }; - -ALIGNED8 static const Texture texture_font_char_jp_ellipsis[] = { -#include "textures/segment2/segment2.07B40.ia1.inc.c" -}; - -// EU Small Font -#elif defined(VERSION_EU) - -ALIGNED8 static const Texture texture_font_char_eu_0[] = { -#include "textures/segment2/font_graphics.05F00.ia1.inc.c" -}; - -ALIGNED8 static const Texture texture_font_char_eu_1[] = { -#include "textures/segment2/font_graphics.05F10.ia1.inc.c" -}; - -ALIGNED8 static const Texture texture_font_char_eu_2[] = { -#include "textures/segment2/font_graphics.05F20.ia1.inc.c" -}; - -ALIGNED8 static const Texture texture_font_char_eu_3[] = { -#include "textures/segment2/font_graphics.05F30.ia1.inc.c" -}; - -ALIGNED8 static const Texture texture_font_char_eu_4[] = { -#include "textures/segment2/font_graphics.05F40.ia1.inc.c" -}; - -ALIGNED8 static const Texture texture_font_char_eu_5[] = { -#include "textures/segment2/font_graphics.05F50.ia1.inc.c" -}; - -ALIGNED8 static const Texture texture_font_char_eu_6[] = { -#include "textures/segment2/font_graphics.05F60.ia1.inc.c" -}; - -ALIGNED8 static const Texture texture_font_char_eu_7[] = { -#include "textures/segment2/font_graphics.05F70.ia1.inc.c" -}; - -ALIGNED8 static const Texture texture_font_char_eu_8[] = { -#include "textures/segment2/font_graphics.05F80.ia1.inc.c" -}; - -ALIGNED8 static const Texture texture_font_char_eu_9[] = { -#include "textures/segment2/font_graphics.05F90.ia1.inc.c" -}; - -ALIGNED8 static const Texture texture_font_char_eu_A[] = { -#include "textures/segment2/font_graphics.05FA0.ia1.inc.c" -}; - -ALIGNED8 static const Texture texture_font_char_eu_B[] = { -#include "textures/segment2/font_graphics.05FB0.ia1.inc.c" -}; - -ALIGNED8 static const Texture texture_font_char_eu_C[] = { -#include "textures/segment2/font_graphics.05FC0.ia1.inc.c" -}; - -ALIGNED8 static const Texture texture_font_char_eu_D[] = { -#include "textures/segment2/font_graphics.05FD0.ia1.inc.c" -}; - -ALIGNED8 static const Texture texture_font_char_eu_E[] = { -#include "textures/segment2/font_graphics.05FE0.ia1.inc.c" -}; - -ALIGNED8 static const Texture texture_font_char_eu_F[] = { -#include "textures/segment2/font_graphics.05FF0.ia1.inc.c" -}; - -ALIGNED8 static const Texture texture_font_char_eu_G[] = { -#include "textures/segment2/font_graphics.06000.ia1.inc.c" -}; - -ALIGNED8 static const Texture texture_font_char_eu_H[] = { -#include "textures/segment2/font_graphics.06010.ia1.inc.c" -}; - -ALIGNED8 static const Texture texture_font_char_eu_I[] = { -#include "textures/segment2/font_graphics.06020.ia1.inc.c" -}; - -ALIGNED8 static const Texture texture_font_char_eu_J[] = { -#include "textures/segment2/font_graphics.06030.ia1.inc.c" -}; - -ALIGNED8 static const Texture texture_font_char_eu_K[] = { -#include "textures/segment2/font_graphics.06040.ia1.inc.c" -}; - -ALIGNED8 static const Texture texture_font_char_eu_L[] = { -#include "textures/segment2/font_graphics.06050.ia1.inc.c" -}; - -ALIGNED8 static const Texture texture_font_char_eu_M[] = { -#include "textures/segment2/font_graphics.06060.ia1.inc.c" -}; - -ALIGNED8 static const Texture texture_font_char_eu_N[] = { -#include "textures/segment2/font_graphics.06070.ia1.inc.c" -}; - -ALIGNED8 static const Texture texture_font_char_eu_O[] = { -#include "textures/segment2/font_graphics.06080.ia1.inc.c" -}; - -ALIGNED8 static const Texture texture_font_char_eu_P[] = { -#include "textures/segment2/font_graphics.06090.ia1.inc.c" -}; - -ALIGNED8 static const Texture texture_font_char_eu_Q[] = { -#include "textures/segment2/font_graphics.060A0.ia1.inc.c" -}; - -ALIGNED8 static const Texture texture_font_char_eu_R[] = { -#include "textures/segment2/font_graphics.060B0.ia1.inc.c" -}; - -ALIGNED8 static const Texture texture_font_char_eu_S[] = { -#include "textures/segment2/font_graphics.060C0.ia1.inc.c" -}; - -ALIGNED8 static const Texture texture_font_char_eu_T[] = { -#include "textures/segment2/font_graphics.060D0.ia1.inc.c" -}; - -ALIGNED8 static const Texture texture_font_char_eu_U[] = { -#include "textures/segment2/font_graphics.060E0.ia1.inc.c" -}; - -ALIGNED8 static const Texture texture_font_char_eu_V[] = { -#include "textures/segment2/font_graphics.060F0.ia1.inc.c" -}; - -ALIGNED8 static const Texture texture_font_char_eu_W[] = { -#include "textures/segment2/font_graphics.06100.ia1.inc.c" -}; - -ALIGNED8 static const Texture texture_font_char_eu_X[] = { -#include "textures/segment2/font_graphics.06110.ia1.inc.c" -}; - -ALIGNED8 static const Texture texture_font_char_eu_Y[] = { -#include "textures/segment2/font_graphics.06120.ia1.inc.c" -}; - -ALIGNED8 static const Texture texture_font_char_eu_Z[] = { -#include "textures/segment2/font_graphics.06130.ia1.inc.c" -}; - -ALIGNED8 static const Texture texture_font_char_eu_a[] = { -#include "textures/segment2/font_graphics.06140.ia1.inc.c" -}; - -ALIGNED8 static const Texture texture_font_char_eu_b[] = { -#include "textures/segment2/font_graphics.06150.ia1.inc.c" -}; - -ALIGNED8 static const Texture texture_font_char_eu_c[] = { -#include "textures/segment2/font_graphics.06160.ia1.inc.c" -}; - -ALIGNED8 static const Texture texture_font_char_eu_d[] = { -#include "textures/segment2/font_graphics.06170.ia1.inc.c" -}; - -ALIGNED8 static const Texture texture_font_char_eu_e[] = { -#include "textures/segment2/font_graphics.06180.ia1.inc.c" -}; - -ALIGNED8 static const Texture texture_font_char_eu_f[] = { -#include "textures/segment2/font_graphics.06190.ia1.inc.c" -}; - -ALIGNED8 static const Texture texture_font_char_eu_g[] = { -#include "textures/segment2/font_graphics.061A0.ia1.inc.c" -}; - -ALIGNED8 static const Texture texture_font_char_eu_h[] = { -#include "textures/segment2/font_graphics.061B0.ia1.inc.c" -}; - -ALIGNED8 static const Texture texture_font_char_eu_i[] = { -#include "textures/segment2/font_graphics.061C0.ia1.inc.c" -}; - -ALIGNED8 static const Texture texture_font_char_eu_j[] = { -#include "textures/segment2/font_graphics.061D0.ia1.inc.c" -}; - -ALIGNED8 static const Texture texture_font_char_eu_k[] = { -#include "textures/segment2/font_graphics.061E0.ia1.inc.c" -}; - -ALIGNED8 static const Texture texture_font_char_eu_l[] = { -#include "textures/segment2/font_graphics.061F0.ia1.inc.c" -}; - -ALIGNED8 static const Texture texture_font_char_eu_m[] = { -#include "textures/segment2/font_graphics.06200.ia1.inc.c" -}; - -ALIGNED8 static const Texture texture_font_char_eu_n[] = { -#include "textures/segment2/font_graphics.06210.ia1.inc.c" -}; - -ALIGNED8 static const Texture texture_font_char_eu_o[] = { -#include "textures/segment2/font_graphics.06220.ia1.inc.c" -}; - -ALIGNED8 static const Texture texture_font_char_eu_p[] = { -#include "textures/segment2/font_graphics.06230.ia1.inc.c" -}; - -ALIGNED8 static const Texture texture_font_char_eu_q[] = { -#include "textures/segment2/font_graphics.06240.ia1.inc.c" -}; - -ALIGNED8 static const Texture texture_font_char_eu_r[] = { -#include "textures/segment2/font_graphics.06250.ia1.inc.c" -}; - -ALIGNED8 static const Texture texture_font_char_eu_s[] = { -#include "textures/segment2/font_graphics.06260.ia1.inc.c" -}; - -ALIGNED8 static const Texture texture_font_char_eu_t[] = { -#include "textures/segment2/font_graphics.06270.ia1.inc.c" -}; - -ALIGNED8 static const Texture texture_font_char_eu_u[] = { -#include "textures/segment2/font_graphics.06280.ia1.inc.c" -}; - -ALIGNED8 static const Texture texture_font_char_eu_v[] = { -#include "textures/segment2/font_graphics.06290.ia1.inc.c" -}; - -ALIGNED8 static const Texture texture_font_char_eu_w[] = { -#include "textures/segment2/font_graphics.062A0.ia1.inc.c" -}; - -ALIGNED8 static const Texture texture_font_char_eu_x[] = { -#include "textures/segment2/font_graphics.062B0.ia1.inc.c" -}; - -ALIGNED8 static const Texture texture_font_char_eu_y[] = { -#include "textures/segment2/font_graphics.062C0.ia1.inc.c" -}; - -ALIGNED8 static const Texture texture_font_char_eu_z[] = { -#include "textures/segment2/font_graphics.062D0.ia1.inc.c" -}; - -ALIGNED8 static const Texture texture_font_char_eu_left_right_arrow[] = { -#include "textures/segment2/font_graphics.062E0.ia1.inc.c" -}; - -ALIGNED8 static const Texture texture_font_char_eu_ampersand[] = { -#include "textures/segment2/font_graphics.062F0.ia1.inc.c" -}; - -ALIGNED8 static const Texture texture_font_char_eu_exclamation[] = { -#include "textures/segment2/font_graphics.06300.ia1.inc.c" -}; - -ALIGNED8 static const Texture texture_font_char_eu_coin[] = { -#include "textures/segment2/font_graphics.06310.ia1.inc.c" -}; - -ALIGNED8 static const Texture texture_font_char_eu_multiply[] = { -#include "textures/segment2/font_graphics.06320.ia1.inc.c" -}; - -ALIGNED8 static const Texture texture_font_char_eu_open_parentheses[] = { -#include "textures/segment2/font_graphics.06330.ia1.inc.c" -}; - -ALIGNED8 static const Texture texture_font_char_eu_close_open_parentheses[] = { -#include "textures/segment2/font_graphics.06340.ia1.inc.c" -}; - -ALIGNED8 static const Texture texture_font_char_eu_close_parentheses[] = { -#include "textures/segment2/font_graphics.06350.ia1.inc.c" -}; - -ALIGNED8 static const Texture texture_font_char_eu_tilde[] = { -#include "textures/segment2/font_graphics.06360.ia1.inc.c" -}; - -ALIGNED8 static const Texture texture_font_char_eu_period[] = { -#include "textures/segment2/font_graphics.06370.ia1.inc.c" -}; - -ALIGNED8 static const Texture texture_font_char_eu_percent[] = { -#include "textures/segment2/font_graphics.06380.ia1.inc.c" -}; - -ALIGNED8 static const Texture texture_font_char_eu_interpunct[] = { -#include "textures/segment2/font_graphics.06390.ia1.inc.c" -}; - -ALIGNED8 static const Texture texture_font_char_eu_comma[] = { -#include "textures/segment2/font_graphics.063A0.ia1.inc.c" -}; - -ALIGNED8 static const Texture texture_font_char_eu_apostrophe[] = { -#include "textures/segment2/font_graphics.063B0.ia1.inc.c" -}; - -ALIGNED8 static const Texture texture_font_char_eu_question[] = { -#include "textures/segment2/font_graphics.063C0.ia1.inc.c" -}; - -ALIGNED8 static const Texture texture_font_char_eu_star_filled[] = { -#include "textures/segment2/font_graphics.063D0.ia1.inc.c" -}; - -ALIGNED8 static const Texture texture_font_char_eu_star_hollow[] = { -#include "textures/segment2/font_graphics.063E0.ia1.inc.c" -}; - -ALIGNED8 static const Texture texture_font_char_eu_double_quote_open[] = { -#include "textures/segment2/font_graphics.063F0.ia1.inc.c" -}; - -ALIGNED8 static const Texture texture_font_char_eu_double_quote_close[] = { -#include "textures/segment2/font_graphics.06400.ia1.inc.c" -}; - -ALIGNED8 static const Texture texture_font_char_eu_colon[] = { -#include "textures/segment2/font_graphics.06410.ia1.inc.c" -}; - -ALIGNED8 static const Texture texture_font_char_EU_slash[] = { -#include "textures/segment2/font_graphics.06420.ia1.inc.c" -}; - -ALIGNED8 static const Texture texture_font_char_eu_button_A[] = { -#include "textures/segment2/font_graphics.06430.ia1.inc.c" -}; - -ALIGNED8 static const Texture texture_font_char_eu_button_B[] = { -#include "textures/segment2/font_graphics.06440.ia1.inc.c" -}; - -ALIGNED8 static const Texture texture_font_char_eu_button_C[] = { -#include "textures/segment2/font_graphics.06450.ia1.inc.c" -}; - -ALIGNED8 static const Texture texture_font_char_eu_button_Z[] = { -#include "textures/segment2/font_graphics.06460.ia1.inc.c" -}; - -ALIGNED8 static const Texture texture_font_char_eu_button_R[] = { -#include "textures/segment2/font_graphics.06470.ia1.inc.c" -}; - -ALIGNED8 static const Texture texture_font_char_eu_button_C_up[] = { -#include "textures/segment2/font_graphics.06480.ia1.inc.c" -}; - -ALIGNED8 static const Texture texture_font_char_eu_button_C_down[] = { -#include "textures/segment2/font_graphics.06490.ia1.inc.c" -}; - -ALIGNED8 static const Texture texture_font_char_eu_button_C_left[] = { -#include "textures/segment2/font_graphics.064A0.ia1.inc.c" -}; - -ALIGNED8 static const Texture texture_font_char_eu_button_C_right[] = { -#include "textures/segment2/font_graphics.064B0.ia1.inc.c" -}; - -ALIGNED8 static const Texture texture_font_char_eu_umlaut[] = { -#include "textures/segment2/font_graphics.064C0.ia1.inc.c" -}; - -ALIGNED8 static const Texture texture_font_char_eu_circumflex[] = { -#include "textures/segment2/font_graphics.064D0.ia1.inc.c" -}; - -ALIGNED8 static const Texture texture_font_char_eu_grave[] = { -#include "textures/segment2/font_graphics.064E0.ia1.inc.c" -}; - -ALIGNED8 static const Texture texture_font_char_eu_acute[] = { -#include "textures/segment2/font_graphics.064F0.ia1.inc.c" -}; - -ALIGNED8 static const Texture texture_font_char_eu_cedilla[] = { -#include "textures/segment2/font_graphics.06500.ia1.inc.c" -}; - -ALIGNED8 static const Texture texture_font_char_eu_unknown[] = { -#include "textures/segment2/font_graphics.06510.ia1.inc.c" -}; - -ALIGNED8 static const Texture texture_font_char_eu_Cedilla[] = { -#include "textures/segment2/font_graphics.06520.ia1.inc.c" -}; - -ALIGNED8 static const Texture texture_font_char_eu_eszeet[] = { -#include "textures/segment2/font_graphics.06530.ia1.inc.c" -}; +#endif // US Small Font -#else + ALIGNED8 static const Texture texture_font_char_us_0[] = { #include "textures/segment2/font_graphics.05900.ia4.inc.c" }; @@ -1891,10 +1392,6 @@ ALIGNED8 static const Texture texture_font_char_us_open_parentheses[] = { #include "textures/segment2/font_graphics.06980.ia4.inc.c" }; -ALIGNED8 static const Texture texture_font_char_us_close_open_parentheses[] = { -#include "textures/segment2/font_graphics.069C0.ia4.inc.c" -}; - ALIGNED8 static const Texture texture_font_char_us_close_parentheses[] = { #include "textures/segment2/font_graphics.06A00.ia4.inc.c" }; @@ -1943,11 +1440,15 @@ ALIGNED8 static const Texture texture_font_char_us_double_quote_close[] = { #include "textures/segment2/font_graphics.06CC0.ia4.inc.c" }; -ALIGNED8 static const Texture texture_font_char_us_ellipsis[] = { +ALIGNED8 static const Texture texture_font_char_us_double_low_quote[] = { +#include "textures/segment2/font_graphics.double_low_quote.ia4.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_us_colon[] = { #include "textures/segment2/font_graphics.06D00.ia4.inc.c" }; -ALIGNED8 static const Texture texture_font_char_us_slash[] = { +ALIGNED8 static const Texture texture_font_char_us_hyphen[] = { #include "textures/segment2/font_graphics.06D40.ia4.inc.c" }; @@ -1990,7 +1491,66 @@ ALIGNED8 static const Texture texture_font_char_us_button_C_left[] = { ALIGNED8 static const Texture texture_font_char_us_button_C_right[] = { #include "textures/segment2/font_graphics.06FC0.ia4.inc.c" }; -#endif + +ALIGNED8 static const Texture texture_font_char_plus[] = { +#include "textures/segment2/font_graphics.plus.ia4.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_slash[] = { +#include "textures/segment2/font_graphics.slash.ia4.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_backslash[] = { +#include "textures/segment2/font_graphics.backslash.ia4.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_inverted_exclamation_mark[] = { +#include "textures/segment2/font_graphics.inverted_exclamation_mark.ia4.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_inverted_question_mark[] = { +#include "textures/segment2/font_graphics.inverted_question_mark.ia4.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_eszett[] = { +#include "textures/segment2/font_graphics.eszett.ia4.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_diacritic_grave[] = { +#include "textures/segment2/font_graphics.grave.ia4.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_diacritic_acute[] = { +#include "textures/segment2/font_graphics.acute.ia4.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_diacritic_circumflex[] = { +#include "textures/segment2/font_graphics.circumflex.ia4.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_diacritic_tilde[] = { +#include "textures/segment2/font_graphics.tilde_diacritic.ia4.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_diacritic_umlaut[] = { +#include "textures/segment2/font_graphics.umlaut.ia4.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_diacritic_cedilla[] = { +#include "textures/segment2/font_graphics.cedilla.ia4.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_us_i_no_dot[] = { +#include "textures/segment2/font_graphics.i_no_dot.ia4.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_amogus[] = { +#include "textures/segment2/font_graphics.amogus.ia4.inc.c" +}; + +ALIGNED8 static const Texture texture_font_missing_character[] = { +#include "textures/segment2/font_graphics.missing_character.ia4.inc.c" +}; ALIGNED8 static const Texture texture_hud_char_camera[] = { #include "textures/segment2/segment2.07B50.rgba16.inc.c" @@ -2012,239 +1572,868 @@ ALIGNED8 static const Texture texture_hud_char_arrow_down[] = { #include "textures/segment2/segment2.081D0.rgba16.inc.c" }; -// Main HUD print table 0x02008250-0x02008337 -const Texture *const main_hud_lut[] = { - 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, - texture_hud_char_S, texture_hud_char_T, texture_hud_char_U, texture_hud_char_V, - texture_hud_char_W, texture_hud_char_X, texture_hud_char_Y, texture_hud_char_Z, - texture_hud_char_exclamation, texture_hud_char_double_exclamation, texture_hud_char_question, texture_hud_char_ampersand, - texture_hud_char_percent, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, texture_hud_char_minus, - texture_hud_char_multiply, texture_hud_char_coin, texture_hud_char_red_coin, texture_hud_char_silver_coin, - texture_hud_char_mario_head, texture_hud_char_star, texture_hud_char_decimal_point, texture_hud_char_beta_key, - texture_hud_char_apostrophe, texture_hud_char_double_quote, texture_hud_char_umlaut, +// Moved from menu segment 7 to segment 2 to be unified with rest of HUD font +#ifdef JAPANESE_CHARACTERS +ALIGNED8 static const Texture texture_hud_char_katakana_fu[] = { +#include "levels/menu/main_menu_seg7.073D0.rgba16.inc.c" }; -// Main small font print table 0x02008338-0x02008737 -const Texture *const main_font_lut[] = { -#ifdef VERSION_EU // EU Font Table - texture_font_char_eu_0, texture_font_char_eu_1, texture_font_char_eu_2, texture_font_char_eu_3, - texture_font_char_eu_4, texture_font_char_eu_5, texture_font_char_eu_6, texture_font_char_eu_7, - texture_font_char_eu_8, texture_font_char_eu_9, texture_font_char_eu_A, texture_font_char_eu_B, - texture_font_char_eu_C, texture_font_char_eu_D, texture_font_char_eu_E, texture_font_char_eu_F, - texture_font_char_eu_G, texture_font_char_eu_H, texture_font_char_eu_I, texture_font_char_eu_J, - texture_font_char_eu_K, texture_font_char_eu_L, texture_font_char_eu_M, texture_font_char_eu_N, - texture_font_char_eu_O, texture_font_char_eu_P, texture_font_char_eu_Q, texture_font_char_eu_R, - texture_font_char_eu_S, texture_font_char_eu_T, texture_font_char_eu_U, texture_font_char_eu_V, - texture_font_char_eu_W, texture_font_char_eu_X, texture_font_char_eu_Y, texture_font_char_eu_Z, - texture_font_char_eu_a, texture_font_char_eu_b, texture_font_char_eu_c, texture_font_char_eu_d, - texture_font_char_eu_e, texture_font_char_eu_f, texture_font_char_eu_g, texture_font_char_eu_h, - texture_font_char_eu_i, texture_font_char_eu_j, texture_font_char_eu_k, texture_font_char_eu_l, - texture_font_char_eu_m, texture_font_char_eu_n, texture_font_char_eu_o, texture_font_char_eu_p, - texture_font_char_eu_q, texture_font_char_eu_r, texture_font_char_eu_s, texture_font_char_eu_t, - texture_font_char_eu_u, texture_font_char_eu_v, texture_font_char_eu_w, texture_font_char_eu_x, - texture_font_char_eu_y, texture_font_char_eu_z, texture_font_char_eu_apostrophe, texture_font_char_eu_period, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - texture_font_char_eu_button_C_up, - texture_font_char_eu_button_C_down, - texture_font_char_eu_button_C_left, - texture_font_char_eu_button_C_right, - texture_font_char_eu_button_A, - texture_font_char_eu_button_B, - texture_font_char_eu_button_C, - texture_font_char_eu_button_Z, - texture_font_char_eu_button_R, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - texture_font_char_eu_comma, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - texture_font_char_EU_slash, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, - texture_font_char_eu_open_parentheses, - texture_font_char_eu_close_open_parentheses, - texture_font_char_eu_close_parentheses, - texture_font_char_eu_left_right_arrow, - texture_font_char_eu_ampersand, - texture_font_char_eu_colon, - texture_font_char_eu_acute, - texture_font_char_eu_circumflex, - texture_font_char_eu_umlaut, - texture_font_char_eu_grave, - texture_font_char_eu_unknown, - texture_font_char_eu_eszeet, - texture_font_char_eu_Cedilla, - texture_font_char_eu_cedilla, - 0x0, 0x0, 0x0, - texture_font_char_eu_exclamation, - texture_font_char_eu_percent, - texture_font_char_eu_question, - texture_font_char_eu_double_quote_open, - texture_font_char_eu_double_quote_close, - texture_font_char_eu_tilde, - 0x0, - texture_font_char_eu_coin, - texture_font_char_eu_star_filled, - texture_font_char_eu_multiply, - texture_font_char_eu_interpunct, - texture_font_char_eu_star_hollow, - 0x0, 0x0, -#elif defined(VERSION_US) // 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, - texture_font_char_us_C, texture_font_char_us_D, texture_font_char_us_E, texture_font_char_us_F, - texture_font_char_us_G, texture_font_char_us_H, texture_font_char_us_I, texture_font_char_us_J, - texture_font_char_us_K, texture_font_char_us_L, texture_font_char_us_M, texture_font_char_us_N, - texture_font_char_us_O, texture_font_char_us_P, 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_a, texture_font_char_us_b, texture_font_char_us_c, texture_font_char_us_d, - texture_font_char_us_e, texture_font_char_us_f, texture_font_char_us_g, texture_font_char_us_h, - texture_font_char_us_i, texture_font_char_us_j, texture_font_char_us_k, texture_font_char_us_l, - texture_font_char_us_m, texture_font_char_us_n, texture_font_char_us_o, texture_font_char_us_p, - 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, - 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, - texture_font_char_us_button_C_up, texture_font_char_us_button_C_down, texture_font_char_us_button_C_left, texture_font_char_us_button_C_right, - texture_font_char_us_button_A, texture_font_char_us_button_B, texture_font_char_us_button_C, texture_font_char_us_button_Z, - texture_font_char_us_button_R, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, texture_font_char_us_comma, - 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, texture_font_char_us_slash, - 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, - 0x0, texture_font_char_us_open_parentheses, texture_font_char_us_close_open_parentheses, texture_font_char_us_close_parentheses, - texture_font_char_us_left_right_arrow, texture_font_char_us_ampersand, texture_font_char_us_ellipsis, 0x0, - 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, texture_font_char_us_exclamation, texture_font_char_us_percent, - texture_font_char_us_question, texture_font_char_us_double_quote_open, texture_font_char_us_double_quote_close, texture_font_char_us_tilde, - 0x0, texture_font_char_us_coin, texture_font_char_us_star_filled, texture_font_char_us_multiply, - texture_font_char_us_interpunct, texture_font_char_us_star_hollow, 0x0, 0x0, -#elif defined(VERSION_JP) || defined(VERSION_SH) - texture_font_char_jp_0, texture_font_char_jp_1, texture_font_char_jp_2, texture_font_char_jp_3, - texture_font_char_jp_4, texture_font_char_jp_5, texture_font_char_jp_6, texture_font_char_jp_7, - texture_font_char_jp_8, texture_font_char_jp_9, texture_font_char_jp_A, texture_font_char_jp_B, - texture_font_char_jp_C, texture_font_char_jp_D, texture_font_char_jp_E, texture_font_char_jp_F, - texture_font_char_jp_G, texture_font_char_jp_H, texture_font_char_jp_I, texture_font_char_jp_J, - texture_font_char_jp_K, texture_font_char_jp_L, texture_font_char_jp_M, texture_font_char_jp_N, - texture_font_char_jp_O, texture_font_char_jp_P, texture_font_char_jp_Q, texture_font_char_jp_R, - texture_font_char_jp_S, texture_font_char_jp_T, texture_font_char_jp_U, texture_font_char_jp_V, - texture_font_char_jp_W, texture_font_char_jp_X, texture_font_char_jp_Y, texture_font_char_jp_Z, - 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, - texture_font_char_jp_hiragana_a, texture_font_char_jp_hiragana_i, texture_font_char_jp_hiragana_u, texture_font_char_jp_hiragana_c, - texture_font_char_jp_hiragana_o, texture_font_char_jp_hiragana_ka, texture_font_char_jp_hiragana_ki, texture_font_char_jp_hiragana_ku, - texture_font_char_jp_hiragana_ke, texture_font_char_jp_hiragana_ko, texture_font_char_jp_hiragana_sa, texture_font_char_jp_hiragana_shi, - texture_font_char_jp_hiragana_su, texture_font_char_jp_hiragana_se, texture_font_char_jp_hiragana_so, texture_font_char_jp_hiragana_ta, - texture_font_char_jp_hiragana_chi, texture_font_char_jp_hiragana_tsu, texture_font_char_jp_hiragana_te, texture_font_char_jp_hiragana_to, - texture_font_char_jp_hiragana_na, texture_font_char_jp_hiragana_ni, texture_font_char_jp_hiragana_nu, texture_font_char_jp_hiragana_ne, - texture_font_char_jp_hiragana_no, texture_font_char_jp_hiragana_ha, texture_font_char_jp_hiragana_hi, texture_font_char_jp_hiragana_hu, - texture_font_char_jp_hiragana_he, texture_font_char_jp_hiragana_ho, texture_font_char_jp_hiragana_ma, texture_font_char_jp_hiragana_mi, - texture_font_char_jp_hiragana_mu, texture_font_char_jp_hiragana_me, texture_font_char_jp_hiragana_mo, texture_font_char_jp_hiragana_ya, - texture_font_char_jp_hiragana_yu, texture_font_char_jp_hiragana_yo, texture_font_char_jp_hiragana_ra, texture_font_char_jp_hiragana_ri, - texture_font_char_jp_hiragana_ru, texture_font_char_jp_hiragana_re, texture_font_char_jp_hiragana_ro, texture_font_char_jp_hiragana_wa, - texture_font_char_jp_hiragana_wo, texture_font_char_jp_hiragana_n, 0x0, texture_font_char_jp_comma, - texture_font_char_jp_katakana_a, texture_font_char_jp_katakana_i, texture_font_char_jp_katakana_u, texture_font_char_jp_katakana_e, - texture_font_char_jp_katakana_o, texture_font_char_jp_katakana_ka, texture_font_char_jp_katakana_ki, texture_font_char_jp_katakana_ku, - texture_font_char_jp_katakana_ke, texture_font_char_jp_katakana_ko, texture_font_char_jp_katakana_sa, texture_font_char_jp_katakana_shi, - texture_font_char_jp_katakana_su, texture_font_char_jp_katakana_se, texture_font_char_jp_katakana_so, texture_font_char_jp_katakana_ta, - texture_font_char_jp_katakana_chi, texture_font_char_jp_katakana_tsu, texture_font_char_jp_katakana_te, texture_font_char_jp_katakana_to, - texture_font_char_jp_katakana_na, texture_font_char_jp_katakana_ni, texture_font_char_jp_katakana_nu, texture_font_char_jp_katakana_ne, - texture_font_char_jp_katakana_no, texture_font_char_jp_katakana_ha, texture_font_char_jp_katakana_hi, texture_font_char_jp_katakana_hu, - texture_font_char_jp_katakana_he, texture_font_char_jp_katakana_ho, texture_font_char_jp_katakana_ma, texture_font_char_jp_katakana_mi, - texture_font_char_jp_katakana_mu, texture_font_char_jp_katakana_me, texture_font_char_jp_katakana_mo, texture_font_char_jp_katakana_ya, - texture_font_char_jp_katakana_yu, texture_font_char_jp_katakana_yo, texture_font_char_jp_katakana_ra, texture_font_char_jp_katakana_ri, - texture_font_char_jp_katakana_ru, texture_font_char_jp_katakana_re, texture_font_char_jp_katakana_ro, texture_font_char_jp_katakana_wa, - 0x0, texture_font_char_jp_katakana_n, 0x0, texture_font_char_jp_long_vowel, - texture_font_char_jp_hiragana_small_e, texture_font_char_jp_hiragana_small_tsu, texture_font_char_jp_hiragana_small_ya, texture_font_char_jp_hiragana_small_yu, - texture_font_char_jp_hiragana_small_yo, texture_font_char_jp_hiragana_small_a, texture_font_char_jp_hiragana_small_i, texture_font_char_jp_hiragana_small_u, - texture_font_char_jp_hiragana_small_o, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, - texture_font_char_jp_katakana_small_e, texture_font_char_jp_katakana_small_tsu, texture_font_char_jp_katakana_small_ya, texture_font_char_jp_katakana_small_yu, - texture_font_char_jp_katakana_small_yo, texture_font_char_jp_katakana_small_a, texture_font_char_jp_katakana_small_i, texture_font_char_jp_katakana_small_u, - texture_font_char_jp_katakana_small_o, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, - 0x0, texture_font_char_jp_open_parentheses, texture_font_char_jp_close_open_parentheses, texture_font_char_jp_close_parentheses, - texture_font_char_jp_left_right_arrow, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, - texture_font_char_jp_dakuten, texture_font_char_jp_handakuten, texture_font_char_jp_exclamation, texture_font_char_jp_percent, - texture_font_char_jp_question, texture_font_char_jp_double_quotation_open, texture_font_char_jp_double_quotation_close, texture_font_char_jp_wave_dash, - texture_font_char_jp_ellipsis, texture_font_char_jp_coin, texture_font_char_jp_star_filled, texture_font_char_jp_multiply, - texture_font_char_jp_interpunct, texture_font_char_jp_star_hollow, 0x0, 0x0, +ALIGNED8 static const Texture texture_hud_char_katakana_small_a[] = { +#include "levels/menu/main_menu_seg7.075D0.rgba16.inc.c" +}; + +ALIGNED8 static const Texture texture_hud_char_katakana_i[] = { +#include "levels/menu/main_menu_seg7.077D0.rgba16.inc.c" +}; + +ALIGNED8 static const Texture texture_hud_char_katakana_ru[] = { +#include "levels/menu/main_menu_seg7.079D0.rgba16.inc.c" +}; + +ALIGNED8 static const Texture texture_hud_char_katakana_se[] = { +#include "levels/menu/main_menu_seg7.07BD0.rgba16.inc.c" +}; + +ALIGNED8 static const Texture texture_hud_char_katakana_re[] = { +#include "levels/menu/main_menu_seg7.07DD0.rgba16.inc.c" +}; + +ALIGNED8 static const Texture texture_hud_char_katakana_ku[] = { +#include "levels/menu/main_menu_seg7.07FD0.rgba16.inc.c" +}; + +ALIGNED8 static const Texture texture_hud_char_katakana_to[] = { +#include "levels/menu/main_menu_seg7.081D0.rgba16.inc.c" +}; + +ALIGNED8 static const Texture texture_hud_char_hiragana_wo[] = { +#include "levels/menu/main_menu_seg7.083D0.rgba16.inc.c" +}; + +ALIGNED8 static const Texture texture_hud_char_katakana_ko[] = { +#include "levels/menu/main_menu_seg7.085D0.rgba16.inc.c" +}; + +ALIGNED8 static const Texture texture_hud_char_kana_handakuten_pi[] = { +#include "levels/menu/main_menu_seg7.087D0.rgba16.inc.c" +}; + +ALIGNED8 static const Texture texture_hud_char_long_vowel[] = { +#include "levels/menu/main_menu_seg7.089D0.rgba16.inc.c" +}; + +ALIGNED8 static const Texture texture_hud_char_hiragana_su[] = { +#include "levels/menu/main_menu_seg7.08BD0.rgba16.inc.c" +}; + +ALIGNED8 static const Texture texture_hud_char_hiragana_ru[] = { +#include "levels/menu/main_menu_seg7.08DD0.rgba16.inc.c" +}; + +ALIGNED8 static const Texture texture_hud_char_hiragana_ke[] = { +#include "levels/menu/main_menu_seg7.08FD0.rgba16.inc.c" +}; + +ALIGNED8 static const Texture texture_hud_char_katakana_ma[] = { +#include "levels/menu/main_menu_seg7.091D0.rgba16.inc.c" +}; + +ALIGNED8 static const Texture texture_hud_char_katakana_ri[] = { +#include "levels/menu/main_menu_seg7.093D0.rgba16.inc.c" +}; + +ALIGNED8 static const Texture texture_hud_char_katakana_o[] = { +#include "levels/menu/main_menu_seg7.095D0.rgba16.inc.c" +}; + +ALIGNED8 static const Texture texture_hud_char_katakana_su[] = { +#include "levels/menu/main_menu_seg7.097D0.rgba16.inc.c" +}; + +ALIGNED8 static const Texture texture_hud_char_katakana_a[] = { +#include "levels/menu/main_menu_seg7.099D0.rgba16.inc.c" +}; + +ALIGNED8 static const Texture texture_hud_char_hiragana_mi[] = { +#include "levels/menu/main_menu_seg7.09BD0.rgba16.inc.c" +}; + +ALIGNED8 static const Texture texture_hud_char_hira_dakuten_do[] = { +#include "levels/menu/main_menu_seg7.09DD0.rgba16.inc.c" +}; + +ALIGNED8 static const Texture texture_hud_char_hiragana_no[] = { +#include "levels/menu/main_menu_seg7.09FD0.rgba16.inc.c" +}; + +ALIGNED8 static const Texture texture_hud_char_katakana_sa[] = { +#include "levels/menu/main_menu_seg7.0A3D0.rgba16.inc.c" +}; + +ALIGNED8 static const Texture texture_hud_char_katakana_u[] = { +#include "levels/menu/main_menu_seg7.0A5D0.rgba16.inc.c" +}; + +ALIGNED8 static const Texture texture_hud_char_katakana_n[] = { +#include "levels/menu/main_menu_seg7.0A7D0.rgba16.inc.c" +}; + +ALIGNED8 static const Texture texture_hud_char_kana_dakuten_do[] = { +#include "levels/menu/main_menu_seg7.0A9D0.rgba16.inc.c" +}; + +ALIGNED8 static const Texture texture_hud_char_katakana_ra[] = { +#include "levels/menu/main_menu_seg7.katakana_ra.rgba16.inc.c" +}; + +ALIGNED8 static const Texture texture_hud_char_kana_dakuten_ge[] = { +#include "levels/menu/main_menu_seg7.kana_dakuten_ge.rgba16.inc.c" +}; + +ALIGNED8 static const Texture texture_hud_char_kana_dakuten_ji[] = { +#include "levels/menu/main_menu_seg7.kana_dakuten_ji.rgba16.inc.c" +}; +#endif + +// ASCII lookup table for the colorful HUD font +const struct AsciiCharLUTEntry main_hud_lut[] = { + {NULL, 8}, // 32 " " + {texture_hud_char_exclamation, 12}, // 33 "!" + {texture_hud_char_double_quote, 10}, // 34 "\"" + {NULL, 0}, // 35 "#" (Unimplemented) + {NULL, 0}, // 36 "$" (Unimplemented) + {texture_hud_char_percent, 12}, // 37 "%" + {texture_hud_char_ampersand, 12}, // 38 "&" + {texture_hud_char_apostrophe, 8}, // 39 "'" + {NULL, 0}, // 40 "(" (Unimplemented) + {NULL, 0}, // 41 ")" (Unimplemented) + {NULL, 0}, // 42 "*" (Unimplemented) + {NULL, 0}, // 43 "+" (Unimplemented) + {texture_hud_char_apostrophe, 8}, // 44 "," + {texture_hud_char_minus, 16}, // 45 "-" + {texture_hud_char_decimal_point, 8}, // 46 "." + {NULL, 0}, // 47 "/" (Unimplemented) + {texture_hud_char_0, 12}, // 48 "0" + {texture_hud_char_1, 12}, // 49 "1" + {texture_hud_char_2, 12}, // 50 "2" + {texture_hud_char_3, 12}, // 51 "3" + {texture_hud_char_4, 12}, // 52 "4" + {texture_hud_char_5, 12}, // 53 "5" + {texture_hud_char_6, 12}, // 54 "6" + {texture_hud_char_7, 12}, // 55 "7" + {texture_hud_char_8, 12}, // 56 "8" + {texture_hud_char_9, 12}, // 57 "9" + {NULL, 0}, // 58 ":" (Unimplemented) + {NULL, 0}, // 59 ";" (Unimplemented) + {NULL, 0}, // 60 "<" (Unimplemented) + {NULL, 0}, // 61 "=" (Unimplemented) + {NULL, 0}, // 62 ">" (Unimplemented) + {texture_hud_char_question, 12}, // 63 "?" + {NULL, 0}, // 64 "@" (Unimplemented) + {texture_hud_char_A, 12}, // 65 "A" + {texture_hud_char_B, 12}, // 66 "B" + {texture_hud_char_C, 12}, // 67 "C" + {texture_hud_char_D, 12}, // 68 "D" + {texture_hud_char_E, 12}, // 69 "E" + {texture_hud_char_F, 12}, // 70 "F" + {texture_hud_char_G, 12}, // 71 "G" + {texture_hud_char_H, 12}, // 72 "H" + {texture_hud_char_I, 12}, // 73 "I" + {texture_hud_char_J, 12}, // 74 "J" + {texture_hud_char_K, 12}, // 75 "K" + {texture_hud_char_L, 12}, // 76 "L" + {texture_hud_char_M, 12}, // 77 "M" + {texture_hud_char_N, 12}, // 78 "N" + {texture_hud_char_O, 12}, // 79 "O" + {texture_hud_char_P, 12}, // 80 "P" + {texture_hud_char_Q, 12}, // 81 "Q" + {texture_hud_char_R, 12}, // 82 "R" + {texture_hud_char_S, 12}, // 83 "S" + {texture_hud_char_T, 12}, // 84 "T" + {texture_hud_char_U, 12}, // 85 "U" + {texture_hud_char_V, 12}, // 86 "V" + {texture_hud_char_W, 12}, // 87 "W" + {texture_hud_char_X, 12}, // 88 "X" + {texture_hud_char_Y, 12}, // 89 "Y" + {texture_hud_char_Z, 12}, // 90 "Z" + {NULL, 0}, // 91 "[" (Unimplemented) + {NULL, 0}, // 92 "\\" (Unimplemented) + {NULL, 0}, // 93 "]" (Unimplemented) + {NULL, 0}, // 94 "^" (Unimplemented) + {NULL, 0}, // 95 "_" (Unimplemented) + {NULL, 0}, // 96 "`" (Unimplemented) + {texture_hud_char_A, 12}, // 97 "a" + {texture_hud_char_B, 12}, // 98 "b" + {texture_hud_char_C, 12}, // 99 "c" + {texture_hud_char_D, 12}, // 100 "d" + {texture_hud_char_E, 12}, // 101 "e" + {texture_hud_char_F, 12}, // 102 "f" + {texture_hud_char_G, 12}, // 103 "g" + {texture_hud_char_H, 12}, // 104 "h" + {texture_hud_char_I, 12}, // 105 "i" + {texture_hud_char_J, 12}, // 106 "j" + {texture_hud_char_K, 12}, // 107 "k" + {texture_hud_char_L, 12}, // 108 "l" + {texture_hud_char_M, 12}, // 109 "m" + {texture_hud_char_N, 12}, // 110 "n" + {texture_hud_char_O, 12}, // 111 "o" + {texture_hud_char_P, 12}, // 112 "p" + {texture_hud_char_Q, 12}, // 113 "q" + {texture_hud_char_R, 12}, // 114 "r" + {texture_hud_char_S, 12}, // 115 "s" + {texture_hud_char_T, 12}, // 116 "t" + {texture_hud_char_U, 12}, // 117 "u" + {texture_hud_char_V, 12}, // 118 "v" + {texture_hud_char_W, 12}, // 119 "w" + {texture_hud_char_X, 12}, // 120 "x" + {texture_hud_char_Y, 12}, // 121 "y" + {texture_hud_char_Z, 12}, // 122 "z" + {NULL, 0}, // 123 "{" (Unimplemented) + {NULL, 0}, // 124 "|" (Unimplemented) + {NULL, 0}, // 125 "}" (Unimplemented) + {NULL, 0}, // 126 "~" (Unimplemented) +}; + +// UTF-8 lookup tables for the colorful HUD font +const struct Utf8CharLUTEntry main_hud_utf8_2byte_lut[] = { + {0x00C4, 12, TEXT_DIACRITIC_UMLAUT_UPPERCASE, texture_hud_char_A}, // Ä + {0x00CB, 12, TEXT_DIACRITIC_UMLAUT_UPPERCASE, texture_hud_char_E}, // Ë + {0x00CF, 12, TEXT_DIACRITIC_UMLAUT_UPPERCASE, texture_hud_char_I}, // Ï + {0x00D6, 12, TEXT_DIACRITIC_UMLAUT_UPPERCASE, texture_hud_char_O}, // Ö + {0x00D7, 15, 0, texture_hud_char_multiply}, // × + {0x00DC, 12, TEXT_DIACRITIC_UMLAUT_UPPERCASE, texture_hud_char_U}, // Ü +}; + +const struct Utf8CharLUTEntry main_hud_utf8_3byte_lut[] = { + {0x203C, 12, 0, texture_hud_char_double_exclamation}, // ‼ + {0x2605, 16, 0, texture_hud_char_star}, // ★ + {0x263A, 16, 0, texture_hud_char_mario_head}, // ☺ + {0x26BF, 16, 0, texture_hud_char_beta_key}, // ⚿ + {0x272A, 16, 0, texture_hud_char_coin}, // ✪ + +#ifdef JAPANESE_CHARACTERS + {0x3000, 16, 0, NULL}, // " " (ideographic space) + + {0x3051, 16, 0, texture_hud_char_hiragana_ke}, // け + {0x3059, 16, 0, texture_hud_char_hiragana_su}, // す + {0x3069, 16, 0, texture_hud_char_hira_dakuten_do}, // ど + {0x306E, 16, 0, texture_hud_char_hiragana_no}, // の + {0x307F, 16, 0, texture_hud_char_hiragana_mi}, // み + {0x308B, 16, 0, texture_hud_char_hiragana_ru}, // る + {0x3092, 16, 0, texture_hud_char_hiragana_wo}, // を + + {0x30A1, 16, 0, texture_hud_char_katakana_small_a}, // ァ + {0x30A2, 16, 0, texture_hud_char_katakana_a}, // ア + {0x30A4, 16, 0, texture_hud_char_katakana_i}, // イ + {0x30A6, 16, 0, texture_hud_char_katakana_u}, // ウ + {0x30AA, 16, 0, texture_hud_char_katakana_o}, // オ + {0x30AF, 16, 0, texture_hud_char_katakana_ku}, // ク + {0x30B2, 16, 0, texture_hud_char_kana_dakuten_ge}, // ゲ + {0x30B3, 16, 0, texture_hud_char_katakana_ko}, // コ + {0x30B5, 16, 0, texture_hud_char_katakana_sa}, // サ + {0x30B8, 16, 0, texture_hud_char_kana_dakuten_ji}, // ジ + {0x30B9, 16, 0, texture_hud_char_katakana_su}, // ス + {0x30BB, 16, 0, texture_hud_char_katakana_se}, // セ + {0x30C8, 16, 0, texture_hud_char_katakana_to}, // ト + {0x30C9, 16, 0, texture_hud_char_kana_dakuten_do}, // ド + {0x30D4, 16, 0, texture_hud_char_kana_handakuten_pi}, // ピ + {0x30D5, 16, 0, texture_hud_char_katakana_fu}, // フ + {0x30DE, 16, 0, texture_hud_char_katakana_ma}, // マ + {0x30E9, 16, 0, texture_hud_char_katakana_ra}, // ラ + {0x30EA, 16, 0, texture_hud_char_katakana_ri}, // リ + {0x30EB, 16, 0, texture_hud_char_katakana_ru}, // ル + {0x30EC, 16, 0, texture_hud_char_katakana_re}, // レ + {0x30F3, 16, 0, texture_hud_char_katakana_n}, // ン + + {0x30FC, 16, 0, texture_hud_char_long_vowel}, // ー + {0xFF1F, 16, 0, texture_hud_char_question}, // ? #endif }; -// credits font LUT 0x02008738-0x020087CB -const Texture *const main_credits_font_lut[] = { - 0x0, 0x0, 0x0, texture_credits_char_3, - texture_credits_char_4, 0x0, texture_credits_char_6, 0x0, - 0x0, 0x0, texture_credits_char_A, texture_credits_char_B, - texture_credits_char_C, texture_credits_char_D, texture_credits_char_E, texture_credits_char_F, - texture_credits_char_G, texture_credits_char_H, texture_credits_char_I, texture_credits_char_J, - texture_credits_char_K, texture_credits_char_L, texture_credits_char_M, texture_credits_char_N, - texture_credits_char_O, texture_credits_char_P, texture_credits_char_Q, texture_credits_char_R, - texture_credits_char_S, texture_credits_char_T, texture_credits_char_U, texture_credits_char_V, - texture_credits_char_W, texture_credits_char_X, texture_credits_char_Y, texture_credits_char_Z, - texture_credits_char_period, +const struct Utf8CharLUTEntry main_hud_utf8_4byte_lut[] = { + {0x1F633, 16, 0, texture_hud_char_floomba}, // 😳 +}; + +const struct Utf8CharLUTEntry main_hud_utf8_missing_char = {0, 16, 0, texture_hud_char_question}; + +const struct Utf8LUT main_hud_utf8_lut = { + main_hud_utf8_2byte_lut, + main_hud_utf8_3byte_lut, + main_hud_utf8_4byte_lut, + ARRAY_COUNT(main_hud_utf8_2byte_lut), + ARRAY_COUNT(main_hud_utf8_3byte_lut), + ARRAY_COUNT(main_hud_utf8_4byte_lut), + &main_hud_utf8_missing_char, +}; + +// Diacritics for the generic white font +const struct DiacriticLUTEntry main_font_diacritic_lut[] = { + [TEXT_DIACRITIC_CIRCUMFLEX] = { 0, 0, "ˆ"}, + [TEXT_DIACRITIC_CIRCUMFLEX_UPPERCASE] = { 1, 4, "ˆ"}, + [TEXT_DIACRITIC_ACUTE] = {-1, 0, "ˊ"}, + [TEXT_DIACRITIC_ACUTE_UPPERCASE] = { 0, 4, "ˊ"}, + [TEXT_DIACRITIC_GRAVE] = {-1, 0, "ˋ"}, + [TEXT_DIACRITIC_GRAVE_UPPERCASE] = { 0, 4, "ˋ"}, + [TEXT_DIACRITIC_TILDE] = {-1, 0, "˜"}, + [TEXT_DIACRITIC_TILDE_UPPERCASE] = { 1, 4, "˜"}, + [TEXT_DIACRITIC_UMLAUT] = { 0, 0, "¨"}, + [TEXT_DIACRITIC_UMLAUT_UPPERCASE] = { 1, 4, "¨"}, + [TEXT_DIACRITIC_CEDILLA] = { 0, 0, "¸"}, +#ifdef JAPANESE_CHARACTERS + [TEXT_DIACRITIC_DAKUTEN] = { 4, 6, "゛"}, + [TEXT_DIACRITIC_HANDAKUTEN] = { 7, 10, "゜"}, +#endif +}; + +// ASCII lookup table for the generic white font +const struct AsciiCharLUTEntry main_font_lut[] = { + {NULL, 5}, // 32 " " + {texture_font_char_us_exclamation, 5}, // 33 "!" + {texture_font_char_us_double_quote_open, 6}, // 34 "\"" + {NULL, 0}, // 35 "#" (Unimplemented) + {NULL, 0}, // 36 "$" (Unimplemented) + {texture_font_char_us_percent, 7}, // 37 "%" + {texture_font_char_us_ampersand, 8}, // 38 "&" + {texture_font_char_us_apostrophe, 4}, // 39 "'" + {texture_font_char_us_open_parentheses, 5}, // 40 "(" + {texture_font_char_us_close_parentheses, 5}, // 41 ")" + {NULL, 0}, // 42 "*" (Unimplemented) + {texture_font_char_plus, 7}, // 43 "+" + {texture_font_char_us_comma, 4}, // 44 "," + {texture_font_char_us_hyphen, 6}, // 45 "-" + {texture_font_char_us_period, 4}, // 46 "." + {texture_font_char_slash, 5}, // 47 "/" + {texture_font_char_us_0, 7}, // 48 "0" + {texture_font_char_us_1, 7}, // 49 "1" + {texture_font_char_us_2, 7}, // 50 "2" + {texture_font_char_us_3, 7}, // 51 "3" + {texture_font_char_us_4, 7}, // 52 "4" + {texture_font_char_us_5, 7}, // 53 "5" + {texture_font_char_us_6, 7}, // 54 "6" + {texture_font_char_us_7, 7}, // 55 "7" + {texture_font_char_us_8, 7}, // 56 "8" + {texture_font_char_us_9, 7}, // 57 "9" + {texture_font_char_us_colon, 4}, // 58 ":" + {NULL, 0}, // 59 ";" (Unimplemented) + {NULL, 0}, // 60 "<" (Unimplemented) + {NULL, 0}, // 61 "=" (Unimplemented) + {NULL, 0}, // 62 ">" (Unimplemented) + {texture_font_char_us_question, 7}, // 63 "?" + {NULL, 0}, // 64 "@" (Unimplemented, used for color codes by default) + {texture_font_char_us_A, 6}, // 65 "A" + {texture_font_char_us_B, 6}, // 66 "B" + {texture_font_char_us_C, 6}, // 67 "C" + {texture_font_char_us_D, 6}, // 68 "D" + {texture_font_char_us_E, 6}, // 69 "E" + {texture_font_char_us_F, 6}, // 70 "F" + {texture_font_char_us_G, 6}, // 71 "G" + {texture_font_char_us_H, 6}, // 72 "H" + {texture_font_char_us_I, 5}, // 73 "I" + {texture_font_char_us_J, 6}, // 74 "J" + {texture_font_char_us_K, 6}, // 75 "K" + {texture_font_char_us_L, 5}, // 76 "L" + {texture_font_char_us_M, 8}, // 77 "M" + {texture_font_char_us_N, 8}, // 78 "N" + {texture_font_char_us_O, 6}, // 79 "O" + {texture_font_char_us_P, 6}, // 80 "P" + {texture_font_char_us_Q, 6}, // 81 "Q" + {texture_font_char_us_R, 6}, // 82 "R" + {texture_font_char_us_S, 6}, // 83 "S" + {texture_font_char_us_T, 5}, // 84 "T" + {texture_font_char_us_U, 6}, // 85 "U" + {texture_font_char_us_V, 6}, // 86 "V" + {texture_font_char_us_W, 8}, // 87 "W" + {texture_font_char_us_X, 7}, // 88 "X" + {texture_font_char_us_Y, 6}, // 89 "Y" + {texture_font_char_us_Z, 6}, // 90 "Z" + {NULL, 0}, // 91 "[" (Unimplemented) + {texture_font_char_backslash, 6}, // 92 "\\" + {NULL, 0}, // 93 "]" (Unimplemented) + {NULL, 0}, // 94 "^" (Unimplemented) + {NULL, 0}, // 95 "_" (Unimplemented) + {NULL, 0}, // 96 "`" (Unimplemented) + {texture_font_char_us_a, 6}, // 97 "a" + {texture_font_char_us_b, 5}, // 98 "b" + {texture_font_char_us_c, 5}, // 99 "c" + {texture_font_char_us_d, 6}, // 100 "d" + {texture_font_char_us_e, 5}, // 101 "e" + {texture_font_char_us_f, 5}, // 102 "f" + {texture_font_char_us_g, 6}, // 103 "g" + {texture_font_char_us_h, 5}, // 104 "h" + {texture_font_char_us_i, 4}, // 105 "i" + {texture_font_char_us_j, 5}, // 106 "j" + {texture_font_char_us_k, 5}, // 107 "k" + {texture_font_char_us_l, 3}, // 108 "l" + {texture_font_char_us_m, 7}, // 109 "m" + {texture_font_char_us_n, 5}, // 110 "n" + {texture_font_char_us_o, 5}, // 111 "o" + {texture_font_char_us_p, 5}, // 112 "p" + {texture_font_char_us_q, 6}, // 113 "q" + {texture_font_char_us_r, 5}, // 114 "r" + {texture_font_char_us_s, 5}, // 115 "s" + {texture_font_char_us_t, 5}, // 116 "t" + {texture_font_char_us_u, 5}, // 117 "u" + {texture_font_char_us_v, 5}, // 118 "v" + {texture_font_char_us_w, 7}, // 119 "w" + {texture_font_char_us_x, 7}, // 120 "x" + {texture_font_char_us_y, 5}, // 121 "y" + {texture_font_char_us_z, 5}, // 122 "z" + {NULL, 0}, // 123 "{" (Unimplemented) + {NULL, 0}, // 124 "|" (Unimplemented) + {NULL, 0}, // 125 "}" (Unimplemented) + {texture_font_char_us_tilde, 8}, // 126 "~" +}; + +/* + * This struct defines the UTF-8 characters supported by the main white font! + * There are also similar tables for colorful HUD font and the smaller white font. + * Adding new characters to the font is very easy! + * + * Look up the UTF-8 codepoint for your character. If the character is U+0D9E, the codepoint is 0x0D9E. + * Determine which table the character belongs to, depending on if it takes up 2, 3 or 4 bytes. + * Between U+0080 and U+07FF: 2 bytes + * Between U+0800 and U+FFFF: 3 bytes + * Between U+10000 and U+10FFFF: 4 bytes + * + * Add the texture with the other textures above, and add an entry for your new character in the corresponding table. + * The format of the entry is: {, , , }. + * (flags will likely be 0). + * + * MUST NOTE: You must place your entry in EXACTLY the right spot! The table is sorted by codepoint. + * The tables will not work if they are not sorted properly. + */ + +// UTF-8 lookup table for the generic white font +const struct Utf8CharLUTEntry main_font_utf8_2byte_lut[] = { + {0x00A1, 5, 0, texture_font_char_inverted_exclamation_mark}, // ¡ + {0x00A8, 0, 0, texture_font_char_diacritic_umlaut}, // ¨ + {0x00B7, 4, 0, texture_font_char_us_interpunct}, // · + {0x00B8, 0, 0, texture_font_char_diacritic_cedilla}, // ¸ + {0x00BF, 7, 0, texture_font_char_inverted_question_mark}, // ¿ + + {0x00C0, 6, TEXT_DIACRITIC_GRAVE_UPPERCASE, texture_font_char_us_A}, // À + {0x00C1, 6, TEXT_DIACRITIC_ACUTE_UPPERCASE, texture_font_char_us_A}, // Á + {0x00C2, 6, TEXT_DIACRITIC_CIRCUMFLEX_UPPERCASE, texture_font_char_us_A}, // Â + {0x00C3, 6, TEXT_DIACRITIC_TILDE_UPPERCASE, texture_font_char_us_A}, // Ã + {0x00C4, 6, TEXT_DIACRITIC_UMLAUT_UPPERCASE, texture_font_char_us_A}, // Ä + + {0x00C7, 6, TEXT_DIACRITIC_CEDILLA, texture_font_char_us_C}, // Ç + {0x00C8, 6, TEXT_DIACRITIC_GRAVE_UPPERCASE, texture_font_char_us_E}, // È + {0x00C9, 6, TEXT_DIACRITIC_ACUTE_UPPERCASE, texture_font_char_us_E}, // É + {0x00CA, 6, TEXT_DIACRITIC_CIRCUMFLEX_UPPERCASE, texture_font_char_us_E}, // Ê + {0x00CB, 6, TEXT_DIACRITIC_UMLAUT_UPPERCASE, texture_font_char_us_E}, // Ë + + {0x00CC, 5, TEXT_DIACRITIC_GRAVE_UPPERCASE, texture_font_char_us_I}, // Ì + {0x00CD, 5, TEXT_DIACRITIC_ACUTE_UPPERCASE, texture_font_char_us_I}, // Í + {0x00CE, 5, TEXT_DIACRITIC_CIRCUMFLEX_UPPERCASE, texture_font_char_us_I}, // Î + {0x00CF, 5, TEXT_DIACRITIC_UMLAUT_UPPERCASE, texture_font_char_us_I}, // Ï + + {0x00D1, 8, TEXT_DIACRITIC_TILDE_UPPERCASE, texture_font_char_us_N}, // Ñ + {0x00D2, 6, TEXT_DIACRITIC_GRAVE_UPPERCASE, texture_font_char_us_O}, // Ò + {0x00D3, 6, TEXT_DIACRITIC_ACUTE_UPPERCASE, texture_font_char_us_O}, // Ó + {0x00D4, 6, TEXT_DIACRITIC_CIRCUMFLEX_UPPERCASE, texture_font_char_us_O}, // Ô + {0x00D5, 6, TEXT_DIACRITIC_TILDE_UPPERCASE, texture_font_char_us_O}, // Õ + {0x00D6, 6, TEXT_DIACRITIC_UMLAUT_UPPERCASE, texture_font_char_us_O}, // Ö + + {0x00D7, 6, 0, texture_font_char_us_multiply}, // × + + {0x00D9, 6, TEXT_DIACRITIC_GRAVE_UPPERCASE, texture_font_char_us_U}, // Ù + {0x00DA, 6, TEXT_DIACRITIC_ACUTE_UPPERCASE, texture_font_char_us_U}, // Ú + {0x00DB, 6, TEXT_DIACRITIC_CIRCUMFLEX_UPPERCASE, texture_font_char_us_U}, // Û + {0x00DC, 6, TEXT_DIACRITIC_UMLAUT_UPPERCASE, texture_font_char_us_U}, // Ü + + {0x00DF, 6, 0, texture_font_char_eszett}, // ß + + {0x00E0, 6, TEXT_DIACRITIC_GRAVE, texture_font_char_us_a}, // à + {0x00E1, 6, TEXT_DIACRITIC_ACUTE, texture_font_char_us_a}, // á + {0x00E2, 6, TEXT_DIACRITIC_CIRCUMFLEX, texture_font_char_us_a}, // â + {0x00E3, 6, TEXT_DIACRITIC_TILDE, texture_font_char_us_a}, // ã + {0x00E4, 6, TEXT_DIACRITIC_UMLAUT, texture_font_char_us_a}, // ä + + {0x00E7, 5, TEXT_DIACRITIC_CEDILLA, texture_font_char_us_c}, // ç + {0x00E8, 5, TEXT_DIACRITIC_GRAVE, texture_font_char_us_e}, // è + {0x00E9, 5, TEXT_DIACRITIC_ACUTE, texture_font_char_us_e}, // é + {0x00EA, 5, TEXT_DIACRITIC_CIRCUMFLEX, texture_font_char_us_e}, // ê + {0x00EB, 5, TEXT_DIACRITIC_UMLAUT, texture_font_char_us_e}, // ë + + {0x00EC, 4, TEXT_DIACRITIC_GRAVE, texture_font_char_us_i_no_dot}, // ì + {0x00ED, 4, TEXT_DIACRITIC_ACUTE, texture_font_char_us_i_no_dot}, // í + {0x00EE, 4, TEXT_DIACRITIC_CIRCUMFLEX, texture_font_char_us_i_no_dot}, // î + {0x00EF, 4, TEXT_DIACRITIC_UMLAUT, texture_font_char_us_i_no_dot}, // ï + + {0x00F1, 5, TEXT_DIACRITIC_TILDE, texture_font_char_us_n}, // ñ + {0x00F2, 5, TEXT_DIACRITIC_GRAVE, texture_font_char_us_o}, // ò + {0x00F3, 5, TEXT_DIACRITIC_ACUTE, texture_font_char_us_o}, // ó + {0x00F4, 5, TEXT_DIACRITIC_CIRCUMFLEX, texture_font_char_us_o}, // ô + {0x00F5, 5, TEXT_DIACRITIC_TILDE, texture_font_char_us_o}, // õ + {0x00F6, 5, TEXT_DIACRITIC_UMLAUT, texture_font_char_us_o}, // ö + + {0x00F9, 5, TEXT_DIACRITIC_GRAVE, texture_font_char_us_u}, // ù + {0x00FA, 5, TEXT_DIACRITIC_ACUTE, texture_font_char_us_u}, // ú + {0x00FB, 5, TEXT_DIACRITIC_CIRCUMFLEX, texture_font_char_us_u}, // û + {0x00FC, 5, TEXT_DIACRITIC_UMLAUT, texture_font_char_us_u}, // ü + + {0x02C6, 0, 0, texture_font_char_diacritic_circumflex}, // ˆ + {0x02CA, 0, 0, texture_font_char_diacritic_acute}, // ˊ + {0x02CB, 0, 0, texture_font_char_diacritic_grave}, // ˋ + {0x02DC, 0, 0, texture_font_char_diacritic_tilde}, // ˜ +}; + +const struct Utf8CharLUTEntry main_font_utf8_3byte_lut[] = { + {0x0D9E, 8, 0, texture_font_char_amogus}, // ඞ + {0x201C, 6, 0, texture_font_char_us_double_quote_open}, // “ + {0x201D, 6, 0, texture_font_char_us_double_quote_close}, // ” + {0x201E, 6, 0, texture_font_char_us_double_low_quote}, // „ + {0x2194, 9, 0, texture_font_char_us_left_right_arrow}, // ↔ + + {0x24B6, 7, 0, texture_font_char_us_button_A}, // Ⓐ + {0x24B7, 7, 0, texture_font_char_us_button_B}, // Ⓑ + {0x24B8, 6, 0, texture_font_char_us_button_C}, // Ⓒ + {0x24C7, 7, 0, texture_font_char_us_button_R}, // Ⓡ + {0x24CF, 7, 0, texture_font_char_us_button_Z}, // Ⓩ + + {0x25B2, 8, 0, texture_font_char_us_button_C_up}, // ▲ + {0x25B6, 8, 0, texture_font_char_us_button_C_right}, // ▶ + {0x25BC, 8, 0, texture_font_char_us_button_C_down}, // ▼ + {0x25C0, 8, 0, texture_font_char_us_button_C_left}, // ◀ + + {0x2605, 10, 0, texture_font_char_us_star_filled}, // ★ + {0x2606, 10, 0, texture_font_char_us_star_hollow}, // ☆ + {0x272A, 8, 0, texture_font_char_us_coin}, // ✪ + +#ifdef JAPANESE_CHARACTERS + {0x3000, 10, 0, NULL}, // " " (ideographic space) + {0x3001, 10, TEXT_FLAG_PACKED, texture_font_char_jp_comma}, // 、 + {0x3002, 10, TEXT_FLAG_PACKED, texture_font_char_jp_period}, // 。 + {0x300E, 10, TEXT_FLAG_PACKED, texture_font_char_jp_double_quotation_open}, // 『 + {0x300F, 10, TEXT_FLAG_PACKED, texture_font_char_jp_double_quotation_close}, // 』 + + {0x3041, 10, TEXT_FLAG_PACKED, texture_font_char_jp_hiragana_small_a}, // ぁ + {0x3042, 10, TEXT_FLAG_PACKED, texture_font_char_jp_hiragana_a}, // あ + {0x3043, 10, TEXT_FLAG_PACKED, texture_font_char_jp_hiragana_small_i}, // ぃ + {0x3044, 10, TEXT_FLAG_PACKED, texture_font_char_jp_hiragana_i}, // い + {0x3045, 10, TEXT_FLAG_PACKED, texture_font_char_jp_hiragana_small_u}, // ぅ + {0x3046, 10, TEXT_FLAG_PACKED, texture_font_char_jp_hiragana_u}, // う + {0x3047, 10, TEXT_FLAG_PACKED, texture_font_char_jp_hiragana_small_e}, // ぇ + {0x3048, 10, TEXT_FLAG_PACKED, texture_font_char_jp_hiragana_e}, // え + {0x3049, 10, TEXT_FLAG_PACKED, texture_font_char_jp_hiragana_small_o}, // ぉ + {0x304A, 10, TEXT_FLAG_PACKED, texture_font_char_jp_hiragana_o}, // お + {0x304B, 10, TEXT_FLAG_PACKED, texture_font_char_jp_hiragana_ka}, // か + {0x304C, 10, TEXT_FLAG_PACKED | TEXT_DIACRITIC_DAKUTEN, texture_font_char_jp_hiragana_ka}, // が + {0x304D, 10, TEXT_FLAG_PACKED, texture_font_char_jp_hiragana_ki}, // き + {0x304E, 10, TEXT_FLAG_PACKED | TEXT_DIACRITIC_DAKUTEN, texture_font_char_jp_hiragana_ki}, // ぎ + {0x304F, 10, TEXT_FLAG_PACKED, texture_font_char_jp_hiragana_ku}, // く + {0x3050, 10, TEXT_FLAG_PACKED | TEXT_DIACRITIC_DAKUTEN, texture_font_char_jp_hiragana_ku}, // ぐ + {0x3051, 10, TEXT_FLAG_PACKED, texture_font_char_jp_hiragana_ke}, // け + {0x3052, 10, TEXT_FLAG_PACKED | TEXT_DIACRITIC_DAKUTEN, texture_font_char_jp_hiragana_ke}, // げ + {0x3053, 10, TEXT_FLAG_PACKED, texture_font_char_jp_hiragana_ko}, // こ + {0x3054, 10, TEXT_FLAG_PACKED | TEXT_DIACRITIC_DAKUTEN, texture_font_char_jp_hiragana_ko}, // ご + {0x3055, 10, TEXT_FLAG_PACKED, texture_font_char_jp_hiragana_sa}, // さ + {0x3056, 10, TEXT_FLAG_PACKED | TEXT_DIACRITIC_DAKUTEN, texture_font_char_jp_hiragana_sa}, // ざ + {0x3057, 10, TEXT_FLAG_PACKED, texture_font_char_jp_hiragana_shi}, // し + {0x3058, 10, TEXT_FLAG_PACKED | TEXT_DIACRITIC_DAKUTEN, texture_font_char_jp_hiragana_shi}, // じ + {0x3059, 10, TEXT_FLAG_PACKED, texture_font_char_jp_hiragana_su}, // す + {0x305A, 10, TEXT_FLAG_PACKED | TEXT_DIACRITIC_DAKUTEN, texture_font_char_jp_hiragana_su}, // ず + {0x305B, 10, TEXT_FLAG_PACKED, texture_font_char_jp_hiragana_se}, // せ + {0x305C, 10, TEXT_FLAG_PACKED | TEXT_DIACRITIC_DAKUTEN, texture_font_char_jp_hiragana_se}, // ぜ + {0x305D, 10, TEXT_FLAG_PACKED, texture_font_char_jp_hiragana_so}, // そ + {0x305E, 10, TEXT_FLAG_PACKED | TEXT_DIACRITIC_DAKUTEN, texture_font_char_jp_hiragana_so}, // ぞ + {0x305F, 10, TEXT_FLAG_PACKED, texture_font_char_jp_hiragana_ta}, // た + {0x3060, 10, TEXT_FLAG_PACKED | TEXT_DIACRITIC_DAKUTEN, texture_font_char_jp_hiragana_ta}, // だ + {0x3061, 10, TEXT_FLAG_PACKED, texture_font_char_jp_hiragana_chi}, // ち + {0x3062, 10, TEXT_FLAG_PACKED | TEXT_DIACRITIC_DAKUTEN, texture_font_char_jp_hiragana_chi}, // ぢ + {0x3063, 10, TEXT_FLAG_PACKED, texture_font_char_jp_hiragana_small_tsu}, // っ + {0x3064, 10, TEXT_FLAG_PACKED, texture_font_char_jp_hiragana_tsu}, // つ + {0x3065, 10, TEXT_FLAG_PACKED | TEXT_DIACRITIC_DAKUTEN, texture_font_char_jp_hiragana_tsu}, // づ + {0x3066, 10, TEXT_FLAG_PACKED, texture_font_char_jp_hiragana_te}, // て + {0x3067, 10, TEXT_FLAG_PACKED | TEXT_DIACRITIC_DAKUTEN, texture_font_char_jp_hiragana_te}, // で + {0x3068, 10, TEXT_FLAG_PACKED, texture_font_char_jp_hiragana_to}, // と + {0x3069, 10, TEXT_FLAG_PACKED | TEXT_DIACRITIC_DAKUTEN, texture_font_char_jp_hiragana_to}, // ど + {0x306A, 10, TEXT_FLAG_PACKED, texture_font_char_jp_hiragana_na}, // な + {0x306B, 10, TEXT_FLAG_PACKED, texture_font_char_jp_hiragana_ni}, // に + {0x306C, 10, TEXT_FLAG_PACKED, texture_font_char_jp_hiragana_nu}, // ぬ + {0x306D, 10, TEXT_FLAG_PACKED, texture_font_char_jp_hiragana_ne}, // ね + {0x306E, 10, TEXT_FLAG_PACKED, texture_font_char_jp_hiragana_no}, // の + {0x306F, 10, TEXT_FLAG_PACKED, texture_font_char_jp_hiragana_ha}, // は + {0x3070, 10, TEXT_FLAG_PACKED | TEXT_DIACRITIC_DAKUTEN, texture_font_char_jp_hiragana_ha}, // ば + {0x3071, 10, TEXT_FLAG_PACKED | TEXT_DIACRITIC_HANDAKUTEN, texture_font_char_jp_hiragana_ha}, // ぱ + {0x3072, 10, TEXT_FLAG_PACKED, texture_font_char_jp_hiragana_hi}, // ひ + {0x3073, 10, TEXT_FLAG_PACKED | TEXT_DIACRITIC_DAKUTEN, texture_font_char_jp_hiragana_hi}, // び + {0x3074, 10, TEXT_FLAG_PACKED | TEXT_DIACRITIC_HANDAKUTEN, texture_font_char_jp_hiragana_hi}, // ぴ + {0x3075, 10, TEXT_FLAG_PACKED, texture_font_char_jp_hiragana_fu}, // ふ + {0x3076, 10, TEXT_FLAG_PACKED | TEXT_DIACRITIC_DAKUTEN, texture_font_char_jp_hiragana_fu}, // ぶ + {0x3077, 10, TEXT_FLAG_PACKED | TEXT_DIACRITIC_HANDAKUTEN, texture_font_char_jp_hiragana_fu}, // ぷ + {0x3078, 10, TEXT_FLAG_PACKED, texture_font_char_jp_hiragana_he}, // へ + {0x3079, 10, TEXT_FLAG_PACKED | TEXT_DIACRITIC_DAKUTEN, texture_font_char_jp_hiragana_he}, // べ + {0x307A, 10, TEXT_FLAG_PACKED | TEXT_DIACRITIC_HANDAKUTEN, texture_font_char_jp_hiragana_he}, // ぺ + {0x307B, 10, TEXT_FLAG_PACKED, texture_font_char_jp_hiragana_ho}, // ほ + {0x307C, 10, TEXT_FLAG_PACKED | TEXT_DIACRITIC_DAKUTEN, texture_font_char_jp_hiragana_ho}, // ぼ + {0x307D, 10, TEXT_FLAG_PACKED | TEXT_DIACRITIC_HANDAKUTEN, texture_font_char_jp_hiragana_ho}, // ぽ + {0x307E, 10, TEXT_FLAG_PACKED, texture_font_char_jp_hiragana_ma}, // ま + {0x307F, 10, TEXT_FLAG_PACKED, texture_font_char_jp_hiragana_mi}, // み + {0x3080, 10, TEXT_FLAG_PACKED, texture_font_char_jp_hiragana_mu}, // む + {0x3081, 10, TEXT_FLAG_PACKED, texture_font_char_jp_hiragana_me}, // め + {0x3082, 10, TEXT_FLAG_PACKED, texture_font_char_jp_hiragana_mo}, // も + {0x3083, 10, TEXT_FLAG_PACKED, texture_font_char_jp_hiragana_small_ya}, // ゃ + {0x3084, 10, TEXT_FLAG_PACKED, texture_font_char_jp_hiragana_ya}, // や + {0x3085, 10, TEXT_FLAG_PACKED, texture_font_char_jp_hiragana_small_yu}, // ゅ + {0x3086, 10, TEXT_FLAG_PACKED, texture_font_char_jp_hiragana_yu}, // ゆ + {0x3087, 10, TEXT_FLAG_PACKED, texture_font_char_jp_hiragana_small_yo}, // ょ + {0x3088, 10, TEXT_FLAG_PACKED, texture_font_char_jp_hiragana_yo}, // よ + {0x3089, 10, TEXT_FLAG_PACKED, texture_font_char_jp_hiragana_ra}, // ら + {0x308A, 10, TEXT_FLAG_PACKED, texture_font_char_jp_hiragana_ri}, // り + {0x308B, 10, TEXT_FLAG_PACKED, texture_font_char_jp_hiragana_ru}, // る + {0x308C, 10, TEXT_FLAG_PACKED, texture_font_char_jp_hiragana_re}, // れ + {0x308D, 10, TEXT_FLAG_PACKED, texture_font_char_jp_hiragana_ro}, // ろ + {0x308F, 10, TEXT_FLAG_PACKED, texture_font_char_jp_hiragana_wa}, // わ + {0x3092, 10, TEXT_FLAG_PACKED, texture_font_char_jp_hiragana_wo}, // を + {0x3093, 10, TEXT_FLAG_PACKED, texture_font_char_jp_hiragana_n}, // ん + + {0x309B, 0, TEXT_FLAG_PACKED, texture_font_char_jp_dakuten}, // ゛ + {0x309C, 0, TEXT_FLAG_PACKED, texture_font_char_jp_period}, // ゜ + + {0x30A1, 10, TEXT_FLAG_PACKED, texture_font_char_jp_katakana_small_a}, // ァ + {0x30A2, 10, TEXT_FLAG_PACKED, texture_font_char_jp_katakana_a}, // ア + {0x30A3, 10, TEXT_FLAG_PACKED, texture_font_char_jp_katakana_small_i}, // ィ + {0x30A4, 10, TEXT_FLAG_PACKED, texture_font_char_jp_katakana_i}, // イ + {0x30A5, 10, TEXT_FLAG_PACKED, texture_font_char_jp_katakana_small_u}, // ゥ + {0x30A6, 10, TEXT_FLAG_PACKED, texture_font_char_jp_katakana_u}, // ウ + {0x30A7, 10, TEXT_FLAG_PACKED, texture_font_char_jp_katakana_small_e}, // ェ + {0x30A8, 10, TEXT_FLAG_PACKED, texture_font_char_jp_katakana_e}, // エ + {0x30A9, 10, TEXT_FLAG_PACKED, texture_font_char_jp_katakana_small_o}, // ォ + {0x30AA, 10, TEXT_FLAG_PACKED, texture_font_char_jp_katakana_o}, // オ + {0x30AB, 10, TEXT_FLAG_PACKED, texture_font_char_jp_katakana_ka}, // カ + {0x30AC, 10, TEXT_FLAG_PACKED | TEXT_DIACRITIC_DAKUTEN, texture_font_char_jp_katakana_ka}, // ガ + {0x30AD, 10, TEXT_FLAG_PACKED, texture_font_char_jp_katakana_ki}, // キ + {0x30AE, 10, TEXT_FLAG_PACKED | TEXT_DIACRITIC_DAKUTEN, texture_font_char_jp_katakana_ki}, // ギ + {0x30AF, 10, TEXT_FLAG_PACKED, texture_font_char_jp_katakana_ku}, // ク + {0x30B0, 10, TEXT_FLAG_PACKED | TEXT_DIACRITIC_DAKUTEN, texture_font_char_jp_katakana_ku}, // グ + {0x30B1, 10, TEXT_FLAG_PACKED, texture_font_char_jp_katakana_ke}, // ケ + {0x30B2, 10, TEXT_FLAG_PACKED | TEXT_DIACRITIC_DAKUTEN, texture_font_char_jp_katakana_ke}, // ゲ + {0x30B3, 10, TEXT_FLAG_PACKED, texture_font_char_jp_katakana_ko}, // コ + {0x30B4, 10, TEXT_FLAG_PACKED | TEXT_DIACRITIC_DAKUTEN, texture_font_char_jp_katakana_ko}, // ゴ + {0x30B5, 10, TEXT_FLAG_PACKED, texture_font_char_jp_katakana_sa}, // サ + {0x30B6, 10, TEXT_FLAG_PACKED | TEXT_DIACRITIC_DAKUTEN, texture_font_char_jp_katakana_sa}, // ザ + {0x30B7, 10, TEXT_FLAG_PACKED, texture_font_char_jp_katakana_shi}, // シ + {0x30B8, 10, TEXT_FLAG_PACKED | TEXT_DIACRITIC_DAKUTEN, texture_font_char_jp_katakana_shi}, // ジ + {0x30B9, 10, TEXT_FLAG_PACKED, texture_font_char_jp_katakana_su}, // ス + {0x30BA, 10, TEXT_FLAG_PACKED | TEXT_DIACRITIC_DAKUTEN, texture_font_char_jp_katakana_su}, // ズ + {0x30BB, 10, TEXT_FLAG_PACKED, texture_font_char_jp_katakana_se}, // セ + {0x30BC, 10, TEXT_FLAG_PACKED | TEXT_DIACRITIC_DAKUTEN, texture_font_char_jp_katakana_se}, // ゼ + {0x30BD, 10, TEXT_FLAG_PACKED, texture_font_char_jp_katakana_so}, // ソ + {0x30BE, 10, TEXT_FLAG_PACKED | TEXT_DIACRITIC_DAKUTEN, texture_font_char_jp_katakana_so}, // ゾ + {0x30BF, 10, TEXT_FLAG_PACKED, texture_font_char_jp_katakana_ta}, // タ + {0x30C0, 10, TEXT_FLAG_PACKED | TEXT_DIACRITIC_DAKUTEN, texture_font_char_jp_katakana_ta}, // ダ + {0x30C1, 10, TEXT_FLAG_PACKED, texture_font_char_jp_katakana_chi}, // チ + {0x30C2, 10, TEXT_FLAG_PACKED | TEXT_DIACRITIC_DAKUTEN, texture_font_char_jp_katakana_chi}, // ヂ + {0x30C3, 10, TEXT_FLAG_PACKED, texture_font_char_jp_katakana_small_tsu}, // ッ + {0x30C4, 10, TEXT_FLAG_PACKED, texture_font_char_jp_katakana_tsu}, // ツ + {0x30C5, 10, TEXT_FLAG_PACKED | TEXT_DIACRITIC_DAKUTEN, texture_font_char_jp_katakana_tsu}, // ヅ + {0x30C6, 10, TEXT_FLAG_PACKED, texture_font_char_jp_katakana_te}, // テ + {0x30C7, 10, TEXT_FLAG_PACKED | TEXT_DIACRITIC_DAKUTEN, texture_font_char_jp_katakana_te}, // デ + {0x30C8, 10, TEXT_FLAG_PACKED, texture_font_char_jp_katakana_to}, // ト + {0x30C9, 10, TEXT_FLAG_PACKED | TEXT_DIACRITIC_DAKUTEN, texture_font_char_jp_katakana_to}, // ド + {0x30CA, 10, TEXT_FLAG_PACKED, texture_font_char_jp_katakana_na}, // ナ + {0x30CB, 10, TEXT_FLAG_PACKED, texture_font_char_jp_katakana_ni}, // ニ + {0x30CC, 10, TEXT_FLAG_PACKED, texture_font_char_jp_katakana_nu}, // ヌ + {0x30CD, 10, TEXT_FLAG_PACKED, texture_font_char_jp_katakana_ne}, // ネ + {0x30CE, 10, TEXT_FLAG_PACKED, texture_font_char_jp_katakana_no}, // ノ + {0x30CF, 10, TEXT_FLAG_PACKED, texture_font_char_jp_katakana_ha}, // ハ + {0x30D0, 10, TEXT_FLAG_PACKED | TEXT_DIACRITIC_DAKUTEN, texture_font_char_jp_katakana_ha}, // バ + {0x30D1, 10, TEXT_FLAG_PACKED | TEXT_DIACRITIC_HANDAKUTEN, texture_font_char_jp_katakana_ha}, // パ + {0x30D2, 10, TEXT_FLAG_PACKED, texture_font_char_jp_katakana_hi}, // ヒ + {0x30D3, 10, TEXT_FLAG_PACKED | TEXT_DIACRITIC_DAKUTEN, texture_font_char_jp_katakana_hi}, // ビ + {0x30D4, 10, TEXT_FLAG_PACKED | TEXT_DIACRITIC_HANDAKUTEN, texture_font_char_jp_katakana_hi}, // ピ + {0x30D5, 10, TEXT_FLAG_PACKED, texture_font_char_jp_katakana_fu}, // フ + {0x30D6, 10, TEXT_FLAG_PACKED | TEXT_DIACRITIC_DAKUTEN, texture_font_char_jp_katakana_fu}, // ブ + {0x30D7, 10, TEXT_FLAG_PACKED | TEXT_DIACRITIC_HANDAKUTEN, texture_font_char_jp_katakana_fu}, // プ + {0x30D8, 10, TEXT_FLAG_PACKED, texture_font_char_jp_katakana_he}, // ヘ + {0x30D9, 10, TEXT_FLAG_PACKED | TEXT_DIACRITIC_DAKUTEN, texture_font_char_jp_katakana_he}, // ベ + {0x30DA, 10, TEXT_FLAG_PACKED | TEXT_DIACRITIC_HANDAKUTEN, texture_font_char_jp_katakana_he}, // ペ + {0x30DB, 10, TEXT_FLAG_PACKED, texture_font_char_jp_katakana_ho}, // ホ + {0x30DC, 10, TEXT_FLAG_PACKED | TEXT_DIACRITIC_DAKUTEN, texture_font_char_jp_katakana_ho}, // ボ + {0x30DD, 10, TEXT_FLAG_PACKED | TEXT_DIACRITIC_HANDAKUTEN, texture_font_char_jp_katakana_ho}, // ポ + {0x30DE, 10, TEXT_FLAG_PACKED, texture_font_char_jp_katakana_ma}, // マ + {0x30DF, 10, TEXT_FLAG_PACKED, texture_font_char_jp_katakana_mi}, // ミ + {0x30E0, 10, TEXT_FLAG_PACKED, texture_font_char_jp_katakana_mu}, // ム + {0x30E1, 10, TEXT_FLAG_PACKED, texture_font_char_jp_katakana_me}, // メ + {0x30E2, 10, TEXT_FLAG_PACKED, texture_font_char_jp_katakana_mo}, // モ + {0x30E3, 10, TEXT_FLAG_PACKED, texture_font_char_jp_katakana_small_ya}, // ャ + {0x30E4, 10, TEXT_FLAG_PACKED, texture_font_char_jp_katakana_ya}, // ヤ + {0x30E5, 10, TEXT_FLAG_PACKED, texture_font_char_jp_katakana_small_yu}, // ュ + {0x30E6, 10, TEXT_FLAG_PACKED, texture_font_char_jp_katakana_yu}, // ユ + {0x30E7, 10, TEXT_FLAG_PACKED, texture_font_char_jp_katakana_small_yo}, // ョ + {0x30E8, 10, TEXT_FLAG_PACKED, texture_font_char_jp_katakana_yo}, // ヨ + {0x30E9, 10, TEXT_FLAG_PACKED, texture_font_char_jp_katakana_ra}, // ラ + {0x30EA, 10, TEXT_FLAG_PACKED, texture_font_char_jp_katakana_ri}, // リ + {0x30EB, 10, TEXT_FLAG_PACKED, texture_font_char_jp_katakana_ru}, // ル + {0x30EC, 10, TEXT_FLAG_PACKED, texture_font_char_jp_katakana_re}, // レ + {0x30ED, 10, TEXT_FLAG_PACKED, texture_font_char_jp_katakana_ro}, // ロ + {0x30EF, 10, TEXT_FLAG_PACKED, texture_font_char_jp_katakana_wa}, // ワ + {0x30F3, 10, TEXT_FLAG_PACKED, texture_font_char_jp_katakana_n}, // ン + {0x30FB, 10, TEXT_FLAG_PACKED, texture_font_char_jp_interpunct}, // ・ + {0x30FC, 10, TEXT_FLAG_PACKED, texture_font_char_jp_long_vowel}, // ー + + {0xFF01, 10, TEXT_FLAG_PACKED, texture_font_char_jp_exclamation}, // ! + {0xFF05, 10, TEXT_FLAG_PACKED, texture_font_char_jp_percent}, // % + {0xFF08, 10, TEXT_FLAG_PACKED, texture_font_char_jp_open_parentheses}, // ( + {0xFF09, 10, TEXT_FLAG_PACKED, texture_font_char_jp_close_parentheses}, // ) + {0xFF10, 10, TEXT_FLAG_PACKED, texture_font_char_jp_0}, // 0 + {0xFF11, 10, TEXT_FLAG_PACKED, texture_font_char_jp_1}, // 1 + {0xFF12, 10, TEXT_FLAG_PACKED, texture_font_char_jp_2}, // 2 + {0xFF13, 10, TEXT_FLAG_PACKED, texture_font_char_jp_3}, // 3 + {0xFF14, 10, TEXT_FLAG_PACKED, texture_font_char_jp_4}, // 4 + {0xFF15, 10, TEXT_FLAG_PACKED, texture_font_char_jp_5}, // 5 + {0xFF16, 10, TEXT_FLAG_PACKED, texture_font_char_jp_6}, // 6 + {0xFF17, 10, TEXT_FLAG_PACKED, texture_font_char_jp_7}, // 7 + {0xFF18, 10, TEXT_FLAG_PACKED, texture_font_char_jp_8}, // 8 + {0xFF19, 10, TEXT_FLAG_PACKED, texture_font_char_jp_9}, // 9 + {0xFF1F, 10, TEXT_FLAG_PACKED, texture_font_char_jp_question}, // ? + {0xFF21, 10, TEXT_FLAG_PACKED, texture_font_char_jp_A}, // A + {0xFF22, 10, TEXT_FLAG_PACKED, texture_font_char_jp_B}, // B + {0xFF23, 10, TEXT_FLAG_PACKED, texture_font_char_jp_C}, // C + {0xFF24, 10, TEXT_FLAG_PACKED, texture_font_char_jp_D}, // D + {0xFF25, 10, TEXT_FLAG_PACKED, texture_font_char_jp_E}, // E + {0xFF26, 10, TEXT_FLAG_PACKED, texture_font_char_jp_F}, // F + {0xFF27, 10, TEXT_FLAG_PACKED, texture_font_char_jp_G}, // G + {0xFF28, 10, TEXT_FLAG_PACKED, texture_font_char_jp_H}, // H + {0xFF29, 10, TEXT_FLAG_PACKED, texture_font_char_jp_I}, // I + {0xFF2A, 10, TEXT_FLAG_PACKED, texture_font_char_jp_J}, // J + {0xFF2B, 10, TEXT_FLAG_PACKED, texture_font_char_jp_K}, // K + {0xFF2C, 10, TEXT_FLAG_PACKED, texture_font_char_jp_L}, // L + {0xFF2D, 10, TEXT_FLAG_PACKED, texture_font_char_jp_M}, // M + {0xFF2E, 10, TEXT_FLAG_PACKED, texture_font_char_jp_N}, // N + {0xFF2F, 10, TEXT_FLAG_PACKED, texture_font_char_jp_O}, // O + {0xFF30, 10, TEXT_FLAG_PACKED, texture_font_char_jp_P}, // P + {0xFF31, 10, TEXT_FLAG_PACKED, texture_font_char_jp_Q}, // Q + {0xFF32, 10, TEXT_FLAG_PACKED, texture_font_char_jp_R}, // R + {0xFF33, 10, TEXT_FLAG_PACKED, texture_font_char_jp_S}, // S + {0xFF34, 10, TEXT_FLAG_PACKED, texture_font_char_jp_T}, // T + {0xFF35, 10, TEXT_FLAG_PACKED, texture_font_char_jp_U}, // U + {0xFF36, 10, TEXT_FLAG_PACKED, texture_font_char_jp_V}, // V + {0xFF37, 10, TEXT_FLAG_PACKED, texture_font_char_jp_W}, // W + {0xFF38, 10, TEXT_FLAG_PACKED, texture_font_char_jp_X}, // X + {0xFF39, 10, TEXT_FLAG_PACKED, texture_font_char_jp_Y}, // Y + {0xFF3A, 10, TEXT_FLAG_PACKED, texture_font_char_jp_Z}, // Z + + {0xFF58, 10, TEXT_FLAG_PACKED, texture_font_char_jp_multiply}, // x + {0xFF5E, 10, TEXT_FLAG_PACKED, texture_font_char_jp_tilde}, // ~ +#endif +}; + +const struct Utf8CharLUTEntry main_font_utf8_4byte_lut[] = { + +}; + +const struct Utf8CharLUTEntry main_font_utf8_missing_char = {0, 9, 0, texture_font_missing_character}; + +const struct Utf8LUT main_font_utf8_lut = { + main_font_utf8_2byte_lut, + main_font_utf8_3byte_lut, + main_font_utf8_4byte_lut, + ARRAY_COUNT(main_font_utf8_2byte_lut), + ARRAY_COUNT(main_font_utf8_3byte_lut), + ARRAY_COUNT(main_font_utf8_4byte_lut), + &main_font_utf8_missing_char, +}; + +// ASCII lookup table for the green credits font +const struct AsciiCharLUTEntry main_credits_font_lut[] = { + {NULL, 4}, // 32 " " + {NULL, 0}, // 33 "!" (Unimplemented) + {NULL, 0}, // 34 "\"" (Unimplemented) + {NULL, 0}, // 35 "#" (Unimplemented) + {NULL, 0}, // 36 "$" (Unimplemented) + {NULL, 0}, // 37 "%" (Unimplemented) + {NULL, 0}, // 38 "&" (Unimplemented) + {NULL, 0}, // 39 "'" (Unimplemented) + {NULL, 0}, // 40 "(" (Unimplemented) + {NULL, 0}, // 41 ")" (Unimplemented) + {NULL, 0}, // 42 "*" (Unimplemented) + {NULL, 0}, // 43 "+" (Unimplemented) + {NULL, 0}, // 44 "," (Unimplemented) + {NULL, 0}, // 45 "-" (Unimplemented) + {texture_credits_char_period, 7}, // 46 "." + {NULL, 0}, // 47 "/" (Unimplemented) + {NULL, 0}, // 48 "0" (Unimplemented) + {NULL, 0}, // 49 "1" (Unimplemented) + {NULL, 0}, // 50 "2" (Unimplemented) + {texture_credits_char_3, 7}, // 51 "3" + {texture_credits_char_4, 7}, // 52 "4" + {NULL, 0}, // 53 "5" (Unimplemented) + {texture_credits_char_6, 7}, // 54 "6" + {NULL, 0}, // 55 "7" (Unimplemented) + {NULL, 0}, // 56 "8" (Unimplemented) + {NULL, 0}, // 57 "9" (Unimplemented) + {NULL, 0}, // 58 ":" (Unimplemented) + {NULL, 0}, // 59 ";" (Unimplemented) + {NULL, 0}, // 60 "<" (Unimplemented) + {NULL, 0}, // 61 "=" (Unimplemented) + {NULL, 0}, // 62 ">" (Unimplemented) + {NULL, 0}, // 63 "?" (Unimplemented) + {NULL, 0}, // 64 "@" (Unimplemented) + {texture_credits_char_A, 7}, // 65 "A" + {texture_credits_char_B, 7}, // 66 "B" + {texture_credits_char_C, 7}, // 67 "C" + {texture_credits_char_D, 7}, // 68 "D" + {texture_credits_char_E, 7}, // 69 "E" + {texture_credits_char_F, 7}, // 70 "F" + {texture_credits_char_G, 7}, // 71 "G" + {texture_credits_char_H, 7}, // 72 "H" + {texture_credits_char_I, 7}, // 73 "I" + {texture_credits_char_J, 7}, // 74 "J" + {texture_credits_char_K, 7}, // 75 "K" + {texture_credits_char_L, 7}, // 76 "L" + {texture_credits_char_M, 7}, // 77 "M" + {texture_credits_char_N, 7}, // 78 "N" + {texture_credits_char_O, 7}, // 79 "O" + {texture_credits_char_P, 7}, // 80 "P" + {texture_credits_char_Q, 7}, // 81 "Q" + {texture_credits_char_R, 7}, // 82 "R" + {texture_credits_char_S, 7}, // 83 "S" + {texture_credits_char_T, 7}, // 84 "T" + {texture_credits_char_U, 7}, // 85 "U" + {texture_credits_char_V, 7}, // 86 "V" + {texture_credits_char_W, 7}, // 87 "W" + {texture_credits_char_X, 7}, // 88 "X" + {texture_credits_char_Y, 7}, // 89 "Y" + {texture_credits_char_Z, 7}, // 90 "Z" + {NULL, 0}, // 91 "[" (Unimplemented) + {NULL, 0}, // 92 "\" (Unimplemented) + {NULL, 0}, // 93 "]" (Unimplemented) + {NULL, 0}, // 94 "^" (Unimplemented) + {NULL, 0}, // 95 "_" (Unimplemented) + {NULL, 0}, // 96 "`" (Unimplemented) + {texture_credits_char_A, 7}, // 97 "a" + {texture_credits_char_B, 7}, // 98 "b" + {texture_credits_char_C, 7}, // 99 "c" + {texture_credits_char_D, 7}, // 100 "d" + {texture_credits_char_E, 7}, // 101 "e" + {texture_credits_char_F, 7}, // 102 "f" + {texture_credits_char_G, 7}, // 103 "g" + {texture_credits_char_H, 7}, // 104 "h" + {texture_credits_char_I, 7}, // 105 "i" + {texture_credits_char_J, 7}, // 106 "j" + {texture_credits_char_K, 7}, // 107 "k" + {texture_credits_char_L, 7}, // 108 "l" + {texture_credits_char_M, 7}, // 109 "m" + {texture_credits_char_N, 7}, // 110 "n" + {texture_credits_char_O, 7}, // 111 "o" + {texture_credits_char_P, 7}, // 112 "p" + {texture_credits_char_Q, 7}, // 113 "q" + {texture_credits_char_R, 7}, // 114 "r" + {texture_credits_char_S, 7}, // 115 "s" + {texture_credits_char_T, 7}, // 116 "t" + {texture_credits_char_U, 7}, // 117 "u" + {texture_credits_char_V, 7}, // 118 "v" + {texture_credits_char_W, 7}, // 119 "w" + {texture_credits_char_X, 7}, // 120 "x" + {texture_credits_char_Y, 7}, // 121 "y" + {texture_credits_char_Z, 7}, // 122 "z" + {NULL, 0}, // 123 "{" (Unimplemented) + {NULL, 0}, // 124 "|" (Unimplemented) + {NULL, 0}, // 125 "}" (Unimplemented) + {NULL, 0}, // 126 "~" (Unimplemented) }; // HUD camera table 0x020087CC-0x020087E3 @@ -2253,13 +2442,21 @@ const Texture *const main_hud_camera_lut[] = { texture_hud_char_arrow_up, texture_hud_char_arrow_down, }; -// 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 -#if defined(VERSION_JP) || defined(VERSION_SH) -#include "text/jp/define_text.inc.c" -#elif defined(VERSION_US) -#include "text/us/define_text.inc.c" +// If not using multilang, include the text data here in segment 0x02. +// Otherwise, it will be placed into segment 0x19. +#ifndef MULTILANG +#include "sounds.h" +#include "seq_ids.h" + +#define COURSE_NAME_TABLE seg2_course_name_table +#define ACT_NAME_TABLE seg2_act_name_table +#define DIALOG_TABLE seg2_dialog_table + +#define DIALOG_FILE "us/dialogs.h" +#define COURSE_FILE "us/courses.h" +#include "text/define_text.inc.c" +#undef DIALOG_FILE +#undef COURSE_FILE #endif // 0x0200EC60 - 0x0200EC98 @@ -2366,21 +2563,12 @@ const Gfx dl_draw_text_bg_box[] = { // 0x0200EE28 - 0x0200EE68 static const Vtx vertex_ia8_char[] = { -#if defined(VERSION_JP) || defined(VERSION_SH) - {{{ 0, 0, 0}, 0, { 0, 1024}, {0xff, 0xff, 0xff, 0xff}}}, - {{{ 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}}}, -#else {{{ 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}}}, -#endif }; -#if defined(VERSION_US) || defined(VERSION_EU) -// 0x0200EE68 - 0x020073E8 const Gfx dl_ia_text_begin[] = { gsDPPipeSync(), gsSPClearGeometryMode(G_LIGHTING), @@ -2403,31 +2591,27 @@ const Gfx dl_ia_text_tex_settings[] = { gsSP2Triangles( 0, 1, 2, 0x0, 0, 2, 3, 0x0), gsSPEndDisplayList(), }; -#elif defined(VERSION_JP) || defined(VERSION_SH) -// 0x0200EE68 - 0x0200EEA8 -const Gfx dl_ia_text_begin[] = { - gsDPPipeSync(), - gsSPClearGeometryMode(G_LIGHTING), - gsDPSetCombineMode(G_CC_FADEA, G_CC_FADEA), - gsDPSetEnvColor(255, 255, 255, 255), - gsDPSetRenderMode(G_RM_XLU_SURF, G_RM_XLU_SURF2), - gsDPSetTextureFilter(G_TF_POINT), - gsSPTexture(0x8000, 0x8000, 0, G_TX_RENDERTILE, G_ON), - gsSPEndDisplayList(), + +static const Vtx vertex_ia8_char_packed[] = { + {{{ 0, 0, 0}, 0, { 0, 1024}, {0xff, 0xff, 0xff, 0xff}}}, + {{{ 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}}}, }; // 0x0200EEA8 - 0x0200EEF0 -const Gfx dl_ia_text_tex_settings[] = { +const Gfx dl_ia_text_tex_settings_packed[] = { + gsSPTexture(0x8000, 0x8000, 0, G_TX_RENDERTILE, G_ON), // gross gsDPSetTile(G_IM_FMT_IA, G_IM_SIZ_8b, 0, 0, G_TX_LOADTILE, 0, G_TX_CLAMP, 4, G_TX_NOLOD, G_TX_CLAMP, 3, G_TX_NOLOD), gsDPLoadSync(), gsDPLoadBlock(G_TX_LOADTILE, 0, 0, ((8 * 16) - 1), CALC_DXT(8, G_IM_SIZ_8b_BYTES)), gsDPSetTile(G_IM_FMT_IA, G_IM_SIZ_8b, 1, 0, G_TX_RENDERTILE, 0, G_TX_CLAMP, 4, G_TX_NOLOD, G_TX_CLAMP, 3, G_TX_NOLOD), gsDPSetTileSize(0, 0, 0, ((8 - 1) << G_TEXTURE_IMAGE_FRAC), ((16 - 1) << G_TEXTURE_IMAGE_FRAC)), - gsSPVertex(vertex_ia8_char, 4, 0), + gsSPVertex(vertex_ia8_char_packed, 4, 0), gsSP2Triangles( 0, 1, 2, 0x0, 0, 2, 3, 0x0), + gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), // gross gsSPEndDisplayList(), }; -#endif // 0x0200EEF0 - 0x0200EF30 const Gfx dl_ia_text_end[] = { diff --git a/bin/translation_de.c b/bin/translation_de.c new file mode 100644 index 000000000..eaae2fbb3 --- /dev/null +++ b/bin/translation_de.c @@ -0,0 +1,17 @@ +// SM64 (EU) Segment 19 - Deutsch + +#include "macros.h" + +#include "game/ingame_menu.h" +#include "sounds.h" +#include "seq_ids.h" + +#define COURSE_NAME_TABLE course_name_table_de +#define ACT_NAME_TABLE act_name_table_de +#define DIALOG_TABLE dialog_table_de + +#define DIALOG_FILE "de/dialogs.h" +#define COURSE_FILE "de/courses.h" +#include "text/define_text.inc.c" +#undef DIALOG_FILE +#undef COURSE_FILE diff --git a/bin/translation_en.c b/bin/translation_en.c new file mode 100644 index 000000000..8b0e4dff5 --- /dev/null +++ b/bin/translation_en.c @@ -0,0 +1,17 @@ +// SM64 (EU) Segment 19 - English + +#include "macros.h" + +#include "game/ingame_menu.h" +#include "sounds.h" +#include "seq_ids.h" + +#define COURSE_NAME_TABLE course_name_table_en +#define ACT_NAME_TABLE act_name_table_en +#define DIALOG_TABLE dialog_table_en + +#define DIALOG_FILE "us/dialogs.h" +#define COURSE_FILE "us/courses.h" +#include "text/define_text.inc.c" +#undef DIALOG_FILE +#undef COURSE_FILE diff --git a/bin/translation_es.c b/bin/translation_es.c new file mode 100644 index 000000000..90e380b63 --- /dev/null +++ b/bin/translation_es.c @@ -0,0 +1,17 @@ +// SM64 (EU) Segment 19 - Español (España) (Not vanilla: Translation created and added by Reonu) + +#include "macros.h" + +#include "game/ingame_menu.h" +#include "sounds.h" +#include "seq_ids.h" + +#define COURSE_NAME_TABLE course_name_table_es +#define ACT_NAME_TABLE act_name_table_es +#define DIALOG_TABLE dialog_table_es + +#define DIALOG_FILE "es/dialogs.h" +#define COURSE_FILE "es/courses.h" +#include "text/define_text.inc.c" +#undef DIALOG_FILE +#undef COURSE_FILE diff --git a/bin/translation_fr.c b/bin/translation_fr.c new file mode 100644 index 000000000..fd6704566 --- /dev/null +++ b/bin/translation_fr.c @@ -0,0 +1,17 @@ +// SM64 (EU) Segment 19 - Français + +#include "macros.h" + +#include "game/ingame_menu.h" +#include "sounds.h" +#include "seq_ids.h" + +#define COURSE_NAME_TABLE course_name_table_fr +#define ACT_NAME_TABLE act_name_table_fr +#define DIALOG_TABLE dialog_table_fr + +#define DIALOG_FILE "fr/dialogs.h" +#define COURSE_FILE "fr/courses.h" +#include "text/define_text.inc.c" +#undef DIALOG_FILE +#undef COURSE_FILE diff --git a/bin/translation_jp.c b/bin/translation_jp.c new file mode 100644 index 000000000..3d45ab9f9 --- /dev/null +++ b/bin/translation_jp.c @@ -0,0 +1,17 @@ +// SM64 (EU) Segment 19 - 日本語 (Japanese) + +#include "macros.h" + +#include "game/ingame_menu.h" +#include "sounds.h" +#include "seq_ids.h" + +#define COURSE_NAME_TABLE course_name_table_jp +#define ACT_NAME_TABLE act_name_table_jp +#define DIALOG_TABLE dialog_table_jp + +#define DIALOG_FILE "jp/dialogs.h" +#define COURSE_FILE "jp/courses.h" +#include "text/define_text.inc.c" +#undef DIALOG_FILE +#undef COURSE_FILE diff --git a/charmap.txt b/charmap.txt deleted file mode 100644 index a1581c13e..000000000 --- a/charmap.txt +++ /dev/null @@ -1,357 +0,0 @@ -'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 - -# Mario face US/EU menu string (Note: NOT multi-text, each char has a part of the face) -'☺' = 0x40, 0x41 - -'あ' = 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 -'@' = 0xDF -'[%]' = 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 - -# hiragana or katakana with dakuten -'が' = 0xF0, 0x45 -'ぎ' = 0xF0, 0x46 -'ぐ' = 0xF0, 0x47 -'げ' = 0xF0, 0x48 -'ご' = 0xF0, 0x49 -'ざ' = 0xF0, 0x4A -'じ' = 0xF0, 0x4B -'ず' = 0xF0, 0x4C -'ぜ' = 0xF0, 0x4D -'ぞ' = 0xF0, 0x4E -'だ' = 0xF0, 0x4F -'ぢ' = 0xF0, 0x50 -'づ' = 0xF0, 0x51 -'で' = 0xF0, 0x52 -'ど' = 0xF0, 0x53 -'ば' = 0xF0, 0x59 -'び' = 0xF0, 0x5A -'ぶ' = 0xF0, 0x5B -'べ' = 0xF0, 0x5C -'ぼ' = 0xF0, 0x5D -'ガ' = 0xF0, 0x75 -'ギ' = 0xF0, 0x76 -'グ' = 0xF0, 0x77 -'ゲ' = 0xF0, 0x78 -'ゴ' = 0xF0, 0x79 -'ザ' = 0xF0, 0x7A -'ジ' = 0xF0, 0x7B -'ズ' = 0xF0, 0x7C -'ゼ' = 0xF0, 0x7D -'ゾ' = 0xF0, 0x7E -'ダ' = 0xF0, 0x7F -'ヂ' = 0xF0, 0x80 -'ヅ' = 0xF0, 0x81 -'デ' = 0xF0, 0x82 -'ド' = 0xF0, 0x83 -'バ' = 0xF0, 0x89 -'ビ' = 0xF0, 0x8A -'ブ' = 0xF0, 0x8B -'ベ' = 0xF0, 0x8C -'ボ' = 0xF0, 0x8D - -# hiragana or katakana with handakuten -'ぱ' = 0xF1, 0x59 -'ぴ' = 0xF1, 0x5A -'ぷ' = 0xF1, 0x5B -'ぺ' = 0xF1, 0x5C -'ぽ' = 0xF1, 0x5D -'パ' = 0xF1, 0x89 -'ピ' = 0xF1, 0x8A -'プ' = 0xF1, 0x8B -'ペ' = 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 - -# multi-text US symbols -'the' = 0xD1 -'you' = 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 diff --git a/charmap_menu.txt b/charmap_menu.txt deleted file mode 100644 index 7642e737b..000000000 --- a/charmap_menu.txt +++ /dev/null @@ -1,30 +0,0 @@ -# Menu HUD chars, only used in JP -# Char values used by text_menu_strings.h.in -'フ' = 0x00 -'ァ' = 0x01 -'イ' = 0x02 -'ル' = 0x03 -'セ' = 0x04 -'レ' = 0x05 -'ク' = 0x06 -'ト' = 0x07 -'を' = 0x08 -'コ' = 0x09 -'ピ' = 0x0A -'ー' = 0x0B -'す' = 0x0C -'る' = 0x0D -'け' = 0x0E -'マ' = 0x0F -'リ' = 0x10 -'オ' = 0x11 -'ス' = 0x12 -'ア' = 0x13 -'み' = 0x14 -'ど' = 0x15 -'の' = 0x16 -'?' = 0x17 -'サ' = 0x18 -'ウ' = 0x19 -'ン' = 0x1A -'ド' = 0x1B diff --git a/enhancements/reonucam.patch b/enhancements/reonucam.patch deleted file mode 100644 index 427e0ef07..000000000 --- a/enhancements/reonucam.patch +++ /dev/null @@ -1,543 +0,0 @@ -diff --git a/include/config/config_camera.h b/include/config/config_camera.h -index 5752ab85..a1585533 100644 ---- a/include/config/config_camera.h -+++ b/include/config/config_camera.h -@@ -33,6 +33,10 @@ - // Enables Puppy Camera 2, a rewritten camera that can be freely configured and modified. - // #define PUPPYCAM - -+// Enables Reonucam, a custom camera that aims to be a more feature-rich "aglabcam" that also uses less buttons. -+// An explanation the features can be seen here: https://www.youtube.com/watch?v=TQNkznX9Z3k (please note that the analog feature shown at the end is no longer present) -+#define REONUCAM -+ - // Note: Reonucam is available, but because we had no time to test it properly, it's included as a patch rather than being in the code by default. - // Run this command to apply the patch if you want to use it: - // tools/apply_patch.sh enhancements/reonucam.patch -@@ -70,3 +74,22 @@ - #ifndef FLYING_CAMERA_MODE - #define FLYING_CAMERA_MODE CAMERA_MODE_BEHIND_MARIO - #endif -+ -+// Reonucam overrides -+#ifdef REONUCAM -+ // Use course default mode -+ #ifndef USE_COURSE_DEFAULT_MODE -+ #define USE_COURSE_DEFAULT_MODE -+ #endif -+ -+ // Force camera mode to 8 Dir -+ #ifdef FORCED_CAMERA_MODE -+ #undef FORCED_CAMERA_MODE -+ #endif -+ #define FORCED_CAMERA_MODE CAMERA_MODE_8_DIRECTIONS -+ -+ // Disable vanilla cam processing -+ #ifdef ENABLE_VANILLA_CAM_PROCESSING -+ #undef ENABLE_VANILLA_CAM_PROCESSING -+ #endif -+#endif -diff --git a/include/text_strings.h.in b/include/text_strings.h.in -index c5ee3fa8..22b43a2f 100644 ---- a/include/text_strings.h.in -+++ b/include/text_strings.h.in -@@ -92,6 +92,15 @@ - #define TEXT_HUD_PRESS_L _("PRESS L TO SWITCH") - #endif - -+//Reonucam -+#ifdef REONUCAM -+#define TEXT_CAM_INFO_SLOWEST _("CAM SPEED: SLOWEST") -+#define TEXT_CAM_INFO_SLOW _("CAM SPEED: SLOW") -+#define TEXT_CAM_INFO_MEDIUM _("CAM SPEED: MEDIUM") -+#define TEXT_CAM_INFO_FAST _("CAM SPEED: FAST") -+#define TEXT_CAM_INFO_FASTEST _("CAM SPEED: FASTEST") -+#endif -+ - #if defined(VERSION_JP) || defined(VERSION_SH) - - /** -diff --git a/src/game/camera.c b/src/game/camera.c -index 819f235c..bdc07159 100644 ---- a/src/game/camera.c -+++ b/src/game/camera.c -@@ -74,6 +74,10 @@ - * - */ - -+#ifdef REONUCAM -+struct ReonucamState gReonucamState = { 2, FALSE, FALSE, FALSE, 0, 0, }; -+#endif -+ - // BSS - /** - * Stores Lakitu's position from the last frame, used for transitioning in next_lakitu_state() -@@ -452,6 +456,25 @@ CameraTransition sModeTransitions[] = { - extern u8 sDanceCutsceneIndexTable[][4]; - extern u8 sZoomOutAreaMasks[]; - -+#ifdef REONUCAM -+// Returns the camera speed based on the user's camera speed setting -+f32 set_camera_speed(void) { -+ switch(gReonucamState.speed) { -+ case 0: -+ return 0.5f; -+ case 1: -+ return 1; -+ case 2: -+ return 1.5f; -+ case 3: -+ return 2; -+ case 4: -+ return 3.5f; -+ } -+ return 0; -+} -+#endif -+ - /** - * Starts a camera shake triggered by an interaction - */ -@@ -871,9 +894,30 @@ s32 update_8_directions_camera(struct Camera *c, Vec3f focus, Vec3f pos) { - s16 pitch = look_down_slopes(camYaw); - f32 posY; - f32 focusY; -+#ifdef REONUCAM -+ f32 yOff; -+#else - f32 yOff = 125.f; -+#endif - f32 baseDist = 1000.f; - -+#ifdef REONUCAM -+ if (gMarioState->action & ACT_FLAG_SWIMMING) { -+ yOff = -125.f; -+ } else { -+ yOff = 125.f; -+ } -+ -+ if ((gPlayer1Controller->buttonDown & R_TRIG) && (gPlayer1Controller->buttonDown & U_CBUTTONS)) { -+ gReonucamState.keepCliffCam = 1; -+ pitch = DEGREES(60); -+ } else if (((gPlayer1Controller->buttonDown & U_CBUTTONS) || (gPlayer1Controller->buttonDown & R_TRIG)) && gReonucamState.keepCliffCam) { -+ pitch = DEGREES(60); -+ } else { -+ gReonucamState.keepCliffCam = 0; -+ } -+#endif -+ - sAreaYaw = camYaw; - calc_y_to_curr_floor(&posY, 1.f, 200.f, &focusY, 0.9f, 200.f); - focus_on_mario(focus, pos, posY + yOff, focusY + yOff, sLakituDist + baseDist, pitch, camYaw); -@@ -1115,13 +1159,60 @@ s32 snap_to_45_degrees(s16 angle) { - return angle; - } - -+#ifdef REONUCAM -+void reonucam_handler(void) { -+ // Get the camera speed based on the user's setting -+ f32 cameraSpeed = set_camera_speed(); -+ //45º rotations -+ if ((gPlayer1Controller->buttonPressed & L_CBUTTONS) && !(gPlayer1Controller->buttonDown & R_TRIG)) { -+ s8DirModeBaseYaw -= DEGREES(45); -+ } else if ((gPlayer1Controller->buttonPressed & R_CBUTTONS) && !(gPlayer1Controller->buttonDown & R_TRIG)) { -+ s8DirModeBaseYaw += DEGREES(45); -+ } -+ //Smooth rotation -+ if (gPlayer1Controller->buttonDown & R_TRIG) { -+ if (gPlayer1Controller->buttonDown & L_CBUTTONS) { -+ s8DirModeBaseYaw -= DEGREES(cameraSpeed); -+ } else if (gPlayer1Controller->buttonDown & R_CBUTTONS) { -+ s8DirModeBaseYaw += DEGREES(cameraSpeed); -+ } -+ gReonucamState.rButtonCounter++; // This increses whenever R is held. -+ } else { -+ if (gReonucamState.rButtonCounter > 0 && gReonucamState.rButtonCounter <= 5 && !((gPlayer1Controller->buttonDown & L_CBUTTONS) || (gPlayer1Controller->buttonDown & R_CBUTTONS) || (gMarioState->action & ACT_FLAG_SWIMMING_OR_FLYING))) { -+ // This centers the camera behind mario. It triggers when you let go of R in less than 5 frames. -+ s8DirModeYawOffset = 0; -+ s8DirModeBaseYaw = gMarioState->faceAngle[1]-0x8000; -+ gMarioState->area->camera->yaw = s8DirModeBaseYaw; -+ play_sound_rbutton_changed(); -+ } -+ gReonucamState.rButtonCounter = 0; -+ } -+ if (gPlayer1Controller->buttonPressed & R_TRIG) { -+ if (gReonucamState.rButtonCounter2 <= 5) { -+ set_cam_angle(CAM_ANGLE_MARIO); // Enter mario cam if R is pressed 2 times in less than 5 frames -+ gReonucamState.rButtonCounter2 = 6; -+ } else { -+ gReonucamState.rButtonCounter2 = 0; -+ } -+ } else { -+ gReonucamState.rButtonCounter2++; -+ } -+ if (gPlayer1Controller->buttonPressed & D_JPAD) { -+ s8DirModeBaseYaw = snap_to_45_degrees(s8DirModeBaseYaw); // Lock the camera to the nearest 45deg axis -+ } -+} -+#endif -+ - /** - * A mode that only has 8 camera angles, 45 degrees apart - */ - void mode_8_directions_camera(struct Camera *c) { - Vec3f pos; - s16 oldAreaYaw = sAreaYaw; -- -+#ifdef REONUCAM -+ reonucam_handler(); -+ radial_camera_input(c); -+#else - radial_camera_input(c); - - if (gPlayer1Controller->buttonPressed & R_CBUTTONS) { -@@ -1148,13 +1239,18 @@ void mode_8_directions_camera(struct Camera *c) { - s8DirModeYawOffset = snap_to_45_degrees(s8DirModeYawOffset); - } - #endif -- -+#endif - lakitu_zoom(400.f, 0x900); - c->nextYaw = update_8_directions_camera(c, c->focus, pos); -+#ifdef REONUCAM -+ set_camera_height(c, pos[1]); -+#endif - c->pos[0] = pos[0]; - c->pos[2] = pos[2]; - sAreaYawChange = sAreaYaw - oldAreaYaw; -+#ifndef REONUCAM - set_camera_height(c, pos[1]); -+#endif - } - - /** -@@ -2750,6 +2846,9 @@ void set_camera_mode(struct Camera *c, s16 mode, s16 frames) { - #ifndef ENABLE_VANILLA_CAM_PROCESSING - if (mode == CAMERA_MODE_8_DIRECTIONS) { - // Helps transition from any camera mode to 8dir -+#ifdef REONUCAM -+ s8DirModeBaseYaw = 0; -+#endif - s8DirModeYawOffset = snap_to_45_degrees(c->yaw); - } - #endif -@@ -2875,6 +2974,7 @@ void update_camera(struct Camera *c) { - OSTime first = osGetTime(); - OSTime colTime = collisionTime[perfIteration]; - #endif -+ - gCamera = c; - update_camera_hud_status(c); - if (c->cutscene == CUTSCENE_NONE -@@ -2885,14 +2985,23 @@ void update_camera(struct Camera *c) { - // Only process R_TRIG if 'fixed' is not selected in the menu - if (cam_select_alt_mode(CAM_SELECTION_NONE) == CAM_SELECTION_MARIO) { - if (gPlayer1Controller->buttonPressed & R_TRIG) { -+#ifdef REONUCAM -+ if (set_cam_angle(0) == CAM_ANGLE_MARIO) { -+ s8DirModeBaseYaw = snap_to_45_degrees(s8DirModeBaseYaw); -+ set_cam_angle(CAM_ANGLE_LAKITU); -+ } -+#else - if (set_cam_angle(0) == CAM_ANGLE_LAKITU) { - set_cam_angle(CAM_ANGLE_MARIO); - } else { - set_cam_angle(CAM_ANGLE_LAKITU); - } -+#endif - } - } -+#ifndef REONUCAM - play_sound_if_cam_switched_to_lakitu_or_mario(); -+#endif - } - - // Initialize the camera -@@ -4551,15 +4660,21 @@ void play_camera_buzz_if_c_sideways(void) { - } - - void play_sound_cbutton_up(void) { -+#ifndef REONUCAM - play_sound(SOUND_MENU_CAMERA_ZOOM_IN, gGlobalSoundSource); -+#endif - } - - void play_sound_cbutton_down(void) { -+#ifndef REONUCAM - play_sound(SOUND_MENU_CAMERA_ZOOM_OUT, gGlobalSoundSource); -+#endif - } - - void play_sound_cbutton_side(void) { -+#ifndef REONUCAM - play_sound(SOUND_MENU_CAMERA_TURN, gGlobalSoundSource); -+#endif - } - - void play_sound_button_change_blocked(void) { -@@ -4658,7 +4773,11 @@ void radial_camera_input(struct Camera *c) { - } - - // Zoom in / enter C-Up -+#ifdef REONUCAM -+ if ((gPlayer1Controller->buttonPressed & U_CBUTTONS) && !(gPlayer1Controller->buttonDown & R_TRIG)) { -+#else - if (gPlayer1Controller->buttonPressed & U_CBUTTONS) { -+#endif - if (gCameraMovementFlags & CAM_MOVE_ZOOMED_OUT) { - gCameraMovementFlags &= ~CAM_MOVE_ZOOMED_OUT; - play_sound_cbutton_up(); -@@ -4747,6 +4866,7 @@ void handle_c_button_movement(struct Camera *c) { - } - } - -+ - /** - * Zero the 10 cvars. - */ -@@ -5212,7 +5332,11 @@ void set_camera_mode_8_directions(struct Camera *c) { - if (c->mode != CAMERA_MODE_8_DIRECTIONS) { - c->mode = CAMERA_MODE_8_DIRECTIONS; - sStatusFlags &= ~CAM_FLAG_SMOOTH_MOVEMENT; -+#ifdef REONUCAM -+ s8DirModeBaseYaw = snap_to_45_degrees(s8DirModeBaseYaw); -+#else - s8DirModeBaseYaw = 0; -+#endif - s8DirModeYawOffset = 0; - } - } -diff --git a/src/game/camera.h b/src/game/camera.h -index 23872607..4ea5cef7 100644 ---- a/src/game/camera.h -+++ b/src/game/camera.h -@@ -90,6 +90,18 @@ - #define CAM_MODE_LAKITU_WAS_ZOOMED_OUT 0x02 - #define CAM_MODE_MARIO_SELECTED 0x04 - -+#ifdef REONUCAM -+struct ReonucamState { -+ u8 speed; -+ u8 waterCamOverride; -+ u8 flyingCamOverride; -+ u8 keepCliffCam; -+ u16 rButtonCounter; -+ u16 rButtonCounter2; -+}; -+extern struct ReonucamState gReonucamState; -+#endif -+ - enum CameraSelection { - CAM_SELECTION_NONE, - CAM_SELECTION_MARIO, -diff --git a/src/game/game_init.c b/src/game/game_init.c -index ad9fdb7d..26e1f000 100644 ---- a/src/game/game_init.c -+++ b/src/game/game_init.c -@@ -29,6 +29,9 @@ - #include "puppycam2.h" - #include "debug_box.h" -+#ifdef REONUCAM -+#include "camera.h" -+#endif - - // First 3 controller slots - struct Controller gControllers[3]; -@@ -751,6 +754,9 @@ void thread5_game_loop(UNUSED void *arg) { - - play_music(SEQ_PLAYER_SFX, SEQUENCE_ARGS(0, SEQ_SOUND_PLAYER), 0); - set_sound_mode(save_file_get_sound_mode()); -+#ifdef REONUCAM -+ gReonucamState.speed = save_file_get_camera_speed(); -+#endif - #ifdef WIDE - gConfig.widescreen = save_file_get_widescreen_mode(); - #endif -diff --git a/src/game/ingame_menu.c b/src/game/ingame_menu.c -index 28c80f34..37dc71c1 100644 ---- a/src/game/ingame_menu.c -+++ b/src/game/ingame_menu.c -@@ -63,6 +63,14 @@ void *languageTable[][3] = { - #endif - }; - -+#ifdef REONUCAM -+u8 textCamInfoSlowest[] = { TEXT_CAM_INFO_SLOWEST }; -+u8 textCamInfoSlow[] = { TEXT_CAM_INFO_SLOW }; -+u8 textCamInfoMedium[] = { TEXT_CAM_INFO_MEDIUM }; -+u8 textCamInfoFast[] = { TEXT_CAM_INFO_FAST}; -+u8 textCamInfoFastest[] = { TEXT_CAM_INFO_FASTEST }; -+#endif -+ - extern u8 gLastCompletedCourseNum; - extern u8 gLastCompletedStarNum; - -@@ -1455,6 +1463,48 @@ void reset_red_coins_collected(void) { - gRedCoinsCollected = 0; - } - -+#ifdef REONUCAM -+void render_reonucam_speed_setting(void) { -+ gSPDisplayList(gDisplayListHead++, dl_ia_text_begin); -+ gDPSetEnvColor(gDisplayListHead++, 255, 255, 255, gDialogTextAlpha); -+ switch (gReonucamState.speed) { -+ case 0: -+ print_generic_string(190, 20, textCamInfoSlowest); -+ break; -+ case 1: -+ print_generic_string(190, 20, textCamInfoSlow); -+ break; -+ case 2: -+ print_generic_string(190, 20, textCamInfoMedium); -+ break; -+ case 3: -+ print_generic_string(190, 20, textCamInfoFast); -+ break; -+ case 4: -+ print_generic_string(190, 20, textCamInfoFastest); -+ break; -+ } -+ gSPDisplayList(gDisplayListHead++, dl_ia_text_end); -+ -+ if (gPlayer1Controller->buttonPressed & R_JPAD) { -+ if (gReonucamState.speed < 4) { -+ gReonucamState.speed += 1; -+ } else { -+ gReonucamState.speed = 0; -+ } -+ save_file_set_camera_speed(gReonucamState.speed); -+ } else if (gPlayer1Controller->buttonPressed & L_JPAD) { -+ if (gReonucamState.speed > 0) { -+ gReonucamState.speed -= 1; -+ } else { -+ gReonucamState.speed = 4; -+ } -+ save_file_set_camera_speed(gReonucamState.speed); -+ } -+} -+#endif -+ -+ - void change_dialog_camera_angle(void) { - if (cam_select_alt_mode(0) == CAM_SELECTION_MARIO) { - gDialogCameraAngleIndex = CAM_SELECTION_MARIO; -@@ -1917,6 +1967,9 @@ s32 render_pause_courses_and_castle(void) { - } - #if defined(WIDE) && !defined(PUPPYCAM) - render_widescreen_setting(); -+#endif -+#ifdef REONUCAM -+ render_reonucam_speed_setting(); - #endif - if (gDialogTextAlpha < 250) { - gDialogTextAlpha += 25; -diff --git a/src/game/mario.c b/src/game/mario.c -index 757c7f0b..a998bac5 100644 ---- a/src/game/mario.c -+++ b/src/game/mario.c -@@ -1389,8 +1389,22 @@ void update_mario_inputs(struct MarioState *m) { - void set_submerged_cam_preset_and_spawn_bubbles(struct MarioState *m) { - f32 heightBelowWater; - s16 camPreset; -+#ifdef REONUCAM -+ // skip if not submerged -+ if ((m->action & ACT_GROUP_MASK) != ACT_GROUP_SUBMERGED) return; - -+ // R Trigger toggles camera mode override -+ if ((gPlayer1Controller->buttonPressed & R_TRIG) && (m->action & ACT_FLAG_SWIMMING)) { -+ gReonucamState.waterCamOverride ^= 1; -+ } -+ -+ // If override, set mode to 8 dir. Otherwise, use normal water processing -+ if (gReonucamState.waterCamOverride) { -+ if (m->area->camera->mode != CAMERA_MODE_8_DIRECTIONS) set_camera_mode(m->area->camera, CAMERA_MODE_8_DIRECTIONS, 1); -+ } else { -+#else - if ((m->action & ACT_GROUP_MASK) == ACT_GROUP_SUBMERGED) { -+#endif - heightBelowWater = (f32)(m->waterLevel - 80) - m->pos[1]; - camPreset = m->area->camera->mode; - -diff --git a/src/game/mario_actions_airborne.c b/src/game/mario_actions_airborne.c -index 13c2b626..c4b4f664 100644 ---- a/src/game/mario_actions_airborne.c -+++ b/src/game/mario_actions_airborne.c -@@ -1696,6 +1696,12 @@ s32 act_shot_from_cannon(struct MarioState *m) { - s32 act_flying(struct MarioState *m) { - s16 startPitch = m->faceAngle[0]; - -+#ifdef REONUCAM -+ if (gPlayer1Controller->buttonPressed & R_TRIG) { -+ gReonucamState.flyingCamOverride ^= 1; -+ } -+#endif -+ - if (m->input & INPUT_Z_PRESSED) { - if (m->area->camera->mode == FLYING_CAMERA_MODE) { - set_camera_mode(m->area->camera, m->area->camera->defMode, 1); -@@ -1710,9 +1716,17 @@ s32 act_flying(struct MarioState *m) { - return set_mario_action(m, ACT_FREEFALL, 0); - } - -+#ifdef REONUCAM -+ if (!gReonucamState.flyingCamOverride && m->area->camera->mode != FLYING_CAMERA_MODE) { -+ set_camera_mode(m->area->camera, FLYING_CAMERA_MODE, 1); -+ } else if (gReonucamState.flyingCamOverride && m->area->camera->mode != CAMERA_MODE_8_DIRECTIONS) { -+ set_camera_mode(m->area->camera, CAMERA_MODE_8_DIRECTIONS, 1); -+ } -+#else - if (m->area->camera->mode != FLYING_CAMERA_MODE) { - set_camera_mode(m->area->camera, FLYING_CAMERA_MODE, 1); - } -+#endif - - if (m->actionState == ACT_STATE_FLYING_SPIN) { - if (m->actionArg == ACT_ARG_FLYING_FROM_CANNON) { -diff --git a/src/game/save_file.c b/src/game/save_file.c -index 07f0faad..db76574b 100644 ---- a/src/game/save_file.c -+++ b/src/game/save_file.c -@@ -715,6 +715,19 @@ u32 save_file_get_sound_mode(void) { - return gSaveBuffer.menuData.soundMode; - } - -+#ifdef REONUCAM -+void save_file_set_camera_speed(u8 speed) { -+ gSaveBuffer.menuData.cameraSpeedSetting = speed; -+ gMainMenuDataModified = TRUE; -+ save_main_menu_data(); -+} -+ -+u8 save_file_get_camera_speed(void) { -+ return gSaveBuffer.menuData.cameraSpeedSetting; -+} -+ -+#endif -+ - void save_file_move_cap_to_default_location(void) { - if (save_file_get_flags() & SAVE_FLAG_CAP_ON_GROUND) { - switch (gSaveBuffer.files[gCurrSaveFileNum - 1][0].capLevel) { -diff --git a/src/game/save_file.h b/src/game/save_file.h -index a03dbafb..8ba8725f 100644 ---- a/src/game/save_file.h -+++ b/src/game/save_file.h -@@ -67,6 +67,9 @@ struct MainMenuSaveData { - #ifdef WIDE - u8 wideMode: 1; - #endif -+#ifdef REONUCAM -+ u8 cameraSpeedSetting: 3; -+#endif - - #if MULTILANG - u8 language: 2; -@@ -200,6 +203,10 @@ u32 save_file_get_sound_mode(void); - u32 save_file_get_widescreen_mode(void); - void save_file_set_widescreen_mode(u8 mode); - #endif -+#ifdef REONUCAM -+u8 save_file_get_camera_speed(void); -+void save_file_set_camera_speed(u8 speed); -+#endif - void save_file_move_cap_to_default_location(void); - - void disable_warp_checkpoint(void); diff --git a/include/config/config_game.h b/include/config/config_game.h index ede580bff..5df03c88e 100644 --- a/include/config/config_game.h +++ b/include/config/config_game.h @@ -71,22 +71,24 @@ // #define DIALOG_INDICATOR /** - * Include the English characters that were missing from US segment2 and the rumble pak texture if using rumble. - * J, Q, V, X, Z, ¨, !, !!, ?, &, %, ., and the beta key. - * [MAKE SURE TO INCLUDE EU AND JP/SH BASEROMS IN THE REPO TO OBTAIN THE ASSETS] - * If this is disabled, backup assets will be used. + * Adds support for multiple languages to the game. */ -// #define COMPLETE_EN_US_SEGMENT2 +// #define MULTILANG /** - * Removes multi-language cake screen. + * Toggles for individual languages. Only works when MULTILANG is enabled. + * Note that English will always be enabled. */ -#define EU_CUSTOM_CAKE_FIX +#define ENABLE_FRENCH +#define ENABLE_GERMAN +// #define ENABLE_JAPANESE +#define ENABLE_SPANISH /** - * Adds multiple languages to the game. Just a placeholder for the most part, because it only works with EU, and must be enabled with EU. + * This define enables support for Japanese characters even when multilang or Japanese is not enabled. + * Requires a Japanese baserom. */ -#define MULTILANG (0 || VERSION_EU) +// #define JAPANESE_CHARACTERS /** * Prevents infinite death loops by always restoring Mario's health when he's warped to any kind of warp while dead. diff --git a/include/config/config_safeguards.h b/include/config/config_safeguards.h index 6fb47fc08..8462ec10c 100644 --- a/include/config/config_safeguards.h +++ b/include/config/config_safeguards.h @@ -148,6 +148,17 @@ #define START_LEVEL LEVEL_CASTLE_GROUNDS #endif // !START_LEVEL +#ifndef MULTILANG + #undef ENABLE_FRENCH + #undef ENABLE_GERMAN + #undef ENABLE_JAPANESE + #undef ENABLE_SPANISH +#endif // !MULTILANG + +#ifdef ENABLE_JAPANESE + #define JAPANESE_CHARACTERS +#endif // ENABLE_JAPANESE + /***************** * config_goddard.h diff --git a/include/eu_translation.h b/include/eu_translation.h deleted file mode 100644 index ab04abfbe..000000000 --- a/include/eu_translation.h +++ /dev/null @@ -1,20 +0,0 @@ -#ifndef EU_TRANSLATION_H -#define EU_TRANSLATION_H - -// EU changes most text to arrays for each language. This define allows these -// differences to be combined. -#define LANGUAGE_ARRAY(cmd) cmd - -extern void *dialog_table_eu_en[]; -extern void *course_name_table_eu_en[]; -extern void *act_name_table_eu_en[]; - -extern void *dialog_table_eu_fr[]; -extern void *course_name_table_eu_fr[]; -extern void *act_name_table_eu_fr[]; - -extern void *dialog_table_eu_de[]; -extern void *course_name_table_eu_de[]; -extern void *act_name_table_eu_de[]; - -#endif // EU_TRANSLATION_H diff --git a/include/macros.h b/include/macros.h index f626a6f68..54a649dc9 100644 --- a/include/macros.h +++ b/include/macros.h @@ -12,6 +12,9 @@ #define GLUE(a, b) a ## b #define GLUE2(a, b) GLUE(a, b) +#define STRING(s) #s +#define STRING2(s) STRING(s) + // Avoid compiler warnings for unused variables. #ifdef __GNUC__ #define UNUSED __attribute__((unused)) diff --git a/include/segment_symbols.h b/include/segment_symbols.h index e664c475a..beebd1f44 100644 --- a/include/segment_symbols.h +++ b/include/segment_symbols.h @@ -106,12 +106,6 @@ DECLARE_SEGMENT(title_screen_bg_yay0) DECLARE_SEGMENT(debug_level_select_yay0) -#ifdef VERSION_EU -DECLARE_SEGMENT(translation_de_yay0) -DECLARE_SEGMENT(translation_en_yay0) -DECLARE_SEGMENT(translation_fr_yay0) -#endif - //added for compatibility DECLARE_SEGMENT(segment2_mio0) @@ -143,11 +137,26 @@ DECLARE_SEGMENT(title_screen_bg_mio0) DECLARE_SEGMENT(debug_level_select_mio0) -#ifdef VERSION_EU -DECLARE_SEGMENT(translation_de_mio0) +#ifdef MULTILANG +DECLARE_SEGMENT(translation_en_yay0) DECLARE_SEGMENT(translation_en_mio0) +#ifdef ENABLE_FRENCH +DECLARE_SEGMENT(translation_fr_yay0) DECLARE_SEGMENT(translation_fr_mio0) #endif +#ifdef ENABLE_GERMAN +DECLARE_SEGMENT(translation_de_yay0) +DECLARE_SEGMENT(translation_de_mio0) +#endif +#ifdef ENABLE_JAPANESE +DECLARE_SEGMENT(translation_jp_yay0) +DECLARE_SEGMENT(translation_jp_mio0) +#endif +#ifdef ENABLE_SPANISH +DECLARE_SEGMENT(translation_es_yay0) +DECLARE_SEGMENT(translation_es_mio0) +#endif +#endif #endif diff --git a/include/text_menu_strings.h.in b/include/text_menu_strings.h.in deleted file mode 100644 index 3ac477eb8..000000000 --- a/include/text_menu_strings.h.in +++ /dev/null @@ -1,18 +0,0 @@ -#ifndef TEXT_MENU_STRINGS_H -#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 -// uses char values from charmap_menu.txt - -/** - * File Select JP HUD Text - */ -#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 // TEXT_MENU_STRINGS_H diff --git a/include/text_strings.h.in b/include/text_strings.h.in deleted file mode 100644 index 9380b92f9..000000000 --- a/include/text_strings.h.in +++ /dev/null @@ -1,537 +0,0 @@ -#ifndef TEXT_STRINGS_H -#define TEXT_STRINGS_H - -#include "text_menu_strings.h" - -#if defined(PUPPYCAM) -#define NC_CAMX_EN _("Camera Sensitivity") -#define NC_INVERTX_EN _("Invert Camera") -#define NC_CAMC_EN _("Camera Auto Turn") -#define NC_ANALOGUE_EN _("Analogue Camera") -#define NC_SCHEME_EN _("Control Scheme") -#define OPTION_ENABLED_EN _("Enabled") -#define OPTION_DISABLED_EN _("Disabled") -#define OPTION_SCHEME1_EN _("Double Tap") -#define OPTION_SCHEME2_EN _("Single Press") -#define OPTION_SCHEME3_EN _("Classic") -#define OPTION_LANGUAGE_EN _("Language") -#define NC_WIDE_EN _("Widescreen") -#define NC_HIGHLIGHT_L _(">") -#define NC_HIGHLIGHT_R _("<") -#define NC_BUTTON_EN _("[R]: Options") -#define NC_BUTTON2_EN _("[R]: Return") -#define NC_OPTION_EN _("OPTIONS") - -#if MULTILANG -#define NC_CAMX_FR _("Sensibilite") -#define NC_INVERTX_FR _("Camera invertir") -#define NC_CAMC_FR _("Vitesse de Centrage") -#define NC_ANALOGUE_FR _("Camera Analogue") -#define NC_SCHEME_FR _("Control Scheme") -#define OPTION_ENABLED_FR _("Active") -#define OPTION_DISABLED_FR _("Desactive") -#define OPTION_SCHEME1_FR _("Double Tap") -#define OPTION_SCHEME2_FR _("Single Press") -#define OPTION_SCHEME3_FR _("Classic") -#define OPTION_LANGUAGE_FR _("Language") -#define NC_WIDE_FR _("Widescreen") -#define NC_BUTTON_FR _("[R]: Options") -#define NC_BUTTON2_FR _("[R]: Retournez") -#define NC_OPTION_FR _("OPTIONS") - -#define NC_CAMX_DE _("Camera Sensitivity") -#define NC_INVERTX_DE _("Invert Camera") -#define NC_CAMC_DE _("Camera Centre Speed") -#define NC_ANALOGUE_DE _("Analogue Camera") -#define NC_SCHEME_DE _("Control Scheme") -#define OPTION_ENABLED_DE _("Enabled") -#define OPTION_DISABLED_DE _("Disabled") -#define OPTION_SCHEME1_DE _("Double Tap") -#define OPTION_SCHEME2_DE _("Single Press") -#define OPTION_SCHEME3_DE _("Classic") -#define OPTION_LANGUAGE_DE _("Language") -#define NC_WIDE_DE _("Widescreen") -#define NC_BUTTON_DE _("[R]: Options") -#define NC_BUTTON2_DE _("[R]: Return") -#define NC_OPTION_DE _("OPTIONS") -#endif -#endif - -/** - * Global Symbols - */ -#define TEXT_ZERO _("0") -#define TEXT_COIN _("$") -#define TEXT_STAR _("★") -#define TEXT_COIN_X _("$×") -#define TEXT_STAR_X _("★×") -#define TEXT_VARIABLE_X _("×") -#define TEXT_UNFILLED_STAR _("☆") - -/** - * Global Text - */ -// File Select -#define TEXT_NEW _("NEW") // New File Text -#define TEXT_4DASHES _("----") // Used in Score File Menu - -// Ingame Menu -#define TEXT_PAUSE _("PAUSE") // Pause text, Castle Courses -#define TEXT_HUD_CONGRATULATIONS _("CONGRATULATIONS") // Course Complete Text, Bowser Courses - -//Widescreen stuff -#if defined(WIDE) && !defined(PUPPYCAM) -#define TEXT_HUD_CURRENT_RATIO_43 _("ASPECT RATIO: 4:3") -#define TEXT_HUD_CURRENT_RATIO_169 _("ASPECT RATIO: 16:9") -#define TEXT_HUD_PRESS_L _("PRESS L TO SWITCH") -#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 -#define TEXT_SELECT_FILE TEXT_JPHUD_SELECT_FILE -#define TEXT_CHECK_FILE TEXT_JPHUD_CHECK_FILE -#define TEXT_COPY_FILE TEXT_JPHUD_COPY_FILE -#define TEXT_ERASE_FILE TEXT_JPHUD_ERASE_FILE -#define TEXT_SOUND_SELECT TEXT_JPHUD_SOUND_SELECT - -#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 _("マリオAをけしました") - -/** - * Menus Text (Pause, Course Completed) - */ -// Main Courses -#define TEXT_COURSE _("コース") -#define TEXT_MYSCORE _("マイスコア") -#define TEXT_CONTINUE _("つづけて マリオする?") -#define TEXT_EXIT_COURSE _("コースからでる?") -#define TEXT_CAMERA_ANGLE_R _("Rボタンのカメラきりかえ") - -// Camera Options -#define TEXT_LAKITU_MARIO _("ジュゲム↔マリオ") -#define TEXT_LAKITU_STOP _("ジュゲム↔ストップ") -#define TEXT_NORMAL_UPCLOSE _("(おすすめ)(リアル)") -#define TEXT_NORMAL_FIXED _("(おすすめ)(とまる)") - -// Course Completed Misc Text -#define TEXT_CATCH _("キャッチ!") -#define TEXT_CLEAR _("クリア!") -#define TEXT_HUD_HI_SCORE _("HISCORE") - -// Save Options -#define TEXT_SAVE_AND_CONTINUE _("セーブしてつづける?") -#define TEXT_SAVE_AND_QUIT _("セーブしておわる?") -#define TEXT_CONTINUE_WITHOUT_SAVING _("セーブしないでつづける?") - -/** - * Ending Peach cutscene text. - */ -#define TEXT_FILE_MARIO_EXCLAMATION _("マリオ!!") -#define TEXT_POWER_STARS_RESTORED _("おしろにスターが もどったのね") -#define TEXT_THANKS_TO_YOU _("みんな あなたのおかげだわ!") -#define TEXT_THANK_YOU_MARIO _("ありがとう マリオ") -#define TEXT_SOMETHING_SPECIAL _("なにか おれいをしなくちゃ・・") -#define TEXT_LISTEN_EVERYBODY _("さあ みんな") -#define TEXT_LETS_HAVE_CAKE _("おいしいケーキを やきましょう") -#define TEXT_FOR_MARIO _("マリオの ために・・・") -#define TEXT_FILE_MARIO_QUESTION _("マリオ?") - -#endif - -#if defined(VERSION_US) || defined(VERSION_EU) - -/** - * File Select Text - */ -// Main Screens -#define TEXT_MARIO _("MARIO") // View Score Menu -#define TEXT_SELECT_FILE _("SELECT FILE") -#define TEXT_CHECK_FILE _("CHECK FILE") -#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") -#define TEXT_FILE_MARIO_D _("MARIO D") - -// Menu Options -#define TEXT_SCORE _("SCORE") -#define TEXT_COPY _("COPY") -#define TEXT_ERASE _("ERASE") - -// Sound Options -#define TEXT_STEREO _("STEREO") -#define TEXT_MONO _("MONO") -#define TEXT_HEADSET _("HEADSET") - -// Misc Menu Text -#define TEXT_SAVED_DATA_EXISTS _("SAVED DATA EXITS") // Misspell -#define TEXT_NO_SAVED_DATA_EXISTS _("NO SAVED DATA EXISTS") - -// Inside a Menu -#define TEXT_RETURN _("RETURN") -#define TEXT_CHECK_SCORE _("CHECK SCORE") -#define TEXT_COPY_FILE_BUTTON _("COPY FILE") -#define TEXT_ERASE_FILE_BUTTON _("ERASE FILE") - -// Score Menu -#define TEXT_HI_SCORE _("HI SCORE") -#define TEXT_MY_SCORE _("MY SCORE") -// Score Mario Text ("☺" is the Mario face defined in the US/EU menu char table) -#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 _("COPY IT TO WHERE?") -#define TEXT_COPYING_COMPLETED _("COPYING COMPLETED") -#define TEXT_NO_FILE_TO_COPY_FROM _("NO EMPTY FILE") - -// Erase Menu -#define TEXT_SURE _("SURE?") -#define TEXT_YES _("YES") -#define TEXT_NO _("NO") -#define TEXT_FILE_MARIO_A_JUST_ERASED _("MARIO A JUST ERASED") - -/** - * Menus Text (Pause, Course Completed) - */ -// Main Courses -#define TEXT_COURSE _("COURSE") -#define TEXT_MYSCORE _("MYSCORE") -#define TEXT_CONTINUE _("CONTINUE") -#define TEXT_EXIT_COURSE _("EXIT COURSE") -#ifndef VERSION_EU // "R" text is different in EU -#define TEXT_CAMERA_ANGLE_R _("SET CAMERA ANGLE WITH R") -#endif - -// Camera Options -#define TEXT_LAKITU_MARIO _("LAKITU + MARIO") -#define TEXT_LAKITU_STOP _("LAKITU + STOP") -#define TEXT_NORMAL_UPCLOSE __("(NORMAL)(UP-CLOSE)") -#define TEXT_NORMAL_FIXED __("(NORMAL)(FIXED)") - -// Course Completed Misc Text -#define TEXT_CATCH _("CATCH") -#define TEXT_CLEAR _("CLEAR") -#define TEXT_HUD_HI_SCORE _("HI SCORE") - -// Save Options -#define TEXT_SAVE_AND_CONTINUE _("SAVE & CONTINUE") -#define TEXT_SAVE_AND_QUIT _("SAVE & QUIT") -#define TEXT_CONTINUE_WITHOUT_SAVING _("CONTINUE, DON'T SAVE") - -/** - * Ending Peach cutscene text. - */ -#define TEXT_FILE_MARIO_EXCLAMATION _("Mario!") -#define TEXT_POWER_STARS_RESTORED __("The power of the Stars is restored to the castle...") -#define TEXT_THANKS_TO_YOU __("...and it's all thanks to you!") -#define TEXT_THANK_YOU_MARIO __("Thank you, Mario!") -#define TEXT_SOMETHING_SPECIAL __("We have to do something special for you...") -#define TEXT_LISTEN_EVERYBODY _("Listen, everybody,") -#define TEXT_LETS_HAVE_CAKE _("let's bake a delicious cake...") -#define TEXT_FOR_MARIO _("...for Mario...") -#define TEXT_FILE_MARIO_QUESTION _("Mario!") - -#endif - - -#define TEXT_ENGLISH _("ENGLISH") -#define TEXT_FRENCH _("FRANÇAIS") -#define TEXT_GERMAN _("DEUTSCH") - -#if MULTILANG - -/** - * File Select Text - */ -#define TEXT_RETURN_FR _("RETOUR") -#define TEXT_RETURN_DE _("ZURÜCK") - -#define TEXT_CHECK_SCORE_FR _("SCORE") -#define TEXT_CHECK_SCORE_DE _("LEISTUNG") - -#define TEXT_COPY_FILE_FR _("COPIER") -#define TEXT_COPY_FILE_DE _("KOPIEREN") - -#define TEXT_ERASE_FILE_FR _("EFFACER") -#define TEXT_ERASE_FILE_DE _("LÖSCHEN") - -#define TEXT_SELECT_FILE_FR _("CHOISIR FICHIER") -#define TEXT_SELECT_FILE_DE _("WwHLE SPIEL") - -#define TEXT_SCORE_FR _("SCORE") -#define TEXT_SCORE_DE _("LEISTUNG") - -#define TEXT_COPY_FR _("COPIER") -#define TEXT_COPY_DE _("KOPIEREN") - -#define TEXT_ERASE_FR _("EFFACER") -#define TEXT_ERASE_DE _("LÖSCHEN") - -#define TEXT_OPTION _("OPTION") // new in EU -#define TEXT_OPTION_FR _("OPTION") -#define TEXT_OPTION_DE _("OPTIONEN") - -#define TEXT_CHECK_FILE_FR _("VOIR SCORE") -#define TEXT_CHECK_FILE_DE _("VON WELCHEM SPIEL") - -#define TEXT_NO_SAVED_DATA_EXISTS_FR _("AUCUNE SAUVEGARDE DISPONIBLE") -#define TEXT_NO_SAVED_DATA_EXISTS_DE _("KEIN SPIEL VORHANDEN") - -#define TEXT_COPY_FILE_BUTTON_FR _("COPIER FICHIER") -#define TEXT_COPY_FILE_BUTTON_DE _("SPIEL KOPIEREN") - -#define TEXT_COPY_IT_TO_WHERE_FR _("COPIER SUR?") -#define TEXT_COPY_IT_TO_WHERE_DE _("WOHIN KOPIEREN?") - -#define TEXT_COPYING_COMPLETED_FR _("COPIE ACHEVEÉ") -#define TEXT_COPYING_COMPLETED_DE _("SPIEL KOPIERT") - -#define TEXT_SAVED_DATA_EXISTS_FR _("SAVEGARDE EXISTANTE") -#define TEXT_SAVED_DATA_EXISTS_DE _("BEREITS BELEGT") - -#define TEXT_NO_FILE_TO_COPY_FROM_FR _("AUCUN FICHIER VIDE") -#define TEXT_NO_FILE_TO_COPY_FROM_DE _("KEIN PLATZ VORHANDEN") - -#define TEXT_YES_FR _("OUI") -#define TEXT_YES_DE _("JA") - -#define TEXT_NO_FR _("NON") -#define TEXT_NO_DE _("NEIN") - -#define TEXT_ERASE_FILE_BUTTON_FR _("EFFACER FICHIER") -#define TEXT_ERASE_FILE_BUTTON_DE _("SPIEL LxSCHEN") - -#define TEXT_SURE_FR _("OK?") -#define TEXT_SURE_DE _("SICHER?") - -#define TEXT_FILE_MARIO_A_JUST_ERASED_FR _("MARIO A EFFACÉ") -#define TEXT_FILE_MARIO_A_JUST_ERASED_DE _("MARIO A GELÖSCHT") - -#define TEXT_SOUND_SELECT_FR _("SON") -#define TEXT_SOUND_SELECT_DE _("SOUND") - -#define TEXT_LANGUAGE_SELECT _("LANGUAGE SELECT") // new in EU -#define TEXT_LANGUAGE_SELECT_FR _("SELECTION LANGUE") -#define TEXT_LANGUAGE_SELECT_DE _("WwHLE SPRACHE") - -#define TEXT_STEREO_FR _("STÉRÉO") -#define TEXT_MONO_FR _("MONO") -#define TEXT_HEADSET_FR _("CASQUE") - -#define TEXT_STEREO_DE _("STEREO") -#define TEXT_MONO_DE _("MONO") -#define TEXT_HEADSET_DE _("PHONES") - -#define TEXT_HI_SCORE_FR _("MEILLEUR SCORE") -#define TEXT_HI_SCORE_DE _("BESTLEISTUNG") - -#define TEXT_MY_SCORE_FR _("MON SCORE") -#define TEXT_MY_SCORE_DE _("LEISTUNG") - -#define TEXT_NEW_FR _("VIDE") -#define TEXT_NEW_DE _("FREI") - - -/** - * Menus Text (Pause, Course Completed) - */ -// Main Courses -// English, "R" text is different -#define TEXT_CAMERA_ANGLE_R _("SET CAMERA ANGLE WITH [R]") -// French -#define TEXT_COURSE_FR _("NIVEAU") -#define TEXT_MY_SCORE_FR _("MON SCORE") -#define TEXT_CONTINUE_FR _("CONTINUER") -#define TEXT_EXIT_COURSE_FR _("QUITTER NIVEAU") -#define TEXT_CAMERA_ANGLE_R_FR _("RÉGLAGE CAMÉRA AVEC [R]") -// German -#define TEXT_COURSE_DE _("KURS") -#define TEXT_MY_SCORE_DE _("LEISTUNG") -#define TEXT_CONTINUE_DE _("WEITER") -#define TEXT_EXIT_COURSE_DE _("KURS VERLASSEN") -#define TEXT_CAMERA_ANGLE_R_DE _("KAMERA MIT [R] VERSTELLEN") - -// Camera Options -// French -#define TEXT_NORMAL_UPCLOSE_FR __("(NORMAL)(GROS-PLAN)") -#define TEXT_NORMAL_FIXED_FR __("(NORMAL)(FIXE)") -// German -#define TEXT_NORMAL_UPCLOSE_DE __("(NORMAL)(WEIT-ZOOM)") -#define TEXT_NORMAL_FIXED_DE __("(NORMAL)(STATIV)") - -// Course Completed Misc Text -// French -#define TEXT_HUD_HI_SCORE_FR _("MEILLEUR SCORE") -#define TEXT_HUD_CONGRATULATIONS_FR _("FELICITATIONS") -// German -#define TEXT_HUD_HI_SCORE_DE _("BESTLEISTUNG") -#define TEXT_HUD_CONGRATULATIONS_DE _("GRATULATION") - -// Save Options -// French -#define TEXT_SAVE_AND_CONTINUE_FR _("SAUVEGARDER & CONTINUER") -#define TEXT_SAVE_AND_QUIT_FR _("SAUVEGARDER & QUITTER") -#define TEXT_CONTINUE_WITHOUT_SAVING_FR _("CONTINUER SANS SAUVEGARDER") -// German -#define TEXT_SAVE_AND_CONTINUE_DE _("SPEICHERN & WEITER") -#define TEXT_SAVE_AND_QUIT_DE _("SPEICHERN & ENDE") -#define TEXT_CONTINUE_WITHOUT_SAVING_DE _("WEITER OHNE ZU SPEICHERN") - -/** - * Ending Peach cutscene text. - */ -// French -#define TEXT_POWER_STARS_RESTORED_FR _("Grâce aux étoiles, le château a retrouvé ses pouvoirs...") -#define TEXT_THANKS_TO_YOU_FR _("...et ceci grâce à toi!") -#define TEXT_THANK_YOU_MARIO_FR _("Merci, Mario!") -#define TEXT_SOMETHING_SPECIAL_FR _("Tu mérites une récompense...") -#define TEXT_COME_ON_EVERYBODY_FR _("Venez les amis...") -#define TEXT_LETS_HAVE_CAKE_FR _("Allons préparer un délicieux gâteau...") -#define TEXT_FOR_MARIO_FR _("...pour Mario...") -// German -#define TEXT_POWER_STARS_RESTORED_DE _("Die Macht der Sterne ruht wieder sicher im Schloss...") -#define TEXT_THANKS_TO_YOU_DE _("...und alles dank Deiner Hilfe!") -#define TEXT_THANK_YOU_MARIO_DE _("Vielen Dank, Mario!") -#define TEXT_SOMETHING_SPECIAL_DE _("Wir haben eine Überraschung für Dich...") -#define TEXT_COME_ON_EVERYBODY_DE _("Hört alle her...") -#define TEXT_LETS_HAVE_CAKE_DE _("Laßt uns einen leckeren Kuchen backen...") -#define TEXT_FOR_MARIO_DE _("...für Mario...") - -/** - * Course Table names for Score Menu Save view - */ -#define TEXT_MENU_BOB _(" 1 BOB-OMB BATTLEFIELD") -#define TEXT_MENU_WF _(" 2 WHOMP'S FORTRESS") -#define TEXT_MENU_JRB _(" 3 JOLLY ROGER BAY") -#define TEXT_MENU_CCM _(" 4 COOL, COOL MOUNTAIN") -#define TEXT_MENU_BBH _(" 5 BIG BOO'S HAUNT") -#define TEXT_MENU_HMC _(" 6 HAZY MAZE CAVE") -#define TEXT_MENU_LLL _(" 7 LETHAL LAVA LAND") -#define TEXT_MENU_SSL _(" 8 SHIFTING SAND LAND") -#define TEXT_MENU_DDD _(" 9 DIRE, DIRE DOCKS") -#define TEXT_MENU_SL _("10 SNOWMAN'S LAND") -#define TEXT_MENU_WDW _("11 WET-DRY WORLD") -#define TEXT_MENU_TTM _("12 TALL, TALL MOUNTAIN") -#define TEXT_MENU_THI _("13 TINY-HUGE ISLAND") -#define TEXT_MENU_TTC _("14 TICK TOCK CLOCK") -#define TEXT_MENU_RR _("15 RAINBOW RIDE") -#define TEXT_MENU_BITDW _(" BOWSER IN THE DARK WORLD") -#define TEXT_MENU_BITFS _(" BOWSER IN THE FIRE SEA") -#define TEXT_MENU_BITS _(" BOWSER IN THE SKY") -#define TEXT_MENU_PSS _(" THE PRINCESS'S SECRET SLIDE") -#define TEXT_MENU_COTMC _(" CAVERN OF THE METAL CAP") -#define TEXT_MENU_TOTWC _(" TOWER OF THE WING CAP") -#define TEXT_MENU_VCUTM _(" VANISH CAP UNDER THE MOAT") -#define TEXT_MENU_WMOTR _(" WING MARIO OVER THE RAINBOW") -#define TEXT_MENU_SA _(" THE SECRET AQUARIUM") -#define TEXT_MENU_NONE _("") -#define TEXT_MENU_STARS _(" CASTLE SECRET STARS") - -#define TEXT_MENU_BOB_FR _(" 1 BATAILLE DE BOB-OMB") -#define TEXT_MENU_WF_FR _(" 2 FORTERESSE DE WHOMP") -#define TEXT_MENU_JRB_FR _(" 3 BAIE DES PIRATES") -#define TEXT_MENU_CCM_FR _(" 4 MONTAGNE GLA-GLA") -#define TEXT_MENU_BBH_FR _(" 5 MANOIR DE BIG BOO") -#define TEXT_MENU_HMC_FR _(" 6 CAVERNE BRUMEUSE") -#define TEXT_MENU_LLL_FR _(" 7 LAVES FATALES") -#define TEXT_MENU_SSL_FR _(" 8 SABLES TROP MOUVANTS") -#define TEXT_MENU_DDD_FR _(" 9 AFFREUX BASSIN") -#define TEXT_MENU_SL_FR _("10 CHEZ LE ROI DES NEIGES") -#define TEXT_MENU_WDW_FR _("11 MONDE TREMPE-SECHE") -#define TEXT_MENU_TTM_FR _("12 TROP HAUTE MONTAGNE") -#define TEXT_MENU_THI_FR _("13 ILE GRANDS-PETITS") -#define TEXT_MENU_TTC_FR _("14 HORLOGE TIC-TAC") -#define TEXT_MENU_RR_FR _("15 COURSE ARC-EN-CIEL") -#define TEXT_MENU_BITDW_FR _(" BOWSER DES TENEBRES") -#define TEXT_MENU_BITFS_FR _(" BOWSER DES LAVES") -#define TEXT_MENU_BITS_FR _(" BOWSER DES CIEUX") -#define TEXT_MENU_PSS_FR _(" GLISSADE DE LA PRINCESSE") -#define TEXT_MENU_COTMC_FR _(" MINE DES CASQUETTES-METAL") -#define TEXT_MENU_TOTWC_FR _(" INTERRUPTEUR DE LA TOUR AILEE") -#define TEXT_MENU_VCUTM_FR _(" INVISIBLE SOUS LES DOUVES") -#define TEXT_MENU_WMOTR_FR _(" AU-DELA DE L'ARC-EN-CIEL") -#define TEXT_MENU_SA_FR _(" AQUARIUM SECRET") -#define TEXT_MENU_NONE_FR _("") -#define TEXT_MENU_STARS_FR _(" ETOILES SECRETES") - -#define TEXT_MENU_BOB_DE _(" 1 BOB-OMBS BOMBENBERG") -#define TEXT_MENU_WF_DE _(" 2 WUMMPS WUCHTWALL") -#define TEXT_MENU_JRB_DE _(" 3 PIRATENBUCHT PANIK") -#define TEXT_MENU_CCM_DE _(" 4 BIBBERBERG BOB") -#define TEXT_MENU_BBH_DE _(" 5 BIG BOOS BURG") -#define TEXT_MENU_HMC_DE _(" 6 GRÜNE GIFTGROTTE") -#define TEXT_MENU_LLL_DE _(" 7 LAVA LAGUNE") -#define TEXT_MENU_SSL_DE _(" 8 WOBIWABA WÜSTE") -#define TEXT_MENU_DDD_DE _(" 9 WILDE WASSERWERFT") -#define TEXT_MENU_SL_DE _("10 FROSTBEULEN FRUST") -#define TEXT_MENU_WDW_DE _("11 ATLANTIS AQUARIA") -#define TEXT_MENU_TTM_DE _("12 FLIEGENPILZ FIASKO") -#define TEXT_MENU_THI_DE _("13 GULLIVER GUMBA") -#define TEXT_MENU_TTC_DE _("14 TICK TACK TRAUMA") -#define TEXT_MENU_RR_DE _("15 REGENBOGEN RASEREI") -#define TEXT_MENU_BITDW_DE _(" BOWSERS SCHATTENWELT") -#define TEXT_MENU_BITFS_DE _(" BOWSERS LAVASEE") -#define TEXT_MENU_BITS_DE _(" BOWSERS LUFTSCHLOSS") -#define TEXT_MENU_PSS_DE _(" TOADSTOOLS RUTSCHBAHN") -#define TEXT_MENU_COTMC_DE _(" GRÜNER SCHALTERPALAST") -#define TEXT_MENU_TOTWC_DE _(" ROTER SCHALTERPALAST") -#define TEXT_MENU_VCUTM_DE _(" BLAUER SCHALTERPALAST") -#define TEXT_MENU_WMOTR_DE _(" REGENBOGEN FEUERWERK") -#define TEXT_MENU_SA_DE _(" VERSTECKTES AQUARIUM") -#define TEXT_MENU_NONE_DE _("") -#define TEXT_MENU_STARS_DE _(" GEHEIME STERNE") -#endif // VERSION_EU - -#endif // TEXT_STRINGS_H diff --git a/levels/ending/header.h b/levels/ending/header.h index 4725123f5..10c0e6755 100644 --- a/levels/ending/header.h +++ b/levels/ending/header.h @@ -8,13 +8,6 @@ extern const GeoLayout ending_geo_area_1[]; // leveldata extern const Gfx dl_cake_end_screen[]; -#ifndef EU_CUSTOM_CAKE_FIX -extern const Gfx dl_cake_end_screen_eu_english[]; -extern const Gfx dl_cake_end_screen_eu_french[]; -extern const Gfx dl_cake_end_screen_eu_german[]; -#else -extern const Gfx dl_cake_end_screen_eu_fix[]; -#endif // script extern const LevelScript level_ending_entry[]; diff --git a/levels/ending/leveldata.c b/levels/ending/leveldata.c index 7d4cb3618..cb483fb09 100644 --- a/levels/ending/leveldata.c +++ b/levels/ending/leveldata.c @@ -6,255 +6,6 @@ #include "make_const_nonconst.h" -#ifdef VERSION_EU -#include "levels/ending/cake_eu.inc.c" - -#ifndef EU_CUSTOM_CAKE_FIX -// 0x07023000 - 0x07023FFF -ALIGNED8 static const Texture cake_end_texture_eu_35_thank_you[] = { -#include "levels/ending/eu_023000.rgba16.inc.c" -}; - -// 0x07024000 - 0x07024FFF -ALIGNED8 static const Texture cake_end_texture_eu_36_merci[] = { -#include "levels/ending/eu_024000.rgba16.inc.c" -}; - -// 0x07025000 - 0x07025FFF -ALIGNED8 static const Texture cake_end_texture_eu_37_vrelen_dank[] = { -#include "levels/ending/eu_025000.rgba16.inc.c" -}; - -// 0x07026000 - 0x07026FFF -ALIGNED8 static const Texture cake_end_texture_eu_38_the_end[] = { -#include "levels/ending/eu_026000.rgba16.inc.c" -}; - -// 0x07027000 - 0x07027FFF -ALIGNED8 static const Texture cake_end_texture_eu_39_fin[] = { -#include "levels/ending/eu_027000.rgba16.inc.c" -}; - -// 0x07028000 - 0x07028FFF -ALIGNED8 static const Texture cake_end_texture_eu_40_ende[] = { -#include "levels/ending/eu_028000.rgba16.inc.c" -}; -#endif // !EU_CUSTOM_CAKE_FIX - -// 0x07029000 - 0x070296D8 -const Gfx dl_cake_end_screen[] = { - gsDPPipeSync(), - gsDPSetCycleType(G_CYC_COPY), - gsDPSetTexturePersp(G_TP_NONE), - gsDPSetRenderMode(G_RM_NOOP, G_RM_NOOP2), - 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), - gsDPTileSync(), - gsDPSetTile(G_IM_FMT_RGBA, G_IM_SIZ_16b, 16, 0, G_TX_RENDERTILE, 0, G_TX_CLAMP, 5, G_TX_NOLOD, G_TX_CLAMP, 6, G_TX_NOLOD), - gsDPSetTileSize(0, 0, 0, (64 - 1) << G_TEXTURE_IMAGE_FRAC, (32 - 1) << G_TEXTURE_IMAGE_FRAC), - gsDPSetTextureImage(G_IM_FMT_RGBA, G_IM_SIZ_16b, 1, cake_end_texture_eu_0), - gsDPLoadSync(), - gsDPLoadBlock(G_TX_LOADTILE, 0, 0, 64 * 32 - 1, CALC_DXT(64, G_IM_SIZ_16b_BYTES)), - gsSPTextureRectangle(0 << 2, 8 << 2, (0 + 63) << 2, (8 + 31) << 2, G_TX_RENDERTILE, 0, 0, 4 << 10, 1 << 10), - gsDPSetTextureImage(G_IM_FMT_RGBA, G_IM_SIZ_16b, 1, cake_end_texture_eu_1), - gsDPLoadSync(), - gsDPLoadBlock(G_TX_LOADTILE, 0, 0, 64 * 32 - 1, CALC_DXT(64, G_IM_SIZ_16b_BYTES)), - gsSPTextureRectangle(64 << 2, 8 << 2, (64 + 63) << 2, (8 + 31) << 2, G_TX_RENDERTILE, 0, 0, 4 << 10, 1 << 10), - gsDPSetTextureImage(G_IM_FMT_RGBA, G_IM_SIZ_16b, 1, cake_end_texture_eu_2), - gsDPLoadSync(), - gsDPLoadBlock(G_TX_LOADTILE, 0, 0, 64 * 32 - 1, CALC_DXT(64, G_IM_SIZ_16b_BYTES)), - gsSPTextureRectangle(128 << 2, 8 << 2, (128 + 63) << 2, (8 + 31) << 2, G_TX_RENDERTILE, 0, 0, 4 << 10, 1 << 10), - gsDPSetTextureImage(G_IM_FMT_RGBA, G_IM_SIZ_16b, 1, cake_end_texture_eu_3), - gsDPLoadSync(), - gsDPLoadBlock(G_TX_LOADTILE, 0, 0, 64 * 32 - 1, CALC_DXT(64, G_IM_SIZ_16b_BYTES)), - gsSPTextureRectangle(192 << 2, 8 << 2, (192 + 63) << 2, (8 + 31) << 2, G_TX_RENDERTILE, 0, 0, 4 << 10, 1 << 10), - gsDPSetTextureImage(G_IM_FMT_RGBA, G_IM_SIZ_16b, 1, cake_end_texture_eu_4), - gsDPLoadSync(), - gsDPLoadBlock(G_TX_LOADTILE, 0, 0, 64 * 32 - 1, CALC_DXT(64, G_IM_SIZ_16b_BYTES)), - gsSPTextureRectangle(256 << 2, 8 << 2, (256 + 63) << 2, (8 + 31) << 2, G_TX_RENDERTILE, 0, 0, 4 << 10, 1 << 10), - gsDPSetTextureImage(G_IM_FMT_RGBA, G_IM_SIZ_16b, 1, cake_end_texture_eu_5), - gsDPLoadSync(), - gsDPLoadBlock(G_TX_LOADTILE, 0, 0, 64 * 32 - 1, CALC_DXT(64, G_IM_SIZ_16b_BYTES)), - gsSPTextureRectangle(0 << 2, 40 << 2, (0 + 63) << 2, (40 + 31) << 2, G_TX_RENDERTILE, 0, 0, 4 << 10, 1 << 10), - gsDPSetTextureImage(G_IM_FMT_RGBA, G_IM_SIZ_16b, 1, cake_end_texture_eu_6), - gsDPLoadSync(), - gsDPLoadBlock(G_TX_LOADTILE, 0, 0, 64 * 32 - 1, CALC_DXT(64, G_IM_SIZ_16b_BYTES)), - gsSPTextureRectangle(64 << 2, 40 << 2, (64 + 63) << 2, (40 + 31) << 2, G_TX_RENDERTILE, 0, 0, 4 << 10, 1 << 10), - gsDPSetTextureImage(G_IM_FMT_RGBA, G_IM_SIZ_16b, 1, cake_end_texture_eu_7), - gsDPLoadSync(), - gsDPLoadBlock(G_TX_LOADTILE, 0, 0, 64 * 32 - 1, CALC_DXT(64, G_IM_SIZ_16b_BYTES)), - gsSPTextureRectangle(128 << 2, 40 << 2, (128 + 63) << 2, (40 + 31) << 2, G_TX_RENDERTILE, 0, 0, 4 << 10, 1 << 10), - gsDPSetTextureImage(G_IM_FMT_RGBA, G_IM_SIZ_16b, 1, cake_end_texture_eu_8), - gsDPLoadSync(), - gsDPLoadBlock(G_TX_LOADTILE, 0, 0, 64 * 32 - 1, CALC_DXT(64, G_IM_SIZ_16b_BYTES)), - gsSPTextureRectangle(192 << 2, 40 << 2, (192 + 63) << 2, (40 + 31) << 2, G_TX_RENDERTILE, 0, 0, 4 << 10, 1 << 10), - gsDPSetTextureImage(G_IM_FMT_RGBA, G_IM_SIZ_16b, 1, cake_end_texture_eu_9), - gsDPLoadSync(), - gsDPLoadBlock(G_TX_LOADTILE, 0, 0, 64 * 32 - 1, CALC_DXT(64, G_IM_SIZ_16b_BYTES)), - gsSPTextureRectangle(256 << 2, 40 << 2, (256 + 63) << 2, (40 + 31) << 2, G_TX_RENDERTILE, 0, 0, 4 << 10, 1 << 10), - gsDPSetTextureImage(G_IM_FMT_RGBA, G_IM_SIZ_16b, 1, cake_end_texture_eu_10), - gsDPLoadSync(), - gsDPLoadBlock(G_TX_LOADTILE, 0, 0, 64 * 32 - 1, CALC_DXT(64, G_IM_SIZ_16b_BYTES)), - gsSPTextureRectangle(0 << 2, 72 << 2, (0 + 63) << 2, (72 + 31) << 2, G_TX_RENDERTILE, 0, 0, 4 << 10, 1 << 10), - gsDPSetTextureImage(G_IM_FMT_RGBA, G_IM_SIZ_16b, 1, cake_end_texture_eu_11), - gsDPLoadSync(), - gsDPLoadBlock(G_TX_LOADTILE, 0, 0, 64 * 32 - 1, CALC_DXT(64, G_IM_SIZ_16b_BYTES)), - gsSPTextureRectangle(64 << 2, 72 << 2, (64 + 63) << 2, (72 + 31) << 2, G_TX_RENDERTILE, 0, 0, 4 << 10, 1 << 10), - gsDPSetTextureImage(G_IM_FMT_RGBA, G_IM_SIZ_16b, 1, cake_end_texture_eu_12), - gsDPLoadSync(), - gsDPLoadBlock(G_TX_LOADTILE, 0, 0, 64 * 32 - 1, CALC_DXT(64, G_IM_SIZ_16b_BYTES)), - gsSPTextureRectangle(128 << 2, 72 << 2, (128 + 63) << 2, (72 + 31) << 2, G_TX_RENDERTILE, 0, 0, 4 << 10, 1 << 10), - gsDPSetTextureImage(G_IM_FMT_RGBA, G_IM_SIZ_16b, 1, cake_end_texture_eu_13), - gsDPLoadSync(), - gsDPLoadBlock(G_TX_LOADTILE, 0, 0, 64 * 32 - 1, CALC_DXT(64, G_IM_SIZ_16b_BYTES)), - gsSPTextureRectangle(192 << 2, 72 << 2, (192 + 63) << 2, (72 + 31) << 2, G_TX_RENDERTILE, 0, 0, 4 << 10, 1 << 10), - gsDPSetTextureImage(G_IM_FMT_RGBA, G_IM_SIZ_16b, 1, cake_end_texture_eu_14), - gsDPLoadSync(), - gsDPLoadBlock(G_TX_LOADTILE, 0, 0, 64 * 32 - 1, CALC_DXT(64, G_IM_SIZ_16b_BYTES)), - gsSPTextureRectangle(256 << 2, 72 << 2, (256 + 63) << 2, (72 + 31) << 2, G_TX_RENDERTILE, 0, 0, 4 << 10, 1 << 10), - gsDPSetTextureImage(G_IM_FMT_RGBA, G_IM_SIZ_16b, 1, cake_end_texture_eu_15), - gsDPLoadSync(), - gsDPLoadBlock(G_TX_LOADTILE, 0, 0, 64 * 32 - 1, CALC_DXT(64, G_IM_SIZ_16b_BYTES)), - gsSPTextureRectangle(0 << 2, 104 << 2, (0 + 63) << 2, (104 + 31) << 2, G_TX_RENDERTILE, 0, 0, 4 << 10, 1 << 10), - gsDPSetTextureImage(G_IM_FMT_RGBA, G_IM_SIZ_16b, 1, cake_end_texture_eu_16), - gsDPLoadSync(), - gsDPLoadBlock(G_TX_LOADTILE, 0, 0, 64 * 32 - 1, CALC_DXT(64, G_IM_SIZ_16b_BYTES)), - gsSPTextureRectangle(64 << 2, 104 << 2, (64 + 63) << 2, (104 + 31) << 2, G_TX_RENDERTILE, 0, 0, 4 << 10, 1 << 10), - gsDPSetTextureImage(G_IM_FMT_RGBA, G_IM_SIZ_16b, 1, cake_end_texture_eu_17), - gsDPLoadSync(), - gsDPLoadBlock(G_TX_LOADTILE, 0, 0, 64 * 32 - 1, CALC_DXT(64, G_IM_SIZ_16b_BYTES)), - gsSPTextureRectangle(128 << 2, 104 << 2, (128 + 63) << 2, (104 + 31) << 2, G_TX_RENDERTILE, 0, 0, 4 << 10, 1 << 10), - gsDPSetTextureImage(G_IM_FMT_RGBA, G_IM_SIZ_16b, 1, cake_end_texture_eu_18), - gsDPLoadSync(), - gsDPLoadBlock(G_TX_LOADTILE, 0, 0, 64 * 32 - 1, CALC_DXT(64, G_IM_SIZ_16b_BYTES)), - gsSPTextureRectangle(192 << 2, 104 << 2, (192 + 63) << 2, (104 + 31) << 2, G_TX_RENDERTILE, 0, 0, 4 << 10, 1 << 10), - gsDPSetTextureImage(G_IM_FMT_RGBA, G_IM_SIZ_16b, 1, cake_end_texture_eu_19), - gsDPLoadSync(), - gsDPLoadBlock(G_TX_LOADTILE, 0, 0, 64 * 32 - 1, CALC_DXT(64, G_IM_SIZ_16b_BYTES)), - gsSPTextureRectangle(256 << 2, 104 << 2, (256 + 63) << 2, (104 + 31) << 2, G_TX_RENDERTILE, 0, 0, 4 << 10, 1 << 10), - gsDPSetTextureImage(G_IM_FMT_RGBA, G_IM_SIZ_16b, 1, cake_end_texture_eu_20), - gsDPLoadSync(), - gsDPLoadBlock(G_TX_LOADTILE, 0, 0, 64 * 32 - 1, CALC_DXT(64, G_IM_SIZ_16b_BYTES)), - gsSPTextureRectangle(0 << 2, 136 << 2, (0 + 63) << 2, (136 + 31) << 2, G_TX_RENDERTILE, 0, 0, 4 << 10, 1 << 10), - gsDPSetTextureImage(G_IM_FMT_RGBA, G_IM_SIZ_16b, 1, cake_end_texture_eu_21), - gsDPLoadSync(), - gsDPLoadBlock(G_TX_LOADTILE, 0, 0, 64 * 32 - 1, CALC_DXT(64, G_IM_SIZ_16b_BYTES)), - gsSPTextureRectangle(64 << 2, 136 << 2, (64 + 63) << 2, (136 + 31) << 2, G_TX_RENDERTILE, 0, 0, 4 << 10, 1 << 10), - gsDPSetTextureImage(G_IM_FMT_RGBA, G_IM_SIZ_16b, 1, cake_end_texture_eu_22), - gsDPLoadSync(), - gsDPLoadBlock(G_TX_LOADTILE, 0, 0, 64 * 32 - 1, CALC_DXT(64, G_IM_SIZ_16b_BYTES)), - gsSPTextureRectangle(128 << 2, 136 << 2, (128 + 63) << 2, (136 + 31) << 2, G_TX_RENDERTILE, 0, 0, 4 << 10, 1 << 10), - gsDPSetTextureImage(G_IM_FMT_RGBA, G_IM_SIZ_16b, 1, cake_end_texture_eu_23), - gsDPLoadSync(), - gsDPLoadBlock(G_TX_LOADTILE, 0, 0, 64 * 32 - 1, CALC_DXT(64, G_IM_SIZ_16b_BYTES)), - gsSPTextureRectangle(192 << 2, 136 << 2, (192 + 63) << 2, (136 + 31) << 2, G_TX_RENDERTILE, 0, 0, 4 << 10, 1 << 10), - gsDPSetTextureImage(G_IM_FMT_RGBA, G_IM_SIZ_16b, 1, cake_end_texture_eu_24), - gsDPLoadSync(), - gsDPLoadBlock(G_TX_LOADTILE, 0, 0, 64 * 32 - 1, CALC_DXT(64, G_IM_SIZ_16b_BYTES)), - gsSPTextureRectangle(256 << 2, 136 << 2, (256 + 63) << 2, (136 + 31) << 2, G_TX_RENDERTILE, 0, 0, 4 << 10, 1 << 10), - gsDPSetTextureImage(G_IM_FMT_RGBA, G_IM_SIZ_16b, 1, cake_end_texture_eu_25), - gsDPLoadSync(), - gsDPLoadBlock(G_TX_LOADTILE, 0, 0, 64 * 32 - 1, CALC_DXT(64, G_IM_SIZ_16b_BYTES)), - gsSPTextureRectangle(0 << 2, 168 << 2, (0 + 63) << 2, (168 + 31) << 2, G_TX_RENDERTILE, 0, 0, 4 << 10, 1 << 10), - gsDPSetTextureImage(G_IM_FMT_RGBA, G_IM_SIZ_16b, 1, cake_end_texture_eu_26), - gsDPLoadSync(), - gsDPLoadBlock(G_TX_LOADTILE, 0, 0, 64 * 32 - 1, CALC_DXT(64, G_IM_SIZ_16b_BYTES)), - gsSPTextureRectangle(64 << 2, 168 << 2, (64 + 63) << 2, (168 + 31) << 2, G_TX_RENDERTILE, 0, 0, 4 << 10, 1 << 10), - gsDPSetTextureImage(G_IM_FMT_RGBA, G_IM_SIZ_16b, 1, cake_end_texture_eu_27), - gsDPLoadSync(), - gsDPLoadBlock(G_TX_LOADTILE, 0, 0, 64 * 32 - 1, CALC_DXT(64, G_IM_SIZ_16b_BYTES)), - gsSPTextureRectangle(128 << 2, 168 << 2, (128 + 63) << 2, (168 + 31) << 2, G_TX_RENDERTILE, 0, 0, 4 << 10, 1 << 10), - gsDPSetTextureImage(G_IM_FMT_RGBA, G_IM_SIZ_16b, 1, cake_end_texture_eu_28), - gsDPLoadSync(), - gsDPLoadBlock(G_TX_LOADTILE, 0, 0, 64 * 32 - 1, CALC_DXT(64, G_IM_SIZ_16b_BYTES)), - gsSPTextureRectangle(192 << 2, 168 << 2, (192 + 63) << 2, (168 + 31) << 2, G_TX_RENDERTILE, 0, 0, 4 << 10, 1 << 10), - gsDPSetTextureImage(G_IM_FMT_RGBA, G_IM_SIZ_16b, 1, cake_end_texture_eu_29), - gsDPLoadSync(), - gsDPLoadBlock(G_TX_LOADTILE, 0, 0, 64 * 32 - 1, CALC_DXT(64, G_IM_SIZ_16b_BYTES)), - gsSPTextureRectangle(256 << 2, 168 << 2, (256 + 63) << 2, (168 + 31) << 2, G_TX_RENDERTILE, 0, 0, 4 << 10, 1 << 10), - gsDPSetTextureImage(G_IM_FMT_RGBA, G_IM_SIZ_16b, 1, cake_end_texture_eu_30), - gsDPLoadSync(), - gsDPLoadBlock(G_TX_LOADTILE, 0, 0, 64 * 32 - 1, CALC_DXT(64, G_IM_SIZ_16b_BYTES)), - gsSPTextureRectangle(0 << 2, 200 << 2, (0 + 63) << 2, (200 + 31) << 2, G_TX_RENDERTILE, 0, 0, 4 << 10, 1 << 10), - gsDPSetTextureImage(G_IM_FMT_RGBA, G_IM_SIZ_16b, 1, cake_end_texture_eu_31), - gsDPLoadSync(), - gsDPLoadBlock(G_TX_LOADTILE, 0, 0, 64 * 32 - 1, CALC_DXT(64, G_IM_SIZ_16b_BYTES)), - gsSPTextureRectangle(64 << 2, 200 << 2, (64 + 63) << 2, (200 + 31) << 2, G_TX_RENDERTILE, 0, 0, 4 << 10, 1 << 10), - gsDPSetTextureImage(G_IM_FMT_RGBA, G_IM_SIZ_16b, 1, cake_end_texture_eu_32), - gsDPLoadSync(), - gsDPLoadBlock(G_TX_LOADTILE, 0, 0, 64 * 32 - 1, CALC_DXT(64, G_IM_SIZ_16b_BYTES)), - gsSPTextureRectangle(128 << 2, 200 << 2, (128 + 63) << 2, (200 + 31) << 2, G_TX_RENDERTILE, 0, 0, 4 << 10, 1 << 10), - gsDPSetTextureImage(G_IM_FMT_RGBA, G_IM_SIZ_16b, 1, cake_end_texture_eu_33), - gsDPLoadSync(), - gsDPLoadBlock(G_TX_LOADTILE, 0, 0, 64 * 32 - 1, CALC_DXT(64, G_IM_SIZ_16b_BYTES)), - gsSPTextureRectangle(192 << 2, 200 << 2, (192 + 63) << 2, (200 + 31) << 2, G_TX_RENDERTILE, 0, 0, 4 << 10, 1 << 10), - gsDPSetTextureImage(G_IM_FMT_RGBA, G_IM_SIZ_16b, 1, cake_end_texture_eu_34), - gsDPLoadSync(), - gsDPLoadBlock(G_TX_LOADTILE, 0, 0, 64 * 32 - 1, CALC_DXT(64, G_IM_SIZ_16b_BYTES)), - gsSPTextureRectangle(256 << 2, 200 << 2, (256 + 63) << 2, (200 + 31) << 2, G_TX_RENDERTILE, 0, 0, 4 << 10, 1 << 10), - gsSPEndDisplayList(), -}; - -// 0x070296D8 - 0x070296F8 -static const Gfx dl_cake_end_eu_end[] = { - gsDPPipeSync(), - gsDPSetCycleType(G_CYC_1CYCLE), - gsDPSetTexturePersp(G_TP_PERSP), - gsSPEndDisplayList(), -}; - -#ifndef EU_CUSTOM_CAKE_FIX -// 0x070296F8 - 0x07029768 -const Gfx dl_cake_end_screen_eu_english[] = { - gsDPSetTextureImage(G_IM_FMT_RGBA, G_IM_SIZ_16b, 1, cake_end_texture_eu_38_the_end), - gsDPLoadSync(), - gsDPLoadBlock(G_TX_LOADTILE, 0, 0, 64 * 32 - 1, CALC_DXT(64, G_IM_SIZ_16b_BYTES)), - gsSPTextureRectangle(128 << 2, 200 << 2, (128 + 63) << 2, (200 + 31) << 2, G_TX_RENDERTILE, 0, 0, 4 << 10, 1 << 10), - gsDPSetTextureImage(G_IM_FMT_RGBA, G_IM_SIZ_16b, 1, cake_end_texture_eu_35_thank_you), - gsDPLoadSync(), - gsDPLoadBlock(G_TX_LOADTILE, 0, 0, 64 * 32 - 1, CALC_DXT(64, G_IM_SIZ_16b_BYTES)), - gsSPTextureRectangle(128 << 2, 125 << 2, (128 + 63) << 2, (125 + 31) << 2, G_TX_RENDERTILE, 0, 0, 4 << 10, 1 << 10), - gsSPDisplayList(dl_cake_end_eu_end), - gsSPEndDisplayList(), -}; - -// 0x07029768 - 0x070297D8 -const Gfx dl_cake_end_screen_eu_french[] = { - gsDPSetTextureImage(G_IM_FMT_RGBA, G_IM_SIZ_16b, 1, cake_end_texture_eu_39_fin), - gsDPLoadSync(), - gsDPLoadBlock(G_TX_LOADTILE, 0, 0, 64 * 32 - 1, CALC_DXT(64, G_IM_SIZ_16b_BYTES)), - gsSPTextureRectangle(128 << 2, 200 << 2, (128 + 63) << 2, (200 + 31) << 2, G_TX_RENDERTILE, 0, 0, 4 << 10, 1 << 10), - gsDPSetTextureImage(G_IM_FMT_RGBA, G_IM_SIZ_16b, 1, cake_end_texture_eu_36_merci), - gsDPLoadSync(), - gsDPLoadBlock(G_TX_LOADTILE, 0, 0, 64 * 32 - 1, CALC_DXT(64, G_IM_SIZ_16b_BYTES)), - gsSPTextureRectangle(128 << 2, 125 << 2, (128 + 63) << 2, (125 + 31) << 2, G_TX_RENDERTILE, 0, 0, 4 << 10, 1 << 10), - gsSPDisplayList(dl_cake_end_eu_end), - gsSPEndDisplayList(), -}; - -// 0x070297D8 - 0x07029848 -const Gfx dl_cake_end_screen_eu_german[] = { - gsDPSetTextureImage(G_IM_FMT_RGBA, G_IM_SIZ_16b, 1, cake_end_texture_eu_40_ende), - gsDPLoadSync(), - gsDPLoadBlock(G_TX_LOADTILE, 0, 0, 64 * 32 - 1, CALC_DXT(64, G_IM_SIZ_16b_BYTES)), - gsSPTextureRectangle(128 << 2, 200 << 2, (128 + 63) << 2, (200 + 31) << 2, G_TX_RENDERTILE, 0, 0, 4 << 10, 1 << 10), - gsDPSetTextureImage(G_IM_FMT_RGBA, G_IM_SIZ_16b, 1, cake_end_texture_eu_37_vrelen_dank), - gsDPLoadSync(), - gsDPLoadBlock(G_TX_LOADTILE, 0, 0, 64 * 32 - 1, CALC_DXT(64, G_IM_SIZ_16b_BYTES)), - gsSPTextureRectangle(128 << 2, 125 << 2, (128 + 63) << 2, (125 + 31) << 2, G_TX_RENDERTILE, 0, 0, 4 << 10, 1 << 10), - gsSPDisplayList(dl_cake_end_eu_end), - gsSPEndDisplayList(), -}; - -#else -const Gfx dl_cake_end_screen_eu_fix[] = { - gsSPDisplayList(dl_cake_end_eu_end), - gsSPEndDisplayList(), -}; -#endif - -// VERSION_EU -#else - #include "levels/ending/cake.inc.c" #define NUM_CAKE_TEXTURES 40 @@ -350,4 +101,3 @@ const Gfx dl_cake_end_screen[] = { gsDPSetRenderMode(G_RM_AA_ZB_OPA_SURF, G_RM_AA_ZB_OPA_SURF2), gsSPEndDisplayList(), }; -#endif diff --git a/levels/menu/header.h b/levels/menu/header.h index e73f96505..8a1d25296 100644 --- a/levels/menu/header.h +++ b/levels/menu/header.h @@ -18,31 +18,47 @@ extern const GeoLayout geo_menu_file_select_strings_and_menu_cursor[]; extern const GeoLayout geo_menu_act_selector_strings[]; // leveldata -extern const Gfx dl_menu_mario_save_button_base[]; -extern const Gfx dl_menu_mario_new_button_base[]; -extern const Gfx dl_menu_save_button_back[]; -extern const Gfx dl_menu_save_button_fade_back[]; -extern const Gfx dl_menu_erase_button[]; -extern const Gfx dl_menu_copy_button[]; -extern const Gfx dl_menu_file_button[]; -extern const Gfx dl_menu_score_button[]; -extern const Gfx dl_menu_sound_button[]; -extern const Gfx dl_menu_generic_button[]; -extern const Gfx dl_menu_idle_hand[]; -extern const Gfx dl_menu_grabbing_hand[]; -extern const Texture *const menu_hud_lut[]; -extern const Texture *const menu_font_lut[]; -extern const Gfx dl_menu_ia8_text_begin[]; -extern const Gfx dl_menu_ia8_text_end[]; -extern const Gfx dl_menu_rgba16_wood_course[]; -extern const Gfx dl_menu_texture_course_upper[]; -extern const Gfx dl_menu_texture_niveau_upper[]; -extern const Gfx dl_menu_texture_kurs_upper[]; -extern const Collision main_menu_seg7_collision[]; -#ifdef VERSION_EU -extern const u8 eu_course_strings_en_table[]; -extern const u8 eu_course_strings_fr_table[]; -extern const u8 eu_course_strings_de_table[]; +extern Gfx dl_menu_mario_save_button_base[]; +extern Gfx dl_menu_mario_new_button_base[]; +extern Gfx dl_menu_save_button_back[]; +extern Gfx dl_menu_save_button_fade_back[]; +extern Gfx dl_menu_erase_button[]; +extern Gfx dl_menu_copy_button[]; +extern Gfx dl_menu_file_button[]; +extern Gfx dl_menu_score_button[]; +extern Gfx dl_menu_sound_button[]; +extern Gfx dl_menu_generic_button[]; +extern Gfx dl_menu_idle_hand[]; +extern Gfx dl_menu_grabbing_hand[]; +extern struct DiacriticLUTEntry menu_font_diacritic_lut[]; +extern struct AsciiCharLUTEntry menu_font_lut[]; +extern struct Utf8LUT menu_font_utf8_lut; +extern Texture texture_menu_font_char_umlaut[]; +extern Gfx dl_menu_ia8_text_begin[]; +extern Gfx dl_menu_ia8_text_end[]; +extern Gfx dl_menu_rgba16_wood_course[]; +extern Collision main_menu_seg7_collision[]; + +#ifdef MULTILANG +extern const char *(*course_strings_language_table[])[]; +extern Gfx dl_menu_rgba16_wood_course_end[]; +extern Gfx dl_menu_texture_course_upper[]; +extern const char *course_strings_en_table[]; +#ifdef ENABLE_FRENCH +extern Gfx dl_menu_texture_niveau_upper[]; +extern const char *course_strings_fr_table[]; +#endif +#ifdef ENABLE_GERMAN +extern Gfx dl_menu_texture_kurs_upper[]; +extern const char *course_strings_de_table[]; +#endif +#ifdef ENABLE_JAPANESE +extern const char *course_strings_jp_table[]; +#endif +#ifdef ENABLE_SPANISH +extern const char *course_strings_es_table[]; +extern Gfx dl_menu_texture_nivel_upper[]; +#endif #endif // script diff --git a/levels/menu/leveldata.c b/levels/menu/leveldata.c index 73643c0de..76fcece50 100644 --- a/levels/menu/leveldata.c +++ b/levels/menu/leveldata.c @@ -5,10 +5,8 @@ #include "surface_terrains.h" #include "types.h" -#ifdef VERSION_EU -#include "text_strings.h" -#endif #include "make_const_nonconst.h" +#include "game/ingame_menu.h" // 0x07000000 - 0x07000018 @@ -448,159 +446,7 @@ const Gfx dl_menu_grabbing_hand[] = { gsSPBranchList(dl_menu_hand), }; -// 0x070073D0 -ALIGNED8 static const Texture texture_menu_hud_char_katakana_hu[] = { -#include "levels/menu/main_menu_seg7.073D0.rgba16.inc.c" -}; - -// 0x070075D0 -ALIGNED8 static const Texture texture_menu_hud_char_katakana_small_a[] = { -#include "levels/menu/main_menu_seg7.075D0.rgba16.inc.c" -}; - -// 0x070077D0 -ALIGNED8 static const Texture texture_menu_hud_char_katakana_i[] = { -#include "levels/menu/main_menu_seg7.077D0.rgba16.inc.c" -}; - -// 0x070079D0 -ALIGNED8 static const Texture texture_menu_hud_char_katakana_ru[] = { -#include "levels/menu/main_menu_seg7.079D0.rgba16.inc.c" -}; - -// 0x07007BD0 -ALIGNED8 static const Texture texture_menu_hud_char_katakana_se[] = { -#include "levels/menu/main_menu_seg7.07BD0.rgba16.inc.c" -}; - -// 0x07007DD0 -ALIGNED8 static const Texture texture_menu_hud_char_katakana_re[] = { -#include "levels/menu/main_menu_seg7.07DD0.rgba16.inc.c" -}; - -// 0x07007FD0 -ALIGNED8 static const Texture texture_menu_hud_char_katakana_ku[] = { -#include "levels/menu/main_menu_seg7.07FD0.rgba16.inc.c" -}; - -// 0x070081D0 -ALIGNED8 static const Texture texture_menu_hud_char_katakana_to[] = { -#include "levels/menu/main_menu_seg7.081D0.rgba16.inc.c" -}; - -// 0x070083D0 -ALIGNED8 static const Texture texture_menu_hud_char_hiragana_wo[] = { -#include "levels/menu/main_menu_seg7.083D0.rgba16.inc.c" -}; - -// 0x070085D0 -ALIGNED8 static const Texture texture_menu_hud_char_katakana_ko[] = { -#include "levels/menu/main_menu_seg7.085D0.rgba16.inc.c" -}; - -// 0x070087D0 -ALIGNED8 static const Texture texture_menu_hud_char_kana_handakuten_pi[] = { -#include "levels/menu/main_menu_seg7.087D0.rgba16.inc.c" -}; - -// 0x070089D0 -ALIGNED8 static const Texture texture_menu_hud_char_choonpu[] = { -#include "levels/menu/main_menu_seg7.089D0.rgba16.inc.c" -}; - -// 0x07008BD0 -ALIGNED8 static const Texture texture_menu_hud_char_hiragana_su[] = { -#include "levels/menu/main_menu_seg7.08BD0.rgba16.inc.c" -}; - -// 0x07008DD0 -ALIGNED8 static const Texture texture_menu_hud_char_hiragana_ru[] = { -#include "levels/menu/main_menu_seg7.08DD0.rgba16.inc.c" -}; - -// 0x07008FD0 -ALIGNED8 static const Texture texture_menu_hud_char_hiragana_ke[] = { -#include "levels/menu/main_menu_seg7.08FD0.rgba16.inc.c" -}; - -// 0x070091D0 -ALIGNED8 static const Texture texture_menu_hud_char_katakana_ma[] = { -#include "levels/menu/main_menu_seg7.091D0.rgba16.inc.c" -}; - -// 0x070093D0 -ALIGNED8 static const Texture texture_menu_hud_char_katakana_ri[] = { -#include "levels/menu/main_menu_seg7.093D0.rgba16.inc.c" -}; - -// 0x070095D0 -ALIGNED8 static const Texture texture_menu_hud_char_katakana_o[] = { -#include "levels/menu/main_menu_seg7.095D0.rgba16.inc.c" -}; - -// 0x070097D0 -ALIGNED8 static const Texture texture_menu_hud_char_katakana_su[] = { -#include "levels/menu/main_menu_seg7.097D0.rgba16.inc.c" -}; - -// 0x070099D0 -ALIGNED8 static const Texture texture_menu_hud_char_katakana_a[] = { -#include "levels/menu/main_menu_seg7.099D0.rgba16.inc.c" -}; - -// 0x07009BD0 -ALIGNED8 static const Texture texture_menu_hud_char_hiragana_mi[] = { -#include "levels/menu/main_menu_seg7.09BD0.rgba16.inc.c" -}; - -// 0x07009DD0 -ALIGNED8 static const Texture texture_menu_hud_char_hira_dakuten_do[] = { -#include "levels/menu/main_menu_seg7.09DD0.rgba16.inc.c" -}; - -// 0x07009FD0 -ALIGNED8 static const Texture texture_menu_hud_char_hiragana_no[] = { -#include "levels/menu/main_menu_seg7.09FD0.rgba16.inc.c" -}; - -// 0x0700A1D0 -ALIGNED8 static const Texture texture_menu_hud_char_question[] = { -#include "levels/menu/main_menu_seg7.0A1D0.rgba16.inc.c" -}; - -// 0x0700A3D0 -ALIGNED8 static const Texture texture_menu_hud_char_katakana_sa[] = { -#include "levels/menu/main_menu_seg7.0A3D0.rgba16.inc.c" -}; - -// 0x0700A5D0 -ALIGNED8 static const Texture texture_menu_hud_char_katakana_u[] = { -#include "levels/menu/main_menu_seg7.0A5D0.rgba16.inc.c" -}; - -// 0x0700A7D0 -ALIGNED8 static const Texture texture_menu_hud_char_katakana_n[] = { -#include "levels/menu/main_menu_seg7.0A7D0.rgba16.inc.c" -}; - -// 0x0700A9D0 -ALIGNED8 static const Texture texture_menu_hud_char_kana_dakuten_do[] = { -#include "levels/menu/main_menu_seg7.0A9D0.rgba16.inc.c" -}; - -// Menu HUD print table, only used in JP -// 0x0700ABD0 -const Texture *const menu_hud_lut[] = { - texture_menu_hud_char_katakana_hu, texture_menu_hud_char_katakana_small_a, texture_menu_hud_char_katakana_i, texture_menu_hud_char_katakana_ru, - texture_menu_hud_char_katakana_se, texture_menu_hud_char_katakana_re, texture_menu_hud_char_katakana_ku, texture_menu_hud_char_katakana_to, - texture_menu_hud_char_hiragana_wo, texture_menu_hud_char_katakana_ko, texture_menu_hud_char_kana_handakuten_pi, texture_menu_hud_char_choonpu, - texture_menu_hud_char_hiragana_su, texture_menu_hud_char_hiragana_ru, texture_menu_hud_char_hiragana_ke, texture_menu_hud_char_katakana_ma, - texture_menu_hud_char_katakana_ri, texture_menu_hud_char_katakana_o, texture_menu_hud_char_katakana_su, texture_menu_hud_char_katakana_a, - texture_menu_hud_char_hiragana_mi, texture_menu_hud_char_hira_dakuten_do, texture_menu_hud_char_hiragana_no, texture_menu_hud_char_question, - texture_menu_hud_char_katakana_sa, texture_menu_hud_char_katakana_u, texture_menu_hud_char_katakana_n, texture_menu_hud_char_kana_dakuten_do, -}; - -#if defined(VERSION_JP) || defined(VERSION_SH) +#ifdef JAPANESE_CHARACTERS // 0x0700AC48 ALIGNED8 static const Texture texture_menu_font_char_jp_0[] = { #include "levels/menu/main_menu_seg7.0AC48.ia8.inc.c" @@ -667,7 +513,7 @@ ALIGNED8 static const Texture texture_menu_font_char_jp_hiragana_u[] = { }; // 0x0700AF88 -ALIGNED8 static const Texture texture_menu_font_char_jp_hiragana_c[] = { +ALIGNED8 static const Texture texture_menu_font_char_jp_hiragana_e[] = { #include "levels/menu/main_menu_seg7.0AF88.ia8.inc.c" }; @@ -787,7 +633,7 @@ ALIGNED8 static const Texture texture_menu_font_char_jp_hiragana_hi[] = { }; // 0x0700B588 -ALIGNED8 static const Texture texture_menu_font_char_jp_hiragana_hu[] = { +ALIGNED8 static const Texture texture_menu_font_char_jp_hiragana_fu[] = { #include "levels/menu/main_menu_seg7.0B588.ia8.inc.c" }; @@ -907,7 +753,7 @@ ALIGNED8 static const Texture texture_menu_font_char_jp_hiragana_small_o[] = { }; // 0x0700BB88 -ALIGNED8 static const Texture texture_menu_font_char_jp_hiragana_small_ka[] = { +ALIGNED8 static const Texture texture_menu_font_char_jp_hiragana_small_ya[] = { #include "levels/menu/main_menu_seg7.0BB88.ia8.inc.c" }; @@ -1077,7 +923,7 @@ ALIGNED8 static const Texture texture_menu_font_char_jp_katakana_hi[] = { }; // 0x0700C408 -ALIGNED8 static const Texture texture_menu_font_char_jp_katakana_hu[] = { +ALIGNED8 static const Texture texture_menu_font_char_jp_katakana_fu[] = { #include "levels/menu/main_menu_seg7.0C408.ia8.inc.c" }; @@ -1197,7 +1043,7 @@ ALIGNED8 static const Texture texture_menu_font_char_jp_katakana_small_o[] = { }; // 0x0700CA08 -ALIGNED8 static const Texture texture_menu_font_char_jp_katakana_small_ka[] = { +ALIGNED8 static const Texture texture_menu_font_char_jp_katakana_small_ya[] = { #include "levels/menu/main_menu_seg7.0CA08.ia8.inc.c" }; @@ -1236,27 +1082,11 @@ ALIGNED8 static const Texture texture_menu_font_char_jp_D[] = { #include "levels/menu/main_menu_seg7.0CBC8.ia8.inc.c" }; -// 0x0700CC08 -ALIGNED8 static const Texture texture_menu_font_char_jp_coin[] = { -#include "levels/menu/main_menu_seg7.0CC08.ia8.inc.c" -}; - -// 0x0700CC48 -ALIGNED8 static const Texture texture_menu_font_char_jp_star_filled[] = { -#include "levels/menu/main_menu_seg7.0CC48.ia8.inc.c" -}; - -// 0x0700CC88 -ALIGNED8 static const Texture texture_menu_font_char_jp_multiply[] = { -#include "levels/menu/main_menu_seg7.0CC88.ia8.inc.c" -}; - // 0x0700CCC8 ALIGNED8 static const Texture texture_menu_font_char_jp_exclamation[] = { #include "levels/menu/main_menu_seg7.0CCC8.ia8.inc.c" }; - -#else +#endif // 0x0700AC40 ALIGNED8 static const Texture texture_menu_font_char_0[] = { @@ -1323,19 +1153,10 @@ ALIGNED8 static const Texture texture_menu_font_char_C[] = { #include "levels/menu/main_menu_seg7_us.0AF40.ia8.inc.c" }; -#ifdef VERSION_EU -// 0x0700AF80 -ALIGNED8 static const Texture texture_menu_font_char_D[] = { -#include "levels/menu/main_menu_seg7_eu.0AF80.ia8.inc.c" -}; - -#else - // 0x0700AF80 ALIGNED8 static const Texture texture_menu_font_char_D[] = { #include "levels/menu/main_menu_seg7_us.0AF80.ia8.inc.c" }; -#endif // 0x0700AFC0 ALIGNED8 static const Texture texture_menu_font_char_E[] = { @@ -1467,19 +1288,6 @@ ALIGNED8 static const Texture texture_menu_font_char_dash[] = { #include "levels/menu/main_menu_seg7_us.0B600.ia8.inc.c" }; -#ifdef VERSION_EU -// 0x0700B640 -ALIGNED8 static const Texture texture_menu_font_char_comma[] = { -#include "levels/menu/main_menu_seg7_eu.0B640.ia8.inc.c" -}; - -// 0x0700B680 -ALIGNED8 static const Texture texture_menu_font_char_apostrophe[] = { -#include "levels/menu/main_menu_seg7_eu.0B680.ia8.inc.c" -}; - -#else - // 0x0700B640 ALIGNED8 static const Texture texture_menu_font_char_comma[] = { #include "levels/menu/main_menu_seg7_us.0B640.ia8.inc.c" @@ -1489,7 +1297,6 @@ ALIGNED8 static const Texture texture_menu_font_char_comma[] = { ALIGNED8 static const Texture texture_menu_font_char_apostrophe[] = { #include "levels/menu/main_menu_seg7_us.0B680.ia8.inc.c" }; -#endif // 0x0700B6C0 ALIGNED8 static const Texture texture_menu_font_char_exclamation[] = { @@ -1520,166 +1327,475 @@ ALIGNED8 static const Texture texture_menu_font_char_period[] = { ALIGNED8 static const Texture texture_menu_font_char_ampersand[] = { #include "levels/menu/main_menu_seg7_us.0B800.ia8.inc.c" }; -#endif -#ifdef VERSION_EU -// 0x0700B840 -ALIGNED8 static const Texture texture_menu_font_char_umlaut[] = { -#include "levels/menu/main_menu_seg7_eu.0B840.ia8.inc.c" -}; - -// 0x0700B880 -ALIGNED8 static const Texture texture_menu_font_char_cedilla_mayus[] = { -#include "levels/menu/main_menu_seg7_eu.0B880.ia8.inc.c" -}; - -// 0x0700B8C0 ALIGNED8 static const Texture texture_menu_font_char_colon[] = { -#include "levels/menu/main_menu_seg7_eu.0B8C0.ia8.inc.c" +#include "levels/menu/main_menu_seg7.colon.ia8.inc.c" }; + +ALIGNED8 static const Texture texture_menu_font_char_inverted_exclamation_mark[] = { +#include "levels/menu/main_menu_seg7.inverted_exclamation_mark.ia8.inc.c" +}; + +ALIGNED8 static const Texture texture_menu_font_char_inverted_question_mark[] = { +#include "levels/menu/main_menu_seg7.inverted_question_mark.ia8.inc.c" +}; + +ALIGNED8 static const u8 texture_menu_font_char_diacritic_grave[] = { +#include "levels/menu/main_menu_seg7.grave.ia8.inc.c" +}; + +ALIGNED8 static const u8 texture_menu_font_char_diacritic_acute[] = { +#include "levels/menu/main_menu_seg7.acute.ia8.inc.c" +}; + +ALIGNED8 static const u8 texture_menu_font_char_diacritic_circumflex[] = { +#include "levels/menu/main_menu_seg7.circumflex.ia8.inc.c" +}; + +ALIGNED8 static const u8 texture_menu_font_char_diacritic_tilde[] = { +#include "levels/menu/main_menu_seg7.tilde_diacritic.ia8.inc.c" +}; + +ALIGNED8 static const u8 texture_menu_font_char_diacritic_umlaut[] = { +#include "levels/menu/main_menu_seg7.umlaut.ia8.inc.c" +}; + +ALIGNED8 static const Texture texture_menu_font_char_diacritic_cedilla[] = { +#include "levels/menu/main_menu_seg7.cedilla.ia8.inc.c" +}; + +ALIGNED8 static const Texture texture_menu_font_missing_character[] = { +#include "levels/menu/main_menu_seg7.missing_character.ia8.inc.c" +}; + +// Diacritics for the small white menu font +const struct DiacriticLUTEntry menu_font_diacritic_lut[] = { + [TEXT_DIACRITIC_CIRCUMFLEX_UPPERCASE] = {-1, 5, "ˆ"}, + [TEXT_DIACRITIC_ACUTE_UPPERCASE] = { 0, 5, "ˊ"}, + [TEXT_DIACRITIC_GRAVE_UPPERCASE] = { 0, 5, "ˋ"}, + [TEXT_DIACRITIC_TILDE_UPPERCASE] = { 0, 5, "˜"}, + [TEXT_DIACRITIC_UMLAUT_UPPERCASE] = { 0, 4, "¨"}, + [TEXT_DIACRITIC_CEDILLA] = { 0, -2, "¸"}, +#ifdef JAPANESE_CHARACTERS + [TEXT_DIACRITIC_DAKUTEN] = { 6, 7, "゛"}, + [TEXT_DIACRITIC_HANDAKUTEN] = { 6, 7, "゜"}, #endif +}; + +// ASCII lookup table for the small white menu font +const struct AsciiCharLUTEntry menu_font_lut[] = { + {NULL, 4}, // 32 " " + {texture_menu_font_char_exclamation, 5}, // 33 "!" + {NULL, 0}, // 34 "\"" (Unimplemented) + {NULL, 0}, // 35 "#" (Unimplemented) + {NULL, 0}, // 36 "$" (Unimplemented) + {NULL, 0}, // 37 "%" (Unimplemented) + {texture_menu_font_char_ampersand, 8}, // 38 "&" + {texture_menu_font_char_apostrophe, 4}, // 39 "'" + {NULL, 0}, // 40 "(" (Unimplemented) + {NULL, 0}, // 41 ")" (Unimplemented) + {NULL, 0}, // 42 "*" (Unimplemented) + {NULL, 0}, // 43 "+" (Unimplemented) + {texture_menu_font_char_comma, 4}, // 44 "," + {texture_menu_font_char_dash, 6}, // 45 "-" + {texture_menu_font_char_period, 4}, // 46 "." + {NULL, 0}, // 47 "/" (Unimplemented) + {texture_menu_font_char_0, 7}, // 48 "0" + {texture_menu_font_char_1, 7}, // 49 "1" + {texture_menu_font_char_2, 7}, // 50 "2" + {texture_menu_font_char_3, 7}, // 51 "3" + {texture_menu_font_char_4, 7}, // 52 "4" + {texture_menu_font_char_5, 7}, // 53 "5" + {texture_menu_font_char_6, 7}, // 54 "6" + {texture_menu_font_char_7, 7}, // 55 "7" + {texture_menu_font_char_8, 7}, // 56 "8" + {texture_menu_font_char_9, 7}, // 57 "9" + {texture_menu_font_char_colon, 4}, // 58 ":" + {NULL, 0}, // 59 ";" (Unimplemented) + {NULL, 0}, // 60 "<" (Unimplemented) + {NULL, 0}, // 61 "=" (Unimplemented) + {NULL, 0}, // 62 ">" (Unimplemented) + {texture_menu_font_char_question, 7}, // 63 "?" + {NULL, 0}, // 64 "@" (Unimplemented) + {texture_menu_font_char_A, 6}, // 65 "A" + {texture_menu_font_char_B, 6}, // 66 "B" + {texture_menu_font_char_C, 6}, // 67 "C" + {texture_menu_font_char_D, 6}, // 68 "D" + {texture_menu_font_char_E, 6}, // 69 "E" + {texture_menu_font_char_F, 6}, // 70 "F" + {texture_menu_font_char_G, 6}, // 71 "G" + {texture_menu_font_char_H, 6}, // 72 "H" + {texture_menu_font_char_I, 5}, // 73 "I" + {texture_menu_font_char_J, 6}, // 74 "J" + {texture_menu_font_char_K, 6}, // 75 "K" + {texture_menu_font_char_L, 5}, // 76 "L" + {texture_menu_font_char_M, 8}, // 77 "M" + {texture_menu_font_char_N, 8}, // 78 "N" + {texture_menu_font_char_O, 6}, // 79 "O" + {texture_menu_font_char_P, 6}, // 80 "P" + {texture_menu_font_char_Q, 6}, // 81 "Q" + {texture_menu_font_char_R, 6}, // 82 "R" + {texture_menu_font_char_S, 6}, // 83 "S" + {texture_menu_font_char_T, 5}, // 84 "T" + {texture_menu_font_char_U, 6}, // 85 "U" + {texture_menu_font_char_V, 6}, // 86 "V" + {texture_menu_font_char_W, 8}, // 87 "W" + {texture_menu_font_char_X, 7}, // 88 "X" + {texture_menu_font_char_Y, 6}, // 89 "Y" + {texture_menu_font_char_Z, 6}, // 90 "Z" + {NULL, 0}, // 91 "[" (Unimplemented) + {NULL, 0}, // 92 "\\" (Unimplemented) + {NULL, 0}, // 93 "]" (Unimplemented) + {NULL, 0}, // 94 "^" (Unimplemented) + {NULL, 0}, // 95 "_" (Unimplemented) + {NULL, 0}, // 96 "`" (Unimplemented) + {texture_menu_font_char_A, 6}, // 97 "a" + {texture_menu_font_char_B, 6}, // 98 "b" + {texture_menu_font_char_C, 6}, // 99 "c" + {texture_menu_font_char_D, 6}, // 100 "d" + {texture_menu_font_char_E, 6}, // 101 "e" + {texture_menu_font_char_F, 6}, // 102 "f" + {texture_menu_font_char_G, 6}, // 103 "g" + {texture_menu_font_char_H, 6}, // 104 "h" + {texture_menu_font_char_I, 5}, // 105 "i" + {texture_menu_font_char_J, 6}, // 106 "j" + {texture_menu_font_char_K, 6}, // 107 "k" + {texture_menu_font_char_L, 5}, // 108 "l" + {texture_menu_font_char_M, 8}, // 109 "m" + {texture_menu_font_char_N, 8}, // 110 "n" + {texture_menu_font_char_O, 6}, // 111 "o" + {texture_menu_font_char_P, 6}, // 112 "p" + {texture_menu_font_char_Q, 6}, // 113 "q" + {texture_menu_font_char_R, 6}, // 114 "r" + {texture_menu_font_char_S, 6}, // 115 "s" + {texture_menu_font_char_T, 5}, // 116 "t" + {texture_menu_font_char_U, 6}, // 117 "u" + {texture_menu_font_char_V, 6}, // 118 "v" + {texture_menu_font_char_W, 8}, // 119 "w" + {texture_menu_font_char_X, 7}, // 120 "x" + {texture_menu_font_char_Y, 6}, // 121 "y" + {texture_menu_font_char_Z, 6}, // 122 "z" + {texture_menu_font_char_mface1, 8}, // 123 "{" (First half of Mario face) + {NULL, 0}, // 124 "|" (Unimplemented) + {texture_menu_font_char_mface2, 8}, // 125 "}" (Second half of Mario face) + {NULL, 0}, // 126 "~" (Unimplemented) +}; + +// UTF-8 lookup tables for the small white menu font +const struct Utf8CharLUTEntry menu_font_utf8_2byte_lut[] = { + {0x00A1, 5, 0, texture_menu_font_char_inverted_exclamation_mark}, // ¡ + {0x00A8, 0, 0, texture_menu_font_char_diacritic_umlaut}, // ¨ + {0x00B8, 0, 0, texture_menu_font_char_diacritic_cedilla}, // ¸ + {0x00BF, 7, 0, texture_menu_font_char_inverted_question_mark}, // ¿ + + {0x00C0, 6, TEXT_DIACRITIC_GRAVE_UPPERCASE, texture_menu_font_char_A}, // À + {0x00C1, 6, TEXT_DIACRITIC_ACUTE_UPPERCASE, texture_menu_font_char_A}, // Á + {0x00C2, 6, TEXT_DIACRITIC_CIRCUMFLEX_UPPERCASE, texture_menu_font_char_A}, // Â + {0x00C3, 6, TEXT_DIACRITIC_TILDE_UPPERCASE, texture_menu_font_char_A}, // Ã + {0x00C4, 6, TEXT_DIACRITIC_UMLAUT_UPPERCASE, texture_menu_font_char_A}, // Ä + + {0x00C7, 6, TEXT_DIACRITIC_CEDILLA, texture_menu_font_char_C}, // Ç + {0x00C8, 6, TEXT_DIACRITIC_GRAVE_UPPERCASE, texture_menu_font_char_E}, // È + {0x00C9, 6, TEXT_DIACRITIC_ACUTE_UPPERCASE, texture_menu_font_char_E}, // É + {0x00CA, 6, TEXT_DIACRITIC_CIRCUMFLEX_UPPERCASE, texture_menu_font_char_E}, // Ê + {0x00CB, 6, TEXT_DIACRITIC_UMLAUT_UPPERCASE, texture_menu_font_char_E}, // Ë + + {0x00CC, 5, TEXT_DIACRITIC_GRAVE_UPPERCASE, texture_menu_font_char_I}, // Ì + {0x00CD, 5, TEXT_DIACRITIC_ACUTE_UPPERCASE, texture_menu_font_char_I}, // Í + {0x00CE, 5, TEXT_DIACRITIC_CIRCUMFLEX_UPPERCASE, texture_menu_font_char_I}, // Î + {0x00CF, 5, TEXT_DIACRITIC_UMLAUT_UPPERCASE, texture_menu_font_char_I}, // Ï + + {0x00D1, 6, TEXT_DIACRITIC_TILDE_UPPERCASE, texture_menu_font_char_N}, // Ñ + {0x00D2, 6, TEXT_DIACRITIC_GRAVE_UPPERCASE, texture_menu_font_char_O}, // Ò + {0x00D3, 6, TEXT_DIACRITIC_ACUTE_UPPERCASE, texture_menu_font_char_O}, // Ó + {0x00D4, 6, TEXT_DIACRITIC_CIRCUMFLEX_UPPERCASE, texture_menu_font_char_O}, // Ô + {0x00D5, 6, TEXT_DIACRITIC_TILDE_UPPERCASE, texture_menu_font_char_O}, // Õ + {0x00D6, 6, TEXT_DIACRITIC_UMLAUT_UPPERCASE, texture_menu_font_char_O}, // Ö + + {0x00D7, 9, 0, texture_menu_font_char_multiply}, // × + + {0x00D9, 6, TEXT_DIACRITIC_GRAVE_UPPERCASE, texture_menu_font_char_U}, // Ù + {0x00DA, 6, TEXT_DIACRITIC_ACUTE_UPPERCASE, texture_menu_font_char_U}, // Ú + {0x00DB, 6, TEXT_DIACRITIC_CIRCUMFLEX_UPPERCASE, texture_menu_font_char_U}, // Û + {0x00DC, 6, TEXT_DIACRITIC_UMLAUT_UPPERCASE, texture_menu_font_char_U}, // Ü + + {0x02C6, 0, 0, texture_menu_font_char_diacritic_circumflex}, // ˆ + {0x02CA, 0, 0, texture_menu_font_char_diacritic_acute}, // ˊ + {0x02CB, 0, 0, texture_menu_font_char_diacritic_grave}, // ˋ + {0x02DC, 0, 0, texture_menu_font_char_diacritic_tilde}, // ˜ +}; + +const struct Utf8CharLUTEntry menu_font_utf8_3byte_lut[] = { + {0x2605, 10, 0, texture_menu_font_char_star_filled}, // ★ + {0x272A, 8, 0, texture_menu_font_char_coin}, // ✪ + +#ifdef JAPANESE_CHARACTERS + {0x3000, 9, 0, NULL}, // " " (ideographic space) + {0x3041, 9, 0, texture_menu_font_char_jp_hiragana_small_a}, // ぁ + {0x3042, 9, 0, texture_menu_font_char_jp_hiragana_a}, // あ + {0x3043, 9, 0, texture_menu_font_char_jp_hiragana_small_i}, // ぃ + {0x3044, 9, 0, texture_menu_font_char_jp_hiragana_i}, // い + {0x3045, 9, 0, texture_menu_font_char_jp_hiragana_small_u}, // ぅ + {0x3046, 9, 0, texture_menu_font_char_jp_hiragana_u}, // う + {0x3047, 9, 0, texture_menu_font_char_jp_hiragana_small_e}, // ぇ + {0x3048, 9, 0, texture_menu_font_char_jp_hiragana_e}, // え + {0x3049, 9, 0, texture_menu_font_char_jp_hiragana_small_o}, // ぉ + {0x304A, 9, 0, texture_menu_font_char_jp_hiragana_o}, // お + {0x304B, 9, 0, texture_menu_font_char_jp_hiragana_ka}, // か + {0x304C, 9, TEXT_DIACRITIC_DAKUTEN, texture_menu_font_char_jp_hiragana_ka}, // が + {0x304D, 9, 0, texture_menu_font_char_jp_hiragana_ki}, // き + {0x304E, 9, TEXT_DIACRITIC_DAKUTEN, texture_menu_font_char_jp_hiragana_ki}, // ぎ + {0x304F, 9, 0, texture_menu_font_char_jp_hiragana_ku}, // く + {0x3050, 9, TEXT_DIACRITIC_DAKUTEN, texture_menu_font_char_jp_hiragana_ku}, // ぐ + {0x3051, 9, 0, texture_menu_font_char_jp_hiragana_ke}, // け + {0x3052, 9, TEXT_DIACRITIC_DAKUTEN, texture_menu_font_char_jp_hiragana_ke}, // げ + {0x3053, 9, 0, texture_menu_font_char_jp_hiragana_ko}, // こ + {0x3054, 9, TEXT_DIACRITIC_DAKUTEN, texture_menu_font_char_jp_hiragana_ko}, // ご + {0x3055, 9, 0, texture_menu_font_char_jp_hiragana_sa}, // さ + {0x3056, 9, TEXT_DIACRITIC_DAKUTEN, texture_menu_font_char_jp_hiragana_sa}, // ざ + {0x3057, 9, 0, texture_menu_font_char_jp_hiragana_shi}, // し + {0x3058, 9, TEXT_DIACRITIC_DAKUTEN, texture_menu_font_char_jp_hiragana_shi}, // じ + {0x3059, 9, 0, texture_menu_font_char_jp_hiragana_su}, // す + {0x305A, 9, TEXT_DIACRITIC_DAKUTEN, texture_menu_font_char_jp_hiragana_su}, // ず + {0x305B, 9, 0, texture_menu_font_char_jp_hiragana_se}, // せ + {0x305C, 9, TEXT_DIACRITIC_DAKUTEN, texture_menu_font_char_jp_hiragana_se}, // ぜ + {0x305D, 9, 0, texture_menu_font_char_jp_hiragana_so}, // そ + {0x305E, 9, TEXT_DIACRITIC_DAKUTEN, texture_menu_font_char_jp_hiragana_so}, // ぞ + {0x305F, 9, 0, texture_menu_font_char_jp_hiragana_ta}, // た + {0x3060, 9, TEXT_DIACRITIC_DAKUTEN, texture_menu_font_char_jp_hiragana_ta}, // だ + {0x3061, 9, 0, texture_menu_font_char_jp_hiragana_chi}, // ち + {0x3062, 9, TEXT_DIACRITIC_DAKUTEN, texture_menu_font_char_jp_hiragana_chi}, // ぢ + {0x3063, 9, 0, texture_menu_font_char_jp_hiragana_small_tsu}, // っ + {0x3064, 9, 0, texture_menu_font_char_jp_hiragana_tsu}, // つ + {0x3065, 9, TEXT_DIACRITIC_DAKUTEN, texture_menu_font_char_jp_hiragana_tsu}, // づ + {0x3066, 9, 0, texture_menu_font_char_jp_hiragana_te}, // て + {0x3067, 9, TEXT_DIACRITIC_DAKUTEN, texture_menu_font_char_jp_hiragana_te}, // で + {0x3068, 9, 0, texture_menu_font_char_jp_hiragana_to}, // と + {0x3069, 9, TEXT_DIACRITIC_DAKUTEN, texture_menu_font_char_jp_hiragana_to}, // ど + {0x306A, 9, 0, texture_menu_font_char_jp_hiragana_na}, // な + {0x306B, 9, 0, texture_menu_font_char_jp_hiragana_ni}, // に + {0x306C, 9, 0, texture_menu_font_char_jp_hiragana_nu}, // ぬ + {0x306D, 9, 0, texture_menu_font_char_jp_hiragana_ne}, // ね + {0x306E, 9, 0, texture_menu_font_char_jp_hiragana_no}, // の + {0x306F, 9, 0, texture_menu_font_char_jp_hiragana_ha}, // は + {0x3070, 9, TEXT_DIACRITIC_DAKUTEN, texture_menu_font_char_jp_hiragana_ha}, // ば + {0x3071, 9, TEXT_DIACRITIC_HANDAKUTEN, texture_menu_font_char_jp_hiragana_ha}, // ぱ + {0x3072, 9, 0, texture_menu_font_char_jp_hiragana_hi}, // ひ + {0x3073, 9, TEXT_DIACRITIC_DAKUTEN, texture_menu_font_char_jp_hiragana_hi}, // び + {0x3074, 9, TEXT_DIACRITIC_HANDAKUTEN, texture_menu_font_char_jp_hiragana_hi}, // ぴ + {0x3075, 9, 0, texture_menu_font_char_jp_hiragana_fu}, // ふ + {0x3076, 9, TEXT_DIACRITIC_DAKUTEN, texture_menu_font_char_jp_hiragana_fu}, // ぶ + {0x3077, 9, TEXT_DIACRITIC_HANDAKUTEN, texture_menu_font_char_jp_hiragana_fu}, // ぷ + {0x3078, 9, 0, texture_menu_font_char_jp_hiragana_he}, // へ + {0x3079, 9, TEXT_DIACRITIC_DAKUTEN, texture_menu_font_char_jp_hiragana_he}, // べ + {0x307A, 9, TEXT_DIACRITIC_HANDAKUTEN, texture_menu_font_char_jp_hiragana_he}, // ぺ + {0x307B, 9, 0, texture_menu_font_char_jp_hiragana_ho}, // ほ + {0x307C, 9, TEXT_DIACRITIC_DAKUTEN, texture_menu_font_char_jp_hiragana_ho}, // ぼ + {0x307D, 9, TEXT_DIACRITIC_HANDAKUTEN, texture_menu_font_char_jp_hiragana_ho}, // ぽ + {0x307E, 9, 0, texture_menu_font_char_jp_hiragana_ma}, // ま + {0x307F, 9, 0, texture_menu_font_char_jp_hiragana_mi}, // み + {0x3080, 9, 0, texture_menu_font_char_jp_hiragana_mu}, // む + {0x3081, 9, 0, texture_menu_font_char_jp_hiragana_me}, // め + {0x3082, 9, 0, texture_menu_font_char_jp_hiragana_mo}, // も + {0x3083, 9, 0, texture_menu_font_char_jp_hiragana_small_ya}, // ゃ + {0x3084, 9, 0, texture_menu_font_char_jp_hiragana_ya}, // や + {0x3085, 9, 0, texture_menu_font_char_jp_hiragana_small_yu}, // ゅ + {0x3086, 9, 0, texture_menu_font_char_jp_hiragana_yu}, // ゆ + {0x3087, 9, 0, texture_menu_font_char_jp_hiragana_small_yo}, // ょ + {0x3088, 9, 0, texture_menu_font_char_jp_hiragana_yo}, // よ + {0x3089, 9, 0, texture_menu_font_char_jp_hiragana_ra}, // ら + {0x308A, 9, 0, texture_menu_font_char_jp_hiragana_ri}, // り + {0x308B, 9, 0, texture_menu_font_char_jp_hiragana_ru}, // る + {0x308C, 9, 0, texture_menu_font_char_jp_hiragana_re}, // れ + {0x308D, 9, 0, texture_menu_font_char_jp_hiragana_ro}, // ろ + {0x308F, 9, 0, texture_menu_font_char_jp_hiragana_wa}, // わ + {0x3092, 9, 0, texture_menu_font_char_jp_hiragana_wo}, // を + {0x3093, 9, 0, texture_menu_font_char_jp_hiragana_n}, // ん + + {0x309B, 0, 0, texture_menu_font_char_jp_dakuten}, // ゛ + {0x309C, 0, 0, texture_menu_font_char_jp_handakuten}, // ゜ + + {0x30A1, 9, 0, texture_menu_font_char_jp_katakana_small_a}, // ァ + {0x30A2, 9, 0, texture_menu_font_char_jp_katakana_a}, // ア + {0x30A3, 9, 0, texture_menu_font_char_jp_katakana_small_i}, // ィ + {0x30A4, 9, 0, texture_menu_font_char_jp_katakana_i}, // イ + {0x30A5, 9, 0, texture_menu_font_char_jp_katakana_small_u}, // ゥ + {0x30A6, 9, 0, texture_menu_font_char_jp_katakana_u}, // ウ + {0x30A7, 9, 0, texture_menu_font_char_jp_katakana_small_e}, // ェ + {0x30A8, 9, 0, texture_menu_font_char_jp_katakana_e}, // エ + {0x30A9, 9, 0, texture_menu_font_char_jp_katakana_small_o}, // ォ + {0x30AA, 9, 0, texture_menu_font_char_jp_katakana_o}, // オ + {0x30AB, 9, 0, texture_menu_font_char_jp_katakana_ka}, // カ + {0x30AC, 9, TEXT_DIACRITIC_DAKUTEN, texture_menu_font_char_jp_katakana_ka}, // ガ + {0x30AD, 9, 0, texture_menu_font_char_jp_katakana_ki}, // キ + {0x30AE, 9, TEXT_DIACRITIC_DAKUTEN, texture_menu_font_char_jp_katakana_ki}, // ギ + {0x30AF, 9, 0, texture_menu_font_char_jp_katakana_ku}, // ク + {0x30B0, 9, TEXT_DIACRITIC_DAKUTEN, texture_menu_font_char_jp_katakana_ku}, // グ + {0x30B1, 9, 0, texture_menu_font_char_jp_katakana_ke}, // ケ + {0x30B2, 9, TEXT_DIACRITIC_DAKUTEN, texture_menu_font_char_jp_katakana_ke}, // ゲ + {0x30B3, 9, 0, texture_menu_font_char_jp_katakana_ko}, // コ + {0x30B4, 9, TEXT_DIACRITIC_DAKUTEN, texture_menu_font_char_jp_katakana_ko}, // ゴ + {0x30B5, 9, 0, texture_menu_font_char_jp_katakana_sa}, // サ + {0x30B6, 9, TEXT_DIACRITIC_DAKUTEN, texture_menu_font_char_jp_katakana_sa}, // ザ + {0x30B7, 9, 0, texture_menu_font_char_jp_katakana_shi}, // シ + {0x30B8, 9, TEXT_DIACRITIC_DAKUTEN, texture_menu_font_char_jp_katakana_shi}, // ジ + {0x30B9, 9, 0, texture_menu_font_char_jp_katakana_su}, // ス + {0x30BA, 9, TEXT_DIACRITIC_DAKUTEN, texture_menu_font_char_jp_katakana_su}, // ズ + {0x30BB, 9, 0, texture_menu_font_char_jp_katakana_se}, // セ + {0x30BC, 9, TEXT_DIACRITIC_DAKUTEN, texture_menu_font_char_jp_katakana_se}, // ゼ + {0x30BD, 9, 0, texture_menu_font_char_jp_katakana_so}, // ソ + {0x30BE, 9, TEXT_DIACRITIC_DAKUTEN, texture_menu_font_char_jp_katakana_so}, // ゾ + {0x30BF, 9, 0, texture_menu_font_char_jp_katakana_ta}, // タ + {0x30C0, 9, TEXT_DIACRITIC_DAKUTEN, texture_menu_font_char_jp_katakana_ta}, // ダ + {0x30C1, 9, 0, texture_menu_font_char_jp_katakana_chi}, // チ + {0x30C2, 9, TEXT_DIACRITIC_DAKUTEN, texture_menu_font_char_jp_katakana_chi}, // ヂ + {0x30C3, 9, 0, texture_menu_font_char_jp_katakana_small_tsu}, // ッ + {0x30C4, 9, 0, texture_menu_font_char_jp_katakana_tsu}, // ツ + {0x30C5, 9, TEXT_DIACRITIC_DAKUTEN, texture_menu_font_char_jp_katakana_tsu}, // ヅ + {0x30C6, 9, 0, texture_menu_font_char_jp_katakana_te}, // テ + {0x30C7, 9, TEXT_DIACRITIC_DAKUTEN, texture_menu_font_char_jp_katakana_te}, // デ + {0x30C8, 9, 0, texture_menu_font_char_jp_katakana_to}, // ト + {0x30C9, 9, TEXT_DIACRITIC_DAKUTEN, texture_menu_font_char_jp_katakana_to}, // ド + {0x30CA, 9, 0, texture_menu_font_char_jp_katakana_na}, // ナ + {0x30CB, 9, 0, texture_menu_font_char_jp_katakana_ni}, // ニ + {0x30CC, 9, 0, texture_menu_font_char_jp_katakana_nu}, // ヌ + {0x30CD, 9, 0, texture_menu_font_char_jp_katakana_ne}, // ネ + {0x30CE, 9, 0, texture_menu_font_char_jp_katakana_no}, // ノ + {0x30CF, 9, 0, texture_menu_font_char_jp_katakana_ha}, // ハ + {0x30D0, 9, TEXT_DIACRITIC_DAKUTEN, texture_menu_font_char_jp_katakana_ha}, // バ + {0x30D1, 9, TEXT_DIACRITIC_HANDAKUTEN, texture_menu_font_char_jp_katakana_ha}, // パ + {0x30D2, 9, 0, texture_menu_font_char_jp_katakana_hi}, // ヒ + {0x30D3, 9, TEXT_DIACRITIC_DAKUTEN, texture_menu_font_char_jp_katakana_hi}, // ビ + {0x30D4, 9, TEXT_DIACRITIC_HANDAKUTEN, texture_menu_font_char_jp_katakana_hi}, // ピ + {0x30D5, 9, 0, texture_menu_font_char_jp_katakana_fu}, // フ + {0x30D6, 9, TEXT_DIACRITIC_DAKUTEN, texture_menu_font_char_jp_katakana_fu}, // ブ + {0x30D7, 9, TEXT_DIACRITIC_HANDAKUTEN, texture_menu_font_char_jp_katakana_fu}, // プ + {0x30D8, 9, 0, texture_menu_font_char_jp_katakana_he}, // ヘ + {0x30D9, 9, TEXT_DIACRITIC_DAKUTEN, texture_menu_font_char_jp_katakana_he}, // ベ + {0x30DA, 9, TEXT_DIACRITIC_HANDAKUTEN, texture_menu_font_char_jp_katakana_he}, // ペ + {0x30DB, 9, 0, texture_menu_font_char_jp_katakana_ho}, // ホ + {0x30DC, 9, TEXT_DIACRITIC_DAKUTEN, texture_menu_font_char_jp_katakana_ho}, // ボ + {0x30DD, 9, TEXT_DIACRITIC_HANDAKUTEN, texture_menu_font_char_jp_katakana_ho}, // ポ + {0x30DE, 9, 0, texture_menu_font_char_jp_katakana_ma}, // マ + {0x30DF, 9, 0, texture_menu_font_char_jp_katakana_mi}, // ミ + {0x30E0, 9, 0, texture_menu_font_char_jp_katakana_mu}, // ム + {0x30E1, 9, 0, texture_menu_font_char_jp_katakana_me}, // メ + {0x30E2, 9, 0, texture_menu_font_char_jp_katakana_mo}, // モ + {0x30E3, 9, 0, texture_menu_font_char_jp_katakana_small_ya}, // ャ + {0x30E4, 9, 0, texture_menu_font_char_jp_katakana_ya}, // ヤ + {0x30E5, 9, 0, texture_menu_font_char_jp_katakana_small_yu}, // ュ + {0x30E6, 9, 0, texture_menu_font_char_jp_katakana_yu}, // ユ + {0x30E7, 9, 0, texture_menu_font_char_jp_katakana_small_yo}, // ョ + {0x30E8, 9, 0, texture_menu_font_char_jp_katakana_yo}, // ヨ + {0x30E9, 9, 0, texture_menu_font_char_jp_katakana_ra}, // ラ + {0x30EA, 9, 0, texture_menu_font_char_jp_katakana_ri}, // リ + {0x30EB, 9, 0, texture_menu_font_char_jp_katakana_ru}, // ル + {0x30EC, 9, 0, texture_menu_font_char_jp_katakana_re}, // レ + {0x30ED, 9, 0, texture_menu_font_char_jp_katakana_ro}, // ロ + {0x30EF, 9, 0, texture_menu_font_char_jp_katakana_wa}, // ワ + {0x30F2, 9, 0, texture_menu_font_char_jp_katakana_wo}, // ヲ + {0x30F3, 9, 0, texture_menu_font_char_jp_katakana_n}, // ン + {0x30FC, 9, 0, texture_menu_font_char_jp_long_vowel}, // ー + + {0xFF01, 9, 0, texture_menu_font_char_jp_exclamation}, // ! + {0xFF10, 9, 0, texture_menu_font_char_jp_0}, // 0 + {0xFF11, 9, 0, texture_menu_font_char_jp_1}, // 1 + {0xFF12, 9, 0, texture_menu_font_char_jp_2}, // 2 + {0xFF13, 9, 0, texture_menu_font_char_jp_3}, // 3 + {0xFF14, 9, 0, texture_menu_font_char_jp_4}, // 4 + {0xFF15, 9, 0, texture_menu_font_char_jp_5}, // 5 + {0xFF16, 9, 0, texture_menu_font_char_jp_6}, // 6 + {0xFF17, 9, 0, texture_menu_font_char_jp_7}, // 7 + {0xFF18, 9, 0, texture_menu_font_char_jp_8}, // 8 + {0xFF19, 9, 0, texture_menu_font_char_jp_9}, // 9 + {0xFF21, 9, 0, texture_menu_font_char_jp_A}, // A + {0xFF22, 9, 0, texture_menu_font_char_jp_B}, // B + {0xFF23, 9, 0, texture_menu_font_char_jp_C}, // C + {0xFF24, 9, 0, texture_menu_font_char_jp_D}, // D +#endif +}; + +const struct Utf8CharLUTEntry menu_font_utf8_4byte_lut[] = { + +}; + +const struct Utf8CharLUTEntry menu_font_utf8_missing_char = {0, 8, 0, texture_menu_font_missing_character}; + +const struct Utf8LUT menu_font_utf8_lut = { + menu_font_utf8_2byte_lut, + menu_font_utf8_3byte_lut, + menu_font_utf8_4byte_lut, + ARRAY_COUNT(menu_font_utf8_2byte_lut), + ARRAY_COUNT(menu_font_utf8_3byte_lut), + ARRAY_COUNT(menu_font_utf8_4byte_lut), + &menu_font_utf8_missing_char, +}; // Menu small font print table -// 0x0700CD08 -const Texture *const menu_font_lut[] = { -#if defined(VERSION_JP) || defined(VERSION_SH) - texture_menu_font_char_jp_0, texture_menu_font_char_jp_1, texture_menu_font_char_jp_2, texture_menu_font_char_jp_3, - texture_menu_font_char_jp_4, texture_menu_font_char_jp_5, texture_menu_font_char_jp_6, texture_menu_font_char_jp_7, - texture_menu_font_char_jp_8, texture_menu_font_char_jp_9, texture_menu_font_char_jp_A, texture_menu_font_char_jp_B, - texture_menu_font_char_jp_C, texture_menu_font_char_jp_D, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, - texture_menu_font_char_jp_hiragana_a, texture_menu_font_char_jp_hiragana_i, texture_menu_font_char_jp_hiragana_u, texture_menu_font_char_jp_hiragana_c, - texture_menu_font_char_jp_hiragana_o, texture_menu_font_char_jp_hiragana_ka, texture_menu_font_char_jp_hiragana_ki, texture_menu_font_char_jp_hiragana_ku, - texture_menu_font_char_jp_hiragana_ke, texture_menu_font_char_jp_hiragana_ko, texture_menu_font_char_jp_hiragana_sa, texture_menu_font_char_jp_hiragana_shi, - texture_menu_font_char_jp_hiragana_su, texture_menu_font_char_jp_hiragana_se, texture_menu_font_char_jp_hiragana_so, texture_menu_font_char_jp_hiragana_ta, - texture_menu_font_char_jp_hiragana_chi, texture_menu_font_char_jp_hiragana_tsu, texture_menu_font_char_jp_hiragana_te, texture_menu_font_char_jp_hiragana_to, - texture_menu_font_char_jp_hiragana_na, texture_menu_font_char_jp_hiragana_ni, texture_menu_font_char_jp_hiragana_nu, texture_menu_font_char_jp_hiragana_ne, - texture_menu_font_char_jp_hiragana_no, texture_menu_font_char_jp_hiragana_ha, texture_menu_font_char_jp_hiragana_hi, texture_menu_font_char_jp_hiragana_hu, - texture_menu_font_char_jp_hiragana_he, texture_menu_font_char_jp_hiragana_ho, texture_menu_font_char_jp_hiragana_ma, texture_menu_font_char_jp_hiragana_mi, - texture_menu_font_char_jp_hiragana_mu, texture_menu_font_char_jp_hiragana_me, texture_menu_font_char_jp_hiragana_mo, texture_menu_font_char_jp_hiragana_ya, - texture_menu_font_char_jp_hiragana_yu, texture_menu_font_char_jp_hiragana_yo, texture_menu_font_char_jp_hiragana_ra, texture_menu_font_char_jp_hiragana_ri, - texture_menu_font_char_jp_hiragana_ru, texture_menu_font_char_jp_hiragana_re, texture_menu_font_char_jp_hiragana_ro, texture_menu_font_char_jp_hiragana_wa, - texture_menu_font_char_jp_hiragana_wo, texture_menu_font_char_jp_hiragana_n, 0x0, 0x0, - texture_menu_font_char_jp_katakana_a, texture_menu_font_char_jp_katakana_i, texture_menu_font_char_jp_katakana_u, texture_menu_font_char_jp_katakana_e, - texture_menu_font_char_jp_katakana_o, texture_menu_font_char_jp_katakana_ka, texture_menu_font_char_jp_katakana_ki, texture_menu_font_char_jp_katakana_ku, - texture_menu_font_char_jp_katakana_ke, texture_menu_font_char_jp_katakana_ko, texture_menu_font_char_jp_katakana_sa, texture_menu_font_char_jp_katakana_shi, - texture_menu_font_char_jp_katakana_su, texture_menu_font_char_jp_katakana_se, texture_menu_font_char_jp_katakana_so, texture_menu_font_char_jp_katakana_ta, - texture_menu_font_char_jp_katakana_chi, texture_menu_font_char_jp_katakana_tsu, texture_menu_font_char_jp_katakana_te, texture_menu_font_char_jp_katakana_to, - texture_menu_font_char_jp_katakana_na, texture_menu_font_char_jp_katakana_ni, texture_menu_font_char_jp_katakana_nu, texture_menu_font_char_jp_katakana_ne, - texture_menu_font_char_jp_katakana_no, texture_menu_font_char_jp_katakana_ha, texture_menu_font_char_jp_katakana_hi, texture_menu_font_char_jp_katakana_hu, - texture_menu_font_char_jp_katakana_he, texture_menu_font_char_jp_katakana_ho, texture_menu_font_char_jp_katakana_ma, texture_menu_font_char_jp_katakana_mi, - texture_menu_font_char_jp_katakana_mu, texture_menu_font_char_jp_katakana_me, texture_menu_font_char_jp_katakana_mo, texture_menu_font_char_jp_katakana_ya, - texture_menu_font_char_jp_katakana_yu, texture_menu_font_char_jp_katakana_yo, texture_menu_font_char_jp_katakana_ra, texture_menu_font_char_jp_katakana_ri, - texture_menu_font_char_jp_katakana_ru, texture_menu_font_char_jp_katakana_re, texture_menu_font_char_jp_katakana_ro, texture_menu_font_char_jp_katakana_wa, - texture_menu_font_char_jp_katakana_wo, texture_menu_font_char_jp_katakana_n, 0x0, texture_menu_font_char_jp_long_vowel, - texture_menu_font_char_jp_hiragana_small_e, texture_menu_font_char_jp_hiragana_small_tsu, texture_menu_font_char_jp_hiragana_small_ka, texture_menu_font_char_jp_hiragana_small_yu, - texture_menu_font_char_jp_hiragana_small_yo, texture_menu_font_char_jp_hiragana_small_a, texture_menu_font_char_jp_hiragana_small_i, texture_menu_font_char_jp_hiragana_small_u, - texture_menu_font_char_jp_hiragana_small_o, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, - texture_menu_font_char_jp_katakana_small_e, texture_menu_font_char_jp_katakana_small_tsu, texture_menu_font_char_jp_katakana_small_ka, texture_menu_font_char_jp_katakana_small_yu, - texture_menu_font_char_jp_katakana_small_yo, texture_menu_font_char_jp_katakana_small_a, texture_menu_font_char_jp_katakana_small_i, texture_menu_font_char_jp_katakana_small_u, - texture_menu_font_char_jp_katakana_small_o, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, - texture_menu_font_char_jp_dakuten, texture_menu_font_char_jp_handakuten, texture_menu_font_char_jp_exclamation, 0x0, - 0x0, 0x0, 0x0, 0x0, - 0x0, texture_menu_font_char_jp_coin, texture_menu_font_char_jp_star_filled, texture_menu_font_char_jp_multiply, - 0x0, 0x0, 0x0, 0x0, -#else - texture_menu_font_char_0, texture_menu_font_char_1, texture_menu_font_char_2, texture_menu_font_char_3, - texture_menu_font_char_4, texture_menu_font_char_5, texture_menu_font_char_6, texture_menu_font_char_7, - texture_menu_font_char_8, texture_menu_font_char_9, texture_menu_font_char_A, texture_menu_font_char_B, - texture_menu_font_char_C, texture_menu_font_char_D, texture_menu_font_char_E, texture_menu_font_char_F, - texture_menu_font_char_G, texture_menu_font_char_H, texture_menu_font_char_I, texture_menu_font_char_J, - texture_menu_font_char_K, texture_menu_font_char_L, texture_menu_font_char_M, texture_menu_font_char_N, - texture_menu_font_char_O, texture_menu_font_char_P, texture_menu_font_char_Q, texture_menu_font_char_R, - texture_menu_font_char_S, texture_menu_font_char_T, texture_menu_font_char_U, texture_menu_font_char_V, - texture_menu_font_char_W, texture_menu_font_char_X, texture_menu_font_char_Y, texture_menu_font_char_Z, - 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, texture_menu_font_char_apostrophe, texture_menu_font_char_period, - texture_menu_font_char_mface1, texture_menu_font_char_mface2, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, texture_menu_font_char_comma, - 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, texture_menu_font_char_dash, - 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, -#ifdef VERSION_EU - 0x0, texture_menu_font_char_ampersand, texture_menu_font_char_colon, 0x0, - 0x0, texture_menu_font_char_umlaut, 0x0, 0x0, - 0x0, texture_menu_font_char_cedilla_mayus, 0x0, 0x0, -#else - 0x0, texture_menu_font_char_ampersand, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, -#endif - 0x0, 0x0, texture_menu_font_char_exclamation, 0x0, - texture_menu_font_char_question, 0x0, 0x0, 0x0, - 0x0, texture_menu_font_char_coin, texture_menu_font_char_star_filled, texture_menu_font_char_multiply, - 0x0, 0x0, 0x0, 0x0, -#endif -}; +// texture_menu_font_char_jp_0, texture_menu_font_char_jp_1, texture_menu_font_char_jp_2, texture_menu_font_char_jp_3, +// texture_menu_font_char_jp_4, texture_menu_font_char_jp_5, texture_menu_font_char_jp_6, texture_menu_font_char_jp_7, +// texture_menu_font_char_jp_8, texture_menu_font_char_jp_9, texture_menu_font_char_jp_A, texture_menu_font_char_jp_B, +// texture_menu_font_char_jp_C, texture_menu_font_char_jp_D, 0x0, 0x0, +// 0x0, 0x0, 0x0, 0x0, +// 0x0, 0x0, 0x0, 0x0, +// 0x0, 0x0, 0x0, 0x0, +// 0x0, 0x0, 0x0, 0x0, +// 0x0, 0x0, 0x0, 0x0, +// 0x0, 0x0, 0x0, 0x0, +// 0x0, 0x0, 0x0, 0x0, +// 0x0, 0x0, 0x0, 0x0, +// 0x0, 0x0, 0x0, 0x0, +// 0x0, 0x0, 0x0, 0x0, +// 0x0, 0x0, 0x0, 0x0, +// 0x0, 0x0, 0x0, 0x0, +// texture_menu_font_char_jp_hiragana_a, texture_menu_font_char_jp_hiragana_i, texture_menu_font_char_jp_hiragana_u, texture_menu_font_char_jp_hiragana_c, +// texture_menu_font_char_jp_hiragana_o, texture_menu_font_char_jp_hiragana_ka, texture_menu_font_char_jp_hiragana_ki, texture_menu_font_char_jp_hiragana_ku, +// texture_menu_font_char_jp_hiragana_ke, texture_menu_font_char_jp_hiragana_ko, texture_menu_font_char_jp_hiragana_sa, texture_menu_font_char_jp_hiragana_shi, +// texture_menu_font_char_jp_hiragana_su, texture_menu_font_char_jp_hiragana_se, texture_menu_font_char_jp_hiragana_so, texture_menu_font_char_jp_hiragana_ta, +// texture_menu_font_char_jp_hiragana_chi, texture_menu_font_char_jp_hiragana_tsu, texture_menu_font_char_jp_hiragana_te, texture_menu_font_char_jp_hiragana_to, +// texture_menu_font_char_jp_hiragana_na, texture_menu_font_char_jp_hiragana_ni, texture_menu_font_char_jp_hiragana_nu, texture_menu_font_char_jp_hiragana_ne, +// texture_menu_font_char_jp_hiragana_no, texture_menu_font_char_jp_hiragana_ha, texture_menu_font_char_jp_hiragana_hi, texture_menu_font_char_jp_hiragana_hu, +// texture_menu_font_char_jp_hiragana_he, texture_menu_font_char_jp_hiragana_ho, texture_menu_font_char_jp_hiragana_ma, texture_menu_font_char_jp_hiragana_mi, +// texture_menu_font_char_jp_hiragana_mu, texture_menu_font_char_jp_hiragana_me, texture_menu_font_char_jp_hiragana_mo, texture_menu_font_char_jp_hiragana_ya, +// texture_menu_font_char_jp_hiragana_yu, texture_menu_font_char_jp_hiragana_yo, texture_menu_font_char_jp_hiragana_ra, texture_menu_font_char_jp_hiragana_ri, +// texture_menu_font_char_jp_hiragana_ru, texture_menu_font_char_jp_hiragana_re, texture_menu_font_char_jp_hiragana_ro, texture_menu_font_char_jp_hiragana_wa, +// texture_menu_font_char_jp_hiragana_wo, texture_menu_font_char_jp_hiragana_n, 0x0, 0x0, +// texture_menu_font_char_jp_katakana_a, texture_menu_font_char_jp_katakana_i, texture_menu_font_char_jp_katakana_u, texture_menu_font_char_jp_katakana_e, +// texture_menu_font_char_jp_katakana_o, texture_menu_font_char_jp_katakana_ka, texture_menu_font_char_jp_katakana_ki, texture_menu_font_char_jp_katakana_ku, +// texture_menu_font_char_jp_katakana_ke, texture_menu_font_char_jp_katakana_ko, texture_menu_font_char_jp_katakana_sa, texture_menu_font_char_jp_katakana_shi, +// texture_menu_font_char_jp_katakana_su, texture_menu_font_char_jp_katakana_se, texture_menu_font_char_jp_katakana_so, texture_menu_font_char_jp_katakana_ta, +// texture_menu_font_char_jp_katakana_chi, texture_menu_font_char_jp_katakana_tsu, texture_menu_font_char_jp_katakana_te, texture_menu_font_char_jp_katakana_to, +// texture_menu_font_char_jp_katakana_na, texture_menu_font_char_jp_katakana_ni, texture_menu_font_char_jp_katakana_nu, texture_menu_font_char_jp_katakana_ne, +// texture_menu_font_char_jp_katakana_no, texture_menu_font_char_jp_katakana_ha, texture_menu_font_char_jp_katakana_hi, texture_menu_font_char_jp_katakana_hu, +// texture_menu_font_char_jp_katakana_he, texture_menu_font_char_jp_katakana_ho, texture_menu_font_char_jp_katakana_ma, texture_menu_font_char_jp_katakana_mi, +// texture_menu_font_char_jp_katakana_mu, texture_menu_font_char_jp_katakana_me, texture_menu_font_char_jp_katakana_mo, texture_menu_font_char_jp_katakana_ya, +// texture_menu_font_char_jp_katakana_yu, texture_menu_font_char_jp_katakana_yo, texture_menu_font_char_jp_katakana_ra, texture_menu_font_char_jp_katakana_ri, +// texture_menu_font_char_jp_katakana_ru, texture_menu_font_char_jp_katakana_re, texture_menu_font_char_jp_katakana_ro, texture_menu_font_char_jp_katakana_wa, +// texture_menu_font_char_jp_katakana_wo, texture_menu_font_char_jp_katakana_n, 0x0, texture_menu_font_char_jp_long_vowel, +// texture_menu_font_char_jp_hiragana_small_e, texture_menu_font_char_jp_hiragana_small_tsu, texture_menu_font_char_jp_hiragana_small_ya, texture_menu_font_char_jp_hiragana_small_yu, +// texture_menu_font_char_jp_hiragana_small_yo, texture_menu_font_char_jp_hiragana_small_a, texture_menu_font_char_jp_hiragana_small_i, texture_menu_font_char_jp_hiragana_small_u, +// texture_menu_font_char_jp_hiragana_small_o, 0x0, 0x0, 0x0, +// 0x0, 0x0, 0x0, 0x0, +// 0x0, 0x0, 0x0, 0x0, +// 0x0, 0x0, 0x0, 0x0, +// 0x0, 0x0, 0x0, 0x0, +// 0x0, 0x0, 0x0, 0x0, +// 0x0, 0x0, 0x0, 0x0, +// 0x0, 0x0, 0x0, 0x0, +// 0x0, 0x0, 0x0, 0x0, +// 0x0, 0x0, 0x0, 0x0, +// texture_menu_font_char_jp_katakana_small_e, texture_menu_font_char_jp_katakana_small_tsu, texture_menu_font_char_jp_katakana_small_ya, texture_menu_font_char_jp_katakana_small_yu, +// texture_menu_font_char_jp_katakana_small_yo, texture_menu_font_char_jp_katakana_small_a, texture_menu_font_char_jp_katakana_small_i, texture_menu_font_char_jp_katakana_small_u, +// texture_menu_font_char_jp_katakana_small_o, 0x0, 0x0, 0x0, +// 0x0, 0x0, 0x0, 0x0, +// 0x0, 0x0, 0x0, 0x0, +// 0x0, 0x0, 0x0, 0x0, +// 0x0, 0x0, 0x0, 0x0, +// 0x0, 0x0, 0x0, 0x0, +// texture_menu_font_char_jp_dakuten, texture_menu_font_char_jp_handakuten, texture_menu_font_char_jp_exclamation, 0x0, +// 0x0, 0x0, 0x0, 0x0, +// 0x0, texture_menu_font_char_jp_coin, texture_menu_font_char_jp_star_filled, texture_menu_font_char_jp_multiply, +// 0x0, 0x0, 0x0, 0x0, // 0x0700D108 - 0x0700D160 const Gfx dl_menu_ia8_text_begin[] = { @@ -1708,26 +1824,16 @@ const Gfx dl_menu_ia8_text_end[] = { gsSPEndDisplayList(), }; -#ifdef VERSION_EU +#ifdef MULTILANG // 0x0700BDA0 - 0x0700CDA0 ALIGNED8 static const Texture texture_menu_course_upper[] = { -#include "levels/menu/main_menu_seg7_eu.0BDA0.rgba16.inc.c" -}; - -// 0x0700CDA0 - 0x0700DDA0 -ALIGNED8 static const Texture texture_menu_niveau_upper[] = { -#include "levels/menu/main_menu_seg7_eu.0CDA0.rgba16.inc.c" -}; - -// 0x0700DDA0 - 0x0700EDA0 -ALIGNED8 static const Texture texture_menu_kurs_upper[] = { -#include "levels/menu/main_menu_seg7_eu.0DDA0.rgba16.inc.c" +#include "levels/menu/main_menu_seg7.course_upper.rgba16.inc.c" }; // 0x0700EDA0 - 0x0700FDA0 ALIGNED8 static const Texture texture_menu_course_lower[] = { -#include "levels/menu/main_menu_seg7_eu.0EDA0.rgba16.inc.c" +#include "levels/menu/main_menu_seg7.course_lower.rgba16.inc.c" }; #else @@ -1765,7 +1871,7 @@ const Gfx dl_menu_rgba16_wood_course[] = { gsDPSetCombineMode(G_CC_DECALRGBA, G_CC_DECALRGBA), gsSPTexture(0x8000, 0x8000, 0, G_TX_RENDERTILE, G_ON), gsDPSetRenderMode(G_RM_AA_TEX_EDGE, G_RM_AA_TEX_EDGE2), -#ifdef VERSION_EU +#ifdef MULTILANG gsSPEndDisplayList(), }; const Gfx dl_menu_rgba16_wood_course_end[] = { @@ -1795,18 +1901,31 @@ const Gfx dl_menu_rgba16_wood_course_end[] = { gsSPEndDisplayList(), }; -#ifdef VERSION_EU +#ifdef MULTILANG // 0x0700FEF0 - 0x0700FF00 const Gfx dl_menu_texture_course_upper[] = { gsDPSetTextureImage(G_IM_FMT_RGBA, G_IM_SIZ_16b, 1, texture_menu_course_upper), gsSPEndDisplayList(), }; +#ifdef ENABLE_FRENCH +// 0x0700CDA0 - 0x0700DDA0 +ALIGNED8 static const Texture texture_menu_niveau_upper[] = { +#include "levels/menu/main_menu_seg7.niveau_upper.rgba16.inc.c" +}; + // 0x0700FF00 - 0x0700FF10 const Gfx dl_menu_texture_niveau_upper[] = { gsDPSetTextureImage(G_IM_FMT_RGBA, G_IM_SIZ_16b, 1, texture_menu_niveau_upper), gsSPEndDisplayList(), }; +#endif + +#ifdef ENABLE_GERMAN +// 0x0700DDA0 - 0x0700EDA0 +ALIGNED8 static const Texture texture_menu_kurs_upper[] = { +#include "levels/menu/main_menu_seg7.kurs_upper.rgba16.inc.c" +}; // 0x0700FF10 - 0x0700FF20 const Gfx dl_menu_texture_kurs_upper[] = { @@ -1815,6 +1934,18 @@ const Gfx dl_menu_texture_kurs_upper[] = { }; #endif +#ifdef ENABLE_SPANISH +ALIGNED8 static const Texture texture_menu_nivel_upper[] = { +#include "levels/menu/main_menu_seg7.nivel_upper.rgba16.inc.c" +}; + +const Gfx dl_menu_texture_nivel_upper[] = { + gsDPSetTextureImage(G_IM_FMT_RGBA, G_IM_SIZ_16b, 1, texture_menu_nivel_upper), + gsSPEndDisplayList(), +}; +#endif +#endif + // 0x0700F2F8 - 0x0700F328 const Collision main_menu_seg7_collision[] = { COL_INIT(), @@ -1830,22 +1961,56 @@ const Collision main_menu_seg7_collision[] = { COL_END(), }; -#ifdef VERSION_EU +#ifdef MULTILANG // Duplicate course name tables; the main menu needs all languages loaded at // once since it switches language, so the copies in segment 19 aren't good // enough. -#define COURSE_TABLE eu_course_strings_en_table -#include "text/us/define_courses.inc.c" -#undef COURSE_TABLE +#define COURSE_NAME_TABLE course_strings_en_table +#define COURSE_FILE "us/courses.h" +#include "text/define_courses.inc.c" +#undef COURSE_NAME_TABLE +#undef COURSE_FILE -#define COURSE_TABLE eu_course_strings_fr_table -#include "text/fr/define_courses.inc.c" -#undef COURSE_TABLE +#ifdef ENABLE_FRENCH +#define COURSE_NAME_TABLE course_strings_fr_table +#define COURSE_FILE "fr/courses.h" +#include "text/define_courses.inc.c" +#undef COURSE_NAME_TABLE +#undef COURSE_FILE +#endif -#define COURSE_TABLE eu_course_strings_de_table -#include "text/de/define_courses.inc.c" -#undef COURSE_TABLE +#ifdef ENABLE_GERMAN +#define COURSE_NAME_TABLE course_strings_de_table +#define COURSE_FILE "de/courses.h" +#include "text/define_courses.inc.c" +#undef COURSE_NAME_TABLE +#undef COURSE_FILE +#endif + +#ifdef ENABLE_JAPANESE +#define COURSE_NAME_TABLE course_strings_jp_table +#define COURSE_FILE "jp/courses.h" +#include "text/define_courses.inc.c" +#undef COURSE_NAME_TABLE +#undef COURSE_FILE +#endif + +#ifdef ENABLE_SPANISH +#define COURSE_NAME_TABLE course_strings_es_table +#define COURSE_FILE "es/courses.h" +#include "text/define_courses.inc.c" +#undef COURSE_NAME_TABLE +#undef COURSE_FILE +#endif + +const char *(*course_strings_language_table[])[] = DEFINE_LANGUAGE_ARRAY( + &course_strings_en_table, + &course_strings_fr_table, + &course_strings_de_table, + &course_strings_jp_table, + &course_strings_es_table +); #endif diff --git a/levels/menu/main_menu_seg7.acute.ia8.png b/levels/menu/main_menu_seg7.acute.ia8.png new file mode 100644 index 0000000000000000000000000000000000000000..38e9d311997f15d5855bad39cd1fe4d5cfe2745a GIT binary patch literal 4602 zcmeAS@N?(olHy`uVBq!ia0y~yVBi2@4i*LmhCH@11_lOZ(W;P$lAy$Lg@U5|w9K4T zg_6pGRE5-v%rpjuid%1|=dOFL!PEACb62EOPIAt)!|oH(*f;;F^vpPy>HmIem36(F zmWD%bvb4R!?G67wf9I%Q7;sK*(X8cjF0~02pNTQ}@K)z(MrOBr^|aeEcTXQSJt)9g z75OXk<^3lmk`}w0Ce|50$@RVRyHjR*ZN0&fbamrJmhVmn#I?1Y=Zs=IwR4Sb>h|~E zD}LWx|NZ>ZUr|wCes8F+F-uvm{fFbTo{DtTMA3#b?ad-S2DesjS-a80>9o^n387Cq z{^2J(GR_1%4qjRvwO!D5db@kn#OYl&DweT-gDVwkXG}QFU;kaEw)aO|-eVKdZS8N) zr}w;j9AO+5nB=tTa@3Vv&Ep(ZqI%1+`8P~AJG|H+(f#a-zSz4PM1Nh|)^$rmnECnw zkGWjDxBB-5I(JO`exQx9n0b+AiQ&0BDWAGGUrLy)6DuQfyU~^_e&dCQX8F1@_hjZ- zJ5J?1_Drl|XIpr@M6w*~qO*eeRAyJs$_ockh$EkQ=9afdI!E%;@yzdBL>^XYf)@^z*kv;G@?`EPFW>ixD;m+O95^8EL;S-#Nx(GQ{4?T;f9 zTdx24w~PP%(T}QJ?~i`8RFZcF!TshY9~LM5v;HG4uzy3tsi(ag85kIqGo76SJe{3k z8H9nMV$R$NXT1&w2(<1G3!JzsNaTpC!*)jVw5P}9d16Jfqz=B&@{Q6_GgQ$$YW~6Z zOX4m87Wsqh0R?Y&UTo#wT$nJUKk?a|o#MB`gqA*iWVa+TbjQ8G0?C-j)A=PC8;|Oh zNldNGFL-uYV*dJBp?hw)t*(4`KBCJ#b%|AYT3}qr1uGHj&06MbQXXIX?stSgN!xF8 z#2=M=-Is4{xcT)`iqzkXS=m;L-y|jcIwc#k>&uH|!<17kEnLy2!Oun7nM0>HO{n%# zy4o_a%J^)^oenR}oig1u6W3*axV`T0uOdmWWF_6l1@2nDkK2FVf4{Z=bJgapmgf&E zt%>G7^{s;Eeg6ir1HX*d#Fz9|8 z>y;bpKhp88yV>qrKIT=SLT%@R_NvxD}#)HnBkIIoLrPyP?DLSrvNfD zF)6>a#8yd(OF=;aYIsF%fv+#z_`G6hC?x0S>Q^Kd=o{)8=;!9@BkL$GaV;ysucJ7m zvLIDID784hv?w{%wJbHSL>bwLlw`R6g3_WKuy<0D^;2_Fb5rw5iuDck3{k9f_w)^b z>i`8odS-3`SXV`E0gB3!%rrz`q4)+Q1NIKGLn?9$;O3&JhWQ<=7#v1cF8Rr&Am@3y z*eZeSw@S%R&P=faGtCTB%*;{}Q*;wk(oA(t%+1ntlT6Hvbd!>e63tT*%?vD3l97z^ z%quQQ%u7xM8C8*6pqH7MVwIe1l4N9PmZ)oJk!qo9Vwjw$n`mKdrkiSEoS1BEV3BNQ zY=LBie^F+7W?o_rva3KwrDUd9nVYAjS{Nr8=~|?inCP0Am?!Hd85t+)np+qrnwl7! zn41|{f{jW^wsOla%1tb>Rm#jwOi$G>$V&%HfCAjgF~HMS$w;4}@+Il-xg5FR8G8W`owo2}qxdmX~C}=oIsMNV7CRna{#G;FH#p|?+nr}Feyy-jlW=Yd zEBm?Sbo{ZG0UJzNZT~Jh@!HNX-v7yt*WaaG_m~>lNd4WWeQLMT!`!Aa*3{eArfj-> zUH8oCYwuofU;As{))&|F>VMxB*t=|l@|o@lJ}X?y*i-h%EJW3HG#q^f9uFH(ADyg@*bE#`j_X*z#moMIvb+wPOouMHMm zHv2{Y_V3SX?;4i{CONIRylLH9bO%fn0->CZ_PT7RY{i!@Z7qR|J>^UsVT`@_tx)$F6yG!-77I ze&tDmH!6b-wg2wpOkvd(2-$L5QYCvgQwzs3(Q^|T7*3Z$N@EP#x)Y6Ka(#`bar)Jyh_cq^la3m zB{NKxrewx+9X*m{ur(zu?`BuGd$@nzyLo$4&NX=l7oVDD`#gp#M=V1xB32>b)S1m^ z3a=R~znM1wbBxxd<;PZ;hOUk)*6p2baz|d*H2YqWHn*B{ zW48a@UElAVcFaBgYwaF~-mB`#s+J)Vi;jsYckz54_r_TvymPb!C z-$^h_mHRGp*i-h56mOD(gm}{1l0@+eWvdf=kLpJ3d2}rOWNYI)*P{D7?=HS}EPchg zBin*4nyfheR1 z-H^wfcji>Dy+n*imej#lTE0O#YKAJBN6kO@eo5RVz#@N;J)q$2&Wo+wn+p?W^d~-> zvr{~(OlaBDLvl+ZLwDSJ_@SsGRe$frgGrNRZ#hOh+k0@Oe{#*ftgw%lOry>g*B?s~ znZEE<%*@uxz{XOAvb4~=h?Bq8zL)KmKT8lJ<>}jCT@Pc^rXq3ize4g9=%CQ z_;o5b=G=>m$J35X;p7yJz3MYpSms-3EEm%|P0mo^q_1hSR_+j-8dPK{^iwJJ@`LT6 zzrQ{;nsm%1>e$1+kXgt0KkvVvE&u%MvaN>ao0V2X=cZ=cw0(DvkUezEcukCXh3@~l z=)*n1=l^`}jla%!KNrB%__*n4QfPDN}8=wMoCG5mA-y?dAVM>v0i>ry1t>MrKP@sk-m|UZc$2_ zZgFK^Nn(X=Ua>OB2#6Ujsl~}fnFS@8`FRQ;GZT~YOG|8(l(-ZW6rhGz zhK53Ney)B+Vu8M)o`HUDu0FDk;u6=g68t)fLn;eW^@CE2^Gl18Q(ena^GcMFjYvs` z>n|uR$^m;PC0Rc;Cp9-UucTPtP|py>N_S7+0JsiN5Ts}37JzkCK zKr&$OAUmWYw*YP~ifWkO!HU6QWaW~dTnciYr;Du;$bPGo{N&6OD=^bIE!o7##4uGi z#ni$;*Tm2;P1n-G$U@i9GTG43)Y#0zB*_TLD9^m&lEl2^RFF{>xdnQenJHF=DTZk& zmWdX+7D*|Fx+dmkCc2h}iH5r7Nv5d==9VUj25HDf_!niSXXYj5AiD}=R7z%wRjQG> zv0-YGfv&lMsiCfkaaxkDg|ShRZjzyKVsctqYO1-B8Q3)`$yRRpMY)M3wn~|~iRr2O z1$pUU2~dDrIR<#zDjDe+AVdOk5=+wZi*jw1!ZY(y^2>`6QX!eSslg?Qpzt&_Gqbcb zHa9miFt#u>H-uOPHZd%BMi58E{;*$KLN;`0x2IrjM)Itakk_mD$!BPqe z;Dl?Hm<+L`II%1>1#FQ5Oe#4eF)uwe#a0QLq+sHiSfVS{#KJPg(jZmW($dgO*Cg3E zSvS!##Z=eS)ZEA-)!fwB(%b~q^y2)qlJdl&RLAtxyb@a__srY^ux}JJpn<80s=hoU z6%(A21@!6@7d^s@-)o1Hu@Oh0a1Wd2-tBcK*WMv-0Zk) z^uZ+&s8oU&2r3n5iJ|d8ODhx4w^)LiAu56Uw{z-lRZy?X)78&qol`;+0ONuG-~a#s literal 0 HcmV?d00001 diff --git a/levels/menu/main_menu_seg7.circumflex.ia8.png b/levels/menu/main_menu_seg7.circumflex.ia8.png new file mode 100644 index 0000000000000000000000000000000000000000..1e46fa7cc73f85edf359489781a92e804bda86ec GIT binary patch literal 4605 zcmeAS@N?(olHy`uVBq!ia0y~yVBi2@4i*LmhCH@11_lOZv8s@WlAy$Lg@U5|w9K4T zg_6pGRE5-v%rpjuid%1|2Tr=Jz|(f$(zU-qrR7MW!Hk*r794-y?|aAB?5)qP-N4~lk%;-okUGIMPsj`*!ae z-!{j;pYQ#3>y{_q6ZiklIT08BL-1Lwhf>r;(S|ea%^^Mpw^oW=w|IDY%Kd3wEjFhw zhjJ-N8DIGl@^ap_T$l4tA5IK=v{Z@T^IZ7<5IGNdwI`nr=i92sEAN}Wd)_jqniKzO zj=iw!GffsXO`K$C8&`Rw7akWgzv9*^v4c(Z zRY>NAx-Y#_PCk3s&3I-=pH?g})Vq`N$$Rsqgvm;=GB&pxZ8_sNUU<0eh!|f!-}$)< zPO&5xbMJ{cyjs7(^(VNncYLG@G(r4OA2uvMe~KXi9AsRGi4?Ai8j~$~}jMke$jN zeoB%#bCzfCNh(>f$><1UQB0b`!bwLDEc0MpGezY0@kz=2p`yO4W?j9qHRJ50;A?X> zKdsaZ6ZSrMWz)=^qO0}h#n|rNS^Y6;2Zx@o?#_shL0)S=L?-Th^p>kN%KTo6_v|*^ z{B1wOw%yuL8TBdwtuzG$-gg$Ro>#aZ+}?)$db2Kp)Y>Xhldqm z5)aSU&2#A##0|TQ< zrn7T^r?WFGhcGZy%$Yl3uh-!Ok+%6EE0s!vM2;vnH+vsE>ZA8Bp+Mt`Nz+wL-yj_| zLlw=V)*t-7Bw2AZO@F|uVez}};=zMDau##i4_m&k-p3zRCbaD7Be^A!p*!w9{7_Vp zs=xQ*!KBHtw;Us$?LD~CKe=XKR@lc&rcq~$>)ouoP6w2(J9B8yiUU>x)|<7=*QETt z_Py^Yf0DJ=W{*EA_c||~*l_dfr4*@u8MCsj3d;-)YM+|vrGI&mY@BqerKM|K*0OV) ze7{%eu`+(2(z1$kW0mpQkUJe-nmc7WYbLJC{BV2K-(N+Np2^;}y#Ib{ z|L3a9w`M$d6uh#QH8tC&?Ynz~?4eu6YhuhRbpO{yAMOc0|L1dW{ELQw)QJ*Vs~8w~ zB{D-IN+NuHtdjF{^%7I^lT!66atjzhz{b9!ATc>RwL~E)H9a%WR_Xoj{Yna%DYi=C zroINg16w1-Ypui3%0DIeEoa6}C!XbFK1< ztw6&1N(x{lCE2!05xxNm&iO^D3MP6cdIq|#6`5s5N_JcdHbp6ERzWUqP$P;`(rlG7 zN=gc>^!3Zj%k|2Q_413-^$jg8E%gnI^o@*ki&D~bi!1X=5-W7`ij_e|K+JGSElw`V zEGWs$&r<-InV6JcT4JlD#HFC105!ZKx4_pIZhT%bG!&BabM-3{3-k^34D@qz^^tWH zm$;Ud;MY+cQdy9yACy|0Us{x$>ROhXSE7t;L`pJTe?e(c4%j;>$@-}|sky0nCB^!N zdWI-gx_kNtz;%FvAU!j;0IaJbw*W@&?Dmf!D zFFiHIRtcJ^5?dwr%-jO7Zxl43fvJhAzC0rp6jBC8M!JSZx&}rehDKH<23Cfq zO8OA*+317vG|aa)`WWE>QGiqk*l{U9#DZMh?6_?7!6gx>RDu`?Divsnq47XVD-;w) zEg>mEkDFjGTJes?>bP=u}qACVcl2upEXa{$AS7-p00i_>zopr0RL{)rT_o{ literal 0 HcmV?d00001 diff --git a/levels/menu/main_menu_seg7.colon.ia8.png b/levels/menu/main_menu_seg7.colon.ia8.png new file mode 100644 index 0000000000000000000000000000000000000000..4f8c448077165e6387d0344e41e51da359d980c1 GIT binary patch literal 78 zcmeAS@N?(olHy`uVBq!ia0y~yVBi2@4i*LmhCH@11_lNOQBN1gkcznE15E#z8J%Wy dHp)1xl4NK$V*fkw_?6Qj6`rnsF6*2UngBR+61@Nb literal 0 HcmV?d00001 diff --git a/levels/menu/main_menu_seg7.course_lower.rgba16.png b/levels/menu/main_menu_seg7.course_lower.rgba16.png new file mode 100644 index 0000000000000000000000000000000000000000..1e7fec01438d23fa622405e7d358d086d5184c61 GIT binary patch literal 3676 zcmeAS@N?(olHy`uVBq!ia0y~yU~phyU{K&-V_;xdG`FsWfq_ri)5S5QA};w4Ka1+g zD4zH6chWZmJxHkd_lTXD{V=~mO2URsAqfHxQW7lc{<9z6Rx2;@&i?F6O9=}{FNuJIoDoz!N2?kyDcpmlpOZzHA18F==H^UUf}aDV*G=7jScnTVP`5k7@T7B;uzgEC^BF~6D|lNd2I)8avOF*^J)wb>CxSO1%3JW!%Gdf55`A~m6J~Jr zNF*q^7z)pN(J+zkC2 zyZ;T%1a~CO7uy3~c$Nb7{g8l?$k(4%-3pNpE?MLl&b`~!{Bl(9Cv!m^kkd-g&VHlZ8R1+{(N`1I-~Lvvu2@_E$gOkX4Ut_ z1`VI=PJDiFi|JYQmK*G=8ztFIxu2v3@P2yCerVD2@9UenO9S*6IK90xlr}XiSt8cF zY#P(yjj!boG$|afVXtmuoTGBEQdZ;hT*gV~9T}ArI8QCSz$NT|rul2bq(9XiaS?H> zkt}-R3D4@@34S!GRgq;fg&94&p zGM@5(*0}NS`;1EYolnva2>xEMO8Qxy-xG!h4J>Ld953Wo)CF*{q%vwRSJ;tN!5|@J z)l_V~V~xjY%r16F%89t5m#WKFvCz z*01m4490|%Cr1<%H4koh|A*aUBYTca?;Hww}{mUl>ckk;&$*UW7=MRV=lSh4y7wLo@dPK=QyxR zcLSS8_b0mzyPk;%Bm`VBI>N)S;IibLJ#!=+N`KWRh<;*>$f&8{&#C*@AQCf)>wv)1 zCoJL0ezTf*RO6U<;@o6-+728N390npYVxYic+>F7M(3Gi!dvE!xeMMftSMDw{K`D> zOJd_ErjW3jb`}-ptYhg34qPTV8~L-oSurZJhZq++IJ1g4%Fnyco}M4D`r5_Q-HnZn z!qE%{1}^U6&9hGMymna0AoG2Ied#| z+Prl7QU>Qu!tBj03R%*OVXp6X^LgI9c=0OFi3ZM@i&tc@@U$qjeLk>EcSYt;*{EI* zro|FhJbp2L6*w{Z{Cs9>_XAUyymYf0U!7;XxuHt#jbcU|TQqk!Z@_^DD@UFMd-~%( zIIgy3JGAk?oaXy%Cgo!SFYG29-{1VkCHDk7e4*bsD}G{I;(L)(TWOe-!lT;ZA!!B$r1V8$fNck1`FD1p-s zPE2zq91?sY5%8)#w0gk-fd?(Bf8}|a9yIkgGwyxRY+hwCA(rjofm7@ezZpYR8n~(> z-U~%`D{R^RU1r8ohnuEaToS)0MYS+9EK#!D+2+V}<2w7-bq=f-zw1lS9&&;5UpA?t@q`gel_W}h1@j&Gl61}`&c zV3V09`}@F$hs-MuvGbWR+&-_Mwjz?dh{NJZ<4MUWI*z?Oo(qmHP}A5E%@e}l$Gahi z@r%TcDi{494VGVjvPV=ltbNdY%x+C%TgY2YCR_ej3%L$(l`aV4OW4mA^Pb`6>xO2F z1qaUR>7_Mn{d@86=|c_771ip-Cgt;!SFD}OCiCIP0fCg02Ng%iCC0;L@b{+?s>{UvjtQR2h~z7@I+Yi}`!W-m~< z!Ovq+5O|nT>PN$suM3*^FL}94shM-YkKf~N;R6dc4Q_VVYDVsFQZe^Z4oEU6$f~N^ z@?1YZKYhlocNQ1s$se%#&uk&x&^~iPrr;ghe|)DdPbgxz;?M9^%kl1w*9Q`HJQGAY zxmXI)*{2-27*%tAVQ%GwLIWQ8HvtVP?XRCVD*GPz#H)zcwdyx+!6L(Sc}- z4VUCn#AG%`44qBj_cF!W0|yh?r|Cci`T_apW_o;`BE-5mBVD0IINp>X2Q_XBhI zv{)P&%jAXl1C|#XG;rBCX0+^K5UW~{qs=HI@nYttDU3TWHlJP3!qm{ncqKSySBWYvg1S6MCK{XjggL*I~*A-6xg|zBp*n*zxypS^NMFP zjnZ`u?rR$fFg*xNWK%lu_xJOL%9GMIpSVsCN7Tv zBi7LQa}GTDCp+UGtE8PlgZr!oQTr7FtfI4y_w8kvuDBpeWJ;>TRmqeZ{)oFq4sOf8 zzunDOCTVfAxl6_`gP&;@uZZc|2Id{lCFU`IW?r!_p4;bJ*MS-Am2up+?kh zm(l3#EKIw>F2icd5>~yyfnljlKpnei!GaKmRnt^h6#g;=)cs*x>tA%$>PNQQ9mqW(Ca~CcL9}0-J>SYwkUQiV;cxyKERw+vd zXW#q#o1b&t+uzW0x%n9n9V!>GkYdD26&uh;0g%vWzza_ z;AtmA#v4J2&jF=O7tZiyMK?_Pv+wZ%wV%}i_Q$xR9uyi)V2Y6NV4K6Esv6w5arudW z;Na66-u>V&aA?@XdLvloz9fsNsN_86k?O`xsxOIQ zYZNQ1sN@M&5mtsXm!6+rZ}{cgH6xwaU3@YE3)UpEluTCLuwV;QSbA629G>@$OYeWI z@!m*fUdhPHv*u!{{ER)0t!gXu`CnaZJY;5N z&GF)6+5?d}V$4e$v=|wRSyn8YVZD8N;_Y3z2P~aVFlZM{;I!#K!I-1dSfswfkXg#Q z;jEHl+iQzPX0iK{*K(^F%(#SZ^YAE~w{Mp?%y24hL0D{&QK=1Iv2iFfgP`<%$#t>T z=Qq^95*Yp?tSHt7-{b{p1{46~Ul7|)zG=s$FZft5$&H;b#QVMV2@aYm+N z)e@c%HWMy}lyE1e$95aazcE=b^JZDuv-6$1%g!6jIJUm8(QC)2ZHd-sQMKN2kFdSaM#<1ta;%BE{oLI-ez`)??>gTe~DWM4fEKUa1 literal 0 HcmV?d00001 diff --git a/levels/menu/main_menu_seg7.course_upper.rgba16.png b/levels/menu/main_menu_seg7.course_upper.rgba16.png new file mode 100644 index 0000000000000000000000000000000000000000..834f342c9a1a94dd6eb78bfff14c8d8635d0c842 GIT binary patch literal 4687 zcmeAS@N?(olHy`uVBq!ia0y~yU~phyU{K&-V_;xdG`FsWfk8;j)5S5QA};w4KMRiu z>wU?6`}d#!@aSJ*+xPSHjsN`k*yuRvv28QMb9S}`EJxD(9NF0TI2G6~@yIwtO>A_& zG@&s#Kv3hnXYlol8VviGZL8-!{Q0$%NB>-Iaz)*LyTk4L_7WBr77{wWDiSKH7Ls)i zd%rTDsQCZb`o`z3t}Y(?hQ=@djuyA^zprmN%3`utf<;tUQblyGgoFd5>(d7dvKVUq z^Yy%ZY|C^1{rmJEAOG3jxct6RZs-3;?99s4t; zEqJMVBH>92$Cr632B`%GckJuuKD@Q@HIIBl<9B9}3MM9=u!Dg-U2Qjcc$%U@xY=H@ z9Qgj7=X?KjgFWnOpP!$<&n)}B`QQmIkJ|qS3jSL$AKvy?hDRY#-J7p1K|SFT`_W(J z6Lzp1zLKjiF{hz%(wnc%j)GGjIWA;8)FksD=i^+*2@n5ldd|}&)U@CXU41jz{Kh|Fa8^5gU8y$_b0WAHg9zmGXtOk$~gLxj+j6P5>W&V2Zjow4oldCLPo z=QF-?${)Tz!2|McNH#agz zxNsB|7!@!C-zZji7SO}Q=3-=^pmOpX+fBv~f9`~|J%8S)$66&brS(3uZSCKG{B4h) z+cU`Wm-I6TG}~}4QH?J!s9=2g`g>!N!S*ID#szW-g$D{`XB=TQU0BD^$?W``ojsuW z2sc}Rg%{J;nEn476JK4D=kar6;%V!W;b~$zaAEI0o``*Gk_8O3(jJ8HFiAO7HF~-+ z)THm&zkb@ozhAc|h}Zu($8he10{c7r|ILmL4owe#eirAs-?;H8=NIN1o(J~u^;i`6 z)U#Lh3D4MLsW_2WN86!QStG&Xz_VKRX_7)+LOfk=2i7QY2D12M@O*DfR8-J7cwzT9 zMuP@RiKYg|g`7Mbe0}eE?EAJFaoE_OSICI)Epqe>VyI!?_2kz!5w4gLi)qYe}~UF4Xg^e+DQfepEm?1xPgUVSoRN#k~9Y|DLKXJEt5Hf0fu z$^{k2Tl4diEB^npYF=i;N%s{j_ZR?48{3)qFz)Q4PXofj4pP3udTY*m$6!Y9mibiGf8^t@Kd_u3mZj zbA~b2^)fS<_B7N4R6n#c*s;#o=J^i>K0(HW+(~a(boebAG~GWkZ|Go2N|3Ox*E^uV z;KTdA-`%)CVjDxYk2YHpgRo(j1Mke*;^s!L{l*PkR*Xm4c@~&)8AKb&>}FfDRl*_j zuE3iNS9N8!3Cio^nN71CeqQ2^C}lNl;Id^+Fx1!J)Y&32r(r8IJM)S|6Bv%In5KAQ zvw{puj=hIbjQw|+8QUEj*|V5km{+?iv#BR&{rt!rbi$5(n&hm5@(qvVB}5$mv8ZWy zCL|OT*)do>voi30Vo+0G*Rz5_VFr`K$-4U?`D_JiSxkb0J~Q9=e7%7+Dwl6VN!_^v z4_LpXm+~8A7H2U@mn`^F(U*9CS252tzhDUqOI1mgUXg>n3Vf~st1OOvkd3fiH#_<; z1DB|80z&~ulh(<{4wqRQG@sfrpIChR+Ph>Ay+|fM(XMH;4$M+x&5>Mj<|m_1X;Z@H zdB!ofzc)X$xv<_Z%wEDF(s9B=*27T>@t<7znnSOIHQi*a=VEyFGk5Q~2Q%1NpVuaw z@Rnfg&P*`+!{Af2Ktz|b=f&^qjeQI|=O5&Lk(jWCQCjPLW9q>x*D?|sIo7O~ENaM| zUg}_(5dE-{%Q-)n>+o-JeTklijlY;Oo^4Ft%k#X?m3j3piMHqb-wbWo&F1vwGH+98 z{3(_4{)WOpL}dPBn10|v4R4R7pJxE$vXcy2U*_;MR)z*QJ-kzz z;P^u>M7E(RMc#l@KAB-#nxq`V>sNn&e>0X~nyl#|y<*>ev+0aC*0hSmwM99!GfO+^ ze=}@I{$*|OO{KAMHK$I%d1mgNrNzY(EG(*$*Us)ew?LC~t!{&sJVS7N{`YkU^W4}R{fJTT$zafJmx zn;ajoUl3aG`aSdJ8^52s@ia}E#uF9R#dF{YZ_e)d=>b!ouv|O3;F1CRjPia%8+J9J zfY*8Q8>05`pHVvRXsWj5qdsRYyGpfZgYq%18C>TWU-yb1nDLwM%;NiG)^XPZIS7pS&Z@WV++&l`Pp#2jmzQyvn;D!p7;F;LQ^umdVJ>cqMwb{d?BK z8G%Z43tTgP-e;C}=DFSQ_Vd;Q=k9X1t<+r*CcPo%0*hH)!;f7G8%{B? zF|A--!TDv)A{F)v&N36u2^d^tSY5-$nP4p+b71dthUfJG5t>|1X9S<5Fqp4t%4*oi ztrK@{J+rv%fv|;Y2CA;iwqIptY-N$S_dkN$Y&v6vwMunnQ?>@*N%jL_8q9}(Ze4qz z$wDf^IANQ_Mz#Z6AMfQ6>iRCZrRTs?p$P#gGq%68J8YQ{TT}bWj?MF=LPE6smBL82 zFBTVEc@E5z*NAMg;m`TaJo{}ze}h%Y0;NDf34yjSp%2?^EDRfNv)Ui%Rql8$sW6Y- zt0{;{qh(Kz#DQEcKi7`smW_>xqGt~#h_Ym*G;oCk+}p_Vtk^YS+V6u4R&sL21e6Jv z?BdI-s9?;#{`hvoO^Jwe8I|7?mN5046IgNTw%OILgQs4zHmjWAOE|etbVf^cw&Pbj zm1hl|6Ap4poMLMF-dOscz3uaJ$%dcv8W}@u8z;$X{H*`~f%(qm$t-HF&dMG|?3Fe5 zEfd%|BTm#-@E3M7Y^Z9yVsIc#h1rGQ!!5|M!I5c3R3G!^i=_$kn7%SEnj~>xt`1|s zTJF3gDJJf73T?UG-O=cTV)+yJ!j%R#s7hkC15x6joU0?OwS!m`2%FGDEY9JnTf1jB&o92;Vox? zG=mB!R}23H2Zm)A#J`J5s5pdfUSe(|5U`11$5!?)HaiwDmAXl6IdIZDm`Or?7@FQV1|{0 zCexLVR%|}L3)V37O;{j*Uf|@v=IoJLA@9&E z8=T$9$kgZQ@im3z%N_=G7seG=%}Vcb7u;l6b>GpD$4i#yg3c$|Cy@z33{!;-Y!4(P zGO%7NPFS$7y=Sh01Y>Y~;S?5T4F<=)-TXNpW7x}fi#Fc8z#Xxh^U!hEhQn$18*QD~ z5}p*^V>erU-SEw9tLYCdHq2FG@LMQzV4XSh;W?(?8w9mE_*g5vKUf;H#n&|4;Mnv> zVn^X3j&+O@7L7|eHiSL6;!^QXYQuxonm-RRbS;%XkfO|S=6{$U7Y|3jfq@LO)u+Gg z0m4(88KvAl+*oy&2qO~8D46DJlgj|EHabMu^#=b7-&PD8-4aX0S`rJ8@T zg0p$<_Z!MYPd~JwRCdEm-khZc91=!z>iJ%-ZfJYppm{U6#2`f!V~L@%7L50>0N9G}kWw%I@rUil6NQ!|~#T8E=`z49?dx%wFYi zy3S$u-UaWpG=6e(IoO_OSozE$m7#)1kfxx9=ZIfomv?U*pXW0FY=Ru#i z$5a&qZoB>4c;y%_fFfNbiu1<9ih~KPI*sq^8Th>H+Mfh6CcI2zJ;Tb?r7!V~`D>$B z+y>{yg)Fbw8?rV(e=oR^!RzmW8^R3BHn1P~qkn*LtyR6l>zWG;23J1ITv)^8^^M0v zu6+hu7n{d}#!37d3mnfD24w0pbonJr`o(bO{sIRxmR&omxHfF%_Eg~cU1cG0ZQXAM zzjq59zHJgpxWVqz>o<*Qf@1`qXWN5Wiyg8pBoAyoP@NEPZ~s3gn@dUzJbBIup=_s& ze>bq6tzKZEvA$XMt87pbbM*WN&sI)WUQx#$wM|~a;<-bp67!B-ET)Z)p5h|a_7{@m zu56mja9v}97K0AI=9Y(R9U=;vn%=Rqs|Yx3<=NnW#Gw2(J6nP`S6H&#qL_U8oIA`g>VwD3I7$jMxf|!@;6kKCk7NERhhxmrJ z8*DlHa?H#8I1`R=GI8&|7j)u*=M+WuJzrO@T*)D`eh+_NO2CH(w|*7Tg^VAVZ+v4v z&UHa8z;Xd+iERg)Y35vqQ2rHl?c3gnG&U|-$+7bO!BDFS48A!HtF|X4)beJ%Y@DQ; zp)=p&yz?e0oe2*%o`HG0(W zqCIHNg()0DEbKO0G`aLx_A`GLQMcG(c_5SBq?R>%eshxiwKc3)-)qccpUKu^bU{OK zg)YOavy5M#BuqPOquMF*dBGn(ZD)r@mQ}ABiZvcAG!&7qcQ3TJ*q7L$pz%s|2ar?muOoCIIELd0;g#BUI<`Lg;^MTO=R)fj)?AyKT8>)TY z&%e*!t8UO>^Iz^3+t#8f4B>?a)`_iRD?%946Bn>}*lGwkq%y2MjKpr|9)DO+Ae;+^wq=YXlojCns5ZT>S#1sI%fPG*acE@)~yZE5kKv!R*s86yX; zm*s*hOrLl?_(BBa?Y}eI9p||8L*`bdlfSisorh{hp3t?+HH^A9XDUd|Z~od~^GWuG zM3ZXu1lKT!^UX4xeU$-k8oBj6rn32&EZD>-F=N55pTC$N967O(eL|4H4a8H$TT|~-LQur8EIp+9p6ANFuq-KEv ztIP$)`;9**JZ5EHF|EO*K*6wO((}YhX_?nN5ezDm8*RA0+3Wmd<~A?LN_1Gl6JVdB zyTLt+{}kP`hDM!(vriy;~p!ggA5Y`Cua`p#_8703=9kmp00i_>zopr E00`8c00000 literal 0 HcmV?d00001 diff --git a/levels/menu/main_menu_seg7.grave.ia8.png b/levels/menu/main_menu_seg7.grave.ia8.png new file mode 100644 index 0000000000000000000000000000000000000000..ee9aad0ece84abd985007b0a496c5548bcebd06e GIT binary patch literal 4600 zcmeAS@N?(olHy`uVBq!ia0y~yVBi2@4i*LmhCH@11_lOZk*bi0lAy$Lg@U5|w9K4T zg_6pGRE5-v%rpjuid%1|XRnjdiWe0{|Nn3s7>nFXwEUB7IaQ))RCTxLW) zA3ka5{X9o%y@c$tH9hYd>SEFq7Fxu!nYn5uEM0QLews}6id7jwSJy0C=bAlj&ZcK` zbkBQloE5>fY}(l~Ya>cOK6!QX?A`9`hg=IXvrZoEnjVyObdKmL(fn|UE4x0bMc*>X zsoZ>a`=+aHZ!ZU3o;KSwf9ch8u~zT;=j|?izx4XtvYe&1Z+AVvTXz3+9Q(Fg6AUh0 znApxMpL(VH)}dch?k{lbmXcqxY+>w`3)y9p7gWxDk;0ZBBhkotd&4x}MSbW0Bf1g09v|E9t>;scKdJiJx2~x9@y>4* z%H|!CyrN-ID{+7Crt3dbzlXHP^X`eR=luJ>_1L#9p>6hizg^O*X*1uD=p@H-uL|Xf>iayD7|-%vqD>6%kt^BhkyGdovX9$ z#Rln?)O*r%ewiG5zB)}*KX&m|oA2p5u7#4T&P|P+Aubxho|GQ;v~6n6onQAh{&383 z&lKyNe`KykFVE~)ecxpd`$ z{5@C95?F11+2?5QiYb#$Pdp+1au(bEx3|{oPoHR_cFBmZe90w~x*7lf#{ITfZ@%_y zrJRW4-KcxV%QuQiw3m8Da#=fE;F*!T6L?J0PJu}Z%>HY5gN(z}Nwo2iqz6QPp z&Z!xh9#uuD!Bu`C$yM3OmMKd1c3d_URu#Dgxv3?I3Kh9IdBs*0wn|`gt@4VkK*IV; z3ScEA*|tg%z5xo(`9-M;CVD1%2D+{lnPo;wc3cWJMJZ`kK`w4kBZ^YeY?U%fN(!v> z^~=l4^~#O)@{7{-4J|D#^$m>ljf`}QQqpvbEAvVcD|GXUl|e>8%y3C9PAq!~70b3=ShJm;B^X zkn=oUY?VOvTczYDXQo(znTEy|Nk%4SCc1`(=1ICHCTXU+7G?&fx~XXvW`-6PNhyiR z21rJE<`tJD<|U_sjH<{j(96tBv9dI=OiD>kv(U9PHa5^TF-lF=wJ^3!)J;q?F)~Q9 zG%!!LutYM#zbG?3GcPd**;OE;QZiGl3=Iq{jLa-kbPWv+%ymtYOcHgIjFT*N)67zn zQ%%#73@r>z!A7MdTe;;I`uOtzaQf-wC!8$5(3#^=rQWHz^i$e1Ab8MABPEat?Gc*7va0MGk zw0L9|m*f{!+JVzFIOhbX7D9NCOpucamQqjvCtRz1ryK25?zLtCMl`Osb;zsX_m>lCI*&Cx=G2&mb$4a2FYfYCdny=iIC`mn_irs zR#Ki=lkqQba10y3{LnB=SqYy(QD`PV&Qv)S^ zi1%#tL3tYHTN{0h@PH^lDg^Af6d+bP0l+XkKB-_we literal 0 HcmV?d00001 diff --git a/levels/menu/main_menu_seg7.inverted_exclamation_mark.ia8.png b/levels/menu/main_menu_seg7.inverted_exclamation_mark.ia8.png new file mode 100644 index 0000000000000000000000000000000000000000..9805002216f2390a8c2a38538a2d634a0fc6d7c1 GIT binary patch literal 4699 zcmeAS@N?(olHy`uVBq!ia0y~yVBi2@4i*LmhCH@11_lP^^s11ElAy$Lg@U5|w9K4T zg_6pGRE5-v%rpjuid$F1qbEJl;Q8}hq?*OsNujU#pvxQHZ$Bn)ioI90qkQ?@f0Dwf z83HR+gjc-U@aOY)j{1iWHT@N{wuJ=E`fx;uJKQAa*1TQ&GP_<^SIZ@Txh3Dn=r(=9 zG+Vp3AN%X97`CliwAA0>+PB7^r3;S8-oMvSvHFN)YJc{QbIDzb$pGUi$ZAd0SQNME4ouiZefm-Q?`3xA1Uv{+QOup<=kj_0z9svOG<5 zUY6Lf_Ou1}E_Ym?XB$;=PyXKBu08E1W}kSu!v8n(%i9eyl|L+tx9mN-{;zI+Kw?$! zef#7R>DRM1c1Z~@@%z0<&O0)?WA?;D!O;wHvt&XUCteQ<;Mu(^QTxkEUt_PuPCUEW zTwjG`Uf6W4S4zVzjw#(_hVm8BZA)ra;@Pwl zcQ_aNFeu*_zpwjnxA3tKiycgEE)=aW+8)DFWPj@S<9%E*A>lXs zJsLNBW;4|OTP=JdYl}iaV1D|9qWg>rf#;G$iIh>?;RxNm!p4P^^ z{XdWewUjDrigHYbI=nJ>dzy<$~H$kip0zTMYU zG}U}HpFWwMbaqnmiCMwtZWf)qdSuZ`)zfKVYsB=Lyo0^9c1CC}4STZ2Vcm>a!GPCi zHlHcHX0Y7yyxH`fW;yf4W^cPvv^gy5?VY8M|GilGJa6xpT^E|xZaLyQean-h(>7gc zTx+J%V^OkXVtcRAtB1GpUc3Kn%igm4*y>=p8T{8T%>K;W^v5djJ5O6-2g~uz(G9$3 z-`z|RQQlqr?q-O@awkcZtG2J7^c_67L*Vs-_VPw^_q#jge~J~=eC%CsC4OgDzSZ}a zw`XSG-QRZW)r~T)*ejj|zYO+8q^|y#`aQ6HtKqZ%T{oTHY<^uC_Tz2l|KN7(8x^we z5*}}O$Y-W56`KrZ9XjBl{1wS>K4+-|v@jST<)} z<`-6wzWkW2KW0Auzy2RnoBWe+S7)x6$-uyM)% z&2Gn>{?mJ(@AUrMXj3w5Z5Z ztWxRjGPV5Wr(SENYV>d1<8w&1)5cfsS^fU&cIQ_6W@k_Pxifz2vyk449QWiGS~m2i zN9k7#8IXksPAt^OIGtXA({qFrr3YjUkO5vuy2EGN(sTr9bRYj@6RemAKRoTgw zDN6QsTs9R}6}bhusU?XD6}dTi#a0!zN?>!X@`|lM!um=IU?nBlwn`Dc0SeCfMX3rV zdM0`Xx~>(OWkyPNTnaWtDQQ+gE^bgGic->Sl`=|73as??%gf94%8m8%i_-NCEiEne z4UF`SjC6}q(sYX}^GXscbn}XpK}JB#a7isrF3Kz@$;{7F0GXMXlwVq6tE9xGpr8OX zydt;2*B5SlUNJNjlJj%*D-sLz4fPE4b942PbrhGlmX+YwQ5;fPkg6Y)TAW{6l$`2X zmYP?hjBJFvr*8n<1dx}~Gjj{To~p<#K(Q<(8LqCNv?vFxCM8)vH77MUHLs*t-%!sG zMSV$T8X~Yzd;^jJdk5Je6}bg)^HEg8{0>$O4kIg<{Nz%QrJgRfN+9=IrQ|1PrdWZQ zmPx6m#^x!8y5{DVhPoyx2C2Gm(S z%gju%GBq?>YVmMeNASbaTEx#z&Rw+C)FD1Xc7@;^MGdDH3BoP#BhGwS5CWgiqrbfnQW`@Sb z2t{G3Ma7xabHij^OG9%*T{H6}bMr(KQ#12aBUICi^V3So6N^$E(^Kqf@{Cka5E>X6=^B{o8kvL`T38vITNxWE=|j9{qYui{FyGqfV}u7p0a77g z$E5%f3vzL@#se*_P*51Pgrx8t4X)APA}It&QaqZvMuUr_ z5FknMXzHR`aB(5JJE?gowo2tn_ICg5Z2B1(7?_g0-CY>|xA&jf&%nUIS>O>_%)r1c z48n{Iv*t)JFfg!}c>21sKVy{;R8^S&cXl`f1A~gEi(?4K_1@DPc^M2i4j6R*ujk`e o*g7*g!1d6NRSJ4W`~@=H)~(!srv)F31@*T)UHx3vIVCg!09%I$?EnA( literal 0 HcmV?d00001 diff --git a/levels/menu/main_menu_seg7.inverted_question_mark.ia8.png b/levels/menu/main_menu_seg7.inverted_question_mark.ia8.png new file mode 100644 index 0000000000000000000000000000000000000000..7a2e5078a77a52fd6d53e36c543f52a51dcdf559 GIT binary patch literal 4682 zcmeAS@N?(olHy`uVBq!ia0y~yVBi2@4i*LmhCH@11_lP^fU1y)lAy$Lg@U5|w9K4T zg_6pGRE5-v%rpjuid%1|=N3KD;A#6`+-2LOs;JV}+`ICY^qG&}r@k$_ByVjjyZqUC zy(zj(P8_yO<(Gaven0V_(?d;v&DE7Fm-=Yze0GYLcmB6a+sqyH?^W;Yy;xgs#V!%c zq}g6)`6d5viPQ~OXK#DSPfsOgyl2m{d-JO$ zdx!SC`!r*J{?-1qsr$=+zsz_3vMWh8F|IY`Q1p`mher=pczKV`R&}0uKPh zS)PQ>IT!TsB1iaV@1@mI+r{?2^Y7ncB(L>J;7QS`>3=)FBs!cc{qgzK&3>`_-?#6Y z?RDAt%VWvKzi)i&iQN(-@Tw^1)wZc?S@%kMAGtIyVZBeAd*Y#OQGv3Ndlf`~ZSgUF z@ULNa=O*+!wbZUM%-QH9h zb!pqIw*yeVeSLN+Cnz6Gzu9z@sb91L{` zP(D@YqQzwWUM+2D|7-`d3rw!9cg`zB+Vd#5L_|I0;pAwL>I_izOk#f zDXEIlDv3J)64i=5wph|ah<;D#v||8sONgJ-`(}^?)rY~wwHEL=GoQjQny~czH3`! zi1Z{kIjd6}9xm=H3$or|ch!8wMaN$ApoJOgre9{=^$Cbkmpa4H6Rak%-Jzl7S%R76 z(=(2GGkm8OYE5~#gl)5*BM-}GuQkniZ-m~vG~ZFpJNZf0{GZlNkr($=zMpw3x>aue z!c^sL^AB;nQn9F&h~K+$`;Qy8C%+UWoUxz%IcV9#{cC>*&s_KO<3qP!a`lHUsM_15 z?0RwjrQ5D&$Jc+Tcl`I9=dYWWO`Bb9zkR;^#Cre65?j&l>%P>z+B@y#EO~jO*w2so zAO08G`^7eGUi06lF<$o*(q>Ox7n8O=x#ZyN_?WHlpI-eRe``i_yw*qk=k~h=&Wmh# z*7JaYfl)Qn**U<|*%_9%7#J$%%$?xtbvQtzb^n$4D@_YJI+}Urh|QTXQMf*%AYer< z%j(4@o*QQznXp8p{DEJIp)5y}cL5_;pRK-CL4umyjye6O_dehAeL>=J$DlLsohMD( zdD~hlhHu@QrRHKc(&mQFstZV&TX%c$x0-!PlC_zV>woREKc6Ha+E}v8t64|?pp}UA zWh3J?NuRI1p4%aRq-@5Lg+Dy^h^sA3+nk>`iUnR%PVmWtP24uAWo$gN$^%vr6c zQ!~>uxYV!EV#2N`KkftzcqA)*T{cT|r=Vz2k)>Fr(%ofh`O8ne)=Jgr-?+!;kZh-o zuiUfx{nzczt@h2%p7wKR{MKh7y%#y|$uG2Q=uMBLsS+C#C9DBQBlHCStb$zJ zphgs>q}eKEl#~=$>Fbx5m+O@q>*W`v>l<2HTIw4Z=^Gj87Nw-=7FXt#Bv$C=6)S^` zfSBQuTAW;zSx}OhpQivaGchT@w8U0PiAzC20cvLcqYE^#d@!LOq@q_QAYKPa_0zqBYh)wL`&uS6Ny2zO840JsStFQsSZ7Jxlf zkz0UbSxPcoT|sG44p>b}vVLk#YHn&?NwL16o*|0*lFT$jV4?U1Bm?#ivO_9z3*hFX zsD}9+tQZ_dRxbI;r65Z^U2K&=?zKwEPtHuS0y8ZQjV%pROcHgCOf4*QP0S4}bdyXC zl62FI5-n3L5);jm&5eGd8d~U@ zBpRmaS{fOr>ZTYPnOUS6m>Vahnu3i2#erG-hFu33t4l7V4j zs-=Y)B#hyv7w4yylqVLYI;N-QmDnn|XXX}weWRcO4P{MK*OX_Zf`ZV%$Vk_~RM*HP z#L&XZ*wV_tL`fgwJsW*co`(6>Mjs-1qdi)lE{-7_*L%+{6l5^qIeeh}`~91&jC(hA{76~EperQfeM_(8+n#EzpNnH& X9~S(b!zFA0>UDX#`njxgN@xNA)57+z literal 0 HcmV?d00001 diff --git a/levels/menu/main_menu_seg7.kana_dakuten_ge.rgba16.png b/levels/menu/main_menu_seg7.kana_dakuten_ge.rgba16.png new file mode 100644 index 0000000000000000000000000000000000000000..160a87e30e96559416c03d697b4ad58250627299 GIT binary patch literal 882 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4mJh`2Kmqb6B!s7TQZ%U13aCb6$*;-(=u~X z85lGs)=sqbIP4&EG(LFgB2jj0kI)kVb9FkpEWAX!6Bcd}jVd+R`NcWo(u5^DEV$OO zvfGQT=F>a3%W4N#(*yR7#giv5>Ynmr|B?$z$C@A4?b-c(M>RXgSEJyweT5EJb(BT> zJ8$0UlBjUyXJh11)-eqBUm|YwK_>qDhmT+NPHo*a5kJ!bh}&m10g zI({Xy@%$y%qoSU0ytvJ#w=R0t9`=}b49xz!Qat*eEY}p_I`CVvHkj|le%4*#ckj*m zZBff$bmi(L-hu*-9x=`8vybn_zTNw`dfCnU{N=ZcR(`r>*v`Pfz?S6g?!xe&;T;3R zgy_ad1_lPs0*}aI1_nK45N51cYG1~{z`$PO>Fdh=j9Z#fTUql;=o|(H2FViFh!W@g z+}zZ>5(ej@)Wnk16ovB4k_-iRPv3y>Mm}){21YMW7sn8b)3uY<`Y{IzwC-;W+P3t< zCk~GlE{hl(Ic%6LR1PZqVlb&?@|m3Ha3%W4N#(*yR7#giv5>Ynmr|B?$z$C@A4?b-c(M>RXgSEJyweT5EJb(BT> zJ8$0UlBjUyXJh11)-eqBUm|YwK_>qDhmT+NPHo*a5kJ!bh}&m10g zI({Xy@%$y%qoSU0ytvJ#w=R0t9`=}b49xz!Qat*eEY}p_I`CVvHkj|le%4*#ckj*m zZBff$bmi(L-hu*-9x=`8vybn_zTNw`dfCnU{N=ZcR(`r>*v`Pfz?S6g?!v&pFo)s4 zf`@1t0|NtRfk$L91B0G22s2hJwJ&2}U|=ut^mS!_#x2dvEW0ho=raQYgJg+oM2T~L zZfE27$c~b&;SRb4}IbnK( zfD0olw}R|tKTGQcs=Ptl3`4^X$QgNvTySVtlkMp0$l}t-SRvrl(a}C3sq23IGv0_z zCAI6%Z>(K+*gj{<%=NEqUKmv!E~!bJIdk9i*|iJ4KAzKWoqLb-i&lnbnNmq1vwdNk zUfv_)y3N;wzC7gKCmOh3^S#NT+&5v5GFzf|Tx$_$`SvmK#Bas@8(0sY)R1rA{HP}D z(TOuX@})b4FUs^SFR|!gO*IYML#&wld|1?P;`) zS^xW@Qiaoo*3Vg`>kq7r&@Z%z*%|WCZ`sE?xAblt^xF8JVWQ?lUP*>!yBHW47(8A5 KT-G@yGywqW9*vOz literal 0 HcmV?d00001 diff --git a/levels/menu/main_menu_seg7.katakana_ra.rgba16.png b/levels/menu/main_menu_seg7.katakana_ra.rgba16.png new file mode 100644 index 0000000000000000000000000000000000000000..2507705f8bec691285e122781f9153c5764c11c5 GIT binary patch literal 766 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4mJh`2Kmqb6B!s7TQZ%U13aCb6$*;-(=u~X z85lGs)=sqbIP4&EG(LFgB2jj0kI)kVb9FkpEWAX!6Bcd}jVd+R`NcWo(u5^DEV$OO zvfGQT=F>a3%W4N#(*yR7#giv5>Ynmr|B?$z$C@A4?b-c(M>RXgSEJyweT5EJb(BT> zJ8$0UlBjUyXJh11)-eqBUm|YwK_>qDhmT+NPHo*a5kJ!bh}&m10g zI({Xy@%$y%qoSU0ytvJ#w=R0t9`=}b49xz!Qat*eEY}p_I`CVvHkj|le%4*#ckj*m zZBff$bmi(L-hu*-9x=`8vybn_zTNw`dfCnU{N=ZcR(`r>*v`Pfz?S6g?!v&pFo)s4 zf`@1t0|NtRfk$L91B0G22s2hJwJ&2}U|=ut^mS!_#x2dx&E9hFWh?^&gJg+oM2T~L zZf7sn8b({m>p<{dWRah2yjZ0EgP zp?H~^`HLIbC$3+3mS^j*EKl>o!h5%}D^5@Ho4e^R&o&uXN0ICD3MztCf0m>$Ok&a9 zYd2$weE-@Fi|n_4*qgXX>jtmg(fS2}Pb;Gt_FR+R)fc(R^7HJ{fRQEq&Nr=zS*y|yqUgF64Hof9VZr!uvs%z#OseMn{4OXlYXM7D{rJh&eJ@5F*%OXL6kRyAK$cs=i+;q6bM6D<>>QnV_V#7w6? VTV|c#Mg#x= literal 0 HcmV?d00001 diff --git a/levels/menu/main_menu_seg7.kurs_upper.rgba16.png b/levels/menu/main_menu_seg7.kurs_upper.rgba16.png new file mode 100644 index 0000000000000000000000000000000000000000..7f7762864481a677e17c83ff4586b04f425273c8 GIT binary patch literal 4719 zcmeAS@N?(olHy`uVBq!ia0y~yU~phyU{K&-V_;xdG`FsWfkDX3)5S5QA};w4KMRiu z>wU?6`}d#!@aSJ*+xPSHjsN`k*yuRvv28QMb9S}`EJxD(9NF0TI2EK_iWzQp@yJYS zUKj14@DI3%hJJ+z{jHVQK{Yb;nHBNM{g@cw?IVeOvw zhkw8R<&nR)Km7;amox3p?Iq?h+n(1va4;cLmEjA=1@;3TcH8SV96Y#y^AGq`BuQmJOc6o=b=NlbAFiHqqnD8K=hl!2lLV=&>Cg!F$3>9^GT8BS> z4wiI~V}BaSmav7(qb5OM%AbP@oF(TkE#=`k-p6f_!DxF<@k67crPM3U6~XiGKTojO z?#nRex_wPL!(}0dy?zI-C~1z1Y@mn~p8T$@nGpvKnr{Xm59 zlor(_KDLBBhGSYQ4lpMLv@)F0nslJZFF;sxLBpfy?S>7(ElL5}8m}8REPBM9u!?z_ zu0Bgc>hbb6`QuTNEc5243z)1?+qpnRlVKn8M6JSw9020C}YH9H0eHaH4SNqWbu{N!&b zo9A-N0}cvy-U6}=@8{1?w%Bjd*4QjO$!tEe?f#tG>}TNUXqvc9)%^SW`FtFYOE~go$-s93CQU}g+)sACWl+WWfU=4np`2>}@%8T)mHe{P7K zQAoVXyybS+iX*-u3=L97zn`%gHz>2e`2Skp&LGG7Tl2w70TUZP|1E6$eZcAcuhIn5 zr@TIgc`h(8i1{#eeV2SUKl&7d)081Yh%_>tRhd8+S5t6f6@>n0Nom>oW(mf6O>|wkj{8ww0;cAPs@@cWN=!m0-e8#W0iT9nUjeRx(pj!ikh$Ec%evH|m9#e{wJ zyd{5(*ut*4I&56ZbAJB%%(s^>r2cz<0299&%ofst9=Oxf_K?NHp{L^6Bd}C zUh(OPz~Obd?UH)&b!QHoTzzW6a`AHvT7e>srAsEymOcFX`E*H@$o&Qe3}3q$n8SG` zp1tN{-ppa(WvUw4aHxl;fBpL;fq<{fv$}Ve9SG*FOTV$*g!RS_Mzfn1b_NlajKK^V zMV6`!z7?)*rN#4&Yb^dZ9lQ|06rpEepkw{5@!^eHwzelv6xvp3@GV&GxOT?x3k?ir z4God$w|B|&+-_L^g9&dlnv*3yx}2@uA7^f_ui&$X|be)!`Gcl6n4yHDEqSUG0%Y;=?vltlMbY96g6Nt@Rwo1 z>htoC8Pwj&f2d>JQOVL1>Z`!ERr4ETc2lYMV#!V34!xZkZNCpxeZ6CuaHPS?`v9NV zii1ZOc}z}gu(9P&u-;$Kz;45C;ILiy_OXJuKVsN)mkY7wFl2KvJpKLq_LPRTYvg&Z zf9E!cssGogs3jfJ%eY#T&AILSd(}qOEo#k67!39|X{EL8JaF!OP}@q=1BX8TU>B)Q zn8(7&wAqUJ#OIT76G9F%WHB)A-COpbz3uaN#k-5-FR%%$IPsy$?B{xBZ6O6F_E%qD z%N$^6h*)@nag8ibV=k9p0^^LgM?Wyn2vSvD&!{SIV6dlM-L9=Rn^i(*@_NSKK{Ku@ zUlTd-Q;GdX({F}TMLaT&@)Gm%nWr97IN$7*>6{?cx;6VcV=kkc`Qb{ofTGJ&SXMDx zW!(QM&$Hl~Ec2G_>|TpzbxjD8a%rB+|J7#2`Nu3hS)Pm@&pEDaV=&{EXn3lwlF1z0 zy@-kZuu;N+yl8f>zynj5OvFVTm<-Yxba&Ln3(fF#%xf{*#vlhJs>9@pnE~bG2!x=)7&WrD^l2>I{Ic@@N2F5$Gjt&|INpy z*_*o@*x8w<-mU-0tfR;IWrw1{PH!%!TYrC_W0Yl{^816_BQeGW7AvY)Eu)zv7B2{4 znlzDR8?Q>kRqhow3@2R~lPho91uTBe&U}GuLAs>Go<$-O>ljaW@jHAzH^2H^LdHuD zoob1On=dU7e=XLRXliPFD#m_9o{8sk!@HAg%b2drQ}Gh3sONp5nee9hxT3>EzH^@! zL~LgY^FF}H0f0ge@#(GkO$+?%(G& z$eGQh6SH31$VFY9S=wg-ht;tQmpAc5=*Fe5&`V2TcpemB_Dk@HLgrR6RnY}Y8u)p* zcupSJ#B`B%gxSiFe%vZnDxly1NZcq4T>Zjl4abO z><=U}D70ruHO*SFVqQIC&)4?>{ta5o-Y>Yp$jTJLGbMDLWA&s1eu~ahlneeagf%l> zZF=JPnE83b(%p*$RaO>r)g>4dJxaJy_Q%fP*>^@}hAW!C&IK^#n5DaaH;Q2wTd-iB zhQ@*W%A2p)rkT0atiH zfo${4t9op52@~Gk`_lf<)WEQYvFa7~iX9AWs_f6@+w2|AOGJ4Yoap-0pvx$lr_H}V zk)bk<;f17W!lr2=DTxBCt3*>+`|23KHcmNp%822pghZXw+;0*R0=FAdPsS(o>T$1m zVJXolT#VtqWLnuWgBgsnO5AI_{&B1_(wS8~)6pSB zHaF7pZIp!ZJy)(%*juAFYpC)zdT;drhB=BEkUEv)aYQ-qo1E&A9y78fv@pEgjy~ML`e-ap;h6=Em9hY?2YpJcy`XE95 z$Y+JgeT?ok2Ygc#Rt4HXJ$)B1Z-qq^XTPzj<9k>NgK5e?PVOxY*R( z5+0s9sj%`H8y`!CE`yHAqNxqdJo*xA8dN`2vt^v;TETMV)vVp`St|^TEjt?%H4Pfh zGc!jCzF_1`@cqc}q9gmf;6#Q`{2FZzhF>4ptvJ;bQorC3_ubDj9`o8wx+Em(4k(Kp zdC<_q%ygLJhFJ0rJ`??$-VKfq*q3bFDt}`M+fua&UJ1M$?_vs>yuJ7wojpzq-FV8k z=@G+qwFTQcCog5VQNzdQ+4f-8Vh8tPqXy;&e?R}`(Y)vNz;5d@wIxs3zP@!_Yjoj+ z-ib%07aIHJ7vx!9_&n{vse@b*H#iw=4a;wHxBWek!8iH9W zc_!&O^s#UMx8NqTrDOADHufXT3g1c-&KAo{+=z47-P@4H!La$7T|#fce`XhPAAJjf z#y&>Z7V!<+9x$w8{>dnEZ$S>jo3q9hsm#B{y25xK7(Mv)wf2Dqi)nMHFLm**q7p?{TQjkEmncwMNBj;zG;lrh{Bp7BP!0c+kdca(QuuoQ8Vio1gD_ zE?6?Ko%kSef&KnOgEP(wiyb1_o+t){R{UdDx!rK2sX>qryeb!T z&pEJIe?kaTnZkq$ejZ)l1jb+)or4TnFB@0wlb2VRD;=>(oTV~ONb}i#=PsKYJM4XA zb&LxOj1pK6G|9~oUB_t4tEJ<(@fC{>V^&Oaz&wz1bzdGtb(8 zKv@66G7SrceaxRl)OUCvJ;<(bSz+aD$uZ!{afh0{SHeS#19;LWWD40C+0iJOj9}S z7a0DRo3($9jOu}_qMME@YCd4!5y{PUhkwCLg$4Z%tbAvZCtaAqzD-EtL#3SMv3iGK z_8Wg?9&F-z6EWeZf}VzH;~Q%>9g)S2lhrmjFrD>oIKs-RpvZpC>OcqU?9YE~Ym!(+ zw%xCHuu^_t#4yLC&cQojfm6!)W}d=LAqO5+dTbU?kx-FzZricGc0vM!Xo!Np2UBva zlh7lc8P6Rba(?2_X*giW>~nm<9?sMA74AEg7#bYNnDFnryh0jhCRP6C%dCs^Ne-o$nyrsMd;yIiFf z8n-MG<~?W-ndb2Ops9L*ObBzsm-zksvh@sBAAWZ8f5@85?7i+$$`6K@`xsRnFBd4N zPH_5god1Uk`;IvcpAzTU^YPrwJz&G0rP!1t^F-fUmyb=EwZn8m1M@b^ea!4u77oGD z8?MQ&+PR?VqpivQ;)Z0|ZtaD(J`>z0el}cjn%hs8rz3<>iY=Nu=b04K@0^bBo?+@ccQi`Hf>*%LEHPw&1UM8;;*UmbPbR|CQ5wKF(ij zy3w^o$MkN)@rBY4Ejx9q?}C-jgL&O9ER$Tmq<-IU!-vf& z?qf-uWXG=tsd%=#t4m*B%&xBp(f-6Uk$uwT%=ll-FAq1&DgBZC^u^}m-~W}`2DLtI z{9E|_-k$fx$8@}W7FeD2yt{1EcY*DTj%d7P{CO#9hp1*wzU0}BtF)&%MZem#DD>2k z39EybxV2j4?p_c)|-D5c}3YQcE7)y@Li(JUC zvWVHEPl@xEMgOIWqZ$0EsXLheSe#kV;w98<7Rhy_D{y0-j@7k*z>6zZdHTj~o~ELy z=BpVg)t+RyQNl-e=FI4Aj~-pTI(hc)bp4r|A6&RHXH)8V%jr$CSZ8wI)8o)ceHwag zM^?n;tkvr)bwy7vKeoy=bah;@ZtrZ9Ir6%u+4qXHrE?>^qVJS=&(7WVbZv>wR=tJC z*V&f7zE`ZjJS+Ix@^5WfCZUgGR|;k<&-yUyZqNk_zmg2LgBC7LkIYmKG(B5*^O1-$ z|I@ZK@3c2usSQ^aMlN0`A<`qgv20hS_>X`Rjqell4nCTj_hixsPuafy=C#$# z&bc)F&5hRPE3O-U3k2Wz*qncLGw*%gJ=y;scc%QdQ<-D9_y51G;(_MU>l}=8b}*go zxBMkLOHgQ?!)N8bx~8-#oZ$;9AH86|x?fj#okQ{Qi|QF|+A)pKp1cS)nY{S?#Wyms zjcGd$iDt0PC}5p+kvDw7PFZF7#gcamSZA$we;a)@{$>H|toIgG(q|7|lwa`EzHZaf z$LD8$tbb|0iRF5F{^j~-3=E7ana<7up3cs&jK;uFF=y_CvtEY-1X}lBS)^3Dbcet} zojYPK8??>;B@_g%$Yfc(+Qf6?j3X14h}=J5ezEDL z{46fxrss@lZ(}_+uPV6X{QuJaP1EnaxNt0K_Fe^@&;LGLS!`$*Z@RMLrPSJIJMEJV zyG{p`t~+yR&x!+90^id@^CC|ETKinCTmDGdl(dOIJogAMotU`!^|F&De=eF_FM0GP zDdX2EU72$)j1Qz8nZn5_8hh1eu5i_x)m9=bcY=jhsU3NB)+D%4S!?N&0+mlLyOtfy z-~3JbM5;<}=a!zsvMWt`<)78>zixN#wQqLvJa*TB?P62bew4T;pLn%>YkI`aybn?T z{%&iV8E5j~o(3=F&ynIRD+5xzcF$@#f@i7EL>sd^Q;1q>iyV_#8_ zn4FzjqL7rDo|$K>^nUk#C56lsTcvPQUjyF)=hTc$kE){7;3~h6MhJ1(0F ztBTx$+|-gpg^Jvqyke^gTP3i$R(Zu%AYpwa1+bEmY+I!W-v9;Y{GwC^6Fn0>16|jO z%rYY-J1zyAqLehNAQv~N5k)C!wn`Z#B?VUc`sL;2dgaD?`9nIMXEJ)Q4N-fSWElN&xElbTSQARc* zB^j>2ptL9l?46Wk{nVV)+|<01VtqqBLli6BJ$(bV;PfTFS_GYt_~ zD82#7fW3q4kc!*_xVb2*VSWcI28WTAOMY@G$a$VFwn`xTty1!nGgGX4DMCM6oB>82SZrzKjLB^sL~St1$XUzC}inU|P@>?)8^DVZr& z#))Rhmc~g2x@oBf7P=+|iH5p~CTT{xDHf*2iRPvzCMKpPV53r!t=#g9auZ8zl`?Y^ z(^K^e^3uT)pa8dW4Dhs7GSY)M94r!$lUS0LUzBUB6rP!vl3!koP#lt(n;Kk_2ntU_ zGjjt&LvvFTb5kQTGZRCEqOjDW;>`R!kg0|Sdd3iwK@nr+UzC}eSCR-yskTZG9Tm9+ zR?bDKi6!|(A^G_^wn`u;C>ZG(8h{hHf(;~EJTi+*@{20%z-bzsbAnR~Av{PX$jJmt zDJXywu2o_(#FFB~veXo?(-dG*$r*`x>8UBUO3)+)6VJpFU4~}KMi!|_Cc2gemMOX> z=7veSiN*#7x|W7UDdx$>NybLTX{e?b=ckpFCl;kTrl;nW*ebba<`#f`qo4r|Oifhv zFH82S=G_f)^vNAGP(ua7@Mjw=?VZOD|#|RII0;EE~j!OX|7Ube) z$7Q1rE{Q;;62w4IsX$8%jR#sq}c6VX;-`;;_KLY~;XMsm#F#`j)FbFd;%$g&? zz`(#>;_2(k{)~r(Q9(MQV!Z$Z1A~sIi(?4K_1?3FTnq{VM-D`O{2w1@J#n>u^p|^lTK-Ar>8r1LdboFyt=akR{0C#Kk_y7O^ literal 0 HcmV?d00001 diff --git a/levels/menu/main_menu_seg7.niveau_upper.rgba16.png b/levels/menu/main_menu_seg7.niveau_upper.rgba16.png new file mode 100644 index 0000000000000000000000000000000000000000..77b70eaef78f0113683f680e3167377b04df934a GIT binary patch literal 4818 zcmeAS@N?(olHy`uVBq!ia0y~yU~phyU{K&-V_;xdG`FsWfk9}dr;B4qMO^Y9eij}R z*87tC_U}Lc;nBasw(sZX8~^$7vC(nTW7}qi=j?0?SdOImIkK_waVki=6f@lH;*puu z#xtj>%fZlZ)~-G`#t*VDZhq!DzkYpkMPZ)w;m^OnH_D|aZ0I?c_TbMynKwV>4>%(nA;a~Oyh1&m&A^cNPCZq@$d`X%RvV|o{osBKPA<)tyVnyb?@9z)H zu)BBo!@pm3Y>vLZ3!a~6WPZqc_%pw~goP@Lgo^2UV-ByP2IYT;YuVarPv3K1`~TpB zsVN*^mZ&weGz&AUH!~bAXLDprNMdBWSK3y(Rgs6u;cwW%K%TC)n>;*CQ6a@<4ScTd2@KO2c!QQ$ zC}?;yI`rGy-{2TM*IJfO+I z!^y~&V3eM)<9}15;>|#YIjk%!_6)&nHiiakSgWFfg)sM@J97u0tXidW5SELcs8DnQXVF^qdarE z936O4Kkd+mhyUynbR2B?eJ&lC z)U7BbarwZZc@O{mmFL;Imxo8bp^lepQo;k4>35iTx@IYy=Vr=omp`EOQKDJVVE=yx zF+QdPOb!l*x)_7x|1`9y9cFLi*Kg3|_RwbH_D$$K!Js9yM&!P+1{=3Qjy1ba;rVz2 z3riz|h9&D`s}CIb;MCao@Mk5P=W@#f4hnYO2IdTmhLSJ-elF%&{`{AL!JnElAAa#} zVA=n#^&r=iynutMrw)8z_uyulyn5LRj>GNe>m|x^{~tbZO8ay|3X9jQHl8(WsvNR; zB-h>lcetSXdm&p~oBe}`&`q0?11@(npVBm{`LB1{pzu+pLiDtUN0a5+?EUu{d?@;p z$Z%M`USi*W#;S;q{LU3N0_^`8PdUc?`@zM2c)q>ESNk~Qn#w)Bjm`nWIp&7{l(ZQ3 z?caawL)vu9!~Odga3m#Ge0s=z_}k?JO*}6&tP>QED`*@zaB?+gPpWO3{Q;%`ZVBD* zjjG@G-IbTHU=fl0^5s#ZRPTX#cecH?INX1Gx#T~F&;R%rEPi{aN`l4pZ9~y4p7?zQ z1_nl6Msuvb%t*Zd&zfi1Ci@1tWQOFhgqaJUEjzW~`PmZ(xOEgHBN|q+PHAnZxV_K* zKtpQ61X0#yo9yEo3R!d%TuVE-Seh6ayuQhs%``s2^x3-qg?!uH=l>1X-1*+<=pWja zcy|{+4_6x(Pgd4~0E6U&gsn*r9)za+`0&7{d7ctCvxb0K?*20elohymSacJ3?x#hV z7ArL$=of#`HgVA^hQm+!wD?(sA6?5Vdi*i*^u^Qyhx zz+z{mAqQ8Jm#uL^^4YG3pI@KmiNALz{lb)|2^AlHFdyFL`&-f_#oXw_rZq_xTmCUJ zt6#VqwoJ%jf1$yd*fI%;3AZKI#os!juy}{Gguw0wKD)CUGVf}!d3sv1J%2Klr>SV0 zLw|#pr)L3!PHfez#)(teZ)z$gp%*X?x>Sp$j>_o?;2x5>qN_YQ>uy zR>>Ruez;Ed1IvN(w%XN366@ma&n(E~+9EIVVF6RWV1$pSyXDg8Jdv$NMGq=G&iJ zz?$P{ydjC7We#J(|2tZ3uiMj&V%Wr@e*6DVyug|k92dx%5NDqJKy*v;gsY#^1X3%` zE>J&xpy0Zp$-?vxgP6~D|M^J_M=e(@GcXBGiP-X%uX+D<`Gm)>cn@zpyIqn+ z#Z|&ZbnS*T)-`V#0`}d%#;voZfmL)xzft~e_BMG3x1eoG&C|mL4BXZnXubCP`+LcG z%&U+7J-*KP%-#QuiRXj@+Mlr>zO&QerML`_+W|Gb6_S6LuNbks5})!QVZ#+625Xj> z+x6_Nhxyq89&=n#V7gYrbG%{gg5L*@O%UA@yMg~kT>#6quM4!kv9D0%%wY))S2wJv zp573Ause<|?f z+n~UFilKThkKciRTxUKvIaE4pb5=yl&3<0b@Y_}9K-)&q3(Z|k_6o5~2^CRH(*6s! zwJL3y&!81yzh?$JSE9l>wq5PbjMtVw5tx#4fs3h4=DFp98_Wd`(u{Mf%k_Uxt9@40(fA38|(x_u06z63z>~Fbj}px$*KsNf(n@ z(>rHdPM)+raUSo+Qw?`H+T@R4H`K67W#-PlGEc=#?8YvW8IIno+<32-mBG2&#!HxY3m!;TmXh=!uU@P0zP^*y;eyjVSR+VPgLJduZE4QNA zb#kH_D>v+#$voq{!$MXrPG7bFxjWm|wmiJCuk=9QN$!GGzZpwycTD8=?-V$n%@o|S zNJVA;VVnOjFzj*P;8sSS*!d=ifjhRa(31=9k`advDZ+tD`P$x3Qq=}u$ zi($@v^XZO4Gve2ZSV&ZP+Z*hu_%KgV%TsX1b6!b@zdsi!EO>jr(QqfvBKa%Y%s&GK zUQPUNui$LcHcg0UQj>sq^Cx|cXO8pOOY2Nj7ux+~dqn)e zIVoo574}J@EQ!Vp%Ks!Ohb5fnoE_ow+hR3j$>WUh-xusM+m6(?$y~rc2c$Sw*UTB z`9OlnU{k}&`3JQnuec{9>?re{ywL2q-3|u!V~Wm28^xO^nx9zju$@`Ck8wtU8yHavF}&KiN1eL++9oO|#@^*}((oU<1;f0MfK+0!9fR8eBe z)P}nGyWg@O{`>m3!R7-yYfm?@9_MFs+#tf1F3|+M$n0wLU(XG!XG%&Twp0HoA zi7}+L$wueE!GjE*UoWunGoJtNuu@FHlzRo2$PWguKzj+3#<@m}8L=lBO{A~b&EV<@ z)jloHGtKWnqPbr}k3qvHieRXxx&A|o67k19! zd0_P5@8{n3A**vNfm63?^)Q&>;G zFW$a4;RgSd=4tT{RJgo$J=i5Z=ZoMxcC(9;Dk6?@%}clo9yFLZZDzmo-=X$_0b7-j z*zN0$XR`yeFLFm1HlAV)Snbac!I#4vw*GjdX}fAc!x3(YpOYpnh&tV!cymwg1F1%4 zsZ|FLM7c6XaO`JbTNeH;D&g_DF2*@b>zqHgC|11bV~lvj99?tZ45oPsd?^VUok1xDn`+K)$dg|*k$K(W`UYV$W}TbdOu_0a3Yl{a z4gNH!{ge+l-#qD5IhzWD*4KrMjHiqiOkq72b>N|z@(K%$?CMA^gFOslMb{gB8$SPT z>|OKzdSm7ft0ktKAq-j35>i=A)@9!%6(%xeZHQ%OXV@X|hw;s~rexNPht&(R9X+|< zRVMiTV9-f9&?ECa54>N~#_aAzGwO-=J(5AS; zEtz5KQ`JVpy?OFVH=BPfc*50HS&`TtqWtH;vxn~|Xgq7EmXDa$kk-@iXwm^cF^#Q} znp_7`MHdQg$i2;cBEZ@p+k@$7!dlM&u15k5E7?tt#y5OzVt#P+@9P6h5^t0W`Z+_? z4%qN_RZj5IcIPY*ZGTf}AT6=#fez1;1}5$)QQzkNXOw%-TrG=RE3@7CVujM{ ziIL1YEL@B$WKPrwh)Pwq_9ZgxH)spBn}lWE}MYE98aVpKH1g1V`nZ}$azYt ze+{DJrT5&L)POZ@$f>@HODPvrXTduoZ_7@`}$; zw~$CkW!`am0nZ zH>h5i#Ord5Q(cN0H+H5LwdL!>_hiyU9 zE1F{a?s6U3z`CX}X{SyOxAzYRp-F2e>Ut}`ekGZiw(I$u-PQ5uc_i9dIBqVV_j2C5 z{r7+G`@Zl0-@Au&PCNa#S35m3vhbmk-qbUxKfII{rYqSQWzSmHR&eRQTcxz2yX~_T zg+HP*{RI?v)!d(-UT??f`GEcB3GGWa!-Y<+nG@=gxtTIGeLX(j*6(~YKR)=tnObL;JfmYtq_2SNjE7HZr1N$vUn$go z6gKVezs_%4IXs-U)YsSSdH-jL!s=(=ZU;}TyS(6I`22#NvqCJ6ZsJ#e@9VzyZsLT) zf6kd*FNvxCKEo^U%Kdv?$!#ZhuHl-r0U-`p17| zeNz{Bz%IxB;?IN6n-o4a)qHFE^y#5V>&uQi2@mIT+;6P5HZz}8U%L7Ksxb3K)+MEt zcAMYb2&fAyS#hiC>K&P}{-4;hyilH-Qauo;&|aB`|g7b;X=wwc@)ecML8tx!v`;aDS&oyyg6(yYkB{YQ9JRn)j0N{f|s3 zQLdc3Hjj(<)SDdao}|FFabJ7uzWEMYPaoWWVc(nv6;64%JLYyjf{gkj=Q&+ATJ*e! z=Xp5$+6mgW*4r8uigLU@63~5nvVO*motlx8HjCVL*<@a&b^Vpvw(9qMU6IX?w_Zs1 z?B7=Qx~}I|?nCpv|H_UQpRc}Ob^Q0c)9d2pBRbO8sNeHAGC56a{W7(9@v3)!w2FQS zF)`U+`2WLAMBYpF%sS~WYrm^l<;}1A(jIeNXztM^yRxFhbT3CV2k;(R|G8@a!%vTd zKS!-o$owf{WIAo*t?+BP_cwD#hU9%zdVM5s|6?zgcEO~=RsZfWxBvTiuzsh-(Z8Pr zfBu|zXXcDK*U!$EofFnu6L<2Q?i_!)`|6yvsT%c1_H{6r%)W2COI`2DBh6f^d9!6V zED013now{1o_~XG>AJ0NO`ofs^m)VL^p#_$q0R;qpEIhdOHM@Pu$(NMw)WrE;Qd@7 z+ZBvWt-lX^RB?|NUZG(~_LOc{M+`n!5LUq@P1J<@DW7cdp+#?-0&uG)>xBUVWTAcfHO_#K+kuv||+V^ow?#+oiKbD2u-E=2X z_Sgx9xAz_=_kEL_y1J(CCih0uY+df;336X8)t9L+cDXm_+2ls2{Kbz=xj%k>UjO-X zy`0&EEuVj}9jjlO_axrJqNL1Xn?deeNnazKbCnY&o4wz2_U?vK`Db@J6OD>e*s53Z z$A!kowH2U@-hDN9``vBD`L9MGKL*Bsi`CWr{*>j}m6v&0*{*D>y)$W@z#(bT zrI}eq$1T<^m~)pSu;bOMh}h~65463R&rH1R(rjsGVDRtT#zQL=vr_Kd*t)XmbMWEK zZ>(!W{zsP9N$Qm3{o4{jqAvFaI>`%-#20_4hdw z>HTWu>viiEX!2YyIF`C@@1ct!y@{;KR>@!HC>=lNFM5gDV%LcWi{<(G`dyn}fB)O` z;M;-Zvxm-X{{O-Jd>>!>U%x+nxsBfpf}fY~yEyxUwd$oqpZ=U&8h+n(<8E{b_r@ANwjQ9lq03O4;O&lIY+D5UrMobsX{r`ODpTzxXr6=pW%H7kAKh8K35Rtm!(3U;C3k_Tieb0vIt(CL< z;j`7-<=OG$_pGm8c8{B3zWeZ%Q)YdiC-6;s)16Y~e#xD!nECnCNI~!PjdPX=%+m2@ zOI-MEb=K@@72=Pd?M&RV$n*BLnW{U^a!eLWlK*o&|6Vp%LipC5f8tKPR!O{jK!A(& z#p3i&4;k3}>t`7}S)Z4(`qt@=`u+ne=d}wjUf!;@wBp*GO-+K6xjLhz&97I~UO93^ zqIGqssUFv9w$a{n!iO!m&2*xtVOA?M}iie+~N3IcxID0%pDySUpq&EUyOk za@OR7*K=1DR~}S!d+;LS{fVIatm1~APyKw(h_SVQ+$?V7VeV|&H`_eCD)!2Q);Fuw zkL>6u;<}W$(bYp;(Pq!8oA#b;oSXjLn=s|-nyF_uxMhFPu#Yb|;~Ty6%aYSS8`tkz zrYVy5HYfA#oY{W@%BnS*+}hH_6DOV*Sfaczi`OnngqttFdHuf4EWd>s|6P}pl9dwp zTotoHDmJW``})RxZAAy(ava}K6Suu&^Y`W%{HxBaQ-l38uV@}yXwoKihe z{yVrsBDT!c_GFrv@W<(KJzKZ#;1HUr)e`3Fn6)mEP3`K{vnChLWk#%cylv5DZ+(+X z%H^g@TT4nD(>+U^-H&ccow|kHeHzUh=dFf8e`)?~ERA;g;D>)A)V~v$&pHWvQy377}w&^X`Ptw@Q@uKdq`S zUoM~0X1!tZ;mn0C_uTTD#Zy#b`tBX;572G4a`Mq=v0&SKV|MSE%sTzZx67GiB>P_< z5&3*-zv24*Q}%CaRpV&s+Sz-wNJ0Is%hbFYHO3?tJ|@+){@d5>R1GeCZkiE#wI}BO zfii|*W+sRmlbs$Y&? z@jl?_#MA9G|D^4ljoXzDD;#cd_PNkLug>`M{P)KaB@=m<-fI5bG_z}=?Q7e+bM3f| zeVL7Qy(g7SQ&re<-uDx?+Pi`k7H9kSMLNYzny}@+{`3zMZ?y5b8N^=SvU85#9fxHa zt7a`anlx#RM3A5OXAN~pd0mA#jb+E2{I2;e?{^Lkl>AUHXZxA6s^XxQqrTLeoNXPB zdpeW?e^%eF6`i!=@`?9fCyB&`K2DQmd48OSRsYGCg^fRdv5B`OTDX4ed9tnK_W}OH zEcrhTMH;tiD}30Pp(4hl;dp-&TbJ98&ND7SzUrd$ra#zfJNcThWcPvIz1G?CyLP8m zt3PIWCBd}Dw)xZVS|g7Cn_pNu$ZIXs=i<6>*stZasy3f)5a-VT4USTQ<4G&7y**Yc(<^5`jRNO@xz9C+~U!p5Gvynzn8sqQ@+H$VZLXZC*uSPJeqttvTOt`ZmwlCrFIV^3zlnz>kc)lh@BEd2 z)3&cyKGS0H`;Y1ug%AE0Z(HAfpmpY@(ERh#6%Q5{+4m=#6gk{yjj%8Zkx^58a*ttZ zb4u=+Z?}@tnf4u=nz7&HHj7GR%0sIoTVKceOlz1_>A8tN(7ilYLW}qNf#Y($E}ng# z3U=>NJkl`dO|k2jfC)lXw|xyiKH#xhrV!J&yCUXD^82?F3-WcVmb$l;Zl99nVgI82 zd9gt)XG-MLxa9Djk2ez-`1brgd~P3;F~b}OhiTkg6Sxkpv)JP5u;<~gTMFS<%zL!m zw3Z65bG$C!(r1#%}2dOThyReh5E0km%Vfe@zUWh^0`$S(_d&}whi`omLcjaE3{#aDgt1Rv9$8DaU zRzyfY?S9eBvtaw>NEdxE*LbJ+BfRzB!ak++|4wOE3{Xm7I&Lt#f8L}N?t?xCp)t+n z)v*^%1NwDWO*&X{!RkPR@(JrX8#zDh`Fo#RdXk1yLIB^6+ZXOKZPZu2=N4a*;M}~S zD8=jD``Jt(iVplYfAdt`4h=MWu#iJ`&y+P4EHiZ`YrZ}%cc8%}L8By8p=H5;{(2kt znPGDCmcH5gdeX)+mfMpRZYiG@-LO&gb>3^ah3Axh{af+p!{v?Da!L??TqPX_;?H6URM2kBxSdYnOyZ_ ziDysiq#bN@Ih)uXzxkbe=;+(v%@3W@R9i0mXLQwBCA@a3!F2`(1_n=8KbLh*2~7Y{ CkqmRzW=JoD=x90x2|)7 z=$4{e(=Y!s^P7I)qRE#p-4nhSC+(fT;^&p`?22|$ogItp{T5bnamovqaBWGB^j?`4 zKYc@vsC4_{tTbc}X58 zR@=n-ySf-Voz?GsmwC79OO=i7rBgMtPB>3GeRZFV{}O)TqMr}f&)YoTcAxzBuM@mZ zJAZp@{QSet^^&VIb}C$b8gpgp))xozTDuG0a#p1p)`$pgo8I;4##PzqM4j5mK&#NC z2eYPR1}yfxeXr~lhvDaGH!dW;)A_xiyYQ*rL4EgyC)wJZWo&-;*>cBkyzp+Dp6%Ov zGV|CEPT@@2$a+ujEV*Q+d>T9vd-pPE}$vvq){2x;g28MA@5#%N9k3cF)=smh0-J z7v;54XnKjC#W zWtSUF+Qs1~|I9r9jqbiT^KN~~7kjbJN0Gx^|+{|^E=dTeG$G`WA7fH za(RBm|MyF4m1jwK*$bY1-ci$H=On*y`+KE7H#+`H)ibBA-Klnbk*Yld1EXrDvvYu_ zvokDvFfdfinLA;x*O35$*8OW1DP=F!=y2t7oXsk|ebYzw=A(yZ^(JgNr4||EljN~U zXJ2FfBL2;-3O_jP8k)8~cjM;1Y+-QbxIyu`JKVa~oR^F0_%E%|lKFmN|CjY|j+)PheVQe!;7Y67$#33f)uE6ZZMe{EY%fQ&(68rzOUPB*=E`zN}@wCgtt5;{K!j zN!DJQJ^rZN>$`Mf!_CsmDMJ4;W@Xlpv%{r9uwpMPDp z)$Vk&(u(NfQ`a(B-uG{KboiCAPP}=A?%%rT!#>;R{d_LHpFvA2pv_GB;35VFUWv?* zh>{3jAFJg2T)o7U{G?R9irfMQ5U{bYC`e4sPAySLN=?tqvsHS(d%u!GW{Ry+xT&v! zZ-H}aMy5wqQEG6NUr2IQcCuxPlD!?5O@&oOZb5EpNuokUZcbjYRfVk**j%f;Vk?la zzLEl1NlCV?QiN}Sf^&XRs)C80iJpP3Yei<6k&+#kf=y9MnpKdC8`OxRlr&qVjFOT9 zD}DX)@^Za$W4-*MbbUihOG|wNBYh(y-J+B<-Qvo;lEez#ykcdL5fC$6Qj3#|G7CyF z^YauyW+o=(mzLNnDRC(%C_oLb$Sv^og&Ut&3=M_k{9OHt!~%UoJp=vRTzzC6#U-v~ zCHQp|hg24%>IbD3=a&{Gr@EG<=9MTT8*I!UtlmqroO0s@xPHJvyUP-aOp`Ia% zmF}Lt0dO6lAV|;5EdcAP$SpuoS(2HC2rLxefMmelL3T(*ZUNj}6xA@lgB63r$jT)@ zxfJ9)PZwJyko{IE`N^3nRuE>QsZpwdv5{_?X{x!diG{JDuBAzmv957iqKTP_X`-p6 zMKY36o_WP3iFwJXAfqaB3-mHGQ>;u=($Wl5Q;c+z42_L+O$^M;brUU<(sa#JjS>@$ zEzHc!EXGBmWV0j#6J3i`6LVb?BNIbiOG^twT>~?7 zGc!wLGc$t}W3W*v$yRRpMY)M3wn~|~iRr2O1$pUU2~dDrIR<#zDjDe+AVdOk5=+wZ zi*jw1!ZY(y^2>`6QX!eSslg?Qpzt&_GqbcbHn+4iurxKaFf~Fb3QH|2&dkpPnQCaD zXAChJ6fsu*MVYC2C5fPvYO7=j)=`mLVC7ttnpl!w6q28xW2*#ml!B3-p#eC7E7(Ay z#Ur!0B)_QA4xFaJIVU)^5W<6Gf}BjSl!5{{;aVjoLo6vyEK5xRTciM!O3p~kOHWO) zRe~ldn0O|Z=t?s+G)zfKHPJP+G&I#UF*Y;MO|&pD)3pR81CzwG6tiRtRMU&|(@M${ zi&7oaQ}aq}mE1FP3&6fn(0~S}CaU`Kj8sra85kMq8XD;u7=;)bSs7benHnhRL%e6B z56aUp-`eP7gaEkDFjGTJes;jgNvjPAW89P>Y`e3aUr@psd*{3O65xSb`$>a-(+B5U`q0KcVYP7 z-hXC40|NtRfk$L90|U1(2s1Lwnj^u$z`$PO>Fdh=jE7NN-KgqcpEm;ogRrNIV+hCf l= DIALOG_COUNT) { - dialogID = 0; - } - - speaker = sDialogSpeaker[dialogID]; - if (speaker != 0xff) { - play_sound(sDialogSpeakerVoice[speaker], gGlobalSoundSource); - - // Play music during bowser message that appears when first entering the - // castle or when trying to enter a door without enough stars - if (speaker == BOWS1) { - seq_player_play_sequence(SEQ_PLAYER_ENV, SEQ_EVENT_KOOPA_MESSAGE, 0); +void play_dialog_sound(s32 voice) { + // 1 was the default value for the unused field that the new speaker field replaces. + if (voice != NO_SOUND && voice != 1) { + // "You've stepped on the (Wing|Metal|Vanish) Cap Switch" + if (voice == SEQ_EVENT_SOLVE_PUZZLE) { + play_puzzle_jingle(); } - } + else { + play_sound(voice, gGlobalSoundSource); - // "You've stepped on the (Wing|Metal|Vanish) Cap Switch" - if (dialogID == DIALOG_010 - || dialogID == DIALOG_011 - || dialogID == DIALOG_012) { - play_puzzle_jingle(); + // Play music during bowser message that appears when first entering the + // castle or when trying to enter a door without enough stars + if (voice == SOUND_OBJ_BOWSER_INTRO_LAUGH) { + seq_player_play_sequence(SEQ_PLAYER_ENV, SEQ_EVENT_KOOPA_MESSAGE, 0); + } + } } } diff --git a/src/audio/external.h b/src/audio/external.h index 8417ecbfe..c567a9eab 100644 --- a/src/audio/external.h +++ b/src/audio/external.h @@ -55,7 +55,7 @@ void stop_sounds_in_continuous_banks(void); void sound_banks_disable(u8 player, u16 bankMask); void sound_banks_enable(u8 player, u16 bankMask); void set_sound_moving_speed(u8 bank, u8 speed); -void play_dialog_sound(u8 dialogID); +void play_dialog_sound(s32 voice); void play_music(u8 player, u16 seqArgs, u16 fadeTimer); void stop_background_music(u16 seqId); void fadeout_background_music(u16 seqId, u16 fadeOut); diff --git a/src/game/area.c b/src/game/area.c index afd81c347..81f66f9b6 100644 --- a/src/game/area.c +++ b/src/game/area.c @@ -88,13 +88,12 @@ Vp gViewport = { { { 640, 480, 511, 0 }, } }; -#if MULTILANG -const char *gNoControllerMsg[] = { +LangArray gNoControllerMsg = DEFINE_LANGUAGE_ARRAY( "NO CONTROLLER", "MANETTE DEBRANCHEE", "CONTROLLER FEHLT", -}; -#endif + "NO CONTROLLER", + "NO HAY MANDO"); void override_viewport_and_clip(Vp *vpOverride, Vp *vpClip, Color red, Color green, Color blue) { RGBA16 color = ((red >> 3) << IDX_RGBA16_R) | ((green >> 3) << IDX_RGBA16_G) | ((blue >> 3) << IDX_RGBA16_B) | MSK_RGBA16_A; @@ -114,23 +113,12 @@ void set_warp_transition_rgb(Color red, Color green, Color blue) { } void print_intro_text(void) { -#if MULTILANG - s32 language = eu_get_language(); -#endif if ((gGlobalTimer & 31) < 20) { if (gControllerBits == 0) { -#if MULTILANG - print_text_centered(SCREEN_CENTER_X, 20, gNoControllerMsg[language]); -#else - print_text_centered(SCREEN_CENTER_X, 20, "NO CONTROLLER"); -#endif + print_text_aligned(SCREEN_CENTER_X, 20, LANG_ARRAY(gNoControllerMsg), TEXT_ALIGN_CENTER); } else { -#ifdef VERSION_EU - print_text(20, 20, "START"); -#else - print_text_centered(60, 38, "PRESS"); - print_text_centered(60, 20, "START"); -#endif + print_text_aligned(60, 38, "PRESS", TEXT_ALIGN_CENTER); + print_text_aligned(60, 20, "START", TEXT_ALIGN_CENTER); } } } diff --git a/src/game/geo_misc.c b/src/game/geo_misc.c index d78b02488..63bfa9d80 100644 --- a/src/game/geo_misc.c +++ b/src/game/geo_misc.c @@ -165,30 +165,8 @@ Gfx *geo_exec_cake_end_screen(s32 callContext, struct GraphNode *node, UNUSED Ma displayListHead = displayList; SET_GRAPH_NODE_LAYER(generatedNode->fnNode.node.flags, LAYER_OPAQUE); -#if MULTILANG - gSPDisplayList(displayListHead++, dl_cake_end_screen); -#else gSPDisplayList(displayListHead++, dl_proj_mtx_fullscreen); -#endif -#if MULTILANG -#ifdef EU_CUSTOM_CAKE_FIX - gSPDisplayList(displayListHead++, dl_cake_end_screen_eu_fix); -#else - switch (eu_get_language()) { - case LANGUAGE_ENGLISH: - gSPDisplayList(displayListHead++, dl_cake_end_screen_eu_english); - break; - case LANGUAGE_FRENCH: - gSPDisplayList(displayListHead++, dl_cake_end_screen_eu_french ); - break; - case LANGUAGE_GERMAN: - gSPDisplayList(displayListHead++, dl_cake_end_screen_eu_german ); - break; - } -#endif -#else gSPDisplayList(displayListHead++, dl_cake_end_screen); -#endif gSPEndDisplayList(displayListHead); } diff --git a/src/game/hud.c b/src/game/hud.c index 88b8e7ca0..5fc4c7b50 100644 --- a/src/game/hud.c +++ b/src/game/hud.c @@ -404,9 +404,9 @@ void render_hud_breath_meter(void) { * Renders the amount of lives Mario has. */ void render_hud_mario_lives(void) { - print_text(GFX_DIMENSIONS_RECT_FROM_LEFT_EDGE(22), HUD_TOP_Y, ","); // 'Mario Head' glyph - print_text(GFX_DIMENSIONS_RECT_FROM_LEFT_EDGE(38), HUD_TOP_Y, "*"); // 'X' glyph - print_text_fmt_int(GFX_DIMENSIONS_RECT_FROM_LEFT_EDGE(54), HUD_TOP_Y, "%d", gHudDisplay.lives); + char str[10]; + sprintf(str, "☺×%d", gHudDisplay.lives); + print_text(GFX_DIMENSIONS_RECT_FROM_LEFT_EDGE(22), HUD_TOP_Y, str); } #ifdef VANILLA_STYLE_CUSTOM_DEBUG @@ -416,7 +416,7 @@ void render_debug_mode(void) { print_text_fmt_int(5, 40, "Y %d", gMarioState->pos[1]); print_text_fmt_int(5, 60, "X %d", gMarioState->pos[0]); print_text_fmt_int(10, 100, "SPD %d", (s32) gMarioState->forwardVel); - print_text_fmt_int(10, 120, "ANG 0*%04x", (u16) gMarioState->faceAngle[1]); + print_text_fmt_int(10, 120, "ANG 0×%04x", (u16) gMarioState->faceAngle[1]); print_fps(10,80); } #endif @@ -425,9 +425,9 @@ void render_debug_mode(void) { * Renders the amount of coins collected. */ void render_hud_coins(void) { - print_text(HUD_COINS_X, HUD_TOP_Y, "$"); // 'Coin' glyph - print_text((HUD_COINS_X + 16), HUD_TOP_Y, "*"); // 'X' glyph - print_text_fmt_int((HUD_COINS_X + 30), HUD_TOP_Y, "%d", gHudDisplay.coins); + char str[10]; + sprintf(str, "✪×%d", gHudDisplay.coins); + print_text(HUD_COINS_X, HUD_TOP_Y, str); } /** @@ -435,12 +435,14 @@ void render_hud_coins(void) { * Disables "X" glyph when Mario has 100 stars or more. */ void render_hud_stars(void) { + char str[10]; if (gHudFlash == HUD_FLASH_STARS && gGlobalTimer & 0x8) return; - s8 showX = (gHudDisplay.stars < 100); - print_text(GFX_DIMENSIONS_RECT_FROM_RIGHT_EDGE(HUD_STARS_X), HUD_TOP_Y, "^"); // 'Star' glyph - if (showX) print_text((GFX_DIMENSIONS_RECT_FROM_RIGHT_EDGE(HUD_STARS_X) + 16), HUD_TOP_Y, "*"); // 'X' glyph - print_text_fmt_int((showX * 14) + GFX_DIMENSIONS_RECT_FROM_RIGHT_EDGE(HUD_STARS_X - 16), - HUD_TOP_Y, "%d", gHudDisplay.stars); + if (gHudDisplay.stars < 100) { + sprintf(str, "★×%d", gHudDisplay.stars); + } else { + sprintf(str, "★%d", gHudDisplay.stars); + } + print_text(GFX_DIMENSIONS_RECT_FROM_RIGHT_EDGE(HUD_STARS_X), HUD_TOP_Y, str); } /** @@ -455,34 +457,25 @@ void render_hud_keys(void) { } } +LangArray textTime = DEFINE_LANGUAGE_ARRAY( + "TIME %0d'%02d\"%d", + "TEMPS %0d'%02d\"%d", + "ZEIT %0d'%02d\"%d", + "TIME %0d'%02d\"%d", + "TIEM. %0d'%02d\"%d"); + /** * Renders the timer when Mario start sliding in PSS. */ void render_hud_timer(void) { - Texture *(*hudLUT)[58] = segmented_to_virtual(&main_hud_lut); + char str[20]; u16 timerValFrames = gHudDisplay.timer; u16 timerMins = timerValFrames / (30 * 60); u16 timerSecs = (timerValFrames - (timerMins * 1800)) / 30; u16 timerFracSecs = ((timerValFrames - (timerMins * 1800) - (timerSecs * 30)) & 0xFFFF) / 3; -#if MULTILANG - switch (eu_get_language()) { - case LANGUAGE_ENGLISH: print_text(GFX_DIMENSIONS_RECT_FROM_RIGHT_EDGE(150), 185, "TIME"); break; - case LANGUAGE_FRENCH: print_text(GFX_DIMENSIONS_RECT_FROM_RIGHT_EDGE(155), 185, "TEMPS"); break; - case LANGUAGE_GERMAN: print_text(GFX_DIMENSIONS_RECT_FROM_RIGHT_EDGE(150), 185, "ZEIT"); break; - } -#else - print_text(GFX_DIMENSIONS_RECT_FROM_RIGHT_EDGE(150), 185, "TIME"); -#endif - - print_text_fmt_int(GFX_DIMENSIONS_RECT_FROM_RIGHT_EDGE(91), 185, "%0d", timerMins); - print_text_fmt_int(GFX_DIMENSIONS_RECT_FROM_RIGHT_EDGE(71), 185, "%02d", timerSecs); - print_text_fmt_int(GFX_DIMENSIONS_RECT_FROM_RIGHT_EDGE(37), 185, "%d", timerFracSecs); - - gSPDisplayList(gDisplayListHead++, dl_hud_img_begin); - render_hud_tex_lut(GFX_DIMENSIONS_RECT_FROM_RIGHT_EDGE(81), 32, (*hudLUT)[GLYPH_APOSTROPHE]); - render_hud_tex_lut(GFX_DIMENSIONS_RECT_FROM_RIGHT_EDGE(46), 32, (*hudLUT)[GLYPH_DOUBLE_QUOTE]); - gSPDisplayList(gDisplayListHead++, dl_hud_img_end); + sprintf(str, LANG_ARRAY(textTime), timerMins, timerSecs, timerFracSecs); + print_text_aligned(GFX_DIMENSIONS_RECT_FROM_RIGHT_EDGE(28), 185, str, TEXT_ALIGN_RIGHT); } /** diff --git a/src/game/ingame_menu.c b/src/game/ingame_menu.c index 2f59482a3..6713bae8a 100644 --- a/src/game/ingame_menu.c +++ b/src/game/ingame_menu.c @@ -7,7 +7,6 @@ #include "course_table.h" #include "dialog_ids.h" #include "engine/math_util.h" -#include "eu_translation.h" #include "segment_symbols.h" #include "game_init.h" #include "gfx_dimensions.h" @@ -21,47 +20,74 @@ #include "segment7.h" #include "seq_ids.h" #include "sm64.h" -#include "text_strings.h" #include "types.h" #include "config.h" #include "puppycam2.h" #include "main.h" -#ifdef VERSION_EU -#undef LANGUAGE_FUNCTION -#define LANGUAGE_FUNCTION gInGameLanguage -#endif - u16 gDialogColorFadeTimer; s8 gLastDialogLineNum; -s32 gDialogVariable; +DialogVariable gDialogVariable; u16 gDialogTextAlpha; -s16 gCutsceneMsgXOffset; -s16 gCutsceneMsgYOffset; s8 gRedCoinsCollected; -#if defined(WIDE) && !defined(PUPPYCAM) -u8 textCurrRatio43[] = { TEXT_HUD_CURRENT_RATIO_43 }; -u8 textCurrRatio169[] = { TEXT_HUD_CURRENT_RATIO_169 }; -u8 textPressL[] = { TEXT_HUD_PRESS_L }; + +// The language to display the game's text in. +u8 gInGameLanguage = LANGUAGE_ENGLISH; + +#ifdef MULTILANG +// Determines which languages are available for the language selector. +const u8 gDefinedLanguages[] = DEFINE_LANGUAGE_ARRAY( + LANGUAGE_ENGLISH, + LANGUAGE_FRENCH, + LANGUAGE_GERMAN, + LANGUAGE_JAPANESE, + LANGUAGE_SPANISH +); + +extern u8 dialog_table_en[]; +extern u8 course_name_table_en[]; +extern u8 act_name_table_en[]; + +#ifdef ENABLE_FRENCH +extern u8 dialog_table_fr[]; +extern u8 course_name_table_fr[]; +extern u8 act_name_table_fr[]; #endif -#if MULTILANG -#define seg2_course_name_table course_name_table_eu_en -#define seg2_act_name_table act_name_table_eu_en -#define seg2_dialog_table dialog_table_eu_en +#ifdef ENABLE_GERMAN +extern u8 dialog_table_de[]; +extern u8 course_name_table_de[]; +extern u8 act_name_table_de[]; #endif -s16 gInGameLanguage = LANGUAGE_ENGLISH; -s16 gLoadedLanguage = LANGUAGE_ENGLISH; - -void *languageTable[][3] = { - {&seg2_dialog_table, &seg2_course_name_table, &seg2_act_name_table}, // In EU, this is just mirroring English. -#if MULTILANG - {&dialog_table_eu_en, &course_name_table_eu_en, &act_name_table_eu_en}, - {&dialog_table_eu_fr, &course_name_table_eu_fr, &act_name_table_eu_fr}, - {&dialog_table_eu_de, &course_name_table_eu_de, &act_name_table_eu_de}, +#ifdef ENABLE_JAPANESE +extern u8 dialog_table_jp[]; +extern u8 course_name_table_jp[]; +extern u8 act_name_table_jp[]; #endif -}; + +#ifdef ENABLE_SPANISH +extern u8 dialog_table_es[]; +extern u8 course_name_table_es[]; +extern u8 act_name_table_es[]; +#endif +#else // !MULTILANG +#define dialog_table_en seg2_dialog_table +#define course_name_table_en seg2_course_name_table +#define act_name_table_en seg2_act_name_table +#endif // !MULTILANG + +#define LANGUAGE_TABLES(dialog, course_name, act_name) { (u8 *)(dialog), (u8 *)(course_name), (u8 *)(act_name) } + +// The language table for the game's dialogs, level names and act names. +// #ifdef MULTILANG +const struct LanguageTables gLanguageTables[] = DEFINE_LANGUAGE_ARRAY( + LANGUAGE_TABLES(dialog_table_en, course_name_table_en, act_name_table_en), + LANGUAGE_TABLES(dialog_table_fr, course_name_table_fr, act_name_table_fr), + LANGUAGE_TABLES(dialog_table_de, course_name_table_de, act_name_table_de), + LANGUAGE_TABLES(dialog_table_jp, course_name_table_jp, act_name_table_jp), + LANGUAGE_TABLES(dialog_table_es, course_name_table_es, act_name_table_es) +); extern u8 gLastCompletedCourseNum; extern u8 gLastCompletedStarNum; @@ -73,12 +99,6 @@ enum DialogBoxState { DIALOG_STATE_CLOSING }; -enum DialogBoxPageState { - DIALOG_PAGE_STATE_NONE, - DIALOG_PAGE_STATE_SCROLL, - DIALOG_PAGE_STATE_END -}; - enum DialogBoxType { DIALOG_TYPE_ROTATE, // used in NPCs and level messages DIALOG_TYPE_ZOOM // used in signposts and wall signs and etc @@ -87,51 +107,26 @@ enum DialogBoxType { #define DEFAULT_DIALOG_BOX_ANGLE 90.0f #define DEFAULT_DIALOG_BOX_SCALE 19.0f -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, - 8, 7, 6, 6, 6, 5, 5, 6, 5, 5, 6, 5, 4, 5, 5, 3, - 7, 5, 5, 5, 6, 5, 5, 5, 5, 5, 7, 7, 5, 5, 4, 4, - 8, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 8, 8, 8, 8, 7, 7, 6, 7, 7, 0, 0, 0, 0, 0, 0, 0, -#ifdef VERSION_EU - 6, 6, 6, 0, 6, 6, 6, 0, 0, 0, 0, 0, 0, 0, 0, 4, - 5, 5, 5, 5, 6, 6, 6, 6, 0, 0, 0, 0, 0, 0, 0, 0, - 5, 5, 5, 0, 6, 6, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 5, 5, 0, 0, 6, 6, 0, 0, 0, 0, 0, 0, 0, 5, 6, - 0, 4, 4, 0, 0, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, -#else - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, - 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, 5, 6, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -#endif - 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, -#ifdef VERSION_EU - 7, 5, 10, 5, 9, 8, 4, 0, 0, 0, 0, 5, 5, 6, 5, 0, -#else - 7, 5, 10, 5, 9, 8, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, -#endif - 0, 0, 5, 7, 7, 6, 6, 8, 0, 8, 10, 6, 4, 10, 0, 0 -}; - s8 gDialogBoxState = DIALOG_STATE_OPENING; -f32 gDialogBoxOpenTimer = DEFAULT_DIALOG_BOX_ANGLE; -f32 gDialogBoxScale = DEFAULT_DIALOG_BOX_SCALE; -s16 gDialogScrollOffsetY = 0; s8 gDialogBoxType = DIALOG_TYPE_ROTATE; +s8 gDialogLineNum = 1; +s8 gDialogHasResponse = FALSE; +u8 gMenuHoldKeyIndex = 0; +u8 gMenuHoldKeyTimer = 0; +s16 gDialogScrollOffsetY = 0; s16 gDialogID = DIALOG_NONE; s16 gLastDialogPageStrPos = 0; s16 gDialogTextPos = 0; -s8 gDialogLineNum = 1; -s8 gLastDialogResponse = 0; -u8 gMenuHoldKeyIndex = 0; -u8 gMenuHoldKeyTimer = 0; +f32 gDialogBoxOpenTimer = DEFAULT_DIALOG_BOX_ANGLE; +f32 gDialogBoxScale = DEFAULT_DIALOG_BOX_SCALE; s32 gDialogResponse = DIALOG_RESPONSE_NONE; +ColorRGBA gDialogColorByEnd; +ColorRGBA gDialogCarryoverColor; +static ColorRGBA sActiveTextColor; + +static u8 sGenericFontLineHeight = 0; +static u8 sGenericFontLineAlignment = TEXT_ALIGN_LEFT; void create_dl_identity_matrix(void) { Mtx *matrix = (Mtx *) alloc_display_list(sizeof(Mtx)); @@ -224,15 +219,215 @@ void create_dl_ortho_matrix(void) { gSPMatrix(gDisplayListHead++, VIRTUAL_TO_PHYSICAL(matrix), G_MTX_PROJECTION | G_MTX_MUL | G_MTX_NOPUSH); } -// Unused -#if FALSE +/** + * Determine which UTF-8 character to render, given a string and the current position in the string. + * Returns the table entry of the relevant character. + * Also increments the string position by the correct amount to reach the next character. + */ +struct Utf8CharLUTEntry *utf8_lookup(struct Utf8LUT *lut, char *str, s32 *strPos) { + u32 codepoint; + struct Utf8CharLUTEntry *usedLUT; + u32 length; + + lut = segmented_to_virtual(lut); + if (!(str[*strPos] & 0x20)) { + codepoint = ((str[*strPos] & 0x1F) << 6) | (str[*strPos + 1] & 0x3F); + *strPos += 1; + + usedLUT = segmented_to_virtual(lut->lut2Bytes); + length = lut->length2Bytes; + } else if (!(str[*strPos] & 0x10)) { + codepoint = ((str[*strPos] & 0xF) << 12) | ((str[*strPos + 1] & 0x3F) << 6) | (str[*strPos + 2] & 0x3F); + *strPos += 2; + + usedLUT = segmented_to_virtual(lut->lut3Bytes); + length = lut->length3Bytes; + } else { + codepoint = ((str[*strPos] & 0x7) << 18) | ((str[*strPos + 1] & 0x3F) << 12) | ((str[*strPos + 2] & 0x3F) << 6) | (str[*strPos + 3] & 0x3F); + *strPos += 3; + + usedLUT = segmented_to_virtual(lut->lut4Bytes); + length = lut->length4Bytes; + } + + s32 start = 0; + s32 end = length - 1; + s32 mid = (start + end) / 2; + + while (start <= end) { + if (usedLUT[mid].codepoint == codepoint) { + return &usedLUT[mid]; + } + + if (usedLUT[mid].codepoint > codepoint) { + end = mid - 1; + } else { + start = mid + 1; + } + + mid = (start + end) / 2; + } + return segmented_to_virtual(lut->missingChar); +} + +/** + * Convert a character in the range 0-9 or A-F to an integer value. Returns -1 if the character is + * not a valid hex digit. + */ +static s32 hex_char_to_value(char c) { + if (c >= '0' && c <= '9') { + return c - '0'; + } + if (c >= 'A' && c <= 'F') { + return c - 'A' + 10; + } + if (c >= 'a' && c <= 'f') { + return c - 'a' + 10; + } + return -1; +} + +/** + * Convert two hexadecimal text characters into an integer. Returns -1 if either of the two characters + * aren't hexadecimal values. + */ +static s32 hex_pair_to_value(char *str, s32 strPos) { + s32 firstDigit = hex_char_to_value(str[strPos]); + s32 secondDigit = hex_char_to_value(str[strPos + 1]); + + if (firstDigit == -1 || secondDigit == -1) { + return -1; + } + + return (firstDigit << 4) | secondDigit; +} + +/** + * Determine if the characters following a color command are a valid hex color code. + */ +static s32 is_color_code_valid(char *str, s32 strPos) { + for (u32 i = 0; i < sizeof(gDialogCarryoverColor) * 2; i++) { + if (hex_char_to_value(str[strPos + i]) == -1) { + if (i < sizeof(ColorRGB) * 2) return FALSE; + // allow alpha ignore + if (str[strPos + i] != CHAR_VALUE_IGNORE[0]) return FALSE; + } + } + return TRUE; +} + +/** + * Set text color for string to print, needed for color reset commands to function properly. + * This should always be called instead of gDPSetEnvColor prior to any print_generic_string call or variant. + */ +void set_text_color(u32 r, u32 g, u32 b) { + gDPSetEnvColor(gDisplayListHead++, r, g, b, gDialogTextAlpha); + + sActiveTextColor[0] = r; + sActiveTextColor[1] = g; + sActiveTextColor[2] = b; + sActiveTextColor[3] = gDialogTextAlpha; +} + +/** + * Get the exact width of the line of a string of any font in pixels, using the given ASCII and UTF-8 tables. + */ +s32 get_string_width(char *str, struct AsciiCharLUTEntry *asciiLut, struct Utf8LUT *utf8LUT) { + char c; + s32 width = 0; + s32 maxWidth = 0; + s32 strPos = -1; + + s32 isGenericFont = (asciiLut == main_font_lut); + asciiLut = segmented_to_virtual(asciiLut); + + while ((c = str[++strPos]) != '\0' && c != '\n') { + // Handle color codes and tabs if using generic font + if (isGenericFont) { + switch (c) { + case '\t': + width += 4 * SPACE_KERNING(asciiLut); + continue; + case HEX(CONTROL_CHAR_COL): + if (is_color_code_valid(str, strPos + 1)) { + strPos += sizeof(gDialogCarryoverColor) * 2; + } + continue; + case HEX(CONTROL_CHAR_RESET): + continue; + } + } + + if (c & 0x80) { + width += utf8_lookup(utf8LUT, str, &strPos)->kerning; + } else { + width += asciiLut[ASCII_LUT_INDEX(c)].kerning; + } + } + + return MAX(width, maxWidth); +} + +/** + * Get the value to shift the X position of a string by, given a specific alignment. + */ +static s32 get_alignment_x_offset(char *str, u32 alignment, struct AsciiCharLUTEntry *asciiLut, struct Utf8LUT *utf8LUT) { + if (alignment == TEXT_ALIGN_LEFT) { + return 0; + } + s32 width = get_string_width(str, asciiLut, utf8LUT); + if (alignment == TEXT_ALIGN_CENTER) { + return -width / 2; + } + // TEXT_ALIGN_RIGHT + return -width; +} + +/** + * Takes a value and writes the string representation of the number into a buffer. + * If the language is set to Japanese, the number is written in full-width digits. + */ +void format_int_to_string(char *buf, s32 value) { +#ifdef ENABLE_JAPANESE + if (gInGameLanguage == LANGUAGE_JAPANESE) { + u8 digits[10]; + s32 numDigits = 0; + // Minus sign + if (value < 0) { + buf[0] = '-'; + buf++; + value = -value; + } + // Copy each digit of the number into an array, in reverse order. + do { + digits[numDigits++] = value % 10; + value /= 10; + } while (value != 0); + for (s32 i = 0; i < numDigits; i++) { + // The UTF-8 encoding of "0" is 0xEF, 0xBC, 0x90 + buf[i * 3] = 0xEF; + buf[i * 3 + 1] = 0xBC; + buf[i * 3 + 2] = 0x90 + digits[numDigits - i - 1]; + } + buf[numDigits * 3] = '\0'; + return; + } +#endif + + sprintf(buf, "%d", value); +} + +/** + * Unpacks a packed I1 character texture into a usable IA8 texture when TEXT_FLAG_PACKED is used. + * By default this is used for all the Japanese characters. + */ static u8 *alloc_ia8_text_from_i1(u16 *in, s16 width, s16 height) { s32 inPos; u16 bitMask; u8 *out; s16 outPos = 0; - out = (u8 *) alloc_display_list((u32) width * (u32) height); + out = alloc_display_list((u32) width * (u32) height); if (out == NULL) { return NULL; @@ -256,200 +451,224 @@ static u8 *alloc_ia8_text_from_i1(u16 *in, s16 width, s16 height) { return out; } -void render_generic_char(u8 c) { - void **fontLUT = segmented_to_virtual(main_font_lut); - void *packedTexture = segmented_to_virtual(fontLUT[c]); -#if defined(VERSION_JP) || defined(VERSION_SH) - void *unpackedTexture = alloc_ia8_text_from_i1(packedTexture, 8, 16); -#endif +/** + * Renders a single ASCII character in the generic font. + */ +static u32 render_generic_ascii_char(char c) { + struct AsciiCharLUTEntry *fontLUT = segmented_to_virtual(main_font_lut); + const Texture *texture = fontLUT[ASCII_LUT_INDEX(c)].texture; -#ifndef VERSION_EU - gDPPipeSync(gDisplayListHead++); -#endif -#if defined(VERSION_JP) || defined(VERSION_SH) - gDPSetTextureImage(gDisplayListHead++, G_IM_FMT_IA, G_IM_SIZ_8b, 1, VIRTUAL_TO_PHYSICAL(unpackedTexture)); -#else - gDPSetTextureImage(gDisplayListHead++, G_IM_FMT_IA, G_IM_SIZ_16b, 1, VIRTUAL_TO_PHYSICAL(packedTexture)); -#endif - gSPDisplayList(gDisplayListHead++, dl_ia_text_tex_settings); -#ifdef VERSION_EU - gSPTextureRectangleFlip(gDisplayListHead++, gDialogX << 2, (gDialogY - 16) << 2, - (gDialogX + 8) << 2, gDialogY << 2, G_TX_RENDERTILE, 8 << 6, 4 << 6, 1 << 10, 1 << 10); -#endif -} -#endif - -Texture32 *alloc_ia4_tex_from_i1(Texture *in, s16 width, s16 height) { - u32 size = (u32) width * (u32) height; - s32 inPos; - s16 outPos = 0; - u8 bitMask; - - Texture *out = (Texture *) alloc_display_list(size); - - if (out == NULL) { - return NULL; + if (texture != NULL) { + gDPPipeSync(gDisplayListHead++); + gDPSetTextureImage(gDisplayListHead++, G_IM_FMT_IA, G_IM_SIZ_16b, 1, texture); + gSPDisplayList(gDisplayListHead++, dl_ia_text_tex_settings); } - for (inPos = 0; inPos < (width * height) / 4; inPos++) { - bitMask = 0x80; + return fontLUT[ASCII_LUT_INDEX(c)].kerning; +} - while (bitMask != 0) { - out[outPos] = (in[inPos] & bitMask) ? 0xF0 : 0x00; - bitMask /= 2; - out[outPos] = (in[inPos] & bitMask) ? out[outPos] + 0x0F : out[outPos]; - bitMask /= 2; - outPos++; +/** + * Renders a single UTF-8 character in the generic font. + */ +static u32 render_generic_unicode_char(char *str, s32 *strPos) { + struct Utf8CharLUTEntry *utf8Entry = utf8_lookup(&main_font_utf8_lut, str, strPos); + + if (utf8Entry->texture == NULL) { + return utf8Entry->kerning; + } + + gDPPipeSync(gDisplayListHead++); + + if (utf8Entry->flags & TEXT_FLAG_PACKED) { + void *unpackedTexture = alloc_ia8_text_from_i1(segmented_to_virtual(utf8Entry->texture), 8, 16); + gDPSetTextureImage(gDisplayListHead++, G_IM_FMT_IA, G_IM_SIZ_8b, 1, unpackedTexture); + gSPDisplayList(gDisplayListHead++, dl_ia_text_tex_settings_packed); + } else { + gDPSetTextureImage(gDisplayListHead++, G_IM_FMT_IA, G_IM_SIZ_16b, 1, utf8Entry->texture); + gSPDisplayList(gDisplayListHead++, dl_ia_text_tex_settings); + } + + if (utf8Entry->flags & TEXT_DIACRITIC_MASK) { + struct DiacriticLUTEntry *diacriticLUT = segmented_to_virtual(&main_font_diacritic_lut); + struct DiacriticLUTEntry *diacritic = &diacriticLUT[utf8Entry->flags & TEXT_DIACRITIC_MASK]; + + if (diacritic->xOffset | diacritic->yOffset) { + create_dl_translation_matrix(MENU_MTX_PUSH, diacritic->xOffset, diacritic->yOffset, 0.0f); + } + + s32 fakeStrPos = 0; + render_generic_unicode_char(segmented_to_virtual(diacritic->str), &fakeStrPos); + + if (diacritic->xOffset | diacritic->yOffset) { + gSPPopMatrix(gDisplayListHead++, G_MTX_MODELVIEW); } } - return (Texture32 *)out; + return utf8Entry->kerning; } -void render_generic_char(u8 c) { - void **fontLUT = segmented_to_virtual(main_font_lut); - void *packedTexture = segmented_to_virtual(fontLUT[c]); -#if MULTILANG - void *unpackedTexture = alloc_ia4_tex_from_i1(packedTexture, 8, 8); +// Constants that control how the dialog box renders, the box is taller in Japanese. +#define DIALOG_LINE_HEIGHT_EN 16 +#define DIALOG_LINE_HEIGHT_JP 20 +#define BOX_TRANS_X_EN -7.f +#define BOX_TRANS_X_JP -5.f +#define BOX_TRANS_Y_EN 5.f +#define BOX_TRANS_Y_JP 2.f +#define BOX_SCALE_EN 5.f +#define BOX_SCALE_JP 4.f - gDPPipeSync(gDisplayListHead++); - gDPSetTextureImage(gDisplayListHead++, G_IM_FMT_IA, G_IM_SIZ_16b, 1, VIRTUAL_TO_PHYSICAL(unpackedTexture)); +#ifdef ENABLE_JAPANESE +#define DIALOG_LINE_HEIGHT ((gInGameLanguage == LANGUAGE_JAPANESE) ? DIALOG_LINE_HEIGHT_JP : DIALOG_LINE_HEIGHT_EN) +#define BOX_TRANS_X ((gInGameLanguage == LANGUAGE_JAPANESE) ? BOX_TRANS_X_JP : BOX_TRANS_X_EN) +#define BOX_TRANS_Y ((gInGameLanguage == LANGUAGE_JAPANESE) ? BOX_TRANS_Y_JP : BOX_TRANS_Y_EN) +#define BOX_SCALE ((gInGameLanguage == LANGUAGE_JAPANESE) ? BOX_SCALE_JP : BOX_SCALE_EN) #else - gDPPipeSync(gDisplayListHead++); - gDPSetTextureImage(gDisplayListHead++, G_IM_FMT_IA, G_IM_SIZ_16b, 1, VIRTUAL_TO_PHYSICAL(packedTexture)); +#define DIALOG_LINE_HEIGHT DIALOG_LINE_HEIGHT_EN +#define BOX_TRANS_X BOX_TRANS_X_EN +#define BOX_TRANS_Y BOX_TRANS_Y_EN +#define BOX_SCALE BOX_SCALE_EN #endif - gSPDisplayList(gDisplayListHead++, dl_ia_text_tex_settings); -} - - -struct MultiTextEntry { - u8 length; - u8 str[4]; -}; - -#define TEXT_THE_RAW ASCII_TO_DIALOG('t'), ASCII_TO_DIALOG('h'), ASCII_TO_DIALOG('e'), 0x00 -#define TEXT_YOU_RAW ASCII_TO_DIALOG('y'), ASCII_TO_DIALOG('o'), ASCII_TO_DIALOG('u'), 0x00 - -enum MultiStringIDs { STRING_THE, STRING_YOU }; - -/* - * Place the multi-text string according to the ID passed. (US, EU) - * 0: 'the' - * 1: 'you' - */ -void render_multi_text_string(s8 multiTextID) { - s8 i; - struct MultiTextEntry textLengths[2] = { - { 3, { TEXT_THE_RAW } }, - { 3, { TEXT_YOU_RAW } }, - }; - - for (i = 0; i < textLengths[multiTextID].length; i++) { - render_generic_char(textLengths[multiTextID].str[i]); - create_dl_translation_matrix(MENU_MTX_NOPUSH, (f32)(gDialogCharWidths[textLengths[multiTextID].str[i]]), 0.0f, 0.0f); - } -} - -#define MAX_STRING_WIDTH 16 -#define CHAR_WIDTH_SPACE (f32)(gDialogCharWidths[DIALOG_CHAR_SPACE]) -#define CHAR_WIDTH_DEFAULT (f32)(gDialogCharWidths[str[strPos]]) - /** - * Prints a generic white string. - * In JP/EU a IA1 texture is used but in US a IA4 texture is used. + * Prints a generic white string. Used for both dialog entries and regular prints. + * Only prints a total of maxLines lines of text. If maxLines is -1, it will print + * until the end of the string. + * + * Uses the global variables sGenericFontLineHeight and sGenericFontLineAlignment + * to control printing. */ -void print_generic_string(s16 x, s16 y, const u8 *str) { - s8 mark = DIALOG_MARK_NONE; // unused in EU +static s32 render_main_font_text(s16 x, s16 y, char *str, s32 maxLines) { + char c; + s8 kerning = 0; + u8 queuedSpaces = 0; // Optimization to only have one translation matrix if there are multiple spaces in a row. + u8 validColor; s32 strPos = 0; - u8 lineNum = 1; + s32 lineNum = 1; + s32 alignmentXOffset = get_alignment_x_offset(str, sGenericFontLineAlignment, main_font_lut, &main_font_utf8_lut); - s16 colorLoop; - ColorRGBA rgbaColors = { 0x00, 0x00, 0x00, 0x00 }; - u8 customColor = 0; - u8 diffTmp = 0; + ColorRGBA color; + bcopy(gDialogCarryoverColor, color, sizeof(color)); create_dl_translation_matrix(MENU_MTX_PUSH, x, y, 0.0f); - while (str[strPos] != DIALOG_CHAR_TERMINATOR) { - switch (str[strPos]) { - case DIALOG_CHAR_COLOR: - customColor = 1; - strPos++; - for (colorLoop = (strPos + 8); strPos < colorLoop; ++strPos) { - diffTmp = 0; - if ((str[strPos] >= 0x24) - && (str[strPos] <= 0x29)) { - diffTmp = 0x1A; - } else if (str[strPos] >= 0x10) { - customColor = 2; - strPos = (colorLoop - 8); - for (diffTmp = 0; diffTmp < 8; ++diffTmp) { - if (str[strPos + diffTmp] != 0x9F) { - break; - } - } - if (diffTmp == 8) { - strPos += diffTmp; - } - break; - } - if (((8 - (colorLoop - strPos)) % 2) == 0) { - rgbaColors[(8 - (colorLoop - strPos)) / 2] = (((str[strPos] - diffTmp) & 0x0F) << 4); - } else { - rgbaColors[(8 - (colorLoop - strPos)) / 2] += ((str[strPos] - diffTmp) & 0x0F); - } - } - strPos--; - if (customColor == 1) { - gDPSetEnvColor(gDisplayListHead++, rgbaColors[0], - rgbaColors[1], - rgbaColors[2], - rgbaColors[3]); - } else if (customColor == 2) { - gDPSetEnvColor(gDisplayListHead++, 255, 255, 255, 255); // TODO: Is it possible to retrieve the original color that was set before print_generic_string was called? - customColor = 0; - } - break; - case DIALOG_CHAR_DAKUTEN: - mark = DIALOG_MARK_DAKUTEN; - break; - case DIALOG_CHAR_PERIOD_OR_HANDAKUTEN: - mark = DIALOG_MARK_HANDAKUTEN; - break; - case DIALOG_CHAR_NEWLINE: + while ((c = str[strPos]) != '\0') { + // Handle text alignment if needed + if (alignmentXOffset != 0) { + create_dl_translation_matrix(MENU_MTX_NOPUSH, alignmentXOffset, 0.0f, 0.0f); + alignmentXOffset = 0; + } + switch (c) { + // Newline + case '\n': 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: - 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; - case DIALOG_CHAR_SLASH: - create_dl_translation_matrix(MENU_MTX_NOPUSH, (f32)(gDialogCharWidths[DIALOG_CHAR_SPACE] * 2), 0.0f, 0.0f); - break; - case DIALOG_CHAR_MULTI_THE: - render_multi_text_string(STRING_THE); - break; - case DIALOG_CHAR_MULTI_YOU: - render_multi_text_string(STRING_YOU); - break; - case DIALOG_CHAR_SPACE: - // create_dl_translation_matrix(MENU_MTX_NOPUSH, (f32)(gDialogCharWidths[DIALOG_CHAR_SPACE]), 0.0f, 0.0f); - create_dl_translation_matrix(MENU_MTX_NOPUSH, CHAR_WIDTH_SPACE, 0.0f, 0.0f); - break; - default: - render_generic_char(str[strPos]); - 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); - gSPPopMatrix(gDisplayListHead++, G_MTX_MODELVIEW); - mark = DIALOG_MARK_NONE; + if (lineNum == maxLines) { + if (gDialogBoxState == DIALOG_STATE_VERTICAL) { + bcopy(color, gDialogColorByEnd, sizeof(gDialogColorByEnd)); + } + return strPos + 1; } - create_dl_translation_matrix(MENU_MTX_NOPUSH, CHAR_WIDTH_DEFAULT, 0.0f, 0.0f); + create_dl_translation_matrix(MENU_MTX_PUSH, x, y - (lineNum * sGenericFontLineHeight), 0.0f); + lineNum++; + // Can skip any queued spaces + queuedSpaces = 0; + // Calculate alignment of new line + alignmentXOffset = get_alignment_x_offset(&str[strPos + 1], sGenericFontLineAlignment, main_font_lut, &main_font_utf8_lut); + break; + + // Space + case ' ': + queuedSpaces++; + break; + + // Tab + case '\t': + queuedSpaces += 4; + break; + + // %d or %s: Display value of dialog variable + case '%': + // Resolve queued spaces + if (queuedSpaces != 0) { + create_dl_translation_matrix(MENU_MTX_NOPUSH, queuedSpaces * SPACE_KERNING(segmented_to_virtual(main_font_lut)), 0.0f, 0.0f); + queuedSpaces = 0; + } + + // %d: Display dialog var as a decimal integer. + if (str[strPos + 1] == 'd') { + char dialogVarText[32]; + strPos++; + format_int_to_string(dialogVarText, gDialogVariable.asInt); + render_main_font_text(0, 0, dialogVarText, -1); + kerning = get_string_width(dialogVarText, main_font_lut, &main_font_utf8_lut); + create_dl_translation_matrix(MENU_MTX_NOPUSH, kerning, 0.0f, 0.0f); + break; + // %s: Display dialog var as a pointer to a string. + } else if (str[strPos + 1] == 's') { + strPos++; + render_main_font_text(0, 0, gDialogVariable.asStr, -1); + kerning = get_string_width(gDialogVariable.asStr, main_font_lut, &main_font_utf8_lut); + create_dl_translation_matrix(MENU_MTX_NOPUSH, kerning, 0.0f, 0.0f); + break; + // %%: Special case, print only a single %. + } else if (str[strPos + 1] == '%') { + strPos++; + } + + // If the character following the % is not 'd' or 's', print the % as a normal character. + goto render_character; + + // Color set control character + case HEX(CONTROL_CHAR_COL): // '\033' + validColor = TRUE; + + for (u32 i = 0; i < sizeof(color); i++) { + if (i == sizeof(ColorRGB)) { // check if alpha should be ignored (if alpha is "--") + if (str[strPos + i * 2 + 1] == CHAR_VALUE_IGNORE[0] && str[strPos + i * 2 + 2] == CHAR_VALUE_IGNORE[0]) { + color[i] = (u8) gDialogTextAlpha; + continue; + } + } + + // If the sequence following the control char is not a valid RGBA32 color, interpret it as normal text. + // NOTE: Invalid color combinations can also cause color rendering issues, but those are considered user error. + s32 val = hex_pair_to_value(str, strPos + i * 2 + 1); + if (val == -1) { + validColor = FALSE; + break; + } + + color[i] = val; + } + + if (validColor) { + gDPSetEnvColor(gDisplayListHead++, color[0], color[1], color[2], color[3]); + strPos += sizeof(color) * 2; + } + break; + + // Color reset control character + case HEX(CONTROL_CHAR_RESET): // '\034' + bcopy(sActiveTextColor, color, sizeof(color)); + gDPSetEnvColor(gDisplayListHead++, color[0], color[1], color[2], color[3]); + break; + + // Normal character rendering + default: +render_character: + // Resolve queued spaces + if (queuedSpaces != 0) { + create_dl_translation_matrix(MENU_MTX_NOPUSH, queuedSpaces * SPACE_KERNING(segmented_to_virtual(main_font_lut)), 0.0f, 0.0f); + queuedSpaces = 0; + } + + if (!(c & 0x80)) { + kerning = render_generic_ascii_char(c); + } else { + kerning = render_generic_unicode_char(str, &strPos); + } + + create_dl_translation_matrix(MENU_MTX_NOPUSH, kerning, 0.0f, 0.0f); break; } @@ -457,97 +676,160 @@ void print_generic_string(s16 x, s16 y, const u8 *str) { } gSPPopMatrix(gDisplayListHead++, G_MTX_MODELVIEW); + gLastDialogLineNum = lineNum; // Used for rendering the choice triangle during dialog boxes + return -1; } - /** - * Prints a hud string depending of the hud table list defined. + * Prints a generic white string. */ -void print_hud_lut_string(s8 hudLUT, s16 x, s16 y, const u8 *str) { +void print_generic_string(s16 x, s16 y, char *str) { + print_generic_string_aligned(x, y, str, TEXT_ALIGN_LEFT); +} + +/** + * Prints a hud string in the colorful font. + */ +void print_hud_lut_string(s16 x, s16 y, char *str) { s32 strPos = 0; - void **hudLUT1 = segmented_to_virtual(menu_hud_lut); // Japanese Menu HUD Color font - void **hudLUT2 = segmented_to_virtual(main_hud_lut); // 0-9 A-Z HUD Color Font + char c; + struct AsciiCharLUTEntry *hudLUT = segmented_to_virtual(main_hud_lut); // 0-9 A-Z HUD Color Font u32 curX = x; u32 curY = y; + u32 renderX, renderY; + struct Utf8CharLUTEntry *utf8Entry; + const Texture *texture; + u32 kerning; - u32 xStride; // X separation - - if (hudLUT == HUD_LUT_JPMENU) { - xStride = 16; - } else { // HUD_LUT_GLOBAL - xStride = 12; //? Shindou uses this. + if (str == NULL) { + return; } - while (str[strPos] != GLOBAR_CHAR_TERMINATOR) { - switch (str[strPos]) { - case GLOBAL_CHAR_SPACE: - curX += 8; - break; - default: - gDPPipeSync(gDisplayListHead++); - - if (hudLUT == HUD_LUT_JPMENU) { - gDPSetTextureImage(gDisplayListHead++, G_IM_FMT_RGBA, G_IM_SIZ_16b, 1, hudLUT1[str[strPos]]); - } - - if (hudLUT == HUD_LUT_GLOBAL) { - gDPSetTextureImage(gDisplayListHead++, G_IM_FMT_RGBA, G_IM_SIZ_16b, 1, hudLUT2[str[strPos]]); - } + while ((c = str[strPos]) != '\0') { + gDPPipeSync(gDisplayListHead++); + if (!(c & 0x80)) { + texture = hudLUT[ASCII_LUT_INDEX(c)].texture; + kerning = hudLUT[ASCII_LUT_INDEX(c)].kerning; + } else { + utf8Entry = utf8_lookup(&main_hud_utf8_lut, str, &strPos); + if ((utf8Entry->flags & TEXT_DIACRITIC_MASK) == TEXT_DIACRITIC_UMLAUT_UPPERCASE) { + renderX = curX; + renderY = curY - 4; + gDPSetTextureImage(gDisplayListHead++, G_IM_FMT_RGBA, G_IM_SIZ_16b, 1, &texture_hud_char_umlaut); 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); - - curX += xStride; + gSPTextureRectangle(gDisplayListHead++, renderX << 2, renderY << 2, (renderX + 16) << 2, + (renderY + 16) << 2, G_TX_RENDERTILE, 0, 0, 1 << 10, 1 << 10); + gDPPipeSync(gDisplayListHead++); + } + texture = utf8Entry->texture; + kerning = utf8Entry->kerning; } + + if (texture != NULL) { + gDPSetTextureImage(gDisplayListHead++, G_IM_FMT_RGBA, G_IM_SIZ_16b, 1, texture); + + renderX = curX; + renderY = curY; + if (c == '\'') { + renderX -= 2; + renderY -= 7; + } else if (c == '"') { + renderX += 1; + renderY -= 7; + } else if (c == ',') { + renderX -= 4; + renderY += 7; + } else if (c == '.') { + renderX -= 2; + renderY += 1; + } + + gSPDisplayList(gDisplayListHead++, dl_rgba16_load_tex_block); + gSPTextureRectangle(gDisplayListHead++, renderX << 2, renderY << 2, (renderX + 16) << 2, + (renderY + 16) << 2, G_TX_RENDERTILE, 0, 0, 1 << 10, 1 << 10); + } + + curX += kerning; strPos++; } } +/** + * Renders a single ASCII character in the menu font. + */ +static u32 render_menu_ascii_char(char c, u32 curX, u32 curY) { + struct AsciiCharLUTEntry *fontLUT = segmented_to_virtual(menu_font_lut); + const Texture *texture = fontLUT[ASCII_LUT_INDEX(c)].texture; -void print_menu_generic_string(s16 x, s16 y, const u8 *str) { - UNUSED s8 mark = DIALOG_MARK_NONE; // unused in EU + if (texture != NULL) { + gDPSetTextureImage(gDisplayListHead++, G_IM_FMT_IA, G_IM_SIZ_8b, 1, texture); + gDPLoadSync(gDisplayListHead++); + gDPLoadBlock(gDisplayListHead++, G_TX_LOADTILE, 0, 0, 8 * 8 - 1, CALC_DXT(8, G_IM_SIZ_8b_BYTES)); + gSPTextureRectangle(gDisplayListHead++, curX << 2, curY << 2, (curX + 8) << 2, + (curY + 8) << 2, G_TX_RENDERTILE, 0, 0, 1 << 10, 1 << 10); + } + + return fontLUT[ASCII_LUT_INDEX(c)].kerning; +} + +/** + * Renders a single UTF-8 character in the menu font. + */ +static u32 render_menu_unicode_char(char *str, s32 *strPos, u32 curX, u32 curY) { + struct Utf8CharLUTEntry *utf8Entry = utf8_lookup(&menu_font_utf8_lut, str, strPos); + + if (utf8Entry->texture == NULL) { + return utf8Entry->kerning; + } + + if (utf8Entry->flags & TEXT_DIACRITIC_MASK) { + struct DiacriticLUTEntry *diacriticLUT = segmented_to_virtual(&menu_font_diacritic_lut); + struct DiacriticLUTEntry *diacritic = &diacriticLUT[utf8Entry->flags & TEXT_DIACRITIC_MASK]; + + s32 fakeStrPos = 0; + render_menu_unicode_char(segmented_to_virtual(diacritic->str), &fakeStrPos, curX + diacritic->xOffset, curY - diacritic->yOffset); + } + + gDPSetTextureImage(gDisplayListHead++, G_IM_FMT_IA, G_IM_SIZ_8b, 1, utf8Entry->texture); + gDPLoadSync(gDisplayListHead++); + gDPLoadBlock(gDisplayListHead++, G_TX_LOADTILE, 0, 0, 8 * 8 - 1, CALC_DXT(8, G_IM_SIZ_8b_BYTES)); + gSPTextureRectangle(gDisplayListHead++, curX << 2, curY << 2, (curX + 8) << 2, + (curY + 8) << 2, G_TX_RENDERTILE, 0, 0, 1 << 10, 1 << 10); + + return utf8Entry->kerning; +} + +/** + * Prints a menu white string in the smaller font. + * Only available in the file select and star select menus. + */ +void print_menu_generic_string(s16 x, s16 y, char *str) { s32 strPos = 0; + char c; u32 curX = x; u32 curY = y; - void **fontLUT = segmented_to_virtual(menu_font_lut); + u32 kerning; - while (str[strPos] != DIALOG_CHAR_TERMINATOR) { - switch (str[strPos]) { - case DIALOG_CHAR_DAKUTEN: - mark = DIALOG_MARK_DAKUTEN; - break; - case DIALOG_CHAR_PERIOD_OR_HANDAKUTEN: - mark = DIALOG_MARK_HANDAKUTEN; - break; - case DIALOG_CHAR_SPACE: - curX += 4; - break; - default: - gDPSetTextureImage(gDisplayListHead++, G_IM_FMT_IA, G_IM_SIZ_8b, 1, fontLUT[str[strPos]]); - gDPLoadSync(gDisplayListHead++); - gDPLoadBlock(gDisplayListHead++, G_TX_LOADTILE, 0, 0, 8 * 8 - 1, CALC_DXT(8, G_IM_SIZ_8b_BYTES)); - gSPTextureRectangle(gDisplayListHead++, curX << 2, curY << 2, (curX + 8) << 2, - (curY + 8) << 2, G_TX_RENDERTILE, 0, 0, 1 << 10, 1 << 10); - - if (mark != DIALOG_MARK_NONE) { - gDPSetTextureImage(gDisplayListHead++, G_IM_FMT_IA, G_IM_SIZ_8b, 1, fontLUT[DIALOG_CHAR_MARK_START + mark]); - gDPLoadSync(gDisplayListHead++); - gDPLoadBlock(gDisplayListHead++, G_TX_LOADTILE, 0, 0, 8 * 8 - 1, CALC_DXT(8, G_IM_SIZ_8b_BYTES)); - gSPTextureRectangle(gDisplayListHead++, (curX + 6) << 2, (curY - 7) << 2, - (curX + 6 + 8) << 2, (curY - 7 + 8) << 2, G_TX_RENDERTILE, 0, 0, 1 << 10, 1 << 10); - - mark = DIALOG_MARK_NONE; - } - curX += gDialogCharWidths[str[strPos]]; + while ((c = str[strPos]) != '\0') { + if (c & 0x80) { + kerning = render_menu_unicode_char(str, &strPos, curX, curY); + } else { + kerning = render_menu_ascii_char(c, curX, curY); } + + curX += kerning; strPos++; } } -void print_credits_string(s16 x, s16 y, const u8 *str) { +/** + * Prints a string in the green credits font. + */ +void print_credits_string(s16 x, s16 y, char *str) { s32 strPos = 0; - void **fontLUT = segmented_to_virtual(main_credits_font_lut); + char c; + struct AsciiCharLUTEntry *fontLUT = segmented_to_virtual(main_credits_font_lut); u32 curX = x; u32 curY = y; @@ -558,25 +840,45 @@ 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) { - switch (str[strPos]) { - case GLOBAL_CHAR_SPACE: - curX += 4; - break; - default: - gDPPipeSync(gDisplayListHead++); - gDPSetTextureImage(gDisplayListHead++, G_IM_FMT_RGBA, G_IM_SIZ_16b, 1, fontLUT[str[strPos]]); - gDPLoadSync(gDisplayListHead++); - gDPLoadBlock(gDisplayListHead++, G_TX_LOADTILE, 0, 0, 8 * 8 - 1, CALC_DXT(8, G_IM_SIZ_16b_BYTES)); - gSPTextureRectangle(gDisplayListHead++, curX << 2, curY << 2, (curX + 8) << 2, - (curY + 8) << 2, G_TX_RENDERTILE, 0, 0, 1 << 10, 1 << 10); - curX += 7; - break; + while ((c = str[strPos]) != '\0') { + if (fontLUT[ASCII_LUT_INDEX(c)].texture != NULL) { + gDPPipeSync(gDisplayListHead++); + gDPSetTextureImage(gDisplayListHead++, G_IM_FMT_RGBA, G_IM_SIZ_16b, 1, fontLUT[ASCII_LUT_INDEX(c)].texture); + gDPLoadSync(gDisplayListHead++); + gDPLoadBlock(gDisplayListHead++, G_TX_LOADTILE, 0, 0, 8 * 8 - 1, CALC_DXT(8, G_IM_SIZ_16b_BYTES)); + gSPTextureRectangle(gDisplayListHead++, curX << 2, curY << 2, (curX + 8) << 2, + (curY + 8) << 2, G_TX_RENDERTILE, 0, 0, 1 << 10, 1 << 10); } + + curX += fontLUT[ASCII_LUT_INDEX(c)].kerning; strPos++; } } +/** + * Variants of the above that allow for text alignment. + */ +void print_generic_string_aligned(s16 x, s16 y, char *str, u32 alignment) { + sGenericFontLineHeight = DIALOG_LINE_HEIGHT_EN; + sGenericFontLineAlignment = alignment; + render_main_font_text(x, y, str, -1); +} + +void print_hud_lut_string_aligned(s16 x, s16 y, char *str, u32 alignment) { + x += get_alignment_x_offset(str, alignment, main_hud_lut, &main_hud_utf8_lut); + print_hud_lut_string(x, y, str); +} + +void print_menu_generic_string_aligned(s16 x, s16 y, char *str, u32 alignment) { + x += get_alignment_x_offset(str, alignment, menu_font_lut, &menu_font_utf8_lut); + print_menu_generic_string(x, y, str); +} + +void print_credits_string_aligned(s16 x, s16 y, char *str, u32 alignment) { + x += get_alignment_x_offset(str, alignment, main_credits_font_lut, NULL); + print_credits_string(x, y, str); +} + void handle_menu_scrolling(s8 scrollDirection, s8 *currentIndex, s8 minIndex, s8 maxIndex) { u8 index = 0; @@ -615,36 +917,8 @@ void handle_menu_scrolling(s8 scrollDirection, s8 *currentIndex, s8 minIndex, s8 } } -s32 get_str_x_pos_from_center(s16 centerPos, u8 *str, UNUSED f32 scale) { - s16 strPos = 0; - f32 spacesWidth = 0.0f; - - while (str[strPos] != DIALOG_CHAR_TERMINATOR) { - spacesWidth += gDialogCharWidths[str[strPos]]; - strPos++; - } - // 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.0f)); -} - - -s32 get_string_width(u8 *str) { - s16 strPos = 0; - s16 width = 0; - - while (str[strPos] != DIALOG_CHAR_TERMINATOR) { - width += gDialogCharWidths[str[strPos]]; - strPos++; - } - return width; -} - -u8 gHudSymCoin[] = { GLYPH_COIN, GLYPH_SPACE }; -u8 gHudSymX[] = { GLYPH_MULTIPLY, GLYPH_SPACE }; - void print_hud_my_score_coins(s32 useCourseCoinScore, s8 fileIndex, s8 courseIndex, s16 x, s16 y) { - u8 strNumCoins[4]; + char strNumCoins[10]; s16 numCoins; if (!useCourseCoinScore) { @@ -654,60 +928,28 @@ void print_hud_my_score_coins(s32 useCourseCoinScore, s8 fileIndex, s8 courseInd } if (numCoins != 0) { - print_hud_lut_string(HUD_LUT_GLOBAL, x + 0, y, gHudSymCoin); - print_hud_lut_string(HUD_LUT_GLOBAL, x + 16, y, gHudSymX); - int_to_str(numCoins, strNumCoins); - print_hud_lut_string(HUD_LUT_GLOBAL, x + 32, y, strNumCoins); + sprintf(strNumCoins, "✪×%d", numCoins); + print_hud_lut_string(x, y, strNumCoins); } } void print_hud_my_score_stars(s8 fileIndex, s8 courseIndex, s16 x, s16 y) { - u8 strStarCount[4]; - u8 textSymStar[] = { GLYPH_STAR, GLYPH_SPACE }; - u8 textSymX[] = { GLYPH_MULTIPLY, GLYPH_SPACE }; - + char strStarCount[10]; s16 starCount = save_file_get_course_star_count(fileIndex, courseIndex); if (starCount != 0) { - print_hud_lut_string(HUD_LUT_GLOBAL, x + 0, y, textSymStar); - print_hud_lut_string(HUD_LUT_GLOBAL, x + 16, y, textSymX); - int_to_str(starCount, strStarCount); - print_hud_lut_string(HUD_LUT_GLOBAL, x + 32, y, strStarCount); + sprintf(strStarCount, "★×%d", starCount); + print_hud_lut_string(x, y, strStarCount); } } -void int_to_str(s32 num, u8 *dst) { - s32 digit[3]; - - s8 pos = 0; - - if (num > 999) { - dst[0] = 0x00; - dst[1] = DIALOG_CHAR_TERMINATOR; - return; - } - - digit[0] = (num / 100); - digit[1] = ((num - (digit[0] * 100)) / 10); - digit[2] = ((num - (digit[0] * 100)) - (digit[1] * 10)); - - if (digit[0] != 0) { - dst[pos++] = digit[0]; - } - - if ((digit[1] != 0) - || (digit[0] != 0)) { - dst[pos++] = digit[1]; - } - - dst[pos++] = digit[2]; - dst[pos] = DIALOG_CHAR_TERMINATOR; -} - s32 get_dialog_id(void) { return gDialogID; } +/** + * Initialise a dialog box. + */ void create_dialog_box(s16 dialog) { if (gDialogID == DIALOG_NONE) { gDialogID = dialog; @@ -715,7 +957,26 @@ void create_dialog_box(s16 dialog) { } } -void create_dialog_box_with_var(s16 dialog, s32 dialogVar) { +/** + * Initialise a dialog box with an integer variable to be displayed with %d. + */ +void create_dialog_box_with_int_var(s16 dialog, s32 dialogVar) { + DialogVariable var = { .asInt = dialogVar }; + create_dialog_box_with_var(dialog, var); +} + +/** + * Initialise a dialog box with a string variable to be displayed with %s. + */ +void create_dialog_box_with_str_var(s16 dialog, char *dialogVar) { + DialogVariable var = { .asStr = dialogVar }; + create_dialog_box_with_var(dialog, var); +} + +/** + * Initialise a dialog box with a general variable. + */ +void create_dialog_box_with_var(s16 dialog, DialogVariable dialogVar) { if (gDialogID == DIALOG_NONE) { gDialogID = dialog; gDialogVariable = dialogVar; @@ -723,6 +984,9 @@ void create_dialog_box_with_var(s16 dialog, s32 dialogVar) { } } +/** + * Initialise a dialog box with black text on a white background instead of white text on black. + */ void create_dialog_inverted_box(s16 dialog) { if (gDialogID == DIALOG_NONE) { gDialogID = dialog; @@ -730,11 +994,14 @@ void create_dialog_inverted_box(s16 dialog) { } } +/** + * Initialise a dialog box that asks for a response. + */ void create_dialog_box_with_response(s16 dialog) { if (gDialogID == DIALOG_NONE) { gDialogID = dialog; gDialogBoxType = DIALOG_TYPE_ROTATE; - gLastDialogResponse = 1; + gDialogHasResponse = TRUE; } } @@ -746,7 +1013,7 @@ void reset_dialog_render_state(void) { gDialogBoxState = DIALOG_STATE_OPENING; gDialogID = DIALOG_NONE; gDialogTextPos = 0; - gLastDialogResponse = 0; + gDialogHasResponse = FALSE; gLastDialogPageStrPos = 0; gDialogResponse = DIALOG_RESPONSE_NONE; } @@ -773,251 +1040,70 @@ void render_dialog_box_type(struct DialogEntry *dialog, s8 linesPerBox) { break; } - create_dl_translation_matrix(MENU_MTX_PUSH, -7.0f, 5.0f, 0); - create_dl_scale_matrix(MENU_MTX_NOPUSH, 1.1f, (((f32) linesPerBox / 5.0f) + 0.1f), 1.0f); + create_dl_translation_matrix(MENU_MTX_PUSH, BOX_TRANS_X, BOX_TRANS_Y, 0); + create_dl_scale_matrix(MENU_MTX_NOPUSH, 1.1f, (((f32) linesPerBox / BOX_SCALE) + 0.1f), 1.0f); 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 *customColor) { - u8 colorFade; - - if (colorMode == 1) { - 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); - } else { - gDPSetEnvColor(gDisplayListHead++, 200, 200, 200, 255); - } - } - } else { - switch (gDialogBoxType) { - case DIALOG_TYPE_ROTATE: - if (*customColor == 2) { - gDPSetEnvColor(gDisplayListHead++, 255, 255, 255, 255); - *customColor = 0; - } - break; - case DIALOG_TYPE_ZOOM: - gDPSetEnvColor(gDisplayListHead++, 0, 0, 0, 255); - break; - } - } -} - -#define X_VAL3 0.0f -#define Y_VAL3 16 - -void handle_dialog_scroll_page_state(s8 lineNum, s8 totalLines, s8 *pageState, s8 *xMatrix, s16 *linePos) { - gSPPopMatrix(gDisplayListHead++, G_MTX_MODELVIEW); - - if (lineNum == totalLines) { - *pageState = DIALOG_PAGE_STATE_SCROLL; - return; - } - create_dl_translation_matrix(MENU_MTX_PUSH, 0.0f, 2 - (lineNum * 16), 0); - - *linePos = 0; - *xMatrix = 1; -} - -void render_star_count_dialog_text(s8 *xMatrix, s16 *linePos) { - s8 tensDigit = gDialogVariable / 10; - s8 onesDigit = gDialogVariable - (tensDigit * 10); // remainder - - if (tensDigit != 0) { - if (*xMatrix != 1) { - create_dl_translation_matrix(MENU_MTX_NOPUSH, (f32)(gDialogCharWidths[DIALOG_CHAR_SPACE] * *xMatrix), 0, 0); - } - - render_generic_char(tensDigit); - create_dl_translation_matrix(MENU_MTX_NOPUSH, (f32) gDialogCharWidths[tensDigit], 0, 0); - *xMatrix = 1; - (*linePos)++; - } - - if (*xMatrix != 1) { - create_dl_translation_matrix(MENU_MTX_NOPUSH, (f32)(gDialogCharWidths[DIALOG_CHAR_SPACE] * (*xMatrix - 1)), 0, 0); - } - - render_generic_char(onesDigit); - create_dl_translation_matrix(MENU_MTX_NOPUSH, (f32) gDialogCharWidths[onesDigit], 0, 0); - (*linePos)++; - *xMatrix = 1; -} - -void render_multi_text_string_lines(s8 multiTextId, s8 lineNum, s16 *linePos, s8 linesPerBox, s8 xMatrix, s8 lowerBound) { - s8 i; - struct MultiTextEntry textLengths[2] = { - { 3, { TEXT_THE_RAW } }, - { 3, { TEXT_YOU_RAW } }, - }; - - if (lineNum >= lowerBound && lineNum <= (lowerBound + linesPerBox)) { - if (*linePos != 0 || xMatrix != 1) { - create_dl_translation_matrix(MENU_MTX_NOPUSH, (gDialogCharWidths[DIALOG_CHAR_SPACE] * (xMatrix - 1)), 0, 0); - } - for (i = 0; i < textLengths[multiTextId].length; i++) { - render_generic_char(textLengths[multiTextId].str[i]); - create_dl_translation_matrix(MENU_MTX_NOPUSH, (gDialogCharWidths[textLengths[multiTextId].str[i]]), 0, 0); - } - } - linePos += textLengths[multiTextId].length; -} - u32 ensure_nonnegative(s16 value) { return ((value < 0) ? 0 : value); } -void handle_dialog_text_and_pages(s8 colorMode, struct DialogEntry *dialog, s8 lowerBound) { - u8 strChar; - s16 colorLoop; - ColorRGBA rgbaColors = { 0x00, 0x00, 0x00, 0x00 }; - u8 customColor = 0; - u8 diffTmp = 0; - u8 *str = segmented_to_virtual(dialog->str); - s8 lineNum = 1; +static void handle_dialog_text_and_pages(struct DialogEntry *dialog) { + char *str = segmented_to_virtual(dialog->str); s8 totalLines; - s8 pageState = DIALOG_PAGE_STATE_NONE; - UNUSED s8 mark = DIALOG_MARK_NONE; // unused in US and EU - s8 xMatrix = 1; - s8 linesPerBox = dialog->linesPerBox; - s16 strIdx; - s16 linePos = 0; + s32 printResult; + s16 yPos = 2 - DIALOG_LINE_HEIGHT; if (gDialogBoxState == DIALOG_STATE_HORIZONTAL) { // If scrolling, consider the number of lines for both // the current page and the page being scrolled to. - totalLines = linesPerBox * 2 + 1; + totalLines = dialog->linesPerBox * 2; + yPos += gDialogScrollOffsetY; } else { - totalLines = linesPerBox + 1; + totalLines = dialog->linesPerBox; } gSPDisplayList(gDisplayListHead++, dl_ia_text_begin); - strIdx = gDialogTextPos; - if (gDialogBoxState == DIALOG_STATE_HORIZONTAL) { - create_dl_translation_matrix(MENU_MTX_NOPUSH, 0, (f32) gDialogScrollOffsetY, 0); + gDialogTextAlpha = 255; + if (gDialogBoxType == DIALOG_TYPE_ZOOM) { + set_text_color(0, 0, 0); + } else { + set_text_color(255, 255, 255); } - create_dl_translation_matrix(MENU_MTX_PUSH, X_VAL3, 2 - lineNum * Y_VAL3, 0); - - while (pageState == DIALOG_PAGE_STATE_NONE) { - if (customColor == 1) { - gDPSetEnvColor(gDisplayListHead++, rgbaColors[0], rgbaColors[1], rgbaColors[2], rgbaColors[3]); - } else { - change_and_flash_dialog_text_color_lines(colorMode, lineNum, &customColor); - } - strChar = str[strIdx]; - - switch (strChar) { - case DIALOG_CHAR_TERMINATOR: - pageState = DIALOG_PAGE_STATE_END; - gSPPopMatrix(gDisplayListHead++, G_MTX_MODELVIEW); - break; - case DIALOG_CHAR_COLOR: - customColor = 1; - strIdx++; - for (colorLoop = (strIdx + 8); strIdx < colorLoop; ++strIdx) { - diffTmp = 0; - if ((str[strIdx] >= 0x24) && (str[strIdx] <= 0x29)) { - diffTmp = 0x1A; - } else if (str[strIdx] >= 0x10) { - customColor = 2; - strIdx = (colorLoop - 8); - for (diffTmp = 0; diffTmp < 8; ++diffTmp) { - if (str[strIdx + diffTmp] != 0x9F) { - break; - } - } - if (diffTmp == 8) { - strIdx += diffTmp; - } - break; - } - if (((8 - (colorLoop - strIdx)) % 2) == 0) { - rgbaColors[(8 - (colorLoop - strIdx)) / 2] = (((str[strIdx] - diffTmp) & 0x0F) << 4); - } else { - rgbaColors[(8 - (colorLoop - strIdx)) / 2] += ((str[strIdx] - diffTmp) & 0x0F); - } - } - strIdx--; - break; - case DIALOG_CHAR_NEWLINE: - lineNum++; - handle_dialog_scroll_page_state(lineNum, totalLines, &pageState, &xMatrix, &linePos); - break; - case DIALOG_CHAR_DAKUTEN: - mark = DIALOG_MARK_DAKUTEN; - break; - case DIALOG_CHAR_PERIOD_OR_HANDAKUTEN: - mark = DIALOG_MARK_HANDAKUTEN; - break; - case DIALOG_CHAR_SPACE: - xMatrix++; - linePos++; - break; - case DIALOG_CHAR_SLASH: - xMatrix += 2; - linePos += 2; - break; - case DIALOG_CHAR_MULTI_THE: - render_multi_text_string_lines(STRING_THE, lineNum, &linePos, linesPerBox, xMatrix, lowerBound); - xMatrix = 1; - break; - case DIALOG_CHAR_MULTI_YOU: - render_multi_text_string_lines(STRING_YOU, lineNum, &linePos, linesPerBox, xMatrix, lowerBound); - xMatrix = 1; - break; - case DIALOG_CHAR_STAR_COUNT: - render_star_count_dialog_text(&xMatrix, &linePos); - break; - default: // any other character - if ((lineNum >= lowerBound) && (lineNum <= (lowerBound + linesPerBox))) { - if (linePos || xMatrix != 1) { - create_dl_translation_matrix( - MENU_MTX_NOPUSH, (f32)(gDialogCharWidths[DIALOG_CHAR_SPACE] * (xMatrix - 1)), 0, 0); - } - - render_generic_char(strChar); - create_dl_translation_matrix(MENU_MTX_NOPUSH, (f32)(gDialogCharWidths[strChar]), 0, 0); - xMatrix = 1; - linePos++; - } - } - - - strIdx++; + if (gDialogBoxState == DIALOG_STATE_OPENING) { + bcopy(sActiveTextColor, gDialogCarryoverColor, sizeof(gDialogCarryoverColor)); + } else { + // Deliberately not using set_text_color here, as gDialogCarryoverColor isn't + // representative of the text color at the start of the dialog prompt + gDPSetEnvColor(gDisplayListHead++, gDialogCarryoverColor[0], gDialogCarryoverColor[1], gDialogCarryoverColor[2], gDialogCarryoverColor[3]); } + sGenericFontLineHeight = DIALOG_LINE_HEIGHT; + sGenericFontLineAlignment = TEXT_ALIGN_LEFT; + printResult = render_main_font_text(0, yPos, str + gDialogTextPos, totalLines); + gSPDisplayList(gDisplayListHead++, dl_ia_text_end); if (gDialogBoxState == DIALOG_STATE_VERTICAL) { - if (pageState == DIALOG_PAGE_STATE_END) { + if (printResult == -1) { // Reached end of dialog box gLastDialogPageStrPos = -1; } else { - gLastDialogPageStrPos = strIdx; + gLastDialogPageStrPos = gDialogTextPos + printResult; } } - - gLastDialogLineNum = lineNum; } -#define X_VAL4_1 56 -#define X_VAL4_2 47 -#define Y_VAL4_1 2 -#define Y_VAL4_2 16 - void render_dialog_triangle_choice(void) { if (gDialogBoxState == DIALOG_STATE_VERTICAL) { handle_menu_scrolling(MENU_SCROLL_HORIZONTAL, &gDialogLineNum, 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, (gDialogLineNum * 56) - 47, 2 - (gLastDialogLineNum * DIALOG_LINE_HEIGHT), 0); if (gDialogBoxType == DIALOG_TYPE_ROTATE) { gDPSetEnvColor(gDisplayListHead++, 255, 255, 255, 255); @@ -1028,11 +1114,6 @@ void render_dialog_triangle_choice(void) { gSPDisplayList(gDisplayListHead++, dl_draw_triangle); } -#define X_VAL5 118.0f -#define Y_VAL5_1 -16 -#define Y_VAL5_2 5 -#define X_Y_VAL6 0.8f - void render_dialog_triangle_next(s8 linesPerBox) { s32 globalTimer = gGlobalTimer; @@ -1040,8 +1121,8 @@ void render_dialog_triangle_next(s8 linesPerBox) { return; } - 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_translation_matrix(MENU_MTX_PUSH, 118.f, (linesPerBox * -DIALOG_LINE_HEIGHT) + 5, 0); + create_dl_scale_matrix(MENU_MTX_NOPUSH, 0.8f, 0.8f, 1.0f); create_dl_rotation_matrix(MENU_MTX_NOPUSH, -DEFAULT_DIALOG_BOX_ANGLE, 0, 0, 1.0f); if (gDialogBoxType == DIALOG_TYPE_ROTATE) { // White Text @@ -1054,41 +1135,42 @@ void render_dialog_triangle_next(s8 linesPerBox) { gSPPopMatrix(gDisplayListHead++, G_MTX_MODELVIEW); } +// King Bob-omb (Start), Whomp (Start), King Bob-omb (throw him out), Eyerock (Start), Wiggler (Start) +static s16 sDialogBossStart[] = { DIALOG_017, DIALOG_114, DIALOG_128, DIALOG_117, DIALOG_150 }; +// Koopa the Quick (BoB), Koopa the Quick (THI), Penguin Race, Fat Penguin Race (120 stars) +static s16 sDialogRaceSound[] = { DIALOG_005, DIALOG_009, DIALOG_055, DIALOG_164 }; +// Red Switch, Green Switch, Blue Switch, 100 coins star, Bowser Red Coin Star +static s16 sDialogStarSound[] = { DIALOG_010, DIALOG_011, DIALOG_012, DIALOG_013, DIALOG_014 }; +// King Bob-omb (Start), Whomp (Defeated), King Bob-omb (Defeated, missing in JP), Eyerock (Defeated), Wiggler (Defeated) +static s16 sDialogBossStop[] = { DIALOG_017, DIALOG_115, DIALOG_116, DIALOG_118, DIALOG_152 }; + void handle_special_dialog_text(s16 dialogID) { // dialog ID tables, in order - // King Bob-omb (Start), Whomp (Start), King Bob-omb (throw him out), Eyerock (Start), Wiggler (Start) - s16 dialogBossStart[] = { DIALOG_017, DIALOG_114, DIALOG_128, DIALOG_117, DIALOG_150 }; - // Koopa the Quick (BoB), Koopa the Quick (THI), Penguin Race, Fat Penguin Race (120 stars) - s16 dialogRaceSound[] = { DIALOG_005, DIALOG_009, DIALOG_055, DIALOG_164 }; - // Red Switch, Green Switch, Blue Switch, 100 coins star, Bowser Red Coin Star - s16 dialogStarSound[] = { DIALOG_010, DIALOG_011, DIALOG_012, DIALOG_013, DIALOG_014 }; - // King Bob-omb (Start), Whomp (Defeated), King Bob-omb (Defeated, missing in JP), Eyerock (Defeated), Wiggler (Defeated) - s16 dialogBossStop[] = { DIALOG_017, DIALOG_115, DIALOG_116, DIALOG_118, DIALOG_152 }; s16 i; - for (i = 0; i < (s16) ARRAY_COUNT(dialogBossStart); i++) { - if (dialogBossStart[i] == dialogID) { + for (i = 0; i < (s16) ARRAY_COUNT(sDialogBossStart); i++) { + if (sDialogBossStart[i] == dialogID) { seq_player_unlower_volume(SEQ_PLAYER_LEVEL, 60); play_music(SEQ_PLAYER_LEVEL, SEQUENCE_ARGS(4, SEQ_EVENT_BOSS), 0); return; } } - for (i = 0; i < (s16) ARRAY_COUNT(dialogRaceSound); i++) { - if (dialogRaceSound[i] == dialogID && gDialogLineNum == 1) { + for (i = 0; i < (s16) ARRAY_COUNT(sDialogRaceSound); i++) { + if (sDialogRaceSound[i] == dialogID && gDialogLineNum == 1) { play_race_fanfare(); return; } } - for (i = 0; i < (s16) ARRAY_COUNT(dialogStarSound); i++) { - if (dialogStarSound[i] == dialogID && gDialogLineNum == 1) { + for (i = 0; i < (s16) ARRAY_COUNT(sDialogStarSound); i++) { + if (sDialogStarSound[i] == dialogID && gDialogLineNum == 1) { play_sound(SOUND_MENU_STAR_SOUND, gGlobalSoundSource); return; } } - for (i = 0; i < (s16) ARRAY_COUNT(dialogBossStop); i++) { - if (dialogBossStop[i] == dialogID) { + for (i = 0; i < (s16) ARRAY_COUNT(sDialogBossStop); i++) { + if (sDialogBossStop[i] == dialogID) { seq_player_fade_out(SEQ_PLAYER_LEVEL, 1); return; } @@ -1097,35 +1179,81 @@ void handle_special_dialog_text(s16 dialogID) { // dialog ID tables, in order s16 gMenuMode = MENU_MODE_NONE; -u8 gEndCutsceneStrEn0[] = { TEXT_FILE_MARIO_EXCLAMATION }; -u8 gEndCutsceneStrEn1[] = { TEXT_POWER_STARS_RESTORED }; -u8 gEndCutsceneStrEn2[] = { TEXT_THANKS_TO_YOU }; -u8 gEndCutsceneStrEn3[] = { TEXT_THANK_YOU_MARIO }; -u8 gEndCutsceneStrEn4[] = { TEXT_SOMETHING_SPECIAL }; -u8 gEndCutsceneStrEn5[] = { TEXT_LISTEN_EVERYBODY }; -u8 gEndCutsceneStrEn6[] = { TEXT_LETS_HAVE_CAKE }; -u8 gEndCutsceneStrEn7[] = { TEXT_FOR_MARIO }; -u8 gEndCutsceneStrEn8[] = { TEXT_FILE_MARIO_QUESTION }; +LangArray textEndCutscene1 = DEFINE_LANGUAGE_ARRAY( + "Mario!", + "Mario!", + "Mario!", + "マリオ!!", + "¡Mario!"); -u8 *gEndCutsceneStringsEn[] = { - gEndCutsceneStrEn0, - gEndCutsceneStrEn1, - gEndCutsceneStrEn2, - gEndCutsceneStrEn3, - gEndCutsceneStrEn4, - gEndCutsceneStrEn5, - gEndCutsceneStrEn6, - gEndCutsceneStrEn7, - // This [8] string is actually unused. In the cutscene handler, the developers do not - // set the 8th one, but use the first string again at the very end, so Peach ends up - // saying "Mario!" twice. It is likely that she was originally meant to say "Mario?" at - // the end but the developers changed their mind, possibly because the line recorded - // sounded more like an exclamation than a question. - gEndCutsceneStrEn8, - NULL +LangArray textEndCutscene2 = DEFINE_LANGUAGE_ARRAY( + "The power of the Stars is restored to the castle...", + "Grâce aux étoiles, le château a retrouvé ses pouvoirs...", + "Die Macht der Sterne ruht wieder sicher im Schloss...", + "おしろにスターが もどったのね", + "El poder de las estrellas ha vuelto al castillo..."); + +LangArray textEndCutscene3 = DEFINE_LANGUAGE_ARRAY( + "...and it's all thanks to you!", + "...et ceci grâce à toi!", + "...und alles dank Deiner Hilfe!", + "みんな あなたのおかげだわ!", + "¡y es todo gracias a ti!"); + +LangArray textEndCutscene4 = DEFINE_LANGUAGE_ARRAY( + "Thank you, Mario!", + "Merci, Mario!", + "Vielen Dank, Mario!", + "ありがとう マリオ", + "¡Gracias, Mario!"); + +LangArray textEndCutscene5 = DEFINE_LANGUAGE_ARRAY( + "We have to do something special for you...", + "Tu mérites une récompense...", + "Wir haben eine Überraschung für Dich...", + "なにか おれいをしなくちゃ・・", + "Tenemos que prepararte algo especial..."); + +LangArray textEndCutscene6 = DEFINE_LANGUAGE_ARRAY( + "Listen, everybody,", + "Venez les amis...", + "Hört alle her...", + "さあ みんな", + "Escuchadme todos:"); + +LangArray textEndCutscene7 = DEFINE_LANGUAGE_ARRAY( + "let's bake a delicious cake...", + "Allons préparer un délicieux gâteau...", + "Laßt uns einen leckeren Kuchen backen...", + "おいしいケーキを やきましょう", + "Hagamos una deliciosa tarta..."); + +LangArray textEndCutscene8 = DEFINE_LANGUAGE_ARRAY( + "...for Mario...", + "...pour Mario...", + "...für Mario...", + "マリオの ために・・・", + "...para Mario..."); + +LangArray textEndCutscene9 = DEFINE_LANGUAGE_ARRAY( + "Mario!", + "Mario!", + "Mario!", + "マリオ!!", + "¡Mario!"); + +LangArray *gEndCutsceneStringsEn[] = { + &textEndCutscene1, + &textEndCutscene2, + &textEndCutscene3, + &textEndCutscene4, + &textEndCutscene5, + &textEndCutscene6, + &textEndCutscene7, + &textEndCutscene8, + &textEndCutscene9 }; - u16 gCutsceneMsgFade = 0; s16 gCutsceneMsgIndex = -1; s16 gCutsceneMsgDuration = -1; @@ -1133,14 +1261,8 @@ s16 gCutsceneMsgTimer = 0; s8 gDialogCameraAngleIndex = CAM_SELECTION_MARIO; s8 gDialogCourseActNum = 1; -#define DIAG_VAL1 16 -#define DIAG_VAL3 132 // US & EU -#define DIAG_VAL4 5 -#define DIAG_VAL2 240 // JP & US - void render_dialog_entries(void) { - s8 lowerBound = 0; - void **dialogTable = segmented_to_virtual(languageTable[gInGameLanguage][0]); + void **dialogTable = segmented_to_virtual(gLanguageTables[gInGameLanguage].dialog_table); struct DialogEntry *dialog = segmented_to_virtual(dialogTable[gDialogID]); // if the dialog entry is invalid, set the ID to DIALOG_NONE. @@ -1152,7 +1274,7 @@ void render_dialog_entries(void) { switch (gDialogBoxState) { case DIALOG_STATE_OPENING: if (gDialogBoxOpenTimer == DEFAULT_DIALOG_BOX_ANGLE) { - play_dialog_sound(gDialogID); + play_dialog_sound(dialog->voice); play_sound(SOUND_MENU_MESSAGE_APPEAR, gGlobalSoundSource); } @@ -1168,7 +1290,6 @@ void render_dialog_entries(void) { gDialogBoxState = DIALOG_STATE_VERTICAL; gDialogLineNum = 1; } - lowerBound = 1; break; case DIALOG_STATE_VERTICAL: @@ -1183,17 +1304,17 @@ void render_dialog_entries(void) { play_sound(SOUND_MENU_MESSAGE_NEXT_PAGE, gGlobalSoundSource); } } - lowerBound = 1; break; case DIALOG_STATE_HORIZONTAL: // scrolling gDialogScrollOffsetY += (dialog->linesPerBox * 2); - if (gDialogScrollOffsetY >= dialog->linesPerBox * DIAG_VAL1) { + if (gDialogScrollOffsetY >= dialog->linesPerBox * DIALOG_LINE_HEIGHT) { gDialogTextPos = gLastDialogPageStrPos; gDialogBoxState = DIALOG_STATE_VERTICAL; gDialogScrollOffsetY = 0; + + bcopy(gDialogColorByEnd, gDialogCarryoverColor, sizeof(gDialogCarryoverColor)); } - lowerBound = (gDialogScrollOffsetY / DIAG_VAL1) + 1; break; case DIALOG_STATE_CLOSING: @@ -1211,11 +1332,10 @@ void render_dialog_entries(void) { gDialogBoxState = DIALOG_STATE_OPENING; gDialogID = DIALOG_NONE; gDialogTextPos = 0; - gLastDialogResponse = 0; + gDialogHasResponse = FALSE; gLastDialogPageStrPos = 0; gDialogResponse = DIALOG_RESPONSE_NONE; } - lowerBound = 1; break; } @@ -1223,21 +1343,13 @@ void render_dialog_entries(void) { gDPSetScissor(gDisplayListHead++, G_SC_NON_INTERLACE, // Horizontal scissoring isn't really required and can potentially mess up widescreen enhancements. -#ifdef WIDESCREEN 0, -#else - ensure_nonnegative(dialog->leftOffset), -#endif - ensure_nonnegative(DIAG_VAL2 - dialog->width), -#ifdef WIDESCREEN + ensure_nonnegative(SCREEN_HEIGHT - dialog->width - 3), SCREEN_WIDTH, -#else - ensure_nonnegative(DIAG_VAL3 + dialog->leftOffset), -#endif - ensure_nonnegative(240 + ((dialog->linesPerBox * 80) / DIAG_VAL4) - dialog->width)); - handle_dialog_text_and_pages(0, dialog, lowerBound); + ensure_nonnegative(SCREEN_HEIGHT + (dialog->linesPerBox * DIALOG_LINE_HEIGHT) - dialog->width)); + handle_dialog_text_and_pages(dialog); - if (gLastDialogPageStrPos == -1 && gLastDialogResponse == 1) { + if (gLastDialogPageStrPos == -1 && gDialogHasResponse) { render_dialog_triangle_choice(); } gDPSetScissor(gDisplayListHead++, G_SC_NON_INTERLACE, 2, 2, SCREEN_WIDTH - gBorderHeight / 2, SCREEN_HEIGHT - gBorderHeight / 2); @@ -1272,41 +1384,12 @@ void dl_rgba16_stop_cutscene_msg_fade(void) { } } -u32 ascii_to_credits_char(u8 c) { - if (c >= 'A' && c <= 'Z') return (c - ('A' - 0xA)); - if (c >= 'a' && c <= 'z') return (c - ('a' - 0xA)); // remap lower to upper case - if (c == ' ') return GLOBAL_CHAR_SPACE; - if (c == '.') return 0x24; - if (c == '3') return ASCII_TO_DIALOG('3'); - if (c == '4') return ASCII_TO_DIALOG('4'); - if (c == '6') return ASCII_TO_DIALOG('6'); - - return GLOBAL_CHAR_SPACE; -} - -void print_credits_str_ascii(s16 x, s16 y, const char *str) { - s32 pos = 0; - u8 c = str[pos]; - u8 creditStr[100]; - - while (c != 0) { - creditStr[pos++] = ascii_to_credits_char(c); - c = str[pos]; - } - - creditStr[pos] = GLOBAR_CHAR_TERMINATOR; - - print_credits_string(x, y, creditStr); -} - -void set_cutscene_message(s16 xOffset, s16 yOffset, s16 msgIndex, s16 msgDuration) { +void set_cutscene_message(s16 msgIndex, s16 msgDuration) { // is message done printing? if (gCutsceneMsgIndex == -1) { gCutsceneMsgIndex = msgIndex; gCutsceneMsgDuration = msgDuration; gCutsceneMsgTimer = 0; - gCutsceneMsgXOffset = xOffset; - gCutsceneMsgYOffset = yOffset; gCutsceneMsgFade = 0; } } @@ -1316,15 +1399,14 @@ void do_cutscene_handler(void) { if (gCutsceneMsgIndex == -1) { return; } - + create_dl_ortho_matrix(); gSPDisplayList(gDisplayListHead++, dl_ia_text_begin); - gDPSetEnvColor(gDisplayListHead++, 255, 255, 255, gCutsceneMsgFade); + gDialogTextAlpha = gCutsceneMsgFade; + set_text_color(255, 255, 255); - // get the x coordinate of where the cutscene string starts. - s16 x = get_str_x_pos_from_center(gCutsceneMsgXOffset, gEndCutsceneStringsEn[gCutsceneMsgIndex], 10.0f); - print_generic_string(x, 240 - gCutsceneMsgYOffset, gEndCutsceneStringsEn[gCutsceneMsgIndex]); + print_generic_string_aligned(SCREEN_CENTER_X, 13, LANG_ARRAY(*gEndCutsceneStringsEn[gCutsceneMsgIndex]), TEXT_ALIGN_CENTER); gSPDisplayList(gDisplayListHead++, dl_ia_text_end); @@ -1358,44 +1440,26 @@ void do_cutscene_handler(void) { #define PEACH_MESSAGE_TIMER 250 -#define STR_X 38 -#define STR_Y 142 - // "Dear Mario" message handler void print_peach_letter_message(void) { -#ifdef VERSION_EU - void **dialogTable; - gInGameLanguage = eu_get_language(); - switch (gInGameLanguage) { - default: - case LANGUAGE_ENGLISH: dialogTable = segmented_to_virtual(dialog_table_eu_en); break; - case LANGUAGE_FRENCH: dialogTable = segmented_to_virtual(dialog_table_eu_fr); break; - case LANGUAGE_GERMAN: dialogTable = segmented_to_virtual(dialog_table_eu_de); break; - } -#else - void **dialogTable = segmented_to_virtual(seg2_dialog_table); -#endif + void **dialogTable = segmented_to_virtual(gLanguageTables[gInGameLanguage].dialog_table); struct DialogEntry *dialog = segmented_to_virtual(dialogTable[gDialogID]); - u8 *str = segmented_to_virtual(dialog->str); + char *str = segmented_to_virtual(dialog->str); create_dl_translation_matrix(MENU_MTX_PUSH, 97.0f, 118.0f, 0); - gDPSetEnvColor(gDisplayListHead++, 255, 255, 255, gCutsceneMsgFade); + gDialogTextAlpha = gCutsceneMsgFade; + gDPSetEnvColor(gDisplayListHead++, 255, 255, 255, gDialogTextAlpha); gSPDisplayList(gDisplayListHead++, castle_grounds_seg7_dl_0700EA58); gSPPopMatrix(gDisplayListHead++, G_MTX_MODELVIEW); gSPDisplayList(gDisplayListHead++, dl_ia_text_begin); - gDPSetEnvColor(gDisplayListHead++, 20, 20, 20, gCutsceneMsgFade); - print_generic_string(STR_X, STR_Y, str); -#ifdef VERSION_JP + set_text_color(20, 20, 20); + print_generic_string(38, 142, str); + gSPDisplayList(gDisplayListHead++, dl_ia_text_end); - gDPSetEnvColor(gDisplayListHead++, 255, 255, 255, 255); -#else - gDPSetEnvColor(gDisplayListHead++, 255, 255, 255, 255); - gSPDisplayList(gDisplayListHead++, dl_ia_text_end); - gDPSetEnvColor(gDisplayListHead++, 200, 80, 120, gCutsceneMsgFade); + gDPSetEnvColor(gDisplayListHead++, 200, 80, 120, gDialogTextAlpha); gSPDisplayList(gDisplayListHead++, castle_grounds_seg7_us_dl_0700F2E8); -#endif // at the start/end of message, reset the fade. if (gCutsceneMsgTimer == 0) { @@ -1516,47 +1580,43 @@ void render_pause_red_coins(void) { for (x = 0; x < gRedCoinsCollected; x++) { print_animated_red_coin(GFX_DIMENSIONS_FROM_RIGHT_EDGE(30) - x * 20, 16); } - } - else { - print_animated_red_coin(GFX_DIMENSIONS_FROM_RIGHT_EDGE(108), 16); - Mtx *mtx; + } else { + gSPDisplayList(gDisplayListHead++, dl_rgba16_text_begin); + gDPSetEnvColor(gDisplayListHead++, 255, 255, 255, 255); - mtx = alloc_display_list(sizeof(*mtx)); - if (mtx == NULL) { - return; - } - guOrtho(mtx, 0.0f, SCREEN_WIDTH, 0.0f, SCREEN_HEIGHT, -10.0f, 10.0f, 1.0f); - gSPMatrix(gDisplayListHead++, VIRTUAL_TO_PHYSICAL(mtx), G_MTX_PROJECTION | G_MTX_LOAD | G_MTX_NOPUSH); - gSPDisplayList(gDisplayListHead++, dl_hud_img_begin); + char str[10]; + sprintf(str, "×%d", gRedCoinsCollected); + print_hud_lut_string(GFX_DIMENSIONS_FROM_RIGHT_EDGE(108), SCREEN_HEIGHT - 32, str); - s8 redCoinCount = gRedCoinsCollected; - if (redCoinCount > 99) { - redCoinCount = 99; - } + gSPDisplayList(gDisplayListHead++, dl_rgba16_text_end); - add_glyph_texture(GLYPH_MULTIPLY); - render_textrect(GFX_DIMENSIONS_FROM_RIGHT_EDGE(100), 16, 0); - add_glyph_texture(char_to_glyph_index((char) (48 + (redCoinCount / 10)))); - render_textrect(GFX_DIMENSIONS_FROM_RIGHT_EDGE(86), 16, 0); - add_glyph_texture(char_to_glyph_index((char) (48 + (redCoinCount % 10)))); - render_textrect(GFX_DIMENSIONS_FROM_RIGHT_EDGE(86), 16, 1); - - gSPDisplayList(gDisplayListHead++, dl_hud_img_end); + print_animated_red_coin(GFX_DIMENSIONS_FROM_RIGHT_EDGE(116), 16); } } -/// By default, not needed as puppycamera has an option, but should you wish to revert that, you are legally allowed. +LangArray textCurrRatio43 = DEFINE_LANGUAGE_ARRAY( + "ASPECT RATIO: 4:3\nPRESS L TO SWITCH", + "RATIO D'ASPECT: 4:3\nAPPUYEZ SUR L POUR CHANGER", + "SEITENVERHÄLTNIS: 4:3\nDRÜCKE L ZUM WECHSELN", + "アスペクトひ: 4:3\nLボタンできりかえ", + "RELACIÓN DE ASPECTO: 4:3\nPULSA L PARA CAMBIAR"); +LangArray textCurrRatio169 = DEFINE_LANGUAGE_ARRAY( + "ASPECT RATIO: 16:9\nPRESS L TO SWITCH", + "RATIO D'ASPECT: 16:9\nAPPUYEZ SUR L POUR CHANGER", + "SEITENVERHÄLTNIS: 16:9\nDRÜCKE L ZUM WECHSELN", + "アスペクトひ: 16:9\nLボタンできりかえ", + "RELACIÓN DE ASPECTO: 16:9\nPULSA L PARA CAMBIAR"); + +/// By default, not needed as puppycamera has an option, but should you wish to revert that, you are legally allowed. #if defined(WIDE) && !defined(PUPPYCAM) void render_widescreen_setting(void) { gSPDisplayList(gDisplayListHead++, dl_ia_text_begin); - gDPSetEnvColor(gDisplayListHead++, 255, 255, 255, gDialogTextAlpha); + set_text_color(255, 255, 255); if (!gConfig.widescreen) { - print_generic_string(10, 20, textCurrRatio43); - print_generic_string(10, 7, textPressL); + print_generic_string(10, 24, LANG_ARRAY(textCurrRatio43)); } else { - print_generic_string(10, 20, textCurrRatio169); - print_generic_string(10, 7, textPressL); + print_generic_string(10, 24, LANG_ARRAY(textCurrRatio169)); } gSPDisplayList(gDisplayListHead++, dl_ia_text_end); if (gPlayer1Controller->buttonPressed & L_TRIG){ @@ -1566,40 +1626,32 @@ void render_widescreen_setting(void) { } #endif -#if defined(VERSION_JP) || defined(VERSION_SH) - #define CRS_NUM_X1 93 -#elif defined(VERSION_US) - #define CRS_NUM_X1 100 -#elif defined(VERSION_EU) - #define CRS_NUM_X1 get_string_width(LANGUAGE_ARRAY(textCourse)) + 51 -#endif +LangArray textCourseX = DEFINE_LANGUAGE_ARRAY( + "COURSE %s", + "NIVEAU %s", + "KURS %s", + "コース%s", + "NIVEL %s"); -#ifdef 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 MYSCORE_X 48 -#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 MYSCORE_X 62 -#endif +LangArray textMyScore = DEFINE_LANGUAGE_ARRAY( + "MY SCORE", + "MON SCORE", + "LEISTUNG", + "マイスコア", + "MI RÉCORD"); + +#define PAUSE_MENU_LEFT_X 106 +#define PAUSE_MENU_RIGHT_X 117 + +#define PAUSE_MENU_COURSE_Y 157 +#define PAUSE_MENU_ACT_Y 140 +#define PAUSE_MENU_MY_SCORE_Y 121 void render_pause_my_score_coins(void) { - u8 textCourse[] = { TEXT_COURSE }; - u8 textMyScore[] = { TEXT_MY_SCORE }; - u8 textStar[] = { TEXT_STAR }; - u8 textUnfilledStar[] = { TEXT_UNFILLED_STAR }; + char str[20]; - u8 strCourseNum[4]; - - void **courseNameTbl = segmented_to_virtual(languageTable[gInGameLanguage][1]); - void **actNameTbl = segmented_to_virtual(languageTable[gInGameLanguage][2]); + void **courseNameTbl = segmented_to_virtual(gLanguageTables[gInGameLanguage].course_name_table); + void **actNameTbl = segmented_to_virtual(gLanguageTables[gInGameLanguage].act_name_table); u8 courseIndex = COURSE_NUM_TO_INDEX(gCurrCourseNum); u8 starFlags = save_file_get_star_flags(gCurrSaveFileNum - 1, COURSE_NUM_TO_INDEX(gCurrCourseNum)); @@ -1608,66 +1660,85 @@ void render_pause_my_score_coins(void) { gDPSetEnvColor(gDisplayListHead++, 255, 255, 255, gDialogTextAlpha); if (courseIndex <= COURSE_NUM_TO_INDEX(COURSE_STAGES_MAX)) { - print_hud_my_score_coins(1, gCurrSaveFileNum - 1, courseIndex, 178, 103); - print_hud_my_score_stars(gCurrSaveFileNum - 1, courseIndex, 118, 103); + print_hud_my_score_coins(1, gCurrSaveFileNum - 1, courseIndex, PAUSE_MENU_RIGHT_X + 61, PAUSE_MENU_MY_SCORE_Y - 18); + print_hud_my_score_stars( gCurrSaveFileNum - 1, courseIndex, PAUSE_MENU_RIGHT_X, PAUSE_MENU_MY_SCORE_Y - 18); } gSPDisplayList(gDisplayListHead++, dl_rgba16_text_end); gSPDisplayList(gDisplayListHead++, dl_ia_text_begin); - gDPSetEnvColor(gDisplayListHead++, 255, 255, 255, gDialogTextAlpha); + set_text_color(255, 255, 255); - if (courseIndex <= COURSE_NUM_TO_INDEX(COURSE_STAGES_MAX) - && (save_file_get_course_star_count(gCurrSaveFileNum - 1, courseIndex) != 0)) { - print_generic_string(MYSCORE_X, 121, LANGUAGE_ARRAY(textMyScore)); - } - - u8 *courseName = segmented_to_virtual(courseNameTbl[courseIndex]); + char *courseName = segmented_to_virtual(courseNameTbl[courseIndex]); if (courseIndex <= COURSE_NUM_TO_INDEX(COURSE_STAGES_MAX)) { - print_generic_string(TXT_COURSE_X, 157, LANGUAGE_ARRAY(textCourse)); - int_to_str(gCurrCourseNum, strCourseNum); - print_generic_string(CRS_NUM_X1, 157, strCourseNum); + char courseNumText[8]; + format_int_to_string(courseNumText, gCurrCourseNum); + sprintf(str, LANG_ARRAY(textCourseX), courseNumText); + print_generic_string_aligned(PAUSE_MENU_LEFT_X, PAUSE_MENU_COURSE_Y, str, TEXT_ALIGN_RIGHT); - u8 *actName = segmented_to_virtual(actNameTbl[COURSE_NUM_TO_INDEX(gCurrCourseNum) * 6 + gDialogCourseActNum - 1]); + char *actName = segmented_to_virtual(actNameTbl[COURSE_NUM_TO_INDEX(gCurrCourseNum) * 6 + gDialogCourseActNum - 1]); if (starFlags & (1 << (gDialogCourseActNum - 1))) { - print_generic_string(TXT_STAR_X, 140, textStar); + print_generic_string_aligned(PAUSE_MENU_LEFT_X, PAUSE_MENU_ACT_Y, "★", TEXT_ALIGN_RIGHT); } else { - print_generic_string(TXT_STAR_X, 140, textUnfilledStar); + print_generic_string_aligned(PAUSE_MENU_LEFT_X, PAUSE_MENU_ACT_Y, "☆", TEXT_ALIGN_RIGHT); } - print_generic_string(ACT_NAME_X, 140, actName); - print_generic_string(LVL_NAME_X, 157, &courseName[3]); + print_generic_string(PAUSE_MENU_RIGHT_X, PAUSE_MENU_ACT_Y, actName); + print_generic_string(PAUSE_MENU_RIGHT_X, PAUSE_MENU_COURSE_Y, courseName); + + if (save_file_get_course_star_count(gCurrSaveFileNum - 1, courseIndex) != 0) { + print_generic_string_aligned(PAUSE_MENU_LEFT_X + 3, PAUSE_MENU_MY_SCORE_Y, LANG_ARRAY(textMyScore), TEXT_ALIGN_RIGHT); + } } else { - print_generic_string(SECRET_LVL_NAME_X, 157, &courseName[3]); + print_generic_string_aligned(SCREEN_CENTER_X, PAUSE_MENU_COURSE_Y, courseName, TEXT_ALIGN_CENTER); } gSPDisplayList(gDisplayListHead++, dl_ia_text_end); } -#define TXT1_X 3 -#define TXT2_X 119 -#define Y_VAL7 2 +LangArray textLakituMario = DEFINE_LANGUAGE_ARRAY( + "LAKITU ↔ MARIO", + "LAKITU ↔ MARIO", + "LAKITU ↔ MARIO", + "ジュゲム↔マリオ", + "LAKITU ↔ MARIO"); + +LangArray textLakituStop = DEFINE_LANGUAGE_ARRAY( + "LAKITU ↔ STOP", + "LAKITU ↔ STOP", + "LAKITU ↔ STOP", + "ジュゲム↔ストップ", + "LAKITU ↔ FIJA"); + +LangArray textNormalUpClose = DEFINE_LANGUAGE_ARRAY( + "(NORMAL)(UP-CLOSE)", + "(NORMAL)(GROS-PLAN)", + "(NORMAL)(WEIT-ZOOM)", + "(おすすめ)(リアル)", + "(NORMAL)(CERCA)"); + +LangArray textNormalFixed = DEFINE_LANGUAGE_ARRAY( + "(NORMAL)(FIXED)", + "(NORMAL)(FIXE)", + "(NORMAL)(STATIV)", + "(おすすめ)(とまる)", + "(NORMAL)(FIJA)"); void render_pause_camera_options(s16 x, s16 y, s8 *index, s16 xIndex) { - u8 textLakituMario[] = { TEXT_LAKITU_MARIO }; - u8 textLakituStop[] = { TEXT_LAKITU_STOP }; - u8 textNormalUpClose[] = { TEXT_NORMAL_UPCLOSE }; - u8 textNormalFixed[] = { TEXT_NORMAL_FIXED }; - handle_menu_scrolling(MENU_SCROLL_HORIZONTAL, index, 1, 2); gSPDisplayList(gDisplayListHead++, dl_ia_text_begin); - gDPSetEnvColor(gDisplayListHead++, 255, 255, 255, gDialogTextAlpha); - 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)); + set_text_color(255, 255, 255); + print_generic_string_aligned(x + 54, y, LANG_ARRAY(textLakituMario), TEXT_ALIGN_CENTER); + print_generic_string_aligned(x + 54, y - 15, LANG_ARRAY(textNormalUpClose), TEXT_ALIGN_CENTER); + print_generic_string_aligned(x + 160, y, LANG_ARRAY(textLakituStop), TEXT_ALIGN_CENTER); + print_generic_string_aligned(x + 160, y - 15, LANG_ARRAY(textNormalFixed), TEXT_ALIGN_CENTER); gSPDisplayList(gDisplayListHead++, dl_ia_text_end); - create_dl_translation_matrix(MENU_MTX_PUSH, ((*index - 1) * xIndex) + x, y + Y_VAL7, 0); + create_dl_translation_matrix(MENU_MTX_PUSH, ((*index - 1) * xIndex) + x, y, 0); gDPSetEnvColor(gDisplayListHead++, 255, 255, 255, gDialogTextAlpha); gSPDisplayList(gDisplayListHead++, dl_draw_triangle); gSPPopMatrix(gDisplayListHead++, G_MTX_MODELVIEW); @@ -1682,27 +1753,41 @@ void render_pause_camera_options(s16 x, s16 y, s8 *index, s16 xIndex) { } } -#define X_VAL8 4 -#define Y_VAL8 2 +LangArray textContinue = DEFINE_LANGUAGE_ARRAY( + "CONTINUE", + "CONTINUER", + "WEITER", + "つづけて マリオする?", + "CONTINUAR"); + +LangArray textExitCourse = DEFINE_LANGUAGE_ARRAY( + "EXIT COURSE", + "QUITTER NIVEAU", + "KURS VERLASSEN", + "コースからでる?", + "SALIR DEL NIVEL"); + +LangArray textCameraAngleR = DEFINE_LANGUAGE_ARRAY( + "SET CAMERA ANGLE WITH Ⓡ", + "RÉGLAGE CAMÉRA AVEC Ⓡ", + "KAMERA MIT Ⓡ VERSTELLEN", + "Rボタンのカメラきりかえ", + "MODO DE CÁMARA CON Ⓡ"); void render_pause_course_options(s16 x, s16 y, s8 *index, s16 yIndex) { - u8 textContinue[] = { TEXT_CONTINUE }; - u8 textExitCourse[] = { TEXT_EXIT_COURSE }; - u8 textCameraAngleR[] = { TEXT_CAMERA_ANGLE_R }; - handle_menu_scrolling(MENU_SCROLL_VERTICAL, index, 1, 3); gSPDisplayList(gDisplayListHead++, dl_ia_text_begin); - gDPSetEnvColor(gDisplayListHead++, 255, 255, 255, gDialogTextAlpha); - print_generic_string(x + 10, y - 2, LANGUAGE_ARRAY(textContinue)); - print_generic_string(x + 10, y - 17, LANGUAGE_ARRAY(textExitCourse)); + set_text_color(255, 255, 255); + print_generic_string(x, y, LANG_ARRAY(textContinue)); + print_generic_string(x, y - 15, LANG_ARRAY(textExitCourse)); if (*index != MENU_OPT_CAMERA_ANGLE_R) { - print_generic_string(x + 10, y - 33, LANGUAGE_ARRAY(textCameraAngleR)); + print_generic_string(x, y - 31, LANG_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); + create_dl_translation_matrix(MENU_MTX_PUSH, x - 14, (y - ((*index - 1) * yIndex)), 0); gDPSetEnvColor(gDisplayListHead++, 255, 255, 255, gDialogTextAlpha); gSPDisplayList(gDisplayListHead++, dl_draw_triangle); @@ -1710,7 +1795,7 @@ void render_pause_course_options(s16 x, s16 y, s8 *index, s16 yIndex) { } if (*index == MENU_OPT_CAMERA_ANGLE_R) { - render_pause_camera_options(x - 42, y - 42, &gDialogCameraAngleIndex, 110); + render_pause_camera_options(x - 52, y - 38, &gDialogCameraAngleIndex, 110); } } @@ -1750,13 +1835,18 @@ void highlight_last_course_complete_stars(void) { gDialogLineNum = doneCourseIndex; } -void print_hud_pause_colorful_str(void) { - u8 textPause[] = { TEXT_PAUSE }; +LangArray textPause = DEFINE_LANGUAGE_ARRAY( + "PAUSE", + "PAUSE", + "PAUSE", + "PAUSE", + "PAUSA"); +void print_hud_pause_colorful_str(void) { gSPDisplayList(gDisplayListHead++, dl_rgba16_text_begin); gDPSetEnvColor(gDisplayListHead++, 255, 255, 255, gDialogTextAlpha); - print_hud_lut_string(HUD_LUT_GLOBAL, 123, 81, textPause); + print_hud_lut_string_aligned(SCREEN_CENTER_X, 81, LANG_ARRAY(textPause), TEXT_ALIGN_CENTER); gSPDisplayList(gDisplayListHead++, dl_rgba16_text_end); } @@ -1764,9 +1854,8 @@ 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]; - - u8 textStar[] = { TEXT_STAR }; + char str[30]; + char *entries[6]; u8 starFlags = save_file_get_star_flags(fileIndex, courseIndex); u16 starCount = save_file_get_course_star_count(fileIndex, courseIndex); @@ -1775,40 +1864,53 @@ void render_pause_castle_course_stars(s16 x, s16 y, s16 fileIndex, s16 courseInd if (starFlags & STAR_FLAG_ACT_100_COINS) { starCount--; - print_generic_string(x + 89, y - 5, textStar); + print_generic_string(x + 98, y, "★"); } while (hasStar != starCount) { if (starFlags & (1 << nextStar)) { - str[nextStar * 2] = DIALOG_CHAR_STAR_FILLED; + entries[nextStar] = "★"; hasStar++; } else { - str[nextStar * 2] = DIALOG_CHAR_STAR_OPEN; + entries[nextStar] = "☆"; } - - str[nextStar * 2 + 1] = DIALOG_CHAR_SPACE; nextStar++; } if (starCount == nextStar && starCount != 6) { - str[nextStar * 2] = DIALOG_CHAR_STAR_OPEN; - str[nextStar * 2 + 1] = DIALOG_CHAR_SPACE; + entries[nextStar] = "☆"; + nextStar++; + } + while (nextStar < 6) { + entries[nextStar] = ""; nextStar++; } - str[nextStar * 2] = DIALOG_CHAR_TERMINATOR; - - print_generic_string(x + 14, y + 13, str); + sprintf(str, "%s %s %s %s %s %s", entries[0], entries[1], entries[2], entries[3], entries[4], entries[5]); + print_generic_string(x + 23, y + 18, str); } -void render_pause_castle_main_strings(s16 x, s16 y) { - void **courseNameTbl = segmented_to_virtual(languageTable[gInGameLanguage][1]); +LangArray textCoinX = DEFINE_LANGUAGE_ARRAY( + "✪× %s", + "✪× %s", + "✪× %s", + "✪x%s", + "✪× %s"); - u8 textCoin[] = { TEXT_COIN_X }; +LangArray textStarX = DEFINE_LANGUAGE_ARRAY( + "★× %s", + "★× %s", + "★× %s", + "★x%s", + "★× %s"); + +void render_pause_castle_main_strings(s16 x, s16 y) { + void **courseNameTbl = segmented_to_virtual(gLanguageTables[gInGameLanguage].course_name_table); void *courseName; - u8 strVal[8]; + char str[8]; + char countText[10]; s16 prevCourseIndex = gDialogLineNum; @@ -1842,26 +1944,30 @@ void render_pause_castle_main_strings(s16 x, s16 y) { } gSPDisplayList(gDisplayListHead++, dl_ia_text_begin); - gDPSetEnvColor(gDisplayListHead++, 255, 255, 255, gDialogTextAlpha); + set_text_color(255, 255, 255); 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); - print_generic_string(x + 34, y - 5, textCoin); - int_to_str(save_file_get_course_coin_score(gCurrSaveFileNum - 1, gDialogLineNum), strVal); - print_generic_string(x + 54, y - 5, strVal); - } else { // Castle secret stars - 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_NUM_TO_INDEX(COURSE_BONUS_STAGES), - COURSE_NUM_TO_INDEX(COURSE_MAX)), - strVal); - print_generic_string(x + 60, y + 13, strVal); - } + print_generic_string(x - 50, y + 35, courseName); - print_generic_string(x - 9, y + 30, courseName); + render_pause_castle_course_stars(x - 65, y, gCurrSaveFileNum - 1, gDialogLineNum); + + format_int_to_string(countText, save_file_get_course_coin_score(gCurrSaveFileNum - 1, gDialogLineNum)); + sprintf(str, LANG_ARRAY(textCoinX), countText); + print_generic_string(x - 22, y, str); + + format_int_to_string(str, gDialogLineNum + 1); + print_generic_string_aligned(x - 55, y + 35, str, TEXT_ALIGN_RIGHT); + } else { // Castle secret stars + courseName = segmented_to_virtual(courseNameTbl[COURSE_MAX]); + print_generic_string_aligned(x, y + 35, courseName, TEXT_ALIGN_CENTER); + + format_int_to_string(countText, save_file_get_total_star_count(gCurrSaveFileNum - 1, + COURSE_NUM_TO_INDEX(COURSE_BONUS_STAGES), + COURSE_NUM_TO_INDEX(COURSE_MAX))); + sprintf(str, LANG_ARRAY(textStarX), countText); + print_generic_string_aligned(x, y + 18, str, TEXT_ALIGN_CENTER); + } gSPDisplayList(gDisplayListHead++, dl_ia_text_end); } @@ -1906,7 +2012,7 @@ s32 render_pause_courses_and_castle(void) { #else if (gMarioStates[0].action & ACT_FLAG_PAUSE_EXIT) { #endif - render_pause_course_options(99, 93, &gDialogLineNum, 15); + render_pause_course_options(109, 91, &gDialogLineNum, 15); } #endif @@ -1930,7 +2036,7 @@ s32 render_pause_courses_and_castle(void) { shade_screen(); print_hud_pause_colorful_str(); render_pause_castle_menu_box(160, 143); - render_pause_castle_main_strings(104, 60); + render_pause_castle_main_strings(SCREEN_CENTER_X, 55); if (gPlayer1Controller->buttonPressed & (A_BUTTON | START_BUTTON)) { level_set_transition(0, NULL); @@ -1945,8 +2051,9 @@ s32 render_pause_courses_and_castle(void) { #if defined(WIDE) && !defined(PUPPYCAM) render_widescreen_setting(); #endif - if (gDialogTextAlpha < 250) { - gDialogTextAlpha += 25; + gDialogTextAlpha += 25; + if (gDialogTextAlpha > 250) { + gDialogTextAlpha = 250; } #ifdef PUPPYCAM } else { @@ -1959,47 +2066,48 @@ s32 render_pause_courses_and_castle(void) { return MENU_OPT_NONE; } -#define TXT_HISCORE_X 109 -#define TXT_HISCORE_Y 36 -#define TXT_CONGRATS_X 70 -#define TXT_CONGRATS_Y 67 - enum HUDCourseCompleteStringIDs { HUD_PRINT_HISCORE, HUD_PRINT_CONGRATULATIONS }; -void print_hud_course_complete_string(s8 str) { - u8 textHiScore[] = { TEXT_HUD_HI_SCORE }; - u8 textCongratulations[] = { TEXT_HUD_CONGRATULATIONS }; +LangArray textHudHiScore = DEFINE_LANGUAGE_ARRAY( + "HI SCORE", + "MEILLEUR SCORE", + "BESTLEISTUNG", + "HISCORE", + "NUEVO RECORD"); +LangArray textCongratulations = DEFINE_LANGUAGE_ARRAY( + "CONGRATULATIONS", + "FELICITATIONS", + "GRATULATION", + "CONGRATULATIONS", + "FELICIDADES"); + +void print_hud_course_complete_string(s8 str) { u8 colorFade = sins(gDialogColorFadeTimer) * 50.0f + 200.0f; gSPDisplayList(gDisplayListHead++, dl_rgba16_text_begin); gDPSetEnvColor(gDisplayListHead++, colorFade, colorFade, colorFade, 255); if (str == HUD_PRINT_HISCORE) { - print_hud_lut_string(HUD_LUT_GLOBAL, TXT_HISCORE_X, TXT_HISCORE_Y, LANGUAGE_ARRAY(textHiScore)); + print_hud_lut_string_aligned(SCREEN_CENTER_X, 36, LANG_ARRAY(textHudHiScore), TEXT_ALIGN_CENTER); } else { // HUD_PRINT_CONGRATULATIONS - print_hud_lut_string(HUD_LUT_GLOBAL, TXT_CONGRATS_X, TXT_CONGRATS_Y, LANGUAGE_ARRAY(textCongratulations)); + print_hud_lut_string_aligned(SCREEN_CENTER_X, 67, LANG_ARRAY(textCongratulations), TEXT_ALIGN_CENTER); } gSPDisplayList(gDisplayListHead++, dl_rgba16_text_end); } void print_hud_course_complete_coins(s16 x, s16 y) { - u8 courseCompleteCoinsStr[4]; - u8 hudTextSymCoin[] = { GLYPH_COIN, GLYPH_SPACE }; - u8 hudTextSymX[] = { GLYPH_MULTIPLY, GLYPH_SPACE }; + char courseCompleteCoinsStr[10]; gSPDisplayList(gDisplayListHead++, dl_rgba16_text_begin); gDPSetEnvColor(gDisplayListHead++, 255, 255, 255, 255); - print_hud_lut_string(HUD_LUT_GLOBAL, x + 0, y, hudTextSymCoin); - print_hud_lut_string(HUD_LUT_GLOBAL, x + 16, y, hudTextSymX); - - int_to_str(gCourseCompleteCoins, courseCompleteCoinsStr); - print_hud_lut_string(HUD_LUT_GLOBAL, x + 32, y, courseCompleteCoinsStr); + sprintf(courseCompleteCoinsStr, "✪×%d", gCourseCompleteCoins); + print_hud_lut_string(x, y, courseCompleteCoinsStr); gSPDisplayList(gDisplayListHead++, dl_rgba16_text_end); @@ -2036,27 +2144,36 @@ void play_star_fanfare_and_flash_hud(s32 arg, u8 starNum) { } } -#define TXT_NAME_X1 71 -#define TXT_NAME_X2 TXT_NAME_X1 - 2 -#define CRS_NUM_X2 104 -#define CRS_NUM_X3 CRS_NUM_X2 - 2 -#define TXT_CLEAR_X1 get_string_width(name) + 81 -#define TXT_CLEAR_X2 TXT_CLEAR_X1 - 2 +LangArray textClear = DEFINE_LANGUAGE_ARRAY( + "CLEAR", + "CLEAR", + "CLEAR", + "クリア!", + "HECHO"); + +#define COURSE_COMPLETE_COURSE_X 63 +#define COURSE_COMPLETE_COURSE_Y 167 +#define COURSE_COMPLETE_ACT_X 74 +#define COURSE_COMPLETE_ACT_Y 147 + +#define CONGRATULATIONS_COURSE_X 69 +#define CONGRATULATIONS_COURSE_Y 132 + +#define COURSE_COMPLETE_COINS_X 118 +#define COURSE_COMPLETE_COINS_Y 103 +#define CONGRATULATIONS_COINS_Y 111 void render_course_complete_lvl_info_and_hud_str(void) { - u8 textCourse[] = { TEXT_COURSE }; - u8 textClear[] = { TEXT_CLEAR }; - u8 textSymStar[] = { GLYPH_STAR, GLYPH_SPACE }; + char *name; - u8 *name; + char str[20]; + char courseNumText[8]; - u8 strCourseNum[4]; - - void **actNameTbl = segmented_to_virtual(languageTable[gInGameLanguage][2]); - void **courseNameTbl = segmented_to_virtual(languageTable[gInGameLanguage][1]); + void **actNameTbl = segmented_to_virtual(gLanguageTables[gInGameLanguage].act_name_table); + void **courseNameTbl = segmented_to_virtual(gLanguageTables[gInGameLanguage].course_name_table); if (gLastCompletedCourseNum <= COURSE_STAGES_MAX) { // Main courses - print_hud_course_complete_coins(118, 103); + print_hud_course_complete_coins(COURSE_COMPLETE_COINS_X, COURSE_COMPLETE_COINS_Y); play_star_fanfare_and_flash_hud(HUD_FLASH_STARS, (1 << (gLastCompletedStarNum - 1))); if (gLastCompletedStarNum == 7) { @@ -2068,39 +2185,38 @@ void render_course_complete_lvl_info_and_hud_str(void) { // Print course number gSPDisplayList(gDisplayListHead++, dl_ia_text_begin); - int_to_str(gLastCompletedCourseNum, strCourseNum); + format_int_to_string(courseNumText, gLastCompletedCourseNum); + sprintf(str, LANG_ARRAY(textCourseX), courseNumText); + set_text_color(0, 0, 0); + print_generic_string(COURSE_COMPLETE_COURSE_X + 2, COURSE_COMPLETE_COURSE_Y - 2, str); - gDPSetEnvColor(gDisplayListHead++, 0, 0, 0, gDialogTextAlpha); - print_generic_string(65, 165, LANGUAGE_ARRAY(textCourse)); - print_generic_string(CRS_NUM_X2, 165, strCourseNum); - - gDPSetEnvColor(gDisplayListHead++, 255, 255, 255, gDialogTextAlpha); - print_generic_string(63, 167, LANGUAGE_ARRAY(textCourse)); - print_generic_string(CRS_NUM_X3, 167, strCourseNum); + set_text_color(255, 255, 255); + print_generic_string(COURSE_COMPLETE_COURSE_X, COURSE_COMPLETE_COURSE_Y, str); gSPDisplayList(gDisplayListHead++, dl_ia_text_end); } else if (gLastCompletedCourseNum == COURSE_BITDW || gLastCompletedCourseNum == COURSE_BITFS) { // Bowser courses name = segmented_to_virtual(courseNameTbl[COURSE_NUM_TO_INDEX(gLastCompletedCourseNum)]); + u32 clearX = get_string_width(name, main_font_lut, &main_font_utf8_lut) + COURSE_COMPLETE_COURSE_X + 16; // Print course name and clear text gSPDisplayList(gDisplayListHead++, dl_ia_text_begin); - gDPSetEnvColor(gDisplayListHead++, 0, 0, 0, gDialogTextAlpha); - print_generic_string(TXT_NAME_X1, 130, name); - print_generic_string(TXT_CLEAR_X1, 130, textClear); - gDPSetEnvColor(gDisplayListHead++, 255, 255, 255, gDialogTextAlpha); - print_generic_string(TXT_NAME_X2, 132, name); - print_generic_string(TXT_CLEAR_X2, 132, textClear); + set_text_color(0, 0, 0); + print_generic_string(CONGRATULATIONS_COURSE_X + 2, CONGRATULATIONS_COURSE_Y - 2, name); + print_generic_string(clearX + 2, CONGRATULATIONS_COURSE_Y - 2, LANG_ARRAY(textClear)); + set_text_color(255, 255, 255); + print_generic_string(CONGRATULATIONS_COURSE_X, CONGRATULATIONS_COURSE_Y, name); + print_generic_string(clearX, CONGRATULATIONS_COURSE_Y, LANG_ARRAY(textClear)); gSPDisplayList(gDisplayListHead++, dl_ia_text_end); print_hud_course_complete_string(HUD_PRINT_CONGRATULATIONS); - print_hud_course_complete_coins(118, 111); + print_hud_course_complete_coins(COURSE_COMPLETE_COINS_X, CONGRATULATIONS_COINS_Y); play_star_fanfare_and_flash_hud(HUD_FLASH_KEYS, 0); return; } else { // Castle secret stars name = segmented_to_virtual(actNameTbl[COURSE_STAGES_MAX * 6]); - print_hud_course_complete_coins(118, 103); + print_hud_course_complete_coins(COURSE_COMPLETE_COINS_X, COURSE_COMPLETE_COINS_Y); play_star_fanfare_and_flash_hud(HUD_FLASH_STARS, 1 << (gLastCompletedStarNum - 1)); } @@ -2108,45 +2224,56 @@ void render_course_complete_lvl_info_and_hud_str(void) { gSPDisplayList(gDisplayListHead++, dl_rgba16_text_begin); gDPSetEnvColor(gDisplayListHead++, 255, 255, 255, gDialogTextAlpha); - print_hud_lut_string(HUD_LUT_GLOBAL, 55, 77, textSymStar); + print_hud_lut_string(COURSE_COMPLETE_ACT_X - 19, SCREEN_HEIGHT - COURSE_COMPLETE_ACT_Y - 16, "★"); gSPDisplayList(gDisplayListHead++, dl_rgba16_text_end); // Print act name and catch text gSPDisplayList(gDisplayListHead++, dl_ia_text_begin); - gDPSetEnvColor(gDisplayListHead++, 0, 0, 0, gDialogTextAlpha); - print_generic_string(76, 145, name); + set_text_color(0, 0, 0); + print_generic_string(COURSE_COMPLETE_ACT_X + 2, COURSE_COMPLETE_ACT_Y - 2, name); - gDPSetEnvColor(gDisplayListHead++, 255, 255, 255, gDialogTextAlpha); - print_generic_string(74, 147, name); + set_text_color(255, 255, 255); + print_generic_string(COURSE_COMPLETE_ACT_X, COURSE_COMPLETE_ACT_Y, name); gSPDisplayList(gDisplayListHead++, dl_ia_text_end); } -#define X_VAL9 x -#define TXT_SAVEOPTIONS_X x + 12 -#define TXT_SAVECONT_Y 0 -#define TXT_SAVEQUIT_Y 20 -#define TXT_CONTNOSAVE_Y 40 +LangArray textSaveAndContinue = DEFINE_LANGUAGE_ARRAY( + "SAVE & CONTINUE", + "SAUVEGARDER & CONTINUER", + "SPEICHERN & WEITER", + "セーブしてつづける?", + "GUARDAR Y CONTINUAR"); + +LangArray textSaveAndQuit = DEFINE_LANGUAGE_ARRAY( + "SAVE & QUIT", + "SAUVEGARDER & QUITTER", + "SPEICHERN & ENDE", + "セーブしておわる?", + "GUARDAR Y SALIR"); + +LangArray textContinueWithoutSave = DEFINE_LANGUAGE_ARRAY( + "CONTINUE, DON'T SAVE", + "CONTINUER SANS SAUVEGARDER", + "WEITER OHNE ZU SPEICHERN", + "セーブしないでつづける?", + "CONTINUAR SIN GUARDAR"); void render_save_confirmation(s16 x, s16 y, s8 *index, s16 yPos) { - u8 textSaveAndContinue[] = { TEXT_SAVE_AND_CONTINUE }; - u8 textSaveAndQuit[] = { TEXT_SAVE_AND_QUIT }; - u8 textContinueWithoutSave[] = { TEXT_CONTINUE_WITHOUT_SAVING }; - handle_menu_scrolling(MENU_SCROLL_VERTICAL, index, 1, 3); gSPDisplayList(gDisplayListHead++, dl_ia_text_begin); - gDPSetEnvColor(gDisplayListHead++, 255, 255, 255, gDialogTextAlpha); - 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)); - print_generic_string(TXT_SAVEOPTIONS_X, y - TXT_CONTNOSAVE_Y, LANGUAGE_ARRAY(textContinueWithoutSave)); + set_text_color(255, 255, 255); + print_generic_string(x + 12, y, LANG_ARRAY(textSaveAndContinue)); + print_generic_string(x + 12, y - 20, LANG_ARRAY(textSaveAndQuit)); + print_generic_string(x + 12, y - 40, LANG_ARRAY(textContinueWithoutSave)); gSPDisplayList(gDisplayListHead++, dl_ia_text_end); - create_dl_translation_matrix(MENU_MTX_PUSH, X_VAL9, y - ((*index - 1) * yPos), 0); + create_dl_translation_matrix(MENU_MTX_PUSH, x, y - ((*index - 1) * yPos), 0); gDPSetEnvColor(gDisplayListHead++, 255, 255, 255, gDialogTextAlpha); gSPDisplayList(gDisplayListHead++, dl_draw_triangle); @@ -2154,6 +2281,16 @@ void render_save_confirmation(s16 x, s16 y, s8 *index, s16 yPos) { gSPPopMatrix(gDisplayListHead++, G_MTX_MODELVIEW); } +// Save option strings are longer in French, so render them further to the left. +#define SAVE_CONFIRMATION_X_EN 100 +#define SAVE_CONFIRMATION_X_FR 80 + +#ifdef ENABLE_FRENCH +#define SAVE_CONFIRMATION_X ((gInGameLanguage == LANGUAGE_FRENCH) ? SAVE_CONFIRMATION_X_FR : SAVE_CONFIRMATION_X_EN) +#else +#define SAVE_CONFIRMATION_X SAVE_CONFIRMATION_X_EN +#endif + s32 render_course_complete_screen(void) { switch (gDialogBoxState) { case DIALOG_STATE_OPENING: @@ -2169,7 +2306,7 @@ s32 render_course_complete_screen(void) { case DIALOG_STATE_VERTICAL: shade_screen(); render_course_complete_lvl_info_and_hud_str(); - render_save_confirmation(100, 86, &gDialogLineNum, 20); + render_save_confirmation(SAVE_CONFIRMATION_X, 86, &gDialogLineNum, 20); if (gCourseDoneMenuTimer > 110 && (gPlayer1Controller->buttonPressed & (A_BUTTON | START_BUTTON))) { level_set_transition(0, NULL); @@ -2186,8 +2323,9 @@ s32 render_course_complete_screen(void) { break; } - if (gDialogTextAlpha < 250) { - gDialogTextAlpha += 25; + gDialogTextAlpha += 25; + if (gDialogTextAlpha > 250) { + gDialogTextAlpha = 250; } gCourseDoneMenuTimer++; diff --git a/src/game/ingame_menu.h b/src/game/ingame_menu.h index e5fd64105..6f92de8b2 100644 --- a/src/game/ingame_menu.h +++ b/src/game/ingame_menu.h @@ -2,11 +2,56 @@ #define INGAME_MENU_H #include +#include "types.h" +#include "dialog_ids.h" +#include "course_table.h" + +// General string macros +#define HEX(s) GLUE2(0x, s) +#define HEX_STR(s) STRING2(GLUE2(\x, s)) + +// Control characters (Must be hexadecimal without the +// '0x' prefix, possible values range from 00-1F) +#define CONTROL_CHAR_TERMINATOR 00 // '\0' (RESERVED!) +#define CONTROL_CHAR_TAB 09 // '\t' (RESERVED!) +#define CONTROL_CHAR_NEWLINE 0A // '\n' (RESERVED!) +#define CONTROL_CHAR_COL 1B // '\033' +#define CONTROL_CHAR_RESET 1C // '\034' + +// Additional control macros +#define CHAR_VALUE_IGNORE "-" + + +/********************************** BEGIN USER DIALOG CONTROL **********************************/ + + +/** + * COL_RGB("XXXXXX"), COL_RGBA("XXXXXXXX") + * + * Set color of text to an RGB value. + * e.g. COL_RGB("00FF00") will set the color to green. + * Will use gDialogTextAlpha as the alpha value if alpha is not specified. + * + * Example: "normal text " COL_RGBA("FF00007F") "transparent red text" + */ +#define COL_RGB(color) \ + HEX_STR(CONTROL_CHAR_COL) color CHAR_VALUE_IGNORE CHAR_VALUE_IGNORE +#define COL_RGBA(color) \ + HEX_STR(CONTROL_CHAR_COL) color + +/** + * COL_RESET + * + * Reset the text color back to its default text color. + * + * Example: "colored text " COL_RESET "normal text" + */ +#define COL_RESET \ + HEX_STR(CONTROL_CHAR_RESET) + + +/*********************************** END USER DIALOG CONTROL ***********************************/ -#define ASCII_TO_DIALOG(asc) \ - (((asc) >= '0' && (asc) <= '9') ? ((asc) - '0') : \ - ((asc) >= 'A' && (asc) <= 'Z') ? ((asc) - 'A' + 0x0A) : \ - ((asc) >= 'a' && (asc) <= 'z') ? ((asc) - 'a' + 0x24) : 0x00) enum MenuMtxPushOp { MENU_MTX_NONE, @@ -20,21 +65,6 @@ enum MenuScrollAxis { MENU_SCROLL_HORIZONTAL, }; -// Japanese File Select uses an unique table -// to print specific Japanese HUD chars -enum HUDLUTs { - HUD_LUT_NONE, - HUD_LUT_JPMENU, - HUD_LUT_GLOBAL, -}; - -// For file select JP HUD difference -#if defined(VERSION_JP) || defined(VERSION_SH) -#define HUD_LUT_DIFF HUD_LUT_JPMENU -#else -#define HUD_LUT_DIFF HUD_LUT_GLOBAL -#endif - enum MenuMode { MENU_MODE_NONE = -1, MENU_MODE_UNUSED_0, @@ -52,82 +82,85 @@ enum HUDFlashModes { extern s8 gHudFlash; extern s8 gDialogCourseActNum; -extern s16 gInGameLanguage; +extern u8 gInGameLanguage; + +struct LanguageTables { + /* 0x00 */ u8 *dialog_table; + /* 0x01 */ u8 *course_name_table; + /* 0x02 */ u8 *act_name_table; +}; /* 0x03 */ + +extern const struct LanguageTables gLanguageTables[]; + +struct AsciiCharLUTEntry { + const Texture *texture; + const s8 kerning; +}; + +// Convert an ASCII char to the index in the ASCII LUT. ASCII LUTs start at the space character. +#define ASCII_LUT_INDEX(c) ((c) - ' ') + +// Macro to quickly get the kerning of the space character from an ASCII LUT. +#define SPACE_KERNING(lut) (((struct AsciiCharLUTEntry *)(lut))[ASCII_LUT_INDEX(' ')].kerning) + +struct Utf8CharLUTEntry { + u32 codepoint; + s8 kerning; + u16 flags; // used for diacritics and packed textures + Texture *texture; +}; + +struct Utf8LUT { + struct Utf8CharLUTEntry *lut2Bytes; + struct Utf8CharLUTEntry *lut3Bytes; + struct Utf8CharLUTEntry *lut4Bytes; + u16 length2Bytes; // set these with the ARRAY_COUNT macro + u16 length3Bytes; + u16 length4Bytes; + struct Utf8CharLUTEntry *missingChar; +}; + +struct DiacriticLUTEntry { + s8 xOffset; + s8 yOffset; + char *str; +}; + +enum TextDiacriticMarks { + TEXT_DIACRITIC_NONE, + TEXT_DIACRITIC_CIRCUMFLEX, + TEXT_DIACRITIC_CIRCUMFLEX_UPPERCASE, + TEXT_DIACRITIC_ACUTE, + TEXT_DIACRITIC_ACUTE_UPPERCASE, + TEXT_DIACRITIC_GRAVE, + TEXT_DIACRITIC_GRAVE_UPPERCASE, + TEXT_DIACRITIC_TILDE, + TEXT_DIACRITIC_TILDE_UPPERCASE, + TEXT_DIACRITIC_UMLAUT, + TEXT_DIACRITIC_UMLAUT_UPPERCASE, + TEXT_DIACRITIC_CEDILLA, +#ifdef JAPANESE_CHARACTERS + TEXT_DIACRITIC_DAKUTEN, + TEXT_DIACRITIC_HANDAKUTEN, +#endif +}; + +enum TextAlignments { + TEXT_ALIGN_LEFT, + TEXT_ALIGN_CENTER, + TEXT_ALIGN_RIGHT, +}; + +#define TEXT_FLAG_PACKED 0x8000 +#define TEXT_DIACRITIC_MASK 0x00FF +// bits 0x0100 through 0x4000 are free for use, and the mask can be reduced if necessary struct DialogEntry { - /*0x00*/ u32 unused; + /*0x00*/ s32 voice; /*0x04*/ s8 linesPerBox; /*0x06*/ s16 leftOffset; /*0x08*/ s16 width; - /*0x0C*/ const u8 *str; -}; - -// EU only -enum HudSpecialHUDChars { - HUD_CHAR_A_UMLAUT = 0x3A, - HUD_CHAR_O_UMLAUT = 0x3B, - HUD_CHAR_U_UMLAUT = 0x3C -}; - -enum SpecialFontChars { - GLOBAL_CHAR_SPACE = 0x9E, - GLOBAR_CHAR_TERMINATOR = 0xFF -}; - -enum DialogMark { - DIALOG_MARK_NONE, - DIALOG_MARK_DAKUTEN, - DIALOG_MARK_HANDAKUTEN -}; - -// definitions for some of the special characters defined in charmap.txt -enum DialogSpecialChars { -#ifdef VERSION_EU - DIALOG_CHAR_LOWER_A_GRAVE = 0x60, // 'a' grave - DIALOG_CHAR_LOWER_A_CIRCUMFLEX = 0x61, // 'a' circumflex - DIALOG_CHAR_LOWER_A_UMLAUT = 0x62, // 'a' umlaut - DIALOG_CHAR_UPPER_A_GRAVE = 0x64, // 'A' grave - DIALOG_CHAR_UPPER_A_CIRCUMFLEX = 0x65, // 'A' circumflex - DIALOG_CHAR_UPPER_A_UMLAUT = 0x66, // 'A' umlaut - DIALOG_CHAR_LOWER_E_GRAVE = 0x70, // 'e' grave - DIALOG_CHAR_LOWER_E_CIRCUMFLEX = 0x71, // 'e' circumflex - DIALOG_CHAR_LOWER_E_UMLAUT = 0x72, // 'e' umlaut - DIALOG_CHAR_LOWER_E_ACUTE = 0x73, // 'e' acute - DIALOG_CHAR_UPPER_E_GRAVE = 0x74, // 'E' grave - DIALOG_CHAR_UPPER_E_CIRCUMFLEX = 0x75, // 'E' circumflex - DIALOG_CHAR_UPPER_E_UMLAUT = 0x76, // 'E' umlaut - DIALOG_CHAR_UPPER_E_ACUTE = 0x77, // 'E' acute - DIALOG_CHAR_LOWER_U_GRAVE = 0x80, // 'u' grave - DIALOG_CHAR_LOWER_U_CIRCUMFLEX = 0x81, // 'u' circumflex - DIALOG_CHAR_LOWER_U_UMLAUT = 0x82, // 'u' umlaut - DIALOG_CHAR_UPPER_U_GRAVE = 0x84, // 'U' grave - DIALOG_CHAR_UPPER_U_CIRCUMFLEX = 0x85, // 'U' circumflex - DIALOG_CHAR_UPPER_U_UMLAUT = 0x86, // 'U' umlaut - DIALOG_CHAR_LOWER_O_CIRCUMFLEX = 0x91, // 'o' circumflex - DIALOG_CHAR_LOWER_O_UMLAUT = 0x92, // 'o' umlaut - DIALOG_CHAR_UPPER_O_CIRCUMFLEX = 0x95, // 'O' circumflex - DIALOG_CHAR_UPPER_O_UMLAUT = 0x96, // 'O' umlaut - DIALOG_CHAR_LOWER_I_CIRCUMFLEX = 0xA1, // 'i' circumflex - DIALOG_CHAR_LOWER_I_UMLAUT = 0xA2, // 'i' umlaut - DIALOG_CHAR_I_NO_DIA = 0xEB, // 'i' without diacritic - DIALOG_CHAR_DOUBLE_LOW_QUOTE = 0xF0, // German opening quotation mark -#endif - DIALOG_CHAR_SLASH = 0xD0, - DIALOG_CHAR_MULTI_THE = 0xD1, // 'the' - DIALOG_CHAR_MULTI_YOU = 0xD2, // 'you' - DIALOG_CHAR_PERIOD = 0x6E, - DIALOG_CHAR_COMMA = 0x6F, - DIALOG_CHAR_COLOR = 0xDF, - DIALOG_CHAR_SPACE = 0x9E, - DIALOG_CHAR_STAR_COUNT = 0xE0, // number of stars - DIALOG_CHAR_UMLAUT = 0xE9, - DIALOG_CHAR_MARK_START = 0xEF, - DIALOG_CHAR_DAKUTEN = (DIALOG_CHAR_MARK_START + DIALOG_MARK_DAKUTEN), - DIALOG_CHAR_PERIOD_OR_HANDAKUTEN = (DIALOG_CHAR_MARK_START + DIALOG_MARK_HANDAKUTEN), - DIALOG_CHAR_STAR_FILLED = 0xFA, - DIALOG_CHAR_STAR_OPEN = 0xFD, - DIALOG_CHAR_NEWLINE = 0xFE, - DIALOG_CHAR_TERMINATOR = 0xFF + /*0x0C*/ const char *str; }; // gDialogResponse @@ -139,29 +172,122 @@ enum DialogResponseDefines { DIALOG_RESPONSE_MAXIMUM = 32 }; +// Types and defines for handling language arrays +#ifdef MULTILANG +extern const u8 gDefinedLanguages[]; + +enum MultilangLanguages { + LANGUAGE_ENGLISH, +#ifdef ENABLE_FRENCH + LANGUAGE_FRENCH, +#endif +#ifdef ENABLE_GERMAN + LANGUAGE_GERMAN, +#endif +#ifdef ENABLE_JAPANESE + LANGUAGE_JAPANESE, +#endif +#ifdef ENABLE_SPANISH + LANGUAGE_SPANISH, +#endif + LANGUAGE_COUNT, + NUM_DEFINED_LANGUAGES = (LANGUAGE_COUNT - 1), +}; + +#ifdef ENABLE_FRENCH +#define LANG_ARRAY_COND_FRENCH(...) [LANGUAGE_FRENCH] = __VA_ARGS__, +#else +#define LANG_ARRAY_COND_FRENCH(...) +#endif +#ifdef ENABLE_GERMAN +#define LANG_ARRAY_COND_GERMAN(...) [LANGUAGE_GERMAN] = __VA_ARGS__, +#else +#define LANG_ARRAY_COND_GERMAN(...) +#endif +#ifdef ENABLE_JAPANESE +#define LANG_ARRAY_COND_JAPANESE(...) [LANGUAGE_JAPANESE] = __VA_ARGS__, +#else +#define LANG_ARRAY_COND_JAPANESE(...) +#endif +#ifdef ENABLE_SPANISH +#define LANG_ARRAY_COND_SPANISH(...) [LANGUAGE_SPANISH] = __VA_ARGS__, +#else +#define LANG_ARRAY_COND_SPANISH(...) +#endif + +typedef char * LangArray[LANGUAGE_COUNT]; +#define LANG_ARRAY(cmd) ((cmd)[gInGameLanguage]) +#define DEFINE_LANGUAGE_ARRAY(english, french, german, japanese, spanish) { \ + [LANGUAGE_ENGLISH] = english, \ + LANG_ARRAY_COND_FRENCH(french) \ + LANG_ARRAY_COND_GERMAN(german) \ + LANG_ARRAY_COND_JAPANESE(japanese) \ + LANG_ARRAY_COND_SPANISH(spanish) \ +} + +#else + +// If multilang is off, ignore all other languages and only include English. +#define LANGUAGE_ENGLISH 0 + +typedef char * LangArray; +#define LANG_ARRAY(cmd) (cmd) +#define DEFINE_LANGUAGE_ARRAY(english, french, german, japanese, spanish) english + +#endif + +//! NOTE: These are just to assist with VSCode autocomplete and should not be considered functional. +#undef DEFINE_DIALOG +#define DEFINE_DIALOG(id, voice, linesPerBox, leftOffset, bottomOffset, dialogText) + +#undef COURSE_ACTS +#define COURSE_ACTS(id, name, a, b, c, d, e, f) + +#undef SECRET_STAR +#define SECRET_STAR(id, name) + +#undef CASTLE_SECRET_STARS +#define CASTLE_SECRET_STARS(str) + +#undef EXTRA_TEXT +#define EXTRA_TEXT(id, str) + +typedef union { + s32 asInt; + char *asStr; +} DialogVariable; + extern s32 gDialogResponse; extern u16 gDialogColorFadeTimer; extern s8 gLastDialogLineNum; -extern s32 gDialogVariable; +extern DialogVariable gDialogVariable; extern u16 gDialogTextAlpha; -extern s16 gCutsceneMsgXOffset; -extern s16 gCutsceneMsgYOffset; 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 create_dl_scale_matrix(s8 pushOp, f32 x, f32 y, f32 z); -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 set_text_color(u32 r, u32 g, u32 b); +s32 get_string_width(char *str, struct AsciiCharLUTEntry *asciiLut, struct Utf8LUT *utf8LUT); +void format_int_to_string(char *buf, s32 value); +void print_generic_string(s16 x, s16 y, char *str); +void print_hud_lut_string(s16 x, s16 y, char *str); +void print_menu_generic_string(s16 x, s16 y, char *str); +void print_credits_string(s16 x, s16 y, char *str); +void print_generic_string_aligned(s16 x, s16 y, char *str, u32 alignment); +void print_hud_lut_string_aligned(s16 x, s16 y, char *str, u32 alignment); +void print_menu_generic_string_aligned(s16 x, s16 y, char *str, u32 alignment); +void print_credits_string_aligned(s16 x, s16 y, char *str, u32 alignment); + void handle_menu_scrolling(s8 scrollDirection, s8 *currentIndex, s8 minIndex, s8 maxIndex); -s32 get_str_x_pos_from_center(s16 centerPos, u8 *str, f32 scale); void print_hud_my_score_coins(s32 useCourseCoinScore, s8 fileIndex, s8 courseIndex, s16 x, s16 y); -void int_to_str(s32 num, u8 *dst); s32 get_dialog_id(void); void create_dialog_box(s16 dialog); -void create_dialog_box_with_var(s16 dialog, s32 dialogVar); +void create_dialog_box_with_int_var(s16 dialog, s32 dialogVar); +void create_dialog_box_with_str_var(s16 dialog, char *dialogVar); +void create_dialog_box_with_var(s16 dialog, DialogVariable dialogVar); void create_dialog_inverted_box(s16 dialog); void create_dialog_box_with_response(s16 dialog); void reset_dialog_render_state(void); @@ -169,8 +295,7 @@ void set_menu_mode(s16 mode); void reset_cutscene_msg_fade(void); void dl_rgba16_begin_cutscene_msg_fade(void); void dl_rgba16_stop_cutscene_msg_fade(void); -void print_credits_str_ascii(s16 x, s16 y, const char *str); -void set_cutscene_message(s16 xOffset, s16 yOffset, s16 msgIndex, s16 msgDuration); +void set_cutscene_message(s16 msgIndex, s16 msgDuration); void do_cutscene_handler(void); void render_hud_cannon_reticle(void); void reset_red_coins_collected(void); diff --git a/src/game/level_update.c b/src/game/level_update.c index fc4938fd8..ab2d8c949 100644 --- a/src/game/level_update.c +++ b/src/game/level_update.c @@ -20,9 +20,8 @@ #include "ingame_menu.h" #include "obj_behaviors.h" #include "save_file.h" -#if MULTILANG +#ifdef MULTILANG #include "memory.h" -#include "eu_translation.h" #include "segment_symbols.h" #endif #include "level_table.h" @@ -1303,25 +1302,38 @@ s32 lvl_init_or_update(s16 initOrUpdate, UNUSED s32 unused) { return (initOrUpdate ? update_level() : init_level()); } -#if MULTILANG +#ifdef MULTILANG void load_language_text(void) { - switch (gInGameLanguage - 1) { + switch (gInGameLanguage) { case LANGUAGE_ENGLISH: load_segment_decompress(SEGMENT_EU_TRANSLATION, _translation_en_yay0SegmentRomStart, _translation_en_yay0SegmentRomEnd); break; +#ifdef ENABLE_FRENCH case LANGUAGE_FRENCH: load_segment_decompress(SEGMENT_EU_TRANSLATION, _translation_fr_yay0SegmentRomStart, _translation_fr_yay0SegmentRomEnd); break; +#endif +#ifdef ENABLE_GERMAN case LANGUAGE_GERMAN: load_segment_decompress(SEGMENT_EU_TRANSLATION, _translation_de_yay0SegmentRomStart, _translation_de_yay0SegmentRomEnd); break; +#endif +#ifdef ENABLE_JAPANESE + case LANGUAGE_JAPANESE: + load_segment_decompress(SEGMENT_EU_TRANSLATION, _translation_jp_yay0SegmentRomStart, _translation_jp_yay0SegmentRomEnd); + break; +#endif +#ifdef ENABLE_SPANISH + case LANGUAGE_SPANISH: + load_segment_decompress(SEGMENT_EU_TRANSLATION, _translation_es_yay0SegmentRomStart, _translation_es_yay0SegmentRomEnd); + break; +#endif } } #endif s32 lvl_init_from_save_file(UNUSED s16 initOrUpdate, s32 levelNum) { -#if MULTILANG - gInGameLanguage = eu_get_language()+1; +#ifdef MULTILANG load_language_text(); #endif sWarpDest.type = WARP_TYPE_NOT_WARPING; diff --git a/src/game/mario_actions_cutscene.c b/src/game/mario_actions_cutscene.c index 06684a9ae..1a4fb8391 100644 --- a/src/game/mario_actions_cutscene.c +++ b/src/game/mario_actions_cutscene.c @@ -74,24 +74,6 @@ static Vec4s sJumboStarKeyframes[27] = { { 0, -3500, 2100, -2000 }, { 0, -2000, 2200, -3500 }, { 0, 0, 2300, -4000 }, }; -/** - * get_credits_str_width: Calculate width of a Credits String - * Loop over each character in a credits string and increment the length. If the - * character is a space, increment by 4; otherwise increment by 7. Once the next - * character is a null character (equal to 0), stop counting the length since - * that's the end of the string. - */ -s32 get_credits_str_width(char *str) { - u32 c; - s32 length = 0; - - while ((c = *str++) != 0) { - length += (c == ' ' ? 4 : 7); - } - - return length; -} - #define CREDIT_TEXT_MARGIN_X ((s32)(GFX_DIMENSIONS_ASPECT_RATIO * 21)) #define CREDIT_TEXT_X_LEFT GFX_DIMENSIONS_RECT_FROM_LEFT_EDGE(CREDIT_TEXT_MARGIN_X) #define CREDIT_TEXT_X_RIGHT GFX_DIMENSIONS_RECT_FROM_RIGHT_EDGE(CREDIT_TEXT_MARGIN_X) @@ -120,33 +102,33 @@ void print_displaying_credits_entry(void) { s16 lineHeight = 16; dl_rgba16_begin_cutscene_msg_fade(); - print_credits_str_ascii(CREDIT_TEXT_X_LEFT, strY, titleStr); + print_credits_string(CREDIT_TEXT_X_LEFT, strY, titleStr); switch (numLines) { case 4: - print_credits_str_ascii(CREDIT_TEXT_X_LEFT, strY + 24, *currStrPtr++); + print_credits_string(CREDIT_TEXT_X_LEFT, strY + 24, *currStrPtr++); numLines = 2; lineHeight = 24; break; case 5: - print_credits_str_ascii(CREDIT_TEXT_X_LEFT, strY + 16, *currStrPtr++); + print_credits_string(CREDIT_TEXT_X_LEFT, strY + 16, *currStrPtr++); numLines = 3; break; #ifdef VERSION_EU case 6: - print_credits_str_ascii(CREDIT_TEXT_X_LEFT, strY + 32, *currStrPtr++); + print_credits_string(CREDIT_TEXT_X_LEFT, strY + 32, *currStrPtr++); numLines = 3; break; case 7: - print_credits_str_ascii(CREDIT_TEXT_X_LEFT, strY + 16, *currStrPtr++); - print_credits_str_ascii(CREDIT_TEXT_X_LEFT, strY + 32, *currStrPtr++); + print_credits_string(CREDIT_TEXT_X_LEFT, strY + 16, *currStrPtr++); + print_credits_string(CREDIT_TEXT_X_LEFT, strY + 32, *currStrPtr++); numLines = 3; break; #endif } while (numLines-- > 0) { - print_credits_str_ascii(CREDIT_TEXT_X_RIGHT - get_credits_str_width(*currStrPtr), strY, *currStrPtr); + print_credits_string_aligned(CREDIT_TEXT_X_RIGHT, strY, *currStrPtr, TEXT_ALIGN_RIGHT); strY += lineHeight; @@ -437,7 +419,7 @@ s32 act_reading_automatic_dialog(struct MarioState *m) { if (GET_HIGH_U16_OF_32(actionArg) == 0) { create_dialog_box(GET_LOW_U16_OF_32(actionArg)); } else { - create_dialog_box_with_var(GET_HIGH_U16_OF_32(actionArg), GET_LOW_U16_OF_32(actionArg)); + create_dialog_box_with_int_var(GET_HIGH_U16_OF_32(actionArg), GET_LOW_U16_OF_32(actionArg)); } } // wait until dialog is done @@ -2212,7 +2194,7 @@ static void end_peach_cutscene_dialog_1(struct MarioState *m) { break; case END_PEACH_CUTSCENE_DIALOG_1_TIME_5: - set_cutscene_message(160, 227, 0, 30); + set_cutscene_message(0, 30); #ifndef VERSION_JP seq_player_lower_volume(SEQ_PLAYER_LEVEL, 60, 40); play_sound(SOUND_PEACH_MARIO, sEndPeachObj->header.gfx.cameraToObject); @@ -2225,7 +2207,7 @@ static void end_peach_cutscene_dialog_1(struct MarioState *m) { break; case END_PEACH_CUTSCENE_DIALOG_1_TIME_7: - set_cutscene_message(160, 227, 1, 60); + set_cutscene_message(1, 60); #ifndef VERSION_JP play_sound(SOUND_PEACH_POWER_OF_THE_STARS, sEndPeachObj->header.gfx.cameraToObject); #endif @@ -2269,7 +2251,7 @@ static void end_peach_cutscene_dialog_2(struct MarioState *m) { switch (m->actionTimer) { case END_PEACH_CUTSCENE_DIALOG_2_TIME_1: - set_cutscene_message(160, 227, 2, 30); + set_cutscene_message(2, 30); #ifndef VERSION_JP play_sound(SOUND_PEACH_THANKS_TO_YOU, sEndPeachObj->header.gfx.cameraToObject); #endif @@ -2280,14 +2262,14 @@ static void end_peach_cutscene_dialog_2(struct MarioState *m) { break; case END_PEACH_CUTSCENE_DIALOG_2_TIME_3: - set_cutscene_message(160, 227, 3, 30); + set_cutscene_message(3, 30); #ifndef VERSION_JP play_sound(SOUND_PEACH_THANK_YOU_MARIO, sEndPeachObj->header.gfx.cameraToObject); #endif break; case TIMER_SOMETHING_SPECIAL: - set_cutscene_message(160, 227, 4, 40); + set_cutscene_message(4, 40); #ifndef VERSION_JP play_sound(SOUND_PEACH_SOMETHING_SPECIAL, sEndPeachObj->header.gfx.cameraToObject); #endif @@ -2410,18 +2392,18 @@ static void end_peach_cutscene_dialog_3(struct MarioState *m) { sEndToadAnims[END_TOAD_INDEX_WEST] = TOAD_ANIM_WEST_WAVE_THEN_TURN; sEndToadAnims[END_TOAD_INDEX_EAST] = TOAD_ANIM_EAST_NOD_THEN_TURN; sPeachIsBlinking = TRUE; - set_cutscene_message(160, 227, 5, 30); + set_cutscene_message(5, 30); #ifndef VERSION_JP play_sound(SOUND_PEACH_BAKE_A_CAKE, sEndPeachObj->header.gfx.cameraToObject); #endif break; case 55: - set_cutscene_message(160, 227, 6, 40); + set_cutscene_message(6, 40); break; case 130: - set_cutscene_message(160, 227, 7, 50); + set_cutscene_message(7, 50); #ifndef VERSION_JP play_sound(SOUND_PEACH_FOR_MARIO, sEndPeachObj->header.gfx.cameraToObject); #endif @@ -2445,7 +2427,7 @@ static void end_peach_cutscene_run_to_castle(struct MarioState *m) { } if (m->actionTimer == 95) { - set_cutscene_message(160, 227, 0, 40); + set_cutscene_message(8, 40); #ifndef VERSION_JP play_sound(SOUND_PEACH_MARIO2, sEndPeachObj->header.gfx.cameraToObject); #endif diff --git a/src/game/print.c b/src/game/print.c index d2f52494b..254ce59f2 100644 --- a/src/game/print.c +++ b/src/game/print.c @@ -5,17 +5,20 @@ #include "memory.h" #include "print.h" #include "segment2.h" +#include "ingame_menu.h" /** * This file handles printing and formatting the colorful text that * appears when printing things such as "PRESS START". */ +// The maximum number of characters in a single text label. +#define MAX_TEXT_LABEL_SIZE 50 + struct TextLabel { u32 x; u32 y; - s16 length; - char buffer[50]; + char buffer[MAX_TEXT_LABEL_SIZE]; }; /** @@ -26,207 +29,19 @@ struct TextLabel *sTextLabels[52]; s16 sTextLabelsCount = 0; /** - * Returns n to the exponent power, only for non-negative powers. - */ -s32 int_pow(s32 n, s32 exponent) { - s32 result = 1; - s32 i; - - for (i = 0; i < exponent; i++) { - result = n * result; - } - - return result; -} - -/** - * Formats an integer n for print by fitting it to width, prefixing with a negative, - * and converting the base. - */ -void format_integer(s32 n, s32 base, char *dest, s32 *totalLength, u8 width, s8 zeroPad) { - u32 powBase; - s32 numDigits = 0; - s32 i; - s32 len = 0; - s8 digit; - s8 negative = FALSE; - char pad; - - if (zeroPad) { - pad = '0'; - } else { - pad = -1; - } - - if (n != 0) { - // Formats a negative number for negative prefix. - if (n < 0) { - n = -n; - negative = TRUE; - } - - // Increments the number of digits until length is long enough. - while (TRUE) { - powBase = int_pow(base, numDigits); - - if (powBase > (u32) n) { - break; - } - - numDigits++; - } - - // Add leading pad to fit width. - if (width > numDigits) { - for (len = 0; len < width - numDigits; len++) dest[len] = pad; - - // Needs 1 length to print negative prefix. - if (negative == TRUE) { - len--; - } - } - - // Use 'M' prefix to indicate negative numbers. - if (negative == TRUE) { - dest[len] = 'M'; - len++; - } - - // Transfer the digits into the proper base. - for (i = numDigits - 1; i >= 0; i--) { - powBase = int_pow(base, i); - digit = n / powBase; - - // FIXME: Why doesn't [] match? - if (digit < 10) { - *(dest + len + numDigits - 1 - i) = digit + '0'; - } else { - *(dest + len + numDigits - 1 - i) = digit + '7'; - } - - n -= digit * powBase; - } - } else { // n is zero. - numDigits = 1; - if (width > numDigits) { - for (len = 0; len < width - numDigits; len++) dest[len] = pad; - } - dest[len] = '0'; - } - - *totalLength += numDigits + len; -} - -/** - * Determines the width of the number for printing, writing to 'width'. - * Additionally, this determines if a number should be zero-padded, - * writing to 'zeroPad'. - */ -void parse_width_field(const char *str, s32 *srcIndex, u8 *width, s8 *zeroPad) { - s8 digits[12]; // unknown length - s8 digitsLen = 0; - s16 i; - - // If first character is 0, then the string should be zero padded. - if (str[*srcIndex] == '0') { - *zeroPad = TRUE; - } - - // Read width digits up until the 'd' or 'x' format specifier. - while (str[*srcIndex] != 'b' - && str[*srcIndex] != 'o' - && str[*srcIndex] != 'd' - && str[*srcIndex] != 'x') { - digits[digitsLen] = str[*srcIndex] - '0'; - - if (digits[digitsLen] < 0 || digits[digitsLen] >= 10) { // not a valid digit - *width = 0; - return; - } - - digitsLen++; - (*srcIndex)++; - } - - // No digits - if (digitsLen == 0) { - return; - } - - // 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 + digits[digitsLen - 1]; -} - -/** - * Takes a number, finds the intended base, formats the number, and prints it + * Takes a number, formats the number, and prints it * at the given X & Y coordinates. - * - * Warning: this fails on too large numbers, because format_integer has bugs - * related to overflow. For romhacks, prefer sprintf + print_text. */ -void print_text_fmt_int(s32 x, s32 y, const char *str, s32 n) { - char c = 0; - s8 zeroPad = FALSE; - u8 width = 0; - s32 base = 0; - s32 len = 0; - s32 srcIndex = 0; - - // Don't continue if there is no memory to do so. - if ((sTextLabels[sTextLabelsCount] = mem_pool_alloc(gEffectsMemoryPool, - sizeof(struct TextLabel))) == NULL) { - return; - } - - sTextLabels[sTextLabelsCount]->x = x; - sTextLabels[sTextLabelsCount]->y = y; - - c = str[srcIndex]; - - while (c != 0) { - if (c == '%') { - srcIndex++; - - parse_width_field(str, &srcIndex, &width, &zeroPad); - - if (str[srcIndex] != 'b' - && str[srcIndex] != 'o' - && str[srcIndex] != 'd' - && str[srcIndex] != 'x') { - break; - } - if (str[srcIndex] == 'b') base = 2; - if (str[srcIndex] == 'o') base = 8; - if (str[srcIndex] == 'd') base = 10; - if (str[srcIndex] == 'x') base = 16; - - srcIndex++; - - format_integer(n, base, sTextLabels[sTextLabelsCount]->buffer + len, &len, width, zeroPad); - } else { // straight copy - sTextLabels[sTextLabelsCount]->buffer[len] = c; - len++; - srcIndex++; - } - c = str[srcIndex]; - } - - sTextLabels[sTextLabelsCount]->length = len; - sTextLabelsCount++; +void print_text_fmt_int(s32 x, s32 y, char *str, s32 n) { + char buffer[MAX_TEXT_LABEL_SIZE]; + sprintf(buffer, str, n); + print_text(x, y, buffer); } /** * Prints text in the colorful lettering at given X, Y coordinates. */ -void print_text(s32 x, s32 y, const char *str) { - char c = 0; - s32 length = 0; - s32 srcIndex = 0; - +void print_text(s32 x, s32 y, char *str) { // Don't continue if there is no memory to do so. if ((sTextLabels[sTextLabelsCount] = mem_pool_alloc(gEffectsMemoryPool, sizeof(struct TextLabel))) == NULL) { @@ -236,180 +51,27 @@ void print_text(s32 x, s32 y, const char *str) { sTextLabels[sTextLabelsCount]->x = x; sTextLabels[sTextLabelsCount]->y = y; - c = str[srcIndex]; - - // Set the array with the text to print while finding length. - while (c != 0) { - sTextLabels[sTextLabelsCount]->buffer[length] = c; - length++; - srcIndex++; - c = str[srcIndex]; + u32 i = 0; + while (str[i] != '\0') { + sTextLabels[sTextLabelsCount]->buffer[i] = str[i]; + i++; } + sTextLabels[sTextLabelsCount]->buffer[i] = '\0'; - sTextLabels[sTextLabelsCount]->length = length; sTextLabelsCount++; } /** - * Prints text in the colorful lettering centered at given X, Y coordinates. + * Prints text in the colorful lettering, allowing for text alignment. */ -void print_text_centered(s32 x, s32 y, const char *str) { - char c = 0; - s32 length = 0; - s32 srcIndex = 0; - - // Don't continue if there is no memory to do so. - if ((sTextLabels[sTextLabelsCount] = mem_pool_alloc(gEffectsMemoryPool, - sizeof(struct TextLabel))) == NULL) { - return; +void print_text_aligned(s32 x, s32 y, char *str, u32 alignment) { + s32 strLength = get_string_width(str, main_hud_lut, &main_hud_utf8_lut); + if (alignment == TEXT_ALIGN_RIGHT) { + x -= strLength; + } else if (alignment == TEXT_ALIGN_CENTER) { + x -= strLength / 2; } - - c = str[srcIndex]; - - // Set the array with the text to print while finding length. - while (c != 0) { - sTextLabels[sTextLabelsCount]->buffer[length] = c; - length++; - srcIndex++; - c = str[srcIndex]; - } - - sTextLabels[sTextLabelsCount]->length = length; - sTextLabels[sTextLabelsCount]->x = x - length * 6; // * 12 / 2; - sTextLabels[sTextLabelsCount]->y = y; - sTextLabelsCount++; -} - -/** - * Converts a char into the proper colorful glyph for the char. - */ -s32 char_to_glyph_index(char c) { - if (c >= 'A' && c <= 'Z') { - return c - 55; - } - - if (c >= 'a' && c <= 'z') { - return c - 87; - } - - if (c >= '0' && c <= '9') { - return c - 48; - } - - if (c == ' ') { - return GLYPH_SPACE; - } - - if (c == '!') { - return GLYPH_EXCLAMATION_PNT; // !, JP only - } - - if (c == '#') { - return GLYPH_TWO_EXCLAMATION; // !!, JP only - } - - if (c == '?') { - return GLYPH_QUESTION_MARK; // ?, JP only - } - - if (c == '&') { - return GLYPH_AMPERSAND; // &, JP only - } - - if (c == '/') { - return GLYPH_PERCENT; // %, JP only - } - - if (c == '-') { - return GLYPH_MINUS; // minus - } - - if (c == '*') { - return GLYPH_MULTIPLY; // x - } - - if (c == '$') { - return GLYPH_COIN; // coin - } - - if (c == '@') { - return GLYPH_RED_COIN; // red coin - } - - if (c == '+') { - return GLYPH_SILVER_COIN; // silver coin - } - - if (c == ',') { - return GLYPH_MARIO_HEAD; // Imagine I drew Mario's head - } - - if (c == '^') { - return GLYPH_STAR; // star - } - - if (c == '.') { - return GLYPH_PERIOD; // large shaded dot, JP only - } - - if (c == '|') { - return GLYPH_BETA_KEY; // beta key, JP only. Reused for Ü in EU. - } - - return GLYPH_SPACE; -} - -/** - * Adds an individual glyph to be rendered. - */ -void add_glyph_texture(s8 glyphIndex) { - const Texture *const *glyphs = segmented_to_virtual(main_hud_lut); - - gDPPipeSync(gDisplayListHead++); - gDPSetTextureImage(gDisplayListHead++, G_IM_FMT_RGBA, G_IM_SIZ_16b, 1, glyphs[glyphIndex]); - gSPDisplayList(gDisplayListHead++, dl_hud_img_load_tex_block); -} - -#ifndef WIDESCREEN -/** - * Clips textrect into the boundaries defined. - */ -void clip_to_bounds(s32 *x, s32 *y) { - if (*x < TEXRECT_MIN_X) { - *x = TEXRECT_MIN_X; - } - - if (*x > TEXRECT_MAX_X) { - *x = TEXRECT_MAX_X; - } - - if (*y < TEXRECT_MIN_Y) { - *y = TEXRECT_MIN_Y; - } - - if (*y > TEXRECT_MAX_Y) { - *y = TEXRECT_MAX_Y; - } -} -#endif - -/** - * Renders the glyph that's set at the given position. - */ -void render_textrect(s32 x, s32 y, s32 pos) { - s32 rectBaseX = x + pos * 12; - s32 rectBaseY = 224 - y; - s32 rectX; - s32 rectY; - -#ifndef WIDESCREEN - // For widescreen we must allow drawing outside the usual area - clip_to_bounds(&rectBaseX, &rectBaseY); -#endif - rectX = rectBaseX; - rectY = rectBaseY; - gSPTextureRectangle(gDisplayListHead++, rectX << 2, rectY << 2, (rectX + 15) << 2, - (rectY + 15) << 2, G_TX_RENDERTILE, 0, 0, 4 << 10, 1 << 10); + print_text(x, y, str); } /** @@ -418,8 +80,6 @@ void render_textrect(s32 x, s32 y, s32 pos) { */ void render_text_labels(void) { s32 i; - s32 j; - s8 glyphIndex; Mtx *mtx; if (sTextLabelsCount == 0) { @@ -434,39 +94,16 @@ void render_text_labels(void) { } guOrtho(mtx, 0.0f, SCREEN_WIDTH, 0.0f, SCREEN_HEIGHT, -10.0f, 10.0f, 1.0f); - gSPPerspNormalize((Gfx *) (gDisplayListHead++), 0xFFFF); + gSPPerspNormalize(gDisplayListHead++, 0xFFFF); gSPMatrix(gDisplayListHead++, VIRTUAL_TO_PHYSICAL(mtx), G_MTX_PROJECTION | G_MTX_LOAD | G_MTX_NOPUSH); - gSPDisplayList(gDisplayListHead++, dl_hud_img_begin); + gSPDisplayList(gDisplayListHead++, dl_rgba16_text_begin); for (i = 0; i < sTextLabelsCount; i++) { - for (j = 0; j < sTextLabels[i]->length; j++) { - glyphIndex = char_to_glyph_index(sTextLabels[i]->buffer[j]); - - if (glyphIndex != GLYPH_SPACE) { -#ifdef VERSION_EU - // Beta Key was removed by EU, so glyph slot reused. - // This produces a colorful Ü. - if (glyphIndex == GLYPH_BETA_KEY) { - add_glyph_texture(GLYPH_U); - render_textrect(sTextLabels[i]->x, sTextLabels[i]->y, j); - - add_glyph_texture(GLYPH_UMLAUT); - render_textrect(sTextLabels[i]->x, sTextLabels[i]->y + 3, j); - } else { - add_glyph_texture(glyphIndex); - render_textrect(sTextLabels[i]->x, sTextLabels[i]->y, j); - } -#else - add_glyph_texture(glyphIndex); - render_textrect(sTextLabels[i]->x, sTextLabels[i]->y, j); -#endif - } - } - + print_hud_lut_string(sTextLabels[i]->x, 224 - sTextLabels[i]->y, sTextLabels[i]->buffer); mem_pool_free(gEffectsMemoryPool, sTextLabels[i]); } - gSPDisplayList(gDisplayListHead++, dl_hud_img_end); + gSPDisplayList(gDisplayListHead++, dl_rgba16_text_end); sTextLabelsCount = 0; } diff --git a/src/game/print.h b/src/game/print.h index c159453a1..e68215ea2 100644 --- a/src/game/print.h +++ b/src/game/print.h @@ -3,39 +3,9 @@ #include -#define TEXRECT_MIN_X 10 -#define TEXRECT_MAX_X 300 -#define TEXRECT_MIN_Y 5 -#define TEXRECT_MAX_Y 220 - -enum PrintfGlyphs { - GLYPH_SPACE = -1, - GLYPH_U = 30, - GLYPH_EXCLAMATION_PNT = 36, - GLYPH_TWO_EXCLAMATION = 37, - GLYPH_QUESTION_MARK = 38, - GLYPH_AMPERSAND = 39, - GLYPH_PERCENT = 40, - GLYPH_MINUS = 47, - GLYPH_MULTIPLY = 48, - GLYPH_COIN = 49, - GLYPH_RED_COIN = 50, - GLYPH_SILVER_COIN = 51, - GLYPH_MARIO_HEAD = 52, - GLYPH_STAR = 53, - GLYPH_PERIOD = 54, - GLYPH_BETA_KEY = 55, - GLYPH_APOSTROPHE = 56, - GLYPH_DOUBLE_QUOTE = 57, - GLYPH_UMLAUT = 58, -}; - -void print_text_fmt_int(s32 x, s32 y, const char *str, s32 n); -void print_text(s32 x, s32 y, const char *str); -void print_text_centered(s32 x, s32 y, const char *str); +void print_text_fmt_int(s32 x, s32 y, char *str, s32 n); +void print_text(s32 x, s32 y, char *str); +void print_text_aligned(s32 x, s32 y, char *str, u32 alignment); void render_text_labels(void); -s32 char_to_glyph_index(char c); -void add_glyph_texture(s8 glyphIndex); -void render_textrect(s32 x, s32 y, s32 pos); #endif // PRINT_H diff --git a/src/game/puppycam2.c b/src/game/puppycam2.c index 384d8af0c..8ddb3fa18 100644 --- a/src/game/puppycam2.c +++ b/src/game/puppycam2.c @@ -13,7 +13,6 @@ #include "print.h" #include "engine/surface_collision.h" #include "engine/surface_load.h" -#include "include/text_strings.h" #include "segment2.h" #include "ingame_menu.h" #include "memory.h" @@ -92,7 +91,7 @@ static const struct gPCOptionStruct gPCOptions[] = { //If the min and max are 0 #ifdef WIDE {/*Option Name*/ OPTION_STRING_WIDESCREEN, /*Option Variable*/ &gConfig.widescreen, /*Option Value Text Start*/ 0, /*Option Minimum*/ FALSE, /*Option Maximum*/ TRUE}, #endif -#if MULTILANG +#ifdef MULTILANG {/*Option Name*/ OPTION_STRING_LANGUAGE, /*Option Variable*/ &gInGameLanguage, /*Option Value Text Start*/ 4, /*Option Minimum*/ 1, /*Option Maximum*/ 3}, #endif {/*Option Name*/ OPTION_STRING_ANALOGUE, /*Option Variable*/ &gPuppyCam.options.analogue, /*Option Value Text Start*/ 0, /*Option Minimum*/ FALSE, /*Option Maximum*/ TRUE}, @@ -167,24 +166,29 @@ void puppycam_warp(f32 displacementX, f32 displacementY, f32 displacementZ) { gPuppyCam.floorY[1] += displacementY; } -#if MULTILANG +#ifdef MULTILANG static void newcam_set_language(void) { - switch (gInGameLanguage - 1) { - case LANGUAGE_ENGLISH: - gPCOptionStringsPtr = &gPCOptionStringsEN; - gPCFlagStringsPtr = &gPCFlagStringsEN; - gPCToggleStringsPtr = &gPCToggleStringsEN; - break; - case LANGUAGE_FRENCH: - gPCOptionStringsPtr = &gPCOptionStringsFR; - gPCFlagStringsPtr = &gPCFlagStringsFR; - gPCToggleStringsPtr = &gPCToggleStringsFR; - break; - case LANGUAGE_GERMAN: - gPCOptionStringsPtr = &gPCOptionStringsDE; - gPCFlagStringsPtr = &gPCFlagStringsDE; - gPCToggleStringsPtr = &gPCToggleStringsDE; - break; + switch (gInGameLanguage) { + case LANGUAGE_ENGLISH: + gPCOptionStringsPtr = &gPCOptionStringsEN; + gPCFlagStringsPtr = &gPCFlagStringsEN; + gPCToggleStringsPtr = &gPCToggleStringsEN; + break; + case LANGUAGE_FRENCH: + gPCOptionStringsPtr = &gPCOptionStringsFR; + gPCFlagStringsPtr = &gPCFlagStringsFR; + gPCToggleStringsPtr = &gPCToggleStringsFR; + break; + case LANGUAGE_GERMAN: + gPCOptionStringsPtr = &gPCOptionStringsDE; + gPCFlagStringsPtr = &gPCFlagStringsDE; + gPCToggleStringsPtr = &gPCToggleStringsDE; + break; + case LANGUAGE_SPANISH: + gPCOptionStringsPtr = &gPCOptionStringsES; + gPCFlagStringsPtr = &gPCFlagStringsES; + gPCToggleStringsPtr = &gPCToggleStringsES; + break; } } #endif @@ -325,12 +329,13 @@ void puppycam_change_setting(s8 toggle) { void puppycam_print_text(s32 x, s32 y, unsigned char *str, s32 col) { s32 textX = get_str_x_pos_from_center(x, str, 10.0f); - gDPSetEnvColor(gDisplayListHead++, 0, 0, 0, 255); + gDialogTextAlpha = 255; + set_text_color(0, 0, 0); print_generic_string(textX + 1, y - 1,str); if (col != 0) { - gDPSetEnvColor(gDisplayListHead++, 255, 255, 255, 255); + set_text_color(255, 255, 255); } else { - gDPSetEnvColor(gDisplayListHead++, 255, 32, 32, 255); + set_text_color(255, 32, 32); } print_generic_string(textX,y,str); } @@ -355,7 +360,7 @@ void puppycam_display_options() { puppycam_display_box(48,84,272,218,0x0,0x0,0x0, 0x50); gSPDisplayList(gDisplayListHead++, dl_rgba16_text_begin); gDPSetEnvColor(gDisplayListHead++, 255, 255, 255, 255); - print_hud_lut_string(HUD_LUT_GLOBAL, 112, 40, (*gPCToggleStringsPtr)[2]); + print_hud_lut_string(112, 40, (*gPCToggleStringsPtr)[2]); gSPDisplayList(gDisplayListHead++, dl_rgba16_text_end); if (gPCOptionCap > 4) { @@ -376,7 +381,7 @@ void puppycam_display_options() { puppycam_print_text(160, scroll - 12, (*gPCFlagStringsPtr)[var], gPCOptionSelected - i); } } else { - int_to_str(*gPCOptions[i].gPCOptionVar,newstring); + sprintf(newstring, "%d", *gPCOptions[i].gPCOptionVar); puppycam_print_text(160,scroll-12,newstring,gPCOptionSelected-i); puppycam_display_box(96, 111 + (32 * i) - (gPCOptionScroll * 32), 224, 117 + (32 * i) - (gPCOptionScroll * 32), 0x80, 0x80, 0x80, 0xFF); maxvar = gPCOptions[i].gPCOptionMax - gPCOptions[i].gPCOptionMin; @@ -389,7 +394,8 @@ void puppycam_display_options() { } newcam_sinpos = sins(gGlobalTimer * 5000) * 4; gDPSetScissor(gDisplayListHead++, G_SC_NON_INTERLACE, 0, 0, SCREEN_WIDTH, SCREEN_HEIGHT); - gDPSetEnvColor(gDisplayListHead++, 255, 255, 255, 255); + gDialogTextAlpha = 255; + set_text_color(255, 255, 255); print_generic_string( 80 - newcam_sinpos, 132 - (32 * (gPCOptionSelected - gPCOptionScroll)), (*gPCToggleStringsPtr)[3]); print_generic_string(232 + newcam_sinpos, 132 - (32 * (gPCOptionSelected - gPCOptionScroll)), (*gPCToggleStringsPtr)[4]); gSPDisplayList(gDisplayListHead++, dl_ia_text_end); @@ -409,13 +415,13 @@ void puppycam_check_pause_buttons(void) { play_sound(SOUND_MENU_CHANGE_SELECT, gGlobalSoundSource); if (gPCOptionOpen == 0) { gPCOptionOpen = 1; -#if MULTILANG +#ifdef MULTILANG newcam_set_language(); - eu_set_language(gInGameLanguage-1); + multilang_set_language(gInGameLanguage); #endif } else { gPCOptionOpen = 0; -#if MULTILANG +#ifdef MULTILANG load_language_text(); #endif puppycam_set_save(); diff --git a/src/game/save_file.c b/src/game/save_file.c index bb9eed9c6..568247863 100644 --- a/src/game/save_file.c +++ b/src/game/save_file.c @@ -387,6 +387,11 @@ void save_file_load_all(void) { break; } } + +#ifdef MULTILANG + // Failsafe in case the language in the save file isn't defined. + multilang_set_language(get_language_index(multilang_get_language())); +#endif } #ifdef PUPPYCAM @@ -742,16 +747,29 @@ void save_file_move_cap_to_default_location(void) { } } -#if MULTILANG -void eu_set_language(u16 language) { +#ifdef MULTILANG +void multilang_set_language(u32 language) { gSaveBuffer.menuData.language = language; + gInGameLanguage = language; gMainMenuDataModified = TRUE; save_main_menu_data(); } -u32 eu_get_language(void) { +u32 multilang_get_language(void) { return gSaveBuffer.menuData.language; } + +/** + * Determines the array index of the saved language based on which languages are defined. + */ +u32 get_language_index(u32 language) { + for (u32 i = 0; i < LANGUAGE_COUNT; i++) { + if (language == gDefinedLanguages[i]) { + return i; + } + } + return LANGUAGE_ENGLISH; +} #endif void disable_warp_checkpoint(void) { diff --git a/src/game/save_file.h b/src/game/save_file.h index 146685946..41a2c6945 100644 --- a/src/game/save_file.h +++ b/src/game/save_file.h @@ -62,18 +62,14 @@ struct MainMenuSaveData { #ifdef WIDE u8 wideMode: 1; #endif - -#if MULTILANG - u8 language: 2; -#define SUBTRAHEND 8 -#else -#define SUBTRAHEND 6 +#ifdef MULTILANG + u8 language: 3; #endif - u8 firstBoot; - #ifdef PUPPYCAM +#ifdef PUPPYCAM + u8 firstBoot; struct gPuppyOptions saveOptions; - #endif +#endif struct SaveBlockSignature signature; }; @@ -197,17 +193,10 @@ void disable_warp_checkpoint(void); void check_if_should_set_warp_checkpoint(struct WarpNode *warpNode); s32 check_warp_checkpoint(struct WarpNode *warpNode); -#if MULTILANG -enum EuLanguages { - LANGUAGE_ENGLISH, - LANGUAGE_FRENCH, - LANGUAGE_GERMAN -}; - -void eu_set_language(u16 language); -u32 eu_get_language(void); -#else -#define LANGUAGE_ENGLISH 0 +#ifdef MULTILANG +void multilang_set_language(u32 language); +u32 multilang_get_language(void); +u32 get_language_index(u32 language); #endif #endif // SAVE_FILE_H diff --git a/src/game/segment2.h b/src/game/segment2.h index 239e21395..006e5a895 100644 --- a/src/game/segment2.h +++ b/src/game/segment2.h @@ -3,6 +3,7 @@ #include #include +#include "ingame_menu.h" extern void *puppyprint_font_lut[]; extern void *puppyprint_kerning_lut[][82]; @@ -45,14 +46,19 @@ extern Gfx dl_paintings_env_mapped_begin[]; extern Gfx dl_paintings_env_mapped_end[]; extern s16 seg2_painting_triangle_mesh[]; extern s16 seg2_painting_mesh_neighbor_tris[]; -extern Texture *main_hud_lut[58]; +extern struct AsciiCharLUTEntry main_hud_lut[]; +extern struct Utf8LUT main_hud_utf8_lut; +extern Texture texture_hud_char_umlaut[]; extern Gfx dl_hud_img_load_tex_block[]; extern Gfx dl_hud_img_begin[]; extern Gfx dl_hud_img_end[]; -extern void *main_font_lut[]; +extern struct DiacriticLUTEntry main_font_diacritic_lut[]; +extern struct AsciiCharLUTEntry main_font_lut[]; +extern struct Utf8LUT main_font_utf8_lut; extern Gfx dl_ia_text_tex_settings[]; +extern Gfx dl_ia_text_tex_settings_packed[]; extern Gfx dl_rgba16_load_tex_block[]; -extern void *main_credits_font_lut[]; +extern struct AsciiCharLUTEntry main_credits_font_lut[]; extern Texture *main_hud_camera_lut[6]; extern Gfx dl_shade_screen_begin[]; extern Gfx dl_shade_screen_end[]; diff --git a/src/game/segment7.h b/src/game/segment7.h index 72dccc3d5..b93dd8e62 100644 --- a/src/game/segment7.h +++ b/src/game/segment7.h @@ -5,28 +5,9 @@ #include // from main menu segment 7 -extern Gfx dl_menu_idle_hand[]; -extern Gfx dl_menu_grabbing_hand[]; -extern Texture menu_hud_lut[]; -extern Texture menu_font_lut[]; -extern Gfx dl_menu_ia8_text_begin[]; -extern Gfx dl_menu_ia8_text_end[]; -extern Gfx dl_menu_rgba16_wood_course[]; -#ifdef VERSION_EU -extern Gfx dl_menu_rgba16_wood_course_end[]; -extern Gfx dl_menu_texture_course_upper[]; -extern Gfx dl_menu_texture_niveau_upper[]; -extern Gfx dl_menu_texture_kurs_upper[]; +#include "levels/menu/header.h" -extern const Gfx eu_course_strings_en_table[]; -extern const Gfx eu_course_strings_fr_table[]; -extern const Gfx eu_course_strings_de_table[]; -#endif - -// from intro_segment7 -extern Gfx *intro_seg7_dl_main_logo; -extern Gfx *intro_seg7_dl_copyright_trademark; -extern f32 intro_seg7_table_scale_1[]; -extern f32 intro_seg7_table_scale_2[]; +// from intro segment 7 +#include "levels/intro/header.h" #endif // SEGMENT7_H diff --git a/src/menu/file_select.c b/src/menu/file_select.c index f3edc68a0..18e36dd50 100644 --- a/src/menu/file_select.c +++ b/src/menu/file_select.c @@ -20,16 +20,6 @@ #include "game/spawn_object.h" #include "game/rumble_init.h" #include "sm64.h" -#include "text_strings.h" - -#include "eu_translation.h" -#if MULTILANG -#undef LANGUAGE_FUNCTION -#define LANGUAGE_FUNCTION sLanguageMode -s8 sLanguageMode = LANGUAGE_ENGLISH; -#endif - -extern void *languageTable[][3]; /** * @file file_select.c @@ -38,138 +28,79 @@ extern void *languageTable[][3]; * special menu messages and phases, button states and button clicked checks. */ -// The current sound mode is automatically centered on US and Shindou. -s16 sSoundTextX; - // Amount of main menu buttons defined in the code called by spawn_object_rel_with_rot. // See file_select.h for the names in MenuButtonTypes. -struct Object *sMainMenuButtons[MENU_BUTTON_OPTION_MAX]; +static struct Object *sMainMenuButtons[MENU_BUTTON_OPTION_MAX]; // Used to defined yes/no fade colors after a file is selected in the erase menu. // sYesNoColor[0]: YES | sYesNoColor[1]: NO -u8 sYesNoColor[2]; +static u8 sYesNoColor[2]; // The button that is selected when it is clicked. -s8 sSelectedButtonID = MENU_BUTTON_NONE; +static s8 sSelectedButtonID = MENU_BUTTON_NONE; // Whether we are on the main menu or one of the submenus. -s8 sCurrentMenuLevel = MENU_LAYER_MAIN; - -// Used for text opacifying. If it is below 250, it is constantly incremented. -u8 sTextBaseAlpha = 0; +static s8 sCurrentMenuLevel = MENU_LAYER_MAIN; // 2D position of the cursor on the screen. // sCursorPos[0]: X | sCursorPos[1]: Y -f32 sCursorPos[] = {0, 0}; +static f32 sCursorPos[] = {0, 0}; // Determines which graphic to use for the cursor. -s16 sCursorClickingTimer = 0; +static s16 sCursorClickingTimer = 0; // Equal to sCursorPos if the cursor gets clicked, {-10000, -10000} otherwise. -s16 sClickPos[] = {-10000, -10000}; +static s16 sClickPos[] = {-10000, -10000}; // Used for determining which file has been selected during copying and erasing. -s8 sSelectedFileIndex = -1; +static s8 sSelectedFileIndex = -1; // Whether to fade out text or not. -s8 sFadeOutText = FALSE; +static s8 sFadeOutText = FALSE; // The message currently being displayed at the top of a menu. -s8 sStatusMessageID = 0; +static s8 sStatusMessageID = 0; // Used for text fading. The alpha value of text is calculated as -// sTextBaseAlpha - sTextFadeAlpha. -u8 sTextFadeAlpha = 0; +// gDialogTextAlpha - sTextFadeAlpha. +static u8 sTextFadeAlpha = 0; // File select timer that keeps counting until it reaches 1000. // Used to prevent buttons from being clickable as soon as a menu loads. // Gets reset when you click an empty save, existing saves in copy and erase menus // and when you click yes/no in the erase confirmation prompt. -s16 sMainMenuTimer = 0; +static s16 sMainMenuTimer = 0; -// Sound mode menu buttonID +// Sound mode menu buttonID, has different values compared to gSoundMode in audio. +// 0: gSoundMode = 0 (Stereo) | 1: gSoundMode = 3 (Mono) | 2: gSoundMode = 1 (Headset) s8 sSoundMode = 0; // Active language for EU arrays // 0: English | 1: French | 2: German // Tracks which button will be pressed in the erase confirmation prompt (yes/no). -s8 sEraseYesNoHoverState = MENU_ERASE_HOVER_NONE; +static s8 sEraseYesNoHoverState = MENU_ERASE_HOVER_NONE; // Used for the copy menu, defines if the game as all 4 save slots with data. // if TRUE, it doesn't allow copying more files. -s8 sAllFilesExist = FALSE; +static s8 sAllFilesExist = FALSE; // Defines the value of the save slot selected in the menu. // Mario A: 1 | Mario B: 2 | Mario C: 3 | Mario D: 4 -s8 sSelectedFileNum = 0; +static s8 sSelectedFileNum = 0; // Which coin score mode to use when scoring files. 0 for local // coin high score, 1 for high score across all files. -s8 sScoreFileCoinScoreMode = 0; +static s8 sScoreFileCoinScoreMode = 0; -// In EU, if no save file exists, open the language menu so the user can find it. +#ifdef MULTILANG +// Index of the selected language in the above array. +static s8 sSelectedLanguageIndex = LANGUAGE_ENGLISH; -unsigned char textReturn[] = { TEXT_RETURN }; - -unsigned char textViewScore[] = { TEXT_CHECK_SCORE }; - -unsigned char textCopyFileButton[] = { TEXT_COPY_FILE_BUTTON }; - -unsigned char textEraseFileButton[] = { TEXT_ERASE_FILE_BUTTON }; - -#ifdef ENABLE_STEREO_HEADSET_EFFECTS -unsigned char textSoundModes[][8] = { { TEXT_STEREO }, { TEXT_MONO }, { TEXT_HEADSET } }; -#else -unsigned char textSoundModes[][8] = { { TEXT_STEREO }, { TEXT_MONO } }; +// Whether to open the language menu when the game is booted. +static s8 sOpenLangSettings = FALSE; #endif -#if MULTILANG -unsigned char textLanguageSelect[][17] = { { TEXT_LANGUAGE_SELECT } }; -#endif - -unsigned char textSoundSelect[] = { TEXT_SOUND_SELECT }; - -unsigned char textMarioA[] = { TEXT_FILE_MARIO_A }; -unsigned char textMarioB[] = { TEXT_FILE_MARIO_B }; -unsigned char textMarioC[] = { TEXT_FILE_MARIO_C }; -unsigned char textMarioD[] = { TEXT_FILE_MARIO_D }; - -unsigned char textNew[] = { TEXT_NEW }; -unsigned char starIcon[] = { GLYPH_STAR, GLYPH_SPACE }; -unsigned char xIcon[] = { GLYPH_MULTIPLY, GLYPH_SPACE }; - -unsigned char textSelectFile[] = { TEXT_SELECT_FILE }; - -unsigned char textScore[] = { TEXT_SCORE }; - -unsigned char textCopy[] = { TEXT_COPY }; - -unsigned char textErase[] = { TEXT_ERASE }; - -unsigned char textLanguage[][9] = {{ TEXT_ENGLISH }, { TEXT_FRENCH }, { TEXT_GERMAN }}; - -unsigned char textCheckFile[] = { TEXT_CHECK_FILE }; - -unsigned char textNoSavedDataExists[] = { TEXT_NO_SAVED_DATA_EXISTS }; - -unsigned char textCopyFile[] = { TEXT_COPY_FILE }; - -unsigned char textCopyItToWhere[] = { TEXT_COPY_IT_TO_WHERE }; - -unsigned char textNoSavedDataExistsCopy[] = { TEXT_NO_SAVED_DATA_EXISTS }; - -unsigned char textCopyCompleted[] = { TEXT_COPYING_COMPLETED }; - -unsigned char textSavedDataExists[] = { TEXT_SAVED_DATA_EXISTS }; - -unsigned char textNoFileToCopyFrom[] = { TEXT_NO_FILE_TO_COPY_FROM }; - -unsigned char textYes[] = { TEXT_YES }; - -unsigned char textNo[] = { TEXT_NO }; - - /** * Yellow Background Menu Initial Action * Rotates the background at 180 grades and it's scale. @@ -394,7 +325,7 @@ void bhv_menu_button_loop(void) { if (sCurrentMenuLevel == MENU_LAYER_SUBMENU) { bhv_menu_button_growing_from_submenu(gCurrentObject); // Only used for score files } - sTextBaseAlpha = 0; + gDialogTextAlpha = 0; sCursorClickingTimer = 4; break; case MENU_BUTTON_STATE_FULLSCREEN: // Menu state @@ -406,7 +337,7 @@ void bhv_menu_button_loop(void) { if (sCurrentMenuLevel == MENU_LAYER_SUBMENU) { bhv_menu_button_shrinking_to_submenu(gCurrentObject); // Only used for score files } - sTextBaseAlpha = 0; + gDialogTextAlpha = 0; sCursorClickingTimer = 4; break; case MENU_BUTTON_STATE_ZOOM_IN_OUT: @@ -781,7 +712,7 @@ void check_erase_menu_clicked_buttons(struct Object *eraseButton) { #undef ACTION_TIMER -#if MULTILANG +#ifdef MULTILANG #define SOUND_BUTTON_Y 388 #else #define SOUND_BUTTON_Y 0 @@ -815,32 +746,17 @@ void render_sound_mode_menu_buttons(struct Object *soundModeButton) { sMainMenuButtons[MENU_BUTTON_MONO]->oMenuButtonScale = MENU_BUTTON_SCALE; #endif -#if MULTILANG - // English option button - sMainMenuButtons[MENU_BUTTON_LANGUAGE_ENGLISH] = spawn_object_rel_with_rot( - soundModeButton, MODEL_MAIN_MENU_GENERIC_BUTTON, bhvMenuButton, 533, -111, -100, 0x0, -0x8000, 0x0); - sMainMenuButtons[MENU_BUTTON_LANGUAGE_ENGLISH]->oMenuButtonScale = MENU_BUTTON_SCALE; - // French option button - sMainMenuButtons[MENU_BUTTON_LANGUAGE_FRENCH] = spawn_object_rel_with_rot( - soundModeButton, MODEL_MAIN_MENU_GENERIC_BUTTON, bhvMenuButton, 0, -111, -100, 0x0, -0x8000, 0x0); - sMainMenuButtons[MENU_BUTTON_LANGUAGE_FRENCH]->oMenuButtonScale = MENU_BUTTON_SCALE; - // German option button - sMainMenuButtons[MENU_BUTTON_LANGUAGE_GERMAN] = spawn_object_rel_with_rot( - soundModeButton, MODEL_MAIN_MENU_GENERIC_BUTTON, bhvMenuButton, -533, -111, -100, 0x0, -0x8000, 0x0); - sMainMenuButtons[MENU_BUTTON_LANGUAGE_GERMAN]->oMenuButtonScale = MENU_BUTTON_SCALE; - +#ifdef MULTILANG // Return button - sMainMenuButtons[MENU_BUTTON_LANGUAGE_RETURN] = spawn_object_rel_with_rot( + sMainMenuButtons[MENU_BUTTON_OPTION_RETURN] = spawn_object_rel_with_rot( soundModeButton, MODEL_MAIN_MENU_YELLOW_FILE_BUTTON, bhvMenuButton, 0, -533, -100, 0x0, -0x8000, 0x0); - sMainMenuButtons[MENU_BUTTON_LANGUAGE_RETURN]->oMenuButtonScale = MENU_BUTTON_SCALE; + sMainMenuButtons[MENU_BUTTON_OPTION_RETURN]->oMenuButtonScale = MENU_BUTTON_SCALE; #else // Zoom in current selection sMainMenuButtons[MENU_BUTTON_SOUND_OPTION_MIN + sSoundMode]->oMenuButtonState = MENU_BUTTON_STATE_ZOOM_IN; #endif } -#undef SOUND_BUTTON_Y - /** * In the sound mode menu, checks if a button was clicked to change sound mode & button state. */ @@ -862,28 +778,17 @@ void check_sound_mode_menu_clicked_buttons(struct Object *soundModeButton) { queue_rumble_data(5, 80); #endif sMainMenuButtons[buttonID]->oMenuButtonState = MENU_BUTTON_STATE_ZOOM_IN_OUT; -#if !MULTILANG - // Sound menu buttons don't return to Main Menu in EU - // because they don't have a case in bhv_menu_button_manager_loop +#ifndef MULTILANG + // Sound menu buttons don't return to Main Menu with multilang enabled sSelectedButtonID = buttonID; #endif sSoundMode = buttonID - MENU_BUTTON_SOUND_OPTION_MIN; save_file_set_sound_mode(sSoundMode); } } -#if MULTILANG - // If language mode button clicked, select it and change language - if (buttonID == MENU_BUTTON_LANGUAGE_ENGLISH || buttonID == MENU_BUTTON_LANGUAGE_FRENCH - || buttonID == MENU_BUTTON_LANGUAGE_GERMAN) { - if (soundModeButton->oMenuButtonActionPhase == SOUND_MODE_PHASE_MAIN) { - play_sound(SOUND_MENU_CLICK_FILE_SELECT, gGlobalSoundSource); - sMainMenuButtons[buttonID]->oMenuButtonState = MENU_BUTTON_STATE_ZOOM_IN_OUT; - sLanguageMode = buttonID - MENU_BUTTON_LANGUAGE_MIN; - eu_set_language(sLanguageMode); - } - } +#ifdef MULTILANG // If neither of the buttons above are pressed, return to main menu - if (buttonID == MENU_BUTTON_LANGUAGE_RETURN) { + if (buttonID == MENU_BUTTON_OPTION_RETURN) { play_sound(SOUND_MENU_CLICK_FILE_SELECT, gGlobalSoundSource); sMainMenuButtons[buttonID]->oMenuButtonState = MENU_BUTTON_STATE_ZOOM_IN_OUT; sSelectedButtonID = buttonID; @@ -1041,11 +946,9 @@ void bhv_menu_button_manager_init(void) { bhvMenuButton, 6400, -3500, 0, 0x0, 0x0, 0x0); sMainMenuButtons[MENU_BUTTON_SOUND_MODE]->oMenuButtonScale = 1.0f; - sTextBaseAlpha = 0; + gDialogTextAlpha = 0; } -#define SAVE_FILE_SOUND SOUND_MENU_STAR_SOUND_OKEY_DOKEY - /** * In the main menu, check if a button was clicked to play it's button growing state. * Also play a sound and/or render buttons depending of the button ID selected. @@ -1074,13 +977,22 @@ void check_main_menu_clicked_buttons(void) { } } +#ifdef MULTILANG + // Open Options Menu if sOpenLangSettings is TRUE (It's TRUE when there's no saves) + if (sOpenLangSettings && (sMainMenuTimer >= 5)) { + sMainMenuButtons[MENU_BUTTON_SOUND_MODE]->oMenuButtonState = MENU_BUTTON_STATE_GROWING; + sSelectedButtonID = MENU_BUTTON_SOUND_MODE; + sOpenLangSettings = FALSE; + } +#endif + // Play sound of the save file clicked switch (sSelectedButtonID) { case MENU_BUTTON_PLAY_FILE_A: case MENU_BUTTON_PLAY_FILE_B: case MENU_BUTTON_PLAY_FILE_C: case MENU_BUTTON_PLAY_FILE_D: - play_sound(SAVE_FILE_SOUND, gGlobalSoundSource); + play_sound(SOUND_MENU_STAR_SOUND_OKEY_DOKEY, gGlobalSoundSource); #if ENABLE_RUMBLE queue_rumble_data(60, 70); queue_rumble_decay(1); @@ -1106,8 +1018,6 @@ void check_main_menu_clicked_buttons(void) { } } -#undef SAVE_FILE_SOUND - /** * Menu Buttons Menu Manager Loop Action * Calls a menu function depending of the button chosen. @@ -1156,8 +1066,8 @@ void bhv_menu_button_manager_loop(void) { case MENU_BUTTON_SOUND_MODE: check_sound_mode_menu_clicked_buttons(sMainMenuButtons[MENU_BUTTON_SOUND_MODE]); break; -#if MULTILANG - case MENU_BUTTON_LANGUAGE_RETURN: return_to_main_menu(MENU_BUTTON_SOUND_MODE, sMainMenuButtons[MENU_BUTTON_LANGUAGE_RETURN]); break; +#ifdef MULTILANG + case MENU_BUTTON_OPTION_RETURN: return_to_main_menu(MENU_BUTTON_SOUND_MODE, sMainMenuButtons[MENU_BUTTON_OPTION_RETURN]); break; #endif // STEREO, MONO and HEADSET buttons are undefined so they can be selected without // exiting the Options menu, as a result they added a return button @@ -1247,12 +1157,12 @@ 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) - // Idle + if (sCursorClickingTimer == 0) { // Idle gSPDisplayList(gDisplayListHead++, dl_menu_idle_hand); - if (sCursorClickingTimer != 0) - // Grabbing + } + 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 @@ -1264,22 +1174,49 @@ void print_menu_cursor(void) { } /** - * Prints a hud string depending of the hud table list defined with text fade properties. + * Takes a number between 0 and 3 and formats the corresponding file letter A to D into a buffer. + * If the language is set to Japanese, the letter is written in full-width digits. */ -void print_hud_lut_string_fade(s8 hudLUT, s16 x, s16 y, const unsigned char *text) { +void string_format_file_letter(char *buf, char *str, s32 fileIndex) { + char letterBuf[4]; +#ifdef ENABLE_JAPANESE + if (gInGameLanguage == LANGUAGE_JAPANESE) { + // The UTF-8 encoding of "A" is 0xEF, 0xBC, 0xA1 + letterBuf[0] = 0xEF; + letterBuf[1] = 0xBC; + letterBuf[2] = 0xA1 + fileIndex; + letterBuf[3] = '\0'; + sprintf(buf, str, letterBuf); + return; + } +#endif + + letterBuf[0] = 'A' + fileIndex; + letterBuf[1] = '\0'; + sprintf(buf, str, letterBuf); +} + +/** + * Prints a hud string with text fade properties. + */ +void print_hud_lut_string_fade(s16 x, s16 y, char *text, u32 alignment) { gSPDisplayList(gDisplayListHead++, dl_rgba16_text_begin); - gDPSetEnvColor(gDisplayListHead++, 255, 255, 255, sTextBaseAlpha - sTextFadeAlpha); - print_hud_lut_string(hudLUT, x, y, text); + gDialogTextAlpha -= sTextFadeAlpha; + gDPSetEnvColor(gDisplayListHead++, 255, 255, 255, gDialogTextAlpha); + print_hud_lut_string_aligned(x, y, text, alignment); + gDialogTextAlpha += sTextFadeAlpha; gSPDisplayList(gDisplayListHead++, dl_rgba16_text_end); } /** * 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, char *text, u32 alignment) { gSPDisplayList(gDisplayListHead++, dl_ia_text_begin); - gDPSetEnvColor(gDisplayListHead++, 255, 255, 255, sTextBaseAlpha - sTextFadeAlpha); - print_generic_string(x, y, text); + gDialogTextAlpha -= sTextFadeAlpha; + set_text_color(255, 255, 255); + print_generic_string_aligned(x, y, text, alignment); + gDialogTextAlpha += sTextFadeAlpha; gSPDisplayList(gDisplayListHead++, dl_ia_text_end); } @@ -1305,39 +1242,126 @@ s32 update_text_fade_out(void) { * Prints the amount of stars of a save file. * If a save doesn't exist, print "NEW" instead. */ +LangArray textNew = DEFINE_LANGUAGE_ARRAY( + "NEW", + "VIDE", + "FREI", + "NEW", + "NUEVO"); + void print_save_file_star_count(s8 fileIndex, s16 x, s16 y) { - u8 starCountText[4]; - s8 offset = 0; + char starCountText[10]; if (save_file_exists(fileIndex)) { s16 starCount = save_file_get_total_star_count(fileIndex, COURSE_NUM_TO_INDEX(COURSE_MIN), COURSE_NUM_TO_INDEX(COURSE_MAX)); - // Print star icon - print_hud_lut_string(HUD_LUT_GLOBAL, x, y, starIcon); - // If star count is less than 100, print x icon and move - // the star count text one digit to the right. + if (starCount < 100) { - print_hud_lut_string(HUD_LUT_GLOBAL, x + 16, y, xIcon); - offset = 16; + sprintf(starCountText, "★×%d", starCount); + } else { + sprintf(starCountText, "★%d", starCount); } - // Print star count - int_to_str(starCount, starCountText); - print_hud_lut_string(HUD_LUT_GLOBAL, x + offset + 16, y, starCountText); + print_hud_lut_string(x, y, starCountText); } else { // Print "new" text - print_hud_lut_string(HUD_LUT_GLOBAL, x, y, LANGUAGE_ARRAY(textNew)); + print_hud_lut_string(x, y, LANG_ARRAY(textNew)); } } -#define SELECT_FILE_X 93 -#define SCORE_X 52 -#define COPY_X 117 -#define ERASE_X 177 -#define SAVEFILE_X1 92 -#define SAVEFILE_X2 209 -#define MARIOTEXT_X1 92 -#define MARIOTEXT_X2 207 +LangArray textSelectFile = DEFINE_LANGUAGE_ARRAY( + "SELECT FILE", + "CHOISIR FICHIER", + "WÄHLE SPIEL", + "ファイルセレクト", + "ELIGE ARCHIVO"); + +LangArray textScore = DEFINE_LANGUAGE_ARRAY( + "SCORE", + "SCORE", + "LEISTUNG", + "スコア", + "RÉCORDS"); + +LangArray textCopy = DEFINE_LANGUAGE_ARRAY( + "COPY", + "COPIER", + "KOPIEREN", + "コピー", + "COPIAR"); + +LangArray textErase = DEFINE_LANGUAGE_ARRAY( + "ERASE", + "EFFACER", + "LÖSCHEN", + "けす", + "BORRAR"); + +LangArray textMarioA = DEFINE_LANGUAGE_ARRAY( + "MARIO A", + "MARIO A", + "MARIO A", + "マリオA", + "MARIO A"); + +LangArray textMarioB = DEFINE_LANGUAGE_ARRAY( + "MARIO B", + "MARIO B", + "MARIO B", + "マリオB", + "MARIO B"); + +LangArray textMarioC = DEFINE_LANGUAGE_ARRAY( + "MARIO C", + "MARIO C", + "MARIO C", + "マリオC", + "MARIO C"); + +LangArray textMarioD = DEFINE_LANGUAGE_ARRAY( + "MARIO D", + "MARIO D", + "MARIO D", + "マリオD", + "MARIO D"); + +LangArray textSoundModeStereo = DEFINE_LANGUAGE_ARRAY( + "STEREO", + "STÉRÉO", + "STEREO", + "ステレオ", + "ESTÉREO"); + +LangArray textSoundModeMono = DEFINE_LANGUAGE_ARRAY( + "MONO", + "MONO", + "MONO", + "モノラル", + "MONO"); + +LangArray textSoundModeHeadset = DEFINE_LANGUAGE_ARRAY( + "HEADSET", + "CASQUE", + "PHONES", + "ヘッドホン", + "CASCOS"); + +LangArray *textSoundModes[] = { + &textSoundModeStereo, + &textSoundModeMono, +#ifdef ENABLE_STEREO_HEADSET_EFFECTS + &textSoundModeHeadset, +#endif +}; + +#ifdef MULTILANG +LangArray textOption = DEFINE_LANGUAGE_ARRAY( + "OPTION", + "OPTION", + "OPTIONEN", + "オプション", + "OPCIONES"); +#endif /** * Prints main menu strings that shows on the yellow background menu screen. @@ -1349,36 +1373,49 @@ void print_save_file_star_count(s8 fileIndex, s16 x, s16 y) { void print_main_menu_strings(void) { // Print "SELECT FILE" text gSPDisplayList(gDisplayListHead++, dl_rgba16_text_begin); - gDPSetEnvColor(gDisplayListHead++, 255, 255, 255, sTextBaseAlpha); - print_hud_lut_string(HUD_LUT_DIFF, SELECT_FILE_X, 35, textSelectFile); + gDPSetEnvColor(gDisplayListHead++, 255, 255, 255, gDialogTextAlpha); + print_hud_lut_string_aligned(SCREEN_CENTER_X, 35, LANG_ARRAY(textSelectFile), TEXT_ALIGN_CENTER); // Print file star counts - print_save_file_star_count(SAVE_FILE_A, SAVEFILE_X1, 78); - print_save_file_star_count(SAVE_FILE_B, SAVEFILE_X2, 78); - print_save_file_star_count(SAVE_FILE_C, SAVEFILE_X1, 118); - print_save_file_star_count(SAVE_FILE_D, SAVEFILE_X2, 118); + print_save_file_star_count(SAVE_FILE_A, 92, 78); + print_save_file_star_count(SAVE_FILE_B, 209, 78); + print_save_file_star_count(SAVE_FILE_C, 92, 118); + print_save_file_star_count(SAVE_FILE_D, 209, 118); gSPDisplayList(gDisplayListHead++, dl_rgba16_text_end); // Print menu names gSPDisplayList(gDisplayListHead++, dl_ia_text_begin); - gDPSetEnvColor(gDisplayListHead++, 255, 255, 255, sTextBaseAlpha); - print_generic_string(SCORE_X, 39, textScore); - print_generic_string(COPY_X, 39, textCopy); - print_generic_string(ERASE_X, 39, textErase); - sSoundTextX = get_str_x_pos_from_center(254, textSoundModes[sSoundMode], 10.0f); - print_generic_string(sSoundTextX, 39, textSoundModes[sSoundMode]); + set_text_color(255, 255, 255); + print_generic_string_aligned(67, 39, LANG_ARRAY(textScore), TEXT_ALIGN_CENTER); + print_generic_string_aligned(130, 39, LANG_ARRAY(textCopy), TEXT_ALIGN_CENTER); + print_generic_string_aligned(191, 39, LANG_ARRAY(textErase), TEXT_ALIGN_CENTER); +#ifdef MULTILANG + print_generic_string_aligned(253, 39, LANG_ARRAY(textOption), TEXT_ALIGN_CENTER); +#else + print_generic_string_aligned(253, 39, LANG_ARRAY(*textSoundModes[sSoundMode]), TEXT_ALIGN_CENTER); +#endif gSPDisplayList(gDisplayListHead++, dl_ia_text_end); // Print file names gSPDisplayList(gDisplayListHead++, dl_menu_ia8_text_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); + gDPSetEnvColor(gDisplayListHead++, 255, 255, 255, gDialogTextAlpha); + print_menu_generic_string(92, 65, LANG_ARRAY(textMarioA)); + print_menu_generic_string(207, 65, LANG_ARRAY(textMarioB)); + print_menu_generic_string(92, 105, LANG_ARRAY(textMarioC)); + print_menu_generic_string(207, 105, LANG_ARRAY(textMarioD)); gSPDisplayList(gDisplayListHead++, dl_menu_ia8_text_end); } +LangArray textCheckFile = DEFINE_LANGUAGE_ARRAY( + "CHECK FILE", + "VOIR SCORE", + "VON WELCHEM SPIEL", + "どのスコアをみる?", + "VER ARCHIVO"); -#define CHECK_FILE_X 95 -#define NOSAVE_DATA_X1 99 +LangArray textNoSavedDataExists = DEFINE_LANGUAGE_ARRAY( + "NO SAVED DATA EXISTS", + "AUCUNE SAUVEGARDE DISPONIBLE", + "KEIN SPIEL VORHANDEN", + "ファイルにデータがありません", + "NO HAY DATOS GUARDADOS"); /** * Defines IDs for the top message of the score menu and displays it if the ID is called in messageID. @@ -1387,20 +1424,41 @@ void score_menu_display_message(s8 messageID) { switch (messageID) { case SCORE_MSG_CHECK_FILE: - print_hud_lut_string_fade(HUD_LUT_DIFF, CHECK_FILE_X, 35, LANGUAGE_ARRAY(textCheckFile)); + print_hud_lut_string_fade(SCREEN_CENTER_X, 35, LANG_ARRAY(textCheckFile), TEXT_ALIGN_CENTER); break; case SCORE_MSG_NOSAVE_DATA: - print_generic_string_fade(NOSAVE_DATA_X1, 190, LANGUAGE_ARRAY(textNoSavedDataExists)); + print_generic_string_fade(SCREEN_CENTER_X, 190, LANG_ARRAY(textNoSavedDataExists), TEXT_ALIGN_CENTER); break; } } -#define RETURN_X 44 -#define COPYFILE_X1 135 -#define ERASEFILE_X1 231 +#define SUBMENU_LEFT_BUTTON_X 62 +#define SUBMENU_MIDDLE_BUTTON_X 160 +#define SUBMENU_RIGHT_BUTTON_X 258 #define FADEOUT_TIMER 20 +LangArray textReturn = DEFINE_LANGUAGE_ARRAY( + "RETURN", + "RETOUR", + "ZURÜCK", + "もどる", + "VOLVER"); + +LangArray textCopyFileButton = DEFINE_LANGUAGE_ARRAY( + "COPY FILE", + "COPIER", + "KOPIEREN", + "ファイルコピー", + "COPIAR ARCHIVO"); + +LangArray textEraseFileButton = DEFINE_LANGUAGE_ARRAY( + "ERASE FILE", + "EFFACER", + "LÖSCHEN", + "ファイルけす", + "BORRAR ARCHIVO"); + /** * Prints score menu strings that shows on the green background menu screen. */ @@ -1422,7 +1480,7 @@ void print_score_menu_strings(void) { // Print file star counts gSPDisplayList(gDisplayListHead++, dl_rgba16_text_begin); - gDPSetEnvColor(gDisplayListHead++, 255, 255, 255, sTextBaseAlpha); + gDPSetEnvColor(gDisplayListHead++, 255, 255, 255, gDialogTextAlpha); print_save_file_star_count(SAVE_FILE_A, 90, 76); print_save_file_star_count(SAVE_FILE_B, 211, 76); print_save_file_star_count(SAVE_FILE_C, 90, 119); @@ -1431,28 +1489,56 @@ void print_score_menu_strings(void) { // Print menu names gSPDisplayList(gDisplayListHead++, dl_ia_text_begin); - gDPSetEnvColor(gDisplayListHead++, 255, 255, 255, sTextBaseAlpha); - print_generic_string(RETURN_X, 35, LANGUAGE_ARRAY(textReturn)); - print_generic_string(COPYFILE_X1, 35, LANGUAGE_ARRAY(textCopyFileButton)); - print_generic_string(ERASEFILE_X1, 35, LANGUAGE_ARRAY(textEraseFileButton)); + set_text_color(255, 255, 255); + print_generic_string_aligned(SUBMENU_LEFT_BUTTON_X, 35, LANG_ARRAY(textReturn), TEXT_ALIGN_CENTER); + print_generic_string_aligned(SUBMENU_MIDDLE_BUTTON_X, 35, LANG_ARRAY(textCopyFileButton), TEXT_ALIGN_CENTER); + print_generic_string_aligned(SUBMENU_RIGHT_BUTTON_X, 35, LANG_ARRAY(textEraseFileButton), TEXT_ALIGN_CENTER); gSPDisplayList(gDisplayListHead++, dl_ia_text_end); // Print file names gSPDisplayList(gDisplayListHead++, dl_menu_ia8_text_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); + gDPSetEnvColor(gDisplayListHead++, 255, 255, 255, gDialogTextAlpha); + print_menu_generic_string(89, 62, LANG_ARRAY(textMarioA)); + print_menu_generic_string(211, 62, LANG_ARRAY(textMarioB)); + print_menu_generic_string(89, 105, LANG_ARRAY(textMarioC)); + print_menu_generic_string(211, 105, LANG_ARRAY(textMarioD)); gSPDisplayList(gDisplayListHead++, dl_menu_ia8_text_end); } -#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 +LangArray textCopyFile = DEFINE_LANGUAGE_ARRAY( + "COPY FILE", + "COPIER FICHIER", + "SPIEL KOPIEREN", + "ファイルコピーする", + "COPIAR ARCHIVO"); + +LangArray textCopyItToWhere = DEFINE_LANGUAGE_ARRAY( + "COPY IT TO WHERE?", + "COPIER SUR?", + "WOHIN KOPIEREN?", + "どこにコピーしますか?", + "¿COPIARLO A DÓNDE?"); + +LangArray textCopyCompleted = DEFINE_LANGUAGE_ARRAY( + "COPYING COMPLETED", + "COPIE ACHEVEÉ", + "SPIEL KOPIERT", + "コピーおわりました", + "COPIA COMPLETADA"); + +LangArray textSavedDataExists = DEFINE_LANGUAGE_ARRAY( + "SAVED DATA EXISTS", + "SAVEGARDE EXISTANTE", + "BEREITS BELEGT", + "ファイルにデータがはいってます", + "YA EXISTEN DATOS GUARDADOS"); + +LangArray textNoFileToCopyFrom = DEFINE_LANGUAGE_ARRAY( + "NO EMPTY FILE", + "AUCUN FICHIER VIDE", + "KEIN PLATZ VORHANDEN", + "からのファイルがありません", + "NO HAY NINGÚN ARCHIVO VACÍO"); /** * Defines IDs for the top message of the copy menu and displays it if the ID is called in messageID. @@ -1462,22 +1548,22 @@ void copy_menu_display_message(s8 messageID) { switch (messageID) { case COPY_MSG_MAIN_TEXT: if (sAllFilesExist) { - print_generic_string_fade(NOFILE_COPY_X, 190, LANGUAGE_ARRAY(textNoFileToCopyFrom)); + print_generic_string_fade(SCREEN_CENTER_X, 190, LANG_ARRAY(textNoFileToCopyFrom), TEXT_ALIGN_CENTER); } else { - print_hud_lut_string_fade(HUD_LUT_DIFF, COPY_FILE_X, 35, LANGUAGE_ARRAY(textCopyFile)); + print_hud_lut_string_fade(SCREEN_CENTER_X, 35, LANG_ARRAY(textCopyFile), TEXT_ALIGN_CENTER); } break; case COPY_MSG_COPY_WHERE: - print_generic_string_fade(COPYIT_WHERE_X, 190, LANGUAGE_ARRAY(textCopyItToWhere)); + print_generic_string_fade(SCREEN_CENTER_X, 190, LANG_ARRAY(textCopyItToWhere), TEXT_ALIGN_CENTER); break; case COPY_MSG_NOSAVE_EXISTS: - print_generic_string_fade(NOSAVE_DATA_X2, 190, textNoSavedDataExistsCopy); + print_generic_string_fade(SCREEN_CENTER_X, 190, LANG_ARRAY(textNoSavedDataExists), TEXT_ALIGN_CENTER); break; case COPY_MSG_COPY_COMPLETE: - print_generic_string_fade(COPYCOMPLETE_X, 190, LANGUAGE_ARRAY(textCopyCompleted)); + print_generic_string_fade(SCREEN_CENTER_X, 190, LANG_ARRAY(textCopyCompleted), TEXT_ALIGN_CENTER); break; case COPY_MSG_SAVE_EXISTS: - print_generic_string_fade(SAVE_EXISTS_X1, 190, LANGUAGE_ARRAY(textSavedDataExists)); + print_generic_string_fade(SCREEN_CENTER_X, 190, LANG_ARRAY(textSavedDataExists), TEXT_ALIGN_CENTER); break; } } @@ -1527,8 +1613,12 @@ void copy_menu_update_message(void) { } } -#define VIEWSCORE_X1 128 -#define ERASEFILE_X2 230 +LangArray textViewScore = DEFINE_LANGUAGE_ARRAY( + "CHECK SCORE", + "SCORE", + "LEISTUNG", + "スコアをみる", + "VER RÉCORDS"); /** * Prints copy menu strings that shows on the blue background menu screen. @@ -1541,7 +1631,7 @@ void print_copy_menu_strings(void) { copy_menu_display_message(sStatusMessageID); // Print file star counts gSPDisplayList(gDisplayListHead++, dl_rgba16_text_begin); - gDPSetEnvColor(gDisplayListHead++, 255, 255, 255, sTextBaseAlpha); + gDPSetEnvColor(gDisplayListHead++, 255, 255, 255, gDialogTextAlpha); print_save_file_star_count(SAVE_FILE_A, 90, 76); print_save_file_star_count(SAVE_FILE_B, 211, 76); print_save_file_star_count(SAVE_FILE_C, 90, 119); @@ -1549,29 +1639,34 @@ void print_copy_menu_strings(void) { gSPDisplayList(gDisplayListHead++, dl_rgba16_text_end); // Print menu names gSPDisplayList(gDisplayListHead++, dl_ia_text_begin); - gDPSetEnvColor(gDisplayListHead++, 255, 255, 255, sTextBaseAlpha); - print_generic_string(RETURN_X, 35, LANGUAGE_ARRAY(textReturn)); - print_generic_string(VIEWSCORE_X1, 35, LANGUAGE_ARRAY(textViewScore)); - print_generic_string(ERASEFILE_X2, 35, LANGUAGE_ARRAY(textEraseFileButton)); + set_text_color(255, 255, 255); + print_generic_string_aligned(SUBMENU_LEFT_BUTTON_X, 35, LANG_ARRAY(textReturn), TEXT_ALIGN_CENTER); + print_generic_string_aligned(SUBMENU_MIDDLE_BUTTON_X, 35, LANG_ARRAY(textViewScore), TEXT_ALIGN_CENTER); + print_generic_string_aligned(SUBMENU_RIGHT_BUTTON_X, 35, LANG_ARRAY(textEraseFileButton), TEXT_ALIGN_CENTER); gSPDisplayList(gDisplayListHead++, dl_ia_text_end); // Print file names gSPDisplayList(gDisplayListHead++, dl_menu_ia8_text_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); + gDPSetEnvColor(gDisplayListHead++, 255, 255, 255, gDialogTextAlpha); + print_menu_generic_string(89, 62, LANG_ARRAY(textMarioA)); + print_menu_generic_string(211, 62, LANG_ARRAY(textMarioB)); + print_menu_generic_string(89, 105, LANG_ARRAY(textMarioC)); + print_menu_generic_string(211, 105, LANG_ARRAY(textMarioD)); gSPDisplayList(gDisplayListHead++, dl_menu_ia8_text_end); } -#define CURSOR_X (x + 70) -#define MENU_ERASE_YES_MIN_X 140 -#define MENU_ERASE_YES_MAX_X 169 +LangArray textYes = DEFINE_LANGUAGE_ARRAY( + "YES", + "OUI", + "JA", + "はい", + "SÍ"); -#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 +LangArray textNo = DEFINE_LANGUAGE_ARRAY( + "NO", + "NON", + "NEIN", + "いいえ", + "NO"); /** * Prints the "YES NO" prompt and checks if one of the prompts are hovered to do it's functions. @@ -1579,17 +1674,17 @@ void print_copy_menu_strings(void) { void print_erase_menu_prompt(s16 x, s16 y) { s16 colorFade = gGlobalTimer << 12; - s16 cursorX = sCursorPos[0] + CURSOR_X; + s16 cursorX = sCursorPos[0] + x + 70.f; s16 cursorY = sCursorPos[1] + 120.0f; - 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) { + if (cursorX < 169 && cursorX >= 140 && + cursorY < 210 && cursorY >= 191) { // Fade "YES" string color but keep "NO" gray sYesNoColor[0] = sins(colorFade) * 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 < 218 && cursorX >= 189 + && cursorY < 210 && cursorY >= 191) { // Fade "NO" string color but keep "YES" gray sYesNoColor[0] = 150; sYesNoColor[1] = sins(colorFade) * 50.0f + 205.0f; @@ -1634,50 +1729,56 @@ 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)); - gDPSetEnvColor(gDisplayListHead++, sYesNoColor[1], sYesNoColor[1], sYesNoColor[1], sTextBaseAlpha); - print_generic_string(x + 98, y, LANGUAGE_ARRAY(textNo)); + set_text_color(sYesNoColor[0], sYesNoColor[0], sYesNoColor[0]); + print_generic_string(x + 56, y, LANG_ARRAY(textYes)); + set_text_color(sYesNoColor[1], sYesNoColor[1], sYesNoColor[1]); + print_generic_string(x + 98, y, LANG_ARRAY(textNo)); gSPDisplayList(gDisplayListHead++, dl_ia_text_end); } -// MARIO_ERASED_VAR is the value there the letter "A" is, it works like this: -// US and EU --- JP -// M a r i o A --- マ リ オ A -// 0 1 2 3 4 5 6 --- 0 1 2 3 -#define ERASE_FILE_X 98 -#define NOSAVE_DATA_X3 100 -#define MARIO_ERASED_VAR 6 -#define MARIO_ERASED_X 100 -#define SAVE_EXISTS_X2 100 +LangArray textEraseFile = DEFINE_LANGUAGE_ARRAY( + "ERASE FILE", + "EFFACER FICHIER", + "SPIEL LÖSCHEN", + "ファイルけす", + "BORRAR ARCHIVO"); + +LangArray textSure = DEFINE_LANGUAGE_ARRAY( + "SURE?", + "OK?", + "SICHER?", + "ほんと?", + "¿SEGURO?"); + +LangArray textMarioXJustErased = DEFINE_LANGUAGE_ARRAY( + "MARIO %s JUST ERASED", + "MARIO %s EFFACÉ", + "MARIO %s GELÖSCHT", + "マリオ%sをけしました", + "MARIO %s ELIMINADO"); /** * Defines IDs for the top message of the erase menu and displays it if the ID is called in messageID. */ void erase_menu_display_message(s8 messageID) { - 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 }; - + char str[50]; switch (messageID) { case ERASE_MSG_MAIN_TEXT: - print_hud_lut_string_fade(HUD_LUT_DIFF, ERASE_FILE_X, 35, LANGUAGE_ARRAY(textEraseFile)); + print_hud_lut_string_fade(SCREEN_CENTER_X, 35, LANG_ARRAY(textEraseFile), TEXT_ALIGN_CENTER); break; case ERASE_MSG_PROMPT: - print_generic_string_fade(90, 190, LANGUAGE_ARRAY(textSure)); + print_generic_string_fade(90, 190, LANG_ARRAY(textSure), TEXT_ALIGN_LEFT); print_erase_menu_prompt(90, 190); // YES NO, has functions for it too break; case ERASE_MSG_NOSAVE_EXISTS: - print_generic_string_fade(NOSAVE_DATA_X3, 190, LANGUAGE_ARRAY(textNoSavedDataExists)); + print_generic_string_fade(SCREEN_CENTER_X, 190, LANG_ARRAY(textNoSavedDataExists), TEXT_ALIGN_CENTER); break; case ERASE_MSG_MARIO_ERASED: - LANGUAGE_ARRAY(textMarioAJustErased)[MARIO_ERASED_VAR] = sSelectedFileIndex + 10; - print_generic_string_fade(MARIO_ERASED_X, 190, LANGUAGE_ARRAY(textMarioAJustErased)); + string_format_file_letter(str, LANG_ARRAY(textMarioXJustErased), sSelectedFileIndex); + print_generic_string_fade(SCREEN_CENTER_X, 190, str, TEXT_ALIGN_CENTER); break; case ERASE_MSG_SAVE_EXISTS: // unused - print_generic_string_fade(SAVE_EXISTS_X2, 190, LANGUAGE_ARRAY(textSavedDataExists)); + print_generic_string_fade(SCREEN_CENTER_X, 190, LANG_ARRAY(textSavedDataExists), TEXT_ALIGN_CENTER); break; } } @@ -1724,9 +1825,6 @@ void erase_menu_update_message(void) { } } -#define VIEWSCORE_X2 127 -#define COPYFILE_X2 233 - /** * Prints erase menu strings that shows on the red background menu screen. */ @@ -1740,7 +1838,7 @@ void print_erase_menu_strings(void) { // Print file star counts gSPDisplayList(gDisplayListHead++, dl_rgba16_text_begin); - gDPSetEnvColor(gDisplayListHead++, 255, 255, 255, sTextBaseAlpha); + gDPSetEnvColor(gDisplayListHead++, 255, 255, 255, gDialogTextAlpha); print_save_file_star_count(SAVE_FILE_A, 90, 76); print_save_file_star_count(SAVE_FILE_B, 211, 76); print_save_file_star_count(SAVE_FILE_C, 90, 119); @@ -1749,35 +1847,62 @@ void print_erase_menu_strings(void) { // Print menu names gSPDisplayList(gDisplayListHead++, dl_ia_text_begin); - gDPSetEnvColor(gDisplayListHead++, 255, 255, 255, sTextBaseAlpha); - - print_generic_string(RETURN_X, 35, textReturn); - print_generic_string(VIEWSCORE_X2, 35, textViewScore); - print_generic_string(COPYFILE_X2, 35, textCopyFileButton); + set_text_color(255, 255, 255); + print_generic_string_aligned(SUBMENU_LEFT_BUTTON_X, 35, LANG_ARRAY(textReturn), TEXT_ALIGN_CENTER); + print_generic_string_aligned(SUBMENU_MIDDLE_BUTTON_X, 35, LANG_ARRAY(textViewScore), TEXT_ALIGN_CENTER); + print_generic_string_aligned(SUBMENU_RIGHT_BUTTON_X, 35, LANG_ARRAY(textCopyFileButton), TEXT_ALIGN_CENTER); gSPDisplayList(gDisplayListHead++, dl_ia_text_end); // Print file names gSPDisplayList(gDisplayListHead++, dl_menu_ia8_text_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); + gDPSetEnvColor(gDisplayListHead++, 255, 255, 255, gDialogTextAlpha); + print_menu_generic_string(89, 62, LANG_ARRAY(textMarioA)); + print_menu_generic_string(211, 62, LANG_ARRAY(textMarioB)); + print_menu_generic_string(89, 105, LANG_ARRAY(textMarioC)); + print_menu_generic_string(211, 105, LANG_ARRAY(textMarioD)); gSPDisplayList(gDisplayListHead++, dl_menu_ia8_text_end); } -#if MULTILANG - #define SOUND_HUD_X 96 - #define SOUND_HUD_Y 141 +LangArray textSoundSelect = DEFINE_LANGUAGE_ARRAY( + "SOUND SELECT", + "SELECTION SON", + "WÄHLE SOUND", + "サウンドセレクト", + "MODO DE SONIDO"); + +#ifdef MULTILANG +LangArray textLanguageSelect = DEFINE_LANGUAGE_ARRAY( + "LANGUAGE SELECT", + "SELECTION LANGUE", + "WÄHLE SPRACHE", + "ランゲージセレクト", + "IDIOMA"); + +LangArray textLanguage = DEFINE_LANGUAGE_ARRAY( + "ENGLISH", + "FRANÇAIS", + "DEUTSCH", + "にほんご", + "ESPAÑOL"); + +#define SOUND_LABEL_Y 141 +#define LANGUAGE_SELECT_Y 80 #else - #define SOUND_HUD_X 47 - #define SOUND_HUD_Y 87 +#define SOUND_LABEL_Y 87 #endif +#ifdef ENABLE_STEREO_HEADSET_EFFECTS +#define OPTION_LABEL_SPACING 74 +#else +#define OPTION_LABEL_SPACING 99 +#endif + +#define OPTION_LABEL_START_X (SCREEN_CENTER_X - ((ARRAY_COUNT(textSoundModes) - 1) * OPTION_LABEL_SPACING / 2)) + /** * Prints sound mode menu strings that shows on the purple background menu screen. * - * In EU, this function acts like "print_option_mode_menu_strings" because of languages. + * With multilang, this function acts like "print_option_mode_menu_strings" because of languages. */ void print_sound_mode_menu_strings(void) { s32 mode; @@ -1785,11 +1910,11 @@ void print_sound_mode_menu_strings(void) { // Print "SOUND SELECT" text gSPDisplayList(gDisplayListHead++, dl_rgba16_text_begin); - gDPSetEnvColor(gDisplayListHead++, 255, 255, 255, sTextBaseAlpha); + gDPSetEnvColor(gDisplayListHead++, 255, 255, 255, gDialogTextAlpha); - print_hud_lut_string(HUD_LUT_DIFF, SOUND_HUD_X, 32, LANGUAGE_ARRAY(textSoundSelect)); -#if MULTILANG - print_hud_lut_string(HUD_LUT_DIFF, 47, 101, LANGUAGE_ARRAY(textLanguageSelect[0])); + print_hud_lut_string(47, 32, LANG_ARRAY(textSoundSelect)); +#ifdef MULTILANG + print_hud_lut_string(47, 110, LANG_ARRAY(textLanguageSelect)); #endif gSPDisplayList(gDisplayListHead++, dl_rgba16_text_end); @@ -1797,98 +1922,113 @@ void print_sound_mode_menu_strings(void) { gSPDisplayList(gDisplayListHead++, dl_ia_text_begin); // Print sound mode names -#ifdef ENABLE_STEREO_HEADSET_EFFECTS - for (mode = 0, textX = 87; mode < ARRAY_COUNT(textSoundModes); textX += 74, mode++) { -#else - for (mode = 0, textX = 111; mode < ARRAY_COUNT(textSoundModes); textX += 99, mode++) { -#endif + for (mode = 0, textX = OPTION_LABEL_START_X; mode < ARRAY_COUNT(textSoundModes); textX += OPTION_LABEL_SPACING, mode++) { if (mode == sSoundMode) { - gDPSetEnvColor(gDisplayListHead++, 255, 255, 255, sTextBaseAlpha); + set_text_color(255, 255, 255); } else { - gDPSetEnvColor(gDisplayListHead++, 0, 0, 0, sTextBaseAlpha); + set_text_color(0, 0, 0); } - print_generic_string( - get_str_x_pos_from_center(textX, LANGUAGE_ARRAY(textSoundModes[mode]), 10.0f), - SOUND_HUD_Y, LANGUAGE_ARRAY(textSoundModes[mode])); + print_generic_string_aligned(textX, SOUND_LABEL_Y, LANG_ARRAY(*textSoundModes[mode]), TEXT_ALIGN_CENTER); } -#if MULTILANG - // In EU, print language mode names - for (mode = 0, textX = 90; mode < 3; textX += 70, mode++) { - if (mode == LANGUAGE_FUNCTION) { - gDPSetEnvColor(gDisplayListHead++, 255, 255, 255, sTextBaseAlpha); - } else { - gDPSetEnvColor(gDisplayListHead++, 0, 0, 0, sTextBaseAlpha); +#ifdef MULTILANG + // Handle changing the selected language + if (sCursorClickingTimer == 2) { + s16 cursorX = sCursorPos[0] + SCREEN_CENTER_X; + s16 cursorY = sCursorPos[1] + SCREEN_CENTER_Y; + + s8 oldSelectedLanguageIndex = sSelectedLanguageIndex; + + if (cursorY < LANGUAGE_SELECT_Y + 20 && cursorY >= LANGUAGE_SELECT_Y) { + if (cursorX < SCREEN_CENTER_X - 40 && cursorX >= SCREEN_CENTER_X - 60) { + sSelectedLanguageIndex--; + } else if (cursorX < SCREEN_CENTER_X + 60 && cursorX >= SCREEN_CENTER_X + 40) { + sSelectedLanguageIndex++; + } + // Update language if the language has been changed + if (sSelectedLanguageIndex != oldSelectedLanguageIndex) { + play_sound(SOUND_MENU_CHANGE_SELECT, gGlobalSoundSource); + sSelectedLanguageIndex = (sSelectedLanguageIndex + LANGUAGE_COUNT) % LANGUAGE_COUNT; + multilang_set_language(gDefinedLanguages[sSelectedLanguageIndex]); + } } - print_generic_string( - get_str_x_pos_from_center(textX, textLanguage[mode], 10.0f), - 72, textLanguage[mode]); } - gDPSetEnvColor(gDisplayListHead++, 255, 255, 255, sTextBaseAlpha); - print_generic_string(182, 29, LANGUAGE_ARRAY(textReturn)); + set_text_color(255, 255, 255); + // Print current language + print_generic_string_aligned(SCREEN_CENTER_X, LANGUAGE_SELECT_Y, textLanguage[gInGameLanguage], TEXT_ALIGN_CENTER); + print_generic_string_aligned(SCREEN_CENTER_X - 50, LANGUAGE_SELECT_Y, "◀", TEXT_ALIGN_CENTER); + print_generic_string_aligned(SCREEN_CENTER_X + 50, LANGUAGE_SELECT_Y, "▶", TEXT_ALIGN_CENTER); + + // Print return text + print_generic_string(184, 29, LANG_ARRAY(textReturn)); #endif gSPDisplayList(gDisplayListHead++, dl_ia_text_end); } -unsigned char textStarX[] = { TEXT_STAR_X }; - /** * 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); + char secretStarsText[20]; + char secretStarsNum[8]; // Print number of castle secret stars - int_to_str(save_file_get_total_star_count(fileIndex, - COURSE_NUM_TO_INDEX(COURSE_BONUS_STAGES), - COURSE_NUM_TO_INDEX(COURSE_MAX)), - secretStarsText); - print_menu_generic_string(x + 16, y, secretStarsText); + format_int_to_string(secretStarsNum, save_file_get_total_star_count(fileIndex, + COURSE_NUM_TO_INDEX(COURSE_BONUS_STAGES), + COURSE_NUM_TO_INDEX(COURSE_MAX))); + sprintf(secretStarsText, "★×%s", secretStarsNum); + print_menu_generic_string(x, y, secretStarsText); } -#define HISCORE_COIN_ICON_X 18 -#define HISCORE_COIN_TEXT_X 34 -#define HISCORE_COIN_NAMES_X 60 +LangArray text4Dashes = DEFINE_LANGUAGE_ARRAY( + "----", + "----", + "----", + "ーーーー", + "----"); + +LangArray textMarioFace = DEFINE_LANGUAGE_ARRAY( + "{}%s", + "{}%s", + "{}%s", + "マリオ%s", + "{}%s"); /** * 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]; + char str[20]; + char coinScoreText[10]; u8 stars = save_file_get_star_flags(fileIndex, courseIndex); - unsigned char textCoinX[] = { TEXT_COIN_X }; - unsigned char textStar[] = { TEXT_STAR }; -#define LENGTH 8 - unsigned char 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); // Print coin score - int_to_str(save_file_get_course_coin_score(fileIndex, courseIndex), coinScoreText); - print_menu_generic_string(x + 41, y, coinScoreText); + format_int_to_string(coinScoreText, save_file_get_course_coin_score(fileIndex, courseIndex)); + sprintf(str, "✪×%s", coinScoreText); + print_menu_generic_string(x + 25, y, str); // If collected, print 100 coin star if (stars & STAR_FLAG_ACT_100_COINS) { - print_menu_generic_string(x + 70, y, textStar); + print_menu_generic_string(x + 70, y, "★"); } } // HISCORE else { - // Print "[coin] x" - print_menu_generic_string(x + HISCORE_COIN_ICON_X, y, textCoinX); + u16 coinScoreFile; // 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); + format_int_to_string(coinScoreText, (u16) save_file_get_max_coin_score(courseIndex) & 0xFFFF); + sprintf(str, "✪×%s", coinScoreText); + print_menu_generic_string(x + 18, y, str); // Print coin highscore file - print_menu_generic_string(x + HISCORE_COIN_NAMES_X, y, - fileNames[(save_file_get_max_coin_score(courseIndex) >> 16) & 0xFFFF]); + coinScoreFile = (save_file_get_max_coin_score(courseIndex) >> 16) & 0xFFFF; + if (coinScoreFile == 0) { + print_menu_generic_string(x + 60, y, LANG_ARRAY(text4Dashes)); + } else { + string_format_file_letter(str, LANG_ARRAY(textMarioFace), coinScoreFile - 1); + print_menu_generic_string(x + 60, y, str); + } } } @@ -1897,7 +2037,8 @@ 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]; + char starScoreText[30]; + char *entries[6]; 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 @@ -1906,65 +2047,79 @@ 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++) { - starScoreText[i] = DIALOG_CHAR_STAR_FILLED; + entries[i] = "★"; } - // Terminating byte - starScoreText[i] = DIALOG_CHAR_TERMINATOR; + for (i = starCount; i < 6; i++) { + entries[i] = ""; + } + sprintf(starScoreText, "%s%s%s%s%s%s", entries[0], entries[1], entries[2], entries[3], entries[4], entries[5]); print_menu_generic_string(x, y, starScoreText); } -#define MARIO_X 25 -#define FILE_LETTER_X 95 -#define LEVEL_NUM_PAD 3 -#define SECRET_STARS_PAD 6 -#define LEVEL_NAME_X 23 -#define STAR_SCORE_X 171 -#define MYSCORE_X 238 -#define HISCORE_X 231 +LangArray textScoreMenuMarioX = DEFINE_LANGUAGE_ARRAY( + "MARIO %c", + "MARIO %c", + "MARIO %c", + "マリオ %c", + "MARIO %c"); + +LangArray textHiScore = DEFINE_LANGUAGE_ARRAY( + "HI SCORE", + "MEILLEUR SCORE", + "BESTLEISTUNG", + "ハイスコア", + "RÉCORDS"); + +extern LangArray textMyScore; /** * Prints save file score strings that shows when a save file is chosen inside the score menu. */ void print_save_file_scores(s8 fileIndex) { u32 i; - unsigned char textMario[] = { TEXT_MARIO }; - unsigned char textHiScore[] = { TEXT_HI_SCORE }; - unsigned char textMyScore[] = { TEXT_MY_SCORE }; - unsigned char textFileLetter[] = { TEXT_ZERO }; - void **levelNameTable = segmented_to_virtual(languageTable[gInGameLanguage][1]); + char str[20]; + char fileLetter; - textFileLetter[0] = fileIndex + ASCII_TO_DIALOG('A'); // get letter of file selected +#ifndef MULTILANG + const char **levelNameTable = segmented_to_virtual(seg2_course_name_table); +#else + const char ***levelNameLanguageTable = segmented_to_virtual(course_strings_language_table); + const char **levelNameTable = segmented_to_virtual(levelNameLanguageTable[gInGameLanguage]); +#endif // 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_GLOBAL, FILE_LETTER_X, 15, textFileLetter); + gDPSetEnvColor(gDisplayListHead++, 255, 255, 255, gDialogTextAlpha); + fileLetter = 'A' + fileIndex; + sprintf(str, LANG_ARRAY(textScoreMenuMarioX), fileLetter); + print_hud_lut_string(25, 15, str); // 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); - gDPSetEnvColor(gDisplayListHead++, 255, 255, 255, sTextBaseAlpha); + gDPSetEnvColor(gDisplayListHead++, 255, 255, 255, gDialogTextAlpha); for ((i = 0); (i < COURSE_STAGES_MAX); (i++)) { - print_menu_generic_string((LEVEL_NAME_X + ((i < 9) * LEVEL_NUM_PAD)), (23 + (12 * (i + 1))), segmented_to_virtual(levelNameTable[i])); - print_score_file_star_score( fileIndex, i, STAR_SCORE_X, (23 + (12 * (i + 1)))); - print_score_file_course_coin_score( fileIndex, i, 213, (23 + (12 * (i + 1)))); + s32 lineY = 35 + (12 * i); + format_int_to_string(str, i + 1); + print_menu_generic_string(41, lineY, segmented_to_virtual(levelNameTable[i])); + print_menu_generic_string_aligned(37, lineY, str, TEXT_ALIGN_RIGHT); + print_score_file_star_score( fileIndex, i, 171, lineY); + print_score_file_course_coin_score(fileIndex, i, 213, lineY); } // Print castle secret stars text - print_menu_generic_string(LEVEL_NAME_X + SECRET_STARS_PAD, 23 + 12 * 16, - segmented_to_virtual(levelNameTable[25])); + print_menu_generic_string(41, 215, segmented_to_virtual(levelNameTable[25])); // Print castle secret stars score - print_score_file_castle_secret_stars(fileIndex, STAR_SCORE_X, 23 + 12 * 16); + print_score_file_castle_secret_stars(fileIndex, 171, 215); // Print current coin score mode if (sScoreFileCoinScoreMode == 0) { - print_menu_generic_string(MYSCORE_X, 24, LANGUAGE_ARRAY(textMyScore)); + print_menu_generic_string_aligned(262, 24, LANG_ARRAY(textMyScore), TEXT_ALIGN_CENTER); } else { - print_menu_generic_string(HISCORE_X, 24, LANGUAGE_ARRAY(textHiScore)); + print_menu_generic_string_aligned(262, 24, LANG_ARRAY(textHiScore), TEXT_ALIGN_CENTER); } gSPDisplayList(gDisplayListHead++, dl_menu_ia8_text_end); @@ -1995,8 +2150,8 @@ void print_file_select_strings(void) { sAllFilesExist = FALSE; } // Timers for menu alpha text and the main menu itself - if (sTextBaseAlpha < 250) { - sTextBaseAlpha += 10; + if (gDialogTextAlpha < 250) { + gDialogTextAlpha += 10; } if (sMainMenuTimer < 1000) { sMainMenuTimer++; @@ -2022,7 +2177,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) { sSelectedButtonID = MENU_BUTTON_NONE; sCurrentMenuLevel = MENU_LAYER_MAIN; - sTextBaseAlpha = 0; + gDialogTextAlpha = 0; // Place the cursor over the save file that was being played. // gCurrSaveFileNum is 1 by default when the game boots, as such // the cursor will point on Mario A save file. @@ -2043,6 +2198,18 @@ s32 lvl_init_menu_values_and_cursor_pos(UNUSED s32 arg, UNUSED s32 unused) { sMainMenuTimer = 0; sEraseYesNoHoverState = MENU_ERASE_HOVER_NONE; sSoundMode = save_file_get_sound_mode(); +#ifdef MULTILANG + sSelectedLanguageIndex = get_language_index(gInGameLanguage); + + for (u32 fileNum = 0; fileNum < NUM_SAVE_FILES; fileNum++) { + if (save_file_exists(fileNum) == TRUE) { + sOpenLangSettings = FALSE; + break; + } else { + sOpenLangSettings = TRUE; + } + } +#endif gCurrLevelNum = LEVEL_UNKNOWN_1; return 0; } diff --git a/src/menu/file_select.h b/src/menu/file_select.h index 51966231e..d6e24bf5d 100644 --- a/src/menu/file_select.h +++ b/src/menu/file_select.h @@ -76,7 +76,7 @@ enum MenuButtonTypes { MENU_BUTTON_ERASE_MAX, // Sound Mode Menu (SOUND SELECT) - // This menu includes language settings on EU + // This menu includes language settings with multilang MENU_BUTTON_SOUND_MODE = MENU_BUTTON_ERASE_MAX, MENU_BUTTON_OPTION_MIN, MENU_BUTTON_SOUND_OPTION_MIN = MENU_BUTTON_OPTION_MIN, @@ -87,14 +87,8 @@ enum MenuButtonTypes { #endif MENU_BUTTON_SOUND_OPTION_MAX, -#if MULTILANG - // Language Menu - MENU_BUTTON_LANGUAGE_MIN = MENU_BUTTON_SOUND_OPTION_MAX, - MENU_BUTTON_LANGUAGE_ENGLISH = MENU_BUTTON_LANGUAGE_MIN, - MENU_BUTTON_LANGUAGE_FRENCH, - MENU_BUTTON_LANGUAGE_GERMAN, - MENU_BUTTON_LANGUAGE_RETURN, - +#ifdef MULTILANG + MENU_BUTTON_OPTION_RETURN = MENU_BUTTON_SOUND_OPTION_MAX, MENU_BUTTON_OPTION_MAX #else MENU_BUTTON_OPTION_MAX = MENU_BUTTON_SOUND_OPTION_MAX diff --git a/src/menu/star_select.c b/src/menu/star_select.c index eece371bc..07dd9af4e 100644 --- a/src/menu/star_select.c +++ b/src/menu/star_select.c @@ -4,7 +4,6 @@ #include "behavior_data.h" #include "engine/behavior_script.h" #include "engine/graph_node.h" -#include "eu_translation.h" #include "game/area.h" #include "game/game_init.h" #include "game/ingame_menu.h" @@ -18,7 +17,6 @@ #include "game/rumble_init.h" #include "sm64.h" #include "star_select.h" -#include "text_strings.h" #include "game/main.h" /** @@ -53,6 +51,12 @@ static s8 sSelectableStarIndex = 0; // Act Selector menu timer that keeps counting until you choose an act. static s32 sActSelectorMenuTimer = 0; +#ifdef WIDE +#define ACT_SELECT_WIDESCREEN_SCALE (gConfig.widescreen ? (4.f / 3) : 1.f) +#else +#define ACT_SELECT_WIDESCREEN_SCALE 1.f +#endif + /** * Act Selector Star Type Loop Action * Defines a select type for a star in the act selector. @@ -92,18 +96,8 @@ void bhv_act_selector_star_type_loop(void) { void render_100_coin_star(u8 stars) { if (stars & STAR_FLAG_ACT_100_COINS) { // If the 100 coin star has been collected, create a new star selector next to the coin score. - #ifdef WIDE - if (gConfig.widescreen) { - sStarSelectorModels[6] = spawn_object_abs_with_rot(o, 0, MODEL_STAR, - bhvActSelectorStarType, (370 * 4.0f) / 3, 24, -300, 0, 0, 0); - } else { - sStarSelectorModels[6] = spawn_object_abs_with_rot(o, 0, MODEL_STAR, - bhvActSelectorStarType, 370, 24, -300, 0, 0, 0); - } - #else sStarSelectorModels[6] = spawn_object_abs_with_rot(o, 0, MODEL_STAR, - bhvActSelectorStarType, 370, 24, -300, 0, 0, 0); - #endif + bhvActSelectorStarType, 370 * ACT_SELECT_WIDESCREEN_SCALE, 24, -300, 0, 0, 0); sStarSelectorModels[6]->oStarSelectorSize = 0.8f; sStarSelectorModels[6]->oStarSelectorType = STAR_SELECTOR_100_COINS; @@ -158,30 +152,12 @@ void bhv_act_selector_init(void) { } // Render star selector objects -#ifdef WIDE - if (gConfig.widescreen) { - for (i = 0; i < sVisibleStars; i++) { - sStarSelectorModels[i] = - spawn_object_abs_with_rot(o, 0, selectorModelIDs[i], bhvActSelectorStarType, - ((75 + (sVisibleStars * -75) + (i * 152)) * 4.0f) / 3, 248, -300, 0, 0, 0); - sStarSelectorModels[i]->oStarSelectorSize = 1.0f; - } - } else { - for (i = 0; i < sVisibleStars; i++) { - sStarSelectorModels[i] = - spawn_object_abs_with_rot(o, 0, selectorModelIDs[i], bhvActSelectorStarType, - (75 + (sVisibleStars * -75) + (i * 152)), 248, -300, 0, 0, 0); - sStarSelectorModels[i]->oStarSelectorSize = 1.0f; - } - } -#else for (i = 0; i < sVisibleStars; i++) { sStarSelectorModels[i] = spawn_object_abs_with_rot(o, 0, selectorModelIDs[i], bhvActSelectorStarType, - (75 + (sVisibleStars * -75) + (i * 152)), 248, -300, 0, 0, 0); + (75 + (sVisibleStars * -75) + (i * 152)) * ACT_SELECT_WIDESCREEN_SCALE, 248, -300, 0, 0, 0); sStarSelectorModels[i]->oStarSelectorSize = 1.0f; } -#endif render_100_coin_star(stars); } @@ -233,30 +209,38 @@ void bhv_act_selector_loop(void) { /** * Print the course number selected with the wood rgba16 course texture. */ -#if MULTILANG -void print_course_number(s16 language) { -#else void print_course_number(void) { -#endif - u8 courseNum[4]; + char courseNum[4]; create_dl_translation_matrix(MENU_MTX_PUSH, 158.0f, 81.0f, 0.0f); // Full wood texture in JP & US, lower part of it on EU gSPDisplayList(gDisplayListHead++, dl_menu_rgba16_wood_course); -#if MULTILANG +#ifdef MULTILANG // Change upper part of the wood texture depending of the language defined - switch (language) { + switch (gInGameLanguage) { case LANGUAGE_ENGLISH: +#ifdef ENABLE_JAPANESE + case LANGUAGE_JAPANESE: +#endif gSPDisplayList(gDisplayListHead++, dl_menu_texture_course_upper); break; +#ifdef ENABLE_FRENCH case LANGUAGE_FRENCH: gSPDisplayList(gDisplayListHead++, dl_menu_texture_niveau_upper); break; +#endif +#ifdef ENABLE_GERMAN case LANGUAGE_GERMAN: gSPDisplayList(gDisplayListHead++, dl_menu_texture_kurs_upper); break; +#endif +#ifdef ENABLE_SPANISH + case LANGUAGE_SPANISH: + gSPDisplayList(gDisplayListHead++, dl_menu_texture_nivel_upper); + break; +#endif } gSPDisplayList(gDisplayListHead++, dl_menu_rgba16_wood_course_end); @@ -266,124 +250,64 @@ void print_course_number(void) { gSPDisplayList(gDisplayListHead++, dl_rgba16_text_begin); gDPSetEnvColor(gDisplayListHead++, 255, 255, 255, 255); - int_to_str(gCurrCourseNum, courseNum); - - if (gCurrCourseNum < 10) { // 1 digit number - print_hud_lut_string(HUD_LUT_GLOBAL, 152, 158, courseNum); - } else { // 2 digit number - print_hud_lut_string(HUD_LUT_GLOBAL, 143, 158, courseNum); - } + sprintf(courseNum, "%d", gCurrCourseNum); + print_hud_lut_string_aligned(157, 158, courseNum, TEXT_ALIGN_CENTER); gSPDisplayList(gDisplayListHead++, dl_rgba16_text_end); } -#define ACT_NAME_X 163 - +LangArray textActMyScore = DEFINE_LANGUAGE_ARRAY( + "MYSCORE", + "MON SCORE", + "LEISTUNG", + "マイスコア", + "MI RÉCORD"); /** * Print act selector strings, some with special checks. */ void print_act_selector_strings(void) { -#if MULTILANG - unsigned char myScore[][10] = { {TEXT_MYSCORE}, {TEXT_MY_SCORE_FR}, {TEXT_MY_SCORE_DE} }; -#else - unsigned char myScore[] = { TEXT_MYSCORE }; -#endif - unsigned char starNumbers[] = { TEXT_ZERO }; - -#if MULTILANG - u8 **levelNameTbl; - u8 *currLevelName; - u8 **actNameTbl; -#else - u8 **levelNameTbl = segmented_to_virtual(seg2_course_name_table); - u8 *currLevelName = segmented_to_virtual(levelNameTbl[COURSE_NUM_TO_INDEX(gCurrCourseNum)]); - u8 **actNameTbl = segmented_to_virtual(seg2_act_name_table); -#endif - u8 *selectedActName; -#if !MULTILANG - s16 lvlNameX; - s16 actNameX; -#endif + char **levelNameTbl = segmented_to_virtual(gLanguageTables[gInGameLanguage].course_name_table); + char *currLevelName = segmented_to_virtual(levelNameTbl[COURSE_NUM_TO_INDEX(gCurrCourseNum)]); + char **actNameTbl = segmented_to_virtual(gLanguageTables[gInGameLanguage].act_name_table); + char *selectedActName; s8 i; -#if MULTILANG - s16 language = eu_get_language(); -#endif create_dl_ortho_matrix(); - -#if MULTILANG - switch (language) { - default: - case LANGUAGE_ENGLISH: - actNameTbl = segmented_to_virtual(act_name_table_eu_en); - levelNameTbl = segmented_to_virtual(course_name_table_eu_en); - break; - case LANGUAGE_FRENCH: - actNameTbl = segmented_to_virtual(act_name_table_eu_fr); - levelNameTbl = segmented_to_virtual(course_name_table_eu_fr); - break; - case LANGUAGE_GERMAN: - actNameTbl = segmented_to_virtual(act_name_table_eu_de); - levelNameTbl = segmented_to_virtual(course_name_table_eu_de); - break; - } - currLevelName = segmented_to_virtual(levelNameTbl[COURSE_NUM_TO_INDEX(gCurrCourseNum)]); -#endif + gDialogTextAlpha = 255; // Print the coin highscore. gSPDisplayList(gDisplayListHead++, dl_rgba16_text_begin); - gDPSetEnvColor(gDisplayListHead++, 255, 255, 255, 255); + gDPSetEnvColor(gDisplayListHead++, 255, 255, 255, gDialogTextAlpha); print_hud_my_score_coins(1, gCurrSaveFileNum - 1, COURSE_NUM_TO_INDEX(gCurrCourseNum), 155, 106); gSPDisplayList(gDisplayListHead++, dl_rgba16_text_end); gSPDisplayList(gDisplayListHead++, dl_ia_text_begin); - gDPSetEnvColor(gDisplayListHead++, 0, 0, 0, 255); + set_text_color(0, 0, 0); // 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) { -#if MULTILANG - print_generic_string(95, 118, myScore[language]); -#else - print_generic_string(102, 118, myScore); -#endif + print_generic_string_aligned(145, 118, LANG_ARRAY(textActMyScore), TEXT_ALIGN_RIGHT); } -#if MULTILANG - print_generic_string(get_str_x_pos_from_center(160, (currLevelName + 3), 10.0f), 33, currLevelName + 3); -#else - lvlNameX = get_str_x_pos_from_center(160, currLevelName + 3, 10.0f); - print_generic_string(lvlNameX, 33, currLevelName + 3); -#endif + print_generic_string_aligned(SCREEN_CENTER_X, 33, currLevelName, TEXT_ALIGN_CENTER); gSPDisplayList(gDisplayListHead++, dl_ia_text_end); -#if MULTILANG - print_course_number(language); -#else print_course_number(); -#endif gSPDisplayList(gDisplayListHead++, dl_menu_ia8_text_begin); - gDPSetEnvColor(gDisplayListHead++, 0, 0, 0, 255); + gDPSetEnvColor(gDisplayListHead++, 0, 0, 0, gDialogTextAlpha); // Print the name of the selected act. if (sVisibleStars != 0) { selectedActName = segmented_to_virtual(actNameTbl[COURSE_NUM_TO_INDEX(gCurrCourseNum) * 6 + sSelectedActIndex]); -#if MULTILANG - print_menu_generic_string(get_str_x_pos_from_center(ACT_NAME_X, selectedActName, 8.0f), 81, selectedActName); -#else - actNameX = get_str_x_pos_from_center(ACT_NAME_X, selectedActName, 8.0f); - print_menu_generic_string(actNameX, 81, selectedActName); -#endif + print_menu_generic_string_aligned(SCREEN_CENTER_X, 81, selectedActName, TEXT_ALIGN_CENTER); } // Print the numbers above each star. for (i = 1; i <= sVisibleStars; i++) { - starNumbers[0] = i; -#if MULTILANG - print_menu_generic_string(143 - sVisibleStars * 15 + i * 30, 38, starNumbers); -#else - print_menu_generic_string(139 - sVisibleStars * 17 + i * 34, 38, starNumbers); -#endif + char str[4]; + format_int_to_string(str, i); + print_menu_generic_string_aligned(SCREEN_CENTER_X + (i*2 - sVisibleStars - 1) * 17, 38, str, TEXT_ALIGN_CENTER); } gSPDisplayList(gDisplayListHead++, dl_menu_ia8_text_end); diff --git a/src/menu/title_screen.c b/src/menu/title_screen.c index 88308127b..b8ad053aa 100644 --- a/src/menu/title_screen.c +++ b/src/menu/title_screen.c @@ -147,8 +147,8 @@ s32 intro_level_select(void) { gCurrSaveFileNum = 4; gCurrActNum = 6; - print_text_centered(160, 80, "SELECT STAGE"); - print_text_centered(160, 30, "PRESS START BUTTON"); + print_text_aligned(160, 80, "SELECT STAGE", TEXT_ALIGN_CENTER); + print_text_aligned(160, 30, "PRESS START BUTTON", TEXT_ALIGN_CENTER); print_text_fmt_int(40, 60, "%2d", gCurrLevelNum); print_text(80, 60, sLevelSelectStageNames[gCurrLevelNum - 1]); // print stage name diff --git a/text/de/courses.h b/text/de/courses.h index 06b1f293b..ab88b378a 100644 --- a/text/de/courses.h +++ b/text/de/courses.h @@ -1,80 +1,80 @@ -COURSE_ACTS(COURSE_BOB, _(" 1 BOB-OMBS BOMBENBERG"), - _("BESIEGE KÖNIG BOB-OMB!") , _("BESIEGE DEN SCHNELLEN KOOPA!") , _("FLIEGE ZUR SCHWEBENDEN INSEL!"), - _("FINDE DIE 8 ROTEN MÜNZEN!") , _("DURCHFLIEGE ALLE MÜNZENRINGE!") , _("BEFREIE DEN KETTENHUND!")) +COURSE_ACTS(COURSE_BOB, "BOB-OMBS BOMBENBERG", + "BESIEGE KÖNIG BOB-OMB!" , "BESIEGE DEN SCHNELLEN KOOPA!" , "FLIEGE ZUR SCHWEBENDEN INSEL!", + "FINDE DIE 8 ROTEN MÜNZEN!" , "DURCHFLIEGE ALLE MÜNZENRINGE!" , "BEFREIE DEN KETTENHUND!") -COURSE_ACTS(COURSE_WF, _(" 2 WUMMPS WUCHTWALL"), - _("BESIEGE KÖNIG WUMMP!") , _("STEIGE AUF DIE BERGFESTUNG!") , _("FLIEG INS BLAUE!"), - _("FINDE DIE 8 ROTEN MÜNZEN!") , _("WECKE DIE EULE!") , _("ZERSTÖRE DIE FELSWAND!")) +COURSE_ACTS(COURSE_WF, "WUMMPS WUCHTWALL", + "BESIEGE KÖNIG WUMMP!" , "STEIGE AUF DIE BERGFESTUNG!" , "FLIEG INS BLAUE!", + "FINDE DIE 8 ROTEN MÜNZEN!" , "WECKE DIE EULE!" , "ZERSTÖRE DIE FELSWAND!") -COURSE_ACTS(COURSE_JRB, _(" 3 PIRATENBUCHT PANIK"), - _("TAUCHE IN DAS SCHIFFSWRACK!") , _("LOCKE DEN AAL KANO HERAUS!") , _("TAUCHE ZUR SCHATZHÖHLE!"), - _("FINDE DIE 8 ROTEN MÜNZEN!") , _("FLIEGE ZU DEN STEINSÄULEN!") , _("LAUFE DURCH DEN STRUDEL!")) +COURSE_ACTS(COURSE_JRB, "PIRATENBUCHT PANIK", + "TAUCHE IN DAS SCHIFFSWRACK!" , "LOCKE DEN AAL KANO HERAUS!" , "TAUCHE ZUR SCHATZHÖHLE!", + "FINDE DIE 8 ROTEN MÜNZEN!" , "FLIEGE ZU DEN STEINSÄULEN!" , "LAUFE DURCH DEN STRUDEL!") -COURSE_ACTS(COURSE_CCM, _(" 4 BIBBERBERG BOB"), - _("RUTSCHE AUF DER EISBAHN!") , _("FINDE DAS PINGUINBABY!") , _("BESIEGE DEN SCHNELLEN PINGUIN!"), - _("FINDE DIE 8 ROTEN MÜNZEN!") , _("BAUE EINEN SCHNEEMANN!") , _("DENKE AN DEN WANDSPRUNG!")) +COURSE_ACTS(COURSE_CCM, "BIBBERBERG BOB", + "RUTSCHE AUF DER EISBAHN!" , "FINDE DAS PINGUINBABY!" , "BESIEGE DEN SCHNELLEN PINGUIN!", + "FINDE DIE 8 ROTEN MÜNZEN!" , "BAUE EINEN SCHNEEMANN!" , "DENKE AN DEN WANDSPRUNG!") -COURSE_ACTS(COURSE_BBH, _(" 5 BIG BOOS BURG"), - _("GEHE AUF GEISTERJAGD!") , _("BESUCHE BIG BOOS KARUSSEL!") , _("LÖSE DAS BÜCHEREI-RÄTSEL!"), - _("FINDE DIE 8 ROTEN MÜNZEN!") , _("KLETTERE AUF BIG BOOS BALKON!") , _("FINDE DAS AUGE IM GEHEIMRAUM!")) +COURSE_ACTS(COURSE_BBH, "BIG BOOS BURG", + "GEHE AUF GEISTERJAGD!" , "BESUCHE BIG BOOS KARUSSEL!" , "LÖSE DAS BÜCHEREI-RÄTSEL!", + "FINDE DIE 8 ROTEN MÜNZEN!" , "KLETTERE AUF BIG BOOS BALKON!" , "FINDE DAS AUGE IM GEHEIMRAUM!") -COURSE_ACTS(COURSE_HMC, _(" 6 GRÜNE GIFTGROTTE"), - _("KLETTERE AUF NESSIS RÜCKEN!") , _("FINDE DIE 8 ROTEN MÜNZEN!") , _("LAUFE AUF DEM GRUND DES SEES!"), - _("DURCHSUCHE DAS NEBELLABYRINTH!"), _("SUCHE IM NEBEL DEN NOTAUSGANG!"), _("ACHTE AUF ROLLENDE FELSEN!")) +COURSE_ACTS(COURSE_HMC, "GRÜNE GIFTGROTTE", + "KLETTERE AUF NESSIS RÜCKEN!" , "FINDE DIE 8 ROTEN MÜNZEN!" , "LAUFE AUF DEM GRUND DES SEES!", + "DURCHSUCHE DAS NEBELLABYRINTH!", "SUCHE IM NEBEL DEN NOTAUSGANG!", "ACHTE AUF ROLLENDE FELSEN!") -COURSE_ACTS(COURSE_LLL, _(" 7 LAVA LAGUNE"), - _("WERFE BIG BULLY IN DIE LAVA!") , _("WERFE DIE BULLIES IN DIE LAVA!"), _("FINDE DIE 8 ROTEN MÜNZEN!"), - _("TANZE AUF DEM BAUMSTAMM!") , _("ERKUNDE DEN VULKAN!") , _("GEWINNE IM VULKAN AN HÖHE!")) +COURSE_ACTS(COURSE_LLL, "LAVA LAGUNE", + "WERFE BIG BULLY IN DIE LAVA!" , "WERFE DIE BULLIES IN DIE LAVA!", "FINDE DIE 8 ROTEN MÜNZEN!", + "TANZE AUF DEM BAUMSTAMM!" , "ERKUNDE DEN VULKAN!" , "GEWINNE IM VULKAN AN HÖHE!") -COURSE_ACTS(COURSE_SSL, _(" 8 WOBIWABA WÜSTE"), - _("FOLGE DEM RIESENGEIER!") , _("BRINGE LICHT IN DIE PYRAMIDE!") , _("BEGEBE DICH IN DIE PYRAMIDE!"), - _("LANDE AUF ALLEN VIER SÄULEN!") , _("FINDE DIE 8 ROTEN MÜNZEN!") , _("LÖSE DAS PYRAMIDENPUZZLE!")) +COURSE_ACTS(COURSE_SSL, "WOBIWABA WÜSTE", + "FOLGE DEM RIESENGEIER!" , "BRINGE LICHT IN DIE PYRAMIDE!" , "BEGEBE DICH IN DIE PYRAMIDE!", + "LANDE AUF ALLEN VIER SÄULEN!" , "FINDE DIE 8 ROTEN MÜNZEN!" , "LÖSE DAS PYRAMIDENPUZZLE!") -COURSE_ACTS(COURSE_DDD, _(" 9 WILDE WASSERWERFT"), - _("ENTERE BOWSERS U-BOOT!") , _("ÖFFNE DIE TRUHEN!") , _("SPRINGE ZU DEN ROTEN MÜNZEN!"), - _("SCHWIMME DURCH DIE RINGE!") , _("FOLGE DEM FISCH!") , _("VEREINE DIE MÜTZEN!")) +COURSE_ACTS(COURSE_DDD, "WILDE WASSERWERFT", + "ENTERE BOWSERS U-BOOT!" , "ÖFFNE DIE TRUHEN!" , "SPRINGE ZU DEN ROTEN MÜNZEN!", + "SCHWIMME DURCH DIE RINGE!" , "FOLGE DEM FISCH!" , "VEREINE DIE MÜTZEN!") -COURSE_ACTS(COURSE_SL, _("10 FROSTBEULEN FRUST"), - _("ERKLIMME DEN KOPF!") , _("SPIELE MIT BAD BULLY!") , _("WAGE DICH INS EIS!"), - _("GEHE ZUM EISSEE!") , _("FINDE DIE 8 ROTEN MÜNZEN!") , _("SCHAU IM IGLU NACH!")) +COURSE_ACTS(COURSE_SL, "FROSTBEULEN FRUST", + "ERKLIMME DEN KOPF!" , "SPIELE MIT BAD BULLY!" , "WAGE DICH INS EIS!", + "GEHE ZUM EISSEE!" , "FINDE DIE 8 ROTEN MÜNZEN!" , "SCHAU IM IGLU NACH!") -COURSE_ACTS(COURSE_WDW, _("11 ATLANTIS AQUARIA"), - _("FOLGE DEN BLAUEN PFEILEN!") , _("SUCHE NACH DER SPITZE DER STADT!"), _("ERFORSCHE DIE HÖHEN UND TIEFEN!"), - _("BEEILE DICH - EXPRESSAUFZUG!") , _("FINDE DIE 8 ROTEN MÜNZEN!") , _("BEACHTE DAS ZEITLIMIT!")) +COURSE_ACTS(COURSE_WDW, "ATLANTIS AQUARIA", + "FOLGE DEN BLAUEN PFEILEN!" , "SUCHE NACH DER SPITZE DER STADT!", "ERFORSCHE DIE HÖHEN UND TIEFEN!", + "BEEILE DICH - EXPRESSAUFZUG!" , "FINDE DIE 8 ROTEN MÜNZEN!" , "BEACHTE DAS ZEITLIMIT!") -COURSE_ACTS(COURSE_TTM, _("12 FLIEGENPILZ FIASKO"), - _("ERKLIMME DEN BERG!") , _("ERKUNDE DEN AFFENKÄFIG!") , _("FINDE DIE 8 ROTEN MÜNZEN!"), - _("ERFORSCHE DIE STEILWAND!") , _("HALTE AUSSCHAU AUF DER BRÜCKE!"), _("SUCHE DEN EINSAMEN PILZ!")) +COURSE_ACTS(COURSE_TTM, "FLIEGENPILZ FIASKO", + "ERKLIMME DEN BERG!" , "ERKUNDE DEN AFFENKÄFIG!" , "FINDE DIE 8 ROTEN MÜNZEN!", + "ERFORSCHE DIE STEILWAND!" , "HALTE AUSSCHAU AUF DER BRÜCKE!", "SUCHE DEN EINSAMEN PILZ!") -COURSE_ACTS(COURSE_THI, _("13 GULLIVER GUMBA"), - _("PFLÜCKE DIE SCHNAPP-PIRANHA!") , _("BEGIB DICH ZUR SPITZE DER INSEL!"), _("TRETE NOCH EINMAL GEGEN KOOPA AN!"), - _("LÖSE DIE 5 ITTY BITTY-RÄTSEL!") , _("FINDE DIE 8 ROTEN MÜNZEN!") , _("DREHE WIGGLER IM KREIS!")) +COURSE_ACTS(COURSE_THI, "GULLIVER GUMBA", + "PFLÜCKE DIE SCHNAPP-PIRANHA!" , "BEGIB DICH ZUR SPITZE DER INSEL!", "TRETE NOCH EINMAL GEGEN KOOPA AN!", + "LÖSE DIE 5 ITTY BITTY-RÄTSEL!" , "FINDE DIE 8 ROTEN MÜNZEN!" , "DREHE WIGGLER IM KREIS!") -COURSE_ACTS(COURSE_TTC, _("14 TICK TACK TRAUMA"), - _("ROLLE DEN KÄFIG!") , _("ACHTE AUF DAS PENDEL!") , _("LASS DIR DEN WEG ZEIGEN!"), - _("STAMPFE MÄCHTIG AUF!") , _("SPRINGE AUF DEN SCHWEBEBALKEN!"), _("FINDE DIE 8 ROTEN MÜNZEN!")) +COURSE_ACTS(COURSE_TTC, "TICK TACK TRAUMA", + "ROLLE DEN KÄFIG!" , "ACHTE AUF DAS PENDEL!" , "LASS DIR DEN WEG ZEIGEN!", + "STAMPFE MÄCHTIG AUF!" , "SPRINGE AUF DEN SCHWEBEBALKEN!", "FINDE DIE 8 ROTEN MÜNZEN!") -COURSE_ACTS(COURSE_RR, _("15 REGENBOGEN RASEREI"), - _("REISE AUF DEN REGENBÖGEN!") , _("SUCHE DAS HAUS AM HIMMEL!") , _("FINDE DIE 8 ROTEN MÜNZEN!"), - _("LASS DICH VON DER BRISE TRAGEN!"), _("ÜBERWINDE DIE MACHT DER DREIECKE!"), _("SCHAU DIR DEN REGENBOGEN AN!")) +COURSE_ACTS(COURSE_RR, "REGENBOGEN RASEREI", + "REISE AUF DEN REGENBÖGEN!" , "SUCHE DAS HAUS AM HIMMEL!" , "FINDE DIE 8 ROTEN MÜNZEN!", + "LASS DICH VON DER BRISE TRAGEN!", "ÜBERWINDE DIE MACHT DER DREIECKE!", "SCHAU DIR DEN REGENBOGEN AN!") -SECRET_STAR(COURSE_BITDW, _(" BOWSERS SCHATTENWELT")) -SECRET_STAR(COURSE_BITFS, _(" BOWSERS LAVASEE")) -SECRET_STAR(COURSE_BITS, _(" BOWSERS LUFTSCHLOSS")) -SECRET_STAR(COURSE_PSS, _(" TOADSTOOLS RUTSCHBAHN")) -SECRET_STAR(COURSE_COTMC, _(" GRÜNER SCHALTERPALAST")) -SECRET_STAR(COURSE_TOTWC, _(" ROTER SCHALTERPALAST")) -SECRET_STAR(COURSE_VCUTM, _(" BLAUER SCHALTERPALAST")) -SECRET_STAR(COURSE_WMOTR, _(" REGENBOGEN FEUERWERK")) -SECRET_STAR(COURSE_SA, _(" VERSTECKTES AQUARIUM")) -SECRET_STAR(COURSE_CAKE_END, _("")) +SECRET_STAR(COURSE_BITDW, "BOWSERS SCHATTENWELT") +SECRET_STAR(COURSE_BITFS, "BOWSERS LAVASEE") +SECRET_STAR(COURSE_BITS, "BOWSERS LUFTSCHLOSS") +SECRET_STAR(COURSE_PSS, "TOADSTOOLS RUTSCHBAHN") +SECRET_STAR(COURSE_COTMC, "GRÜNER SCHALTERPALAST") +SECRET_STAR(COURSE_TOTWC, "ROTER SCHALTERPALAST") +SECRET_STAR(COURSE_VCUTM, "BLAUER SCHALTERPALAST") +SECRET_STAR(COURSE_WMOTR, "REGENBOGEN FEUERWERK") +SECRET_STAR(COURSE_SA, "VERSTECKTES AQUARIUM") +SECRET_STAR(COURSE_CAKE_END, "") -CASTLE_SECRET_STARS(_(" GEHEIME STERNE")) +CASTLE_SECRET_STARS("GEHEIME STERNE") -EXTRA_TEXT(0, _("EIN GEHEIMER STERN DES SCHLOSSES!")) -EXTRA_TEXT(1, _("")) -EXTRA_TEXT(2, _("")) -EXTRA_TEXT(3, _("")) -EXTRA_TEXT(4, _("")) -EXTRA_TEXT(5, _("")) -EXTRA_TEXT(6, _("")) +EXTRA_TEXT(0, "EIN GEHEIMER STERN DES SCHLOSSES!") +EXTRA_TEXT(1, "") +EXTRA_TEXT(2, "") +EXTRA_TEXT(3, "") +EXTRA_TEXT(4, "") +EXTRA_TEXT(5, "") +EXTRA_TEXT(6, "") diff --git a/text/de/dialogs.h b/text/de/dialogs.h index fba15c161..50635dc0b 100644 --- a/text/de/dialogs.h +++ b/text/de/dialogs.h @@ -1,6 +1,6 @@ -// Parameters: dialog enum ID, (unused), lines per box, left offset, width +// Parameters: dialog enum ID, voice sound, lines per box, left offset, width -DEFINE_DIALOG(DIALOG_000, 1, 6, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_000, NO_SOUND, 6, 30, 200, "\ Du bist inmitten der\n\ Kampfarena gelandet.\n\ Sei vorsichtig!\n\ @@ -9,18 +9,18 @@ Power-Sterne findest Du\n\ in den Wandgemälden.\n\ Sprich zuerst mit Buddy,\n\ der rosa Bombe.\n\ -Drücke [B], um Dich mit ihr\n\ +Drücke Ⓑ, um Dich mit ihr\n\ zu unterhalten. Sie und\n\ ihre Kolleginnen werden\n\ Dich sicher unterstützen.\n\ -Drücke [B], um Schilder\n\ -zu lesen. Mit [A] oder [B]\n\ +Drücke Ⓑ, um Schilder\n\ +zu lesen. Mit Ⓐ oder Ⓑ\n\ kannst Du die Nachrichten\n\ umblättern. In anderen\n\ Kursen triffst Du weitere\n\ -Freunde, die Dir helfen.")) +Freunde, die Dir helfen.") -DEFINE_DIALOG(DIALOG_001, 1, 4, 95, 200, _("\ +DEFINE_DIALOG(DIALOG_001, SOUND_OBJ_BOBOMB_BUDDY_TALK, 4, 95, 200, "\ Bewege Dich vorsichtig\n\ durch das Gelände, damit\n\ Du kein Opfer der\n\ @@ -40,9 +40,9 @@ König Bob-Omb zu finden.\n\ Kehre zu mir zurück,\n\ wenn es Dir gelungen ist,\n\ ihm den Stern abzujagen.\n\ -Viel Glück...")) +Viel Glück...") -DEFINE_DIALOG(DIALOG_002, 1, 4, 95, 200, _("\ +DEFINE_DIALOG(DIALOG_002, SOUND_OBJ_BOBOMB_BUDDY_TALK, 4, 95, 200, "\ Hallo! Sei wachsam, Du\n\ befindest Dich inmitten\n\ einer Schlacht. Aber ich\n\ @@ -58,9 +58,9 @@ ihm erwischen.\n\ Wir sind die wahren\n\ Bob-Ombs und werden Dir\n\ helfen. Sprich mit uns,\n\ -wann immer Du möchtest.")) +wann immer Du möchtest.") -DEFINE_DIALOG(DIALOG_003, 1, 5, 95, 200, _("\ +DEFINE_DIALOG(DIALOG_003, SOUND_OBJ_BOBOMB_BUDDY_TALK, 5, 95, 200, "\ Herzlichen Dank, Mario!\n\ Du hast es diesem\n\ Tyrannen gezeigt. Aber\n\ @@ -75,9 +75,9 @@ Meine Bob-Omb-Kollegen\n\ wissen bereits Bescheid.\n\ Sprich mit ihnen und\n\ Du darfst bestimmt ihre\n\ -Kanonen benutzen.")) +Kanonen benutzen.") -DEFINE_DIALOG(DIALOG_004, 1, 3, 95, 200, _("\ +DEFINE_DIALOG(DIALOG_004, SOUND_OBJ_BOBOMB_BUDDY_TALK, 3, 95, 200, "\ Wir sind friedliebende\n\ Bob-Ombs und mögen keine\n\ Kanonen.\n\ @@ -86,9 +86,9 @@ gerne für Luftreisen\n\ zur Verfügung.\n\ Alle Kanonen dieses Kurses\n\ sind für Dich präpariert.\n\ -Guten Flug!!!")) +Guten Flug!!!") -DEFINE_DIALOG(DIALOG_005, 1, 4, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_005, SOUND_OBJ_KOOPA_TALK, 4, 30, 200, "\ Hey Mario! Stimmt es,\n\ daß Du König Bob-Omb\n\ während eines harten\n\ @@ -108,36 +108,36 @@ der Schnellere ist?\n\ \n\ Fertig...?\n\ \n\ -//Los!/// Später!")) +\tLos!\t Später!") -DEFINE_DIALOG(DIALOG_006, 1, 3, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_006, SOUND_OBJ_KOOPA_TALK, 3, 30, 200, "\ Hey!!! Willst Du mich\n\ auf den Arm nehmen?\n\ Abkürzen gilt nicht!\n\ Am besten versuchst Du's\n\ später nochmal unter\n\ -fairen Bedingungen.")) +fairen Bedingungen.") -DEFINE_DIALOG(DIALOG_007, 1, 5, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_007, SOUND_OBJ_KOOPA_TALK, 5, 30, 200, "\ Hmmmmpff...pffff...hach!\n\ Boah! Du...hast...mich...\n\ geschlagen! Das grenzt an\n\ ein Wunder! Hier, Du hast\n\ -ihn Dir verdient!")) +ihn Dir verdient!") -DEFINE_DIALOG(DIALOG_008, 1, 5, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_008, NO_SOUND, 5, 30, 200, "\ BISSIGER KETTENHUND!\n\ Nähere Dich ihm langsam,\n\ -und benutze die [C]-Knöpfe,\n\ +und benutze die Ⓒ-Knöpfe,\n\ um den Blickwinkel zu\n\ ändern. Gefährlich, oder?\n\ Siehst Du die rote Münze\n\ auf dem Pfahl?\n\ Du erhältst einen Stern,\n\ wenn Du acht dieser\n\ -Münzen sammelst.")) +Münzen sammelst.") -DEFINE_DIALOG(DIALOG_009, 1, 5, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_009, SOUND_OBJ_KOOPA_TALK, 5, 30, 200, "\ Lang, lang ist's her!\n\ Du scheinst noch schneller\n\ geworden zu sein. Hast Du\n\ @@ -152,9 +152,14 @@ Das Ziel liegt hinter\n\ der Böen-Brücke.\n\ Fertig?\n\ \n\ -//Los!/// Später!")) +\tLos!\t Später!") -DEFINE_DIALOG(DIALOG_010, 1, 4, 30, 200, _("\ +/** + * Special case: if the voice is SEQ_EVENT_SOLVE_PUZZLE, + * then play_dialog_sound will run play_puzzle_jingle + * instead of playing a sound effect + */ +DEFINE_DIALOG(DIALOG_010, SEQ_EVENT_SOLVE_PUZZLE, 4, 30, 200, "\ Du hast den roten\n\ Schalter aktiviert.\n\ Ab jetzt kannst Du die\n\ @@ -166,9 +171,9 @@ dieser Mützen.\n\ Möchtest Du Deinen\n\ Spielstand speichern?\n\ \n\ -//Ja!////Nein!")) +\tJa!\t\tNein!") -DEFINE_DIALOG(DIALOG_011, 1, 4, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_011, SEQ_EVENT_SOLVE_PUZZLE, 4, 30, 200, "\ Du hast den grünen\n\ Schalter aktiviert.\n\ Ab jetzt kannst Du die\n\ @@ -180,9 +185,9 @@ dieser Mützen.\n\ Möchtest Du Deinen\n\ Spielstand speichern?\n\ \n\ -//Ja!////Nein!")) +\tJa!\t\tNein!") -DEFINE_DIALOG(DIALOG_012, 1, 4, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_012, SEQ_EVENT_SOLVE_PUZZLE, 4, 30, 200, "\ Du hast den blauen\n\ Schalter aktiviert.\n\ Ab jetzt kannst Du die\n\ @@ -194,41 +199,41 @@ dieser Mützen.\n\ Möchtest Du Deinen\n\ Spielstand speichern?\n\ \n\ -//Ja!////Nein!")) +\tJa!\t\tNein!") -DEFINE_DIALOG(DIALOG_013, 1, 6, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_013, NO_SOUND, 6, 30, 200, "\ Du hast 100 Münzen\n\ eingesammelt. Der\n\ Stern verleiht Dir\n\ zusätzliche Kraft.\n\ Spielstand speichern?\n\ -//Ja!////Nein!")) +\tJa!\t\tNein!") -DEFINE_DIALOG(DIALOG_014, 1, 6, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_014, NO_SOUND, 6, 30, 200, "\ Unglaublich, Du hast einen\n\ weiteren Stern erhalten.\n\ Er verleiht Dir\n\ zusätzliche Kraft.\n\ Spielstand speichern?\n\ -//Ja!////Nein!")) +\tJa!\t\tNein!") -DEFINE_DIALOG(DIALOG_015, 1, 4, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_015, NO_SOUND, 4, 30, 200, "\ Setze Deine Fäuste ein,\n\ um Dich zu verteidigen.\n\ -Drücke [A] zum Springen\n\ -und [B] zum Schlagen.\n\ -Drücke [A] und [B], um einen\n\ +Drücke Ⓐ zum Springen\n\ +und Ⓑ zum Schlagen.\n\ +Drücke Ⓐ und Ⓑ, um einen\n\ Tritt auszuführen.\n\ Gegenstände kannst Du\n\ -mit [B] nehmen und werfen.")) +mit Ⓑ nehmen und werfen.") -DEFINE_DIALOG(DIALOG_016, 1, 4, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_016, NO_SOUND, 4, 30, 200, "\ Springe auf den\n\ funkelnden Panzer!\n\ Der Krötensurf eröffnet\n\ -ungeahnte Möglichkeiten!")) +ungeahnte Möglichkeiten!") -DEFINE_DIALOG(DIALOG_017, 1, 4, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_017, SOUND_OBJ_KING_BOBOMB_TALK, 4, 30, 200, "\ Ich bin König Bob-Omb,\n\ Herrscher über alle\n\ Bomben und Gebieter der\n\ @@ -248,79 +253,79 @@ Dein Ende ist gekommen!\n\ Oder bist Du etwa der\n\ Meinung, Du könntest\n\ mich von hinten packen\n\ -und besiegen? Niemals!!!")) +und besiegen? Niemals!!!") -DEFINE_DIALOG(DIALOG_018, 1, 4, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_018, NO_SOUND, 4, 30, 200, "\ Schlafende Gefahren\n\ sollte man nicht wecken.\n\ Die schleichende Weisheit\n\ -verleiht längeres Leben!")) +verleiht längeres Leben!") -DEFINE_DIALOG(DIALOG_019, 1, 2, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_019, NO_SOUND, 2, 30, 200, "\ Vorsicht, die Fliesen\n\ -sind frisch gebohnert!")) +sind frisch gebohnert!") -DEFINE_DIALOG(DIALOG_020, 1, 6, 95, 150, _("\ +DEFINE_DIALOG(DIALOG_020, NO_SOUND, 6, 95, 150, "\ Lieber Mario!\n\ Komm mich doch einmal\n\ im Schloss besuchen!\n\ Der Kuchen steht bereit!\n\ In Freundschaft\n\ -Toadstool")) +Toadstool") -DEFINE_DIALOG(DIALOG_021, 1, 5, 95, 200, _("\ +DEFINE_DIALOG(DIALOG_021, SOUND_OBJ_BOWSER_INTRO_LAUGH, 5, 95, 200, "\ Na, wen haben wir denn\n\ hier? Es ist niemand zu\n\ Hause, also verschwinde\n\ besser wieder...\n\ -Hua...hua...hua!!!")) +Hua...hua...hua!!!") -DEFINE_DIALOG(DIALOG_022, 1, 3, 95, 200, _("\ +DEFINE_DIALOG(DIALOG_022, SOUND_OBJ_BOWSER_INTRO_LAUGH, 3, 95, 200, "\ Ohne den passenden\n\ Schlüssel bleibt Dir\n\ -dieser Weg versperrt!")) +dieser Weg versperrt!") -DEFINE_DIALOG(DIALOG_023, 1, 2, 95, 200, _("\ +DEFINE_DIALOG(DIALOG_023, SOUND_OBJ_BOWSER_INTRO_LAUGH, 2, 95, 200, "\ Der Kellerschlüssel wird\n\ -Dir hier nichts nützen!")) +Dir hier nichts nützen!") -DEFINE_DIALOG(DIALOG_024, 1, 4, 95, 200, _("\ +DEFINE_DIALOG(DIALOG_024, SOUND_OBJ_BOWSER_INTRO_LAUGH, 4, 95, 200, "\ Du brauchst schon einen\n\ Stern, um diese Tür zu\n\ öffnen. Untersuche doch\n\ -einmal die Wandgemälde!")) +einmal die Wandgemälde!") -DEFINE_DIALOG(DIALOG_025, 1, 4, 95, 200, _("\ +DEFINE_DIALOG(DIALOG_025, SOUND_OBJ_BOWSER_INTRO_LAUGH, 4, 95, 200, "\ Zum Öffnen dieser Tür\n\ benötigst Du drei Sterne.\n\ -Du mußt also noch [%]\n\ -von ihnen finden!")) +Du mußt also noch %d\n\ +von ihnen finden!") -DEFINE_DIALOG(DIALOG_026, 1, 4, 95, 200, _("\ +DEFINE_DIALOG(DIALOG_026, SOUND_OBJ_BOWSER_INTRO_LAUGH, 4, 95, 200, "\ Zum Öffnen dieser Tür\n\ benötigst Du acht Sterne.\n\ -Du mußt also noch [%]\n\ -von ihnen finden!")) +Du mußt also noch %d\n\ +von ihnen finden!") -DEFINE_DIALOG(DIALOG_027, 1, 4, 95, 200, _("\ +DEFINE_DIALOG(DIALOG_027, SOUND_OBJ_BOWSER_INTRO_LAUGH, 4, 95, 200, "\ Zum Öffnen dieser Tür\n\ benötigst Du 30 Sterne.\n\ -Du mußt also noch [%]\n\ -von ihnen finden.")) +Du mußt also noch %d\n\ +von ihnen finden.") -DEFINE_DIALOG(DIALOG_028, 1, 4, 95, 200, _("\ +DEFINE_DIALOG(DIALOG_028, SOUND_OBJ_BOWSER_INTRO_LAUGH, 4, 95, 200, "\ Zum Öffnen dieser Tür\n\ benötigst Du 50 Sterne.\n\ -Du mußt also noch [%]\n\ -von ihnen finden.")) +Du mußt also noch %d\n\ +von ihnen finden.") -DEFINE_DIALOG(DIALOG_029, 1, 4, 95, 200, _("\ +DEFINE_DIALOG(DIALOG_029, SOUND_OBJ_BOWSER_INTRO_LAUGH, 4, 95, 200, "\ Zum Öffnen der Tür zum\n\ -„Endlosen Vergnügen』\n\ +„Endlosen Vergnügen”\n\ benötigst Du 70 Sterne.\n\ -Hua...Hua...Hua...!")) +Hua...Hua...Hua...!") -DEFINE_DIALOG(DIALOG_030, 1, 4, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_030, NO_SOUND, 4, 30, 200, "\ Die Lakitu-Film AG\n\ berichtet live und in\n\ Farbe! Hier die neuesten\n\ @@ -330,11 +335,11 @@ unachtsam, wenn Du Dich\n\ leise, also langsam,\n\ bewegst.\n\ Die Kameraposition kannst\n\ -Du durch [C]> und [C]<\n\ +Du durch Ⓒ▶ und Ⓒ◀\n\ verändern, um einen\n\ Überblick zu erhalten.\n\ Das Weitwinkelobjektiv\n\ -wird mit [C]| eingesetzt.\n\ +wird mit Ⓒ▼ eingesetzt.\n\ Details der Umgebung\n\ werden so sichtbar!\n\ Ein Warnton erklingt,\n\ @@ -344,9 +349,9 @@ eingeschränkt ist.\n\ Das waren die\n\ Meldungen und\n\ damit zurück zum\n\ -laufenden Programm!")) +laufenden Programm!") -DEFINE_DIALOG(DIALOG_031, 1, 3, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_031, NO_SOUND, 3, 30, 200, "\ Das darf doch alles nicht\n\ wahr sein! Ich habe schon\n\ wieder verloren!\n\ @@ -355,9 +360,9 @@ die neuen Koopa-Mach-1-\n\ Schuhe gekauft! Hmpf!!!\n\ Naja, ich denke, auch\n\ dieser Stern gehört Dir!\n\ -Herzlichen Glückwunsch!")) +Herzlichen Glückwunsch!") -DEFINE_DIALOG(DIALOG_032, 1, 5, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_032, NO_SOUND, 5, 30, 200, "\ Mit der Federkappe\n\ kannst Du fliegen.\n\ Besitzt Du sie, springe\n\ @@ -367,27 +372,27 @@ Benutzt Du zum Starten\n\ des Fluges eine Kanone,\n\ kannst Du die Flughöhe\n\ enorm steigern. Mit dem\n\ -[Z]-Knopf kannst Du landen.")) +Ⓩ-Knopf kannst Du landen.") -DEFINE_DIALOG(DIALOG_033, 1, 4, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_033, NO_SOUND, 4, 30, 200, "\ Herzlich willkommen! Durch\n\ eine Warpröhre bist Du\n\ direkt zum Schloss der\n\ Prinzessin gelangt.\n\ Die Steuerung ist einfach:\n\ -Benutze den [A]-Knopf zum\n\ -Springen und den [B]-Knopf\n\ +Benutze den Ⓐ-Knopf zum\n\ +Springen und den Ⓑ-Knopf\n\ zum Schlagen.\n\ Hinweisschilder kannst\n\ Du lesen, wenn Du Dich\n\ davor stellst und den\n\ -[B]-Knopf betätigst.\n\ +Ⓑ-Knopf betätigst.\n\ Der Analog-Stick dient\n\ der Steuerung. Doch jetzt\n\ genug der vielen Worte:\n\ -Auf zum Schloss!!!")) +Auf zum Schloss!!!") -DEFINE_DIALOG(DIALOG_034, 1, 5, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_034, NO_SOUND, 5, 30, 200, "\ Guten Tag, liebe Freunde\n\ des Actionkinos! Die\n\ Lakitu-Film AG versorgt\n\ @@ -401,7 +406,7 @@ nach den Power-Sternen.\n\ Unser wagemutiger Kollege\n\ wird ihn auf dieser\n\ heiklen Mission begleiten.\n\ -Die [C]-Knöpfe dienen\n\ +Die Ⓒ-Knöpfe dienen\n\ seiner Steuerung.\n\ Du kannst die Perspektiven\n\ beliebig verändern. Sollte\n\ @@ -412,12 +417,12 @@ Genauere Erklärungen\n\ hierzu werden wir Euch\n\ zu gegebener Zeit\n\ mitteilen. Damit zurück\n\ -zum Hauptfilm!")) +zum Hauptfilm!") -DEFINE_DIALOG(DIALOG_035, 1, 5, 30, 200, _("\ -Die [C]-Knöpfe dienen der\n\ +DEFINE_DIALOG(DIALOG_035, NO_SOUND, 5, 30, 200, "\ +Die Ⓒ-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\ @@ -426,12 +431,12 @@ AG dafür, daß Du Mario\n\ siehst. Das ist die\n\ Standardeinstellung.\n\ Diese Kamera steuerst Du\n\ -mit den [C]-Knöpfen.\n\ -Drückst Du die [R]-Taste,\n\ +mit den Ⓒ-Knöpfen.\n\ +Drückst Du die Ⓡ-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\ @@ -439,35 +444,35 @@ Welchen Kameramodus\n\ Du gewählt hast, siehst\n\ Du an einem kleinen Bild,\n\ das sich rechts unten auf\n\ -dem Bildschirm befindet.")) +dem Bildschirm befindet.") -DEFINE_DIALOG(DIALOG_036, 1, 5, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_036, NO_SOUND, 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\ -Drücke [R], um zu Marios\n\ +Drücke Ⓡ, um zu Marios\n\ Kamera zu wechseln. Sie\n\ bleibt ständig hinter ihm.\n\ Mit dieser Taste schaltest\n\ Du auch zurück auf Lakitu.\n\ Im Pausenmodus kannst Du\n\ weitere Einstellungen\n\ -vornehmen. Wähle „Stativ』\n\ -und halte die [R]-Taste\n\ -gedrückt!")) +vornehmen. Wähle „Stativ”\n\ +und halte die Ⓡ-Taste\n\ +gedrückt!") -DEFINE_DIALOG(DIALOG_037, 1, 3, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_037, SOUND_OBJ_BIG_PENGUIN_YELL, 3, 30, 200, "\ Hihihi, ich habe gewonnen!\n\ Du solltest noch ein paar\n\ -Trainingsrunden einlegen!")) +Trainingsrunden einlegen!") -DEFINE_DIALOG(DIALOG_038, 1, 2, 95, 200, _("\ +DEFINE_DIALOG(DIALOG_038, NO_SOUND, 2, 95, 200, "\ Die mystische Kraft der\n\ -Sterne öffnet die Tür!")) +Sterne öffnet die Tür!") -DEFINE_DIALOG(DIALOG_039, 1, 5, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_039, NO_SOUND, 5, 30, 200, "\ Besuchern ist das\n\ Erklimmen des königlichen\n\ Berges strengstens\n\ @@ -487,14 +492,14 @@ Die Sternenbeschreibungen\n\ zu Beginn dieses Kurses\n\ könnten sich als nützlich\n\ erweisen!\n\ -König Bob-Omb!!!")) +König Bob-Omb!!!") -DEFINE_DIALOG(DIALOG_040, 1, 3, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_040, NO_SOUND, 3, 30, 200, "\ Vorsicht, Brücke zerstört!\n\ Überquere das Eistal in\n\ -der Gondel.")) +der Gondel.") -DEFINE_DIALOG(DIALOG_041, 1, 4, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_041, SOUND_OBJ_KOOPA_TALK, 4, 30, 200, "\ Höhöhö, das war ja wohl\n\ nichts! Sogar meine Uroma\n\ Koopa ist wesentlich\n\ @@ -502,9 +507,9 @@ schneller als Du!\n\ Naja, mit zwei Jahren\n\ Training könntest Du's\n\ vielleicht schaffen.\n\ -Bis dann...und tschüß!")) +Bis dann...und tschüß!") -DEFINE_DIALOG(DIALOG_042, 1, 4, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_042, NO_SOUND, 4, 30, 200, "\ Achtung!\n\ Dieser Steg ist ziemlich\n\ schmal. Du solltest Dich\n\ @@ -520,23 +525,23 @@ Marios Blickrichtung.\n\ Mario läßt die Kante los,\n\ wenn Du den Analog-Stick\n\ in Richtung seines Rückens\n\ -bewegst oder [Z] drückst.\n\ +bewegst oder Ⓩ drückst.\n\ Bist Du in Eile, kannst\n\ Du auch durch einen\n\ beherzten Sprung mit dem\n\ -[A]-Knopf hinauf gelangen.")) +Ⓐ-Knopf hinauf gelangen.") -DEFINE_DIALOG(DIALOG_043, 1, 4, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_043, NO_SOUND, 4, 30, 200, "\ Wenn Du springst und den\n\ -[A]-Knopf gedrückt hältst,\n\ +Ⓐ-Knopf gedrückt hältst,\n\ klammert sich Mario an\n\ Objekte über ihm.\n\ Auf diese Weise kannst\n\ Du Dich auch von der\n\ Eule durch die Lüfte\n\ -transportieren lassen.")) +transportieren lassen.") -DEFINE_DIALOG(DIALOG_044, 1, 5, 95, 200, _("\ +DEFINE_DIALOG(DIALOG_044, NO_SOUND, 5, 95, 200, "\ Uh...oh...gääähn...\n\ Weeehhr ist daaaahhh...?\n\ Wer hat mich geweckt?\n\ @@ -556,17 +561,17 @@ Ich transportiere Dich,\n\ solange es meine Kraft\n\ zuläßt. Beobachte meinen\n\ Schatten, um Dich zu\n\ -orientieren.")) +orientieren.") -DEFINE_DIALOG(DIALOG_045, 1, 6, 95, 200, _("\ +DEFINE_DIALOG(DIALOG_045, NO_SOUND, 6, 95, 200, "\ Hey, Mann, Mario! Mir\n\ geht die Puste aus.\n\ Du ißt zuviel Pasta!\n\ Bitte, laß los, ich muß\n\ mich erholen...sofooort!\n\ -Bis später...vielleicht.")) +Bis später...vielleicht.") -DEFINE_DIALOG(DIALOG_046, 1, 4, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_046, NO_SOUND, 4, 30, 200, "\ Es gibt drei verschiedene\n\ Sprungtechniken. Du mußt\n\ sie alle beherrschen, um\n\ @@ -580,8 +585,8 @@ wird jeder Sprung höher\n\ als der vorherige sein.\n\ Weiter zum Weitsprung!\n\ Während Du rennst, mußt\n\ -Du den [Z]-Knopf und dann\n\ -den [A]-Knopf drücken.\n\ +Du den Ⓩ-Knopf und dann\n\ +den Ⓐ-Knopf drücken.\n\ Und nun der Wandsprung!\n\ Springe gegen eine Wand.\n\ Sobald Du die Wand\n\ @@ -590,22 +595,22 @@ den Sprungknopf drücken.\n\ Alles verstanden?\n\ Dreisprung? Weitsprung?\n\ Wandsprung? Dann heißt's\n\ -üben, üben, üben...")) +üben, üben, üben...") -DEFINE_DIALOG(DIALOG_047, 1, 3, 95, 200, _("\ +DEFINE_DIALOG(DIALOG_047, SOUND_OBJ_BOBOMB_BUDDY_TALK, 3, 95, 200, "\ Hallo!\n\ Ich mache die Kanone\n\ -zum Abschuß bereit!")) +zum Abschuß bereit!") -DEFINE_DIALOG(DIALOG_048, 1, 6, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_048, NO_SOUND, 6, 30, 200, "\ An einigen Stellen\n\ herrscht extreme\n\ Rutschgefahr! Sieh\n\ am besten zuerst im\n\ Schornstein nach dem\n\ -Rechten!")) +Rechten!") -DEFINE_DIALOG(DIALOG_049, 1, 5, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_049, NO_SOUND, 5, 30, 200, "\ Du erinnerst Dich an den\n\ Wandsprung? Auf diese\n\ Weise kannst Du schnell\n\ @@ -620,33 +625,33 @@ Denke an die uralte\n\ Weisheit:\n\ Übung macht den Meister!\n\ Sie kommt hier voll zum\n\ -Tragen!!!")) +Tragen!!!") -DEFINE_DIALOG(DIALOG_050, 1, 4, 30, 200, _("\ -Drücke den [Z]-Knopf, um\n\ +DEFINE_DIALOG(DIALOG_050, NO_SOUND, 4, 30, 200, "\ +Drücke den Ⓩ-Knopf, um\n\ in die Hocke zu gehen und\n\ einen Hang nach unten zu\n\ rutschen.\n\ -Betätigst Du den [Z]-Knopf\n\ +Betätigst Du den Ⓩ-Knopf\n\ während eines Sprungs,\n\ führst Du eine\n\ Stampfattacke aus.\n\ Du machst einen\n\ Rückwärtssalto, wenn\n\ -Du stehend den [Z]-Knopf\n\ +Du stehend den Ⓩ-Knopf\n\ drückst und springst.\n\ Es gibt weitere Varianten\n\ zu entdecken. Nimm Dir\n\ Zeit und versuche, andere\n\ -Kombinationen zu finden!")) +Kombinationen zu finden!") -DEFINE_DIALOG(DIALOG_051, 1, 5, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_051, NO_SOUND, 5, 30, 200, "\ Du kannst auf Bäume und\n\ Stangen klettern, wenn\n\ Du gegen sie springst und\n\ den Analog-Stick nach\n\ oben drückst.\n\ -Mit dem [A]-Knopf kannst\n\ +Mit dem Ⓐ-Knopf kannst\n\ Du nach HINTEN wieder\n\ abspringen. Du kannst\n\ sogar auf der Spitze\n\ @@ -655,21 +660,21 @@ Springst Du aus dem\n\ Handstand von einem\n\ Objekt ab, machst Du\n\ einen unglaublich hohen\n\ -Sprung.")) +Sprung.") -DEFINE_DIALOG(DIALOG_052, 1, 5, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_052, NO_SOUND, 5, 30, 200, "\ Du machst einen\n\ Rückwärtssalto, wenn\n\ -Du stehend den [Z]-Knopf\n\ +Du stehend den Ⓩ-Knopf\n\ gedrückt hältst und dann\n\ -den [A]-Knopf betätigst.\n\ +den Ⓐ-Knopf betätigst.\n\ Seitwärtssaltos führst\n\ Du aus, indem Du den\n\ Analog-Stick entgegen\n\ Deiner Laufrichtung\n\ -bewegst und springst.")) +bewegst und springst.") -DEFINE_DIALOG(DIALOG_053, 1, 5, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_053, NO_SOUND, 5, 30, 200, "\ Von Zeit zu Zeit erscheint\n\ eine farbige Zahl, wenn\n\ Du Kisten öffnest, Ringe\n\ @@ -679,17 +684,17 @@ Gelingt es Dir, alle fünf\n\ farbigen Zahlen dieses\n\ Bereichs zu finden,\n\ erhältst Du zur Belohnung\n\ -einen Power-Stern.")) +einen Power-Stern.") -DEFINE_DIALOG(DIALOG_054, 1, 6, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_054, NO_SOUND, 6, 30, 200, "\ Herzlich willkommen\n\ auf der Schlidderbahn!\n\ Drücke den Analog-Stick\n\ nach vorne, um zu\n\ beschleunigen und nach\n\ -hinten, um zu bremsen.")) +hinten, um zu bremsen.") -DEFINE_DIALOG(DIALOG_055, 1, 5, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_055, SOUND_OBJ_BIG_PENGUIN_YELL, 5, 30, 200, "\ Hihi, hallo Mario!\n\ Du siehst aus, als\n\ wolltest Du mich gerade\n\ @@ -704,9 +709,9 @@ Aber Du kannst es ja\n\ einmal versuchen.\n\ Wie steht's?\n\ \n\ -//Na klar!/ Später!")) +\tNa klar! Später!") -DEFINE_DIALOG(DIALOG_056, 1, 6, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_056, SOUND_OBJ_BIG_PENGUIN_YELL, 6, 30, 200, "\ Du...Du...ha...hast\n\ mich geschlagen! Das kann\n\ doch nicht wahr sein!\n\ @@ -718,9 +723,9 @@ ich Dir zwar nicht\n\ überreichen,\n\ aber nimm diesen\n\ Power-Stern!\n\ -Du hast ihn verdient.")) +Du hast ihn verdient.") -DEFINE_DIALOG(DIALOG_057, 1, 4, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_057, SOUND_OBJ_BIG_PENGUIN_YELL, 4, 30, 200, "\ Hey Kleiner! Hast Du mein\n\ Baby gesehen? Es ist das\n\ schönste und süßeste\n\ @@ -732,9 +737,9 @@ sich verdrückt hat.\n\ Wenn ich doch nur wüßte,\n\ wo ich die Suche beginnen\n\ soll...Oh, was für eine\n\ -fürchterliche Tragödie!!!")) +fürchterliche Tragödie!!!") -DEFINE_DIALOG(DIALOG_058, 1, 5, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_058, SOUND_OBJ_BIG_PENGUIN_YELL, 5, 30, 200, "\ Das ist doch...\n\ Mensch, Mario, Du hast\n\ mein Baby gefunden!!!\n\ @@ -744,17 +749,17 @@ Oh, ich weiß: Ich fand\n\ neulich diesen Stern\n\ hier. Nimm ihn als\n\ Zeichen meiner ewigen\n\ -Dankbarkeit!")) +Dankbarkeit!") -DEFINE_DIALOG(DIALOG_059, 1, 6, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_059, SOUND_OBJ_BIG_PENGUIN_YELL, 6, 30, 200, "\ Was soll ich mit diesem\n\ Früchtchen? Das ist nicht\n\ mein Baby! Mein Baby hat\n\ ein weiche, zarte Stimme,\n\ und es sieht mir natürlich\n\ -ähnlich!")) +ähnlich!") -DEFINE_DIALOG(DIALOG_060, 1, 4, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_060, NO_SOUND, 4, 30, 200, "\ Achtung, Achtung!\n\ Bevor Du Dich in die\n\ Fluten stürzt, solltest\n\ @@ -767,7 +772,7 @@ Schwimme zur Oberfläche\n\ oder sammle Münzen und\n\ Luftblasen, um wieder\n\ Sauerstoff zu tanken.\n\ -Drücke den [A]-Knopf, um\n\ +Drücke den Ⓐ-Knopf, um\n\ zu schwimmen. Halte ihn\n\ gedrückt, um mit den\n\ Füßen zu paddeln.\n\ @@ -782,16 +787,16 @@ drückst und springst.\n\ Achte jedoch darauf,\n\ daß Du den Analog-Stick\n\ während des Sprungs\n\ -losläßt!")) +losläßt!") -DEFINE_DIALOG(DIALOG_061, 1, 5, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_061, NO_SOUND, 5, 30, 200, "\ Wer baden möchte, sollte\n\ sich besser in wärmere\n\ Gefilde begeben, denn\n\ hier ist es auf jeden\n\ -Fall zu kalt!!!")) +Fall zu kalt!!!") -DEFINE_DIALOG(DIALOG_062, 1, 4, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_062, NO_SOUND, 4, 30, 200, "\ In den grünen Blöcken\n\ im Labyrinth findest\n\ Du die phänomenalen\n\ @@ -803,17 +808,17 @@ nicht zu atmen.\n\ Das einzige Problem ist:\n\ Du kannst nicht\n\ schwimmen, während Du\n\ -sie trägst!")) +sie trägst!") -DEFINE_DIALOG(DIALOG_063, 1, 3, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_063, NO_SOUND, 3, 30, 200, "\ In den blauen Blöcken\n\ befinden sich die\n\ fantastischen Tarnkappen.\n\ Damit kannst Du durch\n\ bestimmte Mauern gehen\n\ -oder Geister erschrecken.")) +oder Geister erschrecken.") -DEFINE_DIALOG(DIALOG_064, 1, 3, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_064, NO_SOUND, 3, 30, 200, "\ In den roten Blöcken\n\ kannst Du die berühmten\n\ Federkappen finden.\n\ @@ -826,17 +831,17 @@ an Höhe zu gewinnen.\n\ Drücke den Analog-Stick\n\ nach oben, um im Flug\n\ an Höhe zu verlieren.\n\ -Betätige den [Z]-Knopf,\n\ +Betätige den Ⓩ-Knopf,\n\ um den Flug zu beenden\n\ -und sicher zu landen.")) +und sicher zu landen.") -DEFINE_DIALOG(DIALOG_065, 1, 5, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_065, NO_SOUND, 5, 30, 200, "\ Schwimmen für Anfänger!\n\ -Drücke den [A]-Knopf für\n\ +Drücke den Ⓐ-Knopf für\n\ einen Schwimmzug. Bei\n\ richtigem Timing kannst\n\ Du sehr schnell schwimmen.\n\ -Halte den [A]-Knopf\n\ +Halte den Ⓐ-Knopf\n\ gedrückt, um mit den\n\ Füßen zu paddeln. Mit\n\ dieser Technik bewegst Du\n\ @@ -860,9 +865,9 @@ Ach ja: Türen, die sich\n\ unter Wasser befinden,\n\ kannst Du nicht öffnen.\n\ Aber vielleicht findest\n\ -Du ja einen Abfluß!!!")) +Du ja einen Abfluß!!!") -DEFINE_DIALOG(DIALOG_066, 1, 5, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_066, NO_SOUND, 5, 30, 200, "\ Hallo Mario, ich bin's,\n\ Peach! Paß auf Dich auf!\n\ Bowser wird versuchen,\n\ @@ -870,7 +875,7 @@ Dich mit seinem Feueratem\n\ zu versengen.\n\ Renne hinter ihn!\n\ Versuche mit dem\n\ -[B]-Knopf Bowsers\n\ +Ⓑ-Knopf Bowsers\n\ Schwanz zu packen und\n\ ihn herumzuschleudern.\n\ Bewege den Analog-Stick\n\ @@ -878,18 +883,18 @@ im Kreis, um Dich zu\n\ drehen. Je schneller\n\ Du Dich drehst, desto\n\ weiter wird Dein Wurf.\n\ -Benutze die [C]-Knöpfe, um\n\ +Benutze die Ⓒ-Knöpfe, um\n\ Dich zu orientieren. Du\n\ mußt Bowser gegen eine\n\ der Bomben am Rand der\n\ Plattform werfen.\n\ -Drücke den [B]-Knopf, um\n\ +Drücke den Ⓑ-Knopf, um\n\ Bowser loszulassen und\n\ in Richtung der Bombe\n\ zu schleudern.\n\ -Viel Glück!!!")) +Viel Glück!!!") -DEFINE_DIALOG(DIALOG_067, 1, 5, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_067, SOUND_OBJ_BOWSER_LAUGH, 5, 30, 200, "\ Tja, Mario, Pech gehabt!\n\ Die Prinzessin ist nicht\n\ hier und wird es auch so\n\ @@ -904,9 +909,9 @@ Vielleicht gehst Du besser\n\ wieder nach Hause und\n\ reparierst weiter kaputte\n\ Rohre, als Dich mit mir\n\ -zu messen!!!")) +zu messen!!!") -DEFINE_DIALOG(DIALOG_068, 1, 5, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_068, NO_SOUND, 5, 30, 200, "\ Du bist im Land des\n\ flüssigen Feuers. Wenn\n\ Du vom Weg abkommst,\n\ @@ -916,9 +921,9 @@ gesamte Energie auf\n\ einmal. Außerdem kannst\n\ Du den qualmenden Mario\n\ während seines Höhenflugs\n\ -immer noch steuern!")) +immer noch steuern!") -DEFINE_DIALOG(DIALOG_069, 1, 4, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_069, NO_SOUND, 4, 30, 200, "\ Während Deiner Abenteuer\n\ in den Wandbildern stößt\n\ Du an den Rändern auf\n\ @@ -926,9 +931,9 @@ unsichtbare Mauern.\n\ Triffst Du fliegend auf\n\ eine solche Mauer, prallst\n\ Du ab. Du kannst aber den\n\ -Flug fortsetzen.")) +Flug fortsetzen.") -DEFINE_DIALOG(DIALOG_070, 1, 4, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_070, NO_SOUND, 4, 30, 200, "\ Du kannst die Wandbilder\n\ jederzeit verlassen, um\n\ in die Schlosshalle\n\ @@ -936,7 +941,7 @@ zurückzukehren.\n\ Bleibe stehen, drücke\n\ START, um das Spiel\n\ zu pausieren, und wähle\n\ -„Kurs verlassen』!\n\ +„Kurs verlassen”!\n\ Du mußt nicht alle Sterne\n\ einer Welt finden, um\n\ den nächsten Abschnitt\n\ @@ -952,9 +957,9 @@ Fundort befindet.\n\ Aber Du mußt die Sterne\n\ in keiner bestimmten\n\ Reihenfolge finden.\n\ -Die Wahl liegt bei Dir!")) +Die Wahl liegt bei Dir!") -DEFINE_DIALOG(DIALOG_071, 1, 4, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_071, NO_SOUND, 4, 30, 200, "\ Achtung! Hüte Dich vor\n\ den Nebelschwaden!\n\ Sie enthalten keinen\n\ @@ -966,16 +971,16 @@ sicheren Weg zu suchen.\n\ Auf der Karte sind\n\ Unterstände als Kreise\n\ dargestellt, den Eingang\n\ -erkennst Du am Pfeil!")) +erkennst Du am Pfeil!") -DEFINE_DIALOG(DIALOG_072, 1, 5, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_072, NO_SOUND, 5, 30, 200, "\ Hier oben weht eine steife\n\ Brise. Solltest Du Deine\n\ Mütze verlieren, kannst\n\ Du sie auf dem Weg zum\n\ -Gipfel wiederfinden.")) +Gipfel wiederfinden.") -DEFINE_DIALOG(DIALOG_073, 1, 5, 95, 200, _("\ +DEFINE_DIALOG(DIALOG_073, NO_SOUND, 5, 95, 200, "\ Ahoi, Landratte! Es ist\n\ doch wohl logisch, daß\n\ sich hier unten ein\n\ @@ -985,9 +990,9 @@ Zur Bergung mußt Du die\n\ Kisten in der richtigen\n\ Reihenfolge öffnen, klar?\n\ Aber ich sage nicht, wie\n\ -sie lautet, hehehe!")) +sie lautet, hehehe!") -DEFINE_DIALOG(DIALOG_074, 1, 5, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_074, NO_SOUND, 5, 30, 200, "\ Siehst Du den Block\n\ nebenan? Manchmal kannst\n\ Du im Innern dieser\n\ @@ -997,9 +1002,9 @@ Zerstöre sie mit einem\n\ gezielten Schlag oder\n\ einer Stampfattacke,\n\ damit sie ihr Geheimnis\n\ -preisgeben!")) +preisgeben!") -DEFINE_DIALOG(DIALOG_075, 1, 5, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_075, NO_SOUND, 5, 30, 200, "\ Hilfe, Mario! Mein Schloss\n\ befindet sich in großer\n\ Gefahr. Ich weiß, daß der\n\ @@ -1029,9 +1034,9 @@ Sammle soviele Sterne\n\ wie möglich, um Bowsers\n\ Plan zu vereiteln.\n\ Wir zählen auf Dich!\n\ -Viel Glück!!!")) +Viel Glück!!!") -DEFINE_DIALOG(DIALOG_076, 1, 4, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_076, NO_SOUND, 4, 30, 200, "\ Hallo Mario! Du hast\n\ bereits einiges zur\n\ Rettung des Schlosses\n\ @@ -1059,15 +1064,15 @@ betreten.\n\ Ach ja, fast hätte ich es\n\ vergessen: Hier habe ich\n\ etwas für Dich! Es hilft\n\ -Dir, Bowser zu besiegen.")) +Dir, Bowser zu besiegen.") -DEFINE_DIALOG(DIALOG_077, 1, 4, 150, 200, _("\ +DEFINE_DIALOG(DIALOG_077, NO_SOUND, 4, 150, 200, "\ Einst konnte man die Tür\n\ öffnen. Zu dieser Zeit\n\ waren die Säulen aber\n\ -niedriger!")) +niedriger!") -DEFINE_DIALOG(DIALOG_078, 1, 5, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_078, NO_SOUND, 5, 30, 200, "\ Diesen Schalter kannst Du\n\ durch eine Stampfattacke\n\ auslösen. Er läßt einige\n\ @@ -1077,9 +1082,9 @@ Münzen wert sind.\n\ Allerdings mußt Du Dich\n\ beeilen, denn die blauen\n\ Münzen erscheinen nur\n\ -für kurze Zeit.")) +für kurze Zeit.") -DEFINE_DIALOG(DIALOG_079, 1, 4, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_079, SOUND_OBJ_UKIKI_CHATTER_LONG, 4, 30, 200, "\ Auuuuuaaa! Hey, laß mich\n\ los! Das war doch nur\n\ Spaß! Du hast wohl keinen\n\ @@ -1090,21 +1095,21 @@ losläßt, habe ich eine\n\ Überraschung für Dich!\n\ Na, wie sieht's aus?\n\ \n\ -//Klar!///Vergiß es!")) +\tKlar!\t Vergiß es!") -DEFINE_DIALOG(DIALOG_080, 1, 3, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_080, SOUND_OBJ_UKIKI_CHATTER_LONG, 3, 30, 200, "\ Hey Baby, komm schon!\n\ Wo bleibst Du denn so\n\ -lange?")) +lange?") -DEFINE_DIALOG(DIALOG_081, 1, 5, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_081, NO_SOUND, 5, 30, 200, "\ Des Rätsels Lösung ist der\n\ Wasserstand. Tief unten\n\ erwartet Dich die Stadt,\n\ nachdem Du den Pegel\n\ -hast sinken lassen.")) +hast sinken lassen.") -DEFINE_DIALOG(DIALOG_082, 1, 4, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_082, NO_SOUND, 4, 30, 200, "\ Achte auf Deine Mütze!\n\ Solltest Du sie verlieren,\n\ wirst Du durch Treffer\n\ @@ -1124,17 +1129,17 @@ Wände des Schlosses.\n\ Aber es ist mir gelungen,\n\ ihnen diesen Stern\n\ abzujagen.\n\ -Viel Glück!")) +Viel Glück!") -DEFINE_DIALOG(DIALOG_083, 1, 6, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_083, NO_SOUND, 6, 30, 200, "\ Betrittst Du die Uhr zu\n\ verschiedenen Zeiten,\n\ werden Dir weitere\n\ Geheimnisse offenbart.\n\ Vielleicht hilft Dir auch\n\ -dieser Stern!")) +dieser Stern!") -DEFINE_DIALOG(DIALOG_084, 1, 5, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_084, NO_SOUND, 5, 30, 200, "\ Hey, Du Rüpel, ich\n\ bekomme ja blaue Flecken.\n\ Laß mich sofort los!\n\ @@ -1144,51 +1149,51 @@ Er wäre ziemlich böse,\n\ wenn er das wüßte, aber\n\ ich bin in Eile. Also\n\ nimm ihn und laß mich\n\ -runter!")) +runter!") -DEFINE_DIALOG(DIALOG_085, 1, 4, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_085, SOUND_OBJ_BOO_LAUGH_LONG, 4, 30, 200, "\ Im Horrorhaus solltest Du\n\ den Mund geschlossen\n\ halten, damit Deine Zähne\n\ -nicht vor Angst klappern!")) +nicht vor Angst klappern!") -DEFINE_DIALOG(DIALOG_086, 1, 3, 40, 200, _("\ +DEFINE_DIALOG(DIALOG_086, NO_SOUND, 3, 40, 200, "\ Wenn Du im Kreis rennst,\n\ werden manche Gegner\n\ -große Augen machen!")) +große Augen machen!") -DEFINE_DIALOG(DIALOG_087, 1, 3, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_087, NO_SOUND, 3, 30, 200, "\ Der Weihnachtsmann ist\n\ nicht der einzige, der\n\ -in Schornsteine klettert!")) +in Schornsteine klettert!") -DEFINE_DIALOG(DIALOG_088, 1, 2, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_088, NO_SOUND, 2, 30, 200, "\ Benutze die Stange, um\n\ -nach unten zu gelangen!")) +nach unten zu gelangen!") -DEFINE_DIALOG(DIALOG_089, 1, 4, 95, 200, _("\ +DEFINE_DIALOG(DIALOG_089, NO_SOUND, 4, 95, 200, "\ Auf beiden Wegen lauern\n\ Gefahren. Links benötigst\n\ Du den Weitsprung, um\n\ weiterzukommen.\n\ Rechts: Arbeitsplattform\n\ -////Nebellabyrinth\n\ -Links:/Schwarzes Loch\n\ -////Höhlensee")) +\t\tNebellabyrinth\n\ +Links: Schwarzes Loch\n\ +\t\tHöhlensee") -DEFINE_DIALOG(DIALOG_090, 1, 5, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_090, SOUND_OBJ_BOWSER_LAUGH, 5, 30, 200, "\ Hua, hua, hua, ich wußte,\n\ daß Du mir in die Falle\n\ gehen würdest. Du solltest\n\ öfter auf Deine ulkigen\n\ -Füße schauen!")) +Füße schauen!") -DEFINE_DIALOG(DIALOG_091, 1, 3, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_091, NO_SOUND, 3, 30, 200, "\ Achtung, starke Böen!\n\ Aber es könnte auch eine\n\ -aufregende Reise werden!")) +aufregende Reise werden!") -DEFINE_DIALOG(DIALOG_092, 1, 4, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_092, SOUND_OBJ_BOWSER_LAUGH, 4, 30, 200, "\ Was willst Du denn schon\n\ wieder? Du bist ja\n\ lästiger als ein Schwarm\n\ @@ -1200,9 +1205,9 @@ Du schon mal hier bist:\n\ Gib mir die Power-Sterne\n\ zurück! Meine Truppen\n\ können sie besser\n\ -gebrauchen als Du.")) +gebrauchen als Du.") -DEFINE_DIALOG(DIALOG_093, 1, 4, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_093, SOUND_OBJ_BOWSER_LAUGH, 4, 30, 200, "\ Mario, wie schön Dich zu\n\ sehen! Ich dachte gerade\n\ an eine Grillparty - schon\n\ @@ -1214,23 +1219,23 @@ Nämlich Dich!\n\ Dann gehört die Prinzessin\n\ endgültig mir und ich bin\n\ auf ewig der Herrscher\n\ -des Schlosses!!!")) +des Schlosses!!!") -DEFINE_DIALOG(DIALOG_094, 1, 4, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_094, NO_SOUND, 4, 30, 200, "\ Erinnerst Du Dich noch an\n\ den Weitsprung? Renne,\n\ -drücke den [Z]-Knopf und\n\ -dann den [A]-Knopf!")) +drücke den Ⓩ-Knopf und\n\ +dann den Ⓐ-Knopf!") -DEFINE_DIALOG(DIALOG_095, 1, 3, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_095, NO_SOUND, 3, 30, 200, "\ Wie man Schilder liest,\n\ hast Du offensichtlich\n\ bereits herausgefunden.\n\ Auf die gleiche Weise\n\ kannst Du mit anderen\n\ -sprechen.")) +sprechen.") -DEFINE_DIALOG(DIALOG_096, 1, 4, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_096, NO_SOUND, 4, 30, 200, "\ Der Weg zur Burg ist\n\ sehr schmal! Selbst\n\ Wagemutige sollten sich\n\ @@ -1238,34 +1243,34 @@ langsam bewegen.\n\ Außerdem wecken leise\n\ Schritte niemanden, der\n\ schläft - was Dein\n\ -Vorteil sein könnte!")) +Vorteil sein könnte!") -DEFINE_DIALOG(DIALOG_097, 1, 6, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_097, NO_SOUND, 6, 30, 200, "\ Sei nicht schüchtern,\n\ sondern wehre Dich,\n\ wenn jemand versucht,\n\ Dich von einer Plattform\n\ zu schubsen. Sonst steigt\n\ -die Temperatur!")) +die Temperatur!") -DEFINE_DIALOG(DIALOG_098, 1, 1, 95, 200, _("\ -Komm nur näher, hehehe!")) +DEFINE_DIALOG(DIALOG_098, SOUND_OBJ_BOO_LAUGH_LONG, 1, 95, 200, "\ +Komm nur näher, hehehe!") -DEFINE_DIALOG(DIALOG_099, 1, 3, 95, 200, _("\ -")) +DEFINE_DIALOG(DIALOG_099, SOUND_OBJ_BOO_LAUGH_LONG, 3, 95, 200, "\ +") -DEFINE_DIALOG(DIALOG_100, 1, 2, 95, 200, _("\ +DEFINE_DIALOG(DIALOG_100, SOUND_OBJ_UKIKI_CHATTER_LONG, 2, 95, 200, "\ Jippiiiiieee, ich hab' sie!\n\ -Jetzt gehört sie mir!!!")) +Jetzt gehört sie mir!!!") -DEFINE_DIALOG(DIALOG_101, 1, 5, 95, 200, _("\ +DEFINE_DIALOG(DIALOG_101, SOUND_OBJ_UKIKI_CHATTER_LONG, 5, 95, 200, "\ Hgggnnnhhh! Laß...mich...\n\ los!!! Diese Mütze? Na\n\ gut, ich gebe sie Dir,\n\ obwohl sie mir besser\n\ -steht als Dir!")) +steht als Dir!") -DEFINE_DIALOG(DIALOG_102, 1, 5, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_102, NO_SOUND, 5, 30, 200, "\ Hey, pssst, paß mal auf:\n\ Die Geister sind sehr\n\ schüchtern. Siehst Du\n\ @@ -1275,21 +1280,21 @@ Drehst Du ihnen allerdings\n\ den Rücken zu, werden\n\ sie wieder sichtbar.\n\ Attackiere sie von hinten,\n\ -um sie zu besiegen.")) +um sie zu besiegen.") -DEFINE_DIALOG(DIALOG_103, 1, 4, 95, 200, _("\ +DEFINE_DIALOG(DIALOG_103, NO_SOUND, 4, 95, 200, "\ Die Pyramide ist von vier\n\ Säulen umgeben. Erklimme\n\ die Spitzen der Säulen, um\n\ -das Geheimnis zu lüften.")) +das Geheimnis zu lüften.") -DEFINE_DIALOG(DIALOG_104, 1, 4, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_104, NO_SOUND, 4, 30, 200, "\ Der Schattenstern vor Dir\n\ wird real, wenn Du die\n\ acht roten Münzen dieser\n\ -Welt findest.")) +Welt findest.") -DEFINE_DIALOG(DIALOG_105, 1, 5, 95, 200, _("\ +DEFINE_DIALOG(DIALOG_105, SOUND_OBJ_BOBOMB_BUDDY_TALK, 5, 95, 200, "\ Bist Du bereit? Dann rein\n\ mit Dir in die Kanone! Du\n\ kannst mir ihrer Hilfe\n\ @@ -1297,29 +1302,29 @@ die schwebende Insel\n\ erreichen!\n\ Benutze den Analog-Stick\n\ zum Zielen und feuere die\n\ -Kanone mit dem [A]-Knopf\n\ +Kanone mit dem Ⓐ-Knopf\n\ ab. Akrobaten bevorzugen\n\ -Bäume zur Landung!")) +Bäume zur Landung!") -DEFINE_DIALOG(DIALOG_106, 1, 2, 95, 200, _("\ +DEFINE_DIALOG(DIALOG_106, SOUND_OBJ_BOBOMB_BUDDY_TALK, 2, 95, 200, "\ Bist Du bereit? Dann rein\n\ -mit Dir in die Kanone!")) +mit Dir in die Kanone!") -DEFINE_DIALOG(DIALOG_107, 1, 4, 95, 200, _("\ +DEFINE_DIALOG(DIALOG_107, SOUND_OBJ_BOO_LAUGH_LONG, 4, 95, 200, "\ Das werde ich meinem\n\ großen Bruder erzählen!\n\ Dann kannst Du aber was\n\ -erleben...")) +erleben...") -DEFINE_DIALOG(DIALOG_108, 1, 6, 95, 200, _("\ +DEFINE_DIALOG(DIALOG_108, SOUND_OBJ_BOO_LAUGH_LONG, 6, 95, 200, "\ Ha-Boooo! Du bist also\n\ der Unruhestifter...\n\ Jetzt wirst Du das büßen,\n\ was Du mir und meinen\n\ Geschwistern angetan\n\ -hast...")) +hast...") -DEFINE_DIALOG(DIALOG_109, 1, 4, 95, 200, _("\ +DEFINE_DIALOG(DIALOG_109, NO_SOUND, 4, 95, 200, "\ Schnief, schnüff! Mein\n\ einst stattlicher Körper\n\ hat sich in Wasser\n\ @@ -1327,24 +1332,24 @@ aufgelöst.\n\ Ich würde alles für einen\n\ neuen Körper geben.\n\ Vielleicht kannst Du mir\n\ -helfen, schluchz?")) +helfen, schluchz?") -DEFINE_DIALOG(DIALOG_110, 1, 5, 95, 200, _("\ +DEFINE_DIALOG(DIALOG_110, NO_SOUND, 5, 95, 200, "\ Oh Mann, ich fühle mich\n\ so kopflos! Kennst Du\n\ jemanden, der nach einem\n\ Körper sucht? Unten?\n\ -Okay, dann los!")) +Okay, dann los!") -DEFINE_DIALOG(DIALOG_111, 1, 3, 95, 200, _("\ +DEFINE_DIALOG(DIALOG_111, NO_SOUND, 3, 95, 200, "\ Boah, welch komfortables\n\ Unterteil!\n\ Ich bin so glücklich...\n\ Hier, nimm den Stern.\n\ Ich hoffe, er bringt\n\ -Dir Glück!")) +Dir Glück!") -DEFINE_DIALOG(DIALOG_112, 1, 4, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_112, NO_SOUND, 4, 30, 200, "\ Sammle so viele Münzen,\n\ wie Du finden kannst.\n\ Sie geben Dir verlorene\n\ @@ -1360,17 +1365,17 @@ Deinen Power-Meter auf.\n\ Je schneller Du das Herz\n\ passierst, desto mehr\n\ verlorene Energie wird\n\ -ersetzt.")) +ersetzt.") -DEFINE_DIALOG(DIALOG_113, 1, 6, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_113, NO_SOUND, 6, 30, 200, "\ In den roten, blauen und\n\ grünen Blöcken befinden\n\ sich verschiedene Mützen.\n\ Du mußt die versteckten\n\ Schalter finden, um die\n\ -Blöcke öffnen zu können.")) +Blöcke öffnen zu können.") -DEFINE_DIALOG(DIALOG_114, 1, 4, 95, 200, _("\ +DEFINE_DIALOG(DIALOG_114, SOUND_OBJ2_BOSS_DIALOG_GRUNT, 4, 95, 200, "\ Das gibt es doch gar\n\ nicht! Was willst Du\n\ Wicht hier in meinem\n\ @@ -1378,15 +1383,15 @@ Reich?\n\ Ich werde Dich lehren,\n\ meine Befehle zu...\n\ Oh, diese vermaledeiten\n\ -Rückenschmerzen...!")) +Rückenschmerzen...!") -DEFINE_DIALOG(DIALOG_115, 1, 4, 95, 200, _("\ +DEFINE_DIALOG(DIALOG_115, SOUND_OBJ2_BOSS_DIALOG_GRUNT, 4, 95, 200, "\ Unglaublich! Du hast mich\n\ von meinen Kreuzschmerzen\n\ befreit! Als Dank gebe\n\ -ich Dir diesen Stern!")) +ich Dir diesen Stern!") -DEFINE_DIALOG(DIALOG_116, 1, 4, 95, 200, _("\ +DEFINE_DIALOG(DIALOG_116, SOUND_OBJ2_BOSS_DIALOG_GRUNT, 4, 95, 200, "\ Waaaaa...wie? Du hast\n\ mich besiegt...\n\ Ich verneige mein Haupt\n\ @@ -1402,9 +1407,9 @@ Trage ihn mit Stolz.\n\ Wenn Du mich wiedersehen\n\ willst, wähle den ersten\n\ Stern des Kursmenüs an!\n\ -Bis dann...")) +Bis dann...") -DEFINE_DIALOG(DIALOG_117, 1, 4, 95, 200, _("\ +DEFINE_DIALOG(DIALOG_117, SOUND_OBJ2_BOSS_DIALOG_GRUNT, 4, 95, 200, "\ Schritte? Grabräuber?\n\ Wer wagt es, den ewigen\n\ Frieden unseres Grabes\n\ @@ -1416,17 +1421,17 @@ werden!\n\ Unser Zorn wird ihn\n\ zermalmen und Ra stehe\n\ ihm bei, daß es schnell\n\ -gehen wird...")) +gehen wird...") -DEFINE_DIALOG(DIALOG_118, 1, 6, 95, 200, _("\ +DEFINE_DIALOG(DIALOG_118, SOUND_OBJ2_BOSS_DIALOG_GRUNT, 6, 95, 200, "\ Wir sind besiegt...\n\ Du hast den Fluch des\n\ Pharaos gebrochen.\n\ Jetzt finden wir unseren\n\ verdienten Frieden. Nimm\n\ -als Dank diesen Stern!")) +als Dank diesen Stern!") -DEFINE_DIALOG(DIALOG_119, 1, 6, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_119, NO_SOUND, 6, 30, 200, "\ Grrrr, offensichtlich war\n\ ich ein wenig unachtsam.\n\ Aber ich habe noch immer\n\ @@ -1438,9 +1443,9 @@ daß Du keine weiteren\n\ Sterne erlangen wirst.\n\ Unser nächstes Treffen\n\ wird einen anderen Sieger\n\ -haben...bestimmt!")) +haben...bestimmt!") -DEFINE_DIALOG(DIALOG_120, 1, 4, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_120, NO_SOUND, 4, 30, 200, "\ Woaaaah, Du hast schon\n\ wieder gewonnen.\n\ Hat mich etwa die Kraft\n\ @@ -1452,9 +1457,9 @@ besser vorbereitet!\n\ Ich warte am höchsten\n\ Punkt des Schlosses auf\n\ Dich...dort werden wir\n\ -sehen, wer stärker ist!")) +sehen, wer stärker ist!") -DEFINE_DIALOG(DIALOG_121, 1, 6, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_121, NO_SOUND, 6, 30, 200, "\ Aaaaaarrrgghh!\n\ Du...hast...gewonnen!\n\ Ich wollte mit meinen\n\ @@ -1466,53 +1471,53 @@ zurück in die Welten\n\ der Wandgemälde...leider!\n\ Jetzt bleibt mir nichts\n\ anderes mehr übrig, als\n\ -mein Ende abzuwarten...")) +mein Ende abzuwarten...") -DEFINE_DIALOG(DIALOG_122, 1, 4, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_122, NO_SOUND, 4, 30, 200, "\ Das Schwarze Loch\n\ Rechts: Arbeitsplattform\n\ -////Nebellabyrinth\n\ -Links:/Höhlensee")) +\t\tNebellabyrinth\n\ +Links: Höhlensee") -DEFINE_DIALOG(DIALOG_123, 1, 3, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_123, NO_SOUND, 3, 30, 200, "\ Titanenhöhle\n\ Rechts: Wasserfall\n\ -Links:/Grüner Schalter")) +Links: Grüner Schalter") -DEFINE_DIALOG(DIALOG_124, 1, 5, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_124, NO_SOUND, 5, 30, 200, "\ Arbeitsplattform\n\ Zur Beachtung:\n\ Aktiviere einen der\n\ Richtungspfeile, um die\n\ -Plattform zu bewegen.")) +Plattform zu bewegen.") -DEFINE_DIALOG(DIALOG_125, 1, 3, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_125, NO_SOUND, 3, 30, 200, "\ Rechts ist der Ausgang\n\ des Nebellabyrinths. Bitte\n\ -Eingang links benutzen!")) +Eingang links benutzen!") -DEFINE_DIALOG(DIALOG_126, 1, 3, 30, 200, _("\ -Oben:/ Schwarzes Loch\n\ +DEFINE_DIALOG(DIALOG_126, NO_SOUND, 3, 30, 200, "\ +Oben: Schwarzes Loch\n\ Rechts: Arbeitsplattform\n\ -////Nebellabyrinth")) +\t\tNebellabyrinth") -DEFINE_DIALOG(DIALOG_127, 1, 4, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_127, NO_SOUND, 4, 30, 200, "\ Höhlensee\n\ Rechts: Titanenhöhle\n\ -Links:/Verlassene Mine\n\ -////(Geschlossen!!!)\n\ +Links: Verlassene Mine\n\ +\t\t(Geschlossen!!!)\n\ Hier lebt ein Seemonster.\n\ Führe auf seinem Rücken\n\ eine Stampfattacke aus,\n\ -damit es den Kopf senkt!")) +damit es den Kopf senkt!") -DEFINE_DIALOG(DIALOG_128, 1, 4, 95, 200, _("\ +DEFINE_DIALOG(DIALOG_128, SOUND_OBJ_KING_BOBOMB_TALK, 4, 95, 200, "\ Hey, es ist gegen die\n\ königlichen Regeln, den\n\ Herrscher aus dem Ring\n\ -zu werfen!")) +zu werfen!") -DEFINE_DIALOG(DIALOG_129, 1, 4, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_129, NO_SOUND, 4, 30, 200, "\ Herzlich willkommen!\n\ In diesem Kurs kannst\n\ Du den blauen Schalter\n\ @@ -1524,9 +1529,9 @@ Dich unsichtbar machen!\n\ Auf diese Weise kannst Du\n\ durch bestimmte Wände\n\ gehen und Gegnern\n\ -ungesehen ausweichen.")) +ungesehen ausweichen.") -DEFINE_DIALOG(DIALOG_130, 1, 4, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_130, NO_SOUND, 4, 30, 200, "\ Herzlich willkommen!\n\ In diesem Kurs kannst\n\ Du den grünen Schalter\n\ @@ -1538,9 +1543,9 @@ Dich unbesiegbar machen.\n\ Bist Du mit diesen Mützen\n\ ausgerüstet, kannst Du\n\ unter Wasser laufen und\n\ -brauchst nicht zu atmen.")) +brauchst nicht zu atmen.") -DEFINE_DIALOG(DIALOG_131, 1, 4, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_131, NO_SOUND, 4, 30, 200, "\ Herzlich willkommen!\n\ In diesem Kurs kannst\n\ Du den roten Schalter\n\ @@ -1556,17 +1561,17 @@ wie bei einem Flugzeug.\n\ Bewege den Analog-Stick\n\ nach vorne, um zu sinken,\n\ und nach hinten, um zu\n\ -steigen!")) +steigen!") -DEFINE_DIALOG(DIALOG_132, 1, 3, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_132, SOUND_OBJ_BIG_PENGUIN_YELL, 3, 30, 200, "\ Tsetsetse...Mario!\n\ Du versuchst doch nicht\n\ etwa, mich zu betrügen?\n\ Abkürzungen sind nicht\n\ erlaubt.\n\ -Du bist disqualifiziert!")) +Du bist disqualifiziert!") -DEFINE_DIALOG(DIALOG_133, 1, 5, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_133, NO_SOUND, 5, 30, 200, "\ Ich freue mich, Dich zu\n\ sehen. Die Prinzessin...\n\ ich...und alle anderen\n\ @@ -1591,9 +1596,9 @@ Hast Du acht Sterne\n\ gesammelt, kannst Du die\n\ Tür mit dem großen Stern\n\ öffnen. Dahinter befindet\n\ -sich die Prinzessin!")) +sich die Prinzessin!") -DEFINE_DIALOG(DIALOG_134, 1, 4, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_134, NO_SOUND, 4, 30, 200, "\ Am Beginn jeder Welt\n\ erhältst Du einen Hinweis,\n\ wo der nächste Stern\n\ @@ -1605,9 +1610,9 @@ bestimmten Bedingungen.\n\ Nachdem Du ein paar\n\ Sterne gefunden hast,\n\ kannst Du Dich in anderen\n\ -Welten umsehen.")) +Welten umsehen.") -DEFINE_DIALOG(DIALOG_135, 1, 5, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_135, NO_SOUND, 5, 30, 200, "\ Bowser hat sich die\n\ Power-Sterne unter den\n\ Nagel gerissen. In jeder\n\ @@ -1622,9 +1627,9 @@ Bereits gefundene Sterne\n\ kannst Du zu Beginn jeder\n\ Welt sehen. Triff besiegte\n\ Gegner, indem Du erneut\n\ -ihren Stern anwählst.")) +ihren Stern anwählst.") -DEFINE_DIALOG(DIALOG_136, 1, 4, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_136, NO_SOUND, 4, 30, 200, "\ Wow, Du hast bereits so\n\ viele Sterne gefunden?\n\ Ich bin sicher, das war\n\ @@ -1648,9 +1653,9 @@ Boden stampfen.\n\ Halte Verletzungen gering,\n\ indem Du bei Stürzen im\n\ letzen Moment eine\n\ -Stampfattacke ausführst.")) +Stampfattacke ausführst.") -DEFINE_DIALOG(DIALOG_137, 1, 5, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_137, NO_SOUND, 5, 30, 200, "\ Vielen Dank! Du hast\n\ schon sehr viele Sterne\n\ gesammelt und Bowser in\n\ @@ -1660,15 +1665,15 @@ Wußtest Du eigentlich,\n\ daß Du in jeder Welt\n\ einen geheimen Stern\n\ erhältst, wenn Du\n\ -100 Münzen sammelst?")) +100 Münzen sammelst?") -DEFINE_DIALOG(DIALOG_138, 1, 4, 30, 200, _("\ -Unten:/Höhlensee\n\ -Links:/Schwarzes Loch\n\ +DEFINE_DIALOG(DIALOG_138, NO_SOUND, 4, 30, 200, "\ +Unten: Höhlensee\n\ +Links: Schwarzes Loch\n\ Rechts: Nebellabyrinth\n\ -////(Geschlossen!!!)")) +\t\t(Geschlossen!!!)") -DEFINE_DIALOG(DIALOG_139, 1, 4, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_139, NO_SOUND, 4, 30, 200, "\ Automatische Plattform\n\ Sobald Du diese Plattform\n\ betrittst, setzt sie sich\n\ @@ -1676,17 +1681,17 @@ in Bewegung.\n\ Sie folgt einem\n\ programmierten Kurs und\n\ verschwindet automatisch,\n\ -wenn Du sie verläßt.")) +wenn Du sie verläßt.") -DEFINE_DIALOG(DIALOG_140, 1, 6, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_140, NO_SOUND, 6, 30, 200, "\ Arbeitsplattform\n\ Rechts: Nebellabyrinth\n\ -////Eingang\n\ -Links:/Schwarzes Loch\n\ -////Aufzug 1\n\ -Pfeil:/Standort")) +\t\tEingang\n\ +Links: Schwarzes Loch\n\ +\t\tAufzug 1\n\ +Pfeil: Standort") -DEFINE_DIALOG(DIALOG_141, 1, 5, 150, 200, _("\ +DEFINE_DIALOG(DIALOG_141, NO_SOUND, 5, 150, 200, "\ Du hast einen der\n\ gestohlenen Power-Sterne\n\ gefunden.\n\ @@ -1701,9 +1706,9 @@ Halte Bowser auf und\n\ rette uns und die\n\ Power-Sterne.\n\ Wir zählen auf Dich und\n\ -drücken Dir die Daumen.")) +drücken Dir die Daumen.") -DEFINE_DIALOG(DIALOG_142, 1, 5, 150, 200, _("\ +DEFINE_DIALOG(DIALOG_142, NO_SOUND, 5, 150, 200, "\ Du hast drei magische\n\ Power-Sterne gesammelt.\n\ Jetzt kannst Du jede Tür\n\ @@ -1713,17 +1718,17 @@ Du kannst die Türen so oft\n\ passieren, wie Du willst.\n\ Aber paß auf: In höheren\n\ Stockwerken werden die\n\ -Gegner viel stärker!")) +Gegner viel stärker!") -DEFINE_DIALOG(DIALOG_143, 1, 6, 150, 200, _("\ +DEFINE_DIALOG(DIALOG_143, NO_SOUND, 6, 150, 200, "\ Du hast acht Sterne\n\ gesammelt. Jetzt kannst\n\ Du die Tür mit dem\n\ großen Stern öffnen.\n\ Die Prinzessin hält sich\n\ -dahinter auf!")) +dahinter auf!") -DEFINE_DIALOG(DIALOG_144, 1, 5, 150, 200, _("\ +DEFINE_DIALOG(DIALOG_144, NO_SOUND, 5, 150, 200, "\ Du hast 30 Power-Sterne\n\ gesammelt. Jetzt kannst\n\ Du die Tür mit dem\n\ @@ -1738,9 +1743,9 @@ Wenn ja, mußt Du den\n\ Riesengeier mit einer\n\ Stampfattacke besiegen!\n\ Ach ja: Bowser hält sich\n\ -jetzt im Untergrund auf.")) +jetzt im Untergrund auf.") -DEFINE_DIALOG(DIALOG_145, 1, 4, 150, 200, _("\ +DEFINE_DIALOG(DIALOG_145, NO_SOUND, 4, 150, 200, "\ Du hast 50 Power-Sterne\n\ gesammelt. Jetzt kannst\n\ Du die Tür mit dem großen\n\ @@ -1748,17 +1753,17 @@ Stern im 3. Stock öffnen.\n\ Hast Du bereits alle\n\ Schalterpaläste gefunden?\n\ Diese besonderen Mützen\n\ -sind sehr nützlich.")) +sind sehr nützlich.") -DEFINE_DIALOG(DIALOG_146, 1, 6, 150, 200, _("\ +DEFINE_DIALOG(DIALOG_146, NO_SOUND, 6, 150, 200, "\ Du hast 70 Power-Sterne\n\ gesammelt. Jetzt kannst\n\ Du das Geheimnis der\n\ endlosen Treppe lüften.\n\ Begib Dich zum finalen\n\ -Duell mit Bowser!")) +Duell mit Bowser!") -DEFINE_DIALOG(DIALOG_147, 1, 4, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_147, NO_SOUND, 4, 30, 200, "\ Bevor Du weitergehst,\n\ solltest Du nach den\n\ versteckten Schaltern\n\ @@ -1774,9 +1779,9 @@ und in blauen Tarnkappen.\n\ Allerdings mußt Du bereits\n\ einige Sterne besitzen, um\n\ die Schalterpaläste finden\n\ -zu können!")) +zu können!") -DEFINE_DIALOG(DIALOG_148, 1, 4, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_148, NO_SOUND, 4, 30, 200, "\ Achtung, Achtung!\n\ Versuche bloß nicht, den\n\ Berg mit dem Dreisprung\n\ @@ -1784,9 +1789,9 @@ zu erreichen!\n\ Außerdem ist das Wasser\n\ sehr kalt - Deine Fitness\n\ könnte bei einem Bad\n\ -großen Schaden nehmen!")) +großen Schaden nehmen!") -DEFINE_DIALOG(DIALOG_149, 1, 5, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_149, NO_SOUND, 5, 30, 200, "\ Willkommen auf der\n\ Rutschbahn der Prinzessin.\n\ Hier befindet sich ein\n\ @@ -1796,9 +1801,9 @@ Drücke den Analog-Stick\n\ nach vorne, um zu\n\ beschleunigen.\n\ Wenn Du sehr schnell bist,\n\ -erhältst Du den Stern.")) +erhältst Du den Stern.") -DEFINE_DIALOG(DIALOG_150, 1, 5, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_150, SOUND_OBJ_WIGGLER_TALK, 5, 30, 200, "\ Aaaaaah! Sieh Dir diese\n\ Schweinerei an. Du hast\n\ meine Wohnung überflutet.\n\ @@ -1808,9 +1813,9 @@ Ich bin stinksauer! Alles\n\ läuft schief, seit ich\n\ diesen dämlichen Stern\n\ gefunden habe. Ich...\n\ -Ich...werde...")) +Ich...werde...") -DEFINE_DIALOG(DIALOG_151, 1, 5, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_151, SOUND_OBJ_WIGGLER_TALK, 5, 30, 200, "\ Ich halte das nicht mehr\n\ aus - zuerst überflutest\n\ Du meine Wohnung und\n\ @@ -1820,9 +1825,9 @@ Mir reicht's! Ich werde\n\ Dir richtiges Benehmen\n\ beibringen! Du...Ich...\n\ werde Dich...Ich werde\n\ -Dich lehren...")) +Dich lehren...") -DEFINE_DIALOG(DIALOG_152, 1, 4, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_152, SOUND_OBJ_WIGGLER_TALK, 4, 30, 200, "\ Ooooh, halt, halt! Ich\n\ gebe auf. Hier, nimm\n\ den Stern. Ich brauche\n\ @@ -1830,9 +1835,9 @@ ihn nicht mehr.\n\ Ich kann mir die Sterne\n\ durch das Loch in der\n\ Decke ansehen, wann\n\ -immer ich möchte.")) +immer ich möchte.") -DEFINE_DIALOG(DIALOG_153, 1, 4, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_153, NO_SOUND, 4, 30, 200, "\ Hey, wer ist da? Wer\n\ meint, auf mir 'rumlaufen\n\ zu müssen? Ein Eisfloh\n\ @@ -1840,17 +1845,17 @@ oder eine Schneefliege?\n\ Egal, was es ist, auf\n\ jeden Fall stört es mich.\n\ Aber mein Eisatem wird\n\ -mich davon befreien!")) +mich davon befreien!") -DEFINE_DIALOG(DIALOG_154, 1, 6, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_154, NO_SOUND, 6, 30, 200, "\ Paß gut auf Deine Mütze\n\ auf - ohne sie bist Du\n\ leicht verletzbar!\n\ Wenn Du sie verloren hast,\n\ findest Du sie in\n\ -derselben Welt wieder.")) +derselben Welt wieder.") -DEFINE_DIALOG(DIALOG_155, 1, 3, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_155, NO_SOUND, 3, 30, 200, "\ Hi, Mario! Ich erzähle\n\ Dir einige Geheimnisse\n\ des Schlosses:\n\ @@ -1871,15 +1876,15 @@ Wassers durch die Sprünge\n\ ins Gemälde beeinflussen.\n\ Am besten schaust Du Dir\n\ die Wirkung direkt im\n\ -Gemälde an!")) +Gemälde an!") -DEFINE_DIALOG(DIALOG_156, 1, 4, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_156, NO_SOUND, 4, 30, 200, "\ Diese Uhr ist wirklich\n\ ungewöhnlich. Ihr Inneres\n\ verändert sich im Laufe\n\ -der Zeit.")) +der Zeit.") -DEFINE_DIALOG(DIALOG_157, 1, 5, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_157, NO_SOUND, 5, 30, 200, "\ Achte auf den Treibsand!\n\ Solltest Du einmal darin\n\ versinken, findet Dein\n\ @@ -1889,9 +1894,9 @@ Schwarze Löcher sind\n\ bodenlose Fallen. Du wirst\n\ das Gemälde neu betreten\n\ müssen, wenn Du in eines\n\ -dieser Löcher hineinfällst.")) +dieser Löcher hineinfällst.") -DEFINE_DIALOG(DIALOG_158, 1, 6, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_158, NO_SOUND, 6, 30, 200, "\ Mit dem richtigen Timing\n\ kannst Du sehr hoch\n\ springen. Den Dreisprung\n\ @@ -1903,27 +1908,27 @@ effektive Methode, um\n\ hohe Stellen zu erreichen.\n\ Springe an eine Wand.\n\ Sobald Du sie berührst,\n\ -mußt Du erneut springen!")) +mußt Du erneut springen!") -DEFINE_DIALOG(DIALOG_159, 1, 4, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_159, NO_SOUND, 4, 30, 200, "\ Gehst Du in die Hocke und\n\ drückst den Sprungknopf,\n\ kannst Du einen\n\ Rückwärtssalto ausführen.\n\ Du machst einen\n\ Weitsprung, wenn Du im\n\ -Rennen den [Z]-Knopf\n\ -drückst und springst.")) +Rennen den Ⓩ-Knopf\n\ +drückst und springst.") -DEFINE_DIALOG(DIALOG_160, 1, 6, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_160, NO_SOUND, 6, 30, 200, "\ Drücke im Rennen den\n\ -[B]-Knopf, um einen\n\ +Ⓑ-Knopf, um einen\n\ Hechtsprung zu machen.\n\ -Mit dem [A]- oder [B]-Knopf\n\ +Mit dem Ⓐ- oder Ⓑ-Knopf\n\ kommt Mario auf die Füße\n\ -zurück.")) +zurück.") -DEFINE_DIALOG(DIALOG_161, 1, 5, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_161, SOUND_GENERAL_YOSHI_TALK, 5, 30, 200, "\ Hey... Mario!!! Seit\n\ unserem letzten Abenteuer\n\ ist viel Zeit vergangen.\n\ @@ -1963,9 +1968,9 @@ Es könnte sein, daß Du\n\ dabei neue Entdeckungen\n\ machst, die Dir bis jetzt\n\ verborgen geblieben sind.\n\ -Das Super Mario 64 Team")) +Das Super Mario 64 Team") -DEFINE_DIALOG(DIALOG_162, 1, 4, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_162, NO_SOUND, 4, 30, 200, "\ Nein, nein, nein! Nicht\n\ Du schon wieder! Ich habe\n\ jetzt wirklich keine Zeit,\n\ @@ -1973,9 +1978,9 @@ jetzt wirklich keine Zeit,\n\ Hier, nimm ihn und laß\n\ mich runter. Ich habe noch\n\ wichtige Geschäfte zu\n\ -erledigen!")) +erledigen!") -DEFINE_DIALOG(DIALOG_163, 1, 5, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_163, NO_SOUND, 5, 30, 200, "\ Ich glaub's nicht! Du hast\n\ mich besiegt...wie konnte\n\ das nur geschehen. Meine\n\ @@ -1995,9 +2000,9 @@ Das kann ich mir nicht\n\ länger ansehen - ich\n\ verschwinde. So long...\n\ Bis zum nächsten Mal.\n\ -Ich komme wieder...")) +Ich komme wieder...") -DEFINE_DIALOG(DIALOG_164, 1, 6, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_164, NO_SOUND, 6, 30, 200, "\ Hi! Wie geht's, Mario?\n\ Ich bin zwar etwas außer\n\ Übung, aber ein Rennen\n\ @@ -2008,46 +2013,46 @@ Also, Kumpel, wie steht's?\n\ Sollen wir ein kleines\n\ Match wagen?\n\ \n\ -//Okay!///Später!")) +\tOkay!\t Später!") -DEFINE_DIALOG(DIALOG_165, 1, 4, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_165, NO_SOUND, 4, 30, 200, "\ Sei vorsichtig, wenn Du\n\ um den Pfahl herumrennst,\n\ damit Dir nicht schlecht\n\ -wird!")) +wird!") -DEFINE_DIALOG(DIALOG_166, 1, 5, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_166, NO_SOUND, 5, 30, 200, "\ Ich mache gerade einen\n\ kleinen Waldlauf. Komm\n\ doch später wieder\n\ vorbei!\n\ -Dein Freund Koopa")) +Dein Freund Koopa") -DEFINE_DIALOG(DIALOG_167, 1, 4, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_167, NO_SOUND, 4, 30, 200, "\ Dort vorne ist das\n\ Schloss der Prinzessin.\n\ Sieh Dich zunächst hier\n\ im Schlossgarten um.\n\ Die Steuerung ist ganz\n\ einfach:\n\ -Drücke den [A]-Knopf, um\n\ +Drücke den Ⓐ-Knopf, um\n\ zu springen.\n\ Schläge kannst Du mit\n\ -dem [B]-Knopf ausführen.\n\ -Drückst Du den [Z]-Knopf,\n\ +dem Ⓑ-Knopf ausführen.\n\ +Drückst Du den Ⓩ-Knopf,\n\ duckt sich Mario.\n\ Schilder kannst Du mit\n\ -dem [A]- oder [B]-Knopf\n\ +dem Ⓐ- oder Ⓑ-Knopf\n\ lesen, wenn Du direkt\n\ -davor stehst.")) +davor stehst.") -DEFINE_DIALOG(DIALOG_168, 1, 4, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_168, SOUND_OBJ_WIGGLER_TALK, 4, 30, 200, "\ Bist Du immer noch hier?\n\ Findest Du nicht, daß\n\ Du bereits genug Schaden\n\ -angerichtet hast?")) +angerichtet hast?") -DEFINE_DIALOG(DIALOG_169, 1, 4, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_169, NO_SOUND, 4, 30, 200, "\ Dies ist die erste und\n\ letzte Warnung:\n\ Das Betreten dieser\n\ @@ -2055,4 +2060,4 @@ Höhle ist verboten!!!\n\ Wer sich hier ohne meine\n\ Erlaubnis Zutritt\n\ verschafft, handelt sich\n\ -eine Menge Ärger ein!!!")) +eine Menge Ärger ein!!!") diff --git a/text/define_courses.inc.c b/text/define_courses.inc.c index 3a67c531e..9a9cc5b2b 100644 --- a/text/define_courses.inc.c +++ b/text/define_courses.inc.c @@ -1,26 +1,29 @@ +#undef COURSE_ACTS #define COURSE_ACTS(id, name, a,b,c,d,e,f) \ - static const u8 GLUE2(COURSE_TABLE, _ ## id)[] = { name }; + static const char GLUE2(COURSE_NAME_TABLE, _ ## id)[] = { name }; +#undef SECRET_STAR #define SECRET_STAR(id, name) \ - static const u8 GLUE2(COURSE_TABLE, _ ## id)[] = { name }; + static const char GLUE2(COURSE_NAME_TABLE, _ ## id)[] = { name }; +#undef CASTLE_SECRET_STARS #define CASTLE_SECRET_STARS(str) \ - static const u8 GLUE2(COURSE_TABLE, _castle_secret_stars)[] = { str }; + static const char GLUE2(COURSE_NAME_TABLE, _castle_secret_stars)[] = { str }; #define EXTRA_TEXT(id, str) -#include "courses.h" +#include COURSE_FILE #undef COURSE_ACTS #undef SECRET_STAR #undef CASTLE_SECRET_STARS -#define COURSE_ACTS(id, name, a,b,c,d,e,f) GLUE2(COURSE_TABLE, _ ## id), -#define SECRET_STAR(id, name) GLUE2(COURSE_TABLE, _ ## id), -#define CASTLE_SECRET_STARS(str) GLUE2(COURSE_TABLE, _castle_secret_stars), +#define COURSE_ACTS(id, name, a,b,c,d,e,f) GLUE2(COURSE_NAME_TABLE, _ ## id), +#define SECRET_STAR(id, name) GLUE2(COURSE_NAME_TABLE, _ ## id), +#define CASTLE_SECRET_STARS(str) GLUE2(COURSE_NAME_TABLE, _castle_secret_stars), -const u8 *const COURSE_TABLE[] = { -#include "courses.h" +const char *const COURSE_NAME_TABLE[] = { +#include COURSE_FILE NULL }; diff --git a/text/define_text.inc.c b/text/define_text.inc.c index a7925f17a..c2abf7dcb 100644 --- a/text/define_text.inc.c +++ b/text/define_text.inc.c @@ -1,24 +1,27 @@ // == dialog == // (defines en_dialog_table etc.) -#define DEFINE_DIALOG(id, _1, _2, _3, _4, str) \ - static const u8 dialog_text_ ## id[] = { str }; - -#include "dialogs.h" +#include "game/ingame_menu.h" #undef DEFINE_DIALOG -#define DEFINE_DIALOG(id, unused, linesPerBox, leftOffset, width, _) \ +#define DEFINE_DIALOG(id, _1, _2, _3, _4, str) \ + static const char dialog_text_ ## id[] = { str }; + +#include DIALOG_FILE + +#undef DEFINE_DIALOG +#define DEFINE_DIALOG(id, voice, linesPerBox, leftOffset, width, _) \ static const struct DialogEntry dialog_entry_ ## id = { \ - unused, linesPerBox, leftOffset, width, dialog_text_ ## id \ + voice, linesPerBox, leftOffset, width, dialog_text_ ## id \ }; -#include "dialogs.h" +#include DIALOG_FILE #undef DEFINE_DIALOG #define DEFINE_DIALOG(id, _1, _2, _3, _4, _5) &dialog_entry_ ## id, -const struct DialogEntry *const seg2_dialog_table[] = { -#include "dialogs.h" +const struct DialogEntry *const DIALOG_TABLE[] = { +#include DIALOG_FILE NULL }; @@ -28,28 +31,27 @@ const struct DialogEntry *const seg2_dialog_table[] = { // The game duplicates this in levels/menu/leveldata.c in EU, so we split // it out into a separate include file. -#define COURSE_TABLE seg2_course_name_table #include "define_courses.inc.c" // == acts == // (defines en_act_name_table etc.) #define COURSE_ACTS(id, name, a,b,c,d,e,f) \ - static const u8 act_name_ ## id ## _1[] = { a }; \ - static const u8 act_name_ ## id ## _2[] = { b }; \ - static const u8 act_name_ ## id ## _3[] = { c }; \ - static const u8 act_name_ ## id ## _4[] = { d }; \ - static const u8 act_name_ ## id ## _5[] = { e }; \ - static const u8 act_name_ ## id ## _6[] = { f }; + static const char act_name_ ## id ## _1[] = { a }; \ + static const char act_name_ ## id ## _2[] = { b }; \ + static const char act_name_ ## id ## _3[] = { c }; \ + static const char act_name_ ## id ## _4[] = { d }; \ + static const char act_name_ ## id ## _5[] = { e }; \ + static const char act_name_ ## id ## _6[] = { f }; #define SECRET_STAR(id, name) #define CASTLE_SECRET_STARS(str) #undef EXTRA_TEXT #define EXTRA_TEXT(id, str) \ - static const u8 extra_text_ ## id[] = { str }; + static const char extra_text_ ## id[] = { str }; -#include "courses.h" +#include COURSE_FILE #undef COURSE_ACTS #undef EXTRA_TEXT @@ -59,7 +61,10 @@ const struct DialogEntry *const seg2_dialog_table[] = { act_name_ ## id ## _4, act_name_ ## id ## _5, act_name_ ## id ## _6, #define EXTRA_TEXT(id, str) extra_text_ ## id, -const u8 *const seg2_act_name_table[] = { -#include "courses.h" +const char *const ACT_NAME_TABLE[] = { +#include COURSE_FILE NULL }; + +#undef COURSE_ACTS +#undef EXTRA_TEXT diff --git a/text/es/courses.h b/text/es/courses.h new file mode 100644 index 000000000..9129064fd --- /dev/null +++ b/text/es/courses.h @@ -0,0 +1,80 @@ +COURSE_ACTS(COURSE_BOB, "FRENTE BOB-OMB", + "REY BOB-OMB EN LA CIMA" , "CARRERA CON KOOPA EL RÁPIDO" , "CAÑONAZO A LA ISLA EN EL CIELO", + "ENCUENTRA LAS 8 MONEDAS ROJAS" , "MARIO ALADO POR EL CIELO" , "TRAS LAS REJAS DE CHOMP CADENAS") + +COURSE_ACTS(COURSE_WF, " FORTALEZA ROCO", + "DERROTA AL REY ROCO" , "EN LO MÁS ALTO DE LA FORTALEZA" , "CAÑONAZO AL CIELO", + "MONEDAS ROJAS EN LA ISLA FLOANTE", "CAE EN LA ISLA ENJAULADA" , "REVIENTA LA PARED") + +COURSE_ACTS(COURSE_JRB, "BAHÍA PIRATA", + "SAQUEA EL BARCO HUNDIDO" , "¿PUEDE SALIR LA ANGUILA A JUGAR?" , "TESORO DE LA CUEVA DEL OCÉANO", + "MONEDAS ROJAS EN EL BARCO FLOTANTE" , "CAÑONAZO AL PILAR DE PIEDRA" , "A CONTRACORRIENTE") + +COURSE_ACTS(COURSE_CCM, "MONTAÑA HELADA", + "RESBÁLATE Y DESLÍZATE" , "PEQUEÑO PINGÜINO PERDIDO" , "CARRERA CONTRA EL GRAN PINGÜINO", + "MONEDAS ROJAS EN EL TOBOGÁN REFRESCANTE" , "EL MUÑECO DE NIEVE HA PERDIDO LA CABEZA" , "LOS SALTOS EN PARED TE SERVIRÁN") + +COURSE_ACTS(COURSE_BBH, "GRAN SUSTO BOO", + "CAZAFANTASMAS" , "SUBE AL TIOVIVO DEL GRAN BOO" , "SECRETO DE LOS LIBROS ENCANTADOS", + "BUSCA LAS 8 MONEDAS ROJAS" , "EL BALCÓN DEL GRAN BOO" , "OJO POR OJO EN LA SALA OCULTA") + +COURSE_ACTS(COURSE_HMC, "CUEVA LABERÍNTICA", + "MONSTRUO NADADOR EN LA CAVERNA" , "ELÉVATE A POR LAS 8 MONEDAS" , "¡MARIO METALERO SE MUEVE!", + "NAVEGA EL LABERINTO TÓXICO" , "SALIDA DE EMERGENCIA DEL LABERINTO" , "PELIGRO DE DESPRENDIMIENTO") + +COURSE_ACTS(COURSE_LLL, "TIERRA DE LAVA LETAL", + "HIERVE AL GRAN BULLY" , "HAZLE BULLYING A LOS BULLIES" , "8 MONEDAS ROJAS, 15 PIEZAS DE PUZZLE", + "TRONCO ARDIENTE Y RODANTE" , "DE CABEZA AL VOLCÁN" , "TOUR DE ASCENSORES EN EL VOLCÁN") + +COURSE_ACTS(COURSE_SSL, "ARENAS CAMBIANTES", + "EN LOS TALONES DE LA GRAN AVE" , "RELUCE EN LO ALTO DE LA PIRÁMIDE" , "DENTRO DE LA ANTIGUA PIRÁMIDE", + "PISA LOS CUATRO PILARES", "VUELO LIBRE POR 8 MONEDAS ROJAS" , "PUZZLE PIRAMIDAL") + +COURSE_ACTS(COURSE_DDD, "MUELLE DESOLADO", + "INVADE EL SUBMARINO DE BOWSER" , "COFRES EN LA CORRIENTE" , "MONEDAS ROJAS DE PALO EN PALO", + "A CONTRACORRIENTE" , "LA RECOMPENSA DE LA MANTA" , "CONSIGUE LAS GORRAS...") + +COURSE_ACTS(COURSE_SL, "PAÍS MUÑECO DE NIEVE", + "EL CABEZÓN DEL MUÑECO DE NIEVE" , "REFRÉSCATE CON EL BULLY" , "CONGELAMIENTO PROFUNDO", + "TORBELLINO DESDE EL LAGO HELADO" , "8 MONEDAS ROJAS EN CAPARAZÓN" , "DENTRO DEL IGLÚ") + +COURSE_ACTS(COURSE_WDW, "MUNDO MOJASECA", + "¡ASCENSORES ELECTRIFICANTES!" , "EN LO ALTO DEL PUEBLO" , "SECRETOS EN LOS HUECOS Y EL CIELO", + "ASCENSOR EXPRESS - ¡DATE PRISA!" , "VETE AL PUEBLO A POR MONEDAS ROJAS" , "¡A TODA PRISA POR EL PUEBLO!") + +COURSE_ACTS(COURSE_TTM, "MONTAÑA SUBE-SUBE", + "ESCALA LA MONTAÑA" , "EL MISTERIO DE LA JAULA DEL MONO" , "CHAMPIÑONES ESCALOFRIANTES, MONEDAS ROJAS", + "EL LADO MISTERIOSO DE LA MONTAÑA" , "VISTA INCREÍBLE DESDE EL PUENTE" , "CAÑONAZO AL CHAMPIÑÓN SOLITARIO") + +COURSE_ACTS(COURSE_THI, "ISLA CAMBIANTE", + "ARRANCA LA PLANTA PIRAÑA" , "LA CIMA DE LA ISLA GIGANTE", "REVANCHA DE KOOPA EL RÁPIDO", + "CINCO SECRETITOS DE NADA" , "LAS MONEDAS ROJAS DE WIGGLER" , "HAZ QUE WIGGLER SE RETUERZA") + +COURSE_ACTS(COURSE_TTC, "RELOJ TIC TAC", + "SALTA A LA JAULA" , "EL VACÍO Y LOS PÉNDULOS" , "¿TE ECHO UNA MANECILLA?", + "PISOTEA AL THWOMP" , "SALTOS PRECISOS EN LAS BARRAS" , "PARA EL TIEMPO, CONSIGUE MONEDAS ROJAS") + +COURSE_ACTS(COURSE_RR, "CAMINO DEL ARCOÍRIS", + "CRUCERO POR EL ARCOÍRIS" , "LA GRAN CASA EN EL CIELO" , "MONEDAS EN EL LABERINTO", + "SALTANDO POR LAS CORRIENTES" , "¡TRIÁNGULOS CON TRUCO!" , "POR ENCIMA DEL ARCOÍRIS") + +SECRET_STAR(COURSE_BITDW, "BOWSER EN EL MUNDO OSCURO") +SECRET_STAR(COURSE_BITFS, "BOWSER EN EL MAR DE FUEGO") +SECRET_STAR(COURSE_BITS, "BOWSER EN EL CIELO") +SECRET_STAR(COURSE_PSS, "EL TOBOGÁN SECRETO DE LA PRINCESA") +SECRET_STAR(COURSE_COTMC, "CAVERNA DE LA GORRA DE METAL") +SECRET_STAR(COURSE_TOTWC, "TORRE DE LA GORRA VOLADORA") +SECRET_STAR(COURSE_VCUTM, "FOSO DE LA GORRA DE INVISIBILIDAD") +SECRET_STAR(COURSE_WMOTR, "MARIO ALADO SOBRE EL ARCOÍRIS") +SECRET_STAR(COURSE_SA, "EL ACUARIO SECRETO") +SECRET_STAR(COURSE_CAKE_END, "") + +CASTLE_SECRET_STARS("ESTRELLAS SECRETAS") + +EXTRA_TEXT(0, "¡UNA DE LAS ESTRELLAS SECRETAS!") +EXTRA_TEXT(1, "") +EXTRA_TEXT(2, "") +EXTRA_TEXT(3, "") +EXTRA_TEXT(4, "") +EXTRA_TEXT(5, "") +EXTRA_TEXT(6, "") diff --git a/text/es/dialogs.h b/text/es/dialogs.h new file mode 100644 index 000000000..d0c57e7f6 --- /dev/null +++ b/text/es/dialogs.h @@ -0,0 +1,2273 @@ +// Parameters: dialog enum ID, voice sound, lines per box, left offset, width + +DEFINE_DIALOG(DIALOG_000, NO_SOUND, 7, 30, 200, "\ +¡Guau! Has acabado en\n\ +mitad de un campo de\n\ +batalla. Encontrarás las\n\ +estrellas que Bowser robó\n\ +dentro de los mundos\n\ +de los cuadros.\n\ +\n\ +Primero, habla con\n\ +este amable Bob-omb.\n\ +(Ⓑ para hablar). Te\n\ +ayudará, y también\n\ +sus camaradas en otros\n\ +lugares.\n\ +\n\ +Para leer carteles,\n\ +párate, míralos y pulsa\n\ +Ⓑ. Pulsa Ⓐ o Ⓑ\n\ +para seguir leyendo. \n\ +Puedes hablar con algunos\n\ +personajes mirándoles\n\ +y pulsando Ⓑ.") + +DEFINE_DIALOG(DIALOG_001, SOUND_OBJ_BOBOMB_BUDDY_TALK, 7, 95, 200, "\ +¡Ten cuidado! ¡Si\n\ +merodeas por aquí, es\n\ +muy probable que seas\n\ +víctima de una bomba\n\ +de agua!\n\ +\n\ +\n\ +¡A esos Bob-omb\n\ +enemigos les encanta\n\ +luchar, y siempre están\n\ +buscando nuevas maneras\n\ +de atacar.\n\ +\n\ +\n\ +Este prado lleva siendo\n\ +un campo de batalla\n\ +desde que el Gran\n\ +Bob-Omb puso sus\n\ +garras en la \n\ +estrella de Poder.\n\ +\n\ +¿Podrías recuperar la\n\ +estrella por nosotros?\n\ +Cruza el puente y ve\n\ +hacia la izquierda\n\ +por el camino para\n\ +llegar hasta el Gran\n\ +Bob-Omb.\n\ +Por favor,\n\ +ven a verme otra vez\n\ +cuando hayas conseguido\n\ +la estrella de Poder.") + +DEFINE_DIALOG(DIALOG_002, SOUND_OBJ_BOBOMB_BUDDY_TALK, 6, 95, 200, "\ +¡Hey, tú! ¡Es peligroso\n\ +seguir adelante, así que\n\ +escucha lo que tengo\n\ +que decirte!\n\ +\n\ +\n\ +Cruza los dos puentes\n\ +que hay más adelante,\n\ +y tras cruzar, ten\n\ +cuidado con las bombas\n\ +de agua que están\n\ +cayendo.\n\ +El Gran Bob-omb en lo\n\ +alto de la montaña\n\ +es muy fuerte: ¡no\n\ +dejes que te coja!\n\ +\n\ +\n\ +Somos Bob-omb amigables,\n\ +y estamos de tu lado.\n\ +¡Puedes hablarnos\n\ +siempre que quieras!") + +DEFINE_DIALOG(DIALOG_003, SOUND_OBJ_BOBOMB_BUDDY_TALK, 6, 95, 200, "\ +¡Gracias, Mario! ¡El Gran\n\ +Bob-omb ya no es más que\n\ +el gran abombao! Pero la\n\ +batalla por el castillo no\n\ +ha hecho más que empezar.\n\ +\n\ +Hay otros enemigos que\n\ +tienen estrellas de poder.\n\ +Si consigues más\n\ +estrellas, ¡podrás abrir\n\ +más puertas que conducen\n\ +a nuevos mundos!\n\ +Mis amigos Bob-omb te\n\ +están esperando. Asegúrate\n\ +de hablar con ellos: te \n\ +prepararán los cañones.") + +DEFINE_DIALOG(DIALOG_004, SOUND_OBJ_BOBOMB_BUDDY_TALK, 3, 95, 200, "\ +Somos Bob-omb amantes de\n\ +la paz, así que no usamos\n\ +los cañones.\n\ +Pero si quieres salir\n\ +disparado, no hay.\n\ +problema. Ponte cómodo.\n\ +Prepararemos los cañones\n\ +de esta área para que.\n\ +puedas utilizarlos\n\ +¡Bon voyage!") + +DEFINE_DIALOG(DIALOG_005, SOUND_OBJ_KOOPA_TALK, 3, 30, 200, "\ +¡Oye, Mario! ¿Es verdad\n\ +que derrotaste al Gran\n\ +Bob-omb? ¡Guay!\n\ +Debes ser fuerte. Y\n\ +rápido. Pero, ¿cómo de\n\ +rápido, eh?\n\ +¿Lo suficiente para vencer\n\ +a Koopa el Rápido? No \n\ +creo. Venga, inténtalo.\n\ +¿Qué tal una carrera a la\n\ +cima de la montaña, donde\n\ +estaba el Gran Bob-omb?\n\ +¿Qué me dices? ¿Tienes\n\ +agallas para enfrentarte a\n\ +este koorredor?\n\ +Cuando diga\n\ +“Ya,” ¡empezamos!\n\ +\n\ +Preparados, listos...\n\ +\n\ +\t¡Ya!\t\tTe esperas") + +DEFINE_DIALOG(DIALOG_006, SOUND_OBJ_KOOPA_TALK, 4, 30, 200, "\ +¡¡¡Oye!!! ¡No intentes\n\ +colármela! Tienes que\n\ +hacer el recorrido\n\ +completo. Venga, chao.\n\ +Ya me avisarás\n\ +cuando quieras echar\n\ +una carrera de verdad.") + +DEFINE_DIALOG(DIALOG_007, SOUND_OBJ_KOOPA_TALK, 5, 30, 200, "\ +Hufff...fff...pufff...\n\ +¡Guau! Eres...muy...\n\ +¡rápido! ¡Apenas pude\n\ +verte! Aquí tienes: te lo\n\ +has ganado, sin duda.") + +DEFINE_DIALOG(DIALOG_008, NO_SOUND, 5, 30, 200, "\ +CUIDADO CON CHOMP\n\ +CADENAS ¡PELIGRO\n\ +EXTREMO!\n\ +\n\ +\n\ +Acércate y pulsa Ⓒ▲\n\ +para mirarle mejor.\n\ +Da miedito, ¿eh?\n\ +¿Ves la moneda roja\n\ +encima del poste?\n\ +Si consigues ocho\n\ +una estrella de\n\ +Poder aparecerá en el\n\ +prado, pasado el puente.") + +DEFINE_DIALOG(DIALOG_009, SOUND_OBJ_KOOPA_TALK, 8, 30, 200, "\ +¡Cuánto tiempo!\n\ +Madre mía, sí que te has\n\ +vuelto rápido, ¿eh?\n\ +¿Has estado entrenando en\n\ +secreto, o es por el\n\ +poder de las estrellas?\n\ +\n\ +\n\ +Lo de perder la última\n\ +carrera me ha dejado un\n\ +poco desanimado. Pero si\n\ +echásemos una carrera\n\ +aquí, estaría jugando en\n\ +casa. ¿Te atreves con\n\ +una revancha?\n\ +\tVamos\t Paso") + +DEFINE_DIALOG(DIALOG_010, SEQ_EVENT_SOLVE_PUZZLE, 4, 30, 200, "\ +Has accionado el botón\n\ +de la Gorra Voladora.\n\ +Con ella, puedes surcar\n\ +los cielos. A partir de\n\ +ahora, cuando rompas un\n\ +bloque rojo, encontrarás\n\ +una Gorra Voladora.\n\ +\n\ +¿Quieres guardar?\n\ +\n\ +\t\tSí\t\tNo") + +DEFINE_DIALOG(DIALOG_011, SEQ_EVENT_SOLVE_PUZZLE, 4, 30, 200, "\ +¡Acabas de accionar el\n\ +botón de la Gorra de\n\ +Metal! Esta gorra hace\n\ +a Mario invencible.\n\ +A partir de ahora,\n\ +aparecerán gorras de\n\ +metal de los bloques\n\ +verdes que rompas.\n\ +¿Quieres guardar?\n\ +\n\ +\tSí\t\tNo") + +DEFINE_DIALOG(DIALOG_012, SEQ_EVENT_SOLVE_PUZZLE, 4, 30, 200, "\ +Acabas de accionar el\n\ +botón de la gorra de\n\ +invisibilidad. Esta gorra\n\ +hace desaparecer a Mario.\n\ +Ahora habrán gorras de\n\ +invisibilidad en los\n\ +bloques azules.\n\ +\n\ +¿Quieres guardar?\n\ +\n\ +\tSí\t\tNo") + +DEFINE_DIALOG(DIALOG_013, NO_SOUND, 5, 30, 200, "\ +¡Has conseguido 100\n\ +monedas! Mario consigue\n\ +más poder del castillo.\n\ +¿Quieres guardar?\n\ +\tSí\t\tNo") + +DEFINE_DIALOG(DIALOG_014, NO_SOUND, 4, 30, 200, "\ +¡Guau! ¡Otra estrella de\n\ +poder! Gracias al poder\n\ +del castillo, Marío está\n\ +más decidido que nunca.\n\ +¿Quieres guardar?\n\ +\n\ +\tClaro\tLuego") + +DEFINE_DIALOG(DIALOG_015, NO_SOUND, 4, 30, 200, "\ +Puedes darle un puñetazo\n\ +a un enemigo para vencerlo.\n\ +Pulsa Ⓐ para saltar, y Ⓑ\n\ +para dar un puñetazo.\n\ +Para recoger algo, pulsa\n\ +Ⓑ. Si quieres tirar lo\n\ +que has cogido, vuelve a\n\ +pulsar Ⓑ.") + +DEFINE_DIALOG(DIALOG_016, SOUND_OBJ_KING_BOBOMB_TALK, 4, 30, 200, "\ +¡Súbete a esa concha y\n\ +dirígela hacia donde\n\ +quieras! ¡Arroya a tus\n\ +enemigos!") + +DEFINE_DIALOG(DIALOG_017, 1, 6, 30, 200, "\ +Soy el Gran Bob-Omb,\n\ +dueño y señor de toda la\n\ +materia disparable, ¡el\n\ +rey de las explosiones\n\ +y los disparos de todo\n\ +el mundo!\n\ +¿Cómo te atreves a subir\n\ +aquí? ¿Quién te ha\n\ +dado derecho a pisar mi\n\ +imperio montañil?\n\ +\n\ +\n\ +Puedes que hayas eludido\n\ +a mis guardias, pero te\n\ +aseguro que no escaparás\n\ +de esta bola\n\ +explosiva...\n\ +\n\ +...¡y nunca te llevarás mi\n\ +estrella de Poder! Por la\n\ +presente, ¡te reto a que\n\ +lo intentes, Mario!\n\ +\n\ +\n\ +Si quieres la estrella de\n\ +Poder, deberás de\n\ +demostrar tu valor en el\n\ +campo de batalla.\n\ +\n\ +\n\ +¿Serás capaz de levantar\n\ +mi peso y hacerme besar\n\ +este suelo real? ¡Lo dudo\n\ +mucho!\n\ +¡Desembomba!") + +DEFINE_DIALOG(DIALOG_018, NO_SOUND, 5, 30, 200, "\ +Estoy durmiendo porque...\n\ +...tengo sueño. No quiero\n\ +que nadie me despierte.\n\ +No hagas ruido al\n\ +caminar.") + +DEFINE_DIALOG(DIALOG_019, NO_SOUND, 2, 30, 200, "\ +¡Shhh! ¡No corras por\n\ +los pasillos!") + +DEFINE_DIALOG(DIALOG_020, NO_SOUND, 6, 95, 150, "\ +Querido Mario:\n\ +Por favor, ven al\n\ +castillo. He preparado\n\ +una tarta para ti.\n\ +Atentamente--\n\ +Princesa Toadstool") + +DEFINE_DIALOG(DIALOG_021, SOUND_OBJ_BOWSER_INTRO_LAUGH, 5, 95, 200, "\ +Bienvenido.\n\ +¡No hay nadie en casa!\n\ +Ahora LÁRGATE, ¡y no\n\ +vuelvas jamás!\n\ +¡Ja ja ja!") + +DEFINE_DIALOG(DIALOG_022, SOUND_OBJ_BOWSER_INTRO_LAUGH, 2, 95, 200, "\ +Necesitas una llave para\n\ +abrir esta puerta.") + +DEFINE_DIALOG(DIALOG_023, SOUND_OBJ_BOWSER_INTRO_LAUGH, 3 , 95, 200, "\ +¡Esta llave no encaja!\n\ +¿Igual es para el\n\ +sótano?") + +DEFINE_DIALOG(DIALOG_024, SOUND_OBJ_BOWSER_INTRO_LAUGH, 6, 95, 200, "\ +Necesitas más poder de\n\ +las estrellas para abrir\n\ +esta puerta. Recupera\n\ +estrellas de Poder en\n\ +los mundos de los cuadros\n\ +del castillo.") + +DEFINE_DIALOG(DIALOG_025, SOUND_OBJ_BOWSER_INTRO_LAUGH, 4, 95, 200, "\ +Para abrir esta puerta,\n\ +necesitas el poder de 3\n\ +estrellas. Te faltan [%]\n\ +estrellas.") + +DEFINE_DIALOG(DIALOG_026, SOUND_OBJ_BOWSER_INTRO_LAUGH, 4, 95, 200, "\ +Para abrir esta puerta,\n\ +necesitas el poder de 8\n\ +estrellas. Te faltan [%]\n\ +estrellas.") + +DEFINE_DIALOG(DIALOG_027, SOUND_OBJ_BOWSER_INTRO_LAUGH, 4, 95, 200, "\ +Para abrir esta puerta,\n\ +necesitas el poder de 30\n\ +estrellas. Te faltan [%]\n\ +estrellas.") + +DEFINE_DIALOG(DIALOG_028, SOUND_OBJ_BOWSER_INTRO_LAUGH, 4, 95, 200, "\ +Para abrir esta puerta,\n\ +necesitas el poder de 50\n\ +estrellas. Te faltan [%]\n\ +estrellas.") + +DEFINE_DIALOG(DIALOG_029, SOUND_OBJ_BOWSER_INTRO_LAUGH, 5, 95, 200, "\ +Si pretendes subir hasta\n\ +lo alto de las escaleras\n\ +“infinitas”, necesitarás\n\ +70 estrellas\n\ +¡Muajajaja!") + +DEFINE_DIALOG(DIALOG_030, NO_SOUND, 6, 30, 200, "\ +¡Hola! Somos los Hermanos\n\ +Lakitu, ¡en comentando el\n\ +progreso de Mario en\n\ +directo! Va a aprender una\n\ +nueva técnica para no\n\ +alertar a sus enemigos.\n\ +El truco consiste en\n\ +caminar muy despacio\n\ +para no hacer ruido.\n\ +\n\ +\n\ +\n\ +Y para terminar de\n\ +comentar en las técnicas\n\ +de grabación, puedes usar\n\ +Ⓒ▶ y Ⓒ< para mirar a\n\ +tu alrededor. Pulsa Ⓒ▼\n\ +para ver la acción desde\n\ +lejos. Cuando no puedas \n\ +mover más la cámara, \n\ +oirás un sonido. Aquí los\n\ +hermanos Lakitu,\n\ +despidiéndose.") + +DEFINE_DIALOG(DIALOG_031, NO_SOUND, 6, 30, 200, "\ +¡No puede ser! ¡Me has\n\ +ganado...¡otra vez! ¡Y\n\ +eso que me he gastado\n\ +todos mis ahorros en\n\ +estos zapatos\n\ +koopasónicos!\n\ +En fin, supongo que\n\ +tendré que darle esta\n\ +estrella al ganador de\n\ +la carrera.\n\ +¡Felicidades, Mario!") + +DEFINE_DIALOG(DIALOG_032, NO_SOUND, 5, 30, 200, "\ +Si consigues la Gorra\n\ +Voladora, podrás...\n\ +¡exacto, volar! Solo\n\ +tienes que dar un triple\n\ +salto, es decir, saltar\n\ +tres veces seguidas,\n\ +para despegar.\n\ +Con un cañón, ¡podrías\n\ +volar todavía más alto!\n\ +\n\ +Usa los botones Ⓒ para\n\ +mirad a tu alrededor\n\ +mientras vuelas, y pulsa\n\ +Ⓩ para aterrizar.") + +DEFINE_DIALOG(DIALOG_033, NO_SOUND, 7, 30, 200, "\ +¡Hola! Has llegado al\n\ +castillo de la Princesa\n\ +Peach a través de una\n\ +tubería. Controlar a\n\ +Mario es muy sencillo.\n\ +\n\ +\n\ +Pulsa Ⓐ para saltar\n\ +y Ⓑ para atacar. Ⓑ\n\ +también sirve para leer\n\ +carteles. Usa el stick\n\ +analógico para mover\n\ +a Mario. Ahora, ve al\n\ +castillo.") + +DEFINE_DIALOG(DIALOG_034, NO_SOUND, 6, 30, 200, "\ +Buenas tardes. Somos los\n\ +hermanos Lakitu,\n\ +comentando en directo\n\ +desde el exterior del\n\ +castillo de la princesa.\n\ +\n\ +Mario acaba de llegar\n\ +y vamos a grabarle en\n\ +directo mientras entra al\n\ +castillo y busca las\n\ +estrellas de poder\n\ +perdidas.\n\ +Como cámara con\n\ +experiencia que soy,\n\ +grabaré desde el ángulo\n\ +recomendado, pero puedes\n\ +cambiar el ángulo de\n\ +la cámara con Ⓒ\n\ +Si no podemos movernos\n\ +más, te avisaremos con\n\ +un sonido. Para echar un\n\ +vistazo a tus\n\ +alrededores, párate y\n\ +pulsa Ⓒ▲\n\ +De momento, esto ha sido\n\ +todo. Seguiremos en\n\ +directo la aventura de\n\ +Mario.") + +DEFINE_DIALOG(DIALOG_035, NO_SOUND, 5, 30, 200, "\ +Hay cuatro botones de\n\ +cámara, también llamados\n\ +botones Ⓒ. Pulsa Ⓒ▲\n\ +para mirar a tu alrededor\n\ +con el stick de control.\n\ +Normalmente verás a Mario\n\ +a través de la cámara de\n\ +Lakitu. Esta es la cámara\n\ +recomendada para jugar\n\ +casi siempre.\n\ +Puedes cambiar el ángulo\n\ +pulsando Ⓒ▶ y Ⓒ◀. Si pulsas\n\ +Ⓡ, la vista cambia a la\n\ +cámara de Mario, que está\n\ +justo detrás de él.\n\ +Si vuelves a pulsar Ⓡ,\n\ +volverás a la cámara de\n\ +Lakitu.\n\ +\n\ +\n\ +Pulsa Ⓒ▼ para ver a\n\ +Mario desde lejos, tanto\n\ +con la cámara de Lakitu\n\ +como la de Mario.") + +DEFINE_DIALOG(DIALOG_036, NO_SOUND, 6, 30, 200, "\ +MIRADOR\n\ +Pulsa Ⓒ▲ para admirar\n\ +las vistas. ¡Aprovecha la\n\ +ocasión mira bien!\n\ +Pulsa Ⓡ para cambiar a\n\ +la cámara de Mario.\n\ +Esta vista siempre sigue\n\ +a Mario. Vuelve a pulsar\n\ +Ⓡ para volver a la\n\ +cámara de Lakitu. Si \n\ +pausas el juego, puedes\n\ +cambiar el modo de la \n\ +cámara para que se \n\ +quede “fija” en un sitio\n\ +al pulsar Ⓡ. ¡Pruébalo!") + +DEFINE_DIALOG(DIALOG_037, SOUND_OBJ_BIG_PENGUIN_YELL, 2, 30, 200, "\ +¡Te he ganado! ¡Y tú has\n\ +perdido! ¡Jajaja!\n\ +No se te da mal, pero\n\ +a mí se me da mejor.\n\ +¡Que tengas más suerte\n\ +la próxima vez!") + +DEFINE_DIALOG(DIALOG_038, NO_SOUND, 4, 95, 200, "\ +La puerta está\n\ +reaccionando al poder de\n\ +la estrella, y se empieza\n\ +a abrir lentamente.") + +DEFINE_DIALOG(DIALOG_039, NO_SOUND, 4, 30, 200, "\ +Por decreto del Gran\n\ +Bob-Omb, no se permiten\n\ +visitas.\n\ +\n\ +Jamás renunciaré a mis\n\ +estrellas, ya que\n\ +contienen el poder del\n\ +castillo.\n\ +Fueron un regalo del Rey\n\ +Koopa, el mismísimo\n\ +Bowser, y están muy bien\n\ +escondidas.\n\ +De ninguna manera diré\n\ +dónde se encuentran...\n\ +Bueno, venga, pero solo\n\ +una pista:\n\ +Atento a los nombres\n\ +de las estrellas al\n\ +comienzo de cada mundo.\n\ +\t --El Gran Bob-omb") + +DEFINE_DIALOG(DIALOG_040, NO_SOUND, 3, 30, 200, "\ +¡Peligro! ¡Puente roto!\n\ +¡Precipicio bien frío\n\ +justo debajo!") + +DEFINE_DIALOG(DIALOG_041, SOUND_OBJ_KOOPA_TALK, 4, 30, 200, "\ +¡He ganado! ¡Y tú has\n\ +perdido! ¡Ja ja ja!\n\ +\n\ +\n\ +Eso es lo que te llevas\n\ +por meterte con Koopa el\n\ +Rápido. ¡Que tengas más\n\ +suerte la próxima vez!") + +DEFINE_DIALOG(DIALOG_042, NO_SOUND, 5, 30, 200, "\ +¡Cuidado! ¡Puente muy\n\ +estrecho!¡Cruza\n\ +lentamente!\n\ +\n\ +\n\ +Puedes saltar al bordillo\n\ +del precipicio y colgarte\n\ +él, y tras eso, puedes\n\ +subir lentamente si\n\ +mueves el stick de control\n\ +hacia delante, o de un\n\ +salto si pulsas A.\n\ +Cuando quieras dejarte\n\ +caer, pulsa Ⓩ o mueve\n\ +el stick de control en la\n\ +dirección contraria a la\n\ +que mira Mario.") + +DEFINE_DIALOG(DIALOG_043, NO_SOUND, 5, 30, 200, "\ +Si saltas y mantienes\n\ +pulsado Ⓐ, puedes\n\ +colgarte de ciertos\n\ +objetos que tengas\n\ +encima.\n\ +¡Tal vez incluso podrías\n\ +colgarte de un pájaro\n\ +en pleno vuelo!") + +DEFINE_DIALOG(DIALOG_044, NO_SOUND, 4, 95, 200, "\ +¿Quién anda ahí? ¿Quién\n\ +me ha despertado? ¡Aún\n\ +es de día, debería estar\n\ +durmiendo!\n\ +Bueno, ya estoy despierto,\n\ +así que de perdidos al\n\ +río. ¿Quieres volar\n\ +conmigo?\n\ +Pulsa y mantén Ⓐ para\n\ +agarrarte a mí. Suelta\n\ +Ⓐ para soltarte.\n\ +\n\ +Te llevaré hasta donde\n\ +quieras, siempre que mis\n\ +alas puedan aguantar tu\n\ +peso... sin ofender.\n\ +Atento a mi sombra, ¡y\n\ +agárrate fuerte!") + +DEFINE_DIALOG(DIALOG_045, NO_SOUND, 6, 95, 200, "\ +¡Mi madre! No puedo más.\n\ +¡Relájate con la pasta,\n\ +Mario! Hasta aquí\n\ +hemos llegado. Pulsa\n\ +Ⓐ para soltarte, por\n\ +favor. Bueno, ¡adiós!") + +DEFINE_DIALOG(DIALOG_046, NO_SOUND, 6, 30, 200, "\ +Tienes que dominar tres\n\ +técnicas de salto muy\n\ +importantes. Primero,\n\ +vamos con el triple\n\ +salto.\n\ +\n\ +Coge carrerilla, y salta\n\ +tres veces. ¡Uno, dos,\n\ +tres! Si sincronizas bien\n\ +los saltos, darás un\n\ +pequeño salto, luego uno\n\ +un poco más alto,\n\ +y luego uno enorme.\n\ +Vale, ahora toca el salto\n\ +largo. Corre, pulsa Ⓩ\n\ +para agacharte y luego\n\ +pulsa Ⓐ para saltar muy\n\ +lejos.\n\ +Para hacer el salto en\n\ +pared, salta hacia una\n\ +pared y luego vuelve a\n\ +saltar cuando la toques.\n\ +\n\ +\n\ +¿Lo pillaste? Triple\n\ +salto, salto largo, y\n\ +salto en pared. Ahora,\n\ +practícalo sin parar.\n\ +No tienes ninguna\n\ +posibilidad sin dominarlo.") + +DEFINE_DIALOG(DIALOG_047, SOUND_OBJ_BOBOMB_BUDDY_TALK, 2, 95, 200, "\ +¡Hola! ¡Te prepararé\n\ +los cañones!") + +DEFINE_DIALOG(DIALOG_048, NO_SOUND, 6, 30, 200, "\ +Mensaje de la Cumbre de\n\ +la Montaña Helada:\n\ +¡Cuidado con el suelo, que\n\ +resbala! Por favor, entra\n\ +al refugio antes de hacer\n\ +nada.") + +DEFINE_DIALOG(DIALOG_049, NO_SOUND, 5, 30, 200, "\ +¿Recuerdas esa complicada\n\ +técnica llamada salto\n\ +en pared? Tendrás que\n\ +dominarla para llegar a\n\ +sitios altos.\n\ +Podrás saltar de pared\n\ +en pared. Mueve el stick\n\ +en la dirección en la\n\ +que quieras rebotar\n\ +para ganar impulso.\n\ +¡Lo dominarás con la\n\ +práctica!") + +DEFINE_DIALOG(DIALOG_050, NO_SOUND, 5, 30, 200, "\ +Mantén pulsado Ⓩ para\n\ +agacharte y deslizarte por\n\ +una cuesta. O pulsa Ⓩ\n\ +cuando estés en el aire\n\ +para dar un pisotón.\n\ +Si te paras, te agachas,\n\ +y saltas, ¡harás una\n\ +pirueta giratoria!\n\ +¿Lo pillas?\n\ +¡Pues hay más! Mientras\n\ +corres, agáchate y salta,\n\ +y harás un salto largo.\n\ +O agáchate y camina\n\ +para...\n\ +Mira, déjalo.") + +DEFINE_DIALOG(DIALOG_051, NO_SOUND, 6, 30, 200, "\ +¡Trepar es fácil! Cuando\n\ +saltas hacia un árbol,\n\ +un palo o un pilar, te\n\ +agarrarás a él\n\ +automáticamente. Pulsa A\n\ +para saltar hacia atrás.\n\ +Para rotar alrededor del\n\ +objeto, mueve el stick de\n\ +control. Cuando llegues\n\ +a lo más alto, ¡mueve el\n\ +stick hacia arriba para\n\ +apoyarte en tus manos!\n\ +Mientras estás en esa\n\ +posición, pulsa A y\n\ +saltarás con más estilo\n\ +que nadie.") + +DEFINE_DIALOG(DIALOG_052, NO_SOUND, 5, 30, 200, "\ +Párate y pulsa Ⓩ para\n\ +agacharte, y luego pulsa\n\ +Ⓐ para hacer una pirueta\n\ +giratoria.\n\ +\n\ +Para hacer una pirueta\n\ +lateral, corre, date la\n\ +vuelta rápidamente, y\n\ +salta. Ambos saltos te\n\ +permiten llegar muy alto.") + +DEFINE_DIALOG(DIALOG_053, NO_SOUND, 5, 30, 200, "\ +A veces, si pasas por\n\ +dentro de un anillo de\n\ +monedas o encuentras un\n\ +secreto en un mundo,\n\ +aparecerá un número rojo.\n\ +¡Si encuentras los cinco\n\ +números rojos, aparecerá\n\ +una estrella oculta!") + +DEFINE_DIALOG(DIALOG_054, NO_SOUND, 6, 30, 200, "\ +¡Bienvenido al tobogán de\n\ +nieve! ¡Salta! Para\n\ +acelerar, mueve el stick\n\ +de control hacia delante.\n\ +Para frenar, muévelo\n\ +hacia detrás.") + +DEFINE_DIALOG(DIALOG_055, SOUND_OBJ_BIG_PENGUIN_YELL, 4, 30, 200, "\ +¡Oye, oye, Mario, fiera!\n\ +¿Cómo te va? Vamos,\n\ +acelera. Pareces un tío\n\ +rápido. Reconozco la\n\ +velocidad cuando la veo,\n\ +sí señor: ¡Soy el\n\ +más rápido del\n\ +mundo! ¿Lo sabías?\n\ +¿Echamos una carrera?\n\ +Preparados, listos...\n\ +\n\ +\t¡Ya!\tPasando") + +DEFINE_DIALOG(DIALOG_056, SOUND_OBJ_BIG_PENGUIN_YELL, 6, 30, 200, "\ +Has r-r-r-¡Has roto mi\n\ +record! ¡Increíble!\n\ +Ya sabía que eras el más\n\ +guay, ¡pero ahora has\n\ +demostrado que también\n\ +eres el más rápido!\n\ +No tengo presupuesto\n\ +para una medalla de oro,\n\ +pero toma, una estrella.\n\ +¡Te la has ganado!") + +DEFINE_DIALOG(DIALOG_057, SOUND_OBJ_BIG_PENGUIN_YELL, 6, 30, 200, "\ +¡Socorro! ¡Mi bebé! ¿Has\n\ +visto a mi bebé? ¡Es la\n\ +niña más preciosa del\n\ +mundo mundial! Dicen que\n\ +tiene mi pico.\n\ +\n\ +No me acuerdo de dónde\n\ +la dejé... a ver...\n\ +me paré a por un arenque\n\ +y unos cubos de hielo y...\n\ +¡Ay! ¡No me acuerdo! ¡Tú\n\ +búscala, por favor!") + +DEFINE_DIALOG(DIALOG_058, SOUND_OBJ_BIG_PENGUIN_YELL, 4, 30, 200, "\ +¡Has encontrado a mi\n\ +preciada niña! ¿Dónde\n\ +has estado? ¿Cómo te lo\n\ +puedo agradecer, Mario?\n\ +Ahora que lo pienso,\n\ +tengo una... estrella.\n\ +Te la daré, junto a mi\n\ +eterna gratitud.") + +DEFINE_DIALOG(DIALOG_059, SOUND_OBJ_BIG_PENGUIN_YELL, 5, 30, 200, "\ +¡Esa no es mi niña! ¿Es\n\ +que no ves que no se me\n\ +parece en nada? ¡Sus\n\ +padres deben estar muy\n\ +preocupados!") + +DEFINE_DIALOG(DIALOG_060, NO_SOUND, 4, 30, 200, "\ +¡ATENCIÓN!\n\ +¡Leer antes de bucear!\n\ +\n\ +\n\ +Si estás bajo el agua\n\ +demasiado rato, te\n\ +quedarás sin oxígeno.\n\ +\n\ +Vuelve a la superficie a\n\ +por aire, o encuentra\n\ +burbujas y monedas para\n\ +respirar bajo el agua.\n\ +Pulsa Ⓐ para nadar.\n\ +Mantén pulsado Ⓐ para\n\ +nadar a un ritmo suave.\n\ +\n\ +Pulsa Ⓐ repetidamente\n\ +para nadar rápido.\n\ +\n\ +\n\ +Mueve el stick de control\n\ +hacia arriba y pulsa Ⓐ\n\ +para bucear.\n\ +\n\ +Mueve el stick de control\n\ +hacia abajo y pulsa Ⓐ\n\ +para volver a la\n\ +superficie,\n\ +Mantén el stick de control\n\ +hacia abajo y pulsa A\n\ +mientras estés en la\n\ +superficie para salir.") + +DEFINE_DIALOG(DIALOG_061, NO_SOUND, 4, 30, 200, "\ +¡BRRR! ¡Peligro de\n\ +congelamiento! No entrar\n\ +en el agua. Va en serio.\n\ +/--El Pingüino") + +DEFINE_DIALOG(DIALOG_062, NO_SOUND, 3, 30, 200, "\ +Dentro del bloque verde\n\ +se oculta la increíble\n\ +Gorra de Metal.\n\ +Con ella, no podrás\n\ +quemarte y podrás ignorar\n\ +los ataques enemigos.\n\ +Ni siquiera necesitarás\n\ +respirar si la llevas\n\ +puesta.\n\ +Pero tiene un defecto:\n\ +No te permite nadar.") + +DEFINE_DIALOG(DIALOG_063, NO_SOUND, 6, 30, 200, "\ +La Gorra de Invisibilidad\n\ +está dentro del bloque\n\ +azul.\n\ +Ni siquiera yo, Don Ojo,\n\ +podré verte si la usas,\n\ +ya que te hará invisible.\n\ +Incluso podrás sorprender\n\ +a los Boo, y también te\n\ +permite atravesar ciertas\n\ +paredes secretas.") + +DEFINE_DIALOG(DIALOG_064, NO_SOUND, 6, 30, 200, "\ +Cuando te pongas la Gorra\n\ +Voladora, que sale de los\n\ +bloques rojos, haz un\n\ +triple salto para surcar\n\ +el cielo azul.\n\ +\n\ +Usa el stick de control\n\ +para guiar a Mario.\n\ +Muévelo hacia detrás para\n\ +elevarte, hacia arriba\n\ +para descender, y Ⓩ\n\ +para aterrizar.") + +DEFINE_DIALOG(DIALOG_065, NO_SOUND, 6, 30, 200, "\ +¡Clase de natación!\n\ +Pulsa repetidamente Ⓐ\n\ +para hacer el nado del\n\ +delfín. Si lo pulsas al\n\ +ritmo adecuado, nadarás\n\ +más rápido.\n\ +Mantén pulsado Ⓐ para\n\ +nadar despacito con\n\ +los pies. Mueve el\n\ +stick de control hacia\n\ +arriba para descender, y\n\ +abajo para ascender.\n\ +Para salir del agua,\n\ +mantén el stick hacia\n\ +abajo cuando estés en la\n\ +superficie y pulsa Ⓐ\n\ +Más fácil que quitarle el\n\ +caramelo a un niño, ¿eh?\n\ +Pero recuerda: ¡Mario no\n\ +puede respirar bajo el\n\ +agua! Vuelve a la\n\ +superficie cuando tengas\n\ +poca vida.\n\ +\n\ +Y una última cosa: No\n\ +puedes abrir puertas que\n\ +estén bajo el agua.") + +DEFINE_DIALOG(DIALOG_066, NO_SOUND, 6, 30, 200, "\ +Mario, ¡soy Peach! ¡Ten\n\ +cuidado! ¡Bowser está\n\ +loco! Te intentará quemar\n\ +con su horrible aliento de\n\ +fuego.\n\ +\n\ +Colócate detrás de él y\n\ +cógelo por la cola con el\n\ +botón Ⓑ. Después,\n\ +usa el stick de control\n\ +para hacerle dar vueltas\n\ +sin parar.\n\ +Cuanto más rápido muevas\n\ +el stick, más lejos\n\ +volará cuando lo sueltes\n\ +volviendo a pulsar Ⓑ\n\ +\n\ +\n\ +Recuerda que puedes usar\n\ +los botones Ⓒ para\n\ +mirar a tu alrededor.\n\ +Tienes que lanzar a\n\ +Bowser a una de las\n\ +bombas de las esquinas.\n\ +Recuerda: Apunta bien, y\n\ +pulsa Ⓑ en el momento\n\ +adecuado para lanzarlo.\n\ +¡Buena suerte, Mario!\n\ +Estamos en tus manos.") + +DEFINE_DIALOG(DIALOG_067, SOUND_OBJ_BOWSER_LAUGH, 6, 30, 200, "\ +Lo siento, Mario, ¡tu\n\ +princesa está en otro\n\ +castillo! ¡Ja ja ja!\n\ +Venga, ¡intenta cogerme\n\ +de la cola!\n\ +\n\ +¡No serás capaz ni de\n\ +levantarme! ¡Un blandengue\n\ +como tú jamás sería capaz\n\ +de lanzar a alguien como\n\ +YO! ¡Jamás! ¡Ja!") + +DEFINE_DIALOG(DIALOG_068, NO_SOUND, 5, 30, 200, "\ +¡Estás en la Tierra de\n\ +Lava! Si te prendes fuego\n\ +o caes en una masa de\n\ +lava, ¡empezarás a botar\n\ +sin parar!\n\ +¡Pero aún así puedes\n\ +controlar a Mario! ¡Lo\n\ +importante es que no\n\ +pierdas la calma!") + +DEFINE_DIALOG(DIALOG_069, NO_SOUND, 6, 30, 200, "\ +A veces, mientras vuelas,\n\ +es posible que te\n\ +estrelles contra un muro\n\ +invisible en los límites\n\ +de los mundos de los\n\ +cuadros.\n\ +Si te estrellas contra\n\ +uno de estos muros\n\ +mientras vuelas,\n\ +rebotarás hacia atrás") + +DEFINE_DIALOG(DIALOG_070, NO_SOUND, 5, 30, 200, "\ +Puedes volver a la sala\n\ +principal del castillo\n\ +cuando quieras desde\n\ +cualquiera de los mundos\n\ +de los cuadros.\n\ +Solo tienes que quedarte\n\ +quieto en el suelo,\n\ +pulsar Start para pausar,\n\ +y luego seleccionar\n\ +“Salir del nivel.”\n\ +No hace falta conseguir\n\ +todas las estrellas de\n\ +Poder en un mundo para\n\ +pasar al siguiente.\n\ +\n\ +Puedes volver más\n\ +adelante, cuando tengas\n\ +más experiencia, para\n\ +coger las que se te hagan\n\ +muy complicadas.\n\ +Cuando consigas una\n\ +estrella y vuelvas a\n\ +entrar al mundo,\n\ +aparecerá una pista\n\ +para la siguiente.\n\ +Pero no hace falta que\n\ +las cojas en orden.\n\ +Puedes coger cualquier\n\ +estrella, no tiene que\n\ +ser la de la pista.") + +DEFINE_DIALOG(DIALOG_071, NO_SOUND, 4, 30, 200, "\ +¡Peligro!\n\ +¡Cuidado con la nube\n\ +extraña! ¡No respires el\n\ +aire!\n\ +Si te sientes mareado,\n\ +corre a terreno más\n\ +elevado y respira aire\n\ +limpio.\n\ +Círculo: Refugio\n\ +Flecha: Entrada o salida") + +DEFINE_DIALOG(DIALOG_072, NO_SOUND, 5, 30, 200, "\ +¡Peligro! ¡Viento fuerte!\n\ +Sujeta bien tu gorra.\n\ +Si se te cae, tendrás\n\ +que buscarla por toda la\n\ +montaña.") + +DEFINE_DIALOG(DIALOG_073, NO_SOUND, 6, 95, 200, "\ +¡Aarrgh! Zaludos, pirata.\n\ +Tengo un tezoro oculto,\n\ +vaya que zí.\n\ +\n\ +\n\ +\n\ +Pero ziento dezirte que\n\ +si pretendes echarle la\n\ +zarpa vas a tener que\n\ +abrir los cofres del\n\ +tezoro en el orden\n\ +correcto.\n\ +¿Que cual es el orden?\n\ +¡Jajaja! ¡Jamás te lo \n\ +diré, así que buena\n\ +zuerte!\n\ +\n\ +\t --El Capitán") + +DEFINE_DIALOG(DIALOG_074, NO_SOUND, 6, 30, 200, "\ +Puedes agarrarte a un\n\ +bordillo con las manos\n\ +y quedarte colgado.\n\ +\n\ +\n\ +\n\ +Para dejarte caer del\n\ +bordillo, puedes mover\n\ +el stick de control en\n\ +la dirección contraria a\n\ +la que mira Mario, o\n\ +pulsar Ⓩ.\n\ +Para subir a lo alto del\n\ +bordillo, puedes mover el\n\ +stick hacia arriba para\n\ +subir lentamente, o\n\ +pulsar Ⓐ para subir\n\ +de un salto.") + +DEFINE_DIALOG(DIALOG_075, NO_SOUND, 5, 30, 200, "\ +¡Mario! Mi castillo está\n\ +en graves problemas. Sé\n\ +que el culpable es Bowser\n\ +y ¡sé que eres el único\n\ +capaz de detenerle!\n\ +Las puertas del castillo\n\ +que han sido selladas por\n\ +Bowser solo se pueden\n\ +abrir con el poder de\n\ +las estrellas.\n\ +Pero hay caminos ocultos\n\ +en el castillo, que Bowser\n\ +desconoce.\n\ +\n\ +\n\ +¡Encuentra las estrellas\n\ +ocultas, Mario! Te\n\ +ayudarán en tu misión.\n\ +¡Por favor, Mario,\n\ +ayúdanos!\n\ +¡Reúne todas las\n\ +estrellas del castillo y\n\ +sácanos de esta horrible\n\ +prisión! ¡Por favor!") + +DEFINE_DIALOG(DIALOG_076, NO_SOUND, 6, 30, 200, "\ +Gracias al poder de las\n\ +estrellas, el castillo\n\ +empieza a volver a la\n\ +vida. Por favor, Mario,\n\ +¡dale una lección a\n\ +Bowser!\n\ +Mira, deja que te cuente\n\ +un secreto del castillo.\n\ +En la habitación con el\n\ +espejo, estate atento\n\ +a ver si ves algo que\n\ +solo existe en el espejo.\n\ +Y cuando vayas al\n\ +Mundo Mojaseca, puedes\n\ +inundarlo al entrar si \n\ +entras por la parte\n\ +superior del cuadro.\n\ +\n\ +Por cierto, ¡mira lo que\n\ +he encontrado!") + +DEFINE_DIALOG(DIALOG_077, NO_SOUND, 3, 150, 200, "\ +Por decreto real, es\n\ +obligatorio darle un\n\ +pisotón a los pilares.") + +DEFINE_DIALOG(DIALOG_078, NO_SOUND, 5, 30, 200, "\ +Abre el contenedor de\n\ +monedas azules dándole un\n\ +pisotón con el botón Ⓩ.\n\ +Una moneda azul equivale\n\ +a 5 monedas amarillas.\n\ +Pero si no eres lo\n\ +bastante rápido, ¡las\n\ +monedas azules\n\ +desaparecerán! ¿Te\n\ +parece injusto?\n\ +Pues te aguantas.") + +DEFINE_DIALOG(DIALOG_079, SOUND_OBJ_UKIKI_CHATTER_LONG, 4, 30, 200, "\ +¡Owwwuu! ¡Déjame ir!\n\ +¡Uukee-kee! ¡Estaba de\n\ +broma! ¿No tienes sentido\n\ +del humor?\n\ +Mira, hagamos un trato\n\ +Si me dejas ir, te daré\n\ +algo que te va a gustar.\n\ +\n\ +¿Qué te parece?\n\ +\n\ +\tSoltar\t\t No soltar") + +DEFINE_DIALOG(DIALOG_080, SOUND_OBJ_UKIKI_CHATTER_LONG, 1, 30, 200, "\ +¡Jejejeje!") + +DEFINE_DIALOG(DIALOG_081, NO_SOUND, 4, 30, 200, "\ +Es un misterio si este\n\ +lugar está seco o mojado.\n\ +¿Y dónde se encuentra la\n\ +solución a este dilema?\n\ +Tal vez tenga que ver\n\ +con la altura que tienen\n\ +los visitantes en el\n\ +momento de su llegada.") + +DEFINE_DIALOG(DIALOG_082, NO_SOUND, 4, 30, 200, "\ +¡No pierdas tu gorra! Si\n\ +la pierdes, sufrirás más\n\ +daño de lo normal.\n\ +\n\ +Si pierdes tu gorra,\n\ +tendrás que encontrarla\n\ +en el mismo mundo en el\n\ +que la perdiste.\n\ +Ay, lo de Peach no tiene\n\ +buena pinta. Sigue\n\ +atrapada en algún lugar,\n\ +dentro de las paredes.\n\ +¡Por favor, Mario, tienes\n\ +que salvarla! ¿Sabías que\n\ +hay mundos enemigos\n\ +dentro de los cuadros?\n\ +¡Sí, como lo oyes! Las\n\ +tropas de Bowser están\n\ +dentro de ellos. Ah, y\n\ +toma esto. Para ti.") + +DEFINE_DIALOG(DIALOG_083, NO_SOUND, 6, 30, 200, "\ +Ese reloj tiene algo\n\ +extraño. Intenta fijarte\n\ +en la posición que tienen\n\ +las manillas en el momento\n\ +en el que entras. Por\n\ +cierto, ¡toma esto!") + +DEFINE_DIALOG(DIALOG_084, NO_SOUND, 4, 30, 200, "\ +¡Dios mío! ¡Dios mío!\n\ +¡Voy a llegar tarde! ¡Y\n\ +ahora va un enano bigotudo\n\ +y me coge!\n\ +¿Eh? ¿Esta cosa brillante?\n\ +¡Es mía! ¡Quien la\n\ +encuentra se la queda!\n\ +¡Ahora suéltame!\n\ +¡Que me sueltes te digo!\n\ +Bueno, si tanto la\n\ +quieres, ¡toma! Prefiero\n\ +dártela.\n\ +La otra opción es que la\n\ +duquesa me ejecute por\n\ +llegar tarde. ¡Ahora\n\ +suéltame!") + +DEFINE_DIALOG(DIALOG_085, SOUND_OBJ_BOO_LAUGH_LONG, 5, 30, 200, "\ +No tienes ninguna\n\ +posibilidad de salir vivo\n\ +de esta mansión. Si\n\ +consigues salir, sería...\n\ +digno de medalla.") + +DEFINE_DIALOG(DIALOG_086, NO_SOUND, 6, 30, 200, "\ +Algunos enemigos tienen\n\ +el estómago muy sensible.\n\ +Si les obligas a dar\n\ +vueltas sin parar, tal\n\ +vez se mareen y te dejen\n\ +en paz.") + +DEFINE_DIALOG(DIALOG_087, NO_SOUND, 5, 30, 200, "\ +¡Santa Claus no es el\n\ +único que puede bajar por\n\ +las chimeneas! ¡Ven!\n\ +/--El propietario del\n\ +refugio.") + +DEFINE_DIALOG(DIALOG_088, NO_SOUND, 5, 30, 200, "\ +Ascensor de trabajo.\n\ +Para quien se baje aquí:\n\ +Agárrate al tubo de la\n\ +izquierda y deslízate con\n\ +cuidado hacia abajo.") + +DEFINE_DIALOG(DIALOG_089, NO_SOUND, 6, 95, 200, "\ +¡Peligro en ambas\n\ +direciones! ¡Cuidado con\n\ +dónde pisas! Quien no\n\ +sepa hacer el salto\n\ +largo, debe ir a\n\ +la derecha.\n\ +Derecha: Ascensor.\n\ +\t\tLaberinto gaseoso\n\ +Izquierda: Agujero Negro\n\ +\t\tLago subterráneo\n\ +\n\ +\n\ +Círculo rojo: Ascensor 2\n\ +\t\tLago subterráneo\n\ +Flecha: Tu posición") + +DEFINE_DIALOG(DIALOG_090, SOUND_OBJ_BOWSER_LAUGH, 5, 30, 200, "\ +¡Ja ja ja! ¡Has caído de\n\ +lleno en mi trampa, tal\n\ +y como esperaba! Un\n\ +consejo, “amigo,”\n\ +¡cuidado con dónde pisas!") + +DEFINE_DIALOG(DIALOG_091, NO_SOUND, 2, 30, 200, "\ +¡Peligro! ¡Corrientes\n\ +fuertes!\n\ +Pero el viento también\n\ +se puede aprovechar.") + +DEFINE_DIALOG(DIALOG_092, SOUND_OBJ_BOWSER_LAUGH, 5, 30, 200, "\ +¿Vienes otra vez a tocar\n\ +las narices, Mario? ¿No\n\ +ves que estoy\n\ +pasándomelo bien causando\n\ +caos con mis tropas?\n\ +Ya que estás aquí,\n\ +¡devuelve las estrellas!\n\ +¡Mi ejército en las\n\ +paredes las necesitan!\n\ +¡Ja ja ja ja!") + +DEFINE_DIALOG(DIALOG_093, SOUND_OBJ_BOWSER_LAUGH, 5, 30, 200, "\ +¡Mario! ¡Otra vez tú!\n\ +Llegas justo a tiempo--\n\ +¡Estaba buscando algo que\n\ +quemar con mi aliento de\n\ +fuego!\n\ +¡El poder de las estrellas\n\ +es inútil contra mí!\n\ +¡Todos tus amigos están\n\ +atrapados en las paredes!\n\ +\n\ +¡Y jamás volverás a ver\n\ +a la princesa!\n\ +¡Ja ja ja ja ja!") + +DEFINE_DIALOG(DIALOG_094, NO_SOUND, 4, 30, 200, "\ +¡Coge carrerilla en la\n\ +cuesta! ¿Te acuerdas del\n\ +salto largo? Corre, pulsa\n\ +Ⓩ, y luego salta!") + +DEFINE_DIALOG(DIALOG_095, NO_SOUND, 5, 30, 200, "\ +Para leer un cartel,\n\ +ponte en frente y...\n\ +pulsa Ⓑ... pero...\n\ +acabas de hacerlo,\n\ +así que eso ya lo sabes.\n\ +Para hablar con un Koopa\n\ +u otro animal, solo\n\ +tienes que ponerte\n\ +enfrente de él.\n\ +\n\ +Por favor, recupera las\n\ +estrellas que Bowser robó\n\ +y escondió en este mundo.") + +DEFINE_DIALOG(DIALOG_096, NO_SOUND, 5, 30, 200, "\ +Este camino es muy\n\ +estrecho. ¡Tienes que ir\n\ +con cuidado! Además, no\n\ +se permiten visitas a la\n\ +cima de la montaña.\n\ +Por tu propio bien,\n\ +¡no despiertes a nadie!\n\ +Vamos, que camines\n\ +despacito.") + +DEFINE_DIALOG(DIALOG_097, NO_SOUND, 6, 30, 200, "\ +¡No dejes que te hagan\n\ +bullying! Si alguien te\n\ +empuja, ¡empújale de\n\ +vuelta! Es uno uno contra\n\ +uno, ¡y el perderdor\n\ +arderá!") + +DEFINE_DIALOG(DIALOG_098, SOUND_OBJ_BOO_LAUGH_LONG, 2, 95, 200, "\ +Ven aquí...\n\ +...je, je, je...") + +DEFINE_DIALOG(DIALOG_099, SOUND_OBJ_BOO_LAUGH_LONG, 5, 95, 200, "\ +Je je je...\n\ +Ahora mando yo, je je je\n\ +Voy a atravesar esta\n\ +pared. ¿Puedes hacer lo\n\ +mismo? ¡Je je je!") + +DEFINE_DIALOG(DIALOG_100, SOUND_OBJ_UKIKI_CHATTER_LONG, 3, 95, 200, "\ +Ukkiki...Wakkiki...¡ki ki!\n\ +¡Ja! ¡Para mí!\n\ +¡Es mía! ¡Je je je je!") + +DEFINE_DIALOG(DIALOG_101, SOUND_OBJ_UKIKI_CHATTER_LONG, 3, 95, 200, "\ +¡Ay! Sue...suéltame...\n\ +Me estás... ahorcando...\n\ +Eh...¡me han incriminado!\n\ +¿Esta gorra? Ay, vale,\n\ +toma. Es bonita, pero te\n\ +la devuelvo.\n\ +¡Pero creo que me queda\n\ +mejor a mí que a ti!\n\ +¡Je je je!") + +DEFINE_DIALOG(DIALOG_102, NO_SOUND, 6, 30, 200, "\ +¡Oye! Los Boo son muy\n\ +tímidos. Si les miras a\n\ +la cara, desaparecen,\n\ +pero si les das la\n\ +espalda, vuelven a\n\ +aparecer.\n\ +No sirve de nada\n\ +golpearles cuando han\n\ +desaparecido. Intenta\n\ +golpearles por la espalda.") + +DEFINE_DIALOG(DIALOG_103, NO_SOUND, 4, 95, 200, "\ +Las cuatro torres\n\ +debes dominar...\n\ +Entonces en la cima\n\ +la luz hallarás...") + +DEFINE_DIALOG(DIALOG_104, NO_SOUND, 6, 30, 200, "\ +Esa estrella oscura que\n\ +tienes enfrente es un\n\ +“Marcador de estrella.”\n\ +Cuando consigas 8 monedas\n\ +rojas, una estrella\n\ +aparecerá aquí.") + +DEFINE_DIALOG(DIALOG_105, SOUND_OBJ_BOBOMB_BUDDY_TALK, 4, 95, 200, "\ +¡Listos para disparar!\n\ +¡Venga, sube al cañón!\n\ +\n\ +\n\ +Puedes llegar a la\n\ +estrella de la isla\n\ +flotante usando los\n\ +cañones.\n\ +Usa el stick de control\n\ +para apuntar, y luego\n\ +pulsa Ⓐ para disparar.\n\ +\n\ +Si tienes buena puntería,\n\ +puedes darle a un árbol\n\ +o un tubo, y agarrarte.") + +DEFINE_DIALOG(DIALOG_106, SOUND_OBJ_BOBOMB_BUDDY_TALK, 2, 95, 200, "\ +¡Listos para disparar!\n\ +¡Venga, sube al cañón!") + +DEFINE_DIALOG(DIALOG_107, SOUND_OBJ_BOO_LAUGH_LONG, 3, 95, 200, "\ +Los fantasmas...\n\ +...no...\n\ +...¡MUEREN!\n\ +¡Je, je je!\n\ +¿Podrás salir de aquí...\n\ +...con vida?") + +DEFINE_DIALOG(DIALOG_108, SOUND_OBJ_BOO_LAUGH_LONG, 4, 95, 200, "\ +¡Bu! ¡Aquí llega el\n\ +maestro del caos el jefe,\n\ +del terror, el Gran Boo!,\n\ +Ja ja ja ja...") + +DEFINE_DIALOG(DIALOG_109, NO_SOUND, 4, 95, 200, "\ +¡Oooh, no! ¡He llevado\n\ +los viajes astrales al\n\ +extremo! ¡Mi cuerpo se ha\n\ +derretido!\n\ +No sabrás de algún cuerpo\n\ +que esté buscando una\n\ +cabeza, ¿verdad? ¡Porque\n\ +me vendría muy bien!\n\ +¡Brrr! ¡Se me va a\n\ +congelar la cabeza si\n\ +sigo así!") + +DEFINE_DIALOG(DIALOG_110, NO_SOUND, 6, 95, 200, "\ +Necesito encontrar una\n\ +buena cabeza para mis\n\ +hombros. ¿Sabes de alguna\n\ +que esté en búsqueda de\n\ +un buen cuerpo? Si es\n\ +así, ¡te sigo!") + +DEFINE_DIALOG(DIALOG_111, NO_SOUND, 4, 95, 200, "\ +¡Genial! ¡Qué cuerpo tan\n\ +fantástico! Toma, tu\n\ +recompensa. Seguro que te\n\ +ayuda a entrar en calor.") + +DEFINE_DIALOG(DIALOG_112, NO_SOUND, 5, 30, 200, "\ +¡Consigue tantas monedas\n\ +como puedas! Te ayudarán\n\ +a recuperar tu barra de\n\ +vida.\n\ +\n\ +En el menú de pausa\n\ +puedes comprobar cuantas\n\ +monedas has recogido en\n\ +cada uno de los 15\n\ +mundos enemigos.\n\ +También puedes recuperar\n\ +vida tocando un corazón\n\ +giratorio.\n\ +\n\ +\n\ +Cuanto más rápido te\n\ +estés moviendo al tocar\n\ +el corazón giratorio,\n\ +más vida\n\ +recuperarás.") + +DEFINE_DIALOG(DIALOG_113, NO_SOUND, 6, 30, 200, "\ +Hay gorras especiales\n\ +ocultas en los bloques\n\ +rojos, verdes y azules.\n\ +Pisa los botones en los\n\ +niveles secretos para\n\ +activarlos.") + +DEFINE_DIALOG(DIALOG_114, SOUND_OBJ2_BOSS_DIALOG_GRUNT, 7, 95, 200, "\ +¡Me toca muchísimo las\n\ +narices! Construimos\n\ +vuestras casas, vuestros\n\ +castillos, vuestras\n\ +carreteras, ¡y aún así\n\ +nos pisoteáis!\n\ +\n\ +¿Alguna vez decís\n\ +gracias? ¡No! ¡Pues tú\n\ +no vas a limpiarte los\n\ +zapatos en mi espalda!\n\ +¡Creo que voy a\n\ +aplastarte, solo por\n\ +diversión!\n\ +¿Qué? ¿Te parece mal?\n\ +¡Intenta impedirlo,\n\ +canijo!") + +DEFINE_DIALOG(DIALOG_115, SOUND_OBJ2_BOSS_DIALOG_GRUNT, 5, 95, 200, "\ +¡No! ¡Pisoteado otra vez!\n\ +Supongo que no soy más que\n\ +asfalto, hecho para ser\n\ +pisado. Acepto mi derrota.\n\ +¡Llévate esto!") + +DEFINE_DIALOG(DIALOG_116, SOUND_OBJ2_BOSS_DIALOG_GRUNT, 6, 95, 200, "\ +¿Qu...quéeeee? ¿De verdad\n\ +un canijo sin chispa como\n\ +tú ha desactivado al Gran\n\ +Bob-omb?\n\ +\n\ +\n\ +Puede que hayas sido\n\ +suficientemente ágil como\n\ +para derrotarme a mí,\n\ +pero no sabes lo que te\n\ +espera cuando te\n\ +enfrentes a Bowser.\n\ +¡Vas a tener que\n\ +espabilarte si pretendes\n\ +tener la más mínima\n\ +posibilidad de cogerle\n\ +por la cola! Aún así, lo\n\ +has hecho bien.\n\ +¡Incluso diría que mis\n\ +tropas podrían aprender\n\ +un par de cosas de ti!\n\ +Tal y como te prometí,\n\ +puedes quedarte con la\n\ +estrella, Mario.\n\ +Si quieres volverme a\n\ +ver, vuelve a seleccionar\n\ +esta estrella desde el\n\ +menú. Pero de momento,\n\ +he de despedirme.") + +DEFINE_DIALOG(DIALOG_117, SOUND_OBJ2_BOSS_DIALOG_GRUNT, 1, 95, 200, "\ +¿Quién...pisar...aquí?\n\ +¿Quién...romper...sello?\n\ +¿Despertar...ancestros..?\n\ +No gustarnos la luz...\n\ +Urrrgh...\n\ +No gustarnos...¡intrusos!\n\ +Ahora, luchar...\n\ +...¡mano...\n\ +...a..\n\ +...mano!") + +DEFINE_DIALOG(DIALOG_118, SOUND_OBJ2_BOSS_DIALOG_GRUNT, 6, 95, 200, "\ +¡Urrrghh!\n\ +¿Qué... ocurrir?\n\ +Nosotros... aplastados...\n\ +¡Tú tan fuerte!\n\ +¡Tú dominar pirámide!\n\ +Por hoy...\n\ +Ahora, toma la estrella\n\ +Poderosa.\n\ +Nosotros... dormir...\n\ +...oscuridad...") + +DEFINE_DIALOG(DIALOG_119, NO_SOUND, 6, 30, 200, "\ +¡Argh! Tal vez te he\n\ +subestimado. Esto no era\n\ +lo que había planeado.\n\ +¡Pero sigo teniendo el\n\ +poder de las estrellas,\n\ +y a Peach!\n\ +¡Ja ja ja! ¡No vas a\n\ +quitarme más estrellas!\n\ +Todavía no he acabado\n\ +contigo, pero te dejaré ir\n\ +por ahora. ¡Pero me las\n\ +pagarás, créeme!") + +DEFINE_DIALOG(DIALOG_120, NO_SOUND, 4, 30, 200, "\ +¡Ahhh! ¿de verdad he\n\ +vuelto a perder? El poder\n\ +de las estrellas me ha\n\ +fallado... esta vez.\n\ +Considera esto un empate.\n\ +La próxima vez, estaré\n\ +en perfectas condiciones.\n\ +\n\ +Ahora, si quieres ver\n\ +a tu preciada princesa,\n\ +ven a verme a lo más\n\ +alto de la torre.\n\ +¡Te estaré esperando,\n\ +Mario!\n\ +¡Ja ja ja ja!") + +DEFINE_DIALOG(DIALOG_121, NO_SOUND, 6, 30, 200, "\ +¡Nooo! ¡No puede ser!\n\ +¿¡De verdad me has\n\ +ganado, Mario!? ¡Le di\n\ +poder a mis tropas, pero\n\ +ahora ese poder está\n\ +desapareciendo!\n\ +¡Puedo ver la paz\n\ +volviendo al mundo! ¡No lo\n\ +aguanto! Pero esto aún\n\ +no se ha acabado...\n\ +\n\ +\n\ +¡Vamos, tropas! ¡Veamos el\n\ +final juntos!\n\ +¡Ja ja ja!") + +DEFINE_DIALOG(DIALOG_122, NO_SOUND, 5, 30, 200, "\ +El Agujero Negro\n\ +Derecha: Ascensor\n\ +\t\tLaberinto venenoso\n\ +Izquierda: Lago\n\ +subterráneo") + +DEFINE_DIALOG(DIALOG_123, NO_SOUND, 5, 30, 200, "\ +Caverna de Metal\n\ +Derecha: Cascada\n\ +Izquierda: Botón de la\n\ +gorra de metal.") + +DEFINE_DIALOG(DIALOG_124, NO_SOUND, 4, 30, 200, "\ +Ascensor de trabajo\n\ +¡¡Peligro!!\n\ +¡Leer instrucciones\n\ +detenidamente!\n\ +El ascensor continúa en\n\ +la dirección de la flecha\n\ +que se haya activado.") + +DEFINE_DIALOG(DIALOG_125, NO_SOUND, 3, 30, 200, "\ +Salida del laberinto\n\ +venenoso. ¡Peligro!\n\ +Cerrado. No pasar.") + +DEFINE_DIALOG(DIALOG_126, NO_SOUND, 3, 30, 200, "\ +Arriba: Agujero negro\n\ +Derecha: Ascensor\n\ +\t\tLaberinto venenoso") + +DEFINE_DIALOG(DIALOG_127, NO_SOUND, 5, 30, 200, "\ +Lago subterráneo\n\ +Derecha:Caverna de metal\n\ +Izquierda:Mina abandonada\n\ +\t\t(Cerrado)\n\ +\n\ +Un amable dragón de agua\n\ +vive aquí. Pisa su cabeza\n\ +con fuerza para que baje\n\ +la cabeza. Cuidado, no te\n\ +conviertas en su almuerzo.") + +DEFINE_DIALOG(DIALOG_128, NO_SOUND, 4, 95, 200, "\ +¡Debes luchar con honor!\n\ +¡Lanzar al adversario\n\ +fuera del campo de batalla\n\ +está prohibido!") + +DEFINE_DIALOG(DIALOG_129, NO_SOUND, 6, 30, 200, "\ +¡Bienvenido al mundo de la\n\ +Gorra de Invisibilidad!\n\ +Todos los bloques azules\n\ +que has visto se volverán\n\ +sólidos cuando pises el\n\ +botón azul.\n\ +Desaparecerás cuando te\n\ +pongas la Gorra de\n\ +Invisibilidad, así que\n\ +podrás atravesar a los\n\ +enemigos y otras cosas.\n\ +¡Pruébalo!") + +DEFINE_DIALOG(DIALOG_130, NO_SOUND, 6, 30, 200, "\ +¡Bienvenido al mundo de\n\ +la Gorra de Metal! Cuando\n\ +pises el botón botón\n\ +verde, todos los bloques\n\ +verdes que has visto se\n\ +volverán sólidos.\n\ +Cuando tu cuerpo se\n\ +convierte en metal gracias\n\ +al poder de esta gorra,\n\ +¡puedes caminar bajo el\n\ +agua! ¡Pruébalo!") + +DEFINE_DIALOG(DIALOG_131, NO_SOUND, 5, 30, 200, "\ +¡Bienvenido al mundo de\n\ +la Gorra Voladora! Pisa el\n\ +botón rojo en lo alto de\n\ +la torre, al centro del\n\ +anillo arcoíris.\n\ +Cuando pulses el botón,\n\ +todos los bloques rojos\n\ +que has visto se volverán\n\ +sólidos.\n\ +\n\ +¡Prueba la Gorra Voladora!\n\ +Para despegar, haz un\n\ +triple salto, y cuando\n\ +quieras aterrizar, pulsa\n\ +Ⓩ\n\ +Mueve el stick de control\n\ +hacia abajo para\n\ +elevarte, y hacia arriba\n\ +para descender, como si\n\ +controlases un avión.") + +DEFINE_DIALOG(DIALOG_132, SOUND_OBJ_BIG_PENGUIN_YELL, 4, 30, 200, "\ +Guau, Mario, ¿de verdad\n\ +estabas intentando hacer\n\ +trampas? No se permiten\n\ +los atajos.\n\ +Sé que lo sabes de sobra.\n\ +Estás descalificado.\n\ +Para la próxima, juega\n\ +limpio.") + +DEFINE_DIALOG(DIALOG_133, NO_SOUND, 6, 30, 200, "\ +¡No sabes lo mucho\n\ +que me alegra verte!\n\ +La princesa, yo, y\n\ +todo el mundo... estamos\n\ +atrapados dentro de las\n\ +paredes del castillo.\n\ +Bowser ha robado las\n\ +estrellas del castillo, y\n\ +está usando su poder para\n\ +crear su propio mundo\n\ +dentro de los cuadros y\n\ +las paredes.\n\ +¡Por favor, recupera las\n\ +estrellas de poder!\n\ +Cuando las encuentres,\n\ +podrás usar su poder para\n\ +abrir las puertas que\n\ +Bowser ha sellado.\n\ +Hay cuatro salas en el\n\ +primer piso. Empieza por\n\ +la que tiene un cuadro de\n\ +unos Bob-omb. Es la única\n\ +sala que Bowser no ha\n\ +sellado.\n\ +Cuando consigas ocho\n\ +estrellas, podrás abrir\n\ +la puerta con la estrella\n\ +grande. ¡Seguro que la\n\ +princesa está ahí!") + +DEFINE_DIALOG(DIALOG_134, NO_SOUND, 6, 30, 200, "\ +Los nombres de las\n\ +estrellas son pistas de\n\ +cómo encontrarlas. Puedes\n\ +verlas al entrar a cada\n\ +mundo.\n\ +\n\ +Puedes cogerlas en\n\ +cualquier orden, pero\n\ +hay ciertas estrellas y\n\ +ciertos enemigos que solo\n\ +aparecerán si escoges\n\ +una estrella concreta.") + +DEFINE_DIALOG(DIALOG_135, NO_SOUND, 6, 30, 200, "\ +Fue Bowser quien robó las\n\ +estrellas. ¡Le vi con\n\ +mis propios ojos!\n\ +\n\ +\n\ +\n\ +Ha escondido seis\n\ +estrellas en cada mundo,\n\ +pero para coger algunas\n\ +de ellas, necesitarás\n\ +activar los botones\n\ +de las gorras.\n\ +Puedes comprobar qué\n\ +estrellas has conseguido\n\ +al entrar a cada mundo.\n\ +\n\ +\n\ +\n\ +Si quieres volver a ver\n\ +a un enemigo que ya has\n\ +derrotado, vuelve a\n\ +seleccionar su estrella\n\ +al entrar al mundo\n\ +correspondiente.") + +DEFINE_DIALOG(DIALOG_136, NO_SOUND, 6, 30, 200, "\ +¡Guau! ¿Ya has conseguido\n\ +todas esas estrellas?\n\ +¡Muy bien, Mario! ¡Seguro\n\ +que nos sacas de aquí en\n\ +nada!\n\ +\n\ +Pero ten cuidado: Bowser\n\ +y sus secuaces son unos\n\ +expertos del “mal.”\n\ +Te voy a dar un consejo:\n\ +\n\ +\n\ +Cuando necesites curarte\n\ +de tus heridas, coge\n\ +monedas. Las monedas\n\ +amarillas recuperan un\n\ +trozo del medidor de vida.\n\ +Las rojas, dos.\n\ +Y por último, las azules\n\ +recuperan nada más y nada\n\ +menos que cinco.\n\ +Te preguntarás dónde\n\ +encontrar esas preciadas\n\ +monedas azules, ¿eh?\n\ +Busca los bloques de\n\ +monedas azules. Los\n\ +reconocerás. Si le das un\n\ +pisotón a uno, aparecerán\n\ +monedas azules, pero\n\ +debes cogerlas rápido.\n\ +Por cierto, cuando caigas\n\ +de mucha altura, puedes\n\ +dar un pisotón justo\n\ +antes de tocar el suelo,\n\ +y recibir menos daño de\n\ +lo normal por el golpe.") + +DEFINE_DIALOG(DIALOG_137, NO_SOUND, 6, 30, 200, "\ +¡Gracias, Mario! La\n\ +energía del castillo se\n\ +restaura poco a poco\n\ +según consigues estrellas\n\ +de Poder, y has hecho\n\ +huir a Bowser.\n\ +Pero seguro que te está\n\ +esperando más adelante.\n\ +Por cierto... espero que\n\ +estés cogiendo todas las\n\ +monedas que puedas, ¿eh?\n\ +\n\ +No te lo vas a creer:\n\ +todos los mundos tienen\n\ +una estrella oculta que\n\ +solo aparece si consigues\n\ +100 monedas en ese mundo.\n\ +¡Intenta conseguirlas!") + +DEFINE_DIALOG(DIALOG_138, NO_SOUND, 4, 30, 200, "\ +Abajo: Lago subterráneo\n\ +Izquierda: Agujero negro\n\ +Derecha: Laberinto venenoso\n\ +(Cerrado)") + +DEFINE_DIALOG(DIALOG_139, NO_SOUND, 6, 30, 200, "\ +Arriba: Auto-ascensor.\n\ +El ascensor se mueve\n\ +automáticamente siguiendo\n\ +una ruta predefinida.\n\ +Cuando termina, desaparece\n\ +autómáticamente.\n\ +¡No te caigas!") + +DEFINE_DIALOG(DIALOG_140, NO_SOUND, 6, 30, 200, "\ +Zona del ascensor\n\ +Derecha:Laberinto venenoso\n\ +\t\tEntrada\n\ +Izquierda: Agujero negro\n\ +\t\tAscensor 1\n\ +Flecha: Tu posición") + +DEFINE_DIALOG(DIALOG_141, NO_SOUND, 6, 150, 200, "\ +¡Has conseguido una de\n\ +las estrellas de poder\n\ +robadas! Ahora puedes\n\ +abrir más puertas del\n\ +castillo.\n\ +\n\ +Prueba a ir a la\n\ +habitación de la princesa\n\ +en el segundo piso o\n\ +a la sala con el cuadro\n\ +de la Fortaleza Roco\n\ +en el primer piso.\n\ +Las tropas de Bowser no\n\ +paran de crecer y ganar\n\ +poder, así que no bajes\n\ +la guardia, Mario. ¡Sigue\n\ +buscando estrellas!") + +DEFINE_DIALOG(DIALOG_142, NO_SOUND, 6, 150, 200, "\ +¡Has recuperado tres\n\ +estrellas de poder! Ahora\n\ +puedes abrir cualquier\n\ +puerta que tenga un 3\n\ +en la estrella.\n\ +\n\ +Puedes entrar y salir\n\ +de los mundos disponibles\n\ +cuantas veces quieras.\n\ +¡Te esperan enemigos\n\ +cada vez más fuertes,\n\ +así que ten cuidado!") + +DEFINE_DIALOG(DIALOG_143, NO_SOUND, 7, 150, 200, "\ +¡Has recuperado ocho\n\ +estrellas de poder!\n\ +¡Ahora puedes abrir la\n\ +puerta con la estrella\n\ +gigante! Pero Bowser\n\ +está cerca... ¿oyes\n\ +a la princesa llamándote?") + +DEFINE_DIALOG(DIALOG_144, NO_SOUND, 6, 150, 200, "\ +¡Has recuperado 30\n\ +estrellas de poder! Ahora\n\ +puedes abrir la puerta\n\ +con la estrella grande.\n\ +Pero antes de eso: ¿qué\n\ +tal te está yendo?\n\ +¿Has pisoteado las dos\n\ +columnas? Y... no habrás\n\ +perdido tu gorra, ¿no?\n\ +Si la has perdido, es muy\n\ +posible que la tenga ese\n\ +desgraciado cuervo...\n\ +Se comenta que Bowser ha\n\ +huido de su refugio\n\ +marítimo y está bajo\n\ +tierra. ¿Lo has\n\ +acorralado por fin?") + +DEFINE_DIALOG(DIALOG_145, NO_SOUND, 6, 150, 200, "\ +¡Has recuperado 50\n\ +estrellas de poder! Ahora\n\ +puedes abrir la puerta de\n\ +la estrella grande del\n\ +tercer piso. Bowser está\n\ +ahí, como ya sabes.\n\ +¡Ah! Imagino que ya has\n\ +activado los botones\n\ +de las gorras, ¿no? ¿El\n\ +rojo, el azul y el verde?\n\ +Las gorras a las que te\n\ +dan acceso ayudan mucho.\n\ +Bueno, date prisa. El\n\ +tercer piso está ahí\n\ +delante.") + +DEFINE_DIALOG(DIALOG_146, NO_SOUND, 6, 150, 200, "\ +¡Has encontrado 70\n\ +estrellas de poder! Ahora\n\ +esas escaleras infinitas\n\ +de las que tanto presume\n\ +Bowser no son más que\n\ +unas escaleras normales.\n\ +¡Seguro que no está\n\ +muy contento! Y lo que le\n\ +espera: ¡Te toca ir a\n\ +darle una lección!") + +DEFINE_DIALOG(DIALOG_147, NO_SOUND, 5, 30, 200, "\ +¿Estás usando los bloques\n\ +de las gorras? Porque\n\ +deberías, ¿sabes?\n\ +\n\ +\n\ +Para volverlos sólidos y\n\ +poder romperlos, tendrás\n\ +que activar sus\n\ +correspondientes botones\n\ +de colores.\n\ +Están ocultos en zonas\n\ +secretas del castillo.\n\ +Necesitarás encontrar\n\ +algunas estrellas antes.\n\ +\n\ +Los bloques rojos te dan\n\ +la gorra voladora, los\n\ +verdes la gorra de metal,\n\ +y los azules la gorra\n\ +de invisibilidad.") + +DEFINE_DIALOG(DIALOG_148, NO_SOUND, 6, 30, 200, "\ +La Montaña del Muñeco de\n\ +Nieve está justo delante.\n\ +¡No pasar! Y ni se te\n\ +ocurra hacer un triple\n\ +salto por encima del\n\ +dispensador de hielo.\n\ +Si te caes en el lago\n\ +congelado, tu vida bajará\n\ +muy rápidamente, y no\n\ +la recuperarás en la\n\ +superficie.\n\ +\t--El Muñeco de Nieve") + +DEFINE_DIALOG(DIALOG_149, NO_SOUND, 4, 30, 200, "\ +¡Bienvenido al tobogán\n\ +secreto de la Princesa\n\ +Peach!\n\ +\n\ +Hay una estrella oculta\n\ +aquí que Bowser no pudo\n\ +encontrar.\n\ +\n\ +Cuando te deslices, mueve\n\ +el stick hacia delante\n\ +para acelerar, y atrás\n\ +para frenar.\n\ +Si llegas a la meta muy\n\ +rápido, ¡conseguirás la\n\ +estrella oculta!") + +DEFINE_DIALOG(DIALOG_150, SOUND_OBJ_WIGGLER_TALK, 5, 30, 200, "\ +¡Buaaa! ¡Has inundado mi\n\ +casa! ¿Por qué harías\n\ +algo así? ¡Mira este\n\ +desastre! ¿Qué voy a\n\ +hacer ahora?\n\ +El techo está arruinado,\n\ +el suelo está empapado...\n\ +¿qué puedo hacer? Uff...\n\ +Me... enfada... ¡MUCHO!\n\ +\n\ +¡Desde que encontré esta\n\ +estúpida estrella, todo\n\ +me ha empezado a salir\n\ +mal! Brilla mucho... pero\n\ +me hace sentir raro.") + +DEFINE_DIALOG(DIALOG_151, SOUND_OBJ_WIGGLER_TALK, 3, 30, 200, "\ +¡No puedo más! Primero\n\ +inundas todo, ¡y ahora\n\ +vas y me pisas!\n\ +¡Ahora sí que estoy bien\n\ +cabreado!\n\ +¡Aaaahhhhh!") + +DEFINE_DIALOG(DIALOG_152, SOUND_OBJ_WIGGLER_TALK, 3, 30, 200, "\ +¡Ay! ¡Tío! ¡Tío! ¡Para!\n\ +¡Me rindo! ¡Quédate esta\n\ +estrella!\n\ +...guau, de repente me\n\ +siento mejor. Igualmente\n\ +no la necesitaba.\n\ +Me gusta mucho ver las\n\ +estrellas por la noche.\n\ +Me hacen sentir en paz.\n\ +Por favor, ¡ven a verme\n\ +cuando quieras!") + +DEFINE_DIALOG(DIALOG_153, NO_SOUND, 4, 30, 200, "\ +¡Hey! ¿Quién anda ahí?\n\ +¿Qué es esta cosa que\n\ +tengo encima? ¿Se\n\ +me ha subido un bicho?\n\ +¡Sea lo que sea, me\n\ +molesta! ¡Voy a quitármelo\n\ +soplando!") + +DEFINE_DIALOG(DIALOG_154, NO_SOUND, 5, 30, 200, "\ +¡No pierdas tu gorra! Si\n\ +la pierdes, te harán daño\n\ +más fácilmente. Si eso\n\ +ocurre, búscala en el\n\ +mundo donde la perdiste.\n\ +Hablando de perder, la\n\ +Princesa sigue\n\ +desaparecida, atrapada en\n\ +alguna de las paredes.\n\ +¡Ayúdala, Mario!\n\ +Por cierto, sabes que\n\ +algunos mundos están\n\ +escondidos directamente\n\ +en las paredes en lugar\n\ +de un cuadro, ¿verdad?") + +DEFINE_DIALOG(DIALOG_155, NO_SOUND, 6, 30, 200, "\ +Gracias al poder de las\n\ +estrellas, el castillo\n\ +empieza a volver a la\n\ +vida. Por favor, Mario,\n\ +¡dale una lección a\n\ +Bowser!\n\ +Mira, deja que te cuente\n\ +un secreto del castillo.\n\ +En la habitación con el\n\ +espejo, estate atento\n\ +a ver si ves algo que\n\ +solo existe en el espejo.\n\ +Y cuando vayas al\n\ +Mundo Mojaseca, puedes\n\ +inundarlo al entrar si \n\ +entras por la parte\n\ +superior del cuadro.") + +DEFINE_DIALOG(DIALOG_156, NO_SOUND, 5, 30, 200, "\ +Ese reloj tiene algo\n\ +extraño. Intenta fijarte\n\ +en la posición que tienen\n\ +las manillas cuando\n\ +entras.") + +DEFINE_DIALOG(DIALOG_157, NO_SOUND, 5, 30, 200, "\ +¡Cuidado! ¡No te hundas\n\ +en las arenas movedizas!\n\ +\n\ +\n\ +\n\ +Si te hundes en la arena,\n\ +no podrás saltar, y si tu\n\ +cabeza se hunde, tendrás\n\ +que aprender a convivir\n\ +con los escorpiones.\n\ +Las zonas oscuras son\n\ +pozos sin fondo.") + +DEFINE_DIALOG(DIALOG_158, NO_SOUND, 6, 30, 200, "\ +1. Si saltas repetidamente\n\ +y con el ritmo adecuado,\n\ +saltarás cada vez más\n\ +alto. Si lo haces al\n\ +correr tres veces, harás\n\ +un triple salto.\n\ +2. Salta hacia una pared,\n\ +y cuando la toques vuelve\n\ +a saltar. De esta manera\n\ +podrás rebotar y llegar\n\ +más alto") + +DEFINE_DIALOG(DIALOG_159, NO_SOUND, 6, 30, 200, "\ +3. Para hacer una pirueta\n\ +hacia atrás, párate,\n\ +pulsa Ⓩ, y luego Ⓐ\n\ +Para hacer un salto\n\ +largo, pulsa Ⓩ y Ⓐ\n\ +mientras corres.") + +DEFINE_DIALOG(DIALOG_160, NO_SOUND, 5, 30, 200, "\ +Pulsa Ⓑ mientras corres\n\ +rápido para lanzarte hacia\n\ +delante. Para saltar y\n\ +ponerte de pie, pulsa Ⓐ\n\ +o Ⓑ.") + +DEFINE_DIALOG(DIALOG_161, SOUND_GENERAL_YOSHI_TALK, 5, 30, 200, "\ +¡¡¡Mario!!!\n\ +¿De verdad eres tú?\n\ +¡Ha pasado tanto tiempo\n\ +desde nuestra última\n\ +aventura!\n\ +¡Me habían dicho que\n\ +podría verte si te\n\ +esperaba aquí, pero\n\ +estaba a punto de\n\ +rendirme!\n\ +¿Es cierto lo que dicen?\n\ +¿De verdad has vencido a\n\ +Bowser? ¿Y has devuelto\n\ +las estrellas al\n\ +castillo?\n\ +¡Sabía que podrías\n\ +hacerlo! Ahora tengo un\n\ +mensaje muy especial para\n\ +ti.\n\ +\n\ +“¡Gracias por jugar a\n\ +Super Mario 64! Este es\n\ +el final del juego, pero\n\ +no el final de la\n\ +diversión.\n\ +Queremos que sigas\n\ +jugando, así que tenemos\n\ +un regalito para ti.\n\ +¡Disfrútalo!\n\ +\n\ +Firmado: El equipo de\n\ +Super Mario 64.”") + +DEFINE_DIALOG(DIALOG_162, NO_SOUND, 4, 30, 200, "\ +¡No, otra vez tú no!\n\ +¡Te he dicho que llego\n\ +tarde! ¿Es que no te\n\ +importa?\n\ +Mira, no tengo tiempo de\n\ +estar peleando por unas\n\ +estrellas. ¡No la estaba\n\ +intentando esconder!\n\ +Lo que pasa es que llevo\n\ +mucha prisa. Eso es todo.\n\ +Toma, quédatela, ¡Pero\n\ +déjame irme ya!") + +DEFINE_DIALOG(DIALOG_163, NO_SOUND, 5, 30, 200, "\ +¡Nooo! ¡Ahora sí que me\n\ +has vencido, Mario! ¡Y\n\ +no puedo soportar perder\n\ +ante ti!\n\ +\n\ +Mis tropas... ¡son\n\ +inútiles! ¡Han perdido\n\ +todas las estrellas de\n\ +Poder! ¿Cómo dices?\n\ +¿¿¿Que hay 120???\n\ +¡Increíble! ¿Hay algunas\n\ +que no encontré? ¡No puede\n\ +ser! ¡Pensaba que las\n\ +tenía todas!\n\ +\n\ +Puedo ver la paz\n\ +volviendo al mundo... ¡no\n\ +lo soporto! ¡No puedo\n\ +mirar! ¡Me largo!\n\ +\n\ +Prepárate para la\n\ +próxima.\n\ +Hasta entonces, ¡haz que\n\ +ese stick de control\n\ +eche humo! ¡Ja ja ja!") + +DEFINE_DIALOG(DIALOG_164, NO_SOUND, 4, 30, 200, "\ +¡Hola, Mario! ¿Qué tal?\n\ +No he estado corriendo\n\ +últimamente, así que no\n\ +estoy muy en forma.\n\ +Pero aún así, no puedo.\n\ +decir que no a una\n\ +carrera, especialmente si\n\ +es contra un amigo.\n\ +¿Qué me dices?\n\ +Preparados... listos...\n\ +\n\ +\t¡Ya!\t¡Luego!") + +DEFINE_DIALOG(DIALOG_165, NO_SOUND, 6, 30, 200, "\ +Deniego cualquier\n\ +responsabilidad si\n\ +alguien se marea y se\n\ +desmaya por correr \n\ +alrededor de este\n\ +cartel.") + +DEFINE_DIALOG(DIALOG_166, NO_SOUND, 4, 30, 200, "\ +Volveré pronto.\n\ +Estoy entrenando,\n\ +así que vuelve más tarde.\n\ +\t --Koopa el Rápido") + +DEFINE_DIALOG(DIALOG_167, NO_SOUND, 4, 30, 200, "\ +El castillo de la princesa\n\ +está justo delante.\n\ +\n\ +\n\ +Pulsa Ⓐ para saltar, Ⓩ\n\ +para agacharte, y Ⓑ para\n\ +dar un puñetazo, leer un\n\ +cartel, o coger algo.\n\ +Vuelve a pulsar Ⓑ para\n\ +tirar algo que hayas\n\ +cogido.") + +DEFINE_DIALOG(DIALOG_168, SOUND_OBJ_WIGGLER_TALK, 5, 30, 200, "\ +¡Hey! ¡Ya basta! ¡Es la\n\ +segunda vez que haces eso!\n\ +¡Ahora sí que te lo has\n\ +buscado, pesado! ¡Te vas\n\ +a enterar!") + +DEFINE_DIALOG(DIALOG_169, NO_SOUND, 4, 30, 200, "\ +¡Prohibido el paso!\n\ +¡¡Va por ti!!\n\ +¡Arrgghh!\n\ +\n\ +A cualquiera que entre en\n\ +esta cueva sin permiso\n\ +le espera un destino\n\ +terrible.") diff --git a/text/fr/courses.h b/text/fr/courses.h index 96351ff2d..3acede5a6 100644 --- a/text/fr/courses.h +++ b/text/fr/courses.h @@ -1,80 +1,80 @@ -COURSE_ACTS(COURSE_BOB, _(" 1 BATAILLE DE BOB-OMB"), - _("ROI BOB-OMB DU SOMMET") , _("COURSE CONTRE KOOPA-RAPIDO") , _("CANON VERS L'ILE PERCHEE"), - _("LES 8 PIECES ROUGES") , _("VOL DU MARIO AILE") , _("DERRIERE LA CAGE DE CHOMP")) +COURSE_ACTS(COURSE_BOB, "BATAILLE DE BOB-OMB", + "ROI BOB-OMB DU SOMMET" , "COURSE CONTRE KOOPA-RAPIDO" , "CANON VERS L'ÎLE PERCHÉE", + "LES 8 PIÈCES ROUGES" , "VOL DU MARIO AILÉ" , "DERRIÈRE LA CAGE DE CHOMP") -COURSE_ACTS(COURSE_WF, _(" 2 FORTERESSE DE WHOMP"), - _("DESTRUCTION DU GROS WHOMP") , _("EN HAUT DE LA FORTERESSE") , _("CANON VERS LES CIEUX"), - _("PIECES ROUGES DANS LES AIRS") , _("TOMBEZ DANS LA CAGE PERCHEE") , _("CANON VERS UN MUR...")) +COURSE_ACTS(COURSE_WF, "FORTERESSE DE WHOMP", + "DESTRUCTION DU GROS WHOMP" , "EN HAUT DE LA FORTERESSE" , "CANON VERS LES CIEUX", + "PIÈCES ROUGES DANS LES AIRS" , "TOMBEZ DANS LA CAGE PERCHÉE" , "CANON VERS UN MUR...") -COURSE_ACTS(COURSE_JRB, _(" 3 BAIE DES PIRATES"), - _("PILLEZ LE BATEAU COULE") , _("L'ANGUILLE VEUT FAIRE JOUJOU?") , _("TRESOR DANS LA CAVERNE"), - _("PIECES ROUGES A BORD!") , _("CANON VERS LES PILIERS") , _("DANS LE GEYSER")) +COURSE_ACTS(COURSE_JRB, "BAIE DES PIRATES", + "PILLEZ LE BATEAU COULÉ" , "L'ANGUILLE VEUT FAIRE JOUJOU?" , "TRÉSOR DANS LA CAVERNE", + "PIÈCES ROUGES À BORD!" , "CANON VERS LES PILIERS" , "DANS LE GEYSER") -COURSE_ACTS(COURSE_CCM, _(" 4 MONTAGNE GLA-GLA"), - _("GLISSADE SUR GLACE") , _("PETIT PINGOUIN PERDU") , _("COURSE DU PINGOUIN"), - _("8 PIECES ROUGES GIVREES") , _("BONHOMME DE NEIGE SANS TETE") , _("MURS POUR REBONDIR")) +COURSE_ACTS(COURSE_CCM, "MONTAGNE GLA-GLA", + "GLISSADE SUR GLACE" , "PETIT PINGOUIN PERDU" , "COURSE DU PINGOUIN", + "8 PIÈCES ROUGES GIVRÉES" , "BONHOMME DE NEIGE SANS TÊTE" , "MURS POUR REBONDIR") -COURSE_ACTS(COURSE_BBH, _(" 5 MANOIR DE BIG BOO"), - _("CHERCHEZ LE BIG BOO") , _("MANEGE DES BOOS PAS BEAUX") , _("SECRET DES LIVRES HANTES"), - _("TROUVEZ LES 8 PIECES ROUGES") , _("BALCON DE BIG BOO") , _("UN OEIL SUR LES SALLES SECRETES")) +COURSE_ACTS(COURSE_BBH, "MANOIR DE BIG BOO", + "CHERCHEZ LE BIG BOO" , "MANÈGE DES BOOS PAS BEAUX" , "SECRET DES LIVRES HANTÉS", + "TROUVEZ LES 8 PIÈCES ROUGES" , "BALCON DE BIG BOO" , "UN OEIL SUR LES SALLES SECRÈTES") -COURSE_ACTS(COURSE_HMC, _(" 6 CAVERNE BRUMEUSE"), - _("GROS BIBI DE LA CAVERNE") , _("CHARIOT POUR PIECES ROUGES") , _("COURSE DE METAL MARIO"), - _("DANS LE LABYRINTHE TOXIQUE") , _("AU-DESSUS DES GAZ...") , _("ATTENTION AUX BOULETS")) +COURSE_ACTS(COURSE_HMC, "CAVERNE BRUMEUSE", + "GROS BIBI DE LA CAVERNE" , "CHARIOT POUR PIÈCES ROUGES" , "COURSE DE MÉTAL MARIO", + "DANS LE LABYRINTHE TOXIQUE" , "AU-DESSUS DES GAZ..." , "ATTENTION AUX BOULETS") -COURSE_ACTS(COURSE_LLL, _(" 7 LAVES FATALES"), - _("CRAMEZ LE GROS MOCHE") , _("POUSSEZ LES PETITS MOCHES") , _("PUZZLE DE 8 PIECES ROUGES"), - _("BALADE SUR LA BUCHE") , _("CHAUD DANS LE VOLCAN") , _("ASCENCEUR DANS LE VOLCAN")) +COURSE_ACTS(COURSE_LLL, "LAVES FATALES", + "CRAMEZ LE GROS MOCHE" , "POUSSEZ LES PETITS MOCHES" , "PUZZLE DE 8 PIÈCES ROUGES", + "BALADE SUR LA BÛCHE" , "CHAUD DANS LE VOLCAN" , "ASCENCEUR DANS LE VOLCAN") -COURSE_ACTS(COURSE_SSL, _(" 8 SABLES TROP MOUVANTS"), - _("DANS LES GRIFFES DU VAUTOUR") , _("AU SOMMET DE LA PYRAMIDE") , _("DANS L'ANCIENNE PYRAMIDE"), - _("LES QUATRE PILIERS DE LA FOI") , _("VOL VERS LES PIECES ROUGES") , _("ENIGME DE LA PYRAMIDE")) +COURSE_ACTS(COURSE_SSL, "SABLES TROP MOUVANTS", + "DANS LES GRIFFES DU VAUTOUR" , "AU SOMMET DE LA PYRAMIDE" , "DANS L'ANCIENNE PYRAMIDE", + "LES QUATRE PILIERS DE LA FOI" , "VOL VERS LES PIÈCES ROUGES" , "ÉNIGME DE LA PYRAMIDE") -COURSE_ACTS(COURSE_DDD, _(" 9 AFFREUX BASSIN"), - _("SOUS-MARIN DE BOWSER") , _("COFFRES DANS LE COURANT") , _("PERCHES POUR PIECES ROUGES"), - _("DANS LE GEYSER") , _("RECOMPENSE DE LA RAIE") , _("ASSOCIATION DE CASQUETTES...")) +COURSE_ACTS(COURSE_DDD, "AFFREUX BASSIN", + "SOUS-MARIN DE BOWSER" , "COFFRES DANS LE COURANT" , "PERCHES POUR PIÈCES ROUGES", + "DANS LE GEYSER" , "RÉCOMPENSE DE LA RAIE" , "ASSOCIATION DE CASQUETTES...") -COURSE_ACTS(COURSE_SL, _("10 CHEZ LE ROI DES NEIGES"), - _("GROSSE TETE DU BONHOMME") , _("COMBATTEZ LE GROS MOCHE GIVRE") , _("DANS LE GLAÇON"), - _("VRILLE DEPUIS LE LAC") , _("CARAPACE POUR PIECES ROUGES") , _("DANS L'IGLOO")) +COURSE_ACTS(COURSE_SL, "CHEZ LE ROI DES NEIGES", + "GROSSE TÊTE DU BONHOMME" , "COMBATTEZ LE GROS MOCHE GIVRÉ" , "DANS LE GLAÇON", + "VRILLE DEPUIS LE LAC" , "CARAPACE POUR PIÈCES ROUGES" , "DANS L'IGLOO") -COURSE_ACTS(COURSE_WDW, _("11 MONDE TREMPE-SECHE"), - _("MINI PLATES-FORMES FLECHEES!") , _("SUR LES TOITS") , _("ENIGME DES CHIFFRES CACHES"), - _("ASCENSEUR EXPRESS!") , _("PIECES ROUGES: VILLE ENGLOUTIE"), _("COURSE EN VILLE")) +COURSE_ACTS(COURSE_WDW, "MONDE TREMPE-SECHE", + "MINI PLATES-FORMES FLÉCHÉES!" , "SUR LES TOITS" , "ÉNIGME DES CHIFFRES CACHÉS", + "ASCENSEUR EXPRESS!" , "PIÈCES ROUGES: VILLE ENGLOUTIE", "COURSE EN VILLE") -COURSE_ACTS(COURSE_TTM, _("12 TROP HAUTE MONTAGNE"), - _("ESCALADEZ LA MONTAGNE") , _("MYSTERE DE LA CAGE DU SINGE") , _("PIECES ROUGES SUR CHAMPIGNON"), - _("PAROI MYSTERIEUSE") , _("PANORAMA DU PONT") , _("CANON VERS LE CHAMPIGNON")) +COURSE_ACTS(COURSE_TTM, "TROP HAUTE MONTAGNE", + "ESCALADEZ LA MONTAGNE" , "MYSTÈRE DE LA CAGE DU SINGE" , "PIÈCES ROUGES SUR CHAMPIGNON", + "PAROI MYSTÉRIEUSE" , "PANORAMA DU PONT" , "CANON VERS LE CHAMPIGNON") -COURSE_ACTS(COURSE_THI, _("13 ILE GRANDS-PETITS"), - _("DETRUISEZ LES MAXI-CARNIVORES") , _("AU SOMMET DE L'ILE DES GEANTS") , _("KOOPA-RAPIDO, LA VENGEANCE"), - _("CINQ TOUT PETITS SECRETS") , _("LES PIECES ROUGES DU GIGOTEUR") , _("ENERVEZ LE GIGOTEUR")) +COURSE_ACTS(COURSE_THI, "ÎLE GRANDS-PETITS", + "DÉTRUISEZ LES MAXI-CARNIVORES" , "AU SOMMET DE L'ÎLE DES GÉANTS" , "KOOPA-RAPIDO, LA VENGEANCE", + "CINQ TOUT PETITS SECRETS" , "LES PIÈCES ROUGES DU GIGOTEUR" , "ÉNERVEZ LE GIGOTEUR") -COURSE_ACTS(COURSE_TTC, _("14 HORLOGE TIC-TAC"), - _("ROULEMENTS DANS LA CAGE") , _("LES TROUS ET LE PENDULE") , _("CHEVAUCHEZ L'AIGUILLE"), - _("L'ECRABOUILLEUR") , _("SAUTS SYNCHRONISES") , _("L'HEURE PILE POUR LES PIECES")) +COURSE_ACTS(COURSE_TTC, "HORLOGE TIC-TAC", + "ROULEMENTS DANS LA CAGE" , "LES TROUS ET LE PENDULE" , "CHEVAUCHEZ L'AIGUILLE", + "L'ÉCRABOUILLEUR" , "SAUTS SYNCHRONISÉS" , "L'HEURE PILE POUR LES PIÈCES") -COURSE_ACTS(COURSE_RR, _("15 COURSE ARC-EN-CIEL"), - _("CROISIERE SUR L'ARC-EN-CIEL") , _("MANOIR DANS LES AIRS") , _("LABYRINTHE DES PIECES ROUGES"), - _("BALANÇOIRE CELESTE") , _("VICIEUX TRIANGLES!") , _("L'ARC-EN-CIEL ET AU-DELA")) +COURSE_ACTS(COURSE_RR, "COURSE ARC-EN-CIEL", + "CROISIÈRE SUR L'ARC-EN-CIEL" , "MANOIR DANS LES AIRS" , "LABYRINTHE DES PIÈCES ROUGES", + "BALANÇOIRE CÉLESTE" , "VICIEUX TRIANGLES!" , "L'ARC-EN-CIEL ET AU-DELÀ") -SECRET_STAR(COURSE_BITDW, _(" BOWSER DES TENEBRES")) -SECRET_STAR(COURSE_BITFS, _(" BOWSER DES LAVES")) -SECRET_STAR(COURSE_BITS, _(" BOWSER DES CIEUX")) -SECRET_STAR(COURSE_PSS, _(" GLISSADE DE LA PRINCESSE")) -SECRET_STAR(COURSE_COTMC, _(" MINE DES CASQUETTES-METAL")) -SECRET_STAR(COURSE_TOTWC, _(" INTERRUPTEUR DE LA TOUR AILEE")) -SECRET_STAR(COURSE_VCUTM, _(" INVISIBLE SOUS LES DOUVES")) -SECRET_STAR(COURSE_WMOTR, _(" AU-DELA DE L'ARC-EN-CIEL")) -SECRET_STAR(COURSE_SA, _(" AQUARIUM SECRET")) -SECRET_STAR(COURSE_CAKE_END, _("")) +SECRET_STAR(COURSE_BITDW, "BOWSER DES TÉNÈBRES") +SECRET_STAR(COURSE_BITFS, "BOWSER DES LAVES") +SECRET_STAR(COURSE_BITS, "BOWSER DES CIEUX") +SECRET_STAR(COURSE_PSS, "GLISSADE DE LA PRINCESSE") +SECRET_STAR(COURSE_COTMC, "MINE DES CASQUETTES-MÉTAL") +SECRET_STAR(COURSE_TOTWC, "INTERRUPTEUR DE LA TOUR AILÉE") +SECRET_STAR(COURSE_VCUTM, "INVISIBLE SOUS LES DOUVES") +SECRET_STAR(COURSE_WMOTR, "AU-DELÀ DE L'ARC-EN-CIEL") +SECRET_STAR(COURSE_SA, "AQUARIUM SECRET") +SECRET_STAR(COURSE_CAKE_END, "") -CASTLE_SECRET_STARS(_(" ETOILES SECRETES")) +CASTLE_SECRET_STARS("ÉTOILES SECRÈTES") -EXTRA_TEXT(0, _("UNE ETOILE SECRETE DU CHATEAU")) -EXTRA_TEXT(1, _("")) -EXTRA_TEXT(2, _("")) -EXTRA_TEXT(3, _("")) -EXTRA_TEXT(4, _("")) -EXTRA_TEXT(5, _("")) -EXTRA_TEXT(6, _("")) +EXTRA_TEXT(0, "UNE ÉTOILE SECRÈTE DU CHÂTEAU") +EXTRA_TEXT(1, "") +EXTRA_TEXT(2, "") +EXTRA_TEXT(3, "") +EXTRA_TEXT(4, "") +EXTRA_TEXT(5, "") +EXTRA_TEXT(6, "") diff --git a/text/fr/dialogs.h b/text/fr/dialogs.h index 26e8c1fbb..e4d4ebb7a 100644 --- a/text/fr/dialogs.h +++ b/text/fr/dialogs.h @@ -1,6 +1,6 @@ -// Parameters: dialog enum ID, (unused), lines per box, left offset, width +// Parameters: dialog enum ID, voice sound, lines per box, left offset, width -DEFINE_DIALOG(DIALOG_000, 1, 6, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_000, NO_SOUND, 6, 30, 200, "\ Incroyable! Vous voilà\n\ propulsé au beau milieu\n\ d'un champ de bataille!\n\ @@ -15,18 +15,18 @@ Bowser a dérobées...\n\ \n\ Tout d'abord, parlez au\n\ gentil Bob-omb (appuyez\n\ -sur [B] pour parler). Il\n\ +sur Ⓑ pour parler). Il\n\ vous aidera sûrement,\n\ ainsi que ses camarades\n\ dans d'autres niveaux...\n\ Pour lire une pancarte:\n\ arrêtez-vous, faites face\n\ au panneau et appuyez sur\n\ -[B]. Appuyez sur [A] ou [B]\n\ +Ⓑ. Appuyez sur Ⓐ ou Ⓑ\n\ pour lire la suite du\n\ -texte.")) +texte.") -DEFINE_DIALOG(DIALOG_001, 1, 5, 95, 200, _("\ +DEFINE_DIALOG(DIALOG_001, SOUND_OBJ_BOBOMB_BUDDY_TALK, 5, 95, 200, "\ Attention! Si tu te\n\ promènes par ici, tu\n\ risques de te faire\n\ @@ -54,9 +54,9 @@ trouver le Roi Bob-omb.\n\ \n\ Reviens me voir lorsque tu\n\ auras récupéré l'étoile de\n\ -puissance!")) +puissance!") -DEFINE_DIALOG(DIALOG_002, 1, 6, 95, 200, _("\ +DEFINE_DIALOG(DIALOG_002, SOUND_OBJ_BOBOMB_BUDDY_TALK, 6, 95, 200, "\ Hé, toi! C'est dangereux\n\ par ici! Alors écoute bien\n\ mon conseil:\n\ @@ -80,9 +80,9 @@ Bob-ombs, et nous sommes\n\ de ton côté.\n\ N'hésite pas à venir nous\n\ parler à chaque fois que\n\ -tu en as envie!")) +tu en as envie!") -DEFINE_DIALOG(DIALOG_003, 1, 5, 95, 200, _("\ +DEFINE_DIALOG(DIALOG_003, SOUND_OBJ_BOBOMB_BUDDY_TALK, 5, 95, 200, "\ Merci beaucoup Mario!\n\ Tu as éclaté le vilain Roi\n\ Bob-omb comme une vieille\n\ @@ -101,9 +101,9 @@ de nouvelles portes menant\n\ Mes camarades Bob-ombs\n\ t'attendent. Si tu leur\n\ parles, ils te prépareront\n\ -de jolis canons!")) +de jolis canons!") -DEFINE_DIALOG(DIALOG_004, 1, 6, 95, 200, _("\ +DEFINE_DIALOG(DIALOG_004, SOUND_OBJ_BOBOMB_BUDDY_TALK, 6, 95, 200, "\ Nous sommes des\n\ Bob-ombs pacifiques, nous\n\ n'utilisons pas de canons.\n\ @@ -115,9 +115,9 @@ vers les cieux,\n\ No Problemo: nous\n\ nous ferons une joie de te\n\ préparer tous les canons\n\ -de ce niveau. Bon voyage!")) +de ce niveau. Bon voyage!") -DEFINE_DIALOG(DIALOG_005, 1, 5, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_005, SOUND_OBJ_KOOPA_TALK, 5, 30, 200, "\ Hé, Mario! C'est vrai ce\n\ qu'on raconte? Tu as\n\ vraiment battu le Roi\n\ @@ -133,33 +133,33 @@ course jusqu'au sommet\n\ de la montagne, là où\n\ était le Roi Bob-omb?\n\ Alors, qu'en dis-tu?\n\ -Lorsque je dis 『partez』,\n\ +Lorsque je dis “partez”,\n\ la course commence...\n\ Prêt...\n\ \n\ -//Partez!//Heu, non.")) +\tPartez!\tHeu, non.") -DEFINE_DIALOG(DIALOG_006, 1, 4, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_006, SOUND_OBJ_KOOPA_TALK, 4, 30, 200, "\ Hé! Tu te moques de moi,\n\ p'tit nain pas beau?\n\ Tu dois courir du début\n\ jusqu'à la fin!\n\ A plus tard. Reviens me\n\ voir lorsque tu arrêteras\n\ -de tricher...")) +de tricher...") -DEFINE_DIALOG(DIALOG_007, 1, 5, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_007, SOUND_OBJ_KOOPA_TALK, 5, 30, 200, "\ Heuufff...fff...peufff...\n\ Whoa! Tu...es...vraiment\n\ rapide...pour un nabot!\n\ Tu viens de l'espace?\n\ -Tiens, tu l'as méritée!")) +Tiens, tu l'as méritée!") -DEFINE_DIALOG(DIALOG_008, 1, 5, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_008, NO_SOUND, 5, 30, 200, "\ ATTENTION AU CHOMP\n\ ENCHAINE!!!\n\ Danger! Approchez-vous\n\ -et appuyez sur [C]^ pour\n\ +et appuyez sur Ⓒ▲ pour\n\ jeter un oeil.\n\ Impressionnant, non?\n\ Avez-vous remarqué la\n\ @@ -168,9 +168,9 @@ Lorsque vous collecterez 8\n\ pièces comme celle-ci,\n\ une étoile apparaîtra\n\ dans le pré de l'autre\n\ -côté du pont...")) +côté du pont...") -DEFINE_DIALOG(DIALOG_009, 1, 4, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_009, SOUND_OBJ_KOOPA_TALK, 4, 30, 200, "\ Ça fait longtemps qu'on\n\ ne s'était pas vu, Mario!\n\ Fouiii! Tu es devenu super\n\ @@ -190,9 +190,14 @@ dans la vallée Valvent...\n\ Prêt...\n\ \n\ \n\ -//Partez!// Heu, non.")) +\tPartez!\t Heu, non.") -DEFINE_DIALOG(DIALOG_010, 1, 4, 30, 200, _("\ +/** + * Special case: if the voice is SEQ_EVENT_SOLVE_PUZZLE, + * then play_dialog_sound will run play_puzzle_jingle + * instead of playing a sound effect + */ +DEFINE_DIALOG(DIALOG_010, SEQ_EVENT_SOLVE_PUZZLE, 4, 30, 200, "\ Vous venez d'actionner\n\ l'interrupteur des\n\ casquettes ailées...\n\ @@ -207,9 +212,9 @@ rouges que vous\n\ détruirez...\n\ Voulez-vous sauvegarder?\n\ \n\ -//Oui////Non.")) +\t\tOui\t\tNon.") -DEFINE_DIALOG(DIALOG_011, 1, 4, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_011, SEQ_EVENT_SOLVE_PUZZLE, 4, 30, 200, "\ Vous venez d'actionner\n\ l'interrupteur des\n\ casquettes-métal!\n\ @@ -224,9 +229,9 @@ surgiront des blocs verts\n\ que vous détruirez...\n\ Voulez-vous sauvegarder?\n\ \n\ -//Oui////Non.")) +\tOui\t\tNon.") -DEFINE_DIALOG(DIALOG_012, 1, 4, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_012, SEQ_EVENT_SOLVE_PUZZLE, 4, 30, 200, "\ Vous venez d'actionner\n\ l'interrupteur des\n\ casquettes d'invisibilité.\n\ @@ -241,44 +246,44 @@ des blocs bleus que vous\n\ détruirez...\n\ Voulez-vous sauvegarder?\n\ \n\ -//Oui////Non.")) +\tOui\t\tNon.") -DEFINE_DIALOG(DIALOG_013, 1, 6, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_013, NO_SOUND, 6, 30, 200, "\ Vous avez récupéré 100\n\ pièces! Mario sera\n\ désormais plus puissant!\n\ Voulez-vous sauvegarder?\n\ \n\ -//Oui////Non.")) +\tOui\t\tNon.") -DEFINE_DIALOG(DIALOG_014, 1, 6, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_014, NO_SOUND, 6, 30, 200, "\ Whoa, génial! Une autre\n\ étoile de puissance! Mario\n\ devient de plus en plus\n\ courageux!\n\ Voulez-vous sauvegarder?\n\ -//Oui////Non.")) +\tOui\t\tNon.") -DEFINE_DIALOG(DIALOG_015, 1, 6, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_015, NO_SOUND, 6, 30, 200, "\ Vous pouvez frapper vos\n\ ennemis et les assommer.\n\ -Appuyez sur [A] pour sauter\n\ -et sur [B] pour donner un\n\ +Appuyez sur Ⓐ pour sauter\n\ +et sur Ⓑ pour donner un\n\ coup de poing. Appuyez sur\n\ -[A] et sur [B] pour donner un\n\ -coup de pied, et sur [B]\n\ +Ⓐ et sur Ⓑ pour donner un\n\ +coup de pied, et sur Ⓑ\n\ pour ramasser quelque\n\ chose. Pour lancer ce que\n\ vous portez, appuyez sur\n\ -[B] à nouveau.")) +Ⓑ à nouveau.") -DEFINE_DIALOG(DIALOG_016, 1, 4, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_016, SOUND_OBJ_KING_BOBOMB_TALK, 4, 30, 200, "\ Si vous sautez sur une\n\ carapace brillante, vous\n\ pourrez aller n'importe où\n\ -et détruire vos ennemis!")) +et détruire vos ennemis!") -DEFINE_DIALOG(DIALOG_017, 1, 4, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_017, 1, 4, 30, 200, "\ Je suis le Roi Bob-omb,\n\ seigneur des explosions.\n\ Je te félicite d'être\n\ @@ -289,81 +294,81 @@ jeter au sol.\n\ \n\ Es-tu capable de soulever\n\ mon royal fessier?\n\ -En garde, moucheron!")) +En garde, moucheron!") -DEFINE_DIALOG(DIALOG_018, 1, 4, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_018, NO_SOUND, 4, 30, 200, "\ SILENCE! Je dors!\n\ Gare à l'imprudent qui\n\ oserait me reveiller...\n\ -Marchez doucement, sinon!")) +Marchez doucement, sinon!") -DEFINE_DIALOG(DIALOG_019, 1, 2, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_019, NO_SOUND, 2, 30, 200, "\ CHUT! Marchez doucement\n\ -dans les couloirs!!!")) +dans les couloirs!!!") -DEFINE_DIALOG(DIALOG_020, 1, 6, 95, 150, _("\ +DEFINE_DIALOG(DIALOG_020, NO_SOUND, 6, 95, 150, "\ Mon très cher Mario:\n\ Viens vite au château,\n\ je t'ai préparé un\n\ délicieux gâteau...\n\ A bientôt,\n\ -Princesse Toadstool.")) +Princesse Toadstool.") -DEFINE_DIALOG(DIALOG_021, 1, 4, 95, 200, _("\ +DEFINE_DIALOG(DIALOG_021, SOUND_OBJ_BOWSER_INTRO_LAUGH, 4, 95, 200, "\ Bienvenue l'ami!\n\ Ici il n'y a personne,\n\ alors dégage, moustique!\n\ -GWA HA HA HA HA HA!!!")) +GWA HA HA HA HA HA!!!") -DEFINE_DIALOG(DIALOG_022, 1, 2, 95, 200, _("\ +DEFINE_DIALOG(DIALOG_022, SOUND_OBJ_BOWSER_INTRO_LAUGH, 2, 95, 200, "\ Cette porte est fermée\n\ -à clé...")) +à clé...") -DEFINE_DIALOG(DIALOG_023, 1, 2, 95, 200, _("\ +DEFINE_DIALOG(DIALOG_023, SOUND_OBJ_BOWSER_INTRO_LAUGH, 2, 95, 200, "\ Ce n'est pas la bonne clé.\n\ -Peut-être à la cave...")) +Peut-être à la cave...") -DEFINE_DIALOG(DIALOG_024, 1, 6, 95, 200, _("\ +DEFINE_DIALOG(DIALOG_024, SOUND_OBJ_BOWSER_INTRO_LAUGH, 6, 95, 200, "\ Vous avez besoin de la\n\ puissance des étoiles pour\n\ ouvrir cette porte.\n\ Récupérez des étoiles en\n\ combattant des ennemis à\n\ -l'intérieur des tableaux...")) +l'intérieur des tableaux...") -DEFINE_DIALOG(DIALOG_025, 1, 4, 95, 200, _("\ +DEFINE_DIALOG(DIALOG_025, SOUND_OBJ_BOWSER_INTRO_LAUGH, 4, 95, 200, "\ Vous avez besoin de 3\n\ étoiles pour ouvrir cette\n\ porte. Il vous manque\n\ -encore [%] étoile(s).")) +encore %d étoile(s).") -DEFINE_DIALOG(DIALOG_026, 1, 4, 95, 200, _("\ +DEFINE_DIALOG(DIALOG_026, SOUND_OBJ_BOWSER_INTRO_LAUGH, 4, 95, 200, "\ Vous avez besoin de 8\n\ étoiles pour ouvrir cette\n\ porte. Il vous manque\n\ -encore [%] étoile(s).")) +encore %d étoile(s).") -DEFINE_DIALOG(DIALOG_027, 1, 4, 95, 200, _("\ +DEFINE_DIALOG(DIALOG_027, SOUND_OBJ_BOWSER_INTRO_LAUGH, 4, 95, 200, "\ Vous avez besoin de 30\n\ étoiles pour ouvrir cette\n\ porte. Il vous manque\n\ -encore [%] étoile(s).")) +encore %d étoile(s).") -DEFINE_DIALOG(DIALOG_028, 1, 4, 95, 200, _("\ +DEFINE_DIALOG(DIALOG_028, SOUND_OBJ_BOWSER_INTRO_LAUGH, 4, 95, 200, "\ Vous avez besoin de 50\n\ étoiles pour ouvrir cette\n\ porte. Il vous manque\n\ -encore [%] étoile(s).")) +encore %d étoile(s).") -DEFINE_DIALOG(DIALOG_029, 1, 6, 95, 200, _("\ +DEFINE_DIALOG(DIALOG_029, SOUND_OBJ_BOWSER_INTRO_LAUGH, 6, 95, 200, "\ Vous avez besoin de 70\n\ étoiles pour arriver en\n\ -haut de 『l'escalier sans\n\ -fin』... Il vous manque\n\ -encore [%] étoile(s).\n\ -GWA HA HA HA HA HA!!!")) +haut de “l'escalier sans\n\ +fin”... Il vous manque\n\ +encore %d étoile(s).\n\ +GWA HA HA HA HA HA!!!") -DEFINE_DIALOG(DIALOG_030, 1, 4, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_030, NO_SOUND, 4, 30, 200, "\ Bonjour à tous!\n\ Ici Lakitu, le reporter de\n\ choc et de charme! Voici\n\ @@ -373,8 +378,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 Ⓒ▶ et Ⓒ◀.\n\ +Appuyez sur Ⓒ▼ pour voir\n\ de loin.\n\ Lorsque ma caméra ne\n\ peut plus se déplacer,\n\ @@ -382,16 +387,16 @@ un signal sonore se fera\n\ entendre...\n\ Mes chers téléspectateurs,\n\ à bientôt!\n\ -//// --Lakitu--")) +\t\t --Lakitu--") -DEFINE_DIALOG(DIALOG_031, 1, 5, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_031, NO_SOUND, 5, 30, 200, "\ Incroyable! Tu m'as encore\n\ battu? J'étais pourtant\n\ certain de gagner!\n\ Tiens, petit homme, tu as\n\ -bien mérité cette étoile...")) +bien mérité cette étoile...") -DEFINE_DIALOG(DIALOG_032, 1, 5, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_032, NO_SOUND, 5, 30, 200, "\ Si en portant une\n\ casquette ailée vous\n\ effectuez trois sauts\n\ @@ -402,29 +407,29 @@ haut si vous êtes propulsé\n\ par un canon!\n\ \n\ \n\ -Utilisez les boutons [C] pour\n\ +Utilisez les boutons Ⓒ pour\n\ regarder autour de vous\n\ en plein vol, et appuyez\n\ -sur [Z] pour atterrir.")) +sur Ⓩ pour atterrir.") -DEFINE_DIALOG(DIALOG_033, 1, 5, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_033, NO_SOUND, 5, 30, 200, "\ Ciao bello!\n\ Vous voici arrivé au\n\ château de la Princesse\n\ grâce à un tuyau de\n\ téléportation.\n\ Contrôler Mario est très\n\ -facile: appuyez sur [A]\n\ -pour sauter et sur [B] pour\n\ -attaquer. Appuyez sur [B]\n\ +facile: appuyez sur Ⓐ\n\ +pour sauter et sur Ⓑ pour\n\ +attaquer. Appuyez sur Ⓑ\n\ pour lire les pancartes.\n\ Utilisez le stick multi-\n\ directionnel pour déplacer\n\ Mario...\n\ Et maintenant, en route\n\ -vers le château!!!")) +vers le château!!!") -DEFINE_DIALOG(DIALOG_034, 1, 6, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_034, NO_SOUND, 6, 30, 200, "\ Bonjour! Nous sommes les\n\ frères Lakitu et nous nous\n\ ferons une joie de filmer\n\ @@ -433,17 +438,17 @@ long de son périple.\n\ \n\ Vous pourrez choisir\n\ l'angle de prise de vue\n\ -grâce aux boutons [C]. S'il\n\ +grâce aux boutons Ⓒ. S'il\n\ est impossible de bouger\n\ 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\ -Appuyez sur le bouton [A]\n\ +et appuyez sur Ⓒ▲.\n\ +Appuyez sur le bouton Ⓐ\n\ pour revenir au jeu.\n\ \n\ -Appuyez sur [R] pour\n\ +Appuyez sur Ⓡ pour\n\ changer de mode de vue.\n\ Lisez les pancartes que\n\ vous croiserez pour en\n\ @@ -452,11 +457,11 @@ savoir d'avantage...\n\ C'était Lakitu,\n\ le caméraman toujours\n\ prêt à vous fournir les\n\ -meilleures images...")) +meilleures images...") -DEFINE_DIALOG(DIALOG_035, 1, 6, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_035, NO_SOUND, 6, 30, 200, "\ Il existe quatre boutons\n\ -[C]. En appuyant sur [C]^ et\n\ +Ⓒ. En appuyant sur Ⓒ▲ et\n\ en bougeant le stick\n\ multidirectionnel, vous\n\ pourrez jeter un oeil aux\n\ @@ -465,47 +470,47 @@ L'angle de vue normal est\n\ celui de la caméra de\n\ Lakitu, mais vous pouvez\n\ le modifier en appuyant\n\ -sur [R] et ainsi utiliser\n\ -la 『caméra-Mario』.\n\ -Appuyez sur [R] à nouveau\n\ +sur Ⓡ et ainsi utiliser\n\ +la “caméra-Mario”.\n\ +Appuyez sur Ⓡ à nouveau\n\ pour utiliser la caméra de\n\ -Lakitu. Appuyez sur [C]|\n\ +Lakitu. Appuyez sur Ⓒ▼\n\ pour voir Mario de loin,\n\ quelque soit le mode de\n\ -vue que vous utilisez.")) +vue que vous utilisez.") -DEFINE_DIALOG(DIALOG_036, 1, 4, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_036, NO_SOUND, 4, 30, 200, "\ --PANORAMA--\n\ -Appuyez sur [C]^ pour jeter\n\ +Appuyez sur Ⓒ▲ pour jeter\n\ un coup d'oeil. Profitez\n\ de la vue!\n\ -Appuyez sur [R] pour\n\ +Appuyez sur Ⓡ pour\n\ utiliser la caméra-Mario\n\ qui suivra toujours de\n\ près notre petit ami.\n\ -Appuyez à nouveau sur [R]\n\ +Appuyez à nouveau sur Ⓡ\n\ pour revenir à la caméra\n\ de Lakitu.\n\ \n\ Mettez le jeu en pause et\n\ -choisissez le mode 『Fixe』\n\ -puis maintenez [R] pour que\n\ -la caméra reste en place.")) +choisissez le mode “Fixe”\n\ +puis maintenez Ⓡ pour que\n\ +la caméra reste en place.") -DEFINE_DIALOG(DIALOG_037, 1, 2, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_037, SOUND_OBJ_BIG_PENGUIN_YELL, 2, 30, 200, "\ Bwa ha ha ha ha!\n\ Je t'ai battu gros nain!\n\ Tu es aussi rapide qu'une\n\ vieille limace malade!\n\ Reviens me voir si tu\n\ -veux prendre ta revanche!")) +veux prendre ta revanche!") -DEFINE_DIALOG(DIALOG_038, 1, 3, 95, 200, _("\ +DEFINE_DIALOG(DIALOG_038, NO_SOUND, 3, 95, 200, "\ Grâce à la puissance des\n\ étoiles, la porte s'ouvre\n\ -doucement...")) +doucement...") -DEFINE_DIALOG(DIALOG_039, 1, 5, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_039, NO_SOUND, 5, 30, 200, "\ ROYAUME DE BOB-OMB\n\ \n\ Interdit aux touristes!!!\n\ @@ -525,22 +530,22 @@ lisez attentivement le nom\n\ de chaque étoile au début\n\ des niveaux.\n\ \n\ -/// --Roi Bob-omb--")) +\t --Roi Bob-omb--") -DEFINE_DIALOG(DIALOG_040, 1, 3, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_040, NO_SOUND, 3, 30, 200, "\ ATTENTION!\n\ Crevasse de glace juste\n\ -en dessous!")) +en dessous!") -DEFINE_DIALOG(DIALOG_041, 1, 2, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_041, SOUND_OBJ_KOOPA_TALK, 2, 30, 200, "\ J'ai gagné! J'ai gagné!\n\ Ha! Ha! Pauv'nul!\n\ Ça t'apprendra à défier\n\ le grand Koopa-Rapido!\n\ Reviens me voir si tu\n\ -veux une autre raclée!")) +veux une autre raclée!") -DEFINE_DIALOG(DIALOG_042, 1, 6, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_042, NO_SOUND, 6, 30, 200, "\ ATTENTION!\n\ \n\ Pont étroit!!!\n\ @@ -554,7 +559,7 @@ suspendre en vous\n\ déplaçant lentement près\n\ du vide...\n\ Si vous voulez lâcher\n\ -prise, appuyez sur [Z] ou\n\ +prise, appuyez sur Ⓩ ou\n\ vers le bas sur le stick\n\ multidirectionnel.\n\ \n\ @@ -562,19 +567,19 @@ multidirectionnel.\n\ Pour vous hisser, appuyez\n\ vers le haut sur le stick\n\ multidirectionnel ou sur le\n\ -bouton [A] pour aller plus\n\ -vite.")) +bouton Ⓐ pour aller plus\n\ +vite.") -DEFINE_DIALOG(DIALOG_043, 1, 5, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_043, NO_SOUND, 5, 30, 200, "\ Si vous sautez en\n\ -maintenant le bouton [A],\n\ +maintenant le bouton Ⓐ,\n\ vous pourrez vous\n\ accrocher à des objets\n\ au-dessus de vous...\n\ Vous pourrez même vous\n\ -accrocher à un oiseau!")) +accrocher à un oiseau!") -DEFINE_DIALOG(DIALOG_044, 1, 4, 95, 200, _("\ +DEFINE_DIALOG(DIALOG_044, NO_SOUND, 4, 95, 200, "\ Mmm? Hein? Qui m'a\n\ réveillé? Quoi!?! Il fait\n\ encore jour? Je devrais\n\ @@ -583,7 +588,7 @@ Maintenant que je suis\n\ réveillé, ça te dirait de\n\ faire un petit tour avec\n\ moi?\n\ -Maintiens le bouton [A]\n\ +Maintiens le bouton Ⓐ\n\ pour t'accrocher et\n\ lâche-le pour te laisser\n\ tomber.\n\ @@ -592,19 +597,19 @@ aussi longtemps que mes\n\ ailes pourront supporter\n\ ton poids!\n\ Regarde bien mon ombre\n\ -et accroche-toi!!!")) +et accroche-toi!!!") -DEFINE_DIALOG(DIALOG_045, 1, 4, 95, 200, _("\ +DEFINE_DIALOG(DIALOG_045, NO_SOUND, 4, 95, 200, "\ Fouiii! J'suis naze!!!\n\ Tu devrais peut-être\n\ arrêter les pâtes aux\n\ oeufs...\n\ Allez, ciao Mario!\n\ -Lâche le bouton [A] sinon\n\ +Lâche le bouton Ⓐ sinon\n\ j'te balance dans le vide\n\ -mon gros...")) +mon gros...") -DEFINE_DIALOG(DIALOG_046, 1, 6, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_046, NO_SOUND, 6, 30, 200, "\ Il existe trois sauts\n\ différents que vous\n\ devez maîtriser:\n\ @@ -623,15 +628,15 @@ devrez effectuer le Saut\n\ en Longueur:\n\ \n\ \n\ -Courez, appuyez sur [Z] pour\n\ +Courez, appuyez sur Ⓩ pour\n\ vous accroupir, puis\n\ -appuyez sur [A] pour\n\ +appuyez sur Ⓐ pour\n\ sauter...\n\ \n\ \n\ Enfin, pour créer une\n\ -『Impulsion』, appuyez sur\n\ -[A] vers un mur puis sautez\n\ +“Impulsion”, appuyez sur\n\ +Ⓐ vers un mur puis sautez\n\ à nouveau lorsque vous\n\ touchez la paroi...\n\ \n\ @@ -640,20 +645,20 @@ Triple Saut, Saut en\n\ Longueur et Impulsion?\n\ Pour y arriver à chaque\n\ fois il faut s'entraîner\n\ -encore et encore et...?")) +encore et encore et...?") -DEFINE_DIALOG(DIALOG_047, 1, 2, 95, 200, _("\ +DEFINE_DIALOG(DIALOG_047, SOUND_OBJ_BOBOMB_BUDDY_TALK, 2, 95, 200, "\ Salut l'ami! Je vais te\n\ -préparer un joli canon!")) +préparer un joli canon!") -DEFINE_DIALOG(DIALOG_048, 1, 5, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_048, NO_SOUND, 5, 30, 200, "\ Sommet du glacier...\n\ Attention à ne pas\n\ glisser!\n\ Tout d'abord, visitez ce\n\ -chalet...")) +chalet...") -DEFINE_DIALOG(DIALOG_049, 1, 4, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_049, NO_SOUND, 4, 30, 200, "\ Vous vous souvenez de\n\ l'Impulsion? Utilisez cette\n\ technique pour atteindre\n\ @@ -663,20 +668,20 @@ mur, en appuyant sur le\n\ stick multidirectionnel\n\ vers la direction desirée.\n\ Entraînez-vous encore et\n\ -encore et encore et...?")) +encore et encore et...?") -DEFINE_DIALOG(DIALOG_050, 1, 4, 30, 200, _("\ -Maintenez le bouton [Z] pour\n\ +DEFINE_DIALOG(DIALOG_050, NO_SOUND, 4, 30, 200, "\ +Maintenez le bouton Ⓩ pour\n\ vous accroupir et ainsi\n\ glisser le long d'une\n\ pente...\n\ -Appuyez sur [Z] pendant un\n\ +Appuyez sur Ⓩ pendant un\n\ saut pour faire l'Attaque\n\ Rodéo!\n\ \n\ A l'arrêt, si vous appuyez\n\ -sur [Z] pour vous accroupir,\n\ -puis sur [A], vous ferez un\n\ +sur Ⓩ pour vous accroupir,\n\ +puis sur Ⓐ, vous ferez un\n\ Saut Périlleux!\n\ C'est compris? Mais il\n\ existe encore d'autres\n\ @@ -687,19 +692,19 @@ accroupir puis faire un\n\ Saut en Longueur...\n\ \n\ Vous pouvez aussi marcher\n\ -en maintenant le bouton [Z].\n\ +en maintenant le bouton Ⓩ.\n\ Mais c'est une autre\n\ -histoire...")) +histoire...") -DEFINE_DIALOG(DIALOG_051, 1, 6, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_051, NO_SOUND, 6, 30, 200, "\ Vous pouvez facilement\n\ vous accrocher aux arbres\n\ et aux poteaux...\n\ \n\ \n\ \n\ -Appuyez sur [Z] pour lâcher\n\ -prise, sur [A] pour sauter\n\ +Appuyez sur Ⓩ pour lâcher\n\ +prise, sur Ⓐ pour sauter\n\ en arrière ou sur le stick\n\ multidirectionnel pour\n\ descendre doucement.\n\ @@ -710,15 +715,15 @@ vers la gauche sur le\n\ stick multidirectionnel\n\ pour pivoter, ou vers le\n\ haut pour faire le poirier.\n\ -Appuyez alors sur [A] pour\n\ +Appuyez alors sur Ⓐ pour\n\ faire un méga-saut vers\n\ l'arrière, digne des plus\n\ -grands athlètes!")) +grands athlètes!") -DEFINE_DIALOG(DIALOG_052, 1, 5, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_052, NO_SOUND, 5, 30, 200, "\ Arrêtez-vous et appuyez\n\ -sur [Z] pour vous accroupir,\n\ -puis appuyez sur [A] pour\n\ +sur Ⓩ pour vous accroupir,\n\ +puis appuyez sur Ⓐ pour\n\ faire un Saut Périlleux\n\ en arrière!\n\ Pour faire un Saut\n\ @@ -729,9 +734,9 @@ sautez.\n\ Ces deux types de saut\n\ vous permettent de\n\ sauter beaucoup plus haut\n\ -qu'un saut normal...")) +qu'un saut normal...") -DEFINE_DIALOG(DIALOG_053, 1, 5, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_053, NO_SOUND, 5, 30, 200, "\ Quelques fois, en\n\ traversant un anneau ou\n\ en découvrant un passage\n\ @@ -739,9 +744,9 @@ secret dans un niveau, un\n\ chiffre rouge apparaîtra.\n\ Si vous faites apparaître\n\ cinq chiffres rouges, une\n\ -étoile secrète apparaîtra.")) +étoile secrète apparaîtra.") -DEFINE_DIALOG(DIALOG_054, 1, 3, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_054, NO_SOUND, 3, 30, 200, "\ Attention:\n\ Glissade Périlleuse!\n\ En voiture Simone...\n\ @@ -750,9 +755,9 @@ le stick multidirectionnel\n\ pour accélérer.\n\ Appuyez vers l'arrière\n\ pour ralentir...\n\ -Roulez jeunesse!")) +Roulez jeunesse!") -DEFINE_DIALOG(DIALOG_055, 1, 2, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_055, SOUND_OBJ_BIG_PENGUIN_YELL, 2, 30, 200, "\ Salut mon tout petit\n\ Mario...\n\ Alors, il paraît que tu es\n\ @@ -762,9 +767,9 @@ que moi?\n\ On fait la course,\n\ mon petit biquet?\n\ Prêt...\n\ -//Partez!//Heu, non.")) +\tPartez!\tHeu, non.") -DEFINE_DIALOG(DIALOG_056, 1, 2, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_056, SOUND_OBJ_BIG_PENGUIN_YELL, 2, 30, 200, "\ Qu-qu-quoi? T-t-tu as\n\ battu mon record?\n\ Je l'admets, tu es très\n\ @@ -772,18 +777,18 @@ rapide pour un humain.\n\ Je n'ai pas de médaille\n\ d'or sur moi mais...\n\ Cette étoile fera\n\ -l'affaire...")) +l'affaire...") -DEFINE_DIALOG(DIALOG_057, 1, 4, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_057, SOUND_OBJ_BIG_PENGUIN_YELL, 4, 30, 200, "\ Mon bébé! J'ai perdu mon\n\ bébé... Mon p'tit chou...\n\ Ma puce à moi...\n\ Mon chocolat...\n\ JE VEUX MON BÉBÉ!!!\n\ GNAAAAAAAAAAAAAA!!!\n\ -MON BÉBÉ!")) +MON BÉBÉ!") -DEFINE_DIALOG(DIALOG_058, 1, 3, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_058, SOUND_OBJ_BIG_PENGUIN_YELL, 3, 30, 200, "\ Tu as trouvé mon bébé!!!\n\ Mon chou...\n\ Mon p'tit chou...\n\ @@ -792,15 +797,15 @@ gratitude, gros Mario?\n\ Tu es formidable...\n\ Tiens, prends cette étoile.\n\ Tu l'as bien méritée...\n\ -Encore merci, petit!")) +Encore merci, petit!") -DEFINE_DIALOG(DIALOG_059, 1, 2, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_059, SOUND_OBJ_BIG_PENGUIN_YELL, 2, 30, 200, "\ C'est pas mon bébé!!!\n\ Où est mon bébé?\n\ JE VEUX MON BÉBÉ!!!!\n\ -GNAAAAAAAAAAAAAA!!!!")) +GNAAAAAAAAAAAAAA!!!!") -DEFINE_DIALOG(DIALOG_060, 1, 6, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_060, NO_SOUND, 6, 30, 200, "\ ATTENTION!\n\ A lire avant de plonger!\n\ Si vous restez sous l'eau\n\ @@ -813,32 +818,32 @@ ou récupérer des pièces\n\ vous fera regagner de\n\ l'oxygène.\n\ \n\ -Appuyez sur [A] pour nager.\n\ -Maintenez le bouton [A]\n\ +Appuyez sur Ⓐ pour nager.\n\ +Maintenez le bouton Ⓐ\n\ pour battre des pieds.\n\ Appuyez régulièrement sur\n\ -[A] pour gagner de la\n\ +Ⓐ pour gagner de la\n\ vitesse.\n\ Appuyez vers le haut sur\n\ le stick multidirectionnel\n\ pour plonger.\n\ Appuyez vers le bas et sur\n\ -[A] pour remonter à la\n\ +Ⓐ pour remonter à la\n\ surface.\n\ Lorsque vous êtes à la\n\ surface, maintenez la\n\ flèche vers le bas sur le\n\ stick multidirectionnel et\n\ -appuyez sur [A] pour sortir\n\ -de l'eau.")) +appuyez sur Ⓐ pour sortir\n\ +de l'eau.") -DEFINE_DIALOG(DIALOG_061, 1, 4, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_061, NO_SOUND, 4, 30, 200, "\ Brrrrr!!!\n\ Baignade déconseillée!!!\n\ Trop froid...\n\ -// ---Le Pingouin---")) +\t ---Le Pingouin---") -DEFINE_DIALOG(DIALOG_062, 1, 4, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_062, NO_SOUND, 4, 30, 200, "\ A l'intérieur des\n\ blocs verts se cache la\n\ casquette-métal...\n\ @@ -850,9 +855,9 @@ vos ennemis.\n\ Vous n'aurez même plus\n\ besoin de respirer!\n\ Mais il y a un problème:\n\ -vous ne pouvez pas nager!")) +vous ne pouvez pas nager!") -DEFINE_DIALOG(DIALOG_063, 1, 4, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_063, NO_SOUND, 4, 30, 200, "\ La casquette d'invisibilité\n\ se trouve dans les blocs\n\ bleus.\n\ @@ -863,9 +868,9 @@ terribles Boos, ne\n\ pourront pas vous voir!\n\ En plus, vous pourrez\n\ traverser des murs\n\ -secrets!")) +secrets!") -DEFINE_DIALOG(DIALOG_064, 1, 6, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_064, NO_SOUND, 6, 30, 200, "\ Si vous portez une\n\ casquette ailée provenant\n\ d'un bloc rouge, faites le\n\ @@ -878,17 +883,17 @@ Mario. Appuyez vers le\n\ bas pour prendre de\n\ l'altitude, et vers le haut\n\ pour piquer du nez.\n\ -Et enfin, appuyez sur [Z]\n\ -pour atterrir.")) +Et enfin, appuyez sur Ⓩ\n\ +pour atterrir.") -DEFINE_DIALOG(DIALOG_065, 1, 6, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_065, NO_SOUND, 6, 30, 200, "\ Leçons de natation...\n\ -Appuyez sur [A] pour nager\n\ +Appuyez sur Ⓐ pour nager\n\ la brasse. Si votre\n\ synchronisation est bonne,\n\ vous pourrez nager très\n\ vite.\n\ -Maintenez le bouton [A]\n\ +Maintenez le bouton Ⓐ\n\ pour battre des pieds\n\ d'une façon régulière.\n\ \n\ @@ -903,7 +908,7 @@ surface.\n\ Pour sortir de l'eau,\n\ appuyez vers le bas sur\n\ le stick multidirectionnel\n\ -et appuyez sur [A]. Ensuite,\n\ +et appuyez sur Ⓐ. Ensuite,\n\ relâcher le stick pour ne\n\ pas retomber dans l'eau.\n\ Attention: Mario ne peut\n\ @@ -915,9 +920,9 @@ d'oxygène...\n\ Dernière chose:\n\ vous ne pouvez pas ouvrir\n\ les portes se trouvant\n\ -sous l'eau.")) +sous l'eau.") -DEFINE_DIALOG(DIALOG_066, 1, 6, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_066, NO_SOUND, 6, 30, 200, "\ Mario! Fais attention:\n\ Bowser est un gros\n\ vicieux! Il va tenter de\n\ @@ -926,7 +931,7 @@ son souffle de feu!\n\ \n\ Tourne autour de lui et\n\ attrape sa queue en\n\ -appuyant sur [B]. Une fois\n\ +appuyant sur Ⓑ. Une fois\n\ que tu l'as attrapé,\n\ fais-le tourner autour\n\ de toi.\n\ @@ -942,20 +947,20 @@ très loin.\n\ \n\ \n\ \n\ -Utilise les boutons [C] pour\n\ +Utilise les boutons Ⓒ pour\n\ regarder autour de toi.\n\ Tu dois jeter Bowser sur\n\ une des bombes...\n\ \n\ \n\ -Vise bien! Appuie sur [B]\n\ +Vise bien! Appuie sur Ⓑ\n\ pour lancer Bowser.\n\ Bonne chance, Mario!\n\ Tu en auras besoin...\n\ \n\ -// ---Peach---")) +\t ---Peach---") -DEFINE_DIALOG(DIALOG_067, 1, 3, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_067, SOUND_OBJ_BOWSER_LAUGH, 3, 30, 200, "\ HA HA! Dommage pour toi,\n\ Mario! La P'tite Peach\n\ n'est pas là...\n\ @@ -970,9 +975,9 @@ faire tourner autour de\n\ ta tête!\n\ Tu n'arriveras jamais à\n\ me faire décoller d'ici...\n\ -GWA HA! A table!!!!!!!")) +GWA HA! A table!!!!!!!") -DEFINE_DIALOG(DIALOG_068, 1, 4, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_068, NO_SOUND, 4, 30, 200, "\ Voici les Laves Fatales!\n\ Si vous touchez de la lave\n\ ou des flammes, vous\n\ @@ -980,17 +985,17 @@ aurez le feu aux fesses!\n\ Mais pas de panique:\n\ vous pourrez toujours\n\ contrôler Mario...\n\ -Restez calme!")) +Restez calme!") -DEFINE_DIALOG(DIALOG_069, 1, 6, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_069, NO_SOUND, 6, 30, 200, "\ A l'intérieur des tableaux\n\ vous pourrez touchez des\n\ murs invisibles marquant\n\ les limites du niveau.\n\ Si vous touchez un mur en\n\ -volant, vous serez bloqué.")) +volant, vous serez bloqué.") -DEFINE_DIALOG(DIALOG_070, 1, 6, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_070, NO_SOUND, 6, 30, 200, "\ Vous pouvez retourner\n\ dans le hall du château\n\ depuis n'importe quel\n\ @@ -1001,7 +1006,7 @@ Vous devez vous arrêter,\n\ appuyer sur Start pour\n\ mettre le jeu en pause,\n\ puis choisir l'option\n\ -『Quitter Niveau』.\n\ +“Quitter Niveau”.\n\ \n\ Vous n'avez pas besoin de\n\ récupérer toutes les\n\ @@ -1023,9 +1028,9 @@ l'écran au début du\n\ niveau...\n\ Toutefois, vous n'êtes pas\n\ obligé d'attraper l'étoile\n\ -décrite par l'indice.")) +décrite par l'indice.") -DEFINE_DIALOG(DIALOG_071, 1, 4, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_071, NO_SOUND, 4, 30, 200, "\ DANGER!\n\ Attention au brouillard\n\ toxique!\n\ @@ -1036,17 +1041,17 @@ plate-forme en hauteur\n\ pour respirer.\n\ \n\ Cercle: Abri\n\ -Flèche: Entrée - Sortie")) +Flèche: Entrée - Sortie") -DEFINE_DIALOG(DIALOG_072, 1, 3, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_072, NO_SOUND, 3, 30, 200, "\ Attention: vents violents!\n\ Accrochez-vous à votre\n\ casquette!\n\ Si vous la perdez, vous\n\ devrez revenir la chercher\n\ -là où vous l'avez perdue...")) +là où vous l'avez perdue...") -DEFINE_DIALOG(DIALOG_073, 1, 3, 95, 200, _("\ +DEFINE_DIALOG(DIALOG_073, NO_SOUND, 3, 95, 200, "\ Souquez ferme, matelot!\n\ J'ai caché un trésor\n\ par ici, moussaillon.\n\ @@ -1055,9 +1060,9 @@ vous devrez ouvrir les\n\ coffres dans l'ordre...\n\ Y arriveras-tu, petit?\n\ \n\ -// -- Le capitaine --")) +\t -- Le capitaine --") -DEFINE_DIALOG(DIALOG_074, 1, 5, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_074, NO_SOUND, 5, 30, 200, "\ Vous pouvez vous\n\ accrocher au rebord d'une\n\ falaise.\n\ @@ -1066,15 +1071,15 @@ falaise.\n\ Pour lâcher prise, appuyez\n\ vers le bas sur le stick\n\ multidirectionnel ou sur le\n\ -bouton [Z].\n\ +bouton Ⓩ.\n\ \n\ Pour vous hisser, appuyez\n\ vers le haut sur le stick\n\ multidirectionnel ou sur le\n\ -bouton [A] pour monter plus\n\ -vite.")) +bouton Ⓐ pour monter plus\n\ +vite.") -DEFINE_DIALOG(DIALOG_075, 1, 5, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_075, NO_SOUND, 5, 30, 200, "\ Mario! Mon château est\n\ en danger, et Bowser en\n\ est le responsable...\n\ @@ -1109,9 +1114,9 @@ Retrouve toutes les étoiles\n\ du château et tu pourras\n\ nous délivrer!\n\ Je t'en prie, Mario!\n\ -Sauve-nous!")) +Sauve-nous!") -DEFINE_DIALOG(DIALOG_076, 1, 3, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_076, NO_SOUND, 3, 30, 200, "\ Grâce au pouvoir des\n\ étoiles, le château\n\ revient à la vie...\n\ @@ -1125,32 +1130,32 @@ Prends garde à tout ce\n\ qui n'a pas de reflet...\n\ \n\ Connais-tu le monde\n\ -『Trempé-Séché』?\n\ +“Trempé-Séché”?\n\ \n\ Rentre dans ce niveau en\n\ sautant très haut...\n\ \n\ Au fait! Regarde ce que\n\ -j'ai pour toi!")) +j'ai pour toi!") -DEFINE_DIALOG(DIALOG_077, 1, 2, 150, 200, _("\ +DEFINE_DIALOG(DIALOG_077, NO_SOUND, 2, 150, 200, "\ Il est dit que les piliers\n\ -doivent être enfoncés...")) +doivent être enfoncés...") -DEFINE_DIALOG(DIALOG_078, 1, 4, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_078, NO_SOUND, 4, 30, 200, "\ Enfoncez le bloc des\n\ pièces bleues grâce à\n\ l'Attaque Rodéo, en\n\ -appuyant sur [Z].\n\ +appuyant sur Ⓩ.\n\ Une pièce bleue vaut 5\n\ pièces jaunes.\n\ \n\ \n\ Dépêchez-vous de les\n\ attraper, sinon elles\n\ -disparaîtront!")) +disparaîtront!") -DEFINE_DIALOG(DIALOG_079, 1, 2, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_079, SOUND_OBJ_UKIKI_CHATTER_LONG, 2, 30, 200, "\ GNIIIIIIIII!!!\n\ LACHE-MOI!\n\ Je blaguais! Tu n'as\n\ @@ -1158,23 +1163,23 @@ aucun sens de l'humour.\n\ Lâche-moi et je te\n\ donnerais un truc cool.\n\ Ça marche?\n\ -//OK//// Jamais!")) +\tOK\t\t Jamais!") -DEFINE_DIALOG(DIALOG_080, 1, 1, 30, 200, _("\ -Gnii hi hi hi hi hi!!!")) +DEFINE_DIALOG(DIALOG_080, SOUND_OBJ_UKIKI_CHATTER_LONG, 1, 30, 200, "\ +Gnii hi hi hi hi hi!!!") -DEFINE_DIALOG(DIALOG_081, 1, 3, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_081, NO_SOUND, 3, 30, 200, "\ Bienvenue dans le monde\n\ -『Trempé-Séché』...\n\ +“Trempé-Séché”...\n\ \n\ Ici, il est dit qu'un saut\n\ altère le niveau d'eau...\n\ \n\ En y pénétrant,\n\ serez-vous assez\n\ -intelligent?")) +intelligent?") -DEFINE_DIALOG(DIALOG_082, 1, 4, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_082, NO_SOUND, 4, 30, 200, "\ Accroche-toi à ta\n\ casquette, gentil petit\n\ Mario...\n\ @@ -1200,9 +1205,9 @@ beau y font régner la\n\ terreur!\n\ \n\ Tiens, j'ai un petit\n\ -cadeau pour toi...")) +cadeau pour toi...") -DEFINE_DIALOG(DIALOG_083, 1, 4, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_083, NO_SOUND, 4, 30, 200, "\ Cette grosse horloge est\n\ étrange...\n\ \n\ @@ -1212,9 +1217,9 @@ position de la grande\n\ aiguille lorsque tu sautes\n\ à l'intérieur...\n\ Au fait, regarde ce que\n\ -j'ai là pour toi!")) +j'ai là pour toi!") -DEFINE_DIALOG(DIALOG_084, 1, 3, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_084, NO_SOUND, 3, 30, 200, "\ GNAAAAAAAAA!!!\n\ LACHE-MOI!!!\n\ GROSSE BRUTE!\n\ @@ -1223,34 +1228,34 @@ Ne me mange pas!\n\ Au secours!!!!!!\n\ Tiens, voilà une étoile.\n\ Prends-la, mais tu dois\n\ -me laisser partir...")) +me laisser partir...") -DEFINE_DIALOG(DIALOG_085, 1, 3, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_085, SOUND_OBJ_BOO_LAUGH_LONG, 3, 30, 200, "\ Va-t'en, simple mortel!\n\ Si tu tiens à ton âme,\n\ retourne chez toi...\n\ Si tu oses rentrer,\n\ -tu seras damné!!!")) +tu seras damné!!!") -DEFINE_DIALOG(DIALOG_086, 1, 3, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_086, NO_SOUND, 3, 30, 200, "\ Tourner autour de\n\ certains ennemis peut\n\ -faire tourner de l'oeil...")) +faire tourner de l'oeil...") -DEFINE_DIALOG(DIALOG_087, 1, 5, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_087, NO_SOUND, 5, 30, 200, "\ Le Père Noël n'est pas le\n\ seul à passer par les\n\ cheminées...\n\ Avis aux curieux...\n\ -- Le bonhomme de neige -")) +- Le bonhomme de neige -") -DEFINE_DIALOG(DIALOG_088, 1, 4, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_088, NO_SOUND, 4, 30, 200, "\ -Plate-forme de travail-\n\ Pour descendre, utilisez\n\ le poteau sur la gauche et\n\ -glissez jusqu'en bas...")) +glissez jusqu'en bas...") -DEFINE_DIALOG(DIALOG_089, 1, 6, 95, 200, _("\ +DEFINE_DIALOG(DIALOG_089, NO_SOUND, 6, 95, 200, "\ Les deux routes sont très\n\ dangereuses...\n\ Ceux qui ne sont pas\n\ @@ -1258,34 +1263,34 @@ encore capables de faire\n\ le Saut en Longueur\n\ doivent aller à droite.\n\ Droite: Plate-forme de\n\ -////travail.\n\ -////Labyrinthe\n\ -////toxique.\n\ +\t\ttravail.\n\ +\t\tLabyrinthe\n\ +\t\ttoxique.\n\ Gauche: Trou Noir.\n\ -////Lac souterrain.\n\ +\t\tLac souterrain.\n\ Cercle rouge:\n\ -////Ascenseur 2.\n\ -////Lac souterrain.\n\ +\t\tAscenseur 2.\n\ +\t\tLac souterrain.\n\ Flèche:\n\ -////Votre position\n\ -////actuelle.")) +\t\tVotre position\n\ +\t\tactuelle.") -DEFINE_DIALOG(DIALOG_090, 1, 6, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_090, SOUND_OBJ_BOWSER_LAUGH, 6, 30, 200, "\ BWA HA HA HA HA HA!!!\n\ Tu es tombé dans mon\n\ piège, petit Mario!\n\ Mais voici un conseil\n\ d'ami: prends garde à ne\n\ -pas tomber!")) +pas tomber!") -DEFINE_DIALOG(DIALOG_091, 1, 5, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_091, NO_SOUND, 5, 30, 200, "\ Danger!!!\n\ Vents violents!\n\ Sachez utiliser les\n\ courants à votre\n\ -avantage...")) +avantage...") -DEFINE_DIALOG(DIALOG_092, 1, 5, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_092, SOUND_OBJ_BOWSER_LAUGH, 5, 30, 200, "\ Mario...\n\ Mon p'tit Mario...\n\ Tu m'cherches ou quoi?\n\ @@ -1295,9 +1300,9 @@ Mais d'abord tu vas me\n\ rendre mes étoiles,\n\ voleur!\n\ BWA HA HA HA HA HA!!!\n\ -C'est l'heure du goûter!")) +C'est l'heure du goûter!") -DEFINE_DIALOG(DIALOG_093, 1, 6, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_093, SOUND_OBJ_BOWSER_LAUGH, 6, 30, 200, "\ Mario?!?\n\ Tu es encore là, toi?\n\ Très bien, tu l'auras\n\ @@ -1309,20 +1314,20 @@ puissance, tu n'arriveras\n\ jamais à sauver Peach et\n\ ses amis...\n\ Allez... En garde!\n\ -BWA HA HA HA HA HA HA!")) +BWA HA HA HA HA HA HA!") -DEFINE_DIALOG(DIALOG_094, 1, 6, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_094, NO_SOUND, 6, 30, 200, "\ Pourquoi ne pas escalader\n\ cette pente en courant?\n\ Petit rappel: pour faire\n\ un Saut en Longueur,\n\ -courir, appuyer sur [Z],\n\ -puis sauter...")) +courir, appuyer sur Ⓩ,\n\ +puis sauter...") -DEFINE_DIALOG(DIALOG_095, 1, 5, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_095, NO_SOUND, 5, 30, 200, "\ Pour lire une pancarte,\n\ il faut se tenir devant\n\ -l'écriteau et appuyer [B].\n\ +l'écriteau et appuyer Ⓑ.\n\ Vous le saviez déjà?\n\ Ah bon... Désolé.\n\ Pour parler à une tortue\n\ @@ -1332,9 +1337,9 @@ face de lui ou elle.\n\ \n\ Retrouvez vite les étoiles\n\ que Bowser a caché dans\n\ -ce niveau!")) +ce niveau!") -DEFINE_DIALOG(DIALOG_096, 1, 5, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_096, NO_SOUND, 5, 30, 200, "\ Le sommet de la montagne\n\ est interdit au public!\n\ Alors n'essayez pas d'y\n\ @@ -1343,36 +1348,36 @@ recherche des étoiles...\n\ Autre conseil: ne réveillez\n\ jamais quelqu'un qui dort.\n\ Marchez doucement...\n\ -Et sans bruit...")) +Et sans bruit...") -DEFINE_DIALOG(DIALOG_097, 1, 5, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_097, NO_SOUND, 5, 30, 200, "\ Si quelqu'un vous pousse,\n\ n'ayez pas peur!\n\ Poussez-le vous aussi!\n\ Le perdant aura plutôt\n\ -chaud aux fesses...")) +chaud aux fesses...") -DEFINE_DIALOG(DIALOG_098, 1, 5, 95, 200, _("\ +DEFINE_DIALOG(DIALOG_098, SOUND_OBJ_BOO_LAUGH_LONG, 5, 95, 200, "\ Viens...\n\ ...entre donc...\n\ Mon biquet...\n\ ...viens dîner...\n\ -Hin...hin...hin...")) +Hin...hin...hin...") -DEFINE_DIALOG(DIALOG_099, 1, 3, 95, 200, _("\ +DEFINE_DIALOG(DIALOG_099, SOUND_OBJ_BOO_LAUGH_LONG, 3, 95, 200, "\ Hé...hé...hé...\n\ Ciao bello Mario!\n\ Moi j'traverse les murs!\n\ Tu peux le faire, toi?\n\ -Hin...hin...hin...")) +Hin...hin...hin...") -DEFINE_DIALOG(DIALOG_100, 1, 4, 95, 200, _("\ +DEFINE_DIALOG(DIALOG_100, SOUND_OBJ_UKIKI_CHATTER_LONG, 4, 95, 200, "\ GNIIIIII! KIIIII!\n\ J'l'ai eue!!!\n\ HI KI KI KI KI KI!\n\ -C'est à moi!!!")) +C'est à moi!!!") -DEFINE_DIALOG(DIALOG_101, 1, 5, 95, 200, _("\ +DEFINE_DIALOG(DIALOG_101, SOUND_OBJ_UKIKI_CHATTER_LONG, 5, 95, 200, "\ Aaaak...kiiii!!!\n\ Arrête! Tu m'étrangles!\n\ Quoi? Cette casquette?\n\ @@ -1380,9 +1385,9 @@ OK, prends-la...\n\ Grande brute, va!\n\ De toutes façons,\n\ tu as l'air débile avec ça\n\ -sur la tête...")) +sur la tête...") -DEFINE_DIALOG(DIALOG_102, 1, 4, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_102, NO_SOUND, 4, 30, 200, "\ Les Boos sont timides! Si\n\ vous les regardez dans les\n\ yeux, ils disparaîtront...\n\ @@ -1393,25 +1398,25 @@ Invisibles, ils sont\n\ invincibles...\n\ Tentez de vous faufiler\n\ derrière eux et de leur\n\ -botter les fesses!")) +botter les fesses!") -DEFINE_DIALOG(DIALOG_103, 1, 4, 95, 200, _("\ +DEFINE_DIALOG(DIALOG_103, NO_SOUND, 4, 95, 200, "\ Au sommet des quatre\n\ piliers l'on doit se tenir,\n\ pour que la lumière puisse\n\ -enfin jaillir...")) +enfin jaillir...") -DEFINE_DIALOG(DIALOG_104, 1, 4, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_104, NO_SOUND, 4, 30, 200, "\ L'ombre de l'étoile en\n\ face de vous est un\n\ -『Marqueur d'étoile』.\n\ +“Marqueur d'étoile”.\n\ \n\ Lorsque vous récupérerez\n\ 8 pièces rouges, une\n\ étoile apparaîtra à cet\n\ -emplacement.")) +emplacement.") -DEFINE_DIALOG(DIALOG_105, 1, 6, 95, 200, _("\ +DEFINE_DIALOG(DIALOG_105, SOUND_OBJ_BOBOMB_BUDDY_TALK, 6, 95, 200, "\ Canon prêt à tirer!\n\ Allez, saute à l'intérieur!\n\ Tu peux atteindre l'étoile\n\ @@ -1420,24 +1425,24 @@ utilisant les quatre\n\ canons.\n\ Utilise le stick multi-\n\ directionnel pour viser et\n\ -appuie sur [A] pour tirer.\n\ +appuie sur Ⓐ pour tirer.\n\ Si tu es habile, sers-toi\n\ des arbres et des poteaux\n\ -pour atterrir...")) +pour atterrir...") -DEFINE_DIALOG(DIALOG_106, 1, 2, 95, 200, _("\ +DEFINE_DIALOG(DIALOG_106, SOUND_OBJ_BOBOMB_BUDDY_TALK, 2, 95, 200, "\ Canon prêt à tirer!\n\ -Allez, saute à l'intérieur!")) +Allez, saute à l'intérieur!") -DEFINE_DIALOG(DIALOG_107, 1, 3, 95, 200, _("\ +DEFINE_DIALOG(DIALOG_107, SOUND_OBJ_BOO_LAUGH_LONG, 3, 95, 200, "\ Les fantômes sont...\n\ ...immortels!\n\ Hin hin hin hin...\n\ Pourras-tu sortir d'ici...\n\ ...vivant?\n\ -Gni hi hi hi hi hi...")) +Gni hi hi hi hi hi...") -DEFINE_DIALOG(DIALOG_108, 1, 3, 95, 200, _("\ +DEFINE_DIALOG(DIALOG_108, SOUND_OBJ_BOO_LAUGH_LONG, 3, 95, 200, "\ GNI HI HI HI HI HOU!\n\ Voici le seigneur des\n\ supplices!\n\ @@ -1446,9 +1451,9 @@ Le souverain des\n\ cauchemars...\n\ Le Big Boo en personne!\n\ Tremblez humains!!!\n\ -GNA HI HOU HA HIN HU !")) +GNA HI HOU HA HIN HU !") -DEFINE_DIALOG(DIALOG_109, 1, 2, 95, 200, _("\ +DEFINE_DIALOG(DIALOG_109, NO_SOUND, 2, 95, 200, "\ Oooooh Noooon!\n\ Mon corps a fondu!\n\ Tu ne pourrais pas\n\ @@ -1456,9 +1461,9 @@ m'aider, petit homme?\n\ J'ai besoin d'un nouveau\n\ corps!\n\ Je dois faire un golf\n\ -demain...")) +demain...") -DEFINE_DIALOG(DIALOG_110, 1, 2, 95, 200, _("\ +DEFINE_DIALOG(DIALOG_110, NO_SOUND, 2, 95, 200, "\ J'ai perdu la tête, on\n\ dirait...\n\ Connais-tu quelqu'un à la\n\ @@ -1466,17 +1471,17 @@ recherche d'un corps?\n\ Je suis peut-être petit,\n\ mais je grandis vite!\n\ Guide-moi, je te suivrai\n\ -n'importe où!")) +n'importe où!") -DEFINE_DIALOG(DIALOG_111, 1, 2, 95, 200, _("\ +DEFINE_DIALOG(DIALOG_111, NO_SOUND, 2, 95, 200, "\ Coooooool!\n\ Quel super corps!\n\ Maintenant je vais\n\ pouvoir aller draguer!\n\ Tiens, voici un petit\n\ -quelque chose pour toi...")) +quelque chose pour toi...") -DEFINE_DIALOG(DIALOG_112, 1, 4, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_112, NO_SOUND, 4, 30, 200, "\ Ramassez le plus de pièces\n\ possible! Elles rempliront\n\ votre énergie!\n\ @@ -1492,9 +1497,9 @@ un coeur!\n\ Si vous faites tourner le\n\ coeur très vite, il vous\n\ donnera beaucoup\n\ -d'énergie...")) +d'énergie...") -DEFINE_DIALOG(DIALOG_113, 1, 5, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_113, NO_SOUND, 5, 30, 200, "\ Il existe des casquettes\n\ spéciales dans les blocs\n\ rouges, verts et bleus.\n\ @@ -1504,9 +1509,9 @@ Marchez sur les\n\ interrupteurs dans les\n\ niveaux cachés pour faire\n\ apparaître les blocs de\n\ -couleur.")) +couleur.") -DEFINE_DIALOG(DIALOG_114, 1, 3, 95, 200, _("\ +DEFINE_DIALOG(DIALOG_114, SOUND_OBJ2_BOSS_DIALOG_GRUNT, 3, 95, 200, "\ Ah c'est pas le moment\n\ de venir m'embêter!\n\ \n\ @@ -1524,18 +1529,18 @@ une Attaque Rodéo sur\n\ mon dos?\n\ Ça m'étonnerais!\n\ Allez... En garde, nabot\n\ -rouge et bleu!")) +rouge et bleu!") -DEFINE_DIALOG(DIALOG_115, 1, 2, 95, 200, _("\ +DEFINE_DIALOG(DIALOG_115, SOUND_OBJ2_BOSS_DIALOG_GRUNT, 2, 95, 200, "\ Quoi? J'ai perdu?!?\n\ Sacré nom d'un pétard!\n\ Vous les humains, vous\n\ n'avez aucun coeur...\n\ Tiens, prends ça...\n\ -Et va-t'en!")) +Et va-t'en!") -DEFINE_DIALOG(DIALOG_116, 1, 4, 95, 200, _("\ -Hein?/De quoi?\n\ +DEFINE_DIALOG(DIALOG_116, SOUND_OBJ2_BOSS_DIALOG_GRUNT, 4, 95, 200, "\ +Hein? De quoi?\n\ Moi? J'ai perdu?\n\ Battu par un tout petit\n\ bonhomme de rien du tout!\n\ @@ -1550,9 +1555,9 @@ Ciao petit Mario!\n\ Si tu veux me revoir,\n\ choisis cette étoile sur\n\ l'écran du départ.\n\ -A bientôt!")) +A bientôt!") -DEFINE_DIALOG(DIALOG_117, 1, 2, 95, 200, _("\ +DEFINE_DIALOG(DIALOG_117, SOUND_OBJ2_BOSS_DIALOG_GRUNT, 2, 95, 200, "\ Qui...dérange...mon...\n\ ...sommeil...éternel...?\n\ Tout...bruit...doit...\n\ @@ -1560,17 +1565,17 @@ Tout...bruit...doit...\n\ Intrus...va...être...\n\ ...détruit...!\n\ ...COMBAT...!!!\n\ -...A...MAINS...NUES...!!!")) +...A...MAINS...NUES...!!!") -DEFINE_DIALOG(DIALOG_118, 1, 3, 95, 200, _("\ +DEFINE_DIALOG(DIALOG_118, SOUND_OBJ2_BOSS_DIALOG_GRUNT, 3, 95, 200, "\ Qu...qu...qu...Hein?\n\ Moi...perdu?...Hein?\n\ Moi...faible...nul.\n\ Toi...nouveau pharaon...\n\ Tiens...pour toi...\n\ -Moi...dormir...dodo. Ciao.")) +Moi...dormir...dodo. Ciao.") -DEFINE_DIALOG(DIALOG_119, 1, 5, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_119, NO_SOUND, 5, 30, 200, "\ Grrrrr! Tu m'as surpris...\n\ Je t'ai sous-estimé!\n\ Petit mais costaud, hein?\n\ @@ -1580,9 +1585,9 @@ Ne t'inquiète pas, on se\n\ reverra! Et la prochaine\n\ fois, je te mangerai les\n\ doigts!\n\ -Allez, à bientôt! GWA HA!")) +Allez, à bientôt! GWA HA!") -DEFINE_DIALOG(DIALOG_120, 1, 3, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_120, NO_SOUND, 3, 30, 200, "\ Moi? Le grand Bowser?\n\ Vaincu? Non, non!\n\ Ça ne compte pas!\n\ @@ -1594,9 +1599,9 @@ p'tite Peach, rejoins-moi\n\ en haut de la tour...\n\ Allez, à la prochaine!\n\ GWA HA HA HA HA HA HA!\n\ -GWA HI HOU HÉ HEU...HA!")) +GWA HI HOU HÉ HEU...HA!") -DEFINE_DIALOG(DIALOG_121, 1, 4, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_121, NO_SOUND, 4, 30, 200, "\ NOoOoOoOoOoOoOoOon!\n\ Mario... Méchant petit!\n\ Cette fois-ci...\n\ @@ -1612,23 +1617,23 @@ C'est insupportable!\n\ Mais je reviendrai...\n\ Un jour... Je reviendrai!\n\ Et ce jour-là...\n\ -Bye Bye Mario! BWA HA!!")) +Bye Bye Mario! BWA HA!!") -DEFINE_DIALOG(DIALOG_122, 1, 6, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_122, NO_SOUND, 6, 30, 200, "\ -Le Trou Noir-\n\ Droite: Plate-forme de\n\ -////travail.\n\ -////Labyrinthe\n\ -////toxique.\n\ -Gauche: Lac souterrain.")) +\t\ttravail.\n\ +\t\tLabyrinthe\n\ +\t\ttoxique.\n\ +Gauche: Lac souterrain.") -DEFINE_DIALOG(DIALOG_123, 1, 5, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_123, NO_SOUND, 5, 30, 200, "\ -Caverne Métallique-\n\ Droite: Vers la cascade.\n\ Gauche: Interrupteur des\n\ -////casquettes-métal.")) +\t\tcasquettes-métal.") -DEFINE_DIALOG(DIALOG_124, 1, 4, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_124, NO_SOUND, 4, 30, 200, "\ Plate-forme de travail:\n\ Danger!\n\ Lire le mode d'emploi\n\ @@ -1640,41 +1645,41 @@ forme.\n\ Si jamais vous tombez de\n\ la plate-forme, retournez\n\ là où vous l'avez vue pour\n\ -la première fois.")) +la première fois.") -DEFINE_DIALOG(DIALOG_125, 1, 3, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_125, NO_SOUND, 3, 30, 200, "\ Sortie du Labyrinthe\n\ toxique... Fermée!\n\ -Faites demi-tour!")) +Faites demi-tour!") -DEFINE_DIALOG(DIALOG_126, 1, 6, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_126, NO_SOUND, 6, 30, 200, "\ -Ascenseur 1-\n\ -Haut:/ Trou Noir.\n\ +Haut: Trou Noir.\n\ Droite: Plate-forme de\n\ -////travail.\n\ -////Labyrinthe\n\ -////toxique.")) +\t\ttravail.\n\ +\t\tLabyrinthe\n\ +\t\ttoxique.") -DEFINE_DIALOG(DIALOG_127, 1, 5, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_127, NO_SOUND, 5, 30, 200, "\ -Lac Souterrain-\n\ Droite: Caverne\n\ -////métallique.\n\ +\t\tmétallique.\n\ Gauche: Mine abandonnée\n\ -////(Fermée).\n\ +\t\t(Fermée).\n\ Gros Bibi, un gentil\n\ dragon, vit ici.\n\ Faites l'Attaque Rodéo\n\ sur son dos pour qu'il\n\ -baisse la tête...")) +baisse la tête...") -DEFINE_DIALOG(DIALOG_128, 1, 5, 95, 200, _("\ +DEFINE_DIALOG(DIALOG_128, NO_SOUND, 5, 95, 200, "\ Tu dois te battre avec\n\ honneur! Il est interdit\n\ de jeter une personnalité\n\ royale hors de la surface\n\ -de combat!")) +de combat!") -DEFINE_DIALOG(DIALOG_129, 1, 5, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_129, NO_SOUND, 5, 30, 200, "\ Bienvenue dans\n\ le niveau des casquettes\n\ d'invisibilité!!!\n\ @@ -1689,9 +1694,9 @@ Si vous portez une\n\ casquette d'invisibilité,\n\ vous pourrez traverser vos\n\ ennemis et pleins d'autres\n\ -choses...")) +choses...") -DEFINE_DIALOG(DIALOG_130, 1, 6, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_130, NO_SOUND, 6, 30, 200, "\ Bienvenue dans le niveau\n\ des casquettes-métal!!!\n\ Si vous marchez sur\n\ @@ -1703,9 +1708,9 @@ casquette-métal, vous\n\ vous transformerez en\n\ Métal Mario! Vous pourrez\n\ alors marcher sous l'eau.\n\ -Faites un essai pour voir!")) +Faites un essai pour voir!") -DEFINE_DIALOG(DIALOG_131, 1, 6, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_131, NO_SOUND, 6, 30, 200, "\ Bienvenue dans le niveau\n\ des casquettes ailées!!!\n\ Marchez sur l'interrupteur\n\ @@ -1722,24 +1727,24 @@ Lorsque vous êtes en\n\ possession de la casquette\n\ ailée, faites un Triple\n\ Saut pour vous envoler et\n\ -appuyez sur [Z] pour\n\ +appuyez sur Ⓩ pour\n\ atterrir.\n\ Appuyez vers le bas sur le\n\ stick multidirectionnel\n\ pour prendre de l'altitude\n\ et vers le haut pour\n\ piquer du nez. Imaginez-\n\ -vous à bord d'un 747!!!")) +vous à bord d'un 747!!!") -DEFINE_DIALOG(DIALOG_132, 1, 1, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_132, SOUND_OBJ_BIG_PENGUIN_YELL, 1, 30, 200, "\ Non, mais?\n\ Tu...tu...t'es fou?\n\ Tu triches?\n\ OK! T'es disqualifié!\n\ Tu l'auras pas volé!\n\ -Houuuuuu! Le tricheur!")) +Houuuuuu! Le tricheur!") -DEFINE_DIALOG(DIALOG_133, 1, 6, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_133, NO_SOUND, 6, 30, 200, "\ Mario! C'est toi?\n\ Comme je suis heureux de\n\ te voir!\n\ @@ -1769,9 +1774,9 @@ cette porte. Lorsque tu\n\ auras récupéré 8 étoiles,\n\ va ouvrir la porte avec la\n\ grosse étoile: la Princesse\n\ -doit être de l'autre côté!")) +doit être de l'autre côté!") -DEFINE_DIALOG(DIALOG_134, 1, 4, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_134, NO_SOUND, 4, 30, 200, "\ Le nom des étoiles inscrit\n\ au début de chaque monde\n\ est un indice!\n\ @@ -1790,9 +1795,9 @@ chance dans d'autres\n\ niveaux...\n\ Aide-nous le plus vite\n\ possible, mon mignon petit\n\ -Mario en sucre...")) +Mario en sucre...") -DEFINE_DIALOG(DIALOG_135, 1, 6, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_135, NO_SOUND, 6, 30, 200, "\ Bowser a volé les étoiles!\n\ Je l'ai vu!\n\ De mes propres yeux!\n\ @@ -1815,9 +1820,9 @@ Si tu désires revoir les\n\ ennemis que tu as déjà\n\ vaincu, sélectionne les\n\ étoiles en relation avec\n\ -ces ennemis...")) +ces ennemis...") -DEFINE_DIALOG(DIALOG_136, 1, 6, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_136, NO_SOUND, 6, 30, 200, "\ Whoa!!! Tu as déjà\n\ récupéré autant d'étoiles?\n\ Incroyable! T'es fort, toi!\n\ @@ -1847,9 +1852,9 @@ te faire moins mal en\n\ tombant d'une falaise, en\n\ effectuant une Attaque\n\ Rodéo juste avant de\n\ -toucher le sol...")) +toucher le sol...") -DEFINE_DIALOG(DIALOG_137, 1, 5, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_137, NO_SOUND, 5, 30, 200, "\ Merci Mario!\n\ Grâce à tes étoiles de\n\ puissance, Bowser est allé\n\ @@ -1859,17 +1864,17 @@ Au fait, savais-tu qu'une\n\ étoile de puissance\n\ apparaît à chaque fois\n\ que tu récupères 100\n\ -pièces dans un niveau?")) +pièces dans un niveau?") -DEFINE_DIALOG(DIALOG_138, 1, 6, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_138, NO_SOUND, 6, 30, 200, "\ -Ascenseur 2-\n\ -Bas://Lac souterrain.\n\ +Bas:\tLac souterrain.\n\ Gauche: Trou Noir.\n\ Droite: Labyrinthe\n\ -////toxique\n\ -////(fermé).")) +\t\ttoxique\n\ +\t\t(fermé).") -DEFINE_DIALOG(DIALOG_139, 1, 4, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_139, NO_SOUND, 4, 30, 200, "\ \n\ Au dessus:\n\ Chariot automatique.\n\ @@ -1880,19 +1885,19 @@ suit un chemin pré-\n\ déterminé...\n\ Le chariot disparaîtra\n\ automatiquement lorsque\n\ -vous tomberez...")) +vous tomberez...") -DEFINE_DIALOG(DIALOG_140, 1, 6, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_140, NO_SOUND, 6, 30, 200, "\ -Plate-forme de travail-\n\ Droite: Entrée du\n\ -////Labyrinthe\n\ -////toxique.\n\ +\t\tLabyrinthe\n\ +\t\ttoxique.\n\ Gauche: Trou Noir.\n\ -////Ascenseur 1.\n\ +\t\tAscenseur 1.\n\ Flèche: Votre position\n\ -////actuelle.")) +\t\tactuelle.") -DEFINE_DIALOG(DIALOG_141, 1, 4, 150, 200, _("\ +DEFINE_DIALOG(DIALOG_141, NO_SOUND, 4, 150, 200, "\ Vous avez récupéré une\n\ des étoiles du château!\n\ Vous pouvez désormais\n\ @@ -1908,14 +1913,14 @@ au rez-de-chaussée...\n\ Les troupes de Bowser\n\ sont encore nombreuses!\n\ Il faut les arrêter à tout\n\ -prix! Courage...")) +prix! Courage...") -DEFINE_DIALOG(DIALOG_142, 1, 5, 150, 200, _("\ +DEFINE_DIALOG(DIALOG_142, NO_SOUND, 5, 150, 200, "\ Vous avez récupéré trois\n\ étoiles de puissance!\n\ Désormais, vous pouvez\n\ ouvrir les portes marquées\n\ -d'un 『3』.\n\ +d'un “3”.\n\ Vous pouvez aller et venir\n\ dans les niveaux comme\n\ bon vous semble...\n\ @@ -1924,9 +1929,9 @@ bon vous semble...\n\ Les ennemis qui vous\n\ attendent seront de plus\n\ en plus costauds!\n\ -Alors, prudence...")) +Alors, prudence...") -DEFINE_DIALOG(DIALOG_143, 1, 5, 150, 200, _("\ +DEFINE_DIALOG(DIALOG_143, NO_SOUND, 5, 150, 200, "\ Vous avez récupéré huit\n\ étoiles de puissance!\n\ Vous pouvez désormais\n\ @@ -1936,9 +1941,9 @@ La Princesse est juste de\n\ l'autre côté...\n\ Pouvez-vous l'entendre\n\ crier votre nom?\n\ -『Marioooooo!』")) +“Marioooooo!”") -DEFINE_DIALOG(DIALOG_144, 1, 5, 150, 200, _("\ +DEFINE_DIALOG(DIALOG_144, NO_SOUND, 5, 150, 200, "\ Vous avez récupéré 30\n\ étoiles de puissance!\n\ Vous pouvez désormais\n\ @@ -1962,9 +1967,9 @@ vilain vautour...\n\ On dit que Bowser s'est\n\ réfugié dans les\n\ profondeurs de l'océan...\n\ -L'avez-vous rencontré?")) +L'avez-vous rencontré?") -DEFINE_DIALOG(DIALOG_145, 1, 6, 150, 200, _("\ +DEFINE_DIALOG(DIALOG_145, NO_SOUND, 6, 150, 200, "\ Vous avez récupéré 50\n\ étoiles de puissance!\n\ Vous pouvez désormais\n\ @@ -1979,20 +1984,20 @@ des blocs de couleur\n\ peuvent être très utiles...\n\ Allez, en route Mario...\n\ Et que la force soit avec\n\ -toi, petit homme.")) +toi, petit homme.") -DEFINE_DIALOG(DIALOG_146, 1, 5, 150, 200, _("\ +DEFINE_DIALOG(DIALOG_146, NO_SOUND, 5, 150, 200, "\ Vous avez récupéré 70\n\ étoiles de puissance!\n\ Désormais, vous pouvez\n\ accéder en haut de\n\ -『l'escalier sans fin』...\n\ +“l'escalier sans fin”...\n\ Le terrible Bowser vous y\n\ attend...\n\ Etes-vous prêt à\n\ -l'affronter?")) +l'affronter?") -DEFINE_DIALOG(DIALOG_147, 1, 6, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_147, NO_SOUND, 6, 30, 200, "\ Faites-vous bon usage\n\ des casquettes spéciales?\n\ Elles peuvent vous être\n\ @@ -2010,11 +2015,11 @@ fourniront des casquettes\n\ ailées, les bleus des\n\ casquettes d'invisibilité,\n\ et les verts des\n\ -casquettes-métal...")) +casquettes-métal...") -DEFINE_DIALOG(DIALOG_148, 1, 6, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_148, NO_SOUND, 6, 30, 200, "\ Montagne du Bonhomme de\n\ -neige.../DANGER!\n\ +neige... DANGER!\n\ Ne pas tenter le Triple\n\ Saut au-dessus de la\n\ machine à cracher des\n\ @@ -2024,9 +2029,9 @@ vous fera vite perdre de\n\ l'énergie de façon\n\ permanente.\n\ Alors, attention!\n\ --Le Bonhomme de neige-")) +-Le Bonhomme de neige-") -DEFINE_DIALOG(DIALOG_149, 1, 5, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_149, NO_SOUND, 5, 30, 200, "\ Voici la Glissade Secrète\n\ de la Princesse Peach!\n\ Vous y trouverez une\n\ @@ -2040,9 +2045,9 @@ ralentir...\n\ Si vous glissez très vite,\n\ vous découvrirez une\n\ des étoiles secrètes du\n\ -château!")) +château!") -DEFINE_DIALOG(DIALOG_150, 1, 4, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_150, SOUND_OBJ_WIGGLER_TALK, 4, 30, 200, "\ Whoa! Va-z'y, lui!\n\ T' as inondé ma zon-mé!!!\n\ Pourquoi t'as fait ça, yo!\n\ @@ -2057,34 +2062,34 @@ C'est à cause de cette\n\ étoile...\n\ Je suis sûr qu'elle me\n\ porte la poisse...\n\ -Saleté, va!")) +Saleté, va!") -DEFINE_DIALOG(DIALOG_151, 1, 6, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_151, SOUND_OBJ_WIGGLER_TALK, 6, 30, 200, "\ Ah non! Ça suffit!\n\ D'abord tu me mouilles,\n\ ensuite tu m'écrases la\n\ face...\n\ Grrrr! Pas cool, Bob.\n\ -Tu cherches le contact?")) +Tu cherches le contact?") -DEFINE_DIALOG(DIALOG_152, 1, 2, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_152, SOUND_OBJ_WIGGLER_TALK, 2, 30, 200, "\ Gnaaaaa! Pov'type, va!\n\ Tiens, la v'là ton étoile!\n\ J'm'en fiche...\n\ J'peux en avoir d'autres.\n\ Allez, à la prochaine...\n\ -Cool, Abdoul.")) +Cool, Abdoul.") -DEFINE_DIALOG(DIALOG_153, 1, 1, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_153, NO_SOUND, 1, 30, 200, "\ Hé! Qui va là?\n\ Qui me grimpe dessus?\n\ Une mouche?\n\ Un moustique?\n\ Un cafard?\n\ T'as intérêt à dégager!\n\ -Sinon j'te souffle dessus!")) +Sinon j'te souffle dessus!") -DEFINE_DIALOG(DIALOG_154, 1, 5, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_154, NO_SOUND, 5, 30, 200, "\ Accroche-toi à ta\n\ casquette! Si jamais tu\n\ la perds, retourne la\n\ @@ -2102,9 +2107,9 @@ Sauve-la, mon mignon\n\ Mario rouge et bleu...\n\ Heu... Tu savais qu'il\n\ existe aussi des niveaux\n\ -dans les murs, hein?")) +dans les murs, hein?") -DEFINE_DIALOG(DIALOG_155, 1, 5, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_155, NO_SOUND, 5, 30, 200, "\ Grâce au pouvoir des\n\ étoiles, le château revient\n\ peu à peu à la vie...\n\ @@ -2119,17 +2124,17 @@ Autre chose: rentre dans\n\ le niveau Trempé-Séché\n\ à l'aide d'un grand saut.\n\ \n\ -Allez, courage camarade!")) +Allez, courage camarade!") -DEFINE_DIALOG(DIALOG_156, 1, 3, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_156, NO_SOUND, 3, 30, 200, "\ Le niveau de la pendule\n\ est étrange...\n\ \n\ Fais attention à la\n\ grande aiguille lorsque\n\ -tu rentres dans l'horloge.")) +tu rentres dans l'horloge.") -DEFINE_DIALOG(DIALOG_157, 1, 5, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_157, NO_SOUND, 5, 30, 200, "\ Attention aux sables\n\ mouvants!\n\ Si vous vous faites\n\ @@ -2138,9 +2143,9 @@ boire la tasse!\n\ Les zones sombres sont\n\ des trous sans fond...\n\ Alors, prudence jeune\n\ -aventurier...")) +aventurier...") -DEFINE_DIALOG(DIALOG_158, 1, 6, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_158, NO_SOUND, 6, 30, 200, "\ 1. Si vous sautez de\n\ façon répétée, vous\n\ sauterez de plus en plus\n\ @@ -2152,26 +2157,26 @@ et sautez à nouveau pour\n\ créer une Impulsion.\n\ Grâce à cette technique,\n\ vous pourrez accéder à\n\ -des lieux en hauteur.")) +des lieux en hauteur.") -DEFINE_DIALOG(DIALOG_159, 1, 4, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_159, NO_SOUND, 4, 30, 200, "\ 3. En vous arrêtant, en\n\ -appuyant sur [Z] et en\n\ +appuyant sur Ⓩ et en\n\ sautant, vous ferez un\n\ Saut Périlleux en arrière.\n\ Pour faire un Saut en\n\ Longueur, courez, appuyez\n\ -sur [Z], puis sautez.")) +sur Ⓩ, puis sautez.") -DEFINE_DIALOG(DIALOG_160, 1, 3, 30, 200, _("\ -Appuyez sur [B] lorsque\n\ +DEFINE_DIALOG(DIALOG_160, NO_SOUND, 3, 30, 200, "\ +Appuyez sur Ⓑ lorsque\n\ vous courez pour faire\n\ une attaque en glissade.\n\ Pour vous remettre\n\ -debout, appuyez sur [A] ou\n\ -sur [B].")) +debout, appuyez sur Ⓐ ou\n\ +sur Ⓑ.") -DEFINE_DIALOG(DIALOG_161, 1, 4, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_161, SOUND_GENERAL_YOSHI_TALK, 4, 30, 200, "\ Mario!?!?!\n\ C'est toi? Vraiment toi?\n\ Ça fait un bout de temps\n\ @@ -2192,7 +2197,7 @@ Tiens...\n\ J'ai une lettre pour toi...\n\ C'est peut-être une\n\ admiratrice, qui sait?\n\ -『Merci d'avoir joué au\n\ +“Merci d'avoir joué au\n\ plus beau jeu de toute la\n\ galaxie:\n\ MARIO 64!!!\n\ @@ -2203,9 +2208,9 @@ alors...\n\ Voici quelques munitions!\n\ A bientôt et merci!\n\ --Les créateurs de\n\ -/Mario 64...")) + Mario 64...") -DEFINE_DIALOG(DIALOG_162, 1, 2, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_162, NO_SOUND, 2, 30, 200, "\ Oh, non!\n\ Encore toi?\n\ T'es amoureux, ou quoi?\n\ @@ -2221,9 +2226,9 @@ c'est la dernière fois!\n\ Ah... Autre chose...\n\ \n\ LACHE-MOI!!!!!\n\ -GRANDE BRUTE!!!!!")) +GRANDE BRUTE!!!!!") -DEFINE_DIALOG(DIALOG_163, 1, 4, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_163, NO_SOUND, 4, 30, 200, "\ NoOoOoOoOoOoOoOon!!!\n\ Tu...tu...tu m'as battu?\n\ Moi?!? C'est illogique!\n\ @@ -2242,9 +2247,9 @@ suis pas du genre à\n\ abandonner si facilement!\n\ BWA HA HA HA HA HA HA!\n\ GWA HI HA HI HOU HEU!\n\ -..... Atcha!")) +..... Atcha!") -DEFINE_DIALOG(DIALOG_164, 1, 4, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_164, NO_SOUND, 4, 30, 200, "\ Beuuuuuuuu...\n\ J'ai trop mangé, moi...\n\ Beuuuuuuuu...\n\ @@ -2256,42 +2261,42 @@ A moins que tu aies peur!\n\ Alors, c'est d'accord?\n\ Prêt...\n\ \n\ -//Partez!//Heu, non!")) +\tPartez!\tHeu, non!") -DEFINE_DIALOG(DIALOG_165, 1, 3, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_165, NO_SOUND, 3, 30, 200, "\ Tourner autour du poteau\n\ peut faire tourner les\n\ -têtes...")) +têtes...") -DEFINE_DIALOG(DIALOG_166, 1, 4, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_166, NO_SOUND, 4, 30, 200, "\ Je m'entraîne...\n\ Je reviens plus tard...\n\ \n\ --- Koopa-Rapido --")) +-- Koopa-Rapido --") -DEFINE_DIALOG(DIALOG_167, 1, 5, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_167, NO_SOUND, 5, 30, 200, "\ En route vers le château!\n\ \n\ -Appuyez sur [A] pour sauter\n\ -et sur [Z] pour vous\n\ +Appuyez sur Ⓐ pour sauter\n\ +et sur Ⓩ pour vous\n\ accroupir.\n\ -Appuyez sur [B] pour\n\ +Appuyez sur Ⓑ pour\n\ attaquer ou pour attraper\n\ quelque chose. Appuyez à\n\ -nouveau sur [B] pour lancer\n\ -ce que vous portez.")) +nouveau sur Ⓑ pour lancer\n\ +ce que vous portez.") -DEFINE_DIALOG(DIALOG_168, 1, 6, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_168, SOUND_OBJ_WIGGLER_TALK, 6, 30, 200, "\ Hé! Lâche-moi un peu!\n\ Ça fait deux fois que tu\n\ t'essuies les pieds sur\n\ ma tête!\n\ Tu m'cherches ou quoi?\n\ -Coup d'boule!!!!")) +Coup d'boule!!!!") -DEFINE_DIALOG(DIALOG_169, 1, 5, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_169, NO_SOUND, 5, 30, 200, "\ Dehors les touristes!\n\ Cette caverne est très\n\ dangereuse!!!\n\ Alors... DE-HORS!\n\ -/ -- Le capitaine --")) + -- Le capitaine --") diff --git a/text/jp/courses.h b/text/jp/courses.h index 4590c3a7e..2350790c6 100644 --- a/text/jp/courses.h +++ b/text/jp/courses.h @@ -1,80 +1,80 @@ -COURSE_ACTS(COURSE_BOB, _(" 1 ボムへいの せんじょう"), - _("やまのうえの ボムキング") , _("はくねつ ノコノコレース") , _("そらのしままで ぶっとべ"), - _("8まいの あかコイン") , _("そらにはばたけ はねマリオ") , _("ワンワンの いぬごやで")) +COURSE_ACTS(COURSE_BOB, "ボムへいの せんじょう", + "やまのうえの ボムキング" , "はくねつ ノコノコレース" , "そらのしままで ぶっとべ", + "8まいの あかコイン" , "そらにはばたけ はねマリオ" , "ワンワンの いぬごやで") -COURSE_ACTS(COURSE_WF, _(" 2 バッタンキングの とりで"), - _("いかりのバッタン キング") , _("とりでの てっぺんへ") , _("たいほうで ひとっとび"), - _("うきしまの 8まいコイン") , _("とりかごへ ストーン") , _("たいほうで ぶっこわせ!")) +COURSE_ACTS(COURSE_WF, "バッタンキングの とりで", + "いかりのバッタン キング" , "とりでの てっぺんへ" , "たいほうで ひとっとび", + "うきしまの 8まいコイン" , "とりかごへ ストーン" , "たいほうで ぶっこわせ!") -COURSE_ACTS(COURSE_JRB, _(" 3 かいぞくの いりえ"), - _("ちんぼつせんの おたから") , _("でてこい きょだいウツボ") , _("かいていどうくつの おたから"), - _("うかんだフネの あかコイン") , _("いわのはしらへ ひとっとび") , _("ふきだす みずを くぐれ")) +COURSE_ACTS(COURSE_JRB, "かいぞくの いりえ", + "ちんぼつせんの おたから" , "でてこい きょだいウツボ" , "かいていどうくつの おたから", + "うかんだフネの あかコイン" , "いわのはしらへ ひとっとび" , "ふきだす みずを くぐれ") -COURSE_ACTS(COURSE_CCM, _(" 4 さむいさむい マウンテン"), - _("スーパースノースライダー") , _("まいごの こペンギン") , _("ペンギン チャンピオンレース"), - _("すべって 8まいあかコイン") , _("ゴロゴロ ゆきダルマ") , _("かくれ スーパー カベキック")) +COURSE_ACTS(COURSE_CCM, "さむいさむい マウンテン", + "スーパースノースライダー" , "まいごの こペンギン" , "ペンギン チャンピオンレース", + "すべって 8まいあかコイン" , "ゴロゴロ ゆきダルマ" , "かくれ スーパー カベキック") -COURSE_ACTS(COURSE_BBH, _(" 5 テレサの ホラーハウス"), - _("おやかたテレサを さがせ") , _("テレサの メリーゴーランド") , _("ほんだなオバケの ナゾ"), - _("8まいコインは どこだ") , _("バルコニーの ボステレサ") , _("かくしべやの おおめだま")) +COURSE_ACTS(COURSE_BBH, "テレサの ホラーハウス", + "おやかたテレサを さがせ" , "テレサの メリーゴーランド" , "ほんだなオバケの ナゾ", + "8まいコインは どこだ" , "バルコニーの ボステレサ" , "かくしべやの おおめだま") -COURSE_ACTS(COURSE_HMC, _(" 6 やみにとける どうくつ"), - _("ドッシーのいる ちていこ") , _("そうさリフトの あかコイン") , _("メタルで ダッシュ"), - _("ケムリめいろを ぬけて") , _("ケムリめいろの ひじょうぐち"), _("ゴロゴロいわの ひみつ")) +COURSE_ACTS(COURSE_HMC, "やみにとける どうくつ", + "ドッシーのいる ちていこ" , "そうさリフトの あかコイン" , "メタルで ダッシュ", + "ケムリめいろを ぬけて" , "ケムリめいろの ひじょうぐち", "ゴロゴロいわの ひみつ") -COURSE_ACTS(COURSE_LLL, _(" 7 ファイアバブル ランド"), - _("おとせ ボスどんけつ") , _("たたかえ!どんけつたい") , _("15パズルの 8まいコイン"), - _("コロコロ まるたわたり") , _("かざんの パワースター") , _("かざんの リフトツアー")) +COURSE_ACTS(COURSE_LLL, "ファイアバブル ランド", + "おとせ ボスどんけつ" , "たたかえ!どんけつたい" , "15パズルの 8まいコイン", + "コロコロ まるたわたり" , "かざんの パワースター" , "かざんの リフトツアー") -COURSE_ACTS(COURSE_SSL, _(" 8 あっちっち さばく"), - _("いたずらハゲたか ジャンゴ") , _("ピラミッドの てっぺんで") , _("きょだいピラミッドの ないぶ"), - _("4つのはしらに たつものへ") , _("とびまわれ 8まいコイン") , _("きょだいピラミッドのナゾ")) +COURSE_ACTS(COURSE_SSL, "あっちっち さばく", + "いたずらハゲたか ジャンゴ" , "ピラミッドの てっぺんで" , "きょだいピラミッドの ないぶ", + "4つのはしらに たつものへ" , "とびまわれ 8まいコイン" , "きょだいピラミッドのナゾ") -COURSE_ACTS(COURSE_DDD, _(" 9 ウォーター ランド"), - _("クッパの せんすいかん") , _("うずしおの たからばこ") , _("にげたクッパの あかコイン"), - _("ふきだす みずを くぐれ") , _("マンタの おくりもの") , _("ボウシが そろったら")) +COURSE_ACTS(COURSE_DDD, "ウォーター ランド", + "クッパの せんすいかん" , "うずしおの たからばこ" , "にげたクッパの あかコイン", + "ふきだす みずを くぐれ" , "マンタの おくりもの" , "ボウシが そろったら") -COURSE_ACTS(COURSE_SL, _("10 スノーマンズ ランド"), - _("おおゆきダルマの おでこ") , _("こおりのくにの どんけつ") , _("こおりの オブジェ"), - _("つめたい いけを こえて") , _("コウラにのって あかコイン") , _("フワフワさんの おうち")) +COURSE_ACTS(COURSE_SL, "スノーマンズ ランド", + "おおゆきダルマの おでこ" , "こおりのくにの どんけつ" , "こおりの オブジェ", + "つめたい いけを こえて" , "コウラにのって あかコイン" , "フワフワさんの おうち") -COURSE_ACTS(COURSE_WDW, _("11 みずびたシティー"), - _("ビリビリの まめリフト") , _("トップオブ ザ シティー") , _("あさせと そらのシークレット"), - _("いそげ!かなあみエレベーター"), _("ダウンタウンの あかコイン") , _("ダウンタウンを かけろ")) +COURSE_ACTS(COURSE_WDW, "みずびたシティー", + "ビリビリの まめリフト" , "トップオブ ザ シティー" , "あさせと そらのシークレット", + "いそげ!かなあみエレベーター", "ダウンタウンの あかコイン" , "ダウンタウンを かけろ") -COURSE_ACTS(COURSE_TTM, _("12 たかいたかいマウンテン"), - _("たかいたかい やまのうえ") , _("いたずらザル ウッキィのオリ"), _("おばけキノコの あかコイン"), - _("マウンテン スライダー") , _("はしのうえから みわたせば") , _("ぶっとべ はなれキノコへ")) +COURSE_ACTS(COURSE_TTM, "たかいたかいマウンテン", + "たかいたかい やまのうえ" , "いたずらザル ウッキィのオリ", "おばけキノコの あかコイン", + "マウンテン スライダー" , "はしのうえから みわたせば" , "ぶっとべ はなれキノコへ") -COURSE_ACTS(COURSE_THI, _("13 ちびでか アイランド"), - _("きょだいパックンフラワー") , _("デカじまの てっぺんで") , _("ノコノコ リターンマッチ"), - _("チビじまの 5シークレット") , _("ハナチャンの あかコイン") , _("イカリの ハナチャン")) +COURSE_ACTS(COURSE_THI, "ちびでか アイランド", + "きょだいパックンフラワー" , "デカじまの てっぺんで" , "ノコノコ リターンマッチ", + "チビじまの 5シークレット" , "ハナチャンの あかコイン" , "イカリの ハナチャン") -COURSE_ACTS(COURSE_TTC, _("14 チックタックロック"), - _("グルグル かごのなかへ") , _("ふりこの へや") , _("チックタックはりの うえ"), - _("えっへん てっぺん ドッスン"), _("つきだしを のりこえて") , _("00ふんの あかコイン")) +COURSE_ACTS(COURSE_TTC, "チックタックロック", + "グルグル かごのなかへ" , "ふりこの へや" , "チックタックはりの うえ", + "えっへん てっぺん ドッスン", "つきだしを のりこえて" , "00ふんの あかコイン") -COURSE_ACTS(COURSE_RR, _("15 レインボー クルーズ"), - _("にじを わたる ふね") , _("てんくうの おやしき") , _("タテめいろの あかコイン"), - _("カゼきる きょだいブランコ") , _("おおぞら アスレチック") , _("にじの かなたの しま")) +COURSE_ACTS(COURSE_RR, "レインボー クルーズ", + "にじを わたる ふね" , "てんくうの おやしき" , "タテめいろの あかコイン", + "カゼきる きょだいブランコ" , "おおぞら アスレチック" , "にじの かなたの しま") -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, _("   おいしいケーキ")) +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(_("   おしろのかくれスター")) +CASTLE_SECRET_STARS("おしろのかくれスター") -EXTRA_TEXT(0, _("おしろのかくれスター")) -EXTRA_TEXT(1, _("100まいコインの スター")) -EXTRA_TEXT(2, _("マウンテンのへやが ひらく!")) -EXTRA_TEXT(3, _("みずとゆき2つのへやが ひらく!")) -EXTRA_TEXT(4, _("おおきなほしの ドアがひらく!")) -EXTRA_TEXT(5, _("クッパへの とびらがひらく!")) -EXTRA_TEXT(6, _("3がいへの とびらがひらく!")) +EXTRA_TEXT(0, "おしろのかくれスター") +EXTRA_TEXT(1, "100まいコインの スター") +EXTRA_TEXT(2, "マウンテンのへやが ひらく!") +EXTRA_TEXT(3, "みずとゆき2つのへやが ひらく!") +EXTRA_TEXT(4, "おおきなほしの ドアがひらく!") +EXTRA_TEXT(5, "クッパへの とびらがひらく!") +EXTRA_TEXT(6, "3がいへの とびらがひらく!") diff --git a/text/jp/dialogs.h b/text/jp/dialogs.h index d40143ee4..d1f4d52be 100644 --- a/text/jp/dialogs.h +++ b/text/jp/dialogs.h @@ -1,13 +1,6 @@ -// Parameters: dialog enum ID, (unused), lines per box, left offset, width +// Parameters: dialog enum ID, voice sound, lines per box, left offset, width -#define HOW_TO_READ_SIGNS_1 "\ -カンバンは まえにたって\n\ -AかBボタンでよめます。\n\ -まえにたつだけで はなし\n\ -かけてくれる どうぶつも\n\ -います。" - -DEFINE_DIALOG(DIALOG_000, 1, 5, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_000, NO_SOUND, 5, 30, 200, "\ おおっと、ここはキケンな\n\ せんじょうの どまんなか。\n\ 『え』のなかのせかいには\n\ @@ -17,10 +10,14 @@ DEFINE_DIALOG(DIALOG_000, 1, 5, 30, 200, _("\ はなしかけてみるといい!\n\ Bボタンではなしができる。\n\ きっと、ちからになって\n\ -くれるはずだ。\n"\ -HOW_TO_READ_SIGNS_1)) +くれるはずだ。\n\ +カンバンは まえにたって\n\ +AかBボタンでよめます。\n\ +まえにたつだけで はなし\n\ +かけてくれる どうぶつも\n\ +います。") -DEFINE_DIALOG(DIALOG_001, 1, 4, 95, 200, _("\ +DEFINE_DIALOG(DIALOG_001, SOUND_OBJ_BOBOMB_BUDDY_TALK, 4, 95, 200, "\ あぶない あぶない!!\n\ こんなところを うろうろ\n\ してると、みずばくだんが\n\ @@ -40,9 +37,9 @@ DEFINE_DIALOG(DIALOG_001, 1, 4, 95, 200, _("\ ボムとりでの いりぐちに\n\ つきます。キングのスター\n\ を とりもどしたら また\n\ -あいに きてください。")) +あいに きてください。") -DEFINE_DIALOG(DIALOG_002, 1, 4, 95, 200, _("\ +DEFINE_DIALOG(DIALOG_002, SOUND_OBJ_BOBOMB_BUDDY_TALK, 4, 95, 200, "\ ちょっと あなた!\n\ このさきはキケンですよ!\n\ \n\ @@ -58,9 +55,9 @@ DEFINE_DIALOG(DIALOG_002, 1, 4, 95, 200, _("\ ぼくら あかボムへいは\n\ あなたのみかたです。\n\ いつでも はなしかけて\n\ -きてくださいね!")) +きてくださいね!") -DEFINE_DIALOG(DIALOG_003, 1, 5, 95, 200, _("\ +DEFINE_DIALOG(DIALOG_003, SOUND_OBJ_BOBOMB_BUDDY_TALK, 5, 95, 200, "\ おかげで ボムキングは\n\ おとなしくなりました!\n\ でも、たたかいは おわり\n\ @@ -75,9 +72,9 @@ DEFINE_DIALOG(DIALOG_003, 1, 5, 95, 200, _("\ おまちしています。\n\ はなしかけて くださいね。\n\ いつでも たいほうを\n\ -じゅんびしますよ。")) +じゅんびしますよ。") -DEFINE_DIALOG(DIALOG_004, 1, 3, 95, 200, _("\ +DEFINE_DIALOG(DIALOG_004, SOUND_OBJ_BOBOMB_BUDDY_TALK, 3, 95, 200, "\ ぼくたちは へいわを\n\ ねがっています。 だから\n\ たいほうは つかいません。\n\ @@ -86,9 +83,9 @@ DEFINE_DIALOG(DIALOG_004, 1, 3, 95, 200, _("\ どうぞ つかってください。\n\ このコースにあるすべての\n\ あかボムぐん たいほうを\n\ -つかえるように します。")) +つかえるように します。") -DEFINE_DIALOG(DIALOG_005, 1, 4, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_005, SOUND_OBJ_KOOPA_TALK, 4, 30, 200, "\ なーんだ、マリオさんじゃ\n\ ないッスか!\n\ ボムキングやっつけたって\n\ @@ -107,23 +104,23 @@ DEFINE_DIALOG(DIALOG_005, 1, 4, 30, 200, _("\ \n\  ヨーーーイ!\n\ \n\ -   ドン!  やめる")) +   ドン!  やめる") -DEFINE_DIALOG(DIALOG_006, 1, 4, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_006, SOUND_OBJ_KOOPA_TALK, 4, 30, 200, "\ ははっ ズルッコは\n\ なしッス! マリオさん。\n\ またこんど\n\ -あそびましょうね。")) +あそびましょうね。") -DEFINE_DIALOG(DIALOG_007, 1, 6, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_007, SOUND_OBJ_KOOPA_TALK, 6, 30, 200, "\ ハア ハア ハア\n\ いやーまいったッス!\n\ ほんと はえーッスね!\n\ オイラに かったきねんに、\n\ これ、あげるッス。\n\ -ホイ!")) +ホイ!") -DEFINE_DIALOG(DIALOG_008, 1, 5, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_008, NO_SOUND, 5, 30, 200, "\ もうけんワンワン キケン\n\ Cボタンの うえをおして\n\ 『マリオのちかく』から\n\ @@ -133,9 +130,9 @@ DEFINE_DIALOG(DIALOG_008, 1, 5, 30, 200, _("\ おなじコインを さがして\n\ 8まいあつめると、はしを\n\ わたったひだりのはやしに\n\ -スターがでます。")) +スターがでます。") -DEFINE_DIALOG(DIALOG_009, 1, 5, 30, 200, _("\ +DEFINE_DIALOG(SOUND_OBJ_KOOPA_TALK, 1, 5, 30, 200, "\ ひっさしぶりッス! いま\n\ ちょーどかえったとこッス。\n\ パワースターのせいか\n\ @@ -150,9 +147,14 @@ DEFINE_DIALOG(DIALOG_009, 1, 5, 30, 200, _("\ しってるッスよね!?\n\ そんじゃ\n\  ヨーーーイ!\n\ -   ドン!  やめる")) +   ドン!  やめる") -DEFINE_DIALOG(DIALOG_010, 1, 3, 30, 200, _("\ +/** + * Special case: if the voice is SEQ_EVENT_SOLVE_PUZZLE, + * then play_dialog_sound will run play_puzzle_jingle + * instead of playing a sound effect + */ +DEFINE_DIALOG(DIALOG_010, SEQ_EVENT_SOLVE_PUZZLE, 3, 30, 200, "\ そらを じゆうにとべる\n\ 『はねのぼうし』の\n\ スイッチを ふみました。\n\ @@ -161,9 +163,9 @@ DEFINE_DIALOG(DIALOG_010, 1, 3, 30, 200, _("\ ぼうしがとびだします。\n\ ここまでをセーブする?\n\ \n\ -   はい   いいえ")) +   はい   いいえ") -DEFINE_DIALOG(DIALOG_011, 1, 3, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_011, SEQ_EVENT_SOLVE_PUZZLE, 3, 30, 200, "\ むてきの からだになれる\n\ 『メタルのぼうし』の\n\ スイッチを ふみました。\n\ @@ -172,9 +174,9 @@ DEFINE_DIALOG(DIALOG_011, 1, 3, 30, 200, _("\ ぼうしが とびだします。\n\ ここまでをセーブする?\n\ \n\ -   はい   いいえ")) +   はい   いいえ") -DEFINE_DIALOG(DIALOG_012, 1, 3, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_012, SEQ_EVENT_SOLVE_PUZZLE, 3, 30, 200, "\ すがたをけせる まほうの\n\ 『とうめいのぼうし』の\n\ スイッチを ふみました。\n\ @@ -183,9 +185,9 @@ DEFINE_DIALOG(DIALOG_012, 1, 3, 30, 200, _("\ ぼうしが とびだします。\n\ ここまでをセーブする?\n\ \n\ -   はい   いいえ")) +   はい   いいえ") -DEFINE_DIALOG(DIALOG_013, 1, 5, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_013, NO_SOUND, 5, 30, 200, "\ 100まいコインの\n\ スターを てにいれた!\n\ おしろのパワーが\n\ @@ -194,9 +196,9 @@ DEFINE_DIALOG(DIALOG_013, 1, 5, 30, 200, _("\ \n\ ここまでセーブしますか?\n\ \n\ -   はい   いいえ")) +   はい   いいえ") -DEFINE_DIALOG(DIALOG_014, 1, 5, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_014, NO_SOUND, 5, 30, 200, "\ おもわぬところで\n\ スターをてにいれた。\n\ そして おしろのパワーが\n\ @@ -205,9 +207,9 @@ DEFINE_DIALOG(DIALOG_014, 1, 5, 30, 200, _("\ \n\ ここまでセーブしますか?\n\ \n\ -   はい   いいえ")) +   はい   いいえ") -DEFINE_DIALOG(DIALOG_015, 1, 4, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_015, NO_SOUND, 4, 30, 200, "\ てきはパンチでたおせるよ。\n\ Aボタンは『ジャンプ』\n\ Bボタンは『パンチ』です。\n\ @@ -215,15 +217,15 @@ DEFINE_DIALOG(DIALOG_015, 1, 4, 30, 200, _("\ 『ものをもつ』ときも\n\        Bボタン!\n\ 『なげる』は もういちど\n\ -Bボタンをおしてください。")) +Bボタンをおしてください。") -DEFINE_DIALOG(DIALOG_016, 1, 4, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_016, NO_SOUND, 4, 30, 200, "\ キラキラひかったコウラに\n\ のると、どんなところも\n\ スイスイすすめる!\n\ -てきをけちらし すすめ!")) +てきをけちらし すすめ!") -DEFINE_DIALOG(DIALOG_017, 1, 4, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_017, SOUND_OBJ_KING_BOBOMB_TALK, 4, 30, 200, "\ ワシがボムキング、つまり\n\ ばくだんの おうさまだ。\n\ よくここまできた。その\n\ @@ -235,86 +237,86 @@ DEFINE_DIALOG(DIALOG_017, 1, 4, 30, 200, _("\ パワースターがほしければ\n\ ワシを なげとばしてみろ。\n\ うしろから かつげるか?\n\ -さあ、かかってこい!")) +さあ、かかってこい!") -DEFINE_DIALOG(DIALOG_018, 1, 4, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_018, NO_SOUND, 4, 30, 200, "\ ねむいので、ねています。\n\ おこすと おこります。\n\ \n\ -しずかに あるきましょう。")) +しずかに あるきましょう。") -DEFINE_DIALOG(DIALOG_019, 1, 2, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_019, NO_SOUND, 2, 30, 200, "\ ろうかは しずかに\n\ -あるきましょう。")) +あるきましょう。") -DEFINE_DIALOG(DIALOG_020, 1, 5, 95, 150, _("\ +DEFINE_DIALOG(DIALOG_020, NO_SOUND, 5, 95, 150, "\ おしろへ あそびに\n\ きてください。\n\ ケーキを つくって\n\ まってます。\n\ -     -ピーチより-")) +     -ピーチより-") -DEFINE_DIALOG(DIALOG_021, 1, 5, 95, 200, _("\ +DEFINE_DIALOG(DIALOG_021, SOUND_OBJ_BOWSER_INTRO_LAUGH, 5, 95, 200, "\ ようこそいらっしゃいませ\n\ ・・だれも いませんので\n\ とっとと\n\   おかえりください。\n\ -ガハハハッ!")) +ガハハハッ!") -DEFINE_DIALOG(DIALOG_022, 1, 3, 95, 200, _("\ -カギが かかっている・・")) +DEFINE_DIALOG(DIALOG_022, SOUND_OBJ_BOWSER_INTRO_LAUGH, 3, 95, 200, "\ +カギが かかっている・・") -DEFINE_DIALOG(DIALOG_023, 1, 3, 95, 200, _("\ +DEFINE_DIALOG(DIALOG_023, SOUND_OBJ_BOWSER_INTRO_LAUGH, 3, 95, 200, "\ ・・・カギがあわない!\n\ このカギは『ちか』への\n\ -カギのようだ。")) +カギのようだ。") -DEFINE_DIALOG(DIALOG_024, 1, 3, 95, 200, _("\ +DEFINE_DIALOG(DIALOG_024, SOUND_OBJ_BOWSER_INTRO_LAUGH, 3, 95, 200, "\ クッパがとじたこのドアを\n\ ひらくには、スターの\n\ パワーが ひつようです。\n\ どこかのへやの『え』の\n\ なかの モンスターから\n\ -とりもどしてきてください")) +とりもどしてきてください") -DEFINE_DIALOG(DIALOG_025, 1, 3, 95, 200, _("\ +DEFINE_DIALOG(DIALOG_025, SOUND_OBJ_BOWSER_INTRO_LAUGH, 3, 95, 200, "\ このドアを ひらくには\n\ スター3まいの パワーが\n\ ひつようです。\n\ -あと[%]まいの スターが\n\ -ひつようです。")) +あと%dまいの スターが\n\ +ひつようです。") -DEFINE_DIALOG(DIALOG_026, 1, 3, 95, 200, _("\ +DEFINE_DIALOG(DIALOG_026, SOUND_OBJ_BOWSER_INTRO_LAUGH, 3, 95, 200, "\ このドアを ひらくには\n\ スター8まいの パワーが\n\ ひつようです。\n\ -あと[%]まいの スターが\n\ -ひつようです。")) +あと%dまいの スターが\n\ +ひつようです。") -DEFINE_DIALOG(DIALOG_027, 1, 3, 95, 200, _("\ +DEFINE_DIALOG(DIALOG_027, SOUND_OBJ_BOWSER_INTRO_LAUGH, 3, 95, 200, "\ このドアを ひらくには\n\ スター30まいのパワーが\n\ ひつようです。\n\ スターがあと\n\ -[%]まいひつようです。")) +%dまいひつようです。") -DEFINE_DIALOG(DIALOG_028, 1, 3, 95, 200, _("\ +DEFINE_DIALOG(DIALOG_028, SOUND_OBJ_BOWSER_INTRO_LAUGH, 3, 95, 200, "\ このドアを ひらくには\n\ スター50まいのパワーが\n\ ひつようです。\n\ -あと[%]まいの スターが\n\ -ひつようです。")) +あと%dまいの スターが\n\ +ひつようです。") -DEFINE_DIALOG(DIALOG_029, 1, 4, 95, 200, _("\ +DEFINE_DIALOG(DIALOG_029, SOUND_OBJ_BOWSER_INTRO_LAUGH, 4, 95, 200, "\ はてしない かいだんの\n\ ドアを ひらくには\n\ スター70まいのパワーが\n\ ひつようです・・・・・\n\ -あと[%]まいの スターが\n\ +あと%dまいの スターが\n\ たりません・・・\n\ -ガハハッ!")) +ガハハッ!") -DEFINE_DIALOG(DIALOG_030, 1, 4, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_030, NO_SOUND, 4, 30, 200, "\ カメラマンのジュゲムです。\n\ ちょっと アドバイス!\n\ しずかにあるきたいときは\n\ @@ -326,17 +328,17 @@ DEFINE_DIALOG(DIALOG_030, 1, 4, 30, 200, _("\ できないところでは\n\ 『ブーッ!』といいます。\n\ よろしく!! \n\ -      -ジュゲム")) +      -ジュゲム") -DEFINE_DIALOG(DIALOG_031, 1, 3, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_031, NO_SOUND, 3, 30, 200, "\ またまた まけちゃったよ。\n\ こんどはスッゴい じしん\n\ あったんッスけどね・・・\n\ ほんと すごいッスね!\n\ このスターも\n\ -あげちゃいます!")) +あげちゃいます!") -DEFINE_DIALOG(DIALOG_032, 1, 4, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_032, NO_SOUND, 4, 30, 200, "\ はねぼうしの あるひとは\n\ 3かいれんぞくでジャンプ\n\ しよう。 おおぞらたかく\n\ @@ -344,9 +346,9 @@ DEFINE_DIALOG(DIALOG_032, 1, 4, 30, 200, _("\ たいほうでとぶと\n\ さらに たかくとべます。\n\ まわりをみるのはCボタン。\n\ -おりたいときはZボタン。")) +おりたいときはZボタン。") -DEFINE_DIALOG(DIALOG_033, 1, 4, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_033, NO_SOUND, 4, 30, 200, "\ ワープどかんを\n\ くぐりぬけ、\n\ ピーチの おしろに\n\ @@ -358,9 +360,9 @@ DEFINE_DIALOG(DIALOG_033, 1, 4, 30, 200, _("\ マリオを うごかすのは\n\ まんなかに ついてる\n\ 『3Dスティック』。\n\ -まずはおしろへ すすめ!")) +まずはおしろへ すすめ!") -DEFINE_DIALOG(DIALOG_034, 1, 5, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_034, NO_SOUND, 5, 30, 200, "\ こんにちは! \n\ ぼくたちカメラマンの\n\ ジュゲムブラザーズです。\n\ @@ -384,9 +386,9 @@ DEFINE_DIALOG(DIALOG_034, 1, 5, 30, 200, _("\ いじょう!! カメラマン\n\ ジュゲムブラザーズからの\n\ おしらせでした。\n\ -それじゃ、きをつけて!")) +それじゃ、きをつけて!") -DEFINE_DIALOG(DIALOG_035, 1, 4, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_035, NO_SOUND, 4, 30, 200, "\ きいろい4つの Cボタン。\n\ 『うえ』をおすと\n\ 3Dスティックで\n\ @@ -406,9 +408,9 @@ DEFINE_DIALOG(DIALOG_035, 1, 4, 30, 200, _("\ いまつかっている\n\ カメラを しりたいときは、\n\ がめん みぎしたの\n\ -アイコンを みてください。")) +アイコンを みてください。") -DEFINE_DIALOG(DIALOG_036, 1, 5, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_036, NO_SOUND, 5, 30, 200, "\  『てんぼうだい』\n\ Cボタンの うえをおすと、\n\ まわりを みわたせます。\n\ @@ -428,22 +430,22 @@ DEFINE_DIALOG(DIALOG_036, 1, 5, 30, 200, _("\ みぎしたのアイコンで\n\ たしかめよう。\n\ マリオとの きょりは\n\ -きいろやじるしを みよう。")) +きいろやじるしを みよう。") -DEFINE_DIALOG(DIALOG_037, 1, 3, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_037, SOUND_OBJ_BIG_PENGUIN_YELL, 3, 30, 200, "\ あたしの『かち』です。\n\ あなたの『まけ』です。\n\ ははははは!!!\n\ マリオさん、とーっても\n\ おしかったですね。\n\ -また あそびましょう!")) +また あそびましょう!") -DEFINE_DIALOG(DIALOG_038, 1, 3, 95, 200, _("\ +DEFINE_DIALOG(DIALOG_038, NO_SOUND, 3, 95, 200, "\ パワースターの ちからで\n\ つぎの せかいへのドアは\n\ -しずかにひらいた。")) +しずかにひらいた。") -DEFINE_DIALOG(DIALOG_039, 1, 5, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_039, NO_SOUND, 5, 30, 200, "\ -ボムとりで いりぐち-\n\   だれも はいるな!\n\ \n\ @@ -458,19 +460,19 @@ DEFINE_DIALOG(DIALOG_039, 1, 5, 30, 200, _("\ なまえを、ヒントにする\n\ ぐらいなら ゆるす。\n\ \n\ -おやまのうえのボムキング")) +おやまのうえのボムキング") -DEFINE_DIALOG(DIALOG_040, 1, 3, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_040, NO_SOUND, 3, 30, 200, "\ このさき キケン!\n\ -リフトのたにぞこ です。")) +リフトのたにぞこ です。") -DEFINE_DIALOG(DIALOG_041, 1, 4, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_041, SOUND_OBJ_KOOPA_TALK, 4, 30, 200, "\ オイラがかっちゃいました。\n\ ハッハッハッ\n\ たいしたことないッスね!\n\ -じゃ、またこんどね!")) +じゃ、またこんどね!") -DEFINE_DIALOG(DIALOG_042, 1, 5, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_042, NO_SOUND, 5, 30, 200, "\ この『はし』せまい。\n\ ゆっくりわたろう!\n\ ガケのカドにとびついたり\n\ @@ -483,17 +485,17 @@ DEFINE_DIALOG(DIALOG_042, 1, 5, 30, 200, _("\ たおしてください。\n\ ぶらさがって すぐに\n\ Aボタンをおすと\n\ -すばやく あがれます。")) +すばやく あがれます。") -DEFINE_DIALOG(DIALOG_043, 1, 4, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_043, NO_SOUND, 4, 30, 200, "\ ジャンプしてAボタンを\n\ おしっぱなしに すると\n\ ぶらさがれる ところが\n\ あります。\n\ 『とり』につかまるとき\n\ -と おなじです。")) +と おなじです。") -DEFINE_DIALOG(DIALOG_044, 1, 5, 95, 200, _("\ +DEFINE_DIALOG(DIALOG_044, NO_SOUND, 5, 95, 200, "\ だれだい!  せっかく\n\ いいきもちで ねてたのに。\n\ あー カラダがおもいなー\n\ @@ -508,9 +510,9 @@ DEFINE_DIALOG(DIALOG_044, 1, 5, 95, 200, _("\ おつれしまーす。\n\ かげを よーくみて\n\ Aボタンで つかまって\n\ -くださいねー!")) +くださいねー!") -DEFINE_DIALOG(DIALOG_045, 1, 5, 95, 200, _("\ +DEFINE_DIALOG(DIALOG_045, NO_SOUND, 5, 95, 200, "\ あーあ、つかれたー・・\n\ やーっぱり おもいなー。\n\ きょうは このあたりで!\n\ @@ -519,9 +521,9 @@ DEFINE_DIALOG(DIALOG_045, 1, 5, 95, 200, _("\ もうすこし とんだら\n\ ほんとに てをはなしてね\n\ \n\ -じゃあ、さよならー!")) +じゃあ、さよならー!") -DEFINE_DIALOG(DIALOG_046, 1, 5, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_046, NO_SOUND, 5, 30, 200, "\ ジャンプのワザ まとめて\n\ せいりしておきます。\n\ とてもだいじな3つのワザ。\n\ @@ -546,20 +548,20 @@ DEFINE_DIALOG(DIALOG_046, 1, 5, 30, 200, _("\ 『3だんとび』\n\ 『はばとび』\n\ 『カベキック』\n\ -     わかった?")) +     わかった?") -DEFINE_DIALOG(DIALOG_047, 1, 3, 95, 200, _("\ +DEFINE_DIALOG(DIALOG_047, SOUND_OBJ_BOBOMB_BUDDY_TALK, 3, 95, 200, "\ こんにちは!\n\ たいほうの じゅんびに\n\ -かかります!・・・・・")) +かかります!・・・・・") -DEFINE_DIALOG(DIALOG_048, 1, 4, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_048, NO_SOUND, 4, 30, 200, "\ ここは ツルツルすべる\n\ ゆきやまの ちょうじょう。\n\ まずはそこの\n\ -やまごやへ どうぞ。")) +やまごやへ どうぞ。") -DEFINE_DIALOG(DIALOG_049, 1, 5, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_049, NO_SOUND, 5, 30, 200, "\ ジャンプわざカベキックを\n\ おぼえていますか?\n\ たかいところへ あがる\n\ @@ -569,9 +571,9 @@ DEFINE_DIALOG(DIALOG_049, 1, 5, 30, 200, _("\ はねかえったほうに\n\ かそくする。\n\ よーく\n\ -れんしゅう しておこう!")) +れんしゅう しておこう!") -DEFINE_DIALOG(DIALOG_050, 1, 4, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_050, NO_SOUND, 4, 30, 200, "\ Zボタンで しゃがめます。\n\ 『さか』では すべれます。\n\ ジャンプの とちゅうなら\n\ @@ -583,9 +585,9 @@ DEFINE_DIALOG(DIALOG_050, 1, 4, 30, 200, _("\ はしりながら しゃがんで\n\ ジャンプで『はばとび』!\n\ しゃがんでから あるくと\n\ -・・・ひみつです。")) +・・・ひみつです。") -DEFINE_DIALOG(DIALOG_051, 1, 5, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_051, NO_SOUND, 5, 30, 200, "\ 『き』や『ぼう』には\n\ ジャンプで つかまれます。\n\ 『のぼる』『おりる』は\n\ @@ -600,9 +602,9 @@ DEFINE_DIALOG(DIALOG_051, 1, 5, 30, 200, _("\ スティックを うえにいれ、\n\ 『さかだち』ができる。\n\ むきをきめて せなかの\n\ -ほうこうに ジャンプだ!")) +ほうこうに ジャンプだ!") -DEFINE_DIALOG(DIALOG_052, 1, 4, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_052, NO_SOUND, 4, 30, 200, "\ Zボタンで しゃがめます。\n\ とまって しゃがんでから\n\ ジャンプすると、\n\ @@ -610,23 +612,23 @@ DEFINE_DIALOG(DIALOG_052, 1, 4, 30, 200, _("\ すばやくユーターンを\n\ しながら、ジャンプすると\n\ 『ちゅうがえり』!\n\ -どちらも たかくとべます。")) +どちらも たかくとべます。") -DEFINE_DIALOG(DIALOG_053, 1, 6, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_053, NO_SOUND, 6, 30, 200, "\ コインリングや かくれた\n\ シークレットポイントを\n\ とおると あかいすうじが\n\ でてきます。5こつづけて\n\ とおると ひみつのスター\n\ -が あらわれます。")) +が あらわれます。") -DEFINE_DIALOG(DIALOG_054, 1, 4, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_054, NO_SOUND, 4, 30, 200, "\ スライダーへようこそ!!\n\ さかを すべりはじめたら\n\ スティックまえで かそく、\n\ -うしろで げんそくできる。")) +うしろで げんそくできる。") -DEFINE_DIALOG(DIALOG_055, 1, 5, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_055, SOUND_OBJ_BIG_PENGUIN_YELL, 5, 30, 200, "\ あたし、このスライダーの\n\ せかいチャンピオン!!!\n\ からだ、デカイけど\n\ @@ -636,17 +638,17 @@ DEFINE_DIALOG(DIALOG_055, 1, 5, 30, 200, _("\ \n\  レディーーー・・・!\n\   ・・・ \n\ -   ゴー!! やめとく")) +   ゴー!! やめとく") -DEFINE_DIALOG(DIALOG_056, 1, 3, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_056, SOUND_OBJ_BIG_PENGUIN_YELL, 3, 30, 200, "\ ヒエーーーッ!!!\n\ セカイきろくだよ!\n\ スゴイよ!あなた!!\n\ きんメダルの かわりに\n\ コレ あげます!\n\ -いやーースゴイスゴイ!!")) +いやーースゴイスゴイ!!") -DEFINE_DIALOG(DIALOG_057, 1, 4, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_057, SOUND_OBJ_BIG_PENGUIN_YELL, 4, 30, 200, "\ どこかで うちのこどもを\n\ みかけません でしたか?\n\ ・・・わたしんち こども\n\ @@ -658,9 +660,9 @@ DEFINE_DIALOG(DIALOG_057, 1, 4, 30, 200, _("\ だいてやると\n\ とても いいこえで\n\ なくんですけどね・・・\n\ -ヤレヤレ・・・・・")) +ヤレヤレ・・・・・") -DEFINE_DIALOG(DIALOG_058, 1, 5, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_058, SOUND_OBJ_BIG_PENGUIN_YELL, 5, 30, 200, "\ ああーーっ!!たしかに\n\ うちの こどもです・・・\n\ 『こらっ! いつも\n\ @@ -670,16 +672,16 @@ DEFINE_DIALOG(DIALOG_058, 1, 5, 30, 200, _("\ いいひとです。 おれいに\n\ これを さしあげます。\n\ あったかくって とても\n\ -げんきに なりますよ。")) +げんきに なりますよ。") -DEFINE_DIALOG(DIALOG_059, 1, 5, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_059, SOUND_OBJ_BIG_PENGUIN_YELL, 5, 30, 200, "\ このこは うちのこじゃー\n\ ないようだなあ・・・\n\ かわいそうに・・・\n\ おやはいったい\n\ -なにをしてるんだろう・・")) +なにをしてるんだろう・・") -DEFINE_DIALOG(DIALOG_060, 1, 4, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_060, NO_SOUND, 4, 30, 200, "\ -みずにはいるちゅうい-\n\ \n\ もぐっていると しぬほど\n\ @@ -699,17 +701,17 @@ DEFINE_DIALOG(DIALOG_060, 1, 4, 30, 200, _("\ すいめんに いるときは\n\ ジャンプします。\n\  『じゅんびたいそう\n\ -    わすれずに!!』")) +    わすれずに!!』") -DEFINE_DIALOG(DIALOG_061, 1, 6, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_061, NO_SOUND, 6, 30, 200, "\ つめたいみず キケン!!\n\ およいでは いけません!\n\ この こおりのいけは\n\ とびあがるぐらい\n\ つめたいです!\n\ -        ペンギン")) +        ペンギン") -DEFINE_DIALOG(DIALOG_062, 1, 5, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_062, NO_SOUND, 5, 30, 200, "\ みどりの ブロックに\n\ かくされている\n\ ふしぎな ふしぎな\n\ @@ -719,18 +721,18 @@ DEFINE_DIALOG(DIALOG_062, 1, 5, 30, 200, _("\ てきのたまも はねかえす。\n\ いきを とめても\n\ へいきです。\n\ -こまったことにおよげない。")) +こまったことにおよげない。") -DEFINE_DIALOG(DIALOG_063, 1, 4, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_063, NO_SOUND, 4, 30, 200, "\ あおいブロックには\n\ 『とうめいぼうし』。\n\ メダマも ビックリ\n\ すがたをけせる。\n\ テレサも まっさお\n\ 『ひみつのカベ』を\n\ -とおりぬけるぞ。")) +とおりぬけるぞ。") -DEFINE_DIALOG(DIALOG_064, 1, 4, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_064, NO_SOUND, 4, 30, 200, "\ あかいブロックのなかの\n\ はねのぼうしを かぶると、\n\ 3かいジャンプで\n\ @@ -738,9 +740,9 @@ DEFINE_DIALOG(DIALOG_064, 1, 4, 30, 200, _("\ そうさはスティックで!\n\ てまえにひくと あがる。\n\ まえにたおすと さがる。\n\ -やめるときはZボタンで!")) +やめるときはZボタンで!") -DEFINE_DIALOG(DIALOG_065, 1, 5, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_065, NO_SOUND, 5, 30, 200, "\ およぎかた おしえます。\n\ \n\ みずにはいるとおよげます。\n\ @@ -760,9 +762,9 @@ DEFINE_DIALOG(DIALOG_065, 1, 5, 30, 200, _("\ していても、およげます。\n\ らくちんです。\n\ およいでいるあいだは\n\ -ドアを あけられません。")) +ドアを あけられません。") -DEFINE_DIALOG(DIALOG_066, 1, 5, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_066, NO_SOUND, 5, 30, 200, "\ マリオ!  クッパのはく\n\ ほのおに きをつけて!\n\ クッパを こらしめるには\n\ @@ -781,9 +783,9 @@ DEFINE_DIALOG(DIALOG_066, 1, 5, 30, 200, _("\ ねらいを\n\ よーくさだめて・・・\n\ \n\ -もういちどBボタンよ!")) +もういちどBボタンよ!") -DEFINE_DIALOG(DIALOG_067, 1, 4, 30, 200, _("\ +DEFINE_DIALOG(SOUND_OBJ_BOWSER_LAUGH, 1, 4, 30, 200, "\ ざんねんだったなマリオ!\n\ ここには ピーチちゃんは\n\ いませんでした。\n\ @@ -795,9 +797,9 @@ DEFINE_DIALOG(DIALOG_067, 1, 4, 30, 200, _("\ スティックでグリグリ\n\ まわして なげるなど\n\ できるわけが ない!!\n\ -  ガハハッ!!")) +  ガハハッ!!") -DEFINE_DIALOG(DIALOG_068, 1, 5, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_068, NO_SOUND, 5, 30, 200, "\ ここは しゃくねつの\n\ ファイアバブル ランド!\n\ からだに ひがついても\n\ @@ -807,9 +809,9 @@ DEFINE_DIALOG(DIALOG_068, 1, 5, 30, 200, _("\ はねあがる!  そうさは\n\ できるので、おちついて。\n\ あまりうごきまわらないで\n\ -ガンバレ!")) +ガンバレ!") -DEFINE_DIALOG(DIALOG_069, 1, 3, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_069, NO_SOUND, 3, 30, 200, "\ 『え』のなかのカイブツの\n\ せかいには、せかいの\n\ はてがあります。\n\ @@ -818,9 +820,9 @@ DEFINE_DIALOG(DIALOG_069, 1, 3, 30, 200, _("\ 『え』のせかいのはてです。\n\ そらを とんでいるときも\n\ そこから さきには\n\ -すすめません。")) +すすめません。") -DEFINE_DIALOG(DIALOG_070, 1, 5, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_070, NO_SOUND, 5, 30, 200, "\ かいぶつたちの すんでる\n\ 『え』のなかのせかいから、\n\ おしろの いりぐちの\n\ @@ -840,9 +842,9 @@ DEFINE_DIALOG(DIALOG_070, 1, 5, 30, 200, _("\ つぎのスターのヒントが\n\ スタートがめんに でます。\n\ えらんだヒントいがいの\n\ -スターをとってもOKです。")) +スターをとってもOKです。") -DEFINE_DIALOG(DIALOG_071, 1, 4, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_071, NO_SOUND, 4, 30, 200, "\  -このさきキケン-\n\   あやしいケムリに\n\   ちゅうい!\n\ @@ -850,23 +852,23 @@ DEFINE_DIALOG(DIALOG_071, 1, 4, 30, 200, _("\ くるしくなったら\n\ たかいところへ!\n\ まる・・・・・ひなんじょ\n\ -やじるし・・・でいりぐち")) +やじるし・・・でいりぐち") -DEFINE_DIALOG(DIALOG_072, 1, 5, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_072, NO_SOUND, 5, 30, 200, "\ カゼつよし!  ぼうしは\n\ しっかり かぶりましょう。\n\ もし ぼうしをなくしても\n\ ここでなくした ぼうしは\n\ -このやまで みつかります。")) +このやまで みつかります。") -DEFINE_DIALOG(DIALOG_073, 1, 5, 95, 200, _("\ +DEFINE_DIALOG(DIALOG_073, NO_SOUND, 5, 95, 200, "\ ただしい じゅんばんで\n\ はこを ひらくこと。\n\ こたえは だれにも\n\ おしえてやらない。\n\ -   --せんちょう--")) +   --せんちょう--") -DEFINE_DIALOG(DIALOG_074, 1, 5, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_074, NO_SOUND, 5, 30, 200, "\ ガケのカドに とびつくと\n\ ぶらさがれます。\n\ おりるときはスティックを\n\ @@ -876,9 +878,9 @@ DEFINE_DIALOG(DIALOG_074, 1, 5, 30, 200, _("\ まえに たおしてください。\n\ ぶらさがって\n\ すぐに Aボタンをおすと\n\ -すばやく のぼれます!")) +すばやく のぼれます!") -DEFINE_DIALOG(DIALOG_075, 1, 5, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_075, NO_SOUND, 5, 30, 200, "\ マリオ!!たいへんです。\n\ クッパがまた・・・・\n\ おしろの パワースターを\n\ @@ -898,9 +900,9 @@ DEFINE_DIALOG(DIALOG_075, 1, 5, 30, 200, _("\ かくしつうろの ひとつよ。\n\ そこには おしろの\n\ かくれスターが あるわ!\n\ -きっと やくにたつはずよ。")) +きっと やくにたつはずよ。") -DEFINE_DIALOG(DIALOG_076, 1, 5, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_076, NO_SOUND, 5, 30, 200, "\ パワースターのおかげで\n\ おしろに、げんきが\n\ もどってきました。\n\ @@ -915,14 +917,14 @@ DEFINE_DIALOG(DIALOG_076, 1, 5, 30, 200, _("\ 『え』にとびこむ たかさ\n\ によって、まちをすっかり\n\ みずびたしに できます。\n\ -アッ、これ みつけました。")) +アッ、これ みつけました。") -DEFINE_DIALOG(DIALOG_077, 1, 3, 150, 200, _("\ +DEFINE_DIALOG(DIALOG_077, NO_SOUND, 3, 150, 200, "\ とびらを ひらくまえに\n\ 2つの はしらを\n\ -おしさげて おくこと。")) +おしさげて おくこと。") -DEFINE_DIALOG(DIALOG_078, 1, 5, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_078, NO_SOUND, 5, 30, 200, "\ あおコインのブロックを\n\ ジャンプちゅうにZボタン\n\ 『ヒップドロップ』で\n\ @@ -932,9 +934,9 @@ DEFINE_DIALOG(DIALOG_078, 1, 5, 30, 200, _("\ きいろコイン5まいぶん\n\ とてもラッキー!\n\ でも じかんがたつと\n\ -きえてしまう・・ザンネン")) +きえてしまう・・ザンネン") -DEFINE_DIALOG(DIALOG_079, 1, 5, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_079, SOUND_OBJ_UKIKI_CHATTER_LONG, 5, 30, 200, "\ いててて!\n\ はなしてくれよ。\n\ ウッキッキー!\n\ @@ -944,20 +946,20 @@ DEFINE_DIALOG(DIALOG_079, 1, 5, 30, 200, _("\ いいもの あげるからさ。\n\ ネーネー はなしてくれよ。\n\ \n\ -   はなす  いやだ")) +   はなす  いやだ") -DEFINE_DIALOG(DIALOG_080, 1, 3, 30, 200, _("\ -ヘッヘッヘッ!")) +DEFINE_DIALOG(DIALOG_080, SOUND_OBJ_UKIKI_CHATTER_LONG, 3, 30, 200, "\ +ヘッヘッヘッ!") -DEFINE_DIALOG(DIALOG_081, 1, 6, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_081, NO_SOUND, 6, 30, 200, "\ ここは みずにみちたまち。\n\ このまちは、あなたが\n\ ここを おとずれるときの\n\ たかさと、おなじだけの\n\ みずをもって\n\ -あなたをむかえる。")) +あなたをむかえる。") -DEFINE_DIALOG(DIALOG_082, 1, 5, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_082, NO_SOUND, 5, 30, 200, "\ ぼうしを なくすと\n\ ダメージがおおくなるので\n\ だいじに してください。\n\ @@ -972,9 +974,9 @@ DEFINE_DIALOG(DIALOG_082, 1, 5, 30, 200, _("\ モンスターの せかいが\n\ あります。  あっ!これ\n\ もっていって ください。\n\ -かくして もってました。")) +かくして もってました。") -DEFINE_DIALOG(DIALOG_083, 1, 4, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_083, NO_SOUND, 4, 30, 200, "\ とけいがとても へんです。\n\ とけいに はいるとき、\n\ ながいはりの ばしょに\n\ @@ -982,9 +984,9 @@ DEFINE_DIALOG(DIALOG_083, 1, 4, 30, 200, _("\ これ、とりもどしました。\n\ もっていって ください。\n\ かっこよく\n\ -うけとってくださいね!")) +うけとってくださいね!") -DEFINE_DIALOG(DIALOG_084, 1, 5, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_084, NO_SOUND, 5, 30, 200, "\ イテテ らんぼうなひとだ。\n\ このスターは クッパって\n\ ヤツが くれたんだよ。\n\ @@ -994,33 +996,33 @@ DEFINE_DIALOG(DIALOG_084, 1, 5, 30, 200, _("\ かえせば いいんでしょ。\n\ はなしてくれたら\n\ スターぐらい かえすから。\n\ -ホイ!!")) +ホイ!!") -DEFINE_DIALOG(DIALOG_085, 1, 4, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_085, SOUND_OBJ_BOO_LAUGH_LONG, 4, 30, 200, "\ この やかたから\n\   ぶじにでられたら\n\ \n\ -・・・エライ。・・")) +・・・エライ。・・") -DEFINE_DIALOG(DIALOG_086, 1, 3, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_086, NO_SOUND, 3, 30, 200, "\ まわりをクルクルまわると\n\ -めをまわす ヤツがいます。")) +めをまわす ヤツがいます。") -DEFINE_DIALOG(DIALOG_087, 1, 5, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_087, NO_SOUND, 5, 30, 200, "\ えんとつから はいるのは\n\ サンタだけではありません。\n\   ごえんりょなく\n\   おはいりください。\n\ -スノーマンハウスおーなー")) +スノーマンハウスおーなー") -DEFINE_DIALOG(DIALOG_088, 1, 5, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_088, NO_SOUND, 5, 30, 200, "\ -さぎょうリフトじょう-\n\ \n\ ここから おりるひとは\n\ ひだりのぼうにつかまって、\n\ -きをつけて おりること。")) +きをつけて おりること。") -DEFINE_DIALOG(DIALOG_089, 1, 4, 95, 200, _("\ +DEFINE_DIALOG(DIALOG_089, NO_SOUND, 4, 95, 200, "\ どちらのみちも キケン!\n\ くらいあしもとにチュウイ。\n\ はばとび できないひとは\n\ @@ -1032,22 +1034,22 @@ DEFINE_DIALOG(DIALOG_089, 1, 4, 95, 200, _("\ あかまる\n\  ・・2ごうエレベーター\n\       ちていこ へ\n\ -やじるし・・げんざいち")) +やじるし・・げんざいち") -DEFINE_DIALOG(DIALOG_090, 1, 6, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_090, SOUND_OBJ_BOWSER_LAUGH, 6, 30, 200, "\ ガハハッ!\n\ ワナにはまったなマリオ!\n\ また ジャマをしにきた\n\ ようだが、ともだちからの\n\ ちゅうこくだ。\n\ -あしもとには きをつけな。")) +あしもとには きをつけな。") -DEFINE_DIALOG(DIALOG_091, 1, 3, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_091, NO_SOUND, 3, 30, 200, "\ つよいカゼに チュウイ!\n\ でも、カゼにのると\n\ -フワフワきもちいいです。")) +フワフワきもちいいです。") -DEFINE_DIALOG(DIALOG_092, 1, 3, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_092, SOUND_OBJ_BOWSER_LAUGH, 3, 30, 200, "\ いいかげんにしろマリオ!\n\ いつもいつも、わがはいの\n\ ジャマをしおって!\n\ @@ -1056,9 +1058,9 @@ DEFINE_DIALOG(DIALOG_092, 1, 3, 30, 200, _("\ スターをかえすんだ!\n\ カベのなかのヤツらには、\n\ そいつが いるんだよ!!\n\ -ガハハッ!!")) +ガハハッ!!") -DEFINE_DIALOG(DIALOG_093, 1, 4, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_093, SOUND_OBJ_BOWSER_LAUGH, 4, 30, 200, "\ アララ!いつのまにきた?\n\ ・・・・・・ムム\n\ どちらにしろ わがはいの\n\ @@ -1070,30 +1072,28 @@ DEFINE_DIALOG(DIALOG_093, 1, 4, 30, 200, _("\ キサマの おともだちも\n\ みーんな カベのなかさ。\n\ ピーチちゃんも わたさん\n\ -もんね!  いくぞ!!")) +もんね!  いくぞ!!") -DEFINE_DIALOG(DIALOG_094, 1, 3, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_094, NO_SOUND, 3, 30, 200, "\ のぼりにくい さかみちは\n\ じょそうをつけて\n\ げんきよく のぼる!\n\ はばとび おぼえてるか?\n\ はしりながら Zボタンで\n\ -しゃがんで ジャンプだ!")) +しゃがんで ジャンプだ!") -#define HOW_TO_READ_SIGNS_2 "AかBボタンをおし" - -DEFINE_DIALOG(DIALOG_095, 1, 3, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_095, NO_SOUND, 3, 30, 200, "\ このように カンバンの\n\ -まえで" HOW_TO_READ_SIGNS_2 "\n\ +まえでAかBボタンをおし\n\ よむことができます。\n\ ノコノコや どうぶつたち\n\ と はなすときは、まえに\n\ たちどまってください。\n\ このコースにあるクッパに\n\ ぬすまれたパワースターを\n\ -とりかえしてください。")) +とりかえしてください。") -DEFINE_DIALOG(DIALOG_096, 1, 5, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_096, NO_SOUND, 5, 30, 200, "\ このあたり みちせまし。\n\ ゆっくり あるこう!\n\ だれも ちょうじょうまで\n\ @@ -1103,40 +1103,40 @@ DEFINE_DIALOG(DIALOG_096, 1, 5, 30, 200, _("\ おこすと、とっても\n\ ふきげんに なります。\n\ ゆっくりと しずかに\n\ -あるきましょう。フフフ。")) +あるきましょう。フフフ。") -DEFINE_DIALOG(DIALOG_097, 1, 4, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_097, NO_SOUND, 4, 30, 200, "\ たいあたり されたら\n\ たいあたりで かえせ!\n\ ほのおのうみにつきおとす\n\ -1たい1のデスマッチだ!")) +1たい1のデスマッチだ!") -DEFINE_DIALOG(DIALOG_098, 1, 3, 95, 200, _("\ +DEFINE_DIALOG(DIALOG_098, SOUND_OBJ_BOO_LAUGH_LONG, 3, 95, 200, "\ ここまでおいで・・・・\n\ -ケッケッケ・・")) +ケッケッケ・・") -DEFINE_DIALOG(DIALOG_099, 1, 3, 95, 200, _("\ +DEFINE_DIALOG(DIALOG_099, SOUND_OBJ_BOO_LAUGH_LONG, 3, 95, 200, "\ クックック・・\n\  とりついてやる。\n\     ヒッヒッヒ!\n\ カベも とおりぬけてやる。\n\ こんなこと できるか?\n\ -     ケッケッケ!")) +     ケッケッケ!") -DEFINE_DIALOG(DIALOG_100, 1, 4, 95, 200, _("\ +DEFINE_DIALOG(DIALOG_100, SOUND_OBJ_UKIKI_CHATTER_LONG, 4, 95, 200, "\ ウッキッキー\n\  ワッキッキー!\n\    ホヨホヨ。\n\ -いっただきー。")) +いっただきー。") -DEFINE_DIALOG(DIALOG_101, 1, 5, 95, 200, _("\ +DEFINE_DIALOG(DIALOG_101, SOUND_OBJ_UKIKI_CHATTER_LONG, 5, 95, 200, "\ ヘッヘッヘッ!\n\ つかまっちゃいました。\n\ きにいってたのになあ・・\n\ かえしますよ。\n\ - ウッキッキー!!")) + ウッキッキー!!") -DEFINE_DIALOG(DIALOG_102, 1, 4, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_102, NO_SOUND, 4, 30, 200, "\ テレサの たおしかた\n\ おしえます。\n\ はずかしがりやの\n\ @@ -1148,23 +1148,23 @@ DEFINE_DIALOG(DIALOG_102, 1, 4, 30, 200, _("\ 『せなかをむける』と\n\ あらわれます。\n\ うしろにまわって\n\ -なぐると よわい。")) +なぐると よわい。") -DEFINE_DIALOG(DIALOG_103, 1, 4, 95, 200, _("\ +DEFINE_DIALOG(DIALOG_103, NO_SOUND, 4, 95, 200, "\ 4ほんの はしらのうえに\n\ たつものに、わたしは、\n\ このやかたを おとずれる\n\ -しかくを あたえよう。")) +しかくを あたえよう。") -DEFINE_DIALOG(DIALOG_104, 1, 6, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_104, NO_SOUND, 6, 30, 200, "\ めのまえのブルーグレーの\n\ はんとうめいの ほしは\n\ 『パワースターのだい』だ。\n\ あかコインを みつけて\n\ 8まいぜんぶ あつめると、\n\ -スターが あらわれる。")) +スターが あらわれる。") -DEFINE_DIALOG(DIALOG_105, 1, 3, 95, 200, _("\ +DEFINE_DIALOG(DIALOG_105, SOUND_OBJ_BOBOMB_BUDDY_TALK, 3, 95, 200, "\ じゅんび かんりょう!\n\ そこの あなに\n\ はいってみてください。\n\ @@ -1173,30 +1173,30 @@ DEFINE_DIALOG(DIALOG_105, 1, 3, 95, 200, _("\ とれるはずです。\n\ スティックでねらいをつけ、\n\ Aではっしゃ!とびながら\n\ -『き』にも つかまれます。")) +『き』にも つかまれます。") -DEFINE_DIALOG(DIALOG_106, 1, 3, 95, 200, _("\ +DEFINE_DIALOG(DIALOG_106, SOUND_OBJ_BOBOMB_BUDDY_TALK, 3, 95, 200, "\ じゅんびが\n\ かんりょう しました!\n\ -それでは、おきをつけて!")) +それでは、おきをつけて!") -DEFINE_DIALOG(DIALOG_107, 1, 3, 95, 200, _("\ +DEFINE_DIALOG(DIALOG_107, SOUND_OBJ_BOO_LAUGH_LONG, 3, 95, 200, "\ おばけは し な な い\n\ ケッケッケ・・\n\ -ぶじに でられるかな?")) +ぶじに でられるかな?") -DEFINE_DIALOG(DIALOG_108, 1, 3, 95, 200, _("\ +DEFINE_DIALOG(DIALOG_108, SOUND_OBJ_BOO_LAUGH_LONG, 3, 95, 200, "\ ぼよよーん\n\ おやかたの おでましだ。\n\ -カッカッカ・・")) +カッカッカ・・") -DEFINE_DIALOG(DIALOG_109, 1, 4, 95, 200, _("\ +DEFINE_DIALOG(DIALOG_109, NO_SOUND, 4, 95, 200, "\ カラダが とけちゃったヨ。\n\ いいカラダ いないかなー\n\ なにか おちつかなくてネ。\n\ -アー かおがつめたいなー")) +アー かおがつめたいなー") -DEFINE_DIALOG(DIALOG_110, 1, 3, 95, 200, _("\ +DEFINE_DIALOG(DIALOG_110, NO_SOUND, 3, 95, 200, "\ しょうらい きっと\n\ りっぱなカラダになろうと\n\ おもってまーす!\n\ @@ -1205,17 +1205,17 @@ DEFINE_DIALOG(DIALOG_110, 1, 3, 95, 200, _("\ つれてってくれませんか?\n\ まえを すべってくれれば\n\ うしろをついていきまーす。\n\ - ヨロシクー!")) + ヨロシクー!") -DEFINE_DIALOG(DIALOG_111, 1, 3, 95, 200, _("\ +DEFINE_DIALOG(DIALOG_111, NO_SOUND, 3, 95, 200, "\ ヤッリー!\n\ きぶんスッキリ!りっぱな\n\ カラダが みつかった!\n\ おれいに これあげます!\n\ もっていって ください。\n\ -とってもアッタカイですよ。")) +とってもアッタカイですよ。") -DEFINE_DIALOG(DIALOG_112, 1, 4, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_112, NO_SOUND, 4, 30, 200, "\ コインいっぱいあつめよう。\n\ ちからが かいふくする。\n\ えのなかの15コースでは\n\ @@ -1223,17 +1223,17 @@ DEFINE_DIALOG(DIALOG_112, 1, 4, 30, 200, _("\ あかいハートにさわっても\n\ ちからが かいふくする。\n\ はやく かけぬけるほど\n\ -たくさん かいふくする!")) +たくさん かいふくする!") -DEFINE_DIALOG(DIALOG_113, 1, 6, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_113, NO_SOUND, 6, 30, 200, "\ あか・あお・みどりの\n\ ブロックには アイテムの\n\ 『ぼうし』が はいってる。\n\ おしろの どこかにある\n\ スイッチを ふんでくると\n\ -つかえるように なります。")) +つかえるように なります。") -DEFINE_DIALOG(DIALOG_114, 1, 4, 95, 200, _("\ +DEFINE_DIALOG(DIALOG_114, SOUND_OBJ2_BOSS_DIALOG_GRUNT, 4, 95, 200, "\ ああ~ きにいらねえ!\n\ おれたち、いしのおかげで\n\ 『いえ』も『しろ』も\n\ @@ -1249,9 +1249,9 @@ DEFINE_DIALOG(DIALOG_114, 1, 4, 95, 200, _("\ もんくが あんなら\n\ ヒップドロップで この\n\ バッタンキングさまを\n\ -ふみつけて みやがれっ!")) +ふみつけて みやがれっ!") -DEFINE_DIALOG(DIALOG_115, 1, 5, 95, 200, _("\ +DEFINE_DIALOG(DIALOG_115, SOUND_OBJ2_BOSS_DIALOG_GRUNT, 5, 95, 200, "\ ああ くやしいぞ!\n\ またまた\n\ ふみつけられちまった!\n\ @@ -1259,9 +1259,9 @@ DEFINE_DIALOG(DIALOG_115, 1, 5, 95, 200, _("\     いしなのか・・・\n\ おめぇの かちでぇ!\n\ これ もっていきやがれ!\n\ -ガクッ!")) +ガクッ!") -DEFINE_DIALOG(DIALOG_116, 1, 5, 95, 200, _("\ +DEFINE_DIALOG(DIALOG_116, SOUND_OBJ2_BOSS_DIALOG_GRUNT, 5, 95, 200, "\ おおっ!いてて! まわり\n\ こみのはやさは まだまだ\n\ だが、なかなか つよいな。\n\ @@ -1271,24 +1271,24 @@ DEFINE_DIALOG(DIALOG_116, 1, 5, 95, 200, _("\ パワースターをやろう。\n\ また ワシにあいたいとき\n\ このスターをメニューから\n\ -えらぶがよい。さらばじゃ")) +えらぶがよい。さらばじゃ") -DEFINE_DIALOG(DIALOG_117, 1, 3, 95, 200, _("\ +DEFINE_DIALOG(DIALOG_117, SOUND_OBJ2_BOSS_DIALOG_GRUNT, 3, 95, 200, "\ ジャジャジャーン!\n\ どうだ!\n\ おどろいたか??・・・\n\ ムム・・・・ ならば\n\ もっとオドロカセテやる!\n\ -イクゾ! カカッテコイ!")) +イクゾ! カカッテコイ!") -DEFINE_DIALOG(DIALOG_118, 1, 5, 95, 200, _("\ +DEFINE_DIALOG(DIALOG_118, SOUND_OBJ2_BOSS_DIALOG_GRUNT, 5, 95, 200, "\ オオオッ・・・\n\ オマエ、いがいとツヨイ!\n\ このヤカタは、きょうから\n\ オマエのものダッ・・\n\ -ジユウニつかエ。ガクッ!")) +ジユウニつかエ。ガクッ!") -DEFINE_DIALOG(DIALOG_119, 1, 4, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_119, NO_SOUND, 4, 30, 200, "\ グウウッ!  ちょっと\n\ ゆだん しておったわ!\n\ せっかくのケイカクが\n\ @@ -1300,9 +1300,9 @@ DEFINE_DIALOG(DIALOG_119, 1, 4, 30, 200, _("\ これいじょうスターは\n\ わたさんぞ。きょうはここ\n\ らで かんべんしてやる!\n\ -おおぉ、おぼえてろよ!!")) +おおぉ、おぼえてろよ!!") -DEFINE_DIALOG(DIALOG_120, 1, 4, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_120, NO_SOUND, 4, 30, 200, "\ グググッワッ!\n\ こうも かんたんに\n\ やられるとは、スターの\n\ @@ -1314,9 +1314,9 @@ DEFINE_DIALOG(DIALOG_120, 1, 4, 30, 200, _("\ ピーチに あいたければ、\n\ とうのてっぺんまで\n\ のぼってきてみろ。\n\ -まってるぞ!ガハハッ!!")) +まってるぞ!ガハハッ!!") -DEFINE_DIALOG(DIALOG_121, 1, 5, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_121, NO_SOUND, 5, 30, 200, "\ あああっ・・またこんども\n\ キサマのかちか マリオ!\n\ キサマはな、わがはいが\n\ @@ -1336,22 +1336,22 @@ DEFINE_DIALOG(DIALOG_121, 1, 5, 30, 200, _("\ なかよくエンディングでも\n\ みるんだな!\n\ \n\ -ガハハハッ!")) +ガハハハッ!") -DEFINE_DIALOG(DIALOG_122, 1, 6, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_122, NO_SOUND, 6, 30, 200, "\ -やみにとけるおおあな-\n\ \n\ みぎ・・・さぎょうリフト\n\      ケムリめいろ\n\ -ひだり・・ちていこ")) +ひだり・・ちていこ") -DEFINE_DIALOG(DIALOG_123, 1, 5, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_123, NO_SOUND, 5, 30, 200, "\  -メタルのどうくつ-\n\ \n\ みぎ・・・ちじょうへ\n\ -ひだり・・メタルスイッチ")) +ひだり・・メタルスイッチ") -DEFINE_DIALOG(DIALOG_124, 1, 5, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_124, NO_SOUND, 5, 30, 200, "\ -さぎょうようリフト-\n\ \n\    キケン!!\n\ @@ -1361,22 +1361,22 @@ DEFINE_DIALOG(DIALOG_124, 1, 5, 30, 200, _("\ すすみつづけます。\n\ \n\ おりると もとのばしょに\n\ -もどります。")) +もどります。") -DEFINE_DIALOG(DIALOG_125, 1, 5, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_125, NO_SOUND, 5, 30, 200, "\ -ケムリめいろ・でぐち-\n\ \n\ キケン! ヘイサちゅう。\n\ -ここからは はいれません。")) +ここからは はいれません。") -DEFINE_DIALOG(DIALOG_126, 1, 6, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_126, NO_SOUND, 6, 30, 200, "\ ・1ごうエレベーター・\n\ \n\ うえ・・やみのおおあな\n\ みぎ・・さぎょうリフト\n\ -    ケムリめいろ")) +    ケムリめいろ") -DEFINE_DIALOG(DIALOG_127, 1, 5, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_127, NO_SOUND, 5, 30, 200, "\   -ちていこ-\n\ \n\ みぎ・・メタルのどうくつ\n\ @@ -1386,15 +1386,15 @@ DEFINE_DIALOG(DIALOG_127, 1, 5, 30, 200, _("\ ドッシーが すんでます\n\ せなかでヒップドロップを\n\ すると、あたまをさげます。\n\ -エサにならないでください。")) +エサにならないでください。") -DEFINE_DIALOG(DIALOG_128, 1, 4, 95, 200, _("\ +DEFINE_DIALOG(DIALOG_128, SOUND_OBJ_KING_BOBOMB_TALK, 4, 95, 200, "\ おっとっと!じょうがいに\n\ なげるのは はんそくだ!\n\ リングのうえでフェアーに\n\ -たたかおうでは ないか!")) +たたかおうでは ないか!") -DEFINE_DIALOG(DIALOG_129, 1, 5, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_129, NO_SOUND, 5, 30, 200, "\ とうめいスイッチの\n\   コースへ ようこそ!\n\ あおいスイッチを ふむと\n\ @@ -1404,9 +1404,9 @@ DEFINE_DIALOG(DIALOG_129, 1, 5, 30, 200, _("\ とうめいに なると\n\ いろんな ものを\n\ とおりぬけられます。\n\ -まずは おためしください。")) +まずは おためしください。") -DEFINE_DIALOG(DIALOG_130, 1, 5, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_130, NO_SOUND, 5, 30, 200, "\ メタルのスイッチの\n\   コースヘ ようこそ!\n\ みどりのスイッチを\n\ @@ -1416,9 +1416,9 @@ DEFINE_DIALOG(DIALOG_130, 1, 5, 30, 200, _("\ メタルになれば、\n\ みずのなかでも\n\ あるけてしまう。\n\ -まずは おためしください。")) +まずは おためしください。") -DEFINE_DIALOG(DIALOG_131, 1, 5, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_131, NO_SOUND, 5, 30, 200, "\ はねのスイッチの\n\   コースヘ ようこそ!\n\ にじのリングのまんなかの\n\ @@ -1433,16 +1433,16 @@ DEFINE_DIALOG(DIALOG_131, 1, 5, 30, 200, _("\ そうじゅうかん のように\n\ まえにたおすと『さがる』\n\ てまえにひくと『あがる』\n\ -まずは おためしを!")) +まずは おためしを!") -DEFINE_DIALOG(DIALOG_132, 1, 5, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_132, SOUND_OBJ_BIG_PENGUIN_YELL, 5, 30, 200, "\ ダメダメ!\n\ それは きていいはんです。\n\ 『しっかーく!』\n\ こんどはフェアーに\n\ -いきましょう。")) +いきましょう。") -DEFINE_DIALOG(DIALOG_133, 1, 5, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_133, NO_SOUND, 5, 30, 200, "\ ああよかった。\n\ きてくれたんですね!\n\ ピーチひめも ぼくたちも\n\ @@ -1467,9 +1467,9 @@ DEFINE_DIALOG(DIALOG_133, 1, 5, 30, 200, _("\ おおきな ほしのドアを\n\ ひらくことが できます。\n\ きっと ピーチひめは\n\ -そのなかです!")) +そのなかです!") -DEFINE_DIALOG(DIALOG_134, 1, 4, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_134, NO_SOUND, 4, 30, 200, "\ コースのはじめにえらべる\n\ スターのなまえは、\n\ つぎに みつけられそうな\n\ @@ -1485,9 +1485,9 @@ DEFINE_DIALOG(DIALOG_134, 1, 4, 30, 200, _("\ いくつか とりかえしたら\n\ つぎのコースのドアへと\n\ すすんでください。みんな\n\ -たすけを まっています!")) +たすけを まっています!") -DEFINE_DIALOG(DIALOG_135, 1, 5, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_135, NO_SOUND, 5, 30, 200, "\ クッパがスターをもって\n\ いっちゃいました。\n\ ここにかくれてみてました。\n\ @@ -1502,9 +1502,9 @@ DEFINE_DIALOG(DIALOG_135, 1, 5, 30, 200, _("\ なまえが みられます。\n\ むかしのてきに あいたい\n\ とき、そのほしをえらぶと\n\ -またあえる てきもいます。")) +またあえる てきもいます。") -DEFINE_DIALOG(DIALOG_136, 1, 4, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_136, NO_SOUND, 4, 30, 200, "\ ワァすごい!もうそんなに\n\ スターをもってるんですね。\n\ もうすぐ ぼくらのことも\n\ @@ -1520,9 +1520,9 @@ DEFINE_DIALOG(DIALOG_136, 1, 4, 30, 200, _("\ たかいところからおちても\n\ ちじょうの ちかくで\n\ 『ヒップドロップ』すると\n\ -ダメージを ふせげます。")) +ダメージを ふせげます。") -DEFINE_DIALOG(DIALOG_137, 1, 5, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_137, NO_SOUND, 5, 30, 200, "\ パワースターが もどって、\n\ おしろのちからが\n\ かいふく してきました!\n\ @@ -1532,32 +1532,32 @@ DEFINE_DIALOG(DIALOG_137, 1, 5, 30, 200, _("\ ますか?15のコースでは\n\ コイン100まい とると\n\ スペシャルスターが\n\ -あらわれます。")) +あらわれます。") -DEFINE_DIALOG(DIALOG_138, 1, 5, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_138, NO_SOUND, 5, 30, 200, "\ ・2ごうエレベーター・\n\ した・・ちていこ\n\ ひだり・・やみのおおあな\n\ みぎ・・・ケムリめいろ\n\ -     へいさちゅう!")) +     へいさちゅう!") -DEFINE_DIALOG(DIALOG_139, 1, 6, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_139, NO_SOUND, 6, 30, 200, "\ このうえ・・じどうリフト\n\ じどうリフトは のると\n\ じどうてきに うごきだし、\n\ コースにそってすすみます。\n\ おりて ほうっておくと\n\ -きえてしまいます。")) +きえてしまいます。") -DEFINE_DIALOG(DIALOG_140, 1, 6, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_140, NO_SOUND, 6, 30, 200, "\ -そうさリフトじょう-\n\ みぎ・・・ケムリめいろ\n\      いりぐち\n\ ひだり・・やみのおおあな\n\   1ごうエレベーターへ\n\ -やじるし・・げんざいち")) +やじるし・・げんざいち") -DEFINE_DIALOG(DIALOG_141, 1, 5, 150, 200, _("\ +DEFINE_DIALOG(DIALOG_141, NO_SOUND, 5, 150, 200, "\ ぬすまれたパワースターを\n\ とりかえした!\n\ クッパが とじてしまった\n\ @@ -1571,9 +1571,9 @@ DEFINE_DIALOG(DIALOG_141, 1, 5, 150, 200, _("\ モンスターたちはどんどん\n\ ちからを つけてきている。\n\ いそげ マリオ!!\n\ -おしろの いちだいじだ!")) +おしろの いちだいじだ!") -DEFINE_DIALOG(DIALOG_142, 1, 5, 150, 200, _("\ +DEFINE_DIALOG(DIALOG_142, NO_SOUND, 5, 150, 200, "\ 3このスターを\n\ とりもどしたぞ! \n\ そして スターに『3』の\n\ @@ -1583,17 +1583,17 @@ DEFINE_DIALOG(DIALOG_142, 1, 5, 150, 200, _("\ じゆうに いききできる。\n\ あたらしいカイブツたちは\n\ もっと てごわいぞ。\n\ -きをつけて すすめ!")) +きをつけて すすめ!") -DEFINE_DIALOG(DIALOG_143, 1, 6, 150, 200, _("\ +DEFINE_DIALOG(DIALOG_143, NO_SOUND, 6, 150, 200, "\ 8このパワースターを\n\ ぶじ とりもどし、\n\ おおきな ほしのドアが\n\ ひらくようになった。\n\ クッパは すぐそこだ!\n\ -ピーチのこえがきこえる。")) +ピーチのこえがきこえる。") -DEFINE_DIALOG(DIALOG_144, 1, 5, 150, 200, _("\ +DEFINE_DIALOG(DIALOG_144, NO_SOUND, 5, 150, 200, "\ 30この パワースターを\n\ とりもどし、\n\ おおきなスターのドアが\n\ @@ -1608,9 +1608,9 @@ DEFINE_DIALOG(DIALOG_144, 1, 5, 150, 200, _("\ このちかにせんにゅう\n\ したらしい。\n\ とうとうやつを\n\ -おいつめたぞ!")) +おいつめたぞ!") -DEFINE_DIALOG(DIALOG_145, 1, 4, 150, 200, _("\ +DEFINE_DIALOG(DIALOG_145, NO_SOUND, 4, 150, 200, "\ 50このパワースターを\n\ とりもどした!\n\ 3かいへの ほしのドアが\n\ @@ -1622,17 +1622,17 @@ DEFINE_DIALOG(DIALOG_145, 1, 4, 150, 200, _("\ あか・あお・みどりの\n\ 3つのアイテムブロックは\n\ とてもだいじな みかただ。\n\ -さあ『3かい』へすすめ!")) +さあ『3かい』へすすめ!") -DEFINE_DIALOG(DIALOG_146, 1, 6, 150, 200, _("\ +DEFINE_DIALOG(DIALOG_146, NO_SOUND, 6, 150, 200, "\ 70このパワースターを\n\ とりもどした!\n\ はてしない かいだんの\n\ ナゾがとかれた。\n\ クッパはかなりあせってる。\n\ -さあ!さいごのたたかいだ。")) +さあ!さいごのたたかいだ。") -DEFINE_DIALOG(DIALOG_147, 1, 5, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_147, NO_SOUND, 5, 30, 200, "\ あか・あお・みどりの\n\ 『アイテムブロック』を\n\ つかっていますか?\n\ @@ -1647,9 +1647,9 @@ DEFINE_DIALOG(DIALOG_147, 1, 5, 30, 200, _("\ みどりは メタルのぼうし\n\ あおは とうめいのぼうし\n\ \n\ -とてもつよい みかたです。")) +とてもつよい みかたです。") -DEFINE_DIALOG(DIALOG_148, 1, 5, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_148, NO_SOUND, 5, 30, 200, "\ このさきスノーマンのやま\n\ だれも はいるな!\n\ アイスブロックシューター\n\ @@ -1659,9 +1659,9 @@ DEFINE_DIALOG(DIALOG_148, 1, 5, 30, 200, _("\ はやく たいりょくが\n\ へります!\n\ かいふくも しません。\n\ -      スノーマン")) +      スノーマン") -DEFINE_DIALOG(DIALOG_149, 1, 5, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_149, NO_SOUND, 5, 30, 200, "\ ピーチのかくれスライダー\n\ へ ようこそ!\n\ ここには クッパにみつけ\n\ @@ -1671,22 +1671,22 @@ DEFINE_DIALOG(DIALOG_149, 1, 5, 30, 200, _("\ スティックまえで かそく、\n\ うしろで げんそくできる。\n\ はやくすべれば スターが\n\ -みつかるはずだ!")) +みつかるはずだ!") -DEFINE_DIALOG(DIALOG_150, 1, 5, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_150, SOUND_OBJ_WIGGLER_TALK, 5, 30, 200, "\ あーーん、だれだい?\n\ とつぜん ビショぬれに\n\ なっちゃいました!\n\ キチンと てんじょう\n\ -なおしてもらうです。")) +なおしてもらうです。") -DEFINE_DIALOG(DIALOG_151, 1, 4, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_151, SOUND_OBJ_WIGGLER_TALK, 4, 30, 200, "\ みずをかけられた つぎは\n\ ふんづけられました。\n\ もう ほんとーに\n\ -おこったです!")) +おこったです!") -DEFINE_DIALOG(DIALOG_152, 1, 5, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_152, SOUND_OBJ_WIGGLER_TALK, 5, 30, 200, "\ いててて!!!\n\ らんぼうなひとだなあ。\n\ なぜかイライラしてたけど、\n\ @@ -1696,15 +1696,15 @@ DEFINE_DIALOG(DIALOG_152, 1, 5, 30, 200, _("\ みえるしね!\n\ このほしは かえします。\n\ あー、なんだか きもちが\n\ -おちついてきたです。")) +おちついてきたです。") -DEFINE_DIALOG(DIALOG_153, 1, 4, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_153, NO_SOUND, 4, 30, 200, "\ わしの カラダに\n\ のぼっては いかーん!\n\ そういうヤツは みんな\n\ -ふきっとばしちまうぞー!")) +ふきっとばしちまうぞー!") -DEFINE_DIALOG(DIALOG_154, 1, 5, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_154, NO_SOUND, 5, 30, 200, "\ ぼうしを なくすと\n\ ダメージがおおくなるので\n\ だいじに してください。\n\ @@ -1719,9 +1719,9 @@ DEFINE_DIALOG(DIALOG_154, 1, 5, 30, 200, _("\ えのほかにカベのなかにも\n\ モンスターの せかいが\n\ あります。\n\ -よーく、しらべてください。")) +よーく、しらべてください。") -DEFINE_DIALOG(DIALOG_155, 1, 5, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_155, NO_SOUND, 5, 30, 200, "\ パワースターのおかげで\n\ おしろに、げんきが\n\ もどってきました。\n\ @@ -1735,15 +1735,15 @@ DEFINE_DIALOG(DIALOG_155, 1, 5, 30, 200, _("\ みずのまちへ いくときは、\n\ 『え』にとびこむ たかさ\n\ によって、まちをすっかり\n\ -みずびたしに できます。")) +みずびたしに できます。") -DEFINE_DIALOG(DIALOG_156, 1, 4, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_156, NO_SOUND, 4, 30, 200, "\ とけいがとても へんです。\n\ とけいに はいるとき、\n\ ながいはりの ばしょに\n\ -ちゅういしてください!")) +ちゅういしてください!") -DEFINE_DIALOG(DIALOG_157, 1, 5, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_157, NO_SOUND, 5, 30, 200, "\ ながれる『すな』に\n\ ながされないように\n\ きをつけて!\n\ @@ -1753,9 +1753,9 @@ DEFINE_DIALOG(DIALOG_157, 1, 5, 30, 200, _("\ いきが できません。\n\ くらいいろの ところは\n\ とくに キケン!!\n\ -そこなしの じごくです!")) +そこなしの じごくです!") -DEFINE_DIALOG(DIALOG_158, 1, 5, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_158, NO_SOUND, 5, 30, 200, "\ ジャンプのテクニック\n\ その1\n\ タイミングよく、\n\ @@ -1770,9 +1770,9 @@ DEFINE_DIALOG(DIALOG_158, 1, 5, 30, 200, _("\ ジャンプして、そこから\n\ もういちどジャンプできる。\n\ 『カベキック』といって、\n\ -たかいところにのぼれます。")) +たかいところにのぼれます。") -DEFINE_DIALOG(DIALOG_159, 1, 5, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_159, NO_SOUND, 5, 30, 200, "\ ジャンプのテクニック\n\ その3  Zボタンわざ\n\ たちどまって しゃがんで\n\ @@ -1781,9 +1781,9 @@ DEFINE_DIALOG(DIALOG_159, 1, 5, 30, 200, _("\ はやくはしりながら\n\ しゃがんでジャンプすると\n\ とおくまで とべる。\n\ -『はばとび』です。")) +『はばとび』です。") -DEFINE_DIALOG(DIALOG_160, 1, 4, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_160, NO_SOUND, 4, 30, 200, "\ はやく はしりながら\n\ Bボタンをおすと\n\ 『ボディアタック』が\n\ @@ -1791,9 +1791,9 @@ DEFINE_DIALOG(DIALOG_160, 1, 4, 30, 200, _("\ おなかで\n\ すべっているあいだは、\n\ A・Bどちらのボタンでも\n\ -おきあがることができます。")) +おきあがることができます。") -DEFINE_DIALOG(DIALOG_161, 1, 5, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_161, SOUND_GENERAL_YOSHI_TALK, 5, 30, 200, "\ いやー すごいです!!\n\ ここにいれば あえると\n\ きいてたけど、ほんとに\n\ @@ -1803,9 +1803,9 @@ DEFINE_DIALOG(DIALOG_161, 1, 5, 30, 200, _("\ もっとあそんでほしいので\n\ つまらないものですが\n\ うけとって ください。』\n\ --マリオ・スタッフより-")) +-マリオ・スタッフより-") -DEFINE_DIALOG(DIALOG_162, 1, 5, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_162, NO_SOUND, 5, 30, 200, "\ イテテ あいかわらず\n\ らんぼうなひとだな。\n\ このスターは べつに\n\ @@ -1815,9 +1815,9 @@ DEFINE_DIALOG(DIALOG_162, 1, 5, 30, 200, _("\ はなしてくれたら\n\ スターぐらい かえすから。\n\ これで ほんとに\n\ -さいごだよ!  ホイ!")) +さいごだよ!  ホイ!") -DEFINE_DIALOG(DIALOG_163, 1, 5, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_163, NO_SOUND, 5, 30, 200, "\ あああっ・・またこんども\n\ キサマのかちか マリオ!\n\ キサマはな、わがはいが\n\ @@ -1842,9 +1842,9 @@ DEFINE_DIALOG(DIALOG_163, 1, 5, 30, 200, _("\ ぜーったい まけないぞ!\n\ 3Dスティックをみがいて\n\ まってろよ!\n\ - ガハハッ!")) + ガハハッ!") -DEFINE_DIALOG(DIALOG_164, 1, 4, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_164, NO_SOUND, 4, 30, 200, "\ しばらく やすんでたので\n\ こんなにみごとに、\n\ ふとっちゃいました。\n\ @@ -1852,48 +1852,43 @@ DEFINE_DIALOG(DIALOG_164, 1, 4, 30, 200, _("\ では! いつものように、\n\ レディー!\n\ \n\ -   ゴー!! やめとく")) +   ゴー!! やめとく") -DEFINE_DIALOG(DIALOG_165, 1, 4, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_165, NO_SOUND, 4, 30, 200, "\ このクイの まわりを\n\ クルクルまわって\n\ めをまわしても\n\ -しりません。")) +しりません。") -DEFINE_DIALOG(DIALOG_166, 1, 6, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_166, NO_SOUND, 6, 30, 200, "\ きょうは トレーニングで\n\ るすに してるッス!\n\ オイラに ちょーせん\n\ したいひとは、またこんど\n\ くるといいッス!\n\ -       ノコノコ")) +       ノコノコ") -#define A_BUTTON_ACT "\ +DEFINE_DIALOG(DIALOG_167, NO_SOUND, 4, 30, 200, "\ +『ピーチの おしろ』\n\ +     すぐそこ\n\ Aボタン『ジャンプ』\n\ -    『カンバンよむ』\n" -#define B_BUTTON_ACT "\ +    『カンバンよむ』\n\ +Zボタン『しゃがむ』\n\ Bボタン『パンチ』\n\     『カンバンよむ』\n\     『ものをもつ』\n\  もういちどおすと\n\ -    『なげる』" +    『なげる』") -DEFINE_DIALOG(DIALOG_167, 1, 4, 30, 200, _("\ -『ピーチの おしろ』\n\ -     すぐそこ\n"\ -A_BUTTON_ACT \ -"Zボタン『しゃがむ』\n"\ -B_BUTTON_ACT)) - -DEFINE_DIALOG(DIALOG_168, 1, 4, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_168, SOUND_OBJ_WIGGLER_TALK, 4, 30, 200, "\ アーン、またまた \n\ ふんづけられちゃいました。\n\ ハナチャン かんぜんに\n\ -おこったです!")) +おこったです!") -DEFINE_DIALOG(DIALOG_169, 1, 5, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_169, NO_SOUND, 5, 30, 200, "\ かってに はいるな!\n\ この『どうくつ』に\n\ むだんで はいるものには、\n\ わざわいが おとずれる!\n\ -  --せんちょうより")) +  --せんちょうより") diff --git a/text/us/courses.h b/text/us/courses.h index 34dc2543b..5c91bf23f 100644 --- a/text/us/courses.h +++ b/text/us/courses.h @@ -1,80 +1,80 @@ -COURSE_ACTS(COURSE_BOB, _(" 1 BOB-OMB BATTLEFIELD"), - _("BIG BOB-OMB ON THE SUMMIT") , _("FOOTRACE WITH KOOPA THE QUICK") , _("SHOOT TO THE ISLAND IN THE SKY"), - _("FIND THE 8 RED COINS") , _("MARIO WINGS TO THE SKY") , _("BEHIND CHAIN CHOMP'S GATE")) +COURSE_ACTS(COURSE_BOB, "BOB-OMB BATTLEFIELD", + "BIG BOB-OMB ON THE SUMMIT" , "FOOTRACE WITH KOOPA THE QUICK" , "SHOOT TO THE ISLAND IN THE SKY", + "FIND THE 8 RED COINS" , "MARIO WINGS TO THE SKY" , "BEHIND CHAIN CHOMP'S GATE") -COURSE_ACTS(COURSE_WF, _(" 2 WHOMP'S FORTRESS"), - _("CHIP OFF WHOMP'S BLOCK") , _("TO THE TOP OF THE FORTRESS") , _("SHOOT INTO THE WILD BLUE"), - _("RED COINS ON THE FLOATING ISLE"), _("FALL ONTO THE CAGED ISLAND") , _("BLAST AWAY THE WALL")) +COURSE_ACTS(COURSE_WF, "WHOMP'S FORTRESS", + "CHIP OFF WHOMP'S BLOCK" , "TO THE TOP OF THE FORTRESS" , "SHOOT INTO THE WILD BLUE", + "RED COINS ON THE FLOATING ISLE", "FALL ONTO THE CAGED ISLAND" , "BLAST AWAY THE WALL") -COURSE_ACTS(COURSE_JRB, _(" 3 JOLLY ROGER BAY"), - _("PLUNDER IN THE SUNKEN SHIP") , _("CAN THE EEL COME OUT TO PLAY?") , _("TREASURE OF THE OCEAN CAVE"), - _("RED COINS ON THE SHIP AFLOAT") , _("BLAST TO THE STONE PILLAR") , _("THROUGH THE JET STREAM")) +COURSE_ACTS(COURSE_JRB, "JOLLY ROGER BAY", + "PLUNDER IN THE SUNKEN SHIP" , "CAN THE EEL COME OUT TO PLAY?" , "TREASURE OF THE OCEAN CAVE", + "RED COINS ON THE SHIP AFLOAT" , "BLAST TO THE STONE PILLAR" , "THROUGH THE JET STREAM") -COURSE_ACTS(COURSE_CCM, _(" 4 COOL, COOL MOUNTAIN"), - _("SLIP SLIDIN' AWAY") , _("LI'L PENGUIN LOST") , _("BIG PENGUIN RACE"), - _("FROSTY SLIDE FOR 8 RED COINS") , _("SNOWMAN'S LOST HIS HEAD") , _("WALL KICKS WILL WORK")) +COURSE_ACTS(COURSE_CCM, "COOL, COOL MOUNTAIN", + "SLIP SLIDIN' AWAY" , "LI'L PENGUIN LOST" , "BIG PENGUIN RACE", + "FROSTY SLIDE FOR 8 RED COINS" , "SNOWMAN'S LOST HIS HEAD" , "WALL KICKS WILL WORK") -COURSE_ACTS(COURSE_BBH, _(" 5 BIG BOO'S HAUNT"), - _("GO ON A GHOST HUNT") , _("RIDE BIG BOO'S MERRY-GO-ROUND") , _("SECRET OF THE HAUNTED BOOKS"), - _("SEEK THE 8 RED COINS") , _("BIG BOO'S BALCONY") , _("EYE TO EYE IN THE SECRET ROOM")) +COURSE_ACTS(COURSE_BBH, "BIG BOO'S HAUNT", + "GO ON A GHOST HUNT" , "RIDE BIG BOO'S MERRY-GO-ROUND" , "SECRET OF THE HAUNTED BOOKS", + "SEEK THE 8 RED COINS" , "BIG BOO'S BALCONY" , "EYE TO EYE IN THE SECRET ROOM") -COURSE_ACTS(COURSE_HMC, _(" 6 HAZY MAZE CAVE"), - _("SWIMMING BEAST IN THE CAVERN") , _("ELEVATE FOR 8 RED COINS") , _("METAL-HEAD MARIO CAN MOVE!"), - _("NAVIGATING THE TOXIC MAZE") , _("A-MAZE-ING EMERGENCY EXIT") , _("WATCH FOR ROLLING ROCKS")) +COURSE_ACTS(COURSE_HMC, "HAZY MAZE CAVE", + "SWIMMING BEAST IN THE CAVERN" , "ELEVATE FOR 8 RED COINS" , "METAL-HEAD MARIO CAN MOVE!", + "NAVIGATING THE TOXIC MAZE" , "A-MAZE-ING EMERGENCY EXIT" , "WATCH FOR ROLLING ROCKS") -COURSE_ACTS(COURSE_LLL, _(" 7 LETHAL LAVA LAND"), - _("BOIL THE BIG BULLY") , _("BULLY THE BULLIES") , _("8-COIN PUZZLE WITH 15 PIECES"), - _("RED-HOT LOG ROLLING") , _("HOT-FOOT-IT INTO THE VOLCANO") , _("ELEVATOR TOUR IN THE VOLCANO")) +COURSE_ACTS(COURSE_LLL, "LETHAL LAVA LAND", + "BOIL THE BIG BULLY" , "BULLY THE BULLIES" , "8-COIN PUZZLE WITH 15 PIECES", + "RED-HOT LOG ROLLING" , "HOT-FOOT-IT INTO THE VOLCANO" , "ELEVATOR TOUR IN THE VOLCANO") -COURSE_ACTS(COURSE_SSL, _(" 8 SHIFTING SAND LAND"), - _("IN THE TALONS OF THE BIG BIRD") , _("SHINING ATOP THE PYRAMID") , _("INSIDE THE ANCIENT PYRAMID"), - _("STAND TALL ON THE FOUR PILLARS"), _("FREE FLYING FOR 8 RED COINS") , _("PYRAMID PUZZLE")) +COURSE_ACTS(COURSE_SSL, "SHIFTING SAND LAND", + "IN THE TALONS OF THE BIG BIRD" , "SHINING ATOP THE PYRAMID" , "INSIDE THE ANCIENT PYRAMID", + "STAND TALL ON THE FOUR PILLARS", "FREE FLYING FOR 8 RED COINS" , "PYRAMID PUZZLE") -COURSE_ACTS(COURSE_DDD, _(" 9 DIRE, DIRE DOCKS"), - _("BOARD BOWSER'S SUB") , _("CHESTS IN THE CURRENT") , _("POLE-JUMPING FOR RED COINS"), - _("THROUGH THE JET STREAM") , _("THE MANTA RAY'S REWARD") , _("COLLECT THE CAPS...")) +COURSE_ACTS(COURSE_DDD, "DIRE, DIRE DOCKS", + "BOARD BOWSER'S SUB" , "CHESTS IN THE CURRENT" , "POLE-JUMPING FOR RED COINS", + "THROUGH THE JET STREAM" , "THE MANTA RAY'S REWARD" , "COLLECT THE CAPS...") -COURSE_ACTS(COURSE_SL, _("10 SNOWMAN'S LAND"), - _("SNOWMAN'S BIG HEAD") , _("CHILL WITH THE BULLY") , _("IN THE DEEP FREEZE"), - _("WHIRL FROM THE FREEZING POND") , _("SHELL SHREDDIN' FOR RED COINS") , _("INTO THE IGLOO")) +COURSE_ACTS(COURSE_SL, "SNOWMAN'S LAND", + "SNOWMAN'S BIG HEAD" , "CHILL WITH THE BULLY" , "IN THE DEEP FREEZE", + "WHIRL FROM THE FREEZING POND" , "SHELL SHREDDIN' FOR RED COINS" , "INTO THE IGLOO") -COURSE_ACTS(COURSE_WDW, _("11 WET-DRY WORLD"), - _("SHOCKING ARROW LIFTS!") , _("TOP O' THE TOWN") , _("SECRETS IN THE SHALLOWS & SKY"), - _("EXPRESS ELEVATOR--HURRY UP!") , _("GO TO TOWN FOR RED COINS") , _("QUICK RACE THROUGH DOWNTOWN!")) +COURSE_ACTS(COURSE_WDW, "WET-DRY WORLD", + "SHOCKING ARROW LIFTS!" , "TOP O' THE TOWN" , "SECRETS IN THE SHALLOWS & SKY", + "EXPRESS ELEVATOR--HURRY UP!" , "GO TO TOWN FOR RED COINS" , "QUICK RACE THROUGH DOWNTOWN!") -COURSE_ACTS(COURSE_TTM, _("12 TALL, TALL MOUNTAIN"), - _("SCALE THE MOUNTAIN") , _("MYSTERY OF THE MONKEY CAGE") , _("SCARY 'SHROOMS, RED COINS"), - _("MYSTERIOUS MOUNTAINSIDE") , _("BREATHTAKING VIEW FROM BRIDGE") , _("BLAST TO THE LONELY MUSHROOM")) +COURSE_ACTS(COURSE_TTM, "TALL, TALL MOUNTAIN", + "SCALE THE MOUNTAIN" , "MYSTERY OF THE MONKEY CAGE" , "SCARY 'SHROOMS, RED COINS", + "MYSTERIOUS MOUNTAINSIDE" , "BREATHTAKING VIEW FROM BRIDGE" , "BLAST TO THE LONELY MUSHROOM") -COURSE_ACTS(COURSE_THI, _("13 TINY-HUGE ISLAND"), - _("PLUCK THE PIRANHA FLOWER") , _("THE TIP TOP OF THE HUGE ISLAND"), _("REMATCH WITH KOOPA THE QUICK"), - _("FIVE ITTY BITTY SECRETS") , _("WIGGLER'S RED COINS") , _("MAKE WIGGLER SQUIRM")) +COURSE_ACTS(COURSE_THI, "TINY-HUGE ISLAND", + "PLUCK THE PIRANHA FLOWER" , "THE TIP TOP OF THE HUGE ISLAND", "REMATCH WITH KOOPA THE QUICK", + "FIVE ITTY BITTY SECRETS" , "WIGGLER'S RED COINS" , "MAKE WIGGLER SQUIRM") -COURSE_ACTS(COURSE_TTC, _("14 TICK TOCK CLOCK"), - _("ROLL INTO THE CAGE") , _("THE PIT AND THE PENDULUMS") , _("GET A HAND"), - _("STOMP ON THE THWOMP") , _("TIMED JUMPS ON MOVING BARS") , _("STOP TIME FOR RED COINS")) +COURSE_ACTS(COURSE_TTC, "TICK TOCK CLOCK", + "ROLL INTO THE CAGE" , "THE PIT AND THE PENDULUMS" , "GET A HAND", + "STOMP ON THE THWOMP" , "TIMED JUMPS ON MOVING BARS" , "STOP TIME FOR RED COINS") -COURSE_ACTS(COURSE_RR, _("15 RAINBOW RIDE"), - _("CRUISER CROSSING THE RAINBOW") , _("THE BIG HOUSE IN THE SKY") , _("COINS AMASSED IN A MAZE"), - _("SWINGIN' IN THE BREEZE") , _("TRICKY TRIANGLES!") , _("SOMEWHERE OVER THE RAINBOW")) +COURSE_ACTS(COURSE_RR, "RAINBOW RIDE", + "CRUISER CROSSING THE RAINBOW" , "THE BIG HOUSE IN THE SKY" , "COINS AMASSED IN A MAZE", + "SWINGIN' IN THE BREEZE" , "TRICKY TRIANGLES!" , "SOMEWHERE OVER THE RAINBOW") -SECRET_STAR(COURSE_BITDW, _(" BOWSER IN THE DARK WORLD")) -SECRET_STAR(COURSE_BITFS, _(" BOWSER IN THE FIRE SEA")) -SECRET_STAR(COURSE_BITS, _(" BOWSER IN THE SKY")) -SECRET_STAR(COURSE_PSS, _(" THE PRINCESS'S SECRET SLIDE")) -SECRET_STAR(COURSE_COTMC, _(" CAVERN OF THE METAL CAP")) -SECRET_STAR(COURSE_TOTWC, _(" TOWER OF THE WING CAP")) -SECRET_STAR(COURSE_VCUTM, _(" VANISH CAP UNDER THE MOAT")) -SECRET_STAR(COURSE_WMOTR, _(" WING MARIO OVER THE RAINBOW")) -SECRET_STAR(COURSE_SA, _(" THE SECRET AQUARIUM")) -SECRET_STAR(COURSE_CAKE_END, _("")) +SECRET_STAR(COURSE_BITDW, "BOWSER IN THE DARK WORLD") +SECRET_STAR(COURSE_BITFS, "BOWSER IN THE FIRE SEA") +SECRET_STAR(COURSE_BITS, "BOWSER IN THE SKY") +SECRET_STAR(COURSE_PSS, "THE PRINCESS'S SECRET SLIDE") +SECRET_STAR(COURSE_COTMC, "CAVERN OF THE METAL CAP") +SECRET_STAR(COURSE_TOTWC, "TOWER OF THE WING CAP") +SECRET_STAR(COURSE_VCUTM, "VANISH CAP UNDER THE MOAT") +SECRET_STAR(COURSE_WMOTR, "WING MARIO OVER THE RAINBOW") +SECRET_STAR(COURSE_SA, "THE SECRET AQUARIUM") +SECRET_STAR(COURSE_CAKE_END, "") -CASTLE_SECRET_STARS(_(" CASTLE SECRET STARS")) +CASTLE_SECRET_STARS("CASTLE SECRET STARS") -EXTRA_TEXT(0, _("ONE OF THE CASTLE'S SECRET STARS!")) -EXTRA_TEXT(1, _("")) -EXTRA_TEXT(2, _("")) -EXTRA_TEXT(3, _("")) -EXTRA_TEXT(4, _("")) -EXTRA_TEXT(5, _("")) -EXTRA_TEXT(6, _("")) +EXTRA_TEXT(0, "ONE OF THE CASTLE'S SECRET STARS!") +EXTRA_TEXT(1, "") +EXTRA_TEXT(2, "") +EXTRA_TEXT(3, "") +EXTRA_TEXT(4, "") +EXTRA_TEXT(5, "") +EXTRA_TEXT(6, "") diff --git a/text/us/dialogs.h b/text/us/dialogs.h index 4b8110665..ffe485362 100644 --- a/text/us/dialogs.h +++ b/text/us/dialogs.h @@ -1,18 +1,38 @@ -// Parameters: dialog enum ID, (unused), lines per box, left offset, width +/** + * DEFINE_DIALOG macro + * - Dialog enum ID (see dialog_ids.h) + * - Voice Sound (see sounds.h) + * - Lines per box + * - Left offset (Distance from left edge of the screen to dialog box) + * - Bottom offset (Distance from bottom of the screen to the top of the dialog box, SCREEN_HEIGHT would be the top) + * - Text + * + * + * Control characters: + * Special text commands are supported, for functions such as custom text color. + * See "ingame_menu.h" for more details. + * + * + * Special Characters: + * Here are some special characters you can use: + * Ⓐ + * Ⓑ + * Ⓒ + * Ⓩ + * Ⓡ + * “ and ” (left and right quotes) + * ◀▶▼▲ + * ★ ✪ + * + * + * See segment2.c LUTs for more info: + * - main_font_lut + * - main_hud_utf8_2byte_lut + * - main_hud_utf8_3byte_lut + * - main_hud_utf8_4byte_lut + */ -#ifdef VERSION_EU -#define COMRADES "friends" -#define PLASTERED "splattered" -#define SCAM_ME "cheat!\n" -#define SCRAM "get lost" -#else -#define COMRADES "comrades" -#define PLASTERED "plastered" -#define SCAM_ME "scam\nME. " -#define SCRAM "scram--" -#endif - -DEFINE_DIALOG(DIALOG_000, 1, 6, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_000, NO_SOUND, 6, 30, 200, "\ Wow! You're smack in the\n\ middle of the battlefield.\n\ You'll find the Power\n\ @@ -20,22 +40,22 @@ Stars that Bowser stole\n\ inside the painting\n\ worlds.\n\ First, talk to the\n\ -Bob-omb Buddy. (Press [B]\n\ +Bob-omb Buddy. (Press Ⓑ\n\ to talk.) He'll certainly\n\ help you out, and so will\n\ -his " COMRADES " in other\n\ +his comrades in other\n\ areas.\n\ To read signs, stop, face\n\ -them and press [B]. Press [A]\n\ -or [B] to scroll ahead. You\n\ +them and press Ⓑ. Press Ⓐ\n\ +or Ⓑ to scroll ahead. You\n\ can talk to some other\n\ characters by facing them\n\ -and pressing [B].")) +and pressing Ⓑ.") -DEFINE_DIALOG(DIALOG_001, 1, 4, 95, 200, _("\ +DEFINE_DIALOG(DIALOG_001, SOUND_OBJ_BOBOMB_BUDDY_TALK, 4, 95, 200, "\ Watch out! If you wander\n\ around here, you're liable\n\ -to be " PLASTERED " by a\n\ +to be plastered by a\n\ water bomb!\n\ Those enemy Bob-ombs love\n\ to fight, and they're\n\ @@ -51,9 +71,9 @@ and go left up the path\n\ to find the Big Bob-omb.\n\ Please come back to see\n\ me after you've retrieved\n\ -the Power Star!")) +the Power Star!") -DEFINE_DIALOG(DIALOG_002, 1, 4, 95, 200, _("\ +DEFINE_DIALOG(DIALOG_002, SOUND_OBJ_BOBOMB_BUDDY_TALK, 4, 95, 200, "\ Hey, you! It's dangerous\n\ ahead, so listen up! Take\n\ my advice.\n\ @@ -69,9 +89,9 @@ him grab you!\n\ We're Bob-omb Buddies,\n\ and we're on your side.\n\ You can talk to us\n\ -whenever you'd like to!")) +whenever you'd like to!") -DEFINE_DIALOG(DIALOG_003, 1, 5, 95, 200, _("\ +DEFINE_DIALOG(DIALOG_003, SOUND_OBJ_BOBOMB_BUDDY_TALK, 5, 95, 200, "\ Thank you, Mario! The Big\n\ Bob-omb is nothing but a\n\ big dud now! But the\n\ @@ -85,9 +105,9 @@ that lead to new worlds!\n\ My Bob-omb Buddies are\n\ waiting for you. Be sure\n\ to talk to them--they'll\n\ -set up cannons for you.")) +set up cannons for you.") -DEFINE_DIALOG(DIALOG_004, 1, 3, 95, 200, _("\ +DEFINE_DIALOG(DIALOG_004, SOUND_OBJ_BOBOMB_BUDDY_TALK, 3, 95, 200, "\ We're peace-loving\n\ Bob-ombs, so we don't use\n\ cannons.\n\ @@ -96,9 +116,9 @@ to blast off, we don't\n\ mind. Help yourself.\n\ We'll prepare all of the\n\ cannons in this course for\n\ -you to use. Bon Voyage!")) +you to use. Bon Voyage!") -DEFINE_DIALOG(DIALOG_005, 1, 3, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_005, SOUND_OBJ_KOOPA_TALK, 3, 30, 200, "\ Hey, Mario! Is it true\n\ that you beat the Big\n\ Bob-omb? Cool!\n\ @@ -112,31 +132,31 @@ How about a race to the\n\ mountaintop, where the\n\ Big Bob-omb was?\n\ Whaddya say? When I say\n\ -『Go,』 let the race begin!\n\ +“Go,” let the race begin!\n\ \n\ Ready....\n\ \n\ -//Go!////Don't Go")) +\tGo!\t\tDon't Go") -DEFINE_DIALOG(DIALOG_006, 1, 3, 30, 200, _("\ -Hey!!! Don't try to " SCAM_ME -"You've gotta run\n\ +DEFINE_DIALOG(DIALOG_006, SOUND_OBJ_KOOPA_TALK, 3, 30, 200, "\ +Hey!!! Don't try to scam\n\ +ME. You've gotta run\n\ the whole course.\n\ Later. Look me up when\n\ you want to race for\n\ -real.")) +real.") -DEFINE_DIALOG(DIALOG_007, 1, 5, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_007, SOUND_OBJ_KOOPA_TALK, 5, 30, 200, "\ Hufff...fff...pufff...\n\ Whoa! You...really...are...\n\ fast! A human blur!\n\ Here you go--you've won\n\ -it, fair and square!")) +it, fair and square!") -DEFINE_DIALOG(DIALOG_008, 1, 4, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_008, NO_SOUND, 4, 30, 200, "\ BEWARE OF CHAIN CHOMP\n\ Extreme Danger!\n\ -Get close and press [C]^\n\ +Get close and press Ⓒ▲\n\ for a better look.\n\ Scary, huh?\n\ See the Red Coin on top\n\ @@ -145,9 +165,9 @@ of the stake?\n\ When you collect eight of\n\ them, a Power Star will\n\ appear in the meadow\n\ -across the bridge.")) +across the bridge.") -DEFINE_DIALOG(DIALOG_009, 1, 5, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_009, SOUND_OBJ_KOOPA_TALK, 5, 30, 200, "\ Long time, no see! Wow,\n\ have you gotten fast!\n\ Have you been training\n\ @@ -162,9 +182,14 @@ The goal is in\n\ Windswept Valley.\n\ Ready?\n\ \n\ -//Go//// Don't Go")) +\tGo\t\t Don't Go") -DEFINE_DIALOG(DIALOG_010, 1, 4, 30, 200, _("\ +/** + * Special case: if the voice is SEQ_EVENT_SOLVE_PUZZLE, + * then play_dialog_sound will run play_puzzle_jingle + * instead of playing a sound effect + */ +DEFINE_DIALOG(DIALOG_010, SEQ_EVENT_SOLVE_PUZZLE, 4, 30, 200, "\ You've stepped on the\n\ Wing Cap Switch. Wearing\n\ the Wing Cap, you can\n\ @@ -175,9 +200,9 @@ you find.\n\ \n\ Would you like to Save?\n\ \n\ -//Yes////No")) +\tYes\t\tNo") -DEFINE_DIALOG(DIALOG_011, 1, 4, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_011, SEQ_EVENT_SOLVE_PUZZLE, 4, 30, 200, "\ You've just stepped on\n\ the Metal Cap Switch!\n\ The Metal Cap makes\n\ @@ -188,9 +213,9 @@ green blocks you find.\n\ \n\ Would you like to Save?\n\ \n\ -//Yes////No")) +\tYes\t\tNo") -DEFINE_DIALOG(DIALOG_012, 1, 4, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_012, SEQ_EVENT_SOLVE_PUZZLE, 4, 30, 200, "\ You've just stepped on\n\ the Vanish Cap Switch.\n\ The Vanish Cap makes\n\ @@ -201,40 +226,40 @@ blocks you find.\n\ \n\ Would you like to Save?\n\ \n\ -//Yes////No")) +\tYes\t\tNo") -DEFINE_DIALOG(DIALOG_013, 1, 5, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_013, NO_SOUND, 5, 30, 200, "\ You've collected 100\n\ coins! Mario gains more\n\ power from the castle.\n\ Do you want to Save?\n\ -//Yes////No")) +\tYes\t\tNo") -DEFINE_DIALOG(DIALOG_014, 1, 4, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_014, NO_SOUND, 4, 30, 200, "\ Wow! Another Power Star!\n\ Mario gains more courage\n\ from the power of the\n\ castle.\n\ Do you want to Save?\n\ \n\ -//You Bet//Not Now")) +\tYou Bet\tNot Now") -DEFINE_DIALOG(DIALOG_015, 1, 4, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_015, NO_SOUND, 4, 30, 200, "\ You can punch enemies to\n\ -knock them down. Press [A]\n\ -to jump, [B] to punch.\n\ -Press [A] then [B] to Kick.\n\ +knock them down. Press Ⓐ\n\ +to jump, Ⓑ to punch.\n\ +Press Ⓐ then Ⓑ to Kick.\n\ To pick something up,\n\ -press [B], too. To throw\n\ +press Ⓑ, too. To throw\n\ something you're holding,\n\ -press [B] again.")) +press Ⓑ again.") -DEFINE_DIALOG(DIALOG_016, 1, 3, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_016, NO_SOUND, 3, 30, 200, "\ Hop on the shiny shell and\n\ ride wherever you want to\n\ -go! Shred those enemies!")) +go! Shred those enemies!") -DEFINE_DIALOG(DIALOG_017, 1, 4, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_017, SOUND_OBJ_KING_BOBOMB_TALK, 4, 30, 200, "\ I'm the Big Bob-omb, lord\n\ of all blasting matter,\n\ king of ka-booms the\n\ @@ -258,81 +283,81 @@ yourself in battle.\n\ Can you pick me up from\n\ the back and hurl me to\n\ this royal turf? I think\n\ -that you cannot!")) +that you cannot!") -DEFINE_DIALOG(DIALOG_018, 1, 4, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_018, NO_SOUND, 4, 30, 200, "\ I'm sleeping because...\n\ ...I'm sleepy. I don't\n\ like being disturbed.\n\ -Please walk quietly.")) +Please walk quietly.") -DEFINE_DIALOG(DIALOG_019, 1, 2, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_019, NO_SOUND, 2, 30, 200, "\ Shhh! Please walk\n\ -quietly in the hallway!")) +quietly in the hallway!") -DEFINE_DIALOG(DIALOG_020, 1, 6, 95, 150, _("\ +DEFINE_DIALOG(DIALOG_020, NO_SOUND, 6, 95, 150, "\ Dear Mario:\n\ Please come to the\n\ castle. I've baked\n\ a cake for you.\n\ Yours truly--\n\ -Princess Toadstool")) +Princess Toadstool") -DEFINE_DIALOG(DIALOG_021, 1, 5, 95, 200, _("\ +DEFINE_DIALOG(DIALOG_021, SOUND_OBJ_BOWSER_INTRO_LAUGH, 5, 95, 200, "\ Welcome.\n\ No one's home!\n\ -Now " SCRAM "\n\ +Now scram--\n\ and don't come back!\n\ -Gwa ha ha!")) +Gwa ha ha!") -DEFINE_DIALOG(DIALOG_022, 1, 2, 95, 200, _("\ +DEFINE_DIALOG(DIALOG_022, SOUND_OBJ_BOWSER_INTRO_LAUGH, 2, 95, 200, "\ You need a key to open\n\ -this door.")) +this door.") -DEFINE_DIALOG(DIALOG_023, 1, 3, 95, 200, _("\ +DEFINE_DIALOG(DIALOG_023, SOUND_OBJ_BOWSER_INTRO_LAUGH, 3, 95, 200, "\ This key doesn't fit!\n\ Maybe it's for the\n\ -basement...")) +basement...") -DEFINE_DIALOG(DIALOG_024, 1, 5, 95, 200, _("\ +DEFINE_DIALOG(DIALOG_024, SOUND_OBJ_BOWSER_INTRO_LAUGH, 5, 95, 200, "\ You need Star power to\n\ open this door. Recover a\n\ Power Star from an enemy\n\ inside one of the castle's\n\ -paintings.")) +paintings.") -DEFINE_DIALOG(DIALOG_025, 1, 4, 95, 200, _("\ +DEFINE_DIALOG(DIALOG_025, SOUND_OBJ_BOWSER_INTRO_LAUGH, 4, 95, 200, "\ It takes the power of\n\ 3 Stars to open this\n\ -door. You need [%] more\n\ -Stars.")) +door. You need %d more\n\ +Stars.") -DEFINE_DIALOG(DIALOG_026, 1, 4, 95, 200, _("\ +DEFINE_DIALOG(DIALOG_026, SOUND_OBJ_BOWSER_INTRO_LAUGH, 4, 95, 200, "\ It takes the power of\n\ 8 Stars to open this\n\ -door. You need [%] more\n\ -Stars.")) +door. You need %d more\n\ +Stars.") -DEFINE_DIALOG(DIALOG_027, 1, 4, 95, 200, _("\ +DEFINE_DIALOG(DIALOG_027, SOUND_OBJ_BOWSER_INTRO_LAUGH, 4, 95, 200, "\ It takes the power of\n\ 30 Stars to open this\n\ -door. You need [%] more\n\ -Stars.")) +door. You need %d more\n\ +Stars.") -DEFINE_DIALOG(DIALOG_028, 1, 4, 95, 200, _("\ +DEFINE_DIALOG(DIALOG_028, SOUND_OBJ_BOWSER_INTRO_LAUGH, 4, 95, 200, "\ It takes the power of\n\ 50 Stars to open this\n\ -door. You need [%] more\n\ -Stars.")) +door. You need %d more\n\ +Stars.") -DEFINE_DIALOG(DIALOG_029, 1, 5, 95, 200, _("\ +DEFINE_DIALOG(DIALOG_029, SOUND_OBJ_BOWSER_INTRO_LAUGH, 5, 95, 200, "\ To open the door that\n\ -leads to the 『endless』\n\ +leads to the “endless”\n\ stairs, you need 70\n\ Stars.\n\ -Bwa ha ha!")) +Bwa ha ha!") -DEFINE_DIALOG(DIALOG_030, 1, 6, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_030, NO_SOUND, 6, 30, 200, "\ Hello! The Lakitu Bros.,\n\ cutting in with a live\n\ update on Mario's\n\ @@ -348,16 +373,16 @@ 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 Ⓒ▶ and\n\ +Ⓒ◀. Press Ⓒ▼ to view the\n\ action from a distance.\n\ When you can't move the\n\ camera any farther, the\n\ buzzer will sound. This is\n\ the Lakitu Bros.,\n\ -signing off.")) +signing off.") -DEFINE_DIALOG(DIALOG_031, 1, 5, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_031, NO_SOUND, 5, 30, 200, "\ No way! You beat me...\n\ again!! And I just spent\n\ my entire savings on\n\ @@ -366,9 +391,9 @@ Mach 1 Sprint shoes!\n\ Here, I guess I have to\n\ hand over this Star to\n\ the winner of the race.\n\ -Congrats, Mario!")) +Congrats, Mario!") -DEFINE_DIALOG(DIALOG_032, 1, 5, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_032, NO_SOUND, 5, 30, 200, "\ If you get the Wing Cap,\n\ you can fly! Put the cap\n\ on, then do a Triple\n\ @@ -379,25 +404,25 @@ if you blast out of a\n\ cannon wearing the\n\ Wing Cap!\n\ \n\ -Use the [C] Buttons to look\n\ +Use the Ⓒ Buttons to look\n\ around while flying, and\n\ -press [Z] to land.")) +press Ⓩ to land.") -DEFINE_DIALOG(DIALOG_033, 1, 6, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_033, NO_SOUND, 6, 30, 200, "\ Ciao! You've reached\n\ Princess Toadstool's\n\ castle via a warp pipe.\n\ Using the controller is a\n\ -piece of cake. Press [A] to\n\ -jump and [B] to attack.\n\ -Press [B] to read signs,\n\ +piece of cake. Press Ⓐ to\n\ +jump and Ⓑ to attack.\n\ +Press Ⓑ to read signs,\n\ too. Use the Control Stick\n\ in the center of the\n\ controller to move Mario\n\ around. Now, head for\n\ -the castle.")) +the castle.") -DEFINE_DIALOG(DIALOG_034, 1, 6, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_034, NO_SOUND, 6, 30, 200, "\ Good afternoon. The\n\ Lakitu Bros., here,\n\ reporting live from just\n\ @@ -415,26 +440,26 @@ we'll be shooting from the\n\ recommended angle, but\n\ you can change the\n\ camera angle by pressing\n\ -the [C] Buttons.\n\ +the Ⓒ Buttons.\n\ 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 Ⓒ▲.\n\ \n\ -Press [A] to resume play.\n\ +Press Ⓐ to resume play.\n\ Switch camera modes with\n\ -the [R] Button. Signs along\n\ +the Ⓡ Button. Signs along\n\ the way will review these\n\ instructions.\n\ \n\ For now, reporting live,\n\ this has been the\n\ -Lakitu Bros.")) +Lakitu Bros.") -DEFINE_DIALOG(DIALOG_035, 1, 5, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_035, NO_SOUND, 5, 30, 200, "\ There are four camera, or\n\ -『[C],』 Buttons. Press [C]^\n\ +“Ⓒ,” Buttons. Press Ⓒ▲\n\ to look around using the\n\ Control Stick.\n\ \n\ @@ -444,45 +469,45 @@ It is the camera\n\ recommended for normal\n\ play.\n\ You can change angles by\n\ -pressing [C]>. If you press\n\ -[R], the view switches to\n\ +pressing Ⓒ▶. If you press\n\ +Ⓡ, the view switches to\n\ Mario's camera, which\n\ is directly behind him.\n\ -Press [R] again to return\n\ +Press Ⓡ again to return\n\ to Lakitu's camera. Press\n\ -[C]| to see Mario from\n\ +Ⓒ▼ to see Mario from\n\ afar, using either\n\ -Lakitu's or Mario's view.")) +Lakitu's or Mario's view.") -DEFINE_DIALOG(DIALOG_036, 1, 5, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_036, NO_SOUND, 5, 30, 200, "\ OBSERVATION PLATFORM\n\ -Press [C]^ to take a look\n\ +Press Ⓒ▲ to take a look\n\ around. Don't miss\n\ anything!\n\ \n\ -Press [R] to switch to\n\ +Press Ⓡ to switch to\n\ Mario's camera. It\n\ always follows Mario.\n\ -Press [R] again to switch\n\ +Press Ⓡ again to switch\n\ to Lakitu's camera.\n\ Pause the game and\n\ -switch the mode to 『fix』\n\ +switch the mode to “fix”\n\ the camera in place while\n\ -holding [R]. Give it a try!")) +holding Ⓡ. Give it a try!") -DEFINE_DIALOG(DIALOG_037, 1, 2, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_037, SOUND_OBJ_BIG_PENGUIN_YELL, 2, 30, 200, "\ I win! You lose!\n\ Ha ha ha ha!\n\ You're no slouch, but I'm\n\ a better sledder!\n\ -Better luck next time!")) +Better luck next time!") -DEFINE_DIALOG(DIALOG_038, 1, 3, 95, 200, _("\ +DEFINE_DIALOG(DIALOG_038, NO_SOUND, 3, 95, 200, "\ Reacting to the Star\n\ power, the door slowly\n\ -opens.")) +opens.") -DEFINE_DIALOG(DIALOG_039, 1, 4, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_039, NO_SOUND, 4, 30, 200, "\ No visitors allowed,\n\ by decree of\n\ the Big Bob-omb\n\ @@ -502,23 +527,23 @@ perhaps one hint:\n\ Heed the Star names at\n\ the beginning of the\n\ course.\n\ -//--The Big Bob-omb")) +\t--The Big Bob-omb") -DEFINE_DIALOG(DIALOG_040, 1, 3, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_040, NO_SOUND, 3, 30, 200, "\ Warning!\n\ Cold, Cold Crevasse\n\ -Below!")) +Below!") -DEFINE_DIALOG(DIALOG_041, 1, 3, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_041, SOUND_OBJ_KOOPA_TALK, 3, 30, 200, "\ I win! You lose!\n\ Ha ha ha!\n\ \n\ That's what you get for\n\ messin' with Koopa the\n\ Quick.\n\ -Better luck next time!")) +Better luck next time!") -DEFINE_DIALOG(DIALOG_042, 1, 4, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_042, NO_SOUND, 4, 30, 200, "\ Caution! Narrow Bridge!\n\ Cross slowly!\n\ \n\ @@ -528,22 +553,22 @@ of the cliff and hang on,\n\ and you can climb off the\n\ edge if you move slowly.\n\ When you want to let go,\n\ -either press [Z] or press\n\ +either press Ⓩ or press\n\ the Control Stick in the\n\ direction of Mario's back.\n\ To climb up, press Up on\n\ the Control Stick. To\n\ scurry up quickly, press\n\ -the [A] Button.")) +the Ⓐ Button.") -DEFINE_DIALOG(DIALOG_043, 1, 5, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_043, NO_SOUND, 5, 30, 200, "\ If you jump and hold the\n\ -[A] Button, you can hang on\n\ +Ⓐ Button, you can hang on\n\ to some objects overhead.\n\ It's the same as grabbing\n\ -a flying bird!")) +a flying bird!") -DEFINE_DIALOG(DIALOG_044, 1, 5, 95, 200, _("\ +DEFINE_DIALOG(DIALOG_044, NO_SOUND, 5, 95, 200, "\ Whooo's there? Whooo\n\ woke me up? It's still\n\ daylight--I should be\n\ @@ -552,23 +577,23 @@ sleeping!\n\ Hey, as long as I'm\n\ awake, why not take a\n\ short flight with me?\n\ -Press and hold [A] to grab\n\ -on. Release [A] to let go.\n\ +Press and hold Ⓐ to grab\n\ +on. Release Ⓐ to let go.\n\ I'll take you wherever\n\ you want to go, as long\n\ as my wings hold out.\n\ Watch my shadow, and\n\ -grab on.")) +grab on.") -DEFINE_DIALOG(DIALOG_045, 1, 6, 95, 200, _("\ +DEFINE_DIALOG(DIALOG_045, NO_SOUND, 6, 95, 200, "\ Whew! I'm just about\n\ flapped out. You should\n\ lay off the pasta, Mario!\n\ That's it for now. Press\n\ -[A] to let go. Okay,\n\ -bye byyyyyyeeee!")) +Ⓐ to let go. Okay,\n\ +bye byyyyyyeeee!") -DEFINE_DIALOG(DIALOG_046, 1, 5, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_046, NO_SOUND, 5, 30, 200, "\ You have to master three\n\ important jumping\n\ techniques.\n\ @@ -581,11 +606,11 @@ right, you'll hop, skip,\n\ then jump really high.\n\ Next, go for distance\n\ with the Long Jump. Run,\n\ -press [Z] to crouch then [A]\n\ +press Ⓩ to crouch then Ⓐ\n\ to jump really far.\n\ \n\ To do the Wall Kick, press\n\ -[A] to jump at a wall, then\n\ +Ⓐ to jump at a wall, then\n\ jump again when you hit\n\ the wall.\n\ \n\ @@ -593,19 +618,19 @@ Got that? Triple Jump,\n\ Long Jump, Wall Kick.\n\ Practice, practice,\n\ practice. You don't stand\n\ -a chance without them.")) +a chance without them.") -DEFINE_DIALOG(DIALOG_047, 1, 2, 95, 200, _("\ +DEFINE_DIALOG(DIALOG_047, SOUND_OBJ_BOBOMB_BUDDY_TALK, 2, 95, 200, "\ Hi! I'll prepare the\n\ -cannon for you!")) +cannon for you!") -DEFINE_DIALOG(DIALOG_048, 1, 4, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_048, NO_SOUND, 4, 30, 200, "\ Snow Mountain Summit\n\ Watch for slippery\n\ conditions! Please enter\n\ -the cottage first.")) +the cottage first.") -DEFINE_DIALOG(DIALOG_049, 1, 5, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_049, NO_SOUND, 5, 30, 200, "\ Remember that tricky Wall\n\ Kick jump? It's a\n\ technique you'll have to\n\ @@ -616,12 +641,12 @@ to wall. Press the\n\ Control Stick in the\n\ direction you want to\n\ bounce to gain momentum.\n\ -Practice makes perfect!")) +Practice makes perfect!") -DEFINE_DIALOG(DIALOG_050, 1, 4, 30, 200, _("\ -Hold [Z] to crouch and\n\ +DEFINE_DIALOG(DIALOG_050, NO_SOUND, 4, 30, 200, "\ +Hold Ⓩ to crouch and\n\ slide down a slope.\n\ -Or press [Z] while in the\n\ +Or press Ⓩ while in the\n\ air to Pound the Ground!\n\ If you stop, crouch, then\n\ jump, you'll do a\n\ @@ -630,13 +655,13 @@ Got that?\n\ There's more. Crouch and\n\ then jump to do a\n\ Long Jump! Or crouch and\n\ -walk to...never mind.")) +walk to...never mind.") -DEFINE_DIALOG(DIALOG_051, 1, 6, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_051, NO_SOUND, 6, 30, 200, "\ Climbing's easy! When you\n\ jump at trees, poles or\n\ pillars, you'll grab them\n\ -automatically. Press [A] to\n\ +automatically. Press Ⓐ to\n\ jump off backward.\n\ \n\ To rotate around the\n\ @@ -647,11 +672,11 @@ press Up to do a\n\ handstand!\n\ Jump off from the\n\ handstand for a high,\n\ -stylin' dismount.")) +stylin' dismount.") -DEFINE_DIALOG(DIALOG_052, 1, 5, 30, 200, _("\ -Stop and press [Z] to\n\ -crouch, then press [A]\n\ +DEFINE_DIALOG(DIALOG_052, NO_SOUND, 5, 30, 200, "\ +Stop and press Ⓩ to\n\ +crouch, then press Ⓐ\n\ to do a high, Backward\n\ Somersault!\n\ \n\ @@ -659,9 +684,9 @@ To perform a Side\n\ Somersault, run, do a\n\ sharp U-turn and jump.\n\ You can catch lots of\n\ -air with both jumps.")) +air with both jumps.") -DEFINE_DIALOG(DIALOG_053, 1, 5, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_053, NO_SOUND, 5, 30, 200, "\ Sometimes, if you pass\n\ through a coin ring or\n\ find a secret point in a\n\ @@ -669,16 +694,16 @@ course, a red number will\n\ appear.\n\ If you trigger five red\n\ numbers, a secret Star\n\ -will show up.")) +will show up.") -DEFINE_DIALOG(DIALOG_054, 1, 5, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_054, NO_SOUND, 5, 30, 200, "\ Welcome to the snow\n\ slide! Hop on! To speed\n\ up, press forward on the\n\ Control Stick. To slow\n\ -down, pull back.")) +down, pull back.") -DEFINE_DIALOG(DIALOG_055, 1, 4, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_055, SOUND_OBJ_BIG_PENGUIN_YELL, 4, 30, 200, "\ Hey-ey, Mario, buddy,\n\ howzit goin'? Step right\n\ up. You look like a fast\n\ @@ -690,9 +715,9 @@ you know. Whaddya say?\n\ How about a race?\n\ Ready...\n\ \n\ -//Go//// Don't Go")) +\tGo\t\t Don't Go") -DEFINE_DIALOG(DIALOG_056, 1, 6, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_056, SOUND_OBJ_BIG_PENGUIN_YELL, 6, 30, 200, "\ You brrrr-oke my record!\n\ Unbelievable! I knew\n\ that you were the coolest.\n\ @@ -702,9 +727,9 @@ fastest!\n\ I can't award you a gold\n\ medal, but here, take this\n\ Star instead. You've\n\ -earned it!")) +earned it!") -DEFINE_DIALOG(DIALOG_057, 1, 4, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_057, SOUND_OBJ_BIG_PENGUIN_YELL, 4, 30, 200, "\ Egad! My baby!! Have you\n\ seen my baby??? She's\n\ the most precious baby in\n\ @@ -716,9 +741,9 @@ her.\n\ Let's see...I stopped\n\ for herring and ice cubes,\n\ then I...oohh! I just\n\ -don't know!")) +don't know!") -DEFINE_DIALOG(DIALOG_058, 1, 4, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_058, SOUND_OBJ_BIG_PENGUIN_YELL, 4, 30, 200, "\ You found my precious,\n\ precious baby! Where\n\ have you been? How can\n\ @@ -726,15 +751,15 @@ I ever thank you, Mario?\n\ Oh, I do have this...\n\ ...Star. Here, take it\n\ with my eternal\n\ -gratitude.")) +gratitude.") -DEFINE_DIALOG(DIALOG_059, 1, 4, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_059, SOUND_OBJ_BIG_PENGUIN_YELL, 4, 30, 200, "\ That's not my baby! She\n\ looks nothing like me!\n\ Her parents must be\n\ -worried sick!")) +worried sick!") -DEFINE_DIALOG(DIALOG_060, 1, 4, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_060, NO_SOUND, 4, 30, 200, "\ ATTENTION!\n\ Read Before Diving In!\n\ \n\ @@ -747,30 +772,30 @@ Return to the surface for\n\ air or find an air bubble\n\ or coins to breathe while\n\ underwater.\n\ -Press [A] to swim. Hold [A]\n\ +Press Ⓐ to swim. Hold Ⓐ\n\ to swim slow and steady.\n\ -Tap [A] with smooth timing\n\ +Tap Ⓐ with smooth timing\n\ to gain speed.\n\ Press Up on the\n\ -Control Stick and press [A]\n\ +Control Stick and press Ⓐ\n\ to dive.\n\ \n\ Press Down on the Control\n\ -Stick and press [A] to\n\ +Stick and press Ⓐ to\n\ return to the surface.\n\ \n\ -Hold Down and press [A]\n\ +Hold Down and press Ⓐ\n\ while on the surface near\n\ the edge of the water to\n\ -jump out.")) +jump out.") -DEFINE_DIALOG(DIALOG_061, 1, 4, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_061, NO_SOUND, 4, 30, 200, "\ BRRR! Frostbite Danger!\n\ Do not swim here.\n\ I'm serious.\n\ -/--The Penguin")) + --The Penguin") -DEFINE_DIALOG(DIALOG_062, 1, 3, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_062, NO_SOUND, 3, 30, 200, "\ Hidden inside the green\n\ block is the amazing\n\ Metal Cap.\n\ @@ -782,9 +807,9 @@ breathe while wearing it.\n\ \n\ The only problem:\n\ It is too heavy to\n\ -swim with.")) +swim with.") -DEFINE_DIALOG(DIALOG_063, 1, 5, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_063, NO_SOUND, 5, 30, 200, "\ The Vanish Cap is inside\n\ the blue block. Mr. I.\n\ will be surprised, since\n\ @@ -792,9 +817,9 @@ you'll be invisible when\n\ you wear it!\n\ Even the Big Boo will be\n\ fooled--and you can walk\n\ -through secret walls, too.")) +through secret walls, too.") -DEFINE_DIALOG(DIALOG_064, 1, 5, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_064, NO_SOUND, 5, 30, 200, "\ When you put on the Wing\n\ Cap that comes from a\n\ red block, do the Triple\n\ @@ -803,17 +828,17 @@ the sky.\n\ Use the Control Stick to\n\ guide Mario. Pull back to\n\ to fly up, press forward\n\ -to nose down, and press [Z]\n\ -to land.")) +to nose down, and press Ⓩ\n\ +to land.") -DEFINE_DIALOG(DIALOG_065, 1, 6, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_065, NO_SOUND, 6, 30, 200, "\ Swimming Lessons!\n\ -Tap [A] to do the breast\n\ +Tap Ⓐ to do the breast\n\ stroke. If you time the\n\ taps right, you'll swim\n\ fast.\n\ \n\ -Press and hold [A] to do a\n\ +Press and hold Ⓐ to do a\n\ slow, steady flutter kick.\n\ Press Up on the Control\n\ Stick to dive, and pull\n\ @@ -821,7 +846,7 @@ back on the stick to head\n\ for the surface.\n\ To jump out of the water,\n\ hold Down on the Control\n\ -Stick, then press [A].\n\ +Stick, then press Ⓐ.\n\ Easy as pie, right?\n\ \n\ \n\ @@ -833,9 +858,9 @@ Power Meter runs low.\n\ \n\ And one last thing: You\n\ can't open doors that\n\ -are underwater.")) +are underwater.") -DEFINE_DIALOG(DIALOG_066, 1, 5, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_066, NO_SOUND, 5, 30, 200, "\ Mario, it's Peach!\n\ Please be careful! Bowser\n\ is so wicked! He will try\n\ @@ -843,7 +868,7 @@ to burn you with his\n\ horrible flame breath.\n\ Run around behind and\n\ grab him by the tail with\n\ -the [B] Button. Once you\n\ +the Ⓑ Button. Once you\n\ grab hold, swing him\n\ around in great circles.\n\ Rotate the Control Stick\n\ @@ -851,17 +876,17 @@ to go faster and faster.\n\ The faster you swing him,\n\ the farther he'll fly.\n\ \n\ -Use the [C] Buttons to look\n\ +Use the Ⓒ Buttons to look\n\ around, Mario. You have\n\ to throw Bowser into one\n\ of the bombs in the four\n\ corners.\n\ -Aim well, then press [B]\n\ +Aim well, then press Ⓑ\n\ again to launch Bowser.\n\ Good luck, Mario! Our\n\ -fate is in your hands.")) +fate is in your hands.") -DEFINE_DIALOG(DIALOG_067, 1, 5, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_067, SOUND_OBJ_BOWSER_LAUGH, 5, 30, 200, "\ Tough luck, Mario!\n\ Princess Toadstool isn't\n\ here...Gwa ha ha!! Go\n\ @@ -870,9 +895,9 @@ me by the tail!\n\ You'll never be able to\n\ swing ME around! A wimp\n\ like you won't throw me\n\ -out of here! Never! Ha!")) +out of here! Never! Ha!") -DEFINE_DIALOG(DIALOG_068, 1, 5, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_068, NO_SOUND, 5, 30, 200, "\ It's Lethal Lava Land!\n\ If you catch fire or fall\n\ into a pool of flames,\n\ @@ -880,17 +905,17 @@ you'll be hopping mad, but\n\ don't lose your cool.\n\ You can still control\n\ Mario--just try to keep\n\ -calm!")) +calm!") -DEFINE_DIALOG(DIALOG_069, 1, 6, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_069, NO_SOUND, 6, 30, 200, "\ Sometimes you'll bump into\n\ invisible walls at the\n\ edges of the painting\n\ worlds. If you hit a wall\n\ while flying, you'll bounce\n\ -back.")) +back.") -DEFINE_DIALOG(DIALOG_070, 1, 5, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_070, NO_SOUND, 5, 30, 200, "\ You can return to the\n\ castle's main hall at any\n\ time from the painting\n\ @@ -899,7 +924,7 @@ live.\n\ Just stop, stand still,\n\ press Start to pause the\n\ game, then select\n\ -『Exit Course.』\n\ +“Exit Course.”\n\ \n\ You don't have to collect\n\ all Power Stars in one\n\ @@ -920,9 +945,9 @@ You can, however, collect\n\ any of the remaining\n\ Stars next. You don't\n\ have to recover the one\n\ -described by the hint.")) +described by the hint.") -DEFINE_DIALOG(DIALOG_071, 1, 3, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_071, NO_SOUND, 3, 30, 200, "\ Danger Ahead!\n\ Beware of the strange\n\ cloud! Don't inhale!\n\ @@ -930,16 +955,16 @@ If you feel faint, run for\n\ higher ground and fresh\n\ air!\n\ Circle: Shelter\n\ -Arrow: Entrance-Exit")) +Arrow: Entrance-Exit") -DEFINE_DIALOG(DIALOG_072, 1, 5, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_072, NO_SOUND, 5, 30, 200, "\ High winds ahead!\n\ Pull your Cap down tight.\n\ If it blows off, you'll\n\ have to find it on this\n\ -mountain.")) +mountain.") -DEFINE_DIALOG(DIALOG_073, 1, 4, 95, 200, _("\ +DEFINE_DIALOG(DIALOG_073, NO_SOUND, 4, 95, 200, "\ Aarrgh! Ahoy, matey. I\n\ have sunken treasure,\n\ here, I do.\n\ @@ -954,9 +979,9 @@ ye say?\n\ \n\ I'll never tell!\n\ \n\ -//--The Cap'n")) +\t--The Cap'n") -DEFINE_DIALOG(DIALOG_074, 1, 5, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_074, NO_SOUND, 5, 30, 200, "\ You can grab on to the\n\ edge of a cliff or ledge\n\ with your fingertips and\n\ @@ -966,14 +991,14 @@ To drop from the edge,\n\ either press the Control\n\ Stick in the direction of\n\ Mario's back or press the\n\ -[Z] Button.\n\ +Ⓩ Button.\n\ To get up onto the ledge,\n\ either press Up on the\n\ -Control Stick or press [A]\n\ +Control Stick or press Ⓐ\n\ as soon as you grab the\n\ -ledge to climb up quickly.")) +ledge to climb up quickly.") -DEFINE_DIALOG(DIALOG_075, 1, 5, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_075, NO_SOUND, 5, 30, 200, "\ Mario!! My castle is in\n\ great peril. I know that\n\ Bowser is the cause...and\n\ @@ -1003,9 +1028,9 @@ Retrieve all of the\n\ Power Stars in the castle\n\ and free us from this\n\ awful prison!\n\ -Please!")) +Please!") -DEFINE_DIALOG(DIALOG_076, 1, 6, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_076, NO_SOUND, 6, 30, 200, "\ Thanks to the power of\n\ the Stars, life is\n\ returning to the castle.\n\ @@ -1022,24 +1047,24 @@ And when you go to the\n\ water town, you can flood\n\ it with a high jump into\n\ the painting. Oh, by the\n\ -way, look what I found!")) +way, look what I found!") -DEFINE_DIALOG(DIALOG_077, 1, 2, 150, 200, _("\ +DEFINE_DIALOG(DIALOG_077, NO_SOUND, 2, 150, 200, "\ It is decreed that one\n\ -shall pound the pillars.")) +shall pound the pillars.") -DEFINE_DIALOG(DIALOG_078, 1, 5, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_078, NO_SOUND, 5, 30, 200, "\ Break open the Blue Coin\n\ Block by Pounding the\n\ -Ground with the [Z] Button.\n\ +Ground with the Ⓩ Button.\n\ One Blue Coin is worth\n\ five Yellow Coins.\n\ But you have to hurry!\n\ The coins will disappear\n\ if you're not quick to\n\ -collect them! Too bad.")) +collect them! Too bad.") -DEFINE_DIALOG(DIALOG_079, 1, 4, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_079, SOUND_OBJ_UKIKI_CHATTER_LONG, 4, 30, 200, "\ Owwwuu! Let me go!\n\ Uukee-kee! I was only\n\ teasing! Can't you take\n\ @@ -1050,21 +1075,21 @@ I'll give you something\n\ really good.\n\ So, how about it?\n\ \n\ -//Free him/ Hold on")) +\tFree him Hold on") -DEFINE_DIALOG(DIALOG_080, 1, 1, 30, 200, _("\ -Eeeh hee hee hee!")) +DEFINE_DIALOG(DIALOG_080, SOUND_OBJ_UKIKI_CHATTER_LONG, 1, 30, 200, "\ +Eeeh hee hee hee!") -DEFINE_DIALOG(DIALOG_081, 1, 4, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_081, NO_SOUND, 4, 30, 200, "\ The mystery is of Wet\n\ or Dry.\n\ And where does the\n\ solution lie?\n\ The city welcomes visitors\n\ with the depth they bring\n\ -as they enter.")) +as they enter.") -DEFINE_DIALOG(DIALOG_082, 1, 4, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_082, NO_SOUND, 4, 30, 200, "\ Hold on to your hat! If\n\ you lose it, you'll be\n\ injured easily.\n\ @@ -1084,17 +1109,17 @@ worlds inside the walls?\n\ Yup. It's true. Bowser's\n\ troops are there, too.\n\ Oh, here, take this. I've\n\ -been keeping it for you.")) +been keeping it for you.") -DEFINE_DIALOG(DIALOG_083, 1, 6, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_083, NO_SOUND, 6, 30, 200, "\ There's something strange\n\ about that clock. As you\n\ jump inside, watch the\n\ position of the big hand.\n\ Oh, look what I found!\n\ -Here, Mario, catch!")) +Here, Mario, catch!") -DEFINE_DIALOG(DIALOG_084, 1, 3, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_084, NO_SOUND, 3, 30, 200, "\ Yeeoww! Unhand me,\n\ brute! I'm late, so late,\n\ I must make haste!\n\ @@ -1106,63 +1131,63 @@ Ouch! Take it then! A\n\ gift from Bowser, it was.\n\ Now let me be! I have a\n\ date! I cannot be late\n\ -for tea!")) +for tea!") -DEFINE_DIALOG(DIALOG_085, 1, 5, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_085, SOUND_OBJ_BOO_LAUGH_LONG, 5, 30, 200, "\ You don't stand a ghost\n\ of a chance in this house.\n\ If you walk out of here,\n\ you deserve...\n\ -...a Ghoul Medal...")) +...a Ghoul Medal...") -DEFINE_DIALOG(DIALOG_086, 1, 3, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_086, NO_SOUND, 3, 30, 200, "\ Running around in circles\n\ makes some bad guys roll\n\ -their eyes.")) +their eyes.") -DEFINE_DIALOG(DIALOG_087, 1, 4, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_087, NO_SOUND, 4, 30, 200, "\ Santa Claus isn't the only\n\ one who can go down a\n\ chimney! Come on in!\n\ -/--Cabin Proprietor")) + --Cabin Proprietor") -DEFINE_DIALOG(DIALOG_088, 1, 5, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_088, NO_SOUND, 5, 30, 200, "\ Work Elevator\n\ For those who get off\n\ here: Grab the pole to the\n\ left and slide carefully\n\ -down.")) +down.") -DEFINE_DIALOG(DIALOG_089, 1, 5, 95, 200, _("\ +DEFINE_DIALOG(DIALOG_089, NO_SOUND, 5, 95, 200, "\ Both ways fraught with\n\ danger! Watch your feet!\n\ Those who can't do the\n\ Long Jump, tsk, tsk. Make\n\ your way to the right.\n\ Right: Work Elevator\n\ -/// Cloudy Maze\n\ +\t Cloudy Maze\n\ Left: Black Hole\n\ -///Underground Lake\n\ +\t Underground Lake\n\ \n\ Red Circle: Elevator 2\n\ -//// Underground Lake\n\ -Arrow: You are here")) +\t\t Underground Lake\n\ +Arrow: You are here") -DEFINE_DIALOG(DIALOG_090, 1, 6, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_090, SOUND_OBJ_BOWSER_LAUGH, 6, 30, 200, "\ Bwa ha ha ha!\n\ You've stepped right into\n\ my trap, just as I knew\n\ you would! I warn you,\n\ -『Friend,』 watch your\n\ -step!")) +“Friend,” watch your\n\ +step!") -DEFINE_DIALOG(DIALOG_091, 2, 2, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_091, NO_SOUND, 2, 30, 200, "\ Danger!\n\ Strong Gusts!\n\ But the wind makes a\n\ -comfy ride.")) +comfy ride.") -DEFINE_DIALOG(DIALOG_092, 1, 5, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_092, SOUND_OBJ_BOWSER_LAUGH, 5, 30, 200, "\ Pestering me again, are\n\ you, Mario? Can't you see\n\ that I'm having a merry\n\ @@ -1170,9 +1195,9 @@ little time, making\n\ mischief with my minions?\n\ Now, return those Stars!\n\ My troops in the walls\n\ -need them! Bwa ha ha!")) +need them! Bwa ha ha!") -DEFINE_DIALOG(DIALOG_093, 1, 5, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_093, SOUND_OBJ_BOWSER_LAUGH, 5, 30, 200, "\ Mario! You again! Well\n\ that's just fine--I've\n\ been looking for something\n\ @@ -1185,17 +1210,17 @@ trapped within the\n\ walls...\n\ And you'll never see the\n\ Princess again!\n\ -Bwa ha ha ha!")) +Bwa ha ha ha!") -DEFINE_DIALOG(DIALOG_094, 1, 4, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_094, NO_SOUND, 4, 30, 200, "\ Get a good run up the\n\ slope! Do you remember\n\ the Long Jump? Run, press\n\ -[Z], then jump!")) +Ⓩ, then jump!") -DEFINE_DIALOG(DIALOG_095, 1, 4, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_095, NO_SOUND, 4, 30, 200, "\ To read a sign, stand in\n\ -front of it and press [B],\n\ +front of it and press Ⓑ,\n\ like you did just now.\n\ \n\ When you want to talk to\n\ @@ -1204,9 +1229,9 @@ animal, stand right in\n\ front of it.\n\ Please recover the Stars\n\ that were stolen by\n\ -Bowser in this course.")) +Bowser in this course.") -DEFINE_DIALOG(DIALOG_096, 1, 4, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_096, NO_SOUND, 4, 30, 200, "\ The path is narrow here.\n\ Easy does it! No one is\n\ allowed on top of the\n\ @@ -1216,33 +1241,33 @@ good for you, you won't\n\ wake anyone who's\n\ sleeping!\n\ Move slowly,\n\ -tread lightly.")) +tread lightly.") -DEFINE_DIALOG(DIALOG_097, 1, 5, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_097, NO_SOUND, 5, 30, 200, "\ Don't be a pushover!\n\ If anyone tries to shove\n\ you around, push back!\n\ It's one-on-one, with a\n\ -fiery finish for the loser!")) +fiery finish for the loser!") -DEFINE_DIALOG(DIALOG_098, 1, 2, 95, 200, _("\ +DEFINE_DIALOG(DIALOG_098, SOUND_OBJ_BOO_LAUGH_LONG, 2, 95, 200, "\ Come on in here...\n\ -...heh, heh, heh...")) +...heh, heh, heh...") // unused -DEFINE_DIALOG(DIALOG_099, 1, 5, 95, 200, _("\ +DEFINE_DIALOG(DIALOG_099, SOUND_OBJ_BOO_LAUGH_LONG, 5, 95, 200, "\ Eh he he...\n\ You're mine, now, hee hee!\n\ I'll pass right through\n\ this wall. Can you do\n\ -that? Heh, heh, heh!")) +that? Heh, heh, heh!") -DEFINE_DIALOG(DIALOG_100, 1, 3, 95, 200, _("\ +DEFINE_DIALOG(DIALOG_100, SOUND_OBJ_UKIKI_CHATTER_LONG, 3, 95, 200, "\ Ukkiki...Wakkiki...kee kee!\n\ Ha! I snagged it!\n\ -It's mine! Heeheeheeee!")) +It's mine! Heeheeheeee!") -DEFINE_DIALOG(DIALOG_101, 1, 3, 95, 200, _("\ +DEFINE_DIALOG(DIALOG_101, SOUND_OBJ_UKIKI_CHATTER_LONG, 3, 95, 200, "\ Ackk! Let...go...\n\ You're...choking...me...\n\ Cough...I've been framed!\n\ @@ -1251,9 +1276,9 @@ take it. It's a cool Cap,\n\ but I'll give it back.\n\ I think it looks better on\n\ me than it does on you,\n\ -though! Eeeee! Kee keee!")) +though! Eeeee! Kee keee!") -DEFINE_DIALOG(DIALOG_102, 1, 5, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_102, NO_SOUND, 5, 30, 200, "\ Pssst! The Boos are super\n\ shy. If you look them\n\ in the eyes, they fade\n\ @@ -1262,22 +1287,22 @@ your back, they reappear.\n\ It's no use trying to hit\n\ them when they're fading\n\ away. Instead, sneak up\n\ -behind them and punch.")) +behind them and punch.") -DEFINE_DIALOG(DIALOG_103, 1, 4, 95, 200, _("\ +DEFINE_DIALOG(DIALOG_103, NO_SOUND, 4, 95, 200, "\ Upon four towers\n\ one must alight...\n\ Then at the peak\n\ -shall shine the light...")) +shall shine the light...") -DEFINE_DIALOG(DIALOG_104, 1, 5, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_104, NO_SOUND, 5, 30, 200, "\ The shadowy star in front\n\ -of you is a 『Star\n\ -Marker.』 When you collect\n\ +of you is a “Star\n\ +Marker.” When you collect\n\ all 8 Red Coins, the Star\n\ -will appear here.")) +will appear here.") -DEFINE_DIALOG(DIALOG_105, 1, 3, 95, 200, _("\ +DEFINE_DIALOG(DIALOG_105, SOUND_OBJ_BOBOMB_BUDDY_TALK, 3, 95, 200, "\ Ready for blastoff! Come\n\ on, hop into the cannon!\n\ \n\ @@ -1285,32 +1310,32 @@ You can reach the Star on\n\ the floating island by\n\ using the four cannons.\n\ Use the Control Stick to\n\ -aim, then press [A] to fire.\n\ +aim, then press Ⓐ to fire.\n\ \n\ If you're handy, you can\n\ grab on to trees or poles\n\ -to land.")) +to land.") -DEFINE_DIALOG(DIALOG_106, 1, 2, 95, 200, _("\ +DEFINE_DIALOG(DIALOG_106, SOUND_OBJ_BOBOMB_BUDDY_TALK, 2, 95, 200, "\ Ready for blastoff! Come\n\ -on, hop into the cannon!")) +on, hop into the cannon!") -DEFINE_DIALOG(DIALOG_107, 1, 3, 95, 200, _("\ +DEFINE_DIALOG(DIALOG_107, SOUND_OBJ_BOO_LAUGH_LONG, 3, 95, 200, "\ Ghosts...\n\ ...don't...\n\ ...DIE!\n\ Heh, heh, heh!\n\ Can you get out of here...\n\ -...alive?")) +...alive?") -DEFINE_DIALOG(DIALOG_108, 1, 2, 95, 200, _("\ +DEFINE_DIALOG(DIALOG_108, SOUND_OBJ_BOO_LAUGH_LONG, 2, 95, 200, "\ Boooooo-m! Here comes\n\ the master of mischief,\n\ the tower of terror,\n\ the Big Boo!\n\ -Ka ha ha ha...")) +Ka ha ha ha...") -DEFINE_DIALOG(DIALOG_109, 1, 4, 95, 200, _("\ +DEFINE_DIALOG(DIALOG_109, NO_SOUND, 4, 95, 200, "\ Ooooo Nooooo!\n\ Talk about out-of-body\n\ experiences--my body\n\ @@ -1320,22 +1345,22 @@ headhunters lately??\n\ I could sure use a new\n\ body!\n\ Brrr! My face might\n\ -freeze like this!")) +freeze like this!") -DEFINE_DIALOG(DIALOG_110, 1, 5, 95, 200, _("\ +DEFINE_DIALOG(DIALOG_110, NO_SOUND, 5, 95, 200, "\ I need a good head on my\n\ shoulders. Do you know of\n\ anybody in need of a good\n\ body? Please! I'll follow\n\ -you if you do!")) +you if you do!") -DEFINE_DIALOG(DIALOG_111, 1, 4, 95, 200, _("\ +DEFINE_DIALOG(DIALOG_111, NO_SOUND, 4, 95, 200, "\ Perfect! What a great\n\ new body! Here--this is a\n\ present for you. It's sure\n\ -to warm you up.")) +to warm you up.") -DEFINE_DIALOG(DIALOG_112, 1, 4, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_112, NO_SOUND, 4, 30, 200, "\ Collect as many coins as\n\ possible! They'll refill\n\ your Power Meter.\n\ @@ -1350,17 +1375,17 @@ Spinning Heart.\n\ \n\ The faster you run\n\ through the heart, the\n\ -more power you'll recover.")) +more power you'll recover.") -DEFINE_DIALOG(DIALOG_113, 1, 6, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_113, NO_SOUND, 6, 30, 200, "\ There are special Caps in\n\ the red, green and blue\n\ blocks. Step on the\n\ switches in the hidden\n\ courses to activate the\n\ -Cap Blocks.")) +Cap Blocks.") -DEFINE_DIALOG(DIALOG_114, 1, 5, 95, 200, _("\ +DEFINE_DIALOG(DIALOG_114, SOUND_OBJ2_BOSS_DIALOG_GRUNT, 5, 95, 200, "\ It makes me so mad! We\n\ build your houses, your\n\ castles. We pave your\n\ @@ -1373,16 +1398,16 @@ on me! I think I'll crush\n\ you just for fun!\n\ Do you have a problem\n\ with that? Just try to\n\ -pound me, wimp! Ha!")) +pound me, wimp! Ha!") -DEFINE_DIALOG(DIALOG_115, 1, 5, 95, 200, _("\ +DEFINE_DIALOG(DIALOG_115, SOUND_OBJ2_BOSS_DIALOG_GRUNT, 5, 95, 200, "\ No! Crushed again!\n\ I'm just a stepping stone,\n\ after all. I won't gravel,\n\ er, grovel. Here, you win.\n\ -Take this with you!")) +Take this with you!") -DEFINE_DIALOG(DIALOG_116, 1, 5, 95, 200, _("\ +DEFINE_DIALOG(DIALOG_116, SOUND_OBJ2_BOSS_DIALOG_GRUNT, 5, 95, 200, "\ Whaaa....Whaaat?\n\ Can it be that a\n\ pipsqueak like you has\n\ @@ -1401,9 +1426,9 @@ promised, Mario.\n\ If you want to see me\n\ again, select this Star\n\ from the menu. For now,\n\ -farewell.")) +farewell.") -DEFINE_DIALOG(DIALOG_117, 1, 1, 95, 200, _("\ +DEFINE_DIALOG(DIALOG_117, SOUND_OBJ2_BOSS_DIALOG_GRUNT, 1, 95, 200, "\ Who...walk...here?\n\ Who...break...seal?\n\ Wake..ancient..ones?\n\ @@ -1413,9 +1438,9 @@ We no like...intruders!\n\ Now battle...\n\ ...hand...\n\ ...to...\n\ -...hand!")) +...hand!") -DEFINE_DIALOG(DIALOG_118, 1, 6, 95, 200, _("\ +DEFINE_DIALOG(DIALOG_118, SOUND_OBJ2_BOSS_DIALOG_GRUNT, 6, 95, 200, "\ Grrrrumbbble!\n\ What...happen?\n\ We...crushed like pebble.\n\ @@ -1423,9 +1448,9 @@ You so strong!\n\ You rule ancient pyramid!\n\ For today...\n\ Now, take Star of Power.\n\ -We...sleep...darkness.")) +We...sleep...darkness.") -DEFINE_DIALOG(DIALOG_119, 1, 6, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_119, NO_SOUND, 6, 30, 200, "\ Grrr! I was a bit\n\ careless. This is not as I\n\ had planned...but I still\n\ @@ -1437,9 +1462,9 @@ more Stars from me! I'm\n\ not finished with you yet,\n\ but I'll let you go for\n\ now. You'll pay for this...\n\ -later!")) +later!") -DEFINE_DIALOG(DIALOG_120, 1, 4, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_120, NO_SOUND, 4, 30, 200, "\ Ooowaah! Can it be that\n\ I've lost??? The power of\n\ the Stars has failed me...\n\ @@ -1453,9 +1478,9 @@ your precious Princess,\n\ come to the top of the\n\ tower.\n\ I'll be waiting!\n\ -Gwa ha ha ha!")) +Gwa ha ha ha!") -DEFINE_DIALOG(DIALOG_121, 1, 5, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_121, NO_SOUND, 5, 30, 200, "\ Nooo! It can't be!\n\ You've really beaten me,\n\ Mario?!! I gave those\n\ @@ -1468,55 +1493,55 @@ It's not over yet...\n\ \n\ C'mon troops! Let's watch\n\ the ending together!\n\ -Bwa ha ha!")) +Bwa ha ha!") -DEFINE_DIALOG(DIALOG_122, 1, 4, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_122, NO_SOUND, 4, 30, 200, "\ The Black Hole\n\ Right: Work Elevator\n\ -/// Cloudy Maze\n\ -Left: Underground Lake")) +\t Cloudy Maze\n\ +Left: Underground Lake") -DEFINE_DIALOG(DIALOG_123, 1, 4, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_123, NO_SOUND, 4, 30, 200, "\ Metal Cavern\n\ Right: To Waterfall\n\ -Left: Metal Cap Switch")) +Left: Metal Cap Switch") -DEFINE_DIALOG(DIALOG_124, 1, 4, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_124, NO_SOUND, 4, 30, 200, "\ Work Elevator\n\ Danger!!\n\ Read instructions\n\ thoroughly!\n\ Elevator continues in the\n\ direction of the arrow\n\ -activated.")) +activated.") -DEFINE_DIALOG(DIALOG_125, 1, 3, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_125, NO_SOUND, 3, 30, 200, "\ Hazy Maze-Exit\n\ Danger! Closed.\n\ -Turn back now.")) +Turn back now.") -DEFINE_DIALOG(DIALOG_126, 2, 3, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_126, NO_SOUND, 3, 30, 200, "\ Up: Black Hole\n\ Right: Work Elevator\n\ -/// Hazy Maze")) +\t Hazy Maze") -DEFINE_DIALOG(DIALOG_127, 3, 4, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_127, NO_SOUND, 4, 30, 200, "\ Underground Lake\n\ Right: Metal Cave\n\ Left: Abandoned Mine\n\ -///(Closed)\n\ +\t (Closed)\n\ A gentle sea dragon lives\n\ here. Pound on his back to\n\ make him lower his head.\n\ -Don't become his lunch.")) +Don't become his lunch.") -DEFINE_DIALOG(DIALOG_128, 1, 4, 95, 200, _("\ +DEFINE_DIALOG(DIALOG_128, SOUND_OBJ_KING_BOBOMB_TALK, 4, 95, 200, "\ You must fight with\n\ honor! It is against the\n\ royal rules to throw the\n\ -king out of the ring!")) +king out of the ring!") -DEFINE_DIALOG(DIALOG_129, 1, 5, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_129, NO_SOUND, 5, 30, 200, "\ Welcome to the Vanish\n\ Cap Switch Course! All of\n\ the blue blocks you find\n\ @@ -1526,9 +1551,9 @@ You'll disappear when you\n\ put on the Vanish Cap, so\n\ you'll be able to elude\n\ enemies and walk through\n\ -many things. Try it out!")) +many things. Try it out!") -DEFINE_DIALOG(DIALOG_130, 1, 5, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_130, NO_SOUND, 5, 30, 200, "\ Welcome to the Metal Cap\n\ Switch Course! Once you\n\ step on the Cap Switch,\n\ @@ -1537,9 +1562,9 @@ become solid.\n\ When you turn your body\n\ into metal with the Metal\n\ Cap, you can walk\n\ -underwater! Try it!")) +underwater! Try it!") -DEFINE_DIALOG(DIALOG_131, 1, 5, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_131, NO_SOUND, 5, 30, 200, "\ Welcome to the Wing Cap\n\ Course! Step on the red\n\ switch at the top of the\n\ @@ -1552,16 +1577,16 @@ become solid.\n\ \n\ Try out the Wing Cap! Do\n\ the Triple Jump to take\n\ -off and press [Z] to land.\n\ +off and press Ⓩ to land.\n\ \n\ \n\ Pull back on the Control\n\ Stick to go up and push\n\ forward to nose down,\n\ just as you would when\n\ -flying an airplane.")) +flying an airplane.") -DEFINE_DIALOG(DIALOG_132, 1, 4, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_132, SOUND_OBJ_BIG_PENGUIN_YELL, 4, 30, 200, "\ Whoa, Mario, pal, you\n\ aren't trying to cheat,\n\ are you? Shortcuts aren't\n\ @@ -1569,9 +1594,9 @@ allowed.\n\ Now, I know that you\n\ know better. You're\n\ disqualified! Next time,\n\ -play fair!")) +play fair!") -DEFINE_DIALOG(DIALOG_133, 1, 6, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_133, NO_SOUND, 6, 30, 200, "\ Am I glad to see you! The\n\ Princess...and I...and,\n\ well, everybody...we're all\n\ @@ -1600,9 +1625,9 @@ When you collect eight\n\ Power Stars, you'll be\n\ able to open the door\n\ with the big star. The\n\ -Princess must be inside!")) +Princess must be inside!") -DEFINE_DIALOG(DIALOG_134, 1, 5, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_134, NO_SOUND, 5, 30, 200, "\ The names of the Stars\n\ are also hints for\n\ finding them. They are\n\ @@ -1617,9 +1642,9 @@ After you collect some\n\ Stars, you can try\n\ another course.\n\ We're all waiting for\n\ -your help!")) +your help!") -DEFINE_DIALOG(DIALOG_135, 1, 5, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_135, NO_SOUND, 5, 30, 200, "\ It was Bowser who stole\n\ the Stars. I saw him with\n\ my own eyes!\n\ @@ -1639,9 +1664,9 @@ If you want to see some\n\ of the enemies you've\n\ already defeated, select\n\ the Stars you recovered\n\ -from them.")) +from them.") -DEFINE_DIALOG(DIALOG_136, 1, 6, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_136, NO_SOUND, 6, 30, 200, "\ Wow! You've already\n\ recovered that many\n\ Stars? Way to go, Mario!\n\ @@ -1650,7 +1675,7 @@ of here in no time!\n\ \n\ Be careful, though.\n\ Bowser and his band\n\ -wrote the book on 『bad.』\n\ +wrote the book on “bad.”\n\ Take my advice: When you\n\ need to recover from\n\ injuries, collect coins.\n\ @@ -1670,9 +1695,9 @@ Also, if you fall from\n\ high places, you'll\n\ minimize damage if you\n\ Pound the Ground as you\n\ -land.")) +land.") -DEFINE_DIALOG(DIALOG_137, 1, 6, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_137, NO_SOUND, 6, 30, 200, "\ Thanks, Mario! The castle\n\ is recovering its energy\n\ as you retrieve Power\n\ @@ -1683,30 +1708,30 @@ Oh, by the by, are you\n\ collecting coins? Special\n\ Stars appear when you\n\ collect 100 coins in each\n\ -of the 15 courses!")) +of the 15 courses!") -DEFINE_DIALOG(DIALOG_138, 1, 3, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_138, NO_SOUND, 3, 30, 200, "\ Down: Underground Lake\n\ Left: Black Hole\n\ -Right: Hazy Maze (Closed)")) +Right: Hazy Maze (Closed)") -DEFINE_DIALOG(DIALOG_139, 1, 6, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_139, NO_SOUND, 6, 30, 200, "\ Above: Automatic Elevator\n\ Elevator begins\n\ automatically and follows\n\ pre-set course.\n\ It disappears\n\ -automatically, too.")) +automatically, too.") -DEFINE_DIALOG(DIALOG_140, 1, 6, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_140, NO_SOUND, 6, 30, 200, "\ Elevator Area\n\ Right: Hazy Maze\n\ -/// Entrance\n\ +\t Entrance\n\ Left: Black Hole\n\ -///Elevator 1\n\ -Arrow: You are here")) +\t Elevator 1\n\ +Arrow: You are here") -DEFINE_DIALOG(DIALOG_141, 1, 5, 150, 200, _("\ +DEFINE_DIALOG(DIALOG_141, NO_SOUND, 5, 150, 200, "\ You've recovered one of\n\ the stolen Power Stars!\n\ Now you can open some of\n\ @@ -1721,9 +1746,9 @@ Bowser's troops are still\n\ gaining power, so you\n\ can't give up. Save us,\n\ Mario! Keep searching for\n\ -Stars!")) +Stars!") -DEFINE_DIALOG(DIALOG_142, 1, 5, 150, 200, _("\ +DEFINE_DIALOG(DIALOG_142, NO_SOUND, 5, 150, 200, "\ You've recovered three\n\ Power Stars! Now you can\n\ open any door with a 3\n\ @@ -1733,17 +1758,17 @@ You can come and go from\n\ the open courses as you\n\ please. The enemies ahead\n\ are even meaner, so be\n\ -careful!")) +careful!") -DEFINE_DIALOG(DIALOG_143, 1, 6, 150, 200, _("\ +DEFINE_DIALOG(DIALOG_143, NO_SOUND, 6, 150, 200, "\ You've recovered eight of\n\ the Power Stars! Now you\n\ can open the door with\n\ the big Star! But Bowser\n\ is just ahead...can you\n\ -hear the Princess calling?")) +hear the Princess calling?") -DEFINE_DIALOG(DIALOG_144, 1, 6, 150, 200, _("\ +DEFINE_DIALOG(DIALOG_144, NO_SOUND, 6, 150, 200, "\ You've recovered 30\n\ Power Stars! Now you can\n\ open the door with the\n\ @@ -1760,9 +1785,9 @@ They say that Bowser has\n\ sneaked out of the sea\n\ and into the underground.\n\ Have you finally\n\ -cornered him?")) +cornered him?") -DEFINE_DIALOG(DIALOG_145, 1, 6, 150, 200, _("\ +DEFINE_DIALOG(DIALOG_145, NO_SOUND, 6, 150, 200, "\ You've recovered 50\n\ Power Stars! Now you can\n\ open the Star Door on the\n\ @@ -1776,17 +1801,17 @@ The Caps you get from the\n\ colored blocks are really\n\ helpful.\n\ Hurry along, now. The\n\ -third floor is just ahead.")) +third floor is just ahead.") -DEFINE_DIALOG(DIALOG_146, 1, 6, 150, 200, _("\ +DEFINE_DIALOG(DIALOG_146, NO_SOUND, 6, 150, 200, "\ You've found 70 Power\n\ Stars! The mystery of the\n\ endless stairs is solved,\n\ thanks to you--and is\n\ Bowser ever upset! Now,\n\ -on to the final bout!")) +on to the final bout!") -DEFINE_DIALOG(DIALOG_147, 1, 5, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_147, NO_SOUND, 5, 30, 200, "\ Are you using the Cap\n\ Blocks? You really should,\n\ you know.\n\ @@ -1806,9 +1831,9 @@ The Cap Blocks are a big\n\ help! Red for the Wing\n\ Cap, green for the Metal\n\ Cap, blue for the Vanish\n\ -Cap.")) +Cap.") -DEFINE_DIALOG(DIALOG_148, 1, 6, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_148, NO_SOUND, 6, 30, 200, "\ Snowman Mountain ahead.\n\ Keep out! And don't try\n\ the Triple Jump over the\n\ @@ -1820,9 +1845,9 @@ freezing pond, your power\n\ decreases quickly, and\n\ you won't recover\n\ automatically.\n\ -//--The Snowman")) +\t--The Snowman") -DEFINE_DIALOG(DIALOG_149, 1, 3, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_149, NO_SOUND, 3, 30, 200, "\ Welcome to\n\ Princess Toadstool's\n\ secret slide!\n\ @@ -1833,9 +1858,9 @@ When you slide, press\n\ forward to speed up,\n\ pull back to slow down.\n\ If you slide really\n\ -fast, you'll win the Star!")) +fast, you'll win the Star!") -DEFINE_DIALOG(DIALOG_150, 1, 5, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_150, SOUND_OBJ_WIGGLER_TALK, 5, 30, 200, "\ Waaaa! You've flooded my\n\ house! Wh-why?? Look at\n\ this mess! What am I\n\ @@ -1850,18 +1875,18 @@ Everything's been going\n\ wrong ever since I got\n\ this Star...It's so shiny,\n\ but it makes me feel...\n\ -strange...")) +strange...") -DEFINE_DIALOG(DIALOG_151, 1, 4, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_151, SOUND_OBJ_WIGGLER_TALK, 4, 30, 200, "\ I can't take this\n\ anymore! First you get\n\ me all wet, then you\n\ stomp on me!\n\ Now I'm really, really,\n\ REALLY mad!\n\ -Waaaaaaaaaaaaaaaaa!!!")) +Waaaaaaaaaaaaaaaaa!!!") -DEFINE_DIALOG(DIALOG_152, 1, 3, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_152, SOUND_OBJ_WIGGLER_TALK, 3, 30, 200, "\ Owwch! Uncle! Uncle!\n\ Okay, I give up. Take this\n\ Star!\n\ @@ -1873,18 +1898,18 @@ through my ceiling at\n\ night.\n\ They make me feel...\n\ ...peaceful. Please, come\n\ -back and visit anytime.")) +back and visit anytime.") -DEFINE_DIALOG(DIALOG_153, 1, 4, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_153, NO_SOUND, 4, 30, 200, "\ Hey! Who's there?\n\ What's climbing on me?\n\ Is it an ice ant?\n\ A snow flea?\n\ Whatever it is, it's\n\ bugging me! I think I'll\n\ -blow it away!")) +blow it away!") -DEFINE_DIALOG(DIALOG_154, 1, 5, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_154, NO_SOUND, 5, 30, 200, "\ Hold on to your hat! If\n\ you lose it, you'll be\n\ easily injured. If you\n\ @@ -1898,9 +1923,9 @@ Please help, Mario!\n\ Oh, you know that there\n\ are secret worlds in the\n\ walls as well as in the\n\ -paintings, right?")) +paintings, right?") -DEFINE_DIALOG(DIALOG_155, 1, 6, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_155, NO_SOUND, 6, 30, 200, "\ Thanks to the power of\n\ the Stars, life is\n\ returning to the castle.\n\ @@ -1916,16 +1941,16 @@ reflected in the mirror.\n\ And when you go to the\n\ water town, you can flood\n\ it with a high jump into\n\ -the painting.")) +the painting.") -DEFINE_DIALOG(DIALOG_156, 1, 5, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_156, NO_SOUND, 5, 30, 200, "\ The world inside the\n\ clock is so strange!\n\ When you jump inside,\n\ watch the position of\n\ -the big hand!")) +the big hand!") -DEFINE_DIALOG(DIALOG_157, 1, 5, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_157, NO_SOUND, 5, 30, 200, "\ Watch out! Don't let\n\ yourself be swallowed by\n\ quicksand.\n\ @@ -1937,9 +1962,9 @@ jump, and if your head\n\ goes under, you'll be\n\ smothered.\n\ The dark areas are\n\ -bottomless pits.")) +bottomless pits.") -DEFINE_DIALOG(DIALOG_158, 1, 6, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_158, NO_SOUND, 6, 30, 200, "\ 1. If you jump repeatedly\n\ and time it right, you'll\n\ jump higher and higher.\n\ @@ -1950,34 +1975,23 @@ you can do a Triple Jump.\n\ then jump again when you\n\ hit the wall. You can\n\ bounce to a higher level\n\ -using this Wall Kick.")) +using this Wall Kick.") -DEFINE_DIALOG(DIALOG_159, 1, 6, 30, 200, _("\ -3. If you stop, press [Z]\n\ +DEFINE_DIALOG(DIALOG_159, NO_SOUND, 6, 30, 200, "\ +3. If you stop, press Ⓩ\n\ to crouch, then jump, you\n\ can perform a Backward\n\ Somersault. To do a Long\n\ -Jump, run fast, press [Z],\n\ -then jump.")) +Jump, run fast, press Ⓩ,\n\ +then jump.") -DEFINE_DIALOG(DIALOG_160, 1, 4, 30, 200, _("\ -Press [B] while running\n\ +DEFINE_DIALOG(DIALOG_160, NO_SOUND, 4, 30, 200, "\ +Press Ⓑ while running\n\ fast to do a Body Slide\n\ attack. To stand while\n\ -sliding, press [A] or [B].")) +sliding, press Ⓐ or Ⓑ.") -#ifdef VERSION_EU -#define KEEP_ON_PLAYING ".." -#else -#define KEEP_ON_PLAYING "\n\ -We want you to keep on\n\ -playing, so we have a\n\ -little something for you.\n\ -We hope that you like it!\n\ -Enjoy!!!" -#endif - -DEFINE_DIALOG(DIALOG_161, 1, 4, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_161, SOUND_GENERAL_YOSHI_TALK, 4, 30, 200, "\ Mario!!!\n\ It that really you???\n\ It has been so long since\n\ @@ -1994,15 +2008,19 @@ And saved the Princess?\n\ I knew you could do it!\n\ Now I have a very special\n\ message for you.\n\ -『Thanks for playing Super\n\ +“Thanks for playing Super\n\ Mario 64! This is the\n\ end of the game, but not\n\ -the end of the fun." \ -KEEP_ON_PLAYING "』\n\ +the end of the fun.\n\ +We want you to keep on\n\ +playing, so we have a\n\ +little something for you.\n\ +We hope that you like it!\n\ +Enjoy!!!”\n\ \n\ -The Super Mario 64 Team")) +The Super Mario 64 Team") -DEFINE_DIALOG(DIALOG_162, 1, 4, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_162, NO_SOUND, 4, 30, 200, "\ No, no, no! Not you\n\ again! I'm in a great\n\ hurry, can't you see?\n\ @@ -2014,9 +2032,9 @@ from you...\n\ It's just that I'm in such\n\ a rush. That's it, that's\n\ all. Now, I must be off.\n\ -Owww! Let me go!")) +Owww! Let me go!") -DEFINE_DIALOG(DIALOG_163, 1, 5, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_163, NO_SOUND, 5, 30, 200, "\ Noooo! You've really\n\ beaten me this time,\n\ Mario! I can't stand\n\ @@ -2041,9 +2059,9 @@ Just you wait until next\n\ time. Until then, keep\n\ that Control Stick\n\ smokin'!\n\ -Buwaa ha ha!")) +Buwaa ha ha!") -DEFINE_DIALOG(DIALOG_164, 1, 4, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_164, NO_SOUND, 4, 30, 200, "\ Mario! What's up, pal?\n\ I haven't been on the\n\ slide lately, so I'm out\n\ @@ -2055,45 +2073,45 @@ buddy.\n\ Whaddya say?\n\ Ready...set...\n\ \n\ -//Go//// Don't Go")) +\tGo\t\t Don't Go") -DEFINE_DIALOG(DIALOG_165, 1, 5, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_165, NO_SOUND, 5, 30, 200, "\ I take no responsibility\n\ whatsoever for those who\n\ get dizzy and pass out\n\ from running around\n\ -this post.")) +this post.") -DEFINE_DIALOG(DIALOG_166, 1, 4, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_166, NO_SOUND, 4, 30, 200, "\ I'll be back soon.\n\ I'm out training now,\n\ so come back later.\n\ -//--Koopa the Quick")) +\t--Koopa the Quick") -DEFINE_DIALOG(DIALOG_167, 1, 4, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_167, NO_SOUND, 4, 30, 200, "\ Princess Toadstool's\n\ castle is just ahead.\n\ \n\ \n\ -Press [A] to jump, [Z] to\n\ -crouch, and [B] to punch,\n\ +Press Ⓐ to jump, Ⓩ to\n\ +crouch, and Ⓑ to punch,\n\ read a sign, or grab\n\ something.\n\ -Press [B] again to throw\n\ -something you're holding.")) +Press Ⓑ again to throw\n\ +something you're holding.") -DEFINE_DIALOG(DIALOG_168, 1, 5, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_168, SOUND_OBJ_WIGGLER_TALK, 5, 30, 200, "\ Hey! Knock it off! That's\n\ the second time you've\n\ nailed me. Now you're\n\ asking for it, linguine\n\ -breath!")) +breath!") -DEFINE_DIALOG(DIALOG_169, 1, 4, 30, 200, _("\ +DEFINE_DIALOG(DIALOG_169, NO_SOUND, 4, 30, 200, "\ Keep out!\n\ That means you!\n\ Arrgghh!\n\ \n\ Anyone entering this cave\n\ without permission will\n\ -meet certain disaster.")) +meet certain disaster.") diff --git a/textures/segment2/font_graphics.acute.ia4.png b/textures/segment2/font_graphics.acute.ia4.png new file mode 100644 index 0000000000000000000000000000000000000000..ca8e24a2177b904a9e1d98ca87811fb7b8b8a2f4 GIT binary patch literal 4584 zcmeAS@N?(olHy`uVBq!ia0y~yU=UznVBp|jVPIg0s^2cdz`*psDkP#LD6w3jpeR2r zGbdG{q_QAYA+;hije()!*4t^0)1IjDw0)nG)R*AN(fK&R;Qdp!;y*uIW9O}Vb#Bq6 zNLA+Z4XrwywGN?Hb^lB+^NXC?w{*?3rPDSod@@VhoTtXxJ6bola_jZe-z02KUj8fS ztn%V%&DWxr_D{ChMlNcbSZDC$@2ng1)wA}!`Q5E(XWiM6WTWT&)kvkr??UQ=xuxo)B#~a@bRft!>&82SMFqlEI1} zPfG}W3Z3^ZNbq7$z~|{+{vq!!a<6s&@N#O{GjG?pNipyKc~>gc&YW=DzW&RczfvDJ z-+5K#?4p0OKmFXp;;JB?A)xgu)FZ7-a&o$r6<)w+blf3waWUukI2}$ zHroI6?8BcGRu~G0OR|VzF#Vg0}3>3yWpSegyWL zZM?c{$;{>FjBgI57r30Uc$cni26l^@49&>KM9-vTmB?yLG|Q2>3Q*i z(jSelh;RHX;ud6n@a5q@4}13>?Z3O+?(f|ryZ_2N|F?H8-oHI;SL(mLJ1%{H^h4I| zm-#2*zxB5+9Jwm^pRt~CgWrb47ykol85kHr9g;FudL`JKU=$#uX4oPODac`gq$Y@)iB?8kzdxV@Posyp=tB|UOv9G zkB1)qF0^?5``z9PMUxD4-`aX?URAL7@WZDcPG#=Dn8rIh_Kkwh=X(#XEdN-uFG;fY zrNsJYJMGUWiA-NuvhLKOJu41a36!UY=0zMmw)VYjxBL;mDQOdbc!l}6 z{(Lmq9@)9MyYc1fZH1PL-R0W_gVj_*N|wyDQZKnVeU}K!onRp^;iRu=vsUg9oLW?5 zDfCn6?lQ&v)#qMor>gXK?(sP!yVAy2?pgi*>vrc}`(_u-n*TA>HIW;5GqpB!1xXLdixhgx^ zGDXSWj?1RPsv@@_H?<^Dp&~aYuh^=>RtapbRbH_bNLXJ<0j#7X+g2&UH$cHTzbI9~ zM9)OeK-aY*v&=}zj!VI&C?(A*$i)q6L{Unbtx`rwNr9EVetCJhUb(Seeo?xGK4GRO#s87`^C$wiq3C7Jno3LrBRlk!VTY?YL_6ciMo zhF9bk`1-<)&nt$8LUMktennz|zM-Cher~QlvX0^s*Rm4)I*LOo3sUuiQj7CTi;`1a z%Tn`7l#z`{Nrvk$C@snXdnYAXKQ$*cH#M)MSl>|35XDM&Pu~Ez4p0!JXXX}wbyegR zpr|a#OhW_~if=$NVDBJ1q$0NfZZ3*ynBT#Q!C_?OlAl}(a-OG)trEz7tCalY%oHmy z(>Tf4GA%JFP1i6f$wJq}Bq>cd(bUXT*TBLw#ULfsG%eLK5y>deyyB9?yyR4nQ5Crb zdYPFiR*A+&iK(gPM!E(`NoKkx2BrqONk(ajx<)Cf=E)Yusg@~;#z;o^7iFer<|XDJ zy9#7fN@j|cnT5Hjfr+t^uDPjEs;-HVX|isjv8knQs$pufiLsH1ftj%Z*r=3bE4Tcj z+{6-FrOe#K^i=(VymYVxD8Q{813Yb&jPxK%!6E@Ui6v?IMY*<0;hA|U`Q^n3#UYuw zslg?Qpzt&_Gc~s~F*7x`Fg7-{G_pV_3QH|2&dkpPnQCaD2XzD}Vyyg&GE?(P5=^oqawG!%DE^tu_V7JBtJjLRte+;1tUE}18@RYuz^I2M`m$Jeo>_zI8B3dPH<`= zga^q4IhkN71qE=zwMtBeSW=u=mYM>#NC765oROH9o|FMGaB5^r6L1M`R`@{eL8<+|6iS}IC a%*QZwG7AF>myH>yljZ5^=d#Wzp$P!RYsGp1 literal 0 HcmV?d00001 diff --git a/textures/segment2/font_graphics.amogus.ia4.png b/textures/segment2/font_graphics.amogus.ia4.png new file mode 100644 index 0000000000000000000000000000000000000000..ba22ea77ec44d41e60a4a8c47b5a84b3aa15c41f GIT binary patch literal 4707 zcmeAS@N?(olHy`uVBq!ia0y~yU=UznVBp|jVPIg0s^2cdz`z_>6%tVrlvu7%P?VpR znUkteQdy9ykXn(M#=uZf3NR9{CCjx(c(5-qxH(apTwi}zS_?cu%fZb8oFPnxss z{1RVA-|f@9Rkl93yKL&;FVPeCs&xp@s9x~kBTu5Zz_YV@A|@jKT%2v2i@!bDs{a1m zgbCr5R{A$~8ZJFH-A!C8{k7X`f%osWD7{yEIPFQvHT~bRVwX!5=6w8VShQvD(d+;A zylh?+{q4D}+vbhuB*RqImRP-=Y_)91wuJ2pM|g7iE=>x*!z8|IT2E5MRZ;JSKVOMY z@tP^IgUvN7BqJdHwU?-na{2Ktw&JH7%Ax|!#T@K)n$yarEwL@(L1g$F!w)N4uWh&) zzTM5(C66Uo&0_IRJv-fZm&K3Gh;Gbyc4=FTqxfeZvlO4A&z!~v3pT2UUSpAeTIait z@k~luW!}V|BYLyDU0*y`;n04;;5^4%I>rB18M}v|6Zeq-2F8HJ3R6yKZx&LV$mYO$ z$nC=0?@-mpp7+IYl4EWW|>~Uw4=4{^Wvq;&PL@e4L%<9YNNM*?C!63 zP9F%8KGP$Kr z^UmxE?6EoNn`UQR)@tB#D&<;+5c9zsov9ZNp8M!lGU<2M?8_AokJWph^DU8|RQ>E* zSJdqJ3wH_KE_>*+ivLEf#QU%tr~cfCeZ7$<{9aFO)b7hGe|~wm`@%=%!+W<)+_de( z!Mj<%76*S{I>C6|ZkB)dndS*U+9&uaV)y;jj(<8&X5Pwgky)*NPk4eH+nw7J!*_Da z*89ZqTmJtx_u~71@3Z6|@64aNC-lq8Nrx}gu72VvIHl*jxXS+9*`Ji3>axn1ezt#H zFO|68s4}yqnSp^(Ez{XKz|+|ombn-hD(1|caMtUvgGlTCYxBD_IJ&qCC$`>hlIC6{ zU7t}9xFVBv@#>OGNrs(@o|^j_^B3`7ZdLffVb{=yQ)GHL;HE(%(M?bS(N^JRc_3= z7Z;8u9%wNXWcAHlbWT(E+Y&uV#_vxgGLHo8U75y}=dyE7OrLA*#Ju2%+e4p~PBofv zJR;8QVPC{NGydQE?`O+Df0~wCJdG_fVB52huNOJ)$tPZI|C%1LZ{3NgUw^lC%?z{r zeBQi{G5Kl0;#&J?Qw9cJiOi6Qk_cZPtK|G#y~LFKq*T3%+yVv=u(7WwNKDR7Em25H zP0!4;ReHaBzmh^`img((sjq==fpcm`rbks#YH*cbNODznvSo^ry&acLg;hmvL2hbE zqC!P(PF}H9g{>0UT&uidE0D0hk^)#sNw%$0gl~X?bAC~(f{C7qo`J4wMP`|ik{y?V zO;JjkRgjAt)QF;#G+U*Nl9B=|ef{$Ca=mh6z5JqdeM3u2OML?)eIp~?qLeh<;>x^| z#0uTKVr7sK5Hnm-i<65o3raHc^Atd4CMM;Vme?vOaVaP$Kn<_RE%5b)8=qGU4Ta?V zT>Xl~0)0b01O41wePkWQC9Y*9_;nPAR2HP_2c;J0mlh?bx|XHpl_(<{k&+D8Ur<_< z1NKfzvVLk#YHn&?NwL16o*{~r?w-B@a2=o^NYBhI0PCvAEkIFOl9`4GEEL~>WWe4* zc1T5T0o+^^)iA$<6@$ab$|XO!6y!Wl7h5He{Z=XY$(bouV5X6gfrX)^Ws+`^nW?F+ ziFuN_u7$aUk*={5jSLM^lPq*i zjZKnuO^gf@brTH@&2v$V8i zOWj0cQ*&JtLlYBS3u8+oT}uPAq{KACBn#st6R=S!$yRRpMY)M3wn~|~iRr2O1$pUU z2~dDrIR<#zDjDe+AVdOk5=+wZi*jw1!ZY(y^2>`6QX!eSslg?Qpzt&_Gc~s~H8eLf zFt;=?G_^n|3QH|2&dkpPnQCaDXAChJ6fsu*MVYC2C5fPvYO7=j)=`mLVC7ttnpl!w z6q28xW2*#ml!B3-p#eC7E7(Ay#Ur!0B)_QA4xFaJIVU)^5W<6Gf}BjSl!5{{;aVjo zLo6vyEK5xRTciM!O3p~kOHWO)Re~ldn0O|Z=t@d5v`95dN!2w>GfmbtF*i%rO*AsK z)J--sHcL)3F|#yFN<}rjI6tkVJh3R%F+DY}#8$~YGq(Wj8wCw$U}~bOFV9E?g_MDj zk*c3cV&u^<;WJ1!f2a7hFz zl^_O!N(EYCXgtu;3I&BxOGpae(cl^lE|NlkB*mktYc#k>3IUQ7kESlF1s4~hyOWxi zVyjfHWN&w<%>F+E0|Qf%x4R2Nz`H=O z_Gjz@Y@8yBsi({s7#JKqT^vIsF6a7t3Na{f2rd6_A89SJQ$^g}(b1#v=Sr@Z2IlIr zPCwbFm~!4$m@jF&+40z;X9C*s5*@o6W;rFs&A)T{lJfJ&)8RWnoiR^WKbLh*2~7a| CA^+Mv>Np}=@T))pza^IlRa-`5;#;Q9C$Ir7rK3C%JKk1yx z?iof20*@B6Tgcqs_w55K|4|v|kk3*t`)5t#<+|r;YIDM$uCu+vW;lyw z>74oVrv1I@cYCh7){2+X?s4JA>+Vl{{OLV^-!&H_5ksw9%TuQ(ez@s)+R<|Q)}?R0 zm2v(qoc1mEN~(=SzABp9neJL#wA%KWtk$~5de1Sv@peX%&s)Yzm(nUk^>UW=Jh^dI^vbQU?XoL_ z)Y#VfO_UOSRdQxiQ0tKs?g`GVJ2#zi6MuXrlx@F-P^sC;OGgfF^LrEcV_EC7EtRVi z&pn&5Q_yGTgPff9>A@AH4(}gp2=qq$lGJ{YBzLf_$1(4T0Wnw#g{C%!pEKV_|XVbv0#2RV z{ig8xhUIt5?thNc+UDOIn!PG)@3SZ=^UNLgQCZjaJPqTs+Ay`R;>AQh>pv&lU*5=y zb?T3;esyi{^SHb#V%N%FvSw{r@lnN;=dBy>+O+B1QrA2A(in~@3U%CeXy85DeDj%z zGJjF?&1sU$og|e?4YEx-8WU_fwq8D}_rbGd!f%o72_O5U|7-3vxUkpbo$dDYE4O~| zUiExq)2h5;_Jc1A|9?0XckKMTSV_BA6O z`762WozMQ3*t_7_MxObXKib@we@V2C|DFA^Z`*kGU$|Jf@yQ3-6+d?UDsnzKmw|y% zHPhKSz|+|omO~gAD(1|cu-EHwfJEE;e+!gKgJg~F;OVxG7 zCQD43@<_Hq{acb1N7M8NtQr=-=e>B4AjV&_hhP5w_kGW0R#;E${G7)AXvv8^|1N&W zs(8C*-^E3q&CFJfCojKyaAx_Zntef=e_h%ZceS{F-qeCQ(l3Li&M?tlP^MA#+%+rm z=(V}`?FH?-<{J1peRSF*er#dt?%Vx~Xa4-SWqW4tl(x@sK#Phw~!lneqSL ze?MDZ{ApTl^-Q+NfNfH%ex)$I_upXHayC6;|H>0lzyEIQlH5M$=X2@(43^&l`u=a; z!^XfMSezLWQ4-ZxN)4{^3rViZPPR-@vbW>1sj#ZZEyztRNmQuF&B-gas<2f8 zn`@Ot;j4hQnKSxuqjGOvkG!?gBnqk zl4h%vQBqQ1rLSLJUanVete0Puu5V~*X{m2uq;F)TTa=QfTU?n}l31aeSF8*&0%C?s zYH@N=W( ztB0+w{vfnBtKRGkS3d}T4Hcm55GBVIjGdD@rH8Dyt(M_~8Fx53M zGOBAW{Q6v+nImoU88I_WmVwISjXl7w*YOI@NY-p%!Vw`NM zYiVwts%x5RoMvR0Y;Kg6Xb3hcCE3a?zbH4c#8xRYH!(d`zaTFiECC8|E5`s&TO}hs zh^=6efSkmVwEUu6Tcz;Kyp;U%Vua$5%-q!Al0;B=8k(6K7#f)w8JZgyT38rZAQXkA z78Pga=YdQ$G|)4Km<);-EB~U*)Vz{JP)fB`f;g@sx4_D|C^fMpzbGU>KgU)HU?~L!aKg1pOomueoLH8c0(P1L zOe#4eF)uwe#a0QLq+sHiSfVS{%rG_0*dSRqEjigp*Cf@%T-U-h$yhfr#lXza+%zR6 z$qeERxar0DX(i=}MX8SIsd*)~O75At1z_JOXg~u~6V)~48L6O+Q7YO;6N#+U`fXPD}9Q=zLmW7<$uj+Wh!!yNiDrnJ!QN zG-;KCq``?v7t~+){f@6+_l2G7=_}3El`EI#XzYA;ikJERxl4W1w$*I8e!5KB=FIZn z?me20`p;KS_x@+*f4f;NOX8)ttKGWRe>(y`FTFos0JF`J7(SIvJKeTKQH6%9RKrMjN+9(i99KKfB&5NrRA(UZ$Do@ZF9VG z-JI`rdk!vM{^I!NYhOy=Nbb(qsc_}#tt+|R$2p2*)edb@-w|eZcyU0Y``Q(KYvepy zclNGb%(v>ufvp;sm$-F*TP$z#AnBRy#>4|Q5q+NGk54%_#rJu2^YSdWsOV#^7TfpR zsr}}z-jayoh3qaN{bw9zcQ}eJI`Qyi#5!J8KCt~) zOw;OynQl`acZ9HPo3FL&lD&DO%mUV?u75VoDW8KH1P*RFBq=1oU@ElKX||!XAk#~R zD-W!^pYbs*IVJ2@B&M10SZ3MB&WnntPR;O}aXghxNXwNcr{ENWcDn1oh_WXE!57!8 za`lZ}y-i6~Tz6?ir}xI05q`_U&YW2rRs8YItD|S{uHJqsv>-D}_v)(aQPIt3+0OFD zn{#Zrw$uB3Y_R^_UEgorcKFp}Q!*v-u)A#TrzxGklc!}~PM@2*Tz2J_=ds^6-F{bn z_qNk2T~BTO*wmY!Lc@0l@7}QQ3jd0WuD$$0iW%iuGfa1{T(HB>WCo+eavz1fMh4Ea z2Xl%~&1{Y_xUKa#MB}h0Z`$N0365uTBgF6CP_^r1+j;-dG#&eb$MLGuneMhfiQBn% zvDxGF44EV6f+Za9vMlF+z1#eon0=Xk?XQc6mjC_V^>24qSiR@Or}~fLm&Ao%*027U zV)OS%cYgKMy6dxN@A|TNZ@s=#bk5uR52xL0e|Pvqt+gBXb?-m^f27&v_O8sHuy82@ z1EWf&vvYu_vokDJ;G45=$ri)s$ zQwj|`6;E#Z!M3l{?u=N|1LYqKT-WAF>+1MCK42h!_>5(-{+2f?KBs@idTd@*aL4)o zrTv@4?`I@$JScbDG2+?YgDc&WYxZS@eY|8Cb+)+vn3Kr#g|B>OwpIoRzke1b| znO5p0H^WOcICd;o3GwZ?Iy-CGBexK*lMg+fbe8xw-%opcefsGDspL$_cI%)_Df=`3 z>(RwL~E)H9a%WR_Xoj{Yna% zDYi=CroINg16w1-Ypui3%0DIeEoa6}C!X zbFK1^!3Zj%k|2Q_413-^$jg8E%gnI^o@*ki&D~bi!1X=5-W7`ij_e|K+JGS zElw`VEGWs$&r<-InV6JcT4JlD#HFC105!ZKx4_pIZhT%bG!&BabM-3{3-k^34D@qz z^^tWHm$;Ud;MY+cQdy9yACy|0Us{x$>ROhXSE7t;L`pJTe?e(c4%j;>$@-}|sky0n zCB^!NdWI-gx_kNtz;%FvAU!j;0IaJbw*WsiqdG$!SPNdFB}V}Pfvl98SP zLL?w3u_P_ODA!ggJTosPzq}YB6_S~o8eEbH3Qt2bGfPWj3sZA*6LUigBXfkJu+*aB z%=|o%sfGr6#t@T15o6_Fl$n}Wk_bwvwn~Oz9Tm9+R?bDKi6!|(A^G_^wn`vJDH!P) z8h{hHf(;~EJTi+*@{20%z-bzsbAnR~Av{PX$jJmtDJXywu2o_(#FFB~veXo?MG7#f zSRNa(R(?nepQ}blqq|`K1UGwBLGlS&RRKqk= zi1*;87w4yylqVLYI;N-QmDnn|XXX}weWRcO4NOf`*OX_ZfMjsmKYij zw6sD&Vbl_m!gn;dMuUr_5FknMXzCgbE|NlkB*mkti)z8eh3M|2=B3ywl`GlX?O)IH zoPmLXDaqU2h2ejD|C#*^3=EtF9+AZi4BWyX%*Zfnjsyb(1AB?5uPggA9!7CP)u&tc zMKdrksCl|LhDcmaPLMEpV1Kw?qu2M-|NsC0Pn?nz*dTChN}9{nlN}2g7^d9k{d)eu RLKjev%hT1*Wt~$(697#N;3EJ4 literal 0 HcmV?d00001 diff --git a/textures/segment2/font_graphics.circumflex.ia4.png b/textures/segment2/font_graphics.circumflex.ia4.png new file mode 100644 index 0000000000000000000000000000000000000000..dc3f6150dca23d34ca830acb4df931eca56f48ea GIT binary patch literal 80 zcmeAS@N?(olHy`uVBq!ia0y~yU=UznVBp|jVPIg0s^2cdz`!8x>Eakt5tl5n=E48^ kCOzc^EgZrEVGImsyjXwlTQ8Z)z`(%Z>FVdQ&MBb@0E_7ptpET3 literal 0 HcmV?d00001 diff --git a/textures/segment2/font_graphics.double_low_quote.ia4.png b/textures/segment2/font_graphics.double_low_quote.ia4.png new file mode 100644 index 0000000000000000000000000000000000000000..0e751109529f81ff217dc924dfeaa2b73d67aa2d GIT binary patch literal 4607 zcmeAS@N?(olHy`uVBq!ia0y~yU=UznVBp|jVPIg0s^2cdz`!h66%tVrlvu7%P?VpR znUkteQdy9ykXn(M#=uZ<>+Q7YO?NbS+U`dl)j2pxKx(~`{c2CGz;d+iCWuMHF1&J#>g+x3>a^p-- zigF5l((>P~uDr<5xmSPcyA^k$__wTka9DZmiRE23DwcPjoc`zV%Rs^W|DUVHUp628 z{@3i9xKh=Le>KNn*j<~ou}ereXzn@JSnn9!7oj_5tg}_vvPCkkl`~p(u|-+w;jkCc zx3#<$`|!jxE0t=QWW;X@bnck={XiRAadPBby<;mADiLcnDOjVe~hBuvza+9h9}QTWhFQ~_F1)#CI0Eh znK7(qO42IjCiWb;cGxBK*L$@ItWgVAOgJv7@_ISr5{`AE2PZTztaum_u;}cJUXIQZ z1}%=cszt1fK~MV>EV=w9Zv0%*tLf%Fb?Qag3;m~gR6>N#&1nu`Tq7a+`}m?{eo@ih zRkN;KG0pazlyqszq@|UbV#3`AuS}Y`GgVtpF4lJE&gyTIEV=c3&uT`0n^Ua$Au?fS zLRq7e=G4_!B22G@tgSk`)g))W*z9dr)>NKeTk`HwVf~jYYpc)ieX}K5`)%QM+qc_( z&--q);c8opV0)iQ&W{s|@2r>`G5?hGl^08nbzceDB5nF*R;*e^oVwLaMu~P0g*;(K zGZX)`*}*+FCw@e z=dEAy^{4R_v5k*K&MnDny4?QpE_d}z`!au{8uJh9{$#%hc3#}~{u$5xxJ}&q)#n|) z!2WN3>JQtGfAo25Ra9!GO-z@x`~3gSKmObkjoB&xT1_nmeOlRi+ zPiJRX=3ro`m@{|6S+BzmBCY$kCAo^QxVproJlyu+nBI|Idx;p4tf+&pw0whf(vm!a zy7DiWUu=KrBv8X5?{IKy`XX-ew8saY*2KKCO;20!?nvWF@oxuIT%T3BH?Kap^>WSP zlTy6fEIu^by!~?SSIE5c;aOqvQP);iy*s~I!mUza?&?VjXSr6$cHO?Lv~^9=<8|-n zcBCh%n|Nx}3B7Mq+mcgmE9~DS?_WK8s>aSYH}_?+PcODADU>iu^zm`@p0%RbYj*8Q z@3!;ImW?KALHVm@Hbn>OsZUQ1j9+p)}1OnC3`zAn+mIn+=ATHl0=1y+?>2(s|s5su(?)w#a19; zeI*63l9Fs&r3l{u1?T*tR0R_~6Fmc6*NV(CBPBa71)HLjG^-#NH>eRsDQUJ!86_nJ zR{Hwo<>h+i#(Mch>H3D2mX`VkM*2oZxJ9L6DxATL9Kokz0VGvLrJN5m+d`0m*>9gY1xs+yc0{D5_z82P+1Lk(En+ zaw*7po-VdZAp5OS@{==DtiVje#AFL&%M?pp)3g*bT@&N9G~J{W3uE0>6JwJUBO~LK z6bln1qdfD9OA_;vQ$a>mYA7)8tEn)o0#dE8YP(- zn4}n)B_|so8R1`)nVy-Kn1k#pkWnd_DOTnwW+};LMoGHHDai)9CYGtDx)w%h=DMZ^ zCWc9A=ERcvGOmabj6&3fO51FsbB>#Ju#> z6k8=|l7fk6Vu`MlRLev|6U!uB3xlL2T@y>oB;CYhQ)68V3rhpTv^2}4v?OCx(~I-d zO3D+9QXSJ%^Ga-$+%t0vz`jw?fCi=}s`~PbR8UA67#ZmrnClvvg&3Mz8JSucnkeZ* zyl0~i%G1G6-`eP7gaEkDFjGTJes;jgNvjPAW89P>Y`e3aUr@psd*{3O65xSb`~Coo-!~nFeQ1r zyDYWU|=ut^mS!_#xB4t$v1)T@iztr202d` z#}J9j$q5TA6Iuf5{}~$?7;G?j6wnYoOD~Lp;h7Z&YxY^zH=v%Dr>mdKI;Vst0L0kI AiU0rr literal 0 HcmV?d00001 diff --git a/textures/segment2/font_graphics.eszett.ia4.png b/textures/segment2/font_graphics.eszett.ia4.png new file mode 100644 index 0000000000000000000000000000000000000000..cb3f5abdabdb8f411e9a5cb2da76e6bb2895573d GIT binary patch literal 115 zcmeAS@N?(olHy`uVBq!ia0y~yU=UznVBp|jVPIg0s^2cdz`$VT>Eakt5tqEcHo+z0 za=?p8~pjtpLpzNhAyR)L~>!WAyu0}uA+F`PFTGrLsC(ByIcJ>H{o}WP05tR!|t-VpQd#FPM(%|Iel*Ka@pw2^Sj@rZom6| z*Y?)6+f>%>DVdsjIz0C6va-a#A@>)!iJRJav@W`PMZvUs#)2JwCNmf%mis8=H8M!g zYQFhwiZT1ngl(b6RtC6DkUFErYAA5VdZS*|2Jadn-lF@Drs>!hKCbuDW8Gzbvi8|G z(XEp9&W{z!<{k2QrDjn(IMH{>W*p1WFTavG~e`=e`HJakvz*zvmD|A_HM=_8&Bbwcmi3KMR=D|?)g zRA=)xH|)@pP3gZ^<=ULfynHbAM2n#yt8eC_bDFw*OXMW&_@78*x~#YtV$8aIQH-D5 z@kRSQwy!*KTkErxm*lBr9sSt_{yP4%+yCBwzqP-+=<>}u%j=#^U&|VrYtr=HJwo=t zFJqniAt}0l>!OePte*4px%7Sp5%YlRB@gWnGcfQz9|8>y;bpKhp88yV>qrKIT=SLT%@R_NvxD}#)HnBkIIoLrPyP?DLSrvNfDF)6>a#8yd(OF=;a zYIsF%fv+#z_`G6hC?x0S>Q^Kd=o{)8=;!9@BkL$GaV;ysucJ7mvLIDID784hv?w{% zwJbHSL>bwLlw`R6g3_WKuy<0D^;2_Fb5rw5iuDck3{k9f_w)^b>i`8odS-3`SXV`E z0gB3!%rrz`q4)+Q1NIKGLn?9$;O3&JhWQ<=7#v1cF8Rr&Am@3y*eZeSw@S%R&P=fa zGcA+Tk}Xn<5_OG@Ez@*Oj4aJ{6D`cmbd5}s3{ui8)67#64UvrU%quQQ%u7xM8C8*6 zpqH7MVwG%ek!EI*l%kuQWNDyll9*_rYiVkfrkiMyWR#d@VPtAzl!#=6e^F+7W?o_r zva3KwrDUd9rKA~~CR6#^(o9LRP7?|lMrkNV)8l+ez87C$grCORNfsIN@wsOla z%1tb>Rm#jwOi$G>$V&%HfCAjgF~HMS$wrC_9IXaG*&3O0~v@yIML$uFw31E*^%TiOoPE&wMC1)h&rKhIYDnXMJOgs}ybQznOStME}rRka* z7=WV7G*vgzJk3lu)z~;C)zaA5!qChF)%4>0w370~qEyH9)VvZ~CHKtS0J71;Q>*AR0!B{DL}-6 zT-@xqZ1lk;5vWvx7zipAXo;cmKuaqW6h3IUQ7kEX8C;36pmNK!nS zx~LXhT!`*YYF>)1Qn`}7o$sQycMJ>+OiAAEE)4(M`_JrWU|`@Z@Q5sCVBi)8VMc~o zb0ioT7}!fZeO=j~u?w(h8Tq-sIl{oeAm!=e7$R{wIYDB{ga7~k7nli$iT3dPUzsk; YFm);mLvHTZ51?L_r>mdKI;Vst07nSIV*mgE literal 0 HcmV?d00001 diff --git a/textures/segment2/font_graphics.i_no_dot.ia4.png b/textures/segment2/font_graphics.i_no_dot.ia4.png new file mode 100644 index 0000000000000000000000000000000000000000..31127441ea011559cd40d4e530d1707dd2d83d94 GIT binary patch literal 4606 zcmeAS@N?(olHy`uVBq!ia0y~yU=UznVBp|jVPIg0s^2cdz`)F36%tVrlvu7%P?VpR znUkteQdy9ykXn(M#=uZ<>+Q7MqQ?q6ZU2kAY@1XSRr;EL&bTT4=Hqu(>%7U!c2EA6 ze^z3Hz@!VzDhvPrv^}J6BVydX;+f|1Ee|^-CpGou9}f=mjgI;HbK_mB@=pc6NgXU} zW#-TG`#XEiHf!&Y3zy5=_RM4c{nw#yd2PMH5qD+dMK|-8FRYOgvSWK;63~~LtGRn` z{GogO+wM+#aeVhQvA=e2`0uy9F>RGkeCM=jp_nD}gr7wdn)(*1c?P)j?$hb?u2o<*S)v=b@Orc&ey-3 zT=;L!e=l+Nc$9HiV3O0S%R5)x77FLDvX1e&E+-Imi)a0zmbH@tWp?jM(%!N*&)RFL z4^K?9lBt%-iuK!qTstOKCpfq7+@!OxyYQLTU28yURK0C znR(KVQ#p@iyz374t|&bu@mWLQY|O8T+DDGsOzt&M+ZpN1%abw3^Xk+G(Umo7;f%&} zBj>rRC~y3om=s>Mn=_?ROvCTUaY>cz<%~->)`=dR(7>=_qK4|No|_#LJlGdBU5HeA zui&uij)02$K~1BwdFu?1W~|&~bcC@eCQV_XMJk(FBv-=G6*ug~WUE)K$OyT*WZAk% z?@1z)mrc<*>%DPC1kbW*XU^zG7k+&4>g3tGo2Q?NEXd6AySeH49Ph^SOs82lbBlQ0 ztekH9PU_p1+wZFHc_00@a$}b7)m7JHydSIaes}jiJ8SzLujPGfuOwfex2yF1&gqS7 z%~X0UN|q!Zc9(m)s4VGkK->a1bWO#U^Ukl> z`qMZ>eB)!0b4&7?F1LSt*ShzN{BHi-A2|=Memj1le__6~)NhXP``iEh`m+7z!>2F( z&*s?viGM3^xc@R&e8i>Tov`2QaDd3M`n5;9G&s7NHBv5Ye2}Cj{y(8W(;_DIQP(`zq>=RPj*n=U8Dtk%=1`O+h})NiBZ1gj@3 zHUR=&$!)KEO@oWHwVpgF(D~%D%h&f_*wpL6ryS&xD`&P;3sugtIrG16eQiw0?B27L zVow~eMg^FDSry^7od1`x2ZuP8`N&Q2{+NJ>r5%(GQ`zk9!uLS~AsQn;zFfp39x zYDT68?tx|+m%sQCX6ih6pSa-+*Mm-a&RqMQ#DyTolzXzk?Nn!^p}dKe-g- zJWm%}C6N7ADf!8nDOO-+YFcWFrMZ!TuCZZaqOOUtQJQX2s#%h*rKzz=nxSE0l7)pK zl2M*{#U+V($*CZtDsl_-GBZ=GjFT)(Ez?phbd!xtl66f?ElqVTO;e3^lS~W@k_`>h zQc@F*k&N&!%1qD9OUyxb709TR%oHmli^L=Y3rkB~Bcqg5T@&L(3*9733qxHKO9OLr z6C=~aWTQl|Q7Oq*Zuv#Ii6yp5nYoGSsrm(Z>0k*^fLl2Rc-kr%=@}qI0&)^d((;RP zZI!|^^HTE5ixE;GnYpRKC5fQ$G&D0cw=^*`GPN`^F*dM7(jS&uRGgWg2Qt;rK+hN= z1Bw_c|Dw#)yplvvO0`vj2bGm`QEFmIeo;t%evYjY$WaPLdWHtz1g>BMi58E{;*$KL zN;`0x2IrjM)Itakk_mD$!BPqe;Dl?Hm<+L`II%1>1?+wWm{f8`VqSV`imehfNx{T3 zu|$`Vu~}N8fk}#PQlg=eu8EmRs&1l5TC%QznR%*(d8%QWv5_gN>BaeJCFO}lsgCKX zc_p?=?wPp-VBaWcKm$_~RegCzDk!83jEr;*%ykXTLJZBUjLof#EtT{k-m}pMp=z~ilP^knl5L7DA5<}yGmR2Yzj9Nlc_>KnGXmF7f z0wgIOO?`4Z7IuqO57gE2boFyt=akR{06}=fkN^Mx literal 0 HcmV?d00001 diff --git a/textures/segment2/font_graphics.inverted_exclamation_mark.ia4.png b/textures/segment2/font_graphics.inverted_exclamation_mark.ia4.png new file mode 100644 index 0000000000000000000000000000000000000000..e7c02f890e555fb7ffa1e7a4e54ec08a06fef1a2 GIT binary patch literal 4598 zcmeAS@N?(olHy`uVBq!ia0y~yU=UznVBp|jVPIg0s^2cdz`)E}6%tVrlvu7%P?VpR znUkteQdy9ykXn(M#=uZ<>+Q7YO)}~{ZTBNvr(c*PAar`+&X830$bI!My3fZ64buz|1b4Wn#RQk9`{~^YdzXDsJ`?LRc^(d#p+SvA0EyOdlKwAZ_=E1|JK?}u=73fcK-gVzPi32fqBV$ z6&Edkb3VQ2S@K%R)f$G1S6{|l*?PpZ=^mf><*n>3)65PpHb`8Z7IJ*ux*J@%t8e#3 zX$mu6U*OTp#rtaY`VhgSCvp;NX6)Rgv#>e#nbzd^IaArBCCmy7)^b;i>`Pww)GXgr zC!g#RR)3ph$*t#mRx|qBoMO!nkqJ8=yk=?* zD!Z53zq`%$?Y7_Zz6Wir%~}%`y!Dmo^-DWE5C6RwwE3Ct_Dd_1wZGojx;*c0^}E!B z)x4a_e6pE0K1_7qxpHnq{44e=FP0qZz7n!!w$zfe>728!clxC<98(nPxb4!wdv@~8 zXClh}MU!t%lU(j3>G&$;T80qw!5f{W7mn(Ea4ebhTQ%?CBWCk|kwuA%eowfgy}kU( ztv`~hx^EP6r3aZGe0jL$`=PjJ{dc|P|7AY9{I7rE{p%NQxK~X4d9D6fOhx{Gd*>ey z-(BI`FLCy*$)DBR{|o+W%ue|y|A(*l{+2Im=jatMFfgiSIy(n=Iy=KM1Or3GoVgRu zdL4EUY2AP2k^C#S!iW4R54Sxyw(iak=jLvwTy2TirIW?FJ$XF6KJwNG*Ur#mIq3d@ zQ6#2XZC62}8DGq~<4^Aur?F+_r99fRkH0V|CGPu){a@DKX*GY9v-z0N?#7ds%hq3A z{;6i)qlntfi1n{_+MlnnIMZ9Q%*$t%=mVLq*_V~Ju1R{l?Y^y`eaBq`Kc|nAEA)Gu zPnT_%b{GEqI5U5@naYg*4nP_EnYMi?!b7jxdRN;3WPcuJn`2TzFx5BtQtJ#}PPBd*YUB0T< z?ZZEg)pl#_4}U6kz4qw+_RupXr)Sph`^f#OJRt3Wi*^PB1FuA8NJL45ua8x7ey(0( zN`6wRUPW#J0|?mIR}>^BXQ!4ZB&DWj=GiK}-@RW+Av48RDcsc8z_-9TH6zobswg$M z$}c3jDm&RSMakZd%cjDrBDWwnwIorYA~z?m*s8)-32d%aUa=KOSYJs2tfVB{Rw=?a zK*2e`C{@8k&qU8a*R>+E%t* zm6W&?6cnI_SL7D>`ofLRD~5(ba(=FUMPh-zp`L+$ZmvGEj^Yy6vJ(6{ibE<3QuTvU zi}Op1l2cvFQu9ibk&STo^bLTU0P<3LW^Mu4Qx&-dD3+xp!_^g(7Uh7|q$KO7=A`DP z=9Lud8|oRNs4vM(Lj)FzZ$L6&?;ty*BDVl;K8k9X-@%H(VPxf!pIi#E)YHXQ3FKa@ zl>Fq(6e}>(C^^M4%_PN0*C;J1P1nRYIYrkZDJfak)Y!lvF)h&`)x`6QX!eSslg?QpkOmJGc`0YH!wCa zH8QZYG%`gf3QH|2&dkpPnQCaDXAChpCE3a?zbH4c#8xRYH!(d`zaTFitOXP?R{lkq zsd*)dppWC#|o$StsPE=o--$uA1Y&(E<{0=ZVfNYBs!oWK=qAkpHHSzMA|RA~oJ z)8L#FoLUIsK{7#3CRj>A0i1BH5|bg86epIYrhqL{fJr51B<7{3rr0V$lN3xm6H9a@ zCZ?GunVXpFrX^b#=$fP%CFv%a8Yk%{8Jk)r8CjZ}C8Z>xnqHirR#Ki=le;yoLEP@abQ)TqK16Ns32P7uAA`3(?(4%}cRWDp#_%GmU(q#K6G7l;rL1!tlSn|IB^{1_sUo zkH}&M25w;xW@MN(M}mQYfxX1j*OmPli!`4)>%9d3Mg|53MNb#U5Q)pl2@+c#od0kC qUr|RaByoj;vQv*>Bv)ip1_Q&H3idy<=2+aOtb$7IQ+Wv3u(qp_WG5e{2-I8|;PQUk_wj-t>DL8Bdn%SD0S=FT?Vu<)hz~ z^1r2RsyhBvJ$qyK-8Na=G_}QQ{_I_gwy{mPoscy18^iS?6B{nkZP%M#op{w2@?zsr z-mQU(Z0kHbtwLv+eA^e;+}-J(up#N$u}%I~H$?L`{a6~Bxyf^)9^a(g<9y4e>u;H@ zyRr4|tiwg>9Y&6lYxh)aZ40-bQ7p^4NYvXtiFN;s@C^@-DQ%DHXkUJMQ)zW6?MH+FOA`tqF~2ur-qhi zM|G^09_hZ5B*y(XMB}h$>=`TFB!wAl8~t`|q#de9GtbO*a zCn|pb!fnFVeh;~_MCRD7;a~rz^zR$HuMbzZhX4NGy=dpz<0}np`@a88c_jbJt?(g#%EN6Bj;*`%!@0TJ zDOXz}cIjlXZciRhuaCSn!nHH>SPr^>U=)d|R@+sOXvPagO7X6WMkNT zB!mMmOi+6@=h730R}%#b{QD-l@m!sqwd{f0l+!04M_dtqX(n13of_w^$z0j^`>il8&uaE&lM_vwOqZ|fb^Gv-W3}BH`@^3~U9UZQzdiJf$?2K(`#y5N zDi26I;G&(uz`!e!84^(v;p=0SoS&ls47YguJQ{>uF6ifOi{A8m(KO)W`OsL0L9 zE4HezRRWu9l~-&964qBz04piUwpEJo4N!2-FG^J~(KFFA&~>fIEHhHF<5I9GN=dT{ za&dziQIwKqtCUevQedU8UtV6WS8lAAUzDzIXlZGwZ(yWvWTab^lBQc+nOBlnp_^B% z3^D>@hD&O3a#3bMNoIbY0?5q7r2NtnTO}nf1qB7D;T5?BzP@nd^NOLNker{ZUy)d# zZ>VRWpPQ?XtfRQZwX6icj^dEYf>iyW)Z+ZoqU2Q9vedj1Wn?4VJ$(b(KSg*OwlzlO-t5I zGBi!nH88YDGE7S|urM-CK{CoSuec;JFF6%tR7GxqUS?*Bm1S~TVxozeg|2~tshO@x zN?Nk6Ws+s0u4P)1iJ_r^MY5qmB9amQMVaZDd5Jm5t^ygAl9^&m}qVRHVPCER*nIlwn|2N1_+UWoWzo}{Gwc2rSQzW zl>G8ygj7goZfbBzA}H7l%}fmq%neM;W@=tZA}FQWDj9;sD{>30oQqNuOY)0C^7C_S zl|ZglFw!$L04Hz-8%VTxWEPj?7ggGU(=<5e1g924c#uqxlL?kmPyi=ftHfl8CB=zl zsgO8PfJr51B<7{3rr0V$lN3xm6H9cZ87G@2rW#r5nx=xH%PcKX*V4kkP&e5;DcLkB zF(u7B2@=L|(~I-dO3D+9QXSJ%^Ga-$+%t0vz`jw?fQGUr*xPXRZ6~NYlbH(fx29tu6{1-oD!MTGi^J^X#xN7rsikOYz@iVNv@!yu8G1o2J*Wdp%$L33Ww$Nhl zfYbk8zT9B{JG1hG3#;zm2Pa+|Zm{EfQt{)vy8E7RBaz-RYni8qCw{PVXm8%6pY3_` z?PH;9x$AH5bh%$&oOw|`wf>h`%6iR59G}%xxbG>oGf3L=1sNQu&=*Sd5V|OKW%K`n zww67oE`LqYc;%c`lljHrX_oCptE27dQ4{%vE4_+#y_){F@k^$|x*vZGi@q#A+W%Me ztiDFoseeDd-rIBDG+9(tZHbj^x7Bou=nc_=NiE+PGBXYTi0I`^>v?qJs%Z2=-O|WF zt<_FZ?;mRj^v3*}r~M*H?qpk!W8R)bHnuDMOJ4bWh@3b7VCVrK z_i4ukPkOxBwL4;J-F+4#M{XX`uXSuEZ#`ttbjoOz5E5W86=NiB#9d-nhm0hlm17Pyji$tQDErgS-aA7 zJ%fB^1#L3XJDQYaI3vo)cze##ql;Ioo0p%DGfF?WbfsnL>3PL^tcKh+;%D>>G*X|2 zUfYosaXD-C`bu5V+sluwG7ViFSFGDR+vJYCu4(qYB5mp18(z_OO1x+1?t8knBxkGM z!sF{~OJCnB))(K({Cas&vy|+Wib+y!Wr5D?Z@z3gR=TKJvZ1hp<&l{{g7fEuZ5BsQ zG~Y?smU3)mK%0l`87bZ*1qt({w_YoqUOP|cvW$>U9+Fq6<52i?cKl7 zs`Ksg0+mw1Id(nyaW_u?*j&Bl_bulAlDnhh`*!KyKD+b6$Lg{jwtstfe-O?(_U40d zR$5=3)7gwR>&y3M9fH_nq(|?o)iikNOpVE$z)G|79(^Z})e3 z&xb6Y?LmD188_)&cxbZ0bu$A4qjILRbAYF_Gc4yYFjUN$J7KTa;RKPk`BxSxl?KVU zs5ECU?4B9(=iq~Y6`3rngJ&&?@JaFr>MDOQ_r=i?0T%s(+yMpO{w`{6j)u{aUlt^9dj$EN{4N#d|iF~5&K5jrI9LiLhoHOQ*OMe$~5AxH#uuM*J8KC ztbIl7(~W=eY>+fg_HuF!Hw}Ky(q0=ny{Vzv%js%M#NM50T6r!@r^NKR?DM#8@+0?p z9rMnfrG`_d74A@;y6ofOKkvWaI$pUqGgtT10*+VLCT%jEdEmG5n*M~xlGoNr?+L5l zzc%sM%JhFfkLfe<1r*)t{lA}qfmb3kB%&n3*T*V3KUXg?B|j-uuOhdA0R(L9D+&^m zvr|hHl2X$%^K6yg@7}MZkeOnu6mIHk;9KCFnvv;IRg@ZBspan zW~5}trC?K(l4cd;;s!OMC?(BSDWjyMz)D}gyu4hm+*mKaC|%#s($Z4jz)0W7NVg~@ zO}Dr*uOzWTH?LS3WCX+vm(=3qqRfJl%=|nBkeP`|`K2YcN=jS`3JOreD{>2bec{IE z6+=TIIX_pwBC$ZVR8Vx_yMZvb2eCAp#4< zHy|0XcaR-Yky`*a7ezJ9?_kB?FtT#VPc8*H&(pb};8uAX>iU7PA!D+AekU16D*~m z08Y48iOCR4iWAFHQ@|D}z@(Bh67$kiQ*4!>NeU*Oi6y!W5|dI)lT0miP0Y+pbxl&z z%ycbH&5U#nQqvO6&CCo;l9N+WO)t(*D=AMbN_9+6%`350a?i{y0Q*Kk0~(l`sOrlz zQb8eQU}U6gXryak5@Kj#Wo&3=Xr!bM@t%!7C{M$DYom`59uNgcg@7HG0z@px#m$b( zMju=ffl4KafuK@>mKYijw6sD&Vbl_m!gn;dMuUr_5FknMXzCgbE|NlkB*mkti)z8e zh3M|2=B3ywl`GlXHA=28WME)mO7eDhVff$Pe`Y@e0|RG)M`SSr1Gg{;GcwGYBf-GH zz+U3%>&pI&hlNp|r@55jH3I{Kji-xah{WaAK1VJF2M#9PKmWU1?|O3w9X#hNxrTwk zft|UnRdbKp$HvW<^j0*j3KGwlH2LbP0l+XkK D(~REr literal 0 HcmV?d00001 diff --git a/textures/segment2/font_graphics.plus.ia4.png b/textures/segment2/font_graphics.plus.ia4.png new file mode 100644 index 0000000000000000000000000000000000000000..b6b8839153c15c43f084233b2aa2009dbdf47b59 GIT binary patch literal 5553 zcmeAS@N?(olHy`uVBq!ia0y~yU=UznVBp|jVPIg0s^2cdz`(3s6%tVrlvu7%P?VpR znUkteQdy9ykXn(M#=uZ^nIH#+9)&keCw=8qr#5={2E zaO&fWms|GtTrPXu$yN31+{EjjkJkNGI(~WoeM>9mlOac5Y`Gk0C(9|X|Dq(IFEdwj z_ul!3?)7hrUH0Pm-eqdrYU1bKv3Ga=HY+J$#_kC@D_s2;jq>?|E(l&x@?h^tv+r80 zwlJ7e=#z&3b#3R1GlCvFFP7H2eouBS_v!+F?N6CX<(_`mzdfutkW}T7y7XV{lNagz z`N#LJSJ&8e`rn@88Fts^7_^lVX zW^b1YGjV_7W{}!sJnQwNn?m#cCiLtS?MT!6dqT9t@O+B%F%|Rd8I6p+#w<)o6ad z{zNNbnepl3?i7_W`IRm03A-2}CKfSt|&wn5dz8tLJ9N1P}HF zOfPjNmJ29^<_Vk(RB7z}%+u@NGfh)F*&;!vUD9KPis6QnK@8e%M}KX65#j9Wx_FhE zY3bRhNlRv!EKSLj>pFTQ$zW?rTHejBZufBiym#~VrkrbX4lX`5&GvZ=SCUwT-j7`e z7EGC2e)I9VME~7y_dVYmqBCD=^|g?-RcE)F|F0uOhr`%igYx{ywi- zG9t_QP=~X-lv&M_z;##r*2td{zVc$pvF>iJ=qZ7flOq><@~|YUUvm^MYvf-v`Ofwotlj2!euNe!E~=h%$33rq z#nzwFtGaJ& z|3C8V{S`d_oz9ks|7)F9>#|K;4{M-uNf5*-CY)X^c`moyS-mMQ&f6i|^aoXx$ zicPD0yAR)f#T-nleRns>}N6k=0^QiTUxi5~E2(aiM>{YYY+2nqjziZ89>({~6cJUi~_HF46|9fYC zx@J$8gH`xa$7$0OWV_~O&Xf$>Sa|)r-x1@DvTB(cbwcmkJTq>*sq(bptg|_r8x>e} z)42Akncnk~7fHq`hi1%}w9O>+xkx+nO7Fh&%&d(jYC-v{W=@I@R8*gy92mdk_LV2O zp_Q>qd7c_ho9?+oed6+yhyT3)e(SjF*38^<#`fP=hXr4i=zZ{4@EY5Oe>|(rO(V7U z-w!i>9Af;x=CL?Se?ajcWitT=27xJ=ArU1JzCKpT`MG+DDfvmMdKI|^3?N`*Ur~^l zoSj;tkd&I9nP;o?e)oPQh0GLNrEpVU1K$GY)Qn7zs-o23D!-8As_bOT6eW8*E}IIg zirj+S)RIJnirk#MVyg;UC9t_xdBs*BVSOb9u#%E&Tcrr!00rm#qErPFJrg|xUDt}t zG9x8BE(M#Slr*a#7dNO8MJZ{vN*N_31y=g{<>lpi<;HsXMd|v6mX?*7iAWdWaj57fXqxx$}cUkRZ`+oP*8vxUXfei>kBtN zuNWE%$@#hZ6^RA?&D<7DGB(Lw-`BDv(hrAfu8K z%`8k!jdhcZ4GncojFU}uEzQkSbxl)^(~Jz0&5hC$4Z%jGBwM-V7v(0F*eYe_CZ?zA z7v!abB|rgg8UBUO3)+)6VJpFU8!bt|`w* z1%;G>k&&)}v96I(h>?MniJ6s&rIJ4Fy=P&XlAL62X{Kvpl$fGxVqu!7Ymt;_u4|rR znq**ZU|?a828lhYde79r%EX)=-ZM-!NH#MzG0`)1Qn`}7 zT?^0QKMV{EOiAAEE)4(M`_JrWU|`@Z@Q5sCVBi)8VMc~ob0ioT7}!fZeO=j~G0QU; zaC5ge#4<22SbMrShDcmaPEcTw2;5mO0Rj;dTxMKQ`R^Q2zrZU{L|_Bcs>k+Db66t} n%8O{Ggl||d^Q(Nn@+RI&Nq04P+U`fXPD}9Q=zN-B5W2ZJvaZhH_{-v#C4N7}`(uG_5)WsT zrM<20&)XKc<+D~SSS~M887utzuS=izetV6mwv>t^FSabz(04uboJE)QDNnZd&9})M zzYDj$6fD{b%}NTG!LN8Tpj(GMWsl5~gr>lJAw`c#7p_NkKY7Y2 z^hwMAI`hs8?W;d7y&yYv^>>HY$FyuNb?tF^qImLUR(v1(rRyPSuk0iG_Epu`zq8x_ z;G*-lgMI= zvEO!N-?*H&`+cRp=n=c;ivUN`um*i~K zTX=k(ZRzWK#ron~TfeT{kNkM`?>1|1}_zxAU6SdvZ8!C?X{+|{j@#3D!_cL!rx0=;C zmkL??KlFH|W>GuCe$R&KA2(NL9Zna1zwN*Fuk|8d_r}NGkK4q({^)#@+D(7LrT4u& zYbyOuVV(ZopH}YsIlpb>z5n^K-OcO6N>B*Ba)H z#_Nj?YnkP_-`n`ZF~>bqtaJVm>p&?Ju?ke z7cNpid&Tl#qW`NPfdYR|4d0Hdv$K~yatk?i@~MZ3&`UGk%IMO24w}i8K2KAH-g!LD z{ABR|_ug-XarsfRyKOX@c3lnIswP}f-(o6%ZGPg{U5eRHzu%Thn^W~{e*PaODYbyQ z=5UE43=9HOGD9LtB7A+UlJj%*5>xV%QuQiw3m8Da#=fE;F*!T6L?J0PJu}Z%>HY5g zN(z}Nwo2iqz6QPp&Z!xh9#uuD!Bu`C$yM3OmMKd1c3d_URu#Dgxv3?I3Kh9IdBs*0 zwn|`gt@4VkK*IV;3ScEA*|tg%z5xo(`9-M;CVD1%2D+{lnPo;wc3cWJMJZ`kK`w4k zBZ^YeY?U%fN(!v>^~=l4^~#O)@{7{-4J|D#^$m>ljf`}QQqpvbEAvVcD|GXUl|e>8 z%y3C9PAq z!~70b3=ShJm;B^Xkn=oUY?VOvTczYDXQo(zna0V+X{Jd=2D)kHCds-cMkyw`iIxVY zx&}rj7OBamrirPk#z;na<`tJD<|U_sjH<{j(96tBu`)F@O*Jt~OVUkEGBMIMF|{<( zwMa5a)ip3rPE0c}GfPcMG(a-KzbG?3GcPd**;OE;QZiGl5|b0nEKE&}b(4$@4RuY7 zlTCFk&COGFO;e52j0}^_jnWbg!A7MdTe;;I`R!kg0|Sdd3iwK@nr+UzC}eSCR-yskTZG$5rGOSUDG^CYIzEh2-bw*eZdX zpkSnDXaG*&3O0~v@yIML$uFw31E*^%TiOo zPE&wMC1)h&rKhIYDnXMJOgs}ybfuaZrluJiBn5fcm>HUz zrlcg9LA(Jsy*NLuq&%@G)iFIauf$f#Ju|le>>C9QXkcohx~4oM6%L!xvqJNX_A4tfq{iV8YK3p z>OE5fD-&~ic+W7^Alb~=#6;I1(b81c#5l=7*CNF@O*h%l&?42;%rMm`%@Q>>s1bXn zMplMq^zfdgVWOc$nu(>ZrEwxCaT=NFCK($g>Y61c8d@4#m>VaVr_sQB##SZ<^zfdM zk%>vNp^=4dTB<>ku1Rv5rLJXKQj%_(skynKNs5t~MUn~Cyk}^nYhV&$Xl7+~u*yv-FMGyr@6|fzb0z@px#m$b(MjzY?0JR99nHf|i(-1?;KpNVhpr9~n z2}$8Q8eF5nMN$Zmq z+ueoXe|!I#{R|8YoCO|{#S9GG!XV7ZFl&wk0|NtliKnkC`!gOEW()Oi9rG73Ffa&v qx;TbNTux4q(D?BD|NQ^W?m`U7X2Rzs@?AARLmQs1elF{r5}E*W!nj2M literal 0 HcmV?d00001 diff --git a/textures/segment2/font_graphics.tilde_diacritic.ia4.png b/textures/segment2/font_graphics.tilde_diacritic.ia4.png new file mode 100644 index 0000000000000000000000000000000000000000..a7035d2b9b5f42b1e9bd8bf0db17a5af4a87a5b3 GIT binary patch literal 4591 zcmeAS@N?(olHy`uVBq!ia0y~yU=UznVBp|jVPIg0s^2cdz`)F16%tVrlvu7%P?VpR znUkteQdy9ykXn(M#=uZ<>+Q6_Nsl#n+U{E(l{+{|K0KRZEwk)Hs}>Z!x4pQFb^g4})O{gOG*3R&vzPT>;xAnE{k*(w`u?gv z7J0>c6&EdkbKLm(hn?4YLbt?BcvYnPYTJ>k&G-1kAKnsn(w_Y=aK?sE?N!O) zI~aPvNBMN2ip_$t4<|>1RAZEZ7P1IaD_oT{pi1qZ*DmIx^7-2 zW?H)TR@ao6EmM+I^^T?`S%~` z;XeCDR`8`W!Ra&2YOmdVcSUcF{#V|tlEBBVS|V@#co(Oc3yWOuWHV-XJcaX!u0Vow zvBB**Mb8w(&ulwoA$p1{Fko%Ts&w|LWiNb@C6TI{!D@GhUy&uwa6HsB#%ux`x^5X z@o#Qb_`zY<(6sfr8#ni53xhMq4T{g*;nub0yj)bre`$@D%=ZiXzpQ`rO*;2l#DOGp zj?;V0Exu;-oDV;%8E56Ty7Jxmh@MAAA#*i18|Z6o;5%|RbETAH@h;8IO|Q$nrau885-0+HRDVF@*>$d<3j z6;ArPY}U#hf>VQvEQBhRVlO|~9{T(1Q==)zBBG8x>`!~Eg{L5G;-n>HhZ(a0ZpY8L0K9}ClaKkDfR&?IlTm}YSiOi6Qk_cZP ztK|G#y~LFKq*T3%+yVv=u(7WwNKDR7Em25HP0!4;ReHaBzmh^`img((sjq==fpcm` zrbks#YH*cbNODznvSo^ry&acLg;hmvL2hbEqC!P(PF}H9g{>0UT&uidE0D0hk^)#s zNw%$0gl~X?bAC~(f{C7qo`J4wMP`|ik{y?VO;JjkRgjAt)QF;#G+U*Nl9B=|ef{$C za=mh6z5JqdeM3u2OML?)eIp~?qLeh<;>x^|#0uTKVr7sK5Hnm-i<65o3raHc^Atd4 zCMM;Vme?vOaVaP$Kn<_RE%5b)8=qGU4Ta?VT>Xl~0)0b01O41wePkWQC9Y*9_;nPA zR2HP_2c;J0mlh?bx|XHpl_(<{k&+D8Ur<_<1NKfzvVLk#YHn&?NwL16o*{~r?w-B@ za2=o^NYBhI0PCvAEkIFOl9`4GEEL~>WWe4*c1T5T0o+^^)iA$<6@$ab$|XO!6y!Wl z7h5He{Z=XY$(bouV5W&ha*9P#vXO3TnyHztNvfHtZjz~al5Uc*QIff#p_#E+vMG{L zo_WP3iFwJXAfqaB3-mHGQ>@Yw(-JKVQ&M$}O;ap%O;XbmbrX|J&2=qJ43msg4U9}v z%?yx?@Gr_t&&*5AL3S0$sFchUE0aW13xi~XR9yp$G*ev@6LWLjBnwLm-84(%WD^Tx z3sVydL$FaP$yRRpMY)M3wn~|~iRr2O1$pUU2~dDrIR<#zDjDfPYz2!1Bu+tP^Qpp*KdFiPswo1?> z1ryK25?vN4iN=ZMhDo{>$;k$~CI)5(x=D#?mbz)iDJiCwDHcf<=EkU|7w4yylqVLY zI;N-QmDnn|XXX}weWRcO4NOf`_2n6mdKI;Vst0Qe=!9smFU literal 0 HcmV?d00001 diff --git a/textures/segment2/font_graphics.umlaut.ia4.png b/textures/segment2/font_graphics.umlaut.ia4.png new file mode 100644 index 0000000000000000000000000000000000000000..91a8688bb978fa6cf14a4e59d20d2d3172f88e87 GIT binary patch literal 75 zcmeAS@N?(olHy`uVBq!ia0y~yU=UznVBp|jVPIg0s^2cdz`!8n>Eakt5tl5n=E47Z fuUNN9oD8N9ng8l9V)S8PU|{fc^>bP0l+XkKE1nVS literal 0 HcmV?d00001 diff --git a/textures/segment2/segment2.ampersand.rgba16.png b/textures/segment2/segment2.ampersand.rgba16.png index b8151f118bafece4bdbe72437395d2e677aaf4cf..82fc1ce23a2f4a9cb1f8707199a8d9c1d62f018b 100644 GIT binary patch delta 329 zcmdnP_?T&eay_G#r;B4qMO^Zq|NrfoRU23%jg^&^<1RN$Gh7tSR?g`2xt?>uB>8|d zj7uCNCNwsFv~tnjrRZ})?cep5EQU-Wha~2o|8+N3iyUQOo1o^mz-dCSe#15qgq9_**{{40SolBEf$f56&)x$Y5?L(&*jsoVjANJ`#T)X0d6Co-jx~*pi#T<- ziX|tc>7*t!>|_$`$Y4BS!Mnm&;1$;r4c5#w2PO{Y38K!T2HThw$Z;uvCadTsDUp#usWLjV5Hzj^uH zh1Aui^S!(T&UYMk*qQyg)=NXlN$NU-fzBb9^>GgE8?SO%WJ~|Ke59B^?QO~AM_j*q zCD*kx{f{|Yyk=5CVA<^FZtp`I?_3P$pY>=#f129ujV1SDq?Wx*s_o(q4$+mqI-$Oq Qfq{X+)78&qol`;+01dc9-2eap diff --git a/textures/segment2/segment2.beta_key.rgba16.png b/textures/segment2/segment2.beta_key.rgba16.png index 7f9ba2c5d961dc04c024ce7247c13c64cb59908e..fcc87afc29a49ecb632aaa392816e754447501e1 100644 GIT binary patch delta 182 zcmX@cc!_a>O8rbv7srr_xa1TE*8h?n%muYR9{>w7Z1;c15W(RO?j-@4Xk2j zQo02jr8u^W-el0(=oE5dp}S_7uL!#mH|NHVIlnfjrS3^isF*#in65ak?wwaA(6n;uM^ZzpoA zMWwh#DWKPOIm>tM6~Dw!s>HJjocVPx!+TMS<-f}BTpyzVEFZ)f#KD828IvEK*|_F1Ttn}VEoO%@b@=N>_3B15Ca1rjLX2l z@RE^%flr!&fzh0S;mfuE49`x0Bq0X7f{O4w1xVPg!0}~h65GJT{1_mi-28N%%7#Kjl{|D6! zk_2h~|CNE^$43y4fk8-~fkEB{!e(G#fEn?A?4BX-j48pQteJl)r|9}|`e?K!YJZ5BIcyp0~;rdzz1}#4Z20;!61~z_({EsIL z4BWg7U?&RbFfecmfyG%EzP$r87})t37Lw>uEdXQ;nH zF5uv0VBivAVEFeFA_pRw*%%mZzhGea{E~s;|1SoH?+}->FucABl7?U@Sq27>W)P3@ zKg9pi1`G_(t}-zEe8a%N@SlOn@aqQy1HUK(!-H!K3^G~_4A(Y5^)Nt_GKkB-!@$6Bg@NIYJOcwG zBLf37GXujfaj*>7&x~vg4D2ir&6m0u7#JY21a-kH1_lN`P_FsU@b5eW!wWtJhVO3} z7}!J^7$ia7;9y|*^pt_&@eu}w7b`)AGJ-8*&;dEp2_%4y|1&T^!-L^F0|NsnN?(H1 dfIJ1F;rPGuDvb-vZf1c5JYD@<);T3K0RXxay3GIp diff --git a/textures/segment2/segment2.decimal_point.rgba16.png b/textures/segment2/segment2.decimal_point.rgba16.png index b3a58b8098674f7113d985b1940de9c0a2323b31..1be0f835f50639f1a7765df0aa7687a0b32e13d0 100644 GIT binary patch literal 4782 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4mJh`2Kmqb6B!toJ*q+?N`ey06$*;-(=u~X z6-p`#QWa7wGSe6sDsH_EkK81q$@AyAh#k`;0iojyBb1)871yY5-4d@a=iZdG2SZw6@;%yKjpjwMzDDb3?G69?ZEs3jrBwDsa8m7Q%ZEqhK~ zeyiD$u`b}U_hRd?JfXeU+TFJa%~$(0;Ym$){43^{&h2;pdw{A`6Sh1%x?6S6?`F&EK?+@Ur$rwn#hrAM=-wH6n5XB0&E!?pP3u4X(1~N^d3EYj zloD&_UA_+Am&g4StS>S-yH>Ap+*HS;;99Vjqm6~9!E_DpDUsfr9TPm*9Yq&zR=Ib8 zVP%o~gdWw&2YWvk_0E@gyKD_lX@lHs$r%ABBNF-Av`%<=8rJJrJ_`uFxMWqNZ*2E9 z9m~|SmeFyulT0^?_~_1_8NKn3~ec7!k z2A8kQT<$wR^_q0H`da^|yw_f&^p-E1w(xF5^R+ik3%1UE@rbA8p@^bEUN@6ZM%*0N zv7mY=4gEIQdce6HwupgHgq+!1`4{bOcKpV%rO)o7Uacqoum9Vop z@@7Ei@{Yw_s{;2;D2{x%=V;{GD-o~f{b^m;v~A8qtFw+O8#+{i1QZvy@rEQQx~+EW z>NI(K-1ZN1pS`Qz%oyo}Co|kdwN#Gt|6||3+q8SKa9)rGU&;O(-;Nsy++dwmdi$T< zwztnXAJnt0+p=x{Erv8Z&-L54z7Q0+$ELUL_N+bZG4B}u`tM5d=zFqUQ>6RAZ^_zV zxfi=xtHSQyi~4O*%dqLn)l0ku1spw7G^)=&zI*W8y??fsU%h9aT3xhNCg0*D0|T!_ zW=KRygs+cPa(=E}VoH8es$NBI0Rsrw*jE%JCTFLXC?ut(XXe=|z2CiGNg*@ERw>-n z*TA>HIW;5GqpB!1xXLdixhgx^GDXSWj?1RPsv@@_H?<^Dp&~aYuh^=>RtapbRbH_b zNLXJ<0j#7X+g2&UH$cHTzbI9~M9)OeK-aY*v&=}zj!VI&C?(A*$i)q6L{Unbtx`rw zNr9EVetCJhUb(Seeo?xGK4GRO#s87`^C$wiq3 zC7Jno3LrBRlk!VTY?YL_6ciMohF9bk`1-<)&nt$8LUMktennz|zM-Cher~QlvX0^s z*Rm4)I*LOo3sUuiQj7CTi;`1a%Tn`7l#z`{Nrvk$C@snXdnYAXKQ$*cH#M)MSl>|3 z5XDM&Pu~Ez4p0!JXXX}wbyegRpr|a#OhW_~if=$NVDBJ1q$0NfZZ3*ynBT#Q!C_?O zlAl}(a-OG)trEz7tCalY%oHmy(>y7~$RO1?O*hdnEm7CRC^bbl(J;|O*E})FEHNp` z(84g;49O_ZyyB9?yyR4nQ5CrbdYPFiR!PPwX2z-JX1XS+iOISqriMnki57_#x+WEg7?~NHn;V!K8zK~ir4|)u=I4P- zH8jvOhL{YB7%Tsx%+$P+L{Lh#Rf6cK$StsPE=o--$uA1Y&(E<{0y#>-NYBs!oWK=q zAkpHHSzMA|RA~oJ)8L#FoLUIsK{7#3CRj>A0i1BH5|bg86epIYrhuKM0Fz42NX$!5 zO|eyiCMlSBCYImKYijw6sD&Vbl_m z!gn;dMuUr_5FknMXzCgbE|NlkB*mkti)z8eh3M|2=B3ywl`GlX1s-TrVqjokOY(Mi zVfYV%3-&Ib%)r3FS>O>_%)r1c48n{Iv*t)JFfg!}c>21sKV#?TP}N>@?O7TF1A~#L zi(`nz>Er|n*2M`13~n|>|2qTQy&wJmub|@kx?pwc!OZs5jzbxs9+;=ApUXO@geCyu{2|u> delta 94 zcmZ3dT0KEIf`PNZBeIx*f$tCqGm2_>H83zR=z6+1hFF|VPLN<-+`!c!*#4tF>FVYO xMnC`8hZsvpZoGZeWu-XVJ%%pkiAf9$`OU1nEN>>5F)%PNc)I$ztaD0e0sxQ`9}NHi diff --git a/textures/segment2/segment2.double_exclamation.rgba16.png b/textures/segment2/segment2.double_exclamation.rgba16.png index a2a698dc2b0e43fedad126dfd5f97332bdd6d862..052db0e01a138c35bac48e5deab40f4e955a9dbf 100644 GIT binary patch delta 220 zcmb>X$v8o!{(z^8V@O3@@}K|z?U_{@SR;*=d`=BA~*#Q%l%M25gCMY&}bg^#S z!J*YF$i`#Pdw(L2K*KICfy=Bj*f<gTe~DWM4fZzoio delta 96 zcmey#ST{i>inG8YvY3H^TNs2H8D`CqU|?V{@N{tuu{fQaut30I(Z~OjSM{^TKKoza zBH7c^V{tU0p)*LoN6J8lM}kdrVv>FU55uvm{Bm+HP8?@oU|{fc^>bP0l+XkK&JiF5 diff --git a/textures/segment2/segment2.exclamation.rgba16.png b/textures/segment2/segment2.exclamation.rgba16.png index 1ad98eef1ed6d91e4bf8b3d36e003d749e94bd7b..c226e8f094835739e35045e64c6658b6d9067976 100644 GIT binary patch delta 155 zcmb>3!8k#szTVTtF{C0c`Op9V_ROjctkcun+}wC3H%>ELv^xD@`tN$i1v(tXMg|6P z$Jb5bT>p9DEJ=%k)rayKE~ITpW4yz*L7;^3M44X^uK-KdlZGUjG=b+#Y+id9E_qKB zm(cji#3=s2=hPL?&g=z^>^+=r@^2VB?ZsFmIheZkIuw?%i836REGv6##y<}R1_lOC LS3j3^P6$>OhQ!1J1|FRv)s0CE3?0)r*z diff --git a/textures/segment2/segment2.floomba.rgba16.png b/textures/segment2/segment2.floomba.rgba16.png new file mode 100644 index 0000000000000000000000000000000000000000..c82c4dc40062b6b966c6ece52ad8c43658c6e432 GIT binary patch literal 1188 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4mJh`2Kmqb6B!s7TQZ%U13aCb6$*;-(=u~X z85lGs)=sqbIP4&EG(LFgB2icC4vUl(eqt`JGE2K$Hw4_`T5B~U<`=84)Fcsc_k&v> zJUE_o_2ALSaQ1LVfj%IKXm{@qzWS9+RjO0ZhR=lo6<;dsN;J1e(d{&v}8mJjyK;ZdjK zS2Ay&zvOyU)DMmqx7qa8MbFy99`laD*?(7xN8gj>nom9-_$^r*EGDssb=UPf_h$XJ zsAafxjm<@Cw}ja*U|?WiOY(MiVfYV%3-&Ib z%)r3FS>O>_%)r1c48n{Iv*t)JFfg!}c>21sKVui*HnI%3@JfS$foY+qi(`nz>DtM@ z9aBmr4%Gke|DOD;HhtF7!qVJC#nu(u9K6B=*7{`eCknVI3CbpEPveVS6f8cGFM7g* zqpQVPMGYgOh4|YvvQ1K@8iTa*ZlBp@{kCS``#tgX{GE?CWuJfh^OvnneADq0Z?)gg z64dNmlJ=~ucl*76j%!4>pStnqrSRnN(hxQY=_Lmxn6*^<4oF(>Q*yUkr8B4cxJU~3 z%uF7$@@Gzca=Q<#wJvpGJL~3R@VhZmxZvxP*~@Gm*p3akP@}(oqzNHE9ooC>fbO=+by_`*NIEVd*T_-lEpn4 z|6RWxlUaEG(9Nwa@5?>b@&x{!_u!y_sl)1t53({r zo?)-6?-iEsn>F3Nrsllj^Q;{A37bW?O^on*D6YCLcOsXs{)@uJizV*Yd#$m0n$N!{ z&+QF^`SOiLO#U}Las`(vzRl~eT77zbch}1G=|_|6AI{b{msUUd@TqF%Btdn-JipC} ze}z@@rtf_pFZ%zt4@3LDs!Kf6Y`B(+CNRurRH^0q;quR3Ze`f-;~lfw v+c+-a^5?@W8&BVS|E?(e;rme5_srAzg|>H#UbJUmU|{fc^>bP0l+XkK>|7DV literal 0 HcmV?d00001 diff --git a/textures/segment2/segment2.hud_char_j.rgba16.png b/textures/segment2/segment2.hud_char_j.rgba16.png index f4723fb205921bfcb11c16f617f7ad0394aa9251..6f736e74a2a2996e8432b63ff459db10c6f591b1 100644 GIT binary patch delta 388 zcmdnXIFEUPay?_Jr;B4qMO?B1+n@jOf90Db|5?vV{n5Xsopm~+gRDcVX+q|)t!sIB zWCEt@2b4ZAIq*_O`S8Ez0Y_za+&$UioweVP`2x!!xfDe;o&$UjT7EoYp2eoNhwTef zY~kESM<;=fMlMxL0Y}Em?MVmz|L6JdI3tle$m4%P!ViWcT@LkUg%p@C9AeHnP;ao} z-~FQbjf^dp6P$NVYn;fOwOeJ{ffUA@)AMvKc4_rBzA73iwsZDTYa!7CDx%n-ofpJOY%g0Nj~$#btB}p|#Dww# wCX9#9H<&mJWbwINJJE4jBtj?WaK14^NN`a=^Jlwj3=9kmp00i_>zopr0AL5I_y7O^ delta 162 zcmbQoyq9r;ayx3h;uvCadTnqt-vI@V&27KqcmAG{ zHZxII<+1nT+5nNoVK(1xbgyVQ!Os7nRC9?==33vvw&1ni0b1?}u`M3bvg~_|lf~wg z2ulCRX6v31$|OFe#A5%iJ9;tIFIMOZ@))n0qQbm7()g#e!-_2z>O#a7&KOE=i2q&5 Qz`(%Z>FVdQ&MBb@05>N*4gdfE diff --git a/textures/segment2/segment2.hud_char_q.rgba16.png b/textures/segment2/segment2.hud_char_q.rgba16.png index 3774d8eb937c13b06b37fa4122317cffa6b102d9..5146da416e142e2fd098b851c4a6862c46750478 100644 GIT binary patch delta 477 zcmdnT_>Fmjay{c-PZ!6KinwG4_Wz9!?$)>czuzF?qJB5|$N2{K4GO0lO^o$YQxYCD zbp30%py2#W)6gKvm|d@9on%TI1G`iAbTMXTGv@O`-l!7bBiLnc!!9+gMM_QQ_&sBz1NA1&I>HP>&%ZN@eslU$ z@Dl1~)Y%X) zUBt!Z|IYV4Jip@%4C*zCGK}{8-v8wPzURkyCOJr}6t*&+D4D=5@F|W*;iwGHb;)!4 z&Dl1aHi~IHWteNof3@4^+yQ}b7Oy6rKocgdh(jOlSKKw*5bx0D!4Ro%Ht6JxS&m%? zI8T1iIQ&1&wd22~r9vDdyIv13kHZ349@X!X5>=KIz8U}k delta 163 zcmeyyypM5$aylsWMv?L^t|rtVmS-!0V|l@1WJxcc(MKX`Rc38*%%dyWa3=;!J&TAWieo%WcLs zp0SgqJ<1bK{}zi-J96%kU*EnH4>s1>s+0x3{dz)i^`6`$nNs#09RY&RSxuA;OgBE> SGmn9Rfx*+&&t;ucLK6U4q(g`R diff --git a/textures/segment2/segment2.hud_char_v.rgba16.png b/textures/segment2/segment2.hud_char_v.rgba16.png index fbf5ad59717d87a3b1d119eb225c0fc8cb47a315..f5931b3483184b21058bad797aeda26112d44d73 100644 GIT binary patch delta 344 zcmdnP_=#zPay_G^r;B4qMO<=29cx$(*uU#p5&ko3O@M1}=#i<_=~`SH2l>IOL{Vv}anM@K8%BR&D5Vl;WAI(D-!k z)JDfilN%iygtxl~^1Rr{l+_^hXfOXF!ITF-zwh8}U{^XLeR`dtK|w=~E7#B0zc*OR zALdqQ)X-&Pn-K2MsLl~s%FE0wsK=n$xbu$~i<&L@h zLH!daB&>_5mX{Ed;bCFCHsu6|*R|&o9ZU?{Ju|r~+POIy7#J8lUHx3vIVCg!02|_r A9smFU delta 161 zcmeyww1;tmayw$Z;uvCadhNtOz6Jvh=i5hr$M3Au zaOBO|aO3<^U4FM6E!%%oC=1D^O|tRd6))tm%=NK!pUO!aF78!bUdLR0-mG#h;D1zh zuqR=sn~AOJhUB$%>ARd%WfWV3jsL{=cf2yZ&0_p#%>q}ciI$;X9bP0l+XkKMG`#L diff --git a/textures/segment2/segment2.hud_char_x.rgba16.png b/textures/segment2/segment2.hud_char_x.rgba16.png index 8aca704521b35d2d386392fa738a9d53ac6cec43..a035b63dae173128d7e7dc63b2d168f7828b4722 100644 GIT binary patch delta 485 zcmX@X_>Xylay{cwPZ!6KinwG4w*UXd|EC{d`uG2SQ>cvV%PIeZ{~61q{@DLrnz`%I z=KuZw#4S#Ls6ScHcBgI4&;4v`W-_i2Xqm{nldELv!_c<>3VX!66??oJ%#O`TPY`&J zknn(EC#T1nsVNB?#F7&Bd|&sg{#<()+X{n-v)f+t@aWHxlt?^R&u(mS&EU`U3n>W? zTDq*5BvplYcvSTz1ZJ^HNPNprPS_#We1T_D%WRd6(;x0%q;x^_ej}TsFVic=-ChDG zEXsNsAMW5^l{SIV$6$HGoUacpnVT0V9MLv7JIUeL*Vi{p7w=$5oAB7S?f)zpfq4oO z_SMgCOq^-B?5x4p0`UfxeT?2@>I@82qzxai_89ak?0Qnk!R(=Yf>GfN zXKCm31iAaP^`=a*uU5YY~% zpSx4Em=E(OY|$%ZV$(9IZFr*6xKWs=i#OY4#(~2Qf-9T^B_8cPEg@ld#VF3;A4g(> z4x_38o5z|49){y*N_FH4S=6pBK9G{Nlf`(iHpAuPwhQjmEBM`NQnq)oP5v=|i}>y( tss{B9Cg$=-C(o4FCHWye+~yO*-sDM}BH~{*GB7YOc)I$ztaD0e0stbm&VB#@ delta 173 zcmeyze1dU;ay%SmPXGVUzq$15 zn#SDEVoWO~H?S={{P2XA(#jKj@jQ7#GB+Pa9$ociRg z6t*rfe0k)zvE1z!S_v~hJr|3+Yvm*7_VR?QLAk?QN3*BL)bcK|y33dBRI_hCA^+_8 d`>Ip%oW036+?TuDVqjok@O1TaS?83{1OWV8N4fw2 diff --git a/textures/segment2/segment2.hud_char_z.rgba16.png b/textures/segment2/segment2.hud_char_z.rgba16.png index 15cf71aaed80c1608729b0b98db0333cc9d0d1d4..45e8d6d91b402e1f3fdb6ed694123c0af629c95d 100644 GIT binary patch delta 468 zcmdnV_?CHsay{b~PZ!6Kin!!I{46}@B_;03Cm-NqVU?8Fr=ObeVAk;y9lnf@w{QOc zKi=GJ@}q==2MkGU0{<8%2J;-sk>oLnwinU=@;|#_YM>Y?pr;R`U6|%MEd;b5w zcz2WMiYXHVH%ls=X;v< zp=`!kh3NHZdk<%6`#C$zs-NFDCx*AA$aK|YN6vQ{AGiPiVVeH;|9_qpA7elN|G(h{ zljN_rS^>Y~S|m0p`Y7;uT>KoTz&#_uqG8AOZ??`~10C5W{Pw|f;uvCadhVn^t^)=SQO zb~Nmbw&UIxq0Go}b3^qM6Jw7kkJj5Cbpq41iyqE7!nZ4u{pQU+2E9a8$4%#b4BpMS zbFFjcw8v`GE{7;wdwVAP$LAaTb((?UD!cfW1nd8hZwamxSG&u0LD583CVDR;0|Ntt Mr>mdKI;Vst0H*FdaR2}S diff --git a/textures/segment2/segment2.jp_period.ia1.png b/textures/segment2/segment2.jp_period.ia1.png new file mode 100644 index 0000000000000000000000000000000000000000..b22dabd8a930eabf25a2aec1706043adce53f122 GIT binary patch literal 4595 zcmeAS@N?(olHy`uVBq!ia0y~yVBlb2U=ZM7VPIfrZ2tC*fq|L1DkP#LD6w3jpeR2r zGbdG{q_QAYA+;hije()!*4t@`mu_qDwEZvck~=s_Kza+@#0+Hs)H` zs@so+zCC_({M&{Q8_ij7&L`Gany2Jz{Nebls3ILTQJbN&ee#wW5xJbMUwGe3=1wb; zbauM;^ktlu(k#KOy47D?j&A?HC2#Q;FYV7umGnLJzW-ZmGjX5KiM#yvRp;t@e?;aL z?^Rqh{mpUX=O1=n>j~WwGvQT{?yGH6Oq=fUi9ft0?4&*WVc?7nq1vmG!^?A8H-61^ ze;d;2m>RUqu~$uY_4_M=NzarwCLXxcsNJG>Y^wDR!4(THrA*dxmT~!gXkP34jTefd zx6hkq-u~P%AhpS`tM+52@BBK0bQ#t~Z@u>E?>jRwr$z9|qE;!13wtK5(muHTS5(vL zhM8{D9(RPOl-c{f@v_fjid?|j)%DM&IpwiYgUG?HN)kc>45mU$on{+K3ktntxFTTX z{Y;j{V=8;o6CDfJW9J@9&6m&(4QsP->^se)64E7cBP6q7>gJ^X5oK={E?X2C+C6Jm zSgxy=UX<5Hq3KD+8|V0}oiQ_d>$68UuXfMg9iBgR^@B@SqE>~j-@1)$KJPT?eR%;H zxzA(2?a97%I&b&;(tO$5%b%~?Tk`r|c7Ag^&mH;2JkoZrGT3Erc)8ns(P)>gyRz6f zXRBuBvz42DX4}2aDbFgAy?y-`qv@^{AC*MA%9gXOym^-8Xz8MZJO?aNnF_gCZd{N# zW43&b@ z^!|{1)qSIqOL^t&2VWBZeK>aS(eZcQ^Xtq$X8u2ZLEicQ-i15=ml*rki!F^e{`}!) zwdV4Aj$hN0f9+SVek9fTzqy_{BxK8T9lf0r3=E8_na<7up3cs&?7+ZKF=y_C{a%Ly zM2^+3b@g7UpuzWO!ojT%lGMfjClqL0F=@K0=^Lf(a)!tHt&6u4c?>zqC|~^YWU8TMKts>j$0I+V-yIy~`hsGNs8bk6J7AjV7k< zem%27>|e#L+gpyGe0tzp=aCb<)wOAV91KAWYv zL-c7;k)_yArMt_N@|T}^t(~gUzj9B`AzQb3X8gbR-_Mp8f0~wCJ(DdmU|U$o*OM&w z<|ov0%szi%*UA%F|LUTT`fQ)`^SShXh84>KT<6W4*2TcUE0GxzQ4-ZxN)4{^ z3rViZPPR-@vbW>1sj#ZZEyztRNmQuF&B-gas<2f8n`@Ot;j4hQnKSxuqjGOvkG!?gBnqkl4h%vQBqQ1rLSLJUanVete0Pu zu5V~*X{m2uq;F)TTa=QfTU?n}l31aeSF8*&0%C?sYH@N=W(tB0+w{vfnBt zKRGkS3d~GSHA_uNGc?gPOExmlH8D$0(X}))Ow>)XOioHRPfRgSH8w;t$}_LHBrz{J z6=YOJZh>BAW{Q=$sac{yqIsgOsYz0ru8C!0qHdx=vbk=WrAb6v+nImoU88I=Mu$~Y}C#l+Y|*U;E3QP;%G*i<(u#neLAz%MtTMak${}UlC=DyTwA5^%)FHR@?wNk zNM>$oa7iL4JPpmvOf3z}O)Sh!4GoM;W@=tZ zA}FQWD#3%w%DE^tu_V7JBtJjLRte-N1tUE}18@RYuz^I2M`m$Jeo>_zI8B3dPH<`= zga^q4IhkN71qE=zwMtBeSW=u=mYM=~ngUEJIU_MIJvGHv37Vu};+a^Y%fcen)F?4A zNjKFp(NNdK%+yTR!Za~iH`&6{#MsOr(a16>3DxxC{Irtt#G+Kk^whi(TP63*+yby~ z6f~fLsfnt-JR=npQU*pwx`qb2hGro~hE@h9Rwm|3`VjBg=!5b!%(piB7~ug?fK&+B zaVbE=f?V9}xNP*nB@w7pf*1%Y6=;c}@jy!}6ck1+At`)EgKIRnND2Xx6pyB^(cmH} z1V~amn!2bKTwI9mPHJ9?tx~y?yUm3O${Ia*R!#)vAMa; jU=TK9*J22Cwqao4s9<5+_^S9DsITSe>gTe~DWM4fJ2ue% literal 0 HcmV?d00001 diff --git a/textures/segment2/segment2.minus2.rgba16.png b/textures/segment2/segment2.minus2.rgba16.png deleted file mode 100644 index 692ccbe3ce1569051fe0a9bd7cc7a58193d05c54..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 136 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4mJh`2Kmqb6B!s7I14-?iy0WWg+Z8+Vb&Z8 z1_lNzPZ!4!i_>o>8458da2yWm|6eaD?%tjiZuGqYq@~(NnyO@P lirqQ1yyQ36EcLH94liVtG-wq!Vqjok@O1TaS?83{1OS$6C)xl2 diff --git a/textures/segment2/segment2.percent.rgba16.png b/textures/segment2/segment2.percent.rgba16.png index 72f37ec488ba6af1d083a5bd376af7d0fa9dda8b..655f58b33f6eac5f84bce91b843bc52782fa497d 100644 GIT binary patch delta 257 zcmZ3@IG1UHO8pa07srr_xa2?o|JyUGHgq;RIc#LqdBK;El5*s=`hw|_6TdFl!LaP- zer4vv^}a2e{tKo(@#On;gSl+!(?tf9(@B21Dg|f_H4T9V~dmTy@)V+-i8caPMVi~UX$(@kkVzhyQ_1X^&gB?Y*ahlC^SS*|1_2%y>v#3fH!4c4 z`g;3C-;CvP&QE?fZ9G2LXVW2-)|@$YZyDPXLS9~Tq5$v(aB$qJo>;{@olD&LyZPc)rTfU1_lNO4o_D9geE-uFU0fzzc#~0H34a+jjD(Lr!A05dEfZs|K^7JqN5IXc#hoV`QKk; z@FzWqfsLnGAwZL(Ifmhg?r}+pEJ=w8d#?Z4|4eq06yFN*MiCVO%LQegMhh4UcI;uF z70hhHw}j0yr_a#f&F_N;4jfWo?b#wPQ0sVIQew**a4e@IgJw=B^dl7+#5Nc>IlTM zK1!d!((J8YroZ4htBqN*6hq0ojh|OoeQ0H7c(bvwj#F7+F9QPugQu$>tIIm4geCyC C;+>EH delta 166 zcmZ3=e2{U1ayk8=9c~JSSL)f|YLLE;~dG+!B{Q>I@<#$+>ipn%HbFb@>-c+Nn VurTCV9|HpegQu&X%Q~loCIF$;M4tcv diff --git a/textures/segment2/segment2.red_coin.rgba16.png b/textures/segment2/segment2.red_coin.rgba16.png deleted file mode 100644 index 8288133b6fe674d6a5f96e216bf41ead0dcd1988..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1108 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4mJh`2Kmqb6B!s-q&;06Lo5Ut1z6tyW}Lzx z$$$m?7iRd%Ai?mP;T^+YhPMpd3~w0(LCP3G1Ttn}W8h}^#qb*@_FtRfF@wC?KL$k; zWd?@Z4;gNp{>Siw;TwYl0~^B~2Cn}P8JIw7!3Ox0z3=C%6Ck z{>^ZW?;peamy959F_>}+GqC^v!@&6O8^ftLAUFPE5ai=vP+pMQS^vylmN&$kQ=FCQ`--u4zQ%<`Fm6U_O=z`}5j;Tr=#3p0br|E~<}g1ih2 zU%*mef|=Sp-y?Gu9l8!yB4pOC0z0=WQ$-!iZ;Tw`EoxclKR12Z!l!-H?1 z7}&)gGpN~pVGv??$?)>W8wLi3R}5bmelz^}`;+1NcP21~r31zn42%p988{feFbFWb zVPt1eW%$Hk#KORE_Y4=qM*)5YC4qkow;4DX3>khhJYWYqA2lViF@VxM1H)B@pA0WQ zu`qlU7h$;m9+W8=z%BxLQb2%-;kbw_!=^Wom;;G{^TIoZ9}H{^42(hyjQ<}oFfj=I z`pWR}6F0+MHem(@*6$30e||AMW#VSI_3kIbNsulECdL;GYzz_%zZe(;7{tLsXvBY5 olrk`|fs`@)V&DKN0XrMSfZ@jq&myAMF(rfep00i_>zopr07Mn_{r~^~ diff --git a/textures/segment2/segment2.silver_coin.ia16.png b/textures/segment2/segment2.silver_coin.ia16.png deleted file mode 100644 index eca6e896eff4be5f18f7ed348ca1ff2109c232c3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 596 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4i*LmhONKMUokK+Nqf3DhG>W~3NXF@%hPWBJYl%cz`zI-W%3wC8GimZ zXW(YwV|dE2o#76{2?kCET?So-KmS3-FoCqIGkjxEW%$f+ih+UQ3d3)PPYetUiVS)n zDUb;a|G60C8GbVC0}C)Ss5AU#_{G4$pu)iLpMilzg@FOA>N3LvhNlca7_=Ce8Q2+) zGVn5pF-S5nFtC7}_?O`}!)t~^3}y@*3>*v$4DT7Z8U8T{F@VB??U>?hB1_p)~44)aq z7W~3NXF@%hPWBJYl%cz`zI-W%3wC8GimZ zXW(YwV|dE2o#76{2?kCET?So-KmS3-FoCqIGkjxEW%$f+ih+UQ3d3)PPYetUiVS)n zDUb;a|G60C8GbVC0}C)Ss5AU#_{G4$pu)iLpMilzg@FOA>N3LvhNlca7_=Ce8Q2+) zGVn5pF-S5nFtC7}_?O`}!)t~^3}y@*3>*v$4DT7Z8U8T{F@VB??U>?hB1_p)~44)aq z7xO3f7+!R zyk$}txHoB@yWeQzs_@LgRC>CFhp6zTOFDil7_U1n3Vs;0fJH2(*x6m}Z- hG+h*s&{1Syc(=we@Tcd`J_ZH`22WQ%mvv4FO#m^cGq3;v delta 96 zcmbQkST{i>inG8YvY3H^TNs2H8D`CqU|?V{@N{tuu{fQaut30I(Z~OfCmdHjcc3Nj z(f|MdCI9{Zf8Jq@h49k21gQ@O60D083K$rkX!HLqPv;k5U|?YIboFyt=akR{0CQ&} A-~a#s diff --git a/tools/.gitignore b/tools/.gitignore index 9d0bb424f..93087a077 100644 --- a/tools/.gitignore +++ b/tools/.gitignore @@ -12,7 +12,6 @@ /slienc /skyconv /tabledesign -/textconv /vadpcm_enc /flips !/ido5.3_compiler/lib/*.so diff --git a/tools/Makefile b/tools/Makefile index cd5d6b104..4a201749e 100644 --- a/tools/Makefile +++ b/tools/Makefile @@ -7,7 +7,7 @@ CC := gcc CXX := g++ CFLAGS := -I. -O2 -s LDFLAGS := -lm -ALL_PROGRAMS := armips filesizer rncpack n64graphics n64graphics_ci mio0 slienc n64cksum textconv aifc_decode aiff_extract_codebook vadpcm_enc tabledesign extract_data_for_mio skyconv flips +ALL_PROGRAMS := armips filesizer rncpack n64graphics n64graphics_ci mio0 slienc n64cksum aifc_decode aiff_extract_codebook vadpcm_enc tabledesign extract_data_for_mio skyconv flips LIBAUDIOFILE := audiofile/libaudiofile.a # Only build armips from tools if it is not found on the system @@ -37,7 +37,7 @@ slienc_CFLAGS := 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 aifc_decode_SOURCES := aifc_decode.c diff --git a/tools/hashtable.c b/tools/hashtable.c deleted file mode 100644 index 2c881c267..000000000 --- a/tools/hashtable.c +++ /dev/null @@ -1,89 +0,0 @@ -#include -#include -#include -#include - -#include "hashtable.h" - -struct HashNode -{ - struct HashNode *next; - uint8_t value[]; -}; - -struct HashTable -{ - HashFunc func; - HashValueCmpFunc cmp; - int size; - int elemSize; - struct HashNode *table[]; -}; - -struct HashTable *hashtable_new(HashFunc func, HashValueCmpFunc cmp, int size, - int elemSize) -{ - struct HashTable *ht = malloc(sizeof(*ht) + size * sizeof(ht->table[0])); - - ht->func = func; - ht->cmp = cmp; - ht->size = size; - ht->elemSize = elemSize; - memset(ht->table, 0, ht->size * sizeof(ht->table[0])); - return ht; -} - -void hashtable_free(struct HashTable *ht) -{ - int i; - - for (i = 0; i < ht->size; i++) - { - struct HashNode *node = ht->table[i]; - - while (node != NULL) - { - struct HashNode *next = node->next; - - free(node); - node = next; - } - } - free(ht); -} - -void hashtable_insert(struct HashTable *ht, const void *value) -{ - unsigned int key = ht->func(value) % ht->size; - struct HashNode *node = malloc(sizeof(*node) + ht->elemSize); - - node->next = NULL; - memcpy(node->value, value, ht->elemSize); - - if (ht->table[key] == NULL) - { - ht->table[key] = node; - } - else - { - struct HashNode *parent = ht->table[key]; - - while (parent->next != NULL) - parent = parent->next; - parent->next = node; - } -} - -void *hashtable_query(struct HashTable *ht, const void *value) -{ - unsigned int key = ht->func(value) % ht->size; - struct HashNode *node = ht->table[key]; - - while (node != NULL) - { - if (ht->cmp(node->value, value)) - return node->value; - node = node->next; - } - return NULL; -} diff --git a/tools/hashtable.h b/tools/hashtable.h deleted file mode 100644 index 91e5460ef..000000000 --- a/tools/hashtable.h +++ /dev/null @@ -1,13 +0,0 @@ -#ifndef HASHTABLE_H_ -#define HASHTABLE_H_ - -typedef unsigned int (*HashFunc)(const void *item); -typedef int (*HashValueCmpFunc)(const void *a, const void *b); -struct HashTable; - -struct HashTable *hashtable_new(HashFunc func, HashValueCmpFunc cmp, int size, int valueSize); -void hashtable_free(struct HashTable *ht); -void hashtable_insert(struct HashTable *ht, const void *value); -void *hashtable_query(struct HashTable *ht, const void *value); - -#endif // HASHTABLE_H_ diff --git a/tools/textconv.c b/tools/textconv.c deleted file mode 100644 index 867a944a3..000000000 --- a/tools/textconv.c +++ /dev/null @@ -1,524 +0,0 @@ -#include -#include -#include -#include -#include -#include -#include - -#include "hashtable.h" -#include "utf8.h" - -#define ARRAY_COUNT(arr) (sizeof(arr) / sizeof(arr[0])) - -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) -}; - -static struct HashTable *charmap; - -static void fatal_error(const char *msgfmt, ...) -{ - va_list args; - - fputs("error: ", stderr); - - va_start(args, msgfmt); - vfprintf(stderr, msgfmt, args); - va_end(args); - - fputc('\n', stderr); - - exit(1); -} - -static void parse_error(const char *filename, int lineNum, const char *msgfmt, ...) -{ - va_list args; - - fprintf(stderr, "%s: line %i: ", filename, lineNum); - - va_start(args, msgfmt); - vfprintf(stderr, msgfmt, args); - va_end(args); - - fputc('\n', stderr); - - exit(1); -} - -// Reads the whole file and returns a null-terminated buffer with its contents -void *read_text_file(const char *filename) -{ - if (strcmp(filename, "-") != 0) - { - FILE *file = fopen(filename, "rb"); - uint8_t *buffer; - size_t size; - - if (file == NULL) - fatal_error("failed to open file '%s' for reading: %s", filename, strerror(errno)); - - // get size - fseek(file, 0, SEEK_END); - size = ftell(file); - - // allocate buffer - buffer = malloc(size + 1); - if (buffer == NULL) - fatal_error("could not allocate buffer of size %u", (uint32_t)(size + 1)); - - // read file - fseek(file, 0, SEEK_SET); - if (fread(buffer, size, 1, file) != 1) - fatal_error("error reading from file '%s': %s", filename, strerror(errno)); - - // null-terminate the buffer - buffer[size] = 0; - - fclose(file); - - return buffer; - } - else - { - size_t size = 0; - size_t capacity = 1024; - uint8_t *buffer = malloc(capacity + 1); - - if (buffer == NULL) - fatal_error("could not allocate buffer of size %u", (uint32_t)(capacity + 1)); - - for (;;) - { - size += fread(buffer + size, 1, capacity - size, stdin); - if (size == capacity) - { - capacity *= 2; - buffer = realloc(buffer, capacity + 1); - if (buffer == NULL) - fatal_error("could not allocate buffer of size %u", (uint32_t)(capacity + 1)); - } - else if (feof(stdin)) - { - break; - } - else - { - fatal_error("error reading from stdin: %s", strerror(errno)); - } - } - - // null-terminate the buffer - buffer[size] = 0; - return buffer; - } -} - -static char *skip_whitespace(char *str) -{ - while (isspace(*str)) - str++; - return str; -} - -// null terminates the current line and returns a pointer to the next line -static char *line_split(char *str) -{ - while (*str != '\n') - { - if (*str == 0) - return str; // end of string - str++; - } - *str = 0; // terminate line - return str + 1; -} - -static char *parse_number(const char *str, unsigned int *num) -{ - char *endptr; - unsigned int n = strtol(str, &endptr, 0); - - *num = n; - if (endptr > str) - return endptr; - else - return NULL; -} - -static int is_identifier_char(char c) -{ - return isalnum(c) || c == '_'; -} - -static int get_escape_char(int c) -{ - const uint8_t escapeTable[] = - { - ['a'] = '\a', - ['b'] = '\b', - ['f'] = '\f', - ['n'] = '\n', - ['r'] = '\r', - ['t'] = '\t', - ['v'] = '\v', - ['\\'] = '\\', - ['\''] = '\'', - ['"'] = '"', - }; - - if ((unsigned int)c < ARRAY_COUNT(escapeTable) && escapeTable[c] != 0) - return escapeTable[c]; - else - return 0; -} - -static void read_charmap(const char *filename) -{ - char *filedata = read_text_file(filename); - char *line = filedata; - int lineNum = 1; - - while (line[0] != 0) - { - char *nextLine = line_split(line); - - struct CharmapEntry entry; - - line = skip_whitespace(line); - if (line[0] != 0 && line[0] != '#') // ignore empty lines and comments - { - int len = 0; - /* Read Character */ - - // opening quote - if (*line != '\'') - parse_error(filename, lineNum, "expected '"); - line++; - - // perform analysis of charmap entry, we are in the quote - while(1) - { - if(*line == '\'') - { - line++; - break; - } - else if(len == ARRAY_COUNT(entry.unicode)) - { - // TODO: Use dynamic memory allocation so this is unnecessary. - parse_error(filename, lineNum, "string limit exceeded"); - } - else if (*line == '\\') - { - line++; // advance to get the character being escaped - if (*line == '\r') - line++; - if (*line == '\n') - { - // Backslash at end of line is ignored - continue; - } - entry.unicode[len] = get_escape_char(*line); - if (entry.unicode[len] == 0) - parse_error(filename, lineNum, "unknown escape sequence \\%c", *line); - line++; // increment again to get past the escape sequence. - } - else - { - line = utf8_decode(line, &entry.unicode[len]); - if (line == NULL) - parse_error(filename, lineNum, "invalid UTF8"); - } - len++; - } - entry.length = len; - - // equals sign - line = skip_whitespace(line); - if (*line != '=') - parse_error(filename, lineNum, "expected = after character \\%c", *line); - line++; - - entry.bytesCount = 0; - - // value - while (1) - { - uint32_t value; - - if (entry.bytesCount >= 2) - parse_error(filename, lineNum, "more than 2 values specified"); - - line = skip_whitespace(line); - - line = parse_number(line, &value); - if (line == NULL) - parse_error(filename, lineNum, "expected number after ="); - if (value > 0xFF) - parse_error(filename, lineNum, "0x%X is larger than 1 byte", value); - - entry.bytes[entry.bytesCount] = value; - entry.bytesCount++; - - line = skip_whitespace(line); - if (*line == 0) - break; - if (*line != ',') - parse_error(filename, lineNum, "junk at end of line"); - line++; - } - - if (hashtable_query(charmap, &entry) != NULL) - parse_error(filename, lineNum, "entry for character already exists"); - hashtable_insert(charmap, &entry); - } - - line = nextLine; - lineNum++; - } - - free(filedata); -} - -static int count_line_num(const char *start, const char *pos) -{ - const char *c; - int lineNum = 1; - - for (c = start; c < pos; c++) - { - if (*c == '\n') - lineNum++; - } - return lineNum; -} - -static char *convert_string(char *pos, FILE *fout, const char *inputFileName, char *start, int uncompressed) -{ - int hasString = 0; - - while (1) - { - pos = skip_whitespace(pos); - if (*pos == ')') - { - if (hasString) - break; - else - parse_error(inputFileName, count_line_num(start, pos), "expected quoted string after '_('"); - } - else if (*pos != '"') - parse_error(inputFileName, count_line_num(start, pos), "unexpected character '%c'", *pos); - pos++; - - hasString = 1; - - // convert quoted string - while (*pos != '"') - { - struct CharmapEntry input; - struct CharmapEntry *last_valid_entry = NULL; - struct CharmapEntry *entry; - int i, 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; - - // Find a charmap entry of longest length possible starting from this position - while (*pos != '"') - { - if ((uncompressed && length == 1) || length == ARRAY_COUNT(entry->unicode)) - { - // Stop searching after length 3; we only support strings of lengths up - // to that right now. Unless uncompressed is set, in which we ignore multi - // texts by discarding entries longer than 1. - break; - } - - if (*pos == 0) - parse_error(inputFileName, count_line_num(start, pos), "EOF in string literal"); - if (*pos == '\\') - { - pos++; - c = get_escape_char(*pos); - if (c == 0) - parse_error(inputFileName, count_line_num(start, pos), "unknown escape sequence \\%c", *pos); - input.unicode[length] = c; - pos++; - } - else - { - pos = utf8_decode(pos, &input.unicode[length]); - if (pos == NULL) - parse_error(inputFileName, count_line_num(start, pos), "invalid unicode encountered in file"); - } - length++; - input.length = length; - - entry = hashtable_query(charmap, &input); - if (entry != NULL) - { - last_valid_entry = entry; - last_valid_pos = pos; - } - } - - entry = last_valid_entry; - 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++) - fprintf(fout, "0x%02X,", entry->bytes[i]); - } - pos++; // skip over closing '"' - } - pos++; // skip over closing ')' - fputs("0xFF", fout); - return pos; -} - -static void convert_file(const char *infilename, const char *outfilename) -{ - char *in = read_text_file(infilename); - FILE *fout = strcmp(outfilename, "-") != 0 ? fopen(outfilename, "wb") : stdout; - - if (fout == NULL) - fatal_error("failed to open file '%s' for writing: %s", strerror(errno)); - - char *start = in; - char *end = in; - char *pos = in; - - while (1) - { - if (*pos == 0) // end of file - goto eof; - - // check for comment - if (*pos == '/') - { - pos++; - // skip over // comment - if (*pos == '/') - { - pos++; - // skip over next newline - while (*pos != '\n') - { - if (*pos == 0) - goto eof; - pos++; - } - pos++; - } - // skip over /* */ comment - else if (*pos == '*') - { - pos++; - while (*pos != '*' && pos[1] != '/') - { - if (*pos == 0) - goto eof; - pos++; - } - pos += 2; - } - } - // skip over normal string literal - else if (*pos == '"') - { - pos++; - while (*pos != '"') - { - if (*pos == 0) - goto eof; - if (*pos == '\\') - pos++; - pos++; - } - pos++; - } - // check for _( sequence - else if ((*pos == '_') && (pos == in || !is_identifier_char(pos[-1]))) - { - int uncompressed = 0; - end = pos; - pos++; - if (*pos == '_') // an extra _ signifies uncompressed strings. Enable uncompressed flag - { - pos++; - uncompressed = 1; - } - if (*pos == '(') - { - pos++; - fwrite(start, end - start, 1, fout); - pos = convert_string(pos, fout, infilename, in, uncompressed); - start = pos; - } - } - else - { - pos++; - } - } - - eof: - fwrite(start, pos - start, 1, fout); - if (strcmp(outfilename, "-") != 0) - fclose(fout); - free(in); -} - -static unsigned int charmap_hash(const void *value) -{ - const struct CharmapEntry* entry = value; - unsigned int ret = 0; - for (int i = 0; i < entry->length; i++) - ret = ret * 17 + entry->unicode[i]; - return ret; -} - -static int charmap_cmp(const void *a, const void *b) -{ - const struct CharmapEntry *ea = a; - const struct CharmapEntry *eb = b; - if (ea->length != eb->length) - return 0; - for(int i = 0; i < ea->length; i++) - if(ea->unicode[i] != eb->unicode[i]) - return 0; - return 1; -} - -static void usage(const char *execName) -{ - fprintf(stderr, "Usage: %s CHARMAP INPUT OUTPUT\n", execName); -} - -int main(int argc, char **argv) -{ - if (argc != 4) - { - usage(argv[0]); - return 1; - } - - charmap = hashtable_new(charmap_hash, charmap_cmp, 256, sizeof(struct CharmapEntry)); - - read_charmap(argv[1]); - convert_file(argv[2], argv[3]); - - hashtable_free(charmap); - - return 0; -} diff --git a/tools/utf8.c b/tools/utf8.c deleted file mode 100644 index 3d923c6db..000000000 --- a/tools/utf8.c +++ /dev/null @@ -1,74 +0,0 @@ -#include -#include - -#include "utf8.h" - -/* Copyright (c) 2008-2009 Bjoern Hoehrmann - * - * 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. - */ - -#define UTF8_ACCEPT 0 -#define UTF8_REJECT 1 - -static const uint8_t utf8d[] = { - 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, // 00..1f - 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, // 20..3f - 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, // 40..5f - 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, // 60..7f - 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9, // 80..9f - 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, // a0..bf - 8,8,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, // c0..df - 0xa,0x3,0x3,0x3,0x3,0x3,0x3,0x3,0x3,0x3,0x3,0x3,0x3,0x4,0x3,0x3, // e0..ef - 0xb,0x6,0x6,0x6,0x5,0x8,0x8,0x8,0x8,0x8,0x8,0x8,0x8,0x8,0x8,0x8, // f0..ff - 0x0,0x1,0x2,0x3,0x5,0x8,0x7,0x1,0x1,0x1,0x4,0x6,0x1,0x1,0x1,0x1, // s0..s0 - 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,0,1,0,1,1,1,1,1,1, // s1..s2 - 1,2,1,1,1,1,1,2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1, // s3..s4 - 1,2,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,3,1,3,1,1,1,1,1,1, // s5..s6 - 1,3,1,1,1,1,1,3,1,3,1,1,1,1,1,1,1,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1, // s7..s8 -}; - -static uint32_t -decode(uint32_t* state, uint32_t* codep, uint32_t byte) { - uint32_t type = utf8d[byte]; - - *codep = (*state != UTF8_ACCEPT) ? - (byte & 0x3fu) | (*codep << 6) : - (0xff >> type) & (byte); - - *state = utf8d[256 + *state*16 + type]; - return *state; -} - -char *utf8_decode(char *str, uint32_t *codep) -{ - uint32_t state = UTF8_ACCEPT; - - *codep = 0; - while (*str != 0) - { - int result = decode(&state, codep, (unsigned char)*str); - str++; - if (result == UTF8_ACCEPT) - return str; - if (result == UTF8_REJECT) - return NULL; - } - return NULL; -} diff --git a/tools/utf8.h b/tools/utf8.h deleted file mode 100644 index 113bb73ec..000000000 --- a/tools/utf8.h +++ /dev/null @@ -1,6 +0,0 @@ -#ifndef UTF8_H_ -#define UTF8_H_ - -char *utf8_decode(char *str, uint32_t *codep); - -#endif // UTF8_H_ From e32b0ea96031650b3dd93312eb84ffc5e347e526 Mon Sep 17 00:00:00 2001 From: Reonu Date: Thu, 11 Apr 2024 15:29:13 +0100 Subject: [PATCH 03/25] fix fast64 exports due to macro objects removal (#780) Fast64 exports dummy macro object data even if you don't use macro objects in your level. This change allows HackerSM64 to compile even with Fast64 doing cringe. --- include/level_commands.h | 4 ++++ include/types.h | 4 ++++ 2 files changed, 8 insertions(+) diff --git a/include/level_commands.h b/include/level_commands.h index 11b9e1a73..91243f5ba 100644 --- a/include/level_commands.h +++ b/include/level_commands.h @@ -449,6 +449,10 @@ enum GoddardScene { #define SET_ECHO(console, emulator) \ CMD_BBBB(LEVEL_CMD_SET_ECHO, 0x04, console, emulator) +// Required for backwards compatibility with Fast64 +#define MACRO_OBJECTS(objList) \ + CMD_BBH(LEVEL_CMD_NOP, 0x04, 0x0000) + // unused (previously MACRO_OBJECTS) #define CMD39(unk4) \ CMD_BBH(LEVEL_CMD_39, 0x08, 0x0000), \ diff --git a/include/types.h b/include/types.h index cebb439e3..c65afd67c 100644 --- a/include/types.h +++ b/include/types.h @@ -166,11 +166,15 @@ typedef s32 DrawingLayer; typedef s16 PaintingData; typedef s32 CameraTransitionAngle; typedef s16 Movtex; +typedef s16 MacroObject; // Required for backwards compatibility with Fast64 typedef s16 Trajectory; typedef u8 CutsceneID; typedef u8 uchar; +// Required for backwards compatibility with Fast64 +#define MACRO_OBJECT_END() 0 + enum SpTaskState { SPTASK_STATE_NOT_STARTED, SPTASK_STATE_RUNNING, From dbba4871e1600cf515178ec1a299cd4a189aed8d Mon Sep 17 00:00:00 2001 From: lolbinarycat Date: Sat, 18 May 2024 02:11:10 -0400 Subject: [PATCH 04/25] Add mips64-none-elf- to automatically detected prefixes (#799) Co-authored-by: binarycat --- Makefile | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Makefile b/Makefile index 3a25409bf..930ee71fc 100644 --- a/Makefile +++ b/Makefile @@ -444,6 +444,8 @@ else ifneq ($(call find-command,mips-linux-gnu-ld),) CROSS := mips-linux-gnu- else ifneq ($(call find-command,mips64-linux-gnu-ld),) CROSS := mips64-linux-gnu- +else ifneq ($(call find-command,mips64-none-elf-ld),) + CROSS := mips64-none-elf- else ifneq ($(call find-command,mips-ld),) CROSS := mips- else From 7ffa9a3bd7119aef0fb5e773dd54a8a1734a0e79 Mon Sep 17 00:00:00 2001 From: Denis Kopyrin Date: Thu, 23 May 2024 01:48:24 +0800 Subject: [PATCH 05/25] Fixed fixlights.py compile error on python 3.12 (#798) * Fixed fixlights.py compile error on python 3.12 * Fixed assemble_sound.py compile error on python 3.12 --- tools/assemble_sound.py | 2 +- tools/fixlights.py | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/tools/assemble_sound.py b/tools/assemble_sound.py index 54db6d889..64141e661 100755 --- a/tools/assemble_sound.py +++ b/tools/assemble_sound.py @@ -66,7 +66,7 @@ def validate(cond, msg, forstr=""): def strip_comments(string): - string = re.sub(re.compile("/\*.*?\*/", re.DOTALL), "", string) + string = re.sub(re.compile(r"/\*.*?\*/", re.DOTALL), "", string) return re.sub(re.compile("//.*?\n"), "", string) diff --git a/tools/fixlights.py b/tools/fixlights.py index c869b992a..e504a882f 100755 --- a/tools/fixlights.py +++ b/tools/fixlights.py @@ -88,7 +88,7 @@ for file in lightFiles: curLine = fileLines[index].strip() dl_index += 1 - match_result = re.search("Gfx\s*([A-Za-z_]\w+)\s*\[\s*\w*\s*\]\s*=\s*\{", curLine) + match_result = re.search(r"Gfx\s*([A-Za-z_]\w+)\s*\[\s*\w*\s*\]\s*=\s*\{", curLine) if match_result is not None and len(match_result.groups()) >= 1: curDL = match_result.group(1) dl_index = -1 @@ -136,7 +136,7 @@ def get_texscroll_files(): mat_grep_commands = [] for mat in material_deltas.keys(): print("grep -Rl \"segmented_to_virtual(" + re.escape(mat) + f"\" {sys.argv[1]}**/texscroll.inc.c") - mat_grep_commands.append("grep -Rl \"segmented_to_virtual(" + re.escape(mat) + f"\" {sys.argv[1]} --include \*texscroll*") + mat_grep_commands.append("grep -Rl \"segmented_to_virtual(" + re.escape(mat) + rf"\" {sys.argv[1]} --include \*texscroll*") texscroll_files = set() for cmd in mat_grep_commands: @@ -164,7 +164,7 @@ for file in t_files: curLine = curLineFull.strip() if not in_func: - match_result = re.search("void \w+\(\) \{", curLine) + match_result = re.search(r"void \w+\(\) \{", curLine) in_func = match_result is not None found_mat_match = False continue @@ -174,7 +174,7 @@ for file in t_files: continue if not found_mat_match: - match_result = re.search("Gfx \*mat = segmented_to_virtual\((\w*)\)", curLine) + match_result = re.search(r"Gfx \*mat = segmented_to_virtual\((\w*)\)", curLine) if not match_result: continue @@ -184,7 +184,7 @@ for file in t_files: mat_match = seg_mat continue - match_result = re.search("shift_\w*\(mat, (\d*),", curLine) + match_result = re.search(r"shift_\w*\(mat, (\d*),", curLine) if match_result is not None and len(match_result.groups()) >= 1: sts_index_str = match_result.group(1) sts_index = int(sts_index_str) From dcd58b2aad007e3724550980c15867d0ae1a200d Mon Sep 17 00:00:00 2001 From: Gregory Heskett Date: Sat, 1 Jun 2024 10:55:58 -0400 Subject: [PATCH 06/25] Restart music upon set_background_music() call if BETTER_REVERB preset changes (#797) --- src/audio/heap.c | 1 + src/audio/synthesis.c | 1 + src/audio/synthesis.h | 1 + src/game/sound_init.c | 7 ++++++- 4 files changed, 9 insertions(+), 1 deletion(-) diff --git a/src/audio/heap.c b/src/audio/heap.c index c9ec78c5c..75161172d 100644 --- a/src/audio/heap.c +++ b/src/audio/heap.c @@ -1062,6 +1062,7 @@ void init_reverb_us(s32 presetId) { betterReverbPreset = &gBetterReverbSettings[0]; } + activeBetterReverbPreset = gBetterReverbPresetValue; betterReverbLightweight = betterReverbPreset->useLightweightSettings; betterReverbDownsampleRate = betterReverbPreset->downsampleRate; monoReverb = betterReverbPreset->isMono; diff --git a/src/audio/synthesis.c b/src/audio/synthesis.c index feec87855..ce99c7453 100644 --- a/src/audio/synthesis.c +++ b/src/audio/synthesis.c @@ -43,6 +43,7 @@ #ifdef BETTER_REVERB // Do not touch these values manually, unless you want potential for problems. u8 gBetterReverbPresetValue = 0; +u8 activeBetterReverbPreset = 0; u8 toggleBetterReverb = FALSE; u8 betterReverbLightweight = FALSE; u8 monoReverb; diff --git a/src/audio/synthesis.h b/src/audio/synthesis.h index f66267b76..467e1dcc6 100644 --- a/src/audio/synthesis.h +++ b/src/audio/synthesis.h @@ -55,6 +55,7 @@ enum ChannelIndexes { extern u8 toggleBetterReverb; extern u8 gBetterReverbPresetValue; +extern u8 activeBetterReverbPreset; extern u8 betterReverbLightweight; extern s8 betterReverbDownsampleRate; extern u8 monoReverb; diff --git a/src/game/sound_init.c b/src/game/sound_init.c index ce9be0b62..7e7844041 100644 --- a/src/game/sound_init.c +++ b/src/game/sound_init.c @@ -3,6 +3,7 @@ #include "area.h" #include "audio/external.h" #include "audio/load.h" +#include "audio/synthesis.h" #include "engine/graph_node.h" #include "engine/math_util.h" #include "level_table.h" @@ -230,7 +231,11 @@ void play_infinite_stairs_music(void) { * Called from threads: thread5_game_loop */ void set_background_music(u16 a, u16 seqArgs, s16 fadeTimer) { - if (gResetTimer == 0 && seqArgs != sCurrentMusic) { + if (gResetTimer == 0 && (seqArgs != sCurrentMusic +#ifdef BETTER_REVERB + || gBetterReverbPresetValue != activeBetterReverbPreset +#endif + )) { if (gCurrCreditsEntry != NULL) { sound_reset(7); } else { From 0221d4ddf05ea496549fe2b7524b0b0a2ee4b7b0 Mon Sep 17 00:00:00 2001 From: 1ted59 <24933689+1ted59@users.noreply.github.com> Date: Fri, 14 Jun 2024 16:16:10 -0400 Subject: [PATCH 07/25] Fix spawned coins not being collectible until after the peak of their arc (#806) If a spawned coin lands on the same frame it hits the peak of its arc, it will never have vertical speed < 0, so it will never be collectible. Making this also set the coin to tangible if it has 0 speed fixes this issue. --- src/game/behaviors/coin.inc.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/game/behaviors/coin.inc.c b/src/game/behaviors/coin.inc.c index 0162df336..ce3e70cb1 100644 --- a/src/game/behaviors/coin.inc.c +++ b/src/game/behaviors/coin.inc.c @@ -131,7 +131,7 @@ void bhv_coin_loop(void) { } } - if (o->oVelY < 0) { + if (o->oVelY <= 0) { cur_obj_become_tangible(); } From 92822c64123728fce828d3ca2ed926811fa7de58 Mon Sep 17 00:00:00 2001 From: Denis Kopyrin Date: Tue, 2 Jul 2024 09:44:54 +0800 Subject: [PATCH 08/25] fixlights: added support for ripgrep (#802) --- tools/fixlights.py | 27 +++++++++++++++++++++------ 1 file changed, 21 insertions(+), 6 deletions(-) diff --git a/tools/fixlights.py b/tools/fixlights.py index e504a882f..a54492387 100755 --- a/tools/fixlights.py +++ b/tools/fixlights.py @@ -1,21 +1,37 @@ #!/usr/bin/python3 -import sys, subprocess, re +import sys, subprocess, re, shutil if len(sys.argv) != 2: print(f"Usage: {sys.argv[0]} [folder to search]") sys.exit() lightFiles = set() +has_rg = shutil.which("rg") is not None + +def make_search_cmd(regex, include = None): + cmd = None + if has_rg: + cmd = f"rg -lF {regex}" + else: + cmd = f"grep -Rl {regex}" + + if include: + if has_rg: + cmd += f" -g {include}" + else: + cmd += f" --include {include}" + + return cmd # The original command that was run across the entire repo to convert all assets # cmds = ("grep -Rl \"gsSPSetLight\" levels actors bin","grep -Rl \"gsSPLight\" levels actors bin","grep -Rl \"Lights1\" levels actors bin") # Operate on the folder passed as an argument to this program cmds = [ - f"grep -Rl \"gsSPSetLight\" {sys.argv[1]}", - f"grep -Rl \"gsSPLight\" {sys.argv[1]}", - f"grep -Rl \"Lights1\" {sys.argv[1]}" + make_search_cmd(f"\"gsSPSetLight\" {sys.argv[1]}"), + make_search_cmd(f"\"gsSPLight\" {sys.argv[1]}"), + make_search_cmd(f"\"Lights1\" {sys.argv[1]}") ] for cmd in cmds: @@ -135,8 +151,7 @@ for file in lightFiles: def get_texscroll_files(): mat_grep_commands = [] for mat in material_deltas.keys(): - print("grep -Rl \"segmented_to_virtual(" + re.escape(mat) + f"\" {sys.argv[1]}**/texscroll.inc.c") - mat_grep_commands.append("grep -Rl \"segmented_to_virtual(" + re.escape(mat) + rf"\" {sys.argv[1]} --include \*texscroll*") + mat_grep_commands.append(make_search_cmd("\"segmented_to_virtual(" + re.escape(mat) + rf"\" {sys.argv[1]}", "\"*texscroll*\"")) texscroll_files = set() for cmd in mat_grep_commands: From 252a900b91b7a0f798ae260151e3a147a352eddc Mon Sep 17 00:00:00 2001 From: Denis Kopyrin Date: Tue, 2 Jul 2024 09:45:36 +0800 Subject: [PATCH 09/25] Added support for windows MinGW build (#800) --- extract_assets.py | 12 +++++++++--- sm64.ld | 16 ++++++++-------- tools/FlipsSrc/Flips.h | 31 +------------------------------ tools/Makefile | 30 +++++++++++++++++++++++------- tools/armips.cpp | 11 +++-------- tools/filesizer.c | 15 ++++++++++++++- tools/fixlights.py | 4 ++-- tools/n64graphics.c | 1 + 8 files changed, 61 insertions(+), 59 deletions(-) diff --git a/extract_assets.py b/extract_assets.py index 90928bc3f..b5c68ef57 100755 --- a/extract_assets.py +++ b/extract_assets.py @@ -177,9 +177,15 @@ def main(): # presence of the correct roms automatically # Make sure tools exist - subprocess.check_call( - ["make", "-s", "-C", "tools/", "n64graphics", "skyconv", "mio0", "aifc_decode"] - ) + tools = [ "n64graphics", "skyconv", "mio0", "aifc_decode" ] + if os.name == 'nt': + tools = [tool + ".exe" for tool in tools] + make = "mingw32-make" + else: + make = "make" + + cmd = [make, "-s", "-C", "tools/"] + tools + subprocess.check_call(cmd) # Go through the assets in roughly alphabetical order (but assets in the same # mio0 file still go together). diff --git a/sm64.ld b/sm64.ld index 98cb8f806..4b5f0df45 100755 --- a/sm64.ld +++ b/sm64.ld @@ -175,9 +175,9 @@ SECTIONS #ifdef LIBPL BUILD_DIR/lib/libpl*.o(.text*); #endif - */ULTRALIB.a:*.o(.text*); + *ULTRALIB.a:*.o(.text*); */libnustd.a:*.o(.text*); - */libgcc.a:*.o(.text*); + *libgcc.a:*.o(.text*); */libz.a:*.o(.text*); */libhvqm2.a:*.o(.text*); lib/rspboot.o(.text*); @@ -197,7 +197,7 @@ SECTIONS #ifdef LIBPL BUILD_DIR/lib/libpl*.o(.*data*); #endif - */ULTRALIB.a:*.o(.data*); + *ULTRALIB.a:*.o(.data*); */libhvqm2.a:*.o(.data*); */libz.a:*.o(.data*); #include "rspdata.inc.ld" @@ -215,8 +215,8 @@ SECTIONS #ifdef LIBPL BUILD_DIR/lib/libpl*.o(.rodata*); #endif - */ULTRALIB.a:*.o(.rodata*); - */libgcc.a:*.o(.rodata*); + *ULTRALIB.a:*.o(.rodata*); + *libgcc.a:*.o(.rodata*); */libz.a:*.o(.rodata*); lib/PR/hvqm/hvqm2sp1.o(.rodata*); @@ -234,9 +234,9 @@ SECTIONS #ifdef LIBPL BUILD_DIR/lib/libpl*.o(.*bss*); #endif - */ULTRALIB.a:*.o(COMMON); - */ULTRALIB.a:*.o(.scommon); - */ULTRALIB.a:*.o(.*bss*); + *ULTRALIB.a:*.o(COMMON); + *ULTRALIB.a:*.o(.scommon); + *ULTRALIB.a:*.o(.*bss*); */libhvqm2.a:*.o(.bss*); */libz.a:*.o(.bss*); . = ALIGN(0x8); diff --git a/tools/FlipsSrc/Flips.h b/tools/FlipsSrc/Flips.h index da3182a03..8154e6b0d 100644 --- a/tools/FlipsSrc/Flips.h +++ b/tools/FlipsSrc/Flips.h @@ -109,30 +109,6 @@ public: #define flipsversion "Floating IPS" -#if defined(FLIPS_WINDOWS) -#define UNICODE -#define _WIN32_WINNT 0x0501 -#define _WIN32_IE 0x0600 - -#define NOMINMAX // this seems automatically on in C++ - crazy. -#ifdef __MINGW32__ -#include -#undef __USE_MINGW_ANSI_STDIO // must remove this, to avoid a libgcc_s_sjlj-1.dll dependency on 32bit -#endif // comments say libstdc++ demands a POSIX printf, but I'm not using that, so I don't care -#include -#include -#include -#include -#include -#include -#include - -#define wcsicmp _wcsicmp // wcsicmp deprecated? okay, have a define -#define wcsdup _wcsdup -#define wtoi _wtoi - - -#else #include #include #include @@ -190,7 +166,6 @@ static inline char* strdup(const char * in) memcpy(ret, in, len+1); return ret; } -#endif #ifndef __cplusplus @@ -341,11 +316,7 @@ void bpsdeltaEnd(); int GUIShow(LPCWSTR filename); void GUILoadConfig(); //LPCWSTR GUIGetFileFor(uint32_t crc32); // use FindRomForPatch instead -#ifdef FLIPS_WINDOWS -void GUIClaimConsole(); -#else -#define GUIClaimConsole() // all other platforms have consoles already -#endif +#define GUIClaimConsole() //the OS port is responsible for main() //Module name: crc32 diff --git a/tools/Makefile b/tools/Makefile index cd5d6b104..764b0c8a3 100644 --- a/tools/Makefile +++ b/tools/Makefile @@ -10,6 +10,14 @@ LDFLAGS := -lm ALL_PROGRAMS := armips filesizer rncpack n64graphics n64graphics_ci mio0 slienc n64cksum textconv aifc_decode aiff_extract_codebook vadpcm_enc tabledesign extract_data_for_mio skyconv flips LIBAUDIOFILE := audiofile/libaudiofile.a +ifeq ($(OS),Windows_NT) + EXT := .exe + OUTPUTS := $(ALL_PROGRAMS:=.exe) +else + EXT := + OUTPUTS := $(ALL_PROGRAMS) +endif + # Only build armips from tools if it is not found on the system ifeq ($(call find-command,armips),) BUILD_PROGRAMS := $(ALL_PROGRAMS) @@ -43,7 +51,7 @@ aifc_decode_SOURCES := aifc_decode.c aiff_extract_codebook_SOURCES := aiff_extract_codebook.c -tabledesign: $(LIBAUDIOFILE) +tabledesign$(EXT): $(LIBAUDIOFILE) tabledesign_SOURCES := sdk-tools/tabledesign/codebook.c sdk-tools/tabledesign/estimate.c sdk-tools/tabledesign/print.c sdk-tools/tabledesign/tabledesign.c tabledesign_CFLAGS := -Iaudiofile -Wno-uninitialized tabledesign_LDFLAGS := -Laudiofile -laudiofile -lstdc++ @@ -56,22 +64,30 @@ extract_data_for_mio_SOURCES := extract_data_for_mio.c skyconv_SOURCES := skyconv.c n64graphics.c utils.c skyconv_CFLAGS := -g -I../include -armips: CC := $(CXX) +armips$(EXT): CC := $(CXX) armips_SOURCES := armips.cpp -armips_CFLAGS := -std=c++11 -fno-exceptions -fno-rtti -pipe +armips_CFLAGS := -std=gnu++11 -fno-exceptions -fno-rtti -pipe armips_LDFLAGS := -pthread ifeq ($(HOST_ENV),MinGW) armips_LDFLAGS += -municode endif -flips: CC := $(CXX) +flips$(EXT): CC := $(CXX) flips_SOURCES := FlipsSrc/Flips.cpp +ifeq ($(OS),Windows_NT) +flips_CFLAGS := -Wall -Wextra -fopenmp -Os -flto -fuse-linker-plugin -fomit-frame-pointer -fmerge-all-constants \ +-fvisibility=hidden -fno-exceptions -fno-rtti -fno-unwind-tables -fno-asynchronous-unwind-tables \ +-ffunction-sections -fdata-sections -Wl,--gc-sections +else flips_CFLAGS := -Wall -Wextra -fopenmp -Os -flto -fuse-linker-plugin -fomit-frame-pointer -fmerge-all-constants \ -fvisibility=hidden -fno-exceptions -fno-unwind-tables -fno-asynchronous-unwind-tables \ -ffunction-sections -fdata-sections -Wl,--gc-sections \ +-fvisibility=hidden -fno-exceptions -fno-rtti -fno-unwind-tables -fno-asynchronous-unwind-tables \ +-ffunction-sections -fdata-sections -Wl,--gc-sections \ -Wl,-z,relro,-z,now,--as-needed,--hash-style=gnu,--relax +endif -all-except-recomp: $(LIBAUDIOFILE) $(BUILD_PROGRAMS) +all-except-recomp: $(LIBAUDIOFILE) $(OUTPUTS) all: all-except-recomp @@ -83,8 +99,8 @@ clean: distclean: clean define COMPILE -$(1): $($1_SOURCES) - $$(CC) $(CFLAGS) $($1_CFLAGS) $$^ -o $$@ $($1_LDFLAGS) $(LDFLAGS) +$(1)$$(EXT): $($1_SOURCES) + $$(CC) $(CFLAGS) $($1_CFLAGS) $$^ -o $(1) $($1_LDFLAGS) $(LDFLAGS) endef $(foreach p,$(BUILD_PROGRAMS),$(eval $(call COMPILE,$(p)))) diff --git a/tools/armips.cpp b/tools/armips.cpp index 271bf5586..15ab748d1 100644 --- a/tools/armips.cpp +++ b/tools/armips.cpp @@ -15496,7 +15496,7 @@ int64_t fileSize(const std::wstring& fileName) { #ifdef _WIN32 WIN32_FILE_ATTRIBUTE_DATA attr; - if (!GetFileAttributesEx(fileName.c_str(),GetFileExInfoStandard,&attr) + if (!GetFileAttributesExW(fileName.c_str(),GetFileExInfoStandard,&attr) || (attr.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)) return 0; return ((int64_t) attr.nFileSizeHigh << 32) | (int64_t) attr.nFileSizeLow; @@ -15514,10 +15514,10 @@ bool fileExists(const std::wstring& strFilename) { #ifdef _WIN32 #ifdef ARMIPS_WINDOWS_UWP - return GetFileAttributes(strFilename.c_str()) != INVALID_FILE_ATTRIBUTES; + return GetFileAttributesW(strFilename.c_str()) != INVALID_FILE_ATTRIBUTES; #else int OldMode = SetErrorMode(SEM_FAILCRITICALERRORS); - bool success = GetFileAttributes(strFilename.c_str()) != INVALID_FILE_ATTRIBUTES; + bool success = GetFileAttributesW(strFilename.c_str()) != INVALID_FILE_ATTRIBUTES; SetErrorMode(OldMode); return success; #endif @@ -19877,8 +19877,6 @@ int wmain(int argc, wchar_t* argv[]) return runFromCommandLine(arguments); } -#ifndef _WIN32 - int main(int argc, char* argv[]) { // convert input to wstring @@ -19901,6 +19899,3 @@ int main(int argc, char* argv[]) delete[] wargv; return result; } - -#endif - diff --git a/tools/filesizer.c b/tools/filesizer.c index c44d8a029..c2329a16a 100644 --- a/tools/filesizer.c +++ b/tools/filesizer.c @@ -1,4 +1,17 @@ -#include +#ifndef _WIN32 + #include +#else +#define __bswap_constant_32(x) \ + ((((x) & 0xff000000u) >> 24) | (((x) & 0x00ff0000u) >> 8) | \ + (((x) & 0x0000ff00u) << 8) | (((x) & 0x000000ffu) << 24)) + +static __inline unsigned int +__bswap_32 (unsigned int __bsx) +{ + return __bswap_constant_32 (__bsx); +} +#endif + #include #include #include diff --git a/tools/fixlights.py b/tools/fixlights.py index a54492387..9920f38be 100755 --- a/tools/fixlights.py +++ b/tools/fixlights.py @@ -45,7 +45,7 @@ lightStructs = {} # FIRST PASS: COLLECT LIGHT STRUCT INFO, REMOVE LIGHT STRUCTS for file in lightFiles: changed = False - with open(file, "r") as f: + with open(file, "r", encoding='utf-8') as f: fileLines = f.readlines() index = 0 @@ -96,7 +96,7 @@ def index_delta(mat_name, orig_index, delta): # SECOND PASS - CHANGE LIGHT COMMANDS for file in lightFiles: changed = False - with open(file, "r") as f: + with open(file, "r", encoding='utf-8') as f: fileLines = f.readlines() index = 0 dl_index = -1 diff --git a/tools/n64graphics.c b/tools/n64graphics.c index 30d1060b2..1368c6a44 100644 --- a/tools/n64graphics.c +++ b/tools/n64graphics.c @@ -21,6 +21,7 @@ #define SCALE_3_8(VAL_) ((VAL_) * 0x24) #define SCALE_8_3(VAL_) ((VAL_) / 0x24) +#define bcopy(s1, s2, n) memcpy((s2), (s1), (n)) typedef struct { From 98b6231216012ece6275ee2824b8d9f5b378ff5f Mon Sep 17 00:00:00 2001 From: Gregory Heskett Date: Mon, 1 Jul 2024 21:46:12 -0400 Subject: [PATCH 10/25] Pressing L in debug fly mode heals Mario (#809) --- src/game/mario_actions_cutscene.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/game/mario_actions_cutscene.c b/src/game/mario_actions_cutscene.c index 06684a9ae..50f5f3365 100644 --- a/src/game/mario_actions_cutscene.c +++ b/src/game/mario_actions_cutscene.c @@ -518,6 +518,10 @@ s32 act_debug_free_move(struct MarioState *m) { struct Surface *floor, *ceil; Vec3f pos; + if (gPlayer1Controller->buttonPressed & L_TRIG) { + m->health = 0x880; + } + f32 speed = (gPlayer1Controller->buttonDown & B_BUTTON) ? 4.0f : 1.0f; if (gPlayer1Controller->buttonDown & Z_TRIG) speed = 0.01f; if (m->area->camera->mode != CAMERA_MODE_8_DIRECTIONS) set_camera_mode(m->area->camera, CAMERA_MODE_8_DIRECTIONS, 1); From 03ba81b5e3c91ff0d900f1a81870f527629b6dd9 Mon Sep 17 00:00:00 2001 From: Gregory Heskett Date: Mon, 1 Jul 2024 21:46:46 -0400 Subject: [PATCH 11/25] Improve DEATH_ON_EXIT_COURSE define (#808) --- src/game/level_update.c | 23 ++++++++++++++--------- 1 file changed, 14 insertions(+), 9 deletions(-) diff --git a/src/game/level_update.c b/src/game/level_update.c index f222e7fbe..b7061f6bb 100644 --- a/src/game/level_update.c +++ b/src/game/level_update.c @@ -201,7 +201,7 @@ void set_play_mode(s16 playMode) { } void warp_special(s32 arg) { - sCurrPlayMode = PLAY_MODE_CHANGE_LEVEL; + set_play_mode(PLAY_MODE_CHANGE_LEVEL); sSpecialWarpDest = arg; } @@ -1088,19 +1088,24 @@ s32 play_mode_paused(void) { fade_into_special_warp(WARP_SPECIAL_LEVEL_SELECT, 1); } else { #ifdef DEATH_ON_EXIT_COURSE - raise_background_noise(1); - gCameraMovementFlags &= ~CAM_MOVE_PAUSE_SCREEN; - set_play_mode(PLAY_MODE_NORMAL); - level_trigger_warp(gMarioState, WARP_OP_DEATH); -#else + struct ObjectWarpNode *warpNode = area_get_warp_node(WARP_NODE_DEATH); + assert(warpNode != NULL, "No death warp node could be found!"); + + initiate_warp(warpNode->node.destLevel & 0x7F, warpNode->node.destArea, + warpNode->node.destNode, WARP_FLAGS_NONE); +#else // DEATH_ON_EXIT_COURSE initiate_warp(EXIT_COURSE_LEVEL, EXIT_COURSE_AREA, EXIT_COURSE_NODE, WARP_FLAG_EXIT_COURSE); - fade_into_special_warp(WARP_SPECIAL_NONE, 0); gSavedCourseNum = COURSE_NONE; -#endif +#endif // DEATH_ON_EXIT_COURSE + + fade_into_special_warp(WARP_SPECIAL_NONE, 0); + if (sWarpDest.type != WARP_TYPE_CHANGE_LEVEL) { + set_play_mode(PLAY_MODE_CHANGE_AREA); + } } gCameraMovementFlags &= ~CAM_MOVE_PAUSE_SCREEN; -#endif +#endif // DISABLE_EXIT_COURSE } return FALSE; From 9adb8c6de855990e763012e3e5169e06ae793f0d Mon Sep 17 00:00:00 2001 From: Gregory Heskett Date: Mon, 1 Jul 2024 21:47:15 -0400 Subject: [PATCH 12/25] EASIER_LONG_JUMPS: only long jump with A+Z while running (#801) Co-authored-by: thecozies <79979276+thecozies@users.noreply.github.com> --- src/game/mario_actions_airborne.c | 9 --------- src/game/mario_actions_moving.c | 5 +++++ 2 files changed, 5 insertions(+), 9 deletions(-) diff --git a/src/game/mario_actions_airborne.c b/src/game/mario_actions_airborne.c index 26051395f..c6e152677 100644 --- a/src/game/mario_actions_airborne.c +++ b/src/game/mario_actions_airborne.c @@ -429,15 +429,6 @@ u32 common_air_action_step(struct MarioState *m, u32 landAction, s32 animation, } s32 act_jump(struct MarioState *m) { -#ifdef EASIER_LONG_JUMPS - if (m->actionTimer < 1) { - m->actionTimer++; - if (m->input & INPUT_Z_PRESSED && m->forwardVel > 10.0f) { - return set_jumping_action(m, ACT_LONG_JUMP, 0); - } - } -#endif - if (check_kick_or_dive_in_air(m)) { return TRUE; } diff --git a/src/game/mario_actions_moving.c b/src/game/mario_actions_moving.c index 5f6fb46e6..67cd50fa9 100644 --- a/src/game/mario_actions_moving.c +++ b/src/game/mario_actions_moving.c @@ -766,6 +766,11 @@ s32 act_walking(struct MarioState *m) { } if (m->input & INPUT_A_PRESSED) { +#ifdef EASIER_LONG_JUMPS + if (m->input & INPUT_Z_PRESSED && m->forwardVel > 10.0f) { + return set_mario_action(m, ACT_CROUCH_SLIDE, 0); + } +#endif return set_jump_from_landing(m); } From 6a3e7e7a87255ae1bdaf8abe146996db7396334d Mon Sep 17 00:00:00 2001 From: Gregory Heskett Date: Mon, 1 Jul 2024 21:47:38 -0400 Subject: [PATCH 13/25] Bugfix: Missed purging of debug box flags that no longer exist in Puppycam (#804) --- src/game/puppycam2.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/game/puppycam2.c b/src/game/puppycam2.c index 384d8af0c..cc1b796c1 100644 --- a/src/game/puppycam2.c +++ b/src/game/puppycam2.c @@ -1018,7 +1018,7 @@ static s32 puppycam_check_volume_bounds(struct sPuppyVolume *volume, s32 index) vec3f_set(debugPos[0], sPuppyVolumeStack[index]->pos[0], sPuppyVolumeStack[index]->pos[1], sPuppyVolumeStack[index]->pos[2]); vec3f_set(debugPos[1], sPuppyVolumeStack[index]->radius[0], sPuppyVolumeStack[index]->radius[1], sPuppyVolumeStack[index]->radius[2]); debug_box_color(0x00FF0000); - debug_box_rot(debugPos[0], debugPos[1], sPuppyVolumeStack[index]->rot, DEBUG_SHAPE_BOX | DEBUG_UCODE_DEFAULT); + debug_box_rot(debugPos[0], debugPos[1], sPuppyVolumeStack[index]->rot, DEBUG_SHAPE_BOX); #endif // Now compare values. if (-sPuppyVolumeStack[index]->radius[0] < pos[0] && pos[0] < sPuppyVolumeStack[index]->radius[0] && @@ -1036,7 +1036,7 @@ static s32 puppycam_check_volume_bounds(struct sPuppyVolume *volume, s32 index) vec3f_set(debugPos[0], sPuppyVolumeStack[index]->pos[0], sPuppyVolumeStack[index]->pos[1], sPuppyVolumeStack[index]->pos[2]); vec3f_set(debugPos[1], sPuppyVolumeStack[index]->radius[0], sPuppyVolumeStack[index]->radius[1], sPuppyVolumeStack[index]->radius[2]); debug_box_color(0x00FF0000); - debug_box_rot(debugPos[0], debugPos[1], sPuppyVolumeStack[index]->rot, DEBUG_SHAPE_CYLINDER | DEBUG_UCODE_DEFAULT); + debug_box_rot(debugPos[0], debugPos[1], sPuppyVolumeStack[index]->rot, DEBUG_SHAPE_CYLINDER); #endif f32 distCheck = (dist < sqr(sPuppyVolumeStack[index]->radius[0])); From 7381e35db4fb5426519b4b558e4d5370f1be20c6 Mon Sep 17 00:00:00 2001 From: Gregory Heskett Date: Mon, 1 Jul 2024 21:48:26 -0400 Subject: [PATCH 14/25] Bugfix: Surfaces not able to be placed at the beginning of a partition (#805) * Bugfix: Surfaces not able to be placed at the beginning of a partition * Replace clear_spacial_partition calls with a bzero --- src/engine/surface_load.c | 38 ++++++++++++-------------------------- 1 file changed, 12 insertions(+), 26 deletions(-) diff --git a/src/engine/surface_load.c b/src/engine/surface_load.c index 344fbc5fb..0134e23a5 100644 --- a/src/engine/surface_load.c +++ b/src/engine/surface_load.c @@ -87,30 +87,6 @@ static struct Surface *alloc_surface(u32 dynamic) { return surface; } -/** - * Iterates through the entire partition, clearing the surfaces. - */ -static void clear_spatial_partition(SpatialPartitionCell *cells) { - register s32 i = sqr(NUM_CELLS); - - while (i--) { - (*cells)[SPATIAL_PARTITION_FLOORS] = NULL; - (*cells)[SPATIAL_PARTITION_CEILS] = NULL; - (*cells)[SPATIAL_PARTITION_WALLS] = NULL; - (*cells)[SPATIAL_PARTITION_WATER] = NULL; - - cells++; - } -} - -/** - * Clears the static (level) surface partitions for new use. - */ -static void clear_static_surfaces(void) { - gTotalStaticSurfaceData = 0; - clear_spatial_partition(&gStaticSurfacePartition[0][0]); -} - /** * Add a surface to the correct cell list of surfaces. * @param dynamic Determines whether the surface is static or dynamic @@ -164,6 +140,14 @@ static void add_surface_to_cell(s32 dynamic, s32 cellX, s32 cellZ, struct Surfac struct SurfaceNode *curNode = *list; + // Check if surface should be placed at the beginning of the list. + priority = curNode->surface->upperY * sortDir; + if (surfacePriority > priority) { + *list = newNode; + newNode->next = curNode; + return; + } + // Loop until we find the appropriate place for the surface in the list. while (curNode->next != NULL) { priority = curNode->next->surface->upperY * sortDir; @@ -504,7 +488,9 @@ void load_area_terrain(s32 index, TerrainData *data, RoomData *surfaceRooms, s16 sNumCellsUsed = 0; sClearAllCells = TRUE; - clear_static_surfaces(); + // Clear the static (level) surface partitions for new use. + bzero(gStaticSurfacePartition, sizeof(gStaticSurfacePartition)); + gTotalStaticSurfaceData = 0; // Initialise a new surface pool for this block of static surface data gCurrStaticSurfacePool = main_pool_alloc(main_pool_available() - 0x10, MEMORY_POOL_LEFT); @@ -567,7 +553,7 @@ void clear_dynamic_surfaces(void) { gSurfaceNodesAllocated = gNumStaticSurfaceNodes; gDynamicSurfacePoolEnd = gDynamicSurfacePool; if (sClearAllCells) { - clear_spatial_partition(&gDynamicSurfacePartition[0][0]); + bzero(gDynamicSurfacePartition, sizeof(gDynamicSurfacePartition)); } else { for (u32 i = 0; i < sNumCellsUsed; i++) { gDynamicSurfacePartition[sCellsUsed[i].z][sCellsUsed[i].x][sCellsUsed[i].partition] = NULL; From 500507509ba0ae8b49afd39286e8fb650b797e96 Mon Sep 17 00:00:00 2001 From: Denis Kopyrin Date: Tue, 2 Jul 2024 09:53:54 +0800 Subject: [PATCH 15/25] Fixed audiofile warnings (#811) --- tools/audiofile/audiofile.cpp | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/tools/audiofile/audiofile.cpp b/tools/audiofile/audiofile.cpp index 459bc33ee..bfb678990 100644 --- a/tools/audiofile/audiofile.cpp +++ b/tools/audiofile/audiofile.cpp @@ -3562,12 +3562,12 @@ struct signConverter static const int kMaxSignedValue = (((1 << (kScaleBits - 1)) - 1) << 1) + 1; static const int kMinSignedValue = -kMaxSignedValue - 1; - struct signedToUnsigned : public std::unary_function + struct signedToUnsigned : public std::function { UnsignedType operator()(SignedType x) { return x - kMinSignedValue; } }; - struct unsignedToSigned : public std::unary_function + struct unsignedToSigned : public std::function { SignedType operator()(UnsignedType x) { return x + kMinSignedValue; } }; @@ -3760,7 +3760,7 @@ private: }; template -struct intToFloat : public std::unary_function +struct intToFloat : public std::function { Result operator()(Arg x) const { return x; } }; @@ -3826,13 +3826,13 @@ private: }; template -struct lshift : public std::unary_function +struct lshift : public std::function { Result operator()(const Arg &x) const { return x << shift; } }; template -struct rshift : public std::unary_function +struct rshift : public std::function { Result operator()(const Arg &x) const { return x >> shift; } }; @@ -3928,7 +3928,7 @@ private: }; template -struct floatToFloat : public std::unary_function +struct floatToFloat : public std::function { Result operator()(Arg x) const { return x; } }; From 750ba10cb122154fc60ca24bd0743de6360d81be Mon Sep 17 00:00:00 2001 From: Denis Kopyrin Date: Wed, 3 Jul 2024 11:50:51 +0800 Subject: [PATCH 16/25] Fixed audiofile warnings properly (#814) * Revert "Fixed audiofile warnings (#811)" This reverts commit 500507509ba0ae8b49afd39286e8fb650b797e96. * Fixed audiofile warnings properly --- tools/audiofile/audiofile.cpp | 23 +++++++++++++++++------ 1 file changed, 17 insertions(+), 6 deletions(-) diff --git a/tools/audiofile/audiofile.cpp b/tools/audiofile/audiofile.cpp index bfb678990..10fb67a99 100644 --- a/tools/audiofile/audiofile.cpp +++ b/tools/audiofile/audiofile.cpp @@ -3552,6 +3552,17 @@ struct IntTypes { typedef int32_t SignedType; typedef uint32_t UnsignedT template <> struct IntTypes { typedef int32_t SignedType; typedef uint32_t UnsignedType; }; +namespace compat +{ + template + class unary_function + { + public: + using argument_type = Arg; + using result_type = R; + }; +} + template struct signConverter { @@ -3562,12 +3573,12 @@ struct signConverter static const int kMaxSignedValue = (((1 << (kScaleBits - 1)) - 1) << 1) + 1; static const int kMinSignedValue = -kMaxSignedValue - 1; - struct signedToUnsigned : public std::function + struct signedToUnsigned : public compat::unary_function { UnsignedType operator()(SignedType x) { return x - kMinSignedValue; } }; - struct unsignedToSigned : public std::function + struct unsignedToSigned : public compat::unary_function { SignedType operator()(UnsignedType x) { return x + kMinSignedValue; } }; @@ -3760,7 +3771,7 @@ private: }; template -struct intToFloat : public std::function +struct intToFloat : public compat::unary_function { Result operator()(Arg x) const { return x; } }; @@ -3826,13 +3837,13 @@ private: }; template -struct lshift : public std::function +struct lshift : public compat::unary_function { Result operator()(const Arg &x) const { return x << shift; } }; template -struct rshift : public std::function +struct rshift : public compat::unary_function { Result operator()(const Arg &x) const { return x >> shift; } }; @@ -3928,7 +3939,7 @@ private: }; template -struct floatToFloat : public std::function +struct floatToFloat : public compat::unary_function { Result operator()(Arg x) const { return x; } }; From a6782e6912be62ad1ecc6ecf99c94a0e34026758 Mon Sep 17 00:00:00 2001 From: Gregory Heskett Date: Tue, 2 Jul 2024 23:53:14 -0400 Subject: [PATCH 17/25] Fix seg faulting issue with MinGW build system, most likely caused by use of execl (#812) --- Makefile | 2 +- tools/Makefile | 5 +- tools/aiff_extract_codebook.c | 34 ++++++++-- tools/sdk-tools/tabledesign/print.c | 8 +++ tools/sdk-tools/tabledesign/tabledesign.c | 79 ++++++++++++++++++----- tools/sdk-tools/tabledesign/tabledesign.h | 4 ++ 6 files changed, 108 insertions(+), 24 deletions(-) diff --git a/Makefile b/Makefile index 930ee71fc..1bbfce2de 100644 --- a/Makefile +++ b/Makefile @@ -780,7 +780,7 @@ endif $(BUILD_DIR)/%.table: %.aiff $(call print,Extracting codebook:,$<,$@) - $(V)$(AIFF_EXTRACT_CODEBOOK) $< >$@ + $(V)$(AIFF_EXTRACT_CODEBOOK) $< $@ $(BUILD_DIR)/%.aifc: $(BUILD_DIR)/%.table %.aiff $(call print,Encoding ADPCM:,$(word 2,$^),$@) diff --git a/tools/Makefile b/tools/Makefile index 764b0c8a3..0f57861f9 100644 --- a/tools/Makefile +++ b/tools/Makefile @@ -49,7 +49,10 @@ textconv_SOURCES := textconv.c utf8.c hashtable.c aifc_decode_SOURCES := aifc_decode.c -aiff_extract_codebook_SOURCES := aiff_extract_codebook.c +aiff_extract_codebook: $(LIBAUDIOFILE) +aiff_extract_codebook_SOURCES := aiff_extract_codebook.c sdk-tools/tabledesign/codebook.c sdk-tools/tabledesign/estimate.c sdk-tools/tabledesign/print.c sdk-tools/tabledesign/tabledesign.c +aiff_extract_codebook_CFLAGS := -DEXTRACT_CODEBOOK -Iaudiofile -Wno-uninitialized +aiff_extract_codebook_LDFLAGS := -Laudiofile -laudiofile -lstdc++ tabledesign$(EXT): $(LIBAUDIOFILE) tabledesign_SOURCES := sdk-tools/tabledesign/codebook.c sdk-tools/tabledesign/estimate.c sdk-tools/tabledesign/print.c sdk-tools/tabledesign/tabledesign.c diff --git a/tools/aiff_extract_codebook.c b/tools/aiff_extract_codebook.c index c229139af..c0188c346 100644 --- a/tools/aiff_extract_codebook.c +++ b/tools/aiff_extract_codebook.c @@ -9,6 +9,8 @@ #include #include +#include "sdk-tools/tabledesign/tabledesign.h" + typedef short s16; typedef int s32; typedef unsigned char u8; @@ -28,8 +30,9 @@ typedef struct s16 state[16]; } ALADPCMloop; -static const char usage[] = "input.aiff"; -static const char *progname, *infilename; +static const char usage[] = "input.aiff, output.table"; +static const char *progname; +static char *infilename, *outfilename; #define checked_fread(a, b, c, d) if (fread(a, b, c, d) != c) fail_parse("error parsing file") @@ -115,12 +118,13 @@ int main(int argc, char **argv) FILE *ifile; progname = argv[0]; - if (argc < 2) { + if (argc < 3) { fprintf(stderr, "%s %s\n", progname, usage); exit(1); } infilename = argv[1]; + outfilename = argv[2]; if ((ifile = fopen(infilename, "rb")) == NULL) { fail_parse("AIFF file could not be opened"); @@ -168,17 +172,33 @@ int main(int argc, char **argv) fclose(ifile); if (coefTable == NULL) { - execl("./tools/tabledesign", "tabledesign", "-s", "1", infilename, NULL); + char* arguments[] = { + "tabledesign", + "-s", + "1", + "-p", + outfilename, + infilename + }; + return tabledesign_entry(6, arguments); } else { - printf("%d\n%d\n", order, npredictors); + FILE *fp; + if ((fp = fopen(outfilename, "w")) == NULL) { + fprintf(stderr, "%s: could not write to file: %s", progname, outfilename); + exit(1); + } + + fprintf(fp, "%d\n%d\n", order, npredictors); for (s32 i = 0; i < npredictors; i++) { for (s32 j = 0; j < order; j++) { for (s32 k = 0; k < 8; k++) { - printf("% 5d ", coefTable[i][k][j]); + fprintf(fp, "% 5d ", coefTable[i][k][j]); } - puts(""); + fprintf(fp, "\n"); } } + + fclose(fp); } return 0; } diff --git a/tools/sdk-tools/tabledesign/print.c b/tools/sdk-tools/tabledesign/print.c index 80fe9e084..5e462d62e 100644 --- a/tools/sdk-tools/tabledesign/print.c +++ b/tools/sdk-tools/tabledesign/print.c @@ -11,10 +11,18 @@ int print_entry(FILE *out, double *row, int order) int overflows; table = malloc(8 * sizeof(double*)); + if (table == NULL) { + fprintf(stderr, "print_entry: could not allocate memory for table\n"); + exit(1); + } for (i = 0; i < 8; i++) { table[i] = malloc(order * sizeof(double)); + if (table[i] == NULL) { + fprintf(stderr, "print_entry: could not allocate memory for table[%d]\n", i); + exit(1); + } } for (i = 0; i < order; i++) diff --git a/tools/sdk-tools/tabledesign/tabledesign.c b/tools/sdk-tools/tabledesign/tabledesign.c index f85757c42..d999a6645 100644 --- a/tools/sdk-tools/tabledesign/tabledesign.c +++ b/tools/sdk-tools/tabledesign/tabledesign.c @@ -30,9 +30,21 @@ typedef int SampleFormat; #endif -char usage[80] = "[-o order -s bits -t thresh -i refine_iter -f frame_size] aifcfile"; +#define mallocErr(var, size, msg) \ + var = malloc(size); \ + if (var == NULL) { \ + fprintf(stderr, "%s: malloc failed at %s\n", programName, msg); \ + exit(1); \ + } +char filename[1024] = ""; +char usage[80] = "[-o order -s bits -t thresh -i refine_iter -f frame_size -p filename] aifcfile"; + +#ifndef EXTRACT_CODEBOOK int main(int argc, char **argv) +#else +int tabledesign_entry(int argc, char **argv) +#endif { const char *programName; // sp118 double thresh; // sp110 @@ -64,6 +76,7 @@ int main(int argc, char **argv) short *temp_s3; int i; int dataSize; // s4 + FILE *outfile; order = 2; bits = 2; @@ -79,7 +92,7 @@ int main(int argc, char **argv) exit(1); } - while ((opt = getopt(argc, argv, "o:s:t:i:f:")) != -1) + while ((opt = getopt(argc, argv, "o:s:t:i:f:p:")) != -1) { switch (opt) { @@ -103,9 +116,25 @@ int main(int argc, char **argv) if (sscanf(optarg, "%lf", &thresh) != 1) thresh = 10.0; break; + case 'p': + if (sscanf(optarg, "%s", filename) != 1) { + fprintf(stderr, "%s: No valid out file!\n", programName); + exit(1); + } else { + if ((outfile = fopen(filename, "w")) == NULL) { + fprintf(stderr, "%s: Could not open %s for writing\n", programName, filename); + exit(1); + } + } + break; } } + if (outfile == NULL) { + fprintf(stderr, "%s: No out file!\n", programName); + exit(1); + } + argv = &argv[optind - 1]; afFile = AFopenfile(argv[1], MODE_READ, NULL); @@ -114,6 +143,10 @@ int main(int argc, char **argv) fprintf(stderr, "%s: input AIFC file [%s] could not be opened.\n", programName, argv[1]); + + fclose(outfile); + outfile = NULL; + exit(1); } @@ -123,6 +156,10 @@ int main(int argc, char **argv) fprintf(stderr, "%s: file [%s] contains %d channels, only 1 channel supported.\n", programName, argv[1], channels); + + fclose(outfile); + outfile = NULL; + exit(1); } @@ -132,6 +169,10 @@ int main(int argc, char **argv) fprintf(stderr, "%s: file [%s] contains %d tracks, only 1 track supported.\n", programName, argv[1], tracks); + + fclose(outfile); + outfile = NULL; + exit(1); } @@ -141,34 +182,38 @@ int main(int argc, char **argv) fprintf(stderr, "%s: file [%s] contains %d bit samples, only 16 bit samples supported.\n", programName, argv[1], (int)sampleWidth); + + fclose(outfile); + outfile = NULL; + exit(1); } - temp_s1 = malloc((1 << bits) * sizeof(double*)); + mallocErr(temp_s1, (1 << bits) * sizeof(double*), "temp_s1"); for (i = 0; i < (1 << bits); i++) { - temp_s1[i] = malloc((order + 1) * sizeof(double)); + mallocErr(temp_s1[i], (order + 1) * sizeof(double), "temp_si[i]"); } - splitDelta = malloc((order + 1) * sizeof(double)); - temp_s3 = malloc(frameSize * 2 * sizeof(short)); + mallocErr(splitDelta, (order + 1) * sizeof(double), "splitDelta"); + mallocErr(temp_s3, frameSize * 2 * sizeof(short), "temp_s3"); for (i = 0; i < frameSize * 2; i++) { temp_s3[i] = 0; } - vec = malloc((order + 1) * sizeof(double)); - spF4 = malloc((order + 1) * sizeof(double)); - mat = malloc((order + 1) * sizeof(double*)); + mallocErr(vec, (order + 1) * sizeof(double), "vec"); + mallocErr(spF4, (order + 1) * sizeof(double), "spF4"); + mallocErr(mat, (order + 1) * sizeof(double*), "mat"); for (i = 0; i <= order; i++) { - mat[i] = malloc((order + 1) * sizeof(double)); + mallocErr(mat[i], (order + 1) * sizeof(double), "mat[i]"); } - perm = malloc((order + 1) * sizeof(int)); + mallocErr(perm, (order + 1) * sizeof(int), "perm"); frameCount = AFgetframecnt(afFile, AF_DEFAULT_TRACK); rate = AFgetrate(afFile, AF_DEFAULT_TRACK); - data = malloc(frameCount * sizeof(double*)); + mallocErr(data, frameCount * sizeof(double*), "data"); dataSize = 0; while (AFreadframes(afFile, AF_DEFAULT_TRACK, temp_s3 + frameSize, frameSize) == frameSize) @@ -183,7 +228,7 @@ int main(int argc, char **argv) vec[0] = 1.0; if (kfroma(vec, spF4, order) == 0) { - data[dataSize] = malloc((order + 1) * sizeof(double)); + mallocErr(data[dataSize], (order + 1) * sizeof(double), "data[dataSize]"); data[dataSize][0] = 1.0; for (i = 1; i <= order; i++) @@ -247,16 +292,20 @@ int main(int argc, char **argv) } npredictors = 1 << curBits; - fprintf(stdout, "%d\n%d\n", order, npredictors); + fprintf(outfile, "%d\n%d\n", order, npredictors); for (i = 0; i < npredictors; i++) { - numOverflows += print_entry(stdout, temp_s1[i], order); + numOverflows += print_entry(outfile, temp_s1[i], order); } if (numOverflows > 0) { fprintf(stderr, "There was overflow - check the table\n"); } + + fclose(outfile); + outfile = NULL; + return 0; } diff --git a/tools/sdk-tools/tabledesign/tabledesign.h b/tools/sdk-tools/tabledesign/tabledesign.h index 89c7a154a..5cf298b25 100644 --- a/tools/sdk-tools/tabledesign/tabledesign.h +++ b/tools/sdk-tools/tabledesign/tabledesign.h @@ -27,4 +27,8 @@ void refine(double **table, int order, int npredictors, double **data, int dataS // print.c int print_entry(FILE *out, double *row, int order); +#ifdef EXTRACT_CODEBOOK +int tabledesign_entry(int, char**); +#endif + #endif From 4500ffb579a8fb13b62bf1aff32d4f237f11b674 Mon Sep 17 00:00:00 2001 From: Gregory Heskett Date: Tue, 2 Jul 2024 23:53:46 -0400 Subject: [PATCH 18/25] Bugfix: assemble_sound.py build corruption issues (#813) --- tools/assemble_sound.py | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/tools/assemble_sound.py b/tools/assemble_sound.py index 64141e661..885b1022b 100755 --- a/tools/assemble_sound.py +++ b/tools/assemble_sound.py @@ -781,10 +781,15 @@ def write_sequences( defines, is_shindou, ): - bank_names = sorted( - [os.path.splitext(os.path.basename(x))[0] for x in os.listdir(sound_bank_dir)] + bank_names = [] + banks = sorted( + [os.path.basename(x) for x in os.listdir(sound_bank_dir)] ) + for x in banks: + if x.endswith(".json"): + bank_names.append(os.path.splitext(x)[0]) + try: with open(seq_json, "r") as inf: data = inf.read() @@ -842,6 +847,15 @@ def write_sequences( while ind_to_name and json.get(ind_to_name[-1]) is None: ind_to_name.pop() + if ind_to_name: + for x in range(len(ind_to_name)): + if ind_to_name[x] is None: + fail( + "Sequence file index jump detected. " + + "Please make sure your sequence files are labeled correctly " + + "in incremental hexadecimal order." + ) + def serialize_file(name, ser, is_shindou): if json.get(name) is None: return From aacf2c5e6d07fb499ceb5248ffd238889d8f726e Mon Sep 17 00:00:00 2001 From: Reonu Date: Wed, 3 Jul 2024 22:30:21 +0100 Subject: [PATCH 19/25] Add more audio banks and add some occasional mappings for audio macros (#777) * Add more audio banks and add some occasional mappings for audio macros * Remove config define for extra sound banks --------- Co-authored-by: gheskett --- include/sounds.h | 16 ++++- sound/sequences/00_sound_player.s | 99 ++++++++++++++++++++++++++++++- src/audio/external.c | 31 ++++------ 3 files changed, 123 insertions(+), 23 deletions(-) diff --git a/include/sounds.h b/include/sounds.h index 80758f9d5..e186684e9 100644 --- a/include/sounds.h +++ b/include/sounds.h @@ -36,15 +36,27 @@ enum SoundBank { SOUND_BANK_MENU, SOUND_BANK_GENERAL2, SOUND_BANK_OBJ2, + SOUND_BANK_CUSTOM_FOREGROUND_1, + SOUND_BANK_CUSTOM_FOREGROUND_2, + SOUND_BANK_CUSTOM_FOREGROUND_3, + SOUND_BANK_CUSTOM_BACKGROUND_1, + SOUND_BANK_CUSTOM_BACKGROUND_2, + SOUND_BANK_CUSTOM_BACKGROUND_3, + SOUND_BANK_COUNT }; #define SOUND_BANKS_ALL_BITS 0xffff #define SOUND_BANKS_ALL ((1 << SOUND_BANK_COUNT) - 1) + #define SOUND_BANKS_FOREGROUND (\ (1 << SOUND_BANK_ACTION) |\ (1 << SOUND_BANK_VOICE) |\ - (1 << SOUND_BANK_MENU)) + (1 << SOUND_BANK_MENU) |\ + (1 << SOUND_BANK_CUSTOM_FOREGROUND_1) |\ + (1 << SOUND_BANK_CUSTOM_FOREGROUND_2) |\ + (1 << SOUND_BANK_CUSTOM_FOREGROUND_3)) + #define SOUND_BANKS_BACKGROUND (SOUND_BANKS_ALL & ~SOUND_BANKS_FOREGROUND) #define SOUND_BANKS_DISABLED_DURING_INTRO_CUTSCENE (\ (1 << SOUND_BANK_ENV) |\ @@ -589,4 +601,6 @@ enum SoundBank { #define SOUND_OBJ2_BOSS_DIALOG_GRUNT /* 0x90694081 */ SOUND_ARG_LOAD(SOUND_BANK_OBJ2, 0x69, 0x40, SOUND_DISCRETE) #define SOUND_OBJ2_MRI_SPINNING /* 0x906B0081 */ SOUND_ARG_LOAD(SOUND_BANK_OBJ2, 0x6B, 0x00, SOUND_DISCRETE) +// Add defines for sounds using extra custom banks here! + #endif // SOUNDS_H diff --git a/sound/sequences/00_sound_player.s b/sound/sequences/00_sound_player.s index 464bc0d6e..cad642171 100644 --- a/sound/sequences/00_sound_player.s +++ b/sound/sequences/00_sound_player.s @@ -12,7 +12,7 @@ seq_setmutescale 0 seq_setvol 127 #endif seq_settempo 120 -seq_initchannels 0x3ff +seq_initchannels 0xffff seq_startchannel 0, .channel0 seq_startchannel 1, .channel1 seq_startchannel 2, .channel2 @@ -23,6 +23,12 @@ seq_startchannel 6, .channel6 seq_startchannel 7, .channel7 seq_startchannel 8, .channel38 seq_startchannel 9, .channel59 +seq_startchannel 10, .channelA +seq_startchannel 11, .channelB +seq_startchannel 12, .channelC +seq_startchannel 13, .channelD +seq_startchannel 14, .channelE +seq_startchannel 15, .channelF .seq_loop: seq_delay 20000 seq_jump .seq_loop @@ -71,6 +77,72 @@ chan_stereoheadseteffects 1 chan_setdyntable .channel59_table chan_jump .main_loop_023589 +.channelA: +chan_largenoteson +chan_setinstr 0 +chan_setpanmix 127 +chan_setnotepriority 14 +chan_setval 0 +chan_iowriteval 5 +chan_stereoheadseteffects 1 +chan_setdyntable .channelA_table +chan_jump .main_loop_023589 + +.channelB: +chan_largenoteson +chan_setinstr 0 +chan_setpanmix 127 +chan_setnotepriority 14 +chan_setval 0 +chan_iowriteval 5 +chan_stereoheadseteffects 1 +chan_setdyntable .channelB_table +chan_jump .main_loop_023589 + +.channelC: +chan_largenoteson +chan_setinstr 0 +chan_setpanmix 127 +chan_setnotepriority 14 +chan_setval 0 +chan_iowriteval 5 +chan_stereoheadseteffects 1 +chan_setdyntable .channelC_table +chan_jump .main_loop_023589 + +.channelD: +chan_largenoteson +chan_setinstr 0 +chan_setpanmix 127 +chan_setnotepriority 14 +chan_setval 0 +chan_iowriteval 5 +chan_stereoheadseteffects 1 +chan_setdyntable .channelD_table +chan_jump .main_loop_023589 + +.channelE: +chan_largenoteson +chan_setinstr 0 +chan_setpanmix 127 +chan_setnotepriority 14 +chan_setval 0 +chan_iowriteval 5 +chan_stereoheadseteffects 1 +chan_setdyntable .channelE_table +chan_jump .main_loop_023589 + +.channelF: +chan_largenoteson +chan_setinstr 0 +chan_setpanmix 127 +chan_setnotepriority 14 +chan_setval 0 +chan_iowriteval 5 +chan_stereoheadseteffects 1 +chan_setdyntable .channelF_table +chan_jump .main_loop_023589 + // Main loop for standard, non-continuous sound effects .main_loop_023589: chan_hang @@ -7903,6 +7975,31 @@ layer_note0 38, 0x3, 127, 127 layer_delay 0x2a layer_jump .layer_32B7 + +.channelA_table: +// Add custom sounds for Channel A here! + + +.channelB_table: +// Add custom sounds for Channel B here! + + +.channelC_table: +// Add custom sounds for Channel C here! + + +.channelD_table: +// Add custom sounds for Channel D here! + + +.channelE_table: +// Add custom sounds for Channel E here! + + +.channelF_table: +// Add custom sounds for Channel F here! + + .align 2, 0 .envelope_32C4: envelope_line 7 20000 diff --git a/src/audio/external.c b/src/audio/external.c index 746305707..14086d66e 100644 --- a/src/audio/external.c +++ b/src/audio/external.c @@ -313,10 +313,10 @@ STATIC_ASSERT(ARRAY_COUNT(sBackgroundMusicDefaultVolume) == SEQ_COUNT, u8 sCurrentBackgroundMusicSeqId = SEQUENCE_NONE; u8 sMusicDynamicDelay = 0; -u8 sSoundBankUsedListBack[SOUND_BANK_COUNT] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; -u8 sSoundBankFreeListFront[SOUND_BANK_COUNT] = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }; -u8 sNumSoundsInBank[SOUND_BANK_COUNT] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; // only used for debugging -u8 sMaxChannelsForSoundBank[SOUND_BANK_COUNT] = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }; +u8 sSoundBankUsedListBack[SOUND_BANK_COUNT] = {[0 ... SOUND_BANK_COUNT-1] = 0}; +u8 sSoundBankFreeListFront[SOUND_BANK_COUNT] = {[0 ... SOUND_BANK_COUNT-1] = 1}; +u8 sNumSoundsInBank[SOUND_BANK_COUNT] = {[0 ... SOUND_BANK_COUNT-1] = 0}; // only used for debugging +u8 sMaxChannelsForSoundBank[SOUND_BANK_COUNT] = {[0 ... SOUND_BANK_COUNT-1] = 1}; // sBackgroundMusicMaxTargetVolume and sBackgroundMusicTargetVolume use the 0x80 // bit to indicate that they are set, and the rest of the bits for the actual value @@ -347,8 +347,7 @@ struct UnkStruct80343D00 D_SH_80343D00; #endif struct Sound sSoundRequests[0x100]; -// Curiously, this has size 3, despite SEQUENCE_PLAYERS == 4 on EU -struct ChannelVolumeScaleFade D_80360928[3][CHANNELS_MAX]; +struct ChannelVolumeScaleFade D_80360928[SEQUENCE_PLAYERS][CHANNELS_MAX]; u8 sUsedChannelsForSoundBank[SOUND_BANK_COUNT]; u8 sCurrentSound[SOUND_BANK_COUNT][MAX_CHANNELS_PER_SOUND_BANK]; // index into sSoundBanks @@ -1341,12 +1340,7 @@ static void update_game_sound(void) { get_sound_reverb(bank, soundIndex, channelIndex); #endif break; - case SOUND_BANK_GENERAL: - case SOUND_BANK_ENV: - case SOUND_BANK_OBJ: - case SOUND_BANK_AIR: - case SOUND_BANK_GENERAL2: - case SOUND_BANK_OBJ2: + default: #if defined(VERSION_EU) || defined(VERSION_SH) func_802ad770(0x05020000 | ((channelIndex & 0xff) << 8), get_sound_reverb(bank, soundIndex, channelIndex)); @@ -1507,12 +1501,7 @@ static void update_game_sound(void) { get_sound_reverb(bank, soundIndex, channelIndex); #endif break; - case SOUND_BANK_GENERAL: - case SOUND_BANK_ENV: - case SOUND_BANK_OBJ: - case SOUND_BANK_AIR: - case SOUND_BANK_GENERAL2: - case SOUND_BANK_OBJ2: + default: #if defined(VERSION_EU) || defined(VERSION_SH) func_802ad770(0x05020000 | ((channelIndex & 0xff) << 8), get_sound_reverb(bank, soundIndex, channelIndex)); @@ -1952,7 +1941,7 @@ void sound_init(void) { for (i = 0; i < SOUND_BANK_COUNT; i++) { // Set each sound in the bank to STOPPED - for (j = 0; j < 40; j++) { + for (j = 0; j < ARRAY_COUNT(sSoundBanks[0]); j++) { sSoundBanks[i][j].soundStatus = SOUND_STATUS_STOPPED; } @@ -1972,7 +1961,7 @@ void sound_init(void) { sSoundBanks[i][0].next = 0xff; // Set free list to contain every sound slot - for (j = 1; j < 40 - 1; j++) { + for (j = 1; j < ARRAY_COUNT(sSoundBanks[0]) - 1; j++) { sSoundBanks[i][j].prev = j - 1; sSoundBanks[i][j].next = j + 1; } @@ -1980,7 +1969,7 @@ void sound_init(void) { sSoundBanks[i][j].next = 0xff; } - for (j = 0; j < 3; j++) { + for (j = 0; j < SEQUENCE_PLAYERS; j++) { for (i = 0; i < CHANNELS_MAX; i++) { D_80360928[j][i].remainingFrames = 0; } From e1c00d4bef068231105c3291ffa26a2545a50c17 Mon Sep 17 00:00:00 2001 From: Gregory Heskett Date: Wed, 3 Jul 2024 22:47:28 -0400 Subject: [PATCH 20/25] HackerSM64 v2.3.0 --- VERSION.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/VERSION.txt b/VERSION.txt index a4b6ac3de..b1d18bc43 100644 --- a/VERSION.txt +++ b/VERSION.txt @@ -1 +1 @@ -v2.2.0 +v2.3.0 From 8dc47095e201af7dbe018cfb5042198890b06790 Mon Sep 17 00:00:00 2001 From: Lila Date: Mon, 19 Aug 2024 15:44:53 +0100 Subject: [PATCH 21/25] Add repo settings file Allows fast64 to know a repo's ideal settings as soon as decomp path is picked. Settings are the default except for: Matstack is on Microcode is set to EX2 Force Extended RAM is off because hackersm64 already has it enabled by default Refresh is set to Refresh 13 --- fast64.json | 62 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 62 insertions(+) create mode 100644 fast64.json diff --git a/fast64.json b/fast64.json new file mode 100644 index 000000000..ebb9fd25c --- /dev/null +++ b/fast64.json @@ -0,0 +1,62 @@ +{ + "version": 1.0, + "autoLoad": true, + "microcode": "F3DEX2/LX2", + "rdpDefaults": { + "geometryMode": { + "zBuffer": true, + "shade": true, + "cullBack": true, + "lighting": true, + "shadeSmooth": true + }, + "otherModeH": { + "textureConvert": "G_TC_FILT", + "textureFilter": "G_TF_BILERP", + "perspectiveCorrection": "G_TP_PERSP", + "pipelineMode": "G_PM_1PRIMITIVE" + }, + "otherModeL": {}, + "other": {} + }, + "sm64": { + "draw_layers": { + "0": { + "cycle_1": "G_RM_ZB_OPA_SURF", + "cycle_2": "G_RM_ZB_OPA_SURF2" + }, + "1": { + "cycle_1": "G_RM_AA_ZB_OPA_SURF", + "cycle_2": "G_RM_AA_ZB_OPA_SURF2" + }, + "2": { + "cycle_1": "G_RM_AA_ZB_OPA_DECAL", + "cycle_2": "G_RM_AA_ZB_OPA_DECAL2" + }, + "3": { + "cycle_1": "G_RM_AA_ZB_OPA_INTER", + "cycle_2": "G_RM_AA_ZB_OPA_INTER2" + }, + "4": { + "cycle_1": "G_RM_AA_ZB_TEX_EDGE", + "cycle_2": "G_RM_AA_ZB_TEX_EDGE2" + }, + "5": { + "cycle_1": "G_RM_AA_ZB_XLU_SURF", + "cycle_2": "G_RM_AA_ZB_XLU_SURF2" + }, + "6": { + "cycle_1": "G_RM_AA_ZB_XLU_DECAL", + "cycle_2": "G_RM_AA_ZB_XLU_DECAL2" + }, + "7": { + "cycle_1": "G_RM_AA_ZB_XLU_INTER", + "cycle_2": "G_RM_AA_ZB_XLU_INTER2" + } + }, + "refresh_version": "Refresh 13", + "compression_format": "mio0", + "force_extended_ram": false, + "matstack_fix": true + } +} \ No newline at end of file From 10720ea05667796e4e8b0120909a757b4cf09604 Mon Sep 17 00:00:00 2001 From: Lila Date: Sat, 24 Aug 2024 13:05:36 +0100 Subject: [PATCH 22/25] Fall back on fast64 default draw layers --- fast64.json | 34 ---------------------------------- 1 file changed, 34 deletions(-) diff --git a/fast64.json b/fast64.json index ebb9fd25c..e591f9bdc 100644 --- a/fast64.json +++ b/fast64.json @@ -20,40 +20,6 @@ "other": {} }, "sm64": { - "draw_layers": { - "0": { - "cycle_1": "G_RM_ZB_OPA_SURF", - "cycle_2": "G_RM_ZB_OPA_SURF2" - }, - "1": { - "cycle_1": "G_RM_AA_ZB_OPA_SURF", - "cycle_2": "G_RM_AA_ZB_OPA_SURF2" - }, - "2": { - "cycle_1": "G_RM_AA_ZB_OPA_DECAL", - "cycle_2": "G_RM_AA_ZB_OPA_DECAL2" - }, - "3": { - "cycle_1": "G_RM_AA_ZB_OPA_INTER", - "cycle_2": "G_RM_AA_ZB_OPA_INTER2" - }, - "4": { - "cycle_1": "G_RM_AA_ZB_TEX_EDGE", - "cycle_2": "G_RM_AA_ZB_TEX_EDGE2" - }, - "5": { - "cycle_1": "G_RM_AA_ZB_XLU_SURF", - "cycle_2": "G_RM_AA_ZB_XLU_SURF2" - }, - "6": { - "cycle_1": "G_RM_AA_ZB_XLU_DECAL", - "cycle_2": "G_RM_AA_ZB_XLU_DECAL2" - }, - "7": { - "cycle_1": "G_RM_AA_ZB_XLU_INTER", - "cycle_2": "G_RM_AA_ZB_XLU_INTER2" - } - }, "refresh_version": "Refresh 13", "compression_format": "mio0", "force_extended_ram": false, From a918785a92e2499cb9a456c4a9cfdf2f9dc8b86a Mon Sep 17 00:00:00 2001 From: Lila Date: Sun, 25 Aug 2024 19:26:57 +0100 Subject: [PATCH 23/25] Aglab requested change --- fast64.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fast64.json b/fast64.json index e591f9bdc..959d7db8a 100644 --- a/fast64.json +++ b/fast64.json @@ -21,7 +21,7 @@ }, "sm64": { "refresh_version": "Refresh 13", - "compression_format": "mio0", + "compression_format": "yay0", "force_extended_ram": false, "matstack_fix": true } From 27fedee76fc4cb034ce69bb75841b25cec161835 Mon Sep 17 00:00:00 2001 From: Lila Date: Wed, 4 Sep 2024 10:38:21 +0100 Subject: [PATCH 24/25] Update fast64.json --- fast64.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fast64.json b/fast64.json index 959d7db8a..5a8827794 100644 --- a/fast64.json +++ b/fast64.json @@ -20,7 +20,7 @@ "other": {} }, "sm64": { - "refresh_version": "Refresh 13", + "refresh_version": "HackerSM64 2.3.0", "compression_format": "yay0", "force_extended_ram": false, "matstack_fix": true From 3f1f7f41beac4ff0287bcb5f919efb52856ec27b Mon Sep 17 00:00:00 2001 From: Reonu Date: Thu, 5 Sep 2024 05:24:02 +0200 Subject: [PATCH 25/25] Add Arthurtilly to the CODEOWNERS file (#821) * Add Arthurtilly to the CODEOWNERS file * Update CODEOWNERS file to list each global owner on the same line This should (allegedly) fix the issues of only the last entry being treated as an owner for reviews. * Remove thecozies from CODEOWNERS file :( --------- Co-authored-by: Gregory Heskett --- CODEOWNERS | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/CODEOWNERS b/CODEOWNERS index 89bbe0875..14a903a85 100644 --- a/CODEOWNERS +++ b/CODEOWNERS @@ -2,9 +2,7 @@ # Each line is a file pattern followed by one or more owners. # These owners will be the default owners for everything in the repo. -* @Reonu -* @thecozies -* @gheskett +* @Reonu @gheskett @arthurtilly # Order is important. The last matching pattern has the most precedence. # So if a pull request only touches javascript files, only these owners