diff --git a/.github/calcrom/calcrom.pl b/.github/calcrom/calcrom.pl index c351c76122..9fbd959945 100755 --- a/.github/calcrom/calcrom.pl +++ b/.github/calcrom/calcrom.pl @@ -63,14 +63,14 @@ while (my $line = <$file>) # though. Uniq is pretty fast! my $base_cmd = "nm $elffname | awk '{print \$3}' | grep '^[^_].\\{4\\}' | uniq"; -# This looks for Unknown_, Unknown_, or sub_, followed by just numbers. Note that +# This looks for Unknown_, Unknown_, or sub_, followed by an address. Note that # it matches even if stuff precedes the unknown, like sUnknown/gUnknown. -my $undoc_cmd = "grep '[Uu]nknown_[0-9a-fA-F]*\\|sub_[0-9a-fA-F]*'"; +my $undoc_cmd = "grep '[Uu]nknown_[0-9a-fA-F]\\{5,7\\}\\|sub_[0-9a-fA-F]\\{5,7\\}'"; # This looks for every symbol with an address at the end of it. Some things are # given a name based on their type / location, but still have an unknown purpose. # For example, FooMap_EventScript_FFFFFFF. -my $partial_doc_cmd = "grep '_[0-28][0-9a-fA-F]\\{5,6\\}'"; +my $partial_doc_cmd = "grep '_[0-28][0-9a-fA-F]\\{5,7\\}'"; my $count_cmd = "wc -l"; @@ -104,16 +104,19 @@ my $partial_documented_as_string; # Performing addition on a string converts it to a number. Any string that fails # to convert to a number becomes 0. So if our converted number is 0, but our string # is nonzero, then the conversion was an error. +$undocumented_as_string =~ s/^\s+|\s+$//g; my $undocumented = $undocumented_as_string + 0; -(($undocumented != 0) and ($undocumented_as_string ne "0")) +(($undocumented != 0) or (($undocumented == 0) and ($undocumented_as_string eq "0"))) or die "ERROR: Cannot convert string to num: '$undocumented_as_string'"; +$partial_documented_as_string =~ s/^\s+|\s+$//g; my $partial_documented = $partial_documented_as_string + 0; -(($partial_documented != 0) and ($partial_documented_as_string ne "0")) +(($partial_documented != 0) or (($partial_documented == 0) and ($partial_documented_as_string eq "0"))) or die "ERROR: Cannot convert string to num: '$partial_documented_as_string'"; +$total_syms_as_string =~ s/^\s+|\s+$//g; my $total_syms = $total_syms_as_string + 0; -(($total_syms != 0) and ($total_syms_as_string ne "0")) +(($total_syms != 0) or (($total_syms == 0) and ($total_syms_as_string eq "0"))) or die "ERROR: Cannot convert string to num: '$total_syms_as_string'"; ($total_syms != 0) diff --git a/asm/macros/event.inc b/asm/macros/event.inc index 68265fc80e..9a375e01b4 100644 --- a/asm/macros/event.inc +++ b/asm/macros/event.inc @@ -334,10 +334,10 @@ .byte 0x30 .endm - @ Plays the specified (fanfare_number) fanfare. - .macro playfanfare fanfare_number:req + @ Plays the fanfare specified by the song number. If the specified song is not a fanfare it will instead play the first song in sFanfares. + .macro playfanfare songNumber:req .byte 0x31 - .2byte \fanfare_number + .2byte \songNumber .endm @ Blocks script execution until all currently-playing fanfares finish. @@ -1208,10 +1208,10 @@ .endm @ Plays the specified (species) Pokemon's cry. You can use waitcry to block script execution until the sound finishes. - .macro playmoncry species:req, effect:req + .macro playmoncry species:req, mode:req .byte 0xa1 .2byte \species - .2byte \effect + .2byte \mode .endm @ Changes the metatile at (x, y) on the current map. diff --git a/asm/macros/movement.inc b/asm/macros/movement.inc index 0220c11a96..62618379b6 100644 --- a/asm/macros/movement.inc +++ b/asm/macros/movement.inc @@ -1,131 +1,166 @@ - .macro create_movement_action name - enum _\name + .macro create_movement_action name:req, value:req .macro \name - .byte _\name + .byte \value .endm .endm - enum_start - create_movement_action face_down - create_movement_action face_up - create_movement_action face_left - create_movement_action face_right - create_movement_action walk_slow_down - create_movement_action walk_slow_up - create_movement_action walk_slow_left - create_movement_action walk_slow_right - create_movement_action walk_down - create_movement_action walk_up - create_movement_action walk_left - create_movement_action walk_right - create_movement_action jump_2_down - create_movement_action jump_2_up - create_movement_action jump_2_left - create_movement_action jump_2_right - create_movement_action delay_1 - create_movement_action delay_2 - create_movement_action delay_4 - create_movement_action delay_8 - create_movement_action delay_16 - create_movement_action walk_fast_down - create_movement_action walk_fast_up - create_movement_action walk_fast_left - create_movement_action walk_fast_right - create_movement_action walk_in_place_slow_down - create_movement_action walk_in_place_slow_up - create_movement_action walk_in_place_slow_left - create_movement_action walk_in_place_slow_right - create_movement_action walk_in_place_down - create_movement_action walk_in_place_up - create_movement_action walk_in_place_left - create_movement_action walk_in_place_right - create_movement_action walk_in_place_fast_down - create_movement_action walk_in_place_fast_up - create_movement_action walk_in_place_fast_left - create_movement_action walk_in_place_fast_right - create_movement_action walk_in_place_faster_down - create_movement_action walk_in_place_faster_up - create_movement_action walk_in_place_faster_left - create_movement_action walk_in_place_faster_right - create_movement_action ride_water_current_down - create_movement_action ride_water_current_up - create_movement_action ride_water_current_left - create_movement_action ride_water_current_right - create_movement_action walk_faster_down - create_movement_action walk_faster_up - create_movement_action walk_faster_left - create_movement_action walk_faster_right - create_movement_action slide_down - create_movement_action slide_up - create_movement_action slide_left - create_movement_action slide_right - create_movement_action player_run_down - create_movement_action player_run_up - create_movement_action player_run_left - create_movement_action player_run_right - create_movement_action start_anim_in_direction - create_movement_action jump_special_down - create_movement_action jump_special_up - create_movement_action jump_special_left - create_movement_action jump_special_right - create_movement_action face_player - create_movement_action face_away_player - create_movement_action lock_facing_direction - create_movement_action unlock_facing_direction - create_movement_action jump_down - create_movement_action jump_up - create_movement_action jump_left - create_movement_action jump_right - create_movement_action jump_in_place_down - create_movement_action jump_in_place_up - create_movement_action jump_in_place_left - create_movement_action jump_in_place_right - create_movement_action jump_in_place_down_up - create_movement_action jump_in_place_up_down - create_movement_action jump_in_place_left_right - create_movement_action jump_in_place_right_left - create_movement_action face_original_direction - create_movement_action nurse_joy_bow - create_movement_action enable_jump_landing_ground_effect - create_movement_action disable_jump_landing_ground_effect - create_movement_action disable_anim - create_movement_action restore_anim - create_movement_action set_invisible - create_movement_action set_visible - create_movement_action emote_exclamation_mark - create_movement_action emote_question_mark - create_movement_action emote_heart - create_movement_action reveal_trainer - create_movement_action rock_smash_break - create_movement_action cut_tree - create_movement_action set_fixed_priority - create_movement_action clear_fixed_priority - create_movement_action init_affine_anim - create_movement_action clear_affine_anim - create_movement_action hide_reflection - create_movement_action show_reflection - create_movement_action walk_down_start_affine - create_movement_action walk_down_affine + create_movement_action face_down, MOVEMENT_ACTION_FACE_DOWN + create_movement_action face_up, MOVEMENT_ACTION_FACE_UP + create_movement_action face_left, MOVEMENT_ACTION_FACE_LEFT + create_movement_action face_right, MOVEMENT_ACTION_FACE_RIGHT + create_movement_action walk_slow_down, MOVEMENT_ACTION_WALK_SLOW_DOWN + create_movement_action walk_slow_up, MOVEMENT_ACTION_WALK_SLOW_UP + create_movement_action walk_slow_left, MOVEMENT_ACTION_WALK_SLOW_LEFT + create_movement_action walk_slow_right, MOVEMENT_ACTION_WALK_SLOW_RIGHT + create_movement_action walk_down, MOVEMENT_ACTION_WALK_NORMAL_DOWN + create_movement_action walk_up, MOVEMENT_ACTION_WALK_NORMAL_UP + create_movement_action walk_left, MOVEMENT_ACTION_WALK_NORMAL_LEFT + create_movement_action walk_right, MOVEMENT_ACTION_WALK_NORMAL_RIGHT + create_movement_action jump_2_down, MOVEMENT_ACTION_JUMP_2_DOWN + create_movement_action jump_2_up, MOVEMENT_ACTION_JUMP_2_UP + create_movement_action jump_2_left, MOVEMENT_ACTION_JUMP_2_LEFT + create_movement_action jump_2_right, MOVEMENT_ACTION_JUMP_2_RIGHT + create_movement_action delay_1, MOVEMENT_ACTION_DELAY_1 + create_movement_action delay_2, MOVEMENT_ACTION_DELAY_2 + create_movement_action delay_4, MOVEMENT_ACTION_DELAY_4 + create_movement_action delay_8, MOVEMENT_ACTION_DELAY_8 + create_movement_action delay_16, MOVEMENT_ACTION_DELAY_16 + create_movement_action walk_fast_down, MOVEMENT_ACTION_WALK_FAST_DOWN + create_movement_action walk_fast_up, MOVEMENT_ACTION_WALK_FAST_UP + create_movement_action walk_fast_left, MOVEMENT_ACTION_WALK_FAST_LEFT + create_movement_action walk_fast_right, MOVEMENT_ACTION_WALK_FAST_RIGHT + create_movement_action walk_in_place_slow_down, MOVEMENT_ACTION_WALK_IN_PLACE_SLOW_DOWN + create_movement_action walk_in_place_slow_up, MOVEMENT_ACTION_WALK_IN_PLACE_SLOW_UP + create_movement_action walk_in_place_slow_left, MOVEMENT_ACTION_WALK_IN_PLACE_SLOW_LEFT + create_movement_action walk_in_place_slow_right, MOVEMENT_ACTION_WALK_IN_PLACE_SLOW_RIGHT + create_movement_action walk_in_place_down, MOVEMENT_ACTION_WALK_IN_PLACE_NORMAL_DOWN + create_movement_action walk_in_place_up, MOVEMENT_ACTION_WALK_IN_PLACE_NORMAL_UP + create_movement_action walk_in_place_left, MOVEMENT_ACTION_WALK_IN_PLACE_NORMAL_LEFT + create_movement_action walk_in_place_right, MOVEMENT_ACTION_WALK_IN_PLACE_NORMAL_RIGHT + create_movement_action walk_in_place_fast_down, MOVEMENT_ACTION_WALK_IN_PLACE_FAST_DOWN + create_movement_action walk_in_place_fast_up, MOVEMENT_ACTION_WALK_IN_PLACE_FAST_UP + create_movement_action walk_in_place_fast_left, MOVEMENT_ACTION_WALK_IN_PLACE_FAST_LEFT + create_movement_action walk_in_place_fast_right, MOVEMENT_ACTION_WALK_IN_PLACE_FAST_RIGHT + create_movement_action walk_in_place_faster_down, MOVEMENT_ACTION_WALK_IN_PLACE_FASTER_DOWN + create_movement_action walk_in_place_faster_up, MOVEMENT_ACTION_WALK_IN_PLACE_FASTER_UP + create_movement_action walk_in_place_faster_left, MOVEMENT_ACTION_WALK_IN_PLACE_FASTER_LEFT + create_movement_action walk_in_place_faster_right, MOVEMENT_ACTION_WALK_IN_PLACE_FASTER_RIGHT + create_movement_action ride_water_current_down, MOVEMENT_ACTION_RIDE_WATER_CURRENT_DOWN + create_movement_action ride_water_current_up, MOVEMENT_ACTION_RIDE_WATER_CURRENT_UP + create_movement_action ride_water_current_left, MOVEMENT_ACTION_RIDE_WATER_CURRENT_LEFT + create_movement_action ride_water_current_right, MOVEMENT_ACTION_RIDE_WATER_CURRENT_RIGHT + create_movement_action walk_faster_down, MOVEMENT_ACTION_WALK_FASTER_DOWN + create_movement_action walk_faster_up, MOVEMENT_ACTION_WALK_FASTER_UP + create_movement_action walk_faster_left, MOVEMENT_ACTION_WALK_FASTER_LEFT + create_movement_action walk_faster_right, MOVEMENT_ACTION_WALK_FASTER_RIGHT + create_movement_action slide_down, MOVEMENT_ACTION_SLIDE_DOWN + create_movement_action slide_up, MOVEMENT_ACTION_SLIDE_UP + create_movement_action slide_left, MOVEMENT_ACTION_SLIDE_LEFT + create_movement_action slide_right, MOVEMENT_ACTION_SLIDE_RIGHT + create_movement_action player_run_down, MOVEMENT_ACTION_PLAYER_RUN_DOWN + create_movement_action player_run_up, MOVEMENT_ACTION_PLAYER_RUN_UP + create_movement_action player_run_left, MOVEMENT_ACTION_PLAYER_RUN_LEFT + create_movement_action player_run_right, MOVEMENT_ACTION_PLAYER_RUN_RIGHT + create_movement_action start_anim_in_direction, MOVEMENT_ACTION_START_ANIM_IN_DIRECTION + create_movement_action jump_special_down, MOVEMENT_ACTION_JUMP_SPECIAL_DOWN + create_movement_action jump_special_up, MOVEMENT_ACTION_JUMP_SPECIAL_UP + create_movement_action jump_special_left, MOVEMENT_ACTION_JUMP_SPECIAL_LEFT + create_movement_action jump_special_right, MOVEMENT_ACTION_JUMP_SPECIAL_RIGHT + create_movement_action face_player, MOVEMENT_ACTION_FACE_PLAYER + create_movement_action face_away_player, MOVEMENT_ACTION_FACE_AWAY_PLAYER + create_movement_action lock_facing_direction, MOVEMENT_ACTION_LOCK_FACING_DIRECTION + create_movement_action unlock_facing_direction, MOVEMENT_ACTION_UNLOCK_FACING_DIRECTION + create_movement_action jump_down, MOVEMENT_ACTION_JUMP_DOWN + create_movement_action jump_up, MOVEMENT_ACTION_JUMP_UP + create_movement_action jump_left, MOVEMENT_ACTION_JUMP_LEFT + create_movement_action jump_right, MOVEMENT_ACTION_JUMP_RIGHT + create_movement_action jump_in_place_down, MOVEMENT_ACTION_JUMP_IN_PLACE_DOWN + create_movement_action jump_in_place_up, MOVEMENT_ACTION_JUMP_IN_PLACE_UP + create_movement_action jump_in_place_left, MOVEMENT_ACTION_JUMP_IN_PLACE_LEFT + create_movement_action jump_in_place_right, MOVEMENT_ACTION_JUMP_IN_PLACE_RIGHT + create_movement_action jump_in_place_down_up, MOVEMENT_ACTION_JUMP_IN_PLACE_DOWN_UP + create_movement_action jump_in_place_up_down, MOVEMENT_ACTION_JUMP_IN_PLACE_UP_DOWN + create_movement_action jump_in_place_left_right, MOVEMENT_ACTION_JUMP_IN_PLACE_LEFT_RIGHT + create_movement_action jump_in_place_right_left, MOVEMENT_ACTION_JUMP_IN_PLACE_RIGHT_LEFT + create_movement_action face_original_direction, MOVEMENT_ACTION_FACE_ORIGINAL_DIRECTION + create_movement_action nurse_joy_bow, MOVEMENT_ACTION_NURSE_JOY_BOW_DOWN + create_movement_action enable_jump_landing_ground_effect, MOVEMENT_ACTION_ENABLE_JUMP_LANDING_GROUND_EFFECT + create_movement_action disable_jump_landing_ground_effect, MOVEMENT_ACTION_DISABLE_JUMP_LANDING_GROUND_EFFECT + create_movement_action disable_anim, MOVEMENT_ACTION_DISABLE_ANIMATION + create_movement_action restore_anim, MOVEMENT_ACTION_RESTORE_ANIMATION + create_movement_action set_invisible, MOVEMENT_ACTION_SET_INVISIBLE + create_movement_action set_visible, MOVEMENT_ACTION_SET_VISIBLE + create_movement_action emote_exclamation_mark, MOVEMENT_ACTION_EMOTE_EXCLAMATION_MARK + create_movement_action emote_question_mark, MOVEMENT_ACTION_EMOTE_QUESTION_MARK + create_movement_action emote_heart, MOVEMENT_ACTION_EMOTE_HEART + create_movement_action reveal_trainer, MOVEMENT_ACTION_REVEAL_TRAINER + create_movement_action rock_smash_break, MOVEMENT_ACTION_ROCK_SMASH_BREAK + create_movement_action cut_tree, MOVEMENT_ACTION_CUT_TREE + create_movement_action set_fixed_priority, MOVEMENT_ACTION_SET_FIXED_PRIORITY + create_movement_action clear_fixed_priority, MOVEMENT_ACTION_CLEAR_FIXED_PRIORITY + create_movement_action init_affine_anim, MOVEMENT_ACTION_INIT_AFFINE_ANIM + create_movement_action clear_affine_anim, MOVEMENT_ACTION_CLEAR_AFFINE_ANIM + create_movement_action hide_reflection, MOVEMENT_ACTION_HIDE_REFLECTION + create_movement_action show_reflection, MOVEMENT_ACTION_SHOW_REFLECTION + create_movement_action walk_down_start_affine, MOVEMENT_ACTION_WALK_DOWN_START_AFFINE + create_movement_action walk_down_affine, MOVEMENT_ACTION_WALK_DOWN_AFFINE + create_movement_action acro_wheelie_face_down, MOVEMENT_ACTION_ACRO_WHEELIE_FACE_DOWN + create_movement_action acro_wheelie_face_up, MOVEMENT_ACTION_ACRO_WHEELIE_FACE_UP + create_movement_action acro_wheelie_face_left, MOVEMENT_ACTION_ACRO_WHEELIE_FACE_LEFT + create_movement_action acro_wheelie_face_right, MOVEMENT_ACTION_ACRO_WHEELIE_FACE_RIGHT + create_movement_action acro_pop_wheelie_down, MOVEMENT_ACTION_ACRO_POP_WHEELIE_DOWN + create_movement_action acro_pop_wheelie_up, MOVEMENT_ACTION_ACRO_POP_WHEELIE_UP + create_movement_action acro_pop_wheelie_left, MOVEMENT_ACTION_ACRO_POP_WHEELIE_LEFT + create_movement_action acro_pop_wheelie_right, MOVEMENT_ACTION_ACRO_POP_WHEELIE_RIGHT + create_movement_action acro_end_wheelie_face_down, MOVEMENT_ACTION_ACRO_END_WHEELIE_FACE_DOWN + create_movement_action acro_end_wheelie_face_up, MOVEMENT_ACTION_ACRO_END_WHEELIE_FACE_UP + create_movement_action acro_end_wheelie_face_left, MOVEMENT_ACTION_ACRO_END_WHEELIE_FACE_LEFT + create_movement_action acro_end_wheelie_face_right, MOVEMENT_ACTION_ACRO_END_WHEELIE_FACE_RIGHT + create_movement_action acro_wheelie_hop_face_down, MOVEMENT_ACTION_ACRO_WHEELIE_HOP_FACE_DOWN + create_movement_action acro_wheelie_hop_face_up, MOVEMENT_ACTION_ACRO_WHEELIE_HOP_FACE_UP + create_movement_action acro_wheelie_hop_face_left, MOVEMENT_ACTION_ACRO_WHEELIE_HOP_FACE_LEFT + create_movement_action acro_wheelie_hop_face_right, MOVEMENT_ACTION_ACRO_WHEELIE_HOP_FACE_RIGHT + create_movement_action acro_wheelie_hop_down, MOVEMENT_ACTION_ACRO_WHEELIE_HOP_DOWN + create_movement_action acro_wheelie_hop_up, MOVEMENT_ACTION_ACRO_WHEELIE_HOP_UP + create_movement_action acro_wheelie_hop_left, MOVEMENT_ACTION_ACRO_WHEELIE_HOP_LEFT + create_movement_action acro_wheelie_hop_right, MOVEMENT_ACTION_ACRO_WHEELIE_HOP_RIGHT + create_movement_action acro_wheelie_jump_down, MOVEMENT_ACTION_ACRO_WHEELIE_JUMP_DOWN + create_movement_action acro_wheelie_jump_up, MOVEMENT_ACTION_ACRO_WHEELIE_JUMP_UP + create_movement_action acro_wheelie_jump_left, MOVEMENT_ACTION_ACRO_WHEELIE_JUMP_LEFT + create_movement_action acro_wheelie_jump_right, MOVEMENT_ACTION_ACRO_WHEELIE_JUMP_RIGHT + create_movement_action acro_wheelie_in_place_down, MOVEMENT_ACTION_ACRO_WHEELIE_IN_PLACE_DOWN + create_movement_action acro_wheelie_in_place_up, MOVEMENT_ACTION_ACRO_WHEELIE_IN_PLACE_UP + create_movement_action acro_wheelie_in_place_left, MOVEMENT_ACTION_ACRO_WHEELIE_IN_PLACE_LEFT + create_movement_action acro_wheelie_in_place_right, MOVEMENT_ACTION_ACRO_WHEELIE_IN_PLACE_RIGHT + create_movement_action acro_pop_wheelie_move_down, MOVEMENT_ACTION_ACRO_POP_WHEELIE_MOVE_DOWN + create_movement_action acro_pop_wheelie_move_up, MOVEMENT_ACTION_ACRO_POP_WHEELIE_MOVE_UP + create_movement_action acro_pop_wheelie_move_left, MOVEMENT_ACTION_ACRO_POP_WHEELIE_MOVE_LEFT + create_movement_action acro_pop_wheelie_move_right, MOVEMENT_ACTION_ACRO_POP_WHEELIE_MOVE_RIGHT + create_movement_action acro_wheelie_move_down, MOVEMENT_ACTION_ACRO_WHEELIE_MOVE_DOWN + create_movement_action acro_wheelie_move_up, MOVEMENT_ACTION_ACRO_WHEELIE_MOVE_UP + create_movement_action acro_wheelie_move_left, MOVEMENT_ACTION_ACRO_WHEELIE_MOVE_LEFT + create_movement_action acro_wheelie_move_right, MOVEMENT_ACTION_ACRO_WHEELIE_MOVE_RIGHT + create_movement_action acro_end_wheelie_move_down, MOVEMENT_ACTION_ACRO_END_WHEELIE_MOVE_DOWN + create_movement_action acro_end_wheelie_move_up, MOVEMENT_ACTION_ACRO_END_WHEELIE_MOVE_UP + create_movement_action acro_end_wheelie_move_left, MOVEMENT_ACTION_ACRO_END_WHEELIE_MOVE_LEFT + create_movement_action acro_end_wheelie_move_right, MOVEMENT_ACTION_ACRO_END_WHEELIE_MOVE_RIGHT + create_movement_action walk_diag_northwest, MOVEMENT_ACTION_WALK_NORMAL_DIAGONAL_UP_LEFT + create_movement_action walk_diag_northeast, MOVEMENT_ACTION_WALK_NORMAL_DIAGONAL_UP_RIGHT + create_movement_action walk_diag_southwest, MOVEMENT_ACTION_WALK_NORMAL_DIAGONAL_DOWN_LEFT + create_movement_action walk_diag_southeast, MOVEMENT_ACTION_WALK_NORMAL_DIAGONAL_DOWN_RIGHT + create_movement_action walk_slow_diag_northwest, MOVEMENT_ACTION_WALK_SLOW_DIAGONAL_UP_LEFT + create_movement_action walk_slow_diag_northeast, MOVEMENT_ACTION_WALK_SLOW_DIAGONAL_UP_RIGHT + create_movement_action walk_slow_diag_southwest, MOVEMENT_ACTION_WALK_SLOW_DIAGONAL_DOWN_LEFT + create_movement_action walk_slow_diag_southeast, MOVEMENT_ACTION_WALK_SLOW_DIAGONAL_DOWN_RIGHT + create_movement_action store_lock_anim, MOVEMENT_ACTION_STORE_AND_LOCK_ANIM + create_movement_action free_unlock_anim, MOVEMENT_ACTION_FREE_AND_UNLOCK_ANIM + create_movement_action walk_left_affine, MOVEMENT_ACTION_WALK_LEFT_AFFINE + create_movement_action walk_right_affine, MOVEMENT_ACTION_WALK_RIGHT_AFFINE + create_movement_action levitate, MOVEMENT_ACTION_LEVITATE + create_movement_action stop_levitate, MOVEMENT_ACTION_STOP_LEVITATE + create_movement_action destroy_extra_task, MOVEMENT_ACTION_STOP_LEVITATE_AT_TOP + create_movement_action figure_8, MOVEMENT_ACTION_FIGURE_8 + create_movement_action fly_up, MOVEMENT_ACTION_FLY_UP + create_movement_action fly_down, MOVEMENT_ACTION_FLY_DOWN - enum_start 0x8C - create_movement_action walk_diag_northwest - create_movement_action walk_diag_northeast - create_movement_action walk_diag_southwest - create_movement_action walk_diag_southeast - create_movement_action walk_slow_diag_northwest - create_movement_action walk_slow_diag_northeast - create_movement_action walk_slow_diag_southwest - create_movement_action walk_slow_diag_southeast - create_movement_action store_lock_anim - create_movement_action free_unlock_anim - create_movement_action walk_left_affine - create_movement_action walk_right_affine - create_movement_action levitate - create_movement_action stop_levitate - create_movement_action destroy_extra_task - create_movement_action figure_8 - create_movement_action fly_up - create_movement_action fly_down - - enum_start 0xfe - create_movement_action step_end + create_movement_action step_end, MOVEMENT_ACTION_STEP_END diff --git a/asm/macros/music_voice.inc b/asm/macros/music_voice.inc index 64dd382140..ff87c56d6b 100644 --- a/asm/macros/music_voice.inc +++ b/asm/macros/music_voice.inc @@ -145,7 +145,7 @@ .byte 0xff, 0, 0xff, 0 .endm - .macro cry2 sample:req + .macro cry_reverse sample:req .byte 0x30, 60, 0, 0 .4byte \sample .byte 0xff, 0, 0xff, 0 diff --git a/common_syms/save.txt b/common_syms/save.txt index 190a658406..131031d506 100644 --- a/common_syms/save.txt +++ b/common_syms/save.txt @@ -3,11 +3,11 @@ gLastSaveCounter gLastKnownGoodSector gDamagedSaveSectors gSaveCounter -gFastSaveSection -gUnknown_03006208 +gReadWriteSector +gIncrementalSectorId gSaveUnusedVar gSaveFileStatus gGameContinueCallback -gRamSaveSectionLocations +gRamSaveSectorLocations gSaveUnusedVar2 gSaveAttemptStatus diff --git a/data/battle_anim_scripts.s b/data/battle_anim_scripts.s index 80e6cccd63..6f40b11e85 100644 --- a/data/battle_anim_scripts.s +++ b/data/battle_anim_scripts.s @@ -2,6 +2,7 @@ #include "constants/battle_anim.h" #include "constants/rgb.h" #include "constants/songs.h" +#include "constants/sound.h" #include "constants/moves.h" #include "constants/pokemon.h" #include "constants/items.h" @@ -18776,7 +18777,7 @@ Move_ROAR: monbg ANIM_ATTACKER splitbgprio ANIM_ATTACKER setalpha 8, 8 - createvisualtask SoundTask_PlayDoubleCry, 2, ANIM_ATTACKER, 2 + createvisualtask SoundTask_PlayDoubleCry, 2, ANIM_ATTACKER, DOUBLE_CRY_ROAR createvisualtask AnimTask_ScaleMonAndRestore, 5, -5, -5, 10, ANIM_ATTACKER, 1 call RoarEffect delay 20 @@ -18801,7 +18802,7 @@ RoarEffect: Move_GROWL: loadspritegfx ANIM_TAG_NOISE_LINE - createvisualtask SoundTask_PlayDoubleCry, 2, ANIM_ATTACKER, 255 + createvisualtask SoundTask_PlayDoubleCry, 2, ANIM_ATTACKER, DOUBLE_CRY_GROWL call RoarEffect delay 10 createvisualtask AnimTask_ShakeMon2, 2, ANIM_TARGET, 1, 0, 9, 1 @@ -22303,14 +22304,15 @@ Move_BLAZE_KICK: Move_HYPER_VOICE: loadspritegfx ANIM_TAG_THIN_RING - createvisualtask SoundTask_PlayCryWithEcho, 5, 0 + createvisualtask SoundTask_PlayCryWithEcho, 5, FALSE call HyperVoiceEffect waitforvisualfinish delay 8 - createvisualtask SoundTask_PlayCryWithEcho, 5, 1 + createvisualtask SoundTask_PlayCryWithEcho, 5, TRUE call HyperVoiceEffect waitforvisualfinish end + HyperVoiceEffect: createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 31, 3, 8, 0, RGB_YELLOW createvisualtask AnimTask_ScaleMonAndRestore, 5, -5, -5, 5, ANIM_ATTACKER, 0 diff --git a/data/event_scripts.s b/data/event_scripts.s index 6ccd82a40a..9e599b1942 100644 --- a/data/event_scripts.s +++ b/data/event_scripts.s @@ -45,6 +45,7 @@ #include "constants/script_menu.h" #include "constants/secret_bases.h" #include "constants/songs.h" +#include "constants/sound.h" #include "constants/species.h" #include "constants/trade.h" #include "constants/trainer_hill.h" diff --git a/data/maps/AncientTomb/scripts.inc b/data/maps/AncientTomb/scripts.inc index edbb75ccc5..f2e242bbd6 100644 --- a/data/maps/AncientTomb/scripts.inc +++ b/data/maps/AncientTomb/scripts.inc @@ -59,7 +59,7 @@ AncientTomb_EventScript_Registeel:: lock faceplayer waitse - playmoncry SPECIES_REGISTEEL, 2 + playmoncry SPECIES_REGISTEEL, CRY_MODE_ENCOUNTER delay 40 waitmoncry setwildbattle SPECIES_REGISTEEL, 40, ITEM_NONE diff --git a/data/maps/AquaHideout_B1F/scripts.inc b/data/maps/AquaHideout_B1F/scripts.inc index 4a4a95cc44..2a6f156e5c 100644 --- a/data/maps/AquaHideout_B1F/scripts.inc +++ b/data/maps/AquaHideout_B1F/scripts.inc @@ -32,7 +32,7 @@ AquaHideout_B1F_EventScript_Electrode1:: faceplayer setwildbattle SPECIES_ELECTRODE, 30, ITEM_NONE waitse - playmoncry SPECIES_ELECTRODE, 2 + playmoncry SPECIES_ELECTRODE, CRY_MODE_ENCOUNTER delay 40 waitmoncry setflag FLAG_SYS_CTRL_OBJ_DELETE @@ -59,7 +59,7 @@ AquaHideout_B1F_EventScript_Electrode2:: faceplayer setwildbattle SPECIES_ELECTRODE, 30, ITEM_NONE waitse - playmoncry SPECIES_ELECTRODE, 2 + playmoncry SPECIES_ELECTRODE, CRY_MODE_ENCOUNTER delay 40 waitmoncry setflag FLAG_SYS_CTRL_OBJ_DELETE diff --git a/data/maps/BattleFrontier_BattlePikeRoomNormal/scripts.inc b/data/maps/BattleFrontier_BattlePikeRoomNormal/scripts.inc index 6ab862287c..5bd04bfb40 100644 --- a/data/maps/BattleFrontier_BattlePikeRoomNormal/scripts.inc +++ b/data/maps/BattleFrontier_BattlePikeRoomNormal/scripts.inc @@ -303,7 +303,7 @@ BattleFrontier_BattlePikeRoomNormal_EventScript_KirliaAttack:: msgbox BattleFrontier_BattlePikeRoomNormal_Text_KirliaStop, MSGBOX_DEFAULT closemessage waitse - playmoncry SPECIES_KIRLIA, 0 + playmoncry SPECIES_KIRLIA, CRY_MODE_NORMAL waitmoncry pike_getstatus compare VAR_RESULT, PIKE_STATUS_TOXIC @@ -321,11 +321,11 @@ BattleFrontier_BattlePikeRoomNormal_EventScript_KirliaAttack:: applymovement LOCALID_OBJ_1, BattleFrontier_BattlePikeRoomNormal_Movement_MonFaceNPC waitmovement 0 waitse - playmoncry SPECIES_KIRLIA, 0 + playmoncry SPECIES_KIRLIA, CRY_MODE_NORMAL waitmoncry msgbox BattleFrontier_BattlePikeRoomNormal_Text_ThatsEnough, MSGBOX_DEFAULT waitse - playmoncry SPECIES_KIRLIA, 0 + playmoncry SPECIES_KIRLIA, CRY_MODE_NORMAL waitmoncry closemessage applymovement LOCALID_OBJ_1, BattleFrontier_BattlePikeRoomNormal_Movement_MonMoveAside @@ -338,7 +338,7 @@ BattleFrontier_BattlePikeRoomNormal_EventScript_DusclopsAttack:: msgbox BattleFrontier_BattlePikeRoomNormal_Text_DusclopsStop, MSGBOX_DEFAULT closemessage waitse - playmoncry SPECIES_DUSCLOPS, 0 + playmoncry SPECIES_DUSCLOPS, CRY_MODE_NORMAL waitmoncry pike_getstatus compare VAR_RESULT, PIKE_STATUS_FREEZE @@ -352,11 +352,11 @@ BattleFrontier_BattlePikeRoomNormal_EventScript_DusclopsAttack:: applymovement LOCALID_OBJ_1, BattleFrontier_BattlePikeRoomNormal_Movement_MonFaceNPC waitmovement 0 waitse - playmoncry SPECIES_DUSCLOPS, 0 + playmoncry SPECIES_DUSCLOPS, CRY_MODE_NORMAL waitmoncry msgbox BattleFrontier_BattlePikeRoomNormal_Text_ThatsEnough, MSGBOX_DEFAULT waitse - playmoncry SPECIES_DUSCLOPS, 0 + playmoncry SPECIES_DUSCLOPS, CRY_MODE_NORMAL waitmoncry closemessage applymovement LOCALID_OBJ_1, BattleFrontier_BattlePikeRoomNormal_Movement_MonMoveAside diff --git a/data/maps/BattleFrontier_OutsideEast/scripts.inc b/data/maps/BattleFrontier_OutsideEast/scripts.inc index 8166f91869..9157f0befe 100644 --- a/data/maps/BattleFrontier_OutsideEast/scripts.inc +++ b/data/maps/BattleFrontier_OutsideEast/scripts.inc @@ -72,7 +72,7 @@ BattleFrontier_OutsideEast_EventScript_Zigzagoon:: lock faceplayer waitse - playmoncry SPECIES_ZIGZAGOON, 0 + playmoncry SPECIES_ZIGZAGOON, CRY_MODE_NORMAL msgbox BattleFrontier_OutsideEast_Text_ZigzagoonLooksVacant, MSGBOX_DEFAULT waitmoncry release @@ -126,7 +126,7 @@ BattleFrontier_OutsideEast_EventScript_WaterSudowoodo:: msgbox gText_Sudowoodo_Attacked, MSGBOX_DEFAULT closemessage waitse - playmoncry SPECIES_SUDOWOODO, 2 + playmoncry SPECIES_SUDOWOODO, CRY_MODE_ENCOUNTER delay 40 waitmoncry setvar VAR_LAST_TALKED, LOCALID_SUDOWOODO diff --git a/data/maps/BattleFrontier_PokemonCenter_1F/scripts.inc b/data/maps/BattleFrontier_PokemonCenter_1F/scripts.inc index 6479270503..44806858fb 100644 --- a/data/maps/BattleFrontier_PokemonCenter_1F/scripts.inc +++ b/data/maps/BattleFrontier_PokemonCenter_1F/scripts.inc @@ -33,7 +33,7 @@ BattleFrontier_PokemonCenter_1F_EventScript_Skitty:: lock faceplayer waitse - playmoncry SPECIES_SKITTY, 0 + playmoncry SPECIES_SKITTY, CRY_MODE_NORMAL msgbox BattleFrontier_PokemonCenter_1F_Text_Skitty, MSGBOX_DEFAULT waitmoncry release diff --git a/data/maps/BirthIsland_Exterior/scripts.inc b/data/maps/BirthIsland_Exterior/scripts.inc index 03463729cb..cd1583b420 100644 --- a/data/maps/BirthIsland_Exterior/scripts.inc +++ b/data/maps/BirthIsland_Exterior/scripts.inc @@ -79,7 +79,7 @@ BirthIsland_Exterior_EventScript_Deoxys:: applymovement LOCALID_DEOXYS, BirthIsland_Exterior_Movement_DeoxysApproach waitmovement 0 waitse - playmoncry SPECIES_DEOXYS, 2 + playmoncry SPECIES_DEOXYS, CRY_MODE_ENCOUNTER delay 40 waitmoncry setvar VAR_LAST_TALKED, LOCALID_DEOXYS diff --git a/data/maps/DesertRuins/scripts.inc b/data/maps/DesertRuins/scripts.inc index 1bcaa23bff..443915d7e2 100644 --- a/data/maps/DesertRuins/scripts.inc +++ b/data/maps/DesertRuins/scripts.inc @@ -59,7 +59,7 @@ DesertRuins_EventScript_Regirock:: lock faceplayer waitse - playmoncry SPECIES_REGIROCK, 2 + playmoncry SPECIES_REGIROCK, CRY_MODE_ENCOUNTER delay 40 waitmoncry setwildbattle SPECIES_REGIROCK, 40, ITEM_NONE diff --git a/data/maps/DewfordTown_House1/scripts.inc b/data/maps/DewfordTown_House1/scripts.inc index 0aba45d3c7..cdd9d0cd29 100644 --- a/data/maps/DewfordTown_House1/scripts.inc +++ b/data/maps/DewfordTown_House1/scripts.inc @@ -13,7 +13,7 @@ DewfordTown_House1_EventScript_Zigzagoon:: lock faceplayer waitse - playmoncry SPECIES_ZIGZAGOON, 0 + playmoncry SPECIES_ZIGZAGOON, CRY_MODE_NORMAL msgbox DewfordTown_House1_Text_Zigzagoon, MSGBOX_DEFAULT waitmoncry release diff --git a/data/maps/FallarborTown/scripts.inc b/data/maps/FallarborTown/scripts.inc index 809909a5ca..96f4088436 100644 --- a/data/maps/FallarborTown/scripts.inc +++ b/data/maps/FallarborTown/scripts.inc @@ -33,7 +33,7 @@ FallarborTown_EventScript_Azurill:: lock faceplayer waitse - playmoncry SPECIES_AZURILL, 0 + playmoncry SPECIES_AZURILL, CRY_MODE_NORMAL msgbox FallarborTown_Text_Azurill, MSGBOX_DEFAULT waitmoncry release diff --git a/data/maps/FallarborTown_Mart/scripts.inc b/data/maps/FallarborTown_Mart/scripts.inc index 2b18a9e143..cb92f28f52 100644 --- a/data/maps/FallarborTown_Mart/scripts.inc +++ b/data/maps/FallarborTown_Mart/scripts.inc @@ -41,7 +41,7 @@ FallarborTown_Mart_EventScript_Skitty:: lock faceplayer waitse - playmoncry SPECIES_SKITTY, 0 + playmoncry SPECIES_SKITTY, CRY_MODE_NORMAL msgbox FallarborTown_Mart_Text_Skitty, MSGBOX_DEFAULT waitmoncry release diff --git a/data/maps/FarawayIsland_Interior/scripts.inc b/data/maps/FarawayIsland_Interior/scripts.inc index adb55d72ee..e35825be73 100644 --- a/data/maps/FarawayIsland_Interior/scripts.inc +++ b/data/maps/FarawayIsland_Interior/scripts.inc @@ -126,7 +126,7 @@ FarawayIsland_Interior_EventScript_Mew:: special SetMewAboveGrass message FarawayIsland_Interior_Text_Mew waitse - playmoncry SPECIES_MEW, 2 + playmoncry SPECIES_MEW, CRY_MODE_ENCOUNTER compare VAR_FACING, DIR_NORTH call_if_eq FarawayIsland_Interior_EventScript_FoundMewNorth compare VAR_FACING, DIR_SOUTH diff --git a/data/maps/FortreeCity/scripts.inc b/data/maps/FortreeCity/scripts.inc index 1ef3cffc73..6371d5b0cd 100644 --- a/data/maps/FortreeCity/scripts.inc +++ b/data/maps/FortreeCity/scripts.inc @@ -75,7 +75,7 @@ FortreeCity_EventScript_UseDevonScope:: applymovement VAR_LAST_TALKED, Movement_KecleonAppears waitmovement 0 waitse - playmoncry SPECIES_KECLEON, 2 + playmoncry SPECIES_KECLEON, CRY_MODE_ENCOUNTER delay 40 waitmoncry applymovement VAR_LAST_TALKED, FortreeCity_Movement_KecleonFlee diff --git a/data/maps/FortreeCity_House1/scripts.inc b/data/maps/FortreeCity_House1/scripts.inc index 3dd58ca344..e25334ee9a 100644 --- a/data/maps/FortreeCity_House1/scripts.inc +++ b/data/maps/FortreeCity_House1/scripts.inc @@ -57,7 +57,7 @@ FortreeCity_House1_EventScript_Zigzagoon:: lock faceplayer waitse - playmoncry SPECIES_ZIGZAGOON, 0 + playmoncry SPECIES_ZIGZAGOON, CRY_MODE_NORMAL msgbox FortreeCity_House1_Text_Zigzagoon, MSGBOX_DEFAULT waitmoncry release diff --git a/data/maps/FortreeCity_House4/scripts.inc b/data/maps/FortreeCity_House4/scripts.inc index db17e34740..c416cf1475 100644 --- a/data/maps/FortreeCity_House4/scripts.inc +++ b/data/maps/FortreeCity_House4/scripts.inc @@ -59,7 +59,7 @@ FortreeCity_House4_EventScript_Wingull:: lock faceplayer waitse - playmoncry SPECIES_WINGULL, 0 + playmoncry SPECIES_WINGULL, CRY_MODE_NORMAL msgbox FortreeCity_House4_Text_Wingull, MSGBOX_DEFAULT waitmoncry release diff --git a/data/maps/FortreeCity_House5/scripts.inc b/data/maps/FortreeCity_House5/scripts.inc index 71fcc78cad..eee6d358bf 100644 --- a/data/maps/FortreeCity_House5/scripts.inc +++ b/data/maps/FortreeCity_House5/scripts.inc @@ -13,7 +13,7 @@ FortreeCity_House5_EventScript_Zigzagoon:: lock faceplayer waitse - playmoncry SPECIES_ZIGZAGOON, 0 + playmoncry SPECIES_ZIGZAGOON, CRY_MODE_NORMAL msgbox FortreeCity_House5_Text_Zigzagoon, MSGBOX_DEFAULT waitmoncry release diff --git a/data/maps/IslandCave/scripts.inc b/data/maps/IslandCave/scripts.inc index af93863b7c..d660aadf06 100644 --- a/data/maps/IslandCave/scripts.inc +++ b/data/maps/IslandCave/scripts.inc @@ -92,7 +92,7 @@ IslandCave_EventScript_Regice:: lock faceplayer waitse - playmoncry SPECIES_REGICE, 2 + playmoncry SPECIES_REGICE, CRY_MODE_ENCOUNTER delay 40 waitmoncry setwildbattle SPECIES_REGICE, 40, ITEM_NONE diff --git a/data/maps/LavaridgeTown_House/scripts.inc b/data/maps/LavaridgeTown_House/scripts.inc index 58fd8ecb25..30f4e99ba4 100644 --- a/data/maps/LavaridgeTown_House/scripts.inc +++ b/data/maps/LavaridgeTown_House/scripts.inc @@ -9,7 +9,7 @@ LavaridgeTown_House_EventScript_Zigzagoon:: lock faceplayer waitse - playmoncry SPECIES_ZIGZAGOON, 0 + playmoncry SPECIES_ZIGZAGOON, CRY_MODE_NORMAL msgbox LavaridgeTown_House_Text_Zigzagoon, MSGBOX_DEFAULT waitmoncry release diff --git a/data/maps/LilycoveCity_DepartmentStore_1F/scripts.inc b/data/maps/LilycoveCity_DepartmentStore_1F/scripts.inc index ab4616cb50..fb82ba47a6 100644 --- a/data/maps/LilycoveCity_DepartmentStore_1F/scripts.inc +++ b/data/maps/LilycoveCity_DepartmentStore_1F/scripts.inc @@ -141,7 +141,7 @@ LilycoveCity_DepartmentStore_1F_EventScript_Azumarill:: lock faceplayer waitse - playmoncry SPECIES_AZUMARILL, 0 + playmoncry SPECIES_AZUMARILL, CRY_MODE_NORMAL msgbox LilycoveCity_DepartmentStore_1F_Text_Azumarill, MSGBOX_DEFAULT waitmoncry release diff --git a/data/maps/LilycoveCity_House1/scripts.inc b/data/maps/LilycoveCity_House1/scripts.inc index 34e9e6d90e..c2bd21cdc2 100644 --- a/data/maps/LilycoveCity_House1/scripts.inc +++ b/data/maps/LilycoveCity_House1/scripts.inc @@ -9,7 +9,7 @@ LilycoveCity_House1_EventScript_Kecleon:: lock faceplayer waitse - playmoncry SPECIES_KECLEON, 0 + playmoncry SPECIES_KECLEON, CRY_MODE_NORMAL msgbox LilycoveCity_House1_Text_Kecleon, MSGBOX_DEFAULT waitmoncry release diff --git a/data/maps/MarineCave_End/scripts.inc b/data/maps/MarineCave_End/scripts.inc index 47bbf9aada..296ef02f82 100644 --- a/data/maps/MarineCave_End/scripts.inc +++ b/data/maps/MarineCave_End/scripts.inc @@ -32,7 +32,7 @@ MarineCave_End_EventScript_Kyogre:: applymovement LOCALID_KYOGRE, MarineCave_End_Movement_KyogreApproach waitmovement 0 waitse - playmoncry SPECIES_KYOGRE, 2 + playmoncry SPECIES_KYOGRE, CRY_MODE_ENCOUNTER delay 40 waitmoncry setvar VAR_LAST_TALKED, LOCALID_KYOGRE diff --git a/data/maps/MossdeepCity_House2/scripts.inc b/data/maps/MossdeepCity_House2/scripts.inc index 63036814b2..5f568ac772 100644 --- a/data/maps/MossdeepCity_House2/scripts.inc +++ b/data/maps/MossdeepCity_House2/scripts.inc @@ -15,7 +15,7 @@ MossdeepCity_House2_EventScript_Wingull:: lock faceplayer waitse - playmoncry SPECIES_WINGULL, 0 + playmoncry SPECIES_WINGULL, CRY_MODE_NORMAL msgbox MossdeepCity_House2_Text_Wingull, MSGBOX_DEFAULT waitmoncry closemessage diff --git a/data/maps/MossdeepCity_House4/scripts.inc b/data/maps/MossdeepCity_House4/scripts.inc index 85c0e5ebc0..7b7348f4e6 100644 --- a/data/maps/MossdeepCity_House4/scripts.inc +++ b/data/maps/MossdeepCity_House4/scripts.inc @@ -34,7 +34,7 @@ MossdeepCity_House4_EventScript_Skitty:: lock faceplayer waitse - playmoncry SPECIES_SKITTY, 0 + playmoncry SPECIES_SKITTY, CRY_MODE_NORMAL msgbox MossdeepCity_House4_Text_Skitty, MSGBOX_DEFAULT waitmoncry release diff --git a/data/maps/NavelRock_Bottom/scripts.inc b/data/maps/NavelRock_Bottom/scripts.inc index da9e06cff3..d79c00c687 100644 --- a/data/maps/NavelRock_Bottom/scripts.inc +++ b/data/maps/NavelRock_Bottom/scripts.inc @@ -51,7 +51,7 @@ NavelRock_Bottom_EventScript_Lugia:: delay 30 delay 50 waitse - playmoncry SPECIES_LUGIA, 2 + playmoncry SPECIES_LUGIA, CRY_MODE_ENCOUNTER waitmoncry delay 20 setvar VAR_0x8004, SPECIES_LUGIA diff --git a/data/maps/NavelRock_Top/scripts.inc b/data/maps/NavelRock_Top/scripts.inc index 4355699ee5..e8b3e7e296 100644 --- a/data/maps/NavelRock_Top/scripts.inc +++ b/data/maps/NavelRock_Top/scripts.inc @@ -47,7 +47,7 @@ NavelRock_Top_EventScript_HoOh:: setweather WEATHER_NONE doweather waitse - playmoncry SPECIES_HO_OH, 2 + playmoncry SPECIES_HO_OH, CRY_MODE_ENCOUNTER delay 30 waitmoncry delay 60 diff --git a/data/maps/NewMauville_Inside/scripts.inc b/data/maps/NewMauville_Inside/scripts.inc index ac9572ea85..d924651cef 100644 --- a/data/maps/NewMauville_Inside/scripts.inc +++ b/data/maps/NewMauville_Inside/scripts.inc @@ -183,7 +183,7 @@ NewMauville_Inside_EventScript_Voltorb1:: faceplayer setwildbattle SPECIES_VOLTORB, 25, ITEM_NONE waitse - playmoncry SPECIES_VOLTORB, 2 + playmoncry SPECIES_VOLTORB, CRY_MODE_ENCOUNTER delay 40 waitmoncry setflag FLAG_SYS_CTRL_OBJ_DELETE @@ -210,7 +210,7 @@ NewMauville_Inside_EventScript_Voltorb2:: faceplayer setwildbattle SPECIES_VOLTORB, 25, ITEM_NONE waitse - playmoncry SPECIES_VOLTORB, 2 + playmoncry SPECIES_VOLTORB, CRY_MODE_ENCOUNTER delay 40 waitmoncry setflag FLAG_SYS_CTRL_OBJ_DELETE @@ -237,7 +237,7 @@ NewMauville_Inside_EventScript_Voltorb3:: faceplayer setwildbattle SPECIES_VOLTORB, 25, ITEM_NONE waitse - playmoncry SPECIES_VOLTORB, 2 + playmoncry SPECIES_VOLTORB, CRY_MODE_ENCOUNTER delay 40 waitmoncry setflag FLAG_SYS_CTRL_OBJ_DELETE diff --git a/data/maps/PacifidlogTown_House2/scripts.inc b/data/maps/PacifidlogTown_House2/scripts.inc index 3c0be269e2..27f966e961 100644 --- a/data/maps/PacifidlogTown_House2/scripts.inc +++ b/data/maps/PacifidlogTown_House2/scripts.inc @@ -77,7 +77,7 @@ PacifidlogTown_House2_EventScript_HappyAzurill:: lock faceplayer waitse - playmoncry SPECIES_AZURILL, 0 + playmoncry SPECIES_AZURILL, CRY_MODE_NORMAL msgbox PacifidlogTown_House2_Text_Rurii, MSGBOX_DEFAULT waitmoncry msgbox PacifidlogTown_House2_Text_VeryFriendlyWithTrainer, MSGBOX_DEFAULT @@ -88,7 +88,7 @@ PacifidlogTown_House2_EventScript_UnhappyAzurill:: lock faceplayer waitse - playmoncry SPECIES_AZURILL, 2 + playmoncry SPECIES_AZURILL, CRY_MODE_ENCOUNTER msgbox PacifidlogTown_House2_Text_Rururi, MSGBOX_DEFAULT waitmoncry msgbox PacifidlogTown_House2_Text_DoesntLikeTrainerVeryMuch, MSGBOX_DEFAULT diff --git a/data/maps/Route104_MrBrineysHouse/scripts.inc b/data/maps/Route104_MrBrineysHouse/scripts.inc index 60e08c7b89..f2e169d105 100644 --- a/data/maps/Route104_MrBrineysHouse/scripts.inc +++ b/data/maps/Route104_MrBrineysHouse/scripts.inc @@ -95,7 +95,7 @@ Route104_MrBrineysHouse_EventScript_Peeko:: lock faceplayer waitse - playmoncry SPECIES_WINGULL, 0 + playmoncry SPECIES_WINGULL, CRY_MODE_NORMAL msgbox Route104_MrBrineysHouse_Text_Peeko, MSGBOX_DEFAULT waitmoncry release diff --git a/data/maps/Route109/scripts.inc b/data/maps/Route109/scripts.inc index 03bd51b43d..37852c873f 100644 --- a/data/maps/Route109/scripts.inc +++ b/data/maps/Route109/scripts.inc @@ -362,7 +362,7 @@ Route109_EventScript_Zigzagoon:: lock faceplayer waitse - playmoncry SPECIES_ZIGZAGOON, 0 + playmoncry SPECIES_ZIGZAGOON, CRY_MODE_NORMAL msgbox Route109_Text_ZigzagoonCry, MSGBOX_DEFAULT waitmoncry release diff --git a/data/maps/Route114/scripts.inc b/data/maps/Route114/scripts.inc index 3eb92d0f1e..c0420fbf61 100644 --- a/data/maps/Route114/scripts.inc +++ b/data/maps/Route114/scripts.inc @@ -68,7 +68,7 @@ Route114_EventScript_Poochyena:: lock faceplayer waitse - playmoncry SPECIES_POOCHYENA, 2 + playmoncry SPECIES_POOCHYENA, CRY_MODE_ENCOUNTER msgbox Route114_Text_Poochyena, MSGBOX_DEFAULT waitmoncry release diff --git a/data/maps/Route119_House/scripts.inc b/data/maps/Route119_House/scripts.inc index 548b2c3948..9a44179a58 100644 --- a/data/maps/Route119_House/scripts.inc +++ b/data/maps/Route119_House/scripts.inc @@ -9,7 +9,7 @@ Route119_House_EventScript_Wingull:: lock faceplayer waitse - playmoncry SPECIES_WINGULL, 0 + playmoncry SPECIES_WINGULL, CRY_MODE_NORMAL msgbox Route119_House_Text_Wingull, MSGBOX_DEFAULT waitmoncry release diff --git a/data/maps/Route120/scripts.inc b/data/maps/Route120/scripts.inc index 9e0e43bd20..588fa17a0a 100644 --- a/data/maps/Route120/scripts.inc +++ b/data/maps/Route120/scripts.inc @@ -210,7 +210,7 @@ Route120_EventScript_StevenBattleKecleon:: applymovement LOCALID_BRIDGE_KECLEON, Movement_KecleonAppears waitmovement 0 waitse - playmoncry SPECIES_KECLEON, 2 + playmoncry SPECIES_KECLEON, CRY_MODE_ENCOUNTER delay 40 waitmoncry setwildbattle SPECIES_KECLEON, 30, ITEM_NONE diff --git a/data/maps/RustboroCity_Flat2_1F/scripts.inc b/data/maps/RustboroCity_Flat2_1F/scripts.inc index eda27c7168..7d965e8f3d 100644 --- a/data/maps/RustboroCity_Flat2_1F/scripts.inc +++ b/data/maps/RustboroCity_Flat2_1F/scripts.inc @@ -9,7 +9,7 @@ RustboroCity_Flat2_1F_EventScript_Skitty:: lock faceplayer waitse - playmoncry SPECIES_SKITTY, 0 + playmoncry SPECIES_SKITTY, CRY_MODE_NORMAL msgbox RustboroCity_Flat2_1F_Text_Skitty, MSGBOX_DEFAULT waitmoncry release diff --git a/data/maps/RustboroCity_House3/scripts.inc b/data/maps/RustboroCity_House3/scripts.inc index 70a359df63..549b4246c7 100644 --- a/data/maps/RustboroCity_House3/scripts.inc +++ b/data/maps/RustboroCity_House3/scripts.inc @@ -14,7 +14,7 @@ RustboroCity_House3_EventScript_Pekachu:: lock faceplayer waitse - playmoncry SPECIES_PIKACHU, 0 + playmoncry SPECIES_PIKACHU, CRY_MODE_NORMAL msgbox RustboroCity_House3_Text_Pekachu, MSGBOX_DEFAULT waitmoncry release diff --git a/data/maps/RusturfTunnel/scripts.inc b/data/maps/RusturfTunnel/scripts.inc index b8ffe49d0c..97a158f22d 100644 --- a/data/maps/RusturfTunnel/scripts.inc +++ b/data/maps/RusturfTunnel/scripts.inc @@ -307,7 +307,7 @@ RusturfTunnel_EventScript_Peeko:: lock faceplayer waitse - playmoncry SPECIES_WINGULL, 0 + playmoncry SPECIES_WINGULL, CRY_MODE_NORMAL msgbox RusturfTunnel_Text_Peeko, MSGBOX_DEFAULT waitmoncry release @@ -339,7 +339,7 @@ RusturfTunnel_EventScript_Grunt:: message RusturfTunnel_Text_ThankYouLetsGoHomePeeko waitmessage waitse - playmoncry SPECIES_WINGULL, 0 + playmoncry SPECIES_WINGULL, CRY_MODE_NORMAL waitbuttonpress waitmoncry closemessage diff --git a/data/maps/SSTidalCorridor/scripts.inc b/data/maps/SSTidalCorridor/scripts.inc index a94d50ec3f..4aa94de237 100644 --- a/data/maps/SSTidalCorridor/scripts.inc +++ b/data/maps/SSTidalCorridor/scripts.inc @@ -92,7 +92,7 @@ SSTidalCorridor_EventScript_Peeko:: lock faceplayer waitse - playmoncry SPECIES_WINGULL, 0 + playmoncry SPECIES_WINGULL, CRY_MODE_NORMAL msgbox SSTidalCorridor_Text_Peeko, MSGBOX_DEFAULT waitmoncry release diff --git a/data/maps/SkyPillar_Top/scripts.inc b/data/maps/SkyPillar_Top/scripts.inc index 0406509d2e..2b3c021200 100644 --- a/data/maps/SkyPillar_Top/scripts.inc +++ b/data/maps/SkyPillar_Top/scripts.inc @@ -48,7 +48,7 @@ SkyPillar_Top_EventScript_RayquazaFaceDown:: SkyPillar_Top_EventScript_Rayquaza:: lockall waitse - playmoncry SPECIES_RAYQUAZA, 2 + playmoncry SPECIES_RAYQUAZA, CRY_MODE_ENCOUNTER delay 40 waitmoncry setwildbattle SPECIES_RAYQUAZA, 70, ITEM_NONE @@ -105,7 +105,7 @@ SkyPillar_Top_EventScript_AwakenRayquaza:: applymovement LOCALID_RAYQUAZA_SLEEPING, SkyPillar_Top_Movement_RayquazaStir waitmovement 0 waitse - playmoncry SPECIES_RAYQUAZA, 2 + playmoncry SPECIES_RAYQUAZA, CRY_MODE_ENCOUNTER setvar VAR_0x8004, 1 @ vertical pan setvar VAR_0x8005, 1 @ horizontal pan setvar VAR_0x8006, 8 @ num shakes @@ -113,7 +113,7 @@ SkyPillar_Top_EventScript_AwakenRayquaza:: special ShakeCamera waitstate waitse - playmoncry SPECIES_RAYQUAZA, 2 + playmoncry SPECIES_RAYQUAZA, CRY_MODE_ENCOUNTER setvar VAR_0x8004, 1 @ vertical pan setvar VAR_0x8005, 2 @ horizontal pan setvar VAR_0x8006, 8 @ num shakes diff --git a/data/maps/SlateportCity_PokemonFanClub/scripts.inc b/data/maps/SlateportCity_PokemonFanClub/scripts.inc index 3bff728164..96e1a7633d 100644 --- a/data/maps/SlateportCity_PokemonFanClub/scripts.inc +++ b/data/maps/SlateportCity_PokemonFanClub/scripts.inc @@ -240,7 +240,7 @@ SlateportCity_PokemonFanClub_EventScript_Skitty:: lock faceplayer waitse - playmoncry SPECIES_SKITTY, 0 + playmoncry SPECIES_SKITTY, CRY_MODE_NORMAL msgbox SlateportCity_PokemonFanClub_Text_Skitty, MSGBOX_DEFAULT waitmoncry release @@ -250,7 +250,7 @@ SlateportCity_PokemonFanClub_EventScript_Zigzagoon:: lock faceplayer waitse - playmoncry SPECIES_ZIGZAGOON, 0 + playmoncry SPECIES_ZIGZAGOON, CRY_MODE_NORMAL msgbox SlateportCity_PokemonFanClub_Text_Zigzagoon, MSGBOX_DEFAULT waitmoncry release @@ -260,7 +260,7 @@ SlateportCity_PokemonFanClub_EventScript_Azumarill:: lock faceplayer waitse - playmoncry SPECIES_AZUMARILL, 0 + playmoncry SPECIES_AZUMARILL, CRY_MODE_NORMAL msgbox SlateportCity_PokemonFanClub_Text_Azumarill, MSGBOX_DEFAULT waitmoncry release diff --git a/data/maps/SootopolisCity/scripts.inc b/data/maps/SootopolisCity/scripts.inc index a9f9ebb39b..f3f8ea024a 100644 --- a/data/maps/SootopolisCity/scripts.inc +++ b/data/maps/SootopolisCity/scripts.inc @@ -243,7 +243,7 @@ SootopolisCity_EventScript_LegendariesSceneFromPokeCenter:: waitmovement 0 delay 60 waitse - playmoncry SPECIES_KYOGRE, 2 + playmoncry SPECIES_KYOGRE, CRY_MODE_ENCOUNTER applymovement LOCALID_KYOGRE, SootopolisCity_Movement_KyogreAttack applymovement LOCALID_GROUDON, SootopolisCity_Movement_GroudonDefend waitmovement 0 @@ -257,7 +257,7 @@ SootopolisCity_EventScript_LegendariesSceneFromPokeCenter:: applymovement LOCALID_GROUDON, SootopolisCity_Movement_GroudonMoveBack waitmovement 0 waitse - playmoncry SPECIES_GROUDON, 2 + playmoncry SPECIES_GROUDON, CRY_MODE_ENCOUNTER applymovement LOCALID_KYOGRE, SootopolisCity_Movement_KyogreDefend applymovement LOCALID_GROUDON, SootopolisCity_Movement_GroudonAttack waitmovement 0 @@ -271,7 +271,7 @@ SootopolisCity_EventScript_LegendariesSceneFromPokeCenter:: applymovement LOCALID_GROUDON, SootopolisCity_Movement_GroudonMoveBack waitmovement 0 waitse - playmoncry SPECIES_KYOGRE, 2 + playmoncry SPECIES_KYOGRE, CRY_MODE_ENCOUNTER applymovement LOCALID_KYOGRE, SootopolisCity_Movement_KyogreAttack applymovement LOCALID_GROUDON, SootopolisCity_Movement_GroudonDefend waitmovement 0 @@ -343,7 +343,7 @@ SootopolisCity_EventScript_LegendariesSceneFromDive:: waitmovement 0 delay 60 waitse - playmoncry SPECIES_KYOGRE, 2 + playmoncry SPECIES_KYOGRE, CRY_MODE_ENCOUNTER applymovement LOCALID_KYOGRE, SootopolisCity_Movement_KyogreAttack applymovement LOCALID_GROUDON, SootopolisCity_Movement_GroudonDefend waitmovement 0 @@ -357,7 +357,7 @@ SootopolisCity_EventScript_LegendariesSceneFromDive:: applymovement LOCALID_GROUDON, SootopolisCity_Movement_GroudonMoveBack waitmovement 0 waitse - playmoncry SPECIES_GROUDON, 2 + playmoncry SPECIES_GROUDON, CRY_MODE_ENCOUNTER applymovement LOCALID_KYOGRE, SootopolisCity_Movement_KyogreDefend applymovement LOCALID_GROUDON, SootopolisCity_Movement_GroudonAttack waitmovement 0 @@ -371,7 +371,7 @@ SootopolisCity_EventScript_LegendariesSceneFromDive:: applymovement LOCALID_GROUDON, SootopolisCity_Movement_GroudonMoveBack waitmovement 0 waitse - playmoncry SPECIES_KYOGRE, 2 + playmoncry SPECIES_KYOGRE, CRY_MODE_ENCOUNTER applymovement LOCALID_KYOGRE, SootopolisCity_Movement_KyogreAttack applymovement LOCALID_GROUDON, SootopolisCity_Movement_GroudonDefend waitmovement 0 @@ -536,7 +536,7 @@ SootopolisCity_EventScript_RayquazaSceneFromPokeCenter:: applymovement OBJ_EVENT_ID_CAMERA, SootopolisCity_Movement_PanUp waitmovement 0 waitse - playmoncry SPECIES_RAYQUAZA, 2 + playmoncry SPECIES_RAYQUAZA, CRY_MODE_ENCOUNTER setvar VAR_0x8004, 1 @ vertical pan setvar VAR_0x8005, 1 @ horizontal pan setvar VAR_0x8006, 8 @ num shakes @@ -544,7 +544,7 @@ SootopolisCity_EventScript_RayquazaSceneFromPokeCenter:: special ShakeCamera waitstate waitse - playmoncry SPECIES_RAYQUAZA, 2 + playmoncry SPECIES_RAYQUAZA, CRY_MODE_ENCOUNTER setvar VAR_0x8004, 1 @ vertical pan setvar VAR_0x8005, 2 @ horizontal pan setvar VAR_0x8006, 8 @ num shakes @@ -589,7 +589,7 @@ SootopolisCity_EventScript_RayquazaSceneFromDive:: applymovement OBJ_EVENT_ID_PLAYER, SootopolisCity_Movement_PlayerApproachLegendaries waitmovement 0 waitse - playmoncry SPECIES_RAYQUAZA, 2 + playmoncry SPECIES_RAYQUAZA, CRY_MODE_ENCOUNTER setvar VAR_0x8004, 1 @ vertical pan setvar VAR_0x8005, 1 @ horizontal pan setvar VAR_0x8006, 8 @ num shakes @@ -597,7 +597,7 @@ SootopolisCity_EventScript_RayquazaSceneFromDive:: special ShakeCamera waitstate waitse - playmoncry SPECIES_RAYQUAZA, 2 + playmoncry SPECIES_RAYQUAZA, CRY_MODE_ENCOUNTER setvar VAR_0x8004, 1 @ vertical pan setvar VAR_0x8005, 2 @ horizontal pan setvar VAR_0x8006, 8 @ num shakes diff --git a/data/maps/SootopolisCity_House1/scripts.inc b/data/maps/SootopolisCity_House1/scripts.inc index 1cedf7c579..65df8587f3 100644 --- a/data/maps/SootopolisCity_House1/scripts.inc +++ b/data/maps/SootopolisCity_House1/scripts.inc @@ -23,7 +23,7 @@ SootopolisCity_House1_EventScript_Kecleon:: lock faceplayer waitse - playmoncry SPECIES_KECLEON, 0 + playmoncry SPECIES_KECLEON, CRY_MODE_NORMAL msgbox SootopolisCity_House1_Text_Kecleon, MSGBOX_DEFAULT waitmoncry release diff --git a/data/maps/SootopolisCity_House4/scripts.inc b/data/maps/SootopolisCity_House4/scripts.inc index a1102bdd9f..1bc2b62ea3 100644 --- a/data/maps/SootopolisCity_House4/scripts.inc +++ b/data/maps/SootopolisCity_House4/scripts.inc @@ -13,7 +13,7 @@ SootopolisCity_House4_EventScript_Azumarill:: lock faceplayer waitse - playmoncry SPECIES_AZUMARILL, 0 + playmoncry SPECIES_AZUMARILL, CRY_MODE_NORMAL msgbox SootopolisCity_House4_Text_Azumarill, MSGBOX_DEFAULT waitmoncry release diff --git a/data/maps/SouthernIsland_Interior/scripts.inc b/data/maps/SouthernIsland_Interior/scripts.inc index a4c2c4960e..4ce90e249f 100644 --- a/data/maps/SouthernIsland_Interior/scripts.inc +++ b/data/maps/SouthernIsland_Interior/scripts.inc @@ -68,7 +68,7 @@ SouthernIsland_Interior_EventScript_Lati:: waitmovement 0 delay 50 waitse - playmoncry VAR_TEMP_4, 0 + playmoncry VAR_TEMP_4, CRY_MODE_NORMAL delay 30 waitmoncry addobject LOCALID_LATI diff --git a/data/maps/TerraCave_End/scripts.inc b/data/maps/TerraCave_End/scripts.inc index 2b35b3c513..0036f33b5a 100644 --- a/data/maps/TerraCave_End/scripts.inc +++ b/data/maps/TerraCave_End/scripts.inc @@ -32,7 +32,7 @@ TerraCave_End_EventScript_Groudon:: applymovement LOCALID_GROUDON, TerraCave_End_Movement_GroudonApproach waitmovement 0 waitse - playmoncry SPECIES_GROUDON, 2 + playmoncry SPECIES_GROUDON, CRY_MODE_ENCOUNTER delay 40 waitmoncry setvar VAR_LAST_TALKED, LOCALID_GROUDON diff --git a/data/maps/VerdanturfTown_FriendshipRatersHouse/scripts.inc b/data/maps/VerdanturfTown_FriendshipRatersHouse/scripts.inc index 9d0485a776..84cdef029e 100644 --- a/data/maps/VerdanturfTown_FriendshipRatersHouse/scripts.inc +++ b/data/maps/VerdanturfTown_FriendshipRatersHouse/scripts.inc @@ -56,7 +56,7 @@ VerdanturfTown_FriendshipRatersHouse_EventScript_Pikachu:: lock faceplayer waitse - playmoncry SPECIES_PIKACHU, 0 + playmoncry SPECIES_PIKACHU, CRY_MODE_NORMAL msgbox VerdanturfTown_FriendshipRatersHouse_Text_Pikachu, MSGBOX_DEFAULT waitmoncry release diff --git a/data/scripts/cave_of_origin.inc b/data/scripts/cave_of_origin.inc index abffd07ff1..6773c06624 100644 --- a/data/scripts/cave_of_origin.inc +++ b/data/scripts/cave_of_origin.inc @@ -2,7 +2,7 @@ CaveOfOrigin_EventScript_LegendaryCry:: lockall waitse - playmoncry SPECIES_KYOGRE, 2 @ SPECIES_GROUDON in Ruby + playmoncry SPECIES_KYOGRE, CRY_MODE_ENCOUNTER @ SPECIES_GROUDON in Ruby waitmoncry setvar VAR_TEMP_5, 1 releaseall diff --git a/data/scripts/day_care.inc b/data/scripts/day_care.inc index f5c023147b..8d529d5e10 100644 --- a/data/scripts/day_care.inc +++ b/data/scripts/day_care.inc @@ -114,7 +114,7 @@ Route117_PokemonDayCare_EventScript_GiveMonToRaise:: goto_if_eq Route117_PokemonDayCare_EventScript_OnlyOneAliveMon specialvar VAR_0x8005, GetSelectedMonNicknameAndSpecies waitse - playmoncry VAR_0x8005, 0 + playmoncry VAR_0x8005, CRY_MODE_NORMAL msgbox Route117_PokemonDayCare_Text_WellRaiseYourMon, MSGBOX_DEFAULT waitmoncry special StoreSelectedPokemonInDaycare @@ -220,7 +220,7 @@ Route117_PokemonDayCare_EventScript_RetrieveMon:: playse SE_SHOP msgbox Route117_PokemonDayCare_Text_HeresYourMon, MSGBOX_DEFAULT waitse - playmoncry VAR_RESULT, 0 + playmoncry VAR_RESULT, CRY_MODE_NORMAL msgbox Route117_PokemonDayCare_Text_TookBackMon, MSGBOX_DEFAULT waitmoncry specialvar VAR_RESULT, GetDaycareState diff --git a/data/scripts/kecleon.inc b/data/scripts/kecleon.inc index 4142174990..82eca777d5 100644 --- a/data/scripts/kecleon.inc +++ b/data/scripts/kecleon.inc @@ -70,7 +70,7 @@ EventScript_BattleKecleon:: applymovement VAR_LAST_TALKED, Movement_KecleonAppears waitmovement 0 waitse - playmoncry SPECIES_KECLEON, 2 + playmoncry SPECIES_KECLEON, CRY_MODE_ENCOUNTER delay 40 waitmoncry setwildbattle SPECIES_KECLEON, 30, ITEM_NONE diff --git a/data/scripts/lilycove_lady.inc b/data/scripts/lilycove_lady.inc index 137af87524..576fa28ade 100644 --- a/data/scripts/lilycove_lady.inc +++ b/data/scripts/lilycove_lady.inc @@ -454,7 +454,7 @@ LilycoveCity_PokemonCenter_1F_EventScript_FeedPokeblock:: waitmovement 0 delay 60 waitse - playmoncry VAR_0x8005, 0 + playmoncry VAR_0x8005, CRY_MODE_NORMAL delay 120 waitmoncry compare VAR_0x8004, 1 @@ -552,7 +552,7 @@ LilycoveCity_PokemonCenter_1F_EventScript_Zigzagoon:: lock faceplayer waitse - playmoncry VAR_0x8005, 0 + playmoncry VAR_0x8005, CRY_MODE_NORMAL msgbox LilycoveCity_PokemonCenter_1F_Text_Zigzagoon, MSGBOX_DEFAULT waitmoncry release @@ -562,7 +562,7 @@ LilycoveCity_PokemonCenter_1F_EventScript_Skitty:: lock faceplayer waitse - playmoncry VAR_0x8005, 0 + playmoncry VAR_0x8005, CRY_MODE_NORMAL msgbox LilycoveCity_PokemonCenter_1F_Text_Skitty, MSGBOX_DEFAULT waitmoncry release @@ -572,7 +572,7 @@ LilycoveCity_PokemonCenter_1F_EventScript_Poochyena:: lock faceplayer waitse - playmoncry VAR_0x8005, 0 + playmoncry VAR_0x8005, CRY_MODE_NORMAL msgbox LilycoveCity_PokemonCenter_1F_Text_Poochyena, MSGBOX_DEFAULT waitmoncry release @@ -582,7 +582,7 @@ LilycoveCity_PokemonCenter_1F_EventScript_Kecleon:: lock faceplayer waitse - playmoncry VAR_0x8005, 0 + playmoncry VAR_0x8005, CRY_MODE_NORMAL msgbox LilycoveCity_PokemonCenter_1F_Text_Kecleon, MSGBOX_DEFAULT waitmoncry release @@ -592,7 +592,7 @@ LilycoveCity_PokemonCenter_1F_EventScript_Pikachu:: lock faceplayer waitse - playmoncry VAR_0x8005, 0 + playmoncry VAR_0x8005, CRY_MODE_NORMAL msgbox LilycoveCity_PokemonCenter_1F_Text_Pikachu, MSGBOX_DEFAULT waitmoncry release diff --git a/data/scripts/players_house.inc b/data/scripts/players_house.inc index 571b61e62f..e2e985a7a1 100644 --- a/data/scripts/players_house.inc +++ b/data/scripts/players_house.inc @@ -385,7 +385,7 @@ PlayersHouse_1F_EventScript_Vigoroth1:: lock faceplayer waitse - playmoncry SPECIES_VIGOROTH, 0 + playmoncry SPECIES_VIGOROTH, CRY_MODE_NORMAL msgbox PlayersHouse_1F_Text_Vigoroth1, MSGBOX_DEFAULT waitmoncry release @@ -395,7 +395,7 @@ PlayersHouse_1F_EventScript_Vigoroth2:: lock faceplayer waitse - playmoncry SPECIES_VIGOROTH, 0 + playmoncry SPECIES_VIGOROTH, CRY_MODE_NORMAL msgbox PlayersHouse_1F_Text_Vigoroth2, MSGBOX_DEFAULT waitmoncry release diff --git a/data/tilesets/secondary/mauville/anim/flower_1/0.png b/data/tilesets/secondary/mauville/anim/flower_1/0.png index 263dba0700..d17b8ca906 100644 Binary files a/data/tilesets/secondary/mauville/anim/flower_1/0.png and b/data/tilesets/secondary/mauville/anim/flower_1/0.png differ diff --git a/data/tilesets/secondary/mauville/anim/flower_1/1.png b/data/tilesets/secondary/mauville/anim/flower_1/1.png index 66179f13dd..2a30d57804 100644 Binary files a/data/tilesets/secondary/mauville/anim/flower_1/1.png and b/data/tilesets/secondary/mauville/anim/flower_1/1.png differ diff --git a/data/tilesets/secondary/mauville/anim/flower_1/2.png b/data/tilesets/secondary/mauville/anim/flower_1/2.png index 63250e7b03..69cacfda67 100644 Binary files a/data/tilesets/secondary/mauville/anim/flower_1/2.png and b/data/tilesets/secondary/mauville/anim/flower_1/2.png differ diff --git a/data/tilesets/secondary/mauville/anim/flower_1/3.png b/data/tilesets/secondary/mauville/anim/flower_1/3.png index b1015d370b..60cf30bb43 100644 Binary files a/data/tilesets/secondary/mauville/anim/flower_1/3.png and b/data/tilesets/secondary/mauville/anim/flower_1/3.png differ diff --git a/data/tilesets/secondary/mauville/anim/flower_1/4.png b/data/tilesets/secondary/mauville/anim/flower_1/4.png index 1e8cb84afe..01162ac5c4 100644 Binary files a/data/tilesets/secondary/mauville/anim/flower_1/4.png and b/data/tilesets/secondary/mauville/anim/flower_1/4.png differ diff --git a/data/tilesets/secondary/mauville/anim/flower_2/0.png b/data/tilesets/secondary/mauville/anim/flower_2/0.png index 263dba0700..be6b131cf3 100644 Binary files a/data/tilesets/secondary/mauville/anim/flower_2/0.png and b/data/tilesets/secondary/mauville/anim/flower_2/0.png differ diff --git a/data/tilesets/secondary/mauville/anim/flower_2/1.png b/data/tilesets/secondary/mauville/anim/flower_2/1.png index 66179f13dd..715205f649 100644 Binary files a/data/tilesets/secondary/mauville/anim/flower_2/1.png and b/data/tilesets/secondary/mauville/anim/flower_2/1.png differ diff --git a/data/tilesets/secondary/mauville/anim/flower_2/2.png b/data/tilesets/secondary/mauville/anim/flower_2/2.png index 63250e7b03..6a5ccf7309 100644 Binary files a/data/tilesets/secondary/mauville/anim/flower_2/2.png and b/data/tilesets/secondary/mauville/anim/flower_2/2.png differ diff --git a/data/tilesets/secondary/mauville/anim/flower_2/3.png b/data/tilesets/secondary/mauville/anim/flower_2/3.png index b1015d370b..26a621fe13 100644 Binary files a/data/tilesets/secondary/mauville/anim/flower_2/3.png and b/data/tilesets/secondary/mauville/anim/flower_2/3.png differ diff --git a/data/tilesets/secondary/mauville/anim/flower_2/4.png b/data/tilesets/secondary/mauville/anim/flower_2/4.png index 1e8cb84afe..03603068ec 100644 Binary files a/data/tilesets/secondary/mauville/anim/flower_2/4.png and b/data/tilesets/secondary/mauville/anim/flower_2/4.png differ diff --git a/gflib/text.c b/gflib/text.c index bf5b01e486..557c11704b 100644 --- a/gflib/text.c +++ b/gflib/text.c @@ -13,8 +13,8 @@ #include "dynamic_placeholder_text_util.h" #include "fonts.h" -static u16 RenderText(struct TextPrinter *textPrinter); -static u32 RenderFont(struct TextPrinter *textPrinter); +static u16 RenderText(struct TextPrinter *); +static u32 RenderFont(struct TextPrinter *); static u16 FontFunc_Small(struct TextPrinter *); static u16 FontFunc_Normal(struct TextPrinter *); static u16 FontFunc_Short(struct TextPrinter *); @@ -23,32 +23,32 @@ static u16 FontFunc_ShortCopy2(struct TextPrinter *); static u16 FontFunc_ShortCopy3(struct TextPrinter *); static u16 FontFunc_Narrow(struct TextPrinter *); static u16 FontFunc_SmallNarrow(struct TextPrinter *); -static void DecompressGlyph_Small(u16 glyphId, bool32 isJapanese); -static void DecompressGlyph_Normal(u16 glyphId, bool32 isJapanese); -static void DecompressGlyph_Short(u16 glyphId, bool32 isJapanese); -static void DecompressGlyph_Narrow(u16 glyphId, bool32 isJapanese); -static void DecompressGlyph_SmallNarrow(u16 glyphId, bool32 isJapanese); -static void DecompressGlyph_Bold(u16 glyphId); -static u32 GetGlyphWidth_Small(u16 glyphId, bool32 isJapanese); -static u32 GetGlyphWidth_Normal(u16 glyphId, bool32 isJapanese); -static u32 GetGlyphWidth_Short(u16 glyphId, bool32 isJapanese); -static u32 GetGlyphWidth_Narrow(u16 glyphId, bool32 isJapanese); -static u32 GetGlyphWidth_SmallNarrow(u16 glyphId, bool32 isJapanese); +static void DecompressGlyph_Small(u16, bool32); +static void DecompressGlyph_Normal(u16, bool32); +static void DecompressGlyph_Short(u16, bool32); +static void DecompressGlyph_Narrow(u16, bool32); +static void DecompressGlyph_SmallNarrow(u16, bool32); +static void DecompressGlyph_Bold(u16); +static u32 GetGlyphWidth_Small(u16, bool32); +static u32 GetGlyphWidth_Normal(u16, bool32); +static u32 GetGlyphWidth_Short(u16, bool32); +static u32 GetGlyphWidth_Narrow(u16, bool32); +static u32 GetGlyphWidth_SmallNarrow(u16, bool32); -EWRAM_DATA struct TextPrinter gTempTextPrinter = {0}; -EWRAM_DATA struct TextPrinter gTextPrinters[NUM_TEXT_PRINTERS] = {0}; +static EWRAM_DATA struct TextPrinter sTempTextPrinter = {0}; +static EWRAM_DATA struct TextPrinter sTextPrinters[NUM_TEXT_PRINTERS] = {0}; -static u16 gFontHalfRowLookupTable[0x51]; -static u16 gLastTextBgColor; -static u16 gLastTextFgColor; -static u16 gLastTextShadowColor; +static u16 sFontHalfRowLookupTable[0x51]; +static u16 sLastTextBgColor; +static u16 sLastTextFgColor; +static u16 sLastTextShadowColor; const struct FontInfo *gFonts; bool8 gDisableTextPrinters; struct TextGlyph gCurGlyph; TextFlags gTextFlags; -const u8 gFontHalfRowOffsets[] = +static const u8 sFontHalfRowOffsets[] = { 0x00, 0x01, 0x02, 0x00, 0x03, 0x04, 0x05, 0x03, 0x06, 0x07, 0x08, 0x06, 0x00, 0x01, 0x02, 0x00, 0x09, 0x0A, 0x0B, 0x09, 0x0C, 0x0D, 0x0E, 0x0C, 0x0F, 0x10, 0x11, 0x0F, 0x09, 0x0A, 0x0B, 0x09, @@ -68,12 +68,16 @@ const u8 gFontHalfRowOffsets[] = 0x00, 0x01, 0x02, 0x00, 0x03, 0x04, 0x05, 0x03, 0x06, 0x07, 0x08, 0x06, 0x00, 0x01, 0x02, 0x00 }; -const u8 gDownArrowTiles[] = INCBIN_U8("graphics/fonts/down_arrow.4bpp"); -const u8 gDarkDownArrowTiles[] = INCBIN_U8("graphics/fonts/down_arrow_RS.4bpp"); -const u8 gUnusedFRLGBlankedDownArrow[] = INCBIN_U8("graphics/fonts/unused_frlg_blanked_down_arrow.4bpp"); -const u8 gUnusedFRLGDownArrow[] = INCBIN_U8("graphics/fonts/unused_frlg_down_arrow.4bpp"); -const u8 gDownArrowYCoords[] = { 0, 1, 2, 1 }; -const u8 gWindowVerticalScrollSpeeds[] = { 1, 2, 4, 0x0 }; +static const u8 sDownArrowTiles[] = INCBIN_U8("graphics/fonts/down_arrow.4bpp"); +static const u8 sDarkDownArrowTiles[] = INCBIN_U8("graphics/fonts/down_arrow_alt.4bpp"); +static const u8 sUnusedFRLGBlankedDownArrow[] = INCBIN_U8("graphics/fonts/unused_frlg_blanked_down_arrow.4bpp"); +static const u8 sUnusedFRLGDownArrow[] = INCBIN_U8("graphics/fonts/unused_frlg_down_arrow.4bpp"); +static const u8 sDownArrowYCoords[] = { 0, 1, 2, 1 }; +static const u8 sWindowVerticalScrollSpeeds[] = { + [OPTIONS_TEXT_SPEED_SLOW] = 1, + [OPTIONS_TEXT_SPEED_MID] = 2, + [OPTIONS_TEXT_SPEED_FAST] = 4, +}; static const struct GlyphWidthFunc sGlyphWidthFuncs[] = { @@ -88,24 +92,29 @@ static const struct GlyphWidthFunc sGlyphWidthFuncs[] = { FONT_SMALL_NARROW, GetGlyphWidth_SmallNarrow } }; -const struct KeypadIcon gKeypadIcons[] = +struct { - [CHAR_A_BUTTON] = { 0x0, 0x8, 0xC }, - [CHAR_B_BUTTON] = { 0x1, 0x8, 0xC }, - [CHAR_L_BUTTON] = { 0x2, 0x10, 0xC }, - [CHAR_R_BUTTON] = { 0x4, 0x10, 0xC }, - [CHAR_START_BUTTON] = { 0x6, 0x18, 0xC }, - [CHAR_SELECT_BUTTON] = { 0x9, 0x18, 0xC }, - [CHAR_DPAD_UP] = { 0xC, 0x8, 0xC }, - [CHAR_DPAD_DOWN] = { 0xD, 0x8, 0xC }, - [CHAR_DPAD_LEFT] = { 0xE, 0x8, 0xC }, - [CHAR_DPAD_RIGHT] = { 0xF, 0x8, 0xC }, - [CHAR_DPAD_UPDOWN] = { 0x20, 0x8, 0xC }, - [CHAR_DPAD_LEFTRIGHT] = { 0x21, 0x8, 0xC }, - [CHAR_DPAD_NONE] = { 0x22, 0x8, 0xC } + u16 tileOffset; + u8 width; + u8 height; +} static const sKeypadIcons[] = +{ + [CHAR_A_BUTTON] = { 0x00, 8, 12 }, + [CHAR_B_BUTTON] = { 0x01, 8, 12 }, + [CHAR_L_BUTTON] = { 0x02, 16, 12 }, + [CHAR_R_BUTTON] = { 0x04, 16, 12 }, + [CHAR_START_BUTTON] = { 0x06, 24, 12 }, + [CHAR_SELECT_BUTTON] = { 0x09, 24, 12 }, + [CHAR_DPAD_UP] = { 0x0C, 8, 12 }, + [CHAR_DPAD_DOWN] = { 0x0D, 8, 12 }, + [CHAR_DPAD_LEFT] = { 0x0E, 8, 12 }, + [CHAR_DPAD_RIGHT] = { 0x0F, 8, 12 }, + [CHAR_DPAD_UPDOWN] = { 0x20, 8, 12 }, + [CHAR_DPAD_LEFTRIGHT] = { 0x21, 8, 12 }, + [CHAR_DPAD_NONE] = { 0x22, 8, 12 } }; -const u8 gKeypadIconTiles[] = INCBIN_U8("graphics/fonts/keypad_icons.4bpp"); +static const u8 sKeypadIconTiles[] = INCBIN_U8("graphics/fonts/keypad_icons.4bpp"); static const struct FontInfo sFontInfos[] = { @@ -225,7 +234,7 @@ static const u8 sMenuCursorDimensions[][2] = [FONT_BOLD] = {} }; -const u16 gFontBoldJapaneseGlyphs[] = INCBIN_U16("graphics/fonts/bold.hwjpnfont"); +static const u16 sFontBoldJapaneseGlyphs[] = INCBIN_U16("graphics/fonts/bold.hwjpnfont"); static void SetFontsPointer(const struct FontInfo *fonts) { @@ -236,7 +245,7 @@ void DeactivateAllTextPrinters(void) { int printer; for (printer = 0; printer < NUM_TEXT_PRINTERS; ++printer) - gTextPrinters[printer].active = FALSE; + sTextPrinters[printer].active = FALSE; } u16 AddTextPrinterParameterized(u8 windowId, u8 fontId, const u8 *str, u8 x, u8 y, u8 speed, void (*callback)(struct TextPrinterTemplate *, u16)) @@ -267,41 +276,41 @@ bool16 AddTextPrinter(struct TextPrinterTemplate *printerTemplate, u8 speed, voi if (!gFonts) return FALSE; - gTempTextPrinter.active = TRUE; - gTempTextPrinter.state = RENDER_STATE_HANDLE_CHAR; - gTempTextPrinter.textSpeed = speed; - gTempTextPrinter.delayCounter = 0; - gTempTextPrinter.scrollDistance = 0; + sTempTextPrinter.active = TRUE; + sTempTextPrinter.state = RENDER_STATE_HANDLE_CHAR; + sTempTextPrinter.textSpeed = speed; + sTempTextPrinter.delayCounter = 0; + sTempTextPrinter.scrollDistance = 0; - for (i = 0; i < (int)ARRAY_COUNT(gTempTextPrinter.subStructFields); i++) - gTempTextPrinter.subStructFields[i] = 0; + for (i = 0; i < (int)ARRAY_COUNT(sTempTextPrinter.subStructFields); i++) + sTempTextPrinter.subStructFields[i] = 0; - gTempTextPrinter.printerTemplate = *printerTemplate; - gTempTextPrinter.callback = callback; - gTempTextPrinter.minLetterSpacing = 0; - gTempTextPrinter.japanese = 0; + sTempTextPrinter.printerTemplate = *printerTemplate; + sTempTextPrinter.callback = callback; + sTempTextPrinter.minLetterSpacing = 0; + sTempTextPrinter.japanese = 0; GenerateFontHalfRowLookupTable(printerTemplate->fgColor, printerTemplate->bgColor, printerTemplate->shadowColor); if (speed != TEXT_SKIP_DRAW && speed != 0) { - --gTempTextPrinter.textSpeed; - gTextPrinters[printerTemplate->windowId] = gTempTextPrinter; + --sTempTextPrinter.textSpeed; + sTextPrinters[printerTemplate->windowId] = sTempTextPrinter; } else { - gTempTextPrinter.textSpeed = 0; + sTempTextPrinter.textSpeed = 0; // Render all text (up to limit) at once for (j = 0; j < 0x400; ++j) { - if (RenderFont(&gTempTextPrinter) == RENDER_FINISH) + if (RenderFont(&sTempTextPrinter) == RENDER_FINISH) break; } // All the text is rendered to the window but don't draw it yet. if (speed != TEXT_SKIP_DRAW) - CopyWindowToVram(gTempTextPrinter.printerTemplate.windowId, COPYWIN_GFX); - gTextPrinters[printerTemplate->windowId].active = FALSE; + CopyWindowToVram(sTempTextPrinter.printerTemplate.windowId, COPYWIN_GFX); + sTextPrinters[printerTemplate->windowId].active = FALSE; } gDisableTextPrinters = FALSE; return TRUE; @@ -315,19 +324,19 @@ void RunTextPrinters(void) { for (i = 0; i < NUM_TEXT_PRINTERS; ++i) { - if (gTextPrinters[i].active) + if (sTextPrinters[i].active) { - u16 temp = RenderFont(&gTextPrinters[i]); + u16 temp = RenderFont(&sTextPrinters[i]); switch (temp) { case RENDER_PRINT: - CopyWindowToVram(gTextPrinters[i].printerTemplate.windowId, COPYWIN_GFX); + CopyWindowToVram(sTextPrinters[i].printerTemplate.windowId, COPYWIN_GFX); case RENDER_UPDATE: - if (gTextPrinters[i].callback != 0) - gTextPrinters[i].callback(&gTextPrinters[i].printerTemplate, temp); + if (sTextPrinters[i].callback != 0) + sTextPrinters[i].callback(&sTextPrinters[i].printerTemplate, temp); break; case RENDER_FINISH: - gTextPrinters[i].active = FALSE; + sTextPrinters[i].active = FALSE; break; } } @@ -337,7 +346,7 @@ void RunTextPrinters(void) bool16 IsTextPrinterActive(u8 id) { - return gTextPrinters[id].active; + return sTextPrinters[id].active; } static u32 RenderFont(struct TextPrinter *textPrinter) @@ -356,11 +365,11 @@ void GenerateFontHalfRowLookupTable(u8 fgColor, u8 bgColor, u8 shadowColor) u32 fg12, bg12, shadow12; u32 temp; - u16 *current = gFontHalfRowLookupTable; + u16 *current = sFontHalfRowLookupTable; - gLastTextBgColor = bgColor; - gLastTextFgColor = fgColor; - gLastTextShadowColor = shadowColor; + sLastTextBgColor = bgColor; + sLastTextFgColor = fgColor; + sLastTextShadowColor = shadowColor; bg12 = bgColor << 12; fg12 = fgColor << 12; @@ -504,9 +513,9 @@ void GenerateFontHalfRowLookupTable(u8 fgColor, u8 bgColor, u8 shadowColor) void SaveTextColors(u8 *fgColor, u8 *bgColor, u8 *shadowColor) { - *bgColor = gLastTextBgColor; - *fgColor = gLastTextFgColor; - *shadowColor = gLastTextShadowColor; + *bgColor = sLastTextBgColor; + *fgColor = sLastTextFgColor; + *shadowColor = sLastTextShadowColor; } void RestoreTextColors(u8 *fgColor, u8 *bgColor, u8 *shadowColor) @@ -521,40 +530,41 @@ void DecompressGlyphTile(const void *src_, void *dest_) u32 *dest = dest_; temp = *(src++); - *(dest)++ = ((gFontHalfRowLookupTable[gFontHalfRowOffsets[temp & 0xFF]]) << 16) | (gFontHalfRowLookupTable[gFontHalfRowOffsets[temp >> 8]]); + *(dest)++ = ((sFontHalfRowLookupTable[sFontHalfRowOffsets[temp & 0xFF]]) << 16) | (sFontHalfRowLookupTable[sFontHalfRowOffsets[temp >> 8]]); temp = *(src++); - *(dest++) = ((gFontHalfRowLookupTable[gFontHalfRowOffsets[temp & 0xFF]]) << 16) | (gFontHalfRowLookupTable[gFontHalfRowOffsets[temp >> 8]]); + *(dest++) = ((sFontHalfRowLookupTable[sFontHalfRowOffsets[temp & 0xFF]]) << 16) | (sFontHalfRowLookupTable[sFontHalfRowOffsets[temp >> 8]]); temp = *(src++); - *(dest++) = ((gFontHalfRowLookupTable[gFontHalfRowOffsets[temp & 0xFF]]) << 16) | (gFontHalfRowLookupTable[gFontHalfRowOffsets[temp >> 8]]); + *(dest++) = ((sFontHalfRowLookupTable[sFontHalfRowOffsets[temp & 0xFF]]) << 16) | (sFontHalfRowLookupTable[sFontHalfRowOffsets[temp >> 8]]); temp = *(src++); - *(dest++) = ((gFontHalfRowLookupTable[gFontHalfRowOffsets[temp & 0xFF]]) << 16) | (gFontHalfRowLookupTable[gFontHalfRowOffsets[temp >> 8]]); + *(dest++) = ((sFontHalfRowLookupTable[sFontHalfRowOffsets[temp & 0xFF]]) << 16) | (sFontHalfRowLookupTable[sFontHalfRowOffsets[temp >> 8]]); temp = *(src++); - *(dest++) = ((gFontHalfRowLookupTable[gFontHalfRowOffsets[temp & 0xFF]]) << 16) | (gFontHalfRowLookupTable[gFontHalfRowOffsets[temp >> 8]]); + *(dest++) = ((sFontHalfRowLookupTable[sFontHalfRowOffsets[temp & 0xFF]]) << 16) | (sFontHalfRowLookupTable[sFontHalfRowOffsets[temp >> 8]]); temp = *(src++); - *(dest++) = ((gFontHalfRowLookupTable[gFontHalfRowOffsets[temp & 0xFF]]) << 16) | (gFontHalfRowLookupTable[gFontHalfRowOffsets[temp >> 8]]); + *(dest++) = ((sFontHalfRowLookupTable[sFontHalfRowOffsets[temp & 0xFF]]) << 16) | (sFontHalfRowLookupTable[sFontHalfRowOffsets[temp >> 8]]); temp = *(src++); - *(dest++) = ((gFontHalfRowLookupTable[gFontHalfRowOffsets[temp & 0xFF]]) << 16) | (gFontHalfRowLookupTable[gFontHalfRowOffsets[temp >> 8]]); + *(dest++) = ((sFontHalfRowLookupTable[sFontHalfRowOffsets[temp & 0xFF]]) << 16) | (sFontHalfRowLookupTable[sFontHalfRowOffsets[temp >> 8]]); temp = *(src++); - *(dest++) = ((gFontHalfRowLookupTable[gFontHalfRowOffsets[temp & 0xFF]]) << 16) | (gFontHalfRowLookupTable[gFontHalfRowOffsets[temp >> 8]]); + *(dest++) = ((sFontHalfRowLookupTable[sFontHalfRowOffsets[temp & 0xFF]]) << 16) | (sFontHalfRowLookupTable[sFontHalfRowOffsets[temp >> 8]]); } -u8 GetLastTextColor(u8 colorType) +// Unused +static u8 GetLastTextColor(u8 colorType) { switch (colorType) { case 0: - return gLastTextFgColor; + return sLastTextFgColor; case 2: - return gLastTextBgColor; + return sLastTextBgColor; case 1: - return gLastTextShadowColor; + return sLastTextShadowColor; default: return 0; } @@ -644,7 +654,7 @@ void ClearTextSpan(struct TextPrinter *textPrinter, u32 width) struct TextGlyph *glyph; u8* glyphHeight; - if (gLastTextBgColor != 0) + if (sLastTextBgColor != TEXT_COLOR_TRANSPARENT) { window = &gWindows[textPrinter->printerTemplate.windowId]; pixels_data.pixels = window->tileData; @@ -660,7 +670,7 @@ void ClearTextSpan(struct TextPrinter *textPrinter, u32 width) textPrinter->printerTemplate.currentY, width, *glyphHeight, - gLastTextBgColor); + sLastTextBgColor); } } @@ -798,20 +808,20 @@ void TextPrinterDrawDownArrow(struct TextPrinter *textPrinter) switch (gTextFlags.useAlternateDownArrow) { - case FALSE: - default: - arrowTiles = gDownArrowTiles; - break; - case TRUE: - arrowTiles = gDarkDownArrowTiles; - break; + case FALSE: + default: + arrowTiles = sDownArrowTiles; + break; + case TRUE: + arrowTiles = sDarkDownArrowTiles; + break; } BlitBitmapRectToWindow( textPrinter->printerTemplate.windowId, arrowTiles, 0, - gDownArrowYCoords[subStruct->downArrowYPosIdx], + sDownArrowYCoords[subStruct->downArrowYPosIdx], 8, 16, textPrinter->printerTemplate.currentX, @@ -905,26 +915,16 @@ void DrawDownArrow(u8 windowId, u16 x, u16 y, u8 bgColor, bool8 drawArrow, u8 *c { switch (gTextFlags.useAlternateDownArrow) { - case 0: - default: - arrowTiles = gDownArrowTiles; - break; - case 1: - arrowTiles = gDarkDownArrowTiles; - break; + case FALSE: + default: + arrowTiles = sDownArrowTiles; + break; + case TRUE: + arrowTiles = sDarkDownArrowTiles; + break; } - BlitBitmapRectToWindow( - windowId, - arrowTiles, - 0, - gDownArrowYCoords[*yCoordIndex & 3], - 0x8, - 0x10, - x, - y - 2, - 0x8, - 0x10); + BlitBitmapRectToWindow(windowId, arrowTiles, 0, sDownArrowYCoords[*yCoordIndex & 3], 8, 16, x, y - 2, 8, 16); CopyWindowToVram(windowId, COPYWIN_GFX); *counter = 8; ++*yCoordIndex; @@ -942,7 +942,7 @@ static u16 RenderText(struct TextPrinter *textPrinter) switch (textPrinter->state) { case RENDER_STATE_HANDLE_CHAR: - if ((JOY_HELD(A_BUTTON | B_BUTTON)) && subStruct->hasPrintBeenSpedUp) + if (JOY_HELD(A_BUTTON | B_BUTTON) && subStruct->hasPrintBeenSpedUp) textPrinter->delayCounter = 0; if (textPrinter->delayCounter && textPrinter->textSpeed) @@ -1191,7 +1191,7 @@ static u16 RenderText(struct TextPrinter *textPrinter) if (textPrinter->scrollDistance) { int scrollSpeed = GetPlayerTextSpeed(); - int speed = gWindowVerticalScrollSpeeds[scrollSpeed]; + int speed = sWindowVerticalScrollSpeeds[scrollSpeed]; if (textPrinter->scrollDistance < speed) { ScrollWindow(textPrinter->printerTemplate.windowId, 0, textPrinter->scrollDistance, PIXEL_FILL(textPrinter->printerTemplate.bgColor)); @@ -1612,31 +1612,31 @@ u8 DrawKeypadIcon(u8 windowId, u8 keypadIconId, u16 x, u16 y) { BlitBitmapRectToWindow( windowId, - gKeypadIconTiles + (gKeypadIcons[keypadIconId].tileOffset * 0x20), + sKeypadIconTiles + (sKeypadIcons[keypadIconId].tileOffset * 0x20), 0, 0, 0x80, 0x80, x, y, - gKeypadIcons[keypadIconId].width, - gKeypadIcons[keypadIconId].height); - return gKeypadIcons[keypadIconId].width; + sKeypadIcons[keypadIconId].width, + sKeypadIcons[keypadIconId].height); + return sKeypadIcons[keypadIconId].width; } u8 GetKeypadIconTileOffset(u8 keypadIconId) { - return gKeypadIcons[keypadIconId].tileOffset; + return sKeypadIcons[keypadIconId].tileOffset; } u8 GetKeypadIconWidth(u8 keypadIconId) { - return gKeypadIcons[keypadIconId].width; + return sKeypadIcons[keypadIconId].width; } u8 GetKeypadIconHeight(u8 keypadIconId) { - return gKeypadIcons[keypadIconId].height; + return sKeypadIcons[keypadIconId].height; } void SetDefaultFontsPointer(void) @@ -1898,7 +1898,7 @@ static void DecompressGlyph_Bold(u16 glyphId) { const u16* glyphs; - glyphs = gFontBoldJapaneseGlyphs + (0x100 * (glyphId >> 4)) + (0x8 * (glyphId & 0xF)); + glyphs = sFontBoldJapaneseGlyphs + (0x100 * (glyphId >> 4)) + (0x8 * (glyphId & 0xF)); DecompressGlyphTile(glyphs, gCurGlyph.gfxBufferTop); DecompressGlyphTile(glyphs + 0x80, gCurGlyph.gfxBufferBottom); gCurGlyph.width = 8; diff --git a/gflib/text.h b/gflib/text.h index 110df8b87f..2f660354fc 100644 --- a/gflib/text.h +++ b/gflib/text.h @@ -117,13 +117,6 @@ struct GlyphWidthFunc u32 (*func)(u16 glyphId, bool32 isJapanese); }; -struct KeypadIcon -{ - u16 tileOffset; - u8 width; - u8 height; -}; - typedef struct { bool8 canABSpeedUpPrint:1; bool8 useAlternateDownArrow:1; @@ -153,7 +146,6 @@ void GenerateFontHalfRowLookupTable(u8 fgColor, u8 bgColor, u8 shadowColor); void SaveTextColors(u8 *fgColor, u8 *bgColor, u8 *shadowColor); void RestoreTextColors(u8 *fgColor, u8 *bgColor, u8 *shadowColor); void DecompressGlyphTile(const void *src_, void *dest_); -u8 GetLastTextColor(u8 colorType); void CopyGlyphToWindow(struct TextPrinter *x); void ClearTextSpan(struct TextPrinter *textPrinter, u32 width); u8 GetMenuCursorDimensionByFont(u8, u8); diff --git a/graphics/fonts/down_arrow_RS.png b/graphics/fonts/down_arrow_alt.png similarity index 100% rename from graphics/fonts/down_arrow_RS.png rename to graphics/fonts/down_arrow_alt.png diff --git a/graphics/pokenav/862323C.bin b/graphics/pokenav/condition/graph_data.bin similarity index 100% rename from graphics/pokenav/862323C.bin rename to graphics/pokenav/condition/graph_data.bin diff --git a/graphics/pokenav/8623228.png b/graphics/pokenav/condition/graph_data.png similarity index 100% rename from graphics/pokenav/8623228.png rename to graphics/pokenav/condition/graph_data.png diff --git a/graphics/pokenav/8623338.pal b/graphics/pokenav/condition/mon_markings.pal similarity index 100% rename from graphics/pokenav/8623338.pal rename to graphics/pokenav/condition/mon_markings.pal diff --git a/graphics/pokenav/condition_search2.bin b/graphics/pokenav/condition/search_results.bin similarity index 100% rename from graphics/pokenav/condition_search2.bin rename to graphics/pokenav/condition/search_results.bin diff --git a/graphics/pokenav/condition_search2.png b/graphics/pokenav/condition/search_results.png similarity index 100% rename from graphics/pokenav/condition_search2.png rename to graphics/pokenav/condition/search_results.png diff --git a/graphics/pokenav/8623570.pal b/graphics/pokenav/condition/search_results_list.pal similarity index 100% rename from graphics/pokenav/8623570.pal rename to graphics/pokenav/condition/search_results_list.pal diff --git a/graphics/pokenav/icon2_unused.png b/graphics/pokenav/icon2_unused.png deleted file mode 100644 index c32a9b9be9..0000000000 Binary files a/graphics/pokenav/icon2_unused.png and /dev/null differ diff --git a/graphics/pokenav/arrows_matchcall.png b/graphics/pokenav/list_arrows.png similarity index 100% rename from graphics/pokenav/arrows_matchcall.png rename to graphics/pokenav/list_arrows.png diff --git a/graphics/pokenav/86226E0.pal b/graphics/pokenav/match_call/call_window.pal similarity index 100% rename from graphics/pokenav/86226E0.pal rename to graphics/pokenav/match_call/call_window.pal diff --git a/graphics/pokenav/8622700.pal b/graphics/pokenav/match_call/list_window.pal similarity index 100% rename from graphics/pokenav/8622700.pal rename to graphics/pokenav/match_call/list_window.pal diff --git a/graphics/pokenav/icon.png b/graphics/pokenav/match_call/nav_icon.png similarity index 100% rename from graphics/pokenav/icon.png rename to graphics/pokenav/match_call/nav_icon.png diff --git a/graphics/pokenav/arrow2.png b/graphics/pokenav/match_call/options_cursor.png similarity index 100% rename from graphics/pokenav/arrow2.png rename to graphics/pokenav/match_call/options_cursor.png diff --git a/graphics/pokenav/8622720.pal b/graphics/pokenav/match_call/pokeball.pal similarity index 100% rename from graphics/pokenav/8622720.pal rename to graphics/pokenav/match_call/pokeball.pal diff --git a/graphics/pokenav/pokeball_matchcall.png b/graphics/pokenav/match_call/pokeball.png similarity index 100% rename from graphics/pokenav/pokeball_matchcall.png rename to graphics/pokenav/match_call/pokeball.png diff --git a/graphics/pokenav/ui_matchcall.bin b/graphics/pokenav/match_call/ui.bin similarity index 100% rename from graphics/pokenav/ui_matchcall.bin rename to graphics/pokenav/match_call/ui.bin diff --git a/graphics/pokenav/ui_matchcall.png b/graphics/pokenav/match_call/ui.png similarity index 100% rename from graphics/pokenav/ui_matchcall.png rename to graphics/pokenav/match_call/ui.png diff --git a/graphics/pokenav/match_call_window.png b/graphics/pokenav/match_call/window.png similarity index 100% rename from graphics/pokenav/match_call_window.png rename to graphics/pokenav/match_call/window.png diff --git a/graphics/pokenav/icon2.png b/graphics/pokenav/nav_icon.png similarity index 100% rename from graphics/pokenav/icon2.png rename to graphics/pokenav/nav_icon.png diff --git a/graphics/pokenav/pokeball_matchcall.pal b/graphics/pokenav/pokeball_matchcall.pal deleted file mode 100644 index 25baec5176..0000000000 --- a/graphics/pokenav/pokeball_matchcall.pal +++ /dev/null @@ -1,35 +0,0 @@ -JASC-PAL -0100 -32 -0 197 0 -246 197 123 -255 255 255 -106 115 123 -0 0 0 -189 106 65 -49 65 74 -255 222 156 -180 131 82 -189 139 106 -197 197 197 -255 255 255 -0 0 0 -0 0 0 -0 0 0 -255 74 16 -0 197 0 -246 197 123 -255 255 255 -106 115 123 -0 0 0 -189 106 65 -49 65 74 -255 222 156 -180 131 82 -189 139 106 -197 197 197 -197 197 197 -0 0 0 -0 0 0 -0 0 0 -189 106 65 diff --git a/graphics/pokenav/brendan_icon.png b/graphics/pokenav/region_map/brendan_icon.png similarity index 100% rename from graphics/pokenav/brendan_icon.png rename to graphics/pokenav/region_map/brendan_icon.png diff --git a/graphics/pokenav/cursor.pal b/graphics/pokenav/region_map/cursor.pal similarity index 100% rename from graphics/pokenav/cursor.pal rename to graphics/pokenav/region_map/cursor.pal diff --git a/graphics/pokenav/cursor_large.png b/graphics/pokenav/region_map/cursor_large.png similarity index 100% rename from graphics/pokenav/cursor_large.png rename to graphics/pokenav/region_map/cursor_large.png diff --git a/graphics/pokenav/cursor_small.png b/graphics/pokenav/region_map/cursor_small.png similarity index 100% rename from graphics/pokenav/cursor_small.png rename to graphics/pokenav/region_map/cursor_small.png diff --git a/graphics/pokenav/fly_target_icons.png b/graphics/pokenav/region_map/fly_target_icons.png similarity index 100% rename from graphics/pokenav/fly_target_icons.png rename to graphics/pokenav/region_map/fly_target_icons.png diff --git a/graphics/pokenav/map_frame.bin b/graphics/pokenav/region_map/frame.bin similarity index 100% rename from graphics/pokenav/map_frame.bin rename to graphics/pokenav/region_map/frame.bin diff --git a/graphics/pokenav/map_frame.png b/graphics/pokenav/region_map/frame.png similarity index 100% rename from graphics/pokenav/map_frame.png rename to graphics/pokenav/region_map/frame.png diff --git a/graphics/pokenav/region_map_info_window.pal b/graphics/pokenav/region_map/info_window.pal similarity index 100% rename from graphics/pokenav/region_map_info_window.pal rename to graphics/pokenav/region_map/info_window.pal diff --git a/graphics/pokenav/may_icon.png b/graphics/pokenav/region_map/may_icon.png similarity index 100% rename from graphics/pokenav/may_icon.png rename to graphics/pokenav/region_map/may_icon.png diff --git a/graphics_file_rules.mk b/graphics_file_rules.mk index 9574ca3dbd..03efabe9b6 100644 --- a/graphics_file_rules.mk +++ b/graphics_file_rules.mk @@ -697,7 +697,7 @@ $(PKNAVGFXDIR)/header.4bpp: %.4bpp: %.png $(PKNAVGFXDIR)/device_outline.4bpp: %.4bpp: %.png $(GFX) $< $@ -num_tiles 53 -$(PKNAVGFXDIR)/ui_matchcall.4bpp: %.4bpp: %.png +$(PKNAVGFXDIR)/match_call/ui.4bpp: %.4bpp: %.png $(GFX) $< $@ -num_tiles 13 $(INTERFACEGFXDIR)/region_map.8bpp: %.8bpp: %.png diff --git a/include/battle_anim.h b/include/battle_anim.h index 0397ae7ee9..33e9bff0aa 100644 --- a/include/battle_anim.h +++ b/include/battle_anim.h @@ -77,7 +77,7 @@ void HandleIntroSlide(u8 terrainId); int GetAnimBgAttribute(u8 bgId, u8 attributeId); // battle_anim_mons.c -void TranslateSpriteInEllipseOverDuration(struct Sprite *sprite); +void TranslateSpriteInEllipse(struct Sprite *sprite); void AnimTranslateLinearAndFlicker(struct Sprite *sprite); void AnimTranslateLinearAndFlicker_Flipped(struct Sprite *sprite); void AnimWeatherBallUp(struct Sprite *sprite); @@ -107,7 +107,7 @@ u8 GetBattlerYCoordWithElevation(u8 battlerId); void WaitAnimForDuration(struct Sprite *sprite); void AnimTravelDiagonally(struct Sprite *sprite); void InitAnimLinearTranslation(struct Sprite *sprite); -void AnimTranslateLinear_WaitEnd(struct Sprite *sprite); +void AnimTranslateLinear_WithFollowup(struct Sprite *sprite); u8 GetBattlerSpriteBGPriority(u8 battlerId); void *LoadPointerFromVars(s16 bottom, s16 top); void StorePointerInVars(s16 *bottom, s16 *top, const void *ptr); @@ -117,7 +117,7 @@ void GetBattleAnimBgData(struct BattleAnimBgData*, u32 arg1); u8 GetBattlerSpriteSubpriority(u8 battlerId); bool8 TranslateAnimHorizontalArc(struct Sprite *sprite); void sub_80A6630(struct Sprite *sprite); -void TranslateMonSpriteLinearFixedPoint(struct Sprite *sprite); +void TranslateSpriteLinearByIdFixedPoint(struct Sprite *sprite); void ResetSpriteRotScale(u8 spriteId); void SetSpriteRotScale(u8 spriteId, s16 xScale, s16 yScale, u16 rotation); void InitSpriteDataForLinearTranslation(struct Sprite *sprite); @@ -127,12 +127,12 @@ u32 GetBattleBgPalettesMask(u8 battleBackground, u8 attacker, u8 target, u8 atta u32 GetBattleMonSpritePalettesMask(u8 playerLeft, u8 playerRight, u8 opponentLeft, u8 opponentRight); u8 AnimDummyReturnArg(u8 battler); s16 CloneBattlerSpriteWithBlend(u8); -void obj_delete_but_dont_free_vram(struct Sprite*); +void DestroySpriteWithActiveSheet(struct Sprite*); u8 CreateInvisibleSpriteCopy(int, u8, int); void AnimLoadCompressedBgTilemapHandleContest(struct BattleAnimBgData*, const void*, bool32); void AnimLoadCompressedBgGfx(u32, const u32*, u32); void UpdateAnimBg3ScreenSize(bool8); -void TranslateSpriteInGrowingCircleOverDuration(struct Sprite *); +void TranslateSpriteInGrowingCircle(struct Sprite *); void sub_80A653C(struct Sprite *); void SetBattlerSpriteYOffsetFromYScale(u8 spriteId); void PrepareEruptAnimTaskData(struct Task *task, u8 a2, s16 a3, s16 a4, s16 a5, s16 a6, u16 a7); @@ -142,16 +142,16 @@ void AnimLoadCompressedBgTilemap(u32 bgId, const void *src); void InitAnimFastLinearTranslationWithSpeed(struct Sprite *sprite); bool8 AnimFastTranslateLinear(struct Sprite *sprite); void InitAndRunAnimFastLinearTranslation(struct Sprite *sprite); -void TranslateMonSpriteLinear(struct Sprite *sprite); +void TranslateSpriteLinearById(struct Sprite *sprite); void TranslateSpriteLinear(struct Sprite *sprite); void AnimSpriteOnMonPos(struct Sprite *sprite); void InitAnimLinearTranslationWithSpeedAndPos(struct Sprite *sprite); -void TranslateSpriteInCircleOverDuration(struct Sprite *sprite); +void TranslateSpriteInCircle(struct Sprite *sprite); void SetGrayscaleOrOriginalPalette(u16 palNum, bool8 restoreOriginal); void PrepareAffineAnimInTaskData(struct Task *task, u8 spriteId, const union AffineAnimCmd *affineAnimCmds); bool8 RunAffineAnimFromTaskData(struct Task *task); void AnimThrowProjectile(struct Sprite *sprite); -void sub_80A6BFC(struct BattleAnimBgData *unk, u8 unused); +void GetBgDataForTransform(struct BattleAnimBgData *dest, u8 battlerId); u8 CreateAdditionalMonSpriteForMoveAnim(u16 species, bool8 isBackpic, u8 a3, s16 x, s16 y, u8 subpriority, u32 personality, u32 trainerId, u32 battlerId, bool32 ignoreDeoxysForm); void ResetSpriteRotScale_PreserveAffine(struct Sprite *sprite); void TradeMenuBouncePartySprites(struct Sprite *sprite); @@ -161,7 +161,7 @@ void SetBattlerSpriteYOffsetFromOtherYScale(u8 spriteId, u8 otherSpriteId); u8 GetBattlerSide(u8 battler); u8 GetBattlerPosition(u8 battler); u8 GetBattlerAtPosition(u8 position); -void sub_80A64EC(struct Sprite *sprite); +void ConvertPosDataToTranslateLinearData(struct Sprite *sprite); void InitAnimFastLinearTranslationWithSpeedAndPos(struct Sprite *sprite); enum diff --git a/include/battle_main.h b/include/battle_main.h index c69d9cae55..ed35566d8f 100644 --- a/include/battle_main.h +++ b/include/battle_main.h @@ -50,7 +50,7 @@ void DoBounceEffect(u8 battlerId, u8 b, s8 c, s8 d); void EndBounceEffect(u8 battlerId, bool8 b); void SpriteCB_PlayerMonFromBall(struct Sprite *sprite); void SpriteCB_TrainerThrowObject(struct Sprite *sprite); -void sub_8039E9C(struct Sprite *sprite); +void AnimSetCenterToCornerVecX(struct Sprite *sprite); void BeginBattleIntroDummy(void); void BeginBattleIntro(void); void SwitchInClearSetData(void); diff --git a/include/constants/battle.h b/include/constants/battle.h index 3dedb6773c..2d6345463b 100644 --- a/include/constants/battle.h +++ b/include/constants/battle.h @@ -447,6 +447,9 @@ // Flag for BattlePutTextOnWindow. Never set #define B_WIN_COPYTOVRAM (1 << 7) +// Indicator for the party summary bar to display an empty slot. +#define HP_EMPTY_SLOT 0xFFFF + #define MOVE_TARGET_SELECTED 0 #define MOVE_TARGET_DEPENDS (1 << 0) #define MOVE_TARGET_USER_OR_SELECTED (1 << 1) diff --git a/include/constants/pokemon.h b/include/constants/pokemon.h index 32f89d42e8..342f995425 100644 --- a/include/constants/pokemon.h +++ b/include/constants/pokemon.h @@ -271,7 +271,9 @@ #define FRIENDSHIP_EVENT_FAINT_FIELD_PSN 7 #define FRIENDSHIP_EVENT_FAINT_LARGE 8 // If opponent was >= 30 levels higher. See AdjustFriendshipOnBattleFaint -#define MAX_FRIENDSHIP 0xFF +#define MAX_FRIENDSHIP 255 +#define MAX_SHEEN 255 +#define MAX_CONDITION 255 #define MAX_PER_STAT_IVS 31 #define MAX_IV_MASK 31 @@ -385,7 +387,9 @@ #define NUM_MALE_LINK_FACILITY_CLASSES 8 #define NUM_FEMALE_LINK_FACILITY_CLASSES 8 -#define MON_PIC_SIZE (64 * 64 / 2) +#define MON_PIC_WIDTH 64 +#define MON_PIC_HEIGHT 64 +#define MON_PIC_SIZE (MON_PIC_WIDTH * MON_PIC_HEIGHT / 2) #define BATTLE_ALIVE_EXCEPT_ACTIVE 0 #define BATTLE_ALIVE_ATK_SIDE 1 diff --git a/include/constants/sound.h b/include/constants/sound.h new file mode 100644 index 0000000000..dc434bcf8a --- /dev/null +++ b/include/constants/sound.h @@ -0,0 +1,48 @@ +#ifndef GUARD_CONSTANTS_SOUND_H +#define GUARD_CONSTANTS_SOUND_H + +#define FANFARE_LEVEL_UP 0 +#define FANFARE_OBTAIN_ITEM 1 +#define FANFARE_EVOLVED 2 +#define FANFARE_OBTAIN_TMHM 3 +#define FANFARE_HEAL 4 +#define FANFARE_OBTAIN_BADGE 5 +#define FANFARE_MOVE_DELETED 6 +#define FANFARE_OBTAIN_BERRY 7 +#define FANFARE_AWAKEN_LEGEND 8 +#define FANFARE_SLOTS_JACKPOT 9 +#define FANFARE_SLOTS_WIN 10 +#define FANFARE_TOO_BAD 11 +#define FANFARE_RG_POKE_FLUTE 12 +#define FANFARE_RG_OBTAIN_KEY_ITEM 13 +#define FANFARE_RG_DEX_RATING 14 +#define FANFARE_OBTAIN_B_POINTS 15 +#define FANFARE_OBTAIN_SYMBOL 16 +#define FANFARE_REGISTER_MATCH_CALL 17 + +#define CRY_MODE_NORMAL 0 // Default +#define CRY_MODE_DOUBLES 1 // Shortened cry for double battles +#define CRY_MODE_ENCOUNTER 2 // Used when starting a static encounter, or when a Pokémon is "aggressive" +#define CRY_MODE_HIGH_PITCH 3 // Highest pitch mode, used exclusively by the move Howl +#define CRY_MODE_ECHO_START 4 // For 1st half of cry used by the move Hyper Voice. Played in reverse +#define CRY_MODE_FAINT 5 // Used when a Pokémon faints +#define CRY_MODE_ECHO_END 6 // For 2nd half of cry used by the move Hyper Voice +#define CRY_MODE_ROAR_1 7 // For 1st cry used by the move Roar +#define CRY_MODE_ROAR_2 8 // For 2nd cry used by the move Roar +#define CRY_MODE_GROWL_1 9 // For 1st cry used by the move Growl. Played in reverse +#define CRY_MODE_GROWL_2 10 // For 2nd cry used by the move Growl +#define CRY_MODE_WEAK 11 // Used when a Pokémon is unhealthy +#define CRY_MODE_WEAK_DOUBLES 12 // Equivalent to CRY_MODE_DOUBLES for CRY_MODE_WEAK + +// Given to SoundTask_PlayDoubleCry to determine which cry mode to use. Values are arbitrary +#define DOUBLE_CRY_ROAR 2 +#define DOUBLE_CRY_GROWL 255 + +#define CRY_PRIORITY_NORMAL 10 +#define CRY_PRIORITY_AMBIENT 1 + +// Cry volume was changed from 125 in R/S to 120 for FRLG/Em, but was (accidentally?) not updated outside of sound.c +#define CRY_VOLUME 120 +#define CRY_VOLUME_RS 125 + +#endif // GUARD_CONSTANTS_SOUND_H diff --git a/include/data.h b/include/data.h index 374435cbab..2d3619e679 100644 --- a/include/data.h +++ b/include/data.h @@ -21,6 +21,10 @@ struct MonCoords u8 y_offset; }; +#define MON_COORDS_SIZE(width, height)(DIV_ROUND_UP(width, 8) << 4 | DIV_ROUND_UP(height, 8)) +#define GET_MON_COORDS_WIDTH(size)((size >> 4) * 8) +#define GET_MON_COORDS_HEIGHT(size)((size & 0xF) * 8) + struct TrainerMonNoItemDefaultMoves { u16 iv; diff --git a/include/gba/defines.h b/include/gba/defines.h index ad06aaad2d..c52d7ef4f9 100644 --- a/include/gba/defines.h +++ b/include/gba/defines.h @@ -6,7 +6,6 @@ #define TRUE 1 #define FALSE 0 -#define BSS_DATA __attribute__((section(".bss"))) #define IWRAM_DATA __attribute__((section("iwram_data"))) #define EWRAM_DATA __attribute__((section("ewram_data"))) #define UNUSED __attribute__((unused)) diff --git a/include/gba/io_reg.h b/include/gba/io_reg.h index 1daa99e1d7..148ce31db4 100644 --- a/include/gba/io_reg.h +++ b/include/gba/io_reg.h @@ -482,6 +482,7 @@ #define REG_SIODATA32 (*(vu32 *)REG_ADDR_SIODATA32) #define REG_SIOMLT_SEND (*(vu16 *)REG_ADDR_SIOMLT_SEND) #define REG_SIOMLT_RECV (*(vu64 *)REG_ADDR_SIOMLT_RECV) +#define REG_SIOMULTI(n) (*(vu16 *)(REG_ADDR_SIOMULTI0 + (n) * 2)) #define REG_SIOMULTI0 (*(vu16 *)REG_ADDR_SIOMULTI0) #define REG_SIOMULTI1 (*(vu16 *)REG_ADDR_SIOMULTI1) #define REG_SIOMULTI2 (*(vu16 *)REG_ADDR_SIOMULTI2) diff --git a/include/global.h b/include/global.h index b59392e878..ec1b660a59 100644 --- a/include/global.h +++ b/include/global.h @@ -127,10 +127,12 @@ f; \ }) -#define ROUND_BITS_TO_BYTES(numBits)(((numBits) / 8) + (((numBits) % 8) ? 1 : 0)) +#define DIV_ROUND_UP(val, roundBy)(((val) / (roundBy)) + (((val) % (roundBy)) ? 1 : 0)) -#define DEX_FLAGS_NO (ROUND_BITS_TO_BYTES(NUM_SPECIES)) -#define NUM_FLAG_BYTES (ROUND_BITS_TO_BYTES(FLAGS_COUNT)) +#define ROUND_BITS_TO_BYTES(numBits) DIV_ROUND_UP(numBits, 8) + +#define DEX_FLAGS_NO ROUND_BITS_TO_BYTES(NUM_SPECIES) +#define NUM_FLAG_BYTES ROUND_BITS_TO_BYTES(FLAGS_COUNT) struct Coords8 { diff --git a/include/graphics.h b/include/graphics.h index 1d892db168..1dfa9b3e1a 100644 --- a/include/graphics.h +++ b/include/graphics.h @@ -4656,9 +4656,9 @@ extern const u32 gBattleAnimSpritePal_RedHeart[]; extern const u32 gBattleAnimSpritePal_RedOrb[]; extern const u32 gBattleAnimSpritePal_EyeSparkle[]; extern const u32 gBattleAnimSpritePal_PinkHeart[]; -extern const u32 gBattleAnimBgImage_Attract; -extern const u32 gBattleAnimBgPalette_Attract; -extern const u32 gBattleAnimBgTilemap_Attract; +extern const u32 gBattleAnimBgImage_Attract[]; +extern const u32 gBattleAnimBgPalette_Attract[]; +extern const u32 gBattleAnimBgTilemap_Attract[]; extern const u32 gBattleAnimSpritePal_Angel[]; extern const u32 gBattleAnimSpritePal_Devil[]; extern const u32 gBattleAnimSpritePal_Swipe[]; diff --git a/include/load_save.h b/include/load_save.h index 2f4a9ace6b..309e62e2b4 100644 --- a/include/load_save.h +++ b/include/load_save.h @@ -1,9 +1,33 @@ #ifndef GUARD_LOAD_SAVE_H #define GUARD_LOAD_SAVE_H -extern struct SaveBlock1 gSaveblock1; -extern struct SaveBlock2 gSaveblock2; -extern struct PokemonStorage gPokemonStorage; +#include "pokemon_storage_system.h" + +#define SAVEBLOCK_MOVE_RANGE 128 + +/** + * These structs are to prevent them from being reordered on newer or modern + * toolchains. If this is not done, the ClearSav functions will end up erasing + * the wrong memory leading to various glitches. + */ +struct SaveBlock2DMA { + struct SaveBlock2 block; + u8 dma[SAVEBLOCK_MOVE_RANGE]; +}; + +struct SaveBlock1DMA { + struct SaveBlock1 block; + u8 dma[SAVEBLOCK_MOVE_RANGE]; +}; + +struct PokemonStorageDMA { + struct PokemonStorage block; + u8 dma[SAVEBLOCK_MOVE_RANGE]; +}; + +extern struct SaveBlock1DMA gSaveblock1; +extern struct SaveBlock2DMA gSaveblock2; +extern struct PokemonStorageDMA gPokemonStorage; extern bool32 gFlashMemoryPresent; extern struct SaveBlock1 *gSaveBlock1Ptr; @@ -24,8 +48,8 @@ void SavePlayerParty(void); void LoadPlayerParty(void); void SaveObjectEvents(void); void LoadObjectEvents(void); -void SaveSerializedGame(void); -void LoadSerializedGame(void); +void CopyPartyAndObjectsToSave(void); +void CopyPartyAndObjectsFromSave(void); void LoadPlayerBag(void); void SavePlayerBag(void); void ApplyNewEncryptionKeyToHword(u16 *hWord, u32 newKey); diff --git a/include/menu_specialized.h b/include/menu_specialized.h index c29110662b..d1e30d4d6b 100644 --- a/include/menu_specialized.h +++ b/include/menu_specialized.h @@ -7,14 +7,6 @@ #include "pokemon.h" #include "constants/berry.h" -#define TAG_CONDITION_MON 100 -#define TAG_CONDITION_BALL 101 -#define TAG_CONDITION_CANCEL 102 -#define TAG_CONDITION_BALL_PLACEHOLDER 103 -#define TAG_CONDITION_SPARKLE 104 - -#define MAX_CONDITION_SPARKLES 10 - // Window IDs for the Player PC Mailbox enum { MAILBOXWIN_TITLE, @@ -23,61 +15,115 @@ enum { MAILBOXWIN_COUNT }; -struct UnknownSubStruct_81D1ED4 -{ - u16 unk0; - u16 unk2; +enum { + TAG_CONDITION_MON = 100, + TAG_CONDITION_BALL, + TAG_CONDITION_CANCEL, + TAG_CONDITION_BALL_PLACEHOLDER, + TAG_CONDITION_SPARKLE, + TAG_CONDITION_MON_MARKINGS, + TAG_CONDITION_MARKINGS_MENU, + TAG_CONDITION_MARKINGS_MENU_2, // Used implicitly by CreateMonMarkingsMenuSprites +}; + +enum { + CONDITION_ICON_SELECTED, + CONDITION_ICON_UNSELECTED, +}; + +#define MAX_CONDITION_SPARKLES 10 + +// The number of extra sparkles shown on a Pokémon's condition screen. +// All Pokémon start with 1, so the max here is MAX_CONDITION_SPARKLES - 1 +#define GET_NUM_CONDITION_SPARKLES(sheen)((sheen) != MAX_SHEEN) ? (sheen) / ((u32)MAX_SHEEN / (MAX_CONDITION_SPARKLES - 1) + 1) : MAX_CONDITION_SPARKLES - 1; + +#define CONDITION_GRAPH_TOP_Y 56 +#define CONDITION_GRAPH_BOTTOM_Y 121 +#define CONDITION_GRAPH_HEIGHT (CONDITION_GRAPH_BOTTOM_Y - CONDITION_GRAPH_TOP_Y + 1) +#define CONDITION_GRAPH_CENTER_X 155 +#define CONDITION_GRAPH_CENTER_Y ((CONDITION_GRAPH_BOTTOM_Y + CONDITION_GRAPH_TOP_Y) / 2 + 3) +#define CONDITION_GRAPH_UPDATE_STEPS 10 +#define CONDITION_GRAPH_LOAD_MAX 4 + +// Equivalent to flavor and contest values, but in a different order. +enum { + CONDITION_COOL, + CONDITION_TOUGH, + CONDITION_SMART, + CONDITION_CUTE, + CONDITION_BEAUTY, + CONDITION_COUNT +}; + +// Yet another order. This one is the same (by coincidence) as the contest categories +enum { + GRAPH_COOL, + GRAPH_BEAUTY, + GRAPH_CUTE, + GRAPH_SMART, + GRAPH_TOUGH, }; struct ConditionGraph { - /*0x000*/ u8 stat[4][FLAVOR_COUNT]; - /*0x014*/ struct UnknownSubStruct_81D1ED4 unk14[4][FLAVOR_COUNT]; - /*0x064*/ struct UnknownSubStruct_81D1ED4 unk64[10][FLAVOR_COUNT]; - /*0x12C*/ struct UnknownSubStruct_81D1ED4 unk12C[FLAVOR_COUNT]; - /*0x140*/ u16 unk140[66][2]; - /*0x248*/ u16 unk248[66][2]; - /*0x350*/ u16 unk350; - /*0x352*/ u16 unk352; - /*0x354*/ u8 unk354; - /*0x355*/ u8 state; + /*0x000*/ u8 conditions[CONDITION_GRAPH_LOAD_MAX][CONDITION_COUNT]; + /*0x014*/ struct UCoords16 savedPositions[CONDITION_GRAPH_LOAD_MAX][CONDITION_COUNT]; + /*0x064*/ struct UCoords16 newPositions[CONDITION_GRAPH_UPDATE_STEPS][CONDITION_COUNT]; + /*0x12C*/ struct UCoords16 curPositions[CONDITION_COUNT]; + /*0x140*/ u16 scanlineRight[CONDITION_GRAPH_HEIGHT][2]; + /*0x248*/ u16 scanlineLeft[CONDITION_GRAPH_HEIGHT][2]; + /*0x350*/ u16 bottom; + /*0x352*/ u16 updateCounter; + /*0x354*/ bool8 needsDraw; + /*0x355*/ u8 scanlineResetState; }; +// Mailbox menu bool8 MailboxMenu_Alloc(u8 count); u8 MailboxMenu_AddWindow(u8 windowIdx); u8 MailboxMenu_CreateList(struct PlayerPCItemPageStruct *page); void MailboxMenu_AddScrollArrows(struct PlayerPCItemPageStruct *page); void MailboxMenu_Free(void); void MailboxMenu_RemoveWindow(u8 windowIdx); -void InitConditionGraphData(struct ConditionGraph *graph); -void sub_81D2108(struct ConditionGraph *graph); -void SetConditionGraphIOWindows(u8 bg); -void InitConditionGraphState(struct ConditionGraph *graph); -void sub_81D2230(struct ConditionGraph *graph); -bool8 SetupConditionGraphScanlineParams(struct ConditionGraph *graph); -bool32 TransitionConditionGraph(struct ConditionGraph *graph); -void sub_81D2754(u8 *arg0, struct UnknownSubStruct_81D1ED4 *arg1); -void sub_81D1F84(struct ConditionGraph *graph, struct UnknownSubStruct_81D1ED4 *arg1, struct UnknownSubStruct_81D1ED4 *arg2); -void MoveRelearnerPrintText(u8 *str); -bool16 MoveRelearnerRunTextPrinters(void); -void MoveRelearnerCreateYesNoMenu(void); -u8 LoadMoveRelearnerMovesList(const struct ListMenuItem *items, u16 numChoices); -void InitMoveRelearnerWindows(bool8 useContextWindow); -s32 GetBoxOrPartyMonData(u16 boxId, u16 monId, s32 request, u8 *dst); + +// Condition graph +void ConditionGraph_Init(struct ConditionGraph *graph); +void ConditionGraph_InitWindow(u8 bg); +void ConditionGraph_InitResetScanline(struct ConditionGraph *graph); +bool8 ConditionGraph_ResetScanline(struct ConditionGraph *graph); +void ConditionGraph_Draw(struct ConditionGraph *graph); +bool8 ConditionGraph_TryUpdate(struct ConditionGraph *graph); +void ConditionGraph_Update(struct ConditionGraph *graph); +void ConditionGraph_CalcPositions(u8 *conditions, struct UCoords16 *positions); +void ConditionGraph_SetNewPositions(struct ConditionGraph *graph, struct UCoords16 *arg1, struct UCoords16 *arg2); + +// Condition menu +bool8 ConditionMenu_UpdateMonEnter(struct ConditionGraph *graph, s16 *x); +bool8 ConditionMenu_UpdateMonExit(struct ConditionGraph *graph, s16 *x); +bool8 MoveConditionMonOnscreen(s16 *x); +bool8 MoveConditionMonOffscreen(s16 *x); void GetConditionMenuMonNameAndLocString(u8 *locationDst, u8 *nameDst, u16 boxId, u16 monId, u16 partyId, u16 numMons, bool8 excludesCancel); void GetConditionMenuMonConditions(struct ConditionGraph *graph, u8 *sheen, u16 boxId, u16 monId, u16 partyId, u16 id, u16 numMons, bool8 excludesCancel); void GetConditionMenuMonGfx(void *tilesDst, void *palDst, u16 boxId, u16 monId, u16 partyId, u16 numMons, bool8 excludesCancel); -bool8 MoveConditionMonOnscreen(s16 *x); -bool8 MoveConditionMonOffscreen(s16 *x); -bool8 TryUpdateConditionMonTransitionOn(struct ConditionGraph *graph, s16 *x); -bool8 TryUpdateConditionMonTransitionOff(struct ConditionGraph *graph, s16 *x); void LoadConditionMonPicTemplate(struct SpriteSheet *sheet, struct SpriteTemplate *template, struct SpritePalette *pal); void LoadConditionSelectionIcons(struct SpriteSheet *sheets, struct SpriteTemplate * template, struct SpritePalette *pals); +s32 GetBoxOrPartyMonData(u16 boxId, u16 monId, s32 request, u8 *dst); + +// Condition sparkles void LoadConditionSparkle(struct SpriteSheet *sheet, struct SpritePalette *pal); void ResetConditionSparkleSprites(struct Sprite **sprites); void CreateConditionSparkleSprites(struct Sprite **sprites, u8 monSpriteId, u8 count); void DestroyConditionSparkleSprites(struct Sprite **sprites); void FreeConditionSparkles(struct Sprite **sprites); + +// Move relearner +void MoveRelearnerPrintText(u8 *str); +bool16 MoveRelearnerRunTextPrinters(void); +void MoveRelearnerCreateYesNoMenu(void); +u8 LoadMoveRelearnerMovesList(const struct ListMenuItem *items, u16 numChoices); +void InitMoveRelearnerWindows(bool8 useContextWindow); + +// Level up window void DrawLevelUpWindowPg1(u16 windowId, u16 *statsBefore, u16 *statsAfter, u8 bgClr, u8 fgClr, u8 shadowClr); void DrawLevelUpWindowPg2(u16 windowId, u16 *currStats, u8 bgClr, u8 fgClr, u8 shadowClr); void GetMonLevelUpWindowStats(struct Pokemon *mon, u16 *currStats); diff --git a/include/palette.h b/include/palette.h index be2a0dd487..81a1e1caec 100644 --- a/include/palette.h +++ b/include/palette.h @@ -58,15 +58,9 @@ void FillPalette(u16, u16, u16); void TransferPlttBuffer(void); u8 UpdatePaletteFade(void); void ResetPaletteFade(void); -void ReadPlttIntoBuffers(void); bool8 BeginNormalPaletteFade(u32, s8, u8, u8, u16); -bool8 unref_sub_8073D3C(u32, u8, u8, u8, u16); -void unref_sub_8073D84(u8, u32 *); -void ResetPaletteStructByUid(u16); -void ResetPaletteStruct(u8); +void PaletteStruct_ResetById(u16); void ResetPaletteFadeControl(void); -void unref_sub_8074168(u16); -void unref_sub_8074194(u16); void InvertPlttBuffer(u32); void TintPlttBuffer(u32, s8, s8, s8); void UnfadePlttBuffer(u32); diff --git a/include/pokenav.h b/include/pokenav.h index 3fc01ede3d..d3edb14223 100644 --- a/include/pokenav.h +++ b/include/pokenav.h @@ -7,47 +7,51 @@ typedef u32 (*LoopedTask)(s32 state); -struct PokenavMonList +struct PokenavMonListItem { u8 boxId; u8 monId; u16 data; }; -struct PokenavMatchCallEntries +struct PokenavMatchCallEntry { bool8 isSpecialTrainer; u8 mapSec; u16 headerId; }; -struct PokenavListTemplate +struct PokenavListItem { union { - struct PokenavMonList *monList; - struct PokenavMatchCallEntries *matchCallEntries; - } list; + struct PokenavMonListItem mon; + struct PokenavMatchCallEntry call; + } item; +}; + +typedef void (*PokenavListBufferItemFunc)(struct PokenavListItem *, u8 *); + +struct PokenavListTemplate +{ + struct PokenavListItem * list; u16 count; - u16 unk6; - u8 unk8; + u16 startIndex; + u8 itemSize; u8 item_X; u8 windowWidth; u8 listTop; u8 maxShowed; u8 fillValue; u8 fontId; - union { - void (*printMonFunc)(struct PokenavMonList *item, u8 *dest); - void (*unk10_2)(struct PokenavMatchCallEntries *, u8 *a1); - } listFunc; - void (*unk14)(u16 a0, u32 a1, u32 a2); + PokenavListBufferItemFunc bufferItemFunc; + void (*iconDrawFunc)(u16 windowId, u32 listItemId, u32 baseTile); }; -struct PokenavSub18 +struct PokenavMonList { u16 listCount; u16 currIndex; - struct PokenavMonList monData[TOTAL_BOXES_COUNT * IN_BOX_COUNT + PARTY_SIZE]; + struct PokenavMonListItem monData[TOTAL_BOXES_COUNT * IN_BOX_COUNT + PARTY_SIZE]; }; // Return values of LoopedTask functions. @@ -65,27 +69,26 @@ enum POKENAV_MODE_FORCE_CALL_EXIT, // Pokenav tutorial after calling Mr. Stone }; -// TODO - refine these names -enum Substructures +enum { POKENAV_SUBSTRUCT_MAIN_MENU, POKENAV_SUBSTRUCT_MAIN_MENU_HANDLER, - POKENAV_SUBSTRUCT_MENU_ICONS, + POKENAV_SUBSTRUCT_MENU_GFX, POKENAV_SUBSTRUCT_REGION_MAP_STATE, POKENAV_SUBSTRUCT_REGION_MAP_ZOOM, POKENAV_SUBSTRUCT_MATCH_CALL_MAIN, POKENAV_SUBSTRUCT_MATCH_CALL_OPEN, POKENAV_SUBSTRUCT_CONDITION_SEARCH_RESULTS, - POKENAV_SUBSTRUCT_CONDITION_SEARCH_RESULT_LIST, + POKENAV_SUBSTRUCT_CONDITION_SEARCH_RESULTS_GFX, POKENAV_SUBSTRUCT_RIBBONS_MON_LIST, POKENAV_SUBSTRUCT_RIBBONS_MON_MENU, - POKENAV_SUBSTRUCT_CONDITION_GRAPH, - POKENAV_SUBSTRUCT_MON_MARK_MENU, + POKENAV_SUBSTRUCT_CONDITION_GRAPH_MENU, + POKENAV_SUBSTRUCT_CONDITION_GRAPH_MENU_GFX, POKENAV_SUBSTRUCT_RIBBONS_SUMMARY_LIST, POKENAV_SUBSTRUCT_RIBBONS_SUMMARY_MENU, - POKENAV_SUBSTRUCT_15, //unused + POKENAV_SUBSTRUCT_UNUSED, POKENAV_SUBSTRUCT_REGION_MAP, - POKENAV_SUBSTRUCT_MATCH_CALL_LIST, + POKENAV_SUBSTRUCT_LIST, POKENAV_SUBSTRUCT_MON_LIST, POKENAV_SUBSTRUCT_COUNT, }; @@ -113,21 +116,21 @@ enum #define POKENAV_MENU_IDS_START 100000 enum { - POKENAV_MAIN_MENU = POKENAV_MENU_IDS_START, + POKENAV_MAIN_MENU = POKENAV_MENU_IDS_START, // The main menu where the player selects Hoenn Map/Condition/Match Call/Ribbons POKENAV_MAIN_MENU_CURSOR_ON_MAP, - POKENAV_CONDITION_MENU, - POKENAV_CONDITION_SEARCH_MENU, + POKENAV_CONDITION_MENU, // The first Condition screen where the player selects Party or Search + POKENAV_CONDITION_SEARCH_MENU, // The Condition search menu where the player selects a search parameter POKENAV_MAIN_MENU_CURSOR_ON_MATCH_CALL, POKENAV_MAIN_MENU_CURSOR_ON_RIBBONS, POKENAV_REGION_MAP, - POKENAV_CONDITION_PARTY, - POKENAV_CONDITION_SEARCH_RESULTS, - POKENAV_CONDITION_GRAPH_FROM_SEARCH, // opening condition graph from search list - POKENAV_RETURN_CONDITION_SEARCH, //return to search list from condition graph + POKENAV_CONDITION_GRAPH_PARTY, // The Condition graph screen when Party has been selected + POKENAV_CONDITION_SEARCH_RESULTS, // The list of results from a Condition search + POKENAV_CONDITION_GRAPH_SEARCH, // The Condition graph screen when a search result has been selected + POKENAV_RETURN_CONDITION_SEARCH, // Exited the graph screen back to the list of Condition search results POKENAV_MATCH_CALL, - POKENAV_RIBBONS_MON_LIST, - POKENAV_RIBBONS_SUMMARY_SCREEN, - POKENAV_RIBBONS_RETURN_TO_MON_LIST, + POKENAV_RIBBONS_MON_LIST, // The list of Pokémon with ribbons + POKENAV_RIBBONS_SUMMARY_SCREEN, // The ribbon summary screen shown when a Pokémon has been selected + POKENAV_RIBBONS_RETURN_TO_MON_LIST, // Exited the summary screen back to the ribbon list }; enum @@ -245,15 +248,22 @@ enum RegionMapFuncIds POKENAV_MENU_FUNC_OPEN_FEATURE, }; -enum PartyConditionFuncIds +enum { - PARTY_CONDITION_FUNC_NONE, - PARTY_CONDITION_FUNC_SLIDE_MON_IN, - PARTY_CONDITION_FUNC_RETURN, - PARTY_CONDITION_FUNC_NO_TRANSITION, - PARTY_CONDITION_FUNC_SLIDE_MON_OUT, - PARTY_CONDITION_FUNC_ADD_MARKINGS, - PARTY_CONDITION_FUNC_CLOSE_MARKINGS, + CONDITION_FUNC_NONE, + CONDITION_FUNC_SLIDE_MON_IN, + CONDITION_FUNC_RETURN, + CONDITION_FUNC_NO_TRANSITION, + CONDITION_FUNC_SLIDE_MON_OUT, + CONDITION_FUNC_ADD_MARKINGS, + CONDITION_FUNC_CLOSE_MARKINGS, +}; + +enum +{ + CONDITION_LOAD_MON_INFO, + CONDITION_LOAD_GRAPH, + CONDITION_LOAD_MON_PIC, }; #define POKENAV_MENU_FUNC_EXIT -1 @@ -270,7 +280,7 @@ enum POKENAV_MC_FUNC_CANCEL, POKENAV_MC_FUNC_CALL_MSG, POKENAV_MC_FUNC_NEARBY_MSG, - POKENAV_MC_FUNC_10, + POKENAV_MC_FUNC_EXIT_CALL, POKENAV_MC_FUNC_SHOW_CHECK_PAGE, POKENAV_MC_FUNC_CHECK_PAGE_UP, POKENAV_MC_FUNC_CHECK_PAGE_DOWN, @@ -287,6 +297,14 @@ enum POKENAV_MAP_FUNC_EXIT, }; +// Modes for PokenavFadeScreen +enum { + POKENAV_FADE_TO_BLACK, + POKENAV_FADE_FROM_BLACK, + POKENAV_FADE_TO_BLACK_ALL, + POKENAV_FADE_FROM_BLACK_ALL, +}; + // pokenav.c void SetSelectedConditionSearch(u32); u32 GetSelectedConditionSearch(void); @@ -305,23 +323,23 @@ bool32 CanViewRibbonsMenu(void); void SetPokenavVBlankCallback(void); void SetVBlankCallback_(IntrCallback callback); -// pokenav_match_call_ui.c -u32 GetSelectedPokenavListIndex(void); -bool32 sub_81C8224(void); -int MatchCall_MoveCursorUp(void); -int MatchCall_MoveCursorDown(void); -int MatchCall_PageDown(void); -int MatchCall_PageUp(void); -bool32 IsMonListLoopedTaskActive(void); -void ToggleMatchCallVerticalArrows(bool32 shouldHide); -void sub_81C8838(void); -void sub_81C877C(void); -bool32 IsMatchCallListTaskActive(void); -void PrintCheckPageInfo(s16 a0); -u32 GetMatchCallListTopIndex(void); -void sub_81C87F0(void); -bool32 sub_81C81D4(const struct BgTemplate *arg0, struct PokenavListTemplate *arg1, s32 arg2); -void sub_81C8234(void); +// pokenav_list.c +bool32 CreatePokenavList(const struct BgTemplate *bgTemplate, struct PokenavListTemplate *listTemplate, s32 tileOffset); +bool32 IsCreatePokenavListTaskActive(void); +void DestroyPokenavList(void); +u32 PokenavList_GetSelectedIndex(void); +int PokenavList_MoveCursorUp(void); +int PokenavList_MoveCursorDown(void); +int PokenavList_PageDown(void); +int PokenavList_PageUp(void); +bool32 PokenavList_IsMoveWindowTaskActive(void); +void PokenavList_ToggleVerticalArrows(bool32 shouldHide); +void PokenavList_DrawCurrentItemIcon(void); +void PokenavList_EraseListForCheckPage(void); +bool32 PokenavList_IsTaskActive(void); +void PrintCheckPageInfo(s16 delta); +u32 PokenavList_GetTopIndex(void); +void PokenavList_ReshowListFromCheckPage(void); // pokenav_match_call_data.c bool32 MatchCall_HasCheckPage(u32 idx); @@ -352,9 +370,9 @@ void SlideMenuHeaderDown(void); bool32 MainMenuLoopedTaskIsBusy(void); void SetLeftHeaderSpritesInvisibility(void); void PokenavCopyPalette(const u16 *a0, const u16 *a1, int a2, int a3, int a4, u16 *palette); -void sub_81C7B40(void); -struct Sprite *PauseSpinningPokenavSprite(void); -void ResumeSpinningPokenavSprite(void); +void FadeToBlackExceptPrimary(void); +struct Sprite *GetSpinningPokenavSprite(void); +void HideSpinningPokenavSprite(void); void UpdateRegionMapRightHeaderTiles(u32 arg0); void HideMainOrSubMenuLeftHeader(u32 id, bool32 onRightSide); void SlideMenuHeaderUp(void); @@ -364,7 +382,7 @@ bool32 WaitForPokenavShutdownFade(void); void SetActiveMenuLoopTasks(void *func1, void *func2); void ShutdownPokenav(void); -// pokenav_menu_handler_1.c +// pokenav_menu_handler.c bool32 PokenavCallback_Init_MainMenuCursorOnMap(void); bool32 PokenavCallback_Init_MainMenuCursorOnMatchCall(void); bool32 PokenavCallback_Init_MainMenuCursorOnRibbons(void); @@ -377,7 +395,7 @@ int GetPokenavCursorPos(void); int GetCurrentMenuItemId(void); u16 GetHelpBarTextId(void); -// pokenav_menu_handler_2.c +// pokenav_menu_handler_gfx.c bool32 OpenPokenavMenuInitial(void); bool32 OpenPokenavMenuNotInitial(void); void CreateMenuHandlerLoopedTask(s32 ltIdx); @@ -385,29 +403,28 @@ bool32 IsMenuHandlerLoopedTaskActive(void); void FreeMenuHandlerSubstruct2(void); void ResetBldCnt_(void); -// pokenav_match_call_1.c +// pokenav_match_call_list.c bool32 PokenavCallback_Init_MatchCall(void); u32 GetMatchCallCallback(void); void FreeMatchCallSubstruct1(void); -int sub_81CAE28(void); +int IsMatchCallListInitFinished(void); int GetNumberRegistered(void); -int sub_81CAE48(void); -struct PokenavMatchCallEntries *sub_81CAE94(void); +struct PokenavMatchCallEntry *GetMatchCallList(void); u16 GetMatchCallMapSec(int); bool32 ShouldDrawRematchPokeballIcon(int index); void ClearRematchPokeballIcon(u16 windowId, u32 a1); int GetMatchCallTrainerPic(int index); const u8 *GetMatchCallFlavorText(int index, int textType); -const u8 *GetMatchCallMessageText(int index, u8 *arg1); +const u8 *GetMatchCallMessageText(int index, bool8 *newRematchRequest); u16 GetMatchCallOptionCursorPos(void); u16 GetMatchCallOptionId(int arg0); -void BufferMatchCallNameAndDesc(struct PokenavMatchCallEntries * arg0, u8 *str); +void BufferMatchCallNameAndDesc(struct PokenavMatchCallEntry * arg0, u8 *str); u8 GetMatchTableMapSectionId(int rematchIndex); int GetIndexDeltaOfNextCheckPageDown(int index); int GetIndexDeltaOfNextCheckPageUp(int index); bool32 IsRematchEntryRegistered(int index); -// pokenav_match_call_2.c +// pokenav_match_call_gfx.c bool32 OpenMatchCall(void); void CreateMatchCallLoopedTask(s32 index); bool32 IsMatchCallLoopedTaskActive(void); @@ -422,33 +439,33 @@ bool32 IsRegionMapLoopedTaskActive(void); void FreeRegionMapSubstruct1(void); void FreeRegionMapSubstruct2(void); -// pokenav_conditions_1.c -u32 PokenavCallback_Init_PartyCondition(void); -u32 PokenavCallback_Init_ConditionGraphFromSearch(void); -u32 GetPartyConditionCallback(void); -void FreePartyConditionSubstruct1(void); -bool32 LoadPartyConditionMenuGfx(void); +// pokenav_conditions.c +u32 PokenavCallback_Init_ConditionGraph_Party(void); +u32 PokenavCallback_Init_ConditionGraph_Search(void); +u32 GetConditionGraphMenuCallback(void); +void FreeConditionGraphMenuSubstruct1(void); +bool32 LoadConditionGraphMenuGfx(void); bool32 IsConditionMenuSearchMode(void); -struct ConditionGraph *GetConditionGraphDataPtr(void); -u16 GetConditionGraphCurrentMonIndex(void); +struct ConditionGraph *GetConditionGraphPtr(void); +u16 GetConditionGraphCurrentListIndex(void); u16 GetMonListCount(void); -u8 GetMonSheen(void); -bool32 SetConditionGraphData(u8 arg0); +u8 GetNumConditionMonSparkles(void); +bool32 LoadNextConditionMenuMonData(u8 mode); u8 TryGetMonMarkId(void); -u8 *GetConditionMonNameBuffer(u8 id); -u8 *GetConditionMonLocationBuffer(u8 id); +u8 *GetConditionMonNameText(u8 id); +u8 *GetConditionMonLocationText(u8 id); u16 GetConditionMonDataBuffer(void); void *GetConditionMonPicGfx(u8 id); void *GetConditionMonPal(u8 id); -// pokenav_conditions_2.c -bool32 OpenPartyConditionMenu(void); -void CreatePartyConditionLoopedTask(s32); -u32 IsPartyConditionLoopedTaskActive(void); -void FreePartyConditionSubstruct2(void); +// pokenav_conditions_gfx.c +bool32 OpenConditionGraphMenu(void); +void CreateConditionGraphMenuLoopedTask(s32); +u32 IsConditionGraphMenuLoopedTaskActive(void); +void FreeConditionGraphMenuSubstruct2(void); u8 GetMonMarkingsData(void); -// pokenav_conditions_3.c +// pokenav_conditions_search_results.c u32 PokenavCallback_Init_ConditionSearch(void); u32 PokenavCallback_Init_ReturnToMonSearchList(void); u32 GetConditionSearchResultsCallback(void); @@ -459,18 +476,18 @@ void CreateSearchResultsLoopedTask(s32); u32 IsSearchResultLoopedTaskActive(void); void FreeSearchResultSubstruct2(void); -// pokenav_ribbons_1.c +// pokenav_ribbons_list.c u32 PokenavCallback_Init_MonRibbonList(void); u32 PokenavCallback_Init_RibbonsMonListFromSummary(void); u32 GetRibbonsMonListCallback(void); -void FreeRibbonsMonList1(void); +void FreeRibbonsMonList(void); bool32 OpenRibbonsMonList(void); bool32 OpenRibbonsMonListFromRibbonsSummary(void); void CreateRibbonsMonListLoopedTask(s32); u32 IsRibbonsMonListLoopedTaskActive(void); -void FreeRibbonsMonList2(void); +void FreeRibbonsMonMenu(void); -// pokenav_ribbons_2.c +// pokenav_ribbons_summary.c u32 PokenavCallback_Init_RibbonsSummaryMenu(void); u32 GetRibbonsSummaryMenuCallback(void); void FreeRibbonsSummaryScreen1(void); diff --git a/include/save.h b/include/save.h index 406e2e492e..be7961136e 100644 --- a/include/save.h +++ b/include/save.h @@ -1,43 +1,43 @@ #ifndef GUARD_SAVE_H #define GUARD_SAVE_H -struct SaveSectionLocation -{ - void *data; - u16 size; -}; - -struct SaveSection -{ - u8 data[0xFF4]; - u16 id; - u16 checksum; - u32 security; - u32 counter; -}; // size is 0x1000 - -// headless save section? -struct UnkSaveSection -{ - u8 data[0xFF4]; - u32 security; -}; // size is 0xFF8 - -struct SaveSectionOffsets -{ - u16 toAdd; - u16 size; -}; - -// Each 4 KiB flash sector contains 3968 bytes of actual data followed by a 128 byte footer +// Each 4 KiB flash sector contains 3968 bytes of actual data followed by a 128 byte footer. +// Only 12 bytes of the footer are used. #define SECTOR_DATA_SIZE 3968 #define SECTOR_FOOTER_SIZE 128 #define SECTOR_SIZE (SECTOR_DATA_SIZE + SECTOR_FOOTER_SIZE) #define NUM_SAVE_SLOTS 2 -#define UNKNOWN_CHECK_VALUE 0x8012025 -#define SPECIAL_SECTION_SENTINEL 0xB39D +// If the sector's security field is not this value then the sector is either invalid or empty. +#define SECTOR_SECURITY_NUM 0x8012025 + +#define SPECIAL_SECTOR_SENTINEL 0xB39D + +#define SECTOR_ID_SAVEBLOCK2 0 +#define SECTOR_ID_SAVEBLOCK1_START 1 +#define SECTOR_ID_SAVEBLOCK1_END 4 +#define SECTOR_ID_PKMN_STORAGE_START 5 +#define SECTOR_ID_PKMN_STORAGE_END 13 +#define NUM_SECTORS_PER_SLOT 14 +// Save Slot 1: 0-13; Save Slot 2: 14-27 +#define SECTOR_ID_HOF_1 28 +#define SECTOR_ID_HOF_2 29 +#define SECTOR_ID_TRAINER_HILL 30 +#define SECTOR_ID_RECORDED_BATTLE 31 +#define SECTORS_COUNT 32 + +#define NUM_HOF_SECTORS 2 + +#define SAVE_STATUS_EMPTY 0 +#define SAVE_STATUS_OK 1 +#define SAVE_STATUS_CORRUPT 2 +#define SAVE_STATUS_NO_FLASH 4 +#define SAVE_STATUS_ERROR 0xFF + +// Special sector id value for certain save functions to +// indicate that no specific sector should be used. +#define FULL_SAVE_SLOT 0xFFFF // SetDamagedSectorBits states enum @@ -51,7 +51,7 @@ enum enum { SAVE_NORMAL, - SAVE_LINK, + SAVE_LINK, // Link / Battle Frontier //EREADER_SAVE, // deprecated in Emerald SAVE_LINK2, // unknown 2nd link save SAVE_HALL_OF_FAME, @@ -59,54 +59,55 @@ enum SAVE_HALL_OF_FAME_ERASE_BEFORE // unused }; -#define SECTOR_ID_SAVEBLOCK2 0 -#define SECTOR_ID_SAVEBLOCK1_START 1 -#define SECTOR_ID_SAVEBLOCK1_END 4 -#define SECTOR_ID_PKMN_STORAGE_START 5 -#define SECTOR_ID_PKMN_STORAGE_END 13 -#define NUM_SECTORS_PER_SLOT 14 -// Save Slot 1: 0-13; Save Slot 2: 14-27 -#define SECTOR_ID_HOF_1 28 -#define SECTOR_ID_HOF_2 29 -#define SECTOR_ID_TRAINER_HILL 30 -#define SECTOR_ID_RECORDED_BATTLE 31 -#define SECTORS_COUNT 32 +// A save sector location holds a pointer to the data for a particular sector +// and the size of that data. Size cannot be greater than SECTOR_DATA_SIZE. +struct SaveSectorLocation +{ + void *data; + u16 size; +}; -#define SAVE_STATUS_EMPTY 0 -#define SAVE_STATUS_OK 1 -#define SAVE_STATUS_CORRUPT 2 -#define SAVE_STATUS_NO_FLASH 4 -#define SAVE_STATUS_ERROR 0xFF +struct SaveSector +{ + u8 data[SECTOR_DATA_SIZE]; + u8 unused[SECTOR_FOOTER_SIZE - 12]; // Unused portion of the footer + u16 id; + u16 checksum; + u32 security; + u32 counter; +}; // size is SECTOR_SIZE (0x1000) + +#define SECTOR_SECURITY_OFFSET offsetof(struct SaveSector, security) +#define SECTOR_COUNTER_OFFSET offsetof(struct SaveSector, counter) extern u16 gLastWrittenSector; extern u32 gLastSaveCounter; extern u16 gLastKnownGoodSector; extern u32 gDamagedSaveSectors; extern u32 gSaveCounter; -extern struct SaveSection *gFastSaveSection; -extern u16 gUnknown_03006208; +extern struct SaveSector *gFastSaveSector; +extern u16 gIncrementalSectorId; extern u16 gSaveFileStatus; extern void (*gGameContinueCallback)(void); -extern struct SaveSectionLocation gRamSaveSectionLocations[]; -extern u16 gUnknown_03006294; +extern struct SaveSectorLocation gRamSaveSectorLocations[]; -extern struct SaveSection gSaveDataBuffer; +extern struct SaveSector gSaveDataBuffer; void ClearSaveData(void); void Save_ResetSaveCounters(void); u8 HandleSavingData(u8 saveType); u8 TrySavingData(u8 saveType); -bool8 sub_8153380(void); -bool8 sub_81533AC(void); -bool8 sub_81533E0(void); -bool8 sub_8153408(void); -bool8 FullSaveGame(void); -bool8 CheckSaveFile(void); -u8 Save_LoadGameData(u8 saveType); +bool8 LinkFullSave_Init(void); +bool8 LinkFullSave_WriteSector(void); +bool8 LinkFullSave_ReplaceLastSector(void); +bool8 LinkFullSave_SetLastSectorSecurity(void); +bool8 WriteSaveBlock2(void); +bool8 WriteSaveBlock1Sector(void); +u8 LoadGameSave(u8 saveType); u16 GetSaveBlocksPointersBaseOffset(void); -u32 TryReadSpecialSaveSection(u8 sector, u8* dst); -u32 TryWriteSpecialSaveSection(u8 sector, u8* src); -void Task_LinkSave(u8 taskId); +u32 TryReadSpecialSaveSector(u8 sector, u8* dst); +u32 TryWriteSpecialSaveSector(u8 sector, u8* src); +void Task_LinkFullSave(u8 taskId); // save_failed_screen.c void DoSaveFailedScreen(u8 saveType); diff --git a/include/sound.h b/include/sound.h index 25ffa2d6e4..a5463a4561 100644 --- a/include/sound.h +++ b/include/sound.h @@ -1,26 +1,7 @@ #ifndef GUARD_SOUND_H #define GUARD_SOUND_H -enum { - FANFARE_LEVEL_UP, - FANFARE_OBTAIN_ITEM, - FANFARE_EVOLVED, - FANFARE_OBTAIN_TMHM, - FANFARE_HEAL, - FANFARE_OBTAIN_BADGE, - FANFARE_MOVE_DELETED, - FANFARE_OBTAIN_BERRY, - FANFARE_AWAKEN_LEGEND, - FANFARE_SLOTS_JACKPOT, - FANFARE_SLOTS_WIN, - FANFARE_TOO_BAD, - FANFARE_RG_POKE_FLUTE, - FANFARE_RG_OBTAIN_KEY_ITEM, - FANFARE_RG_DEX_RATING, - FANFARE_OBTAIN_B_POINTS, - FANFARE_OBTAIN_SYMBOL, - FANFARE_REGISTER_MATCH_CALL, -}; +#include "constants/sound.h" void InitMapMusic(void); void MapMusicMain(void); @@ -44,12 +25,12 @@ bool8 IsBGMPausedOrStopped(void); void FadeInBGM(u8 speed); void FadeOutBGM(u8 speed); bool8 IsBGMStopped(void); -void PlayCry1(u16 species, s8 pan); -void PlayCry2(u16 species, s8 pan, s8 volume, u8 priority); -void PlayCry3(u16 species, s8 pan, u8 mode); -void PlayCry4(u16 species, s8 pan, u8 mode); -void PlayCry5(u16 species, u8 mode); -void PlayCry6(u16 species, s8 pan, u8 mode); +void PlayCry_Normal(u16 species, s8 pan); +void PlayCry_NormalNoDucking(u16 species, s8 pan, s8 volume, u8 priority); +void PlayCry_ByMode(u16 species, s8 pan, u8 mode); +void PlayCry_ReleaseDouble(u16 species, s8 pan, u8 mode); +void PlayCry_Script(u16 species, u8 mode); +void PlayCry_DuckNoRestore(u16 species, s8 pan, u8 mode); void PlayCryInternal(u16 species, s8 pan, s8 volume, u8 priority, u8 mode); bool8 IsCryFinished(void); void StopCryAndClearCrySongs(void); diff --git a/include/strings.h b/include/strings.h index 7317f8aac8..a22aa307bb 100644 --- a/include/strings.h +++ b/include/strings.h @@ -611,6 +611,10 @@ extern const u8 gText_PlayersBattleResults[]; extern const u8 gText_WinLoseDraw[]; extern const u8 gText_ColorTransparent[]; extern const u8 gText_Slash[]; +extern const u8 gText_HealthboxNickname[]; +extern const u8 gText_HealthboxGender_None[]; +extern const u8 gText_HealthboxGender_Male[]; +extern const u8 gText_HealthboxGender_Female[]; extern const u8 gText_99TimesPlus[]; extern const u8 gText_1MinutePlus[]; @@ -2974,8 +2978,8 @@ extern const u8 gText_FindToughPokemon[]; extern const u8 gText_ReturnToConditionMenu[]; extern const u8 gText_NoRibbonWinners[]; -// Pokenav Ribbons -extern const u8 gText_NumberF700[]; +// Pokenav +extern const u8 gText_NumberIndex[]; extern const u8 gText_RibbonsF700[]; // use_pokeblock diff --git a/ld_script.txt b/ld_script.txt index 94d8ddd59a..605c9d2527 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -315,17 +315,17 @@ SECTIONS { src/battle_pyramid_bag.o(.text); src/pokenav.o(.text); src/pokenav_main_menu.o(.text); - src/pokenav_match_call_ui.o(.text); - src/pokenav_menu_handler_1.o(.text); - src/pokenav_menu_handler_2.o(.text); - src/pokenav_match_call_1.o(.text); - src/pokenav_match_call_2.o(.text); + src/pokenav_list.o(.text); + src/pokenav_menu_handler.o(.text); + src/pokenav_menu_handler_gfx.o(.text); + src/pokenav_match_call_list.o(.text); + src/pokenav_match_call_gfx.o(.text); src/pokenav_region_map.o(.text); - src/pokenav_conditions_1.o(.text); - src/pokenav_conditions_2.o(.text); - src/pokenav_conditions_3.o(.text); - src/pokenav_ribbons_1.o(.text); - src/pokenav_ribbons_2.o(.text); + src/pokenav_conditions.o(.text); + src/pokenav_conditions_gfx.o(.text); + src/pokenav_conditions_search_results.o(.text); + src/pokenav_ribbons_list.o(.text); + src/pokenav_ribbons_summary.o(.text); src/pokenav_match_call_data.o(.text); src/menu_specialized.o(.text); src/ereader_helpers.o(.text); @@ -674,16 +674,16 @@ SECTIONS { src/battle_pyramid_bag.o(.rodata); src/pokenav.o(.rodata); src/pokenav_main_menu.o(.rodata); - src/pokenav_match_call_ui.o(.rodata); - src/pokenav_menu_handler_1.o(.rodata); - src/pokenav_menu_handler_2.o(.rodata); - src/pokenav_match_call_1.o(.rodata); - src/pokenav_match_call_2.o(.rodata); + src/pokenav_list.o(.rodata); + src/pokenav_menu_handler.o(.rodata); + src/pokenav_menu_handler_gfx.o(.rodata); + src/pokenav_match_call_list.o(.rodata); + src/pokenav_match_call_gfx.o(.rodata); src/pokenav_region_map.o(.rodata); - src/pokenav_conditions_2.o(.rodata); - src/pokenav_conditions_3.o(.rodata); - src/pokenav_ribbons_1.o(.rodata); - src/pokenav_ribbons_2.o(.rodata); + src/pokenav_conditions_gfx.o(.rodata); + src/pokenav_conditions_search_results.o(.rodata); + src/pokenav_ribbons_list.o(.rodata); + src/pokenav_ribbons_summary.o(.rodata); src/pokenav_match_call_data.o(.rodata); src/menu_specialized.o(.rodata); src/ereader_helpers.o(.rodata); diff --git a/sound/cry_tables.inc b/sound/cry_tables.inc index bceb1ccb49..22e7433635 100644 --- a/sound/cry_tables.inc +++ b/sound/cry_tables.inc @@ -390,392 +390,392 @@ gCryTable:: cry Cry_Chimecho .align 2 -gCryTable2:: - cry2 Cry_Bulbasaur - cry2 Cry_Ivysaur - cry2 Cry_Venusaur - cry2 Cry_Charmander - cry2 Cry_Charmeleon - cry2 Cry_Charizard - cry2 Cry_Squirtle - cry2 Cry_Wartortle - cry2 Cry_Blastoise - cry2 Cry_Caterpie - cry2 Cry_Metapod - cry2 Cry_Butterfree - cry2 Cry_Weedle - cry2 Cry_Kakuna - cry2 Cry_Beedrill - cry2 Cry_Pidgey - cry2 Cry_Pidgeotto - cry2 Cry_Pidgeot - cry2 Cry_Rattata - cry2 Cry_Raticate - cry2 Cry_Spearow - cry2 Cry_Fearow - cry2 Cry_Ekans - cry2 Cry_Arbok - cry2 Cry_Pikachu - cry2 Cry_Raichu - cry2 Cry_Sandshrew - cry2 Cry_Sandslash - cry2 Cry_NidoranF - cry2 Cry_Nidorina - cry2 Cry_Nidoqueen - cry2 Cry_NidoranM - cry2 Cry_Nidorino - cry2 Cry_Nidoking - cry2 Cry_Clefairy - cry2 Cry_Clefable - cry2 Cry_Vulpix - cry2 Cry_Ninetales - cry2 Cry_Jigglypuff - cry2 Cry_Wigglytuff - cry2 Cry_Zubat - cry2 Cry_Golbat - cry2 Cry_Oddish - cry2 Cry_Gloom - cry2 Cry_Vileplume - cry2 Cry_Paras - cry2 Cry_Parasect - cry2 Cry_Venonat - cry2 Cry_Venomoth - cry2 Cry_Diglett - cry2 Cry_Dugtrio - cry2 Cry_Meowth - cry2 Cry_Persian - cry2 Cry_Psyduck - cry2 Cry_Golduck - cry2 Cry_Mankey - cry2 Cry_Primeape - cry2 Cry_Growlithe - cry2 Cry_Arcanine - cry2 Cry_Poliwag - cry2 Cry_Poliwhirl - cry2 Cry_Poliwrath - cry2 Cry_Abra - cry2 Cry_Kadabra - cry2 Cry_Alakazam - cry2 Cry_Machop - cry2 Cry_Machoke - cry2 Cry_Machamp - cry2 Cry_Bellsprout - cry2 Cry_Weepinbell - cry2 Cry_Victreebel - cry2 Cry_Tentacool - cry2 Cry_Tentacruel - cry2 Cry_Geodude - cry2 Cry_Graveler - cry2 Cry_Golem - cry2 Cry_Ponyta - cry2 Cry_Rapidash - cry2 Cry_Slowpoke - cry2 Cry_Slowbro - cry2 Cry_Magnemite - cry2 Cry_Magneton - cry2 Cry_Farfetchd - cry2 Cry_Doduo - cry2 Cry_Dodrio - cry2 Cry_Seel - cry2 Cry_Dewgong - cry2 Cry_Grimer - cry2 Cry_Muk - cry2 Cry_Shellder - cry2 Cry_Cloyster - cry2 Cry_Gastly - cry2 Cry_Haunter - cry2 Cry_Gengar - cry2 Cry_Onix - cry2 Cry_Drowzee - cry2 Cry_Hypno - cry2 Cry_Krabby - cry2 Cry_Kingler - cry2 Cry_Voltorb - cry2 Cry_Electrode - cry2 Cry_Exeggcute - cry2 Cry_Exeggutor - cry2 Cry_Cubone - cry2 Cry_Marowak - cry2 Cry_Hitmonlee - cry2 Cry_Hitmonchan - cry2 Cry_Lickitung - cry2 Cry_Koffing - cry2 Cry_Weezing - cry2 Cry_Rhyhorn - cry2 Cry_Rhydon - cry2 Cry_Chansey - cry2 Cry_Tangela - cry2 Cry_Kangaskhan - cry2 Cry_Horsea - cry2 Cry_Seadra - cry2 Cry_Goldeen - cry2 Cry_Seaking - cry2 Cry_Staryu - cry2 Cry_Starmie - cry2 Cry_MrMime - cry2 Cry_Scyther - cry2 Cry_Jynx - cry2 Cry_Electabuzz - cry2 Cry_Magmar - cry2 Cry_Pinsir - cry2 Cry_Tauros - cry2 Cry_Magikarp - cry2 Cry_Gyarados - cry2 Cry_Lapras - cry2 Cry_Ditto - cry2 Cry_Eevee - cry2 Cry_Vaporeon - cry2 Cry_Jolteon - cry2 Cry_Flareon - cry2 Cry_Porygon - cry2 Cry_Omanyte - cry2 Cry_Omastar - cry2 Cry_Kabuto - cry2 Cry_Kabutops - cry2 Cry_Aerodactyl - cry2 Cry_Snorlax - cry2 Cry_Articuno - cry2 Cry_Zapdos - cry2 Cry_Moltres - cry2 Cry_Dratini - cry2 Cry_Dragonair - cry2 Cry_Dragonite - cry2 Cry_Mewtwo - cry2 Cry_Mew - cry2 Cry_Chikorita - cry2 Cry_Bayleef - cry2 Cry_Meganium - cry2 Cry_Cyndaquil - cry2 Cry_Quilava - cry2 Cry_Typhlosion - cry2 Cry_Totodile - cry2 Cry_Croconaw - cry2 Cry_Feraligatr - cry2 Cry_Sentret - cry2 Cry_Furret - cry2 Cry_Hoothoot - cry2 Cry_Noctowl - cry2 Cry_Ledyba - cry2 Cry_Ledian - cry2 Cry_Spinarak - cry2 Cry_Ariados - cry2 Cry_Crobat - cry2 Cry_Chinchou - cry2 Cry_Lanturn - cry2 Cry_Pichu - cry2 Cry_Cleffa - cry2 Cry_Igglybuff - cry2 Cry_Togepi - cry2 Cry_Togetic - cry2 Cry_Natu - cry2 Cry_Xatu - cry2 Cry_Mareep - cry2 Cry_Flaaffy - cry2 Cry_Ampharos - cry2 Cry_Bellossom - cry2 Cry_Marill - cry2 Cry_Azumarill - cry2 Cry_Sudowoodo - cry2 Cry_Politoed - cry2 Cry_Hoppip - cry2 Cry_Skiploom - cry2 Cry_Jumpluff - cry2 Cry_Aipom - cry2 Cry_Sunkern - cry2 Cry_Sunflora - cry2 Cry_Yanma - cry2 Cry_Wooper - cry2 Cry_Quagsire - cry2 Cry_Espeon - cry2 Cry_Umbreon - cry2 Cry_Murkrow - cry2 Cry_Slowking - cry2 Cry_Misdreavus - cry2 Cry_Unown - cry2 Cry_Wobbuffet - cry2 Cry_Girafarig - cry2 Cry_Pineco - cry2 Cry_Forretress - cry2 Cry_Dunsparce - cry2 Cry_Gligar - cry2 Cry_Steelix - cry2 Cry_Snubbull - cry2 Cry_Granbull - cry2 Cry_Qwilfish - cry2 Cry_Scizor - cry2 Cry_Shuckle - cry2 Cry_Heracross - cry2 Cry_Sneasel - cry2 Cry_Teddiursa - cry2 Cry_Ursaring - cry2 Cry_Slugma - cry2 Cry_Magcargo - cry2 Cry_Swinub - cry2 Cry_Piloswine - cry2 Cry_Corsola - cry2 Cry_Remoraid - cry2 Cry_Octillery - cry2 Cry_Delibird - cry2 Cry_Mantine - cry2 Cry_Skarmory - cry2 Cry_Houndour - cry2 Cry_Houndoom - cry2 Cry_Kingdra - cry2 Cry_Phanpy - cry2 Cry_Donphan - cry2 Cry_Porygon2 - cry2 Cry_Stantler - cry2 Cry_Smeargle - cry2 Cry_Tyrogue - cry2 Cry_Hitmontop - cry2 Cry_Smoochum - cry2 Cry_Elekid - cry2 Cry_Magby - cry2 Cry_Miltank - cry2 Cry_Blissey - cry2 Cry_Raikou - cry2 Cry_Entei - cry2 Cry_Suicune - cry2 Cry_Larvitar - cry2 Cry_Pupitar - cry2 Cry_Tyranitar - cry2 Cry_Lugia - cry2 Cry_HoOh - cry2 Cry_Celebi - cry2 Cry_Kecleon - cry2 Cry_Roselia - cry2 Cry_Torkoal - cry2 Cry_Electrike - cry2 Cry_Manectric - cry2 Cry_Duskull - cry2 Cry_Latias - cry2 Cry_Wynaut - cry2 Cry_Seviper - cry2 Cry_Sharpedo - cry2 Cry_Zangoose - cry2 Cry_Azurill - cry2 Cry_Swablu - cry2 Cry_Altaria - cry2 Cry_Unused265 - cry2 Cry_Taillow - cry2 Cry_Swellow - cry2 Cry_Unused268 - cry2 Cry_Spinda - cry2 Cry_Torchic - cry2 Cry_Combusken - cry2 Cry_Blaziken - cry2 Cry_Treecko - cry2 Cry_Grovyle - cry2 Cry_Sceptile - cry2 Cry_Mudkip - cry2 Cry_Marshtomp - cry2 Cry_Swampert - cry2 Cry_Pelipper - cry2 Cry_Wingull - cry2 Cry_Banette - cry2 Cry_Shuppet - cry2 Cry_Lotad - cry2 Cry_Lombre - cry2 Cry_Ludicolo - cry2 Cry_Seedot - cry2 Cry_Nuzleaf - cry2 Cry_Shiftry - cry2 Cry_Carvanha - cry2 Cry_Wurmple - cry2 Cry_Silcoon - cry2 Cry_Beautifly - cry2 Cry_Cascoon - cry2 Cry_Dustox - cry2 Cry_Ralts - cry2 Cry_Kirlia - cry2 Cry_Gardevoir - cry2 Cry_Slakoth - cry2 Cry_Vigoroth - cry2 Cry_Slaking - cry2 Cry_Nincada - cry2 Cry_Ninjask - cry2 Cry_Shedinja - cry2 Cry_Makuhita - cry2 Cry_Hariyama - cry2 Cry_Nosepass - cry2 Cry_Glalie - cry2 Cry_Plusle - cry2 Cry_Minun - cry2 Cry_Surskit - cry2 Cry_Masquerain - cry2 Cry_Skitty - cry2 Cry_Delcatty - cry2 Cry_Gulpin - cry2 Cry_Swalot - cry2 Cry_Numel - cry2 Cry_Camerupt - cry2 Cry_Barboach - cry2 Cry_Whiscash - cry2 Cry_Corphish - cry2 Cry_Crawdaunt - cry2 Cry_Spoink - cry2 Cry_Grumpig - cry2 Cry_Trapinch - cry2 Cry_Vibrava - cry2 Cry_Flygon - cry2 Cry_Cacnea - cry2 Cry_Cacturne - cry2 Cry_Baltoy - cry2 Cry_Claydol - cry2 Cry_Lunatone - cry2 Cry_Solrock - cry2 Cry_Feebas - cry2 Cry_Milotic - cry2 Cry_Absol - cry2 Cry_Meditite - cry2 Cry_Medicham - cry2 Cry_Spheal - cry2 Cry_Sealeo - cry2 Cry_Walrein - cry2 Cry_Clamperl - cry2 Cry_Huntail - cry2 Cry_Gorebyss - cry2 Cry_Lileep - cry2 Cry_Cradily - cry2 Cry_Anorith - cry2 Cry_Armaldo - cry2 Cry_Beldum - cry2 Cry_Metang - cry2 Cry_Metagross - cry2 Cry_Bagon - cry2 Cry_Shelgon - cry2 Cry_Regirock - cry2 Cry_Regice - cry2 Cry_Registeel - cry2 Cry_Castform - cry2 Cry_Volbeat - cry2 Cry_Illumise - cry2 Cry_Poochyena - cry2 Cry_Mightyena - cry2 Cry_Dusclops - cry2 Cry_Sableye - cry2 Cry_Mawile - cry2 Cry_Aron - cry2 Cry_Lairon - cry2 Cry_Aggron - cry2 Cry_Relicanth - cry2 Cry_Luvdisc - cry2 Cry_Groudon - cry2 Cry_Kyogre - cry2 Cry_Rayquaza - cry2 Cry_Salamence - cry2 Cry_Breloom - cry2 Cry_Shroomish - cry2 Cry_Linoone - cry2 Cry_Tropius - cry2 Cry_Wailmer - cry2 Cry_Zigzagoon - cry2 Cry_Exploud - cry2 Cry_Loudred - cry2 Cry_Wailord - cry2 Cry_Whismur - cry2 Cry_Snorunt - cry2 Cry_Latios - cry2 Cry_Jirachi - cry2 Cry_Deoxys - cry2 Cry_Chimecho +gCryTable_Reverse:: + cry_reverse Cry_Bulbasaur + cry_reverse Cry_Ivysaur + cry_reverse Cry_Venusaur + cry_reverse Cry_Charmander + cry_reverse Cry_Charmeleon + cry_reverse Cry_Charizard + cry_reverse Cry_Squirtle + cry_reverse Cry_Wartortle + cry_reverse Cry_Blastoise + cry_reverse Cry_Caterpie + cry_reverse Cry_Metapod + cry_reverse Cry_Butterfree + cry_reverse Cry_Weedle + cry_reverse Cry_Kakuna + cry_reverse Cry_Beedrill + cry_reverse Cry_Pidgey + cry_reverse Cry_Pidgeotto + cry_reverse Cry_Pidgeot + cry_reverse Cry_Rattata + cry_reverse Cry_Raticate + cry_reverse Cry_Spearow + cry_reverse Cry_Fearow + cry_reverse Cry_Ekans + cry_reverse Cry_Arbok + cry_reverse Cry_Pikachu + cry_reverse Cry_Raichu + cry_reverse Cry_Sandshrew + cry_reverse Cry_Sandslash + cry_reverse Cry_NidoranF + cry_reverse Cry_Nidorina + cry_reverse Cry_Nidoqueen + cry_reverse Cry_NidoranM + cry_reverse Cry_Nidorino + cry_reverse Cry_Nidoking + cry_reverse Cry_Clefairy + cry_reverse Cry_Clefable + cry_reverse Cry_Vulpix + cry_reverse Cry_Ninetales + cry_reverse Cry_Jigglypuff + cry_reverse Cry_Wigglytuff + cry_reverse Cry_Zubat + cry_reverse Cry_Golbat + cry_reverse Cry_Oddish + cry_reverse Cry_Gloom + cry_reverse Cry_Vileplume + cry_reverse Cry_Paras + cry_reverse Cry_Parasect + cry_reverse Cry_Venonat + cry_reverse Cry_Venomoth + cry_reverse Cry_Diglett + cry_reverse Cry_Dugtrio + cry_reverse Cry_Meowth + cry_reverse Cry_Persian + cry_reverse Cry_Psyduck + cry_reverse Cry_Golduck + cry_reverse Cry_Mankey + cry_reverse Cry_Primeape + cry_reverse Cry_Growlithe + cry_reverse Cry_Arcanine + cry_reverse Cry_Poliwag + cry_reverse Cry_Poliwhirl + cry_reverse Cry_Poliwrath + cry_reverse Cry_Abra + cry_reverse Cry_Kadabra + cry_reverse Cry_Alakazam + cry_reverse Cry_Machop + cry_reverse Cry_Machoke + cry_reverse Cry_Machamp + cry_reverse Cry_Bellsprout + cry_reverse Cry_Weepinbell + cry_reverse Cry_Victreebel + cry_reverse Cry_Tentacool + cry_reverse Cry_Tentacruel + cry_reverse Cry_Geodude + cry_reverse Cry_Graveler + cry_reverse Cry_Golem + cry_reverse Cry_Ponyta + cry_reverse Cry_Rapidash + cry_reverse Cry_Slowpoke + cry_reverse Cry_Slowbro + cry_reverse Cry_Magnemite + cry_reverse Cry_Magneton + cry_reverse Cry_Farfetchd + cry_reverse Cry_Doduo + cry_reverse Cry_Dodrio + cry_reverse Cry_Seel + cry_reverse Cry_Dewgong + cry_reverse Cry_Grimer + cry_reverse Cry_Muk + cry_reverse Cry_Shellder + cry_reverse Cry_Cloyster + cry_reverse Cry_Gastly + cry_reverse Cry_Haunter + cry_reverse Cry_Gengar + cry_reverse Cry_Onix + cry_reverse Cry_Drowzee + cry_reverse Cry_Hypno + cry_reverse Cry_Krabby + cry_reverse Cry_Kingler + cry_reverse Cry_Voltorb + cry_reverse Cry_Electrode + cry_reverse Cry_Exeggcute + cry_reverse Cry_Exeggutor + cry_reverse Cry_Cubone + cry_reverse Cry_Marowak + cry_reverse Cry_Hitmonlee + cry_reverse Cry_Hitmonchan + cry_reverse Cry_Lickitung + cry_reverse Cry_Koffing + cry_reverse Cry_Weezing + cry_reverse Cry_Rhyhorn + cry_reverse Cry_Rhydon + cry_reverse Cry_Chansey + cry_reverse Cry_Tangela + cry_reverse Cry_Kangaskhan + cry_reverse Cry_Horsea + cry_reverse Cry_Seadra + cry_reverse Cry_Goldeen + cry_reverse Cry_Seaking + cry_reverse Cry_Staryu + cry_reverse Cry_Starmie + cry_reverse Cry_MrMime + cry_reverse Cry_Scyther + cry_reverse Cry_Jynx + cry_reverse Cry_Electabuzz + cry_reverse Cry_Magmar + cry_reverse Cry_Pinsir + cry_reverse Cry_Tauros + cry_reverse Cry_Magikarp + cry_reverse Cry_Gyarados + cry_reverse Cry_Lapras + cry_reverse Cry_Ditto + cry_reverse Cry_Eevee + cry_reverse Cry_Vaporeon + cry_reverse Cry_Jolteon + cry_reverse Cry_Flareon + cry_reverse Cry_Porygon + cry_reverse Cry_Omanyte + cry_reverse Cry_Omastar + cry_reverse Cry_Kabuto + cry_reverse Cry_Kabutops + cry_reverse Cry_Aerodactyl + cry_reverse Cry_Snorlax + cry_reverse Cry_Articuno + cry_reverse Cry_Zapdos + cry_reverse Cry_Moltres + cry_reverse Cry_Dratini + cry_reverse Cry_Dragonair + cry_reverse Cry_Dragonite + cry_reverse Cry_Mewtwo + cry_reverse Cry_Mew + cry_reverse Cry_Chikorita + cry_reverse Cry_Bayleef + cry_reverse Cry_Meganium + cry_reverse Cry_Cyndaquil + cry_reverse Cry_Quilava + cry_reverse Cry_Typhlosion + cry_reverse Cry_Totodile + cry_reverse Cry_Croconaw + cry_reverse Cry_Feraligatr + cry_reverse Cry_Sentret + cry_reverse Cry_Furret + cry_reverse Cry_Hoothoot + cry_reverse Cry_Noctowl + cry_reverse Cry_Ledyba + cry_reverse Cry_Ledian + cry_reverse Cry_Spinarak + cry_reverse Cry_Ariados + cry_reverse Cry_Crobat + cry_reverse Cry_Chinchou + cry_reverse Cry_Lanturn + cry_reverse Cry_Pichu + cry_reverse Cry_Cleffa + cry_reverse Cry_Igglybuff + cry_reverse Cry_Togepi + cry_reverse Cry_Togetic + cry_reverse Cry_Natu + cry_reverse Cry_Xatu + cry_reverse Cry_Mareep + cry_reverse Cry_Flaaffy + cry_reverse Cry_Ampharos + cry_reverse Cry_Bellossom + cry_reverse Cry_Marill + cry_reverse Cry_Azumarill + cry_reverse Cry_Sudowoodo + cry_reverse Cry_Politoed + cry_reverse Cry_Hoppip + cry_reverse Cry_Skiploom + cry_reverse Cry_Jumpluff + cry_reverse Cry_Aipom + cry_reverse Cry_Sunkern + cry_reverse Cry_Sunflora + cry_reverse Cry_Yanma + cry_reverse Cry_Wooper + cry_reverse Cry_Quagsire + cry_reverse Cry_Espeon + cry_reverse Cry_Umbreon + cry_reverse Cry_Murkrow + cry_reverse Cry_Slowking + cry_reverse Cry_Misdreavus + cry_reverse Cry_Unown + cry_reverse Cry_Wobbuffet + cry_reverse Cry_Girafarig + cry_reverse Cry_Pineco + cry_reverse Cry_Forretress + cry_reverse Cry_Dunsparce + cry_reverse Cry_Gligar + cry_reverse Cry_Steelix + cry_reverse Cry_Snubbull + cry_reverse Cry_Granbull + cry_reverse Cry_Qwilfish + cry_reverse Cry_Scizor + cry_reverse Cry_Shuckle + cry_reverse Cry_Heracross + cry_reverse Cry_Sneasel + cry_reverse Cry_Teddiursa + cry_reverse Cry_Ursaring + cry_reverse Cry_Slugma + cry_reverse Cry_Magcargo + cry_reverse Cry_Swinub + cry_reverse Cry_Piloswine + cry_reverse Cry_Corsola + cry_reverse Cry_Remoraid + cry_reverse Cry_Octillery + cry_reverse Cry_Delibird + cry_reverse Cry_Mantine + cry_reverse Cry_Skarmory + cry_reverse Cry_Houndour + cry_reverse Cry_Houndoom + cry_reverse Cry_Kingdra + cry_reverse Cry_Phanpy + cry_reverse Cry_Donphan + cry_reverse Cry_Porygon2 + cry_reverse Cry_Stantler + cry_reverse Cry_Smeargle + cry_reverse Cry_Tyrogue + cry_reverse Cry_Hitmontop + cry_reverse Cry_Smoochum + cry_reverse Cry_Elekid + cry_reverse Cry_Magby + cry_reverse Cry_Miltank + cry_reverse Cry_Blissey + cry_reverse Cry_Raikou + cry_reverse Cry_Entei + cry_reverse Cry_Suicune + cry_reverse Cry_Larvitar + cry_reverse Cry_Pupitar + cry_reverse Cry_Tyranitar + cry_reverse Cry_Lugia + cry_reverse Cry_HoOh + cry_reverse Cry_Celebi + cry_reverse Cry_Kecleon + cry_reverse Cry_Roselia + cry_reverse Cry_Torkoal + cry_reverse Cry_Electrike + cry_reverse Cry_Manectric + cry_reverse Cry_Duskull + cry_reverse Cry_Latias + cry_reverse Cry_Wynaut + cry_reverse Cry_Seviper + cry_reverse Cry_Sharpedo + cry_reverse Cry_Zangoose + cry_reverse Cry_Azurill + cry_reverse Cry_Swablu + cry_reverse Cry_Altaria + cry_reverse Cry_Unused265 + cry_reverse Cry_Taillow + cry_reverse Cry_Swellow + cry_reverse Cry_Unused268 + cry_reverse Cry_Spinda + cry_reverse Cry_Torchic + cry_reverse Cry_Combusken + cry_reverse Cry_Blaziken + cry_reverse Cry_Treecko + cry_reverse Cry_Grovyle + cry_reverse Cry_Sceptile + cry_reverse Cry_Mudkip + cry_reverse Cry_Marshtomp + cry_reverse Cry_Swampert + cry_reverse Cry_Pelipper + cry_reverse Cry_Wingull + cry_reverse Cry_Banette + cry_reverse Cry_Shuppet + cry_reverse Cry_Lotad + cry_reverse Cry_Lombre + cry_reverse Cry_Ludicolo + cry_reverse Cry_Seedot + cry_reverse Cry_Nuzleaf + cry_reverse Cry_Shiftry + cry_reverse Cry_Carvanha + cry_reverse Cry_Wurmple + cry_reverse Cry_Silcoon + cry_reverse Cry_Beautifly + cry_reverse Cry_Cascoon + cry_reverse Cry_Dustox + cry_reverse Cry_Ralts + cry_reverse Cry_Kirlia + cry_reverse Cry_Gardevoir + cry_reverse Cry_Slakoth + cry_reverse Cry_Vigoroth + cry_reverse Cry_Slaking + cry_reverse Cry_Nincada + cry_reverse Cry_Ninjask + cry_reverse Cry_Shedinja + cry_reverse Cry_Makuhita + cry_reverse Cry_Hariyama + cry_reverse Cry_Nosepass + cry_reverse Cry_Glalie + cry_reverse Cry_Plusle + cry_reverse Cry_Minun + cry_reverse Cry_Surskit + cry_reverse Cry_Masquerain + cry_reverse Cry_Skitty + cry_reverse Cry_Delcatty + cry_reverse Cry_Gulpin + cry_reverse Cry_Swalot + cry_reverse Cry_Numel + cry_reverse Cry_Camerupt + cry_reverse Cry_Barboach + cry_reverse Cry_Whiscash + cry_reverse Cry_Corphish + cry_reverse Cry_Crawdaunt + cry_reverse Cry_Spoink + cry_reverse Cry_Grumpig + cry_reverse Cry_Trapinch + cry_reverse Cry_Vibrava + cry_reverse Cry_Flygon + cry_reverse Cry_Cacnea + cry_reverse Cry_Cacturne + cry_reverse Cry_Baltoy + cry_reverse Cry_Claydol + cry_reverse Cry_Lunatone + cry_reverse Cry_Solrock + cry_reverse Cry_Feebas + cry_reverse Cry_Milotic + cry_reverse Cry_Absol + cry_reverse Cry_Meditite + cry_reverse Cry_Medicham + cry_reverse Cry_Spheal + cry_reverse Cry_Sealeo + cry_reverse Cry_Walrein + cry_reverse Cry_Clamperl + cry_reverse Cry_Huntail + cry_reverse Cry_Gorebyss + cry_reverse Cry_Lileep + cry_reverse Cry_Cradily + cry_reverse Cry_Anorith + cry_reverse Cry_Armaldo + cry_reverse Cry_Beldum + cry_reverse Cry_Metang + cry_reverse Cry_Metagross + cry_reverse Cry_Bagon + cry_reverse Cry_Shelgon + cry_reverse Cry_Regirock + cry_reverse Cry_Regice + cry_reverse Cry_Registeel + cry_reverse Cry_Castform + cry_reverse Cry_Volbeat + cry_reverse Cry_Illumise + cry_reverse Cry_Poochyena + cry_reverse Cry_Mightyena + cry_reverse Cry_Dusclops + cry_reverse Cry_Sableye + cry_reverse Cry_Mawile + cry_reverse Cry_Aron + cry_reverse Cry_Lairon + cry_reverse Cry_Aggron + cry_reverse Cry_Relicanth + cry_reverse Cry_Luvdisc + cry_reverse Cry_Groudon + cry_reverse Cry_Kyogre + cry_reverse Cry_Rayquaza + cry_reverse Cry_Salamence + cry_reverse Cry_Breloom + cry_reverse Cry_Shroomish + cry_reverse Cry_Linoone + cry_reverse Cry_Tropius + cry_reverse Cry_Wailmer + cry_reverse Cry_Zigzagoon + cry_reverse Cry_Exploud + cry_reverse Cry_Loudred + cry_reverse Cry_Wailord + cry_reverse Cry_Whismur + cry_reverse Cry_Snorunt + cry_reverse Cry_Latios + cry_reverse Cry_Jirachi + cry_reverse Cry_Deoxys + cry_reverse Cry_Chimecho diff --git a/sound/direct_sound_data.inc b/sound/direct_sound_data.inc index 508e6a6c44..298088ef41 100644 --- a/sound/direct_sound_data.inc +++ b/sound/direct_sound_data.inc @@ -283,24 +283,24 @@ DirectSoundWaveData_bicycle_bell:: .incbin "sound/direct_sound_samples/bicycle_bell.bin" .align 2 -DirectSoundWaveData_8725A2C:: - .incbin "sound/direct_sound_samples/8725A2C.bin" +DirectSoundWaveData_unknown_1:: + .incbin "sound/direct_sound_samples/unknown_01.bin" .align 2 DirectSoundWaveData_sc88pro_pizzicato_strings:: .incbin "sound/direct_sound_samples/sc88pro_pizzicato_strings.bin" .align 2 -DirectSoundWaveData_872762C:: - .incbin "sound/direct_sound_samples/872762C.bin" +DirectSoundWaveData_unknown_2:: + .incbin "sound/direct_sound_samples/unknown_02.bin" .align 2 -DirectSoundWaveData_872921C:: - .incbin "sound/direct_sound_samples/872921C.bin" +DirectSoundWaveData_unknown_3:: + .incbin "sound/direct_sound_samples/unknown_03.bin" .align 2 -DirectSoundWaveData_872A5D0:: - .incbin "sound/direct_sound_samples/872A5D0.bin" +DirectSoundWaveData_unknown_4:: + .incbin "sound/direct_sound_samples/unknown_04.bin" .align 2 DirectSoundWaveData_sc88pro_wind:: @@ -311,32 +311,32 @@ DirectSoundWaveData_sc88pro_bubbles:: .incbin "sound/direct_sound_samples/sc88pro_bubbles.bin" .align 2 -DirectSoundWaveData_872EEA8:: - .incbin "sound/direct_sound_samples/872EEA8.bin" +DirectSoundWaveData_unknown_5:: + .incbin "sound/direct_sound_samples/unknown_05.bin" .align 2 -DirectSoundWaveData_87301B0:: - .incbin "sound/direct_sound_samples/87301B0.bin" +DirectSoundWaveData_unknown_6:: + .incbin "sound/direct_sound_samples/unknown_06.bin" .align 2 DirectSoundWaveData_trinity_30303_mega_bass:: .incbin "sound/direct_sound_samples/trinity_30303_mega_bass.bin" .align 2 -DirectSoundWaveData_8734298:: - .incbin "sound/direct_sound_samples/8734298.bin" +DirectSoundWaveData_unknown_7:: + .incbin "sound/direct_sound_samples/unknown_07.bin" .align 2 -DirectSoundWaveData_87364A8:: - .incbin "sound/direct_sound_samples/87364A8.bin" +DirectSoundWaveData_unknown_8:: + .incbin "sound/direct_sound_samples/unknown_08.bin" .align 2 DirectSoundWaveData_sc88pro_tubular_bell:: .incbin "sound/direct_sound_samples/sc88pro_tubular_bell.bin" .align 2 -DirectSoundWaveData_87385E4:: - .incbin "sound/direct_sound_samples/87385E4.bin" +DirectSoundWaveData_unknown_9:: + .incbin "sound/direct_sound_samples/unknown_09.bin" .align 2 DirectSoundWaveData_trinity_big_boned:: @@ -351,40 +351,40 @@ DirectSoundWaveData_sc88pro_xylophone:: .incbin "sound/direct_sound_samples/sc88pro_xylophone.bin" .align 2 -DirectSoundWaveData_873ECD8:: - .incbin "sound/direct_sound_samples/873ECD8.bin" +DirectSoundWaveData_unknown_10:: + .incbin "sound/direct_sound_samples/unknown_10.bin" .align 2 -DirectSoundWaveData_8740818:: - .incbin "sound/direct_sound_samples/8740818.bin" +DirectSoundWaveData_unknown_11:: + .incbin "sound/direct_sound_samples/unknown_11.bin" .align 2 DirectSoundWaveData_sc88pro_accordion:: .incbin "sound/direct_sound_samples/sc88pro_accordion.bin" .align 2 -DirectSoundWaveData_87424B0:: - .incbin "sound/direct_sound_samples/87424B0.bin" +DirectSoundWaveData_unknown_12:: + .incbin "sound/direct_sound_samples/unknown_12.bin" .align 2 -DirectSoundWaveData_87430C0:: - .incbin "sound/direct_sound_samples/87430C0.bin" +DirectSoundWaveData_unknown_13:: + .incbin "sound/direct_sound_samples/unknown_13.bin" .align 2 -DirectSoundWaveData_8743C50:: - .incbin "sound/direct_sound_samples/8743C50.bin" +DirectSoundWaveData_unknown_14:: + .incbin "sound/direct_sound_samples/unknown_14.bin" .align 2 -DirectSoundWaveData_87446EC:: - .incbin "sound/direct_sound_samples/87446EC.bin" +DirectSoundWaveData_unknown_15:: + .incbin "sound/direct_sound_samples/unknown_15.bin" .align 2 -DirectSoundWaveData_8745034:: - .incbin "sound/direct_sound_samples/8745034.bin" +DirectSoundWaveData_unknown_16:: + .incbin "sound/direct_sound_samples/unknown_16.bin" .align 2 -DirectSoundWaveData_8745A7C:: - .incbin "sound/direct_sound_samples/8745A7C.bin" +DirectSoundWaveData_unknown_17:: + .incbin "sound/direct_sound_samples/unknown_17.bin" .align 2 Cry_Bulbasaur:: @@ -1943,8 +1943,8 @@ DirectSoundWaveData_register_noise:: .incbin "sound/direct_sound_samples/register_noise.bin" .align 2 -DirectSoundWaveData_88D6978:: - .incbin "sound/direct_sound_samples/88D6978.bin" +DirectSoundWaveData_unknown_18:: + .incbin "sound/direct_sound_samples/unknown_18.bin" .align 2 DirectSoundWaveData_sc88pro_nylon_str_guitar:: @@ -1955,208 +1955,208 @@ DirectSoundWaveData_sd90_special_scream_drive:: .incbin "sound/direct_sound_samples/sd90_special_scream_drive.bin" .align 2 -DirectSoundWaveData_88DBBC0:: - .incbin "sound/direct_sound_samples/88DBBC0.bin" +DirectSoundWaveData_Phoneme_1:: + .incbin "sound/direct_sound_samples/phonemes/01.bin" .align 2 -DirectSoundWaveData_88DC220:: - .incbin "sound/direct_sound_samples/88DC220.bin" +DirectSoundWaveData_Phoneme_2:: + .incbin "sound/direct_sound_samples/phonemes/02.bin" .align 2 -DirectSoundWaveData_88DC704:: - .incbin "sound/direct_sound_samples/88DC704.bin" +DirectSoundWaveData_Phoneme_3:: + .incbin "sound/direct_sound_samples/phonemes/03.bin" .align 2 -DirectSoundWaveData_88DD054:: - .incbin "sound/direct_sound_samples/88DD054.bin" +DirectSoundWaveData_Phoneme_4:: + .incbin "sound/direct_sound_samples/phonemes/04.bin" .align 2 -DirectSoundWaveData_88DDAC4:: - .incbin "sound/direct_sound_samples/88DDAC4.bin" +DirectSoundWaveData_Phoneme_5:: + .incbin "sound/direct_sound_samples/phonemes/05.bin" .align 2 -DirectSoundWaveData_88DDDE4:: - .incbin "sound/direct_sound_samples/88DDDE4.bin" +DirectSoundWaveData_Phoneme_6:: + .incbin "sound/direct_sound_samples/phonemes/06.bin" .align 2 -DirectSoundWaveData_88DEA6C:: - .incbin "sound/direct_sound_samples/88DEA6C.bin" +DirectSoundWaveData_Phoneme_7:: + .incbin "sound/direct_sound_samples/phonemes/07.bin" .align 2 -DirectSoundWaveData_88DF08C:: - .incbin "sound/direct_sound_samples/88DF08C.bin" +DirectSoundWaveData_Phoneme_8:: + .incbin "sound/direct_sound_samples/phonemes/08.bin" .align 2 -DirectSoundWaveData_88DF414:: - .incbin "sound/direct_sound_samples/88DF414.bin" +DirectSoundWaveData_Phoneme_9:: + .incbin "sound/direct_sound_samples/phonemes/09.bin" .align 2 -DirectSoundWaveData_88E01F8:: - .incbin "sound/direct_sound_samples/88E01F8.bin" +DirectSoundWaveData_Phoneme_10:: + .incbin "sound/direct_sound_samples/phonemes/10.bin" .align 2 -DirectSoundWaveData_88E0B68:: - .incbin "sound/direct_sound_samples/88E0B68.bin" +DirectSoundWaveData_Phoneme_11:: + .incbin "sound/direct_sound_samples/phonemes/11.bin" .align 2 -DirectSoundWaveData_88E0F04:: - .incbin "sound/direct_sound_samples/88E0F04.bin" +DirectSoundWaveData_Phoneme_12:: + .incbin "sound/direct_sound_samples/phonemes/12.bin" .align 2 -DirectSoundWaveData_88E16B8:: - .incbin "sound/direct_sound_samples/88E16B8.bin" +DirectSoundWaveData_Phoneme_13:: + .incbin "sound/direct_sound_samples/phonemes/13.bin" .align 2 -DirectSoundWaveData_88E2414:: - .incbin "sound/direct_sound_samples/88E2414.bin" +DirectSoundWaveData_Phoneme_14:: + .incbin "sound/direct_sound_samples/phonemes/14.bin" .align 2 -DirectSoundWaveData_88E2658:: - .incbin "sound/direct_sound_samples/88E2658.bin" +DirectSoundWaveData_Phoneme_15:: + .incbin "sound/direct_sound_samples/phonemes/15.bin" .align 2 -DirectSoundWaveData_88E3498:: - .incbin "sound/direct_sound_samples/88E3498.bin" +DirectSoundWaveData_Phoneme_16:: + .incbin "sound/direct_sound_samples/phonemes/16.bin" .align 2 -DirectSoundWaveData_88E3DEC:: - .incbin "sound/direct_sound_samples/88E3DEC.bin" +DirectSoundWaveData_Phoneme_17:: + .incbin "sound/direct_sound_samples/phonemes/17.bin" .align 2 -DirectSoundWaveData_88E4140:: - .incbin "sound/direct_sound_samples/88E4140.bin" +DirectSoundWaveData_Phoneme_18:: + .incbin "sound/direct_sound_samples/phonemes/18.bin" .align 2 -DirectSoundWaveData_88E4774:: - .incbin "sound/direct_sound_samples/88E4774.bin" +DirectSoundWaveData_Phoneme_19:: + .incbin "sound/direct_sound_samples/phonemes/19.bin" .align 2 -DirectSoundWaveData_88E53E0:: - .incbin "sound/direct_sound_samples/88E53E0.bin" +DirectSoundWaveData_Phoneme_20:: + .incbin "sound/direct_sound_samples/phonemes/20.bin" .align 2 -DirectSoundWaveData_88E5978:: - .incbin "sound/direct_sound_samples/88E5978.bin" +DirectSoundWaveData_Phoneme_21:: + .incbin "sound/direct_sound_samples/phonemes/21.bin" .align 2 -DirectSoundWaveData_88E647C:: - .incbin "sound/direct_sound_samples/88E647C.bin" +DirectSoundWaveData_Phoneme_22:: + .incbin "sound/direct_sound_samples/phonemes/22.bin" .align 2 -DirectSoundWaveData_88E6A80:: - .incbin "sound/direct_sound_samples/88E6A80.bin" +DirectSoundWaveData_Phoneme_23:: + .incbin "sound/direct_sound_samples/phonemes/23.bin" .align 2 -DirectSoundWaveData_88E6C78:: - .incbin "sound/direct_sound_samples/88E6C78.bin" +DirectSoundWaveData_Phoneme_24:: + .incbin "sound/direct_sound_samples/phonemes/24.bin" .align 2 -DirectSoundWaveData_88E75DC:: - .incbin "sound/direct_sound_samples/88E75DC.bin" +DirectSoundWaveData_Phoneme_25:: + .incbin "sound/direct_sound_samples/phonemes/25.bin" .align 2 -DirectSoundWaveData_88E8568:: - .incbin "sound/direct_sound_samples/88E8568.bin" +DirectSoundWaveData_Phoneme_26:: + .incbin "sound/direct_sound_samples/phonemes/26.bin" .align 2 -DirectSoundWaveData_88E8BA0:: - .incbin "sound/direct_sound_samples/88E8BA0.bin" +DirectSoundWaveData_Phoneme_27:: + .incbin "sound/direct_sound_samples/phonemes/27.bin" .align 2 -DirectSoundWaveData_88E9674:: - .incbin "sound/direct_sound_samples/88E9674.bin" +DirectSoundWaveData_Phoneme_28:: + .incbin "sound/direct_sound_samples/phonemes/28.bin" .align 2 -DirectSoundWaveData_88EA5B8:: - .incbin "sound/direct_sound_samples/88EA5B8.bin" +DirectSoundWaveData_Phoneme_29:: + .incbin "sound/direct_sound_samples/phonemes/29.bin" .align 2 -DirectSoundWaveData_88EAB30:: - .incbin "sound/direct_sound_samples/88EAB30.bin" +DirectSoundWaveData_Phoneme_30:: + .incbin "sound/direct_sound_samples/phonemes/30.bin" .align 2 -DirectSoundWaveData_88EB97C:: - .incbin "sound/direct_sound_samples/88EB97C.bin" +DirectSoundWaveData_Phoneme_31:: + .incbin "sound/direct_sound_samples/phonemes/31.bin" .align 2 -DirectSoundWaveData_88EC884:: - .incbin "sound/direct_sound_samples/88EC884.bin" +DirectSoundWaveData_Phoneme_32:: + .incbin "sound/direct_sound_samples/phonemes/32.bin" .align 2 -DirectSoundWaveData_88ED358:: - .incbin "sound/direct_sound_samples/88ED358.bin" +DirectSoundWaveData_Phoneme_33:: + .incbin "sound/direct_sound_samples/phonemes/33.bin" .align 2 -DirectSoundWaveData_88EDEEC:: - .incbin "sound/direct_sound_samples/88EDEEC.bin" +DirectSoundWaveData_Phoneme_34:: + .incbin "sound/direct_sound_samples/phonemes/34.bin" .align 2 -DirectSoundWaveData_88EE8C4:: - .incbin "sound/direct_sound_samples/88EE8C4.bin" +DirectSoundWaveData_Phoneme_35:: + .incbin "sound/direct_sound_samples/phonemes/35.bin" .align 2 -DirectSoundWaveData_88EEF04:: - .incbin "sound/direct_sound_samples/88EEF04.bin" +DirectSoundWaveData_Phoneme_36:: + .incbin "sound/direct_sound_samples/phonemes/36.bin" .align 2 -DirectSoundWaveData_88EF9E4:: - .incbin "sound/direct_sound_samples/88EF9E4.bin" +DirectSoundWaveData_Phoneme_37:: + .incbin "sound/direct_sound_samples/phonemes/37.bin" .align 2 -DirectSoundWaveData_88F0020:: - .incbin "sound/direct_sound_samples/88F0020.bin" +DirectSoundWaveData_Phoneme_38:: + .incbin "sound/direct_sound_samples/phonemes/38.bin" .align 2 -DirectSoundWaveData_88F0738:: - .incbin "sound/direct_sound_samples/88F0738.bin" +DirectSoundWaveData_Phoneme_39:: + .incbin "sound/direct_sound_samples/phonemes/39.bin" .align 2 -DirectSoundWaveData_88F1074:: - .incbin "sound/direct_sound_samples/88F1074.bin" +DirectSoundWaveData_Phoneme_40:: + .incbin "sound/direct_sound_samples/phonemes/40.bin" .align 2 -DirectSoundWaveData_88F1830:: - .incbin "sound/direct_sound_samples/88F1830.bin" +DirectSoundWaveData_Phoneme_41:: + .incbin "sound/direct_sound_samples/phonemes/41.bin" .align 2 -DirectSoundWaveData_88F1D94:: - .incbin "sound/direct_sound_samples/88F1D94.bin" +DirectSoundWaveData_Phoneme_42:: + .incbin "sound/direct_sound_samples/phonemes/42.bin" .align 2 -DirectSoundWaveData_88F2B08:: - .incbin "sound/direct_sound_samples/88F2B08.bin" +DirectSoundWaveData_Phoneme_43:: + .incbin "sound/direct_sound_samples/phonemes/43.bin" .align 2 -DirectSoundWaveData_88F2F84:: - .incbin "sound/direct_sound_samples/88F2F84.bin" +DirectSoundWaveData_Phoneme_44:: + .incbin "sound/direct_sound_samples/phonemes/44.bin" .align 2 -DirectSoundWaveData_88F3470:: - .incbin "sound/direct_sound_samples/88F3470.bin" +DirectSoundWaveData_Phoneme_45:: + .incbin "sound/direct_sound_samples/phonemes/45.bin" .align 2 -DirectSoundWaveData_88F3C38:: - .incbin "sound/direct_sound_samples/88F3C38.bin" +DirectSoundWaveData_Phoneme_46:: + .incbin "sound/direct_sound_samples/phonemes/46.bin" .align 2 -DirectSoundWaveData_88F4834:: - .incbin "sound/direct_sound_samples/88F4834.bin" +DirectSoundWaveData_Phoneme_47:: + .incbin "sound/direct_sound_samples/phonemes/47.bin" .align 2 -DirectSoundWaveData_88F4BAC:: - .incbin "sound/direct_sound_samples/88F4BAC.bin" +DirectSoundWaveData_Phoneme_48:: + .incbin "sound/direct_sound_samples/phonemes/48.bin" .align 2 -DirectSoundWaveData_88F5368:: - .incbin "sound/direct_sound_samples/88F5368.bin" +DirectSoundWaveData_Phoneme_49:: + .incbin "sound/direct_sound_samples/phonemes/49.bin" .align 2 -DirectSoundWaveData_88F5FCC:: - .incbin "sound/direct_sound_samples/88F5FCC.bin" +DirectSoundWaveData_Phoneme_50:: + .incbin "sound/direct_sound_samples/phonemes/50.bin" .align 2 -DirectSoundWaveData_88F6498:: - .incbin "sound/direct_sound_samples/88F6498.bin" +DirectSoundWaveData_Phoneme_51:: + .incbin "sound/direct_sound_samples/phonemes/51.bin" .align 2 DirectSoundWaveData_sc88pro_accordion_duplicate:: diff --git a/sound/direct_sound_samples/88DBBC0.aif b/sound/direct_sound_samples/phonemes/01.aif similarity index 100% rename from sound/direct_sound_samples/88DBBC0.aif rename to sound/direct_sound_samples/phonemes/01.aif diff --git a/sound/direct_sound_samples/88DC220.aif b/sound/direct_sound_samples/phonemes/02.aif similarity index 100% rename from sound/direct_sound_samples/88DC220.aif rename to sound/direct_sound_samples/phonemes/02.aif diff --git a/sound/direct_sound_samples/88DC704.aif b/sound/direct_sound_samples/phonemes/03.aif similarity index 100% rename from sound/direct_sound_samples/88DC704.aif rename to sound/direct_sound_samples/phonemes/03.aif diff --git a/sound/direct_sound_samples/88DD054.aif b/sound/direct_sound_samples/phonemes/04.aif similarity index 100% rename from sound/direct_sound_samples/88DD054.aif rename to sound/direct_sound_samples/phonemes/04.aif diff --git a/sound/direct_sound_samples/88DDAC4.aif b/sound/direct_sound_samples/phonemes/05.aif similarity index 100% rename from sound/direct_sound_samples/88DDAC4.aif rename to sound/direct_sound_samples/phonemes/05.aif diff --git a/sound/direct_sound_samples/88DDDE4.aif b/sound/direct_sound_samples/phonemes/06.aif similarity index 100% rename from sound/direct_sound_samples/88DDDE4.aif rename to sound/direct_sound_samples/phonemes/06.aif diff --git a/sound/direct_sound_samples/88DEA6C.aif b/sound/direct_sound_samples/phonemes/07.aif similarity index 100% rename from sound/direct_sound_samples/88DEA6C.aif rename to sound/direct_sound_samples/phonemes/07.aif diff --git a/sound/direct_sound_samples/88DF08C.aif b/sound/direct_sound_samples/phonemes/08.aif similarity index 100% rename from sound/direct_sound_samples/88DF08C.aif rename to sound/direct_sound_samples/phonemes/08.aif diff --git a/sound/direct_sound_samples/88DF414.aif b/sound/direct_sound_samples/phonemes/09.aif similarity index 100% rename from sound/direct_sound_samples/88DF414.aif rename to sound/direct_sound_samples/phonemes/09.aif diff --git a/sound/direct_sound_samples/88E01F8.aif b/sound/direct_sound_samples/phonemes/10.aif similarity index 100% rename from sound/direct_sound_samples/88E01F8.aif rename to sound/direct_sound_samples/phonemes/10.aif diff --git a/sound/direct_sound_samples/88E0B68.aif b/sound/direct_sound_samples/phonemes/11.aif similarity index 100% rename from sound/direct_sound_samples/88E0B68.aif rename to sound/direct_sound_samples/phonemes/11.aif diff --git a/sound/direct_sound_samples/88E0F04.aif b/sound/direct_sound_samples/phonemes/12.aif similarity index 100% rename from sound/direct_sound_samples/88E0F04.aif rename to sound/direct_sound_samples/phonemes/12.aif diff --git a/sound/direct_sound_samples/88E16B8.aif b/sound/direct_sound_samples/phonemes/13.aif similarity index 100% rename from sound/direct_sound_samples/88E16B8.aif rename to sound/direct_sound_samples/phonemes/13.aif diff --git a/sound/direct_sound_samples/88E2414.aif b/sound/direct_sound_samples/phonemes/14.aif similarity index 100% rename from sound/direct_sound_samples/88E2414.aif rename to sound/direct_sound_samples/phonemes/14.aif diff --git a/sound/direct_sound_samples/88E2658.aif b/sound/direct_sound_samples/phonemes/15.aif similarity index 100% rename from sound/direct_sound_samples/88E2658.aif rename to sound/direct_sound_samples/phonemes/15.aif diff --git a/sound/direct_sound_samples/88E3498.aif b/sound/direct_sound_samples/phonemes/16.aif similarity index 100% rename from sound/direct_sound_samples/88E3498.aif rename to sound/direct_sound_samples/phonemes/16.aif diff --git a/sound/direct_sound_samples/88E3DEC.aif b/sound/direct_sound_samples/phonemes/17.aif similarity index 100% rename from sound/direct_sound_samples/88E3DEC.aif rename to sound/direct_sound_samples/phonemes/17.aif diff --git a/sound/direct_sound_samples/88E4140.aif b/sound/direct_sound_samples/phonemes/18.aif similarity index 100% rename from sound/direct_sound_samples/88E4140.aif rename to sound/direct_sound_samples/phonemes/18.aif diff --git a/sound/direct_sound_samples/88E4774.aif b/sound/direct_sound_samples/phonemes/19.aif similarity index 100% rename from sound/direct_sound_samples/88E4774.aif rename to sound/direct_sound_samples/phonemes/19.aif diff --git a/sound/direct_sound_samples/88E53E0.aif b/sound/direct_sound_samples/phonemes/20.aif similarity index 100% rename from sound/direct_sound_samples/88E53E0.aif rename to sound/direct_sound_samples/phonemes/20.aif diff --git a/sound/direct_sound_samples/88E5978.aif b/sound/direct_sound_samples/phonemes/21.aif similarity index 100% rename from sound/direct_sound_samples/88E5978.aif rename to sound/direct_sound_samples/phonemes/21.aif diff --git a/sound/direct_sound_samples/88E647C.aif b/sound/direct_sound_samples/phonemes/22.aif similarity index 100% rename from sound/direct_sound_samples/88E647C.aif rename to sound/direct_sound_samples/phonemes/22.aif diff --git a/sound/direct_sound_samples/88E6A80.aif b/sound/direct_sound_samples/phonemes/23.aif similarity index 100% rename from sound/direct_sound_samples/88E6A80.aif rename to sound/direct_sound_samples/phonemes/23.aif diff --git a/sound/direct_sound_samples/88E6C78.aif b/sound/direct_sound_samples/phonemes/24.aif similarity index 100% rename from sound/direct_sound_samples/88E6C78.aif rename to sound/direct_sound_samples/phonemes/24.aif diff --git a/sound/direct_sound_samples/88E75DC.aif b/sound/direct_sound_samples/phonemes/25.aif similarity index 100% rename from sound/direct_sound_samples/88E75DC.aif rename to sound/direct_sound_samples/phonemes/25.aif diff --git a/sound/direct_sound_samples/88E8568.aif b/sound/direct_sound_samples/phonemes/26.aif similarity index 100% rename from sound/direct_sound_samples/88E8568.aif rename to sound/direct_sound_samples/phonemes/26.aif diff --git a/sound/direct_sound_samples/88E8BA0.aif b/sound/direct_sound_samples/phonemes/27.aif similarity index 100% rename from sound/direct_sound_samples/88E8BA0.aif rename to sound/direct_sound_samples/phonemes/27.aif diff --git a/sound/direct_sound_samples/88E9674.aif b/sound/direct_sound_samples/phonemes/28.aif similarity index 100% rename from sound/direct_sound_samples/88E9674.aif rename to sound/direct_sound_samples/phonemes/28.aif diff --git a/sound/direct_sound_samples/88EA5B8.aif b/sound/direct_sound_samples/phonemes/29.aif similarity index 100% rename from sound/direct_sound_samples/88EA5B8.aif rename to sound/direct_sound_samples/phonemes/29.aif diff --git a/sound/direct_sound_samples/88EAB30.aif b/sound/direct_sound_samples/phonemes/30.aif similarity index 100% rename from sound/direct_sound_samples/88EAB30.aif rename to sound/direct_sound_samples/phonemes/30.aif diff --git a/sound/direct_sound_samples/88EB97C.aif b/sound/direct_sound_samples/phonemes/31.aif similarity index 100% rename from sound/direct_sound_samples/88EB97C.aif rename to sound/direct_sound_samples/phonemes/31.aif diff --git a/sound/direct_sound_samples/88EC884.aif b/sound/direct_sound_samples/phonemes/32.aif similarity index 100% rename from sound/direct_sound_samples/88EC884.aif rename to sound/direct_sound_samples/phonemes/32.aif diff --git a/sound/direct_sound_samples/88ED358.aif b/sound/direct_sound_samples/phonemes/33.aif similarity index 100% rename from sound/direct_sound_samples/88ED358.aif rename to sound/direct_sound_samples/phonemes/33.aif diff --git a/sound/direct_sound_samples/88EDEEC.aif b/sound/direct_sound_samples/phonemes/34.aif similarity index 100% rename from sound/direct_sound_samples/88EDEEC.aif rename to sound/direct_sound_samples/phonemes/34.aif diff --git a/sound/direct_sound_samples/88EE8C4.aif b/sound/direct_sound_samples/phonemes/35.aif similarity index 100% rename from sound/direct_sound_samples/88EE8C4.aif rename to sound/direct_sound_samples/phonemes/35.aif diff --git a/sound/direct_sound_samples/88EEF04.aif b/sound/direct_sound_samples/phonemes/36.aif similarity index 100% rename from sound/direct_sound_samples/88EEF04.aif rename to sound/direct_sound_samples/phonemes/36.aif diff --git a/sound/direct_sound_samples/88EF9E4.aif b/sound/direct_sound_samples/phonemes/37.aif similarity index 100% rename from sound/direct_sound_samples/88EF9E4.aif rename to sound/direct_sound_samples/phonemes/37.aif diff --git a/sound/direct_sound_samples/88F0020.aif b/sound/direct_sound_samples/phonemes/38.aif similarity index 100% rename from sound/direct_sound_samples/88F0020.aif rename to sound/direct_sound_samples/phonemes/38.aif diff --git a/sound/direct_sound_samples/88F0738.aif b/sound/direct_sound_samples/phonemes/39.aif similarity index 100% rename from sound/direct_sound_samples/88F0738.aif rename to sound/direct_sound_samples/phonemes/39.aif diff --git a/sound/direct_sound_samples/88F1074.aif b/sound/direct_sound_samples/phonemes/40.aif similarity index 100% rename from sound/direct_sound_samples/88F1074.aif rename to sound/direct_sound_samples/phonemes/40.aif diff --git a/sound/direct_sound_samples/88F1830.aif b/sound/direct_sound_samples/phonemes/41.aif similarity index 100% rename from sound/direct_sound_samples/88F1830.aif rename to sound/direct_sound_samples/phonemes/41.aif diff --git a/sound/direct_sound_samples/88F1D94.aif b/sound/direct_sound_samples/phonemes/42.aif similarity index 100% rename from sound/direct_sound_samples/88F1D94.aif rename to sound/direct_sound_samples/phonemes/42.aif diff --git a/sound/direct_sound_samples/88F2B08.aif b/sound/direct_sound_samples/phonemes/43.aif similarity index 100% rename from sound/direct_sound_samples/88F2B08.aif rename to sound/direct_sound_samples/phonemes/43.aif diff --git a/sound/direct_sound_samples/88F2F84.aif b/sound/direct_sound_samples/phonemes/44.aif similarity index 100% rename from sound/direct_sound_samples/88F2F84.aif rename to sound/direct_sound_samples/phonemes/44.aif diff --git a/sound/direct_sound_samples/88F3470.aif b/sound/direct_sound_samples/phonemes/45.aif similarity index 100% rename from sound/direct_sound_samples/88F3470.aif rename to sound/direct_sound_samples/phonemes/45.aif diff --git a/sound/direct_sound_samples/88F3C38.aif b/sound/direct_sound_samples/phonemes/46.aif similarity index 100% rename from sound/direct_sound_samples/88F3C38.aif rename to sound/direct_sound_samples/phonemes/46.aif diff --git a/sound/direct_sound_samples/88F4834.aif b/sound/direct_sound_samples/phonemes/47.aif similarity index 100% rename from sound/direct_sound_samples/88F4834.aif rename to sound/direct_sound_samples/phonemes/47.aif diff --git a/sound/direct_sound_samples/88F4BAC.aif b/sound/direct_sound_samples/phonemes/48.aif similarity index 100% rename from sound/direct_sound_samples/88F4BAC.aif rename to sound/direct_sound_samples/phonemes/48.aif diff --git a/sound/direct_sound_samples/88F5368.aif b/sound/direct_sound_samples/phonemes/49.aif similarity index 100% rename from sound/direct_sound_samples/88F5368.aif rename to sound/direct_sound_samples/phonemes/49.aif diff --git a/sound/direct_sound_samples/88F5FCC.aif b/sound/direct_sound_samples/phonemes/50.aif similarity index 100% rename from sound/direct_sound_samples/88F5FCC.aif rename to sound/direct_sound_samples/phonemes/50.aif diff --git a/sound/direct_sound_samples/88F6498.aif b/sound/direct_sound_samples/phonemes/51.aif similarity index 100% rename from sound/direct_sound_samples/88F6498.aif rename to sound/direct_sound_samples/phonemes/51.aif diff --git a/sound/direct_sound_samples/8725A2C.aif b/sound/direct_sound_samples/unknown_01.aif similarity index 100% rename from sound/direct_sound_samples/8725A2C.aif rename to sound/direct_sound_samples/unknown_01.aif diff --git a/sound/direct_sound_samples/872762C.aif b/sound/direct_sound_samples/unknown_02.aif similarity index 100% rename from sound/direct_sound_samples/872762C.aif rename to sound/direct_sound_samples/unknown_02.aif diff --git a/sound/direct_sound_samples/872921C.aif b/sound/direct_sound_samples/unknown_03.aif similarity index 100% rename from sound/direct_sound_samples/872921C.aif rename to sound/direct_sound_samples/unknown_03.aif diff --git a/sound/direct_sound_samples/872A5D0.aif b/sound/direct_sound_samples/unknown_04.aif similarity index 100% rename from sound/direct_sound_samples/872A5D0.aif rename to sound/direct_sound_samples/unknown_04.aif diff --git a/sound/direct_sound_samples/872EEA8.aif b/sound/direct_sound_samples/unknown_05.aif similarity index 100% rename from sound/direct_sound_samples/872EEA8.aif rename to sound/direct_sound_samples/unknown_05.aif diff --git a/sound/direct_sound_samples/87301B0.aif b/sound/direct_sound_samples/unknown_06.aif similarity index 100% rename from sound/direct_sound_samples/87301B0.aif rename to sound/direct_sound_samples/unknown_06.aif diff --git a/sound/direct_sound_samples/8734298.aif b/sound/direct_sound_samples/unknown_07.aif similarity index 100% rename from sound/direct_sound_samples/8734298.aif rename to sound/direct_sound_samples/unknown_07.aif diff --git a/sound/direct_sound_samples/87364A8.aif b/sound/direct_sound_samples/unknown_08.aif similarity index 100% rename from sound/direct_sound_samples/87364A8.aif rename to sound/direct_sound_samples/unknown_08.aif diff --git a/sound/direct_sound_samples/87385E4.aif b/sound/direct_sound_samples/unknown_09.aif similarity index 100% rename from sound/direct_sound_samples/87385E4.aif rename to sound/direct_sound_samples/unknown_09.aif diff --git a/sound/direct_sound_samples/873ECD8.aif b/sound/direct_sound_samples/unknown_10.aif similarity index 100% rename from sound/direct_sound_samples/873ECD8.aif rename to sound/direct_sound_samples/unknown_10.aif diff --git a/sound/direct_sound_samples/8740818.aif b/sound/direct_sound_samples/unknown_11.aif similarity index 100% rename from sound/direct_sound_samples/8740818.aif rename to sound/direct_sound_samples/unknown_11.aif diff --git a/sound/direct_sound_samples/87424B0.aif b/sound/direct_sound_samples/unknown_12.aif similarity index 100% rename from sound/direct_sound_samples/87424B0.aif rename to sound/direct_sound_samples/unknown_12.aif diff --git a/sound/direct_sound_samples/87430C0.aif b/sound/direct_sound_samples/unknown_13.aif similarity index 100% rename from sound/direct_sound_samples/87430C0.aif rename to sound/direct_sound_samples/unknown_13.aif diff --git a/sound/direct_sound_samples/8743C50.aif b/sound/direct_sound_samples/unknown_14.aif similarity index 100% rename from sound/direct_sound_samples/8743C50.aif rename to sound/direct_sound_samples/unknown_14.aif diff --git a/sound/direct_sound_samples/87446EC.aif b/sound/direct_sound_samples/unknown_15.aif similarity index 100% rename from sound/direct_sound_samples/87446EC.aif rename to sound/direct_sound_samples/unknown_15.aif diff --git a/sound/direct_sound_samples/8745034.aif b/sound/direct_sound_samples/unknown_16.aif similarity index 100% rename from sound/direct_sound_samples/8745034.aif rename to sound/direct_sound_samples/unknown_16.aif diff --git a/sound/direct_sound_samples/8745A7C.aif b/sound/direct_sound_samples/unknown_17.aif similarity index 100% rename from sound/direct_sound_samples/8745A7C.aif rename to sound/direct_sound_samples/unknown_17.aif diff --git a/sound/direct_sound_samples/88D6978.aif b/sound/direct_sound_samples/unknown_18.aif similarity index 100% rename from sound/direct_sound_samples/88D6978.aif rename to sound/direct_sound_samples/unknown_18.aif diff --git a/sound/programmable_wave_data.inc b/sound/programmable_wave_data.inc index 45da43b001..3e354d88a5 100644 --- a/sound/programmable_wave_data.inc +++ b/sound/programmable_wave_data.inc @@ -1,74 +1,78 @@ -ProgrammableWaveData_86B4830:: - .incbin "sound/programmable_wave_samples/86B4830.pcm" +ProgrammableWaveData_1:: + .incbin "sound/programmable_wave_samples/01.pcm" -ProgrammableWaveData_86B4840:: - .incbin "sound/programmable_wave_samples/86B4840.pcm" +ProgrammableWaveData_2:: + .incbin "sound/programmable_wave_samples/02.pcm" -ProgrammableWaveData_86B4850:: - .incbin "sound/programmable_wave_samples/86B4850.pcm" +ProgrammableWaveData_3:: + .incbin "sound/programmable_wave_samples/03.pcm" -ProgrammableWaveData_86B4860:: - .incbin "sound/programmable_wave_samples/86B4860.pcm" +ProgrammableWaveData_4:: + .incbin "sound/programmable_wave_samples/04.pcm" -ProgrammableWaveData_86B4870:: - .incbin "sound/programmable_wave_samples/86B4870.pcm" +ProgrammableWaveData_5:: + .incbin "sound/programmable_wave_samples/05.pcm" -ProgrammableWaveData_86B4880:: - .incbin "sound/programmable_wave_samples/86B4880.pcm" +ProgrammableWaveData_6:: + .incbin "sound/programmable_wave_samples/06.pcm" -ProgrammableWaveData_86B4890:: - .incbin "sound/programmable_wave_samples/86B4890.pcm" +ProgrammableWaveData_7:: + .incbin "sound/programmable_wave_samples/07.pcm" -ProgrammableWaveData_86B48A0:: - .incbin "sound/programmable_wave_samples/86B48A0.pcm" +ProgrammableWaveData_8:: + .incbin "sound/programmable_wave_samples/08.pcm" -ProgrammableWaveData_86B48B0:: - .incbin "sound/programmable_wave_samples/86B48B0.pcm" +ProgrammableWaveData_9:: + .incbin "sound/programmable_wave_samples/09.pcm" -ProgrammableWaveData_86B48C0:: - .incbin "sound/programmable_wave_samples/86B48C0.pcm" +ProgrammableWaveData_10:: + .incbin "sound/programmable_wave_samples/10.pcm" -ProgrammableWaveData_86B48D0:: - .incbin "sound/programmable_wave_samples/86B48D0.pcm" +ProgrammableWaveData_11:: + .incbin "sound/programmable_wave_samples/11.pcm" -ProgrammableWaveData_86B48E0:: - .incbin "sound/programmable_wave_samples/86B48E0.pcm" +ProgrammableWaveData_12:: + .incbin "sound/programmable_wave_samples/12.pcm" -ProgrammableWaveData_86B48F0:: - .incbin "sound/programmable_wave_samples/86B48F0.pcm" +ProgrammableWaveData_13:: + .incbin "sound/programmable_wave_samples/13.pcm" -ProgrammableWaveData_86B4900:: - .incbin "sound/programmable_wave_samples/86B4900.pcm" +ProgrammableWaveData_14:: + .incbin "sound/programmable_wave_samples/14.pcm" -ProgrammableWaveData_86B4910:: - .incbin "sound/programmable_wave_samples/86B4910.pcm" +ProgrammableWaveData_15:: + .incbin "sound/programmable_wave_samples/15.pcm" -ProgrammableWaveData_86B4920:: - .incbin "sound/programmable_wave_samples/86B4920.pcm" +ProgrammableWaveData_16:: + .incbin "sound/programmable_wave_samples/16.pcm" -ProgrammableWaveData_Unused_86B4930:: - .incbin "sound/programmable_wave_samples/unused_86B4930.pcm" +@ Unused +ProgrammableWaveData_17:: + .incbin "sound/programmable_wave_samples/17.pcm" -ProgrammableWaveData_Unused_86B4940:: - .incbin "sound/programmable_wave_samples/unused_86B4940.pcm" +@ Unused +ProgrammableWaveData_18:: + .incbin "sound/programmable_wave_samples/18.pcm" -ProgrammableWaveData_Unused_86B4950:: - .incbin "sound/programmable_wave_samples/unused_86B4950.pcm" +@ Unused +ProgrammableWaveData_19:: + .incbin "sound/programmable_wave_samples/19.pcm" -ProgrammableWaveData_Unused_86B4960:: - .incbin "sound/programmable_wave_samples/unused_86B4960.pcm" +@ Unused +ProgrammableWaveData_20:: + .incbin "sound/programmable_wave_samples/20.pcm" -ProgrammableWaveData_86B4970:: - .incbin "sound/programmable_wave_samples/86B4970.pcm" +ProgrammableWaveData_21:: + .incbin "sound/programmable_wave_samples/21.pcm" -ProgrammableWaveData_86B4980:: - .incbin "sound/programmable_wave_samples/86B4980.pcm" +ProgrammableWaveData_22:: + .incbin "sound/programmable_wave_samples/22.pcm" -ProgrammableWaveData_86B4990:: - .incbin "sound/programmable_wave_samples/86B4990.pcm" +ProgrammableWaveData_23:: + .incbin "sound/programmable_wave_samples/23.pcm" -ProgrammableWaveData_86B49A0:: - .incbin "sound/programmable_wave_samples/86B49A0.pcm" +ProgrammableWaveData_24:: + .incbin "sound/programmable_wave_samples/24.pcm" -ProgrammableWaveData_86B49B0:: - .incbin "sound/programmable_wave_samples/86B49B0.pcm" +ProgrammableWaveData_25:: + .incbin "sound/programmable_wave_samples/25.pcm" diff --git a/sound/programmable_wave_samples/86B4830.pcm b/sound/programmable_wave_samples/01.pcm similarity index 100% rename from sound/programmable_wave_samples/86B4830.pcm rename to sound/programmable_wave_samples/01.pcm diff --git a/sound/programmable_wave_samples/86B4840.pcm b/sound/programmable_wave_samples/02.pcm similarity index 100% rename from sound/programmable_wave_samples/86B4840.pcm rename to sound/programmable_wave_samples/02.pcm diff --git a/sound/programmable_wave_samples/86B4850.pcm b/sound/programmable_wave_samples/03.pcm similarity index 100% rename from sound/programmable_wave_samples/86B4850.pcm rename to sound/programmable_wave_samples/03.pcm diff --git a/sound/programmable_wave_samples/86B4860.pcm b/sound/programmable_wave_samples/04.pcm similarity index 100% rename from sound/programmable_wave_samples/86B4860.pcm rename to sound/programmable_wave_samples/04.pcm diff --git a/sound/programmable_wave_samples/86B4870.pcm b/sound/programmable_wave_samples/05.pcm similarity index 100% rename from sound/programmable_wave_samples/86B4870.pcm rename to sound/programmable_wave_samples/05.pcm diff --git a/sound/programmable_wave_samples/86B4880.pcm b/sound/programmable_wave_samples/06.pcm similarity index 100% rename from sound/programmable_wave_samples/86B4880.pcm rename to sound/programmable_wave_samples/06.pcm diff --git a/sound/programmable_wave_samples/86B4890.pcm b/sound/programmable_wave_samples/07.pcm similarity index 100% rename from sound/programmable_wave_samples/86B4890.pcm rename to sound/programmable_wave_samples/07.pcm diff --git a/sound/programmable_wave_samples/86B48A0.pcm b/sound/programmable_wave_samples/08.pcm similarity index 100% rename from sound/programmable_wave_samples/86B48A0.pcm rename to sound/programmable_wave_samples/08.pcm diff --git a/sound/programmable_wave_samples/86B48B0.pcm b/sound/programmable_wave_samples/09.pcm similarity index 100% rename from sound/programmable_wave_samples/86B48B0.pcm rename to sound/programmable_wave_samples/09.pcm diff --git a/sound/programmable_wave_samples/86B48C0.pcm b/sound/programmable_wave_samples/10.pcm similarity index 100% rename from sound/programmable_wave_samples/86B48C0.pcm rename to sound/programmable_wave_samples/10.pcm diff --git a/sound/programmable_wave_samples/86B48D0.pcm b/sound/programmable_wave_samples/11.pcm similarity index 100% rename from sound/programmable_wave_samples/86B48D0.pcm rename to sound/programmable_wave_samples/11.pcm diff --git a/sound/programmable_wave_samples/86B48E0.pcm b/sound/programmable_wave_samples/12.pcm similarity index 100% rename from sound/programmable_wave_samples/86B48E0.pcm rename to sound/programmable_wave_samples/12.pcm diff --git a/sound/programmable_wave_samples/86B48F0.pcm b/sound/programmable_wave_samples/13.pcm similarity index 100% rename from sound/programmable_wave_samples/86B48F0.pcm rename to sound/programmable_wave_samples/13.pcm diff --git a/sound/programmable_wave_samples/86B4900.pcm b/sound/programmable_wave_samples/14.pcm similarity index 100% rename from sound/programmable_wave_samples/86B4900.pcm rename to sound/programmable_wave_samples/14.pcm diff --git a/sound/programmable_wave_samples/86B4910.pcm b/sound/programmable_wave_samples/15.pcm similarity index 100% rename from sound/programmable_wave_samples/86B4910.pcm rename to sound/programmable_wave_samples/15.pcm diff --git a/sound/programmable_wave_samples/86B4920.pcm b/sound/programmable_wave_samples/16.pcm similarity index 100% rename from sound/programmable_wave_samples/86B4920.pcm rename to sound/programmable_wave_samples/16.pcm diff --git a/sound/programmable_wave_samples/unused_86B4930.pcm b/sound/programmable_wave_samples/17.pcm similarity index 100% rename from sound/programmable_wave_samples/unused_86B4930.pcm rename to sound/programmable_wave_samples/17.pcm diff --git a/sound/programmable_wave_samples/unused_86B4940.pcm b/sound/programmable_wave_samples/18.pcm similarity index 100% rename from sound/programmable_wave_samples/unused_86B4940.pcm rename to sound/programmable_wave_samples/18.pcm diff --git a/sound/programmable_wave_samples/unused_86B4950.pcm b/sound/programmable_wave_samples/19.pcm similarity index 100% rename from sound/programmable_wave_samples/unused_86B4950.pcm rename to sound/programmable_wave_samples/19.pcm diff --git a/sound/programmable_wave_samples/unused_86B4960.pcm b/sound/programmable_wave_samples/20.pcm similarity index 100% rename from sound/programmable_wave_samples/unused_86B4960.pcm rename to sound/programmable_wave_samples/20.pcm diff --git a/sound/programmable_wave_samples/86B4970.pcm b/sound/programmable_wave_samples/21.pcm similarity index 100% rename from sound/programmable_wave_samples/86B4970.pcm rename to sound/programmable_wave_samples/21.pcm diff --git a/sound/programmable_wave_samples/86B4980.pcm b/sound/programmable_wave_samples/22.pcm similarity index 100% rename from sound/programmable_wave_samples/86B4980.pcm rename to sound/programmable_wave_samples/22.pcm diff --git a/sound/programmable_wave_samples/86B4990.pcm b/sound/programmable_wave_samples/23.pcm similarity index 100% rename from sound/programmable_wave_samples/86B4990.pcm rename to sound/programmable_wave_samples/23.pcm diff --git a/sound/programmable_wave_samples/86B49A0.pcm b/sound/programmable_wave_samples/24.pcm similarity index 100% rename from sound/programmable_wave_samples/86B49A0.pcm rename to sound/programmable_wave_samples/24.pcm diff --git a/sound/programmable_wave_samples/86B49B0.pcm b/sound/programmable_wave_samples/25.pcm similarity index 100% rename from sound/programmable_wave_samples/86B49B0.pcm rename to sound/programmable_wave_samples/25.pcm diff --git a/sound/voicegroups/voicegroup001.inc b/sound/voicegroups/voicegroup001.inc index 9960daf4a9..20a2795dc1 100644 --- a/sound/voicegroups/voicegroup001.inc +++ b/sound/voicegroups/voicegroup001.inc @@ -11,7 +11,7 @@ voicegroup001:: voice_square_1 60, 0, 0, 2, 0, 1, 6, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave 60, 0, ProgrammableWaveData_86B4830, 0, 7, 15, 1 + voice_programmable_wave 60, 0, ProgrammableWaveData_1, 0, 7, 15, 1 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 @@ -19,7 +19,7 @@ voicegroup001:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_2 60, 0, 2, 0, 1, 6, 0 - voice_programmable_wave 60, 0, ProgrammableWaveData_86B4850, 0, 7, 15, 1 + voice_programmable_wave 60, 0, ProgrammableWaveData_3, 0, 7, 15, 1 voice_square_1 60, 0, 0, 2, 0, 1, 6, 0 voice_square_2 60, 0, 3, 0, 1, 6, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 diff --git a/sound/voicegroups/voicegroup010.inc b/sound/voicegroups/voicegroup010.inc index e2b38fcbd2..8d0f7a56dd 100644 --- a/sound/voicegroups/voicegroup010.inc +++ b/sound/voicegroups/voicegroup010.inc @@ -81,7 +81,7 @@ voicegroup010:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_2 60, 0, 3, 0, 1, 7, 1 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4890, 0, 7, 15, 2 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_7, 0, 7, 15, 2 voice_square_1 60, 0, 0, 3, 0, 1, 7, 1 voice_square_1 60, 0, 0, 3, 0, 0, 7, 1 diff --git a/sound/voicegroups/voicegroup011.inc b/sound/voicegroups/voicegroup011.inc index a8655cb8c9..5527cc3698 100644 --- a/sound/voicegroups/voicegroup011.inc +++ b/sound/voicegroups/voicegroup011.inc @@ -74,7 +74,7 @@ voicegroup011:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 127, 231, 127 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4830, 0, 7, 15, 1 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_1, 0, 7, 15, 1 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 diff --git a/sound/voicegroups/voicegroup012.inc b/sound/voicegroups/voicegroup012.inc index d92c270cbb..2fe7cf8180 100644 --- a/sound/voicegroups/voicegroup012.inc +++ b/sound/voicegroups/voicegroup012.inc @@ -87,8 +87,8 @@ voicegroup012:: voice_square_2_alt 60, 0, 2, 0, 1, 4, 1 voice_square_1_alt 60, 0, 0, 2, 0, 1, 4, 1 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4880, 0, 7, 15, 2 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4890, 0, 7, 15, 2 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_6, 0, 7, 15, 2 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_7, 0, 7, 15, 2 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_2 60, 0, 2, 0, 1, 4, 1 voice_square_1 60, 0, 0, 2, 0, 1, 4, 1 diff --git a/sound/voicegroups/voicegroup013.inc b/sound/voicegroups/voicegroup013.inc index f17ad599a0..f99c6f3cdc 100644 --- a/sound/voicegroups/voicegroup013.inc +++ b/sound/voicegroups/voicegroup013.inc @@ -87,7 +87,7 @@ voicegroup013:: voice_square_2_alt 60, 0, 3, 0, 1, 7, 1 voice_square_1_alt 60, 0, 0, 3, 0, 1, 7, 1 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4890, 0, 7, 15, 1 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_7, 0, 7, 15, 1 voice_square_1_alt 60, 0, 0, 1, 0, 0, 7, 1 voice_square_1_alt 60, 0, 0, 3, 0, 0, 7, 1 diff --git a/sound/voicegroups/voicegroup014.inc b/sound/voicegroups/voicegroup014.inc index c3136f2fd2..6ce0897d10 100644 --- a/sound/voicegroups/voicegroup014.inc +++ b/sound/voicegroups/voicegroup014.inc @@ -81,8 +81,8 @@ voicegroup014:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_2_alt 60, 0, 3, 0, 1, 7, 1 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4890, 0, 7, 15, 1 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_7, 0, 7, 15, 1 voice_square_1_alt 60, 0, 0, 3, 0, 1, 7, 1 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4890, 0, 7, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_7, 0, 7, 15, 0 voice_square_1_alt 60, 0, 0, 3, 0, 0, 7, 0 diff --git a/sound/voicegroups/voicegroup015.inc b/sound/voicegroups/voicegroup015.inc index 81e200180e..a528476356 100644 --- a/sound/voicegroups/voicegroup015.inc +++ b/sound/voicegroups/voicegroup015.inc @@ -74,14 +74,14 @@ voicegroup015:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 127, 231, 127 - voice_programmable_wave 60, 0, ProgrammableWaveData_86B4830, 0, 7, 15, 1 + voice_programmable_wave 60, 0, ProgrammableWaveData_1, 0, 7, 15, 1 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4850, 0, 7, 15, 2 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_3, 0, 7, 15, 2 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 diff --git a/sound/voicegroups/voicegroup017.inc b/sound/voicegroups/voicegroup017.inc index f963fb77e8..06738d297b 100644 --- a/sound/voicegroups/voicegroup017.inc +++ b/sound/voicegroups/voicegroup017.inc @@ -74,18 +74,18 @@ voicegroup017:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 127, 231, 127 - voice_programmable_wave 60, 0, ProgrammableWaveData_86B4830, 0, 7, 15, 0 + voice_programmable_wave 60, 0, ProgrammableWaveData_1, 0, 7, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_2_alt 60, 0, 2, 1, 1, 7, 2 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4880, 0, 7, 15, 2 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_6, 0, 7, 15, 2 voice_square_1_alt 60, 0, 0, 2, 1, 1, 7, 2 voice_square_2_alt 60, 0, 3, 1, 1, 7, 2 voice_square_1_alt 60, 0, 0, 3, 1, 1, 7, 2 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4880, 0, 7, 15, 3 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_6, 0, 7, 15, 3 voice_square_1_alt 60, 0, 0, 2, 0, 0, 7, 2 voice_square_1_alt 60, 0, 0, 3, 0, 0, 7, 2 voice_square_2_alt 60, 0, 1, 1, 2, 6, 2 diff --git a/sound/voicegroups/voicegroup018.inc b/sound/voicegroups/voicegroup018.inc index 0364349f04..30b63bb26e 100644 --- a/sound/voicegroups/voicegroup018.inc +++ b/sound/voicegroups/voicegroup018.inc @@ -81,7 +81,7 @@ voicegroup018:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_2_alt 60, 0, 2, 0, 1, 7, 1 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4880, 0, 7, 15, 2 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_6, 0, 7, 15, 2 voice_square_1_alt 60, 0, 0, 2, 0, 1, 7, 1 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 diff --git a/sound/voicegroups/voicegroup019.inc b/sound/voicegroups/voicegroup019.inc index d15be40a14..a983659c39 100644 --- a/sound/voicegroups/voicegroup019.inc +++ b/sound/voicegroups/voicegroup019.inc @@ -81,7 +81,7 @@ voicegroup019:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_2_alt 60, 0, 2, 0, 1, 7, 1 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4870, 0, 7, 15, 2 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_5, 0, 7, 15, 2 voice_square_1_alt 60, 0, 0, 2, 0, 1, 7, 1 voice_square_1_alt 60, 0, 0, 2, 0, 0, 7, 1 voice_square_1_alt 60, 0, 0, 1, 0, 0, 7, 1 diff --git a/sound/voicegroups/voicegroup022.inc b/sound/voicegroups/voicegroup022.inc index 2a1bba75d4..877f57d6ce 100644 --- a/sound/voicegroups/voicegroup022.inc +++ b/sound/voicegroups/voicegroup022.inc @@ -30,11 +30,11 @@ voicegroup022:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_2_alt 60, 0, 0, 0, 1, 7, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4890, 0, 7, 15, 1 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_7, 0, 7, 15, 1 voice_square_1_alt 60, 0, 0, 0, 0, 1, 7, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4890, 0, 7, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4870, 0, 7, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4870, 0, 7, 15, 1 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_7, 0, 7, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_5, 0, 7, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_5, 0, 7, 15, 1 voice_square_1_alt 60, 0, 0, 0, 0, 0, 7, 0 voice_directsound_no_resample 60, 64, DirectSoundWaveData_sc88pro_rnd_kick, 255, 0, 255, 242 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 diff --git a/sound/voicegroups/voicegroup023.inc b/sound/voicegroups/voicegroup023.inc index df0f663a79..eede8dc019 100644 --- a/sound/voicegroups/voicegroup023.inc +++ b/sound/voicegroups/voicegroup023.inc @@ -81,7 +81,7 @@ voicegroup023:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_2_alt 60, 0, 2, 0, 1, 7, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4890, 0, 7, 15, 1 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_7, 0, 7, 15, 1 voice_square_1_alt 60, 0, 0, 2, 0, 1, 7, 0 voice_square_2_alt 60, 0, 2, 0, 1, 6, 1 voice_square_1_alt 60, 0, 0, 2, 0, 1, 6, 1 diff --git a/sound/voicegroups/voicegroup024.inc b/sound/voicegroups/voicegroup024.inc index d4e1397046..3806b462d6 100644 --- a/sound/voicegroups/voicegroup024.inc +++ b/sound/voicegroups/voicegroup024.inc @@ -81,7 +81,7 @@ voicegroup024:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_2_alt 60, 0, 2, 0, 1, 7, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4890, 0, 7, 15, 1 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_7, 0, 7, 15, 1 voice_square_1_alt 60, 0, 0, 2, 0, 1, 7, 0 voice_square_2_alt 60, 0, 2, 0, 2, 0, 0 voice_square_2_alt 60, 0, 3, 0, 1, 7, 0 @@ -89,6 +89,6 @@ voicegroup024:: voice_square_1_alt 60, 0, 0, 2, 0, 2, 0, 0 voice_square_1_alt 60, 0, 0, 3, 0, 0, 7, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4890, 0, 7, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4890, 0, 7, 15, 1 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_7, 0, 7, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_7, 0, 7, 15, 1 diff --git a/sound/voicegroups/voicegroup025.inc b/sound/voicegroups/voicegroup025.inc index 1be1beea6b..3449629469 100644 --- a/sound/voicegroups/voicegroup025.inc +++ b/sound/voicegroups/voicegroup025.inc @@ -81,7 +81,7 @@ voicegroup025:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_2_alt 60, 0, 1, 0, 1, 7, 1 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4830, 0, 7, 15, 1 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_1, 0, 7, 15, 1 voice_square_1_alt 60, 0, 0, 1, 0, 1, 7, 1 voice_square_2_alt 60, 0, 2, 0, 1, 0, 0 diff --git a/sound/voicegroups/voicegroup026.inc b/sound/voicegroups/voicegroup026.inc index 5012411663..d18047d582 100644 --- a/sound/voicegroups/voicegroup026.inc +++ b/sound/voicegroups/voicegroup026.inc @@ -81,7 +81,7 @@ voicegroup026:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_2_alt 60, 0, 2, 0, 1, 9, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4890, 0, 7, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_7, 0, 7, 15, 0 voice_square_1_alt 60, 0, 0, 2, 0, 1, 9, 0 voice_square_2_alt 60, 0, 3, 0, 1, 7, 0 voice_square_1_alt 60, 0, 0, 3, 0, 1, 7, 0 diff --git a/sound/voicegroups/voicegroup027.inc b/sound/voicegroups/voicegroup027.inc index ef84f846ec..517ee87d43 100644 --- a/sound/voicegroups/voicegroup027.inc +++ b/sound/voicegroups/voicegroup027.inc @@ -73,7 +73,7 @@ voicegroup027:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave 60, 0, ProgrammableWaveData_86B4830, 0, 7, 15, 0 + voice_programmable_wave 60, 0, ProgrammableWaveData_1, 0, 7, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 @@ -81,7 +81,7 @@ voicegroup027:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4880, 0, 7, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_6, 0, 7, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 diff --git a/sound/voicegroups/voicegroup028.inc b/sound/voicegroups/voicegroup028.inc index 6d1071850d..9af19f1879 100644 --- a/sound/voicegroups/voicegroup028.inc +++ b/sound/voicegroups/voicegroup028.inc @@ -81,6 +81,6 @@ voicegroup028:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_2 60, 0, 2, 0, 2, 0, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4880, 0, 7, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_6, 0, 7, 15, 0 voice_square_2 60, 0, 3, 0, 4, 0, 0 diff --git a/sound/voicegroups/voicegroup029.inc b/sound/voicegroups/voicegroup029.inc index e65818f90f..7c801afcb3 100644 --- a/sound/voicegroups/voicegroup029.inc +++ b/sound/voicegroups/voicegroup029.inc @@ -81,7 +81,7 @@ voicegroup029:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_2_alt 60, 0, 3, 0, 1, 7, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4890, 0, 7, 15, 1 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_7, 0, 7, 15, 1 voice_square_1_alt 60, 0, 0, 3, 0, 1, 7, 0 voice_square_2_alt 60, 0, 3, 0, 1, 0, 0 voice_square_1_alt 60, 0, 0, 3, 0, 1, 0, 0 diff --git a/sound/voicegroups/voicegroup031.inc b/sound/voicegroups/voicegroup031.inc index a24251c78c..178d7ec63d 100644 --- a/sound/voicegroups/voicegroup031.inc +++ b/sound/voicegroups/voicegroup031.inc @@ -26,7 +26,7 @@ voicegroup031:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4850, 0, 7, 15, 1 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_3, 0, 7, 15, 1 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 diff --git a/sound/voicegroups/voicegroup032.inc b/sound/voicegroups/voicegroup032.inc index f50eb844ba..dc60bbdf3b 100644 --- a/sound/voicegroups/voicegroup032.inc +++ b/sound/voicegroups/voicegroup032.inc @@ -74,14 +74,14 @@ voicegroup032:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 127, 231, 127 - voice_programmable_wave 60, 0, ProgrammableWaveData_86B4830, 0, 7, 15, 1 + voice_programmable_wave 60, 0, ProgrammableWaveData_1, 0, 7, 15, 1 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4880, 0, 7, 15, 2 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_6, 0, 7, 15, 2 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 diff --git a/sound/voicegroups/voicegroup034.inc b/sound/voicegroups/voicegroup034.inc index 6dc04e97a6..fe973b84c3 100644 --- a/sound/voicegroups/voicegroup034.inc +++ b/sound/voicegroups/voicegroup034.inc @@ -83,5 +83,5 @@ voicegroup034:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave 60, 0, ProgrammableWaveData_86B4920, 0, 7, 15, 2 + voice_programmable_wave 60, 0, ProgrammableWaveData_16, 0, 7, 15, 2 diff --git a/sound/voicegroups/voicegroup035.inc b/sound/voicegroups/voicegroup035.inc index 359a43a8c9..2c3ac4bddd 100644 --- a/sound/voicegroups/voicegroup035.inc +++ b/sound/voicegroups/voicegroup035.inc @@ -81,8 +81,8 @@ voicegroup035:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_2_alt 60, 0, 3, 0, 1, 6, 1 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4890, 0, 7, 15, 2 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_7, 0, 7, 15, 2 voice_square_1_alt 60, 0, 0, 3, 0, 1, 6, 1 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4890, 0, 7, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_7, 0, 7, 15, 0 voice_square_1_alt 60, 0, 0, 3, 0, 0, 6, 1 diff --git a/sound/voicegroups/voicegroup036.inc b/sound/voicegroups/voicegroup036.inc index b3ef9cfbc7..c3d2df146c 100644 --- a/sound/voicegroups/voicegroup036.inc +++ b/sound/voicegroups/voicegroup036.inc @@ -73,7 +73,7 @@ voicegroup036:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave 60, 0, ProgrammableWaveData_86B4830, 0, 7, 15, 0 + voice_programmable_wave 60, 0, ProgrammableWaveData_1, 0, 7, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 diff --git a/sound/voicegroups/voicegroup037.inc b/sound/voicegroups/voicegroup037.inc index d05a4c6e24..057891c01b 100644 --- a/sound/voicegroups/voicegroup037.inc +++ b/sound/voicegroups/voicegroup037.inc @@ -81,12 +81,12 @@ voicegroup037:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_2_alt 60, 0, 0, 0, 1, 7, 1 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4850, 0, 7, 15, 2 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_3, 0, 7, 15, 2 voice_square_1_alt 60, 0, 0, 0, 0, 1, 7, 1 voice_square_1_alt 60, 0, 0, 0, 0, 0, 7, 1 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4890, 0, 7, 15, 2 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_7, 0, 7, 15, 2 diff --git a/sound/voicegroups/voicegroup038.inc b/sound/voicegroups/voicegroup038.inc index 61ecc67460..bcb211d6f5 100644 --- a/sound/voicegroups/voicegroup038.inc +++ b/sound/voicegroups/voicegroup038.inc @@ -81,5 +81,5 @@ voicegroup038:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4850, 0, 7, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_3, 0, 7, 15, 0 diff --git a/sound/voicegroups/voicegroup039.inc b/sound/voicegroups/voicegroup039.inc index 887f238dc8..9e8d16df0b 100644 --- a/sound/voicegroups/voicegroup039.inc +++ b/sound/voicegroups/voicegroup039.inc @@ -83,7 +83,7 @@ voicegroup039:: voice_square_1_alt 60, 0, 0, 2, 0, 2, 4, 0 voice_square_2_alt 60, 0, 1, 0, 2, 4, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4880, 0, 7, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_6, 0, 7, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 diff --git a/sound/voicegroups/voicegroup040.inc b/sound/voicegroups/voicegroup040.inc index 4e523072a7..f390cb3d85 100644 --- a/sound/voicegroups/voicegroup040.inc +++ b/sound/voicegroups/voicegroup040.inc @@ -83,7 +83,7 @@ voicegroup040:: voice_square_1_alt 60, 0, 0, 2, 0, 2, 4, 0 voice_square_2_alt 60, 0, 1, 0, 2, 4, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4880, 0, 7, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_6, 0, 7, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 diff --git a/sound/voicegroups/voicegroup041.inc b/sound/voicegroups/voicegroup041.inc index 101a6ddb7b..def4e46b00 100644 --- a/sound/voicegroups/voicegroup041.inc +++ b/sound/voicegroups/voicegroup041.inc @@ -83,7 +83,7 @@ voicegroup041:: voice_square_1_alt 60, 0, 0, 2, 0, 2, 4, 0 voice_square_2_alt 60, 0, 1, 0, 2, 4, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4880, 0, 7, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_6, 0, 7, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 diff --git a/sound/voicegroups/voicegroup042.inc b/sound/voicegroups/voicegroup042.inc index 55fa84d60d..1298ddbd52 100644 --- a/sound/voicegroups/voicegroup042.inc +++ b/sound/voicegroups/voicegroup042.inc @@ -83,7 +83,7 @@ voicegroup042:: voice_square_1_alt 60, 0, 0, 2, 0, 2, 4, 0 voice_square_2_alt 60, 0, 1, 0, 2, 4, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4880, 0, 7, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_6, 0, 7, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 diff --git a/sound/voicegroups/voicegroup044.inc b/sound/voicegroups/voicegroup044.inc index 838f58fbde..9a057754b3 100644 --- a/sound/voicegroups/voicegroup044.inc +++ b/sound/voicegroups/voicegroup044.inc @@ -80,5 +80,5 @@ voicegroup044:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4880, 0, 7, 15, 1 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_6, 0, 7, 15, 1 diff --git a/sound/voicegroups/voicegroup045.inc b/sound/voicegroups/voicegroup045.inc index 9647f7e457..2e2016e439 100644 --- a/sound/voicegroups/voicegroup045.inc +++ b/sound/voicegroups/voicegroup045.inc @@ -4,10 +4,10 @@ voicegroup045:: voice_square_1_alt 60, 0, 0, 1, 0, 2, 0, 1 voice_square_1_alt 60, 0, 0, 3, 1, 2, 6, 0 voice_square_2_alt 60, 0, 3, 1, 2, 6, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4830, 0, 7, 15, 1 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_1, 0, 7, 15, 1 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_2_alt 60, 0, 1, 0, 2, 0, 1 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4860, 1, 7, 15, 1 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_4, 1, 7, 15, 1 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_keysplit voicegroup005, KeySplitTable1 diff --git a/sound/voicegroups/voicegroup046.inc b/sound/voicegroups/voicegroup046.inc index e8165dcc6e..f653241e35 100644 --- a/sound/voicegroups/voicegroup046.inc +++ b/sound/voicegroups/voicegroup046.inc @@ -1,10 +1,10 @@ .align 2 voicegroup046:: voice_keysplit voicegroup005, KeySplitTable1 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4900, 0, 1, 12, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_14, 0, 1, 12, 0 voice_square_1_alt 60, 0, 0, 0, 1, 1, 9, 0 voice_square_2_alt 60, 0, 2, 0, 2, 6, 3 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4850, 0, 7, 15, 1 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_3, 0, 7, 15, 1 voice_directsound 60, 0, DirectSoundWaveData_sc88pro_fretless_bass, 255, 253, 0, 216 voice_square_2_alt 60, 0, 1, 0, 2, 6, 3 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 diff --git a/sound/voicegroups/voicegroup047.inc b/sound/voicegroups/voicegroup047.inc index 80faa09c3c..84fa9335a8 100644 --- a/sound/voicegroups/voicegroup047.inc +++ b/sound/voicegroups/voicegroup047.inc @@ -81,9 +81,9 @@ voicegroup047:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_2_alt 60, 0, 2, 0, 1, 6, 2 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4920, 0, 7, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_16, 0, 7, 15, 0 voice_square_2_alt 60, 0, 3, 0, 1, 4, 1 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4850, 1, 7, 15, 2 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_3, 1, 7, 15, 2 voice_square_2_alt 60, 0, 1, 1, 1, 4, 1 voice_square_1_alt 60, 0, 0, 1, 1, 2, 4, 1 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 diff --git a/sound/voicegroups/voicegroup048.inc b/sound/voicegroups/voicegroup048.inc index c81ebf39ff..eeb5b682a3 100644 --- a/sound/voicegroups/voicegroup048.inc +++ b/sound/voicegroups/voicegroup048.inc @@ -73,7 +73,7 @@ voicegroup048:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4840, 0, 7, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_2, 0, 7, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 @@ -84,7 +84,7 @@ voicegroup048:: voice_square_1_alt 60, 0, 0, 3, 0, 3, 6, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1_alt 60, 0, 0, 0, 0, 3, 3, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4880, 0, 7, 12, 1 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_6, 0, 7, 12, 1 voice_square_2_alt 60, 0, 1, 0, 1, 4, 3 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_2_alt 60, 0, 0, 0, 2, 4, 0 diff --git a/sound/voicegroups/voicegroup049.inc b/sound/voicegroups/voicegroup049.inc index 4ece4cb76a..b6b0774cf3 100644 --- a/sound/voicegroups/voicegroup049.inc +++ b/sound/voicegroups/voicegroup049.inc @@ -83,7 +83,7 @@ voicegroup049:: voice_square_1_alt 60, 0, 0, 2, 0, 2, 4, 1 voice_square_2_alt 60, 0, 1, 1, 3, 4, 2 voice_square_1_alt 60, 0, 0, 3, 0, 1, 4, 1 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4880, 1, 7, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_6, 1, 7, 15, 0 voice_square_2_alt 60, 0, 2, 0, 2, 4, 2 voice_square_2_alt 60, 0, 1, 1, 3, 4, 2 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 diff --git a/sound/voicegroups/voicegroup050.inc b/sound/voicegroups/voicegroup050.inc index 6f401b9593..6b45664eb0 100644 --- a/sound/voicegroups/voicegroup050.inc +++ b/sound/voicegroups/voicegroup050.inc @@ -83,7 +83,7 @@ voicegroup050:: voice_square_2_alt 60, 0, 3, 0, 1, 4, 1 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4880, 0, 7, 15, 1 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_6, 0, 7, 15, 1 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 diff --git a/sound/voicegroups/voicegroup052.inc b/sound/voicegroups/voicegroup052.inc index ce6c19e3a0..438e2d5f17 100644 --- a/sound/voicegroups/voicegroup052.inc +++ b/sound/voicegroups/voicegroup052.inc @@ -29,7 +29,7 @@ voicegroup052:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4860, 0, 7, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_4, 0, 7, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 @@ -82,9 +82,9 @@ voicegroup052:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_2_alt 60, 0, 1, 0, 1, 6, 1 voice_square_1_alt 60, 0, 0, 0, 0, 1, 7, 1 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4850, 0, 7, 15, 1 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_3, 0, 7, 15, 1 voice_square_2_alt 60, 0, 0, 0, 1, 4, 2 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4890, 0, 7, 15, 1 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_7, 0, 7, 15, 1 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1_alt 60, 0, 0, 1, 0, 7, 6, 1 diff --git a/sound/voicegroups/voicegroup053.inc b/sound/voicegroups/voicegroup053.inc index f9c21afe3a..e5f1a4d7e8 100644 --- a/sound/voicegroups/voicegroup053.inc +++ b/sound/voicegroups/voicegroup053.inc @@ -83,7 +83,7 @@ voicegroup053:: voice_square_2_alt 60, 0, 2, 0, 1, 4, 2 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1_alt 60, 0, 0, 3, 0, 1, 4, 1 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4830, 0, 7, 12, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_1, 0, 7, 12, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 diff --git a/sound/voicegroups/voicegroup054.inc b/sound/voicegroups/voicegroup054.inc index 4cd90843c4..ddd17ed995 100644 --- a/sound/voicegroups/voicegroup054.inc +++ b/sound/voicegroups/voicegroup054.inc @@ -82,7 +82,7 @@ voicegroup054:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_2_alt 60, 0, 2, 0, 1, 5, 2 voice_square_1_alt 60, 0, 0, 3, 0, 1, 4, 1 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4830, 0, 7, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_1, 0, 7, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 diff --git a/sound/voicegroups/voicegroup055.inc b/sound/voicegroups/voicegroup055.inc index aa9f7d1139..9157030e83 100644 --- a/sound/voicegroups/voicegroup055.inc +++ b/sound/voicegroups/voicegroup055.inc @@ -82,8 +82,8 @@ voicegroup055:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_2_alt 60, 0, 2, 0, 1, 4, 1 voice_square_1_alt 60, 0, 0, 3, 0, 1, 6, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4880, 0, 7, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4860, 0, 7, 15, 2 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_6, 0, 7, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_4, 0, 7, 15, 2 voice_square_2_alt 60, 0, 1, 1, 1, 4, 1 voice_square_1_alt 60, 0, 0, 1, 0, 1, 4, 2 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 diff --git a/sound/voicegroups/voicegroup056.inc b/sound/voicegroups/voicegroup056.inc index 42f7791001..ec543b9b33 100644 --- a/sound/voicegroups/voicegroup056.inc +++ b/sound/voicegroups/voicegroup056.inc @@ -87,7 +87,7 @@ voicegroup056:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4880, 0, 7, 15, 1 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_6, 0, 7, 15, 1 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 diff --git a/sound/voicegroups/voicegroup057.inc b/sound/voicegroups/voicegroup057.inc index 6bd58e87eb..391b7cf8bc 100644 --- a/sound/voicegroups/voicegroup057.inc +++ b/sound/voicegroups/voicegroup057.inc @@ -82,7 +82,7 @@ voicegroup057:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1_alt 60, 0, 0, 2, 0, 1, 4, 1 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4830, 1, 4, 10, 1 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_1, 1, 4, 10, 1 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 diff --git a/sound/voicegroups/voicegroup058.inc b/sound/voicegroups/voicegroup058.inc index af043d943e..56dff5f5bb 100644 --- a/sound/voicegroups/voicegroup058.inc +++ b/sound/voicegroups/voicegroup058.inc @@ -75,7 +75,7 @@ voicegroup058:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4840, 0, 7, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_2, 0, 7, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 diff --git a/sound/voicegroups/voicegroup059.inc b/sound/voicegroups/voicegroup059.inc index f0c4d3415d..5a45d437d3 100644 --- a/sound/voicegroups/voicegroup059.inc +++ b/sound/voicegroups/voicegroup059.inc @@ -5,8 +5,8 @@ voicegroup059:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_2_alt 60, 0, 1, 1, 1, 6, 2 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4830, 0, 7, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4870, 0, 7, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_1, 0, 7, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_5, 0, 7, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_directsound 60, 0, DirectSoundWaveData_sc88pro_glockenspiel, 255, 165, 51, 242 @@ -82,11 +82,11 @@ voicegroup059:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1_alt 60, 0, 0, 2, 0, 1, 6, 2 voice_square_2_alt 60, 0, 2, 0, 1, 6, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4840, 0, 7, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_2, 0, 7, 15, 0 voice_square_1_alt 60, 0, 0, 1, 0, 1, 4, 1 voice_square_1_alt 60, 0, 0, 1, 1, 2, 4, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4880, 0, 7, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_6, 0, 7, 15, 0 voice_square_2_alt 60, 0, 3, 0, 1, 6, 2 diff --git a/sound/voicegroups/voicegroup061.inc b/sound/voicegroups/voicegroup061.inc index af46400940..d73730ecbc 100644 --- a/sound/voicegroups/voicegroup061.inc +++ b/sound/voicegroups/voicegroup061.inc @@ -83,8 +83,8 @@ voicegroup061:: voice_square_1_alt 60, 0, 0, 2, 0, 1, 4, 1 voice_square_2_alt 60, 0, 2, 0, 1, 4, 1 voice_square_2_alt 60, 0, 0, 0, 1, 4, 1 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4840, 0, 7, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4880, 0, 7, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_2, 0, 7, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_6, 0, 7, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 diff --git a/sound/voicegroups/voicegroup062.inc b/sound/voicegroups/voicegroup062.inc index d3745820e9..ad2e6cad7f 100644 --- a/sound/voicegroups/voicegroup062.inc +++ b/sound/voicegroups/voicegroup062.inc @@ -29,7 +29,7 @@ voicegroup062:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4910, 0, 7, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_15, 0, 7, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 diff --git a/sound/voicegroups/voicegroup063.inc b/sound/voicegroups/voicegroup063.inc index bd316ea2c5..966ae20809 100644 --- a/sound/voicegroups/voicegroup063.inc +++ b/sound/voicegroups/voicegroup063.inc @@ -83,8 +83,8 @@ voicegroup063:: voice_square_1_alt 60, 0, 0, 1, 0, 1, 4, 1 voice_square_2_alt 60, 0, 1, 0, 1, 4, 1 voice_square_2_alt 60, 0, 0, 0, 1, 4, 1 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4840, 0, 7, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4880, 0, 7, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_2, 0, 7, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_6, 0, 7, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 diff --git a/sound/voicegroups/voicegroup064.inc b/sound/voicegroups/voicegroup064.inc index e617f0ffd2..fa56af03ea 100644 --- a/sound/voicegroups/voicegroup064.inc +++ b/sound/voicegroups/voicegroup064.inc @@ -82,7 +82,7 @@ voicegroup064:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1_alt 60, 0, 0, 0, 0, 1, 4, 1 voice_square_2_alt 60, 0, 0, 0, 1, 4, 1 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4830, 0, 7, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_1, 0, 7, 15, 0 voice_square_2_alt 60, 0, 3, 0, 1, 4, 1 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 diff --git a/sound/voicegroups/voicegroup065.inc b/sound/voicegroups/voicegroup065.inc index d435a0a306..163bce0c7e 100644 --- a/sound/voicegroups/voicegroup065.inc +++ b/sound/voicegroups/voicegroup065.inc @@ -83,11 +83,11 @@ voicegroup065:: voice_square_1_alt 60, 0, 0, 1, 0, 1, 4, 1 voice_square_2_alt 60, 0, 1, 0, 1, 4, 1 voice_square_2_alt 60, 0, 0, 0, 1, 4, 1 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4850, 0, 7, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4880, 0, 7, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_3, 0, 7, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_6, 0, 7, 15, 0 voice_square_1_alt 60, 0, 0, 2, 0, 1, 4, 1 voice_square_2_alt 60, 0, 2, 0, 1, 4, 1 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4920, 0, 7, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_16, 0, 7, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 diff --git a/sound/voicegroups/voicegroup066.inc b/sound/voicegroups/voicegroup066.inc index d5bffde63e..af4a7f8410 100644 --- a/sound/voicegroups/voicegroup066.inc +++ b/sound/voicegroups/voicegroup066.inc @@ -82,7 +82,7 @@ voicegroup066:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 1, 0, 1, 4, 1 voice_square_2_alt 60, 0, 1, 0, 1, 4, 1 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4880, 0, 7, 15, 3 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_6, 0, 7, 15, 3 voice_square_2_alt 60, 0, 3, 0, 1, 4, 1 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 diff --git a/sound/voicegroups/voicegroup067.inc b/sound/voicegroups/voicegroup067.inc index dffd21a706..ed8ccef4f8 100644 --- a/sound/voicegroups/voicegroup067.inc +++ b/sound/voicegroups/voicegroup067.inc @@ -83,8 +83,8 @@ voicegroup067:: voice_square_1_alt 60, 0, 0, 1, 0, 1, 4, 1 voice_square_2_alt 60, 0, 1, 0, 1, 4, 1 voice_square_2_alt 60, 0, 0, 0, 1, 4, 1 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4840, 0, 7, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4880, 0, 7, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_2, 0, 7, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_6, 0, 7, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 diff --git a/sound/voicegroups/voicegroup068.inc b/sound/voicegroups/voicegroup068.inc index fc3f7246d8..787ce997b7 100644 --- a/sound/voicegroups/voicegroup068.inc +++ b/sound/voicegroups/voicegroup068.inc @@ -83,8 +83,8 @@ voicegroup068:: voice_square_1 60, 0, 0, 2, 0, 2, 3, 1 voice_square_2_alt 60, 0, 2, 0, 2, 3, 1 voice_square_2_alt 60, 0, 0, 0, 1, 4, 1 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4840, 0, 7, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4880, 0, 7, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_2, 0, 7, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_6, 0, 7, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 diff --git a/sound/voicegroups/voicegroup069.inc b/sound/voicegroups/voicegroup069.inc index 477fd538b4..26ea294051 100644 --- a/sound/voicegroups/voicegroup069.inc +++ b/sound/voicegroups/voicegroup069.inc @@ -83,7 +83,7 @@ voicegroup069:: voice_square_1_alt 60, 0, 0, 0, 0, 1, 4, 1 voice_square_2_alt 60, 0, 0, 0, 1, 4, 1 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4890, 0, 7, 15, 3 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_7, 0, 7, 15, 3 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 diff --git a/sound/voicegroups/voicegroup070.inc b/sound/voicegroups/voicegroup070.inc index aaa4078028..59a43180df 100644 --- a/sound/voicegroups/voicegroup070.inc +++ b/sound/voicegroups/voicegroup070.inc @@ -83,7 +83,7 @@ voicegroup070:: voice_square_1_alt 60, 0, 0, 0, 0, 1, 4, 1 voice_square_2_alt 60, 0, 2, 0, 1, 4, 1 voice_square_2_alt 60, 0, 0, 0, 1, 4, 1 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4840, 0, 7, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_2, 0, 7, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 diff --git a/sound/voicegroups/voicegroup071.inc b/sound/voicegroups/voicegroup071.inc index c6c7414e3f..a4cb9c721f 100644 --- a/sound/voicegroups/voicegroup071.inc +++ b/sound/voicegroups/voicegroup071.inc @@ -83,7 +83,7 @@ voicegroup071:: voice_square_1_alt 60, 0, 0, 0, 0, 1, 4, 1 voice_square_2_alt 60, 0, 0, 0, 1, 4, 1 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4880, 0, 7, 15, 2 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_6, 0, 7, 15, 2 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 diff --git a/sound/voicegroups/voicegroup072.inc b/sound/voicegroups/voicegroup072.inc index 7c040a3e77..50fa4e4cfa 100644 --- a/sound/voicegroups/voicegroup072.inc +++ b/sound/voicegroups/voicegroup072.inc @@ -82,8 +82,8 @@ voicegroup072:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1_alt 60, 0, 0, 2, 0, 1, 4, 1 voice_square_2_alt 60, 0, 2, 0, 1, 4, 1 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4880, 0, 7, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4840, 0, 7, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_6, 0, 7, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_2, 0, 7, 15, 0 voice_square_2_alt 60, 0, 0, 0, 1, 4, 0 voice_square_1_alt 60, 0, 0, 0, 0, 1, 4, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 diff --git a/sound/voicegroups/voicegroup073.inc b/sound/voicegroups/voicegroup073.inc index 9692cc87db..b10ab81d1a 100644 --- a/sound/voicegroups/voicegroup073.inc +++ b/sound/voicegroups/voicegroup073.inc @@ -82,7 +82,7 @@ voicegroup073:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1_alt 60, 0, 0, 2, 0, 2, 4, 1 voice_square_2_alt 60, 0, 2, 0, 2, 4, 1 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4880, 0, 7, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_6, 0, 7, 15, 0 voice_square_2_alt 60, 0, 0, 0, 1, 4, 0 voice_square_1_alt 60, 0, 0, 0, 0, 1, 4, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 diff --git a/sound/voicegroups/voicegroup074.inc b/sound/voicegroups/voicegroup074.inc index 5be06711b5..1c3c67f8dc 100644 --- a/sound/voicegroups/voicegroup074.inc +++ b/sound/voicegroups/voicegroup074.inc @@ -82,12 +82,12 @@ voicegroup074:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1_alt 60, 0, 0, 2, 0, 1, 4, 0 voice_square_2_alt 60, 0, 2, 0, 1, 4, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4840, 0, 7, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_2, 0, 7, 15, 0 voice_square_2_alt 60, 0, 0, 0, 1, 4, 1 voice_square_1_alt 60, 0, 0, 1, 0, 1, 4, 1 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4880, 0, 7, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_6, 0, 7, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 diff --git a/sound/voicegroups/voicegroup075.inc b/sound/voicegroups/voicegroup075.inc index 72b144a13a..86af71af4b 100644 --- a/sound/voicegroups/voicegroup075.inc +++ b/sound/voicegroups/voicegroup075.inc @@ -82,10 +82,10 @@ voicegroup075:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1_alt 60, 0, 0, 1, 0, 2, 3, 1 voice_square_2_alt 60, 0, 2, 0, 1, 4, 1 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4880, 0, 7, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4890, 0, 7, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_6, 0, 7, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_7, 0, 7, 15, 0 voice_square_2_alt 60, 0, 1, 0, 1, 4, 1 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4840, 0, 7, 15, 1 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_2, 0, 7, 15, 1 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1_alt 60, 0, 0, 0, 0, 2, 3, 1 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 diff --git a/sound/voicegroups/voicegroup076.inc b/sound/voicegroups/voicegroup076.inc index a4eadcef3f..378a8ff669 100644 --- a/sound/voicegroups/voicegroup076.inc +++ b/sound/voicegroups/voicegroup076.inc @@ -82,8 +82,8 @@ voicegroup076:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1_alt 60, 0, 0, 1, 0, 1, 4, 1 voice_square_2_alt 60, 0, 1, 0, 1, 4, 1 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4880, 0, 7, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4910, 0, 7, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_6, 0, 7, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_15, 0, 7, 15, 0 voice_square_1_alt 60, 0, 0, 0, 0, 1, 4, 1 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 diff --git a/sound/voicegroups/voicegroup077.inc b/sound/voicegroups/voicegroup077.inc index 08f0e5e389..994d9f411d 100644 --- a/sound/voicegroups/voicegroup077.inc +++ b/sound/voicegroups/voicegroup077.inc @@ -82,7 +82,7 @@ voicegroup077:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1_alt 60, 0, 0, 1, 0, 1, 4, 1 voice_square_2_alt 60, 0, 1, 0, 1, 4, 1 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4840, 0, 7, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_2, 0, 7, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 diff --git a/sound/voicegroups/voicegroup078.inc b/sound/voicegroups/voicegroup078.inc index b6dba9dca1..e3ef10feb7 100644 --- a/sound/voicegroups/voicegroup078.inc +++ b/sound/voicegroups/voicegroup078.inc @@ -82,7 +82,7 @@ voicegroup078:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1_alt 60, 0, 0, 1, 0, 1, 4, 1 voice_square_2_alt 60, 0, 1, 0, 1, 4, 1 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4830, 0, 7, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_1, 0, 7, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 diff --git a/sound/voicegroups/voicegroup079.inc b/sound/voicegroups/voicegroup079.inc index ecea4eca18..42b51faea4 100644 --- a/sound/voicegroups/voicegroup079.inc +++ b/sound/voicegroups/voicegroup079.inc @@ -39,7 +39,7 @@ voicegroup079:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4870, 0, 7, 6, 2 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_5, 0, 7, 6, 2 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 @@ -82,9 +82,9 @@ voicegroup079:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1_alt 60, 0, 0, 3, 0, 2, 4, 1 voice_square_2_alt 60, 0, 3, 0, 1, 6, 2 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4890, 0, 7, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_7, 0, 7, 15, 0 voice_square_1_alt 60, 0, 0, 2, 0, 2, 6, 5 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4830, 0, 7, 4, 4 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_1, 0, 7, 4, 4 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_2_alt 60, 0, 2, 0, 1, 6, 2 diff --git a/sound/voicegroups/voicegroup080.inc b/sound/voicegroups/voicegroup080.inc index a6827083c6..6d627ad92e 100644 --- a/sound/voicegroups/voicegroup080.inc +++ b/sound/voicegroups/voicegroup080.inc @@ -82,7 +82,7 @@ voicegroup080:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1_alt 60, 0, 0, 1, 0, 1, 4, 1 voice_square_2_alt 60, 0, 1, 0, 1, 4, 1 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4830, 0, 7, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_1, 0, 7, 15, 0 voice_square_2_alt 60, 0, 3, 0, 1, 4, 1 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 diff --git a/sound/voicegroups/voicegroup082.inc b/sound/voicegroups/voicegroup082.inc index 9aa1d7c5b4..b6b5506f1a 100644 --- a/sound/voicegroups/voicegroup082.inc +++ b/sound/voicegroups/voicegroup082.inc @@ -82,8 +82,8 @@ voicegroup082:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1_alt 60, 0, 0, 3, 0, 2, 4, 1 voice_square_2_alt 60, 0, 3, 0, 1, 6, 2 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4880, 0, 7, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4830, 0, 7, 4, 4 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_6, 0, 7, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_1, 0, 7, 4, 4 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 diff --git a/sound/voicegroups/voicegroup083.inc b/sound/voicegroups/voicegroup083.inc index 09cee33e15..4f2fcd809f 100644 --- a/sound/voicegroups/voicegroup083.inc +++ b/sound/voicegroups/voicegroup083.inc @@ -82,6 +82,6 @@ voicegroup083:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1_alt 60, 0, 0, 2, 0, 1, 4, 1 voice_square_2_alt 60, 0, 2, 0, 1, 4, 2 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4830, 0, 7, 6, 4 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4830, 0, 2, 6, 1 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_1, 0, 7, 6, 4 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_1, 0, 2, 6, 1 diff --git a/sound/voicegroups/voicegroup084.inc b/sound/voicegroups/voicegroup084.inc index ee994d84d3..510b37c23a 100644 --- a/sound/voicegroups/voicegroup084.inc +++ b/sound/voicegroups/voicegroup084.inc @@ -87,7 +87,7 @@ voicegroup084:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4880, 0, 7, 15, 1 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_6, 0, 7, 15, 1 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 diff --git a/sound/voicegroups/voicegroup085.inc b/sound/voicegroups/voicegroup085.inc index bd2cc348f0..6260fb198a 100644 --- a/sound/voicegroups/voicegroup085.inc +++ b/sound/voicegroups/voicegroup085.inc @@ -83,8 +83,8 @@ voicegroup085:: voice_square_1_alt 60, 0, 0, 2, 1, 2, 4, 0 voice_square_2_alt 60, 0, 1, 0, 2, 4, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4830, 0, 7, 15, 1 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4880, 0, 7, 13, 1 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_1, 0, 7, 15, 1 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_6, 0, 7, 13, 1 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 diff --git a/sound/voicegroups/voicegroup086.inc b/sound/voicegroups/voicegroup086.inc index 482a7729e3..d5298f9b03 100644 --- a/sound/voicegroups/voicegroup086.inc +++ b/sound/voicegroups/voicegroup086.inc @@ -83,7 +83,7 @@ voicegroup086:: voice_square_1_alt 60, 0, 0, 2, 0, 2, 4, 0 voice_square_2_alt 60, 0, 1, 0, 2, 4, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4880, 0, 7, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_6, 0, 7, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 diff --git a/sound/voicegroups/voicegroup087.inc b/sound/voicegroups/voicegroup087.inc index d9295b3fe7..1ccb69ea55 100644 --- a/sound/voicegroups/voicegroup087.inc +++ b/sound/voicegroups/voicegroup087.inc @@ -29,7 +29,7 @@ voicegroup087:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4910, 0, 7, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_15, 0, 7, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 @@ -83,7 +83,7 @@ voicegroup087:: voice_square_1_alt 60, 0, 0, 0, 0, 1, 4, 1 voice_square_2_alt 60, 0, 0, 0, 1, 4, 1 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4920, 0, 7, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_16, 0, 7, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 diff --git a/sound/voicegroups/voicegroup088.inc b/sound/voicegroups/voicegroup088.inc index 82afd10f63..8f6f216884 100644 --- a/sound/voicegroups/voicegroup088.inc +++ b/sound/voicegroups/voicegroup088.inc @@ -6,7 +6,7 @@ voicegroup088:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_2_alt 60, 0, 1, 1, 1, 6, 2 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4870, 0, 7, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_5, 0, 7, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 @@ -82,12 +82,12 @@ voicegroup088:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1_alt 60, 0, 0, 1, 0, 1, 6, 2 voice_square_2_alt 60, 0, 1, 0, 2, 4, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4840, 0, 7, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_2, 0, 7, 15, 0 voice_square_1_alt 60, 0, 0, 1, 0, 1, 4, 1 voice_square_1_alt 60, 0, 0, 1, 1, 1, 6, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4890, 0, 7, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_7, 0, 7, 15, 0 voice_square_2_alt 60, 0, 3, 0, 1, 6, 2 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 diff --git a/sound/voicegroups/voicegroup089.inc b/sound/voicegroups/voicegroup089.inc index 7d71119ba3..4b5e7d57bd 100644 --- a/sound/voicegroups/voicegroup089.inc +++ b/sound/voicegroups/voicegroup089.inc @@ -82,9 +82,9 @@ voicegroup089:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1_alt 60, 0, 0, 1, 0, 2, 4, 3 voice_square_2_alt 60, 0, 2, 0, 2, 4, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4870, 0, 7, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4920, 0, 7, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4830, 0, 7, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_5, 0, 7, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_16, 0, 7, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_1, 0, 7, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 diff --git a/sound/voicegroups/voicegroup090.inc b/sound/voicegroups/voicegroup090.inc index f66d09b65c..4039ad8d14 100644 --- a/sound/voicegroups/voicegroup090.inc +++ b/sound/voicegroups/voicegroup090.inc @@ -82,7 +82,7 @@ voicegroup090:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1_alt 60, 0, 0, 0, 0, 2, 4, 1 voice_square_2_alt 60, 0, 0, 0, 2, 4, 1 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4880, 0, 7, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_6, 0, 7, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 diff --git a/sound/voicegroups/voicegroup091.inc b/sound/voicegroups/voicegroup091.inc index df866235ed..28a64ab488 100644 --- a/sound/voicegroups/voicegroup091.inc +++ b/sound/voicegroups/voicegroup091.inc @@ -82,8 +82,8 @@ voicegroup091:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1_alt 60, 0, 0, 2, 0, 1, 5, 2 voice_square_2_alt 60, 0, 2, 0, 1, 5, 2 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4890, 0, 7, 7, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4830, 0, 2, 6, 1 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_7, 0, 7, 7, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_1, 0, 2, 6, 1 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 diff --git a/sound/voicegroups/voicegroup092.inc b/sound/voicegroups/voicegroup092.inc index 9b91a44aa2..90e2858175 100644 --- a/sound/voicegroups/voicegroup092.inc +++ b/sound/voicegroups/voicegroup092.inc @@ -82,7 +82,7 @@ voicegroup092:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1_alt 60, 0, 0, 2, 0, 1, 4, 1 voice_square_2_alt 60, 0, 2, 0, 1, 4, 2 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4830, 0, 7, 7, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_1, 0, 7, 7, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 diff --git a/sound/voicegroups/voicegroup093.inc b/sound/voicegroups/voicegroup093.inc index 44149b083c..8cea357335 100644 --- a/sound/voicegroups/voicegroup093.inc +++ b/sound/voicegroups/voicegroup093.inc @@ -82,7 +82,7 @@ voicegroup093:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1_alt 60, 0, 0, 1, 0, 1, 4, 1 voice_square_2_alt 60, 0, 1, 0, 1, 4, 1 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4890, 0, 7, 7, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_7, 0, 7, 7, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 diff --git a/sound/voicegroups/voicegroup094.inc b/sound/voicegroups/voicegroup094.inc index 21cab6cd2a..b52e958926 100644 --- a/sound/voicegroups/voicegroup094.inc +++ b/sound/voicegroups/voicegroup094.inc @@ -82,7 +82,7 @@ voicegroup094:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1_alt 60, 0, 0, 0, 0, 1, 4, 1 voice_square_2_alt 60, 0, 0, 0, 1, 4, 1 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4880, 0, 7, 7, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_6, 0, 7, 7, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 diff --git a/sound/voicegroups/voicegroup095.inc b/sound/voicegroups/voicegroup095.inc index 0c791dc9eb..96b531f8ed 100644 --- a/sound/voicegroups/voicegroup095.inc +++ b/sound/voicegroups/voicegroup095.inc @@ -82,7 +82,7 @@ voicegroup095:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1_alt 60, 0, 0, 1, 0, 1, 4, 1 voice_square_2_alt 60, 0, 1, 0, 1, 4, 1 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4880, 0, 7, 15, 3 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_6, 0, 7, 15, 3 voice_square_2_alt 60, 0, 3, 0, 1, 4, 1 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 diff --git a/sound/voicegroups/voicegroup096.inc b/sound/voicegroups/voicegroup096.inc index 8fe0892e69..b0cb653caf 100644 --- a/sound/voicegroups/voicegroup096.inc +++ b/sound/voicegroups/voicegroup096.inc @@ -84,7 +84,7 @@ voicegroup096:: voice_square_2_alt 60, 0, 0, 0, 1, 4, 1 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1_alt 60, 0, 0, 0, 0, 1, 4, 1 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4910, 0, 7, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_15, 0, 7, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 diff --git a/sound/voicegroups/voicegroup097.inc b/sound/voicegroups/voicegroup097.inc index e184093479..fb0542dac6 100644 --- a/sound/voicegroups/voicegroup097.inc +++ b/sound/voicegroups/voicegroup097.inc @@ -82,7 +82,7 @@ voicegroup097:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1_alt 60, 0, 0, 3, 0, 1, 4, 1 voice_square_2_alt 60, 0, 3, 0, 1, 4, 1 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4870, 0, 7, 7, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_5, 0, 7, 7, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 diff --git a/sound/voicegroups/voicegroup098.inc b/sound/voicegroups/voicegroup098.inc index 001bd5222a..3a927368bc 100644 --- a/sound/voicegroups/voicegroup098.inc +++ b/sound/voicegroups/voicegroup098.inc @@ -82,7 +82,7 @@ voicegroup098:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1_alt 60, 0, 0, 0, 0, 1, 4, 0 voice_square_2_alt 60, 0, 0, 0, 1, 4, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4870, 0, 7, 7, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_5, 0, 7, 7, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 @@ -125,7 +125,7 @@ voicegroup098:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_873ECD8, 255, 255, 255, 127 + voice_directsound 60, 0, DirectSoundWaveData_unknown_10, 255, 255, 255, 127 voice_directsound 60, 0, DirectSoundWaveData_sc88pro_tr909_hand_clap, 255, 255, 255, 127 voice_noise_alt 60, 0, 0, 0, 1, 0, 0 diff --git a/sound/voicegroups/voicegroup099.inc b/sound/voicegroups/voicegroup099.inc index f4031beebb..e750f95831 100644 --- a/sound/voicegroups/voicegroup099.inc +++ b/sound/voicegroups/voicegroup099.inc @@ -82,7 +82,7 @@ voicegroup099:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1_alt 60, 0, 0, 0, 0, 1, 4, 0 voice_square_2_alt 60, 0, 0, 0, 1, 4, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4870, 0, 7, 7, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_5, 0, 7, 7, 0 voice_square_1_alt 60, 0, 0, 1, 2, 1, 5, 0 voice_square_2_alt 60, 0, 1, 2, 1, 5, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 diff --git a/sound/voicegroups/voicegroup100.inc b/sound/voicegroups/voicegroup100.inc index fa936e9590..577d05c354 100644 --- a/sound/voicegroups/voicegroup100.inc +++ b/sound/voicegroups/voicegroup100.inc @@ -29,7 +29,7 @@ voicegroup100:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4910, 0, 7, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_15, 0, 7, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 @@ -85,7 +85,7 @@ voicegroup100:: voice_square_2_alt 60, 0, 2, 1, 1, 4, 1 voice_square_2_alt 60, 0, 1, 0, 1, 4, 1 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4830, 0, 7, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_1, 0, 7, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 diff --git a/sound/voicegroups/voicegroup101.inc b/sound/voicegroups/voicegroup101.inc index 5527ec7964..768c18dea2 100644 --- a/sound/voicegroups/voicegroup101.inc +++ b/sound/voicegroups/voicegroup101.inc @@ -6,7 +6,7 @@ voicegroup101:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1_alt 60, 0, 0, 1, 1, 5, 2, 4 voice_square_2_alt 60, 0, 1, 1, 5, 2, 4 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4830, 0, 7, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_1, 0, 7, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 @@ -74,7 +74,7 @@ voicegroup101:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 0, 255, 165 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4880, 0, 7, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_6, 0, 7, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 @@ -82,12 +82,12 @@ voicegroup101:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_2_alt 60, 0, 1, 1, 1, 6, 0 voice_square_1_alt 60, 0, 0, 0, 0, 4, 6, 2 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4840, 0, 7, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_2, 0, 7, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1_alt 60, 0, 0, 0, 0, 1, 6, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_2_alt 60, 0, 1, 1, 4, 6, 1 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4880, 0, 7, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_6, 0, 7, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 diff --git a/sound/voicegroups/voicegroup103.inc b/sound/voicegroups/voicegroup103.inc index e60c3c1aae..cc743edb22 100644 --- a/sound/voicegroups/voicegroup103.inc +++ b/sound/voicegroups/voicegroup103.inc @@ -83,8 +83,8 @@ voicegroup103:: voice_square_1_alt 60, 0, 0, 1, 1, 1, 6, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4880, 0, 7, 15, 1 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4840, 0, 7, 15, 1 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_6, 0, 7, 15, 1 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_2, 0, 7, 15, 1 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_2_alt 60, 0, 1, 0, 0, 10, 1 @@ -92,7 +92,7 @@ voicegroup103:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4830, 0, 7, 15, 1 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_1, 0, 7, 15, 1 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 diff --git a/sound/voicegroups/voicegroup104.inc b/sound/voicegroups/voicegroup104.inc index 9ca1a88484..c1b623918b 100644 --- a/sound/voicegroups/voicegroup104.inc +++ b/sound/voicegroups/voicegroup104.inc @@ -83,8 +83,8 @@ voicegroup104:: voice_square_1_alt 60, 0, 0, 1, 2, 0, 12, 5 voice_square_2_alt 60, 0, 0, 0, 0, 10, 4 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4880, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4840, 0, 7, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_6, 0, 0, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_2, 0, 7, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_2_alt 60, 0, 1, 2, 0, 12, 5 @@ -92,7 +92,7 @@ voicegroup104:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4830, 0, 0, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_1, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 diff --git a/sound/voicegroups/voicegroup105.inc b/sound/voicegroups/voicegroup105.inc index c3bfdec9aa..a1a1bc2d61 100644 --- a/sound/voicegroups/voicegroup105.inc +++ b/sound/voicegroups/voicegroup105.inc @@ -82,5 +82,5 @@ voicegroup105:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1_alt 60, 0, 0, 2, 0, 2, 9, 4 voice_square_2_alt 60, 0, 2, 0, 2, 9, 4 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4830, 0, 7, 15, 1 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_1, 0, 7, 15, 1 diff --git a/sound/voicegroups/voicegroup106.inc b/sound/voicegroups/voicegroup106.inc index 834b9a8a26..1a1125be8a 100644 --- a/sound/voicegroups/voicegroup106.inc +++ b/sound/voicegroups/voicegroup106.inc @@ -6,7 +6,7 @@ voicegroup106:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4830, 0, 7, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_1, 0, 7, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 @@ -74,7 +74,7 @@ voicegroup106:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 0, 255, 165 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4880, 0, 7, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_6, 0, 7, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 @@ -84,10 +84,10 @@ voicegroup106:: voice_square_2_alt 60, 0, 2, 0, 1, 4, 1 voice_square_2_alt 60, 0, 0, 0, 1, 4, 1 voice_square_1_alt 60, 0, 0, 0, 0, 1, 4, 1 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4850, 0, 7, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_3, 0, 7, 15, 0 voice_square_1_alt 60, 0, 0, 3, 0, 1, 4, 1 voice_square_2_alt 60, 0, 3, 0, 1, 4, 1 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4870, 0, 7, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_5, 0, 7, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 diff --git a/sound/voicegroups/voicegroup107.inc b/sound/voicegroups/voicegroup107.inc index e2945809e6..c43a518ec7 100644 --- a/sound/voicegroups/voicegroup107.inc +++ b/sound/voicegroups/voicegroup107.inc @@ -6,7 +6,7 @@ voicegroup107:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4830, 0, 7, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_1, 0, 7, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 @@ -74,7 +74,7 @@ voicegroup107:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4880, 0, 7, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_6, 0, 7, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 @@ -84,10 +84,10 @@ voicegroup107:: voice_square_2_alt 60, 0, 2, 0, 1, 4, 1 voice_square_2_alt 60, 0, 0, 0, 1, 4, 1 voice_square_1_alt 60, 0, 0, 0, 0, 1, 4, 1 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4850, 0, 7, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_3, 0, 7, 15, 0 voice_square_1_alt 60, 0, 0, 3, 0, 1, 4, 1 voice_square_2_alt 60, 0, 3, 0, 1, 4, 1 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4870, 0, 7, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_5, 0, 7, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 diff --git a/sound/voicegroups/voicegroup108.inc b/sound/voicegroups/voicegroup108.inc index b539070109..a92ee43c6a 100644 --- a/sound/voicegroups/voicegroup108.inc +++ b/sound/voicegroups/voicegroup108.inc @@ -84,15 +84,15 @@ voicegroup108:: voice_square_2_alt 60, 0, 0, 0, 0, 9, 2 voice_square_2_alt 60, 0, 1, 0, 0, 7, 1 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4860, 0, 7, 15, 1 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_4, 0, 7, 15, 1 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4840, 0, 0, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4830, 0, 7, 15, 1 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_1, 0, 7, 15, 1 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 diff --git a/sound/voicegroups/voicegroup109.inc b/sound/voicegroups/voicegroup109.inc index 52942e9ecf..a999143737 100644 --- a/sound/voicegroups/voicegroup109.inc +++ b/sound/voicegroups/voicegroup109.inc @@ -82,5 +82,5 @@ voicegroup109:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1_alt 60, 0, 0, 0, 0, 0, 13, 1 voice_square_2_alt 60, 0, 0, 0, 0, 12, 1 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4920, 0, 7, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_16, 0, 7, 15, 0 diff --git a/sound/voicegroups/voicegroup110.inc b/sound/voicegroups/voicegroup110.inc index a13facb2cf..25b6fdaae0 100644 --- a/sound/voicegroups/voicegroup110.inc +++ b/sound/voicegroups/voicegroup110.inc @@ -83,8 +83,8 @@ voicegroup110:: voice_square_1_alt 60, 0, 0, 1, 1, 1, 6, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4880, 0, 7, 15, 1 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4840, 0, 7, 15, 1 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_6, 0, 7, 15, 1 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_2, 0, 7, 15, 1 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_2_alt 60, 0, 3, 0, 0, 10, 1 @@ -92,7 +92,7 @@ voicegroup110:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4830, 0, 7, 15, 1 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_1, 0, 7, 15, 1 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 diff --git a/sound/voicegroups/voicegroup111.inc b/sound/voicegroups/voicegroup111.inc index 546ed3a465..27b418f462 100644 --- a/sound/voicegroups/voicegroup111.inc +++ b/sound/voicegroups/voicegroup111.inc @@ -83,8 +83,8 @@ voicegroup111:: voice_square_1_alt 60, 0, 0, 1, 0, 1, 7, 1 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4880, 0, 7, 15, 1 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4910, 0, 7, 15, 1 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_6, 0, 7, 15, 1 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_15, 0, 7, 15, 1 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_2_alt 60, 0, 3, 0, 1, 7, 1 @@ -92,7 +92,7 @@ voicegroup111:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4830, 0, 7, 15, 1 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_1, 0, 7, 15, 1 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 diff --git a/sound/voicegroups/voicegroup112.inc b/sound/voicegroups/voicegroup112.inc index ad1c4a1b7d..9cb2f415a9 100644 --- a/sound/voicegroups/voicegroup112.inc +++ b/sound/voicegroups/voicegroup112.inc @@ -4,7 +4,7 @@ voicegroup112:: voice_keysplit voicegroup005, KeySplitTable1 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4970, 0, 7, 15, 1 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_21, 0, 7, 15, 1 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 diff --git a/sound/voicegroups/voicegroup113.inc b/sound/voicegroups/voicegroup113.inc index cfe06aa97b..0fa279c8a6 100644 --- a/sound/voicegroups/voicegroup113.inc +++ b/sound/voicegroups/voicegroup113.inc @@ -1,16 +1,16 @@ .align 2 voicegroup113:: voice_keysplit_all voicegroup002 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4990, 0, 7, 15, 1 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B49B0, 0, 7, 15, 1 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B49A0, 0, 7, 15, 1 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4970, 0, 7, 15, 1 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4980, 0, 7, 15, 1 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B48B0, 0, 7, 15, 1 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B48C0, 0, 7, 15, 1 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B48D0, 0, 7, 15, 1 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B48E0, 0, 7, 15, 1 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B48F0, 0, 7, 15, 1 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_23, 0, 7, 15, 1 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_25, 0, 7, 15, 1 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_24, 0, 7, 15, 1 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_21, 0, 7, 15, 1 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_22, 0, 7, 15, 1 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_9, 0, 7, 15, 1 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_10, 0, 7, 15, 1 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_11, 0, 7, 15, 1 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_12, 0, 7, 15, 1 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_13, 0, 7, 15, 1 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_directsound 60, 0, DirectSoundWaveData_sc88pro_xylophone, 255, 235, 0, 204 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 @@ -39,7 +39,7 @@ voicegroup113:: voice_directsound 60, 0, DirectSoundWaveData_sc88pro_slap_bass, 255, 235, 128, 99 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_directsound 60, 0, DirectSoundWaveData_sc88pro_synth_bass, 255, 252, 0, 115 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4920, 0, 7, 15, 1 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_16, 0, 7, 15, 1 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 @@ -87,7 +87,7 @@ voicegroup113:: voice_square_2_alt 60, 0, 3, 0, 7, 7, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4910, 0, 7, 15, 1 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_15, 0, 7, 15, 1 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 diff --git a/sound/voicegroups/voicegroup115.inc b/sound/voicegroups/voicegroup115.inc index afdfebaf7b..eb4f52b878 100644 --- a/sound/voicegroups/voicegroup115.inc +++ b/sound/voicegroups/voicegroup115.inc @@ -87,9 +87,9 @@ voicegroup115:: voice_square_2_alt 60, 0, 0, 0, 2, 6, 5 voice_square_1_alt 60, 0, 0, 0, 0, 1, 6, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4970, 0, 7, 15, 1 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4830, 0, 7, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4910, 0, 1, 9, 2 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_21, 0, 7, 15, 1 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_1, 0, 7, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_15, 0, 1, 9, 2 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_2_alt 60, 0, 2, 0, 2, 6, 3 diff --git a/sound/voicegroups/voicegroup116.inc b/sound/voicegroups/voicegroup116.inc index c5b16797ae..a86a87f5d1 100644 --- a/sound/voicegroups/voicegroup116.inc +++ b/sound/voicegroups/voicegroup116.inc @@ -82,12 +82,12 @@ voicegroup116:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1_alt 60, 0, 0, 1, 0, 2, 7, 2 voice_square_2_alt 60, 0, 3, 0, 3, 3, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4970, 0, 3, 6, 5 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_21, 0, 3, 6, 5 voice_square_1_alt 60, 0, 0, 0, 0, 2, 7, 2 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4970, 0, 7, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_21, 0, 7, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4880, 0, 7, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_6, 0, 7, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 diff --git a/sound/voicegroups/voicegroup117.inc b/sound/voicegroups/voicegroup117.inc index da6a16d7af..3a86ec4f58 100644 --- a/sound/voicegroups/voicegroup117.inc +++ b/sound/voicegroups/voicegroup117.inc @@ -81,5 +81,5 @@ voicegroup117:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_2 60, 0, 3, 0, 1, 7, 1 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4850, 0, 7, 15, 2 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_3, 0, 7, 15, 2 diff --git a/sound/voicegroups/voicegroup118.inc b/sound/voicegroups/voicegroup118.inc index 129831d75e..89e66b21d2 100644 --- a/sound/voicegroups/voicegroup118.inc +++ b/sound/voicegroups/voicegroup118.inc @@ -81,10 +81,10 @@ voicegroup118:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_2 60, 0, 2, 0, 1, 7, 1 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4850, 0, 7, 15, 2 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_3, 0, 7, 15, 2 voice_square_1 60, 0, 0, 2, 0, 1, 7, 1 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4880, 0, 7, 15, 2 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_6, 0, 7, 15, 2 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 diff --git a/sound/voicegroups/voicegroup119.inc b/sound/voicegroups/voicegroup119.inc index 063ed24b96..8b7fe24c79 100644 --- a/sound/voicegroups/voicegroup119.inc +++ b/sound/voicegroups/voicegroup119.inc @@ -81,7 +81,7 @@ voicegroup119:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_2 60, 0, 2, 0, 1, 7, 1 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4870, 0, 7, 15, 2 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_5, 0, 7, 15, 2 voice_square_1 60, 0, 0, 2, 0, 1, 7, 1 voice_square_2 60, 0, 1, 0, 1, 9, 1 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 @@ -90,5 +90,5 @@ voicegroup119:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4890, 0, 7, 15, 2 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_7, 0, 7, 15, 2 diff --git a/sound/voicegroups/voicegroup120.inc b/sound/voicegroups/voicegroup120.inc index f80380fc48..2c104fb10b 100644 --- a/sound/voicegroups/voicegroup120.inc +++ b/sound/voicegroups/voicegroup120.inc @@ -81,7 +81,7 @@ voicegroup120:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_2 60, 0, 2, 0, 1, 7, 1 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4850, 0, 7, 15, 2 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_3, 0, 7, 15, 2 voice_square_1 60, 0, 0, 2, 0, 1, 7, 1 voice_square_1 60, 0, 0, 2, 0, 0, 7, 1 voice_square_2 60, 0, 3, 0, 1, 7, 1 @@ -90,5 +90,5 @@ voicegroup120:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4890, 0, 7, 15, 2 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_7, 0, 7, 15, 2 diff --git a/sound/voicegroups/voicegroup121.inc b/sound/voicegroups/voicegroup121.inc index 2c9e9fa3e6..f09ddd7741 100644 --- a/sound/voicegroups/voicegroup121.inc +++ b/sound/voicegroups/voicegroup121.inc @@ -81,7 +81,7 @@ voicegroup121:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_2 60, 0, 2, 0, 1, 7, 1 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4890, 0, 7, 15, 2 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_7, 0, 7, 15, 2 voice_square_1 60, 0, 0, 2, 0, 1, 7, 1 voice_square_2 60, 0, 0, 0, 1, 7, 1 voice_square_1 60, 0, 0, 0, 0, 1, 7, 1 diff --git a/sound/voicegroups/voicegroup122.inc b/sound/voicegroups/voicegroup122.inc index ca64a7c009..65356a3d17 100644 --- a/sound/voicegroups/voicegroup122.inc +++ b/sound/voicegroups/voicegroup122.inc @@ -81,7 +81,7 @@ voicegroup122:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4850, 0, 7, 15, 2 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_3, 0, 7, 15, 2 voice_square_1 60, 0, 0, 3, 0, 1, 9, 1 voice_square_1 60, 0, 0, 3, 0, 0, 9, 1 diff --git a/sound/voicegroups/voicegroup124.inc b/sound/voicegroups/voicegroup124.inc index 6f5d263b3d..274d76dcd1 100644 --- a/sound/voicegroups/voicegroup124.inc +++ b/sound/voicegroups/voicegroup124.inc @@ -81,7 +81,7 @@ voicegroup124:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_2 60, 0, 3, 0, 1, 7, 1 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4850, 0, 7, 15, 2 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_3, 0, 7, 15, 2 voice_square_1 60, 0, 0, 3, 0, 1, 7, 1 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_2 60, 0, 2, 0, 1, 7, 1 diff --git a/sound/voicegroups/voicegroup125.inc b/sound/voicegroups/voicegroup125.inc index afe16b0b0f..644002abf7 100644 --- a/sound/voicegroups/voicegroup125.inc +++ b/sound/voicegroups/voicegroup125.inc @@ -81,7 +81,7 @@ voicegroup125:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_2 60, 0, 3, 0, 1, 7, 1 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4850, 0, 7, 15, 2 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_3, 0, 7, 15, 2 voice_square_1 60, 0, 0, 3, 0, 1, 7, 1 voice_square_1 60, 0, 0, 3, 0, 0, 7, 1 diff --git a/sound/voicegroups/voicegroup126.inc b/sound/voicegroups/voicegroup126.inc index a2e663cf12..51959b4f1e 100644 --- a/sound/voicegroups/voicegroup126.inc +++ b/sound/voicegroups/voicegroup126.inc @@ -81,7 +81,7 @@ voicegroup126:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_2 60, 0, 3, 1, 1, 6, 1 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4850, 0, 7, 15, 2 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_3, 0, 7, 15, 2 voice_square_1 60, 0, 0, 3, 1, 1, 6, 1 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 diff --git a/sound/voicegroups/voicegroup128.inc b/sound/voicegroups/voicegroup128.inc index ce4904626a..69b52d29d6 100644 --- a/sound/voicegroups/voicegroup128.inc +++ b/sound/voicegroups/voicegroup128.inc @@ -8,17 +8,17 @@ voicegroup128:: voice_noise_alt 60, 0, 1, 0, 1, 0, 1 voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 0, 255, 165 voice_square_1_alt 60, 0, 0, 2, 0, 2, 0, 1 - voice_directsound 60, 0, DirectSoundWaveData_8725A2C, 255, 0, 255, 165 + voice_directsound 60, 0, DirectSoundWaveData_unknown_1, 255, 0, 255, 165 voice_directsound 60, 0, DirectSoundWaveData_sc88pro_pizzicato_strings, 255, 0, 255, 127 - voice_directsound 60, 0, DirectSoundWaveData_872762C, 255, 0, 255, 127 + voice_directsound 60, 0, DirectSoundWaveData_unknown_2, 255, 0, 255, 127 voice_noise_alt 60, 0, 1, 0, 2, 0, 0 voice_square_1 60, 0, 103, 3, 2, 7, 0, 0 voice_square_2 60, 0, 3, 2, 7, 0, 0 voice_directsound 60, 0, DirectSoundWaveData_sc88pro_square_wave, 255, 226, 0, 127 - voice_directsound 60, 0, DirectSoundWaveData_872921C, 255, 0, 255, 0 + voice_directsound 60, 0, DirectSoundWaveData_unknown_3, 255, 0, 255, 0 voice_directsound 60, 0, DirectSoundWaveData_sc88pro_square_wave, 255, 204, 0, 127 voice_square_1_alt 60, 0, 0, 2, 0, 2, 0, 1 - voice_directsound 60, 0, DirectSoundWaveData_872A5D0, 255, 0, 255, 127 + voice_directsound 60, 0, DirectSoundWaveData_unknown_4, 255, 0, 255, 127 voice_directsound 60, 0, DirectSoundWaveData_sc88pro_square_wave, 255, 0, 255, 127 voice_square_1 60, 0, 103, 0, 0, 7, 0, 0 voice_directsound 60, 0, DirectSoundWaveData_sc88pro_orchestra_snare, 255, 0, 255, 127 @@ -26,22 +26,22 @@ voicegroup128:: voice_directsound 60, 0, DirectSoundWaveData_sc88pro_bubbles, 255, 0, 255, 127 voice_directsound 60, 0, DirectSoundWaveData_sc88pro_rnd_snare, 255, 0, 255, 127 voice_noise_alt 60, 0, 0, 0, 7, 15, 1 - voice_directsound 60, 0, DirectSoundWaveData_872EEA8, 255, 0, 255, 127 + voice_directsound 60, 0, DirectSoundWaveData_unknown_5, 255, 0, 255, 127 voice_noise_alt 60, 0, 1, 0, 7, 15, 1 voice_directsound 60, 0, DirectSoundWaveData_sc88pro_glockenspiel, 255, 246, 0, 127 - voice_directsound 60, 0, DirectSoundWaveData_87301B0, 255, 0, 255, 127 + voice_directsound 60, 0, DirectSoundWaveData_unknown_6, 255, 0, 255, 127 voice_square_1_alt 60, 0, 19, 2, 0, 2, 0, 0 voice_directsound 60, 0, DirectSoundWaveData_trinity_30303_mega_bass, 255, 0, 255, 127 voice_square_1 60, 0, 103, 0, 0, 0, 15, 0 - voice_directsound_alt 60, 0, DirectSoundWaveData_87301B0, 255, 0, 255, 127 + voice_directsound_alt 60, 0, DirectSoundWaveData_unknown_6, 255, 0, 255, 127 voice_directsound 60, 0, DirectSoundWaveData_sc88pro_fretless_bass, 255, 255, 255, 127 voice_directsound 60, 0, DirectSoundWaveData_sc88pro_synth_bass, 255, 0, 255, 127 - voice_directsound 60, 0, DirectSoundWaveData_8734298, 255, 0, 255, 127 + voice_directsound 60, 0, DirectSoundWaveData_unknown_7, 255, 0, 255, 127 voice_directsound 60, 0, DirectSoundWaveData_trinity_30303_mega_bass, 255, 242, 0, 0 - voice_directsound 60, 0, DirectSoundWaveData_87364A8, 255, 0, 255, 0 + voice_directsound 60, 0, DirectSoundWaveData_unknown_8, 255, 0, 255, 0 voice_directsound 60, 0, DirectSoundWaveData_sc88pro_tubular_bell, 255, 165, 90, 216 voice_directsound 60, 0, DirectSoundWaveData_unknown_close_hihat, 255, 127, 0, 188 - voice_directsound 60, 0, DirectSoundWaveData_87385E4, 255, 249, 0, 165 + voice_directsound 60, 0, DirectSoundWaveData_unknown_9, 255, 249, 0, 165 voice_square_1 60, 0, 0, 0, 4, 6, 0, 0 voice_directsound 60, 0, DirectSoundWaveData_sc88pro_glockenspiel, 13, 0, 255, 127 voice_directsound 60, 0, DirectSoundWaveData_sc88pro_tubular_bell, 13, 0, 255, 127 @@ -60,10 +60,10 @@ voicegroup128:: voice_noise_alt 60, 0, 0, 1, 6, 0, 0 voice_directsound 60, 0, DirectSoundWaveData_sc88pro_slap_bass, 255, 255, 255, 127 voice_directsound 60, 0, DirectSoundWaveData_sc88pro_tr909_hand_clap, 255, 255, 255, 127 - voice_directsound 60, 0, DirectSoundWaveData_873ECD8, 255, 255, 255, 127 + voice_directsound 60, 0, DirectSoundWaveData_unknown_10, 255, 255, 255, 127 voice_directsound 60, 0, DirectSoundWaveData_sc88pro_french_horn_72, 11, 242, 0, 127 voice_square_1_alt 60, 0, 0, 2, 4, 6, 0, 0 - voice_directsound 60, 0, DirectSoundWaveData_8740818, 255, 255, 255, 127 + voice_directsound 60, 0, DirectSoundWaveData_unknown_11, 255, 255, 255, 127 voice_directsound 60, 0, DirectSoundWaveData_sc88pro_accordion, 255, 0, 255, 165 voice_directsound 60, 0, DirectSoundWaveData_unused_sc55_tom, 255, 0, 255, 165 voice_noise_alt 60, 0, 0, 5, 7, 15, 1 @@ -122,10 +122,10 @@ voicegroup128:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_87424B0, 255, 0, 255, 165 - voice_directsound 60, 0, DirectSoundWaveData_87430C0, 255, 0, 255, 165 - voice_directsound 60, 0, DirectSoundWaveData_8743C50, 255, 0, 255, 165 - voice_directsound 60, 0, DirectSoundWaveData_87446EC, 255, 0, 255, 165 - voice_directsound 60, 0, DirectSoundWaveData_8745034, 255, 0, 255, 165 - voice_directsound 60, 0, DirectSoundWaveData_8745A7C, 255, 0, 255, 165 + voice_directsound 60, 0, DirectSoundWaveData_unknown_12, 255, 0, 255, 165 + voice_directsound 60, 0, DirectSoundWaveData_unknown_13, 255, 0, 255, 165 + voice_directsound 60, 0, DirectSoundWaveData_unknown_14, 255, 0, 255, 165 + voice_directsound 60, 0, DirectSoundWaveData_unknown_15, 255, 0, 255, 165 + voice_directsound 60, 0, DirectSoundWaveData_unknown_16, 255, 0, 255, 165 + voice_directsound 60, 0, DirectSoundWaveData_unknown_17, 255, 0, 255, 165 diff --git a/sound/voicegroups/voicegroup129.inc b/sound/voicegroups/voicegroup129.inc index ad94d1f704..8e136bdf48 100644 --- a/sound/voicegroups/voicegroup129.inc +++ b/sound/voicegroups/voicegroup129.inc @@ -5,11 +5,11 @@ voicegroup129:: voice_directsound 60, 0, DirectSoundWaveData_sc88pro_open_low_conga, 255, 0, 255, 0 voice_directsound 60, 0, DirectSoundWaveData_sc88pro_tr909_hand_clap, 255, 226, 25, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_8725A2C, 255, 0, 255, 165 + voice_directsound 60, 0, DirectSoundWaveData_unknown_1, 255, 0, 255, 165 voice_directsound 60, 0, DirectSoundWaveData_dance_drums_ride_bell, 255, 165, 103, 231 voice_directsound 60, 0, DirectSoundWaveData_sd90_open_triangle, 255, 204, 128, 249 voice_directsound 60, 0, DirectSoundWaveData_register_noise, 255, 0, 255, 76 - voice_directsound 60, 0, DirectSoundWaveData_88D6978, 255, 0, 206, 204 + voice_directsound 60, 0, DirectSoundWaveData_unknown_18, 255, 0, 206, 204 voice_directsound 60, 0, DirectSoundWaveData_ethnic_flavours_ohtsuzumi, 255, 0, 206, 38 voice_directsound 60, 0, DirectSoundWaveData_ethnic_flavours_hyoushigi, 255, 0, 206, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 diff --git a/sound/voicegroups/voicegroup130.inc b/sound/voicegroups/voicegroup130.inc index 6f06938aae..7044bb38e4 100644 --- a/sound/voicegroups/voicegroup130.inc +++ b/sound/voicegroups/voicegroup130.inc @@ -1,56 +1,56 @@ .align 2 voicegroup130:: - voice_directsound 60, 0, DirectSoundWaveData_88DBBC0, 255, 0, 255, 0 - voice_directsound 60, 0, DirectSoundWaveData_88DC220, 255, 0, 255, 0 - voice_directsound 60, 0, DirectSoundWaveData_88DC704, 255, 0, 255, 0 - voice_directsound 60, 0, DirectSoundWaveData_88DD054, 255, 0, 255, 0 - voice_directsound 60, 0, DirectSoundWaveData_88DDAC4, 255, 0, 255, 0 - voice_directsound 60, 0, DirectSoundWaveData_88DDDE4, 255, 0, 255, 0 - voice_directsound 60, 0, DirectSoundWaveData_88DEA6C, 255, 0, 255, 0 - voice_directsound 60, 0, DirectSoundWaveData_88DF08C, 255, 0, 255, 0 - voice_directsound 60, 0, DirectSoundWaveData_88DF414, 255, 0, 255, 0 - voice_directsound 60, 0, DirectSoundWaveData_88E01F8, 255, 0, 255, 0 - voice_directsound 60, 0, DirectSoundWaveData_88E0B68, 255, 0, 255, 0 - voice_directsound 60, 0, DirectSoundWaveData_88E0F04, 255, 0, 255, 0 - voice_directsound 60, 0, DirectSoundWaveData_88E16B8, 255, 0, 255, 0 - voice_directsound 60, 0, DirectSoundWaveData_88E2414, 255, 0, 255, 0 - voice_directsound 60, 0, DirectSoundWaveData_88E2658, 255, 0, 255, 0 - voice_directsound 60, 0, DirectSoundWaveData_88E3498, 255, 0, 255, 0 - voice_directsound 60, 0, DirectSoundWaveData_88E3DEC, 255, 0, 255, 0 - voice_directsound 60, 0, DirectSoundWaveData_88E4140, 255, 0, 255, 0 - voice_directsound 60, 0, DirectSoundWaveData_88E4774, 255, 0, 255, 0 - voice_directsound 60, 0, DirectSoundWaveData_88E53E0, 255, 0, 255, 0 - voice_directsound 60, 0, DirectSoundWaveData_88E5978, 255, 0, 255, 0 - voice_directsound 60, 0, DirectSoundWaveData_88E647C, 255, 0, 255, 0 - voice_directsound 60, 0, DirectSoundWaveData_88E6A80, 255, 0, 255, 0 - voice_directsound 60, 0, DirectSoundWaveData_88E6C78, 255, 0, 255, 0 - voice_directsound 60, 0, DirectSoundWaveData_88E75DC, 255, 0, 255, 0 - voice_directsound 60, 0, DirectSoundWaveData_88E8568, 255, 0, 255, 0 - voice_directsound 60, 0, DirectSoundWaveData_88E8BA0, 255, 0, 255, 0 - voice_directsound 60, 0, DirectSoundWaveData_88E9674, 255, 0, 255, 0 - voice_directsound 60, 0, DirectSoundWaveData_88EA5B8, 255, 0, 255, 0 - voice_directsound 60, 0, DirectSoundWaveData_88EAB30, 255, 0, 255, 0 - voice_directsound 60, 0, DirectSoundWaveData_88EB97C, 255, 0, 255, 0 - voice_directsound 60, 0, DirectSoundWaveData_88EC884, 255, 0, 255, 0 - voice_directsound 60, 0, DirectSoundWaveData_88ED358, 255, 0, 255, 0 - voice_directsound 60, 0, DirectSoundWaveData_88EDEEC, 255, 0, 255, 0 - voice_directsound 60, 0, DirectSoundWaveData_88EE8C4, 255, 0, 255, 0 - voice_directsound 60, 0, DirectSoundWaveData_88EEF04, 255, 0, 255, 0 - voice_directsound 60, 0, DirectSoundWaveData_88EF9E4, 255, 0, 255, 0 - voice_directsound 60, 0, DirectSoundWaveData_88F0020, 255, 0, 255, 0 - voice_directsound 60, 0, DirectSoundWaveData_88F0738, 255, 0, 255, 0 - voice_directsound 60, 0, DirectSoundWaveData_88F1074, 255, 0, 255, 0 - voice_directsound 60, 0, DirectSoundWaveData_88F1830, 255, 0, 255, 0 - voice_directsound 60, 0, DirectSoundWaveData_88F1D94, 255, 0, 255, 0 - voice_directsound 60, 0, DirectSoundWaveData_88F2B08, 255, 0, 255, 0 - voice_directsound 60, 0, DirectSoundWaveData_88F2F84, 255, 0, 255, 0 - voice_directsound 60, 0, DirectSoundWaveData_88F3470, 255, 0, 255, 0 - voice_directsound 60, 0, DirectSoundWaveData_88F3C38, 255, 0, 255, 0 - voice_directsound 60, 0, DirectSoundWaveData_88F4834, 255, 0, 255, 0 - voice_directsound 60, 0, DirectSoundWaveData_88F4BAC, 255, 0, 255, 0 - voice_directsound 60, 0, DirectSoundWaveData_88F5368, 255, 0, 255, 0 - voice_directsound 60, 0, DirectSoundWaveData_88F5FCC, 255, 0, 255, 0 - voice_directsound 60, 0, DirectSoundWaveData_88F6498, 255, 0, 255, 0 + voice_directsound 60, 0, DirectSoundWaveData_Phoneme_1, 255, 0, 255, 0 + voice_directsound 60, 0, DirectSoundWaveData_Phoneme_2, 255, 0, 255, 0 + voice_directsound 60, 0, DirectSoundWaveData_Phoneme_3, 255, 0, 255, 0 + voice_directsound 60, 0, DirectSoundWaveData_Phoneme_4, 255, 0, 255, 0 + voice_directsound 60, 0, DirectSoundWaveData_Phoneme_5, 255, 0, 255, 0 + voice_directsound 60, 0, DirectSoundWaveData_Phoneme_6, 255, 0, 255, 0 + voice_directsound 60, 0, DirectSoundWaveData_Phoneme_7, 255, 0, 255, 0 + voice_directsound 60, 0, DirectSoundWaveData_Phoneme_8, 255, 0, 255, 0 + voice_directsound 60, 0, DirectSoundWaveData_Phoneme_9, 255, 0, 255, 0 + voice_directsound 60, 0, DirectSoundWaveData_Phoneme_10, 255, 0, 255, 0 + voice_directsound 60, 0, DirectSoundWaveData_Phoneme_11, 255, 0, 255, 0 + voice_directsound 60, 0, DirectSoundWaveData_Phoneme_12, 255, 0, 255, 0 + voice_directsound 60, 0, DirectSoundWaveData_Phoneme_13, 255, 0, 255, 0 + voice_directsound 60, 0, DirectSoundWaveData_Phoneme_14, 255, 0, 255, 0 + voice_directsound 60, 0, DirectSoundWaveData_Phoneme_15, 255, 0, 255, 0 + voice_directsound 60, 0, DirectSoundWaveData_Phoneme_16, 255, 0, 255, 0 + voice_directsound 60, 0, DirectSoundWaveData_Phoneme_17, 255, 0, 255, 0 + voice_directsound 60, 0, DirectSoundWaveData_Phoneme_18, 255, 0, 255, 0 + voice_directsound 60, 0, DirectSoundWaveData_Phoneme_19, 255, 0, 255, 0 + voice_directsound 60, 0, DirectSoundWaveData_Phoneme_20, 255, 0, 255, 0 + voice_directsound 60, 0, DirectSoundWaveData_Phoneme_21, 255, 0, 255, 0 + voice_directsound 60, 0, DirectSoundWaveData_Phoneme_22, 255, 0, 255, 0 + voice_directsound 60, 0, DirectSoundWaveData_Phoneme_23, 255, 0, 255, 0 + voice_directsound 60, 0, DirectSoundWaveData_Phoneme_24, 255, 0, 255, 0 + voice_directsound 60, 0, DirectSoundWaveData_Phoneme_25, 255, 0, 255, 0 + voice_directsound 60, 0, DirectSoundWaveData_Phoneme_26, 255, 0, 255, 0 + voice_directsound 60, 0, DirectSoundWaveData_Phoneme_27, 255, 0, 255, 0 + voice_directsound 60, 0, DirectSoundWaveData_Phoneme_28, 255, 0, 255, 0 + voice_directsound 60, 0, DirectSoundWaveData_Phoneme_29, 255, 0, 255, 0 + voice_directsound 60, 0, DirectSoundWaveData_Phoneme_30, 255, 0, 255, 0 + voice_directsound 60, 0, DirectSoundWaveData_Phoneme_31, 255, 0, 255, 0 + voice_directsound 60, 0, DirectSoundWaveData_Phoneme_32, 255, 0, 255, 0 + voice_directsound 60, 0, DirectSoundWaveData_Phoneme_33, 255, 0, 255, 0 + voice_directsound 60, 0, DirectSoundWaveData_Phoneme_34, 255, 0, 255, 0 + voice_directsound 60, 0, DirectSoundWaveData_Phoneme_35, 255, 0, 255, 0 + voice_directsound 60, 0, DirectSoundWaveData_Phoneme_36, 255, 0, 255, 0 + voice_directsound 60, 0, DirectSoundWaveData_Phoneme_37, 255, 0, 255, 0 + voice_directsound 60, 0, DirectSoundWaveData_Phoneme_38, 255, 0, 255, 0 + voice_directsound 60, 0, DirectSoundWaveData_Phoneme_39, 255, 0, 255, 0 + voice_directsound 60, 0, DirectSoundWaveData_Phoneme_40, 255, 0, 255, 0 + voice_directsound 60, 0, DirectSoundWaveData_Phoneme_41, 255, 0, 255, 0 + voice_directsound 60, 0, DirectSoundWaveData_Phoneme_42, 255, 0, 255, 0 + voice_directsound 60, 0, DirectSoundWaveData_Phoneme_43, 255, 0, 255, 0 + voice_directsound 60, 0, DirectSoundWaveData_Phoneme_44, 255, 0, 255, 0 + voice_directsound 60, 0, DirectSoundWaveData_Phoneme_45, 255, 0, 255, 0 + voice_directsound 60, 0, DirectSoundWaveData_Phoneme_46, 255, 0, 255, 0 + voice_directsound 60, 0, DirectSoundWaveData_Phoneme_47, 255, 0, 255, 0 + voice_directsound 60, 0, DirectSoundWaveData_Phoneme_48, 255, 0, 255, 0 + voice_directsound 60, 0, DirectSoundWaveData_Phoneme_49, 255, 0, 255, 0 + voice_directsound 60, 0, DirectSoundWaveData_Phoneme_50, 255, 0, 255, 0 + voice_directsound 60, 0, DirectSoundWaveData_Phoneme_51, 255, 0, 255, 0 voice_keysplit_all voicegroup001 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 diff --git a/sound/voicegroups/voicegroup131.inc b/sound/voicegroups/voicegroup131.inc index e0e8c6ceed..029afa5be5 100644 --- a/sound/voicegroups/voicegroup131.inc +++ b/sound/voicegroups/voicegroup131.inc @@ -92,7 +92,7 @@ voicegroup131:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4830, 0, 7, 9, 1 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_1, 0, 7, 9, 1 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 diff --git a/sound/voicegroups/voicegroup132.inc b/sound/voicegroups/voicegroup132.inc index 2e7dbc825a..2806916bca 100644 --- a/sound/voicegroups/voicegroup132.inc +++ b/sound/voicegroups/voicegroup132.inc @@ -82,9 +82,9 @@ voicegroup132:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1_alt 60, 0, 0, 2, 0, 4, 2, 2 voice_square_2_alt 60, 0, 3, 0, 1, 7, 5 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4830, 0, 4, 6, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_1, 0, 4, 6, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4920, 0, 4, 6, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_16, 0, 4, 6, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1_alt 60, 0, 0, 0, 0, 4, 2, 2 @@ -92,7 +92,7 @@ voicegroup132:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4840, 0, 2, 9, 1 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_2, 0, 2, 9, 1 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 diff --git a/sound/voicegroups/voicegroup133.inc b/sound/voicegroups/voicegroup133.inc index 23bfa92495..be70f6ae33 100644 --- a/sound/voicegroups/voicegroup133.inc +++ b/sound/voicegroups/voicegroup133.inc @@ -87,12 +87,12 @@ voicegroup133:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4870, 0, 7, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_5, 0, 7, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4830, 0, 0, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_1, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 diff --git a/sound/voicegroups/voicegroup134.inc b/sound/voicegroups/voicegroup134.inc index 2266c55dee..1bc01fed07 100644 --- a/sound/voicegroups/voicegroup134.inc +++ b/sound/voicegroups/voicegroup134.inc @@ -87,7 +87,7 @@ voicegroup134:: voice_square_2_alt 60, 0, 3, 0, 1, 7, 1 voice_square_1_alt 60, 0, 0, 3, 0, 1, 7, 1 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4890, 0, 7, 15, 1 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_7, 0, 7, 15, 1 voice_square_1_alt 60, 0, 0, 2, 0, 0, 7, 1 voice_square_1_alt 60, 0, 0, 3, 0, 0, 7, 1 diff --git a/sound/voicegroups/voicegroup136.inc b/sound/voicegroups/voicegroup136.inc index 672c9435c3..0428c8c004 100644 --- a/sound/voicegroups/voicegroup136.inc +++ b/sound/voicegroups/voicegroup136.inc @@ -86,8 +86,8 @@ voicegroup136:: voice_square_2_alt 60, 0, 0, 0, 5, 0, 0 voice_square_1_alt 60, 0, 0, 1, 0, 5, 0, 0 voice_square_2_alt 60, 0, 3, 2, 4, 10, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4870, 1, 5, 0, 3 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4880, 1, 5, 0, 3 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_5, 1, 5, 0, 3 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_6, 1, 5, 0, 3 voice_square_2_alt 60, 0, 1, 0, 1, 10, 2 voice_square_1_alt 60, 0, 0, 1, 0, 1, 10, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 diff --git a/sound/voicegroups/voicegroup137.inc b/sound/voicegroups/voicegroup137.inc index 494b82d375..cf7422cd23 100644 --- a/sound/voicegroups/voicegroup137.inc +++ b/sound/voicegroups/voicegroup137.inc @@ -87,8 +87,8 @@ voicegroup137:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4870, 0, 2, 4, 1 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4880, 0, 2, 4, 1 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_5, 0, 2, 4, 1 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_6, 0, 2, 4, 1 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 diff --git a/sound/voicegroups/voicegroup138.inc b/sound/voicegroups/voicegroup138.inc index 599dd92fff..227538f5dc 100644 --- a/sound/voicegroups/voicegroup138.inc +++ b/sound/voicegroups/voicegroup138.inc @@ -92,7 +92,7 @@ voicegroup138:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4830, 0, 0, 12, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_1, 0, 0, 12, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 diff --git a/sound/voicegroups/voicegroup139.inc b/sound/voicegroups/voicegroup139.inc index 32250fd92e..e8969de570 100644 --- a/sound/voicegroups/voicegroup139.inc +++ b/sound/voicegroups/voicegroup139.inc @@ -92,7 +92,7 @@ voicegroup139:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4870, 0, 7, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_5, 0, 7, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 diff --git a/sound/voicegroups/voicegroup140.inc b/sound/voicegroups/voicegroup140.inc index a12a9f30a8..8206cca1d2 100644 --- a/sound/voicegroups/voicegroup140.inc +++ b/sound/voicegroups/voicegroup140.inc @@ -3,5 +3,5 @@ voicegroup140:: voice_keysplit_all voicegroup001 voice_square_1 60, 0, 0, 2, 0, 2, 3, 1 voice_square_2_alt 60, 0, 2, 0, 2, 3, 1 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4870, 0, 7, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_5, 0, 7, 15, 0 diff --git a/sound/voicegroups/voicegroup141.inc b/sound/voicegroups/voicegroup141.inc index 6373309ed5..1e556a21b6 100644 --- a/sound/voicegroups/voicegroup141.inc +++ b/sound/voicegroups/voicegroup141.inc @@ -83,9 +83,9 @@ voicegroup141:: voice_square_1_alt 60, 0, 0, 0, 0, 2, 5, 2 voice_square_2_alt 60, 0, 3, 0, 2, 7, 3 voice_square_2_alt 60, 0, 2, 0, 2, 6, 5 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4840, 1, 7, 0, 6 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_2, 1, 7, 0, 6 voice_square_1_alt 60, 0, 0, 1, 0, 2, 4, 2 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4850, 0, 2, 9, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_3, 0, 2, 9, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 diff --git a/sound/voicegroups/voicegroup142.inc b/sound/voicegroups/voicegroup142.inc index 3764a327f3..af5b809bf8 100644 --- a/sound/voicegroups/voicegroup142.inc +++ b/sound/voicegroups/voicegroup142.inc @@ -83,5 +83,5 @@ voicegroup142:: voice_square_1_alt 60, 0, 0, 2, 0, 2, 6, 4 voice_square_2_alt 60, 0, 2, 0, 2, 5, 5 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4900, 0, 7, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_14, 0, 7, 15, 0 diff --git a/sound/voicegroups/voicegroup143.inc b/sound/voicegroups/voicegroup143.inc index 346c644d80..9cb286ac13 100644 --- a/sound/voicegroups/voicegroup143.inc +++ b/sound/voicegroups/voicegroup143.inc @@ -83,7 +83,7 @@ voicegroup143:: voice_square_2_alt 60, 0, 3, 0, 2, 3, 2 voice_square_1_alt 60, 0, 0, 2, 0, 2, 3, 1 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4870, 0, 7, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_5, 0, 7, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 diff --git a/sound/voicegroups/voicegroup144.inc b/sound/voicegroups/voicegroup144.inc index 60bd142ade..87830a387b 100644 --- a/sound/voicegroups/voicegroup144.inc +++ b/sound/voicegroups/voicegroup144.inc @@ -83,7 +83,7 @@ voicegroup144:: voice_square_2_alt 60, 0, 3, 0, 2, 4, 2 voice_square_2_alt 60, 0, 1, 0, 2, 4, 3 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4870, 0, 7, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_5, 0, 7, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 diff --git a/sound/voicegroups/voicegroup145.inc b/sound/voicegroups/voicegroup145.inc index 374987162b..96cda70e48 100644 --- a/sound/voicegroups/voicegroup145.inc +++ b/sound/voicegroups/voicegroup145.inc @@ -92,7 +92,7 @@ voicegroup145:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4830, 0, 0, 12, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_1, 0, 0, 12, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 diff --git a/sound/voicegroups/voicegroup146.inc b/sound/voicegroups/voicegroup146.inc index fcbfedcfed..b0f1b92d6f 100644 --- a/sound/voicegroups/voicegroup146.inc +++ b/sound/voicegroups/voicegroup146.inc @@ -92,7 +92,7 @@ voicegroup146:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4830, 0, 7, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_1, 0, 7, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 diff --git a/sound/voicegroups/voicegroup147.inc b/sound/voicegroups/voicegroup147.inc index de4c5a02ff..4767815824 100644 --- a/sound/voicegroups/voicegroup147.inc +++ b/sound/voicegroups/voicegroup147.inc @@ -83,5 +83,5 @@ voicegroup147:: voice_square_1_alt 60, 0, 0, 2, 0, 0, 6, 1 voice_square_2_alt 60, 0, 2, 0, 0, 6, 1 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4830, 0, 2, 4, 2 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_1, 0, 2, 4, 2 diff --git a/sound/voicegroups/voicegroup148.inc b/sound/voicegroups/voicegroup148.inc index ba25340f0d..4fc324df88 100644 --- a/sound/voicegroups/voicegroup148.inc +++ b/sound/voicegroups/voicegroup148.inc @@ -87,7 +87,7 @@ voicegroup148:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4870, 0, 7, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_5, 0, 7, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 diff --git a/sound/voicegroups/voicegroup149.inc b/sound/voicegroups/voicegroup149.inc index 50c47bc356..c0239fef95 100644 --- a/sound/voicegroups/voicegroup149.inc +++ b/sound/voicegroups/voicegroup149.inc @@ -87,10 +87,10 @@ voicegroup149:: voice_square_1_alt 60, 0, 0, 0, 0, 2, 3, 1 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4870, 0, 7, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_5, 0, 7, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4830, 0, 7, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_1, 0, 7, 15, 0 diff --git a/sound/voicegroups/voicegroup150.inc b/sound/voicegroups/voicegroup150.inc index 97de70ac64..c51150d782 100644 --- a/sound/voicegroups/voicegroup150.inc +++ b/sound/voicegroups/voicegroup150.inc @@ -83,7 +83,7 @@ voicegroup150:: voice_square_2_alt 60, 0, 1, 0, 1, 4, 6 voice_square_1_alt 60, 0, 0, 1, 0, 2, 4, 5 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4840, 0, 7, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_2, 0, 7, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 diff --git a/sound/voicegroups/voicegroup151.inc b/sound/voicegroups/voicegroup151.inc index c7e150baf2..29571169d6 100644 --- a/sound/voicegroups/voicegroup151.inc +++ b/sound/voicegroups/voicegroup151.inc @@ -87,5 +87,5 @@ voicegroup151:: voice_square_1_alt 60, 0, 0, 0, 0, 2, 3, 1 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4870, 0, 7, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_5, 0, 7, 15, 0 diff --git a/sound/voicegroups/voicegroup152.inc b/sound/voicegroups/voicegroup152.inc index 19340b82c3..06ccc3ae9d 100644 --- a/sound/voicegroups/voicegroup152.inc +++ b/sound/voicegroups/voicegroup152.inc @@ -82,9 +82,9 @@ voicegroup152:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1_alt 60, 0, 0, 2, 0, 4, 2, 1 voice_square_2_alt 60, 0, 3, 0, 1, 5, 2 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4830, 0, 4, 6, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_1, 0, 4, 6, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4920, 0, 4, 6, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_16, 0, 4, 6, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1_alt 60, 0, 0, 1, 0, 2, 4, 1 @@ -92,7 +92,7 @@ voicegroup152:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4840, 0, 2, 9, 1 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_2, 0, 2, 9, 1 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 diff --git a/sound/voicegroups/voicegroup153.inc b/sound/voicegroups/voicegroup153.inc index 4284b89913..7206c7ba3d 100644 --- a/sound/voicegroups/voicegroup153.inc +++ b/sound/voicegroups/voicegroup153.inc @@ -92,7 +92,7 @@ voicegroup153:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B48A0, 0, 1, 12, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_8, 0, 1, 12, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 diff --git a/sound/voicegroups/voicegroup154.inc b/sound/voicegroups/voicegroup154.inc index e38e7a4483..ce70e65d57 100644 --- a/sound/voicegroups/voicegroup154.inc +++ b/sound/voicegroups/voicegroup154.inc @@ -87,10 +87,10 @@ voicegroup154:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4860, 0, 0, 12, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_4, 0, 0, 12, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4880, 0, 0, 12, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_6, 0, 0, 12, 0 diff --git a/sound/voicegroups/voicegroup155.inc b/sound/voicegroups/voicegroup155.inc index 87cd504986..8150754aab 100644 --- a/sound/voicegroups/voicegroup155.inc +++ b/sound/voicegroups/voicegroup155.inc @@ -83,13 +83,13 @@ voicegroup155:: voice_square_1_alt 60, 0, 0, 1, 0, 2, 7, 2 voice_square_2_alt 60, 0, 3, 0, 3, 6, 2 voice_square_2_alt 60, 0, 3, 0, 2, 6, 5 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4890, 0, 3, 6, 5 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_7, 0, 3, 6, 5 voice_square_2_alt 60, 0, 0, 0, 2, 6, 5 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4850, 0, 7, 15, 1 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4830, 0, 7, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4910, 0, 1, 9, 2 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_3, 0, 7, 15, 1 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_1, 0, 7, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_15, 0, 1, 9, 2 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_2_alt 60, 0, 2, 0, 2, 6, 3 diff --git a/sound/voicegroups/voicegroup156.inc b/sound/voicegroups/voicegroup156.inc index 76291c1e6a..374464fff9 100644 --- a/sound/voicegroups/voicegroup156.inc +++ b/sound/voicegroups/voicegroup156.inc @@ -3,7 +3,7 @@ voicegroup156:: voice_keysplit_all voicegroup002 voice_keysplit voicegroup005, KeySplitTable1 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4870, 0, 7, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_5, 0, 7, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_detuned_ep1_low, 255, 249, 0, 165 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 diff --git a/sound/voicegroups/voicegroup157.inc b/sound/voicegroups/voicegroup157.inc index 66cd6ff1cd..7dd93abd0a 100644 --- a/sound/voicegroups/voicegroup157.inc +++ b/sound/voicegroups/voicegroup157.inc @@ -82,12 +82,12 @@ voicegroup157:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1_alt 60, 0, 0, 1, 0, 2, 7, 2 voice_square_2_alt 60, 0, 3, 0, 3, 3, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4890, 0, 3, 6, 5 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_7, 0, 3, 6, 5 voice_square_1_alt 60, 0, 0, 0, 0, 2, 7, 2 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4830, 0, 7, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_1, 0, 7, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4880, 0, 7, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_6, 0, 7, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 diff --git a/sound/voicegroups/voicegroup158.inc b/sound/voicegroups/voicegroup158.inc index 6a8ca184b4..50fa566068 100644 --- a/sound/voicegroups/voicegroup158.inc +++ b/sound/voicegroups/voicegroup158.inc @@ -84,15 +84,15 @@ voicegroup158:: voice_square_2_alt 60, 0, 3, 0, 1, 10, 1 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_2_alt 60, 0, 2, 1, 0, 9, 1 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4880, 0, 7, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_6, 0, 7, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4870, 0, 7, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_5, 0, 7, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4830, 0, 0, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_1, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 diff --git a/sound/voicegroups/voicegroup159.inc b/sound/voicegroups/voicegroup159.inc index 7ee1e3a56e..f1d2046560 100644 --- a/sound/voicegroups/voicegroup159.inc +++ b/sound/voicegroups/voicegroup159.inc @@ -82,7 +82,7 @@ voicegroup159:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1_alt 60, 0, 0, 2, 0, 7, 0, 6 voice_square_2_alt 60, 0, 1, 1, 5, 1, 6 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4840, 1, 7, 0, 6 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_2, 1, 7, 0, 6 voice_square_1_alt 60, 0, 0, 0, 1, 4, 3, 6 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 diff --git a/sound/voicegroups/voicegroup160.inc b/sound/voicegroups/voicegroup160.inc index faff810958..160d0cad8f 100644 --- a/sound/voicegroups/voicegroup160.inc +++ b/sound/voicegroups/voicegroup160.inc @@ -87,5 +87,5 @@ voicegroup160:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4870, 0, 7, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_5, 0, 7, 15, 0 diff --git a/sound/voicegroups/voicegroup161.inc b/sound/voicegroups/voicegroup161.inc index 71374e1a06..c334fa2647 100644 --- a/sound/voicegroups/voicegroup161.inc +++ b/sound/voicegroups/voicegroup161.inc @@ -87,7 +87,7 @@ voicegroup161:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4870, 0, 7, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_5, 0, 7, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 diff --git a/sound/voicegroups/voicegroup162.inc b/sound/voicegroups/voicegroup162.inc index 53edb3b0e8..3a532b23ee 100644 --- a/sound/voicegroups/voicegroup162.inc +++ b/sound/voicegroups/voicegroup162.inc @@ -92,5 +92,5 @@ voicegroup162:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4870, 0, 7, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_5, 0, 7, 15, 0 diff --git a/sound/voicegroups/voicegroup163.inc b/sound/voicegroups/voicegroup163.inc index 86ff86ef94..cd7c6ebef2 100644 --- a/sound/voicegroups/voicegroup163.inc +++ b/sound/voicegroups/voicegroup163.inc @@ -58,7 +58,7 @@ voicegroup163:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_keysplit voicegroup007, KeySplitTable3 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_88D6978, 255, 0, 206, 204 + voice_directsound 60, 0, DirectSoundWaveData_unknown_18, 255, 0, 206, 204 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 @@ -92,7 +92,7 @@ voicegroup163:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4900, 0, 0, 12, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_14, 0, 0, 12, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 diff --git a/sound/voicegroups/voicegroup164.inc b/sound/voicegroups/voicegroup164.inc index fe48fbfb99..d64cfd33ad 100644 --- a/sound/voicegroups/voicegroup164.inc +++ b/sound/voicegroups/voicegroup164.inc @@ -82,7 +82,7 @@ voicegroup164:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_2_alt 60, 0, 2, 0, 2, 6, 2 voice_square_1_alt 60, 0, 0, 2, 0, 1, 7, 4 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4920, 0, 0, 12, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_16, 0, 0, 12, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 @@ -92,7 +92,7 @@ voicegroup164:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4830, 0, 0, 12, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_1, 0, 0, 12, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 diff --git a/sound/voicegroups/voicegroup165.inc b/sound/voicegroups/voicegroup165.inc index e633e5671a..c3262766cb 100644 --- a/sound/voicegroups/voicegroup165.inc +++ b/sound/voicegroups/voicegroup165.inc @@ -92,7 +92,7 @@ voicegroup165:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4870, 0, 7, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_5, 0, 7, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 diff --git a/sound/voicegroups/voicegroup166.inc b/sound/voicegroups/voicegroup166.inc index e4ac4a28e7..edd94624c0 100644 --- a/sound/voicegroups/voicegroup166.inc +++ b/sound/voicegroups/voicegroup166.inc @@ -87,12 +87,12 @@ voicegroup166:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4870, 0, 7, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_5, 0, 7, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4830, 0, 0, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_1, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 diff --git a/sound/voicegroups/voicegroup167.inc b/sound/voicegroups/voicegroup167.inc index 307379eb91..0213b7aec0 100644 --- a/sound/voicegroups/voicegroup167.inc +++ b/sound/voicegroups/voicegroup167.inc @@ -84,7 +84,7 @@ voicegroup167:: voice_square_2_alt 60, 0, 3, 0, 2, 8, 3 voice_square_2_alt 60, 0, 2, 0, 2, 6, 5 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4870, 0, 0, 6, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_5, 0, 0, 6, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 diff --git a/sound/voicegroups/voicegroup168.inc b/sound/voicegroups/voicegroup168.inc index 05dbf3954a..ea6b59d2ef 100644 --- a/sound/voicegroups/voicegroup168.inc +++ b/sound/voicegroups/voicegroup168.inc @@ -92,7 +92,7 @@ voicegroup168:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4900, 0, 0, 12, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_14, 0, 0, 12, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 diff --git a/sound/voicegroups/voicegroup169.inc b/sound/voicegroups/voicegroup169.inc index 220425ff01..77ee6ffee4 100644 --- a/sound/voicegroups/voicegroup169.inc +++ b/sound/voicegroups/voicegroup169.inc @@ -75,7 +75,7 @@ voicegroup169:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4840, 0, 7, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_2, 0, 7, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 diff --git a/sound/voicegroups/voicegroup170.inc b/sound/voicegroups/voicegroup170.inc index 68c29a6c9d..43c8ae6df7 100644 --- a/sound/voicegroups/voicegroup170.inc +++ b/sound/voicegroups/voicegroup170.inc @@ -81,7 +81,7 @@ voicegroup170:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_2_alt 60, 0, 1, 0, 1, 7, 1 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4830, 0, 7, 15, 1 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_1, 0, 7, 15, 1 voice_square_1_alt 60, 0, 0, 1, 0, 1, 7, 1 voice_square_2_alt 60, 0, 2, 0, 1, 0, 0 diff --git a/sound/voicegroups/voicegroup171.inc b/sound/voicegroups/voicegroup171.inc index 76eee5f8a3..f4ae315ce5 100644 --- a/sound/voicegroups/voicegroup171.inc +++ b/sound/voicegroups/voicegroup171.inc @@ -81,7 +81,7 @@ voicegroup171:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_2_alt 60, 0, 2, 0, 1, 7, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4880, 0, 7, 15, 1 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_6, 0, 7, 15, 1 voice_square_1_alt 60, 0, 0, 2, 0, 1, 7, 0 voice_square_2_alt 60, 0, 2, 0, 2, 0, 0 voice_square_2_alt 60, 0, 3, 0, 1, 7, 0 @@ -89,6 +89,6 @@ voicegroup171:: voice_square_1_alt 60, 0, 0, 2, 0, 2, 0, 0 voice_square_1_alt 60, 0, 0, 3, 0, 0, 7, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4880, 0, 7, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4890, 0, 7, 15, 1 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_6, 0, 7, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_7, 0, 7, 15, 1 diff --git a/sound/voicegroups/voicegroup172.inc b/sound/voicegroups/voicegroup172.inc index 3e04a358c4..ffd981c830 100644 --- a/sound/voicegroups/voicegroup172.inc +++ b/sound/voicegroups/voicegroup172.inc @@ -92,7 +92,7 @@ voicegroup172:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4900, 0, 0, 12, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_14, 0, 0, 12, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 diff --git a/sound/voicegroups/voicegroup173.inc b/sound/voicegroups/voicegroup173.inc index ee4a2c8662..46979c6258 100644 --- a/sound/voicegroups/voicegroup173.inc +++ b/sound/voicegroups/voicegroup173.inc @@ -92,7 +92,7 @@ voicegroup173:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4870, 0, 7, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_5, 0, 7, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 diff --git a/sound/voicegroups/voicegroup174.inc b/sound/voicegroups/voicegroup174.inc index 82be8ccf9b..ab7d43fc72 100644 --- a/sound/voicegroups/voicegroup174.inc +++ b/sound/voicegroups/voicegroup174.inc @@ -92,7 +92,7 @@ voicegroup174:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4840, 0, 7, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_2, 0, 7, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 @@ -131,7 +131,7 @@ voicegroup174:: voice_keysplit_all voicegroup177 voice_square_1_alt 60, 0, 0, 2, 0, 2, 9, 1 voice_square_2_alt 60, 0, 2, 0, 2, 9, 1 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4870, 0, 7, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_5, 0, 7, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 @@ -156,5 +156,5 @@ voicegroup174:: voice_keysplit_all voicegroup002 voice_square_1_alt 60, 0, 0, 2, 0, 2, 3, 1 voice_square_2_alt 60, 0, 2, 0, 2, 3, 1 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4870, 0, 7, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_5, 0, 7, 15, 0 diff --git a/sound/voicegroups/voicegroup176.inc b/sound/voicegroups/voicegroup176.inc index 9743d50e20..ee3c97e493 100644 --- a/sound/voicegroups/voicegroup176.inc +++ b/sound/voicegroups/voicegroup176.inc @@ -35,7 +35,7 @@ voicegroup176:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4830, 0, 7, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_1, 0, 7, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 diff --git a/sound/voicegroups/voicegroup178.inc b/sound/voicegroups/voicegroup178.inc index 1dc6971d75..026d7bb3d8 100644 --- a/sound/voicegroups/voicegroup178.inc +++ b/sound/voicegroups/voicegroup178.inc @@ -87,5 +87,5 @@ voicegroup178:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4870, 0, 0, 15, 1 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_5, 0, 0, 15, 1 diff --git a/sound/voicegroups/voicegroup179.inc b/sound/voicegroups/voicegroup179.inc index b7df91e68c..e69cace5b8 100644 --- a/sound/voicegroups/voicegroup179.inc +++ b/sound/voicegroups/voicegroup179.inc @@ -87,5 +87,5 @@ voicegroup179:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4830, 0, 7, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_1, 0, 7, 15, 0 diff --git a/sound/voicegroups/voicegroup180.inc b/sound/voicegroups/voicegroup180.inc index 82e98196d3..ea182d38e5 100644 --- a/sound/voicegroups/voicegroup180.inc +++ b/sound/voicegroups/voicegroup180.inc @@ -92,7 +92,7 @@ voicegroup180:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4870, 0, 7, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_5, 0, 7, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 diff --git a/sound/voicegroups/voicegroup182.inc b/sound/voicegroups/voicegroup182.inc index 1fb444fec6..ec39554958 100644 --- a/sound/voicegroups/voicegroup182.inc +++ b/sound/voicegroups/voicegroup182.inc @@ -87,5 +87,5 @@ voicegroup182:: voice_square_1_alt 60, 0, 0, 0, 0, 2, 3, 1 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4870, 0, 7, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_5, 0, 7, 15, 0 diff --git a/sound/voicegroups/voicegroup183.inc b/sound/voicegroups/voicegroup183.inc index 92b953fc4c..ff49e3763b 100644 --- a/sound/voicegroups/voicegroup183.inc +++ b/sound/voicegroups/voicegroup183.inc @@ -83,7 +83,7 @@ voicegroup183:: voice_square_1_alt 60, 0, 0, 2, 0, 2, 4, 1 voice_square_2_alt 60, 0, 2, 0, 2, 4, 1 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4870, 0, 7, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_5, 0, 7, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 diff --git a/sound/voicegroups/voicegroup184.inc b/sound/voicegroups/voicegroup184.inc index e0d1c958d7..86f392e65c 100644 --- a/sound/voicegroups/voicegroup184.inc +++ b/sound/voicegroups/voicegroup184.inc @@ -3,7 +3,7 @@ voicegroup184:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4870, 0, 7, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_5, 0, 7, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 diff --git a/sound/voicegroups/voicegroup185.inc b/sound/voicegroups/voicegroup185.inc index 8417a2407b..879a4e8883 100644 --- a/sound/voicegroups/voicegroup185.inc +++ b/sound/voicegroups/voicegroup185.inc @@ -84,10 +84,10 @@ voicegroup185:: voice_square_1_alt 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4920, 0, 7, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4910, 0, 7, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_16, 0, 7, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_15, 0, 7, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4870, 0, 7, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_5, 0, 7, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 diff --git a/sound/voicegroups/voicegroup187.inc b/sound/voicegroups/voicegroup187.inc index 46c5c1f9da..640912505a 100644 --- a/sound/voicegroups/voicegroup187.inc +++ b/sound/voicegroups/voicegroup187.inc @@ -92,7 +92,7 @@ voicegroup187:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4830, 0, 0, 12, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_1, 0, 0, 12, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 diff --git a/sound/voicegroups/voicegroup188.inc b/sound/voicegroups/voicegroup188.inc index c6afe243b3..8556bcd4d2 100644 --- a/sound/voicegroups/voicegroup188.inc +++ b/sound/voicegroups/voicegroup188.inc @@ -92,7 +92,7 @@ voicegroup188:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4830, 0, 7, 15, 2 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_1, 0, 7, 15, 2 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 diff --git a/sound/voicegroups/voicegroup190.inc b/sound/voicegroups/voicegroup190.inc index 6faa27c620..25a84e84ed 100644 --- a/sound/voicegroups/voicegroup190.inc +++ b/sound/voicegroups/voicegroup190.inc @@ -1,6 +1,6 @@ .align 2 voicegroup190:: - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_86B4830, 0, 7, 15, 2 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_1, 0, 7, 15, 2 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 diff --git a/src/battle_anim_bug.c b/src/battle_anim_bug.c index fdfd0081e7..dde184f993 100644 --- a/src/battle_anim_bug.c +++ b/src/battle_anim_bug.c @@ -208,12 +208,12 @@ static void AnimMegahornHorn(struct Sprite *sprite) gBattleAnimArgs[0] = -gBattleAnimArgs[0]; } - sprite->x = GetBattlerSpriteCoord2(gBattleAnimTarget, 2) + gBattleAnimArgs[0]; - sprite->y = GetBattlerSpriteCoord2(gBattleAnimTarget, 3) + gBattleAnimArgs[1]; + sprite->x = GetBattlerSpriteCoord2(gBattleAnimTarget, BATTLER_COORD_X_2) + gBattleAnimArgs[0]; + sprite->y = GetBattlerSpriteCoord2(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET) + gBattleAnimArgs[1]; sprite->data[0] = gBattleAnimArgs[4]; - sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, 2) + gBattleAnimArgs[2]; - sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, 3) + gBattleAnimArgs[3]; + sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2) + gBattleAnimArgs[2]; + sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET) + gBattleAnimArgs[3]; sprite->callback = StartAnimLinearTranslation; StoreSpriteCallbackInData6(sprite, DestroyAnimSprite); @@ -232,12 +232,12 @@ static void AnimLeechLifeNeedle(struct Sprite *sprite) gBattleAnimArgs[0] = -gBattleAnimArgs[0]; } - sprite->x = GetBattlerSpriteCoord2(gBattleAnimTarget, 2) + gBattleAnimArgs[0]; - sprite->y = GetBattlerSpriteCoord2(gBattleAnimTarget, 3) + gBattleAnimArgs[1]; + sprite->x = GetBattlerSpriteCoord2(gBattleAnimTarget, BATTLER_COORD_X_2) + gBattleAnimArgs[0]; + sprite->y = GetBattlerSpriteCoord2(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET) + gBattleAnimArgs[1]; sprite->data[0] = gBattleAnimArgs[2]; - sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, 2); - sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, 3); + sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2); + sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET); sprite->callback = StartAnimLinearTranslation; StoreSpriteCallbackInData6(sprite, DestroyAnimSprite); @@ -262,8 +262,8 @@ static void AnimTranslateWebThread(struct Sprite *sprite) if (!gBattleAnimArgs[4]) { - sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, 2); - sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, 3); + sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2); + sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET); } else { @@ -402,8 +402,8 @@ static void AnimTranslateStinger(struct Sprite *sprite) InitSpritePosToAnimAttacker(sprite, 1); - lVarX = GetBattlerSpriteCoord(gBattleAnimTarget, 2) + gBattleAnimArgs[2]; - lVarY = GetBattlerSpriteCoord(gBattleAnimTarget, 3) + gBattleAnimArgs[3]; + lVarX = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2) + gBattleAnimArgs[2]; + lVarY = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET) + gBattleAnimArgs[3]; rot = ArcTan2Neg(lVarX - sprite->x, lVarY - sprite->y); rot += 0xC000; TrySetSpriteRotScale(sprite, FALSE, 0x100, 0x100, rot); @@ -431,8 +431,8 @@ void AnimMissileArc(struct Sprite *sprite) gBattleAnimArgs[2] = -gBattleAnimArgs[2]; sprite->data[0] = gBattleAnimArgs[4]; - sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, 2) + gBattleAnimArgs[2]; - sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, 3) + gBattleAnimArgs[3]; + sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2) + gBattleAnimArgs[2]; + sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET) + gBattleAnimArgs[3]; sprite->data[5] = gBattleAnimArgs[5]; InitAnimArcTranslation(sprite); @@ -481,13 +481,13 @@ static void AnimTailGlowOrb(struct Sprite *sprite) { if (gBattleAnimArgs[0] == ANIM_ATTACKER) { - sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, 2); - sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, 3) + 18; + sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2); + sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET) + 18; } else { - sprite->x = GetBattlerSpriteCoord(gBattleAnimTarget, 2); - sprite->y = GetBattlerSpriteCoord(gBattleAnimTarget, 3) + 18; + sprite->x = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2); + sprite->y = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET) + 18; } StoreSpriteCallbackInData6(sprite, DestroySpriteAndMatrix); diff --git a/src/battle_anim_dragon.c b/src/battle_anim_dragon.c index dba4e10f1d..57ed24e1e0 100644 --- a/src/battle_anim_dragon.c +++ b/src/battle_anim_dragon.c @@ -318,8 +318,8 @@ static void AnimSpinningDracoMeteor(struct Sprite *sprite) static void AnimOutrageFlame(struct Sprite *sprite) { - sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, 2); - sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, 3); + sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2); + sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET); if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER) { sprite->x -= gBattleAnimArgs[0]; @@ -344,8 +344,8 @@ static void AnimOutrageFlame(struct Sprite *sprite) static void StartDragonFireTranslation(struct Sprite *sprite) { SetSpriteCoordsToAnimAttackerCoords(sprite); - sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, 2); - sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, 3); + sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2); + sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET); if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER) { sprite->x -= gBattleAnimArgs[1]; @@ -371,13 +371,13 @@ void AnimDragonRageFirePlume(struct Sprite *sprite) { if (gBattleAnimArgs[0] == 0) { - sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, 0); - sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, 1); + sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X); + sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y); } else { - sprite->x = GetBattlerSpriteCoord(gBattleAnimTarget, 0); - sprite->y = GetBattlerSpriteCoord(gBattleAnimTarget, 1); + sprite->x = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X); + sprite->y = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y); } SetAnimSpriteInitialXOffset(sprite, gBattleAnimArgs[1]); @@ -399,8 +399,8 @@ void AnimDragonDanceOrb(struct Sprite *sprite) { u16 r5; u16 r0; - sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, 2); - sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, 3); + sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2); + sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET); sprite->data[4] = 0; sprite->data[5] = 1; sprite->data[6] = gBattleAnimArgs[0]; @@ -546,8 +546,8 @@ void AnimOverheatFlame(struct Sprite *sprite) { int i; int yAmplitude = (gBattleAnimArgs[2] * 3) / 5; - sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, 2); - sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, 3) + gBattleAnimArgs[4]; + sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2); + sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET) + gBattleAnimArgs[4]; sprite->data[1] = Cos(gBattleAnimArgs[1], gBattleAnimArgs[2]); sprite->data[2] = Sin(gBattleAnimArgs[1], yAmplitude); sprite->x += sprite->data[1] * gBattleAnimArgs[0]; diff --git a/src/battle_anim_effects_1.c b/src/battle_anim_effects_1.c index 5505754e42..c66bc9726c 100644 --- a/src/battle_anim_effects_1.c +++ b/src/battle_anim_effects_1.c @@ -3654,7 +3654,7 @@ void AnimPetalDanceSmallFlower(struct Sprite* sprite) sprite->data[1] = sprite->x; sprite->data[2] = sprite->x; sprite->data[3] = sprite->y; - sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimAttacker, 3) + gBattleAnimArgs[2]; + sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET) + gBattleAnimArgs[2]; InitAnimLinearTranslation(sprite); sprite->data[5] = 0x40; sprite->callback = AnimPetalDanceSmallFlower_Step; @@ -4077,8 +4077,8 @@ static void AnimIngrainOrb(struct Sprite* sprite) { if (!sprite->data[0]) { - sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, 2) + gBattleAnimArgs[0]; - sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, 1) + gBattleAnimArgs[1]; + sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2) + gBattleAnimArgs[0]; + sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y) + gBattleAnimArgs[1]; sprite->data[1] = gBattleAnimArgs[2]; sprite->data[2] = gBattleAnimArgs[3]; sprite->data[3] = gBattleAnimArgs[4]; @@ -4415,8 +4415,8 @@ void AnimTask_LeafBlade(u8 taskId) struct Task *task = &gTasks[taskId]; task->data[4] = GetBattlerSpriteSubpriority(gBattleAnimTarget) - 1; - task->data[6] = GetBattlerSpriteCoord(gBattleAnimTarget, 2); - task->data[7] = GetBattlerSpriteCoord(gBattleAnimTarget, 3); + task->data[6] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2); + task->data[7] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET); task->data[10] = GetBattlerSpriteCoordAttr(gBattleAnimTarget, BATTLER_COORD_ATTR_WIDTH); task->data[11] = GetBattlerSpriteCoordAttr(gBattleAnimTarget, BATTLER_COORD_ATTR_HEIGHT); task->data[5] = (GetBattlerSide(gBattleAnimTarget) == B_SIDE_OPPONENT) ? 1 : -1; @@ -4707,11 +4707,11 @@ static void AnimFlyingParticle(struct Sprite* sprite) sprite->oam.priority = GetBattlerSpriteBGPriority(battler) + 1; break; case 2: - sprite->y = GetBattlerSpriteCoord(battler, 3) + gBattleAnimArgs[0]; + sprite->y = GetBattlerSpriteCoord(battler, BATTLER_COORD_Y_PIC_OFFSET) + gBattleAnimArgs[0]; sprite->oam.priority = GetBattlerSpriteBGPriority(battler); break; case 3: - sprite->y = GetBattlerSpriteCoord(gBattleAnimTarget, 3) + gBattleAnimArgs[0]; + sprite->y = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET) + gBattleAnimArgs[0]; GetAnimBattlerSpriteId(ANIM_TARGET); sprite->oam.priority = GetBattlerSpriteBGPriority(battler) + 1; break; @@ -4787,13 +4787,13 @@ void AnimNeedleArmSpike(struct Sprite* sprite) { if (gBattleAnimArgs[0] == 0) { - a = GetBattlerSpriteCoord(gBattleAnimAttacker, 2); - b = GetBattlerSpriteCoord(gBattleAnimAttacker, 3); + a = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2); + b = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET); } else { - a = GetBattlerSpriteCoord(gBattleAnimTarget, 2); - b = GetBattlerSpriteCoord(gBattleAnimTarget, 3); + a = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2); + b = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET); } sprite->data[0] = gBattleAnimArgs[4]; @@ -4896,8 +4896,8 @@ static void AnimFlickeringPunch(struct Sprite* sprite) // arg 2: slice direction; 0 = right-to-left, 1 = left-to-right void AnimCuttingSlice(struct Sprite* sprite) { - sprite->x = GetBattlerSpriteCoord(gBattleAnimTarget, 0); - sprite->y = GetBattlerSpriteCoord(gBattleAnimTarget, 1); + sprite->x = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X); + sprite->y = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y); if (GetBattlerSide(gBattleAnimTarget) == B_SIDE_PLAYER) sprite->y += 8; @@ -4922,32 +4922,31 @@ void AnimCuttingSlice(struct Sprite* sprite) static void AnimAirCutterSlice(struct Sprite* sprite) { - u8 a; - u8 b; + u8 x, y; switch (gBattleAnimArgs[3]) { case 1: - a = GetBattlerSpriteCoord(BATTLE_PARTNER(gBattleAnimTarget), 0); - b = GetBattlerSpriteCoord(BATTLE_PARTNER(gBattleAnimTarget), 1); + x = GetBattlerSpriteCoord(BATTLE_PARTNER(gBattleAnimTarget), BATTLER_COORD_X); + y = GetBattlerSpriteCoord(BATTLE_PARTNER(gBattleAnimTarget), BATTLER_COORD_Y); break; case 2: - a = GetBattlerSpriteCoord(gBattleAnimTarget, 0); - b = GetBattlerSpriteCoord(gBattleAnimTarget, 1); + x = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X); + y = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y); if (IsBattlerSpriteVisible(BATTLE_PARTNER(gBattleAnimTarget))) { - a = (GetBattlerSpriteCoord(BATTLE_PARTNER(gBattleAnimTarget), 0) + a) / 2; - b = (GetBattlerSpriteCoord(BATTLE_PARTNER(gBattleAnimTarget), 1) + b) / 2; + x = (GetBattlerSpriteCoord(BATTLE_PARTNER(gBattleAnimTarget), BATTLER_COORD_X) + x) / 2; + y = (GetBattlerSpriteCoord(BATTLE_PARTNER(gBattleAnimTarget), BATTLER_COORD_Y) + y) / 2; } break; case 0: default: - a = GetBattlerSpriteCoord(gBattleAnimTarget, 0); - b = GetBattlerSpriteCoord(gBattleAnimTarget, 1); + x = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X); + y = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y); break; } - sprite->x = a; - sprite->y = b; + sprite->x = x; + sprite->y = y; if (GetBattlerSide(gBattleAnimTarget) == B_SIDE_PLAYER) sprite->y += 8; @@ -5062,8 +5061,8 @@ static void AnimProtect(struct Sprite* sprite) if (IsContest()) gBattleAnimArgs[1] += 8; - sprite->x = GetBattlerSpriteCoord2(gBattleAnimAttacker, 0) + gBattleAnimArgs[0]; - sprite->y = GetBattlerSpriteCoord2(gBattleAnimAttacker, 1) + gBattleAnimArgs[1]; + sprite->x = GetBattlerSpriteCoord2(gBattleAnimAttacker, BATTLER_COORD_X) + gBattleAnimArgs[0]; + sprite->y = GetBattlerSpriteCoord2(gBattleAnimAttacker, BATTLER_COORD_Y) + gBattleAnimArgs[1]; if (GetBattlerSide(gBattleAnimAttacker) == B_SIDE_PLAYER || IsContest()) sprite->oam.priority = GetBattlerSpriteBGPriority(gBattleAnimAttacker) + 1; else @@ -5122,8 +5121,8 @@ static void AnimProtect_Step(struct Sprite *sprite) static void AnimMilkBottle(struct Sprite* sprite) { - sprite->x = GetBattlerSpriteCoord(gBattleAnimTarget, 2); - sprite->y = GetBattlerSpriteCoord(gBattleAnimTarget, 3) + 0xFFE8; + sprite->x = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2); + sprite->y = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET) + 0xFFE8; sprite->data[0] = 0; sprite->data[1] = 0; sprite->data[2] = 0; @@ -5262,13 +5261,13 @@ static void AnimSparkingStars(struct Sprite* sprite) { if (!gBattleAnimArgs[6]) { - sprite->x = GetBattlerSpriteCoord(battler, 0); - sprite->y = GetBattlerSpriteCoord(battler, 1) + gBattleAnimArgs[1]; + sprite->x = GetBattlerSpriteCoord(battler, BATTLER_COORD_X); + sprite->y = GetBattlerSpriteCoord(battler, BATTLER_COORD_Y) + gBattleAnimArgs[1]; } else { - sprite->x = GetBattlerSpriteCoord(battler, 2); - sprite->y = GetBattlerSpriteCoord(battler, 3) + gBattleAnimArgs[1]; + sprite->x = GetBattlerSpriteCoord(battler, BATTLER_COORD_X_2); + sprite->y = GetBattlerSpriteCoord(battler, BATTLER_COORD_Y_PIC_OFFSET) + gBattleAnimArgs[1]; } SetAnimSpriteInitialXOffset(sprite, gBattleAnimArgs[0]); @@ -5431,8 +5430,8 @@ static void AnimLockOnTarget_Step3(struct Sprite* sprite) sprite->y2 = 0; sprite->x2 = 0; sprite->data[0] = 6; - sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, 2) + a; - sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, 3) + b; + sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2) + a; + sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET) + b; sprite->callback = StartAnimLinearTranslation; StoreSpriteCallbackInData6(sprite, AnimLockOnTarget_Step5); } @@ -5548,7 +5547,7 @@ static void AnimBowMon_Step1(struct Sprite* sprite) sprite->data[2] = 0; sprite->data[3] = gBattlerSpriteIds[gBattleAnimAttacker]; StoreSpriteCallbackInData6(sprite, AnimBowMon_Step1_Callback); - sprite->callback = TranslateMonSpriteLinear; + sprite->callback = TranslateSpriteLinearById; } static void AnimBowMon_Step1_Callback(struct Sprite* sprite) @@ -5578,7 +5577,7 @@ static void AnimBowMon_Step2(struct Sprite* sprite) sprite->data[2] = 0; sprite->data[3] = gBattlerSpriteIds[gBattleAnimAttacker]; StoreSpriteCallbackInData6(sprite, AnimBowMon_Step4); - sprite->callback = TranslateMonSpriteLinear; + sprite->callback = TranslateSpriteLinearById; } static void AnimBowMon_Step3(struct Sprite* sprite) @@ -5816,13 +5815,13 @@ static void AnimSlashSlice(struct Sprite* sprite) { if (gBattleAnimArgs[0] == 0) { - sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, 2) + gBattleAnimArgs[1]; - sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, 3) + gBattleAnimArgs[2]; + sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2) + gBattleAnimArgs[1]; + sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET) + gBattleAnimArgs[2]; } else { - sprite->x = GetBattlerSpriteCoord(gBattleAnimTarget, 2) + gBattleAnimArgs[1]; - sprite->y = GetBattlerSpriteCoord(gBattleAnimTarget, 3) + gBattleAnimArgs[2]; + sprite->x = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2) + gBattleAnimArgs[1]; + sprite->y = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET) + gBattleAnimArgs[2]; } sprite->data[0] = 0; @@ -5833,16 +5832,16 @@ static void AnimSlashSlice(struct Sprite* sprite) static void AnimFalseSwipeSlice(struct Sprite* sprite) { - sprite->x = GetBattlerSpriteCoord(gBattleAnimTarget, 2) + 0xFFD0; - sprite->y = GetBattlerSpriteCoord(gBattleAnimTarget, 3); + sprite->x = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2) + 0xFFD0; + sprite->y = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET); StoreSpriteCallbackInData6(sprite, AnimFalseSwipeSlice_Step1); sprite->callback = RunStoredCallbackWhenAnimEnds; } static void AnimFalseSwipePositionedSlice(struct Sprite* sprite) { - sprite->x = sprite->x = GetBattlerSpriteCoord(gBattleAnimTarget, 2) + 0xFFD0 + gBattleAnimArgs[0]; - sprite->y = GetBattlerSpriteCoord(gBattleAnimTarget, 3); + sprite->x = sprite->x = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2) + 0xFFD0 + gBattleAnimArgs[0]; + sprite->y = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET); StartSpriteAnim(sprite, 1); sprite->data[0] = 0; sprite->data[1] = 0; @@ -5883,13 +5882,13 @@ void AnimEndureEnergy(struct Sprite* sprite) { if (gBattleAnimArgs[0] == 0) { - sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, 0) + gBattleAnimArgs[1]; - sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, 1) + gBattleAnimArgs[2]; + sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X) + gBattleAnimArgs[1]; + sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y) + gBattleAnimArgs[2]; } else { - sprite->x = GetBattlerSpriteCoord(gBattleAnimTarget, 0) + gBattleAnimArgs[1]; - sprite->y = GetBattlerSpriteCoord(gBattleAnimTarget, 1) + gBattleAnimArgs[2]; + sprite->x = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X) + gBattleAnimArgs[1]; + sprite->y = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y) + gBattleAnimArgs[2]; } sprite->data[0] = 0; @@ -5912,8 +5911,8 @@ static void AnimEndureEnergy_Step(struct Sprite* sprite) static void AnimSharpenSphere(struct Sprite* sprite) { - sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, 2); - sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, 3) - 12; + sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2); + sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET) - 12; sprite->data[0] = 0; sprite->data[1] = 2; sprite->data[2] = 0; @@ -5951,8 +5950,8 @@ void AnimConversion(struct Sprite* sprite) { if (sprite->data[0] == 0) { - sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, 0) + gBattleAnimArgs[0]; - sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, 1) + gBattleAnimArgs[1]; + sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X) + gBattleAnimArgs[0]; + sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y) + gBattleAnimArgs[1]; if (IsContest()) sprite->y += 10; @@ -6005,8 +6004,8 @@ static void AnimConversion2_Step(struct Sprite* sprite) { sprite->animPaused = 0; sprite->data[0] = 30; - sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimAttacker, 2); - sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimAttacker, 3); + sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2); + sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET); sprite->callback = StartAnimLinearTranslation; StoreSpriteCallbackInData6(sprite, DestroyAnimSprite); } @@ -6077,7 +6076,7 @@ static void AnimMoon_Step(struct Sprite* sprite) static void AnimMoonlightSparkle(struct Sprite* sprite) { - sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, 2) + gBattleAnimArgs[0]; + sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2) + gBattleAnimArgs[0]; sprite->y = gBattleAnimArgs[1]; sprite->data[0] = 0; sprite->data[1] = 0; @@ -6218,8 +6217,8 @@ static void AnimHornHit(struct Sprite* sprite) sprite->data[0] = 0; sprite->data[1] = gBattleAnimArgs[2]; - sprite->x = GetBattlerSpriteCoord(gBattleAnimTarget, 2) + gBattleAnimArgs[0]; - sprite->y = GetBattlerSpriteCoord(gBattleAnimTarget, 3) + gBattleAnimArgs[1]; + sprite->x = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2) + gBattleAnimArgs[0]; + sprite->y = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET) + gBattleAnimArgs[1]; sprite->data[6] = sprite->x; sprite->data[7] = sprite->y; if (IsContest()) @@ -6332,7 +6331,7 @@ static void AnimDoubleTeam(struct Sprite* sprite) if (sprite->data[0] > 64) { gTasks[sprite->data[2]].data[3]--; - obj_delete_but_dont_free_vram(sprite); + DestroySpriteWithActiveSheet(sprite); } else { @@ -6406,8 +6405,8 @@ static void AnimWavyMusicNotes(struct Sprite* sprite) } else { - a = GetBattlerSpriteCoord(gBattleAnimTarget, 2); - b = GetBattlerSpriteCoord(gBattleAnimTarget, 3); + a = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2); + b = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET); } sprite->data[4] = sprite->x << 4; @@ -6470,8 +6469,8 @@ static void AnimFlyingMusicNotes(struct Sprite* sprite) if (GetBattlerSide(gBattleAnimAttacker) == B_SIDE_OPPONENT) gBattleAnimArgs[1] *= -1; - sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, 2) + gBattleAnimArgs[1]; - sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, 3) + gBattleAnimArgs[2]; + sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2) + gBattleAnimArgs[1]; + sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET) + gBattleAnimArgs[2]; StartSpriteAnim(sprite, gBattleAnimArgs[0]); sprite->data[2] = 0; sprite->data[3] = 0; @@ -6514,8 +6513,8 @@ static void AnimBellyDrumHand(struct Sprite* sprite) a = -16; } - sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, 2) + a; - sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, 3) + 8; + sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2) + a; + sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET) + 8; sprite->data[0] = 8; sprite->callback = WaitAnimForDuration; StoreSpriteCallbackInData6(sprite, DestroyAnimSprite); @@ -6569,7 +6568,7 @@ void SetSpriteNextToMonHead(u8 battler, struct Sprite* sprite) else sprite->x = GetBattlerSpriteCoordAttr(battler, BATTLER_COORD_ATTR_LEFT) - 8; - sprite->y = GetBattlerSpriteCoord(battler, 3) - (s16)GetBattlerSpriteCoordAttr(battler, BATTLER_COORD_ATTR_HEIGHT) / 4; + sprite->y = GetBattlerSpriteCoord(battler, BATTLER_COORD_Y_PIC_OFFSET) - (s16)GetBattlerSpriteCoordAttr(battler, BATTLER_COORD_ATTR_HEIGHT) / 4; } void AnimThoughtBubble(struct Sprite* sprite) @@ -6632,7 +6631,7 @@ void AnimFollowMeFinger(struct Sprite* sprite) else battler = gBattleAnimTarget; - sprite->x = GetBattlerSpriteCoord(battler, 0); + sprite->x = GetBattlerSpriteCoord(battler, BATTLER_COORD_X); sprite->y = GetBattlerSpriteCoordAttr(battler, BATTLER_COORD_ATTR_TOP); if (sprite->y <= 9) sprite->y = 10; diff --git a/src/battle_anim_effects_2.c b/src/battle_anim_effects_2.c index 60baad1c4c..033779f53a 100755 --- a/src/battle_anim_effects_2.c +++ b/src/battle_anim_effects_2.c @@ -1299,20 +1299,30 @@ const struct SpriteTemplate gRoarOfTimeBombTemplate = .callback = AnimSpriteOnMonPos }; +#define sAmplitudeX data[1] +#define sCircleSpeed data[2] +#define sMoveSteps data[3] +#define sAmplitudeY data[4] + static void AnimCirclingFinger(struct Sprite *sprite) { SetSpriteCoordsToAnimAttackerCoords(sprite); SetAnimSpriteInitialXOffset(sprite, gBattleAnimArgs[0]); sprite->y += gBattleAnimArgs[1]; - sprite->data[1] = gBattleAnimArgs[2]; - sprite->data[2] = gBattleAnimArgs[4]; - sprite->data[3] = gBattleAnimArgs[5]; - sprite->data[4] = gBattleAnimArgs[3]; + sprite->sAmplitudeX = gBattleAnimArgs[2]; + sprite->sCircleSpeed = gBattleAnimArgs[4]; + sprite->sMoveSteps = gBattleAnimArgs[5]; + sprite->sAmplitudeY = gBattleAnimArgs[3]; StoreSpriteCallbackInData6(sprite, DestroySpriteAndMatrix); - sprite->callback = TranslateSpriteInEllipseOverDuration; + sprite->callback = TranslateSpriteInEllipse; sprite->callback(sprite); } +#undef sAmplitudeX +#undef sCircleSpeed +#undef sMoveSteps +#undef sAmplitudeY + static void AnimBouncingMusicNote(struct Sprite *sprite) { u8 battler; @@ -1366,8 +1376,8 @@ static void AnimVibrateBattlerBack_Step(struct Sprite *sprite) static void AnimVibrateBattlerBack(struct Sprite *sprite) { u8 spriteId; - sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, 2); - sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, 3); + sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2); + sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET); spriteId = gBattlerSpriteIds[gBattleAnimTarget]; if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER) sprite->x -= gBattleAnimArgs[0]; @@ -1535,8 +1545,8 @@ void AnimSonicBoomProjectile(struct Sprite *sprite) } InitSpritePosToAnimAttacker(sprite, TRUE); - targetXPos = GetBattlerSpriteCoord(gBattleAnimTarget, 2) + gBattleAnimArgs[2]; - targetYPos = GetBattlerSpriteCoord(gBattleAnimTarget, 3) + gBattleAnimArgs[3]; + targetXPos = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2) + gBattleAnimArgs[2]; + targetYPos = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET) + gBattleAnimArgs[3]; rotation = ArcTan2Neg(targetXPos - sprite->x, targetYPos - sprite->y); rotation += 0xF000; if (IsContest()) @@ -1809,8 +1819,8 @@ static void AnimCoinThrow(struct Sprite *sprite) u16 var; InitSpritePosToAnimAttacker(sprite, TRUE); - r6 = GetBattlerSpriteCoord(gBattleAnimTarget, 2); - r7 = GetBattlerSpriteCoord(gBattleAnimTarget, 3) + gBattleAnimArgs[3]; + r6 = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2); + r7 = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET) + gBattleAnimArgs[3]; if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER) gBattleAnimArgs[2] = -gBattleAnimArgs[2]; @@ -1920,7 +1930,7 @@ static void AnimRazorWindTornado(struct Sprite *sprite) sprite->data[2] = gBattleAnimArgs[5]; sprite->data[3] = gBattleAnimArgs[6]; sprite->data[4] = gBattleAnimArgs[3]; - sprite->callback = TranslateSpriteInCircleOverDuration; + sprite->callback = TranslateSpriteInCircle; StoreSpriteCallbackInData6(sprite, DestroyAnimSprite); sprite->callback(sprite); } @@ -2150,7 +2160,7 @@ static void CreateMinimizeSprite(struct Task* task, u8 taskId) { if ((matrixNum = AllocOamMatrix()) == 0xFF) { - obj_delete_but_dont_free_vram(&gSprites[spriteId]); + DestroySpriteWithActiveSheet(&gSprites[spriteId]); } else { @@ -2178,7 +2188,7 @@ static void ClonedMinizeSprite_Step(struct Sprite *sprite) { gTasks[sprite->data[1]].data[sprite->data[2]]--; FreeOamMatrix(sprite->oam.matrixNum); - obj_delete_but_dont_free_vram(sprite); + DestroySpriteWithActiveSheet(sprite); } } @@ -2431,12 +2441,12 @@ void AnimTask_SketchDrawMon(u8 taskId) if (GetBattlerSpriteBGPriorityRank(gBattleAnimTarget) == 1) { task->data[6] = gBattle_BG1_X; - params.dmaDest = (u16 *)REG_ADDR_BG1HOFS; + params.dmaDest = ®_BG1HOFS; } else { task->data[6] = gBattle_BG2_X; - params.dmaDest = (u16 *)REG_ADDR_BG2HOFS; + params.dmaDest = ®_BG2HOFS; } for (i = task->data[0] - 0x40; i <= task->data[0]; i++) @@ -2504,7 +2514,7 @@ static void AnimTask_SketchDrawMon_Step(u8 taskId) static void AnimPencil(struct Sprite *sprite) { - sprite->x = GetBattlerSpriteCoord(gBattleAnimTarget, 0) - 16; + sprite->x = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X) - 16; sprite->y = GetBattlerYCoordWithElevation(gBattleAnimTarget) + 16; sprite->data[0] = 0; sprite->data[1] = 0; @@ -2592,9 +2602,9 @@ static void AnimBlendThinRing(struct Sprite *sprite) { SetAverageBattlerPositions(battler, r4, &sp0, &sp1); if (r4 == 0) - r4 = GetBattlerSpriteCoord(battler, 0); + r4 = GetBattlerSpriteCoord(battler, BATTLER_COORD_X); else - r4 = GetBattlerSpriteCoord(battler, 2); + r4 = GetBattlerSpriteCoord(battler, BATTLER_COORD_X_2); if (GetBattlerSide(battler) != B_SIDE_PLAYER) gBattleAnimArgs[0] -= (sp0 - r4) - gBattleAnimArgs[0]; // This is weird. @@ -2617,14 +2627,14 @@ static void AnimHyperVoiceRing_WaitEnd(struct Sprite *sprite) void AnimHyperVoiceRing(struct Sprite *sprite) { - u16 r9 = 0; - u16 r6 = 0; - s16 sp0 = 0; - s16 sp1 = 0; - u8 sp4; + u16 startX = 0; + u16 startY = 0; + s16 x = 0; + s16 y = 0; + u8 yCoordType; u8 battler1; u8 battler2; - u8 r10; + u8 xCoordType; if (gBattleAnimArgs[5] == 0) { @@ -2639,18 +2649,18 @@ void AnimHyperVoiceRing(struct Sprite *sprite) if (!gBattleAnimArgs[6]) { - r10 = 0; - sp4 = 1; + xCoordType = BATTLER_COORD_X; + yCoordType = BATTLER_COORD_Y; } else { - r10 = 2; - sp4 = 3; + xCoordType = BATTLER_COORD_X_2; + yCoordType = BATTLER_COORD_Y_PIC_OFFSET; } if (GetBattlerSide(battler1) != B_SIDE_PLAYER) { - r9 = GetBattlerSpriteCoord(battler1, r10) + gBattleAnimArgs[0]; + startX = GetBattlerSpriteCoord(battler1, xCoordType) + gBattleAnimArgs[0]; if (IsBattlerSpriteVisible(BATTLE_PARTNER(battler2))) sprite->subpriority = gSprites[gBattlerSpriteIds[BATTLE_PARTNER(battler2)]].subpriority - 1; else @@ -2658,7 +2668,7 @@ void AnimHyperVoiceRing(struct Sprite *sprite) } else { - r9 = GetBattlerSpriteCoord(battler1, r10) - gBattleAnimArgs[0]; + startX = GetBattlerSpriteCoord(battler1, xCoordType) - gBattleAnimArgs[0]; if (!IsContest() && IsBattlerSpriteVisible(BATTLE_PARTNER(battler1))) { if (gSprites[gBattlerSpriteIds[battler1]].x < gSprites[gBattlerSpriteIds[BATTLE_PARTNER(battler1)]].x) @@ -2673,27 +2683,27 @@ void AnimHyperVoiceRing(struct Sprite *sprite) } - r6 = GetBattlerSpriteCoord(battler1, sp4) + gBattleAnimArgs[1]; + startY = GetBattlerSpriteCoord(battler1, yCoordType) + gBattleAnimArgs[1]; if (!IsContest() && IsBattlerSpriteVisible(BATTLE_PARTNER(battler2))) { - SetAverageBattlerPositions(battler2, gBattleAnimArgs[6], &sp0, &sp1); + SetAverageBattlerPositions(battler2, gBattleAnimArgs[6], &x, &y); } else { - sp0 = GetBattlerSpriteCoord(battler2, r10); - sp1 = GetBattlerSpriteCoord(battler2, sp4); + x = GetBattlerSpriteCoord(battler2, xCoordType); + y = GetBattlerSpriteCoord(battler2, yCoordType); } if (GetBattlerSide(battler2)) - sp0 += gBattleAnimArgs[3]; + x += gBattleAnimArgs[3]; else - sp0 -= gBattleAnimArgs[3]; + x -= gBattleAnimArgs[3]; - sp1 += gBattleAnimArgs[4]; - sprite->x = sprite->data[1] = r9; - sprite->y = sprite->data[3] = r6; - sprite->data[2] = sp0; - sprite->data[4] = sp1; + y += gBattleAnimArgs[4]; + sprite->x = sprite->data[1] = startX; + sprite->y = sprite->data[3] = startY; + sprite->data[2] = x; + sprite->data[4] = y; sprite->data[0] = gBattleAnimArgs[0]; InitAnimLinearTranslation(sprite); sprite->callback = AnimHyperVoiceRing_WaitEnd; @@ -2960,8 +2970,8 @@ void AnimTask_SpeedDust(u8 taskId) task->data[7] = 0; task->data[8] = 0; task->data[13] = 0; - task->data[14] = GetBattlerSpriteCoord(gBattleAnimAttacker, ANIM_ATTACKER); - task->data[15] = GetBattlerSpriteCoord(gBattleAnimAttacker, ANIM_TARGET); + task->data[14] = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X); + task->data[15] = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y); task->func = AnimTask_SpeedDust_Step; } @@ -3084,8 +3094,8 @@ static void AnimHealBellMusicNote(struct Sprite *sprite) gBattleAnimArgs[2] = -gBattleAnimArgs[2]; sprite->data[0] = gBattleAnimArgs[4]; - sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimAttacker, 0) + gBattleAnimArgs[2]; - sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimAttacker, 1) + gBattleAnimArgs[3]; + sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X) + gBattleAnimArgs[2]; + sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y) + gBattleAnimArgs[3]; sprite->callback = StartAnimLinearTranslation; StoreSpriteCallbackInData6(sprite, DestroyAnimSprite); SetMusicNotePalette(sprite, gBattleAnimArgs[5], gBattleAnimArgs[6]); @@ -3202,9 +3212,9 @@ static void AnimRedHeartProjectile(struct Sprite *sprite) InitSpritePosToAnimAttacker(sprite, TRUE); sprite->data[0] = 95; sprite->data[1] = sprite->x; - sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, 2); + sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2); sprite->data[3] = sprite->y; - sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, 3); + sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET); InitAnimLinearTranslation(sprite); sprite->callback = AnimRedHeartProjectile_Step; } @@ -3286,9 +3296,9 @@ void AnimTask_HeartsBackground(u8 taskId) SetGpuReg(REG_OFFSET_BG1HOFS, gBattle_BG1_X); SetGpuReg(REG_OFFSET_BG1VOFS, gBattle_BG1_Y); GetBattleAnimBg1Data(&animBg); - AnimLoadCompressedBgGfx(animBg.bgId, &gBattleAnimBgImage_Attract, animBg.tilesOffset); - AnimLoadCompressedBgTilemapHandleContest(&animBg, &gBattleAnimBgTilemap_Attract, FALSE); - LoadCompressedPalette(&gBattleAnimBgPalette_Attract, animBg.paletteId * 16, 32); + AnimLoadCompressedBgGfx(animBg.bgId, gBattleAnimBgImage_Attract, animBg.tilesOffset); + AnimLoadCompressedBgTilemapHandleContest(&animBg, gBattleAnimBgTilemap_Attract, FALSE); + LoadCompressedPalette(gBattleAnimBgPalette_Attract, animBg.paletteId * 16, 32); gTasks[taskId].func = AnimTask_HeartsBackground_Step; } @@ -3439,8 +3449,8 @@ static void AnimTask_ScaryFace_Step(u8 taskId) // arg 1: initial wave offset void AnimOrbitFast(struct Sprite *sprite) { - sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, 2); - sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, 3); + sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2); + sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET); sprite->affineAnimPaused = 1; sprite->data[0] = gBattleAnimArgs[0]; sprite->data[1] = gBattleAnimArgs[1]; @@ -3490,8 +3500,8 @@ static void AnimOrbitFast_Step(struct Sprite *sprite) // arg 0: initial wave offset void AnimOrbitScatter(struct Sprite *sprite) { - sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, 2); - sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, 3); + sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2); + sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET); sprite->data[0] = Sin(gBattleAnimArgs[0], 10); sprite->data[1] = Cos(gBattleAnimArgs[0], 7); sprite->callback = AnimOrbitScatter_Step; @@ -3516,8 +3526,8 @@ static void AnimSpitUpOrb_Step(struct Sprite *sprite) static void AnimSpitUpOrb(struct Sprite *sprite) { - sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, 2); - sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, 3); + sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2); + sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET); sprite->data[0] = Sin(gBattleAnimArgs[0], 10); sprite->data[1] = Cos(gBattleAnimArgs[0], 7); sprite->data[2] = gBattleAnimArgs[1]; @@ -3654,13 +3664,13 @@ static void AnimMovementWaves(struct Sprite *sprite) { if (!gBattleAnimArgs[0]) { - sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, 2); - sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, 3); + sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2); + sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET); } else { - sprite->x = GetBattlerSpriteCoord(gBattleAnimTarget, 2); - sprite->y = GetBattlerSpriteCoord(gBattleAnimTarget, 3); + sprite->x = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2); + sprite->y = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET); } if (!gBattleAnimArgs[1]) @@ -3708,8 +3718,8 @@ static void AnimJaggedMusicNote(struct Sprite *sprite) if (GetBattlerSide(battler) == B_SIDE_OPPONENT) gBattleAnimArgs[1] *= -1; - sprite->x = GetBattlerSpriteCoord(battler, 2) + gBattleAnimArgs[1]; - sprite->y = GetBattlerSpriteCoord(battler, 3) + gBattleAnimArgs[2]; + sprite->x = GetBattlerSpriteCoord(battler, BATTLER_COORD_X_2) + gBattleAnimArgs[1]; + sprite->y = GetBattlerSpriteCoord(battler, BATTLER_COORD_Y_PIC_OFFSET) + gBattleAnimArgs[2]; sprite->data[0] = 0; sprite->data[1] = (u16)sprite->x << 3; sprite->data[2] = (u16)sprite->y << 3; @@ -3841,8 +3851,8 @@ static void AnimGuardRing(struct Sprite *sprite) } else { - sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, 0); - sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, 1) + 40; + sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X); + sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y) + 40; } sprite->data[0] = 13; diff --git a/src/battle_anim_effects_3.c b/src/battle_anim_effects_3.c index 57805f8730..d9dc8f6184 100755 --- a/src/battle_anim_effects_3.c +++ b/src/battle_anim_effects_3.c @@ -1307,8 +1307,8 @@ static void AnimBlackSmoke_Step(struct Sprite *sprite) void AnimTask_SmokescreenImpact(u8 taskId) { SmokescreenImpact( - GetBattlerSpriteCoord(gBattleAnimTarget, 2) + 8, - GetBattlerSpriteCoord(gBattleAnimTarget, 3) + 8, + GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2) + 8, + GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET) + 8, 0); DestroyAnimVisualTask(taskId); } @@ -1343,8 +1343,8 @@ static void AnimWhiteHalo_Step2(struct Sprite *sprite) void AnimTealAlert(struct Sprite *sprite) { u16 rotation; - u8 x = GetBattlerSpriteCoord(gBattleAnimTarget, 2); - u8 y = GetBattlerSpriteCoord(gBattleAnimTarget, 3); + u8 x = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2); + u8 y = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET); InitSpritePosToAnimTarget(sprite, TRUE); @@ -1704,8 +1704,8 @@ static void AnimClappingHand(struct Sprite *sprite) { if (gBattleAnimArgs[3] == 0) { - sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, 0); - sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, 1); + sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X); + sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y); } sprite->x += gBattleAnimArgs[0]; @@ -1806,13 +1806,13 @@ static void AnimRapidSpin(struct Sprite *sprite) { if (gBattleAnimArgs[0] == 0) { - sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, 0) + gBattleAnimArgs[1]; - sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, 1); + sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X) + gBattleAnimArgs[1]; + sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y); } else { - sprite->x = GetBattlerSpriteCoord(gBattleAnimTarget, 0) + gBattleAnimArgs[1]; - sprite->y = GetBattlerSpriteCoord(gBattleAnimTarget, 1); + sprite->x = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X) + gBattleAnimArgs[1]; + sprite->y = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y); } sprite->y2 = gBattleAnimArgs[2]; @@ -1992,8 +1992,8 @@ void AnimTask_TormentAttacker(u8 taskId) task->data[0] = 0; task->data[1] = 0; - task->data[2] = GetBattlerSpriteCoord(gBattleAnimAttacker, 2); - task->data[3] = GetBattlerSpriteCoord(gBattleAnimAttacker, 3); + task->data[2] = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2); + task->data[3] = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET); task->data[4] = 32; task->data[5] = -20; task->data[6] = 0; @@ -2134,8 +2134,8 @@ static void AnimTriAttackTriangle(struct Sprite *sprite) sprite->x2 = 0; sprite->y2 = 0; sprite->data[0] = 20; - sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, 2); - sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, 3); + sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2); + sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET); sprite->callback = StartAnimLinearTranslation; } } @@ -2162,8 +2162,8 @@ static void AnimBatonPassPokeball(struct Sprite *sprite) switch (sprite->data[0]) { case 0: - sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, 2); - sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, 3); + sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2); + sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET); PrepareBattlerSpriteForRotScale(spriteId, ST_OAM_OBJ_NORMAL); sprite->data[1] = 256; sprite->data[2] = 256; @@ -2318,7 +2318,7 @@ static void AnimSwallowBlueOrb(struct Sprite *sprite) case 0: InitSpritePosToAnimAttacker(sprite, FALSE); sprite->data[1] = 0x900; - sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimAttacker, 3); + sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET); sprite->data[0]++; break; case 1: @@ -2379,7 +2379,7 @@ void AnimTask_TransformMon(u8 taskId) break; case 2: HandleSpeciesGfxDataChange(gBattleAnimAttacker, gBattleAnimTarget, gTasks[taskId].data[10], gBattleAnimArgs[1]); - sub_80A6BFC(&animBg, gBattleAnimAttacker); + GetBgDataForTransform(&animBg, gBattleAnimAttacker); if (IsContest()) position = B_POSITION_PLAYER_LEFT; @@ -2572,8 +2572,8 @@ static void AnimGreenStar(struct Sprite *sprite) if (xOffset > 31) xOffset = 32 - xOffset; - sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, 0) + xOffset; - sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, 1) + 32; + sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X) + xOffset; + sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y) + 32; sprite->data[1] = gBattleAnimArgs[0]; sprite->data[2] = gBattleAnimArgs[1]; @@ -3342,8 +3342,8 @@ void AnimTask_RolePlaySilhouette(u8 taskId) } } - coord1 = GetBattlerSpriteCoord(gBattleAnimAttacker, 0); - coord2 = GetBattlerSpriteCoord(gBattleAnimAttacker, 1); + coord1 = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X); + coord2 = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y); spriteId = CreateAdditionalMonSpriteForMoveAnim(species, isBackPic, 0, coord1 + xOffset, coord2, 5, personality, otId, gBattleAnimTarget, TRUE); gSprites[spriteId].oam.priority = priority; @@ -4261,7 +4261,7 @@ static void AnimSmellingSaltsHand(struct Sprite *sprite) sprite->oam.tileNum += 16; sprite->data[6] = gBattleAnimArgs[2]; sprite->data[7] = gBattleAnimArgs[1] == 0 ? -1 : 1; - sprite->y = GetBattlerSpriteCoord(battler, 3); + sprite->y = GetBattlerSpriteCoord(battler, BATTLER_COORD_Y_PIC_OFFSET); if (gBattleAnimArgs[1] == 0) { sprite->oam.matrixNum |= ST_OAM_HFLIP; @@ -4376,12 +4376,12 @@ static void AnimSmellingSaltExclamation(struct Sprite *sprite) { if (gBattleAnimArgs[0] == ANIM_ATTACKER) { - sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, 2); + sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2); sprite->y = GetBattlerSpriteCoordAttr(gBattleAnimAttacker, BATTLER_COORD_ATTR_TOP); } else { - sprite->x = GetBattlerSpriteCoord(gBattleAnimTarget, 2); + sprite->x = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2); sprite->y = GetBattlerSpriteCoordAttr(gBattleAnimTarget, BATTLER_COORD_ATTR_TOP); } @@ -4522,9 +4522,9 @@ void AnimTask_HelpingHandAttackerMovement(u8 taskId) { if (IsDoubleBattle() == TRUE) { - int x = GetBattlerSpriteCoord(gBattleAnimAttacker, 0); - int y = GetBattlerSpriteCoord(BATTLE_PARTNER(gBattleAnimAttacker), 0); - if (x > y) + int attackerX = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X); + int partnerX = GetBattlerSpriteCoord(BATTLE_PARTNER(gBattleAnimAttacker), BATTLER_COORD_X); + if (attackerX > partnerX) task->data[14] = 1; else task->data[14] = -1; @@ -4662,24 +4662,24 @@ static void AnimForesightMagnifyingGlass_Step(struct Sprite *sprite) sprite->data[6] = 0; case 0: case 4: - x = GetBattlerSpriteCoordAttr(sprite->data[7], 5) - 4; - y = GetBattlerSpriteCoordAttr(sprite->data[7], 3) - 4; + x = GetBattlerSpriteCoordAttr(sprite->data[7], BATTLER_COORD_ATTR_RIGHT) - 4; + y = GetBattlerSpriteCoordAttr(sprite->data[7], BATTLER_COORD_ATTR_BOTTOM) - 4; break; case 1: - x = GetBattlerSpriteCoordAttr(sprite->data[7], 5) - 4; - y = GetBattlerSpriteCoordAttr(sprite->data[7], 2) + 4; + x = GetBattlerSpriteCoordAttr(sprite->data[7], BATTLER_COORD_ATTR_RIGHT) - 4; + y = GetBattlerSpriteCoordAttr(sprite->data[7], BATTLER_COORD_ATTR_TOP) + 4; break; case 2: - x = GetBattlerSpriteCoordAttr(sprite->data[7], 4) + 4; - y = GetBattlerSpriteCoordAttr(sprite->data[7], 3) - 4; + x = GetBattlerSpriteCoordAttr(sprite->data[7], BATTLER_COORD_ATTR_LEFT) + 4; + y = GetBattlerSpriteCoordAttr(sprite->data[7], BATTLER_COORD_ATTR_BOTTOM) - 4; break; case 3: - x = GetBattlerSpriteCoordAttr(sprite->data[7], 4) + 4; - y = GetBattlerSpriteCoordAttr(sprite->data[7], 2) - 4; + x = GetBattlerSpriteCoordAttr(sprite->data[7], BATTLER_COORD_ATTR_LEFT) + 4; + y = GetBattlerSpriteCoordAttr(sprite->data[7], BATTLER_COORD_ATTR_TOP) - 4; break; case 5: - x = GetBattlerSpriteCoord(sprite->data[7], 2); - y = GetBattlerSpriteCoord(sprite->data[7], 3); + x = GetBattlerSpriteCoord(sprite->data[7], BATTLER_COORD_X_2); + y = GetBattlerSpriteCoord(sprite->data[7], BATTLER_COORD_Y_PIC_OFFSET); break; } @@ -4921,7 +4921,7 @@ void AnimBlockX(struct Sprite *sprite) y = -96; } - sprite->y = GetBattlerSpriteCoord(gBattleAnimTarget, 3); + sprite->y = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET); sprite->y2 = y; sprite->callback = AnimBlockX_Step; } @@ -5003,7 +5003,7 @@ void AnimTask_OdorSleuthMovement(u8 taskId) spriteId2 = CloneBattlerSpriteWithBlend(ANIM_TARGET); if (spriteId2 < 0) { - obj_delete_but_dont_free_vram(&gSprites[spriteId1]); + DestroySpriteWithActiveSheet(&gSprites[spriteId1]); DestroyAnimVisualTask(taskId); return; } @@ -5081,7 +5081,7 @@ static void MoveOdorSleuthClone(struct Sprite *sprite) if (sprite->data[5] < 0) { gTasks[sprite->data[6]].data[sprite->data[7]]--; - obj_delete_but_dont_free_vram(sprite); + DestroySpriteWithActiveSheet(sprite); } } break; diff --git a/src/battle_anim_electric.c b/src/battle_anim_electric.c index a10f08c9b9..dbb7b33dd3 100644 --- a/src/battle_anim_electric.c +++ b/src/battle_anim_electric.c @@ -603,7 +603,7 @@ static void AnimUnusedCirclingShock(struct Sprite *sprite) sprite->data[2] = gBattleAnimArgs[3]; sprite->data[3] = gBattleAnimArgs[4]; StoreSpriteCallbackInData6(sprite, DestroySpriteAndMatrix); - sprite->callback = TranslateSpriteInCircleOverDuration; + sprite->callback = TranslateSpriteInCircle; } void AnimSparkElectricity(struct Sprite *sprite) @@ -777,8 +777,8 @@ static void AnimElectricity(struct Sprite *sprite) // The vertical falling thunder bolt used in Thunder Wave/Shock/Bolt void AnimTask_ElectricBolt(u8 taskId) { - gTasks[taskId].data[0] = GetBattlerSpriteCoord(gBattleAnimTarget, 0) + gBattleAnimArgs[0]; - gTasks[taskId].data[1] = GetBattlerSpriteCoord(gBattleAnimTarget, 1) + gBattleAnimArgs[1]; + gTasks[taskId].data[0] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X) + gBattleAnimArgs[0]; + gTasks[taskId].data[1] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y) + gBattleAnimArgs[1]; gTasks[taskId].data[2] = gBattleAnimArgs[2]; gTasks[taskId].func = AnimTask_ElectricBolt_Step; } diff --git a/src/battle_anim_fight.c b/src/battle_anim_fight.c index 21f35173f8..fabcb73ac8 100644 --- a/src/battle_anim_fight.c +++ b/src/battle_anim_fight.c @@ -551,8 +551,8 @@ static void AnimFistOrFootRandomPos(struct Sprite *sprite) gBattleAnimArgs[2] = Random2() % 5; StartSpriteAnim(sprite, gBattleAnimArgs[2]); - sprite->x = GetBattlerSpriteCoord(battler, 2); - sprite->y = GetBattlerSpriteCoord(battler, 3); + sprite->x = GetBattlerSpriteCoord(battler, BATTLER_COORD_X_2); + sprite->y = GetBattlerSpriteCoord(battler, BATTLER_COORD_Y_PIC_OFFSET); xMod = GetBattlerSpriteCoordAttr(battler, BATTLER_COORD_ATTR_WIDTH) / 2; yMod = GetBattlerSpriteCoordAttr(battler, BATTLER_COORD_ATTR_HEIGHT) / 4; @@ -719,8 +719,8 @@ static void AnimStompFoot_Step(struct Sprite *sprite) if (--sprite->data[0] == -1) { sprite->data[0] = 6; - sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, 2); - sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, 3); + sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2); + sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET); sprite->callback = StartAnimLinearTranslation; StoreSpriteCallbackInData6(sprite, AnimStompFoot_End); @@ -764,13 +764,13 @@ static void AnimBrickBreakWall(struct Sprite *sprite) { if (gBattleAnimArgs[0] == ANIM_ATTACKER) { - sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, 0); - sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, 1); + sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X); + sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y); } else { - sprite->x = GetBattlerSpriteCoord(gBattleAnimTarget, 0); - sprite->y = GetBattlerSpriteCoord(gBattleAnimTarget, 1); + sprite->x = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X); + sprite->y = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y); } sprite->x += gBattleAnimArgs[1]; @@ -818,13 +818,13 @@ static void AnimBrickBreakWallShard(struct Sprite *sprite) { if (gBattleAnimArgs[0] == ANIM_ATTACKER) { - sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, 0) + gBattleAnimArgs[2]; - sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, 1) + gBattleAnimArgs[3]; + sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X) + gBattleAnimArgs[2]; + sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y) + gBattleAnimArgs[3]; } else { - sprite->x = GetBattlerSpriteCoord(gBattleAnimTarget, 0) + gBattleAnimArgs[2]; - sprite->y = GetBattlerSpriteCoord(gBattleAnimTarget, 1) + gBattleAnimArgs[3]; + sprite->x = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X) + gBattleAnimArgs[2]; + sprite->y = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y) + gBattleAnimArgs[3]; } sprite->oam.tileNum += gBattleAnimArgs[1] * 16; @@ -869,8 +869,8 @@ static void AnimSuperpowerOrb(struct Sprite *sprite) { if (gBattleAnimArgs[0] == ANIM_ATTACKER) { - sprite->x = GetBattlerSpriteCoord(gBattlerAttacker, 2); - sprite->y = GetBattlerSpriteCoord(gBattlerAttacker, 3); + sprite->x = GetBattlerSpriteCoord(gBattlerAttacker, BATTLER_COORD_X_2); + sprite->y = GetBattlerSpriteCoord(gBattlerAttacker, BATTLER_COORD_Y_PIC_OFFSET); sprite->oam.priority = GetBattlerSpriteBGPriority(gBattleAnimAttacker); sprite->data[7] = gBattleAnimTarget; } @@ -894,13 +894,13 @@ static void AnimSuperpowerOrb_Step(struct Sprite *sprite) sprite->data[0] = 16; sprite->data[1] = sprite->x; - sprite->data[2] = GetBattlerSpriteCoord(sprite->data[7], 2); + sprite->data[2] = GetBattlerSpriteCoord(sprite->data[7], BATTLER_COORD_X_2); sprite->data[3] = sprite->y; - sprite->data[4] = GetBattlerSpriteCoord(sprite->data[7], 3); + sprite->data[4] = GetBattlerSpriteCoord(sprite->data[7], BATTLER_COORD_Y_PIC_OFFSET); InitAnimLinearTranslation(sprite); StoreSpriteCallbackInData6(sprite, DestroySpriteAndMatrix); - sprite->callback = AnimTranslateLinear_WaitEnd; + sprite->callback = AnimTranslateLinear_WithFollowup; } } @@ -938,10 +938,10 @@ static void AnimSuperpowerRock_Step1(struct Sprite *sprite) } else { - s16 pos0 = GetBattlerSpriteCoord(gBattleAnimAttacker, 2); - s16 pos1 = GetBattlerSpriteCoord(gBattleAnimAttacker, 3); - s16 pos2 = GetBattlerSpriteCoord(gBattleAnimTarget, 2); - s16 pos3 = GetBattlerSpriteCoord(gBattleAnimTarget, 3); + s16 pos0 = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2); + s16 pos1 = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET); + s16 pos2 = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2); + s16 pos3 = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET); sprite->data[0] = pos2 - pos0; sprite->data[1] = pos3 - pos1; @@ -972,8 +972,8 @@ static void AnimSuperpowerFireball(struct Sprite *sprite) if (gBattleAnimArgs[0] == ANIM_ATTACKER) { - sprite->x = GetBattlerSpriteCoord(gBattlerAttacker, 2); - sprite->y = GetBattlerSpriteCoord(gBattlerAttacker, 3); + sprite->x = GetBattlerSpriteCoord(gBattlerAttacker, BATTLER_COORD_X_2); + sprite->y = GetBattlerSpriteCoord(gBattlerAttacker, BATTLER_COORD_Y_PIC_OFFSET); battler = gBattleAnimTarget; sprite->oam.priority = GetBattlerSpriteBGPriority(gBattleAnimAttacker); } @@ -990,13 +990,13 @@ static void AnimSuperpowerFireball(struct Sprite *sprite) sprite->data[0] = 16; sprite->data[1] = sprite->x; - sprite->data[2] = GetBattlerSpriteCoord(battler, 2); + sprite->data[2] = GetBattlerSpriteCoord(battler, BATTLER_COORD_X_2); sprite->data[3] = sprite->y; - sprite->data[4] = GetBattlerSpriteCoord(battler, 3); + sprite->data[4] = GetBattlerSpriteCoord(battler, BATTLER_COORD_Y_PIC_OFFSET); InitAnimLinearTranslation(sprite); StoreSpriteCallbackInData6(sprite, DestroyAnimSprite); - sprite->callback = AnimTranslateLinear_WaitEnd; + sprite->callback = AnimTranslateLinear_WithFollowup; } static void AnimArmThrustHit_Step(struct Sprite *sprite) @@ -1011,8 +1011,8 @@ static void AnimArmThrustHit(struct Sprite *sprite) { u8 turn; - sprite->x = GetBattlerSpriteCoord(gBattleAnimTarget, 2); - sprite->y = GetBattlerSpriteCoord(gBattleAnimTarget, 3); + sprite->x = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2); + sprite->y = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET); sprite->data[1] = gBattleAnimArgs[3]; sprite->data[2] = gBattleAnimArgs[0]; sprite->data[3] = gBattleAnimArgs[1]; diff --git a/src/battle_anim_fire.c b/src/battle_anim_fire.c index 05ba936296..2c0d4d0c71 100644 --- a/src/battle_anim_fire.c +++ b/src/battle_anim_fire.c @@ -558,7 +558,7 @@ static void AnimFireSpiralInward(struct Sprite *sprite) StoreSpriteCallbackInData6(sprite, DestroyAnimSprite); - sprite->callback = TranslateSpriteInGrowingCircleOverDuration; + sprite->callback = TranslateSpriteInGrowingCircle; sprite->callback(sprite); } @@ -751,9 +751,9 @@ static void AnimFireRing_Step1(struct Sprite *sprite) { sprite->data[0] = 0x19; sprite->data[1] = sprite->x; - sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, 2); + sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2); sprite->data[3] = sprite->y; - sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, 3); + sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET); InitAnimLinearTranslation(sprite); @@ -767,8 +767,8 @@ static void AnimFireRing_Step2(struct Sprite *sprite) { sprite->data[0] = 0; - sprite->x = GetBattlerSpriteCoord(gBattleAnimTarget, 2); - sprite->y = GetBattlerSpriteCoord(gBattleAnimTarget, 3); + sprite->x = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2); + sprite->y = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET); sprite->y2 = 0; sprite->x2 = 0; @@ -1187,9 +1187,9 @@ static void AnimWillOWispOrb(struct Sprite *sprite) sprite->data[0] = 256; sprite->data[1] = sprite->x; - sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, 2); + sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2); sprite->data[3] = sprite->y; - sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, 3); + sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET); InitAnimLinearTranslationWithSpeed(sprite); sprite->callback = AnimWillOWispOrb_Step; diff --git a/src/battle_anim_flying.c b/src/battle_anim_flying.c index bc9b5a12fe..da52881d98 100644 --- a/src/battle_anim_flying.c +++ b/src/battle_anim_flying.c @@ -893,8 +893,8 @@ static void AnimFallingFeather_Step(struct Sprite *sprite) static void AnimUnusedBubbleThrow(struct Sprite *sprite) { sprite->oam.priority = GetBattlerSpriteBGPriority(gBattleAnimTarget); - sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, 2); - sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, 3); + sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2); + sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET); sprite->callback = TranslateAnimSpriteToTargetMonLocation; } @@ -953,8 +953,8 @@ void AnimTask_DrillPeckHitSplats(u8 task) gBattleAnimArgs[3] = 3; CreateSpriteAndAnimate(&gFlashingHitSplatSpriteTemplate, - GetBattlerSpriteCoord(gBattleAnimTarget, 2), - GetBattlerSpriteCoord(gBattleAnimTarget, 3), + GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2), + GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET), 3); } @@ -985,7 +985,7 @@ static void AnimBounceBallLand(struct Sprite *sprite) switch (sprite->data[0]) { case 0: - sprite->y = GetBattlerSpriteCoord(gBattleAnimTarget, 1); + sprite->y = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y); sprite->y2 = -sprite->y - 32; sprite->data[0]++; break; @@ -1054,13 +1054,13 @@ static void AnimDiveWaterSplash(struct Sprite *sprite) case 0: if (!gBattleAnimArgs[0]) { - sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, 0); - sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, 1); + sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X); + sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y); } else { - sprite->x = GetBattlerSpriteCoord(gBattleAnimTarget, 0); - sprite->y = GetBattlerSpriteCoord(gBattleAnimTarget, 1); + sprite->x = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X); + sprite->y = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y); } sprite->data[1] = 0x200; @@ -1121,13 +1121,13 @@ static void AnimSprayWaterDroplet(struct Sprite *sprite) if (gBattleAnimArgs[1] == 0) { - sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, 0); - sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, 1) + 32; + sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X); + sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y) + 32; } else { - sprite->x = GetBattlerSpriteCoord(gBattleAnimTarget, 0); - sprite->y = GetBattlerSpriteCoord(gBattleAnimTarget, 1) + 32; + sprite->x = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X); + sprite->y = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y) + 32; } sprite->callback = AnimSprayWaterDroplet_Step; @@ -1188,8 +1188,8 @@ static void AnimSkyAttackBird(struct Sprite *sprite) s16 posx = sprite->x; s16 posy = sprite->y; - sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, 2); - sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, 3); + sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2); + sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET); sprite->data[4] = sprite->x << 4; sprite->data[5] = sprite->y << 4; diff --git a/src/battle_anim_ghost.c b/src/battle_anim_ghost.c index adca0dd2c7..d9cbc919cd 100644 --- a/src/battle_anim_ghost.c +++ b/src/battle_anim_ghost.c @@ -275,9 +275,9 @@ static void AnimConfuseRayBallBounce(struct Sprite *sprite) InitSpritePosToAnimAttacker(sprite, TRUE); sprite->data[0] = gBattleAnimArgs[2]; sprite->data[1] = sprite->x; - sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, 2); + sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2); sprite->data[3] = sprite->y; - sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, 3); + sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET); InitAnimLinearTranslationWithSpeed(sprite); sprite->callback = AnimConfuseRayBallBounce_Step1; sprite->data[6] = 16; @@ -453,8 +453,8 @@ void AnimShadowBall(struct Sprite *sprite) s16 oldPosX = sprite->x; s16 oldPosY = sprite->y; - sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, 2); - sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, 3); + sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2); + sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET); sprite->data[0] = 0; sprite->data[1] = gBattleAnimArgs[0]; sprite->data[2] = gBattleAnimArgs[1]; @@ -484,8 +484,8 @@ static void AnimShadowBall_Step(struct Sprite *sprite) sprite->data[2] -= 1; if (sprite->data[2] > 0) break; - sprite->data[1] = GetBattlerSpriteCoord(gBattleAnimTarget, 2); - sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, 3); + sprite->data[1] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2); + sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET); sprite->data[4] = sprite->x << 4; sprite->data[5] = sprite->y << 4; sprite->data[6] = ((sprite->data[1] - sprite->x) << 4) / sprite->data[3]; @@ -500,8 +500,8 @@ static void AnimShadowBall_Step(struct Sprite *sprite) sprite->data[3] -= 1; if (sprite->data[3] > 0) break; - sprite->x = GetBattlerSpriteCoord(gBattleAnimTarget, 2); - sprite->y = GetBattlerSpriteCoord(gBattleAnimTarget, 3); + sprite->x = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2); + sprite->y = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET); sprite->data[0] += 1; break; case 3: @@ -620,7 +620,7 @@ static void AnimTask_NightmareClone_Step(u8 taskId) break; if (task->data[1] <= 80) break; - obj_delete_but_dont_free_vram(&gSprites[task->data[0]]); + DestroySpriteWithActiveSheet(&gSprites[task->data[0]]); task->data[4] = 1; break; case 1: @@ -706,9 +706,9 @@ static void AnimTask_SpiteTargetShadow_Step1(u8 taskId) startLine = 0; if (position == 1) - task->data[10] = ScanlineEffect_InitWave(startLine, startLine + 64, 2, 6, 0, 4, 1); + task->data[10] = ScanlineEffect_InitWave(startLine, startLine + 64, 2, 6, 0, SCANLINE_EFFECT_REG_BG1HOFS, 1); else - task->data[10] = ScanlineEffect_InitWave(startLine, startLine + 64, 2, 6, 0, 8, 1); + task->data[10] = ScanlineEffect_InitWave(startLine, startLine + 64, 2, 6, 0, SCANLINE_EFFECT_REG_BG2HOFS, 1); task->data[15]++; break; @@ -776,7 +776,7 @@ static void AnimTask_SpiteTargetShadow_Step3(u8 taskId) break; case 2: gSprites[task->data[14]].invisible = TRUE; - obj_delete_but_dont_free_vram(&gSprites[task->data[0]]); + DestroySpriteWithActiveSheet(&gSprites[task->data[0]]); FreeSpritePaletteByTag(ANIM_TAG_BENT_SPOON); SetGpuReg(REG_OFFSET_BLDCNT, 0); SetGpuReg(REG_OFFSET_BLDALPHA, 0); @@ -800,17 +800,17 @@ static void AnimDestinyBondWhiteShadow(struct Sprite *sprite) if (gBattleAnimArgs[0] == 0) { - battler1X = GetBattlerSpriteCoord(gBattleAnimAttacker, 0); - battler1Y = GetBattlerSpriteCoord(gBattleAnimAttacker, 1) + 28; - battler2X = GetBattlerSpriteCoord(gBattleAnimTarget, 0); - battler2Y = GetBattlerSpriteCoord(gBattleAnimTarget, 1) + 28; + battler1X = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X); + battler1Y = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y) + 28; + battler2X = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X); + battler2Y = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y) + 28; } else { - battler1X = GetBattlerSpriteCoord(gBattleAnimTarget, 0); - battler1Y = GetBattlerSpriteCoord(gBattleAnimTarget, 1) + 28; - battler2X = GetBattlerSpriteCoord(gBattleAnimAttacker, 0); - battler2Y = GetBattlerSpriteCoord(gBattleAnimAttacker, 1) + 28; + battler1X = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X); + battler1Y = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y) + 28; + battler2X = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X); + battler2Y = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y) + 28; } yDiff = battler2Y - battler1Y; @@ -860,7 +860,7 @@ void AnimTask_DestinyBondWhiteShadow(u8 taskId) task->data[9] = 16; task->data[10] = gBattleAnimArgs[0]; - baseX = GetBattlerSpriteCoord(gBattleAnimAttacker, 2); + baseX = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2); baseY = GetBattlerSpriteCoordAttr(gBattleAnimAttacker, BATTLER_COORD_ATTR_BOTTOM); if (!IsContest()) { @@ -877,7 +877,7 @@ void AnimTask_DestinyBondWhiteShadow(u8 taskId) if (spriteId != MAX_SPRITES) { - x = GetBattlerSpriteCoord(battler, 2); + x = GetBattlerSpriteCoord(battler, BATTLER_COORD_X_2); y = GetBattlerSpriteCoordAttr(battler, BATTLER_COORD_ATTR_BOTTOM); gSprites[spriteId].data[0] = baseX << 4; gSprites[spriteId].data[1] = baseY << 4; @@ -1236,7 +1236,7 @@ void AnimTask_GrudgeFlames(u8 taskId) task->data[0] = 0; task->data[1] = 16; - task->data[9] = GetBattlerSpriteCoord(gBattleAnimAttacker, 2); + task->data[9] = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2); task->data[10] = GetBattlerYCoordWithElevation(gBattleAnimAttacker); task->data[11] = (GetBattlerSpriteCoordAttr(gBattleAnimAttacker, BATTLER_COORD_ATTR_WIDTH) / 2) + 8; task->data[7] = 0; diff --git a/src/battle_anim_ground.c b/src/battle_anim_ground.c index aca6b819d4..b362c3bb22 100644 --- a/src/battle_anim_ground.c +++ b/src/battle_anim_ground.c @@ -160,11 +160,11 @@ const struct SpriteTemplate gMudBombToss = // a boomerang. After hitting the target mon, it comes back to the user. static void AnimBonemerangProjectile(struct Sprite *sprite) { - sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, 2); - sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, 3); + sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2); + sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET); sprite->data[0] = 20; - sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, 2); - sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, 3); + sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2); + sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET); sprite->data[5] = -40; InitAnimArcTranslation(sprite); sprite->callback = AnimBonemerangProjectile_Step; @@ -179,8 +179,8 @@ static void AnimBonemerangProjectile_Step(struct Sprite *sprite) sprite->y2 = 0; sprite->x2 = 0; sprite->data[0] = 20; - sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimAttacker, 2); - sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimAttacker, 3); + sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2); + sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET); sprite->data[5] = 40; InitAnimArcTranslation(sprite); sprite->callback = AnimBonemerangProjectile_End; @@ -207,8 +207,8 @@ static void AnimBoneHitProjectile(struct Sprite *sprite) gBattleAnimArgs[2] = -gBattleAnimArgs[2]; sprite->data[0] = gBattleAnimArgs[4]; - sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, 2) + gBattleAnimArgs[2]; - sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, 3) + gBattleAnimArgs[3]; + sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2) + gBattleAnimArgs[2]; + sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET) + gBattleAnimArgs[3]; sprite->callback = StartAnimLinearTranslation; StoreSpriteCallbackInData6(sprite, DestroyAnimSprite); } @@ -226,8 +226,8 @@ void AnimDirtScatter(struct Sprite *sprite) InitSpritePosToAnimAttacker(sprite, 1); - targetXPos = GetBattlerSpriteCoord2(gBattleAnimTarget, 2); - targetYPos = GetBattlerSpriteCoord2(gBattleAnimTarget, 3); + targetXPos = GetBattlerSpriteCoord2(gBattleAnimTarget, BATTLER_COORD_X_2); + targetYPos = GetBattlerSpriteCoord2(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET); xOffset = Random2() & 0x1F; yOffset = Random2() & 0x1F; @@ -253,8 +253,8 @@ void AnimMudSportDirt(struct Sprite *sprite) sprite->oam.tileNum++; if (gBattleAnimArgs[0] == 0) { - sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, 2) + gBattleAnimArgs[1]; - sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, 3) + gBattleAnimArgs[2]; + sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2) + gBattleAnimArgs[1]; + sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET) + gBattleAnimArgs[2]; sprite->data[0] = gBattleAnimArgs[1] > 0 ? 1 : -1; sprite->callback = AnimMudSportDirtRising; } @@ -537,7 +537,7 @@ void AnimDirtPlumeParticle(struct Sprite *sprite) gBattleAnimArgs[2] *= -1; } - sprite->x = GetBattlerSpriteCoord(battler, 2) + xOffset; + sprite->x = GetBattlerSpriteCoord(battler, BATTLER_COORD_X_2) + xOffset; sprite->y = GetBattlerYCoordWithElevation(battler) + 30; sprite->data[0] = gBattleAnimArgs[5]; sprite->data[2] = sprite->x + gBattleAnimArgs[2]; @@ -568,7 +568,7 @@ static void AnimDigDirtMound(struct Sprite *sprite) else battler = gBattleAnimTarget; - sprite->x = GetBattlerSpriteCoord(battler, 0) - 16 + (gBattleAnimArgs[1] * 32); + sprite->x = GetBattlerSpriteCoord(battler, BATTLER_COORD_X) - 16 + (gBattleAnimArgs[1] * 32); sprite->y = GetBattlerYCoordWithElevation(battler) + 32; sprite->oam.tileNum += gBattleAnimArgs[1] * 8; StoreSpriteCallbackInData6(sprite, DestroyAnimSprite); diff --git a/src/battle_anim_ice.c b/src/battle_anim_ice.c index bc1ecbf69e..db61ef5a04 100644 --- a/src/battle_anim_ice.c +++ b/src/battle_anim_ice.c @@ -587,7 +587,7 @@ static void AvalancheAnim_Step(struct Sprite *sprite) sprite->data[5] = gBattleAnimArgs[2]; StoreSpriteCallbackInData6(sprite, AvalancheAnim_Step2); - sprite->callback = TranslateSpriteInEllipseOverDuration; + sprite->callback = TranslateSpriteInEllipse; sprite->callback(sprite); } @@ -602,7 +602,7 @@ static void AvalancheAnim_Step2(struct Sprite *sprite) sprite->data[4] = -24; StoreSpriteCallbackInData6(sprite, DestroySpriteAndMatrix); - sprite->callback = TranslateSpriteInEllipseOverDuration; + sprite->callback = TranslateSpriteInEllipse; sprite->callback(sprite); } @@ -621,7 +621,7 @@ static void AnimUnusedIceCrystalThrow(struct Sprite *sprite) sprite->data[2] = gBattleAnimArgs[2] + targetX; sprite->data[3] = gBattleAnimArgs[1] + attackerY; sprite->data[4] = gBattleAnimArgs[3] + targetY; - sub_80A64EC(sprite); + ConvertPosDataToTranslateLinearData(sprite); for (;(targetX >= -32 && targetX <= DISPLAY_WIDTH + 32) && (targetY >= -32 && targetY <= DISPLAY_HEIGHT + 32); targetX += sprite->data[1], targetY += sprite->data[2]) @@ -640,7 +640,7 @@ static void AnimUnusedIceCrystalThrow(struct Sprite *sprite) sprite->data[2] = targetX; sprite->data[3] = attackerY; sprite->data[4] = targetY; - sub_80A64EC(sprite); + ConvertPosDataToTranslateLinearData(sprite); sprite->data[3] = gBattleAnimArgs[5]; sprite->data[4] = gBattleAnimArgs[6]; sprite->callback = AnimUnusedIceCrystalThrow_Step; @@ -675,7 +675,7 @@ static void AnimIcePunchSwirlingParticle(struct Sprite *sprite) sprite->data[3] = 30; sprite->data[4] = -512; StoreSpriteCallbackInData6(sprite, DestroyAnimSprite); - sprite->callback = TranslateSpriteInGrowingCircleOverDuration; + sprite->callback = TranslateSpriteInGrowingCircle; sprite->callback(sprite); } diff --git a/src/battle_anim_mon_movement.c b/src/battle_anim_mon_movement.c index 0cf6bafd0d..d15cf63425 100644 --- a/src/battle_anim_mon_movement.c +++ b/src/battle_anim_mon_movement.c @@ -449,14 +449,14 @@ static void DoHorizontalLunge(struct Sprite *sprite) sprite->data[3] = gBattlerSpriteIds[gBattleAnimAttacker]; sprite->data[4] = gBattleAnimArgs[0]; StoreSpriteCallbackInData6(sprite, ReverseHorizontalLungeDirection); - sprite->callback = TranslateMonSpriteLinear; + sprite->callback = TranslateSpriteLinearById; } static void ReverseHorizontalLungeDirection(struct Sprite *sprite) { sprite->data[0] = sprite->data[4]; sprite->data[1] = -sprite->data[1]; - sprite->callback = TranslateMonSpriteLinear; + sprite->callback = TranslateSpriteLinearById; StoreSpriteCallbackInData6(sprite, DestroyAnimSprite); } @@ -476,14 +476,14 @@ static void DoVerticalDip(struct Sprite *sprite) sprite->data[3] = spriteId; sprite->data[4] = gBattleAnimArgs[0]; StoreSpriteCallbackInData6(sprite, ReverseVerticalDipDirection); - sprite->callback = TranslateMonSpriteLinear; + sprite->callback = TranslateSpriteLinearById; } static void ReverseVerticalDipDirection(struct Sprite *sprite) { sprite->data[0] = sprite->data[4]; sprite->data[2] = -sprite->data[2]; - sprite->callback = TranslateMonSpriteLinear; + sprite->callback = TranslateSpriteLinearById; StoreSpriteCallbackInData6(sprite, DestroyAnimSprite); } @@ -589,7 +589,7 @@ static void SlideMonToOffset(struct Sprite *sprite) sprite->data[5] = monSpriteId; sprite->invisible = TRUE; StoreSpriteCallbackInData6(sprite, DestroyAnimSprite); - sprite->callback = TranslateMonSpriteLinearFixedPoint; + sprite->callback = TranslateSpriteLinearByIdFixedPoint; } static void SlideMonToOffsetAndBack(struct Sprite *sprite) @@ -630,7 +630,7 @@ static void SlideMonToOffsetAndBack(struct Sprite *sprite) { StoreSpriteCallbackInData6(sprite, SlideMonToOffsetAndBack_End); } - sprite->callback = TranslateMonSpriteLinearFixedPoint; + sprite->callback = TranslateSpriteLinearByIdFixedPoint; } diff --git a/src/battle_anim_mons.c b/src/battle_anim_mons.c index 96a7428021..32eb525eb3 100644 --- a/src/battle_anim_mons.c +++ b/src/battle_anim_mons.c @@ -20,23 +20,21 @@ extern const struct OamData gOamData_AffineNormal_ObjNormal_64x64; -static void sub_80A6FB4(struct Sprite *sprite); +static void AnimTranslateLinear_WithFollowup_SetCornerVecX(struct Sprite *sprite); static void AnimFastTranslateLinearWaitEnd(struct Sprite *sprite); static void AnimThrowProjectile_Step(struct Sprite *sprite); -static void sub_80A8DFC(struct Sprite *sprite); +static void AnimBattlerTrace(struct Sprite *sprite); static void AnimWeatherBallUp_Step(struct Sprite *sprite); static u16 GetBattlerYDeltaFromSpriteId(u8 spriteId); static void AnimTask_BlendPalInAndOutSetup(struct Task *task); static void AnimTask_AlphaFadeIn_Step(u8 taskId); static void AnimTask_AttackerPunchWithTrace_Step(u8 taskId); static void AnimTask_BlendMonInAndOut_Step(u8 taskId); -static bool8 sub_80A7238(void); -static void sub_80A8D78(struct Task *task, u8 taskId); +static bool8 ShouldRotScaleSpeciesBeFlipped(void); +static void CreateBattlerTrace(struct Task *task, u8 taskId); -// EWRAM vars -EWRAM_DATA static union AffineAnimCmd *gAnimTaskAffineAnim = NULL; +EWRAM_DATA static union AffineAnimCmd *sAnimTaskAffineAnim = NULL; -// Const rom data static const struct UCoords8 sBattlerCoords[][MAX_BATTLERS_COUNT] = { { // Single battle @@ -56,10 +54,10 @@ static const struct UCoords8 sBattlerCoords[][MAX_BATTLERS_COUNT] = // One entry for each of the four Castform forms. const struct MonCoords gCastformFrontSpriteCoords[NUM_CASTFORM_FORMS] = { - [CASTFORM_NORMAL] = { .size = 0x44, .y_offset = 17 }, - [CASTFORM_FIRE] = { .size = 0x66, .y_offset = 9 }, - [CASTFORM_WATER] = { .size = 0x46, .y_offset = 9 }, - [CASTFORM_ICE] = { .size = 0x86, .y_offset = 8 }, + [CASTFORM_NORMAL] = { .size = MON_COORDS_SIZE(32, 32), .y_offset = 17 }, + [CASTFORM_FIRE] = { .size = MON_COORDS_SIZE(48, 48), .y_offset = 9 }, + [CASTFORM_WATER] = { .size = MON_COORDS_SIZE(32, 48), .y_offset = 9 }, + [CASTFORM_ICE] = { .size = MON_COORDS_SIZE(64, 48), .y_offset = 8 }, }; static const u8 sCastformElevations[NUM_CASTFORM_FORMS] = @@ -285,8 +283,8 @@ u8 GetBattlerSpriteFinal_Y(u8 battlerId, u16 species, bool8 a3) { if (GetBattlerSide(battlerId) == B_SIDE_PLAYER) y += 8; - if (y > 104) - y = 104; + if (y > DISPLAY_HEIGHT - MON_PIC_HEIGHT + 8) + y = DISPLAY_HEIGHT - MON_PIC_HEIGHT + 8; } return y; } @@ -383,7 +381,7 @@ u8 GetAnimBattlerSpriteId(u8 animBattler) } else { - return 0xff; + return SPRITE_NONE; } } else if (animBattler == ANIM_TARGET) @@ -395,13 +393,13 @@ u8 GetAnimBattlerSpriteId(u8 animBattler) } else { - return 0xff; + return SPRITE_NONE; } } else if (animBattler == ANIM_ATK_PARTNER) { if (!IsBattlerSpriteVisible(BATTLE_PARTNER(gBattleAnimAttacker))) - return 0xff; + return SPRITE_NONE; else return gBattlerSpriteIds[BATTLE_PARTNER(gBattleAnimAttacker)]; } @@ -410,7 +408,7 @@ u8 GetAnimBattlerSpriteId(u8 animBattler) if (IsBattlerSpriteVisible(BATTLE_PARTNER(gBattleAnimTarget))) return gBattlerSpriteIds[BATTLE_PARTNER(gBattleAnimTarget)]; else - return 0xff; + return SPRITE_NONE; } } @@ -426,18 +424,38 @@ void SetCallbackToStoredInData6(struct Sprite *sprite) sprite->callback = (void (*)(struct Sprite *))callback; } -void TranslateSpriteInCircleOverDuration(struct Sprite *sprite) +// Sprite data for TranslateSpriteInCircle/Ellipse and related +#define sCirclePos data[0] +#define sAmplitude data[1] +#define sCircleSpeed data[2] +#define sDuration data[3] + +// TranslateSpriteInGrowingCircle +#define sAmplitudeSpeed data[4] +#define sAmplitudeChange data[5] + +// TranslateSpriteInEllipse +#define sAmplitudeX sAmplitude +#define sAmplitudeY data[4] + +// TranslateSpriteInWavePattern +#define sCirclePosX sCirclePos +#define sCircleSpeedX sCircleSpeed +#define sCirclePosY data[4] +#define sCircleSpeedY data[5] + +void TranslateSpriteInCircle(struct Sprite *sprite) { - if (sprite->data[3]) + if (sprite->sDuration) { - sprite->x2 = Sin(sprite->data[0], sprite->data[1]); - sprite->y2 = Cos(sprite->data[0], sprite->data[1]); - sprite->data[0] += sprite->data[2]; - if (sprite->data[0] >= 0x100) - sprite->data[0] -= 0x100; - else if (sprite->data[0] < 0) - sprite->data[0] += 0x100; - sprite->data[3]--; + sprite->x2 = Sin(sprite->sCirclePos, sprite->sAmplitude); + sprite->y2 = Cos(sprite->sCirclePos, sprite->sAmplitude); + sprite->sCirclePos += sprite->sCircleSpeed; + if (sprite->sCirclePos >= 0x100) + sprite->sCirclePos -= 0x100; + else if (sprite->sCirclePos < 0) + sprite->sCirclePos += 0x100; + sprite->sDuration--; } else { @@ -445,19 +463,19 @@ void TranslateSpriteInCircleOverDuration(struct Sprite *sprite) } } -void TranslateSpriteInGrowingCircleOverDuration(struct Sprite *sprite) +void TranslateSpriteInGrowingCircle(struct Sprite *sprite) { - if (sprite->data[3]) + if (sprite->sDuration) { - sprite->x2 = Sin(sprite->data[0], (sprite->data[5] >> 8) + sprite->data[1]); - sprite->y2 = Cos(sprite->data[0], (sprite->data[5] >> 8) + sprite->data[1]); - sprite->data[0] += sprite->data[2]; - sprite->data[5] += sprite->data[4]; - if (sprite->data[0] >= 0x100) - sprite->data[0] -= 0x100; - else if (sprite->data[0] < 0) - sprite->data[0] += 0x100; - sprite->data[3]--; + sprite->x2 = Sin(sprite->sCirclePos, (sprite->sAmplitudeChange >> 8) + sprite->sAmplitude); + sprite->y2 = Cos(sprite->sCirclePos, (sprite->sAmplitudeChange >> 8) + sprite->sAmplitude); + sprite->sCirclePos += sprite->sCircleSpeed; + sprite->sAmplitudeChange += sprite->sAmplitudeSpeed; + if (sprite->sCirclePos >= 0x100) + sprite->sCirclePos -= 0x100; + else if (sprite->sCirclePos < 0) + sprite->sCirclePos += 0x100; + sprite->sDuration--; } else { @@ -465,23 +483,28 @@ void TranslateSpriteInGrowingCircleOverDuration(struct Sprite *sprite) } } -void sub_80A63C8(struct Sprite *sprite) +// Unused +// Exact shape depends on arguments. Can move in a figure-8-like pattern, or circular, etc. +static void TranslateSpriteInWavePattern(struct Sprite *sprite) { - if (sprite->data[3]) + if (sprite->sDuration) { - sprite->x2 = Sin(sprite->data[0], sprite->data[1]); - sprite->y2 = Cos(sprite->data[4], sprite->data[1]); - sprite->data[0] += sprite->data[2]; - sprite->data[4] += sprite->data[5]; - if (sprite->data[0] >= 0x100) - sprite->data[0] -= 0x100; - else if (sprite->data[0] < 0) - sprite->data[0] += 0x100; - if (sprite->data[4] >= 0x100) - sprite->data[4] -= 0x100; - else if (sprite->data[4] < 0) - sprite->data[4] += 0x100; - sprite->data[3]--; + sprite->x2 = Sin(sprite->sCirclePosX, sprite->sAmplitude); + sprite->y2 = Cos(sprite->sCirclePosY, sprite->sAmplitude); + sprite->sCirclePosX += sprite->sCircleSpeedX; + sprite->sCirclePosY += sprite->sCircleSpeedY; + + if (sprite->sCirclePosX >= 0x100) + sprite->sCirclePosX -= 0x100; + else if (sprite->sCirclePosX < 0) + sprite->sCirclePosX += 0x100; + + if (sprite->sCirclePosY >= 0x100) + sprite->sCirclePosY -= 0x100; + else if (sprite->sCirclePosY < 0) + sprite->sCirclePosY += 0x100; + + sprite->sDuration--; } else { @@ -489,18 +512,18 @@ void sub_80A63C8(struct Sprite *sprite) } } -void TranslateSpriteInEllipseOverDuration(struct Sprite *sprite) +void TranslateSpriteInEllipse(struct Sprite *sprite) { - if (sprite->data[3]) + if (sprite->sDuration) { - sprite->x2 = Sin(sprite->data[0], sprite->data[1]); - sprite->y2 = Cos(sprite->data[0], sprite->data[4]); - sprite->data[0] += sprite->data[2]; - if (sprite->data[0] >= 0x100) - sprite->data[0] -= 0x100; - else if (sprite->data[0] < 0) - sprite->data[0] += 0x100; - sprite->data[3]--; + sprite->x2 = Sin(sprite->sCirclePos, sprite->sAmplitudeX); + sprite->y2 = Cos(sprite->sCirclePos, sprite->sAmplitudeY); + sprite->sCirclePos += sprite->sCircleSpeed; + if (sprite->sCirclePos >= 0x100) + sprite->sCirclePos -= 0x100; + else if (sprite->sCirclePos < 0) + sprite->sCirclePos += 0x100; + sprite->sDuration--; } else { @@ -508,6 +531,19 @@ void TranslateSpriteInEllipseOverDuration(struct Sprite *sprite) } } +#undef sCirclePos +#undef sAmplitude +#undef sCircleSpeed +#undef sDuration +#undef sAmplitudeSpeed +#undef sAmplitudeChange +#undef sAmplitudeX +#undef sAmplitudeY +#undef sCirclePosX +#undef sCircleSpeedX +#undef sCirclePosY +#undef sCircleSpeedY + // Simply waits until the sprite's data[0] hits zero. // This is used to let sprite anims or affine anims to run for a designated // duration. @@ -519,34 +555,47 @@ void WaitAnimForDuration(struct Sprite *sprite) SetCallbackToStoredInData6(sprite); } -static void sub_80A64D0(struct Sprite *sprite) +// Sprite data for ConvertPosDataToTranslateLinearData +#define sStepsX data[0] +#define sStartX data[1] +#define sTargetX data[2] +#define sStartY data[3] +#define sTargetY data[4] + +// Sprite data for TranslateSpriteLinear +#define sMoveSteps data[0] +#define sSpeedX data[1] +#define sSpeedY data[2] + +// Functionally unused +static void AnimPosToTranslateLinear(struct Sprite *sprite) { - sub_80A64EC(sprite); + ConvertPosDataToTranslateLinearData(sprite); sprite->callback = TranslateSpriteLinear; sprite->callback(sprite); } -void sub_80A64EC(struct Sprite *sprite) +void ConvertPosDataToTranslateLinearData(struct Sprite *sprite) { s16 old; int xDiff; - if (sprite->data[1] > sprite->data[2]) - sprite->data[0] = -sprite->data[0]; - xDiff = sprite->data[2] - sprite->data[1]; - old = sprite->data[0]; - sprite->data[0] = abs(xDiff / sprite->data[0]); - sprite->data[2] = (sprite->data[4] - sprite->data[3]) / sprite->data[0]; - sprite->data[1] = old; + if (sprite->sStartX > sprite->sTargetX) + sprite->sStepsX = -sprite->sStepsX; + xDiff = sprite->sTargetX - sprite->sStartX; + old = sprite->sStepsX; + sprite->sMoveSteps = abs(xDiff / sprite->sStepsX); + sprite->sSpeedY = (sprite->sTargetY - sprite->sStartY) / sprite->sMoveSteps; + sprite->sSpeedX = old; } void TranslateSpriteLinear(struct Sprite *sprite) { - if (sprite->data[0] > 0) + if (sprite->sMoveSteps > 0) { - sprite->data[0]--; - sprite->x2 += sprite->data[1]; - sprite->y2 += sprite->data[2]; + sprite->sMoveSteps--; + sprite->x2 += sprite->sSpeedX; + sprite->y2 += sprite->sSpeedY; } else { @@ -588,16 +637,18 @@ static void TranslateSpriteLinearFixedPointIconFrame(struct Sprite *sprite) UpdateMonIconFrame(sprite); } -void sub_80A65EC(struct Sprite *sprite) +// Unused +static void TranslateSpriteToBattleTargetPos(struct Sprite *sprite) { - sprite->data[1] = sprite->x + sprite->x2; - sprite->data[3] = sprite->y + sprite->y2; - sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2); - sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET); - sprite->callback = sub_80A64D0; + sprite->sStartX = sprite->x + sprite->x2; + sprite->sStartY = sprite->y + sprite->y2; + sprite->sTargetX = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2); + sprite->sTargetY = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET); + sprite->callback = AnimPosToTranslateLinear; } -void TranslateMonSpriteLinear(struct Sprite *sprite) +// Same as TranslateSpriteLinear but takes an id to specify which sprite to move +void TranslateSpriteLinearById(struct Sprite *sprite) { if (sprite->data[0] > 0) { @@ -611,7 +662,7 @@ void TranslateMonSpriteLinear(struct Sprite *sprite) } } -void TranslateMonSpriteLinearFixedPoint(struct Sprite *sprite) +void TranslateSpriteLinearByIdFixedPoint(struct Sprite *sprite) { if (sprite->data[0] > 0) { @@ -654,18 +705,26 @@ void DestroySpriteAndMatrix(struct Sprite *sprite) DestroyAnimSprite(sprite); } -void sub_80A6760(struct Sprite *sprite) +// Unused +static void TranslateSpriteToBattleAttackerPos(struct Sprite *sprite) { - sprite->data[1] = sprite->x + sprite->x2; - sprite->data[3] = sprite->y + sprite->y2; - sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2); - sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET); - sprite->callback = sub_80A64D0; + sprite->sStartX = sprite->x + sprite->x2; + sprite->sStartY = sprite->y + sprite->y2; + sprite->sTargetX = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2); + sprite->sTargetY = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET); + sprite->callback = AnimPosToTranslateLinear; } -void sub_80A67A4(struct Sprite *sprite) +#undef sStepsX +#undef sStartX +#undef sTargetX +#undef sStartY +#undef sTargetY + +// Unused +static void EndUnkPaletteAnim(struct Sprite *sprite) { - ResetPaletteStructByUid(sprite->data[5]); + PaletteStruct_ResetById(sprite->data[5]); DestroySpriteAndMatrix(sprite); } @@ -937,7 +996,7 @@ void GetBattleAnimBgData(struct BattleAnimBgData *out, u32 bgId) } } -void sub_80A6BFC(struct BattleAnimBgData *out, u8 unused) +void GetBgDataForTransform(struct BattleAnimBgData *out, u8 battlerId) { out->bgTiles = gBattleAnimBgTileBuffer; out->bgTilemap = (u16 *)gBattleAnimBgTilemapBuffer; @@ -1076,16 +1135,17 @@ void StartAnimLinearTranslation(struct Sprite *sprite) sprite->data[1] = sprite->x; sprite->data[3] = sprite->y; InitAnimLinearTranslation(sprite); - sprite->callback = AnimTranslateLinear_WaitEnd; + sprite->callback = AnimTranslateLinear_WithFollowup; sprite->callback(sprite); } -void sub_80A6F14(struct Sprite *sprite) +// Unused +static void StartAnimLinearTranslation_SetCornerVecX(struct Sprite *sprite) { sprite->data[1] = sprite->x; sprite->data[3] = sprite->y; InitAnimLinearTranslation(sprite); - sprite->callback = sub_80A6FB4; + sprite->callback = AnimTranslateLinear_WithFollowup_SetCornerVecX; sprite->callback(sprite); } @@ -1119,15 +1179,16 @@ bool8 AnimTranslateLinear(struct Sprite *sprite) return FALSE; } -void AnimTranslateLinear_WaitEnd(struct Sprite *sprite) +void AnimTranslateLinear_WithFollowup(struct Sprite *sprite) { if (AnimTranslateLinear(sprite)) SetCallbackToStoredInData6(sprite); } -static void sub_80A6FB4(struct Sprite *sprite) +// Functionally unused +static void AnimTranslateLinear_WithFollowup_SetCornerVecX(struct Sprite *sprite) { - sub_8039E9C(sprite); + AnimSetCenterToCornerVecX(sprite); if (AnimTranslateLinear(sprite)) SetCallbackToStoredInData6(sprite); } @@ -1144,7 +1205,7 @@ void InitAnimLinearTranslationWithSpeedAndPos(struct Sprite *sprite) sprite->data[1] = sprite->x; sprite->data[3] = sprite->y; InitAnimLinearTranslationWithSpeed(sprite); - sprite->callback = AnimTranslateLinear_WaitEnd; + sprite->callback = AnimTranslateLinear_WithFollowup; sprite->callback(sprite); } @@ -1246,7 +1307,7 @@ void SetSpriteRotScale(u8 spriteId, s16 xScale, s16 yScale, u16 rotation) src.xScale = xScale; src.yScale = yScale; src.rotation = rotation; - if (sub_80A7238()) + if (ShouldRotScaleSpeciesBeFlipped()) src.xScale = -src.xScale; i = gSprites[spriteId].oam.matrixNum; ObjAffineSet(&src, &matrix, 1, 2); @@ -1256,7 +1317,8 @@ void SetSpriteRotScale(u8 spriteId, s16 xScale, s16 yScale, u16 rotation) gOamMatrices[i].d = matrix.d; } -static bool8 sub_80A7238(void) +// Pokémon in Contests (except Unown) should be flipped. +static bool8 ShouldRotScaleSpeciesBeFlipped(void) { if (IsContest()) { @@ -1321,7 +1383,7 @@ void TrySetSpriteRotScale(struct Sprite *sprite, bool8 recalcCenterVector, s16 x src.xScale = xScale; src.yScale = yScale; src.rotation = rotation; - if (sub_80A7238()) + if (ShouldRotScaleSpeciesBeFlipped()) src.xScale = -src.xScale; i = sprite->oam.matrixNum; ObjAffineSet(&src, &matrix, 1, 2); @@ -1629,7 +1691,7 @@ s16 CloneBattlerSpriteWithBlend(u8 animBattler) return -1; } -void obj_delete_but_dont_free_vram(struct Sprite *sprite) +void DestroySpriteWithActiveSheet(struct Sprite *sprite) { sprite->usingSheet = TRUE; DestroySprite(sprite); @@ -1784,34 +1846,34 @@ void PrepareAffineAnimInTaskData(struct Task *task, u8 spriteId, const union Aff bool8 RunAffineAnimFromTaskData(struct Task *task) { - gAnimTaskAffineAnim = &((union AffineAnimCmd *)LoadPointerFromVars(task->data[13], task->data[14]))[task->data[7]]; - switch (gAnimTaskAffineAnim->type) + sAnimTaskAffineAnim = &((union AffineAnimCmd *)LoadPointerFromVars(task->data[13], task->data[14]))[task->data[7]]; + switch (sAnimTaskAffineAnim->type) { default: - if (!gAnimTaskAffineAnim->frame.duration) + if (!sAnimTaskAffineAnim->frame.duration) { - task->data[10] = gAnimTaskAffineAnim->frame.xScale; - task->data[11] = gAnimTaskAffineAnim->frame.yScale; - task->data[12] = gAnimTaskAffineAnim->frame.rotation; + task->data[10] = sAnimTaskAffineAnim->frame.xScale; + task->data[11] = sAnimTaskAffineAnim->frame.yScale; + task->data[12] = sAnimTaskAffineAnim->frame.rotation; task->data[7]++; - gAnimTaskAffineAnim++; + sAnimTaskAffineAnim++; } - task->data[10] += gAnimTaskAffineAnim->frame.xScale; - task->data[11] += gAnimTaskAffineAnim->frame.yScale; - task->data[12] += gAnimTaskAffineAnim->frame.rotation; + task->data[10] += sAnimTaskAffineAnim->frame.xScale; + task->data[11] += sAnimTaskAffineAnim->frame.yScale; + task->data[12] += sAnimTaskAffineAnim->frame.rotation; SetSpriteRotScale(task->data[15], task->data[10], task->data[11], task->data[12]); SetBattlerSpriteYOffsetFromYScale(task->data[15]); - if (++task->data[8] >= gAnimTaskAffineAnim->frame.duration) + if (++task->data[8] >= sAnimTaskAffineAnim->frame.duration) { task->data[8] = 0; task->data[7]++; } break; case AFFINEANIMCMDTYPE_JUMP: - task->data[7] = gAnimTaskAffineAnim->jump.target; + task->data[7] = sAnimTaskAffineAnim->jump.target; break; case AFFINEANIMCMDTYPE_LOOP: - if (gAnimTaskAffineAnim->loop.count) + if (sAnimTaskAffineAnim->loop.count) { if (task->data[9]) { @@ -1823,7 +1885,7 @@ bool8 RunAffineAnimFromTaskData(struct Task *task) } else { - task->data[9] = gAnimTaskAffineAnim->loop.count; + task->data[9] = sAnimTaskAffineAnim->loop.count; } if (!task->data[7]) { @@ -1832,8 +1894,8 @@ bool8 RunAffineAnimFromTaskData(struct Task *task) for (;;) { task->data[7]--; - gAnimTaskAffineAnim--; - if (gAnimTaskAffineAnim->type == AFFINEANIMCMDTYPE_LOOP) + sAnimTaskAffineAnim--; + if (sAnimTaskAffineAnim->type == AFFINEANIMCMDTYPE_LOOP) { task->data[7]++; return TRUE; @@ -1857,12 +1919,12 @@ bool8 RunAffineAnimFromTaskData(struct Task *task) // matrix's scale in the y dimension. void SetBattlerSpriteYOffsetFromYScale(u8 spriteId) { - int var = 64 - GetBattlerYDeltaFromSpriteId(spriteId) * 2; + int var = MON_PIC_HEIGHT - GetBattlerYDeltaFromSpriteId(spriteId) * 2; u16 matrix = gSprites[spriteId].oam.matrixNum; int var2 = SAFE_DIV(var << 8, gOamMatrices[matrix].d); - if (var2 > 128) - var2 = 128; + if (var2 > MON_PIC_HEIGHT * 2) + var2 = MON_PIC_HEIGHT * 2; gSprites[spriteId].y2 = (var - var2) / 2; } @@ -1870,12 +1932,12 @@ void SetBattlerSpriteYOffsetFromYScale(u8 spriteId) // matrix's scale in the y dimension. void SetBattlerSpriteYOffsetFromOtherYScale(u8 spriteId, u8 otherSpriteId) { - int var = 64 - GetBattlerYDeltaFromSpriteId(otherSpriteId) * 2; + int var = MON_PIC_HEIGHT - GetBattlerYDeltaFromSpriteId(otherSpriteId) * 2; u16 matrix = gSprites[spriteId].oam.matrixNum; int var2 = SAFE_DIV(var << 8, gOamMatrices[matrix].d); - if (var2 > 128) - var2 = 128; + if (var2 > MON_PIC_HEIGHT * 2) + var2 = MON_PIC_HEIGHT * 2; gSprites[spriteId].y2 = (var - var2) / 2; } @@ -1926,7 +1988,7 @@ static u16 GetBattlerYDeltaFromSpriteId(u8 spriteId) } } } - return 64; + return MON_PIC_HEIGHT; } void StorePointerInVars(s16 *lo, s16 *hi, const void *ptr) @@ -2253,17 +2315,17 @@ s16 GetBattlerSpriteCoordAttr(u8 battlerId, u8 attr) switch (attr) { case BATTLER_COORD_ATTR_HEIGHT: - return (coords->size & 0xf) * 8; + return GET_MON_COORDS_HEIGHT(coords->size); case BATTLER_COORD_ATTR_WIDTH: - return (coords->size >> 4) * 8; + return GET_MON_COORDS_WIDTH(coords->size); case BATTLER_COORD_ATTR_LEFT: - return GetBattlerSpriteCoord(battlerId, BATTLER_COORD_X_2) - ((coords->size >> 4) * 4); + return GetBattlerSpriteCoord(battlerId, BATTLER_COORD_X_2) - (GET_MON_COORDS_WIDTH(coords->size) / 2); case BATTLER_COORD_ATTR_RIGHT: - return GetBattlerSpriteCoord(battlerId, BATTLER_COORD_X_2) + ((coords->size >> 4) * 4); + return GetBattlerSpriteCoord(battlerId, BATTLER_COORD_X_2) + (GET_MON_COORDS_WIDTH(coords->size) / 2); case BATTLER_COORD_ATTR_TOP: - return GetBattlerSpriteCoord(battlerId, BATTLER_COORD_Y_PIC_OFFSET) - ((coords->size & 0xf) * 4); + return GetBattlerSpriteCoord(battlerId, BATTLER_COORD_Y_PIC_OFFSET) - (GET_MON_COORDS_HEIGHT(coords->size) / 2); case BATTLER_COORD_ATTR_BOTTOM: - return GetBattlerSpriteCoord(battlerId, BATTLER_COORD_Y_PIC_OFFSET) + ((coords->size & 0xf) * 4); + return GetBattlerSpriteCoord(battlerId, BATTLER_COORD_Y_PIC_OFFSET) + (GET_MON_COORDS_HEIGHT(coords->size) / 2); case BATTLER_COORD_ATTR_RAW_BOTTOM: ret = GetBattlerSpriteCoord(battlerId, BATTLER_COORD_Y) + 31; return ret - coords->y_offset; @@ -2375,6 +2437,19 @@ void AnimSpinningSparkle(struct Sprite *sprite) StoreSpriteCallbackInData6(sprite, DestroyAnimSprite); } +// Task and sprite data for AnimTask_AttackerPunchWithTrace +#define tBattlerSpriteId data[0] +#define tMoveSpeed data[1] +#define tState data[2] +#define tCounter data[3] +#define tPaletteNum data[4] +#define tNumTracesActive data[5] +#define tPriority data[6] + +#define sActiveTime data[0] +#define sTaskId data[1] +#define sSpriteId data[2] + // Slides attacker to right and back with a cloned trace of the specified color // arg0: Trace palette blend color // arg1: Trace palette blend coeff @@ -2384,21 +2459,24 @@ void AnimTask_AttackerPunchWithTrace(u8 taskId) u16 dest; struct Task *task = &gTasks[taskId]; - task->data[0] = GetAnimBattlerSpriteId(ANIM_ATTACKER); - task->data[1] = ((GetBattlerSide(gBattleAnimAttacker)) != B_SIDE_PLAYER) ? -8 : 8; - task->data[2] = 0; - task->data[3] = 0; - gSprites[task->data[0]].x2 -= task->data[0]; - task->data[4] = AllocSpritePalette(ANIM_TAG_BENT_SPOON); - task->data[5] = 0; + task->tBattlerSpriteId = GetAnimBattlerSpriteId(ANIM_ATTACKER); + task->tMoveSpeed = (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER) ? -8 : 8; + task->tState = 0; + task->tCounter = 0; + gSprites[task->tBattlerSpriteId].x2 -= task->tBattlerSpriteId; + task->tPaletteNum = AllocSpritePalette(ANIM_TAG_BENT_SPOON); + task->tNumTracesActive = 0; - dest = (task->data[4] + 0x10) * 0x10; - src = (gSprites[task->data[0]].oam.paletteNum + 0x10) * 0x10; - task->data[6] = GetBattlerSpriteSubpriority(gBattleAnimAttacker); - if (task->data[6] == 20 || task->data[6] == 40) - task->data[6] = 2; + dest = (task->tPaletteNum + 16) * 16; + src = (gSprites[task->tBattlerSpriteId].oam.paletteNum + 0x10) * 0x10; + + // Set trace's priority based on battler's subpriority + task->tPriority = GetBattlerSpriteSubpriority(gBattleAnimAttacker); + if (task->tPriority == 20 || task->tPriority == 40) + task->tPriority = 2; else - task->data[6] = 3; + task->tPriority = 3; + CpuCopy32(&gPlttBufferUnfaded[src], &gPlttBufferFaded[dest], 0x20); BlendPalette(dest, 16, gBattleAnimArgs[1], gBattleAnimArgs[0]); task->func = AnimTask_AttackerPunchWithTrace_Step; @@ -2407,28 +2485,30 @@ void AnimTask_AttackerPunchWithTrace(u8 taskId) static void AnimTask_AttackerPunchWithTrace_Step(u8 taskId) { struct Task *task = &gTasks[taskId]; - switch (task->data[2]) + switch (task->tState) { case 0: - sub_80A8D78(task, taskId); - gSprites[task->data[0]].x2 += task->data[1]; - if (++task->data[3] == 5) + // Move forward + CreateBattlerTrace(task, taskId); + gSprites[task->tBattlerSpriteId].x2 += task->tMoveSpeed; + if (++task->tCounter == 5) { - task->data[3]--; - task->data[2]++; + task->tCounter--; + task->tState++; } break; case 1: - sub_80A8D78(task, taskId); - gSprites[task->data[0]].x2 -= task->data[1]; - if (--task->data[3] == 0) + // Move back (do same number of traces as before) + CreateBattlerTrace(task, taskId); + gSprites[task->tBattlerSpriteId].x2 -= task->tMoveSpeed; + if (--task->tCounter == 0) { - gSprites[task->data[0]].x2 = 0; - task->data[2]++; + gSprites[task->tBattlerSpriteId].x2 = 0; + task->tState++; } break; case 2: - if (!task->data[5]) + if (task->tNumTracesActive == 0) { FreeSpritePaletteByTag(ANIM_TAG_BENT_SPOON); DestroyAnimVisualTask(taskId); @@ -2437,31 +2517,44 @@ static void AnimTask_AttackerPunchWithTrace_Step(u8 taskId) } } -static void sub_80A8D78(struct Task *task, u8 taskId) +static void CreateBattlerTrace(struct Task *task, u8 taskId) { s16 spriteId = CloneBattlerSpriteWithBlend(0); if (spriteId >= 0) { - gSprites[spriteId].oam.priority = task->data[6]; - gSprites[spriteId].oam.paletteNum = task->data[4]; - gSprites[spriteId].data[0] = 8; - gSprites[spriteId].data[1] = taskId; - gSprites[spriteId].data[2] = spriteId; - gSprites[spriteId].x2 = gSprites[task->data[0]].x2; - gSprites[spriteId].callback = sub_80A8DFC; - task->data[5]++; + gSprites[spriteId].oam.priority = task->tPriority; + gSprites[spriteId].oam.paletteNum = task->tPaletteNum; + gSprites[spriteId].sActiveTime = 8; + gSprites[spriteId].sTaskId = taskId; + gSprites[spriteId].sSpriteId = spriteId; + gSprites[spriteId].x2 = gSprites[task->tBattlerSpriteId].x2; + gSprites[spriteId].callback = AnimBattlerTrace; + task->tNumTracesActive++; } } -static void sub_80A8DFC(struct Sprite *sprite) +// Just waits until destroyed +static void AnimBattlerTrace(struct Sprite *sprite) { - if (--sprite->data[0] == 0) + if (--sprite->sActiveTime == 0) { - gTasks[sprite->data[1]].data[5]--; - obj_delete_but_dont_free_vram(sprite); + gTasks[sprite->sTaskId].tNumTracesActive--; + DestroySpriteWithActiveSheet(sprite); } } +#undef tBattlerSpriteId +#undef tMoveSpeed +#undef tState +#undef tCounter +#undef tPaletteNum +#undef tNumTracesActive +#undef tPriority + +#undef sActiveTime +#undef sTaskId +#undef sSpriteId + void AnimWeatherBallUp(struct Sprite *sprite) { sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2); diff --git a/src/battle_anim_new.c b/src/battle_anim_new.c index 66958136d1..450ab35245 100644 --- a/src/battle_anim_new.c +++ b/src/battle_anim_new.c @@ -4284,7 +4284,7 @@ static void SpriteCB_GrowingSuperpower(struct Sprite *sprite) InitAnimLinearTranslation(sprite); StoreSpriteCallbackInData6(sprite, DestroyAnimSprite); - sprite->callback = AnimTranslateLinear_WaitEnd; + sprite->callback = AnimTranslateLinear_WithFollowup; } static void SpriteCB_CentredSpiderWeb(struct Sprite* sprite) @@ -4966,7 +4966,7 @@ static void AnimHappyHourCoinShower(struct Sprite *sprite) sprite->data[4] = -70; sprite->data[5] = gBattleAnimArgs[2]; StoreSpriteCallbackInData6(sprite, AnimFallingRock_Step); - sprite->callback = TranslateSpriteInEllipseOverDuration; + sprite->callback = TranslateSpriteInEllipse; sprite->callback(sprite); } diff --git a/src/battle_anim_normal.c b/src/battle_anim_normal.c index 0fe06dd0b4..8bbfc58456 100644 --- a/src/battle_anim_normal.c +++ b/src/battle_anim_normal.c @@ -494,7 +494,7 @@ static void AnimCirclingSparkle(struct Sprite *sprite) sprite->data[4] = 112; sprite->data[5] = 0; StoreSpriteCallbackInData6(sprite, DestroySpriteAndMatrix); - sprite->callback = TranslateSpriteInGrowingCircleOverDuration; + sprite->callback = TranslateSpriteInGrowingCircle; sprite->callback(sprite); } diff --git a/src/battle_anim_poison.c b/src/battle_anim_poison.c index 90a645fd78..dc24e658b6 100644 --- a/src/battle_anim_poison.c +++ b/src/battle_anim_poison.c @@ -407,8 +407,8 @@ static void AnimSludgeProjectile(struct Sprite *sprite) InitSpritePosToAnimAttacker(sprite, 1); sprite->data[0] = gBattleAnimArgs[2]; - sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, 2); - sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, 3); + sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2); + sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET); sprite->data[5] = -30; InitAnimArcTranslation(sprite); diff --git a/src/battle_anim_psychic.c b/src/battle_anim_psychic.c index 2cc48b571a..5e42a2426a 100644 --- a/src/battle_anim_psychic.c +++ b/src/battle_anim_psychic.c @@ -767,8 +767,8 @@ static void AnimQuestionMark(struct Sprite *sprite) if (GetBattlerSide(gBattleAnimAttacker) == B_SIDE_OPPONENT) x = -x; - sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, 2) + x; - sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, 3) + y; + sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2) + x; + sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET) + y; if (sprite->y < 16) sprite->y = 16; @@ -1225,7 +1225,7 @@ static void AnimTask_TransparentCloneGrowAndShrink_Step(u8 taskId) task->data[0]++; break; case 2: - obj_delete_but_dont_free_vram(&gSprites[task->data[15]]); + DestroySpriteWithActiveSheet(&gSprites[task->data[15]]); task->data[0]++; break; case 3: diff --git a/src/battle_anim_rock.c b/src/battle_anim_rock.c index 97a66148c6..4444964847 100644 --- a/src/battle_anim_rock.c +++ b/src/battle_anim_rock.c @@ -409,7 +409,7 @@ void AnimFallingRock(struct Sprite *sprite) sprite->data[5] = gBattleAnimArgs[2]; StoreSpriteCallbackInData6(sprite, AnimFallingRock_Step); - sprite->callback = TranslateSpriteInEllipseOverDuration; + sprite->callback = TranslateSpriteInEllipse; sprite->callback(sprite); } @@ -424,7 +424,7 @@ void AnimFallingRock_Step(struct Sprite *sprite) sprite->data[4] = -24; StoreSpriteCallbackInData6(sprite, DestroySpriteAndMatrix); - sprite->callback = TranslateSpriteInEllipseOverDuration; + sprite->callback = TranslateSpriteInEllipse; sprite->callback(sprite); } @@ -660,10 +660,10 @@ void AnimTask_Rollout(u8 taskId) task = &gTasks[taskId]; - var0 = GetBattlerSpriteCoord(gBattleAnimAttacker, 2); - var1 = GetBattlerSpriteCoord(gBattleAnimAttacker, 1) + 24; - var2 = GetBattlerSpriteCoord(gBattleAnimTarget, 2); - var3 = GetBattlerSpriteCoord(gBattleAnimTarget, 1) + 24; + var0 = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2); + var1 = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y) + 24; + var2 = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2); + var3 = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y) + 24; if (BATTLE_PARTNER(gBattleAnimAttacker) == gBattleAnimTarget) var3 = var1; @@ -883,8 +883,8 @@ static void AnimRockBlastRock(struct Sprite *sprite) static void AnimRockScatter(struct Sprite *sprite) { - sprite->x = GetBattlerSpriteCoord(gBattleAnimTarget, 0); - sprite->y = GetBattlerSpriteCoord(gBattleAnimTarget, 1); + sprite->x = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X); + sprite->y = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y); sprite->x += gBattleAnimArgs[0]; sprite->y += gBattleAnimArgs[1]; diff --git a/src/battle_anim_sound_tasks.c b/src/battle_anim_sound_tasks.c index 1bcbcd0e0b..f04d9177db 100644 --- a/src/battle_anim_sound_tasks.c +++ b/src/battle_anim_sound_tasks.c @@ -172,7 +172,7 @@ void SoundTask_PlayCryHighPitch(u8 taskId) } if (species != SPECIES_NONE) - PlayCry3(species, pan, 3); + PlayCry_ByMode(species, pan, CRY_MODE_HIGH_PITCH); DestroyAnimVisualTask(taskId); } @@ -223,10 +223,10 @@ void SoundTask_PlayDoubleCry(u8 taskId) if (species != SPECIES_NONE) { - if (gBattleAnimArgs[1] == 0xFF) - PlayCry3(species, pan, 9); - else - PlayCry3(species, pan, 7); + if (gBattleAnimArgs[1] == DOUBLE_CRY_GROWL) + PlayCry_ByMode(species, pan, CRY_MODE_GROWL_1); + else // DOUBLE_CRY_ROAR + PlayCry_ByMode(species, pan, CRY_MODE_ROAR_1); gTasks[taskId].func = SoundTask_PlayDoubleCry_Step; } @@ -247,19 +247,19 @@ static void SoundTask_PlayDoubleCry_Step(u8 taskId) } else { - if (gTasks[taskId].data[0] == 0xFF) + if (gTasks[taskId].data[0] == DOUBLE_CRY_GROWL) { if (!IsCryPlaying()) { - PlayCry3(species, pan, 10); + PlayCry_ByMode(species, pan, CRY_MODE_GROWL_2); DestroyAnimVisualTask(taskId); } } - else + else // DOUBLE_CRY_ROAR { if (!IsCryPlaying()) { - PlayCry3(species, pan, 8); + PlayCry_ByMode(species, pan, CRY_MODE_ROAR_2); DestroyAnimVisualTask(taskId); } } @@ -279,12 +279,18 @@ void SoundTask_WaitForCry(u8 taskId) } } + +#define tSpecies data[1] +#define tPan data[2] +#define tState data[9] +#define tLastCry data[10] // If it's not the last cry, don't try to restore the BGM, because another is coming + void SoundTask_PlayCryWithEcho(u8 taskId) { u16 species; s8 pan; - gTasks[taskId].data[10] = gBattleAnimArgs[0]; + gTasks[taskId].tLastCry = gBattleAnimArgs[0]; pan = BattleAnimAdjustPanning(SOUND_PAN_ATTACKER); if (IsContest()) @@ -292,8 +298,8 @@ void SoundTask_PlayCryWithEcho(u8 taskId) else species = gAnimBattlerSpecies[gBattleAnimAttacker]; - gTasks[taskId].data[1] = species; - gTasks[taskId].data[2] = pan; + gTasks[taskId].tSpecies = species; + gTasks[taskId].tPan = pan; if (species != SPECIES_NONE) gTasks[taskId].func = SoundTask_PlayCryWithEcho_Step; @@ -303,38 +309,44 @@ void SoundTask_PlayCryWithEcho(u8 taskId) static void SoundTask_PlayCryWithEcho_Step(u8 taskId) { - u16 species = gTasks[taskId].data[1]; - s8 pan = gTasks[taskId].data[2]; + u16 species = gTasks[taskId].tSpecies; + s8 pan = gTasks[taskId].tPan; - switch (gTasks[taskId].data[9]) + // Note the cases are not in order of execution + switch (gTasks[taskId].tState) { case 2: - PlayCry6(species, pan, 4); - gTasks[taskId].data[9]++; + PlayCry_DuckNoRestore(species, pan, CRY_MODE_ECHO_START); + gTasks[taskId].tState++; break; case 1: case 3: case 4: - gTasks[taskId].data[9]++; + gTasks[taskId].tState++; break; case 5: if (IsCryPlaying()) break; case 0: StopCryAndClearCrySongs(); - gTasks[taskId].data[9]++; + gTasks[taskId].tState++; break; default: - if (gTasks[taskId].data[10] == 0) - PlayCry6(species, pan, 6); + if (!gTasks[taskId].tLastCry) + PlayCry_DuckNoRestore(species, pan, CRY_MODE_ECHO_END); else - PlayCry3(species, pan, 6); + PlayCry_ByMode(species, pan, CRY_MODE_ECHO_END); DestroyAnimVisualTask(taskId); break; } } +#undef tSpecies +#undef tPan +#undef tState +#undef tLastCry + void SoundTask_PlaySE1WithPanning(u8 taskId) { u16 songId = gBattleAnimArgs[0]; diff --git a/src/battle_anim_utility_funcs.c b/src/battle_anim_utility_funcs.c index bef94292a5..70982993b8 100644 --- a/src/battle_anim_utility_funcs.c +++ b/src/battle_anim_utility_funcs.c @@ -268,7 +268,7 @@ static void AnimMonTrace(struct Sprite *sprite) else { gTasks[sprite->data[1]].data[sprite->data[2]]--; - obj_delete_but_dont_free_vram(sprite); + DestroySpriteWithActiveSheet(sprite); } } diff --git a/src/battle_anim_water.c b/src/battle_anim_water.c index ac77d18192..e18214a0a1 100644 --- a/src/battle_anim_water.c +++ b/src/battle_anim_water.c @@ -676,23 +676,23 @@ static void AnimWaterBubbleProjectile(struct Sprite *sprite) if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER) { - sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, 2) - gBattleAnimArgs[0]; - sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, 3) + gBattleAnimArgs[1]; + sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2) - gBattleAnimArgs[0]; + sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET) + gBattleAnimArgs[1]; sprite->animPaused = TRUE; } else { - sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, 2) + gBattleAnimArgs[0]; - sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, 3) + gBattleAnimArgs[1]; + sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2) + gBattleAnimArgs[0]; + sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET) + gBattleAnimArgs[1]; sprite->animPaused = TRUE; } if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER) gBattleAnimArgs[2] = -gBattleAnimArgs[2]; sprite->data[0] = gBattleAnimArgs[6]; sprite->data[1] = sprite->x; - sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, 2); + sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2); sprite->data[3] = sprite->y; - sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, 3); + sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET); InitAnimLinearTranslation(sprite); spriteId = CreateInvisibleSpriteWithCallback(SpriteCallbackDummy); sprite->data[5] = spriteId; @@ -754,9 +754,9 @@ static void AnimAuroraBeamRings(struct Sprite *sprite) unkArg = gBattleAnimArgs[2]; sprite->data[0] = gBattleAnimArgs[4]; sprite->data[1] = sprite->x; - sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, 2) + unkArg; + sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2) + unkArg; sprite->data[3] = sprite->y; - sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, 3) + gBattleAnimArgs[3]; + sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET) + gBattleAnimArgs[3]; InitAnimLinearTranslation(sprite); sprite->callback = AnimAuroraBeamRings_Step; sprite->affineAnimPaused = TRUE; @@ -830,9 +830,9 @@ static void AnimToTargetInSinWave(struct Sprite *sprite) InitSpritePosToAnimAttacker(sprite, TRUE); sprite->data[0] = 30; sprite->data[1] = sprite->x; - sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, 2); + sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2); sprite->data[3] = sprite->y; - sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, 3); + sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET); InitAnimLinearTranslation(sprite); sprite->data[5] = 0xD200 / sprite->data[0]; sprite->data[7] = gBattleAnimArgs[3]; @@ -885,8 +885,8 @@ static void AnimHydroCannonCharge(struct Sprite *sprite) { u8 priority; - sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, 0); - sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, 1); + sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X); + sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y); sprite->y2 = -10; priority = GetBattlerSpriteSubpriority(gBattleAnimAttacker); if (!IsContest()) @@ -932,14 +932,14 @@ static void AnimHydroCannonBeam(struct Sprite *sprite) else animType = FALSE; if ((u8)gBattleAnimArgs[5] == 0) - coordType = 3; + coordType = BATTLER_COORD_Y_PIC_OFFSET; else - coordType = 1; + coordType = BATTLER_COORD_Y; InitSpritePosToAnimAttacker(sprite, animType); if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER) gBattleAnimArgs[2] = -gBattleAnimArgs[2]; sprite->data[0] = gBattleAnimArgs[4]; - sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, 2) + gBattleAnimArgs[2]; + sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2) + gBattleAnimArgs[2]; sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, coordType) + gBattleAnimArgs[3]; sprite->callback = StartAnimLinearTranslation; StoreSpriteCallbackInData6(sprite, DestroyAnimSprite); @@ -1153,7 +1153,7 @@ static void AnimTask_SurfWaveScanlineEffect(u8 taskId) else gScanlineEffectRegBuffers[0][i] = gScanlineEffectRegBuffers[1][i] = task->data[2]; - params.dmaDest = (vu16 *)REG_ADDR_BLDALPHA; + params.dmaDest = ®_BLDALPHA; params.dmaControl = SCANLINE_EFFECT_DMACNT_16BIT; params.initState = 1; params.unused9 = 0; @@ -1360,8 +1360,8 @@ static u8 GetWaterSpoutPowerForAnim(void) static void CreateWaterSpoutLaunchDroplets(struct Task *task, u8 taskId) { s16 i; - s16 attackerCoordX = GetBattlerSpriteCoord(gBattleAnimAttacker, 2); - s16 attackerCoordY = GetBattlerSpriteCoord(gBattleAnimAttacker, 3); + s16 attackerCoordX = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2); + s16 attackerCoordY = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET); s16 trigIndex = 172; u8 subpriority = GetBattlerSpriteSubpriority(gBattleAnimAttacker) - 1; s16 increment = 4 - task->data[1]; @@ -1534,8 +1534,8 @@ void AnimTask_WaterSport(u8 taskId) { struct Task *task = &gTasks[taskId]; - task->data[3] = GetBattlerSpriteCoord(gBattleAnimAttacker, 2); - task->data[4] = GetBattlerSpriteCoord(gBattleAnimAttacker, 3); + task->data[3] = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2); + task->data[4] = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET); task->data[7] = (GetBattlerSide(gBattleAnimAttacker) == B_SIDE_PLAYER) ? 1 : -1; if (IsContest()) task->data[7] *= -1; @@ -1707,8 +1707,8 @@ static void AnimWaterPulseRingBubble(struct Sprite *sprite) void AnimWaterPulseRing(struct Sprite *sprite) { InitSpritePosToAnimAttacker(sprite, TRUE); - sprite->data[1] = GetBattlerSpriteCoord(gBattleAnimTarget, 2); - sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, 3); + sprite->data[1] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2); + sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET); sprite->data[3] = gBattleAnimArgs[2]; sprite->data[4] = gBattleAnimArgs[3]; sprite->callback = AnimWaterPulseRing_Step; diff --git a/src/battle_controller_link_opponent.c b/src/battle_controller_link_opponent.c index 22b2fb3985..d4d5c4110b 100644 --- a/src/battle_controller_link_opponent.c +++ b/src/battle_controller_link_opponent.c @@ -1128,7 +1128,7 @@ static void LinkOpponentHandleLoadMonSprite(void) SetMultiuseSpriteTemplateToPokemon(species, GetBattlerPosition(gActiveBattler)); gBattlerSpriteIds[gActiveBattler] = CreateSprite(&gMultiuseSpriteTemplate, - GetBattlerSpriteCoord(gActiveBattler, 2), + GetBattlerSpriteCoord(gActiveBattler, BATTLER_COORD_X_2), GetBattlerSpriteDefault_Y(gActiveBattler), GetBattlerSpriteSubpriority(gActiveBattler)); @@ -1162,7 +1162,7 @@ static void StartSendOutAnim(u8 battlerId, bool8 dontClearSubstituteBit) gBattlerSpriteIds[battlerId] = CreateSprite( &gMultiuseSpriteTemplate, - GetBattlerSpriteCoord(battlerId, 2), + GetBattlerSpriteCoord(battlerId, BATTLER_COORD_X_2), GetBattlerSpriteDefault_Y(battlerId), GetBattlerSpriteSubpriority(battlerId)); @@ -1682,7 +1682,7 @@ static void LinkOpponentHandleFaintingCry(void) { u16 species = GetMonData(&gEnemyParty[gBattlerPartyIndexes[gActiveBattler]], MON_DATA_SPECIES); - PlayCry3(species, 25, 5); + PlayCry_ByMode(species, 25, CRY_MODE_FAINT); LinkOpponentBufferExecCompleted(); } diff --git a/src/battle_controller_link_partner.c b/src/battle_controller_link_partner.c index 462f6de4b1..4f8138350b 100644 --- a/src/battle_controller_link_partner.c +++ b/src/battle_controller_link_partner.c @@ -1018,7 +1018,7 @@ static void LinkPartnerHandleLoadMonSprite(void) SetMultiuseSpriteTemplateToPokemon(species, GetBattlerPosition(gActiveBattler)); gBattlerSpriteIds[gActiveBattler] = CreateSprite(&gMultiuseSpriteTemplate, - GetBattlerSpriteCoord(gActiveBattler, 2), + GetBattlerSpriteCoord(gActiveBattler, BATTLER_COORD_X_2), GetBattlerSpriteDefault_Y(gActiveBattler), GetBattlerSpriteSubpriority(gActiveBattler)); gSprites[gBattlerSpriteIds[gActiveBattler]].x2 = -DISPLAY_WIDTH; @@ -1049,7 +1049,7 @@ static void StartSendOutAnim(u8 battlerId, bool8 dontClearSubstituteBit) gBattlerSpriteIds[battlerId] = CreateSprite( &gMultiuseSpriteTemplate, - GetBattlerSpriteCoord(battlerId, 2), + GetBattlerSpriteCoord(battlerId, BATTLER_COORD_X_2), GetBattlerSpriteDefault_Y(battlerId), GetBattlerSpriteSubpriority(battlerId)); @@ -1514,7 +1514,7 @@ static void LinkPartnerHandleFaintingCry(void) { u16 species = GetMonData(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], MON_DATA_SPECIES); - PlayCry3(species, -25, 5); + PlayCry_ByMode(species, -25, CRY_MODE_FAINT); LinkPartnerBufferExecCompleted(); } diff --git a/src/battle_controller_opponent.c b/src/battle_controller_opponent.c index 2b00febd00..84b46a54cd 100644 --- a/src/battle_controller_opponent.c +++ b/src/battle_controller_opponent.c @@ -1145,7 +1145,7 @@ static void OpponentHandleLoadMonSprite(void) SetMultiuseSpriteTemplateToPokemon(species, GetBattlerPosition(gActiveBattler)); gBattlerSpriteIds[gActiveBattler] = CreateSprite(&gMultiuseSpriteTemplate, - GetBattlerSpriteCoord(gActiveBattler, 2), + GetBattlerSpriteCoord(gActiveBattler, BATTLER_COORD_X_2), GetBattlerSpriteDefault_Y(gActiveBattler), GetBattlerSpriteSubpriority(gActiveBattler)); @@ -1180,7 +1180,7 @@ static void StartSendOutAnim(u8 battlerId, bool8 dontClearSubstituteBit) SetMultiuseSpriteTemplateToPokemon(species, GetBattlerPosition(battlerId)); gBattlerSpriteIds[battlerId] = CreateSprite(&gMultiuseSpriteTemplate, - GetBattlerSpriteCoord(battlerId, 2), + GetBattlerSpriteCoord(battlerId, BATTLER_COORD_X_2), GetBattlerSpriteDefault_Y(battlerId), GetBattlerSpriteSubpriority(battlerId)); @@ -1851,7 +1851,7 @@ static void OpponentHandleFaintingCry(void) { u16 species = GetMonData(&gEnemyParty[gBattlerPartyIndexes[gActiveBattler]], MON_DATA_SPECIES); - PlayCry3(species, 25, 5); + PlayCry_ByMode(species, 25, CRY_MODE_FAINT); OpponentBufferExecCompleted(); } diff --git a/src/battle_controller_player.c b/src/battle_controller_player.c index c8b71502b8..483e7c8e81 100644 --- a/src/battle_controller_player.c +++ b/src/battle_controller_player.c @@ -2378,7 +2378,7 @@ static void StartSendOutAnim(u8 battlerId, bool8 dontClearSubstituteBit) gBattlerSpriteIds[battlerId] = CreateSprite( &gMultiuseSpriteTemplate, - GetBattlerSpriteCoord(battlerId, 2), + GetBattlerSpriteCoord(battlerId, BATTLER_COORD_X_2), GetBattlerSpriteDefault_Y(battlerId), GetBattlerSpriteSubpriority(battlerId)); @@ -3113,7 +3113,7 @@ static void PlayerHandleFaintingCry(void) { u16 species = GetMonData(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], MON_DATA_SPECIES); - PlayCry3(species, -25, 5); + PlayCry_ByMode(species, -25, CRY_MODE_FAINT); PlayerBufferExecCompleted(); } diff --git a/src/battle_controller_player_partner.c b/src/battle_controller_player_partner.c index 8e55ff3a12..11f8cd0d78 100644 --- a/src/battle_controller_player_partner.c +++ b/src/battle_controller_player_partner.c @@ -1202,7 +1202,7 @@ static void PlayerPartnerHandleLoadMonSprite(void) SetMultiuseSpriteTemplateToPokemon(species, GetBattlerPosition(gActiveBattler)); gBattlerSpriteIds[gActiveBattler] = CreateSprite(&gMultiuseSpriteTemplate, - GetBattlerSpriteCoord(gActiveBattler, 2), + GetBattlerSpriteCoord(gActiveBattler, BATTLER_COORD_X_2), GetBattlerSpriteDefault_Y(gActiveBattler), GetBattlerSpriteSubpriority(gActiveBattler)); gSprites[gBattlerSpriteIds[gActiveBattler]].x2 = -DISPLAY_WIDTH; @@ -1233,7 +1233,7 @@ static void StartSendOutAnim(u8 battlerId, bool8 dontClearSubstituteBit) gBattlerSpriteIds[battlerId] = CreateSprite( &gMultiuseSpriteTemplate, - GetBattlerSpriteCoord(battlerId, 2), + GetBattlerSpriteCoord(battlerId, BATTLER_COORD_X_2), GetBattlerSpriteDefault_Y(battlerId), GetBattlerSpriteSubpriority(battlerId)); @@ -1773,7 +1773,7 @@ static void PlayerPartnerHandleFaintingCry(void) { u16 species = GetMonData(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], MON_DATA_SPECIES); - PlayCry3(species, -25, 5); + PlayCry_ByMode(species, -25, CRY_MODE_FAINT); PlayerPartnerBufferExecCompleted(); } diff --git a/src/battle_controller_recorded_opponent.c b/src/battle_controller_recorded_opponent.c index 8860a3c243..dbf5402df0 100644 --- a/src/battle_controller_recorded_opponent.c +++ b/src/battle_controller_recorded_opponent.c @@ -1111,7 +1111,7 @@ static void RecordedOpponentHandleLoadMonSprite(void) SetMultiuseSpriteTemplateToPokemon(species, GetBattlerPosition(gActiveBattler)); gBattlerSpriteIds[gActiveBattler] = CreateSprite(&gMultiuseSpriteTemplate, - GetBattlerSpriteCoord(gActiveBattler, 2), + GetBattlerSpriteCoord(gActiveBattler, BATTLER_COORD_X_2), GetBattlerSpriteDefault_Y(gActiveBattler), GetBattlerSpriteSubpriority(gActiveBattler)); @@ -1144,7 +1144,7 @@ static void StartSendOutAnim(u8 battlerId, bool8 dontClearSubstituteBit) SetMultiuseSpriteTemplateToPokemon(species, GetBattlerPosition(battlerId)); gBattlerSpriteIds[battlerId] = CreateSprite(&gMultiuseSpriteTemplate, - GetBattlerSpriteCoord(battlerId, 2), + GetBattlerSpriteCoord(battlerId, BATTLER_COORD_X_2), GetBattlerSpriteDefault_Y(battlerId), GetBattlerSpriteSubpriority(battlerId)); @@ -1622,7 +1622,7 @@ static void RecordedOpponentHandleFaintingCry(void) { u16 species = GetMonData(&gEnemyParty[gBattlerPartyIndexes[gActiveBattler]], MON_DATA_SPECIES); - PlayCry3(species, 25, 5); + PlayCry_ByMode(species, 25, CRY_MODE_FAINT); RecordedOpponentBufferExecCompleted(); } diff --git a/src/battle_controller_recorded_player.c b/src/battle_controller_recorded_player.c index 1d92495851..583f83477b 100644 --- a/src/battle_controller_recorded_player.c +++ b/src/battle_controller_recorded_player.c @@ -1091,7 +1091,7 @@ static void RecordedPlayerHandleLoadMonSprite(void) SetMultiuseSpriteTemplateToPokemon(species, GetBattlerPosition(gActiveBattler)); gBattlerSpriteIds[gActiveBattler] = CreateSprite(&gMultiuseSpriteTemplate, - GetBattlerSpriteCoord(gActiveBattler, 2), + GetBattlerSpriteCoord(gActiveBattler, BATTLER_COORD_X_2), GetBattlerSpriteDefault_Y(gActiveBattler), GetBattlerSpriteSubpriority(gActiveBattler)); gSprites[gBattlerSpriteIds[gActiveBattler]].x2 = -DISPLAY_WIDTH; @@ -1122,7 +1122,7 @@ static void StartSendOutAnim(u8 battlerId, bool8 dontClearSubstituteBit) gBattlerSpriteIds[battlerId] = CreateSprite( &gMultiuseSpriteTemplate, - GetBattlerSpriteCoord(battlerId, 2), + GetBattlerSpriteCoord(battlerId, BATTLER_COORD_X_2), GetBattlerSpriteDefault_Y(battlerId), GetBattlerSpriteSubpriority(battlerId)); @@ -1643,7 +1643,7 @@ static void RecordedPlayerHandleFaintingCry(void) { u16 species = GetMonData(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], MON_DATA_SPECIES); - PlayCry3(species, -25, 5); + PlayCry_ByMode(species, -25, CRY_MODE_FAINT); RecordedPlayerBufferExecCompleted(); } diff --git a/src/battle_controller_safari.c b/src/battle_controller_safari.c index 0791784b91..f020651116 100644 --- a/src/battle_controller_safari.c +++ b/src/battle_controller_safari.c @@ -618,7 +618,7 @@ static void SafariHandleFaintingCry(void) { u16 species = GetMonData(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], MON_DATA_SPECIES); - PlayCry1(species, 25); + PlayCry_Normal(species, 25); SafariBufferExecCompleted(); } diff --git a/src/battle_controller_wally.c b/src/battle_controller_wally.c index bf06b24078..b2e775b397 100644 --- a/src/battle_controller_wally.c +++ b/src/battle_controller_wally.c @@ -1416,7 +1416,9 @@ static void WallyHandleFaintingCry(void) { u16 species = GetMonData(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], MON_DATA_SPECIES); - PlayCry1(species, 25); + // Seems that it doesn't bother using CRY_MODE_FAINT because + // Wally's Pokémon during the tutorial is never intended to faint. + PlayCry_Normal(species, 25); WallyBufferExecCompleted(); } @@ -1467,7 +1469,7 @@ static void StartSendOutAnim(u8 battlerId) gBattleControllerData[battlerId] = CreateInvisibleSpriteWithCallback(SpriteCB_WaitForBattlerBallReleaseAnim); SetMultiuseSpriteTemplateToPokemon(species, GetBattlerPosition(battlerId)); gBattlerSpriteIds[battlerId] = CreateSprite(&gMultiuseSpriteTemplate, - GetBattlerSpriteCoord(battlerId, 2), + GetBattlerSpriteCoord(battlerId, BATTLER_COORD_X_2), GetBattlerSpriteDefault_Y(battlerId), GetBattlerSpriteSubpriority(battlerId)); diff --git a/src/battle_dome.c b/src/battle_dome.c index 652f038031..36e5734b24 100644 --- a/src/battle_dome.c +++ b/src/battle_dome.c @@ -870,7 +870,7 @@ static const struct WindowTemplate sInfoCardWindowTemplates[] = static const struct ScanlineEffectParams sTourneyTreeScanlineEffectParams = { - .dmaDest = (void *)REG_ADDR_BG3CNT, + .dmaDest = ®_BG3CNT, .dmaControl = SCANLINE_EFFECT_DMACNT_16BIT, .initState = 1, }; diff --git a/src/battle_gfx_sfx_util.c b/src/battle_gfx_sfx_util.c index 4a7ad35268..18c58181a5 100644 --- a/src/battle_gfx_sfx_util.c +++ b/src/battle_gfx_sfx_util.c @@ -1113,13 +1113,19 @@ void LoadAndCreateEnemyShadowSprites(void) LoadCompressedSpriteSheet(&gSpriteSheet_EnemyShadow); battlerId = GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT); - gBattleSpritesDataPtr->healthBoxesData[battlerId].shadowSpriteId = CreateSprite(&gSpriteTemplate_EnemyShadow, GetBattlerSpriteCoord(battlerId, 0), GetBattlerSpriteCoord(battlerId, 1) + 29, 0xC8); + gBattleSpritesDataPtr->healthBoxesData[battlerId].shadowSpriteId = CreateSprite(&gSpriteTemplate_EnemyShadow, + GetBattlerSpriteCoord(battlerId, BATTLER_COORD_X), + GetBattlerSpriteCoord(battlerId, BATTLER_COORD_Y) + 29, + 0xC8); gSprites[gBattleSpritesDataPtr->healthBoxesData[battlerId].shadowSpriteId].data[0] = battlerId; if (IsDoubleBattle()) { battlerId = GetBattlerAtPosition(B_POSITION_OPPONENT_RIGHT); - gBattleSpritesDataPtr->healthBoxesData[battlerId].shadowSpriteId = CreateSprite(&gSpriteTemplate_EnemyShadow, GetBattlerSpriteCoord(battlerId, 0), GetBattlerSpriteCoord(battlerId, 1) + 29, 0xC8); + gBattleSpritesDataPtr->healthBoxesData[battlerId].shadowSpriteId = CreateSprite(&gSpriteTemplate_EnemyShadow, + GetBattlerSpriteCoord(battlerId, BATTLER_COORD_X), + GetBattlerSpriteCoord(battlerId, BATTLER_COORD_Y) + 29, + 0xC8); gSprites[gBattleSpritesDataPtr->healthBoxesData[battlerId].shadowSpriteId].data[0] = battlerId; } } diff --git a/src/battle_interface.c b/src/battle_interface.c index 9803a0344a..30c30900f2 100644 --- a/src/battle_interface.c +++ b/src/battle_interface.c @@ -10,7 +10,6 @@ #include "string_util.h" #include "text.h" #include "sound.h" -#include "constants/songs.h" #include "decompress.h" #include "task.h" #include "util.h" @@ -21,15 +20,17 @@ #include "international_string_util.h" #include "safari_zone.h" #include "battle_anim.h" -#include "constants/battle_anim.h" -#include "constants/rgb.h" -#include "battle_debug.h" -#include "constants/battle_config.h" #include "data.h" #include "pokemon_summary_screen.h" +#include "strings.h" +#include "battle_debug.h" +#include "item.h" #include "item_icon.h" #include "item_use.h" -#include "item.h" +#include "constants/battle_anim.h" +#include "constants/rgb.h" +#include "constants/songs.h" +#include "constants/battle_config.h" #include "constants/items.h" enum @@ -155,15 +156,6 @@ enum HEALTHBOX_GFX_FRAME_END_BAR, }; -// strings -extern const u8 gText_Slash[]; -extern const u8 gText_HighlightDarkGray[]; -extern const u8 gText_DynColor2[]; -extern const u8 gText_DynColor2Male[]; -extern const u8 gText_DynColor1Female[]; - -// this file's functions - static const u8 *GetHealthboxElementGfxPtr(u8 elementId); static u8* AddTextPrinterAndCreateWindowOnHealthbox(const u8 *str, u32 x, u32 y, u32 bgColor, u32 *windowId); @@ -176,17 +168,17 @@ static void SafariTextIntoHealthboxObject(void *dest, u8 *windowTileData, u32 wi static void HpTextIntoHealthboxObject(void *dest, u8 *windowTileData, u32 windowWidth); static void FillHealthboxObject(void *dest, u32 arg1, u32 arg2); -static void sub_8073E08(u8 taskId); -static void sub_8073F98(u8 taskId); -static void sub_8073E64(u8 taskId); +static void Task_HidePartyStatusSummary_BattleStart_1(u8 taskId); +static void Task_HidePartyStatusSummary_BattleStart_2(u8 taskId); +static void Task_HidePartyStatusSummary_DuringBattle(u8 taskId); static void SpriteCB_HealthBoxOther(struct Sprite *sprite); static void SpriteCB_HealthBar(struct Sprite *sprite); -static void sub_8074158(struct Sprite *sprite); -static void sub_8074090(struct Sprite *sprite); -static void SpriteCB_StatusSummaryBar(struct Sprite *sprite); -static void SpriteCB_StatusSummaryBallsOnBattleStart(struct Sprite *sprite); -static void SpriteCB_StatusSummaryBallsOnSwitchout(struct Sprite *sprite); +static void SpriteCB_StatusSummaryBar_Enter(struct Sprite *sprite); +static void SpriteCB_StatusSummaryBar_Exit(struct Sprite *sprite); +static void SpriteCB_StatusSummaryBalls_Enter(struct Sprite *sprite); +static void SpriteCB_StatusSummaryBalls_Exit(struct Sprite *sprite); +static void SpriteCB_StatusSummaryBalls_OnSwitchout(struct Sprite *sprite); static void SpriteCb_MegaTrigger(struct Sprite *sprite); static void SpriteCb_MegaIndicator(struct Sprite *sprite); @@ -203,8 +195,7 @@ static void Task_FreeAbilityPopUpGfx(u8 taskId); static void SpriteCB_LastUsedBall(struct Sprite *sprite); static void SpriteCB_LastUsedBallWin(struct Sprite *sprite); -// const rom data -static const struct OamData sUnknown_0832C138 = +static const struct OamData sOamData_64x32 = { .y = 0, .affineMode = ST_OAM_AFFINE_OFF, @@ -226,7 +217,7 @@ static const struct SpriteTemplate sHealthboxPlayerSpriteTemplates[2] = { .tileTag = TAG_HEALTHBOX_PLAYER1_TILE, .paletteTag = TAG_HEALTHBOX_PAL, - .oam = &sUnknown_0832C138, + .oam = &sOamData_64x32, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -235,7 +226,7 @@ static const struct SpriteTemplate sHealthboxPlayerSpriteTemplates[2] = { .tileTag = TAG_HEALTHBOX_PLAYER2_TILE, .paletteTag = TAG_HEALTHBOX_PAL, - .oam = &sUnknown_0832C138, + .oam = &sOamData_64x32, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -248,7 +239,7 @@ static const struct SpriteTemplate sHealthboxOpponentSpriteTemplates[2] = { .tileTag = TAG_HEALTHBOX_OPPONENT1_TILE, .paletteTag = TAG_HEALTHBOX_PAL, - .oam = &sUnknown_0832C138, + .oam = &sOamData_64x32, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -257,7 +248,7 @@ static const struct SpriteTemplate sHealthboxOpponentSpriteTemplates[2] = { .tileTag = TAG_HEALTHBOX_OPPONENT2_TILE, .paletteTag = TAG_HEALTHBOX_PAL, - .oam = &sUnknown_0832C138, + .oam = &sOamData_64x32, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -269,7 +260,7 @@ static const struct SpriteTemplate sHealthboxSafariSpriteTemplate = { .tileTag = TAG_HEALTHBOX_SAFARI_TILE, .paletteTag = TAG_HEALTHBOX_PAL, - .oam = &sUnknown_0832C138, + .oam = &sOamData_64x32, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -333,7 +324,7 @@ static const struct SpriteTemplate sHealthbarSpriteTemplates[MAX_BATTLERS_COUNT] } }; -static const struct Subsprite sUnknown_0832C258[] = +static const struct Subsprite sHealthBar_Subsprites_Player[] = { { .x = DISPLAY_WIDTH, @@ -353,7 +344,7 @@ static const struct Subsprite sUnknown_0832C258[] = } }; -static const struct Subsprite sUnknown_0832C260[] = +static const struct Subsprite sHealthBar_Subsprites_Opponent[] = { { .x = DISPLAY_WIDTH, @@ -381,16 +372,16 @@ static const struct Subsprite sUnknown_0832C260[] = } }; -static const struct SubspriteTable sUnknown_0832C28C[] = +static const struct SubspriteTable sHealthBar_SubspriteTables[] = { - {ARRAY_COUNT(sUnknown_0832C258), sUnknown_0832C258}, - {ARRAY_COUNT(sUnknown_0832C260), sUnknown_0832C260} + [B_SIDE_PLAYER] = {ARRAY_COUNT(sHealthBar_Subsprites_Player), sHealthBar_Subsprites_Player}, + [B_SIDE_OPPONENT] = {ARRAY_COUNT(sHealthBar_Subsprites_Opponent), sHealthBar_Subsprites_Opponent} }; -static const struct Subsprite sStatusSummaryBar_Subsprites_0[] = +static const struct Subsprite sStatusSummaryBar_Subsprites_Enter[] = { { - .x = 160, + .x = 32 * 5, .y = 0, .shape = SPRITE_SHAPE(32x8), .size = SPRITE_SIZE(32x8), @@ -398,7 +389,7 @@ static const struct Subsprite sStatusSummaryBar_Subsprites_0[] = .priority = 1 }, { - .x = 192, + .x = 32 * 6, .y = 0, .shape = SPRITE_SHAPE(32x8), .size = SPRITE_SIZE(32x8), @@ -406,7 +397,7 @@ static const struct Subsprite sStatusSummaryBar_Subsprites_0[] = .priority = 1 }, { - .x = 224, + .x = 32 * 7, .y = 0, .shape = SPRITE_SHAPE(32x8), .size = SPRITE_SIZE(32x8), @@ -423,10 +414,10 @@ static const struct Subsprite sStatusSummaryBar_Subsprites_0[] = } }; -static const struct Subsprite sUnknown_0832C2AC[] = +static const struct Subsprite sStatusSummaryBar_Subsprites_Exit[] = { { - .x = 160, + .x = 32 * 5, .y = 0, .shape = SPRITE_SHAPE(32x8), .size = SPRITE_SIZE(32x8), @@ -434,7 +425,7 @@ static const struct Subsprite sUnknown_0832C2AC[] = .priority = 1 }, { - .x = 192, + .x = 32 * 6, .y = 0, .shape = SPRITE_SHAPE(32x8), .size = SPRITE_SIZE(32x8), @@ -442,7 +433,7 @@ static const struct Subsprite sUnknown_0832C2AC[] = .priority = 1 }, { - .x = 224, + .x = 32 * 7, .y = 0, .shape = SPRITE_SHAPE(32x8), .size = SPRITE_SIZE(32x8), @@ -450,7 +441,7 @@ static const struct Subsprite sUnknown_0832C2AC[] = .priority = 1 }, { - .x = 0, + .x = 32 * 0, .y = 0, .shape = SPRITE_SHAPE(32x8), .size = SPRITE_SIZE(32x8), @@ -458,7 +449,7 @@ static const struct Subsprite sUnknown_0832C2AC[] = .priority = 1 }, { - .x = 32, + .x = 32 * 1, .y = 0, .shape = SPRITE_SHAPE(32x8), .size = SPRITE_SIZE(32x8), @@ -466,7 +457,7 @@ static const struct Subsprite sUnknown_0832C2AC[] = .priority = 1 }, { - .x = 64, + .x = 32 * 2, .y = 0, .shape = SPRITE_SHAPE(32x8), .size = SPRITE_SIZE(32x8), @@ -475,14 +466,14 @@ static const struct Subsprite sUnknown_0832C2AC[] = } }; -static const struct SubspriteTable sStatusSummaryBar_SubspriteTable[] = +static const struct SubspriteTable sStatusSummaryBar_SubspriteTable_Enter[] = { - {ARRAY_COUNT(sStatusSummaryBar_Subsprites_0), sStatusSummaryBar_Subsprites_0} + {ARRAY_COUNT(sStatusSummaryBar_Subsprites_Enter), sStatusSummaryBar_Subsprites_Enter} }; -static const struct SubspriteTable sUnknown_0832C2CC[] = +static const struct SubspriteTable sStatusSummaryBar_SubspriteTable_Exit[] = { - {ARRAY_COUNT(sUnknown_0832C2AC), sUnknown_0832C2AC} + {ARRAY_COUNT(sStatusSummaryBar_Subsprites_Exit), sStatusSummaryBar_Subsprites_Exit} }; static const struct CompressedSpriteSheet sStatusSummaryBarSpriteSheet = @@ -524,23 +515,23 @@ static const struct OamData sOamData_StatusSummaryBalls = static const struct SpriteTemplate sStatusSummaryBarSpriteTemplates[2] = { - { + { // Player .tileTag = TAG_STATUS_SUMMARY_BAR_TILE, .paletteTag = TAG_STATUS_SUMMARY_BAR_PAL, - .oam = &sUnknown_0832C138, + .oam = &sOamData_64x32, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, - .callback = SpriteCB_StatusSummaryBar + .callback = SpriteCB_StatusSummaryBar_Enter }, - { + { // Opponent .tileTag = TAG_STATUS_SUMMARY_BAR_TILE, .paletteTag = TAG_STATUS_SUMMARY_BAR_PAL, - .oam = &sUnknown_0832C138, + .oam = &sOamData_64x32, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, - .callback = SpriteCB_StatusSummaryBar + .callback = SpriteCB_StatusSummaryBar_Enter } }; @@ -553,7 +544,7 @@ static const struct SpriteTemplate sStatusSummaryBallsSpriteTemplates[2] = .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, - .callback = SpriteCB_StatusSummaryBallsOnBattleStart + .callback = SpriteCB_StatusSummaryBalls_Enter }, { .tileTag = TAG_STATUS_SUMMARY_BALLS_TILE, @@ -562,7 +553,7 @@ static const struct SpriteTemplate sStatusSummaryBallsSpriteTemplates[2] = .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, - .callback = SpriteCB_StatusSummaryBallsOnBattleStart + .callback = SpriteCB_StatusSummaryBalls_Enter } }; @@ -587,7 +578,15 @@ static const u16 sStatusIconColors[] = [PAL_STATUS_BRN] = RGB(28, 14, 10), }; -static const struct WindowTemplate sHealthboxWindowTemplate = {0, 0, 0, 8, 2, 0, 0}; // width = 8, height = 2 +static const struct WindowTemplate sHealthboxWindowTemplate = { + .bg = 0, + .tilemapLeft = 0, + .tilemapTop = 0, + .width = 8, + .height = 2, + .paletteNum = 0, + .baseBlock = 0 +}; static const u8 sMegaTriggerGfx[] = INCBIN_U8("graphics/battle_interface/mega_trigger.4bpp"); static const u16 sMegaTriggerPal[] = INCBIN_U16("graphics/battle_interface/mega_trigger.gbapal"); @@ -731,9 +730,6 @@ static const struct SpriteTemplate sSpriteTemplate_OmegaIndicator = .callback = SpriteCb_MegaIndicator, }; - -// code - // Because the healthbox is too large to fit into one sprite, it is divided into two sprites. // healthboxLeft or healthboxMain is the left part that is used as the 'main' sprite. // healthboxRight or healthboxOther is the right part of the healthbox. @@ -832,7 +828,7 @@ u8 CreateBattlerHealthboxSprites(u8 battlerId) healthbarSpriteId = CreateSpriteAtEnd(&sHealthbarSpriteTemplates[gBattlerPositions[battlerId]], 140, 60, 0); healthBarSpritePtr = &gSprites[healthbarSpriteId]; - SetSubspriteTables(healthBarSpritePtr, &sUnknown_0832C28C[GetBattlerSide(battlerId)]); + SetSubspriteTables(healthBarSpritePtr, &sHealthBar_SubspriteTables[GetBattlerSide(battlerId)]); healthBarSpritePtr->subspriteMode = SUBSPRITES_IGNORE_PRIORITY; healthBarSpritePtr->oam.priority = 1; @@ -1303,7 +1299,7 @@ static void PrintSafariMonInfo(u8 healthboxSpriteId, struct Pokemon *mon) barFontGfx = &gMonSpritesGfxPtr->barFontGfx[0x520 + (GetBattlerPosition(gSprites[healthboxSpriteId].hMain_Battler) * 384)]; var = 5; nature = GetNature(mon); - StringCopy(text + 6, gNatureNamePointers[nature]); + StringCopy(&text[6], gNatureNamePointers[nature]); RenderTextHandleBold(barFontGfx, FONT_BOLD, text); for (j = 6, i = 0; i < var; i++, j++) @@ -1332,8 +1328,8 @@ static void PrintSafariMonInfo(u8 healthboxSpriteId, struct Pokemon *mon) } healthBarSpriteId = gSprites[healthboxSpriteId].hMain_HealthBarSpriteId; - ConvertIntToDecimalStringN(text + 6, gBattleStruct->safariCatchFactor, STR_CONV_MODE_RIGHT_ALIGN, 2); - ConvertIntToDecimalStringN(text + 9, gBattleStruct->safariEscapeFactor, STR_CONV_MODE_RIGHT_ALIGN, 2); + ConvertIntToDecimalStringN(&text[6], gBattleStruct->safariCatchFactor, STR_CONV_MODE_RIGHT_ALIGN, 2); + ConvertIntToDecimalStringN(&text[9], gBattleStruct->safariEscapeFactor, STR_CONV_MODE_RIGHT_ALIGN, 2); text[5] = CHAR_SPACE; text[8] = CHAR_SLASH; RenderTextHandleBold(gMonSpritesGfxPtr->barFontGfx, FONT_BOLD, text); @@ -1639,7 +1635,7 @@ static void SpriteCb_MegaIndicator(struct Sprite *sprite) #define tSummaryBarSpriteId data[1] #define tBallIconSpriteId(n) data[3 + n] #define tIsBattleStart data[10] -#define tData15 data[15] +#define tBlend data[15] u8 CreatePartyStatusSummarySprites(u8 battlerId, struct HpAndStatus *partyInfo, u8 arg2, bool8 isBattleStart) { @@ -1686,7 +1682,7 @@ u8 CreatePartyStatusSummarySprites(u8 battlerId, struct HpAndStatus *partyInfo, LoadSpritePalette(&sStatusSummaryBallsSpritePal); summaryBarSpriteId = CreateSprite(&sStatusSummaryBarSpriteTemplates[isOpponent], bar_X, bar_Y, 10); - SetSubspriteTables(&gSprites[summaryBarSpriteId], sStatusSummaryBar_SubspriteTable); + SetSubspriteTables(&gSprites[summaryBarSpriteId], sStatusSummaryBar_SubspriteTable_Enter); gSprites[summaryBarSpriteId].x2 = bar_pos2_X; gSprites[summaryBarSpriteId].data[0] = bar_data0; @@ -1705,7 +1701,7 @@ u8 CreatePartyStatusSummarySprites(u8 battlerId, struct HpAndStatus *partyInfo, ballIconSpritesIds[i] = CreateSpriteAtEnd(&sStatusSummaryBallsSpriteTemplates[isOpponent], bar_X, bar_Y - 4, 9); if (!isBattleStart) - gSprites[ballIconSpritesIds[i]].callback = SpriteCB_StatusSummaryBallsOnSwitchout; + gSprites[ballIconSpritesIds[i]].callback = SpriteCB_StatusSummaryBalls_OnSwitchout; if (!isOpponent) { @@ -1737,42 +1733,49 @@ u8 CreatePartyStatusSummarySprites(u8 battlerId, struct HpAndStatus *partyInfo, { for (i = 0; i < PARTY_SIZE; i++) { - if (partyInfo[i].hp == 0xFFFF) // empty slot or an egg + if (partyInfo[i].hp == HP_EMPTY_SLOT) { + // empty slot or an egg gSprites[ballIconSpritesIds[i]].oam.tileNum += 1; gSprites[ballIconSpritesIds[i]].data[7] = 1; } - else if (partyInfo[i].hp == 0) // fainted mon + else if (partyInfo[i].hp == 0) { + // fainted mon gSprites[ballIconSpritesIds[i]].oam.tileNum += 3; } - else if (partyInfo[i].status != 0) // mon with major status + else if (partyInfo[i].status != 0) { + // mon with major status gSprites[ballIconSpritesIds[i]].oam.tileNum += 2; } } } else { - for (i = 0, var = 5, j = 0; j < PARTY_SIZE; j++) + for (i = 0, var = PARTY_SIZE - 1, j = 0; j < PARTY_SIZE; j++) { - if (partyInfo[j].hp == 0xFFFF) // empty slot or an egg + if (partyInfo[j].hp == HP_EMPTY_SLOT) { + // empty slot or an egg gSprites[ballIconSpritesIds[var]].oam.tileNum += 1; gSprites[ballIconSpritesIds[var]].data[7] = 1; var--; continue; } - else if (partyInfo[j].hp == 0) // fainted mon + else if (partyInfo[j].hp == 0) { + // fainted mon gSprites[ballIconSpritesIds[i]].oam.tileNum += 3; } else if (gBattleTypeFlags & BATTLE_TYPE_ARENA && gBattleStruct->arenaLostPlayerMons & gBitTable[j]) { + // fainted arena mon gSprites[ballIconSpritesIds[i]].oam.tileNum += 3; } - else if (partyInfo[j].status != 0) // mon with major status + else if (partyInfo[j].status != 0) { + // mon with primary status gSprites[ballIconSpritesIds[i]].oam.tileNum += 2; } i++; @@ -1783,19 +1786,22 @@ u8 CreatePartyStatusSummarySprites(u8 battlerId, struct HpAndStatus *partyInfo, { if (gBattleTypeFlags & (BATTLE_TYPE_MULTI | BATTLE_TYPE_TWO_OPPONENTS)) { - for (var = 5, i = 0; i < PARTY_SIZE; i++) + for (var = PARTY_SIZE - 1, i = 0; i < PARTY_SIZE; i++) { - if (partyInfo[i].hp == 0xFFFF) // empty slot or an egg + if (partyInfo[i].hp == HP_EMPTY_SLOT) { + // empty slot or an egg gSprites[ballIconSpritesIds[var]].oam.tileNum += 1; gSprites[ballIconSpritesIds[var]].data[7] = 1; } - else if (partyInfo[i].hp == 0) // fainted mon + else if (partyInfo[i].hp == 0) { + // fainted mon gSprites[ballIconSpritesIds[var]].oam.tileNum += 3; } - else if (partyInfo[i].status != 0) // mon with major status + else if (partyInfo[i].status != 0) { + // mon with primary status gSprites[ballIconSpritesIds[var]].oam.tileNum += 2; } var--; @@ -1805,24 +1811,28 @@ u8 CreatePartyStatusSummarySprites(u8 battlerId, struct HpAndStatus *partyInfo, { for (var = 0, i = 0, j = 0; j < PARTY_SIZE; j++) { - if (partyInfo[j].hp == 0xFFFF) // empty slot or an egg + if (partyInfo[j].hp == HP_EMPTY_SLOT) { + // empty slot or an egg gSprites[ballIconSpritesIds[i]].oam.tileNum += 1; gSprites[ballIconSpritesIds[i]].data[7] = 1; i++; continue; } - else if (partyInfo[j].hp == 0) // fainted mon + else if (partyInfo[j].hp == 0) { - gSprites[ballIconSpritesIds[5 - var]].oam.tileNum += 3; + // fainted mon + gSprites[ballIconSpritesIds[PARTY_SIZE - 1 - var]].oam.tileNum += 3; } - else if (gBattleTypeFlags & BATTLE_TYPE_ARENA && gBattleStruct->arenaLostOpponentMons & gBitTable[j]) // hmm...? + else if (gBattleTypeFlags & BATTLE_TYPE_ARENA && gBattleStruct->arenaLostOpponentMons & gBitTable[j]) { - gSprites[ballIconSpritesIds[5 - var]].oam.tileNum += 3; + // fainted arena mon + gSprites[ballIconSpritesIds[PARTY_SIZE - 1 - var]].oam.tileNum += 3; } - else if (partyInfo[j].status != 0) // mon with major status + else if (partyInfo[j].status != 0) { - gSprites[ballIconSpritesIds[5 - var]].oam.tileNum += 2; + // mon with primary status + gSprites[ballIconSpritesIds[PARTY_SIZE - 1 - var]].oam.tileNum += 2; } var++; } @@ -1847,6 +1857,7 @@ u8 CreatePartyStatusSummarySprites(u8 battlerId, struct HpAndStatus *partyInfo, return taskId; } +// Slide the party summary tray back offscreen void Task_HidePartyStatusSummary(u8 taskId) { u8 ballIconSpriteIds[PARTY_SIZE]; @@ -1865,7 +1876,7 @@ void Task_HidePartyStatusSummary(u8 taskId) SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT2_ALL | BLDCNT_EFFECT_BLEND); SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(16, 0)); - gTasks[taskId].tData15 = 16; + gTasks[taskId].tBlend = 16; for (i = 0; i < PARTY_SIZE; i++) gSprites[ballIconSpriteIds[i]].oam.objMode = ST_OAM_OBJ_BLEND; @@ -1878,51 +1889,51 @@ void Task_HidePartyStatusSummary(u8 taskId) { if (GetBattlerSide(battlerId) != B_SIDE_PLAYER) { - gSprites[ballIconSpriteIds[5 - i]].data[1] = 7 * i; - gSprites[ballIconSpriteIds[5 - i]].data[3] = 0; - gSprites[ballIconSpriteIds[5 - i]].data[4] = 0; - gSprites[ballIconSpriteIds[5 - i]].callback = sub_8074158; + gSprites[ballIconSpriteIds[PARTY_SIZE - 1 - i]].data[1] = 7 * i; + gSprites[ballIconSpriteIds[PARTY_SIZE - 1 - i]].data[3] = 0; + gSprites[ballIconSpriteIds[PARTY_SIZE - 1 - i]].data[4] = 0; + gSprites[ballIconSpriteIds[PARTY_SIZE - 1 - i]].callback = SpriteCB_StatusSummaryBalls_Exit; } else { gSprites[ballIconSpriteIds[i]].data[1] = 7 * i; gSprites[ballIconSpriteIds[i]].data[3] = 0; gSprites[ballIconSpriteIds[i]].data[4] = 0; - gSprites[ballIconSpriteIds[i]].callback = sub_8074158; + gSprites[ballIconSpriteIds[i]].callback = SpriteCB_StatusSummaryBalls_Exit; } } gSprites[summaryBarSpriteId].data[0] /= 2; gSprites[summaryBarSpriteId].data[1] = 0; - gSprites[summaryBarSpriteId].callback = sub_8074090; - SetSubspriteTables(&gSprites[summaryBarSpriteId], sUnknown_0832C2CC); - gTasks[taskId].func = sub_8073E08; + gSprites[summaryBarSpriteId].callback = SpriteCB_StatusSummaryBar_Exit; + SetSubspriteTables(&gSprites[summaryBarSpriteId], sStatusSummaryBar_SubspriteTable_Exit); + gTasks[taskId].func = Task_HidePartyStatusSummary_BattleStart_1; } else { - gTasks[taskId].func = sub_8073F98; + gTasks[taskId].func = Task_HidePartyStatusSummary_DuringBattle; } } -static void sub_8073E08(u8 taskId) +static void Task_HidePartyStatusSummary_BattleStart_1(u8 taskId) { if ((gTasks[taskId].data[11]++ % 2) == 0) { - if (--gTasks[taskId].tData15 < 0) + if (--gTasks[taskId].tBlend < 0) return; - SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(gTasks[taskId].data[15], 16 - gTasks[taskId].data[15])); + SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(gTasks[taskId].tBlend, 16 - gTasks[taskId].tBlend)); } - if (gTasks[taskId].tData15 == 0) - gTasks[taskId].func = sub_8073E64; + if (gTasks[taskId].tBlend == 0) + gTasks[taskId].func = Task_HidePartyStatusSummary_BattleStart_2; } -static void sub_8073E64(u8 taskId) +static void Task_HidePartyStatusSummary_BattleStart_2(u8 taskId) { u8 ballIconSpriteIds[PARTY_SIZE]; s32 i; u8 battlerId = gTasks[taskId].tBattler; - if (--gTasks[taskId].tData15 == -1) + if (--gTasks[taskId].tBlend == -1) { u8 summaryBarSpriteId = gTasks[taskId].tSummaryBarSpriteId; @@ -1946,7 +1957,7 @@ static void sub_8073E64(u8 taskId) for (i = 1; i < PARTY_SIZE; i++) DestroySprite(&gSprites[ballIconSpriteIds[i]]); } - else if (gTasks[taskId].tData15 == -3) + else if (gTasks[taskId].tBlend == -3) { gBattleSpritesDataPtr->healthBoxesData[battlerId].partyStatusSummaryShown = 0; SetGpuReg(REG_OFFSET_BLDCNT, 0); @@ -1955,17 +1966,17 @@ static void sub_8073E64(u8 taskId) } } -static void sub_8073F98(u8 taskId) +static void Task_HidePartyStatusSummary_DuringBattle(u8 taskId) { u8 ballIconSpriteIds[PARTY_SIZE]; s32 i; u8 battlerId = gTasks[taskId].tBattler; - if (--gTasks[taskId].tData15 >= 0) + if (--gTasks[taskId].tBlend >= 0) { - SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(gTasks[taskId].data[15], 16 - gTasks[taskId].data[15])); + SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(gTasks[taskId].tBlend, 16 - gTasks[taskId].tBlend)); } - else if (gTasks[taskId].tData15 == -1) + else if (gTasks[taskId].tBlend == -1) { u8 summaryBarSpriteId = gTasks[taskId].tSummaryBarSpriteId; @@ -1978,7 +1989,7 @@ static void sub_8073F98(u8 taskId) for (i = 1; i < PARTY_SIZE; i++) DestroySprite(&gSprites[ballIconSpriteIds[i]]); } - else if (gTasks[taskId].tData15 == -3) + else if (gTasks[taskId].tBlend == -3) { gBattleSpritesDataPtr->healthBoxesData[battlerId].partyStatusSummaryShown = 0; SetGpuReg(REG_OFFSET_BLDCNT, 0); @@ -1991,15 +2002,15 @@ static void sub_8073F98(u8 taskId) #undef tSummaryBarSpriteId #undef tBallIconSpriteId #undef tIsBattleStart -#undef tData15 +#undef tBlend -static void SpriteCB_StatusSummaryBar(struct Sprite *sprite) +static void SpriteCB_StatusSummaryBar_Enter(struct Sprite *sprite) { if (sprite->x2 != 0) sprite->x2 += sprite->data[0]; } -static void sub_8074090(struct Sprite *sprite) +static void SpriteCB_StatusSummaryBar_Exit(struct Sprite *sprite) { sprite->data[1] += 32; if (sprite->data[0] > 0) @@ -2009,7 +2020,7 @@ static void sub_8074090(struct Sprite *sprite) sprite->data[1] &= 0xF; } -static void SpriteCB_StatusSummaryBallsOnBattleStart(struct Sprite *sprite) +static void SpriteCB_StatusSummaryBalls_Enter(struct Sprite *sprite) { u8 var1; u16 var2; @@ -2054,7 +2065,7 @@ static void SpriteCB_StatusSummaryBallsOnBattleStart(struct Sprite *sprite) } } -static void sub_8074158(struct Sprite *sprite) +static void SpriteCB_StatusSummaryBalls_Exit(struct Sprite *sprite) { u8 var1; u16 var2; @@ -2080,7 +2091,7 @@ static void sub_8074158(struct Sprite *sprite) } } -static void SpriteCB_StatusSummaryBallsOnSwitchout(struct Sprite *sprite) +static void SpriteCB_StatusSummaryBalls_OnSwitchout(struct Sprite *sprite) { u8 barSpriteId = sprite->data[0]; @@ -2099,7 +2110,7 @@ static void UpdateNickInHealthbox(u8 healthboxSpriteId, struct Pokemon *mon) if (illusionMon != NULL) mon = illusionMon; - StringCopy(gDisplayedStringBattle, gText_HighlightDarkGray); + StringCopy(gDisplayedStringBattle, gText_HealthboxNickname); GetMonData(mon, MON_DATA_NICKNAME, nickname); StringGetEnd10(nickname); ptr = StringAppend(gDisplayedStringBattle, nickname); @@ -2115,15 +2126,15 @@ static void UpdateNickInHealthbox(u8 healthboxSpriteId, struct Pokemon *mon) switch (gender) { default: - StringCopy(ptr, gText_DynColor2); + StringCopy(ptr, gText_HealthboxGender_None); windowTileData = AddTextPrinterAndCreateWindowOnHealthbox(gDisplayedStringBattle, 0, 3, 2, &windowId); break; case MON_MALE: - StringCopy(ptr, gText_DynColor2Male); + StringCopy(ptr, gText_HealthboxGender_Male); windowTileData = AddTextPrinterAndCreateWindowOnHealthbox(gDisplayedStringBattle, 0, 3, 2, &windowId); break; case MON_FEMALE: - StringCopy(ptr, gText_DynColor1Female); + StringCopy(ptr, gText_HealthboxGender_Female); windowTileData = AddTextPrinterAndCreateWindowOnHealthbox(gDisplayedStringBattle, 0, 3, 2, &windowId); break; } diff --git a/src/battle_main.c b/src/battle_main.c index 9dc3f0e2d5..b6ab9345bd 100644 --- a/src/battle_main.c +++ b/src/battle_main.c @@ -249,13 +249,13 @@ u8 gBattleControllerData[MAX_BATTLERS_COUNT]; // Used by the battle controllers static const struct ScanlineEffectParams sIntroScanlineParams16Bit = { - (void *)REG_ADDR_BG3HOFS, SCANLINE_EFFECT_DMACNT_16BIT, 1 + ®_BG3HOFS, SCANLINE_EFFECT_DMACNT_16BIT, 1 }; // unused static const struct ScanlineEffectParams sIntroScanlineParams32Bit = { - (void *)REG_ADDR_BG3HOFS, SCANLINE_EFFECT_DMACNT_32BIT, 1 + ®_BG3HOFS, SCANLINE_EFFECT_DMACNT_32BIT, 1 }; const struct SpriteTemplate gUnusedBattleInitSprite = @@ -301,7 +301,7 @@ const struct OamData gOamData_BattleSpritePlayerSide = .affineParam = 0, }; -static const s8 gUnknown_0831ACE0[] ={-32, -16, -16, -32, -32, 0, 0, 0}; +static const s8 sCenterToCornerVecXs[8] ={-32, -16, -16, -32, -32}; const u8 gTypeNames[NUMBER_OF_MON_TYPES][TYPE_NAME_LENGTH + 1] = { @@ -2849,7 +2849,7 @@ void SpriteCB_PlayerMonFromBall(struct Sprite *sprite) static void SpriteCB_TrainerThrowObject_Main(struct Sprite *sprite) { - sub_8039E9C(sprite); + AnimSetCenterToCornerVecX(sprite); if (sprite->animEnded) sprite->callback = SpriteCB_Idle; } @@ -2862,10 +2862,10 @@ void SpriteCB_TrainerThrowObject(struct Sprite *sprite) sprite->callback = SpriteCB_TrainerThrowObject_Main; } -void sub_8039E9C(struct Sprite *sprite) +void AnimSetCenterToCornerVecX(struct Sprite *sprite) { if (sprite->animDelayCounter == 0) - sprite->centerToCornerVecX = gUnknown_0831ACE0[sprite->animCmdIndex]; + sprite->centerToCornerVecX = sCenterToCornerVecXs[sprite->animCmdIndex]; } void BeginBattleIntroDummy(void) @@ -3344,7 +3344,7 @@ static void DoBattleIntro(void) if (GetMonData(&gEnemyParty[i], MON_DATA_SPECIES2) == SPECIES_NONE || GetMonData(&gEnemyParty[i], MON_DATA_SPECIES2) == SPECIES_EGG) { - hpStatus[i].hp = 0xFFFF; + hpStatus[i].hp = HP_EMPTY_SLOT; hpStatus[i].status = 0; } else @@ -3363,7 +3363,7 @@ static void DoBattleIntro(void) if (GetMonData(&gPlayerParty[i], MON_DATA_SPECIES2) == SPECIES_NONE || GetMonData(&gPlayerParty[i], MON_DATA_SPECIES2) == SPECIES_EGG) { - hpStatus[i].hp = 0xFFFF; + hpStatus[i].hp = HP_EMPTY_SLOT; hpStatus[i].status = 0; } else diff --git a/src/berry_blender.c b/src/berry_blender.c index 7d22eae774..27ea641ce1 100644 --- a/src/berry_blender.c +++ b/src/berry_blender.c @@ -2785,7 +2785,7 @@ static bool8 LinkPlayAgainHandleSaving(void) } break; case 2: - FullSaveGame(); + WriteSaveBlock2(); sBerryBlender->linkPlayAgainState++; sBerryBlender->framesToWait = 0; break; @@ -2799,7 +2799,7 @@ static bool8 LinkPlayAgainHandleSaving(void) case 4: if (IsLinkTaskFinished()) { - if (CheckSaveFile()) + if (WriteSaveBlock1Sector()) { sBerryBlender->linkPlayAgainState = 5; } diff --git a/src/berry_crush.c b/src/berry_crush.c index 6f432a3f98..9b8323e2d7 100755 --- a/src/berry_crush.c +++ b/src/berry_crush.c @@ -3244,10 +3244,10 @@ static u32 Cmd_SaveGame(struct BerryCrushGame *game, u8 *args) DrawDialogueFrame(0, 0); AddTextPrinterParameterized2(0, FONT_NORMAL, gText_SavingDontTurnOffPower, 0, 0, 2, 1, 3); CopyWindowToVram(0, COPYWIN_FULL); - CreateTask(Task_LinkSave, 0); + CreateTask(Task_LinkFullSave, 0); break; case 3: - if (FuncIsActiveTask(Task_LinkSave)) + if (FuncIsActiveTask(Task_LinkFullSave)) return 0; break; case 4: diff --git a/src/braille.c b/src/braille.c index b4ee43ad02..704f50760b 100644 --- a/src/braille.c +++ b/src/braille.c @@ -8,7 +8,11 @@ // For printing braille messages, see ScrCmd_braillemessage ALIGNED(4) -static const u8 sScrollDistances[] = {1, 2, 4}; +static const u8 sScrollDistances[] = { + [OPTIONS_TEXT_SPEED_SLOW] = 1, + [OPTIONS_TEXT_SPEED_MID] = 2, + [OPTIONS_TEXT_SPEED_FAST] = 4, +}; static const u16 sFont_Braille[] = INCBIN_U16("graphics/fonts/braille.fwjpnfont"); static void DecompressGlyph_Braille(u16); diff --git a/src/contest_util.c b/src/contest_util.c index 37a5dedcd9..6fd74a68aa 100644 --- a/src/contest_util.c +++ b/src/contest_util.c @@ -1578,7 +1578,7 @@ static void SpriteCB_WinnerMonSlideIn(struct Sprite *sprite) { if (++sprite->data[0] == 10) { - PlayCry1(sprite->data[1], 0); + PlayCry_Normal(sprite->data[1], 0); sprite->data[1] = 0; } } diff --git a/src/data/pokemon_graphics/back_pic_coordinates.h b/src/data/pokemon_graphics/back_pic_coordinates.h index 131ac13d9b..addb482851 100644 --- a/src/data/pokemon_graphics/back_pic_coordinates.h +++ b/src/data/pokemon_graphics/back_pic_coordinates.h @@ -1,2203 +1,2207 @@ +// All Pokémon pics are 64x64, but this data table defines where in this 64x64 frame +// the sprite's non-transparent pixels actually are. +// .size is the dimensions of this drawn pixel area. +// .y_offset is the number of pixels between the drawn pixel area and the bottom edge. const struct MonCoords gMonBackPicCoords[] = { [SPECIES_NONE] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 0, }, [SPECIES_BULBASAUR] = { - .size = 0x64, + .size = MON_COORDS_SIZE(48, 32), .y_offset = 16, }, [SPECIES_IVYSAUR] = { - .size = 0x66, + .size = MON_COORDS_SIZE(48, 48), .y_offset = 9, }, [SPECIES_VENUSAUR] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 7, }, [SPECIES_CHARMANDER] = { - .size = 0x65, + .size = MON_COORDS_SIZE(48, 40), .y_offset = 14, }, [SPECIES_CHARMELEON] = { - .size = 0x66, + .size = MON_COORDS_SIZE(48, 48), .y_offset = 9, }, [SPECIES_CHARIZARD] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 4, }, [SPECIES_SQUIRTLE] = { - .size = 0x65, + .size = MON_COORDS_SIZE(48, 40), .y_offset = 14, }, [SPECIES_WARTORTLE] = { - .size = 0x76, + .size = MON_COORDS_SIZE(56, 48), .y_offset = 10, }, [SPECIES_BLASTOISE] = { - .size = 0x86, + .size = MON_COORDS_SIZE(64, 48), .y_offset = 8, }, [SPECIES_CATERPIE] = { - .size = 0x55, + .size = MON_COORDS_SIZE(40, 40), .y_offset = 15, }, [SPECIES_METAPOD] = { - .size = 0x65, + .size = MON_COORDS_SIZE(48, 40), .y_offset = 12, }, [SPECIES_BUTTERFREE] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 6, }, [SPECIES_WEEDLE] = { - .size = 0x56, + .size = MON_COORDS_SIZE(40, 48), .y_offset = 11, }, [SPECIES_KAKUNA] = { - .size = 0x46, + .size = MON_COORDS_SIZE(32, 48), .y_offset = 10, }, [SPECIES_BEEDRILL] = { - .size = 0x86, + .size = MON_COORDS_SIZE(64, 48), .y_offset = 9, }, [SPECIES_PIDGEY] = { - .size = 0x66, + .size = MON_COORDS_SIZE(48, 48), .y_offset = 8, }, [SPECIES_PIDGEOTTO] = { - .size = 0x85, + .size = MON_COORDS_SIZE(64, 40), .y_offset = 12, }, [SPECIES_PIDGEOT] = { - .size = 0x78, + .size = MON_COORDS_SIZE(56, 64), .y_offset = 2, }, [SPECIES_RATTATA] = { - .size = 0x65, + .size = MON_COORDS_SIZE(48, 40), .y_offset = 13, }, [SPECIES_RATICATE] = { - .size = 0x75, + .size = MON_COORDS_SIZE(56, 40), .y_offset = 13, }, [SPECIES_SPEAROW] = { - .size = 0x65, + .size = MON_COORDS_SIZE(48, 40), .y_offset = 12, }, [SPECIES_FEAROW] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 5, }, [SPECIES_EKANS] = { - .size = 0x66, + .size = MON_COORDS_SIZE(48, 48), .y_offset = 9, }, [SPECIES_ARBOK] = { - .size = 0x77, + .size = MON_COORDS_SIZE(56, 56), .y_offset = 4, }, [SPECIES_PIKACHU] = { - .size = 0x77, + .size = MON_COORDS_SIZE(56, 56), .y_offset = 7, }, [SPECIES_RAICHU] = { - .size = 0x66, + .size = MON_COORDS_SIZE(48, 48), .y_offset = 8, }, [SPECIES_SANDSHREW] = { - .size = 0x65, + .size = MON_COORDS_SIZE(48, 40), .y_offset = 13, }, [SPECIES_SANDSLASH] = { - .size = 0x86, + .size = MON_COORDS_SIZE(64, 48), .y_offset = 9, }, [SPECIES_NIDORAN_F] = { - .size = 0x55, + .size = MON_COORDS_SIZE(40, 40), .y_offset = 12, }, [SPECIES_NIDORINA] = { - .size = 0x86, + .size = MON_COORDS_SIZE(64, 48), .y_offset = 10, }, [SPECIES_NIDOQUEEN] = { - .size = 0x77, + .size = MON_COORDS_SIZE(56, 56), .y_offset = 6, }, [SPECIES_NIDORAN_M] = { - .size = 0x56, + .size = MON_COORDS_SIZE(40, 48), .y_offset = 8, }, [SPECIES_NIDORINO] = { - .size = 0x86, + .size = MON_COORDS_SIZE(64, 48), .y_offset = 9, }, [SPECIES_NIDOKING] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 3, }, [SPECIES_CLEFAIRY] = { - .size = 0x65, + .size = MON_COORDS_SIZE(48, 40), .y_offset = 13, }, [SPECIES_CLEFABLE] = { - .size = 0x76, + .size = MON_COORDS_SIZE(56, 48), .y_offset = 10, }, [SPECIES_VULPIX] = { - .size = 0x76, + .size = MON_COORDS_SIZE(56, 48), .y_offset = 9, }, [SPECIES_NINETALES] = { - .size = 0x77, + .size = MON_COORDS_SIZE(56, 56), .y_offset = 5, }, [SPECIES_JIGGLYPUFF] = { - .size = 0x65, + .size = MON_COORDS_SIZE(48, 40), .y_offset = 13, }, [SPECIES_WIGGLYTUFF] = { - .size = 0x66, + .size = MON_COORDS_SIZE(48, 48), .y_offset = 8, }, [SPECIES_ZUBAT] = { - .size = 0x76, + .size = MON_COORDS_SIZE(56, 48), .y_offset = 11, }, [SPECIES_GOLBAT] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 6, }, [SPECIES_ODDISH] = { - .size = 0x56, + .size = MON_COORDS_SIZE(40, 48), .y_offset = 11, }, [SPECIES_GLOOM] = { - .size = 0x66, + .size = MON_COORDS_SIZE(48, 48), .y_offset = 10, }, [SPECIES_VILEPLUME] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 7, }, [SPECIES_PARAS] = { - .size = 0x63, + .size = MON_COORDS_SIZE(48, 24), .y_offset = 20, }, [SPECIES_PARASECT] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 7, }, [SPECIES_VENONAT] = { - .size = 0x77, + .size = MON_COORDS_SIZE(56, 56), .y_offset = 6, }, [SPECIES_VENOMOTH] = { - .size = 0x77, + .size = MON_COORDS_SIZE(56, 56), .y_offset = 4, }, [SPECIES_DIGLETT] = { - .size = 0x54, + .size = MON_COORDS_SIZE(40, 32), .y_offset = 16, }, [SPECIES_DUGTRIO] = { - .size = 0x66, + .size = MON_COORDS_SIZE(48, 48), .y_offset = 11, }, [SPECIES_MEOWTH] = { - .size = 0x65, + .size = MON_COORDS_SIZE(48, 40), .y_offset = 12, }, [SPECIES_PERSIAN] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 7, }, [SPECIES_PSYDUCK] = { - .size = 0x67, + .size = MON_COORDS_SIZE(48, 56), .y_offset = 7, }, [SPECIES_GOLDUCK] = { - .size = 0x77, + .size = MON_COORDS_SIZE(56, 56), .y_offset = 5, }, [SPECIES_MANKEY] = { - .size = 0x76, + .size = MON_COORDS_SIZE(56, 48), .y_offset = 11, }, [SPECIES_PRIMEAPE] = { - .size = 0x77, + .size = MON_COORDS_SIZE(56, 56), .y_offset = 7, }, [SPECIES_GROWLITHE] = { - .size = 0x66, + .size = MON_COORDS_SIZE(48, 48), .y_offset = 8, }, [SPECIES_ARCANINE] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 6, }, [SPECIES_POLIWAG] = { - .size = 0x74, + .size = MON_COORDS_SIZE(56, 32), .y_offset = 16, }, [SPECIES_POLIWHIRL] = { - .size = 0x65, + .size = MON_COORDS_SIZE(48, 40), .y_offset = 12, }, [SPECIES_POLIWRATH] = { - .size = 0x86, + .size = MON_COORDS_SIZE(64, 48), .y_offset = 11, }, [SPECIES_ABRA] = { - .size = 0x66, + .size = MON_COORDS_SIZE(48, 48), .y_offset = 11, }, [SPECIES_KADABRA] = { - .size = 0x76, + .size = MON_COORDS_SIZE(56, 48), .y_offset = 8, }, [SPECIES_ALAKAZAM] = { - .size = 0x67, + .size = MON_COORDS_SIZE(48, 56), .y_offset = 5, }, [SPECIES_MACHOP] = { - .size = 0x65, + .size = MON_COORDS_SIZE(48, 40), .y_offset = 12, }, [SPECIES_MACHOKE] = { - .size = 0x76, + .size = MON_COORDS_SIZE(56, 48), .y_offset = 9, }, [SPECIES_MACHAMP] = { - .size = 0x67, + .size = MON_COORDS_SIZE(48, 56), .y_offset = 4, }, [SPECIES_BELLSPROUT] = { - .size = 0x66, + .size = MON_COORDS_SIZE(48, 48), .y_offset = 10, }, [SPECIES_WEEPINBELL] = { - .size = 0x66, + .size = MON_COORDS_SIZE(48, 48), .y_offset = 9, }, [SPECIES_VICTREEBEL] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 6, }, [SPECIES_TENTACOOL] = { - .size = 0x56, + .size = MON_COORDS_SIZE(40, 48), .y_offset = 10, }, [SPECIES_TENTACRUEL] = { - .size = 0x86, + .size = MON_COORDS_SIZE(64, 48), .y_offset = 11, }, [SPECIES_GEODUDE] = { - .size = 0x66, + .size = MON_COORDS_SIZE(48, 48), .y_offset = 11, }, [SPECIES_GRAVELER] = { - .size = 0x75, + .size = MON_COORDS_SIZE(56, 40), .y_offset = 12, }, [SPECIES_GOLEM] = { - .size = 0x84, + .size = MON_COORDS_SIZE(64, 32), .y_offset = 16, }, [SPECIES_PONYTA] = { - .size = 0x66, + .size = MON_COORDS_SIZE(48, 48), .y_offset = 9, }, [SPECIES_RAPIDASH] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 5, }, [SPECIES_SLOWPOKE] = { - .size = 0x85, + .size = MON_COORDS_SIZE(64, 40), .y_offset = 14, }, [SPECIES_SLOWBRO] = { - .size = 0x86, + .size = MON_COORDS_SIZE(64, 48), .y_offset = 10, }, [SPECIES_MAGNEMITE] = { - .size = 0x43, + .size = MON_COORDS_SIZE(32, 24), .y_offset = 20, }, [SPECIES_MAGNETON] = { - .size = 0x66, + .size = MON_COORDS_SIZE(48, 48), .y_offset = 10, }, [SPECIES_FARFETCHD] = { - .size = 0x66, + .size = MON_COORDS_SIZE(48, 48), .y_offset = 10, }, [SPECIES_DODUO] = { - .size = 0x66, + .size = MON_COORDS_SIZE(48, 48), .y_offset = 8, }, [SPECIES_DODRIO] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 1, }, [SPECIES_SEEL] = { - .size = 0x66, + .size = MON_COORDS_SIZE(48, 48), .y_offset = 10, }, [SPECIES_DEWGONG] = { - .size = 0x77, + .size = MON_COORDS_SIZE(56, 56), .y_offset = 5, }, [SPECIES_GRIMER] = { - .size = 0x75, + .size = MON_COORDS_SIZE(56, 40), .y_offset = 12, }, [SPECIES_MUK] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 5, }, [SPECIES_SHELLDER] = { - .size = 0x76, + .size = MON_COORDS_SIZE(56, 48), .y_offset = 11, }, [SPECIES_CLOYSTER] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 6, }, [SPECIES_GASTLY] = { - .size = 0x85, + .size = MON_COORDS_SIZE(64, 40), .y_offset = 14, }, [SPECIES_HAUNTER] = { - .size = 0x76, + .size = MON_COORDS_SIZE(56, 48), .y_offset = 8, }, [SPECIES_GENGAR] = { - .size = 0x76, + .size = MON_COORDS_SIZE(56, 48), .y_offset = 9, }, [SPECIES_ONIX] = { - .size = 0x78, + .size = MON_COORDS_SIZE(56, 64), .y_offset = 0, }, [SPECIES_DROWZEE] = { - .size = 0x65, + .size = MON_COORDS_SIZE(48, 40), .y_offset = 13, }, [SPECIES_HYPNO] = { - .size = 0x66, + .size = MON_COORDS_SIZE(48, 48), .y_offset = 9, }, [SPECIES_KRABBY] = { - .size = 0x66, + .size = MON_COORDS_SIZE(48, 48), .y_offset = 10, }, [SPECIES_KINGLER] = { - .size = 0x77, + .size = MON_COORDS_SIZE(56, 56), .y_offset = 4, }, [SPECIES_VOLTORB] = { - .size = 0x55, + .size = MON_COORDS_SIZE(40, 40), .y_offset = 14, }, [SPECIES_ELECTRODE] = { - .size = 0x65, + .size = MON_COORDS_SIZE(48, 40), .y_offset = 13, }, [SPECIES_EXEGGCUTE] = { - .size = 0x65, + .size = MON_COORDS_SIZE(48, 40), .y_offset = 13, }, [SPECIES_EXEGGUTOR] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 4, }, [SPECIES_CUBONE] = { - .size = 0x66, + .size = MON_COORDS_SIZE(48, 48), .y_offset = 10, }, [SPECIES_MAROWAK] = { - .size = 0x66, + .size = MON_COORDS_SIZE(48, 48), .y_offset = 8, }, [SPECIES_HITMONLEE] = { - .size = 0x65, + .size = MON_COORDS_SIZE(48, 40), .y_offset = 12, }, [SPECIES_HITMONCHAN] = { - .size = 0x65, + .size = MON_COORDS_SIZE(48, 40), .y_offset = 12, }, [SPECIES_LICKITUNG] = { - .size = 0x65, + .size = MON_COORDS_SIZE(48, 40), .y_offset = 14, }, [SPECIES_KOFFING] = { - .size = 0x66, + .size = MON_COORDS_SIZE(48, 48), .y_offset = 9, }, [SPECIES_WEEZING] = { - .size = 0x77, + .size = MON_COORDS_SIZE(56, 56), .y_offset = 6, }, [SPECIES_RHYHORN] = { - .size = 0x85, + .size = MON_COORDS_SIZE(64, 40), .y_offset = 12, }, [SPECIES_RHYDON] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 3, }, [SPECIES_CHANSEY] = { - .size = 0x86, + .size = MON_COORDS_SIZE(64, 48), .y_offset = 11, }, [SPECIES_TANGELA] = { - .size = 0x85, + .size = MON_COORDS_SIZE(64, 40), .y_offset = 14, }, [SPECIES_KANGASKHAN] = { - .size = 0x77, + .size = MON_COORDS_SIZE(56, 56), .y_offset = 5, }, [SPECIES_HORSEA] = { - .size = 0x66, + .size = MON_COORDS_SIZE(48, 48), .y_offset = 9, }, [SPECIES_SEADRA] = { - .size = 0x66, + .size = MON_COORDS_SIZE(48, 48), .y_offset = 8, }, [SPECIES_GOLDEEN] = { - .size = 0x66, + .size = MON_COORDS_SIZE(48, 48), .y_offset = 8, }, [SPECIES_SEAKING] = { - .size = 0x76, + .size = MON_COORDS_SIZE(56, 48), .y_offset = 11, }, [SPECIES_STARYU] = { - .size = 0x65, + .size = MON_COORDS_SIZE(48, 40), .y_offset = 13, }, [SPECIES_STARMIE] = { - .size = 0x85, + .size = MON_COORDS_SIZE(64, 40), .y_offset = 14, }, [SPECIES_MR_MIME] = { - .size = 0x85, + .size = MON_COORDS_SIZE(64, 40), .y_offset = 13, }, [SPECIES_SCYTHER] = { - .size = 0x77, + .size = MON_COORDS_SIZE(56, 56), .y_offset = 7, }, [SPECIES_JYNX] = { - .size = 0x86, + .size = MON_COORDS_SIZE(64, 48), .y_offset = 10, }, [SPECIES_ELECTABUZZ] = { - .size = 0x66, + .size = MON_COORDS_SIZE(48, 48), .y_offset = 8, }, [SPECIES_MAGMAR] = { - .size = 0x66, + .size = MON_COORDS_SIZE(48, 48), .y_offset = 8, }, [SPECIES_PINSIR] = { - .size = 0x66, + .size = MON_COORDS_SIZE(48, 48), .y_offset = 9, }, [SPECIES_TAUROS] = { - .size = 0x85, + .size = MON_COORDS_SIZE(64, 40), .y_offset = 13, }, [SPECIES_MAGIKARP] = { - .size = 0x76, + .size = MON_COORDS_SIZE(56, 48), .y_offset = 9, }, [SPECIES_GYARADOS] = { - .size = 0x78, + .size = MON_COORDS_SIZE(56, 64), .y_offset = 0, }, [SPECIES_LAPRAS] = { - .size = 0x77, + .size = MON_COORDS_SIZE(56, 56), .y_offset = 4, }, [SPECIES_DITTO] = { - .size = 0x54, + .size = MON_COORDS_SIZE(40, 32), .y_offset = 17, }, [SPECIES_EEVEE] = { - .size = 0x66, + .size = MON_COORDS_SIZE(48, 48), .y_offset = 10, }, [SPECIES_VAPOREON] = { - .size = 0x66, + .size = MON_COORDS_SIZE(48, 48), .y_offset = 10, }, [SPECIES_JOLTEON] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 6, }, [SPECIES_FLAREON] = { - .size = 0x67, + .size = MON_COORDS_SIZE(48, 56), .y_offset = 5, }, [SPECIES_PORYGON] = { - .size = 0x65, + .size = MON_COORDS_SIZE(48, 40), .y_offset = 13, }, [SPECIES_OMANYTE] = { - .size = 0x66, + .size = MON_COORDS_SIZE(48, 48), .y_offset = 10, }, [SPECIES_OMASTAR] = { - .size = 0x66, + .size = MON_COORDS_SIZE(48, 48), .y_offset = 8, }, [SPECIES_KABUTO] = { - .size = 0x65, + .size = MON_COORDS_SIZE(48, 40), .y_offset = 13, }, [SPECIES_KABUTOPS] = { - .size = 0x77, + .size = MON_COORDS_SIZE(56, 56), .y_offset = 5, }, [SPECIES_AERODACTYL] = { - .size = 0x86, + .size = MON_COORDS_SIZE(64, 48), .y_offset = 8, }, [SPECIES_SNORLAX] = { - .size = 0x86, + .size = MON_COORDS_SIZE(64, 48), .y_offset = 11, }, [SPECIES_ARTICUNO] = { - .size = 0x65, + .size = MON_COORDS_SIZE(48, 40), .y_offset = 12, }, [SPECIES_ZAPDOS] = { - .size = 0x76, + .size = MON_COORDS_SIZE(56, 48), .y_offset = 11, }, [SPECIES_MOLTRES] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 4, }, [SPECIES_DRATINI] = { - .size = 0x66, + .size = MON_COORDS_SIZE(48, 48), .y_offset = 9, }, [SPECIES_DRAGONAIR] = { - .size = 0x78, + .size = MON_COORDS_SIZE(56, 64), .y_offset = 0, }, [SPECIES_DRAGONITE] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 6, }, [SPECIES_MEWTWO] = { - .size = 0x78, + .size = MON_COORDS_SIZE(56, 64), .y_offset = 1, }, [SPECIES_MEW] = { - .size = 0x66, + .size = MON_COORDS_SIZE(48, 48), .y_offset = 8, }, [SPECIES_CHIKORITA] = { - .size = 0x56, + .size = MON_COORDS_SIZE(40, 48), .y_offset = 10, }, [SPECIES_BAYLEEF] = { - .size = 0x66, + .size = MON_COORDS_SIZE(48, 48), .y_offset = 8, }, [SPECIES_MEGANIUM] = { - .size = 0x78, + .size = MON_COORDS_SIZE(56, 64), .y_offset = 0, }, [SPECIES_CYNDAQUIL] = { - .size = 0x76, + .size = MON_COORDS_SIZE(56, 48), .y_offset = 9, }, [SPECIES_QUILAVA] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 4, }, [SPECIES_TYPHLOSION] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 4, }, [SPECIES_TOTODILE] = { - .size = 0x66, + .size = MON_COORDS_SIZE(48, 48), .y_offset = 11, }, [SPECIES_CROCONAW] = { - .size = 0x67, + .size = MON_COORDS_SIZE(48, 56), .y_offset = 7, }, [SPECIES_FERALIGATR] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 1, }, [SPECIES_SENTRET] = { - .size = 0x67, + .size = MON_COORDS_SIZE(48, 56), .y_offset = 5, }, [SPECIES_FURRET] = { - .size = 0x66, + .size = MON_COORDS_SIZE(48, 48), .y_offset = 8, }, [SPECIES_HOOTHOOT] = { - .size = 0x66, + .size = MON_COORDS_SIZE(48, 48), .y_offset = 8, }, [SPECIES_NOCTOWL] = { - .size = 0x68, + .size = MON_COORDS_SIZE(48, 64), .y_offset = 3, }, [SPECIES_LEDYBA] = { - .size = 0x76, + .size = MON_COORDS_SIZE(56, 48), .y_offset = 11, }, [SPECIES_LEDIAN] = { - .size = 0x77, + .size = MON_COORDS_SIZE(56, 56), .y_offset = 7, }, [SPECIES_SPINARAK] = { - .size = 0x73, + .size = MON_COORDS_SIZE(56, 24), .y_offset = 21, }, [SPECIES_ARIADOS] = { - .size = 0x86, + .size = MON_COORDS_SIZE(64, 48), .y_offset = 11, }, [SPECIES_CROBAT] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 5, }, [SPECIES_CHINCHOU] = { - .size = 0x86, + .size = MON_COORDS_SIZE(64, 48), .y_offset = 8, }, [SPECIES_LANTURN] = { - .size = 0x86, + .size = MON_COORDS_SIZE(64, 48), .y_offset = 8, }, [SPECIES_PICHU] = { - .size = 0x66, + .size = MON_COORDS_SIZE(48, 48), .y_offset = 11, }, [SPECIES_CLEFFA] = { - .size = 0x65, + .size = MON_COORDS_SIZE(48, 40), .y_offset = 15, }, [SPECIES_IGGLYBUFF] = { - .size = 0x66, + .size = MON_COORDS_SIZE(48, 48), .y_offset = 11, }, [SPECIES_TOGEPI] = { - .size = 0x54, + .size = MON_COORDS_SIZE(40, 32), .y_offset = 16, }, [SPECIES_TOGETIC] = { - .size = 0x66, + .size = MON_COORDS_SIZE(48, 48), .y_offset = 8, }, [SPECIES_NATU] = { - .size = 0x54, + .size = MON_COORDS_SIZE(40, 32), .y_offset = 17, }, [SPECIES_XATU] = { - .size = 0x76, + .size = MON_COORDS_SIZE(56, 48), .y_offset = 8, }, [SPECIES_MAREEP] = { - .size = 0x66, + .size = MON_COORDS_SIZE(48, 48), .y_offset = 9, }, [SPECIES_FLAAFFY] = { - .size = 0x66, + .size = MON_COORDS_SIZE(48, 48), .y_offset = 9, }, [SPECIES_AMPHAROS] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 1, }, [SPECIES_BELLOSSOM] = { - .size = 0x66, + .size = MON_COORDS_SIZE(48, 48), .y_offset = 11, }, [SPECIES_MARILL] = { - .size = 0x75, + .size = MON_COORDS_SIZE(56, 40), .y_offset = 12, }, [SPECIES_AZUMARILL] = { - .size = 0x86, + .size = MON_COORDS_SIZE(64, 48), .y_offset = 8, }, [SPECIES_SUDOWOODO] = { - .size = 0x66, + .size = MON_COORDS_SIZE(48, 48), .y_offset = 8, }, [SPECIES_POLITOED] = { - .size = 0x66, + .size = MON_COORDS_SIZE(48, 48), .y_offset = 9, }, [SPECIES_HOPPIP] = { - .size = 0x66, + .size = MON_COORDS_SIZE(48, 48), .y_offset = 11, }, [SPECIES_SKIPLOOM] = { - .size = 0x65, + .size = MON_COORDS_SIZE(48, 40), .y_offset = 13, }, [SPECIES_JUMPLUFF] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 4, }, [SPECIES_AIPOM] = { - .size = 0x66, + .size = MON_COORDS_SIZE(48, 48), .y_offset = 9, }, [SPECIES_SUNKERN] = { - .size = 0x56, + .size = MON_COORDS_SIZE(40, 48), .y_offset = 10, }, [SPECIES_SUNFLORA] = { - .size = 0x66, + .size = MON_COORDS_SIZE(48, 48), .y_offset = 8, }, [SPECIES_YANMA] = { - .size = 0x77, + .size = MON_COORDS_SIZE(56, 56), .y_offset = 4, }, [SPECIES_WOOPER] = { - .size = 0x85, + .size = MON_COORDS_SIZE(64, 40), .y_offset = 15, }, [SPECIES_QUAGSIRE] = { - .size = 0x76, + .size = MON_COORDS_SIZE(56, 48), .y_offset = 8, }, [SPECIES_ESPEON] = { - .size = 0x76, + .size = MON_COORDS_SIZE(56, 48), .y_offset = 11, }, [SPECIES_UMBREON] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 4, }, [SPECIES_MURKROW] = { - .size = 0x66, + .size = MON_COORDS_SIZE(48, 48), .y_offset = 9, }, [SPECIES_SLOWKING] = { - .size = 0x66, + .size = MON_COORDS_SIZE(48, 48), .y_offset = 8, }, [SPECIES_MISDREAVUS] = { - .size = 0x66, + .size = MON_COORDS_SIZE(48, 48), .y_offset = 10, }, [SPECIES_UNOWN] = { - .size = 0x36, + .size = MON_COORDS_SIZE(24, 48), .y_offset = 8, }, [SPECIES_WOBBUFFET] = { - .size = 0x75, + .size = MON_COORDS_SIZE(56, 40), .y_offset = 12, }, [SPECIES_GIRAFARIG] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 5, }, [SPECIES_PINECO] = { - .size = 0x65, + .size = MON_COORDS_SIZE(48, 40), .y_offset = 15, }, [SPECIES_FORRETRESS] = { - .size = 0x84, + .size = MON_COORDS_SIZE(64, 32), .y_offset = 16, }, [SPECIES_DUNSPARCE] = { - .size = 0x85, + .size = MON_COORDS_SIZE(64, 40), .y_offset = 15, }, [SPECIES_GLIGAR] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 5, }, [SPECIES_STEELIX] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 0, }, [SPECIES_SNUBBULL] = { - .size = 0x76, + .size = MON_COORDS_SIZE(56, 48), .y_offset = 10, }, [SPECIES_GRANBULL] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 5, }, [SPECIES_QWILFISH] = { - .size = 0x77, + .size = MON_COORDS_SIZE(56, 56), .y_offset = 7, }, [SPECIES_SCIZOR] = { - .size = 0x77, + .size = MON_COORDS_SIZE(56, 56), .y_offset = 4, }, [SPECIES_SHUCKLE] = { - .size = 0x56, + .size = MON_COORDS_SIZE(40, 48), .y_offset = 11, }, [SPECIES_HERACROSS] = { - .size = 0x77, + .size = MON_COORDS_SIZE(56, 56), .y_offset = 4, }, [SPECIES_SNEASEL] = { - .size = 0x66, + .size = MON_COORDS_SIZE(48, 48), .y_offset = 8, }, [SPECIES_TEDDIURSA] = { - .size = 0x66, + .size = MON_COORDS_SIZE(48, 48), .y_offset = 8, }, [SPECIES_URSARING] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 3, }, [SPECIES_SLUGMA] = { - .size = 0x66, + .size = MON_COORDS_SIZE(48, 48), .y_offset = 8, }, [SPECIES_MAGCARGO] = { - .size = 0x76, + .size = MON_COORDS_SIZE(56, 48), .y_offset = 9, }, [SPECIES_SWINUB] = { - .size = 0x63, + .size = MON_COORDS_SIZE(48, 24), .y_offset = 21, }, [SPECIES_PILOSWINE] = { - .size = 0x75, + .size = MON_COORDS_SIZE(56, 40), .y_offset = 13, }, [SPECIES_CORSOLA] = { - .size = 0x65, + .size = MON_COORDS_SIZE(48, 40), .y_offset = 12, }, [SPECIES_REMORAID] = { - .size = 0x75, + .size = MON_COORDS_SIZE(56, 40), .y_offset = 13, }, [SPECIES_OCTILLERY] = { - .size = 0x66, + .size = MON_COORDS_SIZE(48, 48), .y_offset = 10, }, [SPECIES_DELIBIRD] = { - .size = 0x67, + .size = MON_COORDS_SIZE(48, 56), .y_offset = 6, }, [SPECIES_MANTINE] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 7, }, [SPECIES_SKARMORY] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 4, }, [SPECIES_HOUNDOUR] = { - .size = 0x55, + .size = MON_COORDS_SIZE(40, 40), .y_offset = 12, }, [SPECIES_HOUNDOOM] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 7, }, [SPECIES_KINGDRA] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 6, }, [SPECIES_PHANPY] = { - .size = 0x65, + .size = MON_COORDS_SIZE(48, 40), .y_offset = 14, }, [SPECIES_DONPHAN] = { - .size = 0x85, + .size = MON_COORDS_SIZE(64, 40), .y_offset = 13, }, [SPECIES_PORYGON2] = { - .size = 0x76, + .size = MON_COORDS_SIZE(56, 48), .y_offset = 10, }, [SPECIES_STANTLER] = { - .size = 0x78, + .size = MON_COORDS_SIZE(56, 64), .y_offset = 3, }, [SPECIES_SMEARGLE] = { - .size = 0x76, + .size = MON_COORDS_SIZE(56, 48), .y_offset = 10, }, [SPECIES_TYROGUE] = { - .size = 0x66, + .size = MON_COORDS_SIZE(48, 48), .y_offset = 8, }, [SPECIES_HITMONTOP] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 5, }, [SPECIES_SMOOCHUM] = { - .size = 0x56, + .size = MON_COORDS_SIZE(40, 48), .y_offset = 9, }, [SPECIES_ELEKID] = { - .size = 0x66, + .size = MON_COORDS_SIZE(48, 48), .y_offset = 8, }, [SPECIES_MAGBY] = { - .size = 0x66, + .size = MON_COORDS_SIZE(48, 48), .y_offset = 11, }, [SPECIES_MILTANK] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 7, }, [SPECIES_BLISSEY] = { - .size = 0x85, + .size = MON_COORDS_SIZE(64, 40), .y_offset = 13, }, [SPECIES_RAIKOU] = { - .size = 0x86, + .size = MON_COORDS_SIZE(64, 48), .y_offset = 10, }, [SPECIES_ENTEI] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 6, }, [SPECIES_SUICUNE] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 3, }, [SPECIES_LARVITAR] = { - .size = 0x66, + .size = MON_COORDS_SIZE(48, 48), .y_offset = 8, }, [SPECIES_PUPITAR] = { - .size = 0x67, + .size = MON_COORDS_SIZE(48, 56), .y_offset = 5, }, [SPECIES_TYRANITAR] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 0, }, [SPECIES_LUGIA] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 1, }, [SPECIES_HO_OH] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 1, }, [SPECIES_CELEBI] = { - .size = 0x66, + .size = MON_COORDS_SIZE(48, 48), .y_offset = 8, }, [SPECIES_OLD_UNOWN_B] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 2, }, [SPECIES_OLD_UNOWN_C] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 2, }, [SPECIES_OLD_UNOWN_D] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 2, }, [SPECIES_OLD_UNOWN_E] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 2, }, [SPECIES_OLD_UNOWN_F] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 2, }, [SPECIES_OLD_UNOWN_G] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 2, }, [SPECIES_OLD_UNOWN_H] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 2, }, [SPECIES_OLD_UNOWN_I] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 2, }, [SPECIES_OLD_UNOWN_J] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 2, }, [SPECIES_OLD_UNOWN_K] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 2, }, [SPECIES_OLD_UNOWN_L] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 2, }, [SPECIES_OLD_UNOWN_M] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 2, }, [SPECIES_OLD_UNOWN_N] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 2, }, [SPECIES_OLD_UNOWN_O] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 2, }, [SPECIES_OLD_UNOWN_P] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 2, }, [SPECIES_OLD_UNOWN_Q] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 2, }, [SPECIES_OLD_UNOWN_R] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 2, }, [SPECIES_OLD_UNOWN_S] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 2, }, [SPECIES_OLD_UNOWN_T] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 2, }, [SPECIES_OLD_UNOWN_U] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 2, }, [SPECIES_OLD_UNOWN_V] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 2, }, [SPECIES_OLD_UNOWN_W] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 2, }, [SPECIES_OLD_UNOWN_X] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 2, }, [SPECIES_OLD_UNOWN_Y] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 2, }, [SPECIES_OLD_UNOWN_Z] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 2, }, [SPECIES_TREECKO] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 6, }, [SPECIES_GROVYLE] = { - .size = 0x86, + .size = MON_COORDS_SIZE(64, 48), .y_offset = 8, }, [SPECIES_SCEPTILE] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 1, }, [SPECIES_TORCHIC] = { - .size = 0x67, + .size = MON_COORDS_SIZE(48, 56), .y_offset = 5, }, [SPECIES_COMBUSKEN] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 0, }, [SPECIES_BLAZIKEN] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 0, }, [SPECIES_MUDKIP] = { - .size = 0x77, + .size = MON_COORDS_SIZE(56, 56), .y_offset = 5, }, [SPECIES_MARSHTOMP] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 4, }, [SPECIES_SWAMPERT] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 5, }, [SPECIES_POOCHYENA] = { - .size = 0x76, + .size = MON_COORDS_SIZE(56, 48), .y_offset = 9, }, [SPECIES_MIGHTYENA] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 4, }, [SPECIES_ZIGZAGOON] = { - .size = 0x76, + .size = MON_COORDS_SIZE(56, 48), .y_offset = 11, }, [SPECIES_LINOONE] = { - .size = 0x85, + .size = MON_COORDS_SIZE(64, 40), .y_offset = 15, }, [SPECIES_WURMPLE] = { - .size = 0x76, + .size = MON_COORDS_SIZE(56, 48), .y_offset = 11, }, [SPECIES_SILCOON] = { - .size = 0x83, + .size = MON_COORDS_SIZE(64, 24), .y_offset = 21, }, [SPECIES_BEAUTIFLY] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 0, }, [SPECIES_CASCOON] = { - .size = 0x73, + .size = MON_COORDS_SIZE(56, 24), .y_offset = 20, }, [SPECIES_DUSTOX] = { - .size = 0x83, + .size = MON_COORDS_SIZE(64, 24), .y_offset = 20, }, [SPECIES_LOTAD] = { - .size = 0x75, + .size = MON_COORDS_SIZE(56, 40), .y_offset = 15, }, [SPECIES_LOMBRE] = { - .size = 0x86, + .size = MON_COORDS_SIZE(64, 48), .y_offset = 8, }, [SPECIES_LUDICOLO] = { - .size = 0x86, + .size = MON_COORDS_SIZE(64, 48), .y_offset = 10, }, [SPECIES_SEEDOT] = { - .size = 0x86, + .size = MON_COORDS_SIZE(64, 48), .y_offset = 9, }, [SPECIES_NUZLEAF] = { - .size = 0x76, + .size = MON_COORDS_SIZE(56, 48), .y_offset = 10, }, [SPECIES_SHIFTRY] = { - .size = 0x86, + .size = MON_COORDS_SIZE(64, 48), .y_offset = 8, }, [SPECIES_NINCADA] = { - .size = 0x83, + .size = MON_COORDS_SIZE(64, 24), .y_offset = 20, }, [SPECIES_NINJASK] = { - .size = 0x86, + .size = MON_COORDS_SIZE(64, 48), .y_offset = 8, }, [SPECIES_SHEDINJA] = { - .size = 0x77, + .size = MON_COORDS_SIZE(56, 56), .y_offset = 6, }, [SPECIES_TAILLOW] = { - .size = 0x64, + .size = MON_COORDS_SIZE(48, 32), .y_offset = 17, }, [SPECIES_SWELLOW] = { - .size = 0x86, + .size = MON_COORDS_SIZE(64, 48), .y_offset = 8, }, [SPECIES_SHROOMISH] = { - .size = 0x85, + .size = MON_COORDS_SIZE(64, 40), .y_offset = 13, }, [SPECIES_BRELOOM] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 4, }, [SPECIES_SPINDA] = { - .size = 0x77, + .size = MON_COORDS_SIZE(56, 56), .y_offset = 4, }, [SPECIES_WINGULL] = { - .size = 0x85, + .size = MON_COORDS_SIZE(64, 40), .y_offset = 14, }, [SPECIES_PELIPPER] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 6, }, [SPECIES_SURSKIT] = { - .size = 0x86, + .size = MON_COORDS_SIZE(64, 48), .y_offset = 11, }, [SPECIES_MASQUERAIN] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 0, }, [SPECIES_WAILMER] = { - .size = 0x83, + .size = MON_COORDS_SIZE(64, 24), .y_offset = 21, }, [SPECIES_WAILORD] = { - .size = 0x83, + .size = MON_COORDS_SIZE(64, 24), .y_offset = 22, }, [SPECIES_SKITTY] = { - .size = 0x86, + .size = MON_COORDS_SIZE(64, 48), .y_offset = 10, }, [SPECIES_DELCATTY] = { - .size = 0x86, + .size = MON_COORDS_SIZE(64, 48), .y_offset = 8, }, [SPECIES_KECLEON] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 6, }, [SPECIES_BALTOY] = { - .size = 0x86, + .size = MON_COORDS_SIZE(64, 48), .y_offset = 8, }, [SPECIES_CLAYDOL] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 7, }, [SPECIES_NOSEPASS] = { - .size = 0x85, + .size = MON_COORDS_SIZE(64, 40), .y_offset = 12, }, [SPECIES_TORKOAL] = { - .size = 0x86, + .size = MON_COORDS_SIZE(64, 48), .y_offset = 10, }, [SPECIES_SABLEYE] = { - .size = 0x76, + .size = MON_COORDS_SIZE(56, 48), .y_offset = 8, }, [SPECIES_BARBOACH] = { - .size = 0x66, + .size = MON_COORDS_SIZE(48, 48), .y_offset = 10, }, [SPECIES_WHISCASH] = { - .size = 0x86, + .size = MON_COORDS_SIZE(64, 48), .y_offset = 10, }, [SPECIES_LUVDISC] = { - .size = 0x46, + .size = MON_COORDS_SIZE(32, 48), .y_offset = 10, }, [SPECIES_CORPHISH] = { - .size = 0x77, + .size = MON_COORDS_SIZE(56, 56), .y_offset = 7, }, [SPECIES_CRAWDAUNT] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 5, }, [SPECIES_FEEBAS] = { - .size = 0x67, + .size = MON_COORDS_SIZE(48, 56), .y_offset = 7, }, [SPECIES_MILOTIC] = { - .size = 0x68, + .size = MON_COORDS_SIZE(48, 64), .y_offset = 2, }, [SPECIES_CARVANHA] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 7, }, [SPECIES_SHARPEDO] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 2, }, [SPECIES_TRAPINCH] = { - .size = 0x75, + .size = MON_COORDS_SIZE(56, 40), .y_offset = 14, }, [SPECIES_VIBRAVA] = { - .size = 0x74, + .size = MON_COORDS_SIZE(56, 32), .y_offset = 17, }, [SPECIES_FLYGON] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 2, }, [SPECIES_MAKUHITA] = { - .size = 0x76, + .size = MON_COORDS_SIZE(56, 48), .y_offset = 11, }, [SPECIES_HARIYAMA] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 7, }, [SPECIES_ELECTRIKE] = { - .size = 0x84, + .size = MON_COORDS_SIZE(64, 32), .y_offset = 16, }, [SPECIES_MANECTRIC] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 4, }, [SPECIES_NUMEL] = { - .size = 0x86, + .size = MON_COORDS_SIZE(64, 48), .y_offset = 11, }, [SPECIES_CAMERUPT] = { - .size = 0x84, + .size = MON_COORDS_SIZE(64, 32), .y_offset = 19, }, [SPECIES_SPHEAL] = { - .size = 0x64, + .size = MON_COORDS_SIZE(48, 32), .y_offset = 18, }, [SPECIES_SEALEO] = { - .size = 0x86, + .size = MON_COORDS_SIZE(64, 48), .y_offset = 10, }, [SPECIES_WALREIN] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 6, }, [SPECIES_CACNEA] = { - .size = 0x85, + .size = MON_COORDS_SIZE(64, 40), .y_offset = 15, }, [SPECIES_CACTURNE] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 7, }, [SPECIES_SNORUNT] = { - .size = 0x76, + .size = MON_COORDS_SIZE(56, 48), .y_offset = 10, }, [SPECIES_GLALIE] = { - .size = 0x85, + .size = MON_COORDS_SIZE(64, 40), .y_offset = 12, }, [SPECIES_LUNATONE] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 5, }, [SPECIES_SOLROCK] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 5, }, [SPECIES_AZURILL] = { - .size = 0x86, + .size = MON_COORDS_SIZE(64, 48), .y_offset = 10, }, [SPECIES_SPOINK] = { - .size = 0x56, + .size = MON_COORDS_SIZE(40, 48), .y_offset = 11, }, [SPECIES_GRUMPIG] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 4, }, [SPECIES_PLUSLE] = { - .size = 0x76, + .size = MON_COORDS_SIZE(56, 48), .y_offset = 8, }, [SPECIES_MINUN] = { - .size = 0x76, + .size = MON_COORDS_SIZE(56, 48), .y_offset = 8, }, [SPECIES_MAWILE] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 4, }, [SPECIES_MEDITITE] = { - .size = 0x76, + .size = MON_COORDS_SIZE(56, 48), .y_offset = 11, }, [SPECIES_MEDICHAM] = { - .size = 0x68, + .size = MON_COORDS_SIZE(48, 64), .y_offset = 3, }, [SPECIES_SWABLU] = { - .size = 0x86, + .size = MON_COORDS_SIZE(64, 48), .y_offset = 9, }, [SPECIES_ALTARIA] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 6, }, [SPECIES_WYNAUT] = { - .size = 0x77, + .size = MON_COORDS_SIZE(56, 56), .y_offset = 7, }, [SPECIES_DUSKULL] = { - .size = 0x66, + .size = MON_COORDS_SIZE(48, 48), .y_offset = 11, }, [SPECIES_DUSCLOPS] = { - .size = 0x86, + .size = MON_COORDS_SIZE(64, 48), .y_offset = 8, }, [SPECIES_ROSELIA] = { - .size = 0x86, + .size = MON_COORDS_SIZE(64, 48), .y_offset = 8, }, [SPECIES_SLAKOTH] = { - .size = 0x85, + .size = MON_COORDS_SIZE(64, 40), .y_offset = 15, }, [SPECIES_VIGOROTH] = { - .size = 0x86, + .size = MON_COORDS_SIZE(64, 48), .y_offset = 10, }, [SPECIES_SLAKING] = { - .size = 0x86, + .size = MON_COORDS_SIZE(64, 48), .y_offset = 8, }, [SPECIES_GULPIN] = { - .size = 0x66, + .size = MON_COORDS_SIZE(48, 48), .y_offset = 11, }, [SPECIES_SWALOT] = { - .size = 0x77, + .size = MON_COORDS_SIZE(56, 56), .y_offset = 6, }, [SPECIES_TROPIUS] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 7, }, [SPECIES_WHISMUR] = { - .size = 0x85, + .size = MON_COORDS_SIZE(64, 40), .y_offset = 13, }, [SPECIES_LOUDRED] = { - .size = 0x86, + .size = MON_COORDS_SIZE(64, 48), .y_offset = 9, }, [SPECIES_EXPLOUD] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 3, }, [SPECIES_CLAMPERL] = { - .size = 0x85, + .size = MON_COORDS_SIZE(64, 40), .y_offset = 13, }, [SPECIES_HUNTAIL] = { - .size = 0x68, + .size = MON_COORDS_SIZE(48, 64), .y_offset = 2, }, [SPECIES_GOREBYSS] = { - .size = 0x77, + .size = MON_COORDS_SIZE(56, 56), .y_offset = 5, }, [SPECIES_ABSOL] = { - .size = 0x78, + .size = MON_COORDS_SIZE(56, 64), .y_offset = 3, }, [SPECIES_SHUPPET] = { - .size = 0x77, + .size = MON_COORDS_SIZE(56, 56), .y_offset = 6, }, [SPECIES_BANETTE] = { - .size = 0x65, + .size = MON_COORDS_SIZE(48, 40), .y_offset = 12, }, [SPECIES_SEVIPER] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 3, }, [SPECIES_ZANGOOSE] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 1, }, [SPECIES_RELICANTH] = { - .size = 0x86, + .size = MON_COORDS_SIZE(64, 48), .y_offset = 10, }, [SPECIES_ARON] = { - .size = 0x54, + .size = MON_COORDS_SIZE(40, 32), .y_offset = 17, }, [SPECIES_LAIRON] = { - .size = 0x84, + .size = MON_COORDS_SIZE(64, 32), .y_offset = 17, }, [SPECIES_AGGRON] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 7, }, [SPECIES_CASTFORM] = { - .size = 0x45, + .size = MON_COORDS_SIZE(32, 40), .y_offset = 13, }, [SPECIES_VOLBEAT] = { - .size = 0x76, + .size = MON_COORDS_SIZE(56, 48), .y_offset = 8, }, [SPECIES_ILLUMISE] = { - .size = 0x67, + .size = MON_COORDS_SIZE(48, 56), .y_offset = 6, }, [SPECIES_LILEEP] = { - .size = 0x86, + .size = MON_COORDS_SIZE(64, 48), .y_offset = 9, }, [SPECIES_CRADILY] = { - .size = 0x77, + .size = MON_COORDS_SIZE(56, 56), .y_offset = 4, }, [SPECIES_ANORITH] = { - .size = 0x83, + .size = MON_COORDS_SIZE(64, 24), .y_offset = 23, }, [SPECIES_ARMALDO] = { - .size = 0x77, + .size = MON_COORDS_SIZE(56, 56), .y_offset = 5, }, [SPECIES_RALTS] = { - .size = 0x45, + .size = MON_COORDS_SIZE(32, 40), .y_offset = 13, }, [SPECIES_KIRLIA] = { - .size = 0x57, + .size = MON_COORDS_SIZE(40, 56), .y_offset = 6, }, [SPECIES_GARDEVOIR] = { - .size = 0x77, + .size = MON_COORDS_SIZE(56, 56), .y_offset = 4, }, [SPECIES_BAGON] = { - .size = 0x66, + .size = MON_COORDS_SIZE(48, 48), .y_offset = 8, }, [SPECIES_SHELGON] = { - .size = 0x85, + .size = MON_COORDS_SIZE(64, 40), .y_offset = 13, }, [SPECIES_SALAMENCE] = { - .size = 0x77, + .size = MON_COORDS_SIZE(56, 56), .y_offset = 6, }, [SPECIES_BELDUM] = { - .size = 0x66, + .size = MON_COORDS_SIZE(48, 48), .y_offset = 10, }, [SPECIES_METANG] = { - .size = 0x84, + .size = MON_COORDS_SIZE(64, 32), .y_offset = 16, }, [SPECIES_METAGROSS] = { - .size = 0x83, + .size = MON_COORDS_SIZE(64, 24), .y_offset = 20, }, [SPECIES_REGIROCK] = { - .size = 0x86, + .size = MON_COORDS_SIZE(64, 48), .y_offset = 10, }, [SPECIES_REGICE] = { - .size = 0x85, + .size = MON_COORDS_SIZE(64, 40), .y_offset = 14, }, [SPECIES_REGISTEEL] = { - .size = 0x85, + .size = MON_COORDS_SIZE(64, 40), .y_offset = 14, }, [SPECIES_KYOGRE] = { - .size = 0x84, + .size = MON_COORDS_SIZE(64, 32), .y_offset = 19, }, [SPECIES_GROUDON] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 7, }, [SPECIES_RAYQUAZA] = { - .size = 0x78, + .size = MON_COORDS_SIZE(56, 64), .y_offset = 0, }, [SPECIES_LATIAS] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 2, }, [SPECIES_LATIOS] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 3, }, [SPECIES_JIRACHI] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 5, }, [SPECIES_DEOXYS] = { - .size = 0x86, + .size = MON_COORDS_SIZE(64, 48), .y_offset = 9, }, [SPECIES_CHIMECHO] = { - .size = 0x47, + .size = MON_COORDS_SIZE(32, 56), .y_offset = 7, }, [SPECIES_EGG] = { - .size = 0x36, + .size = MON_COORDS_SIZE(24, 48), .y_offset = 10, }, [SPECIES_UNOWN_B] = { - .size = 0x56, + .size = MON_COORDS_SIZE(40, 48), .y_offset = 9, }, [SPECIES_UNOWN_C] = { - .size = 0x67, + .size = MON_COORDS_SIZE(48, 56), .y_offset = 6, }, [SPECIES_UNOWN_D] = { - .size = 0x56, + .size = MON_COORDS_SIZE(40, 48), .y_offset = 8, }, [SPECIES_UNOWN_E] = { - .size = 0x56, + .size = MON_COORDS_SIZE(40, 48), .y_offset = 10, }, [SPECIES_UNOWN_F] = { - .size = 0x66, + .size = MON_COORDS_SIZE(48, 48), .y_offset = 10, }, [SPECIES_UNOWN_G] = { - .size = 0x57, + .size = MON_COORDS_SIZE(40, 56), .y_offset = 5, }, [SPECIES_UNOWN_H] = { - .size = 0x66, + .size = MON_COORDS_SIZE(48, 48), .y_offset = 8, }, [SPECIES_UNOWN_I] = { - .size = 0x37, + .size = MON_COORDS_SIZE(24, 56), .y_offset = 7, }, [SPECIES_UNOWN_J] = { - .size = 0x46, + .size = MON_COORDS_SIZE(32, 48), .y_offset = 9, }, [SPECIES_UNOWN_K] = { - .size = 0x57, + .size = MON_COORDS_SIZE(40, 56), .y_offset = 7, }, [SPECIES_UNOWN_L] = { - .size = 0x46, + .size = MON_COORDS_SIZE(32, 48), .y_offset = 10, }, [SPECIES_UNOWN_M] = { - .size = 0x65, + .size = MON_COORDS_SIZE(48, 40), .y_offset = 13, }, [SPECIES_UNOWN_N] = { - .size = 0x65, + .size = MON_COORDS_SIZE(48, 40), .y_offset = 13, }, [SPECIES_UNOWN_O] = { - .size = 0x66, + .size = MON_COORDS_SIZE(48, 48), .y_offset = 8, }, [SPECIES_UNOWN_P] = { - .size = 0x46, + .size = MON_COORDS_SIZE(32, 48), .y_offset = 10, }, [SPECIES_UNOWN_Q] = { - .size = 0x55, + .size = MON_COORDS_SIZE(40, 40), .y_offset = 15, }, [SPECIES_UNOWN_R] = { - .size = 0x45, + .size = MON_COORDS_SIZE(32, 40), .y_offset = 12, }, [SPECIES_UNOWN_S] = { - .size = 0x57, + .size = MON_COORDS_SIZE(40, 56), .y_offset = 4, }, [SPECIES_UNOWN_T] = { - .size = 0x45, + .size = MON_COORDS_SIZE(32, 40), .y_offset = 13, }, [SPECIES_UNOWN_U] = { - .size = 0x65, + .size = MON_COORDS_SIZE(48, 40), .y_offset = 13, }, [SPECIES_UNOWN_V] = { - .size = 0x56, + .size = MON_COORDS_SIZE(40, 48), .y_offset = 11, }, [SPECIES_UNOWN_W] = { - .size = 0x55, + .size = MON_COORDS_SIZE(40, 40), .y_offset = 13, }, [SPECIES_UNOWN_X] = { - .size = 0x55, + .size = MON_COORDS_SIZE(40, 40), .y_offset = 15, }, [SPECIES_UNOWN_Y] = { - .size = 0x46, + .size = MON_COORDS_SIZE(32, 48), .y_offset = 10, }, [SPECIES_UNOWN_Z] = { - .size = 0x46, + .size = MON_COORDS_SIZE(32, 48), .y_offset = 10, }, [SPECIES_UNOWN_EMARK] = { - .size = 0x37, + .size = MON_COORDS_SIZE(24, 56), .y_offset = 6, }, [SPECIES_UNOWN_QMARK] = { - .size = 0x47, + .size = MON_COORDS_SIZE(32, 56), .y_offset = 6, }, }; diff --git a/src/data/pokemon_graphics/front_pic_coordinates.h b/src/data/pokemon_graphics/front_pic_coordinates.h index b787877b95..6022f9cc18 100644 --- a/src/data/pokemon_graphics/front_pic_coordinates.h +++ b/src/data/pokemon_graphics/front_pic_coordinates.h @@ -1,2203 +1,2207 @@ +// All Pokémon pics are 64x64, but this data table defines where in this 64x64 frame +// the sprite's non-transparent pixels actually are. +// .size is the dimensions of this drawn pixel area. +// .y_offset is the number of pixels between the drawn pixel area and the bottom edge. const struct MonCoords gMonFrontPicCoords[] = { [SPECIES_NONE] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 0, }, [SPECIES_BULBASAUR] = { - .size = 0x45, + .size = MON_COORDS_SIZE(32, 40), .y_offset = 14, }, [SPECIES_IVYSAUR] = { - .size = 0x56, + .size = MON_COORDS_SIZE(40, 48), .y_offset = 10, }, [SPECIES_VENUSAUR] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 3, }, [SPECIES_CHARMANDER] = { - .size = 0x55, + .size = MON_COORDS_SIZE(40, 40), .y_offset = 12, }, [SPECIES_CHARMELEON] = { - .size = 0x66, + .size = MON_COORDS_SIZE(48, 48), .y_offset = 9, }, [SPECIES_CHARIZARD] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 1, }, [SPECIES_SQUIRTLE] = { - .size = 0x65, + .size = MON_COORDS_SIZE(48, 40), .y_offset = 13, }, [SPECIES_WARTORTLE] = { - .size = 0x66, + .size = MON_COORDS_SIZE(48, 48), .y_offset = 8, }, [SPECIES_BLASTOISE] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 0, }, [SPECIES_CATERPIE] = { - .size = 0x45, + .size = MON_COORDS_SIZE(32, 40), .y_offset = 16, }, [SPECIES_METAPOD] = { - .size = 0x54, + .size = MON_COORDS_SIZE(40, 32), .y_offset = 20, }, [SPECIES_BUTTERFREE] = { - .size = 0x76, + .size = MON_COORDS_SIZE(56, 48), .y_offset = 9, }, [SPECIES_WEEDLE] = { - .size = 0x54, + .size = MON_COORDS_SIZE(40, 32), .y_offset = 18, }, [SPECIES_KAKUNA] = { - .size = 0x45, + .size = MON_COORDS_SIZE(32, 40), .y_offset = 14, }, [SPECIES_BEEDRILL] = { - .size = 0x86, + .size = MON_COORDS_SIZE(64, 48), .y_offset = 9, }, [SPECIES_PIDGEY] = { - .size = 0x65, + .size = MON_COORDS_SIZE(48, 40), .y_offset = 13, }, [SPECIES_PIDGEOTTO] = { - .size = 0x67, + .size = MON_COORDS_SIZE(48, 56), .y_offset = 11, }, [SPECIES_PIDGEOT] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 1, }, [SPECIES_RATTATA] = { - .size = 0x44, + .size = MON_COORDS_SIZE(32, 32), .y_offset = 16, }, [SPECIES_RATICATE] = { - .size = 0x66, + .size = MON_COORDS_SIZE(48, 48), .y_offset = 11, }, [SPECIES_SPEAROW] = { - .size = 0x45, + .size = MON_COORDS_SIZE(32, 40), .y_offset = 15, }, [SPECIES_FEAROW] = { - .size = 0x78, + .size = MON_COORDS_SIZE(56, 64), .y_offset = 0, }, [SPECIES_EKANS] = { - .size = 0x65, + .size = MON_COORDS_SIZE(48, 40), .y_offset = 12, }, [SPECIES_ARBOK] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 2, }, [SPECIES_PIKACHU] = { - .size = 0x67, + .size = MON_COORDS_SIZE(48, 56), .y_offset = 9, }, [SPECIES_RAICHU] = { - .size = 0x67, + .size = MON_COORDS_SIZE(48, 56), .y_offset = 4, }, [SPECIES_SANDSHREW] = { - .size = 0x55, + .size = MON_COORDS_SIZE(40, 40), .y_offset = 14, }, [SPECIES_SANDSLASH] = { - .size = 0x76, + .size = MON_COORDS_SIZE(56, 48), .y_offset = 9, }, [SPECIES_NIDORAN_F] = { - .size = 0x45, + .size = MON_COORDS_SIZE(32, 40), .y_offset = 15, }, [SPECIES_NIDORINA] = { - .size = 0x66, + .size = MON_COORDS_SIZE(48, 48), .y_offset = 11, }, [SPECIES_NIDOQUEEN] = { - .size = 0x78, + .size = MON_COORDS_SIZE(56, 64), .y_offset = 3, }, [SPECIES_NIDORAN_M] = { - .size = 0x55, + .size = MON_COORDS_SIZE(40, 40), .y_offset = 12, }, [SPECIES_NIDORINO] = { - .size = 0x66, + .size = MON_COORDS_SIZE(48, 48), .y_offset = 9, }, [SPECIES_NIDOKING] = { - .size = 0x78, + .size = MON_COORDS_SIZE(56, 64), .y_offset = 2, }, [SPECIES_CLEFAIRY] = { - .size = 0x55, + .size = MON_COORDS_SIZE(40, 40), .y_offset = 16, }, [SPECIES_CLEFABLE] = { - .size = 0x66, + .size = MON_COORDS_SIZE(48, 48), .y_offset = 8, }, [SPECIES_VULPIX] = { - .size = 0x65, + .size = MON_COORDS_SIZE(48, 40), .y_offset = 12, }, [SPECIES_NINETALES] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 3, }, [SPECIES_JIGGLYPUFF] = { - .size = 0x45, + .size = MON_COORDS_SIZE(32, 40), .y_offset = 16, }, [SPECIES_WIGGLYTUFF] = { - .size = 0x67, + .size = MON_COORDS_SIZE(48, 56), .y_offset = 8, }, [SPECIES_ZUBAT] = { - .size = 0x67, + .size = MON_COORDS_SIZE(48, 56), .y_offset = 6, }, [SPECIES_GOLBAT] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 3, }, [SPECIES_ODDISH] = { - .size = 0x45, + .size = MON_COORDS_SIZE(32, 40), .y_offset = 15, }, [SPECIES_GLOOM] = { - .size = 0x66, + .size = MON_COORDS_SIZE(48, 48), .y_offset = 10, }, [SPECIES_VILEPLUME] = { - .size = 0x77, + .size = MON_COORDS_SIZE(56, 56), .y_offset = 6, }, [SPECIES_PARAS] = { - .size = 0x55, + .size = MON_COORDS_SIZE(40, 40), .y_offset = 15, }, [SPECIES_PARASECT] = { - .size = 0x86, + .size = MON_COORDS_SIZE(64, 48), .y_offset = 8, }, [SPECIES_VENONAT] = { - .size = 0x66, + .size = MON_COORDS_SIZE(48, 48), .y_offset = 8, }, [SPECIES_VENOMOTH] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 2, }, [SPECIES_DIGLETT] = { - .size = 0x54, + .size = MON_COORDS_SIZE(40, 32), .y_offset = 18, }, [SPECIES_DUGTRIO] = { - .size = 0x75, + .size = MON_COORDS_SIZE(56, 40), .y_offset = 13, }, [SPECIES_MEOWTH] = { - .size = 0x55, + .size = MON_COORDS_SIZE(40, 40), .y_offset = 12, }, [SPECIES_PERSIAN] = { - .size = 0x77, + .size = MON_COORDS_SIZE(56, 56), .y_offset = 7, }, [SPECIES_PSYDUCK] = { - .size = 0x56, + .size = MON_COORDS_SIZE(40, 48), .y_offset = 9, }, [SPECIES_GOLDUCK] = { - .size = 0x78, + .size = MON_COORDS_SIZE(56, 64), .y_offset = 2, }, [SPECIES_MANKEY] = { - .size = 0x65, + .size = MON_COORDS_SIZE(48, 40), .y_offset = 14, }, [SPECIES_PRIMEAPE] = { - .size = 0x77, + .size = MON_COORDS_SIZE(56, 56), .y_offset = 7, }, [SPECIES_GROWLITHE] = { - .size = 0x66, + .size = MON_COORDS_SIZE(48, 48), .y_offset = 11, }, [SPECIES_ARCANINE] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 2, }, [SPECIES_POLIWAG] = { - .size = 0x74, + .size = MON_COORDS_SIZE(56, 32), .y_offset = 19, }, [SPECIES_POLIWHIRL] = { - .size = 0x76, + .size = MON_COORDS_SIZE(56, 48), .y_offset = 10, }, [SPECIES_POLIWRATH] = { - .size = 0x76, + .size = MON_COORDS_SIZE(56, 48), .y_offset = 8, }, [SPECIES_ABRA] = { - .size = 0x66, + .size = MON_COORDS_SIZE(48, 48), .y_offset = 11, }, [SPECIES_KADABRA] = { - .size = 0x77, + .size = MON_COORDS_SIZE(56, 56), .y_offset = 5, }, [SPECIES_ALAKAZAM] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 4, }, [SPECIES_MACHOP] = { - .size = 0x56, + .size = MON_COORDS_SIZE(40, 48), .y_offset = 11, }, [SPECIES_MACHOKE] = { - .size = 0x67, + .size = MON_COORDS_SIZE(48, 56), .y_offset = 6, }, [SPECIES_MACHAMP] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 1, }, [SPECIES_BELLSPROUT] = { - .size = 0x65, + .size = MON_COORDS_SIZE(48, 40), .y_offset = 15, }, [SPECIES_WEEPINBELL] = { - .size = 0x66, + .size = MON_COORDS_SIZE(48, 48), .y_offset = 11, }, [SPECIES_VICTREEBEL] = { - .size = 0x77, + .size = MON_COORDS_SIZE(56, 56), .y_offset = 5, }, [SPECIES_TENTACOOL] = { - .size = 0x46, + .size = MON_COORDS_SIZE(32, 48), .y_offset = 9, }, [SPECIES_TENTACRUEL] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 4, }, [SPECIES_GEODUDE] = { - .size = 0x54, + .size = MON_COORDS_SIZE(40, 32), .y_offset = 18, }, [SPECIES_GRAVELER] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 4, }, [SPECIES_GOLEM] = { - .size = 0x77, + .size = MON_COORDS_SIZE(56, 56), .y_offset = 5, }, [SPECIES_PONYTA] = { - .size = 0x66, + .size = MON_COORDS_SIZE(48, 48), .y_offset = 8, }, [SPECIES_RAPIDASH] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 1, }, [SPECIES_SLOWPOKE] = { - .size = 0x66, + .size = MON_COORDS_SIZE(48, 48), .y_offset = 11, }, [SPECIES_SLOWBRO] = { - .size = 0x86, + .size = MON_COORDS_SIZE(64, 48), .y_offset = 8, }, [SPECIES_MAGNEMITE] = { - .size = 0x43, + .size = MON_COORDS_SIZE(32, 24), .y_offset = 21, }, [SPECIES_MAGNETON] = { - .size = 0x76, + .size = MON_COORDS_SIZE(56, 48), .y_offset = 8, }, [SPECIES_FARFETCHD] = { - .size = 0x66, + .size = MON_COORDS_SIZE(48, 48), .y_offset = 9, }, [SPECIES_DODUO] = { - .size = 0x57, + .size = MON_COORDS_SIZE(40, 56), .y_offset = 5, }, [SPECIES_DODRIO] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 0, }, [SPECIES_SEEL] = { - .size = 0x76, + .size = MON_COORDS_SIZE(56, 48), .y_offset = 10, }, [SPECIES_DEWGONG] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 7, }, [SPECIES_GRIMER] = { - .size = 0x65, + .size = MON_COORDS_SIZE(48, 40), .y_offset = 12, }, [SPECIES_MUK] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 4, }, [SPECIES_SHELLDER] = { - .size = 0x55, + .size = MON_COORDS_SIZE(40, 40), .y_offset = 16, }, [SPECIES_CLOYSTER] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 5, }, [SPECIES_GASTLY] = { - .size = 0x77, + .size = MON_COORDS_SIZE(56, 56), .y_offset = 6, }, [SPECIES_HAUNTER] = { - .size = 0x77, + .size = MON_COORDS_SIZE(56, 56), .y_offset = 5, }, [SPECIES_GENGAR] = { - .size = 0x77, + .size = MON_COORDS_SIZE(56, 56), .y_offset = 5, }, [SPECIES_ONIX] = { - .size = 0x78, + .size = MON_COORDS_SIZE(56, 64), .y_offset = 2, }, [SPECIES_DROWZEE] = { - .size = 0x77, + .size = MON_COORDS_SIZE(56, 56), .y_offset = 7, }, [SPECIES_HYPNO] = { - .size = 0x77, + .size = MON_COORDS_SIZE(56, 56), .y_offset = 4, }, [SPECIES_KRABBY] = { - .size = 0x65, + .size = MON_COORDS_SIZE(48, 40), .y_offset = 13, }, [SPECIES_KINGLER] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 3, }, [SPECIES_VOLTORB] = { - .size = 0x44, + .size = MON_COORDS_SIZE(32, 32), .y_offset = 19, }, [SPECIES_ELECTRODE] = { - .size = 0x55, + .size = MON_COORDS_SIZE(40, 40), .y_offset = 14, }, [SPECIES_EXEGGCUTE] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 7, }, [SPECIES_EXEGGUTOR] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 0, }, [SPECIES_CUBONE] = { - .size = 0x55, + .size = MON_COORDS_SIZE(40, 40), .y_offset = 15, }, [SPECIES_MAROWAK] = { - .size = 0x76, + .size = MON_COORDS_SIZE(56, 48), .y_offset = 11, }, [SPECIES_HITMONLEE] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 4, }, [SPECIES_HITMONCHAN] = { - .size = 0x67, + .size = MON_COORDS_SIZE(48, 56), .y_offset = 4, }, [SPECIES_LICKITUNG] = { - .size = 0x86, + .size = MON_COORDS_SIZE(64, 48), .y_offset = 8, }, [SPECIES_KOFFING] = { - .size = 0x66, + .size = MON_COORDS_SIZE(48, 48), .y_offset = 8, }, [SPECIES_WEEZING] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 2, }, [SPECIES_RHYHORN] = { - .size = 0x76, + .size = MON_COORDS_SIZE(56, 48), .y_offset = 9, }, [SPECIES_RHYDON] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 2, }, [SPECIES_CHANSEY] = { - .size = 0x76, + .size = MON_COORDS_SIZE(56, 48), .y_offset = 9, }, [SPECIES_TANGELA] = { - .size = 0x67, + .size = MON_COORDS_SIZE(48, 56), .y_offset = 7, }, [SPECIES_KANGASKHAN] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 0, }, [SPECIES_HORSEA] = { - .size = 0x45, + .size = MON_COORDS_SIZE(32, 40), .y_offset = 15, }, [SPECIES_SEADRA] = { - .size = 0x67, + .size = MON_COORDS_SIZE(48, 56), .y_offset = 7, }, [SPECIES_GOLDEEN] = { - .size = 0x66, + .size = MON_COORDS_SIZE(48, 48), .y_offset = 10, }, [SPECIES_SEAKING] = { - .size = 0x77, + .size = MON_COORDS_SIZE(56, 56), .y_offset = 4, }, [SPECIES_STARYU] = { - .size = 0x66, + .size = MON_COORDS_SIZE(48, 48), .y_offset = 10, }, [SPECIES_STARMIE] = { - .size = 0x77, + .size = MON_COORDS_SIZE(56, 56), .y_offset = 6, }, [SPECIES_MR_MIME] = { - .size = 0x66, + .size = MON_COORDS_SIZE(48, 48), .y_offset = 8, }, [SPECIES_SCYTHER] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 0, }, [SPECIES_JYNX] = { - .size = 0x77, + .size = MON_COORDS_SIZE(56, 56), .y_offset = 4, }, [SPECIES_ELECTABUZZ] = { - .size = 0x78, + .size = MON_COORDS_SIZE(56, 64), .y_offset = 2, }, [SPECIES_MAGMAR] = { - .size = 0x77, + .size = MON_COORDS_SIZE(56, 56), .y_offset = 4, }, [SPECIES_PINSIR] = { - .size = 0x77, + .size = MON_COORDS_SIZE(56, 56), .y_offset = 4, }, [SPECIES_TAUROS] = { - .size = 0x78, + .size = MON_COORDS_SIZE(56, 64), .y_offset = 0, }, [SPECIES_MAGIKARP] = { - .size = 0x67, + .size = MON_COORDS_SIZE(48, 56), .y_offset = 6, }, [SPECIES_GYARADOS] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 8, }, [SPECIES_LAPRAS] = { - .size = 0x85, + .size = MON_COORDS_SIZE(64, 40), .y_offset = 13, }, [SPECIES_DITTO] = { - .size = 0x54, + .size = MON_COORDS_SIZE(40, 32), .y_offset = 17, }, [SPECIES_EEVEE] = { - .size = 0x56, + .size = MON_COORDS_SIZE(40, 48), .y_offset = 9, }, [SPECIES_VAPOREON] = { - .size = 0x67, + .size = MON_COORDS_SIZE(48, 56), .y_offset = 6, }, [SPECIES_JOLTEON] = { - .size = 0x76, + .size = MON_COORDS_SIZE(56, 48), .y_offset = 9, }, [SPECIES_FLAREON] = { - .size = 0x66, + .size = MON_COORDS_SIZE(48, 48), .y_offset = 10, }, [SPECIES_PORYGON] = { - .size = 0x55, + .size = MON_COORDS_SIZE(40, 40), .y_offset = 13, }, [SPECIES_OMANYTE] = { - .size = 0x45, + .size = MON_COORDS_SIZE(32, 40), .y_offset = 15, }, [SPECIES_OMASTAR] = { - .size = 0x67, + .size = MON_COORDS_SIZE(48, 56), .y_offset = 7, }, [SPECIES_KABUTO] = { - .size = 0x54, + .size = MON_COORDS_SIZE(40, 32), .y_offset = 17, }, [SPECIES_KABUTOPS] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 3, }, [SPECIES_AERODACTYL] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 1, }, [SPECIES_SNORLAX] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 5, }, [SPECIES_ARTICUNO] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 3, }, [SPECIES_ZAPDOS] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 4, }, [SPECIES_MOLTRES] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 0, }, [SPECIES_DRATINI] = { - .size = 0x75, + .size = MON_COORDS_SIZE(56, 40), .y_offset = 14, }, [SPECIES_DRAGONAIR] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 6, }, [SPECIES_DRAGONITE] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 0, }, [SPECIES_MEWTWO] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 0, }, [SPECIES_MEW] = { - .size = 0x55, + .size = MON_COORDS_SIZE(40, 40), .y_offset = 13, }, [SPECIES_CHIKORITA] = { - .size = 0x75, + .size = MON_COORDS_SIZE(56, 40), .y_offset = 13, }, [SPECIES_BAYLEEF] = { - .size = 0x77, + .size = MON_COORDS_SIZE(56, 56), .y_offset = 4, }, [SPECIES_MEGANIUM] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 0, }, [SPECIES_CYNDAQUIL] = { - .size = 0x55, + .size = MON_COORDS_SIZE(40, 40), .y_offset = 14, }, [SPECIES_QUILAVA] = { - .size = 0x76, + .size = MON_COORDS_SIZE(56, 48), .y_offset = 8, }, [SPECIES_TYPHLOSION] = { - .size = 0x78, + .size = MON_COORDS_SIZE(56, 64), .y_offset = 0, }, [SPECIES_TOTODILE] = { - .size = 0x55, + .size = MON_COORDS_SIZE(40, 40), .y_offset = 15, }, [SPECIES_CROCONAW] = { - .size = 0x67, + .size = MON_COORDS_SIZE(48, 56), .y_offset = 6, }, [SPECIES_FERALIGATR] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 0, }, [SPECIES_SENTRET] = { - .size = 0x47, + .size = MON_COORDS_SIZE(32, 56), .y_offset = 4, }, [SPECIES_FURRET] = { - .size = 0x67, + .size = MON_COORDS_SIZE(48, 56), .y_offset = 7, }, [SPECIES_HOOTHOOT] = { - .size = 0x55, + .size = MON_COORDS_SIZE(40, 40), .y_offset = 13, }, [SPECIES_NOCTOWL] = { - .size = 0x58, + .size = MON_COORDS_SIZE(40, 64), .y_offset = 3, }, [SPECIES_LEDYBA] = { - .size = 0x56, + .size = MON_COORDS_SIZE(40, 48), .y_offset = 12, }, [SPECIES_LEDIAN] = { - .size = 0x67, + .size = MON_COORDS_SIZE(48, 56), .y_offset = 4, }, [SPECIES_SPINARAK] = { - .size = 0x54, + .size = MON_COORDS_SIZE(40, 32), .y_offset = 19, }, [SPECIES_ARIADOS] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 5, }, [SPECIES_CROBAT] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 0, }, [SPECIES_CHINCHOU] = { - .size = 0x75, + .size = MON_COORDS_SIZE(56, 40), .y_offset = 16, }, [SPECIES_LANTURN] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 11, }, [SPECIES_PICHU] = { - .size = 0x45, + .size = MON_COORDS_SIZE(32, 40), .y_offset = 12, }, [SPECIES_CLEFFA] = { - .size = 0x44, + .size = MON_COORDS_SIZE(32, 32), .y_offset = 20, }, [SPECIES_IGGLYBUFF] = { - .size = 0x44, + .size = MON_COORDS_SIZE(32, 32), .y_offset = 18, }, [SPECIES_TOGEPI] = { - .size = 0x34, + .size = MON_COORDS_SIZE(24, 32), .y_offset = 20, }, [SPECIES_TOGETIC] = { - .size = 0x46, + .size = MON_COORDS_SIZE(32, 48), .y_offset = 9, }, [SPECIES_NATU] = { - .size = 0x44, + .size = MON_COORDS_SIZE(32, 32), .y_offset = 20, }, [SPECIES_XATU] = { - .size = 0x47, + .size = MON_COORDS_SIZE(32, 56), .y_offset = 7, }, [SPECIES_MAREEP] = { - .size = 0x55, + .size = MON_COORDS_SIZE(40, 40), .y_offset = 16, }, [SPECIES_FLAAFFY] = { - .size = 0x56, + .size = MON_COORDS_SIZE(40, 48), .y_offset = 10, }, [SPECIES_AMPHAROS] = { - .size = 0x77, + .size = MON_COORDS_SIZE(56, 56), .y_offset = 5, }, [SPECIES_BELLOSSOM] = { - .size = 0x45, + .size = MON_COORDS_SIZE(32, 40), .y_offset = 14, }, [SPECIES_MARILL] = { - .size = 0x65, + .size = MON_COORDS_SIZE(48, 40), .y_offset = 14, }, [SPECIES_AZUMARILL] = { - .size = 0x76, + .size = MON_COORDS_SIZE(56, 48), .y_offset = 9, }, [SPECIES_SUDOWOODO] = { - .size = 0x67, + .size = MON_COORDS_SIZE(48, 56), .y_offset = 6, }, [SPECIES_POLITOED] = { - .size = 0x67, + .size = MON_COORDS_SIZE(48, 56), .y_offset = 6, }, [SPECIES_HOPPIP] = { - .size = 0x66, + .size = MON_COORDS_SIZE(48, 48), .y_offset = 10, }, [SPECIES_SKIPLOOM] = { - .size = 0x55, + .size = MON_COORDS_SIZE(40, 40), .y_offset = 15, }, [SPECIES_JUMPLUFF] = { - .size = 0x77, + .size = MON_COORDS_SIZE(56, 56), .y_offset = 7, }, [SPECIES_AIPOM] = { - .size = 0x58, + .size = MON_COORDS_SIZE(40, 64), .y_offset = 3, }, [SPECIES_SUNKERN] = { - .size = 0x44, + .size = MON_COORDS_SIZE(32, 32), .y_offset = 16, }, [SPECIES_SUNFLORA] = { - .size = 0x56, + .size = MON_COORDS_SIZE(40, 48), .y_offset = 8, }, [SPECIES_YANMA] = { - .size = 0x86, + .size = MON_COORDS_SIZE(64, 48), .y_offset = 10, }, [SPECIES_WOOPER] = { - .size = 0x54, + .size = MON_COORDS_SIZE(40, 32), .y_offset = 16, }, [SPECIES_QUAGSIRE] = { - .size = 0x77, + .size = MON_COORDS_SIZE(56, 56), .y_offset = 7, }, [SPECIES_ESPEON] = { - .size = 0x66, + .size = MON_COORDS_SIZE(48, 48), .y_offset = 8, }, [SPECIES_UMBREON] = { - .size = 0x67, + .size = MON_COORDS_SIZE(48, 56), .y_offset = 8, }, [SPECIES_MURKROW] = { - .size = 0x66, + .size = MON_COORDS_SIZE(48, 48), .y_offset = 11, }, [SPECIES_SLOWKING] = { - .size = 0x58, + .size = MON_COORDS_SIZE(40, 64), .y_offset = 1, }, [SPECIES_MISDREAVUS] = { - .size = 0x55, + .size = MON_COORDS_SIZE(40, 40), .y_offset = 12, }, [SPECIES_UNOWN] = { - .size = 0x35, + .size = MON_COORDS_SIZE(24, 40), .y_offset = 15, }, [SPECIES_WOBBUFFET] = { - .size = 0x77, + .size = MON_COORDS_SIZE(56, 56), .y_offset = 6, }, [SPECIES_GIRAFARIG] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 3, }, [SPECIES_PINECO] = { - .size = 0x56, + .size = MON_COORDS_SIZE(40, 48), .y_offset = 10, }, [SPECIES_FORRETRESS] = { - .size = 0x76, + .size = MON_COORDS_SIZE(56, 48), .y_offset = 9, }, [SPECIES_DUNSPARCE] = { - .size = 0x74, + .size = MON_COORDS_SIZE(56, 32), .y_offset = 17, }, [SPECIES_GLIGAR] = { - .size = 0x78, + .size = MON_COORDS_SIZE(56, 64), .y_offset = 3, }, [SPECIES_STEELIX] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 0, }, [SPECIES_SNUBBULL] = { - .size = 0x55, + .size = MON_COORDS_SIZE(40, 40), .y_offset = 13, }, [SPECIES_GRANBULL] = { - .size = 0x57, + .size = MON_COORDS_SIZE(40, 56), .y_offset = 6, }, [SPECIES_QWILFISH] = { - .size = 0x56, + .size = MON_COORDS_SIZE(40, 48), .y_offset = 10, }, [SPECIES_SCIZOR] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 0, }, [SPECIES_SHUCKLE] = { - .size = 0x66, + .size = MON_COORDS_SIZE(48, 48), .y_offset = 9, }, [SPECIES_HERACROSS] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 3, }, [SPECIES_SNEASEL] = { - .size = 0x67, + .size = MON_COORDS_SIZE(48, 56), .y_offset = 5, }, [SPECIES_TEDDIURSA] = { - .size = 0x45, + .size = MON_COORDS_SIZE(32, 40), .y_offset = 13, }, [SPECIES_URSARING] = { - .size = 0x78, + .size = MON_COORDS_SIZE(56, 64), .y_offset = 1, }, [SPECIES_SLUGMA] = { - .size = 0x45, + .size = MON_COORDS_SIZE(32, 40), .y_offset = 13, }, [SPECIES_MAGCARGO] = { - .size = 0x57, + .size = MON_COORDS_SIZE(40, 56), .y_offset = 13, }, [SPECIES_SWINUB] = { - .size = 0x43, + .size = MON_COORDS_SIZE(32, 24), .y_offset = 20, }, [SPECIES_PILOSWINE] = { - .size = 0x66, + .size = MON_COORDS_SIZE(48, 48), .y_offset = 8, }, [SPECIES_CORSOLA] = { - .size = 0x65, + .size = MON_COORDS_SIZE(48, 40), .y_offset = 12, }, [SPECIES_REMORAID] = { - .size = 0x55, + .size = MON_COORDS_SIZE(40, 40), .y_offset = 14, }, [SPECIES_OCTILLERY] = { - .size = 0x66, + .size = MON_COORDS_SIZE(48, 48), .y_offset = 10, }, [SPECIES_DELIBIRD] = { - .size = 0x56, + .size = MON_COORDS_SIZE(40, 48), .y_offset = 8, }, [SPECIES_MANTINE] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 1, }, [SPECIES_SKARMORY] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 0, }, [SPECIES_HOUNDOUR] = { - .size = 0x56, + .size = MON_COORDS_SIZE(40, 48), .y_offset = 11, }, [SPECIES_HOUNDOOM] = { - .size = 0x77, + .size = MON_COORDS_SIZE(56, 56), .y_offset = 5, }, [SPECIES_KINGDRA] = { - .size = 0x78, + .size = MON_COORDS_SIZE(56, 64), .y_offset = 4, }, [SPECIES_PHANPY] = { - .size = 0x54, + .size = MON_COORDS_SIZE(40, 32), .y_offset = 16, }, [SPECIES_DONPHAN] = { - .size = 0x86, + .size = MON_COORDS_SIZE(64, 48), .y_offset = 8, }, [SPECIES_PORYGON2] = { - .size = 0x55, + .size = MON_COORDS_SIZE(40, 40), .y_offset = 15, }, [SPECIES_STANTLER] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 0, }, [SPECIES_SMEARGLE] = { - .size = 0x77, + .size = MON_COORDS_SIZE(56, 56), .y_offset = 6, }, [SPECIES_TYROGUE] = { - .size = 0x46, + .size = MON_COORDS_SIZE(32, 48), .y_offset = 9, }, [SPECIES_HITMONTOP] = { - .size = 0x67, + .size = MON_COORDS_SIZE(48, 56), .y_offset = 5, }, [SPECIES_SMOOCHUM] = { - .size = 0x35, + .size = MON_COORDS_SIZE(24, 40), .y_offset = 15, }, [SPECIES_ELEKID] = { - .size = 0x76, + .size = MON_COORDS_SIZE(56, 48), .y_offset = 10, }, [SPECIES_MAGBY] = { - .size = 0x45, + .size = MON_COORDS_SIZE(32, 40), .y_offset = 13, }, [SPECIES_MILTANK] = { - .size = 0x77, + .size = MON_COORDS_SIZE(56, 56), .y_offset = 4, }, [SPECIES_BLISSEY] = { - .size = 0x77, + .size = MON_COORDS_SIZE(56, 56), .y_offset = 6, }, [SPECIES_RAIKOU] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 0, }, [SPECIES_ENTEI] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 0, }, [SPECIES_SUICUNE] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 0, }, [SPECIES_LARVITAR] = { - .size = 0x46, + .size = MON_COORDS_SIZE(32, 48), .y_offset = 9, }, [SPECIES_PUPITAR] = { - .size = 0x56, + .size = MON_COORDS_SIZE(40, 48), .y_offset = 9, }, [SPECIES_TYRANITAR] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 0, }, [SPECIES_LUGIA] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 0, }, [SPECIES_HO_OH] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 0, }, [SPECIES_CELEBI] = { - .size = 0x55, + .size = MON_COORDS_SIZE(40, 40), .y_offset = 14, }, [SPECIES_OLD_UNOWN_B] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 4, }, [SPECIES_OLD_UNOWN_C] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 4, }, [SPECIES_OLD_UNOWN_D] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 4, }, [SPECIES_OLD_UNOWN_E] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 4, }, [SPECIES_OLD_UNOWN_F] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 4, }, [SPECIES_OLD_UNOWN_G] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 4, }, [SPECIES_OLD_UNOWN_H] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 4, }, [SPECIES_OLD_UNOWN_I] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 4, }, [SPECIES_OLD_UNOWN_J] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 4, }, [SPECIES_OLD_UNOWN_K] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 4, }, [SPECIES_OLD_UNOWN_L] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 4, }, [SPECIES_OLD_UNOWN_M] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 4, }, [SPECIES_OLD_UNOWN_N] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 4, }, [SPECIES_OLD_UNOWN_O] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 4, }, [SPECIES_OLD_UNOWN_P] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 4, }, [SPECIES_OLD_UNOWN_Q] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 4, }, [SPECIES_OLD_UNOWN_R] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 4, }, [SPECIES_OLD_UNOWN_S] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 4, }, [SPECIES_OLD_UNOWN_T] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 4, }, [SPECIES_OLD_UNOWN_U] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 4, }, [SPECIES_OLD_UNOWN_V] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 4, }, [SPECIES_OLD_UNOWN_W] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 4, }, [SPECIES_OLD_UNOWN_X] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 4, }, [SPECIES_OLD_UNOWN_Y] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 4, }, [SPECIES_OLD_UNOWN_Z] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 4, }, [SPECIES_TREECKO] = { - .size = 0x66, + .size = MON_COORDS_SIZE(48, 48), .y_offset = 8, }, [SPECIES_GROVYLE] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 4, }, [SPECIES_SCEPTILE] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 0, }, [SPECIES_TORCHIC] = { - .size = 0x56, + .size = MON_COORDS_SIZE(40, 48), .y_offset = 8, }, [SPECIES_COMBUSKEN] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 1, }, [SPECIES_BLAZIKEN] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 0, }, [SPECIES_MUDKIP] = { - .size = 0x56, + .size = MON_COORDS_SIZE(40, 48), .y_offset = 12, }, [SPECIES_MARSHTOMP] = { - .size = 0x67, + .size = MON_COORDS_SIZE(48, 56), .y_offset = 6, }, [SPECIES_SWAMPERT] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 0, }, [SPECIES_POOCHYENA] = { - .size = 0x55, + .size = MON_COORDS_SIZE(40, 40), .y_offset = 12, }, [SPECIES_MIGHTYENA] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 4, }, [SPECIES_ZIGZAGOON] = { - .size = 0x85, + .size = MON_COORDS_SIZE(64, 40), .y_offset = 15, }, [SPECIES_LINOONE] = { - .size = 0x78, + .size = MON_COORDS_SIZE(56, 64), .y_offset = 3, }, [SPECIES_WURMPLE] = { - .size = 0x45, + .size = MON_COORDS_SIZE(32, 40), .y_offset = 14, }, [SPECIES_SILCOON] = { - .size = 0x75, + .size = MON_COORDS_SIZE(56, 40), .y_offset = 17, }, [SPECIES_BEAUTIFLY] = { - .size = 0x86, + .size = MON_COORDS_SIZE(64, 48), .y_offset = 9, }, [SPECIES_CASCOON] = { - .size = 0x74, + .size = MON_COORDS_SIZE(56, 32), .y_offset = 16, }, [SPECIES_DUSTOX] = { - .size = 0x86, + .size = MON_COORDS_SIZE(64, 48), .y_offset = 15, }, [SPECIES_LOTAD] = { - .size = 0x65, + .size = MON_COORDS_SIZE(48, 40), .y_offset = 14, }, [SPECIES_LOMBRE] = { - .size = 0x66, + .size = MON_COORDS_SIZE(48, 48), .y_offset = 9, }, [SPECIES_LUDICOLO] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 0, }, [SPECIES_SEEDOT] = { - .size = 0x46, + .size = MON_COORDS_SIZE(32, 48), .y_offset = 16, }, [SPECIES_NUZLEAF] = { - .size = 0x56, + .size = MON_COORDS_SIZE(40, 48), .y_offset = 8, }, [SPECIES_SHIFTRY] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 2, }, [SPECIES_NINCADA] = { - .size = 0x74, + .size = MON_COORDS_SIZE(56, 32), .y_offset = 18, }, [SPECIES_NINJASK] = { - .size = 0x86, + .size = MON_COORDS_SIZE(64, 48), .y_offset = 10, }, [SPECIES_SHEDINJA] = { - .size = 0x66, + .size = MON_COORDS_SIZE(48, 48), .y_offset = 10, }, [SPECIES_TAILLOW] = { - .size = 0x64, + .size = MON_COORDS_SIZE(48, 32), .y_offset = 16, }, [SPECIES_SWELLOW] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 6, }, [SPECIES_SHROOMISH] = { - .size = 0x54, + .size = MON_COORDS_SIZE(40, 32), .y_offset = 16, }, [SPECIES_BRELOOM] = { - .size = 0x77, + .size = MON_COORDS_SIZE(56, 56), .y_offset = 4, }, [SPECIES_SPINDA] = { - .size = 0x68, + .size = MON_COORDS_SIZE(48, 64), .y_offset = 8, }, [SPECIES_WINGULL] = { - .size = 0x84, + .size = MON_COORDS_SIZE(64, 32), .y_offset = 24, }, [SPECIES_PELIPPER] = { - .size = 0x77, + .size = MON_COORDS_SIZE(56, 56), .y_offset = 4, }, [SPECIES_SURSKIT] = { - .size = 0x65, + .size = MON_COORDS_SIZE(48, 40), .y_offset = 15, }, [SPECIES_MASQUERAIN] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 1, }, [SPECIES_WAILMER] = { - .size = 0x75, + .size = MON_COORDS_SIZE(56, 40), .y_offset = 15, }, [SPECIES_WAILORD] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 10, }, [SPECIES_SKITTY] = { - .size = 0x66, + .size = MON_COORDS_SIZE(48, 48), .y_offset = 11, }, [SPECIES_DELCATTY] = { - .size = 0x66, + .size = MON_COORDS_SIZE(48, 48), .y_offset = 8, }, [SPECIES_KECLEON] = { - .size = 0x67, + .size = MON_COORDS_SIZE(48, 56), .y_offset = 7, }, [SPECIES_BALTOY] = { - .size = 0x55, + .size = MON_COORDS_SIZE(40, 40), .y_offset = 16, }, [SPECIES_CLAYDOL] = { - .size = 0x78, + .size = MON_COORDS_SIZE(56, 64), .y_offset = 6, }, [SPECIES_NOSEPASS] = { - .size = 0x56, + .size = MON_COORDS_SIZE(40, 48), .y_offset = 12, }, [SPECIES_TORKOAL] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 2, }, [SPECIES_SABLEYE] = { - .size = 0x66, + .size = MON_COORDS_SIZE(48, 48), .y_offset = 9, }, [SPECIES_BARBOACH] = { - .size = 0x46, + .size = MON_COORDS_SIZE(32, 48), .y_offset = 11, }, [SPECIES_WHISCASH] = { - .size = 0x76, + .size = MON_COORDS_SIZE(56, 48), .y_offset = 9, }, [SPECIES_LUVDISC] = { - .size = 0x46, + .size = MON_COORDS_SIZE(32, 48), .y_offset = 24, }, [SPECIES_CORPHISH] = { - .size = 0x66, + .size = MON_COORDS_SIZE(48, 48), .y_offset = 12, }, [SPECIES_CRAWDAUNT] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 1, }, [SPECIES_FEEBAS] = { - .size = 0x46, + .size = MON_COORDS_SIZE(32, 48), .y_offset = 13, }, [SPECIES_MILOTIC] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 0, }, [SPECIES_CARVANHA] = { - .size = 0x67, + .size = MON_COORDS_SIZE(48, 56), .y_offset = 6, }, [SPECIES_SHARPEDO] = { - .size = 0x78, + .size = MON_COORDS_SIZE(56, 64), .y_offset = 3, }, [SPECIES_TRAPINCH] = { - .size = 0x54, + .size = MON_COORDS_SIZE(40, 32), .y_offset = 16, }, [SPECIES_VIBRAVA] = { - .size = 0x86, + .size = MON_COORDS_SIZE(64, 48), .y_offset = 12, }, [SPECIES_FLYGON] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 1, }, [SPECIES_MAKUHITA] = { - .size = 0x65, + .size = MON_COORDS_SIZE(48, 40), .y_offset = 12, }, [SPECIES_HARIYAMA] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 1, }, [SPECIES_ELECTRIKE] = { - .size = 0x64, + .size = MON_COORDS_SIZE(48, 32), .y_offset = 18, }, [SPECIES_MANECTRIC] = { - .size = 0x67, + .size = MON_COORDS_SIZE(48, 56), .y_offset = 4, }, [SPECIES_NUMEL] = { - .size = 0x65, + .size = MON_COORDS_SIZE(48, 40), .y_offset = 15, }, [SPECIES_CAMERUPT] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 9, }, [SPECIES_SPHEAL] = { - .size = 0x65, + .size = MON_COORDS_SIZE(48, 40), .y_offset = 16, }, [SPECIES_SEALEO] = { - .size = 0x86, + .size = MON_COORDS_SIZE(64, 48), .y_offset = 10, }, [SPECIES_WALREIN] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 1, }, [SPECIES_CACNEA] = { - .size = 0x74, + .size = MON_COORDS_SIZE(56, 32), .y_offset = 16, }, [SPECIES_CACTURNE] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 0, }, [SPECIES_SNORUNT] = { - .size = 0x56, + .size = MON_COORDS_SIZE(40, 48), .y_offset = 11, }, [SPECIES_GLALIE] = { - .size = 0x76, + .size = MON_COORDS_SIZE(56, 48), .y_offset = 10, }, [SPECIES_LUNATONE] = { - .size = 0x66, + .size = MON_COORDS_SIZE(48, 48), .y_offset = 9, }, [SPECIES_SOLROCK] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 1, }, [SPECIES_AZURILL] = { - .size = 0x55, + .size = MON_COORDS_SIZE(40, 40), .y_offset = 15, }, [SPECIES_SPOINK] = { - .size = 0x46, + .size = MON_COORDS_SIZE(32, 48), .y_offset = 9, }, [SPECIES_GRUMPIG] = { - .size = 0x77, + .size = MON_COORDS_SIZE(56, 56), .y_offset = 5, }, [SPECIES_PLUSLE] = { - .size = 0x56, + .size = MON_COORDS_SIZE(40, 48), .y_offset = 14, }, [SPECIES_MINUN] = { - .size = 0x66, + .size = MON_COORDS_SIZE(48, 48), .y_offset = 12, }, [SPECIES_MAWILE] = { - .size = 0x76, + .size = MON_COORDS_SIZE(56, 48), .y_offset = 8, }, [SPECIES_MEDITITE] = { - .size = 0x65, + .size = MON_COORDS_SIZE(48, 40), .y_offset = 12, }, [SPECIES_MEDICHAM] = { - .size = 0x68, + .size = MON_COORDS_SIZE(48, 64), .y_offset = 1, }, [SPECIES_SWABLU] = { - .size = 0x76, + .size = MON_COORDS_SIZE(56, 48), .y_offset = 17, }, [SPECIES_ALTARIA] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 2, }, [SPECIES_WYNAUT] = { - .size = 0x55, + .size = MON_COORDS_SIZE(40, 40), .y_offset = 12, }, [SPECIES_DUSKULL] = { - .size = 0x66, + .size = MON_COORDS_SIZE(48, 48), .y_offset = 10, }, [SPECIES_DUSCLOPS] = { - .size = 0x77, + .size = MON_COORDS_SIZE(56, 56), .y_offset = 5, }, [SPECIES_ROSELIA] = { - .size = 0x76, + .size = MON_COORDS_SIZE(56, 48), .y_offset = 8, }, [SPECIES_SLAKOTH] = { - .size = 0x74, + .size = MON_COORDS_SIZE(56, 32), .y_offset = 18, }, [SPECIES_VIGOROTH] = { - .size = 0x78, + .size = MON_COORDS_SIZE(56, 64), .y_offset = 0, }, [SPECIES_SLAKING] = { - .size = 0x86, + .size = MON_COORDS_SIZE(64, 48), .y_offset = 8, }, [SPECIES_GULPIN] = { - .size = 0x55, + .size = MON_COORDS_SIZE(40, 40), .y_offset = 18, }, [SPECIES_SWALOT] = { - .size = 0x66, + .size = MON_COORDS_SIZE(48, 48), .y_offset = 8, }, [SPECIES_TROPIUS] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 0, }, [SPECIES_WHISMUR] = { - .size = 0x55, + .size = MON_COORDS_SIZE(40, 40), .y_offset = 14, }, [SPECIES_LOUDRED] = { - .size = 0x78, + .size = MON_COORDS_SIZE(56, 64), .y_offset = 3, }, [SPECIES_EXPLOUD] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 1, }, [SPECIES_CLAMPERL] = { - .size = 0x55, + .size = MON_COORDS_SIZE(40, 40), .y_offset = 14, }, [SPECIES_HUNTAIL] = { - .size = 0x78, + .size = MON_COORDS_SIZE(56, 64), .y_offset = 3, }, [SPECIES_GOREBYSS] = { - .size = 0x86, + .size = MON_COORDS_SIZE(64, 48), .y_offset = 11, }, [SPECIES_ABSOL] = { - .size = 0x68, + .size = MON_COORDS_SIZE(48, 64), .y_offset = 0, }, [SPECIES_SHUPPET] = { - .size = 0x56, + .size = MON_COORDS_SIZE(40, 48), .y_offset = 14, }, [SPECIES_BANETTE] = { - .size = 0x55, + .size = MON_COORDS_SIZE(40, 40), .y_offset = 12, }, [SPECIES_SEVIPER] = { - .size = 0x77, + .size = MON_COORDS_SIZE(56, 56), .y_offset = 8, }, [SPECIES_ZANGOOSE] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 5, }, [SPECIES_RELICANTH] = { - .size = 0x77, + .size = MON_COORDS_SIZE(56, 56), .y_offset = 11, }, [SPECIES_ARON] = { - .size = 0x43, + .size = MON_COORDS_SIZE(32, 24), .y_offset = 20, }, [SPECIES_LAIRON] = { - .size = 0x75, + .size = MON_COORDS_SIZE(56, 40), .y_offset = 13, }, [SPECIES_AGGRON] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 0, }, [SPECIES_CASTFORM] = { - .size = 0x34, + .size = MON_COORDS_SIZE(24, 32), .y_offset = 17, }, [SPECIES_VOLBEAT] = { - .size = 0x66, + .size = MON_COORDS_SIZE(48, 48), .y_offset = 8, }, [SPECIES_ILLUMISE] = { - .size = 0x56, + .size = MON_COORDS_SIZE(40, 48), .y_offset = 8, }, [SPECIES_LILEEP] = { - .size = 0x67, + .size = MON_COORDS_SIZE(48, 56), .y_offset = 7, }, [SPECIES_CRADILY] = { - .size = 0x78, + .size = MON_COORDS_SIZE(56, 64), .y_offset = 0, }, [SPECIES_ANORITH] = { - .size = 0x66, + .size = MON_COORDS_SIZE(48, 48), .y_offset = 8, }, [SPECIES_ARMALDO] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 0, }, [SPECIES_RALTS] = { - .size = 0x35, + .size = MON_COORDS_SIZE(24, 40), .y_offset = 15, }, [SPECIES_KIRLIA] = { - .size = 0x47, + .size = MON_COORDS_SIZE(32, 56), .y_offset = 6, }, [SPECIES_GARDEVOIR] = { - .size = 0x78, + .size = MON_COORDS_SIZE(56, 64), .y_offset = 1, }, [SPECIES_BAGON] = { - .size = 0x56, + .size = MON_COORDS_SIZE(40, 48), .y_offset = 11, }, [SPECIES_SHELGON] = { - .size = 0x66, + .size = MON_COORDS_SIZE(48, 48), .y_offset = 9, }, [SPECIES_SALAMENCE] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 4, }, [SPECIES_BELDUM] = { - .size = 0x55, + .size = MON_COORDS_SIZE(40, 40), .y_offset = 15, }, [SPECIES_METANG] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 7, }, [SPECIES_METAGROSS] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 6, }, [SPECIES_REGIROCK] = { - .size = 0x78, + .size = MON_COORDS_SIZE(56, 64), .y_offset = 4, }, [SPECIES_REGICE] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 2, }, [SPECIES_REGISTEEL] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 3, }, [SPECIES_KYOGRE] = { - .size = 0x87, + .size = MON_COORDS_SIZE(64, 56), .y_offset = 4, }, [SPECIES_GROUDON] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 1, }, [SPECIES_RAYQUAZA] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 0, }, [SPECIES_LATIAS] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 1, }, [SPECIES_LATIOS] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 2, }, [SPECIES_JIRACHI] = { - .size = 0x66, + .size = MON_COORDS_SIZE(48, 48), .y_offset = 13, }, [SPECIES_DEOXYS] = { - .size = 0x88, + .size = MON_COORDS_SIZE(64, 64), .y_offset = 1, }, [SPECIES_CHIMECHO] = { - .size = 0x37, + .size = MON_COORDS_SIZE(24, 56), .y_offset = 6, }, [SPECIES_EGG] = { - .size = 0x33, + .size = MON_COORDS_SIZE(24, 24), .y_offset = 20, }, [SPECIES_UNOWN_B] = { - .size = 0x34, + .size = MON_COORDS_SIZE(24, 32), .y_offset = 16, }, [SPECIES_UNOWN_C] = { - .size = 0x44, + .size = MON_COORDS_SIZE(32, 32), .y_offset = 16, }, [SPECIES_UNOWN_D] = { - .size = 0x44, + .size = MON_COORDS_SIZE(32, 32), .y_offset = 16, }, [SPECIES_UNOWN_E] = { - .size = 0x44, + .size = MON_COORDS_SIZE(32, 32), .y_offset = 17, }, [SPECIES_UNOWN_F] = { - .size = 0x44, + .size = MON_COORDS_SIZE(32, 32), .y_offset = 17, }, [SPECIES_UNOWN_G] = { - .size = 0x35, + .size = MON_COORDS_SIZE(24, 40), .y_offset = 14, }, [SPECIES_UNOWN_H] = { - .size = 0x44, + .size = MON_COORDS_SIZE(32, 32), .y_offset = 16, }, [SPECIES_UNOWN_I] = { - .size = 0x34, + .size = MON_COORDS_SIZE(24, 32), .y_offset = 16, }, [SPECIES_UNOWN_J] = { - .size = 0x34, + .size = MON_COORDS_SIZE(24, 32), .y_offset = 17, }, [SPECIES_UNOWN_K] = { - .size = 0x44, + .size = MON_COORDS_SIZE(32, 32), .y_offset = 17, }, [SPECIES_UNOWN_L] = { - .size = 0x34, + .size = MON_COORDS_SIZE(24, 32), .y_offset = 19, }, [SPECIES_UNOWN_M] = { - .size = 0x44, + .size = MON_COORDS_SIZE(32, 32), .y_offset = 19, }, [SPECIES_UNOWN_N] = { - .size = 0x43, + .size = MON_COORDS_SIZE(32, 24), .y_offset = 20, }, [SPECIES_UNOWN_O] = { - .size = 0x44, + .size = MON_COORDS_SIZE(32, 32), .y_offset = 16, }, [SPECIES_UNOWN_P] = { - .size = 0x34, + .size = MON_COORDS_SIZE(24, 32), .y_offset = 19, }, [SPECIES_UNOWN_Q] = { - .size = 0x43, + .size = MON_COORDS_SIZE(32, 24), .y_offset = 21, }, [SPECIES_UNOWN_R] = { - .size = 0x34, + .size = MON_COORDS_SIZE(24, 32), .y_offset = 19, }, [SPECIES_UNOWN_S] = { - .size = 0x45, + .size = MON_COORDS_SIZE(32, 40), .y_offset = 12, }, [SPECIES_UNOWN_T] = { - .size = 0x34, + .size = MON_COORDS_SIZE(24, 32), .y_offset = 18, }, [SPECIES_UNOWN_U] = { - .size = 0x44, + .size = MON_COORDS_SIZE(32, 32), .y_offset = 18, }, [SPECIES_UNOWN_V] = { - .size = 0x44, + .size = MON_COORDS_SIZE(32, 32), .y_offset = 18, }, [SPECIES_UNOWN_W] = { - .size = 0x44, + .size = MON_COORDS_SIZE(32, 32), .y_offset = 19, }, [SPECIES_UNOWN_X] = { - .size = 0x33, + .size = MON_COORDS_SIZE(24, 24), .y_offset = 21, }, [SPECIES_UNOWN_Y] = { - .size = 0x34, + .size = MON_COORDS_SIZE(24, 32), .y_offset = 17, }, [SPECIES_UNOWN_Z] = { - .size = 0x34, + .size = MON_COORDS_SIZE(24, 32), .y_offset = 16, }, [SPECIES_UNOWN_EMARK] = { - .size = 0x35, + .size = MON_COORDS_SIZE(24, 40), .y_offset = 15, }, [SPECIES_UNOWN_QMARK] = { - .size = 0x35, + .size = MON_COORDS_SIZE(24, 40), .y_offset = 13, }, }; diff --git a/src/dodrio_berry_picking.c b/src/dodrio_berry_picking.c index e680b56d39..691ca6b2ab 100644 --- a/src/dodrio_berry_picking.c +++ b/src/dodrio_berry_picking.c @@ -3056,16 +3056,16 @@ static const u16 sDebug_BerryResults[MAX_RFU_PLAYERS][4] = }; static const u8 sJPText_Vowels[] = _("あいうえおかき"); -static const u8 sText_ABCDEFG[] = _("ABCDEFG"); -static const u8 sText_0123456[] = _("0123456"); +static const u8 sText_Letters[] = _("ABCDEFG"); +static const u8 sText_Digits[] = _("0123456"); static const u8 *const sDebug_PlayerNames[] = { sJPText_Vowels, sJPText_Vowels, sJPText_Vowels, - sText_ABCDEFG, - sText_0123456 + sText_Letters, + sText_Digits }; static void Debug_UpdateNumPlayers(void) @@ -5035,12 +5035,12 @@ static void Msg_SavingDontTurnOff(void) case 2: if (!IsDma3ManagerBusyWithBgCopy()) { - CreateTask(Task_LinkSave, 0); + CreateTask(Task_LinkFullSave, 0); sGfx->state++; } break; case 3: - if (!FuncIsActiveTask(Task_LinkSave)) + if (!FuncIsActiveTask(Task_LinkFullSave)) sGfx->state++; break; default: diff --git a/src/ereader_helpers.c b/src/ereader_helpers.c index 71db4db9ec..611c959bdc 100755 --- a/src/ereader_helpers.c +++ b/src/ereader_helpers.c @@ -481,7 +481,7 @@ static bool32 TryWriteTrainerHill_Internal(struct EReaderTrainerHillSet * hillSe } hillTag->checksum = CalcByteArraySum((u8 *)hillTag->floors, NUM_TRAINER_HILL_FLOORS * sizeof(struct TrHillFloor)); - if (TryWriteSpecialSaveSection(SECTOR_ID_TRAINER_HILL, (u8 *)hillTag) != SAVE_STATUS_OK) + if (TryWriteSpecialSaveSector(SECTOR_ID_TRAINER_HILL, (u8 *)hillTag) != SAVE_STATUS_OK) return FALSE; return TRUE; @@ -497,7 +497,7 @@ bool32 TryWriteTrainerHill(struct EReaderTrainerHillSet * hillSet) static bool32 TryReadTrainerHill_Internal(struct EReaderTrainerHillSet * dest, u8 * buffer) { - if (TryReadSpecialSaveSection(SECTOR_ID_TRAINER_HILL, buffer) != SAVE_STATUS_OK) + if (TryReadSpecialSaveSector(SECTOR_ID_TRAINER_HILL, buffer) != SAVE_STATUS_OK) return FALSE; memcpy(dest, buffer, sizeof(struct EReaderTrainerHillSet)); diff --git a/src/evolution_scene.c b/src/evolution_scene.c index 1d583343f8..99ff268213 100644 --- a/src/evolution_scene.c +++ b/src/evolution_scene.c @@ -1094,7 +1094,7 @@ static void Task_TradeEvolutionScene(u8 taskId) case T_EVOSTATE_INTRO_CRY: if (!IsTextPrinterActive(0)) { - PlayCry1(gTasks[taskId].tPreEvoSpecies, 0); + PlayCry_Normal(gTasks[taskId].tPreEvoSpecies, 0); gTasks[taskId].tState++; } break; diff --git a/src/field_effect.c b/src/field_effect.c index 574bec879d..3f0ba24555 100644 --- a/src/field_effect.c +++ b/src/field_effect.c @@ -2565,15 +2565,17 @@ bool8 FldEff_FieldMoveShowMon(void) return FALSE; } +#define SHOW_MON_CRY_NO_DUCKING (1 << 31) + bool8 FldEff_FieldMoveShowMonInit(void) { struct Pokemon *pokemon; - u32 flag = gFieldEffectArguments[0] & 0x80000000; + bool32 noDucking = gFieldEffectArguments[0] & SHOW_MON_CRY_NO_DUCKING; pokemon = &gPlayerParty[(u8)gFieldEffectArguments[0]]; gFieldEffectArguments[0] = GetMonData(pokemon, MON_DATA_SPECIES); gFieldEffectArguments[1] = GetMonData(pokemon, MON_DATA_OT_ID); gFieldEffectArguments[2] = GetMonData(pokemon, MON_DATA_PERSONALITY); - gFieldEffectArguments[0] |= flag; + gFieldEffectArguments[0] |= noDucking; FieldEffectStart(FLDEFF_FIELD_MOVE_SHOW_MON); FieldEffectActiveListRemove(FLDEFF_FIELD_MOVE_SHOW_MON_INIT); return FALSE; @@ -2913,17 +2915,17 @@ static bool8 SlideIndoorBannerOffscreen(struct Task *task) static u8 InitFieldMoveMonSprite(u32 species, u32 otId, u32 personality) { - u16 v0; + bool16 noDucking; u8 monSprite; struct Sprite *sprite; - v0 = (species & 0x80000000) >> 16; - species &= 0x7fffffff; + noDucking = (species & SHOW_MON_CRY_NO_DUCKING) >> 16; + species &= ~SHOW_MON_CRY_NO_DUCKING; monSprite = CreateMonSprite_FieldMove(species, otId, personality, 320, 80, 0); sprite = &gSprites[monSprite]; sprite->callback = SpriteCallbackDummy; sprite->oam.priority = 0; sprite->sSpecies = species; - sprite->data[6] = v0; + sprite->data[6] = noDucking; return monSprite; } @@ -2935,13 +2937,9 @@ static void SpriteCB_FieldMoveMonSlideOnscreen(struct Sprite *sprite) sprite->sOnscreenTimer = 30; sprite->callback = SpriteCB_FieldMoveMonWaitAfterCry; if (sprite->data[6]) - { - PlayCry2(sprite->sSpecies, 0, 0x7d, 0xa); - } + PlayCry_NormalNoDucking(sprite->sSpecies, 0, CRY_VOLUME_RS, CRY_PRIORITY_NORMAL); else - { - PlayCry1(sprite->sSpecies, 0); - } + PlayCry_Normal(sprite->sSpecies, 0); } } @@ -3021,7 +3019,7 @@ static void SurfFieldEffect_ShowMon(struct Task *task) objectEvent = &gObjectEvents[gPlayerAvatar.objectEventId]; if (ObjectEventCheckHeldMovementStatus(objectEvent)) { - gFieldEffectArguments[0] = task->tMonId | 0x80000000; + gFieldEffectArguments[0] = task->tMonId | SHOW_MON_CRY_NO_DUCKING; FieldEffectStart(FLDEFF_FIELD_MOVE_SHOW_MON_INIT); task->tState++; } diff --git a/src/field_screen_effect.c b/src/field_screen_effect.c index c27ec6c4c3..0cf5e41456 100644 --- a/src/field_screen_effect.c +++ b/src/field_screen_effect.c @@ -56,7 +56,7 @@ const s32 gMaxFlashLevel = ARRAY_COUNT(sFlashLevelPixelRadii) - 1; const struct ScanlineEffectParams sFlashEffectParams = { - (void *)REG_ADDR_WIN0H, + ®_WIN0H, ((DMA_ENABLE | DMA_START_HBLANK | DMA_REPEAT | DMA_DEST_RELOAD) << 16) | 1, 1 }; diff --git a/src/hall_of_fame.c b/src/hall_of_fame.c index 84f7d8fe67..d134f22654 100644 --- a/src/hall_of_fame.c +++ b/src/hall_of_fame.c @@ -486,12 +486,12 @@ static void Task_Hof_InitTeamSaveData(u8 taskId) if (!gHasHallOfFameRecords) { - memset(gDecompressionBuffer, 0, 0x2000); + memset(gDecompressionBuffer, 0, SECTOR_SIZE * NUM_HOF_SECTORS); } else { - if (Save_LoadGameData(SAVE_HALL_OF_FAME) != SAVE_STATUS_OK) - memset(gDecompressionBuffer, 0, 0x2000); + if (LoadGameSave(SAVE_HALL_OF_FAME) != SAVE_STATUS_OK) + memset(gDecompressionBuffer, 0, SECTOR_SIZE * NUM_HOF_SECTORS); } for (i = 0; i < HALL_OF_FAME_MAX_TEAMS; i++, lastSavedTeam++) @@ -852,7 +852,7 @@ void CB2_DoHallOfFamePC(void) gTasks[taskId].tMonSpriteId(i) = SPRITE_NONE; } - sHofMonPtr = AllocZeroed(0x2000); + sHofMonPtr = AllocZeroed(SECTOR_SIZE * NUM_HOF_SECTORS); SetMainCallback2(CB2_HallOfFame); } break; @@ -862,7 +862,7 @@ void CB2_DoHallOfFamePC(void) static void Task_HofPC_CopySaveData(u8 taskId) { HofPCTopBar_AddWindow(0, 30, 0, 12, 0x226); - if (Save_LoadGameData(SAVE_HALL_OF_FAME) != SAVE_STATUS_OK) + if (LoadGameSave(SAVE_HALL_OF_FAME) != SAVE_STATUS_OK) { gTasks[taskId].func = Task_HofPC_PrintDataIsCorrupted; } @@ -871,7 +871,7 @@ static void Task_HofPC_CopySaveData(u8 taskId) u16 i; struct HallofFameTeam* savedTeams; - CpuCopy16(gDecompressionBuffer, sHofMonPtr, 0x2000); + CpuCopy16(gDecompressionBuffer, sHofMonPtr, SECTOR_SIZE * NUM_HOF_SECTORS); savedTeams = sHofMonPtr; for (i = 0; i < HALL_OF_FAME_MAX_TEAMS; i++, savedTeams++) { @@ -982,7 +982,7 @@ static void Task_HofPC_PrintMonInfo(u8 taskId) if (currMon->species != SPECIES_EGG) { StopCryAndClearCrySongs(); - PlayCry1(currMon->species, 0); + PlayCry_Normal(currMon->species, 0); } HallOfFame_PrintMonInfo(currMon, 0, 14); diff --git a/src/intro.c b/src/intro.c index 5cf99c97e6..827ce80be8 100644 --- a/src/intro.c +++ b/src/intro.c @@ -1145,7 +1145,7 @@ void CB2_InitCopyrightScreenAfterBootup(void) SetSaveBlocksPointers(GetSaveBlocksPointersBaseOffset()); ResetMenuAndMonGlobals(); Save_ResetSaveCounters(); - Save_LoadGameData(SAVE_NORMAL); + LoadGameSave(SAVE_NORMAL); if (gSaveFileStatus == SAVE_STATUS_EMPTY || gSaveFileStatus == SAVE_STATUS_CORRUPT) Sav2_ClearSetDefault(); SetPokemonCryStereo(gSaveBlock2Ptr->optionsSound); @@ -1848,7 +1848,7 @@ static void Task_Scene3_StartGroudon(u8 taskId) { gTasks[taskId].tState = 0; gTasks[taskId].func = Task_Scene3_Groudon; - ScanlineEffect_InitWave(0, 160, 4, 4, 1, 4, 0); + ScanlineEffect_InitWave(0, 160, 4, 4, 1, SCANLINE_EFFECT_REG_BG1HOFS, 0); } #define tScreenX data[1] @@ -1925,7 +1925,7 @@ static void Task_Scene3_Groudon(u8 taskId) tScreenX = 80; tScreenY = 41; tDelay = 16; - PlayCryInternal(SPECIES_GROUDON, 0, 100, 10, 0); + PlayCryInternal(SPECIES_GROUDON, 0, 100, CRY_PRIORITY_NORMAL, CRY_MODE_NORMAL); tState++; } break; @@ -2058,7 +2058,7 @@ static void Task_Scene3_LoadKyogre(u8 taskId) gTasks[taskId].tDelay = 16; gTasks[taskId].tZoom = 256; PanFadeAndZoomScreen(gTasks[taskId].tScreenX, gTasks[taskId].tScreenY, gTasks[taskId].tZoom, 0); - ScanlineEffect_InitWave(0, 0xA0, 4, 4, 1, 6, 0); + ScanlineEffect_InitWave(0, 0xA0, 4, 4, 1, SCANLINE_EFFECT_REG_BG1VOFS, 0); } static void Task_Scene3_Kyogre(u8 taskId) @@ -2127,7 +2127,7 @@ static void Task_Scene3_Kyogre(u8 taskId) { tDelay = 1; tState++; - PlayCryInternal(SPECIES_KYOGRE, 0, 120, 10, 0); + PlayCryInternal(SPECIES_KYOGRE, 0, 120, CRY_PRIORITY_NORMAL, CRY_MODE_NORMAL); } } break; diff --git a/src/libisagbprn.c b/src/libisagbprn.c index e0e979e95e..69c6986aef 100644 --- a/src/libisagbprn.c +++ b/src/libisagbprn.c @@ -31,7 +31,7 @@ void AGBPrintFlush1Block(void); void AGBPrintInit(void) { volatile struct AGBPrintStruct *pPrint = (struct AGBPrintStruct *)AGB_PRINT_STRUCT_ADDR; - u16 *pWSCNT = (u16 *)REG_ADDR_WAITCNT; + u16 *pWSCNT = ®_WAITCNT; u16 *pProtect = (u16 *)AGB_PRINT_PROTECT_ADDR; u16 nOldWSCNT = *pWSCNT; *pWSCNT = WSCNT_DATA; @@ -57,7 +57,7 @@ static void AGBPutcInternal(const char cChr) void AGBPutc(const char cChr) { - u16 *pWSCNT = (u16 *)REG_ADDR_WAITCNT; + u16 *pWSCNT = ®_WAITCNT; u16 nOldWSCNT = *pWSCNT; volatile struct AGBPrintStruct *pPrint; *pWSCNT = WSCNT_DATA; @@ -71,7 +71,7 @@ void AGBPutc(const char cChr) void AGBPrint(const char *pBuf) { volatile struct AGBPrintStruct *pPrint = (struct AGBPrintStruct *)AGB_PRINT_STRUCT_ADDR; - u16 *pWSCNT = (u16 *)REG_ADDR_WAITCNT; + u16 *pWSCNT = ®_WAITCNT; u16 nOldWSCNT = *pWSCNT; *pWSCNT = WSCNT_DATA; while (*pBuf) @@ -105,9 +105,9 @@ static void AGBPrintTransferDataInternal(u32 bAllData) pProtect = (u16 *)AGB_PRINT_PROTECT_ADDR; pPrint = (struct AGBPrintStruct *)AGB_PRINT_STRUCT_ADDR; lpfnFuncFlush = (LPFN_PRINT_FLUSH)AGB_PRINT_FLUSH_ADDR; - pIME = (u16 *)REG_ADDR_IME; + pIME = ®_IME; nIME = *pIME; - pWSCNT = (u16 *)REG_ADDR_WAITCNT; + pWSCNT = ®_WAITCNT; nOldWSCNT = *pWSCNT; *pIME = nIME & ~1; *pWSCNT = WSCNT_DATA; diff --git a/src/librfu_intr.c b/src/librfu_intr.c index 19ea60b067..d902b1c45b 100644 --- a/src/librfu_intr.c +++ b/src/librfu_intr.c @@ -336,8 +336,8 @@ static u16 handshake_wait(u16 slot) static void STWI_set_timer_in_RAM(u8 count) { - vu16* regTMCNTL = (vu16*)(REG_ADDR_TMCNT_L + gSTWIStatus->timerSelect * 4); - vu16* regTMCNTH = (vu16*)(REG_ADDR_TMCNT_H + gSTWIStatus->timerSelect * 4); + vu16* regTMCNTL = ®_TMCNT_L(gSTWIStatus->timerSelect); + vu16* regTMCNTH = ®_TMCNT_H(gSTWIStatus->timerSelect); REG_IME = 0; switch (count) { diff --git a/src/load_save.c b/src/load_save.c index 1ba5a1600a..f2b12acf0c 100644 --- a/src/load_save.c +++ b/src/load_save.c @@ -29,14 +29,9 @@ struct LoadedSaveData }; // EWRAM DATA -EWRAM_DATA struct SaveBlock2 gSaveblock2 = {0}; -EWRAM_DATA u8 gSaveblock2_DMA[SAVEBLOCK_MOVE_RANGE] = {0}; - -EWRAM_DATA struct SaveBlock1 gSaveblock1 = {0}; -EWRAM_DATA u8 gSaveblock1_DMA[SAVEBLOCK_MOVE_RANGE] = {0}; - -EWRAM_DATA struct PokemonStorage gPokemonStorage = {0}; -EWRAM_DATA u8 gSaveblock3_DMA[SAVEBLOCK_MOVE_RANGE] = {0}; +EWRAM_DATA struct SaveBlock2DMA gSaveblock2 = {0}; +EWRAM_DATA struct SaveBlock1DMA gSaveblock1 = {0}; +EWRAM_DATA struct PokemonStorageDMA gPokemonStorage = {0}; EWRAM_DATA struct LoadedSaveData gLoadedSaveData = {0}; EWRAM_DATA u32 gLastEncryptionKey = 0; @@ -63,12 +58,12 @@ void CheckForFlashMemory(void) void ClearSav2(void) { - CpuFill16(0, &gSaveblock2, sizeof(struct SaveBlock2) + sizeof(gSaveblock2_DMA)); + CpuFill16(0, &gSaveblock2, sizeof(struct SaveBlock2DMA)); } void ClearSav1(void) { - CpuFill16(0, &gSaveblock1, sizeof(struct SaveBlock1) + sizeof(gSaveblock1_DMA)); + CpuFill16(0, &gSaveblock1, sizeof(struct SaveBlock1DMA)); } // Offset is the sum of the trainer id bytes @@ -198,13 +193,13 @@ void LoadObjectEvents(void) gObjectEvents[i] = gSaveBlock1Ptr->objectEvents[i]; } -void SaveSerializedGame(void) +void CopyPartyAndObjectsToSave(void) { SavePlayerParty(); SaveObjectEvents(); } -void LoadSerializedGame(void) +void CopyPartyAndObjectsFromSave(void) { LoadPlayerParty(); LoadObjectEvents(); diff --git a/src/m4a_1.s b/src/m4a_1.s index 62b913c863..f71a5546e4 100644 --- a/src/m4a_1.s +++ b/src/m4a_1.s @@ -302,7 +302,7 @@ _081DD044: ldrb r0, [r4, o_SoundChannel_type] tst r0, TONEDATA_TYPE_CMP | TONEDATA_TYPE_REV beq _081DD068 - bl sub_82DF49C + bl SoundMainRAM_Unk1 b _081DD228 _081DD068: mov r10, r10, lsl 16 @@ -465,8 +465,9 @@ _081DD25E: .pool thumb_func_end SoundMainRAM - arm_func_start sub_82DF49C -sub_82DF49C: +@ Not present in GBA SDK 3.0 + arm_func_start SoundMainRAM_Unk1 +SoundMainRAM_Unk1: ldr r6, [r4, o_SoundChannel_wav] ldrb r0, [r4, o_SoundChannel_statusFlags] tst r0, SOUND_CHANNEL_SF_SPECIAL @@ -505,10 +506,10 @@ _081DD2B4: ldrb r0, [r4, o_SoundChannel_type] tst r0, TONEDATA_TYPE_REV bne _081DD3C0 - bl sub_82DF758 + bl SoundMainRAM_Unk2 mov r0, r1 add r3, r3, 0x1 - bl sub_82DF758 + bl SoundMainRAM_Unk2 sub r1, r1, r0 _081DD308: ldr r6, [r5] @@ -534,11 +535,11 @@ _081DD310: b _081DD364 _081DD358: add r3, r3, lr - bl sub_82DF758 + bl SoundMainRAM_Unk2 mov r0, r1 _081DD364: add r3, r3, 0x1 - bl sub_82DF758 + bl SoundMainRAM_Unk2 sub r1, r1, r0 _081DD370: adds r5, r5, 0x40000000 @@ -565,10 +566,10 @@ _081DD3B0: b _081DD3B0 _081DD3C0: sub r3, r3, 0x1 - bl sub_82DF758 + bl SoundMainRAM_Unk2 mov r0, r1 sub r3, r3, 0x1 - bl sub_82DF758 + bl SoundMainRAM_Unk2 sub r1, r1, r0 _081DD3D8: ldr r6, [r5] @@ -594,11 +595,11 @@ _081DD3E0: b _081DD434 _081DD428: sub r3, r3, lr - bl sub_82DF758 + bl SoundMainRAM_Unk2 mov r0, r1 _081DD434: sub r3, r3, 0x1 - bl sub_82DF758 + bl SoundMainRAM_Unk2 sub r1, r1, r0 _081DD440: adds r5, r5, 0x40000000 @@ -663,10 +664,11 @@ _081DD4F4: str r7, [r5, 0x630] str r6, [r5], 0x4 pop {r8,r12,pc} - arm_func_end sub_82DF49C + arm_func_end SoundMainRAM_Unk1 - arm_func_start sub_82DF758 -sub_82DF758: +@ Not present in GBA SDK 3.0 + arm_func_start SoundMainRAM_Unk2 +SoundMainRAM_Unk2: push {r0,r2,r5-r7,lr} mov r0, r3, lsr 6 ldr r1, [r4, o_SoundChannel_xpi] @@ -704,7 +706,7 @@ _081DD594: ldrsb r1, [r5, r0] pop {r0,r2,r5-r7,pc} .pool - arm_func_end sub_82DF758 + arm_func_end SoundMainRAM_Unk2 thumb_func_start SoundMainBTM SoundMainBTM: diff --git a/src/main.c b/src/main.c index 215f85c468..2b96a8698c 100644 --- a/src/main.c +++ b/src/main.c @@ -172,8 +172,8 @@ static void InitMainCallbacks(void) gMain.vblankCounter2 = 0; gMain.callback1 = NULL; SetMainCallback2(CB2_InitCopyrightScreenAfterBootup); - gSaveBlock2Ptr = &gSaveblock2; - gPokemonStoragePtr = &gPokemonStorage; + gSaveBlock2Ptr = &gSaveblock2.block; + gPokemonStoragePtr = &gPokemonStorage.block; } static void CallCallbacks(void) diff --git a/src/match_call.c b/src/match_call.c index 9e4659ee60..85df5822d2 100644 --- a/src/match_call.c +++ b/src/match_call.c @@ -1187,10 +1187,10 @@ static void StartMatchCall(void) CreateTask(ExecuteMatchCall, 1); } -static const u16 sMatchCallWindow_Pal[] = INCBIN_U16("graphics/pokenav/match_call_window.gbapal"); -static const u8 sMatchCallWindow_Gfx[] = INCBIN_U8("graphics/pokenav/match_call_window.4bpp"); -static const u16 sPokenavIcon_Pal[] = INCBIN_U16("graphics/pokenav/icon.gbapal"); -static const u32 sPokenavIcon_Gfx[] = INCBIN_U32("graphics/pokenav/icon.4bpp.lz"); +static const u16 sMatchCallWindow_Pal[] = INCBIN_U16("graphics/pokenav/match_call/window.gbapal"); +static const u8 sMatchCallWindow_Gfx[] = INCBIN_U8("graphics/pokenav/match_call/window.4bpp"); +static const u16 sPokenavIcon_Pal[] = INCBIN_U16("graphics/pokenav/match_call/nav_icon.gbapal"); +static const u32 sPokenavIcon_Gfx[] = INCBIN_U32("graphics/pokenav/match_call/nav_icon.4bpp.lz"); static const u8 sText_PokenavCallEllipsis[] = _("………………\p"); @@ -1499,7 +1499,7 @@ bool32 SelectMatchCallMessage(int trainerId, u8 *str) { u32 matchCallId; const struct MatchCallText *matchCallText; - bool32 retVal = FALSE; + bool32 newRematchRequest = FALSE; matchCallId = GetTrainerMatchCallId(trainerId); sBattleFrontierStreakInfo.facilityId = 0; @@ -1517,7 +1517,7 @@ bool32 SelectMatchCallMessage(int trainerId, u8 *str) else if (ShouldTrainerRequestBattle(matchCallId)) { matchCallText = GetDifferentRouteMatchCallText(matchCallId, str); - retVal = TRUE; + newRematchRequest = TRUE; UpdateRematchIfDefeated(matchCallId); } else if (Random() % 3) @@ -1532,7 +1532,7 @@ bool32 SelectMatchCallMessage(int trainerId, u8 *str) } BuildMatchCallString(matchCallId, matchCallText, str); - return retVal; + return newRematchRequest; } static int GetTrainerMatchCallId(int trainerId) diff --git a/src/menu_specialized.c b/src/menu_specialized.c index 3a6a60885d..20d67ca7f9 100644 --- a/src/menu_specialized.c +++ b/src/menu_specialized.c @@ -31,14 +31,14 @@ extern const struct CompressedSpriteSheet gMonFrontPicTable[]; EWRAM_DATA static u8 sMailboxWindowIds[MAILBOXWIN_COUNT] = {0}; EWRAM_DATA static struct ListMenuItem *sMailboxList = NULL; -static void MailboxMenu_MoveCursorFunc(s32 itemIndex, bool8 onInit, struct ListMenu *list); -static void sub_81D24A4(struct ConditionGraph *a0); -static void sub_81D2634(struct ConditionGraph *a0); -static void MoveRelearnerCursorCallback(s32 itemIndex, bool8 onInit, struct ListMenu *list); -static void nullsub_79(void); -static void SetNextConditionSparkle(struct Sprite *sprite); -static void SpriteCB_ConditionSparkle(struct Sprite *sprite); -static void ShowAllConditionSparkles(struct Sprite *sprite); +static void MailboxMenu_MoveCursorFunc(s32, bool8, struct ListMenu *); +static void ConditionGraph_CalcRightHalf(struct ConditionGraph *); +static void ConditionGraph_CalcLeftHalf(struct ConditionGraph *); +static void MoveRelearnerCursorCallback(s32, bool8, struct ListMenu *); +static void MoveRelearnerDummy(void); +static void SetNextConditionSparkle(struct Sprite *); +static void SpriteCB_ConditionSparkle(struct Sprite *); +static void ShowAllConditionSparkles(struct Sprite *); static const struct WindowTemplate sWindowTemplates_MailboxMenu[MAILBOXWIN_COUNT] = { @@ -80,46 +80,29 @@ static const u8 sEmptyItemName[] = _(""); static const struct ScanlineEffectParams sConditionGraphScanline = { - .dmaDest = (void*)REG_ADDR_WIN0H, + .dmaDest = ®_WIN0H, .dmaControl = SCANLINE_EFFECT_DMACNT_32BIT, .initState = 1, }; -static const u8 sUnknown_08625410[] = +static const u8 sConditionToLineLength[MAX_CONDITION + 1] = { - 4, - 5, - 6, - 7, - 8, - 9, 9, - 10, 10, - 0xB, 0xB, - 0xC, 0xC, - 0xD, 0xD, - 0xD, 0xD, - 0xE, 0xE, 0xE, 0xE, - 0xF, 0xF, 0xF, 0xF, - 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, - 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, - 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, - 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, - 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, - 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, - 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, - 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, - 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, - 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, - 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, - 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, - 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, - 0x1D, 0x1D, 0x1D, 0x1D, 0x1D, 0x1D, 0x1D, 0x1D, 0x1D, 0x1D, 0x1D, 0x1D, 0x1D, 0x1D, 0x1D, 0x1D, - 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, - 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, - 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, - 0x23 + 4, 5, 6, 7, 8, 9, 9, 10, 10, 11, 11, 12, 12, 13, 13, 13, + 13, 14, 14, 14, 14, 15, 15, 15, 15, 16, 16, 16, 16, 16, 16, 17, + 17, 17, 17, 17, 17, 18, 18, 18, 18, 18, 18, 19, 19, 19, 19, 19, + 19, 19, 19, 20, 20, 20, 20, 20, 20, 20, 20, 21, 21, 21, 21, 21, + 21, 21, 21, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 23, 23, 23, + 23, 23, 23, 23, 23, 23, 23, 24, 24, 24, 24, 24, 24, 24, 24, 24, + 24, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 27, 27, 27, 27, 27, 27, 27, + 27, 27, 27, 27, 27, 27, 27, 28, 28, 28, 28, 28, 28, 28, 28, 28, + 28, 28, 28, 28, 28, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, + 29, 29, 29, 29, 29, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, + 30, 30, 30, 30, 30, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, + 31, 31, 31, 31, 31, 31, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, + 32, 32, 32, 32, 32, 32, 32, 32, 33, 33, 33, 33, 33, 33, 33, 33, + 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 34, 34, 34, 34, 34, + 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 35 }; @@ -207,6 +190,10 @@ static const struct ListMenuTemplate sMoveRelearnerMovesListTemplate = .cursorKind = 0 }; +//-------------- +// Mailbox menu +//-------------- + bool8 MailboxMenu_Alloc(u8 count) { u8 i; @@ -320,67 +307,83 @@ void MailboxMenu_Free(void) Free(sMailboxList); } -void InitConditionGraphData(struct ConditionGraph *graph) +//--------------------------------------- +// Condition graph +// +// This is the graph in the Pokénav and +// Pokéblock case that shows a Pokémon's +// conditions (Beauty, Tough, etc.). +// It works by using scanlines to +// selectively reveal a bg that has been +// filled with the graph color. +//--------------------------------------- + +#define SHIFT_RIGHT_ADJUSTED(n, s)(((n) >> (s)) + (((n) >> ((s) - 1)) & 1)) + +void ConditionGraph_Init(struct ConditionGraph *graph) { u8 i, j; - for (j = 0; j < FLAVOR_COUNT; j++) + for (j = 0; j < CONDITION_COUNT; j++) { - for (i = 0; i < 10; i++) + for (i = 0; i < CONDITION_GRAPH_UPDATE_STEPS; i++) { - graph->unk64[i][j].unk0 = 0; - graph->unk64[i][j].unk2 = 0; - } - for (i = 0; i < 4; i++) - { - graph->stat[i][j] = 0; - graph->unk14[i][j].unk0 = 155; - graph->unk14[i][j].unk2 = 91; + graph->newPositions[i][j].x = 0; + graph->newPositions[i][j].y = 0; } - graph->unk12C[j].unk0 = 0; - graph->unk12C[j].unk2 = 0; + for (i = 0; i < CONDITION_GRAPH_LOAD_MAX; i++) + { + graph->conditions[i][j] = 0; + graph->savedPositions[i][j].x = CONDITION_GRAPH_CENTER_X; + graph->savedPositions[i][j].y = CONDITION_GRAPH_CENTER_Y; + } + + graph->curPositions[j].x = 0; + graph->curPositions[j].y = 0; } - graph->unk354 = 0; - graph->unk352 = 0; + graph->needsDraw = FALSE; + graph->updateCounter = 0; } -void sub_81D1F84(struct ConditionGraph *graph, struct UnknownSubStruct_81D1ED4 *arg1, struct UnknownSubStruct_81D1ED4 *arg2) +// Fills the newPositions array with incremental positions between +// old and new for the graph transition when switching between Pokémon. +void ConditionGraph_SetNewPositions(struct ConditionGraph *graph, struct UCoords16 *old, struct UCoords16 *new) { u16 i, j; - s32 r5, r6; + s32 coord, increment; - for (i = 0; i < FLAVOR_COUNT; i++) + for (i = 0; i < CONDITION_COUNT; i++) { - r5 = arg1[i].unk0 << 8; - r6 = ((arg2[i].unk0 - arg1[i].unk0) << 8) / 10; - for (j = 0; j < 9; j++) + coord = old[i].x << 8; + increment = ((new[i].x - old[i].x) << 8) / CONDITION_GRAPH_UPDATE_STEPS; + for (j = 0; j < CONDITION_GRAPH_UPDATE_STEPS - 1; j++) { - graph->unk64[j][i].unk0 = (r5 >> 8) + ((r5 >> 7) & 1); - r5 += r6; + graph->newPositions[j][i].x = SHIFT_RIGHT_ADJUSTED(coord, 8); + coord += increment; } - graph->unk64[j][i].unk0 = arg2[i].unk0; + graph->newPositions[j][i].x = new[i].x; - r5 = arg1[i].unk2 << 8; - r6 = ((arg2[i].unk2 - arg1[i].unk2) << 8) / 10; - for (j = 0; j < 9; j++) + coord = old[i].y << 8; + increment = ((new[i].y - old[i].y) << 8) / CONDITION_GRAPH_UPDATE_STEPS; + for (j = 0; j < CONDITION_GRAPH_UPDATE_STEPS - 1; j++) { - graph->unk64[j][i].unk2 = (r5 >> 8) + ((r5 >> 7) & 1); - r5 += r6; + graph->newPositions[j][i].y = SHIFT_RIGHT_ADJUSTED(coord, 8); + coord += increment; } - graph->unk64[j][i].unk2 = arg2[i].unk2; + graph->newPositions[j][i].y = new[i].y; } - graph->unk352 = 0; + graph->updateCounter = 0; } -bool32 TransitionConditionGraph(struct ConditionGraph *graph) +bool8 ConditionGraph_TryUpdate(struct ConditionGraph *graph) { - if (graph->unk352 < 10) + if (graph->updateCounter < CONDITION_GRAPH_UPDATE_STEPS) { - sub_81D2230(graph); - return (++graph->unk352 != 10); + ConditionGraph_Update(graph); + return (++graph->updateCounter != CONDITION_GRAPH_UPDATE_STEPS); } else { @@ -388,294 +391,316 @@ bool32 TransitionConditionGraph(struct ConditionGraph *graph) } } -void InitConditionGraphState(struct ConditionGraph *graph) +void ConditionGraph_InitResetScanline(struct ConditionGraph *graph) { - graph->state = 0; + graph->scanlineResetState = 0; } -bool8 SetupConditionGraphScanlineParams(struct ConditionGraph *graph) +bool8 ConditionGraph_ResetScanline(struct ConditionGraph *graph) { struct ScanlineEffectParams params; - switch (graph->state) + switch (graph->scanlineResetState) { case 0: ScanlineEffect_Clear(); - graph->state++; + graph->scanlineResetState++; return TRUE; case 1: params = sConditionGraphScanline; ScanlineEffect_SetParams(params); - graph->state++; + graph->scanlineResetState++; return FALSE; default: return FALSE; } } -void sub_81D2108(struct ConditionGraph *graph) +void ConditionGraph_Draw(struct ConditionGraph *graph) { u16 i; - if (graph->unk354 == 0) + if (!graph->needsDraw) return; - sub_81D24A4(graph); - sub_81D2634(graph); + ConditionGraph_CalcRightHalf(graph); + ConditionGraph_CalcLeftHalf(graph); - for (i = 0; i < 66; i++) + for (i = 0; i < CONDITION_GRAPH_HEIGHT; i++) { - gScanlineEffectRegBuffers[1][(i + 55) * 2] = gScanlineEffectRegBuffers[0][(i + 55) * 2] = (graph->unk140[i][0] << 8) | (graph->unk140[i][1]); - gScanlineEffectRegBuffers[1][(i + 55) * 2 + 1] = gScanlineEffectRegBuffers[0][(i + 55) * 2 + 1] = (graph->unk248[i][0] << 8) | (graph->unk248[i][1]); + // Draw right half + gScanlineEffectRegBuffers[1][(i + CONDITION_GRAPH_TOP_Y - 1) * 2 + 0] = // double assignment + gScanlineEffectRegBuffers[0][(i + CONDITION_GRAPH_TOP_Y - 1) * 2 + 0] = (graph->scanlineRight[i][0] << 8) | (graph->scanlineRight[i][1]); + // Draw left half + gScanlineEffectRegBuffers[1][(i + CONDITION_GRAPH_TOP_Y - 1) * 2 + 1] = // double assignment + gScanlineEffectRegBuffers[0][(i + CONDITION_GRAPH_TOP_Y - 1) * 2 + 1] = (graph->scanlineLeft[i][0] << 8) | (graph->scanlineLeft[i][1]); } - graph->unk354 = 0; + graph->needsDraw = FALSE; } -void SetConditionGraphIOWindows(u8 bg) +void ConditionGraph_InitWindow(u8 bg) { u32 flags; - if (bg > 3) + if (bg >= NUM_BACKGROUNDS) bg = 0; // Unset the WINOUT flag for the bg. flags = (WINOUT_WIN01_BG_ALL | WINOUT_WIN01_OBJ) & ~(1 << bg); - SetGpuReg(REG_OFFSET_WIN0H, WIN_RANGE( 0, DISPLAY_WIDTH)); - SetGpuReg(REG_OFFSET_WIN1H, WIN_RANGE( 0, 155)); - SetGpuReg(REG_OFFSET_WIN0V, WIN_RANGE(56, 121)); - SetGpuReg(REG_OFFSET_WIN1V, WIN_RANGE(56, 121)); + // Set limits for graph data + SetGpuReg(REG_OFFSET_WIN0H, WIN_RANGE( 0, DISPLAY_WIDTH)); // Right side horizontal + SetGpuReg(REG_OFFSET_WIN1H, WIN_RANGE( 0, CONDITION_GRAPH_CENTER_X)); // Left side horizontal + SetGpuReg(REG_OFFSET_WIN0V, WIN_RANGE(CONDITION_GRAPH_TOP_Y, CONDITION_GRAPH_BOTTOM_Y)); // Right side vertical + SetGpuReg(REG_OFFSET_WIN1V, WIN_RANGE(CONDITION_GRAPH_TOP_Y, CONDITION_GRAPH_BOTTOM_Y)); // Left side vertical SetGpuReg(REG_OFFSET_WININ, WININ_WIN0_BG_ALL | WININ_WIN0_OBJ | WININ_WIN0_CLR | WININ_WIN1_BG_ALL | WININ_WIN1_OBJ | WININ_WIN1_CLR); SetGpuReg(REG_OFFSET_WINOUT, flags); } -void sub_81D2230(struct ConditionGraph *graph) +void ConditionGraph_Update(struct ConditionGraph *graph) { u16 i; - for (i = 0; i < FLAVOR_COUNT; i++) - graph->unk12C[i] = graph->unk64[graph->unk352][i]; + for (i = 0; i < CONDITION_COUNT; i++) + graph->curPositions[i] = graph->newPositions[graph->updateCounter][i]; - graph->unk354 = 1; + graph->needsDraw = TRUE; } -static void sub_81D2278(struct ConditionGraph *graph, u16 *arg1, struct UnknownSubStruct_81D1ED4 *arg2, struct UnknownSubStruct_81D1ED4 *arg3, u8 arg4, u16 *arg5) +static void ConditionGraph_CalcLine(struct ConditionGraph *graph, u16 *scanline, struct UCoords16 *pos1, struct UCoords16 *pos2, bool8 dir, u16 *overflowScanline) { - u16 i, r8, r10, r0, var_30; + u16 i, height, top, bottom, x2; u16 *ptr; - s32 r4, var_2C; + s32 x, xIncrement = 0; - var_2C = 0; - if (arg2->unk2 < arg3->unk2) + if (pos1->y < pos2->y) { - r10 = arg2->unk2; - r0 = arg3->unk2; - r4 = arg2->unk0 << 10; - var_30 = arg3->unk0; - r8 = r0 - r10; - if (r8 != 0) - var_2C = ((var_30 - arg2->unk0) << 10) / r8; + top = pos1->y; + bottom = pos2->y; + x = pos1->x << 10; + x2 = pos2->x; + height = bottom - top; + if (height != 0) + xIncrement = ((x2 - pos1->x) << 10) / height; } else { - r0 = arg2->unk2; - r10 = arg3->unk2; - r4 = arg3->unk0 << 10; - var_30 = arg2->unk0; - r8 = r0 - r10; - if (r8 != 0) - var_2C = ((var_30 - arg3->unk0) << 10) / r8; + bottom = pos1->y; + top = pos2->y; + x = pos2->x << 10; + x2 = pos1->x; + height = bottom - top; + if (height != 0) + xIncrement = ((x2 - pos2->x) << 10) / height; } - r8++; - if (arg5 == NULL) + height++; + if (overflowScanline == NULL) { - arg1 += (r10 - 56) * 2; - for (i = 0; i < r8; i++) + scanline += (top - CONDITION_GRAPH_TOP_Y) * 2; + for (i = 0; i < height; i++) { - arg1[arg4] = (r4 >> 10) + ((r4 >> 9) & 1) + arg4; - r4 += var_2C; - arg1 += 2; + scanline[dir] = SHIFT_RIGHT_ADJUSTED(x, 10) + dir; + x += xIncrement; + scanline += 2; } - ptr = arg1 - 2; + ptr = scanline - 2; } - else if (var_2C > 0) + else if (xIncrement > 0) { - arg5 += (r10 - 56) * 2; + overflowScanline += (top - CONDITION_GRAPH_TOP_Y) * 2; // Less readable than the other loops, but it has to be written this way to match. - for (i = 0; i < r8; arg5[arg4] = (r4 >> 10) + ((r4 >> 9) & 1) + arg4, r4 += var_2C, arg5 += 2, i++) + for (i = 0; i < height; overflowScanline[dir] = SHIFT_RIGHT_ADJUSTED(x, 10) + dir, x += xIncrement, overflowScanline += 2, i++) { - if (r4 >= (155 << 10)) + if (x >= (CONDITION_GRAPH_CENTER_X << 10)) break; } - graph->unk350 = r10 + i; - arg1 += (graph->unk350 - 56) * 2; - for (; i < r8; i++) + graph->bottom = top + i; + scanline += (graph->bottom - CONDITION_GRAPH_TOP_Y) * 2; + for (; i < height; i++) { - arg1[arg4] = (r4 >> 10) + ((r4 >> 9) & 1) + arg4; - r4 += var_2C; - arg1 += 2; + scanline[dir] = SHIFT_RIGHT_ADJUSTED(x, 10) + dir; + x += xIncrement; + scanline += 2; } - ptr = arg1 - 2; + ptr = scanline - 2; } - else if (var_2C < 0) + else if (xIncrement < 0) { - arg1 += (r10 - 56) * 2; - for (i = 0; i < r8; i++) + scanline += (top - CONDITION_GRAPH_TOP_Y) * 2; + for (i = 0; i < height; i++) { - arg1[arg4] = (r4 >> 10) + ((r4 >> 9) & 1) + arg4; - if (r4 < (155 << 10)) + scanline[dir] = SHIFT_RIGHT_ADJUSTED(x, 10) + dir; + if (x < (CONDITION_GRAPH_CENTER_X << 10)) { - arg1[arg4] = 155; + scanline[dir] = CONDITION_GRAPH_CENTER_X; break; } - r4 += var_2C; - arg1 += 2; + x += xIncrement; + scanline += 2; } - graph->unk350 = r10 + i; - arg5 += (graph->unk350 - 56) * 2; - for (; i < r8; i++) + graph->bottom = top + i; + overflowScanline += (graph->bottom - CONDITION_GRAPH_TOP_Y) * 2; + for (; i < height; i++) { - arg5[arg4] = (r4 >> 10) + ((r4 >> 9) & 1) + arg4; - r4 += var_2C; - arg5 += 2; + overflowScanline[dir] = SHIFT_RIGHT_ADJUSTED(x, 10) + dir; + x += xIncrement; + overflowScanline += 2; } - ptr = arg5 - 2; + ptr = overflowScanline - 2; } else { - graph->unk350 = r10; - arg1 += (r10 - 56) * 2; - arg5 += (r10 - 56) * 2; - arg1[1] = arg2->unk0 + 1; - arg5[0] = arg3->unk0; - arg5[1] = 155; + graph->bottom = top; + scanline += (top - CONDITION_GRAPH_TOP_Y) * 2; + overflowScanline += (top - CONDITION_GRAPH_TOP_Y) * 2; + scanline[1] = pos1->x + 1; + overflowScanline[0] = pos2->x; + overflowScanline[1] = CONDITION_GRAPH_CENTER_X; return; } - ptr[arg4] = arg4 + var_30; + ptr[dir] = dir + x2; } -static void sub_81D24A4(struct ConditionGraph *graph) +static void ConditionGraph_CalcRightHalf(struct ConditionGraph *graph) { - u16 i, r6, varMax; + u16 i, y, bottom; - if (graph->unk12C[0].unk2 < graph->unk12C[1].unk2) + // Calculate Cool -> Beauty line + if (graph->curPositions[GRAPH_COOL].y < graph->curPositions[GRAPH_BEAUTY].y) { - r6 = graph->unk12C[0].unk2; - sub_81D2278(graph, graph->unk140[0], &graph->unk12C[0], &graph->unk12C[1], 1, NULL); + y = graph->curPositions[GRAPH_COOL].y; + ConditionGraph_CalcLine(graph, graph->scanlineRight[0], &graph->curPositions[GRAPH_COOL], &graph->curPositions[GRAPH_BEAUTY], TRUE, NULL); } else { - r6 = graph->unk12C[1].unk2; - sub_81D2278(graph, graph->unk140[0], &graph->unk12C[1], &graph->unk12C[0], 0, NULL); + y = graph->curPositions[GRAPH_BEAUTY].y; + ConditionGraph_CalcLine(graph, graph->scanlineRight[0], &graph->curPositions[GRAPH_BEAUTY], &graph->curPositions[GRAPH_COOL], FALSE, NULL); } - sub_81D2278(graph, graph->unk140[0], &graph->unk12C[1], &graph->unk12C[2], 1, NULL); + // Calculate Beauty -> Cute line + // No need for conditional, positions on the Beauty line are always above the Cute line + ConditionGraph_CalcLine(graph, graph->scanlineRight[0], &graph->curPositions[GRAPH_BEAUTY], &graph->curPositions[GRAPH_CUTE], TRUE, NULL); - i = (graph->unk12C[2].unk2 <= graph->unk12C[3].unk2); - sub_81D2278(graph, graph->unk140[0], &graph->unk12C[2], &graph->unk12C[3], i, graph->unk248[0]); - for (i = 56; i < r6; i++) + // Calculate Cute -> Tough line (includes left scanline because this crosses the halfway point) + i = (graph->curPositions[GRAPH_CUTE].y <= graph->curPositions[GRAPH_SMART].y); + ConditionGraph_CalcLine(graph, graph->scanlineRight[0], &graph->curPositions[GRAPH_CUTE], &graph->curPositions[GRAPH_SMART], i, graph->scanlineLeft[0]); + + // Clear down to new top + for (i = CONDITION_GRAPH_TOP_Y; i < y; i++) { - graph->unk140[i - 56][0] = 0; - graph->unk140[i - 56][1] = 0; + graph->scanlineRight[i - CONDITION_GRAPH_TOP_Y][0] = 0; + graph->scanlineRight[i - CONDITION_GRAPH_TOP_Y][1] = 0; } - for (i = graph->unk12C[0].unk2; i <= graph->unk350; i++) - graph->unk140[i - 56][0] = 155; + for (i = graph->curPositions[GRAPH_COOL].y; i <= graph->bottom; i++) + graph->scanlineRight[i - CONDITION_GRAPH_TOP_Y][0] = CONDITION_GRAPH_CENTER_X; - varMax = max(graph->unk350, graph->unk12C[2].unk2); - for (i = varMax + 1; i < 122; i++) + // Clear after new bottom + bottom = max(graph->bottom, graph->curPositions[GRAPH_CUTE].y); + for (i = bottom + 1; i <= CONDITION_GRAPH_BOTTOM_Y; i++) { - graph->unk140[i - 56][0] = 0; - graph->unk140[i - 56][1] = 0; + graph->scanlineRight[i - CONDITION_GRAPH_TOP_Y][0] = 0; + graph->scanlineRight[i - CONDITION_GRAPH_TOP_Y][1] = 0; } - for (i = 56; i < 122; i++) + for (i = CONDITION_GRAPH_TOP_Y; i <= CONDITION_GRAPH_BOTTOM_Y; i++) { - if (graph->unk140[i - 56][0] == 0 && graph->unk140[i - 56][1] != 0) - graph->unk140[i - 56][0] = 155; + if (graph->scanlineRight[i - CONDITION_GRAPH_TOP_Y][0] == 0 + && graph->scanlineRight[i - CONDITION_GRAPH_TOP_Y][1] != 0) + graph->scanlineRight[i - CONDITION_GRAPH_TOP_Y][0] = CONDITION_GRAPH_CENTER_X; } } -static void sub_81D2634(struct ConditionGraph *graph) +static void ConditionGraph_CalcLeftHalf(struct ConditionGraph *graph) { - s32 i, r6, varMax; + s32 i, y, bottom; - if (graph->unk12C[0].unk2 < graph->unk12C[4].unk2) + // Calculate Cool -> Tough line + if (graph->curPositions[GRAPH_COOL].y < graph->curPositions[GRAPH_TOUGH].y) { - r6 = graph->unk12C[0].unk2; - sub_81D2278(graph, graph->unk248[0], &graph->unk12C[0], &graph->unk12C[4], 0, NULL); + y = graph->curPositions[GRAPH_COOL].y; + ConditionGraph_CalcLine(graph, graph->scanlineLeft[0], &graph->curPositions[GRAPH_COOL], &graph->curPositions[GRAPH_TOUGH], FALSE, NULL); } else { - r6 = graph->unk12C[4].unk2; - sub_81D2278(graph, graph->unk248[0], &graph->unk12C[4], &graph->unk12C[0], 1, NULL); + y = graph->curPositions[GRAPH_TOUGH].y; + ConditionGraph_CalcLine(graph, graph->scanlineLeft[0], &graph->curPositions[GRAPH_TOUGH], &graph->curPositions[GRAPH_COOL], TRUE, NULL); } - sub_81D2278(graph, graph->unk248[0], &graph->unk12C[4], &graph->unk12C[3], 0, NULL); + // Calculate Tough -> Smart line + // No need for conditional, positions on the Tough line are always above the Smart line + ConditionGraph_CalcLine(graph, graph->scanlineLeft[0], &graph->curPositions[GRAPH_TOUGH], &graph->curPositions[GRAPH_SMART], FALSE, NULL); - for (i = 56; i < r6; i++) + // Clear down to new top + for (i = CONDITION_GRAPH_TOP_Y; i < y; i++) { - graph->unk140[i + 10][0] = 0; - graph->unk140[i + 10][1] = 0; + graph->scanlineLeft[i - CONDITION_GRAPH_TOP_Y][0] = 0; + graph->scanlineLeft[i - CONDITION_GRAPH_TOP_Y][1] = 0; } - for (i = graph->unk12C[0].unk2; i <= graph->unk350; i++) - graph->unk140[i + 10][1] = 155; + for (i = graph->curPositions[GRAPH_COOL].y; i <= graph->bottom; i++) + graph->scanlineLeft[i - CONDITION_GRAPH_TOP_Y][1] = CONDITION_GRAPH_CENTER_X; - varMax = max(graph->unk350, graph->unk12C[3].unk2 + 1); - for (i = varMax; i < 122; i++) + // Clear after new bottom + bottom = max(graph->bottom, graph->curPositions[GRAPH_SMART].y + 1); + for (i = bottom; i <= CONDITION_GRAPH_BOTTOM_Y; i++) { - graph->unk140[i + 10][0] = 0; - graph->unk140[i + 10][1] = 0; + graph->scanlineLeft[i - CONDITION_GRAPH_TOP_Y][0] = 0; + graph->scanlineLeft[i - CONDITION_GRAPH_TOP_Y][1] = 0; } - for (i = 0; i < 66; i++) + for (i = 0; i < CONDITION_GRAPH_HEIGHT; i++) { - if (graph->unk248[i][0] >= graph->unk248[i][1]) + if (graph->scanlineLeft[i][0] >= graph->scanlineLeft[i][1]) { - graph->unk248[i][1] = 0; - graph->unk248[i][0] = 0; + graph->scanlineLeft[i][1] = 0; + graph->scanlineLeft[i][0] = 0; } } } -void sub_81D2754(u8 *arg0, struct UnknownSubStruct_81D1ED4 *arg1) +void ConditionGraph_CalcPositions(u8 *conditions, struct UCoords16 *positions) { - u8 r2, r7; - s8 r12; + u8 lineLength, sinIdx; + s8 posIdx; u16 i; - r2 = sUnknown_08625410[*(arg0++)]; - arg1->unk0 = 155; - arg1->unk2 = 91 - r2; + // Cool is straight up-and-down (not angled), so no need for Sin + lineLength = sConditionToLineLength[*(conditions++)]; + positions[GRAPH_COOL].x = CONDITION_GRAPH_CENTER_X; + positions[GRAPH_COOL].y = CONDITION_GRAPH_CENTER_Y - lineLength; - r7 = 64; - r12 = 0; - for (i = 1; i < 5; i++) + sinIdx = 64; + posIdx = GRAPH_COOL; + for (i = 1; i < CONDITION_COUNT; i++) { - r7 += 51; - if (--r12 < 0) - r12 = 4; + sinIdx += 51; + if (--posIdx < 0) + posIdx = CONDITION_COUNT - 1; - if (r12 == 2) - r7++; + if (posIdx == GRAPH_CUTE) + sinIdx++; - r2 = sUnknown_08625410[*(arg0++)]; - arg1[r12].unk0 = 155 + ((r2 * gSineTable[64 + r7]) >> 8); - arg1[r12].unk2 = 91 - ((r2 * gSineTable[r7]) >> 8); + lineLength = sConditionToLineLength[*(conditions++)]; + positions[posIdx].x = CONDITION_GRAPH_CENTER_X + ((lineLength * gSineTable[64 + sinIdx]) >> 8); + positions[posIdx].y = CONDITION_GRAPH_CENTER_Y - ((lineLength * gSineTable[sinIdx]) >> 8); - if (r12 < 3 && (r2 != 32 || r12 != 2)) - arg1[r12].unk0 = 156 + ((r2 * gSineTable[64 + r7]) >> 8); + if (posIdx <= GRAPH_CUTE && (lineLength != 32 || posIdx != GRAPH_CUTE)) + positions[posIdx].x++; } } +//---------------- +// Move relearner +//---------------- + void InitMoveRelearnerWindows(bool8 useContextWindow) { u8 i; @@ -685,10 +710,8 @@ void InitMoveRelearnerWindows(bool8 useContextWindow) LoadUserWindowBorderGfx(0, 1, 0xE0); LoadPalette(gStandardMenuPalette, 0xF0, 0x20); - for (i = 0; i < 5; i++) - { + for (i = 0; i < ARRAY_COUNT(sMoveRelearnerWindowTemplates) - 1; i++) FillWindowPixelBuffer(i, PIXEL_FILL(1)); - } if (!useContextWindow) { @@ -704,11 +727,11 @@ void InitMoveRelearnerWindows(bool8 useContextWindow) PutWindowTilemap(3); DrawStdFrameWithCustomTileAndPalette(2, 0, 1, 0xE); DrawStdFrameWithCustomTileAndPalette(3, 0, 1, 0xE); - nullsub_79(); + MoveRelearnerDummy(); ScheduleBgCopyTilemapToVram(1); } -static void nullsub_79(void) +static void MoveRelearnerDummy(void) { } @@ -720,13 +743,10 @@ u8 LoadMoveRelearnerMovesList(const struct ListMenuItem *items, u16 numChoices) gMultiuseListMenuTemplate.items = items; if (numChoices < 6) - { gMultiuseListMenuTemplate.maxShowed = numChoices; - } else - { gMultiuseListMenuTemplate.maxShowed = 6; - } + return gMultiuseListMenuTemplate.maxShowed; } @@ -734,7 +754,7 @@ static void MoveRelearnerLoadBattleMoveDescription(u32 chosenMove) { s32 x; const struct BattleMove *move; - u8 buffer[0x20]; + u8 buffer[32]; const u8 *str; FillWindowPixelBuffer(0, PIXEL_FILL(1)); @@ -856,6 +876,10 @@ void MoveRelearnerCreateYesNoMenu(void) CreateYesNoMenu(&sMoveRelearnerYesNoMenuTemplate, 1, 0xE, 0); } +//---------------- +// Condition menu +//---------------- + s32 GetBoxOrPartyMonData(u16 boxId, u16 monId, s32 request, u8 *dst) { s32 ret; @@ -1010,7 +1034,7 @@ void GetConditionMenuMonNameAndLocString(u8 *locationDst, u8 *nameDst, u16 boxId } } -void GetConditionMenuMonConditions(struct ConditionGraph *graph, u8 *sheen, u16 boxId, u16 monId, u16 partyId, u16 id, u16 numMons, bool8 excludesCancel) +void GetConditionMenuMonConditions(struct ConditionGraph *graph, u8 *numSparkles, u16 boxId, u16 monId, u16 partyId, u16 id, u16 numMons, bool8 excludesCancel) { u16 i; @@ -1019,25 +1043,23 @@ void GetConditionMenuMonConditions(struct ConditionGraph *graph, u8 *sheen, u16 if (partyId != numMons) { - graph->stat[id][0] = GetBoxOrPartyMonData(boxId, monId, MON_DATA_COOL, NULL); - graph->stat[id][1] = GetBoxOrPartyMonData(boxId, monId, MON_DATA_TOUGH, NULL); - graph->stat[id][2] = GetBoxOrPartyMonData(boxId, monId, MON_DATA_SMART, NULL); - graph->stat[id][3] = GetBoxOrPartyMonData(boxId, monId, MON_DATA_CUTE, NULL); - graph->stat[id][4] = GetBoxOrPartyMonData(boxId, monId, MON_DATA_BEAUTY, NULL); + graph->conditions[id][CONDITION_COOL] = GetBoxOrPartyMonData(boxId, monId, MON_DATA_COOL, NULL); + graph->conditions[id][CONDITION_TOUGH] = GetBoxOrPartyMonData(boxId, monId, MON_DATA_TOUGH, NULL); + graph->conditions[id][CONDITION_SMART] = GetBoxOrPartyMonData(boxId, monId, MON_DATA_SMART, NULL); + graph->conditions[id][CONDITION_CUTE] = GetBoxOrPartyMonData(boxId, monId, MON_DATA_CUTE, NULL); + graph->conditions[id][CONDITION_BEAUTY] = GetBoxOrPartyMonData(boxId, monId, MON_DATA_BEAUTY, NULL); - sheen[id] = (GetBoxOrPartyMonData(boxId, monId, MON_DATA_SHEEN, NULL) != 0xFF) - ? GetBoxOrPartyMonData(boxId, monId, MON_DATA_SHEEN, NULL) / 29u - : 9; + numSparkles[id] = GET_NUM_CONDITION_SPARKLES(GetBoxOrPartyMonData(boxId, monId, MON_DATA_SHEEN, NULL)); - sub_81D2754(graph->stat[id], graph->unk14[id]); + ConditionGraph_CalcPositions(graph->conditions[id], graph->savedPositions[id]); } else { - for (i = 0; i < FLAVOR_COUNT; i++) + for (i = 0; i < CONDITION_COUNT; i++) { - graph->stat[id][i] = 0; - graph->unk14[id][i].unk0 = 155; - graph->unk14[id][i].unk2 = 91; + graph->conditions[id][i] = 0; + graph->savedPositions[id][i].x = CONDITION_GRAPH_CENTER_X; + graph->savedPositions[id][i].y = CONDITION_GRAPH_CENTER_Y; } } } @@ -1076,17 +1098,17 @@ bool8 MoveConditionMonOffscreen(s16 *x) return (*x != -80); } -bool8 TryUpdateConditionMonTransitionOn(struct ConditionGraph *graph, s16 *x) +bool8 ConditionMenu_UpdateMonEnter(struct ConditionGraph *graph, s16 *x) { - bool8 graphUpdating = TransitionConditionGraph(graph); + bool8 graphUpdating = ConditionGraph_TryUpdate(graph); bool8 monUpdating = MoveConditionMonOnscreen(x); return (graphUpdating || monUpdating); } -bool8 TryUpdateConditionMonTransitionOff(struct ConditionGraph *graph, s16 *x) +bool8 ConditionMenu_UpdateMonExit(struct ConditionGraph *graph, s16 *x) { - bool8 graphUpdating = TransitionConditionGraph(graph); + bool8 graphUpdating = ConditionGraph_TryUpdate(graph); bool8 monUpdating = MoveConditionMonOffscreen(x); return (graphUpdating || monUpdating); @@ -1145,8 +1167,8 @@ static const union AnimCmd sAnim_ConditionSelectionIcon_Unselected[] = static const union AnimCmd *const sAnims_ConditionSelectionIcon[] = { - sAnim_ConditionSelectionIcon_Selected, - sAnim_ConditionSelectionIcon_Unselected + [CONDITION_ICON_SELECTED] = sAnim_ConditionSelectionIcon_Selected, + [CONDITION_ICON_UNSELECTED] = sAnim_ConditionSelectionIcon_Unselected }; // Just loads the generic data, up to the caller to load the actual sheet/pal for the specific mon diff --git a/src/multiboot.c b/src/multiboot.c index 19245b5b33..15b062ed65 100644 --- a/src/multiboot.c +++ b/src/multiboot.c @@ -90,7 +90,7 @@ output_burst: k = 0x0e; for (i = MULTIBOOT_NCHILD; i != 0; i--) { - if (*(vu16 *)(REG_ADDR_SIOMULTI0 + i * 2) != 0xffff) + if (REG_SIOMULTI(i) != 0xffff) { break; } @@ -102,7 +102,7 @@ output_burst: for (i = MULTIBOOT_NCHILD; i != 0; i--) { - j = *(vu16 *)(REG_ADDR_SIOMULTI0 + i * 2); + j = REG_SIOMULTI(i); if (mp->client_bit & (1 << i)) { if (j != ((MULTIBOOT_CLIENT_INFO << 8) | (1 << i))) @@ -141,7 +141,7 @@ output_burst: mp->probe_target_bit = 0; for (i = MULTIBOOT_NCHILD; i != 0; i--) { - j = *(vu16 *)(REG_ADDR_SIOMULTI0 + i * 2); + j = REG_SIOMULTI(i); if ((j >> 8) == MULTIBOOT_CLIENT_INFO) { MultiBoot_required_data[i - 1] = j; @@ -166,7 +166,7 @@ output_burst: { if (mp->probe_target_bit & (1 << i)) { - j = *(vu16 *)(REG_ADDR_SIOMULTI0 + i * 2); + j = REG_SIOMULTI(i); if (j != MultiBoot_required_data[i - 1]) { mp->probe_target_bit ^= 1 << i; @@ -179,7 +179,7 @@ output_burst: k = 1; for (i = MULTIBOOT_NCHILD; i != 0; i--) { - j = *(vu16 *)(REG_ADDR_SIOMULTI0 + i * 2); + j = REG_SIOMULTI(i); mp->client_data[i - 1] = j; if (mp->probe_target_bit & (1 << i)) { @@ -214,7 +214,7 @@ output_burst: case 0xd1: for (i = MULTIBOOT_NCHILD; i != 0; i--) { - j = *(vu16 *)(REG_ADDR_SIOMULTI0 + i * 2); + j = REG_SIOMULTI(i); if (mp->probe_target_bit & (1 << i)) { if ((j >> 8) != MULTIBOOT_CLIENT_DLREADY) @@ -242,7 +242,7 @@ output_burst: { if (mp->probe_target_bit & (1 << i)) { - j = *(vu16 *)(REG_ADDR_SIOMULTI0 + i * 2); + j = REG_SIOMULTI(i); if ((j >> 8) != (MULTIBOOT_MASTER_START_PROBE + 1 - (mp->probe_count >> 1)) || ((j & 0xff) != (1 << i))) { @@ -391,7 +391,7 @@ static int MultiBootHandShake(struct MultiBootParam *mp) default: for (i = MULTIBOOT_NCHILD; i != 0; i--) { - j = *(vu16 *)(REG_ADDR_SIOMULTI0 + i * 2); + j = REG_SIOMULTI(i); if ((mp->client_bit & (1 << i)) && j != must_data) { @@ -413,7 +413,7 @@ static int MultiBootHandShake(struct MultiBootParam *mp) case 0xe8: for (i = MULTIBOOT_NCHILD; i != 0; i--) { - j = *(vu16 *)(REG_ADDR_SIOMULTI0 + i * 2); + j = REG_SIOMULTI(i); if ((mp->client_bit & (1 << i)) && j != must_data) { MultiBootInit(mp); diff --git a/src/overworld.c b/src/overworld.c index 08d1241106..6af40be6d5 100644 --- a/src/overworld.c +++ b/src/overworld.c @@ -313,7 +313,7 @@ static const struct BgTemplate sOverworldBgTemplates[] = static const struct ScanlineEffectParams sFlashEffectParams = { - (void *)REG_ADDR_WIN0H, + ®_WIN0H, ((DMA_ENABLE | DMA_START_HBLANK | DMA_REPEAT | DMA_DEST_RELOAD) << 16) | 1, 1, 0, @@ -1257,7 +1257,7 @@ static void PlayAmbientCry(void) return; pan = (Random() % 88) + 212; volume = (Random() % 30) + 50; - PlayCry2(sAmbientCrySpecies, pan, volume, 1); + PlayCry_NormalNoDucking(sAmbientCrySpecies, pan, volume, CRY_PRIORITY_AMBIENT); } void UpdateAmbientCry(s16 *state, u16 *delayCounter) diff --git a/src/palette.c b/src/palette.c index e106ce6858..9fec449bc4 100644 --- a/src/palette.c +++ b/src/palette.c @@ -16,36 +16,38 @@ enum // These are structs for some unused palette system. // The full functionality of this system is unknown. +#define NUM_PALETTE_STRUCTS 16 + struct PaletteStructTemplate { - u16 uid; + u16 id; u16 *src; - u16 pst_field_8_0:1; - u16 pst_field_8_1:9; + bool16 pst_field_8_0:1; + u16 unused:9; u16 size:5; - u16 pst_field_9_7:1; - u8 pst_field_A; + u8 time1; u8 srcCount:5; - u8 pst_field_B_5:3; - u8 pst_field_C; + u8 state:3; + u8 time2; }; struct PaletteStruct { - const struct PaletteStructTemplate *base; - u32 ps_field_4_0:1; - u16 ps_field_4_1:1; + const struct PaletteStructTemplate *template; + bool32 active:1; + bool32 flag:1; u32 baseDestOffset:9; - u16 destOffset:10; - u16 srcIndex:7; - u8 ps_field_8; - u8 ps_field_9; + u32 destOffset:10; + u32 srcIndex:7; + u8 countdown1; + u8 countdown2; }; -static void unused_sub_80A1CDC(struct PaletteStruct *, u32 *); -static void unused_sub_80A1E40(struct PaletteStruct *, u32 *); -static void unused_sub_80A1F00(struct PaletteStruct *); -static u8 GetPaletteNumByUid(u16); +static void PaletteStruct_Copy(struct PaletteStruct *, u32 *); +static void PaletteStruct_Blend(struct PaletteStruct *, u32 *); +static void PaletteStruct_TryEnd(struct PaletteStruct *); +static void PaletteStruct_Reset(u8); +static u8 PaletteStruct_GetPalNum(u16); static u8 UpdateNormalPaletteFade(void); static void BeginFastPaletteFadeInternal(u8); static u8 UpdateFastPaletteFade(void); @@ -58,15 +60,15 @@ static void Task_BlendPalettesGradually(u8 taskId); // unaligned word reads are issued in BlendPalette otherwise ALIGNED(4) EWRAM_DATA u16 gPlttBufferUnfaded[PLTT_BUFFER_SIZE] = {0}; ALIGNED(4) EWRAM_DATA u16 gPlttBufferFaded[PLTT_BUFFER_SIZE] = {0}; -EWRAM_DATA struct PaletteStruct sPaletteStructs[0x10] = {0}; +EWRAM_DATA struct PaletteStruct sPaletteStructs[NUM_PALETTE_STRUCTS] = {0}; EWRAM_DATA struct PaletteFadeControl gPaletteFade = {0}; static EWRAM_DATA u32 sFiller = 0; static EWRAM_DATA u32 sPlttBufferTransferPending = 0; EWRAM_DATA u8 gPaletteDecompressionBuffer[PLTT_DECOMP_BUFFER_SIZE] = {0}; static const struct PaletteStructTemplate gDummyPaletteStructTemplate = { - .uid = 0xFFFF, - .pst_field_B_5 = 1 + .id = 0xFFFF, + .state = 1 }; static const u8 sRoundedDownGrayscaleMap[] = { @@ -82,20 +84,20 @@ static const u8 sRoundedDownGrayscaleMap[] = { void LoadCompressedPalette(const u32 *src, u16 offset, u16 size) { LZDecompressWram(src, gPaletteDecompressionBuffer); - CpuCopy16(gPaletteDecompressionBuffer, gPlttBufferUnfaded + offset, size); - CpuCopy16(gPaletteDecompressionBuffer, gPlttBufferFaded + offset, size); + CpuCopy16(gPaletteDecompressionBuffer, &gPlttBufferUnfaded[offset], size); + CpuCopy16(gPaletteDecompressionBuffer, &gPlttBufferFaded[offset], size); } void LoadPalette(const void *src, u16 offset, u16 size) { - CpuCopy16(src, gPlttBufferUnfaded + offset, size); - CpuCopy16(src, gPlttBufferFaded + offset, size); + CpuCopy16(src, &gPlttBufferUnfaded[offset], size); + CpuCopy16(src, &gPlttBufferFaded[offset], size); } void FillPalette(u16 value, u16 offset, u16 size) { - CpuFill16(value, gPlttBufferUnfaded + offset, size); - CpuFill16(value, gPlttBufferFaded + offset, size); + CpuFill16(value, &gPlttBufferUnfaded[offset], size); + CpuFill16(value, &gPlttBufferFaded[offset], size); } void TransferPlttBuffer(void) @@ -105,7 +107,7 @@ void TransferPlttBuffer(void) void *src = gPlttBufferFaded; void *dest = (void *)PLTT; DmaCopy16(3, src, dest, PLTT_SIZE); - sPlttBufferTransferPending = 0; + sPlttBufferTransferPending = FALSE; if (gPaletteFade.mode == HARDWARE_FADE && gPaletteFade.active) UpdateBlendRegisters(); } @@ -135,13 +137,13 @@ void ResetPaletteFade(void) { u8 i; - for (i = 0; i < 16; i++) - ResetPaletteStruct(i); + for (i = 0; i < NUM_PALETTE_STRUCTS; i++) + PaletteStruct_Reset(i); ResetPaletteFadeControl(); } -void ReadPlttIntoBuffers(void) +static void ReadPlttIntoBuffers(void) { u16 i; u16 *pltt = (u16 *)PLTT; @@ -178,7 +180,7 @@ bool8 BeginNormalPaletteFade(u32 selectedPalettes, s8 delay, u8 startY, u8 targe gPaletteFade.y = startY; gPaletteFade.targetY = targetY; gPaletteFade.blendColor = color; - gPaletteFade.active = 1; + gPaletteFade.active = TRUE; gPaletteFade.mode = NORMAL_FADE; if (startY < targetY) @@ -189,9 +191,9 @@ bool8 BeginNormalPaletteFade(u32 selectedPalettes, s8 delay, u8 startY, u8 targe UpdatePaletteFade(); temp = gPaletteFade.bufferTransferDisabled; - gPaletteFade.bufferTransferDisabled = 0; + gPaletteFade.bufferTransferDisabled = FALSE; CpuCopy32(gPlttBufferFaded, (void *)PLTT, PLTT_SIZE); - sPlttBufferTransferPending = 0; + sPlttBufferTransferPending = FALSE; if (gPaletteFade.mode == HARDWARE_FADE && gPaletteFade.active) UpdateBlendRegisters(); gPaletteFade.bufferTransferDisabled = temp; @@ -199,55 +201,55 @@ bool8 BeginNormalPaletteFade(u32 selectedPalettes, s8 delay, u8 startY, u8 targe } } -bool8 unref_sub_80A1C1C(u32 a1, u8 a2, u8 a3, u8 a4, u16 a5) +// Unused +static bool8 BeginPlttFade(u32 selectedPalettes, u8 delay, u8 startY, u8 targetY, u16 blendColor) { ReadPlttIntoBuffers(); - return BeginNormalPaletteFade(a1, a2, a3, a4, a5); + return BeginNormalPaletteFade(selectedPalettes, delay, startY, targetY, blendColor); } -void unref_sub_80A1C64(u8 a1, u32 *a2) +// Unused +static void PaletteStruct_Run(u8 a1, u32 *unkFlags) { u8 i; - for (i = 0; i < 16; i++) + for (i = 0; i < NUM_PALETTE_STRUCTS; i++) { struct PaletteStruct *palstruct = &sPaletteStructs[i]; - if (palstruct->ps_field_4_0) + if (palstruct->active) { - if (palstruct->base->pst_field_8_0 == a1) + if (palstruct->template->pst_field_8_0 == a1) { - u8 val1 = palstruct->srcIndex; - u8 val2 = palstruct->base->srcCount; - if (val1 == val2) + if (palstruct->srcIndex == palstruct->template->srcCount) { - unused_sub_80A1F00(palstruct); - if (!palstruct->ps_field_4_0) + PaletteStruct_TryEnd(palstruct); + if (!palstruct->active) continue; } - if (palstruct->ps_field_8 == 0) - unused_sub_80A1CDC(palstruct, a2); + if (palstruct->countdown1 == 0) + PaletteStruct_Copy(palstruct, unkFlags); else - palstruct->ps_field_8--; + palstruct->countdown1--; - unused_sub_80A1E40(palstruct, a2); + PaletteStruct_Blend(palstruct, unkFlags); } } } } -static void unused_sub_80A1CDC(struct PaletteStruct *a1, u32 *a2) +static void PaletteStruct_Copy(struct PaletteStruct *a1, u32 *unkFlags) { s32 srcIndex; s32 srcCount; u8 i = 0; - u16 srcOffset = a1->srcIndex * a1->base->size; + u16 srcOffset = a1->srcIndex * a1->template->size; - if (!a1->base->pst_field_8_0) + if (!a1->template->pst_field_8_0) { - while (i < a1->base->size) + while (i < a1->template->size) { - gPlttBufferUnfaded[a1->destOffset] = a1->base->src[srcOffset]; - gPlttBufferFaded[a1->destOffset] = a1->base->src[srcOffset]; + gPlttBufferUnfaded[a1->destOffset] = a1->template->src[srcOffset]; + gPlttBufferFaded[a1->destOffset] = a1->template->src[srcOffset]; i++; a1->destOffset++; srcOffset++; @@ -255,9 +257,9 @@ static void unused_sub_80A1CDC(struct PaletteStruct *a1, u32 *a2) } else { - while (i < a1->base->size) + while (i < a1->template->size) { - gPlttBufferFaded[a1->destOffset] = a1->base->src[srcOffset]; + gPlttBufferFaded[a1->destOffset] = a1->template->src[srcOffset]; i++; a1->destOffset++; srcOffset++; @@ -265,33 +267,33 @@ static void unused_sub_80A1CDC(struct PaletteStruct *a1, u32 *a2) } a1->destOffset = a1->baseDestOffset; - a1->ps_field_8 = a1->base->pst_field_A; + a1->countdown1 = a1->template->time1; a1->srcIndex++; srcIndex = a1->srcIndex; - srcCount = a1->base->srcCount; + srcCount = a1->template->srcCount; if (srcIndex >= srcCount) { - if (a1->ps_field_9) - a1->ps_field_9--; + if (a1->countdown2) + a1->countdown2--; a1->srcIndex = 0; } - *a2 |= 1 << (a1->baseDestOffset >> 4); + *unkFlags |= 1 << (a1->baseDestOffset >> 4); } -static void unused_sub_80A1E40(struct PaletteStruct *a1, u32 *a2) +static void PaletteStruct_Blend(struct PaletteStruct *a1, u32 *unkFlags) { if (gPaletteFade.active && ((1 << (a1->baseDestOffset >> 4)) & gPaletteFade_selectedPalettes)) { - if (!a1->base->pst_field_8_0) + if (!a1->template->pst_field_8_0) { if (gPaletteFade.delayCounter != gPaletteFade_delay) { BlendPalette( a1->baseDestOffset, - a1->base->size, + a1->template->size, gPaletteFade.y, gPaletteFade.blendColor); } @@ -300,64 +302,64 @@ static void unused_sub_80A1E40(struct PaletteStruct *a1, u32 *a2) { if (!gPaletteFade.delayCounter) { - if (a1->ps_field_8 != a1->base->pst_field_A) + if (a1->countdown1 != a1->template->time1) { - u32 srcOffset = a1->srcIndex * a1->base->size; + u32 srcOffset = a1->srcIndex * a1->template->size; u8 i; - for (i = 0; i < a1->base->size; i++) - gPlttBufferFaded[a1->baseDestOffset + i] = a1->base->src[srcOffset + i]; + for (i = 0; i < a1->template->size; i++) + gPlttBufferFaded[a1->baseDestOffset + i] = a1->template->src[srcOffset + i]; } } } } } -static void unused_sub_80A1F00(struct PaletteStruct *a1) +static void PaletteStruct_TryEnd(struct PaletteStruct *pal) { - if (!a1->ps_field_9) + if (pal->countdown2 == 0) { - s32 val = a1->base->pst_field_B_5; + s32 state = pal->template->state; - if (!val) + if (state == 0) { - a1->srcIndex = 0; - a1->ps_field_8 = a1->base->pst_field_A; - a1->ps_field_9 = a1->base->pst_field_C; - a1->destOffset = a1->baseDestOffset; + pal->srcIndex = 0; + pal->countdown1 = pal->template->time1; + pal->countdown2 = pal->template->time2; + pal->destOffset = pal->baseDestOffset; } else { - if (val < 0) + if (state < 0) return; - if (val > 2) + if (state > 2) return; - ResetPaletteStructByUid(a1->base->uid); + PaletteStruct_ResetById(pal->template->id); } } else { - a1->ps_field_9--; + pal->countdown2--; } } -void ResetPaletteStructByUid(u16 a1) +void PaletteStruct_ResetById(u16 id) { - u8 paletteNum = GetPaletteNumByUid(a1); - if (paletteNum != 16) - ResetPaletteStruct(paletteNum); + u8 paletteNum = PaletteStruct_GetPalNum(id); + if (paletteNum != NUM_PALETTE_STRUCTS) + PaletteStruct_Reset(paletteNum); } -void ResetPaletteStruct(u8 paletteNum) +static void PaletteStruct_Reset(u8 paletteNum) { - sPaletteStructs[paletteNum].base = &gDummyPaletteStructTemplate; - sPaletteStructs[paletteNum].ps_field_4_0 = 0; + sPaletteStructs[paletteNum].template = &gDummyPaletteStructTemplate; + sPaletteStructs[paletteNum].active = FALSE; sPaletteStructs[paletteNum].baseDestOffset = 0; sPaletteStructs[paletteNum].destOffset = 0; sPaletteStructs[paletteNum].srcIndex = 0; - sPaletteStructs[paletteNum].ps_field_4_1 = 0; - sPaletteStructs[paletteNum].ps_field_8 = 0; - sPaletteStructs[paletteNum].ps_field_9 = 0; + sPaletteStructs[paletteNum].flag = 0; + sPaletteStructs[paletteNum].countdown1 = 0; + sPaletteStructs[paletteNum].countdown2 = 0; } void ResetPaletteFadeControl(void) @@ -368,41 +370,41 @@ void ResetPaletteFadeControl(void) gPaletteFade.y = 0; gPaletteFade.targetY = 0; gPaletteFade.blendColor = 0; - gPaletteFade.active = 0; + gPaletteFade.active = FALSE; gPaletteFade.multipurpose2 = 0; // assign same value twice gPaletteFade.yDec = 0; - gPaletteFade.bufferTransferDisabled = 0; - gPaletteFade.shouldResetBlendRegisters = 0; - gPaletteFade.hardwareFadeFinishing = 0; - gPaletteFade.softwareFadeFinishing = 0; + gPaletteFade.bufferTransferDisabled = FALSE; + gPaletteFade.shouldResetBlendRegisters = FALSE; + gPaletteFade.hardwareFadeFinishing = FALSE; + gPaletteFade.softwareFadeFinishing = FALSE; gPaletteFade.softwareFadeFinishingCounter = 0; gPaletteFade.objPaletteToggle = 0; gPaletteFade.deltaY = 2; } -void unref_sub_80A2048(u16 uid) +static void PaletteStruct_SetUnusedFlag(u16 id) { - u8 paletteNum = GetPaletteNumByUid(uid); - if (paletteNum != 16) - sPaletteStructs[paletteNum].ps_field_4_1 = 1; + u8 paletteNum = PaletteStruct_GetPalNum(id); + if (paletteNum != NUM_PALETTE_STRUCTS) + sPaletteStructs[paletteNum].flag = TRUE; } -void unref_sub_80A2074(u16 uid) +static void PaletteStruct_ClearUnusedFlag(u16 id) { - u8 paletteNum = GetPaletteNumByUid(uid); - if (paletteNum != 16) - sPaletteStructs[paletteNum].ps_field_4_1 = 0; + u8 paletteNum = PaletteStruct_GetPalNum(id); + if (paletteNum != NUM_PALETTE_STRUCTS) + sPaletteStructs[paletteNum].flag = FALSE; } -static u8 GetPaletteNumByUid(u16 uid) +static u8 PaletteStruct_GetPalNum(u16 id) { u8 i; - for (i = 0; i < 16; i++) - if (sPaletteStructs[i].base->uid == uid) + for (i = 0; i < NUM_PALETTE_STRUCTS; i++) + if (sPaletteStructs[i].template->id == id) return i; - return 16; + return NUM_PALETTE_STRUCTS; } static u8 UpdateNormalPaletteFade(void) @@ -460,7 +462,7 @@ static u8 UpdateNormalPaletteFade(void) if (gPaletteFade.y == gPaletteFade.targetY) { gPaletteFade_selectedPalettes = 0; - gPaletteFade.softwareFadeFinishing = 1; + gPaletteFade.softwareFadeFinishing = TRUE; } else { @@ -557,7 +559,7 @@ static void BeginFastPaletteFadeInternal(u8 submode) { gPaletteFade.y = 31; gPaletteFade_submode = submode & 0x3F; - gPaletteFade.active = 1; + gPaletteFade.active = TRUE; gPaletteFade.mode = FAST_FADE; if (submode == FAST_FADE_IN_FROM_BLACK) @@ -719,7 +721,7 @@ static u8 UpdateFastPaletteFade(void) } gPaletteFade.mode = NORMAL_FADE; - gPaletteFade.softwareFadeFinishing = 1; + gPaletteFade.softwareFadeFinishing = TRUE; } // gPaletteFade.active cannot change since the last time it was checked. So this @@ -734,10 +736,10 @@ void BeginHardwarePaletteFade(u8 blendCnt, u8 delay, u8 y, u8 targetY, u8 should gPaletteFade_delay = delay; gPaletteFade.y = y; gPaletteFade.targetY = targetY; - gPaletteFade.active = 1; + gPaletteFade.active = TRUE; gPaletteFade.mode = HARDWARE_FADE; gPaletteFade.shouldResetBlendRegisters = shouldResetBlendRegisters & 1; - gPaletteFade.hardwareFadeFinishing = 0; + gPaletteFade.hardwareFadeFinishing = FALSE; if (y < targetY) gPaletteFade.yDec = 0; @@ -784,7 +786,7 @@ static u8 UpdateHardwarePaletteFade(void) gPaletteFade_blendCnt = 0; gPaletteFade.y = 0; } - gPaletteFade.shouldResetBlendRegisters = 0; + gPaletteFade.shouldResetBlendRegisters = FALSE; } // gPaletteFade.active cannot change since the last time it was checked. So this @@ -798,11 +800,11 @@ static void UpdateBlendRegisters(void) SetGpuReg(REG_OFFSET_BLDY, gPaletteFade.y); if (gPaletteFade.hardwareFadeFinishing) { - gPaletteFade.hardwareFadeFinishing = 0; + gPaletteFade.hardwareFadeFinishing = FALSE; gPaletteFade.mode = 0; gPaletteFade_blendCnt = 0; gPaletteFade.y = 0; - gPaletteFade.active = 0; + gPaletteFade.active = FALSE; } } @@ -812,8 +814,8 @@ static bool8 IsSoftwarePaletteFadeFinishing(void) { if (gPaletteFade.softwareFadeFinishingCounter == 4) { - gPaletteFade.active = 0; - gPaletteFade.softwareFadeFinishing = 0; + gPaletteFade.active = FALSE; + gPaletteFade.softwareFadeFinishing = FALSE; gPaletteFade.softwareFadeFinishingCounter = 0; } else @@ -950,7 +952,7 @@ void TintPalette_CustomTone(u16 *palette, u16 count, u16 rTone, u16 gTone, u16 b #define tId data[8] // Blend the selected palettes in a series of steps toward or away from the color. -// Only used by the Groudon/Kyogre fight scene to flash the screen for lightning +// Only used by the Groudon/Kyogre fight scene to flash the screen for lightning. // One call is used to fade the bg from white, while another fades the duo from black void BlendPalettesGradually(u32 selectedPalettes, s8 delay, u8 coeff, u8 coeffTarget, u16 color, u8 priority, u8 id) { @@ -987,8 +989,8 @@ static bool32 IsBlendPalettesGraduallyTaskActive(u8 id) for (i = 0; i < NUM_TASKS; i++) if ((gTasks[i].isActive == TRUE) - && (gTasks[i].func == Task_BlendPalettesGradually) - && (gTasks[i].tId == id)) + && (gTasks[i].func == Task_BlendPalettesGradually) + && (gTasks[i].tId == id)) return TRUE; return FALSE; diff --git a/src/pokeball.c b/src/pokeball.c index 78c4a94303..4b3f91b08e 100644 --- a/src/pokeball.c +++ b/src/pokeball.c @@ -632,7 +632,7 @@ static void SpriteCB_BallThrow_Shake(struct Sprite *sprite) #define tCryTaskSpecies data[0] #define tCryTaskPan data[1] #define tCryTaskWantedCry data[2] -#define tCryTaskBattler data[3] +#define tCryTaskBattler data[3] #define tCryTaskMonSpriteId data[4] #define tCryTaskMonPtr1 data[5] #define tCryTaskMonPtr2 data[6] @@ -656,10 +656,11 @@ static void Task_PlayCryWhenReleasedFromBall(u8 taskId) gTasks[taskId].tCryTaskState = wantedCry + 1; break; case 1: + // Play single cry if (ShouldPlayNormalMonCry(mon) == TRUE) - PlayCry3(species, pan, 0); + PlayCry_ByMode(species, pan, CRY_MODE_NORMAL); else - PlayCry3(species, pan, 11); + PlayCry_ByMode(species, pan, CRY_MODE_WEAK); gBattleSpritesDataPtr->healthBoxesData[battlerId].waitForCry = FALSE; DestroyTask(taskId); break; @@ -671,10 +672,11 @@ static void Task_PlayCryWhenReleasedFromBall(u8 taskId) case 20: if (gTasks[taskId].tCryTaskFrames == 0) { + // Play first doubles cry if (ShouldPlayNormalMonCry(mon) == TRUE) - PlayCry4(species, pan, 1); + PlayCry_ReleaseDouble(species, pan, CRY_MODE_DOUBLES); else - PlayCry4(species, pan, 12); + PlayCry_ReleaseDouble(species, pan, CRY_MODE_WEAK_DOUBLES); gBattleSpritesDataPtr->healthBoxesData[battlerId].waitForCry = FALSE; DestroyTask(taskId); @@ -710,10 +712,11 @@ static void Task_PlayCryWhenReleasedFromBall(u8 taskId) gTasks[taskId].tCryTaskFrames--; break; } + // Play second doubles cry if (ShouldPlayNormalMonCry(mon) == TRUE) - PlayCry4(species, pan, 0); + PlayCry_ReleaseDouble(species, pan, CRY_MODE_NORMAL); else - PlayCry4(species, pan, 11); + PlayCry_ReleaseDouble(species, pan, CRY_MODE_WEAK); gBattleSpritesDataPtr->healthBoxesData[battlerId].waitForCry = FALSE; DestroyTask(taskId); @@ -889,8 +892,8 @@ static void SpriteCB_BallThrow_CaptureMon(struct Sprite *sprite) static void SpriteCB_PlayerMonSendOut_1(struct Sprite *sprite) { sprite->data[0] = 25; - sprite->data[2] = GetBattlerSpriteCoord(sprite->sBattler, 2); - sprite->data[4] = GetBattlerSpriteCoord(sprite->sBattler, 3) + 24; + sprite->data[2] = GetBattlerSpriteCoord(sprite->sBattler, BATTLER_COORD_X_2); + sprite->data[4] = GetBattlerSpriteCoord(sprite->sBattler, BATTLER_COORD_Y_PIC_OFFSET) + 24; sprite->data[5] = -30; sprite->oam.affineParam = sprite->sBattler; InitAnimArcTranslation(sprite); diff --git a/src/pokeblock_feed.c b/src/pokeblock_feed.c index da9b7767cd..98a76421c1 100644 --- a/src/pokeblock_feed.c +++ b/src/pokeblock_feed.c @@ -945,7 +945,7 @@ static void SpriteCB_MonJumpForPokeblock(struct Sprite* sprite) // Play cry at jump peak if (sprite->sSpeed == 0) - PlayCry1(sprite->sSpecies, 0); + PlayCry_Normal(sprite->sSpecies, 0); if (sprite->sSpeed == 9) sprite->callback = SpriteCallbackDummy; diff --git a/src/pokedex.c b/src/pokedex.c index 8d091be046..b240b19109 100644 --- a/src/pokedex.c +++ b/src/pokedex.c @@ -3311,7 +3311,7 @@ static void Task_LoadInfoScreen(u8 taskId) if (!gTasks[taskId].tSkipCry) { StopCryAndClearCrySongs(); - PlayCry2(NationalPokedexNumToSpecies(sPokedexListItem->dexNum), 0, 125, 10); + PlayCry_NormalNoDucking(NationalPokedexNumToSpecies(sPokedexListItem->dexNum), 0, CRY_VOLUME_RS, CRY_PRIORITY_NORMAL); } else { @@ -4012,7 +4012,7 @@ static void Task_DisplayCaughtMonDexPage(u8 taskId) case 6: if (!gPaletteFade.active) { - PlayCry1(NationalPokedexNumToSpecies(dexNum), 0); + PlayCry_Normal(NationalPokedexNumToSpecies(dexNum), 0); gTasks[taskId].tPalTimer = 0; gTasks[taskId].func = Task_HandleCaughtMonPageInput; } diff --git a/src/pokedex_cry_screen.c b/src/pokedex_cry_screen.c index 4c9bfe15cb..28e2bd1632 100644 --- a/src/pokedex_cry_screen.c +++ b/src/pokedex_cry_screen.c @@ -345,7 +345,7 @@ void CryScreenPlayButton(u16 species) static void PlayCryScreenCry(u16 species) { - PlayCry2(species, 0, 125, 10); + PlayCry_NormalNoDucking(species, 0, CRY_VOLUME_RS, CRY_PRIORITY_NORMAL); sDexCryScreen->cryState = 1; } diff --git a/src/pokemon.c b/src/pokemon.c index fd7beb5c8f..93b44b87f1 100644 --- a/src/pokemon.c +++ b/src/pokemon.c @@ -6558,14 +6558,14 @@ void DoMonFrontSpriteAnimation(struct Sprite* sprite, u16 species, bool8 noCry, { // No animation, only check if cry needs to be played if (!noCry) - PlayCry1(species, pan); + PlayCry_Normal(species, pan); sprite->callback = SpriteCallbackDummy; } else { if (!noCry) { - PlayCry1(species, pan); + PlayCry_Normal(species, pan); if (HasTwoFramesAnimation(species)) StartSpriteAnim(sprite, 1); } diff --git a/src/pokemon_icon.c b/src/pokemon_icon.c index 58d0b34200..2c010f35e6 100644 --- a/src/pokemon_icon.c +++ b/src/pokemon_icon.c @@ -1116,7 +1116,7 @@ u16 GetIconSpeciesNoPersonality(u16 species) } else { - if (species > (SPECIES_UNOWN_B - 1)) + if (species > NUM_SPECIES) species = INVALID_ICON_SPECIES; return GetIconSpecies(species, 0); } diff --git a/src/pokemon_jump.c b/src/pokemon_jump.c index 85acb2feee..f6aa82391d 100755 --- a/src/pokemon_jump.c +++ b/src/pokemon_jump.c @@ -1282,12 +1282,12 @@ static bool32 SavePokeJump(void) case 2: if (AreLinkQueuesEmpty()) { - CreateTask(Task_LinkSave, 6); + CreateTask(Task_LinkFullSave, 6); sPokemonJump->mainState++; } break; case 3: - if (!FuncIsActiveTask(Task_LinkSave)) + if (!FuncIsActiveTask(Task_LinkFullSave)) { ClearMessageWindow(); sPokemonJump->mainState++; diff --git a/src/pokemon_summary_screen.c b/src/pokemon_summary_screen.c index 7f1ad6d8b1..2c11cd2923 100644 --- a/src/pokemon_summary_screen.c +++ b/src/pokemon_summary_screen.c @@ -4026,9 +4026,9 @@ static void PlayMonCry(void) if (!summary->isEgg) { if (ShouldPlayNormalMonCry(&sMonSummaryScreen->currentMon) == TRUE) - PlayCry3(summary->species2, 0, 0); + PlayCry_ByMode(summary->species2, 0, CRY_MODE_NORMAL); else - PlayCry3(summary->species2, 0, 11); + PlayCry_ByMode(summary->species2, 0, CRY_MODE_WEAK); } } diff --git a/src/pokenav.c b/src/pokenav.c index d30c523f92..f9a6614a89 100644 --- a/src/pokenav.c +++ b/src/pokenav.c @@ -49,7 +49,6 @@ static void Task_RunLoopedTask(u8 taskId); static void Task_Pokenav(u8 taskId); static void CB2_InitPokenavForTutorial(void); -// TODO: Use MENU ids const struct PokenavCallbacks PokenavMenuCallbacks[15] = { [POKENAV_MAIN_MENU - POKENAV_MENU_IDS_START] = @@ -122,15 +121,15 @@ const struct PokenavCallbacks PokenavMenuCallbacks[15] = .free1 = FreeRegionMapSubstruct1, .free2 = FreeRegionMapSubstruct2, }, - [POKENAV_CONDITION_PARTY - POKENAV_MENU_IDS_START] = + [POKENAV_CONDITION_GRAPH_PARTY - POKENAV_MENU_IDS_START] = { - .init = PokenavCallback_Init_PartyCondition, - .callback = GetPartyConditionCallback, - .open = OpenPartyConditionMenu, - .createLoopTask = CreatePartyConditionLoopedTask, - .isLoopTaskActive = IsPartyConditionLoopedTaskActive, - .free1 = FreePartyConditionSubstruct1, - .free2 = FreePartyConditionSubstruct2, + .init = PokenavCallback_Init_ConditionGraph_Party, + .callback = GetConditionGraphMenuCallback, + .open = OpenConditionGraphMenu, + .createLoopTask = CreateConditionGraphMenuLoopedTask, + .isLoopTaskActive = IsConditionGraphMenuLoopedTaskActive, + .free1 = FreeConditionGraphMenuSubstruct1, + .free2 = FreeConditionGraphMenuSubstruct2, }, [POKENAV_CONDITION_SEARCH_RESULTS - POKENAV_MENU_IDS_START] = { @@ -142,15 +141,15 @@ const struct PokenavCallbacks PokenavMenuCallbacks[15] = .free1 = FreeSearchResultSubstruct1, .free2 = FreeSearchResultSubstruct2, }, - [POKENAV_CONDITION_GRAPH_FROM_SEARCH - POKENAV_MENU_IDS_START] = + [POKENAV_CONDITION_GRAPH_SEARCH - POKENAV_MENU_IDS_START] = { - .init = PokenavCallback_Init_ConditionGraphFromSearch, - .callback = GetPartyConditionCallback, - .open = OpenPartyConditionMenu, - .createLoopTask = CreatePartyConditionLoopedTask, - .isLoopTaskActive = IsPartyConditionLoopedTaskActive, - .free1 = FreePartyConditionSubstruct1, - .free2 = FreePartyConditionSubstruct2, + .init = PokenavCallback_Init_ConditionGraph_Search, + .callback = GetConditionGraphMenuCallback, + .open = OpenConditionGraphMenu, + .createLoopTask = CreateConditionGraphMenuLoopedTask, + .isLoopTaskActive = IsConditionGraphMenuLoopedTaskActive, + .free1 = FreeConditionGraphMenuSubstruct1, + .free2 = FreeConditionGraphMenuSubstruct2, }, [POKENAV_RETURN_CONDITION_SEARCH - POKENAV_MENU_IDS_START] = { @@ -179,8 +178,8 @@ const struct PokenavCallbacks PokenavMenuCallbacks[15] = .open = OpenRibbonsMonList, .createLoopTask = CreateRibbonsMonListLoopedTask, .isLoopTaskActive = IsRibbonsMonListLoopedTaskActive, - .free1 = FreeRibbonsMonList1, - .free2 = FreeRibbonsMonList2, + .free1 = FreeRibbonsMonList, + .free2 = FreeRibbonsMonMenu, }, [POKENAV_RIBBONS_SUMMARY_SCREEN - POKENAV_MENU_IDS_START] = { @@ -199,8 +198,8 @@ const struct PokenavCallbacks PokenavMenuCallbacks[15] = .open = OpenRibbonsMonListFromRibbonsSummary, .createLoopTask = CreateRibbonsMonListLoopedTask, .isLoopTaskActive = IsRibbonsMonListLoopedTaskActive, - .free1 = FreeRibbonsMonList1, - .free2 = FreeRibbonsMonList2, + .free1 = FreeRibbonsMonList, + .free2 = FreeRibbonsMonMenu, }, }; diff --git a/src/pokenav_conditions.c b/src/pokenav_conditions.c new file mode 100644 index 0000000000..e61b115686 --- /dev/null +++ b/src/pokenav_conditions.c @@ -0,0 +1,630 @@ +#include "global.h" +#include "data.h" +#include "decompress.h" +#include "main.h" +#include "menu_specialized.h" +#include "mon_markings.h" +#include "pokenav.h" +#include "pokemon.h" +#include "pokemon_storage_system.h" +#include "sound.h" +#include "string_util.h" +#include "strings.h" +#include "text.h" +#include "constants/songs.h" + +#define CONDITION_MONS_LOADED 3 + +struct Pokenav_ConditionMenu +{ + u32 monPal[CONDITION_MONS_LOADED][0x20]; + u8 fill[0x180]; + u32 monPicGfx[CONDITION_MONS_LOADED][MON_PIC_SIZE]; + bool8 inSearchMode; + s16 toLoadListIndex; + u32 (*callback)(struct Pokenav_ConditionMenu *); + u8 fill2[0x18]; + u8 locationText[CONDITION_MONS_LOADED][24]; + u8 nameText[CONDITION_MONS_LOADED][64]; + struct ConditionGraph graph; + u8 numSparkles[CONDITION_MONS_LOADED]; + u8 monMarks[CONDITION_MONS_LOADED]; + s8 loadId; + s8 nextLoadIdDown; + s8 nextLoadIdUp; + s8 toLoadId; + u8 state; +}; + +static void InitPartyConditionListParameters(void); +static void InitSearchResultsConditionList(void); +static u32 HandleConditionMenuInput(struct Pokenav_ConditionMenu *); +static u32 GetConditionReturnCallback(struct Pokenav_ConditionMenu *); +static u32 OpenMarkingsMenu(struct Pokenav_ConditionMenu *); +static u8 ConditionGraphHandleDpadInput(struct Pokenav_ConditionMenu *); +static u8 SwitchConditionSummaryIndex(bool8); +static void CopyMonNameGenderLocation(s16, u8); +static void GetMonConditionGraphData(s16, u8); +static void ConditionGraphDrawMonPic(s16, u8); + +bool32 PokenavCallback_Init_ConditionGraph_Party(void) +{ + struct Pokenav_ConditionMenu *menu = AllocSubstruct(POKENAV_SUBSTRUCT_CONDITION_GRAPH_MENU, sizeof(struct Pokenav_ConditionMenu)); + + if (menu == NULL) + return FALSE; + + ConditionGraph_Init(&menu->graph); + InitPartyConditionListParameters(); + gKeyRepeatStartDelay = 20; + menu->callback = HandleConditionMenuInput; + return TRUE; +} + +bool32 PokenavCallback_Init_ConditionGraph_Search(void) +{ + struct Pokenav_ConditionMenu *menu = AllocSubstruct(POKENAV_SUBSTRUCT_CONDITION_GRAPH_MENU, sizeof(struct Pokenav_ConditionMenu)); + + if (menu == NULL) + return FALSE; + + ConditionGraph_Init(&menu->graph); + InitSearchResultsConditionList(); + gKeyRepeatStartDelay = 20; + menu->callback = HandleConditionMenuInput; + return TRUE; +} + +u32 GetConditionGraphMenuCallback(void) +{ + struct Pokenav_ConditionMenu *menu = GetSubstructPtr(POKENAV_SUBSTRUCT_CONDITION_GRAPH_MENU); + + return menu->callback(menu); +} + +static u32 HandleConditionMenuInput(struct Pokenav_ConditionMenu *menu) +{ + struct PokenavMonList *monListPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MON_LIST); + u32 ret = ConditionGraphHandleDpadInput(menu); + + if (ret == CONDITION_FUNC_NONE) + { + if (JOY_NEW(B_BUTTON)) + { + PlaySE(SE_SELECT); + menu->callback = GetConditionReturnCallback; + ret = CONDITION_FUNC_RETURN; + } + else if (JOY_NEW(A_BUTTON)) + { + if (!menu->inSearchMode) + { + // In Party mode, pressing A only applies to the Cancel button + if (monListPtr->currIndex == monListPtr->listCount - 1) + { + // Cancel + PlaySE(SE_SELECT); + menu->callback = GetConditionReturnCallback; + ret = CONDITION_FUNC_RETURN; + } + } + else + { + // In Search mode pressing A brings up the markings menu + PlaySE(SE_SELECT); + ret = CONDITION_FUNC_ADD_MARKINGS; + menu->callback = OpenMarkingsMenu; + } + } + } + + return ret; +} + +static u32 OpenMarkingsMenu(struct Pokenav_ConditionMenu *menu) +{ + struct PokenavMonList *monListPtr; + u8 markings; + u32 ret = CONDITION_FUNC_NONE, boxId, monId; + + if (!HandleMonMarkingsMenuInput()) + { + menu->monMarks[menu->loadId] = GetMonMarkingsData(); + monListPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MON_LIST); + boxId = monListPtr->monData[monListPtr->currIndex].boxId; + monId = monListPtr->monData[monListPtr->currIndex].monId; + markings = menu->monMarks[menu->loadId]; + + if (boxId == TOTAL_BOXES_COUNT) + SetMonData(&gPlayerParty[monId], MON_DATA_MARKINGS, &markings); + else + SetBoxMonDataAt(boxId, monId, MON_DATA_MARKINGS, &markings); + + menu->callback = HandleConditionMenuInput; + ret = CONDITION_FUNC_CLOSE_MARKINGS; + } + + return ret; +} + +static u32 GetConditionReturnCallback(struct Pokenav_ConditionMenu *menu) +{ + if (!menu->inSearchMode) + return POKENAV_CONDITION_MENU; + else + return POKENAV_RETURN_CONDITION_SEARCH; +} + +void FreeConditionGraphMenuSubstruct1(void) +{ + struct Pokenav_ConditionMenu *menu = GetSubstructPtr(POKENAV_SUBSTRUCT_CONDITION_GRAPH_MENU); + if (!menu->inSearchMode) + FreePokenavSubstruct(POKENAV_SUBSTRUCT_MON_LIST); + + FreePokenavSubstruct(POKENAV_SUBSTRUCT_CONDITION_GRAPH_MENU); +} + +static u8 ConditionGraphHandleDpadInput(struct Pokenav_ConditionMenu *menu) +{ + struct PokenavMonList *monListPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MON_LIST); + u8 ret = CONDITION_FUNC_NONE; + + if (JOY_HELD(DPAD_UP)) + { + // Prevent input wrapping in search mode + if (!menu->inSearchMode || monListPtr->currIndex != 0) + { + PlaySE(SE_SELECT); + ret = SwitchConditionSummaryIndex(TRUE); + } + } + else if (JOY_HELD(DPAD_DOWN)) + { + // Prevent input wrapping in search mode + if (!menu->inSearchMode || monListPtr->currIndex < monListPtr->listCount - 1) + { + PlaySE(SE_SELECT); + ret = SwitchConditionSummaryIndex(FALSE); + } + } + + return ret; +} + +static u8 SwitchConditionSummaryIndex(u8 moveUp) +{ + u16 newLoadId; + bool8 wasNotLastMon, isNotLastMon; + struct Pokenav_ConditionMenu *menu = GetSubstructPtr(POKENAV_SUBSTRUCT_CONDITION_GRAPH_MENU); + struct PokenavMonList *monListPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MON_LIST); + + newLoadId = (moveUp) ? menu->nextLoadIdUp : menu->nextLoadIdDown; + ConditionGraph_SetNewPositions(&menu->graph, menu->graph.savedPositions[menu->loadId], menu->graph.savedPositions[newLoadId]); + wasNotLastMon = (monListPtr->currIndex != (IsConditionMenuSearchMode() ? monListPtr->listCount : monListPtr->listCount - 1)); + if (moveUp) + { + menu->nextLoadIdUp = menu->nextLoadIdDown; + menu->nextLoadIdDown = menu->loadId; + menu->loadId = newLoadId; + menu->toLoadId = menu->nextLoadIdUp; + + monListPtr->currIndex = (monListPtr->currIndex == 0) ? monListPtr->listCount - 1 : monListPtr->currIndex - 1; + menu->toLoadListIndex = (monListPtr->currIndex != 0) ? monListPtr->currIndex - 1 : monListPtr->listCount - 1; + } + else + { + menu->nextLoadIdDown = menu->nextLoadIdUp; + menu->nextLoadIdUp = menu->loadId; + menu->loadId = newLoadId; + menu->toLoadId = menu->nextLoadIdDown; + + monListPtr->currIndex = (monListPtr->currIndex < monListPtr->listCount - 1) ? monListPtr->currIndex + 1 : 0; + menu->toLoadListIndex = (monListPtr->currIndex < monListPtr->listCount - 1) ? monListPtr->currIndex + 1 : 0; + } + + isNotLastMon = (monListPtr->currIndex != (IsConditionMenuSearchMode() ? monListPtr->listCount : monListPtr->listCount - 1)); + + if (!wasNotLastMon) + return CONDITION_FUNC_NO_TRANSITION; + else if (!isNotLastMon) + return CONDITION_FUNC_SLIDE_MON_OUT; + else + return CONDITION_FUNC_SLIDE_MON_IN; +} + +bool32 LoadConditionGraphMenuGfx(void) +{ + s32 var; + struct Pokenav_ConditionMenu *menu = GetSubstructPtr(POKENAV_SUBSTRUCT_CONDITION_GRAPH_MENU); + struct PokenavMonList *monListPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MON_LIST); + + switch (menu->state) + { + case 0: + CopyMonNameGenderLocation(monListPtr->currIndex, 0); + break; + case 1: + GetMonConditionGraphData(monListPtr->currIndex, 0); + break; + case 2: + ConditionGraphDrawMonPic(monListPtr->currIndex, 0); + break; + case 3: + if (monListPtr->listCount == 1) + { + menu->loadId = 0; + menu->nextLoadIdDown = 0; + menu->nextLoadIdUp = 0; + menu->state = 0; + return TRUE; + } + else + { + menu->loadId = 0; + menu->nextLoadIdDown = 1; + menu->nextLoadIdUp = 2; + } + break; + // These were probably ternaries just like cases 7-9, but couldn't match it any other way. + case 4: + var = monListPtr->currIndex + 1; + if (var >= monListPtr->listCount) + var = 0; + CopyMonNameGenderLocation(var, 1); + break; + case 5: + var = monListPtr->currIndex + 1; + if (var >= monListPtr->listCount) + var = 0; + GetMonConditionGraphData(var, 1); + break; + case 6: + var = monListPtr->currIndex + 1; + if (var >= monListPtr->listCount) + var = 0; + ConditionGraphDrawMonPic(var, 1); + break; + case 7: + CopyMonNameGenderLocation((monListPtr->currIndex - 1 >= 0) ? monListPtr->currIndex - 1 : monListPtr->listCount - 1, 2); + break; + case 8: + GetMonConditionGraphData((monListPtr->currIndex - 1 >= 0) ? monListPtr->currIndex - 1 : monListPtr->listCount - 1, 2); + break; + case 9: + ConditionGraphDrawMonPic((monListPtr->currIndex - 1 >= 0) ? monListPtr->currIndex - 1 : monListPtr->listCount - 1, 2); + menu->state = 0; + return TRUE; + } + + menu->state++; + return FALSE; +} + +bool32 LoadNextConditionMenuMonData(u8 mode) +{ + struct Pokenav_ConditionMenu *menu = GetSubstructPtr(POKENAV_SUBSTRUCT_CONDITION_GRAPH_MENU); + + switch (mode) + { + case CONDITION_LOAD_MON_INFO: + CopyMonNameGenderLocation(menu->toLoadListIndex, menu->toLoadId); + break; + case CONDITION_LOAD_GRAPH: + GetMonConditionGraphData(menu->toLoadListIndex, menu->toLoadId); + break; + case CONDITION_LOAD_MON_PIC: + ConditionGraphDrawMonPic(menu->toLoadListIndex, menu->toLoadId); + return TRUE; + } + + return FALSE; +} + +u8 *CopyStringLeftAlignedToConditionData(u8 *dst, const u8 *src, s16 n) +{ + while (*src != EOS) + *dst++ = *src++, n--; + + while (n-- > 0) + *dst++ = CHAR_SPACE; + + *dst = EOS; + return dst; +} + +static u8 *CopyConditionMonNameGender(u8 *str, u16 listId, bool8 arg3) +{ + u16 boxId, monId, gender, species, level, lvlDigits; + struct BoxPokemon *boxMon; + u8 *txtPtr, *str_; + struct PokenavMonList *monListPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MON_LIST); + + boxId = monListPtr->monData[listId].boxId; + monId = monListPtr->monData[listId].monId; + *(str++) = EXT_CTRL_CODE_BEGIN; + *(str++) = EXT_CTRL_CODE_COLOR_HIGHLIGHT_SHADOW; + *(str++) = TEXT_COLOR_BLUE; + *(str++) = TEXT_COLOR_TRANSPARENT; + *(str++) = TEXT_COLOR_LIGHT_BLUE; + + if (GetBoxOrPartyMonData(boxId, monId, MON_DATA_IS_EGG, NULL)) + return StringCopyPadded(str, gText_EggNickname, CHAR_SPACE, 12); + + GetBoxOrPartyMonData(boxId, monId, MON_DATA_NICKNAME, str); + StringGetEnd10(str); + species = GetBoxOrPartyMonData(boxId, monId, MON_DATA_SPECIES, NULL); + if (boxId == TOTAL_BOXES_COUNT) + { + level = GetMonData(&gPlayerParty[monId], MON_DATA_LEVEL); + gender = GetMonGender(&gPlayerParty[monId]); + } + else + { + boxMon = GetBoxedMonPtr(boxId, monId); + gender = GetBoxMonGender(boxMon); + level = GetLevelFromBoxMonExp(boxMon); + } + + if ((species == SPECIES_NIDORAN_F || species == SPECIES_NIDORAN_M) && !StringCompare(str, gSpeciesNames[species])) + gender = MON_GENDERLESS; + + str_ = str; // For some reason, a variable is needed to match. + while (*str_ != EOS) + (str_++); + + *(str_++) = EXT_CTRL_CODE_BEGIN; + *(str_++) = EXT_CTRL_CODE_SKIP; + *(str_++) = 60; + switch (gender) + { + default: + *(str_++) = CHAR_SPACER; // Genderless + break; + case MON_MALE: + *(str_++) = EXT_CTRL_CODE_BEGIN; + *(str_++) = EXT_CTRL_CODE_COLOR; + *(str_++) = TEXT_COLOR_RED; + *(str_++) = EXT_CTRL_CODE_BEGIN; + *(str_++) = EXT_CTRL_CODE_SHADOW; + *(str_++) = TEXT_COLOR_LIGHT_RED; + *(str_++) = CHAR_MALE; + break; + case MON_FEMALE: + *(str_++) = EXT_CTRL_CODE_BEGIN; + *(str_++) = EXT_CTRL_CODE_COLOR; + *(str_++) = TEXT_COLOR_GREEN; + *(str_++) = EXT_CTRL_CODE_BEGIN; + *(str_++) = EXT_CTRL_CODE_SHADOW; + *(str_++) = TEXT_COLOR_LIGHT_GREEN; + *(str_++) = CHAR_FEMALE; + break; + } + + *(str_++) = EXT_CTRL_CODE_BEGIN; + *(str_++) = EXT_CTRL_CODE_COLOR_HIGHLIGHT_SHADOW; + *(str_++) = TEXT_COLOR_BLUE; + *(str_++) = TEXT_COLOR_TRANSPARENT; + *(str_++) = TEXT_COLOR_LIGHT_BLUE; + *(str_++) = CHAR_SLASH; + *(str_++) = CHAR_EXTRA_SYMBOL; + *(str_++) = CHAR_LV_2; + txtPtr = str_; + str_ = ConvertIntToDecimalStringN(str_, level, STR_CONV_MODE_LEFT_ALIGN, 3); + lvlDigits = str_ - txtPtr; + *(str_++) = CHAR_SPACE; + if (!arg3) + { + lvlDigits = 3 - lvlDigits; + while (lvlDigits-- != 0) + *(str_++) = CHAR_SPACE; + } + + *str_ = EOS; + return str_; +} + +static void CopyMonNameGenderLocation(s16 listId, u8 loadId) +{ + u16 boxId, i; + struct Pokenav_ConditionMenu *menu = GetSubstructPtr(POKENAV_SUBSTRUCT_CONDITION_GRAPH_MENU); + struct PokenavMonList *monListPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MON_LIST); + + if (listId != (IsConditionMenuSearchMode() ? monListPtr->listCount : monListPtr->listCount - 1)) + { + CopyConditionMonNameGender(menu->nameText[loadId], listId, FALSE); + boxId = monListPtr->monData[listId].boxId; + menu->locationText[loadId][0] = EXT_CTRL_CODE_BEGIN; + menu->locationText[loadId][1] = EXT_CTRL_CODE_COLOR_HIGHLIGHT_SHADOW; + menu->locationText[loadId][2] = TEXT_COLOR_BLUE; + menu->locationText[loadId][3] = TEXT_COLOR_TRANSPARENT; + menu->locationText[loadId][4] = TEXT_COLOR_LIGHT_BLUE; + if (boxId == TOTAL_BOXES_COUNT) + CopyStringLeftAlignedToConditionData(&menu->locationText[loadId][5], gText_InParty, BOX_NAME_LENGTH); + else + CopyStringLeftAlignedToConditionData(&menu->locationText[loadId][5], GetBoxNamePtr(boxId), BOX_NAME_LENGTH); + } + else + { + for (i = 0; i < 12; i++) + menu->nameText[loadId][i] = CHAR_SPACE; + menu->nameText[loadId][i] = EOS; + + for (i = 0; i < BOX_NAME_LENGTH; i++) + menu->locationText[loadId][i] = CHAR_SPACE; + menu->locationText[loadId][i] = EOS; + } +} + +static void InitPartyConditionListParameters(void) +{ + u16 i, count; + struct Pokenav_ConditionMenu *menu = GetSubstructPtr(POKENAV_SUBSTRUCT_CONDITION_GRAPH_MENU); + struct PokenavMonList *monListPtr = AllocSubstruct(POKENAV_SUBSTRUCT_MON_LIST, sizeof(struct PokenavMonList)); + + menu->inSearchMode = FALSE; + for (i = 0, count = 0; i < CalculatePlayerPartyCount(); i++) + { + if (!GetMonData(&gPlayerParty[i], MON_DATA_IS_EGG)) + { + monListPtr->monData[count].boxId = TOTAL_BOXES_COUNT; + monListPtr->monData[count].monId = i; + monListPtr->monData[count].data = 0; + count++; + } + } + + monListPtr->monData[count].boxId = 0; + monListPtr->monData[count].monId = 0; + monListPtr->monData[count].data = 0; + monListPtr->currIndex = 0; + monListPtr->listCount = count + 1; + menu->state = 0; +} + +static void InitSearchResultsConditionList(void) +{ + struct Pokenav_ConditionMenu *menu = GetSubstructPtr(POKENAV_SUBSTRUCT_CONDITION_GRAPH_MENU); + menu->inSearchMode = TRUE; + menu->state = 0; +} + +static void GetMonConditionGraphData(s16 listId, u8 loadId) +{ + u16 boxId, monId, i; + struct Pokenav_ConditionMenu *menu = GetSubstructPtr(POKENAV_SUBSTRUCT_CONDITION_GRAPH_MENU); + struct PokenavMonList *monListPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MON_LIST); + + if (listId != (IsConditionMenuSearchMode() ? monListPtr->listCount : monListPtr->listCount - 1)) + { + boxId = monListPtr->monData[listId].boxId; + monId = monListPtr->monData[listId].monId; + menu->graph.conditions[loadId][CONDITION_COOL] = GetBoxOrPartyMonData(boxId, monId, MON_DATA_COOL, NULL); + menu->graph.conditions[loadId][CONDITION_TOUGH] = GetBoxOrPartyMonData(boxId, monId, MON_DATA_TOUGH, NULL); + menu->graph.conditions[loadId][CONDITION_SMART] = GetBoxOrPartyMonData(boxId, monId, MON_DATA_SMART, NULL); + menu->graph.conditions[loadId][CONDITION_CUTE] = GetBoxOrPartyMonData(boxId, monId, MON_DATA_CUTE, NULL); + menu->graph.conditions[loadId][CONDITION_BEAUTY] = GetBoxOrPartyMonData(boxId, monId, MON_DATA_BEAUTY, NULL); + menu->numSparkles[loadId] = GET_NUM_CONDITION_SPARKLES(GetBoxOrPartyMonData(boxId, monId, MON_DATA_SHEEN, NULL)); + menu->monMarks[loadId] = GetBoxOrPartyMonData(boxId, monId, MON_DATA_MARKINGS, NULL); + ConditionGraph_CalcPositions(menu->graph.conditions[loadId], menu->graph.savedPositions[loadId]); + } + else + { + // Set empty graph point + for (i = 0; i < CONDITION_COUNT; i++) + { + menu->graph.conditions[loadId][i] = 0; + menu->graph.savedPositions[loadId][i].x = CONDITION_GRAPH_CENTER_X; + menu->graph.savedPositions[loadId][i].y = CONDITION_GRAPH_CENTER_Y; + } + } +} + +static void ConditionGraphDrawMonPic(s16 listId, u8 loadId) +{ + u16 boxId, monId, species; + u32 personality, tid; + struct Pokenav_ConditionMenu *menu = GetSubstructPtr(POKENAV_SUBSTRUCT_CONDITION_GRAPH_MENU); + struct PokenavMonList *monListPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MON_LIST); + + if (listId == (IsConditionMenuSearchMode() ? monListPtr->listCount : monListPtr->listCount - 1)) + return; + + boxId = monListPtr->monData[listId].boxId; + monId = monListPtr->monData[listId].monId; + species = GetBoxOrPartyMonData(boxId, monId, MON_DATA_SPECIES2, NULL); + tid = GetBoxOrPartyMonData(boxId, monId, MON_DATA_OT_ID, NULL); + personality = GetBoxOrPartyMonData(boxId, monId, MON_DATA_PERSONALITY, NULL); + LoadSpecialPokePic(&gMonFrontPicTable[species], menu->monPicGfx[loadId], species, personality, TRUE); + LZ77UnCompWram(GetMonSpritePalFromSpeciesAndPersonality(species, tid, personality), menu->monPal[loadId]); +} + +u16 GetMonListCount(void) +{ + struct PokenavMonList *monListPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MON_LIST); + return monListPtr->listCount; +} + +u16 GetConditionGraphCurrentListIndex(void) +{ + struct PokenavMonList *monListPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MON_LIST); + return monListPtr->currIndex; +} + +struct ConditionGraph *GetConditionGraphPtr(void) +{ + struct Pokenav_ConditionMenu *menu = GetSubstructPtr(POKENAV_SUBSTRUCT_CONDITION_GRAPH_MENU); + return &menu->graph; +} + +u8 GetConditionGraphMenuCurrentLoadIndex(void) +{ + struct Pokenav_ConditionMenu *menu = GetSubstructPtr(POKENAV_SUBSTRUCT_CONDITION_GRAPH_MENU); + return menu->loadId; +} + +u8 GetConditionGraphMenuToLoadListIndex(void) +{ + struct Pokenav_ConditionMenu *menu = GetSubstructPtr(POKENAV_SUBSTRUCT_CONDITION_GRAPH_MENU); + return menu->toLoadListIndex; +} + +void *GetConditionMonPicGfx(u8 loadId) +{ + struct Pokenav_ConditionMenu *menu = GetSubstructPtr(POKENAV_SUBSTRUCT_CONDITION_GRAPH_MENU); + return menu->monPicGfx[loadId]; +} + +void *GetConditionMonPal(u8 loadId) +{ + struct Pokenav_ConditionMenu *menu = GetSubstructPtr(POKENAV_SUBSTRUCT_CONDITION_GRAPH_MENU); + return menu->monPal[loadId]; +} + +u8 GetConditionGraphMenuToLoadId(void) +{ + struct Pokenav_ConditionMenu *menu = GetSubstructPtr(POKENAV_SUBSTRUCT_CONDITION_GRAPH_MENU); + return menu->toLoadId; +} + +u8 *GetConditionMonNameText(u8 loadId) +{ + struct Pokenav_ConditionMenu *menu = GetSubstructPtr(POKENAV_SUBSTRUCT_CONDITION_GRAPH_MENU); + return menu->nameText[loadId]; +} + +u8 *GetConditionMonLocationText(u8 loadId) +{ + struct Pokenav_ConditionMenu *menu = GetSubstructPtr(POKENAV_SUBSTRUCT_CONDITION_GRAPH_MENU); + return menu->locationText[loadId]; +} + +u16 GetConditionMonDataBuffer(void) +{ + struct PokenavMonList *monListPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MON_LIST); + return monListPtr->monData[monListPtr->currIndex].data; +} + +bool32 IsConditionMenuSearchMode(void) +{ + struct Pokenav_ConditionMenu *menu = GetSubstructPtr(POKENAV_SUBSTRUCT_CONDITION_GRAPH_MENU); + if (menu->inSearchMode == TRUE) + return TRUE; + else + return FALSE; +} + +// Markings are only shown in search mode +u8 TryGetMonMarkId(void) +{ + struct Pokenav_ConditionMenu *menu = GetSubstructPtr(POKENAV_SUBSTRUCT_CONDITION_GRAPH_MENU); + if (menu->inSearchMode == TRUE) + return menu->monMarks[menu->loadId]; + else + return 0; +} + +u8 GetNumConditionMonSparkles(void) +{ + struct Pokenav_ConditionMenu *menu = GetSubstructPtr(POKENAV_SUBSTRUCT_CONDITION_GRAPH_MENU); + return menu->numSparkles[menu->loadId]; +} diff --git a/src/pokenav_conditions_1.c b/src/pokenav_conditions_1.c deleted file mode 100644 index a01b93a803..0000000000 --- a/src/pokenav_conditions_1.c +++ /dev/null @@ -1,624 +0,0 @@ -#include "global.h" -#include "data.h" -#include "decompress.h" -#include "main.h" -#include "menu_specialized.h" -#include "mon_markings.h" -#include "pokenav.h" -#include "pokemon.h" -#include "pokemon_storage_system.h" -#include "sound.h" -#include "string_util.h" -#include "strings.h" -#include "text.h" -#include "constants/songs.h" - -struct PokenavSub11 -{ - u32 monPal[3][0x20]; - u8 fill[0x180]; - u32 monPicGfx[3][MON_PIC_SIZE]; - u8 searchMode; - s16 monIndex; - u32 (*callback)(struct PokenavSub11 *); - u8 fill2[0x6320 - 0x6308]; - u8 searchLocBuffer[3][24]; - u8 nameBuffer[3][64]; - struct ConditionGraph conditionData; - u8 sheen[3]; - u8 monMarks[3]; - s8 mark; - s8 unk6787; - s8 unk6788; - s8 unk6789; - u8 state; -}; - -void InitPartyConditionListParameters(void); -void sub_81CD9F8(void); -u32 HandlePartyConditionInput(struct PokenavSub11 *structPtr); -u32 GetConditionReturnCallback(struct PokenavSub11 *structPtr); -u32 ConditionMenu_OpenMarkingsMenu(struct PokenavSub11 *structPtr); -u8 ConditionGraphHandleDpadInput(struct PokenavSub11 *structPtr); -u8 SwitchConditionSummaryIndex(u8 moveUp); -void CopyMonNameGenderLocation(s16 id, u8 arg1); -void GetMonConditionGraphData(s16 id, u8 arg1); -void ConditionGraphDrawMonPic(s16 id, u8 arg1); - -// code -bool32 PokenavCallback_Init_PartyCondition(void) -{ - struct PokenavSub11 *structPtr = AllocSubstruct(POKENAV_SUBSTRUCT_CONDITION_GRAPH, sizeof(struct PokenavSub11)); - - if (structPtr == NULL) - return FALSE; - - InitConditionGraphData(&structPtr->conditionData); - InitPartyConditionListParameters(); - gKeyRepeatStartDelay = 20; - structPtr->callback = HandlePartyConditionInput; - return TRUE; -} - -bool32 PokenavCallback_Init_ConditionGraphFromSearch(void) -{ - struct PokenavSub11 *structPtr = AllocSubstruct(POKENAV_SUBSTRUCT_CONDITION_GRAPH, sizeof(struct PokenavSub11)); - - if (structPtr == NULL) - return FALSE; - - InitConditionGraphData(&structPtr->conditionData); - sub_81CD9F8(); - gKeyRepeatStartDelay = 20; - structPtr->callback = HandlePartyConditionInput; - return TRUE; -} - -u32 GetPartyConditionCallback(void) -{ - struct PokenavSub11 *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_CONDITION_GRAPH); - - return structPtr->callback(structPtr); -} - -u32 HandlePartyConditionInput(struct PokenavSub11 *structPtr) -{ - struct PokenavSub18 *monListPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MON_LIST); - u32 ret = ConditionGraphHandleDpadInput(structPtr); - - if (ret == PARTY_CONDITION_FUNC_NONE) - { - if (JOY_NEW(B_BUTTON)) - { - PlaySE(SE_SELECT); - structPtr->callback = GetConditionReturnCallback; - ret = PARTY_CONDITION_FUNC_RETURN; - } - else if (JOY_NEW(A_BUTTON)) - { - if (structPtr->searchMode == 0) - { - if (monListPtr->currIndex == monListPtr->listCount - 1) - { - PlaySE(SE_SELECT); - structPtr->callback = GetConditionReturnCallback; - ret = PARTY_CONDITION_FUNC_RETURN; - } - } - else - { - PlaySE(SE_SELECT); - ret = PARTY_CONDITION_FUNC_ADD_MARKINGS; - structPtr->callback = ConditionMenu_OpenMarkingsMenu; - } - } - } - - return ret; -} - -u32 ConditionMenu_OpenMarkingsMenu(struct PokenavSub11 *structPtr) -{ - struct PokenavSub18 *monListPtr; - u8 markings; - u32 ret = PARTY_CONDITION_FUNC_NONE, boxId, monId; - - if (!HandleMonMarkingsMenuInput()) - { - structPtr->monMarks[structPtr->mark] = GetMonMarkingsData(); - monListPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MON_LIST); - boxId = monListPtr->monData[monListPtr->currIndex].boxId; - monId = monListPtr->monData[monListPtr->currIndex].monId; - markings = structPtr->monMarks[structPtr->mark]; - - if (boxId == TOTAL_BOXES_COUNT) - SetMonData(&gPlayerParty[monId], MON_DATA_MARKINGS, &markings); - else - SetBoxMonDataAt(boxId, monId, MON_DATA_MARKINGS, &markings); - - structPtr->callback = HandlePartyConditionInput; - ret = PARTY_CONDITION_FUNC_CLOSE_MARKINGS; - } - - return ret; -} - -u32 GetConditionReturnCallback(struct PokenavSub11 *structPtr) -{ - if (structPtr->searchMode == 0) - return POKENAV_CONDITION_MENU; - else - return POKENAV_RETURN_CONDITION_SEARCH; -} - -void FreePartyConditionSubstruct1(void) -{ - struct PokenavSub11 *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_CONDITION_GRAPH); - if (structPtr->searchMode == 0) - FreePokenavSubstruct(POKENAV_SUBSTRUCT_MON_LIST); - - FreePokenavSubstruct(POKENAV_SUBSTRUCT_CONDITION_GRAPH); -} - -u8 ConditionGraphHandleDpadInput(struct PokenavSub11 *structPtr) -{ - struct PokenavSub18 *monListPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MON_LIST); - u8 ret = 0; - - if (JOY_HELD(DPAD_UP)) - { - if (structPtr->searchMode == 0 || monListPtr->currIndex != 0) - { - PlaySE(SE_SELECT); - ret = SwitchConditionSummaryIndex(1); - } - } - else if (JOY_HELD(DPAD_DOWN)) - { - if (structPtr->searchMode == 0 || monListPtr->currIndex < monListPtr->listCount - 1) - { - PlaySE(SE_SELECT); - ret = SwitchConditionSummaryIndex(0); - } - } - - return ret; -} - -u8 SwitchConditionSummaryIndex(u8 moveUp) -{ - u16 r7; - bool8 wasNotLastMon, isNotLastMon; - struct PokenavSub11 *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_CONDITION_GRAPH); - struct PokenavSub18 *monListPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MON_LIST); - - r7 = (moveUp) ? structPtr->unk6788 : structPtr->unk6787; - sub_81D1F84(&structPtr->conditionData, structPtr->conditionData.unk14[structPtr->mark], structPtr->conditionData.unk14[r7]); - wasNotLastMon = (monListPtr->currIndex != ((IsConditionMenuSearchMode() != 0) ? monListPtr->listCount : monListPtr->listCount - 1)); - if (moveUp) - { - structPtr->unk6788 = structPtr->unk6787; - structPtr->unk6787 = structPtr->mark; - structPtr->mark = r7; - structPtr->unk6789 = structPtr->unk6788; - - monListPtr->currIndex = (monListPtr->currIndex == 0) ? monListPtr->listCount - 1 : monListPtr->currIndex - 1; - structPtr->monIndex = (monListPtr->currIndex != 0) ? monListPtr->currIndex - 1 : monListPtr->listCount - 1; - } - else - { - structPtr->unk6787 = structPtr->unk6788; - structPtr->unk6788 = structPtr->mark; - structPtr->mark = r7; - structPtr->unk6789 = structPtr->unk6787; - - monListPtr->currIndex = (monListPtr->currIndex < monListPtr->listCount - 1) ? monListPtr->currIndex + 1 : 0; - structPtr->monIndex = (monListPtr->currIndex < monListPtr->listCount - 1) ? monListPtr->currIndex + 1 : 0; - } - - isNotLastMon = (monListPtr->currIndex != ((IsConditionMenuSearchMode() != 0) ? monListPtr->listCount : monListPtr->listCount - 1)); - - if (!wasNotLastMon) - return PARTY_CONDITION_FUNC_NO_TRANSITION; - else if (!isNotLastMon) - return PARTY_CONDITION_FUNC_SLIDE_MON_OUT; - else - return PARTY_CONDITION_FUNC_SLIDE_MON_IN; -} - -bool32 LoadPartyConditionMenuGfx(void) -{ - s32 var; - struct PokenavSub11 *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_CONDITION_GRAPH); - struct PokenavSub18 *monListPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MON_LIST); - - switch (structPtr->state) - { - case 0: - CopyMonNameGenderLocation(monListPtr->currIndex, 0); - break; - case 1: - GetMonConditionGraphData(monListPtr->currIndex, 0); - break; - case 2: - ConditionGraphDrawMonPic(monListPtr->currIndex, 0); - break; - case 3: - if (monListPtr->listCount == 1) - { - structPtr->mark = 0; - structPtr->unk6787 = 0; - structPtr->unk6788 = 0; - structPtr->state = 0; - return TRUE; - } - else - { - structPtr->mark = 0; - structPtr->unk6787 = 1; - structPtr->unk6788 = 2; - } - break; - // These were probably ternaries just like cases 7-9, but couldn't match it any other way. - case 4: - var = monListPtr->currIndex + 1; - if (var >= monListPtr->listCount) - var = 0; - CopyMonNameGenderLocation(var, 1); - break; - case 5: - var = monListPtr->currIndex + 1; - if (var >= monListPtr->listCount) - var = 0; - GetMonConditionGraphData(var, 1); - break; - case 6: - var = monListPtr->currIndex + 1; - if (var >= monListPtr->listCount) - var = 0; - ConditionGraphDrawMonPic(var, 1); - break; - case 7: - CopyMonNameGenderLocation((monListPtr->currIndex - 1 >= 0) ? monListPtr->currIndex - 1 : monListPtr->listCount - 1, 2); - break; - case 8: - GetMonConditionGraphData((monListPtr->currIndex - 1 >= 0) ? monListPtr->currIndex - 1 : monListPtr->listCount - 1, 2); - break; - case 9: - ConditionGraphDrawMonPic((monListPtr->currIndex - 1 >= 0) ? monListPtr->currIndex - 1 : monListPtr->listCount - 1, 2); - structPtr->state = 0; - return TRUE; - } - - structPtr->state++; - return FALSE; -} - -bool32 SetConditionGraphData(u8 mode) -{ - struct PokenavSub11 *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_CONDITION_GRAPH); - - switch (mode) - { - case 0: - CopyMonNameGenderLocation(structPtr->monIndex, structPtr->unk6789); - break; - case 1: - GetMonConditionGraphData(structPtr->monIndex, structPtr->unk6789); - break; - case 2: - ConditionGraphDrawMonPic(structPtr->monIndex, structPtr->unk6789); - return TRUE; - } - - return FALSE; -} - -u8 *CopyStringLeftAlignedToConditionData(u8 *dst, const u8 *src, s16 n) -{ - while (*src != EOS) - *dst++ = *src++, n--; - - while (n-- > 0) - *dst++ = CHAR_SPACE; - - *dst = EOS; - return dst; -} - -u8 *CopyMonConditionNameGender(u8 *str, u16 id, bool8 arg3) -{ - u16 boxId, monId, gender, species, level, lvlDigits; - struct BoxPokemon *boxMon; - u8 *txtPtr, *str_; - struct PokenavSub18 *monListPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MON_LIST); - - boxId = monListPtr->monData[id].boxId; - monId = monListPtr->monData[id].monId; - *(str++) = EXT_CTRL_CODE_BEGIN; - *(str++) = EXT_CTRL_CODE_COLOR_HIGHLIGHT_SHADOW; - *(str++) = TEXT_COLOR_BLUE; - *(str++) = TEXT_COLOR_TRANSPARENT; - *(str++) = TEXT_COLOR_LIGHT_BLUE; - - if (GetBoxOrPartyMonData(boxId, monId, MON_DATA_IS_EGG, NULL)) - return StringCopyPadded(str, gText_EggNickname, CHAR_SPACE, 12); - - GetBoxOrPartyMonData(boxId, monId, MON_DATA_NICKNAME, str); - StringGetEnd10(str); - species = GetBoxOrPartyMonData(boxId, monId, MON_DATA_SPECIES, NULL); - if (boxId == TOTAL_BOXES_COUNT) - { - level = GetMonData(&gPlayerParty[monId], MON_DATA_LEVEL); - gender = GetMonGender(&gPlayerParty[monId]); - } - else - { - boxMon = GetBoxedMonPtr(boxId, monId); - gender = GetBoxMonGender(boxMon); - level = GetLevelFromBoxMonExp(boxMon); - } - - if ((species == SPECIES_NIDORAN_F || species == SPECIES_NIDORAN_M) && !StringCompare(str, gSpeciesNames[species])) - gender = MON_GENDERLESS; - - str_ = str; // For some reason, a variable is needed to match. - while (*str_ != EOS) - (str_++); - - *(str_++) = EXT_CTRL_CODE_BEGIN; - *(str_++) = EXT_CTRL_CODE_SKIP; - *(str_++) = 60; - switch (gender) - { - default: - *(str_++) = CHAR_SPACER; // Genderless - break; - case MON_MALE: - *(str_++) = EXT_CTRL_CODE_BEGIN; - *(str_++) = EXT_CTRL_CODE_COLOR; - *(str_++) = TEXT_COLOR_RED; - *(str_++) = EXT_CTRL_CODE_BEGIN; - *(str_++) = EXT_CTRL_CODE_SHADOW; - *(str_++) = TEXT_COLOR_LIGHT_RED; - *(str_++) = CHAR_MALE; - break; - case MON_FEMALE: - *(str_++) = EXT_CTRL_CODE_BEGIN; - *(str_++) = EXT_CTRL_CODE_COLOR; - *(str_++) = TEXT_COLOR_GREEN; - *(str_++) = EXT_CTRL_CODE_BEGIN; - *(str_++) = EXT_CTRL_CODE_SHADOW; - *(str_++) = TEXT_COLOR_LIGHT_GREEN; - *(str_++) = CHAR_FEMALE; - break; - } - - *(str_++) = EXT_CTRL_CODE_BEGIN; - *(str_++) = EXT_CTRL_CODE_COLOR_HIGHLIGHT_SHADOW; - *(str_++) = TEXT_COLOR_BLUE; - *(str_++) = TEXT_COLOR_TRANSPARENT; - *(str_++) = TEXT_COLOR_LIGHT_BLUE; - *(str_++) = CHAR_SLASH; - *(str_++) = CHAR_EXTRA_SYMBOL; - *(str_++) = CHAR_LV_2; - txtPtr = str_; - str_ = ConvertIntToDecimalStringN(str_, level, STR_CONV_MODE_LEFT_ALIGN, 3); - lvlDigits = str_ - txtPtr; - *(str_++) = CHAR_SPACE; - if (!arg3) - { - lvlDigits = 3 - lvlDigits; - while (lvlDigits-- != 0) - *(str_++) = CHAR_SPACE; - } - - *str_ = EOS; - return str_; -} - -void CopyMonNameGenderLocation(s16 id, u8 arg1) -{ - u16 boxId, i; - struct PokenavSub11 *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_CONDITION_GRAPH); - struct PokenavSub18 *monListPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MON_LIST); - - if (id != (IsConditionMenuSearchMode() != 0 ? monListPtr->listCount : monListPtr->listCount - 1)) - { - CopyMonConditionNameGender(structPtr->nameBuffer[arg1], id, FALSE); - boxId = monListPtr->monData[id].boxId; - structPtr->searchLocBuffer[arg1][0] = EXT_CTRL_CODE_BEGIN; - structPtr->searchLocBuffer[arg1][1] = EXT_CTRL_CODE_COLOR_HIGHLIGHT_SHADOW; - structPtr->searchLocBuffer[arg1][2] = TEXT_COLOR_BLUE; - structPtr->searchLocBuffer[arg1][3] = TEXT_COLOR_TRANSPARENT; - structPtr->searchLocBuffer[arg1][4] = TEXT_COLOR_LIGHT_BLUE; - if (boxId == TOTAL_BOXES_COUNT) - CopyStringLeftAlignedToConditionData(&structPtr->searchLocBuffer[arg1][5], gText_InParty, 8); - else - CopyStringLeftAlignedToConditionData(&structPtr->searchLocBuffer[arg1][5], GetBoxNamePtr(boxId), BOX_NAME_LENGTH); - } - else - { - for (i = 0; i < 12; i++) - structPtr->nameBuffer[arg1][i] = CHAR_SPACE; - structPtr->nameBuffer[arg1][i] = EOS; - - for (i = 0; i < 8; i++) - structPtr->searchLocBuffer[arg1][i] = CHAR_SPACE; - structPtr->searchLocBuffer[arg1][i] = EOS; - } -} - -void InitPartyConditionListParameters(void) -{ - u16 i, count; - struct PokenavSub11 *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_CONDITION_GRAPH); - struct PokenavSub18 *monListPtr = AllocSubstruct(POKENAV_SUBSTRUCT_MON_LIST, sizeof(struct PokenavSub18)); - - structPtr->searchMode = 0; - for (i = 0, count = 0; i < CalculatePlayerPartyCount(); i++) - { - if (!GetMonData(&gPlayerParty[i], MON_DATA_IS_EGG)) - { - monListPtr->monData[count].boxId = TOTAL_BOXES_COUNT; - monListPtr->monData[count].monId = i; - monListPtr->monData[count].data = 0; - count++; - } - } - - monListPtr->monData[count].boxId = 0; - monListPtr->monData[count].monId = 0; - monListPtr->monData[count].data = 0; - monListPtr->currIndex = 0; - monListPtr->listCount = count + 1; - structPtr->state = 0; -} - -void sub_81CD9F8(void) -{ - struct PokenavSub11 *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_CONDITION_GRAPH); - structPtr->searchMode = 1; - structPtr->state = 0; -} - -void GetMonConditionGraphData(s16 id, u8 arg1) -{ - u16 boxId, monId, i; - struct PokenavSub11 *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_CONDITION_GRAPH); - struct PokenavSub18 *monListPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MON_LIST); - - if (id != (IsConditionMenuSearchMode() != 0 ? monListPtr->listCount : monListPtr->listCount - 1)) - { - boxId = monListPtr->monData[id].boxId; - monId = monListPtr->monData[id].monId; - structPtr->conditionData.stat[arg1][0] = GetBoxOrPartyMonData(boxId, monId, MON_DATA_COOL, NULL); - structPtr->conditionData.stat[arg1][1] = GetBoxOrPartyMonData(boxId, monId, MON_DATA_TOUGH, NULL); - structPtr->conditionData.stat[arg1][2] = GetBoxOrPartyMonData(boxId, monId, MON_DATA_SMART, NULL); - structPtr->conditionData.stat[arg1][3] = GetBoxOrPartyMonData(boxId, monId, MON_DATA_CUTE, NULL); - structPtr->conditionData.stat[arg1][4] = GetBoxOrPartyMonData(boxId, monId, MON_DATA_BEAUTY, NULL); - structPtr->sheen[arg1] = (GetBoxOrPartyMonData(boxId, monId, MON_DATA_SHEEN, NULL) != 255) - ? GetBoxOrPartyMonData(boxId, monId, MON_DATA_SHEEN, NULL) / 29u - : 9; - structPtr->monMarks[arg1] = GetBoxOrPartyMonData(boxId, monId, MON_DATA_MARKINGS, NULL); - sub_81D2754(structPtr->conditionData.stat[arg1], structPtr->conditionData.unk14[arg1]); - } - else - { - for (i = 0; i < FLAVOR_COUNT; i++) - { - structPtr->conditionData.stat[arg1][i] = 0; - structPtr->conditionData.unk14[arg1][i].unk0 = 155; - structPtr->conditionData.unk14[arg1][i].unk2 = 91; - } - } -} - -void ConditionGraphDrawMonPic(s16 index, u8 arg1) -{ - u16 boxId, monId, species; - u32 personality, tid; - struct PokenavSub11 *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_CONDITION_GRAPH); - struct PokenavSub18 *monListPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MON_LIST); - - if (index == (IsConditionMenuSearchMode() != 0 ? monListPtr->listCount : monListPtr->listCount - 1)) - return; - - boxId = monListPtr->monData[index].boxId; - monId = monListPtr->monData[index].monId; - species = GetBoxOrPartyMonData(boxId, monId, MON_DATA_SPECIES2, NULL); - tid = GetBoxOrPartyMonData(boxId, monId, MON_DATA_OT_ID, NULL); - personality = GetBoxOrPartyMonData(boxId, monId, MON_DATA_PERSONALITY, NULL); - LoadSpecialPokePic(&gMonFrontPicTable[species], structPtr->monPicGfx[arg1], species, personality, TRUE); - LZ77UnCompWram(GetMonSpritePalFromSpeciesAndPersonality(species, tid, personality), structPtr->monPal[arg1]); -} - -u16 GetMonListCount(void) -{ - struct PokenavSub18 *monListPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MON_LIST); - return monListPtr->listCount; -} - -u16 GetConditionGraphCurrentMonIndex(void) -{ - struct PokenavSub18 *monListPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MON_LIST); - return monListPtr->currIndex; -} - -struct ConditionGraph *GetConditionGraphDataPtr(void) -{ - struct PokenavSub11 *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_CONDITION_GRAPH); - return &structPtr->conditionData; -} - -u8 GetMonMarkIndex(void) -{ - struct PokenavSub11 *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_CONDITION_GRAPH); - return structPtr->mark; -} - -u8 sub_81CDC9C(void) -{ - struct PokenavSub11 *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_CONDITION_GRAPH); - return structPtr->monIndex; -} - -void *GetConditionMonPicGfx(u8 id) -{ - struct PokenavSub11 *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_CONDITION_GRAPH); - return structPtr->monPicGfx[id]; -} - -void *GetConditionMonPal(u8 id) -{ - struct PokenavSub11 *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_CONDITION_GRAPH); - return structPtr->monPal[id]; -} - -u8 sub_81CDCEC(void) -{ - struct PokenavSub11 *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_CONDITION_GRAPH); - return structPtr->unk6789; -} - -u8 *GetConditionMonNameBuffer(u8 id) -{ - struct PokenavSub11 *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_CONDITION_GRAPH); - return structPtr->nameBuffer[id]; -} - -u8 *GetConditionMonLocationBuffer(u8 id) -{ - struct PokenavSub11 *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_CONDITION_GRAPH); - return structPtr->searchLocBuffer[id]; -} - -u16 GetConditionMonDataBuffer(void) -{ - struct PokenavSub18 *monListPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MON_LIST); - return monListPtr->monData[monListPtr->currIndex].data; -} - -bool32 IsConditionMenuSearchMode(void) -{ - struct PokenavSub11 *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_CONDITION_GRAPH); - if (structPtr->searchMode == 1) - return TRUE; - else - return FALSE; -} - -u8 TryGetMonMarkId(void) -{ - struct PokenavSub11 *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_CONDITION_GRAPH); - if (structPtr->searchMode == 1) - return structPtr->monMarks[structPtr->mark]; - else - return 0; -} - -u8 GetMonSheen(void) -{ - struct PokenavSub11 *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_CONDITION_GRAPH); - return structPtr->sheen[structPtr->mark]; -} diff --git a/src/pokenav_conditions_2.c b/src/pokenav_conditions_2.c deleted file mode 100644 index 4799b163c2..0000000000 --- a/src/pokenav_conditions_2.c +++ /dev/null @@ -1,885 +0,0 @@ -#include "global.h" -#include "bg.h" -#include "window.h" -#include "pokenav.h" -#include "decompress.h" -#include "gpu_regs.h" -#include "graphics.h" -#include "menu.h" -#include "menu_specialized.h" -#include "mon_markings.h" -#include "palette.h" -#include "pokenav.h" -#include "scanline_effect.h" -#include "string_util.h" -#include "strings.h" -#include "text.h" - -u32 LoopedTask_TransitionMons(s32); -u32 LoopedTask_ExitPartyConditionMenu(s32); -u32 LoopedTask_MoveCursorNoTransition(s32); -u32 LoopedTask_SlideMonOut(s32); -u32 LoopedTask_OpenMonMarkingsWindow(s32); -u32 LoopedTask_CloseMonMarkingsWindow(s32); - -BSS_DATA u8 gUnknown_030012BC; - -const u16 gConditionGraphData_Pal[] = INCBIN_U16("graphics/pokenav/condition/graph_data.gbapal"); -const u16 gConditionText_Pal[] = INCBIN_U16("graphics/pokenav/condition/text.gbapal"); -const u32 gUnknown_08623228[] = INCBIN_U32("graphics/pokenav/8623228.4bpp.lz"); -const u32 sConditionGraph_Tilemap[] = INCBIN_U32("graphics/pokenav/862323C.bin.lz"); -const u16 sConditionGraphMonMarkingsPal[] = INCBIN_U16("graphics/pokenav/8623338.gbapal"); - -const struct BgTemplate sPartyConditionBgTemplates[3] = -{ - { - .bg = 1, - .charBaseIndex = 1, - .mapBaseIndex = 0x1F, - .screenSize = 0, - .paletteMode = 0, - .priority = 1, - .baseTile = 0 - }, - { - .bg = 2, - .charBaseIndex = 3, - .mapBaseIndex = 0x1D, - .screenSize = 0, - .paletteMode = 0, - .priority = 2, - .baseTile = 0 - }, - { - .bg = 3, - .charBaseIndex = 2, - .mapBaseIndex = 0x1E, - .screenSize = 0, - .paletteMode = 0, - .priority = 3, - .baseTile = 0 - } -}; - -const struct WindowTemplate sMonNameGenderWindowTemplate = -{ - .bg = 1, - .tilemapLeft = 13, - .tilemapTop = 1, - .width = 13, - .height = 4, - .paletteNum = 15, - .baseBlock = 2 -}; - -const struct WindowTemplate sConditionGraphListIdWindowTemplate = -{ - .bg = 1, - .tilemapLeft = 1, - .tilemapTop = 6, - .width = 7, - .height = 2, - .paletteNum = 15, - .baseBlock = 0x36 -}; - -const struct WindowTemplate sUnusedWindowTemplate1 = -{ - .bg = 1, - .tilemapLeft = 1, - .tilemapTop = 0x1C, - .width = 5, - .height = 2, - .paletteNum = 15, - .baseBlock = 0x44 -}; - -const struct WindowTemplate sUnusedWindowTemplate2 = -{ - .bg = 1, - .tilemapLeft = 13, - .tilemapTop = 0x1C, - .width = 3, - .height = 2, - .paletteNum = 15, - .baseBlock = 0x44 -}; - -const LoopedTask sPartyConditionLoopedTaskFuncs[] = -{ - [PARTY_CONDITION_FUNC_NONE] = NULL, - [PARTY_CONDITION_FUNC_SLIDE_MON_IN] = LoopedTask_TransitionMons, - [PARTY_CONDITION_FUNC_RETURN] = LoopedTask_ExitPartyConditionMenu, - [PARTY_CONDITION_FUNC_NO_TRANSITION] = LoopedTask_MoveCursorNoTransition, - [PARTY_CONDITION_FUNC_SLIDE_MON_OUT] = LoopedTask_SlideMonOut, - [PARTY_CONDITION_FUNC_ADD_MARKINGS] = LoopedTask_OpenMonMarkingsWindow, - [PARTY_CONDITION_FUNC_CLOSE_MARKINGS] = LoopedTask_CloseMonMarkingsWindow -}; - -struct Pokenav7Struct -{ - u32 loopedTaskId; - u8 tilemapBuffers[3][BG_SCREEN_SIZE]; - u8 filler[2]; - u8 partyPokeballSpriteIds[10]; - u32 (*callback)(void); - s16 monTransitionX; - u8 monPicSpriteId; - u16 monPalIndex; - u16 monGfxTileStart; - void *unk181C; - u8 nameGenderWindowId; - u8 listIndexWindowId; - u8 unusedWindowId1; - u8 unusedWindowId2; - struct MonMarkingsMenu monMarks; - struct Sprite *monMarksSprite; - struct Sprite *conditionSparkleSprites[MAX_CONDITION_SPARKLES]; - u8 windowModeState; - u8 filler2[0x38ac - 0x2909]; -}; - -extern s8 GetMonMarkIndex(void); // This function's declaration here is s8 vs. u8 in pokenav_conditions_1.c - -u32 LoopedTask_OpenPartyConditionGraph(s32 state); -u32 GetPartyConditionLoopedTaskActive(void); -void CreateConditionMonPic(u8 var); -void CreateMonMarkingsOrPokeballIndicators(void); -void CopyUnusedConditionWindowsToVram(void); -bool32 UpdateConditionGraphWindows(u8 a0, u16 a1, bool8 a2); -void sub_81CEE44(void); -void DoConditionGraphTransition(void); -void sub_81CEEC8(void); -void sub_81CEE68(void); -void ToggleBg2(bool8 showBg); - -// code -bool32 OpenPartyConditionMenu(void) -{ - struct Pokenav7Struct *structPtr = AllocSubstruct(POKENAV_SUBSTRUCT_MON_MARK_MENU, sizeof(struct Pokenav7Struct)); - - if (structPtr == NULL) - return FALSE; - - structPtr->monPicSpriteId = SPRITE_NONE; - structPtr->loopedTaskId = CreateLoopedTask(LoopedTask_OpenPartyConditionGraph, 1); - structPtr->callback = GetPartyConditionLoopedTaskActive; - structPtr->windowModeState = 0; - return TRUE; -} - -void CreatePartyConditionLoopedTask(s32 id) -{ - struct Pokenav7Struct *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MON_MARK_MENU); - structPtr->loopedTaskId = CreateLoopedTask(sPartyConditionLoopedTaskFuncs[id], 1); - structPtr->callback = GetPartyConditionLoopedTaskActive; -} - -u32 IsPartyConditionLoopedTaskActive(void) -{ - struct Pokenav7Struct *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MON_MARK_MENU); - return structPtr->callback(); -} - -u32 GetPartyConditionLoopedTaskActive(void) -{ - struct Pokenav7Struct *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MON_MARK_MENU); - return IsLoopedTaskActive(structPtr->loopedTaskId); -} - -u32 LoopedTask_OpenPartyConditionGraph(s32 state) -{ - struct Pokenav7Struct *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MON_MARK_MENU); - - switch (state) - { - case 0: - if (LoadPartyConditionMenuGfx() != TRUE) - return LT_PAUSE; - return LT_INC_AND_PAUSE; - case 1: - InitBgTemplates(sPartyConditionBgTemplates, ARRAY_COUNT(sPartyConditionBgTemplates)); - ChangeBgX(1, 0, BG_COORD_SET); - ChangeBgY(1, 0, BG_COORD_SET); - ChangeBgX(2, 0, BG_COORD_SET); - ChangeBgY(2, 0, BG_COORD_SET); - ChangeBgX(3, 0, BG_COORD_SET); - ChangeBgY(3, 0, BG_COORD_SET); - SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_WIN0_ON | DISPCNT_WIN1_ON | DISPCNT_OBJ_ON | DISPCNT_OBJ_1D_MAP | DISPCNT_BG0_ON | DISPCNT_BG3_ON); - SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT1_BG2 | BLDCNT_EFFECT_BLEND | BLDCNT_TGT2_BG3); - SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(11, 4)); - DecompressAndCopyTileDataToVram(3, gPokenavCondition_Gfx, 0, 0, 0); - return LT_INC_AND_PAUSE; - case 2: - if (FreeTempTileDataBuffersIfPossible()) - return LT_PAUSE; - DecompressAndCopyTileDataToVram(2, gUnknown_08623228, 0, 0, 0); - return LT_INC_AND_PAUSE; - case 3: - if (FreeTempTileDataBuffersIfPossible()) - return LT_PAUSE; - - LZ77UnCompVram(gPokenavCondition_Tilemap, structPtr->tilemapBuffers[0]); - SetBgTilemapBuffer(3, structPtr->tilemapBuffers[0]); - if (IsConditionMenuSearchMode() == TRUE) - CopyToBgTilemapBufferRect(3, gPokenavOptions_Tilemap, 0, 5, 9, 4); - - CopyBgTilemapBufferToVram(3); - CopyPaletteIntoBufferUnfaded(gPokenavCondition_Pal, 0x10, 0x20); - CopyPaletteIntoBufferUnfaded(gConditionText_Pal, 0xF0, 0x20); - structPtr->monTransitionX = -80; - return LT_INC_AND_PAUSE; - case 4: - if (FreeTempTileDataBuffersIfPossible()) - return LT_PAUSE; - - LZ77UnCompVram(sConditionGraph_Tilemap, structPtr->tilemapBuffers[2]); - SetBgTilemapBuffer(2, structPtr->tilemapBuffers[2]); - CopyBgTilemapBufferToVram(2); - CopyPaletteIntoBufferUnfaded(gConditionGraphData_Pal, 0x30, 0x20); - SetConditionGraphIOWindows(2); - return LT_INC_AND_PAUSE; - case 5: - BgDmaFill(1, 0, 0, 1); - BgDmaFill(1, 17, 1, 1); - CpuFill32(0, structPtr->tilemapBuffers[1], BG_SCREEN_SIZE); - SetBgTilemapBuffer(1, structPtr->tilemapBuffers[1]); - return LT_INC_AND_PAUSE; - case 6: - if (FreeTempTileDataBuffersIfPossible()) - return LT_PAUSE; - - structPtr->nameGenderWindowId = AddWindow(&sMonNameGenderWindowTemplate); - if (IsConditionMenuSearchMode() == TRUE) - { - structPtr->listIndexWindowId = AddWindow(&sConditionGraphListIdWindowTemplate); - structPtr->unusedWindowId1 = AddWindow(&sUnusedWindowTemplate1); - structPtr->unusedWindowId2 = AddWindow(&sUnusedWindowTemplate2); - } - DeactivateAllTextPrinters(); - return LT_INC_AND_PAUSE; - case 7: - CreateConditionMonPic(0); - return LT_INC_AND_PAUSE; - case 8: - CreateMonMarkingsOrPokeballIndicators(); - return LT_INC_AND_PAUSE; - case 9: - if (IsConditionMenuSearchMode() == TRUE) - CopyUnusedConditionWindowsToVram(); - return LT_INC_AND_PAUSE; - case 10: - UpdateConditionGraphWindows(0, GetMonMarkIndex(), TRUE); - return LT_INC_AND_PAUSE; - case 11: - UpdateConditionGraphWindows(1, GetMonMarkIndex(), TRUE); - return LT_INC_AND_PAUSE; - case 12: - UpdateConditionGraphWindows(2, GetMonMarkIndex(), TRUE); - return LT_INC_AND_PAUSE; - case 13: - if (UpdateConditionGraphWindows(3, GetMonMarkIndex(), TRUE) != TRUE) - return LT_PAUSE; - PutWindowTilemap(structPtr->nameGenderWindowId); - if (IsConditionMenuSearchMode() == TRUE) - { - PutWindowTilemap(structPtr->listIndexWindowId); - PutWindowTilemap(structPtr->unusedWindowId1); - PutWindowTilemap(structPtr->unusedWindowId2); - } - return LT_INC_AND_PAUSE; - case 14: - ShowBg(1); - HideBg(2); - ShowBg(3); - if (IsConditionMenuSearchMode() == TRUE) - PrintHelpBarText(HELPBAR_CONDITION_MON_STATUS); - return LT_INC_AND_PAUSE; - case 15: - PokenavFadeScreen(1); - if (!IsConditionMenuSearchMode()) - { - LoadLeftHeaderGfxForIndex(POKENAV_GFX_PARTY_MENU); - ShowLeftHeaderGfx(POKENAV_GFX_CONDITION_MENU, TRUE, 0); - ShowLeftHeaderGfx(POKENAV_GFX_PARTY_MENU, TRUE, 0); - } - return LT_INC_AND_PAUSE; - case 16: - if (IsPaletteFadeActive()) - return LT_PAUSE; - if (!IsConditionMenuSearchMode() && AreLeftHeaderSpritesMoving()) - return LT_PAUSE; - SetVBlankCallback_(sub_81CEE44); - return LT_INC_AND_PAUSE; - case 17: - DoConditionGraphTransition(); - InitConditionGraphState(GetConditionGraphDataPtr()); - return LT_INC_AND_PAUSE; - case 18: - if (SetupConditionGraphScanlineParams(GetConditionGraphDataPtr())) - return LT_PAUSE; - return LT_INC_AND_PAUSE; - case 19: - ToggleBg2(TRUE); - return LT_INC_AND_PAUSE; - case 20: - if (!TryUpdateConditionMonTransitionOn(GetConditionGraphDataPtr(), &structPtr->monTransitionX)) - { - ResetConditionSparkleSprites(structPtr->conditionSparkleSprites); - if (IsConditionMenuSearchMode() == TRUE || GetConditionGraphCurrentMonIndex() != GetMonListCount()) - CreateConditionSparkleSprites(structPtr->conditionSparkleSprites, structPtr->monPicSpriteId, GetMonSheen()); - - return LT_FINISH; - } - return LT_PAUSE; - } - - return LT_FINISH; -} - -u32 LoopedTask_ExitPartyConditionMenu(s32 state) -{ - struct Pokenav7Struct *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MON_MARK_MENU); - - switch (state) - { - case 0: - sub_81CEEC8(); - DestroyConditionSparkleSprites(structPtr->conditionSparkleSprites); - return LT_INC_AND_CONTINUE; - case 1: - if (TryUpdateConditionMonTransitionOff(GetConditionGraphDataPtr(), &structPtr->monTransitionX)) - return 2; - ToggleBg2(FALSE); - return LT_INC_AND_CONTINUE; - case 2: - PokenavFadeScreen(0); - if (!IsConditionMenuSearchMode()) - SlideMenuHeaderDown(); - return LT_INC_AND_PAUSE; - case 3: - if (IsPaletteFadeActive() || MainMenuLoopedTaskIsBusy()) - return LT_PAUSE; - FreeConditionSparkles(structPtr->conditionSparkleSprites); - HideBg(1); - HideBg(2); - HideBg(3); - return LT_INC_AND_CONTINUE; - } - - return LT_FINISH; -} - -u32 LoopedTask_TransitionMons(s32 state) -{ - struct Pokenav7Struct *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MON_MARK_MENU); - struct ConditionGraph *unkPtr = GetConditionGraphDataPtr(); - - switch (state) - { - case 0: - SetConditionGraphData(0); - return LT_INC_AND_CONTINUE; - case 1: - SetConditionGraphData(1); - return LT_INC_AND_CONTINUE; - case 2: - SetConditionGraphData(2); - DestroyConditionSparkleSprites(structPtr->conditionSparkleSprites); - return LT_INC_AND_CONTINUE; - case 3: - TransitionConditionGraph(unkPtr); - return LT_INC_AND_CONTINUE; - case 4: - if (!MoveConditionMonOffscreen(&structPtr->monTransitionX)) - { - CreateConditionMonPic(GetMonMarkIndex()); - return LT_INC_AND_CONTINUE; - } - return LT_PAUSE; - case 5: - UpdateConditionGraphWindows(0, GetMonMarkIndex(), FALSE); - return LT_INC_AND_CONTINUE; - case 6: - UpdateConditionGraphWindows(1, GetMonMarkIndex(), FALSE); - return LT_INC_AND_CONTINUE; - case 7: - UpdateConditionGraphWindows(2, GetMonMarkIndex(), FALSE); - return LT_INC_AND_CONTINUE; - case 8: - if (UpdateConditionGraphWindows(3, GetMonMarkIndex(), FALSE) == TRUE) - return LT_INC_AND_CONTINUE; - return LT_PAUSE; - case 9: - unkPtr = GetConditionGraphDataPtr(); - if (!TryUpdateConditionMonTransitionOn(unkPtr, &structPtr->monTransitionX)) - { - ResetConditionSparkleSprites(structPtr->conditionSparkleSprites); - if (IsConditionMenuSearchMode() != TRUE && GetConditionGraphCurrentMonIndex() == GetMonListCount()) - return LT_INC_AND_CONTINUE; - - CreateConditionSparkleSprites(structPtr->conditionSparkleSprites, structPtr->monPicSpriteId, GetMonSheen()); - return LT_INC_AND_CONTINUE; - } - return LT_PAUSE; - } - - return LT_FINISH; -} - -u32 LoopedTask_MoveCursorNoTransition(s32 state) -{ - struct Pokenav7Struct *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MON_MARK_MENU); - - switch (state) - { - case 0: - SetConditionGraphData(0); - return LT_INC_AND_CONTINUE; - case 1: - SetConditionGraphData(1); - return LT_INC_AND_CONTINUE; - case 2: - SetConditionGraphData(2); - return LT_INC_AND_CONTINUE; - case 3: - CreateConditionMonPic(GetMonMarkIndex()); - return LT_INC_AND_CONTINUE; - case 4: - UpdateConditionGraphWindows(0, GetMonMarkIndex(), FALSE); - return LT_INC_AND_CONTINUE; - case 5: - UpdateConditionGraphWindows(1, GetMonMarkIndex(), FALSE); - return LT_INC_AND_CONTINUE; - case 6: - UpdateConditionGraphWindows(2, GetMonMarkIndex(), FALSE); - return LT_INC_AND_CONTINUE; - case 7: - if (UpdateConditionGraphWindows(3, GetMonMarkIndex(), FALSE) == TRUE) - return LT_INC_AND_CONTINUE; - return LT_PAUSE; - case 8: - if (!TryUpdateConditionMonTransitionOn(GetConditionGraphDataPtr(), &structPtr->monTransitionX)) - { - ResetConditionSparkleSprites(structPtr->conditionSparkleSprites); - CreateConditionSparkleSprites(structPtr->conditionSparkleSprites, structPtr->monPicSpriteId, GetMonSheen()); - return LT_INC_AND_CONTINUE; - } - return LT_PAUSE; - } - - return LT_FINISH; -} - -u32 LoopedTask_SlideMonOut(s32 state) -{ - struct Pokenav7Struct *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MON_MARK_MENU); - - switch (state) - { - case 0: - SetConditionGraphData(0); - return LT_INC_AND_CONTINUE; - case 1: - SetConditionGraphData(1); - return LT_INC_AND_CONTINUE; - case 2: - SetConditionGraphData(2); - DestroyConditionSparkleSprites(structPtr->conditionSparkleSprites); - return LT_INC_AND_CONTINUE; - case 3: - if (!TryUpdateConditionMonTransitionOff(GetConditionGraphDataPtr(), &structPtr->monTransitionX)) - return LT_INC_AND_CONTINUE; - return LT_PAUSE; - case 4: - UpdateConditionGraphWindows(0, GetMonMarkIndex(), FALSE); - return LT_INC_AND_CONTINUE; - case 5: - UpdateConditionGraphWindows(1, GetMonMarkIndex(), FALSE); - return LT_INC_AND_CONTINUE; - case 6: - UpdateConditionGraphWindows(2, GetMonMarkIndex(), FALSE); - return LT_INC_AND_CONTINUE; - case 7: - if (UpdateConditionGraphWindows(3, GetMonMarkIndex(), FALSE) == TRUE) - return LT_INC_AND_CONTINUE; - return LT_PAUSE; - } - - return LT_FINISH; -} - -u32 LoopedTask_OpenMonMarkingsWindow(s32 state) -{ - switch (state) - { - case 0: - OpenMonMarkingsMenu(TryGetMonMarkId(), 176, 32); - return LT_INC_AND_CONTINUE; - case 1: - PrintHelpBarText(HELPBAR_CONDITION_MARKINGS); - return LT_INC_AND_CONTINUE; - case 2: - if (WaitForHelpBar() == TRUE) - return LT_PAUSE; - return LT_INC_AND_CONTINUE; - } - - return LT_FINISH; -} - -u32 LoopedTask_CloseMonMarkingsWindow(s32 state) -{ - switch (state) - { - case 0: - FreeMonMarkingsMenu(); - return LT_INC_AND_CONTINUE; - case 1: - PrintHelpBarText(HELPBAR_CONDITION_MON_STATUS); - return LT_INC_AND_CONTINUE; - case 2: - if (WaitForHelpBar() == TRUE) - return LT_PAUSE; - return LT_INC_AND_CONTINUE; - } - - return LT_FINISH; -} - -static u8 *UnusedPrintNumberString(u8 *dst, u16 num) -{ - u8 *txtPtr = ConvertIntToDecimalStringN(dst, num, STR_CONV_MODE_RIGHT_ALIGN, 4); - txtPtr = StringCopy(txtPtr, gText_Number2); - - return txtPtr; -} - -bool32 UpdateConditionGraphWindows(u8 mode, u16 bufferIndex, bool8 winMode) -{ - u8 text[32]; - const u8 *str; - struct Pokenav7Struct *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MON_MARK_MENU); - - switch (mode) - { - case 0: - FillWindowPixelBuffer(structPtr->nameGenderWindowId, 0); - if (IsConditionMenuSearchMode() == TRUE) - FillWindowPixelBuffer(structPtr->listIndexWindowId, 0); - break; - case 1: - if (GetConditionGraphCurrentMonIndex() != GetMonListCount() - 1 || IsConditionMenuSearchMode() == TRUE) - { - str = GetConditionMonNameBuffer(bufferIndex); - AddTextPrinterParameterized(structPtr->nameGenderWindowId, FONT_NORMAL, str, 0, 1, 0, NULL); - } - break; - case 2: - if (IsConditionMenuSearchMode() == TRUE) - { - str = GetConditionMonLocationBuffer(bufferIndex); - AddTextPrinterParameterized(structPtr->nameGenderWindowId, FONT_NORMAL, str, 0, 17, 0, NULL); - text[0] = EXT_CTRL_CODE_BEGIN; - text[1] = EXT_CTRL_CODE_COLOR_HIGHLIGHT_SHADOW; - text[2] = TEXT_COLOR_BLUE; - text[3] = TEXT_COLOR_TRANSPARENT; - text[4] = TEXT_COLOR_LIGHT_BLUE; - StringCopy(text + 5, gText_Number2); - AddTextPrinterParameterized(structPtr->listIndexWindowId, FONT_NORMAL, text, 4, 1, 0, NULL); - ConvertIntToDecimalStringN(text + 5, GetConditionMonDataBuffer(), STR_CONV_MODE_RIGHT_ALIGN, 4); - AddTextPrinterParameterized(structPtr->listIndexWindowId, FONT_NORMAL, text, 28, 1, 0, NULL); - } - break; - case 3: - switch (structPtr->windowModeState) - { - case 0: - if (winMode) - CopyWindowToVram(structPtr->nameGenderWindowId, COPYWIN_FULL); - else - CopyWindowToVram(structPtr->nameGenderWindowId, COPYWIN_GFX); - - if (IsConditionMenuSearchMode() == TRUE) - { - structPtr->windowModeState++; - return FALSE; - } - else - { - structPtr->windowModeState = 0; - return TRUE; - } - case 1: - if (winMode) - CopyWindowToVram(structPtr->listIndexWindowId, COPYWIN_FULL); - else - CopyWindowToVram(structPtr->listIndexWindowId, COPYWIN_GFX); - - structPtr->windowModeState = 0; - return TRUE; - } - } - - return FALSE; -} - -void CopyUnusedConditionWindowsToVram(void) -{ - struct Pokenav7Struct *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MON_MARK_MENU); - - CopyWindowToVram(structPtr->unusedWindowId1, COPYWIN_FULL); - CopyWindowToVram(structPtr->unusedWindowId2, COPYWIN_FULL); -} - -void sub_81CE964(struct Sprite *sprite) -{ - if (sprite->data[0] == GetConditionGraphCurrentMonIndex()) - StartSpriteAnim(sprite, 0); - else - StartSpriteAnim(sprite, 1); -} - -void HighlightCurrentPartyIndexPokeball(struct Sprite *sprite) -{ - if (GetConditionGraphCurrentMonIndex() == GetMonListCount() - 1) - sprite->oam.paletteNum = IndexOfSpritePaletteTag(0x65); - else - sprite->oam.paletteNum = IndexOfSpritePaletteTag(0x66); -} - -void MonMarkingsCallback(struct Sprite *sprite) -{ - StartSpriteAnim(sprite, TryGetMonMarkId()); -} - -void CreateMonMarkingsOrPokeballIndicators(void) -{ - struct SpriteSheet sprSheets[4]; - struct SpriteTemplate sprTemplate; - struct SpritePalette sprPals[3]; - struct SpriteSheet sprSheet; - struct Sprite *sprite; - u16 i, spriteId; - struct Pokenav7Struct *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MON_MARK_MENU); - - LoadConditionSelectionIcons(sprSheets, &sprTemplate, sprPals); - if (IsConditionMenuSearchMode() == TRUE) - { - structPtr->monMarks.baseTileTag = 0x6A; - structPtr->monMarks.basePaletteTag = 0x6A; - InitMonMarkingsMenu(&structPtr->monMarks); - BufferMonMarkingsMenuTiles(); - sprite = CreateMonMarkingAllCombosSprite(0x69, 0x69, sConditionGraphMonMarkingsPal); - sprite->oam.priority = 3; - sprite->x = 192; - sprite->y = 32; - sprite->callback = MonMarkingsCallback; - structPtr->monMarksSprite = sprite; - PokenavFillPalette(IndexOfSpritePaletteTag(0x69), 0); - } - else - { - // party mode -> add pokeballs on right hand side - LoadSpriteSheets(sprSheets); - Pokenav_AllocAndLoadPalettes(sprPals); - for (i = 0; i < GetMonListCount() - 1; i++) - { - spriteId = CreateSprite(&sprTemplate, 226, (i * 20) + 8, 0); - if (spriteId != MAX_SPRITES) - { - structPtr->partyPokeballSpriteIds[i] = spriteId; - gSprites[spriteId].data[0] = i; - gSprites[spriteId].callback = sub_81CE964; - } - else - { - structPtr->partyPokeballSpriteIds[i] = SPRITE_NONE; - } - } - - sprTemplate.tileTag = 0x67; - sprTemplate.callback = SpriteCallbackDummy; - for (; i < 6; i++) - { - spriteId = CreateSprite(&sprTemplate, 230, (i * 20) + 8, 0); - if (spriteId != MAX_SPRITES) - { - structPtr->partyPokeballSpriteIds[i] = spriteId; - gSprites[spriteId].oam.size = 0; - } - else - { - structPtr->partyPokeballSpriteIds[i] = SPRITE_NONE; - } - } - - sprTemplate.tileTag = 0x66; - sprTemplate.callback = HighlightCurrentPartyIndexPokeball; - spriteId = CreateSprite(&sprTemplate, 222, (i * 20) + 8, 0); - if (spriteId != MAX_SPRITES) - { - structPtr->partyPokeballSpriteIds[i] = spriteId; - gSprites[spriteId].oam.shape = SPRITE_SHAPE(32x16); - gSprites[spriteId].oam.size = SPRITE_SIZE(32x16); - } - else - { - structPtr->partyPokeballSpriteIds[i] = SPRITE_NONE; - } - } - - LoadConditionSparkle(&sprSheet, &sprPals[0]); - LoadSpriteSheet(&sprSheet); - sprPals[1].data = NULL; - Pokenav_AllocAndLoadPalettes(sprPals); -} - -void sub_81CEBF4(struct Pokenav7Struct *structPtr) -{ - u8 i; - - if (IsConditionMenuSearchMode() == TRUE) - { - DestroySprite(structPtr->monMarksSprite); - FreeSpriteTilesByTag(0x6A); - FreeSpriteTilesByTag(0x69); - FreeSpritePaletteByTag(0x6A); - FreeSpritePaletteByTag(0x69); - } - else - { - for (i = 0; i < 7; i++) - DestroySprite(&gSprites[structPtr->partyPokeballSpriteIds[i]]); - - FreeSpriteTilesByTag(0x65); - FreeSpriteTilesByTag(0x66); - FreeSpriteTilesByTag(0x67); - FreeSpritePaletteByTag(0x65); - FreeSpritePaletteByTag(0x66); - } - - if (structPtr->monPicSpriteId != SPRITE_NONE) - { - DestroySprite(&gSprites[structPtr->monPicSpriteId]); - FreeSpriteTilesByTag(0x64); - FreeSpritePaletteByTag(0x64); - } -} - -void FreePartyConditionSubstruct2(void) -{ - struct Pokenav7Struct *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MON_MARK_MENU); - - RemoveWindow(structPtr->nameGenderWindowId); - if (IsConditionMenuSearchMode() == TRUE) - { - RemoveWindow(structPtr->listIndexWindowId); - RemoveWindow(structPtr->unusedWindowId1); - RemoveWindow(structPtr->unusedWindowId2); - } - else - { - SetLeftHeaderSpritesInvisibility(); - } - - SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_OBJ_ON | DISPCNT_BG0_ON | DISPCNT_OBJ_1D_MAP); - sub_81CEBF4(structPtr); - sub_81CEE68(); - FreePokenavSubstruct(POKENAV_SUBSTRUCT_MON_MARK_MENU); -} - -void MonPicGfxSpriteCallback(struct Sprite *sprite) -{ - struct Pokenav7Struct *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MON_MARK_MENU); - sprite->x = structPtr->monTransitionX + 38; -} - -void CreateConditionMonPic(u8 id) -{ - struct SpriteTemplate sprTemplate; - struct SpriteSheet sprSheet; - struct SpritePalette sprPal; - u8 spriteId; - struct Pokenav7Struct *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MON_MARK_MENU); - - if (structPtr->monPicSpriteId == SPRITE_NONE) - { - LoadConditionMonPicTemplate(&sprSheet, &sprTemplate, &sprPal); - sprSheet.data = GetConditionMonPicGfx(id); - sprPal.data = GetConditionMonPal(id); - structPtr->monPalIndex = LoadSpritePalette(&sprPal); - structPtr->monGfxTileStart = LoadSpriteSheet(&sprSheet); - spriteId = CreateSprite(&sprTemplate, 38, 104, 0); - structPtr->monPicSpriteId = spriteId; - if (spriteId == MAX_SPRITES) - { - FreeSpriteTilesByTag(0x64); - FreeSpritePaletteByTag(0x64); - structPtr->monPicSpriteId = SPRITE_NONE; - } - else - { - structPtr->monPicSpriteId = spriteId; - gSprites[structPtr->monPicSpriteId].callback = MonPicGfxSpriteCallback; - structPtr->unk181C = (void*)(VRAM) + 0x10000 + (structPtr->monGfxTileStart * 32); - structPtr->monPalIndex = (structPtr->monPalIndex * 16) + 0x100; - } - } - else - { - DmaCopy16Defvars(3, GetConditionMonPicGfx(id), structPtr->unk181C, MON_PIC_SIZE); - LoadPalette(GetConditionMonPal(id), structPtr->monPalIndex, 0x20); - } -} - -void sub_81CEE44(void) -{ - struct ConditionGraph *unk = GetConditionGraphDataPtr(); - LoadOam(); - ProcessSpriteCopyRequests(); - TransferPlttBuffer(); - sub_81D2108(unk); - ScanlineEffect_InitHBlankDmaTransfer(); -} - -void sub_81CEE68(void) -{ - SetPokenavVBlankCallback(); -} - -void ToggleBg2(bool8 showBg) -{ - if (showBg) - ShowBg(2); - else - HideBg(2); -} - -void DoConditionGraphTransition(void) -{ - struct ConditionGraph *conditionPtr = GetConditionGraphDataPtr(); - u8 id = GetMonMarkIndex(); - - gUnknown_030012BC = id; - sub_81D1F84(conditionPtr, conditionPtr->unk14[3], conditionPtr->unk14[id]); - TransitionConditionGraph(conditionPtr); -} - -void sub_81CEEC8(void) -{ - struct ConditionGraph *conditionPtr = GetConditionGraphDataPtr(); - - if (IsConditionMenuSearchMode() || GetConditionGraphCurrentMonIndex() != GetMonListCount() - 1) - sub_81D1F84(conditionPtr, conditionPtr->unk14[GetMonMarkIndex()], conditionPtr->unk14[3]); -} - -u8 GetMonMarkingsData(void) -{ - struct Pokenav7Struct *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MON_MARK_MENU); - - if (IsConditionMenuSearchMode() == 1) - return structPtr->monMarks.markings; - else - return 0; -} diff --git a/src/pokenav_conditions_gfx.c b/src/pokenav_conditions_gfx.c new file mode 100644 index 0000000000..d2fb715ab8 --- /dev/null +++ b/src/pokenav_conditions_gfx.c @@ -0,0 +1,892 @@ +#include "global.h" +#include "bg.h" +#include "window.h" +#include "pokenav.h" +#include "decompress.h" +#include "gpu_regs.h" +#include "graphics.h" +#include "menu.h" +#include "menu_specialized.h" +#include "mon_markings.h" +#include "palette.h" +#include "pokenav.h" +#include "scanline_effect.h" +#include "string_util.h" +#include "strings.h" +#include "text.h" + +static u32 LoopedTask_TransitionMons(s32); +static u32 LoopedTask_ExitConditionGraphMenu(s32); +static u32 LoopedTask_MoveCursorNoTransition(s32); +static u32 LoopedTask_SlideMonOut(s32); +static u32 LoopedTask_OpenMonMarkingsWindow(s32); +static u32 LoopedTask_CloseMonMarkingsWindow(s32); + +static u8 sInitialLoadId; // Never read + +const u16 gConditionGraphData_Pal[] = INCBIN_U16("graphics/pokenav/condition/graph_data.gbapal"); +const u16 gConditionText_Pal[] = INCBIN_U16("graphics/pokenav/condition/text.gbapal"); +static const u32 sConditionGraphData_Gfx[] = INCBIN_U32("graphics/pokenav/condition/graph_data.4bpp.lz"); +static const u32 sConditionGraphData_Tilemap[] = INCBIN_U32("graphics/pokenav/condition/graph_data.bin.lz"); +static const u16 sMonMarkings_Pal[] = INCBIN_U16("graphics/pokenav/condition/mon_markings.gbapal"); + +static const struct BgTemplate sMenuBgTemplates[3] = +{ + { + .bg = 1, + .charBaseIndex = 1, + .mapBaseIndex = 0x1F, + .screenSize = 0, + .paletteMode = 0, + .priority = 1, + .baseTile = 0 + }, + { + .bg = 2, + .charBaseIndex = 3, + .mapBaseIndex = 0x1D, + .screenSize = 0, + .paletteMode = 0, + .priority = 2, + .baseTile = 0 + }, + { + .bg = 3, + .charBaseIndex = 2, + .mapBaseIndex = 0x1E, + .screenSize = 0, + .paletteMode = 0, + .priority = 3, + .baseTile = 0 + } +}; + +static const struct WindowTemplate sMonNameGenderWindowTemplate = +{ + .bg = 1, + .tilemapLeft = 13, + .tilemapTop = 1, + .width = 13, + .height = 4, + .paletteNum = 15, + .baseBlock = 2 +}; + +static const struct WindowTemplate sListIndexWindowTemplate = +{ + .bg = 1, + .tilemapLeft = 1, + .tilemapTop = 6, + .width = 7, + .height = 2, + .paletteNum = 15, + .baseBlock = 0x36 +}; + +static const struct WindowTemplate sUnusedWindowTemplate1 = +{ + .bg = 1, + .tilemapLeft = 1, + .tilemapTop = 0x1C, + .width = 5, + .height = 2, + .paletteNum = 15, + .baseBlock = 0x44 +}; + +static const struct WindowTemplate sUnusedWindowTemplate2 = +{ + .bg = 1, + .tilemapLeft = 13, + .tilemapTop = 0x1C, + .width = 3, + .height = 2, + .paletteNum = 15, + .baseBlock = 0x44 +}; + +static const LoopedTask sLoopedTaskFuncs[] = +{ + [CONDITION_FUNC_NONE] = NULL, + [CONDITION_FUNC_SLIDE_MON_IN] = LoopedTask_TransitionMons, + [CONDITION_FUNC_RETURN] = LoopedTask_ExitConditionGraphMenu, + [CONDITION_FUNC_NO_TRANSITION] = LoopedTask_MoveCursorNoTransition, + [CONDITION_FUNC_SLIDE_MON_OUT] = LoopedTask_SlideMonOut, + [CONDITION_FUNC_ADD_MARKINGS] = LoopedTask_OpenMonMarkingsWindow, + [CONDITION_FUNC_CLOSE_MARKINGS] = LoopedTask_CloseMonMarkingsWindow +}; + +struct Pokenav_ConditionMenuGfx +{ + u32 loopedTaskId; + u8 tilemapBuffers[3][BG_SCREEN_SIZE]; + u8 filler[2]; + u8 partyPokeballSpriteIds[PARTY_SIZE + 1]; + u32 (*callback)(void); + s16 monTransitionX; + u8 monPicSpriteId; + u16 monPalIndex; + u16 monGfxTileStart; + void *monGfxPtr; + u8 nameGenderWindowId; + u8 listIndexWindowId; + u8 unusedWindowId1; + u8 unusedWindowId2; + struct MonMarkingsMenu marksMenu; + struct Sprite *monMarksSprite; + struct Sprite *conditionSparkleSprites[MAX_CONDITION_SPARKLES]; + u8 windowModeState; + u8 filler2[0xFA3]; +}; + +extern s8 GetConditionGraphMenuCurrentLoadIndex(void); // This function's declaration here is s8 vs. u8 in pokenav_conditions.c + +static u32 LoopedTask_OpenConditionGraphMenu(s32); +static u32 GetConditionGraphMenuLoopedTaskActive(void); +static void CreateConditionMonPic(u8); +static void CreateMonMarkingsOrPokeballIndicators(void); +static void CopyUnusedConditionWindowsToVram(void); +static bool32 UpdateConditionGraphMenuWindows(u8, u16, bool8); +static void VBlankCB_PokenavConditionGraph(void); +static void DoConditionGraphEnterTransition(void); +static void DoConditionGraphExitTransition(void); +static void SetExitVBlank(void); +static void ToggleGraphData(bool8); + +bool32 OpenConditionGraphMenu(void) +{ + struct Pokenav_ConditionMenuGfx *menu = AllocSubstruct(POKENAV_SUBSTRUCT_CONDITION_GRAPH_MENU_GFX, sizeof(struct Pokenav_ConditionMenuGfx)); + + if (menu == NULL) + return FALSE; + + menu->monPicSpriteId = SPRITE_NONE; + menu->loopedTaskId = CreateLoopedTask(LoopedTask_OpenConditionGraphMenu, 1); + menu->callback = GetConditionGraphMenuLoopedTaskActive; + menu->windowModeState = 0; + return TRUE; +} + +void CreateConditionGraphMenuLoopedTask(s32 id) +{ + struct Pokenav_ConditionMenuGfx *menu = GetSubstructPtr(POKENAV_SUBSTRUCT_CONDITION_GRAPH_MENU_GFX); + menu->loopedTaskId = CreateLoopedTask(sLoopedTaskFuncs[id], 1); + menu->callback = GetConditionGraphMenuLoopedTaskActive; +} + +u32 IsConditionGraphMenuLoopedTaskActive(void) +{ + struct Pokenav_ConditionMenuGfx *menu = GetSubstructPtr(POKENAV_SUBSTRUCT_CONDITION_GRAPH_MENU_GFX); + return menu->callback(); +} + +static u32 GetConditionGraphMenuLoopedTaskActive(void) +{ + struct Pokenav_ConditionMenuGfx *menu = GetSubstructPtr(POKENAV_SUBSTRUCT_CONDITION_GRAPH_MENU_GFX); + return IsLoopedTaskActive(menu->loopedTaskId); +} + +static u32 LoopedTask_OpenConditionGraphMenu(s32 state) +{ + struct Pokenav_ConditionMenuGfx *menu = GetSubstructPtr(POKENAV_SUBSTRUCT_CONDITION_GRAPH_MENU_GFX); + + switch (state) + { + case 0: + if (LoadConditionGraphMenuGfx() != TRUE) + return LT_PAUSE; + return LT_INC_AND_PAUSE; + case 1: + InitBgTemplates(sMenuBgTemplates, ARRAY_COUNT(sMenuBgTemplates)); + ChangeBgX(1, 0, BG_COORD_SET); + ChangeBgY(1, 0, BG_COORD_SET); + ChangeBgX(2, 0, BG_COORD_SET); + ChangeBgY(2, 0, BG_COORD_SET); + ChangeBgX(3, 0, BG_COORD_SET); + ChangeBgY(3, 0, BG_COORD_SET); + SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_WIN0_ON | DISPCNT_WIN1_ON | DISPCNT_OBJ_ON | DISPCNT_OBJ_1D_MAP | DISPCNT_BG0_ON | DISPCNT_BG3_ON); + SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT1_BG2 | BLDCNT_EFFECT_BLEND | BLDCNT_TGT2_BG3); + SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(11, 4)); + DecompressAndCopyTileDataToVram(3, gPokenavCondition_Gfx, 0, 0, 0); + return LT_INC_AND_PAUSE; + case 2: + if (FreeTempTileDataBuffersIfPossible()) + return LT_PAUSE; + DecompressAndCopyTileDataToVram(2, sConditionGraphData_Gfx, 0, 0, 0); + return LT_INC_AND_PAUSE; + case 3: + if (FreeTempTileDataBuffersIfPossible()) + return LT_PAUSE; + + LZ77UnCompVram(gPokenavCondition_Tilemap, menu->tilemapBuffers[0]); + SetBgTilemapBuffer(3, menu->tilemapBuffers[0]); + if (IsConditionMenuSearchMode() == TRUE) + CopyToBgTilemapBufferRect(3, gPokenavOptions_Tilemap, 0, 5, 9, 4); + + CopyBgTilemapBufferToVram(3); + CopyPaletteIntoBufferUnfaded(gPokenavCondition_Pal, 0x10, 0x20); + CopyPaletteIntoBufferUnfaded(gConditionText_Pal, 0xF0, 0x20); + menu->monTransitionX = -80; + return LT_INC_AND_PAUSE; + case 4: + if (FreeTempTileDataBuffersIfPossible()) + return LT_PAUSE; + + LZ77UnCompVram(sConditionGraphData_Tilemap, menu->tilemapBuffers[2]); + SetBgTilemapBuffer(2, menu->tilemapBuffers[2]); + CopyBgTilemapBufferToVram(2); + CopyPaletteIntoBufferUnfaded(gConditionGraphData_Pal, 0x30, 0x20); + ConditionGraph_InitWindow(2); + return LT_INC_AND_PAUSE; + case 5: + BgDmaFill(1, 0, 0, 1); + BgDmaFill(1, 17, 1, 1); + CpuFill32(0, menu->tilemapBuffers[1], BG_SCREEN_SIZE); + SetBgTilemapBuffer(1, menu->tilemapBuffers[1]); + return LT_INC_AND_PAUSE; + case 6: + if (FreeTempTileDataBuffersIfPossible()) + return LT_PAUSE; + + menu->nameGenderWindowId = AddWindow(&sMonNameGenderWindowTemplate); + if (IsConditionMenuSearchMode() == TRUE) + { + menu->listIndexWindowId = AddWindow(&sListIndexWindowTemplate); + menu->unusedWindowId1 = AddWindow(&sUnusedWindowTemplate1); + menu->unusedWindowId2 = AddWindow(&sUnusedWindowTemplate2); + } + DeactivateAllTextPrinters(); + return LT_INC_AND_PAUSE; + case 7: + CreateConditionMonPic(0); + return LT_INC_AND_PAUSE; + case 8: + CreateMonMarkingsOrPokeballIndicators(); + return LT_INC_AND_PAUSE; + case 9: + if (IsConditionMenuSearchMode() == TRUE) + CopyUnusedConditionWindowsToVram(); + return LT_INC_AND_PAUSE; + case 10: + UpdateConditionGraphMenuWindows(0, GetConditionGraphMenuCurrentLoadIndex(), TRUE); + return LT_INC_AND_PAUSE; + case 11: + UpdateConditionGraphMenuWindows(1, GetConditionGraphMenuCurrentLoadIndex(), TRUE); + return LT_INC_AND_PAUSE; + case 12: + UpdateConditionGraphMenuWindows(2, GetConditionGraphMenuCurrentLoadIndex(), TRUE); + return LT_INC_AND_PAUSE; + case 13: + if (UpdateConditionGraphMenuWindows(3, GetConditionGraphMenuCurrentLoadIndex(), TRUE) != TRUE) + return LT_PAUSE; + PutWindowTilemap(menu->nameGenderWindowId); + if (IsConditionMenuSearchMode() == TRUE) + { + PutWindowTilemap(menu->listIndexWindowId); + PutWindowTilemap(menu->unusedWindowId1); + PutWindowTilemap(menu->unusedWindowId2); + } + return LT_INC_AND_PAUSE; + case 14: + ShowBg(1); + HideBg(2); + ShowBg(3); + if (IsConditionMenuSearchMode() == TRUE) + PrintHelpBarText(HELPBAR_CONDITION_MON_STATUS); + return LT_INC_AND_PAUSE; + case 15: + PokenavFadeScreen(POKENAV_FADE_FROM_BLACK); + if (!IsConditionMenuSearchMode()) + { + LoadLeftHeaderGfxForIndex(POKENAV_GFX_PARTY_MENU); + ShowLeftHeaderGfx(POKENAV_GFX_CONDITION_MENU, TRUE, 0); + ShowLeftHeaderGfx(POKENAV_GFX_PARTY_MENU, TRUE, 0); + } + return LT_INC_AND_PAUSE; + case 16: + if (IsPaletteFadeActive()) + return LT_PAUSE; + if (!IsConditionMenuSearchMode() && AreLeftHeaderSpritesMoving()) + return LT_PAUSE; + SetVBlankCallback_(VBlankCB_PokenavConditionGraph); + return LT_INC_AND_PAUSE; + case 17: + DoConditionGraphEnterTransition(); + ConditionGraph_InitResetScanline(GetConditionGraphPtr()); + return LT_INC_AND_PAUSE; + case 18: + if (ConditionGraph_ResetScanline(GetConditionGraphPtr())) + return LT_PAUSE; + return LT_INC_AND_PAUSE; + case 19: + ToggleGraphData(TRUE); + return LT_INC_AND_PAUSE; + case 20: + if (!ConditionMenu_UpdateMonEnter(GetConditionGraphPtr(), &menu->monTransitionX)) + { + ResetConditionSparkleSprites(menu->conditionSparkleSprites); + if (IsConditionMenuSearchMode() == TRUE || GetConditionGraphCurrentListIndex() != GetMonListCount()) + CreateConditionSparkleSprites(menu->conditionSparkleSprites, menu->monPicSpriteId, GetNumConditionMonSparkles()); + + return LT_FINISH; + } + return LT_PAUSE; + } + + return LT_FINISH; +} + +static u32 LoopedTask_ExitConditionGraphMenu(s32 state) +{ + struct Pokenav_ConditionMenuGfx *menu = GetSubstructPtr(POKENAV_SUBSTRUCT_CONDITION_GRAPH_MENU_GFX); + + switch (state) + { + case 0: + DoConditionGraphExitTransition(); + DestroyConditionSparkleSprites(menu->conditionSparkleSprites); + return LT_INC_AND_CONTINUE; + case 1: + if (ConditionMenu_UpdateMonExit(GetConditionGraphPtr(), &menu->monTransitionX)) + return 2; + ToggleGraphData(FALSE); + return LT_INC_AND_CONTINUE; + case 2: + PokenavFadeScreen(POKENAV_FADE_TO_BLACK); + if (!IsConditionMenuSearchMode()) + SlideMenuHeaderDown(); + return LT_INC_AND_PAUSE; + case 3: + if (IsPaletteFadeActive() || MainMenuLoopedTaskIsBusy()) + return LT_PAUSE; + FreeConditionSparkles(menu->conditionSparkleSprites); + HideBg(1); + HideBg(2); + HideBg(3); + return LT_INC_AND_CONTINUE; + } + + return LT_FINISH; +} + +static u32 LoopedTask_TransitionMons(s32 state) +{ + struct Pokenav_ConditionMenuGfx *menu = GetSubstructPtr(POKENAV_SUBSTRUCT_CONDITION_GRAPH_MENU_GFX); + struct ConditionGraph *graph = GetConditionGraphPtr(); + + switch (state) + { + case 0: + LoadNextConditionMenuMonData(CONDITION_LOAD_MON_INFO); + return LT_INC_AND_CONTINUE; + case 1: + LoadNextConditionMenuMonData(CONDITION_LOAD_GRAPH); + return LT_INC_AND_CONTINUE; + case 2: + LoadNextConditionMenuMonData(CONDITION_LOAD_MON_PIC); + DestroyConditionSparkleSprites(menu->conditionSparkleSprites); + return LT_INC_AND_CONTINUE; + case 3: + ConditionGraph_TryUpdate(graph); + return LT_INC_AND_CONTINUE; + case 4: + if (!MoveConditionMonOffscreen(&menu->monTransitionX)) + { + CreateConditionMonPic(GetConditionGraphMenuCurrentLoadIndex()); + return LT_INC_AND_CONTINUE; + } + return LT_PAUSE; + case 5: + UpdateConditionGraphMenuWindows(0, GetConditionGraphMenuCurrentLoadIndex(), FALSE); + return LT_INC_AND_CONTINUE; + case 6: + UpdateConditionGraphMenuWindows(1, GetConditionGraphMenuCurrentLoadIndex(), FALSE); + return LT_INC_AND_CONTINUE; + case 7: + UpdateConditionGraphMenuWindows(2, GetConditionGraphMenuCurrentLoadIndex(), FALSE); + return LT_INC_AND_CONTINUE; + case 8: + if (UpdateConditionGraphMenuWindows(3, GetConditionGraphMenuCurrentLoadIndex(), FALSE) == TRUE) + return LT_INC_AND_CONTINUE; + return LT_PAUSE; + case 9: + graph = GetConditionGraphPtr(); + if (!ConditionMenu_UpdateMonEnter(graph, &menu->monTransitionX)) + { + ResetConditionSparkleSprites(menu->conditionSparkleSprites); + if (IsConditionMenuSearchMode() != TRUE && GetConditionGraphCurrentListIndex() == GetMonListCount()) + return LT_INC_AND_CONTINUE; + + CreateConditionSparkleSprites(menu->conditionSparkleSprites, menu->monPicSpriteId, GetNumConditionMonSparkles()); + return LT_INC_AND_CONTINUE; + } + return LT_PAUSE; + } + + return LT_FINISH; +} + +static u32 LoopedTask_MoveCursorNoTransition(s32 state) +{ + struct Pokenav_ConditionMenuGfx *menu = GetSubstructPtr(POKENAV_SUBSTRUCT_CONDITION_GRAPH_MENU_GFX); + + switch (state) + { + case 0: + LoadNextConditionMenuMonData(CONDITION_LOAD_MON_INFO); + return LT_INC_AND_CONTINUE; + case 1: + LoadNextConditionMenuMonData(CONDITION_LOAD_GRAPH); + return LT_INC_AND_CONTINUE; + case 2: + LoadNextConditionMenuMonData(CONDITION_LOAD_MON_PIC); + return LT_INC_AND_CONTINUE; + case 3: + CreateConditionMonPic(GetConditionGraphMenuCurrentLoadIndex()); + return LT_INC_AND_CONTINUE; + case 4: + UpdateConditionGraphMenuWindows(0, GetConditionGraphMenuCurrentLoadIndex(), FALSE); + return LT_INC_AND_CONTINUE; + case 5: + UpdateConditionGraphMenuWindows(1, GetConditionGraphMenuCurrentLoadIndex(), FALSE); + return LT_INC_AND_CONTINUE; + case 6: + UpdateConditionGraphMenuWindows(2, GetConditionGraphMenuCurrentLoadIndex(), FALSE); + return LT_INC_AND_CONTINUE; + case 7: + if (UpdateConditionGraphMenuWindows(3, GetConditionGraphMenuCurrentLoadIndex(), FALSE) == TRUE) + return LT_INC_AND_CONTINUE; + return LT_PAUSE; + case 8: + if (!ConditionMenu_UpdateMonEnter(GetConditionGraphPtr(), &menu->monTransitionX)) + { + ResetConditionSparkleSprites(menu->conditionSparkleSprites); + CreateConditionSparkleSprites(menu->conditionSparkleSprites, menu->monPicSpriteId, GetNumConditionMonSparkles()); + return LT_INC_AND_CONTINUE; + } + return LT_PAUSE; + } + + return LT_FINISH; +} + +static u32 LoopedTask_SlideMonOut(s32 state) +{ + struct Pokenav_ConditionMenuGfx *menu = GetSubstructPtr(POKENAV_SUBSTRUCT_CONDITION_GRAPH_MENU_GFX); + + switch (state) + { + case 0: + LoadNextConditionMenuMonData(CONDITION_LOAD_MON_INFO); + return LT_INC_AND_CONTINUE; + case 1: + LoadNextConditionMenuMonData(CONDITION_LOAD_GRAPH); + return LT_INC_AND_CONTINUE; + case 2: + LoadNextConditionMenuMonData(CONDITION_LOAD_MON_PIC); + DestroyConditionSparkleSprites(menu->conditionSparkleSprites); + return LT_INC_AND_CONTINUE; + case 3: + if (!ConditionMenu_UpdateMonExit(GetConditionGraphPtr(), &menu->monTransitionX)) + return LT_INC_AND_CONTINUE; + return LT_PAUSE; + case 4: + UpdateConditionGraphMenuWindows(0, GetConditionGraphMenuCurrentLoadIndex(), FALSE); + return LT_INC_AND_CONTINUE; + case 5: + UpdateConditionGraphMenuWindows(1, GetConditionGraphMenuCurrentLoadIndex(), FALSE); + return LT_INC_AND_CONTINUE; + case 6: + UpdateConditionGraphMenuWindows(2, GetConditionGraphMenuCurrentLoadIndex(), FALSE); + return LT_INC_AND_CONTINUE; + case 7: + if (UpdateConditionGraphMenuWindows(3, GetConditionGraphMenuCurrentLoadIndex(), FALSE) == TRUE) + return LT_INC_AND_CONTINUE; + return LT_PAUSE; + } + + return LT_FINISH; +} + +static u32 LoopedTask_OpenMonMarkingsWindow(s32 state) +{ + switch (state) + { + case 0: + OpenMonMarkingsMenu(TryGetMonMarkId(), 176, 32); + return LT_INC_AND_CONTINUE; + case 1: + PrintHelpBarText(HELPBAR_CONDITION_MARKINGS); + return LT_INC_AND_CONTINUE; + case 2: + if (WaitForHelpBar() == TRUE) + return LT_PAUSE; + return LT_INC_AND_CONTINUE; + } + + return LT_FINISH; +} + +static u32 LoopedTask_CloseMonMarkingsWindow(s32 state) +{ + switch (state) + { + case 0: + FreeMonMarkingsMenu(); + return LT_INC_AND_CONTINUE; + case 1: + PrintHelpBarText(HELPBAR_CONDITION_MON_STATUS); + return LT_INC_AND_CONTINUE; + case 2: + if (WaitForHelpBar() == TRUE) + return LT_PAUSE; + return LT_INC_AND_CONTINUE; + } + + return LT_FINISH; +} + +static u8 *UnusedPrintNumberString(u8 *dst, u16 num) +{ + u8 *txtPtr = ConvertIntToDecimalStringN(dst, num, STR_CONV_MODE_RIGHT_ALIGN, 4); + txtPtr = StringCopy(txtPtr, gText_Number2); + + return txtPtr; +} + +static bool32 UpdateConditionGraphMenuWindows(u8 mode, u16 bufferIndex, bool8 winMode) +{ + u8 text[32]; + const u8 *str; + struct Pokenav_ConditionMenuGfx *menu = GetSubstructPtr(POKENAV_SUBSTRUCT_CONDITION_GRAPH_MENU_GFX); + + switch (mode) + { + case 0: + FillWindowPixelBuffer(menu->nameGenderWindowId, 0); + if (IsConditionMenuSearchMode() == TRUE) + FillWindowPixelBuffer(menu->listIndexWindowId, 0); + break; + case 1: + if (GetConditionGraphCurrentListIndex() != GetMonListCount() - 1 || IsConditionMenuSearchMode() == TRUE) + { + str = GetConditionMonNameText(bufferIndex); + AddTextPrinterParameterized(menu->nameGenderWindowId, FONT_NORMAL, str, 0, 1, 0, NULL); + } + break; + case 2: + if (IsConditionMenuSearchMode() == TRUE) + { + str = GetConditionMonLocationText(bufferIndex); + AddTextPrinterParameterized(menu->nameGenderWindowId, FONT_NORMAL, str, 0, 17, 0, NULL); + text[0] = EXT_CTRL_CODE_BEGIN; + text[1] = EXT_CTRL_CODE_COLOR_HIGHLIGHT_SHADOW; + text[2] = TEXT_COLOR_BLUE; + text[3] = TEXT_COLOR_TRANSPARENT; + text[4] = TEXT_COLOR_LIGHT_BLUE; + StringCopy(&text[5], gText_Number2); + AddTextPrinterParameterized(menu->listIndexWindowId, FONT_NORMAL, text, 4, 1, 0, NULL); + ConvertIntToDecimalStringN(&text[5], GetConditionMonDataBuffer(), STR_CONV_MODE_RIGHT_ALIGN, 4); + AddTextPrinterParameterized(menu->listIndexWindowId, FONT_NORMAL, text, 28, 1, 0, NULL); + } + break; + case 3: + switch (menu->windowModeState) + { + case 0: + if (winMode) + CopyWindowToVram(menu->nameGenderWindowId, COPYWIN_FULL); + else + CopyWindowToVram(menu->nameGenderWindowId, COPYWIN_GFX); + + if (IsConditionMenuSearchMode() == TRUE) + { + menu->windowModeState++; + return FALSE; + } + else + { + menu->windowModeState = 0; + return TRUE; + } + case 1: + if (winMode) + CopyWindowToVram(menu->listIndexWindowId, COPYWIN_FULL); + else + CopyWindowToVram(menu->listIndexWindowId, COPYWIN_GFX); + + menu->windowModeState = 0; + return TRUE; + } + } + + return FALSE; +} + +static void CopyUnusedConditionWindowsToVram(void) +{ + struct Pokenav_ConditionMenuGfx *menu = GetSubstructPtr(POKENAV_SUBSTRUCT_CONDITION_GRAPH_MENU_GFX); + + CopyWindowToVram(menu->unusedWindowId1, COPYWIN_FULL); + CopyWindowToVram(menu->unusedWindowId2, COPYWIN_FULL); +} + +static void SpriteCB_PartyPokeball(struct Sprite *sprite) +{ + if (sprite->data[0] == GetConditionGraphCurrentListIndex()) + StartSpriteAnim(sprite, CONDITION_ICON_SELECTED); + else + StartSpriteAnim(sprite, CONDITION_ICON_UNSELECTED); +} + +void HighlightCurrentPartyIndexPokeball(struct Sprite *sprite) +{ + if (GetConditionGraphCurrentListIndex() == GetMonListCount() - 1) + sprite->oam.paletteNum = IndexOfSpritePaletteTag(TAG_CONDITION_BALL); + else + sprite->oam.paletteNum = IndexOfSpritePaletteTag(TAG_CONDITION_CANCEL); +} + +void MonMarkingsCallback(struct Sprite *sprite) +{ + StartSpriteAnim(sprite, TryGetMonMarkId()); +} + +static void CreateMonMarkingsOrPokeballIndicators(void) +{ + struct SpriteSheet sprSheets[4]; + struct SpriteTemplate sprTemplate; + struct SpritePalette sprPals[3]; + struct SpriteSheet sprSheet; + struct Sprite *sprite; + u16 i, spriteId; + struct Pokenav_ConditionMenuGfx *menu = GetSubstructPtr(POKENAV_SUBSTRUCT_CONDITION_GRAPH_MENU_GFX); + + LoadConditionSelectionIcons(sprSheets, &sprTemplate, sprPals); + if (IsConditionMenuSearchMode() == TRUE) + { + // Search Mode, load markings menu + menu->marksMenu.baseTileTag = TAG_CONDITION_MARKINGS_MENU; + menu->marksMenu.basePaletteTag = TAG_CONDITION_MARKINGS_MENU; + InitMonMarkingsMenu(&menu->marksMenu); + BufferMonMarkingsMenuTiles(); + sprite = CreateMonMarkingAllCombosSprite(TAG_CONDITION_MON_MARKINGS, TAG_CONDITION_MON_MARKINGS, sMonMarkings_Pal); + sprite->oam.priority = 3; + sprite->x = 192; + sprite->y = 32; + sprite->callback = MonMarkingsCallback; + menu->monMarksSprite = sprite; + PokenavFillPalette(IndexOfSpritePaletteTag(TAG_CONDITION_MON_MARKINGS), 0); + } + else + { + // Party Mode, load Pokéball selection icons + LoadSpriteSheets(sprSheets); + Pokenav_AllocAndLoadPalettes(sprPals); + + // Add icons for occupied slots + for (i = 0; i < GetMonListCount() - 1; i++) + { + spriteId = CreateSprite(&sprTemplate, 226, (i * 20) + 8, 0); + if (spriteId != MAX_SPRITES) + { + menu->partyPokeballSpriteIds[i] = spriteId; + gSprites[spriteId].data[0] = i; + gSprites[spriteId].callback = SpriteCB_PartyPokeball; + } + else + { + menu->partyPokeballSpriteIds[i] = SPRITE_NONE; + } + } + + // Add icons for empty slots + sprTemplate.tileTag = TAG_CONDITION_BALL_PLACEHOLDER; + sprTemplate.callback = SpriteCallbackDummy; + for (; i < PARTY_SIZE; i++) + { + spriteId = CreateSprite(&sprTemplate, 230, (i * 20) + 8, 0); + if (spriteId != MAX_SPRITES) + { + menu->partyPokeballSpriteIds[i] = spriteId; + gSprites[spriteId].oam.size = 0; + } + else + { + menu->partyPokeballSpriteIds[i] = SPRITE_NONE; + } + } + + // Add cancel icon + sprTemplate.tileTag = TAG_CONDITION_CANCEL; + sprTemplate.callback = HighlightCurrentPartyIndexPokeball; + spriteId = CreateSprite(&sprTemplate, 222, (i * 20) + 8, 0); + if (spriteId != MAX_SPRITES) + { + menu->partyPokeballSpriteIds[i] = spriteId; + gSprites[spriteId].oam.shape = SPRITE_SHAPE(32x16); + gSprites[spriteId].oam.size = SPRITE_SIZE(32x16); + } + else + { + menu->partyPokeballSpriteIds[i] = SPRITE_NONE; + } + } + + LoadConditionSparkle(&sprSheet, &sprPals[0]); + LoadSpriteSheet(&sprSheet); + sprPals[1].data = NULL; + Pokenav_AllocAndLoadPalettes(sprPals); +} + +static void FreeConditionMenuGfx(struct Pokenav_ConditionMenuGfx *menu) +{ + u8 i; + + if (IsConditionMenuSearchMode() == TRUE) + { + DestroySprite(menu->monMarksSprite); + FreeSpriteTilesByTag(TAG_CONDITION_MARKINGS_MENU); + FreeSpriteTilesByTag(TAG_CONDITION_MON_MARKINGS); + FreeSpritePaletteByTag(TAG_CONDITION_MARKINGS_MENU); + FreeSpritePaletteByTag(TAG_CONDITION_MON_MARKINGS); + } + else + { + for (i = 0; i < PARTY_SIZE + 1; i++) + DestroySprite(&gSprites[menu->partyPokeballSpriteIds[i]]); + + FreeSpriteTilesByTag(TAG_CONDITION_BALL); + FreeSpriteTilesByTag(TAG_CONDITION_CANCEL); + FreeSpriteTilesByTag(TAG_CONDITION_BALL_PLACEHOLDER); + FreeSpritePaletteByTag(TAG_CONDITION_BALL); + FreeSpritePaletteByTag(TAG_CONDITION_CANCEL); + } + + if (menu->monPicSpriteId != SPRITE_NONE) + { + DestroySprite(&gSprites[menu->monPicSpriteId]); + FreeSpriteTilesByTag(TAG_CONDITION_MON); + FreeSpritePaletteByTag(TAG_CONDITION_MON); + } +} + +void FreeConditionGraphMenuSubstruct2(void) +{ + struct Pokenav_ConditionMenuGfx *menu = GetSubstructPtr(POKENAV_SUBSTRUCT_CONDITION_GRAPH_MENU_GFX); + + RemoveWindow(menu->nameGenderWindowId); + if (IsConditionMenuSearchMode() == TRUE) + { + RemoveWindow(menu->listIndexWindowId); + RemoveWindow(menu->unusedWindowId1); + RemoveWindow(menu->unusedWindowId2); + } + else + { + SetLeftHeaderSpritesInvisibility(); + } + + SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_OBJ_ON | DISPCNT_BG0_ON | DISPCNT_OBJ_1D_MAP); + FreeConditionMenuGfx(menu); + SetExitVBlank(); + FreePokenavSubstruct(POKENAV_SUBSTRUCT_CONDITION_GRAPH_MENU_GFX); +} + +void MonPicGfxSpriteCallback(struct Sprite *sprite) +{ + struct Pokenav_ConditionMenuGfx *menu = GetSubstructPtr(POKENAV_SUBSTRUCT_CONDITION_GRAPH_MENU_GFX); + sprite->x = menu->monTransitionX + 38; +} + +static void CreateConditionMonPic(u8 id) +{ + struct SpriteTemplate sprTemplate; + struct SpriteSheet sprSheet; + struct SpritePalette sprPal; + u8 spriteId; + struct Pokenav_ConditionMenuGfx *menu = GetSubstructPtr(POKENAV_SUBSTRUCT_CONDITION_GRAPH_MENU_GFX); + + if (menu->monPicSpriteId == SPRITE_NONE) + { + LoadConditionMonPicTemplate(&sprSheet, &sprTemplate, &sprPal); + sprSheet.data = GetConditionMonPicGfx(id); + sprPal.data = GetConditionMonPal(id); + menu->monPalIndex = LoadSpritePalette(&sprPal); + menu->monGfxTileStart = LoadSpriteSheet(&sprSheet); + spriteId = CreateSprite(&sprTemplate, 38, 104, 0); + menu->monPicSpriteId = spriteId; + if (spriteId == MAX_SPRITES) + { + FreeSpriteTilesByTag(TAG_CONDITION_MON); + FreeSpritePaletteByTag(TAG_CONDITION_MON); + menu->monPicSpriteId = SPRITE_NONE; + } + else + { + menu->monPicSpriteId = spriteId; + gSprites[menu->monPicSpriteId].callback = MonPicGfxSpriteCallback; + menu->monGfxPtr = (void*)VRAM + BG_VRAM_SIZE + (menu->monGfxTileStart * 32); + menu->monPalIndex = (menu->monPalIndex * 16) + 0x100; + } + } + else + { + DmaCopy16Defvars(3, GetConditionMonPicGfx(id), menu->monGfxPtr, MON_PIC_SIZE); + LoadPalette(GetConditionMonPal(id), menu->monPalIndex, 0x20); + } +} + +static void VBlankCB_PokenavConditionGraph(void) +{ + struct ConditionGraph *graph = GetConditionGraphPtr(); + LoadOam(); + ProcessSpriteCopyRequests(); + TransferPlttBuffer(); + ConditionGraph_Draw(graph); + ScanlineEffect_InitHBlankDmaTransfer(); +} + +static void SetExitVBlank(void) +{ + SetPokenavVBlankCallback(); +} + +static void ToggleGraphData(bool8 showBg) +{ + if (showBg) + ShowBg(2); + else + HideBg(2); +} + +static void DoConditionGraphEnterTransition(void) +{ + struct ConditionGraph *graph = GetConditionGraphPtr(); + u8 id = GetConditionGraphMenuCurrentLoadIndex(); + + sInitialLoadId = id; + ConditionGraph_SetNewPositions(graph, graph->savedPositions[CONDITION_GRAPH_LOAD_MAX - 1], graph->savedPositions[id]); + ConditionGraph_TryUpdate(graph); +} + +// Transition the graph back to empty before exiting. +// This is skipped if the player is in party mode and the cursor +// is on Cancel, in which case the graph is already empty. +static void DoConditionGraphExitTransition(void) +{ + struct ConditionGraph *graph = GetConditionGraphPtr(); + + if (IsConditionMenuSearchMode() || GetConditionGraphCurrentListIndex() != GetMonListCount() - 1) + ConditionGraph_SetNewPositions(graph, graph->savedPositions[GetConditionGraphMenuCurrentLoadIndex()], graph->savedPositions[CONDITION_GRAPH_LOAD_MAX - 1]); +} + +u8 GetMonMarkingsData(void) +{ + struct Pokenav_ConditionMenuGfx *menu = GetSubstructPtr(POKENAV_SUBSTRUCT_CONDITION_GRAPH_MENU_GFX); + + if (IsConditionMenuSearchMode() == 1) + return menu->marksMenu.markings; + else + return 0; +} diff --git a/src/pokenav_conditions_3.c b/src/pokenav_conditions_search_results.c similarity index 52% rename from src/pokenav_conditions_3.c rename to src/pokenav_conditions_search_results.c index 1172774d79..c8790e3598 100644 --- a/src/pokenav_conditions_3.c +++ b/src/pokenav_conditions_search_results.c @@ -21,50 +21,50 @@ enum CONDITION_SEARCH_FUNC_SELECT_MON, }; -struct PokenavSub7 +struct Pokenav_SearchResults { - u32 (*callback)(struct PokenavSub7 *); + u32 (*callback)(struct Pokenav_SearchResults *); u32 loopedTaskId; u8 fill1[4]; s32 boxId; s32 monId; u32 conditionDataId; - u32 returnFromGraph; - u32 isPartyCondition; - struct PokenavSub18 *monList; + bool32 returnFromGraph; + bool32 saveResultsList; + struct PokenavMonList *monList; }; -struct PokenavSub8 +struct Pokenav_SearchResultsGfx { bool32 (*callback)(void); - u32 ltid; //looped task Id + u32 loopedTaskId; u16 winid; bool32 fromGraph; u8 buff[BG_SCREEN_SIZE]; }; // size: 0x810 -static u32 HandleConditionSearchInput_WaitSetup(struct PokenavSub7 *structPtr); -static u32 HandleConditionSearchInput(struct PokenavSub7 *structPtr); -static u32 OpenConditionGraphFromSearchList(struct PokenavSub7 *structPtr); -static u32 ReturnToConditionSearchList(struct PokenavSub7 *structPtr); -static u32 GetConditionSearchLoopedTask(s32 state); -static u32 BuildPartyMonSearchResults(s32 state); -static u32 InitBoxMonSearchResults(s32 state); -static u32 BuildBoxMonSearchResults(s32 state); -static u32 sub_81CF278(s32 state); -static u32 LoopedTask_MoveSearchListCursorUp(s32 state); -static u32 LoopedTask_MoveSearchListCursorDown(s32 state); -static u32 LoopedTask_MoveSearchListPageUp(s32 state); -static u32 LoopedTask_MoveSearchListPageDown(s32 state); -static u32 LoopedTask_ExitConditionSearchMenu(s32 state); -static u32 LoopedTask_SelectSearchResult(s32 state); -static void sub_81CF2C4(struct PokenavSub7 *structPtr, struct PokenavMonList *item); +static u32 HandleConditionSearchInput_WaitSetup(struct Pokenav_SearchResults *); +static u32 HandleConditionSearchInput(struct Pokenav_SearchResults *); +static u32 OpenConditionGraphFromSearchList(struct Pokenav_SearchResults *); +static u32 ReturnToConditionSearchList(struct Pokenav_SearchResults *); +static u32 GetConditionSearchLoopedTask(s32); +static u32 BuildPartyMonSearchResults(s32); +static u32 InitBoxMonSearchResults(s32); +static u32 BuildBoxMonSearchResults(s32); +static u32 ConvertConditionsToListRanks(s32); +static u32 LoopedTask_MoveSearchListCursorUp(s32); +static u32 LoopedTask_MoveSearchListCursorDown(s32); +static u32 LoopedTask_MoveSearchListPageUp(s32); +static u32 LoopedTask_MoveSearchListPageDown(s32); +static u32 LoopedTask_ExitConditionSearchMenu(s32); +static u32 LoopedTask_SelectSearchResult(s32); +static void InsertMonListItem(struct Pokenav_SearchResults *, struct PokenavMonListItem *); static bool32 GetSearchResultCurrentLoopedTaskActive(void); -static u32 LoopedTask_OpenConditionSearchResults(s32 state); -static void AddSearchResultListMenuWindow(struct PokenavSub8 *); -static void PrintSearchResultListMenuItems(struct PokenavSub8 *); -static void InitConditionSearchListMenuTemplate(void); -static void PrintSearchMonListItem(struct PokenavMonList *, u8 *); +static u32 LoopedTask_OpenConditionSearchResults(s32); +static void AddSearchResultListMenuWindow(struct Pokenav_SearchResultsGfx *); +static void PrintSearchResultListMenuItems(struct Pokenav_SearchResultsGfx *); +static void CreateSearchResultsList(void); +static void BufferSearchMonListItem(struct PokenavMonListItem *, u8 *); static const u32 sSearchMonDataIds[] = {MON_DATA_COOL, MON_DATA_BEAUTY, MON_DATA_CUTE, MON_DATA_SMART, MON_DATA_TOUGH}; @@ -73,13 +73,13 @@ static const LoopedTask sConditionSearchLoopedTaskFuncs[] = BuildPartyMonSearchResults, InitBoxMonSearchResults, BuildBoxMonSearchResults, - sub_81CF278 + ConvertConditionsToListRanks }; -static const u16 sConditionSearchResultFramePal[] = INCBIN_U16("graphics/pokenav/condition_search2.gbapal"); -static const u32 sConditionSearchResultTiles[] = INCBIN_U32("graphics/pokenav/condition_search2.4bpp.lz"); -static const u32 sConditionSearchResultTilemap[] = INCBIN_U32("graphics/pokenav/condition_search2.bin.lz"); -static const u16 gUnknown_08623570[] = INCBIN_U16("graphics/pokenav/8623570.gbapal"); +static const u16 sConditionSearchResultFramePal[] = INCBIN_U16("graphics/pokenav/condition/search_results.gbapal"); +static const u32 sConditionSearchResultTiles[] = INCBIN_U32("graphics/pokenav/condition/search_results.4bpp.lz"); +static const u32 sConditionSearchResultTilemap[] = INCBIN_U32("graphics/pokenav/condition/search_results.bin.lz"); +static const u16 sListBg_Pal[] = INCBIN_U16("graphics/pokenav/condition/search_results_list.gbapal"); static const struct BgTemplate sConditionSearchResultBgTemplates[] = { @@ -130,57 +130,57 @@ static const u8 sText_NoGenderSymbol[] = _("{UNK_SPACER}"); bool32 PokenavCallback_Init_ConditionSearch(void) { - struct PokenavSub7 *structPtr = AllocSubstruct(7, sizeof(struct PokenavSub7)); - if (structPtr == NULL) + struct Pokenav_SearchResults *menu = AllocSubstruct(POKENAV_SUBSTRUCT_CONDITION_SEARCH_RESULTS, sizeof(struct Pokenav_SearchResults)); + if (menu == NULL) return FALSE; - structPtr->monList = AllocSubstruct(POKENAV_SUBSTRUCT_MON_LIST, sizeof(struct PokenavSub18)); - if (structPtr->monList == NULL) + menu->monList = AllocSubstruct(POKENAV_SUBSTRUCT_MON_LIST, sizeof(struct PokenavMonList)); + if (menu->monList == NULL) return FALSE; - structPtr->callback = HandleConditionSearchInput_WaitSetup; - structPtr->loopedTaskId = CreateLoopedTask(GetConditionSearchLoopedTask, 1); - structPtr->returnFromGraph = 0; - structPtr->conditionDataId = sSearchMonDataIds[GetSelectedConditionSearch()]; + menu->callback = HandleConditionSearchInput_WaitSetup; + menu->loopedTaskId = CreateLoopedTask(GetConditionSearchLoopedTask, 1); + menu->returnFromGraph = FALSE; + menu->conditionDataId = sSearchMonDataIds[GetSelectedConditionSearch()]; return TRUE; } // return to search results from condition graph bool32 PokenavCallback_Init_ReturnToMonSearchList(void) { - struct PokenavSub7 *structPtr = AllocSubstruct(POKENAV_SUBSTRUCT_CONDITION_SEARCH_RESULTS, sizeof(struct PokenavSub7)); - if (structPtr == NULL) + struct Pokenav_SearchResults *menu = AllocSubstruct(POKENAV_SUBSTRUCT_CONDITION_SEARCH_RESULTS, sizeof(struct Pokenav_SearchResults)); + if (menu == NULL) return FALSE; - structPtr->monList = GetSubstructPtr(POKENAV_SUBSTRUCT_MON_LIST); - structPtr->callback = HandleConditionSearchInput; - structPtr->returnFromGraph = 1; - structPtr->conditionDataId = sSearchMonDataIds[GetSelectedConditionSearch()]; + menu->monList = GetSubstructPtr(POKENAV_SUBSTRUCT_MON_LIST); + menu->callback = HandleConditionSearchInput; + menu->returnFromGraph = TRUE; + menu->conditionDataId = sSearchMonDataIds[GetSelectedConditionSearch()]; return TRUE; } u32 GetConditionSearchResultsCallback(void) { - struct PokenavSub7 *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_CONDITION_SEARCH_RESULTS); - return structPtr->callback(structPtr); + struct Pokenav_SearchResults *menu = GetSubstructPtr(POKENAV_SUBSTRUCT_CONDITION_SEARCH_RESULTS); + return menu->callback(menu); } void FreeSearchResultSubstruct1(void) { - struct PokenavSub7 *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_CONDITION_SEARCH_RESULTS); - if (structPtr->isPartyCondition == 0) + struct Pokenav_SearchResults *menu = GetSubstructPtr(POKENAV_SUBSTRUCT_CONDITION_SEARCH_RESULTS); + if (!menu->saveResultsList) FreePokenavSubstruct(POKENAV_SUBSTRUCT_MON_LIST); FreePokenavSubstruct(POKENAV_SUBSTRUCT_CONDITION_SEARCH_RESULTS); } -static bool32 HandleConditionSearchInput_WaitSetup(struct PokenavSub7 *structPtr) +static bool32 HandleConditionSearchInput_WaitSetup(struct Pokenav_SearchResults *menu) { - if (!IsLoopedTaskActive(structPtr->loopedTaskId)) - structPtr->callback = HandleConditionSearchInput; + if (!IsLoopedTaskActive(menu->loopedTaskId)) + menu->callback = HandleConditionSearchInput; return FALSE; } -static u32 HandleConditionSearchInput(struct PokenavSub7 *structPtr) +static u32 HandleConditionSearchInput(struct Pokenav_SearchResults *menu) { if (JOY_REPEAT(DPAD_UP)) return CONDITION_SEARCH_FUNC_MOVE_UP; @@ -192,60 +192,63 @@ static u32 HandleConditionSearchInput(struct PokenavSub7 *structPtr) return CONDITION_SEARCH_FUNC_PAGE_DOWN; else if (JOY_NEW(B_BUTTON)) { - structPtr->isPartyCondition = 0; - structPtr->callback = ReturnToConditionSearchList; + // Exiting back to main search menu + menu->saveResultsList = FALSE; + menu->callback = ReturnToConditionSearchList; return CONDITION_SEARCH_FUNC_EXIT; } else if (JOY_NEW(A_BUTTON)) { - structPtr->monList->currIndex = GetSelectedPokenavListIndex(); - structPtr->isPartyCondition = 1; - structPtr->callback = OpenConditionGraphFromSearchList; + // Entering graph menu + menu->monList->currIndex = PokenavList_GetSelectedIndex(); + menu->saveResultsList = TRUE; + menu->callback = OpenConditionGraphFromSearchList; return CONDITION_SEARCH_FUNC_SELECT_MON; } else return CONDITION_SEARCH_FUNC_NONE; } -static u32 ReturnToConditionSearchList(struct PokenavSub7 *structPtr) +static u32 ReturnToConditionSearchList(struct Pokenav_SearchResults *menu) { return POKENAV_CONDITION_SEARCH_MENU; } -static u32 OpenConditionGraphFromSearchList(struct PokenavSub7 *structPtr) +static u32 OpenConditionGraphFromSearchList(struct Pokenav_SearchResults *menu) { - return POKENAV_CONDITION_GRAPH_FROM_SEARCH; + return POKENAV_CONDITION_GRAPH_SEARCH; } -static u32 sub_81CF0C0(void) +static u32 GetReturningFromGraph(void) { - struct PokenavSub7 *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_CONDITION_SEARCH_RESULTS); - return structPtr->returnFromGraph; + struct Pokenav_SearchResults *menu = GetSubstructPtr(POKENAV_SUBSTRUCT_CONDITION_SEARCH_RESULTS); + return menu->returnFromGraph; } -static struct PokenavMonList * GetSearchResultsMonDataList(void) +static struct PokenavMonListItem * GetSearchResultsMonDataList(void) { - struct PokenavSub7 * ptr = GetSubstructPtr(POKENAV_SUBSTRUCT_CONDITION_SEARCH_RESULTS); - return ptr->monList->monData; + struct Pokenav_SearchResults * menu = GetSubstructPtr(POKENAV_SUBSTRUCT_CONDITION_SEARCH_RESULTS); + return menu->monList->monData; } static u16 GetSearchResultsMonListCount(void) { - struct PokenavSub7 * ptr = GetSubstructPtr(POKENAV_SUBSTRUCT_CONDITION_SEARCH_RESULTS); - return ptr->monList->listCount; + struct Pokenav_SearchResults * menu = GetSubstructPtr(POKENAV_SUBSTRUCT_CONDITION_SEARCH_RESULTS); + return menu->monList->listCount; } -static s32 GetSearchResultsSelectedMonData(void) +// data below has been set by ConvertConditionsToListRanks +static s32 GetSearchResultsSelectedMonRank(void) { - struct PokenavSub7 * ptr = GetSubstructPtr(POKENAV_SUBSTRUCT_CONDITION_SEARCH_RESULTS); - s32 i = GetSelectedPokenavListIndex(); - return ptr->monList->monData[i].data; + struct Pokenav_SearchResults * menu = GetSubstructPtr(POKENAV_SUBSTRUCT_CONDITION_SEARCH_RESULTS); + s32 i = PokenavList_GetSelectedIndex(); + return menu->monList->monData[i].data; } -static u16 sub_81CF10C(void) +static u16 GetSearchResultsCurrentListIndex(void) { - struct PokenavSub7 * ptr = GetSubstructPtr(POKENAV_SUBSTRUCT_CONDITION_SEARCH_RESULTS); - return ptr->monList->currIndex; + struct Pokenav_SearchResults * menu = GetSubstructPtr(POKENAV_SUBSTRUCT_CONDITION_SEARCH_RESULTS); + return menu->monList->currIndex; } static u32 GetConditionSearchLoopedTask(s32 state) @@ -256,12 +259,12 @@ static u32 GetConditionSearchLoopedTask(s32 state) static u32 BuildPartyMonSearchResults(s32 state) { s32 i; - struct PokenavMonList item; - struct PokenavSub7 * ptr = GetSubstructPtr(POKENAV_SUBSTRUCT_CONDITION_SEARCH_RESULTS); + struct PokenavMonListItem item; + struct Pokenav_SearchResults * menu = GetSubstructPtr(POKENAV_SUBSTRUCT_CONDITION_SEARCH_RESULTS); - ptr->monList->listCount = 0; - ptr->monList->currIndex = 0; - item.boxId = 14; + menu->monList->listCount = 0; + menu->monList->currIndex = 0; + item.boxId = TOTAL_BOXES_COUNT; for (i = 0; i < PARTY_SIZE; i++) { struct Pokemon * pokemon = &gPlayerParty[i]; @@ -270,8 +273,8 @@ static u32 BuildPartyMonSearchResults(s32 state) if (!GetMonData(pokemon, MON_DATA_SANITY_IS_EGG)) { item.monId = i; - item.data = GetMonData(pokemon, ptr->conditionDataId); - sub_81CF2C4(ptr, &item); + item.data = GetMonData(pokemon, menu->conditionDataId); + InsertMonListItem(menu, &item); } } @@ -280,19 +283,19 @@ static u32 BuildPartyMonSearchResults(s32 state) static u32 InitBoxMonSearchResults(s32 state) { - struct PokenavSub7 * ptr = GetSubstructPtr(POKENAV_SUBSTRUCT_CONDITION_SEARCH_RESULTS); - ptr->monId = 0; - ptr->boxId = 0; + struct Pokenav_SearchResults * menu = GetSubstructPtr(POKENAV_SUBSTRUCT_CONDITION_SEARCH_RESULTS); + menu->monId = 0; + menu->boxId = 0; return LT_INC_AND_CONTINUE; } static u32 BuildBoxMonSearchResults(s32 state) { - struct PokenavSub7 * ptr = GetSubstructPtr(POKENAV_SUBSTRUCT_CONDITION_SEARCH_RESULTS); - s32 boxId = ptr->boxId; - s32 monId = ptr->monId; + struct Pokenav_SearchResults * menu = GetSubstructPtr(POKENAV_SUBSTRUCT_CONDITION_SEARCH_RESULTS); + s32 boxId = menu->boxId; + s32 monId = menu->monId; s32 boxCount = 0; - struct PokenavMonList item; + struct PokenavMonListItem item; while (boxId < TOTAL_BOXES_COUNT) { @@ -302,15 +305,15 @@ static u32 BuildBoxMonSearchResults(s32 state) { item.boxId = boxId; item.monId = monId; - item.data = GetBoxMonDataAt(boxId, monId, ptr->conditionDataId); - sub_81CF2C4(ptr, &item); + item.data = GetBoxMonDataAt(boxId, monId, menu->conditionDataId); + InsertMonListItem(menu, &item); } boxCount++; monId++; - if (boxCount > 14) + if (boxCount > TOTAL_BOXES_COUNT) { - ptr->boxId = boxId; - ptr->monId = monId; + menu->boxId = boxId; + menu->monId = monId; return LT_CONTINUE; } } @@ -321,107 +324,111 @@ static u32 BuildBoxMonSearchResults(s32 state) return LT_INC_AND_CONTINUE; } -static u32 sub_81CF278(s32 state) +// Data below is initially set by BuildPartyMonSearchResults / BuildBoxMonSearchResults, and +// is the Pokémon's condition value for the condition they are sorted by. +// The condition value in data is then overwritten with their ranking. +static u32 ConvertConditionsToListRanks(s32 state) { - struct PokenavSub7 * ptr = GetSubstructPtr(POKENAV_SUBSTRUCT_CONDITION_SEARCH_RESULTS); - s32 r6 = ptr->monList->listCount; - s32 r4 = ptr->monList->monData[0].data; + struct Pokenav_SearchResults * menu = GetSubstructPtr(POKENAV_SUBSTRUCT_CONDITION_SEARCH_RESULTS); + s32 listCount = menu->monList->listCount; + s32 prevCondition = menu->monList->monData[0].data; s32 i; - ptr->monList->monData[0].data = 1; - for (i = 1; i < r6; i++) + menu->monList->monData[0].data = 1; + for (i = 1; i < listCount; i++) { - if (ptr->monList->monData[i].data == r4) + if (menu->monList->monData[i].data == prevCondition) { - ptr->monList->monData[i].data = ptr->monList->monData[i - 1].data; + // Same condition value as prev, share rank + menu->monList->monData[i].data = menu->monList->monData[i - 1].data; } else { - r4 = ptr->monList->monData[i].data; - ptr->monList->monData[i].data = i + 1; + prevCondition = menu->monList->monData[i].data; + menu->monList->monData[i].data = i + 1; } } - ptr->returnFromGraph = 1; + menu->returnFromGraph = TRUE; return LT_FINISH; } -static void sub_81CF2C4(struct PokenavSub7 *structPtr, struct PokenavMonList *item) +static void InsertMonListItem(struct Pokenav_SearchResults *menu, struct PokenavMonListItem *item) { u32 left = 0; - u32 right = structPtr->monList->listCount; + u32 right = menu->monList->listCount; u32 insertionIdx = left + (right - left) / 2; while (right != insertionIdx) { - if (item->data > structPtr->monList->monData[insertionIdx].data) + if (item->data > menu->monList->monData[insertionIdx].data) right = insertionIdx; else left = insertionIdx + 1; insertionIdx = left + (right - left) / 2; } - for (right = structPtr->monList->listCount; right > insertionIdx; right--) - structPtr->monList->monData[right] = structPtr->monList->monData[right - 1]; - structPtr->monList->monData[insertionIdx] = *item; - structPtr->monList->listCount++; + for (right = menu->monList->listCount; right > insertionIdx; right--) + menu->monList->monData[right] = menu->monList->monData[right - 1]; + menu->monList->monData[insertionIdx] = *item; + menu->monList->listCount++; } bool32 OpenConditionSearchResults(void) { - struct PokenavSub8 *searchList = AllocSubstruct(POKENAV_SUBSTRUCT_CONDITION_SEARCH_RESULT_LIST, sizeof(struct PokenavSub8)); - if (searchList == NULL) + struct Pokenav_SearchResultsGfx *gfx = AllocSubstruct(POKENAV_SUBSTRUCT_CONDITION_SEARCH_RESULTS_GFX, sizeof(struct Pokenav_SearchResultsGfx)); + if (gfx == NULL) return FALSE; - searchList->ltid = CreateLoopedTask(LoopedTask_OpenConditionSearchResults, 1); - searchList->callback = GetSearchResultCurrentLoopedTaskActive; - searchList->fromGraph = FALSE; + gfx->loopedTaskId = CreateLoopedTask(LoopedTask_OpenConditionSearchResults, 1); + gfx->callback = GetSearchResultCurrentLoopedTaskActive; + gfx->fromGraph = FALSE; return TRUE; } bool32 OpenConditionSearchListFromGraph(void) { - struct PokenavSub8 *searchList = AllocSubstruct(POKENAV_SUBSTRUCT_CONDITION_SEARCH_RESULT_LIST, sizeof(struct PokenavSub8)); - if (searchList == NULL) + struct Pokenav_SearchResultsGfx *gfx = AllocSubstruct(POKENAV_SUBSTRUCT_CONDITION_SEARCH_RESULTS_GFX, sizeof(struct Pokenav_SearchResultsGfx)); + if (gfx == NULL) return FALSE; - searchList->ltid = CreateLoopedTask(LoopedTask_OpenConditionSearchResults, 1); - searchList->callback = GetSearchResultCurrentLoopedTaskActive; - searchList->fromGraph = TRUE; + gfx->loopedTaskId = CreateLoopedTask(LoopedTask_OpenConditionSearchResults, 1); + gfx->callback = GetSearchResultCurrentLoopedTaskActive; + gfx->fromGraph = TRUE; return TRUE; } void CreateSearchResultsLoopedTask(s32 idx) { - struct PokenavSub8 *searchList = GetSubstructPtr(POKENAV_SUBSTRUCT_CONDITION_SEARCH_RESULT_LIST); - searchList->ltid = CreateLoopedTask(sSearchResultLoopTaskFuncs[idx], 1); - searchList->callback = GetSearchResultCurrentLoopedTaskActive; + struct Pokenav_SearchResultsGfx *gfx = GetSubstructPtr(POKENAV_SUBSTRUCT_CONDITION_SEARCH_RESULTS_GFX); + gfx->loopedTaskId = CreateLoopedTask(sSearchResultLoopTaskFuncs[idx], 1); + gfx->callback = GetSearchResultCurrentLoopedTaskActive; } bool32 IsSearchResultLoopedTaskActive(void) { - struct PokenavSub8 *searchList = GetSubstructPtr(POKENAV_SUBSTRUCT_CONDITION_SEARCH_RESULT_LIST); - return searchList->callback(); + struct Pokenav_SearchResultsGfx *gfx = GetSubstructPtr(POKENAV_SUBSTRUCT_CONDITION_SEARCH_RESULTS_GFX); + return gfx->callback(); } bool32 GetSearchResultCurrentLoopedTaskActive(void) { - struct PokenavSub8 *searchList = GetSubstructPtr(POKENAV_SUBSTRUCT_CONDITION_SEARCH_RESULT_LIST); - return IsLoopedTaskActive(searchList->ltid); + struct Pokenav_SearchResultsGfx *gfx = GetSubstructPtr(POKENAV_SUBSTRUCT_CONDITION_SEARCH_RESULTS_GFX); + return IsLoopedTaskActive(gfx->loopedTaskId); } void FreeSearchResultSubstruct2(void) { - struct PokenavSub8 *searchList = GetSubstructPtr(POKENAV_SUBSTRUCT_CONDITION_SEARCH_RESULT_LIST); - sub_81C8234(); - RemoveWindow(searchList->winid); - FreePokenavSubstruct(POKENAV_SUBSTRUCT_CONDITION_SEARCH_RESULT_LIST); + struct Pokenav_SearchResultsGfx *gfx = GetSubstructPtr(POKENAV_SUBSTRUCT_CONDITION_SEARCH_RESULTS_GFX); + DestroyPokenavList(); + RemoveWindow(gfx->winid); + FreePokenavSubstruct(POKENAV_SUBSTRUCT_CONDITION_SEARCH_RESULTS_GFX); } static u32 LoopedTask_OpenConditionSearchResults(s32 state) { - struct PokenavSub8 *searchList = GetSubstructPtr(POKENAV_SUBSTRUCT_CONDITION_SEARCH_RESULT_LIST); + struct Pokenav_SearchResultsGfx *gfx = GetSubstructPtr(POKENAV_SUBSTRUCT_CONDITION_SEARCH_RESULTS_GFX); switch (state) { case 0: InitBgTemplates(sConditionSearchResultBgTemplates, ARRAY_COUNT(sConditionSearchResultBgTemplates)); DecompressAndCopyTileDataToVram(1, sConditionSearchResultTiles, 0, 0, 0); - SetBgTilemapBuffer(1, searchList->buff); + SetBgTilemapBuffer(1, gfx->buff); CopyToBgTilemapBuffer(1, sConditionSearchResultTilemap, 0, 0); CopyBgTilemapBufferToVram(1); CopyPaletteIntoBufferUnfaded(sConditionSearchResultFramePal, 0x10, 0x20); @@ -430,19 +437,19 @@ static u32 LoopedTask_OpenConditionSearchResults(s32 state) case 1: if (FreeTempTileDataBuffersIfPossible()) return LT_PAUSE; - if (!sub_81CF0C0()) + if (!GetReturningFromGraph()) return LT_PAUSE; return LT_INC_AND_PAUSE; case 2: if (FreeTempTileDataBuffersIfPossible()) return LT_PAUSE; - CopyPaletteIntoBufferUnfaded(gUnknown_08623570, 0x20, 32); - InitConditionSearchListMenuTemplate(); + CopyPaletteIntoBufferUnfaded(sListBg_Pal, 0x20, 32); + CreateSearchResultsList(); return LT_INC_AND_PAUSE; case 3: - if (sub_81C8224()) + if (IsCreatePokenavListTaskActive()) return LT_PAUSE; - AddSearchResultListMenuWindow(searchList); + AddSearchResultListMenuWindow(gfx); PrintHelpBarText(HELPBAR_CONDITION_MON_LIST); return LT_INC_AND_PAUSE; case 4: @@ -453,14 +460,14 @@ static u32 LoopedTask_OpenConditionSearchResults(s32 state) ShowBg(1); ShowBg(2); HideBg(3); - if (!searchList->fromGraph) + if (!gfx->fromGraph) { u8 searchGfxId = GetSelectedConditionSearch() + POKENAV_MENUITEM_CONDITION_SEARCH_COOL; LoadLeftHeaderGfxForIndex(searchGfxId); ShowLeftHeaderGfx(searchGfxId, 1, 0); ShowLeftHeaderGfx(POKENAV_GFX_CONDITION_MENU, 1, 0); } - PokenavFadeScreen(1); + PokenavFadeScreen(POKENAV_FADE_FROM_BLACK); return LT_INC_AND_PAUSE; case 5: if (IsPaletteFadeActive()) @@ -474,11 +481,11 @@ static u32 LoopedTask_OpenConditionSearchResults(s32 state) static u32 LoopedTask_MoveSearchListCursorUp(s32 state) { - struct PokenavSub8 *searchList = GetSubstructPtr(POKENAV_SUBSTRUCT_CONDITION_SEARCH_RESULT_LIST); + struct Pokenav_SearchResultsGfx *gfx = GetSubstructPtr(POKENAV_SUBSTRUCT_CONDITION_SEARCH_RESULTS_GFX); switch (state) { case 0: - switch (MatchCall_MoveCursorUp()) + switch (PokenavList_MoveCursorUp()) { case 0: return LT_FINISH; @@ -491,11 +498,11 @@ static u32 LoopedTask_MoveSearchListCursorUp(s32 state) } return LT_INC_AND_PAUSE; case 1: - if (IsMonListLoopedTaskActive()) + if (PokenavList_IsMoveWindowTaskActive()) return LT_PAUSE; // fallthrough case 2: - PrintSearchResultListMenuItems(searchList); + PrintSearchResultListMenuItems(gfx); return LT_INC_AND_PAUSE; case 3: if (IsDma3ManagerBusyWithBgCopy()) @@ -507,11 +514,11 @@ static u32 LoopedTask_MoveSearchListCursorUp(s32 state) static u32 LoopedTask_MoveSearchListCursorDown(s32 state) { - struct PokenavSub8 *searchList = GetSubstructPtr(POKENAV_SUBSTRUCT_CONDITION_SEARCH_RESULT_LIST); + struct Pokenav_SearchResultsGfx *gfx = GetSubstructPtr(POKENAV_SUBSTRUCT_CONDITION_SEARCH_RESULTS_GFX); switch (state) { case 0: - switch (MatchCall_MoveCursorDown()) + switch (PokenavList_MoveCursorDown()) { case 0: return LT_FINISH; @@ -524,11 +531,11 @@ static u32 LoopedTask_MoveSearchListCursorDown(s32 state) } return LT_INC_AND_PAUSE; case 1: - if (IsMonListLoopedTaskActive()) + if (PokenavList_IsMoveWindowTaskActive()) return LT_PAUSE; // fallthrough case 2: - PrintSearchResultListMenuItems(searchList); + PrintSearchResultListMenuItems(gfx); return LT_INC_AND_PAUSE; case 3: if (IsDma3ManagerBusyWithBgCopy()) @@ -540,11 +547,11 @@ static u32 LoopedTask_MoveSearchListCursorDown(s32 state) static u32 LoopedTask_MoveSearchListPageUp(s32 state) { - struct PokenavSub8 *searchList = GetSubstructPtr(POKENAV_SUBSTRUCT_CONDITION_SEARCH_RESULT_LIST); + struct Pokenav_SearchResultsGfx *gfx = GetSubstructPtr(POKENAV_SUBSTRUCT_CONDITION_SEARCH_RESULTS_GFX); switch (state) { case 0: - switch (MatchCall_PageUp()) + switch (PokenavList_PageUp()) { case 0: return LT_FINISH; @@ -557,11 +564,11 @@ static u32 LoopedTask_MoveSearchListPageUp(s32 state) } return LT_INC_AND_PAUSE; case 1: - if (IsMonListLoopedTaskActive()) + if (PokenavList_IsMoveWindowTaskActive()) return LT_PAUSE; // fallthrough case 2: - PrintSearchResultListMenuItems(searchList); + PrintSearchResultListMenuItems(gfx); return LT_INC_AND_PAUSE; case 3: if (IsDma3ManagerBusyWithBgCopy()) @@ -573,11 +580,11 @@ static u32 LoopedTask_MoveSearchListPageUp(s32 state) static u32 LoopedTask_MoveSearchListPageDown(s32 state) { - struct PokenavSub8 *searchList = GetSubstructPtr(POKENAV_SUBSTRUCT_CONDITION_SEARCH_RESULT_LIST); + struct Pokenav_SearchResultsGfx *gfx = GetSubstructPtr(POKENAV_SUBSTRUCT_CONDITION_SEARCH_RESULTS_GFX); switch (state) { case 0: - switch (MatchCall_PageDown()) + switch (PokenavList_PageDown()) { case 0: return LT_FINISH; @@ -590,11 +597,11 @@ static u32 LoopedTask_MoveSearchListPageDown(s32 state) } return LT_INC_AND_PAUSE; case 1: - if (IsMonListLoopedTaskActive()) + if (PokenavList_IsMoveWindowTaskActive()) return LT_PAUSE; // fallthrough case 2: - PrintSearchResultListMenuItems(searchList); + PrintSearchResultListMenuItems(gfx); return LT_INC_AND_PAUSE; case 3: if (IsDma3ManagerBusyWithBgCopy()) @@ -610,7 +617,7 @@ static u32 LoopedTask_ExitConditionSearchMenu(s32 state) { case 0: PlaySE(SE_SELECT); - PokenavFadeScreen(0); + PokenavFadeScreen(POKENAV_FADE_TO_BLACK); SlideMenuHeaderDown(); return LT_INC_AND_PAUSE; case 1: @@ -630,7 +637,7 @@ static u32 LoopedTask_SelectSearchResult(s32 state) { case 0: PlaySE(SE_SELECT); - PokenavFadeScreen(0); + PokenavFadeScreen(POKENAV_FADE_TO_BLACK); return LT_INC_AND_PAUSE; case 1: if (IsPaletteFadeActive()) @@ -640,47 +647,47 @@ static u32 LoopedTask_SelectSearchResult(s32 state) return LT_FINISH; } -static void AddSearchResultListMenuWindow(struct PokenavSub8 *searchList) +static void AddSearchResultListMenuWindow(struct Pokenav_SearchResultsGfx *gfx) { - searchList->winid = AddWindow(&sSearchResultListMenuWindowTemplate); - PutWindowTilemap(searchList->winid); - CopyWindowToVram(searchList->winid, COPYWIN_MAP); - PrintSearchResultListMenuItems(searchList); + gfx->winid = AddWindow(&sSearchResultListMenuWindowTemplate); + PutWindowTilemap(gfx->winid); + CopyWindowToVram(gfx->winid, COPYWIN_MAP); + PrintSearchResultListMenuItems(gfx); } -static void PrintSearchResultListMenuItems(struct PokenavSub8 *searchList) +static void PrintSearchResultListMenuItems(struct Pokenav_SearchResultsGfx *gfx) { - s32 r7 = GetSearchResultsSelectedMonData(); + s32 rank = GetSearchResultsSelectedMonRank(); DynamicPlaceholderTextUtil_Reset(); DynamicPlaceholderTextUtil_SetPlaceholderPtr(0, gStringVar1); *gStringVar1 = EOS; - DynamicPlaceholderTextUtil_ExpandPlaceholders(gStringVar2, gText_NumberF700); - AddTextPrinterParameterized(searchList->winid, FONT_NORMAL, gStringVar2, 4, 1, TEXT_SKIP_DRAW, NULL); - ConvertIntToDecimalStringN(gStringVar1, r7, STR_CONV_MODE_RIGHT_ALIGN, 3); - AddTextPrinterParameterized(searchList->winid, FONT_NORMAL, gStringVar1, 34, 1, TEXT_SKIP_DRAW, NULL); - CopyWindowToVram(searchList->winid, COPYWIN_GFX); + DynamicPlaceholderTextUtil_ExpandPlaceholders(gStringVar2, gText_NumberIndex); + AddTextPrinterParameterized(gfx->winid, FONT_NORMAL, gStringVar2, 4, 1, TEXT_SKIP_DRAW, NULL); + ConvertIntToDecimalStringN(gStringVar1, rank, STR_CONV_MODE_RIGHT_ALIGN, 3); + AddTextPrinterParameterized(gfx->winid, FONT_NORMAL, gStringVar1, 34, 1, TEXT_SKIP_DRAW, NULL); + CopyWindowToVram(gfx->winid, COPYWIN_GFX); } -static void InitConditionSearchListMenuTemplate(void) +static void CreateSearchResultsList(void) { struct PokenavListTemplate template; - template.list.monList = GetSearchResultsMonDataList(); + template.list = (struct PokenavListItem *)GetSearchResultsMonDataList(); template.count = GetSearchResultsMonListCount(); - template.unk8 = 4; - template.unk6 = sub_81CF10C(); + template.itemSize = sizeof(struct PokenavListItem); + template.startIndex = GetSearchResultsCurrentListIndex(); template.item_X = 13; template.windowWidth = 17; template.listTop = 1; template.maxShowed = 8; template.fillValue = 2; template.fontId = FONT_NORMAL; - template.listFunc.printMonFunc = PrintSearchMonListItem; - template.unk14 = NULL; - sub_81C81D4(&sConditionSearchResultBgTemplates[1], &template, 0); + template.bufferItemFunc = (PokenavListBufferItemFunc)BufferSearchMonListItem; + template.iconDrawFunc = NULL; + CreatePokenavList(&sConditionSearchResultBgTemplates[1], &template, 0); } -static void PrintSearchMonListItem(struct PokenavMonList * item, u8 * dest) +static void BufferSearchMonListItem(struct PokenavMonListItem * item, u8 * dest) { u8 gender; u8 level; diff --git a/src/pokenav_list.c b/src/pokenav_list.c new file mode 100644 index 0000000000..bdba1d2c09 --- /dev/null +++ b/src/pokenav_list.c @@ -0,0 +1,1011 @@ +#include "global.h" +#include "pokenav.h" +#include "window.h" +#include "strings.h" +#include "text.h" +#include "bg.h" +#include "menu.h" +#include "decompress.h" +#include "international_string_util.h" + +#define GFXTAG_ARROW 10 +#define PALTAG_ARROW 20 + +struct PokenavListMenuWindow { + u8 bg; + u8 fillValue; + u8 x; + u8 y; + u8 width; + u8 fontId; + u16 tileOffset; + u16 windowId; + u16 unkA; + u16 numPrinted; + u16 numToPrint; +}; + +struct PokenavListWindowState { + // The index of the element at the top of the window. + u16 windowTopIndex; + u16 listLength; + u16 entriesOffscreen; + // The index of the cursor, relative to the top of the window. + u16 selectedIndexOffset; + u16 entriesOnscreen; + u32 listItemSize; + void * listPtr; +}; + +struct PokenavListSub +{ + struct PokenavListMenuWindow listWindow; + u32 unk10; + u32 printIndex; + u32 itemSize; + void * listPtr; + s32 startBgY; + s32 endBgY; + u32 loopedTaskId; + s32 moveDelta; + u32 bgMoveType; + PokenavListBufferItemFunc bufferItemFunc; + void (*iconDrawFunc)(u16, u32, u32); + struct Sprite *rightArrow; + struct Sprite *upArrow; + struct Sprite *downArrow; + u8 itemTextBuffer[64]; +}; + +struct PokenavList +{ + struct PokenavListSub list; + u8 tilemapBuffer[BG_SCREEN_SIZE]; + struct PokenavListWindowState windowState; + s32 eraseIndex; + u32 loopedTaskId; +}; + +static void InitPokenavListBg(struct PokenavList *); +static bool32 CopyPokenavListMenuTemplate(struct PokenavListSub *, const struct BgTemplate *, struct PokenavListTemplate *, s32); +static void InitPokenavListWindowState(struct PokenavListWindowState *, struct PokenavListTemplate *); +static void SpriteCB_UpArrow(struct Sprite *); +static void SpriteCB_DownArrow(struct Sprite *); +static void SpriteCB_RightArrow(struct Sprite *); +static void ToggleListArrows(struct PokenavListSub *, u32); +static void DestroyListArrows(struct PokenavListSub *); +static void CreateListArrowSprites(struct PokenavListWindowState *, struct PokenavListSub *); +static void LoadListArrowGfx(void); +static void PrintMatchCallFlavorText(struct PokenavListWindowState *, struct PokenavListSub *, u32); +static void PrintMatchCallFieldNames(struct PokenavListSub *, u32); +static void PrintMatchCallListTrainerName(struct PokenavListWindowState *, struct PokenavListSub *); +static void PrintCheckPageTrainerName(struct PokenavListWindowState *, struct PokenavListSub *); +static void EraseListEntry(struct PokenavListMenuWindow *, s32, s32); +static void CreateMoveListWindowTask(s32, struct PokenavListSub *); +static void PrintListItems(void *, u32, u32, u32, u32, struct PokenavListSub *); +static void InitListItems(struct PokenavListWindowState *, struct PokenavListSub *); +static void InitPokenavListWindow(struct PokenavListMenuWindow *); +static u32 LoopedTask_CreatePokenavList(s32); +static bool32 IsPrintListItemsTaskActive(void); +static u32 LoopedTask_PrintListItems(s32); +static u32 LoopedTask_MoveListWindow(s32); +static u32 LoopedTask_EraseListForCheckPage(s32); +static u32 LoopedTask_ReshowListFromCheckPage(s32); +static u32 LoopedTask_PrintCheckPageInfo(s32); + +static const u16 sListArrow_Pal[] = INCBIN_U16("graphics/pokenav/list_arrows.gbapal"); +static const u32 sListArrow_Gfx[] = INCBIN_U32("graphics/pokenav/list_arrows.4bpp.lz"); + +static EWRAM_DATA u32 sMoveWindowDownIndex = 0; // Read, but pointlessly + +bool32 CreatePokenavList(const struct BgTemplate *bgTemplate, struct PokenavListTemplate *listTemplate, s32 tileOffset) +{ + struct PokenavList *structPtr = AllocSubstruct(POKENAV_SUBSTRUCT_LIST, sizeof(struct PokenavList)); + if (structPtr == NULL) + return FALSE; + + InitPokenavListWindowState(&structPtr->windowState, listTemplate); + if (!CopyPokenavListMenuTemplate(&structPtr->list, bgTemplate, listTemplate, tileOffset)) + return FALSE; + + CreateLoopedTask(LoopedTask_CreatePokenavList, 6); + return TRUE; +} + +bool32 IsCreatePokenavListTaskActive(void) +{ + return FuncIsActiveLoopedTask(LoopedTask_CreatePokenavList); +} + +void DestroyPokenavList(void) +{ + struct PokenavList *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_LIST); + DestroyListArrows(&structPtr->list); + RemoveWindow(structPtr->list.listWindow.windowId); + FreePokenavSubstruct(POKENAV_SUBSTRUCT_LIST); +} + +static u32 LoopedTask_CreatePokenavList(s32 state) +{ + struct PokenavList *structPtr; + + if (IsDma3ManagerBusyWithBgCopy()) + return LT_PAUSE; + + structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_LIST); + + switch (state) + { + case 0: + InitPokenavListBg(structPtr); + return LT_INC_AND_PAUSE; + case 1: + InitPokenavListWindow(&structPtr->list.listWindow); + return LT_INC_AND_PAUSE; + case 2: + InitListItems(&structPtr->windowState, &structPtr->list); + return LT_INC_AND_PAUSE; + case 3: + if (IsPrintListItemsTaskActive()) + { + return LT_PAUSE; + } + else + { + LoadListArrowGfx(); + return LT_INC_AND_CONTINUE; + } + case 4: + CreateListArrowSprites(&structPtr->windowState, &structPtr->list); + return LT_FINISH; + default: + return LT_FINISH; + } +} + +static void InitPokenavListBg(struct PokenavList *a0) +{ + u16 tileNum = (a0->list.listWindow.fillValue << 12) | a0->list.listWindow.tileOffset; + BgDmaFill(a0->list.listWindow.bg, PIXEL_FILL(1), a0->list.listWindow.tileOffset, 1); + BgDmaFill(a0->list.listWindow.bg, PIXEL_FILL(4), a0->list.listWindow.tileOffset + 1, 1); + SetBgTilemapBuffer(a0->list.listWindow.bg, a0->tilemapBuffer); + FillBgTilemapBufferRect_Palette0(a0->list.listWindow.bg, tileNum, 0, 0, 32, 32); + ChangeBgY(a0->list.listWindow.bg, 0, BG_COORD_SET); + ChangeBgX(a0->list.listWindow.bg, 0, BG_COORD_SET); + ChangeBgY(a0->list.listWindow.bg, a0->list.listWindow.y << 11, BG_COORD_SUB); + CopyBgTilemapBufferToVram(a0->list.listWindow.bg); +} + +static void InitPokenavListWindow(struct PokenavListMenuWindow *listWindow) +{ + FillWindowPixelBuffer(listWindow->windowId, PIXEL_FILL(1)); + PutWindowTilemap(listWindow->windowId); + CopyWindowToVram(listWindow->windowId, COPYWIN_MAP); +} + +static void InitListItems(struct PokenavListWindowState *windowState, struct PokenavListSub *a1) +{ + s32 numToPrint = windowState->listLength - windowState->windowTopIndex; + if (numToPrint > windowState->entriesOnscreen) + numToPrint = windowState->entriesOnscreen; + + PrintListItems(windowState->listPtr, windowState->windowTopIndex, numToPrint, windowState->listItemSize, 0, a1); +} + +static void PrintListItems(void * listPtr, u32 topIndex, u32 numItems, u32 itemSize, u32 a4, struct PokenavListSub *list) +{ + if (numItems == 0) + return; + + list->listPtr = listPtr + topIndex * itemSize; + list->itemSize = itemSize; + list->listWindow.numPrinted = 0; + list->listWindow.numToPrint = numItems; + list->printIndex = topIndex; + list->unk10 = a4; + CreateLoopedTask(LoopedTask_PrintListItems, 5); +} + +static bool32 IsPrintListItemsTaskActive(void) +{ + return FuncIsActiveLoopedTask(LoopedTask_PrintListItems); +} + +static u32 LoopedTask_PrintListItems(s32 state) +{ + u32 row; + struct PokenavListSub *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_LIST); + + switch (state) + { + case 0: + row = (structPtr->listWindow.unkA + structPtr->listWindow.numPrinted + structPtr->unk10) & 0xF; + structPtr->bufferItemFunc(structPtr->listPtr, structPtr->itemTextBuffer); + if (structPtr->iconDrawFunc != NULL) + structPtr->iconDrawFunc(structPtr->listWindow.windowId, structPtr->printIndex, row); + + AddTextPrinterParameterized(structPtr->listWindow.windowId, structPtr->listWindow.fontId, structPtr->itemTextBuffer, 8, (row << 4) + 1, TEXT_SKIP_DRAW, NULL); + if (++structPtr->listWindow.numPrinted >= structPtr->listWindow.numToPrint) + { + // Finished printing items. If icons were being drawn, draw the + // window tilemap and graphics. Otherwise just do the graphics + if (structPtr->iconDrawFunc != NULL) + CopyWindowToVram(structPtr->listWindow.windowId, COPYWIN_FULL); + else + CopyWindowToVram(structPtr->listWindow.windowId, COPYWIN_GFX); + return LT_INC_AND_PAUSE; + } + else + { + structPtr->listPtr += structPtr->itemSize; + structPtr->printIndex++; + return LT_CONTINUE; + } + case 1: + if (IsDma3ManagerBusyWithBgCopy()) + return LT_PAUSE; + return LT_FINISH; + } + return LT_FINISH; +} + +static bool32 ShouldShowUpArrow(void) +{ + struct PokenavList *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_LIST); + + return (structPtr->windowState.windowTopIndex != 0); +} + +static bool32 ShouldShowDownArrow(void) +{ + struct PokenavList *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_LIST); + struct PokenavListWindowState *subPtr = &structPtr->windowState; + + return (subPtr->windowTopIndex + subPtr->entriesOnscreen < subPtr->listLength); +} + +static void MoveListWindow(s32 delta, bool32 printItems) +{ + struct PokenavList *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_LIST); + struct PokenavListWindowState *subPtr = &structPtr->windowState; + + if (delta < 0) + { + if (subPtr->windowTopIndex + delta < 0) + delta = -1 * subPtr->windowTopIndex; + if (printItems) + PrintListItems(subPtr->listPtr, subPtr->windowTopIndex + delta, delta * -1, subPtr->listItemSize, delta, &structPtr->list); + } + else if (printItems) + { + s32 index = sMoveWindowDownIndex = subPtr->windowTopIndex + subPtr->entriesOnscreen; + if (index + delta >= subPtr->listLength) + delta = subPtr->listLength - index; + + PrintListItems(subPtr->listPtr, index, delta, subPtr->listItemSize, subPtr->entriesOnscreen, &structPtr->list); + } + + CreateMoveListWindowTask(delta, &structPtr->list); + subPtr->windowTopIndex += delta; +} + +static void CreateMoveListWindowTask(s32 delta, struct PokenavListSub *list) +{ + list->startBgY = GetBgY(list->listWindow.bg); + list->endBgY = list->startBgY + (delta << 12); + if (delta > 0) + list->bgMoveType = BG_COORD_ADD; + else + list->bgMoveType = BG_COORD_SUB; + list->moveDelta = delta; + list->loopedTaskId = CreateLoopedTask(LoopedTask_MoveListWindow, 6); +} + +static u32 LoopedTask_MoveListWindow(s32 state) +{ + s32 oldY, newY; + bool32 finished; + struct PokenavList *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_LIST); + struct PokenavListSub *subPtr = &structPtr->list; + + switch (state) + { + case 0: + if (!IsPrintListItemsTaskActive()) + return LT_INC_AND_CONTINUE; + return LT_PAUSE; + case 1: + finished = FALSE; + oldY = GetBgY(subPtr->listWindow.bg); + newY = ChangeBgY(subPtr->listWindow.bg, 0x1000, subPtr->bgMoveType); + if (subPtr->bgMoveType == BG_COORD_SUB) + { + if ((oldY > subPtr->endBgY || oldY <= subPtr->startBgY) && newY <= subPtr->endBgY) + finished = TRUE; + } + else // BG_COORD_ADD + { + if ((oldY < subPtr->endBgY || oldY >= subPtr->startBgY) && newY >= subPtr->endBgY) + finished = TRUE; + } + + if (finished) + { + subPtr->listWindow.unkA = (subPtr->listWindow.unkA + subPtr->moveDelta) & 0xF; + ChangeBgY(subPtr->listWindow.bg, subPtr->endBgY, BG_COORD_SET); + return LT_FINISH; + } + return LT_PAUSE; + } + return LT_FINISH; +} + +bool32 PokenavList_IsMoveWindowTaskActive(void) +{ + struct PokenavList *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_LIST); + return IsLoopedTaskActive(structPtr->list.loopedTaskId); +} + +static struct PokenavListWindowState *GetPokenavListWindowState(void) +{ + struct PokenavList *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_LIST); + return &structPtr->windowState; +} + +int PokenavList_MoveCursorUp(void) +{ + struct PokenavListWindowState *structPtr = GetPokenavListWindowState(); + + if (structPtr->selectedIndexOffset != 0) + { + structPtr->selectedIndexOffset--; + return 1; + } + if (ShouldShowUpArrow()) + { + MoveListWindow(-1, TRUE); + return 2; + } + return 0; +} + +int PokenavList_MoveCursorDown(void) +{ + struct PokenavListWindowState *structPtr = GetPokenavListWindowState(); + + if (structPtr->windowTopIndex + structPtr->selectedIndexOffset >= structPtr->listLength - 1) + return 0; + if (structPtr->selectedIndexOffset < structPtr->entriesOnscreen - 1) + { + structPtr->selectedIndexOffset++; + return 1; + } + if (ShouldShowDownArrow()) + { + MoveListWindow(1, TRUE); + return 2; + } + return 0; +} + +int PokenavList_PageUp(void) +{ + s32 scroll; + struct PokenavListWindowState *structPtr = GetPokenavListWindowState(); + + if (ShouldShowUpArrow()) + { + if (structPtr->windowTopIndex >= structPtr->entriesOnscreen) + scroll = structPtr->entriesOnscreen; + else + scroll = structPtr->windowTopIndex; + MoveListWindow(scroll * -1, TRUE); + return 2; + } + else if (structPtr->selectedIndexOffset != 0) + { + structPtr->selectedIndexOffset = 0; + return 1; + } + return 0; +} + +int PokenavList_PageDown(void) +{ + struct PokenavListWindowState *structPtr = GetPokenavListWindowState(); + + if (ShouldShowDownArrow()) + { + s32 windowBottomIndex = structPtr->windowTopIndex + structPtr->entriesOnscreen; + s32 scroll = structPtr->entriesOffscreen - structPtr->windowTopIndex; + + if (windowBottomIndex <= structPtr->entriesOffscreen) + scroll = structPtr->entriesOnscreen; + MoveListWindow(scroll, TRUE); + return 2; + } + else + { + s32 cursor, lastVisibleIndex; + if (structPtr->listLength >= structPtr->entriesOnscreen) + { + cursor = structPtr->selectedIndexOffset; + lastVisibleIndex = structPtr->entriesOnscreen; + } + else + { + cursor = structPtr->selectedIndexOffset; + lastVisibleIndex = structPtr->listLength; + } + lastVisibleIndex -= 1; + if (cursor >= lastVisibleIndex) + return 0; + + structPtr->selectedIndexOffset = lastVisibleIndex; + return 1; + } +} + +u32 PokenavList_GetSelectedIndex(void) +{ + struct PokenavListWindowState *structPtr = GetPokenavListWindowState(); + + return structPtr->windowTopIndex + structPtr->selectedIndexOffset; +} + +u32 PokenavList_GetTopIndex(void) +{ + struct PokenavListWindowState *structPtr = GetPokenavListWindowState(); + + return structPtr->windowTopIndex; +} + +void PokenavList_EraseListForCheckPage(void) +{ + struct PokenavList *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_LIST); + structPtr->eraseIndex = 0; + structPtr->loopedTaskId = CreateLoopedTask(LoopedTask_EraseListForCheckPage, 6); +} + +void PrintCheckPageInfo(s16 delta) +{ + struct PokenavList *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_LIST); + structPtr->windowState.windowTopIndex += delta; + structPtr->eraseIndex = 0; + structPtr->loopedTaskId = CreateLoopedTask(LoopedTask_PrintCheckPageInfo, 6); +} + +void PokenavList_ReshowListFromCheckPage(void) +{ + struct PokenavList *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_LIST); + structPtr->eraseIndex = 0; + structPtr->loopedTaskId = CreateLoopedTask(LoopedTask_ReshowListFromCheckPage, 6); +} + +bool32 PokenavList_IsTaskActive(void) +{ + struct PokenavList *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_LIST); + return IsLoopedTaskActive(structPtr->loopedTaskId); +} + +void PokenavList_DrawCurrentItemIcon(void) +{ + struct PokenavList *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_LIST); + struct PokenavListWindowState *subPtr = &structPtr->windowState; + structPtr->list.iconDrawFunc(structPtr->list.listWindow.windowId, subPtr->windowTopIndex + subPtr->selectedIndexOffset, (structPtr->list.listWindow.unkA + subPtr->selectedIndexOffset) & 0xF); + CopyWindowToVram(structPtr->list.listWindow.windowId, COPYWIN_MAP); +} + +static u32 LoopedTask_EraseListForCheckPage(s32 state) +{ + struct PokenavList *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_LIST); + + switch (state) + { + case 0: + ToggleListArrows(&structPtr->list, 1); + // fall-through + case 1: + if (structPtr->eraseIndex != structPtr->windowState.selectedIndexOffset) + EraseListEntry(&structPtr->list.listWindow, structPtr->eraseIndex, 1); + + structPtr->eraseIndex++; + return LT_INC_AND_PAUSE; + case 2: + if (!IsDma3ManagerBusyWithBgCopy()) + { + if (structPtr->eraseIndex != structPtr->windowState.entriesOnscreen) + return LT_SET_STATE(1); + if (structPtr->windowState.selectedIndexOffset != 0) + EraseListEntry(&structPtr->list.listWindow, structPtr->eraseIndex, structPtr->windowState.selectedIndexOffset); + + return LT_INC_AND_PAUSE; + } + return LT_PAUSE; + case 3: + if (!IsDma3ManagerBusyWithBgCopy()) + { + if (structPtr->windowState.selectedIndexOffset != 0) + { + MoveListWindow(structPtr->windowState.selectedIndexOffset, FALSE); + return LT_INC_AND_PAUSE; + } + return LT_FINISH; + } + return LT_PAUSE; + case 4: + if (PokenavList_IsMoveWindowTaskActive()) + return LT_PAUSE; + + structPtr->windowState.selectedIndexOffset = 0; + return LT_FINISH; + } + return LT_FINISH; +} + +static u32 LoopedTask_PrintCheckPageInfo(s32 state) +{ + struct PokenavList *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_LIST); + if (IsDma3ManagerBusyWithBgCopy()) + return LT_PAUSE; + + switch (state) + { + case 0: + PrintCheckPageTrainerName(&structPtr->windowState, &structPtr->list); + break; + case 1: + PrintMatchCallFieldNames(&structPtr->list, 0); + break; + case 2: + PrintMatchCallFlavorText(&structPtr->windowState, &structPtr->list, CHECK_PAGE_STRATEGY); + break; + case 3: + PrintMatchCallFieldNames(&structPtr->list, 1); + break; + case 4: + PrintMatchCallFlavorText(&structPtr->windowState, &structPtr->list, CHECK_PAGE_POKEMON); + break; + case 5: + PrintMatchCallFieldNames(&structPtr->list, 2); + break; + case 6: + PrintMatchCallFlavorText(&structPtr->windowState, &structPtr->list, CHECK_PAGE_INTRO_1); + break; + case 7: + PrintMatchCallFlavorText(&structPtr->windowState, &structPtr->list, CHECK_PAGE_INTRO_2); + break; + default: + return LT_FINISH; + } + return LT_INC_AND_PAUSE; +} + +static u32 LoopedTask_ReshowListFromCheckPage(s32 state) +{ + struct PokenavList *structPtr; + struct PokenavListWindowState *windowState; + struct PokenavListSub *subPtr0; + s32 r5, *ptr; + + if (IsDma3ManagerBusyWithBgCopy()) + return LT_PAUSE; + + structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_LIST); + windowState = &structPtr->windowState; + subPtr0 = &structPtr->list; + + switch (state) + { + case 0: + // Rewrite the name of the trainer whose check page was just being viewed. + // This is done to erase the red background it had. + PrintMatchCallListTrainerName(windowState, subPtr0); + return LT_INC_AND_PAUSE; + case 1: + ptr = &structPtr->eraseIndex; + if (++(*ptr) < structPtr->windowState.entriesOnscreen) + { + EraseListEntry(&subPtr0->listWindow, *ptr, 1); + return LT_PAUSE; + } + + *ptr = 0; + if (windowState->listLength <= windowState->entriesOnscreen) + { + if (windowState->windowTopIndex != 0) + { + s32 r4 = windowState->windowTopIndex; + r5 = -r4; + EraseListEntry(&subPtr0->listWindow, r5, r4); + windowState->selectedIndexOffset = r4; + *ptr = r5; + return LT_INC_AND_PAUSE; + } + } + else + { + if (windowState->windowTopIndex + windowState->entriesOnscreen > windowState->listLength) + { + s32 r4 = windowState->windowTopIndex + windowState->entriesOnscreen - windowState->listLength; + r5 = -r4; + EraseListEntry(&subPtr0->listWindow, r5, r4); + windowState->selectedIndexOffset = r4; + *ptr = r5; + return LT_INC_AND_PAUSE; + } + } + return LT_SET_STATE(4); + case 2: + MoveListWindow(structPtr->eraseIndex, FALSE); + return LT_INC_AND_PAUSE; + case 3: + if (!PokenavList_IsMoveWindowTaskActive()) + { + structPtr->eraseIndex = 0; + return LT_INC_AND_CONTINUE; + } + return LT_PAUSE; + case 4: + PrintListItems(windowState->listPtr, windowState->windowTopIndex + structPtr->eraseIndex, 1, windowState->listItemSize, structPtr->eraseIndex, &structPtr->list); + return LT_INC_AND_PAUSE; + case 5: + if (IsPrintListItemsTaskActive()) + return LT_PAUSE; + if (++structPtr->eraseIndex >= windowState->listLength || structPtr->eraseIndex >= windowState->entriesOnscreen) + return LT_INC_AND_CONTINUE; + return LT_SET_STATE(4); + case 6: + ToggleListArrows(subPtr0, 0); + return LT_FINISH; + } + + return LT_FINISH; +} + +static void EraseListEntry(struct PokenavListMenuWindow *listWindow, s32 a1, s32 a2) +{ + u8 *tileData = (u8*)GetWindowAttribute(listWindow->windowId, WINDOW_TILE_DATA); + u32 width = listWindow->width * 64; + + a1 = (listWindow->unkA + a1) & 0xF; + if (a1 + a2 <= 16) + { + CpuFastFill8(PIXEL_FILL(1), tileData + a1 * width, a2 * width); + CopyWindowToVram(listWindow->windowId, COPYWIN_GFX); + } + else + { + u32 v3 = 16 - a1; + u32 v4 = a2 - v3; + + CpuFastFill8(PIXEL_FILL(1), tileData + a1 * width, v3 * width); + CpuFastFill8(PIXEL_FILL(1), tileData, v4 * width); + CopyWindowToVram(listWindow->windowId, COPYWIN_GFX); + } + + for (a2--; a2 != -1; a1 = (a1 + 1) & 0xF, a2--) + ClearRematchPokeballIcon(listWindow->windowId, a1); + + CopyWindowToVram(listWindow->windowId, COPYWIN_MAP); +} + +// Pointless +static void SetListMarginTile(struct PokenavListMenuWindow *listWindow, bool32 draw) +{ + u16 var; + u16 *tilemapBuffer = (u16*)GetBgTilemapBuffer(GetWindowAttribute(listWindow->windowId, WINDOW_BG)); + tilemapBuffer += (listWindow->unkA << 6) + listWindow->x - 1; + + if (draw) + var = (listWindow->fillValue << 12) | (listWindow->tileOffset + 1); + else + var = (listWindow->fillValue << 12) | (listWindow->tileOffset); + + tilemapBuffer[0] = var; + tilemapBuffer[0x20] = var; +} + +// Print the trainer's name and title at the top of their check page +static void PrintCheckPageTrainerName(struct PokenavListWindowState *state, struct PokenavListSub *list) +{ + u8 colors[3] = {TEXT_COLOR_TRANSPARENT, TEXT_COLOR_DARK_GRAY, TEXT_COLOR_LIGHT_RED}; + + list->bufferItemFunc(state->listPtr + state->listItemSize * state->windowTopIndex, list->itemTextBuffer); + list->iconDrawFunc(list->listWindow.windowId, state->windowTopIndex, list->listWindow.unkA); + FillWindowPixelRect(list->listWindow.windowId, PIXEL_FILL(4), 0, list->listWindow.unkA * 16, list->listWindow.width * 8, 16); + AddTextPrinterParameterized3(list->listWindow.windowId, list->listWindow.fontId, 8, (list->listWindow.unkA * 16) + 1, colors, TEXT_SKIP_DRAW, list->itemTextBuffer); + SetListMarginTile(&list->listWindow, TRUE); + CopyWindowRectToVram(list->listWindow.windowId, COPYWIN_FULL, 0, list->listWindow.unkA * 2, list->listWindow.width, 2); +} + +// Print the trainer's name and title for the list (to replace the check page name and title, which has a red background) +static void PrintMatchCallListTrainerName(struct PokenavListWindowState *state, struct PokenavListSub *list) +{ + list->bufferItemFunc(state->listPtr + state->listItemSize * state->windowTopIndex, list->itemTextBuffer); + FillWindowPixelRect(list->listWindow.windowId, PIXEL_FILL(1), 0, list->listWindow.unkA * 16, list->listWindow.width * 8, 16); + AddTextPrinterParameterized(list->listWindow.windowId, list->listWindow.fontId, list->itemTextBuffer, 8, list->listWindow.unkA * 16 + 1, TEXT_SKIP_DRAW, NULL); + SetListMarginTile(&list->listWindow, FALSE); + CopyWindowToVram(list->listWindow.windowId, COPYWIN_FULL); +} + +static void PrintMatchCallFieldNames(struct PokenavListSub *list, u32 fieldId) +{ + const u8 *fieldNames[] = { + gText_PokenavMatchCall_Strategy, + gText_PokenavMatchCall_TrainerPokemon, + gText_PokenavMatchCall_SelfIntroduction + }; + u8 colors[3] = {TEXT_COLOR_WHITE, TEXT_COLOR_RED, TEXT_COLOR_LIGHT_RED}; + u32 top = (list->listWindow.unkA + 1 + (fieldId * 2)) & 0xF; + + FillWindowPixelRect(list->listWindow.windowId, PIXEL_FILL(1), 0, top << 4, list->listWindow.width, 16); + AddTextPrinterParameterized3(list->listWindow.windowId, FONT_NARROW, 2, (top << 4) + 1, colors, TEXT_SKIP_DRAW, fieldNames[fieldId]); + CopyWindowRectToVram(list->listWindow.windowId, COPYWIN_GFX, 0, top << 1, list->listWindow.width, 2); +} + +static void PrintMatchCallFlavorText(struct PokenavListWindowState *a0, struct PokenavListSub *list, u32 checkPageEntry) +{ + // lines 1, 3, and 5 are the field names printed by PrintMatchCallFieldNames + static const u8 lineOffsets[CHECK_PAGE_ENTRY_COUNT] = { + [CHECK_PAGE_STRATEGY] = 2, + [CHECK_PAGE_POKEMON] = 4, + [CHECK_PAGE_INTRO_1] = 6, + [CHECK_PAGE_INTRO_2] = 7 + }; + + u32 r6 = (list->listWindow.unkA + lineOffsets[checkPageEntry]) & 0xF; + const u8 *str = GetMatchCallFlavorText(a0->windowTopIndex, checkPageEntry); + + if (str != NULL) + { + FillWindowTilesByRow(list->listWindow.windowId, 1, r6 * 2, list->listWindow.width - 1, 2); + AddTextPrinterParameterized(list->listWindow.windowId, FONT_NARROW, str, 2, (r6 << 4) + 1, TEXT_SKIP_DRAW, NULL); + CopyWindowRectToVram(list->listWindow.windowId, COPYWIN_GFX, 0, r6 * 2, list->listWindow.width, 2); + } +} + +static const struct CompressedSpriteSheet sListArrowSpriteSheets[] = +{ + { + .data = sListArrow_Gfx, + .size = 0xC0, + .tag = GFXTAG_ARROW + } +}; + +static const struct SpritePalette sListArrowPalettes[] = +{ + { + .data = sListArrow_Pal, + .tag = PALTAG_ARROW + }, + {} +}; + +static const struct OamData sOamData_RightArrow = +{ + .y = 0, + .affineMode = ST_OAM_AFFINE_OFF, + .objMode = ST_OAM_OBJ_NORMAL, + .bpp = ST_OAM_4BPP, + .shape = SPRITE_SHAPE(8x16), + .x = 0, + .size = SPRITE_SIZE(8x16), + .tileNum = 0, + .priority = 2, + .paletteNum = 0 +}; + +static const struct SpriteTemplate sSpriteTemplate_RightArrow = +{ + .tileTag = GFXTAG_ARROW, + .paletteTag = PALTAG_ARROW, + .oam = &sOamData_RightArrow, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCB_RightArrow +}; + +static const struct OamData sOamData_UpDownArrow = +{ + .y = 0, + .affineMode = ST_OAM_AFFINE_OFF, + .objMode = ST_OAM_OBJ_NORMAL, + .bpp = ST_OAM_4BPP, + .shape = SPRITE_SHAPE(16x8), + .x = 0, + .size = SPRITE_SIZE(16x8), + .tileNum = 0, + .priority = 2, + .paletteNum = 0 +}; + +static const struct SpriteTemplate sSpriteTemplate_UpDownArrow = +{ + .tileTag = GFXTAG_ARROW, + .paletteTag = PALTAG_ARROW, + .oam = &sOamData_UpDownArrow, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy +}; + +static void LoadListArrowGfx(void) +{ + u32 i; + const struct CompressedSpriteSheet *ptr; + + for (i = 0, ptr = sListArrowSpriteSheets; i < ARRAY_COUNT(sListArrowSpriteSheets); ptr++, i++) + LoadCompressedSpriteSheet(ptr); + + Pokenav_AllocAndLoadPalettes(sListArrowPalettes); +} + +static void CreateListArrowSprites(struct PokenavListWindowState *windowState, struct PokenavListSub *list) +{ + u32 spriteId; + s16 x; + + spriteId = CreateSprite(&sSpriteTemplate_RightArrow, list->listWindow.x * 8 + 3, (list->listWindow.y + 1) * 8, 7); + list->rightArrow = &gSprites[spriteId]; + + x = list->listWindow.x * 8 + (list->listWindow.width - 1) * 4; + spriteId = CreateSprite(&sSpriteTemplate_UpDownArrow, x, list->listWindow.y * 8 + windowState->entriesOnscreen * 16, 7); + list->downArrow = &gSprites[spriteId]; + list->downArrow->oam.tileNum += 2; + list->downArrow->callback = SpriteCB_DownArrow; + + spriteId = CreateSprite(&sSpriteTemplate_UpDownArrow, x, list->listWindow.y * 8, 7); + list->upArrow = &gSprites[spriteId]; + list->upArrow->oam.tileNum += 4; + list->upArrow->callback = SpriteCB_UpArrow; +} + +static void DestroyListArrows(struct PokenavListSub *list) +{ + DestroySprite(list->rightArrow); + DestroySprite(list->upArrow); + DestroySprite(list->downArrow); + FreeSpriteTilesByTag(GFXTAG_ARROW); + FreeSpritePaletteByTag(PALTAG_ARROW); +} + +static void ToggleListArrows(struct PokenavListSub *list, bool32 invisible) +{ + if (invisible) + { + list->rightArrow->callback = SpriteCallbackDummy; + list->upArrow->callback = SpriteCallbackDummy; + list->downArrow->callback = SpriteCallbackDummy; + } + else + { + list->rightArrow->callback = SpriteCB_RightArrow; + list->upArrow->callback = SpriteCB_UpArrow; + list->downArrow->callback = SpriteCB_DownArrow; + } + list->rightArrow->invisible = invisible; + list->upArrow->invisible = invisible; + list->downArrow->invisible = invisible; +} + +static void SpriteCB_RightArrow(struct Sprite *sprite) +{ + struct PokenavList *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_LIST); + sprite->y2 = structPtr->windowState.selectedIndexOffset << 4; +} + +#define sTimer data[0] +#define sOffset data[1] +#define sInvisible data[7] + +static void SpriteCB_DownArrow(struct Sprite *sprite) +{ + if (!sprite->sInvisible && ShouldShowDownArrow()) + sprite->invisible = FALSE; + else + sprite->invisible = TRUE; + + if (++sprite->sTimer > 3) + { + s16 offset; + + sprite->sTimer = 0; + offset = (sprite->sOffset + 1) & 7; + sprite->sOffset = offset; + sprite->y2 = offset; + } +} + +static void SpriteCB_UpArrow(struct Sprite *sprite) +{ + if (!sprite->sInvisible && ShouldShowUpArrow()) + sprite->invisible = FALSE; + else + sprite->invisible = TRUE; + + if (++sprite->sTimer > 3) + { + s16 offset; + + sprite->sTimer = 0; + offset = (sprite->sOffset + 1) & 7; + sprite->sOffset = offset; + sprite->y2 = -1 * offset; + } +} + +void PokenavList_ToggleVerticalArrows(bool32 invisible) +{ + struct PokenavList *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_LIST); + structPtr->list.upArrow->sInvisible = invisible; + structPtr->list.downArrow->sInvisible = invisible; +} + +#undef sTimer +#undef sOffset +#undef sInvisible + +static void InitPokenavListWindowState(struct PokenavListWindowState *dst, struct PokenavListTemplate *template) +{ + dst->listPtr = template->list; + dst->windowTopIndex = template->startIndex; + dst->listLength = template->count; + dst->listItemSize = template->itemSize; + dst->entriesOnscreen = template->maxShowed; + if (dst->entriesOnscreen >= dst->listLength) + { + dst->windowTopIndex = 0; + dst->entriesOffscreen = 0; + dst->selectedIndexOffset = template->startIndex; + } + else + { + dst->entriesOffscreen = dst->listLength - dst->entriesOnscreen; + if (dst->windowTopIndex + dst->entriesOnscreen > dst->listLength) + { + dst->selectedIndexOffset = dst->windowTopIndex + dst->entriesOnscreen - dst->listLength; + dst->windowTopIndex = template->startIndex - dst->selectedIndexOffset; + } + else + { + dst->selectedIndexOffset = 0; + } + } +} + +static bool32 CopyPokenavListMenuTemplate(struct PokenavListSub *dest, const struct BgTemplate *bgTemplate, struct PokenavListTemplate *template, s32 tileOffset) +{ + struct WindowTemplate window; + + dest->listWindow.bg = bgTemplate->bg; + dest->listWindow.tileOffset = tileOffset; + dest->bufferItemFunc = template->bufferItemFunc; + dest->iconDrawFunc = template->iconDrawFunc; + dest->listWindow.fillValue = template->fillValue; + dest->listWindow.x = template->item_X; + dest->listWindow.y = template->listTop; + dest->listWindow.width = template->windowWidth; + dest->listWindow.fontId = template->fontId; + + window.bg = bgTemplate->bg; + window.tilemapLeft = template->item_X; + window.tilemapTop = 0; + window.width = template->windowWidth; + window.height = 32; + window.paletteNum = template->fillValue; + window.baseBlock = tileOffset + 2; + + dest->listWindow.windowId = AddWindow(&window); + if (dest->listWindow.windowId == WINDOW_NONE) + return FALSE; + + dest->listWindow.unkA = 0; + dest->rightArrow = NULL; + dest->upArrow = NULL; + dest->downArrow = NULL; + return 1; +} diff --git a/src/pokenav_main_menu.c b/src/pokenav_main_menu.c index 714c8221a3..318ed520d8 100644 --- a/src/pokenav_main_menu.c +++ b/src/pokenav_main_menu.c @@ -13,7 +13,7 @@ #include "menu.h" #include "dma3.h" -struct PokenavMainMenuResources +struct Pokenav_MainMenu { void (*loopTask)(u32); u32 (*isLoopTaskActiveFunc)(void); @@ -24,7 +24,7 @@ struct PokenavMainMenuResources struct Sprite *spinningPokenav; struct Sprite *leftHeaderSprites[2]; struct Sprite *submenuLeftHeaderSprites[2]; - u8 tilemapBuffer[0x800]; + u8 tilemapBuffer[BG_SCREEN_SIZE]; }; // This struct uses a 32bit tag, and doesn't have a size field. @@ -36,26 +36,26 @@ struct CompressedSpriteSheetNoSize }; static void CleanupPokenavMainMenuResources(void); -static void LoadLeftHeaderGfxForSubMenu(u32 arg0); -static void LoadLeftHeaderGfxForMenu(u32 index); -static void HideLeftHeaderSubmenuSprites(bool32 isOnRightSide); -static void HideLeftHeaderSprites(bool32 isOnRightSide); -static void ShowLeftHeaderSprites(u32 startY, bool32 isOnRightSide); -static void ShowLeftHeaderSubmenuSprites(u32 startY, bool32 isOnRightSide); -static void MoveLeftHeader(struct Sprite *sprite, s32 startX, s32 endX, s32 duration); -static void SpriteCB_MoveLeftHeader(struct Sprite *sprite); +static void LoadLeftHeaderGfxForSubMenu(u32); +static void LoadLeftHeaderGfxForMenu(u32); +static void HideLeftHeaderSubmenuSprites(bool32); +static void HideLeftHeaderSprites(bool32); +static void ShowLeftHeaderSprites(u32, bool32); +static void ShowLeftHeaderSubmenuSprites(u32, bool32); +static void MoveLeftHeader(struct Sprite *, s32, s32, s32); +static void SpriteCB_MoveLeftHeader(struct Sprite *); static void InitPokenavMainMenuResources(void); -static void InitHoennMapHeaderSprites(void); +static void CreateLeftHeaderSprites(void); static void InitHelpBar(void); -static u32 LoopedTask_SlideMenuHeaderUp(s32 a0); -static u32 LoopedTask_SlideMenuHeaderDown(s32 a0); -static void DrawHelpBar(u32 windowId); -static void SpriteCB_SpinningPokenav(struct Sprite* sprite); -static u32 LoopedTask_InitPokenavMenu(s32 a0); +static u32 LoopedTask_SlideMenuHeaderUp(s32); +static u32 LoopedTask_SlideMenuHeaderDown(s32); +static void DrawHelpBar(u32); +static void SpriteCB_SpinningPokenav(struct Sprite*); +static u32 LoopedTask_InitPokenavMenu(s32); -const u16 gSpinningPokenavPaletteData[] = INCBIN_U16("graphics/pokenav/icon2.gbapal"); -const u32 gSpinningPokenavGfx[] = INCBIN_U32("graphics/pokenav/icon2.4bpp.lz"); -const u32 gUnused_SpinningPokenavGfx2[] = INCBIN_U32("graphics/pokenav/icon2_unused.4bpp.lz"); +static const u16 sSpinningPokenav_Pal[] = INCBIN_U16("graphics/pokenav/nav_icon.gbapal"); +static const u32 sSpinningPokenav_Gfx[] = INCBIN_U32("graphics/pokenav/nav_icon.4bpp.lz"); +static const u32 sBlueLightCopy[] = INCBIN_U32("graphics/pokenav/blue_light.4bpp.lz"); // Unused copy of sMatchCallBlueLightTiles const struct BgTemplate gPokenavMainMenuBgTemplates[] = { @@ -108,7 +108,7 @@ static const u8 sHelpBarTextColors[3] = static const struct CompressedSpriteSheet gSpinningPokenavSpriteSheet[] = { { - .data = gSpinningPokenavGfx, + .data = sSpinningPokenav_Gfx, .size = 0x1000, .tag = 0, } @@ -117,20 +117,20 @@ static const struct CompressedSpriteSheet gSpinningPokenavSpriteSheet[] = static const struct SpritePalette gSpinningNavgearPalettes[] = { { - .data = gSpinningPokenavPaletteData, + .data = sSpinningPokenav_Pal, .tag = 0, }, {} }; -static const struct CompressedSpriteSheet sPokenavHoennMapLeftHeaderSpriteSheet = +static const struct CompressedSpriteSheet sMenuLeftHeaderSpriteSheet = { - .data = gPokenavLeftHeaderHoennMap_Gfx, + .data = gPokenavLeftHeaderHoennMap_Gfx, // Hoenn map is the first of the headers listed .size = 0xC00, .tag = 2 }; -static const struct CompressedSpriteSheet sPokenavMenuLeftHeaderSpriteSheets[] = +static const struct CompressedSpriteSheet sMenuLeftHeaderSpriteSheets[] = { [POKENAV_GFX_MAIN_MENU] = { .data = gPokenavLeftHeaderMainMenu_Gfx, @@ -239,7 +239,7 @@ static const struct SpriteTemplate sSpinningPokenavSpriteTemplate = .callback = SpriteCB_SpinningPokenav }; -static const struct OamData sPokenavLeftHeaderHoennMapSpriteOam = +static const struct OamData sOamData_LeftHeader = { .y = 0, .affineMode = ST_OAM_AFFINE_OFF, @@ -253,7 +253,7 @@ static const struct OamData sPokenavLeftHeaderHoennMapSpriteOam = .paletteNum = 0, }; -static const struct OamData sUnknown_0861FB24 = +static const struct OamData sOamData_SubmenuLeftHeader = { .y = 0, .affineMode = ST_OAM_AFFINE_OFF, @@ -268,22 +268,22 @@ static const struct OamData sUnknown_0861FB24 = .paletteNum = 0, }; -static const struct SpriteTemplate sPokenavLeftHeaderHoennMapSpriteTemplate = +static const struct SpriteTemplate sLeftHeaderSpriteTemplate = { .tileTag = 2, .paletteTag = 1, - .oam = &sPokenavLeftHeaderHoennMapSpriteOam, + .oam = &sOamData_LeftHeader, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, .callback = SpriteCallbackDummy }; -static const struct SpriteTemplate sUnknown_0861FB44 = +static const struct SpriteTemplate sSubmenuLeftHeaderSpriteTemplate = { .tileTag = 2, .paletteTag = 2, - .oam = &sUnknown_0861FB24, + .oam = &sOamData_SubmenuLeftHeader, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -292,22 +292,22 @@ static const struct SpriteTemplate sUnknown_0861FB44 = bool32 InitPokenavMainMenu(void) { - struct PokenavMainMenuResources *structPtr; + struct Pokenav_MainMenu *menu; - structPtr = AllocSubstruct(POKENAV_SUBSTRUCT_MAIN_MENU, sizeof(struct PokenavMainMenuResources)); - if (structPtr == NULL) + menu = AllocSubstruct(POKENAV_SUBSTRUCT_MAIN_MENU, sizeof(struct Pokenav_MainMenu)); + if (menu == NULL) return FALSE; ResetSpriteData(); FreeAllSpritePalettes(); - structPtr->currentTaskId = CreateLoopedTask(LoopedTask_InitPokenavMenu, 1); + menu->currentTaskId = CreateLoopedTask(LoopedTask_InitPokenavMenu, 1); return TRUE; } u32 PokenavMainMenuLoopedTaskIsActive(void) { - struct PokenavMainMenuResources *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MAIN_MENU); - return IsLoopedTaskActive(structPtr->currentTaskId); + struct Pokenav_MainMenu *menu = GetSubstructPtr(POKENAV_SUBSTRUCT_MAIN_MENU); + return IsLoopedTaskActive(menu->currentTaskId); } void ShutdownPokenav(void) @@ -330,11 +330,11 @@ bool32 WaitForPokenavShutdownFade(void) return TRUE; } -static u32 LoopedTask_InitPokenavMenu(s32 a0) +static u32 LoopedTask_InitPokenavMenu(s32 state) { - struct PokenavMainMenuResources *structPtr; + struct Pokenav_MainMenu *menu; - switch (a0) + switch (state) { case 0: SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_OBJ_ON | DISPCNT_OBJ_1D_MAP); @@ -345,9 +345,9 @@ static u32 LoopedTask_InitPokenavMenu(s32 a0) ResetTempTileDataBuffers(); return LT_INC_AND_CONTINUE; case 1: - structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MAIN_MENU); + menu = GetSubstructPtr(POKENAV_SUBSTRUCT_MAIN_MENU); DecompressAndCopyTileDataToVram(0, &gPokenavHeader_Gfx, 0, 0, 0); - SetBgTilemapBuffer(0, structPtr->tilemapBuffer); + SetBgTilemapBuffer(0, menu->tilemapBuffer); CopyToBgTilemapBuffer(0, &gPokenavHeader_Tilemap, 0, 0); CopyPaletteIntoBufferUnfaded(gPokenavHeader_Pal, 0, 0x20); CopyBgTilemapBufferToVram(0); @@ -363,7 +363,7 @@ static u32 LoopedTask_InitPokenavMenu(s32 a0) return LT_PAUSE; InitPokenavMainMenuResources(); - InitHoennMapHeaderSprites(); + CreateLeftHeaderSprites(); ShowBg(0); return LT_FINISH; default: @@ -373,46 +373,46 @@ static u32 LoopedTask_InitPokenavMenu(s32 a0) void SetActiveMenuLoopTasks(void *createLoopTask, void *isLoopTaskActive) // Fix types later. { - struct PokenavMainMenuResources *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MAIN_MENU); - structPtr->loopTask = createLoopTask; - structPtr->isLoopTaskActiveFunc = isLoopTaskActive; - structPtr->unused = 0; + struct Pokenav_MainMenu *menu = GetSubstructPtr(POKENAV_SUBSTRUCT_MAIN_MENU); + menu->loopTask = createLoopTask; + menu->isLoopTaskActiveFunc = isLoopTaskActive; + menu->unused = 0; } -void RunMainMenuLoopedTask(u32 a0) +void RunMainMenuLoopedTask(u32 state) { - struct PokenavMainMenuResources *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MAIN_MENU); - structPtr->unused = 0; - structPtr->loopTask(a0); + struct Pokenav_MainMenu *menu = GetSubstructPtr(POKENAV_SUBSTRUCT_MAIN_MENU); + menu->unused = 0; + menu->loopTask(state); } u32 IsActiveMenuLoopTaskActive(void) { - struct PokenavMainMenuResources *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MAIN_MENU); - return structPtr->isLoopTaskActiveFunc(); + struct Pokenav_MainMenu *menu = GetSubstructPtr(POKENAV_SUBSTRUCT_MAIN_MENU); + return menu->isLoopTaskActiveFunc(); } void SlideMenuHeaderUp(void) { - struct PokenavMainMenuResources *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MAIN_MENU); - structPtr->currentTaskId = CreateLoopedTask(LoopedTask_SlideMenuHeaderUp, 4); + struct Pokenav_MainMenu *menu = GetSubstructPtr(POKENAV_SUBSTRUCT_MAIN_MENU); + menu->currentTaskId = CreateLoopedTask(LoopedTask_SlideMenuHeaderUp, 4); } void SlideMenuHeaderDown(void) { - struct PokenavMainMenuResources *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MAIN_MENU); - structPtr->currentTaskId = CreateLoopedTask(LoopedTask_SlideMenuHeaderDown, 4); + struct Pokenav_MainMenu *menu = GetSubstructPtr(POKENAV_SUBSTRUCT_MAIN_MENU); + menu->currentTaskId = CreateLoopedTask(LoopedTask_SlideMenuHeaderDown, 4); } bool32 MainMenuLoopedTaskIsBusy(void) { - struct PokenavMainMenuResources *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MAIN_MENU); - return IsLoopedTaskActive(structPtr->currentTaskId); + struct Pokenav_MainMenu *menu = GetSubstructPtr(POKENAV_SUBSTRUCT_MAIN_MENU); + return IsLoopedTaskActive(menu->currentTaskId); } -static u32 LoopedTask_SlideMenuHeaderUp(s32 a0) +static u32 LoopedTask_SlideMenuHeaderUp(s32 state) { - switch (a0) + switch (state) { default: return LT_FINISH; @@ -431,7 +431,7 @@ static u32 LoopedTask_SlideMenuHeaderUp(s32 a0) } } -static u32 LoopedTask_SlideMenuHeaderDown(s32 a0) +static u32 LoopedTask_SlideMenuHeaderDown(s32 state) { if (ChangeBgY(0, 384, BG_COORD_SUB) <= 0) { @@ -473,7 +473,6 @@ void PokenavFillPalette(u32 palIndex, u16 fillValue) void PokenavCopyPalette(const u16 *src, const u16 *dest, int size, int a3, int a4, u16 *palette) { - if (a4 == 0) { CpuCopy16(src, palette, size * 2); @@ -496,11 +495,11 @@ void PokenavCopyPalette(const u16 *src, const u16 *dest, int size, int a3, int a g1 = ((((GET_G(*dest) << 8) - (g << 8)) / a3) * a4) >> 8; b1 = ((((GET_B(*dest) << 8) - (b << 8)) / a3) * a4) >> 8; - r = (r + r1) & 0x1F; //_RGB(r + r1, g + g1, b + b1); doesn't match; I have to assign the value of ((r + r1) & 0x1F) to r - g = (g + g1) & 0x1F; //See above - b = (b + b1) & 0x1F; //See above + r = (r + r1) & 0x1F; //_RGB(r + r1, g + g1, b + b1); doesn't match + g = (g + g1) & 0x1F; + b = (b + b1) & 0x1F; - *palette = RGB2(r, g, b); //See above comment + *palette = RGB2(r, g, b); src++, dest++; palette++; @@ -510,20 +509,20 @@ void PokenavCopyPalette(const u16 *src, const u16 *dest, int size, int a3, int a void PokenavFadeScreen(s32 fadeType) { - struct PokenavMainMenuResources *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MAIN_MENU); + struct Pokenav_MainMenu *menu = GetSubstructPtr(POKENAV_SUBSTRUCT_MAIN_MENU); switch (fadeType) { - case 0: - BeginNormalPaletteFade(structPtr->palettes, -2, 0, 16, RGB_BLACK); + case POKENAV_FADE_TO_BLACK: + BeginNormalPaletteFade(menu->palettes, -2, 0, 16, RGB_BLACK); break; - case 1: - BeginNormalPaletteFade(structPtr->palettes, -2, 16, 0, RGB_BLACK); + case POKENAV_FADE_FROM_BLACK: + BeginNormalPaletteFade(menu->palettes, -2, 16, 0, RGB_BLACK); break; - case 2: + case POKENAV_FADE_TO_BLACK_ALL: BeginNormalPaletteFade(PALETTES_ALL, -2, 0, 16, RGB_BLACK); break; - case 3: + case POKENAV_FADE_FROM_BLACK_ALL: BeginNormalPaletteFade(PALETTES_ALL, -2, 16, 0, RGB_BLACK); break; } @@ -534,9 +533,10 @@ bool32 IsPaletteFadeActive(void) return gPaletteFade.active; } -void sub_81C7B40(void) +// Excludes the first obj and bg palettes +void FadeToBlackExceptPrimary(void) { - BlendPalettes(PALETTES_ALL & ~(0x10000 | 0x1), 16, RGB_BLACK); + BlendPalettes(PALETTES_ALL & ~(1 << 16 | 1), 16, RGB_BLACK); } void InitBgTemplates(const struct BgTemplate *templates, int count) @@ -549,21 +549,21 @@ void InitBgTemplates(const struct BgTemplate *templates, int count) static void InitHelpBar(void) { - struct PokenavMainMenuResources *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MAIN_MENU); + struct Pokenav_MainMenu *menu = GetSubstructPtr(POKENAV_SUBSTRUCT_MAIN_MENU); InitWindows(&sHelpBarWindowTemplate[0]); - structPtr->helpBarWindowId = 0; - DrawHelpBar(structPtr->helpBarWindowId); - PutWindowTilemap(structPtr->helpBarWindowId); - CopyWindowToVram(structPtr->helpBarWindowId, COPYWIN_FULL); + menu->helpBarWindowId = 0; + DrawHelpBar(menu->helpBarWindowId); + PutWindowTilemap(menu->helpBarWindowId); + CopyWindowToVram(menu->helpBarWindowId, COPYWIN_FULL); } void PrintHelpBarText(u32 textId) { - struct PokenavMainMenuResources *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MAIN_MENU); + struct Pokenav_MainMenu *menu = GetSubstructPtr(POKENAV_SUBSTRUCT_MAIN_MENU); - DrawHelpBar(structPtr->helpBarWindowId); - AddTextPrinterParameterized3(structPtr->helpBarWindowId, FONT_NORMAL, 0, 1, sHelpBarTextColors, 0, sHelpBarTexts[textId]); + DrawHelpBar(menu->helpBarWindowId); + AddTextPrinterParameterized3(menu->helpBarWindowId, FONT_NORMAL, 0, 1, sHelpBarTextColors, 0, sHelpBarTexts[textId]); } bool32 WaitForHelpBar(void) @@ -581,22 +581,22 @@ static void InitPokenavMainMenuResources(void) { s32 i; u8 spriteId; - struct PokenavMainMenuResources *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MAIN_MENU); + struct Pokenav_MainMenu *menu = GetSubstructPtr(POKENAV_SUBSTRUCT_MAIN_MENU); for (i = 0; i < ARRAY_COUNT(gSpinningPokenavSpriteSheet); i++) LoadCompressedSpriteSheet(&gSpinningPokenavSpriteSheet[i]); Pokenav_AllocAndLoadPalettes(gSpinningNavgearPalettes); - structPtr->palettes = ~1 & ~(0x10000 << IndexOfSpritePaletteTag(0)); + menu->palettes = ~1 & ~(0x10000 << IndexOfSpritePaletteTag(0)); spriteId = CreateSprite(&sSpinningPokenavSpriteTemplate, 220, 12, 0); - structPtr->spinningPokenav = &gSprites[spriteId]; + menu->spinningPokenav = &gSprites[spriteId]; } static void CleanupPokenavMainMenuResources(void) { - struct PokenavMainMenuResources *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MAIN_MENU); + struct Pokenav_MainMenu *menu = GetSubstructPtr(POKENAV_SUBSTRUCT_MAIN_MENU); - DestroySprite(structPtr->spinningPokenav); + DestroySprite(menu->spinningPokenav); FreeSpriteTilesByTag(0); FreeSpritePaletteByTag(0); } @@ -607,47 +607,50 @@ static void SpriteCB_SpinningPokenav(struct Sprite *sprite) sprite->y2 = (GetBgY(0) / 256u) * -1; } -struct Sprite *PauseSpinningPokenavSprite(void) +struct Sprite *GetSpinningPokenavSprite(void) { - struct PokenavMainMenuResources *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MAIN_MENU); + struct Pokenav_MainMenu *menu = GetSubstructPtr(POKENAV_SUBSTRUCT_MAIN_MENU); - structPtr->spinningPokenav->callback = SpriteCallbackDummy; - return structPtr->spinningPokenav; + menu->spinningPokenav->callback = SpriteCallbackDummy; + return menu->spinningPokenav; } -void ResumeSpinningPokenavSprite(void) +void HideSpinningPokenavSprite(void) { - struct PokenavMainMenuResources *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MAIN_MENU); + struct Pokenav_MainMenu *menu = GetSubstructPtr(POKENAV_SUBSTRUCT_MAIN_MENU); - structPtr->spinningPokenav->x = 220; - structPtr->spinningPokenav->y = 12; - structPtr->spinningPokenav->callback = SpriteCB_SpinningPokenav; - structPtr->spinningPokenav->invisible = FALSE; - structPtr->spinningPokenav->oam.priority = 0; - structPtr->spinningPokenav->subpriority = 0; + // Move sprite so it's no longer visible + menu->spinningPokenav->x = 220; + menu->spinningPokenav->y = 12; + menu->spinningPokenav->callback = SpriteCB_SpinningPokenav; + menu->spinningPokenav->invisible = FALSE; + menu->spinningPokenav->oam.priority = 0; + menu->spinningPokenav->subpriority = 0; } -static void InitHoennMapHeaderSprites(void) +static void CreateLeftHeaderSprites(void) { s32 i, spriteId; - struct PokenavMainMenuResources *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MAIN_MENU); + struct Pokenav_MainMenu *menu = GetSubstructPtr(POKENAV_SUBSTRUCT_MAIN_MENU); - LoadCompressedSpriteSheet(&sPokenavHoennMapLeftHeaderSpriteSheet); + LoadCompressedSpriteSheet(&sMenuLeftHeaderSpriteSheet); AllocSpritePalette(1); AllocSpritePalette(2); - for (i = 0; i < (s32)ARRAY_COUNT(structPtr->leftHeaderSprites); i++) + for (i = 0; i < (s32)ARRAY_COUNT(menu->leftHeaderSprites); i++) { - spriteId = CreateSprite(&sPokenavLeftHeaderHoennMapSpriteTemplate, 0, 0, 1); - structPtr->leftHeaderSprites[i] = &gSprites[spriteId]; - structPtr->leftHeaderSprites[i]->invisible = TRUE; - structPtr->leftHeaderSprites[i]->x2 = i * 64; + // Create main left header + spriteId = CreateSprite(&sLeftHeaderSpriteTemplate, 0, 0, 1); + menu->leftHeaderSprites[i] = &gSprites[spriteId]; + menu->leftHeaderSprites[i]->invisible = TRUE; + menu->leftHeaderSprites[i]->x2 = i * 64; - spriteId = CreateSprite(&sUnknown_0861FB44, 0, 0, 2); - structPtr->submenuLeftHeaderSprites[i] = &gSprites[spriteId]; - structPtr->submenuLeftHeaderSprites[i]->invisible = TRUE; - structPtr->submenuLeftHeaderSprites[i]->x2 = i * 32; - structPtr->submenuLeftHeaderSprites[i]->y2 = 18; - structPtr->submenuLeftHeaderSprites[i]->oam.tileNum += (i * 8) + 64; + // Create submenu left header + spriteId = CreateSprite(&sSubmenuLeftHeaderSpriteTemplate, 0, 0, 2); + menu->submenuLeftHeaderSprites[i] = &gSprites[spriteId]; + menu->submenuLeftHeaderSprites[i]->invisible = TRUE; + menu->submenuLeftHeaderSprites[i]->x2 = i * 32; + menu->submenuLeftHeaderSprites[i]->y2 = 18; + menu->submenuLeftHeaderSprites[i]->oam.tileNum += (i * 8) + 64; } } @@ -661,34 +664,34 @@ void LoadLeftHeaderGfxForIndex(u32 menuGfxId) void UpdateRegionMapRightHeaderTiles(u32 menuGfxId) { - struct PokenavMainMenuResources *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MAIN_MENU); + struct Pokenav_MainMenu *menu = GetSubstructPtr(POKENAV_SUBSTRUCT_MAIN_MENU); if (menuGfxId == POKENAV_GFX_MAP_MENU_ZOOMED_OUT) - structPtr->leftHeaderSprites[1]->oam.tileNum = GetSpriteTileStartByTag(2) + 32; + menu->leftHeaderSprites[1]->oam.tileNum = GetSpriteTileStartByTag(2) + 32; else - structPtr->leftHeaderSprites[1]->oam.tileNum = GetSpriteTileStartByTag(2) + 64; + menu->leftHeaderSprites[1]->oam.tileNum = GetSpriteTileStartByTag(2) + 64; } static void LoadLeftHeaderGfxForMenu(u32 menuGfxId) { - struct PokenavMainMenuResources *structPtr; + struct Pokenav_MainMenu *menu; u32 size, tag; if (menuGfxId >= POKENAV_GFX_SUBMENUS_START) return; - structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MAIN_MENU); - tag = sPokenavMenuLeftHeaderSpriteSheets[menuGfxId].tag; - size = GetDecompressedDataSize(sPokenavMenuLeftHeaderSpriteSheets[menuGfxId].data); + menu = GetSubstructPtr(POKENAV_SUBSTRUCT_MAIN_MENU); + tag = sMenuLeftHeaderSpriteSheets[menuGfxId].tag; + size = GetDecompressedDataSize(sMenuLeftHeaderSpriteSheets[menuGfxId].data); LoadPalette(&gPokenavLeftHeader_Pal[tag * 16], (IndexOfSpritePaletteTag(1) * 16) + 0x100, 0x20); - LZ77UnCompWram(sPokenavMenuLeftHeaderSpriteSheets[menuGfxId].data, gDecompressionBuffer); + LZ77UnCompWram(sMenuLeftHeaderSpriteSheets[menuGfxId].data, gDecompressionBuffer); RequestDma3Copy(gDecompressionBuffer, (void *)OBJ_VRAM0 + (GetSpriteTileStartByTag(2) * 32), size, 1); - structPtr->leftHeaderSprites[1]->oam.tileNum = GetSpriteTileStartByTag(2) + sPokenavMenuLeftHeaderSpriteSheets[menuGfxId].size; + menu->leftHeaderSprites[1]->oam.tileNum = GetSpriteTileStartByTag(2) + sMenuLeftHeaderSpriteSheets[menuGfxId].size; if (menuGfxId == POKENAV_GFX_MAP_MENU_ZOOMED_OUT || menuGfxId == POKENAV_GFX_MAP_MENU_ZOOMED_IN) - structPtr->leftHeaderSprites[1]->x2 = 56; + menu->leftHeaderSprites[1]->x2 = 56; else - structPtr->leftHeaderSprites[1]->x2 = 64; + menu->leftHeaderSprites[1]->x2 = 64; } static void LoadLeftHeaderGfxForSubMenu(u32 menuGfxId) @@ -731,20 +734,20 @@ void HideMainOrSubMenuLeftHeader(u32 id, bool32 onRightSide) void SetLeftHeaderSpritesInvisibility(void) { s32 i; - struct PokenavMainMenuResources *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MAIN_MENU); + struct Pokenav_MainMenu *menu = GetSubstructPtr(POKENAV_SUBSTRUCT_MAIN_MENU); - for (i = 0; i < (s32)ARRAY_COUNT(structPtr->leftHeaderSprites); i++) + for (i = 0; i < (s32)ARRAY_COUNT(menu->leftHeaderSprites); i++) { - structPtr->leftHeaderSprites[i]->invisible = TRUE; - structPtr->submenuLeftHeaderSprites[i]->invisible = TRUE; + menu->leftHeaderSprites[i]->invisible = TRUE; + menu->submenuLeftHeaderSprites[i]->invisible = TRUE; } } bool32 AreLeftHeaderSpritesMoving(void) { - struct PokenavMainMenuResources *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MAIN_MENU); + struct Pokenav_MainMenu *menu = GetSubstructPtr(POKENAV_SUBSTRUCT_MAIN_MENU); - if (structPtr->leftHeaderSprites[0]->callback == SpriteCallbackDummy && structPtr->submenuLeftHeaderSprites[0]->callback == SpriteCallbackDummy) + if (menu->leftHeaderSprites[0]->callback == SpriteCallbackDummy && menu->submenuLeftHeaderSprites[0]->callback == SpriteCallbackDummy) return FALSE; else return TRUE; @@ -753,66 +756,66 @@ bool32 AreLeftHeaderSpritesMoving(void) static void ShowLeftHeaderSprites(u32 startY, bool32 isOnRightSide) { s32 start, end, i; - struct PokenavMainMenuResources *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MAIN_MENU); + struct Pokenav_MainMenu *menu = GetSubstructPtr(POKENAV_SUBSTRUCT_MAIN_MENU); if (!isOnRightSide) start = -96, end = 32; else start = 256, end = 160; - for (i = 0; i < (s32)ARRAY_COUNT(structPtr->leftHeaderSprites); i++) + for (i = 0; i < (s32)ARRAY_COUNT(menu->leftHeaderSprites); i++) { - structPtr->leftHeaderSprites[i]->y = startY; - MoveLeftHeader(structPtr->leftHeaderSprites[i], start, end, 12); + menu->leftHeaderSprites[i]->y = startY; + MoveLeftHeader(menu->leftHeaderSprites[i], start, end, 12); } } static void ShowLeftHeaderSubmenuSprites(u32 startY, bool32 isOnRightSide) { s32 start, end, i; - struct PokenavMainMenuResources *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MAIN_MENU); + struct Pokenav_MainMenu *menu = GetSubstructPtr(POKENAV_SUBSTRUCT_MAIN_MENU); if (!isOnRightSide) start = -96, end = 16; else start = 256, end = 192; - for (i = 0; i < (s32)ARRAY_COUNT(structPtr->submenuLeftHeaderSprites); i++) + for (i = 0; i < (s32)ARRAY_COUNT(menu->submenuLeftHeaderSprites); i++) { - structPtr->submenuLeftHeaderSprites[i]->y = startY; - MoveLeftHeader(structPtr->submenuLeftHeaderSprites[i], start, end, 12); + menu->submenuLeftHeaderSprites[i]->y = startY; + MoveLeftHeader(menu->submenuLeftHeaderSprites[i], start, end, 12); } } static void HideLeftHeaderSprites(bool32 isOnRightSide) { s32 start, end, i; - struct PokenavMainMenuResources *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MAIN_MENU); + struct Pokenav_MainMenu *menu = GetSubstructPtr(POKENAV_SUBSTRUCT_MAIN_MENU); if (!isOnRightSide) start = 32, end = -96; else start = 192, end = 256; - for (i = 0; i < (s32)ARRAY_COUNT(structPtr->leftHeaderSprites); i++) + for (i = 0; i < (s32)ARRAY_COUNT(menu->leftHeaderSprites); i++) { - MoveLeftHeader(structPtr->leftHeaderSprites[i], start, end, 12); + MoveLeftHeader(menu->leftHeaderSprites[i], start, end, 12); } } static void HideLeftHeaderSubmenuSprites(bool32 isOnRightSide) { s32 start, end, i; - struct PokenavMainMenuResources *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MAIN_MENU); + struct Pokenav_MainMenu *menu = GetSubstructPtr(POKENAV_SUBSTRUCT_MAIN_MENU); if (!isOnRightSide) start = 16, end = -96; else start = 192, end = 256; - for (i = 0; i < (s32)ARRAY_COUNT(structPtr->submenuLeftHeaderSprites); i++) + for (i = 0; i < (s32)ARRAY_COUNT(menu->submenuLeftHeaderSprites); i++) { - MoveLeftHeader(structPtr->submenuLeftHeaderSprites[i], start, end, 12); + MoveLeftHeader(menu->submenuLeftHeaderSprites[i], start, end, 12); } } diff --git a/src/pokenav_match_call_2.c b/src/pokenav_match_call_2.c deleted file mode 100755 index 8f22209579..0000000000 --- a/src/pokenav_match_call_2.c +++ /dev/null @@ -1,1278 +0,0 @@ -#include "global.h" -#include "bg.h" -#include "data.h" -#include "decompress.h" -#include "dma3.h" -#include "international_string_util.h" -#include "main.h" -#include "match_call.h" -#include "menu.h" -#include "overworld.h" -#include "palette.h" -#include "pokenav.h" -#include "region_map.h" -#include "sound.h" -#include "sprite.h" -#include "string_util.h" -#include "strings.h" -#include "task.h" -#include "text.h" -#include "text_window.h" -#include "trig.h" -#include "window.h" -#include "constants/game_stat.h" -#include "constants/region_map_sections.h" -#include "constants/songs.h" - -struct Pokenav4Struct -{ - bool32 (*isTaskActiveCB)(void); - u32 loopTaskId; - u8 filler8[0x6]; - u8 unkE; - u8 unkF; - u16 locWindowId; - u16 infoBoxWindowId; - u16 msgBoxWindowId; - s16 unk16; - u8 unused18; - u8 unused19; - u16 unk1A; - struct Sprite *optionsCursorSprite; - struct Sprite *trainerPicSprite; - u8 unk24[0x800]; - u8 unk824[0x800]; - u8 unk1024[0x800]; - u8 *unk1824; - u8 unk1828[0x800]; - u8 unk2028[0x20]; -}; - -static bool32 GetCurrentLoopedTaskActive(void); -static u32 LoopedTask_OpenMatchCall(s32); -static void InitMatchCallPokenavListMenuTemplate(void); -static void sub_81CBC1C(void); -static void RemoveMatchCallSprites(void); -static void sub_81CC034(struct Pokenav4Struct *); -static void DrawMatchCallLeftColumnWindows(struct Pokenav4Struct *); -static void UpdateMatchCallInfoBox(struct Pokenav4Struct *); -static void PrintMatchCallLocation(struct Pokenav4Struct *, int); -static void sub_81CC214(void); -static void sub_81CBC38(int); -static void PrintMatchCallSelectionOptions(struct Pokenav4Struct *); -static bool32 sub_81CBFC4(struct Pokenav4Struct *); -static void UpdateCursorGfxPos(struct Pokenav4Struct *, int); -static bool32 IsDma3ManagerBusyWithBgCopy1(struct Pokenav4Struct *); -static void UpdateWindowsReturnToTrainerList(struct Pokenav4Struct *); -static void DrawMsgBoxForMatchCallMsg(struct Pokenav4Struct *); -static bool32 IsDma3ManagerBusyWithBgCopy2(struct Pokenav4Struct *); -static void PrintCallingDots(struct Pokenav4Struct *); -static bool32 WaitForCallingDotsText(struct Pokenav4Struct *); -static void PrintMatchCallMessage(struct Pokenav4Struct *); -static bool32 WaitForMatchCallMessageText(struct Pokenav4Struct *); -static void DrawMsgBoxForCloseByMsg(struct Pokenav4Struct *); -static void PrintTrainerIsCloseBy(struct Pokenav4Struct *); -static bool32 WaitForTrainerIsCloseByText(struct Pokenav4Struct *); -static void DrawSpinningPokenavForCall(struct Pokenav4Struct *); -static bool32 WaitForSpinningPokenav(struct Pokenav4Struct *); -static void UpdateWindowsToShowCheckPage(struct Pokenav4Struct *); -static void LoadCheckPageTrainerPic(struct Pokenav4Struct *); -static bool32 WaitForTrainerPic(struct Pokenav4Struct *); -static void TrainerPicSlideOffscreen(struct Pokenav4Struct *); -static void sub_81CBC64(u8 taskId); -static void TryDrawRematchPokeballIcon(u16 windowId, u32, u32); -static void PrintNumberRegisteredLabel(u16 windowId); -static void PrintNumberRegistered(u16 windowId); -static void PrintNumberOfBattlesLabel(u16 windowId); -static void PrintNumberOfBattles(u16 windowId); -static void PrintMatchCallInfoLabel(u16 windowId, const u8 *str, int top); -static void PrintMatchCallInfoNumber(u16 windowId, const u8 *str, int top); -static void sub_81CC2F0(struct Pokenav4Struct *, int); -static void CloseMatchCallSelectOptionsWindow(struct Pokenav4Struct *); -static struct Sprite *CreateTrainerPicSprite(void); -static void SpriteCB_TrainerPicSlideOnscreen(struct Sprite *sprite); -static void SpriteCB_TrainerPicSlideOffscreen(struct Sprite *sprite); -void SpriteCB_OptionsCursor(struct Sprite *sprite); -u32 MatchCallListCursorDown(s32); -u32 MatchCallListCursorUp(s32); -u32 MatchCallListPageDown(s32); -u32 MatchCallListPageUp(s32); -u32 SelectMatchCallEntry(s32); -u32 MoveMatchCallOptionsCursor(s32); -static u32 CancelMatchCallSelection(s32); -u32 DoMatchCallMessage(s32); -u32 DoTrainerCloseByMessage(s32); -u32 sub_81CB888(s32); -u32 ShowCheckPage(s32); -u32 ShowCheckPageUp(s32); -u32 ShowCheckPageDown(s32); -u32 ExitCheckPage(s32); -u32 ExitMatchCall(s32); - -static const u16 sMatchCallUI_Pal[] = INCBIN_U16("graphics/pokenav/ui_matchcall.gbapal"); -static const u32 sMatchCallUI_Gfx[] = INCBIN_U32("graphics/pokenav/ui_matchcall.4bpp.lz"); -static const u32 sMatchCallUI_Tilemap[] = INCBIN_U32("graphics/pokenav/ui_matchcall.bin.lz"); -static const u16 gUnknown_08622698[] = INCBIN_U16("graphics/pokenav/arrow2.gbapal"); -static const u32 gUnknown_086226B8[] = INCBIN_U32("graphics/pokenav/arrow2.4bpp.lz"); -static const u16 gUnknown_086226E0[] = INCBIN_U16("graphics/pokenav/86226E0.gbapal"); -static const u16 gUnknown_08622700[] = INCBIN_U16("graphics/pokenav/8622700.gbapal"); -static const u16 gUnknown_08622720[] = INCBIN_U16("graphics/pokenav/pokeball_matchcall.gbapal"); -static const u32 gUnknown_08622760[] = INCBIN_U32("graphics/pokenav/pokeball_matchcall.4bpp.lz"); - -const struct BgTemplate sMatchCallBgTemplates[3] = -{ - { - .bg = 1, - .charBaseIndex = 3, - .mapBaseIndex = 0x1F, - .screenSize = 0, - .paletteMode = 0, - .priority = 1, - .baseTile = 0 - }, - { - .bg = 2, - .charBaseIndex = 2, - .mapBaseIndex = 0x06, - .screenSize = 0, - .paletteMode = 0, - .priority = 2, - .baseTile = 0x80 - }, - { - .bg = 3, - .charBaseIndex = 1, - .mapBaseIndex = 0x07, - .screenSize = 0, - .paletteMode = 0, - .priority = 3, - .baseTile = 0 - } -}; - -static const LoopedTask sMatchCallLoopTaskFuncs[] = -{ - [POKENAV_MC_FUNC_NONE] = NULL, - [POKENAV_MC_FUNC_DOWN] = MatchCallListCursorDown, - [POKENAV_MC_FUNC_UP] = MatchCallListCursorUp, - [POKENAV_MC_FUNC_PG_DOWN] = MatchCallListPageDown, - [POKENAV_MC_FUNC_PG_UP] = MatchCallListPageUp, - [POKENAV_MC_FUNC_SELECT] = SelectMatchCallEntry, - [POKENAV_MC_FUNC_MOVE_OPTIONS_CURSOR] = MoveMatchCallOptionsCursor, - [POKENAV_MC_FUNC_CANCEL] = CancelMatchCallSelection, - [POKENAV_MC_FUNC_CALL_MSG] = DoMatchCallMessage, - [POKENAV_MC_FUNC_NEARBY_MSG] = DoTrainerCloseByMessage, - [POKENAV_MC_FUNC_10] = sub_81CB888, - [POKENAV_MC_FUNC_SHOW_CHECK_PAGE] = ShowCheckPage, - [POKENAV_MC_FUNC_CHECK_PAGE_UP] = ShowCheckPageUp, - [POKENAV_MC_FUNC_CHECK_PAGE_DOWN] = ShowCheckPageDown, - [POKENAV_MC_FUNC_EXIT_CHECK_PAGE] = ExitCheckPage, - [POKENAV_MC_FUNC_EXIT] = ExitMatchCall -}; - -static const struct WindowTemplate sMatchCallLocationWindowTemplate = -{ - .bg = 2, - .tilemapLeft = 0, - .tilemapTop = 5, - .width = 11, - .height = 2, - .paletteNum = 2, - .baseBlock = 16 -}; - -static const struct WindowTemplate sMatchCallInfoBoxWindowTemplate = -{ - .bg = 2, - .tilemapLeft = 0, - .tilemapTop = 9, - .width = 11, - .height = 8, - .paletteNum = 2, - .baseBlock = 38 -}; - -static const u8 *const sMatchCallOptionTexts[MATCH_CALL_OPTION_COUNT] = -{ - [MATCH_CALL_OPTION_CALL] = gText_Call, - [MATCH_CALL_OPTION_CHECK] = gText_Check, - [MATCH_CALL_OPTION_CANCEL] = gText_Cancel6 -}; - -// The series of 5 dots that appear when someone is called with Match Call -static const u8 sText_CallingDots[] = _("·{PAUSE 0x04}·{PAUSE 0x04}·{PAUSE 0x04}·{PAUSE 0x04}·\p"); - -static const struct WindowTemplate sCallMsgBoxWindowTemplate = -{ - .bg = 1, - .tilemapLeft = 1, - .tilemapTop = 12, - .width = 0x1C, - .height = 0x04, - .paletteNum = 1, - .baseBlock = 10 -}; - -const struct CompressedSpriteSheet gUnknown_08622810[1] = -{ - {gUnknown_086226B8, 0x40, 7} -}; - -const struct SpritePalette gUnknown_08622818[2] = -{ - {gUnknown_08622698, 12} -}; - -static const struct OamData sOptionsCursorOamData = -{ - .y = 0, - .affineMode = ST_OAM_AFFINE_OFF, - .objMode = ST_OAM_OBJ_NORMAL, - .bpp = ST_OAM_4BPP, - .shape = SPRITE_SHAPE(8x16), - .x = 0, - .size = SPRITE_SIZE(8x16), - .tileNum = 0, - .priority = 1, - .paletteNum = 0, -}; - -static const struct SpriteTemplate sOptionsCursorSpriteTemplate = -{ - .tileTag = 7, - .paletteTag = 12, - .oam = &sOptionsCursorOamData, - .anims = gDummySpriteAnimTable, - .images = NULL, - .affineAnims = gDummySpriteAffineAnimTable, - .callback = SpriteCB_OptionsCursor, -}; - -static const struct OamData sTrainerPicOamData = -{ - .y = 0, - .affineMode = ST_OAM_AFFINE_OFF, - .objMode = ST_OAM_OBJ_NORMAL, - .bpp = ST_OAM_4BPP, - .shape = SPRITE_SHAPE(64x64), - .x = 0, - .size = SPRITE_SIZE(64x64), - .tileNum = 0, - .priority = 1, - .paletteNum = 0, -}; - -static const struct SpriteTemplate sTrainerPicSpriteTemplate = -{ - .tileTag = 8, - .paletteTag = 13, - .oam = &sTrainerPicOamData, - .anims = gDummySpriteAnimTable, - .images = NULL, - .affineAnims = gDummySpriteAffineAnimTable, - .callback = SpriteCallbackDummy, -}; - -bool32 OpenMatchCall(void) -{ - struct Pokenav4Struct *state = AllocSubstruct(POKENAV_SUBSTRUCT_MATCH_CALL_OPEN, sizeof(struct Pokenav4Struct)); - if (!state) - return FALSE; - - state->unused19 = 0; - state->loopTaskId = CreateLoopedTask(LoopedTask_OpenMatchCall, 1); - state->isTaskActiveCB = GetCurrentLoopedTaskActive; - return TRUE; -} - -void CreateMatchCallLoopedTask(s32 index) -{ - struct Pokenav4Struct *state = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_OPEN); - state->loopTaskId = CreateLoopedTask(sMatchCallLoopTaskFuncs[index], 1); - state->isTaskActiveCB = GetCurrentLoopedTaskActive; -} - -bool32 IsMatchCallLoopedTaskActive(void) -{ - struct Pokenav4Struct *state = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_OPEN); - return state->isTaskActiveCB(); -} - -void FreeMatchCallSubstruct2(void) -{ - struct Pokenav4Struct *state = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_OPEN); - RemoveMatchCallSprites(); - sub_81CBC1C(); - RemoveWindow(state->infoBoxWindowId); - RemoveWindow(state->locWindowId); - RemoveWindow(state->msgBoxWindowId); - FreePokenavSubstruct(6); -} - -static bool32 GetCurrentLoopedTaskActive(void) -{ - struct Pokenav4Struct *state = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_OPEN); - return IsLoopedTaskActive(state->loopTaskId); -} - -static u32 LoopedTask_OpenMatchCall(s32 taskState) -{ - struct Pokenav4Struct *state = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_OPEN); - switch (taskState) - { - case 0: - InitBgTemplates(sMatchCallBgTemplates, ARRAY_COUNT(sMatchCallBgTemplates)); - ChangeBgX(2, 0, BG_COORD_SET); - ChangeBgY(2, 0, BG_COORD_SET); - DecompressAndCopyTileDataToVram(2, sMatchCallUI_Gfx, 0, 0, 0); - SetBgTilemapBuffer(2, state->unk1024); - CopyToBgTilemapBuffer(2, sMatchCallUI_Tilemap, 0, 0); - CopyBgTilemapBufferToVram(2); - CopyPaletteIntoBufferUnfaded(sMatchCallUI_Pal, 0x20, 0x20); - CopyBgTilemapBufferToVram(2); - return LT_INC_AND_PAUSE; - case 1: - if (FreeTempTileDataBuffersIfPossible()) - return LT_PAUSE; - - BgDmaFill(1, 0, 0, 1); - SetBgTilemapBuffer(1, state->unk24); - FillBgTilemapBufferRect_Palette0(1, 0x1000, 0, 0, 32, 20); - CopyPaletteIntoBufferUnfaded(gUnknown_086226E0, 0x10, 0x20); - CopyBgTilemapBufferToVram(1); - return LT_INC_AND_PAUSE; - case 2: - if (FreeTempTileDataBuffersIfPossible()) - return LT_PAUSE; - - sub_81CC034(state); - DecompressAndCopyTileDataToVram(3, gUnknown_08622760, 0, 0, 0); - CopyPaletteIntoBufferUnfaded(gUnknown_08622700, 0x30, 0x20); - CopyPaletteIntoBufferUnfaded(gUnknown_08622720, 0x50, 0x20); - return LT_INC_AND_PAUSE; - case 3: - if (FreeTempTileDataBuffersIfPossible() || !sub_81CAE28()) - return LT_PAUSE; - - InitMatchCallPokenavListMenuTemplate(); - return LT_INC_AND_PAUSE; - case 4: - if (sub_81C8224()) - return LT_PAUSE; - - DrawMatchCallLeftColumnWindows(state); - return LT_INC_AND_PAUSE; - case 5: - UpdateMatchCallInfoBox(state); - PrintMatchCallLocation(state, 0); - return LT_INC_AND_PAUSE; - case 6: - ChangeBgX(1, 0, BG_COORD_SET); - ChangeBgY(1, 0, BG_COORD_SET); - ShowBg(2); - ShowBg(3); - ShowBg(1); - sub_81CC214(); - LoadLeftHeaderGfxForIndex(3); - ShowLeftHeaderGfx(POKENAV_GFX_MATCH_CALL_MENU, 1, 0); - PokenavFadeScreen(1); - return LT_INC_AND_PAUSE; - case 7: - if (IsPaletteFadeActive() || AreLeftHeaderSpritesMoving()) - return LT_PAUSE; - - sub_81CBC38(1); - return LT_FINISH; - default: - return LT_FINISH; - } -} - -u32 MatchCallListCursorDown(s32 taskState) -{ - struct Pokenav4Struct *state = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_OPEN); - switch (taskState) - { - case 0: - switch (MatchCall_MoveCursorDown()) - { - case 0: - break; - case 1: - PlaySE(SE_SELECT); - return 7; - case 2: - PlaySE(SE_SELECT); - // fall through - default: - return LT_INC_AND_PAUSE; - } - break; - case 1: - if (IsMonListLoopedTaskActive()) - return LT_PAUSE; - - PrintMatchCallLocation(state, 0); - return LT_INC_AND_PAUSE; - case 2: - PrintMatchCallLocation(state, 0); - return LT_INC_AND_PAUSE; - case 3: - if (IsDma3ManagerBusyWithBgCopy()) - return LT_PAUSE; - break; - } - return LT_FINISH; -} - -u32 MatchCallListCursorUp(s32 taskState) -{ - struct Pokenav4Struct *state = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_OPEN); - switch (taskState) - { - case 0: - switch (MatchCall_MoveCursorUp()) - { - case 0: - break; - case 1: - PlaySE(SE_SELECT); - return 7; - case 2: - PlaySE(SE_SELECT); - // fall through - default: - return LT_INC_AND_PAUSE; - } - break; - case 1: - if (IsMonListLoopedTaskActive()) - return LT_PAUSE; - - PrintMatchCallLocation(state, 0); - return LT_INC_AND_PAUSE; - case 2: - PrintMatchCallLocation(state, 0); - return LT_INC_AND_PAUSE; - case 3: - if (IsDma3ManagerBusyWithBgCopy()) - return LT_PAUSE; - break; - } - return LT_FINISH; -} - -u32 MatchCallListPageDown(s32 taskState) -{ - struct Pokenav4Struct *state = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_OPEN); - switch (taskState) - { - case 0: - switch (MatchCall_PageDown()) - { - case 0: - break; - case 1: - PlaySE(SE_SELECT); - return 7; - case 2: - PlaySE(SE_SELECT); - // fall through - default: - return LT_INC_AND_PAUSE; - } - break; - case 1: - if (IsMonListLoopedTaskActive()) - return LT_PAUSE; - - PrintMatchCallLocation(state, 0); - return LT_INC_AND_PAUSE; - case 2: - PrintMatchCallLocation(state, 0); - return LT_INC_AND_PAUSE; - case 3: - if (IsDma3ManagerBusyWithBgCopy()) - return LT_PAUSE; - break; - } - return LT_FINISH; -} - -u32 MatchCallListPageUp(s32 taskState) -{ - struct Pokenav4Struct *state = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_OPEN); - switch (taskState) - { - case 0: - switch (MatchCall_PageUp()) - { - case 0: - break; - case 1: - PlaySE(SE_SELECT); - return 7; - case 2: - PlaySE(SE_SELECT); - // fall through - default: - return LT_INC_AND_PAUSE; - } - break; - case 1: - if (IsMonListLoopedTaskActive()) - return LT_PAUSE; - - PrintMatchCallLocation(state, 0); - return LT_INC_AND_PAUSE; - case 2: - PrintMatchCallLocation(state, 0); - return LT_INC_AND_PAUSE; - case 3: - if (IsDma3ManagerBusyWithBgCopy()) - return LT_PAUSE; - break; - } - return LT_FINISH; -} - -u32 SelectMatchCallEntry(s32 taskState) -{ - struct Pokenav4Struct *state = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_OPEN); - switch (taskState) - { - case 0: - PlaySE(SE_SELECT); - PrintMatchCallSelectionOptions(state); - PrintHelpBarText(HELPBAR_MC_CALL_MENU); - return LT_INC_AND_PAUSE; - case 1: - if (sub_81CBFC4(state)) - return LT_PAUSE; - break; - } - - return LT_FINISH; -} - -u32 MoveMatchCallOptionsCursor(s32 taskState) -{ - struct Pokenav4Struct *state; - u16 cursorPos; - - PlaySE(SE_SELECT); - state = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_OPEN); - cursorPos = GetMatchCallOptionCursorPos(); - UpdateCursorGfxPos(state, cursorPos); - return LT_FINISH; -} - -u32 CancelMatchCallSelection(s32 taskState) -{ - struct Pokenav4Struct *state = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_OPEN); - switch (taskState) - { - case 0: - PlaySE(SE_SELECT); - UpdateWindowsReturnToTrainerList(state); - PrintHelpBarText(HELPBAR_MC_TRAINER_LIST); - return LT_INC_AND_PAUSE; - case 1: - if (IsDma3ManagerBusyWithBgCopy1(state)) - return LT_PAUSE; - break; - } - - return LT_FINISH; -} - -u32 DoMatchCallMessage(s32 taskState) -{ - struct Pokenav4Struct *state = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_OPEN); - switch (taskState) - { - case 0: - ToggleMatchCallVerticalArrows(TRUE); - DrawMsgBoxForMatchCallMsg(state); - return LT_INC_AND_PAUSE; - case 1: - if (IsDma3ManagerBusyWithBgCopy2(state)) - return LT_PAUSE; - - PrintCallingDots(state); - PlaySE(SE_POKENAV_CALL); - state->unkE = 0; - return LT_INC_AND_PAUSE; - case 2: - if (WaitForCallingDotsText(state)) - return LT_PAUSE; - - PrintMatchCallMessage(state); - return LT_INC_AND_PAUSE; - case 3: - if (WaitForMatchCallMessageText(state)) - return LT_PAUSE; - break; - } - - return LT_FINISH; -} - -u32 DoTrainerCloseByMessage(s32 taskState) -{ - struct Pokenav4Struct *state = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_OPEN); - switch (taskState) - { - case 0: - PlaySE(SE_SELECT); - DrawMsgBoxForCloseByMsg(state); - ToggleMatchCallVerticalArrows(TRUE); - state->unkE = 1; - return LT_INC_AND_PAUSE; - case 1: - if (IsDma3ManagerBusyWithBgCopy2(state)) - return LT_PAUSE; - - PrintTrainerIsCloseBy(state); - return LT_INC_AND_PAUSE; - case 2: - if (WaitForTrainerIsCloseByText(state)) - return LT_PAUSE; - break; - } - - return LT_FINISH; -} - -u32 sub_81CB888(s32 taskState) -{ - struct Pokenav4Struct *state = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_OPEN); - u32 result = LT_INC_AND_PAUSE; - - switch (taskState) - { - case 0: - if (!state->unkE) - PlaySE(SE_POKENAV_HANG_UP); - - PlaySE(SE_SELECT); - break; - case 1: - DrawSpinningPokenavForCall(state); - break; - case 2: - if (WaitForSpinningPokenav(state)) - result = LT_PAUSE; - break; - case 3: - UpdateWindowsReturnToTrainerList(state); - break; - case 4: - if (IsDma3ManagerBusyWithBgCopy1(state)) - result = LT_PAUSE; - - PrintHelpBarText(HELPBAR_MC_TRAINER_LIST); - break; - case 5: - if (WaitForHelpBar()) - { - result = LT_PAUSE; - } - else - { - if (state->unkF) - { - sub_81C8838(); - result = LT_INC_AND_CONTINUE; - } - else - { - ToggleMatchCallVerticalArrows(FALSE); - result = LT_FINISH; - } - } - break; - case 6: - if (IsDma3ManagerBusyWithBgCopy()) - { - result = LT_PAUSE; - } - else - { - ToggleMatchCallVerticalArrows(FALSE); - result = LT_FINISH; - } - break; - } - - return result; -} - -u32 ShowCheckPage(s32 taskState) -{ - struct Pokenav4Struct *state = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_OPEN); - switch (taskState) - { - case 0: - PlaySE(SE_SELECT); - sub_81C877C(); - UpdateWindowsToShowCheckPage(state); - return LT_INC_AND_PAUSE; - case 1: - if (IsMatchCallListTaskActive() || IsDma3ManagerBusyWithBgCopy1(state)) - return LT_PAUSE; - - PrintHelpBarText(HELPBAR_MC_CHECK_PAGE); - return LT_INC_AND_PAUSE; - case 2: - PrintCheckPageInfo(0); - LoadCheckPageTrainerPic(state); - return LT_INC_AND_PAUSE; - case 3: - if (IsMatchCallListTaskActive() || WaitForTrainerPic(state) || WaitForHelpBar()) - return LT_PAUSE; - break; - } - - return LT_FINISH; -} - -u32 ShowCheckPageDown(s32 taskState) -{ - int topId; - int delta; - struct Pokenav4Struct *state = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_OPEN); - switch (taskState) - { - case 0: - topId = GetMatchCallListTopIndex(); - delta = GetIndexDeltaOfNextCheckPageDown(topId); - if (delta) - { - PlaySE(SE_SELECT); - state->unk16 = delta; - TrainerPicSlideOffscreen(state); - return LT_INC_AND_PAUSE; - } - break; - case 1: - if (WaitForTrainerPic(state)) - return LT_PAUSE; - - PrintMatchCallLocation(state, state->unk16); - return LT_INC_AND_PAUSE; - case 2: - PrintCheckPageInfo(state->unk16); - return LT_INC_AND_PAUSE; - case 3: - LoadCheckPageTrainerPic(state); - return LT_INC_AND_PAUSE; - case 4: - if (IsMatchCallListTaskActive() || WaitForTrainerPic(state)) - return LT_PAUSE; - break; - } - - return LT_FINISH; -} - -u32 ExitCheckPage(s32 taskState) -{ - struct Pokenav4Struct *state = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_OPEN); - switch (taskState) - { - case 0: - PlaySE(SE_SELECT); - TrainerPicSlideOffscreen(state); - sub_81C87F0(); - return LT_INC_AND_PAUSE; - case 1: - if (IsMatchCallListTaskActive() || WaitForTrainerPic(state)) - return LT_PAUSE; - - PrintHelpBarText(HELPBAR_MC_TRAINER_LIST); - UpdateMatchCallInfoBox(state); - return LT_INC_AND_PAUSE; - case 2: - if (IsDma3ManagerBusyWithBgCopy()) - return LT_PAUSE; - break; - } - - return LT_FINISH; -} - -u32 ShowCheckPageUp(s32 taskState) -{ - int topId; - int delta; - struct Pokenav4Struct *state = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_OPEN); - switch (taskState) - { - case 0: - topId = GetMatchCallListTopIndex(); - delta = GetIndexDeltaOfNextCheckPageUp(topId); - if (delta) - { - PlaySE(SE_SELECT); - state->unk16 = delta; - TrainerPicSlideOffscreen(state); - return LT_INC_AND_PAUSE; - } - break; - case 1: - if (WaitForTrainerPic(state)) - return LT_PAUSE; - - PrintMatchCallLocation(state, state->unk16); - return LT_INC_AND_PAUSE; - case 2: - PrintCheckPageInfo(state->unk16); - return LT_INC_AND_PAUSE; - case 3: - LoadCheckPageTrainerPic(state); - return LT_INC_AND_PAUSE; - case 4: - if (IsMatchCallListTaskActive() || WaitForTrainerPic(state)) - return LT_PAUSE; - break; - } - - return LT_FINISH; -} - -u32 ExitMatchCall(s32 taskState) -{ - switch (taskState) - { - case 0: - PlaySE(SE_SELECT); - sub_81CBC38(0); - PokenavFadeScreen(0); - SlideMenuHeaderDown(); - return LT_INC_AND_PAUSE; - case 1: - if (IsPaletteFadeActive() || MainMenuLoopedTaskIsBusy()) - return LT_PAUSE; - - SetLeftHeaderSpritesInvisibility(); - break; - } - - return LT_FINISH; -} - -static void InitMatchCallPokenavListMenuTemplate(void) -{ - struct PokenavListTemplate template; - template.list.matchCallEntries = sub_81CAE94(); - template.count = GetNumberRegistered(); - template.unk8 = 4; - template.unk6 = 0; - template.item_X = 13; - template.windowWidth = 16; - template.listTop = 1; - template.maxShowed = 8; - template.fillValue = 3; - template.fontId = FONT_NARROW; - template.listFunc.unk10_2 = BufferMatchCallNameAndDesc; - template.unk14 = TryDrawRematchPokeballIcon; - sub_81C81D4(&sMatchCallBgTemplates[2], &template, 2); - CreateTask(sub_81CBC64, 7); -} - -static void sub_81CBC1C(void) -{ - sub_81C8234(); - DestroyTask(FindTaskIdByFunc(sub_81CBC64)); -} - -static void sub_81CBC38(int arg0) -{ - u8 taskId = FindTaskIdByFunc(sub_81CBC64); - if (taskId != TASK_NONE) - gTasks[taskId].data[15] = arg0; -} - -static void sub_81CBC64(u8 taskId) -{ - s16 *taskData = gTasks[taskId].data; - if (taskData[15]) - { - taskData[0] += 4; - taskData[0] &= 0x7F; - taskData[1] = gSineTable[taskData[0]] >> 4; - PokenavCopyPalette(gUnknown_08622720, gUnknown_08622720 + 0x10, 0x10, 0x10, taskData[1], gPlttBufferUnfaded + 0x50); - if (!gPaletteFade.active) - CpuCopy32(gPlttBufferUnfaded + 0x50, gPlttBufferFaded + 0x50, 0x20); - } -} - -static void TryDrawRematchPokeballIcon(u16 windowId, u32 rematchId, u32 arg2) -{ - u8 bg = GetWindowAttribute(windowId, WINDOW_BG); - u16 *tilemap = GetBgTilemapBuffer(bg); - tilemap += arg2 * 0x40 + 0x1D; - if (ShouldDrawRematchPokeballIcon(rematchId)) - { - tilemap[0] = 0x5000; - tilemap[0x20] = 0x5001; - } - else - { - tilemap[0] = 0x5002; - tilemap[0x20] = 0x5002; - } -} - -void ClearRematchPokeballIcon(u16 windowId, u32 arg0) -{ - u8 bg = GetWindowAttribute(windowId, WINDOW_BG); - u16 *tilemap = GetBgTilemapBuffer(bg); - tilemap += arg0 * 0x40 + 0x1D; - tilemap[0] = 0x5002; - tilemap[0x20] = 0x5002; -} - -static void DrawMatchCallLeftColumnWindows(struct Pokenav4Struct *state) -{ - state->locWindowId = AddWindow(&sMatchCallLocationWindowTemplate); - state->infoBoxWindowId = AddWindow(&sMatchCallInfoBoxWindowTemplate); - FillWindowPixelBuffer(state->locWindowId, PIXEL_FILL(1)); - PutWindowTilemap(state->locWindowId); - FillWindowPixelBuffer(state->infoBoxWindowId, PIXEL_FILL(1)); - PutWindowTilemap(state->infoBoxWindowId); - CopyWindowToVram(state->locWindowId, COPYWIN_MAP); -} - -static void UpdateMatchCallInfoBox(struct Pokenav4Struct *state) -{ - FillWindowPixelBuffer(state->infoBoxWindowId, PIXEL_FILL(1)); - PrintNumberRegisteredLabel(state->infoBoxWindowId); - PrintNumberRegistered(state->infoBoxWindowId); - PrintNumberOfBattlesLabel(state->infoBoxWindowId); - PrintNumberOfBattles(state->infoBoxWindowId); - CopyWindowToVram(state->infoBoxWindowId, COPYWIN_GFX); -} - -static void PrintNumberRegisteredLabel(u16 windowId) -{ - PrintMatchCallInfoLabel(windowId, gText_NumberRegistered, 0); -} - -static void PrintNumberRegistered(u16 windowId) -{ - u8 str[3]; - ConvertIntToDecimalStringN(str, GetNumberRegistered(), STR_CONV_MODE_LEFT_ALIGN, 3); - PrintMatchCallInfoNumber(windowId, str, 1); -} - -static void PrintNumberOfBattlesLabel(u16 windowId) -{ - PrintMatchCallInfoLabel(windowId, gText_NumberOfBattles, 2); -} - -static void PrintNumberOfBattles(u16 windowId) -{ - u8 str[5]; - int numTrainerBattles = GetGameStat(GAME_STAT_TRAINER_BATTLES); - if (numTrainerBattles > 99999) - numTrainerBattles = 99999; - - ConvertIntToDecimalStringN(str, numTrainerBattles, STR_CONV_MODE_LEFT_ALIGN, 5); - PrintMatchCallInfoNumber(windowId, str, 3); -} - -static void PrintMatchCallInfoLabel(u16 windowId, const u8 *str, int top) -{ - int y = top * 16 + 1; - AddTextPrinterParameterized(windowId, FONT_NARROW, str, 2, y, TEXT_SKIP_DRAW, NULL); -} - -static void PrintMatchCallInfoNumber(u16 windowId, const u8 *str, int top) -{ - int x = GetStringRightAlignXOffset(FONT_NARROW, str, 86); - int y = top * 16 + 1; - AddTextPrinterParameterized(windowId, FONT_NARROW, str, x, y, TEXT_SKIP_DRAW, NULL); -} - -static void PrintMatchCallLocation(struct Pokenav4Struct *state, int arg1) -{ - u8 mapName[32]; - int x; - int index = GetSelectedPokenavListIndex() + arg1; - int mapSec = GetMatchCallMapSec(index); - if (mapSec != MAPSEC_NONE) - GetMapName(mapName, mapSec, 0); - else - StringCopy(mapName, gText_Unknown); - - x = GetStringCenterAlignXOffset(FONT_NARROW, mapName, 88); - FillWindowPixelBuffer(state->locWindowId, PIXEL_FILL(1)); - AddTextPrinterParameterized(state->locWindowId, FONT_NARROW, mapName, x, 1, 0, NULL); -} - -static void PrintMatchCallSelectionOptions(struct Pokenav4Struct *state) -{ - u32 i; - - FillWindowPixelBuffer(state->infoBoxWindowId, PIXEL_FILL(1)); - for (i = 0; i < MATCH_CALL_OPTION_COUNT; i++) - { - int optionText = GetMatchCallOptionId(i); - if (optionText == MATCH_CALL_OPTION_COUNT) - break; - - AddTextPrinterParameterized(state->infoBoxWindowId, FONT_NARROW, sMatchCallOptionTexts[optionText], 16, i * 16 + 1, TEXT_SKIP_DRAW, NULL); - } - - CopyWindowToVram(state->infoBoxWindowId, COPYWIN_GFX); -} - -static bool32 sub_81CBFC4(struct Pokenav4Struct *state) -{ - if (!IsDma3ManagerBusyWithBgCopy()) - { - sub_81CC2F0(state, GetMatchCallOptionCursorPos()); - return FALSE; - } - - return TRUE; -} - -static void UpdateWindowsReturnToTrainerList(struct Pokenav4Struct *state) -{ - CloseMatchCallSelectOptionsWindow(state); - UpdateMatchCallInfoBox(state); -} - -static bool32 IsDma3ManagerBusyWithBgCopy1(struct Pokenav4Struct *state) -{ - return IsDma3ManagerBusyWithBgCopy(); -} - -static void UpdateWindowsToShowCheckPage(struct Pokenav4Struct *state) -{ - CloseMatchCallSelectOptionsWindow(state); - FillWindowPixelBuffer(state->infoBoxWindowId, PIXEL_FILL(1)); - CopyWindowToVram(state->infoBoxWindowId, COPYWIN_GFX); -} - -static void sub_81CC034(struct Pokenav4Struct *state) -{ - state->msgBoxWindowId = AddWindow(&sCallMsgBoxWindowTemplate); - LoadMatchCallWindowGfx(state->msgBoxWindowId, 1, 4); - sub_81C7B40(); -} - -static void DrawMsgBoxForMatchCallMsg(struct Pokenav4Struct *state) -{ - struct Sprite *sprite; - LoadMatchCallWindowGfx(state->msgBoxWindowId, 1, 4); - DrawMatchCallTextBoxBorder(state->msgBoxWindowId, 1, 4); - FillWindowPixelBuffer(state->msgBoxWindowId, PIXEL_FILL(1)); - PutWindowTilemap(state->msgBoxWindowId); - CopyWindowToVram(state->msgBoxWindowId, COPYWIN_FULL); - sprite = PauseSpinningPokenavSprite(); - sprite->x = 24; - sprite->y = 112; - sprite->y2 = 0; -} - -static void DrawMsgBoxForCloseByMsg(struct Pokenav4Struct *state) -{ - LoadUserWindowBorderGfx(state->msgBoxWindowId, 1, 0x40); - DrawTextBorderOuter(state->msgBoxWindowId, 1, 4); - FillWindowPixelBuffer(state->msgBoxWindowId, PIXEL_FILL(1)); - PutWindowTilemap(state->msgBoxWindowId); - CopyWindowToVram(state->msgBoxWindowId, COPYWIN_FULL); -} - -static bool32 IsDma3ManagerBusyWithBgCopy2(struct Pokenav4Struct *state) -{ - return IsDma3ManagerBusyWithBgCopy(); -} - -static void PrintCallingDots(struct Pokenav4Struct *state) -{ - AddTextPrinterParameterized(state->msgBoxWindowId, FONT_NORMAL, sText_CallingDots, 32, 1, 1, NULL); -} - -static bool32 WaitForCallingDotsText(struct Pokenav4Struct *state) -{ - RunTextPrinters(); - return IsTextPrinterActive(state->msgBoxWindowId); -} - -static void PrintTrainerIsCloseBy(struct Pokenav4Struct *state) -{ - AddTextPrinterParameterized(state->msgBoxWindowId, FONT_NORMAL, gText_TrainerCloseBy, 0, 1, 1, NULL); -} - -static bool32 WaitForTrainerIsCloseByText(struct Pokenav4Struct *state) -{ - RunTextPrinters(); - return IsTextPrinterActive(state->msgBoxWindowId); -} - -static void PrintMatchCallMessage(struct Pokenav4Struct *state) -{ - int index = GetSelectedPokenavListIndex(); - const u8 *str = GetMatchCallMessageText(index, &state->unkF); - u8 speed = GetPlayerTextSpeedDelay(); - AddTextPrinterParameterized(state->msgBoxWindowId, FONT_NORMAL, str, 32, 1, speed, NULL); -} - -static bool32 WaitForMatchCallMessageText(struct Pokenav4Struct *state) -{ - if (JOY_HELD(A_BUTTON)) - gTextFlags.canABSpeedUpPrint = 1; - else - gTextFlags.canABSpeedUpPrint = 0; - - RunTextPrinters(); - return IsTextPrinterActive(state->msgBoxWindowId); -} - -static void DrawSpinningPokenavForCall(struct Pokenav4Struct *state) -{ - ResumeSpinningPokenavSprite(); - FillBgTilemapBufferRect_Palette0(1, 0, 0, 0, 32, 20); - CopyBgTilemapBufferToVram(1); -} - -static bool32 WaitForSpinningPokenav(struct Pokenav4Struct *state) -{ - return IsDma3ManagerBusyWithBgCopy(); -} - -static void sub_81CC214(void) -{ - int i; - u8 paletteNum; - struct SpriteSheet spriteSheet; - struct Pokenav4Struct *state = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_OPEN); - - for (i = 0; i < ARRAY_COUNT(gUnknown_08622810); i++) - LoadCompressedSpriteSheet(&gUnknown_08622810[i]); - - Pokenav_AllocAndLoadPalettes(gUnknown_08622818); - state->optionsCursorSprite = NULL; - spriteSheet.data = state->unk1828; - spriteSheet.size = 0x800; - spriteSheet.tag = 8; - state->unk1824 = (u8 *)OBJ_VRAM0 + LoadSpriteSheet(&spriteSheet) * 0x20; - paletteNum = AllocSpritePalette(13); - state->unk1A = 0x100 + paletteNum * 0x10; - state->trainerPicSprite = CreateTrainerPicSprite(); - state->trainerPicSprite->invisible = TRUE; -} - -static void RemoveMatchCallSprites(void) -{ - struct Pokenav4Struct *state = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_OPEN); - if (state->optionsCursorSprite) - DestroySprite(state->optionsCursorSprite); - if (state->trainerPicSprite) - DestroySprite(state->trainerPicSprite); - - FreeSpriteTilesByTag(8); - FreeSpriteTilesByTag(7); - FreeSpritePaletteByTag(12); - FreeSpritePaletteByTag(13); -} - -static void sub_81CC2F0(struct Pokenav4Struct *state, int top) -{ - if (!state->optionsCursorSprite) - { - u8 spriteId = CreateSprite(&sOptionsCursorSpriteTemplate, 4, 80, 5); - state->optionsCursorSprite = &gSprites[spriteId]; - UpdateCursorGfxPos(state, top); - } -} - -static void CloseMatchCallSelectOptionsWindow(struct Pokenav4Struct *state) -{ - DestroySprite(state->optionsCursorSprite); - state->optionsCursorSprite = NULL; -} - -static void UpdateCursorGfxPos(struct Pokenav4Struct *state, int top) -{ - state->optionsCursorSprite->y2 = top * 16; -} - -void SpriteCB_OptionsCursor(struct Sprite *sprite) -{ - if (++sprite->data[0] > 3) - { - sprite->data[0] = 0; - sprite->x2 = (sprite->x2 + 1) & 0x7; - } -} - -static struct Sprite *CreateTrainerPicSprite(void) -{ - u8 spriteId = CreateSprite(&sTrainerPicSpriteTemplate, 44, 104, 6); - return &gSprites[spriteId]; -} - -static void LoadCheckPageTrainerPic(struct Pokenav4Struct *state) -{ - u16 cursor; - int trainerPic = GetMatchCallTrainerPic(GetSelectedPokenavListIndex()); - if (trainerPic >= 0) - { - DecompressPicFromTable(&gTrainerFrontPicTable[trainerPic], state->unk1828, SPECIES_NONE); - LZ77UnCompWram(gTrainerFrontPicPaletteTable[trainerPic].data, state->unk2028); - cursor = RequestDma3Copy(state->unk1828, state->unk1824, 0x800, 1); - LoadPalette(state->unk2028, state->unk1A, 0x20); - state->trainerPicSprite->data[0] = 0; - state->trainerPicSprite->data[7] = cursor; - state->trainerPicSprite->callback = SpriteCB_TrainerPicSlideOnscreen; - } -} - -static void TrainerPicSlideOffscreen(struct Pokenav4Struct *state) -{ - state->trainerPicSprite->callback = SpriteCB_TrainerPicSlideOffscreen; -} - -static bool32 WaitForTrainerPic(struct Pokenav4Struct *state) -{ - return state->trainerPicSprite->callback != SpriteCallbackDummy; -} - -static void SpriteCB_TrainerPicSlideOnscreen(struct Sprite *sprite) -{ - switch (sprite->data[0]) - { - case 0: - if (CheckForSpaceForDma3Request(sprite->data[7]) != -1) - { - sprite->x2 = -80; - sprite->invisible = FALSE; - sprite->data[0]++; - } - break; - case 1: - sprite->x2 += 8; - if (sprite->x2 >= 0) - { - sprite->x2 = 0; - sprite->callback = SpriteCallbackDummy; - } - break; - } -} - -static void SpriteCB_TrainerPicSlideOffscreen(struct Sprite *sprite) -{ - sprite->x2 -= 8; - if (sprite->x2 <= -80) - { - sprite->invisible = TRUE; - sprite->callback = SpriteCallbackDummy; - } -} diff --git a/src/pokenav_match_call_gfx.c b/src/pokenav_match_call_gfx.c new file mode 100755 index 0000000000..056ab2f1d2 --- /dev/null +++ b/src/pokenav_match_call_gfx.c @@ -0,0 +1,1301 @@ +#include "global.h" +#include "bg.h" +#include "data.h" +#include "decompress.h" +#include "dma3.h" +#include "international_string_util.h" +#include "main.h" +#include "match_call.h" +#include "menu.h" +#include "overworld.h" +#include "palette.h" +#include "pokenav.h" +#include "region_map.h" +#include "sound.h" +#include "sprite.h" +#include "string_util.h" +#include "strings.h" +#include "task.h" +#include "text.h" +#include "text_window.h" +#include "trig.h" +#include "window.h" +#include "constants/game_stat.h" +#include "constants/region_map_sections.h" +#include "constants/songs.h" + +#define GFXTAG_CURSOR 7 +#define GFXTAG_TRAINER_PIC 8 +#define PALTAG_CURSOR 12 +#define PALTAG_TRAINER_PIC 13 + +struct Pokenav_MatchCallGfx +{ + bool32 (*isTaskActiveCB)(void); + u32 loopTaskId; + u8 filler8[6]; + bool8 skipHangUpSE; + bool8 newRematchRequest; + u16 locWindowId; + u16 infoBoxWindowId; + u16 msgBoxWindowId; + s16 pageDelta; + u8 unused18; + u8 unused19; + u16 trainerPicPalOffset; + struct Sprite *optionsCursorSprite; + struct Sprite *trainerPicSprite; + u8 bgTilemapBuffer1[BG_SCREEN_SIZE]; + u8 unusedTilemapBuffer[BG_SCREEN_SIZE]; + u8 bgTilemapBuffer2[BG_SCREEN_SIZE]; + u8 *trainerPicGfxPtr; + u8 trainerPicGfx[0x800]; + u8 trainerPicPal[0x20]; +}; + +static bool32 GetCurrentLoopedTaskActive(void); +static u32 LoopedTask_OpenMatchCall(s32); +static void CreateMatchCallList(void); +static void DestroyMatchCallList(void); +static void FreeMatchCallSprites(void); +static void LoadCallWindowAndFade(struct Pokenav_MatchCallGfx *); +static void DrawMatchCallLeftColumnWindows(struct Pokenav_MatchCallGfx *); +static void UpdateMatchCallInfoBox(struct Pokenav_MatchCallGfx *); +static void PrintMatchCallLocation(struct Pokenav_MatchCallGfx *, int); +static void AllocMatchCallSprites(void); +static void SetPokeballIconsFlashing(bool32); +static void PrintMatchCallSelectionOptions(struct Pokenav_MatchCallGfx *); +static bool32 ShowOptionsCursor(struct Pokenav_MatchCallGfx *); +static void UpdateCursorGfxPos(struct Pokenav_MatchCallGfx *, int); +static bool32 IsDma3ManagerBusyWithBgCopy1(struct Pokenav_MatchCallGfx *); +static void UpdateWindowsReturnToTrainerList(struct Pokenav_MatchCallGfx *); +static void DrawMsgBoxForMatchCallMsg(struct Pokenav_MatchCallGfx *); +static bool32 IsDma3ManagerBusyWithBgCopy2(struct Pokenav_MatchCallGfx *); +static void PrintCallingDots(struct Pokenav_MatchCallGfx *); +static bool32 WaitForCallingDotsText(struct Pokenav_MatchCallGfx *); +static void PrintMatchCallMessage(struct Pokenav_MatchCallGfx *); +static bool32 WaitForMatchCallMessageText(struct Pokenav_MatchCallGfx *); +static void DrawMsgBoxForCloseByMsg(struct Pokenav_MatchCallGfx *); +static void PrintTrainerIsCloseBy(struct Pokenav_MatchCallGfx *); +static bool32 WaitForTrainerIsCloseByText(struct Pokenav_MatchCallGfx *); +static void EraseCallMessageBox(struct Pokenav_MatchCallGfx *); +static bool32 WaitForCallMessageBoxErase(struct Pokenav_MatchCallGfx *); +static void UpdateWindowsToShowCheckPage(struct Pokenav_MatchCallGfx *); +static void LoadCheckPageTrainerPic(struct Pokenav_MatchCallGfx *); +static bool32 WaitForTrainerPic(struct Pokenav_MatchCallGfx *); +static void TrainerPicSlideOffscreen(struct Pokenav_MatchCallGfx *); +static void Task_FlashPokeballIcons(u8); +static void TryDrawRematchPokeballIcon(u16, u32, u32); +static void PrintNumberRegisteredLabel(u16); +static void PrintNumberRegistered(u16); +static void PrintNumberOfBattlesLabel(u16); +static void PrintNumberOfBattles(u16); +static void PrintMatchCallInfoLabel(u16, const u8 *, int); +static void PrintMatchCallInfoNumber(u16, const u8 *, int); +static void CreateOptionsCursorSprite(struct Pokenav_MatchCallGfx *, int); +static void CloseMatchCallSelectOptionsWindow(struct Pokenav_MatchCallGfx *); +static struct Sprite *CreateTrainerPicSprite(void); +static void SpriteCB_TrainerPicSlideOnscreen(struct Sprite *); +static void SpriteCB_TrainerPicSlideOffscreen(struct Sprite *); +static void SpriteCB_OptionsCursor(struct Sprite *); +static u32 MatchCallListCursorDown(s32); +static u32 MatchCallListCursorUp(s32); +static u32 MatchCallListPageDown(s32); +static u32 MatchCallListPageUp(s32); +static u32 SelectMatchCallEntry(s32); +static u32 MoveMatchCallOptionsCursor(s32); +static u32 CancelMatchCallSelection(s32); +static u32 DoMatchCallMessage(s32); +static u32 DoTrainerCloseByMessage(s32); +static u32 CloseMatchCallMessage(s32); +static u32 ShowCheckPage(s32); +static u32 ShowCheckPageUp(s32); +static u32 ShowCheckPageDown(s32); +static u32 ExitCheckPage(s32); +static u32 ExitMatchCall(s32); + +static const u16 sMatchCallUI_Pal[] = INCBIN_U16("graphics/pokenav/match_call/ui.gbapal"); +static const u32 sMatchCallUI_Gfx[] = INCBIN_U32("graphics/pokenav/match_call/ui.4bpp.lz"); +static const u32 sMatchCallUI_Tilemap[] = INCBIN_U32("graphics/pokenav/match_call/ui.bin.lz"); +static const u16 sOptionsCursor_Pal[] = INCBIN_U16("graphics/pokenav/match_call/options_cursor.gbapal"); +static const u32 sOptionsCursor_Gfx[] = INCBIN_U32("graphics/pokenav/match_call/options_cursor.4bpp.lz"); +static const u16 sCallWindow_Pal[] = INCBIN_U16("graphics/pokenav/match_call/call_window.gbapal"); +static const u16 sListWindow_Pal[] = INCBIN_U16("graphics/pokenav/match_call/list_window.gbapal"); +static const u16 sPokeball_Pal[] = INCBIN_U16("graphics/pokenav/match_call/pokeball.gbapal"); +static const u32 sPokeball_Gfx[] = INCBIN_U32("graphics/pokenav/match_call/pokeball.4bpp.lz"); + +static const struct BgTemplate sMatchCallBgTemplates[3] = +{ + { + .bg = 1, + .charBaseIndex = 3, + .mapBaseIndex = 0x1F, + .screenSize = 0, + .paletteMode = 0, + .priority = 1, + .baseTile = 0 + }, + { + .bg = 2, + .charBaseIndex = 2, + .mapBaseIndex = 0x06, + .screenSize = 0, + .paletteMode = 0, + .priority = 2, + .baseTile = 0x80 + }, + { + .bg = 3, + .charBaseIndex = 1, + .mapBaseIndex = 0x07, + .screenSize = 0, + .paletteMode = 0, + .priority = 3, + .baseTile = 0 + } +}; + +static const LoopedTask sMatchCallLoopTaskFuncs[] = +{ + [POKENAV_MC_FUNC_NONE] = NULL, + [POKENAV_MC_FUNC_DOWN] = MatchCallListCursorDown, + [POKENAV_MC_FUNC_UP] = MatchCallListCursorUp, + [POKENAV_MC_FUNC_PG_DOWN] = MatchCallListPageDown, + [POKENAV_MC_FUNC_PG_UP] = MatchCallListPageUp, + [POKENAV_MC_FUNC_SELECT] = SelectMatchCallEntry, + [POKENAV_MC_FUNC_MOVE_OPTIONS_CURSOR] = MoveMatchCallOptionsCursor, + [POKENAV_MC_FUNC_CANCEL] = CancelMatchCallSelection, + [POKENAV_MC_FUNC_CALL_MSG] = DoMatchCallMessage, + [POKENAV_MC_FUNC_NEARBY_MSG] = DoTrainerCloseByMessage, + [POKENAV_MC_FUNC_EXIT_CALL] = CloseMatchCallMessage, + [POKENAV_MC_FUNC_SHOW_CHECK_PAGE] = ShowCheckPage, + [POKENAV_MC_FUNC_CHECK_PAGE_UP] = ShowCheckPageUp, + [POKENAV_MC_FUNC_CHECK_PAGE_DOWN] = ShowCheckPageDown, + [POKENAV_MC_FUNC_EXIT_CHECK_PAGE] = ExitCheckPage, + [POKENAV_MC_FUNC_EXIT] = ExitMatchCall +}; + +static const struct WindowTemplate sMatchCallLocationWindowTemplate = +{ + .bg = 2, + .tilemapLeft = 0, + .tilemapTop = 5, + .width = 11, + .height = 2, + .paletteNum = 2, + .baseBlock = 16 +}; + +static const struct WindowTemplate sMatchCallInfoBoxWindowTemplate = +{ + .bg = 2, + .tilemapLeft = 0, + .tilemapTop = 9, + .width = 11, + .height = 8, + .paletteNum = 2, + .baseBlock = 38 +}; + +static const u8 *const sMatchCallOptionTexts[MATCH_CALL_OPTION_COUNT] = +{ + [MATCH_CALL_OPTION_CALL] = gText_Call, + [MATCH_CALL_OPTION_CHECK] = gText_Check, + [MATCH_CALL_OPTION_CANCEL] = gText_Cancel6 +}; + +// The series of 5 dots that appear when someone is called with Match Call +static const u8 sText_CallingDots[] = _("·{PAUSE 4}·{PAUSE 4}·{PAUSE 4}·{PAUSE 4}·\p"); + +static const struct WindowTemplate sCallMsgBoxWindowTemplate = +{ + .bg = 1, + .tilemapLeft = 1, + .tilemapTop = 12, + .width = 28, + .height = 4, + .paletteNum = 1, + .baseBlock = 10 +}; + +static const struct CompressedSpriteSheet sOptionsCursorSpriteSheets[1] = +{ + {sOptionsCursor_Gfx, 0x40, GFXTAG_CURSOR} +}; + +static const struct SpritePalette sOptionsCursorSpritePalettes[2] = +{ + {sOptionsCursor_Pal, PALTAG_CURSOR} +}; + +static const struct OamData sOptionsCursorOamData = +{ + .y = 0, + .affineMode = ST_OAM_AFFINE_OFF, + .objMode = ST_OAM_OBJ_NORMAL, + .bpp = ST_OAM_4BPP, + .shape = SPRITE_SHAPE(8x16), + .x = 0, + .size = SPRITE_SIZE(8x16), + .tileNum = 0, + .priority = 1, + .paletteNum = 0, +}; + +static const struct SpriteTemplate sOptionsCursorSpriteTemplate = +{ + .tileTag = GFXTAG_CURSOR, + .paletteTag = PALTAG_CURSOR, + .oam = &sOptionsCursorOamData, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCB_OptionsCursor, +}; + +static const struct OamData sTrainerPicOamData = +{ + .y = 0, + .affineMode = ST_OAM_AFFINE_OFF, + .objMode = ST_OAM_OBJ_NORMAL, + .bpp = ST_OAM_4BPP, + .shape = SPRITE_SHAPE(64x64), + .x = 0, + .size = SPRITE_SIZE(64x64), + .tileNum = 0, + .priority = 1, + .paletteNum = 0, +}; + +static const struct SpriteTemplate sTrainerPicSpriteTemplate = +{ + .tileTag = GFXTAG_TRAINER_PIC, + .paletteTag = PALTAG_TRAINER_PIC, + .oam = &sTrainerPicOamData, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, +}; + +bool32 OpenMatchCall(void) +{ + struct Pokenav_MatchCallGfx *gfx = AllocSubstruct(POKENAV_SUBSTRUCT_MATCH_CALL_OPEN, sizeof(struct Pokenav_MatchCallGfx)); + if (!gfx) + return FALSE; + + gfx->unused19 = 0; + gfx->loopTaskId = CreateLoopedTask(LoopedTask_OpenMatchCall, 1); + gfx->isTaskActiveCB = GetCurrentLoopedTaskActive; + return TRUE; +} + +void CreateMatchCallLoopedTask(s32 index) +{ + struct Pokenav_MatchCallGfx *gfx = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_OPEN); + gfx->loopTaskId = CreateLoopedTask(sMatchCallLoopTaskFuncs[index], 1); + gfx->isTaskActiveCB = GetCurrentLoopedTaskActive; +} + +bool32 IsMatchCallLoopedTaskActive(void) +{ + struct Pokenav_MatchCallGfx *gfx = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_OPEN); + return gfx->isTaskActiveCB(); +} + +void FreeMatchCallSubstruct2(void) +{ + struct Pokenav_MatchCallGfx *gfx = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_OPEN); + FreeMatchCallSprites(); + DestroyMatchCallList(); + RemoveWindow(gfx->infoBoxWindowId); + RemoveWindow(gfx->locWindowId); + RemoveWindow(gfx->msgBoxWindowId); + FreePokenavSubstruct(POKENAV_SUBSTRUCT_MATCH_CALL_OPEN); +} + +static bool32 GetCurrentLoopedTaskActive(void) +{ + struct Pokenav_MatchCallGfx *gfx = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_OPEN); + return IsLoopedTaskActive(gfx->loopTaskId); +} + +static u32 LoopedTask_OpenMatchCall(s32 state) +{ + struct Pokenav_MatchCallGfx *gfx = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_OPEN); + switch (state) + { + case 0: + InitBgTemplates(sMatchCallBgTemplates, ARRAY_COUNT(sMatchCallBgTemplates)); + ChangeBgX(2, 0, BG_COORD_SET); + ChangeBgY(2, 0, BG_COORD_SET); + DecompressAndCopyTileDataToVram(2, sMatchCallUI_Gfx, 0, 0, 0); + SetBgTilemapBuffer(2, gfx->bgTilemapBuffer2); + CopyToBgTilemapBuffer(2, sMatchCallUI_Tilemap, 0, 0); + CopyBgTilemapBufferToVram(2); + CopyPaletteIntoBufferUnfaded(sMatchCallUI_Pal, 0x20, 0x20); + CopyBgTilemapBufferToVram(2); + return LT_INC_AND_PAUSE; + case 1: + if (FreeTempTileDataBuffersIfPossible()) + return LT_PAUSE; + + BgDmaFill(1, 0, 0, 1); + SetBgTilemapBuffer(1, gfx->bgTilemapBuffer1); + FillBgTilemapBufferRect_Palette0(1, 0x1000, 0, 0, 32, 20); + CopyPaletteIntoBufferUnfaded(sCallWindow_Pal, 0x10, 0x20); + CopyBgTilemapBufferToVram(1); + return LT_INC_AND_PAUSE; + case 2: + if (FreeTempTileDataBuffersIfPossible()) + return LT_PAUSE; + + LoadCallWindowAndFade(gfx); + DecompressAndCopyTileDataToVram(3, sPokeball_Gfx, 0, 0, 0); + CopyPaletteIntoBufferUnfaded(sListWindow_Pal, 0x30, 0x20); + CopyPaletteIntoBufferUnfaded(sPokeball_Pal, 0x50, 0x20); + return LT_INC_AND_PAUSE; + case 3: + if (FreeTempTileDataBuffersIfPossible() || !IsMatchCallListInitFinished()) + return LT_PAUSE; + + CreateMatchCallList(); + return LT_INC_AND_PAUSE; + case 4: + if (IsCreatePokenavListTaskActive()) + return LT_PAUSE; + + DrawMatchCallLeftColumnWindows(gfx); + return LT_INC_AND_PAUSE; + case 5: + UpdateMatchCallInfoBox(gfx); + PrintMatchCallLocation(gfx, 0); + return LT_INC_AND_PAUSE; + case 6: + ChangeBgX(1, 0, BG_COORD_SET); + ChangeBgY(1, 0, BG_COORD_SET); + ShowBg(2); + ShowBg(3); + ShowBg(1); + AllocMatchCallSprites(); + LoadLeftHeaderGfxForIndex(3); + ShowLeftHeaderGfx(POKENAV_GFX_MATCH_CALL_MENU, 1, 0); + PokenavFadeScreen(POKENAV_FADE_FROM_BLACK); + return LT_INC_AND_PAUSE; + case 7: + if (IsPaletteFadeActive() || AreLeftHeaderSpritesMoving()) + return LT_PAUSE; + + SetPokeballIconsFlashing(TRUE); + return LT_FINISH; + default: + return LT_FINISH; + } +} + +static u32 MatchCallListCursorDown(s32 state) +{ + struct Pokenav_MatchCallGfx *gfx = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_OPEN); + switch (state) + { + case 0: + switch (PokenavList_MoveCursorDown()) + { + case 0: + break; + case 1: + PlaySE(SE_SELECT); + return LT_SET_STATE(2); + case 2: + PlaySE(SE_SELECT); + // fall through + default: + return LT_INC_AND_PAUSE; + } + break; + case 1: + if (PokenavList_IsMoveWindowTaskActive()) + return LT_PAUSE; + + PrintMatchCallLocation(gfx, 0); + return LT_INC_AND_PAUSE; + case 2: + PrintMatchCallLocation(gfx, 0); + return LT_INC_AND_PAUSE; + case 3: + if (IsDma3ManagerBusyWithBgCopy()) + return LT_PAUSE; + break; + } + return LT_FINISH; +} + +static u32 MatchCallListCursorUp(s32 state) +{ + struct Pokenav_MatchCallGfx *gfx = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_OPEN); + switch (state) + { + case 0: + switch (PokenavList_MoveCursorUp()) + { + case 0: + break; + case 1: + PlaySE(SE_SELECT); + return LT_SET_STATE(2); + case 2: + PlaySE(SE_SELECT); + // fall through + default: + return LT_INC_AND_PAUSE; + } + break; + case 1: + if (PokenavList_IsMoveWindowTaskActive()) + return LT_PAUSE; + + PrintMatchCallLocation(gfx, 0); + return LT_INC_AND_PAUSE; + case 2: + PrintMatchCallLocation(gfx, 0); + return LT_INC_AND_PAUSE; + case 3: + if (IsDma3ManagerBusyWithBgCopy()) + return LT_PAUSE; + break; + } + return LT_FINISH; +} + +static u32 MatchCallListPageDown(s32 state) +{ + struct Pokenav_MatchCallGfx *gfx = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_OPEN); + switch (state) + { + case 0: + switch (PokenavList_PageDown()) + { + case 0: + break; + case 1: + PlaySE(SE_SELECT); + return LT_SET_STATE(2); + case 2: + PlaySE(SE_SELECT); + // fall through + default: + return LT_INC_AND_PAUSE; + } + break; + case 1: + if (PokenavList_IsMoveWindowTaskActive()) + return LT_PAUSE; + + PrintMatchCallLocation(gfx, 0); + return LT_INC_AND_PAUSE; + case 2: + PrintMatchCallLocation(gfx, 0); + return LT_INC_AND_PAUSE; + case 3: + if (IsDma3ManagerBusyWithBgCopy()) + return LT_PAUSE; + break; + } + return LT_FINISH; +} + +static u32 MatchCallListPageUp(s32 state) +{ + struct Pokenav_MatchCallGfx *gfx = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_OPEN); + switch (state) + { + case 0: + switch (PokenavList_PageUp()) + { + case 0: + break; + case 1: + PlaySE(SE_SELECT); + return LT_SET_STATE(2); + case 2: + PlaySE(SE_SELECT); + // fall through + default: + return LT_INC_AND_PAUSE; + } + break; + case 1: + if (PokenavList_IsMoveWindowTaskActive()) + return LT_PAUSE; + + PrintMatchCallLocation(gfx, 0); + return LT_INC_AND_PAUSE; + case 2: + PrintMatchCallLocation(gfx, 0); + return LT_INC_AND_PAUSE; + case 3: + if (IsDma3ManagerBusyWithBgCopy()) + return LT_PAUSE; + break; + } + return LT_FINISH; +} + +static u32 SelectMatchCallEntry(s32 state) +{ + struct Pokenav_MatchCallGfx *gfx = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_OPEN); + switch (state) + { + case 0: + PlaySE(SE_SELECT); + PrintMatchCallSelectionOptions(gfx); + PrintHelpBarText(HELPBAR_MC_CALL_MENU); + return LT_INC_AND_PAUSE; + case 1: + if (ShowOptionsCursor(gfx)) + return LT_PAUSE; + break; + } + + return LT_FINISH; +} + +static u32 MoveMatchCallOptionsCursor(s32 state) +{ + struct Pokenav_MatchCallGfx *gfx; + u16 cursorPos; + + PlaySE(SE_SELECT); + gfx = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_OPEN); + cursorPos = GetMatchCallOptionCursorPos(); + UpdateCursorGfxPos(gfx, cursorPos); + return LT_FINISH; +} + +static u32 CancelMatchCallSelection(s32 state) +{ + struct Pokenav_MatchCallGfx *gfx = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_OPEN); + switch (state) + { + case 0: + PlaySE(SE_SELECT); + UpdateWindowsReturnToTrainerList(gfx); + PrintHelpBarText(HELPBAR_MC_TRAINER_LIST); + return LT_INC_AND_PAUSE; + case 1: + if (IsDma3ManagerBusyWithBgCopy1(gfx)) + return LT_PAUSE; + break; + } + + return LT_FINISH; +} + +static u32 DoMatchCallMessage(s32 state) +{ + struct Pokenav_MatchCallGfx *gfx = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_OPEN); + switch (state) + { + case 0: + PokenavList_ToggleVerticalArrows(TRUE); + DrawMsgBoxForMatchCallMsg(gfx); + return LT_INC_AND_PAUSE; + case 1: + if (IsDma3ManagerBusyWithBgCopy2(gfx)) + return LT_PAUSE; + + PrintCallingDots(gfx); + PlaySE(SE_POKENAV_CALL); + gfx->skipHangUpSE = FALSE; + return LT_INC_AND_PAUSE; + case 2: + if (WaitForCallingDotsText(gfx)) + return LT_PAUSE; + + PrintMatchCallMessage(gfx); + return LT_INC_AND_PAUSE; + case 3: + if (WaitForMatchCallMessageText(gfx)) + return LT_PAUSE; + break; + } + + return LT_FINISH; +} + +static u32 DoTrainerCloseByMessage(s32 state) +{ + struct Pokenav_MatchCallGfx *gfx = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_OPEN); + switch (state) + { + case 0: + PlaySE(SE_SELECT); + DrawMsgBoxForCloseByMsg(gfx); + PokenavList_ToggleVerticalArrows(TRUE); + gfx->skipHangUpSE = TRUE; + return LT_INC_AND_PAUSE; + case 1: + if (IsDma3ManagerBusyWithBgCopy2(gfx)) + return LT_PAUSE; + + PrintTrainerIsCloseBy(gfx); + return LT_INC_AND_PAUSE; + case 2: + if (WaitForTrainerIsCloseByText(gfx)) + return LT_PAUSE; + break; + } + + return LT_FINISH; +} + +static u32 CloseMatchCallMessage(s32 state) +{ + struct Pokenav_MatchCallGfx *gfx = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_OPEN); + u32 result = LT_INC_AND_PAUSE; + + switch (state) + { + case 0: + if (!gfx->skipHangUpSE) + PlaySE(SE_POKENAV_HANG_UP); + + PlaySE(SE_SELECT); + break; + case 1: + EraseCallMessageBox(gfx); + break; + case 2: + if (WaitForCallMessageBoxErase(gfx)) + result = LT_PAUSE; + break; + case 3: + UpdateWindowsReturnToTrainerList(gfx); + break; + case 4: + if (IsDma3ManagerBusyWithBgCopy1(gfx)) + result = LT_PAUSE; + + PrintHelpBarText(HELPBAR_MC_TRAINER_LIST); + break; + case 5: + if (WaitForHelpBar()) + { + result = LT_PAUSE; + } + else + { + if (gfx->newRematchRequest) + { + // This call was a new rematch request, + // add the Pokéball icon to their entry + PokenavList_DrawCurrentItemIcon(); + result = LT_INC_AND_CONTINUE; + } + else + { + PokenavList_ToggleVerticalArrows(FALSE); + result = LT_FINISH; + } + } + break; + case 6: + if (IsDma3ManagerBusyWithBgCopy()) + { + result = LT_PAUSE; + } + else + { + PokenavList_ToggleVerticalArrows(FALSE); + result = LT_FINISH; + } + break; + } + + return result; +} + +static u32 ShowCheckPage(s32 state) +{ + struct Pokenav_MatchCallGfx *gfx = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_OPEN); + switch (state) + { + case 0: + PlaySE(SE_SELECT); + PokenavList_EraseListForCheckPage(); + UpdateWindowsToShowCheckPage(gfx); + return LT_INC_AND_PAUSE; + case 1: + if (PokenavList_IsTaskActive() || IsDma3ManagerBusyWithBgCopy1(gfx)) + return LT_PAUSE; + + PrintHelpBarText(HELPBAR_MC_CHECK_PAGE); + return LT_INC_AND_PAUSE; + case 2: + PrintCheckPageInfo(0); + LoadCheckPageTrainerPic(gfx); + return LT_INC_AND_PAUSE; + case 3: + if (PokenavList_IsTaskActive() || WaitForTrainerPic(gfx) || WaitForHelpBar()) + return LT_PAUSE; + break; + } + + return LT_FINISH; +} + +static u32 ShowCheckPageDown(s32 state) +{ + int topId; + int delta; + struct Pokenav_MatchCallGfx *gfx = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_OPEN); + switch (state) + { + case 0: + topId = PokenavList_GetTopIndex(); + delta = GetIndexDeltaOfNextCheckPageDown(topId); + if (delta) + { + PlaySE(SE_SELECT); + gfx->pageDelta = delta; + TrainerPicSlideOffscreen(gfx); + return LT_INC_AND_PAUSE; + } + break; + case 1: + if (WaitForTrainerPic(gfx)) + return LT_PAUSE; + + PrintMatchCallLocation(gfx, gfx->pageDelta); + return LT_INC_AND_PAUSE; + case 2: + PrintCheckPageInfo(gfx->pageDelta); + return LT_INC_AND_PAUSE; + case 3: + LoadCheckPageTrainerPic(gfx); + return LT_INC_AND_PAUSE; + case 4: + if (PokenavList_IsTaskActive() || WaitForTrainerPic(gfx)) + return LT_PAUSE; + break; + } + + return LT_FINISH; +} + +static u32 ExitCheckPage(s32 state) +{ + struct Pokenav_MatchCallGfx *gfx = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_OPEN); + switch (state) + { + case 0: + PlaySE(SE_SELECT); + TrainerPicSlideOffscreen(gfx); + PokenavList_ReshowListFromCheckPage(); + return LT_INC_AND_PAUSE; + case 1: + if (PokenavList_IsTaskActive() || WaitForTrainerPic(gfx)) + return LT_PAUSE; + + PrintHelpBarText(HELPBAR_MC_TRAINER_LIST); + UpdateMatchCallInfoBox(gfx); + return LT_INC_AND_PAUSE; + case 2: + if (IsDma3ManagerBusyWithBgCopy()) + return LT_PAUSE; + break; + } + + return LT_FINISH; +} + +static u32 ShowCheckPageUp(s32 state) +{ + int topId; + int delta; + struct Pokenav_MatchCallGfx *gfx = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_OPEN); + switch (state) + { + case 0: + topId = PokenavList_GetTopIndex(); + delta = GetIndexDeltaOfNextCheckPageUp(topId); + if (delta) + { + PlaySE(SE_SELECT); + gfx->pageDelta = delta; + TrainerPicSlideOffscreen(gfx); + return LT_INC_AND_PAUSE; + } + break; + case 1: + if (WaitForTrainerPic(gfx)) + return LT_PAUSE; + + PrintMatchCallLocation(gfx, gfx->pageDelta); + return LT_INC_AND_PAUSE; + case 2: + PrintCheckPageInfo(gfx->pageDelta); + return LT_INC_AND_PAUSE; + case 3: + LoadCheckPageTrainerPic(gfx); + return LT_INC_AND_PAUSE; + case 4: + if (PokenavList_IsTaskActive() || WaitForTrainerPic(gfx)) + return LT_PAUSE; + break; + } + + return LT_FINISH; +} + +static u32 ExitMatchCall(s32 state) +{ + switch (state) + { + case 0: + PlaySE(SE_SELECT); + SetPokeballIconsFlashing(FALSE); + PokenavFadeScreen(POKENAV_FADE_TO_BLACK); + SlideMenuHeaderDown(); + return LT_INC_AND_PAUSE; + case 1: + if (IsPaletteFadeActive() || MainMenuLoopedTaskIsBusy()) + return LT_PAUSE; + + SetLeftHeaderSpritesInvisibility(); + break; + } + + return LT_FINISH; +} + +static void CreateMatchCallList(void) +{ + struct PokenavListTemplate template; + template.list = (struct PokenavListItem *)GetMatchCallList(); + template.count = GetNumberRegistered(); + template.itemSize = sizeof(struct PokenavListItem); + template.startIndex = 0; + template.item_X = 13; + template.windowWidth = 16; + template.listTop = 1; + template.maxShowed = 8; + template.fillValue = 3; + template.fontId = FONT_NARROW; + template.bufferItemFunc = (PokenavListBufferItemFunc)BufferMatchCallNameAndDesc; + template.iconDrawFunc = TryDrawRematchPokeballIcon; + CreatePokenavList(&sMatchCallBgTemplates[2], &template, 2); + CreateTask(Task_FlashPokeballIcons, 7); +} + +static void DestroyMatchCallList(void) +{ + DestroyPokenavList(); + DestroyTask(FindTaskIdByFunc(Task_FlashPokeballIcons)); +} + +#define tSinIdx data[0] +#define tSinVal data[1] +#define tActive data[15] + +static void SetPokeballIconsFlashing(bool32 active) +{ + u8 taskId = FindTaskIdByFunc(Task_FlashPokeballIcons); + if (taskId != TASK_NONE) + gTasks[taskId].tActive = active; +} + +static void Task_FlashPokeballIcons(u8 taskId) +{ + s16 *data = gTasks[taskId].data; + if (tActive) + { + tSinIdx += 4; + tSinIdx &= 0x7F; + tSinVal = gSineTable[tSinIdx] >> 4; + PokenavCopyPalette(sPokeball_Pal, &sPokeball_Pal[0x10], 0x10, 0x10, tSinVal, &gPlttBufferUnfaded[0x50]); + if (!gPaletteFade.active) + CpuCopy32(&gPlttBufferUnfaded[0x50], &gPlttBufferFaded[0x50], 0x20); + } +} + +#undef tSinIdx +#undef tSinVal +#undef tActive + +enum { + POKEBALL_ICON_TOP = 0x5000, + POKEBALL_ICON_BOTTOM, + POKEBALL_ICON_EMPTY, +}; + +static void TryDrawRematchPokeballIcon(u16 windowId, u32 rematchId, u32 tileOffset) +{ + u8 bg = GetWindowAttribute(windowId, WINDOW_BG); + u16 *tilemap = GetBgTilemapBuffer(bg); + tilemap += tileOffset * 64 + 0x1D; + if (ShouldDrawRematchPokeballIcon(rematchId)) + { + tilemap[0] = POKEBALL_ICON_TOP; + tilemap[0x20] = POKEBALL_ICON_BOTTOM; + } + else + { + tilemap[0] = POKEBALL_ICON_EMPTY; + tilemap[0x20] = POKEBALL_ICON_EMPTY; + } +} + +void ClearRematchPokeballIcon(u16 windowId, u32 tileOffset) +{ + u8 bg = GetWindowAttribute(windowId, WINDOW_BG); + u16 *tilemap = GetBgTilemapBuffer(bg); + tilemap += tileOffset * 64 + 0x1D; + tilemap[0] = POKEBALL_ICON_EMPTY; + tilemap[0x20] = POKEBALL_ICON_EMPTY; +} + +static void DrawMatchCallLeftColumnWindows(struct Pokenav_MatchCallGfx *gfx) +{ + gfx->locWindowId = AddWindow(&sMatchCallLocationWindowTemplate); + gfx->infoBoxWindowId = AddWindow(&sMatchCallInfoBoxWindowTemplate); + FillWindowPixelBuffer(gfx->locWindowId, PIXEL_FILL(1)); + PutWindowTilemap(gfx->locWindowId); + FillWindowPixelBuffer(gfx->infoBoxWindowId, PIXEL_FILL(1)); + PutWindowTilemap(gfx->infoBoxWindowId); + CopyWindowToVram(gfx->locWindowId, COPYWIN_MAP); +} + +static void UpdateMatchCallInfoBox(struct Pokenav_MatchCallGfx *gfx) +{ + FillWindowPixelBuffer(gfx->infoBoxWindowId, PIXEL_FILL(1)); + PrintNumberRegisteredLabel(gfx->infoBoxWindowId); + PrintNumberRegistered(gfx->infoBoxWindowId); + PrintNumberOfBattlesLabel(gfx->infoBoxWindowId); + PrintNumberOfBattles(gfx->infoBoxWindowId); + CopyWindowToVram(gfx->infoBoxWindowId, COPYWIN_GFX); +} + +static void PrintNumberRegisteredLabel(u16 windowId) +{ + PrintMatchCallInfoLabel(windowId, gText_NumberRegistered, 0); +} + +static void PrintNumberRegistered(u16 windowId) +{ + u8 str[3]; + ConvertIntToDecimalStringN(str, GetNumberRegistered(), STR_CONV_MODE_LEFT_ALIGN, 3); + PrintMatchCallInfoNumber(windowId, str, 1); +} + +static void PrintNumberOfBattlesLabel(u16 windowId) +{ + PrintMatchCallInfoLabel(windowId, gText_NumberOfBattles, 2); +} + +static void PrintNumberOfBattles(u16 windowId) +{ + u8 str[5]; + int numTrainerBattles = GetGameStat(GAME_STAT_TRAINER_BATTLES); + if (numTrainerBattles > 99999) + numTrainerBattles = 99999; + + ConvertIntToDecimalStringN(str, numTrainerBattles, STR_CONV_MODE_LEFT_ALIGN, 5); + PrintMatchCallInfoNumber(windowId, str, 3); +} + +static void PrintMatchCallInfoLabel(u16 windowId, const u8 *str, int top) +{ + int y = top * 16 + 1; + AddTextPrinterParameterized(windowId, FONT_NARROW, str, 2, y, TEXT_SKIP_DRAW, NULL); +} + +static void PrintMatchCallInfoNumber(u16 windowId, const u8 *str, int top) +{ + int x = GetStringRightAlignXOffset(FONT_NARROW, str, 86); + int y = top * 16 + 1; + AddTextPrinterParameterized(windowId, FONT_NARROW, str, x, y, TEXT_SKIP_DRAW, NULL); +} + +static void PrintMatchCallLocation(struct Pokenav_MatchCallGfx *gfx, int delta) +{ + u8 mapName[32]; + int x; + int index = PokenavList_GetSelectedIndex() + delta; + int mapSec = GetMatchCallMapSec(index); + if (mapSec != MAPSEC_NONE) + GetMapName(mapName, mapSec, 0); + else + StringCopy(mapName, gText_Unknown); + + x = GetStringCenterAlignXOffset(FONT_NARROW, mapName, 88); + FillWindowPixelBuffer(gfx->locWindowId, PIXEL_FILL(1)); + AddTextPrinterParameterized(gfx->locWindowId, FONT_NARROW, mapName, x, 1, 0, NULL); +} + +static void PrintMatchCallSelectionOptions(struct Pokenav_MatchCallGfx *gfx) +{ + u32 i; + + FillWindowPixelBuffer(gfx->infoBoxWindowId, PIXEL_FILL(1)); + for (i = 0; i < MATCH_CALL_OPTION_COUNT; i++) + { + int optionText = GetMatchCallOptionId(i); + if (optionText == MATCH_CALL_OPTION_COUNT) + break; + + AddTextPrinterParameterized(gfx->infoBoxWindowId, FONT_NARROW, sMatchCallOptionTexts[optionText], 16, i * 16 + 1, TEXT_SKIP_DRAW, NULL); + } + + CopyWindowToVram(gfx->infoBoxWindowId, COPYWIN_GFX); +} + +static bool32 ShowOptionsCursor(struct Pokenav_MatchCallGfx *gfx) +{ + if (!IsDma3ManagerBusyWithBgCopy()) + { + CreateOptionsCursorSprite(gfx, GetMatchCallOptionCursorPos()); + return FALSE; + } + + return TRUE; +} + +static void UpdateWindowsReturnToTrainerList(struct Pokenav_MatchCallGfx *gfx) +{ + CloseMatchCallSelectOptionsWindow(gfx); + UpdateMatchCallInfoBox(gfx); +} + +static bool32 IsDma3ManagerBusyWithBgCopy1(struct Pokenav_MatchCallGfx *gfx) +{ + return IsDma3ManagerBusyWithBgCopy(); +} + +static void UpdateWindowsToShowCheckPage(struct Pokenav_MatchCallGfx *gfx) +{ + CloseMatchCallSelectOptionsWindow(gfx); + FillWindowPixelBuffer(gfx->infoBoxWindowId, PIXEL_FILL(1)); + CopyWindowToVram(gfx->infoBoxWindowId, COPYWIN_GFX); +} + +static void LoadCallWindowAndFade(struct Pokenav_MatchCallGfx *gfx) +{ + gfx->msgBoxWindowId = AddWindow(&sCallMsgBoxWindowTemplate); + LoadMatchCallWindowGfx(gfx->msgBoxWindowId, 1, 4); + FadeToBlackExceptPrimary(); +} + +static void DrawMsgBoxForMatchCallMsg(struct Pokenav_MatchCallGfx *gfx) +{ + struct Sprite *sprite; + LoadMatchCallWindowGfx(gfx->msgBoxWindowId, 1, 4); + DrawMatchCallTextBoxBorder(gfx->msgBoxWindowId, 1, 4); + FillWindowPixelBuffer(gfx->msgBoxWindowId, PIXEL_FILL(1)); + PutWindowTilemap(gfx->msgBoxWindowId); + CopyWindowToVram(gfx->msgBoxWindowId, COPYWIN_FULL); + sprite = GetSpinningPokenavSprite(); + sprite->x = 24; + sprite->y = 112; + sprite->y2 = 0; +} + +static void DrawMsgBoxForCloseByMsg(struct Pokenav_MatchCallGfx *gfx) +{ + LoadUserWindowBorderGfx(gfx->msgBoxWindowId, 1, 0x40); + DrawTextBorderOuter(gfx->msgBoxWindowId, 1, 4); + FillWindowPixelBuffer(gfx->msgBoxWindowId, PIXEL_FILL(1)); + PutWindowTilemap(gfx->msgBoxWindowId); + CopyWindowToVram(gfx->msgBoxWindowId, COPYWIN_FULL); +} + +static bool32 IsDma3ManagerBusyWithBgCopy2(struct Pokenav_MatchCallGfx *gfx) +{ + return IsDma3ManagerBusyWithBgCopy(); +} + +static void PrintCallingDots(struct Pokenav_MatchCallGfx *gfx) +{ + AddTextPrinterParameterized(gfx->msgBoxWindowId, FONT_NORMAL, sText_CallingDots, 32, 1, 1, NULL); +} + +static bool32 WaitForCallingDotsText(struct Pokenav_MatchCallGfx *gfx) +{ + RunTextPrinters(); + return IsTextPrinterActive(gfx->msgBoxWindowId); +} + +static void PrintTrainerIsCloseBy(struct Pokenav_MatchCallGfx *gfx) +{ + AddTextPrinterParameterized(gfx->msgBoxWindowId, FONT_NORMAL, gText_TrainerCloseBy, 0, 1, 1, NULL); +} + +static bool32 WaitForTrainerIsCloseByText(struct Pokenav_MatchCallGfx *gfx) +{ + RunTextPrinters(); + return IsTextPrinterActive(gfx->msgBoxWindowId); +} + +static void PrintMatchCallMessage(struct Pokenav_MatchCallGfx *gfx) +{ + int index = PokenavList_GetSelectedIndex(); + const u8 *str = GetMatchCallMessageText(index, &gfx->newRematchRequest); + u8 speed = GetPlayerTextSpeedDelay(); + AddTextPrinterParameterized(gfx->msgBoxWindowId, FONT_NORMAL, str, 32, 1, speed, NULL); +} + +static bool32 WaitForMatchCallMessageText(struct Pokenav_MatchCallGfx *gfx) +{ + if (JOY_HELD(A_BUTTON)) + gTextFlags.canABSpeedUpPrint = TRUE; + else + gTextFlags.canABSpeedUpPrint = FALSE; + + RunTextPrinters(); + return IsTextPrinterActive(gfx->msgBoxWindowId); +} + +static void EraseCallMessageBox(struct Pokenav_MatchCallGfx *gfx) +{ + HideSpinningPokenavSprite(); + FillBgTilemapBufferRect_Palette0(1, 0, 0, 0, 32, 20); + CopyBgTilemapBufferToVram(1); +} + +static bool32 WaitForCallMessageBoxErase(struct Pokenav_MatchCallGfx *gfx) +{ + return IsDma3ManagerBusyWithBgCopy(); +} + +static void AllocMatchCallSprites(void) +{ + int i; + u8 paletteNum; + struct SpriteSheet spriteSheet; + struct Pokenav_MatchCallGfx *gfx = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_OPEN); + + // Load options cursor gfx + for (i = 0; i < ARRAY_COUNT(sOptionsCursorSpriteSheets); i++) + LoadCompressedSpriteSheet(&sOptionsCursorSpriteSheets[i]); + Pokenav_AllocAndLoadPalettes(sOptionsCursorSpritePalettes); + gfx->optionsCursorSprite = NULL; + + // Load trainer pic gfx + spriteSheet.data = gfx->trainerPicGfx; + spriteSheet.size = sizeof(gfx->trainerPicGfx); + spriteSheet.tag = GFXTAG_TRAINER_PIC; + gfx->trainerPicGfxPtr = (u8 *)OBJ_VRAM0 + LoadSpriteSheet(&spriteSheet) * 0x20; + paletteNum = AllocSpritePalette(PALTAG_TRAINER_PIC); + gfx->trainerPicPalOffset = 0x100 + paletteNum * 0x10; + gfx->trainerPicSprite = CreateTrainerPicSprite(); + gfx->trainerPicSprite->invisible = TRUE; +} + +static void FreeMatchCallSprites(void) +{ + struct Pokenav_MatchCallGfx *gfx = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_OPEN); + if (gfx->optionsCursorSprite) + DestroySprite(gfx->optionsCursorSprite); + if (gfx->trainerPicSprite) + DestroySprite(gfx->trainerPicSprite); + + FreeSpriteTilesByTag(GFXTAG_TRAINER_PIC); + FreeSpriteTilesByTag(GFXTAG_CURSOR); + FreeSpritePaletteByTag(PALTAG_CURSOR); + FreeSpritePaletteByTag(PALTAG_TRAINER_PIC); +} + +static void CreateOptionsCursorSprite(struct Pokenav_MatchCallGfx *gfx, int top) +{ + if (!gfx->optionsCursorSprite) + { + u8 spriteId = CreateSprite(&sOptionsCursorSpriteTemplate, 4, 80, 5); + gfx->optionsCursorSprite = &gSprites[spriteId]; + UpdateCursorGfxPos(gfx, top); + } +} + +static void CloseMatchCallSelectOptionsWindow(struct Pokenav_MatchCallGfx *gfx) +{ + DestroySprite(gfx->optionsCursorSprite); + gfx->optionsCursorSprite = NULL; +} + +static void UpdateCursorGfxPos(struct Pokenav_MatchCallGfx *gfx, int top) +{ + gfx->optionsCursorSprite->y2 = top * 16; +} + +static void SpriteCB_OptionsCursor(struct Sprite *sprite) +{ + if (++sprite->data[0] > 3) + { + sprite->data[0] = 0; + sprite->x2 = (sprite->x2 + 1) & 7; + } +} + +static struct Sprite *CreateTrainerPicSprite(void) +{ + u8 spriteId = CreateSprite(&sTrainerPicSpriteTemplate, 44, 104, 6); + return &gSprites[spriteId]; +} + +static void LoadCheckPageTrainerPic(struct Pokenav_MatchCallGfx *gfx) +{ + u16 cursor; + int trainerPic = GetMatchCallTrainerPic(PokenavList_GetSelectedIndex()); + if (trainerPic >= 0) + { + DecompressPicFromTable(&gTrainerFrontPicTable[trainerPic], gfx->trainerPicGfx, SPECIES_NONE); + LZ77UnCompWram(gTrainerFrontPicPaletteTable[trainerPic].data, gfx->trainerPicPal); + cursor = RequestDma3Copy(gfx->trainerPicGfx, gfx->trainerPicGfxPtr, sizeof(gfx->trainerPicGfx), 1); + LoadPalette(gfx->trainerPicPal, gfx->trainerPicPalOffset, sizeof(gfx->trainerPicPal)); + gfx->trainerPicSprite->data[0] = 0; + gfx->trainerPicSprite->data[7] = cursor; + gfx->trainerPicSprite->callback = SpriteCB_TrainerPicSlideOnscreen; + } +} + +static void TrainerPicSlideOffscreen(struct Pokenav_MatchCallGfx *gfx) +{ + gfx->trainerPicSprite->callback = SpriteCB_TrainerPicSlideOffscreen; +} + +static bool32 WaitForTrainerPic(struct Pokenav_MatchCallGfx *gfx) +{ + return gfx->trainerPicSprite->callback != SpriteCallbackDummy; +} + +static void SpriteCB_TrainerPicSlideOnscreen(struct Sprite *sprite) +{ + switch (sprite->data[0]) + { + case 0: + if (CheckForSpaceForDma3Request(sprite->data[7]) != -1) + { + sprite->x2 = -80; + sprite->invisible = FALSE; + sprite->data[0]++; + } + break; + case 1: + sprite->x2 += 8; + if (sprite->x2 >= 0) + { + sprite->x2 = 0; + sprite->callback = SpriteCallbackDummy; + } + break; + } +} + +static void SpriteCB_TrainerPicSlideOffscreen(struct Sprite *sprite) +{ + sprite->x2 -= 8; + if (sprite->x2 <= -80) + { + sprite->invisible = TRUE; + sprite->callback = SpriteCallbackDummy; + } +} diff --git a/src/pokenav_match_call_1.c b/src/pokenav_match_call_list.c similarity index 70% rename from src/pokenav_match_call_1.c rename to src/pokenav_match_call_list.c index 5612ba6cb4..d56cfdb62e 100755 --- a/src/pokenav_match_call_1.c +++ b/src/pokenav_match_call_list.c @@ -14,27 +14,27 @@ #include "strings.h" #include "constants/songs.h" -struct Pokenav3Struct +struct Pokenav_MatchCallMenu { u16 optionCursorPos; u16 maxOptionId; const u8 *matchCallOptions; u16 headerId; u16 numRegistered; - u16 unkC; - u32 unk10; - u32 unk14; - u32 (*callback)(struct Pokenav3Struct*); - struct PokenavMatchCallEntries matchCallEntries[MAX_REMATCH_ENTRIES - 1]; + u16 numSpecialTrainers; + bool32 initFinished; + u32 loopedTaskId; + u32 (*callback)(struct Pokenav_MatchCallMenu*); + struct PokenavMatchCallEntry matchCallEntries[MAX_REMATCH_ENTRIES - 1]; }; -static u32 CB2_HandleMatchCallInput(struct Pokenav3Struct *); -static u32 GetExitMatchCallMenuId(struct Pokenav3Struct *); -static u32 CB2_HandleMatchCallOptionsInput(struct Pokenav3Struct *); -static u32 CB2_HandleCheckPageInput(struct Pokenav3Struct *); -static u32 CB2_HandleCallInput(struct Pokenav3Struct *); -static u32 sub_81CAD20(s32); -static bool32 sub_81CB1D0(void); +static u32 CB2_HandleMatchCallInput(struct Pokenav_MatchCallMenu *); +static u32 GetExitMatchCallMenuId(struct Pokenav_MatchCallMenu *); +static u32 CB2_HandleMatchCallOptionsInput(struct Pokenav_MatchCallMenu *); +static u32 CB2_HandleCheckPageInput(struct Pokenav_MatchCallMenu *); +static u32 CB2_HandleCallExitInput(struct Pokenav_MatchCallMenu *); +static u32 LoopedTask_BuildMatchCallList(s32); +static bool32 ShouldDoNearbyMessage(void); #include "data/text/match_call_messages.h" @@ -53,20 +53,20 @@ static const u8 sMatchCallOptionsHasCheckPage[] = bool32 PokenavCallback_Init_MatchCall(void) { - struct Pokenav3Struct *state = AllocSubstruct(POKENAV_SUBSTRUCT_MATCH_CALL_MAIN, sizeof(struct Pokenav3Struct)); + struct Pokenav_MatchCallMenu *state = AllocSubstruct(POKENAV_SUBSTRUCT_MATCH_CALL_MAIN, sizeof(struct Pokenav_MatchCallMenu)); if (!state) return FALSE; state->callback = CB2_HandleMatchCallInput; state->headerId = 0; - state->unk10 = 0; - state->unk14 = CreateLoopedTask(sub_81CAD20, 1); + state->initFinished = FALSE; + state->loopedTaskId = CreateLoopedTask(LoopedTask_BuildMatchCallList, 1); return TRUE; } u32 GetMatchCallCallback(void) { - struct Pokenav3Struct *state = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_MAIN); + struct Pokenav_MatchCallMenu *state = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_MAIN); return state->callback(state); } @@ -75,7 +75,7 @@ void FreeMatchCallSubstruct1(void) FreePokenavSubstruct(POKENAV_SUBSTRUCT_MATCH_CALL_MAIN); } -static u32 CB2_HandleMatchCallInput(struct Pokenav3Struct *state) +static u32 CB2_HandleMatchCallInput(struct Pokenav_MatchCallMenu *state) { int selection; @@ -92,7 +92,7 @@ static u32 CB2_HandleMatchCallInput(struct Pokenav3Struct *state) { state->callback = CB2_HandleMatchCallOptionsInput; state->optionCursorPos = 0; - selection = GetSelectedPokenavListIndex(); + selection = PokenavList_GetSelectedIndex(); if (!state->matchCallEntries[selection].isSpecialTrainer || MatchCall_HasCheckPage(state->matchCallEntries[selection].headerId)) { @@ -125,20 +125,20 @@ static u32 CB2_HandleMatchCallInput(struct Pokenav3Struct *state) return POKENAV_MC_FUNC_NONE; } -static u32 GetExitMatchCallMenuId(struct Pokenav3Struct *state) +static u32 GetExitMatchCallMenuId(struct Pokenav_MatchCallMenu *state) { return POKENAV_MAIN_MENU_CURSOR_ON_MATCH_CALL; } -static u32 CB2_HandleMatchCallOptionsInput(struct Pokenav3Struct *state) +static u32 CB2_HandleMatchCallOptionsInput(struct Pokenav_MatchCallMenu *state) { - if ((JOY_NEW(DPAD_UP)) && state->optionCursorPos) + if (JOY_NEW(DPAD_UP) && state->optionCursorPos) { state->optionCursorPos--; return POKENAV_MC_FUNC_MOVE_OPTIONS_CURSOR; } - if ((JOY_NEW(DPAD_DOWN)) && state->optionCursorPos < state->maxOptionId) + if (JOY_NEW(DPAD_DOWN) && state->optionCursorPos < state->maxOptionId) { state->optionCursorPos++; return POKENAV_MC_FUNC_MOVE_OPTIONS_CURSOR; @@ -155,8 +155,8 @@ static u32 CB2_HandleMatchCallOptionsInput(struct Pokenav3Struct *state) if (GetPokenavMode() == POKENAV_MODE_FORCE_CALL_READY) SetPokenavMode(POKENAV_MODE_FORCE_CALL_EXIT); - state->callback = CB2_HandleCallInput; - if (sub_81CB1D0()) + state->callback = CB2_HandleCallExitInput; + if (ShouldDoNearbyMessage()) return POKENAV_MC_FUNC_NEARBY_MSG; return POKENAV_MC_FUNC_CALL_MSG; @@ -175,7 +175,7 @@ static u32 CB2_HandleMatchCallOptionsInput(struct Pokenav3Struct *state) return POKENAV_MC_FUNC_NONE; } -static u32 CB2_HandleCheckPageInput(struct Pokenav3Struct *state) +static u32 CB2_HandleCheckPageInput(struct Pokenav_MatchCallMenu *state) { if (JOY_REPEAT(DPAD_UP)) return POKENAV_MC_FUNC_CHECK_PAGE_UP; @@ -191,21 +191,21 @@ static u32 CB2_HandleCheckPageInput(struct Pokenav3Struct *state) return POKENAV_MC_FUNC_NONE; } -static u32 CB2_HandleCallInput(struct Pokenav3Struct *state) +static u32 CB2_HandleCallExitInput(struct Pokenav_MatchCallMenu *state) { if (JOY_NEW(A_BUTTON | B_BUTTON)) { state->callback = CB2_HandleMatchCallInput; - return POKENAV_MC_FUNC_10; + return POKENAV_MC_FUNC_EXIT_CALL; } return POKENAV_MC_FUNC_NONE; } -static u32 sub_81CAD20(s32 taskState) +static u32 LoopedTask_BuildMatchCallList(s32 taskState) { int i, j; - struct Pokenav3Struct *state = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_MAIN); + struct Pokenav_MatchCallMenu *state = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_MAIN); switch (taskState) { case 0: @@ -213,6 +213,7 @@ static u32 sub_81CAD20(s32 taskState) state->numRegistered = 0; return LT_INC_AND_CONTINUE; case 1: + // Load special trainers (e.g. Rival, gym leaders) for (i = 0, j = state->headerId; i < 30; i++, j++) { if (MatchCall_GetEnabled(j)) @@ -225,7 +226,7 @@ static u32 sub_81CAD20(s32 taskState) if (++state->headerId >= MC_HEADER_COUNT) { - state->unkC = state->headerId; + state->numSpecialTrainers = state->headerId; state->headerId = 0; return LT_INC_AND_CONTINUE; } @@ -233,6 +234,7 @@ static u32 sub_81CAD20(s32 taskState) return LT_CONTINUE; case 2: + // Load normal trainers for (i = 0, j = state->headerId; i < 30; i++, j++) { if (!MatchCall_HasRematchId(state->headerId) && IsRematchEntryRegistered(state->headerId)) @@ -249,7 +251,7 @@ static u32 sub_81CAD20(s32 taskState) return LT_CONTINUE; case 3: - state->unk10 = 1; + state->initFinished = TRUE; break; } @@ -264,55 +266,58 @@ bool32 IsRematchEntryRegistered(int rematchIndex) return FALSE; } -int sub_81CAE28(void) +int IsMatchCallListInitFinished(void) { - struct Pokenav3Struct *state = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_MAIN); - return state->unk10; + struct Pokenav_MatchCallMenu *state = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_MAIN); + return state->initFinished; } int GetNumberRegistered(void) { - struct Pokenav3Struct *state = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_MAIN); + struct Pokenav_MatchCallMenu *state = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_MAIN); return state->numRegistered; } -int sub_81CAE48(void) +// Unused +static int GetNumSpecialTrainers(void) { - struct Pokenav3Struct *state = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_MAIN); - return state->unkC; + struct Pokenav_MatchCallMenu *state = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_MAIN); + return state->numSpecialTrainers; } -int unref_sub_81CAE58(void) +// Unused +static int GetNumNormalTrainers(void) { - struct Pokenav3Struct *state = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_MAIN); - return state->numRegistered - state->unkC; + struct Pokenav_MatchCallMenu *state = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_MAIN); + return state->numRegistered - state->numSpecialTrainers; } -int unref_sub_81CAE6C(int arg0) +// Unused +static int GetNormalTrainerHeaderId(int index) { - struct Pokenav3Struct *state = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_MAIN); - arg0 += state->unkC; - if (arg0 >= state->numRegistered) + struct Pokenav_MatchCallMenu *state = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_MAIN); + index += state->numSpecialTrainers; + if (index >= state->numRegistered) return REMATCH_TABLE_ENTRIES; - return state->matchCallEntries[arg0].headerId; + return state->matchCallEntries[index].headerId; } -struct PokenavMatchCallEntries *sub_81CAE94(void) +struct PokenavMatchCallEntry *GetMatchCallList(void) { - struct Pokenav3Struct *state = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_MAIN); + struct Pokenav_MatchCallMenu *state = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_MAIN); return state->matchCallEntries; } u16 GetMatchCallMapSec(int index) { - struct Pokenav3Struct *state = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_MAIN); + struct Pokenav_MatchCallMenu *state = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_MAIN); return state->matchCallEntries[index].mapSec; } bool32 ShouldDrawRematchPokeballIcon(int index) { - struct Pokenav3Struct *state = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_MAIN); + struct Pokenav_MatchCallMenu *state = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_MAIN); if (!state->matchCallEntries[index].isSpecialTrainer) index = state->matchCallEntries[index].headerId; else @@ -327,7 +332,7 @@ bool32 ShouldDrawRematchPokeballIcon(int index) int GetMatchCallTrainerPic(int index) { int headerId; - struct Pokenav3Struct *state = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_MAIN); + struct Pokenav_MatchCallMenu *state = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_MAIN); if (!state->matchCallEntries[index].isSpecialTrainer) { index = GetTrainerIdxByRematchIdx(state->matchCallEntries[index].headerId); @@ -346,15 +351,15 @@ int GetMatchCallTrainerPic(int index) return gFacilityClassToPicIndex[index]; } -const u8 *GetMatchCallMessageText(int index, u8 *arg1) +const u8 *GetMatchCallMessageText(int index, bool8 *newRematchRequest) { - struct Pokenav3Struct *state = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_MAIN); - *arg1 = 0; + struct Pokenav_MatchCallMenu *state = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_MAIN); + *newRematchRequest = FALSE; if (!Overworld_MapTypeAllowsTeleportAndFly(gMapHeader.mapType)) return gText_CallCantBeMadeHere; if (!state->matchCallEntries[index].isSpecialTrainer) - *arg1 = SelectMatchCallMessage(GetTrainerIdxByRematchIdx(state->matchCallEntries[index].headerId), gStringVar4); + *newRematchRequest = SelectMatchCallMessage(GetTrainerIdxByRematchIdx(state->matchCallEntries[index].headerId), gStringVar4); else MatchCall_GetMessage(state->matchCallEntries[index].headerId, gStringVar4); @@ -364,7 +369,7 @@ const u8 *GetMatchCallMessageText(int index, u8 *arg1) const u8 *GetMatchCallFlavorText(int index, int checkPageEntry) { int rematchId; - struct Pokenav3Struct *state = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_MAIN); + struct Pokenav_MatchCallMenu *state = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_MAIN); if (state->matchCallEntries[index].isSpecialTrainer) { rematchId = MatchCall_GetRematchTableIdx(state->matchCallEntries[index].headerId); @@ -381,20 +386,20 @@ const u8 *GetMatchCallFlavorText(int index, int checkPageEntry) u16 GetMatchCallOptionCursorPos(void) { - struct Pokenav3Struct *state = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_MAIN); + struct Pokenav_MatchCallMenu *state = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_MAIN); return state->optionCursorPos; } u16 GetMatchCallOptionId(int optionId) { - struct Pokenav3Struct *state = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_MAIN); + struct Pokenav_MatchCallMenu *state = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_MAIN); if (state->maxOptionId < optionId) return MATCH_CALL_OPTION_COUNT; return state->matchCallOptions[optionId]; } -void BufferMatchCallNameAndDesc(struct PokenavMatchCallEntries *matchCallEntry, u8 *str) +void BufferMatchCallNameAndDesc(struct PokenavMatchCallEntry *matchCallEntry, u8 *str) { const u8 *trainerName; const u8 *className; @@ -431,7 +436,7 @@ u8 GetMatchTableMapSectionId(int rematchIndex) int GetIndexDeltaOfNextCheckPageDown(int index) { - struct Pokenav3Struct *state = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_MAIN); + struct Pokenav_MatchCallMenu *state = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_MAIN); int count = 1; while (++index < state->numRegistered) { @@ -448,7 +453,7 @@ int GetIndexDeltaOfNextCheckPageDown(int index) int GetIndexDeltaOfNextCheckPageUp(int index) { - struct Pokenav3Struct *state = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_MAIN); + struct Pokenav_MatchCallMenu *state = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_MAIN); int count = -1; while (--index >= 0) { @@ -463,7 +468,8 @@ int GetIndexDeltaOfNextCheckPageUp(int index) return 0; } -bool32 unref_sub_81CB16C(void) +// Unused +static bool32 HasRematchEntry(void) { int i; @@ -486,10 +492,10 @@ bool32 unref_sub_81CB16C(void) return FALSE; } -static bool32 sub_81CB1D0(void) +static bool32 ShouldDoNearbyMessage(void) { - struct Pokenav3Struct *state = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_MAIN); - int selection = GetSelectedPokenavListIndex(); + struct Pokenav_MatchCallMenu *state = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_MAIN); + int selection = PokenavList_GetSelectedIndex(); if (!state->matchCallEntries[selection].isSpecialTrainer) { if (GetMatchCallMapSec(selection) == gMapHeader.regionMapSectionId) diff --git a/src/pokenav_match_call_ui.c b/src/pokenav_match_call_ui.c deleted file mode 100644 index 47226ca729..0000000000 --- a/src/pokenav_match_call_ui.c +++ /dev/null @@ -1,997 +0,0 @@ -#include "global.h" -#include "pokenav.h" -#include "window.h" -#include "strings.h" -#include "text.h" -#include "bg.h" -#include "menu.h" -#include "decompress.h" -#include "international_string_util.h" - -// TODO: This UI isnt just for match call, seems to be the general pokenav list UI - -struct PokenavListMenuWindow { - u8 bg; - u8 unk1; - u8 unk2; - u8 unk3; - u8 unk4; - u8 fontId; - u16 unk6; - u16 windowId; - u16 unkA; - u16 unkC; - u16 unkE; -}; - -struct MatchCallWindowState { - // The index of the element at the top of the window. - u16 windowTopIndex; - u16 listLength; - u16 unk4; - // The index of the cursor, relative to the top of the window. - u16 selectedIndexOffset; - u16 visibleEntries; - u16 unkA; - u32 unkC; - void * unk10; -}; - -struct PokenavSub17Substruct -{ - struct PokenavListMenuWindow listWindow; - u32 unk10; - u32 unk14; - u32 unk18; - void * unk1C; - s32 unk20; - s32 unk24; - u32 loopedTaskId; - s32 unk2C; - u32 unk30; - void (*unk34)(struct PokenavMatchCallEntries *, u8*); - void (*unk38)(u16, u32, u32); - struct Sprite *rightArrow; - struct Sprite *upArrow; - struct Sprite *downArrow; - u8 unkTextBuffer[0x40]; -}; - -// Generally at index 0x11 (17) -struct PokenavSub17 -{ - struct PokenavSub17Substruct list; - u8 tilemapBuffer[0x800]; - struct MatchCallWindowState unk888; - s32 unk89C; - u32 loopedTaskId; -}; - -void sub_81C82E4(struct PokenavSub17 *matchCall); -bool32 CopyPokenavListMenuTemplate(struct PokenavSub17Substruct *a0, const struct BgTemplate *a1, struct PokenavListTemplate *a2, s32 a3); -void InitMatchCallWindowState(struct MatchCallWindowState *a0, struct PokenavListTemplate *a1); -void SpriteCB_MatchCallUpArrow(struct Sprite *sprite); -void SpriteCB_MatchCallDownArrow(struct Sprite *sprite); -void SpriteCB_MatchCallRightArrow(struct Sprite *sprite); -void ToggleMatchCallArrows(struct PokenavSub17Substruct *a0, u32 a1); -void DestroyMatchCallListArrows(struct PokenavSub17Substruct *a0); -void CreateMatchCallArrowSprites(struct MatchCallWindowState *a0, struct PokenavSub17Substruct *a1); -void sub_81C8ED0(void); -static void PrintMatchCallFlavorText(struct MatchCallWindowState *a0, struct PokenavSub17Substruct *a1, u32 a2); -void PrintMatchCallFieldNames(struct PokenavSub17Substruct *a0, u32 a1); -void sub_81C8D4C(struct MatchCallWindowState *a0, struct PokenavSub17Substruct *a1); -void sub_81C8CB4(struct MatchCallWindowState *a0, struct PokenavSub17Substruct *a1); -void sub_81C8B70(struct PokenavListMenuWindow *a0, s32 a1, s32 a2); -void sub_81C8568(s32 a0, struct PokenavSub17Substruct *a1); -void sub_81C83AC(void * a0, u32 a1, u32 a2, u32 a3, u32 a4, struct PokenavSub17Substruct *a5); -void sub_81C837C(struct MatchCallWindowState *a0, struct PokenavSub17Substruct *a1); -void sub_81C835C(struct PokenavListMenuWindow *a0); -u32 LoopedTask_sub_81C8254(s32 state); -bool32 sub_81C83E0(void); -u32 LoopedTask_sub_81C83F0(s32 state); -u32 LoopedTask_sub_81C85A0(s32 state); -u32 LoopedTask_sub_81C8870(s32 state); -u32 LoopedTask_sub_81C8A28(s32 state); -u32 LoopedTask_PrintCheckPageInfo(s32 state); - -static const u16 sMatchcallArrowPaletteData[] = INCBIN_U16("graphics/pokenav/arrows_matchcall.gbapal"); -static const u32 sMatchcallArrowSpriteSheetData[] = INCBIN_U32("graphics/pokenav/arrows_matchcall.4bpp.lz"); - -EWRAM_DATA u32 gUnknown_0203CF44 = 0; - -bool32 sub_81C81D4(const struct BgTemplate *arg0, struct PokenavListTemplate *arg1, s32 arg2) -{ - struct PokenavSub17 *structPtr = AllocSubstruct(POKENAV_SUBSTRUCT_MATCH_CALL_LIST, sizeof(struct PokenavSub17)); - if (structPtr == NULL) - return FALSE; - - InitMatchCallWindowState(&structPtr->unk888, arg1); - if (!CopyPokenavListMenuTemplate(&structPtr->list, arg0, arg1, arg2)) - return FALSE; - - CreateLoopedTask(LoopedTask_sub_81C8254, 6); - return TRUE; -} - -bool32 sub_81C8224(void) -{ - return FuncIsActiveLoopedTask(LoopedTask_sub_81C8254); -} - -void sub_81C8234(void) -{ - struct PokenavSub17 *structPtr; - - structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_LIST); - DestroyMatchCallListArrows(&structPtr->list); - RemoveWindow(structPtr->list.listWindow.windowId); - FreePokenavSubstruct(POKENAV_SUBSTRUCT_MATCH_CALL_LIST); -} - -u32 LoopedTask_sub_81C8254(s32 state) -{ - struct PokenavSub17 *structPtr; - - if (IsDma3ManagerBusyWithBgCopy()) - return LT_PAUSE; - - structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_LIST); - - switch (state) - { - case 0: - sub_81C82E4(structPtr); - return LT_INC_AND_PAUSE; - case 1: - sub_81C835C(&structPtr->list.listWindow); - return LT_INC_AND_PAUSE; - case 2: - sub_81C837C(&structPtr->unk888, &structPtr->list); - return LT_INC_AND_PAUSE; - case 3: - if (sub_81C83E0()) - { - return LT_PAUSE; - } - else - { - sub_81C8ED0(); - return LT_INC_AND_CONTINUE; - } - case 4: - CreateMatchCallArrowSprites(&structPtr->unk888, &structPtr->list); - return LT_FINISH; - default: - return LT_FINISH; - } -} - -void sub_81C82E4(struct PokenavSub17 *matchCall) -{ - u16 tileNum = (matchCall->list.listWindow.unk1 << 12) | matchCall->list.listWindow.unk6; - BgDmaFill(matchCall->list.listWindow.bg, PIXEL_FILL(1), matchCall->list.listWindow.unk6, 1); - BgDmaFill(matchCall->list.listWindow.bg, PIXEL_FILL(4), matchCall->list.listWindow.unk6 + 1, 1); - SetBgTilemapBuffer(matchCall->list.listWindow.bg, matchCall->tilemapBuffer); - FillBgTilemapBufferRect_Palette0(matchCall->list.listWindow.bg, tileNum, 0, 0, 32, 32); - ChangeBgY(matchCall->list.listWindow.bg, 0, BG_COORD_SET); - ChangeBgX(matchCall->list.listWindow.bg, 0, BG_COORD_SET); - ChangeBgY(matchCall->list.listWindow.bg, matchCall->list.listWindow.unk3 << 11, BG_COORD_SUB); - CopyBgTilemapBufferToVram(matchCall->list.listWindow.bg); -} - -void sub_81C835C(struct PokenavListMenuWindow *listWindow) -{ - FillWindowPixelBuffer(listWindow->windowId, PIXEL_FILL(1)); - PutWindowTilemap(listWindow->windowId); - CopyWindowToVram(listWindow->windowId, COPYWIN_MAP); -} - -void sub_81C837C(struct MatchCallWindowState *state, struct PokenavSub17Substruct *a1) -{ - s32 arg2 = state->listLength - state->windowTopIndex; - if (arg2 > state->visibleEntries) - arg2 = state->visibleEntries; - - sub_81C83AC(state->unk10, state->windowTopIndex, arg2, state->unkC, 0, a1); -} - -void sub_81C83AC(void * a0, u32 a1, u32 a2, u32 a3, u32 a4, struct PokenavSub17Substruct *list) -{ - if (a2 == 0) - return; - - list->unk1C = a0 + a1 * a3; - list->unk18 = a3; - list->listWindow.unkC = 0; - list->listWindow.unkE = a2; - list->unk14 = a1; - list->unk10 = a4; - CreateLoopedTask(LoopedTask_sub_81C83F0, 5); -} - -bool32 sub_81C83E0(void) -{ - return FuncIsActiveLoopedTask(LoopedTask_sub_81C83F0); -} - -u32 LoopedTask_sub_81C83F0(s32 state) -{ - u32 v1; - struct PokenavSub17Substruct *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_LIST); - - switch (state) - { - case 0: - v1 = (structPtr->listWindow.unkA + structPtr->listWindow.unkC + structPtr->unk10) & 0xF; - structPtr->unk34(structPtr->unk1C, structPtr->unkTextBuffer); - if (structPtr->unk38 != NULL) - structPtr->unk38(structPtr->listWindow.windowId, structPtr->unk14, v1); - - AddTextPrinterParameterized(structPtr->listWindow.windowId, structPtr->listWindow.fontId, structPtr->unkTextBuffer, 8, (v1 << 4) + 1, 255, NULL); - if (++structPtr->listWindow.unkC >= structPtr->listWindow.unkE) - { - if (structPtr->unk38 != NULL) - CopyWindowToVram(structPtr->listWindow.windowId, COPYWIN_FULL); - else - CopyWindowToVram(structPtr->listWindow.windowId, COPYWIN_GFX); - return LT_INC_AND_PAUSE; - } - else - { - structPtr->unk1C += structPtr->unk18; - structPtr->unk14++; - return LT_CONTINUE; - } - case 1: - if (IsDma3ManagerBusyWithBgCopy()) - return LT_PAUSE; - return LT_FINISH; - } - return LT_FINISH; -} - -bool32 ShouldShowUpArrow(void) -{ - struct PokenavSub17 *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_LIST); - - return (structPtr->unk888.windowTopIndex != 0); -} - -bool32 ShouldShowDownArrow(void) -{ - struct PokenavSub17 *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_LIST); - struct MatchCallWindowState *subPtr = &structPtr->unk888; - - return (subPtr->windowTopIndex + subPtr->visibleEntries < subPtr->listLength); -} - -void MatchCall_MoveWindow(s32 a0, bool32 a1) -{ - struct PokenavSub17 *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_LIST); - struct MatchCallWindowState *subPtr = &structPtr->unk888; - - if (a0 < 0) - { - if (subPtr->windowTopIndex + a0 < 0) - a0 = -1 * subPtr->windowTopIndex; - if (a1) - sub_81C83AC(subPtr->unk10, subPtr->windowTopIndex + a0, a0 * -1, subPtr->unkC, a0, &structPtr->list); - } - else if (a1) - { - s32 temp = gUnknown_0203CF44 = subPtr->windowTopIndex + subPtr->visibleEntries; - if (temp + a0 >= subPtr->listLength) - a0 = subPtr->listLength - temp; - - sub_81C83AC(subPtr->unk10, gUnknown_0203CF44, a0, subPtr->unkC, subPtr->visibleEntries, &structPtr->list); - } - - sub_81C8568(a0, &structPtr->list); - subPtr->windowTopIndex += a0; -} - -void sub_81C8568(s32 a0, struct PokenavSub17Substruct *list) -{ - list->unk20 = GetBgY(list->listWindow.bg); - list->unk24 = list->unk20 + (a0 << 12); - if (a0 > 0) - list->unk30 = BG_COORD_ADD; - else - list->unk30 = BG_COORD_SUB; - list->unk2C = a0; - list->loopedTaskId = CreateLoopedTask(LoopedTask_sub_81C85A0, 6); -} - -u32 LoopedTask_sub_81C85A0(s32 state) -{ - s32 y, v1; - bool32 flag; - struct PokenavSub17 *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_LIST); - struct PokenavSub17Substruct *subPtr = &structPtr->list; - - switch (state) - { - case 0: - if (!sub_81C83E0()) - return LT_INC_AND_CONTINUE; - return LT_PAUSE; - case 1: - flag = FALSE; - y = GetBgY(subPtr->listWindow.bg); - v1 = ChangeBgY(subPtr->listWindow.bg, 0x1000, subPtr->unk30); - if (subPtr->unk30 == BG_COORD_SUB) - { - if ((y > subPtr->unk24 || y <= subPtr->unk20) && v1 <= subPtr->unk24) - flag = TRUE; - } - else // BG_COORD_ADD - { - if ((y < subPtr->unk24 || y >= subPtr->unk20) && v1 >= subPtr->unk24) - flag = TRUE; - } - - if (flag) - { - subPtr->listWindow.unkA = (subPtr->listWindow.unkA + subPtr->unk2C) & 0xF; - ChangeBgY(subPtr->listWindow.bg, subPtr->unk24, BG_COORD_SET); - return LT_FINISH; - } - return LT_PAUSE; - } - return LT_FINISH; -} - -bool32 IsMonListLoopedTaskActive(void) -{ - struct PokenavSub17 *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_LIST); - return IsLoopedTaskActive(structPtr->list.loopedTaskId); -} - -struct MatchCallWindowState *GetMatchCallWindowStruct(void) -{ - struct PokenavSub17 *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_LIST); - return &structPtr->unk888; -} - -int MatchCall_MoveCursorUp(void) -{ - struct MatchCallWindowState *structPtr = GetMatchCallWindowStruct(); - - if (structPtr->selectedIndexOffset != 0) - { - structPtr->selectedIndexOffset--; - return 1; - } - if (ShouldShowUpArrow()) - { - MatchCall_MoveWindow(-1, TRUE); - return 2; - } - return 0; -} - -int MatchCall_MoveCursorDown(void) -{ - struct MatchCallWindowState *structPtr = GetMatchCallWindowStruct(); - - if (structPtr->windowTopIndex + structPtr->selectedIndexOffset >= structPtr->listLength - 1) - return 0; - if (structPtr->selectedIndexOffset < structPtr->visibleEntries - 1) - { - structPtr->selectedIndexOffset++; - return 1; - } - if (ShouldShowDownArrow()) - { - MatchCall_MoveWindow(1, TRUE); - return 2; - } - return 0; -} - -int MatchCall_PageUp(void) -{ - s32 scroll; - struct MatchCallWindowState *structPtr = GetMatchCallWindowStruct(); - - if (ShouldShowUpArrow()) - { - if (structPtr->windowTopIndex >= structPtr->visibleEntries) - scroll = structPtr->visibleEntries; - else - scroll = structPtr->windowTopIndex; - MatchCall_MoveWindow(scroll * -1, TRUE); - return 2; - } - else if (structPtr->selectedIndexOffset != 0) - { - structPtr->selectedIndexOffset = 0; - return 1; - } - return 0; -} - -int MatchCall_PageDown(void) -{ - struct MatchCallWindowState *structPtr = GetMatchCallWindowStruct(); - - if (ShouldShowDownArrow()) - { - s32 windowBottomIndex = structPtr->windowTopIndex + structPtr->visibleEntries; - s32 scroll = structPtr->unk4 - structPtr->windowTopIndex; - - if (windowBottomIndex <= structPtr->unk4) - scroll = structPtr->visibleEntries; - MatchCall_MoveWindow(scroll, TRUE); - return 2; - } - else - { - s32 cursor, lastVisibleIndex; - if (structPtr->listLength >= structPtr->visibleEntries) - { - cursor = structPtr->selectedIndexOffset; - lastVisibleIndex = structPtr->visibleEntries; - } - else - { - cursor = structPtr->selectedIndexOffset; - lastVisibleIndex = structPtr->listLength; - } - lastVisibleIndex -= 1; - if (cursor >= lastVisibleIndex) - return 0; - - structPtr->selectedIndexOffset = lastVisibleIndex; - return 1; - } -} - -u32 GetSelectedPokenavListIndex(void) -{ - struct MatchCallWindowState *structPtr = GetMatchCallWindowStruct(); - - return structPtr->windowTopIndex + structPtr->selectedIndexOffset; -} - -u32 GetMatchCallListTopIndex(void) -{ - struct MatchCallWindowState *structPtr = GetMatchCallWindowStruct(); - - return structPtr->windowTopIndex; -} - -void sub_81C877C(void) -{ - struct PokenavSub17 *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_LIST); - structPtr->unk89C = 0; - structPtr->loopedTaskId = CreateLoopedTask(LoopedTask_sub_81C8870, 6); -} - -void PrintCheckPageInfo(s16 a0) -{ - struct PokenavSub17 *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_LIST); - structPtr->unk888.windowTopIndex += a0; - structPtr->unk89C = 0; - structPtr->loopedTaskId = CreateLoopedTask(LoopedTask_PrintCheckPageInfo, 6); -} - -void sub_81C87F0(void) -{ - struct PokenavSub17 *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_LIST); - structPtr->unk89C = 0; - structPtr->loopedTaskId = CreateLoopedTask(LoopedTask_sub_81C8A28, 6); -} - -bool32 IsMatchCallListTaskActive(void) -{ - struct PokenavSub17 *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_LIST); - return IsLoopedTaskActive(structPtr->loopedTaskId); -} - -void sub_81C8838(void) -{ - struct PokenavSub17 *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_LIST); - struct MatchCallWindowState *subPtr = &structPtr->unk888; - structPtr->list.unk38(structPtr->list.listWindow.windowId, subPtr->windowTopIndex + subPtr->selectedIndexOffset, (structPtr->list.listWindow.unkA + subPtr->selectedIndexOffset) & 0xF); - CopyWindowToVram(structPtr->list.listWindow.windowId, COPYWIN_MAP); -} - -// TODO: -u32 LoopedTask_sub_81C8870(s32 state) -{ - struct PokenavSub17 *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_LIST); - - switch (state) - { - case 0: - ToggleMatchCallArrows(&structPtr->list, 1); - // fall-through - case 1: - if (structPtr->unk89C != structPtr->unk888.selectedIndexOffset) - sub_81C8B70(&structPtr->list.listWindow, structPtr->unk89C, 1); - - structPtr->unk89C++; - return LT_INC_AND_PAUSE; - case 2: - if (!IsDma3ManagerBusyWithBgCopy()) - { - if (structPtr->unk89C != structPtr->unk888.visibleEntries) - return 6; - if (structPtr->unk888.selectedIndexOffset != 0) - sub_81C8B70(&structPtr->list.listWindow, structPtr->unk89C, structPtr->unk888.selectedIndexOffset); - - return LT_INC_AND_PAUSE; - } - return LT_PAUSE; - case 3: - if (!IsDma3ManagerBusyWithBgCopy()) - { - if (structPtr->unk888.selectedIndexOffset != 0) - { - MatchCall_MoveWindow(structPtr->unk888.selectedIndexOffset, FALSE); - return LT_INC_AND_PAUSE; - } - return LT_FINISH; - } - return LT_PAUSE; - case 4: - if (IsMonListLoopedTaskActive()) - return LT_PAUSE; - - structPtr->unk888.selectedIndexOffset = 0; - return LT_FINISH; - } - return LT_FINISH; -} - -u32 LoopedTask_PrintCheckPageInfo(s32 state) -{ - struct PokenavSub17 *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_LIST); - if (IsDma3ManagerBusyWithBgCopy()) - return LT_PAUSE; - - switch (state) - { - case 0: - sub_81C8CB4(&structPtr->unk888, &structPtr->list); - break; - case 1: - PrintMatchCallFieldNames(&structPtr->list, 0); - break; - case 2: - PrintMatchCallFlavorText(&structPtr->unk888, &structPtr->list, CHECK_PAGE_STRATEGY); - break; - case 3: - PrintMatchCallFieldNames(&structPtr->list, 1); - break; - case 4: - PrintMatchCallFlavorText(&structPtr->unk888, &structPtr->list, CHECK_PAGE_POKEMON); - break; - case 5: - PrintMatchCallFieldNames(&structPtr->list, 2); - break; - case 6: - PrintMatchCallFlavorText(&structPtr->unk888, &structPtr->list, CHECK_PAGE_INTRO_1); - break; - case 7: - PrintMatchCallFlavorText(&structPtr->unk888, &structPtr->list, CHECK_PAGE_INTRO_2); - break; - default: - return LT_FINISH; - } - return LT_INC_AND_PAUSE; -} - -u32 LoopedTask_sub_81C8A28(s32 state) -{ - struct PokenavSub17 *structPtr; - struct MatchCallWindowState *subPtr888; - struct PokenavSub17Substruct *subPtr0; - s32 r5, *ptr; - - if (IsDma3ManagerBusyWithBgCopy()) - return LT_PAUSE; - - structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_LIST); - subPtr888 = &structPtr->unk888; - subPtr0 = &structPtr->list; - - switch (state) - { - case 0: - sub_81C8D4C(subPtr888, subPtr0); - return LT_INC_AND_PAUSE; - case 1: - ptr = &structPtr->unk89C; - if (++(*ptr) < structPtr->unk888.visibleEntries) - { - sub_81C8B70(&subPtr0->listWindow, *ptr, 1); - return LT_PAUSE; - } - - *ptr = 0; - if (subPtr888->listLength <= subPtr888->visibleEntries) - { - if (subPtr888->windowTopIndex != 0) - { - s32 r4 = subPtr888->windowTopIndex; - r5 = -r4; - sub_81C8B70(&subPtr0->listWindow, r5, r4); - subPtr888->selectedIndexOffset = r4; - *ptr = r5; - return LT_INC_AND_PAUSE; - } - } - else - { - if (subPtr888->windowTopIndex + subPtr888->visibleEntries > subPtr888->listLength) - { - s32 r4 = subPtr888->windowTopIndex + subPtr888->visibleEntries - subPtr888->listLength; - r5 = -r4; - sub_81C8B70(&subPtr0->listWindow, r5, r4); - subPtr888->selectedIndexOffset = r4; - *ptr = r5; - return LT_INC_AND_PAUSE; - } - } - return 9; - case 2: - MatchCall_MoveWindow(structPtr->unk89C, FALSE); - return LT_INC_AND_PAUSE; - case 3: - if (!IsMonListLoopedTaskActive()) - { - structPtr->unk89C = 0; - return 1; - } - return 2; - case 4: - sub_81C83AC(subPtr888->unk10, subPtr888->windowTopIndex + structPtr->unk89C, 1, subPtr888->unkC, structPtr->unk89C, &structPtr->list); - return LT_INC_AND_PAUSE; - case 5: - if (sub_81C83E0()) - return LT_PAUSE; - if (++structPtr->unk89C >= subPtr888->listLength || structPtr->unk89C >= subPtr888->visibleEntries) - return LT_INC_AND_CONTINUE; - return 9; - case 6: - ToggleMatchCallArrows(subPtr0, 0); - return LT_FINISH; - } - - return LT_FINISH; -} - -void sub_81C8B70(struct PokenavListMenuWindow *listWindow, s32 a1, s32 a2) -{ - u8 *v1 = (u8*)GetWindowAttribute(listWindow->windowId, WINDOW_TILE_DATA); - u32 v2 = listWindow->unk4 * 64; - - a1 = (listWindow->unkA + a1) & 0xF; - if (a1 + a2 <= 16) - { - CpuFastFill8(PIXEL_FILL(1), v1 + a1 * v2, a2 * v2); - CopyWindowToVram(listWindow->windowId, COPYWIN_GFX); - } - else - { - u32 v3 = 16 - a1; - u32 v4 = a2 - v3; - - CpuFastFill8(PIXEL_FILL(1), v1 + a1 * v2, v3 * v2); - CpuFastFill8(PIXEL_FILL(1), v1, v4 * v2); - CopyWindowToVram(listWindow->windowId, COPYWIN_GFX); - } - - for (a2--; a2 != -1; a1 = (a1 + 1) & 0xF, a2--) - ClearRematchPokeballIcon(listWindow->windowId, a1); - - CopyWindowToVram(listWindow->windowId, COPYWIN_MAP); -} - -void sub_81C8C64(struct PokenavListMenuWindow *listWindow, u32 a1) -{ - u16 var; - u16 *v1 = (u16*)GetBgTilemapBuffer(GetWindowAttribute(listWindow->windowId, WINDOW_BG)); - v1 += ((listWindow->unkA << 6) + listWindow->unk2) - 1; - - if (a1 != 0) - var = (listWindow->unk1 << 12) | (listWindow->unk6 + 1); - else - var = (listWindow->unk1 << 12) | (listWindow->unk6); - - v1[0] = var; - v1[0x20] = var; -} - -void sub_81C8CB4(struct MatchCallWindowState *state, struct PokenavSub17Substruct *list) -{ - u8 colors[3] = {TEXT_COLOR_TRANSPARENT, TEXT_COLOR_DARK_GRAY, TEXT_COLOR_LIGHT_RED}; - - list->unk34(state->unk10 + state->unkC * state->windowTopIndex, list->unkTextBuffer); - list->unk38(list->listWindow.windowId, state->windowTopIndex, list->listWindow.unkA); - FillWindowPixelRect(list->listWindow.windowId, PIXEL_FILL(4), 0, list->listWindow.unkA * 16, list->listWindow.unk4 * 8, 16); - AddTextPrinterParameterized3(list->listWindow.windowId, list->listWindow.fontId, 8, (list->listWindow.unkA * 16) + 1, colors, TEXT_SKIP_DRAW, list->unkTextBuffer); - sub_81C8C64(&list->listWindow, 1); - CopyWindowRectToVram(list->listWindow.windowId, COPYWIN_FULL, 0, list->listWindow.unkA * 2, list->listWindow.unk4, 2); -} - -void sub_81C8D4C(struct MatchCallWindowState *state, struct PokenavSub17Substruct *list) -{ - list->unk34(state->unk10 + state->unkC * state->windowTopIndex, list->unkTextBuffer); - FillWindowPixelRect(list->listWindow.windowId, PIXEL_FILL(1), 0, list->listWindow.unkA * 16, list->listWindow.unk4 * 8, 16); - AddTextPrinterParameterized(list->listWindow.windowId, list->listWindow.fontId, list->unkTextBuffer, 8, list->listWindow.unkA * 16 + 1, TEXT_SKIP_DRAW, NULL); - sub_81C8C64(&list->listWindow, 0); - CopyWindowToVram(list->listWindow.windowId, COPYWIN_FULL); -} - -void PrintMatchCallFieldNames(struct PokenavSub17Substruct *list, u32 fieldId) -{ - const u8 *fieldNames[] = {gText_PokenavMatchCall_Strategy, gText_PokenavMatchCall_TrainerPokemon, gText_PokenavMatchCall_SelfIntroduction}; - u8 colors[3] = {TEXT_COLOR_WHITE, TEXT_COLOR_RED, TEXT_COLOR_LIGHT_RED}; - u32 top = (list->listWindow.unkA + 1 + (fieldId * 2)) & 0xF; - - FillWindowPixelRect(list->listWindow.windowId, PIXEL_FILL(1), 0, top << 4, list->listWindow.unk4, 16); - AddTextPrinterParameterized3(list->listWindow.windowId, FONT_NARROW, 2, (top << 4) + 1, colors, TEXT_SKIP_DRAW, fieldNames[fieldId]); - CopyWindowRectToVram(list->listWindow.windowId, COPYWIN_GFX, 0, top << 1, list->listWindow.unk4, 2); -} - -static void PrintMatchCallFlavorText(struct MatchCallWindowState *a0, struct PokenavSub17Substruct *list, u32 checkPageEntry) -{ - // lines 1, 3, and 5 are the field names printed by PrintMatchCallFieldNames - static const u8 lineOffsets[CHECK_PAGE_ENTRY_COUNT] = - { - [CHECK_PAGE_STRATEGY] = 2, - [CHECK_PAGE_POKEMON] = 4, - [CHECK_PAGE_INTRO_1] = 6, - [CHECK_PAGE_INTRO_2] = 7 - }; - - u32 r6 = (list->listWindow.unkA + lineOffsets[checkPageEntry]) & 0xF; - const u8 *str = GetMatchCallFlavorText(a0->windowTopIndex, checkPageEntry); - - if (str != NULL) - { - FillWindowTilesByRow(list->listWindow.windowId, 1, r6 * 2, list->listWindow.unk4 - 1, 2); - AddTextPrinterParameterized(list->listWindow.windowId, FONT_NARROW, str, 2, (r6 << 4) + 1, TEXT_SKIP_DRAW, NULL); - CopyWindowRectToVram(list->listWindow.windowId, COPYWIN_GFX, 0, r6 * 2, list->listWindow.unk4, 2); - } -} - -static const struct CompressedSpriteSheet sMatchcallArrowSpriteSheets[] = -{ - { - .data = sMatchcallArrowSpriteSheetData, - .size = 192, - .tag = 0xA - } -}; - -static const struct SpritePalette sMatchcallArrowPalettes[] = -{ - { - .data = sMatchcallArrowPaletteData, - .tag = 0x14 - }, - {} -}; - -static const struct OamData sMatchCallRightArrowSpriteOam = -{ - .y = 0, - .affineMode = ST_OAM_AFFINE_OFF, - .objMode = ST_OAM_OBJ_NORMAL, - .bpp = ST_OAM_4BPP, - .shape = SPRITE_SHAPE(8x16), - .x = 0, - .size = SPRITE_SIZE(8x16), - .tileNum = 0, - .priority = 2, - .paletteNum = 0 -}; - -static const struct SpriteTemplate sMatchCallRightArrowSprite = -{ - .tileTag = 0xA, - .paletteTag = 0x14, - .oam = &sMatchCallRightArrowSpriteOam, - .anims = gDummySpriteAnimTable, - .images = NULL, - .affineAnims = gDummySpriteAffineAnimTable, - .callback = SpriteCB_MatchCallRightArrow -}; - -static const struct OamData sMatchCallUpDownArrowSpriteOam = -{ - .y = 0, - .affineMode = ST_OAM_AFFINE_OFF, - .objMode = ST_OAM_OBJ_NORMAL, - .bpp = ST_OAM_4BPP, - .shape = SPRITE_SHAPE(16x8), - .x = 0, - .size = SPRITE_SIZE(16x8), - .tileNum = 0, - .priority = 2, - .paletteNum = 0 -}; - -static const struct SpriteTemplate sMatchCallUpDownArrowSprite = -{ - .tileTag = 0xA, - .paletteTag = 0x14, - .oam = &sMatchCallUpDownArrowSpriteOam, - .anims = gDummySpriteAnimTable, - .images = NULL, - .affineAnims = gDummySpriteAffineAnimTable, - .callback = SpriteCallbackDummy -}; - -void sub_81C8ED0(void) -{ - u32 i; - const struct CompressedSpriteSheet *ptr; - - for (i = 0, ptr = sMatchcallArrowSpriteSheets; i < ARRAY_COUNT(sMatchcallArrowSpriteSheets); ptr++, i++) - LoadCompressedSpriteSheet(ptr); - - Pokenav_AllocAndLoadPalettes(sMatchcallArrowPalettes); -} - -void CreateMatchCallArrowSprites(struct MatchCallWindowState *windowState, struct PokenavSub17Substruct *list) -{ - u32 spriteId; - s16 x; - - spriteId = CreateSprite(&sMatchCallRightArrowSprite, list->listWindow.unk2 * 8 + 3, (list->listWindow.unk3 + 1) * 8, 7); - list->rightArrow = &gSprites[spriteId]; - - x = list->listWindow.unk2 * 8 + (list->listWindow.unk4 - 1) * 4; - spriteId = CreateSprite(&sMatchCallUpDownArrowSprite, x, list->listWindow.unk3 * 8 + windowState->visibleEntries * 16, 7); - list->downArrow = &gSprites[spriteId]; - list->downArrow->oam.tileNum += 2; - list->downArrow->callback = SpriteCB_MatchCallDownArrow; - - spriteId = CreateSprite(&sMatchCallUpDownArrowSprite, x, list->listWindow.unk3 * 8, 7); - list->upArrow = &gSprites[spriteId]; - list->upArrow->oam.tileNum += 4; - list->upArrow->callback = SpriteCB_MatchCallUpArrow; -} - -void DestroyMatchCallListArrows(struct PokenavSub17Substruct *list) -{ - DestroySprite(list->rightArrow); - DestroySprite(list->upArrow); - DestroySprite(list->downArrow); - FreeSpriteTilesByTag(0xA); - FreeSpritePaletteByTag(0x14); -} - -void ToggleMatchCallArrows(struct PokenavSub17Substruct *list, bool32 shouldHide) -{ - if (shouldHide) - { - list->rightArrow->callback = SpriteCallbackDummy; - list->upArrow->callback = SpriteCallbackDummy; - list->downArrow->callback = SpriteCallbackDummy; - } - else - { - list->rightArrow->callback = SpriteCB_MatchCallRightArrow; - list->upArrow->callback = SpriteCB_MatchCallUpArrow; - list->downArrow->callback = SpriteCB_MatchCallDownArrow; - } - list->rightArrow->invisible = shouldHide; - list->upArrow->invisible = shouldHide; - list->downArrow->invisible = shouldHide; -} - -void SpriteCB_MatchCallRightArrow(struct Sprite *sprite) -{ - struct PokenavSub17 *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_LIST); - sprite->y2 = structPtr->unk888.selectedIndexOffset << 4; -} - -void SpriteCB_MatchCallDownArrow(struct Sprite *sprite) -{ - if (sprite->data[7] == 0 && ShouldShowDownArrow()) - sprite->invisible = FALSE; - else - sprite->invisible = TRUE; - - if (++sprite->data[0] > 3) - { - s16 offset; - - sprite->data[0] = 0; - offset = (sprite->data[1] + 1) & 7; - sprite->data[1] = offset; - sprite->y2 = offset; - } -} - -void SpriteCB_MatchCallUpArrow(struct Sprite *sprite) -{ - if (sprite->data[7] == 0 && ShouldShowUpArrow()) - sprite->invisible = FALSE; - else - sprite->invisible = TRUE; - - if (++sprite->data[0] > 3) - { - s16 offset; - - sprite->data[0] = 0; - offset = (sprite->data[1] + 1) & 7; - sprite->data[1] = offset; - sprite->y2 = -1 * offset; - } -} - -void ToggleMatchCallVerticalArrows(bool32 shouldHide) -{ - struct PokenavSub17 *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_LIST); - structPtr->list.upArrow->data[7] = shouldHide; - structPtr->list.downArrow->data[7] = shouldHide; -} - -void InitMatchCallWindowState(struct MatchCallWindowState *dst, struct PokenavListTemplate *template) -{ - dst->unk10 = template->list.matchCallEntries; - dst->windowTopIndex = template->unk6; - dst->listLength = template->count; - dst->unkC = template->unk8; - dst->visibleEntries = template->maxShowed; - if (dst->visibleEntries >= dst->listLength) - { - dst->windowTopIndex = 0; - dst->unk4 = 0; - dst->selectedIndexOffset = template->unk6; - } - else - { - dst->unk4 = dst->listLength - dst->visibleEntries; - if (dst->windowTopIndex + dst->visibleEntries > dst->listLength) - { - dst->selectedIndexOffset = dst->windowTopIndex + dst->visibleEntries - dst->listLength; - dst->windowTopIndex = template->unk6 - dst->selectedIndexOffset; - } - else - { - dst->selectedIndexOffset = 0; - } - } -} - -bool32 CopyPokenavListMenuTemplate(struct PokenavSub17Substruct *dest, const struct BgTemplate *bgTemplate, struct PokenavListTemplate *template, s32 a3) -{ - struct WindowTemplate window; - - dest->listWindow.bg = bgTemplate->bg; - dest->listWindow.unk6 = a3; - dest->unk34 = template->listFunc.unk10_2; - dest->unk38 = template->unk14; - dest->listWindow.unk1 = template->fillValue; - dest->listWindow.unk2 = template->item_X; - dest->listWindow.unk3 = template->listTop; - dest->listWindow.unk4 = template->windowWidth; - dest->listWindow.fontId = template->fontId; - - window.bg = bgTemplate->bg; - window.tilemapLeft = template->item_X; - window.tilemapTop = 0; - window.width = template->windowWidth; - window.height = 32; - window.paletteNum = template->fillValue; - window.baseBlock = a3 + 2; - - dest->listWindow.windowId = AddWindow(&window); - if (dest->listWindow.windowId == WINDOW_NONE) - return FALSE; - - dest->listWindow.unkA = 0; - dest->rightArrow = NULL; - dest->upArrow = NULL; - dest->downArrow = NULL; - return 1; -} diff --git a/src/pokenav_menu_handler.c b/src/pokenav_menu_handler.c new file mode 100644 index 0000000000..b72247742c --- /dev/null +++ b/src/pokenav_menu_handler.c @@ -0,0 +1,513 @@ +#include "global.h" +#include "pokenav.h" +#include "event_data.h" +#include "main.h" +#include "sound.h" +#include "constants/songs.h" + +struct Pokenav_Menu +{ + u16 menuType; + s16 cursorPos; + u16 currMenuItem; + u16 helpBarIndex; + u32 menuId; + u32 (*callback)(struct Pokenav_Menu*); +}; + +static bool32 UpdateMenuCursorPos(struct Pokenav_Menu *); +static void ReturnToConditionMenu(struct Pokenav_Menu *); +static void ReturnToMainMenu(struct Pokenav_Menu *); +static u32 GetMenuId(struct Pokenav_Menu *); +static void SetMenuIdAndCB(struct Pokenav_Menu *, u32); +static u32 CB2_ReturnToConditionMenu(struct Pokenav_Menu *); +static u32 CB2_ReturnToMainMenu(struct Pokenav_Menu *); +static u32 HandleConditionSearchMenuInput(struct Pokenav_Menu *); +static u32 HandleConditionMenuInput(struct Pokenav_Menu *); +static u32 HandleCantOpenRibbonsInput(struct Pokenav_Menu *); +static u32 HandleMainMenuInputEndTutorial(struct Pokenav_Menu *); +static u32 HandleMainMenuInputTutorial(struct Pokenav_Menu *); +static u32 HandleMainMenuInput(struct Pokenav_Menu *); +static u32 (*GetMainMenuInputHandler(void))(struct Pokenav_Menu*); +static void SetMenuInputHandler(struct Pokenav_Menu *); + +// Number of entries - 1 for that menu type +static const u8 sLastCursorPositions[] = +{ + [POKENAV_MENU_TYPE_DEFAULT] = 2, + [POKENAV_MENU_TYPE_UNLOCK_MC] = 3, + [POKENAV_MENU_TYPE_UNLOCK_MC_RIBBONS] = 4, + [POKENAV_MENU_TYPE_CONDITION] = 2, + [POKENAV_MENU_TYPE_CONDITION_SEARCH] = 5 +}; + +static const u8 sMenuItems[][MAX_POKENAV_MENUITEMS] = +{ + [POKENAV_MENU_TYPE_DEFAULT] = + { + POKENAV_MENUITEM_MAP, + POKENAV_MENUITEM_CONDITION, + [2 ... MAX_POKENAV_MENUITEMS - 1] = POKENAV_MENUITEM_SWITCH_OFF + }, + [POKENAV_MENU_TYPE_UNLOCK_MC] = + { + POKENAV_MENUITEM_MAP, + POKENAV_MENUITEM_CONDITION, + POKENAV_MENUITEM_MATCH_CALL, + [3 ... MAX_POKENAV_MENUITEMS - 1] = POKENAV_MENUITEM_SWITCH_OFF + }, + [POKENAV_MENU_TYPE_UNLOCK_MC_RIBBONS] = + { + POKENAV_MENUITEM_MAP, + POKENAV_MENUITEM_CONDITION, + POKENAV_MENUITEM_MATCH_CALL, + POKENAV_MENUITEM_RIBBONS, + [4 ... MAX_POKENAV_MENUITEMS - 1] = POKENAV_MENUITEM_SWITCH_OFF + }, + [POKENAV_MENU_TYPE_CONDITION] = + { + POKENAV_MENUITEM_CONDITION_PARTY, + POKENAV_MENUITEM_CONDITION_SEARCH, + POKENAV_MENUITEM_CONDITION_CANCEL, + [3 ... MAX_POKENAV_MENUITEMS - 1] = POKENAV_MENUITEM_SWITCH_OFF + }, + [POKENAV_MENU_TYPE_CONDITION_SEARCH] = + { + POKENAV_MENUITEM_CONDITION_SEARCH_COOL, + POKENAV_MENUITEM_CONDITION_SEARCH_BEAUTY, + POKENAV_MENUITEM_CONDITION_SEARCH_CUTE, + POKENAV_MENUITEM_CONDITION_SEARCH_SMART, + POKENAV_MENUITEM_CONDITION_SEARCH_TOUGH, + POKENAV_MENUITEM_CONDITION_SEARCH_CANCEL + }, +}; + +static u8 GetPokenavMainMenuType(void) +{ + u8 menuType = POKENAV_MENU_TYPE_DEFAULT; + + if (FlagGet(FLAG_ADDED_MATCH_CALL_TO_POKENAV)) + { + menuType = POKENAV_MENU_TYPE_UNLOCK_MC; + + if (FlagGet(FLAG_SYS_RIBBON_GET)) + menuType = POKENAV_MENU_TYPE_UNLOCK_MC_RIBBONS; + } + + return menuType; +} + +bool32 PokenavCallback_Init_MainMenuCursorOnMap(void) +{ + struct Pokenav_Menu *menu = AllocSubstruct(POKENAV_SUBSTRUCT_MAIN_MENU_HANDLER, sizeof(struct Pokenav_Menu)); + if (!menu) + return FALSE; + + menu->menuType = GetPokenavMainMenuType(); + menu->cursorPos = POKENAV_MENUITEM_MAP; + menu->currMenuItem = POKENAV_MENUITEM_MAP; + menu->helpBarIndex = HELPBAR_NONE; + SetMenuInputHandler(menu); + return TRUE; +} + +bool32 PokenavCallback_Init_MainMenuCursorOnMatchCall(void) +{ + struct Pokenav_Menu *menu = AllocSubstruct(POKENAV_SUBSTRUCT_MAIN_MENU_HANDLER, sizeof(struct Pokenav_Menu)); + if (!menu) + return FALSE; + + menu->menuType = GetPokenavMainMenuType(); + menu->cursorPos = POKENAV_MENUITEM_MATCH_CALL; + menu->currMenuItem = POKENAV_MENUITEM_MATCH_CALL; + menu->helpBarIndex = HELPBAR_NONE; + SetMenuInputHandler(menu); + return TRUE; +} + +bool32 PokenavCallback_Init_MainMenuCursorOnRibbons(void) +{ + struct Pokenav_Menu *menu = AllocSubstruct(POKENAV_SUBSTRUCT_MAIN_MENU_HANDLER, sizeof(struct Pokenav_Menu)); + if (!menu) + return FALSE; + + menu->menuType = GetPokenavMainMenuType(); + menu->cursorPos = POKENAV_MENUITEM_RIBBONS; + menu->currMenuItem = POKENAV_MENUITEM_RIBBONS; + SetMenuInputHandler(menu); + return TRUE; +} + +bool32 PokenavCallback_Init_ConditionMenu(void) +{ + struct Pokenav_Menu *menu = AllocSubstruct(POKENAV_SUBSTRUCT_MAIN_MENU_HANDLER, sizeof(struct Pokenav_Menu)); + if (!menu) + return FALSE; + + menu->menuType = POKENAV_MENU_TYPE_CONDITION; + menu->cursorPos = 0; //party + menu->currMenuItem = POKENAV_MENUITEM_CONDITION_PARTY; + menu->helpBarIndex = HELPBAR_NONE; + SetMenuInputHandler(menu); + return TRUE; +} + +bool32 PokenavCallback_Init_ConditionSearchMenu(void) +{ + struct Pokenav_Menu *menu = AllocSubstruct(POKENAV_SUBSTRUCT_MAIN_MENU_HANDLER, sizeof(struct Pokenav_Menu)); + if (!menu) + return FALSE; + + menu->menuType = POKENAV_MENU_TYPE_CONDITION_SEARCH; + menu->cursorPos = GetSelectedConditionSearch(); + menu->currMenuItem = menu->cursorPos + POKENAV_MENUITEM_CONDITION_SEARCH_COOL; + menu->helpBarIndex = HELPBAR_NONE; + SetMenuInputHandler(menu); + return TRUE; +} + +static void SetMenuInputHandler(struct Pokenav_Menu *menu) +{ + switch (menu->menuType) + { + case POKENAV_MENU_TYPE_DEFAULT: + SetPokenavMode(POKENAV_MODE_NORMAL); + // fallthrough + case POKENAV_MENU_TYPE_UNLOCK_MC: + case POKENAV_MENU_TYPE_UNLOCK_MC_RIBBONS: + menu->callback = GetMainMenuInputHandler(); + break; + case POKENAV_MENU_TYPE_CONDITION: + menu->callback = HandleConditionMenuInput; + break; + case POKENAV_MENU_TYPE_CONDITION_SEARCH: + menu->callback = HandleConditionSearchMenuInput; + break; + } +} + +static u32 (*GetMainMenuInputHandler(void))(struct Pokenav_Menu*) +{ + switch (GetPokenavMode()) + { + default: + case POKENAV_MODE_NORMAL: + return HandleMainMenuInput; + case POKENAV_MODE_FORCE_CALL_READY: + return HandleMainMenuInputTutorial; + case POKENAV_MODE_FORCE_CALL_EXIT: + return HandleMainMenuInputEndTutorial; + } +} + +u32 GetMenuHandlerCallback(void) +{ + struct Pokenav_Menu *menu = GetSubstructPtr(POKENAV_SUBSTRUCT_MAIN_MENU_HANDLER); + return menu->callback(menu); +} + +void FreeMenuHandlerSubstruct1(void) +{ + FreePokenavSubstruct(POKENAV_SUBSTRUCT_MAIN_MENU_HANDLER); +} + +static u32 HandleMainMenuInput(struct Pokenav_Menu *menu) +{ + if (UpdateMenuCursorPos(menu)) + return POKENAV_MENU_FUNC_MOVE_CURSOR; + + if (JOY_NEW(A_BUTTON)) + { + switch (sMenuItems[menu->menuType][menu->cursorPos]) + { + case POKENAV_MENUITEM_MAP: + menu->helpBarIndex = gSaveBlock2Ptr->regionMapZoom ? HELPBAR_MAP_ZOOMED_IN : HELPBAR_MAP_ZOOMED_OUT; + SetMenuIdAndCB(menu, POKENAV_REGION_MAP); + return POKENAV_MENU_FUNC_OPEN_FEATURE; + case POKENAV_MENUITEM_CONDITION: + menu->menuType = POKENAV_MENU_TYPE_CONDITION; + menu->cursorPos = 0; + menu->currMenuItem = sMenuItems[POKENAV_MENU_TYPE_CONDITION][0]; + menu->callback = HandleConditionMenuInput; + return POKENAV_MENU_FUNC_OPEN_CONDITION; + case POKENAV_MENUITEM_MATCH_CALL: + menu->helpBarIndex = HELPBAR_MC_TRAINER_LIST; + SetMenuIdAndCB(menu, POKENAV_MATCH_CALL); + return POKENAV_MENU_FUNC_OPEN_FEATURE; + case POKENAV_MENUITEM_RIBBONS: + if (CanViewRibbonsMenu()) + { + menu->helpBarIndex = HELPBAR_RIBBONS_MON_LIST; + SetMenuIdAndCB(menu, POKENAV_RIBBONS_MON_LIST); + return POKENAV_MENU_FUNC_OPEN_FEATURE; + } + else + { + menu->callback = HandleCantOpenRibbonsInput; + return POKENAV_MENU_FUNC_NO_RIBBON_WINNERS; + } + case POKENAV_MENUITEM_SWITCH_OFF: + return POKENAV_MENU_FUNC_EXIT; + } + } + + if (JOY_NEW(B_BUTTON)) + return POKENAV_MENU_FUNC_EXIT; + + return POKENAV_MENU_FUNC_NONE; +} + +// Force the player to select Match Call during the call Mr. Stone pokenav tutorial +static u32 HandleMainMenuInputTutorial(struct Pokenav_Menu *menu) +{ + if (UpdateMenuCursorPos(menu)) + return POKENAV_MENU_FUNC_MOVE_CURSOR; + + if (JOY_NEW(A_BUTTON)) + { + if (sMenuItems[menu->menuType][menu->cursorPos] == POKENAV_MENUITEM_MATCH_CALL) + { + menu->helpBarIndex = HELPBAR_MC_TRAINER_LIST; + SetMenuIdAndCB(menu, POKENAV_MATCH_CALL); + return POKENAV_MENU_FUNC_OPEN_FEATURE; + } + else + { + PlaySE(SE_FAILURE); + return POKENAV_MENU_FUNC_NONE; + } + } + + if (JOY_NEW(B_BUTTON)) + { + PlaySE(SE_FAILURE); + return POKENAV_MENU_FUNC_NONE; + } + + return POKENAV_MENU_FUNC_NONE; +} + +// After calling Mr. Stone during the pokenav tutorial, force player to exit or use Match Call again +static u32 HandleMainMenuInputEndTutorial(struct Pokenav_Menu *menu) +{ + if (UpdateMenuCursorPos(menu)) + return POKENAV_MENU_FUNC_MOVE_CURSOR; + + if (JOY_NEW(A_BUTTON)) + { + u32 menuItem = sMenuItems[menu->menuType][menu->cursorPos]; + if (menuItem != POKENAV_MENUITEM_MATCH_CALL && menuItem != POKENAV_MENUITEM_SWITCH_OFF) + { + PlaySE(SE_FAILURE); + return POKENAV_MENU_FUNC_NONE; + } + else if (menuItem == POKENAV_MENUITEM_MATCH_CALL) + { + menu->helpBarIndex = HELPBAR_MC_TRAINER_LIST; + SetMenuIdAndCB(menu, POKENAV_MATCH_CALL); + return POKENAV_MENU_FUNC_OPEN_FEATURE; + } + else + { + return -1; + } + } + else if (JOY_NEW(B_BUTTON)) + { + return -1; + } + return POKENAV_MENU_FUNC_NONE; +} + +// Handles input after selecting Ribbons when there are no ribbon winners left +// Selecting it again just reprints the Ribbon description to replace the "No Ribbon winners" message +static u32 HandleCantOpenRibbonsInput(struct Pokenav_Menu *menu) +{ + if (UpdateMenuCursorPos(menu)) + { + menu->callback = GetMainMenuInputHandler(); + return POKENAV_MENU_FUNC_MOVE_CURSOR; + } + + if (JOY_NEW(A_BUTTON | B_BUTTON)) + { + menu->callback = GetMainMenuInputHandler(); + return POKENAV_MENU_FUNC_RESHOW_DESCRIPTION; + } + + return POKENAV_MENU_FUNC_NONE; +} + +static u32 HandleConditionMenuInput(struct Pokenav_Menu *menu) +{ + if (UpdateMenuCursorPos(menu)) + return POKENAV_MENU_FUNC_MOVE_CURSOR; + + if (JOY_NEW(A_BUTTON)) + { + switch (sMenuItems[menu->menuType][menu->cursorPos]) + { + case POKENAV_MENUITEM_CONDITION_SEARCH: + menu->menuType = POKENAV_MENU_TYPE_CONDITION_SEARCH; + menu->cursorPos = 0; + menu->currMenuItem = sMenuItems[POKENAV_MENU_TYPE_CONDITION_SEARCH][0]; + menu->callback = HandleConditionSearchMenuInput; + return POKENAV_MENU_FUNC_OPEN_CONDITION_SEARCH; + case POKENAV_MENUITEM_CONDITION_PARTY: + menu->helpBarIndex = 0; + SetMenuIdAndCB(menu, POKENAV_CONDITION_GRAPH_PARTY); + return POKENAV_MENU_FUNC_OPEN_FEATURE; + case POKENAV_MENUITEM_CONDITION_CANCEL: + PlaySE(SE_SELECT); + ReturnToMainMenu(menu); + return POKENAV_MENU_FUNC_RETURN_TO_MAIN; + } + } + if (JOY_NEW(B_BUTTON)) + { + if (menu->cursorPos != sLastCursorPositions[menu->menuType]) + { + menu->cursorPos = sLastCursorPositions[menu->menuType]; + menu->callback = CB2_ReturnToMainMenu; + return POKENAV_MENU_FUNC_MOVE_CURSOR; + } + else + { + PlaySE(SE_SELECT); + ReturnToMainMenu(menu); + return POKENAV_MENU_FUNC_RETURN_TO_MAIN; + } + } + + return POKENAV_MENU_FUNC_NONE; +} + +static u32 HandleConditionSearchMenuInput(struct Pokenav_Menu *menu) +{ + if (UpdateMenuCursorPos(menu)) + return POKENAV_MENU_FUNC_MOVE_CURSOR; + + if (JOY_NEW(A_BUTTON)) + { + u8 menuItem = sMenuItems[menu->menuType][menu->cursorPos]; + if (menuItem != POKENAV_MENUITEM_CONDITION_SEARCH_CANCEL) + { + SetSelectedConditionSearch(menuItem - POKENAV_MENUITEM_CONDITION_SEARCH_COOL); + SetMenuIdAndCB(menu, POKENAV_CONDITION_SEARCH_RESULTS); + menu->helpBarIndex = HELPBAR_CONDITION_MON_LIST; + return POKENAV_MENU_FUNC_OPEN_FEATURE; + } + else + { + PlaySE(SE_SELECT); + ReturnToConditionMenu(menu); + return POKENAV_MENU_FUNC_RETURN_TO_CONDITION; + } + } + if (JOY_NEW(B_BUTTON)) + { + if (menu->cursorPos != sLastCursorPositions[menu->menuType]) + { + menu->cursorPos = sLastCursorPositions[menu->menuType]; + menu->callback = CB2_ReturnToConditionMenu; + return POKENAV_MENU_FUNC_MOVE_CURSOR; + } + else + { + PlaySE(SE_SELECT); + ReturnToConditionMenu(menu); + return POKENAV_MENU_FUNC_RETURN_TO_CONDITION; + } + } + return POKENAV_MENU_FUNC_NONE; +} + +static u32 CB2_ReturnToMainMenu(struct Pokenav_Menu *menu) +{ + ReturnToMainMenu(menu); + return POKENAV_MENU_FUNC_RETURN_TO_MAIN; +} + +static u32 CB2_ReturnToConditionMenu(struct Pokenav_Menu *menu) +{ + ReturnToConditionMenu(menu); + return POKENAV_MENU_FUNC_RETURN_TO_CONDITION; +} + +static void SetMenuIdAndCB(struct Pokenav_Menu *menu, u32 menuId) +{ + menu->menuId = menuId; + menu->callback = GetMenuId; +} + +static u32 GetMenuId(struct Pokenav_Menu *menu) +{ + return menu->menuId; +} + +static void ReturnToMainMenu(struct Pokenav_Menu *menu) +{ + menu->menuType = GetPokenavMainMenuType(); + menu->cursorPos = 1; + menu->currMenuItem = sMenuItems[menu->menuType][menu->cursorPos]; + menu->callback = HandleMainMenuInput; +} + +static void ReturnToConditionMenu(struct Pokenav_Menu *menu) +{ + menu->menuType = POKENAV_MENU_TYPE_CONDITION; + menu->cursorPos = 1; + menu->currMenuItem = sMenuItems[POKENAV_MENU_TYPE_CONDITION][1]; + menu->callback = HandleConditionMenuInput; +} + +static bool32 UpdateMenuCursorPos(struct Pokenav_Menu *menu) +{ + if (JOY_NEW(DPAD_UP)) + { + if (--menu->cursorPos < 0) + menu->cursorPos = sLastCursorPositions[menu->menuType]; + + menu->currMenuItem = sMenuItems[menu->menuType][menu->cursorPos]; + return TRUE; + } + else if (JOY_NEW(DPAD_DOWN)) + { + menu->cursorPos++; + if (menu->cursorPos > sLastCursorPositions[menu->menuType]) + menu->cursorPos = 0; + + menu->currMenuItem = sMenuItems[menu->menuType][menu->cursorPos]; + return TRUE; + } + else + { + return FALSE; + } +} + +int GetPokenavMenuType(void) +{ + struct Pokenav_Menu *menu = GetSubstructPtr(POKENAV_SUBSTRUCT_MAIN_MENU_HANDLER); + return menu->menuType; +} + +// Position of cursor relative to number of current menu options +int GetPokenavCursorPos(void) +{ + struct Pokenav_Menu *menu = GetSubstructPtr(POKENAV_SUBSTRUCT_MAIN_MENU_HANDLER); + return menu->cursorPos; +} + +// ID of menu item the cursor is currently on +int GetCurrentMenuItemId(void) +{ + struct Pokenav_Menu *menu = GetSubstructPtr(POKENAV_SUBSTRUCT_MAIN_MENU_HANDLER); + return menu->currMenuItem; +} + +u16 GetHelpBarTextId(void) +{ + struct Pokenav_Menu *menu = GetSubstructPtr(POKENAV_SUBSTRUCT_MAIN_MENU_HANDLER); + return menu->helpBarIndex; +} diff --git a/src/pokenav_menu_handler_1.c b/src/pokenav_menu_handler_1.c deleted file mode 100644 index 4792756c18..0000000000 --- a/src/pokenav_menu_handler_1.c +++ /dev/null @@ -1,513 +0,0 @@ -#include "global.h" -#include "pokenav.h" -#include "event_data.h" -#include "main.h" -#include "sound.h" -#include "constants/songs.h" - -struct Pokenav1Struct -{ - u16 menuType; - s16 cursorPos; - u16 currMenuItem; - u16 helpBarIndex; - u32 menuId; - u32 (*callback)(struct Pokenav1Struct*); -}; - -static bool32 UpdateMenuCursorPos(struct Pokenav1Struct *state); -static void ReturnToConditionMenu(struct Pokenav1Struct *state); -static void ReturnToMainMenu(struct Pokenav1Struct *state); -static u32 GetMenuId(struct Pokenav1Struct *state); -static void SetMenuIdAndCB(struct Pokenav1Struct *state, u32 a1); -static u32 CB2_ReturnToConditionMenu(struct Pokenav1Struct *state); -static u32 CB2_ReturnToMainMenu(struct Pokenav1Struct *state); -static u32 HandleConditionSearchMenuInput(struct Pokenav1Struct *state); -static u32 HandleConditionMenuInput(struct Pokenav1Struct *state); -static u32 HandleCantOpenRibbonsInput(struct Pokenav1Struct *state); -static u32 HandleMainMenuInputEndTutorial(struct Pokenav1Struct *state); -static u32 HandleMainMenuInputTutorial(struct Pokenav1Struct *state); -static u32 HandleMainMenuInput(struct Pokenav1Struct *state); -static u32 (*GetMainMenuInputHandler(void))(struct Pokenav1Struct*); -static void SetMenuInputHandler(struct Pokenav1Struct *state); - -// Number of entries - 1 for that menu type -static const u8 sLastCursorPositions[] = -{ - [POKENAV_MENU_TYPE_DEFAULT] = 2, - [POKENAV_MENU_TYPE_UNLOCK_MC] = 3, - [POKENAV_MENU_TYPE_UNLOCK_MC_RIBBONS] = 4, - [POKENAV_MENU_TYPE_CONDITION] = 2, - [POKENAV_MENU_TYPE_CONDITION_SEARCH] = 5 -}; - -static const u8 sMenuItems[][6] = -{ - [POKENAV_MENU_TYPE_DEFAULT] = - { - POKENAV_MENUITEM_MAP, - POKENAV_MENUITEM_CONDITION, - [2 ... 5] = POKENAV_MENUITEM_SWITCH_OFF - }, - [POKENAV_MENU_TYPE_UNLOCK_MC] = - { - POKENAV_MENUITEM_MAP, - POKENAV_MENUITEM_CONDITION, - POKENAV_MENUITEM_MATCH_CALL, - [3 ... 5] = POKENAV_MENUITEM_SWITCH_OFF - }, - [POKENAV_MENU_TYPE_UNLOCK_MC_RIBBONS] = - { - POKENAV_MENUITEM_MAP, - POKENAV_MENUITEM_CONDITION, - POKENAV_MENUITEM_MATCH_CALL, - POKENAV_MENUITEM_RIBBONS, - [4 ... 5] = POKENAV_MENUITEM_SWITCH_OFF - }, - [POKENAV_MENU_TYPE_CONDITION] = - { - POKENAV_MENUITEM_CONDITION_PARTY, - POKENAV_MENUITEM_CONDITION_SEARCH, - POKENAV_MENUITEM_CONDITION_CANCEL, - [3 ... 5] = POKENAV_MENUITEM_SWITCH_OFF - }, - [POKENAV_MENU_TYPE_CONDITION_SEARCH] = - { - POKENAV_MENUITEM_CONDITION_SEARCH_COOL, - POKENAV_MENUITEM_CONDITION_SEARCH_BEAUTY, - POKENAV_MENUITEM_CONDITION_SEARCH_CUTE, - POKENAV_MENUITEM_CONDITION_SEARCH_SMART, - POKENAV_MENUITEM_CONDITION_SEARCH_TOUGH, - POKENAV_MENUITEM_CONDITION_SEARCH_CANCEL - }, -}; - -static u8 GetPokenavMainMenuType(void) -{ - u8 menuType = POKENAV_MENU_TYPE_DEFAULT; - - if (FlagGet(FLAG_ADDED_MATCH_CALL_TO_POKENAV)) - { - menuType = POKENAV_MENU_TYPE_UNLOCK_MC; - - if (FlagGet(FLAG_SYS_RIBBON_GET)) - menuType = POKENAV_MENU_TYPE_UNLOCK_MC_RIBBONS; - } - - return menuType; -} - -bool32 PokenavCallback_Init_MainMenuCursorOnMap(void) -{ - struct Pokenav1Struct *state = AllocSubstruct(POKENAV_SUBSTRUCT_MAIN_MENU_HANDLER, sizeof(struct Pokenav1Struct)); - if (!state) - return FALSE; - - state->menuType = GetPokenavMainMenuType(); - state->cursorPos = POKENAV_MENUITEM_MAP; - state->currMenuItem = POKENAV_MENUITEM_MAP; - state->helpBarIndex = HELPBAR_NONE; - SetMenuInputHandler(state); - return TRUE; -} - -bool32 PokenavCallback_Init_MainMenuCursorOnMatchCall(void) -{ - struct Pokenav1Struct *state = AllocSubstruct(POKENAV_SUBSTRUCT_MAIN_MENU_HANDLER, sizeof(struct Pokenav1Struct)); - if (!state) - return FALSE; - - state->menuType = GetPokenavMainMenuType(); - state->cursorPos = POKENAV_MENUITEM_MATCH_CALL; - state->currMenuItem = POKENAV_MENUITEM_MATCH_CALL; - state->helpBarIndex = HELPBAR_NONE; - SetMenuInputHandler(state); - return TRUE; -} - -bool32 PokenavCallback_Init_MainMenuCursorOnRibbons(void) -{ - struct Pokenav1Struct *state = AllocSubstruct(POKENAV_SUBSTRUCT_MAIN_MENU_HANDLER, sizeof(struct Pokenav1Struct)); - if (!state) - return FALSE; - - state->menuType = GetPokenavMainMenuType(); - state->cursorPos = POKENAV_MENUITEM_RIBBONS; - state->currMenuItem = POKENAV_MENUITEM_RIBBONS; - SetMenuInputHandler(state); - return TRUE; -} - -bool32 PokenavCallback_Init_ConditionMenu(void) -{ - struct Pokenav1Struct *state = AllocSubstruct(POKENAV_SUBSTRUCT_MAIN_MENU_HANDLER, sizeof(struct Pokenav1Struct)); - if (!state) - return FALSE; - - state->menuType = POKENAV_MENU_TYPE_CONDITION; - state->cursorPos = 0; //party - state->currMenuItem = POKENAV_MENUITEM_CONDITION_PARTY; - state->helpBarIndex = HELPBAR_NONE; - SetMenuInputHandler(state); - return TRUE; -} - -bool32 PokenavCallback_Init_ConditionSearchMenu(void) -{ - struct Pokenav1Struct *state = AllocSubstruct(POKENAV_SUBSTRUCT_MAIN_MENU_HANDLER, sizeof(struct Pokenav1Struct)); - if (!state) - return FALSE; - - state->menuType = POKENAV_MENU_TYPE_CONDITION_SEARCH; - state->cursorPos = GetSelectedConditionSearch(); - state->currMenuItem = state->cursorPos + POKENAV_MENUITEM_CONDITION_SEARCH_COOL; - state->helpBarIndex = HELPBAR_NONE; - SetMenuInputHandler(state); - return TRUE; -} - -static void SetMenuInputHandler(struct Pokenav1Struct *state) -{ - switch (state->menuType) - { - case POKENAV_MENU_TYPE_DEFAULT: - SetPokenavMode(POKENAV_MODE_NORMAL); - // fallthrough - case POKENAV_MENU_TYPE_UNLOCK_MC: - case POKENAV_MENU_TYPE_UNLOCK_MC_RIBBONS: - state->callback = GetMainMenuInputHandler(); - break; - case POKENAV_MENU_TYPE_CONDITION: - state->callback = HandleConditionMenuInput; - break; - case POKENAV_MENU_TYPE_CONDITION_SEARCH: - state->callback = HandleConditionSearchMenuInput; - break; - } -} - -static u32 (*GetMainMenuInputHandler(void))(struct Pokenav1Struct*) -{ - switch (GetPokenavMode()) - { - default: - case POKENAV_MODE_NORMAL: - return HandleMainMenuInput; - case POKENAV_MODE_FORCE_CALL_READY: - return HandleMainMenuInputTutorial; - case POKENAV_MODE_FORCE_CALL_EXIT: - return HandleMainMenuInputEndTutorial; - } -} - -u32 GetMenuHandlerCallback(void) -{ - struct Pokenav1Struct *state = GetSubstructPtr(POKENAV_SUBSTRUCT_MAIN_MENU_HANDLER); - return state->callback(state); -} - -void FreeMenuHandlerSubstruct1(void) -{ - FreePokenavSubstruct(POKENAV_SUBSTRUCT_MAIN_MENU_HANDLER); -} - -static u32 HandleMainMenuInput(struct Pokenav1Struct *state) -{ - if (UpdateMenuCursorPos(state)) - return POKENAV_MENU_FUNC_MOVE_CURSOR; - - if (JOY_NEW(A_BUTTON)) - { - switch (sMenuItems[state->menuType][state->cursorPos]) - { - case POKENAV_MENUITEM_MAP: - state->helpBarIndex = gSaveBlock2Ptr->regionMapZoom ? HELPBAR_MAP_ZOOMED_IN : HELPBAR_MAP_ZOOMED_OUT; - SetMenuIdAndCB(state, POKENAV_REGION_MAP); - return POKENAV_MENU_FUNC_OPEN_FEATURE; - case POKENAV_MENUITEM_CONDITION: - state->menuType = POKENAV_MENU_TYPE_CONDITION; - state->cursorPos = 0; - state->currMenuItem = sMenuItems[POKENAV_MENU_TYPE_CONDITION][0]; - state->callback = HandleConditionMenuInput; - return POKENAV_MENU_FUNC_OPEN_CONDITION; - case POKENAV_MENUITEM_MATCH_CALL: - state->helpBarIndex = HELPBAR_MC_TRAINER_LIST; - SetMenuIdAndCB(state, POKENAV_MATCH_CALL); - return POKENAV_MENU_FUNC_OPEN_FEATURE; - case POKENAV_MENUITEM_RIBBONS: - if (CanViewRibbonsMenu()) - { - state->helpBarIndex = HELPBAR_RIBBONS_MON_LIST; - SetMenuIdAndCB(state, POKENAV_RIBBONS_MON_LIST); - return POKENAV_MENU_FUNC_OPEN_FEATURE; - } - else - { - state->callback = HandleCantOpenRibbonsInput; - return POKENAV_MENU_FUNC_NO_RIBBON_WINNERS; - } - case POKENAV_MENUITEM_SWITCH_OFF: - return POKENAV_MENU_FUNC_EXIT; - } - } - - if (JOY_NEW(B_BUTTON)) - return POKENAV_MENU_FUNC_EXIT; - - return POKENAV_MENU_FUNC_NONE; -} - -// Force the player to select Match Call during the call Mr. Stone pokenav tutorial -static u32 HandleMainMenuInputTutorial(struct Pokenav1Struct *state) -{ - if (UpdateMenuCursorPos(state)) - return POKENAV_MENU_FUNC_MOVE_CURSOR; - - if (JOY_NEW(A_BUTTON)) - { - if (sMenuItems[state->menuType][state->cursorPos] == POKENAV_MENUITEM_MATCH_CALL) - { - state->helpBarIndex = HELPBAR_MC_TRAINER_LIST; - SetMenuIdAndCB(state, POKENAV_MATCH_CALL); - return POKENAV_MENU_FUNC_OPEN_FEATURE; - } - else - { - PlaySE(SE_FAILURE); - return POKENAV_MENU_FUNC_NONE; - } - } - - if (JOY_NEW(B_BUTTON)) - { - PlaySE(SE_FAILURE); - return POKENAV_MENU_FUNC_NONE; - } - - return POKENAV_MENU_FUNC_NONE; -} - -// After calling Mr. Stone during the pokenav tutorial, force player to exit or use Match Call again -static u32 HandleMainMenuInputEndTutorial(struct Pokenav1Struct *state) -{ - if (UpdateMenuCursorPos(state)) - return POKENAV_MENU_FUNC_MOVE_CURSOR; - - if (JOY_NEW(A_BUTTON)) - { - u32 menuItem = sMenuItems[state->menuType][state->cursorPos]; - if (menuItem != POKENAV_MENUITEM_MATCH_CALL && menuItem != POKENAV_MENUITEM_SWITCH_OFF) - { - PlaySE(SE_FAILURE); - return POKENAV_MENU_FUNC_NONE; - } - else if (menuItem == POKENAV_MENUITEM_MATCH_CALL) - { - state->helpBarIndex = HELPBAR_MC_TRAINER_LIST; - SetMenuIdAndCB(state, POKENAV_MATCH_CALL); - return POKENAV_MENU_FUNC_OPEN_FEATURE; - } - else - { - return -1; - } - } - else if (JOY_NEW(B_BUTTON)) - { - return -1; - } - return POKENAV_MENU_FUNC_NONE; -} - -// Handles input after selecting Ribbons when there are no ribbon winners left -// Selecting it again just reprints the Ribbon description to replace the "No Ribbon winners" message -static u32 HandleCantOpenRibbonsInput(struct Pokenav1Struct *state) -{ - if (UpdateMenuCursorPos(state)) - { - state->callback = GetMainMenuInputHandler(); - return POKENAV_MENU_FUNC_MOVE_CURSOR; - } - - if (JOY_NEW(A_BUTTON | B_BUTTON)) - { - state->callback = GetMainMenuInputHandler(); - return POKENAV_MENU_FUNC_RESHOW_DESCRIPTION; - } - - return POKENAV_MENU_FUNC_NONE; -} - -static u32 HandleConditionMenuInput(struct Pokenav1Struct *state) -{ - if (UpdateMenuCursorPos(state)) - return POKENAV_MENU_FUNC_MOVE_CURSOR; - - if (JOY_NEW(A_BUTTON)) - { - switch (sMenuItems[state->menuType][state->cursorPos]) - { - case POKENAV_MENUITEM_CONDITION_SEARCH: - state->menuType = POKENAV_MENU_TYPE_CONDITION_SEARCH; - state->cursorPos = 0; - state->currMenuItem = sMenuItems[POKENAV_MENU_TYPE_CONDITION_SEARCH][0]; - state->callback = HandleConditionSearchMenuInput; - return POKENAV_MENU_FUNC_OPEN_CONDITION_SEARCH; - case POKENAV_MENUITEM_CONDITION_PARTY: - state->helpBarIndex = 0; - SetMenuIdAndCB(state, POKENAV_CONDITION_PARTY); - return POKENAV_MENU_FUNC_OPEN_FEATURE; - case POKENAV_MENUITEM_CONDITION_CANCEL: - PlaySE(SE_SELECT); - ReturnToMainMenu(state); - return POKENAV_MENU_FUNC_RETURN_TO_MAIN; - } - } - if (JOY_NEW(B_BUTTON)) - { - if (state->cursorPos != sLastCursorPositions[state->menuType]) - { - state->cursorPos = sLastCursorPositions[state->menuType]; - state->callback = CB2_ReturnToMainMenu; - return POKENAV_MENU_FUNC_MOVE_CURSOR; - } - else - { - PlaySE(SE_SELECT); - ReturnToMainMenu(state); - return POKENAV_MENU_FUNC_RETURN_TO_MAIN; - } - } - - return POKENAV_MENU_FUNC_NONE; -} - -static u32 HandleConditionSearchMenuInput(struct Pokenav1Struct *state) -{ - if (UpdateMenuCursorPos(state)) - return POKENAV_MENU_FUNC_MOVE_CURSOR; - - if (JOY_NEW(A_BUTTON)) - { - u8 menuItem = sMenuItems[state->menuType][state->cursorPos]; - if (menuItem != POKENAV_MENUITEM_CONDITION_SEARCH_CANCEL) - { - SetSelectedConditionSearch(menuItem - POKENAV_MENUITEM_CONDITION_SEARCH_COOL); - SetMenuIdAndCB(state, POKENAV_CONDITION_SEARCH_RESULTS); - state->helpBarIndex = HELPBAR_CONDITION_MON_LIST; - return POKENAV_MENU_FUNC_OPEN_FEATURE; - } - else - { - PlaySE(SE_SELECT); - ReturnToConditionMenu(state); - return POKENAV_MENU_FUNC_RETURN_TO_CONDITION; - } - } - if (JOY_NEW(B_BUTTON)) - { - if (state->cursorPos != sLastCursorPositions[state->menuType]) - { - state->cursorPos = sLastCursorPositions[state->menuType]; - state->callback = CB2_ReturnToConditionMenu; - return POKENAV_MENU_FUNC_MOVE_CURSOR; - } - else - { - PlaySE(SE_SELECT); - ReturnToConditionMenu(state); - return POKENAV_MENU_FUNC_RETURN_TO_CONDITION; - } - } - return POKENAV_MENU_FUNC_NONE; -} - -static u32 CB2_ReturnToMainMenu(struct Pokenav1Struct *state) -{ - ReturnToMainMenu(state); - return POKENAV_MENU_FUNC_RETURN_TO_MAIN; -} - -static u32 CB2_ReturnToConditionMenu(struct Pokenav1Struct *state) -{ - ReturnToConditionMenu(state); - return POKENAV_MENU_FUNC_RETURN_TO_CONDITION; -} - -static void SetMenuIdAndCB(struct Pokenav1Struct *state, u32 menuId) -{ - state->menuId = menuId; - state->callback = GetMenuId; -} - -static u32 GetMenuId(struct Pokenav1Struct *state) -{ - return state->menuId; -} - -static void ReturnToMainMenu(struct Pokenav1Struct *state) -{ - state->menuType = GetPokenavMainMenuType(); - state->cursorPos = 1; - state->currMenuItem = sMenuItems[state->menuType][state->cursorPos]; - state->callback = HandleMainMenuInput; -} - -static void ReturnToConditionMenu(struct Pokenav1Struct *state) -{ - state->menuType = POKENAV_MENU_TYPE_CONDITION; - state->cursorPos = 1; - state->currMenuItem = sMenuItems[POKENAV_MENU_TYPE_CONDITION][1]; - state->callback = HandleConditionMenuInput; -} - -static bool32 UpdateMenuCursorPos(struct Pokenav1Struct *state) -{ - if (JOY_NEW(DPAD_UP)) - { - if (--state->cursorPos < 0) - state->cursorPos = sLastCursorPositions[state->menuType]; - - state->currMenuItem = sMenuItems[state->menuType][state->cursorPos]; - return TRUE; - } - else if (JOY_NEW(DPAD_DOWN)) - { - state->cursorPos++; - if (state->cursorPos > sLastCursorPositions[state->menuType]) - state->cursorPos = 0; - - state->currMenuItem = sMenuItems[state->menuType][state->cursorPos]; - return TRUE; - } - else - { - return FALSE; - } -} - -int GetPokenavMenuType(void) -{ - struct Pokenav1Struct *state = GetSubstructPtr(POKENAV_SUBSTRUCT_MAIN_MENU_HANDLER); - return state->menuType; -} - -// Position of cursor relative to number of current menu options -int GetPokenavCursorPos(void) -{ - struct Pokenav1Struct *state = GetSubstructPtr(POKENAV_SUBSTRUCT_MAIN_MENU_HANDLER); - return state->cursorPos; -} - -// ID of menu item the cursor is currently on -int GetCurrentMenuItemId(void) -{ - struct Pokenav1Struct *state = GetSubstructPtr(POKENAV_SUBSTRUCT_MAIN_MENU_HANDLER); - return state->currMenuItem; -} - -u16 GetHelpBarTextId(void) -{ - struct Pokenav1Struct *state = GetSubstructPtr(POKENAV_SUBSTRUCT_MAIN_MENU_HANDLER); - return state->helpBarIndex; -} diff --git a/src/pokenav_menu_handler_2.c b/src/pokenav_menu_handler_gfx.c similarity index 59% rename from src/pokenav_menu_handler_2.c rename to src/pokenav_menu_handler_gfx.c index bcfe94cb7a..b9dd130468 100644 --- a/src/pokenav_menu_handler_2.c +++ b/src/pokenav_menu_handler_gfx.c @@ -17,68 +17,86 @@ #include "constants/songs.h" #include "constants/rgb.h" -struct Pokenav2Struct +#define GFXTAG_BLUE_LIGHT 1 +#define GFXTAG_OPTIONS 3 + +#define PALTAG_BLUE_LIGHT 3 +#define PALTAG_OPTIONS_DEFAULT 4 // Includes green for Smart/Region Map and yellow for Tough +#define PALTAG_OPTIONS_BLUE 5 +#define PALTAG_OPTIONS_PINK 6 +#define PALTAG_OPTIONS_BEIGE 7 +#define PALTAG_OPTIONS_RED 8 + +#define PALTAG_OPTIONS_START PALTAG_OPTIONS_DEFAULT + +#define NUM_OPTION_SUBSPRITES 4 + +#define OPTION_DEFAULT_X 140 +#define OPTION_SELECTED_X 130 +#define OPTION_EXIT_X (DISPLAY_WIDTH + 16) + +struct Pokenav_MenuGfx { bool32 (*isTaskActiveCB)(void); u32 loopedTaskId; u16 optionDescWindowId; u8 bg3ScrollTaskId; u8 cursorPos; - bool8 otherIconsInMotion; + u8 numIconsBlending; bool8 pokenavAlreadyOpen; bool32 iconVisible[MAX_POKENAV_MENUITEMS]; - struct Sprite * blueLightSpriteId; - struct Sprite * iconSprites[MAX_POKENAV_MENUITEMS][4]; - u16 bg1TilemapBuffer[0x400]; + struct Sprite * blueLightSprite; + struct Sprite * iconSprites[MAX_POKENAV_MENUITEMS][NUM_OPTION_SUBSPRITES]; + u8 bg1TilemapBuffer[BG_SCREEN_SIZE]; }; -static struct Pokenav2Struct * OpenPokenavMenu(void); +static struct Pokenav_MenuGfx * OpenPokenavMenu(void); static bool32 GetCurrentLoopedTaskActive(void); -static u32 LoopedTask_OpenMenu(s32 state); -static u32 LoopedTask_MoveMenuCursor(s32 state); -static u32 LoopedTask_OpenConditionMenu(s32 state); -static u32 LoopedTask_ReturnToMainMenu(s32 state); -static u32 LoopedTask_OpenConditionSearchMenu(s32 state); -static u32 LoopedTask_ReturnToConditionMenu(s32 state); -static u32 LoopedTask_SelectRibbonsNoWinners(s32 state); -static u32 LoopedTask_ReShowDescription(s32 state); -static u32 LoopedTask_OpenPokenavFeature(s32 state); +static u32 LoopedTask_OpenMenu(s32); +static u32 LoopedTask_MoveMenuCursor(s32); +static u32 LoopedTask_OpenConditionMenu(s32); +static u32 LoopedTask_ReturnToMainMenu(s32); +static u32 LoopedTask_OpenConditionSearchMenu(s32); +static u32 LoopedTask_ReturnToConditionMenu(s32); +static u32 LoopedTask_SelectRibbonsNoWinners(s32); +static u32 LoopedTask_ReShowDescription(s32); +static u32 LoopedTask_OpenPokenavFeature(s32); static void LoadPokenavOptionPalettes(void); static void FreeAndDestroyMainMenuSprites(void); static void CreateMenuOptionSprites(void); static void DestroyMenuOptionSprites(void); -static void sub_81CA0C8(void); -static void DrawOptionLabelGfx(const u16 *const * a0, s32 yPos, s32 a2); -static void SetupCurrentMenuOptionsGfx(void); -static void SetMenuOptionGfxParams_CursorMoved(void); -static void SetMenuOptionGfxParamsInactive(struct Sprite ** sprites, s32 x, s32 a2, s32 a3); -static void SetMenuOptionGfxParamsActive(struct Sprite ** sprites); -static void SetupPokenavMenuOptions(void); +static void DrawCurrentMenuOptionLabels(void); +static void DrawOptionLabelGfx(const u16 *const *, s32, s32); +static void StartOptionAnimations_Enter(void); +static void StartOptionAnimations_CursorMoved(void); +static void StartOptionAnimations_Exit(void); +static void StartOptionSlide(struct Sprite **, s32, s32, s32); +static void StartOptionZoom(struct Sprite **); static bool32 AreMenuOptionSpritesMoving(void); -static void SetMenuOptionGfxInvisibility(struct Sprite ** sprites, bool32 a1); -static void sub_81CA474(struct Sprite * sprite); -static void sub_81CA4AC(struct Sprite * sprite); -static void sub_81CA580(u8 taskId); +static void SetOptionInvisibility(struct Sprite **, bool32); +static void SpriteCB_OptionSlide(struct Sprite *); +static void SpriteCB_OptionZoom(struct Sprite *); +static void Task_OptionBlend(u8); static void CreateMatchCallBlueLightSprite(void); -static void SpriteCB_BlinkingBlueLight(struct Sprite * sprite); -static void DestroyRematchBlueLightSpriteId(void); +static void SpriteCB_BlinkingBlueLight(struct Sprite *); +static void DestroyRematchBlueLightSprite(void); static void AddOptionDescriptionWindow(void); static void PrintCurrentOptionDescription(void); static void PrintNoRibbonWinners(void); static bool32 IsDma3ManagerBusyWithBgCopy_(void); static void CreateMovingBgDotsTask(void); static void DestroyMovingDotsBgTask(void); -static void Task_MoveBgDots(u8 taskId); +static void Task_MoveBgDots(u8); static void CreateBgDotPurplePalTask(void); static void ChangeBgDotsColorToPurple(void); static void CreateBgDotLightBluePalTask(void); static bool32 IsTaskActive_UpdateBgDotsPalette(void); -static void Task_UpdateBgDotsPalette(u8 taskId); +static void Task_UpdateBgDotsPalette(u8); static void SetupPokenavMenuScanlineEffects(void); static void DestroyMenuOptionGlowTask(void); static void ResetBldCnt(void); static void InitMenuOptionGlow(void); -static void Task_CurrentMenuOptionGlow(u8 taskId); +static void Task_CurrentMenuOptionGlow(u8); static void SetMenuOptionGlow(void); static const u16 sPokenavBgDotsPal[] = INCBIN_U16("graphics/pokenav/bg_dots.gbapal"); @@ -136,78 +154,103 @@ static const struct CompressedSpriteSheet sPokenavOptionsSpriteSheets[] = { .data = gPokenavOptions_Gfx, .size = 0x3400, - .tag = 0x0003 + .tag = GFXTAG_OPTIONS }, { .data = sMatchCallBlueLightTiles, .size = 0x0100, - .tag = 0x0001 + .tag = GFXTAG_BLUE_LIGHT } }; static const struct SpritePalette sPokenavOptionsSpritePalettes[] = { - {gPokenavOptions_Pal + 0x00, 4}, - {gPokenavOptions_Pal + 0x10, 5}, - {gPokenavOptions_Pal + 0x20, 6}, - {gPokenavOptions_Pal + 0x30, 7}, - {gPokenavOptions_Pal + 0x40, 8}, - {sMatchCallBlueLightPal, 3}, + {&gPokenavOptions_Pal[0x00], PALTAG_OPTIONS_DEFAULT}, + {&gPokenavOptions_Pal[0x10], PALTAG_OPTIONS_BLUE}, + {&gPokenavOptions_Pal[0x20], PALTAG_OPTIONS_PINK}, + {&gPokenavOptions_Pal[0x30], PALTAG_OPTIONS_BEIGE}, + {&gPokenavOptions_Pal[0x40], PALTAG_OPTIONS_RED}, + {sMatchCallBlueLightPal, PALTAG_BLUE_LIGHT}, {} }; -static const u16 sOptionsLabelGfx_RegionMap[] = {0, 0}; -static const u16 sOptionsLabelGfx_Condition[] = {0x20, 1}; -static const u16 sOptionsLabelGfx_MatchCall[] = {0x40, 4}; -static const u16 sOptionsLabelGfx_Ribbons[] = {0x60, 2}; -static const u16 sOptionsLabelGfx_SwitchOff[] = {0x80, 3}; -static const u16 sOptionsLabelGfx_Party[] = {0xA0, 1}; -static const u16 sOptionsLabelGfx_Search[] = {0xC0, 1}; -static const u16 sOptionsLabelGfx_Cool[] = {0xE0, 4}; -static const u16 sOptionsLabelGfx_Beauty[] = {0x100, 1}; -static const u16 sOptionsLabelGfx_Cute[] = {0x120, 2}; -static const u16 sOptionsLabelGfx_Smart[] = {0x140, 0}; -static const u16 sOptionsLabelGfx_Tough[] = {0x160, 0}; -static const u16 sOptionsLabelGfx_Cancel[] = {0x180, 3}; +// Tile number, palette tag offset +static const u16 sOptionsLabelGfx_RegionMap[] = {0x000, PALTAG_OPTIONS_DEFAULT - PALTAG_OPTIONS_START}; +static const u16 sOptionsLabelGfx_Condition[] = {0x020, PALTAG_OPTIONS_BLUE - PALTAG_OPTIONS_START}; +static const u16 sOptionsLabelGfx_MatchCall[] = {0x040, PALTAG_OPTIONS_RED - PALTAG_OPTIONS_START}; +static const u16 sOptionsLabelGfx_Ribbons[] = {0x060, PALTAG_OPTIONS_PINK - PALTAG_OPTIONS_START}; +static const u16 sOptionsLabelGfx_SwitchOff[] = {0x080, PALTAG_OPTIONS_BEIGE - PALTAG_OPTIONS_START}; +static const u16 sOptionsLabelGfx_Party[] = {0x0A0, PALTAG_OPTIONS_BLUE - PALTAG_OPTIONS_START}; +static const u16 sOptionsLabelGfx_Search[] = {0x0C0, PALTAG_OPTIONS_BLUE - PALTAG_OPTIONS_START}; +static const u16 sOptionsLabelGfx_Cool[] = {0x0E0, PALTAG_OPTIONS_RED - PALTAG_OPTIONS_START}; +static const u16 sOptionsLabelGfx_Beauty[] = {0x100, PALTAG_OPTIONS_BLUE - PALTAG_OPTIONS_START}; +static const u16 sOptionsLabelGfx_Cute[] = {0x120, PALTAG_OPTIONS_PINK - PALTAG_OPTIONS_START}; +static const u16 sOptionsLabelGfx_Smart[] = {0x140, PALTAG_OPTIONS_DEFAULT - PALTAG_OPTIONS_START}; +static const u16 sOptionsLabelGfx_Tough[] = {0x160, PALTAG_OPTIONS_DEFAULT - PALTAG_OPTIONS_START}; +static const u16 sOptionsLabelGfx_Cancel[] = {0x180, PALTAG_OPTIONS_BEIGE - PALTAG_OPTIONS_START}; -struct OptionsLabelGfx +struct { u16 yStart; u16 deltaY; - const u16 *tiles[MAX_POKENAV_MENUITEMS]; -}; - -static const struct OptionsLabelGfx sPokenavMenuOptionLabelGfx[POKENAV_MENU_TYPE_COUNT] = + const u16 *gfx[MAX_POKENAV_MENUITEMS]; +} static const sPokenavMenuOptionLabelGfx[POKENAV_MENU_TYPE_COUNT] = { [POKENAV_MENU_TYPE_DEFAULT] = { .yStart = 42, .deltaY = 20, - {sOptionsLabelGfx_RegionMap, sOptionsLabelGfx_Condition, sOptionsLabelGfx_SwitchOff} + .gfx = { + sOptionsLabelGfx_RegionMap, + sOptionsLabelGfx_Condition, + sOptionsLabelGfx_SwitchOff + } }, [POKENAV_MENU_TYPE_UNLOCK_MC] = { .yStart = 42, .deltaY = 20, - {sOptionsLabelGfx_RegionMap, sOptionsLabelGfx_Condition, sOptionsLabelGfx_MatchCall, sOptionsLabelGfx_SwitchOff} + .gfx = { + sOptionsLabelGfx_RegionMap, + sOptionsLabelGfx_Condition, + sOptionsLabelGfx_MatchCall, + sOptionsLabelGfx_SwitchOff + } }, [POKENAV_MENU_TYPE_UNLOCK_MC_RIBBONS] = { .yStart = 42, .deltaY = 20, - {sOptionsLabelGfx_RegionMap, sOptionsLabelGfx_Condition, sOptionsLabelGfx_MatchCall, sOptionsLabelGfx_Ribbons, sOptionsLabelGfx_SwitchOff} + .gfx = { + sOptionsLabelGfx_RegionMap, + sOptionsLabelGfx_Condition, + sOptionsLabelGfx_MatchCall, + sOptionsLabelGfx_Ribbons, + sOptionsLabelGfx_SwitchOff + } }, [POKENAV_MENU_TYPE_CONDITION] = { .yStart = 56, .deltaY = 20, - {sOptionsLabelGfx_Party, sOptionsLabelGfx_Search, sOptionsLabelGfx_Cancel} + .gfx = { + sOptionsLabelGfx_Party, + sOptionsLabelGfx_Search, + sOptionsLabelGfx_Cancel + } }, [POKENAV_MENU_TYPE_CONDITION_SEARCH] = { .yStart = 40, .deltaY = 16, - {sOptionsLabelGfx_Cool, sOptionsLabelGfx_Beauty, sOptionsLabelGfx_Cute, sOptionsLabelGfx_Smart, sOptionsLabelGfx_Tough, sOptionsLabelGfx_Cancel} + .gfx = { + sOptionsLabelGfx_Cool, + sOptionsLabelGfx_Beauty, + sOptionsLabelGfx_Cute, + sOptionsLabelGfx_Smart, + sOptionsLabelGfx_Tough, + sOptionsLabelGfx_Cancel + } }, }; @@ -216,8 +259,8 @@ static const struct WindowTemplate sOptionDescWindowTemplate = .bg = 1, .tilemapLeft = 3, .tilemapTop = 17, - .width = 0x18, - .height = 0x2, + .width = 24, + .height = 2, .paletteNum = 1, .baseBlock = 8 }; @@ -257,33 +300,33 @@ static const struct OamData sOamData_MenuOption = .paletteNum = 0, }; -static const union AffineAnimCmd gUnknown_0862031C[] = +static const union AffineAnimCmd sAffineAnim_MenuOption_Normal[] = { AFFINEANIMCMD_FRAME(0x100, 0x100, 0, 0), AFFINEANIMCMD_END, }; -static const union AffineAnimCmd gUnknown_0862032C[] = +static const union AffineAnimCmd sAffineAnim_MenuOption_Zoom[] = { AFFINEANIMCMD_FRAME(0x100, 0x100, 0, 0), AFFINEANIMCMD_FRAME(0x10, 0x10, 0, 0x12), AFFINEANIMCMD_END, }; -static const union AffineAnimCmd *const sSpriteAnims_MenuOption[] = +static const union AffineAnimCmd *const sAffineAnims_MenuOption[] = { - gUnknown_0862031C, - gUnknown_0862032C + sAffineAnim_MenuOption_Normal, + sAffineAnim_MenuOption_Zoom }; static const struct SpriteTemplate sMenuOptionSpriteTemplate = { - .tileTag = 3, - .paletteTag = 4, + .tileTag = GFXTAG_OPTIONS, + .paletteTag = PALTAG_OPTIONS_START, .oam = &sOamData_MenuOption, .anims = gDummySpriteAnimTable, .images = NULL, - .affineAnims = sSpriteAnims_MenuOption, + .affineAnims = sAffineAnims_MenuOption, .callback = SpriteCallbackDummy, }; @@ -303,8 +346,8 @@ static const struct OamData sBlueLightOamData = static const struct SpriteTemplate sMatchCallBlueLightSpriteTemplate = { - .tileTag = 1, - .paletteTag = 3, + .tileTag = GFXTAG_BLUE_LIGHT, + .paletteTag = PALTAG_BLUE_LIGHT, .oam = &sBlueLightOamData, .anims = gDummySpriteAnimTable, .images = NULL, @@ -314,13 +357,13 @@ static const struct SpriteTemplate sMatchCallBlueLightSpriteTemplate = static const struct ScanlineEffectParams sPokenavMainMenuScanlineEffectParams = { - (void *)REG_ADDR_WIN0H, - ((DMA_ENABLE | DMA_START_HBLANK | DMA_REPEAT | DMA_DEST_RELOAD) << 16) | 1, - 1, - 0 + ®_WIN0H, + ((DMA_ENABLE | DMA_START_HBLANK | DMA_REPEAT | DMA_DEST_RELOAD) << 16) | 1, + 1, + 0 }; -static bool32 PlayerHasTrainerRematches(void) +static bool32 AreAnyTrainerRematchesNearby(void) { s32 i; @@ -337,81 +380,81 @@ static bool32 PlayerHasTrainerRematches(void) bool32 OpenPokenavMenuInitial(void) { - struct Pokenav2Struct * state = OpenPokenavMenu(); + struct Pokenav_MenuGfx * gfx = OpenPokenavMenu(); - if (state == NULL) + if (gfx == NULL) return FALSE; - state->pokenavAlreadyOpen = FALSE; + gfx->pokenavAlreadyOpen = FALSE; return TRUE; } bool32 OpenPokenavMenuNotInitial(void) { - struct Pokenav2Struct * state = OpenPokenavMenu(); + struct Pokenav_MenuGfx * gfx = OpenPokenavMenu(); - if (state == NULL) + if (gfx == NULL) return FALSE; - state->pokenavAlreadyOpen = TRUE; + gfx->pokenavAlreadyOpen = TRUE; return TRUE; } -static struct Pokenav2Struct * OpenPokenavMenu(void) +static struct Pokenav_MenuGfx * OpenPokenavMenu(void) { - struct Pokenav2Struct * state = AllocSubstruct(2, sizeof(struct Pokenav2Struct)); + struct Pokenav_MenuGfx * gfx = AllocSubstruct(POKENAV_SUBSTRUCT_MENU_GFX, sizeof(struct Pokenav_MenuGfx)); - if (state != NULL) + if (gfx != NULL) { - state->otherIconsInMotion = FALSE; - state->loopedTaskId = CreateLoopedTask(LoopedTask_OpenMenu, 1); - state->isTaskActiveCB = GetCurrentLoopedTaskActive; + gfx->numIconsBlending = 0; + gfx->loopedTaskId = CreateLoopedTask(LoopedTask_OpenMenu, 1); + gfx->isTaskActiveCB = GetCurrentLoopedTaskActive; } - return state; + return gfx; } void CreateMenuHandlerLoopedTask(s32 ltIdx) { - struct Pokenav2Struct * state = GetSubstructPtr(POKENAV_SUBSTRUCT_MENU_ICONS); - state->loopedTaskId = CreateLoopedTask(sMenuHandlerLoopTaskFuncs[ltIdx], 1); - state->isTaskActiveCB = GetCurrentLoopedTaskActive; + struct Pokenav_MenuGfx * gfx = GetSubstructPtr(POKENAV_SUBSTRUCT_MENU_GFX); + gfx->loopedTaskId = CreateLoopedTask(sMenuHandlerLoopTaskFuncs[ltIdx], 1); + gfx->isTaskActiveCB = GetCurrentLoopedTaskActive; } bool32 IsMenuHandlerLoopedTaskActive(void) { - struct Pokenav2Struct * state = GetSubstructPtr(POKENAV_SUBSTRUCT_MENU_ICONS); - return state->isTaskActiveCB(); + struct Pokenav_MenuGfx * gfx = GetSubstructPtr(POKENAV_SUBSTRUCT_MENU_GFX); + return gfx->isTaskActiveCB(); } void FreeMenuHandlerSubstruct2(void) { - struct Pokenav2Struct * unk = GetSubstructPtr(POKENAV_SUBSTRUCT_MENU_ICONS); + struct Pokenav_MenuGfx * gfx = GetSubstructPtr(POKENAV_SUBSTRUCT_MENU_GFX); DestroyMovingDotsBgTask(); - RemoveWindow(unk->optionDescWindowId); + RemoveWindow(gfx->optionDescWindowId); FreeAndDestroyMainMenuSprites(); DestroyMenuOptionGlowTask(); - FreePokenavSubstruct(POKENAV_SUBSTRUCT_MENU_ICONS); + FreePokenavSubstruct(POKENAV_SUBSTRUCT_MENU_GFX); } static bool32 GetCurrentLoopedTaskActive(void) { - struct Pokenav2Struct * unk = GetSubstructPtr(POKENAV_SUBSTRUCT_MENU_ICONS); + struct Pokenav_MenuGfx * gfx = GetSubstructPtr(POKENAV_SUBSTRUCT_MENU_GFX); - return IsLoopedTaskActive(unk->loopedTaskId); + return IsLoopedTaskActive(gfx->loopedTaskId); } static u32 LoopedTask_OpenMenu(s32 state) { - struct Pokenav2Struct * unk = GetSubstructPtr(POKENAV_SUBSTRUCT_MENU_ICONS); + struct Pokenav_MenuGfx * gfx = GetSubstructPtr(POKENAV_SUBSTRUCT_MENU_GFX); switch (state) { case 0: InitBgTemplates(sPokenavMainMenuBgTemplates, ARRAY_COUNT(sPokenavMainMenuBgTemplates)); DecompressAndCopyTileDataToVram(1, gPokenavMessageBox_Gfx, 0, 0, 0); - SetBgTilemapBuffer(1, unk->bg1TilemapBuffer); + SetBgTilemapBuffer(1, gfx->bg1TilemapBuffer); CopyToBgTilemapBuffer(1, gPokenavMessageBox_Tilemap, 0, 0); CopyBgTilemapBufferToVram(1); CopyPaletteIntoBufferUnfaded(gPokenavMessageBox_Pal, 0x10, 0x20); @@ -451,7 +494,7 @@ static u32 LoopedTask_OpenMenu(s32 state) PrintCurrentOptionDescription(); CreateMenuOptionSprites(); CreateMatchCallBlueLightSprite(); - sub_81CA0C8(); + DrawCurrentMenuOptionLabels(); return LT_INC_AND_PAUSE; case 6: if (IsDma3ManagerBusyWithBgCopy_()) @@ -461,12 +504,12 @@ static u32 LoopedTask_OpenMenu(s32 state) ShowBg(1); ShowBg(2); ShowBg(3); - if (unk->pokenavAlreadyOpen) - PokenavFadeScreen(1); + if (gfx->pokenavAlreadyOpen) + PokenavFadeScreen(POKENAV_FADE_FROM_BLACK); else { PlaySE(SE_POKENAV_ON); - PokenavFadeScreen(3); + PokenavFadeScreen(POKENAV_FADE_FROM_BLACK_ALL); } switch (GetPokenavMenuType()) { @@ -496,7 +539,7 @@ static u32 LoopedTask_OpenMenu(s32 state) ShowLeftHeaderGfx(0, FALSE, FALSE); break; } - SetupCurrentMenuOptionsGfx(); + StartOptionAnimations_Enter(); SetupPokenavMenuScanlineEffects(); return LT_INC_AND_CONTINUE; case 9: @@ -515,7 +558,7 @@ static u32 LoopedTask_MoveMenuCursor(s32 state) { case 0: SetMenuOptionGlow(); - SetMenuOptionGfxParams_CursorMoved(); + StartOptionAnimations_CursorMoved(); PrintCurrentOptionDescription(); PlaySE(SE_SELECT); return LT_INC_AND_PAUSE; @@ -535,7 +578,7 @@ static u32 LoopedTask_OpenConditionMenu(s32 state) { case 0: ResetBldCnt(); - SetupPokenavMenuOptions(); + StartOptionAnimations_Exit(); HideMainOrSubMenuLeftHeader(POKENAV_GFX_MAIN_MENU, 0); PlaySE(SE_SELECT); return LT_INC_AND_PAUSE; @@ -544,11 +587,11 @@ static u32 LoopedTask_OpenConditionMenu(s32 state) return LT_PAUSE; if (AreLeftHeaderSpritesMoving()) return LT_PAUSE; - sub_81CA0C8(); + DrawCurrentMenuOptionLabels(); LoadLeftHeaderGfxForIndex(1); return LT_INC_AND_PAUSE; case 2: - SetupCurrentMenuOptionsGfx(); + StartOptionAnimations_Enter(); ShowLeftHeaderGfx(1, FALSE, FALSE); CreateBgDotPurplePalTask(); PrintCurrentOptionDescription(); @@ -574,7 +617,7 @@ static u32 LoopedTask_ReturnToMainMenu(s32 state) { case 0: ResetBldCnt(); - SetupPokenavMenuOptions(); + StartOptionAnimations_Exit(); HideMainOrSubMenuLeftHeader(POKENAV_GFX_CONDITION_MENU, 0); return LT_INC_AND_PAUSE; case 1: @@ -582,11 +625,11 @@ static u32 LoopedTask_ReturnToMainMenu(s32 state) return LT_PAUSE; if (AreLeftHeaderSpritesMoving()) return LT_PAUSE; - sub_81CA0C8(); + DrawCurrentMenuOptionLabels(); LoadLeftHeaderGfxForIndex(0); return LT_INC_AND_PAUSE; case 2: - SetupCurrentMenuOptionsGfx(); + StartOptionAnimations_Enter(); ShowLeftHeaderGfx(0, FALSE, FALSE); CreateBgDotLightBluePalTask(); PrintCurrentOptionDescription(); @@ -612,17 +655,17 @@ static u32 LoopedTask_OpenConditionSearchMenu(s32 state) { case 0: ResetBldCnt(); - SetupPokenavMenuOptions(); + StartOptionAnimations_Exit(); PlaySE(SE_SELECT); return LT_INC_AND_PAUSE; case 1: if (AreMenuOptionSpritesMoving()) return LT_PAUSE; LoadLeftHeaderGfxForIndex(7); - sub_81CA0C8(); + DrawCurrentMenuOptionLabels(); return LT_INC_AND_PAUSE; case 2: - SetupCurrentMenuOptionsGfx(); + StartOptionAnimations_Enter(); ShowLeftHeaderGfx(7, FALSE, FALSE); PrintCurrentOptionDescription(); return LT_INC_AND_PAUSE; @@ -645,7 +688,7 @@ static u32 LoopedTask_ReturnToConditionMenu(s32 state) { case 0: ResetBldCnt(); - SetupPokenavMenuOptions(); + StartOptionAnimations_Exit(); HideMainOrSubMenuLeftHeader(POKENAV_GFX_SEARCH_MENU, 0); return LT_INC_AND_PAUSE; case 1: @@ -653,10 +696,10 @@ static u32 LoopedTask_ReturnToConditionMenu(s32 state) return LT_PAUSE; if (AreLeftHeaderSpritesMoving()) return LT_PAUSE; - sub_81CA0C8(); + DrawCurrentMenuOptionLabels(); return LT_INC_AND_PAUSE; case 2: - SetupCurrentMenuOptionsGfx(); + StartOptionAnimations_Enter(); PrintCurrentOptionDescription(); return LT_INC_AND_PAUSE; case 3: @@ -716,7 +759,7 @@ static u32 LoopedTask_OpenPokenavFeature(s32 state) return LT_PAUSE; SlideMenuHeaderUp(); ResetBldCnt(); - SetupPokenavMenuOptions(); + StartOptionAnimations_Exit(); switch (GetPokenavMenuType()) { case POKENAV_MENU_TYPE_CONDITION_SEARCH: @@ -736,7 +779,7 @@ static u32 LoopedTask_OpenPokenavFeature(s32 state) return LT_PAUSE; if (AreLeftHeaderSpritesMoving()) return LT_PAUSE; - PokenavFadeScreen(0); + PokenavFadeScreen(POKENAV_FADE_TO_BLACK); return LT_INC_AND_PAUSE; case 3: if (IsPaletteFadeActive()) @@ -757,30 +800,29 @@ static void LoadPokenavOptionPalettes(void) static void FreeAndDestroyMainMenuSprites(void) { - FreeSpriteTilesByTag(3); - FreeSpriteTilesByTag(1); - FreeSpritePaletteByTag(4); - FreeSpritePaletteByTag(5); - FreeSpritePaletteByTag(6); - FreeSpritePaletteByTag(7); - FreeSpritePaletteByTag(8); - FreeSpritePaletteByTag(3); + FreeSpriteTilesByTag(GFXTAG_OPTIONS); + FreeSpriteTilesByTag(GFXTAG_BLUE_LIGHT); + FreeSpritePaletteByTag(PALTAG_OPTIONS_DEFAULT); + FreeSpritePaletteByTag(PALTAG_OPTIONS_BLUE); + FreeSpritePaletteByTag(PALTAG_OPTIONS_PINK); + FreeSpritePaletteByTag(PALTAG_OPTIONS_BEIGE); + FreeSpritePaletteByTag(PALTAG_OPTIONS_RED); + FreeSpritePaletteByTag(PALTAG_BLUE_LIGHT); DestroyMenuOptionSprites(); - DestroyRematchBlueLightSpriteId(); + DestroyRematchBlueLightSprite(); } static void CreateMenuOptionSprites(void) { s32 i, j; - struct Pokenav2Struct * unk = GetSubstructPtr(POKENAV_SUBSTRUCT_MENU_ICONS); + struct Pokenav_MenuGfx * gfx = GetSubstructPtr(POKENAV_SUBSTRUCT_MENU_GFX); for (i = 0; i < MAX_POKENAV_MENUITEMS; i++) { - // Each menu option is 4 subsprites - for (j = 0; j < 4; j++) + for (j = 0; j < NUM_OPTION_SUBSPRITES; j++) { u8 spriteId = CreateSprite(&sMenuOptionSpriteTemplate, 0x8c, 20 * i + 40, 3); - unk->iconSprites[i][j] = &gSprites[spriteId]; + gfx->iconSprites[i][j] = &gSprites[spriteId]; gSprites[spriteId].x2 = 32 * j; } } @@ -789,97 +831,102 @@ static void CreateMenuOptionSprites(void) static void DestroyMenuOptionSprites(void) { s32 i, j; - struct Pokenav2Struct * unk = GetSubstructPtr(POKENAV_SUBSTRUCT_MENU_ICONS); + struct Pokenav_MenuGfx * gfx = GetSubstructPtr(POKENAV_SUBSTRUCT_MENU_GFX); for (i = 0; i < MAX_POKENAV_MENUITEMS; i++) { - for (j = 0; j < 4; j++) + for (j = 0; j < NUM_OPTION_SUBSPRITES; j++) { - FreeSpriteOamMatrix(unk->iconSprites[i][j]); - DestroySprite(unk->iconSprites[i][j]); + FreeSpriteOamMatrix(gfx->iconSprites[i][j]); + DestroySprite(gfx->iconSprites[i][j]); } } } -static void sub_81CA0C8(void) +static void DrawCurrentMenuOptionLabels(void) { s32 menuType = GetPokenavMenuType(); - DrawOptionLabelGfx(sPokenavMenuOptionLabelGfx[menuType].tiles, sPokenavMenuOptionLabelGfx[menuType].yStart, sPokenavMenuOptionLabelGfx[menuType].deltaY); + DrawOptionLabelGfx(sPokenavMenuOptionLabelGfx[menuType].gfx, sPokenavMenuOptionLabelGfx[menuType].yStart, sPokenavMenuOptionLabelGfx[menuType].deltaY); } -static void DrawOptionLabelGfx(const u16 *const *tiles, s32 yPos, s32 deltaY) +static void DrawOptionLabelGfx(const u16 *const *optionGfx, s32 yPos, s32 deltaY) { s32 i, j; - struct Pokenav2Struct * unk = GetSubstructPtr(POKENAV_SUBSTRUCT_MENU_ICONS); - s32 sp04 = GetSpriteTileStartByTag(3); + struct Pokenav_MenuGfx * gfx = GetSubstructPtr(POKENAV_SUBSTRUCT_MENU_GFX); + s32 baseTile = GetSpriteTileStartByTag(GFXTAG_OPTIONS); for (i = 0; i < MAX_POKENAV_MENUITEMS; i++) { - if (*tiles != NULL) + if (*optionGfx != NULL) { - for (j = 0; j < 4; j++) + for (j = 0; j < NUM_OPTION_SUBSPRITES; j++) { - unk->iconSprites[i][j]->oam.tileNum = (*tiles)[0] + sp04 + 8 * j; - unk->iconSprites[i][j]->oam.paletteNum = IndexOfSpritePaletteTag((*tiles)[1] + 4); - unk->iconSprites[i][j]->invisible = TRUE; - unk->iconSprites[i][j]->y = yPos; - unk->iconSprites[i][j]->x = 0x8c; - unk->iconSprites[i][j]->x2 = 32 * j; + gfx->iconSprites[i][j]->oam.tileNum = (*optionGfx)[0] + baseTile + 8 * j; + gfx->iconSprites[i][j]->oam.paletteNum = IndexOfSpritePaletteTag((*optionGfx)[1] + PALTAG_OPTIONS_START); + gfx->iconSprites[i][j]->invisible = TRUE; + gfx->iconSprites[i][j]->y = yPos; + gfx->iconSprites[i][j]->x = OPTION_DEFAULT_X; + gfx->iconSprites[i][j]->x2 = 32 * j; } - unk->iconVisible[i] = TRUE; + gfx->iconVisible[i] = TRUE; } else { - for (j = 0; j < 4; j++) - { - unk->iconSprites[i][j]->invisible = TRUE; - } - unk->iconVisible[i] = FALSE; + for (j = 0; j < NUM_OPTION_SUBSPRITES; j++) + gfx->iconSprites[i][j]->invisible = TRUE; + + gfx->iconVisible[i] = FALSE; } - tiles++; + optionGfx++; yPos += deltaY; } } -static void SetupCurrentMenuOptionsGfx(void) +static void StartOptionAnimations_Enter(void) { s32 i; - struct Pokenav2Struct *icons = GetSubstructPtr(POKENAV_SUBSTRUCT_MENU_ICONS); - s32 r8 = GetPokenavCursorPos(); - s32 r7 = 0; - s32 r2; + struct Pokenav_MenuGfx *gfx = GetSubstructPtr(POKENAV_SUBSTRUCT_MENU_GFX); + s32 cursorPos = GetPokenavCursorPos(); + s32 iconCount = 0; + s32 x; for (i = 0; i < MAX_POKENAV_MENUITEMS; i++) { - if (icons->iconVisible[i]) + if (gfx->iconVisible[i]) { - if (r7++ == r8) + if (iconCount++ == cursorPos) { - r2 = 0x82; - icons->cursorPos = i; + x = OPTION_SELECTED_X; + gfx->cursorPos = i; } else - r2 = 0x8c; - SetMenuOptionGfxParamsInactive(icons->iconSprites[i], 0x100, r2, 0xC); - SetMenuOptionGfxInvisibility(icons->iconSprites[i], FALSE); + { + // Not selected, set default position + x = OPTION_DEFAULT_X; + } + + // Slide new options in + StartOptionSlide(gfx->iconSprites[i], OPTION_EXIT_X, x, 12); + SetOptionInvisibility(gfx->iconSprites[i], FALSE); } else { - SetMenuOptionGfxInvisibility(icons->iconSprites[i], TRUE); + SetOptionInvisibility(gfx->iconSprites[i], TRUE); } } } -static void SetMenuOptionGfxParams_CursorMoved(void) +static void StartOptionAnimations_CursorMoved(void) { s32 i; - struct Pokenav2Struct *icons = GetSubstructPtr(POKENAV_SUBSTRUCT_MENU_ICONS); + struct Pokenav_MenuGfx *gfx = GetSubstructPtr(POKENAV_SUBSTRUCT_MENU_GFX); s32 prevPos = GetPokenavCursorPos(); s32 newPos; + // Get the index of the next visible option for (i = 0, newPos = 0; i < MAX_POKENAV_MENUITEMS; i++) { - if (icons->iconVisible[i]) + if (gfx->iconVisible[i]) { if (newPos == prevPos) { @@ -890,24 +937,28 @@ static void SetMenuOptionGfxParams_CursorMoved(void) } } - SetMenuOptionGfxParamsInactive(icons->iconSprites[icons->cursorPos], 0x82, 0x8c, 0x4); - SetMenuOptionGfxParamsInactive(icons->iconSprites[newPos], 0x8c, 0x82, 0x4); - icons->cursorPos = newPos; + // The selected option slides out a bit and the previously + // selected option slides back to its original position. + StartOptionSlide(gfx->iconSprites[gfx->cursorPos], OPTION_SELECTED_X, OPTION_DEFAULT_X, 4); + StartOptionSlide(gfx->iconSprites[newPos], OPTION_DEFAULT_X, OPTION_SELECTED_X, 4); + gfx->cursorPos = newPos; } -static void SetupPokenavMenuOptions(void) +static void StartOptionAnimations_Exit(void) { s32 i; - struct Pokenav2Struct *optionIcons = GetSubstructPtr(POKENAV_SUBSTRUCT_MENU_ICONS); + struct Pokenav_MenuGfx *gfx = GetSubstructPtr(POKENAV_SUBSTRUCT_MENU_GFX); for (i = 0; i < MAX_POKENAV_MENUITEMS; i++) { - if (optionIcons->iconVisible[i]) + if (gfx->iconVisible[i]) { - if (optionIcons->cursorPos != i) - SetMenuOptionGfxParamsInactive(optionIcons->iconSprites[i], 0x8C, 0x100, 0x8); + // Unselected options slide out, + // selected option zooms in + if (gfx->cursorPos != i) + StartOptionSlide(gfx->iconSprites[i], OPTION_DEFAULT_X, OPTION_EXIT_X, 8); else - SetMenuOptionGfxParamsActive(optionIcons->iconSprites[i]); + StartOptionZoom(gfx->iconSprites[i]); } } } @@ -915,120 +966,145 @@ static void SetupPokenavMenuOptions(void) static bool32 AreMenuOptionSpritesMoving(void) { s32 i; - struct Pokenav2Struct *icons = GetSubstructPtr(POKENAV_SUBSTRUCT_MENU_ICONS); + struct Pokenav_MenuGfx *gfx = GetSubstructPtr(POKENAV_SUBSTRUCT_MENU_GFX); for (i = 0; i < MAX_POKENAV_MENUITEMS; i++) { - if (icons->iconSprites[i][0]->callback != SpriteCallbackDummy) + if (gfx->iconSprites[i][0]->callback != SpriteCallbackDummy) return TRUE; } - if (icons->otherIconsInMotion) + if (gfx->numIconsBlending != 0) return TRUE; return FALSE; } -static void SetMenuOptionGfxParamsInactive(struct Sprite ** sprites, s32 x, s32 a2, s32 a3) +#define sSlideTime data[0] +#define sSlideAccel data[1] +#define sSlideSpeed data[2] +#define sSlideEndX data[7] + +static void StartOptionSlide(struct Sprite ** sprites, s32 startX, s32 endX, s32 time) { s32 i; - for (i = 0; i < 4; i++) + for (i = 0; i < NUM_OPTION_SUBSPRITES; i++) { - (*sprites)->x = x; - (*sprites)->data[0] = a3; - (*sprites)->data[1] = 16 * (a2 - x) / a3; - (*sprites)->data[2] = 16 * x; - (*sprites)->data[7] = a2; - (*sprites)->callback = sub_81CA474; + (*sprites)->x = startX; + (*sprites)->sSlideTime = time; + (*sprites)->sSlideAccel = 16 * (endX - startX) / time; + (*sprites)->sSlideSpeed = 16 * startX; + (*sprites)->sSlideEndX = endX; + (*sprites)->callback = SpriteCB_OptionSlide; sprites++; } } -static void SetMenuOptionGfxParamsActive(struct Sprite ** sprites) +#define sZoomDelay data[0] +#define sZoomSetAffine data[1] +#define sZoomSpeed data[2] +#define sZoomSubspriteId data[7] + +#define tBlendDelay data[0] +#define tBlendState data[1] +#define tBlendTarget1 data[2] +#define tBlendTarget2 data[3] +#define tBlendCounter data[4] + +// When an option is selected it zooms in and blends away as part +// of the transition to the next screen. +static void StartOptionZoom(struct Sprite ** sprites) { s32 i; - struct Pokenav2Struct * unk = GetSubstructPtr(POKENAV_SUBSTRUCT_MENU_ICONS); + struct Pokenav_MenuGfx * gfx = GetSubstructPtr(POKENAV_SUBSTRUCT_MENU_GFX); u8 taskId; - for (i = 0; i < 4; i++) + for (i = 0; i < NUM_OPTION_SUBSPRITES; i++) { (*sprites)->oam.objMode = ST_OAM_OBJ_BLEND; (*sprites)->oam.affineMode = ST_OAM_AFFINE_DOUBLE; - (*sprites)->callback = sub_81CA4AC; - (*sprites)->data[0] = 8; - (*sprites)->data[1] = 0; - (*sprites)->data[7] = i; + (*sprites)->callback = SpriteCB_OptionZoom; + (*sprites)->sZoomDelay = 8; + (*sprites)->sZoomSetAffine = FALSE; + (*sprites)->sZoomSubspriteId = i; InitSpriteAffineAnim(sprites[0]); StartSpriteAffineAnim(sprites[0], 0); sprites++; } - SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(0x10, 0x00)); - taskId = CreateTask(sub_81CA580, 3); - gTasks[taskId].data[0] = 8; - unk->otherIconsInMotion++; + SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(16, 0)); + taskId = CreateTask(Task_OptionBlend, 3); + gTasks[taskId].tBlendDelay = 8; + gfx->numIconsBlending++; } -static void SetMenuOptionGfxInvisibility(struct Sprite ** sprites, bool32 invisible) +static void SetOptionInvisibility(struct Sprite ** sprites, bool32 invisible) { s32 i; - for (i = 0; i < 4; i++) + for (i = 0; i < NUM_OPTION_SUBSPRITES; i++) { (*sprites)->invisible = invisible; sprites++; } } -static void sub_81CA474(struct Sprite * sprite) +static void SpriteCB_OptionSlide(struct Sprite * sprite) { - sprite->data[0]--; - if (sprite->data[0] != -1) + sprite->sSlideTime--; + if (sprite->sSlideTime != -1) { - sprite->data[2] += sprite->data[1]; - sprite->x = sprite->data[2] >> 4; + sprite->sSlideSpeed += sprite->sSlideAccel; + sprite->x = sprite->sSlideSpeed >> 4; } else { - sprite->x = sprite->data[7]; + sprite->x = sprite->sSlideEndX; sprite->callback = SpriteCallbackDummy; } } -static void sub_81CA4AC(struct Sprite * sprite) +#undef sSlideTime +#undef sSlideAccel +#undef sSlideSpeed +#undef sSlideEndX + +static void SpriteCB_OptionZoom(struct Sprite * sprite) { - s32 r0; - s32 r1; - if (sprite->data[0] == 0) + s32 temp; + s32 x; + if (sprite->sZoomDelay == 0) { - if (sprite->data[1] == 0) + if (!sprite->sZoomSetAffine) { StartSpriteAffineAnim(sprite, 1); - sprite->data[1]++; - sprite->data[2] = 0x100; + sprite->sZoomSetAffine++; + sprite->sZoomSpeed = 0x100; sprite->x += sprite->x2; sprite->x2 = 0; } else { - sprite->data[2] += 16; - r0 = sprite->data[2]; - r1 = r0 >> 3; - r1 = (r1 - 32) / 2; - switch (sprite->data[7]) + sprite->sZoomSpeed += 16; + temp = sprite->sZoomSpeed; + x = temp >> 3; + x = (x - 32) / 2; + + // Each subsprite needs to zoom to a different degree/direction + switch (sprite->sZoomSubspriteId) { case 0: - sprite->x2 = -r1 * 3; + sprite->x2 = -x * 3; break; case 1: - sprite->x2 = -r1; + sprite->x2 = -x; break; case 2: - sprite->x2 = r1; + sprite->x2 = x; break; case 3: - sprite->x2 = r1 * 3; + sprite->x2 = x * 3; break; } if (sprite->affineAnimEnded) @@ -1044,68 +1120,82 @@ static void sub_81CA4AC(struct Sprite * sprite) } else { - sprite->data[0]--; + sprite->sZoomDelay--; } } -static void sub_81CA580(u8 taskId) +#undef sZoomDelay +#undef sZoomSetAffine +#undef sZoomSpeed +#undef sZoomSubspriteId + +static void Task_OptionBlend(u8 taskId) { s16 * data = gTasks[taskId].data; - if (data[0] == 0) + if (tBlendDelay == 0) { - switch (data[1]) + switch (tBlendState) { case 0: - data[2] = 16; - data[3] = 0; + tBlendTarget1 = 16; + tBlendTarget2 = 0; SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_EFFECT_NONE | BLDCNT_TGT2_ALL); - SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(0x10, 0x00)); - data[1]++; + SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(16, 0)); + tBlendState++; break; case 1: - if (data[4] & 1) + if (tBlendCounter & 1) { - data[2] -= 3; - if (data[2] < 0) - data[2] = 0; + tBlendTarget1 -= 3; + if (tBlendTarget1 < 0) + tBlendTarget1 = 0; } else { - data[3] += 3; - if (data[3] > 16) - data[3] = 16; + tBlendTarget2 += 3; + if (tBlendTarget2 > 16) + tBlendTarget2 = 16; } - SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(data[2], data[3])); - data[4]++; - if (data[4] == 12) + SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(tBlendTarget1, tBlendTarget2)); + tBlendCounter++; + if (tBlendCounter == 12) { - ((struct Pokenav2Struct *)GetSubstructPtr(POKENAV_SUBSTRUCT_MENU_ICONS))->otherIconsInMotion--; - SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(0x00, 0x10)); + ((struct Pokenav_MenuGfx *)GetSubstructPtr(POKENAV_SUBSTRUCT_MENU_GFX))->numIconsBlending--; + SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(0, 16)); DestroyTask(taskId); } break; } } else - data[0]--; + { + tBlendDelay--; + } } +#undef tBlendDelay +#undef tBlendState +#undef tBlendTarget1 +#undef tBlendTarget2 +#undef tBlendCounter + +// Blue light that blinks if there are available rematches nearby static void CreateMatchCallBlueLightSprite(void) { - struct Pokenav2Struct * ptr = GetSubstructPtr(POKENAV_SUBSTRUCT_MENU_ICONS); + struct Pokenav_MenuGfx * gfx = GetSubstructPtr(POKENAV_SUBSTRUCT_MENU_GFX); u8 spriteId = CreateSprite(&sMatchCallBlueLightSpriteTemplate, 0x10, 0x60, 4); - ptr->blueLightSpriteId = &gSprites[spriteId]; - if (PlayerHasTrainerRematches()) - ptr->blueLightSpriteId->callback = SpriteCB_BlinkingBlueLight; + gfx->blueLightSprite = &gSprites[spriteId]; + if (AreAnyTrainerRematchesNearby()) + gfx->blueLightSprite->callback = SpriteCB_BlinkingBlueLight; else - ptr->blueLightSpriteId->invisible = TRUE; + gfx->blueLightSprite->invisible = TRUE; } -static void DestroyRematchBlueLightSpriteId(void) +static void DestroyRematchBlueLightSprite(void) { - struct Pokenav2Struct *ptr = GetSubstructPtr(POKENAV_SUBSTRUCT_MENU_ICONS); - DestroySprite(ptr->blueLightSpriteId); + struct Pokenav_MenuGfx *gfx = GetSubstructPtr(POKENAV_SUBSTRUCT_MENU_GFX); + DestroySprite(gfx->blueLightSprite); } static void SpriteCB_BlinkingBlueLight(struct Sprite * sprite) @@ -1120,33 +1210,33 @@ static void SpriteCB_BlinkingBlueLight(struct Sprite * sprite) static void AddOptionDescriptionWindow(void) { - struct Pokenav2Struct * ptr = GetSubstructPtr(POKENAV_SUBSTRUCT_MENU_ICONS); + struct Pokenav_MenuGfx * gfx = GetSubstructPtr(POKENAV_SUBSTRUCT_MENU_GFX); - ptr->optionDescWindowId = AddWindow(&sOptionDescWindowTemplate); - PutWindowTilemap(ptr->optionDescWindowId); - FillWindowPixelBuffer(ptr->optionDescWindowId, PIXEL_FILL(6)); - CopyWindowToVram(ptr->optionDescWindowId, COPYWIN_FULL); + gfx->optionDescWindowId = AddWindow(&sOptionDescWindowTemplate); + PutWindowTilemap(gfx->optionDescWindowId); + FillWindowPixelBuffer(gfx->optionDescWindowId, PIXEL_FILL(6)); + CopyWindowToVram(gfx->optionDescWindowId, COPYWIN_FULL); } static void PrintCurrentOptionDescription(void) { - struct Pokenav2Struct * ptr = GetSubstructPtr(POKENAV_SUBSTRUCT_MENU_ICONS); + struct Pokenav_MenuGfx * gfx = GetSubstructPtr(POKENAV_SUBSTRUCT_MENU_GFX); int menuItem = GetCurrentMenuItemId(); - const u8 * s = sPageDescriptions[menuItem]; - u32 width = GetStringWidth(FONT_NORMAL, s, -1); - FillWindowPixelBuffer(ptr->optionDescWindowId, PIXEL_FILL(6)); - AddTextPrinterParameterized3(ptr->optionDescWindowId, FONT_NORMAL, (192 - width) / 2, 1, sOptionDescTextColors, 0, s); + const u8 * desc = sPageDescriptions[menuItem]; + u32 width = GetStringWidth(FONT_NORMAL, desc, -1); + FillWindowPixelBuffer(gfx->optionDescWindowId, PIXEL_FILL(6)); + AddTextPrinterParameterized3(gfx->optionDescWindowId, FONT_NORMAL, (192 - width) / 2, 1, sOptionDescTextColors, 0, desc); } // Printed when Ribbons is selected if no PC/party mons have ribbons // Can occur by obtaining a mon with a ribbon and then releasing all ribbon winners static void PrintNoRibbonWinners(void) { - struct Pokenav2Struct * ptr = GetSubstructPtr(POKENAV_SUBSTRUCT_MENU_ICONS); + struct Pokenav_MenuGfx * gfx = GetSubstructPtr(POKENAV_SUBSTRUCT_MENU_GFX); const u8 * s = gText_NoRibbonWinners; u32 width = GetStringWidth(FONT_NORMAL, s, -1); - FillWindowPixelBuffer(ptr->optionDescWindowId, PIXEL_FILL(6)); - AddTextPrinterParameterized3(ptr->optionDescWindowId, FONT_NORMAL, (192 - width) / 2, 1, sOptionDescTextColors2, 0, s); + FillWindowPixelBuffer(gfx->optionDescWindowId, PIXEL_FILL(6)); + AddTextPrinterParameterized3(gfx->optionDescWindowId, FONT_NORMAL, (192 - width) / 2, 1, sOptionDescTextColors2, 0, s); } static bool32 IsDma3ManagerBusyWithBgCopy_(void) @@ -1156,14 +1246,14 @@ static bool32 IsDma3ManagerBusyWithBgCopy_(void) static void CreateMovingBgDotsTask(void) { - struct Pokenav2Struct * ptr = GetSubstructPtr(POKENAV_SUBSTRUCT_MENU_ICONS); - ptr->bg3ScrollTaskId = CreateTask(Task_MoveBgDots, 2); + struct Pokenav_MenuGfx * gfx = GetSubstructPtr(POKENAV_SUBSTRUCT_MENU_GFX); + gfx->bg3ScrollTaskId = CreateTask(Task_MoveBgDots, 2); } static void DestroyMovingDotsBgTask(void) { - struct Pokenav2Struct * ptr = GetSubstructPtr(POKENAV_SUBSTRUCT_MENU_ICONS); - DestroyTask(ptr->bg3ScrollTaskId); + struct Pokenav_MenuGfx * gfx = GetSubstructPtr(POKENAV_SUBSTRUCT_MENU_GFX); + DestroyTask(gfx->bg3ScrollTaskId); } static void Task_MoveBgDots(u8 taskId) @@ -1269,8 +1359,8 @@ static void SetMenuOptionGlow(void) int menuType = GetPokenavMenuType(); int cursorPos = GetPokenavCursorPos(); int r4 = sPokenavMenuOptionLabelGfx[menuType].deltaY * cursorPos + sPokenavMenuOptionLabelGfx[menuType].yStart - 8; - CpuFill16(0, gScanlineEffectRegBuffers[0], 0x140); - CpuFill16(0, gScanlineEffectRegBuffers[1], 0x140); + CpuFill16(0, gScanlineEffectRegBuffers[0], DISPLAY_HEIGHT * 2); + CpuFill16(0, gScanlineEffectRegBuffers[1], DISPLAY_HEIGHT * 2); CpuFill16(RGB(16, 23, 28), &gScanlineEffectRegBuffers[0][r4], 0x20); CpuFill16(RGB(16, 23, 28), &gScanlineEffectRegBuffers[1][r4], 0x20); } diff --git a/src/pokenav_region_map.c b/src/pokenav_region_map.c index 89bd2f7c75..16ba480703 100755 --- a/src/pokenav_region_map.c +++ b/src/pokenav_region_map.c @@ -17,22 +17,25 @@ #include "constants/songs.h" #include "constants/region_map_sections.h" +#define GFXTAG_CITY_ZOOM 6 +#define PALTAG_CITY_ZOOM 11 + #define NUM_CITY_MAPS 22 -struct Pokenav5Struct +struct Pokenav_RegionMapMenu { - u8 filler0[0xC]; + u8 unused[12]; bool32 zoomDisabled; - u32 (*callback)(struct Pokenav5Struct *); + u32 (*callback)(struct Pokenav_RegionMapMenu *); }; -struct Pokenav5Struct_2 +struct Pokenav_RegionMapGfx { bool32 (*isTaskActiveCB)(void); u32 loopTaskId; u16 infoWindowId; struct Sprite *cityZoomTextSprites[3]; - u8 tilemapBuffer[0x800]; + u8 tilemapBuffer[BG_SCREEN_SIZE]; u8 cityZoomPics[NUM_CITY_MAPS][200]; }; @@ -43,9 +46,9 @@ struct CityMapEntry const u32 *tilemap; }; -static u32 HandleRegionMapInput(struct Pokenav5Struct *); -static u32 HandleRegionMapInputZoomDisabled(struct Pokenav5Struct *); -static u32 GetExitRegionMapMenuId(struct Pokenav5Struct *); +static u32 HandleRegionMapInput(struct Pokenav_RegionMapMenu *); +static u32 HandleRegionMapInputZoomDisabled(struct Pokenav_RegionMapMenu *); +static u32 GetExitRegionMapMenuId(struct Pokenav_RegionMapMenu *); static u32 LoopedTask_OpenRegionMap(s32); static u32 LoopedTask_DecompressCityMaps(s32); static bool32 GetCurrentLoopedTaskActive(void); @@ -53,15 +56,15 @@ static void FreeCityZoomViewGfx(void); static void LoadCityZoomViewGfx(void); static void DecompressCityMaps(void); static bool32 IsDecompressCityMapsActive(void); -static void LoadPokenavRegionMapGfx(struct Pokenav5Struct_2 *); +static void LoadPokenavRegionMapGfx(struct Pokenav_RegionMapGfx *); static bool32 TryFreeTempTileDataBuffers(void); -static void UpdateMapSecInfoWindow(struct Pokenav5Struct_2 *); -static bool32 IsDma3ManagerBusyWithBgCopy_(struct Pokenav5Struct_2 *); +static void UpdateMapSecInfoWindow(struct Pokenav_RegionMapGfx *); +static bool32 IsDma3ManagerBusyWithBgCopy_(struct Pokenav_RegionMapGfx *); static void ChangeBgYForZoom(bool32); static bool32 IsChangeBgYForZoomActive(void); static void CreateCityZoomTextSprites(void); -static void DrawCityMap(struct Pokenav5Struct_2 *, int, int); -static void PrintLandmarkNames(struct Pokenav5Struct_2 *, int, int); +static void DrawCityMap(struct Pokenav_RegionMapGfx *, int, int); +static void PrintLandmarkNames(struct Pokenav_RegionMapGfx *, int, int); static void SetCityZoomTextInvisibility(bool32); static void Task_ChangeBgYForZoom(u8 taskId); static void UpdateCityZoomTextPosition(void); @@ -74,7 +77,7 @@ static u32 LoopedTask_ExitRegionMap(s32); extern const u16 gRegionMapCityZoomTiles_Pal[]; extern const u32 gRegionMapCityZoomText_Gfx[]; -static const u16 sMapSecInfoWindow_Pal[] = INCBIN_U16("graphics/pokenav/region_map_info_window.gbapal"); +static const u16 sMapSecInfoWindow_Pal[] = INCBIN_U16("graphics/pokenav/region_map/info_window.gbapal"); static const u32 sRegionMapCityZoomTiles_Gfx[] = INCBIN_U32("graphics/pokenav/zoom_tiles.4bpp.lz"); #include "data/region_map/city_map_tilemaps.h" @@ -121,12 +124,12 @@ static const LoopedTask sRegionMapLoopTaskFuncs[] = static const struct CompressedSpriteSheet sCityZoomTextSpriteSheet[1] = { - {gRegionMapCityZoomText_Gfx, 0x800, 6} + {gRegionMapCityZoomText_Gfx, 0x800, GFXTAG_CITY_ZOOM} }; static const struct SpritePalette sCityZoomTilesSpritePalette[] = { - {gRegionMapCityZoomTiles_Pal, 11}, + {gRegionMapCityZoomTiles_Pal, PALTAG_CITY_ZOOM}, {} }; @@ -159,8 +162,8 @@ const struct OamData sCityZoomTextSprite_OamData = static const struct SpriteTemplate sCityZoomTextSpriteTemplate = { - .tileTag = 6, - .paletteTag = 11, + .tileTag = GFXTAG_CITY_ZOOM, + .paletteTag = PALTAG_CITY_ZOOM, .oam = &sCityZoomTextSprite_OamData, .anims = gDummySpriteAnimTable, .images = NULL, @@ -170,7 +173,7 @@ static const struct SpriteTemplate sCityZoomTextSpriteTemplate = u32 PokenavCallback_Init_RegionMap(void) { - struct Pokenav5Struct *state = AllocSubstruct(POKENAV_SUBSTRUCT_REGION_MAP_STATE, sizeof(struct Pokenav5Struct)); + struct Pokenav_RegionMapMenu *state = AllocSubstruct(POKENAV_SUBSTRUCT_REGION_MAP_STATE, sizeof(struct Pokenav_RegionMapMenu)); if (!state) return FALSE; @@ -195,11 +198,11 @@ void FreeRegionMapSubstruct1(void) u32 GetRegionMapCallback(void) { - struct Pokenav5Struct *state = GetSubstructPtr(POKENAV_SUBSTRUCT_REGION_MAP_STATE); + struct Pokenav_RegionMapMenu *state = GetSubstructPtr(POKENAV_SUBSTRUCT_REGION_MAP_STATE); return state->callback(state); } -static u32 HandleRegionMapInput(struct Pokenav5Struct *state) +static u32 HandleRegionMapInput(struct Pokenav_RegionMapMenu *state) { switch (DoRegionMapInputCallback()) { @@ -217,7 +220,7 @@ static u32 HandleRegionMapInput(struct Pokenav5Struct *state) return POKENAV_MAP_FUNC_NONE; } -static u32 HandleRegionMapInputZoomDisabled(struct Pokenav5Struct *state) +static u32 HandleRegionMapInputZoomDisabled(struct Pokenav_RegionMapMenu *state) { if (JOY_NEW(B_BUTTON)) { @@ -228,20 +231,20 @@ static u32 HandleRegionMapInputZoomDisabled(struct Pokenav5Struct *state) return POKENAV_MAP_FUNC_NONE; } -static u32 GetExitRegionMapMenuId(struct Pokenav5Struct *state) +static u32 GetExitRegionMapMenuId(struct Pokenav_RegionMapMenu *state) { return POKENAV_MAIN_MENU_CURSOR_ON_MAP; } bool32 GetZoomDisabled(void) { - struct Pokenav5Struct *state = GetSubstructPtr(POKENAV_SUBSTRUCT_REGION_MAP_STATE); + struct Pokenav_RegionMapMenu *state = GetSubstructPtr(POKENAV_SUBSTRUCT_REGION_MAP_STATE); return state->zoomDisabled; } bool32 OpenPokenavRegionMap(void) { - struct Pokenav5Struct_2 *state = AllocSubstruct(POKENAV_SUBSTRUCT_REGION_MAP_ZOOM, sizeof(struct Pokenav5Struct_2)); + struct Pokenav_RegionMapGfx *state = AllocSubstruct(POKENAV_SUBSTRUCT_REGION_MAP_ZOOM, sizeof(struct Pokenav_RegionMapGfx)); if (!state) return FALSE; @@ -252,20 +255,20 @@ bool32 OpenPokenavRegionMap(void) void CreateRegionMapLoopedTask(s32 index) { - struct Pokenav5Struct_2 *state = GetSubstructPtr(POKENAV_SUBSTRUCT_REGION_MAP_ZOOM); + struct Pokenav_RegionMapGfx *state = GetSubstructPtr(POKENAV_SUBSTRUCT_REGION_MAP_ZOOM); state->loopTaskId = CreateLoopedTask(sRegionMapLoopTaskFuncs[index], 1); state->isTaskActiveCB = GetCurrentLoopedTaskActive; } bool32 IsRegionMapLoopedTaskActive(void) { - struct Pokenav5Struct_2 *state = GetSubstructPtr(POKENAV_SUBSTRUCT_REGION_MAP_ZOOM); + struct Pokenav_RegionMapGfx *state = GetSubstructPtr(POKENAV_SUBSTRUCT_REGION_MAP_ZOOM); return state->isTaskActiveCB(); } void FreeRegionMapSubstruct2(void) { - struct Pokenav5Struct_2 *state = GetSubstructPtr(POKENAV_SUBSTRUCT_REGION_MAP_ZOOM); + struct Pokenav_RegionMapGfx *state = GetSubstructPtr(POKENAV_SUBSTRUCT_REGION_MAP_ZOOM); FreeRegionMapIconResources(); FreeCityZoomViewGfx(); RemoveWindow(state->infoWindowId); @@ -285,7 +288,7 @@ static void VBlankCB_RegionMap(void) static bool32 GetCurrentLoopedTaskActive(void) { - struct Pokenav5Struct_2 *state = GetSubstructPtr(POKENAV_SUBSTRUCT_REGION_MAP_ZOOM); + struct Pokenav_RegionMapGfx *state = GetSubstructPtr(POKENAV_SUBSTRUCT_REGION_MAP_ZOOM); return IsLoopedTaskActive(state->loopTaskId); } @@ -301,7 +304,7 @@ static u32 LoopedTask_OpenRegionMap(s32 taskState) { int menuGfxId; struct RegionMap *regionMap; - struct Pokenav5Struct_2 *state = GetSubstructPtr(POKENAV_SUBSTRUCT_REGION_MAP_ZOOM); + struct Pokenav_RegionMapGfx *state = GetSubstructPtr(POKENAV_SUBSTRUCT_REGION_MAP_ZOOM); switch (taskState) { case 0: @@ -346,7 +349,7 @@ static u32 LoopedTask_OpenRegionMap(s32 taskState) return LT_PAUSE; UpdateMapSecInfoWindow(state); - sub_81C7B40(); + FadeToBlackExceptPrimary(); return LT_INC_AND_PAUSE; case 5: if (IsDma3ManagerBusyWithBgCopy_(state)) @@ -364,7 +367,7 @@ static u32 LoopedTask_OpenRegionMap(s32 taskState) LoadLeftHeaderGfxForIndex(menuGfxId); ShowLeftHeaderGfx(menuGfxId, 1, 1); - PokenavFadeScreen(1); + PokenavFadeScreen(POKENAV_FADE_FROM_BLACK); return LT_INC_AND_PAUSE; case 7: if (IsPaletteFadeActive() || AreLeftHeaderSpritesMoving()) @@ -377,7 +380,7 @@ static u32 LoopedTask_OpenRegionMap(s32 taskState) static u32 LoopedTask_UpdateInfoAfterCursorMove(s32 taskState) { - struct Pokenav5Struct_2 *state = GetSubstructPtr(POKENAV_SUBSTRUCT_REGION_MAP_ZOOM); + struct Pokenav_RegionMapGfx *state = GetSubstructPtr(POKENAV_SUBSTRUCT_REGION_MAP_ZOOM); switch (taskState) { case 0: @@ -420,7 +423,7 @@ static u32 LoopedTask_RegionMapZoomOut(s32 taskState) static u32 LoopedTask_RegionMapZoomIn(s32 taskState) { - struct Pokenav5Struct_2 *state = GetSubstructPtr(POKENAV_SUBSTRUCT_REGION_MAP_ZOOM); + struct Pokenav_RegionMapGfx *state = GetSubstructPtr(POKENAV_SUBSTRUCT_REGION_MAP_ZOOM); switch (taskState) { case 0: @@ -457,7 +460,7 @@ static u32 LoopedTask_ExitRegionMap(s32 taskState) { case 0: PlaySE(SE_SELECT); - PokenavFadeScreen(0); + PokenavFadeScreen(POKENAV_FADE_TO_BLACK); return LT_INC_AND_PAUSE; case 1: if (IsPaletteFadeActive()) @@ -492,14 +495,14 @@ static void LoadCityZoomViewGfx(void) static void FreeCityZoomViewGfx(void) { int i; - struct Pokenav5Struct_2 *state = GetSubstructPtr(POKENAV_SUBSTRUCT_REGION_MAP_ZOOM); - FreeSpriteTilesByTag(6); - FreeSpritePaletteByTag(11); + struct Pokenav_RegionMapGfx *state = GetSubstructPtr(POKENAV_SUBSTRUCT_REGION_MAP_ZOOM); + FreeSpriteTilesByTag(GFXTAG_CITY_ZOOM); + FreeSpritePaletteByTag(PALTAG_CITY_ZOOM); for (i = 0; i < (int)ARRAY_COUNT(state->cityZoomTextSprites); i++) DestroySprite(state->cityZoomTextSprites[i]); } -static void LoadPokenavRegionMapGfx(struct Pokenav5Struct_2 *state) +static void LoadPokenavRegionMapGfx(struct Pokenav_RegionMapGfx *state) { BgDmaFill(1, PIXEL_FILL(0), 0x40, 1); BgDmaFill(1, PIXEL_FILL(1), 0x41, 1); @@ -527,7 +530,7 @@ static bool32 TryFreeTempTileDataBuffers(void) return FreeTempTileDataBuffersIfPossible(); } -static void UpdateMapSecInfoWindow(struct Pokenav5Struct_2 *state) +static void UpdateMapSecInfoWindow(struct Pokenav_RegionMapGfx *state) { struct RegionMap *regionMap = GetSubstructPtr(POKENAV_SUBSTRUCT_REGION_MAP); switch (regionMap->mapSecType) @@ -565,7 +568,7 @@ static void UpdateMapSecInfoWindow(struct Pokenav5Struct_2 *state) } } -static bool32 IsDma3ManagerBusyWithBgCopy_(struct Pokenav5Struct_2 *state) +static bool32 IsDma3ManagerBusyWithBgCopy_(struct Pokenav_RegionMapGfx *state) { return IsDma3ManagerBusyWithBgCopy(); } @@ -621,7 +624,7 @@ static bool32 IsDecompressCityMapsActive(void) static u32 LoopedTask_DecompressCityMaps(s32 taskState) { - struct Pokenav5Struct_2 *state = GetSubstructPtr(POKENAV_SUBSTRUCT_REGION_MAP_ZOOM); + struct Pokenav_RegionMapGfx *state = GetSubstructPtr(POKENAV_SUBSTRUCT_REGION_MAP_ZOOM); if (taskState < NUM_CITY_MAPS) { LZ77UnCompWram(sPokenavCityMaps[taskState].tilemap, state->cityZoomPics[taskState]); @@ -631,7 +634,7 @@ static u32 LoopedTask_DecompressCityMaps(s32 taskState) return LT_FINISH; } -static void DrawCityMap(struct Pokenav5Struct_2 *state, int mapSecId, int pos) +static void DrawCityMap(struct Pokenav_RegionMapGfx *state, int mapSecId, int pos) { int i; for (i = 0; i < NUM_CITY_MAPS && (sPokenavCityMaps[i].mapSecId != mapSecId || sPokenavCityMaps[i].index != pos); i++) @@ -644,7 +647,7 @@ static void DrawCityMap(struct Pokenav5Struct_2 *state, int mapSecId, int pos) CopyToBgTilemapBufferRect(1, state->cityZoomPics[i], 18, 6, 10, 10); } -static void PrintLandmarkNames(struct Pokenav5Struct_2 *state, int mapSecId, int pos) +static void PrintLandmarkNames(struct Pokenav_RegionMapGfx *state, int mapSecId, int pos) { int i = 0; while (1) @@ -664,7 +667,7 @@ static void CreateCityZoomTextSprites(void) int i; int y; struct Sprite *sprite; - struct Pokenav5Struct_2 *state = GetSubstructPtr(POKENAV_SUBSTRUCT_REGION_MAP_ZOOM); + struct Pokenav_RegionMapGfx *state = GetSubstructPtr(POKENAV_SUBSTRUCT_REGION_MAP_ZOOM); // When not zoomed in the text is still created but its pushed off screen if (!IsRegionMapZoomed()) @@ -724,7 +727,7 @@ static void SpriteCB_CityZoomText(struct Sprite *sprite) static void UpdateCityZoomTextPosition(void) { int i; - struct Pokenav5Struct_2 *state = GetSubstructPtr(POKENAV_SUBSTRUCT_REGION_MAP_ZOOM); + struct Pokenav_RegionMapGfx *state = GetSubstructPtr(POKENAV_SUBSTRUCT_REGION_MAP_ZOOM); int y = 132 - (GetBgY(1) >> 8); for (i = 0; i < (int)ARRAY_COUNT(state->cityZoomTextSprites); i++) state->cityZoomTextSprites[i]->y = y; @@ -733,7 +736,7 @@ static void UpdateCityZoomTextPosition(void) static void SetCityZoomTextInvisibility(bool32 invisible) { int i; - struct Pokenav5Struct_2 *state = GetSubstructPtr(POKENAV_SUBSTRUCT_REGION_MAP_ZOOM); + struct Pokenav_RegionMapGfx *state = GetSubstructPtr(POKENAV_SUBSTRUCT_REGION_MAP_ZOOM); for (i = 0; i < (int)ARRAY_COUNT(state->cityZoomTextSprites); i++) state->cityZoomTextSprites[i]->invisible = invisible; } diff --git a/src/pokenav_ribbons_1.c b/src/pokenav_ribbons_list.c similarity index 60% rename from src/pokenav_ribbons_1.c rename to src/pokenav_ribbons_list.c index 862128967c..1d72f6a980 100644 --- a/src/pokenav_ribbons_1.c +++ b/src/pokenav_ribbons_list.c @@ -20,49 +20,49 @@ enum }; -struct PokenavSub9 +struct Pokenav_RibbonsMonList { - u32 (*callback)(struct PokenavSub9*); + u32 (*callback)(struct Pokenav_RibbonsMonList*); u32 loopedTaskId; u16 winid; s32 boxId; s32 monId; u32 changeBgs; u32 saveMonList; - struct PokenavSub18 *monList; + struct PokenavMonList *monList; }; -struct PokenavSub10 +struct Pokenav_RibbonsMonMenu { bool32 (*callback)(void); - u32 ltid; + u32 loopedTaskId; u16 winid; bool32 fromSummary; u8 buff[BG_SCREEN_SIZE]; }; -static u32 HandleRibbonsMonListInput_WaitListInit(struct PokenavSub9 *structPtr); -static u32 HandleRibbonsMonListInput(struct PokenavSub9 *structPtr); -static u32 RibbonsMonMenu_ReturnToMainMenu(struct PokenavSub9 *structPtr); -static u32 RibbonsMonMenu_ToSummaryScreen(struct PokenavSub9 *structPtr); -static u32 BuildPartyMonRibbonList(s32 state); -static u32 InitBoxMonRibbonList(s32 state); -static u32 BuildBoxMonRibbonList(s32 state); -static u32 GetMonRibbonListLoopTaskFunc(s32 state); -static void sub_81CFCEC(struct PokenavSub9 *structPtr, struct PokenavMonList *item); -static u32 LoopedTask_OpenRibbonsMonList(s32 state); +static u32 HandleRibbonsMonListInput_WaitListInit(struct Pokenav_RibbonsMonList *); +static u32 HandleRibbonsMonListInput(struct Pokenav_RibbonsMonList *); +static u32 RibbonsMonMenu_ReturnToMainMenu(struct Pokenav_RibbonsMonList *); +static u32 RibbonsMonMenu_ToSummaryScreen(struct Pokenav_RibbonsMonList *); +static u32 BuildPartyMonRibbonList(s32); +static u32 InitBoxMonRibbonList(s32); +static u32 BuildBoxMonRibbonList(s32); +static u32 GetMonRibbonListLoopTaskFunc(s32); +static void InsertMonListItem(struct Pokenav_RibbonsMonList *, struct PokenavMonListItem *); +static u32 LoopedTask_OpenRibbonsMonList(s32); static bool32 GetRibbonsMonCurrentLoopedTaskActive(void); -static u32 LoopedTask_RibbonsListMoveCursorUp(s32 state); -static u32 LoopedTask_RibbonsListMoveCursorDown(s32 state); -static u32 LoopedTask_RibbonsListMovePageUp(s32 state); -static u32 LoopedTask_RibbonsListMovePageDown(s32 state); -static u32 LoopedTask_RibbonsListReturnToMainMenu(s32 state); -static u32 LoopedTask_RibbonsListOpenSummary(s32 state); -static void sub_81D02B0(s32 windowId, s32 val1, s32 val2); -static void AddRibbonsMonListWindow(struct PokenavSub10 *ptr); -static void sub_81D0288(struct PokenavSub10 *ptr); -static void InitMonRibbonPokenavListMenuTemplate(void); -static void BufferRibbonMonInfoText(struct PokenavMonList *, u8 *); +static u32 LoopedTask_RibbonsListMoveCursorUp(s32); +static u32 LoopedTask_RibbonsListMoveCursorDown(s32); +static u32 LoopedTask_RibbonsListMovePageUp(s32); +static u32 LoopedTask_RibbonsListMovePageDown(s32); +static u32 LoopedTask_RibbonsListReturnToMainMenu(s32); +static u32 LoopedTask_RibbonsListOpenSummary(s32); +static void DrawListIndexNumber(s32, s32, s32); +static void AddRibbonsMonListWindow(struct Pokenav_RibbonsMonMenu *); +static void UpdateIndexNumberDisplay(struct Pokenav_RibbonsMonMenu *); +static void CreateRibbonMonsList(void); +static void BufferRibbonMonInfoText(struct PokenavListItem *, u8 *); static const LoopedTask sMonRibbonListLoopTaskFuncs[] = { @@ -125,54 +125,54 @@ static const u8 sText_NoGenderSymbol[] = _("{UNK_SPACER}"); bool32 PokenavCallback_Init_MonRibbonList(void) { - struct PokenavSub9 *structPtr = AllocSubstruct(POKENAV_SUBSTRUCT_RIBBONS_MON_LIST, sizeof(struct PokenavSub9)); - if (structPtr == NULL) + struct Pokenav_RibbonsMonList *list = AllocSubstruct(POKENAV_SUBSTRUCT_RIBBONS_MON_LIST, sizeof(struct Pokenav_RibbonsMonList)); + if (list == NULL) return FALSE; - structPtr->monList = AllocSubstruct(POKENAV_SUBSTRUCT_MON_LIST, sizeof(struct PokenavSub18)); - if (structPtr->monList == NULL) + list->monList = AllocSubstruct(POKENAV_SUBSTRUCT_MON_LIST, sizeof(struct PokenavMonList)); + if (list->monList == NULL) return FALSE; - structPtr->callback = HandleRibbonsMonListInput_WaitListInit; - structPtr->loopedTaskId = CreateLoopedTask(GetMonRibbonListLoopTaskFunc, 1); - structPtr->changeBgs = 0; + list->callback = HandleRibbonsMonListInput_WaitListInit; + list->loopedTaskId = CreateLoopedTask(GetMonRibbonListLoopTaskFunc, 1); + list->changeBgs = 0; return TRUE; } bool32 PokenavCallback_Init_RibbonsMonListFromSummary(void) { - struct PokenavSub9 *structPtr = AllocSubstruct(POKENAV_SUBSTRUCT_RIBBONS_MON_LIST, sizeof(struct PokenavSub9)); - if (structPtr == NULL) + struct Pokenav_RibbonsMonList *list = AllocSubstruct(POKENAV_SUBSTRUCT_RIBBONS_MON_LIST, sizeof(struct Pokenav_RibbonsMonList)); + if (list == NULL) return FALSE; - structPtr->monList = GetSubstructPtr(POKENAV_SUBSTRUCT_MON_LIST); - structPtr->callback = HandleRibbonsMonListInput; - structPtr->changeBgs = 1; + list->monList = GetSubstructPtr(POKENAV_SUBSTRUCT_MON_LIST); + list->callback = HandleRibbonsMonListInput; + list->changeBgs = 1; return TRUE; } u32 GetRibbonsMonListCallback(void) { - struct PokenavSub9 *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_RIBBONS_MON_LIST); - return structPtr->callback(structPtr); + struct Pokenav_RibbonsMonList *list = GetSubstructPtr(POKENAV_SUBSTRUCT_RIBBONS_MON_LIST); + return list->callback(list); } -void FreeRibbonsMonList1(void) +void FreeRibbonsMonList(void) { - struct PokenavSub9 *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_RIBBONS_MON_LIST); - if (!structPtr->saveMonList) + struct Pokenav_RibbonsMonList *list = GetSubstructPtr(POKENAV_SUBSTRUCT_RIBBONS_MON_LIST); + if (!list->saveMonList) FreePokenavSubstruct(POKENAV_SUBSTRUCT_MON_LIST); FreePokenavSubstruct(POKENAV_SUBSTRUCT_RIBBONS_MON_LIST); } -static u32 HandleRibbonsMonListInput_WaitListInit(struct PokenavSub9 *structPtr) +static u32 HandleRibbonsMonListInput_WaitListInit(struct Pokenav_RibbonsMonList *list) { - if (!IsLoopedTaskActive(structPtr->loopedTaskId)) - structPtr->callback = HandleRibbonsMonListInput; + if (!IsLoopedTaskActive(list->loopedTaskId)) + list->callback = HandleRibbonsMonListInput; return 0; } -static u32 HandleRibbonsMonListInput(struct PokenavSub9 *structPtr) +static u32 HandleRibbonsMonListInput(struct Pokenav_RibbonsMonList *list) { if (JOY_REPEAT(DPAD_UP)) return RIBBONS_MON_LIST_FUNC_MOVE_UP; @@ -184,60 +184,60 @@ static u32 HandleRibbonsMonListInput(struct PokenavSub9 *structPtr) return RIBBONS_MON_LIST_FUNC_PAGE_DOWN; if (JOY_NEW(B_BUTTON)) { - structPtr->saveMonList = 0; - structPtr->callback = RibbonsMonMenu_ReturnToMainMenu; + list->saveMonList = 0; + list->callback = RibbonsMonMenu_ReturnToMainMenu; return RIBBONS_MON_LIST_FUNC_EXIT; } if (JOY_NEW(A_BUTTON)) { - structPtr->monList->currIndex = GetSelectedPokenavListIndex(); - structPtr->saveMonList = 1; - structPtr->callback = RibbonsMonMenu_ToSummaryScreen; + list->monList->currIndex = PokenavList_GetSelectedIndex(); + list->saveMonList = 1; + list->callback = RibbonsMonMenu_ToSummaryScreen; return RIBBONS_MON_LIST_FUNC_OPEN_RIBBONS_SUMMARY; } return RIBBONS_MON_LIST_FUNC_NONE; } -static u32 RibbonsMonMenu_ReturnToMainMenu(struct PokenavSub9 *structPtr) +static u32 RibbonsMonMenu_ReturnToMainMenu(struct Pokenav_RibbonsMonList *list) { return POKENAV_MAIN_MENU_CURSOR_ON_RIBBONS; } -static u32 RibbonsMonMenu_ToSummaryScreen(struct PokenavSub9 *structPtr) +static u32 RibbonsMonMenu_ToSummaryScreen(struct Pokenav_RibbonsMonList *list) { return POKENAV_RIBBONS_SUMMARY_SCREEN; } static u32 UpdateMonListBgs(void) { - struct PokenavSub9 *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_RIBBONS_MON_LIST); - return structPtr->changeBgs; + struct Pokenav_RibbonsMonList *list = GetSubstructPtr(POKENAV_SUBSTRUCT_RIBBONS_MON_LIST); + return list->changeBgs; } -static struct PokenavMonList *GetMonRibbonMonListData(void) +static struct PokenavMonListItem *GetMonRibbonMonListData(void) { - struct PokenavSub9 * ptr = GetSubstructPtr(POKENAV_SUBSTRUCT_RIBBONS_MON_LIST); - return ptr->monList->monData; + struct Pokenav_RibbonsMonList * list = GetSubstructPtr(POKENAV_SUBSTRUCT_RIBBONS_MON_LIST); + return list->monList->monData; } static s32 GetRibbonsMonListCount(void) { - struct PokenavSub9 * ptr = GetSubstructPtr(POKENAV_SUBSTRUCT_RIBBONS_MON_LIST); - return ptr->monList->listCount; + struct Pokenav_RibbonsMonList * list = GetSubstructPtr(POKENAV_SUBSTRUCT_RIBBONS_MON_LIST); + return list->monList->listCount; } //unused static s32 GetMonRibbonSelectedMonData(void) { - struct PokenavSub9 * ptr = GetSubstructPtr(POKENAV_SUBSTRUCT_RIBBONS_MON_LIST); - s32 idx = GetSelectedPokenavListIndex(); - return ptr->monList->monData[idx].data; + struct Pokenav_RibbonsMonList * list = GetSubstructPtr(POKENAV_SUBSTRUCT_RIBBONS_MON_LIST); + s32 idx = PokenavList_GetSelectedIndex(); + return list->monList->monData[idx].data; } static s32 GetRibbonListMenuCurrIndex(void) { - struct PokenavSub9 * ptr = GetSubstructPtr(POKENAV_SUBSTRUCT_RIBBONS_MON_LIST); - return ptr->monList->currIndex; + struct Pokenav_RibbonsMonList * list = GetSubstructPtr(POKENAV_SUBSTRUCT_RIBBONS_MON_LIST); + return list->monList->currIndex; } static u32 GetMonRibbonListLoopTaskFunc(s32 state) @@ -248,11 +248,11 @@ static u32 GetMonRibbonListLoopTaskFunc(s32 state) static u32 BuildPartyMonRibbonList(s32 state) { s32 i; - struct PokenavMonList item; - struct PokenavSub9 * ptr = GetSubstructPtr(POKENAV_SUBSTRUCT_RIBBONS_MON_LIST); + struct PokenavMonListItem item; + struct Pokenav_RibbonsMonList * list = GetSubstructPtr(POKENAV_SUBSTRUCT_RIBBONS_MON_LIST); - ptr->monList->listCount = 0; - ptr->monList->currIndex = 0; + list->monList->listCount = 0; + list->monList->currIndex = 0; item.boxId = TOTAL_BOXES_COUNT; for (i = 0; i < PARTY_SIZE; i++) { @@ -266,7 +266,7 @@ static u32 BuildPartyMonRibbonList(s32 state) { item.monId = i; item.data = ribbonCount; - sub_81CFCEC(ptr, &item); + InsertMonListItem(list, &item); } } } @@ -276,19 +276,19 @@ static u32 BuildPartyMonRibbonList(s32 state) static u32 InitBoxMonRibbonList(s32 state) { - struct PokenavSub9 *ptr = GetSubstructPtr(POKENAV_SUBSTRUCT_RIBBONS_MON_LIST); - ptr->monId = 0; - ptr->boxId = 0; + struct Pokenav_RibbonsMonList *list = GetSubstructPtr(POKENAV_SUBSTRUCT_RIBBONS_MON_LIST); + list->monId = 0; + list->boxId = 0; return LT_INC_AND_CONTINUE; } static u32 BuildBoxMonRibbonList(s32 state) { - struct PokenavSub9 * ptr = GetSubstructPtr(POKENAV_SUBSTRUCT_RIBBONS_MON_LIST); - s32 boxId = ptr->boxId; - s32 monId = ptr->monId; + struct Pokenav_RibbonsMonList * list = GetSubstructPtr(POKENAV_SUBSTRUCT_RIBBONS_MON_LIST); + s32 boxId = list->boxId; + s32 monId = list->monId; s32 boxCount = 0; - struct PokenavMonList item; + struct PokenavMonListItem item; while (boxId < TOTAL_BOXES_COUNT) { @@ -302,15 +302,15 @@ static u32 BuildBoxMonRibbonList(s32 state) item.boxId = boxId; item.monId = monId; item.data = ribbonCount; - sub_81CFCEC(ptr, &item); + InsertMonListItem(list, &item); } } boxCount++; monId++; if (boxCount > TOTAL_BOXES_COUNT) { - ptr->boxId = boxId; - ptr->monId = monId; + list->boxId = boxId; + list->monId = monId; return LT_CONTINUE; } } @@ -318,28 +318,28 @@ static u32 BuildBoxMonRibbonList(s32 state) boxId++; } - ptr->changeBgs = 1; + list->changeBgs = 1; return LT_FINISH; } -static void sub_81CFCEC(struct PokenavSub9 *structPtr, struct PokenavMonList *item) +static void InsertMonListItem(struct Pokenav_RibbonsMonList *list, struct PokenavMonListItem *item) { u32 left = 0; - u32 right = structPtr->monList->listCount; + u32 right = list->monList->listCount; u32 insertionIdx = left + (right - left) / 2; while (right != insertionIdx) { - if (item->data > structPtr->monList->monData[insertionIdx].data) + if (item->data > list->monList->monData[insertionIdx].data) right = insertionIdx; else left = insertionIdx + 1; insertionIdx = left + (right - left) / 2; } - for (right = structPtr->monList->listCount; right > insertionIdx; right--) - structPtr->monList->monData[right] = structPtr->monList->monData[right - 1]; - structPtr->monList->monData[insertionIdx] = *item; - structPtr->monList->listCount++; + for (right = list->monList->listCount; right > insertionIdx; right--) + list->monList->monData[right] = list->monList->monData[right - 1]; + list->monList->monData[insertionIdx] = *item; + list->monList->listCount++; } // Unused @@ -374,62 +374,62 @@ static bool32 PlayerHasRibbonsMon(void) bool32 OpenRibbonsMonList(void) { - struct PokenavSub10 *ptr = AllocSubstruct(POKENAV_SUBSTRUCT_RIBBONS_MON_MENU, sizeof(struct PokenavSub10)); - if (ptr == NULL) + struct Pokenav_RibbonsMonMenu *menu = AllocSubstruct(POKENAV_SUBSTRUCT_RIBBONS_MON_MENU, sizeof(struct Pokenav_RibbonsMonMenu)); + if (menu == NULL) return FALSE; - ptr->ltid = CreateLoopedTask(LoopedTask_OpenRibbonsMonList, 1); - ptr->callback = GetRibbonsMonCurrentLoopedTaskActive; - ptr->fromSummary = FALSE; + menu->loopedTaskId = CreateLoopedTask(LoopedTask_OpenRibbonsMonList, 1); + menu->callback = GetRibbonsMonCurrentLoopedTaskActive; + menu->fromSummary = FALSE; return TRUE; } bool32 OpenRibbonsMonListFromRibbonsSummary(void) { - struct PokenavSub10 *monMenu = AllocSubstruct(POKENAV_SUBSTRUCT_RIBBONS_MON_MENU, sizeof(struct PokenavSub10)); - if (monMenu == NULL) + struct Pokenav_RibbonsMonMenu *menu = AllocSubstruct(POKENAV_SUBSTRUCT_RIBBONS_MON_MENU, sizeof(struct Pokenav_RibbonsMonMenu)); + if (menu == NULL) return FALSE; - monMenu->ltid = CreateLoopedTask(LoopedTask_OpenRibbonsMonList, 1); - monMenu->callback = GetRibbonsMonCurrentLoopedTaskActive; - monMenu->fromSummary = TRUE; + menu->loopedTaskId = CreateLoopedTask(LoopedTask_OpenRibbonsMonList, 1); + menu->callback = GetRibbonsMonCurrentLoopedTaskActive; + menu->fromSummary = TRUE; return TRUE; } void CreateRibbonsMonListLoopedTask(s32 idx) { - struct PokenavSub10 *monMenu = GetSubstructPtr(POKENAV_SUBSTRUCT_RIBBONS_MON_MENU); - monMenu->ltid = CreateLoopedTask(sRibbonsMonMenuLoopTaskFuncs[idx], 1); - monMenu->callback = GetRibbonsMonCurrentLoopedTaskActive; + struct Pokenav_RibbonsMonMenu *menu = GetSubstructPtr(POKENAV_SUBSTRUCT_RIBBONS_MON_MENU); + menu->loopedTaskId = CreateLoopedTask(sRibbonsMonMenuLoopTaskFuncs[idx], 1); + menu->callback = GetRibbonsMonCurrentLoopedTaskActive; } bool32 IsRibbonsMonListLoopedTaskActive(void) { - struct PokenavSub10 *monMenu = GetSubstructPtr(POKENAV_SUBSTRUCT_RIBBONS_MON_MENU); - return monMenu->callback(); + struct Pokenav_RibbonsMonMenu *menu = GetSubstructPtr(POKENAV_SUBSTRUCT_RIBBONS_MON_MENU); + return menu->callback(); } bool32 GetRibbonsMonCurrentLoopedTaskActive(void) { - struct PokenavSub10 * ptr = GetSubstructPtr(POKENAV_SUBSTRUCT_RIBBONS_MON_MENU); - return IsLoopedTaskActive(ptr->ltid); + struct Pokenav_RibbonsMonMenu * menu = GetSubstructPtr(POKENAV_SUBSTRUCT_RIBBONS_MON_MENU); + return IsLoopedTaskActive(menu->loopedTaskId); } -void FreeRibbonsMonList2(void) +void FreeRibbonsMonMenu(void) { - struct PokenavSub10 * ptr = GetSubstructPtr(POKENAV_SUBSTRUCT_RIBBONS_MON_MENU); - sub_81C8234(); - RemoveWindow(ptr->winid); + struct Pokenav_RibbonsMonMenu * menu = GetSubstructPtr(POKENAV_SUBSTRUCT_RIBBONS_MON_MENU); + DestroyPokenavList(); + RemoveWindow(menu->winid); FreePokenavSubstruct(POKENAV_SUBSTRUCT_RIBBONS_MON_MENU); } static u32 LoopedTask_OpenRibbonsMonList(s32 state) { - struct PokenavSub10 *monMenu = GetSubstructPtr(POKENAV_SUBSTRUCT_RIBBONS_MON_MENU); + struct Pokenav_RibbonsMonMenu *menu = GetSubstructPtr(POKENAV_SUBSTRUCT_RIBBONS_MON_MENU); switch (state) { case 0: InitBgTemplates(sMonRibbonListBgTemplates, ARRAY_COUNT(sMonRibbonListBgTemplates)); DecompressAndCopyTileDataToVram(1, sMonRibbonListFrameTiles, 0, 0, 0); - SetBgTilemapBuffer(1, monMenu->buff); + SetBgTilemapBuffer(1, menu->buff); CopyToBgTilemapBuffer(1, sMonRibbonListFrameTilemap, 0, 0); CopyPaletteIntoBufferUnfaded(sMonRibbonListFramePal, 0x10, 0x20); CopyBgTilemapBufferToVram(1); @@ -447,12 +447,12 @@ static u32 LoopedTask_OpenRibbonsMonList(s32 state) if (FreeTempTileDataBuffersIfPossible()) return LT_PAUSE; CopyPaletteIntoBufferUnfaded(sMonRibbonListUi_Pal, 0x20, 0x20); - InitMonRibbonPokenavListMenuTemplate(); + CreateRibbonMonsList(); return LT_INC_AND_PAUSE; case 3: - if (sub_81C8224()) + if (IsCreatePokenavListTaskActive()) return LT_PAUSE; - AddRibbonsMonListWindow(monMenu); + AddRibbonsMonListWindow(menu); return LT_INC_AND_PAUSE; case 4: if (FreeTempTileDataBuffersIfPossible()) @@ -460,8 +460,8 @@ static u32 LoopedTask_OpenRibbonsMonList(s32 state) ShowBg(2); HideBg(3); PrintHelpBarText(HELPBAR_RIBBONS_MON_LIST); - PokenavFadeScreen(1); - if (!monMenu->fromSummary) + PokenavFadeScreen(POKENAV_FADE_FROM_BLACK); + if (!menu->fromSummary) { LoadLeftHeaderGfxForIndex(POKENAV_GFX_RIBBONS_MENU); ShowLeftHeaderGfx(POKENAV_GFX_RIBBONS_MENU, 1, 0); @@ -479,11 +479,11 @@ static u32 LoopedTask_OpenRibbonsMonList(s32 state) static u32 LoopedTask_RibbonsListMoveCursorUp(s32 state) { - struct PokenavSub10 *monMenu = GetSubstructPtr(POKENAV_SUBSTRUCT_RIBBONS_MON_MENU); + struct Pokenav_RibbonsMonMenu *menu = GetSubstructPtr(POKENAV_SUBSTRUCT_RIBBONS_MON_MENU); switch (state) { case 0: - switch (MatchCall_MoveCursorUp()) + switch (PokenavList_MoveCursorUp()) { case 0: return LT_FINISH; @@ -496,11 +496,11 @@ static u32 LoopedTask_RibbonsListMoveCursorUp(s32 state) } return LT_INC_AND_PAUSE; case 1: - if (IsMonListLoopedTaskActive()) + if (PokenavList_IsMoveWindowTaskActive()) return LT_PAUSE; // fallthrough case 2: - sub_81D0288(monMenu); + UpdateIndexNumberDisplay(menu); return LT_INC_AND_PAUSE; case 3: if (IsDma3ManagerBusyWithBgCopy()) @@ -512,11 +512,11 @@ static u32 LoopedTask_RibbonsListMoveCursorUp(s32 state) static u32 LoopedTask_RibbonsListMoveCursorDown(s32 state) { - struct PokenavSub10 *monMenu = GetSubstructPtr(POKENAV_SUBSTRUCT_RIBBONS_MON_MENU); + struct Pokenav_RibbonsMonMenu *menu = GetSubstructPtr(POKENAV_SUBSTRUCT_RIBBONS_MON_MENU); switch (state) { case 0: - switch (MatchCall_MoveCursorDown()) + switch (PokenavList_MoveCursorDown()) { case 0: return LT_FINISH; @@ -529,11 +529,11 @@ static u32 LoopedTask_RibbonsListMoveCursorDown(s32 state) } return LT_INC_AND_PAUSE; case 1: - if (IsMonListLoopedTaskActive()) + if (PokenavList_IsMoveWindowTaskActive()) return LT_PAUSE; // fallthrough case 2: - sub_81D0288(monMenu); + UpdateIndexNumberDisplay(menu); return LT_INC_AND_PAUSE; case 3: if (IsDma3ManagerBusyWithBgCopy()) @@ -545,11 +545,11 @@ static u32 LoopedTask_RibbonsListMoveCursorDown(s32 state) static u32 LoopedTask_RibbonsListMovePageUp(s32 state) { - struct PokenavSub10 *monMenu = GetSubstructPtr(POKENAV_SUBSTRUCT_RIBBONS_MON_MENU); + struct Pokenav_RibbonsMonMenu *menu = GetSubstructPtr(POKENAV_SUBSTRUCT_RIBBONS_MON_MENU); switch (state) { case 0: - switch (MatchCall_PageUp()) + switch (PokenavList_PageUp()) { case 0: return LT_FINISH; @@ -562,11 +562,11 @@ static u32 LoopedTask_RibbonsListMovePageUp(s32 state) } return LT_INC_AND_PAUSE; case 1: - if (IsMonListLoopedTaskActive()) + if (PokenavList_IsMoveWindowTaskActive()) return LT_PAUSE; // fallthrough case 2: - sub_81D0288(monMenu); + UpdateIndexNumberDisplay(menu); return LT_INC_AND_PAUSE; case 3: if (IsDma3ManagerBusyWithBgCopy()) @@ -578,11 +578,11 @@ static u32 LoopedTask_RibbonsListMovePageUp(s32 state) static u32 LoopedTask_RibbonsListMovePageDown(s32 state) { - struct PokenavSub10 *monMenu = GetSubstructPtr(POKENAV_SUBSTRUCT_RIBBONS_MON_MENU); + struct Pokenav_RibbonsMonMenu *menu = GetSubstructPtr(POKENAV_SUBSTRUCT_RIBBONS_MON_MENU); switch (state) { case 0: - switch (MatchCall_PageDown()) + switch (PokenavList_PageDown()) { case 0: return LT_FINISH; @@ -595,11 +595,11 @@ static u32 LoopedTask_RibbonsListMovePageDown(s32 state) } return LT_INC_AND_PAUSE; case 1: - if (IsMonListLoopedTaskActive()) + if (PokenavList_IsMoveWindowTaskActive()) return LT_PAUSE; // fallthrough case 2: - sub_81D0288(monMenu); + UpdateIndexNumberDisplay(menu); return LT_INC_AND_PAUSE; case 3: if (IsDma3ManagerBusyWithBgCopy()) @@ -615,7 +615,7 @@ static u32 LoopedTask_RibbonsListReturnToMainMenu(s32 state) { case 0: PlaySE(SE_SELECT); - PokenavFadeScreen(0); + PokenavFadeScreen(POKENAV_FADE_TO_BLACK); SlideMenuHeaderDown(); return LT_INC_AND_PAUSE; case 1: @@ -635,7 +635,7 @@ static u32 LoopedTask_RibbonsListOpenSummary(s32 state) { case 0: PlaySE(SE_SELECT); - PokenavFadeScreen(0); + PokenavFadeScreen(POKENAV_FADE_TO_BLACK); return LT_INC_AND_PAUSE; case 1: if (IsPaletteFadeActive()) @@ -645,64 +645,64 @@ static u32 LoopedTask_RibbonsListOpenSummary(s32 state) return LT_FINISH; } -static void AddRibbonsMonListWindow(struct PokenavSub10 *monMenu) +static void AddRibbonsMonListWindow(struct Pokenav_RibbonsMonMenu *menu) { - s32 r2; - monMenu->winid = AddWindow(&sRibbonsMonListWindowTemplate); - PutWindowTilemap(monMenu->winid); - r2 = GetRibbonsMonListCount(); - sub_81D02B0(monMenu->winid, 0, r2); - CopyWindowToVram(monMenu->winid, COPYWIN_MAP); - sub_81D0288(monMenu); + s32 listCount; + menu->winid = AddWindow(&sRibbonsMonListWindowTemplate); + PutWindowTilemap(menu->winid); + listCount = GetRibbonsMonListCount(); + DrawListIndexNumber(menu->winid, 0, listCount); + CopyWindowToVram(menu->winid, COPYWIN_MAP); + UpdateIndexNumberDisplay(menu); } -static void sub_81D0288(struct PokenavSub10 *monMenu) +static void UpdateIndexNumberDisplay(struct Pokenav_RibbonsMonMenu *menu) { - s32 r4 = GetSelectedPokenavListIndex(); - s32 r2 = GetRibbonsMonListCount(); - sub_81D02B0(monMenu->winid, r4 + 1, r2); - CopyWindowToVram(monMenu->winid, COPYWIN_GFX); + s32 listIndex = PokenavList_GetSelectedIndex(); + s32 listCount = GetRibbonsMonListCount(); + DrawListIndexNumber(menu->winid, listIndex + 1, listCount); + CopyWindowToVram(menu->winid, COPYWIN_GFX); } -static void sub_81D02B0(s32 windowId, s32 val1, s32 val2) +static void DrawListIndexNumber(s32 windowId, s32 index, s32 max) { u8 strbuf[16]; u32 x; u8 * ptr = strbuf; - ptr = ConvertIntToDecimalStringN(ptr, val1, STR_CONV_MODE_RIGHT_ALIGN, 3); + ptr = ConvertIntToDecimalStringN(ptr, index, STR_CONV_MODE_RIGHT_ALIGN, 3); *ptr++ = CHAR_SLASH; - ConvertIntToDecimalStringN(ptr, val2, STR_CONV_MODE_RIGHT_ALIGN, 3); + ConvertIntToDecimalStringN(ptr, max, STR_CONV_MODE_RIGHT_ALIGN, 3); x = GetStringCenterAlignXOffset(FONT_NORMAL, strbuf, 56); AddTextPrinterParameterized(windowId, FONT_NORMAL, strbuf, x, 1, TEXT_SKIP_DRAW, NULL); } -static void InitMonRibbonPokenavListMenuTemplate(void) +static void CreateRibbonMonsList(void) { struct PokenavListTemplate template; - template.list.monList = GetMonRibbonMonListData(); + template.list = (struct PokenavListItem *)GetMonRibbonMonListData(); template.count = GetRibbonsMonListCount(); - template.unk8 = 4; - template.unk6 = GetRibbonListMenuCurrIndex(); + template.itemSize = sizeof(struct PokenavListItem); + template.startIndex = GetRibbonListMenuCurrIndex(); template.item_X = 13; template.windowWidth = 17; template.listTop = 1; template.maxShowed = 8; template.fillValue = 2; template.fontId = FONT_NORMAL; - template.listFunc.printMonFunc = BufferRibbonMonInfoText; - template.unk14 = NULL; - sub_81C81D4(&sMonRibbonListBgTemplates[1], &template, 0); + template.bufferItemFunc = BufferRibbonMonInfoText; + template.iconDrawFunc = NULL; + CreatePokenavList(&sMonRibbonListBgTemplates[1], &template, 0); } // Buffers the "Nickname gender/level" text for the ribbon mon list -static void BufferRibbonMonInfoText(struct PokenavMonList * item0, u8 * dest) +static void BufferRibbonMonInfoText(struct PokenavListItem * listItem, u8 * dest) { u8 gender; u8 level; u8 * s; const u8 * genderStr; - struct PokenavMonList * item = item0; + struct PokenavMonListItem * item = (struct PokenavMonListItem *)listItem; // Mon is in party if (item->boxId == TOTAL_BOXES_COUNT) diff --git a/src/pokenav_ribbons_2.c b/src/pokenav_ribbons_summary.c similarity index 66% rename from src/pokenav_ribbons_2.c rename to src/pokenav_ribbons_summary.c index ef08ba3927..81d5b900bd 100644 --- a/src/pokenav_ribbons_2.c +++ b/src/pokenav_ribbons_summary.c @@ -39,10 +39,10 @@ enum #define MON_SPRITE_X_OFF -32 #define MON_SPRITE_Y 104 -struct PokenavSub13 +struct Pokenav_RibbonsSummaryList { u8 unused1[8]; - struct PokenavSub18 *monList; + struct PokenavMonList *monList; u16 selectedPos; u16 normalRibbonLastRowStart; u16 numNormalRibbons; @@ -50,10 +50,10 @@ struct PokenavSub13 u32 ribbonIds[FIRST_GIFT_RIBBON]; u32 giftRibbonIds[NUM_GIFT_RIBBONS]; u32 unused2; - u32 (*callback)(struct PokenavSub13 *); + u32 (*callback)(struct Pokenav_RibbonsSummaryList *); }; -struct PokenavSub14 +struct Pokenav_RibbonsSummaryMenu { u32 (*callback)(void); u32 loopedTaskId; @@ -71,31 +71,31 @@ struct PokenavSub14 static u32 sRibbonDraw_Total; static u32 sRibbonDraw_Current; -static void PrintCurrentMonRibbonCount(struct PokenavSub14 *); -static void PrintRibbbonsSummaryMonInfo(struct PokenavSub14 *); -static void PrintRibbonsMonListIndex(struct PokenavSub14 *); -static void ZoomOutSelectedRibbon(struct PokenavSub14 *); -static void UpdateAndZoomInSelectedRibbon(struct PokenavSub14 *); -static void PrintRibbonNameAndDescription(struct PokenavSub14 *); -static void ResetSpritesAndDrawMonFrontPic(struct PokenavSub14 *); -static void AddRibbonListIndexWindow(struct PokenavSub14 *); -static void DestroyRibbonsMonFrontPic(struct PokenavSub14 *); -static void SlideMonSpriteOff(struct PokenavSub14 *); -static void SlideMonSpriteOn(struct PokenavSub14 *); -static void AddRibbonCountWindow(struct PokenavSub14 *); -static void CreateBigRibbonSprite(struct PokenavSub14 *); -static void AddRibbonSummaryMonNameWindow(struct PokenavSub14 *); -static void DrawAllRibbonsSmall(struct PokenavSub14 *); -static bool32 IsRibbonAnimating(struct PokenavSub14 *); -static bool32 IsMonSpriteAnimating(struct PokenavSub14 *); -static void GetMonRibbons(struct PokenavSub13 *); -static u32 HandleExpandedRibbonInput(struct PokenavSub13 *); -static u32 RibbonsSummaryHandleInput(struct PokenavSub13 *); -static u32 ReturnToRibbonsListFromSummary(struct PokenavSub13 *); -static bool32 TrySelectRibbonUp(struct PokenavSub13 *); -static bool32 TrySelectRibbonRight(struct PokenavSub13 *); -static bool32 TrySelectRibbonLeft(struct PokenavSub13 *); -static bool32 TrySelectRibbonDown(struct PokenavSub13 *); +static void PrintCurrentMonRibbonCount(struct Pokenav_RibbonsSummaryMenu *); +static void PrintRibbbonsSummaryMonInfo(struct Pokenav_RibbonsSummaryMenu *); +static void PrintRibbonsMonListIndex(struct Pokenav_RibbonsSummaryMenu *); +static void ZoomOutSelectedRibbon(struct Pokenav_RibbonsSummaryMenu *); +static void UpdateAndZoomInSelectedRibbon(struct Pokenav_RibbonsSummaryMenu *); +static void PrintRibbonNameAndDescription(struct Pokenav_RibbonsSummaryMenu *); +static void ResetSpritesAndDrawMonFrontPic(struct Pokenav_RibbonsSummaryMenu *); +static void AddRibbonListIndexWindow(struct Pokenav_RibbonsSummaryMenu *); +static void DestroyRibbonsMonFrontPic(struct Pokenav_RibbonsSummaryMenu *); +static void SlideMonSpriteOff(struct Pokenav_RibbonsSummaryMenu *); +static void SlideMonSpriteOn(struct Pokenav_RibbonsSummaryMenu *); +static void AddRibbonCountWindow(struct Pokenav_RibbonsSummaryMenu *); +static void CreateBigRibbonSprite(struct Pokenav_RibbonsSummaryMenu *); +static void AddRibbonSummaryMonNameWindow(struct Pokenav_RibbonsSummaryMenu *); +static void DrawAllRibbonsSmall(struct Pokenav_RibbonsSummaryMenu *); +static bool32 IsRibbonAnimating(struct Pokenav_RibbonsSummaryMenu *); +static bool32 IsMonSpriteAnimating(struct Pokenav_RibbonsSummaryMenu *); +static void GetMonRibbons(struct Pokenav_RibbonsSummaryList *); +static u32 HandleExpandedRibbonInput(struct Pokenav_RibbonsSummaryList *); +static u32 RibbonsSummaryHandleInput(struct Pokenav_RibbonsSummaryList *); +static u32 ReturnToRibbonsListFromSummary(struct Pokenav_RibbonsSummaryList *); +static bool32 TrySelectRibbonUp(struct Pokenav_RibbonsSummaryList *); +static bool32 TrySelectRibbonRight(struct Pokenav_RibbonsSummaryList *); +static bool32 TrySelectRibbonLeft(struct Pokenav_RibbonsSummaryList *); +static bool32 TrySelectRibbonDown(struct Pokenav_RibbonsSummaryList *); static bool32 GetCurrentLoopedTaskActive(void); static u32 GetRibbonsSummaryCurrentIndex(void); static u32 GetRibbonsSummaryMonListCount(void); @@ -186,16 +186,16 @@ static const LoopedTask sRibbonsSummaryMenuLoopTaskFuncs[] = bool32 PokenavCallback_Init_RibbonsSummaryMenu(void) { - struct PokenavSub13 *structPtr = AllocSubstruct(POKENAV_SUBSTRUCT_RIBBONS_SUMMARY_LIST, sizeof(struct PokenavSub13)); - if (structPtr == NULL) + struct Pokenav_RibbonsSummaryList *list = AllocSubstruct(POKENAV_SUBSTRUCT_RIBBONS_SUMMARY_LIST, sizeof(struct Pokenav_RibbonsSummaryList)); + if (list == NULL) return FALSE; - structPtr->monList = GetSubstructPtr(POKENAV_SUBSTRUCT_MON_LIST); - if (structPtr->monList == NULL) + list->monList = GetSubstructPtr(POKENAV_SUBSTRUCT_MON_LIST); + if (list->monList == NULL) return FALSE; - GetMonRibbons(structPtr); - structPtr->callback = RibbonsSummaryHandleInput; + GetMonRibbons(list); + list->callback = RibbonsSummaryHandleInput; gKeyRepeatContinueDelay = 3; gKeyRepeatStartDelay = 10; return TRUE; @@ -203,8 +203,8 @@ bool32 PokenavCallback_Init_RibbonsSummaryMenu(void) u32 GetRibbonsSummaryMenuCallback(void) { - struct PokenavSub13 *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_RIBBONS_SUMMARY_LIST); - return structPtr->callback(structPtr); + struct Pokenav_RibbonsSummaryList *list = GetSubstructPtr(POKENAV_SUBSTRUCT_RIBBONS_SUMMARY_LIST); + return list->callback(list); } void FreeRibbonsSummaryScreen1(void) @@ -213,150 +213,150 @@ void FreeRibbonsSummaryScreen1(void) } // Handles input when a specific ribbon is not currently selected -static u32 RibbonsSummaryHandleInput(struct PokenavSub13 *structPtr) +static u32 RibbonsSummaryHandleInput(struct Pokenav_RibbonsSummaryList *list) { // Handle Up/Down movement to select a new Pokémon to show ribbons for - if (JOY_REPEAT(DPAD_UP) && structPtr->monList->currIndex != 0) + if (JOY_REPEAT(DPAD_UP) && list->monList->currIndex != 0) { - structPtr->monList->currIndex--; - structPtr->selectedPos = 0; - GetMonRibbons(structPtr); + list->monList->currIndex--; + list->selectedPos = 0; + GetMonRibbons(list); return RIBBONS_SUMMARY_FUNC_SWITCH_MONS; } - if (JOY_REPEAT(DPAD_DOWN) && structPtr->monList->currIndex < structPtr->monList->listCount - 1) + if (JOY_REPEAT(DPAD_DOWN) && list->monList->currIndex < list->monList->listCount - 1) { - structPtr->monList->currIndex++; - structPtr->selectedPos = 0; - GetMonRibbons(structPtr); + list->monList->currIndex++; + list->selectedPos = 0; + GetMonRibbons(list); return RIBBONS_SUMMARY_FUNC_SWITCH_MONS; } if (JOY_NEW(A_BUTTON)) { // Enter ribbon selection - structPtr->callback = HandleExpandedRibbonInput; + list->callback = HandleExpandedRibbonInput; return RIBBONS_SUMMARY_FUNC_SELECT_RIBBON; } if (JOY_NEW(B_BUTTON)) { // Exit ribbon summary menu - structPtr->callback = ReturnToRibbonsListFromSummary; + list->callback = ReturnToRibbonsListFromSummary; return RIBBONS_SUMMARY_FUNC_EXIT; } return RIBBONS_SUMMARY_FUNC_NONE; } // Handles input when a ribbon is selected -static u32 HandleExpandedRibbonInput(struct PokenavSub13 *structPtr) +static u32 HandleExpandedRibbonInput(struct Pokenav_RibbonsSummaryList *list) { // Handle movement while a ribbon is selected - if (JOY_REPEAT(DPAD_UP) && TrySelectRibbonUp(structPtr)) + if (JOY_REPEAT(DPAD_UP) && TrySelectRibbonUp(list)) return RIBBONS_SUMMARY_FUNC_EXPANDED_CURSOR_MOVE; - if (JOY_REPEAT(DPAD_DOWN) && TrySelectRibbonDown(structPtr)) + if (JOY_REPEAT(DPAD_DOWN) && TrySelectRibbonDown(list)) return RIBBONS_SUMMARY_FUNC_EXPANDED_CURSOR_MOVE; - if (JOY_REPEAT(DPAD_LEFT) && TrySelectRibbonLeft(structPtr)) + if (JOY_REPEAT(DPAD_LEFT) && TrySelectRibbonLeft(list)) return RIBBONS_SUMMARY_FUNC_EXPANDED_CURSOR_MOVE; - if (JOY_REPEAT(DPAD_RIGHT) && TrySelectRibbonRight(structPtr)) + if (JOY_REPEAT(DPAD_RIGHT) && TrySelectRibbonRight(list)) return RIBBONS_SUMMARY_FUNC_EXPANDED_CURSOR_MOVE; if (JOY_NEW(B_BUTTON)) { // Exit ribbon selection - structPtr->callback = RibbonsSummaryHandleInput; + list->callback = RibbonsSummaryHandleInput; return RIBBONS_SUMMARY_FUNC_EXPANDED_CANCEL; } return RIBBONS_SUMMARY_FUNC_NONE; } -static u32 ReturnToRibbonsListFromSummary(struct PokenavSub13 *structPtr) +static u32 ReturnToRibbonsListFromSummary(struct Pokenav_RibbonsSummaryList *list) { return POKENAV_RIBBONS_RETURN_TO_MON_LIST; } -static bool32 TrySelectRibbonUp(struct PokenavSub13 *structPtr) +static bool32 TrySelectRibbonUp(struct Pokenav_RibbonsSummaryList *list) { - if (structPtr->selectedPos < FIRST_GIFT_RIBBON) + if (list->selectedPos < FIRST_GIFT_RIBBON) { // In normal ribbons, try to move up a row - if (structPtr->selectedPos < RIBBONS_PER_ROW) + if (list->selectedPos < RIBBONS_PER_ROW) return FALSE; - structPtr->selectedPos -= RIBBONS_PER_ROW; + list->selectedPos -= RIBBONS_PER_ROW; return TRUE; } - if (structPtr->numNormalRibbons != 0) + if (list->numNormalRibbons != 0) { // In gift ribbons, try to move up into normal ribbons // If there's > 1 row of gift ribbons (not normally possible) // it's impossible to move up between them - u32 ribbonPos = structPtr->selectedPos - GIFT_RIBBON_START_POS; - structPtr->selectedPos = ribbonPos + structPtr->normalRibbonLastRowStart; - if (structPtr->selectedPos >= structPtr->numNormalRibbons) - structPtr->selectedPos = structPtr->numNormalRibbons - 1; + u32 ribbonPos = list->selectedPos - GIFT_RIBBON_START_POS; + list->selectedPos = ribbonPos + list->normalRibbonLastRowStart; + if (list->selectedPos >= list->numNormalRibbons) + list->selectedPos = list->numNormalRibbons - 1; return TRUE; } return FALSE; } -static bool32 TrySelectRibbonDown(struct PokenavSub13 *structPtr) +static bool32 TrySelectRibbonDown(struct Pokenav_RibbonsSummaryList *list) { - if (structPtr->selectedPos >= FIRST_GIFT_RIBBON) + if (list->selectedPos >= FIRST_GIFT_RIBBON) return FALSE; - if (structPtr->selectedPos < structPtr->normalRibbonLastRowStart) + if (list->selectedPos < list->normalRibbonLastRowStart) { // Not in last row of normal ribbons, advance to next row - structPtr->selectedPos += RIBBONS_PER_ROW; - if (structPtr->selectedPos >= structPtr->numNormalRibbons) - structPtr->selectedPos = structPtr->numNormalRibbons - 1; + list->selectedPos += RIBBONS_PER_ROW; + if (list->selectedPos >= list->numNormalRibbons) + list->selectedPos = list->numNormalRibbons - 1; return TRUE; } - if (structPtr->numGiftRibbons != 0) + if (list->numGiftRibbons != 0) { // In/beyond last of row of normal ribbons and gift ribbons present, move down to gift ribbon row - int ribbonPos = structPtr->selectedPos - structPtr->normalRibbonLastRowStart; - if (ribbonPos >= structPtr->numGiftRibbons) - ribbonPos = structPtr->numGiftRibbons - 1; + int ribbonPos = list->selectedPos - list->normalRibbonLastRowStart; + if (ribbonPos >= list->numGiftRibbons) + ribbonPos = list->numGiftRibbons - 1; - structPtr->selectedPos = ribbonPos + GIFT_RIBBON_START_POS; + list->selectedPos = ribbonPos + GIFT_RIBBON_START_POS; return TRUE; } return FALSE; } -static bool32 TrySelectRibbonLeft(struct PokenavSub13 *structPtr) +static bool32 TrySelectRibbonLeft(struct Pokenav_RibbonsSummaryList *list) { - u16 column = structPtr->selectedPos % RIBBONS_PER_ROW; + u16 column = list->selectedPos % RIBBONS_PER_ROW; if (column != 0) { - structPtr->selectedPos--; + list->selectedPos--; return TRUE; } return FALSE; } -static bool32 TrySelectRibbonRight(struct PokenavSub13 *structPtr) +static bool32 TrySelectRibbonRight(struct Pokenav_RibbonsSummaryList *list) { - int column = structPtr->selectedPos % RIBBONS_PER_ROW; + int column = list->selectedPos % RIBBONS_PER_ROW; if (column >= RIBBONS_PER_ROW - 1) return FALSE; - if (structPtr->selectedPos < GIFT_RIBBON_START_POS) + if (list->selectedPos < GIFT_RIBBON_START_POS) { // Move right in normal ribbon row - if (structPtr->selectedPos < structPtr->numNormalRibbons - 1) + if (list->selectedPos < list->numNormalRibbons - 1) { - structPtr->selectedPos++; + list->selectedPos++; return TRUE; } } else { // Move right in gift ribbon row - if (column < structPtr->numGiftRibbons - 1) + if (column < list->numGiftRibbons - 1) { - structPtr->selectedPos++; + list->selectedPos++; return TRUE; } } @@ -365,21 +365,21 @@ static bool32 TrySelectRibbonRight(struct PokenavSub13 *structPtr) static u32 GetRibbonsSummaryCurrentIndex(void) { - struct PokenavSub13 *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_RIBBONS_SUMMARY_LIST); - return structPtr->monList->currIndex; + struct Pokenav_RibbonsSummaryList *list = GetSubstructPtr(POKENAV_SUBSTRUCT_RIBBONS_SUMMARY_LIST); + return list->monList->currIndex; } static u32 GetRibbonsSummaryMonListCount(void) { - struct PokenavSub13 *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_RIBBONS_SUMMARY_LIST); - return structPtr->monList->listCount; + struct Pokenav_RibbonsSummaryList *list = GetSubstructPtr(POKENAV_SUBSTRUCT_RIBBONS_SUMMARY_LIST); + return list->monList->listCount; } static void GetMonNicknameLevelGender(u8 *nick, u8 *level, u8 *gender) { - struct PokenavSub13 *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_RIBBONS_SUMMARY_LIST); - struct PokenavSub18 *mons = structPtr->monList; - struct PokenavMonList *monInfo = &mons->monData[mons->currIndex]; + struct Pokenav_RibbonsSummaryList *list = GetSubstructPtr(POKENAV_SUBSTRUCT_RIBBONS_SUMMARY_LIST); + struct PokenavMonList *mons = list->monList; + struct PokenavMonListItem *monInfo = &mons->monData[mons->currIndex]; if (monInfo->boxId == TOTAL_BOXES_COUNT) { @@ -402,9 +402,9 @@ static void GetMonNicknameLevelGender(u8 *nick, u8 *level, u8 *gender) static void GetMonSpeciesPersonalityOtId(u16 *species, u32 *personality, u32 *otId) { - struct PokenavSub13 *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_RIBBONS_SUMMARY_LIST); - struct PokenavSub18 *mons = structPtr->monList; - struct PokenavMonList *monInfo = &mons->monData[mons->currIndex]; + struct Pokenav_RibbonsSummaryList *list = GetSubstructPtr(POKENAV_SUBSTRUCT_RIBBONS_SUMMARY_LIST); + struct PokenavMonList *mons = list->monList; + struct PokenavMonListItem *monInfo = &mons->monData[mons->currIndex]; if (monInfo->boxId == TOTAL_BOXES_COUNT) { @@ -426,9 +426,9 @@ static void GetMonSpeciesPersonalityOtId(u16 *species, u32 *personality, u32 *ot static u32 GetCurrMonRibbonCount(void) { - struct PokenavSub13 *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_RIBBONS_SUMMARY_LIST); - struct PokenavSub18 *mons = structPtr->monList; - struct PokenavMonList *monInfo = &mons->monData[mons->currIndex]; + struct Pokenav_RibbonsSummaryList *list = GetSubstructPtr(POKENAV_SUBSTRUCT_RIBBONS_SUMMARY_LIST); + struct PokenavMonList *mons = list->monList; + struct PokenavMonListItem *monInfo = &mons->monData[mons->currIndex]; if (monInfo->boxId == TOTAL_BOXES_COUNT) return GetMonData(&gPlayerParty[monInfo->monId], MON_DATA_RIBBON_COUNT); @@ -436,20 +436,20 @@ static u32 GetCurrMonRibbonCount(void) return GetBoxMonDataAt(monInfo->boxId, monInfo->monId, MON_DATA_RIBBON_COUNT); } -static void GetMonRibbons(struct PokenavSub13 *structPtr) +static void GetMonRibbons(struct Pokenav_RibbonsSummaryList *list) { u32 ribbonFlags; s32 i, j; - struct PokenavSub18 *mons = structPtr->monList; - struct PokenavMonList *monInfo = &mons->monData[mons->currIndex]; + struct PokenavMonList *mons = list->monList; + struct PokenavMonListItem *monInfo = &mons->monData[mons->currIndex]; if (monInfo->boxId == TOTAL_BOXES_COUNT) ribbonFlags = GetMonData(&gPlayerParty[monInfo->monId], MON_DATA_RIBBONS); else ribbonFlags = GetBoxMonDataAt(monInfo->boxId, monInfo->monId, MON_DATA_RIBBONS); - structPtr->numNormalRibbons = 0; - structPtr->numGiftRibbons = 0; + list->numNormalRibbons = 0; + list->numGiftRibbons = 0; for (i = 0; i < ARRAY_COUNT(sRibbonData); i++) { // For all non-contest ribbons, numRibbons will be 1 if they have it, 0 if they don't @@ -458,119 +458,119 @@ static void GetMonRibbons(struct PokenavSub13 *structPtr) if (!sRibbonData[i].isGiftRibbon) { for (j = 0; j < numRibbons; j++) - structPtr->ribbonIds[structPtr->numNormalRibbons++] = sRibbonData[i].ribbonId + j; + list->ribbonIds[list->numNormalRibbons++] = sRibbonData[i].ribbonId + j; } else { for (j = 0; j < numRibbons; j++) - structPtr->giftRibbonIds[structPtr->numGiftRibbons++] = sRibbonData[i].ribbonId + j; + list->giftRibbonIds[list->numGiftRibbons++] = sRibbonData[i].ribbonId + j; } ribbonFlags >>= sRibbonData[i].numBits; } - if (structPtr->numNormalRibbons != 0) + if (list->numNormalRibbons != 0) { - structPtr->normalRibbonLastRowStart = ((structPtr->numNormalRibbons - 1) / RIBBONS_PER_ROW) * RIBBONS_PER_ROW; - structPtr->selectedPos = 0; + list->normalRibbonLastRowStart = ((list->numNormalRibbons - 1) / RIBBONS_PER_ROW) * RIBBONS_PER_ROW; + list->selectedPos = 0; } else { // There are no normal ribbons, move cursor to first gift ribbon - structPtr->normalRibbonLastRowStart = 0; - structPtr->selectedPos = GIFT_RIBBON_START_POS; + list->normalRibbonLastRowStart = 0; + list->selectedPos = GIFT_RIBBON_START_POS; } } static u32 *GetNormalRibbonIds(u32 *size) { - struct PokenavSub13 *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_RIBBONS_SUMMARY_LIST); - *size = structPtr->numNormalRibbons; - return structPtr->ribbonIds; + struct Pokenav_RibbonsSummaryList *list = GetSubstructPtr(POKENAV_SUBSTRUCT_RIBBONS_SUMMARY_LIST); + *size = list->numNormalRibbons; + return list->ribbonIds; } static u32 *GetGiftRibbonIds(u32 *size) { - struct PokenavSub13 *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_RIBBONS_SUMMARY_LIST); - *size = structPtr->numGiftRibbons; - return structPtr->giftRibbonIds; + struct Pokenav_RibbonsSummaryList *list = GetSubstructPtr(POKENAV_SUBSTRUCT_RIBBONS_SUMMARY_LIST); + *size = list->numGiftRibbons; + return list->giftRibbonIds; } static u16 GetSelectedPosition(void) { - struct PokenavSub13 *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_RIBBONS_SUMMARY_LIST); - return structPtr->selectedPos; + struct Pokenav_RibbonsSummaryList *list = GetSubstructPtr(POKENAV_SUBSTRUCT_RIBBONS_SUMMARY_LIST); + return list->selectedPos; } static u32 GetRibbonId(void) { - struct PokenavSub13 *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_RIBBONS_SUMMARY_LIST); - int ribbonPos = structPtr->selectedPos; + struct Pokenav_RibbonsSummaryList *list = GetSubstructPtr(POKENAV_SUBSTRUCT_RIBBONS_SUMMARY_LIST); + int ribbonPos = list->selectedPos; if (ribbonPos < FIRST_GIFT_RIBBON) - return structPtr->ribbonIds[ribbonPos]; + return list->ribbonIds[ribbonPos]; else - return structPtr->giftRibbonIds[ribbonPos - GIFT_RIBBON_START_POS]; + return list->giftRibbonIds[ribbonPos - GIFT_RIBBON_START_POS]; } bool32 OpenRibbonsSummaryMenu(void) { - struct PokenavSub14 *structPtr = AllocSubstruct(POKENAV_SUBSTRUCT_RIBBONS_SUMMARY_MENU, sizeof(struct PokenavSub14)); - if (structPtr == NULL) + struct Pokenav_RibbonsSummaryMenu *menu = AllocSubstruct(POKENAV_SUBSTRUCT_RIBBONS_SUMMARY_MENU, sizeof(struct Pokenav_RibbonsSummaryMenu)); + if (menu == NULL) return FALSE; - structPtr->loopedTaskId = CreateLoopedTask(LoopedTask_OpenRibbonsSummaryMenu, 1); - structPtr->callback = GetCurrentLoopedTaskActive; + menu->loopedTaskId = CreateLoopedTask(LoopedTask_OpenRibbonsSummaryMenu, 1); + menu->callback = GetCurrentLoopedTaskActive; return TRUE; } void CreateRibbonsSummaryLoopedTask(s32 id) { - struct PokenavSub14 *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_RIBBONS_SUMMARY_MENU); - structPtr->loopedTaskId = CreateLoopedTask(sRibbonsSummaryMenuLoopTaskFuncs[id], 1); - structPtr->callback = GetCurrentLoopedTaskActive; + struct Pokenav_RibbonsSummaryMenu *menu = GetSubstructPtr(POKENAV_SUBSTRUCT_RIBBONS_SUMMARY_MENU); + menu->loopedTaskId = CreateLoopedTask(sRibbonsSummaryMenuLoopTaskFuncs[id], 1); + menu->callback = GetCurrentLoopedTaskActive; } u32 IsRibbonsSummaryLoopedTaskActive(void) { - struct PokenavSub14 *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_RIBBONS_SUMMARY_MENU); - return structPtr->callback(); + struct Pokenav_RibbonsSummaryMenu *menu = GetSubstructPtr(POKENAV_SUBSTRUCT_RIBBONS_SUMMARY_MENU); + return menu->callback(); } void FreeRibbonsSummaryScreen2(void) { - struct PokenavSub14 *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_RIBBONS_SUMMARY_MENU); - RemoveWindow(structPtr->ribbonCountWindowId); - RemoveWindow(structPtr->nameWindowId); - RemoveWindow(structPtr->listIdxWindowId); + struct Pokenav_RibbonsSummaryMenu *menu = GetSubstructPtr(POKENAV_SUBSTRUCT_RIBBONS_SUMMARY_MENU); + RemoveWindow(menu->ribbonCountWindowId); + RemoveWindow(menu->nameWindowId); + RemoveWindow(menu->listIdxWindowId); #ifndef BUGFIX - RemoveWindow(structPtr->unusedWindowId); // Removing window, but window id is never set + RemoveWindow(menu->unusedWindowId); // Removing window, but window id is never set #endif - DestroyRibbonsMonFrontPic(structPtr); + DestroyRibbonsMonFrontPic(menu); FreeSpriteTilesByTag(GFXTAG_RIBBON_ICONS_BIG); FreeSpritePaletteByTag(PALTAG_RIBBON_ICONS_1); FreeSpritePaletteByTag(PALTAG_RIBBON_ICONS_2); FreeSpritePaletteByTag(PALTAG_RIBBON_ICONS_3); FreeSpritePaletteByTag(PALTAG_RIBBON_ICONS_4); FreeSpritePaletteByTag(PALTAG_RIBBON_ICONS_5); - FreeSpriteOamMatrix(structPtr->bigRibbonSprite); - DestroySprite(structPtr->bigRibbonSprite); + FreeSpriteOamMatrix(menu->bigRibbonSprite); + DestroySprite(menu->bigRibbonSprite); FreePokenavSubstruct(POKENAV_SUBSTRUCT_RIBBONS_SUMMARY_MENU); } static bool32 GetCurrentLoopedTaskActive(void) { - struct PokenavSub14 *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_RIBBONS_SUMMARY_MENU); - return IsLoopedTaskActive(structPtr->loopedTaskId); + struct Pokenav_RibbonsSummaryMenu *menu = GetSubstructPtr(POKENAV_SUBSTRUCT_RIBBONS_SUMMARY_MENU); + return IsLoopedTaskActive(menu->loopedTaskId); } static u32 LoopedTask_OpenRibbonsSummaryMenu(s32 state) { - struct PokenavSub14 *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_RIBBONS_SUMMARY_MENU); + struct Pokenav_RibbonsSummaryMenu *menu = GetSubstructPtr(POKENAV_SUBSTRUCT_RIBBONS_SUMMARY_MENU); switch (state) { case 0: InitBgTemplates(sBgTemplates, ARRAY_COUNT(sBgTemplates)); DecompressAndCopyTileDataToVram(2, gPokenavRibbonsSummaryBg_Gfx, 0, 0, 0); - SetBgTilemapBuffer(2, structPtr->tilemapBuffers[0]); + SetBgTilemapBuffer(2, menu->tilemapBuffers[0]); CopyToBgTilemapBuffer(2, gPokenavRibbonsSummaryBg_Tilemap, 0, 0); CopyPaletteIntoBufferUnfaded(gPokenavRibbonsSummaryBg_Pal, 0x10, 0x20); CopyBgTilemapBufferToVram(2); @@ -580,7 +580,7 @@ static u32 LoopedTask_OpenRibbonsSummaryMenu(s32 state) { BgDmaFill(1, 0, 0, 1); DecompressAndCopyTileDataToVram(1, sRibbonIconsSmall_Gfx, 0, 1, 0); - SetBgTilemapBuffer(1, structPtr->tilemapBuffers[1]); + SetBgTilemapBuffer(1, menu->tilemapBuffers[1]); FillBgTilemapBufferRect_Palette0(1, 0, 0, 0, 32, 20); CopyPaletteIntoBufferUnfaded(sRibbonIcons1_Pal, 0x20, 0xA0); CopyPaletteIntoBufferUnfaded(sMonInfo_Pal, 0xA0, 0x20); @@ -591,21 +591,21 @@ static u32 LoopedTask_OpenRibbonsSummaryMenu(s32 state) case 2: if (!FreeTempTileDataBuffersIfPossible()) { - AddRibbonCountWindow(structPtr); + AddRibbonCountWindow(menu); return LT_INC_AND_PAUSE; } return LT_PAUSE; case 3: if (!FreeTempTileDataBuffersIfPossible()) { - AddRibbonSummaryMonNameWindow(structPtr); + AddRibbonSummaryMonNameWindow(menu); return LT_INC_AND_PAUSE; } return LT_PAUSE; case 4: if (!FreeTempTileDataBuffersIfPossible()) { - AddRibbonListIndexWindow(structPtr); + AddRibbonListIndexWindow(menu); return LT_INC_AND_PAUSE; } return LT_PAUSE; @@ -619,18 +619,18 @@ static u32 LoopedTask_OpenRibbonsSummaryMenu(s32 state) case 6: if (!IsDma3ManagerBusyWithBgCopy()) { - ResetSpritesAndDrawMonFrontPic(structPtr); + ResetSpritesAndDrawMonFrontPic(menu); return LT_INC_AND_CONTINUE; } return LT_PAUSE; case 7: - DrawAllRibbonsSmall(structPtr); + DrawAllRibbonsSmall(menu); PrintHelpBarText(HELPBAR_RIBBONS_LIST); return LT_INC_AND_PAUSE; case 8: if (!IsDma3ManagerBusyWithBgCopy()) { - CreateBigRibbonSprite(structPtr); + CreateBigRibbonSprite(menu); ChangeBgX(1, 0, BG_COORD_SET); ChangeBgY(1, 0, BG_COORD_SET); ChangeBgX(2, 0, BG_COORD_SET); @@ -638,7 +638,7 @@ static u32 LoopedTask_OpenRibbonsSummaryMenu(s32 state) ShowBg(1); ShowBg(2); HideBg(3); - PokenavFadeScreen(1); + PokenavFadeScreen(POKENAV_FADE_FROM_BLACK); return LT_INC_AND_PAUSE; } return LT_PAUSE; @@ -655,7 +655,7 @@ static u32 LoopedTask_ExitRibbonsSummaryMenu(s32 state) { case 0: PlaySE(SE_SELECT); - PokenavFadeScreen(0); + PokenavFadeScreen(POKENAV_FADE_TO_BLACK); return LT_INC_AND_PAUSE; case 1: if (IsPaletteFadeActive()) @@ -667,38 +667,38 @@ static u32 LoopedTask_ExitRibbonsSummaryMenu(s32 state) static u32 LoopedTask_SwitchRibbonsSummaryMon(s32 state) { - struct PokenavSub14 *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_RIBBONS_SUMMARY_MENU); + struct Pokenav_RibbonsSummaryMenu *menu = GetSubstructPtr(POKENAV_SUBSTRUCT_RIBBONS_SUMMARY_MENU); switch (state) { case 0: PlaySE(SE_SELECT); - SlideMonSpriteOff(structPtr); + SlideMonSpriteOff(menu); return LT_INC_AND_PAUSE; case 1: - if (!IsMonSpriteAnimating(structPtr)) + if (!IsMonSpriteAnimating(menu)) { - PrintRibbbonsSummaryMonInfo(structPtr); + PrintRibbbonsSummaryMonInfo(menu); return LT_INC_AND_CONTINUE; } return LT_PAUSE; case 2: - DrawAllRibbonsSmall(structPtr); + DrawAllRibbonsSmall(menu); return LT_INC_AND_CONTINUE; case 3: - PrintRibbonsMonListIndex(structPtr); + PrintRibbonsMonListIndex(menu); return LT_INC_AND_CONTINUE; case 4: - PrintCurrentMonRibbonCount(structPtr); + PrintCurrentMonRibbonCount(menu); return LT_INC_AND_CONTINUE; case 5: if (!IsDma3ManagerBusyWithBgCopy()) { - SlideMonSpriteOn(structPtr); + SlideMonSpriteOn(menu); return LT_INC_AND_PAUSE; } return LT_PAUSE; case 6: - if (IsMonSpriteAnimating(structPtr)) + if (IsMonSpriteAnimating(menu)) return LT_PAUSE; } return LT_FINISH; @@ -706,17 +706,17 @@ static u32 LoopedTask_SwitchRibbonsSummaryMon(s32 state) static u32 LoopedTask_ExpandSelectedRibbon(s32 state) { - struct PokenavSub14 *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_RIBBONS_SUMMARY_MENU); + struct Pokenav_RibbonsSummaryMenu *menu = GetSubstructPtr(POKENAV_SUBSTRUCT_RIBBONS_SUMMARY_MENU); switch (state) { case 0: PlaySE(SE_SELECT); - UpdateAndZoomInSelectedRibbon(structPtr); + UpdateAndZoomInSelectedRibbon(menu); return LT_INC_AND_PAUSE; case 1: - if (!IsRibbonAnimating(structPtr)) + if (!IsRibbonAnimating(menu)) { - PrintRibbonNameAndDescription(structPtr); + PrintRibbonNameAndDescription(menu); PrintHelpBarText(HELPBAR_RIBBONS_CHECK); return LT_INC_AND_PAUSE; } @@ -730,24 +730,24 @@ static u32 LoopedTask_ExpandSelectedRibbon(s32 state) static u32 LoopedTask_MoveRibbonsCursorExpanded(s32 state) { - struct PokenavSub14 *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_RIBBONS_SUMMARY_MENU); + struct Pokenav_RibbonsSummaryMenu *menu = GetSubstructPtr(POKENAV_SUBSTRUCT_RIBBONS_SUMMARY_MENU); switch (state) { case 0: PlaySE(SE_SELECT); - ZoomOutSelectedRibbon(structPtr); + ZoomOutSelectedRibbon(menu); return LT_INC_AND_PAUSE; case 1: - if (!IsRibbonAnimating(structPtr)) + if (!IsRibbonAnimating(menu)) { - UpdateAndZoomInSelectedRibbon(structPtr); + UpdateAndZoomInSelectedRibbon(menu); return LT_INC_AND_PAUSE; } return LT_PAUSE; case 2: - if (!IsRibbonAnimating(structPtr)) + if (!IsRibbonAnimating(menu)) { - PrintRibbonNameAndDescription(structPtr); + PrintRibbonNameAndDescription(menu); return LT_INC_AND_PAUSE; } return LT_PAUSE; @@ -760,17 +760,17 @@ static u32 LoopedTask_MoveRibbonsCursorExpanded(s32 state) static u32 LoopedTask_ShrinkExpandedRibbon(s32 state) { - struct PokenavSub14 *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_RIBBONS_SUMMARY_MENU); + struct Pokenav_RibbonsSummaryMenu *menu = GetSubstructPtr(POKENAV_SUBSTRUCT_RIBBONS_SUMMARY_MENU); switch (state) { case 0: PlaySE(SE_SELECT); - ZoomOutSelectedRibbon(structPtr); + ZoomOutSelectedRibbon(menu); return LT_INC_AND_PAUSE; case 1: - if (!IsRibbonAnimating(structPtr)) + if (!IsRibbonAnimating(menu)) { - PrintCurrentMonRibbonCount(structPtr); + PrintCurrentMonRibbonCount(menu); PrintHelpBarText(HELPBAR_RIBBONS_LIST); return LT_INC_AND_PAUSE; } @@ -793,14 +793,14 @@ static const struct WindowTemplate sRibbonCountWindowTemplate = .baseBlock = 0x14, }; -static void AddRibbonCountWindow(struct PokenavSub14 *structPtr) +static void AddRibbonCountWindow(struct Pokenav_RibbonsSummaryMenu *menu) { - structPtr->ribbonCountWindowId = AddWindow(&sRibbonCountWindowTemplate); - PutWindowTilemap(structPtr->ribbonCountWindowId); - PrintCurrentMonRibbonCount(structPtr); + menu->ribbonCountWindowId = AddWindow(&sRibbonCountWindowTemplate); + PutWindowTilemap(menu->ribbonCountWindowId); + PrintCurrentMonRibbonCount(menu); } -static void PrintCurrentMonRibbonCount(struct PokenavSub14 *structPtr) +static void PrintCurrentMonRibbonCount(struct Pokenav_RibbonsSummaryMenu *menu) { u8 color[] = {TEXT_COLOR_RED, TEXT_COLOR_DARK_GRAY, TEXT_COLOR_LIGHT_GRAY}; @@ -808,23 +808,23 @@ static void PrintCurrentMonRibbonCount(struct PokenavSub14 *structPtr) DynamicPlaceholderTextUtil_Reset(); DynamicPlaceholderTextUtil_SetPlaceholderPtr(0, gStringVar1); DynamicPlaceholderTextUtil_ExpandPlaceholders(gStringVar4, gText_RibbonsF700); - FillWindowPixelBuffer(structPtr->ribbonCountWindowId, PIXEL_FILL(4)); - AddTextPrinterParameterized3(structPtr->ribbonCountWindowId, FONT_NORMAL, 0, 1, color, TEXT_SKIP_DRAW, gStringVar4); - CopyWindowToVram(structPtr->ribbonCountWindowId, COPYWIN_GFX); + FillWindowPixelBuffer(menu->ribbonCountWindowId, PIXEL_FILL(4)); + AddTextPrinterParameterized3(menu->ribbonCountWindowId, FONT_NORMAL, 0, 1, color, TEXT_SKIP_DRAW, gStringVar4); + CopyWindowToVram(menu->ribbonCountWindowId, COPYWIN_GFX); } -static void PrintRibbonNameAndDescription(struct PokenavSub14 *structPtr) +static void PrintRibbonNameAndDescription(struct Pokenav_RibbonsSummaryMenu *menu) { s32 i; u32 ribbonId = GetRibbonId(); u8 color[] = {TEXT_COLOR_RED, TEXT_COLOR_DARK_GRAY, TEXT_COLOR_LIGHT_GRAY}; - FillWindowPixelBuffer(structPtr->ribbonCountWindowId, PIXEL_FILL(4)); + FillWindowPixelBuffer(menu->ribbonCountWindowId, PIXEL_FILL(4)); if (ribbonId < FIRST_GIFT_RIBBON) { // Print normal ribbon name/description for (i = 0; i < 2; i++) - AddTextPrinterParameterized3(structPtr->ribbonCountWindowId, FONT_NORMAL, 0, (i * 16) + 1, color, TEXT_SKIP_DRAW, gRibbonDescriptionPointers[ribbonId][i]); + AddTextPrinterParameterized3(menu->ribbonCountWindowId, FONT_NORMAL, 0, (i * 16) + 1, color, TEXT_SKIP_DRAW, gRibbonDescriptionPointers[ribbonId][i]); } else { @@ -840,10 +840,10 @@ static void PrintRibbonNameAndDescription(struct PokenavSub14 *structPtr) // Print gift ribbon name/description ribbonId--; for (i = 0; i < 2; i++) - AddTextPrinterParameterized3(structPtr->ribbonCountWindowId, FONT_NORMAL, 0, (i * 16) + 1, color, TEXT_SKIP_DRAW, gGiftRibbonDescriptionPointers[ribbonId][i]); + AddTextPrinterParameterized3(menu->ribbonCountWindowId, FONT_NORMAL, 0, (i * 16) + 1, color, TEXT_SKIP_DRAW, gGiftRibbonDescriptionPointers[ribbonId][i]); } - CopyWindowToVram(structPtr->ribbonCountWindowId, COPYWIN_GFX); + CopyWindowToVram(menu->ribbonCountWindowId, COPYWIN_GFX); } static const struct WindowTemplate sRibbonSummaryMonNameWindowTemplate = @@ -857,23 +857,23 @@ static const struct WindowTemplate sRibbonSummaryMonNameWindowTemplate = .baseBlock = 0x54, }; -static void AddRibbonSummaryMonNameWindow(struct PokenavSub14 *structPtr) +static void AddRibbonSummaryMonNameWindow(struct Pokenav_RibbonsSummaryMenu *menu) { - structPtr->nameWindowId = AddWindow(&sRibbonSummaryMonNameWindowTemplate); - PutWindowTilemap(structPtr->nameWindowId); - PrintRibbbonsSummaryMonInfo(structPtr); + menu->nameWindowId = AddWindow(&sRibbonSummaryMonNameWindowTemplate); + PutWindowTilemap(menu->nameWindowId); + PrintRibbbonsSummaryMonInfo(menu); } static const u8 sMaleIconString[] = _("{COLOR_HIGHLIGHT_SHADOW}{LIGHT_RED}{WHITE}{GREEN}♂{COLOR_HIGHLIGHT_SHADOW}{DARK_GRAY}{WHITE}{LIGHT_GRAY}"); static const u8 sFemaleIconString[] = _("{COLOR_HIGHLIGHT_SHADOW}{LIGHT_GREEN}{WHITE}{BLUE}♀{COLOR_HIGHLIGHT_SHADOW}{DARK_GRAY}{WHITE}{LIGHT_GRAY}"); static const u8 sGenderlessIconString[] = _("{UNK_SPACER}"); -static void PrintRibbbonsSummaryMonInfo(struct PokenavSub14 *structPtr) +static void PrintRibbbonsSummaryMonInfo(struct Pokenav_RibbonsSummaryMenu *menu) { const u8 *genderTxt; u8 *txtPtr; u8 level, gender; - u16 windowId = structPtr->nameWindowId; + u16 windowId = menu->nameWindowId; FillWindowPixelBuffer(windowId, PIXEL_FILL(1)); GetMonNicknameLevelGender(gStringVar3, &level, &gender); @@ -914,15 +914,15 @@ static const struct WindowTemplate sRibbonMonListIndexWindowTemplate[] = {}, }; -static void AddRibbonListIndexWindow(struct PokenavSub14 *structPtr) +static void AddRibbonListIndexWindow(struct Pokenav_RibbonsSummaryMenu *menu) { - structPtr->listIdxWindowId = AddWindow(sRibbonMonListIndexWindowTemplate); - FillWindowPixelBuffer(structPtr->listIdxWindowId, PIXEL_FILL(1)); - PutWindowTilemap(structPtr->listIdxWindowId); - PrintRibbonsMonListIndex(structPtr); + menu->listIdxWindowId = AddWindow(sRibbonMonListIndexWindowTemplate); + FillWindowPixelBuffer(menu->listIdxWindowId, PIXEL_FILL(1)); + PutWindowTilemap(menu->listIdxWindowId); + PrintRibbonsMonListIndex(menu); } -static void PrintRibbonsMonListIndex(struct PokenavSub14 *structPtr) +static void PrintRibbonsMonListIndex(struct Pokenav_RibbonsSummaryMenu *menu) { s32 x; u8 *txtPtr; @@ -933,24 +933,24 @@ static void PrintRibbonsMonListIndex(struct PokenavSub14 *structPtr) *(txtPtr++) = CHAR_SLASH; ConvertIntToDecimalStringN(txtPtr, count, STR_CONV_MODE_RIGHT_ALIGN, 3); x = GetStringCenterAlignXOffset(FONT_NORMAL, gStringVar1, 56); - AddTextPrinterParameterized(structPtr->listIdxWindowId, FONT_NORMAL, gStringVar1, x, 1, TEXT_SKIP_DRAW, NULL); - CopyWindowToVram(structPtr->listIdxWindowId, COPYWIN_GFX); + AddTextPrinterParameterized(menu->listIdxWindowId, FONT_NORMAL, gStringVar1, x, 1, TEXT_SKIP_DRAW, NULL); + CopyWindowToVram(menu->listIdxWindowId, COPYWIN_GFX); } -static void ResetSpritesAndDrawMonFrontPic(struct PokenavSub14 *structPtr) +static void ResetSpritesAndDrawMonFrontPic(struct Pokenav_RibbonsSummaryMenu *menu) { u16 species; u32 personality, otId; GetMonSpeciesPersonalityOtId(&species, &personality, &otId); ResetAllPicSprites(); - structPtr->monSpriteId = DrawRibbonsMonFrontPic(MON_SPRITE_X_ON, MON_SPRITE_Y); + menu->monSpriteId = DrawRibbonsMonFrontPic(MON_SPRITE_X_ON, MON_SPRITE_Y); PokenavFillPalette(15, 0); } -static void DestroyRibbonsMonFrontPic(struct PokenavSub14 *structPtr) +static void DestroyRibbonsMonFrontPic(struct Pokenav_RibbonsSummaryMenu *menu) { - FreeAndDestroyMonPicSprite(structPtr->monSpriteId); + FreeAndDestroyMonPicSprite(menu->monSpriteId); } // x and y arguments are ignored @@ -967,25 +967,25 @@ static u16 DrawRibbonsMonFrontPic(s32 x, s32 y) return spriteId; } -static void SlideMonSpriteOff(struct PokenavSub14 *structPtr) +static void SlideMonSpriteOff(struct Pokenav_RibbonsSummaryMenu *menu) { - StartMonSpriteSlide(&gSprites[structPtr->monSpriteId], MON_SPRITE_X_ON, MON_SPRITE_X_OFF, 6); + StartMonSpriteSlide(&gSprites[menu->monSpriteId], MON_SPRITE_X_ON, MON_SPRITE_X_OFF, 6); } -static void SlideMonSpriteOn(struct PokenavSub14 *structPtr) +static void SlideMonSpriteOn(struct Pokenav_RibbonsSummaryMenu *menu) { // Switch to new mon sprite - FreeAndDestroyMonPicSprite(structPtr->monSpriteId); - structPtr->monSpriteId = DrawRibbonsMonFrontPic(MON_SPRITE_X_OFF, MON_SPRITE_Y); + FreeAndDestroyMonPicSprite(menu->monSpriteId); + menu->monSpriteId = DrawRibbonsMonFrontPic(MON_SPRITE_X_OFF, MON_SPRITE_Y); // Slide on - StartMonSpriteSlide(&gSprites[structPtr->monSpriteId], MON_SPRITE_X_OFF, MON_SPRITE_X_ON, 6); + StartMonSpriteSlide(&gSprites[menu->monSpriteId], MON_SPRITE_X_OFF, MON_SPRITE_X_ON, 6); } // Is Pokémon summary sprite still sliding off/on -static bool32 IsMonSpriteAnimating(struct PokenavSub14 *structPtr) +static bool32 IsMonSpriteAnimating(struct Pokenav_RibbonsSummaryMenu *menu) { - return (gSprites[structPtr->monSpriteId].callback != SpriteCallbackDummy); + return (gSprites[menu->monSpriteId].callback != SpriteCallbackDummy); } #define sCurrX data[0] @@ -1030,7 +1030,7 @@ static void SpriteCB_MonSpriteSlide(struct Sprite *sprite) #undef sTime #undef sDestX -static void DrawAllRibbonsSmall(struct PokenavSub14 *structPtr) +static void DrawAllRibbonsSmall(struct Pokenav_RibbonsSummaryMenu *menu) { u32 *ribbonIds; @@ -1211,7 +1211,7 @@ static const struct SpriteTemplate sSpriteTemplate_RibbonIconBig = }; // Create dummy sprite to be used for the zoomed in version of the selected ribbon -static void CreateBigRibbonSprite(struct PokenavSub14 *structPtr) +static void CreateBigRibbonSprite(struct Pokenav_RibbonsSummaryMenu *menu) { u8 spriteId; @@ -1219,45 +1219,45 @@ static void CreateBigRibbonSprite(struct PokenavSub14 *structPtr) Pokenav_AllocAndLoadPalettes(sSpritePalettes_RibbonIcons); spriteId = CreateSprite(&sSpriteTemplate_RibbonIconBig, 0, 0, 0); - structPtr->bigRibbonSprite = &gSprites[spriteId]; - structPtr->bigRibbonSprite->invisible = TRUE; + menu->bigRibbonSprite = &gSprites[spriteId]; + menu->bigRibbonSprite->invisible = TRUE; } #define sInvisibleWhenDone data[0] -static void UpdateAndZoomInSelectedRibbon(struct PokenavSub14 *structPtr) +static void UpdateAndZoomInSelectedRibbon(struct Pokenav_RibbonsSummaryMenu *menu) { u32 ribbonId; s32 position = GetSelectedPosition(); s32 x = (position % RIBBONS_PER_ROW) * 16 + 96; s32 y = (position / RIBBONS_PER_ROW) * 16 + 40; - structPtr->bigRibbonSprite->x = x; - structPtr->bigRibbonSprite->y = y; + menu->bigRibbonSprite->x = x; + menu->bigRibbonSprite->y = y; // Set new selected ribbon's gfx data ribbonId = GetRibbonId(); - structPtr->bigRibbonSprite->oam.tileNum = (sRibbonGfxData[ribbonId].tileNumOffset * 16) + GetSpriteTileStartByTag(GFXTAG_RIBBON_ICONS_BIG); - structPtr->bigRibbonSprite->oam.paletteNum = IndexOfSpritePaletteTag(sRibbonGfxData[ribbonId].palNumOffset + PALTAG_RIBBON_ICONS_1); + menu->bigRibbonSprite->oam.tileNum = (sRibbonGfxData[ribbonId].tileNumOffset * 16) + GetSpriteTileStartByTag(GFXTAG_RIBBON_ICONS_BIG); + menu->bigRibbonSprite->oam.paletteNum = IndexOfSpritePaletteTag(sRibbonGfxData[ribbonId].palNumOffset + PALTAG_RIBBON_ICONS_1); // Start zoom in animation - StartSpriteAffineAnim(structPtr->bigRibbonSprite, RIBBONANIM_ZOOM_IN); - structPtr->bigRibbonSprite->invisible = FALSE; - structPtr->bigRibbonSprite->sInvisibleWhenDone = FALSE; - structPtr->bigRibbonSprite->callback = SpriteCB_WaitForRibbonAnimation; + StartSpriteAffineAnim(menu->bigRibbonSprite, RIBBONANIM_ZOOM_IN); + menu->bigRibbonSprite->invisible = FALSE; + menu->bigRibbonSprite->sInvisibleWhenDone = FALSE; + menu->bigRibbonSprite->callback = SpriteCB_WaitForRibbonAnimation; } // Start animation to zoom out of selected ribbon -static void ZoomOutSelectedRibbon(struct PokenavSub14 *structPtr) +static void ZoomOutSelectedRibbon(struct Pokenav_RibbonsSummaryMenu *menu) { - structPtr->bigRibbonSprite->sInvisibleWhenDone = TRUE; - StartSpriteAffineAnim(structPtr->bigRibbonSprite, RIBBONANIM_ZOOM_OUT); - structPtr->bigRibbonSprite->callback = SpriteCB_WaitForRibbonAnimation; + menu->bigRibbonSprite->sInvisibleWhenDone = TRUE; + StartSpriteAffineAnim(menu->bigRibbonSprite, RIBBONANIM_ZOOM_OUT); + menu->bigRibbonSprite->callback = SpriteCB_WaitForRibbonAnimation; } -static bool32 IsRibbonAnimating(struct PokenavSub14 *structPtr) +static bool32 IsRibbonAnimating(struct Pokenav_RibbonsSummaryMenu *menu) { - return (structPtr->bigRibbonSprite->callback != SpriteCallbackDummy); + return (menu->bigRibbonSprite->callback != SpriteCallbackDummy); } static void SpriteCB_WaitForRibbonAnimation(struct Sprite *sprite) diff --git a/src/rayquaza_scene.c b/src/rayquaza_scene.c index 51498fa1d6..5572ef8338 100644 --- a/src/rayquaza_scene.c +++ b/src/rayquaza_scene.c @@ -490,7 +490,7 @@ static const struct SpriteTemplate sSpriteTemplate_DuoFightPre_KyogreDorsalFin = static const struct ScanlineEffectParams sScanlineParams_DuoFight_Clouds = { - .dmaDest = (vu16 *)REG_ADDR_BG1HOFS, + .dmaDest = ®_BG1HOFS, .dmaControl = SCANLINE_EFFECT_DMACNT_16BIT, .initState = 1 }; @@ -3064,7 +3064,7 @@ static void SpriteCB_ChasesAway_Rayquaza(struct Sprite *sprite) ChasesAway_SetRayquazaAnim(sprite, 3, 48, 16); sprite->x2 = 1; gSprites[sprite->sTailSpriteId].x2 = 1; - PlayCry1(SPECIES_RAYQUAZA, 0); + PlayCry_Normal(SPECIES_RAYQUAZA, 0); CreateTask(Task_ChasesAway_AnimateRing, 0); } else diff --git a/src/record_mixing.c b/src/record_mixing.c index f308e5b3df..6efded8388 100644 --- a/src/record_mixing.c +++ b/src/record_mixing.c @@ -1002,11 +1002,11 @@ static void Task_DoRecordMixing(u8 taskId) case 2: // Mixing Ruby/Sapphire records. SetContinueGameWarpStatusToDynamicWarp(); - FullSaveGame(); + WriteSaveBlock2(); task->tState++; break; case 3: - if (CheckSaveFile()) + if (WriteSaveBlock1Sector()) { ClearContinueGameWarpStatus2(); task->tState = 4; @@ -1030,12 +1030,12 @@ static void Task_DoRecordMixing(u8 taskId) case 6: if (!Rfu_SetLinkRecovery(FALSE)) { - CreateTask(Task_LinkSave, 5); + CreateTask(Task_LinkFullSave, 5); task->tState++; } break; - case 7: // wait for Task_LinkSave to finish. - if (!FuncIsActiveTask(Task_LinkSave)) + case 7: // wait for Task_LinkFullSave to finish. + if (!FuncIsActiveTask(Task_LinkFullSave)) { if (gWirelessCommType) { diff --git a/src/recorded_battle.c b/src/recorded_battle.c index e6d5b165b8..fd2b3a06b3 100644 --- a/src/recorded_battle.c +++ b/src/recorded_battle.c @@ -306,14 +306,14 @@ static bool32 IsRecordedBattleSaveValid(struct RecordedBattleSave *save) return TRUE; } -static bool32 RecordedBattleToSave(struct RecordedBattleSave *battleSave, struct RecordedBattleSave *saveSection) +static bool32 RecordedBattleToSave(struct RecordedBattleSave *battleSave, struct RecordedBattleSave *saveSector) { - memset(saveSection, 0, SECTOR_SIZE); - memcpy(saveSection, battleSave, sizeof(*battleSave)); + memset(saveSector, 0, SECTOR_SIZE); + memcpy(saveSector, battleSave, sizeof(*battleSave)); - saveSection->checksum = CalcByteArraySum((void*)(saveSection), sizeof(*saveSection) - 4); + saveSector->checksum = CalcByteArraySum((void*)(saveSector), sizeof(*saveSector) - 4); - if (TryWriteSpecialSaveSection(SECTOR_ID_RECORDED_BATTLE, (void*)(saveSection)) != SAVE_STATUS_OK) + if (TryWriteSpecialSaveSector(SECTOR_ID_RECORDED_BATTLE, (void*)(saveSector)) != SAVE_STATUS_OK) return FALSE; else return TRUE; @@ -477,9 +477,9 @@ bool32 MoveRecordedBattleToSaveData(void) return ret; } -static bool32 TryCopyRecordedBattleSaveData(struct RecordedBattleSave *dst, struct SaveSection *saveBuffer) +static bool32 TryCopyRecordedBattleSaveData(struct RecordedBattleSave *dst, struct SaveSector *saveBuffer) { - if (TryReadSpecialSaveSection(SECTOR_ID_RECORDED_BATTLE, (void*)(saveBuffer)) != SAVE_STATUS_OK) + if (TryReadSpecialSaveSector(SECTOR_ID_RECORDED_BATTLE, (void*)(saveBuffer)) != SAVE_STATUS_OK) return FALSE; memcpy(dst, saveBuffer, sizeof(struct RecordedBattleSave)); @@ -492,7 +492,7 @@ static bool32 TryCopyRecordedBattleSaveData(struct RecordedBattleSave *dst, stru static bool32 CopyRecordedBattleFromSave(struct RecordedBattleSave *dst) { - struct SaveSection *savBuffer = AllocZeroed(sizeof(struct SaveSection)); + struct SaveSector *savBuffer = AllocZeroed(SECTOR_SIZE); bool32 ret = TryCopyRecordedBattleSaveData(dst, savBuffer); Free(savBuffer); diff --git a/src/region_map.c b/src/region_map.c index 021ef7c710..759a26e84a 100644 --- a/src/region_map.c +++ b/src/region_map.c @@ -116,19 +116,18 @@ static void CB_FadeInFlyMap(void); static void CB_HandleFlyMapInput(void); static void CB_ExitFlyMap(void); -// .rodata - -static const u16 sRegionMapCursorPal[] = INCBIN_U16("graphics/pokenav/cursor.gbapal"); -static const u32 sRegionMapCursorSmallGfxLZ[] = INCBIN_U32("graphics/pokenav/cursor_small.4bpp.lz"); -static const u32 sRegionMapCursorLargeGfxLZ[] = INCBIN_U32("graphics/pokenav/cursor_large.4bpp.lz"); +// NOTE: Some of the below graphics are not in graphics/pokenav/region_map +// because porymap expects them to be in their current location. +static const u16 sRegionMapCursorPal[] = INCBIN_U16("graphics/pokenav/region_map/cursor.gbapal"); +static const u32 sRegionMapCursorSmallGfxLZ[] = INCBIN_U32("graphics/pokenav/region_map/cursor_small.4bpp.lz"); +static const u32 sRegionMapCursorLargeGfxLZ[] = INCBIN_U32("graphics/pokenav/region_map/cursor_large.4bpp.lz"); static const u16 sRegionMapBg_Pal[] = INCBIN_U16("graphics/pokenav/region_map.gbapal"); static const u32 sRegionMapBg_GfxLZ[] = INCBIN_U32("graphics/pokenav/region_map.8bpp.lz"); static const u32 sRegionMapBg_TilemapLZ[] = INCBIN_U32("graphics/pokenav/region_map_map.bin.lz"); -static const u16 sRegionMapPlayerIcon_BrendanPal[] = INCBIN_U16("graphics/pokenav/brendan_icon.gbapal"); -static const u8 sRegionMapPlayerIcon_BrendanGfx[] = INCBIN_U8("graphics/pokenav/brendan_icon.4bpp"); -static const u16 sRegionMapPlayerIcon_MayPal[] = INCBIN_U16("graphics/pokenav/may_icon.gbapal"); -static const u8 sRegionMapPlayerIcon_MayGfx[] = INCBIN_U8("graphics/pokenav/may_icon.4bpp"); - +static const u16 sRegionMapPlayerIcon_BrendanPal[] = INCBIN_U16("graphics/pokenav/region_map/brendan_icon.gbapal"); +static const u8 sRegionMapPlayerIcon_BrendanGfx[] = INCBIN_U8("graphics/pokenav/region_map/brendan_icon.4bpp"); +static const u16 sRegionMapPlayerIcon_MayPal[] = INCBIN_U16("graphics/pokenav/region_map/may_icon.gbapal"); +static const u8 sRegionMapPlayerIcon_MayGfx[] = INCBIN_U8("graphics/pokenav/region_map/may_icon.4bpp"); static const u8 sRegionMap_MapSectionLayout[] = INCBIN_U8("graphics/pokenav/region_map_section_layout.bin"); #include "data/region_map/region_map_entries.h" @@ -283,15 +282,11 @@ static const u8 sMapSecIdsOffMap[] = MAPSEC_NAVEL_ROCK }; -static const u16 sRegionMapFramePal[] = INCBIN_U16("graphics/pokenav/map_frame.gbapal"); - -static const u32 sRegionMapFrameGfxLZ[] = INCBIN_U32("graphics/pokenav/map_frame.4bpp.lz"); - -static const u32 sRegionMapFrameTilemapLZ[] = INCBIN_U32("graphics/pokenav/map_frame.bin.lz"); - -static const u16 sFlyTargetIcons_Pal[] = INCBIN_U16("graphics/pokenav/fly_target_icons.gbapal"); - -static const u32 sFlyTargetIcons_Gfx[] = INCBIN_U32("graphics/pokenav/fly_target_icons.4bpp.lz"); +static const u16 sRegionMapFramePal[] = INCBIN_U16("graphics/pokenav/region_map/frame.gbapal"); +static const u32 sRegionMapFrameGfxLZ[] = INCBIN_U32("graphics/pokenav/region_map/frame.4bpp.lz"); +static const u32 sRegionMapFrameTilemapLZ[] = INCBIN_U32("graphics/pokenav/region_map/frame.bin.lz"); +static const u16 sFlyTargetIcons_Pal[] = INCBIN_U16("graphics/pokenav/region_map/fly_target_icons.gbapal"); +static const u32 sFlyTargetIcons_Gfx[] = INCBIN_U32("graphics/pokenav/region_map/fly_target_icons.4bpp.lz"); static const u8 sMapHealLocations[][3] = { diff --git a/src/reload_save.c b/src/reload_save.c index cdbb2f227d..5425d1c7c4 100644 --- a/src/reload_save.c +++ b/src/reload_save.c @@ -21,7 +21,7 @@ void ReloadSave(void) SetSaveBlocksPointers(GetSaveBlocksPointersBaseOffset()); ResetMenuAndMonGlobals(); Save_ResetSaveCounters(); - Save_LoadGameData(SAVE_NORMAL); + LoadGameSave(SAVE_NORMAL); if (gSaveFileStatus == SAVE_STATUS_EMPTY || gSaveFileStatus == SAVE_STATUS_CORRUPT) Sav2_ClearSetDefault(); SetPokemonCryStereo(gSaveBlock2Ptr->optionsSound); diff --git a/src/reshow_battle_screen.c b/src/reshow_battle_screen.c index 1427042f81..3a67feeab2 100644 --- a/src/reshow_battle_screen.c +++ b/src/reshow_battle_screen.c @@ -224,7 +224,7 @@ static void CreateBattlerSprite(u8 battler) return; SetMultiuseSpriteTemplateToPokemon(GetMonData(&gEnemyParty[gBattlerPartyIndexes[battler]], MON_DATA_SPECIES), GetBattlerPosition(battler)); - gBattlerSpriteIds[battler] = CreateSprite(&gMultiuseSpriteTemplate, GetBattlerSpriteCoord(battler, 2), posY, GetBattlerSpriteSubpriority(battler)); + gBattlerSpriteIds[battler] = CreateSprite(&gMultiuseSpriteTemplate, GetBattlerSpriteCoord(battler, BATTLER_COORD_X_2), posY, GetBattlerSpriteSubpriority(battler)); gSprites[gBattlerSpriteIds[battler]].oam.paletteNum = battler; gSprites[gBattlerSpriteIds[battler]].callback = SpriteCallbackDummy; gSprites[gBattlerSpriteIds[battler]].data[0] = battler; @@ -260,7 +260,7 @@ static void CreateBattlerSprite(u8 battler) return; SetMultiuseSpriteTemplateToPokemon(GetMonData(&gPlayerParty[gBattlerPartyIndexes[battler]], MON_DATA_SPECIES), GetBattlerPosition(battler)); - gBattlerSpriteIds[battler] = CreateSprite(&gMultiuseSpriteTemplate, GetBattlerSpriteCoord(battler, 2), posY, GetBattlerSpriteSubpriority(battler)); + gBattlerSpriteIds[battler] = CreateSprite(&gMultiuseSpriteTemplate, GetBattlerSpriteCoord(battler, BATTLER_COORD_X_2), posY, GetBattlerSpriteSubpriority(battler)); gSprites[gBattlerSpriteIds[battler]].oam.paletteNum = battler; gSprites[gBattlerSpriteIds[battler]].callback = SpriteCallbackDummy; gSprites[gBattlerSpriteIds[battler]].data[0] = battler; diff --git a/src/roulette.c b/src/roulette.c index ac4212d47c..5b870fb604 100644 --- a/src/roulette.c +++ b/src/roulette.c @@ -4449,13 +4449,13 @@ static void SetBallStuck(struct Sprite *sprite) if (sRoulette->useTaillow) { if (sprite->sStuckOnWheelLeft) - PlayCry1(SPECIES_TAILLOW, -63); + PlayCry_Normal(SPECIES_TAILLOW, -63); else - PlayCry1(SPECIES_TAILLOW, 63); + PlayCry_Normal(SPECIES_TAILLOW, 63); } else { - PlayCry1(SPECIES_SHROOMISH, -63); + PlayCry_Normal(SPECIES_SHROOMISH, -63); } slotsToSkip = 2; @@ -4719,9 +4719,9 @@ static void SpriteCB_Taillow_FlyIn(struct Sprite *sprite) { m4aSongNumStartOrChange(SE_TAILLOW_WING_FLAP); if (sRoulette->ball->sStuckOnWheelLeft == 0) - PlayCry1(SPECIES_TAILLOW, 63); + PlayCry_Normal(SPECIES_TAILLOW, 63); else - PlayCry1(SPECIES_TAILLOW, -63); + PlayCry_Normal(SPECIES_TAILLOW, -63); StartSpriteAnim(sprite, sRoulette->ball->sStuckOnWheelLeft + 2); sprite->data[1] = 45; sprite->callback = SpriteCB_Taillow_PickUpBall; diff --git a/src/save.c b/src/save.c index 3c8f4360dc..b539564383 100644 --- a/src/save.c +++ b/src/save.c @@ -13,13 +13,13 @@ #include "link.h" #include "constants/game_stat.h" -static u16 CalculateChecksum(void *data, u16 size); -static bool8 DoReadFlashWholeSection(u8 sector, struct SaveSection *section); -static u8 GetSaveValidStatus(const struct SaveSectionLocation *location); -static u8 sub_8152E10(u16 a1, const struct SaveSectionLocation *location); -static u8 ClearSaveData_2(u16 a1, const struct SaveSectionLocation *location); -static u8 TryWriteSector(u8 sector, u8 *data); -static u8 HandleWriteSector(u16 a1, const struct SaveSectionLocation *location); +static u16 CalculateChecksum(void *, u16); +static bool8 ReadFlashSector(u8, struct SaveSector *); +static u8 GetSaveValidStatus(const struct SaveSectorLocation *); +static u8 CopySaveSlotData(u16, struct SaveSectorLocation *); +static u8 TryWriteSector(u8, u8 *); +static u8 HandleWriteSector(u16, const struct SaveSectorLocation *); +static u8 HandleReplaceSector(u16, const struct SaveSectorLocation *); // Divide save blocks into individual chunks to be written to flash sectors @@ -38,11 +38,10 @@ static u8 HandleWriteSector(u16 a1, const struct SaveSectionLocation *location); * so that the same data is not always being written to the same sector. This * might be done to reduce wear on the flash memory, but I'm not sure, since all * 14 sectors get written anyway. + * + * See SECTOR_ID_* constants in save.h */ -// (u8 *)structure was removed from the first statement of the macro in Emerald. -// This is because malloc is used to allocate addresses so storing the raw -// addresses should not be done in the offsets information. #define SAVEBLOCK_CHUNK(structure, chunkNum) \ { \ chunkNum * SECTOR_DATA_SIZE, \ @@ -50,42 +49,45 @@ static u8 HandleWriteSector(u16 a1, const struct SaveSectionLocation *location); min(sizeof(structure) - chunkNum * SECTOR_DATA_SIZE, SECTOR_DATA_SIZE) : 0 \ } -static const struct SaveSectionOffsets sSaveSectionOffsets[] = +struct { - SAVEBLOCK_CHUNK(gSaveblock2, 0), + u16 offset; + u16 size; +} static const sSaveSlotLayout[NUM_SECTORS_PER_SLOT] = +{ + SAVEBLOCK_CHUNK(struct SaveBlock2, 0), // SECTOR_ID_SAVEBLOCK2 - SAVEBLOCK_CHUNK(gSaveblock1, 0), - SAVEBLOCK_CHUNK(gSaveblock1, 1), - SAVEBLOCK_CHUNK(gSaveblock1, 2), - SAVEBLOCK_CHUNK(gSaveblock1, 3), + SAVEBLOCK_CHUNK(struct SaveBlock1, 0), // SECTOR_ID_SAVEBLOCK1_START + SAVEBLOCK_CHUNK(struct SaveBlock1, 1), + SAVEBLOCK_CHUNK(struct SaveBlock1, 2), + SAVEBLOCK_CHUNK(struct SaveBlock1, 3), // SECTOR_ID_SAVEBLOCK1_END - SAVEBLOCK_CHUNK(gPokemonStorage, 0), - SAVEBLOCK_CHUNK(gPokemonStorage, 1), - SAVEBLOCK_CHUNK(gPokemonStorage, 2), - SAVEBLOCK_CHUNK(gPokemonStorage, 3), - SAVEBLOCK_CHUNK(gPokemonStorage, 4), - SAVEBLOCK_CHUNK(gPokemonStorage, 5), - SAVEBLOCK_CHUNK(gPokemonStorage, 6), - SAVEBLOCK_CHUNK(gPokemonStorage, 7), - SAVEBLOCK_CHUNK(gPokemonStorage, 8), + SAVEBLOCK_CHUNK(struct PokemonStorage, 0), // SECTOR_ID_PKMN_STORAGE_START + SAVEBLOCK_CHUNK(struct PokemonStorage, 1), + SAVEBLOCK_CHUNK(struct PokemonStorage, 2), + SAVEBLOCK_CHUNK(struct PokemonStorage, 3), + SAVEBLOCK_CHUNK(struct PokemonStorage, 4), + SAVEBLOCK_CHUNK(struct PokemonStorage, 5), + SAVEBLOCK_CHUNK(struct PokemonStorage, 6), + SAVEBLOCK_CHUNK(struct PokemonStorage, 7), + SAVEBLOCK_CHUNK(struct PokemonStorage, 8), // SECTOR_ID_PKMN_STORAGE_END }; -// iwram common u16 gLastWrittenSector; u32 gLastSaveCounter; u16 gLastKnownGoodSector; u32 gDamagedSaveSectors; u32 gSaveCounter; -struct SaveSection *gFastSaveSection; -u16 gUnknown_03006208; +struct SaveSector *gReadWriteSector; // Pointer to a buffer for reading/writing a sector +u16 gIncrementalSectorId; u16 gSaveUnusedVar; u16 gSaveFileStatus; void (*gGameContinueCallback)(void); -struct SaveSectionLocation gRamSaveSectionLocations[NUM_SECTORS_PER_SLOT]; +struct SaveSectorLocation gRamSaveSectorLocations[NUM_SECTORS_PER_SLOT]; u16 gSaveUnusedVar2; u16 gSaveAttemptStatus; -EWRAM_DATA struct SaveSection gSaveDataBuffer = {0}; +EWRAM_DATA struct SaveSector gSaveDataBuffer = {0}; // Buffer used for reading/writing sectors EWRAM_DATA static u8 sUnusedVar = 0; void ClearSaveData(void) @@ -107,20 +109,20 @@ void Save_ResetSaveCounters(void) gDamagedSaveSectors = 0; } -static bool32 SetDamagedSectorBits(u8 op, u8 bit) +static bool32 SetDamagedSectorBits(u8 op, u8 sectorId) { bool32 retVal = FALSE; switch (op) { case ENABLE: - gDamagedSaveSectors |= (1 << bit); + gDamagedSaveSectors |= (1 << sectorId); break; case DISABLE: - gDamagedSaveSectors &= ~(1 << bit); + gDamagedSaveSectors &= ~(1 << sectorId); break; case CHECK: // unused - if (gDamagedSaveSectors & (1 << bit)) + if (gDamagedSaveSectors & (1 << sectorId)) retVal = TRUE; break; } @@ -128,31 +130,35 @@ static bool32 SetDamagedSectorBits(u8 op, u8 bit) return retVal; } -static u8 SaveWriteToFlash(u16 sectorId, const struct SaveSectionLocation *location) +static u8 WriteSaveSectorOrSlot(u16 sectorId, const struct SaveSectorLocation *locations) { u32 status; u16 i; - gFastSaveSection = &gSaveDataBuffer; + gReadWriteSector = &gSaveDataBuffer; - if (sectorId != 0xFFFF) // for link + if (sectorId != FULL_SAVE_SLOT) { - status = HandleWriteSector(sectorId, location); + // A sector was specified, just write that sector. + // This is never reached, FULL_SAVE_SLOT is always used instead. + status = HandleWriteSector(sectorId, locations); } else { + // No sector was specified, write full save slot. gLastKnownGoodSector = gLastWrittenSector; // backup the current written sector before attempting to write. gLastSaveCounter = gSaveCounter; gLastWrittenSector++; - gLastWrittenSector = gLastWrittenSector % NUM_SECTORS_PER_SLOT; // array count save sector locations + gLastWrittenSector = gLastWrittenSector % NUM_SECTORS_PER_SLOT; gSaveCounter++; status = SAVE_STATUS_OK; for (i = 0; i < NUM_SECTORS_PER_SLOT; i++) - HandleWriteSector(i, location); + HandleWriteSector(i, locations); - if (gDamagedSaveSectors != 0) // skip the damaged sector. + if (gDamagedSaveSectors) { + // At least one sector save failed status = SAVE_STATUS_ERROR; gLastWrittenSector = gLastKnownGoodSector; gSaveCounter = gLastSaveCounter; @@ -162,98 +168,107 @@ static u8 SaveWriteToFlash(u16 sectorId, const struct SaveSectionLocation *locat return status; } -static u8 HandleWriteSector(u16 sectorId, const struct SaveSectionLocation *location) +static u8 HandleWriteSector(u16 sectorId, const struct SaveSectorLocation *locations) { u16 i; u16 sector; u8 *data; u16 size; + // Adjust sector id for current save slot sector = sectorId + gLastWrittenSector; sector %= NUM_SECTORS_PER_SLOT; sector += NUM_SECTORS_PER_SLOT * (gSaveCounter % NUM_SAVE_SLOTS); - data = location[sectorId].data; - size = location[sectorId].size; + // Get current save data + data = locations[sectorId].data; + size = locations[sectorId].size; - // clear save section. - for (i = 0; i < sizeof(struct SaveSection); i++) - ((char *)gFastSaveSection)[i] = 0; + // Clear temp save sector + for (i = 0; i < SECTOR_SIZE; i++) + ((u8 *)gReadWriteSector)[i] = 0; - gFastSaveSection->id = sectorId; - gFastSaveSection->security = UNKNOWN_CHECK_VALUE; - gFastSaveSection->counter = gSaveCounter; + // Set footer data + gReadWriteSector->id = sectorId; + gReadWriteSector->security = SECTOR_SECURITY_NUM; + gReadWriteSector->counter = gSaveCounter; + // Copy current data to temp buffer for writing for (i = 0; i < size; i++) - gFastSaveSection->data[i] = data[i]; + gReadWriteSector->data[i] = data[i]; - gFastSaveSection->checksum = CalculateChecksum(data, size); - return TryWriteSector(sector, gFastSaveSection->data); + gReadWriteSector->checksum = CalculateChecksum(data, size); + + return TryWriteSector(sector, gReadWriteSector->data); } -static u8 HandleWriteSectorNBytes(u8 sector, u8 *data, u16 size) +static u8 HandleWriteSectorNBytes(u8 sectorId, u8 *data, u16 size) { u16 i; - struct SaveSection *section = &gSaveDataBuffer; + struct SaveSector *sector = &gSaveDataBuffer; - for (i = 0; i < sizeof(struct SaveSection); i++) - ((char *)section)[i] = 0; + // Clear temp save sector + for (i = 0; i < SECTOR_SIZE; i++) + ((u8 *)sector)[i] = 0; - section->security = UNKNOWN_CHECK_VALUE; + sector->security = SECTOR_SECURITY_NUM; + // Copy data to temp buffer for writing for (i = 0; i < size; i++) - section->data[i] = data[i]; + sector->data[i] = data[i]; - section->id = CalculateChecksum(data, size); // though this appears to be incorrect, it might be some sector checksum instead of a whole save checksum and only appears to be relevent to HOF data, if used. - return TryWriteSector(sector, section->data); + sector->id = CalculateChecksum(data, size); // though this appears to be incorrect, it might be some sector checksum instead of a whole save checksum and only appears to be relevent to HOF data, if used. + return TryWriteSector(sectorId, sector->data); } static u8 TryWriteSector(u8 sector, u8 *data) { - if (ProgramFlashSectorAndVerify(sector, data) != 0) // is damaged? + if (ProgramFlashSectorAndVerify(sector, data)) // is damaged? { - SetDamagedSectorBits(ENABLE, sector); // set damaged sector bits. + // Failed + SetDamagedSectorBits(ENABLE, sector); return SAVE_STATUS_ERROR; } else { - SetDamagedSectorBits(DISABLE, sector); // unset damaged sector bits. it's safe now. + // Succeeded + SetDamagedSectorBits(DISABLE, sector); return SAVE_STATUS_OK; } } -static u32 RestoreSaveBackupVarsAndIncrement(const struct SaveSectionLocation *location) // location is unused +static u32 RestoreSaveBackupVarsAndIncrement(const struct SaveSectorLocation *locations) { - gFastSaveSection = &gSaveDataBuffer; + gReadWriteSector = &gSaveDataBuffer; gLastKnownGoodSector = gLastWrittenSector; gLastSaveCounter = gSaveCounter; gLastWrittenSector++; gLastWrittenSector %= NUM_SECTORS_PER_SLOT; gSaveCounter++; - gUnknown_03006208 = 0; + gIncrementalSectorId = 0; gDamagedSaveSectors = 0; return 0; } -static u32 RestoreSaveBackupVars(const struct SaveSectionLocation *location) // only ever called once, and gSaveBlock2 is passed to this function. location is unused +static u32 RestoreSaveBackupVars(const struct SaveSectorLocation *locations) { - gFastSaveSection = &gSaveDataBuffer; + gReadWriteSector = &gSaveDataBuffer; gLastKnownGoodSector = gLastWrittenSector; gLastSaveCounter = gSaveCounter; - gUnknown_03006208 = 0; + gIncrementalSectorId = 0; gDamagedSaveSectors = 0; return 0; } -static u8 sub_81529D4(u16 sectorId, const struct SaveSectionLocation *location) +static u8 HandleWriteIncrementalSector(u16 numSectors, const struct SaveSectorLocation *locations) { u8 status; - if (gUnknown_03006208 < sectorId - 1) + if (gIncrementalSectorId < numSectors - 1) { status = SAVE_STATUS_OK; - HandleWriteSector(gUnknown_03006208, location); - gUnknown_03006208++; + HandleWriteSector(gIncrementalSectorId, locations); + gIncrementalSectorId++; if (gDamagedSaveSectors) { status = SAVE_STATUS_ERROR; @@ -263,17 +278,18 @@ static u8 sub_81529D4(u16 sectorId, const struct SaveSectionLocation *location) } else { + // Exceeded max sector, finished status = SAVE_STATUS_ERROR; } return status; } -static u8 sub_8152A34(u16 sectorId, const struct SaveSectionLocation *location) +static u8 HandleReplaceSectorAndVerify(u16 sectorId, const struct SaveSectorLocation *locations) { u8 status = SAVE_STATUS_OK; - ClearSaveData_2(sectorId - 1, location); + HandleReplaceSector(sectorId - 1, locations); if (gDamagedSaveSectors) { @@ -284,7 +300,8 @@ static u8 sub_8152A34(u16 sectorId, const struct SaveSectionLocation *location) return status; } -static u8 ClearSaveData_2(u16 sectorId, const struct SaveSectionLocation *location) +// Similar to HandleWriteSector, but fully erases the sector first, and skips writing the first security byte +static u8 HandleReplaceSector(u16 sectorId, const struct SaveSectorLocation *locations) { u16 i; u16 sector; @@ -292,35 +309,39 @@ static u8 ClearSaveData_2(u16 sectorId, const struct SaveSectionLocation *locati u16 size; u8 status; + // Adjust sector id for current save slot sector = sectorId + gLastWrittenSector; sector %= NUM_SECTORS_PER_SLOT; sector += NUM_SECTORS_PER_SLOT * (gSaveCounter % NUM_SAVE_SLOTS); - data = location[sectorId].data; - size = location[sectorId].size; + // Get current save data + data = locations[sectorId].data; + size = locations[sectorId].size; - // clear temp save section. - for (i = 0; i < sizeof(struct SaveSection); i++) - ((char *)gFastSaveSection)[i] = 0; + // Clear temp save sector. + for (i = 0; i < SECTOR_SIZE; i++) + ((u8 *)gReadWriteSector)[i] = 0; - gFastSaveSection->id = sectorId; - gFastSaveSection->security = UNKNOWN_CHECK_VALUE; - gFastSaveSection->counter = gSaveCounter; + // Set footer data + gReadWriteSector->id = sectorId; + gReadWriteSector->security = SECTOR_SECURITY_NUM; + gReadWriteSector->counter = gSaveCounter; - // set temp section's data. + // Copy current data to temp buffer for writing for (i = 0; i < size; i++) - gFastSaveSection->data[i] = data[i]; + gReadWriteSector->data[i] = data[i]; - // calculate checksum. - gFastSaveSection->checksum = CalculateChecksum(data, size); + gReadWriteSector->checksum = CalculateChecksum(data, size); + // Erase old save data EraseFlashSector(sector); status = SAVE_STATUS_OK; - for (i = 0; i < sizeof(struct UnkSaveSection); i++) + // Write new save data up to security field + for (i = 0; i < SECTOR_SECURITY_OFFSET; i++) { - if (ProgramFlashByte(sector, i, ((u8 *)gFastSaveSection)[i])) + if (ProgramFlashByte(sector, i, ((u8 *)gReadWriteSector)[i])) { status = SAVE_STATUS_ERROR; break; @@ -329,16 +350,20 @@ static u8 ClearSaveData_2(u16 sectorId, const struct SaveSectionLocation *locati if (status == SAVE_STATUS_ERROR) { + // Writing save data failed SetDamagedSectorBits(ENABLE, sector); return SAVE_STATUS_ERROR; } else { + // Writing save data succeeded, write security and counter status = SAVE_STATUS_OK; - for (i = 0; i < 7; i++) + // Write security (skipping the first byte) and counter fields. + // The byte of security that is skipped is instead written by WriteSectorSecurityByte or WriteSectorSecurityByte_NoOffset + for (i = 0; i < SECTOR_SIZE - (SECTOR_SECURITY_OFFSET + 1); i++) { - if (ProgramFlashByte(sector, 0xFF9 + i, ((u8 *)gFastSaveSection)[0xFF9 + i])) + if (ProgramFlashByte(sector, SECTOR_SECURITY_OFFSET + 1 + i, ((u8 *)gReadWriteSector)[SECTOR_SECURITY_OFFSET + 1 + i])) { status = SAVE_STATUS_ERROR; break; @@ -347,28 +372,31 @@ static u8 ClearSaveData_2(u16 sectorId, const struct SaveSectionLocation *locati if (status == SAVE_STATUS_ERROR) { + // Writing security/counter failed SetDamagedSectorBits(ENABLE, sector); return SAVE_STATUS_ERROR; } else { + // Succeeded SetDamagedSectorBits(DISABLE, sector); return SAVE_STATUS_OK; } } } -static u8 sav12_xor_get(u16 sectorId, const struct SaveSectionLocation *location) +static u8 WriteSectorSecurityByte_NoOffset(u16 sectorId, const struct SaveSectorLocation *locations) { - u16 sector; - - sector = sectorId + gLastWrittenSector; // no sub 1? + // Adjust sector id for current save slot + // This first line lacking -1 is the only difference from WriteSectorSecurityByte + u16 sector = sectorId + gLastWrittenSector; sector %= NUM_SECTORS_PER_SLOT; sector += NUM_SECTORS_PER_SLOT * (gSaveCounter % NUM_SAVE_SLOTS); - if (ProgramFlashByte(sector, sizeof(struct UnkSaveSection), 0x25)) + // Write just the first byte of the security field, which was skipped by HandleReplaceSector + if (ProgramFlashByte(sector, SECTOR_SECURITY_OFFSET, SECTOR_SECURITY_NUM & 0xFF)) { - // sector is damaged, so enable the bit in gDamagedSaveSectors and restore the last written sector and save counter. + // Sector is damaged, so enable the bit in gDamagedSaveSectors and restore the last written sector and save counter. SetDamagedSectorBits(ENABLE, sector); gLastWrittenSector = gLastKnownGoodSector; gSaveCounter = gLastSaveCounter; @@ -376,22 +404,23 @@ static u8 sav12_xor_get(u16 sectorId, const struct SaveSectionLocation *location } else { + // Succeeded SetDamagedSectorBits(DISABLE, sector); return SAVE_STATUS_OK; } } -static u8 sub_8152CAC(u16 sectorId, const struct SaveSectionLocation *location) +static u8 CopySectorSecurityByte(u16 sectorId, const struct SaveSectorLocation *locations) { - u16 sector; - - sector = sectorId + gLastWrittenSector - 1; + // Adjust sector id for current save slot + u16 sector = sectorId + gLastWrittenSector - 1; sector %= NUM_SECTORS_PER_SLOT; sector += NUM_SECTORS_PER_SLOT * (gSaveCounter % NUM_SAVE_SLOTS); - if (ProgramFlashByte(sector, sizeof(struct UnkSaveSection), ((u8 *)gFastSaveSection)[sizeof(struct UnkSaveSection)])) + // Copy just the first byte of the security field from the read/write buffer + if (ProgramFlashByte(sector, SECTOR_SECURITY_OFFSET, ((u8 *)gReadWriteSector)[SECTOR_SECURITY_OFFSET])) { - // sector is damaged, so enable the bit in gDamagedSaveSectors and restore the last written sector and save counter. + // Sector is damaged, so enable the bit in gDamagedSaveSectors and restore the last written sector and save counter. SetDamagedSectorBits(ENABLE, sector); gLastWrittenSector = gLastKnownGoodSector; gSaveCounter = gLastSaveCounter; @@ -399,22 +428,23 @@ static u8 sub_8152CAC(u16 sectorId, const struct SaveSectionLocation *location) } else { + // Succeded SetDamagedSectorBits(DISABLE, sector); return SAVE_STATUS_OK; } } -static u8 sub_8152D44(u16 sectorId, const struct SaveSectionLocation *location) +static u8 WriteSectorSecurityByte(u16 sectorId, const struct SaveSectorLocation *locations) { - u16 sector; - - sector = sectorId + gLastWrittenSector - 1; // no sub 1? + // Adjust sector id for current save slot + u16 sector = sectorId + gLastWrittenSector - 1; sector %= NUM_SECTORS_PER_SLOT; sector += NUM_SECTORS_PER_SLOT * (gSaveCounter % NUM_SAVE_SLOTS); - if (ProgramFlashByte(sector, sizeof(struct UnkSaveSection), 0x25)) + // Write just the first byte of the security field, which was skipped by HandleReplaceSector + if (ProgramFlashByte(sector, SECTOR_SECURITY_OFFSET, SECTOR_SECURITY_NUM & 0xFF)) { - // sector is damaged, so enable the bit in gDamagedSaveSectors and restore the last written sector and save counter. + // Sector is damaged, so enable the bit in gDamagedSaveSectors and restore the last written sector and save counter. SetDamagedSectorBits(ENABLE, sector); gLastWrittenSector = gLastKnownGoodSector; gSaveCounter = gLastSaveCounter; @@ -422,29 +452,32 @@ static u8 sub_8152D44(u16 sectorId, const struct SaveSectionLocation *location) } else { + // Succeeded SetDamagedSectorBits(DISABLE, sector); return SAVE_STATUS_OK; } } -static u8 sub_8152DD0(u16 a1, const struct SaveSectionLocation *location) +static u8 TryLoadSaveSlot(u16 sectorId, struct SaveSectorLocation *locations) { u8 status; - gFastSaveSection = &gSaveDataBuffer; - if (a1 != 0xFFFF) + gReadWriteSector = &gSaveDataBuffer; + if (sectorId != FULL_SAVE_SLOT) { + // This function may not be used with a specific sector id status = SAVE_STATUS_ERROR; } else { - status = GetSaveValidStatus(location); - sub_8152E10(0xFFFF, location); + status = GetSaveValidStatus(locations); + CopySaveSlotData(FULL_SAVE_SLOT, locations); } return status; } -static u8 sub_8152E10(u16 a1, const struct SaveSectionLocation *location) +// sectorId arg is ignored, this always reads the full save slot +static u8 CopySaveSlotData(u16 sectorId, struct SaveSectorLocation *locations) { u16 i; u16 checksum; @@ -453,96 +486,102 @@ static u8 sub_8152E10(u16 a1, const struct SaveSectionLocation *location) for (i = 0; i < NUM_SECTORS_PER_SLOT; i++) { - DoReadFlashWholeSection(i + slotOffset, gFastSaveSection); - id = gFastSaveSection->id; + ReadFlashSector(i + slotOffset, gReadWriteSector); + + id = gReadWriteSector->id; if (id == 0) gLastWrittenSector = i; - checksum = CalculateChecksum(gFastSaveSection->data, location[id].size); - if (gFastSaveSection->security == UNKNOWN_CHECK_VALUE - && gFastSaveSection->checksum == checksum) + + checksum = CalculateChecksum(gReadWriteSector->data, locations[id].size); + + // Only copy data for sectors whose security and checksum fields are correct + if (gReadWriteSector->security == SECTOR_SECURITY_NUM && gReadWriteSector->checksum == checksum) { u16 j; - for (j = 0; j < location[id].size; j++) - ((u8 *)location[id].data)[j] = gFastSaveSection->data[j]; + for (j = 0; j < locations[id].size; j++) + ((u8 *)locations[id].data)[j] = gReadWriteSector->data[j]; } } return SAVE_STATUS_OK; } -static u8 GetSaveValidStatus(const struct SaveSectionLocation *location) +static u8 GetSaveValidStatus(const struct SaveSectorLocation *locations) { u16 i; u16 checksum; u32 saveSlot1Counter = 0; u32 saveSlot2Counter = 0; - u32 slotCheckField = 0; + u32 validSectorFlags = 0; bool8 securityPassed = FALSE; u8 saveSlot1Status; u8 saveSlot2Status; - // check save slot 1. + // Check save slot 1 for (i = 0; i < NUM_SECTORS_PER_SLOT; i++) { - DoReadFlashWholeSection(i, gFastSaveSection); - if (gFastSaveSection->security == UNKNOWN_CHECK_VALUE) + ReadFlashSector(i, gReadWriteSector); + if (gReadWriteSector->security == SECTOR_SECURITY_NUM) { securityPassed = TRUE; - checksum = CalculateChecksum(gFastSaveSection->data, location[gFastSaveSection->id].size); - if (gFastSaveSection->checksum == checksum) + checksum = CalculateChecksum(gReadWriteSector->data, locations[gReadWriteSector->id].size); + if (gReadWriteSector->checksum == checksum) { - saveSlot1Counter = gFastSaveSection->counter; - slotCheckField |= 1 << gFastSaveSection->id; + saveSlot1Counter = gReadWriteSector->counter; + validSectorFlags |= 1 << gReadWriteSector->id; } } } if (securityPassed) { - if (slotCheckField == 0x3FFF) + if (validSectorFlags == (1 << NUM_SECTORS_PER_SLOT) - 1) saveSlot1Status = SAVE_STATUS_OK; else saveSlot1Status = SAVE_STATUS_ERROR; } else { + // No sectors in slot 1 have the security number, treat it as empty saveSlot1Status = SAVE_STATUS_EMPTY; } - slotCheckField = 0; + validSectorFlags = 0; securityPassed = FALSE; - // check save slot 2. + // Check save slot 2 for (i = 0; i < NUM_SECTORS_PER_SLOT; i++) { - DoReadFlashWholeSection(i + NUM_SECTORS_PER_SLOT, gFastSaveSection); - if (gFastSaveSection->security == UNKNOWN_CHECK_VALUE) + ReadFlashSector(i + NUM_SECTORS_PER_SLOT, gReadWriteSector); + if (gReadWriteSector->security == SECTOR_SECURITY_NUM) { securityPassed = TRUE; - checksum = CalculateChecksum(gFastSaveSection->data, location[gFastSaveSection->id].size); - if (gFastSaveSection->checksum == checksum) + checksum = CalculateChecksum(gReadWriteSector->data, locations[gReadWriteSector->id].size); + if (gReadWriteSector->checksum == checksum) { - saveSlot2Counter = gFastSaveSection->counter; - slotCheckField |= 1 << gFastSaveSection->id; + saveSlot2Counter = gReadWriteSector->counter; + validSectorFlags |= 1 << gReadWriteSector->id; } } } if (securityPassed) { - if (slotCheckField == 0x3FFF) + if (validSectorFlags == (1 << NUM_SECTORS_PER_SLOT) - 1) saveSlot2Status = SAVE_STATUS_OK; else saveSlot2Status = SAVE_STATUS_ERROR; } else { + // No sectors in slot 2 have the security number, treat it as empty. saveSlot2Status = SAVE_STATUS_EMPTY; } if (saveSlot1Status == SAVE_STATUS_OK && saveSlot2Status == SAVE_STATUS_OK) { - if ((saveSlot1Counter == -1 && saveSlot2Counter == 0) || (saveSlot1Counter == 0 && saveSlot2Counter == -1)) + if ((saveSlot1Counter == -1 && saveSlot2Counter == 0) + || (saveSlot1Counter == 0 && saveSlot2Counter == -1)) { if ((unsigned)(saveSlot1Counter + 1) < (unsigned)(saveSlot2Counter + 1)) gSaveCounter = saveSlot2Counter; @@ -559,63 +598,71 @@ static u8 GetSaveValidStatus(const struct SaveSectionLocation *location) return SAVE_STATUS_OK; } + // One or both save slots are not OK + if (saveSlot1Status == SAVE_STATUS_OK) { gSaveCounter = saveSlot1Counter; if (saveSlot2Status == SAVE_STATUS_ERROR) - return SAVE_STATUS_ERROR; - return SAVE_STATUS_OK; + return SAVE_STATUS_ERROR; // Slot 2 errored + return SAVE_STATUS_OK; // Slot 1 is OK, slot 2 is empty } if (saveSlot2Status == SAVE_STATUS_OK) { gSaveCounter = saveSlot2Counter; if (saveSlot1Status == SAVE_STATUS_ERROR) - return SAVE_STATUS_ERROR; - return SAVE_STATUS_OK; + return SAVE_STATUS_ERROR; // Slot 1 errored + return SAVE_STATUS_OK; // Slot 2 is OK, slot 1 is empty } - if (saveSlot1Status == SAVE_STATUS_EMPTY && saveSlot2Status == SAVE_STATUS_EMPTY) + // Neither slot is OK, check if both are empty + if (saveSlot1Status == SAVE_STATUS_EMPTY + && saveSlot2Status == SAVE_STATUS_EMPTY) { gSaveCounter = 0; gLastWrittenSector = 0; return SAVE_STATUS_EMPTY; } + // Both slots errored gSaveCounter = 0; gLastWrittenSector = 0; return SAVE_STATUS_CORRUPT; } -static u8 sub_81530DC(u8 sectorId, u8 *data, u16 size) +static u8 TryLoadSaveSector(u8 sectorId, u8 *data, u16 size) { u16 i; - struct SaveSection *section = &gSaveDataBuffer; - DoReadFlashWholeSection(sectorId, section); - if (section->security == UNKNOWN_CHECK_VALUE) + struct SaveSector *sector = &gSaveDataBuffer; + ReadFlashSector(sectorId, sector); + if (sector->security == SECTOR_SECURITY_NUM) { - u16 checksum = CalculateChecksum(section->data, size); - if (section->id == checksum) + u16 checksum = CalculateChecksum(sector->data, size); + if (sector->id == checksum) { + // Security and checksum are correct, copy data for (i = 0; i < size; i++) - data[i] = section->data[i]; + data[i] = sector->data[i]; return SAVE_STATUS_OK; } else { + // Incorrect checksum return SAVE_STATUS_CORRUPT; } } else { + // Incorrect security value return SAVE_STATUS_EMPTY; } } // Return value always ignored -static bool8 DoReadFlashWholeSection(u8 sector, struct SaveSection *section) +static bool8 ReadFlashSector(u8 sectorId, struct SaveSector *sector) { - ReadFlash(sector, 0, section->data, sizeof(struct SaveSection)); + ReadFlash(sectorId, 0, sector->data, SECTOR_SIZE); return TRUE; } @@ -635,21 +682,20 @@ static u16 CalculateChecksum(void *data, u16 size) static void UpdateSaveAddresses(void) { - int i = 0; - - gRamSaveSectionLocations[i].data = (void*)(gSaveBlock2Ptr) + sSaveSectionOffsets[i].toAdd; - gRamSaveSectionLocations[i].size = sSaveSectionOffsets[i].size; + int i = SECTOR_ID_SAVEBLOCK2; + gRamSaveSectorLocations[i].data = (void*)(gSaveBlock2Ptr) + sSaveSlotLayout[i].offset; + gRamSaveSectorLocations[i].size = sSaveSlotLayout[i].size; for (i = SECTOR_ID_SAVEBLOCK1_START; i <= SECTOR_ID_SAVEBLOCK1_END; i++) { - gRamSaveSectionLocations[i].data = (void*)(gSaveBlock1Ptr) + sSaveSectionOffsets[i].toAdd; - gRamSaveSectionLocations[i].size = sSaveSectionOffsets[i].size; + gRamSaveSectorLocations[i].data = (void*)(gSaveBlock1Ptr) + sSaveSlotLayout[i].offset; + gRamSaveSectorLocations[i].size = sSaveSlotLayout[i].size; } for (; i <= SECTOR_ID_PKMN_STORAGE_END; i++) //setting i to SECTOR_ID_PKMN_STORAGE_START does not match { - gRamSaveSectionLocations[i].data = (void*)(gPokemonStoragePtr) + sSaveSectionOffsets[i].toAdd; - gRamSaveSectionLocations[i].size = sSaveSectionOffsets[i].size; + gRamSaveSectorLocations[i].data = (void*)(gPokemonStoragePtr) + sSaveSlotLayout[i].offset; + gRamSaveSectorLocations[i].size = sSaveSlotLayout[i].size; } } @@ -663,43 +709,48 @@ u8 HandleSavingData(u8 saveType) UpdateSaveAddresses(); switch (saveType) { - case SAVE_HALL_OF_FAME_ERASE_BEFORE: // deletes HOF before overwriting HOF completely. unused + case SAVE_HALL_OF_FAME_ERASE_BEFORE: + // Unused. Erases the special save sectors (HOF, Trainer Hill, Recorded Battle) + // before overwriting HOF. for (i = SECTOR_ID_HOF_1; i < SECTORS_COUNT; i++) EraseFlashSector(i); - case SAVE_HALL_OF_FAME: // hall of fame. + // fallthrough + case SAVE_HALL_OF_FAME: if (GetGameStat(GAME_STAT_ENTERED_HOF) < 999) IncrementGameStat(GAME_STAT_ENTERED_HOF); - SaveSerializedGame(); - SaveWriteToFlash(0xFFFF, gRamSaveSectionLocations); + + // Write the full save slot first + CopyPartyAndObjectsToSave(); + WriteSaveSectorOrSlot(FULL_SAVE_SLOT, gRamSaveSectorLocations); + + // Save the Hall of Fame tempAddr = gDecompressionBuffer; HandleWriteSectorNBytes(SECTOR_ID_HOF_1, tempAddr, SECTOR_DATA_SIZE); HandleWriteSectorNBytes(SECTOR_ID_HOF_2, tempAddr + SECTOR_DATA_SIZE, SECTOR_DATA_SIZE); break; - case SAVE_NORMAL: // normal save. also called by overwriting your own save. + case SAVE_NORMAL: default: - SaveSerializedGame(); - SaveWriteToFlash(0xFFFF, gRamSaveSectionLocations); + CopyPartyAndObjectsToSave(); + WriteSaveSectorOrSlot(FULL_SAVE_SLOT, gRamSaveSectorLocations); break; - case SAVE_LINK: // Link and Battle Frontier - case SAVE_LINK2: // Unused - SaveSerializedGame(); + case SAVE_LINK: + case SAVE_LINK2: + // Used by link / Battle Frontier + // Write only SaveBlocks 1 and 2 (skips the PC) + CopyPartyAndObjectsToSave(); for(i = SECTOR_ID_SAVEBLOCK2; i <= SECTOR_ID_SAVEBLOCK1_END; i++) - ClearSaveData_2(i, gRamSaveSectionLocations); + HandleReplaceSector(i, gRamSaveSectorLocations); for(i = SECTOR_ID_SAVEBLOCK2; i <= SECTOR_ID_SAVEBLOCK1_END; i++) - sav12_xor_get(i, gRamSaveSectionLocations); + WriteSectorSecurityByte_NoOffset(i, gRamSaveSectorLocations); break; - // Support for Ereader was removed in Emerald. - /* - case EREADER_SAVE: // used in mossdeep "game corner" before/after battling old man e-reader trainer - SaveSerializedGame(); - SaveWriteToFlash(0, gRamSaveSectionLocations); - break; - */ case SAVE_OVERWRITE_DIFFERENT_FILE: + // Erase Hall of Fame for (i = SECTOR_ID_HOF_1; i < SECTORS_COUNT; i++) - EraseFlashSector(i); // erase HOF. - SaveSerializedGame(); - SaveWriteToFlash(0xFFFF, gRamSaveSectionLocations); + EraseFlashSector(i); + + // Overwrite save slot + CopyPartyAndObjectsToSave(); + WriteSaveSectorOrSlot(FULL_SAVE_SLOT, gRamSaveSectorLocations); break; } gTrainerHillVBlankCounter = backupVar; @@ -728,75 +779,91 @@ u8 TrySavingData(u8 saveType) } } -bool8 sub_8153380(void) // trade.c +bool8 LinkFullSave_Init(void) { if (gFlashMemoryPresent != TRUE) return TRUE; UpdateSaveAddresses(); - SaveSerializedGame(); - RestoreSaveBackupVarsAndIncrement(gRamSaveSectionLocations); + CopyPartyAndObjectsToSave(); + RestoreSaveBackupVarsAndIncrement(gRamSaveSectorLocations); return FALSE; } -bool8 sub_81533AC(void) // trade.c +bool8 LinkFullSave_WriteSector(void) { - u8 status = sub_81529D4(NUM_SECTORS_PER_SLOT, gRamSaveSectionLocations); + u8 status = HandleWriteIncrementalSector(NUM_SECTORS_PER_SLOT, gRamSaveSectorLocations); if (gDamagedSaveSectors) DoSaveFailedScreen(SAVE_NORMAL); + + // In this case "error" either means that an actual error was encountered + // or that the given max sector has been reached (meaning it has finished successfully). + // If there was an actual error the save failed screen above will also be shown. if (status == SAVE_STATUS_ERROR) return TRUE; else return FALSE; } -bool8 sub_81533E0(void) // trade.c +bool8 LinkFullSave_ReplaceLastSector(void) { - sub_8152A34(NUM_SECTORS_PER_SLOT, gRamSaveSectionLocations); + HandleReplaceSectorAndVerify(NUM_SECTORS_PER_SLOT, gRamSaveSectorLocations); if (gDamagedSaveSectors) DoSaveFailedScreen(SAVE_NORMAL); return FALSE; } -bool8 sub_8153408(void) // trade.c +bool8 LinkFullSave_SetLastSectorSecurity(void) { - sub_8152CAC(NUM_SECTORS_PER_SLOT, gRamSaveSectionLocations); + CopySectorSecurityByte(NUM_SECTORS_PER_SLOT, gRamSaveSectorLocations); if (gDamagedSaveSectors) DoSaveFailedScreen(SAVE_NORMAL); return FALSE; } -u8 FullSaveGame(void) +u8 WriteSaveBlock2(void) { if (gFlashMemoryPresent != TRUE) return TRUE; UpdateSaveAddresses(); - SaveSerializedGame(); - RestoreSaveBackupVars(gRamSaveSectionLocations); - sub_8152A34(gUnknown_03006208 + 1, gRamSaveSectionLocations); + CopyPartyAndObjectsToSave(); + RestoreSaveBackupVars(gRamSaveSectorLocations); + + // Because RestoreSaveBackupVars is called immediately prior, gIncrementalSectorId will always be 0 below, + // so this function only saves the first sector (SECTOR_ID_SAVEBLOCK2) + HandleReplaceSectorAndVerify(gIncrementalSectorId + 1, gRamSaveSectorLocations); return FALSE; } -bool8 CheckSaveFile(void) +// Used in conjunction with WriteSaveBlock2 to write both for certain link saves. +// This will be called repeatedly in a task, writing each sector of SaveBlock1 incrementally. +// It returns TRUE when finished. +bool8 WriteSaveBlock1Sector(void) { - u8 retVal = FALSE; - u16 sectorId = ++gUnknown_03006208; + u8 finished = FALSE; + u16 sectorId = ++gIncrementalSectorId; // Because WriteSaveBlock2 will have been called prior, this will be SECTOR_ID_SAVEBLOCK1_START if (sectorId <= SECTOR_ID_SAVEBLOCK1_END) { - sub_8152A34(gUnknown_03006208 + 1, gRamSaveSectionLocations); - sub_8152D44(sectorId, gRamSaveSectionLocations); + // Write a single sector of SaveBlock1 + HandleReplaceSectorAndVerify(gIncrementalSectorId + 1, gRamSaveSectorLocations); + WriteSectorSecurityByte(sectorId, gRamSaveSectorLocations); } else { - sub_8152D44(sectorId, gRamSaveSectionLocations); - retVal = TRUE; + // Beyond SaveBlock1, don't write the sector. + // Does write 1 byte of the next sector's security field, but as these + // are the same for all valid sectors it doesn't matter. + WriteSectorSecurityByte(sectorId, gRamSaveSectorLocations); + finished = TRUE; } + if (gDamagedSaveSectors) DoSaveFailedScreen(SAVE_LINK); - return retVal; + + return finished; } -u8 Save_LoadGameData(u8 saveType) +u8 LoadGameSave(u8 saveType) { u8 status; @@ -811,15 +878,15 @@ u8 Save_LoadGameData(u8 saveType) { case SAVE_NORMAL: default: - status = sub_8152DD0(0xFFFF, gRamSaveSectionLocations); - LoadSerializedGame(); + status = TryLoadSaveSlot(FULL_SAVE_SLOT, gRamSaveSectorLocations); + CopyPartyAndObjectsFromSave(); gSaveFileStatus = status; gGameContinueCallback = 0; break; case SAVE_HALL_OF_FAME: - status = sub_81530DC(SECTOR_ID_HOF_1, gDecompressionBuffer, SECTOR_DATA_SIZE); + status = TryLoadSaveSector(SECTOR_ID_HOF_1, gDecompressionBuffer, SECTOR_DATA_SIZE); if (status == SAVE_STATUS_OK) - status = sub_81530DC(SECTOR_ID_HOF_2, gDecompressionBuffer + SECTOR_DATA_SIZE, SECTOR_DATA_SIZE); + status = TryLoadSaveSector(SECTOR_ID_HOF_2, &gDecompressionBuffer[SECTOR_DATA_SIZE], SECTOR_DATA_SIZE); break; } @@ -829,29 +896,29 @@ u8 Save_LoadGameData(u8 saveType) u16 GetSaveBlocksPointersBaseOffset(void) { u16 i, slotOffset; - struct SaveSection* savSection; + struct SaveSector* sector; - savSection = gFastSaveSection = &gSaveDataBuffer; + sector = gReadWriteSector = &gSaveDataBuffer; if (gFlashMemoryPresent != TRUE) return 0; UpdateSaveAddresses(); - GetSaveValidStatus(gRamSaveSectionLocations); + GetSaveValidStatus(gRamSaveSectorLocations); slotOffset = NUM_SECTORS_PER_SLOT * (gSaveCounter % NUM_SAVE_SLOTS); for (i = 0; i < NUM_SECTORS_PER_SLOT; i++) { - DoReadFlashWholeSection(i + slotOffset, gFastSaveSection); + ReadFlashSector(i + slotOffset, gReadWriteSector); // Base offset for SaveBlock2 is calculated using the trainer id - if (gFastSaveSection->id == SECTOR_ID_SAVEBLOCK2) - return savSection->data[offsetof(struct SaveBlock2, playerTrainerId[0])] + - savSection->data[offsetof(struct SaveBlock2, playerTrainerId[1])] + - savSection->data[offsetof(struct SaveBlock2, playerTrainerId[2])] + - savSection->data[offsetof(struct SaveBlock2, playerTrainerId[3])]; + if (gReadWriteSector->id == SECTOR_ID_SAVEBLOCK2) + return sector->data[offsetof(struct SaveBlock2, playerTrainerId[0])] + + sector->data[offsetof(struct SaveBlock2, playerTrainerId[1])] + + sector->data[offsetof(struct SaveBlock2, playerTrainerId[2])] + + sector->data[offsetof(struct SaveBlock2, playerTrainerId[3])]; } return 0; } -u32 TryReadSpecialSaveSection(u8 sector, u8* dst) +u32 TryReadSpecialSaveSector(u8 sector, u8* dst) { s32 i; s32 size; @@ -859,19 +926,21 @@ u32 TryReadSpecialSaveSection(u8 sector, u8* dst) if (sector != SECTOR_ID_TRAINER_HILL && sector != SECTOR_ID_RECORDED_BATTLE) return SAVE_STATUS_ERROR; - ReadFlash(sector, 0, (u8 *)&gSaveDataBuffer, sizeof(struct SaveSection)); - if (*(u32*)(&gSaveDataBuffer.data[0]) != SPECIAL_SECTION_SENTINEL) + + ReadFlash(sector, 0, (u8 *)&gSaveDataBuffer, SECTOR_SIZE); + if (*(u32*)(&gSaveDataBuffer.data[0]) != SPECIAL_SECTOR_SENTINEL) return SAVE_STATUS_ERROR; - // copies whole save section except u32 counter + + // Copies whole save sector except u32 counter i = 0; - size = 0xFFB; - savData = &gSaveDataBuffer.data[4]; + size = SECTOR_COUNTER_OFFSET - 1; + savData = &gSaveDataBuffer.data[4]; // data[4] to skip past SPECIAL_SECTOR_SENTINEL for (; i <= size; i++) dst[i] = savData[i]; return SAVE_STATUS_OK; } -u32 TryWriteSpecialSaveSection(u8 sector, u8* src) +u32 TryWriteSpecialSaveSector(u8 sector, u8* src) { s32 i; s32 size; @@ -882,12 +951,12 @@ u32 TryWriteSpecialSaveSection(u8 sector, u8* src) return SAVE_STATUS_ERROR; savDataBuffer = &gSaveDataBuffer; - *(u32*)(savDataBuffer) = SPECIAL_SECTION_SENTINEL; + *(u32*)(savDataBuffer) = SPECIAL_SECTOR_SENTINEL; - // copies whole save section except u32 counter + // Copies whole save sector except u32 counter i = 0; - size = 0xFFB; - savData = &gSaveDataBuffer.data[4]; + size = SECTOR_COUNTER_OFFSET - 1; + savData = &gSaveDataBuffer.data[4]; // data[4] to skip past SPECIAL_SECTOR_SENTINEL for (; i <= size; i++) savData[i] = src[i]; if (ProgramFlashSectorAndVerify(sector, savDataBuffer) != 0) @@ -895,11 +964,13 @@ u32 TryWriteSpecialSaveSection(u8 sector, u8* src) return SAVE_STATUS_OK; } -#define tState data[0] -#define tTimer data[1] -#define tPartialSave data[2] +#define tState data[0] +#define tTimer data[1] +#define tInBattleTower data[2] -void Task_LinkSave(u8 taskId) +// Note that this is very different from TrySavingData(SAVE_LINK). +// Most notably it does save the PC data. +void Task_LinkFullSave(u8 taskId) { s16* data = gTasks[taskId].data; @@ -916,15 +987,15 @@ void Task_LinkSave(u8 taskId) case 2: if (IsLinkTaskFinished()) { - if (!tPartialSave) + if (!tInBattleTower) SaveMapView(); tState = 3; } break; case 3: - if (!tPartialSave) + if (!tInBattleTower) SetContinueGameWarpStatusToDynamicWarp(); - sub_8153380(); + LinkFullSave_Init(); tState = 4; break; case 4: @@ -935,17 +1006,17 @@ void Task_LinkSave(u8 taskId) } break; case 5: - if (sub_81533AC()) + if (LinkFullSave_WriteSector()) tState = 6; else - tState = 4; + tState = 4; // Not finished, delay again break; case 6: - sub_81533E0(); + LinkFullSave_ReplaceLastSector(); tState = 7; break; case 7: - if (!tPartialSave) + if (!tInBattleTower) ClearContinueGameWarpStatus2(); SetLinkStandbyCallback(); tState = 8; @@ -953,7 +1024,7 @@ void Task_LinkSave(u8 taskId) case 8: if (IsLinkTaskFinished()) { - sub_8153408(); + LinkFullSave_SetLastSectorSecurity(); tState = 9; } break; @@ -974,7 +1045,3 @@ void Task_LinkSave(u8 taskId) break; } } - -#undef tState -#undef tTimer -#undef tPartialSave diff --git a/src/save_failed_screen.c b/src/save_failed_screen.c index e7bdc3400a..9b32a938ff 100644 --- a/src/save_failed_screen.c +++ b/src/save_failed_screen.c @@ -363,9 +363,10 @@ static bool8 VerifySectorWipe(u16 sector) ReadFlash(sector, 0, (u8 *)ptr, SECTOR_SIZE); - for (i = 0; i < 0x400; i++, ptr++) + // 1/4 because ptr is u32 + for (i = 0; i < SECTOR_SIZE / 4; i++, ptr++) if (*ptr) - return TRUE; + return TRUE; // Sector has nonzero data, failed return FALSE; } @@ -375,6 +376,7 @@ static bool8 WipeSector(u16 sector) u16 i, j; bool8 failed = TRUE; + // Attempt to wipe sector with an arbitrary attempt limit of 130 for (i = 0; failed && i < 130; i++) { for (j = 0; j < SECTOR_SIZE; j++) diff --git a/src/scrcmd.c b/src/scrcmd.c index f61826a018..a18177b720 100644 --- a/src/scrcmd.c +++ b/src/scrcmd.c @@ -2050,7 +2050,7 @@ bool8 ScrCmd_playmoncry(struct ScriptContext *ctx) u16 species = VarGet(ScriptReadHalfword(ctx)); u16 mode = VarGet(ScriptReadHalfword(ctx)); - PlayCry5(species, mode); + PlayCry_Script(species, mode); return FALSE; } diff --git a/src/sound.c b/src/sound.c index 8c3cd39978..ad9993b546 100644 --- a/src/sound.c +++ b/src/sound.c @@ -26,7 +26,7 @@ static u16 sFanfareCounter; bool8 gDisableMusic; extern struct ToneData gCryTable[]; -extern struct ToneData gCryTable2[]; +extern struct ToneData gCryTable_Reverse[]; static void Task_Fanfare(u8 taskId); static void CreateFanfareTask(void); @@ -54,8 +54,6 @@ static const struct Fanfare sFanfares[] = { [FANFARE_REGISTER_MATCH_CALL] = { MUS_REGISTER_MATCH_CALL, 135 }, }; -#define CRY_VOLUME 120 // was 125 in R/S - void InitMapMusic(void) { gDisableMusic = FALSE; @@ -300,73 +298,76 @@ bool8 IsBGMStopped(void) return FALSE; } -void PlayCry1(u16 species, s8 pan) +void PlayCry_Normal(u16 species, s8 pan) { m4aMPlayVolumeControl(&gMPlayInfo_BGM, TRACKS_ALL, 85); - PlayCryInternal(species, pan, CRY_VOLUME, 10, 0); + PlayCryInternal(species, pan, CRY_VOLUME, CRY_PRIORITY_NORMAL, CRY_MODE_NORMAL); gPokemonCryBGMDuckingCounter = 2; RestoreBGMVolumeAfterPokemonCry(); } -void PlayCry2(u16 species, s8 pan, s8 volume, u8 priority) +void PlayCry_NormalNoDucking(u16 species, s8 pan, s8 volume, u8 priority) { - PlayCryInternal(species, pan, volume, priority, 0); + PlayCryInternal(species, pan, volume, priority, CRY_MODE_NORMAL); } -void PlayCry3(u16 species, s8 pan, u8 mode) +// Assuming it's not CRY_MODE_DOUBLES, this is equivalent to PlayCry_Normal except it allows other modes. +void PlayCry_ByMode(u16 species, s8 pan, u8 mode) { - if (mode == 1) + if (mode == CRY_MODE_DOUBLES) { - PlayCryInternal(species, pan, CRY_VOLUME, 10, 1); + PlayCryInternal(species, pan, CRY_VOLUME, CRY_PRIORITY_NORMAL, mode); } else { m4aMPlayVolumeControl(&gMPlayInfo_BGM, TRACKS_ALL, 85); - PlayCryInternal(species, pan, CRY_VOLUME, 10, mode); + PlayCryInternal(species, pan, CRY_VOLUME, CRY_PRIORITY_NORMAL, mode); gPokemonCryBGMDuckingCounter = 2; RestoreBGMVolumeAfterPokemonCry(); } } -void PlayCry4(u16 species, s8 pan, u8 mode) +// Used when releasing multiple Pokémon at once in battle. +void PlayCry_ReleaseDouble(u16 species, s8 pan, u8 mode) { - if (mode == 1) + if (mode == CRY_MODE_DOUBLES) { - PlayCryInternal(species, pan, CRY_VOLUME, 10, 1); + PlayCryInternal(species, pan, CRY_VOLUME, CRY_PRIORITY_NORMAL, mode); } else { if (!(gBattleTypeFlags & BATTLE_TYPE_MULTI)) m4aMPlayVolumeControl(&gMPlayInfo_BGM, TRACKS_ALL, 85); - PlayCryInternal(species, pan, CRY_VOLUME, 10, mode); + PlayCryInternal(species, pan, CRY_VOLUME, CRY_PRIORITY_NORMAL, mode); } } -void PlayCry6(u16 species, s8 pan, u8 mode) // not present in R/S +// Duck the BGM but don't restore it. Not present in R/S +void PlayCry_DuckNoRestore(u16 species, s8 pan, u8 mode) { - if (mode == 1) + if (mode == CRY_MODE_DOUBLES) { - PlayCryInternal(species, pan, CRY_VOLUME, 10, 1); + PlayCryInternal(species, pan, CRY_VOLUME, CRY_PRIORITY_NORMAL, mode); } else { m4aMPlayVolumeControl(&gMPlayInfo_BGM, TRACKS_ALL, 85); - PlayCryInternal(species, pan, CRY_VOLUME, 10, mode); + PlayCryInternal(species, pan, CRY_VOLUME, CRY_PRIORITY_NORMAL, mode); gPokemonCryBGMDuckingCounter = 2; } } -void PlayCry5(u16 species, u8 mode) +void PlayCry_Script(u16 species, u8 mode) { m4aMPlayVolumeControl(&gMPlayInfo_BGM, TRACKS_ALL, 85); - PlayCryInternal(species, 0, CRY_VOLUME, 10, mode); + PlayCryInternal(species, 0, CRY_VOLUME, CRY_PRIORITY_NORMAL, mode); gPokemonCryBGMDuckingCounter = 2; RestoreBGMVolumeAfterPokemonCry(); } void PlayCryInternal(u16 species, s8 pan, s8 volume, u8 priority, u8 mode) { - bool32 v0; + bool32 reverse; u32 release; u32 length; u32 pitch; @@ -375,76 +376,80 @@ void PlayCryInternal(u16 species, s8 pan, s8 volume, u8 priority, u8 mode) u8 table; species--; + + // Set default values + // May be overridden depending on mode. length = 140; - v0 = FALSE; + reverse = FALSE; release = 0; pitch = 15360; chorus = 0; switch (mode) { - case 0: + case CRY_MODE_NORMAL: break; - case 1: + case CRY_MODE_DOUBLES: length = 20; release = 225; break; - case 2: + case CRY_MODE_ENCOUNTER: release = 225; pitch = 15600; chorus = 20; volume = 90; break; - case 3: + case CRY_MODE_HIGH_PITCH: length = 50; release = 200; pitch = 15800; chorus = 20; volume = 90; break; - case 4: + case CRY_MODE_ECHO_START: length = 25; - v0 = TRUE; + reverse = TRUE; release = 100; pitch = 15600; chorus = 192; volume = 90; break; - case 5: + case CRY_MODE_FAINT: release = 200; pitch = 14440; break; - case 6: + case CRY_MODE_ECHO_END: release = 220; pitch = 15555; chorus = 192; volume = 70; break; - case 7: + case CRY_MODE_ROAR_1: length = 10; release = 100; pitch = 14848; break; - case 8: + case CRY_MODE_ROAR_2: length = 60; release = 225; pitch = 15616; break; - case 9: + case CRY_MODE_GROWL_1: length = 15; - v0 = TRUE; + reverse = TRUE; release = 125; pitch = 15200; break; - case 10: + case CRY_MODE_GROWL_2: length = 100; release = 225; pitch = 15200; break; - case 12: + case CRY_MODE_WEAK_DOUBLES: length = 20; release = 225; - case 11: + // fallthrough + case CRY_MODE_WEAK: pitch = 15000; break; } @@ -463,28 +468,29 @@ void PlayCryInternal(u16 species, s8 pan, s8 volume, u8 priority, u8 mode) // If you wish to expand pokemon, you need to // append new cases to the switch. species = SpeciesToCryId(species); - index = species & 0x7F; + index = species % 128; table = species / 128; + #define GET_CRY(speciesIndex, tableId, reversed) \ + ((reversed) ? &gCryTable_Reverse[(128 * (tableId)) + (speciesIndex)] : &gCryTable[(128 * (tableId)) + (speciesIndex)]) + switch (table) { case 0: - gMPlay_PokemonCry = SetPokemonCryTone( - v0 ? &gCryTable2[(128 * 0) + index] : &gCryTable[(128 * 0) + index]); + gMPlay_PokemonCry = SetPokemonCryTone(GET_CRY(index, 0, reverse)); break; case 1: - gMPlay_PokemonCry = SetPokemonCryTone( - v0 ? &gCryTable2[(128 * 1) + index] : &gCryTable[(128 * 1) + index]); + gMPlay_PokemonCry = SetPokemonCryTone(GET_CRY(index, 1, reverse)); break; case 2: - gMPlay_PokemonCry = SetPokemonCryTone( - v0 ? &gCryTable2[(128 * 2) + index] : &gCryTable[(128 * 2) + index]); + gMPlay_PokemonCry = SetPokemonCryTone(GET_CRY(index, 2, reverse)); break; case 3: - gMPlay_PokemonCry = SetPokemonCryTone( - v0 ? &gCryTable2[(128 * 3) + index] : &gCryTable[(128 * 3) + index]); + gMPlay_PokemonCry = SetPokemonCryTone(GET_CRY(index, 3, reverse)); break; } + + #undef GET_CRY } bool8 IsCryFinished(void) diff --git a/src/start_menu.c b/src/start_menu.c index ef4c67832a..90230c3ddf 100644 --- a/src/start_menu.c +++ b/src/start_menu.c @@ -1269,11 +1269,11 @@ static void Task_SaveAfterLinkBattle(u8 taskId) break; case 1: SetContinueGameWarpStatusToDynamicWarp(); - FullSaveGame(); + WriteSaveBlock2(); *state = 2; break; case 2: - if (CheckSaveFile()) + if (WriteSaveBlock1Sector()) { ClearContinueGameWarpStatus2(); *state = 3; @@ -1290,11 +1290,11 @@ static void Task_SaveAfterLinkBattle(u8 taskId) DestroyTask(taskId); break; case 5: - CreateTask(Task_LinkSave, 5); + CreateTask(Task_LinkFullSave, 5); *state = 6; break; case 6: - if (!FuncIsActiveTask(Task_LinkSave)) + if (!FuncIsActiveTask(Task_LinkFullSave)) { *state = 3; } @@ -1374,23 +1374,23 @@ static void RemoveSaveInfoWindow(void) static void Task_WaitForBattleTowerLinkSave(u8 taskId) { - if (!FuncIsActiveTask(Task_LinkSave)) + if (!FuncIsActiveTask(Task_LinkFullSave)) { DestroyTask(taskId); EnableBothScriptContexts(); } } -#define tPartialSave data[2] +#define tInBattleTower data[2] void SaveForBattleTowerLink(void) { - u8 taskId = CreateTask(Task_LinkSave, 5); - gTasks[taskId].tPartialSave = TRUE; + u8 taskId = CreateTask(Task_LinkFullSave, 5); + gTasks[taskId].tInBattleTower = TRUE; gTasks[CreateTask(Task_WaitForBattleTowerLinkSave, 6)].data[1] = taskId; } -#undef tPartialSave +#undef tInBattleTower static void HideStartMenuWindow(void) { diff --git a/src/starter_choose.c b/src/starter_choose.c index 403964684f..ca393c4d81 100644 --- a/src/starter_choose.c +++ b/src/starter_choose.c @@ -532,7 +532,7 @@ static void Task_WaitForStarterSprite(u8 taskId) static void Task_AskConfirmStarter(u8 taskId) { - PlayCry1(GetStarterPokemon(gTasks[taskId].tStarterSelection), 0); + PlayCry_Normal(GetStarterPokemon(gTasks[taskId].tStarterSelection), 0); FillWindowPixelBuffer(0, PIXEL_FILL(1)); AddTextPrinterParameterized(0, FONT_NORMAL, gText_ConfirmStarterChoice, 0, 1, 0, NULL); ScheduleBgCopyTilemapToVram(0); diff --git a/src/strings.c b/src/strings.c index 3785766ce9..492a9601d2 100644 --- a/src/strings.c +++ b/src/strings.c @@ -990,7 +990,7 @@ const u8 gText_Unknown[] = _("UNKNOWN"); const u8 gText_Call[] = _("CALL"); const u8 gText_Check[] = _("CHECK"); const u8 gText_Cancel6[] = _("CANCEL"); -const u8 gText_NumberF700[] = _("No. {DYNAMIC 0}"); +const u8 gText_NumberIndex[] = _("No. {DYNAMIC 0}"); const u8 gText_RibbonsF700[] = _("RIBBONS {DYNAMIC 0}"); const u8 gText_PokemonMaleLv2[] = _("{DYNAMIC 0}{COLOR_HIGHLIGHT_SHADOW LIGHT_RED WHITE GREEN}♂{COLOR_HIGHLIGHT_SHADOW DARK_GRAY WHITE LIGHT_GRAY}/{LV}{DYNAMIC 1}{DYNAMIC 2}"); // Unused const u8 gText_PokemonFemaleLv2[] = _("{DYNAMIC 0}{COLOR_HIGHLIGHT_SHADOW LIGHT_GREEN WHITE BLUE}♀{COLOR_HIGHLIGHT_SHADOW DARK_GRAY WHITE LIGHT_GRAY}/{LV}{DYNAMIC 1}{DYNAMIC 2}"); // Unused @@ -1242,11 +1242,11 @@ const u8 gText_ContestantsMonWon[] = _("{STR_VAR_1}'s {STR_VAR_2} won!"); const u8 gText_CommunicationStandby[] = _("Communication standby…"); const u8 gText_ColorDarkGray[] = _("{COLOR DARK_GRAY}"); const u8 gText_ColorDynamic6WhiteDynamic5[] = _("{COLOR_HIGHLIGHT_SHADOW DYNAMIC_COLOR6 WHITE DYNAMIC_COLOR5}"); // Unused -const u8 gText_HighlightDarkGray[] = _("{HIGHLIGHT DARK_GRAY}"); +const u8 gText_HealthboxNickname[] = _("{HIGHLIGHT DARK_GRAY}"); const u8 gText_EmptySpace2[] = _(" "); // Unused -const u8 gText_DynColor2Male[] = _("{COLOR DYNAMIC_COLOR2}♂"); -const u8 gText_DynColor1Female[] = _("{COLOR DYNAMIC_COLOR1}♀"); -const u8 gText_DynColor2[] = _("{COLOR DYNAMIC_COLOR2}"); +const u8 gText_HealthboxGender_Male[] = _("{COLOR DYNAMIC_COLOR2}♂"); +const u8 gText_HealthboxGender_Female[] = _("{COLOR DYNAMIC_COLOR1}♀"); +const u8 gText_HealthboxGender_None[] = _("{COLOR DYNAMIC_COLOR2}"); const u8 gText_Upper[] = _("UPPER"); const u8 gText_Lower[] = _("lower"); const u8 gText_Others[] = _("OTHERS"); diff --git a/src/trade.c b/src/trade.c index 4089cf1dfd..a1e4f7094e 100644 --- a/src/trade.c +++ b/src/trade.c @@ -3398,7 +3398,7 @@ static bool8 AnimateTradeSequenceCable(void) DrawTextOnTradeWindow(0, gStringVar4, 0); if (sTradeData->monSpecies[TRADE_PLAYER] != SPECIES_EGG) - PlayCry1(sTradeData->monSpecies[TRADE_PLAYER], 0); + PlayCry_Normal(sTradeData->monSpecies[TRADE_PLAYER], 0); sTradeData->state = TS_STATE_BYE_BYE; sTradeData->timer = 0; @@ -3869,7 +3869,7 @@ static bool8 AnimateTradeSequenceWireless(void) DrawTextOnTradeWindow(0, gStringVar4, 0); if (sTradeData->monSpecies[TRADE_PLAYER] != SPECIES_EGG) - PlayCry1(sTradeData->monSpecies[TRADE_PLAYER], 0); + PlayCry_Normal(sTradeData->monSpecies[TRADE_PLAYER], 0); sTradeData->state = TS_STATE_BYE_BYE; sTradeData->timer = 0; @@ -4654,30 +4654,29 @@ static void CB2_SaveAndEndTrade(void) MysteryGift_TryIncrementStat(CARD_STAT_NUM_TRADES, gLinkPlayers[GetMultiplayerId() ^ 1].trainerId); SetContinueGameWarpStatusToDynamicWarp(); - sub_8153380(); + LinkFullSave_Init(); gMain.state++; sTradeData->timer = 0; break; case 51: if (++sTradeData->timer == 5) - { gMain.state++; - } break; case 52: - if (sub_81533AC()) + if (LinkFullSave_WriteSector()) { ClearContinueGameWarpStatus2(); gMain.state = 4; } else { + // Save isn't finished, delay again sTradeData->timer = 0; gMain.state = 51; } break; case 4: - sub_81533E0(); + LinkFullSave_ReplaceLastSector(); gMain.state = 40; sTradeData->timer = 0; break; @@ -4709,7 +4708,7 @@ static void CB2_SaveAndEndTrade(void) case 42: if (_IsLinkTaskFinished()) { - sub_8153408(); + LinkFullSave_SetLastSectorSecurity(); gMain.state = 5; } break; @@ -4965,7 +4964,7 @@ static void CB2_SaveAndEndWirelessTrade(void) StringExpandPlaceholders(gStringVar4, gText_SavingDontTurnOffPower); DrawTextOnTradeWindow(0, gStringVar4, 0); IncrementGameStat(GAME_STAT_POKEMON_TRADES); - sub_8153380(); + LinkFullSave_Init(); sTradeData->timer = 0; } break; @@ -4974,7 +4973,7 @@ static void CB2_SaveAndEndWirelessTrade(void) gMain.state = 4; break; case 4: - if (sub_81533AC()) + if (LinkFullSave_WriteSector()) { gMain.state = 5; } @@ -4985,7 +4984,7 @@ static void CB2_SaveAndEndWirelessTrade(void) } break; case 5: - sub_81533E0(); + LinkFullSave_ReplaceLastSector(); gMain.state = 6; sTradeData->timer = 0; break; @@ -5013,7 +5012,7 @@ static void CB2_SaveAndEndWirelessTrade(void) case 8: if (_IsLinkTaskFinished()) { - sub_8153408(); + LinkFullSave_SetLastSectorSecurity(); gMain.state = 9; } break; diff --git a/src/use_pokeblock.c b/src/use_pokeblock.c index 9f8918ba2d..312e2107e8 100644 --- a/src/use_pokeblock.c +++ b/src/use_pokeblock.c @@ -57,14 +57,14 @@ struct UsePokeblockSession u8 mainState; u8 unused1; u8 timer; - u8 statId; + u8 condition; u8 numEnhancements; u8 unused2; bool8 monInTopHalf; - u8 conditionsBeforeBlock[FLAVOR_COUNT]; - u8 conditionsAfterBlock[FLAVOR_COUNT]; - u8 enhancements[FLAVOR_COUNT]; - s16 pokeblockStatBoosts[FLAVOR_COUNT]; + u8 conditionsBeforeBlock[CONDITION_COUNT]; + u8 conditionsAfterBlock[CONDITION_COUNT]; + u8 enhancements[CONDITION_COUNT]; + s16 pokeblockStatBoosts[CONDITION_COUNT]; u8 numSelections; // num in party + 1 (for Cancel) u8 curSelection; bool8 (*loadNewSelection)(void); @@ -73,7 +73,7 @@ struct UsePokeblockSession u8 natureText[34]; }; -// This struct is identical to PokenavMonList, the struct used for managing lists of pokemon in the pokenav +// This struct is identical to PokenavMonListItem, the struct used for managing lists of pokemon in the pokenav // Given that this screen is essentially duplicated in the poknav, this struct was probably the same one with // a more general name/purpose // TODO: Once the pokenav conditions screens are documented, resolve the above @@ -142,7 +142,7 @@ static void LoadAndCreateUpDownSprites(void); static void CalculateNumAdditionalSparkles(u8); static void PrintFirstEnhancement(void); static bool8 TryPrintNextEnhancement(void); -static void BufferEnhancedStatText(u8 *, u8, s16); +static void BufferEnhancedText(u8 *, u8, s16); static void PrintMenuWindowText(const u8 *); static void CalculatePokeblockEffectiveness(struct Pokeblock *, struct Pokemon *); static void SpriteCB_UpDown(struct Sprite *); @@ -178,22 +178,22 @@ static const u32 sGraphData_Tilemap[] = INCBIN_U32("graphics/pokeblock/use_scree // The condition/flavors aren't listed in their normal order in this file, they're listed as shown on the graph going counter-clockwise // Normally they would go Cool/Spicy, Beauty/Dry, Cute/Sweet, Smart/Bitter, Tough/Sour (also graph order, but clockwise) -static const u32 sMonDataConditions[FLAVOR_COUNT] = +static const u32 sConditionToMonData[CONDITION_COUNT] = { - MON_DATA_COOL, - MON_DATA_TOUGH, - MON_DATA_SMART, - MON_DATA_CUTE, - MON_DATA_BEAUTY + [CONDITION_COOL] = MON_DATA_COOL, + [CONDITION_TOUGH] = MON_DATA_TOUGH, + [CONDITION_SMART] = MON_DATA_SMART, + [CONDITION_CUTE] = MON_DATA_CUTE, + [CONDITION_BEAUTY] = MON_DATA_BEAUTY }; -static const u8 sFlavors[FLAVOR_COUNT] = +static const u8 sConditionToFlavor[CONDITION_COUNT] = { - FLAVOR_SPICY, - FLAVOR_SOUR, - FLAVOR_BITTER, - FLAVOR_SWEET, - FLAVOR_DRY + [CONDITION_COOL] = FLAVOR_SPICY, + [CONDITION_TOUGH] = FLAVOR_SOUR, + [CONDITION_SMART] = FLAVOR_BITTER, + [CONDITION_CUTE] = FLAVOR_SWEET, + [CONDITION_BEAUTY] = FLAVOR_DRY }; static const u8 sNatureTextColors[] = @@ -286,13 +286,13 @@ static const struct WindowTemplate sUsePokeblockYesNoWinTemplate = .baseBlock = 0x83 }; -static const u8 *const sContestStatNames[] = +static const u8 *const sConditionNames[CONDITION_COUNT] = { - gText_Coolness, - gText_Toughness, - gText_Smartness, - gText_Cuteness, - gText_Beauty3 + [CONDITION_COOL] = gText_Coolness, + [CONDITION_TOUGH] = gText_Toughness, + [CONDITION_SMART] = gText_Smartness, + [CONDITION_CUTE] = gText_Cuteness, + [CONDITION_BEAUTY] = gText_Beauty3 }; static const struct SpriteSheet sSpriteSheet_UpDown = @@ -305,13 +305,13 @@ static const struct SpritePalette sSpritePalette_UpDown = gUsePokeblockUpDown_Pal, TAG_UP_DOWN }; -static const s16 sUpDownCoordsOnGraph[FLAVOR_COUNT][2] = +static const s16 sUpDownCoordsOnGraph[CONDITION_COUNT][2] = { - {156, 36}, - {117, 59}, - {117, 118}, - {197, 118}, - {197, 59} + [CONDITION_COOL] = {156, 36}, + [CONDITION_TOUGH] = {117, 59}, + [CONDITION_SMART] = {117, 118}, + [CONDITION_CUTE] = {197, 118}, + [CONDITION_BEAUTY] = {197, 59} }; static const struct OamData sOam_UpDown = @@ -471,7 +471,7 @@ static void VBlankCB_UsePokeblockMenu(void) LoadOam(); ProcessSpriteCopyRequests(); TransferPlttBuffer(); - sub_81D2108(&sMenu->graph); + ConditionGraph_Draw(&sMenu->graph); ScanlineEffect_InitHBlankDmaTransfer(); } @@ -487,7 +487,7 @@ static void LoadUsePokeblockMenu(void) { case 0: sMenu->curMonSpriteId = SPRITE_NONE; - InitConditionGraphData(&sMenu->graph); + ConditionGraph_Init(&sMenu->graph); sInfo->mainState++; break; case 1: @@ -537,19 +537,19 @@ static void LoadUsePokeblockMenu(void) sInfo->mainState++; break; case 11: - sub_81D2754(sMenu->graph.stat[0], sMenu->graph.unk14[0]); - InitConditionGraphState(&sMenu->graph); + ConditionGraph_CalcPositions(sMenu->graph.conditions[0], sMenu->graph.savedPositions[0]); + ConditionGraph_InitResetScanline(&sMenu->graph); sInfo->mainState++; break; case 12: - if (!SetupConditionGraphScanlineParams(&sMenu->graph)) + if (!ConditionGraph_ResetScanline(&sMenu->graph)) { - sub_81D1F84(&sMenu->graph, sMenu->graph.unk14[0], sMenu->graph.unk14[0]); + ConditionGraph_SetNewPositions(&sMenu->graph, sMenu->graph.savedPositions[0], sMenu->graph.savedPositions[0]); sInfo->mainState++; } break; case 13: - sub_81D2230(&sMenu->graph); + ConditionGraph_Update(&sMenu->graph); sInfo->mainState++; break; case 14: @@ -767,8 +767,6 @@ static void ShowUsePokeblockMenuForResults(void) static void ShowPokeblockResults(void) { - u8 var; - switch (sInfo->mainState) { case 0: @@ -783,14 +781,13 @@ static void ShowPokeblockResults(void) break; case 2: CalculateConditionEnhancements(); - sub_81D2754(sInfo->conditionsAfterBlock, sMenu->graph.unk14[3]); - sub_81D1F84(&sMenu->graph, sMenu->graph.unk14[sMenu->curLoadId], sMenu->graph.unk14[3]); + ConditionGraph_CalcPositions(sInfo->conditionsAfterBlock, sMenu->graph.savedPositions[CONDITION_GRAPH_LOAD_MAX - 1]); + ConditionGraph_SetNewPositions(&sMenu->graph, sMenu->graph.savedPositions[sMenu->curLoadId], sMenu->graph.savedPositions[CONDITION_GRAPH_LOAD_MAX - 1]); LoadAndCreateUpDownSprites(); sInfo->mainState++; break; case 3: - var = TransitionConditionGraph(&sMenu->graph); - if (!var) + if (!ConditionGraph_TryUpdate(&sMenu->graph)) { CalculateNumAdditionalSparkles(GetPartyIdFromSelectionId(sMenu->info.curSelection)); if (sMenu->info.curSelection != sMenu->info.numSelections - 1) @@ -906,16 +903,16 @@ static void PrintFirstEnhancement(void) DrawTextBorderOuter(WIN_TEXT, 151, 14); FillWindowPixelBuffer(WIN_TEXT, 17); - for (sInfo->statId = 0; sInfo->statId < FLAVOR_COUNT; sInfo->statId++) + for (sInfo->condition = 0; sInfo->condition < CONDITION_COUNT; sInfo->condition++) { - if (sInfo->enhancements[sInfo->statId] != 0) + if (sInfo->enhancements[sInfo->condition] != 0) break; } - if (sInfo->statId < FLAVOR_COUNT) - BufferEnhancedStatText(gStringVar4, sInfo->statId, sInfo->enhancements[sInfo->statId]); + if (sInfo->condition < CONDITION_COUNT) + BufferEnhancedText(gStringVar4, sInfo->condition, sInfo->enhancements[sInfo->condition]); else - BufferEnhancedStatText(gStringVar4, sInfo->statId, 0); + BufferEnhancedText(gStringVar4, sInfo->condition, 0); PrintMenuWindowText(gStringVar4); PutWindowTilemap(WIN_TEXT); @@ -928,20 +925,20 @@ static bool8 TryPrintNextEnhancement(void) while (1) { - sInfo->statId++; - if (sInfo->statId < FLAVOR_COUNT) + sInfo->condition++; + if (sInfo->condition < CONDITION_COUNT) { - if (sInfo->enhancements[sInfo->statId] != 0) + if (sInfo->enhancements[sInfo->condition] != 0) break; } else { - sInfo->statId = FLAVOR_COUNT; + sInfo->condition = CONDITION_COUNT; return FALSE; } } - BufferEnhancedStatText(gStringVar4, sInfo->statId, sInfo->enhancements[sInfo->statId]); + BufferEnhancedText(gStringVar4, sInfo->condition, sInfo->enhancements[sInfo->condition]); PrintMenuWindowText(gStringVar4); CopyWindowToVram(WIN_TEXT, COPYWIN_GFX); @@ -969,7 +966,7 @@ static void PrintMenuWindowText(const u8 *message) AddTextPrinterParameterized(WIN_TEXT, FONT_NORMAL, gStringVar4, 0, 1, 0, NULL); } -static void BufferEnhancedStatText(u8 *dest, u8 statId, s16 enhancement) +static void BufferEnhancedText(u8 *dest, u8 condition, s16 enhancement) { switch (enhancement) { @@ -979,7 +976,7 @@ static void BufferEnhancedStatText(u8 *dest, u8 statId, s16 enhancement) case -32768 ... -1: // if < 0 if (enhancement) dest[(u16)enhancement] += 0; // something you can't imagine - StringCopy(dest, sContestStatNames[statId]); + StringCopy(dest, sConditionNames[condition]); StringAppend(dest, gText_WasEnhanced); break; case 0: @@ -992,36 +989,36 @@ static void GetMonConditions(struct Pokemon *mon, u8 *data) { u16 i; - for (i = 0; i < FLAVOR_COUNT; i++) - data[i] = GetMonData(mon, sMonDataConditions[i]); + for (i = 0; i < CONDITION_COUNT; i++) + data[i] = GetMonData(mon, sConditionToMonData[i]); } static void AddPokeblockToConditions(struct Pokeblock *pokeblock, struct Pokemon *mon) { u16 i; - s16 cstat; + s16 stat; u8 data; - if (GetMonData(mon, MON_DATA_SHEEN) != 255) + if (GetMonData(mon, MON_DATA_SHEEN) != MAX_SHEEN) { CalculatePokeblockEffectiveness(pokeblock, mon); - for (i = 0; i < FLAVOR_COUNT; i++) + for (i = 0; i < CONDITION_COUNT; i++) { - data = GetMonData(mon, sMonDataConditions[i]); - cstat = data + sInfo->pokeblockStatBoosts[i]; - if (cstat < 0) - cstat = 0; - if (cstat > 255) - cstat = 255; - data = cstat; - SetMonData(mon, sMonDataConditions[i], &data); + data = GetMonData(mon, sConditionToMonData[i]); + stat = data + sInfo->pokeblockStatBoosts[i]; + if (stat < 0) + stat = 0; + if (stat > MAX_CONDITION) + stat = MAX_CONDITION; + data = stat; + SetMonData(mon, sConditionToMonData[i], &data); } - cstat = (u8)(GetMonData(mon, MON_DATA_SHEEN)) + pokeblock->feel; - if (cstat > 255) - cstat = 255; + stat = (u8)(GetMonData(mon, MON_DATA_SHEEN)) + pokeblock->feel; + if (stat > MAX_SHEEN) + stat = MAX_SHEEN; - data = cstat; + data = stat; SetMonData(mon, MON_DATA_SHEEN, &data); } } @@ -1035,19 +1032,19 @@ static void CalculateConditionEnhancements(void) GetMonConditions(mon, sInfo->conditionsBeforeBlock); AddPokeblockToConditions(sInfo->pokeblock, mon); GetMonConditions(mon, sInfo->conditionsAfterBlock); - for (i = 0; i < FLAVOR_COUNT; i++) + for (i = 0; i < CONDITION_COUNT; i++) sInfo->enhancements[i] = sInfo->conditionsAfterBlock[i] - sInfo->conditionsBeforeBlock[i]; } static void CalculatePokeblockEffectiveness(struct Pokeblock *pokeblock, struct Pokemon *mon) { - s8 i, direction, taste; + s8 i, direction, flavor; - sInfo->pokeblockStatBoosts[0] = pokeblock->spicy; - sInfo->pokeblockStatBoosts[1] = pokeblock->sour; - sInfo->pokeblockStatBoosts[2] = pokeblock->bitter; - sInfo->pokeblockStatBoosts[3] = pokeblock->sweet; - sInfo->pokeblockStatBoosts[4] = pokeblock->dry; + sInfo->pokeblockStatBoosts[CONDITION_COOL] = pokeblock->spicy; + sInfo->pokeblockStatBoosts[CONDITION_TOUGH] = pokeblock->sour; + sInfo->pokeblockStatBoosts[CONDITION_SMART] = pokeblock->bitter; + sInfo->pokeblockStatBoosts[CONDITION_CUTE] = pokeblock->sweet; + sInfo->pokeblockStatBoosts[CONDITION_BEAUTY] = pokeblock->dry; if (gPokeblockGain > 0) direction = 1; @@ -1056,7 +1053,7 @@ static void CalculatePokeblockEffectiveness(struct Pokeblock *pokeblock, struct else return; - for (i = 0; i < FLAVOR_COUNT; i++) + for (i = 0; i < CONDITION_COUNT; i++) { s16 amount = sInfo->pokeblockStatBoosts[i]; s8 boost = amount / 10; @@ -1064,9 +1061,9 @@ static void CalculatePokeblockEffectiveness(struct Pokeblock *pokeblock, struct if (amount % 10 >= 5) // round to the nearest boost++; - taste = GetMonFlavorRelation(mon, sFlavors[i]); - if (taste == direction) - sInfo->pokeblockStatBoosts[i] += boost * taste; + flavor = GetMonFlavorRelation(mon, sConditionToFlavor[i]); + if (flavor == direction) + sInfo->pokeblockStatBoosts[i] += boost * flavor; } } @@ -1075,7 +1072,7 @@ static bool8 IsSheenMaxed(void) if (GetBoxOrPartyMonData(sMenu->party[sMenu->info.curSelection].boxId, sMenu->party[sMenu->info.curSelection].monId, MON_DATA_SHEEN, - NULL) == 255) + NULL) == MAX_SHEEN) return TRUE; else return FALSE; @@ -1125,7 +1122,7 @@ static void LoadAndCreateUpDownSprites(void) LoadSpritePalette(&sSpritePalette_UpDown); sInfo->numEnhancements = 0; - for (i = 0; i < FLAVOR_COUNT; i++) + for (i = 0; i < CONDITION_COUNT; i++) { if (sInfo->enhancements[i] != 0) { @@ -1368,7 +1365,7 @@ static bool8 LoadUsePokeblockMenuGfx(void) LoadBgTilemap(2, sMenu->tilemapBuffer, 1280, 0); LoadPalette(gConditionGraphData_Pal, 48, 32); LoadPalette(gConditionText_Pal, 240, 32); - SetConditionGraphIOWindows(2); + ConditionGraph_InitWindow(2); break; default: sMenu->info.helperState = 0; @@ -1419,7 +1416,7 @@ static void UpdateSelection(bool8 up) else newLoadId = sMenu->nextLoadId; - sub_81D1F84(&sMenu->graph, sMenu->graph.unk14[sMenu->curLoadId], sMenu->graph.unk14[newLoadId]); + ConditionGraph_SetNewPositions(&sMenu->graph, sMenu->graph.savedPositions[sMenu->curLoadId], sMenu->graph.savedPositions[newLoadId]); if (sMenu->info.curSelection == sMenu->info.numSelections - 1) startedOnMon = FALSE; // moving off of Cancel @@ -1487,7 +1484,7 @@ static bool8 LoadNewSelection_CancelToMon(void) sMenu->info.helperState++; break; case 2: - if (!TryUpdateConditionMonTransitionOn(&sMenu->graph, &sMenu->curMonXOffset)) + if (!ConditionMenu_UpdateMonEnter(&sMenu->graph, &sMenu->curMonXOffset)) { // Load the new adjacent pokemon (not the one being shown) LoadMonInfo(sMenu->toLoadSelection, sMenu->toLoadId); @@ -1514,7 +1511,7 @@ static bool8 LoadNewSelection_MonToCancel(void) switch (sMenu->info.helperState) { case 0: - if (!TryUpdateConditionMonTransitionOff(&sMenu->graph, &sMenu->curMonXOffset)) + if (!ConditionMenu_UpdateMonExit(&sMenu->graph, &sMenu->curMonXOffset)) sMenu->info.helperState++; break; case 1: @@ -1538,7 +1535,7 @@ static bool8 LoadNewSelection_MonToMon(void) switch (sMenu->info.helperState) { case 0: - TransitionConditionGraph(&sMenu->graph); + ConditionGraph_TryUpdate(&sMenu->graph); if (!MoveConditionMonOffscreen(&sMenu->curMonXOffset)) { UpdateMonPic(sMenu->curLoadId); @@ -1550,7 +1547,7 @@ static bool8 LoadNewSelection_MonToMon(void) sMenu->info.helperState++; break; case 2: - if (!TryUpdateConditionMonTransitionOn(&sMenu->graph, &sMenu->curMonXOffset)) + if (!ConditionMenu_UpdateMonEnter(&sMenu->graph, &sMenu->curMonXOffset)) { // Load the new adjacent pokemon (not the one being shown) LoadMonInfo(sMenu->toLoadSelection, sMenu->toLoadId); @@ -1580,9 +1577,9 @@ static void SpriteCB_MonPic(struct Sprite *sprite) static void SpriteCB_SelectionIconPokeball(struct Sprite *sprite) { if (sprite->data[0] == sMenu->info.curSelection) - StartSpriteAnim(sprite, 0); + StartSpriteAnim(sprite, CONDITION_ICON_SELECTED); else - StartSpriteAnim(sprite, 1); + StartSpriteAnim(sprite, CONDITION_ICON_UNSELECTED); } static void SpriteCB_SelectionIconCancel(struct Sprite *sprite) @@ -1599,10 +1596,7 @@ static void SpriteCB_SelectionIconCancel(struct Sprite *sprite) static void CalculateNumAdditionalSparkles(u8 monIndex) { u8 sheen = GetMonData(&gPlayerParty[monIndex], MON_DATA_SHEEN); - - sMenu->numSparkles[sMenu->curLoadId] = (sheen != 255) - ? sheen / (255 / (MAX_CONDITION_SPARKLES - 1) + 1) - : MAX_CONDITION_SPARKLES - 1; + sMenu->numSparkles[sMenu->curLoadId] = GET_NUM_CONDITION_SPARKLES(sheen); } static void LoadConditionGfx(void) diff --git a/sym_bss.txt b/sym_bss.txt index 3166aee455..75da960bf9 100644 --- a/sym_bss.txt +++ b/sym_bss.txt @@ -50,8 +50,8 @@ .include "src/multiboot.o" .include "src/mirage_tower.o" .include "src/berry_fix_program.o" - .include "src/pokenav_conditions_2.o" - .include "src/pokenav_ribbons_2.o" + .include "src/pokenav_conditions_gfx.o" + .include "src/pokenav_ribbons_summary.o" .include "src/ereader_helpers.o" .include "src/faraway_island.o" .include "src/m4a_1.o" diff --git a/sym_ewram.txt b/sym_ewram.txt index 8dae9d4592..3e2c3b28da 100644 --- a/sym_ewram.txt +++ b/sym_ewram.txt @@ -143,7 +143,7 @@ .include "src/pokedex_area_region_map.o" .include "src/battle_pyramid_bag.o" .include "src/pokenav.o" - .include "src/pokenav_match_call_ui.o" + .include "src/pokenav_list.o" .include "src/menu_specialized.o" .include "src/faraway_island.o" .include "src/trainer_hill.o"