summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMarcus Huderle <huderlem@gmail.com>2017-10-09 10:23:23 -0700
committerMarcus Huderle <huderlem@gmail.com>2017-10-09 10:40:04 -0700
commit72beb410f423cafd35989c0b8dd4c52860cf80f8 (patch)
tree155aa1e2c39ebd504e095bc8c1dc218aad3acdc4 /src
parenta871ce87a74421df64a9ad381d37dc32ff9bdc6d (diff)
parent3e03d362fae398fa56c4a6e45d7b999772d0803f (diff)
Merge remote-tracking branch 'upstream/master' into party_menu
Diffstat (limited to 'src')
-rw-r--r--src/battle/battle_2.c (renamed from src/battle_2.c)8
-rw-r--r--src/battle/battle_3.c (renamed from src/battle_3.c)2
-rw-r--r--src/battle/battle_4.c (renamed from src/battle_4.c)1252
-rw-r--r--src/battle/battle_7.c (renamed from src/battle_7.c)42
-rw-r--r--src/battle/battle_ai.c (renamed from src/battle_ai.c)4
-rw-r--r--src/battle/battle_anim.c (renamed from src/battle_anim.c)162
-rw-r--r--src/battle/battle_anim_807B69C.c (renamed from src/battle_anim_807B69C.c)14
-rw-r--r--src/battle/battle_anim_80A7E7C.c (renamed from src/battle_anim_80A7E7C.c)92
-rw-r--r--src/battle/battle_anim_80CA710.c18
-rw-r--r--src/battle/battle_controller_linkopponent.c (renamed from src/battle_controller_linkopponent.c)10
-rw-r--r--src/battle/battle_controller_linkpartner.c (renamed from src/battle_controller_linkpartner.c)10
-rw-r--r--src/battle/battle_controller_opponent.c (renamed from src/battle_controller_opponent.c)10
-rw-r--r--src/battle/battle_controller_player.c (renamed from src/battle_controller_player.c)10
-rw-r--r--src/battle/battle_controller_safari.c (renamed from src/battle_controller_safari.c)0
-rw-r--r--src/battle/battle_controller_wally.c (renamed from src/battle_controller_wally.c)4
-rw-r--r--src/battle/battle_interface.c (renamed from src/battle_interface.c)2
-rw-r--r--src/battle/battle_message.c (renamed from src/battle_message.c)0
-rw-r--r--src/battle/battle_party_menu.c (renamed from src/battle_party_menu.c)0
-rw-r--r--src/battle/battle_records.c (renamed from src/battle_records.c)0
-rw-r--r--src/battle/battle_setup.c (renamed from src/battle_setup.c)2
-rw-r--r--src/battle/battle_transition.c (renamed from src/battle_transition.c)0
-rw-r--r--src/battle/calculate_base_damage.c (renamed from src/calculate_base_damage.c)0
-rw-r--r--src/battle/contest_link_80C857C.c (renamed from src/contest_link_80C857C.c)0
-rw-r--r--src/battle/pokeball.c (renamed from src/pokeball.c)0
-rw-r--r--src/battle/post_battle_event_funcs.c (renamed from src/post_battle_event_funcs.c)0
-rw-r--r--src/battle/reshow_battle_screen.c (renamed from src/reshow_battle_screen.c)0
-rw-r--r--src/battle/smokescreen.c (renamed from src/smokescreen.c)0
-rw-r--r--src/daycare.c350
-rw-r--r--src/debug/matsuda_debug_menu.c (renamed from src/matsuda_debug_menu.c)0
-rw-r--r--src/debug/mori_debug_menu.c (renamed from src/mori_debug_menu.c)8
-rw-r--r--src/debug/sound_check_menu.c1300
-rw-r--r--src/debug/unknown_debug_menu.c (renamed from src/unknown_debug_menu.c)0
-rw-r--r--src/engine/blend_palette.c (renamed from src/blend_palette.c)0
-rw-r--r--src/engine/cable_club.c (renamed from src/cable_club.c)4
-rw-r--r--src/engine/clear_save_data_menu.c (renamed from src/clear_save_data_menu.c)0
-rw-r--r--src/engine/clock.c (renamed from src/clock.c)0
-rw-r--r--src/engine/decompress.c (renamed from src/decompress.c)2
-rw-r--r--src/engine/link.c (renamed from src/link.c)0
-rw-r--r--src/engine/load_save.c (renamed from src/load_save.c)0
-rw-r--r--src/engine/main.c (renamed from src/main.c)0
-rw-r--r--src/engine/main_menu.c (renamed from src/main_menu.c)0
-rw-r--r--src/engine/menu.c (renamed from src/menu.c)0
-rw-r--r--src/engine/menu_cursor.c (renamed from src/menu_cursor.c)0
-rw-r--r--src/engine/mystery_event_menu.c (renamed from src/mystery_event_menu.c)0
-rw-r--r--src/engine/mystery_event_script.c (renamed from src/mystery_event_script.c)4
-rw-r--r--src/engine/name_string_util.c (renamed from src/name_string_util.c)0
-rw-r--r--src/engine/naming_screen.c (renamed from src/naming_screen.c)0
-rw-r--r--src/engine/option_menu.c (renamed from src/option_menu.c)0
-rw-r--r--src/engine/palette.c (renamed from src/palette.c)2
-rw-r--r--src/engine/play_time.c (renamed from src/play_time.c)0
-rw-r--r--src/engine/record_mixing.c (renamed from src/record_mixing.c)32
-rw-r--r--src/engine/reset_rtc_screen.c (renamed from src/reset_rtc_screen.c)0
-rw-r--r--src/engine/rng.c (renamed from src/rng.c)0
-rw-r--r--src/engine/rtc.c (renamed from src/rtc.c)0
-rw-r--r--src/engine/save.c (renamed from src/save.c)0
-rw-r--r--src/engine/save_failed_screen.c (renamed from src/save_failed_screen.c)0
-rw-r--r--src/engine/save_menu_util.c (renamed from src/save_menu_util.c)0
-rw-r--r--src/engine/script.c (renamed from src/script.c)68
-rw-r--r--src/engine/sound.c (renamed from src/sound.c)2
-rw-r--r--src/engine/sprite.c (renamed from src/sprite.c)0
-rw-r--r--src/engine/string_util.c (renamed from src/string_util.c)0
-rw-r--r--src/engine/task.c (renamed from src/task.c)0
-rw-r--r--src/engine/text.c (renamed from src/text.c)20
-rw-r--r--src/engine/text_window.c (renamed from src/text_window.c)0
-rw-r--r--src/engine/tileset_anim.c (renamed from src/tileset_anim.c)0
-rw-r--r--src/engine/time_events.c (renamed from src/time_events.c)0
-rw-r--r--src/engine/trade.c5715
-rw-r--r--src/engine/trainer_card.c (renamed from src/trainer_card.c)0
-rw-r--r--src/engine/trig.c (renamed from src/trig.c)0
-rw-r--r--src/engine/util.c (renamed from src/util.c)0
-rw-r--r--src/field/bard_music.c (renamed from src/bard_music.c)0
-rw-r--r--src/field/berry.c (renamed from src/berry.c)0
-rw-r--r--src/field/berry_tag_screen.c (renamed from src/berry_tag_screen.c)0
-rw-r--r--src/field/bike.c (renamed from src/bike.c)8
-rw-r--r--src/field/birch_pc.c (renamed from src/birch_pc.c)8
-rw-r--r--src/field/braille_puzzles.c (renamed from src/braille_puzzles.c)0
-rw-r--r--src/field/choose_party.c (renamed from src/choose_party.c)0
-rw-r--r--src/field/coins.c (renamed from src/coins.c)26
-rw-r--r--src/field/coord_event_weather.c (renamed from src/coord_event_weather.c)0
-rw-r--r--src/field/daycare.c1690
-rw-r--r--src/field/decoration.c (renamed from src/decoration.c)6
-rw-r--r--src/field/decoration_inventory.c (renamed from src/decoration_inventory.c)2
-rw-r--r--src/field/dewford_trend.c (renamed from src/dewford_trend.c)0
-rw-r--r--src/field/diploma.c (renamed from src/diploma.c)0
-rw-r--r--src/field/easy_chat.c (renamed from src/easy_chat.c)4
-rw-r--r--src/field/event_data.c (renamed from src/event_data.c)4
-rw-r--r--src/field/field_camera.c (renamed from src/field_camera.c)0
-rw-r--r--src/field/field_control_avatar.c (renamed from src/field_control_avatar.c)0
-rw-r--r--src/field/field_door.c (renamed from src/field_door.c)0
-rw-r--r--src/field/field_effect.c (renamed from src/field_effect.c)21
-rw-r--r--src/field/field_effect_helpers.c1632
-rw-r--r--src/field/field_fadetransition.c (renamed from src/field_fadetransition.c)14
-rw-r--r--src/field/field_ground_effect.c (renamed from src/field_ground_effect.c)13
-rw-r--r--src/field/field_map_obj.c (renamed from src/field_map_obj.c)472
-rw-r--r--src/field/field_map_obj_helpers.c (renamed from src/field_map_obj_helpers.c)2
-rw-r--r--src/field/field_message_box.c (renamed from src/field_message_box.c)0
-rw-r--r--src/field/field_player_avatar.c (renamed from src/field_player_avatar.c)10
-rw-r--r--src/field/field_poison.c (renamed from src/field_poison.c)0
-rw-r--r--src/field/field_region_map.c (renamed from src/field_region_map.c)0
-rw-r--r--src/field/field_screen_effect.c (renamed from src/field_screen_effect.c)2
-rw-r--r--src/field/field_special_scene.c (renamed from src/field_special_scene.c)2
-rw-r--r--src/field/field_specials.c (renamed from src/field_specials.c)6
-rw-r--r--src/field/field_tasks.c (renamed from src/field_tasks.c)8
-rw-r--r--src/field/field_weather.c (renamed from src/field_weather.c)2
-rw-r--r--src/field/fieldmap.c (renamed from src/fieldmap.c)12
-rw-r--r--src/field/fldeff_cut.c (renamed from src/fldeff_cut.c)0
-rw-r--r--src/field/fldeff_flash.c (renamed from src/fldeff_flash.c)0
-rw-r--r--src/field/fldeff_softboiled.c (renamed from src/fldeff_softboiled.c)0
-rw-r--r--src/field/fldeff_strength.c (renamed from src/fldeff_strength.c)0
-rw-r--r--src/field/fldeff_sweetscent.c (renamed from src/fldeff_sweetscent.c)0
-rw-r--r--src/field/fldeff_teleport.c (renamed from src/fldeff_teleport.c)0
-rw-r--r--src/field/heal_location.c (renamed from src/heal_location.c)0
-rw-r--r--src/field/hof_pc.c (renamed from src/hof_pc.c)2
-rw-r--r--src/field/item.c (renamed from src/item.c)8
-rw-r--r--src/field/item_menu.c (renamed from src/item_menu.c)6
-rw-r--r--src/field/item_use.c (renamed from src/item_use.c)34
-rw-r--r--src/field/landmark.c (renamed from src/landmark.c)0
-rw-r--r--src/field/lottery_corner.c (renamed from src/lottery_corner.c)0
-rw-r--r--src/field/map_name_popup.c (renamed from src/map_name_popup.c)0
-rw-r--r--src/field/map_obj_lock.c (renamed from src/map_obj_lock.c)0
-rw-r--r--src/field/mauville_man.c (renamed from src/mauville_man.c)0
-rw-r--r--src/field/menu_helpers.c (renamed from src/menu_helpers.c)0
-rw-r--r--src/field/metatile_behavior.c (renamed from src/metatile_behavior.c)0
-rw-r--r--src/field/money.c (renamed from src/money.c)0
-rw-r--r--src/field/overworld.c (renamed from src/overworld.c)178
-rw-r--r--src/field/party_menu.c (renamed from src/party_menu.c)0
-rw-r--r--src/field/player_pc.c (renamed from src/player_pc.c)0
-rw-r--r--src/field/pokeblock.c (renamed from src/pokeblock.c)4
-rw-r--r--src/field/pokenav.c (renamed from src/pokenav.c)2
-rw-r--r--src/field/region_map.c (renamed from src/region_map.c)6
-rw-r--r--src/field/roamer.c (renamed from src/roamer.c)0
-rw-r--r--src/field/rotating_gate.c (renamed from src/rotating_gate.c)0
-rw-r--r--src/field/safari_zone.c (renamed from src/safari_zone.c)0
-rw-r--r--src/field/scrcmd.c (renamed from src/scrcmd.c)650
-rw-r--r--src/field/script_menu.c (renamed from src/script_menu.c)0
-rw-r--r--src/field/script_movement.c (renamed from src/script_movement.c)0
-rw-r--r--src/field/secret_base.c (renamed from src/secret_base.c)2
-rw-r--r--src/field/shop.c (renamed from src/shop.c)2
-rw-r--r--src/field/slot_machine.c (renamed from src/slot_machine.c)2
-rw-r--r--src/field/start_menu.c (renamed from src/start_menu.c)0
-rw-r--r--src/field/starter_choose.c (renamed from src/starter_choose.c)0
-rw-r--r--src/field/trader.c (renamed from src/trader.c)0
-rw-r--r--src/field/trainer_see.c (renamed from src/trainer_see.c)0
-rw-r--r--src/field/tv.c (renamed from src/tv.c)4
-rw-r--r--src/field/use_pokeblock.c (renamed from src/use_pokeblock.c)2
-rw-r--r--src/field/wallclock.c (renamed from src/wallclock.c)0
-rw-r--r--src/field/wild_encounter.c (renamed from src/wild_encounter.c)0
-rw-r--r--src/libs/agb_flash.c (renamed from src/agb_flash.c)0
-rw-r--r--src/libs/agb_flash_1m.c (renamed from src/agb_flash_1m.c)0
-rw-r--r--src/libs/agb_flash_le.c (renamed from src/agb_flash_le.c)0
-rw-r--r--src/libs/agb_flash_mx.c (renamed from src/agb_flash_mx.c)0
-rw-r--r--src/libs/libc.c (renamed from src/libc.c)0
-rw-r--r--src/libs/m4a_2.c (renamed from src/m4a_2.c)0
-rw-r--r--src/libs/m4a_4.c (renamed from src/m4a_4.c)0
-rw-r--r--src/libs/m4a_tables.c (renamed from src/m4a_tables.c)0
-rw-r--r--src/libs/siirtc.c (renamed from src/siirtc.c)0
-rw-r--r--src/pokemon/learn_move.c (renamed from src/learn_move.c)0
-rw-r--r--src/pokemon/mail.c (renamed from src/mail.c)0
-rw-r--r--src/pokemon/mail_data.c (renamed from src/mail_data.c)0
-rw-r--r--src/pokemon/mon_markings.c (renamed from src/mon_markings.c)0
-rw-r--r--src/pokemon/pokeblock_feed.c (renamed from src/pokeblock_feed.c)6
-rw-r--r--src/pokemon/pokedex.c (renamed from src/pokedex.c)106
-rw-r--r--src/pokemon/pokedex_cry_screen.c (renamed from src/pokedex_cry_screen.c)0
-rw-r--r--src/pokemon/pokemon_1.c (renamed from src/pokemon_1.c)4
-rw-r--r--src/pokemon/pokemon_2.c (renamed from src/pokemon_2.c)0
-rw-r--r--src/pokemon/pokemon_3.c (renamed from src/pokemon_3.c)24
-rw-r--r--src/pokemon/pokemon_data.c (renamed from src/pokemon_data.c)0
-rw-r--r--src/pokemon/pokemon_icon.c (renamed from src/pokemon_icon.c)0
-rw-r--r--src/pokemon/pokemon_menu.c (renamed from src/pokemon_menu.c)0
-rw-r--r--src/pokemon/pokemon_size_record.c (renamed from src/pokemon_size_record.c)0
-rw-r--r--src/pokemon/pokemon_storage_system.c (renamed from src/pokemon_storage_system.c)0
-rw-r--r--src/pokemon/pokemon_summary_screen.c (renamed from src/pokemon_summary_screen.c)0
-rw-r--r--src/rom6.c2
-rw-r--r--src/rom_8077ABC.c204
-rw-r--r--src/scene/berry_blender.c (renamed from src/berry_blender.c)6
-rw-r--r--src/scene/contest_painting.c (renamed from src/contest_painting.c)4
-rw-r--r--src/scene/credits.c (renamed from src/credits.c)4
-rw-r--r--src/scene/cute_sketch.c (renamed from src/cute_sketch.c)0
-rw-r--r--src/scene/egg_hatch.c (renamed from src/egg_hatch.c)18
-rw-r--r--src/scene/evolution_graphics.c (renamed from src/evolution_graphics.c)0
-rw-r--r--src/scene/evolution_scene.c (renamed from src/evolution_scene.c)100
-rw-r--r--src/scene/hall_of_fame.c (renamed from src/hall_of_fame.c)2
-rw-r--r--src/scene/intro.c (renamed from src/intro.c)2
-rwxr-xr-xsrc/scene/intro_credits_graphics.c (renamed from src/intro_credits_graphics.c)0
-rw-r--r--src/scene/new_game.c (renamed from src/new_game.c)2
-rw-r--r--src/scene/title_screen.c (renamed from src/title_screen.c)0
-rw-r--r--src/script_pokemon_util_80C4BF0.c6
-rw-r--r--src/sound_check_menu.c2199
-rw-r--r--src/trade.c88
-rw-r--r--src/unused_8124F94.c6
190 files changed, 12014 insertions, 4764 deletions
diff --git a/src/battle_2.c b/src/battle/battle_2.c
index 3cdea07be..770aa1209 100644
--- a/src/battle_2.c
+++ b/src/battle/battle_2.c
@@ -1924,14 +1924,14 @@ void sub_8011384(void)
}
if (GetBankSide(gActiveBank) == 1
&& !(gBattleTypeFlags & (BATTLE_TYPE_EREADER_TRAINER | BATTLE_TYPE_BATTLE_TOWER | BATTLE_TYPE_LINK)))
- GetNationalPokedexFlag(SpeciesToNationalPokedexNum(gBattleMons[gActiveBank].species), 2);
+ GetSetPokedexFlag(SpeciesToNationalPokedexNum(gBattleMons[gActiveBank].species), 2);
}
else
{
if (GetBankSide(gActiveBank) == 1
&& !(gBattleTypeFlags & (BATTLE_TYPE_EREADER_TRAINER | BATTLE_TYPE_BATTLE_TOWER | BATTLE_TYPE_LINK)))
{
- GetNationalPokedexFlag(SpeciesToNationalPokedexNum(gBattleMons[gActiveBank].species), 2);
+ GetSetPokedexFlag(SpeciesToNationalPokedexNum(gBattleMons[gActiveBank].species), 2);
EmitLoadPokeSprite(0);
MarkBufferBankForExecution(gActiveBank);
}
@@ -2086,7 +2086,7 @@ void bc_801362C(void)
{
if (GetBankSide(gActiveBank) == 1
&& !(gBattleTypeFlags & (BATTLE_TYPE_EREADER_TRAINER | BATTLE_TYPE_BATTLE_TOWER | BATTLE_TYPE_LINK)))
- GetNationalPokedexFlag(SpeciesToNationalPokedexNum(gBattleMons[gActiveBank].species), 2);
+ GetSetPokedexFlag(SpeciesToNationalPokedexNum(gBattleMons[gActiveBank].species), 2);
}
gBattleMainFunc = sub_8011970;
}
@@ -2168,7 +2168,7 @@ void BattleBeginFirstTurn(void)
{
for (j = i + 1; j < gNoOfAllBanks; j++)
{
- if (b_first_side(gTurnOrder[i], gTurnOrder[j], 1) != 0)
+ if (GetWhoStrikesFirst(gTurnOrder[i], gTurnOrder[j], 1) != 0)
sub_8012FBC(i, j);
}
}
diff --git a/src/battle_3.c b/src/battle/battle_3.c
index f04e722c4..b59757f00 100644
--- a/src/battle_3.c
+++ b/src/battle/battle_3.c
@@ -378,7 +378,7 @@ u8 UpdateTurnCounters(void)
s32 j;
for (j = i + 1; j < gNoOfAllBanks; j++)
{
- if (b_first_side(gTurnOrder[i], gTurnOrder[j], 0))
+ if (GetWhoStrikesFirst(gTurnOrder[i], gTurnOrder[j], 0))
sub_8012FBC(i, j);
}
}
diff --git a/src/battle_4.c b/src/battle/battle_4.c
index 65ea765cf..e4a4895b5 100644
--- a/src/battle_4.c
+++ b/src/battle/battle_4.c
@@ -93,6 +93,7 @@ extern u16 gUnknown_02024C2C[4]; //last used moves 2, used by sketch
extern u16 gUnknown_030041B0;
extern u16 gUnknown_02024C4C[4]; //last used moves by banks, another one
extern u8 gCurrentMoveTurn;
+extern u16 gTrappingMoves[];
//extern functions
u8 AtkCanceller_UnableToUseMove(void);
@@ -122,7 +123,7 @@ bool8 IsTradedMon(struct Pokemon*);
void b_movescr_stack_pop_cursor(void);
void SwitchInClearStructs(void);
u8* ConvertIntToDecimalStringN(u8*, s32, u8, u8);
-u8 GetNationalPokedexFlag(u16 nationalNum, u8 caseID);
+u8 GetSetPokedexFlag(u16 nationalNum, u8 caseID);
u16 SpeciesToNationalPokedexNum(u16 species);
u8 sub_803FC34(u8 bank);
u16 sub_803FBFC(u8 a);
@@ -199,6 +200,9 @@ extern u8 BattleScript_TrainerBallBlock[];
extern u8 BattleScript_WallyBallThrow[];
extern u8 BattleScript_SuccessBallThrow[];
extern u8 BattleScript_ShakeBallThrow[];
+extern u8 BattleScript_AllStatsUp[];
+extern u8 BattleScript_AtkDefDown[];
+extern u8 BattleScript_SAtkDown2[];
extern u8 gUnknown_081D919F[]; //spikes1
extern u8 gUnknown_081D9171[]; //spikes2
@@ -211,6 +215,11 @@ extern u8 BattleScript_CastformChange[];
extern u8 gUnknown_081D9834[];
extern u8 gUnknown_081D90FC[]; //bs random switchout
extern u8 gUnknown_081D95DB[]; //bs payday money give
+extern u8 gUnknown_081D8C58[];
+extern u8 gUnknown_081D8C65[];
+extern u8 gUnknown_081D9156[];
+extern u8 gUnknown_081D9468[];
+
//useful macros
//read via orr
@@ -408,6 +417,7 @@ static void atk85_stockpile(void);
static void atk86_stockpiletobasedamage(void);
static void atk87_stockpiletohpheal(void);
static void atk88_negativedamage(void);
+static u8 ChangeStatBuffs(s8, u8, u8, u8*);
static void atk89_statbuffchange(void);
static void atk8A_normalisebuffs(void);
static void atk8B_setbide(void);
@@ -862,19 +872,19 @@ static const u32 gStatusFlagsForMoveEffects[] =
0x00000000
};
-extern const u8 BattleScript_1D963E[];
-extern const u8 BattleScript_1D965A[];
-extern const u8 BattleScript_1D9669[];
-extern const u8 BattleScript_1D9678[];
-extern const u8 BattleScript_1D9687[];
-extern const u8 BattleScript_1D969D[];
-extern const u8 BattleScript_1D96BA[];
-extern const u8 BattleScript_1D9696[];
-extern const u8 BattleScript_1D96B1[];
-extern const u8 BattleScript_1D96AA[];
-extern const u8 BattleScript_1D96C8[];
+extern u8 BattleScript_1D963E[];
+extern u8 BattleScript_1D965A[];
+extern u8 BattleScript_1D9669[];
+extern u8 BattleScript_1D9678[];
+extern u8 BattleScript_1D9687[];
+extern u8 BattleScript_1D969D[];
+extern u8 BattleScript_1D96BA[];
+extern u8 BattleScript_1D9696[];
+extern u8 BattleScript_1D96B1[];
+extern u8 BattleScript_1D96AA[];
+extern u8 BattleScript_1D96C8[];
-const u8* const gMoveEffectBS_Ptrs[] =
+u8* const gMoveEffectBS_Ptrs[] =
{
BattleScript_1D963E,
BattleScript_1D963E,
@@ -947,7 +957,7 @@ static const u16 sUnknown_081FACFE[] = //banned moves to copy
0xFFFF
};
-static const u8 sUnknown_081FAD26[] =
+static const u8 sUnknown_081FAD26[] = //reversal+flail HP thresholds to power
{
1, 200,
4, 150,
@@ -1445,73 +1455,71 @@ static void atk06_typecalc(void)
{
int i = 0;
u8 move_type;
- if (gCurrentMove == MOVE_STRUGGLE) {goto END;}
-
- if (BATTLE_STRUCT->dynamicMoveType)
- move_type = BATTLE_STRUCT->dynamicMoveType & 0x3F;
- else
- move_type = gBattleMoves[gCurrentMove].type;
-
- //check stab
- if (gBattleMons[gBankAttacker].type1 == move_type || gBattleMons[gBankAttacker].type2 == move_type)
+ if (gCurrentMove != MOVE_STRUGGLE)
{
- gBattleMoveDamage = gBattleMoveDamage * 15;
- gBattleMoveDamage = gBattleMoveDamage / 10;
- }
+ if (BATTLE_STRUCT->dynamicMoveType)
+ move_type = BATTLE_STRUCT->dynamicMoveType & 0x3F;
+ else
+ move_type = gBattleMoves[gCurrentMove].type;
- if (gBattleMons[gBankTarget].ability == ABILITY_LEVITATE && move_type == TYPE_GROUND)
- {
- gLastUsedAbility = gBattleMons[gBankTarget].ability;
- gBattleMoveFlags |= (MOVESTATUS_MISSED | MOVESTATUS_NOTAFFECTED);
- gMoveHitWith[gBankTarget] = 0;
- gUnknown_02024C44[gBankTarget] = 0;
- gBattleCommunication[6] = move_type;
- RecordAbilityBattle(gBankTarget, gLastUsedAbility);
- }
- else
- {
- while (gTypeEffectiveness[i]!= TYPE_ENDTABLE)
+ //check stab
+ if (gBattleMons[gBankAttacker].type1 == move_type || gBattleMons[gBankAttacker].type2 == move_type)
{
- if (gTypeEffectiveness[i] == TYPE_FORESIGHT)
- {
- if (gBattleMons[gBankTarget].status2 & STATUS2_FORESIGHT)
- break;
- i += 3;
- continue;
- }
+ gBattleMoveDamage = gBattleMoveDamage * 15;
+ gBattleMoveDamage = gBattleMoveDamage / 10;
+ }
- else if (gTypeEffectiveness[i] == move_type)
+ if (gBattleMons[gBankTarget].ability == ABILITY_LEVITATE && move_type == TYPE_GROUND)
+ {
+ gLastUsedAbility = gBattleMons[gBankTarget].ability;
+ gBattleMoveFlags |= (MOVESTATUS_MISSED | MOVESTATUS_NOTAFFECTED);
+ gMoveHitWith[gBankTarget] = 0;
+ gUnknown_02024C44[gBankTarget] = 0;
+ gBattleCommunication[6] = move_type;
+ RecordAbilityBattle(gBankTarget, gLastUsedAbility);
+ }
+ else
+ {
+ while (gTypeEffectiveness[i]!= TYPE_ENDTABLE)
{
- //check type1
- if (gTypeEffectiveness[i + 1] == gBattleMons[gBankTarget].type1)
- ModulateDmgByType(gTypeEffectiveness[i + 2]);
- //check type2
- if (gTypeEffectiveness[i + 1] == gBattleMons[gBankTarget].type2 &&
- gBattleMons[gBankTarget].type1 != gBattleMons[gBankTarget].type2)
- ModulateDmgByType(gTypeEffectiveness[i + 2]);
+ if (gTypeEffectiveness[i] == TYPE_FORESIGHT)
+ {
+ if (gBattleMons[gBankTarget].status2 & STATUS2_FORESIGHT)
+ break;
+ i += 3;
+ continue;
+ }
+
+ else if (gTypeEffectiveness[i] == move_type)
+ {
+ //check type1
+ if (gTypeEffectiveness[i + 1] == gBattleMons[gBankTarget].type1)
+ ModulateDmgByType(gTypeEffectiveness[i + 2]);
+ //check type2
+ if (gTypeEffectiveness[i + 1] == gBattleMons[gBankTarget].type2 &&
+ gBattleMons[gBankTarget].type1 != gBattleMons[gBankTarget].type2)
+ ModulateDmgByType(gTypeEffectiveness[i + 2]);
+ }
+ i += 3;
}
- i += 3;
}
- }
- if (gBattleMons[gBankTarget].ability == ABILITY_WONDER_GUARD && AttacksThisTurn(gBankAttacker, gCurrentMove) == 2
- && (!(gBattleMoveFlags & MOVESTATUS_SUPEREFFECTIVE) || ((gBattleMoveFlags & (MOVESTATUS_SUPEREFFECTIVE | MOVESTATUS_NOTVERYEFFECTIVE)) == (MOVESTATUS_SUPEREFFECTIVE | MOVESTATUS_NOTVERYEFFECTIVE)))
- && gBattleMoves[gCurrentMove].power)
- {
- gLastUsedAbility = ABILITY_WONDER_GUARD;
- gBattleMoveFlags |= MOVESTATUS_MISSED;
- gMoveHitWith[gBankTarget] = 0;
- gUnknown_02024C44[gBankTarget] = 0;
- gBattleCommunication[6] = 3;
- RecordAbilityBattle(gBankTarget, gLastUsedAbility);
+ if (gBattleMons[gBankTarget].ability == ABILITY_WONDER_GUARD && AttacksThisTurn(gBankAttacker, gCurrentMove) == 2
+ && (!(gBattleMoveFlags & MOVESTATUS_SUPEREFFECTIVE) || ((gBattleMoveFlags & (MOVESTATUS_SUPEREFFECTIVE | MOVESTATUS_NOTVERYEFFECTIVE)) == (MOVESTATUS_SUPEREFFECTIVE | MOVESTATUS_NOTVERYEFFECTIVE)))
+ && gBattleMoves[gCurrentMove].power)
+ {
+ gLastUsedAbility = ABILITY_WONDER_GUARD;
+ gBattleMoveFlags |= MOVESTATUS_MISSED;
+ gMoveHitWith[gBankTarget] = 0;
+ gUnknown_02024C44[gBankTarget] = 0;
+ gBattleCommunication[6] = 3;
+ RecordAbilityBattle(gBankTarget, gLastUsedAbility);
+ }
+ if (gBattleMoveFlags & MOVESTATUS_NOTAFFECTED)
+ gProtectStructs[gBankAttacker].notEffective = 1;
}
- if (gBattleMoveFlags & MOVESTATUS_NOTAFFECTED)
- gProtectStructs[gBankAttacker].notEffective = 1;
-
- END:
- gBattlescriptCurrInstr++;
+ gBattlescriptCurrInstr++;
}
-
static void b_wonderguard_and_levitate(void)
{
u8 flags = 0;
@@ -1620,7 +1628,6 @@ static void ModulateDmgByType2(u8 multiplier, u16 move, u8* flags) //a literal c
}
}
-#ifdef NONMATCHING
u8 TypeCalc(u16 move, u8 bank_atk, u8 bank_def)
{
int i = 0;
@@ -1662,7 +1669,7 @@ u8 TypeCalc(u16 move, u8 bank_atk, u8 bank_def)
ModulateDmgByType2(gTypeEffectiveness[i + 2], move, &flags);
//check type2
if (gTypeEffectiveness[i + 1] == gBattleMons[bank_def].type2 &&
- gBattleMons[bank_def].type1 != gBattleMons[bank_def].type2)
+ gBattleMons[gBankTarget /* what the christ */].type1 != gBattleMons[bank_def].type2)
ModulateDmgByType2(gTypeEffectiveness[i + 2], move, &flags);
}
i += 3;
@@ -1678,254 +1685,6 @@ u8 TypeCalc(u16 move, u8 bank_atk, u8 bank_def)
}
return flags;
}
-#else
-__attribute__((naked))
-u8 TypeCalc(u16 move, u8 bank_atk, u8 bank_def)
-{
- asm(".syntax unified\n\
- push {r4-r7,lr}\n\
- mov r7, r10\n\
- mov r6, r9\n\
- mov r5, r8\n\
- push {r5-r7}\n\
- sub sp, 0x14\n\
- lsls r0, 16\n\
- lsrs r0, 16\n\
- mov r10, r0\n\
- lsls r1, 24\n\
- lsrs r1, 24\n\
- str r1, [sp, 0x4]\n\
- lsls r2, 24\n\
- lsrs r2, 24\n\
- mov r9, r2\n\
- movs r7, 0\n\
- mov r0, sp\n\
- strb r7, [r0]\n\
- mov r0, r10\n\
- cmp r0, 0xA5\n\
- bne _0801D2AE\n\
- movs r0, 0\n\
- b _0801D43A\n\
- _0801D2AE:\n\
- ldr r1, _0801D31C @ =gBattleMoves\n\
- mov r3, r10\n\
- lsls r2, r3, 1\n\
- adds r0, r2, r3\n\
- lsls r0, 2\n\
- adds r0, r1\n\
- ldrb r0, [r0, 0x2]\n\
- str r0, [sp, 0x8]\n\
- ldr r1, _0801D320 @ =gBattleMons\n\
- movs r0, 0x58\n\
- ldr r3, [sp, 0x4]\n\
- muls r0, r3\n\
- adds r3, r0, r1\n\
- adds r0, r3, 0\n\
- adds r0, 0x21\n\
- ldrb r0, [r0]\n\
- str r2, [sp, 0xC]\n\
- adds r5, r1, 0\n\
- ldr r1, [sp, 0x8]\n\
- cmp r0, r1\n\
- beq _0801D2E2\n\
- adds r0, r3, 0\n\
- adds r0, 0x22\n\
- ldrb r0, [r0]\n\
- cmp r0, r1\n\
- bne _0801D2F4\n\
- _0801D2E2:\n\
- ldr r4, _0801D324 @ =gBattleMoveDamage\n\
- ldr r1, [r4]\n\
- lsls r0, r1, 4\n\
- subs r0, r1\n\
- str r0, [r4]\n\
- movs r1, 0xA\n\
- bl __divsi3\n\
- str r0, [r4]\n\
- _0801D2F4:\n\
- movs r0, 0x58\n\
- mov r2, r9\n\
- muls r2, r0\n\
- adds r0, r2, 0\n\
- adds r0, r5\n\
- adds r0, 0x20\n\
- ldrb r0, [r0]\n\
- cmp r0, 0x1A\n\
- bne _0801D328\n\
- ldr r3, [sp, 0x8]\n\
- cmp r3, 0x4\n\
- bne _0801D328\n\
- movs r1, 0x9\n\
- mov r0, sp\n\
- ldrb r0, [r0]\n\
- orrs r0, r1\n\
- mov r1, sp\n\
- strb r0, [r1]\n\
- b _0801D3DC\n\
- .align 2, 0\n\
- _0801D31C: .4byte gBattleMoves\n\
- _0801D320: .4byte gBattleMons\n\
- _0801D324: .4byte gBattleMoveDamage\n\
- _0801D328:\n\
- ldr r1, _0801D344 @ =gTypeEffectiveness\n\
- adds r0, r7, r1\n\
- ldrb r0, [r0]\n\
- adds r2, r1, 0\n\
- cmp r0, 0xFF\n\
- beq _0801D3DC\n\
- cmp r0, 0xFE\n\
- bne _0801D34C\n\
- movs r0, 0x58\n\
- mov r1, r9\n\
- muls r1, r0\n\
- adds r0, r1, 0\n\
- b _0801D3CA\n\
- .align 2, 0\n\
- _0801D344: .4byte gTypeEffectiveness\n\
- _0801D348:\n\
- adds r7, 0x3\n\
- b _0801D3B6\n\
- _0801D34C:\n\
- ldr r6, _0801D44C @ =gTypeEffectiveness\n\
- adds r0, r7, r6\n\
- ldrb r0, [r0]\n\
- ldr r2, [sp, 0x8]\n\
- cmp r0, r2\n\
- bne _0801D3B0\n\
- adds r1, r7, 0x1\n\
- adds r1, r6\n\
- ldr r3, _0801D450 @ =gBattleMons\n\
- mov r8, r3\n\
- movs r3, 0x58\n\
- mov r0, r9\n\
- muls r0, r3\n\
- mov r2, r8\n\
- adds r5, r0, r2\n\
- adds r0, r5, 0\n\
- adds r0, 0x21\n\
- ldrb r4, [r1]\n\
- ldrb r0, [r0]\n\
- cmp r4, r0\n\
- bne _0801D388\n\
- adds r0, r7, 0x2\n\
- adds r0, r6\n\
- ldrb r0, [r0]\n\
- mov r1, r10\n\
- mov r2, sp\n\
- str r3, [sp, 0x10]\n\
- bl ModulateDmgByType2\n\
- ldr r3, [sp, 0x10]\n\
- _0801D388:\n\
- adds r0, r5, 0\n\
- adds r0, 0x22\n\
- ldrb r0, [r0]\n\
- cmp r4, r0\n\
- bne _0801D3B0\n\
- ldr r0, _0801D454 @ =gBankTarget\n\
- ldrb r0, [r0]\n\
- muls r0, r3\n\
- add r0, r8\n\
- adds r0, 0x21\n\
- ldrb r0, [r0]\n\
- cmp r0, r4\n\
- beq _0801D3B0\n\
- adds r0, r7, 0x2\n\
- adds r0, r6\n\
- ldrb r0, [r0]\n\
- mov r1, r10\n\
- mov r2, sp\n\
- bl ModulateDmgByType2\n\
- _0801D3B0:\n\
- adds r7, 0x3\n\
- ldr r5, _0801D450 @ =gBattleMons\n\
- ldr r2, _0801D44C @ =gTypeEffectiveness\n\
- _0801D3B6:\n\
- adds r0, r7, r2\n\
- ldrb r0, [r0]\n\
- cmp r0, 0xFF\n\
- beq _0801D3DC\n\
- cmp r0, 0xFE\n\
- bne _0801D34C\n\
- movs r0, 0x58\n\
- mov r3, r9\n\
- muls r3, r0\n\
- adds r0, r3, 0\n\
- _0801D3CA:\n\
- adds r1, r5, 0\n\
- adds r1, 0x50\n\
- adds r0, r1\n\
- ldr r0, [r0]\n\
- movs r1, 0x80\n\
- lsls r1, 22\n\
- ands r0, r1\n\
- cmp r0, 0\n\
- beq _0801D348\n\
- _0801D3DC:\n\
- movs r0, 0x58\n\
- mov r1, r9\n\
- muls r1, r0\n\
- adds r0, r1, 0\n\
- adds r0, r5\n\
- adds r0, 0x20\n\
- ldrb r0, [r0]\n\
- cmp r0, 0x19\n\
- bne _0801D436\n\
- mov r0, sp\n\
- ldrb r1, [r0]\n\
- movs r0, 0x1\n\
- ands r0, r1\n\
- cmp r0, 0\n\
- bne _0801D436\n\
- ldr r0, [sp, 0x4]\n\
- mov r1, r10\n\
- bl AttacksThisTurn\n\
- lsls r0, 24\n\
- lsrs r1, r0, 24\n\
- cmp r1, 0x2\n\
- bne _0801D436\n\
- mov r0, sp\n\
- ldrb r3, [r0]\n\
- adds r0, r1, 0\n\
- ands r0, r3\n\
- cmp r0, 0\n\
- beq _0801D41E\n\
- movs r0, 0x6\n\
- ands r0, r3\n\
- cmp r0, 0x6\n\
- bne _0801D436\n\
- _0801D41E:\n\
- ldr r0, _0801D458 @ =gBattleMoves\n\
- ldr r1, [sp, 0xC]\n\
- add r1, r10\n\
- lsls r1, 2\n\
- adds r1, r0\n\
- ldrb r0, [r1, 0x1]\n\
- cmp r0, 0\n\
- beq _0801D436\n\
- mov r0, sp\n\
- movs r1, 0x1\n\
- orrs r1, r3\n\
- strb r1, [r0]\n\
- _0801D436:\n\
- mov r0, sp\n\
- ldrb r0, [r0]\n\
- _0801D43A:\n\
- add sp, 0x14\n\
- pop {r3-r5}\n\
- mov r8, r3\n\
- mov r9, r4\n\
- mov r10, r5\n\
- pop {r4-r7}\n\
- pop {r1}\n\
- bx r1\n\
- .align 2, 0\n\
- _0801D44C: .4byte gTypeEffectiveness\n\
- _0801D450: .4byte gBattleMons\n\
- _0801D454: .4byte gBankTarget\n\
- _0801D458: .4byte gBattleMoves\n\
- .syntax divided\n");
-}
-#endif // NONMATCHING
u8 AI_TypeCalc(u16 move, u16 species, u8 ability)
{
@@ -2510,7 +2269,7 @@ void SetMoveEffect(bool8 primary, u8 certainArg)
#define EffectAffectsUser 0x40
register u8 certain asm("r5") = certainArg;
register bool32 StatusChanged asm("r10") = 0;
- register int AffectsUser asm("r6") = 0; //0x40 otherwise
+ register int AffectsUser asm("r6") = 0; //0x40 otherwise
bool32 NoSunCanFreeze = 1;
if (gBattleCommunication[MOVE_EFFECT_BYTE] & EffectAffectsUser)
@@ -2526,16 +2285,16 @@ void SetMoveEffect(bool8 primary, u8 certainArg)
BATTLE_STRUCT->scriptingActive = gBankAttacker;
}
- if (gBattleMons[gEffectBank].ability_id == ABILITY_SHIELD_DUST && !(gHitMarker & HITMARKER_IGNORE_SAFEGUARD) &&
+ if (gBattleMons[gEffectBank].ability == ABILITY_SHIELD_DUST && !(gHitMarker & HITMARKER_IGNORE_SAFEGUARD) &&
!primary && gBattleCommunication[MOVE_EFFECT_BYTE] <= 9)
{gBattlescriptCurrInstr++; return;}
- if (gSideAffecting[get_bank_identity(gEffectBank) & 1] & SIDE_STATUS_SAFEGUARD && !(gHitMarker & HITMARKER_IGNORE_SAFEGUARD) &&
+ if (gSideAffecting[GetBankIdentity(gEffectBank) & 1] & SIDE_STATUS_SAFEGUARD && !(gHitMarker & HITMARKER_IGNORE_SAFEGUARD) &&
!primary && gBattleCommunication[MOVE_EFFECT_BYTE] <= 7)
{gBattlescriptCurrInstr++; return;}
//make sure at least ONE HP except payday and thief
- if (gBattleMons[gEffectBank].current_hp == 0 && gBattleCommunication[MOVE_EFFECT_BYTE] != 0xB && gBattleCommunication[MOVE_EFFECT_BYTE] != 0x1F)
+ if (gBattleMons[gEffectBank].hp == 0 && gBattleCommunication[MOVE_EFFECT_BYTE] != 0xB && gBattleCommunication[MOVE_EFFECT_BYTE] != 0x1F)
{gBattlescriptCurrInstr++; return;}
if (gBattleMons[gEffectBank].status2 & STATUS2_SUBSTITUTE && AffectsUser != EffectAffectsUser)
@@ -2547,81 +2306,82 @@ void SetMoveEffect(bool8 primary, u8 certainArg)
{
case STATUS_SLEEP:
//check active uproar
- if (gBattleMons[gEffectBank].ability_id != ABILITY_SOUNDPROOF)
+ if (gBattleMons[gEffectBank].ability != ABILITY_SOUNDPROOF)
{
for (gActiveBank = 0; gActiveBank < gNoOfAllBanks && !(gBattleMons[gActiveBank].status2 & STATUS2_UPROAR); gActiveBank++) {}
}
else
gActiveBank = gNoOfAllBanks;
- if (gBattleMons[gEffectBank].status) {break;}
+ if (gBattleMons[gEffectBank].status1) {break;}
if (gActiveBank != gNoOfAllBanks) {break;} //nice way of checking uproar...
- if (gBattleMons[gEffectBank].ability_id == ABILITY_VITAL_SPIRIT) {break;}
- if (gBattleMons[gEffectBank].ability_id == ABILITY_INSOMNIA) {break;}
+ if (gBattleMons[gEffectBank].ability == ABILITY_VITAL_SPIRIT) {break;}
+ if (gBattleMons[gEffectBank].ability == ABILITY_INSOMNIA) {break;}
- b_cancel_multi_turn_move_maybe(gEffectBank);
+ CancelMultiTurnMoves(gEffectBank);
StatusChanged = 1;
break;
case STATUS_POISON:
- if (gBattleMons[gEffectBank].ability_id == ABILITY_IMMUNITY && (primary == 1 || certain == 0x80))
+ if (gBattleMons[gEffectBank].ability == ABILITY_IMMUNITY && (primary == 1 || certain == 0x80))
{
gLastUsedAbility = ABILITY_IMMUNITY;
- RecordAbility(gEffectBank, ABILITY_IMMUNITY);
+ RecordAbilityBattle(gEffectBank, ABILITY_IMMUNITY);
b_movescr_stack_push(gBattlescriptCurrInstr + 1);
//_0801E664:
- gBattlescriptCurrInstr = BS_PSN_PREVENTION;
+ gBattlescriptCurrInstr = BattleScript_PSNPrevention;
if (gHitMarker & HITMARKER_IGNORE_SAFEGUARD)
{
- gBattleCommunication.multistring_chooser = 1;
+ gBattleCommunication[MULTISTRING_CHOOSER] = 1;
gHitMarker &= ~(HITMARKER_IGNORE_SAFEGUARD);
return;
}
else
- {gBattleCommunication.multistring_chooser = 0; return;}
+ {gBattleCommunication[MULTISTRING_CHOOSER] = 0; return;}
}
if ((gBattleMons[gEffectBank].type1 == TYPE_POISON || gBattleMons[gEffectBank].type2 == TYPE_POISON || gBattleMons[gEffectBank].type1 == TYPE_STEEL || gBattleMons[gEffectBank].type2 == TYPE_STEEL)
&& !(gHitMarker & HITMARKER_IGNORE_SAFEGUARD) && (primary == 1 || certain == 0x80))
{
b_movescr_stack_push(gBattlescriptCurrInstr + 1);
- gBattlescriptCurrInstr = BS_PSN_PREVENTION;
- gBattleCommunication.multistring_chooser = 2;
+ gBattlescriptCurrInstr = BattleScript_PSNPrevention;
+ gBattleCommunication[MULTISTRING_CHOOSER] = 2;
return;
}
if (gBattleMons[gEffectBank].type1 == TYPE_POISON) {break;}
if (gBattleMons[gEffectBank].type2 == TYPE_POISON) {break;}
if (gBattleMons[gEffectBank].type1 == TYPE_STEEL) {break;}
if (gBattleMons[gEffectBank].type2 == TYPE_STEEL) {break;}
- if (gBattleMons[gEffectBank].status) {break;}
- if (gBattleMons[gEffectBank].ability_id == ABILITY_IMMUNITY) {break;}
+ if (gBattleMons[gEffectBank].status1) {break;}
+ if (gBattleMons[gEffectBank].ability == ABILITY_IMMUNITY) {break;}
+
StatusChanged = 1;
break;
case STATUS_BURN:
- if (gBattleMons[gEffectBank].ability_id == ABILITY_WATER_VEIL && (primary == 1 || certain == 0x80))
+ if (gBattleMons[gEffectBank].ability == ABILITY_WATER_VEIL && (primary == 1 || certain == 0x80))
{
gLastUsedAbility = ABILITY_WATER_VEIL;
- RecordAbility(gEffectBank, ABILITY_WATER_VEIL);
+ RecordAbilityBattle(gEffectBank, ABILITY_WATER_VEIL);
b_movescr_stack_push(gBattlescriptCurrInstr + 1);
//_0801E664:
- gBattlescriptCurrInstr = BS_BRN_PREVENTION;
+ gBattlescriptCurrInstr = BattleScript_BRNPrevention;
if (gHitMarker & HITMARKER_IGNORE_SAFEGUARD)
{
- gBattleCommunication.multistring_chooser = 1;
+ gBattleCommunication[MULTISTRING_CHOOSER] = 1;
gHitMarker &= ~(HITMARKER_IGNORE_SAFEGUARD);
return;
}
else
- {gBattleCommunication.multistring_chooser = 0; return;}
+ {gBattleCommunication[MULTISTRING_CHOOSER] = 0; return;}
}
if ((gBattleMons[gEffectBank].type1 == TYPE_FIRE || gBattleMons[gEffectBank].type2 == TYPE_FIRE)
&& !(gHitMarker & HITMARKER_IGNORE_SAFEGUARD) && (primary == 1 || certain == 0x80))
{
b_movescr_stack_push(gBattlescriptCurrInstr + 1);
- gBattlescriptCurrInstr = BS_BRN_PREVENTION;
- gBattleCommunication.multistring_chooser = 2;
+ gBattlescriptCurrInstr = BattleScript_BRNPrevention;
+ gBattleCommunication[MULTISTRING_CHOOSER] = 2;
return;
}
if (gBattleMons[gEffectBank].type1 == TYPE_FIRE) {break;}
if (gBattleMons[gEffectBank].type2 == TYPE_FIRE) {break;}
- if (gBattleMons[gEffectBank].ability_id == ABILITY_WATER_VEIL) {break;}
+ if (gBattleMons[gEffectBank].ability == ABILITY_WATER_VEIL) {break;}
if (gBattleMons[gEffectBank].status1 == 0) {break;}
StatusChanged = 1;
break;
@@ -2629,70 +2389,70 @@ void SetMoveEffect(bool8 primary, u8 certainArg)
if (WEATHER_HAS_EFFECT && gBattleWeather & WEATHER_SUN_ANY) {NoSunCanFreeze = 0;}
if (gBattleMons[gEffectBank].type1 == TYPE_ICE) {break;}
if (gBattleMons[gEffectBank].type2 == TYPE_ICE) {break;}
- if (gBattleMons[gEffectBank].status) {break;}
+ if (gBattleMons[gEffectBank].status1) {break;}
if (NoSunCanFreeze == 0) {break;}
- if (gBattleMons[gEffectBank].ability_id == ABILITY_MAGMA_ARMOR) {break;}
+ if (gBattleMons[gEffectBank].ability == ABILITY_MAGMA_ARMOR) {break;}
- b_cancel_multi_turn_move_maybe(gEffectBank);
+ CancelMultiTurnMoves(gEffectBank);
StatusChanged = 1;
break;
case STATUS_PARALYSIS:
- if (gBattleMons[gEffectBank].ability_id == ABILITY_LIMBER)
+ if (gBattleMons[gEffectBank].ability == ABILITY_LIMBER)
{
if ((primary == 1 || certain == 0x80))
{
gLastUsedAbility = ABILITY_LIMBER;
- RecordAbility(gEffectBank, ABILITY_LIMBER);
+ RecordAbilityBattle(gEffectBank, ABILITY_LIMBER);
b_movescr_stack_push(gBattlescriptCurrInstr + 1);
//_0801E664:
- gBattlescriptCurrInstr = BS_PRLZ_PREVENTION;
+ gBattlescriptCurrInstr = BattleScript_PRLZPrevention;
if (gHitMarker & HITMARKER_IGNORE_SAFEGUARD)
{
- gBattleCommunication.multistring_chooser = 1;
+ gBattleCommunication[MULTISTRING_CHOOSER] = 1;
gHitMarker &= ~(HITMARKER_IGNORE_SAFEGUARD);
return;
}
else
- {gBattleCommunication.multistring_chooser = 0; return;}
+ {gBattleCommunication[MULTISTRING_CHOOSER] = 0; return;}
}
else {break;}
}
- if (gBattleMons[gEffectBank].status) {break;}
+ if (gBattleMons[gEffectBank].status1) {break;}
StatusChanged = 1;
break;
case STATUS_TOXIC_POISON:
- if (gBattleMons[gEffectBank].ability_id == ABILITY_IMMUNITY && (primary == 1 || certain == 0x80))
+ if (gBattleMons[gEffectBank].ability == ABILITY_IMMUNITY && (primary == 1 || certain == 0x80))
{
gLastUsedAbility = ABILITY_IMMUNITY;
- RecordAbility(gEffectBank, ABILITY_IMMUNITY);
+ RecordAbilityBattle(gEffectBank, ABILITY_IMMUNITY);
b_movescr_stack_push(gBattlescriptCurrInstr + 1);
//_0801E664:
- gBattlescriptCurrInstr = BS_PSN_PREVENTION;
+ gBattlescriptCurrInstr = BattleScript_PSNPrevention;
if (gHitMarker & HITMARKER_IGNORE_SAFEGUARD)
{
- gBattleCommunication.multistring_chooser = 1;
+ gBattleCommunication[MULTISTRING_CHOOSER] = 1;
gHitMarker &= ~(HITMARKER_IGNORE_SAFEGUARD);
return;
}
else
- {gBattleCommunication.multistring_chooser = 0; return;}
+ {gBattleCommunication[MULTISTRING_CHOOSER] = 0; return;}
}
if ((gBattleMons[gEffectBank].type1 == TYPE_POISON || gBattleMons[gEffectBank].type2 == TYPE_POISON || gBattleMons[gEffectBank].type1 == TYPE_STEEL || gBattleMons[gEffectBank].type2 == TYPE_STEEL)
&& !(gHitMarker & HITMARKER_IGNORE_SAFEGUARD) && (primary == 1 || certain == 0x80))
{
b_movescr_stack_push(gBattlescriptCurrInstr + 1);
- gBattlescriptCurrInstr = BS_PSN_PREVENTION;
- gBattleCommunication.multistring_chooser = 2;
+ gBattlescriptCurrInstr = BattleScript_PSNPrevention;
+ gBattleCommunication[MULTISTRING_CHOOSER] = 2;
return;
}
- if (gBattleMons[gEffectBank].status) {break;}
+ if (gBattleMons[gEffectBank].status1) {break;}
if (gBattleMons[gEffectBank].type1 != TYPE_POISON &&
gBattleMons[gEffectBank].type2 != TYPE_POISON &&
gBattleMons[gEffectBank].type1 != TYPE_STEEL &&
gBattleMons[gEffectBank].type2 != TYPE_STEEL)
{
- if (gBattleMons[gEffectBank].ability_id == ABILITY_IMMUNITY) {break;}
- gBattleMons[gEffectBank].status1 |= ~(STATUS_POISON); //TODO: fix OR to AND
+ if (gBattleMons[gEffectBank].ability == ABILITY_IMMUNITY) {break;}
+ gBattleMons[gEffectBank].status1 &= ~(0x9); //This gets (correctly) optimized out...
StatusChanged = 1;
break;
}
@@ -2707,20 +2467,20 @@ void SetMoveEffect(bool8 primary, u8 certainArg)
gBattleMons[gEffectBank].status1 |= ((Random() & 3) + 2);
else
gBattleMons[gEffectBank].status1 |= gStatusFlagsForMoveEffects[gBattleCommunication[MOVE_EFFECT_BYTE]];
- gBattlescriptCurrInstr = MoveEffectBS_ptrs[gBattleCommunication[MOVE_EFFECT_BYTE]];
+ gBattlescriptCurrInstr = gMoveEffectBS_Ptrs[gBattleCommunication[MOVE_EFFECT_BYTE]];
gActiveBank = gEffectBank;
- bb2_setattributes_in_battle(0, REQUEST_STATUS_BATTLE, 0, 4, &gBattleMons[gEffectBank].status);
- mark_buffer_bank_for_execution(gActiveBank);
+ EmitSetAttributes(0, REQUEST_STATUS_BATTLE, 0, 4, &gBattleMons[gEffectBank].status1);
+ MarkBufferBankForExecution(gActiveBank);
if (gHitMarker & HITMARKER_IGNORE_SAFEGUARD)
{
- gBattleCommunication.multistring_chooser = 1;
+ gBattleCommunication[MULTISTRING_CHOOSER] = 1;
gHitMarker &= ~(HITMARKER_IGNORE_SAFEGUARD);
}
else
- gBattleCommunication.multistring_chooser = 0;
+ gBattleCommunication[MULTISTRING_CHOOSER] = 0;
if (gBattleCommunication[MOVE_EFFECT_BYTE] == 2 || gBattleCommunication[MOVE_EFFECT_BYTE] == 6 || gBattleCommunication[MOVE_EFFECT_BYTE] == 5 || gBattleCommunication[MOVE_EFFECT_BYTE] == 3)
{
- BATTLE_STRUCT->SynchroniseEffect = gBattleCommunication[MOVE_EFFECT_BYTE];
+ BATTLE_STRUCT->synchroniseEffect = gBattleCommunication[MOVE_EFFECT_BYTE];
gHitMarker |= HITMARKER_SYNCHRONISE_EFFECT;
}
return;
@@ -2738,22 +2498,22 @@ void SetMoveEffect(bool8 primary, u8 certainArg)
switch (gStatusFlagsForMoveEffects[gBattleCommunication[MOVE_EFFECT_BYTE]])
{
case 7: //confusion
- if (gBattleMons[gEffectBank].ability_id == ABILITY_OWN_TEMPO)
+ if (gBattleMons[gEffectBank].ability == ABILITY_OWN_TEMPO)
{gBattlescriptCurrInstr++; return;}
if (gBattleMons[gEffectBank].status2 & STATUS2_CONFUSION)
{gBattlescriptCurrInstr++; return;}
gBattleMons[gEffectBank].status2 |= (((Random()) % 0x4)) + 2;
b_movescr_stack_push(gBattlescriptCurrInstr + 1);
- gBattlescriptCurrInstr = MoveEffectBS_ptrs[gBattleCommunication[MOVE_EFFECT_BYTE]];
+ gBattlescriptCurrInstr = gMoveEffectBS_Ptrs[gBattleCommunication[MOVE_EFFECT_BYTE]];
break;
case 8: //flinch
- if (gBattleMons[gEffectBank].ability_id == ABILITY_INNER_FOCUS)
+ if (gBattleMons[gEffectBank].ability == ABILITY_INNER_FOCUS)
{
if (primary == 1 || certain == 0x80)
{
gLastUsedAbility = ABILITY_INNER_FOCUS;
- RecordAbility(gEffectBank, ABILITY_INNER_FOCUS);
- gBattlescriptCurrInstr = BS_FLINCH_PREVENTION;
+ RecordAbilityBattle(gEffectBank, ABILITY_INNER_FOCUS);
+ gBattlescriptCurrInstr = BattleScript_FlinchPrevention;
return;
}
else
@@ -2773,21 +2533,21 @@ void SetMoveEffect(bool8 primary, u8 certainArg)
gLockedMove[gEffectBank] = gCurrentMove;
gBattleMons[gEffectBank].status2 |= ((Random() & 3) + 2) << 4;
b_movescr_stack_push(gBattlescriptCurrInstr + 1);
- gBattlescriptCurrInstr = MoveEffectBS_ptrs[gBattleCommunication[MOVE_EFFECT_BYTE]];
+ gBattlescriptCurrInstr = gMoveEffectBS_Ptrs[gBattleCommunication[MOVE_EFFECT_BYTE]];
break;
case 11: //pay day
- if (!(get_bank_identity(gEffectBank) & 1))
+ if (!(GetBankIdentity(gBankAttacker) & 1))
{
u16 PayDay = gPaydayMoney;
- gPaydayMoney += (gBattleMons[gEffectBank].level * 5);
+ gPaydayMoney += (gBattleMons[gBankAttacker].level * 5);
if (PayDay > gPaydayMoney)
gPaydayMoney = 0xFFFF;
}
b_movescr_stack_push(gBattlescriptCurrInstr + 1);
- gBattlescriptCurrInstr = MoveEffectBS_ptrs[gBattleCommunication[MOVE_EFFECT_BYTE]];
+ gBattlescriptCurrInstr = gMoveEffectBS_Ptrs[gBattleCommunication[MOVE_EFFECT_BYTE]];
break;
case 9: //tri attack
- if (gBattleMons[gEffectBank].status)
+ if (gBattleMons[gEffectBank].status1)
{gBattlescriptCurrInstr++; return;}
gBattleCommunication[MOVE_EFFECT_BYTE] = Random() % 3 + 3;
SetMoveEffect(0, 0);
@@ -2795,73 +2555,73 @@ void SetMoveEffect(bool8 primary, u8 certainArg)
case 12: //charging move
gBattleMons[gEffectBank].status2 |= STATUS2_MULTIPLETURNS;
gLockedMove[gEffectBank] = gCurrentMove;
- gProtectStructs[gEffectBank].flag1_chargingturn = 1;
+ gProtectStructs[gEffectBank].chargingTurn = 1;
gBattlescriptCurrInstr++;
break;
case 13: //wrap
if (gBattleMons[gEffectBank].status2 & STATUS2_WRAPPED)
{gBattlescriptCurrInstr++; return;}
gBattleMons[gEffectBank].status2 |= ((Random() & 3) + 2) << 0xD;
- BATTLE_STRUCT->WrappedMove1[gEffectBank] = gCurrentMove;
- BATTLE_STRUCT->WrappedMove2[gEffectBank] = gCurrentMove >> 8;
- BATTLE_STRUCT->WrappedBy[gEffectBank] = gBankAttacker;
+ BATTLE_STRUCT->wrappedMove[gEffectBank*2] = (u8)gCurrentMove;
+ (1 + BATTLE_STRUCT->wrappedMove)[gEffectBank*2] = gCurrentMove >> 8; //don't ask.
+ BATTLE_STRUCT->wrappedBy[gEffectBank] = gBankAttacker;
b_movescr_stack_push(gBattlescriptCurrInstr + 1);
- gBattlescriptCurrInstr = MoveEffectBS_ptrs[gBattleCommunication[MOVE_EFFECT_BYTE]];
- gBattleCommunication.multistring_chooser = 0;
- while (gBattleCommunication.multistring_chooser <= 4
- && gCurrentMove != gTrappingMoves[gBattleCommunication.multistring_chooser])
- gBattleCommunication.multistring_chooser++;
+ gBattlescriptCurrInstr = gMoveEffectBS_Ptrs[gBattleCommunication[MOVE_EFFECT_BYTE]];
+ gBattleCommunication[MULTISTRING_CHOOSER] = 0;
+ while (gBattleCommunication[MULTISTRING_CHOOSER] <= 4
+ && gCurrentMove != gTrappingMoves[gBattleCommunication[MULTISTRING_CHOOSER]])
+ gBattleCommunication[MULTISTRING_CHOOSER]++;
break;
- case 14: //recoil
+ case 14: //25% recoil
gBattleMoveDamage = (gHP_dealt) / 4;
if (gBattleMoveDamage == 0)
gBattleMoveDamage = 1;
b_movescr_stack_push(gBattlescriptCurrInstr + 1);
- gBattlescriptCurrInstr = MoveEffectBS_ptrs[gBattleCommunication[MOVE_EFFECT_BYTE]];
+ gBattlescriptCurrInstr = gMoveEffectBS_Ptrs[gBattleCommunication[MOVE_EFFECT_BYTE]];
break;
case 15 ... 21: //stat + 1
- if (ChangeStats(0x10, gBattleCommunication[MOVE_EFFECT_BYTE] + 0xF2, certain, 0)) {gBattlescriptCurrInstr++;}
+ if (ChangeStatBuffs(0x10, gBattleCommunication[MOVE_EFFECT_BYTE] + 0xF2, certain, 0)) {gBattlescriptCurrInstr++;}
else
{
BATTLE_STRUCT->animArg1 = gBattleCommunication[MOVE_EFFECT_BYTE] & 0x3F; //TODO: the arg ptr is wrong by one
BATTLE_STRUCT->animArg2 = 0;
b_movescr_stack_push(gBattlescriptCurrInstr + 1);
- gBattlescriptCurrInstr = BS_STAT_UP;
+ gBattlescriptCurrInstr = BattleScript_StatUp;
}
break;
case 22 ... 28: //stat - 1
- if (ChangeStats(~(0x6f), gBattleCommunication[MOVE_EFFECT_BYTE] + 0xEB, certain, 0)) {gBattlescriptCurrInstr++;} //TODO: negation doesnt work correctly
+ if (ChangeStatBuffs(~(0x6f), gBattleCommunication[MOVE_EFFECT_BYTE] + 0xEB, certain, 0)) {gBattlescriptCurrInstr++;} //TODO: negation doesnt work correctly
else
{
BATTLE_STRUCT->animArg1 = gBattleCommunication[MOVE_EFFECT_BYTE] & 0x3F;
BATTLE_STRUCT->animArg2 = 0;
b_movescr_stack_push(gBattlescriptCurrInstr + 1);
- gBattlescriptCurrInstr = BS_STAT_DOWN;
+ gBattlescriptCurrInstr = BattleScript_StatDown;
}
break;
case 39 ... 45: //stat + 2
- if (ChangeStats(0x20, gBattleCommunication[MOVE_EFFECT_BYTE] + 0xDA, certain, 0)) {gBattlescriptCurrInstr++;}
+ if (ChangeStatBuffs(0x20, gBattleCommunication[MOVE_EFFECT_BYTE] + 0xDA, certain, 0)) {gBattlescriptCurrInstr++;}
else
{
BATTLE_STRUCT->animArg1 = gBattleCommunication[MOVE_EFFECT_BYTE] & 0x3F;
BATTLE_STRUCT->animArg2 = 0;
b_movescr_stack_push(gBattlescriptCurrInstr + 1);
- gBattlescriptCurrInstr = BS_STAT_UP;
+ gBattlescriptCurrInstr = BattleScript_StatUp;
}
break;
case 46 ... 52: //stat - 2
- if (ChangeStats(~(0x5f), gBattleCommunication[MOVE_EFFECT_BYTE] + 0xD3, certain, 0)) {gBattlescriptCurrInstr++;}
+ if (ChangeStatBuffs(~(0x5f), gBattleCommunication[MOVE_EFFECT_BYTE] + 0xD3, certain, 0)) {gBattlescriptCurrInstr++;}
else
{
BATTLE_STRUCT->animArg1 = gBattleCommunication[MOVE_EFFECT_BYTE] & 0x3F;
BATTLE_STRUCT->animArg2 = 0;
b_movescr_stack_push(gBattlescriptCurrInstr + 1);
- gBattlescriptCurrInstr = BS_STAT_DOWN;
+ gBattlescriptCurrInstr = BattleScript_StatDown;
}
break;
case 29: //recharge
gBattleMons[gEffectBank].status2 |= STATUS2_RECHARGE;
- gDisableStructs[gEffectBank].recharge_counter = 2;
+ gDisableStructs[gEffectBank].rechargeCounter = 2;
gLockedMove[gEffectBank] = gCurrentMove;
gBattlescriptCurrInstr++;
break;
@@ -2871,83 +2631,85 @@ void SetMoveEffect(bool8 primary, u8 certainArg)
break;
case 31: //item steal
{
- u8 side = battle_side_get_owner(gBankAttacker);
- if (battle_side_get_owner(gBankAttacker) == 1 && !(gBattleTypeFlags & (BATTLE_TYPE_EREADER_TRAINER | BATTLE_TYPE_BATTLE_TOWER | BATTLE_TYPE_LINK)) && gTrainerBattleOpponent != 0x400)
+ u8 side = GetBankSide(gBankAttacker);
+ if (GetBankSide(gBankAttacker) == 1 && !(gBattleTypeFlags & (BATTLE_TYPE_EREADER_TRAINER | BATTLE_TYPE_BATTLE_TOWER | BATTLE_TYPE_LINK)) && gTrainerBattleOpponent != 0x400)
{gBattlescriptCurrInstr++; return;}
- if (!(gBattleTypeFlags & (BATTLE_TYPE_EREADER_TRAINER | BATTLE_TYPE_BATTLE_TOWER | BATTLE_TYPE_LINK)) && gTrainerBattleOpponent != 0x400 && (gWishFutureKnock.KnockedOff[side] & gBitTable[gBattlePartyID[gBankAttacker]]))
+ if (!(gBattleTypeFlags & (BATTLE_TYPE_EREADER_TRAINER | BATTLE_TYPE_BATTLE_TOWER | BATTLE_TYPE_LINK)) && gTrainerBattleOpponent != 0x400 && (gWishFutureKnock.knockedOffPokes[side] & gBitTable[gBattlePartyID[gBankAttacker]]))
{gBattlescriptCurrInstr++; return;}
- if (gBattleMons[gBankTarget].held_item && gBattleMons[gBankTarget].ability_id == ABILITY_STICKY_HOLD)
+ if (gBattleMons[gBankTarget].item && gBattleMons[gBankTarget].ability == ABILITY_STICKY_HOLD)
{
b_movescr_stack_push_cursor();
- gBattlescriptCurrInstr = BS_NO_ITEMSTEAL;
- gLastUsedAbility = gBattleMons[gBankTarget].ability_id;
- RecordAbility(gBankTarget, gLastUsedAbility);
+ gBattlescriptCurrInstr = BattleScript_NoItemSteal;
+ gLastUsedAbility = gBattleMons[gBankTarget].ability;
+ RecordAbilityBattle(gBankTarget, gLastUsedAbility);
return;
}
- if (gBattleMons[gBankAttacker].held_item)
+ if (gBattleMons[gBankAttacker].item)
{gBattlescriptCurrInstr++; return;}
- if (gBattleMons[gBankTarget].held_item == ITEM_ENIGMA_BERRY)
+ if (gBattleMons[gBankTarget].item == ITEM_ENIGMA_BERRY)
{gBattlescriptCurrInstr++; return;}
- if (gBattleMons[gBankTarget].held_item == 0)
+ if (gBattleMons[gBankTarget].item == 0)
{gBattlescriptCurrInstr++; return;}
- CHANGED_HELDITEMS[gBankAttacker] = gLastUsedItem = gBattleMons[gBankTarget].held_item;
- gBattleMons[gBankTarget].held_item = 0;
+ gLastUsedItem = gBattleMons[gBankTarget].item;
+ unk_2000000[gBankAttacker * 2 + 0x160cc] = gLastUsedItem;
+ gBattleMons[gBankTarget].item = 0;
gActiveBank = gBankAttacker;
- bb2_setattributes_in_battle(0, REQUEST_HELDITEM_BATTLE, 0, 2, &gLastUsedItem);
- mark_buffer_bank_for_execution(gBankAttacker);
+ EmitSetAttributes(0, REQUEST_HELDITEM_BATTLE, 0, 2, &gLastUsedItem);
+ MarkBufferBankForExecution(gBankAttacker);
gActiveBank = gBankTarget;
- bb2_setattributes_in_battle(0, REQUEST_HELDITEM_BATTLE, 0, 2, &gBattleMons[gBankTarget].held_item);
- mark_buffer_bank_for_execution(gBankTarget);
+ EmitSetAttributes(0, REQUEST_HELDITEM_BATTLE, 0, 2, &gBattleMons[gBankTarget].item);
+ MarkBufferBankForExecution(gBankTarget);
b_movescr_stack_push(gBattlescriptCurrInstr + 1);
- gBattlescriptCurrInstr = BS_ITEMSTEAL;
+ gBattlescriptCurrInstr = BattleScript_ItemSteal;
- STORE_CHOICEMOVE(gBankTarget, 0);
+ ewram[gBankTarget * 2 + 0x160e8] = 0;
+ //STORE_CHOICEMOVE(gBankTarget, 0);
}
break;
case 32: //escape prevention
gBattleMons[gBankTarget].status2 |= STATUS2_RECHARGE;
- gDisableStructs[gBankTarget].BankPreventingEscape = gBankAttacker;
+ gDisableStructs[gBankTarget].bankPreventingEscape = gBankAttacker;
gBattlescriptCurrInstr++;
break;
case 33: //nightmare
gBattleMons[gBankTarget].status2 |= STATUS2_NIGHTMARE;
gBattlescriptCurrInstr++;
break;
- case 34:
+ case 34: //ancientpower
b_movescr_stack_push(gBattlescriptCurrInstr + 1);
- gBattlescriptCurrInstr = gUnknown_081D9224;
+ gBattlescriptCurrInstr = BattleScript_AllStatsUp;
return;
case 35: //break free rapidspin
b_movescr_stack_push(gBattlescriptCurrInstr + 1);
- gBattlescriptCurrInstr = BS_RAPIDSPINAWAY;
+ gBattlescriptCurrInstr = BattleScript_RapidSpinAway;
return;
case 36: //paralysis removal
if (gBattleMons[gBankTarget].status1 & STATUS_PARALYSIS)
{
gBattleMons[gBankTarget].status1 &= ~(STATUS_PARALYSIS);
gActiveBank = gBankTarget;
- bb2_setattributes_in_battle(0, REQUEST_STATUS_BATTLE, 0, 4, &gBattleMons[gBankTarget].status);
- mark_buffer_bank_for_execution(gActiveBank);
+ EmitSetAttributes(0, REQUEST_STATUS_BATTLE, 0, 4, &gBattleMons[gBankTarget].status1);
+ MarkBufferBankForExecution(gActiveBank);
b_movescr_stack_push(gBattlescriptCurrInstr + 1);
- gBattlescriptCurrInstr = BS_PARALYSISHEALED;
+ gBattlescriptCurrInstr = BattleScript_TargetPRLZHeal;
}
else
{gBattlescriptCurrInstr++; return;}
break;
- case 37: //
+ case 37: //superpower
b_movescr_stack_push(gBattlescriptCurrInstr + 1);
- gBattlescriptCurrInstr = gUnknown_081D93FA;
+ gBattlescriptCurrInstr = BattleScript_AtkDefDown;
return;
- case 38: //recoil plus paralysis
+ case 38: //33% recoil
gBattleMoveDamage = gHP_dealt / 3;
if (gBattleMoveDamage == 0)
gBattleMoveDamage = 1;
b_movescr_stack_push(gBattlescriptCurrInstr + 1);
- gBattlescriptCurrInstr = MoveEffectBS_ptrs[gBattleCommunication[MOVE_EFFECT_BYTE]];
+ gBattlescriptCurrInstr = gMoveEffectBS_Ptrs[gBattleCommunication[MOVE_EFFECT_BYTE]];
break;
case 53: //thrash
if (!(gBattleMons[gEffectBank].status2 & STATUS2_LOCK_CONFUSE))
@@ -2960,32 +2722,33 @@ void SetMoveEffect(bool8 primary, u8 certainArg)
{gBattlescriptCurrInstr++; return;}
break;
case 54: //knock off
- if (gBattleMons[gEffectBank].ability_id == ABILITY_STICKY_HOLD)
+ if (gBattleMons[gEffectBank].ability == ABILITY_STICKY_HOLD)
{
- if (gBattleMons[gEffectBank].held_item == 0)
+ if (gBattleMons[gEffectBank].item == 0)
{gBattlescriptCurrInstr++; return;}
gLastUsedAbility = ABILITY_STICKY_HOLD;
- gBattlescriptCurrInstr = BS_STICKYHOLD_ACTIVATES;
- RecordAbility(gEffectBank, ABILITY_STICKY_HOLD);
+ gBattlescriptCurrInstr = BattleScript_NoItemSteal;
+ RecordAbilityBattle(gEffectBank, ABILITY_STICKY_HOLD);
return;
}
- if (gBattleMons[gEffectBank].held_item == 0)
+ if (gBattleMons[gEffectBank].item == 0)
{gBattlescriptCurrInstr++; return;}
else
{
- u8 side = battle_side_get_owner(gEffectBank);
- gLastUsedItem = gBattleMons[gEffectBank].held_item;
- gBattleMons[gEffectBank].held_item = 0;
- gWishFutureKnock.KnockedOff[side] |= gBitTable[gBattlePartyID[gEffectBank]];
+ u8 side = GetBankSide(gEffectBank);
+ gLastUsedItem = gBattleMons[gEffectBank].item;
+ gBattleMons[gEffectBank].item = 0;
+ gWishFutureKnock.knockedOffPokes[side] |= gBitTable[gBattlePartyID[gEffectBank]];
b_movescr_stack_push(gBattlescriptCurrInstr + 1);
- gBattlescriptCurrInstr = BS_KNOCKEDOFF;
+ gBattlescriptCurrInstr = BattleScript_KnockedOff;
- STORE_CHOICEMOVE(gEffectBank, 0);
+ ewram[gEffectBank * 2 + 0x160e8] = 0;
+ //STORE_CHOICEMOVE(gEffectBank, 0);
}
break;
- case 59: //overheat I guess, dont remember
+ case 59: //overheat
b_movescr_stack_push(gBattlescriptCurrInstr + 1);
- gBattlescriptCurrInstr = gUnknown_081D94B0;
+ gBattlescriptCurrInstr = BattleScript_SAtkDown2;
return;
}
}
@@ -4888,11 +4651,11 @@ _0801F3BC:\n\
ldr r0, [r4]\n\
adds r0, 0x1\n\
bl b_movescr_stack_push\n\
- ldr r0, _0801F3D0 @ =gUnknown_081D9224\n\
+ ldr r0, _0801F3D0 @ =BattleScript_AllStatsUp\n\
b _0801F5F8\n\
.align 2, 0\n\
_0801F3CC: .4byte gBattlescriptCurrInstr\n\
-_0801F3D0: .4byte gUnknown_081D9224\n\
+_0801F3D0: .4byte BattleScript_AllStatsUp\n\
_0801F3D4:\n\
ldr r4, _0801F3E4 @ =gBattlescriptCurrInstr\n\
ldr r0, [r4]\n\
@@ -4952,11 +4715,11 @@ _0801F44C:\n\
ldr r0, [r4]\n\
adds r0, 0x1\n\
bl b_movescr_stack_push\n\
- ldr r0, _0801F460 @ =gUnknown_081D93FA\n\
+ ldr r0, _0801F460 @ =BattleScript_AtkDefDown\n\
b _0801F5F8\n\
.align 2, 0\n\
_0801F45C: .4byte gBattlescriptCurrInstr\n\
-_0801F460: .4byte gUnknown_081D93FA\n\
+_0801F460: .4byte BattleScript_AtkDefDown\n\
_0801F464:\n\
ldr r4, _0801F494 @ =gBattleMoveDamage\n\
ldr r0, _0801F498 @ =gHP_dealt\n\
@@ -5141,7 +4904,7 @@ _0801F5EC:\n\
ldr r0, [r4]\n\
adds r0, 0x1\n\
bl b_movescr_stack_push\n\
- ldr r0, _0801F610 @ =gUnknown_081D94B0\n\
+ ldr r0, _0801F610 @ =BattleScript_SAtkDown2\n\
_0801F5F8:\n\
str r0, [r4]\n\
_0801F5FA:\n\
@@ -5155,11 +4918,12 @@ _0801F5FA:\n\
bx r0\n\
.align 2, 0\n\
_0801F60C: .4byte gBattlescriptCurrInstr\n\
-_0801F610: .4byte gUnknown_081D94B0\n\
+_0801F610: .4byte BattleScript_SAtkDown2\n\
.syntax divided\n");
}
#endif // NONMATCHING
+
static void atk15_seteffectwithchancetarget(void)
{
u32 PercentChance;
@@ -5208,425 +4972,107 @@ static void atk18_status_effect_clear(void)
BATTLE_STRUCT->unk16112 = 0;
}
-//Fuck this, Maybe later
-__attribute__((naked))
static void atk19_faint_pokemon(void)
{
- asm(".syntax unified\n\
-push {r4-r7,lr}\n\
- mov r7, r10\n\
- mov r6, r9\n\
- mov r5, r8\n\
- push {r5-r7}\n\
- sub sp, 0x4\n\
- ldr r0, _0801F81C @ =gBattlescriptCurrInstr\n\
- ldr r2, [r0]\n\
- ldrb r1, [r2, 0x2]\n\
- adds r6, r0, 0\n\
- cmp r1, 0\n\
- beq _0801F834\n\
- ldrb r0, [r2, 0x1]\n\
- bl GetBattleBank\n\
- ldr r5, _0801F820 @ =gActiveBank\n\
- strb r0, [r5]\n\
- ldr r2, _0801F824 @ =gHitMarker\n\
- ldr r1, _0801F828 @ =gBitTable\n\
- ldrb r0, [r5]\n\
- lsls r0, 2\n\
- adds r0, r1\n\
- ldr r1, [r0]\n\
- lsls r1, 28\n\
- ldr r0, [r2]\n\
- ands r0, r1\n\
- cmp r0, 0\n\
- bne _0801F7E6\n\
- b _0801FB1C\n\
-_0801F7E6:\n\
- ldr r1, [r6]\n\
- ldrb r4, [r1, 0x3]\n\
- ldrb r0, [r1, 0x4]\n\
- lsls r0, 8\n\
- orrs r4, r0\n\
- ldrb r0, [r1, 0x5]\n\
- lsls r0, 16\n\
- orrs r4, r0\n\
- ldrb r0, [r1, 0x6]\n\
- lsls r0, 24\n\
- orrs r4, r0\n\
- bl b_movescr_stack_pop_cursor\n\
- str r4, [r6]\n\
- ldrb r0, [r5]\n\
- bl GetBankSide\n\
- ldr r1, _0801F82C @ =gSideAffecting\n\
- lsls r0, 24\n\
- lsrs r0, 23\n\
- adds r0, r1\n\
- ldrh r2, [r0]\n\
- ldr r1, _0801F830 @ =0x0000fdff\n\
- ands r1, r2\n\
- strh r1, [r0]\n\
- b _0801FB22\n\
- .align 2, 0\n\
-_0801F81C: .4byte gBattlescriptCurrInstr\n\
-_0801F820: .4byte gActiveBank\n\
-_0801F824: .4byte gHitMarker\n\
-_0801F828: .4byte gBitTable\n\
-_0801F82C: .4byte gSideAffecting\n\
-_0801F830: .4byte 0x0000fdff\n\
-_0801F834:\n\
- ldrb r0, [r2, 0x1]\n\
- cmp r0, 0x1\n\
- bne _0801F85C\n\
- ldr r1, _0801F84C @ =gActiveBank\n\
- ldr r0, _0801F850 @ =gBankAttacker\n\
- ldrb r0, [r0]\n\
- strb r0, [r1]\n\
- ldr r0, _0801F854 @ =gBankTarget\n\
- ldrb r7, [r0]\n\
- ldr r4, _0801F858 @ =gUnknown_081D8C58\n\
- b _0801F86A\n\
- .align 2, 0\n\
-_0801F84C: .4byte gActiveBank\n\
-_0801F850: .4byte gBankAttacker\n\
-_0801F854: .4byte gBankTarget\n\
-_0801F858: .4byte gUnknown_081D8C58\n\
-_0801F85C:\n\
- ldr r1, _0801F954 @ =gActiveBank\n\
- ldr r0, _0801F958 @ =gBankTarget\n\
- ldrb r0, [r0]\n\
- strb r0, [r1]\n\
- ldr r0, _0801F95C @ =gBankAttacker\n\
- ldrb r7, [r0]\n\
- ldr r4, _0801F960 @ =gUnknown_081D8C65\n\
-_0801F86A:\n\
- ldr r0, _0801F964 @ =gAbsentBankFlags\n\
- ldrb r1, [r0]\n\
- ldr r0, _0801F968 @ =gBitTable\n\
- mov r12, r0\n\
- ldr r2, _0801F954 @ =gActiveBank\n\
- mov r8, r2\n\
- ldrb r2, [r2]\n\
- lsls r0, r2, 2\n\
- add r0, r12\n\
- ldr r0, [r0]\n\
- ands r1, r0\n\
- cmp r1, 0\n\
- beq _0801F886\n\
- b _0801FB1C\n\
-_0801F886:\n\
- ldr r3, _0801F96C @ =gBattleMons\n\
- mov r10, r3\n\
- movs r5, 0x58\n\
- mov r9, r5\n\
- mov r0, r9\n\
- muls r0, r2\n\
- add r0, r10\n\
- ldrh r3, [r0, 0x28]\n\
- cmp r3, 0\n\
- beq _0801F89C\n\
- b _0801FB1C\n\
-_0801F89C:\n\
- ldr r2, _0801F970 @ =0x02000000\n\
- lsls r1, r7, 1\n\
- ldr r5, _0801F974 @ =0x000160ac\n\
- adds r0, r1, r5\n\
- adds r0, r2\n\
- strb r3, [r0]\n\
- ldr r0, _0801F978 @ =0x000160ad\n\
- adds r1, r0\n\
- adds r1, r2\n\
- strb r3, [r1]\n\
- lsls r1, r7, 2\n\
- adds r5, 0x54\n\
- adds r0, r1, r5\n\
- adds r0, r2\n\
- strb r3, [r0]\n\
- adds r5, 0x1\n\
- adds r0, r1, r5\n\
- adds r0, r2\n\
- strb r3, [r0]\n\
- adds r5, 0x1\n\
- adds r0, r1, r5\n\
- adds r0, r2\n\
- strb r3, [r0]\n\
- ldr r0, _0801F97C @ =0x00016103\n\
- adds r1, r0\n\
- adds r1, r2\n\
- strb r3, [r1]\n\
- ldr r5, _0801F980 @ =gHitMarker\n\
- mov r1, r8\n\
- ldrb r0, [r1]\n\
- lsls r0, 2\n\
- add r0, r12\n\
- ldr r1, [r0]\n\
- lsls r1, 28\n\
- ldr r0, [r5]\n\
- orrs r0, r1\n\
- str r0, [r5]\n\
- ldr r0, [r6]\n\
- adds r0, 0x7\n\
- bl b_movescr_stack_push\n\
- str r4, [r6]\n\
- mov r2, r8\n\
- ldrb r0, [r2]\n\
- bl GetBankSide\n\
- lsls r0, 24\n\
- cmp r0, 0\n\
- bne _0801F9B0\n\
- ldr r0, [r5]\n\
- movs r1, 0x80\n\
- lsls r1, 15\n\
- orrs r0, r1\n\
- str r0, [r5]\n\
- ldr r1, _0801F984 @ =gBattleResults\n\
- ldrb r0, [r1]\n\
- cmp r0, 0xFE\n\
- bhi _0801F914\n\
- adds r0, 0x1\n\
- strb r0, [r1]\n\
-_0801F914:\n\
- mov r0, r9\n\
- muls r0, r7\n\
- add r0, r10\n\
- adds r3, r0, 0\n\
- adds r3, 0x2A\n\
- mov r4, r8\n\
- ldrb r2, [r4]\n\
- mov r0, r9\n\
- muls r0, r2\n\
- add r0, r10\n\
- adds r1, r0, 0\n\
- adds r1, 0x2A\n\
- ldrb r0, [r3]\n\
- ldrb r5, [r1]\n\
- cmp r0, r5\n\
- bls _0801F9CC\n\
- ldrb r1, [r1]\n\
- subs r0, r1\n\
- cmp r0, 0x1D\n\
- ble _0801F990\n\
- ldr r1, _0801F988 @ =gBattlePartyID\n\
- lsls r0, r2, 1\n\
- adds r0, r1\n\
- ldrh r1, [r0]\n\
- movs r0, 0x64\n\
- muls r0, r1\n\
- ldr r1, _0801F98C @ =gPlayerParty\n\
- adds r0, r1\n\
- movs r1, 0x8\n\
- bl AdjustFriendship\n\
- b _0801F9CC\n\
- .align 2, 0\n\
-_0801F954: .4byte gActiveBank\n\
-_0801F958: .4byte gBankTarget\n\
-_0801F95C: .4byte gBankAttacker\n\
-_0801F960: .4byte gUnknown_081D8C65\n\
-_0801F964: .4byte gAbsentBankFlags\n\
-_0801F968: .4byte gBitTable\n\
-_0801F96C: .4byte gBattleMons\n\
-_0801F970: .4byte 0x02000000\n\
-_0801F974: .4byte 0x000160ac\n\
-_0801F978: .4byte 0x000160ad\n\
-_0801F97C: .4byte 0x00016103\n\
-_0801F980: .4byte gHitMarker\n\
-_0801F984: .4byte gBattleResults\n\
-_0801F988: .4byte gBattlePartyID\n\
-_0801F98C: .4byte gPlayerParty\n\
-_0801F990:\n\
- ldr r1, _0801F9A8 @ =gBattlePartyID\n\
- lsls r0, r2, 1\n\
- adds r0, r1\n\
- ldrh r1, [r0]\n\
- movs r0, 0x64\n\
- muls r0, r1\n\
- ldr r1, _0801F9AC @ =gPlayerParty\n\
- adds r0, r1\n\
- movs r1, 0x6\n\
- bl AdjustFriendship\n\
- b _0801F9CC\n\
- .align 2, 0\n\
-_0801F9A8: .4byte gBattlePartyID\n\
-_0801F9AC: .4byte gPlayerParty\n\
-_0801F9B0:\n\
- ldr r1, _0801FAE0 @ =gBattleResults\n\
- ldrb r0, [r1, 0x1]\n\
- cmp r0, 0xFE\n\
- bhi _0801F9BC\n\
- adds r0, 0x1\n\
- strb r0, [r1, 0x1]\n\
-_0801F9BC:\n\
- ldr r2, _0801FAE4 @ =gActiveBank\n\
- ldrb r0, [r2]\n\
- mov r3, r9\n\
- muls r3, r0\n\
- adds r0, r3, 0\n\
- add r0, r10\n\
- ldrh r0, [r0]\n\
- strh r0, [r1, 0x20]\n\
-_0801F9CC:\n\
- ldr r0, _0801FAE8 @ =gHitMarker\n\
- ldr r0, [r0]\n\
- movs r1, 0x40\n\
- ands r0, r1\n\
- cmp r0, 0\n\
- beq _0801FA02\n\
- ldr r6, _0801FAEC @ =gBattleMons\n\
- ldr r0, _0801FAF0 @ =gBankAttacker\n\
- ldrb r0, [r0]\n\
- movs r5, 0x58\n\
- muls r0, r5\n\
- adds r0, r6\n\
- ldrh r0, [r0, 0x28]\n\
- cmp r0, 0\n\
- beq _0801FA02\n\
- ldr r4, _0801FAF4 @ =gBattlescriptCurrInstr\n\
- ldr r0, [r4]\n\
- bl b_movescr_stack_push\n\
- ldr r1, _0801FAF8 @ =gBattleMoveDamage\n\
- adds r0, r7, 0\n\
- muls r0, r5\n\
- adds r0, r6\n\
- ldrh r0, [r0, 0x28]\n\
- str r0, [r1]\n\
- ldr r0, _0801FAFC @ =gUnknown_081D9156\n\
- str r0, [r4]\n\
-_0801FA02:\n\
- ldr r1, _0801FB00 @ =gStatuses3\n\
- ldr r6, _0801FB04 @ =gBankTarget\n\
- ldrb r0, [r6]\n\
- lsls r0, 2\n\
- adds r0, r1\n\
- ldr r0, [r0]\n\
- movs r1, 0x80\n\
- lsls r1, 7\n\
- ands r0, r1\n\
- cmp r0, 0\n\
- bne _0801FA1A\n\
- b _0801FB22\n\
-_0801FA1A:\n\
- ldr r0, _0801FAE8 @ =gHitMarker\n\
- ldr r5, [r0]\n\
- movs r0, 0x80\n\
- lsls r0, 17\n\
- ands r5, r0\n\
- cmp r5, 0\n\
- bne _0801FB22\n\
- ldr r4, _0801FAF0 @ =gBankAttacker\n\
- mov r8, r4\n\
- ldrb r0, [r4]\n\
- bl GetBankSide\n\
- adds r4, r0, 0\n\
- ldrb r0, [r6]\n\
- bl GetBankSide\n\
- lsls r4, 24\n\
- lsls r0, 24\n\
- cmp r4, r0\n\
- beq _0801FB22\n\
- ldr r0, _0801FAEC @ =gBattleMons\n\
- mov r9, r0\n\
- mov r1, r8\n\
- ldrb r2, [r1]\n\
- movs r7, 0x58\n\
- adds r3, r2, 0\n\
- muls r3, r7\n\
- adds r0, r3, r0\n\
- ldrh r0, [r0, 0x28]\n\
- cmp r0, 0\n\
- beq _0801FB22\n\
- ldr r0, _0801FB08 @ =gCurrentMove\n\
- ldrh r0, [r0]\n\
- cmp r0, 0xA5\n\
- beq _0801FB22\n\
- ldr r1, _0801FB0C @ =0x02000000\n\
- ldr r4, _0801FB10 @ =0x0001608c\n\
- adds r0, r2, r4\n\
- adds r0, r1\n\
- ldrb r4, [r0]\n\
- adds r0, r4, r3\n\
- mov r6, r9\n\
- adds r6, 0x24\n\
- adds r0, r6\n\
- strb r5, [r0]\n\
- ldr r5, _0801FAF4 @ =gBattlescriptCurrInstr\n\
- ldr r0, [r5]\n\
- bl b_movescr_stack_push\n\
- ldr r0, _0801FB14 @ =gUnknown_081D9468\n\
- str r0, [r5]\n\
- ldr r5, _0801FAE4 @ =gActiveBank\n\
- mov r1, r8\n\
- ldrb r0, [r1]\n\
- strb r0, [r5]\n\
- adds r1, r4, 0\n\
- adds r1, 0x9\n\
- lsls r1, 24\n\
- lsrs r1, 24\n\
- ldrb r0, [r5]\n\
- muls r0, r7\n\
- adds r0, r6\n\
- adds r0, r4\n\
- str r0, [sp]\n\
- movs r0, 0\n\
- movs r2, 0\n\
- movs r3, 0x1\n\
- bl EmitSetAttributes\n\
- ldrb r0, [r5]\n\
- bl MarkBufferBankForExecution\n\
- ldr r1, _0801FB18 @ =gBattleTextBuff1\n\
- movs r0, 0xFD\n\
- strb r0, [r1]\n\
- movs r0, 0x2\n\
- strb r0, [r1, 0x1]\n\
- lsls r4, 1\n\
- mov r2, r8\n\
- ldrb r0, [r2]\n\
- muls r0, r7\n\
- adds r0, r4, r0\n\
- mov r2, r9\n\
- adds r2, 0xC\n\
- adds r0, r2\n\
- ldrh r0, [r0]\n\
- strb r0, [r1, 0x2]\n\
- mov r3, r8\n\
- ldrb r0, [r3]\n\
- muls r0, r7\n\
- adds r4, r0\n\
- adds r4, r2\n\
- ldrh r0, [r4]\n\
- lsrs r0, 8\n\
- strb r0, [r1, 0x3]\n\
- movs r0, 0xFF\n\
- strb r0, [r1, 0x4]\n\
- b _0801FB22\n\
- .align 2, 0\n\
-_0801FAE0: .4byte gBattleResults\n\
-_0801FAE4: .4byte gActiveBank\n\
-_0801FAE8: .4byte gHitMarker\n\
-_0801FAEC: .4byte gBattleMons\n\
-_0801FAF0: .4byte gBankAttacker\n\
-_0801FAF4: .4byte gBattlescriptCurrInstr\n\
-_0801FAF8: .4byte gBattleMoveDamage\n\
-_0801FAFC: .4byte gUnknown_081D9156\n\
-_0801FB00: .4byte gStatuses3\n\
-_0801FB04: .4byte gBankTarget\n\
-_0801FB08: .4byte gCurrentMove\n\
-_0801FB0C: .4byte 0x02000000\n\
-_0801FB10: .4byte 0x0001608c\n\
-_0801FB14: .4byte gUnknown_081D9468\n\
-_0801FB18: .4byte gBattleTextBuff1\n\
-_0801FB1C:\n\
- ldr r0, [r6]\n\
- adds r0, 0x7\n\
- str r0, [r6]\n\
-_0801FB22:\n\
- add sp, 0x4\n\
- pop {r3-r5}\n\
- mov r8, r3\n\
- mov r9, r4\n\
- mov r10, r5\n\
- pop {r4-r7}\n\
- pop {r0}\n\
- bx r0\n\
- .syntax divided\n");
+ u8 *r4;
+
+ if (gBattlescriptCurrInstr[2] != 0)
+ {
+ gActiveBank = GetBattleBank(gBattlescriptCurrInstr[1]);
+ if (gHitMarker & HITMARKER_FAINTED(gActiveBank))
+ {
+ r4 = BSScriptReadPtr(gBattlescriptCurrInstr + 3);
+
+ b_movescr_stack_pop_cursor();
+ gBattlescriptCurrInstr = r4;
+ gSideAffecting[GetBankSide(gActiveBank)] &= ~SIDE_STATUS_SPIKES_DAMAGED;
+ }
+ else
+ {
+ gBattlescriptCurrInstr += 7;
+ }
+ }
+ else
+ {
+ u8 bank;
+
+ if (gBattlescriptCurrInstr[1] == 1)
+ {
+ gActiveBank = gBankAttacker;
+ bank = gBankTarget;
+ r4 = gUnknown_081D8C58;
+ }
+ else
+ {
+ gActiveBank = gBankTarget;
+ bank = gBankAttacker;
+ r4 = gUnknown_081D8C65;
+ }
+ if (!(gAbsentBankFlags & gBitTable[gActiveBank])
+ && gBattleMons[gActiveBank].hp == 0)
+ {
+ ewram[0x160AC + bank * 2 + 0] = 0;
+ ewram[0x160AC + bank * 2 + 1] = 0;
+ ewram[0x16100 + bank * 4 + 0] = 0;
+ ewram[0x16100 + bank * 4 + 1] = 0;
+ ewram[0x16100 + bank * 4 + 2] = 0;
+ ewram[0x16100 + bank * 4 + 3] = 0;
+
+ gHitMarker |= HITMARKER_FAINTED(gActiveBank);
+ b_movescr_stack_push(gBattlescriptCurrInstr + 7);
+ gBattlescriptCurrInstr = r4;
+ if (GetBankSide(gActiveBank) == 0)
+ {
+ gHitMarker |= HITMARKER_x400000;
+ if (gBattleResults.playerFaintCounter < 0xFF)
+ gBattleResults.playerFaintCounter++;
+ if (gBattleMons[bank].level > gBattleMons[gActiveBank].level)
+ {
+ if (gBattleMons[bank].level - gBattleMons[gActiveBank].level > 0x1D)
+ AdjustFriendship(&gPlayerParty[gBattlePartyID[gActiveBank]], 8);
+ else
+ AdjustFriendship(&gPlayerParty[gBattlePartyID[gActiveBank]], 6);
+ }
+ }
+ else
+ {
+ if (gBattleResults.opponentFaintCounter < 0xFF)
+ gBattleResults.opponentFaintCounter++;
+ gBattleResults.lastOpponentSpecies = gBattleMons[gActiveBank].species;
+ }
+ if ((gHitMarker & HITMARKER_DESTINYBOND) && gBattleMons[gBankAttacker].hp != 0)
+ {
+ b_movescr_stack_push(gBattlescriptCurrInstr);
+ gBattleMoveDamage = gBattleMons[bank].hp;
+ gBattlescriptCurrInstr = gUnknown_081D9156;
+ }
+ if ((gStatuses3[gBankTarget] & STATUS3_GRUDGE)
+ && !(gHitMarker & HITMARKER_GRUDGE)
+ && GetBankSide(gBankAttacker) != GetBankSide(gBankTarget)
+ && gBattleMons[gBankAttacker].hp != 0
+ && gCurrentMove != MOVE_STRUGGLE)
+ {
+ u8 moveIndex = ewram[0x1608C + gBankAttacker];
+
+ gBattleMons[gBankAttacker].pp[moveIndex] = 0;
+ b_movescr_stack_push(gBattlescriptCurrInstr);
+ gBattlescriptCurrInstr = gUnknown_081D9468;
+ gActiveBank = gBankAttacker;
+ EmitSetAttributes(0, moveIndex + 9, 0, 1, &gBattleMons[gActiveBank].pp[moveIndex]);
+ MarkBufferBankForExecution(gActiveBank);
+
+ gBattleTextBuff1[0] = 0xFD;
+ gBattleTextBuff1[1] = 2;
+ gBattleTextBuff1[2] = gBattleMons[gBankAttacker].moves[moveIndex];
+ gBattleTextBuff1[3] = gBattleMons[gBankAttacker].moves[moveIndex] >> 8;
+ gBattleTextBuff1[4] = EOS;
+ }
+ }
+ else
+ {
+ gBattlescriptCurrInstr += 7;
+ }
+ }
}
static void atk1A_faint_animation(void)
@@ -5832,13 +5278,14 @@ static void atk23_getexp(void)
else
{
BATTLE_STRUCT->atk23StateTracker++;
- unk_2000000[0x16113] |= gBitTable[gBattlePartyID[gBank1]];
+ ((u8*)ewram)[0x16113] |= gBitTable[gBattlePartyID[gBank1]];
}
break;
case 1: //calculate experience points to redistribute
{
- int via_sent_in = 0, i;
+ int via_sent_in = 0;
u16 calculatedExp;
+ int i;
for (i = 0; i < 6; i++)
{
u16 item;
@@ -5894,15 +5341,14 @@ static void atk23_getexp(void)
BATTLE_STRUCT->sentInPokes >>= 1;
tracker = &BATTLE_STRUCT->atk23StateTracker;
zero = 0;
- goto LABEL;
+ *tracker = 5; //increment looper
+ gBattleMoveDamage = zero; //used for exp
}
else if (GetMonData(&gPlayerParty[BATTLE_STRUCT->expGetterID], MON_DATA_LEVEL) == 100)
{
-
BATTLE_STRUCT->sentInPokes >>= 1;
tracker = &BATTLE_STRUCT->atk23StateTracker;
zero = 0;
- LABEL:
*tracker = 5; //increment looper
gBattleMoveDamage = zero; //used for exp
}
@@ -5937,7 +5383,9 @@ static void atk23_getexp(void)
stringID = 0x14A;
}
else
- stringID = 0x149;
+ {
+ stringID = 0x149;
+ }
//get exp getter bank
if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE)
@@ -5962,12 +5410,13 @@ static void atk23_getexp(void)
gBattleTextBuff1[3] = BATTLE_STRUCT->expGetterID;
gBattleTextBuff1[4] = 0xFF;
- //buffer 'gained' or 'gained a boosted'
- gBattleTextBuff2[0] = 0xFD;
- gBattleTextBuff2[1] = 0;
- gBattleTextBuff2[2] = sBYTE0_32(stringID);
- gBattleTextBuff2[3] = sBYTE1_32(stringID);
- gBattleTextBuff2[4] = 0xFF;
+ //buffer 'gained' or 'gained a boosted'
+ gBattleTextBuff2[0] = 0xFD;
+ gBattleTextBuff2[1] = 0;
+ gBattleTextBuff2[2] = stringID;
+ stringID = (stringID >> 8) & (0xFF); //this does not want to cooperate
+ gBattleTextBuff2[3] = stringID;
+ gBattleTextBuff2[4] = 0xFF;
//buffer exp number
gBattleTextBuff3[0] = 0xFD;
@@ -5994,7 +5443,8 @@ static void atk23_getexp(void)
gBattleBufferB[BATTLE_STRUCT->expGetterBank][0] = 0;
if (GetMonData(&gPlayerParty[BATTLE_STRUCT->expGetterID], MON_DATA_HP) && GetMonData(&gPlayerParty[BATTLE_STRUCT->expGetterID], MON_DATA_LEVEL) != 100)
{
- BATTLE_STRUCT->beforeLvlUp[0] = GetMonData(&gPlayerParty[BATTLE_STRUCT->expGetterID], MON_DATA_MAX_HP); //doesnt match
+ // Doesn't match.
+ BATTLE_STRUCT->beforeLvlUp[0] = GetMonData(&gPlayerParty[BATTLE_STRUCT->expGetterID], MON_DATA_MAX_HP);
BATTLE_STRUCT->beforeLvlUp[1] = GetMonData(&gPlayerParty[BATTLE_STRUCT->expGetterID], MON_DATA_ATK);
BATTLE_STRUCT->beforeLvlUp[2] = GetMonData(&gPlayerParty[BATTLE_STRUCT->expGetterID], MON_DATA_DEF);
BATTLE_STRUCT->beforeLvlUp[3] = GetMonData(&gPlayerParty[BATTLE_STRUCT->expGetterID], MON_DATA_SPD);
@@ -8022,9 +7472,39 @@ _080214AE:\n\
#ifdef NONMATCHING
static void atk46_playanimation2(void)
{
-
+ u8 arg1;
+ u8* arg2;
+ u16* arg3;
+ u32 something;
+
+ arg1 = BSScriptRead8(gBattlescriptCurrInstr + 1);
+ gActiveBank = GetBattleBank(arg1);
+ arg2 = BS2ScriptReadPtr(gBattlescriptCurrInstr + 2);
+ arg3 = BS2ScriptReadPtr(gBattlescriptCurrInstr + 6);
+
+ if (*arg2 == 1 || *arg2 == 0x11 || *arg2 == 2)
+ {
+ EmitBattleAnimation(0, *arg2, *arg3);
+ MarkBufferBankForExecution(gActiveBank);
+ gBattlescriptCurrInstr += 10;
+ return;
+ }
+ if ((gHitMarker & 0x80))
+ {
+ something = (u32)(gBattlescriptCurrInstr + 10);
+ }
+ else
+ {
+ u8 yeah = *arg2 - 10;
+ if (yeah < 4 || (gStatuses3[gActiveBank] & 0x000400C0) == 0)
+ {
+ EmitBattleAnimation(0, *arg2, *arg3);
+ MarkBufferBankForExecution(gActiveBank);
+ }
+ something = (u32)(gBattlescriptCurrInstr + 10);
+ }
+ gBattlescriptCurrInstr = (u8*)something;
}
-
#else
__attribute__((naked))
static void atk46_playanimation2(void)
@@ -10122,7 +9602,7 @@ static void atk4E_switchin_anim(void)
gActiveBank = GetBattleBank(BSScriptRead8(gBattlescriptCurrInstr + 1));
if (GetBankSide(gActiveBank) == 1 && !(gBattleTypeFlags & (BATTLE_TYPE_LINK | BATTLE_TYPE_EREADER_TRAINER | BATTLE_TYPE_BATTLE_TOWER)))
{
- GetNationalPokedexFlag(SpeciesToNationalPokedexNum(gBattleMons[gActiveBank].species), 2);
+ GetSetPokedexFlag(SpeciesToNationalPokedexNum(gBattleMons[gActiveBank].species), 2);
}
gAbsentBankFlags &= ~(gBitTable[gActiveBank]);
EmitSendOutPoke(0, gBattlePartyID[gActiveBank], BSScriptRead8(gBattlescriptCurrInstr + 2));
@@ -17834,7 +17314,7 @@ void atkEF_pokeball_catch_calculation(void)
ball_multiplier = 10;
break;
case ITEM_REPEAT_BALL:
- if (GetNationalPokedexFlag(SpeciesToNationalPokedexNum(gBattleMons[gBankTarget].species), 1))
+ if (GetSetPokedexFlag(SpeciesToNationalPokedexNum(gBattleMons[gBankTarget].species), 1))
ball_multiplier = 30;
else
ball_multiplier = 10;
@@ -17920,11 +17400,11 @@ static void atkF0_copy_caught_poke(void)
static void atkF1_setpoke_as_caught(void)
{
- if (GetNationalPokedexFlag(SpeciesToNationalPokedexNum(gBattleMons[gBankTarget].species), 1))
+ if (GetSetPokedexFlag(SpeciesToNationalPokedexNum(gBattleMons[gBankTarget].species), 1))
gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1);
else
{
- GetNationalPokedexFlag(SpeciesToNationalPokedexNum(gBattleMons[gBankTarget].species), 3);
+ GetSetPokedexFlag(SpeciesToNationalPokedexNum(gBattleMons[gBankTarget].species), 3);
if (gBattleMons[gBankTarget].species == SPECIES_UNOWN)
gSaveBlock2.pokedex.unownPersonality = gBattleMons[gBankTarget].personality;
if (gBattleMons[gBankTarget].species == SPECIES_SPINDA) //else if
diff --git a/src/battle_7.c b/src/battle/battle_7.c
index cf3a3522e..ad96510cf 100644
--- a/src/battle_7.c
+++ b/src/battle/battle_7.c
@@ -48,8 +48,8 @@ extern struct MusicPlayerInfo gMPlay_BGM;
extern u32 gBitTable[];
extern u16 gBattleTypeFlags;
extern u8 gBattleMonForms[];
-extern u8 gBattleAnimPlayerMonIndex;
-extern u8 gBattleAnimEnemyMonIndex;
+extern u8 gBattleAnimBankAttacker;
+extern u8 gBattleAnimBankTarget;
extern void (*gAnimScriptCallback)(void);
extern u8 gAnimScriptActive;
extern const u8 *const gBattleAnims_Unknown1[];
@@ -78,7 +78,7 @@ extern void sub_80440EC();
extern void sub_804777C();
extern void sub_8141828();
extern u8 sub_8077ABC();
-extern u8 sub_8078874(u8);
+extern u8 AnimBankSpriteExists(u8);
extern u8 sub_8077F68(u8);
extern u8 sub_8077F7C(u8);
extern void sub_8094958(void);
@@ -185,8 +185,8 @@ bool8 move_anim_start_t3(u8 a, u8 b, u8 c, u8 d, u16 e)
sub_80324E0(a);
return TRUE;
}
- gBattleAnimPlayerMonIndex = b;
- gBattleAnimEnemyMonIndex = c;
+ gBattleAnimBankAttacker = b;
+ gBattleAnimBankTarget = c;
ewram17840.unk0 = e;
DoMoveAnim(gBattleAnims_Unknown1, d, 0);
taskId = CreateTask(sub_80315E8, 10);
@@ -225,8 +225,8 @@ void move_anim_start_t4(u8 a, u8 b, u8 c, u8 d)
{
u8 taskId;
- gBattleAnimPlayerMonIndex = b;
- gBattleAnimEnemyMonIndex = c;
+ gBattleAnimBankAttacker = b;
+ gBattleAnimBankTarget = c;
DoMoveAnim(gBattleAnims_Unknown2, d, 0);
taskId = CreateTask(sub_80316CC, 10);
gTasks[taskId].data[0] = a;
@@ -301,16 +301,16 @@ void BattleLoadOpponentMonSprite(struct Pokemon *pkmn, u8 b)
r7);
paletteOffset = 0x100 + b * 16;
if (ewram17800[b].transformedSpecies == 0)
- lzPaletteData = pokemon_get_pal(pkmn);
+ lzPaletteData = GetMonSpritePal(pkmn);
else
- lzPaletteData = species_and_otid_get_pal(species, otId, personalityValue);
- sub_800D238(lzPaletteData, ewram);
+ lzPaletteData = GetMonSpritePalFromOtIdPersonality(species, otId, personalityValue);
+ LZDecompressWram(lzPaletteData, ewram);
LoadPalette(ewram, paletteOffset, 0x20);
LoadPalette(ewram, 0x80 + b * 16, 0x20);
if (species == SPECIES_CASTFORM)
{
paletteOffset = 0x100 + b * 16;
- sub_800D238(lzPaletteData, ewram + 0x16400);
+ LZDecompressWram(lzPaletteData, ewram + 0x16400);
LoadPalette(ewram + 0x16400 + gBattleMonForms[b] * 32, paletteOffset, 0x20);
}
if (ewram17800[b].transformedSpecies != 0)
@@ -353,16 +353,16 @@ void BattleLoadPlayerMonSprite(struct Pokemon *pkmn, u8 b)
r7);
paletteOffset = 0x100 + b * 16;
if (ewram17800[b].transformedSpecies == 0)
- lzPaletteData = pokemon_get_pal(pkmn);
+ lzPaletteData = GetMonSpritePal(pkmn);
else
- lzPaletteData = species_and_otid_get_pal(species, otId, personalityValue);
- sub_800D238(lzPaletteData, ewram);
+ lzPaletteData = GetMonSpritePalFromOtIdPersonality(species, otId, personalityValue);
+ LZDecompressWram(lzPaletteData, ewram);
LoadPalette(ewram, paletteOffset, 0x20);
LoadPalette(ewram, 0x80 + b * 16, 0x20);
if (species == SPECIES_CASTFORM)
{
paletteOffset = 0x100 + b * 16;
- sub_800D238(lzPaletteData, ewram + 0x16400);
+ LZDecompressWram(lzPaletteData, ewram + 0x16400);
LoadPalette(ewram + 0x16400 + gBattleMonForms[b] * 32, paletteOffset, 0x20);
}
if (ewram17800[b].transformedSpecies != 0)
@@ -506,7 +506,7 @@ bool8 sub_8031C30(u8 a)
void load_gfxc_health_bar(void)
{
- sub_800D238(gUnknown_08D09C48, (void *)0x02000000);
+ LZDecompressWram(gUnknown_08D09C48, (void *)0x02000000);
}
u8 battle_load_something(u8 *pState, u8 *b)
@@ -690,14 +690,14 @@ void sub_8031FC4(u8 a, u8 b, bool8 c)
dst = (void *)(VRAM + 0x10000 + gSprites[gObjectBankIDs[a]].oam.tileNum * 32);
DmaCopy32(3, src, dst, 0x800);
paletteOffset = 0x100 + a * 16;
- lzPaletteData = species_and_otid_get_pal(species, otId, personalityValue);
- sub_800D238(lzPaletteData, ewram);
+ lzPaletteData = GetMonSpritePalFromOtIdPersonality(species, otId, personalityValue);
+ LZDecompressWram(lzPaletteData, ewram);
LoadPalette(ewram, paletteOffset, 32);
if (species == SPECIES_CASTFORM)
{
u16 *paletteSrc = (u16 *)(ewram + 0x16400);
- sub_800D238(lzPaletteData, paletteSrc);
+ LZDecompressWram(lzPaletteData, paletteSrc);
LoadPalette(paletteSrc + gBattleMonForms[b] * 16, paletteOffset, 32);
}
BlendPalette(paletteOffset, 16, 6, 0x7FFF);
@@ -846,7 +846,7 @@ void sub_80326EC(u8 a)
for (i = 0; i < gNoOfAllBanks; i++)
{
- if (sub_8078874(i) != 0)
+ if (AnimBankSpriteExists(i) != 0)
{
gSprites[gObjectBankIDs[i]].oam.affineMode = a;
if (a == 0)
@@ -884,7 +884,7 @@ void sub_80328A4(struct Sprite *sprite)
u8 r4 = sprite->data0;
struct Sprite *r7 = &gSprites[gObjectBankIDs[r4]];
- if (!r7->inUse || sub_8078874(r4) == 0)
+ if (!r7->inUse || AnimBankSpriteExists(r4) == 0)
{
sprite->callback = sub_8032978;
return;
diff --git a/src/battle_ai.c b/src/battle/battle_ai.c
index 0e20c6b05..1869bbe36 100644
--- a/src/battle_ai.c
+++ b/src/battle/battle_ai.c
@@ -1273,7 +1273,7 @@ static void BattleAICmd_if_arg_not_equal(void)
static void BattleAICmd_if_would_go_first(void)
{
- if (b_first_side(gBankAttacker, gBankTarget, 1) == gAIScriptPtr[1])
+ if (GetWhoStrikesFirst(gBankAttacker, gBankTarget, 1) == gAIScriptPtr[1])
gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 2);
else
gAIScriptPtr += 6;
@@ -1281,7 +1281,7 @@ static void BattleAICmd_if_would_go_first(void)
static void BattleAICmd_if_would_not_go_first(void)
{
- if (b_first_side(gBankAttacker, gBankTarget, 1) != gAIScriptPtr[1])
+ if (GetWhoStrikesFirst(gBankAttacker, gBankTarget, 1) != gAIScriptPtr[1])
gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 2);
else
gAIScriptPtr += 6;
diff --git a/src/battle_anim.c b/src/battle/battle_anim.c
index 6bd98099a..111d72813 100644
--- a/src/battle_anim.c
+++ b/src/battle/battle_anim.c
@@ -37,8 +37,8 @@ EWRAM_DATA u8 gMonAnimTaskIdArray[2] = {0};
EWRAM_DATA u8 gUnknown_0202F7C4 = 0;
EWRAM_DATA u8 gUnknown_0202F7C5 = 0;
EWRAM_DATA u16 gAnimMoveIndex = 0; // set but unused.
-EWRAM_DATA u8 gBattleAnimPlayerMonIndex = 0;
-EWRAM_DATA u8 gBattleAnimEnemyMonIndex = 0;
+EWRAM_DATA u8 gBattleAnimBankAttacker = 0;
+EWRAM_DATA u8 gBattleAnimBankTarget = 0;
EWRAM_DATA u16 gUnknown_0202F7CA[4] = {0};
EWRAM_DATA u8 gUnknown_0202F7D2 = 0;
extern u16 gUnknown_030041B4;
@@ -201,15 +201,15 @@ void battle_anim_clear_some_data(void)
gUnknown_0202F7C4 = 0;
gUnknown_0202F7C5 = 0;
gAnimMoveIndex = 0;
- gBattleAnimPlayerMonIndex = 0;
- gBattleAnimEnemyMonIndex = 0;
+ gBattleAnimBankAttacker = 0;
+ gBattleAnimBankTarget = 0;
gUnknown_0202F7D2 = 0;
}
void ExecuteMoveAnim(u16 move)
{
- gBattleAnimPlayerMonIndex = gBankAttacker;
- gBattleAnimEnemyMonIndex = gBankTarget;
+ gBattleAnimBankAttacker = gBankAttacker;
+ gBattleAnimBankTarget = gBankTarget;
DoMoveAnim(gBattleAnims_Moves, move, 1);
}
@@ -396,7 +396,7 @@ static void ScriptCmd_sprite(void)
r4 -= 0x40;
else
r4 = -r4;
- _r0 = sub_8079E90(gBattleAnimEnemyMonIndex);
+ _r0 = sub_8079E90(gBattleAnimBankTarget);
r1 = r4;
}
@@ -407,15 +407,15 @@ static void ScriptCmd_sprite(void)
r4 -= 0x40;
else
r4 = -r4;
- _r0 = sub_8079E90(gBattleAnimPlayerMonIndex);
+ _r0 = sub_8079E90(gBattleAnimBankAttacker);
r1 = r4;
}
r6 = _r0 + r1;
if ((s16)r6 < 3)
r6 = 3;
- r4 = sub_8077ABC(gBattleAnimEnemyMonIndex, 2);
- r2 = sub_8077ABC(gBattleAnimEnemyMonIndex, 3);
+ r4 = sub_8077ABC(gBattleAnimBankTarget, 2);
+ r2 = sub_8077ABC(gBattleAnimBankTarget, 3);
CreateSpriteAndAnimate(r7, r4, r2, r6);
gAnimVisualTaskCount++;
}
@@ -485,10 +485,10 @@ _08075B34:\n\
_08075B36:\n\
lsls r0, 24\n\
lsrs r4, r0, 24\n\
- ldr r0, _08075B40 @ =gBattleAnimEnemyMonIndex\n\
+ ldr r0, _08075B40 @ =gBattleAnimBankTarget\n\
b _08075B56\n\
.align 2, 0\n\
-_08075B40: .4byte gBattleAnimEnemyMonIndex\n\
+_08075B40: .4byte gBattleAnimBankTarget\n\
_08075B44:\n\
cmp r4, 0x3F\n\
bls _08075B4E\n\
@@ -500,7 +500,7 @@ _08075B4E:\n\
_08075B50:\n\
lsls r0, 24\n\
lsrs r4, r0, 24\n\
- ldr r0, _08075BAC @ =gBattleAnimPlayerMonIndex\n\
+ ldr r0, _08075BAC @ =gBattleAnimBankAttacker\n\
_08075B56:\n\
ldrb r0, [r0]\n\
bl sub_8079E90\n\
@@ -517,7 +517,7 @@ _08075B56:\n\
bgt _08075B74\n\
movs r6, 0x3\n\
_08075B74:\n\
- ldr r5, _08075BB0 @ =gBattleAnimEnemyMonIndex\n\
+ ldr r5, _08075BB0 @ =gBattleAnimBankTarget\n\
ldrb r0, [r5]\n\
movs r1, 0x2\n\
bl sub_8077ABC\n\
@@ -543,8 +543,8 @@ _08075B74:\n\
pop {r0}\n\
bx r0\n\
.align 2, 0\n\
-_08075BAC: .4byte gBattleAnimPlayerMonIndex\n\
-_08075BB0: .4byte gBattleAnimEnemyMonIndex\n\
+_08075BAC: .4byte gBattleAnimBankAttacker\n\
+_08075BB0: .4byte gBattleAnimBankTarget\n\
_08075BB4: .4byte gAnimVisualTaskCount\n\
.syntax divided\n");
}
@@ -686,10 +686,10 @@ static void ScriptCmd_monbg(void)
else if (r6 == 1)
r6 = 3;
if (r6 == 0 || r6 == 2)
- r5 = gBattleAnimPlayerMonIndex;
+ r5 = gBattleAnimBankAttacker;
else
- r5 = gBattleAnimEnemyMonIndex;
- if (b_side_obj__get_some_boolean(r5))
+ r5 = gBattleAnimBankTarget;
+ if (IsAnimBankSpriteVisible(r5))
{
r0 = GetBankIdentity(r5);
r0 += 0xFF;
@@ -719,7 +719,7 @@ static void ScriptCmd_monbg(void)
}
r5 ^= 2;
- if (r6 > 1 && b_side_obj__get_some_boolean(r5))
+ if (r6 > 1 && IsAnimBankSpriteVisible(r5))
{
r0 = GetBankIdentity(r5);
r0 += 0xFF;
@@ -751,20 +751,20 @@ static void ScriptCmd_monbg(void)
}
#ifdef NONMATCHING
-bool8 b_side_obj__get_some_boolean(u8 a)
+bool8 IsAnimBankSpriteVisible(u8 a)
{
- if (IsContest() != 0)
+ if (IsContest())
{
- if (a == gBattleAnimPlayerMonIndex)
+ if (a == gBattleAnimBankAttacker)
return TRUE;
else
return FALSE;
}
- if (sub_8078874(a) == 0)
+ if (!AnimBankSpriteExists(a))
return FALSE;
- if (IsContest() != 0)
+ if (IsContest())
return TRUE; // this line wont ever be reached.
- if ((EWRAM_17800[a].unk0 & 1) == 0)
+ if (!(EWRAM_17800[a].unk0 & 1))
return TRUE;
if (gSprites[gObjectBankIDs[a]].invisible)
return FALSE;
@@ -772,7 +772,7 @@ bool8 b_side_obj__get_some_boolean(u8 a)
}
#else
__attribute__((naked))
-bool8 b_side_obj__get_some_boolean(u8 a)
+bool8 IsAnimBankSpriteVisible(u8 a)
{
asm(".syntax unified\n\
push {r4,r5,lr}\n\
@@ -783,16 +783,16 @@ bool8 b_side_obj__get_some_boolean(u8 a)
lsls r0, 24\n\
cmp r0, 0\n\
beq _08075FDC\n\
- ldr r0, _08075FD8 @ =gBattleAnimPlayerMonIndex\n\
+ ldr r0, _08075FD8 @ =gBattleAnimBankAttacker\n\
ldrb r0, [r0]\n\
cmp r4, r0\n\
beq _0807601C\n\
b _0807602C\n\
.align 2, 0\n\
-_08075FD8: .4byte gBattleAnimPlayerMonIndex\n\
+_08075FD8: .4byte gBattleAnimBankAttacker\n\
_08075FDC:\n\
adds r0, r4, 0\n\
- bl sub_8078874\n\
+ bl AnimBankSpriteExists\n\
lsls r0, 24\n\
cmp r0, 0\n\
beq _0807602C\n\
@@ -1096,9 +1096,9 @@ static void ScriptCmd_clearmonbg(void)
else if (r4 == 1)
r4 = 3;
if (r4 == 0 || r4 == 2)
- r5 = gBattleAnimPlayerMonIndex;
+ r5 = gBattleAnimBankAttacker;
else
- r5 = gBattleAnimEnemyMonIndex;
+ r5 = gBattleAnimBankTarget;
if (gMonAnimTaskIdArray[0] != 0xFF)
gSprites[gObjectBankIDs[r5]].invisible = FALSE;
if (r4 > 1 && gMonAnimTaskIdArray[1] != 0xFF)
@@ -1155,10 +1155,10 @@ static void ScriptCmd_monbg_22(void)
else if (r5 == 1)
r5 = 3;
if (r5 == 0 || r5 == 2)
- r4 = gBattleAnimPlayerMonIndex;
+ r4 = gBattleAnimBankAttacker;
else
- r4 = gBattleAnimEnemyMonIndex;
- if (b_side_obj__get_some_boolean(r4))
+ r4 = gBattleAnimBankTarget;
+ if (IsAnimBankSpriteVisible(r4))
{
r0 = GetBankIdentity(r4);
r0 += 0xFF;
@@ -1170,7 +1170,7 @@ static void ScriptCmd_monbg_22(void)
gSprites[gObjectBankIDs[r4]].invisible = FALSE;
}
r4 ^= 2;
- if (r5 > 1 && b_side_obj__get_some_boolean(r4))
+ if (r5 > 1 && IsAnimBankSpriteVisible(r4))
{
r0 = GetBankIdentity(r4);
r0 += 0xFF;
@@ -1197,12 +1197,12 @@ static void ScriptCmd_clearmonbg_23(void)
else if (r5 == 1)
r5 = 3;
if (r5 == 0 || r5 == 2)
- r6 = gBattleAnimPlayerMonIndex;
+ r6 = gBattleAnimBankAttacker;
else
- r6 = gBattleAnimEnemyMonIndex;
- if (b_side_obj__get_some_boolean(r6))
+ r6 = gBattleAnimBankTarget;
+ if (IsAnimBankSpriteVisible(r6))
gSprites[gObjectBankIDs[r6]].invisible = FALSE;
- if (r5 > 1 && b_side_obj__get_some_boolean(r6 ^ 2))
+ if (r5 > 1 && IsAnimBankSpriteVisible(r6 ^ 2))
gSprites[gObjectBankIDs[r6 ^ 2]].invisible = FALSE;
else
r5 = 0;
@@ -1228,9 +1228,9 @@ static void sub_80769A4(u8 taskId)
r5 = 0;
else
r5 = 1;
- if (b_side_obj__get_some_boolean(r4))
+ if (IsAnimBankSpriteVisible(r4))
sub_8076464(r5);
- if (gTasks[taskId].data[0] > 1 && b_side_obj__get_some_boolean(r4 ^ 2))
+ if (gTasks[taskId].data[0] > 1 && IsAnimBankSpriteVisible(r4 ^ 2))
sub_8076464(r5 ^ 1);
DestroyTask(taskId);
}
@@ -1371,7 +1371,7 @@ static void ScriptCmd_fadetobg_25(void)
taskId = CreateTask(task_p5_load_battle_screen_elements, 5);
if (IsContest() != 0)
gTasks[taskId].data[0] = r6;
- else if (GetBankSide(gBattleAnimEnemyMonIndex) == 0)
+ else if (GetBankSide(gBattleAnimBankTarget) == 0)
gTasks[taskId].data[0] = r7;
else
gTasks[taskId].data[0] = r8;
@@ -1422,7 +1422,7 @@ static void sub_8076DB8(u16 a)
void *dmaSrc;
void *dmaDest;
- sub_800D238(tilemap, IsContest() ? EWRAM_14800 : EWRAM_18000);
+ LZDecompressWram(tilemap, IsContest() ? EWRAM_14800 : EWRAM_18000);
sub_80763FC(sub_80789BC(), IsContest() ? EWRAM_14800 : EWRAM_18000, 0x100, 0);
dmaSrc = IsContest() ? EWRAM_14800 : EWRAM_18000;
dmaDest = (void *)(VRAM + 0xD000);
@@ -1493,16 +1493,16 @@ static void ScriptCmd_changebg(void)
/*
s8 sub_8076F98(s8 a)
{
- if (!IsContest() && (EWRAM_17810[gBattleAnimPlayerMonIndex].unk0 & 0x10))
+ if (!IsContest() && (EWRAM_17810[gBattleAnimBankAttacker].unk0 & 0x10))
{
- a = GetBankSide(gBattleAnimPlayerMonIndex) ? 0xC0 : 0x3F;
+ a = GetBankSide(gBattleAnimBankAttacker) ? 0xC0 : 0x3F;
}
//_08076FDC
else
{
if (IsContest())
{
- if (gBattleAnimPlayerMonIndex == gBattleAnimEnemyMonIndex && gBattleAnimPlayerMonIndex == 2
+ if (gBattleAnimBankAttacker == gBattleAnimBankTarget && gBattleAnimBankAttacker == 2
&& a == 0x3F)
{
//jump to _0807707A
@@ -1514,9 +1514,9 @@ s8 sub_8076F98(s8 a)
//_08077004
else
{
- if (GetBankSide(gBattleAnimPlayerMonIndex) == 0)
+ if (GetBankSide(gBattleAnimBankAttacker) == 0)
{
- if (GetBankSide(gBattleAnimEnemyMonIndex) == 0)
+ if (GetBankSide(gBattleAnimBankTarget) == 0)
}
//_08077042
else
@@ -1540,7 +1540,7 @@ s8 sub_8076F98(s8 a)
lsls r0, 24\n\
cmp r0, 0\n\
bne _08076FDC\n\
- ldr r0, _08076FD4 @ =gBattleAnimPlayerMonIndex\n\
+ ldr r0, _08076FD4 @ =gBattleAnimBankAttacker\n\
ldrb r2, [r0]\n\
lsls r0, r2, 1\n\
adds r0, r2\n\
@@ -1561,15 +1561,15 @@ s8 sub_8076F98(s8 a)
movs r4, 0x3F\n\
b _0807706E\n\
.align 2, 0\n\
-_08076FD4: .4byte gBattleAnimPlayerMonIndex\n\
+_08076FD4: .4byte gBattleAnimBankAttacker\n\
_08076FD8: .4byte 0x02017810\n\
_08076FDC:\n\
bl IsContest\n\
lsls r0, 24\n\
cmp r0, 0\n\
beq _08077004\n\
- ldr r0, _08076FFC @ =gBattleAnimPlayerMonIndex\n\
- ldr r1, _08077000 @ =gBattleAnimEnemyMonIndex\n\
+ ldr r0, _08076FFC @ =gBattleAnimBankAttacker\n\
+ ldr r1, _08077000 @ =gBattleAnimBankTarget\n\
ldrb r0, [r0]\n\
ldrb r1, [r1]\n\
cmp r0, r1\n\
@@ -1580,16 +1580,16 @@ _08076FDC:\n\
beq _0807707A\n\
b _08077068\n\
.align 2, 0\n\
-_08076FFC: .4byte gBattleAnimPlayerMonIndex\n\
-_08077000: .4byte gBattleAnimEnemyMonIndex\n\
+_08076FFC: .4byte gBattleAnimBankAttacker\n\
+_08077000: .4byte gBattleAnimBankTarget\n\
_08077004:\n\
- ldr r0, _0807702C @ =gBattleAnimPlayerMonIndex\n\
+ ldr r0, _0807702C @ =gBattleAnimBankAttacker\n\
ldrb r0, [r0]\n\
bl GetBankSide\n\
lsls r0, 24\n\
cmp r0, 0\n\
bne _08077042\n\
- ldr r0, _08077030 @ =gBattleAnimEnemyMonIndex\n\
+ ldr r0, _08077030 @ =gBattleAnimBankTarget\n\
ldrb r0, [r0]\n\
bl GetBankSide\n\
lsls r0, 24\n\
@@ -1602,8 +1602,8 @@ _08077004:\n\
movs r4, 0xC0\n\
b _0807706E\n\
.align 2, 0\n\
-_0807702C: .4byte gBattleAnimPlayerMonIndex\n\
-_08077030: .4byte gBattleAnimEnemyMonIndex\n\
+_0807702C: .4byte gBattleAnimBankAttacker\n\
+_08077030: .4byte gBattleAnimBankTarget\n\
_08077034:\n\
movs r0, 0x40\n\
negs r0, r0\n\
@@ -1613,7 +1613,7 @@ _08077034:\n\
lsls r0, 24\n\
b _0807706C\n\
_08077042:\n\
- ldr r0, _08077064 @ =gBattleAnimEnemyMonIndex\n\
+ ldr r0, _08077064 @ =gBattleAnimBankTarget\n\
ldrb r0, [r0]\n\
bl GetBankSide\n\
lsls r0, 24\n\
@@ -1629,7 +1629,7 @@ _08077042:\n\
movs r4, 0x3F\n\
b _0807706E\n\
.align 2, 0\n\
-_08077064: .4byte gBattleAnimEnemyMonIndex\n\
+_08077064: .4byte gBattleAnimBankTarget\n\
_08077068:\n\
lsls r0, r4, 24\n\
negs r0, r0\n\
@@ -1661,16 +1661,16 @@ _08077088:\n\
s8 sub_8077094(s8 a)
{
- if (!IsContest() && (EWRAM_17810[gBattleAnimPlayerMonIndex].unk0 & 0x10))
+ if (!IsContest() && (EWRAM_17810[gBattleAnimBankAttacker].unk0 & 0x10))
{
- if (GetBankSide(gBattleAnimPlayerMonIndex) != 0)
+ if (GetBankSide(gBattleAnimBankAttacker) != 0)
a = 0x3F;
else
a = 0xC0;
}
else
{
- if (GetBankSide(gBattleAnimPlayerMonIndex) != 0 || IsContest() != 0)
+ if (GetBankSide(gBattleAnimBankAttacker) != 0 || IsContest() != 0)
a = -a;
}
return a;
@@ -2128,9 +2128,9 @@ static void ScriptCmd_monbgprio_28(void)
r2 = SCRIPT_READ_8(gBattleAnimScriptPtr + 1);
gBattleAnimScriptPtr += 2;
if (r2 != 0)
- r0 = gBattleAnimEnemyMonIndex;
+ r0 = gBattleAnimBankTarget;
else
- r0 = gBattleAnimPlayerMonIndex;
+ r0 = gBattleAnimBankAttacker;
r4 = GetBankIdentity(r0);
if (!IsContest() && (r4 == 0 || r4 == 3))
{
@@ -2157,12 +2157,12 @@ static void ScriptCmd_monbgprio_2A(void)
r6 = SCRIPT_READ_8(gBattleAnimScriptPtr + 1);
gBattleAnimScriptPtr += 2;
- if (GetBankSide(gBattleAnimPlayerMonIndex) != GetBankSide(gBattleAnimEnemyMonIndex))
+ if (GetBankSide(gBattleAnimBankAttacker) != GetBankSide(gBattleAnimBankTarget))
{
if (r6 != 0)
- r0 = gBattleAnimEnemyMonIndex;
+ r0 = gBattleAnimBankTarget;
else
- r0 = gBattleAnimPlayerMonIndex;
+ r0 = gBattleAnimBankAttacker;
r4 = GetBankIdentity(r0);
if (!IsContest() && (r4 == 0 || r4 == 3))
{
@@ -2178,7 +2178,7 @@ static void ScriptCmd_invisible(void)
u8 spriteId;
r0 = SCRIPT_READ_8(gBattleAnimScriptPtr + 1);
- spriteId = obj_id_for_side_relative_to_move(r0);
+ spriteId = GetAnimBankSpriteId(r0);
if (spriteId != 0xFF)
{
gSprites[spriteId].invisible = TRUE;
@@ -2192,7 +2192,7 @@ static void ScriptCmd_visible(void)
u8 spriteId;
r0 = SCRIPT_READ_8(gBattleAnimScriptPtr + 1);
- spriteId = obj_id_for_side_relative_to_move(r0);
+ spriteId = GetAnimBankSpriteId(r0);
if (spriteId != 0xFF)
{
gSprites[spriteId].invisible = FALSE;
@@ -2209,17 +2209,17 @@ static void ScriptCmd_doublebattle_2D(void)
r7 = SCRIPT_READ_8(gBattleAnimScriptPtr + 1);
gBattleAnimScriptPtr += 2;
if (!IsContest() && IsDoubleBattle()
- && GetBankSide(gBattleAnimPlayerMonIndex) == GetBankSide(gBattleAnimEnemyMonIndex))
+ && GetBankSide(gBattleAnimBankAttacker) == GetBankSide(gBattleAnimBankTarget))
{
if (r7 == 0)
{
- r4 = GetBankIdentity_permutated(gBattleAnimPlayerMonIndex);
- spriteId = obj_id_for_side_relative_to_move(0);
+ r4 = GetBankIdentity_permutated(gBattleAnimBankAttacker);
+ spriteId = GetAnimBankSpriteId(0);
}
else
{
- r4 = GetBankIdentity_permutated(gBattleAnimEnemyMonIndex);
- spriteId = obj_id_for_side_relative_to_move(1);
+ r4 = GetBankIdentity_permutated(gBattleAnimBankTarget);
+ spriteId = GetAnimBankSpriteId(1);
}
if (spriteId != 0xFF)
{
@@ -2243,17 +2243,17 @@ static void ScriptCmd_doublebattle_2E(void)
r7 = SCRIPT_READ_8(gBattleAnimScriptPtr + 1);
gBattleAnimScriptPtr += 2;
if (!IsContest() && IsDoubleBattle()
- && GetBankSide(gBattleAnimPlayerMonIndex) == GetBankSide(gBattleAnimEnemyMonIndex))
+ && GetBankSide(gBattleAnimBankAttacker) == GetBankSide(gBattleAnimBankTarget))
{
if (r7 == 0)
{
- r4 = GetBankIdentity_permutated(gBattleAnimPlayerMonIndex);
- spriteId = obj_id_for_side_relative_to_move(0);
+ r4 = GetBankIdentity_permutated(gBattleAnimBankAttacker);
+ spriteId = GetAnimBankSpriteId(0);
}
else
{
- r4 = GetBankIdentity_permutated(gBattleAnimEnemyMonIndex);
- spriteId = obj_id_for_side_relative_to_move(1);
+ r4 = GetBankIdentity_permutated(gBattleAnimBankTarget);
+ spriteId = GetAnimBankSpriteId(1);
}
if (spriteId != 0xFF && r4 == 2)
{
diff --git a/src/battle_anim_807B69C.c b/src/battle/battle_anim_807B69C.c
index 42932877b..bf3eb7ef1 100644
--- a/src/battle_anim_807B69C.c
+++ b/src/battle/battle_anim_807B69C.c
@@ -8,12 +8,12 @@
#include "task.h"
#include "trig.h"
-extern u8 gBattleAnimPlayerMonIndex;
-extern u8 gBattleAnimEnemyMonIndex;
+extern u8 gBattleAnimBankAttacker;
+extern u8 gBattleAnimBankTarget;
extern bool8 gAnimScriptActive;
extern void (*gAnimScriptCallback)(void);
extern s16 gBattleAnimArgs[];
-extern u8 gBattleAnimEnemyMonIndex;
+extern u8 gBattleAnimBankTarget;
extern u8 gObjectBankIDs[];
extern const struct CompressedSpriteSheet gBattleAnimPicTable[];
extern const struct CompressedSpritePalette gBattleAnimPaletteTable[];
@@ -179,8 +179,8 @@ static void sub_807B8A4(struct Sprite *sprite)
void sub_807B920(u8 taskId)
{
- s16 x = sub_8077ABC(gBattleAnimEnemyMonIndex, 2) - 32;
- s16 y = sub_8077ABC(gBattleAnimEnemyMonIndex, 3) - 36;
+ s16 x = sub_8077ABC(gBattleAnimBankTarget, 2) - 32;
+ s16 y = sub_8077ABC(gBattleAnimBankTarget, 3) - 36;
u8 spriteId;
if (IsContest())
@@ -335,8 +335,8 @@ void move_anim_start_t2(u8 a, u8 b)
{
u8 taskId;
- gBattleAnimPlayerMonIndex = a;
- gBattleAnimEnemyMonIndex = a;
+ gBattleAnimBankAttacker = a;
+ gBattleAnimBankTarget = a;
DoMoveAnim(gBattleAnims_StatusConditions, b, 0);
taskId = CreateTask(sub_807BDAC, 10);
gTasks[taskId].data[0] = a;
diff --git a/src/battle_anim_80A7E7C.c b/src/battle/battle_anim_80A7E7C.c
index 31984977f..e0c79dc8e 100644
--- a/src/battle_anim_80A7E7C.c
+++ b/src/battle/battle_anim_80A7E7C.c
@@ -12,8 +12,8 @@ extern s16 gBattleAnimArgs[8];
extern u8 gObjectBankIDs[];
extern s32 gMoveDmgMoveAnim;
extern u16 gMovePowerMoveAnim;
-extern u8 gBattleAnimPlayerMonIndex;
-extern u8 gBattleAnimEnemyMonIndex;
+extern u8 gBattleAnimBankAttacker;
+extern u8 gBattleAnimBankTarget;
static void sub_80A7EF0(u8 taskId);
static void sub_80A808C(u8 taskId);
@@ -34,7 +34,7 @@ static void sub_80A913C(u8 taskId);
void sub_80A7E7C(u8 taskId)
{
u8 sprite;
- sprite = obj_id_for_side_relative_to_move(gBattleAnimArgs[0]);
+ sprite = GetAnimBankSpriteId(gBattleAnimArgs[0]);
if (sprite == 0xff)
{
DestroyAnimVisualTask(taskId);
@@ -96,7 +96,7 @@ void sub_80A7FA0(u8 taskId)
r6 = 0;
if (gBattleAnimArgs[0] < 4)
{
- sprite = obj_id_for_side_relative_to_move(gBattleAnimArgs[0]);
+ sprite = GetAnimBankSpriteId(gBattleAnimArgs[0]);
if (sprite == 0xff)
{
DestroyAnimVisualTask(taskId);
@@ -121,7 +121,7 @@ void sub_80A7FA0(u8 taskId)
side = GetBankByPlayerAI(3);
break;
}
- if (b_side_obj__get_some_boolean(side) == FALSE)
+ if (IsAnimBankSpriteVisible(side) == FALSE)
{
r6 = 1;
}
@@ -129,7 +129,7 @@ void sub_80A7FA0(u8 taskId)
}
else
{
- sprite = gObjectBankIDs[gBattleAnimPlayerMonIndex];
+ sprite = gObjectBankIDs[gBattleAnimBankAttacker];
}
if (r6)
{
@@ -186,7 +186,7 @@ static void sub_80A808C(u8 taskId)
void sub_80A8154(u8 taskId)
{
u8 sprite;
- sprite = obj_id_for_side_relative_to_move(gBattleAnimArgs[0]);
+ sprite = GetAnimBankSpriteId(gBattleAnimArgs[0]);
if (sprite == 0xff)
{
DestroyAnimVisualTask(taskId);
@@ -244,7 +244,7 @@ static void sub_80A81D8(u8 taskId)
void sub_80A8314(u8 taskId)
{
- u8 sprite = obj_id_for_side_relative_to_move(gBattleAnimArgs[0]);
+ u8 sprite = GetAnimBankSpriteId(gBattleAnimArgs[0]);
gSprites[sprite].pos2.x = gBattleAnimArgs[1];
TASK.data[0] = sprite;
TASK.data[1] = gBattleAnimArgs[1];
@@ -286,7 +286,7 @@ void sub_80A8408(u8 taskId)
u8 sprite;
u8 v1;
v1 = 1;
- sprite = obj_id_for_side_relative_to_move(gBattleAnimArgs[0]);
+ sprite = GetAnimBankSpriteId(gBattleAnimArgs[0]);
if (gBattleAnimArgs[4] > 5)
{
gBattleAnimArgs[4] = 5;
@@ -328,7 +328,7 @@ static void sub_80A8488(u8 taskId)
void sub_80A8500(u8 taskId)
{
- if (GetBankSide(gBattleAnimPlayerMonIndex))
+ if (GetBankSide(gBattleAnimBankAttacker))
{
gBattleAnimArgs[1] = -gBattleAnimArgs[1];
}
@@ -338,7 +338,7 @@ void sub_80A8500(u8 taskId)
void sub_80A8530(struct Sprite *sprite)
{
sprite->invisible = TRUE;
- if (GetBankSide(gBattleAnimPlayerMonIndex))
+ if (GetBankSide(gBattleAnimBankAttacker))
{
sprite->data1 = -gBattleAnimArgs[1];
}
@@ -348,9 +348,9 @@ void sub_80A8530(struct Sprite *sprite)
}
sprite->data0 = gBattleAnimArgs[0];
sprite->data2 = 0;
- sprite->data3 = gObjectBankIDs[gBattleAnimPlayerMonIndex];
+ sprite->data3 = gObjectBankIDs[gBattleAnimBankAttacker];
sprite->data4 = gBattleAnimArgs[0];
- oamt_set_x3A_32(sprite, sub_80A85A4);
+ StoreSpriteCallbackInData6(sprite, sub_80A85A4);
sprite->callback = sub_8078458;
}
@@ -359,20 +359,20 @@ static void sub_80A85A4(struct Sprite *sprite)
sprite->data0 = sprite->data4;
sprite->data1 = -sprite->data1;
sprite->callback = sub_8078458;
- oamt_set_x3A_32(sprite, move_anim_8072740);
+ StoreSpriteCallbackInData6(sprite, move_anim_8072740);
}
void sub_80A85C8(struct Sprite *sprite)
{
u8 spriteId;
sprite->invisible = TRUE;
- spriteId = obj_id_for_side_relative_to_move(gBattleAnimArgs[2]);
+ spriteId = GetAnimBankSpriteId(gBattleAnimArgs[2]);
sprite->data0 = gBattleAnimArgs[0];
sprite->data1 = 0;
sprite->data2 = gBattleAnimArgs[1];
sprite->data3 = spriteId;
sprite->data4 = gBattleAnimArgs[0];
- oamt_set_x3A_32(sprite, sub_80A8614);
+ StoreSpriteCallbackInData6(sprite, sub_80A8614);
sprite->callback = sub_8078458;
}
@@ -381,7 +381,7 @@ void sub_80A8614(struct Sprite *sprite)
sprite->data0 = sprite->data4;
sprite->data2 = -sprite->data2;
sprite->callback = sub_8078458;
- oamt_set_x3A_32(sprite, move_anim_8072740);
+ StoreSpriteCallbackInData6(sprite, move_anim_8072740);
}
void sub_80A8638(struct Sprite *sprite)
@@ -390,11 +390,11 @@ void sub_80A8638(struct Sprite *sprite)
int spriteId;
if (!gBattleAnimArgs[0])
{
- spriteId = gObjectBankIDs[gBattleAnimPlayerMonIndex];
+ spriteId = gObjectBankIDs[gBattleAnimBankAttacker];
}
else
{
- spriteId = gObjectBankIDs[gBattleAnimEnemyMonIndex];
+ spriteId = gObjectBankIDs[gBattleAnimBankTarget];
}
sprite->data0 = gBattleAnimArgs[2];
sprite->data1 = gSprites[spriteId].pos1.x + gSprites[spriteId].pos2.x;
@@ -457,11 +457,11 @@ void sub_80A8764(struct Sprite *sprite)
u8 spriteId;
if (!gBattleAnimArgs[0])
{
- v1 = gBattleAnimPlayerMonIndex;
+ v1 = gBattleAnimBankAttacker;
}
else
{
- v1 = gBattleAnimEnemyMonIndex;
+ v1 = gBattleAnimBankTarget;
}
spriteId = gObjectBankIDs[v1];
if (GetBankSide(v1))
@@ -482,7 +482,7 @@ void sub_80A8764(struct Sprite *sprite)
sprite->data4 = 0;
sprite->data5 = spriteId;
sprite->invisible = TRUE;
- oamt_set_x3A_32(sprite, move_anim_8072740);
+ StoreSpriteCallbackInData6(sprite, move_anim_8072740);
sprite->callback = sub_80784A8;
}
@@ -493,11 +493,11 @@ void sub_80A8818(struct Sprite *sprite)
sprite->invisible = TRUE;
if (!gBattleAnimArgs[0])
{
- v1 = gBattleAnimPlayerMonIndex;
+ v1 = gBattleAnimBankAttacker;
}
else
{
- v1 = gBattleAnimEnemyMonIndex;
+ v1 = gBattleAnimBankTarget;
}
spriteId = gObjectBankIDs[v1];
if (GetBankSide(v1))
@@ -520,11 +520,11 @@ void sub_80A8818(struct Sprite *sprite)
sprite->data6 = gBattleAnimArgs[5];
if (!gBattleAnimArgs[5])
{
- oamt_set_x3A_32(sprite, move_anim_8072740);
+ StoreSpriteCallbackInData6(sprite, move_anim_8072740);
}
else
{
- oamt_set_x3A_32(sprite, sub_80A88F0);
+ StoreSpriteCallbackInData6(sprite, sub_80A88F0);
}
sprite->callback = sub_80784A8;
}
@@ -541,12 +541,12 @@ void sub_80A8920(u8 taskId)
{
s16 r7;
r7 = 0x8000 / gBattleAnimArgs[3];
- if (GetBankSide(gBattleAnimPlayerMonIndex))
+ if (GetBankSide(gBattleAnimBankAttacker))
{
gBattleAnimArgs[1] = -gBattleAnimArgs[1];
gBattleAnimArgs[5] = -gBattleAnimArgs[5];
}
- TASK.data[0] = obj_id_for_side_relative_to_move(gBattleAnimArgs[0]);
+ TASK.data[0] = GetAnimBankSpriteId(gBattleAnimArgs[0]);
TASK.data[1] = (gBattleAnimArgs[1] << 8) / gBattleAnimArgs[3];
TASK.data[2] = gBattleAnimArgs[2];
TASK.data[3] = gBattleAnimArgs[3];
@@ -600,30 +600,30 @@ void sub_80A8A80(u8 taskId)
{
case 0:
case 1:
- spriteId = obj_id_for_side_relative_to_move(gBattleAnimArgs[0]);
+ spriteId = GetAnimBankSpriteId(gBattleAnimArgs[0]);
break;
case 2:
- if (!b_side_obj__get_some_boolean(gBattleAnimPlayerMonIndex ^ 2))
+ if (!IsAnimBankSpriteVisible(gBattleAnimBankAttacker ^ 2))
{
DestroyAnimVisualTask(taskId);
return;
}
- spriteId = gObjectBankIDs[gBattleAnimPlayerMonIndex ^ 2];
+ spriteId = gObjectBankIDs[gBattleAnimBankAttacker ^ 2];
break;
case 3:
- if (!b_side_obj__get_some_boolean(gBattleAnimEnemyMonIndex ^ 2))
+ if (!IsAnimBankSpriteVisible(gBattleAnimBankTarget ^ 2))
{
DestroyAnimVisualTask(taskId);
return;
}
- spriteId = gObjectBankIDs[gBattleAnimEnemyMonIndex ^ 2];
+ spriteId = gObjectBankIDs[gBattleAnimBankTarget ^ 2];
break;
default:
DestroyAnimVisualTask(taskId);
return;
}
TASK.data[0] = spriteId;
- if (GetBankSide(gBattleAnimEnemyMonIndex))
+ if (GetBankSide(gBattleAnimBankTarget))
{
TASK.data[1] = gBattleAnimArgs[1];
}
@@ -648,11 +648,11 @@ static void sub_80A8B3C(u8 taskId)
void sub_80A8B88(u8 taskId)
{
u8 spriteId;
- if (GetBankSide(gBattleAnimPlayerMonIndex))
+ if (GetBankSide(gBattleAnimBankAttacker))
{
gBattleAnimArgs[1] = -gBattleAnimArgs[1];
}
- spriteId = obj_id_for_side_relative_to_move(gBattleAnimArgs[4]);
+ spriteId = GetAnimBankSpriteId(gBattleAnimArgs[4]);
TASK.data[0] = gBattleAnimArgs[0];
TASK.data[1] = gBattleAnimArgs[1];
TASK.data[2] = gBattleAnimArgs[2];
@@ -660,11 +660,11 @@ void sub_80A8B88(u8 taskId)
TASK.data[4] = spriteId;
if (gBattleAnimArgs[4] == 0)
{
- TASK.data[5] = gBattleAnimPlayerMonIndex;
+ TASK.data[5] = gBattleAnimBankAttacker;
}
else
{
- TASK.data[5] = gBattleAnimEnemyMonIndex;
+ TASK.data[5] = gBattleAnimBankTarget;
}
TASK.data[12] = 1;
TASK.func = sub_80A8C0C;
@@ -714,7 +714,7 @@ static void sub_80A8C0C(u8 taskId)
void sub_80A8D34(u8 taskId)
{
u8 spriteId;
- spriteId = obj_id_for_side_relative_to_move(gBattleAnimArgs[3]);
+ spriteId = GetAnimBankSpriteId(gBattleAnimArgs[3]);
sub_8078E70(spriteId, gBattleAnimArgs[4]);
TASK.data[0] = gBattleAnimArgs[0];
TASK.data[1] = gBattleAnimArgs[1];
@@ -754,7 +754,7 @@ static void sub_80A8D8C(u8 taskId)
void sub_80A8E04(u8 taskId)
{
u8 spriteId;
- spriteId = obj_id_for_side_relative_to_move(gBattleAnimArgs[2]);
+ spriteId = GetAnimBankSpriteId(gBattleAnimArgs[2]);
sub_8078E70(spriteId, 0);
TASK.data[1] = 0;
TASK.data[2] = gBattleAnimArgs[0];
@@ -777,11 +777,11 @@ void sub_80A8E04(u8 taskId)
{
if (gBattleAnimArgs[2] == 0)
{
- TASK.data[7] = !GetBankSide(gBattleAnimPlayerMonIndex);
+ TASK.data[7] = !GetBankSide(gBattleAnimBankAttacker);
}
else
{
- TASK.data[7] = !GetBankSide(gBattleAnimEnemyMonIndex);
+ TASK.data[7] = !GetBankSide(gBattleAnimBankTarget);
}
}
if (TASK.data[7])
@@ -798,20 +798,20 @@ void sub_80A8E04(u8 taskId)
void sub_80A8EFC(u8 taskId)
{
u8 spriteId;
- spriteId = obj_id_for_side_relative_to_move(gBattleAnimArgs[2]);
+ spriteId = GetAnimBankSpriteId(gBattleAnimArgs[2]);
sub_8078E70(spriteId, 0);
TASK.data[1] = 0;
TASK.data[2] = gBattleAnimArgs[0];
if (gBattleAnimArgs[2] == 0)
{
- if (GetBankSide(gBattleAnimPlayerMonIndex))
+ if (GetBankSide(gBattleAnimBankAttacker))
{
gBattleAnimArgs[1] = -gBattleAnimArgs[1];
}
}
else
{
- if (GetBankSide(gBattleAnimEnemyMonIndex))
+ if (GetBankSide(gBattleAnimBankTarget))
{
gBattleAnimArgs[1] = -gBattleAnimArgs[1];
}
@@ -891,7 +891,7 @@ void sub_80A9058(u8 taskId)
TASK.data[12] = 0;
TASK.data[10] = gBattleAnimArgs[3];
TASK.data[11] = gBattleAnimArgs[4];
- TASK.data[7] = obj_id_for_side_relative_to_move(1);
+ TASK.data[7] = GetAnimBankSpriteId(1);
TASK.data[8] = gSprites[TASK.data[7]].pos2.x;
TASK.data[9] = gSprites[TASK.data[7]].pos2.y;
TASK.data[0] = 0;
diff --git a/src/battle/battle_anim_80CA710.c b/src/battle/battle_anim_80CA710.c
new file mode 100644
index 000000000..65ccd7c21
--- /dev/null
+++ b/src/battle/battle_anim_80CA710.c
@@ -0,0 +1,18 @@
+
+// Includes
+#include "global.h"
+
+// Static type declarations
+
+// Static RAM declarations
+
+IWRAM_DATA u32 filler_03000724;
+IWRAM_DATA u16 gUnknown_03000728[4];
+IWRAM_DATA u16 gUnknown_03000730[6];
+IWRAM_DATA u32 filler_0300073c;
+
+// Static ROM declarations
+
+// .rodata
+
+// .text
diff --git a/src/battle_controller_linkopponent.c b/src/battle/battle_controller_linkopponent.c
index 93c6671e5..0b6c3b6a1 100644
--- a/src/battle_controller_linkopponent.c
+++ b/src/battle/battle_controller_linkopponent.c
@@ -71,7 +71,7 @@ extern void sub_8031A6C(u16, u8);
extern void sub_80313A0(struct Sprite *);
extern void sub_803757C(void);
extern void oamt_add_pos2_onto_pos1();
-extern void oamt_set_x3A_32();
+extern void StoreSpriteCallbackInData6();
extern void sub_8078B34(struct Sprite *);
extern void sub_80375B4(void);
extern void sub_8010384(struct Sprite *);
@@ -99,7 +99,7 @@ extern void nullsub_47(void);
extern bool8 IsDoubleBattle(void);
extern void sub_8037840(void);
extern void sub_8031B74();
-extern u8 sub_8078874();
+extern u8 AnimBankSpriteExists();
extern u8 move_anim_start_t3();
extern void sub_8037FD8(void);
extern void sub_8037F34(void);
@@ -1285,7 +1285,7 @@ void LinkOpponentHandleTrainerSlideBack(void)
gSprites[gObjectBankIDs[gActiveBank]].data2 = 280;
gSprites[gObjectBankIDs[gActiveBank]].data4 = gSprites[gObjectBankIDs[gActiveBank]].pos1.y;
gSprites[gObjectBankIDs[gActiveBank]].callback = sub_8078B34;
- oamt_set_x3A_32(&gSprites[gObjectBankIDs[gActiveBank]], SpriteCallbackDummy);
+ StoreSpriteCallbackInData6(&gSprites[gObjectBankIDs[gActiveBank]], SpriteCallbackDummy);
gBattleBankFunc[gActiveBank] = sub_80375B4;
}
@@ -1636,7 +1636,7 @@ void LinkOpponentHandleTrainerBallThrow(void)
gSprites[gObjectBankIDs[gActiveBank]].data2 = 280;
gSprites[gObjectBankIDs[gActiveBank]].data4 = gSprites[gObjectBankIDs[gActiveBank]].pos1.y;
gSprites[gObjectBankIDs[gActiveBank]].callback = sub_8078B34;
- oamt_set_x3A_32(&gSprites[gObjectBankIDs[gActiveBank]], sub_803A3A8);
+ StoreSpriteCallbackInData6(&gSprites[gObjectBankIDs[gActiveBank]], sub_803A3A8);
taskId = CreateTask(sub_803A2C4, 5);
gTasks[taskId].data[0] = gActiveBank;
if (ewram17810[gActiveBank].unk0_0)
@@ -1733,7 +1733,7 @@ void LinkOpponentHandlecmd50(void)
void LinkOpponentHandleSpriteInvisibility(void)
{
- if (sub_8078874(gActiveBank) != 0)
+ if (AnimBankSpriteExists(gActiveBank) != 0)
{
gSprites[gObjectBankIDs[gActiveBank]].invisible = gBattleBufferA[gActiveBank][1];
sub_8031F88(gActiveBank);
diff --git a/src/battle_controller_linkpartner.c b/src/battle/battle_controller_linkpartner.c
index 95022eaaf..3e34b2e25 100644
--- a/src/battle_controller_linkpartner.c
+++ b/src/battle/battle_controller_linkpartner.c
@@ -66,7 +66,7 @@ extern u8 gAnimScriptActive;
extern void (*gAnimScriptCallback)(void);
extern u8 move_anim_start_t3();
-extern u8 sub_8078874();
+extern u8 AnimBankSpriteExists();
extern void sub_8044CA0(u8);
extern void sub_8030E38(struct Sprite *);
extern void sub_80E43C0();
@@ -82,7 +82,7 @@ extern void sub_80324BC();
extern u8 sub_8031720();
extern u8 mplay_80342A4();
extern void oamt_add_pos2_onto_pos1();
-extern void oamt_set_x3A_32();
+extern void StoreSpriteCallbackInData6();
extern void sub_8078B34(struct Sprite *);
extern void sub_80105EC(struct Sprite *);
extern s32 sub_803FC34(u16);
@@ -1239,7 +1239,7 @@ void LinkPartnerHandleTrainerSlideBack(void)
gSprites[gObjectBankIDs[gActiveBank]].data2 = -40;
gSprites[gObjectBankIDs[gActiveBank]].data4 = gSprites[gObjectBankIDs[gActiveBank]].pos1.y;
gSprites[gObjectBankIDs[gActiveBank]].callback = sub_8078B34;
- oamt_set_x3A_32(&gSprites[gObjectBankIDs[gActiveBank]], SpriteCallbackDummy);
+ StoreSpriteCallbackInData6(&gSprites[gObjectBankIDs[gActiveBank]], SpriteCallbackDummy);
gBattleBankFunc[gActiveBank] = sub_811DB1C;
}
@@ -1592,7 +1592,7 @@ void LinkPartnerHandleTrainerBallThrow(void)
gSprites[gObjectBankIDs[gActiveBank]].data4 = gSprites[gObjectBankIDs[gActiveBank]].pos1.y;
gSprites[gObjectBankIDs[gActiveBank]].callback = sub_8078B34;
gSprites[gObjectBankIDs[gActiveBank]].data5 = gActiveBank;
- oamt_set_x3A_32(&gSprites[gObjectBankIDs[gActiveBank]], sub_8030E38);
+ StoreSpriteCallbackInData6(&gSprites[gObjectBankIDs[gActiveBank]], sub_8030E38);
StartSpriteAnim(&gSprites[gObjectBankIDs[gActiveBank]], 1);
r4 = AllocSpritePalette(0xD6F9);
LoadCompressedPalette(
@@ -1682,7 +1682,7 @@ void LinkPartnerHandlecmd50(void)
void LinkPartnerHandleSpriteInvisibility(void)
{
- if (sub_8078874(gActiveBank) != 0)
+ if (AnimBankSpriteExists(gActiveBank) != 0)
{
gSprites[gObjectBankIDs[gActiveBank]].invisible = gBattleBufferA[gActiveBank][1];
sub_8031F88(gActiveBank);
diff --git a/src/battle_controller_opponent.c b/src/battle/battle_controller_opponent.c
index dd8c62cce..72b56b962 100644
--- a/src/battle_controller_opponent.c
+++ b/src/battle/battle_controller_opponent.c
@@ -85,7 +85,7 @@ extern void sub_8032B84(void);
extern void sub_8078B34(struct Sprite *);
extern void sub_8032BBC(void);
extern void oamt_add_pos2_onto_pos1();
-extern void oamt_set_x3A_32();
+extern void StoreSpriteCallbackInData6();
extern void sub_803311C(void);
extern void sub_8010384(struct Sprite *);
extern bool8 mplay_80342A4(u8);
@@ -113,7 +113,7 @@ extern void nullsub_45(void);
extern void sub_8031B74();
extern bool8 IsDoubleBattle(void);
extern void sub_8032E2C(void);
-extern u8 sub_8078874();
+extern u8 AnimBankSpriteExists();
extern u8 move_anim_start_t3();
extern void sub_80334C0(void);
@@ -1281,7 +1281,7 @@ void OpponentHandleTrainerSlideBack(void)
gSprites[gObjectBankIDs[gActiveBank]].data2 = 280;
gSprites[gObjectBankIDs[gActiveBank]].data4 = gSprites[gObjectBankIDs[gActiveBank]].pos1.y;
gSprites[gObjectBankIDs[gActiveBank]].callback = sub_8078B34;
- oamt_set_x3A_32(&gSprites[gObjectBankIDs[gActiveBank]], SpriteCallbackDummy);
+ StoreSpriteCallbackInData6(&gSprites[gObjectBankIDs[gActiveBank]], SpriteCallbackDummy);
gBattleBankFunc[gActiveBank] = sub_8032BBC;
}
@@ -1910,7 +1910,7 @@ void OpponentHandleTrainerBallThrow(void)
gSprites[gObjectBankIDs[gActiveBank]].data2 = 280;
gSprites[gObjectBankIDs[gActiveBank]].data4 = gSprites[gObjectBankIDs[gActiveBank]].pos1.y;
gSprites[gObjectBankIDs[gActiveBank]].callback = sub_8078B34;
- oamt_set_x3A_32(&gSprites[gObjectBankIDs[gActiveBank]], sub_8035C10);
+ StoreSpriteCallbackInData6(&gSprites[gObjectBankIDs[gActiveBank]], sub_8035C10);
taskId = CreateTask(sub_8035C44, 5);
gTasks[taskId].data[0] = gActiveBank;
if (ewram17810[gActiveBank].unk0_0)
@@ -2007,7 +2007,7 @@ void OpponentHandlecmd50(void)
void OpponentHandleSpriteInvisibility(void)
{
- if (sub_8078874(gActiveBank) != 0)
+ if (AnimBankSpriteExists(gActiveBank) != 0)
{
gSprites[gObjectBankIDs[gActiveBank]].invisible = gBattleBufferA[gActiveBank][1];
sub_8031F88(gActiveBank);
diff --git a/src/battle_controller_player.c b/src/battle/battle_controller_player.c
index 5cfdeefbe..53b596c5e 100644
--- a/src/battle_controller_player.c
+++ b/src/battle/battle_controller_player.c
@@ -101,11 +101,11 @@ extern u8 GetBankSide(u8);
extern void sub_80E43C0();
extern void oamt_add_pos2_onto_pos1();
extern void sub_8078B34(struct Sprite *);
-extern void oamt_set_x3A_32();
+extern void StoreSpriteCallbackInData6();
extern void BattleLoadPlayerMonSprite();
extern bool8 IsDoubleBattle(void);
extern void sub_802D500(void);
-extern bool8 sub_8078874(u8);
+extern bool8 AnimBankSpriteExists(u8);
extern bool8 move_anim_start_t3();
extern void sub_802E460(void);
extern void b_link_standby_message(void);
@@ -2425,7 +2425,7 @@ void PlayerHandleTrainerSlideBack(void)
gSprites[gObjectBankIDs[gActiveBank]].data2 = -40;
gSprites[gObjectBankIDs[gActiveBank]].data4 = gSprites[gObjectBankIDs[gActiveBank]].pos1.y;
gSprites[gObjectBankIDs[gActiveBank]].callback = sub_8078B34;
- oamt_set_x3A_32(&gSprites[gObjectBankIDs[gActiveBank]], SpriteCallbackDummy);
+ StoreSpriteCallbackInData6(&gSprites[gObjectBankIDs[gActiveBank]], SpriteCallbackDummy);
StartSpriteAnim(&gSprites[gObjectBankIDs[gActiveBank]], 1);
gBattleBankFunc[gActiveBank] = sub_802D274;
}
@@ -2896,7 +2896,7 @@ void PlayerHandleTrainerBallThrow(void)
gSprites[gObjectBankIDs[gActiveBank]].data4 = gSprites[gObjectBankIDs[gActiveBank]].pos1.y;
gSprites[gObjectBankIDs[gActiveBank]].callback = sub_8078B34;
gSprites[gObjectBankIDs[gActiveBank]].data5 = gActiveBank;
- oamt_set_x3A_32(&gSprites[gObjectBankIDs[gActiveBank]], sub_8030E38);
+ StoreSpriteCallbackInData6(&gSprites[gObjectBankIDs[gActiveBank]], sub_8030E38);
StartSpriteAnim(&gSprites[gObjectBankIDs[gActiveBank]], 1);
paletteNum = AllocSpritePalette(0xD6F8);
LoadCompressedPalette(gTrainerBackPicPaletteTable[gSaveBlock2.playerGender].data, 0x100 + paletteNum * 16, 32);
@@ -2994,7 +2994,7 @@ void PlayerHandlecmd50(void)
void PlayerHandleSpriteInvisibility(void)
{
- if (sub_8078874(gActiveBank))
+ if (AnimBankSpriteExists(gActiveBank))
{
gSprites[gObjectBankIDs[gActiveBank]].invisible = gBattleBufferA[gActiveBank][1];
sub_8031F88(gActiveBank);
diff --git a/src/battle_controller_safari.c b/src/battle/battle_controller_safari.c
index e05578c31..e05578c31 100644
--- a/src/battle_controller_safari.c
+++ b/src/battle/battle_controller_safari.c
diff --git a/src/battle_controller_wally.c b/src/battle/battle_controller_wally.c
index f2cf5bbb4..bf6ef0892 100644
--- a/src/battle_controller_wally.c
+++ b/src/battle/battle_controller_wally.c
@@ -89,7 +89,7 @@ extern void sub_80E43C0();
extern void oamt_add_pos2_onto_pos1();
extern void sub_8078B34(struct Sprite *);
extern void sub_8030E38(struct Sprite *);
-extern void oamt_set_x3A_32();
+extern void StoreSpriteCallbackInData6();
extern u8 sub_8046400();
extern u8 sub_8077ABC();
extern u8 sub_8077F68();
@@ -1490,7 +1490,7 @@ void WallyHandleTrainerBallThrow(void)
gSprites[gObjectBankIDs[gActiveBank]].data4 = gSprites[gObjectBankIDs[gActiveBank]].pos1.y;
gSprites[gObjectBankIDs[gActiveBank]].callback = sub_8078B34;
gSprites[gObjectBankIDs[gActiveBank]].data5 = gActiveBank;
- oamt_set_x3A_32(&gSprites[gObjectBankIDs[gActiveBank]], sub_8030E38);
+ StoreSpriteCallbackInData6(&gSprites[gObjectBankIDs[gActiveBank]], sub_8030E38);
StartSpriteAnim(&gSprites[gObjectBankIDs[gActiveBank]], 1);
paletteNum = AllocSpritePalette(0xD6F8);
LoadCompressedPalette(gTrainerBackPicPaletteTable[2].data, 0x100 + paletteNum * 16, 32);
diff --git a/src/battle_interface.c b/src/battle/battle_interface.c
index 7c9253852..8bfeedd4d 100644
--- a/src/battle_interface.c
+++ b/src/battle/battle_interface.c
@@ -2501,7 +2501,7 @@ static void sub_8045458(u8 a, u8 b)
if (GetBankSide(r4) != 0)
{
u16 species = GetMonData(&gEnemyParty[gBattlePartyID[r4]], MON_DATA_SPECIES);
- if (GetNationalPokedexFlag(SpeciesToNationalPokedexNum(species), 1) != 0)
+ if (GetSetPokedexFlag(SpeciesToNationalPokedexNum(species), 1) != 0)
{
r4 = gSprites[a].data5;
if (b != 0)
diff --git a/src/battle_message.c b/src/battle/battle_message.c
index a3cc320ad..a3cc320ad 100644
--- a/src/battle_message.c
+++ b/src/battle/battle_message.c
diff --git a/src/battle_party_menu.c b/src/battle/battle_party_menu.c
index dc7c5db5b..dc7c5db5b 100644
--- a/src/battle_party_menu.c
+++ b/src/battle/battle_party_menu.c
diff --git a/src/battle_records.c b/src/battle/battle_records.c
index d848a10b8..d848a10b8 100644
--- a/src/battle_records.c
+++ b/src/battle/battle_records.c
diff --git a/src/battle_setup.c b/src/battle/battle_setup.c
index 59e17e9eb..40949ed38 100644
--- a/src/battle_setup.c
+++ b/src/battle/battle_setup.c
@@ -876,7 +876,7 @@ static void CB2_StartFirstBattle(void)
static void CB2_EndFirstBattle(void)
{
- sav1_reset_battle_music_maybe();
+ Overworld_ClearSavedMusic();
SetMainCallback2(c2_exit_to_overworld_1_continue_scripts_restart_music);
}
diff --git a/src/battle_transition.c b/src/battle/battle_transition.c
index 53d32d03a..53d32d03a 100644
--- a/src/battle_transition.c
+++ b/src/battle/battle_transition.c
diff --git a/src/calculate_base_damage.c b/src/battle/calculate_base_damage.c
index f5c679876..f5c679876 100644
--- a/src/calculate_base_damage.c
+++ b/src/battle/calculate_base_damage.c
diff --git a/src/contest_link_80C857C.c b/src/battle/contest_link_80C857C.c
index 0ae98af09..0ae98af09 100644
--- a/src/contest_link_80C857C.c
+++ b/src/battle/contest_link_80C857C.c
diff --git a/src/pokeball.c b/src/battle/pokeball.c
index ee3b95678..ee3b95678 100644
--- a/src/pokeball.c
+++ b/src/battle/pokeball.c
diff --git a/src/post_battle_event_funcs.c b/src/battle/post_battle_event_funcs.c
index 27d7022fe..27d7022fe 100644
--- a/src/post_battle_event_funcs.c
+++ b/src/battle/post_battle_event_funcs.c
diff --git a/src/reshow_battle_screen.c b/src/battle/reshow_battle_screen.c
index 343c8f183..343c8f183 100644
--- a/src/reshow_battle_screen.c
+++ b/src/battle/reshow_battle_screen.c
diff --git a/src/smokescreen.c b/src/battle/smokescreen.c
index 8345cb6ad..8345cb6ad 100644
--- a/src/smokescreen.c
+++ b/src/battle/smokescreen.c
diff --git a/src/daycare.c b/src/daycare.c
deleted file mode 100644
index 7f688016a..000000000
--- a/src/daycare.c
+++ /dev/null
@@ -1,350 +0,0 @@
-#include "global.h"
-#include "daycare.h"
-#include "pokemon.h"
-#include "species.h"
-#include "items.h"
-#include "string_util.h"
-
-extern u8 gLastFieldPokeMenuOpened;
-
-u8 *GetMonNick(struct Pokemon *mon, u8 *dest)
-{
- s8 nickname[POKEMON_NAME_LENGTH * 2];
-
- GetMonData(mon, MON_DATA_NICKNAME, nickname);
- return StringCopy10(dest, nickname);
-}
-
-u8 *GetBoxMonNick(struct BoxPokemon *mon, u8 *dest)
-{
- s8 nickname[POKEMON_NAME_LENGTH * 2];
-
- GetBoxMonData(mon, MON_DATA_NICKNAME, nickname);
- return StringCopy10(dest, nickname);
-}
-
-u8 Daycare_CountPokemon(struct BoxPokemon *daycare_data)
-{
- u8 i, count;
- count = 0;
-
- for(i = 0;i <= 1;i++)
- if(GetBoxMonData(daycare_data + i, MON_DATA_SPECIES) != 0)
- count++;
-
- return count;
-}
-
-void sub_8041324(struct BoxPokemon * box_pokemon, struct RecordMixing_UnknownStruct * void_pointer)
-{
- u8 i;
- u8 specCount;
- specCount = 0;
- for (i=0; i<2; i++)
- {
- if (GetBoxMonData(&box_pokemon[i], MON_DATA_SPECIES) != SPECIES_NONE)
- {
- specCount ++;
- if (GetBoxMonData(&box_pokemon[i], MON_DATA_HELD_ITEM) == ITEM_NONE)
- {
- void_pointer->unk74[i] = 0;
- } else
- {
- void_pointer->unk74[i] = 1;
- }
- } else
- {
- void_pointer->unk74[i] = 1;
- }
- }
- void_pointer->unk70 = specCount;
-}
-
-s8 Daycare_FindEmptySpot(struct BoxPokemon * daycare_data)
-{
- u8 i;
-
- for(i = 0;i <= 1;i++)
- if(GetBoxMonData(daycare_data + i, MON_DATA_SPECIES) == 0)
- return i;
-
- return -1;
-}
-
-/*void Daycare_SendPokemon(struct Pokemon * mon, struct BoxPokemon * daycare_data){ // unfinished
- s8 empty_slot;
-
- empty_slot = Daycare_FindEmptySpot(daycare_data);
- if(MonHasMail(mon) != 0){ // if the mon holds a mail?
- u8 empty_slot_times_56 = empty_slot * 56;
- u8 * something2 = ((u8 *) (daycare_data + 2)) + empty_slot_times_56 + 36;
- StringCopy(something2, gSaveBlock2.playerName);
- PadNameString(something2, 0xFC);
- something2 += 8;
- GetMonNick(mon, something2);
- u8 pokerus = GetMonData(mon, MON_DATA_64);
- something1 += (u8 * daycare_data)
-}*/
-
-__attribute__((naked))
-void Daycare_SendPokemon()
-{
- // strange stack usage - happens because THUMB ARM only allows R0-R7 to be pushed/popped:
- // all registers in reglist must be Lo registers, except that PUSH can include the LR, and POP can include the PC
- // the ldm/stm section probably copies some struct, but I'm not sure how the code would look
- asm(".syntax unified\n\
- push {r4-r7,lr}\n\
- mov r7, r9\n\
- mov r6, r8\n\
- push {r6,r7}\n\
- adds r7, r0, 0\n\
- mov r8, r1\n\
- mov r0, r8\n\
- bl Daycare_FindEmptySpot\n\
- lsls r0, 24\n\
- lsrs r4, r0, 24\n\
- mov r9, r4\n\
- adds r0, r7, 0\n\
- bl MonHasMail\n\
- lsls r0, 24\n\
- cmp r0, 0\n\
- beq _0804144A\n\
- lsls r0, r4, 24\n\
- asrs r0, 24\n\
- lsls r4, r0, 3\n\
- subs r4, r0\n\
- lsls r4, 3\n\
- adds r5, r4, 0\n\
- adds r5, 0xA0\n\
- add r5, r8\n\
- adds r6, r5, 0\n\
- adds r6, 0x24\n\
- ldr r1, _08041490 @ =gSaveBlock2\n\
- adds r0, r6, 0\n\
- bl StringCopy\n\
- adds r0, r6, 0\n\
- movs r1, 0xFC\n\
- bl PadNameString\n\
- adds r6, 0x8\n\
- adds r0, r7, 0\n\
- adds r1, r6, 0\n\
- bl GetMonNick\n\
- adds r0, r7, 0\n\
- movs r1, 0x40\n\
- bl GetMonData\n\
- lsls r0, 24\n\
- lsrs r0, 24\n\
- add r4, r8\n\
- ldr r2, _08041494 @ =gSaveBlock1\n\
- lsls r1, r0, 3\n\
- adds r1, r0\n\
- lsls r1, 2\n\
- adds r1, r2\n\
- adds r4, 0xA0\n\
- ldr r0, _08041498 @ =0x00002b4c\n\
- adds r1, r0\n\
- ldm r1!, {r0,r2,r3}\n\
- stm r4!, {r0,r2,r3}\n\
- ldm r1!, {r0,r2,r3}\n\
- stm r4!, {r0,r2,r3}\n\
- ldm r1!, {r0,r2,r3}\n\
- stm r4!, {r0,r2,r3}\n\
- adds r0, r7, 0\n\
- bl TakeMailFromMon\n\
-_0804144A:\n\
- mov r2, r9\n\
- lsls r4, r2, 24\n\
- asrs r4, 24\n\
- lsls r5, r4, 2\n\
- adds r4, r5, r4\n\
- lsls r4, 4\n\
- add r4, r8\n\
- adds r0, r4, 0\n\
- adds r1, r7, 0\n\
- movs r2, 0x50\n\
- bl memcpy\n\
- adds r0, r4, 0\n\
- bl BoxMonRestorePP\n\
- movs r0, 0x88\n\
- lsls r0, 1\n\
- add r0, r8\n\
- adds r0, r5\n\
- movs r1, 0\n\
- str r1, [r0]\n\
- adds r0, r7, 0\n\
- bl ZeroMonData\n\
- bl party_compaction\n\
- bl CalculatePlayerPartyCount\n\
- pop {r3,r4}\n\
- mov r8, r3\n\
- mov r9, r4\n\
- pop {r4-r7}\n\
- pop {r0}\n\
- bx r0\n\
- .align 2, 0\n\
-_08041490: .4byte gSaveBlock2\n\
-_08041494: .4byte gSaveBlock1\n\
-_08041498: .4byte 0x00002b4c\n\
- .syntax divided\n");
-}
-
-void Daycare_SendPokemon_Special()
-{
- Daycare_SendPokemon(gPlayerParty + gLastFieldPokeMenuOpened, gSaveBlock1.daycareData);
-}
-
-void sub_80417F4(u8 *);
-
-void sub_80414C0(struct BoxPokemon * daycare_data)
-{
- u32 second_species;
- if((GetBoxMonData(&daycare_data[1], MON_DATA_SPECIES) != 0) && ((second_species = GetBoxMonData(&daycare_data[0], MON_DATA_SPECIES)) == 0)){
- daycare_data[0] = daycare_data[1];
- ZeroBoxMonData(&daycare_data[1]);
- memcpy(daycare_data + 2, (u8 *) (daycare_data + 1) + 0x88, 0x38);
- *((u32 *)(daycare_data) + 68) = *((u32 *)(daycare_data) + 69);
- *((u32 *)(daycare_data) + 69) = second_species;
- sub_80417F4((u8 *) (daycare_data + 1) + 0x88);
- }
-}
-
-u8 TryIncrementMonLevel(struct Pokemon *);
-extern u16 gMoveToLearn;
-
-void sub_804151C(struct Pokemon * mon)
-{
- s32 i;
- u8 r6;
- u16 temp;
-
- for(i = 0; i < 100; i++){
- if(TryIncrementMonLevel(mon) == FALSE) goto end;
-
- r6 = 1;
- while((temp = MonTryLearningNewMove(mon, r6)) != 0){
- r6 = 0;
- if(temp == 0xffff){
- DeleteFirstMoveAndGiveMoveToMon(mon, gMoveToLearn);
- }
- }
- }
-
- end:
-
- CalculateMonStats(mon);
-}
-
-__attribute__((naked))
-u16 sub_8041570(struct BoxPokemon * daycare_data, u8 a2){
- asm(".syntax unified\n\
- push {r4-r7,lr}\n\
- mov r7, r9\n\
- mov r6, r8\n\
- push {r6,r7}\n\
- sub sp, 0x68\n\
- adds r5, r0, 0\n\
- lsls r1, 24\n\
- lsrs r4, r1, 24\n\
- lsls r7, r4, 2\n\
- adds r0, r7, r4\n\
- lsls r0, 4\n\
- adds r6, r5, r0\n\
- ldr r1, _08041640 @ =gStringVar1\n\
- adds r0, r6, 0\n\
- bl GetBoxMonNick\n\
- adds r0, r6, 0\n\
- movs r1, 0xB\n\
- bl GetBoxMonData\n\
- lsls r0, 16\n\
- lsrs r0, 16\n\
- mov r9, r0\n\
- adds r0, r6, 0\n\
- mov r1, sp\n\
- bl sub_803B4B4\n\
- mov r0, sp\n\
- movs r1, 0x38\n\
- bl GetMonData\n\
- cmp r0, 0x64\n\
- beq _080415D8\n\
- mov r0, sp\n\
- movs r1, 0x19\n\
- bl GetMonData\n\
- movs r2, 0x88\n\
- lsls r2, 1\n\
- adds r1, r5, r2\n\
- adds r1, r7\n\
- ldr r1, [r1]\n\
- adds r0, r1\n\
- str r0, [sp, 0x64]\n\
- add r2, sp, 0x64\n\
- mov r0, sp\n\
- movs r1, 0x19\n\
- bl SetMonData\n\
- mov r0, sp\n\
- bl sub_804151C\n\
-_080415D8:\n\
- ldr r0, _08041644 @ =gPlayerParty\n\
- movs r1, 0xFA\n\
- lsls r1, 1\n\
- adds r1, r0\n\
- mov r8, r1\n\
- mov r0, r8\n\
- mov r1, sp\n\
- movs r2, 0x64\n\
- bl memcpy\n\
- lsls r0, r4, 3\n\
- subs r0, r4\n\
- lsls r1, r0, 3\n\
- adds r0, r5, r1\n\
- adds r0, 0xC0\n\
- ldrh r0, [r0]\n\
- cmp r0, 0\n\
- beq _08041610\n\
- adds r4, r1, 0\n\
- adds r4, 0xA0\n\
- adds r4, r5, r4\n\
- mov r0, r8\n\
- adds r1, r4, 0\n\
- bl GiveMailToMon2\n\
- adds r0, r4, 0\n\
- bl sub_80417F4\n\
-_08041610:\n\
- bl party_compaction\n\
- adds r0, r6, 0\n\
- bl ZeroBoxMonData\n\
- movs r2, 0x88\n\
- lsls r2, 1\n\
- adds r0, r5, r2\n\
- adds r0, r7\n\
- movs r1, 0\n\
- str r1, [r0]\n\
- adds r0, r5, 0\n\
- bl sub_80414C0\n\
- bl CalculatePlayerPartyCount\n\
- mov r0, r9\n\
- add sp, 0x68\n\
- pop {r3,r4}\n\
- mov r8, r3\n\
- mov r9, r4\n\
- pop {r4-r7}\n\
- pop {r1}\n\
- bx r1\n\
- .align 2, 0\n\
-_08041640: .4byte gStringVar1\n\
-_08041644: .4byte gPlayerParty\n\
- .syntax divided");
-}
-
-extern u8 gSpecialVar_0x8004;
-
-u16 sub_8041648()
-{
- return sub_8041570(gSaveBlock1.daycareData, gSpecialVar_0x8004);
-}
-
-u8 Daycare_GetLevelAfterSteps(struct BoxPokemon * mon, u32 steps){
- struct BoxPokemon temp = *mon;
- u32 new_exp = GetBoxMonData(mon, MON_DATA_EXP) + steps;
- SetBoxMonData(&temp, MON_DATA_EXP, (u8 *) &new_exp);
- return GetLevelFromBoxMonExp(&temp);
-}
diff --git a/src/matsuda_debug_menu.c b/src/debug/matsuda_debug_menu.c
index c7d81f502..c7d81f502 100644
--- a/src/matsuda_debug_menu.c
+++ b/src/debug/matsuda_debug_menu.c
diff --git a/src/mori_debug_menu.c b/src/debug/mori_debug_menu.c
index 4eadaa78b..1595ecd2e 100644
--- a/src/mori_debug_menu.c
+++ b/src/debug/mori_debug_menu.c
@@ -52,7 +52,7 @@ u8 MoriDebugMenu_SearchChild(u8 a1, u8 a2, u8 *ptr)
u16 monData;
u16 var;
- monData = GetMonData(gPlayerParty, 11, ptr);
+ monData = GetMonData(gPlayerParty, MON_DATA_SPECIES, ptr);
var = sub_8041870(monData);
StringCopy(localPtr, gSpeciesNames[monData]);
StringAppend(localPtr, gUnknown_0839B24D);
@@ -67,7 +67,7 @@ u8 MoriDebugMenu_SearchChild(u8 a1, u8 a2, u8 *ptr)
s8 MoriDebugMenu_Egg(void)
{
- if ( Daycare_CountPokemon(gSaveBlock1.daycareData) == 2 && daycare_relationship_score_from_savegame() )
+ if ( Daycare_CountPokemon(&gSaveBlock1.daycareData) == 2 && daycare_relationship_score_from_savegame() )
sub_8041940();
CloseMenu();
@@ -76,7 +76,7 @@ s8 MoriDebugMenu_Egg(void)
s8 MoriDebugMenu_MaleEgg(void)
{
- if ( Daycare_CountPokemon(gSaveBlock1.daycareData) == 2 && daycare_relationship_score_from_savegame() )
+ if ( Daycare_CountPokemon(&gSaveBlock1.daycareData) == 2 && daycare_relationship_score_from_savegame() )
sub_8041950();
CloseMenu();
@@ -117,7 +117,7 @@ s8 MoriDebugMenu_BreedEgg(void)
SetMonData(&gPlayerParty[loopCounter], MON_DATA_FRIENDSHIP, &friendship);
}
}
- gSaveBlock1.filler_30B6 = -3;
+ gSaveBlock1.daycareData.misc.countersEtc.unk_11a = -3;
CloseMenu();
return 1;
}
diff --git a/src/debug/sound_check_menu.c b/src/debug/sound_check_menu.c
new file mode 100644
index 000000000..14261b75e
--- /dev/null
+++ b/src/debug/sound_check_menu.c
@@ -0,0 +1,1300 @@
+#include "global.h"
+#include "sprite.h"
+#include "palette.h"
+#include "task.h"
+#include "m4a.h"
+#include "main.h"
+#include "text.h"
+#include "menu.h"
+#include "songs.h"
+#include "title_screen.h"
+#include "sound.h"
+#include "pokedex_cry_screen.h"
+
+// local task defines
+#define tWindowSelected data[0]
+#define tBgmIndex data[1]
+#define tSeIndex data[2]
+
+// window selections
+enum
+{
+ BGM_WINDOW,
+ SE_WINDOW
+};
+
+// driver test cry enums
+enum
+{
+ CRY_TEST_VOICE,
+ CRY_TEST_VOLUME,
+ CRY_TEST_PANPOT,
+ CRY_TEST_PITCH,
+ CRY_TEST_LENGTH,
+ CRY_TEST_RELEASE,
+ CRY_TEST_PROGRESS,
+ CRY_TEST_CHORUS,
+ CRY_TEST_PRIORITY
+};
+
+// minmax range enums
+enum
+{
+ MIN,
+ MAX
+};
+
+extern struct ToneData voicegroup_84537C0[];
+extern struct ToneData voicegroup_8452590[];
+extern struct ToneData voicegroup_8453DC0[];
+extern struct ToneData voicegroup_8452B90[];
+extern struct ToneData voicegroup_84543C0[];
+extern struct ToneData voicegroup_8453190[];
+extern struct ToneData voicegroup_84549C0[];
+extern struct ToneData voicegroup_8453790[];
+
+static EWRAM_DATA u8 gUnknown_020387B0 = 0;
+static EWRAM_DATA u8 gUnknown_020387B1 = 0;
+static EWRAM_DATA u8 gUnknown_020387B2 = 0;
+static EWRAM_DATA s8 sDriverTestSelection = 0;
+static EWRAM_DATA int sSoundTestParams[9] = {0};
+static EWRAM_DATA u8 gUnknown_020387D8 = 0;
+static EWRAM_DATA u8 gUnknown_020387D9 = 0;
+
+u16 gSoundTestCryNum;
+extern u8 gUnknown_03005E98;
+
+struct MusicPlayerInfo *gUnknown_03005D30;
+
+extern struct MusicPlayerInfo gMPlay_BGM;
+
+void Task_InitSoundCheckMenu(u8);
+void sub_80BA384(u8);
+void sub_80BA65C(u8);
+void sub_80BA68C(u8);
+void HighlightSelectedWindow(u8);
+void PrintSoundNumber(u16, u16, u16);
+void sub_80BA79C(const u8 *const, u16, u16);
+void Task_DrawDriverTestMenu(u8);
+void Task_ProcessDriverTestInput(u8);
+void AdjustSelectedDriverParam(s8);
+void PrintDriverTestMenuText(void);
+void sub_80BAE10(u8, u8);
+void PrintSignedNumber(int, u16, u16, u8);
+void sub_80BAF84(u8);
+void sub_80BB038(u8);
+void sub_80BB1D4(void);
+void Task_InitCryTest(u8);
+void Task_ProcessCryTestInput(u8);
+void PrintCryNumber(void);
+
+void CB2_SoundCheckMenu(void)
+{
+ RunTasks();
+ AnimateSprites();
+ BuildOamBuffer();
+ UpdatePaletteFade();
+}
+
+void VBlankCB_SoundCheckMenu(void)
+{
+ LoadOam();
+ ProcessSpriteCopyRequests();
+ TransferPlttBuffer();
+
+ if (gUnknown_020387B0 != 0)
+ {
+ m4aSoundMain();
+ m4aSoundMain();
+ m4aSoundMain();
+ }
+}
+
+// unused
+void CB2_StartSoundCheckMenu(void)
+{
+ u8 taskId;
+
+ SetVBlankCallback(NULL);
+ REG_DISPCNT = 0;
+ REG_BG2CNT = 0;
+ REG_BG1CNT = 0;
+ REG_BG0CNT = 0;
+ REG_BG2HOFS = 0;
+ REG_BG2VOFS = 0;
+ REG_BG1HOFS = 0;
+ REG_BG1VOFS = 0;
+ REG_BG0HOFS = 0;
+ REG_BG0VOFS = 0;
+ DmaFill16(3, 0, VRAM, VRAM_SIZE);
+ DmaFill32(3, 0, OAM, OAM_SIZE);
+ DmaFill16(3, 0, PLTT, PLTT_SIZE);
+ ResetPaletteFade();
+ ResetTasks();
+ ResetSpriteData();
+ SetUpWindowConfig(&gWindowConfig_81E6C3C);
+ InitMenuWindow(&gWindowConfig_81E6CE4);
+ BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, 0);
+ REG_WIN0H = WIN_RANGE(0, 0);
+ REG_WIN0V = WIN_RANGE(0, 0);
+ REG_WIN1H = WIN_RANGE(0, 0);
+ REG_WIN1V = WIN_RANGE(0, 0);
+ REG_WININ = 0x1111;
+ REG_WINOUT = 0x31;
+ REG_BLDCNT = 0xE1;
+ REG_BLDALPHA = 0;
+ REG_BLDY = 7;
+ REG_IE = 1; // could be a typo of REG_IME
+ REG_IE |= 1;
+ REG_DISPSTAT |= 8;
+ SetVBlankCallback(VBlankCB_SoundCheckMenu);
+ SetMainCallback2(CB2_SoundCheckMenu);
+ REG_DISPCNT = 0x7140;
+ taskId = CreateTask(Task_InitSoundCheckMenu, 0);
+ gTasks[taskId].tWindowSelected = BGM_WINDOW;
+ gTasks[taskId].tBgmIndex = 0;
+ gTasks[taskId].tSeIndex = 0;
+ gTasks[taskId].data[3] = 0;
+ gUnknown_020387B0 = 0;
+ gTasks[taskId].data[3] = 0; // why?
+ m4aSoundInit();
+}
+
+void Task_InitSoundCheckMenu(u8 taskId)
+{
+ u8 soundcheckStr[] = _("サウンドチェック");
+ u8 bgmStr[] = _("BGM");
+ u8 seStr[] = _("SE ");
+ u8 abDescStr[] = _("A‥さいせい B‥おわり");
+ u8 upDownStr[] = _("L‥UP R‥DOWN");
+ u8 driverStr[] = _("R‥DRIVER-TEST");
+
+ if (!gPaletteFade.active)
+ {
+ MenuDrawTextWindow(2, 0, 27, 3);
+ MenuDrawTextWindow(2, 5, 27, 10);
+ MenuDrawTextWindow(2, 12, 27, 17);
+ MenuPrint(soundcheckStr, 4, 1);
+ MenuPrint(abDescStr, 14, 1);
+ MenuPrint(bgmStr, 4, 6);
+ MenuPrint(upDownStr, 14, 6);
+ MenuPrint(seStr, 4, 13);
+ MenuPrint(upDownStr, 14, 13);
+ MenuPrint(driverStr, 14, 18);
+ gTasks[taskId].func = sub_80BA384;
+ REG_WIN0H = WIN_RANGE(17, 223);
+ REG_WIN0V = WIN_RANGE(1, 31);
+ }
+}
+
+// ideally this should be a multi Coords8 struct, but it wont match when its treated like a struct.
+static const u8 gUnknown_083D0300[] = { 1, 1, 1, 3, 1, 5, 1, 7, 1, 9, 1, 11, 1, 13, 1, 15, 1, 17 };
+
+extern const u8 *const gBGMNames[];
+extern const u8 *const gSENames[];
+
+void sub_80BA384(u8 taskId) // Task_HandleDrawingSoundCheckMenuText
+{
+ HighlightSelectedWindow(gTasks[taskId].tWindowSelected);
+ PrintSoundNumber(gTasks[taskId].tBgmIndex + BGM_STOP, 7, 8); // print by BGM index
+ sub_80BA79C(gBGMNames[gTasks[taskId].tBgmIndex], 11, 8);
+ PrintSoundNumber(gTasks[taskId].tSeIndex, 7, 15);
+ sub_80BA79C(gSENames[gTasks[taskId].tSeIndex], 11, 15);
+ gTasks[taskId].func = sub_80BA65C;
+}
+
+bool8 Task_ProcessSoundCheckMenuInput(u8 taskId)
+{
+ if (gMain.newKeys & R_BUTTON) // driver test
+ {
+ gTasks[taskId].func = Task_DrawDriverTestMenu;
+ }
+ else if (gMain.newKeys & L_BUTTON)
+ {
+ gTasks[taskId].func = sub_80BAF84;
+ }
+ else if (gMain.newKeys & START_BUTTON)
+ {
+ gTasks[taskId].func = Task_InitCryTest;
+ }
+ else if (gMain.newKeys & A_BUTTON)
+ {
+ if (gTasks[taskId].tWindowSelected != 0) // is playing?
+ {
+ if (gTasks[taskId].data[4] != 0)
+ {
+ if (gTasks[taskId].tSeIndex != 0)
+ {
+ m4aSongNumStop(gTasks[taskId].data[4]);
+ m4aSongNumStart(gTasks[taskId].tSeIndex);
+ gTasks[taskId].data[4] = gTasks[taskId].tSeIndex;
+ }
+ else
+ {
+ m4aSongNumStop(gTasks[taskId].data[4]);
+ gTasks[taskId].data[4] = 0;
+ }
+ }
+ else if (gTasks[taskId].tSeIndex != 0)
+ {
+ m4aSongNumStart(gTasks[taskId].tSeIndex);
+ gTasks[taskId].data[4] = gTasks[taskId].tSeIndex;
+ }
+ }
+ else
+ {
+ if (gTasks[taskId].data[3] != 0)
+ {
+ if (gTasks[taskId].tBgmIndex != 0)
+ {
+ m4aSongNumStop(gTasks[taskId].data[3] + BGM_STOP);
+ m4aSongNumStart(gTasks[taskId].tBgmIndex + BGM_STOP);
+ gTasks[taskId].data[3] = gTasks[taskId].tBgmIndex;
+ }
+ else
+ {
+ m4aSongNumStop(gTasks[taskId].data[3] + BGM_STOP);
+ gTasks[taskId].data[3] = 0;
+ }
+ }
+ else if (gTasks[taskId].tBgmIndex != 0)
+ {
+ m4aSongNumStart(gTasks[taskId].tBgmIndex + BGM_STOP);
+ gTasks[taskId].data[3] = gTasks[taskId].tBgmIndex;
+ }
+ }
+ }
+ else if (gMain.newKeys & B_BUTTON)
+ {
+ m4aSongNumStart(SE_SELECT);
+ BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, 0);
+ gTasks[taskId].func = sub_80BA68C;
+ }
+ else if (gMain.newAndRepeatedKeys & DPAD_UP)
+ {
+ gTasks[taskId].tWindowSelected ^= 1;
+ return TRUE;
+ }
+ else if (gMain.newAndRepeatedKeys & DPAD_DOWN)
+ {
+ gTasks[taskId].tWindowSelected ^= 1;
+ return TRUE;
+ }
+ else if (gMain.newAndRepeatedKeys & DPAD_RIGHT)
+ {
+ if (gTasks[taskId].tWindowSelected != 0)
+ {
+ if (gTasks[taskId].tSeIndex > 0)
+ gTasks[taskId].tSeIndex--;
+ else
+ gTasks[taskId].tSeIndex = 247;
+ }
+ else
+ {
+ if (gTasks[taskId].tBgmIndex > 0)
+ gTasks[taskId].tBgmIndex--;
+ else
+ gTasks[taskId].tBgmIndex = 117;
+ }
+ return TRUE;
+ }
+ else if (gMain.newAndRepeatedKeys & DPAD_LEFT)
+ {
+ if (gTasks[taskId].tWindowSelected != 0)
+ {
+ if (gTasks[taskId].tSeIndex < 247)
+ gTasks[taskId].tSeIndex++;
+ else
+ gTasks[taskId].tSeIndex = 0;
+ }
+ else
+ {
+ if (gTasks[taskId].tBgmIndex < 117)
+ gTasks[taskId].tBgmIndex++;
+ else
+ gTasks[taskId].tBgmIndex = 0;
+ }
+ return TRUE;
+ }
+ else if (gMain.heldKeys & SELECT_BUTTON)
+ {
+ gUnknown_020387B0 = 1;
+ }
+ else
+ {
+ gUnknown_020387B0 = 0;
+ }
+ return FALSE;
+}
+
+void sub_80BA65C(u8 taskId)
+{
+ if (Task_ProcessSoundCheckMenuInput(taskId) != FALSE)
+ gTasks[taskId].func = sub_80BA384;
+}
+
+void sub_80BA68C(u8 taskId)
+{
+ if (!gPaletteFade.active)
+ {
+ DestroyTask(taskId);
+ SetMainCallback2(CB2_InitTitleScreen);
+ }
+}
+
+void HighlightSelectedWindow(u8 windowType)
+{
+ switch (windowType)
+ {
+ case BGM_WINDOW:
+ default:
+ REG_WIN1H = WIN_RANGE(17, 223);
+ REG_WIN1V = WIN_RANGE(41, 87);
+ break;
+ case SE_WINDOW:
+ REG_WIN1H = WIN_RANGE(17, 223);
+ REG_WIN1V = WIN_RANGE(97, 143);
+ break;
+ }
+}
+
+void PrintSoundNumber(u16 soundIndex, u16 x, u16 y) // PrintSoundNumber ?
+{
+ u8 i;
+ u8 str[5];
+ bool8 someBool;
+ u8 divisorValue;
+
+ for (i = 0; i < 3; i++)
+ str[i] = 0; // initialize array
+
+ str[3] = CHAR_ELLIPSIS;
+ str[4] = EOS;
+ someBool = FALSE;
+
+ divisorValue = soundIndex / 100;
+ if (divisorValue)
+ {
+ str[0] = divisorValue + CHAR_0;
+ someBool = TRUE;
+ }
+
+ divisorValue = (soundIndex % 100) / 10;
+ if (divisorValue || someBool)
+ str[1] = divisorValue + CHAR_0;
+
+ str[2] = ((soundIndex % 100) % 10) + CHAR_0;
+ MenuPrint(str, x, y);
+}
+
+void sub_80BA79C(const u8 *const string, u16 x, u16 y)
+{
+ u8 i;
+ u8 str[11];
+
+ for (i = 0; i <= 10; i++)
+ str[i] = 0; // format string.
+
+ str[10] = EOS; // the above for loop formats the last element of the array unnecessarily.
+
+ for (i = 0; string[i] != EOS && i < 10; i++)
+ str[i] = string[i];
+
+ MenuPrint(str, x, y);
+}
+
+void Task_DrawDriverTestMenu(u8 taskId) // Task_DrawDriverTestMenu
+{
+ u8 bbackStr[] = _("Bぼたんで もどる");
+ u8 aplayStr[] = _("Aぼたんで さいせい");
+ u8 voiceStr[] = _("VOICE‥‥‥‥");
+ u8 volumeStr[] = _("VOLUME‥‥‥");
+ u8 panpotStr[] = _("PANPOT‥‥‥");
+ u8 pitchStr[] = _("PITCH‥‥‥‥");
+ u8 lengthStr[] = _("LENGTH‥‥‥");
+ u8 releaseStr[] = _("RELEASE‥‥");
+ u8 progressStr[] = _("PROGRESS‥");
+ u8 chorusStr[] = _("CHORUS‥‥‥");
+ u8 priorityStr[] = _("PRIORITY‥");
+ u8 playingStr[] = _("さいせいちゆう‥"); // 再生中 (playing)
+ u8 reverseStr[] = _("はんてん‥‥‥‥"); // 反転 (reverse)
+ u8 stereoStr[] = _("すてれお‥‥‥‥"); // stereo
+
+ REG_DISPCNT = 0x3140;
+ MenuDrawTextWindow(0, 0, 29, 19);
+ MenuPrint(bbackStr, 19, 4);
+ MenuPrint(aplayStr, 19, 2);
+ MenuPrint(voiceStr, 2, 1);
+ MenuPrint(volumeStr, 2, 3);
+ MenuPrint(panpotStr, 2, 5);
+ MenuPrint(pitchStr, 2, 7);
+ MenuPrint(lengthStr, 2, 9);
+ MenuPrint(releaseStr, 2, 11);
+ MenuPrint(progressStr, 2, 13);
+ MenuPrint(chorusStr, 2, 15);
+ MenuPrint(priorityStr, 2, 17);
+ MenuPrint(playingStr, 19, 16);
+ MenuPrint(reverseStr, 19, 14);
+ MenuPrint(stereoStr, 19, 12);
+ REG_WIN0H = WIN_RANGE(0, DISPLAY_WIDTH);
+ REG_WIN0V = WIN_RANGE(0, DISPLAY_HEIGHT);
+ sDriverTestSelection = 0;
+ gUnknown_020387B1 = 0;
+ gUnknown_020387B2 = 0;
+ gUnknown_03005D30 = NULL;
+ gUnknown_020387D8 = 0;
+ gUnknown_020387D9 = 1;
+ sSoundTestParams[CRY_TEST_VOICE] = 0;
+ sSoundTestParams[CRY_TEST_VOLUME] = 120;
+ sSoundTestParams[CRY_TEST_PANPOT] = 0;
+ sSoundTestParams[CRY_TEST_PITCH] = 15360;
+ sSoundTestParams[CRY_TEST_LENGTH] = 180;
+ sSoundTestParams[CRY_TEST_PROGRESS] = 0;
+ sSoundTestParams[CRY_TEST_RELEASE] = 0;
+ sSoundTestParams[CRY_TEST_CHORUS] = 0;
+ sSoundTestParams[CRY_TEST_PRIORITY] = 2;
+ PrintDriverTestMenuText();
+ sub_80BAE10(0, 0);
+ gTasks[taskId].func = Task_ProcessDriverTestInput;
+}
+
+void Task_ProcessDriverTestInput(u8 taskId)
+{
+ if (gMain.newKeys & B_BUTTON)
+ {
+ REG_DISPCNT = 0x7140;
+ REG_WIN0H = WIN_RANGE(17, 223);
+ REG_WIN0V = WIN_RANGE(1, 31);
+ MenuZeroFillWindowRect(0, 0, 29, 19);
+ gTasks[taskId].func = Task_InitSoundCheckMenu;
+ return;
+ }
+ if (gMain.newAndRepeatedKeys & DPAD_UP) // _080BAAA8
+ {
+ u8 old = sDriverTestSelection;
+
+ if(--sDriverTestSelection < 0)
+ sDriverTestSelection = 8;
+ sub_80BAE10(old, sDriverTestSelection);
+ return;
+ }
+ if (gMain.newAndRepeatedKeys & DPAD_DOWN) // _080BAAD0
+ {
+ u8 old = sDriverTestSelection;
+
+ if(++sDriverTestSelection > 8)
+ sDriverTestSelection = 0;
+ sub_80BAE10(old, sDriverTestSelection);
+ return;
+ }
+ if (gMain.newKeys & START_BUTTON) // _080BAAF8
+ {
+ gUnknown_020387D8 ^= 1;
+ PrintDriverTestMenuText();
+ return;
+ }
+ if (gMain.newKeys & SELECT_BUTTON) // _080BAB14
+ {
+ gUnknown_020387D9 ^= 1;
+ PrintDriverTestMenuText();
+ SetPokemonCryStereo(gUnknown_020387D9);
+ return;
+ }
+ if (gMain.newAndRepeatedKeys & R_BUTTON) // _080BAB38
+ {
+ AdjustSelectedDriverParam(10);
+ PrintDriverTestMenuText();
+ return;
+ }
+ if (gMain.newAndRepeatedKeys & L_BUTTON) // _080BAB46
+ {
+ AdjustSelectedDriverParam(-10);
+ PrintDriverTestMenuText();
+ return;
+ }
+ if (gMain.newAndRepeatedKeys & DPAD_LEFT) // _080BAB56
+ {
+ AdjustSelectedDriverParam(-1);
+ PrintDriverTestMenuText();
+ return;
+ }
+ if (gMain.newAndRepeatedKeys & DPAD_RIGHT) // _080BAB64
+ {
+ AdjustSelectedDriverParam(1);
+ PrintDriverTestMenuText();
+ return;
+ }
+ if (gMain.newKeys & A_BUTTON) // _080BAB78
+ {
+ u8 divide, remaining;
+
+ SetPokemonCryVolume(sSoundTestParams[CRY_TEST_VOLUME]);
+ SetPokemonCryPanpot(sSoundTestParams[CRY_TEST_PANPOT]);
+ SetPokemonCryPitch(sSoundTestParams[CRY_TEST_PITCH]);
+ SetPokemonCryLength(sSoundTestParams[CRY_TEST_LENGTH]);
+ SetPokemonCryProgress(sSoundTestParams[CRY_TEST_PROGRESS]);
+ SetPokemonCryRelease(sSoundTestParams[CRY_TEST_RELEASE]);
+ SetPokemonCryChorus(sSoundTestParams[CRY_TEST_CHORUS]);
+ SetPokemonCryPriority(sSoundTestParams[CRY_TEST_PRIORITY]);
+
+ remaining = sSoundTestParams[CRY_TEST_VOICE] % 128;
+ divide = sSoundTestParams[CRY_TEST_VOICE] / 128;
+
+ switch (divide)
+ {
+ case 0:
+ if (gUnknown_020387D8)
+ gUnknown_03005D30 = SetPokemonCryTone(&voicegroup_84537C0[remaining]);
+ else
+ gUnknown_03005D30 = SetPokemonCryTone(&voicegroup_8452590[remaining]);
+ break;
+ case 1:
+ if (gUnknown_020387D8)
+ gUnknown_03005D30 = SetPokemonCryTone(&voicegroup_8453DC0[remaining]);
+ else
+ gUnknown_03005D30 = SetPokemonCryTone(&voicegroup_8452B90[remaining]);
+ break;
+ case 2:
+ if (gUnknown_020387D8)
+ gUnknown_03005D30 = SetPokemonCryTone(&voicegroup_84543C0[remaining]);
+ else
+ gUnknown_03005D30 = SetPokemonCryTone(&voicegroup_8453190[remaining]);
+ break;
+ case 3:
+ if (gUnknown_020387D8)
+ gUnknown_03005D30 = SetPokemonCryTone(&voicegroup_84549C0[remaining]);
+ else
+ gUnknown_03005D30 = SetPokemonCryTone(&voicegroup_8453790[remaining]);
+ break;
+ }
+ }
+
+ // _080BACA2
+ if (gUnknown_03005D30 != NULL)
+ {
+ gUnknown_020387B1 = IsPokemonCryPlaying(gUnknown_03005D30);
+
+ if (gUnknown_020387B1 != gUnknown_020387B2)
+ PrintDriverTestMenuText();
+
+ gUnknown_020387B2 = gUnknown_020387B1;
+ }
+}
+
+void AdjustSelectedDriverParam(s8 delta)
+{
+ // also ideally should be a MinMax struct, but any attempt to make this into a struct causes it to not match due to the weird multi dim access.
+ int paramRanges[] =
+ {
+ 0, 387, // Voice
+ 0, 127, // Volume
+ -127, 127, // Panpot
+ -128, 32639, // Pitch
+ 0, 65535, // Length
+ 0, 255, // Release
+ 0, 65535, // Progress
+ -64, 63 // Chorus
+ // Priority??? Why is it missing?
+ };
+
+ sSoundTestParams[sDriverTestSelection] += delta;
+
+ if (sSoundTestParams[sDriverTestSelection] > paramRanges[MULTI_DIM_ARR(sDriverTestSelection, B_16, MAX)])
+ sSoundTestParams[sDriverTestSelection] = paramRanges[MULTI_DIM_ARR(sDriverTestSelection, B_16, MIN)];
+
+ if (sSoundTestParams[sDriverTestSelection] < paramRanges[MULTI_DIM_ARR(sDriverTestSelection, B_16, MIN)])
+ sSoundTestParams[sDriverTestSelection] = paramRanges[MULTI_DIM_ARR(sDriverTestSelection, B_16, MAX)];
+}
+
+void PrintDriverTestMenuText(void)
+{
+ PrintSignedNumber(sSoundTestParams[CRY_TEST_VOICE] + 1, 11, 1, 5);
+ PrintSignedNumber(sSoundTestParams[CRY_TEST_VOLUME], 11, 3, 5);
+ PrintSignedNumber(sSoundTestParams[CRY_TEST_PANPOT], 11, 5, 5);
+ PrintSignedNumber(sSoundTestParams[CRY_TEST_PITCH], 11, 7, 5);
+ PrintSignedNumber(sSoundTestParams[CRY_TEST_LENGTH], 11, 9, 5);
+ PrintSignedNumber(sSoundTestParams[CRY_TEST_RELEASE], 11, 11, 5);
+ PrintSignedNumber(sSoundTestParams[CRY_TEST_PROGRESS], 11, 13, 5);
+ PrintSignedNumber(sSoundTestParams[CRY_TEST_CHORUS], 11, 15, 5);
+ PrintSignedNumber(sSoundTestParams[CRY_TEST_PRIORITY], 11, 17, 5);
+ PrintSignedNumber(gUnknown_020387B1, 27, 16, 1);
+ PrintSignedNumber(gUnknown_020387D8, 27, 14, 1);
+ PrintSignedNumber(gUnknown_020387D9, 27, 12, 1);
+}
+
+void sub_80BAE10(u8 var1, u8 var2)
+{
+ u8 str1[] = _("▶");
+ u8 str2[] = _(" ");
+
+ MenuPrint(str2, gUnknown_083D0300[MULTI_DIM_ARR(var1, B_16, 0)], gUnknown_083D0300[MULTI_DIM_ARR(var1, B_16, 1)]);
+ MenuPrint(str1, gUnknown_083D0300[MULTI_DIM_ARR(var2, B_16, 0)], gUnknown_083D0300[MULTI_DIM_ARR(var2, B_16, 1)]);
+}
+
+void PrintSignedNumber(int n, u16 x, u16 y, u8 digits)
+{
+ int powersOfTen[6] =
+ {
+ 1,
+ 10,
+ 100,
+ 1000,
+ 10000,
+ 100000
+ };
+ u8 str[8];
+ s8 i;
+ s8 negative;
+ s8 someVar2;
+
+ for (i = 0; i <= digits; i++)
+ str[i] = CHAR_SPACE;
+ str[digits + 1] = EOS;
+
+ negative = FALSE;
+ if (n < 0)
+ {
+ n = -n;
+ negative = TRUE;
+ }
+
+ if (digits == 1)
+ someVar2 = TRUE;
+ else
+ someVar2 = FALSE;
+
+ for (i = digits - 1; i >= 0; i--)
+ {
+ s8 d = n / powersOfTen[i];
+
+ if (d != 0 || someVar2 || i == 0)
+ {
+ if (negative && !someVar2)
+ str[digits - i - 1] = CHAR_HYPHEN;
+ str[digits - i] = CHAR_0 + d;
+ someVar2 = TRUE;
+ }
+ n %= powersOfTen[i];
+ }
+
+ MenuPrint(str, x, y);
+}
+
+static const s8 gUnknown_083D03F8[5] = { 0x3F, 0x00, 0xC0, 0x7F, 0x80 };
+
+void sub_80BAF84(u8 taskId)
+{
+ u8 seStr[] = _("SE");
+ u8 panStr[] = _("PAN");
+ u8 playingStr[] = _("さいせいちゆう‥");
+
+ REG_DISPCNT = 0x3140;
+ MenuDrawTextWindow(0, 0, 29, 19);
+ MenuPrint(seStr, 3, 2);
+ MenuPrint(panStr, 3, 4);
+ MenuPrint(playingStr, 3, 8);
+ REG_WIN0H = WIN_RANGE(0, DISPLAY_WIDTH);
+ REG_WIN0V = WIN_RANGE(0, DISPLAY_HEIGHT);
+ sSoundTestParams[CRY_TEST_VOICE] = 1;
+ sSoundTestParams[CRY_TEST_PANPOT] = 0;
+ sSoundTestParams[CRY_TEST_CHORUS] = 0;
+ sSoundTestParams[CRY_TEST_PROGRESS] = 0;
+ sSoundTestParams[CRY_TEST_RELEASE] = 0;
+ sub_80BB1D4();
+ gTasks[taskId].func = sub_80BB038;
+}
+
+void sub_80BB038(u8 taskId)
+{
+ sub_80BB1D4();
+ if (sSoundTestParams[CRY_TEST_PROGRESS])
+ {
+ if (sSoundTestParams[CRY_TEST_RELEASE])
+ {
+ sSoundTestParams[CRY_TEST_RELEASE]--;
+ }
+ else // _080BB05C
+ {
+ s8 panpot = gUnknown_083D03F8[sSoundTestParams[CRY_TEST_PANPOT]];
+ if (panpot != -128)
+ {
+ if (panpot == 127)
+ {
+ sSoundTestParams[CRY_TEST_CHORUS] += 2;
+ if (sSoundTestParams[CRY_TEST_CHORUS] < 63)
+ SE12PanpotControl(sSoundTestParams[CRY_TEST_CHORUS]);
+ }
+ }
+ else // _080BB08C
+ {
+ sSoundTestParams[CRY_TEST_CHORUS] -= 2;
+ if (sSoundTestParams[CRY_TEST_CHORUS] > -64)
+ SE12PanpotControl(sSoundTestParams[CRY_TEST_CHORUS]);
+ }
+ }
+ }
+ // _080BB0A2
+ if (gMain.newKeys & B_BUTTON)
+ {
+ REG_DISPCNT = 0x7140;
+ REG_WIN0H = WIN_RANGE(17, 223);
+ REG_WIN0V = WIN_RANGE(1, 31);
+ MenuZeroFillWindowRect(0, 0, 29, 19);
+ gTasks[taskId].func = Task_InitSoundCheckMenu;
+ return;
+ }
+ if (gMain.newKeys & A_BUTTON) // _080BB104
+ {
+ s8 panpot = gUnknown_083D03F8[sSoundTestParams[CRY_TEST_PANPOT]];
+ if (panpot != -128)
+ {
+ if (panpot == 127)
+ {
+ PlaySE12WithPanning(sSoundTestParams[CRY_TEST_VOICE], -64);
+ sSoundTestParams[CRY_TEST_CHORUS] = -64;
+ sSoundTestParams[CRY_TEST_PROGRESS] = 1;
+ sSoundTestParams[CRY_TEST_RELEASE] = 30;
+ return;
+ }
+ }
+ else // _080BB140
+ {
+ PlaySE12WithPanning(sSoundTestParams[CRY_TEST_VOICE], 63);
+ sSoundTestParams[CRY_TEST_CHORUS] = 63;
+ sSoundTestParams[CRY_TEST_PROGRESS] = 1;
+ sSoundTestParams[CRY_TEST_RELEASE] = 30;
+ return;
+ }
+ // _080BB154
+ PlaySE12WithPanning(sSoundTestParams[CRY_TEST_VOICE], panpot);
+ sSoundTestParams[CRY_TEST_PROGRESS] = 0;
+ return;
+ }
+ if (gMain.newKeys & L_BUTTON) // _080BB15E
+ {
+ sSoundTestParams[CRY_TEST_PANPOT]++;
+ if (sSoundTestParams[CRY_TEST_PANPOT] > 4)
+ sSoundTestParams[CRY_TEST_PANPOT] = 0;
+ }
+ if (gMain.newKeys & R_BUTTON) // _080BB176
+ {
+ sSoundTestParams[CRY_TEST_PANPOT]--;
+ if (sSoundTestParams[CRY_TEST_PANPOT] < 0)
+ sSoundTestParams[CRY_TEST_PANPOT] = 4;
+ }
+ if (gMain.newAndRepeatedKeys & DPAD_RIGHT) // _080BB192
+ {
+ sSoundTestParams[CRY_TEST_VOICE]++;
+ if (sSoundTestParams[CRY_TEST_VOICE] > 247)
+ sSoundTestParams[CRY_TEST_VOICE] = 0;
+ }
+ else if (gMain.newAndRepeatedKeys & DPAD_LEFT) // _080BB1B0
+ {
+ sSoundTestParams[CRY_TEST_VOICE]--;
+ if (sSoundTestParams[CRY_TEST_VOICE] < 0)
+ sSoundTestParams[CRY_TEST_VOICE] = 247;
+ }
+}
+
+void sub_80BB1D4(void)
+{
+ u8 lrStr[] = _(" LR");
+ u8 rlStr[] = _(" RL");
+
+ PrintSignedNumber(sSoundTestParams[CRY_TEST_VOICE], 7, 2, 3);
+
+ switch (gUnknown_083D03F8[sSoundTestParams[CRY_TEST_PANPOT]])
+ {
+ case 127:
+ MenuPrint(lrStr, 7, 4);
+ break;
+ case -128:
+ MenuPrint(rlStr, 7, 4);
+ break;
+ default:
+ PrintSignedNumber(gUnknown_083D03F8[sSoundTestParams[CRY_TEST_PANPOT]], 7, 4, 3);
+ break;
+ }
+ PrintSignedNumber(IsSEPlaying(), 12, 8, 1);
+}
+
+#define SOUND_LIST_BGM \
+ X(BGM_STOP, "STOP") \
+ X(BGM_TETSUJI, "TETSUJI") \
+ X(BGM_FIELD13, "FIELD13") \
+ X(BGM_KACHI22, "KACHI22") \
+ X(BGM_KACHI2, "KACHI2") \
+ X(BGM_KACHI3, "KACHI3") \
+ X(BGM_KACHI5, "KACHI5") \
+ X(BGM_PCC, "PCC") \
+ X(BGM_NIBI, "NIBI") \
+ X(BGM_SUIKUN, "SUIKUN") \
+ X(BGM_DOORO1, "DOORO1") \
+ X(BGM_DOORO_X1, "DOORO-X1") \
+ X(BGM_DOORO_X3, "DOORO-X3") \
+ X(BGM_MACHI_S2, "MACHI-S2") \
+ X(BGM_MACHI_S4, "MACHI-S4") \
+ X(BGM_GIM, "GIM") \
+ X(BGM_NAMINORI, "NAMINORI") \
+ X(BGM_DAN01, "DAN01") \
+ X(BGM_FANFA1, "FANFA1") \
+ X(BGM_ME_ASA, "ME-ASA") \
+ X(BGM_ME_BACHI, "ME-BACHI") \
+ X(BGM_FANFA4, "FANFA4") \
+ X(BGM_FANFA5, "FANFA5") \
+ X(BGM_ME_WAZA, "ME-WAZA") \
+ X(BGM_BIJYUTU, "BIJYUTU") \
+ X(BGM_DOORO_X4, "DOORO-X4") \
+ X(BGM_FUNE_KAN, "FUNE-KAN") \
+ X(BGM_ME_SHINKA, "ME-SHINKA") \
+ X(BGM_SHINKA, "SHINKA") \
+ X(BGM_ME_WASURE, "ME-WASURE") \
+ X(BGM_SYOUJOEYE, "SYOUJOEYE") \
+ X(BGM_BOYEYE, "BOYEYE") \
+ X(BGM_DAN02, "DAN02") \
+ X(BGM_MACHI_S3, "MACHI-S3") \
+ X(BGM_ODAMAKI, "ODAMAKI") \
+ X(BGM_B_TOWER, "B-TOWER") \
+ X(BGM_SWIMEYE, "SWIMEYE") \
+ X(BGM_DAN03, "DAN03") \
+ X(BGM_ME_KINOMI, "ME-KINOMI") \
+ X(BGM_ME_TAMA, "ME-TAMA") \
+ X(BGM_ME_B_BIG, "ME-B-BIG") \
+ X(BGM_ME_B_SMALL, "ME-B-SMALL") \
+ X(BGM_ME_ZANNEN, "ME-ZANNEN") \
+ X(BGM_BD_TIME, "BD-TIME") \
+ X(BGM_TEST1, "TEST1") \
+ X(BGM_TEST2, "TEST2") \
+ X(BGM_TEST3, "TEST3") \
+ X(BGM_TEST4, "TEST4") \
+ X(BGM_TEST, "TEST") \
+ X(BGM_GOMACHI0, "GOMACHI0") \
+ X(BGM_GOTOWN, "GOTOWN") \
+ X(BGM_POKECEN, "POKECEN") \
+ X(BGM_NEXTROAD, "NEXTROAD") \
+ X(BGM_GRANROAD, "GRANROAD") \
+ X(BGM_CYCLING, "CYCLING") \
+ X(BGM_FRIENDLY, "FRIENDLY") \
+ X(BGM_MISHIRO, "MISHIRO") \
+ X(BGM_TOZAN, "TOZAN") \
+ X(BGM_GIRLEYE, "GIRLEYE") \
+ X(BGM_MINAMO, "MINAMO") \
+ X(BGM_ASHROAD, "ASHROAD") \
+ X(BGM_EVENT0, "EVENT0") \
+ X(BGM_DEEPDEEP, "DEEPDEEP") \
+ X(BGM_KACHI1, "KACHI1") \
+ X(BGM_TITLE3, "TITLE3") \
+ X(BGM_DEMO1, "DEMO1") \
+ X(BGM_GIRL_SUP, "GIRL-SUP") \
+ X(BGM_HAGESHII, "HAGESHII") \
+ X(BGM_KAKKOII, "KAKKOII") \
+ X(BGM_KAZANBAI, "KAZANBAI") \
+ X(BGM_AQA_0, "AQA-0") \
+ X(BGM_TSURETEK, "TSURETEK") \
+ X(BGM_BOY_SUP, "BOY-SUP") \
+ X(BGM_RAINBOW, "RAINBOW") \
+ X(BGM_AYASII, "AYASII") \
+ X(BGM_KACHI4, "KACHI4") \
+ X(BGM_ROPEWAY, "ROPEWAY") \
+ X(BGM_CASINO, "CASINO") \
+ X(BGM_HIGHTOWN, "HIGHTOWN") \
+ X(BGM_SAFARI, "SAFARI") \
+ X(BGM_C_ROAD, "C-ROAD") \
+ X(BGM_AJITO, "AJITO") \
+ X(BGM_M_BOAT, "M-BOAT") \
+ X(BGM_M_DUNGON, "M-DUNGON") \
+ X(BGM_FINECITY, "FINECITY") \
+ X(BGM_MACHUPI, "MACHUPI") \
+ X(BGM_P_SCHOOL, "P-SCHOOL") \
+ X(BGM_DENDOU, "DENDOU") \
+ X(BGM_TONEKUSA, "TONEKUSA") \
+ X(BGM_MABOROSI, "MABOROSI") \
+ X(BGM_CON_FAN, "CON-FAN") \
+ X(BGM_CONTEST0, "CONTEST0") \
+ X(BGM_MGM0, "MGM0") \
+ X(BGM_T_BATTLE, "T-BATTLE") \
+ X(BGM_OOAME, "OOAME") \
+ X(BGM_HIDERI, "HIDERI") \
+ X(BGM_RUNECITY, "RUNECITY") \
+ X(BGM_CON_K, "CON-K") \
+ X(BGM_EIKOU_R, "EIKOU-R") \
+ X(BGM_KARAKURI, "KARAKURI") \
+ X(BGM_HUTAGO, "HUTAGO") \
+ X(BGM_SITENNOU, "SITENNOU") \
+ X(BGM_YAMA_EYE, "YAMA-EYE") \
+ X(BGM_CONLOBBY, "CONLOBBY") \
+ X(BGM_INTER_V, "INTER-V") \
+ X(BGM_DAIGO, "DAIGO") \
+ X(BGM_THANKFOR, "THANKFOR") \
+ X(BGM_END, "END") \
+ X(BGM_BATTLE27, "BATTLE27") \
+ X(BGM_BATTLE31, "BATTLE31") \
+ X(BGM_BATTLE20, "BATTLE20") \
+ X(BGM_BATTLE32, "BATTLE32") \
+ X(BGM_BATTLE33, "BATTLE33") \
+ X(BGM_BATTLE36, "BATTLE36") \
+ X(BGM_BATTLE34, "BATTLE34") \
+ X(BGM_BATTLE35, "BATTLE35") \
+ X(BGM_BATTLE38, "BATTLE38") \
+ X(BGM_BATTLE30, "BATTLE30")
+
+#define SOUND_LIST_SE \
+ X(SE_STOP, "STOP") \
+ X(SE_KAIFUKU, "KAIFUKU") \
+ X(SE_PC_LOGON, "PC-LOGON") \
+ X(SE_PC_OFF, "PC-OFF") \
+ X(SE_PC_ON, "PC-ON") \
+ X(SE_SELECT, "SELECT") \
+ X(SE_WIN_OPEN, "WIN-OPEN") \
+ X(SE_WALL_HIT, "WALL-HIT") \
+ X(SE_DOOR, "DOOR") \
+ X(SE_KAIDAN, "KAIDAN") \
+ X(SE_DANSA, "DANSA") \
+ X(SE_JITENSYA, "JITENSYA") \
+ X(SE_KOUKA_L, "KOUKA-L") \
+ X(SE_KOUKA_M, "KOUKA-M") \
+ X(SE_KOUKA_H, "KOUKA-H") \
+ X(SE_BOWA2, "BOWA2") \
+ X(SE_POKE_DEAD, "POKE-DEAD") \
+ X(SE_NIGERU, "NIGERU") \
+ X(SE_JIDO_DOA, "JIDO-DOA") \
+ X(SE_NAMINORI, "NAMINORI") \
+ X(SE_BAN, "BAN") \
+ X(SE_PIN, "PIN") \
+ X(SE_BOO, "BOO") \
+ X(SE_BOWA, "BOWA") \
+ X(SE_JYUNI, "JYUNI") \
+ X(SE_A, "A") \
+ X(SE_I, "I") \
+ X(SE_U, "U") \
+ X(SE_E, "E") \
+ X(SE_O, "O") \
+ X(SE_N, "N") \
+ X(SE_SEIKAI, "SEIKAI") \
+ X(SE_HAZURE, "HAZURE") \
+ X(SE_EXP, "EXP") \
+ X(SE_JITE_PYOKO, "JITE-PYOKO") \
+ X(SE_MU_PACHI, "MU-PACHI") \
+ X(SE_TK_KASYA, "TK-KASYA") \
+ X(SE_FU_ZAKU, "FU-ZAKU") \
+ X(SE_FU_ZAKU2, "FU-ZAKU2") \
+ X(SE_FU_ZUZUZU, "FU-ZUZUZU") \
+ X(SE_RU_GASHIN, "RU-GASHIN") \
+ X(SE_RU_GASYAN, "RU-GASYAN") \
+ X(SE_RU_BARI, "RU-BARI") \
+ X(SE_RU_HYUU, "RU-HYUU") \
+ X(SE_KI_GASYAN, "KI-GASYAN") \
+ X(SE_TK_WARPIN, "TK-WARPIN") \
+ X(SE_TK_WARPOUT, "TK-WARPOUT") \
+ X(SE_TU_SAA, "TU-SAA") \
+ X(SE_HI_TURUN, "HI-TURUN") \
+ X(SE_TRACK_MOVE, "TRACK-MOVE") \
+ X(SE_TRACK_STOP, "TRACK-STOP") \
+ X(SE_TRACK_HAIK, "TRACK-HAIK") \
+ X(SE_TRACK_DOOR, "TRACK-DOOR") \
+ X(SE_MOTER, "MOTER") \
+ X(SE_CARD, "CARD") \
+ X(SE_SAVE, "SAVE") \
+ X(SE_KON, "KON") \
+ X(SE_KON2, "KON2") \
+ X(SE_KON3, "KON3") \
+ X(SE_KON4, "KON4") \
+ X(SE_SUIKOMU, "SUIKOMU") \
+ X(SE_NAGERU, "NAGERU") \
+ X(SE_TOY_C, "TOY-C") \
+ X(SE_TOY_D, "TOY-D") \
+ X(SE_TOY_E, "TOY-E") \
+ X(SE_TOY_F, "TOY-F") \
+ X(SE_TOY_G, "TOY-G") \
+ X(SE_TOY_A, "TOY-A") \
+ X(SE_TOY_B, "TOY-B") \
+ X(SE_TOY_C1, "TOY-C1") \
+ X(SE_MIZU, "MIZU") \
+ X(SE_HASHI, "HASHI") \
+ X(SE_DAUGI, "DAUGI") \
+ X(SE_PINPON, "PINPON") \
+ X(SE_FUUSEN1, "FUUSEN1") \
+ X(SE_FUUSEN2, "FUUSEN2") \
+ X(SE_FUUSEN3, "FUUSEN3") \
+ X(SE_TOY_KABE, "TOY-KABE") \
+ X(SE_TOY_DANGO, "TOY-DANGO") \
+ X(SE_DOKU, "DOKU") \
+ X(SE_ESUKA, "ESUKA") \
+ X(SE_T_AME, "T-AME") \
+ X(SE_T_AME_E, "T-AME-E") \
+ X(SE_T_OOAME, "T-OOAME") \
+ X(SE_T_OOAME_E, "T-OOAME-E") \
+ X(SE_T_KOAME, "T-KOAME") \
+ X(SE_T_KOAME_E, "T-KOAME-E") \
+ X(SE_T_KAMI, "T-KAMI") \
+ X(SE_T_KAMI2, "T-KAMI2") \
+ X(SE_ELEBETA, "ELEBETA") \
+ X(SE_HINSI, "HINSI") \
+ X(SE_EXPMAX, "EXPMAX") \
+ X(SE_TAMAKORO, "TAMAKORO") \
+ X(SE_TAMAKORO_E, "TAMAKORO-E") \
+ X(SE_BASABASA, "BASABASA") \
+ X(SE_REGI, "REGI") \
+ X(SE_C_GAJI, "C-GAJI") \
+ X(SE_C_MAKU_U, "C-MAKU-U") \
+ X(SE_C_MAKU_D, "C-MAKU-D") \
+ X(SE_C_PASI, "C-PASI") \
+ X(SE_C_SYU, "C-SYU") \
+ X(SE_C_PIKON, "C-PIKON") \
+ X(SE_REAPOKE, "REAPOKE") \
+ X(SE_OP_BASYU, "OP-BASYU") \
+ X(SE_BT_START, "BT-START") \
+ X(SE_DENDOU, "DENDOU") \
+ X(SE_JIHANKI, "JIHANKI") \
+ X(SE_TAMA, "TAMA") \
+ X(SE_Z_SCROLL, "Z-SCROLL") \
+ X(SE_Z_PAGE, "Z-PAGE") \
+ X(SE_PN_ON, "PN-ON") \
+ X(SE_PN_OFF, "PN-OFF") \
+ X(SE_Z_SEARCH, "Z-SEARCH") \
+ X(SE_TAMAGO, "TAMAGO") \
+ X(SE_TB_START, "TB-START") \
+ X(SE_TB_KON, "TB-KON") \
+ X(SE_TB_KARA, "TB-KARA") \
+ X(SE_BIDORO, "BIDORO") \
+ X(SE_W085, "W085") \
+ X(SE_W085B, "W085B") \
+ X(SE_W231, "W231") \
+ X(SE_W171, "W171") \
+ X(SE_W233, "W233") \
+ X(SE_W233B, "W233B") \
+ X(SE_W145, "W145") \
+ X(SE_W145B, "W145B") \
+ X(SE_W145C, "W145C") \
+ X(SE_W240, "W240") \
+ X(SE_W015, "W015") \
+ X(SE_W081, "W081") \
+ X(SE_W081B, "W081B") \
+ X(SE_W088, "W088") \
+ X(SE_W016, "W016") \
+ X(SE_W016B, "W016B") \
+ X(SE_W003, "W003") \
+ X(SE_W104, "W104") \
+ X(SE_W013, "W013") \
+ X(SE_W196, "W196") \
+ X(SE_W086, "W086") \
+ X(SE_W004, "W004") \
+ X(SE_W025, "W025") \
+ X(SE_W025B, "W025B") \
+ X(SE_W152, "W152") \
+ X(SE_W026, "W026") \
+ X(SE_W172, "W172") \
+ X(SE_W172B, "W172B") \
+ X(SE_W053, "W053") \
+ X(SE_W007, "W007") \
+ X(SE_W092, "W092") \
+ X(SE_W221, "W221") \
+ X(SE_W221B, "W221B") \
+ X(SE_W052, "W052") \
+ X(SE_W036, "W036") \
+ X(SE_W059, "W059") \
+ X(SE_W059B, "W059B") \
+ X(SE_W010, "W010") \
+ X(SE_W011, "W011") \
+ X(SE_W017, "W017") \
+ X(SE_W019, "W019") \
+ X(SE_W028, "W028") \
+ X(SE_W013B, "W013B") \
+ X(SE_W044, "W044") \
+ X(SE_W029, "W029") \
+ X(SE_W057, "W057") \
+ X(SE_W056, "W056") \
+ X(SE_W250, "W250") \
+ X(SE_W030, "W030") \
+ X(SE_W039, "W039") \
+ X(SE_W054, "W054") \
+ X(SE_W077, "W077") \
+ X(SE_W020, "W020") \
+ X(SE_W082, "W082") \
+ X(SE_W047, "W047") \
+ X(SE_W195, "W195") \
+ X(SE_W006, "W006") \
+ X(SE_W091, "W091") \
+ X(SE_W146, "W146") \
+ X(SE_W120, "W120") \
+ X(SE_W153, "W153") \
+ X(SE_W071B, "W071B") \
+ X(SE_W071, "W071") \
+ X(SE_W103, "W103") \
+ X(SE_W062, "W062") \
+ X(SE_W062B, "W062B") \
+ X(SE_W048, "W048") \
+ X(SE_W187, "W187") \
+ X(SE_W118, "W118") \
+ X(SE_W155, "W155") \
+ X(SE_W122, "W122") \
+ X(SE_W060, "W060") \
+ X(SE_W185, "W185") \
+ X(SE_W014, "W014") \
+ X(SE_W043, "W043") \
+ X(SE_W207, "W207") \
+ X(SE_W207B, "W207B") \
+ X(SE_W215, "W215") \
+ X(SE_W109, "W109") \
+ X(SE_W173, "W173") \
+ X(SE_W280, "W280") \
+ X(SE_W202, "W202") \
+ X(SE_W060B, "W060B") \
+ X(SE_W076, "W076") \
+ X(SE_W080, "W080") \
+ X(SE_W100, "W100") \
+ X(SE_W107, "W107") \
+ X(SE_W166, "W166") \
+ X(SE_W129, "W129") \
+ X(SE_W115, "W115") \
+ X(SE_W112, "W112") \
+ X(SE_W197, "W197") \
+ X(SE_W199, "W199") \
+ X(SE_W236, "W236") \
+ X(SE_W204, "W204") \
+ X(SE_W268, "W268") \
+ X(SE_W070, "W070") \
+ X(SE_W063, "W063") \
+ X(SE_W127, "W127") \
+ X(SE_W179, "W179") \
+ X(SE_W151, "W151") \
+ X(SE_W201, "W201") \
+ X(SE_W161, "W161") \
+ X(SE_W161B, "W161B") \
+ X(SE_W227, "W227") \
+ X(SE_W227B, "W227B") \
+ X(SE_W226, "W226") \
+ X(SE_W208, "W208") \
+ X(SE_W213, "W213") \
+ X(SE_W213B, "W213B") \
+ X(SE_W234, "W234") \
+ X(SE_W260, "W260") \
+ X(SE_W328, "W328") \
+ X(SE_W320, "W320") \
+ X(SE_W255, "W255") \
+ X(SE_W291, "W291") \
+ X(SE_W089, "W089") \
+ X(SE_W239, "W239") \
+ X(SE_W230, "W230") \
+ X(SE_W281, "W281") \
+ X(SE_W327, "W327") \
+ X(SE_W287, "W287") \
+ X(SE_W257, "W257") \
+ X(SE_W253, "W253") \
+ X(SE_W258, "W258") \
+ X(SE_W322, "W322") \
+ X(SE_W298, "W298") \
+ X(SE_W287B, "W287B") \
+ X(SE_W114, "W114") \
+ X(SE_W063B, "W063B")
+
+// Create BGM list
+#define X(songId, name) static const u8 sBGMName_##songId[] = _(name);
+SOUND_LIST_BGM
+#undef X
+
+#define X(songId, name) sBGMName_##songId,
+static const u8 *const gBGMNames[] =
+{
+SOUND_LIST_BGM
+};
+#undef X
+
+// Create SE list
+#define X(songId, name) static const u8 sSEName_##songId[] = _(name);
+SOUND_LIST_SE
+#undef X
+
+#define X(songId, name) sSEName_##songId,
+static const u8 *const gSENames[] =
+{
+SOUND_LIST_SE
+};
+#undef X
+
+void Task_InitCryTest(u8 taskId)
+{
+ struct CryRelatedStruct cryStruct, cryStruct2;
+ u8 zero;
+
+ SetUpWindowConfig(&gWindowConfig_81E6C3C);
+ InitMenuWindow(&gWindowConfig_81E6CE4);
+ gSoundTestCryNum = 1;
+ ResetSpriteData();
+ FreeAllSpritePalettes();
+
+ cryStruct.unk0 = 0x2000;
+ cryStruct.unk2 = 29;
+ cryStruct.paletteNo = 12;
+ cryStruct.yPos = 30;
+ cryStruct.xPos = 4;
+
+ zero = 0; // wtf?
+ gUnknown_03005E98 = 0;
+
+ while (sub_8119E3C(&cryStruct, 3) == FALSE)
+ ;
+
+ cryStruct2.unk0 = 0;
+ cryStruct2.unk2 = 15;
+ cryStruct2.paletteNo = 13;
+ cryStruct2.xPos = 12;
+ cryStruct2.yPos = 12;
+
+ zero = 0; // wtf?
+ gUnknown_03005E98 = 0;
+
+ while (ShowPokedexCryScreen(&cryStruct2, 2) == FALSE)
+ ;
+
+ MenuDrawTextWindow(0, 16, 5, 19);
+ PrintCryNumber();
+ BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, 0);
+ REG_BG2HOFS = 0;
+ REG_BG2VOFS = 0;
+ REG_BG2CNT = 0xF01;
+ REG_BG3CNT = 0x1D03;
+ REG_DISPCNT = 0x1d40;
+ m4aMPlayFadeOutTemporarily(&gMPlay_BGM, 2);
+ gTasks[taskId].func = Task_ProcessCryTestInput;
+}
+
+void Task_ProcessCryTestInput(u8 taskId)
+{
+ sub_8119F88(3);
+
+ if (gMain.newKeys & A_BUTTON)
+ {
+ sub_811A050(gSoundTestCryNum);
+ }
+ if (gMain.newKeys & R_BUTTON)
+ {
+ StopCryAndClearCrySongs();
+ }
+ if (gMain.newAndRepeatedKeys & DPAD_UP)
+ {
+ if(--gSoundTestCryNum == 0)
+ gSoundTestCryNum = 384; // total species
+ PrintCryNumber();
+ }
+ if (gMain.newAndRepeatedKeys & DPAD_DOWN)
+ {
+ if(++gSoundTestCryNum > 384)
+ gSoundTestCryNum = 1;
+ PrintCryNumber();
+ }
+ if (gMain.newKeys & B_BUTTON)
+ {
+ REG_DISPCNT = 0x7140;
+ REG_WIN0H = WIN_RANGE(17, 223);
+ REG_WIN0V = WIN_RANGE(1, 31);
+ MenuZeroFillWindowRect(0, 0, 29, 19);
+ gTasks[taskId].func = Task_InitSoundCheckMenu;
+ DestroyCryMeterNeedleSprite();
+ }
+}
+
+void PrintCryNumber(void)
+{
+ PrintSignedNumber(gSoundTestCryNum, 1, 17, 3);
+}
diff --git a/src/unknown_debug_menu.c b/src/debug/unknown_debug_menu.c
index a81625f2a..a81625f2a 100644
--- a/src/unknown_debug_menu.c
+++ b/src/debug/unknown_debug_menu.c
diff --git a/src/blend_palette.c b/src/engine/blend_palette.c
index 843c50ac1..843c50ac1 100644
--- a/src/blend_palette.c
+++ b/src/engine/blend_palette.c
diff --git a/src/cable_club.c b/src/engine/cable_club.c
index 7a85f2b6c..c61a1d01c 100644
--- a/src/cable_club.c
+++ b/src/engine/cable_club.c
@@ -68,7 +68,7 @@ static void sub_8083B6C(void);
static void sub_8083CA4(u8 taskId);
extern void sub_80831F8(u8 taskId);
-extern void call_map_music_set_to_zero(void);
+extern void Overworld_ResetMapMusic(void);
extern void sub_810FEFC(void);
extern void sub_8047CD8(void);
extern void sub_805559C(void);
@@ -708,7 +708,7 @@ static void sub_808382C(u8 taskId)
static void sub_8083958(void)
{
- call_map_music_set_to_zero();
+ Overworld_ResetMapMusic();
LoadPlayerParty();
SavePlayerBag();
sub_810FEFC();
diff --git a/src/clear_save_data_menu.c b/src/engine/clear_save_data_menu.c
index 498562fe0..498562fe0 100644
--- a/src/clear_save_data_menu.c
+++ b/src/engine/clear_save_data_menu.c
diff --git a/src/clock.c b/src/engine/clock.c
index 9635514d2..9635514d2 100644
--- a/src/clock.c
+++ b/src/engine/clock.c
diff --git a/src/decompress.c b/src/engine/decompress.c
index d7f7087a7..3e5993118 100644
--- a/src/decompress.c
+++ b/src/engine/decompress.c
@@ -6,7 +6,7 @@
#define WRAM 0x02000000
-void sub_800D238(const void *src, void *dest)
+void LZDecompressWram(const void *src, void *dest)
{
LZ77UnCompWram(src, dest);
}
diff --git a/src/link.c b/src/engine/link.c
index 850201ccb..850201ccb 100644
--- a/src/link.c
+++ b/src/engine/link.c
diff --git a/src/load_save.c b/src/engine/load_save.c
index 8424b1121..8424b1121 100644
--- a/src/load_save.c
+++ b/src/engine/load_save.c
diff --git a/src/main.c b/src/engine/main.c
index d7c11b6c8..d7c11b6c8 100644
--- a/src/main.c
+++ b/src/engine/main.c
diff --git a/src/main_menu.c b/src/engine/main_menu.c
index e0af86f3d..e0af86f3d 100644
--- a/src/main_menu.c
+++ b/src/engine/main_menu.c
diff --git a/src/menu.c b/src/engine/menu.c
index a9c4aaa43..a9c4aaa43 100644
--- a/src/menu.c
+++ b/src/engine/menu.c
diff --git a/src/menu_cursor.c b/src/engine/menu_cursor.c
index d43be2a2f..d43be2a2f 100644
--- a/src/menu_cursor.c
+++ b/src/engine/menu_cursor.c
diff --git a/src/mystery_event_menu.c b/src/engine/mystery_event_menu.c
index 0e48dc177..0e48dc177 100644
--- a/src/mystery_event_menu.c
+++ b/src/engine/mystery_event_menu.c
diff --git a/src/mystery_event_script.c b/src/engine/mystery_event_script.c
index f507942a7..a6568f5de 100644
--- a/src/mystery_event_script.c
+++ b/src/engine/mystery_event_script.c
@@ -401,8 +401,8 @@ bool8 MEScrCmd_givepokemon(struct ScriptContext *ctx)
if (species != SPECIES_EGG)
{
u16 pokedexNum = SpeciesToNationalPokedexNum(species);
- GetNationalPokedexFlag(pokedexNum, 2);
- GetNationalPokedexFlag(pokedexNum, 3);
+ GetSetPokedexFlag(pokedexNum, 2);
+ GetSetPokedexFlag(pokedexNum, 3);
}
heldItem = GetMonData(&gPlayerParty[5], MON_DATA_HELD_ITEM);
diff --git a/src/name_string_util.c b/src/engine/name_string_util.c
index f1a935453..f1a935453 100644
--- a/src/name_string_util.c
+++ b/src/engine/name_string_util.c
diff --git a/src/naming_screen.c b/src/engine/naming_screen.c
index a20a15569..a20a15569 100644
--- a/src/naming_screen.c
+++ b/src/engine/naming_screen.c
diff --git a/src/option_menu.c b/src/engine/option_menu.c
index dfc49b035..dfc49b035 100644
--- a/src/option_menu.c
+++ b/src/engine/option_menu.c
diff --git a/src/palette.c b/src/engine/palette.c
index 94a4f8092..17e9ca178 100644
--- a/src/palette.c
+++ b/src/engine/palette.c
@@ -74,7 +74,7 @@ static bool8 IsSoftwarePaletteFadeFinishing(void);
void LoadCompressedPalette(const void *src, u16 offset, u16 size)
{
- sub_800D238(src, sPaletteDecompressionBuffer);
+ LZDecompressWram(src, sPaletteDecompressionBuffer);
CpuCopy16(sPaletteDecompressionBuffer, gPlttBufferUnfaded + offset, size);
CpuCopy16(sPaletteDecompressionBuffer, gPlttBufferFaded + offset, size);
}
diff --git a/src/play_time.c b/src/engine/play_time.c
index 9882c9c4b..9882c9c4b 100644
--- a/src/play_time.c
+++ b/src/engine/play_time.c
diff --git a/src/record_mixing.c b/src/engine/record_mixing.c
index d02d89467..8dff432c1 100644
--- a/src/record_mixing.c
+++ b/src/engine/record_mixing.c
@@ -29,7 +29,7 @@ extern u8 ewram[];
#define unk_2018000 (*(struct PlayerRecords *)(ewram + 0x18000))
#define unk_2008000 (*(struct PlayerRecords *)(ewram + 0x08000))
-extern struct RecordMixing_UnknownStruct gUnknown_02038738;
+extern struct RecordMixingDayCareMail gUnknown_02038738;
extern u16 gSpecialVar_0x8005;
u32 gUnknown_03005D2C;
@@ -42,7 +42,7 @@ void *recordMixingTvShows = &gSaveBlock1.tvShows;
void *gUnknown_083D0274 = &gSaveBlock1.unknown_2ABC;
void *gUnknown_083D0278 = &gSaveBlock1.mauvilleMan;
void *recordMixingEasyChatPairs = &gSaveBlock1.easyChatPairs;
-struct RecordMixing_UnknownStruct *gUnknown_083D0280 = &gUnknown_02038738;
+struct RecordMixingDayCareMail *gUnknown_083D0280 = &gUnknown_02038738;
void *gUnknown_083D0284 = &gSaveBlock2.filler_A8;
#define BUFFER_CHUNK_SIZE 200
@@ -59,7 +59,7 @@ struct PlayerRecords
u8 filler1004[0x40];
u8 filler1044[0x40];
struct EasyChatPair easyChatPairs[5];
- struct RecordMixing_UnknownStruct filler10AC;
+ struct RecordMixingDayCareMail filler10AC;
u8 filler1124[0xA4];
u16 filler11C8[0x34];
};
@@ -74,10 +74,10 @@ void RecordMixing_PrepareExchangePacket(void)
memcpy(unk_2018000.filler1004, gUnknown_083D0274, sizeof(unk_2008000.filler1004));
memcpy(unk_2018000.filler1044, gUnknown_083D0278, sizeof(unk_2008000.filler1044));
memcpy(unk_2018000.easyChatPairs, recordMixingEasyChatPairs, sizeof(unk_2018000.easyChatPairs));
- gUnknown_02038738.data[0] = gSaveBlock1.filler_303C.data[0];
- gUnknown_02038738.data[1] = gSaveBlock1.filler_303C.data[1];
- sub_8041324(gSaveBlock1.daycareData, &gUnknown_02038738);
- memcpy(&unk_2018000.filler10AC, gUnknown_083D0280, sizeof(struct RecordMixing_UnknownStruct));
+ gUnknown_02038738.mail[0] = gSaveBlock1.daycareData.misc.mail[0];
+ gUnknown_02038738.mail[1] = gSaveBlock1.daycareData.misc.mail[1];
+ sub_8041324(gSaveBlock1.daycareData.mons, &gUnknown_02038738);
+ memcpy(&unk_2018000.filler10AC, gUnknown_083D0280, sizeof(struct RecordMixingDayCareMail));
memcpy(unk_2018000.filler1124, gUnknown_083D0284, sizeof(unk_2018000.filler1124));
if (GetMultiplayerId() == 0)
@@ -461,10 +461,10 @@ u8 sub_80B9BBC(u16 *a)
void sub_80B9BC4(u8 *a, size_t b, u8 c[][2], u8 d, u8 e)
{
- struct RecordMixing_UnknownStructSub *r6 = (struct RecordMixing_UnknownStructSub *)(a + b * c[d][0]);
- struct RecordMixing_UnknownStructSub *src = r6 + c[d][1];
- struct RecordMixing_UnknownStructSub sp0 = *src;
- struct RecordMixing_UnknownStructSub *r8 = (struct RecordMixing_UnknownStructSub *)(a + b * c[e][0]);
+ struct DayCareMail *r6 = (struct DayCareMail *)(a + b * c[d][0]);
+ struct DayCareMail *src = r6 + c[d][1];
+ struct DayCareMail sp0 = *src;
+ struct DayCareMail *r8 = (struct DayCareMail *)(a + b * c[e][0]);
r6 += c[d][1];
*r6 = *(r8 + c[e][1]);
@@ -511,7 +511,7 @@ void sub_80B9C6C(u8 *a, u32 b, u8 c, void *d)
u16 i; // r3
u16 r7;
u8 r1;
- struct RecordMixing_UnknownStruct *r6;
+ struct DayCareMisc *r6;
//asm("":::"r8");
SeedRng(gLinkPlayers[0].trainerId);
@@ -526,7 +526,7 @@ void sub_80B9C6C(u8 *a, u32 b, u8 c, void *d)
sp3C = 0;
for (i = 0; i < r8; i++)
{
- r6 = (struct RecordMixing_UnknownStruct *)(a + b * i);
+ r6 = (struct DayCareMisc *)(a + b * i);
if (r6->unk70 != 0)
{
for (r7 = 0; r7 < r6->unk70; r7++)
@@ -540,7 +540,7 @@ void sub_80B9C6C(u8 *a, u32 b, u8 c, void *d)
//_080B9D46
for (r7 = 0, i = 0; i < r8; i++)
{
- r6 = (struct RecordMixing_UnknownStruct *)(a + b * i);
+ r6 = (struct DayCareMisc *)(a + b * i);
if (sp1C[i][0] == 1 || sp1C[i][1] == 1)
sp3C++;
if (sp1C[i][0] == 1 && sp1C[i][1] == 0)
@@ -596,7 +596,7 @@ void sub_80B9C6C(u8 *a, u32 b, u8 c, void *d)
//_080B9E3E
for (i = 0; i < 4; i++)
{
- r6 = (struct RecordMixing_UnknownStruct *)a + b * c;
+ r6 = (struct DayCareMisc *)a + b * c;
spC[i] = r6;
}
r1 = sub_80B9C4C(d) % 3;
@@ -630,7 +630,7 @@ void sub_80B9C6C(u8 *a, u32 b, u8 c, void *d)
//_080B9EF0
//memcpy(&gSaveBlock1.filler_303C.data[0], a + b * c, 0x38);
//memcpy(&gSaveBlock1.filler_303C.data[1], a + b * c + 0x38, 0x38);
- r6 = (struct RecordMixing_UnknownStruct *)(a + b * c);
+ r6 = (struct DayCareMisc *)(a + b * c);
gSaveBlock1.filler_303C.data[0] = r6->data[0];
gSaveBlock1.filler_303C.data[1] = r6->data[1];
//memcpy(&gSaveBlock1.filler_303C.data[0], &r6->data[0], 0x38);
diff --git a/src/reset_rtc_screen.c b/src/engine/reset_rtc_screen.c
index d052992ad..d052992ad 100644
--- a/src/reset_rtc_screen.c
+++ b/src/engine/reset_rtc_screen.c
diff --git a/src/rng.c b/src/engine/rng.c
index 7d4b5600e..7d4b5600e 100644
--- a/src/rng.c
+++ b/src/engine/rng.c
diff --git a/src/rtc.c b/src/engine/rtc.c
index d73f943d2..d73f943d2 100644
--- a/src/rtc.c
+++ b/src/engine/rtc.c
diff --git a/src/save.c b/src/engine/save.c
index eae3f4470..eae3f4470 100644
--- a/src/save.c
+++ b/src/engine/save.c
diff --git a/src/save_failed_screen.c b/src/engine/save_failed_screen.c
index b91e8b5bf..b91e8b5bf 100644
--- a/src/save_failed_screen.c
+++ b/src/engine/save_failed_screen.c
diff --git a/src/save_menu_util.c b/src/engine/save_menu_util.c
index a2d17bd36..a2d17bd36 100644
--- a/src/save_menu_util.c
+++ b/src/engine/save_menu_util.c
diff --git a/src/script.c b/src/engine/script.c
index f049b96fc..8625cfdc2 100644
--- a/src/script.c
+++ b/src/engine/script.c
@@ -3,6 +3,14 @@
#include "event_data.h"
#define RAM_SCRIPT_MAGIC 51
+#define SCRIPT_STACK_SIZE 20
+
+enum
+{
+ SCRIPT_MODE_STOPPED,
+ SCRIPT_MODE_BYTECODE,
+ SCRIPT_MODE_NATIVE,
+};
EWRAM_DATA u8 *gUnknown_0202E8AC = NULL;
@@ -19,66 +27,66 @@ void InitScriptContext(struct ScriptContext *ctx, void *cmdTable, void *cmdTable
{
s32 i;
- ctx->mode = 0;
- ctx->scriptPtr = 0;
+ ctx->mode = SCRIPT_MODE_STOPPED;
+ ctx->scriptPtr = NULL;
ctx->stackDepth = 0;
- ctx->nativePtr = 0;
+ ctx->nativePtr = NULL;
ctx->cmdTable = cmdTable;
ctx->cmdTableEnd = cmdTableEnd;
for (i = 0; i < 4; i++)
ctx->data[i] = 0;
- for (i = 0; i < 20; i++)
+ for (i = 0; i < SCRIPT_STACK_SIZE; i++)
ctx->stack[i] = 0;
}
u8 SetupBytecodeScript(struct ScriptContext *ctx, const u8 *ptr)
{
ctx->scriptPtr = ptr;
- ctx->mode = 1;
+ ctx->mode = SCRIPT_MODE_BYTECODE;
return 1;
}
void SetupNativeScript(struct ScriptContext *ctx, bool8 (*ptr)(void))
{
- ctx->mode = 2;
+ ctx->mode = SCRIPT_MODE_NATIVE;
ctx->nativePtr = ptr;
}
void StopScript(struct ScriptContext *ctx)
{
- ctx->mode = 0;
- ctx->scriptPtr = 0;
+ ctx->mode = SCRIPT_MODE_STOPPED;
+ ctx->scriptPtr = NULL;
}
-u8 RunScriptCommand(struct ScriptContext *ctx)
+bool8 RunScriptCommand(struct ScriptContext *ctx)
{
- if (ctx->mode == 0)
- return 0;
+ if (ctx->mode == SCRIPT_MODE_STOPPED)
+ return FALSE;
switch (ctx->mode)
{
- case 0:
- return 0;
- case 2:
+ case SCRIPT_MODE_STOPPED:
+ return FALSE;
+ case SCRIPT_MODE_NATIVE:
if (ctx->nativePtr)
{
if (ctx->nativePtr() == TRUE)
- ctx->mode = 1;
- return 1;
+ ctx->mode = SCRIPT_MODE_BYTECODE;
+ return TRUE;
}
- ctx->mode = 1;
- case 1:
+ ctx->mode = SCRIPT_MODE_BYTECODE;
+ case SCRIPT_MODE_BYTECODE:
while (1)
{
u8 cmdCode;
- ScrCmdFunc *func;
+ ScrCmdFunc *cmdFunc;
- if (!ctx->scriptPtr)
+ if (ctx->scriptPtr == NULL)
{
- ctx->mode = 0;
- return 0;
+ ctx->mode = SCRIPT_MODE_STOPPED;
+ return FALSE;
}
if (ctx->scriptPtr == gNullScriptPtr)
@@ -89,25 +97,25 @@ u8 RunScriptCommand(struct ScriptContext *ctx)
cmdCode = *(ctx->scriptPtr);
ctx->scriptPtr++;
- func = &ctx->cmdTable[cmdCode];
+ cmdFunc = &ctx->cmdTable[cmdCode];
- if (func >= ctx->cmdTableEnd)
+ if (cmdFunc >= ctx->cmdTableEnd)
{
- ctx->mode = 0;
- return 0;
+ ctx->mode = SCRIPT_MODE_STOPPED;
+ return FALSE;
}
- if ((*func)(ctx) == 1)
- return 1;
+ if ((*cmdFunc)(ctx) == TRUE)
+ return TRUE;
}
}
- return 1;
+ return TRUE;
}
u8 ScriptPush(struct ScriptContext *ctx, const u8 *ptr)
{
- if (ctx->stackDepth + 1 >= 20)
+ if (ctx->stackDepth + 1 >= SCRIPT_STACK_SIZE)
{
return 1;
}
diff --git a/src/sound.c b/src/engine/sound.c
index 91f5e06a3..a6a61c0b5 100644
--- a/src/sound.c
+++ b/src/engine/sound.c
@@ -81,8 +81,6 @@ void MapMusicMain(void)
PlayBGM(sCurrentMapMusic);
break;
case 2:
- case 3:
- case 4:
break;
case 5:
if (IsBGMStopped())
diff --git a/src/sprite.c b/src/engine/sprite.c
index 5700bc86b..5700bc86b 100644
--- a/src/sprite.c
+++ b/src/engine/sprite.c
diff --git a/src/string_util.c b/src/engine/string_util.c
index 9686256a1..9686256a1 100644
--- a/src/string_util.c
+++ b/src/engine/string_util.c
diff --git a/src/task.c b/src/engine/task.c
index 7bd2b5937..7bd2b5937 100644
--- a/src/task.c
+++ b/src/engine/task.c
diff --git a/src/text.c b/src/engine/text.c
index b27084b86..87903608f 100644
--- a/src/text.c
+++ b/src/engine/text.c
@@ -219,12 +219,12 @@ static const u8 sBrailleGlyphs[] = INCBIN_U8("graphics/fonts/font6_braille.1bpp"
static const u32 sDownArrowTiles[] = INCBIN_U32("graphics/fonts/down_arrow.4bpp");
// clang-format off
-#include "data/text/type1_map.h"
-#include "data/text/type3_map.h"
-#include "data/text/font1_widths.h"
-#include "data/text/font4_widths.h"
-#include "data/text/font0_widths.h"
-#include "data/text/font3_widths.h"
+#include "../data/text/type1_map.h"
+#include "../data/text/type3_map.h"
+#include "../data/text/font1_widths.h"
+#include "../data/text/font4_widths.h"
+#include "../data/text/font0_widths.h"
+#include "../data/text/font3_widths.h"
// clang-format on
const u16 gUnknownPalette_81E6692[] = INCBIN_U16("graphics/fonts/unknown_81E6692.gbapal");
@@ -1943,7 +1943,7 @@ void InitWindowFromConfig(struct Window *win, const struct WindowConfig *winConf
void InitWindow(struct Window *win, const u8 *text, u16 tileDataStartOffset, u8 left, u8 top)
{
- struct WindowConfig *winConfig = win->config;
+ const struct WindowConfig *winConfig = win->config;
win->textMode = winConfig->textMode;
win->fontNum = winConfig->fontNum;
win->language = GAME_LANGUAGE;
@@ -2342,7 +2342,7 @@ u8 sub_8003490(struct Window *win, u8 c, u16 tileDataStartOffset, u8 left, u8 to
void sub_80034D4(u8 *tileData, const u8 *text)
{
- sub_8004E3C((struct WindowConfig *)&gWindowConfig_81E6C74, tileData, text);
+ sub_8004E3C(&gWindowConfig_81E6C74, tileData, text);
}
u8 sub_80034EC(u8 *str)
@@ -3645,7 +3645,7 @@ void sub_8004E28(struct Window *win, u8 *foreground, u8 *background, u8 *shadow)
*shadow = win->shadowColor;
}
-void sub_8004E3C(struct WindowConfig *winConfig, u8 *tileData, const u8 *text)
+void sub_8004E3C(const struct WindowConfig *winConfig, u8 *tileData, const u8 *text)
{
sTempWindow.config = winConfig;
InitWindow(&sTempWindow, text, 0, 0, 0);
@@ -3653,7 +3653,7 @@ void sub_8004E3C(struct WindowConfig *winConfig, u8 *tileData, const u8 *text)
sub_8002F44(&sTempWindow);
}
-u8 GetStringWidthGivenWindowConfig(struct WindowConfig *winConfig, const u8 *s)
+u8 GetStringWidthGivenWindowConfig(const struct WindowConfig *winConfig, const u8 *s)
{
sTempWindow.config = winConfig;
InitWindow(&sTempWindow, s, 0, 0, 0);
diff --git a/src/text_window.c b/src/engine/text_window.c
index 9a88789d1..9a88789d1 100644
--- a/src/text_window.c
+++ b/src/engine/text_window.c
diff --git a/src/tileset_anim.c b/src/engine/tileset_anim.c
index 34685381d..34685381d 100644
--- a/src/tileset_anim.c
+++ b/src/engine/tileset_anim.c
diff --git a/src/time_events.c b/src/engine/time_events.c
index accb03db8..accb03db8 100644
--- a/src/time_events.c
+++ b/src/engine/time_events.c
diff --git a/src/engine/trade.c b/src/engine/trade.c
new file mode 100644
index 000000000..6e78ba3ce
--- /dev/null
+++ b/src/engine/trade.c
@@ -0,0 +1,5715 @@
+#include "global.h"
+#include "name_string_util.h"
+#include "string_util.h"
+#include "text.h"
+#include "main.h"
+#include "species.h"
+#include "items.h"
+#include "moves.h"
+#include "easy_chat.h"
+#include "link.h"
+#include "strings2.h"
+#include "graphics.h"
+#include "palette.h"
+#include "task.h"
+#include "menu.h"
+#include "text_window.h"
+#include "pokemon_icon.h"
+#include "cable_club.h"
+#include "party_menu.h"
+#include "songs.h"
+#include "sound.h"
+#include "data2.h"
+#include "pokemon_summary_screen.h"
+#include "overworld.h"
+#include "rom_8077ABC.h"
+#include "daycare.h"
+#include "event_data.h"
+#include "strings.h"
+#include "load_save.h"
+#include "save.h"
+#include "script.h"
+#include "field_fadetransition.h"
+#include "decompress.h"
+#include "mail_data.h"
+#include "evolution_scene.h"
+#include "pokeball.h"
+#include "pokedex.h"
+#include "field_effect.h"
+#include "util.h"
+#include "battle_interface.h"
+#include "trade.h"
+
+#ifdef ENGLISH
+#define sub_804A96C_alt sub_804A96C
+asm(".set sub_804A96C_alt, sub_804A96C");
+#endif
+
+#define Trade_SendData(ptr) (SendBlock(bitmask_all_link_players_but_self(), ptr->linkData, 20))
+
+struct InGameTrade {
+ /*0x00*/ u8 name[11];
+ /*0x0C*/ u16 species;
+ /*0x0E*/ u8 ivs[6];
+ /*0x14*/ bool8 secondAbility;
+ /*0x18*/ u32 otId;
+ /*0x1C*/ u8 stats[5];
+ /*0x24*/ u32 personality;
+ /*0x28*/ u16 heldItem;
+ /*0x2A*/ u8 mailNum;
+ /*0x2B*/ u8 otName[11];
+ /*0x36*/ u8 otGender;
+ /*0x37*/ u8 sheen;
+ /*0x38*/ u16 playerSpecies;
+};
+
+struct UnkStructC {
+ /*0x00*/ u16 words[9];
+ /*0x10*/ u8 string[8];
+ /*0x1A*/ u8 otId[4];
+ /*0x1E*/ u16 species;
+ /*0x20*/ u16 heldItem;
+};
+
+struct UnkStructD {
+ /*0x00*/ u8 filler_00[8];
+ /*0x08*/ void *vramAddr;
+ /*0x0c*/ u8 filler_0c[4];
+ /*0x10*/ u8 unk_10;
+ /*0x12*/ u16 unk_12[0x400];
+};
+
+struct UnkStructE {
+ /*0x00*/ u8 unk_00;
+ /*0x02*/ u16 unk_02;
+ /*0x04*/ u8 unk_04;
+};
+
+struct TradeEwramSubstruct {
+ /*0x0000*/ u8 unk_0000;
+ /*0x0001*/ u8 unk_0001;
+ /*0x0004*/ struct Window window;
+ /*0x0034*/ u8 partyIcons[2][6];
+ /*0x0040*/ u8 tradeMenuCursorSpriteIdx;
+ /*0x0041*/ u8 tradeMenuCursorPosition;
+ /*0x0042*/ u8 partyCounts[2];
+ /*0x0044*/ u8 tradeMenuOptionsActive[13];
+ /*0x0051*/ u8 unk_0051[2][6];
+ /*0x005d*/ u8 unk_005d[2][6];
+ /*0x005d*/ u8 unk_0069[2][6];
+ /*0x0075*/ u8 unk_0075;
+ /*0x0076*/ u8 filler_0076[4];
+ /*0x007a*/ u8 unk_007a;
+ /*0x007b*/ u8 unk_007b;
+ /*0x007c*/ u8 unk_007c;
+ /*0x007d*/ u8 unk_007d;
+ /*0x007e*/ u16 unk_007e;
+ /*0x0080*/ u8 unk_0080[2];
+ /*0x0082*/ u8 unk_0082[2];
+ /*0x0084*/ u8 unk_0084;
+ /*0x0085*/ u8 unk_0085;
+ /*0x0086*/ u8 unk_0086;
+ /*0x0087*/ u8 unk_0087;
+ /*0x0088*/ u8 filler_0088[2];
+ /*0x008a*/ u8 unk_008a;
+ /*0x008b*/ u8 unk_008b;
+ /*0x008c*/ u16 linkData[20];
+ /*0x00b4*/ u8 unk_00b4;
+ /*0x00b5*/ u8 unk_00b5[11];
+ /*0x00c0*/ u8 filler_00c0[8];
+ /*0x00c8*/ struct UnkStructD unk_00c8;
+ /*0x08dc*/ struct UnkStructE unk_08dc[4];
+ /*0x08fc*/ u8 filler_08fc[0x704];
+};
+
+IWRAM_DATA u8 gUnknown_03000508[8];
+
+struct UnkStructF {
+ u8 filler_0000[9];
+ u8 unk_0009;
+ u8 filler_000a[0xff6];
+};
+
+struct TradeEwramStruct {
+ /*0x00000*/ u8 filler_00000[0x7000];
+ /*0x07000*/ struct TradeEwramSubstruct unk_07000;
+ /*0x08000*/ struct UnkStructF unk_08000;
+ /*0x09000*/ u8 filler_09000[0x4000];
+ /*0x0d000*/ u8 tileBuffers[13][256];
+ /*0x0dd00*/ u8 filler_0dd00[0x1300];
+ /*0x0f000*/ struct TradeEwramSubstruct2 unk_0f000;
+};
+
+static void sub_8047EC0(void);
+static void sub_804AFB8(const struct WindowConfig *, u8 *, const u8 *, u8);
+static void sub_804ACD8(const u8 *, u8 *, u8);
+static void nullsub_5(u8, u8);
+static void sub_804AA88(void);
+static void sub_804A964(struct UnkStructD *, void *);
+static void sub_80489F4(void);
+static void sub_804AA0C(u8);
+static bool8 sub_8048D44(void);
+static void sub_804AF84(void);
+static bool8 sub_804ABF8(void);
+static void sub_804ACF4(u8);
+static void sub_804A41C(u8);
+static void sub_8048C70(void);
+static void sub_8048B0C(u8);
+static void sub_804AE3C(u8);
+static void sub_804AF10(void);
+static void sub_80494D8(void);
+static void sub_8048AB4(void);
+static void sub_804A940(struct UnkStructD *);
+static void sub_804B41C(void);
+static void sub_8049DE0(void);
+static void sub_804AB30(void);
+static void sub_8049ED4(u8);
+static void sub_804A6DC(u8);
+static void sub_804A938(struct UnkStructD *);
+static void sub_804A9F4(u8);
+static void sub_804AA00(u8);
+static void sub_8049E9C(u8);
+static void sub_804AADC(u16, u8);
+static void sub_804A80C(void);
+static u8 sub_80499F0(const u8 *, u8, u8);
+static void sub_804A840(u8);
+#ifdef NONMATCHING
+static
+#endif
+u8 sub_804A2B4(u8 *, u8, u8);
+static void sub_804A96C_alt(struct UnkStructD *, u8, u8, const u16 *, u8, u8, u16);
+static void sub_804A96C(struct UnkStructD *, u8, u8, const u16 *, u8, u8, u16);
+#ifdef NONMATCHING
+static
+#endif
+void sub_804A33C(u8 *, u8, u8);
+#ifdef NONMATCHING
+static
+#endif
+void sub_804A51C(u8, u8, u8, u8, u8, u8);
+static void sub_804D7AC(struct Sprite *);
+static bool8 sub_804C29C(void);
+static void sub_804DC18(void);
+static u8 sub_804B2B0(void);
+static void sub_804E144(void);
+static void sub_804E1A0(u8);
+static void sub_804DAD4(struct MailStruct *, const struct InGameTrade *);
+static void sub_804DC88(void);
+static void sub_804D6BC(struct Sprite *);
+static void sub_804D738(struct Sprite *);
+static void sub_804BBE8(u8);
+static void sub_804B058(struct Sprite *);
+static void sub_804B07C(struct Sprite *);
+static void sub_804B0BC(struct Sprite *);
+static void sub_804B104(struct Sprite *);
+static void sub_804D80C(struct Sprite *);
+static void sub_804E1DC(void);
+static void sub_804BBCC(void);
+static void sub_804D8E4(void);
+static void sub_804C164(void);
+static void sub_804C1A8(void);
+#ifdef NONMATCHING
+static
+#endif
+void sub_804DB84(void);
+
+extern u8 gUnknown_020297D8[2];
+extern u8 *gUnknown_020296CC[13];
+extern struct TradeEwramSubstruct *gUnknown_03004824;
+extern struct MailStruct gUnknown_02029700[16];
+
+#define ewram_2010000 (*(struct TradeEwramStruct *)(ewram + 0x10000))
+
+
+const u32 unref_data_820ABD4[] = {
+ 0x00000890,
+ 0x00003AC0,
+ 0x0000001C,
+ 0x00000530,
+ 0x00000024,
+ 0x00000064,
+ 0x000004D8
+};
+
+const u16 gTradeMovesBoxTilemap[] = INCBIN_U16("graphics/trade/moves_box_map.bin");
+const u16 gTradePartyBoxTilemap[] = INCBIN_U16("graphics/trade/party_box_map.bin");
+const u16 gTradeStripesBG2Tilemap[] = INCBIN_U16("graphics/trade/stripes_bg2_map.bin");
+const u16 gTradeStripesBG3Tilemap[] = INCBIN_U16("graphics/trade/stripes_bg3_map.bin");
+
+const struct OamData gOamData_820BFEC = {
+ .shape = ST_OAM_H_RECTANGLE,
+ .size = 2,
+ .priority = 1
+};
+
+const union AnimCmd gSpriteAnim_820BFF4[] = {
+ ANIMCMD_FRAME(0, 5),
+ ANIMCMD_END
+};
+
+const union AnimCmd gSpriteAnim_820BFFC[] = {
+ ANIMCMD_FRAME(8, 5),
+ ANIMCMD_END
+};
+
+const union AnimCmd gSpriteAnim_820C004[] = {
+ ANIMCMD_FRAME(16, 5),
+ ANIMCMD_END
+};
+
+const union AnimCmd gSpriteAnim_820C00C[] = {
+ ANIMCMD_FRAME(24, 5),
+ ANIMCMD_END
+};
+
+const union AnimCmd gSpriteAnim_820C014[] = {
+ ANIMCMD_FRAME(32, 5),
+ ANIMCMD_END
+};
+
+const union AnimCmd gSpriteAnim_820C01C[] = {
+ ANIMCMD_FRAME(40, 5),
+ ANIMCMD_END
+};
+
+const union AnimCmd *const gSpriteAnimTable_820C024[] = {
+ gSpriteAnim_820BFF4,
+ gSpriteAnim_820BFFC,
+ gSpriteAnim_820C004,
+ gSpriteAnim_820C00C,
+ gSpriteAnim_820C014,
+ gSpriteAnim_820C01C
+};
+
+const u16 TradeScreenTextPalette[] = INCBIN_U16("graphics/trade/text1.gbapal");
+const u16 UnrefTradeScreenTextPalette[] = INCBIN_U16("graphics/trade/text2.gbapal");
+
+const struct SpriteSheet gUnknown_0820C07C[] = {
+ {ewram_2010000.tileBuffers[ 0], 256, 200},
+ {ewram_2010000.tileBuffers[ 1], 256, 201},
+ {ewram_2010000.tileBuffers[ 2], 256, 202},
+ {ewram_2010000.tileBuffers[ 3], 256, 203},
+ {ewram_2010000.tileBuffers[ 4], 256, 204},
+ {ewram_2010000.tileBuffers[ 5], 256, 205},
+ {ewram_2010000.tileBuffers[ 6], 256, 206},
+ {ewram_2010000.tileBuffers[ 7], 256, 207},
+ {ewram_2010000.tileBuffers[ 8], 256, 208},
+ {ewram_2010000.tileBuffers[ 9], 256, 209},
+ {ewram_2010000.tileBuffers[10], 256, 210},
+ {ewram_2010000.tileBuffers[11], 256, 211},
+ {ewram_2010000.tileBuffers[12], 256, 212},
+};
+
+const struct SpritePalette gSpritePalette_TradeScreenText = {
+ TradeScreenTextPalette, 4925
+};
+
+const struct SpriteTemplate gSpriteTemplate_820C0EC = {
+ 200,
+ 4925,
+ &gOamData_820BFEC,
+ gSpriteAnimTable_820C024,
+ NULL,
+ gDummySpriteAffineAnimTable,
+ SpriteCallbackDummy
+};
+
+const struct OamData gOamData_820C104 = {
+ .shape = ST_OAM_H_RECTANGLE,
+ .size = 3,
+ .priority = 1
+};
+
+const union AnimCmd gSpriteAnim_820C10C[] = {
+ ANIMCMD_FRAME(0, 5),
+ ANIMCMD_END
+};
+
+const union AnimCmd gSpriteAnim_820C114[] = {
+ ANIMCMD_FRAME(32, 5),
+ ANIMCMD_END
+};
+
+const union AnimCmd *const gSpriteAnimTable_820C11C[] = {
+ gSpriteAnim_820C10C,
+ gSpriteAnim_820C114
+};
+
+const struct SpriteSheet gUnknown_0820C124 = {
+ gUnknown_08EA1DEC, 0x800, 300
+};
+
+const struct SpritePalette gUnknown_0820C12C = {
+ gUnknown_08EA0328, 2345
+};
+
+const struct SpriteTemplate gSpriteTemplate_820C134 = {
+ 300,
+ 2345,
+ &gOamData_820C104,
+ gSpriteAnimTable_820C11C,
+ NULL,
+ gDummySpriteAffineAnimTable,
+ SpriteCallbackDummy
+};
+
+const u8 *const gUnknown_0820C14C[] = {
+ TradeText_Cancel,
+ TradeText_ChoosePoke,
+ TradeText_Summary1,
+ TradeText_Trade1,
+ TradeText_CancelTradePrompt,
+ TradeText_PressBToExit
+};
+
+// This is used to determine the next mon to select when the D-Pad is
+// pressed in a given direction.
+// Note that the mons are laid out like this.
+// 0-5 are the player's party and 6-11 are the trading partner's party.
+// 12 is the cancel button.
+// 0 1 6 7
+// 2 3 8 9
+// 4 5 10 11
+// 12
+
+const u8 gTradeNextSelectedMonTable[][4][6] = {
+ {
+ { 4, 2, 12, 12, 0, 0},
+ { 2, 4, 12, 12, 0, 0},
+ { 7, 6, 1, 0, 0, 0},
+ { 1, 6, 7, 0, 0, 0}
+ }, {
+ { 5, 3, 12, 12, 0, 0},
+ { 3, 5, 12, 12, 0, 0},
+ { 0, 7, 6, 1, 0, 0},
+ { 6, 7, 0, 1, 0, 0}
+ }, {
+ { 0, 0, 0, 0, 0, 0},
+ { 4, 0, 0, 0, 0, 0},
+ { 9, 8, 7, 6, 0, 0},
+ { 3, 1, 0, 0, 0, 0}
+ }, {
+ { 1, 1, 1, 1, 0, 0},
+ { 5, 1, 1, 1, 0, 0},
+ { 2, 9, 8, 7, 0, 0},
+ { 8, 9, 6, 6, 0, 0}
+ }, {
+ { 2, 2, 2, 2, 0, 0},
+ { 0, 0, 0, 0, 0, 0},
+ {11, 10, 9, 8, 7, 6},
+ { 5, 3, 1, 0, 0, 0}
+ }, {
+ { 3, 3, 3, 3, 0, 0},
+ { 1, 1, 1, 1, 0, 0},
+ { 4, 4, 4, 4, 0, 0},
+ {10, 8, 6, 0, 0, 0}
+ }, {
+ {10, 8, 12, 0, 0, 0},
+ { 8, 10, 12, 0, 0, 0},
+ { 1, 0, 0, 0, 0, 0},
+ { 7, 0, 1, 0, 0, 0}
+ }, {
+ {12, 0, 0, 0, 0, 0},
+ { 9, 12, 0, 0, 0, 0},
+ { 6, 0, 0, 0, 0, 0},
+ { 0, 0, 0, 0, 0, 0}
+ }, {
+ { 6, 0, 0, 0, 0, 0},
+ {10, 6, 0, 0, 0, 0},
+ { 3, 2, 1, 0, 0, 0},
+ { 9, 7, 0, 0, 0, 0}
+ }, {
+ { 7, 0, 0, 0, 0, 0},
+ {11, 12, 0, 0, 0, 0},
+ { 8, 0, 0, 0, 0, 0},
+ { 2, 1, 0, 0, 0, 0}
+ }, {
+ { 8, 0, 0, 0, 0, 0},
+ { 6, 0, 0, 0, 0, 0},
+ { 5, 4, 3, 2, 1, 0},
+ {11, 9, 7, 0, 0, 0}
+ }, {
+ { 9, 0, 0, 0, 0, 0},
+ {12, 0, 0, 0, 0, 0},
+ {10, 0, 0, 0, 0, 0},
+ { 4, 2, 0, 0, 0, 0}
+ }, {
+ {11, 9, 7, 6, 0, 0},
+ { 7, 6, 0, 0, 0, 0},
+ {12, 0, 0, 0, 0, 0},
+ {12, 0, 0, 0, 0, 0}
+ }
+};
+
+const u8 gTradeMonSpriteCoords[][2] = {
+ // Your party
+ {1, 5},
+ {8, 5},
+ {1, 10},
+ {8, 10},
+ {1, 15},
+ {8, 15},
+
+ // Friend's party
+ {16, 5},
+ {23, 5},
+ {16, 10},
+ {23, 10},
+ {16, 15},
+ {23, 15},
+
+ {23, 18} // CANCEL
+};
+
+const u8 gTradeLevelDisplayCoords[2][6][2] = {
+ {
+ // Your party
+ {5, 4},
+ {12, 4},
+ {5, 9},
+ {12, 9},
+ {5, 14},
+ {12, 14},
+ },
+ {
+ // Friend's party
+ {20, 4},
+ {27, 4},
+ {20, 9},
+ {27, 9},
+ {20, 14},
+ {27, 14}
+ }
+};
+
+const u8 gTradeMonBoxCoords[2][6][2] = {
+ {
+ // Your party
+ {1, 3},
+ {8, 3},
+ {1, 8},
+ {8, 8},
+ {1, 13},
+ {8, 13},
+ },
+ {
+ // Friend's party
+ {16, 3},
+ {23, 3},
+ {16, 8},
+ {23, 8},
+ {16, 13},
+ {23, 13}
+ }
+};
+
+const u8 gTradeUnknownSpriteCoords[][2][2] = {
+ {
+ { 59, 10},
+ {179, 10},
+ },
+ {
+ { 59, 10},
+ {179, 10}
+ }
+};
+
+const u8 *const gUnknown_0820C2F0[] = {
+ TradeText_LinkStandby,
+ TradeText_TradeCancelled,
+ TradeText_OnlyPoke,
+ TradeText_NonTradablePoke,
+ TradeText_WaitingForFriend,
+ TradeText_WantToTrade
+};
+
+const u8 gTradeMessageWindowRects[][4] = {
+ {8, 7, 22, 12},
+ {8, 7, 22, 12},
+ {6, 7, 24, 12},
+ {6, 7, 24, 12},
+ {8, 7, 22, 12},
+ {7, 7, 23, 12}
+};
+
+const struct MenuAction2 gUnknown_0820C320[] = {
+ {TradeText_Summary2, sub_804A9F4},
+ {TradeText_Trade2, sub_804AA00}
+};
+
+const u8 gUnknown_0820C330[][2] = {
+ { 0, 14},
+ {15, 29}
+};
+
+const u8 gUnknown_0820C334[][2] = {
+ { 3, 5},
+ { 3, 7},
+ {18, 5},
+ {18, 7}
+};
+
+const u8 gOtherText_Terminator[] = _("");
+const u8 gOtherText_MaleSymbol3[] = _("♂");
+const u8 gOtherText_FemaleSymbol3[] = _("♀");
+const u8 gOtherText_GenderlessSymbol[] = _("$");
+
+u8 *const unref_data_820C344 = gTileBuffer;
+const u8 unref_strings_820C348[][13] = {
+ _("かいめの そうしん"),
+ _("かいめの じゅしん"),
+ _("ポケモンアイコンセット"),
+ _("OBJテキストセット"),
+ _("セルセット"),
+ _("OBJテキストADD"),
+ _("システムメッセージADD"),
+ _("はいけいセット"),
+};
+
+const u8 gUnknown_0820C3B0[] = _("ヌケニン");
+const u8 unref_string_0820C3B5[] = _("こうかんせいりつ ");
+const u8 unref_string_0820C3C3[] = _("だめだたらしいよ ");
+const u8 gUnknown_0820C3D1[][2] = {
+ { 4, 3},
+ {19, 3},
+ { 0, 0}
+};
+
+const u16 gTradeBallPalette[] = INCBIN_U16("graphics/trade/ball.gbapal");
+const u32 gTradeBallTiles[] = INCBIN_U32("graphics/trade/ball.4bpp");
+const u16 gUnknown_0820C9F8[][16] = {
+ INCBIN_U16("graphics/trade/unknown.gbapal"),
+ INCBIN_U16("graphics/trade/gba.gbapal"),
+ INCBIN_U16("graphics/trade/shadow.gbapal"),
+ {},
+ INCBIN_U16("graphics/trade/misc.gbapal")
+};
+
+const u32 gUnknown_0820CA98[] = INCBIN_U32("graphics/trade/gba.4bpp");
+const u32 gUnknown_0820CA98_2[] = INCBIN_U32("graphics/trade/shadow.4bpp");
+const u32 gUnknown_0820DD98[] = INCBIN_U32("graphics/trade/pokeball_symbol.8bpp");
+const u16 gUnknown_0820F798[] = INCBIN_U16("graphics/trade/shadow_map.bin");
+const u16 gUnknown_08210798[] = INCBIN_U16("graphics/trade/gba_map.bin");
+const u16 gUnknown_08211798[] = INCBIN_U16("graphics/trade/cable_closeup_map.bin");
+const u16 gUnknown_08211F98[] = INCBIN_U16("graphics/trade/pokeball_symbol_map.bin");
+const u16 unused_08212098[] = INCBIN_U16("graphics/unused/unknown/8212098.gbapal");
+const u16 gTradeCableEndPalette[] = INCBIN_U16("graphics/trade/cable_end.gbapal");
+const u16 unused_082120D8[] = INCBIN_U16("graphics/unused/unknown/82120D8.gbapal");
+const u16 nullpal_082120F8[16] = {};
+const u16 gTradeGlowPalette[] = INCBIN_U16("graphics/trade/glow.gbapal");
+const u32 gTradeGlow1Tiles[] = INCBIN_U32("graphics/trade/glow1.4bpp");
+const u32 gTradeGlow2Tiles[] = INCBIN_U32("graphics/trade/glow2.4bpp");
+const u32 gTradeCableEndTiles[] = INCBIN_U32("graphics/trade/cable_end.4bpp");
+const u32 gTradeGBAScreenTiles[] = INCBIN_U32("graphics/trade/gba_screen.4bpp");
+const u32 gUnknown_08213738[] = INCBIN_U32("graphics/trade/gba_affine.8bpp");
+const u16 gUnknown_08215778[] = INCBIN_U16("graphics/trade/gba_affine_map.bin");
+
+const struct OamData gOamData_8215878 = {
+ .affineMode = 1,
+ .size = 1
+};
+
+const union AnimCmd gSpriteAnim_8215880[] = {
+ ANIMCMD_FRAME( 0, 3),
+ ANIMCMD_FRAME( 4, 3),
+ ANIMCMD_FRAME( 8, 3),
+ ANIMCMD_FRAME(12, 3),
+ ANIMCMD_FRAME(16, 3),
+ ANIMCMD_FRAME(20, 3),
+ ANIMCMD_FRAME(24, 3),
+ ANIMCMD_FRAME(28, 3),
+ ANIMCMD_FRAME(32, 3),
+ ANIMCMD_FRAME(36, 3),
+ ANIMCMD_FRAME(40, 3),
+ ANIMCMD_FRAME(44, 3),
+ ANIMCMD_LOOP(1),
+ ANIMCMD_FRAME( 0, 3),
+ ANIMCMD_END
+};
+
+const union AnimCmd gSpriteAnim_82158BC[] = {
+ ANIMCMD_FRAME( 0, 3),
+ ANIMCMD_FRAME( 4, 3),
+ ANIMCMD_FRAME( 8, 3),
+ ANIMCMD_FRAME(12, 3),
+ ANIMCMD_FRAME(16, 3),
+ ANIMCMD_FRAME(20, 3),
+ ANIMCMD_FRAME(24, 3),
+ ANIMCMD_FRAME(28, 3),
+ ANIMCMD_FRAME(32, 3),
+ ANIMCMD_FRAME(36, 3),
+ ANIMCMD_FRAME(40, 3),
+ ANIMCMD_FRAME(44, 3),
+ ANIMCMD_LOOP(2),
+ ANIMCMD_FRAME( 0, 3),
+ ANIMCMD_END
+};
+
+const union AnimCmd *const gSpriteAnimTable_82158F8[] = {
+ gSpriteAnim_8215880,
+ gSpriteAnim_82158BC
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_8215900[] = {
+ AFFINEANIMCMD_FRAME(0, 0, 0, 1),
+ AFFINEANIMCMD_END
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_8215910[] = {
+ AFFINEANIMCMD_FRAME(-8, 0, 0, 20),
+ AFFINEANIMCMD_END
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_8215920[] = {
+ AFFINEANIMCMD_FRAME(0x60, 0x100, 0, 0),
+ AFFINEANIMCMD_FRAME( 0, 0, 0, 5),
+ AFFINEANIMCMD_FRAME( 8, 0, 0, 20),
+ AFFINEANIMCMD_END
+};
+
+const union AffineAnimCmd *const gSpriteAffineAnimTable_8215940[] = {
+ gSpriteAffineAnim_8215900,
+ gSpriteAffineAnim_8215910,
+ gSpriteAffineAnim_8215920
+};
+
+const struct SpriteSheet gUnknown_0821594C = {
+ (const u8 *)gTradeBallTiles, 0x600, 5557
+};
+
+const struct SpritePalette gUnknown_08215954 = {
+ gTradeBallPalette, 5558
+};
+
+const struct SpriteTemplate gSpriteTemplate_821595C = {
+ 5557,
+ 5558,
+ &gOamData_8215878,
+ gSpriteAnimTable_82158F8,
+ NULL,
+ gSpriteAffineAnimTable_8215940,
+ sub_804D6BC
+};
+
+const struct OamData gOamData_8215974 = {
+ .affineMode = 1,
+ .objMode = 1,
+ .size = 2,
+ .priority = 1
+};
+
+const union AnimCmd gSpriteAnim_821597C[] = {
+ ANIMCMD_FRAME(0, 5, .hFlip = TRUE, .vFlip = TRUE),
+ ANIMCMD_END
+};
+
+const union AnimCmd *const gSpriteAnimTable_8215984[] = {
+ gSpriteAnim_821597C
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_8215988[] = {
+ AFFINEANIMCMD_FRAME(-10, -10, 0, 5),
+ AFFINEANIMCMD_FRAME(10, 10, 0, 5),
+ AFFINEANIMCMD_JUMP(0)
+};
+
+const union AffineAnimCmd *const gSpriteAffineAnimTable_82159A0[] = {
+ gSpriteAffineAnim_8215988
+};
+
+const struct SpriteSheet gUnknown_082159A4 = {
+ (const u8 *)gTradeGlow1Tiles, 0x200, 5550
+};
+
+const struct SpritePalette gUnknown_082159AC = {
+ gTradeGlowPalette, 5551
+};
+
+const struct SpritePalette gUnknown_082159B4 = {
+ gTradeCableEndPalette, 5555
+};
+
+const struct SpriteTemplate gSpriteTemplate_82159BC = {
+ 5550,
+ 5551,
+ &gOamData_8215974,
+ gSpriteAnimTable_8215984,
+ NULL,
+ gSpriteAffineAnimTable_82159A0,
+ sub_804B058
+};
+
+const struct OamData gOamData_82159D4 = {
+ .shape = ST_OAM_V_RECTANGLE,
+ .size = 2,
+ .priority = 1
+};
+
+const union AnimCmd gSpriteAnim_82159DC[] = {
+ ANIMCMD_FRAME(0, 5, .vFlip = TRUE, .hFlip = TRUE),
+ ANIMCMD_END
+};
+
+const union AnimCmd gSpriteAnim_82159E4[] = {
+ ANIMCMD_FRAME(8, 5, .vFlip = TRUE, .hFlip = TRUE),
+ ANIMCMD_END
+};
+
+const union AnimCmd *const gSpriteAnimTable_82159EC[] = {
+ gSpriteAnim_82159DC,
+ gSpriteAnim_82159E4
+};
+
+const struct SpriteSheet gUnknown_082159F4 = {
+ (const u8 *)gTradeGlow2Tiles, 0x300, 5552
+};
+
+const struct SpriteTemplate gSpriteTemplate_82159FC = {
+ 5552,
+ 5551,
+ &gOamData_82159D4,
+ gSpriteAnimTable_82159EC,
+ NULL,
+ gDummySpriteAffineAnimTable,
+ sub_804B07C
+};
+
+const struct OamData gOamData_8215A14 = {
+ .shape = ST_OAM_V_RECTANGLE,
+ .size = 2,
+ .priority = 1
+};
+
+const union AnimCmd gSpriteAnim_8215A1C[] = {
+ ANIMCMD_FRAME(0, 10),
+ ANIMCMD_END
+};
+
+const union AnimCmd *const gSpriteAnimTable_8215A24[] = {
+ gSpriteAnim_8215A1C
+};
+
+const struct SpriteSheet gUnknown_08215A28 = {
+ (const u8 *)gTradeCableEndTiles, 0x100, 5554
+};
+
+const struct SpriteTemplate gSpriteTemplate_8215A30 = {
+ 5554,
+ 5555,
+ &gOamData_8215A14,
+ gSpriteAnimTable_8215A24,
+ NULL,
+ gDummySpriteAffineAnimTable,
+ sub_804B0BC
+};
+
+const struct OamData gOamData_8215A48 = {
+ .shape = ST_OAM_H_RECTANGLE,
+ .size = 3,
+ .priority = 1
+};
+
+const union AnimCmd gSpriteAnim_8215A50[] = {
+ ANIMCMD_FRAME( 0, 2, .vFlip = TRUE, .hFlip = TRUE),
+ ANIMCMD_FRAME(32, 2, .vFlip = TRUE, .hFlip = TRUE),
+ ANIMCMD_FRAME(64, 2, .vFlip = TRUE, .hFlip = TRUE),
+ ANIMCMD_FRAME(96, 2, .vFlip = TRUE, .hFlip = TRUE),
+ ANIMCMD_FRAME(64, 2, .vFlip = TRUE, .hFlip = TRUE),
+ ANIMCMD_FRAME(32, 2, .vFlip = TRUE, .hFlip = TRUE),
+ ANIMCMD_FRAME( 0, 2, .vFlip = TRUE, .hFlip = TRUE),
+ ANIMCMD_LOOP(8),
+ ANIMCMD_END
+};
+
+const union AnimCmd *const gSpriteAnimTable_8215A74[] = {
+ gSpriteAnim_8215A50
+};
+
+const struct SpriteSheet gUnknown_08215A78 = {
+ (const u8 *)gTradeGBAScreenTiles, 0x1000, 5556
+};
+
+const struct SpriteTemplate gSpriteTemplate_8215A80 = {
+ 5556,
+ 5555,
+ &gOamData_8215A48,
+ gSpriteAnimTable_8215A74,
+ NULL,
+ gDummySpriteAffineAnimTable,
+ sub_804B104
+};
+
+const u16 gTradeGlow2PaletteAnimTable[] = {
+ RGB(18, 24, 31),
+ RGB(18, 24, 31),
+ RGB(18, 24, 31),
+ RGB(31, 31, 31),
+ RGB(31, 31, 31),
+ RGB(31, 31, 31),
+ RGB(18, 24, 31),
+ RGB(18, 24, 31),
+ RGB(18, 24, 31),
+ RGB(31, 31, 31),
+ RGB(31, 31, 31),
+ RGB(31, 31, 31),
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_8215AB0[] = {
+ AFFINEANIMCMD_FRAME(-0x100, 0x100, 0, 0),
+ AFFINEANIMCMD_JUMP(0)
+};
+
+const union AffineAnimCmd *const gSpriteAffineAnimTable_8215AC0[] = {
+ gSpriteAffineAnim_8215AB0
+};
+
+const struct InGameTrade gIngameTrades[] = {
+#if ENGLISH
+ {
+ _("MAKIT"), SPECIES_MAKUHITA,
+ 5, 5, 4, 4, 4, 4,
+ TRUE, 49562,
+ 5, 5, 5, 5, 30,
+ 0x9C40,
+ ITEM_X_ATTACK, -1,
+ _("ELYSSA"), MALE, 10,
+ SPECIES_SLAKOTH
+ }, {
+ _("SKITIT"), SPECIES_SKITTY,
+ 5, 4, 4, 5, 4, 4,
+ FALSE, 2259,
+ 5, 5, 30, 5, 5,
+ 0x498A2E17,
+ ITEM_GLITTER_MAIL, 0,
+ _("DARRELL"), FEMALE, 10,
+ SPECIES_PIKACHU
+ }, {
+ _("COROSO"),
+ SPECIES_CORSOLA,
+ 4, 4, 5, 4, 4, 5,
+ TRUE, 50183,
+ 5, 30, 5, 5, 5,
+ 0x4C970B7F,
+ ITEM_TROPIC_MAIL, 1,
+ _("LANE"), FEMALE, 10,
+ SPECIES_BELLOSSOM
+ }
+#elif GERMAN
+ {
+ _("MAKIT"), SPECIES_MAKUHITA,
+ 5, 5, 4, 4, 4, 4,
+ TRUE, 49562,
+ 5, 5, 5, 5, 30,
+ 0x9C40,
+ ITEM_X_ATTACK, -1,
+ _("MAIK"), MALE, 10,
+ SPECIES_SLAKOTH
+ }, {
+ _("CONEC"), SPECIES_SKITTY,
+ 5, 4, 4, 5, 4, 4,
+ FALSE, 2259,
+ 5, 5, 30, 5, 5,
+ 0x498A2E17,
+ ITEM_GLITTER_MAIL, 0,
+ _("MADINA"), FEMALE, 10,
+ SPECIES_PIKACHU
+ }, {
+ _("CORASO"),
+ SPECIES_CORSOLA,
+ 4, 4, 5, 4, 4, 5,
+ TRUE, 50183,
+ 5, 30, 5, 5, 5,
+ 0x4C970B7F,
+ ITEM_TROPIC_MAIL, 1,
+ _("LIANA"), FEMALE, 10,
+ SPECIES_BELLOSSOM
+ }
+#endif
+};
+
+const u16 gIngameTradeMail[][10] = {
+#if ENGLISH
+ {
+ EC_POKEMON(PIKACHU),
+ EC_WORD_THANK_YOU,
+ EC_WORD_EXCL,
+ EC_WORD_MY,
+ EC_POKEMON(SKITTY),
+ EC_WORD_EATS,
+ EC_WORD_A_LOT,
+ EC_WORD_NOW,
+ EC_WORD_EXCL,
+ 0
+ }, {
+ EC_WORD_I,
+ EC_WORD_WANT,
+ EC_WORD_TO,
+ EC_WORD_SEE,
+ EC_WORD_A,
+ EC_MOVE2(PETAL_DANCE),
+ EC_WORD_IT_S,
+ EC_WORD_SO,
+ EC_WORD_PRETTY,
+ 0
+ }
+#elif GERMAN
+ {
+ EC_POKEMON(PIKACHU),
+ EC_WORD_THANK_YOU,
+ EC_WORD_EXCL,
+ EC_WORD_MY,
+ EC_POKEMON(SKITTY),
+ EC_WORD_EATS,
+ 0xFFFF,
+ EC_WORD_A_LOT,
+ EC_WORD_EXCL,
+ 0
+ }, {
+ EC_WORD_I,
+ EC_WORD_WANT,
+ EC_WORD_OF,
+ EC_MOVE2(PETAL_DANCE),
+ EC_WORD_WORKS,
+ EC_WORD_THE,
+ EC_WORD_IS,
+ EC_WORD_SO,
+ EC_WORD_PRETTY,
+ 0
+ }
+#endif
+};
+
+const s8 gTradeBallVerticalVelocityTable[] = {
+ 0, 0, 1, 0,
+ 1, 0, 1, 1,
+ 1, 1, 2, 2,
+ 2, 2, 3, 3,
+ 3, 3, 4, 4,
+ 4, 4, -4, -4,
+ -4, -3, -3, -3,
+ -3, -2, -2, -2,
+ -2, -1, -1, -1,
+ -1, 0, -1, 0,
+ -1, 0, 0, 0,
+ 0, 0, 1, 0,
+ 1, 0, 1, 1,
+ 1, 1, 2, 2,
+ 2, 2, 3, 3,
+ 3, 3, 4, 4,
+ 4, 4, -4, -3,
+ -3, -2, -2, -1,
+ -1, -1, 0, -1,
+ 0, 0, 0, 0,
+ 0, 0, 1, 0,
+ 1, 1, 1, 2,
+ 2, 3, 3, 4,
+ -4, -3, -2, -1,
+ -1, -1, 0, 0,
+ 0, 0, 1, 0,
+ 1, 1, 2, 3
+};
+
+// .text
+
+void sub_8047CD8(void)
+{
+ SetMainCallback2(sub_8047EC0);
+}
+
+static void sub_8047CE8(void)
+{
+ u8 mpId;
+ sub_804AFB8(&gWindowConfig_81E725C, gUnknown_020296CC[0], gSaveBlock2.playerName, 0xC);
+ mpId = GetMultiplayerId();
+ sub_804AFB8(&gWindowConfig_81E725C, gUnknown_020296CC[3], gLinkPlayers[mpId ^ 1].name, 0xC);
+ sub_804AFB8(&gWindowConfig_81E725C, gUnknown_020296CC[6], gUnknown_0820C14C[0], 0x8);
+ sub_804ACD8(gUnknown_0820C14C[1], gUnknown_020296CC[8], 0x14);
+ nullsub_5(3, 0);
+}
+
+static void sub_8047D58(void)
+{
+ struct SpriteTemplate spriteTemplate;
+ int i;
+ u8 mpId;
+ u16 slen;
+ int language;
+
+ slen = StringLength(gSaveBlock2.playerName);
+ language = slen <= 5 ? 0 : 1;
+ for (i = 0; i < 3; i ++)
+ {
+ spriteTemplate = gSpriteTemplate_820C0EC;
+ spriteTemplate.tileTag += i;
+ CreateSprite(&spriteTemplate, gTradeUnknownSpriteCoords[language][0][0] + 32 * i, gTradeUnknownSpriteCoords[language][0][1], 1);
+ }
+
+ mpId = GetMultiplayerId();
+ slen = StringLength(gLinkPlayers[mpId ^ 1].name);
+ language = slen <= 5 ? 0 : 1;
+ for (i = 0; i < 3; i ++)
+ {
+ spriteTemplate = gSpriteTemplate_820C0EC;
+ spriteTemplate.tileTag += i + 3;
+ CreateSprite(&spriteTemplate, gTradeUnknownSpriteCoords[language][1][0] + 32 * i, gTradeUnknownSpriteCoords[language][1][1], 1);
+ }
+ nullsub_5(5, 0);
+}
+
+static void sub_8047E44(void)
+{
+ struct SpriteTemplate spriteTemplate;
+ int i;
+
+ for (i = 0; i < 2; i ++)
+ {
+ spriteTemplate = gSpriteTemplate_820C0EC;
+ spriteTemplate.tileTag += i + 6;
+ CreateSprite(&spriteTemplate, 0xd6 + 32 * i, 0x98, 1);
+ }
+
+ for (i = 0; i < 5; i ++)
+ {
+ spriteTemplate = gSpriteTemplate_820C0EC;
+ spriteTemplate.tileTag += i + 8;
+ CreateSprite(&spriteTemplate, 0x18 + 32 * i, 0x96, 1);
+ }
+}
+
+static void sub_8047EC0(void)
+{
+ int i;
+
+ switch (gMain.state)
+ {
+ case 0:
+ gUnknown_03004824 = &ewram_2010000.unk_07000;
+ sub_804AA88();
+ ResetSpriteData();
+ FreeAllSpritePalettes();
+ ResetTasks();
+ sub_804A964(&gUnknown_03004824->unk_00c8, (void *)BG_SCREEN_ADDR(5));
+ SetVBlankCallback(sub_80489F4);
+ InitMenuWindow(&gWindowConfig_81E6CE4);
+ SetUpWindowConfig(&gWindowConfig_81E6F84);
+ InitWindowFromConfig(&gUnknown_03004824->window, &gWindowConfig_81E6F84);
+ gUnknown_03004824->unk_007a = SetTextWindowBaseTileNum(20);
+ LoadTextWindowGraphics(&gUnknown_03004824->window);
+ MenuZeroFillScreen();
+ sub_809D51C();
+ gUnknown_03004824->unk_0075 = 0;
+ gUnknown_03004824->unk_007b = 0;
+ gUnknown_03004824->unk_007c = 0;
+ gUnknown_03004824->unk_0080[0] = 0;
+ gUnknown_03004824->unk_0080[1] = 0;
+ gUnknown_03004824->unk_0086 = 0;
+ gUnknown_03004824->unk_0087 = 0;
+ gUnknown_03004824->unk_00b4 = 0;
+ gUnknown_03000508[0] = 0;
+ gMain.state ++;
+ sub_804AA0C(0);
+ CpuFill16(0, ewram_2010000.tileBuffers, sizeof(ewram_2010000.tileBuffers));
+ for (i = 0; i < 13; i ++)
+ gUnknown_020296CC[i] = ewram_2010000.tileBuffers[i];
+ break;
+ case 1:
+ gLinkType = 0x1122;
+ OpenLink();
+ for (i = 0; i < PARTY_SIZE; i ++)
+ CreateMon(&gEnemyParty[i], 0, 0, 0x20, FALSE, 0, FALSE, 0);
+ gMain.state ++;
+ gUnknown_03004824->unk_00b4 = 0;
+ CreateTask(sub_8083C50, 1);
+ break;
+ case 2:
+ gUnknown_03004824->unk_00b4 ++;
+ if (gUnknown_03004824->unk_00b4 > 11)
+ {
+ gUnknown_03004824->unk_00b4 = 0;
+ gMain.state ++;
+ }
+ break;
+ case 3:
+ if (GetLinkPlayerCount_2() >= sub_800820C())
+ {
+ if (IsLinkMaster())
+ {
+ if (++gUnknown_03004824->unk_00b4 > 30)
+ {
+ sub_8007F4C();
+ gMain.state ++;
+ }
+ }
+ else
+ gMain.state ++;
+ }
+ break;
+ case 4:
+ if (gReceivedRemoteLinkPlayers == 1 && IsLinkPlayerDataExchangeComplete() == TRUE)
+ {
+ CalculatePlayerPartyCount();
+ gMain.state ++;
+ }
+ break;
+ case 5:
+ if (sub_8048D44())
+ {
+ sub_804AF84();
+ gMain.state ++;
+ }
+ break;
+ case 6:
+ CalculateEnemyPartyCount();
+ FillWindowRect_DefaultPalette(&gUnknown_03004824->window, 0, 0, 0, 29, 19);
+ REG_DISPCNT = 0;
+ gUnknown_03004824->partyCounts[0] = gPlayerPartyCount;
+ gUnknown_03004824->partyCounts[1] = gEnemyPartyCount;
+ for (i = 0; i < gUnknown_03004824->partyCounts[0]; i ++)
+ gUnknown_03004824->partyIcons[0][i] = CreateMonIcon(GetMonData(&gPlayerParty[i], MON_DATA_SPECIES2), sub_809D62C, gTradeMonSpriteCoords[i][0] * 8 + 14, gTradeMonSpriteCoords[i][1] * 8 - 12, TRUE, GetMonData(&gPlayerParty[i], MON_DATA_PERSONALITY));
+ for (i = 0; i < gUnknown_03004824->partyCounts[1]; i ++)
+ gUnknown_03004824->partyIcons[1][i] = CreateMonIcon(GetMonData(&gEnemyParty[i], MON_DATA_SPECIES2, NULL), sub_809D62C, gTradeMonSpriteCoords[6 + i][0] * 8 + 14, gTradeMonSpriteCoords[6 + i][1] * 8 - 12, TRUE, GetMonData(&gEnemyParty[i], MON_DATA_PERSONALITY));
+ nullsub_5(2, 0);
+ gMain.state ++;
+ break;
+ case 7:
+ LoadHeldItemIconGraphics();
+ CreateHeldItemIcons(&gUnknown_03004824->partyCounts[0], gUnknown_03004824->partyIcons[0], 0);
+ gMain.state ++;
+ break;
+ case 8:
+ CreateHeldItemIcons(&gUnknown_03004824->partyCounts[0], gUnknown_03004824->partyIcons[0], 1);
+ gMain.state ++;
+ break;
+ case 9:
+ sub_8047CE8();
+ gMain.state ++;
+ gUnknown_03004824->unk_00b4 = 0;
+ break;
+ case 10:
+ nullsub_5(4, 0);
+ if (sub_804ABF8())
+ gMain.state ++;
+ break;
+ case 11:
+ sub_8047D58();
+ gMain.state ++;
+ break;
+ case 12:
+ sub_8047E44();
+ gUnknown_03004824->tradeMenuCursorSpriteIdx = CreateSprite(&gSpriteTemplate_820C134, gTradeMonSpriteCoords[0][0] * 8 + 32, gTradeMonSpriteCoords[0][1] * 8, 2);
+ gUnknown_03004824->tradeMenuCursorPosition = 0;
+ gMain.state ++;
+ nullsub_5(6, 0);
+ break;
+ case 13:
+ sub_804ACF4(0);
+ sub_804A41C(0);
+ gUnknown_03004824->unk_0000 = 0;
+ gUnknown_03004824->unk_0001 = 0;
+ sub_8048C70();
+ gMain.state ++;
+ nullsub_5(7, 0);
+ PlayBGM(BGM_P_SCHOOL);
+ break;
+ case 14:
+ sub_804ACF4(1);
+ sub_804A41C(1);
+ gMain.state ++;
+ // fallthrough
+ case 15:
+ sub_8048B0C(0);
+ gMain.state ++;
+ break;
+ case 16:
+ sub_8048B0C(1);
+ gMain.state ++;
+ break;
+ case 17:
+ BeginNormalPaletteFade(-1, 0, 16, 0, 0);
+ gMain.state ++;
+ break;
+ case 18:
+ REG_DISPCNT = DISPCNT_OBJ_1D_MAP | DISPCNT_BG_ALL_ON | DISPCNT_OBJ_ON;
+ gMain.state ++;
+ break;
+ case 19:
+ sub_804AE3C(0);
+ gMain.state ++;
+ break;
+ case 20:
+ sub_804AE3C(1);
+ sub_804AF10();
+ gMain.state ++;
+ break;
+ case 21:
+ if (!gPaletteFade.active)
+ {
+ gMain.callback1 = sub_80494D8;
+ SetMainCallback2(sub_8048AB4);
+ gUnknown_03000508[0] = 0;
+ }
+ break;
+ }
+ RunTasks();
+ AnimateSprites();
+ BuildOamBuffer();
+ UpdatePaletteFade();
+}
+
+static void sub_80484F4(void)
+{
+ int i;
+ struct UnkStructF *unkStructF;
+
+ switch (gMain.state)
+ {
+ case 0:
+ gUnknown_03004824 = &ewram_2010000.unk_07000;
+ ResetSpriteData();
+ FreeAllSpritePalettes();
+ ResetTasks();
+ sub_804A964(&gUnknown_03004824->unk_00c8, (void *)BG_SCREEN_ADDR(5));
+ SetVBlankCallback(sub_80489F4);
+ InitMenuWindow(&gWindowConfig_81E6CE4);
+ SetUpWindowConfig(&gWindowConfig_81E6F84);
+ InitWindowFromConfig(&gUnknown_03004824->window, &gWindowConfig_81E6F84);
+ gUnknown_03004824->unk_007a = SetTextWindowBaseTileNum(20);
+ LoadTextWindowGraphics(&gUnknown_03004824->window);
+ MenuZeroFillScreen();
+ sub_809D51C();
+ gUnknown_03004824->unk_0075 = 0;
+ gUnknown_03004824->unk_007b = 0;
+ gUnknown_03004824->unk_007c = 0;
+ gUnknown_03004824->unk_0080[0] = 0;
+ gUnknown_03004824->unk_0080[1] = 0;
+ gUnknown_03004824->unk_0086 = 0;
+ gUnknown_03004824->unk_0087 = 0;
+ gUnknown_03004824->unk_00b4 = 0;
+ gUnknown_03000508[0] = 0;
+ gMain.state ++;
+ for (i = 0; i < 13; i ++)
+ gUnknown_020296CC[i] = ewram_2010000.tileBuffers[i];
+ break;
+ case 1:
+ gMain.state ++;
+ gUnknown_03004824->unk_00b4 = 0;
+ break;
+ case 2:
+ gMain.state ++;
+ break;
+ case 3:
+ gMain.state ++;
+ break;
+ case 4:
+ CalculatePlayerPartyCount();
+ gMain.state ++;
+ break;
+ case 5:
+ gMain.state ++;
+ break;
+ case 6:
+ CalculateEnemyPartyCount();
+ REG_DISPCNT = 0;
+ gUnknown_03004824->partyCounts[0] = gPlayerPartyCount;
+ gUnknown_03004824->partyCounts[1] = gEnemyPartyCount;
+ sub_804A41C(0);
+ sub_804A41C(1);
+ for (i = 0; i < gUnknown_03004824->partyCounts[0]; i ++)
+ gUnknown_03004824->partyIcons[0][i] = CreateMonIcon(GetMonData(&gPlayerParty[i], MON_DATA_SPECIES2, NULL), sub_809D62C, gTradeMonSpriteCoords[i][0] * 8 + 14, gTradeMonSpriteCoords[i][1] * 8 - 12, TRUE, GetMonData(&gPlayerParty[i], MON_DATA_PERSONALITY));
+ for (i = 0; i < gUnknown_03004824->partyCounts[1]; i ++)
+ gUnknown_03004824->partyIcons[1][i] = CreateMonIcon(GetMonData(&gEnemyParty[i], MON_DATA_SPECIES2, NULL), sub_809D62C, gTradeMonSpriteCoords[6 + i][0] * 8 + 14, gTradeMonSpriteCoords[6 + i][1] * 8 - 12, TRUE, GetMonData(&gEnemyParty[i], MON_DATA_PERSONALITY));
+ nullsub_5(2, 0);
+ gMain.state ++;
+ break;
+ case 7:
+ LoadHeldItemIconGraphics();
+ CreateHeldItemIcons(&gUnknown_03004824->partyCounts[0], gUnknown_03004824->partyIcons[0], 0);
+ gMain.state ++;
+ break;
+ case 8:
+ CreateHeldItemIcons(&gUnknown_03004824->partyCounts[0], gUnknown_03004824->partyIcons[0], 1);
+ gMain.state ++;
+ break;
+ case 9:
+ sub_8047CE8();
+ gMain.state ++;
+ gUnknown_03004824->unk_00b4 = 0;
+ break;
+ case 10:
+ nullsub_5(4, 0);
+ if (sub_804ABF8())
+ {
+ gMain.state ++;
+ }
+ break;
+ case 11:
+ sub_8047D58();
+ gMain.state ++;
+ break;
+ case 12:
+ sub_8047E44();
+ unkStructF = &ewram_2010000.unk_08000;
+ if (gUnknown_03004824->tradeMenuCursorPosition < 6)
+ gUnknown_03004824->tradeMenuCursorPosition = unkStructF->unk_0009;
+ else
+ gUnknown_03004824->tradeMenuCursorPosition = unkStructF->unk_0009 + 6;
+ gUnknown_03004824->tradeMenuCursorSpriteIdx = CreateSprite(&gSpriteTemplate_820C134, gTradeMonSpriteCoords[gUnknown_03004824->tradeMenuCursorPosition][0] * 8 + 32, gTradeMonSpriteCoords[gUnknown_03004824->tradeMenuCursorPosition][1] * 8, 2);
+ gMain.state = 15;
+ nullsub_5(6, 0);
+ break;
+ case 15:
+ sub_8048B0C(0);
+ gMain.state ++;
+ break;
+ case 16:
+ sub_8048B0C(1);
+ gUnknown_03004824->unk_0000 = 0;
+ gUnknown_03004824->unk_0001 = 0;
+ sub_8048C70();
+ nullsub_5(7, 0);
+ gMain.state ++;
+ break;
+ case 17:
+ BeginNormalPaletteFade(-1, 0, 16, 0, 0);
+ gMain.state ++;
+ break;
+ case 18:
+ REG_DISPCNT = DISPCNT_OBJ_1D_MAP | DISPCNT_BG_ALL_ON | DISPCNT_OBJ_ON;
+ gMain.state ++;
+ break;
+ case 19:
+ gMain.state ++;
+ break;
+ case 20:
+ sub_804AF10();
+ gMain.state ++;
+ break;
+ case 21:
+ if (!gPaletteFade.active)
+ {
+ SetMainCallback2(sub_8048AB4);
+ gUnknown_03000508[0] = 0;
+ }
+ break;
+ }
+ RunTasks();
+ AnimateSprites();
+ BuildOamBuffer();
+ UpdatePaletteFade();
+}
+
+static void sub_80489F4(void)
+{
+ sub_804A940(&gUnknown_03004824->unk_00c8);
+ LoadOam();
+ ProcessSpriteCopyRequests();
+ TransferPlttBuffer();
+}
+
+/*static*/ void sub_8048A14(void)
+{
+ if (++gUnknown_03004824->unk_00b4 >= 16)
+ {
+ BeginNormalPaletteFade(-1, 0, 0, 16, 0);
+ gUnknown_03004824->unk_007b = 10;
+ }
+}
+
+/*static*/ void sub_8048A50(void)
+{
+ if (!gPaletteFade.active)
+ {
+ gUnknown_020297D8[0] = gUnknown_03004824->tradeMenuCursorPosition;
+ gUnknown_020297D8[1] = gUnknown_03004824->unk_008a;
+ sub_800832C();
+ gUnknown_03004824->unk_007b = 13;
+ }
+}
+
+/*static*/ void sub_8048A90(void)
+{
+ if (!gReceivedRemoteLinkPlayers)
+ {
+ gMain.callback1 = NULL;
+ SetMainCallback2(sub_804B41C);
+ }
+}
+
+static void sub_8048AB4(void)
+{
+ sub_8049DE0();
+ sub_804AB30();
+ sub_8049ED4(0);
+ sub_8049ED4(1);
+ REG_BG2HOFS = gUnknown_03004824->unk_0000++;
+ REG_BG3HOFS = gUnknown_03004824->unk_0001--;
+ RunTasks();
+ AnimateSprites();
+ BuildOamBuffer();
+ UpdatePaletteFade();
+}
+
+#ifdef NONMATCHING
+// Only minor register permutations
+#pragma push_macro("BLOCKSIZE")
+#define BLOCKSIZE 0x800
+static void sub_8048B0C(u8 a0)
+{
+ int i;
+ u16 *dest;
+ const u16 *src;
+ u32 size;
+ switch (a0)
+ {
+ case 0:
+ for (i = 0; i < 48; i ++)
+ {
+ gPlttBufferUnfaded[i] = *(gUnknown_08EA02C8 + i);
+ gPlttBufferFaded[i] = *(gUnknown_08EA02C8 + i);
+ }
+ src = gUnknown_08EA0348;
+ dest = (u16 *)BG_VRAM;
+ size = 0x1280;
+ while (1)
+ {
+ DmaCopy16(3, src, dest, BLOCKSIZE * sizeof(u16));
+ src += BLOCKSIZE;
+ dest += BLOCKSIZE;
+ size -= BLOCKSIZE * sizeof(u16);
+ if (size <= BLOCKSIZE * sizeof(u16))
+ {
+ DmaCopy16(3, src, dest, size);
+ break;
+ }
+ }
+ for (i = 0; i < 0x400; i ++)
+ gUnknown_03004824->unk_00c8.unk_12[i] = gUnknown_08EA15C8[i];
+ dest = (u16 *)BG_SCREEN_ADDR(6);
+ DmaCopy16(3, gTradeStripesBG2Tilemap, dest, 0x800);
+ break;
+ case 1:
+ src = gTradeStripesBG3Tilemap;
+ dest = (u16 *)BG_SCREEN_ADDR(7);
+ DmaCopy16(3, src, dest, 0x800);
+ sub_804A6DC(0);
+ sub_804A6DC(1);
+ sub_804A938(&gUnknown_03004824->unk_00c8);
+ REG_BG0CNT &= ~0x03; // BGCNT_PRIORITY(0)
+ REG_BG1CNT = BGCNT_PRIORITY(1) | BGCNT_SCREENBASE(5);
+ REG_BG2CNT = BGCNT_PRIORITY(2) | BGCNT_SCREENBASE(6);
+ REG_BG3CNT = BGCNT_PRIORITY(3) | BGCNT_SCREENBASE(7);
+ REG_BG0HOFS = 0;
+ REG_BG1HOFS = 0;
+ REG_BG2HOFS = 0;
+ REG_BG3HOFS = 0;
+ REG_BG0VOFS = 0;
+ REG_BG1VOFS = 0;
+ REG_BG2VOFS = 0;
+ REG_BG3VOFS = 0;
+ break;
+ }
+}
+#pragma pop_macro("BLOCKSIZE")
+#else
+asm(".include \"constants/gba_constants.inc\"");
+__attribute__((naked))
+static void sub_8048B0C(u8 a0)
+{
+ asm_unified("\tpush {r4-r7,lr}\n"
+ "\tlsls r0, 24\n"
+ "\tlsrs r0, 24\n"
+ "\tcmp r0, 0\n"
+ "\tbeq _08048B1C\n"
+ "\tcmp r0, 0x1\n"
+ "\tbeq _08048BD0\n"
+ "\tb _08048C3A\n"
+ "_08048B1C:\n"
+ "\tldr r5, _08048BA0 @ =gUnknown_08EA0348\n"
+ "\tldr r0, _08048BA4 @ =gTradeStripesBG2Tilemap\n"
+ "\tmov r12, r0\n"
+ "\tldr r1, _08048BA8 @ =gUnknown_08EA02C8\n"
+ "\tldr r4, _08048BAC @ =gPlttBufferFaded\n"
+ "\tldr r3, _08048BB0 @ =gPlttBufferUnfaded\n"
+ "\tmovs r2, 0x2F\n"
+ "_08048B2A:\n"
+ "\tldrh r0, [r1]\n"
+ "\tstrh r0, [r3]\n"
+ "\tldrh r0, [r1]\n"
+ "\tstrh r0, [r4]\n"
+ "\tadds r1, 0x2\n"
+ "\tadds r4, 0x2\n"
+ "\tadds r3, 0x2\n"
+ "\tsubs r2, 0x1\n"
+ "\tcmp r2, 0\n"
+ "\tbge _08048B2A\n"
+ "\tadds r3, r5, 0\n"
+ "\tmovs r4, 0xC0\n"
+ "\tlsls r4, 19\n"
+ "\tmovs r5, 0x94\n"
+ "\tlsls r5, 5\n"
+ "\tldr r1, _08048BB4 @ =0x040000d4\n"
+ "\tldr r6, _08048BB8 @ =0x80000800\n"
+ "\tmovs r2, 0x80\n"
+ "\tlsls r2, 5\n"
+ "\tmovs r7, 0x80\n"
+ "\tlsls r7, 24\n"
+ "_08048B54:\n"
+ "\tstr r3, [r1]\n"
+ "\tstr r4, [r1, 0x4]\n"
+ "\tstr r6, [r1, 0x8]\n"
+ "\tldr r0, [r1, 0x8]\n"
+ "\tadds r3, r2\n"
+ "\tadds r4, r2\n"
+ "\tsubs r5, r2\n"
+ "\tcmp r5, r2\n"
+ "\tbhi _08048B54\n"
+ "\tstr r3, [r1]\n"
+ "\tstr r4, [r1, 0x4]\n"
+ "\tlsrs r0, r5, 1\n"
+ "\torrs r0, r7\n"
+ "\tstr r0, [r1, 0x8]\n"
+ "\tldr r0, [r1, 0x8]\n"
+ "\tmovs r2, 0\n"
+ "\tldr r5, _08048BBC @ =0x000003ff\n"
+ "\tldr r4, _08048BC0 @ =gUnknown_03004824\n"
+ "\tldr r3, _08048BC4 @ =gUnknown_08EA15C8\n"
+ "_08048B7A:\n"
+ "\tldr r0, [r4]\n"
+ "\tlsls r1, r2, 1\n"
+ "\tadds r0, 0xDA\n"
+ "\tadds r0, r1\n"
+ "\tldrh r1, [r3]\n"
+ "\tstrh r1, [r0]\n"
+ "\tadds r3, 0x2\n"
+ "\tadds r2, 0x1\n"
+ "\tcmp r2, r5\n"
+ "\tble _08048B7A\n"
+ "\tldr r1, _08048BC8 @ =0x06003000\n"
+ "\tldr r0, _08048BB4 @ =0x040000d4\n"
+ "\tmov r2, r12\n"
+ "\tstr r2, [r0]\n"
+ "\tstr r1, [r0, 0x4]\n"
+ "\tldr r1, _08048BCC @ =0x80000400\n"
+ "\tstr r1, [r0, 0x8]\n"
+ "\tldr r0, [r0, 0x8]\n"
+ "\tb _08048C3A\n"
+ "\t.align 2, 0\n"
+ "_08048BA0: .4byte gUnknown_08EA0348\n"
+ "_08048BA4: .4byte gTradeStripesBG2Tilemap\n"
+ "_08048BA8: .4byte gUnknown_08EA02C8\n"
+ "_08048BAC: .4byte gPlttBufferFaded\n"
+ "_08048BB0: .4byte gPlttBufferUnfaded\n"
+ "_08048BB4: .4byte 0x040000d4\n"
+ "_08048BB8: .4byte 0x80000800\n"
+ "_08048BBC: .4byte 0x000003ff\n"
+ "_08048BC0: .4byte gUnknown_03004824\n"
+ "_08048BC4: .4byte gUnknown_08EA15C8\n"
+ "_08048BC8: .4byte 0x06003000\n"
+ "_08048BCC: .4byte 0x80000400\n"
+ "_08048BD0:\n"
+ "\tldr r1, _08048C40 @ =gTradeStripesBG3Tilemap\n"
+ "\tldr r2, _08048C44 @ =0x06003800\n"
+ "\tldr r0, _08048C48 @ =0x040000d4\n"
+ "\tstr r1, [r0]\n"
+ "\tstr r2, [r0, 0x4]\n"
+ "\tldr r1, _08048C4C @ =0x80000400\n"
+ "\tstr r1, [r0, 0x8]\n"
+ "\tldr r0, [r0, 0x8]\n"
+ "\tmovs r0, 0\n"
+ "\tbl sub_804A6DC\n"
+ "\tmovs r0, 0x1\n"
+ "\tbl sub_804A6DC\n"
+ "\tldr r0, _08048C50 @ =gUnknown_03004824\n"
+ "\tldr r0, [r0]\n"
+ "\tadds r0, 0xC8\n"
+ "\tbl sub_804A938\n"
+ "\tldr r2, _08048C54 @ =REG_BG0CNT\n"
+ "\tldrh r1, [r2]\n"
+ "\tldr r0, _08048C58 @ =0x0000fffc\n"
+ "\tands r0, r1\n"
+ "\tstrh r0, [r2]\n"
+ "\tldr r1, _08048C5C @ =REG_BG1CNT\n"
+ "\tldr r2, _08048C60 @ =0x00000501\n"
+ "\tadds r0, r2, 0\n"
+ "\tstrh r0, [r1]\n"
+ "\tadds r1, 0x2\n"
+ "\tldr r2, _08048C64 @ =0x00000602\n"
+ "\tadds r0, r2, 0\n"
+ "\tstrh r0, [r1]\n"
+ "\tadds r1, 0x2\n"
+ "\tldr r2, _08048C68 @ =0x00000703\n"
+ "\tadds r0, r2, 0\n"
+ "\tstrh r0, [r1]\n"
+ "\tldr r0, _08048C6C @ =REG_BG0HOFS\n"
+ "\tmovs r1, 0\n"
+ "\tstrh r1, [r0]\n"
+ "\tadds r0, 0x4\n"
+ "\tstrh r1, [r0]\n"
+ "\tadds r0, 0x4\n"
+ "\tstrh r1, [r0]\n"
+ "\tadds r0, 0x4\n"
+ "\tstrh r1, [r0]\n"
+ "\tsubs r0, 0xA\n"
+ "\tstrh r1, [r0]\n"
+ "\tadds r0, 0x4\n"
+ "\tstrh r1, [r0]\n"
+ "\tadds r0, 0x4\n"
+ "\tstrh r1, [r0]\n"
+ "\tadds r0, 0x4\n"
+ "\tstrh r1, [r0]\n"
+ "_08048C3A:\n"
+ "\tpop {r4-r7}\n"
+ "\tpop {r0}\n"
+ "\tbx r0\n"
+ "\t.align 2, 0\n"
+ "_08048C40: .4byte gTradeStripesBG3Tilemap\n"
+ "_08048C44: .4byte 0x06003800\n"
+ "_08048C48: .4byte 0x040000d4\n"
+ "_08048C4C: .4byte 0x80000400\n"
+ "_08048C50: .4byte gUnknown_03004824\n"
+ "_08048C54: .4byte REG_BG0CNT\n"
+ "_08048C58: .4byte 0x0000fffc\n"
+ "_08048C5C: .4byte REG_BG1CNT\n"
+ "_08048C60: .4byte 0x00000501\n"
+ "_08048C64: .4byte 0x00000602\n"
+ "_08048C68: .4byte 0x00000703\n"
+ "_08048C6C: .4byte REG_BG0HOFS");
+}
+#endif
+
+static void sub_8048C70(void)
+{
+ int i;
+ for (i = 0; i < PARTY_SIZE; i ++)
+ {
+ if (i < gUnknown_03004824->partyCounts[0])
+ {
+ gSprites[gUnknown_03004824->partyIcons[0][i]].invisible = FALSE;
+ gUnknown_03004824->tradeMenuOptionsActive[i] = TRUE;
+ }
+ else
+ {
+ gUnknown_03004824->tradeMenuOptionsActive[i] = FALSE;
+ }
+ if (i < gUnknown_03004824->partyCounts[1])
+ {
+ gSprites[gUnknown_03004824->partyIcons[1][i]].invisible = FALSE;
+ gUnknown_03004824->tradeMenuOptionsActive[i + 6] = TRUE;
+ }
+ else
+ {
+ gUnknown_03004824->tradeMenuOptionsActive[i + 6] = FALSE;
+ }
+ }
+ gUnknown_03004824->tradeMenuOptionsActive[12] = TRUE;
+}
+
+static void nullsub_5(u8 a0, u8 a1) {}
+
+static void sub_8048D24(u8 *dest, const u8 *src, u32 size)
+{
+ int i;
+ for (i = 0; i < size; i ++) dest[i] = src[i];
+}
+
+static bool8 sub_8048D44(void)
+{
+ u8 mpId = GetMultiplayerId();
+ int i;
+ u16 species;
+ u8 nickname[11];
+ struct Pokemon *pokemon;
+
+ SetLinkDebugValues(gUnknown_03004824->unk_0075 / 100, gUnknown_03004824->unk_0075 % 100);
+ switch (gUnknown_03004824->unk_0075)
+ {
+ case 0:
+ sub_8048D24(gBlockSendBuffer, (const u8 *)&gPlayerParty[0], 2 * sizeof(struct Pokemon));
+ gUnknown_03004824->unk_0075 ++;
+ break;
+ case 1:
+ if (sub_8007ECC())
+ {
+ if (GetBlockReceivedStatus() == 0)
+ {
+ gUnknown_03004824->unk_0075 ++;
+ }
+ else
+ {
+ ResetBlockReceivedFlags();
+ gUnknown_03004824->unk_0075 ++;
+ }
+ }
+ break;
+ case 2:
+ if (mpId == 0)
+ {
+ sub_8007E9C(1);
+ }
+ gUnknown_03004824->unk_0075 ++;
+ break;
+ case 3:
+ if (GetBlockReceivedStatus() == 3)
+ {
+ sub_8048D24((u8 *)&gEnemyParty[0], (const u8 *)gBlockRecvBuffer[mpId ^ 1], 2 * sizeof(struct Pokemon));
+ ResetBlockReceivedFlags();
+ gUnknown_03004824->unk_0075 ++;
+ }
+ break;
+ case 4:
+ sub_8048D24(gBlockSendBuffer, (const u8 *)&gPlayerParty[2], 2 * sizeof(struct Pokemon));
+ gUnknown_03004824->unk_0075 ++;
+ break;
+ case 5:
+ if (mpId == 0)
+ {
+ sub_8007E9C(1);
+ }
+ gUnknown_03004824->unk_0075 ++;
+ break;
+ case 6:
+ if (GetBlockReceivedStatus() == 3)
+ {
+ sub_8048D24((u8 *)&gEnemyParty[2], (const u8 *)gBlockRecvBuffer[mpId ^ 1], 2 * sizeof(struct Pokemon));
+ ResetBlockReceivedFlags();
+ gUnknown_03004824->unk_0075 ++;
+ }
+ break;
+ case 7:
+ sub_8048D24(gBlockSendBuffer, (const u8 *)&gPlayerParty[4], 2 * sizeof(struct Pokemon));
+ gUnknown_03004824->unk_0075 ++;
+ break;
+ case 8:
+ if (mpId == 0)
+ {
+ sub_8007E9C(1);
+ }
+ gUnknown_03004824->unk_0075 ++;
+ break;
+ case 9:
+ if (GetBlockReceivedStatus() == 3)
+ {
+ sub_8048D24((u8 *)&gEnemyParty[4], (const u8 *)gBlockRecvBuffer[mpId ^ 1], 2 * sizeof(struct Pokemon));
+ ResetBlockReceivedFlags();
+ gUnknown_03004824->unk_0075 ++;
+ }
+ break;
+ case 10:
+ sub_8048D24(gBlockSendBuffer, (const u8 *)&gSaveBlock1.mail[0], 6 * sizeof(struct MailStruct) + 4);
+ gUnknown_03004824->unk_0075 ++;
+ break;
+ case 11:
+ if (mpId == 0)
+ {
+ sub_8007E9C(3);
+ }
+ gUnknown_03004824->unk_0075 ++;
+ break;
+ case 12:
+ if (GetBlockReceivedStatus() == 3)
+ {
+ sub_8048D24((u8 *)&gUnknown_02029700[0], (const u8 *)gBlockRecvBuffer[mpId ^ 1], 6 * sizeof(struct MailStruct));
+ ResetBlockReceivedFlags();
+ gUnknown_03004824->unk_0075 ++;
+ }
+ break;
+ case 13:
+ sub_8048D24(gBlockSendBuffer, (const u8 *)gSaveBlock1.giftRibbons, 11);
+ gUnknown_03004824->unk_0075 ++;
+ break;
+ case 14:
+ if (mpId == 0)
+ {
+ sub_8007E9C(4);
+ }
+ gUnknown_03004824->unk_0075 ++;
+ break;
+ case 15:
+ if (GetBlockReceivedStatus() == 3)
+ {
+ sub_8048D24((u8 *)gUnknown_03004824->unk_00b5, (const u8 *)gBlockRecvBuffer[mpId ^ 1], 11);
+ ResetBlockReceivedFlags();
+ gUnknown_03004824->unk_0075 ++;
+ }
+ break;
+ case 16:
+ pokemon = gEnemyParty;
+ for (i = 0; i < PARTY_SIZE; i ++)
+ {
+ if ((species = GetMonData(pokemon, MON_DATA_SPECIES)) != SPECIES_NONE && species == SPECIES_SHEDINJA && GetMonData(pokemon, MON_DATA_LANGUAGE) != LANGUAGE_JAPANESE)
+ {
+ GetMonData(pokemon, MON_DATA_NICKNAME, nickname);
+ if (!StringCompareWithoutExtCtrlCodes(nickname, gUnknown_0820C3B0))
+ SetMonData(pokemon, MON_DATA_NICKNAME, gSpeciesNames[SPECIES_SHEDINJA]);
+ }
+ pokemon ++;
+ }
+ return TRUE;
+ }
+ return FALSE;
+}
+
+static void sub_8049088(void)
+{
+ u8 string[28];
+ StringCopy(string, gTradeText_TradeOkayPrompt);
+ sub_804ACD8(string, (u8 *)BG_CHAR_ADDR(4) + gUnknown_03004824->unk_007e * 32, 20);
+}
+
+static void sub_80490BC(u8 mpId, u8 a1)
+{
+ if (a1 & 1)
+ {
+ switch (gBlockRecvBuffer[mpId][0])
+ {
+ case 0xeeaa:
+ gUnknown_03004824->unk_0084 = 2;
+ break;
+ case 0xaabb:
+ gUnknown_03004824->unk_0084 = 1;
+ break;
+ case 0xbbbb:
+ gUnknown_03004824->unk_0086 = 1;
+ break;
+ case 0xbbcc:
+ gUnknown_03004824->unk_0086 = 2;
+ break;
+ }
+ ResetBlockReceivedFlag(0);
+ }
+ if (a1 & 2)
+ {
+ switch (gBlockRecvBuffer[1][0])
+ {
+ case 0xeeaa:
+ gUnknown_03004824->unk_0085 = 2;
+ break;
+ case 0xaabb:
+ gUnknown_03004824->unk_008a = gBlockRecvBuffer[1][1] + 6;
+ gUnknown_03004824->unk_0085 = 1;
+ break;
+ case 0xbbbb:
+ gUnknown_03004824->unk_0087 = 1;
+ break;
+ case 0xbbcc:
+ gUnknown_03004824->unk_0087 = 2;
+ break;
+ }
+ ResetBlockReceivedFlag(1);
+ }
+}
+
+static void sub_80491E4(u8 mpId, u8 status)
+{
+ if (status & 1)
+ {
+ switch (gBlockRecvBuffer[0][0])
+ {
+ case 0xeebb:
+ BeginNormalPaletteFade(-1, 0, 0, 16, 0);
+ sub_804AA0C(4);
+ gUnknown_03004824->unk_007b = 11;
+ break;
+ case 0xeecc:
+ sub_804AA0C(5);
+ gUnknown_03004824->unk_007b = 8;
+ break;
+ case 0xdddd:
+ gUnknown_03004824->unk_008a = ((u8 *)gBlockRecvBuffer[0])[1 * sizeof(u16)] + 6;
+ sub_8049E9C(gUnknown_03004824->tradeMenuCursorPosition);
+ sub_8049E9C(gUnknown_03004824->unk_008a);
+ gUnknown_03004824->unk_007b = 7;
+ break;
+ case 0xccdd:
+ BeginNormalPaletteFade(-1, 0, 0, 16, 0);
+ gUnknown_03004824->unk_007b = 10;
+ break;
+ case 0xddee:
+ sub_804AA0C(1);
+ gUnknown_03004824->unk_007b = 8;
+ break;
+ }
+ ResetBlockReceivedFlag(0);
+ }
+ if (status & 2)
+ {
+ ResetBlockReceivedFlag(1);
+ }
+}
+
+static void sub_80492D8(void)
+{
+ if (gUnknown_03004824->unk_0084 && gUnknown_03004824->unk_0085)
+ {
+ if (gUnknown_03004824->unk_0084 == 1 && gUnknown_03004824->unk_0085 == 1)
+ {
+ gUnknown_03004824->unk_007b = 6;
+ gUnknown_03004824->linkData[0] = 0xdddd;
+ gUnknown_03004824->linkData[1] = gUnknown_03004824->tradeMenuCursorPosition;
+ sub_804AADC(5, 0);
+ gUnknown_03004824->unk_0084 = gUnknown_03004824->unk_0085 = 0;
+ }
+ else if (gUnknown_03004824->unk_0084 == 1 && gUnknown_03004824->unk_0085 == 2)
+ {
+ sub_804AA0C(1);
+ gUnknown_03004824->linkData[0] = 0xeecc;
+ gUnknown_03004824->linkData[1] = 0;
+ sub_804AADC(5, 0);
+ gUnknown_03004824->unk_0086 = gUnknown_03004824->unk_0087 = 0;
+ gUnknown_03004824->unk_0084 = gUnknown_03004824->unk_0085 = 0;
+ gUnknown_03004824->unk_007b = 8;
+ }
+ else if (gUnknown_03004824->unk_0084 == 2 && gUnknown_03004824->unk_0085 == 1)
+ {
+ sub_804AA0C(5);
+ gUnknown_03004824->linkData[0] = 0xddee;
+ gUnknown_03004824->linkData[1] = 0;
+ sub_804AADC(5, 0);
+ gUnknown_03004824->unk_0086 = gUnknown_03004824->unk_0087 = 0;
+ gUnknown_03004824->unk_0084 = gUnknown_03004824->unk_0085 = 0;
+ gUnknown_03004824->unk_007b = 8;
+ }
+ else if (gUnknown_03004824->unk_0084 == 2 && gUnknown_03004824->unk_0085 == 2)
+ {
+ gUnknown_03004824->linkData[0] = 0xeebb;
+ gUnknown_03004824->linkData[1] = 0;
+ sub_804AADC(5, 0);
+ BeginNormalPaletteFade(-1, 0, 0, 16, 0);
+ gUnknown_03004824->unk_0084 = gUnknown_03004824->unk_0085 = 0;
+ gUnknown_03004824->unk_007b = 11;
+ }
+ }
+ if (gUnknown_03004824->unk_0086 && gUnknown_03004824->unk_0087)
+ {
+ if (gUnknown_03004824->unk_0086 == 1 && gUnknown_03004824->unk_0087 == 1)
+ {
+ gUnknown_03004824->linkData[0] = 0xccdd;
+ gUnknown_03004824->linkData[1] = 0;
+ sub_804AADC(5, 0);
+ gUnknown_03004824->unk_0086 = 0;
+ gUnknown_03004824->unk_0087 = 0;
+ gUnknown_03004824->unk_007b = 9;
+ }
+ if (gUnknown_03004824->unk_0086 == 2 || gUnknown_03004824->unk_0087 == 2)
+ {
+ sub_804AA0C(1);
+ gUnknown_03004824->linkData[0] = 0xddee;
+ gUnknown_03004824->linkData[1] = 0;
+ sub_804AADC(5, 0);
+ gUnknown_03004824->unk_0086 = 0;
+ gUnknown_03004824->unk_0087 = 0;
+ gUnknown_03004824->unk_007b = 8;
+ }
+ }
+}
+
+static void sub_80494D8(void)
+{
+ u8 mpId = GetMultiplayerId();
+ u8 status;
+ if ((status = GetBlockReceivedStatus()))
+ {
+ if (mpId == 0)
+ sub_80490BC(mpId, status);
+ else
+ sub_80491E4(mpId, status);
+ ResetBlockReceivedFlags();
+ }
+ if (mpId == 0)
+ sub_80492D8();
+}
+
+static u8 sub_8049514(u8 oldPosition, u8 direction)
+{
+ int i;
+ u8 newPosition = 0;
+ for (i = 0; i < PARTY_SIZE; i ++)
+ {
+ if (gUnknown_03004824->tradeMenuOptionsActive[gTradeNextSelectedMonTable[oldPosition][direction][i]] == TRUE)
+ {
+ newPosition = gTradeNextSelectedMonTable[oldPosition][direction][i];
+ break;
+ }
+ }
+ return newPosition;
+}
+
+static void TradeMenuMoveCursor(u8 *tradeMenuCursorPosition, u8 direction)
+{
+ u8 newPosition = sub_8049514(*tradeMenuCursorPosition, direction);
+ if (newPosition == 12) // CANCEL
+ {
+ StartSpriteAnim(&gSprites[gUnknown_03004824->tradeMenuCursorSpriteIdx], 1);
+ gSprites[gUnknown_03004824->tradeMenuCursorSpriteIdx].pos1.x = 0xe0;
+ gSprites[gUnknown_03004824->tradeMenuCursorSpriteIdx].pos1.y = 0xa0;
+ }
+ else
+ {
+ StartSpriteAnim(&gSprites[gUnknown_03004824->tradeMenuCursorSpriteIdx], 0);
+ gSprites[gUnknown_03004824->tradeMenuCursorSpriteIdx].pos1.x = gTradeMonSpriteCoords[newPosition][0] * 8 + 32;
+ gSprites[gUnknown_03004824->tradeMenuCursorSpriteIdx].pos1.y = gTradeMonSpriteCoords[newPosition][1] * 8;
+ }
+ if (*tradeMenuCursorPosition != newPosition)
+ {
+ PlaySE(SE_SELECT);
+ }
+ *tradeMenuCursorPosition = newPosition;
+}
+
+static void sub_8049620(void)
+{
+ sub_804AA0C(0);
+ gUnknown_03004824->unk_007b = 5;
+ if (GetMultiplayerId() == 1)
+ {
+ gUnknown_03004824->linkData[0] = 0xaabb;
+ gUnknown_03004824->linkData[1] = gUnknown_03004824->tradeMenuCursorPosition;
+ Trade_SendData(gUnknown_03004824);
+ }
+ else
+ {
+ gUnknown_03004824->unk_0084 = 1;
+ }
+}
+
+static void sub_8049680(void)
+{
+ int i;
+ if (gMain.newAndRepeatedKeys & DPAD_UP)
+ {
+ TradeMenuMoveCursor(&gUnknown_03004824->tradeMenuCursorPosition, 0);
+ }
+ else if (gMain.newAndRepeatedKeys & DPAD_DOWN)
+ {
+ TradeMenuMoveCursor(&gUnknown_03004824->tradeMenuCursorPosition, 1);
+ }
+ else if (gMain.newAndRepeatedKeys & DPAD_LEFT)
+ {
+ TradeMenuMoveCursor(&gUnknown_03004824->tradeMenuCursorPosition, 2);
+ }
+ else if (gMain.newAndRepeatedKeys & DPAD_RIGHT)
+ {
+ TradeMenuMoveCursor(&gUnknown_03004824->tradeMenuCursorPosition, 3);
+ }
+ if (gMain.newKeys & A_BUTTON)
+ {
+ PlaySE(SE_SELECT);
+ if (gUnknown_03004824->tradeMenuCursorPosition < PARTY_SIZE)
+ {
+ DrawTextWindow(&gUnknown_03004824->window, 18, 14, 28, 19);
+ PrintMenuItems(19, 15, 2, (const struct MenuAction *)gUnknown_0820C320);
+ InitMenu(0, 19, 15, 2, 0, 9);
+ gUnknown_03004824->unk_007b = 1;
+ }
+ else if (gUnknown_03004824->tradeMenuCursorPosition < 2 * PARTY_SIZE)
+ {
+ BeginNormalPaletteFade(-1, 0, 0, 16, 0);
+ gUnknown_03004824->unk_007b = 2;
+ }
+ else if (gUnknown_03004824->tradeMenuCursorPosition == 2 * PARTY_SIZE)
+ {
+ DrawTextWindow(&gUnknown_03004824->window, 24, 14, 29, 19);
+ InitYesNoMenu(24, 14, 4);
+ gUnknown_03004824->unk_007b = 4;
+ sub_804ACD8(gUnknown_0820C14C[4], (u8 *)(BG_CHAR_ADDR(4) + 32 * gUnknown_03004824->unk_007e), 20);
+ }
+ }
+ if (gMain.newKeys & R_BUTTON)
+ {
+ for (i = 0; i < 10; i ++)
+ {
+ gUnknown_03004824->linkData[i] = i;
+ }
+ Trade_SendData(gUnknown_03004824);
+ }
+}
+
+static void sub_8049804(void)
+{
+ HandleDestroyMenuCursors();
+ sub_804A80C();
+ gUnknown_03004824->unk_007b = 0;
+ gSprites[gUnknown_03004824->tradeMenuCursorSpriteIdx].invisible = FALSE;
+ sub_804ACD8(gUnknown_0820C14C[1], (u8 *)(BG_CHAR_ADDR(4) + 32 * gUnknown_03004824->unk_007e), 20);
+}
+
+static void sub_8049860(void)
+{
+ if (gMain.newAndRepeatedKeys & DPAD_UP)
+ {
+ PlaySE(SE_SELECT);
+ gUnknown_03004824->unk_007c = MoveMenuCursor(-1);
+ }
+ else if (gMain.newAndRepeatedKeys & DPAD_DOWN)
+ {
+ PlaySE(SE_SELECT);
+ gUnknown_03004824->unk_007c = MoveMenuCursor(+1);
+ }
+ if (gMain.newKeys & A_BUTTON)
+ {
+ PlaySE(SE_SELECT);
+ if (GetMenuCursorPos() == 0)
+ {
+ BeginNormalPaletteFade(-1, 0, 0, 16, 0);
+ gUnknown_03004824->unk_007b = 2;
+ }
+ else if (sub_80499F0(gUnknown_03004824->unk_0051[0], gUnknown_03004824->partyCounts[0], gUnknown_03004824->tradeMenuCursorPosition) == 0)
+ {
+ sub_804AADC(3, 2);
+ gUnknown_03004824->unk_007b = 8;
+ }
+ else
+ {
+ sub_8049620();
+ gSprites[gUnknown_03004824->tradeMenuCursorSpriteIdx].invisible = TRUE;
+ }
+ }
+ else if (gMain.newKeys & B_BUTTON)
+ {
+ PlaySE(SE_SELECT);
+ sub_8049804();
+ }
+}
+
+static void sub_8049954(void)
+{
+ if (gMain.newKeys & A_BUTTON || gMain.newKeys & B_BUTTON)
+ {
+ PlaySE(SE_SELECT);
+ sub_8049804();
+ }
+}
+
+static void sub_804997C(void)
+{
+ if (!gPaletteFade.active)
+ {
+ if (gUnknown_03004824->tradeMenuCursorPosition < PARTY_SIZE)
+ {
+ ShowPokemonSummaryScreen(gPlayerParty, gUnknown_03004824->tradeMenuCursorPosition, gUnknown_03004824->partyCounts[0] - 1, sub_80484F4, 4);
+ }
+ else
+ {
+ ShowPokemonSummaryScreen(gEnemyParty, gUnknown_03004824->tradeMenuCursorPosition - 6, gUnknown_03004824->partyCounts[1] - 1, sub_80484F4, 4);
+ }
+ }
+}
+
+static u8 sub_80499F0(const u8 *src, u8 partyCount, u8 tradeMenuCursorPosition)
+{
+ u8 retval = 0;
+ int i;
+ for (i = 0; i < partyCount; i ++)
+ {
+ if (tradeMenuCursorPosition != i)
+ {
+ retval += src[i];
+ }
+ }
+ return retval;
+}
+
+static void sub_8049A20(void)
+{
+ u8 unk_0051[12];
+ int i;
+ for (i = 0; i < gUnknown_03004824->partyCounts[0]; i ++)
+ {
+ unk_0051[i] = gUnknown_03004824->unk_0051[0][i];
+ }
+ if (sub_80499F0(unk_0051, gUnknown_03004824->partyCounts[0], gUnknown_03004824->tradeMenuCursorPosition) == 0)
+ {
+ sub_804AADC(3, 2);
+ gUnknown_03004824->linkData[0] = 0xbbcc;
+ sub_804AADC(0xb4, 0);
+ }
+ else
+ {
+ sub_804AADC(3, 1);
+ gUnknown_03004824->linkData[0] = 0xbbbb;
+ if (sub_8007ECC())
+ {
+ Trade_SendData(gUnknown_03004824);
+ }
+ }
+}
+
+static void sub_8049AC0(void)
+{
+ if (gMain.newAndRepeatedKeys & DPAD_UP)
+ {
+ PlaySE(SE_SELECT);
+ gUnknown_03004824->unk_007c = MoveMenuCursor(-1);
+ }
+ else if (gMain.newAndRepeatedKeys & DPAD_DOWN)
+ {
+ PlaySE(SE_SELECT);
+ gUnknown_03004824->unk_007c = MoveMenuCursor(+1);
+ }
+ if (gMain.newKeys & A_BUTTON)
+ {
+ PlaySE(SE_SELECT);
+ if (GetMenuCursorPos() == 0)
+ {
+ sub_8049A20();
+ }
+ else
+ {
+ sub_804AADC(3, 1);
+ if (sub_8007ECC())
+ {
+ gUnknown_03004824->linkData[0] = 0xbbcc;
+ Trade_SendData(gUnknown_03004824);
+ }
+ }
+ gUnknown_03004824->unk_007b = 100;
+ }
+ else if (gMain.newKeys & B_BUTTON)
+ {
+ sub_804AADC(3, 1);
+ if (GetMenuCursorPos() == 0)
+ {
+ gUnknown_03004824->unk_007c = MoveMenuCursor(+1);
+ }
+ gUnknown_03004824->linkData[0] = 0xbbcc;
+ Trade_SendData(gUnknown_03004824);
+ gUnknown_03004824->unk_007b = 100;
+ }
+}
+
+static void sub_8049BC0(void)
+{
+ if (gMain.newAndRepeatedKeys & DPAD_UP)
+ {
+ PlaySE(SE_SELECT);
+ gUnknown_03004824->unk_007c = MoveMenuCursor(-1);
+ }
+ else if (gMain.newAndRepeatedKeys & DPAD_DOWN)
+ {
+ PlaySE(SE_SELECT);
+ gUnknown_03004824->unk_007c = MoveMenuCursor(+1);
+ }
+ if (gMain.newKeys & A_BUTTON)
+ {
+ PlaySE(SE_SELECT);
+ if (GetMenuCursorPos() == 0)
+ {
+ sub_804AA0C(4);
+ gUnknown_03004824->linkData[0] = 0xeeaa;
+ gUnknown_03004824->linkData[1] = 0;
+ sub_804AADC(5, 0);
+ gSprites[gUnknown_03004824->tradeMenuCursorSpriteIdx].invisible = TRUE;
+ gUnknown_03004824->unk_007b = 100;
+ }
+ else
+ {
+ sub_8049804();
+ }
+ }
+ else if (gMain.newKeys & B_BUTTON)
+ {
+ PlaySE(SE_SELECT);
+ sub_8049804();
+ }
+}
+
+static void sub_8049C8C(void)
+{
+ if (GetMultiplayerId() == 0)
+ {
+ sub_8049E9C(gUnknown_03004824->tradeMenuCursorPosition);
+ sub_8049E9C(gUnknown_03004824->unk_008a);
+ }
+ gUnknown_03004824->unk_007b = 7;
+}
+
+static void sub_8049CC4(void)
+{
+ if (gUnknown_03004824->unk_0080[0] == 5 && gUnknown_03004824->unk_0080[1] == 5)
+ {
+ sub_8049088();
+ gUnknown_03004824->unk_007b = 14;
+ }
+}
+
+static void DisplayMessageAndContinueTask(void)
+{
+ gUnknown_03004824->unk_00b4++;
+ if (gUnknown_03004824->unk_00b4 > 120)
+ {
+ DrawTextWindow(&gUnknown_03004824->window, 24, 14, 29, 19);
+ InitYesNoMenu(24, 14, 4);
+ gUnknown_03004824->unk_00b4 = 0;
+ gUnknown_03004824->unk_007b = 3;
+ }
+}
+
+static void sub_8049D44(void)
+{
+ if (gMain.newKeys & A_BUTTON)
+ {
+ PlaySE(SE_SELECT);
+ sub_804A840(0);
+ sub_804A840(1);
+ gUnknown_03004824->unk_007b = 0;
+ gSprites[gUnknown_03004824->tradeMenuCursorSpriteIdx].invisible = FALSE;
+ }
+}
+
+static void sub_8049D9C(void)
+{
+ if (!gPaletteFade.active)
+ {
+ sub_800832C();
+ gUnknown_03004824->unk_007b = 12;
+ }
+}
+
+static void sub_8049DC4(void)
+{
+ if (gReceivedRemoteLinkPlayers == 0)
+ {
+ SetMainCallback2(sub_805465C);
+ }
+}
+
+static void sub_8049DE0(void)
+{
+ switch (gUnknown_03004824->unk_007b)
+ {
+ case 0:
+ sub_8049680();
+ break;
+ case 1:
+ sub_8049860();
+ break;
+ case 2:
+ sub_804997C();
+ break;
+ case 3:
+ sub_8049AC0();
+ break;
+ case 4:
+ sub_8049BC0();
+ break;
+ case 6:
+ sub_8049C8C();
+ break;
+ case 7:
+ sub_8049CC4();
+ break;
+ case 8:
+ sub_8049D44();
+ break;
+ case 9:
+ sub_8048A14();
+ break;
+ case 10:
+ sub_8048A50();
+ break;
+ case 11:
+ sub_8049D9C();
+ break;
+ case 12:
+ sub_8049DC4();
+ break;
+ case 13:
+ sub_8048A90();
+ break;
+ case 14:
+ DisplayMessageAndContinueTask();
+ break;
+ case 15:
+ sub_8049954();
+ break;
+ }
+}
+
+static void sub_8049E9C(u8 a0)
+{
+ u8 v0 = a0 / 6;
+ if (gUnknown_03004824->unk_0080[v0] == 0)
+ {
+ gUnknown_03004824->unk_0080[v0] = 1;
+ gUnknown_03004824->unk_0082[v0] = a0;
+ }
+}
+
+// TODO: Figure out what the f**k is going on here
+#ifdef NONMATCHING
+static void sub_8049ED4(u8 a0)
+{
+ u8 i;
+ s8 stringLength;
+ u8 whichParty = 1;
+ u8 whichPokemon;
+ u8 string1[40];
+ u8 string2[56];
+ u8 temp0 = gUnknown_03004824->unk_0082[a0];
+ if (temp0 < PARTY_SIZE)
+ whichParty = 0;
+ whichPokemon = temp0 % PARTY_SIZE;
+
+ switch (gUnknown_03004824->unk_0080[a0])
+ {
+ case 1:
+ for (i = 0; i < gUnknown_03004824->partyCounts[a0]; i ++)
+ {
+ gSprites[gUnknown_03004824->partyIcons[whichParty][i]].invisible = TRUE;
+ }
+ gSprites[gUnknown_03004824->partyIcons[whichParty][whichPokemon]].invisible = FALSE;
+ gSprites[gUnknown_03004824->partyIcons[whichParty][whichPokemon]].data0 = 20;
+ gSprites[gUnknown_03004824->partyIcons[whichParty][whichPokemon]].data2 = (gTradeMonSpriteCoords[6 * whichParty + whichPokemon][0] + gTradeMonSpriteCoords[6 * whichParty + whichPokemon + 1][0]) / 2 * 8 + 14;
+ gSprites[gUnknown_03004824->partyIcons[whichParty][whichPokemon]].data4 = gTradeMonSpriteCoords[6 * whichParty + whichPokemon][1] * 8 - 12;
+ StoreSpriteCallbackInData6(&gSprites[gUnknown_03004824->partyIcons[whichParty][whichPokemon]], sub_809D62C);
+ gUnknown_03004824->unk_0080[a0] ++;
+ sub_8078A34(&gSprites[gUnknown_03004824->partyIcons[whichParty][whichPokemon]]);
+ HandleDestroyMenuCursors();
+ FillWindowRect_DefaultPalette(&gUnknown_03004824->window, 0, gUnknown_0820C330[whichParty][0], 0, gUnknown_0820C330[whichParty][1], 19);
+ sub_804A96C_alt(&gUnknown_03004824->unk_00c8, 15 * a0, 0, gTradePartyBoxTilemap, 15, 17, 0);
+ if (whichParty == 0)
+ {
+ sub_804A80C();
+ }
+ break;
+ case 2:
+ if (gSprites[gUnknown_03004824->partyIcons[whichParty][whichPokemon]].callback == sub_809D62C)
+ {
+ gUnknown_03004824->unk_0080[a0] = 3;
+ }
+ break;
+ case 3:
+ sub_804A96C_alt(&gUnknown_03004824->unk_00c8, 15 * whichParty, 0, gTradePartyBoxTilemap, 15, 17, 0);
+ gSprites[gUnknown_03004824->partyIcons[whichParty][whichPokemon]].pos1.x = (gTradeMonSpriteCoords[6 * whichParty + whichPokemon ][0] + gTradeMonSpriteCoords[6 * whichParty + whichPokemon + 1][0]) / 2 * 8 + 14;
+ gSprites[gUnknown_03004824->partyIcons[whichParty][whichPokemon]].pos1.y = gTradeMonSpriteCoords[6 * whichParty + whichPokemon ][1] * 8 - 12;
+ gSprites[gUnknown_03004824->partyIcons[whichParty][whichPokemon]].pos2.x = 0;
+ gSprites[gUnknown_03004824->partyIcons[whichParty][whichPokemon]].pos2.y = 0;
+ stringLength = sub_804A2B4(string1 + 6, whichParty, whichPokemon);
+ string1[0] = 0xFC;
+ string1[1] = 0x06;
+ string1[2] = 0x04;
+ string1[3] = 0xFC;
+ string1[4] = 0x11;
+ string1[5] = (64 - stringLength) / 2;
+ sub_8003460(&gUnknown_03004824->window, string1, gUnknown_03004824->unk_007a + whichParty * 6 * 32, gUnknown_0820C334[whichParty][0], gUnknown_0820C334[whichParty][1]);
+ sub_804A33C(string2, whichParty, whichPokemon);
+ sub_8003460(&gUnknown_03004824->window, gOtherText_Terminator2, gUnknown_03004824->unk_007a + whichParty * 6 * 32 + 32, gUnknown_0820C334[whichParty + 1][0], gUnknown_0820C334[whichParty + 1][1] + 1);
+ sub_8003460(&gUnknown_03004824->window, string2, gUnknown_03004824->unk_007a + whichParty * 6 * 32 + 38, gUnknown_0820C334[whichParty + 1][0], gUnknown_0820C334[whichParty + 1][1] + 1);
+ gUnknown_03004824->unk_0080[a0] ++;
+ break;
+ case 4:
+ sub_804ACD8(gUnknown_0820C14C[5], (u8 *)(BG_CHAR_ADDR(4) + 32 * gUnknown_03004824->unk_007e), 20);
+ sub_804A51C(a0, whichPokemon, gUnknown_0820C3D1[a0][0] + 4, gUnknown_0820C3D1[a0][1] + 1, gUnknown_0820C3D1[a0][0], gUnknown_0820C3D1[a0][1]);
+ gUnknown_03004824->unk_0080[a0] ++;
+ break;
+ }
+}
+#else
+__attribute__((naked))
+static void sub_8049ED4(u8 a0)
+{
+ asm_unified("\tpush {r4-r7,lr}\n"
+ "\tmov r7, r10\n"
+ "\tmov r6, r9\n"
+ "\tmov r5, r8\n"
+ "\tpush {r5-r7}\n"
+ "\tsub sp, 0x74\n"
+ "\tlsls r0, 24\n"
+ "\tlsrs r0, 24\n"
+ "\tmov r10, r0\n"
+ "\tldr r0, _08049F24 @ =gUnknown_03004824\n"
+ "\tldr r5, [r0]\n"
+ "\tadds r0, r5, 0\n"
+ "\tadds r0, 0x82\n"
+ "\tadd r0, r10\n"
+ "\tldrb r0, [r0]\n"
+ "\tmovs r1, 0x1\n"
+ "\tstr r1, [sp, 0x6C]\n"
+ "\tcmp r0, 0x5\n"
+ "\tbhi _08049EFE\n"
+ "\tmovs r2, 0\n"
+ "\tstr r2, [sp, 0x6C]\n"
+ "_08049EFE:\n"
+ "\tmovs r1, 0x6\n"
+ "\tbl __umodsi3\n"
+ "\tlsls r0, 24\n"
+ "\tlsrs r0, 24\n"
+ "\tmov r8, r0\n"
+ "\tadds r0, r5, 0\n"
+ "\tadds r0, 0x80\n"
+ "\tmov r1, r10\n"
+ "\tadds r3, r0, r1\n"
+ "\tldrb r0, [r3]\n"
+ "\tcmp r0, 0x2\n"
+ "\tbne _08049F1A\n"
+ "\tb _0804A0AC\n"
+ "_08049F1A:\n"
+ "\tcmp r0, 0x2\n"
+ "\tbgt _08049F28\n"
+ "\tcmp r0, 0x1\n"
+ "\tbeq _08049F36\n"
+ "\tb _0804A294\n"
+ "\t.align 2, 0\n"
+ "_08049F24: .4byte gUnknown_03004824\n"
+ "_08049F28:\n"
+ "\tcmp r0, 0x3\n"
+ "\tbne _08049F2E\n"
+ "\tb _0804A0E4\n"
+ "_08049F2E:\n"
+ "\tcmp r0, 0x4\n"
+ "\tbne _08049F34\n"
+ "\tb _0804A244\n"
+ "_08049F34:\n"
+ "\tb _0804A294\n"
+ "_08049F36:\n"
+ "\tmovs r4, 0\n"
+ "\tadds r0, r5, 0\n"
+ "\tadds r0, 0x42\n"
+ "\tadd r0, r10\n"
+ "\tldr r7, _0804A094 @ =gSprites\n"
+ "\tldr r2, [sp, 0x6C]\n"
+ "\tlsls r2, 1\n"
+ "\tmov r9, r2\n"
+ "\tldr r3, _0804A098 @ =gTradeMonSpriteCoords\n"
+ "\tmov r12, r3\n"
+ "\tmov r5, r10\n"
+ "\tlsls r5, 4\n"
+ "\tstr r5, [sp, 0x70]\n"
+ "\tldrb r0, [r0]\n"
+ "\tcmp r4, r0\n"
+ "\tbcs _08049F8E\n"
+ "\tadds r6, r7, 0\n"
+ "\tldr r2, _0804A09C @ =gUnknown_03004824\n"
+ "\tldr r0, [sp, 0x6C]\n"
+ "\tadd r0, r9\n"
+ "\tlsls r3, r0, 1\n"
+ "\tmovs r5, 0x4\n"
+ "_08049F62:\n"
+ "\tldr r0, [r2]\n"
+ "\tadds r1, r4, r3\n"
+ "\tadds r0, 0x34\n"
+ "\tadds r0, r1\n"
+ "\tldrb r1, [r0]\n"
+ "\tlsls r0, r1, 4\n"
+ "\tadds r0, r1\n"
+ "\tlsls r0, 2\n"
+ "\tadds r0, r6\n"
+ "\tadds r0, 0x3E\n"
+ "\tldrb r1, [r0]\n"
+ "\torrs r1, r5\n"
+ "\tstrb r1, [r0]\n"
+ "\tadds r0, r4, 0x1\n"
+ "\tlsls r0, 24\n"
+ "\tlsrs r4, r0, 24\n"
+ "\tldr r0, [r2]\n"
+ "\tadds r0, 0x42\n"
+ "\tadd r0, r10\n"
+ "\tldrb r0, [r0]\n"
+ "\tcmp r4, r0\n"
+ "\tbcc _08049F62\n"
+ "_08049F8E:\n"
+ "\tldr r1, _0804A09C @ =gUnknown_03004824\n"
+ "\tldr r0, [r1]\n"
+ "\tldr r5, [sp, 0x6C]\n"
+ "\tadd r5, r9\n"
+ "\tlsls r3, r5, 1\n"
+ "\tmov r2, r8\n"
+ "\tadds r6, r2, r3\n"
+ "\tadds r0, 0x34\n"
+ "\tadds r0, r6\n"
+ "\tldrb r1, [r0]\n"
+ "\tlsls r0, r1, 4\n"
+ "\tadds r0, r1\n"
+ "\tlsls r0, 2\n"
+ "\tadds r0, r7\n"
+ "\tadds r0, 0x3E\n"
+ "\tldrb r2, [r0]\n"
+ "\tmovs r1, 0x5\n"
+ "\tnegs r1, r1\n"
+ "\tands r1, r2\n"
+ "\tstrb r1, [r0]\n"
+ "\tldr r0, _0804A09C @ =gUnknown_03004824\n"
+ "\tldr r4, [r0]\n"
+ "\tadds r4, 0x34\n"
+ "\tadds r4, r6\n"
+ "\tldrb r1, [r4]\n"
+ "\tlsls r0, r1, 4\n"
+ "\tadds r0, r1\n"
+ "\tlsls r0, 2\n"
+ "\tadds r0, r7\n"
+ "\tmovs r1, 0x14\n"
+ "\tstrh r1, [r0, 0x2E]\n"
+ "\tldrb r0, [r4]\n"
+ "\tlsls r2, r0, 4\n"
+ "\tadds r2, r0\n"
+ "\tlsls r2, 2\n"
+ "\tadds r2, r7\n"
+ "\tlsls r5, 2\n"
+ "\tmov r1, r12\n"
+ "\tadds r0, r5, r1\n"
+ "\tldrb r0, [r0]\n"
+ "\tadds r3, 0x1\n"
+ "\tlsls r3, 1\n"
+ "\tadd r3, r12\n"
+ "\tldrb r1, [r3]\n"
+ "\tadds r0, r1\n"
+ "\tasrs r0, 1\n"
+ "\tlsls r0, 3\n"
+ "\tadds r0, 0xE\n"
+ "\tstrh r0, [r2, 0x32]\n"
+ "\tldrb r0, [r4]\n"
+ "\tlsls r1, r0, 4\n"
+ "\tadds r1, r0\n"
+ "\tlsls r1, 2\n"
+ "\tadds r1, r7\n"
+ "\tmov r0, r12\n"
+ "\tadds r0, 0x1\n"
+ "\tadds r5, r0\n"
+ "\tldrb r0, [r5]\n"
+ "\tlsls r0, 3\n"
+ "\tsubs r0, 0xC\n"
+ "\tstrh r0, [r1, 0x36]\n"
+ "\tldrb r1, [r4]\n"
+ "\tlsls r0, r1, 4\n"
+ "\tadds r0, r1\n"
+ "\tlsls r0, 2\n"
+ "\tadds r0, r7\n"
+ "\tldr r1, _0804A0A0 @ =sub_809D62C\n"
+ "\tbl StoreSpriteCallbackInData6\n"
+ "\tldr r2, _0804A09C @ =gUnknown_03004824\n"
+ "\tldr r1, [r2]\n"
+ "\tadds r1, 0x80\n"
+ "\tadd r1, r10\n"
+ "\tldrb r0, [r1]\n"
+ "\tadds r0, 0x1\n"
+ "\tstrb r0, [r1]\n"
+ "\tldr r0, [r2]\n"
+ "\tadds r0, 0x34\n"
+ "\tadds r0, r6\n"
+ "\tldrb r1, [r0]\n"
+ "\tlsls r0, r1, 4\n"
+ "\tadds r0, r1\n"
+ "\tlsls r0, 2\n"
+ "\tadds r0, r7\n"
+ "\tbl sub_8078A34\n"
+ "\tbl HandleDestroyMenuCursors\n"
+ "\tldr r3, _0804A09C @ =gUnknown_03004824\n"
+ "\tldr r0, [r3]\n"
+ "\tadds r0, 0x4\n"
+ "\tldr r1, _0804A0A4 @ =gUnknown_0820C330\n"
+ "\tmov r5, r9\n"
+ "\tadds r2, r5, r1\n"
+ "\tldrb r2, [r2]\n"
+ "\tadds r1, 0x1\n"
+ "\tadd r1, r9\n"
+ "\tldrb r1, [r1]\n"
+ "\tstr r1, [sp]\n"
+ "\tmovs r1, 0x13\n"
+ "\tstr r1, [sp, 0x4]\n"
+ "\tmovs r1, 0\n"
+ "\tmovs r3, 0\n"
+ "\tbl FillWindowRect_DefaultPalette\n"
+ "\tldr r1, _0804A09C @ =gUnknown_03004824\n"
+ "\tldr r0, [r1]\n"
+ "\tadds r0, 0xC8\n"
+ "\tldr r2, [sp, 0x70]\n"
+ "\tmov r3, r10\n"
+ "\tsubs r1, r2, r3\n"
+ "\tlsls r1, 24\n"
+ "\tlsrs r1, 24\n"
+ "\tldr r3, _0804A0A8 @ =gTradePartyBoxTilemap\n"
+ "\tmovs r2, 0xF\n"
+ "\tstr r2, [sp]\n"
+ "\tmovs r2, 0x11\n"
+ "\tstr r2, [sp, 0x4]\n"
+ "\tmovs r5, 0\n"
+ "\tstr r5, [sp, 0x8]\n"
+ "\tmovs r2, 0\n"
+ "\tbl sub_804A96C_alt\n"
+ "\tldr r0, [sp, 0x6C]\n"
+ "\tcmp r0, 0\n"
+ "\tbeq _0804A08C\n"
+ "\tb _0804A294\n"
+ "_0804A08C:\n"
+ "\tbl sub_804A80C\n"
+ "\tb _0804A294\n"
+ "\t.align 2, 0\n"
+ "_0804A094: .4byte gSprites\n"
+ "_0804A098: .4byte gTradeMonSpriteCoords\n"
+ "_0804A09C: .4byte gUnknown_03004824\n"
+ "_0804A0A0: .4byte sub_809D62C\n"
+ "_0804A0A4: .4byte gUnknown_0820C330\n"
+ "_0804A0A8: .4byte gTradePartyBoxTilemap\n"
+ "_0804A0AC:\n"
+ "\tldr r2, _0804A0DC @ =gSprites\n"
+ "\tldr r1, [sp, 0x6C]\n"
+ "\tlsls r0, r1, 1\n"
+ "\tadds r0, r1\n"
+ "\tlsls r0, 1\n"
+ "\tadd r0, r8\n"
+ "\tadds r1, r5, 0\n"
+ "\tadds r1, 0x34\n"
+ "\tadds r1, r0\n"
+ "\tldrb r1, [r1]\n"
+ "\tlsls r0, r1, 4\n"
+ "\tadds r0, r1\n"
+ "\tlsls r0, 2\n"
+ "\tadds r2, 0x1C\n"
+ "\tadds r0, r2\n"
+ "\tldr r1, [r0]\n"
+ "\tldr r0, _0804A0E0 @ =sub_809D62C\n"
+ "\tcmp r1, r0\n"
+ "\tbeq _0804A0D4\n"
+ "\tb _0804A294\n"
+ "_0804A0D4:\n"
+ "\tmovs r0, 0x3\n"
+ "\tstrb r0, [r3]\n"
+ "\tb _0804A294\n"
+ "\t.align 2, 0\n"
+ "_0804A0DC: .4byte gSprites\n"
+ "_0804A0E0: .4byte sub_809D62C\n"
+ "_0804A0E4:\n"
+ "\tadds r0, r5, 0\n"
+ "\tadds r0, 0xC8\n"
+ "\tldr r2, [sp, 0x6C]\n"
+ "\tlsls r1, r2, 4\n"
+ "\tsubs r1, r2\n"
+ "\tlsls r1, 24\n"
+ "\tlsrs r1, 24\n"
+ "\tldr r3, _0804A228 @ =gTradeMovesBoxTilemap\n"
+ "\tmovs r2, 0xF\n"
+ "\tstr r2, [sp]\n"
+ "\tmovs r7, 0x11\n"
+ "\tstr r7, [sp, 0x4]\n"
+ "\tmovs r5, 0\n"
+ "\tstr r5, [sp, 0x8]\n"
+ "\tmovs r2, 0\n"
+ "\tbl sub_804A96C_alt\n"
+ "\tldr r0, _0804A22C @ =gUnknown_03004824\n"
+ "\tldr r3, [r0]\n"
+ "\tldr r1, [sp, 0x6C]\n"
+ "\tlsls r6, r1, 1\n"
+ "\tadds r1, r6\n"
+ "\tmov r9, r1\n"
+ "\tlsls r1, 1\n"
+ "\tmov r2, r8\n"
+ "\tadds r0, r2, r1\n"
+ "\tadds r3, 0x34\n"
+ "\tadds r3, r0\n"
+ "\tldrb r0, [r3]\n"
+ "\tlsls r2, r0, 4\n"
+ "\tadds r2, r0\n"
+ "\tlsls r2, 2\n"
+ "\tldr r5, _0804A230 @ =gSprites\n"
+ "\tadds r2, r5\n"
+ "\tldr r4, _0804A234 @ =gTradeMonSpriteCoords\n"
+ "\tmov r0, r9\n"
+ "\tlsls r5, r0, 2\n"
+ "\tadds r0, r5, r4\n"
+ "\tldrb r0, [r0]\n"
+ "\tadds r1, 0x1\n"
+ "\tlsls r1, 1\n"
+ "\tadds r1, r4\n"
+ "\tldrb r1, [r1]\n"
+ "\tadds r0, r1\n"
+ "\tasrs r0, 1\n"
+ "\tlsls r0, 3\n"
+ "\tadds r0, 0xE\n"
+ "\tstrh r0, [r2, 0x20]\n"
+ "\tldrb r0, [r3]\n"
+ "\tlsls r1, r0, 4\n"
+ "\tadds r1, r0\n"
+ "\tlsls r1, 2\n"
+ "\tldr r2, _0804A230 @ =gSprites\n"
+ "\tadds r1, r2\n"
+ "\tadds r4, 0x1\n"
+ "\tadds r5, r4\n"
+ "\tldrb r0, [r5]\n"
+ "\tlsls r0, 3\n"
+ "\tsubs r0, 0xC\n"
+ "\tstrh r0, [r1, 0x22]\n"
+ "\tldrb r1, [r3]\n"
+ "\tlsls r0, r1, 4\n"
+ "\tadds r0, r1\n"
+ "\tlsls r0, 2\n"
+ "\tadds r0, r2\n"
+ "\tmovs r5, 0\n"
+ "\tstrh r5, [r0, 0x24]\n"
+ "\tldrb r1, [r3]\n"
+ "\tlsls r0, r1, 4\n"
+ "\tadds r0, r1\n"
+ "\tlsls r0, 2\n"
+ "\tadds r0, r2\n"
+ "\tstrh r5, [r0, 0x26]\n"
+ "\tmov r0, sp\n"
+ "\tadds r0, 0x12\n"
+ "\tldr r1, [sp, 0x6C]\n"
+ "\tmov r2, r8\n"
+ "\tbl sub_804A2B4\n"
+ "\tadd r1, sp, 0xC\n"
+ "\tmovs r3, 0xFC\n"
+ "\tstrb r3, [r1]\n"
+ "\tadds r2, r1, 0\n"
+ "\tmovs r1, 0x6\n"
+ "\tstrb r1, [r2, 0x1]\n"
+ "\tmovs r1, 0x4\n"
+ "\tstrb r1, [r2, 0x2]\n"
+ "\tadds r1, r2, 0\n"
+ "\tstrb r3, [r1, 0x3]\n"
+ "\tstrb r7, [r1, 0x4]\n"
+ "\tlsls r0, 24\n"
+ "\tasrs r0, 24\n"
+ "\tmovs r1, 0x40\n"
+ "\tsubs r1, r0\n"
+ "\tlsrs r0, r1, 31\n"
+ "\tadds r1, r0\n"
+ "\tasrs r1, 1\n"
+ "\tstrb r1, [r2, 0x5]\n"
+ "\tldr r0, _0804A22C @ =gUnknown_03004824\n"
+ "\tldr r1, [r0]\n"
+ "\tadds r0, r1, 0x4\n"
+ "\tadds r1, 0x7A\n"
+ "\tldrb r2, [r1]\n"
+ "\tmov r1, r9\n"
+ "\tlsls r1, 6\n"
+ "\tmov r9, r1\n"
+ "\tadd r2, r9\n"
+ "\tldr r4, _0804A238 @ =gUnknown_0820C334\n"
+ "\tldr r3, [sp, 0x6C]\n"
+ "\tlsls r1, r3, 2\n"
+ "\tadds r3, r1, r4\n"
+ "\tldrb r3, [r3]\n"
+ "\tldr r5, _0804A23C @ =gUnknown_0820C334 + 0x1\n"
+ "\tadds r1, r5\n"
+ "\tldrb r1, [r1]\n"
+ "\tstr r1, [sp]\n"
+ "\tadd r1, sp, 0xC\n"
+ "\tbl sub_8003460\n"
+ "\tadd r7, sp, 0x34\n"
+ "\tadds r0, r7, 0\n"
+ "\tldr r1, [sp, 0x6C]\n"
+ "\tmov r2, r8\n"
+ "\tbl sub_804A33C\n"
+ "\tldr r0, _0804A22C @ =gUnknown_03004824\n"
+ "\tldr r2, [r0]\n"
+ "\tadds r0, r2, 0x4\n"
+ "\tldr r1, _0804A240 @ =gOtherText_Terminator2\n"
+ "\tadds r2, 0x7A\n"
+ "\tldrb r2, [r2]\n"
+ "\tadd r2, r9\n"
+ "\tadds r2, 0x20\n"
+ "\tadds r6, 0x1\n"
+ "\tlsls r6, 1\n"
+ "\tadds r4, r6, r4\n"
+ "\tldrb r5, [r4]\n"
+ "\tldr r3, _0804A23C @ =gUnknown_0820C334 + 0x1\n"
+ "\tadds r6, r3\n"
+ "\tldrb r4, [r6]\n"
+ "\tadds r4, 0x1\n"
+ "\tlsls r4, 24\n"
+ "\tlsrs r4, 24\n"
+ "\tstr r4, [sp]\n"
+ "\tadds r3, r5, 0\n"
+ "\tbl sub_8003460\n"
+ "\tldr r0, _0804A22C @ =gUnknown_03004824\n"
+ "\tldr r1, [r0]\n"
+ "\tadds r0, r1, 0x4\n"
+ "\tadds r1, 0x7A\n"
+ "\tldrb r2, [r1]\n"
+ "\tadd r2, r9\n"
+ "\tadds r2, 0x26\n"
+ "\tstr r4, [sp]\n"
+ "\tadds r1, r7, 0\n"
+ "\tadds r3, r5, 0\n"
+ "\tbl sub_8003460\n"
+ "\tldr r2, _0804A22C @ =gUnknown_03004824\n"
+ "\tldr r1, [r2]\n"
+ "\tb _0804A28A\n"
+ "\t.align 2, 0\n"
+ "_0804A228: .4byte gTradeMovesBoxTilemap\n"
+ "_0804A22C: .4byte gUnknown_03004824\n"
+ "_0804A230: .4byte gSprites\n"
+ "_0804A234: .4byte gTradeMonSpriteCoords\n"
+ "_0804A238: .4byte gUnknown_0820C334\n"
+ "_0804A23C: .4byte gUnknown_0820C334 + 0x1\n"
+ "_0804A240: .4byte gOtherText_Terminator2\n"
+ "_0804A244:\n"
+ "\tldr r0, _0804A2A4 @ =gUnknown_0820C14C\n"
+ "\tldr r0, [r0, 0x14]\n"
+ "\tadds r1, r5, 0\n"
+ "\tadds r1, 0x7E\n"
+ "\tldrh r1, [r1]\n"
+ "\tlsls r1, 5\n"
+ "\tldr r3, _0804A2A8 @ =0x06010000\n"
+ "\tadds r1, r3\n"
+ "\tmovs r2, 0x14\n"
+ "\tbl sub_804ACD8\n"
+ "\tldr r0, _0804A2AC @ =gUnknown_0820C3D1\n"
+ "\tmov r5, r10\n"
+ "\tlsls r1, r5, 1\n"
+ "\tadds r4, r1, r0\n"
+ "\tldrb r2, [r4]\n"
+ "\tadds r2, 0x4\n"
+ "\tlsls r2, 24\n"
+ "\tlsrs r2, 24\n"
+ "\tadds r0, 0x1\n"
+ "\tadds r1, r0\n"
+ "\tldrb r3, [r1]\n"
+ "\tadds r3, 0x1\n"
+ "\tlsls r3, 24\n"
+ "\tlsrs r3, 24\n"
+ "\tldrb r0, [r4]\n"
+ "\tstr r0, [sp]\n"
+ "\tldrb r0, [r1]\n"
+ "\tstr r0, [sp, 0x4]\n"
+ "\tmov r0, r10\n"
+ "\tmov r1, r8\n"
+ "\tbl sub_804A51C\n"
+ "\tldr r0, _0804A2B0 @ =gUnknown_03004824\n"
+ "\tldr r1, [r0]\n"
+ "_0804A28A:\n"
+ "\tadds r1, 0x80\n"
+ "\tadd r1, r10\n"
+ "\tldrb r0, [r1]\n"
+ "\tadds r0, 0x1\n"
+ "\tstrb r0, [r1]\n"
+ "_0804A294:\n"
+ "\tadd sp, 0x74\n"
+ "\tpop {r3-r5}\n"
+ "\tmov r8, r3\n"
+ "\tmov r9, r4\n"
+ "\tmov r10, r5\n"
+ "\tpop {r4-r7}\n"
+ "\tpop {r0}\n"
+ "\tbx r0\n"
+ "\t.align 2, 0\n"
+ "_0804A2A4: .4byte gUnknown_0820C14C\n"
+ "_0804A2A8: .4byte 0x06010000\n"
+ "_0804A2AC: .4byte gUnknown_0820C3D1\n"
+ "_0804A2B0: .4byte gUnknown_03004824");
+}
+#endif
+
+#ifdef NONMATCHING
+static
+#endif
+u8 sub_804A2B4(u8 *a0, u8 whichParty, u8 whichPokemon)
+{
+ u8 string[11];
+ if (whichParty == 0)
+ {
+ GetMonData(&gPlayerParty[whichPokemon], MON_DATA_NICKNAME, string);
+ StringCopy10(a0, string);
+ GetMonGender(&gPlayerParty[whichPokemon]);
+ GetMonData(&gPlayerParty[whichPokemon], MON_DATA_LEVEL);
+ }
+ else
+ {
+ GetMonData(&gEnemyParty[whichPokemon], MON_DATA_NICKNAME, string);
+ StringCopy10(a0, string);
+ GetMonGender(&gEnemyParty[whichPokemon]);
+ GetMonData(&gEnemyParty[whichPokemon], MON_DATA_LEVEL);
+ }
+ return GetStringWidthGivenWindowConfig(&gWindowConfig_81E7294, a0);
+}
+
+#ifdef NONMATCHING
+static
+#endif
+void sub_804A33C(u8 *a0, u8 whichParty, u8 whichPokemon)
+{
+ u16 i;
+ u16 moves[4];
+ if (gUnknown_03004824->unk_005d[whichParty][whichPokemon] == 0)
+ {
+ for (i = 0; i < 4; i ++)
+ {
+ if (whichParty == 0)
+ moves[i] = GetMonData(&gPlayerParty[whichPokemon], MON_DATA_MOVE1 + i, NULL);
+ else
+ moves[i] = GetMonData(&gEnemyParty[whichPokemon], MON_DATA_MOVE1 + i, NULL);
+ }
+ StringCopy(a0, gOtherText_Terminator);
+ for (i = 0; i < 4; i ++)
+ {
+ if (moves[i] != 0)
+ {
+ StringAppend(a0, gMoveNames[moves[i]]);
+ }
+ StringAppend(a0, gOtherText_ControlAndMiscText);
+ }
+ }
+ else
+ {
+ StringCopy(a0, gOtherText_Terminator);
+ StringAppend(a0, gOtherText_FourQuestions);
+ }
+}
+
+#ifdef NONMATCHING
+static void sub_804A41C(u8 whichParty)
+{
+ u8 i;
+ u8 nickname[22];
+ u8 string[40];
+ struct Pokemon *pokemon;
+
+ string[0] = 0xFC;
+ string[1] = 0x06;
+ string[2] = 0x04;
+ string[3] = 0xFC;
+ string[4] = 0x11;
+ string[5] = 0x00;
+
+ for (i = 0; i < gUnknown_03004824->partyCounts[whichParty]; i ++)
+ {
+ pokemon = whichParty == 0 ? &gPlayerParty[i] : &gEnemyParty[i];
+ GetMonData(pokemon, MON_DATA_NICKNAME, nickname);
+ StringCopy10(string + 6, nickname);
+ GetMonGender(pokemon);
+ string[5] = (50 - GetStringWidthGivenWindowConfig(&gWindowConfig_81E7294, string + 6)) / 2;
+ sub_8003460(&gUnknown_03004824->window, string, gUnknown_03004824->unk_007a + 22 * 6 * whichParty + 22 * i, gTradeMonSpriteCoords[i + 6 * whichParty][0], gTradeMonSpriteCoords[i + 6 * whichParty][1]);
+ }
+}
+#else
+__attribute__((naked))
+static void sub_804A41C(u8 whichParty)
+{
+ asm_unified("\tpush {r4-r7,lr}\n"
+ "\tmov r7, r10\n"
+ "\tmov r6, r9\n"
+ "\tmov r5, r8\n"
+ "\tpush {r5-r7}\n"
+ "\tsub sp, 0x44\n"
+ "\tlsls r0, 24\n"
+ "\tlsrs r5, r0, 24\n"
+ "\tadd r3, sp, 0x1C\n"
+ "\tmovs r2, 0\n"
+ "\tmovs r1, 0xFC\n"
+ "\tstrb r1, [r3]\n"
+ "\tmovs r0, 0x6\n"
+ "\tstrb r0, [r3, 0x1]\n"
+ "\tmovs r0, 0x4\n"
+ "\tstrb r0, [r3, 0x2]\n"
+ "\tstrb r1, [r3, 0x3]\n"
+ "\tmovs r0, 0x11\n"
+ "\tstrb r0, [r3, 0x4]\n"
+ "\tstrb r2, [r3, 0x5]\n"
+ "\tmovs r6, 0\n"
+ "\tldr r1, _0804A470 @ =gUnknown_03004824\n"
+ "\tldr r0, [r1]\n"
+ "\tadds r0, 0x42\n"
+ "\tadds r0, r5\n"
+ "\tldrb r0, [r0]\n"
+ "\tcmp r6, r0\n"
+ "\tbcs _0804A504\n"
+ "\tmov r8, r3\n"
+ "\tadds r7, r1, 0\n"
+ "\tldr r0, _0804A474 @ =gTradeMonSpriteCoords\n"
+ "\tmov r9, r0\n"
+ "\tmovs r4, 0x1\n"
+ "\tadd r4, r9\n"
+ "\tmov r10, r4\n"
+ "_0804A462:\n"
+ "\tcmp r5, 0\n"
+ "\tbne _0804A47C\n"
+ "\tmovs r0, 0x64\n"
+ "\tadds r4, r6, 0\n"
+ "\tmuls r4, r0\n"
+ "\tldr r0, _0804A478 @ =gPlayerParty\n"
+ "\tb _0804A484\n"
+ "\t.align 2, 0\n"
+ "_0804A470: .4byte gUnknown_03004824\n"
+ "_0804A474: .4byte gTradeMonSpriteCoords\n"
+ "_0804A478: .4byte gPlayerParty\n"
+ "_0804A47C:\n"
+ "\tmovs r0, 0x64\n"
+ "\tadds r4, r6, 0\n"
+ "\tmuls r4, r0\n"
+ "\tldr r0, _0804A514 @ =gEnemyParty\n"
+ "_0804A484:\n"
+ "\tadds r4, r0\n"
+ "\tadds r0, r4, 0\n"
+ "\tmovs r1, 0x2\n"
+ "\tadd r2, sp, 0x4\n"
+ "\tbl GetMonData\n"
+ "\tmov r0, sp\n"
+ "\tadds r0, 0x22\n"
+ "\tadd r1, sp, 0x4\n"
+ "\tbl StringCopy10\n"
+ "\tadds r0, r4, 0\n"
+ "\tbl GetMonGender\n"
+ "\tmov r1, sp\n"
+ "\tadds r1, 0x22\n"
+ "\tldr r0, _0804A518 @ =gWindowConfig_81E7294\n"
+ "\tbl GetStringWidthGivenWindowConfig\n"
+ "\tlsls r0, 24\n"
+ "\tlsrs r0, 24\n"
+ "\tmovs r1, 0x32\n"
+ "\tsubs r1, r0\n"
+ "\tlsrs r0, r1, 31\n"
+ "\tadds r1, r0\n"
+ "\tasrs r1, 1\n"
+ "\tmov r0, r8\n"
+ "\tstrb r1, [r0, 0x5]\n"
+ "\tldr r1, [r7]\n"
+ "\tadds r0, r1, 0x4\n"
+ "\tadds r1, 0x7A\n"
+ "\tlsls r2, r5, 5\n"
+ "\tadds r2, r5\n"
+ "\tlsls r2, 2\n"
+ "\tldrb r1, [r1]\n"
+ "\tadds r2, r1\n"
+ "\tmovs r1, 0x16\n"
+ "\tmuls r1, r6\n"
+ "\tadds r2, r1\n"
+ "\tlsls r2, 16\n"
+ "\tlsrs r2, 16\n"
+ "\tlsls r1, r5, 1\n"
+ "\tadds r1, r5\n"
+ "\tlsls r1, 1\n"
+ "\tadds r1, r6, r1\n"
+ "\tlsls r1, 1\n"
+ "\tmov r4, r9\n"
+ "\tadds r3, r1, r4\n"
+ "\tldrb r3, [r3]\n"
+ "\tadd r1, r10\n"
+ "\tldrb r1, [r1]\n"
+ "\tstr r1, [sp]\n"
+ "\tmov r1, r8\n"
+ "\tbl sub_8003460\n"
+ "\tadds r0, r6, 0x1\n"
+ "\tlsls r0, 24\n"
+ "\tlsrs r6, r0, 24\n"
+ "\tldr r0, [r7]\n"
+ "\tadds r0, 0x42\n"
+ "\tadds r0, r5\n"
+ "\tldrb r0, [r0]\n"
+ "\tcmp r6, r0\n"
+ "\tbcc _0804A462\n"
+ "_0804A504:\n"
+ "\tadd sp, 0x44\n"
+ "\tpop {r3-r5}\n"
+ "\tmov r8, r3\n"
+ "\tmov r9, r4\n"
+ "\tmov r10, r5\n"
+ "\tpop {r4-r7}\n"
+ "\tpop {r0}\n"
+ "\tbx r0\n"
+ "\t.align 2, 0\n"
+ "_0804A514: .4byte gEnemyParty\n"
+ "_0804A518: .4byte gWindowConfig_81E7294");
+}
+#endif
+
+#ifdef NONMATCHING
+static
+#endif
+void sub_804A51C(u8 a0, u8 a1, u8 a2, u8 a3, u8 a4, u8 a5)
+{
+ u8 nickname[24];
+ u8 level;
+ u8 gender;
+ u8 lv_div_10;
+ sub_804A96C(&gUnknown_03004824->unk_00c8, a4, a5, gTradeMonBoxTilemap, 6, 3, 0);
+ if (a0 == 0)
+ {
+ level = GetMonData(&gPlayerParty[a1], MON_DATA_LEVEL, NULL);
+ gender = GetMonGender(&gPlayerParty[a1]);
+ GetMonData(&gPlayerParty[a1], MON_DATA_NICKNAME, nickname);
+ }
+ else
+ {
+ level = GetMonData(&gEnemyParty[a1], MON_DATA_LEVEL, NULL);
+ gender = GetMonGender(&gEnemyParty[a1]);
+ GetMonData(&gEnemyParty[a1], MON_DATA_NICKNAME, nickname);
+ }
+ if (gUnknown_03004824->unk_005d[a0][a1] == 0)
+ {
+ lv_div_10 = level / 10;
+ if (lv_div_10 != 0)
+ {
+ gUnknown_03004824->unk_00c8.unk_12[a2 + 32 * a3] = lv_div_10 + 0x60;
+ }
+ gUnknown_03004824->unk_00c8.unk_12[a2 + 32 * a3 + 1] = (u8)(level % 10) + 0x70;
+ if (gender == MON_MALE)
+ {
+ if (!NameHasGenderSymbol(nickname, MON_MALE))
+ {
+ gUnknown_03004824->unk_00c8.unk_12[a2 + 32 * a3 - 31] += 1;
+ }
+ }
+ else if (gender == MON_FEMALE)
+ {
+ if (!NameHasGenderSymbol(nickname, MON_FEMALE))
+ {
+ gUnknown_03004824->unk_00c8.unk_12[a2 + 32 * a3 - 31] += 2;
+ }
+ }
+ }
+ else
+ {
+ gUnknown_03004824->unk_00c8.unk_12[a2 + 32 * a3 - 32] = gUnknown_03004824->unk_00c8.unk_12[a2 + 32 * a3 - 33];
+ gUnknown_03004824->unk_00c8.unk_12[a2 + 32 * a3 - 31] = gUnknown_03004824->unk_00c8.unk_12[a2 + 32 * a3 - 36] | 0x400;
+ }
+#ifdef GERMAN
+ gUnknown_03004824->unk_00c8.unk_10 = 1;
+#endif
+}
+
+#ifdef NONMATCHING
+static void sub_804A6DC(u8 whichParty)
+{
+ int i;
+ for (i = 0; i < gUnknown_03004824->partyCounts[whichParty]; i ++)
+ {
+ sub_804A51C(whichParty, i, gTradeLevelDisplayCoords[whichParty][i][0], gTradeLevelDisplayCoords[whichParty][i][1], gTradeMonBoxCoords[whichParty][i][0], gTradeMonBoxCoords[whichParty][i][1]);
+ }
+}
+#else
+__attribute__((naked))
+static void sub_804A6DC(u8 whichParty)
+{
+ asm_unified("\tpush {r4-r7,lr}\n"
+ "\tsub sp, 0x8\n"
+ "\tlsls r0, 24\n"
+ "\tlsrs r6, r0, 24\n"
+ "\tmovs r7, 0\n"
+ "\tldr r0, _0804A734 @ =gUnknown_03004824\n"
+ "\tldr r0, [r0]\n"
+ "\tadds r0, 0x42\n"
+ "\tadds r0, r6\n"
+ "\tldrb r0, [r0]\n"
+ "\tcmp r7, r0\n"
+ "\tbge _0804A72C\n"
+ "\tlsls r0, r6, 1\n"
+ "\tadds r0, r6\n"
+ "\tldr r1, _0804A738 @ =gTradeLevelDisplayCoords\n"
+ "\tlsls r0, 2\n"
+ "\tadds r5, r0, r1\n"
+ "\tldr r1, _0804A73C @ =gTradeMonBoxCoords\n"
+ "\tadds r4, r0, r1\n"
+ "_0804A702:\n"
+ "\tlsls r1, r7, 24\n"
+ "\tlsrs r1, 24\n"
+ "\tldrb r2, [r5]\n"
+ "\tldrb r3, [r5, 0x1]\n"
+ "\tldrb r0, [r4]\n"
+ "\tstr r0, [sp]\n"
+ "\tldrb r0, [r4, 0x1]\n"
+ "\tstr r0, [sp, 0x4]\n"
+ "\tadds r0, r6, 0\n"
+ "\tbl sub_804A51C\n"
+ "\tadds r5, 0x2\n"
+ "\tadds r4, 0x2\n"
+ "\tadds r7, 0x1\n"
+ "\tldr r0, _0804A734 @ =gUnknown_03004824\n"
+ "\tldr r0, [r0]\n"
+ "\tadds r0, 0x42\n"
+ "\tadds r0, r6\n"
+ "\tldrb r0, [r0]\n"
+ "\tcmp r7, r0\n"
+ "\tblt _0804A702\n"
+ "_0804A72C:\n"
+ "\tadd sp, 0x8\n"
+ "\tpop {r4-r7}\n"
+ "\tpop {r0}\n"
+ "\tbx r0\n"
+ "\t.align 2, 0\n"
+ "_0804A734: .4byte gUnknown_03004824\n"
+ "_0804A738: .4byte gTradeLevelDisplayCoords\n"
+ "_0804A73C: .4byte gTradeMonBoxCoords");
+}
+#endif
+
+static void sub_804A740(u8 whichParty)
+{
+ int i;
+ for (i = 0; i < gUnknown_03004824->partyCounts[whichParty]; i ++)
+ {
+ gSprites[gUnknown_03004824->partyIcons[whichParty][i]].invisible = FALSE;
+ gSprites[gUnknown_03004824->partyIcons[whichParty][i]].pos1.x = gTradeMonSpriteCoords[6 * whichParty + i][0] * 8 + 14;
+ gSprites[gUnknown_03004824->partyIcons[whichParty][i]].pos1.y = gTradeMonSpriteCoords[6 * whichParty + i][1] * 8 - 12;
+ gSprites[gUnknown_03004824->partyIcons[whichParty][i]].pos2.x = 0;
+ gSprites[gUnknown_03004824->partyIcons[whichParty][i]].pos2.y = 0;
+ }
+}
+
+static void sub_804A80C(void)
+{
+ FillWindowRect_DefaultPalette(&gUnknown_03004824->window, 0, gUnknown_0820C330[1][0], 0, gUnknown_0820C330[1][1], 19);
+ sub_804A41C(1);
+}
+
+static void sub_804A840(u8 whichParty)
+{
+ if (whichParty == 0)
+ {
+ FillWindowRect_DefaultPalette(&gUnknown_03004824->window, 0, gUnknown_0820C330[0][0], 0, gUnknown_0820C330[0][1], 19);
+ sub_804A96C_alt(&gUnknown_03004824->unk_00c8, 0, 0, gTradePartyBoxTilemap, 15, 17, 0);
+ sub_804A6DC(0);
+ sub_804A41C(0);
+ sub_804A740(0);
+ sub_804A938(&gUnknown_03004824->unk_00c8);
+ }
+ else
+ {
+ HandleDestroyMenuCursors();
+ FillWindowRect_DefaultPalette(&gUnknown_03004824->window, 0, gUnknown_0820C330[1][0], 0, gUnknown_0820C330[1][1], 19);
+ sub_804A96C_alt(&gUnknown_03004824->unk_00c8, 15, 0, gTradePartyBoxTilemap, 15, 17, 0);
+ sub_804A6DC(1);
+ sub_804A41C(1);
+ sub_804A740(1);
+ sub_804A938(&gUnknown_03004824->unk_00c8);
+ }
+ sub_804ACD8(gUnknown_0820C14C[1], (u8 *)(BG_CHAR_ADDR(4) + 32 * gUnknown_03004824->unk_007e), 20);
+ gUnknown_03004824->unk_0080[whichParty] = 0;
+}
+
+static void sub_804A938(struct UnkStructD *unkStructD)
+{
+ unkStructD->unk_10 = 1;
+}
+
+static void sub_804A940(struct UnkStructD *unkStructD)
+{
+ if (unkStructD->unk_10)
+ {
+ CpuCopy16(unkStructD->unk_12, unkStructD->vramAddr, sizeof(unkStructD->unk_12));
+ unkStructD->unk_10 = 0;
+ }
+}
+
+static void sub_804A964(struct UnkStructD *unkStructD, void *dest)
+{
+ unkStructD->unk_10 = 0;
+ unkStructD->vramAddr = dest;
+}
+
+static void sub_804A96C(struct UnkStructD *arg0, u8 left, u8 top, const u16 *tilemap, u8 width, u8 height, u16 sp8) {
+ int y, x;
+
+ for (y = 0; y < height; y++)
+ {
+
+ for (x = 0; x < width; x++)
+ {
+ arg0->unk_12[(top * 32 + left) + y * 32 + x] = tilemap[width * y + x] | sp8;
+ }
+ }
+
+#if ENGLISH
+ arg0->unk_10 = 1;
+#endif
+}
+
+#if GERMAN
+static void sub_804A96C_alt(struct UnkStructD *arg0, u8 left, u8 top, const u16 *tilemap, u8 width, u8 height, u16 sp8) {
+ sub_804A96C(arg0, left, top, tilemap, width, height, sp8);
+
+ arg0->unk_10 = 1;
+}
+#endif
+
+static void sub_804A9F4(u8 unused)
+{
+ MenuZeroFillScreen();
+}
+
+static void sub_804AA00(u8 unused)
+{
+ MenuZeroFillScreen();
+}
+
+static void sub_804AA0C(u8 a0)
+{
+ DrawTextWindow(&gUnknown_03004824->window, gTradeMessageWindowRects[a0][0], gTradeMessageWindowRects[a0][1], gTradeMessageWindowRects[a0][2], gTradeMessageWindowRects[a0][3]);
+ sub_8003460(&gUnknown_03004824->window, gUnknown_0820C2F0[a0], 0x180 + gUnknown_03004824->unk_007a, gTradeMessageWindowRects[a0][0] + 1, gTradeMessageWindowRects[a0][1] + 1);
+}
+
+static void sub_804AA88(void)
+{
+ int i;
+ for (i = 0; i < 4; i ++)
+ {
+ gUnknown_03004824->unk_08dc[i].unk_00 = 0;
+ gUnknown_03004824->unk_08dc[i].unk_02 = 0;
+ gUnknown_03004824->unk_08dc[i].unk_04 |= 0xff;
+ }
+}
+
+static void sub_804AADC(u16 a0, u8 a1)
+{
+ int i;
+ for (i = 0; i < 4; i ++)
+ {
+ if (gUnknown_03004824->unk_08dc[i].unk_00 == 0)
+ {
+ gUnknown_03004824->unk_08dc[i].unk_02 = a0;
+ gUnknown_03004824->unk_08dc[i].unk_04 = a1;
+ gUnknown_03004824->unk_08dc[i].unk_00 = 1;
+ break;
+ }
+ }
+}
+
+static void sub_804AB30(void)
+{
+ int i;
+ for (i = 0; i < 4; i ++)
+ {
+ if (gUnknown_03004824->unk_08dc[i].unk_00)
+ {
+ if (gUnknown_03004824->unk_08dc[i].unk_02 != 0)
+ {
+ gUnknown_03004824->unk_08dc[i].unk_02 --;
+ continue;
+ }
+ switch (gUnknown_03004824->unk_08dc[i].unk_04)
+ {
+ case 0:
+ Trade_SendData(gUnknown_03004824);
+ break;
+ case 1:
+ sub_804AA0C(0);
+ break;
+ case 2:
+ sub_804AA0C(2);
+ break;
+ case 3:
+ sub_804AA0C(3);
+ break;
+ case 4:
+ sub_804AA0C(3);
+ break;
+ case 5:
+ sub_804AA0C(3);
+ break;
+ }
+ gUnknown_03004824->unk_08dc[i].unk_00 = 0;
+ }
+ }
+}
+
+static bool8 sub_804ABF8(void)
+{
+ switch (gUnknown_03004824->unk_00b4)
+ {
+ case 8:
+ gUnknown_03004824->unk_007e = LoadSpriteSheet(&gUnknown_0820C07C[gUnknown_03004824->unk_00b4]);
+ gUnknown_03004824->unk_00b4 ++;
+ return FALSE;
+ case 13:
+ LoadSpritePalette(&gSpritePalette_TradeScreenText);
+ gUnknown_03004824->unk_00b4 ++;
+ return FALSE;
+ case 14:
+ LoadSpritePalette(&gUnknown_0820C12C);
+ gUnknown_03004824->unk_00b4 ++;
+ return FALSE;
+ case 15:
+ LoadSpriteSheet(&gUnknown_0820C124);
+ gUnknown_03004824->unk_00b4 ++;
+ // fallthrough
+ case 16:
+ gUnknown_03004824->unk_00b4 = 0;
+ return TRUE;
+ default:
+ LoadSpriteSheet(&gUnknown_0820C07C[gUnknown_03004824->unk_00b4]);
+ gUnknown_03004824->unk_00b4 ++;
+ return FALSE;
+ }
+}
+
+static void sub_804ACD8(const u8 *src, u8 *dest, u8 a2)
+{
+ sub_804AFB8(&gWindowConfig_81E725C, dest, src, a2);
+}
+
+#ifdef NONMATCHING
+static void sub_804ACF4(u8 who)
+{
+ struct Pokemon *pokemon;
+ int i;
+ switch (who)
+ {
+ case 0:
+ for (i = 0; i < gUnknown_03004824->partyCounts[0]; i ++)
+ {
+ pokemon = &gPlayerParty[i];
+ if (GetMonData(pokemon, MON_DATA_IS_EGG) == TRUE)
+ {
+ gUnknown_03004824->unk_0051[0][i] = 0;
+ gUnknown_03004824->unk_005d[0][i] = 1;
+ }
+ else if (GetMonData(pokemon, MON_DATA_HP) == 0)
+ {
+ gUnknown_03004824->unk_0051[0][i] = 0;
+ gUnknown_03004824->unk_005d[0][i] = 0;
+ }
+ else
+ {
+ gUnknown_03004824->unk_0051[0][i] = 1;
+ gUnknown_03004824->unk_005d[0][i] = 0;
+ }
+ }
+ break;
+ case 1:
+ for (i = 0; i < gUnknown_03004824->partyCounts[1]; i ++)
+ {
+ pokemon = &gEnemyParty[i];
+ if (GetMonData(pokemon, MON_DATA_IS_EGG) == TRUE)
+ {
+ gUnknown_03004824->unk_0051[1][i] = 0;
+ gUnknown_03004824->unk_005d[1][i] = 1;
+ }
+ else if (GetMonData(pokemon, MON_DATA_HP) == 0)
+ {
+ gUnknown_03004824->unk_0051[1][i] = 0;
+ gUnknown_03004824->unk_005d[1][i] = 0;
+ }
+ else
+ {
+ gUnknown_03004824->unk_0051[1][i] = 1;
+ gUnknown_03004824->unk_005d[1][i] = 0;
+ }
+ }
+ break;
+ }
+}
+#else
+static __attribute__((naked)) void sub_804ACF4(u8 who)
+{
+ asm_unified("\tpush {r4-r7,lr}\n"
+ "\tmov r7, r9\n"
+ "\tmov r6, r8\n"
+ "\tpush {r6,r7}\n"
+ "\tlsls r0, 24\n"
+ "\tlsrs r0, 24\n"
+ "\tmov r8, r0\n"
+ "\tcmp r0, 0\n"
+ "\tbeq _0804AD0C\n"
+ "\tcmp r0, 0x1\n"
+ "\tbeq _0804ADA0\n"
+ "\tb _0804AE2C\n"
+ "_0804AD0C:\n"
+ "\tmovs r7, 0\n"
+ "\tldr r1, _0804AD4C @ =gUnknown_03004824\n"
+ "\tldr r0, [r1]\n"
+ "\tadds r0, 0x42\n"
+ "\tldrb r0, [r0]\n"
+ "\tcmp r7, r0\n"
+ "\tblt _0804AD1C\n"
+ "\tb _0804AE2C\n"
+ "_0804AD1C:\n"
+ "\tadds r6, r1, 0\n"
+ "\tmovs r5, 0\n"
+ "\tmov r9, r5\n"
+ "_0804AD22:\n"
+ "\tmovs r0, 0x64\n"
+ "\tadds r1, r7, 0\n"
+ "\tmuls r1, r0\n"
+ "\tldr r0, _0804AD50 @ =gPlayerParty\n"
+ "\tadds r4, r1, r0\n"
+ "\tadds r0, r4, 0\n"
+ "\tmovs r1, 0x2D\n"
+ "\tbl GetMonData\n"
+ "\tadds r1, r0, 0\n"
+ "\tcmp r1, 0x1\n"
+ "\tbne _0804AD54\n"
+ "\tldr r0, [r6]\n"
+ "\tadds r0, 0x51\n"
+ "\tadds r0, r5\n"
+ "\tmov r2, r9\n"
+ "\tstrb r2, [r0]\n"
+ "\tldr r0, [r6]\n"
+ "\tadds r0, 0x5D\n"
+ "\tadds r0, r5\n"
+ "\tb _0804AD84\n"
+ "\t.align 2, 0\n"
+ "_0804AD4C: .4byte gUnknown_03004824\n"
+ "_0804AD50: .4byte gPlayerParty\n"
+ "_0804AD54:\n"
+ "\tadds r0, r4, 0\n"
+ "\tmovs r1, 0x39\n"
+ "\tbl GetMonData\n"
+ "\tadds r1, r0, 0\n"
+ "\tcmp r1, 0\n"
+ "\tbne _0804AD72\n"
+ "\tldr r0, [r6]\n"
+ "\tadds r0, 0x51\n"
+ "\tadds r0, r5\n"
+ "\tstrb r1, [r0]\n"
+ "\tldr r0, [r6]\n"
+ "\tadds r0, 0x5D\n"
+ "\tadds r0, r5\n"
+ "\tb _0804AD84\n"
+ "_0804AD72:\n"
+ "\tldr r0, [r6]\n"
+ "\tadds r0, 0x51\n"
+ "\tadds r0, r5\n"
+ "\tmovs r1, 0x1\n"
+ "\tstrb r1, [r0]\n"
+ "\tldr r0, [r6]\n"
+ "\tadds r0, 0x5D\n"
+ "\tadds r0, r5\n"
+ "\tmov r1, r9\n"
+ "_0804AD84:\n"
+ "\tstrb r1, [r0]\n"
+ "\tldr r0, _0804AD9C @ =gUnknown_03004824\n"
+ "\tadds r5, 0x1\n"
+ "\tadds r7, 0x1\n"
+ "\tldr r0, [r0]\n"
+ "\tadds r0, 0x42\n"
+ "\tadd r0, r8\n"
+ "\tldrb r0, [r0]\n"
+ "\tcmp r7, r0\n"
+ "\tblt _0804AD22\n"
+ "\tb _0804AE2C\n"
+ "\t.align 2, 0\n"
+ "_0804AD9C: .4byte gUnknown_03004824\n"
+ "_0804ADA0:\n"
+ "\tmovs r7, 0\n"
+ "\tldr r1, _0804ADE0 @ =gUnknown_03004824\n"
+ "\tldr r0, [r1]\n"
+ "\tadds r0, 0x43\n"
+ "\tldrb r0, [r0]\n"
+ "\tcmp r7, r0\n"
+ "\tbge _0804AE2C\n"
+ "\tadds r6, r1, 0\n"
+ "\tmovs r5, 0x6\n"
+ "\tmovs r2, 0\n"
+ "\tmov r9, r2\n"
+ "_0804ADB6:\n"
+ "\tmovs r0, 0x64\n"
+ "\tadds r1, r7, 0\n"
+ "\tmuls r1, r0\n"
+ "\tldr r0, _0804ADE4 @ =gEnemyParty\n"
+ "\tadds r4, r1, r0\n"
+ "\tadds r0, r4, 0\n"
+ "\tmovs r1, 0x2D\n"
+ "\tbl GetMonData\n"
+ "\tadds r1, r0, 0\n"
+ "\tcmp r1, 0x1\n"
+ "\tbne _0804ADE8\n"
+ "\tldr r0, [r6]\n"
+ "\tadds r0, 0x51\n"
+ "\tadds r0, r5\n"
+ "\tmov r2, r9\n"
+ "\tstrb r2, [r0]\n"
+ "\tldr r0, [r6]\n"
+ "\tadds r0, 0x5D\n"
+ "\tadds r0, r5\n"
+ "\tb _0804AE18\n"
+ "\t.align 2, 0\n"
+ "_0804ADE0: .4byte gUnknown_03004824\n"
+ "_0804ADE4: .4byte gEnemyParty\n"
+ "_0804ADE8:\n"
+ "\tadds r0, r4, 0\n"
+ "\tmovs r1, 0x39\n"
+ "\tbl GetMonData\n"
+ "\tadds r1, r0, 0\n"
+ "\tcmp r1, 0\n"
+ "\tbne _0804AE06\n"
+ "\tldr r0, [r6]\n"
+ "\tadds r0, 0x51\n"
+ "\tadds r0, r5\n"
+ "\tstrb r1, [r0]\n"
+ "\tldr r0, [r6]\n"
+ "\tadds r0, 0x5D\n"
+ "\tadds r0, r5\n"
+ "\tb _0804AE18\n"
+ "_0804AE06:\n"
+ "\tldr r0, [r6]\n"
+ "\tadds r0, 0x51\n"
+ "\tadds r0, r5\n"
+ "\tmovs r1, 0x1\n"
+ "\tstrb r1, [r0]\n"
+ "\tldr r0, [r6]\n"
+ "\tadds r0, 0x5D\n"
+ "\tadds r0, r5\n"
+ "\tmov r1, r9\n"
+ "_0804AE18:\n"
+ "\tstrb r1, [r0]\n"
+ "\tldr r0, _0804AE38 @ =gUnknown_03004824\n"
+ "\tadds r5, 0x1\n"
+ "\tadds r7, 0x1\n"
+ "\tldr r0, [r0]\n"
+ "\tadds r0, 0x42\n"
+ "\tadd r0, r8\n"
+ "\tldrb r0, [r0]\n"
+ "\tcmp r7, r0\n"
+ "\tblt _0804ADB6\n"
+ "_0804AE2C:\n"
+ "\tpop {r3,r4}\n"
+ "\tmov r8, r3\n"
+ "\tmov r9, r4\n"
+ "\tpop {r4-r7}\n"
+ "\tpop {r0}\n"
+ "\tbx r0\n"
+ "\t.align 2, 0\n"
+ "_0804AE38: .4byte gUnknown_03004824");
+}
+#endif
+
+static void sub_804AE3C(u8 who)
+{
+ u16 i;
+ u16 curHp;
+ u16 maxHp;
+ switch (who)
+ {
+ case 0:
+ for (i = 0; i < gUnknown_03004824->partyCounts[0]; i ++)
+ {
+ curHp = GetMonData(&gPlayerParty[i], MON_DATA_HP);
+ maxHp = GetMonData(&gPlayerParty[i], MON_DATA_MAX_HP);
+ gUnknown_03004824->unk_0069[0][i] = GetHPBarLevel(curHp, maxHp);
+ }
+ break;
+ case 1:
+ for (i = 0; i < gUnknown_03004824->partyCounts[1]; i ++)
+ {
+ curHp = GetMonData(&gEnemyParty[i], MON_DATA_HP);
+ maxHp = GetMonData(&gEnemyParty[i], MON_DATA_MAX_HP);
+ gUnknown_03004824->unk_0069[1][i] = GetHPBarLevel(curHp, maxHp);
+ }
+ break;
+ }
+}
+
+static void sub_804AF10(void)
+{
+ int i, j;
+ for (i = 0; i < 2; i ++)
+ {
+ for (j = 0; j < gUnknown_03004824->partyCounts[i]; j ++)
+ {
+ sub_809D824(&gSprites[gUnknown_03004824->partyIcons[i][j]], 4 - gUnknown_03004824->unk_0069[i][j]);
+ }
+ }
+}
+
+static void sub_804AF84(void)
+{
+ int i;
+ for (i = 0; i < 11; i ++)
+ if (gSaveBlock1.giftRibbons[i] == 0 && gUnknown_03004824->unk_00b5[i] != 0)
+ gSaveBlock1.giftRibbons[i] = gUnknown_03004824->unk_00b5[i];
+}
+
+static void sub_804AFB8(const struct WindowConfig *windowConfig, u8 *dest, const u8 *src, u8 size)
+{
+ u8 i;
+ u8 *tileBuffer;
+ size = (size + 3) / 4;
+ tileBuffer = gTileBuffer;
+ CpuFill16(0, tileBuffer, size * 0x80);
+ CpuFill16(0, tileBuffer + windowConfig->width * 0x20, size * 0x80);
+ sub_8004E3C(windowConfig, tileBuffer, src);
+ for (i = 0; i < size; i ++)
+ {
+ CpuCopy16(&tileBuffer[32 * (i * 4)], &dest[32 * (i * 8)], 0x80);
+ CpuCopy16(&tileBuffer[32 * (i * 4 + windowConfig->width)], &dest[32 * (i * 8 + 4)], 0x80);
+ }
+}
+
+static void sub_804B058(struct Sprite *sprite)
+{
+ if (++ sprite->data0 == 10)
+ {
+ PlaySE(SE_BOWA);
+ sprite->data0 = 0;
+ }
+}
+
+static void sub_804B07C(struct Sprite *sprite)
+{
+ if (sprite->data1 == 0)
+ {
+ if (++ sprite->data0 == 12)
+ sprite->data0 = 0;
+ LoadPalette(&gTradeGlow2PaletteAnimTable[sprite->data0], 16 * (sprite->oam.paletteNum + 16) + 4, 2);
+ }
+}
+
+static void sub_804B0BC(struct Sprite *sprite)
+{
+ sprite->data0 ++;
+ sprite->pos2.y ++;
+ if (sprite->data0 == 10)
+ DestroySprite(sprite);
+}
+
+static void sub_804B0E0(struct Sprite *sprite)
+{
+ sprite->data0 ++;
+ sprite->pos2.y --;
+ if (sprite->data0 == 10)
+ DestroySprite(sprite);
+}
+
+static void sub_804B104(struct Sprite *sprite)
+{
+ if (++ sprite->data0 == 15)
+ {
+ PlaySE(SE_W107);
+ sprite->data0 = 0;
+ }
+}
+
+static void sub_804B128(void)
+{
+ struct BgAffineDstData dest;
+ DoBgAffineSet(&dest, gUnknown_03004828->unk_0104 << 8, gUnknown_03004828->unk_0106 << 8, gUnknown_03004828->unk_010c, gUnknown_03004828->unk_010e, gUnknown_03004828->unk_0118, gUnknown_03004828->unk_0118, gUnknown_03004828->unk_011c);
+ REG_BG2PA = dest.pa;
+ REG_BG2PB = dest.pb;
+ REG_BG2PC = dest.pc;
+ REG_BG2PD = dest.pd;
+ REG_BG2X = dest.dx;
+ REG_BG2Y = dest.dy;
+}
+
+#ifdef NONMATCHING
+static void sub_804B1BC(void)
+{
+ REG_BG1VOFS = gUnknown_03004828->bg1vofs;
+ REG_BG1HOFS = gUnknown_03004828->bg1hofs;
+ if ((REG_DISPCNT & 7) == DISPCNT_MODE_0)
+ {
+ REG_BG2VOFS = gUnknown_03004828->bg2vofs;
+ REG_BG2HOFS = gUnknown_03004828->bg2hofs;
+ }
+ else
+ {
+ sub_804B128();
+ }
+}
+#else
+__attribute__((naked)) static void sub_804B1BC(void)
+{
+ asm_unified("\tpush {lr}\n"
+ "\tldr r1, _0804B1FC @ =REG_BG1VOFS\n"
+ "\tldr r0, _0804B200 @ =gUnknown_03004828\n"
+ "\tldr r2, [r0]\n"
+ "\tmovs r3, 0x88\n"
+ "\tlsls r3, 1\n"
+ "\tadds r0, r2, r3\n"
+ "\tldrh r0, [r0]\n"
+ "\tstrh r0, [r1]\n"
+ "\tsubs r1, 0x2\n"
+ "\tadds r3, 0x2\n"
+ "\tadds r0, r2, r3\n"
+ "\tldrh r0, [r0]\n"
+ "\tstrh r0, [r1]\n"
+ "\tmovs r0, 0x80\n"
+ "\tlsls r0, 19\n"
+ "\tldrh r0, [r0]\n"
+ "\tmovs r1, 0x7\n"
+ "\tands r0, r1\n"
+ "\tcmp r0, 0\n"
+ "\tbne _0804B208\n"
+ "\tldr r1, _0804B204 @ =REG_BG2VOFS\n"
+ "\tadds r3, 0x2\n"
+ "\tadds r0, r2, r3\n"
+ "\tldrh r0, [r0]\n"
+ "\tstrh r0, [r1]\n"
+ "\tsubs r1, 0x2\n"
+ "\tadds r3, 0x2\n"
+ "\tadds r0, r2, r3\n"
+ "\tldrh r0, [r0]\n"
+ "\tstrh r0, [r1]\n"
+ "\tb _0804B20C\n"
+ "\t.align 2, 0\n"
+ "_0804B1FC: .4byte REG_BG1VOFS\n"
+ "_0804B200: .4byte gUnknown_03004828\n"
+ "_0804B204: .4byte REG_BG2VOFS\n"
+ "_0804B208:\n"
+ "\tbl sub_804B128\n"
+ "_0804B20C:\n"
+ "\tpop {r0}\n"
+ "\tbx r0");
+}
+#endif
+
+static void sub_804B210(void)
+{
+ sub_804B1BC();
+ LoadOam();
+ ProcessSpriteCopyRequests();
+ TransferPlttBuffer();
+}
+
+static void sub_804B228(void)
+{
+ gUnknown_03004828->unk_00b4 = 0;
+ gUnknown_03004828->unk_00b2 = 0;
+ gUnknown_03004828->unk_00b3 = 0;
+}
+
+#ifdef NONMATCHING
+static
+#endif
+void sub_804B24C(void)
+{
+ if (gUnknown_03004828->unk_00b2 == gUnknown_03004828->unk_00b3)
+ {
+ gUnknown_03004828->unk_00b4 ++;
+ }
+ else
+ {
+ gUnknown_03004828->unk_00b4 = 0;
+ }
+ if (gUnknown_03004828->unk_00b4 > 0xb4)
+ {
+ gUnknown_03004828->unk_00b4 = 0;
+ gUnknown_03004828->unk_00b3 = 0;
+ gUnknown_03004828->unk_00b2 = 0;
+ }
+ gUnknown_03004828->unk_00b3 = gUnknown_03004828->unk_00b2;
+}
+
+static u8 sub_804B2B0(void)
+{
+ if (gReceivedRemoteLinkPlayers)
+ return GetMultiplayerId();
+ return 0;
+}
+
+static void sub_804B2D0(u8 whichParty, u8 a1)
+{
+ u8 v0;
+ struct Pokemon *pokemon;
+ u16 species;
+ u32 personality;
+
+ v0 = 0;
+ pokemon = NULL;
+ if (whichParty == 0)
+ {
+ pokemon = &gPlayerParty[gUnknown_020297D8[0]];
+ v0 = 1;
+ }
+ if (whichParty == 1)
+ {
+ pokemon = &gEnemyParty[gUnknown_020297D8[1] % 6];
+ v0 = 3;
+ }
+ switch (a1)
+ {
+ case 0:
+ species = GetMonData(pokemon, MON_DATA_SPECIES2);
+ personality = GetMonData(pokemon, MON_DATA_PERSONALITY);
+ HandleLoadSpecialPokePic(&gMonFrontPicTable[species], gMonFrontPicCoords[species].coords, gMonFrontPicCoords[species].y_offset, (u32)ewram, gUnknown_081FAF4C[whichParty * 2 + 1], species, personality);
+ LoadCompressedObjectPalette(GetMonSpritePalStruct(pokemon));
+ gUnknown_03004828->tradeSpecies[whichParty] = species;
+ break;
+ case 1:
+ GetMonSpriteTemplate_803C56C(GetMonSpritePalStruct(pokemon)->tag, v0);
+ gUnknown_03004828->pokePicSpriteIdxs[whichParty] = CreateSprite(&gUnknown_02024E8C, 0x78, 0x3c, 0x6);
+ gSprites[gUnknown_03004828->pokePicSpriteIdxs[whichParty]].invisible = TRUE;
+ gSprites[gUnknown_03004828->pokePicSpriteIdxs[whichParty]].callback = SpriteCallbackDummy;
+ break;
+ }
+}
+
+#ifdef NONMATCHING
+static void sub_804B41C(void)
+// Link trade init
+{
+ switch (gMain.state)
+ {
+ case 0:
+ REG_DISPCNT = 0;
+ ResetTasks();
+ CloseLink();
+ gUnknown_03004828 = &ewram_2010000.unk_0f000;
+ ResetSpriteData();
+ FreeAllSpritePalettes();
+ SetVBlankCallback(sub_804B210);
+ sub_804B228();
+ SetUpWindowConfig(&gWindowConfig_81E6F84);
+ InitWindowFromConfig(&gUnknown_03004828->window, &gWindowConfig_81E6F84);
+ gUnknown_03004828->textWindowBaseTileNum = SetTextWindowBaseTileNum(2);
+ LoadTextWindowGraphics(&gUnknown_03004828->window);
+ MenuZeroFillScreen();
+ gLinkType = 0x1144;
+ gMain.state ++;
+ LZDecompressVram(gUnknown_08D00000, (void *)VRAM);
+ CpuCopy16(gUnknown_08D00524, ewram, 0x1000);
+ DmaCopy16Defvars(3, ewram, (void *)BG_SCREEN_ADDR(5), 0x500);
+ LoadCompressedPalette(gUnknown_08D004E0, 0, 32);
+ gUnknown_03004828->unk_00b6 = 0;
+ gUnknown_03004828->unk_00c4 = 0;
+ gUnknown_03004828->isLinkTrade = TRUE;
+ gUnknown_03004828->unk_0104 = 0x40;
+ gUnknown_03004828->unk_0106 = 0x40;
+ gUnknown_03004828->unk_0108 = 0;
+ gUnknown_03004828->unk_010a = 0;
+ gUnknown_03004828->unk_010c = 0x78;
+ gUnknown_03004828->unk_010e = 0x50;
+ gUnknown_03004828->unk_0118 = 0x100;
+ gUnknown_03004828->unk_011c = 0;
+ break;
+ case 1:
+ OpenLink();
+ gMain.state ++;
+ gUnknown_03004828->unk_00c0 = 0;
+ break;
+ case 2:
+ if (++ gUnknown_03004828->unk_00c0 > 60)
+ {
+ gUnknown_03004828->unk_00c0 = 0;
+ gMain.state ++;
+ }
+ break;
+ case 3:
+ if (IsLinkMaster())
+ {
+ if (GetLinkPlayerCount_2() >= sub_800820C() && ++ gUnknown_03004828->unk_00c0 > 30)
+ {
+ sub_8007F4C();
+ gMain.state ++;
+ }
+ }
+ else
+ {
+ gMain.state ++;
+ }
+ break;
+ case 4:
+ sub_804B24C();
+ if (gReceivedRemoteLinkPlayers == TRUE && IsLinkPlayerDataExchangeComplete() == TRUE) gMain.state ++;
+ break;
+ case 5:
+ gUnknown_03004828->unk_009c = 0;
+ gUnknown_03004828->unk_009d = 0;
+ gUnknown_03004828->unk_00bd = 0;
+ sub_804B2D0(0, 0);
+ gMain.state ++;
+ break;
+ case 6:
+ sub_804B2D0(0, 1);
+ gMain.state ++;
+ break;
+ case 7:
+ sub_804B2D0(1, 0);
+ gMain.state ++;
+ break;
+ case 8:
+ sub_804B2D0(1, 1);
+ gMain.state ++;
+ break;
+ case 9:
+ sub_804C164();
+ LoadSpriteSheet(&gUnknown_0821594C);
+ LoadSpritePalette(&gUnknown_08215954);
+ REG_BG1CNT = BGCNT_PRIORITY(2) | BGCNT_SCREENBASE(5);
+ gMain.state ++;
+ break;
+ case 10:
+ gMain.state ++;
+ // fallthrough
+ case 11:
+ sub_804BBE8(5);
+ sub_804BBE8(0);
+ sub_804C1A8();
+ BeginNormalPaletteFade(-1, 0, 16, 0, 0);
+ gMain.state ++;
+ break;
+ case 12:
+ if (!gPaletteFade.active)
+ {
+ SetMainCallback2(sub_804DB84);
+ }
+ break;
+ }
+ RunTasks();
+ AnimateSprites();
+ BuildOamBuffer();
+ UpdatePaletteFade();
+}
+#else
+static __attribute__((naked)) void sub_804B41C(void)
+{
+ asm_unified("\tpush {r4-r6,lr}\n"
+ "\tsub sp, 0x4\n"
+ "\tldr r1, _0804B43C @ =gMain\n"
+ "\tldr r2, _0804B440 @ =0x0000043c\n"
+ "\tadds r0, r1, r2\n"
+ "\tldrb r0, [r0]\n"
+ "\tadds r2, r1, 0\n"
+ "\tcmp r0, 0xC\n"
+ "\tbls _0804B430\n"
+ "\tb _0804B76E_break\n"
+ "_0804B430:\n"
+ "\tlsls r0, 2\n"
+ "\tldr r1, _0804B444 @ =_0804B448\n"
+ "\tadds r0, r1\n"
+ "\tldr r0, [r0]\n"
+ "\tmov pc, r0\n"
+ "\t.align 2, 0\n"
+ "_0804B43C: .4byte gMain\n"
+ "_0804B440: .4byte 0x0000043c\n"
+ "_0804B444: .4byte _0804B448\n"
+ "\t.align 2, 0\n"
+ "_0804B448:\n"
+ "\t.4byte _0804B47C_case00\n"
+ "\t.4byte _0804B5AC_case01\n"
+ "\t.4byte _0804B5D4_case02\n"
+ "\t.4byte _0804B5FC_case03\n"
+ "\t.4byte _0804B648_case04\n"
+ "\t.4byte _0804B678_case05\n"
+ "\t.4byte _0804B6A8_case06\n"
+ "\t.4byte _0804B6B2_case07\n"
+ "\t.4byte _0804B6CC_case08\n"
+ "\t.4byte _0804B6E4_case09\n"
+ "\t.4byte _0804B71C_case10\n"
+ "\t.4byte _0804B726_case11\n"
+ "\t.4byte _0804B75C_case12\n"
+ "_0804B47C_case00:\n"
+ "\tmovs r1, 0x80\n"
+ "\tlsls r1, 19\n"
+ "\tmovs r0, 0\n"
+ "\tstrh r0, [r1]\n"
+ "\tbl ResetTasks\n"
+ "\tbl CloseLink\n"
+ "\tldr r6, _0804B570 @ =gUnknown_03004828\n"
+ "\tldr r5, _0804B574 @ =0x0201f000\n"
+ "\tstr r5, [r6]\n"
+ "\tbl ResetSpriteData\n"
+ "\tbl FreeAllSpritePalettes\n"
+ "\tldr r0, _0804B578 @ =sub_804B210\n"
+ "\tbl SetVBlankCallback\n"
+ "\tbl sub_804B228\n"
+ "\tldr r4, _0804B57C @ =gWindowConfig_81E6F84\n"
+ "\tadds r0, r4, 0\n"
+ "\tbl SetUpWindowConfig\n"
+ "\tldr r0, [r6]\n"
+ "\tadds r0, 0x4\n"
+ "\tadds r1, r4, 0\n"
+ "\tbl InitWindowFromConfig\n"
+ "\tmovs r0, 0x2\n"
+ "\tbl SetTextWindowBaseTileNum\n"
+ "\tldr r1, [r6]\n"
+ "\tadds r1, 0x34\n"
+ "\tstrb r0, [r1]\n"
+ "\tldr r0, [r6]\n"
+ "\tadds r0, 0x4\n"
+ "\tbl LoadTextWindowGraphics\n"
+ "\tbl MenuZeroFillScreen\n"
+ "\tldr r1, _0804B580 @ =gLinkType\n"
+ "\tldr r4, _0804B584 @ =0x00001144\n"
+ "\tadds r0, r4, 0\n"
+ "\tstrh r0, [r1]\n"
+ "\tldr r1, _0804B588 @ =gMain\n"
+ "\tldr r0, _0804B58C @ =0x0000043c\n"
+ "\tadds r1, r0\n"
+ "\tldrb r0, [r1]\n"
+ "\tadds r0, 0x1\n"
+ "\tstrb r0, [r1]\n"
+ "\tldr r0, _0804B590 @ =gUnknown_08D00000\n"
+ "\tmovs r1, 0xC0\n"
+ "\tlsls r1, 19\n"
+ "\tbl LZDecompressVram\n"
+ "\tldr r0, _0804B594 @ =gUnknown_08D00524\n"
+ "\tldr r1, _0804B598 @ =0xfffe1000\n"
+ "\tadds r5, r1\n"
+ "\tmovs r2, 0x80\n"
+ "\tlsls r2, 4\n"
+ "\tadds r1, r5, 0\n"
+ "\tbl CpuSet\n"
+ "\tldr r1, _0804B59C @ =0x06002800\n"
+ "\tldr r0, _0804B5A0 @ =0x040000d4\n"
+ "\tstr r5, [r0]\n"
+ "\tstr r1, [r0, 0x4]\n"
+ "\tldr r1, _0804B5A4 @ =0x80000280\n"
+ "\tstr r1, [r0, 0x8]\n"
+ "\tldr r0, [r0, 0x8]\n"
+ "\tldr r0, _0804B5A8 @ =gUnknown_08D004E0\n"
+ "\tmovs r1, 0\n"
+ "\tmovs r2, 0x20\n"
+ "\tbl LoadCompressedPalette\n"
+ "\tldr r1, [r6]\n"
+ "\tadds r0, r1, 0\n"
+ "\tadds r0, 0xB6\n"
+ "\tmovs r2, 0\n"
+ "\tstrh r2, [r0]\n"
+ "\tadds r0, 0xE\n"
+ "\tstrh r2, [r0]\n"
+ "\tmovs r4, 0x8F\n"
+ "\tlsls r4, 1\n"
+ "\tadds r1, r4\n"
+ "\tmovs r0, 0x1\n"
+ "\tstrb r0, [r1]\n"
+ "\tldr r3, [r6]\n"
+ "\tmovs r1, 0x82\n"
+ "\tlsls r1, 1\n"
+ "\tadds r0, r3, r1\n"
+ "\tmovs r1, 0x40\n"
+ "\tstrh r1, [r0]\n"
+ "\tsubs r4, 0x18\n"
+ "\tadds r0, r3, r4\n"
+ "\tstrh r1, [r0]\n"
+ "\tadds r1, 0xC8\n"
+ "\tadds r0, r3, r1\n"
+ "\tstrh r2, [r0]\n"
+ "\tadds r4, 0x4\n"
+ "\tadds r0, r3, r4\n"
+ "\tstrh r2, [r0]\n"
+ "\tmovs r0, 0x86\n"
+ "\tlsls r0, 1\n"
+ "\tadds r1, r3, r0\n"
+ "\tmovs r0, 0x78\n"
+ "\tstrh r0, [r1]\n"
+ "\tadds r4, 0x4\n"
+ "\tadds r1, r3, r4\n"
+ "\tmovs r0, 0x50\n"
+ "\tstrh r0, [r1]\n"
+ "\tadds r0, 0xC8\n"
+ "\tadds r1, r3, r0\n"
+ "\tsubs r0, 0x18\n"
+ "\tstrh r0, [r1]\n"
+ "\tmovs r1, 0x8E\n"
+ "\tlsls r1, 1\n"
+ "\tadds r0, r3, r1\n"
+ "\tstrh r2, [r0]\n"
+ "\tb _0804B76E_break\n"
+ "\t.align 2, 0\n"
+ "_0804B570: .4byte gUnknown_03004828\n"
+ "_0804B574: .4byte 0x0201f000\n"
+ "_0804B578: .4byte sub_804B210\n"
+ "_0804B57C: .4byte gWindowConfig_81E6F84\n"
+ "_0804B580: .4byte gLinkType\n"
+ "_0804B584: .4byte 0x00001144\n"
+ "_0804B588: .4byte gMain\n"
+ "_0804B58C: .4byte 0x0000043c\n"
+ "_0804B590: .4byte gUnknown_08D00000\n"
+ "_0804B594: .4byte gUnknown_08D00524\n"
+ "_0804B598: .4byte 0xfffe1000\n"
+ "_0804B59C: .4byte 0x06002800\n"
+ "_0804B5A0: .4byte 0x040000d4\n"
+ "_0804B5A4: .4byte 0x80000280\n"
+ "_0804B5A8: .4byte gUnknown_08D004E0\n"
+ "_0804B5AC_case01:\n"
+ "\tbl OpenLink\n"
+ "\tldr r1, _0804B5C8 @ =gMain\n"
+ "\tldr r2, _0804B5CC @ =0x0000043c\n"
+ "\tadds r1, r2\n"
+ "\tldrb r0, [r1]\n"
+ "\tadds r0, 0x1\n"
+ "\tmovs r2, 0\n"
+ "\tstrb r0, [r1]\n"
+ "\tldr r0, _0804B5D0 @ =gUnknown_03004828\n"
+ "\tldr r0, [r0]\n"
+ "\tadds r0, 0xC0\n"
+ "\tstr r2, [r0]\n"
+ "\tb _0804B76E_break\n"
+ "\t.align 2, 0\n"
+ "_0804B5C8: .4byte gMain\n"
+ "_0804B5CC: .4byte 0x0000043c\n"
+ "_0804B5D0: .4byte gUnknown_03004828\n"
+ "_0804B5D4_case02:\n"
+ "\tldr r0, _0804B5F4 @ =gUnknown_03004828\n"
+ "\tldr r0, [r0]\n"
+ "\tadds r1, r0, 0\n"
+ "\tadds r1, 0xC0\n"
+ "\tldr r0, [r1]\n"
+ "\tadds r0, 0x1\n"
+ "\tstr r0, [r1]\n"
+ "\tcmp r0, 0x3C\n"
+ "\tbhi _0804B5E8\n"
+ "\tb _0804B76E_break\n"
+ "_0804B5E8:\n"
+ "\tmovs r0, 0\n"
+ "\tstr r0, [r1]\n"
+ "\tldr r4, _0804B5F8 @ =0x0000043c\n"
+ "\tadds r1, r2, r4\n"
+ "\tb _0804B74C\n"
+ "\t.align 2, 0\n"
+ "_0804B5F4: .4byte gUnknown_03004828\n"
+ "_0804B5F8: .4byte 0x0000043c\n"
+ "_0804B5FC_case03:\n"
+ "\tbl IsLinkMaster\n"
+ "\tlsls r0, 24\n"
+ "\tcmp r0, 0\n"
+ "\tbne _0804B608\n"
+ "\tb _0804B746\n"
+ "_0804B608:\n"
+ "\tbl GetLinkPlayerCount_2\n"
+ "\tadds r4, r0, 0\n"
+ "\tbl sub_800820C\n"
+ "\tlsls r4, 24\n"
+ "\tlsls r0, 24\n"
+ "\tcmp r4, r0\n"
+ "\tbcs _0804B61C\n"
+ "\tb _0804B76E_break\n"
+ "_0804B61C:\n"
+ "\tldr r0, _0804B63C @ =gUnknown_03004828\n"
+ "\tldr r1, [r0]\n"
+ "\tadds r1, 0xC0\n"
+ "\tldr r0, [r1]\n"
+ "\tadds r0, 0x1\n"
+ "\tstr r0, [r1]\n"
+ "\tcmp r0, 0x1E\n"
+ "\tbhi _0804B62E\n"
+ "\tb _0804B76E_break\n"
+ "_0804B62E:\n"
+ "\tbl sub_8007F4C\n"
+ "\tldr r1, _0804B640 @ =gMain\n"
+ "\tldr r0, _0804B644 @ =0x0000043c\n"
+ "\tadds r1, r0\n"
+ "\tb _0804B74C\n"
+ "\t.align 2, 0\n"
+ "_0804B63C: .4byte gUnknown_03004828\n"
+ "_0804B640: .4byte gMain\n"
+ "_0804B644: .4byte 0x0000043c\n"
+ "_0804B648_case04:\n"
+ "\tbl sub_804B24C\n"
+ "\tldr r0, _0804B66C @ =gReceivedRemoteLinkPlayers\n"
+ "\tldrb r0, [r0]\n"
+ "\tcmp r0, 0x1\n"
+ "\tbeq _0804B656\n"
+ "\tb _0804B76E_break\n"
+ "_0804B656:\n"
+ "\tbl IsLinkPlayerDataExchangeComplete\n"
+ "\tlsls r0, 24\n"
+ "\tlsrs r0, 24\n"
+ "\tcmp r0, 0x1\n"
+ "\tbeq _0804B664\n"
+ "\tb _0804B76E_break\n"
+ "_0804B664:\n"
+ "\tldr r1, _0804B670 @ =gMain\n"
+ "\tldr r4, _0804B674 @ =0x0000043c\n"
+ "\tadds r1, r4\n"
+ "\tb _0804B74C\n"
+ "\t.align 2, 0\n"
+ "_0804B66C: .4byte gReceivedRemoteLinkPlayers\n"
+ "_0804B670: .4byte gMain\n"
+ "_0804B674: .4byte 0x0000043c\n"
+ "_0804B678_case05:\n"
+ "\tldr r2, _0804B69C @ =gUnknown_03004828\n"
+ "\tldr r0, [r2]\n"
+ "\tadds r0, 0x9C\n"
+ "\tmovs r1, 0\n"
+ "\tstrb r1, [r0]\n"
+ "\tldr r0, [r2]\n"
+ "\tadds r0, 0x9D\n"
+ "\tstrb r1, [r0]\n"
+ "\tldr r0, [r2]\n"
+ "\tadds r0, 0xBD\n"
+ "\tstrb r1, [r0]\n"
+ "\tmovs r0, 0\n"
+ "\tbl sub_804B2D0\n"
+ "\tldr r1, _0804B6A0 @ =gMain\n"
+ "\tldr r0, _0804B6A4 @ =0x0000043c\n"
+ "\tadds r1, r0\n"
+ "\tb _0804B74C\n"
+ "\t.align 2, 0\n"
+ "_0804B69C: .4byte gUnknown_03004828\n"
+ "_0804B6A0: .4byte gMain\n"
+ "_0804B6A4: .4byte 0x0000043c\n"
+ "_0804B6A8_case06:\n"
+ "\tmovs r0, 0\n"
+ "\tmovs r1, 0x1\n"
+ "\tbl sub_804B2D0\n"
+ "\tb _0804B746\n"
+ "_0804B6B2_case07:\n"
+ "\tmovs r0, 0x1\n"
+ "\tmovs r1, 0\n"
+ "\tbl sub_804B2D0\n"
+ "\tldr r1, _0804B6C4 @ =gMain\n"
+ "\tldr r4, _0804B6C8 @ =0x0000043c\n"
+ "\tadds r1, r4\n"
+ "\tb _0804B74C\n"
+ "\t.align 2, 0\n"
+ "_0804B6C4: .4byte gMain\n"
+ "_0804B6C8: .4byte 0x0000043c\n"
+ "_0804B6CC_case08:\n"
+ "\tmovs r0, 0x1\n"
+ "\tmovs r1, 0x1\n"
+ "\tbl sub_804B2D0\n"
+ "\tldr r1, _0804B6DC @ =gMain\n"
+ "\tldr r0, _0804B6E0 @ =0x0000043c\n"
+ "\tadds r1, r0\n"
+ "\tb _0804B74C\n"
+ "\t.align 2, 0\n"
+ "_0804B6DC: .4byte gMain\n"
+ "_0804B6E0: .4byte 0x0000043c\n"
+ "_0804B6E4_case09:\n"
+ "\tbl sub_804C164\n"
+ "\tldr r0, _0804B704 @ =gUnknown_0821594C\n"
+ "\tbl LoadSpriteSheet\n"
+ "\tldr r0, _0804B708 @ =gUnknown_08215954\n"
+ "\tbl LoadSpritePalette\n"
+ "\tldr r1, _0804B70C @ =REG_BG1CNT\n"
+ "\tldr r2, _0804B710 @ =0x00000502\n"
+ "\tadds r0, r2, 0\n"
+ "\tstrh r0, [r1]\n"
+ "\tldr r1, _0804B714 @ =gMain\n"
+ "\tldr r4, _0804B718 @ =0x0000043c\n"
+ "\tadds r1, r4\n"
+ "\tb _0804B74C\n"
+ "\t.align 2, 0\n"
+ "_0804B704: .4byte gUnknown_0821594C\n"
+ "_0804B708: .4byte gUnknown_08215954\n"
+ "_0804B70C: .4byte REG_BG1CNT\n"
+ "_0804B710: .4byte 0x00000502\n"
+ "_0804B714: .4byte gMain\n"
+ "_0804B718: .4byte 0x0000043c\n"
+ "_0804B71C_case10:\n"
+ "\tldr r0, _0804B754 @ =0x0000043c\n"
+ "\tadds r1, r2, r0\n"
+ "\tldrb r0, [r1]\n"
+ "\tadds r0, 0x1\n"
+ "\tstrb r0, [r1]\n"
+ "_0804B726_case11:\n"
+ "\tmovs r0, 0x5\n"
+ "\tbl sub_804BBE8\n"
+ "\tmovs r0, 0\n"
+ "\tbl sub_804BBE8\n"
+ "\tbl sub_804C1A8\n"
+ "\tmovs r0, 0x1\n"
+ "\tnegs r0, r0\n"
+ "\tmovs r1, 0\n"
+ "\tstr r1, [sp]\n"
+ "\tmovs r2, 0x10\n"
+ "\tmovs r3, 0\n"
+ "\tbl BeginNormalPaletteFade\n"
+ "_0804B746:\n"
+ "\tldr r1, _0804B758 @ =gMain\n"
+ "\tldr r2, _0804B754 @ =0x0000043c\n"
+ "\tadds r1, r2\n"
+ "_0804B74C:\n"
+ "\tldrb r0, [r1]\n"
+ "\tadds r0, 0x1\n"
+ "\tstrb r0, [r1]\n"
+ "\tb _0804B76E_break\n"
+ "\t.align 2, 0\n"
+ "_0804B754: .4byte 0x0000043c\n"
+ "_0804B758: .4byte gMain\n"
+ "_0804B75C_case12:\n"
+ "\tldr r0, _0804B788 @ =gPaletteFade\n"
+ "\tldrb r1, [r0, 0x7]\n"
+ "\tmovs r0, 0x80\n"
+ "\tands r0, r1\n"
+ "\tcmp r0, 0\n"
+ "\tbne _0804B76E_break\n"
+ "\tldr r0, _0804B78C @ =sub_804DB84\n"
+ "\tbl SetMainCallback2\n"
+ "_0804B76E_break:\n"
+ "\tbl RunTasks\n"
+ "\tbl AnimateSprites\n"
+ "\tbl BuildOamBuffer\n"
+ "\tbl UpdatePaletteFade\n"
+ "\tadd sp, 0x4\n"
+ "\tpop {r4-r6}\n"
+ "\tpop {r0}\n"
+ "\tbx r0\n"
+ "\t.align 2, 0\n"
+ "_0804B788: .4byte gPaletteFade\n"
+ "_0804B78C: .4byte sub_804DB84");
+}
+#endif
+
+static void sub_804B790(void)
+// In-game trade init
+{
+ u8 otName[11];
+ switch (gMain.state)
+ {
+ case 0:
+ gUnknown_020297D8[0] = gSpecialVar_0x8005;
+ gUnknown_020297D8[1] = 6;
+ StringCopy(gLinkPlayers[0].name, gSaveBlock2.playerName);
+ GetMonData(&gEnemyParty[0], MON_DATA_OT_NAME, otName);
+ StringCopy(gLinkPlayers[1].name, otName);
+ REG_DISPCNT = 0;
+ ResetTasks();
+ gUnknown_03004828 = &ewram_2010000.unk_0f000;
+ ResetSpriteData();
+ FreeAllSpritePalettes();
+ SetVBlankCallback(sub_804B210);
+ sub_804B228();
+ SetUpWindowConfig(&gWindowConfig_81E717C);
+ InitWindowFromConfig(&gUnknown_03004828->window, &gWindowConfig_81E717C);
+ gUnknown_03004828->textWindowBaseTileNum = SetTextWindowBaseTileNum(2);
+ LoadTextWindowGraphics(&gUnknown_03004828->window);
+ MenuZeroFillScreen();
+ gLinkType = 0x1144;
+ gUnknown_03004828->isLinkTrade = FALSE;
+ gUnknown_03004828->unk_00b6 = 0;
+ gUnknown_03004828->unk_00c4 = 0;
+ gUnknown_03004828->unk_0104 = 0x40;
+ gUnknown_03004828->unk_0106 = 0x40;
+ gUnknown_03004828->unk_0108 = 0;
+ gUnknown_03004828->unk_010a = 0;
+ gUnknown_03004828->unk_010c = 0x78;
+ gUnknown_03004828->unk_010e = 0x50;
+ gUnknown_03004828->unk_0118 = 0x100;
+ gUnknown_03004828->unk_011c = 0;
+ gUnknown_03004828->unk_00c0 = 0;
+ gMain.state = 5;
+ break;
+ case 5:
+ sub_804B2D0(0, 0);
+ gMain.state ++;
+ break;
+ case 6:
+ sub_804B2D0(0, 1);
+ gMain.state ++;
+ break;
+ case 7:
+ sub_804B2D0(1, 0);
+ gMain.state ++;
+ break;
+ case 8:
+ sub_804B2D0(1, 1);
+ gMain.state ++;
+ break;
+ case 9:
+ sub_804C164();
+ LoadSpriteSheet(&gUnknown_0821594C);
+ LoadSpritePalette(&gUnknown_08215954);
+ REG_BG1CNT = BGCNT_PRIORITY(2) | BGCNT_SCREENBASE(5);
+ gMain.state ++;
+ break;
+ case 10:
+ gMain.state ++;
+ // fallthrough
+ case 11:
+ sub_804BBE8(5);
+ sub_804BBE8(0);
+ sub_804C1A8();
+ BeginNormalPaletteFade(-1, 0, 16, 0, 0);
+ gMain.state ++;
+ break;
+ case 12:
+ if (!gPaletteFade.active)
+ {
+ SetMainCallback2(sub_804BBCC);
+ }
+ break;
+ }
+ RunTasks();
+ AnimateSprites();
+ BuildOamBuffer();
+ UpdatePaletteFade();
+}
+
+static void sub_804BA18(u8 partyIdx)
+{
+ struct Pokemon *pokemon = &gPlayerParty[partyIdx];
+ if (!GetMonData(pokemon, MON_DATA_IS_EGG))
+ {
+ u16 species = SpeciesToNationalPokedexNum(GetMonData(pokemon, MON_DATA_SPECIES, NULL));
+ GetSetPokedexFlag(species, 2);
+ GetSetPokedexFlag(species, 3);
+ }
+}
+
+static void sub_804BA64(void)
+{
+ u8 mpId = GetMultiplayerId();
+ if (gLinkPlayers[mpId ^ 1].lp_field_2 == 0x8000)
+ EnableNationalPokedex();
+}
+
+static void sub_804BA94(u8 a0, u8 a1)
+{
+ u8 friendship;
+ struct Pokemon *playerPokemon = &gPlayerParty[a0];
+ u16 playerMail = GetMonData(playerPokemon, MON_DATA_MAIL);
+
+ struct Pokemon *friendPokemon = &gEnemyParty[a1];
+ u16 friendMail = GetMonData(friendPokemon, MON_DATA_MAIL);
+
+ if (playerMail != 0xff)
+ ClearMailStruct(&gSaveBlock1.mail[playerMail]);
+
+ // This is where the actual trade happens!!
+ gUnknown_03004828->pokemon = *playerPokemon;
+ *playerPokemon = *friendPokemon;
+ *friendPokemon = gUnknown_03004828->pokemon;
+
+ friendship = 70;
+ if (!GetMonData(playerPokemon, MON_DATA_IS_EGG))
+ SetMonData(playerPokemon, MON_DATA_FRIENDSHIP, &friendship);
+
+ if (friendMail != 0xff)
+ GiveMailToMon2(playerPokemon, &gUnknown_02029700[friendMail]);
+
+ sub_804BA18(a0);
+ if (gReceivedRemoteLinkPlayers)
+ sub_804BA64();
+}
+
+static void sub_804BB78(void)
+{
+ switch (gUnknown_03004828->unk_00bd)
+ {
+ case 1:
+ if (sub_8007ECC())
+ {
+ Trade_SendData(gUnknown_03004828);
+ gUnknown_03004828->unk_00bd ++;
+ }
+ // fallthrough
+ case 2:
+ gUnknown_03004828->unk_00bd = 0;
+ break;
+ }
+}
+
+static void sub_804BBCC(void)
+{
+ sub_804C29C();
+ RunTasks();
+ AnimateSprites();
+ BuildOamBuffer();
+ UpdatePaletteFade();
+}
+
+static void sub_804BBE8(u8 a0)
+{
+ int i;
+ u16 *buffer;
+ switch (a0)
+ {
+ case 0:
+ LoadPalette(gUnknown_0820C9F8, 0x10, 0xa0);
+ DmaCopyLarge16(3, gUnknown_0820CA98, (void *)BG_CHAR_ADDR(1), 0x1300, 0x1000);
+ DmaCopy16Defvars(3, gUnknown_0820F798, (void *)BG_SCREEN_ADDR(18), 0x1000);
+ gUnknown_03004828->bg2vofs = 0;
+ gUnknown_03004828->bg2hofs = 0xb4;
+ REG_DISPCNT = DISPCNT_MODE_0 | DISPCNT_OBJ_1D_MAP | DISPCNT_BG0_ON | DISPCNT_BG1_ON | DISPCNT_BG2_ON | DISPCNT_OBJ_ON;
+ REG_BG2CNT = BGCNT_PRIORITY(2) | BGCNT_CHARBASE(1) | BGCNT_SCREENBASE(18) | BGCNT_TXT512x256;
+ break;
+ case 1:
+ gUnknown_03004828->bg1hofs = 0;
+ gUnknown_03004828->bg1vofs = 0x15c;
+ REG_BG1VOFS = 0x15c;
+ REG_BG1CNT = BGCNT_PRIORITY(2) | BGCNT_CHARBASE(0) | BGCNT_SCREENBASE(5) | BGCNT_TXT256x512;
+
+ DmaCopy16Defvars(3, gUnknown_08210798, (void *)BG_SCREEN_ADDR(5), 0x1000);
+ DmaCopyLarge16(3, gUnknown_0820CA98, (void *)BG_CHAR_ADDR(0), 0x1300, 0x1000);
+ REG_DISPCNT = DISPCNT_MODE_1 | DISPCNT_OBJ_1D_MAP | DISPCNT_BG1_ON | DISPCNT_OBJ_ON;
+ break;
+ case 2:
+ gUnknown_03004828->bg1vofs = 0;
+ gUnknown_03004828->bg1hofs = 0;
+ REG_DISPCNT = DISPCNT_MODE_1 | DISPCNT_OBJ_1D_MAP | DISPCNT_BG1_ON | DISPCNT_OBJ_ON;
+ DmaCopy16Defvars(3, gUnknown_08211798, (void *)BG_SCREEN_ADDR(5), 0x800);
+ break;
+ case 3:
+ REG_DISPCNT = DISPCNT_MODE_0 | DISPCNT_OBJ_1D_MAP | DISPCNT_BG1_ON | DISPCNT_OBJ_ON;
+ gUnknown_03004828->unk_0104 = 0x40;
+ gUnknown_03004828->unk_0106 = 0x40;
+ gUnknown_03004828->unk_010c = 0x78;
+ gUnknown_03004828->unk_010e = -0x46;
+ gUnknown_03004828->unk_011c = 0;
+ DmaCopyLarge16(3, gUnknown_0820DD98, (void *)BG_CHAR_ADDR(1), 0x1a00, 0x1000);
+ DmaCopy16Defvars(3, gUnknown_08211F98, (void *)BG_SCREEN_ADDR(18), 0x100);
+ break;
+ case 4:
+ REG_DISPCNT = DISPCNT_MODE_1 | DISPCNT_OBJ_1D_MAP | DISPCNT_BG2_ON | DISPCNT_OBJ_ON;
+ REG_BG2CNT = BGCNT_PRIORITY(3) | BGCNT_CHARBASE(1) | BGCNT_256COLOR | BGCNT_SCREENBASE(18);
+ gUnknown_03004828->unk_0104 = 0x40;
+ gUnknown_03004828->unk_0106 = 0x5c;
+ gUnknown_03004828->unk_0118 = 0x20;
+ gUnknown_03004828->unk_011a = 0x400;
+ gUnknown_03004828->unk_011c = 0;
+ DmaCopyLarge16(3, gUnknown_08213738, (void *)BG_CHAR_ADDR(1), 0x2040, 0x1000);
+ DmaCopy16Defvars(3, gUnknown_08215778, (void *)BG_SCREEN_ADDR(18), 0x100);
+ break;
+ case 5:
+ gUnknown_03004828->bg1vofs = 0;
+ gUnknown_03004828->bg1hofs = 0;
+ REG_BG1CNT = BGCNT_PRIORITY(2) | BGCNT_CHARBASE(0) | BGCNT_SCREENBASE(5);
+ LZDecompressVram(gUnknown_08D00000, (void *)BG_CHAR_ADDR(0));
+ CpuCopy16(gUnknown_08D00524, buffer = (u16 *)ewram, 0x1000);
+ LoadCompressedPalette(gUnknown_08D004E0, 0x70, 0x20);
+ FillPalette(0, 0, 2);
+ for (i = 0; i < 0x280; i ++)
+ buffer[i] |= 0x7000;
+ DmaCopy16Defvars(3, ewram, (void *)BG_SCREEN_ADDR(5), 0x500);
+ MenuZeroFillWindowRect(2, 15, 27, 18);
+ break;
+ case 6:
+ REG_DISPCNT = DISPCNT_MODE_1 | DISPCNT_OBJ_1D_MAP | DISPCNT_BG2_ON | DISPCNT_OBJ_ON;
+ REG_BG2CNT = BGCNT_PRIORITY(3) | BGCNT_CHARBASE(1) | BGCNT_256COLOR | BGCNT_SCREENBASE(18);
+ gUnknown_03004828->unk_0104 = 0x40;
+ gUnknown_03004828->unk_0106 = 0x5c;
+ gUnknown_03004828->unk_0118 = 0x100;
+ gUnknown_03004828->unk_011a = 0x80;
+ gUnknown_03004828->unk_010c = 0x78;
+ gUnknown_03004828->unk_010e = 0x50;
+ gUnknown_03004828->unk_011c = 0;
+ DmaCopyLarge16(3, gUnknown_08213738, (void *)BG_CHAR_ADDR(1), 0x2040, 0x1000);
+ DmaCopy16Defvars(3, gUnknown_08215778, (void *)BG_SCREEN_ADDR(18), 0x100);
+ break;
+ case 7:
+ gUnknown_03004828->bg2vofs = 0;
+ gUnknown_03004828->bg2hofs = 0;
+ REG_BG2CNT = BGCNT_PRIORITY(2) | BGCNT_CHARBASE(1) | BGCNT_SCREENBASE(18) | BGCNT_TXT512x256;
+ LoadPalette(gUnknown_0820C9F8, 0x10, 0xa0);
+ DmaCopyLarge16(3, gUnknown_0820CA98, (void *)BG_CHAR_ADDR(1), 0x1300, 0x1000);
+ DmaCopy16Defvars(3, gUnknown_0820F798, (void *)BG_SCREEN_ADDR(18), 0x1000);
+ break;
+ }
+}
+
+static void sub_804C0F8(u8 a0)
+{
+ if (a0 == 0)
+ {
+ if (gUnknown_03004828->bg1vofs < 0x10a)
+ {
+ gUnknown_03004828->unk_010e ++;
+ gUnknown_03004828->unk_011c += 64;
+ }
+ }
+ else
+ {
+ if (gUnknown_03004828->unk_010e > -0x40)
+ {
+ gUnknown_03004828->unk_010e --;
+ gUnknown_03004828->unk_011c += 64;
+ }
+ }
+}
+
+static void sub_804C164(void)
+{
+ LoadSpriteSheet(&gUnknown_082159A4);
+ LoadSpriteSheet(&gUnknown_082159F4);
+ LoadSpriteSheet(&gUnknown_08215A28);
+ LoadSpriteSheet(&gUnknown_08215A78);
+ LoadSpritePalette(&gUnknown_082159AC);
+ LoadSpritePalette(&gUnknown_082159B4);
+}
+
+static void sub_804C1A8(void)
+{
+ u8 mpId;
+ u8 string[20];
+ const struct InGameTrade *ingameTrade;
+ if (gUnknown_03004828->isLinkTrade)
+ {
+ mpId = GetMultiplayerId();
+ StringCopy(gStringVar1, gLinkPlayers[mpId ^ 1].name);
+ GetMonData(&gEnemyParty[gUnknown_020297D8[1] % 6], MON_DATA_NICKNAME, string);
+ StringCopy10(gStringVar3, string);
+ GetMonData(&gPlayerParty[gUnknown_020297D8[0]], MON_DATA_NICKNAME, string);
+ StringCopy10(gStringVar2, string);
+ }
+ else
+ {
+ ingameTrade = &gIngameTrades[gSpecialVar_0x8004];
+ StringCopy(gStringVar1, ingameTrade->otName);
+ StringCopy10(gStringVar3, ingameTrade->name);
+ GetMonData(&gPlayerParty[gSpecialVar_0x8005], MON_DATA_NICKNAME, string);
+ StringCopy10(gStringVar2, string);
+ }
+}
+
+static bool8 sub_804C29C(void)
+{
+ u16 evoTarget;
+
+ switch (gUnknown_03004828->unk_00c4)
+ {
+ case 0:
+ gSprites[gUnknown_03004828->pokePicSpriteIdxs[0]].invisible = FALSE;
+ gSprites[gUnknown_03004828->pokePicSpriteIdxs[0]].pos2.x = -0xb4;
+ gSprites[gUnknown_03004828->pokePicSpriteIdxs[0]].pos2.y = gMonFrontPicCoords[gUnknown_03004828->tradeSpecies[0]].y_offset;
+ gUnknown_03004828->unk_00c4 ++;
+ gUnknown_03004828->unk_0124 = GetCurrentMapMusic();
+ PlayBGM(BGM_SHINKA);
+ break;
+ case 1:
+ if (gUnknown_03004828->bg2hofs > 0)
+ {
+ gSprites[gUnknown_03004828->pokePicSpriteIdxs[0]].pos2.x += 3;
+ gUnknown_03004828->bg2hofs -= 3;
+ }
+ else
+ {
+ gSprites[gUnknown_03004828->pokePicSpriteIdxs[0]].pos2.x = 0;
+ gUnknown_03004828->bg2hofs = 0;
+ gUnknown_03004828->unk_00c4 = 10;
+ }
+ break;
+
+ case 10:
+ StringExpandPlaceholders(gStringVar4, gTradeText_WillBeSent);
+ sub_8003460(&gUnknown_03004828->window, gStringVar4, gUnknown_03004828->textWindowBaseTileNum, 2, 15);
+ gUnknown_03004828->unk_00c4 = 11;
+ gUnknown_03004828->unk_00c0 = 0;
+ break;
+ case 11:
+ if (++gUnknown_03004828->unk_00c0 == 80)
+ {
+ gUnknown_03004828->unk_0102 = sub_8047580(gUnknown_03004828->pokePicSpriteIdxs[0], gSprites[gUnknown_03004828->pokePicSpriteIdxs[0]].oam.paletteNum, 0x78, 0x20, 0x2, 0x1, 0x14, 0xfffff);
+ gUnknown_03004828->unk_00c4 ++;
+ ZeroFillWindowRect(&gUnknown_03004828->window, 0, 0, 29, 19);
+ StringExpandPlaceholders(gStringVar4, gTradeText_ByeBye);
+ sub_8003460(&gUnknown_03004828->window, gStringVar4, gUnknown_03004828->textWindowBaseTileNum, 2, 15);
+ }
+ break;
+ case 12:
+ if (gSprites[gUnknown_03004828->unk_0102].callback == SpriteCallbackDummy && sub_80035AC(&gUnknown_03004828->window) == TRUE)
+ {
+ gUnknown_03004828->unk_0103 = CreateSprite(&gSpriteTemplate_821595C, 0x78, 0x20, 0);
+ gSprites[gUnknown_03004828->unk_0103].callback = sub_804D738;
+ DestroySprite(&gSprites[gUnknown_03004828->unk_0102]);
+ gUnknown_03004828->unk_00c4 ++;
+ }
+ break;
+ case 13:
+ // The game waits here for the sprite to finish its animation sequence.
+ break;
+ case 14:
+ BeginNormalPaletteFade(-1, 0, 0, 16, 0);
+ gUnknown_03004828->unk_00c4 = 20;
+ break;
+
+ case 20:
+ if (!gPaletteFade.active)
+ {
+ sub_804BBE8(4);
+ gUnknown_03004828->unk_00c4 ++;
+ }
+ break;
+ case 21:
+ BeginNormalPaletteFade(-1, -1, 16, 0, 0);
+ gUnknown_03004828->unk_00c4 ++;
+ break;
+ case 22:
+ if (!gPaletteFade.active)
+ {
+ gUnknown_03004828->unk_00c4 = 23;
+ }
+ break;
+ case 23:
+ if (gUnknown_03004828->unk_011a > 0x100)
+ {
+ gUnknown_03004828->unk_011a -= 0x34;
+ }
+ else
+ {
+ sub_804BBE8(1);
+ gUnknown_03004828->unk_011a = 0x80;
+ gUnknown_03004828->unk_00c4 ++;
+ gUnknown_03004828->unk_00c0 = 0;
+ }
+ gUnknown_03004828->unk_0118 = 0x8000 / gUnknown_03004828->unk_011a;
+ break;
+ case 24:
+ if (++ gUnknown_03004828->unk_00c0 > 20)
+ {
+ sub_804BBE8(3);
+ sub_804B128();
+ gUnknown_03004828->unk_00bb = CreateSprite(&gSpriteTemplate_8215A80, 0x78, 0x50, 0);
+ gUnknown_03004828->unk_00c4 ++;
+ }
+ break;
+ case 25:
+ if (gSprites[gUnknown_03004828->unk_00bb].animEnded)
+ {
+ DestroySprite(&gSprites[gUnknown_03004828->unk_00bb]);
+ REG_BLDCNT = 0x640;
+ REG_BLDALPHA = 0x40C;
+ gUnknown_03004828->unk_00c4 ++;
+ }
+ break;
+ case 26:
+ if (-- gUnknown_03004828->bg1vofs == 0x13C)
+ {
+ gUnknown_03004828->unk_00c4 ++;
+ }
+ if (gUnknown_03004828->bg1vofs == 0x148)
+ {
+ gUnknown_03004828->unk_00bc = CreateSprite(&gSpriteTemplate_8215A30, 0x80, 0x41, 0);
+ }
+ break;
+ case 27:
+ gUnknown_03004828->unk_00ba = CreateSprite(&gSpriteTemplate_82159BC, 0x80, 0x50, 3);
+ gUnknown_03004828->unk_00bb = CreateSprite(&gSpriteTemplate_82159FC, 0x80, 0x50, 0);
+ StartSpriteAnim(&gSprites[gUnknown_03004828->unk_00bb], 1);
+ gUnknown_03004828->unk_00c4 ++;
+ break;
+ case 28:
+ if ((gUnknown_03004828->bg1vofs -= 2) == 0xA6)
+ {
+ gUnknown_03004828->unk_00c4 = 200;
+ }
+ sub_804C0F8(0);
+ REG_DISPCNT = DISPCNT_MODE_1 | DISPCNT_OBJ_1D_MAP | DISPCNT_BG1_ON | DISPCNT_BG2_ON | DISPCNT_OBJ_ON;
+ break;
+ case 200:
+ gSprites[gUnknown_03004828->unk_00ba].pos1.y -= 2;
+ gSprites[gUnknown_03004828->unk_00bb].pos1.y -= 2;
+ sub_804C0F8(0);
+ if (gSprites[gUnknown_03004828->unk_00ba].pos1.y < -8)
+ {
+ gUnknown_03004828->unk_00c4 = 29;
+ }
+ break;
+ case 29:
+ BeginNormalPaletteFade(-1, -1, 0, 16, 0);
+ gUnknown_03004828->unk_00c4 = 30;
+ break;
+ case 30:
+ if (!gPaletteFade.active)
+ {
+ DestroySprite(&gSprites[gUnknown_03004828->unk_00ba]);
+ DestroySprite(&gSprites[gUnknown_03004828->unk_00bb]);
+ sub_804BBE8(2);
+ gUnknown_03004828->unk_00c4 ++;
+ }
+ break;
+ case 31:
+ BeginNormalPaletteFade(-1, -1, 16, 0, 0);
+ gUnknown_03004828->unk_00ba = CreateSprite(&gSpriteTemplate_82159FC, 0x6f, 0xaa, 0);
+ gUnknown_03004828->unk_00bb = CreateSprite(&gSpriteTemplate_82159FC, 0x81, -0xa, 0);
+ gUnknown_03004828->unk_00c4 ++;
+ break;
+ case 32:
+ if (!gPaletteFade.active)
+ {
+ PlaySE(SE_TK_WARPOUT);
+ gUnknown_03004828->unk_00c4 ++;
+ }
+ gSprites[gUnknown_03004828->unk_00ba].pos2.y -= 3;
+ gSprites[gUnknown_03004828->unk_00bb].pos2.y += 3;
+ break;
+ case 33:
+ gSprites[gUnknown_03004828->unk_00ba].pos2.y -= 3;
+ gSprites[gUnknown_03004828->unk_00bb].pos2.y += 3;
+ if (gSprites[gUnknown_03004828->unk_00ba].pos2.y <= -0x5a)
+ {
+ gSprites[gUnknown_03004828->unk_00ba].data1 = 1;
+ gSprites[gUnknown_03004828->unk_00bb].data1 = 1;
+ gUnknown_03004828->unk_00c4 ++;
+ }
+ break;
+ case 34:
+ BlendPalettes(1, 16, 0xffff);
+ gUnknown_03004828->unk_00c4 ++;
+ break;
+ case 35:
+ BlendPalettes(1, 0, 0xffff);
+ gUnknown_03004828->unk_00c4 ++;
+ break;
+ case 36:
+ BlendPalettes(1, 16, 0xffff);
+ gUnknown_03004828->unk_00c4 ++;
+ break;
+ case 37:
+ if (!IsPokeSpriteNotFlipped(gUnknown_03004828->tradeSpecies[0]))
+ {
+ gSprites[gUnknown_03004828->pokePicSpriteIdxs[0]].affineAnims = gSpriteAffineAnimTable_8215AC0;
+ gSprites[gUnknown_03004828->pokePicSpriteIdxs[0]].oam.affineMode = 3;
+ CalcCenterToCornerVec(&gSprites[gUnknown_03004828->pokePicSpriteIdxs[0]], 0, 3, 3);
+ StartSpriteAffineAnim(&gSprites[gUnknown_03004828->pokePicSpriteIdxs[0]], 0);
+ }
+ else
+ {
+ StartSpriteAffineAnim(&gSprites[gUnknown_03004828->pokePicSpriteIdxs[0]], 0);
+ }
+ StartSpriteAffineAnim(&gSprites[gUnknown_03004828->pokePicSpriteIdxs[1]], 0);
+ gSprites[gUnknown_03004828->pokePicSpriteIdxs[0]].pos1.x = 0x3c;
+ gSprites[gUnknown_03004828->pokePicSpriteIdxs[1]].pos1.x = 0xb4;
+ gSprites[gUnknown_03004828->pokePicSpriteIdxs[0]].pos1.y = 0xc0;
+ gSprites[gUnknown_03004828->pokePicSpriteIdxs[1]].pos1.y = -0x20;
+ gSprites[gUnknown_03004828->pokePicSpriteIdxs[0]].invisible = FALSE;
+ gSprites[gUnknown_03004828->pokePicSpriteIdxs[1]].invisible = FALSE;
+ gUnknown_03004828->unk_00c4 ++;
+ break;
+ case 38:
+ gSprites[gUnknown_03004828->pokePicSpriteIdxs[0]].pos2.y -= 3;
+ gSprites[gUnknown_03004828->pokePicSpriteIdxs[1]].pos2.y += 3;
+ if (-0xa0 > gSprites[gUnknown_03004828->pokePicSpriteIdxs[0]].pos2.y && gSprites[gUnknown_03004828->pokePicSpriteIdxs[0]].pos2.y >= -0xa3)
+ {
+ PlaySE(SE_TK_WARPIN);
+ }
+ if (gSprites[gUnknown_03004828->pokePicSpriteIdxs[0]].pos2.y < -0xde)
+ {
+ gSprites[gUnknown_03004828->unk_00ba].data1 = 0;
+ gSprites[gUnknown_03004828->unk_00bb].data1 = 0;
+ gUnknown_03004828->unk_00c4 ++;
+ gSprites[gUnknown_03004828->pokePicSpriteIdxs[0]].invisible = TRUE;
+ gSprites[gUnknown_03004828->pokePicSpriteIdxs[1]].invisible = TRUE;
+ BlendPalettes(1, 0, 0xffff);
+ }
+ break;
+ case 39:
+ gSprites[gUnknown_03004828->unk_00ba].pos2.y -= 3;
+ gSprites[gUnknown_03004828->unk_00bb].pos2.y += 3;
+ if (gSprites[gUnknown_03004828->unk_00ba].pos2.y <= -0xde)
+ {
+ BeginNormalPaletteFade(-1, -1, 0, 16, 0);
+ gUnknown_03004828->unk_00c4 ++;
+ DestroySprite(&gSprites[gUnknown_03004828->unk_00ba]);
+ DestroySprite(&gSprites[gUnknown_03004828->unk_00bb]);
+ }
+ break;
+ case 40:
+ if (!gPaletteFade.active)
+ {
+ gUnknown_03004828->unk_00c4 ++;
+ sub_804BBE8(1);
+ gUnknown_03004828->bg1vofs = 0xa6;
+ gUnknown_03004828->unk_00ba = CreateSprite(&gSpriteTemplate_82159BC, 0x80, -0x14, 3);
+ gUnknown_03004828->unk_00bb = CreateSprite(&gSpriteTemplate_82159FC, 0x80, -0x14, 0);
+ StartSpriteAnim(&gSprites[gUnknown_03004828->unk_00bb], 1);
+ }
+ break;
+ case 41:
+ BeginNormalPaletteFade(-1, -1, 16, 0, 0);
+ gUnknown_03004828->unk_00c4 ++;
+ break;
+ case 42:
+ REG_DISPCNT = DISPCNT_MODE_1 | DISPCNT_OBJ_1D_MAP | DISPCNT_BG1_ON | DISPCNT_BG2_ON | DISPCNT_OBJ_ON;
+ sub_804C0F8(1);
+ if (!gPaletteFade.active)
+ {
+ gUnknown_03004828->unk_00c4 ++;
+ }
+ break;
+ case 43:
+ sub_804C0F8(1);
+ gSprites[gUnknown_03004828->unk_00ba].pos2.y += 3;
+ gSprites[gUnknown_03004828->unk_00bb].pos2.y += 3;
+ if (gSprites[gUnknown_03004828->unk_00ba].pos2.y + gSprites[gUnknown_03004828->unk_00ba].pos1.y == 64)
+ {
+ gUnknown_03004828->unk_00c4 ++;
+ }
+ break;
+ case 44:
+ sub_804C0F8(1);
+ if ((gUnknown_03004828->bg1vofs += 2) > 0x13c)
+ {
+ gUnknown_03004828->bg1vofs = 0x13c;
+ gUnknown_03004828->unk_00c4 ++;
+ }
+ break;
+ case 45:
+ DestroySprite(&gSprites[gUnknown_03004828->unk_00ba]);
+ DestroySprite(&gSprites[gUnknown_03004828->unk_00bb]);
+ gUnknown_03004828->unk_00c4 ++;
+ gUnknown_03004828->unk_00c0 = 0;
+ break;
+ case 46:
+ if (++ gUnknown_03004828->unk_00c0 == 10)
+ {
+ gUnknown_03004828->unk_00c4 ++;
+ }
+ break;
+ case 47:
+ if (++ gUnknown_03004828->bg1vofs > 0x15c)
+ {
+ gUnknown_03004828->bg1vofs = 0x15c;
+ gUnknown_03004828->unk_00c4 ++;
+ }
+ if (gUnknown_03004828->bg1vofs == 0x148)
+ gUnknown_03004828->unk_00bc = CreateSprite(&gSpriteTemplate_8215A30, 0x80, 0x41, 0);
+ gSprites[gUnknown_03004828->unk_00bc].callback = sub_804B0E0;
+ break;
+ case 48:
+ gUnknown_03004828->unk_00bb = CreateSprite(&gSpriteTemplate_8215A80, 0x78, 0x50, 0);
+ gUnknown_03004828->unk_00c4 = 50;
+ break;
+
+ case 50:
+ if (gSprites[gUnknown_03004828->unk_00bb].animEnded)
+ {
+ DestroySprite(&gSprites[gUnknown_03004828->unk_00bb]);
+ sub_804BBE8(6);
+ gUnknown_03004828->unk_00c4 ++;
+ PlaySE(SE_W028);
+ }
+ break;
+ case 51:
+ if (gUnknown_03004828->unk_011a < 0x400)
+ {
+ gUnknown_03004828->unk_011a += 0x34;
+ }
+ else
+ {
+ gUnknown_03004828->unk_011a = 0x400;
+ gUnknown_03004828->unk_00c4 ++;
+ }
+ gUnknown_03004828->unk_0118 = 0x8000 / gUnknown_03004828->unk_011a;
+ break;
+ case 52:
+ BeginNormalPaletteFade(-1, 0, 0, 16, 0);
+ gUnknown_03004828->unk_00c4 = 60;
+ break;
+
+ case 60:
+ if (!gPaletteFade.active)
+ {
+ sub_804BBE8(5);
+ sub_804BBE8(7);
+ gUnknown_03004828->unk_00c4 ++;
+ }
+ break;
+ case 61:
+ BeginNormalPaletteFade(-1, 0, 16, 0, 0);
+ gUnknown_03004828->unk_00c4 ++;
+ break;
+ case 62:
+ REG_DISPCNT = DISPCNT_MODE_0 | DISPCNT_OBJ_1D_MAP | DISPCNT_BG2_ON | DISPCNT_OBJ_ON;
+ if (!gPaletteFade.active)
+ {
+ gUnknown_03004828->unk_00c4 ++;
+ }
+ break;
+ case 63:
+ gUnknown_03004828->unk_0103 = CreateSprite(&gSpriteTemplate_821595C, 0x78, -0x8, 0);
+ gSprites[gUnknown_03004828->unk_0103].data3 = 0x4a;
+ gSprites[gUnknown_03004828->unk_0103].callback = sub_804D80C;
+ StartSpriteAnim(&gSprites[gUnknown_03004828->unk_0103], 1);
+ StartSpriteAffineAnim(&gSprites[gUnknown_03004828->unk_0103], 2);
+ BlendPalettes(1 << (16 + gSprites[gUnknown_03004828->unk_0103].oam.paletteNum), 16, 0xffff);
+ gUnknown_03004828->unk_00c4 ++;
+ gUnknown_03004828->unk_00c0 = 0;
+ break;
+ case 64:
+ BeginNormalPaletteFade(1 << (16 + gSprites[gUnknown_03004828->unk_0103].oam.paletteNum), 1, 16, 0, 0xffff);
+ gUnknown_03004828->unk_00c4 ++;
+ break;
+ case 65:
+ if (gSprites[gUnknown_03004828->unk_0103].callback == SpriteCallbackDummy)
+ {
+ gUnknown_03004828->unk_00c4 ++;
+ }
+ break;
+ case 66:
+ gSprites[gUnknown_03004828->pokePicSpriteIdxs[1]].pos1.x = 0x78;
+ gSprites[gUnknown_03004828->pokePicSpriteIdxs[1]].pos1.y = gMonFrontPicCoords[gUnknown_03004828->tradeSpecies[1]].y_offset + 60;
+ gSprites[gUnknown_03004828->pokePicSpriteIdxs[1]].pos2.x = 0;
+ gSprites[gUnknown_03004828->pokePicSpriteIdxs[1]].pos2.y = 0;
+ CreatePokeballSprite(gUnknown_03004828->pokePicSpriteIdxs[1], gSprites[gUnknown_03004828->pokePicSpriteIdxs[1]].oam.paletteNum, 0x78, 0x54, 2, 1, 0x14, 0xfffff);
+ FreeSpriteOamMatrix(&gSprites[gUnknown_03004828->unk_0103]);
+ DestroySprite(&gSprites[gUnknown_03004828->unk_0103]);
+ gUnknown_03004828->unk_00c4 ++;
+ break;
+ case 67:
+ REG_DISPCNT = DISPCNT_MODE_0 | DISPCNT_OBJ_1D_MAP | DISPCNT_BG0_ON | DISPCNT_BG1_ON | DISPCNT_BG2_ON | DISPCNT_OBJ_ON;
+ ZeroFillWindowRect(&gUnknown_03004828->window, 0, 0, 29, 19);
+ StringExpandPlaceholders(gStringVar4, gTradeText_SentOverPoke);
+ sub_8003460(&gUnknown_03004828->window, gStringVar4, gUnknown_03004828->textWindowBaseTileNum, 2, 15);
+ gUnknown_03004828->unk_00c4 ++;
+ gUnknown_03004828->unk_00c0 = 0;
+ break;
+ case 68:
+ if (++ gUnknown_03004828->unk_00c0 == 4)
+ {
+ PlayFanfare(BGM_FANFA5);
+ }
+ if (gUnknown_03004828->unk_00c0 == 0xf0)
+ {
+ gUnknown_03004828->unk_00c4 ++;
+ ZeroFillWindowRect(&gUnknown_03004828->window, 0, 0, 29, 19);
+ StringExpandPlaceholders(gStringVar4, gTradeText_TakeGoodCare);
+ sub_8003460(&gUnknown_03004828->window, gStringVar4, gUnknown_03004828->textWindowBaseTileNum, 2, 15);
+ gUnknown_03004828->unk_00c0 = 0;
+ }
+ break;
+ case 69: // OneHand
+ if (++ gUnknown_03004828->unk_00c0 == 60)
+ {
+ gUnknown_03004828->unk_00c4 ++;
+ }
+ break;
+ case 70:
+ sub_804E1DC();
+ gUnknown_03004828->unk_00c4 ++;
+ break;
+ case 71:
+ if (gUnknown_03004828->isLinkTrade)
+ {
+ return TRUE;
+ }
+ else if (gMain.newKeys & A_BUTTON)
+ {
+ gUnknown_03004828->unk_00c4 ++;
+ }
+ break;
+ case 72: // Only if in-game trade
+ sub_804BA94(gSpecialVar_0x8005, 0);
+ gCB2_AfterEvolution = sub_804BBCC;
+ evoTarget = GetEvolutionTargetSpecies(&gPlayerParty[gUnknown_020297D8[0]], TRUE, ITEM_NONE);
+ if (evoTarget != SPECIES_NONE)
+ TradeEvolutionScene(&gPlayerParty[gUnknown_020297D8[0]], evoTarget, gUnknown_03004828->pokePicSpriteIdxs[1], gUnknown_020297D8[0]);
+ gUnknown_03004828->unk_00c4 ++;
+ break;
+ case 73:
+ BeginNormalPaletteFade(-1, 0, 0, 16, 0);
+ gUnknown_03004828->unk_00c4 ++;
+ break;
+ case 74:
+ if (!gPaletteFade.active)
+ {
+ PlayBGM(gUnknown_03004828->unk_0124);
+ SetMainCallback2(c2_exit_to_overworld_2_switch);
+ sub_804D8E4();
+ }
+ break;
+ }
+ return FALSE;
+}
+
+static void sub_804D588(void)
+{
+ u16 evoTarget;
+ switch (gMain.state)
+ {
+ case 0:
+ gMain.state = 4;
+ gSoftResetDisabled = TRUE;
+ break;
+ case 4:
+ gCB2_AfterEvolution = sub_804DC88;
+ evoTarget = GetEvolutionTargetSpecies(&gPlayerParty[gUnknown_020297D8[0]], TRUE, ITEM_NONE);
+ if (evoTarget != SPECIES_NONE)
+ TradeEvolutionScene(&gPlayerParty[gUnknown_020297D8[0]], evoTarget, gUnknown_03004828->pokePicSpriteIdxs[1], gUnknown_020297D8[0]);
+ else
+ SetMainCallback2(sub_804DC88);
+ gUnknown_020297D8[0] = 255;
+ break;
+ }
+ if (!HasLinkErrorOccurred())
+ RunTasks();
+ AnimateSprites();
+ BuildOamBuffer();
+ UpdatePaletteFade();
+}
+
+static void sub_804D63C(void)
+{
+ u8 blockReceivedStatus;
+ sub_804B2B0();
+ blockReceivedStatus = GetBlockReceivedStatus();
+ if (blockReceivedStatus & 0x01)
+ {
+ if (gBlockRecvBuffer[0][0] == 0xdcba)
+ {
+ SetMainCallback2(sub_804D588);
+ }
+ if (gBlockRecvBuffer[0][0] == 0xabcd)
+ {
+ gUnknown_03004828->unk_009c = 1;
+ }
+ ResetBlockReceivedFlag(0);
+ }
+ if (blockReceivedStatus & 0x02)
+ {
+ if (gBlockRecvBuffer[1][0] == 0xabcd)
+ {
+ gUnknown_03004828->unk_009d = 1;
+ }
+ ResetBlockReceivedFlag(1);
+ }
+}
+
+static void sub_804D6BC(struct Sprite *sprite)
+{
+ sprite->pos1.y += sprite->data0 / 10;
+ sprite->data5 += sprite->data1;
+ sprite->pos1.x = sprite->data5 / 10;
+ if (sprite->pos1.y > 0x4c)
+ {
+ sprite->pos1.y = 0x4c;
+ sprite->data0 = -(sprite->data0 * sprite->data2) / 100;
+ sprite->data3 ++;
+ }
+ if (sprite->pos1.x == 0x78)
+ sprite->data1 = 0;
+ sprite->data0 += sprite->data4;
+ if (sprite->data3 == 4)
+ {
+ sprite->data7 = 1;
+ sprite->callback = SpriteCallbackDummy;
+ }
+}
+
+static void sub_804D738(struct Sprite *sprite)
+{
+ sprite->pos2.y += gTradeBallVerticalVelocityTable[sprite->data0];
+ if (sprite->data0 == 22)
+ PlaySE(SE_KON);
+ if (++ sprite->data0 == 44)
+ {
+ PlaySE(SE_W025);
+ sprite->callback = sub_804D7AC;
+ sprite->data0 = 0;
+ BeginNormalPaletteFade(1 << (16 + sprite->oam.paletteNum), -1, 0, 16, -1);
+ }
+}
+
+static void sub_804D7AC(struct Sprite *sprite)
+{
+ if (sprite->data1 == 20)
+ StartSpriteAffineAnim(sprite, 1);
+ if (++ sprite->data1 > 20)
+ {
+ sprite->pos2.y -= gTradeBallVerticalVelocityTable[sprite->data0];
+ if (++ sprite->data0 == 23)
+ {
+ DestroySprite(sprite);
+ gUnknown_03004828->unk_00c4 = 14; // Resume the master trade animation
+ }
+ }
+}
+
+static void sub_804D80C(struct Sprite *sprite)
+{
+ if (sprite->data2 == 0)
+ {
+ if ((sprite->pos1.y += 4) > sprite->data3)
+ {
+ sprite->data2 ++;
+ sprite->data0 = 0x16;
+ PlaySE(SE_KON);
+ }
+ }
+ else
+ {
+ if (sprite->data0 == 0x42)
+ PlaySE(SE_KON2);
+ if (sprite->data0 == 0x5c)
+ PlaySE(SE_KON3);
+ if (sprite->data0 == 0x6b)
+ PlaySE(SE_KON4);
+ sprite->pos2.y += gTradeBallVerticalVelocityTable[sprite->data0];
+ if (++sprite->data0 == 0x6c)
+ sprite->callback = SpriteCallbackDummy;
+ }
+}
+
+u16 sub_804D89C(void)
+{
+ const struct InGameTrade *inGameTrade = &gIngameTrades[gSpecialVar_0x8004];
+ StringCopy(gStringVar1, gSpeciesNames[inGameTrade->playerSpecies]);
+ StringCopy(gStringVar2, gSpeciesNames[inGameTrade->species]);
+ return inGameTrade->playerSpecies;
+}
+
+static void sub_804D8E4(void)
+{
+ u8 nickname[32];
+ const struct InGameTrade *inGameTrade = &gIngameTrades[gSpecialVar_0x8004];
+ GetMonData(&gPlayerParty[gSpecialVar_0x8005], MON_DATA_NICKNAME, nickname);
+ StringCopy10(gStringVar1, nickname);
+ StringCopy(gStringVar2, gSpeciesNames[inGameTrade->species]);
+}
+
+static void sub_804D948(u8 whichPlayerMon, u8 whichInGameTrade)
+{
+ const struct InGameTrade *inGameTrade = &gIngameTrades[whichInGameTrade];
+ u8 level = GetMonData(&gPlayerParty[whichPlayerMon], MON_DATA_LEVEL);
+
+ struct MailStruct mail;
+ u8 metLocation = 0xFE;
+ u8 isMail;
+ u8 *item;
+ struct Pokemon *pokemon = &gEnemyParty[0];
+
+ CreateMon(pokemon, inGameTrade->species, level, 32, TRUE, inGameTrade->personality, TRUE, inGameTrade->otId);
+
+ SetMonData(pokemon, MON_DATA_HP_IV, &inGameTrade->ivs[0]);
+ SetMonData(pokemon, MON_DATA_ATK_IV, &inGameTrade->ivs[1]);
+ SetMonData(pokemon, MON_DATA_DEF_IV, &inGameTrade->ivs[2]);
+ SetMonData(pokemon, MON_DATA_SPD_IV, &inGameTrade->ivs[3]);
+ SetMonData(pokemon, MON_DATA_SPATK_IV, &inGameTrade->ivs[4]);
+ SetMonData(pokemon, MON_DATA_SPDEF_IV, &inGameTrade->ivs[5]);
+ SetMonData(pokemon, MON_DATA_NICKNAME, inGameTrade->name);
+ SetMonData(pokemon, MON_DATA_OT_NAME, inGameTrade->otName);
+ SetMonData(pokemon, MON_DATA_OT_GENDER, &inGameTrade->otGender);
+ SetMonData(pokemon, MON_DATA_ALT_ABILITY, &inGameTrade->secondAbility);
+ SetMonData(pokemon, MON_DATA_BEAUTY, &inGameTrade->stats[1]);
+ SetMonData(pokemon, MON_DATA_CUTE, &inGameTrade->stats[2]);
+ SetMonData(pokemon, MON_DATA_COOL, &inGameTrade->stats[0]);
+ SetMonData(pokemon, MON_DATA_SMART, &inGameTrade->stats[3]);
+ SetMonData(pokemon, MON_DATA_TOUGH, &inGameTrade->stats[4]);
+ SetMonData(pokemon, MON_DATA_SHEEN, &inGameTrade->sheen);
+ SetMonData(pokemon, MON_DATA_MET_LOCATION, &metLocation);
+
+ isMail = FALSE;
+ if (inGameTrade->heldItem != ITEM_NONE)
+ {
+ if (ItemIsMail(inGameTrade->heldItem))
+ {
+ sub_804DAD4(&mail, inGameTrade);
+ gUnknown_02029700[0] = mail;
+ SetMonData(pokemon, MON_DATA_MAIL, &isMail);
+ SetMonData(pokemon, MON_DATA_HELD_ITEM, (u8 *)&inGameTrade->heldItem);
+ }
+ else
+ {
+ item = (u8 *)&inGameTrade->heldItem;
+ SetMonData(pokemon, MON_DATA_HELD_ITEM, item);
+ }
+ }
+ CalculateMonStats(&gEnemyParty[0]);
+}
+
+static void sub_804DAD4(struct MailStruct *mail, const struct InGameTrade *trade) {
+ s32 i;
+
+ for (i = 0; i < 9; i++)
+ {
+ mail->words[i] = gIngameTradeMail[trade->mailNum][i];
+ }
+
+ StringCopy(mail->playerName, trade->otName);
+
+#if GERMAN
+ PadNameString(mail->playerName, CHAR_SPACE);
+#endif
+
+ mail->trainerId[0] = trade->otId >> 24;
+ mail->trainerId[1] = trade->otId >> 16;
+ mail->trainerId[2] = trade->otId >> 8;
+ mail->trainerId[3] = trade->otId;
+ mail->species = trade->species;
+ mail->itemId = trade->heldItem;
+}
+
+u16 sub_804DB2C(void)
+{
+ if (GetMonData(&gPlayerParty[gSpecialVar_0x8005], MON_DATA_IS_EGG))
+ return SPECIES_NONE;
+ return GetMonData(&gPlayerParty[gSpecialVar_0x8005], MON_DATA_SPECIES);
+}
+
+void sub_804DB68(void)
+{
+ sub_804D948(gSpecialVar_0x8005, gSpecialVar_0x8004);
+}
+
+#ifdef NONMATCHING
+static
+#endif
+void sub_804DB84(void)
+{
+ if (sub_804C29C() == TRUE)
+ {
+ DestroySprite(&gSprites[gUnknown_03004828->pokePicSpriteIdxs[0]]);
+ FreeSpriteOamMatrix(&gSprites[gUnknown_03004828->pokePicSpriteIdxs[1]]);
+ sub_804BA94(gUnknown_020297D8[0], gUnknown_020297D8[1] % 6);
+ gUnknown_03004828->linkData[0] = 0xabcd;
+ gUnknown_03004828->unk_00bd = 1;
+ SetMainCallback2(sub_804DC18);
+ }
+ sub_804BB78();
+ sub_804D63C();
+ RunTasks();
+ AnimateSprites();
+ BuildOamBuffer();
+ UpdatePaletteFade();
+}
+
+static void sub_804DC18(void)
+{
+ u8 mpId = sub_804B2B0();
+ sub_804D63C();
+ if (mpId == 0 && gUnknown_03004828->unk_009c == 1 && gUnknown_03004828->unk_009d == 1)
+ {
+ gUnknown_03004828->linkData[0] = 0xdcba;
+ Trade_SendData(gUnknown_03004828);
+ gUnknown_03004828->unk_009c = 2;
+ gUnknown_03004828->unk_009d = 2;
+ }
+ RunTasks();
+ AnimateSprites();
+ BuildOamBuffer();
+ UpdatePaletteFade();
+}
+
+static void sub_804DC88(void)
+{
+ switch (gMain.state)
+ {
+ case 0:
+ gUnknown_03004828 = &ewram_2010000.unk_0f000;
+ gMain.state ++;
+ ZeroFillWindowRect(&gUnknown_03004828->window, 0, 0, 29, 19);
+ StringExpandPlaceholders(gStringVar4, gOtherText_LinkStandby2);
+ sub_8003460(&gUnknown_03004828->window, gStringVar4, gUnknown_03004828->textWindowBaseTileNum, 2, 15);
+ break;
+ case 1:
+ sub_80084A4();
+ gMain.state = 100;
+ gUnknown_03004828->unk_00c0 = 0;
+ break;
+ case 100:
+ if (++ gUnknown_03004828->unk_00c0 > 180)
+ {
+ gMain.state = 101;
+ gUnknown_03004828->unk_00c0 = 0;
+ }
+ if (sub_8007ECC())
+ {
+ gMain.state = 2;
+ }
+ break;
+ case 101:
+ if (sub_8007ECC())
+ {
+ gMain.state = 2;
+ }
+ break;
+ case 2:
+ gMain.state = 50;
+ ZeroFillWindowRect(&gUnknown_03004828->window, 0, 0, 29, 19);
+ sub_8003460(&gUnknown_03004828->window, gSystemText_Saving, gUnknown_03004828->textWindowBaseTileNum, 2, 15);
+ break;
+ case 50:
+ SetSecretBase2Field_9_AndHideBG();
+ IncrementGameStat(GAME_STAT_POKEMON_TRADES);
+ sub_8125D80();
+ gMain.state ++;
+ gUnknown_03004828->unk_00c0 = 0;
+ break;
+ case 51:
+ if (++ gUnknown_03004828->unk_00c0 == 5)
+ {
+ gMain.state ++;
+ }
+ break;
+ case 52:
+ if (sub_8125DA8())
+ {
+ ClearSecretBase2Field_9_2();
+ gMain.state = 4;
+ }
+ else
+ {
+ gUnknown_03004828->unk_00c0 = 0;
+ gMain.state = 51;
+ }
+ break;
+ case 4:
+ sub_8125DDC();
+ gMain.state = 40;
+ gUnknown_03004828->unk_00c0 = 0;
+ break;
+ case 40:
+ if (++ gUnknown_03004828->unk_00c0 > 50)
+ {
+ gUnknown_03004828->unk_00c0 = 0;
+ gMain.state = 41;
+ }
+ break;
+ case 41:
+ sub_80084A4();
+ gMain.state = 42;
+ break;
+ case 42:
+ if (sub_8007ECC())
+ {
+ sub_8125E04();
+ gSoftResetDisabled = FALSE;
+ gMain.state = 5;
+ }
+ break;
+ case 5:
+ if (++ gUnknown_03004828->unk_00c0 > 60)
+ {
+ gMain.state ++;
+ sub_80084A4();
+ }
+ break;
+ case 6:
+ if (sub_8007ECC())
+ {
+ BeginNormalPaletteFade(-1, 0, 0, 16, 0);
+ gMain.state ++;
+ }
+ break;
+ case 7:
+ if (!gPaletteFade.active)
+ {
+ FadeOutBGM(3);
+ gMain.state ++;
+ }
+ break;
+ case 8:
+ if (IsBGMStopped() == TRUE)
+ {
+ sub_800832C();
+ gMain.state ++;
+ }
+ break;
+ case 9:
+ if (!gReceivedRemoteLinkPlayers)
+ {
+ SetMainCallback2(sub_804E144);
+ }
+ break;
+ }
+ if (!HasLinkErrorOccurred())
+ {
+ RunTasks();
+ }
+ AnimateSprites();
+ BuildOamBuffer();
+ UpdatePaletteFade();
+}
+
+static void sub_804E144(void)
+{
+ if (!gPaletteFade.active)
+ SetMainCallback2((sub_8047CD8));
+ RunTasks();
+ AnimateSprites();
+ BuildOamBuffer();
+ UpdatePaletteFade();
+}
+
+void sub_804E174(void)
+{
+ ScriptContext2_Enable();
+ CreateTask(sub_804E1A0, 10);
+ BeginNormalPaletteFade(-1, 0, 0, 16, 0);
+}
+
+static void sub_804E1A0(u8 taskId)
+{
+ if (!gPaletteFade.active)
+ {
+ SetMainCallback2(sub_804B790);
+ gFieldCallback = sub_8080990;
+ DestroyTask(taskId);
+ }
+}
+
+static void sub_804E1DC(void)
+{
+ u8 i;
+ u8 numRibbons = 0;
+ for (i = 0; i < 12; i ++)
+ {
+ numRibbons += GetMonData(&gEnemyParty[gUnknown_020297D8[1] % 6], MON_DATA_CHAMPION_RIBBON + i);
+ }
+ if (numRibbons != 0)
+ FlagSet(SYS_RIBBON_GET);
+}
+
+void sub_804E22C(void)
+{
+ const u16 *src;
+ u16 *dest;
+ LZDecompressVram(gUnknown_08D00000, (u8 *)VRAM);
+ CpuCopy16(gUnknown_08D00524, ewram, 0x1000);
+ src = (const u16 *)ewram;
+ dest = (u16 *)(BG_SCREEN_ADDR(5));
+ DmaCopy16(3, src, dest, 0x500)
+ LoadCompressedPalette(gUnknown_08D004E0, 0, 32);
+ REG_BG1CNT = BGCNT_PRIORITY(2) | BGCNT_SCREENBASE(5);
+}
diff --git a/src/trainer_card.c b/src/engine/trainer_card.c
index bcb62ede6..bcb62ede6 100644
--- a/src/trainer_card.c
+++ b/src/engine/trainer_card.c
diff --git a/src/trig.c b/src/engine/trig.c
index e16a69e63..e16a69e63 100644
--- a/src/trig.c
+++ b/src/engine/trig.c
diff --git a/src/util.c b/src/engine/util.c
index 582b9f806..582b9f806 100644
--- a/src/util.c
+++ b/src/engine/util.c
diff --git a/src/bard_music.c b/src/field/bard_music.c
index daf003233..daf003233 100644
--- a/src/bard_music.c
+++ b/src/field/bard_music.c
diff --git a/src/berry.c b/src/field/berry.c
index d82eab2a6..d82eab2a6 100644
--- a/src/berry.c
+++ b/src/field/berry.c
diff --git a/src/berry_tag_screen.c b/src/field/berry_tag_screen.c
index 1413a02ca..1413a02ca 100644
--- a/src/berry_tag_screen.c
+++ b/src/field/berry_tag_screen.c
diff --git a/src/bike.c b/src/field/bike.c
index 80cab0850..8df901b40 100644
--- a/src/bike.c
+++ b/src/field/bike.c
@@ -10,8 +10,6 @@
#include "songs.h"
#include "sound.h"
-extern u8 sub_80608A4(u8);
-
extern u8 gUnknown_02039250;
extern u8 gUnknown_02039251;
extern u8 gUnknown_0202E854;
@@ -937,13 +935,13 @@ void GetOnOffBike(u8 var)
if (gPlayerAvatar.flags & (PLAYER_AVATAR_FLAG_MACH_BIKE | PLAYER_AVATAR_FLAG_ACRO_BIKE))
{
SetPlayerAvatarTransitionFlags(PLAYER_AVATAR_FLAG_ON_FOOT);
- sav1_reset_battle_music_maybe();
- sub_8053E90();
+ Overworld_ClearSavedMusic();
+ Overworld_PlaySpecialMapMusic();
}
else
{
SetPlayerAvatarTransitionFlags(var);
- sav1_set_battle_music_maybe(BGM_CYCLING);
+ Overworld_SetSavedMusic(BGM_CYCLING);
Overworld_ChangeMusicTo(BGM_CYCLING);
}
}
diff --git a/src/birch_pc.c b/src/field/birch_pc.c
index 5fb6427c3..9872dd54d 100644
--- a/src/birch_pc.c
+++ b/src/field/birch_pc.c
@@ -91,15 +91,15 @@ const u8 *GetPokedexRatingText(u16 count)
return gBirchDexRatingText_LessThan200;
if (count == 200)
{
- if (GetNationalPokedexFlag(SpeciesToNationalPokedexNum(SPECIES_JIRACHI), 1)
- || GetNationalPokedexFlag(SpeciesToNationalPokedexNum(SPECIES_DEOXYS), 1)) // Jirachi or Deoxys is not counted towards the dex completion. If either of these flags are enabled, it means the actual count is less than 200.
+ if (GetSetPokedexFlag(SpeciesToNationalPokedexNum(SPECIES_JIRACHI), 1)
+ || GetSetPokedexFlag(SpeciesToNationalPokedexNum(SPECIES_DEOXYS), 1)) // Jirachi or Deoxys is not counted towards the dex completion. If either of these flags are enabled, it means the actual count is less than 200.
return gBirchDexRatingText_LessThan200;
return gBirchDexRatingText_DexCompleted;
}
if (count == 201)
{
- if (GetNationalPokedexFlag(SpeciesToNationalPokedexNum(SPECIES_JIRACHI), 1)
- && GetNationalPokedexFlag(SpeciesToNationalPokedexNum(SPECIES_DEOXYS), 1)) // If both of these flags are enabled, it means the actual count is less than 200.
+ if (GetSetPokedexFlag(SpeciesToNationalPokedexNum(SPECIES_JIRACHI), 1)
+ && GetSetPokedexFlag(SpeciesToNationalPokedexNum(SPECIES_DEOXYS), 1)) // If both of these flags are enabled, it means the actual count is less than 200.
return gBirchDexRatingText_LessThan200;
return gBirchDexRatingText_DexCompleted;
}
diff --git a/src/braille_puzzles.c b/src/field/braille_puzzles.c
index b11b1ff3a..b11b1ff3a 100644
--- a/src/braille_puzzles.c
+++ b/src/field/braille_puzzles.c
diff --git a/src/choose_party.c b/src/field/choose_party.c
index 2384f3c71..2384f3c71 100644
--- a/src/choose_party.c
+++ b/src/field/choose_party.c
diff --git a/src/coins.c b/src/field/coins.c
index 3c6356612..91a4b508d 100644
--- a/src/coins.c
+++ b/src/field/coins.c
@@ -6,47 +6,47 @@
#define MAX_COINS 9999
-void UpdateCoinsWindow(s32 a, u8 b, u8 c)
+void UpdateCoinsWindow(s32 coins, u8 x, u8 y)
{
- PrintCoins(a, 4, b + 2, c + 1);
+ PrintCoins(coins, 4, x + 2, y + 1);
}
-void ShowCoinsWindow(u32 a, u8 b, u8 c)
+void ShowCoinsWindow(u32 coins, u8 x, u8 y)
{
- MenuDrawTextWindow(b, c, b + 9, c + 3);
- UpdateCoinsWindow(a, b, c);
+ MenuDrawTextWindow(x, y, x + 9, y + 3);
+ UpdateCoinsWindow(coins, x, y);
}
-void HideCoinsWindow(u8 a, u8 b)
+void HideCoinsWindow(u8 x, u8 y)
{
- MenuZeroFillWindowRect(a, b, a + 9, b + 3);
+ MenuZeroFillWindowRect(x, y, x + 9, y + 3);
}
-void PrintCoins(s32 a, u8 b, u8 c, u8 d)
+void PrintCoins(s32 coins, u8 b, u8 x, u8 y)
{
u8 string[16];
u8 *ptr;
u8 r1;
u8 foo;
- ConvertIntToDecimalString(string, a);
+ ConvertIntToDecimalString(string, coins);
r1 = (b * 6 + 0x21 - 8 * (b + 2));
- c = c - r1 / 8;
+ x = x - r1 / 8;
foo = r1 % 8;
ptr = gStringVar1;
if (foo)
{
- ptr[0] = 0xFC;
+ ptr[0] = EXT_CTRL_CODE_BEGIN;
ptr[1] = 0x11;
ptr[2] = 8 - (foo);
ptr += 3;
}
- ptr[0] = 0xFC;
+ ptr[0] = EXT_CTRL_CODE_BEGIN;
ptr[1] = 0x11;
ptr[2] = (b - StringLength(string)) * 6;
ptr += 3;
StringCopy(ptr, string);
- MenuPrint(gOtherText_Coins2, c, d);
+ MenuPrint(gOtherText_Coins2, x, y);
}
u16 GetCoins(void)
diff --git a/src/coord_event_weather.c b/src/field/coord_event_weather.c
index 9c5a1ca4d..9c5a1ca4d 100644
--- a/src/coord_event_weather.c
+++ b/src/field/coord_event_weather.c
diff --git a/src/field/daycare.c b/src/field/daycare.c
new file mode 100644
index 000000000..591b5b188
--- /dev/null
+++ b/src/field/daycare.c
@@ -0,0 +1,1690 @@
+#include "global.h"
+#include "daycare.h"
+#include "pokemon.h"
+#include "event_data.h"
+#include "species.h"
+#include "items.h"
+#include "text.h"
+#include "string_util.h"
+#include "mail_data.h"
+#include "name_string_util.h"
+#include "pokemon_storage_system.h"
+#include "rng.h"
+#include "moves.h"
+#include "trade.h"
+#include "strings2.h"
+#include "data/pokemon/egg_moves.h"
+#include "party_menu.h"
+#include "field_effect.h"
+#include "main.h"
+#include "menu.h"
+#include "sound.h"
+#include "songs.h"
+#include "script.h"
+#include "overworld.h"
+
+IWRAM_DATA u16 gUnknown_03000470[52];
+IWRAM_DATA u16 gUnknown_030004D8[4];
+IWRAM_DATA u16 gUnknown_030004E0[4];
+IWRAM_DATA u16 gUnknown_030004E8[12];
+IWRAM_DATA u16 gUnknown_03000500[4];
+
+static void sub_80417F4(struct DayCareMail *);
+static void sub_80420FC(struct Pokemon *, u16, struct DayCareData *);
+static u8 daycare_relationship_score(struct DayCareData *);
+
+const u8 *const gUnknown_08209AC4[] = {
+ DaycareText_GetAlongVeryWell,
+ DaycareText_GetAlong,
+ DaycareText_DontLikeOther,
+ DaycareText_PlayOther
+};
+
+const u8 gUnknown_08209AD4[] = _("タマゴ");
+
+u8 *GetMonNick(struct Pokemon *mon, u8 *dest)
+{
+ s8 nickname[POKEMON_NAME_LENGTH * 2];
+
+ GetMonData(mon, MON_DATA_NICKNAME, nickname);
+ return StringCopy10(dest, nickname);
+}
+
+u8 *GetBoxMonNick(struct BoxPokemon *mon, u8 *dest)
+{
+ s8 nickname[POKEMON_NAME_LENGTH * 2];
+
+ GetBoxMonData(mon, MON_DATA_NICKNAME, nickname);
+ return StringCopy10(dest, nickname);
+}
+
+u8 Daycare_CountPokemon(struct DayCareData *daycare_data)
+{
+ u8 i, count;
+ count = 0;
+
+ for(i = 0;i <= 1;i++)
+ if(GetBoxMonData(&daycare_data->mons[i], MON_DATA_SPECIES) != 0)
+ count++;
+
+ return count;
+}
+
+void sub_8041324(struct BoxPokemon * box_pokemon, struct RecordMixingDayCareMail * daycareMailEtc)
+{
+ u8 i;
+ u8 specCount;
+ specCount = 0;
+ for (i=0; i<2; i++)
+ {
+ if (GetBoxMonData(&box_pokemon[i], MON_DATA_SPECIES) != SPECIES_NONE)
+ {
+ specCount ++;
+ if (GetBoxMonData(&box_pokemon[i], MON_DATA_HELD_ITEM) == ITEM_NONE)
+ {
+ daycareMailEtc->unk74[i] = 0;
+ } else
+ {
+ daycareMailEtc->unk74[i] = 1;
+ }
+ } else
+ {
+ daycareMailEtc->unk74[i] = 1;
+ }
+ }
+ daycareMailEtc->unk70 = specCount;
+}
+
+static s8 Daycare_FindEmptySpot(struct BoxPokemon * daycare_data)
+{
+ u8 i;
+
+ for(i = 0;i <= 1;i++)
+ if(GetBoxMonData(daycare_data + i, MON_DATA_SPECIES) == 0)
+ return i;
+
+ return -1;
+}
+
+static void Daycare_SendPokemon(struct Pokemon * mon, struct DayCareData * daycare_data)
+{
+ s8 empty_slot;
+ u8 mail;
+ u8 *names;
+
+ empty_slot = Daycare_FindEmptySpot(daycare_data->mons);
+ if(MonHasMail(mon)) {
+ StringCopy((names = daycare_data->misc.mail[empty_slot].names), gSaveBlock2.playerName);
+ PadNameString(names, 0xFC);
+ names += 8;
+ GetMonNick(mon, names);
+ mail = GetMonData(mon, MON_DATA_MAIL);
+ daycare_data->misc.mail[empty_slot].message = gSaveBlock1.mail[mail];
+ TakeMailFromMon(mon);
+ }
+ daycare_data->mons[empty_slot] = mon->box;
+ BoxMonRestorePP(&daycare_data->mons[empty_slot]);
+ daycare_data->misc.countersEtc.steps[empty_slot] = 0;
+ ZeroMonData(mon);
+ party_compaction();
+ CalculatePlayerPartyCount();
+}
+
+void Daycare_SendPokemon_Special()
+{
+ Daycare_SendPokemon(gPlayerParty + gLastFieldPokeMenuOpened, &gSaveBlock1.daycareData);
+}
+
+static void sub_80414C0(struct DayCareData * daycare_data)
+{
+ if((GetBoxMonData(&daycare_data->mons[1], MON_DATA_SPECIES) != 0) && GetBoxMonData(&daycare_data->mons[0], MON_DATA_SPECIES) == 0)
+ {
+ daycare_data->mons[0] = daycare_data->mons[1];
+ ZeroBoxMonData(&daycare_data->mons[1]);
+ daycare_data->misc.mail[0] = daycare_data->misc.mail[1];
+ daycare_data->misc.countersEtc.steps[0] = daycare_data->misc.countersEtc.steps[1];
+ daycare_data->misc.countersEtc.steps[1] = 0;
+ sub_80417F4(&daycare_data->misc.mail[1]);
+ }
+}
+
+u8 TryIncrementMonLevel(struct Pokemon *);
+extern u16 gMoveToLearn;
+
+static void DayCare_LevelUpMoves(struct Pokemon * mon)
+{
+ s32 i;
+ u8 r6;
+ u16 temp;
+
+ for (i = 0; i < MAX_LEVEL; i++)
+ {
+ if (TryIncrementMonLevel(mon))
+ {
+ r6 = 1;
+ while ((temp = MonTryLearningNewMove(mon, r6)) != 0)
+ {
+ r6 = 0;
+ if (temp == 0xffff)
+ DeleteFirstMoveAndGiveMoveToMon(mon, gMoveToLearn);
+ }
+ }
+ else
+ break;
+ }
+
+ CalculateMonStats(mon);
+}
+
+static u16 sub_8041570(struct DayCareData * daycare_data, u8 slot)
+{
+ u16 species;
+ u32 experience;
+ struct Pokemon pokemon;
+
+ GetBoxMonNick(&daycare_data->mons[slot], gStringVar1);
+ species = GetBoxMonData(&daycare_data->mons[slot], MON_DATA_SPECIES);
+ sub_803B4B4(&daycare_data->mons[slot], &pokemon);
+ if (GetMonData(&pokemon, MON_DATA_LEVEL) != MAX_LEVEL)
+ {
+ experience = GetMonData(&pokemon, MON_DATA_EXP) + daycare_data->misc.countersEtc.steps[slot];
+ SetMonData(&pokemon, MON_DATA_EXP, (u8 *)&experience);
+ DayCare_LevelUpMoves(&pokemon);
+ }
+ gPlayerParty[PARTY_SIZE - 1] = pokemon;
+ if (daycare_data->misc.mail[slot].message.itemId)
+ {
+ GiveMailToMon2(&gPlayerParty[PARTY_SIZE - 1], &daycare_data->misc.mail[slot].message);
+ sub_80417F4(&daycare_data->misc.mail[slot]);
+ }
+ party_compaction();
+ ZeroBoxMonData(&daycare_data->mons[slot]);
+ daycare_data->misc.countersEtc.steps[slot] = 0;
+ sub_80414C0(daycare_data);
+ CalculatePlayerPartyCount();
+ return species;
+}
+
+u16 sub_8041648()
+{
+ return sub_8041570(&gSaveBlock1.daycareData, gSpecialVar_0x8004);
+}
+
+u8 Daycare_GetLevelAfterSteps(struct BoxPokemon * mon, u32 steps){
+ struct BoxPokemon temp = *mon;
+ u32 new_exp = GetBoxMonData(mon, MON_DATA_EXP) + steps;
+ SetBoxMonData(&temp, MON_DATA_EXP, (u8 *) &new_exp);
+ return GetLevelFromBoxMonExp(&temp);
+}
+
+static u8 sub_80416A0(struct DayCareData *daycareData, u8 slot)
+{
+ u8 levelBefore;
+ u8 levelAfter;
+
+ levelBefore = GetLevelFromBoxMonExp(&daycareData->mons[slot]);
+ levelAfter = Daycare_GetLevelAfterSteps(&daycareData->mons[slot], daycareData->misc.countersEtc.steps[slot]);
+ return levelAfter - levelBefore;
+}
+
+static u8 sub_80416E8(struct DayCareData *dayCareData, u8 slot)
+{
+ u8 levelDelta = sub_80416A0(dayCareData, slot);
+ GetBoxMonNick(&dayCareData->mons[slot], gStringVar1);
+ ConvertIntToDecimalStringN(gStringVar2, levelDelta, STR_CONV_MODE_LEFT_ALIGN, 2);
+ return levelDelta;
+}
+
+static u16 sub_8041728(struct DayCareData *dayCareData, u8 slot)
+{
+ u16 cost;
+
+ u8 levelDelta = sub_80416A0(dayCareData, slot);
+ GetBoxMonNick(&dayCareData->mons[slot], gStringVar1);
+ cost = 100 + 100 * levelDelta;
+ ConvertIntToDecimalStringN(gStringVar2, cost, STR_CONV_MODE_LEFT_ALIGN, 5);
+ return cost;
+}
+
+void sub_8041770(void)
+{
+ gSpecialVar_0x8005 = sub_8041728(&gSaveBlock1.daycareData, gSpecialVar_0x8004);
+}
+
+void sub_8041790(u16 i)
+{
+ gSaveBlock1.daycareData.misc.countersEtc.steps[0] += i;
+ gSaveBlock1.daycareData.misc.countersEtc.steps[1] += i;
+}
+
+u8 sub_80417B8(void)
+{
+ if (GetBoxMonData(&gSaveBlock1.daycareData.mons[gSpecialVar_0x8004], MON_DATA_SPECIES) != 0)
+ return sub_80416E8(&gSaveBlock1.daycareData, gSpecialVar_0x8004);
+ return 0;
+}
+
+static void sub_80417F4(struct DayCareMail *mail)
+{
+ u8 zero;
+ u8 *names;
+ u8 *names2;
+ int i;
+ zero = 0;
+ for (i = 7, names = mail->names + 7; i >= 0; i --)
+ *names-- = zero;
+ names2 = mail->names + 8;
+ zero = 0;
+ names = mail->names + 18;
+ do *names-- = zero; while ((int)names >= (int)names2);
+ ClearMailStruct(&mail->message);
+}
+
+void unref_sub_8041824(struct DayCareData *dayCareData)
+{
+ u8 slot;
+ for (slot = 0; slot < ARRAY_COUNT(dayCareData->mons); slot ++)
+ {
+ ZeroBoxMonData(&dayCareData->mons[slot]);
+ dayCareData->misc.countersEtc.steps[slot] = 0;
+ sub_80417F4(&dayCareData->misc.mail[slot]);
+ }
+ dayCareData->misc.countersEtc.personalityLo = 0;
+ dayCareData->misc.countersEtc.unk_11a = 0;
+}
+
+u16 sub_8041870(u16 species)
+{
+ int i, j, k;
+ bool8 found;
+ for (i = 0; i < 5; i ++)
+ {
+ found = FALSE;
+ for (j = 1; j < NUM_SPECIES; j ++)
+ {
+ for (k = 0; k < 5; k ++)
+ {
+ if (gEvolutionTable[j].evolutions[k].targetSpecies == species)
+ {
+ species = j;
+ found = TRUE;
+ break;
+ }
+ }
+ if (found)
+ break;
+ }
+ if (j == 412)
+ break;
+ }
+ return species;
+}
+
+static void sub_80418F0(struct DayCareData *dayCareData)
+{
+ dayCareData->misc.countersEtc.personalityLo = (Random() % 0xfffe) + 1;
+ FlagSet(0x86);
+}
+
+static void sub_804191C(struct DayCareData *dayCareData)
+{
+ dayCareData->misc.countersEtc.personalityLo = Random() | 0x8000;
+ FlagSet(0x86);
+}
+
+void sub_8041940(void)
+{
+ sub_80418F0(&gSaveBlock1.daycareData);
+}
+
+void sub_8041950(void)
+{
+ sub_804191C(&gSaveBlock1.daycareData);
+}
+
+static void sub_8041960(u8 *data, u8 idx)
+{
+ int i, j;
+ u8 temp[6];
+ data[idx] = 0xff;
+ for (i = 0; i < 6; i ++)
+ temp[i] = data[i];
+ j = 0;
+ for (i = 0; i < 6; i ++)
+ if (temp[i] != 0xff)
+ data[j++] = temp[i];
+}
+
+static void InheritIVs(struct Pokemon *egg, struct DayCareData *dayCareData)
+{
+ u8 i;
+ u8 selectedIvs[3];
+ u8 allIvs[6];
+ u8 whichParent[3];
+ u8 iv;
+ for (i = 0; i < 6; i ++)
+ allIvs[i] = i;
+ for (i = 0; i < 3; i ++)
+ {
+ selectedIvs[i] = allIvs[Random() % (6 - i)];
+ sub_8041960(allIvs, selectedIvs[i]);
+ }
+ for (i = 0; i < 3; i ++)
+ whichParent[i] = Random() % 2;
+ for (i = 0; i < 3; i ++)
+ {
+ switch (selectedIvs[i])
+ {
+ case 0:
+ iv = GetBoxMonData(&dayCareData->mons[whichParent[i]], MON_DATA_HP_IV);
+ SetMonData(egg, MON_DATA_HP_IV, &iv);
+ break;
+ case 1:
+ iv = GetBoxMonData(&dayCareData->mons[whichParent[i]], MON_DATA_ATK_IV);
+ SetMonData(egg, MON_DATA_ATK_IV, &iv);
+ break;
+ case 2:
+ iv = GetBoxMonData(&dayCareData->mons[whichParent[i]], MON_DATA_DEF_IV);
+ SetMonData(egg, MON_DATA_DEF_IV, &iv);
+ break;
+ case 3:
+ iv = GetBoxMonData(&dayCareData->mons[whichParent[i]], MON_DATA_SPD_IV);
+ SetMonData(egg, MON_DATA_SPD_IV, &iv);
+ break;
+ case 4:
+ iv = GetBoxMonData(&dayCareData->mons[whichParent[i]], MON_DATA_SPATK_IV);
+ SetMonData(egg, MON_DATA_SPATK_IV, &iv);
+ break;
+ case 5:
+ iv = GetBoxMonData(&dayCareData->mons[whichParent[i]], MON_DATA_SPDEF_IV);
+ SetMonData(egg, MON_DATA_SPDEF_IV, &iv);
+ break;
+ }
+ }
+}
+
+#ifdef NONMATCHING
+static
+#endif
+u8 pokemon_get_eggmoves(struct Pokemon *pokemon, u16 *eggMoves)
+{
+ u16 eggMoveIdx;
+ u16 numMovesFound;
+ u16 species;
+ u16 i;
+
+ numMovesFound = 0;
+ eggMoveIdx = 0;
+ species = GetMonData(pokemon, MON_DATA_SPECIES);
+ for (i = 0; i < ARRAY_COUNT(gEggMoves) - 1; i ++)
+ {
+ if (gEggMoves[i] == species + EGG_MOVES_SPECIES_OFFSET)
+ {
+ eggMoveIdx = i + 1;
+ break;
+ }
+ }
+ for (i = 0; i < 10; i ++)
+ {
+ if (gEggMoves[eggMoveIdx + i] > EGG_MOVES_SPECIES_OFFSET)
+ {
+ break;
+ }
+ eggMoves[i] = gEggMoves[eggMoveIdx + i];
+ numMovesFound++;
+ }
+ return numMovesFound;
+}
+
+#ifdef NONMATCHING
+
+void daycare_build_child_moveset(struct Pokemon *egg, struct BoxPokemon *dad, struct BoxPokemon *mom)
+{
+ u16 numSharedParentMoves;
+ u8 numLevelUpMoves;
+ u8 numEggMoves;
+ u16 i, j;
+
+ numSharedParentMoves = 0;
+ for (i = 0; i < 4; i ++)
+ {
+ gUnknown_03000500[i] = 0;
+ gUnknown_030004D8[i] = 0;
+ gUnknown_030004E0[i] = 0;
+ }
+ for (i = 0; i < 10; i ++)
+ gUnknown_030004E8[i] = 0;
+ for (i = 0; i < 50; i ++)
+ gUnknown_03000470[i] = 0;
+
+ numLevelUpMoves = GetLevelUpMovesBySpecies(GetMonData(egg, MON_DATA_SPECIES), gUnknown_03000470);
+ for (i = 0; i < 4; i ++)
+ {
+ gUnknown_030004D8[i] = GetBoxMonData(dad, MON_DATA_MOVE1 + i);
+ gUnknown_03000500[i] = GetBoxMonData(mom, MON_DATA_MOVE1 + i);
+ }
+ numEggMoves = pokemon_get_eggmoves(egg, gUnknown_030004E8);
+
+ for (i = 0; i < 4; i ++)
+ {
+ if (gUnknown_030004D8[i] != MOVE_NONE)
+ {
+ for (j = 0; j < numEggMoves; j ++)
+ {
+ if (gUnknown_030004D8[i] == gUnknown_030004E8[j])
+ {
+ if (GiveMoveToMon(egg, gUnknown_030004D8[i]) == 0xffff)
+ DeleteFirstMoveAndGiveMoveToMon(egg, gUnknown_030004D8[i]);
+ break;
+ }
+ }
+ }
+ else
+ break;
+ }
+ for (i = 0; i < 4; i ++)
+ {
+ if (gUnknown_030004D8[i] != MOVE_NONE)
+ {
+ for (j = 0; j < 50 + 8; j ++)
+ {
+ if (gUnknown_030004D8[i] == ItemIdToBattleMoveId(ITEM_TM01 + j) && CanMonLearnTMHM(egg, j))
+ {
+ if (GiveMoveToMon(egg, gUnknown_030004D8[i]) == 0xffff)
+ DeleteFirstMoveAndGiveMoveToMon(egg, gUnknown_030004D8[i]);
+ }
+ }
+ }
+ }
+ for (i = 0; i < 4; i ++)
+ {
+ if (gUnknown_030004D8[i] == MOVE_NONE)
+ break;
+ for (j = 0; j < 4; j ++)
+ {
+ if (gUnknown_030004D8[i] == gUnknown_03000500[j] && gUnknown_030004D8[i] != MOVE_NONE)
+ gUnknown_030004E0[numSharedParentMoves++] = gUnknown_030004D8[i];
+ }
+ }
+ for (i = 0; i < 4; i ++)
+ {
+ if (gUnknown_030004E0[i] == MOVE_NONE)
+ break;
+ for (j = 0; j < numLevelUpMoves; j ++)
+ {
+ if (gUnknown_03000470[j] != MOVE_NONE && gUnknown_030004E0[i] == gUnknown_03000470[j])
+ {
+ if (GiveMoveToMon(egg, gUnknown_030004E0[i]) == 0xffff)
+ DeleteFirstMoveAndGiveMoveToMon(egg, gUnknown_030004E0[i]);
+ break;
+ }
+ }
+ }
+}
+#else
+__attribute__((naked))
+void daycare_build_child_moveset(struct Pokemon *egg, struct BoxPokemon *dad, struct BoxPokemon *mom)
+{
+ asm_unified("\tpush {r4-r7,lr}\n"
+ "\tmov r7, r10\n"
+ "\tmov r6, r9\n"
+ "\tmov r5, r8\n"
+ "\tpush {r5-r7}\n"
+ "\tsub sp, 0xC\n"
+ "\tadds r7, r0, 0\n"
+ "\tmov r10, r1\n"
+ "\tmov r9, r2\n"
+ "\tmovs r0, 0\n"
+ "\tstr r0, [sp]\n"
+ "\tmovs r6, 0\n"
+ "\tldr r5, _08041CC8 @ =gUnknown_03000500\n"
+ "\tmovs r2, 0\n"
+ "\tldr r4, _08041CCC @ =gUnknown_030004D8\n"
+ "\tldr r3, _08041CD0 @ =gUnknown_030004E0\n"
+ "_08041BE4:\n"
+ "\tlsls r1, r6, 1\n"
+ "\tadds r0, r1, r5\n"
+ "\tstrh r2, [r0]\n"
+ "\tadds r0, r1, r4\n"
+ "\tstrh r2, [r0]\n"
+ "\tadds r1, r3\n"
+ "\tstrh r2, [r1]\n"
+ "\tadds r0, r6, 0x1\n"
+ "\tlsls r0, 16\n"
+ "\tlsrs r6, r0, 16\n"
+ "\tcmp r6, 0x3\n"
+ "\tbls _08041BE4\n"
+ "\tmovs r6, 0\n"
+ "\tldr r2, _08041CD4 @ =gUnknown_030004E8\n"
+ "\tmovs r1, 0\n"
+ "_08041C02:\n"
+ "\tlsls r0, r6, 1\n"
+ "\tadds r0, r2\n"
+ "\tstrh r1, [r0]\n"
+ "\tadds r0, r6, 0x1\n"
+ "\tlsls r0, 16\n"
+ "\tlsrs r6, r0, 16\n"
+ "\tcmp r6, 0x9\n"
+ "\tbls _08041C02\n"
+ "\tmovs r6, 0\n"
+ "\tldr r2, _08041CD8 @ =gUnknown_03000470\n"
+ "\tmovs r1, 0\n"
+ "_08041C18:\n"
+ "\tlsls r0, r6, 1\n"
+ "\tadds r0, r2\n"
+ "\tstrh r1, [r0]\n"
+ "\tadds r0, r6, 0x1\n"
+ "\tlsls r0, 16\n"
+ "\tlsrs r6, r0, 16\n"
+ "\tcmp r6, 0x31\n"
+ "\tbls _08041C18\n"
+ "\tadds r0, r7, 0\n"
+ "\tmovs r1, 0xB\n"
+ "\tbl GetMonData\n"
+ "\tlsls r0, 16\n"
+ "\tlsrs r0, 16\n"
+ "\tldr r1, _08041CD8 @ =gUnknown_03000470\n"
+ "\tbl GetLevelUpMovesBySpecies\n"
+ "\tlsls r0, 24\n"
+ "\tlsrs r0, 24\n"
+ "\tstr r0, [sp, 0x4]\n"
+ "\tmovs r6, 0\n"
+ "\tldr r1, _08041CCC @ =gUnknown_030004D8\n"
+ "\tmov r8, r1\n"
+ "_08041C46:\n"
+ "\tadds r5, r6, 0\n"
+ "\tadds r5, 0xD\n"
+ "\tmov r0, r10\n"
+ "\tadds r1, r5, 0\n"
+ "\tbl GetBoxMonData\n"
+ "\tlsls r4, r6, 1\n"
+ "\tmov r2, r8\n"
+ "\tadds r1, r4, r2\n"
+ "\tstrh r0, [r1]\n"
+ "\tmov r0, r9\n"
+ "\tadds r1, r5, 0\n"
+ "\tbl GetBoxMonData\n"
+ "\tldr r1, _08041CC8 @ =gUnknown_03000500\n"
+ "\tadds r4, r1\n"
+ "\tstrh r0, [r4]\n"
+ "\tadds r0, r6, 0x1\n"
+ "\tlsls r0, 16\n"
+ "\tlsrs r6, r0, 16\n"
+ "\tcmp r6, 0x3\n"
+ "\tbls _08041C46\n"
+ "\tldr r1, _08041CD4 @ =gUnknown_030004E8\n"
+ "\tadds r0, r7, 0\n"
+ "\tbl pokemon_get_eggmoves\n"
+ "\tlsls r0, 24\n"
+ "\tlsrs r0, 24\n"
+ "\tmov r8, r0\n"
+ "\tmovs r6, 0\n"
+ "_08041C82:\n"
+ "\tldr r0, _08041CCC @ =gUnknown_030004D8\n"
+ "\tlsls r1, r6, 1\n"
+ "\tadds r2, r1, r0\n"
+ "\tldrh r1, [r2]\n"
+ "\tmov r9, r0\n"
+ "\tcmp r1, 0\n"
+ "\tbeq _08041CF8\n"
+ "\tmovs r5, 0\n"
+ "\tcmp r5, r8\n"
+ "\tbcs _08041CEA\n"
+ "\tadds r4, r2, 0\n"
+ "\tldr r2, _08041CDC @ =0x0000ffff\n"
+ "_08041C9A:\n"
+ "\tldr r0, _08041CD4 @ =gUnknown_030004E8\n"
+ "\tlsls r1, r5, 1\n"
+ "\tadds r1, r0\n"
+ "\tldrh r0, [r4]\n"
+ "\tldrh r1, [r1]\n"
+ "\tcmp r0, r1\n"
+ "\tbne _08041CE0\n"
+ "\tadds r1, r0, 0\n"
+ "\tadds r0, r7, 0\n"
+ "\tstr r2, [sp, 0x8]\n"
+ "\tbl GiveMoveToMon\n"
+ "\tlsls r0, 16\n"
+ "\tlsrs r0, 16\n"
+ "\tldr r2, [sp, 0x8]\n"
+ "\tcmp r0, r2\n"
+ "\tbne _08041CEA\n"
+ "\tldrh r1, [r4]\n"
+ "\tadds r0, r7, 0\n"
+ "\tbl DeleteFirstMoveAndGiveMoveToMon\n"
+ "\tb _08041CEA\n"
+ "\t.align 2, 0\n"
+ "_08041CC8: .4byte gUnknown_03000500\n"
+ "_08041CCC: .4byte gUnknown_030004D8\n"
+ "_08041CD0: .4byte gUnknown_030004E0\n"
+ "_08041CD4: .4byte gUnknown_030004E8\n"
+ "_08041CD8: .4byte gUnknown_03000470\n"
+ "_08041CDC: .4byte 0x0000ffff\n"
+ "_08041CE0:\n"
+ "\tadds r0, r5, 0x1\n"
+ "\tlsls r0, 16\n"
+ "\tlsrs r5, r0, 16\n"
+ "\tcmp r5, r8\n"
+ "\tbcc _08041C9A\n"
+ "_08041CEA:\n"
+ "\tadds r0, r6, 0x1\n"
+ "\tlsls r0, 16\n"
+ "\tlsrs r6, r0, 16\n"
+ "\tldr r3, _08041E14 @ =gUnknown_030004D8\n"
+ "\tmov r9, r3\n"
+ "\tcmp r6, 0x3\n"
+ "\tbls _08041C82\n"
+ "_08041CF8:\n"
+ "\tmovs r6, 0\n"
+ "_08041CFA:\n"
+ "\tlsls r0, r6, 1\n"
+ "\tmov r2, r9\n"
+ "\tadds r1, r0, r2\n"
+ "\tldrh r1, [r1]\n"
+ "\tadds r2, r0, 0\n"
+ "\tadds r6, 0x1\n"
+ "\tmov r8, r6\n"
+ "\tcmp r1, 0\n"
+ "\tbeq _08041D5C\n"
+ "\tmovs r5, 0\n"
+ "\tldr r0, _08041E14 @ =gUnknown_030004D8\n"
+ "\tadds r4, r2, r0\n"
+ "\tldr r6, _08041E18 @ =0x0000ffff\n"
+ "\tmov r9, r0\n"
+ "_08041D16:\n"
+ "\tldr r3, _08041E1C @ =0x00000121\n"
+ "\tadds r0, r5, r3\n"
+ "\tlsls r0, 16\n"
+ "\tlsrs r0, 16\n"
+ "\tbl ItemIdToBattleMoveId\n"
+ "\tldrh r1, [r4]\n"
+ "\tlsls r0, 16\n"
+ "\tlsrs r0, 16\n"
+ "\tcmp r1, r0\n"
+ "\tbne _08041D52\n"
+ "\tlsls r1, r5, 24\n"
+ "\tlsrs r1, 24\n"
+ "\tadds r0, r7, 0\n"
+ "\tbl CanMonLearnTMHM\n"
+ "\tcmp r0, 0\n"
+ "\tbeq _08041D52\n"
+ "\tldrh r1, [r4]\n"
+ "\tadds r0, r7, 0\n"
+ "\tbl GiveMoveToMon\n"
+ "\tlsls r0, 16\n"
+ "\tlsrs r0, 16\n"
+ "\tcmp r0, r6\n"
+ "\tbne _08041D52\n"
+ "\tldrh r1, [r4]\n"
+ "\tadds r0, r7, 0\n"
+ "\tbl DeleteFirstMoveAndGiveMoveToMon\n"
+ "_08041D52:\n"
+ "\tadds r0, r5, 0x1\n"
+ "\tlsls r0, 16\n"
+ "\tlsrs r5, r0, 16\n"
+ "\tcmp r5, 0x39\n"
+ "\tbls _08041D16\n"
+ "_08041D5C:\n"
+ "\tmov r1, r8\n"
+ "\tlsls r0, r1, 16\n"
+ "\tlsrs r6, r0, 16\n"
+ "\tcmp r6, 0x3\n"
+ "\tbls _08041CFA\n"
+ "\tmovs r6, 0\n"
+ "\tmov r2, r9\n"
+ "\tldrh r0, [r2]\n"
+ "\tldr r3, _08041E20 @ =gUnknown_030004E0\n"
+ "\tmov r10, r3\n"
+ "\tcmp r0, 0\n"
+ "\tbeq _08041DC6\n"
+ "\tmov r4, r9\n"
+ "\tldr r0, _08041E24 @ =gUnknown_03000500\n"
+ "\tmov r9, r0\n"
+ "\tmov r12, r10\n"
+ "_08041D7C:\n"
+ "\tmovs r5, 0\n"
+ "\tlsls r2, r6, 1\n"
+ "\tadds r6, 0x1\n"
+ "\tmov r8, r6\n"
+ "\tadds r3, r2, r4\n"
+ "_08041D86:\n"
+ "\tlsls r0, r5, 1\n"
+ "\tadd r0, r9\n"
+ "\tldrh r2, [r3]\n"
+ "\tadds r1, r2, 0\n"
+ "\tldrh r0, [r0]\n"
+ "\tcmp r1, r0\n"
+ "\tbne _08041DA8\n"
+ "\tcmp r1, 0\n"
+ "\tbeq _08041DA8\n"
+ "\tldr r1, [sp]\n"
+ "\tadds r0, r1, 0x1\n"
+ "\tlsls r0, 16\n"
+ "\tlsrs r0, 16\n"
+ "\tstr r0, [sp]\n"
+ "\tlsls r1, 1\n"
+ "\tadd r1, r12\n"
+ "\tstrh r2, [r1]\n"
+ "_08041DA8:\n"
+ "\tadds r0, r5, 0x1\n"
+ "\tlsls r0, 16\n"
+ "\tlsrs r5, r0, 16\n"
+ "\tcmp r5, 0x3\n"
+ "\tbls _08041D86\n"
+ "\tmov r1, r8\n"
+ "\tlsls r0, r1, 16\n"
+ "\tlsrs r6, r0, 16\n"
+ "\tcmp r6, 0x3\n"
+ "\tbhi _08041DC6\n"
+ "\tlsls r0, r6, 1\n"
+ "\tadds r0, r4\n"
+ "\tldrh r0, [r0]\n"
+ "\tcmp r0, 0\n"
+ "\tbne _08041D7C\n"
+ "_08041DC6:\n"
+ "\tmovs r6, 0\n"
+ "\tmov r2, r10\n"
+ "\tldrh r0, [r2]\n"
+ "\tcmp r0, 0\n"
+ "\tbeq _08041E50\n"
+ "_08041DD0:\n"
+ "\tmovs r5, 0\n"
+ "\tadds r3, r6, 0x1\n"
+ "\tmov r8, r3\n"
+ "\tldr r0, [sp, 0x4]\n"
+ "\tcmp r5, r0\n"
+ "\tbcs _08041E38\n"
+ "\tldr r2, _08041E18 @ =0x0000ffff\n"
+ "_08041DDE:\n"
+ "\tldr r1, _08041E28 @ =gUnknown_03000470\n"
+ "\tlsls r0, r5, 1\n"
+ "\tadds r0, r1\n"
+ "\tldrh r1, [r0]\n"
+ "\tcmp r1, 0\n"
+ "\tbeq _08041E2C\n"
+ "\tlsls r0, r6, 1\n"
+ "\tmov r3, r10\n"
+ "\tadds r4, r0, r3\n"
+ "\tldrh r0, [r4]\n"
+ "\tcmp r0, r1\n"
+ "\tbne _08041E2C\n"
+ "\tadds r1, r0, 0\n"
+ "\tadds r0, r7, 0\n"
+ "\tstr r2, [sp, 0x8]\n"
+ "\tbl GiveMoveToMon\n"
+ "\tlsls r0, 16\n"
+ "\tlsrs r0, 16\n"
+ "\tldr r2, [sp, 0x8]\n"
+ "\tcmp r0, r2\n"
+ "\tbne _08041E38\n"
+ "\tldrh r1, [r4]\n"
+ "\tadds r0, r7, 0\n"
+ "\tbl DeleteFirstMoveAndGiveMoveToMon\n"
+ "\tb _08041E38\n"
+ "\t.align 2, 0\n"
+ "_08041E14: .4byte gUnknown_030004D8\n"
+ "_08041E18: .4byte 0x0000ffff\n"
+ "_08041E1C: .4byte 0x00000121\n"
+ "_08041E20: .4byte gUnknown_030004E0\n"
+ "_08041E24: .4byte gUnknown_03000500\n"
+ "_08041E28: .4byte gUnknown_03000470\n"
+ "_08041E2C:\n"
+ "\tadds r0, r5, 0x1\n"
+ "\tlsls r0, 16\n"
+ "\tlsrs r5, r0, 16\n"
+ "\tldr r0, [sp, 0x4]\n"
+ "\tcmp r5, r0\n"
+ "\tbcc _08041DDE\n"
+ "_08041E38:\n"
+ "\tmov r1, r8\n"
+ "\tlsls r0, r1, 16\n"
+ "\tlsrs r6, r0, 16\n"
+ "\tcmp r6, 0x3\n"
+ "\tbhi _08041E50\n"
+ "\tldr r0, _08041E60 @ =gUnknown_030004E0\n"
+ "\tlsls r1, r6, 1\n"
+ "\tadds r1, r0\n"
+ "\tldrh r1, [r1]\n"
+ "\tmov r10, r0\n"
+ "\tcmp r1, 0\n"
+ "\tbne _08041DD0\n"
+ "_08041E50:\n"
+ "\tadd sp, 0xC\n"
+ "\tpop {r3-r5}\n"
+ "\tmov r8, r3\n"
+ "\tmov r9, r4\n"
+ "\tmov r10, r5\n"
+ "\tpop {r4-r7}\n"
+ "\tpop {r0}\n"
+ "\tbx r0\n"
+ "\t.align 2, 0\n"
+ "_08041E60: .4byte gUnknown_030004E0");
+}
+#endif
+
+static void RemoveEggFromDayCare(struct DayCareData *dayCareData)
+{
+ dayCareData->misc.countersEtc.personalityLo = 0;
+ dayCareData->misc.countersEtc.unk_11a = 0;
+}
+
+void sub_8041E7C(void)
+{
+ RemoveEggFromDayCare(&gSaveBlock1.daycareData);
+}
+
+static void incense_effects(u16 *species, struct DayCareData *dayCareData)
+{
+ u16 momItem, dadItem;
+ if (*species == SPECIES_WYNAUT || *species == SPECIES_AZURILL)
+ {
+ momItem = GetBoxMonData(&dayCareData->mons[0], MON_DATA_HELD_ITEM);
+ dadItem = GetBoxMonData(&dayCareData->mons[1], MON_DATA_HELD_ITEM);
+ if (*species == SPECIES_WYNAUT && momItem != ITEM_LAX_INCENSE && dadItem != ITEM_LAX_INCENSE)
+ {
+ *species = SPECIES_WOBBUFFET;
+ }
+ if (*species == SPECIES_AZURILL && momItem != ITEM_SEA_INCENSE && dadItem != ITEM_SEA_INCENSE)
+ {
+ *species = SPECIES_MARILL;
+ }
+ }
+}
+
+static u16 sub_8041EEC(struct DayCareData *dayCareData, u8 *a1) // inherit_species_from_mom
+{
+ u16 i;
+ u16 species[2];
+ u16 eggSpecies;
+ u8 buffer;
+ for (i=0; i<2; i++)
+ {
+ species[i] = GetBoxMonData(&dayCareData->mons[i], MON_DATA_SPECIES);
+ if (species[i] == SPECIES_DITTO)
+ {
+ a1[0] = i ^ 1;
+ a1[1] = i;
+ }
+ else if (GetBoxMonGender(&dayCareData->mons[i]) == MON_FEMALE)
+ {
+ a1[0] = i;
+ a1[1] = i ^ 1;
+ }
+ }
+ eggSpecies = sub_8041870(species[a1[0]]);
+ if (eggSpecies == SPECIES_NIDORAN_F && dayCareData->misc.countersEtc.personalityLo & 0x8000)
+ {
+ eggSpecies = SPECIES_NIDORAN_M;
+ }
+ if (eggSpecies == SPECIES_ILLUMISE && dayCareData->misc.countersEtc.personalityLo & 0x8000)
+ {
+ eggSpecies = SPECIES_VOLBEAT;
+ }
+ if (species[a1[1]] == SPECIES_DITTO && GetBoxMonGender(&dayCareData->mons[a1[0]]) != MON_FEMALE)
+ {
+ buffer = a1[1];
+ a1[1] = a1[0];
+ a1[0] = buffer;
+ }
+ return eggSpecies;
+}
+
+static void sub_8041FC4(struct DayCareData *dayCareData) // give_egg
+{
+ struct Pokemon egg;
+ u16 species;
+ u8 parents[2];
+ u8 isEgg;
+ species = sub_8041EEC(dayCareData, parents);
+ incense_effects(&species, dayCareData);
+ sub_80420FC(&egg, species, dayCareData);
+ InheritIVs(&egg, dayCareData);
+ daycare_build_child_moveset(&egg, &dayCareData->mons[parents[1]], &dayCareData->mons[parents[0]]);
+ isEgg = TRUE;
+ SetMonData(&egg, MON_DATA_IS_EGG, &isEgg);
+ gPlayerParty[5] = egg;
+ party_compaction();
+ CalculatePlayerPartyCount();
+ RemoveEggFromDayCare(dayCareData);
+}
+
+
+void sub_8042044(struct Pokemon *mon, u16 species, u8 overwriteMetLocation) // scr_create_egg
+{
+ u8 metLevel;
+ u16 ball;
+ u8 language;
+ u8 metLocation;
+ u8 isEgg;
+ CreateMon(mon, species, 5, 0x20, FALSE, 0, FALSE, 0);
+ metLevel = 0;
+ ball = ITEM_POKE_BALL;
+ language = LANGUAGE_JAPANESE;
+ SetMonData(mon, MON_DATA_POKEBALL, (u8 *)&ball);
+ SetMonData(mon, MON_DATA_NICKNAME, gUnknown_08209AD4);
+ SetMonData(mon, MON_DATA_FRIENDSHIP, &gBaseStats[species].eggCycles);
+ SetMonData(mon, MON_DATA_MET_LEVEL, &metLevel);
+ SetMonData(mon, MON_DATA_LANGUAGE, &language);
+ if (overwriteMetLocation)
+ {
+ metLocation = 0xfd;
+ SetMonData(mon, MON_DATA_MET_LOCATION, &metLocation);
+ }
+ isEgg = TRUE;
+ SetMonData(mon, MON_DATA_IS_EGG, &isEgg);
+}
+
+static void sub_80420FC(struct Pokemon *mon, u16 species, struct DayCareData *dayCareData)
+{
+ u32 personality;
+ u16 ball;
+ u8 metLevel;
+ u8 language;
+ personality = dayCareData->misc.countersEtc.personalityLo | (Random() << 16);
+ CreateMon(mon, species, 5, 0x20, TRUE, personality, FALSE, 0);
+ metLevel = 0;
+ ball = ITEM_POKE_BALL;
+ language = LANGUAGE_JAPANESE;
+ SetMonData(mon, MON_DATA_POKEBALL, (u8 *)&ball);
+ SetMonData(mon, MON_DATA_NICKNAME, gUnknown_08209AD4);
+ SetMonData(mon, MON_DATA_FRIENDSHIP, &gBaseStats[species].eggCycles);
+ SetMonData(mon, MON_DATA_MET_LEVEL, &metLevel);
+ SetMonData(mon, MON_DATA_LANGUAGE, &language);
+}
+
+void sp0B8_daycare(void)
+{
+ sub_8041FC4(&gSaveBlock1.daycareData);
+}
+
+#ifdef NONMATCHING
+static bool8 sub_80421B0(struct DayCareData *dayCareData)
+{
+ struct BoxPokemon *parent;
+ u32 i;
+ int v0;
+ int steps;
+ v0 = 0;
+ for (i=0, parent=&dayCareData->mons[0]; i<2; parent++, i++)
+ {
+ if (GetBoxMonData(parent, MON_DATA_SANITY_BIT2, v0))
+ {
+ dayCareData->misc.countersEtc.steps[i]++;
+ v0++;
+ }
+ }
+ if (dayCareData->misc.countersEtc.personalityLo == 0 && v0 == 2 && dayCareData->misc.extra.misc[4] == 0xff && daycare_relationship_score(dayCareData) > (u32)((u32)(Random() * 100) / 0xffff))
+ {
+ sub_8041940();
+ }
+ if ((++dayCareData->misc.countersEtc.unk_11a) == 0xff)
+ {
+ for (i=0; i<gPlayerPartyCount; i++)
+ {
+ if (GetMonData(&gPlayerParty[i], MON_DATA_IS_EGG))
+ {
+ steps = GetMonData(&gPlayerParty[i], MON_DATA_FRIENDSHIP);
+ if (steps == 0)
+ {
+ gSpecialVar_0x8004 = i;
+ return TRUE;
+ }
+ steps--;
+ SetMonData(&gPlayerParty[i], MON_DATA_FRIENDSHIP, (u8 *)&steps);
+ }
+ }
+ }
+ return FALSE;
+}
+#else
+__attribute__((naked))
+static bool8 sub_80421B0(struct DayCareData *dayCareData)
+{
+ asm_unified("\tpush {r4-r7,lr}\n"
+ "\tsub sp, 0x8\n"
+ "\tadds r7, r0, 0\n"
+ "\tmovs r2, 0\n"
+ "\tmovs r6, 0\n"
+ "\tadds r5, r7, 0\n"
+ "_080421BC:\n"
+ "\tlsls r4, r6, 2\n"
+ "\tadds r0, r5, 0\n"
+ "\tmovs r1, 0x5\n"
+ "\tstr r2, [sp, 0x4]\n"
+ "\tbl GetBoxMonData\n"
+ "\tldr r2, [sp, 0x4]\n"
+ "\tcmp r0, 0\n"
+ "\tbeq _080421DE\n"
+ "\tmovs r0, 0x88\n"
+ "\tlsls r0, 1\n"
+ "\tadds r1, r7, r0\n"
+ "\tadds r1, r4\n"
+ "\tldr r0, [r1]\n"
+ "\tadds r0, 0x1\n"
+ "\tstr r0, [r1]\n"
+ "\tadds r2, 0x1\n"
+ "_080421DE:\n"
+ "\tadds r5, 0x50\n"
+ "\tadds r6, 0x1\n"
+ "\tcmp r6, 0x1\n"
+ "\tbls _080421BC\n"
+ "\tmovs r1, 0x8C\n"
+ "\tlsls r1, 1\n"
+ "\tadds r0, r7, r1\n"
+ "\tldrh r0, [r0]\n"
+ "\tcmp r0, 0\n"
+ "\tbne _08042226\n"
+ "\tcmp r2, 0x2\n"
+ "\tbne _08042226\n"
+ "\tsubs r1, 0x4\n"
+ "\tadds r0, r7, r1\n"
+ "\tldrb r0, [r0]\n"
+ "\tcmp r0, 0xFF\n"
+ "\tbne _08042226\n"
+ "\tadds r0, r7, 0\n"
+ "\tbl daycare_relationship_score\n"
+ "\tadds r4, r0, 0\n"
+ "\tlsls r4, 24\n"
+ "\tlsrs r4, 24\n"
+ "\tbl Random\n"
+ "\tlsls r0, 16\n"
+ "\tlsrs r0, 16\n"
+ "\tmovs r1, 0x64\n"
+ "\tmuls r0, r1\n"
+ "\tldr r1, _08042240 @ =0x0000ffff\n"
+ "\tbl __udivsi3\n"
+ "\tcmp r4, r0\n"
+ "\tbls _08042226\n"
+ "\tbl sub_8041940\n"
+ "_08042226:\n"
+ "\tmovs r0, 0x8D\n"
+ "\tlsls r0, 1\n"
+ "\tadds r1, r7, r0\n"
+ "\tldrb r0, [r1]\n"
+ "\tadds r0, 0x1\n"
+ "\tstrb r0, [r1]\n"
+ "\tlsls r0, 24\n"
+ "\tlsrs r0, 24\n"
+ "\tcmp r0, 0xFF\n"
+ "\tbne _08042290\n"
+ "\tmovs r6, 0\n"
+ "\tb _08042288\n"
+ "\t.align 2, 0\n"
+ "_08042240: .4byte 0x0000ffff\n"
+ "_08042244:\n"
+ "\tmovs r0, 0x64\n"
+ "\tadds r1, r6, 0\n"
+ "\tmuls r1, r0\n"
+ "\tldr r0, _08042270 @ =gPlayerParty\n"
+ "\tadds r4, r1, r0\n"
+ "\tadds r0, r4, 0\n"
+ "\tmovs r1, 0x2D\n"
+ "\tbl GetMonData\n"
+ "\tcmp r0, 0\n"
+ "\tbeq _08042286\n"
+ "\tadds r0, r4, 0\n"
+ "\tmovs r1, 0x20\n"
+ "\tbl GetMonData\n"
+ "\tstr r0, [sp]\n"
+ "\tcmp r0, 0\n"
+ "\tbne _08042278\n"
+ "\tldr r0, _08042274 @ =gSpecialVar_0x8004\n"
+ "\tstrh r6, [r0]\n"
+ "\tmovs r0, 0x1\n"
+ "\tb _08042292\n"
+ "\t.align 2, 0\n"
+ "_08042270: .4byte gPlayerParty\n"
+ "_08042274: .4byte gSpecialVar_0x8004\n"
+ "_08042278:\n"
+ "\tsubs r0, 0x1\n"
+ "\tstr r0, [sp]\n"
+ "\tadds r0, r4, 0\n"
+ "\tmovs r1, 0x20\n"
+ "\tmov r2, sp\n"
+ "\tbl SetMonData\n"
+ "_08042286:\n"
+ "\tadds r6, 0x1\n"
+ "_08042288:\n"
+ "\tldr r0, _0804229C @ =gPlayerPartyCount\n"
+ "\tldrb r0, [r0]\n"
+ "\tcmp r6, r0\n"
+ "\tbcc _08042244\n"
+ "_08042290:\n"
+ "\tmovs r0, 0\n"
+ "_08042292:\n"
+ "\tadd sp, 0x8\n"
+ "\tpop {r4-r7}\n"
+ "\tpop {r1}\n"
+ "\tbx r1\n"
+ "\t.align 2, 0\n"
+ "_0804229C: .4byte gPlayerPartyCount");
+}
+#endif
+
+bool8 sub_80422A0(void)
+{
+ return sub_80421B0(&gSaveBlock1.daycareData);
+}
+
+static bool8 sub_80422B4(struct DayCareData *dayCareData)
+{
+ return (u32)((-dayCareData->misc.countersEtc.personalityLo) | dayCareData->misc.countersEtc.personalityLo) >> 31;
+}
+
+static void sub_80422C4(struct DayCareData *dayCareData)
+{
+ u8 language;
+ if (GetBoxMonData(&dayCareData->mons[0], MON_DATA_SPECIES) != 0)
+ {
+ GetBoxMonNick(&dayCareData->mons[0], gStringVar1);
+ language = GetBoxMonData(&dayCareData->mons[0], MON_DATA_LANGUAGE);
+ GetBoxMonData(&dayCareData->mons[0], MON_DATA_OT_NAME, gStringVar3);
+ ConvertInternationalString(gStringVar3, language);
+ }
+ if (GetBoxMonData(&dayCareData->mons[1], MON_DATA_SPECIES) != 0)
+ {
+ GetBoxMonNick(&dayCareData->mons[1], gStringVar2);
+ }
+}
+
+u16 sub_8042328(void)
+{
+ GetBoxMonNick(&gPlayerParty[gLastFieldPokeMenuOpened].box, gStringVar1);
+ return GetBoxMonData(&gPlayerParty[gLastFieldPokeMenuOpened].box, MON_DATA_SPECIES);
+}
+
+void sp0B5_daycare(void)
+{
+ sub_80422C4(&gSaveBlock1.daycareData);
+}
+
+u8 sp0B6_daycare(void)
+{
+ u8 monCount;
+ if (sub_80422B4(&gSaveBlock1.daycareData))
+ {
+ return 1;
+ }
+ monCount = Daycare_CountPokemon(&gSaveBlock1.daycareData);
+ if (monCount != 0)
+ {
+ return monCount + 1;
+ }
+ return 0;
+}
+
+#ifdef NONMATCHING
+static
+#endif
+bool8 sub_80423A8(u16 *a, u16 *b)
+{
+ int i, j;
+ u16 *v0, *v1, v2;
+ for (i=0, v0=a; i<2; v0++, i++)
+ {
+ for (j=0, v2=*v0, v1=b; j<2; v1++, j++)
+ {
+ if (v2 == *v1)
+ {
+ return TRUE;
+ }
+ }
+ }
+ return FALSE;
+}
+
+#ifdef NONMATCHING
+static u8 daycare_relationship_score(struct DayCareData *dayCareData)
+{
+ u16 species[2];
+ u32 otIds[2];
+ u32 genders[2];
+ u16 eggGroups[2][2];
+ int i;
+ u16 *spc;
+ u32 *ids;
+ u32 *gnd;
+ u16 *egg1;
+ u16 *egg2;
+ struct BoxPokemon *parent;
+ for (i=0, parent=&dayCareData->mons[0], spc=species, ids=otIds, gnd=genders, egg1=&eggGroups[0][0], egg2=&eggGroups[0][1]; i<2; spc++, egg1+=2, egg2+=2, parent++, i++)
+ {
+ *spc = GetBoxMonData(parent, MON_DATA_SPECIES);
+ *ids++ = GetBoxMonData(parent, MON_DATA_OT_ID);
+ *gnd++ = GetGenderFromSpeciesAndPersonality(*spc, GetBoxMonData(parent, MON_DATA_PERSONALITY));
+ *egg1 = gBaseStats[*spc].eggGroup1;
+ *egg2 = gBaseStats[*spc].eggGroup2;
+ }
+ if (eggGroups[0][0] == 0xf)
+ {
+ return 0;
+ }
+ if (eggGroups[1][0] == 0xf)
+ {
+ return 0;
+ }
+ if (eggGroups[0][0] == 0xd && eggGroups[1][0] == 0xd)
+ {
+ return 0;
+ }
+ else if (eggGroups[0][0] == 0xd || eggGroups[1][0] == 0xd)
+ {
+ if (otIds[0] == otIds[1])
+ {
+ return 20;
+ }
+ return 50;
+ }
+ if (genders[0] == genders[1] || genders[0] == MON_GENDERLESS || genders[1] == MON_GENDERLESS)
+ {
+ return 0;
+ }
+ if (!sub_80423A8(eggGroups[0], eggGroups[1]))
+ {
+ return 0;
+ }
+ if (species[0] == species[1])
+ {
+ if (otIds[0] == otIds[1])
+ {
+ return 50;
+ }
+ return 70;
+ }
+ else
+ {
+ if (otIds[0] != otIds[1])
+ {
+ return 50;
+ }
+ return 20;
+ }
+}
+#else
+__attribute__((naked))
+static u8 daycare_relationship_score(struct DayCareData *dayCareData)
+{
+ asm_unified("\tpush {r4-r7,lr}\n"
+ "\tmov r7, r10\n"
+ "\tmov r6, r9\n"
+ "\tmov r5, r8\n"
+ "\tpush {r5-r7}\n"
+ "\tsub sp, 0x2C\n"
+ "\tmovs r1, 0\n"
+ "\tmov r8, r1\n"
+ "\tmov r2, sp\n"
+ "\tadds r2, 0x8\n"
+ "\tstr r2, [sp, 0x1C]\n"
+ "\tadd r1, sp, 0xC\n"
+ "\tmov r10, r1\n"
+ "\tadds r2, 0xC\n"
+ "\tstr r2, [sp, 0x20]\n"
+ "\tmov r1, sp\n"
+ "\tadds r1, 0x2\n"
+ "\tldr r2, _08042488 @ =gBaseStats\n"
+ "\tmov r9, r2\n"
+ "\tldr r5, [sp, 0x1C]\n"
+ "\tadds r7, r1, 0\n"
+ "\tmov r6, sp\n"
+ "\tldr r1, [sp, 0x20]\n"
+ "\tstr r1, [sp, 0x24]\n"
+ "\tmov r2, r10\n"
+ "\tstr r2, [sp, 0x28]\n"
+ "\tadds r4, r0, 0\n"
+ "_0804240E:\n"
+ "\tadds r0, r4, 0\n"
+ "\tmovs r1, 0xB\n"
+ "\tbl GetBoxMonData\n"
+ "\tstrh r0, [r5]\n"
+ "\tadds r0, r4, 0\n"
+ "\tmovs r1, 0x1\n"
+ "\tbl GetBoxMonData\n"
+ "\tldr r1, [sp, 0x28]\n"
+ "\tstm r1!, {r0}\n"
+ "\tstr r1, [sp, 0x28]\n"
+ "\tadds r0, r4, 0\n"
+ "\tmovs r1, 0\n"
+ "\tbl GetBoxMonData\n"
+ "\tadds r1, r0, 0\n"
+ "\tldrh r0, [r5]\n"
+ "\tbl GetGenderFromSpeciesAndPersonality\n"
+ "\tlsls r0, 24\n"
+ "\tlsrs r0, 24\n"
+ "\tldr r2, [sp, 0x24]\n"
+ "\tstm r2!, {r0}\n"
+ "\tstr r2, [sp, 0x24]\n"
+ "\tldrh r1, [r5]\n"
+ "\tlsls r0, r1, 3\n"
+ "\tsubs r0, r1\n"
+ "\tlsls r0, 2\n"
+ "\tadd r0, r9\n"
+ "\tldrb r0, [r0, 0x14]\n"
+ "\tstrh r0, [r6]\n"
+ "\tldrh r1, [r5]\n"
+ "\tlsls r0, r1, 3\n"
+ "\tsubs r0, r1\n"
+ "\tlsls r0, 2\n"
+ "\tadd r0, r9\n"
+ "\tldrb r0, [r0, 0x15]\n"
+ "\tstrh r0, [r7]\n"
+ "\tadds r5, 0x2\n"
+ "\tadds r7, 0x4\n"
+ "\tadds r6, 0x4\n"
+ "\tadds r4, 0x50\n"
+ "\tmovs r0, 0x1\n"
+ "\tadd r8, r0\n"
+ "\tmov r1, r8\n"
+ "\tcmp r1, 0x1\n"
+ "\tbls _0804240E\n"
+ "\tmov r0, sp\n"
+ "\tldrh r1, [r0]\n"
+ "\tcmp r1, 0xF\n"
+ "\tbeq _08042484\n"
+ "\tldrh r0, [r0, 0x4]\n"
+ "\tcmp r0, 0xF\n"
+ "\tbeq _08042484\n"
+ "\tcmp r1, 0xD\n"
+ "\tbne _0804248C\n"
+ "\tcmp r0, 0xD\n"
+ "\tbne _08042490\n"
+ "_08042484:\n"
+ "\tmovs r0, 0\n"
+ "\tb _080424E4\n"
+ "\t.align 2, 0\n"
+ "_08042488: .4byte gBaseStats\n"
+ "_0804248C:\n"
+ "\tcmp r0, 0xD\n"
+ "\tbne _0804249C\n"
+ "_08042490:\n"
+ "\tldr r1, [sp, 0xC]\n"
+ "\tmov r2, r10\n"
+ "\tldr r0, [r2, 0x4]\n"
+ "\tcmp r1, r0\n"
+ "\tbeq _080424DE\n"
+ "\tb _080424E2\n"
+ "_0804249C:\n"
+ "\tldr r0, [sp, 0x14]\n"
+ "\tldr r2, [sp, 0x20]\n"
+ "\tldr r1, [r2, 0x4]\n"
+ "\tcmp r0, r1\n"
+ "\tbeq _08042484\n"
+ "\tcmp r0, 0xFF\n"
+ "\tbeq _08042484\n"
+ "\tcmp r1, 0xFF\n"
+ "\tbeq _08042484\n"
+ "\tadd r1, sp, 0x4\n"
+ "\tmov r0, sp\n"
+ "\tbl sub_80423A8\n"
+ "\tlsls r0, 24\n"
+ "\tcmp r0, 0\n"
+ "\tbeq _08042484\n"
+ "\tldr r0, [sp, 0x1C]\n"
+ "\tldrh r1, [r0, 0x2]\n"
+ "\tldrh r0, [r0]\n"
+ "\tcmp r0, r1\n"
+ "\tbne _080424D4\n"
+ "\tldr r1, [sp, 0xC]\n"
+ "\tmov r2, r10\n"
+ "\tldr r0, [r2, 0x4]\n"
+ "\tcmp r1, r0\n"
+ "\tbeq _080424E2\n"
+ "\tmovs r0, 0x46\n"
+ "\tb _080424E4\n"
+ "_080424D4:\n"
+ "\tldr r1, [sp, 0xC]\n"
+ "\tmov r2, r10\n"
+ "\tldr r0, [r2, 0x4]\n"
+ "\tcmp r1, r0\n"
+ "\tbne _080424E2\n"
+ "_080424DE:\n"
+ "\tmovs r0, 0x14\n"
+ "\tb _080424E4\n"
+ "_080424E2:\n"
+ "\tmovs r0, 0x32\n"
+ "_080424E4:\n"
+ "\tadd sp, 0x2C\n"
+ "\tpop {r3-r5}\n"
+ "\tmov r8, r3\n"
+ "\tmov r9, r4\n"
+ "\tmov r10, r5\n"
+ "\tpop {r4-r7}\n"
+ "\tpop {r1}\n"
+ "\tbx r1");
+}
+#endif
+
+u8 daycare_relationship_score_from_savegame(void)
+{
+ return daycare_relationship_score(&gSaveBlock1.daycareData);
+}
+
+void sp0B9_daycare_relationship_comment(void)
+{
+ u8 whichString;
+ u8 relationshipScore;
+
+ relationshipScore = daycare_relationship_score_from_savegame();
+ whichString = 0;
+ if (relationshipScore == 0)
+ whichString = 3;
+ if (relationshipScore == 20)
+ whichString = 2;
+ if (relationshipScore == 50)
+ whichString = 1;
+ if (relationshipScore == 70)
+ whichString = 0;
+ StringCopy(gStringVar4, gUnknown_08209AC4[whichString]);
+}
+
+#ifdef NONMATCHING
+bool8 NameHasGenderSymbol(const u8 *name, u8 genderRatio)
+{
+ u8 i;
+ u8 flags[2];
+
+ // This portion is nonmatching
+ flags[1] = 0;
+ flags[0] = 0;
+ for (i = 0; name[i] != EOS; i ++)
+ // End nonmatching portion
+
+ {
+ if (name[i] == CHAR_MALE) flags[0] ++;
+ if (name[i] == CHAR_FEMALE) flags[1] ++;
+ }
+ if (genderRatio == MON_MALE && flags[0] && !flags[1]) return TRUE;
+ if (genderRatio == MON_FEMALE && flags[1] && !flags[0]) return TRUE;
+ return FALSE;
+}
+#else
+__attribute__((naked))
+bool8 NameHasGenderSymbol(const u8 *name, u8 genderRatio)
+{
+ asm_unified("\n"
+ "\tpush {r4,r5,lr}\n"
+ "\tsub sp, 0x4\n"
+ "\tadds r4, r0, 0\n"
+ "\tlsls r1, 24\n"
+ "\tlsrs r5, r1, 24\n"
+ "\tmov r2, sp\n"
+ "\tmov r1, sp\n"
+ "\tmovs r0, 0\n"
+ "\tstrb r0, [r1, 0x1]\n"
+ "\tstrb r0, [r2]\n"
+ "\tmovs r3, 0\n"
+ "\tldrb r0, [r4]\n"
+ "\tcmp r0, 0xFF\n"
+ "\tbeq _0804258C\n"
+ "_08042564:\n"
+ "\tadds r1, r4, r3\n"
+ "\tldrb r0, [r1]\n"
+ "\tcmp r0, 0xB5\n"
+ "\tbne _08042572\n"
+ "\tldrb r0, [r2]\n"
+ "\tadds r0, 0x1\n"
+ "\tstrb r0, [r2]\n"
+ "_08042572:\n"
+ "\tldrb r0, [r1]\n"
+ "\tcmp r0, 0xB6\n"
+ "\tbne _0804257E\n"
+ "\tldrb r0, [r2, 0x1]\n"
+ "\tadds r0, 0x1\n"
+ "\tstrb r0, [r2, 0x1]\n"
+ "_0804257E:\n"
+ "\tadds r0, r3, 0x1\n"
+ "\tlsls r0, 24\n"
+ "\tlsrs r3, r0, 24\n"
+ "\tadds r0, r4, r3\n"
+ "\tldrb r0, [r0]\n"
+ "\tcmp r0, 0xFF\n"
+ "\tbne _08042564\n"
+ "_0804258C:\n"
+ "\tcmp r5, 0\n"
+ "\tbne _080425A0\n"
+ "\tmov r0, sp\n"
+ "\tldrb r0, [r0]\n"
+ "\tcmp r0, 0\n"
+ "\tbeq _080425A0\n"
+ "\tmov r0, sp\n"
+ "\tldrb r0, [r0, 0x1]\n"
+ "\tcmp r0, 0\n"
+ "\tbeq _080425B4\n"
+ "_080425A0:\n"
+ "\tcmp r5, 0xFE\n"
+ "\tbne _080425B8\n"
+ "\tmov r0, sp\n"
+ "\tldrb r0, [r0, 0x1]\n"
+ "\tcmp r0, 0\n"
+ "\tbeq _080425B8\n"
+ "\tmov r0, sp\n"
+ "\tldrb r0, [r0]\n"
+ "\tcmp r0, 0\n"
+ "\tbne _080425B8\n"
+ "_080425B4:\n"
+ "\tmovs r0, 0x1\n"
+ "\tb _080425BA\n"
+ "_080425B8:\n"
+ "\tmovs r0, 0\n"
+ "_080425BA:\n"
+ "\tadd sp, 0x4\n"
+ "\tpop {r4,r5}\n"
+ "\tpop {r1}\n"
+ "\tbx r1");
+}
+#endif
+
+static u8 *AppendGenderSymbol(u8 *name, u8 gender)
+{
+ if (gender == MON_MALE)
+ {
+ if (!NameHasGenderSymbol(name, MON_MALE))
+ return StringAppend(name, gOtherText_MaleSymbol3);
+ }
+
+ else if (gender == MON_FEMALE)
+ {
+ if (!NameHasGenderSymbol(name, MON_FEMALE))
+ return StringAppend(name, gOtherText_FemaleSymbol3);
+ }
+ return StringAppend(name, gOtherText_GenderlessSymbol);
+}
+
+static u8 *MonAppendGenderSymbol(u8 *name, struct BoxPokemon *boxMon)
+{
+ return AppendGenderSymbol(name, GetBoxMonGender(boxMon));
+}
+
+static void DaycareLevelMenuGetText(struct DayCareData *dayCareData, u8 *dest)
+{
+ u8 buffers[2][20];
+ u8 i;
+ *dest = EOS;
+ for (i = 0; i < 2; i ++)
+ {
+ GetBoxMonNick(&dayCareData->mons[i], buffers[i]);
+ MonAppendGenderSymbol(buffers[i], &dayCareData->mons[i]);
+ }
+ StringCopy(dest, buffers[0]);
+ StringAppend(dest, gOtherText_NewLine2);
+ StringAppend(dest, buffers[1]);
+ StringAppend(dest, gOtherText_NewLine2);
+ StringAppend(dest, gOtherText_CancelAndLv);
+}
+
+static void DaycareLevelMenuGetLevelText(struct DayCareData *dayCareData, u8 *dest)
+{
+ u8 i;
+ u8 level;
+ *dest = EOS;
+ for (i = 0; i < 2; i ++)
+ {
+ level = Daycare_GetLevelAfterSteps(&dayCareData->mons[i], dayCareData->misc.countersEtc.steps[i]);
+ dest[0] = 0x34;
+ dest[1] = 0xFC;
+ dest[2] = 0x14;
+ dest[3] = 0x06;
+ dest = ConvertIntToDecimalStringN(dest + 4, level, STR_CONV_MODE_RIGHT_ALIGN, 3);
+ dest[0] = 0xFC;
+ dest[1] = 0x14;
+ dest[2] = 0x00;
+ dest = StringCopy(dest + 3, gOtherText_NewLine2);
+ }
+ *dest = EOS;
+}
+
+static void DaycareLevelMenuProcessKeyInput(u8 taskId)
+{
+ if (gMain.newKeys & DPAD_UP)
+ {
+ if (gTasks[taskId].data[0] != 0)
+ {
+ gTasks[taskId].data[0] --;
+ MoveMenuCursor(-1);
+ PlaySE(SE_SELECT);
+ }
+ }
+ else if (gMain.newKeys & DPAD_DOWN)
+ {
+ if (gTasks[taskId].data[0] != 2)
+ {
+ gTasks[taskId].data[0] ++;
+ MoveMenuCursor(+1);
+ PlaySE(SE_SELECT);
+ }
+ }
+ else if (gMain.newKeys & A_BUTTON)
+ {
+ HandleDestroyMenuCursors();
+ PlaySE(SE_SELECT);
+ gLastFieldPokeMenuOpened = gScriptResult = gTasks[taskId].data[0];
+ DestroyTask(taskId);
+ MenuZeroFillWindowRect(15, 6, 29, 13);
+ EnableBothScriptContexts();
+ }
+ else if (gMain.newKeys & B_BUTTON)
+ {
+ HandleDestroyMenuCursors();
+ gLastFieldPokeMenuOpened = gScriptResult = 2;
+ DestroyTask(taskId);
+ MenuZeroFillWindowRect(15, 6, 29, 13);
+ EnableBothScriptContexts();
+ }
+}
+
+void ShowDaycareLevelMenu(void)
+{
+ u8 buffer[100];
+ MenuDrawTextWindow(15, 6, 29, 13);
+ DaycareLevelMenuGetText(&gSaveBlock1.daycareData, buffer);
+ MenuPrint(buffer, 16, 7);
+ DaycareLevelMenuGetLevelText(&gSaveBlock1.daycareData, buffer);
+ MenuPrint_PixelCoords(buffer, 0xce, 0x38, TRUE);
+ InitMenu(0, 16, 7, 3, 0, 13);
+ CreateTask(DaycareLevelMenuProcessKeyInput, 3);
+}
+
+void ChooseSendDaycareMon(void)
+{
+ OpenPartyMenu(6, 0);
+ gMain.savedCallback = c2_exit_to_overworld_2_switch;
+}
diff --git a/src/decoration.c b/src/field/decoration.c
index 1d48692c1..e067191e9 100644
--- a/src/decoration.c
+++ b/src/field/decoration.c
@@ -619,7 +619,7 @@ const u8 DecorDesc_REGISTEEL_DOLL[] = _(
"Place it on a mat\n"
"or a desk.");
#elif GERMAN
-#include "data/decoration/descriptions_de.h"
+#include "../data/decoration/descriptions_de.h"
#endif
const u16 DecorGfx_SMALL_DESK[] = {
@@ -1389,7 +1389,7 @@ const struct Decoration gDecorations[] = {
{DECOR_REGISTEEL_DOLL, _("REGISTEEL DOLL"), DECORPERM_SOLID_MAT, DECORSHAPE_1x2, DECORCAT_DOLL, 10000, DecorDesc_REGISTEEL_DOLL, DecorGfx_REGISTEEL_DOLL}
};
#elif GERMAN
-#include "data/decoration/decorations.h"
+#include "../data/decoration/decorations.h"
#endif
const u8 *const gUnknown_083EC5E4[] = {
@@ -2199,7 +2199,7 @@ void sub_80FF0E0(u8 taskId)
void sub_80FF114(u8 taskId)
{
DrawWholeMapView();
- warp1_set(gSaveBlock1.location.mapGroup, gSaveBlock1.location.mapNum, -1, gTasks[taskId].data[3], gTasks[taskId].data[4]);
+ Overworld_SetWarpDestination(gSaveBlock1.location.mapGroup, gSaveBlock1.location.mapNum, -1, gTasks[taskId].data[3], gTasks[taskId].data[4]);
warp_in();
}
void sub_80FF160(u8 taskId)
diff --git a/src/decoration_inventory.c b/src/field/decoration_inventory.c
index 35ba7e228..083cb260c 100644
--- a/src/decoration_inventory.c
+++ b/src/field/decoration_inventory.c
@@ -1,5 +1,5 @@
//
-// Created by Scott Norton on 6/5/17.
+
//
#include "global.h"
diff --git a/src/dewford_trend.c b/src/field/dewford_trend.c
index aaf4dd66a..aaf4dd66a 100644
--- a/src/dewford_trend.c
+++ b/src/field/dewford_trend.c
diff --git a/src/diploma.c b/src/field/diploma.c
index 27601404c..27601404c 100644
--- a/src/diploma.c
+++ b/src/field/diploma.c
diff --git a/src/easy_chat.c b/src/field/easy_chat.c
index dd33e69c3..6014b3d14 100644
--- a/src/easy_chat.c
+++ b/src/field/easy_chat.c
@@ -19,6 +19,8 @@ extern const u8 gEasyChatGroupSizes[];
extern u16 gSpecialVar_0x8004;
+IWRAM_DATA u8 gUnknown_03000740;
+
// returns the end of the destination buffer text
u8 *EasyChat_GetWordText(u8 *dst, u16 word)
{
@@ -428,7 +430,7 @@ static u16 sub_80EB9D8(void)
for (i = 0; i < gEasyChatGroupSizes[EC_GROUP_POKEMON]; i++)
{
const u16 dexNum = SpeciesToNationalPokedexNum(*speciesList);
- const u8 local2 = GetNationalPokedexFlag(dexNum, 0);
+ const u8 local2 = GetSetPokedexFlag(dexNum, 0);
if (local2)
{
diff --git a/src/event_data.c b/src/field/event_data.c
index ee475343f..43d49c417 100644
--- a/src/event_data.c
+++ b/src/field/event_data.c
@@ -114,10 +114,8 @@ u16 *GetVarPointer(u16 id)
{
if (id < 0x4000)
return NULL;
-
- if ((s16)id >= 0)
+ if (id < 0x8000)
return &gSaveBlock1.vars[id - 0x4000];
-
return gSpecialVars[id - 0x8000];
}
diff --git a/src/field_camera.c b/src/field/field_camera.c
index db51cf054..db51cf054 100644
--- a/src/field_camera.c
+++ b/src/field/field_camera.c
diff --git a/src/field_control_avatar.c b/src/field/field_control_avatar.c
index ff8e8504c..ff8e8504c 100644
--- a/src/field_control_avatar.c
+++ b/src/field/field_control_avatar.c
diff --git a/src/field_door.c b/src/field/field_door.c
index ab46f0696..ab46f0696 100644
--- a/src/field_door.c
+++ b/src/field/field_door.c
diff --git a/src/field_effect.c b/src/field/field_effect.c
index 0625e9d18..afe020ac7 100644
--- a/src/field_effect.c
+++ b/src/field/field_effect.c
@@ -660,7 +660,7 @@ u8 CreateMonSprite_FieldMove(u16 species, u32 d, u32 g, s16 x, s16 y, u8 subprio
const struct CompressedSpritePalette *spritePalette;
HandleLoadSpecialPokePic(&gMonFrontPicTable[species], gMonFrontPicCoords[species].coords, gMonFrontPicCoords[species].y_offset, (u32)gUnknown_081FAF4C[3] /* this is actually u8* or something, pointing to ewram */, gUnknown_081FAF4C[3], species, g);
- spritePalette = sub_80409C8(species, d, g);
+ spritePalette = GetMonSpritePalStructFromOtIdPersonality(species, d, g);
LoadCompressedObjectPalette(spritePalette);
GetMonSpriteTemplate_803C56C(species, 3);
gUnknown_02024E8C.paletteTag = spritePalette->tag;
@@ -1213,7 +1213,7 @@ void task00_8084310(u8 taskId)
}
if (!FieldEffectActiveListContains(FLDEFF_USE_FLY))
{
- flag_var_implications_of_teleport_();
+ Overworld_ResetStateAfterFly();
warp_in();
SetMainCallback2(CB2_LoadMap);
gFieldCallback = mapldr_08084390;
@@ -1223,7 +1223,7 @@ void task00_8084310(u8 taskId)
void mapldr_08084390(void)
{
- sub_8053E90();
+ Overworld_PlaySpecialMapMusic();
pal_fill_black();
CreateTask(c3_080843F8, 0);
gMapObjects[gPlayerAvatar.mapObjectId].mapobj_bit_13 = 1;
@@ -1264,7 +1264,7 @@ extern void CameraObjectReset1(void);
void sub_8086748(void)
{
- sub_8053E90();
+ Overworld_PlaySpecialMapMusic();
pal_fill_for_map_transition();
ScriptContext2_Enable();
FreezeMapObjects();
@@ -1533,7 +1533,7 @@ void sub_8086C40(void)
void sub_8086C94(void)
{
- sub_8053E90();
+ Overworld_PlaySpecialMapMusic();
pal_fill_for_map_transition();
ScriptContext2_Enable();
CreateTask(sub_8086CBC, 0);
@@ -1894,11 +1894,10 @@ bool8 sub_80873F4(struct Task *task, struct MapObject *mapObject, struct Sprite
}
void sub_8087470(u8);
-extern u8 sub_80608A4(u8);
void mapldr_080851BC(void)
{
- sub_8053E90();
+ Overworld_PlaySpecialMapMusic();
pal_fill_for_map_transition();
ScriptContext2_Enable();
gFieldCallback = NULL;
@@ -2135,7 +2134,7 @@ void sub_8087A74(u8);
void mapldr_080859D4(void)
{
- sub_8053E90();
+ Overworld_PlaySpecialMapMusic();
pal_fill_for_map_transition();
ScriptContext2_Enable();
FreezeMapObjects();
@@ -2267,7 +2266,7 @@ void sub_8087D78(struct Task *task)
{
if (!gPaletteFade.active && sub_8054034() == TRUE)
{
- sub_8053570();
+ Overworld_SetWarpDestToLastHealLoc();
warp_in();
SetMainCallback2(CB2_LoadMap);
gFieldCallback = mapldr_08085D88;
@@ -2279,7 +2278,7 @@ void sub_8087E1C(u8);
void mapldr_08085D88(void)
{
- sub_8053E90();
+ Overworld_PlaySpecialMapMusic();
pal_fill_for_map_transition();
ScriptContext2_Enable();
FreezeMapObjects();
@@ -2880,7 +2879,7 @@ u8 FldEff_UseSurf(void)
u8 taskId;
taskId = CreateTask(sub_8088954, 0xff);
gTasks[taskId].data[15] = gFieldEffectArguments[0];
- sav1_reset_battle_music_maybe();
+ Overworld_ClearSavedMusic();
Overworld_ChangeMusicTo(0x016d);
return FALSE;
}
diff --git a/src/field/field_effect_helpers.c b/src/field/field_effect_helpers.c
new file mode 100644
index 000000000..2ad8bdce3
--- /dev/null
+++ b/src/field/field_effect_helpers.c
@@ -0,0 +1,1632 @@
+#include "global.h"
+#include "sprite.h"
+#include "fieldmap.h"
+#include "metatile_behavior.h"
+#include "songs.h"
+#include "sound.h"
+#include "field_map_obj.h"
+#include "field_camera.h"
+#include "field_map_obj_helpers.h"
+#include "field_weather.h"
+#include "field_effect.h"
+#include "field_ground_effect.h"
+#include "field_effect_helpers.h"
+
+static void sub_81269E0(struct Sprite *);
+static void npc_pal_op(struct MapObject *mapObject, struct Sprite *sprite);
+static void npc_pal_op_A(struct MapObject *, u8);
+static void npc_pal_op_B(struct MapObject *, u8);
+static void sub_81275A0(struct Sprite *);
+static void sub_81275C4(struct Sprite *);
+static void sub_8127DA0(struct Sprite *);
+static void sub_8127DD0(struct Sprite *);
+static void sub_8127E30(struct Sprite *);
+static void sub_812882C(struct Sprite *, u8, u8);
+static void sub_81278D8(struct Sprite *);
+static void sub_8127FD4(struct MapObject *, struct Sprite *);
+static void sub_812800C(struct MapObject *, struct Sprite *);
+static void sub_81280A0(struct MapObject *, struct Sprite *, struct Sprite *);
+static void sub_8128174(struct Sprite *);
+static u32 ShowDisguiseFieldEffect(u8, u8, u8);
+
+const u8 UnusedEggString_8401E28[] = _("タマゴ");
+
+const u16 gUnknown_08401E2C[] = {
+ 0x0c,
+ 0x1c,
+ 0x2c
+};
+
+const u8 gUnknown_08401E32[] = {
+ 0,
+ 1,
+ 2,
+ 3
+};
+
+const u16 gUnknown_08401E36[] = {
+ 4,
+ 4,
+ 4,
+ 16
+};
+
+void (*const gUnknown_08401E40[])(struct Sprite *) = {
+ sub_81275A0,
+ sub_81275C4
+};
+
+void (*const gUnknown_08401E48[])(struct Sprite *) = {
+ sub_8127DA0,
+ sub_8127DD0,
+ sub_8127E30
+};
+
+const u8 gUnknown_08401E54[] = {
+ 0,
+ 0,
+ 1,
+ 2,
+ 3
+};
+
+const u16 gUnknown_08401E5A[] = {
+ 3,
+ 7
+};
+
+void SetUpReflection(struct MapObject *mapObject, struct Sprite *sprite, bool8 flag)
+{
+ struct Sprite *newSprite;
+
+ newSprite = &gSprites[obj_unfreeze(sprite, sprite->pos1.x, sprite->pos1.y, 0x98)];
+ newSprite->callback = sub_81269E0;
+ newSprite->oam.priority = 3;
+ newSprite->oam.paletteNum = gUnknown_0830FD14[newSprite->oam.paletteNum];
+ newSprite->usingSheet = TRUE;
+ newSprite->anims = gDummySpriteAnimTable;
+ StartSpriteAnim(newSprite, 0);
+ newSprite->affineAnims = gDummySpriteAffineAnimTable;
+ newSprite->affineAnimBeginning = TRUE;
+ newSprite->subspriteMode = 0;
+ newSprite->data0 = sprite->data0;
+ newSprite->data1 = mapObject->localId;
+ newSprite->data7 = flag;
+ npc_pal_op(mapObject, newSprite);
+ if (!flag)
+ {
+ newSprite->oam.affineMode = 1;
+ }
+}
+
+static s16 sub_81268D0(struct MapObject *mapObject)
+{
+ return GetFieldObjectGraphicsInfo(mapObject->graphicsId)->height - 2;
+}
+
+static void npc_pal_op(struct MapObject *mapObject, struct Sprite *sprite)
+{
+ u8 whichElement;
+ u16 unk_8041e2c[ARRAY_COUNT(gUnknown_08401E2C)];
+
+ memcpy(unk_8041e2c, gUnknown_08401E2C, sizeof gUnknown_08401E2C);
+ sprite->data2 = 0;
+ if (!GetFieldObjectGraphicsInfo(mapObject->graphicsId)->disableReflectionPaletteLoad && ((whichElement = sub_8057450(mapObject->mapobj_unk_1F)) || (whichElement = sub_8057450(mapObject->mapobj_unk_1E))))
+ {
+ sprite->data2 = unk_8041e2c[whichElement - 1];
+ npc_pal_op_A(mapObject, sprite->oam.paletteNum);
+ }
+ else
+ {
+ npc_pal_op_B(mapObject, sprite->oam.paletteNum);
+ }
+}
+
+static void npc_pal_op_B(struct MapObject *mapObject, u8 paletteNum)
+{
+ const struct MapObjectGraphicsInfo *graphicsInfo;
+
+ graphicsInfo = GetFieldObjectGraphicsInfo(mapObject->graphicsId);
+ if (graphicsInfo->paletteTag2 != 0x11ff)
+ {
+ if (graphicsInfo->paletteSlot == 0)
+ {
+ npc_load_two_palettes__no_record(graphicsInfo->paletteTag1, paletteNum);
+ }
+ else if (graphicsInfo->paletteSlot == 10)
+ {
+ npc_load_two_palettes__and_record(graphicsInfo->paletteTag1, paletteNum);
+ }
+ else
+ {
+ pal_patch_for_npc(npc_paltag_by_palslot(paletteNum), paletteNum);
+ }
+ sub_807D78C(paletteNum);
+ }
+}
+
+static void npc_pal_op_A(struct MapObject *mapObject, u8 paletteNum)
+{
+ const struct MapObjectGraphicsInfo *graphicsInfo;
+
+ graphicsInfo = GetFieldObjectGraphicsInfo(mapObject->graphicsId);
+ if (graphicsInfo->paletteTag2 != 0x11ff)
+ {
+ pal_patch_for_npc(graphicsInfo->paletteTag2, paletteNum);
+ sub_807D78C(paletteNum);
+ }
+}
+
+static void sub_81269E0(struct Sprite *sprite)
+{
+ struct MapObject *mapObject;
+ struct Sprite *oldSprite;
+
+ mapObject = &gMapObjects[sprite->data0];
+ oldSprite = &gSprites[mapObject->spriteId];
+ if (!mapObject->active || !mapObject->mapobj_bit_17 || mapObject->localId != sprite->data1)
+ {
+ sprite->inUse = FALSE;
+ }
+ else
+ {
+ sprite->oam.paletteNum = gUnknown_0830FD14[oldSprite->oam.paletteNum];
+ sprite->oam.shape = oldSprite->oam.shape;
+ sprite->oam.size = oldSprite->oam.size;
+ sprite->oam.matrixNum = oldSprite->oam.matrixNum | 0x10;
+ sprite->oam.tileNum = oldSprite->oam.tileNum;
+ sprite->subspriteTables = oldSprite->subspriteTables;
+ sprite->subspriteTableNum = oldSprite->subspriteTableNum;
+ sprite->invisible = oldSprite->invisible;
+ sprite->pos1.x = oldSprite->pos1.x;
+ sprite->pos1.y = oldSprite->pos1.y + sub_81268D0(mapObject) + sprite->data2;
+ sprite->centerToCornerVecX = oldSprite->centerToCornerVecX;
+ sprite->centerToCornerVecY = oldSprite->centerToCornerVecY;
+ sprite->pos2.x = oldSprite->pos2.x;
+ sprite->pos2.y = -oldSprite->pos2.y;
+ sprite->coordOffsetEnabled = oldSprite->coordOffsetEnabled;
+ if (sprite->data7 == FALSE)
+ {
+ sprite->oam.matrixNum = 0;
+ if (oldSprite->oam.matrixNum & 0x8)
+ {
+ sprite->oam.matrixNum = 1;
+ }
+ }
+ }
+}
+
+u8 sub_8126B54(void)
+{
+ u8 spriteId;
+ struct Sprite *sprite;
+
+ spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[8] /*gFieldEffectSpriteTemplate_Arrow*/, 0, 0, 0x52);
+ if (spriteId != MAX_SPRITES)
+ {
+ sprite = &gSprites[spriteId];
+ sprite->oam.priority = 1;
+ sprite->coordOffsetEnabled = TRUE;
+ sprite->invisible = TRUE;
+ }
+ return spriteId;
+}
+
+void objid_set_invisible(u8 spriteId)
+{
+ gSprites[spriteId].invisible = TRUE;
+}
+
+void sub_8126BC4(u8 spriteId, u8 animNum, s16 x, s16 y)
+{
+ s16 x2;
+ s16 y2;
+ struct Sprite *sprite;
+
+ sprite = &gSprites[spriteId];
+ if (sprite->invisible || sprite->data0 != x || sprite->data1 != y)
+ {
+ sub_80603CC(x, y, &x2, &y2);
+ sprite = &gSprites[spriteId];
+ sprite->pos1.x = x2 + 8;
+ sprite->pos1.y = y2 + 8;
+ sprite->invisible = FALSE;
+ sprite->data0 = x;
+ sprite->data1 = y;
+ StartSpriteAnim(sprite, animNum - 1);
+ }
+}
+
+u32 FldEff_Shadow(void)
+{
+ u8 mapObjectId;
+ const struct MapObjectGraphicsInfo *graphicsInfo;
+ u8 spriteId;
+
+ mapObjectId = GetFieldObjectIdByLocalIdAndMap(gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2]);
+ graphicsInfo = GetFieldObjectGraphicsInfo(gMapObjects[mapObjectId].graphicsId);
+ spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[gUnknown_08401E32[graphicsInfo->shadowSize]], 0, 0, 0x94);
+ if (spriteId != MAX_SPRITES)
+ {
+ gSprites[spriteId].coordOffsetEnabled = TRUE;
+ gSprites[spriteId].data0 = gFieldEffectArguments[0];
+ gSprites[spriteId].data1 = gFieldEffectArguments[1];
+ gSprites[spriteId].data2 = gFieldEffectArguments[2];
+ gSprites[spriteId].data3 = (graphicsInfo->height >> 1) - gUnknown_08401E36[graphicsInfo->shadowSize];
+ }
+ return 0;
+}
+
+void oamc_shadow(struct Sprite *sprite)
+{
+ u8 mapObjectId;
+ struct MapObject *mapObject;
+ struct Sprite *linkedSprite;
+
+ if (TryGetFieldObjectIdByLocalIdAndMap(sprite->data0, sprite->data1, sprite->data2, &mapObjectId))
+ {
+ FieldEffectStop(sprite, FLDEFF_SHADOW);
+ }
+ else
+ {
+ mapObject = &gMapObjects[mapObjectId];
+ linkedSprite = &gSprites[mapObject->spriteId];
+ sprite->oam.priority = linkedSprite->oam.priority;
+ sprite->pos1.x = linkedSprite->pos1.x;
+ sprite->pos1.y = linkedSprite->pos1.y + sprite->data3;
+ if (!mapObject->active || !mapObject->mapobj_bit_22 || MetatileBehavior_IsPokeGrass(mapObject->mapobj_unk_1E) || MetatileBehavior_IsSurfableWaterOrUnderwater(mapObject->mapobj_unk_1E) || MetatileBehavior_IsSurfableWaterOrUnderwater(mapObject->mapobj_unk_1F) || MetatileBehavior_IsReflective(mapObject->mapobj_unk_1E) || MetatileBehavior_IsReflective(mapObject->mapobj_unk_1F))
+ {
+ FieldEffectStop(sprite, FLDEFF_SHADOW);
+ }
+ }
+}
+
+u32 FldEff_TallGrass(void)
+{
+ s16 x;
+ s16 y;
+ u8 spriteId;
+ struct Sprite *sprite;
+
+ x = gFieldEffectArguments[0];
+ y = gFieldEffectArguments[1];
+ sub_8060470(&x, &y, 8, 8);
+ spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[4], x, y, 0);
+ if (spriteId != MAX_SPRITES)
+ {
+ sprite = &gSprites[spriteId];
+ sprite->coordOffsetEnabled = TRUE;
+ sprite->oam.priority = gFieldEffectArguments[3];
+ sprite->data0 = gFieldEffectArguments[2];
+ sprite->data1 = gFieldEffectArguments[0];
+ sprite->data2 = gFieldEffectArguments[1];
+ sprite->data3 = gFieldEffectArguments[4];
+ sprite->data4 = gFieldEffectArguments[5];
+ sprite->data5 = gFieldEffectArguments[6];
+ if (gFieldEffectArguments[7])
+ {
+ SeekSpriteAnim(sprite, 4);
+ }
+ }
+ return 0;
+}
+
+void unc_grass_normal(struct Sprite *sprite)
+{
+ u8 mapNum;
+ u8 mapGroup;
+ u8 metatileBehavior;
+ u8 localId;
+ u8 mapObjectId;
+ struct MapObject *mapObject;
+
+ mapNum = sprite->data5 >> 8;
+ mapGroup = sprite->data5;
+ if (gCamera.field_0 && (gSaveBlock1.location.mapNum != mapNum || gSaveBlock1.location.mapGroup != mapGroup))
+ {
+ sprite->data1 -= gCamera.x;
+ sprite->data2 -= gCamera.y;
+ sprite->data5 = ((u8)gSaveBlock1.location.mapNum << 8) | (u8)gSaveBlock1.location.mapGroup;
+ }
+ localId = sprite->data3 >> 8;
+ mapNum = sprite->data3;
+ mapGroup = sprite->data4;
+ metatileBehavior = MapGridGetMetatileBehaviorAt(sprite->data1, sprite->data2);
+ if (TryGetFieldObjectIdByLocalIdAndMap(localId, mapNum, mapGroup, &mapObjectId) || !MetatileBehavior_IsTallGrass(metatileBehavior) || (sprite->data7 && sprite->animEnded))
+ {
+ FieldEffectStop(sprite, FLDEFF_TALL_GRASS);
+ }
+ else
+ {
+ mapObject = &gMapObjects[mapObjectId];
+ if ((mapObject->coords2.x != sprite->data1 || mapObject->coords2.y != sprite->data2) && (mapObject->coords3.x != sprite->data1 || mapObject->coords3.y != sprite->data2))
+ {
+ sprite->data7 = TRUE;
+ }
+ metatileBehavior = 0;
+ if (sprite->animCmdIndex == 0)
+ {
+ metatileBehavior = 4;
+ }
+ sub_806487C(sprite, 0);
+ sub_812882C(sprite, sprite->data0, metatileBehavior);
+ }
+}
+
+u32 FldEff_JumpTallGrass(void)
+{
+ u8 spriteId;
+ struct Sprite *sprite;
+
+ sub_8060470((s16 *)&gFieldEffectArguments[0], (s16 *)&gFieldEffectArguments[1], 8, 12);
+ spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[10], gFieldEffectArguments[0], gFieldEffectArguments[1], 0);
+ if (spriteId != MAX_SPRITES)
+ {
+ sprite = &gSprites[spriteId];
+ sprite->coordOffsetEnabled = TRUE;
+ sprite->oam.priority = gFieldEffectArguments[3];
+ sprite->data0 = gFieldEffectArguments[2];
+ sprite->data1 = 12;
+ }
+ return 0;
+}
+
+u8 sub_8126FF0(u8 localId, u8 mapNum, u8 mapGroup, s16 x, s16 y)
+{
+ struct Sprite *sprite;
+ u8 i;
+
+ for (i = 0; i < MAX_SPRITES; i ++)
+ {
+ if (gSprites[i].inUse)
+ {
+ sprite = &gSprites[i];
+ if (sprite->callback == unc_grass_normal && (x == sprite->data1 && y == sprite->data2) && (localId == (u8)(sprite->data3 >> 8) && mapNum == (sprite->data3 & 0xFF) && mapGroup == sprite->data4))
+ {
+ return i;
+ }
+ }
+ }
+ return MAX_SPRITES;
+}
+
+u32 FldEff_LongGrass(void)
+{
+ s16 x;
+ s16 y;
+ u8 spriteId;
+ struct Sprite *sprite;
+
+ x = gFieldEffectArguments[0];
+ y = gFieldEffectArguments[1];
+ sub_8060470(&x, &y, 8, 8);
+ spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[15], x, y, 0);
+ if (spriteId != MAX_SPRITES)
+ {
+ sprite = &gSprites[spriteId];
+ sprite->coordOffsetEnabled = TRUE;
+ sprite->oam.priority = ZCoordToPriority(gFieldEffectArguments[2]);
+ sprite->data0 = gFieldEffectArguments[2];
+ sprite->data1 = gFieldEffectArguments[0];
+ sprite->data2 = gFieldEffectArguments[1];
+ sprite->data3 = gFieldEffectArguments[4];
+ sprite->data4 = gFieldEffectArguments[5];
+ sprite->data5 = gFieldEffectArguments[6];
+ if (gFieldEffectArguments[7])
+ {
+ SeekSpriteAnim(sprite, 6);
+ }
+ }
+ return 0;
+}
+
+void unc_grass_tall(struct Sprite *sprite)
+{
+ u8 mapNum;
+ u8 mapGroup;
+ u8 metatileBehavior;
+ u8 localId;
+ u8 mapObjectId;
+ struct MapObject *mapObject;
+
+ mapNum = sprite->data5 >> 8;
+ mapGroup = sprite->data5;
+ if (gCamera.field_0 && (gSaveBlock1.location.mapNum != mapNum || gSaveBlock1.location.mapGroup != mapGroup))
+ {
+ sprite->data1 -= gCamera.x;
+ sprite->data2 -= gCamera.y;
+ sprite->data5 = ((u8)gSaveBlock1.location.mapNum << 8) | (u8)gSaveBlock1.location.mapGroup;
+ }
+ localId = sprite->data3 >> 8;
+ mapNum = sprite->data3;
+ mapGroup = sprite->data4;
+ metatileBehavior = MapGridGetMetatileBehaviorAt(sprite->data1, sprite->data2);
+ if (TryGetFieldObjectIdByLocalIdAndMap(localId, mapNum, mapGroup, &mapObjectId) || !MetatileBehavior_IsLongGrass(metatileBehavior) || (sprite->data7 && sprite->animEnded))
+ {
+ FieldEffectStop(sprite, FLDEFF_LONG_GRASS);
+ }
+ else
+ {
+ mapObject = &gMapObjects[mapObjectId];
+ if ((mapObject->coords2.x != sprite->data1 || mapObject->coords2.y != sprite->data2) && (mapObject->coords3.x != sprite->data1 || mapObject->coords3.y != sprite->data2))
+ {
+ sprite->data7 = TRUE;
+ }
+ sub_806487C(sprite, 0);
+ sub_812882C(sprite, sprite->data0, 0);
+ }
+}
+
+u32 FldEff_JumpLongGrass(void)
+{
+ u8 spriteId;
+ struct Sprite *sprite;
+
+ sub_8060470((s16 *)&gFieldEffectArguments[0], (s16 *)&gFieldEffectArguments[1], 8, 8);
+ spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[16], gFieldEffectArguments[0], gFieldEffectArguments[1], 0);
+ if (spriteId != MAX_SPRITES)
+ {
+ sprite = &gSprites[spriteId];
+ sprite->coordOffsetEnabled = TRUE;
+ sprite->oam.priority = gFieldEffectArguments[3];
+ sprite->data0 = gFieldEffectArguments[2];
+ sprite->data1 = 18;
+ }
+ return 0;
+}
+
+u32 FldEff_ShortGrass(void)
+{
+ u8 mapObjectId;
+ struct MapObject *mapObject;
+ u8 spriteId;
+ struct Sprite *sprite;
+
+ mapObjectId = GetFieldObjectIdByLocalIdAndMap(gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2]);
+ mapObject = &gMapObjects[mapObjectId];
+ spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[30], 0, 0, 0);
+ if (spriteId != MAX_SPRITES)
+ {
+ sprite = &(gSprites[spriteId]);
+ sprite->coordOffsetEnabled = TRUE;
+ sprite->oam.priority = gSprites[mapObject->spriteId].oam.priority;
+ sprite->data0 = gFieldEffectArguments[0];
+ sprite->data1 = gFieldEffectArguments[1];
+ sprite->data2 = gFieldEffectArguments[2];
+ sprite->data3 = gSprites[mapObject->spriteId].pos1.x;
+ sprite->data4 = gSprites[mapObject->spriteId].pos1.y;
+ }
+ return 0;
+}
+
+void sub_8127334(struct Sprite *sprite)
+{
+ u8 mapObjectId;
+ s16 x;
+ s16 y;
+ const struct MapObjectGraphicsInfo *graphicsInfo;
+ struct Sprite *linkedSprite;
+
+ if (TryGetFieldObjectIdByLocalIdAndMap(sprite->data0, sprite->data1, sprite->data2, &mapObjectId) || !gMapObjects[mapObjectId].mapobj_bit_18)
+ {
+ FieldEffectStop(sprite, FLDEFF_SHORT_GRASS);
+ }
+ else
+ {
+ graphicsInfo = GetFieldObjectGraphicsInfo(gMapObjects[mapObjectId].graphicsId);
+ linkedSprite = &gSprites[gMapObjects[mapObjectId].spriteId];
+ y = linkedSprite->pos1.y;
+ x = linkedSprite->pos1.x;
+ if (x != sprite->data3 || y != sprite->data4)
+ {
+ sprite->data3 = x;
+ sprite->data4 = y;
+ if (sprite->animEnded)
+ {
+ StartSpriteAnim(sprite, 0);
+ }
+ }
+ sprite->pos1.x = x;
+ sprite->pos1.y = y;
+ sprite->pos2.y = (graphicsInfo->height >> 1) - 8;
+ sprite->subpriority = linkedSprite->subpriority - 1;
+ sprite->oam.priority = linkedSprite->oam.priority;
+ sub_806487C(sprite, linkedSprite->invisible);
+ }
+}
+
+u32 FldEff_SandFootprints(void)
+{
+ u8 spriteId;
+ struct Sprite *sprite;
+
+ sub_8060470((s16 *)&gFieldEffectArguments[0], (s16 *)&gFieldEffectArguments[1], 8, 8);
+ spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[11], gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2]);
+ if (spriteId != MAX_SPRITES)
+ {
+ sprite = &gSprites[spriteId];
+ sprite->coordOffsetEnabled = TRUE;
+ sprite->oam.priority = gFieldEffectArguments[3];
+ sprite->data7 = FLDEFF_SAND_FOOTPRINTS;
+ StartSpriteAnim(sprite, gFieldEffectArguments[4]);
+ }
+ return 0;
+}
+
+u32 FldEff_DeepSandFootprints(void)
+{
+ u8 spriteId;
+ struct Sprite *sprite;
+
+ sub_8060470((s16 *)&gFieldEffectArguments[0], (s16 *)&gFieldEffectArguments[1], 8, 8);
+ spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[23], gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2]);
+ if (spriteId != MAX_SPRITES)
+ {
+ sprite = &gSprites[spriteId];
+ sprite->coordOffsetEnabled = TRUE;
+ sprite->oam.priority = gFieldEffectArguments[3];
+ sprite->data7 = FLDEFF_DEEP_SAND_FOOTPRINTS;
+ StartSpriteAnim(sprite, gFieldEffectArguments[4]);
+ }
+ return spriteId;
+}
+
+u32 FldEff_BikeTireTracks(void)
+{
+ u8 spriteId;
+ struct Sprite *sprite;
+
+ sub_8060470((s16 *)&gFieldEffectArguments[0], (s16 *)&gFieldEffectArguments[1], 8, 8);
+ spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[27], gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2]);
+ if (spriteId != MAX_SPRITES)
+ {
+ sprite = &gSprites[spriteId];
+ sprite->coordOffsetEnabled = TRUE;
+ sprite->oam.priority = gFieldEffectArguments[3];
+ sprite->data7 = FLDEFF_BIKE_TIRE_TRACKS;
+ StartSpriteAnim(sprite, gFieldEffectArguments[4]);
+ }
+ return spriteId;
+}
+
+void sub_8127584(struct Sprite *sprite)
+{
+ gUnknown_08401E40[sprite->data0](sprite);
+}
+
+static void sub_81275A0(struct Sprite *sprite)
+{
+ if (++sprite->data1 > 40)
+ {
+ sprite->data0 = 1;
+ }
+ sub_806487C(sprite, FALSE);
+}
+
+static void sub_81275C4(struct Sprite *sprite)
+{
+ sprite->invisible ^= 1;
+ sprite->data1 ++;
+ sub_806487C(sprite, sprite->invisible);
+ if (sprite->data1 > 56)
+ {
+ FieldEffectStop(sprite, sprite->data7);
+ }
+}
+
+u32 FldEff_Splash(void)
+{
+ u8 mapObjectId;
+ struct MapObject *mapObject;
+ u8 spriteId;
+ struct Sprite *sprite;
+ const struct MapObjectGraphicsInfo *graphicsInfo;
+ struct Sprite *linkedSprite;
+
+ mapObjectId = GetFieldObjectIdByLocalIdAndMap(gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2]);
+ mapObject = &gMapObjects[mapObjectId];
+ spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[13], 0, 0, 0);
+ if (spriteId != MAX_SPRITES)
+ {
+ graphicsInfo = GetFieldObjectGraphicsInfo(mapObject->graphicsId);
+ sprite = &gSprites[spriteId];
+ sprite->coordOffsetEnabled = TRUE;
+ linkedSprite = &gSprites[mapObject->spriteId];
+ sprite->oam.priority = linkedSprite->oam.priority;
+ sprite->data0 = gFieldEffectArguments[0];
+ sprite->data1 = gFieldEffectArguments[1];
+ sprite->data2 = gFieldEffectArguments[2];
+ sprite->pos2.y = (graphicsInfo->height >> 1) - 4;
+ PlaySE(SE_MIZU);
+ }
+ return 0;
+}
+
+void sub_81276B4(struct Sprite *sprite)
+{
+ u8 mapObjectId;
+
+ if (sprite->animEnded || TryGetFieldObjectIdByLocalIdAndMap(sprite->data0, sprite->data1, sprite->data2, &mapObjectId))
+ {
+ FieldEffectStop(sprite, FLDEFF_SPLASH);
+ }
+ else
+ {
+ sprite->pos1.x = gSprites[gMapObjects[mapObjectId].spriteId].pos1.x;
+ sprite->pos1.y = gSprites[gMapObjects[mapObjectId].spriteId].pos1.y;
+ sub_806487C(sprite, FALSE);
+ }
+}
+
+u32 FldEff_JumpSmallSplash(void)
+{
+ u8 spriteId;
+ struct Sprite *sprite;
+
+ sub_8060470((s16 *)&gFieldEffectArguments[0], (s16 *)&gFieldEffectArguments[1], 8, 12);
+ spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[14], gFieldEffectArguments[0], gFieldEffectArguments[1], 0);
+ if (spriteId != MAX_SPRITES)
+ {
+ sprite = &gSprites[spriteId];
+ sprite->coordOffsetEnabled = TRUE;
+ sprite->oam.priority = gFieldEffectArguments[3];
+ sprite->data0 = gFieldEffectArguments[2];
+ sprite->data1 = FLDEFF_JUMP_SMALL_SPLASH;
+ }
+ return 0;
+}
+
+u32 FldEff_JumpBigSplash(void)
+{
+ u8 spriteId;
+ struct Sprite *sprite;
+
+ sub_8060470((s16 *)&gFieldEffectArguments[0], (s16 *)&gFieldEffectArguments[1], 8, 8);
+ spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[12], gFieldEffectArguments[0], gFieldEffectArguments[1], 0);
+ if (spriteId != MAX_SPRITES)
+ {
+ sprite = &gSprites[spriteId];
+ sprite->coordOffsetEnabled = TRUE;
+ sprite->oam.priority = gFieldEffectArguments[3];
+ sprite->data0 = gFieldEffectArguments[2];
+ sprite->data1 = FLDEFF_JUMP_BIG_SPLASH;
+ }
+ return 0;
+}
+
+u32 FldEff_FeetInFlowingWater(void)
+{
+ u8 mapObjectId;
+ struct MapObject *mapObject;
+ u8 spriteId;
+ struct Sprite *sprite;
+ const struct MapObjectGraphicsInfo *graphicsInfo;
+
+ mapObjectId = GetFieldObjectIdByLocalIdAndMap(gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2]);
+ mapObject = &gMapObjects[mapObjectId];
+ spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[13], 0, 0, 0);
+ if (spriteId != MAX_SPRITES)
+ {
+ graphicsInfo = GetFieldObjectGraphicsInfo(mapObject->graphicsId);
+ sprite = &gSprites[spriteId];
+ sprite->callback = sub_81278D8;
+ sprite->coordOffsetEnabled = TRUE;
+ sprite->oam.priority = gSprites[mapObject->spriteId].oam.priority;
+ sprite->data0 = gFieldEffectArguments[0];
+ sprite->data1 = gFieldEffectArguments[1];
+ sprite->data2 = gFieldEffectArguments[2];
+ sprite->data3 = -1;
+ sprite->data4 = -1;
+ sprite->pos2.y = (graphicsInfo->height >> 1) - 4;
+ StartSpriteAnim(sprite, 1);
+ }
+ return 0;
+}
+
+static void sub_81278D8(struct Sprite *sprite)
+{
+ u8 mapObjectId;
+ struct Sprite *linkedSprite;
+ struct MapObject *mapObject;
+
+ if (TryGetFieldObjectIdByLocalIdAndMap(sprite->data0, sprite->data1, sprite->data2, &mapObjectId) || !gMapObjects[mapObjectId].mapobj_bit_19)
+ {
+ FieldEffectStop(sprite, FLDEFF_FEET_IN_FLOWING_WATER);
+ }
+ else
+ {
+ mapObject = &gMapObjects[mapObjectId];
+ linkedSprite = &gSprites[mapObject->spriteId];
+ sprite->pos1.x = linkedSprite->pos1.x;
+ sprite->pos1.y = linkedSprite->pos1.y;
+ sprite->subpriority = linkedSprite->subpriority;
+ sub_806487C(sprite, FALSE);
+ if (mapObject->coords2.x != sprite->data3 || mapObject->coords2.y != sprite->data4)
+ {
+ sprite->data3 = mapObject->coords2.x;
+ sprite->data4 = mapObject->coords2.y;
+ if (!sprite->invisible)
+ {
+ PlaySE(SE_MIZU);
+ }
+ }
+ }
+}
+
+u32 FldEff_Ripple(void)
+{
+ u8 spriteId;
+ struct Sprite *sprite;
+
+ spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[5], gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2]);
+ if (spriteId != MAX_SPRITES)
+ {
+ sprite = &gSprites[spriteId];
+ sprite->coordOffsetEnabled = TRUE;
+ sprite->oam.priority = gFieldEffectArguments[3];
+ sprite->data0 = FLDEFF_RIPPLE;
+ }
+ return 0;
+}
+
+u32 FldEff_HotSpringsWater(void)
+{
+ u8 mapObjectId;
+ struct MapObject *mapObject;
+ u8 spriteId;
+ struct Sprite *sprite;
+
+ mapObjectId = GetFieldObjectIdByLocalIdAndMap(gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2]);
+ mapObject = &gMapObjects[mapObjectId];
+ spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[31], 0, 0, 0);
+ if (spriteId != MAX_SPRITES)
+ {
+ sprite = &gSprites[spriteId];
+ sprite->coordOffsetEnabled = TRUE;
+ sprite->oam.priority = gSprites[mapObject->spriteId].oam.priority;
+ sprite->data0 = gFieldEffectArguments[0];
+ sprite->data1 = gFieldEffectArguments[1];
+ sprite->data2 = gFieldEffectArguments[2];
+ sprite->data3 = gSprites[mapObject->spriteId].pos1.x;
+ sprite->data4 = gSprites[mapObject->spriteId].pos1.y;
+ }
+ return 0;
+}
+
+void sub_8127A7C(struct Sprite *sprite)
+{
+ u8 mapObjectId;
+ const struct MapObjectGraphicsInfo *graphicsInfo;
+ struct Sprite *linkedSprite;
+
+ if (TryGetFieldObjectIdByLocalIdAndMap(sprite->data0, sprite->data1, sprite->data2, &mapObjectId) || !gMapObjects[mapObjectId].mapobj_bit_21)
+ {
+ FieldEffectStop(sprite, FLDEFF_HOT_SPRINGS_WATER);
+ }
+ else
+ {
+ graphicsInfo = GetFieldObjectGraphicsInfo(gMapObjects[mapObjectId].graphicsId);
+ linkedSprite = &gSprites[gMapObjects[mapObjectId].spriteId];
+ sprite->pos1.x = linkedSprite->pos1.x;
+ sprite->pos1.y = (graphicsInfo->height >> 1) + linkedSprite->pos1.y - 8;
+ sprite->subpriority = linkedSprite->subpriority - 1;
+ sub_806487C(sprite, FALSE);
+ }
+}
+
+u32 FldEff_Unknown19(void)
+{
+ u8 spriteId;
+ struct Sprite *sprite;
+
+ sub_8060470((s16 *)&gFieldEffectArguments[0], (s16 *)&gFieldEffectArguments[1], 8, 8);
+ spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[17], gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2]);
+ if (spriteId != MAX_SPRITES)
+ {
+ sprite = &gSprites[spriteId];
+ sprite->coordOffsetEnabled = TRUE;
+ sprite->oam.priority = gFieldEffectArguments[3];
+ sprite->data0 = FLDEFF_UNKNOWN_19;
+ }
+ return 0;
+}
+
+u32 FldEff_Unknown20(void)
+{
+ u8 spriteId;
+ struct Sprite *sprite;
+
+ sub_8060470((s16 *)&gFieldEffectArguments[0], (s16 *)&gFieldEffectArguments[1], 8, 8);
+ spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[18], gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2]);
+ if (spriteId != MAX_SPRITES)
+ {
+ sprite = &gSprites[spriteId];
+ sprite->coordOffsetEnabled = TRUE;
+ sprite->oam.priority = gFieldEffectArguments[3];
+ sprite->data0 = FLDEFF_UNKNOWN_20;
+ }
+ return 0;
+}
+
+u32 FldEff_Unknown21(void)
+{
+ u8 spriteId;
+ struct Sprite *sprite;
+
+ sub_8060470((s16 *)&gFieldEffectArguments[0], (s16 *)&gFieldEffectArguments[1], 8, 8);
+ spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[19], gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2]);
+ if (spriteId != MAX_SPRITES)
+ {
+ sprite = &gSprites[spriteId];
+ sprite->coordOffsetEnabled = TRUE;
+ sprite->oam.priority = gFieldEffectArguments[3];
+ sprite->data0 = FLDEFF_UNKNOWN_21;
+ }
+ return 0;
+}
+
+u32 FldEff_Unknown22(void)
+{
+ u8 spriteId;
+ struct Sprite *sprite;
+
+ sub_8060470((s16 *)&gFieldEffectArguments[0], (s16 *)&gFieldEffectArguments[1], 8, 8);
+ spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[20], gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2]);
+ if (spriteId != MAX_SPRITES)
+ {
+ sprite = &gSprites[spriteId];
+ sprite->coordOffsetEnabled = TRUE;
+ sprite->oam.priority = gFieldEffectArguments[3];
+ sprite->data0 = FLDEFF_UNKNOWN_22;
+ }
+ return 0;
+}
+
+void ash(s16 x, s16 y, u16 c, s16 d)
+{
+ gFieldEffectArguments[0] = x;
+ gFieldEffectArguments[1] = y;
+ gFieldEffectArguments[2] = 0x52;
+ gFieldEffectArguments[3] = 1;
+ gFieldEffectArguments[4] = c;
+ gFieldEffectArguments[5] = d;
+ FieldEffectStart(FLDEFF_ASH);
+}
+
+u32 FldEff_Ash(void)
+{
+ s16 x;
+ s16 y;
+ u8 spriteId;
+ struct Sprite *sprite;
+
+ x = gFieldEffectArguments[0];
+ y = gFieldEffectArguments[1];
+ sub_8060470(&x, &y, 8, 8);
+ spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[6], x, y, gFieldEffectArguments[2]);
+ if (spriteId != MAX_SPRITES)
+ {
+ sprite = &gSprites[spriteId];
+ sprite->coordOffsetEnabled = TRUE;
+ sprite->oam.priority = gFieldEffectArguments[3];
+ sprite->data1 = gFieldEffectArguments[0];
+ sprite->data2 = gFieldEffectArguments[1];
+ sprite->data3 = gFieldEffectArguments[4];
+ sprite->data4 = gFieldEffectArguments[5];
+ }
+ return 0;
+}
+
+void sub_8127D84(struct Sprite *sprite)
+{
+ gUnknown_08401E48[sprite->data0](sprite);
+}
+
+static void sub_8127DA0(struct Sprite *sprite)
+{
+ sprite->invisible = TRUE;
+ sprite->animPaused = TRUE;
+ if (--sprite->data4 == 0)
+ {
+ sprite->data0 = 1;
+ }
+}
+
+static void sub_8127DD0(struct Sprite *sprite)
+{
+ sprite->invisible = FALSE;
+ sprite->animPaused = FALSE;
+ MapGridSetMetatileIdAt(sprite->data1, sprite->data2, sprite->data3);
+ CurrentMapDrawMetatileAt(sprite->data1, sprite->data2);
+ gMapObjects[gPlayerAvatar.mapObjectId].mapobj_bit_2 = TRUE;
+ sprite->data0 = 2;
+}
+
+static void sub_8127E30(struct Sprite *sprite)
+{
+ sub_806487C(sprite, FALSE);
+ if (sprite->animEnded)
+ {
+ FieldEffectStop(sprite, FLDEFF_ASH);
+ }
+}
+
+u32 FldEff_SurfBlob(void)
+{
+ u8 spriteId;
+ struct Sprite *sprite;
+
+ sub_8060470((s16 *)&gFieldEffectArguments[0], (s16 *)&gFieldEffectArguments[1], 8, 8);
+ spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[7], gFieldEffectArguments[0], gFieldEffectArguments[1], 0x96);
+ if (spriteId !=MAX_SPRITES)
+ {
+ sprite = &gSprites[spriteId];
+ sprite->coordOffsetEnabled = TRUE;
+ sprite->oam.paletteNum = 0;
+ sprite->data2 = gFieldEffectArguments[2];
+ sprite->data3 = -1;
+ sprite->data6 = -1;
+ sprite->data7 = -1;
+ }
+ FieldEffectActiveListRemove(FLDEFF_SURF_BLOB);
+ return spriteId;
+}
+
+void sub_8127ED0(u8 spriteId, u8 value)
+{
+ gSprites[spriteId].data0 = (gSprites[spriteId].data0 & ~0xF) | (value & 0xF);
+}
+
+void sub_8127EFC(u8 spriteId, u8 value)
+{
+ gSprites[spriteId].data0 = (gSprites[spriteId].data0 & ~0xF0) | ((value & 0xF) << 4);
+}
+
+void sub_8127F28(u8 spriteId, u8 value, s16 data1)
+{
+ gSprites[spriteId].data0 = (gSprites[spriteId].data0 & ~0xF00) | ((value & 0xF) << 8);
+ gSprites[spriteId].data1 = data1;
+}
+
+static u8 sub_8127F5C(struct Sprite *sprite)
+{
+ return sprite->data0 & 0xF;
+}
+
+static u8 sub_8127F64(struct Sprite *sprite)
+{
+ return (sprite->data0 & 0xF0) >> 4;
+}
+
+static u8 sub_8127F70(struct Sprite *sprite)
+{
+ return (sprite->data0 & 0xF00) >> 8;
+}
+
+void sub_8127F7C(struct Sprite *sprite)
+{
+ struct MapObject *mapObject;
+ struct Sprite *linkedSprite;
+
+ mapObject = &gMapObjects[sprite->data2];
+ linkedSprite = &gSprites[mapObject->spriteId];
+ sub_8127FD4(mapObject, sprite);
+ sub_812800C(mapObject, sprite);
+ sub_81280A0(mapObject, linkedSprite, sprite);
+ sprite->oam.priority = linkedSprite->oam.priority;
+}
+
+static void sub_8127FD4(struct MapObject *mapObject, struct Sprite *sprite)
+{
+ u8 unk_8041E54[ARRAY_COUNT(gUnknown_08401E54)];
+
+ memcpy(unk_8041E54, gUnknown_08401E54, sizeof gUnknown_08401E54);
+ if (sub_8127F64(sprite) == 0)
+ {
+ StartSpriteAnimIfDifferent(sprite, unk_8041E54[mapObject->placeholder18]);
+ }
+}
+
+#ifdef NONMATCHING
+static void sub_812800C(struct MapObject *mapObject, struct Sprite *sprite)
+{
+ s16 x;
+ s16 y;
+ u8 i;
+
+ x = mapObject->coords2.x;
+ y = mapObject->coords2.y;
+ if (sprite->pos2.y == 0 && (x != sprite->data6 || y != sprite->data7))
+ {
+ sprite->data5 = sprite->pos2.y;
+ for (sprite->data6 = x, sprite->data7 = y, i = DIR_SOUTH; i <= DIR_EAST; i ++, x = sprite->data6, y = sprite->data7)
+ {
+ MoveCoords(i, &x, &y);
+ if (MapGridGetZCoordAt(x, y) == 3)
+ {
+ sprite->data5 ++;
+ break;
+ }
+ }
+ }
+}
+#else
+__attribute__((naked)) static void sub_812800C(struct MapObject *mapObject, struct Sprite *sprite)
+{
+ asm_unified("\tpush {r4-r7,lr}\n"
+ "\tmov r7, r8\n"
+ "\tpush {r7}\n"
+ "\tsub sp, 0x4\n"
+ "\tadds r4, r1, 0\n"
+ "\tldrh r2, [r0, 0x10]\n"
+ "\tmov r1, sp\n"
+ "\tstrh r2, [r1]\n"
+ "\tldrh r1, [r0, 0x12]\n"
+ "\tmov r0, sp\n"
+ "\tadds r0, 0x2\n"
+ "\tstrh r1, [r0]\n"
+ "\tmovs r2, 0x26\n"
+ "\tldrsh r3, [r4, r2]\n"
+ "\tmov r8, r0\n"
+ "\tcmp r3, 0\n"
+ "\tbne _08128094\n"
+ "\tmov r0, sp\n"
+ "\tmovs r5, 0\n"
+ "\tldrsh r2, [r0, r5]\n"
+ "\tmovs r5, 0x3A\n"
+ "\tldrsh r0, [r4, r5]\n"
+ "\tcmp r2, r0\n"
+ "\tbne _08128048\n"
+ "\tlsls r0, r1, 16\n"
+ "\tasrs r0, 16\n"
+ "\tmovs r5, 0x3C\n"
+ "\tldrsh r1, [r4, r5]\n"
+ "\tcmp r0, r1\n"
+ "\tbeq _08128094\n"
+ "_08128048:\n"
+ "\tstrh r3, [r4, 0x38]\n"
+ "\tstrh r2, [r4, 0x3A]\n"
+ "\tmov r1, r8\n"
+ "\tmovs r2, 0\n"
+ "\tldrsh r0, [r1, r2]\n"
+ "\tstrh r0, [r4, 0x3C]\n"
+ "\tmovs r5, 0x1\n"
+ "\tmov r7, r8\n"
+ "\tmov r6, sp\n"
+ "_0812805A:\n"
+ "\tadds r0, r5, 0\n"
+ "\tmov r1, sp\n"
+ "\tadds r2, r7, 0\n"
+ "\tbl MoveCoords\n"
+ "\tmovs r1, 0\n"
+ "\tldrsh r0, [r6, r1]\n"
+ "\tmovs r2, 0\n"
+ "\tldrsh r1, [r7, r2]\n"
+ "\tbl MapGridGetZCoordAt\n"
+ "\tlsls r0, 24\n"
+ "\tlsrs r0, 24\n"
+ "\tcmp r0, 0x3\n"
+ "\tbne _08128080\n"
+ "\tldrh r0, [r4, 0x38]\n"
+ "\tadds r0, 0x1\n"
+ "\tstrh r0, [r4, 0x38]\n"
+ "\tb _08128094\n"
+ "_08128080:\n"
+ "\tadds r0, r5, 0x1\n"
+ "\tlsls r0, 24\n"
+ "\tlsrs r5, r0, 24\n"
+ "\tldrh r0, [r4, 0x3A]\n"
+ "\tstrh r0, [r6]\n"
+ "\tldrh r0, [r4, 0x3C]\n"
+ "\tmov r1, r8\n"
+ "\tstrh r0, [r1]\n"
+ "\tcmp r5, 0x4\n"
+ "\tbls _0812805A\n"
+ "_08128094:\n"
+ "\tadd sp, 0x4\n"
+ "\tpop {r3}\n"
+ "\tmov r8, r3\n"
+ "\tpop {r4-r7}\n"
+ "\tpop {r0}\n"
+ "\tbx r0");
+}
+#endif
+
+static void sub_81280A0(struct MapObject *mapObject, struct Sprite *linkedSprite, struct Sprite *sprite)
+{
+ u16 unk_8401E5A[ARRAY_COUNT(gUnknown_08401E5A)];
+ u8 v0;
+
+ memcpy(unk_8401E5A, gUnknown_08401E5A, sizeof gUnknown_08401E5A);
+ v0 = sub_8127F5C(sprite);
+ if (v0 != 0)
+ {
+ if (((u16)(++ sprite->data4) & unk_8401E5A[sprite->data5]) == 0)
+ {
+ sprite->pos2.y += sprite->data3;
+ }
+ if ((sprite->data4 & 0x0F) == 0)
+ {
+ sprite->data3 = -sprite->data3;
+ }
+ if (v0 != 2)
+ {
+ if (sub_8127F70(sprite) == 0)
+ {
+ linkedSprite->pos2.y = sprite->pos2.y;
+ }
+ else
+ {
+ linkedSprite->pos2.y = sprite->data1 + sprite->pos2.y;
+ }
+ sprite->pos1.x = linkedSprite->pos1.x;
+ sprite->pos1.y = linkedSprite->pos1.y + 8;
+ }
+ }
+}
+
+u8 sub_8128124(u8 oldSpriteId)
+{
+ u8 spriteId;
+ struct Sprite *sprite;
+
+ spriteId = CreateSpriteAtEnd(&gDummySpriteTemplate, 0, 0, -1);
+ sprite = &gSprites[spriteId];
+ sprite->callback = sub_8128174;
+ sprite->invisible = TRUE;
+ sprite->data0 = oldSpriteId;
+ sprite->data1 = 1;
+ return spriteId;
+}
+
+static void sub_8128174(struct Sprite *sprite)
+{
+ struct Sprite *oldSprite;
+
+ oldSprite = &gSprites[sprite->data0];
+ if (((sprite->data2++) & 0x03) == 0)
+ {
+ oldSprite->pos2.y += sprite->data1;
+ }
+ if ((sprite->data2 & 0x0F) == 0)
+ {
+ sprite->data1 = -sprite->data1;
+ }
+}
+
+u32 FldEff_Dust(void)
+{
+ u8 spriteId;
+ struct Sprite *sprite;
+
+ sub_8060470((s16 *)&gFieldEffectArguments[0], (s16 *)&gFieldEffectArguments[1], 8, 12);
+ spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[9], gFieldEffectArguments[0], gFieldEffectArguments[1], 0);
+ if (spriteId != MAX_SPRITES)
+ {
+ sprite = &gSprites[spriteId];
+ sprite->coordOffsetEnabled = TRUE;
+ sprite->oam.priority = gFieldEffectArguments[3];
+ sprite->data0 = gFieldEffectArguments[2];
+ sprite->data1 = 10;
+ }
+ return 0;
+}
+
+u32 FldEff_SandPile(void)
+{
+ u8 mapObjectId;
+ struct MapObject *mapObject;
+ u8 spriteId;
+ struct Sprite *sprite;
+ const struct MapObjectGraphicsInfo *graphicsInfo;
+
+ mapObjectId = GetFieldObjectIdByLocalIdAndMap(gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2]);
+ mapObject = &gMapObjects[mapObjectId];
+ spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[29], 0, 0, 0);
+ if (spriteId != MAX_SPRITES)
+ {
+ graphicsInfo = GetFieldObjectGraphicsInfo(mapObject->graphicsId);
+ sprite = &gSprites[spriteId];
+ sprite->coordOffsetEnabled = TRUE;
+ sprite->oam.priority = gSprites[mapObject->spriteId].oam.priority;
+ sprite->data0 = gFieldEffectArguments[0];
+ sprite->data1 = gFieldEffectArguments[1];
+ sprite->data2 = gFieldEffectArguments[2];
+ sprite->data3 = gSprites[mapObject->spriteId].pos1.x;
+ sprite->data4 = gSprites[mapObject->spriteId].pos1.y;
+ sprite->pos2.y = (graphicsInfo->height >> 1) - 2;
+ SeekSpriteAnim(sprite, 2);
+ }
+ return 0;
+}
+
+void sub_81282E0(struct Sprite *sprite)
+{
+ u8 mapObjectId;
+ s16 x;
+ s16 y;
+
+ if (TryGetFieldObjectIdByLocalIdAndMap(sprite->data0, sprite->data1, sprite->data2, &mapObjectId) || !gMapObjects[mapObjectId].mapobj_bit_20)
+ {
+ FieldEffectStop(sprite, FLDEFF_SAND_PILE);
+ }
+ else
+ {
+ y = gSprites[gMapObjects[mapObjectId].spriteId].pos1.y;
+ x = gSprites[gMapObjects[mapObjectId].spriteId].pos1.x;
+ if (x != sprite->data3 || y != sprite->data4)
+ {
+ sprite->data3 = x;
+ sprite->data4 = y;
+ if (sprite->animEnded)
+ {
+ StartSpriteAnim(sprite, 0);
+ }
+ }
+ sprite->pos1.x = x;
+ sprite->pos1.y = y;
+ sprite->subpriority = gSprites[gMapObjects[mapObjectId].spriteId].subpriority;
+ sub_806487C(sprite, FALSE);
+ }
+}
+
+u32 FldEff_Bubbles(void)
+{
+ u8 spriteId;
+ struct Sprite *sprite;
+
+ sub_8060470((s16 *)&gFieldEffectArguments[0], (s16 *)&gFieldEffectArguments[1], 8, 0);
+ spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[34], gFieldEffectArguments[0], gFieldEffectArguments[1], 0x52);
+ if (spriteId != MAX_SPRITES)
+ {
+ sprite = &gSprites[spriteId];
+ sprite->coordOffsetEnabled = TRUE;
+ sprite->oam.priority = 1;
+ }
+ return 0;
+}
+
+void sub_8128410(struct Sprite *sprite)
+{
+ sprite->data0 += 0x80;
+ sprite->data0 &= 0x100;
+ sprite->pos1.y -= sprite->data0 >> 8;
+ sub_806487C(sprite, FALSE);
+ if (sprite->invisible || sprite->animEnded)
+ {
+ FieldEffectStop(sprite, FLDEFF_BUBBLES);
+ }
+}
+
+u32 FldEff_BerryTreeGrowthSparkle(void)
+{
+ u8 spriteId;
+ struct Sprite *sprite;
+
+ sub_8060470((s16 *)&gFieldEffectArguments[0], (s16 *)&gFieldEffectArguments[1], 8, 4);
+ spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[22], gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2]);
+ if (spriteId != MAX_SPRITES)
+ {
+ sprite = &gSprites[spriteId];
+ sprite->coordOffsetEnabled = TRUE;
+ sprite->oam.priority = gFieldEffectArguments[3];
+ sprite->oam.paletteNum = 5;
+ sprite->data0 = FLDEFF_BERRY_TREE_GROWTH_SPARKLE;
+ }
+ return 0;
+}
+
+u32 FldEff_TreeDisguise(void)
+{
+ return ShowDisguiseFieldEffect(FLDEFF_TREE_DISGUISE, 0x18, 0x04);
+}
+
+
+u32 FldEff_MountainDisguise(void)
+{
+ return ShowDisguiseFieldEffect(FLDEFF_MOUNTAIN_DISGUISE, 0x19, 0x03);
+}
+
+
+u32 FldEff_SandDisguise(void)
+{
+ return ShowDisguiseFieldEffect(FLDEFF_SAND_DISGUISE, 0x1C, 0x02);
+}
+
+static u32 ShowDisguiseFieldEffect(u8 fldEff, u8 templateIdx, u8 paletteNum)
+{
+ u8 spriteId;
+ struct Sprite *sprite;
+
+ if (TryGetFieldObjectIdByLocalIdAndMap(gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2], &spriteId))
+ {
+ FieldEffectActiveListRemove(fldEff);
+ return MAX_SPRITES;
+ }
+ spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[templateIdx], 0, 0, 0);
+ if (spriteId != MAX_SPRITES)
+ {
+ sprite = &gSprites[spriteId];
+ sprite->coordOffsetEnabled ++;
+ sprite->oam.paletteNum = paletteNum;
+ sprite->data1 = fldEff;
+ sprite->data2 = gFieldEffectArguments[0];
+ sprite->data3 = gFieldEffectArguments[1];
+ sprite->data4 = gFieldEffectArguments[2];
+ }
+ return spriteId;
+}
+
+void sub_81285AC(struct Sprite *sprite)
+{
+ u8 mapObjectId;
+ const struct MapObjectGraphicsInfo *graphicsInfo;
+ struct Sprite *linkedSprite;
+
+ if (TryGetFieldObjectIdByLocalIdAndMap(sprite->data2, sprite->data3, sprite->data4, &mapObjectId))
+ {
+ FieldEffectStop(sprite, sprite->data1);
+ }
+ // else {
+ graphicsInfo = GetFieldObjectGraphicsInfo(gMapObjects[mapObjectId].graphicsId);
+ linkedSprite = &gSprites[gMapObjects[mapObjectId].spriteId];
+ sprite->invisible = linkedSprite->invisible;
+ sprite->pos1.x = linkedSprite->pos1.x;
+ sprite->pos1.y = (graphicsInfo->height >> 1) + linkedSprite->pos1.y - 16;
+ sprite->subpriority = linkedSprite->subpriority - 1;
+ if (sprite->data0 == 1)
+ {
+ sprite->data0 ++;
+ StartSpriteAnim(sprite, 1);
+ }
+ if (sprite->data0 == 2 && sprite->animEnded)
+ {
+ sprite->data7 = 1;
+ }
+ if (sprite->data0 == 3)
+ {
+ FieldEffectStop(sprite, sprite->data1);
+ }
+ // }
+}
+
+void sub_812869C(struct MapObject *mapObject)
+{
+ if (mapObject->mapobj_unk_21 == 1)
+ {
+ gSprites[mapObject->mapobj_unk_1A].data0 ++;
+ }
+}
+
+bool8 sub_81286C4(struct MapObject *mapObject)
+{
+ struct Sprite *sprite;
+
+ if (mapObject->mapobj_unk_21 == 2)
+ {
+ return TRUE;
+ }
+ if (mapObject->mapobj_unk_21 == 0)
+ {
+ return TRUE;
+ }
+ sprite = &gSprites[mapObject->mapobj_unk_1A];
+ if (sprite->data7)
+ {
+ mapObject->mapobj_unk_21 = 2;
+ sprite->data0 ++;
+ return TRUE;
+ }
+ return FALSE;
+}
+
+u32 FldEff_Sparkle(void)
+{
+ u8 spriteId;
+
+ gFieldEffectArguments[0] += 7;
+ gFieldEffectArguments[1] += 7;
+ sub_8060470((s16 *)&gFieldEffectArguments[0], (s16 *)&gFieldEffectArguments[1], 8, 8);
+ spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[35], gFieldEffectArguments[0], gFieldEffectArguments[1], 0x52);
+ if (spriteId != MAX_SPRITES)
+ {
+ gSprites[spriteId].oam.priority = gFieldEffectArguments[2];
+ gSprites[spriteId].coordOffsetEnabled = TRUE;
+ }
+ return 0;
+}
+
+void sub_8128774(struct Sprite *sprite)
+{
+ if (sprite->data0 == 0)
+ {
+ if (sprite->animEnded)
+ {
+ sprite->invisible = TRUE;
+ sprite->data0 ++;
+ }
+ if (sprite->data0 == 0)
+ {
+ return;
+ }
+ }
+ if (++ sprite->data1 >= 35)
+ {
+ FieldEffectStop(sprite, FLDEFF_SPARKLE);
+ }
+}
+
+void sub_81287C4(struct Sprite *sprite)
+{
+ if (sprite->animEnded)
+ {
+ FieldEffectStop(sprite, sprite->data1);
+ }
+ else
+ {
+ sub_806487C(sprite, FALSE);
+ SetObjectSubpriorityByZCoord(sprite->data0, sprite, 0);
+ }
+}
+
+void sub_8128800(struct Sprite *sprite)
+{
+ if (sprite->animEnded)
+ {
+ FieldEffectStop(sprite, sprite->data0);
+ }
+ else
+ {
+ sub_806487C(sprite, FALSE);
+ }
+}
+
+#ifdef NONMATCHING
+static void sub_812882C(struct Sprite *sprite /*r6*/, u8 z, u8 offset)
+{
+ u8 i;
+ s16 xlo;
+ s16 xhi;
+ s16 lx;
+ s16 lyhi;
+ s16 ly;
+ s16 ylo;
+ s16 yhi;
+ struct MapObject *mapObject; // r4
+ const struct MapObjectGraphicsInfo *graphicsInfo; // destroyed
+ struct Sprite *linkedSprite; // r5
+
+ SetObjectSubpriorityByZCoord(z, sprite, offset);
+ for (i = 0; i < 16; i ++)
+ {
+ mapObject = &gMapObjects[i];
+ if (mapObject->active)
+ {
+ graphicsInfo = GetFieldObjectGraphicsInfo(mapObject->graphicsId);
+ linkedSprite = &gSprites[mapObject->spriteId];
+ xhi = sprite->pos1.x + sprite->centerToCornerVecX;
+ xlo = sprite->pos1.x - sprite->centerToCornerVecX;
+ lx = linkedSprite->pos1.x;
+ if (xhi < lx && xlo > lx)
+ {
+ lyhi = linkedSprite->pos1.y + linkedSprite->centerToCornerVecY;
+ ly = linkedSprite->pos1.y;
+ ylo = sprite->pos1.y - sprite->centerToCornerVecY;
+ yhi = ylo + linkedSprite->centerToCornerVecY;
+ if ((lyhi < yhi || lyhi < ylo) && ly > yhi)
+ {
+ if (sprite->subpriority <= linkedSprite->subpriority)
+ {
+ sprite->subpriority = linkedSprite->subpriority + 2;
+ break;
+ }
+ }
+ }
+ }
+ }
+}
+#else
+__attribute__((naked)) static void sub_812882C(struct Sprite *sprite /*r6*/, u8 z, u8 offset)
+{
+ asm_unified("\tpush {r4-r7,lr}\n"
+ "\tadds r6, r0, 0\n"
+ "\tadds r0, r1, 0\n"
+ "\tlsls r0, 24\n"
+ "\tlsrs r0, 24\n"
+ "\tlsls r2, 24\n"
+ "\tlsrs r2, 24\n"
+ "\tadds r1, r6, 0\n"
+ "\tbl SetObjectSubpriorityByZCoord\n"
+ "\tmovs r7, 0\n"
+ "_08128842:\n"
+ "\tlsls r0, r7, 3\n"
+ "\tadds r0, r7\n"
+ "\tlsls r0, 2\n"
+ "\tldr r1, _081288DC @ =gMapObjects\n"
+ "\tadds r4, r0, r1\n"
+ "\tldrb r0, [r4]\n"
+ "\tlsls r0, 31\n"
+ "\tcmp r0, 0\n"
+ "\tbeq _081288E4\n"
+ "\tldrb r0, [r4, 0x5]\n"
+ "\tbl GetFieldObjectGraphicsInfo\n"
+ "\tldrb r1, [r4, 0x4]\n"
+ "\tlsls r0, r1, 4\n"
+ "\tadds r0, r1\n"
+ "\tlsls r0, 2\n"
+ "\tldr r1, _081288E0 @ =gSprites\n"
+ "\tadds r5, r0, r1\n"
+ "\tadds r0, r6, 0\n"
+ "\tadds r0, 0x28\n"
+ "\tmovs r2, 0\n"
+ "\tldrsb r2, [r0, r2]\n"
+ "\tldrh r0, [r6, 0x20]\n"
+ "\tadds r1, r0, r2\n"
+ "\tsubs r0, r2\n"
+ "\tlsls r0, 16\n"
+ "\tlsrs r4, r0, 16\n"
+ "\tlsls r1, 16\n"
+ "\tasrs r1, 16\n"
+ "\tmovs r0, 0x20\n"
+ "\tldrsh r2, [r5, r0]\n"
+ "\tcmp r1, r2\n"
+ "\tbge _081288E4\n"
+ "\tlsls r0, r4, 16\n"
+ "\tasrs r0, 16\n"
+ "\tcmp r0, r2\n"
+ "\tble _081288E4\n"
+ "\tadds r0, r5, 0\n"
+ "\tadds r0, 0x29\n"
+ "\tmovs r3, 0\n"
+ "\tldrsb r3, [r0, r3]\n"
+ "\tldrh r2, [r5, 0x22]\n"
+ "\tadds r2, r3\n"
+ "\tldrh r4, [r5, 0x22]\n"
+ "\tadds r0, r6, 0\n"
+ "\tadds r0, 0x29\n"
+ "\tmovs r1, 0\n"
+ "\tldrsb r1, [r0, r1]\n"
+ "\tldrh r0, [r6, 0x22]\n"
+ "\tsubs r0, r1\n"
+ "\tlsls r0, 16\n"
+ "\tasrs r0, 16\n"
+ "\tadds r3, r0, r3\n"
+ "\tlsls r2, 16\n"
+ "\tasrs r2, 16\n"
+ "\tlsls r3, 16\n"
+ "\tasrs r3, 16\n"
+ "\tcmp r2, r3\n"
+ "\tblt _081288BC\n"
+ "\tcmp r2, r0\n"
+ "\tbge _081288E4\n"
+ "_081288BC:\n"
+ "\tlsls r0, r4, 16\n"
+ "\tasrs r0, 16\n"
+ "\tcmp r0, r3\n"
+ "\tble _081288E4\n"
+ "\tadds r2, r6, 0\n"
+ "\tadds r2, 0x43\n"
+ "\tadds r0, r5, 0\n"
+ "\tadds r0, 0x43\n"
+ "\tldrb r1, [r0]\n"
+ "\tldrb r0, [r2]\n"
+ "\tcmp r0, r1\n"
+ "\tbhi _081288E4\n"
+ "\tadds r0, r1, 0x2\n"
+ "\tstrb r0, [r2]\n"
+ "\tb _081288EE\n"
+ "\t.align 2, 0\n"
+ "_081288DC: .4byte gMapObjects\n"
+ "_081288E0: .4byte gSprites\n"
+ "_081288E4:\n"
+ "\tadds r0, r7, 0x1\n"
+ "\tlsls r0, 24\n"
+ "\tlsrs r7, r0, 24\n"
+ "\tcmp r7, 0xF\n"
+ "\tbls _08128842\n"
+ "_081288EE:\n"
+ "\tpop {r4-r7}\n"
+ "\tpop {r0}\n"
+ "\tbx r0");
+}
+#endif
diff --git a/src/field_fadetransition.c b/src/field/field_fadetransition.c
index d95177821..82776d18c 100644
--- a/src/field_fadetransition.c
+++ b/src/field/field_fadetransition.c
@@ -89,7 +89,7 @@ void task0A_asap_script_env_2_enable_and_set_ctx_running(u8 taskID)
void sub_8080990(void)
{
ScriptContext2_Enable();
- sub_8053E90();
+ Overworld_PlaySpecialMapMusic();
pal_fill_black();
CreateTask(task0A_asap_script_env_2_enable_and_set_ctx_running, 10);
}
@@ -130,7 +130,7 @@ void task_mpl_807DD60(u8 taskId)
void sub_8080A3C(void)
{
ScriptContext2_Enable();
- sub_8053E90();
+ Overworld_PlaySpecialMapMusic();
palette_bg_fill_black();
CreateTask(task_mpl_807DD60, 10);
}
@@ -165,7 +165,7 @@ void sub_8080A5C(u8 taskId)
void sub_8080AC4(void)
{
ScriptContext2_Enable();
- sub_8053E90();
+ Overworld_PlaySpecialMapMusic();
palette_bg_fill_black();
CreateTask(sub_8080A5C, 10);
}
@@ -188,7 +188,7 @@ void sub_8080AE4(void)
void mapldr_default(void)
{
- sub_8053E90();
+ Overworld_PlaySpecialMapMusic();
pal_fill_for_map_transition();
sub_8080AE4();
ScriptContext2_Enable();
@@ -196,7 +196,7 @@ void mapldr_default(void)
void sub_8080B60(void)
{
- sub_8053E90();
+ Overworld_PlaySpecialMapMusic();
pal_fill_black();
sub_8080AE4();
ScriptContext2_Enable();
@@ -204,7 +204,7 @@ void sub_8080B60(void)
void sub_8080B78(void)
{
- sub_8053E90();
+ Overworld_PlaySpecialMapMusic();
pal_fill_for_map_transition();
PlaySE(SE_TK_WARPOUT);
CreateTask(task_map_chg_seq_0807E2CC, 10);
@@ -354,7 +354,7 @@ void sub_8080E28(void)
void sub_8080E44(void)
{
ScriptContext2_Enable();
- sub_8053E90();
+ Overworld_PlaySpecialMapMusic();
pal_fill_black();
CreateTask(task_mpl_807E3C8, 10);
}
diff --git a/src/field_ground_effect.c b/src/field/field_ground_effect.c
index 2a398ba22..5af8ea3e3 100644
--- a/src/field_ground_effect.c
+++ b/src/field/field_ground_effect.c
@@ -472,7 +472,7 @@ void GroundEffect_SpawnOnTallGrass(struct MapObject *mapObj, struct Sprite *spri
| (u8)gSaveBlock1.location.mapGroup;
gFieldEffectArguments[7] = 1;
- FieldEffectStart(4);
+ FieldEffectStart(FLDEFF_TALL_GRASS);
}
void sub_8063E94(struct MapObject *mapObj, struct Sprite *sprite)
@@ -491,7 +491,7 @@ void sub_8063E94(struct MapObject *mapObj, struct Sprite *sprite)
| (u8)gSaveBlock1.location.mapGroup;
gFieldEffectArguments[7] = 0;
- FieldEffectStart(4);
+ FieldEffectStart(FLDEFF_TALL_GRASS);
}
void sub_8063EE0(struct MapObject *mapObj, struct Sprite *sprite)
@@ -510,7 +510,7 @@ void sub_8063EE0(struct MapObject *mapObj, struct Sprite *sprite)
| (u8)gSaveBlock1.location.mapGroup;
gFieldEffectArguments[7] = 1;
- FieldEffectStart(17);
+ FieldEffectStart(FLDEFF_LONG_GRASS);
}
void sub_8063F2C(struct MapObject *mapObj, struct Sprite *sprite)
@@ -529,7 +529,7 @@ void sub_8063F2C(struct MapObject *mapObj, struct Sprite *sprite)
| (u8)gSaveBlock1.location.mapGroup;
gFieldEffectArguments[7] = 0;
- FieldEffectStart(17);
+ FieldEffectStart(FLDEFF_LONG_GRASS);
}
void GroundEffect_WaterReflection(struct MapObject *mapObj, struct Sprite *sprite)
@@ -570,7 +570,10 @@ static void nullsub(struct MapObject *mapObj, struct Sprite *sprite, u8 a)
static void DoTracksGroundEffect_Footprints(struct MapObject *mapObj, struct Sprite *sprite, u8 a)
{
// First half-word is a Field Effect script id. (gFieldEffectScriptPointers)
- u16 sandFootprints_FieldEffectData[2] = { 0xD, 0x18 };
+ u16 sandFootprints_FieldEffectData[2] = {
+ FLDEFF_SAND_FOOTPRINTS,
+ FLDEFF_DEEP_SAND_FOOTPRINTS
+ };
gFieldEffectArguments[0] = mapObj->coords3.x;
gFieldEffectArguments[1] = mapObj->coords3.y;
diff --git a/src/field_map_obj.c b/src/field/field_map_obj.c
index 0e7cd7896..0cba448a9 100644
--- a/src/field_map_obj.c
+++ b/src/field/field_map_obj.c
@@ -1901,7 +1901,7 @@ extern void CameraObjectReset1(void);
extern struct LinkPlayerMapObject gLinkPlayerMapObjects[];
extern u8 gReservedSpritePaletteCount;
-extern struct Camera gUnknown_0202E844;
+extern struct Camera gCamera;
static u8 gUnknown_030005A4;
static u16 gUnknown_030005A6;
@@ -2462,24 +2462,24 @@ extern void sub_8064970(struct Sprite *);
extern void sub_8060470(s16 *, s16 *, s16, s16);
extern void InitObjectPriorityByZCoord();
-u8 sub_805B410(u8 a, u8 b, s16 c, s16 d, u8 e, u8 f)
+u8 sub_805B410(u8 graphicsId, u8 b, s16 x, s16 y, u8 elevation, u8 direction)
{
const struct MapObjectGraphicsInfo *gfxInfo;
struct SpriteTemplate spriteTemplate;
const struct SubspriteTable *subspriteTables;
u8 spriteId;
- gfxInfo = GetFieldObjectGraphicsInfo(a);
- MakeObjectTemplateFromFieldObjectGraphicsInfo(a, sub_8064970, &spriteTemplate, &subspriteTables);
+ gfxInfo = GetFieldObjectGraphicsInfo(graphicsId);
+ MakeObjectTemplateFromFieldObjectGraphicsInfo(graphicsId, sub_8064970, &spriteTemplate, &subspriteTables);
#ifdef NONMATCHING
spriteTemplate.paletteTag = 0xFFFF;
#else
*(u16 *)&spriteTemplate.paletteTag = 0xFFFF;
#endif
- c += 7;
- d += 7;
- sub_8060470(&c, &d, 8, 16);
- spriteId = CreateSpriteAtEnd(&spriteTemplate, c, d, 0);
+ x += 7;
+ y += 7;
+ sub_8060470(&x, &y, 8, 16);
+ spriteId = CreateSpriteAtEnd(&spriteTemplate, x, y, 0);
if (spriteId != 64)
{
struct Sprite *sprite = &gSprites[spriteId];
@@ -2490,7 +2490,7 @@ u8 sub_805B410(u8 a, u8 b, s16 c, s16 d, u8 e, u8 f)
sprite->oam.paletteNum = gfxInfo->paletteSlot;
sprite->coordOffsetEnabled = TRUE;
sprite->data0 = b;
- sprite->data1 = e;
+ sprite->data1 = elevation;
if (gfxInfo->paletteSlot == 10)
npc_load_two_palettes__and_record(gfxInfo->paletteTag1, gfxInfo->paletteSlot);
if (subspriteTables != NULL)
@@ -2498,9 +2498,9 @@ u8 sub_805B410(u8 a, u8 b, s16 c, s16 d, u8 e, u8 f)
SetSubspriteTables(sprite, subspriteTables);
sprite->subspriteMode = 2;
}
- InitObjectPriorityByZCoord(sprite, e);
- SetObjectSubpriorityByZCoord(e, sprite, 1);
- StartSpriteAnim(sprite, FieldObjectDirectionToImageAnimId(f));
+ InitObjectPriorityByZCoord(sprite, elevation);
+ SetObjectSubpriorityByZCoord(elevation, sprite, 1);
+ StartSpriteAnim(sprite, FieldObjectDirectionToImageAnimId(direction));
}
return spriteId;
}
@@ -2986,24 +2986,21 @@ void UpdateFieldObjectCoordsForCameraUpdate(void)
s16 deltaX;
s16 deltaY;
-#ifndef NONMATCHING
- asm(""::"r"(i)); //makes the compiler store i in r3
-#endif
-
- if (gUnknown_0202E844.field_0)
+ if (gCamera.field_0)
{
- for (i = 0, deltaX = gUnknown_0202E844.x, deltaY = gUnknown_0202E844.y; i < 16; i++)
+ deltaX = gCamera.x;
+ deltaY = gCamera.y;
+ for (i = 0; i < 16; i++)
{
- struct MapObject *mapObject = &gMapObjects[i];
- if (mapObject->active)
+ if (gMapObjects[i].active)
{
- mapObject->coords1.x -= deltaX;
- mapObject->coords1.y -= deltaY;
- mapObject->coords2.x -= deltaX;
- mapObject->coords2.y -= deltaY;
- mapObject->coords3.x -= deltaX;
- mapObject->coords3.y -= deltaY;
+ gMapObjects[i].coords1.x -= deltaX;
+ gMapObjects[i].coords1.y -= deltaY;
+ gMapObjects[i].coords2.x -= deltaX;
+ gMapObjects[i].coords2.y -= deltaY;
+ gMapObjects[i].coords3.x -= deltaX;
+ gMapObjects[i].coords3.y -= deltaY;
}
}
}
@@ -5030,32 +5027,30 @@ u8 sub_805F3C4(struct MapObject *mapObject, struct Sprite *sprite)
return 0;
}
-#ifdef NONMATCHING
-
-u8 sub_805F3EC(struct MapObject *mapObject, struct Sprite *sprite, u8 a2, u8 *a3(u8))
+bool8 sub_805F3EC(struct MapObject *mapObject, struct Sprite *sprite, u8 a2, bool8 a3(u8))
{
return 0;
}
-u8 sub_805F3F0(struct MapObject *mapObject, struct Sprite *sprite, u8 a2, u8 *a3(u8))
+bool8 sub_805F3F0(struct MapObject *mapObject, struct Sprite *sprite, u8 a2, bool8 a3(u8))
{
- int direction;
- direction = state_to_direction(gUnknown_0836DC09[mapObject->animPattern], mapObject->mapobj_unk_21, a2);
- FieldObjectSetRegularAnim(mapObject, sprite, GetFaceDirectionAnimId(direction));
+ FieldObjectSetRegularAnim(mapObject, sprite, GetFaceDirectionAnimId(state_to_direction(gUnknown_0836DC09[mapObject->animPattern], mapObject->mapobj_unk_21, a2)));
mapObject->mapobj_bit_1 = 1;
sprite->data1 = 2;
return 1;
}
-u8 sub_805F438(struct MapObject *mapObject, struct Sprite *sprite, u8 a2, u8 *a3(u8))
+bool8 sub_805F438(struct MapObject *mapObject, struct Sprite *sprite, u8 a2, bool8 a3(u8))
{
+ u32 direction;
s16 x;
s16 y;
- int direction;
- direction = state_to_direction(gUnknown_0836DC09[mapObject->animPattern], mapObject->mapobj_unk_21, a2);
+
+ direction = a2;
+ direction = state_to_direction(gUnknown_0836DC09[mapObject->animPattern], mapObject->mapobj_unk_21, direction);
FieldObjectMoveDestCoords(mapObject, direction, &x, &y);
FieldObjectSetRegularAnim(mapObject, sprite, GetGoSpeed0AnimId(direction));
- if (!npc_block_way(mapObject, x, y, direction) || (a3 != NULL && !a3(MapGridGetMetatileBehaviorAt(x, y))))
+ if (npc_block_way(mapObject, x, y, direction) || (a3 != NULL && !a3(MapGridGetMetatileBehaviorAt(x, y))))
{
FieldObjectSetRegularAnim(mapObject, sprite, GetFaceDirectionAnimId(direction));
}
@@ -5063,9 +5058,115 @@ u8 sub_805F438(struct MapObject *mapObject, struct Sprite *sprite, u8 a2, u8 *a3
sprite->data1 = 2;
return 1;
}
-#endif
-asm(".section .text_fmocb2_c\n");
+bool8 sub_805F4F0(struct MapObject *mapObject, struct Sprite *sprite, u8 playerDirection, bool8 tileCB(u8))
+{
+ u32 direction;
+ s16 x;
+ s16 y;
+
+ direction = playerDirection;
+ direction = state_to_direction(gUnknown_0836DC09[mapObject->animPattern], mapObject->mapobj_unk_21, direction);
+ FieldObjectMoveDestCoords(mapObject, direction, &x, &y);
+ FieldObjectSetRegularAnim(mapObject, sprite, sub_8060744(direction));
+ if (npc_block_way(mapObject, x, y, direction) || (tileCB != NULL && !tileCB(MapGridGetMetatileBehaviorAt(x, y))))
+ {
+ FieldObjectSetRegularAnim(mapObject, sprite, GetFaceDirectionAnimId(direction));
+ }
+ mapObject->mapobj_bit_1 = TRUE;
+ sprite->data1 = 2;
+ return TRUE;
+}
+
+bool8 sub_805F5A8(struct MapObject *mapObject, struct Sprite *sprite, u8 playerDirection, bool8 tileCB(u8))
+{
+ u32 direction;
+ s16 x;
+ s16 y;
+
+ direction = playerDirection;
+ direction = state_to_direction(gUnknown_0836DC09[mapObject->animPattern], mapObject->mapobj_unk_21, direction);
+ FieldObjectMoveDestCoords(mapObject, direction, &x, &y);
+ FieldObjectSetRegularAnim(mapObject, sprite, sub_806079C(direction));
+ if (npc_block_way(mapObject, x, y, direction) || (tileCB != NULL && !tileCB(MapGridGetMetatileBehaviorAt(x, y))))
+ {
+ FieldObjectSetRegularAnim(mapObject, sprite, GetFaceDirectionAnimId(direction));
+ }
+ mapObject->mapobj_bit_1 = TRUE;
+ sprite->data1 = 2;
+ return TRUE;
+}
+
+bool8 sub_805F660(struct MapObject *mapObject, struct Sprite *sprite, u8 playerDirection, bool8 tileCB(u8))
+{
+ u32 direction;
+ s16 x;
+ s16 y;
+
+ direction = playerDirection;
+ direction = state_to_direction(gUnknown_0836DC09[mapObject->animPattern], mapObject->mapobj_unk_21, direction);
+ FieldObjectMoveDestCoords(mapObject, direction, &x, &y);
+ FieldObjectSetRegularAnim(mapObject, sprite, sub_80607C8(direction));
+ if (npc_block_way(mapObject, x, y, direction) || (tileCB != NULL && !tileCB(MapGridGetMetatileBehaviorAt(x, y))))
+ {
+ FieldObjectSetRegularAnim(mapObject, sprite, GetFaceDirectionAnimId(direction));
+ }
+ mapObject->mapobj_bit_1 = TRUE;
+ sprite->data1 = 2;
+ return TRUE;
+}
+
+bool8 cph_IM_DIFFERENT(struct MapObject *mapObject, struct Sprite *sprite, u8 playerDirection, bool8 tileCB(u8))
+{
+ u32 direction;
+
+ direction = playerDirection;
+ direction = state_to_direction(gUnknown_0836DC09[mapObject->animPattern], mapObject->mapobj_unk_21, direction);
+ FieldObjectSetRegularAnim(mapObject, sprite, sub_806084C(direction));
+ mapObject->mapobj_bit_1 = TRUE;
+ sprite->data1 = 2;
+ return TRUE;
+}
+
+bool8 sub_805F760(struct MapObject *mapObject, struct Sprite *sprite, u8 playerDirection, bool8 tileCB(u8))
+{
+ u32 direction;
+ s16 x;
+ s16 y;
+
+ direction = playerDirection;
+ direction = state_to_direction(gUnknown_0836DC09[mapObject->animPattern], mapObject->mapobj_unk_21, direction);
+ FieldObjectMoveDestCoords(mapObject, direction, &x, &y);
+ FieldObjectSetRegularAnim(mapObject, sprite, sub_80608A4(direction));
+ if (npc_block_way(mapObject, x, y, direction) || (tileCB != NULL && !tileCB(MapGridGetMetatileBehaviorAt(x, y))))
+ {
+ FieldObjectSetRegularAnim(mapObject, sprite, GetFaceDirectionAnimId(direction));
+ }
+ mapObject->mapobj_bit_1 = TRUE;
+ sprite->data1 = 2;
+ return TRUE;
+}
+
+bool8 oac_hopping(struct MapObject *mapObject, struct Sprite *sprite, u8 playerDirection, bool8 tileCB(u8))
+{
+ u32 direction;
+ s16 x;
+ s16 y;
+
+ direction = playerDirection;
+ direction = state_to_direction(gUnknown_0836DC09[mapObject->animPattern], mapObject->mapobj_unk_21, direction);
+ x = mapObject->coords2.x;
+ y = mapObject->coords2.y;
+ sub_8060320(direction, &x, &y, 2, 2);
+ FieldObjectSetRegularAnim(mapObject, sprite, GetJumpLedgeAnimId(direction));
+ if (npc_block_way(mapObject, x, y, direction) || (tileCB != NULL && !tileCB(MapGridGetMetatileBehaviorAt(x, y))))
+ {
+ FieldObjectSetRegularAnim(mapObject, sprite, GetFaceDirectionAnimId(direction));
+ }
+ mapObject->mapobj_bit_1 = TRUE;
+ sprite->data1 = 2;
+ return TRUE;
+}
fieldmap_object_cb(sub_805F8E0, sub_805F904, gUnknown_083755C0);
@@ -5367,8 +5468,10 @@ bool8 IsCoordOutsideFieldObjectMovementRect(struct MapObject2 *mapObject, s16 x,
static bool8 DoesObjectCollideWithObjectAt(struct MapObject *mapObject, s16 x, s16 y);
bool8 IsMetatileDirectionallyImpassable(struct MapObject *mapObject, s16 x, s16 y, u8 direction);
-u8 npc_block_way(struct MapObject *mapObject, s16 x, s16 y, u8 direction)
+u8 npc_block_way(struct MapObject *mapObject, s16 x, s16 y, u32 dirn)
{
+ u8 direction;
+ direction = dirn;
if (IsCoordOutsideFieldObjectMovementRect((struct MapObject2 *)mapObject, x, y))
return 1;
else if (MapGridIsImpassableAt(x, y) || GetMapBorderIdAt(x, y) == -1 || IsMetatileDirectionallyImpassable(mapObject, x, y, direction))
@@ -5480,23 +5583,26 @@ void unref_sub_80602F8(u8 direction, s16 *x, s16 *y)
*y += gDirectionToVector[direction].y << 4;
}
-void sub_8060320(u8 direction, s16 *x, s16 *y, s16 deltaX, s16 deltaY)
+void sub_8060320(u32 dirn, s16 *x, s16 *y, s16 deltaX, s16 deltaY)
{
+ u8 direction = dirn;
+ s16 dx2 = deltaX;
+ s16 dy2 = deltaY;
if (gDirectionToVector[direction].x > 0)
{
- *x += deltaX;
+ *x += dx2;
}
if (gDirectionToVector[direction].x < 0)
{
- *x -= deltaX;
+ *x -= dx2;
}
if (gDirectionToVector[direction].y > 0)
{
- *y += deltaY;
+ *y += dy2;
}
if (gDirectionToVector[direction].y < 0)
{
- *y -= deltaY;
+ *y -= dy2;
}
}
@@ -5563,11 +5669,12 @@ void GetFieldObjectMovingCameraOffset(s16 *x, s16 *y)
}
}
-void FieldObjectMoveDestCoords(struct MapObject *mapObject, u8 direction, s16 *x, s16 *y)
+void FieldObjectMoveDestCoords(struct MapObject *mapObject, u32 direction, s16 *x, s16 *y)
{
+ u8 newDirn = direction;
*x = mapObject->coords2.x;
*y = mapObject->coords2.y;
- MoveCoords(direction, x, y);
+ MoveCoords(newDirn, x, y);
}
bool8 FieldObjectIsSpecialAnimOrDirectionSequenceAnimActive(struct MapObject *mapObject)
@@ -5681,193 +5788,34 @@ void meta_step(struct MapObject *mapObject, struct Sprite *sprite, u8 (*callback
FieldObjectUpdateSubpriority(mapObject, sprite);
}
-
-u8 GetFaceDirectionAnimId(u8 index)
-{
- u8 directions[5];
- memcpy(directions, gUnknown_083756C8, 5);
- if (index >= 5)
- {
- index = 0;
- }
- return directions[index];
-}
-
-u8 GetSimpleGoAnimId(u8 index)
-{
- u8 directions[5];
- memcpy(directions, gUnknown_083756CD, 5);
- if (index >= 5)
- {
- index = 0;
- }
- return directions[index];
-}
-
-u8 GetGoSpeed0AnimId(u8 index)
-{
- u8 directions[5];
- memcpy(directions, gUnknown_083756D2, 5);
- if (index >= 5)
- {
- index = 0;
- }
- return directions[index];
-}
-
-u8 sub_8060744(u8 index)
-{
- u8 directions[5];
- memcpy(directions, gUnknown_083756D7, 5);
- if (index >= 5)
- {
- index = 0;
- }
- return directions[index];
-}
-
-u8 d2s_08064034(u8 index)
-{
- u8 directions[5];
- memcpy(directions, gUnknown_083756DC, 5);
- if (index >= 5)
- {
- index = 0;
- }
- return directions[index];
-}
-
-u8 sub_806079C(u8 index)
-{
- u8 directions[5];
- memcpy(directions, gUnknown_083756E1, 5);
- if (index >= 5)
- {
- index = 0;
- }
- return directions[index];
-}
-
-u8 sub_80607C8(u8 index)
-{
- u8 directions[5];
- memcpy(directions, gUnknown_083756E6, 5);
- if (index >= 5)
- {
- index = 0;
- }
- return directions[index];
-}
-
-u8 sub_80607F4(u8 index)
-{
- u8 directions[5];
- memcpy(directions, gUnknown_083756EB, 5);
- if (index >= 5)
- {
- index = 0;
- }
- return directions[index];
-}
-
-u8 GetJumpLedgeAnimId(u8 index)
-{
- u8 directions[5];
- memcpy(directions, gUnknown_083756F0, 5);
- if (index >= 5)
- {
- index = 0;
- }
- return directions[index];
-}
-
-u8 sub_806084C(u8 index)
-{
- u8 directions[5];
- memcpy(directions, gUnknown_083756F5, 5);
- if (index >= 5)
- {
- index = 0;
- }
- return directions[index];
-}
-
-u8 sub_8060878(u8 index)
-{
- u8 directions[5];
- memcpy(directions, gUnknown_083756FA, 5);
- if (index >= 5)
- {
- index = 0;
- }
- return directions[index];
-}
-
-u8 sub_80608A4(u8 index)
-{
- u8 directions[5];
- memcpy(directions, gUnknown_083756FF, 5);
- if (index >= 5)
- {
- index = 0;
- }
- return directions[index];
-}
-
-u8 sub_80608D0(u8 index)
-{
- u8 directions[5];
- memcpy(directions, gUnknown_08375704, 5);
- if (index >= 5)
- {
- index = 0;
- }
- return directions[index];
-}
-
-u8 GetStepInPlaceDelay32AnimId(u8 index)
-{
- u8 directions[5];
- memcpy(directions, gUnknown_08375709, 5);
- if (index >= 5)
- {
- index = 0;
- }
- return directions[index];
-}
-
-u8 GetStepInPlaceDelay16AnimId(u8 index)
-{
- u8 directions[5];
- memcpy(directions, gUnknown_0837570E, 5);
- if (index >= 5)
- {
- index = 0;
- }
- return directions[index];
-}
-
-u8 GetStepInPlaceDelay8AnimId(u8 index)
-{
- u8 directions[5];
- memcpy(directions, gUnknown_08375713, 5);
- if (index >= 5)
- {
- index = 0;
- }
- return directions[index];
-}
-
-u8 GetStepInPlaceDelay4AnimId(u8 index)
-{
- u8 directions[5];
- memcpy(directions, gUnknown_08375718, 5);
- if (index >= 5)
- {
- index = 0;
- }
- return directions[index];
-}
+#define dirn_to_anim(name, table)\
+u8 name(u32 idx)\
+{\
+ u8 direction;\
+ u8 animIds[sizeof(table)];\
+ direction = idx;\
+ memcpy(animIds, (table), sizeof(table));\
+ if (direction > DIR_EAST) direction = 0;\
+ return animIds[direction];\
+}
+
+dirn_to_anim(GetFaceDirectionAnimId, gUnknown_083756C8)
+dirn_to_anim(GetSimpleGoAnimId, gUnknown_083756CD)
+dirn_to_anim(GetGoSpeed0AnimId, gUnknown_083756D2)
+dirn_to_anim(sub_8060744, gUnknown_083756D7)
+dirn_to_anim(d2s_08064034, gUnknown_083756DC)
+dirn_to_anim(sub_806079C, gUnknown_083756E1)
+dirn_to_anim(sub_80607C8, gUnknown_083756E6)
+dirn_to_anim(sub_80607F4, gUnknown_083756EB)
+dirn_to_anim(GetJumpLedgeAnimId, gUnknown_083756F0)
+dirn_to_anim(sub_806084C, gUnknown_083756F5)
+dirn_to_anim(sub_8060878, gUnknown_083756FA)
+dirn_to_anim(sub_80608A4, gUnknown_083756FF)
+dirn_to_anim(sub_80608D0, gUnknown_08375704)
+dirn_to_anim(GetStepInPlaceDelay32AnimId, gUnknown_08375709)
+dirn_to_anim(GetStepInPlaceDelay16AnimId, gUnknown_0837570E)
+dirn_to_anim(GetStepInPlaceDelay8AnimId, gUnknown_08375713)
+dirn_to_anim(GetStepInPlaceDelay4AnimId, gUnknown_08375718)
u8 FieldObjectFaceOppositeDirection(struct MapObject *mapObject, u8 direction)
{
@@ -5995,65 +5943,23 @@ u8 GetOppositeDirection(u8 direction)
return directions[direction - 1];
}
-int zffu_offset_calc(u8 a0, u8 a1)
+u32 zffu_offset_calc(u8 a0, u8 a1)
{
return gUnknown_08375757[a0 - 1][a1 - 1];
}
-#ifdef NONMATCHING
-int state_to_direction(u8 a0, u8 a1, u8 a2)
+u32 state_to_direction(u8 a0, u32 a1, u32 a2)
{
- int zffuOffset;
- asm_comment("For some reason, r2 is being backed up to r3 and restored ahead of the zffu call.");
- if (a1 == 0 || a2 == 0 || a1 > 4 || a2 > 4)
+ u32 zffuOffset;
+ u8 a1_2 = a1;
+ u8 a2_2 = a2;
+ if (a1_2 == 0 || a2_2 == 0 || a1_2 > DIR_EAST || a2_2 > DIR_EAST)
{
return 0;
}
- zffuOffset = zffu_offset_calc(a1, a2);
+ zffuOffset = zffu_offset_calc(a1_2, a2);
return gUnknown_08375767[a0 - 1][zffuOffset - 1];
}
-#else
-__attribute__((naked))
-int state_to_direction(u8 a0, u8 a1, u8 a2)
-{
- asm(".syntax unified\n\
- push {r4,lr}\n\
- lsls r0, 24\n\
- lsrs r4, r0, 24\n\
- lsls r1, 24\n\
- lsrs r1, 24\n\
- adds r0, r1, 0\n\
- lsls r2, 24\n\
- lsrs r2, 24\n\
- cmp r1, 0\n\
- beq _08060BFC\n\
- cmp r2, 0\n\
- beq _08060BFC\n\
- cmp r1, 0x4\n\
- bhi _08060BFC\n\
- cmp r2, 0x4\n\
- bls _08060C00\n\
-_08060BFC:\n\
- movs r0, 0\n\
- b _08060C12\n\
-_08060C00:\n\
- adds r1, r2, 0\n\
- bl zffu_offset_calc\n\
- ldr r2, _08060C18 @ =gUnknown_08375767\n\
- lsls r1, r4, 2\n\
- subs r1, 0x5\n\
- adds r0, r1\n\
- adds r0, r2\n\
- ldrb r0, [r0]\n\
-_08060C12:\n\
- pop {r4}\n\
- pop {r1}\n\
- bx r1\n\
- .align 2, 0\n\
-_08060C18: .4byte gUnknown_08375767\n\
-.syntax divided\n");
-}
-#endif
void FieldObjectExecSpecialAnim(struct MapObject *mapObject, struct Sprite *sprite)
{
diff --git a/src/field_map_obj_helpers.c b/src/field/field_map_obj_helpers.c
index 93cd57557..b453d3794 100644
--- a/src/field_map_obj_helpers.c
+++ b/src/field/field_map_obj_helpers.c
@@ -303,7 +303,7 @@ void DoShadowFieldEffect(struct MapObject *mapObject)
if (!mapObject->mapobj_bit_22)
{
mapObject->mapobj_bit_22 = 1;
- oe_exec_and_other_stuff(3, mapObject);
+ oe_exec_and_other_stuff(FLDEFF_SHADOW, mapObject);
}
}
diff --git a/src/field_message_box.c b/src/field/field_message_box.c
index 35aac7ac9..35aac7ac9 100644
--- a/src/field_message_box.c
+++ b/src/field/field_message_box.c
diff --git a/src/field_player_avatar.c b/src/field/field_player_avatar.c
index c8099a73d..6c1c9123a 100644
--- a/src/field_player_avatar.c
+++ b/src/field/field_player_avatar.c
@@ -1224,8 +1224,8 @@ u8 sub_8059EA4(struct Task *task, struct MapObject *b, struct MapObject *c)
{
FieldObjectClearAnimIfSpecialAnimFinished(b);
FieldObjectClearAnimIfSpecialAnimFinished(c);
- FieldObjectSetSpecialAnim(b, GetStepInPlaceDelay16AnimId(task->data[2]));
- FieldObjectSetSpecialAnim(c, GetSimpleGoAnimId(task->data[2]));
+ FieldObjectSetSpecialAnim(b, GetStepInPlaceDelay16AnimId((u8)task->data[2]));
+ FieldObjectSetSpecialAnim(c, GetSimpleGoAnimId((u8)task->data[2]));
gFieldEffectArguments[0] = c->coords2.x;
gFieldEffectArguments[1] = c->coords2.y;
gFieldEffectArguments[2] = c->elevation;
@@ -1365,8 +1365,8 @@ void sub_805A20C(u8 a)
u8 taskId;
ScriptContext2_Enable();
- sav1_reset_battle_music_maybe();
- sub_8053F84();
+ Overworld_ClearSavedMusic();
+ Overworld_ChangeMusicToDefault();
gPlayerAvatar.flags &= ~PLAYER_AVATAR_FLAG_SURFING;
gPlayerAvatar.flags |= PLAYER_AVATAR_FLAG_ON_FOOT;
gPlayerAvatar.unk6 = 1;
@@ -1385,7 +1385,7 @@ static void taskFF_0805D1D4(u8 taskId)
return;
}
sub_8127ED0(playerMapObj->mapobj_unk_1A, 2);
- FieldObjectSetSpecialAnim(playerMapObj, sub_80608D0(gTasks[taskId].data[0]));
+ FieldObjectSetSpecialAnim(playerMapObj, sub_80608D0((u8)gTasks[taskId].data[0]));
gTasks[taskId].func = sub_805A2D0;
}
diff --git a/src/field_poison.c b/src/field/field_poison.c
index 1244b9c62..1244b9c62 100644
--- a/src/field_poison.c
+++ b/src/field/field_poison.c
diff --git a/src/field_region_map.c b/src/field/field_region_map.c
index 7cb22e5df..7cb22e5df 100644
--- a/src/field_region_map.c
+++ b/src/field/field_region_map.c
diff --git a/src/field_screen_effect.c b/src/field/field_screen_effect.c
index 1464a99b1..0c76d254d 100644
--- a/src/field_screen_effect.c
+++ b/src/field/field_screen_effect.c
@@ -327,7 +327,7 @@ static void task50_0807F0C8(u8);
void sub_8081924(void)
{
- sub_8054044();
+ Overworld_FadeOutMapMusic();
CreateTask(task50_0807F0C8, 80);
}
diff --git a/src/field_special_scene.c b/src/field/field_special_scene.c
index 38c076c51..d4b59c8a2 100644
--- a/src/field_special_scene.c
+++ b/src/field/field_special_scene.c
@@ -250,7 +250,7 @@ bool8 sub_80C7754(void)
}
else
{
- warp1_set(mapGroup, mapNum, -1, x, y);
+ Overworld_SetWarpDestination(mapGroup, mapNum, -1, x, y);
return TRUE;
}
}
diff --git a/src/field_specials.c b/src/field/field_specials.c
index c23ea2ddc..36362d098 100644
--- a/src/field_specials.c
+++ b/src/field/field_specials.c
@@ -213,7 +213,7 @@ void UpdateCyclingRoadState(void) {
if (VarGet(0x40a9) == 2 || VarGet(0x40a9) == 3)
{
VarSet(0x40a9, 0);
- sav1_set_battle_music_maybe(SE_STOP);
+ Overworld_SetSavedMusic(SE_STOP);
}
}
@@ -700,11 +700,11 @@ void CableCarWarp(void)
{
if (gSpecialVar_0x8004 != 0)
{
- warp1_set(MAP_GROUP_ROUTE112_CABLE_CAR_STATION, MAP_ID_ROUTE112_CABLE_CAR_STATION, -1, 6, 4);
+ Overworld_SetWarpDestination(MAP_GROUP_ROUTE112_CABLE_CAR_STATION, MAP_ID_ROUTE112_CABLE_CAR_STATION, -1, 6, 4);
}
else
{
- warp1_set(MAP_GROUP_MT_CHIMNEY_CABLE_CAR_STATION, MAP_ID_MT_CHIMNEY_CABLE_CAR_STATION, -1, 6, 4);
+ Overworld_SetWarpDestination(MAP_GROUP_MT_CHIMNEY_CABLE_CAR_STATION, MAP_ID_MT_CHIMNEY_CABLE_CAR_STATION, -1, 6, 4);
}
}
diff --git a/src/field_tasks.c b/src/field/field_tasks.c
index 2be54f923..da6f162c2 100644
--- a/src/field_tasks.c
+++ b/src/field/field_tasks.c
@@ -1,5 +1,5 @@
//
-// Created by scott on 6/22/2017.
+
//
#include "global.h"
@@ -845,11 +845,11 @@ void Task_MuddySlope(u8 taskId)
}
break;
}
- if (gUnknown_0202E844.field_0 && mapIndices != data[0])
+ if (gCamera.field_0 && mapIndices != data[0])
{
data[0] = mapIndices;
- x2 = gUnknown_0202E844.x;
- y2 = gUnknown_0202E844.y;
+ x2 = gCamera.x;
+ y2 = gCamera.y;
}
else
{
diff --git a/src/field_weather.c b/src/field/field_weather.c
index 5ff2eddf9..443a38357 100644
--- a/src/field_weather.c
+++ b/src/field/field_weather.c
@@ -55,7 +55,7 @@ extern struct Weather gWeather;
extern u8 *gUnknown_083970E8;
extern u8 (*gUnknown_08396FC8[][4])(void);
extern u8 (*gUnknown_083970B8[])(void);
-extern u8 *gUnknown_030006DC;
+IWRAM_DATA u8 *gUnknown_030006DC;
extern u8 gUnknown_083970C8;
extern u8 (*gUnknown_0202FC48)[32];
extern u8 gUnknown_0202F9E8[32];
diff --git a/src/fieldmap.c b/src/field/fieldmap.c
index 3ad190a4b..7a31ae720 100644
--- a/src/fieldmap.c
+++ b/src/field/fieldmap.c
@@ -22,7 +22,7 @@ struct Coords32
EWRAM_DATA static u16 gUnknown_02029828[0x2800] = {0};
EWRAM_DATA struct MapHeader gMapHeader = {0};
-EWRAM_DATA struct Camera gUnknown_0202E844 = {0};
+EWRAM_DATA struct Camera gCamera = {0};
EWRAM_DATA static struct ConnectionFlags gUnknown_0202E850 = {0};
struct BackupMapData gUnknown_03004870;
@@ -713,7 +713,7 @@ bool8 CameraMove(int x, int y)
unsigned int direction;
struct MapConnection *connection;
int old_x, old_y;
- gUnknown_0202E844.field_0 = FALSE;
+ gCamera.field_0 = FALSE;
direction = GetPostCameraMoveMapBorderId(x, y);
if (direction + 1 <= 1)
{
@@ -728,14 +728,14 @@ bool8 CameraMove(int x, int y)
connection = sub_8056A64(direction, gSaveBlock1.pos.x, gSaveBlock1.pos.y);
sub_8056918(connection, direction, x, y);
sub_80538F0(connection->mapGroup, connection->mapNum);
- gUnknown_0202E844.field_0 = TRUE;
- gUnknown_0202E844.x = old_x - gSaveBlock1.pos.x;
- gUnknown_0202E844.y = old_y - gSaveBlock1.pos.y;
+ gCamera.field_0 = TRUE;
+ gCamera.x = old_x - gSaveBlock1.pos.x;
+ gCamera.y = old_y - gSaveBlock1.pos.y;
gSaveBlock1.pos.x += x;
gSaveBlock1.pos.y += y;
sub_80566F0(direction);
}
- return gUnknown_0202E844.field_0;
+ return gCamera.field_0;
}
struct MapConnection *sub_8056A64(u8 direction, int x, int y)
diff --git a/src/fldeff_cut.c b/src/field/fldeff_cut.c
index 00643a979..00643a979 100644
--- a/src/fldeff_cut.c
+++ b/src/field/fldeff_cut.c
diff --git a/src/fldeff_flash.c b/src/field/fldeff_flash.c
index 1ee8a8f05..1ee8a8f05 100644
--- a/src/fldeff_flash.c
+++ b/src/field/fldeff_flash.c
diff --git a/src/fldeff_softboiled.c b/src/field/fldeff_softboiled.c
index cb26d9966..cb26d9966 100644
--- a/src/fldeff_softboiled.c
+++ b/src/field/fldeff_softboiled.c
diff --git a/src/fldeff_strength.c b/src/field/fldeff_strength.c
index d9603d094..d9603d094 100644
--- a/src/fldeff_strength.c
+++ b/src/field/fldeff_strength.c
diff --git a/src/fldeff_sweetscent.c b/src/field/fldeff_sweetscent.c
index b9dbf619d..b9dbf619d 100644
--- a/src/fldeff_sweetscent.c
+++ b/src/field/fldeff_sweetscent.c
diff --git a/src/fldeff_teleport.c b/src/field/fldeff_teleport.c
index af48fb414..af48fb414 100644
--- a/src/fldeff_teleport.c
+++ b/src/field/fldeff_teleport.c
diff --git a/src/heal_location.c b/src/field/heal_location.c
index 42bc18567..42bc18567 100644
--- a/src/heal_location.c
+++ b/src/field/heal_location.c
diff --git a/src/hof_pc.c b/src/field/hof_pc.c
index aeeb7fe17..267ed4274 100644
--- a/src/hof_pc.c
+++ b/src/field/hof_pc.c
@@ -28,7 +28,7 @@ void ReturnFromHallOfFamePC(void)
static void ReshowPCMenuAfterHallOfFamePC(void)
{
ScriptContext2_Enable();
- sub_8053E90();
+ Overworld_PlaySpecialMapMusic();
BeginNormalPaletteFade(0xFFFFFFFF, 0, 0x10, 0, 0);
ScrSpecial_CreatePCMenu();
ScriptMenu_DisplayPCStartupPrompt();
diff --git a/src/item.c b/src/field/item.c
index 36871285a..fd49f5c39 100644
--- a/src/item.c
+++ b/src/field/item.c
@@ -30,11 +30,11 @@ enum
};
#if ENGLISH
-#include "data/item_descriptions_en.h"
-#include "data/items_en.h"
+#include "../data/item_descriptions_en.h"
+#include "../data/items_en.h"
#elif GERMAN
-#include "data/item_descriptions_de.h"
-#include "data/items_de.h"
+#include "../data/item_descriptions_de.h"
+#include "../data/items_de.h"
#endif
static void CompactPCItems(void);
diff --git a/src/item_menu.c b/src/field/item_menu.c
index 891eb135f..c508bcacf 100644
--- a/src/item_menu.c
+++ b/src/field/item_menu.c
@@ -152,7 +152,7 @@ static u8 sReturnLocation;
static const u8 *sPopupMenuActionList;
// common
-void (*gUnknown_03005D00)(u8) = NULL;
+void (*gFieldItemUseCallback)(u8) = NULL;
extern u16 gUnknown_030041B4;
extern struct PocketScrollState gBagPocketScrollStates[];
extern struct ItemSlot *gCurrentBagPocketItemSlots; // selected pocket item slots
@@ -2718,7 +2718,7 @@ void ExecuteItemUseFromBlackPalette(void)
static void Task_CallItemUseOnFieldCallback(u8 taskId)
{
if (sub_807D770() == TRUE)
- gUnknown_03005D00(taskId);
+ gFieldItemUseCallback(taskId);
}
void sub_80A5D04(void)
@@ -4492,7 +4492,7 @@ static void LoadBerryPic(u8 berryId)
spritePal.data = (u16 *)sBerryGraphicsTable[berryId].lzPalette;
spritePal.tag = 0x7544;
LoadCompressedObjectPalette((struct CompressedSpritePalette *)&spritePal);
- sub_800D238(sBerryGraphicsTable[berryId].lzPic, ewramBerryPicTemp);
+ LZDecompressWram(sBerryGraphicsTable[berryId].lzPic, ewramBerryPicTemp);
DrawBerryPic(ewramBerryPicTemp, ewramBerryPic);
}
}
diff --git a/src/item_use.c b/src/field/item_use.c
index 8bc83bdc6..68da27fdb 100644
--- a/src/item_use.c
+++ b/src/field/item_use.c
@@ -36,7 +36,7 @@
#include "task.h"
#include "vars.h"
-extern void (*gUnknown_03005D00)(u8);
+extern void (*gFieldItemUseCallback)(u8);
extern void (*gFieldCallback)(void);
extern void (*gUnknown_0300485C)(void);
extern void (*gUnknown_03004AE4)(u8, u16, TaskFunc);
@@ -106,11 +106,13 @@ void SetUpItemUseOnFieldCallback(u8 taskId)
{
if (gTasks[taskId].data[2] != 1)
{
- gFieldCallback = (void *)ExecuteItemUseFromBlackPalette;
+ gFieldCallback = ExecuteItemUseFromBlackPalette;
ItemMenu_ConfirmNormalFade(taskId);
}
else
- gUnknown_03005D00(taskId);
+ {
+ gFieldItemUseCallback(taskId);
+ }
}
void HandleDeniedItemUseMessage(u8 var1, u8 playerMenuStatus, const u8 *text)
@@ -185,9 +187,9 @@ void ItemUseOutOfBattle_Bike(u8 taskId)
}
else
{
- if (Overworld_IsBikeAllowedOnCurrentMap() == TRUE && IsBikingDisallowedByPlayer() == FALSE)
+ if (Overworld_IsBikingAllowed() == TRUE && IsBikingDisallowedByPlayer() == FALSE)
{
- gUnknown_03005D00 = (void *)ItemUseOnFieldCB_Bike;
+ gFieldItemUseCallback = (void *)ItemUseOnFieldCB_Bike;
SetUpItemUseOnFieldCallback(taskId);
}
else
@@ -241,7 +243,7 @@ void ItemUseOutOfBattle_Rod(u8 taskId)
{
if (CanFish() == TRUE)
{
- gUnknown_03005D00 = (void *)ItemUseOnFieldCB_Rod;
+ gFieldItemUseCallback = (void *)ItemUseOnFieldCB_Rod;
SetUpItemUseOnFieldCallback(taskId);
}
else
@@ -257,7 +259,7 @@ void ItemUseOnFieldCB_Rod(u8 taskId)
void ItemUseOutOfBattle_Itemfinder(u8 var)
{
IncrementGameStat(0x27);
- gUnknown_03005D00 = (void *)ItemUseOnFieldCB_Itemfinder;
+ gFieldItemUseCallback = (void *)ItemUseOnFieldCB_Itemfinder;
SetUpItemUseOnFieldCallback(var);
}
@@ -780,7 +782,7 @@ void sub_80C9C7C(u8 taskId)
{
if (IsPlayerFacingPlantedBerryTree() == TRUE)
{
- gUnknown_03005D00 = sub_80C9D00;
+ gFieldItemUseCallback = sub_80C9D00;
gFieldCallback = ExecuteItemUseFromBlackPalette;
gTasks[taskId].data[8] = (u32)c2_exit_to_overworld_2_switch >> 16;
gTasks[taskId].data[9] = (u32)c2_exit_to_overworld_2_switch;
@@ -805,7 +807,7 @@ void ItemUseOutOfBattle_WailmerPail(u8 taskId)
{
if (TryToWaterBerryTree() == TRUE)
{
- gUnknown_03005D00 = sub_80C9D74;
+ gFieldItemUseCallback = sub_80C9D74;
SetUpItemUseOnFieldCallback(taskId);
}
else
@@ -909,7 +911,7 @@ void sub_80C9FC0(u8 var)
sub_80C9D98(var);
}
-void sub_80C9FDC(void)
+static void PrepareItemUseMessage(void)
{
RemoveBagItem(gScriptItemId, 1);
sub_80A3E0C();
@@ -922,7 +924,7 @@ void ItemUseOutOfBattle_Repel(u8 var)
if (VarGet(VAR_REPEL_STEP_COUNT) == FALSE)
{
VarSet(VAR_REPEL_STEP_COUNT, ItemId_GetHoldEffectParam(gScriptItemId));
- sub_80C9FDC();
+ PrepareItemUseMessage();
DisplayItemMessageOnField(var, gStringVar4, CleanUpItemMenuMessage, 1);
}
else
@@ -975,10 +977,10 @@ void task08_080A1C44(u8 taskId)
DestroyTask(taskId);
}
-void sub_80CA18C(u8 taskId)
+void EscapeRopeCallback(u8 taskId)
{
- sub_8053014();
- sub_80C9FDC();
+ Overworld_ResetStateAfterDigEscRope();
+ PrepareItemUseMessage();
gTasks[taskId].data[0] = 0;
DisplayItemMessageOnField(taskId, gStringVar4, task08_080A1C44, 0);
}
@@ -995,7 +997,7 @@ void ItemUseOutOfBattle_EscapeRope(u8 taskId)
{
if (CanUseEscapeRopeOnCurrMap() == TRUE)
{
- gUnknown_03005D00 = sub_80CA18C;
+ gFieldItemUseCallback = EscapeRopeCallback;
SetUpItemUseOnFieldCallback(taskId);
}
else
@@ -1114,7 +1116,7 @@ void ItemUseInBattle_Escape(u8 taskId)
if((gBattleTypeFlags & BATTLE_TYPE_TRAINER) == FALSE)
{
- sub_80C9FDC();
+ PrepareItemUseMessage();
DisplayItemMessageOnField(taskId, gStringVar4, sub_80A7094, 1);
}
else
diff --git a/src/landmark.c b/src/field/landmark.c
index 6a53716bb..6a53716bb 100644
--- a/src/landmark.c
+++ b/src/field/landmark.c
diff --git a/src/lottery_corner.c b/src/field/lottery_corner.c
index c2c25b9ac..c2c25b9ac 100644
--- a/src/lottery_corner.c
+++ b/src/field/lottery_corner.c
diff --git a/src/map_name_popup.c b/src/field/map_name_popup.c
index 01105d0db..01105d0db 100644
--- a/src/map_name_popup.c
+++ b/src/field/map_name_popup.c
diff --git a/src/map_obj_lock.c b/src/field/map_obj_lock.c
index 2856320b8..2856320b8 100644
--- a/src/map_obj_lock.c
+++ b/src/field/map_obj_lock.c
diff --git a/src/mauville_man.c b/src/field/mauville_man.c
index 33bc39648..33bc39648 100644
--- a/src/mauville_man.c
+++ b/src/field/mauville_man.c
diff --git a/src/menu_helpers.c b/src/field/menu_helpers.c
index 14e823355..14e823355 100644
--- a/src/menu_helpers.c
+++ b/src/field/menu_helpers.c
diff --git a/src/metatile_behavior.c b/src/field/metatile_behavior.c
index d05ba0b89..d05ba0b89 100644
--- a/src/metatile_behavior.c
+++ b/src/field/metatile_behavior.c
diff --git a/src/money.c b/src/field/money.c
index 5d0f0ae8d..5d0f0ae8d 100644
--- a/src/money.c
+++ b/src/field/money.c
diff --git a/src/overworld.c b/src/field/overworld.c
index 9b41a262d..d6f255409 100644
--- a/src/overworld.c
+++ b/src/field/overworld.c
@@ -91,7 +91,7 @@ extern struct MapHeader * const * const gMapGroups[];
extern s32 gMaxFlashLevel;
EWRAM_DATA struct WarpData gUnknown_020297F0 = {0};
-EWRAM_DATA struct WarpData gUnknown_020297F8 = {0};
+EWRAM_DATA struct WarpData gWarpDestination = {0}; // new warp position
EWRAM_DATA struct WarpData gUnknown_02029800 = {0};
EWRAM_DATA struct WarpData gUnknown_02029808 = {0};
EWRAM_DATA struct UnkPlayerStruct gUnknown_02029810 = {0};
@@ -195,12 +195,12 @@ static void DoWhiteOut(void)
ScriptContext2_RunNewScript(S_WhiteOut);
gSaveBlock1.money /= 2;
ScrSpecial_HealPlayerParty();
- sub_8053050();
- sub_8053570();
+ Overworld_ResetStateAfterWhiteOut();
+ Overworld_SetWarpDestToLastHealLoc();
warp_in();
}
-void flag_var_implications_of_teleport_(void)
+void Overworld_ResetStateAfterFly(void)
{
player_avatar_init_params_reset();
FlagClear(SYS_CYCLING_ROAD);
@@ -221,7 +221,7 @@ void Overworld_ResetStateAfterTeleport(void)
ScriptContext2_RunNewScript(gUnknown_0819FC9F);
}
-void sub_8053014(void)
+void Overworld_ResetStateAfterDigEscRope(void)
{
player_avatar_init_params_reset();
FlagClear(SYS_CYCLING_ROAD);
@@ -231,7 +231,7 @@ void sub_8053014(void)
FlagClear(SYS_USE_FLASH);
}
-void sub_8053050(void)
+void Overworld_ResetStateAfterWhiteOut(void)
{
player_avatar_init_params_reset();
FlagClear(SYS_CYCLING_ROAD);
@@ -283,9 +283,12 @@ void SetGameStat(u8 index, u32 value)
gSaveBlock1.gameStats[index] = value;
}
-void sub_8053154(void)
+void LoadMapObjTemplatesFromHeader(void)
{
+ // Clear map object templates
CpuFill32(0, gSaveBlock1.mapObjectTemplates, sizeof(gSaveBlock1.mapObjectTemplates));
+
+ // Copy map header events to save block
CpuCopy32(gMapHeader.events->mapObjects,
gSaveBlock1.mapObjectTemplates,
gMapHeader.events->mapObjectCount * sizeof(struct MapObjectTemplate));
@@ -300,7 +303,7 @@ static void LoadSaveblockMapObjScripts(void)
mapObjectTemplates[i].script = gMapHeader.events->mapObjects[i].script;
}
-void Overworld_SaveMapObjCoords(u8 localId, s16 x, s16 y)
+void Overworld_SetMapObjTemplateCoords(u8 localId, s16 x, s16 y)
{
s32 i;
for (i = 0; i < 64; i++)
@@ -315,9 +318,10 @@ void Overworld_SaveMapObjCoords(u8 localId, s16 x, s16 y)
}
}
-void Overworld_SaveMapObjMovementType(u8 localId, u8 movementType)
+void Overworld_SetMapObjTemplateMovementType(u8 localId, u8 movementType)
{
s32 i;
+
for (i = 0; i < 64; i++)
{
struct MapObjectTemplate *mapObjectTemplate = &gSaveBlock1.mapObjectTemplates[i];
@@ -346,15 +350,15 @@ static struct MapData *get_mapdata_header(void)
return NULL;
}
-static void warp_shift(void)
+static void ApplyCurrentWarp(void)
{
gUnknown_020297F0 = gSaveBlock1.location;
- gSaveBlock1.location = gUnknown_020297F8;
+ gSaveBlock1.location = gWarpDestination;
gUnknown_02029800 = sDummyWarpData;
gUnknown_02029808 = sDummyWarpData;
}
-static void warp_set(struct WarpData *warp, s8 mapGroup, s8 mapNum, s8 warpId, s8 x, s8 y)
+static void SetWarpData(struct WarpData *warp, s8 mapGroup, s8 mapNum, s8 warpId, s8 x, s8 y)
{
warp->mapGroup = mapGroup;
warp->mapNum = mapNum;
@@ -385,7 +389,7 @@ struct MapHeader *const Overworld_GetMapHeaderByGroupAndId(u16 mapGroup, u16 map
struct MapHeader *const warp1_get_mapheader(void)
{
- return Overworld_GetMapHeaderByGroupAndId(gUnknown_020297F8.mapGroup, gUnknown_020297F8.mapNum);
+ return Overworld_GetMapHeaderByGroupAndId(gWarpDestination.mapGroup, gWarpDestination.mapNum);
}
static void set_current_map_header_from_sav1_save_old_name(void)
@@ -422,34 +426,34 @@ void sub_80533CC(void)
void warp_in(void)
{
- warp_shift();
+ ApplyCurrentWarp();
set_current_map_header_from_sav1_save_old_name();
sub_80533CC();
}
-void warp1_set(s8 mapGroup, s8 mapNum, s8 warpId, s8 x, s8 y)
+void Overworld_SetWarpDestination(s8 mapGroup, s8 mapNum, s8 warpId, s8 x, s8 y)
{
- warp_set(&gUnknown_020297F8, mapGroup, mapNum, warpId, x, y);
+ SetWarpData(&gWarpDestination, mapGroup, mapNum, warpId, x, y);
}
void warp1_set_2(s8 mapGroup, s8 mapNum, s8 warpId)
{
- warp1_set(mapGroup, mapNum, warpId, -1, -1);
+ Overworld_SetWarpDestination(mapGroup, mapNum, warpId, -1, -1);
}
void saved_warp2_set(int unused, s8 mapGroup, s8 mapNum, s8 warpId)
{
- warp_set(&gSaveBlock1.warp2, mapGroup, mapNum, warpId, gSaveBlock1.pos.x, gSaveBlock1.pos.y);
+ SetWarpData(&gSaveBlock1.warp2, mapGroup, mapNum, warpId, gSaveBlock1.pos.x, gSaveBlock1.pos.y);
}
void saved_warp2_set_2(int unused, s8 mapGroup, s8 mapNum, s8 warpId, s8 x, s8 y)
{
- warp_set(&gSaveBlock1.warp2, mapGroup, mapNum, warpId, x, y);
+ SetWarpData(&gSaveBlock1.warp2, mapGroup, mapNum, warpId, x, y);
}
void copy_saved_warp2_bank_and_enter_x_to_warp1(u8 unused)
{
- gUnknown_020297F8 = gSaveBlock1.warp2;
+ gWarpDestination = gSaveBlock1.warp2;
}
void sub_8053538(u8 a1)
@@ -457,81 +461,82 @@ void sub_8053538(u8 a1)
const struct HealLocation *warp = GetHealLocation(a1);
if (warp)
- warp1_set(warp->group, warp->map, -1, warp->x, warp->y);
+ Overworld_SetWarpDestination(warp->group, warp->map, -1, warp->x, warp->y);
}
-void sub_8053570(void)
+void Overworld_SetWarpDestToLastHealLoc(void)
{
- gUnknown_020297F8 = gSaveBlock1.warp3;
+ gWarpDestination = gSaveBlock1.lastHealLocation;
}
-void sub_8053588(u8 a1)
+void Overworld_SetHealLocationWarp(u8 healLocationId)
{
- const struct HealLocation *warp = GetHealLocation(a1);
- if (warp)
- warp_set(&gSaveBlock1.warp3, warp->group, warp->map, -1, warp->x, warp->y);
+ const struct HealLocation *healLocation = GetHealLocation(healLocationId);
+
+ if (healLocation != NULL)
+ SetWarpData(&gSaveBlock1.lastHealLocation, healLocation->group, healLocation->map, -1, healLocation->x, healLocation->y);
}
void sub_80535C4(s16 a1, s16 a2)
{
- u8 v4 = Overworld_GetMapTypeOfSaveblockLocation();
- u8 v5 = GetMapTypeByGroupAndId(gUnknown_020297F8.mapGroup, gUnknown_020297F8.mapNum);
- if (is_map_type_1_2_3_5_or_6(v4) && is_map_type_1_2_3_5_or_6(v5) != TRUE)
+ u8 currMapType = Overworld_GetMapTypeOfSaveblockLocation();
+ u8 destMapType = GetMapTypeByGroupAndId(gWarpDestination.mapGroup, gWarpDestination.mapNum);
+ if (is_map_type_1_2_3_5_or_6(currMapType) && is_map_type_1_2_3_5_or_6(destMapType) != TRUE)
sub_805363C(gSaveBlock1.location.mapGroup, gSaveBlock1.location.mapNum, -1, a1 - 7, a2 - 6);
}
void sub_805363C(s8 mapGroup, s8 mapNum, s8 warpId, s8 x, s8 y)
{
- warp_set(&gSaveBlock1.warp4, mapGroup, mapNum, warpId, x, y);
+ SetWarpData(&gSaveBlock1.warp4, mapGroup, mapNum, warpId, x, y);
}
void sub_8053678(void)
{
- gUnknown_020297F8 = gSaveBlock1.warp4;
+ gWarpDestination = gSaveBlock1.warp4;
}
void sub_8053690(s8 mapGroup, s8 mapNum, s8 warpId, s8 x, s8 y)
{
- warp_set(&gUnknown_02029800, mapGroup, mapNum, warpId, x, y);
+ SetWarpData(&gUnknown_02029800, mapGroup, mapNum, warpId, x, y);
}
-void warp1_set_to_warp2(void)
+static void warp1_set_to_warp2(void)
{
- gUnknown_020297F8 = gUnknown_02029800;
+ gWarpDestination = gUnknown_02029800;
}
void sub_80536E4(s8 mapGroup, s8 mapNum, s8 warpId, s8 x, s8 y)
{
- warp_set(&gUnknown_02029808, mapGroup, mapNum, warpId, x, y);
+ SetWarpData(&gUnknown_02029808, mapGroup, mapNum, warpId, x, y);
}
void sub_8053720(s16 x, s16 y)
{
if (warp_data_is_not_neg_1(&gUnknown_02029808) == TRUE)
{
- gUnknown_020297F8 = gUnknown_020297F0;
+ gWarpDestination = gUnknown_020297F0;
}
else
{
- warp1_set(gUnknown_02029808.mapGroup, gUnknown_02029808.mapNum, -1, x, y);
+ Overworld_SetWarpDestination(gUnknown_02029808.mapGroup, gUnknown_02029808.mapNum, -1, x, y);
}
}
void sub_8053778(void)
{
- gUnknown_020297F8 = gSaveBlock1.warp1;
+ gWarpDestination = gSaveBlock1.warp1;
}
void unref_sub_8053790(s8 mapGroup, s8 mapNum, s8 warpId, s8 x, s8 y)
{
- warp_set(&gSaveBlock1.warp1, mapGroup, mapNum, warpId, x, y);
+ SetWarpData(&gSaveBlock1.warp1, mapGroup, mapNum, warpId, x, y);
}
void sub_80537CC(u8 a1)
{
const struct HealLocation *warp = GetHealLocation(a1);
if (warp)
- warp_set(&gSaveBlock1.warp1, warp->group, warp->map, -1, warp->x, warp->y);
+ SetWarpData(&gSaveBlock1.warp1, warp->group, warp->map, -1, warp->x, warp->y);
}
void gpu_sync_bg_hide()
@@ -539,7 +544,7 @@ void gpu_sync_bg_hide()
gSaveBlock1.warp1 = gSaveBlock1.warp2;
}
-struct MapConnection *sub_8053818(u8 dir)
+struct MapConnection *GetMapConnection(u8 dir)
{
s32 i;
s32 count = gMapHeader.connections->count;
@@ -557,10 +562,11 @@ struct MapConnection *sub_8053818(u8 dir)
bool8 sub_8053850(u8 dir, u16 x, u16 y)
{
- struct MapConnection *connection = sub_8053818(dir);
+ struct MapConnection *connection = GetMapConnection(dir);
+
if (connection != NULL)
{
- warp1_set(connection->mapGroup, connection->mapNum, -1, x, y);
+ Overworld_SetWarpDestination(connection->mapGroup, connection->mapNum, -1, x, y);
}
else
{
@@ -586,11 +592,11 @@ void sub_80538F0(u8 mapGroup, u8 mapNum)
{
s32 i;
- warp1_set(mapGroup, mapNum, -1, -1, -1);
+ Overworld_SetWarpDestination(mapGroup, mapNum, -1, -1, -1);
sub_8053F0C();
- warp_shift();
+ ApplyCurrentWarp();
set_current_map_header_from_sav1_save_old_name();
- sub_8053154();
+ LoadMapObjTemplatesFromHeader();
ClearTempFieldEventData();
ResetCyclingRoadChallengeData();
prev_quest_postbuffer_cursor_backup_reset();
@@ -599,7 +605,7 @@ void sub_80538F0(u8 mapGroup, u8 mapNum)
sub_80806E4();
ChooseAmbientCrySpecies();
SetDefaultFlashLevel();
- sav1_reset_battle_music_maybe();
+ Overworld_ClearSavedMusic();
mapheader_run_script_with_tag_x3();
not_trainer_hill_battle_pyramid();
sub_8056D38(gMapHeader.mapData);
@@ -623,7 +629,7 @@ void sub_8053994(u32 a1)
bool8 v3;
set_current_map_header_from_sav1_save_old_name();
- sub_8053154();
+ LoadMapObjTemplatesFromHeader();
v2 = is_map_type_1_2_3_5_or_6(gMapHeader.mapType);
v3 = Overworld_MapTypeIsIndoors(gMapHeader.mapType);
ClearTempFieldEventData();
@@ -637,7 +643,7 @@ void sub_8053994(u32 a1)
if (v2)
FlagClear(SYS_USE_FLASH);
SetDefaultFlashLevel();
- sav1_reset_battle_music_maybe();
+ Overworld_ClearSavedMusic();
mapheader_run_script_with_tag_x3();
UpdateLocationHistoryForRoamer();
RoamerMoveToOtherLocationSet();
@@ -691,7 +697,7 @@ u8 sub_8053B00(struct UnkPlayerStruct *playerStruct, u16 a2, u8 a3)
return 16;
if (MetatileBehavior_IsSurfableWaterOrUnderwater(a2) == 1)
return 8;
- if (Overworld_IsBikeAllowedOnCurrentMap() != TRUE)
+ if (Overworld_IsBikingAllowed() != TRUE)
return 1;
if (playerStruct->player_field_0 == 2)
return 2;
@@ -729,7 +735,7 @@ u16 cur_mapdata_block_role_at_screen_center_acc_to_sav1(void)
return MapGridGetMetatileBehaviorAt(gSaveBlock1.pos.x + 7, gSaveBlock1.pos.y + 7);
}
-bool32 Overworld_IsBikeAllowedOnCurrentMap(void)
+bool32 Overworld_IsBikingAllowed(void)
{
// is player in cycling road entrance?
if (gSaveBlock1.location.mapGroup == MAP_GROUP_ROUTE110_SEASIDE_CYCLING_ROAD_SOUTH_ENTRANCE
@@ -830,10 +836,11 @@ static u16 GetLocationMusic(struct WarpData *warp)
return Overworld_GetMapHeaderByGroupAndId(warp->mapGroup, warp->mapNum)->music;
}
-u16 sav1_map_get_music(void)
+u16 GetCurrLocationDefaultMusic(void)
{
u16 music;
+ // Play the desert music only when the sandstorm is active on Route 111.
if (gSaveBlock1.location.mapGroup == MAP_GROUP_ROUTE111
&& gSaveBlock1.location.mapNum == MAP_ID_ROUTE111
&& GetSav1Weather() == 8)
@@ -853,9 +860,9 @@ u16 sav1_map_get_music(void)
}
}
-u16 warp1_target_get_music(void)
+u16 GetWarpDestinationMusic(void)
{
- u16 music = GetLocationMusic(&gUnknown_020297F8);
+ u16 music = GetLocationMusic(&gWarpDestination);
if (music != 0x7FFF)
{
return music;
@@ -870,19 +877,19 @@ u16 warp1_target_get_music(void)
}
}
-void call_map_music_set_to_zero(void)
+void Overworld_ResetMapMusic(void)
{
ResetMapMusic();
}
-void sub_8053E90(void)
+void Overworld_PlaySpecialMapMusic(void)
{
- u16 music = sav1_map_get_music();
+ u16 music = GetCurrLocationDefaultMusic();
if (music != LEGENDARY_MUSIC)
{
- if (gSaveBlock1.battleMusic)
- music = gSaveBlock1.battleMusic;
+ if (gSaveBlock1.savedMusic)
+ music = gSaveBlock1.savedMusic;
else if (Overworld_GetMapTypeOfSaveblockLocation() == MAP_TYPE_UNDERWATER)
music = BGM_DEEPDEEP;
else if (TestPlayerAvatarFlags(PLAYER_AVATAR_FLAG_SURFING))
@@ -893,21 +900,21 @@ void sub_8053E90(void)
PlayNewMapMusic(music);
}
-void sav1_set_battle_music_maybe(u16 songNum)
+void Overworld_SetSavedMusic(u16 songNum)
{
- gSaveBlock1.battleMusic = songNum;
+ gSaveBlock1.savedMusic = songNum;
}
-void sav1_reset_battle_music_maybe(void)
+void Overworld_ClearSavedMusic(void)
{
- gSaveBlock1.battleMusic = 0;
+ gSaveBlock1.savedMusic = 0;
}
void sub_8053F0C(void)
{
if (FlagGet(SPECIAL_FLAG_1) != TRUE)
{
- u16 newMusic = warp1_target_get_music();
+ u16 newMusic = GetWarpDestinationMusic();
u16 currentMusic = GetCurrentMapMusic();
if (newMusic != LEGENDARY_MUSIC)
{
@@ -926,11 +933,11 @@ void sub_8053F0C(void)
}
}
-void sub_8053F84(void)
+void Overworld_ChangeMusicToDefault(void)
{
u16 currentMusic = GetCurrentMapMusic();
- if (currentMusic != sav1_map_get_music())
- FadeOutAndPlayNewMapMusic(sav1_map_get_music(), 8);
+ if (currentMusic != GetCurrLocationDefaultMusic())
+ FadeOutAndPlayNewMapMusic(GetCurrLocationDefaultMusic(), 8);
}
void Overworld_ChangeMusicTo(u16 newMusic)
@@ -951,7 +958,7 @@ u8 GetMapMusicFadeoutSpeed(void)
void sub_8053FF8(void)
{
- u16 music = warp1_target_get_music();
+ u16 music = GetWarpDestinationMusic();
if (FlagGet(SPECIAL_FLAG_1) != TRUE && music != GetCurrentMapMusic())
{
u8 speed = GetMapMusicFadeoutSpeed();
@@ -964,7 +971,7 @@ bool8 sub_8054034(void)
return IsNotWaitingForBGMStop();
}
-void sub_8054044(void)
+void Overworld_FadeOutMapMusic(void)
{
FadeOutMapMusic(4);
}
@@ -972,14 +979,16 @@ void sub_8054044(void)
static void PlayAmbientCry(void)
{
s16 x, y;
+ s8 pan;
+ s8 volume;
+
PlayerGetDestCoords(&x, &y);
- if (sIsAmbientCryWaterMon != TRUE
- || MetatileBehavior_IsSurfableWaterOrUnderwater(MapGridGetMetatileBehaviorAt(x, y)))
- {
- s8 pan = (Random() % 88) + 212;
- s8 volume = (Random() % 30) + 50;
- PlayCry2(sAmbientCrySpecies, pan, volume, 1);
- }
+ if (sIsAmbientCryWaterMon == TRUE
+ && !MetatileBehavior_IsSurfableWaterOrUnderwater(MapGridGetMetatileBehaviorAt(x, y)))
+ return;
+ pan = (Random() % 88) + 212;
+ volume = (Random() % 30) + 50;
+ PlayCry2(sAmbientCrySpecies, pan, volume, 1);
}
void UpdateAmbientCry(s16 *state, u16 *delayCounter)
@@ -1149,6 +1158,7 @@ void OverworldBasic(void)
sub_8072EDC();
}
+// This CB2 is used when starting
void CB2_OverworldBasic(void)
{
OverworldBasic();
@@ -1176,7 +1186,7 @@ void sub_80543DC(u16 (*a1)(u32))
void sub_80543E8(void)
{
- if (gFieldCallback)
+ if (gFieldCallback != NULL)
gFieldCallback();
else
mapldr_default();
@@ -1977,27 +1987,27 @@ void sub_8055280(u16 a1)
u16 sub_80552B0(u32 a1)
{
- if (gMain.heldKeys & 0x40)
+ if (gMain.heldKeys & DPAD_UP)
{
return 19;
}
- else if (gMain.heldKeys & 0x80)
+ else if (gMain.heldKeys & DPAD_DOWN)
{
return 18;
}
- else if (gMain.heldKeys & 0x20)
+ else if (gMain.heldKeys & DPAD_LEFT)
{
return 20;
}
- else if (gMain.heldKeys & 0x10)
+ else if (gMain.heldKeys & DPAD_RIGHT)
{
return 21;
}
- else if (gMain.newKeys & 8)
+ else if (gMain.newKeys & START_BUTTON)
{
return 24;
}
- else if (gMain.newKeys & 1)
+ else if (gMain.newKeys & A_BUTTON)
{
return 25;
}
diff --git a/src/party_menu.c b/src/field/party_menu.c
index 1ca739ac1..1ca739ac1 100644
--- a/src/party_menu.c
+++ b/src/field/party_menu.c
diff --git a/src/player_pc.c b/src/field/player_pc.c
index 83e6dd221..83e6dd221 100644
--- a/src/player_pc.c
+++ b/src/field/player_pc.c
diff --git a/src/pokeblock.c b/src/field/pokeblock.c
index d69c41639..34f4ffa35 100644
--- a/src/pokeblock.c
+++ b/src/field/pokeblock.c
@@ -1,5 +1,5 @@
//
-// Created by scott on 6/27/2017.
+
//
#include "global.h"
@@ -378,7 +378,7 @@ static bool8 sub_810B998(void)
ewram[0x1ffff]++;
break;
case 1:
- sub_800D238(gMenuPokeblock_Tilemap, gBGTilemapBuffers[2]);
+ LZDecompressWram(gMenuPokeblock_Tilemap, gBGTilemapBuffers[2]);
ewram[0x1ffff]++;
break;
case 2:
diff --git a/src/pokenav.c b/src/field/pokenav.c
index 84ed7b14b..21d7bb4e3 100644
--- a/src/pokenav.c
+++ b/src/field/pokenav.c
@@ -38,3 +38,5 @@ void sub_80F700C(u8 *arg0, u16 arg1) {
ptr[2] = 0x80;
ptr[3] = 0xFF;
}
+
+IWRAM_DATA MainCallback gUnknown_03000744;
diff --git a/src/region_map.c b/src/field/region_map.c
index 900c9ad71..bfd2729c2 100644
--- a/src/region_map.c
+++ b/src/field/region_map.c
@@ -140,12 +140,12 @@ static const u16 sRegionMapBkgnd_Pal[] = INCBIN_U16("graphics/pokenav/region_map
static const u8 sRegionMapBkgnd_ImageLZ[] = INCBIN_U8("graphics/pokenav/region_map.8bpp.lz");
static const u8 sRegionMapBkgnd_TilemapLZ[] = INCBIN_U8("graphics/pokenav/region_map_map.bin.lz");
-#include "data/region_map_layout.h"
+#include "../data/region_map_layout.h"
#if ENGLISH
-#include "data/region_map_names_en.h"
+#include "../data/region_map_names_en.h"
#elif GERMAN
-#include "data/region_map_names_de.h"
+#include "../data/region_map_names_de.h"
#endif
struct RegionMapLocation
diff --git a/src/roamer.c b/src/field/roamer.c
index 948828d5e..948828d5e 100644
--- a/src/roamer.c
+++ b/src/field/roamer.c
diff --git a/src/rotating_gate.c b/src/field/rotating_gate.c
index e8ab7e1bf..e8ab7e1bf 100644
--- a/src/rotating_gate.c
+++ b/src/field/rotating_gate.c
diff --git a/src/safari_zone.c b/src/field/safari_zone.c
index 14fd1ddc4..14fd1ddc4 100644
--- a/src/safari_zone.c
+++ b/src/field/safari_zone.c
diff --git a/src/scrcmd.c b/src/field/scrcmd.c
index 31a90158a..28584d4d0 100644
--- a/src/scrcmd.c
+++ b/src/field/scrcmd.c
@@ -91,12 +91,12 @@ static u8 * const sScriptStringVars[] =
gStringVar3,
};
-bool8 ScrCmd_snop(struct ScriptContext *ctx)
+bool8 ScrCmd_nop(struct ScriptContext *ctx)
{
return FALSE;
}
-bool8 ScrCmd_snop1(struct ScriptContext *ctx)
+bool8 ScrCmd_nop1(struct ScriptContext *ctx)
{
return FALSE;
}
@@ -107,9 +107,10 @@ bool8 ScrCmd_end(struct ScriptContext *ctx)
return FALSE;
}
-bool8 ScrCmd_jumpasm(struct ScriptContext *ctx)
+bool8 ScrCmd_gotonative(struct ScriptContext *ctx)
{
bool8 (*addr)(void) = (bool8 (*)(void))ScriptReadWord(ctx);
+
SetupNativeScript(ctx, addr);
return TRUE;
}
@@ -117,20 +118,23 @@ bool8 ScrCmd_jumpasm(struct ScriptContext *ctx)
bool8 ScrCmd_special(struct ScriptContext *ctx)
{
u16 index = ScriptReadHalfword(ctx);
+
gSpecials[index]();
return FALSE;
}
-bool8 ScrCmd_specialval(struct ScriptContext *ctx)
+bool8 ScrCmd_specialvar(struct ScriptContext *ctx)
{
u16 *var = GetVarPointer(ScriptReadHalfword(ctx));
+
*var = gSpecials[ScriptReadHalfword(ctx)]();
return FALSE;
}
-bool8 ScrCmd_callasm(struct ScriptContext *ctx)
+bool8 ScrCmd_callnative(struct ScriptContext *ctx)
{
NativeFunc func = (NativeFunc)ScriptReadWord(ctx);
+
func();
return FALSE;
}
@@ -141,9 +145,10 @@ bool8 ScrCmd_waitstate(struct ScriptContext *ctx)
return TRUE;
}
-bool8 ScrCmd_jump(struct ScriptContext *ctx)
+bool8 ScrCmd_goto(struct ScriptContext *ctx)
{
u8 *ptr = (u8 *)ScriptReadWord(ctx);
+
ScriptJump(ctx, ptr);
return FALSE;
}
@@ -156,25 +161,27 @@ bool8 ScrCmd_return(struct ScriptContext *ctx)
bool8 ScrCmd_call(struct ScriptContext *ctx)
{
-
u8 *ptr = (u8 *)ScriptReadWord(ctx);
+
ScriptCall(ctx, ptr);
return FALSE;
}
-bool8 ScrCmd_jumpif(struct ScriptContext *ctx)
+bool8 ScrCmd_goto_if(struct ScriptContext *ctx)
{
u8 condition = ScriptReadByte(ctx);
u8 *ptr = (u8 *)ScriptReadWord(ctx);
+
if (sScriptConditionTable[condition][ctx->comparisonResult] == 1)
ScriptJump(ctx, ptr);
return FALSE;
}
-bool8 ScrCmd_callif(struct ScriptContext *ctx)
+bool8 ScrCmd_call_if(struct ScriptContext *ctx)
{
u8 condition = ScriptReadByte(ctx);
u8 *ptr = (u8 *)ScriptReadWord(ctx);
+
if (sScriptConditionTable[condition][ctx->comparisonResult] == 1)
ScriptCall(ctx, ptr);
return FALSE;
@@ -184,13 +191,15 @@ bool8 ScrCmd_setvaddress(struct ScriptContext *ctx)
{
u32 addr1 = (u32)ctx->scriptPtr - 1;
u32 addr2 = ScriptReadWord(ctx);
+
gUnknown_0202E8B0 = addr2 - addr1;
return FALSE;
}
-bool8 ScrCmd_vjump(struct ScriptContext *ctx)
+bool8 ScrCmd_vgoto(struct ScriptContext *ctx)
{
u32 addr = ScriptReadWord(ctx);
+
ScriptJump(ctx, (u8 *)(addr - gUnknown_0202E8B0));
return FALSE;
}
@@ -198,32 +207,36 @@ bool8 ScrCmd_vjump(struct ScriptContext *ctx)
bool8 ScrCmd_vcall(struct ScriptContext *ctx)
{
u32 addr = ScriptReadWord(ctx);
+
ScriptCall(ctx, (u8 *)(addr - gUnknown_0202E8B0));
return FALSE;
}
-bool8 ScrCmd_if5(struct ScriptContext *ctx)
+bool8 ScrCmd_vgoto_if(struct ScriptContext *ctx)
{
u8 condition = ScriptReadByte(ctx);
u8 *ptr = (u8 *)(ScriptReadWord(ctx) - gUnknown_0202E8B0);
+
if (sScriptConditionTable[condition][ctx->comparisonResult] == 1)
ScriptJump(ctx, ptr);
return FALSE;
}
-bool8 ScrCmd_if6(struct ScriptContext *ctx)
+bool8 ScrCmd_vcall_if(struct ScriptContext *ctx)
{
u8 condition = ScriptReadByte(ctx);
u8 *ptr = (u8 *)(ScriptReadWord(ctx) - gUnknown_0202E8B0);
+
if (sScriptConditionTable[condition][ctx->comparisonResult] == 1)
ScriptCall(ctx, ptr);
return FALSE;
}
-bool8 ScrCmd_jumpstd(struct ScriptContext *ctx)
+bool8 ScrCmd_gotostd(struct ScriptContext *ctx)
{
u8 index = ScriptReadByte(ctx);
u8 **ptr = &gStdScripts[index];
+
if (ptr < gStdScripts_End)
ScriptJump(ctx, *ptr);
return FALSE;
@@ -233,15 +246,17 @@ bool8 ScrCmd_callstd(struct ScriptContext *ctx)
{
u8 index = ScriptReadByte(ctx);
u8 **ptr = &gStdScripts[index];
+
if (ptr < gStdScripts_End)
ScriptCall(ctx, *ptr);
return FALSE;
}
-bool8 ScrCmd_jumpstdif(struct ScriptContext *ctx)
+bool8 ScrCmd_gotostd_if(struct ScriptContext *ctx)
{
u8 condition = ScriptReadByte(ctx);
u8 index = ScriptReadByte(ctx);
+
if (sScriptConditionTable[condition][ctx->comparisonResult] == 1)
{
u8 **ptr = &gStdScripts[index];
@@ -251,10 +266,11 @@ bool8 ScrCmd_jumpstdif(struct ScriptContext *ctx)
return FALSE;
}
-bool8 ScrCmd_callstdif(struct ScriptContext *ctx)
+bool8 ScrCmd_callstd_if(struct ScriptContext *ctx)
{
u8 condition = ScriptReadByte(ctx);
u8 index = ScriptReadByte(ctx);
+
if (sScriptConditionTable[condition][ctx->comparisonResult] == 1)
{
u8 **ptr = &gStdScripts[index];
@@ -264,50 +280,55 @@ bool8 ScrCmd_callstdif(struct ScriptContext *ctx)
return FALSE;
}
-bool8 ScrCmd_jumpram(struct ScriptContext *ctx)
+bool8 ScrCmd_gotoram(struct ScriptContext *ctx)
{
ScriptJump(ctx, (u8 *)gUnknown_0202E8AC);
return FALSE;
}
-bool8 ScrCmd_die(struct ScriptContext *ctx)
+bool8 ScrCmd_killscript(struct ScriptContext *ctx)
{
ClearRamScript();
StopScript(ctx);
return TRUE;
}
-bool8 ScrCmd_setbyte(struct ScriptContext *ctx)
+bool8 ScrCmd_setmysteryeventstatus(struct ScriptContext *ctx)
{
u8 value = ScriptReadByte(ctx);
+
SetMysteryEventScriptStatus(value);
return FALSE;
}
-bool8 ScrCmd_loadptr(struct ScriptContext *ctx)
+bool8 ScrCmd_loadword(struct ScriptContext *ctx)
{
u8 index = ScriptReadByte(ctx);
+
ctx->data[index] = ScriptReadWord(ctx);
return FALSE;
}
-bool8 ScrCmd_loadbytefrompointer(struct ScriptContext *ctx)
+bool8 ScrCmd_loadbytefromaddr(struct ScriptContext *ctx)
{
u8 index = ScriptReadByte(ctx);
+
ctx->data[index] = *(u8 *)ScriptReadWord(ctx);
return FALSE;
}
-bool8 ScrCmd_writebytetooffset(struct ScriptContext *ctx)
+bool8 ScrCmd_writebytetoaddr(struct ScriptContext *ctx)
{
u8 value = ScriptReadByte(ctx);
+
*(u8 *)ScriptReadWord(ctx) = value;
return FALSE;
}
-bool8 ScrCmd_setbufferbyte(struct ScriptContext *ctx)
+bool8 ScrCmd_loadbyte(struct ScriptContext *ctx)
{
u8 index = ScriptReadByte(ctx);
+
ctx->data[index] = ScriptReadByte(ctx);
return FALSE;
}
@@ -315,14 +336,16 @@ bool8 ScrCmd_setbufferbyte(struct ScriptContext *ctx)
bool8 ScrCmd_setptrbyte(struct ScriptContext *ctx)
{
u8 index = ScriptReadByte(ctx);
+
*(u8 *)ScriptReadWord(ctx) = ctx->data[index];
return FALSE;
}
-bool8 ScrCmd_copybuffers(struct ScriptContext *ctx)
+bool8 ScrCmd_copylocal(struct ScriptContext *ctx)
{
u8 destIndex = ScriptReadByte(ctx);
u8 srcIndex = ScriptReadByte(ctx);
+
ctx->data[destIndex] = ctx->data[srcIndex];
return FALSE;
}
@@ -359,73 +382,81 @@ u8 compare_012(u16 a1, u16 a2)
{
if (a1 < a2)
return 0;
-
if (a1 == a2)
return 1;
-
return 2;
}
-bool8 ScrCmd_comparebuffers(struct ScriptContext *ctx)
+// comparelocaltolocal
+bool8 ScrCmd_compare_local_to_local(struct ScriptContext *ctx)
{
u8 value1 = ctx->data[ScriptReadByte(ctx)];
u8 value2 = ctx->data[ScriptReadByte(ctx)];
+
ctx->comparisonResult = compare_012(value1, value2);
return FALSE;
}
-bool8 ScrCmd_comparebuffertobyte(struct ScriptContext *ctx)
+// comparelocaltoimm
+bool8 ScrCmd_compare_local_to_value(struct ScriptContext *ctx)
{
u8 value1 = ctx->data[ScriptReadByte(ctx)];
u8 value2 = ScriptReadByte(ctx);
+
ctx->comparisonResult = compare_012(value1, value2);
return FALSE;
}
-bool8 ScrCmd_comparebuffertoptrbyte(struct ScriptContext *ctx)
+bool8 ScrCmd_compare_local_to_addr(struct ScriptContext *ctx)
{
u8 value1 = ctx->data[ScriptReadByte(ctx)];
u8 value2 = *(u8 *)ScriptReadWord(ctx);
+
ctx->comparisonResult = compare_012(value1, value2);
return FALSE;
}
-bool8 ScrCmd_compareptrbytetobuffer(struct ScriptContext *ctx)
+bool8 ScrCmd_compare_addr_to_local(struct ScriptContext *ctx)
{
u8 value1 = *(u8 *)ScriptReadWord(ctx);
u8 value2 = ctx->data[ScriptReadByte(ctx)];
+
ctx->comparisonResult = compare_012(value1, value2);
return FALSE;
}
-bool8 ScrCmd_compareptrbytetobyte(struct ScriptContext *ctx)
+bool8 ScrCmd_compare_addr_to_value(struct ScriptContext *ctx)
{
u8 value1 = *(u8 *)ScriptReadWord(ctx);
u8 value2 = ScriptReadByte(ctx);
+
ctx->comparisonResult = compare_012(value1, value2);
return FALSE;
}
-bool8 ScrCmd_compareptrbytes(struct ScriptContext *ctx)
+bool8 ScrCmd_compare_addr_to_addr(struct ScriptContext *ctx)
{
u8 value1 = *(u8 *)ScriptReadWord(ctx);
u8 value2 = *(u8 *)ScriptReadWord(ctx);
+
ctx->comparisonResult = compare_012(value1, value2);
return FALSE;
}
-bool8 ScrCmd_compare(struct ScriptContext *ctx)
+bool8 ScrCmd_compare_var_to_value(struct ScriptContext *ctx)
{
u16 value1 = *GetVarPointer(ScriptReadHalfword(ctx));
u16 value2 = ScriptReadHalfword(ctx);
+
ctx->comparisonResult = compare_012(value1, value2);
return FALSE;
}
-bool8 ScrCmd_comparevars(struct ScriptContext *ctx)
+bool8 ScrCmd_compare_var_to_var(struct ScriptContext *ctx)
{
u16 *ptr1 = GetVarPointer(ScriptReadHalfword(ctx));
u16 *ptr2 = GetVarPointer(ScriptReadHalfword(ctx));
+
ctx->comparisonResult = compare_012(*ptr1, *ptr2);
return FALSE;
}
@@ -447,6 +478,7 @@ bool8 ScrCmd_subvar(struct ScriptContext *ctx)
bool8 ScrCmd_random(struct ScriptContext *ctx)
{
u16 max = VarGet(ScriptReadHalfword(ctx));
+
gScriptResult = Random() % max;
return FALSE;
}
@@ -455,6 +487,7 @@ bool8 ScrCmd_additem(struct ScriptContext *ctx)
{
u16 itemId = VarGet(ScriptReadHalfword(ctx));
u32 quantity = VarGet(ScriptReadHalfword(ctx));
+
gScriptResult = AddBagItem(itemId, (u8)quantity);
return FALSE;
}
@@ -463,6 +496,7 @@ bool8 ScrCmd_removeitem(struct ScriptContext *ctx)
{
u16 itemId = VarGet(ScriptReadHalfword(ctx));
u32 quantity = VarGet(ScriptReadHalfword(ctx));
+
gScriptResult = RemoveBagItem(itemId, (u8)quantity);
return FALSE;
}
@@ -471,6 +505,7 @@ bool8 ScrCmd_checkitemspace(struct ScriptContext *ctx)
{
u16 itemId = VarGet(ScriptReadHalfword(ctx));
u32 quantity = VarGet(ScriptReadHalfword(ctx));
+
gScriptResult = CheckBagHasSpace(itemId, (u8)quantity);
return FALSE;
}
@@ -479,6 +514,7 @@ bool8 ScrCmd_checkitem(struct ScriptContext *ctx)
{
u16 itemId = VarGet(ScriptReadHalfword(ctx));
u32 quantity = VarGet(ScriptReadHalfword(ctx));
+
gScriptResult = CheckBagHasItem(itemId, (u8)quantity);
return FALSE;
}
@@ -486,6 +522,7 @@ bool8 ScrCmd_checkitem(struct ScriptContext *ctx)
bool8 ScrCmd_checkitemtype(struct ScriptContext *ctx)
{
u16 itemId = VarGet(ScriptReadHalfword(ctx));
+
gScriptResult = GetPocketByItemId(itemId);
return FALSE;
}
@@ -494,6 +531,7 @@ bool8 ScrCmd_addpcitem(struct ScriptContext *ctx)
{
u16 itemId = VarGet(ScriptReadHalfword(ctx));
u16 quantity = VarGet(ScriptReadHalfword(ctx));
+
gScriptResult = AddPCItem(itemId, quantity);
return FALSE;
}
@@ -502,6 +540,7 @@ bool8 ScrCmd_checkpcitem(struct ScriptContext *ctx)
{
u16 itemId = VarGet(ScriptReadHalfword(ctx));
u16 quantity = VarGet(ScriptReadHalfword(ctx));
+
gScriptResult = CheckPCHasItem(itemId, quantity);
return FALSE;
}
@@ -509,6 +548,7 @@ bool8 ScrCmd_checkpcitem(struct ScriptContext *ctx)
bool8 ScrCmd_adddecor(struct ScriptContext *ctx)
{
u32 decorId = VarGet(ScriptReadHalfword(ctx));
+
gScriptResult = IsThereStorageSpaceForDecoration(decorId);
return FALSE;
}
@@ -516,6 +556,7 @@ bool8 ScrCmd_adddecor(struct ScriptContext *ctx)
bool8 ScrCmd_removedecor(struct ScriptContext *ctx)
{
u32 decorId = VarGet(ScriptReadHalfword(ctx));
+
gScriptResult = sub_81340A8(decorId);
return FALSE;
}
@@ -523,13 +564,15 @@ bool8 ScrCmd_removedecor(struct ScriptContext *ctx)
bool8 ScrCmd_checkdecor(struct ScriptContext *ctx)
{
u32 decorId = VarGet(ScriptReadHalfword(ctx));
+
gScriptResult = sub_8134074(decorId);
return FALSE;
}
-bool8 ScrCmd_testdecor(struct ScriptContext *ctx)
+bool8 ScrCmd_hasdecor(struct ScriptContext *ctx)
{
u32 decorId = VarGet(ScriptReadHalfword(ctx));
+
gScriptResult = sub_8133FE4(decorId);
return FALSE;
}
@@ -552,22 +595,23 @@ bool8 ScrCmd_checkflag(struct ScriptContext *ctx)
return FALSE;
}
-bool8 ScrCmd_inccounter(struct ScriptContext *ctx)
+bool8 ScrCmd_incrementgamestat(struct ScriptContext *ctx)
{
IncrementGameStat(ScriptReadByte(ctx));
return FALSE;
}
-bool8 ScrCmd_lighten(struct ScriptContext *ctx)
+bool8 ScrCmd_animdarklevel(struct ScriptContext *ctx)
{
sub_8081594(ScriptReadByte(ctx));
ScriptContext1_Stop();
return TRUE;
}
-bool8 ScrCmd_darken(struct ScriptContext *ctx)
+bool8 ScrCmd_setdarklevel(struct ScriptContext *ctx)
{
u16 flashLevel = VarGet(ScriptReadHalfword(ctx));
+
Overworld_SetFlashLevel(flashLevel);
return FALSE;
}
@@ -591,6 +635,7 @@ bool8 ScrCmd_fadescreendelay(struct ScriptContext *ctx)
{
u8 duration = ScriptReadByte(ctx);
u8 delay = ScriptReadByte(ctx);
+
fade_screen(duration, delay);
SetupNativeScript(ctx, IsPaletteNotActive);
return TRUE;
@@ -606,28 +651,29 @@ bool8 s28_pause_asm()
return FALSE;
}
-bool8 ScrCmd_pause(struct ScriptContext *ctx)
+bool8 ScrCmd_delay(struct ScriptContext *ctx)
{
sPauseCounter = ScriptReadHalfword(ctx);
SetupNativeScript(ctx, s28_pause_asm);
return TRUE;
}
-bool8 ScrCmd_compareflags(struct ScriptContext *ctx)
+bool8 ScrCmd_initclock(struct ScriptContext *ctx)
{
u8 hour = VarGet(ScriptReadHalfword(ctx));
u8 minute = VarGet(ScriptReadHalfword(ctx));
+
RtcInitLocalTimeOffset(hour, minute);
return FALSE;
}
-bool8 ScrCmd_checkdailyflags(struct ScriptContext *ctx)
+bool8 ScrCmd_dodailyevents(struct ScriptContext *ctx)
{
DoTimeBasedEvents();
return FALSE;
}
-bool8 ScrCmd_resetvars(struct ScriptContext *ctx)
+bool8 ScrCmd_gettime(struct ScriptContext *ctx)
{
RtcCalcLocalTime();
gSpecialVar_0x8000 = gLocalTime.hours;
@@ -638,8 +684,9 @@ bool8 ScrCmd_resetvars(struct ScriptContext *ctx)
bool8 ScrCmd_setweather(struct ScriptContext *ctx)
{
- u16 value = VarGet(ScriptReadHalfword(ctx));
- SetSav1Weather(value);
+ u16 weather = VarGet(ScriptReadHalfword(ctx));
+
+ SetSav1Weather(weather);
return FALSE;
}
@@ -661,47 +708,51 @@ bool8 ScrCmd_tileeffect(struct ScriptContext *ctx)
return FALSE;
}
-bool8 ScrCmd_setmapfooter(struct ScriptContext *ctx)
+bool8 ScrCmd_setmaplayoutindex(struct ScriptContext *ctx)
{
u16 value = VarGet(ScriptReadHalfword(ctx));
+
sub_8053D14(value);
return FALSE;
}
bool8 ScrCmd_warp(struct ScriptContext *ctx)
{
- u8 v1 = ScriptReadByte(ctx);
- u8 v2 = ScriptReadByte(ctx);
- u8 v3 = ScriptReadByte(ctx);
- u16 v4 = VarGet(ScriptReadHalfword(ctx));
- s8 v5 = VarGet(ScriptReadHalfword(ctx));
- warp1_set(v1, v2, v3, v4, v5);
+ u8 mapGroup = ScriptReadByte(ctx);
+ u8 mapNum = ScriptReadByte(ctx);
+ u8 warpId = ScriptReadByte(ctx);
+ u16 x = VarGet(ScriptReadHalfword(ctx));
+ u16 y = VarGet(ScriptReadHalfword(ctx));
+
+ Overworld_SetWarpDestination(mapGroup, mapNum, warpId, x, y);
sub_8080E88();
player_avatar_init_params_reset();
return TRUE;
}
-bool8 ScrCmd_warpmuted(struct ScriptContext *ctx)
+bool8 ScrCmd_warpsilent(struct ScriptContext *ctx)
{
- u8 v1 = ScriptReadByte(ctx);
- u8 v2 = ScriptReadByte(ctx);
- u8 v3 = ScriptReadByte(ctx);
- u16 v4 = VarGet(ScriptReadHalfword(ctx));
- s8 v5 = VarGet(ScriptReadHalfword(ctx));
- warp1_set(v1, v2, v3, v4, v5);
+ u8 mapGroup = ScriptReadByte(ctx);
+ u8 mapNum = ScriptReadByte(ctx);
+ u8 warpId = ScriptReadByte(ctx);
+ u16 x = VarGet(ScriptReadHalfword(ctx));
+ u16 y = VarGet(ScriptReadHalfword(ctx));
+
+ Overworld_SetWarpDestination(mapGroup, mapNum, warpId, x, y);
sp13E_warp_to_last_warp();
player_avatar_init_params_reset();
return TRUE;
}
-bool8 ScrCmd_warpwalk(struct ScriptContext *ctx)
+bool8 ScrCmd_warpdoor(struct ScriptContext *ctx)
{
- u8 v1 = ScriptReadByte(ctx);
- u8 v2 = ScriptReadByte(ctx);
- u8 v3 = ScriptReadByte(ctx);
- u16 v4 = VarGet(ScriptReadHalfword(ctx));
- s8 v5 = VarGet(ScriptReadHalfword(ctx));
- warp1_set(v1, v2, v3, v4, v5);
+ u8 mapGroup = ScriptReadByte(ctx);
+ u8 mapNum = ScriptReadByte(ctx);
+ u8 warpId = ScriptReadByte(ctx);
+ u16 x = VarGet(ScriptReadHalfword(ctx));
+ u16 y = VarGet(ScriptReadHalfword(ctx));
+
+ Overworld_SetWarpDestination(mapGroup, mapNum, warpId, x, y);
sub_8080EF0();
player_avatar_init_params_reset();
return TRUE;
@@ -709,18 +760,16 @@ bool8 ScrCmd_warpwalk(struct ScriptContext *ctx)
bool8 ScrCmd_warphole(struct ScriptContext *ctx)
{
- u8 v1 = ScriptReadByte(ctx);
- u8 v2 = ScriptReadByte(ctx);
+ u8 mapGroup = ScriptReadByte(ctx);
+ u8 mapNum = ScriptReadByte(ctx);
u16 x;
u16 y;
PlayerGetDestCoords(&x, &y);
-
- if (v1 == 0xFF && v2 == 0xFF)
+ if (mapGroup == 0xFF && mapNum == 0xFF)
sub_8053720(x - 7, y - 7);
else
- warp1_set(v1, v2, -1, x - 7, y - 7);
-
+ Overworld_SetWarpDestination(mapGroup, mapNum, -1, x - 7, y - 7);
sp13F_fall_to_last_warp();
player_avatar_init_params_reset();
return TRUE;
@@ -728,78 +777,85 @@ bool8 ScrCmd_warphole(struct ScriptContext *ctx)
bool8 ScrCmd_warpteleport(struct ScriptContext *ctx)
{
- u8 v1 = ScriptReadByte(ctx);
- u8 v2 = ScriptReadByte(ctx);
- u8 v3 = ScriptReadByte(ctx);
- u16 v4 = VarGet(ScriptReadHalfword(ctx));
- s8 v5 = VarGet(ScriptReadHalfword(ctx));
- warp1_set(v1, v2, v3, v4, v5);
+ u8 mapGroup = ScriptReadByte(ctx);
+ u8 mapNum = ScriptReadByte(ctx);
+ u8 warpId = ScriptReadByte(ctx);
+ u16 x = VarGet(ScriptReadHalfword(ctx));
+ u16 y = VarGet(ScriptReadHalfword(ctx));
+
+ Overworld_SetWarpDestination(mapGroup, mapNum, warpId, x, y);
sub_8080F68();
player_avatar_init_params_reset();
return TRUE;
}
-bool8 ScrCmd_warp3(struct ScriptContext *ctx)
+bool8 ScrCmd_setwarp(struct ScriptContext *ctx)
{
- u8 v1 = ScriptReadByte(ctx);
- u8 v2 = ScriptReadByte(ctx);
- u8 v3 = ScriptReadByte(ctx);
- u16 v4 = VarGet(ScriptReadHalfword(ctx));
- s8 v5 = VarGet(ScriptReadHalfword(ctx));
- warp1_set(v1, v2, v3, v4, v5);
+ u8 mapGroup = ScriptReadByte(ctx);
+ u8 mapNum = ScriptReadByte(ctx);
+ u8 warpId = ScriptReadByte(ctx);
+ u16 x = VarGet(ScriptReadHalfword(ctx));
+ u16 y = VarGet(ScriptReadHalfword(ctx));
+
+ Overworld_SetWarpDestination(mapGroup, mapNum, warpId, x, y);
return FALSE;
}
-bool8 ScrCmd_warpplace(struct ScriptContext *ctx)
+bool8 ScrCmd_setdynamicwarp(struct ScriptContext *ctx)
{
- u8 v1 = ScriptReadByte(ctx);
- u8 v2 = ScriptReadByte(ctx);
- u8 v3 = ScriptReadByte(ctx);
- u16 v4 = VarGet(ScriptReadHalfword(ctx));
- s8 v5 = VarGet(ScriptReadHalfword(ctx));
- saved_warp2_set_2(0, v1, v2, v3, v4, v5);
+ u8 mapGroup = ScriptReadByte(ctx);
+ u8 mapNum = ScriptReadByte(ctx);
+ u8 warpId = ScriptReadByte(ctx);
+ u16 x = VarGet(ScriptReadHalfword(ctx));
+ u16 y = VarGet(ScriptReadHalfword(ctx));
+
+ saved_warp2_set_2(0, mapGroup, mapNum, warpId, x, y);
return FALSE;
}
-bool8 ScrCmd_warp4(struct ScriptContext *ctx)
+bool8 ScrCmd_setdivewarp(struct ScriptContext *ctx)
{
- u8 v1 = ScriptReadByte(ctx);
- u8 v2 = ScriptReadByte(ctx);
- u8 v3 = ScriptReadByte(ctx);
- u16 v4 = VarGet(ScriptReadHalfword(ctx));
- s8 v5 = VarGet(ScriptReadHalfword(ctx));
- sub_8053690(v1, v2, v3, v4, v5);
+ u8 mapGroup = ScriptReadByte(ctx);
+ u8 mapNum = ScriptReadByte(ctx);
+ u8 warpId = ScriptReadByte(ctx);
+ u16 x = VarGet(ScriptReadHalfword(ctx));
+ u16 y = VarGet(ScriptReadHalfword(ctx));
+
+ sub_8053690(mapGroup, mapNum, warpId, x, y);
return FALSE;
}
-bool8 ScrCmd_warp5(struct ScriptContext *ctx)
+bool8 ScrCmd_setholewarp(struct ScriptContext *ctx)
{
- u8 v1 = ScriptReadByte(ctx);
- u8 v2 = ScriptReadByte(ctx);
- u8 v3 = ScriptReadByte(ctx);
- u16 v4 = VarGet(ScriptReadHalfword(ctx));
- s8 v5 = VarGet(ScriptReadHalfword(ctx));
- sub_80536E4(v1, v2, v3, v4, v5);
+ u8 mapGroup = ScriptReadByte(ctx);
+ u8 mapNum = ScriptReadByte(ctx);
+ u8 warpId = ScriptReadByte(ctx);
+ u16 x = VarGet(ScriptReadHalfword(ctx));
+ u16 y = VarGet(ScriptReadHalfword(ctx));
+
+ sub_80536E4(mapGroup, mapNum, warpId, x, y);
return FALSE;
}
-bool8 ScrCmd_warp6(struct ScriptContext *ctx)
+bool8 ScrCmd_setescapewarp(struct ScriptContext *ctx)
{
- u8 v1 = ScriptReadByte(ctx);
- u8 v2 = ScriptReadByte(ctx);
- u8 v3 = ScriptReadByte(ctx);
- u16 v4 = VarGet(ScriptReadHalfword(ctx));
- s8 v5 = VarGet(ScriptReadHalfword(ctx));
- sub_805363C(v1, v2, v3, v4, v5);
+ u8 mapGroup = ScriptReadByte(ctx);
+ u8 mapNum = ScriptReadByte(ctx);
+ u8 warpId = ScriptReadByte(ctx);
+ u16 x = VarGet(ScriptReadHalfword(ctx));
+ u16 y = VarGet(ScriptReadHalfword(ctx));
+
+ sub_805363C(mapGroup, mapNum, warpId, x, y);
return FALSE;
}
bool8 ScrCmd_getplayerxy(struct ScriptContext *ctx)
{
- u16 *ptr1 = GetVarPointer(ScriptReadHalfword(ctx));
- u16 *ptr2 = GetVarPointer(ScriptReadHalfword(ctx));
- *ptr1 = gSaveBlock1.pos.x;
- *ptr2 = gSaveBlock1.pos.y;
+ u16 *pX = GetVarPointer(ScriptReadHalfword(ctx));
+ u16 *pY = GetVarPointer(ScriptReadHalfword(ctx));
+
+ *pX = gSaveBlock1.pos.x;
+ *pY = gSaveBlock1.pos.y;
return FALSE;
}
@@ -809,7 +865,7 @@ bool8 ScrCmd_countpokemon(struct ScriptContext *ctx)
return FALSE;
}
-bool8 ScrCmd_playsfx(struct ScriptContext *ctx)
+bool8 ScrCmd_playse(struct ScriptContext *ctx)
{
PlaySE(ScriptReadHalfword(ctx));
return FALSE;
@@ -823,13 +879,13 @@ static bool8 WaitForSoundEffectFinish()
return FALSE;
}
-bool8 ScrCmd_checksound(struct ScriptContext *ctx)
+bool8 ScrCmd_waitse(struct ScriptContext *ctx)
{
SetupNativeScript(ctx, WaitForSoundEffectFinish);
return TRUE;
}
-bool8 ScrCmd_fanfare(struct ScriptContext *ctx)
+bool8 ScrCmd_playfanfare(struct ScriptContext *ctx)
{
PlayFanfare(ScriptReadHalfword(ctx));
return FALSE;
@@ -846,37 +902,39 @@ bool8 ScrCmd_waitfanfare(struct ScriptContext *ctx)
return TRUE;
}
-bool8 ScrCmd_playmusic(struct ScriptContext *ctx)
+bool8 ScrCmd_playbgm(struct ScriptContext *ctx)
{
u16 songId = ScriptReadHalfword(ctx);
bool8 val = ScriptReadByte(ctx);
+
if (val == TRUE)
- sav1_set_battle_music_maybe(songId);
+ Overworld_SetSavedMusic(songId);
PlayNewMapMusic(songId);
return FALSE;
}
-bool8 ScrCmd_playmusicbattle(struct ScriptContext *ctx)
+bool8 ScrCmd_savebgm(struct ScriptContext *ctx)
{
- sav1_set_battle_music_maybe(ScriptReadHalfword(ctx));
+ Overworld_SetSavedMusic(ScriptReadHalfword(ctx));
return FALSE;
}
-bool8 ScrCmd_fadedefault(struct ScriptContext *ctx)
+bool8 ScrCmd_fadedefaultbgm(struct ScriptContext *ctx)
{
- sub_8053F84();
+ Overworld_ChangeMusicToDefault();
return FALSE;
}
-bool8 ScrCmd_fademusic(struct ScriptContext *ctx)
+bool8 ScrCmd_fadenewbgm(struct ScriptContext *ctx)
{
Overworld_ChangeMusicTo(ScriptReadHalfword(ctx));
return FALSE;
}
-bool8 ScrCmd_fadeout(struct ScriptContext *ctx)
+bool8 ScrCmd_fadeoutbgm(struct ScriptContext *ctx)
{
u8 speed = ScriptReadByte(ctx);
+
if (speed != 0)
FadeOutBGMTemporarily(4 * speed);
else
@@ -885,9 +943,10 @@ bool8 ScrCmd_fadeout(struct ScriptContext *ctx)
return TRUE;
}
-bool8 ScrCmd_fadein(struct ScriptContext *ctx)
+bool8 ScrCmd_fadeinbgm(struct ScriptContext *ctx)
{
u8 speed = ScriptReadByte(ctx);
+
if (speed != 0)
FadeInBGM(4 * speed);
else
@@ -895,7 +954,7 @@ bool8 ScrCmd_fadein(struct ScriptContext *ctx)
return FALSE;
}
-bool8 ScrCmd_move(struct ScriptContext *ctx)
+bool8 ScrCmd_applymovement(struct ScriptContext *ctx)
{
u16 localId = VarGet(ScriptReadHalfword(ctx));
void *movementScript = (void *)ScriptReadWord(ctx);
@@ -905,7 +964,7 @@ bool8 ScrCmd_move(struct ScriptContext *ctx)
return FALSE;
}
-bool8 ScrCmd_movecoords(struct ScriptContext *ctx)
+bool8 ScrCmd_applymovement_at(struct ScriptContext *ctx)
{
u16 localId = VarGet(ScriptReadHalfword(ctx));
void *movementScript = (void *)ScriptReadWord(ctx);
@@ -922,7 +981,7 @@ static bool8 WaitForMovementFinish(void)
return ScriptMovement_IsObjectMovementFinished(sMovingNpcId, sMovingNpcMapId, sMovingNpcMapBank);
}
-bool8 ScrCmd_waitmove(struct ScriptContext *ctx)
+bool8 ScrCmd_waitmovement(struct ScriptContext *ctx)
{
u16 localId = VarGet(ScriptReadHalfword(ctx));
@@ -934,7 +993,7 @@ bool8 ScrCmd_waitmove(struct ScriptContext *ctx)
return TRUE;
}
-bool8 ScrCmd_waitmovexy(struct ScriptContext *ctx)
+bool8 ScrCmd_waitmovement_at(struct ScriptContext *ctx)
{
u16 localId = VarGet(ScriptReadHalfword(ctx));
u8 mapBank;
@@ -950,97 +1009,108 @@ bool8 ScrCmd_waitmovexy(struct ScriptContext *ctx)
return TRUE;
}
-bool8 ScrCmd_disappear(struct ScriptContext *ctx)
+bool8 ScrCmd_removeobject(struct ScriptContext *ctx)
{
- u16 objectId = VarGet(ScriptReadHalfword(ctx));
- RemoveFieldObjectByLocalIdAndMap(objectId, gSaveBlock1.location.mapNum, gSaveBlock1.location.mapGroup);
+ u16 localId = VarGet(ScriptReadHalfword(ctx));
+
+ RemoveFieldObjectByLocalIdAndMap(localId, gSaveBlock1.location.mapNum, gSaveBlock1.location.mapGroup);
return FALSE;
}
-bool8 ScrCmd_disappearxy(struct ScriptContext *ctx)
+bool8 ScrCmd_removeobject_at(struct ScriptContext *ctx)
{
u16 objectId = VarGet(ScriptReadHalfword(ctx));
u8 mapGroup = ScriptReadByte(ctx);
u8 mapNum = ScriptReadByte(ctx);
+
RemoveFieldObjectByLocalIdAndMap(objectId, mapNum, mapGroup);
return FALSE;
}
-bool8 ScrCmd_reappear(struct ScriptContext *ctx)
+bool8 ScrCmd_addobject(struct ScriptContext *ctx)
{
u16 objectId = VarGet(ScriptReadHalfword(ctx));
+
show_sprite(objectId, gSaveBlock1.location.mapNum, gSaveBlock1.location.mapGroup);
return FALSE;
}
-bool8 ScrCmd_reappearxy(struct ScriptContext *ctx)
+bool8 ScrCmd_addobject_at(struct ScriptContext *ctx)
{
u16 objectId = VarGet(ScriptReadHalfword(ctx));
u8 mapGroup = ScriptReadByte(ctx);
u8 mapNum = ScriptReadByte(ctx);
+
show_sprite(objectId, mapNum, mapGroup);
return FALSE;
}
-bool8 ScrCmd_movesprite(struct ScriptContext *ctx)
+bool8 ScrCmd_setobjectxy(struct ScriptContext *ctx)
{
- u16 v1 = VarGet(ScriptReadHalfword(ctx));
- u16 v2 = VarGet(ScriptReadHalfword(ctx));
- u32 v3 = VarGet(ScriptReadHalfword(ctx));
- sub_805C0F8(v1, gSaveBlock1.location.mapNum, gSaveBlock1.location.mapGroup, v2, v3);
+ u16 localId = VarGet(ScriptReadHalfword(ctx));
+ u16 x = VarGet(ScriptReadHalfword(ctx));
+ u16 y = VarGet(ScriptReadHalfword(ctx));
+
+ sub_805C0F8(localId, gSaveBlock1.location.mapNum, gSaveBlock1.location.mapGroup, x, y);
return FALSE;
}
-bool8 ScrCmd_movespriteperm(struct ScriptContext *ctx)
+bool8 ScrCmd_setobjectxyperm(struct ScriptContext *ctx)
{
- u16 v1 = VarGet(ScriptReadHalfword(ctx));
- u16 v2 = VarGet(ScriptReadHalfword(ctx));
- u32 v3 = VarGet(ScriptReadHalfword(ctx));
- Overworld_SaveMapObjCoords(v1, v2, v3);
+ u16 localId = VarGet(ScriptReadHalfword(ctx));
+ u16 x = VarGet(ScriptReadHalfword(ctx));
+ u16 y = VarGet(ScriptReadHalfword(ctx));
+
+ Overworld_SetMapObjTemplateCoords(localId, x, y);
return FALSE;
}
-bool8 ScrCmd_moveoffscreen(struct ScriptContext *ctx)
+bool8 ScrCmd_moveobjectoffscreen(struct ScriptContext *ctx)
{
- u16 v1 = VarGet(ScriptReadHalfword(ctx));
- sub_805C78C(v1, gSaveBlock1.location.mapNum, gSaveBlock1.location.mapGroup);
+ u16 localId = VarGet(ScriptReadHalfword(ctx));
+
+ sub_805C78C(localId, gSaveBlock1.location.mapNum, gSaveBlock1.location.mapGroup);
return FALSE;
}
-bool8 ScrCmd_spritevisible(struct ScriptContext *ctx)
+bool8 ScrCmd_showobject(struct ScriptContext *ctx)
{
- u16 v1 = VarGet(ScriptReadHalfword(ctx));
- u8 v2 = ScriptReadByte(ctx);
- u8 v3 = ScriptReadByte(ctx);
- npc_by_local_id_and_map_set_field_1_bit_x20(v1, v3, v2, 0);
+ u16 localId = VarGet(ScriptReadHalfword(ctx));
+ u8 mapGroup = ScriptReadByte(ctx);
+ u8 mapNum = ScriptReadByte(ctx);
+
+ npc_by_local_id_and_map_set_field_1_bit_x20(localId, mapNum, mapGroup, 0);
return FALSE;
}
-bool8 ScrCmd_spriteinvisible(struct ScriptContext *ctx)
+bool8 ScrCmd_hideobject(struct ScriptContext *ctx)
{
- u16 v1 = VarGet(ScriptReadHalfword(ctx));
- u8 v2 = ScriptReadByte(ctx);
- u8 v3 = ScriptReadByte(ctx);
- npc_by_local_id_and_map_set_field_1_bit_x20(v1, v3, v2, 1);
+ u16 localId = VarGet(ScriptReadHalfword(ctx));
+ u8 mapGroup = ScriptReadByte(ctx);
+ u8 mapNum = ScriptReadByte(ctx);
+
+ npc_by_local_id_and_map_set_field_1_bit_x20(localId, mapNum, mapGroup, 1);
return FALSE;
}
-bool8 ScrCmd_spritelevelup(struct ScriptContext *ctx)
+bool8 ScrCmd_setobjectpriority(struct ScriptContext *ctx)
{
- u16 v1 = VarGet(ScriptReadHalfword(ctx));
- u8 v2 = ScriptReadByte(ctx);
- u8 v3 = ScriptReadByte(ctx);
- u8 v4 = ScriptReadByte(ctx);
- sub_805BCF0(v1, v3, v2, v4 + 83);
+ u16 localId = VarGet(ScriptReadHalfword(ctx));
+ u8 mapGroup = ScriptReadByte(ctx);
+ u8 mapNum = ScriptReadByte(ctx);
+ u8 priority = ScriptReadByte(ctx);
+
+ sub_805BCF0(localId, mapNum, mapGroup, priority + 83);
return FALSE;
}
-bool8 ScrCmd_restorespritelevel(struct ScriptContext *ctx)
+bool8 ScrCmd_resetobjectpriority(struct ScriptContext *ctx)
{
- u16 v1 = VarGet(ScriptReadHalfword(ctx));
- u8 v2 = ScriptReadByte(ctx);
- u8 v3 = ScriptReadByte(ctx);
- sub_805BD48(v1, v3, v2);
+ u16 localId = VarGet(ScriptReadHalfword(ctx));
+ u8 mapGroup = ScriptReadByte(ctx);
+ u8 mapNum = ScriptReadByte(ctx);
+
+ sub_805BD48(localId, mapNum, mapGroup);
return FALSE;
}
@@ -1054,39 +1124,43 @@ bool8 ScrCmd_faceplayer(struct ScriptContext *ctx)
return FALSE;
}
-bool8 ScrCmd_spriteface(struct ScriptContext *ctx)
+bool8 ScrCmd_turnobject(struct ScriptContext *ctx)
{
u16 localId = VarGet(ScriptReadHalfword(ctx));
u8 direction = ScriptReadByte(ctx);
+
FieldObjectTurnByLocalIdAndMap(localId, gSaveBlock1.location.mapNum, gSaveBlock1.location.mapGroup, direction);
return FALSE;
}
-bool8 ScrCmd_spritebehave(struct ScriptContext *ctx)
+bool8 ScrCmd_setobjectmovementtype(struct ScriptContext *ctx)
{
- u16 v1 = VarGet(ScriptReadHalfword(ctx));
- u8 v2 = ScriptReadByte(ctx);
- Overworld_SaveMapObjMovementType(v1, v2);
+ u16 localId = VarGet(ScriptReadHalfword(ctx));
+ u8 movementType = ScriptReadByte(ctx);
+
+ Overworld_SetMapObjTemplateMovementType(localId, movementType);
return FALSE;
}
-bool8 ScrCmd_createvsprite(struct ScriptContext *ctx)
+bool8 ScrCmd_createvobject(struct ScriptContext *ctx)
{
- u8 v1 = ScriptReadByte(ctx);
+ u8 graphicsId = ScriptReadByte(ctx);
u8 v2 = ScriptReadByte(ctx);
- u16 v3 = VarGet(ScriptReadHalfword(ctx));
- u32 v4 = VarGet(ScriptReadHalfword(ctx));
- u8 v5 = ScriptReadByte(ctx);
- u8 v6 = ScriptReadByte(ctx);
- sub_805B410(v1, v2, v3, v4, v5, v6);
+ u16 x = VarGet(ScriptReadHalfword(ctx));
+ u32 y = VarGet(ScriptReadHalfword(ctx));
+ u8 elevation = ScriptReadByte(ctx);
+ u8 direction = ScriptReadByte(ctx);
+
+ sub_805B410(graphicsId, v2, x, y, elevation, direction);
return FALSE;
}
-bool8 ScrCmd_vspriteface(struct ScriptContext *ctx)
+bool8 ScrCmd_turnvobject(struct ScriptContext *ctx)
{
u8 v1 = ScriptReadByte(ctx);
- u8 v2 = ScriptReadByte(ctx);
- sub_8064990(v1, v2);
+ u8 direction = ScriptReadByte(ctx);
+
+ sub_8064990(v1, direction);
return FALSE;
}
@@ -1122,7 +1196,6 @@ bool8 ScrCmd_lock(struct ScriptContext *ctx)
ScriptFreezeMapObjects();
SetupNativeScript(ctx, sub_8064CFC);
}
-
return TRUE;
}
}
@@ -1156,34 +1229,36 @@ bool8 ScrCmd_release(struct ScriptContext *ctx)
bool8 ScrCmd_message(struct ScriptContext *ctx)
{
u8 *msg = (u8 *)ScriptReadWord(ctx);
- if (!msg)
+
+ if (msg == NULL)
msg = (u8 *)ctx->data[0];
ShowFieldMessage(msg);
return FALSE;
}
-bool8 ScrCmd_message2(struct ScriptContext *ctx)
+bool8 ScrCmd_messageautoscroll(struct ScriptContext *ctx)
{
u8 *msg = (u8 *)ScriptReadWord(ctx);
- if (!msg)
+
+ if (msg == NULL)
msg = (u8 *)ctx->data[0];
ShowFieldAutoScrollMessage(msg);
return FALSE;
}
-bool8 ScrCmd_waittext(struct ScriptContext *ctx)
+bool8 ScrCmd_waitmessage(struct ScriptContext *ctx)
{
SetupNativeScript(ctx, IsFieldMessageBoxHidden);
return TRUE;
}
-bool8 ScrCmd_closebutton(struct ScriptContext *ctx)
+bool8 ScrCmd_closemessage(struct ScriptContext *ctx)
{
HideFieldMessageBox();
return FALSE;
}
-bool8 WaitForAorBPress(void)
+static bool8 WaitForAorBPress(void)
{
if (gMain.newKeys & A_BUTTON)
return TRUE;
@@ -1202,6 +1277,7 @@ bool8 ScrCmd_yesnobox(struct ScriptContext *ctx)
{
u8 left = ScriptReadByte(ctx);
u8 top = ScriptReadByte(ctx);
+
if (ScriptMenu_YesNo(left, top) == TRUE)
{
ScriptContext1_Stop();
@@ -1219,6 +1295,7 @@ bool8 ScrCmd_multichoice(struct ScriptContext *ctx)
u8 top = ScriptReadByte(ctx);
u8 multichoiceId = ScriptReadByte(ctx);
u8 ignoreBPress = ScriptReadByte(ctx);
+
if (ScriptMenu_Multichoice(left, top, multichoiceId, ignoreBPress) == TRUE)
{
ScriptContext1_Stop();
@@ -1230,13 +1307,14 @@ bool8 ScrCmd_multichoice(struct ScriptContext *ctx)
}
}
-bool8 ScrCmd_multichoicedef(struct ScriptContext *ctx)
+bool8 ScrCmd_multichoicedefault(struct ScriptContext *ctx)
{
u8 left = ScriptReadByte(ctx);
u8 top = ScriptReadByte(ctx);
u8 multichoiceId = ScriptReadByte(ctx);
u8 defaultChoice = ScriptReadByte(ctx);
u8 ignoreBPress = ScriptReadByte(ctx);
+
if (ScriptMenu_MultichoiceWithDefault(left, top, multichoiceId, ignoreBPress, defaultChoice) == TRUE)
{
ScriptContext1_Stop();
@@ -1248,23 +1326,25 @@ bool8 ScrCmd_multichoicedef(struct ScriptContext *ctx)
}
}
-bool8 ScrCmd_showbox(struct ScriptContext *ctx)
+bool8 ScrCmd_drawbox(struct ScriptContext *ctx)
{
u8 left = ScriptReadByte(ctx);
u8 top = ScriptReadByte(ctx);
u8 right = ScriptReadByte(ctx);
u8 bottom = ScriptReadByte(ctx);
+
MenuDrawTextWindow(left, top, right, bottom);
return FALSE;
}
-bool8 ScrCmd_multichoicerow(struct ScriptContext *ctx)
+bool8 ScrCmd_multichoicegrid(struct ScriptContext *ctx)
{
u8 left = ScriptReadByte(ctx);
u8 top = ScriptReadByte(ctx);
u8 multichoiceId = ScriptReadByte(ctx);
u8 numColumns = ScriptReadByte(ctx);
u8 ignoreBPress = ScriptReadByte(ctx);
+
if (ScriptMenu_MultichoiceGrid(left, top, multichoiceId, ignoreBPress, numColumns) == TRUE)
{
ScriptContext1_Stop();
@@ -1276,23 +1356,25 @@ bool8 ScrCmd_multichoicerow(struct ScriptContext *ctx)
}
}
-bool8 ScrCmd_hidebox(struct ScriptContext *ctx)
+bool8 ScrCmd_erasebox(struct ScriptContext *ctx)
{
u8 left = ScriptReadByte(ctx);
u8 top = ScriptReadByte(ctx);
u8 right = ScriptReadByte(ctx);
u8 bottom = ScriptReadByte(ctx);
+
MenuZeroFillWindowRect(left, top, right, bottom);
return FALSE;
}
// unused
-bool8 ScrCmd_clearbox(struct ScriptContext *ctx)
+bool8 ScrCmd_drawboxtext(struct ScriptContext *ctx)
{
u8 left = ScriptReadByte(ctx);
u8 top = ScriptReadByte(ctx);
u8 multichoiceId = ScriptReadByte(ctx);
u8 ignoreBPress = ScriptReadByte(ctx);
+
if (Multichoice(left, top, multichoiceId, ignoreBPress) == TRUE)
{
ScriptContext1_Stop();
@@ -1304,16 +1386,17 @@ bool8 ScrCmd_clearbox(struct ScriptContext *ctx)
}
}
-bool8 ScrCmd_showpokepic(struct ScriptContext *ctx)
+bool8 ScrCmd_drawpokepic(struct ScriptContext *ctx)
{
u16 species = VarGet(ScriptReadHalfword(ctx));
u8 x = ScriptReadByte(ctx);
u8 y = ScriptReadByte(ctx);
+
ScriptMenu_ShowPokemonPic(species, x, y);
return FALSE;
}
-bool8 ScrCmd_hidepokepic(struct ScriptContext *ctx)
+bool8 ScrCmd_erasepokepic(struct ScriptContext *ctx)
{
bool8 (*func)(void) = ScriptMenu_GetPicboxWaitFunc();
@@ -1323,9 +1406,10 @@ bool8 ScrCmd_hidepokepic(struct ScriptContext *ctx)
return TRUE;
}
-bool8 ScrCmd_showcontestwinner(struct ScriptContext *ctx)
+bool8 ScrCmd_drawcontestwinner(struct ScriptContext *ctx)
{
u8 v1 = ScriptReadByte(ctx);
+
if (v1)
sub_8106630(v1);
ShowContestWinner();
@@ -1333,9 +1417,10 @@ bool8 ScrCmd_showcontestwinner(struct ScriptContext *ctx)
return TRUE;
}
-bool8 ScrCmd_braillemsg(struct ScriptContext *ctx)
+bool8 ScrCmd_braillemessage(struct ScriptContext *ctx)
{
u8 *ptr = (u8 *)ScriptReadWord(ctx);
+
u8 v2 = ptr[0];
u8 v3 = ptr[1];
u8 v4 = ptr[2];
@@ -1348,24 +1433,27 @@ bool8 ScrCmd_braillemsg(struct ScriptContext *ctx)
return FALSE;
}
-bool8 ScrCmd_vtext(struct ScriptContext *ctx)
+bool8 ScrCmd_vmessage(struct ScriptContext *ctx)
{
u32 v1 = ScriptReadWord(ctx);
+
ShowFieldMessage((u8 *)(v1 - gUnknown_0202E8B0));
return FALSE;
}
-bool8 ScrCmd_bufferpoke(struct ScriptContext *ctx)
+bool8 ScrCmd_getspeciesname(struct ScriptContext *ctx)
{
u8 stringVarIndex = ScriptReadByte(ctx);
u16 species = VarGet(ScriptReadHalfword(ctx));
+
StringCopy(sScriptStringVars[stringVarIndex], gSpeciesNames[species]);
return FALSE;
}
-bool8 ScrCmd_bufferfirstpoke(struct ScriptContext *ctx)
+bool8 ScrCmd_getfirstpartypokename(struct ScriptContext *ctx)
{
u8 stringVarIndex = ScriptReadByte(ctx);
+
u8 *dest = sScriptStringVars[stringVarIndex];
u8 partyIndex = GetLeadMonIndex();
u32 species = GetMonData(&gPlayerParty[partyIndex], MON_DATA_SPECIES, NULL);
@@ -1373,82 +1461,91 @@ bool8 ScrCmd_bufferfirstpoke(struct ScriptContext *ctx)
return FALSE;
}
-bool8 ScrCmd_bufferpartypoke(struct ScriptContext *ctx)
+bool8 ScrCmd_getpartypokename(struct ScriptContext *ctx)
{
u8 stringVarIndex = ScriptReadByte(ctx);
u16 partyIndex = VarGet(ScriptReadHalfword(ctx));
+
GetMonData(&gPlayerParty[partyIndex], MON_DATA_NICKNAME, sScriptStringVars[stringVarIndex]);
StringGetEnd10(sScriptStringVars[stringVarIndex]);
return FALSE;
}
-bool8 ScrCmd_bufferitem(struct ScriptContext *ctx)
+bool8 ScrCmd_getitemname(struct ScriptContext *ctx)
{
u8 stringVarIndex = ScriptReadByte(ctx);
u16 itemId = VarGet(ScriptReadHalfword(ctx));
+
CopyItemName(itemId, sScriptStringVars[stringVarIndex]);
return FALSE;
}
-bool8 ScrCmd_bufferdecor(struct ScriptContext *ctx)
+bool8 ScrCmd_getdecorname(struct ScriptContext *ctx)
{
u8 stringVarIndex = ScriptReadByte(ctx);
u16 decorId = VarGet(ScriptReadHalfword(ctx));
+
StringCopy(sScriptStringVars[stringVarIndex], gDecorations[decorId].name);
return FALSE;
}
-bool8 ScrCmd_bufferattack(struct ScriptContext *ctx)
+bool8 ScrCmd_getmovename(struct ScriptContext *ctx)
{
u8 stringVarIndex = ScriptReadByte(ctx);
u16 moveId = VarGet(ScriptReadHalfword(ctx));
+
StringCopy(sScriptStringVars[stringVarIndex], gMoveNames[moveId]);
return FALSE;
}
-bool8 ScrCmd_buffernum(struct ScriptContext *ctx)
+bool8 ScrCmd_getnumberstring(struct ScriptContext *ctx)
{
u8 stringVarIndex = ScriptReadByte(ctx);
u16 v1 = VarGet(ScriptReadHalfword(ctx));
u8 v2 = sub_80BF0B8(v1);
+
ConvertIntToDecimalStringN(sScriptStringVars[stringVarIndex], v1, 0, v2);
return FALSE;
}
-bool8 ScrCmd_bufferstd(struct ScriptContext *ctx)
+bool8 ScrCmd_getstdstring(struct ScriptContext *ctx)
{
u8 stringVarIndex = ScriptReadByte(ctx);
u16 index = VarGet(ScriptReadHalfword(ctx));
+
StringCopy(sScriptStringVars[stringVarIndex], gUnknown_083CE048[index]);
return FALSE;
}
-bool8 ScrCmd_buffertext(struct ScriptContext *ctx)
+bool8 ScrCmd_getstring(struct ScriptContext *ctx)
{
u8 stringVarIndex = ScriptReadByte(ctx);
u8 *text = (u8 *)ScriptReadWord(ctx);
+
StringCopy(sScriptStringVars[stringVarIndex], text);
return FALSE;
}
-bool8 ScrCmd_vloadptr(struct ScriptContext *ctx)
+bool8 ScrCmd_vloadword(struct ScriptContext *ctx)
{
u8 *ptr = (u8 *)(ScriptReadWord(ctx) - gUnknown_0202E8B0);
+
StringExpandPlaceholders(gStringVar4, ptr);
return FALSE;
}
-bool8 ScrCmd_vbuffer(struct ScriptContext *ctx)
+bool8 ScrCmd_vgetstring(struct ScriptContext *ctx)
{
u8 stringVarIndex = ScriptReadByte(ctx);
u32 addr = ScriptReadWord(ctx);
+
u8 *src = (u8 *)(addr - gUnknown_0202E8B0);
u8 *dest = sScriptStringVars[stringVarIndex];
StringCopy(dest, src);
return FALSE;
}
-bool8 ScrCmd_givepokemon(struct ScriptContext *ctx)
+bool8 ScrCmd_givepoke(struct ScriptContext *ctx)
{
u16 species = VarGet(ScriptReadHalfword(ctx));
u8 level = ScriptReadByte(ctx);
@@ -1456,6 +1553,7 @@ bool8 ScrCmd_givepokemon(struct ScriptContext *ctx)
u32 unkParam1 = ScriptReadWord(ctx);
u32 unkParam2 = ScriptReadWord(ctx);
u8 unkParam3 = ScriptReadByte(ctx);
+
gScriptResult = ScriptGiveMon(species, level, item, unkParam1, unkParam2, unkParam3);
return FALSE;
}
@@ -1463,6 +1561,7 @@ bool8 ScrCmd_givepokemon(struct ScriptContext *ctx)
bool8 ScrCmd_giveegg(struct ScriptContext *ctx)
{
u16 species = VarGet(ScriptReadHalfword(ctx));
+
gScriptResult = ScriptGiveEgg(species);
return FALSE;
}
@@ -1472,14 +1571,16 @@ bool8 ScrCmd_setpokemove(struct ScriptContext *ctx)
u8 partyIndex = ScriptReadByte(ctx);
u8 slot = ScriptReadByte(ctx);
u16 move = ScriptReadHalfword(ctx);
+
ScriptSetMonMoveSlot(partyIndex, move, slot);
return FALSE;
}
-bool8 ScrCmd_checkattack(struct ScriptContext *ctx)
+bool8 ScrCmd_checkpokemove(struct ScriptContext *ctx)
{
u8 i;
u16 moveId = ScriptReadHalfword(ctx);
+
gScriptResult = 6;
for (i = 0; i < 6; i++)
{
@@ -1501,15 +1602,17 @@ bool8 ScrCmd_givemoney(struct ScriptContext *ctx)
{
u32 amount = ScriptReadWord(ctx);
u8 ignore = ScriptReadByte(ctx);
+
if (!ignore)
AddMoney(&gSaveBlock1.money, amount);
return FALSE;
}
-bool8 ScrCmd_paymoney(struct ScriptContext *ctx)
+bool8 ScrCmd_takemoney(struct ScriptContext *ctx)
{
u32 amount = ScriptReadWord(ctx);
u8 ignore = ScriptReadByte(ctx);
+
if (!ignore)
RemoveMoney(&gSaveBlock1.money, amount);
return FALSE;
@@ -1519,60 +1622,67 @@ bool8 ScrCmd_checkmoney(struct ScriptContext *ctx)
{
u32 amount = ScriptReadWord(ctx);
u8 ignore = ScriptReadByte(ctx);
+
if (!ignore)
gScriptResult = IsEnoughMoney(gSaveBlock1.money, amount);
return FALSE;
}
-bool8 ScrCmd_showmoney(struct ScriptContext *ctx)
+bool8 ScrCmd_showmoneybox(struct ScriptContext *ctx)
{
u8 x = ScriptReadByte(ctx);
u8 y = ScriptReadByte(ctx);
u8 ignore = ScriptReadByte(ctx);
+
if (!ignore)
OpenMoneyWindow(gSaveBlock1.money, x, y);
return FALSE;
}
-bool8 ScrCmd_hidemoney(struct ScriptContext *ctx)
+bool8 ScrCmd_hidemoneybox(struct ScriptContext *ctx)
{
u8 x = ScriptReadByte(ctx);
u8 y = ScriptReadByte(ctx);
+
CloseMoneyWindow(x, y);
return FALSE;
}
-bool8 ScrCmd_updatemoney(struct ScriptContext *ctx)
+bool8 ScrCmd_updatemoneybox(struct ScriptContext *ctx)
{
- u8 v2 = ScriptReadByte(ctx);
- u8 v3 = ScriptReadByte(ctx);
+ u8 x = ScriptReadByte(ctx);
+ u8 y = ScriptReadByte(ctx);
u8 ignore = ScriptReadByte(ctx);
+
if (!ignore)
- UpdateMoneyWindow(gSaveBlock1.money, v2, v3);
+ UpdateMoneyWindow(gSaveBlock1.money, x, y);
return FALSE;
}
-bool8 ScrCmd_showcoins(struct ScriptContext *ctx)
+bool8 ScrCmd_showcoinsbox(struct ScriptContext *ctx)
{
- u8 v2 = ScriptReadByte(ctx);
- u8 v3 = ScriptReadByte(ctx);
- ShowCoinsWindow(gSaveBlock1.coins, v2, v3);
+ u8 x = ScriptReadByte(ctx);
+ u8 y = ScriptReadByte(ctx);
+
+ ShowCoinsWindow(gSaveBlock1.coins, x, y);
return FALSE;
}
-bool8 ScrCmd_hidecoins(struct ScriptContext *ctx)
+bool8 ScrCmd_hidecoinsbox(struct ScriptContext *ctx)
{
- u8 v2 = ScriptReadByte(ctx);
- u8 v3 = ScriptReadByte(ctx);
- HideCoinsWindow(v2, v3);
+ u8 x = ScriptReadByte(ctx);
+ u8 y = ScriptReadByte(ctx);
+
+ HideCoinsWindow(x, y);
return FALSE;
}
-bool8 ScrCmd_updatecoins(struct ScriptContext *ctx)
+bool8 ScrCmd_updatecoinsbox(struct ScriptContext *ctx)
{
- u8 v2 = ScriptReadByte(ctx);
- u8 v3 = ScriptReadByte(ctx);
- UpdateCoinsWindow(gSaveBlock1.coins, v2, v3);
+ u8 x = ScriptReadByte(ctx);
+ u8 y = ScriptReadByte(ctx);
+
+ UpdateCoinsWindow(gSaveBlock1.coins, x, y);
return FALSE;
}
@@ -1582,19 +1692,19 @@ bool8 ScrCmd_trainerbattle(struct ScriptContext *ctx)
return FALSE;
}
-bool8 ScrCmd_reptrainerbattle(struct ScriptContext *ctx)
+bool8 ScrCmd_battlebegin(struct ScriptContext *ctx)
{
BattleSetup_StartTrainerBattle();
return TRUE;
}
-bool8 ScrCmd_endtrainerbattle(struct ScriptContext *ctx)
+bool8 ScrCmd_ontrainerbattleend(struct ScriptContext *ctx)
{
ctx->scriptPtr = BattleSetup_GetScriptAddrAfterBattle();
return FALSE;
}
-bool8 ScrCmd_endtrainerbattle2(struct ScriptContext *ctx)
+bool8 ScrCmd_ontrainerbattleendgoto(struct ScriptContext *ctx)
{
ctx->scriptPtr = BattleSetup_GetTrainerPostBattleScript();
return FALSE;
@@ -1603,20 +1713,23 @@ bool8 ScrCmd_endtrainerbattle2(struct ScriptContext *ctx)
bool8 ScrCmd_checktrainerflag(struct ScriptContext *ctx)
{
u16 index = VarGet(ScriptReadHalfword(ctx));
+
ctx->comparisonResult = HasTrainerAlreadyBeenFought(index);
return FALSE;
}
-bool8 ScrCmd_cleartrainerflag(struct ScriptContext *ctx)
+bool8 ScrCmd_settrainerflag(struct ScriptContext *ctx)
{
u16 index = VarGet(ScriptReadHalfword(ctx));
+
trainer_flag_set(index);
return FALSE;
}
-bool8 ScrCmd_settrainerflag(struct ScriptContext *ctx)
+bool8 ScrCmd_cleartrainerflag(struct ScriptContext *ctx)
{
u16 index = VarGet(ScriptReadHalfword(ctx));
+
trainer_flag_clear(index);
return FALSE;
}
@@ -1626,6 +1739,7 @@ bool8 ScrCmd_setwildbattle(struct ScriptContext *ctx)
u16 species = ScriptReadHalfword(ctx);
u8 level = ScriptReadByte(ctx);
u16 item = ScriptReadHalfword(ctx);
+
CreateScriptedWildMon(species, level, item);
return FALSE;
}
@@ -1640,6 +1754,7 @@ bool8 ScrCmd_dowildbattle(struct ScriptContext *ctx)
bool8 ScrCmd_pokemart(struct ScriptContext *ctx)
{
void *ptr = (void *)ScriptReadWord(ctx);
+
CreatePokemartMenu(ptr);
ScriptContext1_Stop();
return TRUE;
@@ -1648,6 +1763,7 @@ bool8 ScrCmd_pokemart(struct ScriptContext *ctx)
bool8 ScrCmd_pokemartdecor(struct ScriptContext *ctx)
{
void *ptr = (void *)ScriptReadWord(ctx);
+
CreateDecorationShop1Menu(ptr);
ScriptContext1_Stop();
return TRUE;
@@ -1656,24 +1772,27 @@ bool8 ScrCmd_pokemartdecor(struct ScriptContext *ctx)
bool8 ScrCmd_pokemartbp(struct ScriptContext *ctx)
{
void *ptr = (void *)ScriptReadWord(ctx);
+
CreateDecorationShop2Menu(ptr);
ScriptContext1_Stop();
return TRUE;
}
-bool8 ScrCmd_pokecasino(struct ScriptContext *ctx)
+bool8 ScrCmd_playslotmachine(struct ScriptContext *ctx)
{
u8 v2 = VarGet(ScriptReadHalfword(ctx));
+
PlaySlotMachine(v2, c2_exit_to_overworld_1_continue_scripts_restart_music);
ScriptContext1_Stop();
return TRUE;
}
-bool8 ScrCmd_event_8a(struct ScriptContext *ctx)
+bool8 ScrCmd_plantberrytree(struct ScriptContext *ctx)
{
u8 treeId = ScriptReadByte(ctx);
u8 berry = ScriptReadByte(ctx);
u8 growthStage = ScriptReadByte(ctx);
+
if (berry == 0)
PlantBerryTree(treeId, 0, growthStage, FALSE);
else
@@ -1681,9 +1800,10 @@ bool8 ScrCmd_event_8a(struct ScriptContext *ctx)
return FALSE;
}
-bool8 ScrCmd_event_96(struct ScriptContext *ctx)
+bool8 ScrCmd_getpricereduction(struct ScriptContext *ctx)
{
u16 value = VarGet(ScriptReadHalfword(ctx));
+
gScriptResult = GetPriceReduction(value);
return FALSE;
}
@@ -1716,17 +1836,19 @@ bool8 ScrCmd_contestlinktransfer(struct ScriptContext *ctx)
return TRUE;
}
-bool8 ScrCmd_doanimation(struct ScriptContext *ctx)
+bool8 ScrCmd_dofieldeffect(struct ScriptContext *ctx)
{
u16 effectId = VarGet(ScriptReadHalfword(ctx));
+
sFieldEffectScriptId = effectId;
FieldEffectStart(sFieldEffectScriptId);
return FALSE;
}
-bool8 ScrCmd_setanimation(struct ScriptContext *ctx)
+bool8 ScrCmd_setfieldeffect(struct ScriptContext *ctx)
{
u8 argNum = ScriptReadByte(ctx);
+
gFieldEffectArguments[argNum] = (s16)VarGet(ScriptReadHalfword(ctx));
return FALSE;
}
@@ -1739,7 +1861,7 @@ static bool8 sub_8067B48()
return FALSE;
}
-bool8 ScrCmd_checkanimation(struct ScriptContext *ctx)
+bool8 ScrCmd_waitfieldeffect(struct ScriptContext *ctx)
{
sFieldEffectScriptId = VarGet(ScriptReadHalfword(ctx));
SetupNativeScript(ctx, sub_8067B48);
@@ -1748,21 +1870,23 @@ bool8 ScrCmd_checkanimation(struct ScriptContext *ctx)
bool8 ScrCmd_sethealplace(struct ScriptContext *ctx)
{
- u16 v2 = VarGet(ScriptReadHalfword(ctx));
- sub_8053588(v2);
+ u16 healLocationId = VarGet(ScriptReadHalfword(ctx));
+
+ Overworld_SetHealLocationWarp(healLocationId);
return FALSE;
}
-bool8 ScrCmd_checkgender(struct ScriptContext *ctx)
+bool8 ScrCmd_checkplayergender(struct ScriptContext *ctx)
{
gScriptResult = gSaveBlock2.playerGender;
return FALSE;
}
-bool8 ScrCmd_pokecry(struct ScriptContext *ctx)
+bool8 ScrCmd_playpokecry(struct ScriptContext *ctx)
{
u16 species = VarGet(ScriptReadHalfword(ctx));
u16 mode = VarGet(ScriptReadHalfword(ctx));
+
PlayCry5(species, mode);
return FALSE;
}
@@ -1779,6 +1903,7 @@ bool8 ScrCmd_setmaptile(struct ScriptContext *ctx)
u16 y = VarGet(ScriptReadHalfword(ctx));
u16 tileId = VarGet(ScriptReadHalfword(ctx));
u16 v8 = VarGet(ScriptReadHalfword(ctx));
+
x += 7;
y += 7;
if (!v8)
@@ -1788,10 +1913,11 @@ bool8 ScrCmd_setmaptile(struct ScriptContext *ctx)
return FALSE;
}
-bool8 ScrCmd_setdooropened(struct ScriptContext *ctx)
+bool8 ScrCmd_opendoor(struct ScriptContext *ctx)
{
u16 x = VarGet(ScriptReadHalfword(ctx));
u16 y = VarGet(ScriptReadHalfword(ctx));
+
x += 7;
y += 7;
PlaySE(GetDoorSoundEffect(x, y));
@@ -1799,10 +1925,11 @@ bool8 ScrCmd_setdooropened(struct ScriptContext *ctx)
return FALSE;
}
-bool8 ScrCmd_setdoorclosed(struct ScriptContext *ctx)
+bool8 ScrCmd_closedoor(struct ScriptContext *ctx)
{
u16 x = VarGet(ScriptReadHalfword(ctx));
u16 y = VarGet(ScriptReadHalfword(ctx));
+
x += 7;
y += 7;
FieldAnimateDoorClose(x, y);
@@ -1817,43 +1944,46 @@ static bool8 IsDoorAnimationStopped()
return FALSE;
}
-bool8 ScrCmd_doorchange(struct ScriptContext *ctx)
+bool8 ScrCmd_waitdooranim(struct ScriptContext *ctx)
{
SetupNativeScript(ctx, IsDoorAnimationStopped);
return TRUE;
}
-bool8 ScrCmd_setdooropened2(struct ScriptContext *ctx)
+bool8 ScrCmd_setdooropen(struct ScriptContext *ctx)
{
u16 x = VarGet(ScriptReadHalfword(ctx));
u16 y = VarGet(ScriptReadHalfword(ctx));
+
x += 7;
y += 7;
FieldSetDoorOpened(x, y);
return FALSE;
}
-bool8 ScrCmd_setdoorclosed2(struct ScriptContext *ctx)
+bool8 ScrCmd_setdoorclosed(struct ScriptContext *ctx)
{
u16 x = VarGet(ScriptReadHalfword(ctx));
u16 y = VarGet(ScriptReadHalfword(ctx));
+
x += 7;
y += 7;
FieldSetDoorClosed(x, y);
return FALSE;
}
-bool8 ScrCmd_event_b1(struct ScriptContext *ctx)
+bool8 ScrCmd_addelevmenuitem(struct ScriptContext *ctx)
{
u8 v3 = ScriptReadByte(ctx);
u16 v5 = VarGet(ScriptReadHalfword(ctx));
u16 v7 = VarGet(ScriptReadHalfword(ctx));
u16 v9 = VarGet(ScriptReadHalfword(ctx));
+
ScriptAddElevatorMenuItem(v3, v5, v7, v9);
return FALSE;
}
-bool8 ScrCmd_event_b2(struct ScriptContext *ctx)
+bool8 ScrCmd_showelevmenu(struct ScriptContext *ctx)
{
ScriptShowElevatorMenu();
ScriptContext1_Stop();
@@ -1870,21 +2000,21 @@ bool8 ScrCmd_checkcoins(struct ScriptContext *ctx)
bool8 ScrCmd_givecoins(struct ScriptContext *ctx)
{
u16 coins = VarGet(ScriptReadHalfword(ctx));
+
if (GiveCoins(coins) == TRUE)
gScriptResult = 0;
else
gScriptResult = 1;
-
return FALSE;
}
-bool8 ScrCmd_removecoins(struct ScriptContext *ctx)
+bool8 ScrCmd_takecoins(struct ScriptContext *ctx)
{
u16 coins = VarGet(ScriptReadHalfword(ctx));
+
if (TakeCoins(coins) == TRUE)
gScriptResult = 0;
else
gScriptResult = 1;
-
return FALSE;
}
diff --git a/src/script_menu.c b/src/field/script_menu.c
index e25e74d8c..e25e74d8c 100644
--- a/src/script_menu.c
+++ b/src/field/script_menu.c
diff --git a/src/script_movement.c b/src/field/script_movement.c
index 30e10b451..30e10b451 100644
--- a/src/script_movement.c
+++ b/src/field/script_movement.c
diff --git a/src/secret_base.c b/src/field/secret_base.c
index b2cd1f094..f221d7f16 100644
--- a/src/secret_base.c
+++ b/src/field/secret_base.c
@@ -301,7 +301,7 @@ void sub_80BBBEC(u8 taskid)
s8 idx;
if (!gPaletteFade.active) {
idx = 4 * (gUnknown_020387DC / 10);
- warp1_set(gSaveBlock1.location.mapGroup, gSaveBlock1.location.mapNum, -1, gUnknown_083D1374[idx + 2], gUnknown_083D1374[idx + 3]);
+ Overworld_SetWarpDestination(gSaveBlock1.location.mapGroup, gSaveBlock1.location.mapNum, -1, gUnknown_083D1374[idx + 2], gUnknown_083D1374[idx + 3]);
warp_in();
gFieldCallback = sub_80BBB90;
SetMainCallback2(CB2_LoadMap);
diff --git a/src/shop.c b/src/field/shop.c
index 22250b1c4..375205935 100644
--- a/src/shop.c
+++ b/src/field/shop.c
@@ -282,7 +282,7 @@ void BuyMenuDrawGraphics(void)
register const u32 zero asm("r6") = 0;
DmaFill32(3, zero, addr, OAM_SIZE);
LZDecompressVram(gBuyMenuFrame_Gfx, (void*)(VRAM + 0x7C00));
- sub_800D238(gBuyMenuFrame_Tilemap, (void *)0x02018000);
+ LZDecompressWram(gBuyMenuFrame_Tilemap, (void *)0x02018000);
LoadCompressedPalette(gMenuMoneyPal, 0xC0, sizeof(gMenuMoneyPal));
FreeAllSpritePalettes();
ResetPaletteFade();
diff --git a/src/slot_machine.c b/src/field/slot_machine.c
index c9a06a758..e8e4f271b 100644
--- a/src/slot_machine.c
+++ b/src/field/slot_machine.c
@@ -71,7 +71,7 @@ void sub_8106448(void) {
u32 offsetRead, offsetWrite;
u32 size;
- sub_800D238(gSlotMachine_Gfx, (void *) 0x02010000);
+ LZDecompressWram(gSlotMachine_Gfx, (void *) 0x02010000);
offsetRead = 0x02010000;
offsetWrite = BG_VRAM;
diff --git a/src/start_menu.c b/src/field/start_menu.c
index 6e44090df..6e44090df 100644
--- a/src/start_menu.c
+++ b/src/field/start_menu.c
diff --git a/src/starter_choose.c b/src/field/starter_choose.c
index 2b28df4f0..2b28df4f0 100644
--- a/src/starter_choose.c
+++ b/src/field/starter_choose.c
diff --git a/src/trader.c b/src/field/trader.c
index 61f48fad8..61f48fad8 100644
--- a/src/trader.c
+++ b/src/field/trader.c
diff --git a/src/trainer_see.c b/src/field/trainer_see.c
index 5a8ebbafc..5a8ebbafc 100644
--- a/src/trainer_see.c
+++ b/src/field/trainer_see.c
diff --git a/src/tv.c b/src/field/tv.c
index 734cbad6f..e9b5e850d 100644
--- a/src/tv.c
+++ b/src/field/tv.c
@@ -1555,7 +1555,7 @@ u16 sub_80BF674(u16 species)
rspecies = (Random() % (NUM_SPECIES - 1)) + 1;
cspecies = rspecies;
- while (GetNationalPokedexFlag(SpeciesToNationalPokedexNum(cspecies), 0) != 1 || cspecies == species)
+ while (GetSetPokedexFlag(SpeciesToNationalPokedexNum(cspecies), 0) != 1 || cspecies == species)
{
if (cspecies == SPECIES_BULBASAUR)
cspecies = NUM_SPECIES - 1;
@@ -2319,7 +2319,7 @@ void sub_80C03A8(u8 showidx)
void sub_80C03C8(u16 species, u8 showidx)
{
- if (GetNationalPokedexFlag(SpeciesToNationalPokedexNum(species), 0) == 0)
+ if (GetSetPokedexFlag(SpeciesToNationalPokedexNum(species), 0) == 0)
gSaveBlock1.tvShows[showidx].common.var01 = 0;
}
diff --git a/src/use_pokeblock.c b/src/field/use_pokeblock.c
index be3003680..e946a9cfc 100644
--- a/src/use_pokeblock.c
+++ b/src/field/use_pokeblock.c
@@ -1,5 +1,5 @@
//
-// Created by Scott Norton on 5/31/17.
+
// Modified by Dizzy Egg on 8/15/17.
//
diff --git a/src/wallclock.c b/src/field/wallclock.c
index 8db13dc2d..8db13dc2d 100644
--- a/src/wallclock.c
+++ b/src/field/wallclock.c
diff --git a/src/wild_encounter.c b/src/field/wild_encounter.c
index 390898917..390898917 100644
--- a/src/wild_encounter.c
+++ b/src/field/wild_encounter.c
diff --git a/src/agb_flash.c b/src/libs/agb_flash.c
index 340d469a7..340d469a7 100644
--- a/src/agb_flash.c
+++ b/src/libs/agb_flash.c
diff --git a/src/agb_flash_1m.c b/src/libs/agb_flash_1m.c
index e249fab9a..e249fab9a 100644
--- a/src/agb_flash_1m.c
+++ b/src/libs/agb_flash_1m.c
diff --git a/src/agb_flash_le.c b/src/libs/agb_flash_le.c
index 39d956e27..39d956e27 100644
--- a/src/agb_flash_le.c
+++ b/src/libs/agb_flash_le.c
diff --git a/src/agb_flash_mx.c b/src/libs/agb_flash_mx.c
index 67348901f..67348901f 100644
--- a/src/agb_flash_mx.c
+++ b/src/libs/agb_flash_mx.c
diff --git a/src/libc.c b/src/libs/libc.c
index 920673e3e..920673e3e 100644
--- a/src/libc.c
+++ b/src/libs/libc.c
diff --git a/src/m4a_2.c b/src/libs/m4a_2.c
index 2d3c65848..2d3c65848 100644
--- a/src/m4a_2.c
+++ b/src/libs/m4a_2.c
diff --git a/src/m4a_4.c b/src/libs/m4a_4.c
index 2e1d140b4..2e1d140b4 100644
--- a/src/m4a_4.c
+++ b/src/libs/m4a_4.c
diff --git a/src/m4a_tables.c b/src/libs/m4a_tables.c
index 91f00a31d..91f00a31d 100644
--- a/src/m4a_tables.c
+++ b/src/libs/m4a_tables.c
diff --git a/src/siirtc.c b/src/libs/siirtc.c
index 965a068f1..965a068f1 100644
--- a/src/siirtc.c
+++ b/src/libs/siirtc.c
diff --git a/src/learn_move.c b/src/pokemon/learn_move.c
index 33252c66b..33252c66b 100644
--- a/src/learn_move.c
+++ b/src/pokemon/learn_move.c
diff --git a/src/mail.c b/src/pokemon/mail.c
index c5dd119e3..c5dd119e3 100644
--- a/src/mail.c
+++ b/src/pokemon/mail.c
diff --git a/src/mail_data.c b/src/pokemon/mail_data.c
index ae3f4b3e8..ae3f4b3e8 100644
--- a/src/mail_data.c
+++ b/src/pokemon/mail_data.c
diff --git a/src/mon_markings.c b/src/pokemon/mon_markings.c
index 0cad8db59..0cad8db59 100644
--- a/src/mon_markings.c
+++ b/src/pokemon/mon_markings.c
diff --git a/src/pokeblock_feed.c b/src/pokemon/pokeblock_feed.c
index ccbb391af..5d6b215cd 100644
--- a/src/pokeblock_feed.c
+++ b/src/pokemon/pokeblock_feed.c
@@ -46,7 +46,7 @@ extern const u8 gBattleTerrainPalette_BattleTower[];
extern const struct CompressedSpriteSheet gUnknown_083F7F74;
extern const struct CompressedSpritePalette gUnknown_083F7F7C;
-bool8 sub_8040A3C(u16 species);
+bool8 IsPokeSpriteNotFlipped(u16 species);
// this file's functions
static void sub_8147B04(void);
@@ -626,7 +626,7 @@ static bool8 sub_8147B20(struct Pokemon* mon)
species = GetMonData(mon, MON_DATA_SPECIES2);
PiD = GetMonData(mon, MON_DATA_PERSONALITY);
TiD = GetMonData(mon, MON_DATA_OT_ID);
- palette = sub_80409C8(species, TiD, PiD);
+ palette = GetMonSpritePalStructFromOtIdPersonality(species, TiD, PiD);
LoadCompressedObjectPalette(palette);
GetMonSpriteTemplate_803C56C(palette->tag, 1);
ewram[0x1FFFF]++;
@@ -766,7 +766,7 @@ static u8 PokeblockFeed_CreatePokeSprite(struct Pokemon* mon)
gSprites[spriteID].data2 = species;
gSprites[spriteID].callback = SpriteCallbackDummy;
gPokeblockMonNotFlipped = 1;
- if (!sub_8040A3C(species))
+ if (!IsPokeSpriteNotFlipped(species))
{
gSprites[spriteID].affineAnims = sSpriteAffineAnimTable_84120EC;
gSprites[spriteID].oam.affineMode = 3;
diff --git a/src/pokedex.c b/src/pokemon/pokedex.c
index 603b5ae48..947dfd218 100644
--- a/src/pokedex.c
+++ b/src/pokemon/pokedex.c
@@ -1,4 +1,3 @@
-
#include "global.h"
#include "gba/m4a_internal.h"
#include "pokedex.h"
@@ -150,7 +149,6 @@ extern const u8 gUnknown_08E96738[];
extern const u8 gUnknown_08E96888[];
extern const u8 gUnknown_08E96994[];
extern const u8 gUnknown_08E9C6DC[];
-extern const u8 gUnknown_08D00524[];
extern const u8 gUnknown_08E96BD4[];
extern const u8 gUnknown_08E96ACC[];
extern const u8 gUnknown_08E96B58[];
@@ -186,7 +184,7 @@ static const u8 gUnknown_0839FA7C[] = INCBIN_U8("graphics/pokedex/noball.4bpp.lz
extern const u8 gUnknown_0839FA7C[];
#endif
-#include "data/pokedex_orders.h"
+#include "../data/pokedex_orders.h"
static const struct OamData gOamData_83A0404 =
{
.y = 160,
@@ -515,9 +513,9 @@ static const u8 gUnknown_083A05F1[] = {16, 8, 4, 2, 1};
const u8 gEmptySpacce_83A05F6[] = {0, 0}; // Padding, maybe?
static const u8 gUnknown_083A05F8[] = _("");
#if ENGLISH
-#include "data/pokedex_entries_en.h"
+#include "../data/pokedex_entries_en.h"
#elif GERMAN
-#include "data/pokedex_entries_de.h"
+#include "../data/pokedex_entries_de.h"
#endif
static const u16 gUnknown_083B4EC4[16] = {0};
static const u8 *const sMonFootprintTable[] =
@@ -1320,8 +1318,8 @@ void ResetPokedex(void)
{
gSaveBlock2.pokedex.owned[i] = 0;
gSaveBlock2.pokedex.seen[i] = 0;
- gSaveBlock1.unk938[i] = 0;
- gSaveBlock1.unk3A8C[i] = 0;
+ gSaveBlock1.dexSeen2[i] = 0;
+ gSaveBlock1.dexSeen3[i] = 0;
}
}
@@ -2030,8 +2028,8 @@ static void SortPokedex(u8 dexMode, u8 sortMode)
{
vars[2] = HoennToNationalOrder(i + 1);
gPokedexView->unk0[i].dexNum = vars[2];
- gPokedexView->unk0[i].seen = GetNationalPokedexFlag(vars[2], 0);
- gPokedexView->unk0[i].owned = GetNationalPokedexFlag(vars[2], 1);
+ gPokedexView->unk0[i].seen = GetSetPokedexFlag(vars[2], 0);
+ gPokedexView->unk0[i].owned = GetSetPokedexFlag(vars[2], 1);
if (gPokedexView->unk0[i].seen)
gPokedexView->pokemonListCount = i + 1;
}
@@ -2045,14 +2043,14 @@ static void SortPokedex(u8 dexMode, u8 sortMode)
for (i = 0; i < vars[0]; i++)
{
vars[2] = i + 1;
- if (GetNationalPokedexFlag(vars[2], 0))
+ if (GetSetPokedexFlag(vars[2], 0))
r10 = 1;
if (r10)
{
asm(""); //Needed to match for some reason
gPokedexView->unk0[r5].dexNum = vars[2];
- gPokedexView->unk0[r5].seen = GetNationalPokedexFlag(vars[2], 0);
- gPokedexView->unk0[r5].owned = GetNationalPokedexFlag(vars[2], 1);
+ gPokedexView->unk0[r5].seen = GetSetPokedexFlag(vars[2], 0);
+ gPokedexView->unk0[r5].owned = GetSetPokedexFlag(vars[2], 1);
if (gPokedexView->unk0[r5].seen)
gPokedexView->pokemonListCount = r5 + 1;
r5++;
@@ -2065,11 +2063,11 @@ static void SortPokedex(u8 dexMode, u8 sortMode)
{
vars[2] = gPokedexOrder_Alphabetical[i];
- if (NationalToHoennOrder(vars[2]) <= vars[0] && GetNationalPokedexFlag(vars[2], 0))
+ if (NationalToHoennOrder(vars[2]) <= vars[0] && GetSetPokedexFlag(vars[2], 0))
{
gPokedexView->unk0[gPokedexView->pokemonListCount].dexNum = vars[2];
gPokedexView->unk0[gPokedexView->pokemonListCount].seen = 1;
- gPokedexView->unk0[gPokedexView->pokemonListCount].owned = GetNationalPokedexFlag(vars[2], 1);
+ gPokedexView->unk0[gPokedexView->pokemonListCount].owned = GetSetPokedexFlag(vars[2], 1);
gPokedexView->pokemonListCount++;
}
}
@@ -2079,7 +2077,7 @@ static void SortPokedex(u8 dexMode, u8 sortMode)
{
vars[2] = gPokedexOrder_Weight[i];
- if (NationalToHoennOrder(vars[2]) <= vars[0] && GetNationalPokedexFlag(vars[2], 1))
+ if (NationalToHoennOrder(vars[2]) <= vars[0] && GetSetPokedexFlag(vars[2], 1))
{
gPokedexView->unk0[gPokedexView->pokemonListCount].dexNum = vars[2];
gPokedexView->unk0[gPokedexView->pokemonListCount].seen = 1;
@@ -2093,7 +2091,7 @@ static void SortPokedex(u8 dexMode, u8 sortMode)
{
vars[2] = gPokedexOrder_Weight[i];
- if (NationalToHoennOrder(vars[2]) <= vars[0] && GetNationalPokedexFlag(vars[2], 1))
+ if (NationalToHoennOrder(vars[2]) <= vars[0] && GetSetPokedexFlag(vars[2], 1))
{
gPokedexView->unk0[gPokedexView->pokemonListCount].dexNum = vars[2];
gPokedexView->unk0[gPokedexView->pokemonListCount].seen = 1;
@@ -2107,7 +2105,7 @@ static void SortPokedex(u8 dexMode, u8 sortMode)
{
vars[2] = gPokedexOrder_Height[i];
- if (NationalToHoennOrder(vars[2]) <= vars[0] && GetNationalPokedexFlag(vars[2], 1))
+ if (NationalToHoennOrder(vars[2]) <= vars[0] && GetSetPokedexFlag(vars[2], 1))
{
gPokedexView->unk0[gPokedexView->pokemonListCount].dexNum = vars[2];
gPokedexView->unk0[gPokedexView->pokemonListCount].seen = 1;
@@ -2121,7 +2119,7 @@ static void SortPokedex(u8 dexMode, u8 sortMode)
{
vars[2] = gPokedexOrder_Height[i];
- if (NationalToHoennOrder(vars[2]) <= vars[0] && GetNationalPokedexFlag(vars[2], 1))
+ if (NationalToHoennOrder(vars[2]) <= vars[0] && GetSetPokedexFlag(vars[2], 1))
{
gPokedexView->unk0[gPokedexView->pokemonListCount].dexNum = vars[2];
gPokedexView->unk0[gPokedexView->pokemonListCount].seen = 1;
@@ -3946,7 +3944,7 @@ static void sub_8090B8C(u8 taskId)
otId = ((u16)gTasks[taskId].data[13] << 16) | (u16)gTasks[taskId].data[12];
personality = ((u16)gTasks[taskId].data[15] << 16) | (u16)gTasks[taskId].data[14];
paletteNum = gSprites[gTasks[taskId].data[3]].oam.paletteNum;
- lzPaletteData = species_and_otid_get_pal(species, otId, personality);
+ lzPaletteData = GetMonSpritePalFromOtIdPersonality(species, otId, personality);
LoadCompressedPalette(lzPaletteData, 0x100 | paletteNum * 16, 32);
DestroyTask(taskId);
}
@@ -4008,79 +4006,79 @@ u16 GetPokedexHeightWeight(u16 dexNum, u8 data)
}
}
-s8 GetNationalPokedexFlag(u16 a, u8 b)
+s8 GetSetPokedexFlag(u16 nationalDexNo, u8 caseID)
{
u8 index;
u8 bit;
u8 mask;
s8 retVal;
- a--;
- index = a / 8;
- bit = a % 8;
+ nationalDexNo--;
+ index = nationalDexNo / 8;
+ bit = nationalDexNo % 8;
mask = 1 << bit;
retVal = 0;
- switch (b)
+ switch (caseID)
{
- case 0:
+ case FLAG_GET_SEEN:
if (gSaveBlock2.pokedex.seen[index] & mask)
{
- if ((gSaveBlock2.pokedex.seen[index] & mask) == (gSaveBlock1.unk938[index] & mask)
- && (gSaveBlock2.pokedex.seen[index] & mask) == (gSaveBlock1.unk3A8C[index] & mask))
+ if ((gSaveBlock2.pokedex.seen[index] & mask) == (gSaveBlock1.dexSeen2[index] & mask)
+ && (gSaveBlock2.pokedex.seen[index] & mask) == (gSaveBlock1.dexSeen3[index] & mask))
retVal = 1;
else
{
gSaveBlock2.pokedex.seen[index] &= ~mask;
- gSaveBlock1.unk938[index] &= ~mask;
- gSaveBlock1.unk3A8C[index] &= ~mask;
+ gSaveBlock1.dexSeen2[index] &= ~mask;
+ gSaveBlock1.dexSeen3[index] &= ~mask;
retVal = 0;
}
}
break;
- case 1:
+ case FLAG_GET_CAUGHT:
if (gSaveBlock2.pokedex.owned[index] & mask)
{
if ((gSaveBlock2.pokedex.owned[index] & mask) == (gSaveBlock2.pokedex.seen[index] & mask)
- && (gSaveBlock2.pokedex.owned[index] & mask) == (gSaveBlock1.unk938[index] & mask)
- && (gSaveBlock2.pokedex.owned[index] & mask) == (gSaveBlock1.unk3A8C[index] & mask))
+ && (gSaveBlock2.pokedex.owned[index] & mask) == (gSaveBlock1.dexSeen2[index] & mask)
+ && (gSaveBlock2.pokedex.owned[index] & mask) == (gSaveBlock1.dexSeen3[index] & mask))
retVal = 1;
else
{
gSaveBlock2.pokedex.owned[index] &= ~mask;
gSaveBlock2.pokedex.seen[index] &= ~mask;
- gSaveBlock1.unk938[index] &= ~mask;
- gSaveBlock1.unk3A8C[index] &= ~mask;
+ gSaveBlock1.dexSeen2[index] &= ~mask;
+ gSaveBlock1.dexSeen3[index] &= ~mask;
retVal = 0;
}
}
break;
- case 2:
+ case FLAG_SET_SEEN:
gSaveBlock2.pokedex.seen[index] |= mask;
- gSaveBlock1.unk938[index] |= mask;
- gSaveBlock1.unk3A8C[index] |= mask;
+ gSaveBlock1.dexSeen2[index] |= mask;
+ gSaveBlock1.dexSeen3[index] |= mask;
break;
- case 3:
+ case FLAG_SET_CAUGHT:
gSaveBlock2.pokedex.owned[index] |= mask;
break;
}
return retVal;
}
-u16 GetNationalPokedexCount(u8 a)
+u16 GetNationalPokedexCount(u8 caseID)
{
u16 count = 0;
u16 i;
for (i = 0; i < NATIONAL_DEX_COUNT; i++)
{
- switch (a)
+ switch (caseID)
{
- case 0:
- if (GetNationalPokedexFlag(i + 1, 0) != 0)
+ case FLAG_GET_SEEN:
+ if (GetSetPokedexFlag(i + 1, FLAG_GET_SEEN))
count++;
break;
- case 1:
- if (GetNationalPokedexFlag(i + 1, 1) != 0)
+ case FLAG_GET_CAUGHT:
+ if (GetSetPokedexFlag(i + 1, FLAG_GET_CAUGHT))
count++;
break;
}
@@ -4088,21 +4086,21 @@ u16 GetNationalPokedexCount(u8 a)
return count;
}
-u16 GetHoennPokedexCount(u8 a)
+u16 GetHoennPokedexCount(u8 caseID)
{
u16 count = 0;
u16 i;
for (i = 0; i < 202; i++)
{
- switch (a)
+ switch (caseID)
{
- case 0:
- if (GetNationalPokedexFlag(HoennToNationalOrder(i + 1), 0) != 0)
+ case FLAG_GET_SEEN:
+ if (GetSetPokedexFlag(HoennToNationalOrder(i + 1), FLAG_GET_SEEN))
count++;
break;
- case 1:
- if (GetNationalPokedexFlag(HoennToNationalOrder(i + 1), 1) != 0)
+ case FLAG_GET_CAUGHT:
+ if (GetSetPokedexFlag(HoennToNationalOrder(i + 1), FLAG_GET_CAUGHT))
count++;
break;
}
@@ -4116,7 +4114,7 @@ bool8 sub_8090FC0(void)
for (i = 0; i < 200; i++)
{
- if (GetNationalPokedexFlag(HoennToNationalOrder(i + 1), 1) == 0)
+ if (!GetSetPokedexFlag(HoennToNationalOrder(i + 1), FLAG_GET_CAUGHT))
return FALSE;
}
return TRUE;
@@ -4128,17 +4126,17 @@ u16 sub_8090FF4(void)
for (i = 0; i < 150; i++)
{
- if (GetNationalPokedexFlag(i + 1, 1) == 0)
+ if (GetSetPokedexFlag(i + 1, 1) == 0)
return 0;
}
for (i = 152; i < 250; i++)
{
- if (GetNationalPokedexFlag(i + 1, 1) == 0)
+ if (GetSetPokedexFlag(i + 1, 1) == 0)
return 0;
}
for (i = 252; i < 384; i++)
{
- if (GetNationalPokedexFlag(i + 1, 1) == 0)
+ if (GetSetPokedexFlag(i + 1, 1) == 0)
return 0;
}
return 1;
diff --git a/src/pokedex_cry_screen.c b/src/pokemon/pokedex_cry_screen.c
index 92fd832fc..92fd832fc 100644
--- a/src/pokedex_cry_screen.c
+++ b/src/pokemon/pokedex_cry_screen.c
diff --git a/src/pokemon_1.c b/src/pokemon/pokemon_1.c
index fd7916ee6..1d597cb17 100644
--- a/src/pokemon_1.c
+++ b/src/pokemon/pokemon_1.c
@@ -468,10 +468,10 @@ void CalculateMonStats(struct Pokemon *mon)
SetMonData(mon, MON_DATA_HP, (u8 *)&currentHP);
}
-void sub_803B4B4(struct Pokemon *src, struct Pokemon *dest)
+void sub_803B4B4(const struct BoxPokemon *src, struct Pokemon *dest)
{
u32 value = 0;
- memcpy(&dest->box, &src->box, sizeof(struct BoxPokemon));
+ dest->box = *src;
SetMonData(dest, MON_DATA_STATUS, (u8 *)&value);
SetMonData(dest, MON_DATA_HP, (u8 *)&value);
SetMonData(dest, MON_DATA_MAX_HP, (u8 *)&value);
diff --git a/src/pokemon_2.c b/src/pokemon/pokemon_2.c
index f02ce6170..f02ce6170 100644
--- a/src/pokemon_2.c
+++ b/src/pokemon/pokemon_2.c
diff --git a/src/pokemon_3.c b/src/pokemon/pokemon_3.c
index 263b8b746..f3d0bee03 100644
--- a/src/pokemon_3.c
+++ b/src/pokemon/pokemon_3.c
@@ -278,7 +278,7 @@ u16 GetEvolutionTargetSpecies(struct Pokemon *mon, u8 type, u16 evolutionItem)
else
holdEffect = ItemId_GetHoldEffect(heldItem);
- if (holdEffect == 38 && type != 3)
+ if (holdEffect == HOLD_EFFECT_PREVENT_EVOLVE && type != 3)
return 0;
switch (type)
@@ -1096,7 +1096,7 @@ void ClearBattleMonForms(void)
gBattleMonForms[i] = 0;
}
-u16 sub_8040728(void)
+u16 GetBGM_ForBattle(void)
{
if (gBattleTypeFlags & BATTLE_TYPE_KYOGRE_GROUDON)
return BGM_BATTLE34;
@@ -1137,7 +1137,7 @@ void sub_80408BC(void)
{
ResetMapMusic();
m4aMPlayAllStop();
- PlayBGM(sub_8040728());
+ PlayBGM(GetBGM_ForBattle());
}
void current_map_music_set__default_for_battle(u16 song)
@@ -1147,15 +1147,15 @@ void current_map_music_set__default_for_battle(u16 song)
if (song)
PlayNewMapMusic(song);
else
- PlayNewMapMusic(sub_8040728());
+ PlayNewMapMusic(GetBGM_ForBattle());
}
-const u8 *pokemon_get_pal(struct Pokemon *mon)
+const u8 *GetMonSpritePal(struct Pokemon *mon)
{
u16 species = GetMonData(mon, MON_DATA_SPECIES2, 0);
u32 otId = GetMonData(mon, MON_DATA_OT_ID, 0);
u32 personality = GetMonData(mon, MON_DATA_PERSONALITY, 0);
- return species_and_otid_get_pal(species, otId, personality);
+ return GetMonSpritePalFromOtIdPersonality(species, otId, personality);
}
//Extracts the upper 16 bits of a 32-bit number
@@ -1164,7 +1164,7 @@ const u8 *pokemon_get_pal(struct Pokemon *mon)
//Extracts the lower 16 bits of a 32-bit number
#define LOHALF(n) ((n) & 0xFFFF)
-const u8 *species_and_otid_get_pal(u16 species, u32 otId, u32 personality)
+const u8 *GetMonSpritePalFromOtIdPersonality(u16 species, u32 otId, u32 personality)
{
u32 shinyValue;
@@ -1178,15 +1178,15 @@ const u8 *species_and_otid_get_pal(u16 species, u32 otId, u32 personality)
return gMonPaletteTable[species].data;
}
-const struct CompressedSpritePalette *sub_8040990(struct Pokemon *mon)
+const struct CompressedSpritePalette *GetMonSpritePalStruct(struct Pokemon *mon)
{
u16 species = GetMonData(mon, MON_DATA_SPECIES2, 0);
u32 otId = GetMonData(mon, MON_DATA_OT_ID, 0);
u32 personality = GetMonData(mon, MON_DATA_PERSONALITY, 0);
- return sub_80409C8(species, otId, personality);
+ return GetMonSpritePalStructFromOtIdPersonality(species, otId, personality);
}
-const struct CompressedSpritePalette *sub_80409C8(u16 species, u32 otId , u32 personality)
+const struct CompressedSpritePalette *GetMonSpritePalStructFromOtIdPersonality(u16 species, u32 otId , u32 personality)
{
u32 shinyValue;
@@ -1208,9 +1208,9 @@ bool32 IsHMMove2(u16 move)
return FALSE;
}
-bool8 sub_8040A3C(u16 species)
+bool8 IsPokeSpriteNotFlipped(u16 species)
{
- return gBaseStats[species].unk19_7;
+ return gBaseStats[species].noFlip;
}
s8 sub_8040A54(struct Pokemon *mon, u8 a2)
diff --git a/src/pokemon_data.c b/src/pokemon/pokemon_data.c
index 6414134fb..6414134fb 100644
--- a/src/pokemon_data.c
+++ b/src/pokemon/pokemon_data.c
diff --git a/src/pokemon_icon.c b/src/pokemon/pokemon_icon.c
index 9bb3386e1..9bb3386e1 100644
--- a/src/pokemon_icon.c
+++ b/src/pokemon/pokemon_icon.c
diff --git a/src/pokemon_menu.c b/src/pokemon/pokemon_menu.c
index 5baf180a1..5baf180a1 100644
--- a/src/pokemon_menu.c
+++ b/src/pokemon/pokemon_menu.c
diff --git a/src/pokemon_size_record.c b/src/pokemon/pokemon_size_record.c
index f2222bd3b..f2222bd3b 100644
--- a/src/pokemon_size_record.c
+++ b/src/pokemon/pokemon_size_record.c
diff --git a/src/pokemon_storage_system.c b/src/pokemon/pokemon_storage_system.c
index 5e97523e2..5e97523e2 100644
--- a/src/pokemon_storage_system.c
+++ b/src/pokemon/pokemon_storage_system.c
diff --git a/src/pokemon_summary_screen.c b/src/pokemon/pokemon_summary_screen.c
index 00a0bea29..00a0bea29 100644
--- a/src/pokemon_summary_screen.c
+++ b/src/pokemon/pokemon_summary_screen.c
diff --git a/src/rom6.c b/src/rom6.c
index 3a5071034..b91a9b2c0 100644
--- a/src/rom6.c
+++ b/src/rom6.c
@@ -169,7 +169,7 @@ int SetUpFieldMove_Dig(void)
static void sub_810B5D8(void)
{
- sub_8053014();
+ Overworld_ResetStateAfterDigEscRope();
FieldEffectStart(FLDEFF_USE_DIG);
gFieldEffectArguments[0] = gLastFieldPokeMenuOpened;
}
diff --git a/src/rom_8077ABC.c b/src/rom_8077ABC.c
index 6e5926a6a..ef9eb36a8 100644
--- a/src/rom_8077ABC.c
+++ b/src/rom_8077ABC.c
@@ -102,8 +102,8 @@ extern u32 gTransformPersonalities[NUM_BATTLE_SLOTS];
extern u8 gBattleMonForms[NUM_BATTLE_SLOTS];
extern u16 gUnknown_0202F7CA[];
extern u8 gBattleMonSprites[NUM_BATTLE_SLOTS];
-extern u8 gBattleAnimPlayerMonIndex;
-extern u8 gBattleAnimEnemyMonIndex;
+extern u8 gBattleAnimBankAttacker;
+extern u8 gBattleAnimBankTarget;
extern s16 gBattleAnimArgs[8];
extern u8 gBanksBySide[NUM_BATTLE_SLOTS];
extern u8 gNoOfAllBanks; // gNumBattleMons?
@@ -404,43 +404,43 @@ u8 sub_8077FC0(u8 slot) {
return r6;
}
-u8 obj_id_for_side_relative_to_move(u8 a1) {
+u8 GetAnimBankSpriteId(u8 whichBank) {
u8 *sprites;
- if (a1 == 0) {
- if (sub_8078874(gBattleAnimPlayerMonIndex)) {
+ if (whichBank == ANIM_BANK_ATK) {
+ if (AnimBankSpriteExists(gBattleAnimBankAttacker)) {
sprites = gBattleMonSprites;
- return sprites[gBattleAnimPlayerMonIndex];
+ return sprites[gBattleAnimBankAttacker];
} else {
return 0xff;
}
- } else if (a1 == 1) {
- if (sub_8078874(gBattleAnimEnemyMonIndex)) {
+ } else if (whichBank == ANIM_BANK_DEF) {
+ if (AnimBankSpriteExists(gBattleAnimBankTarget)) {
sprites = gBattleMonSprites;
- return sprites[gBattleAnimEnemyMonIndex];
+ return sprites[gBattleAnimBankTarget];
} else {
return 0xff;
}
- } else if (a1 == 2) {
- if (!b_side_obj__get_some_boolean(gBattleAnimPlayerMonIndex ^ 2)) {
+ } else if (whichBank == ANIM_BANK_ATK_PARTNER) {
+ if (!IsAnimBankSpriteVisible(gBattleAnimBankAttacker ^ 2)) {
return 0xff;
} else {
- return gBattleMonSprites[gBattleAnimPlayerMonIndex ^ 2];
+ return gBattleMonSprites[gBattleAnimBankAttacker ^ 2];
}
} else {
- if (b_side_obj__get_some_boolean(gBattleAnimEnemyMonIndex ^ 2)) {
- return gBattleMonSprites[gBattleAnimEnemyMonIndex ^ 2];
+ if (IsAnimBankSpriteVisible(gBattleAnimBankTarget ^ 2)) {
+ return gBattleMonSprites[gBattleAnimBankTarget ^ 2];
} else {
return 0xff;
}
}
}
-void oamt_set_x3A_32(struct Sprite *sprite, void (*callback)(struct Sprite*)) {
+void StoreSpriteCallbackInData6(struct Sprite *sprite, void (*callback)(struct Sprite*)) {
sprite->data6 = (u32)(callback) & 0xffff;
sprite->data7 = (u32)(callback) >> 16;
}
-void sub_8078104(struct Sprite *sprite) {
+void SetCallbackToStoredInData6(struct Sprite *sprite) {
u32 callback = (u16)sprite->data6 | (sprite->data7 << 16);
sprite->callback = (void (*)(struct Sprite *))callback;
}
@@ -457,7 +457,7 @@ void sub_8078114(struct Sprite *sprite) {
}
sprite->data3--;
} else {
- sub_8078104(sprite);
+ SetCallbackToStoredInData6(sprite);
}
}
@@ -474,7 +474,7 @@ void sub_8078174(struct Sprite *sprite) {
}
sprite->data3--;
} else {
- sub_8078104(sprite);
+ SetCallbackToStoredInData6(sprite);
}
}
@@ -496,7 +496,7 @@ void unref_sub_80781F0(struct Sprite *sprite) {
}
sprite->data3--;
} else {
- sub_8078104(sprite);
+ SetCallbackToStoredInData6(sprite);
}
}
@@ -512,7 +512,7 @@ void sub_8078278(struct Sprite *sprite) {
}
sprite->data3--;
} else {
- sub_8078104(sprite);
+ SetCallbackToStoredInData6(sprite);
}
}
@@ -520,7 +520,7 @@ void sub_80782D8(struct Sprite *sprite) {
if (sprite->data0 > 0) {
sprite->data0--;
} else {
- sub_8078104(sprite);
+ SetCallbackToStoredInData6(sprite);
}
}
@@ -549,7 +549,7 @@ void sub_8078364(struct Sprite *sprite) {
sprite->pos2.x += sprite->data1;
sprite->pos2.y += sprite->data2;
} else {
- sub_8078104(sprite);
+ SetCallbackToStoredInData6(sprite);
}
}
@@ -561,7 +561,7 @@ void sub_8078394(struct Sprite *sprite) {
sprite->pos2.x = sprite->data3 >> 8;
sprite->pos2.y = sprite->data4 >> 8;
} else {
- sub_8078104(sprite);
+ SetCallbackToStoredInData6(sprite);
}
}
@@ -573,7 +573,7 @@ void sub_80783D0(struct Sprite *sprite) {
sprite->pos2.x = sprite->data3 >> 8;
sprite->pos2.y = sprite->data4 >> 8;
} else {
- sub_8078104(sprite);
+ SetCallbackToStoredInData6(sprite);
}
UpdateMonIconFrame(sprite);
}
@@ -581,8 +581,8 @@ void sub_80783D0(struct Sprite *sprite) {
void unref_sub_8078414(struct Sprite *sprite) {
sprite->data1 = sprite->pos1.x + sprite->pos2.x;
sprite->data3 = sprite->pos1.y + sprite->pos2.y;
- sprite->data2 = sub_8077ABC(gBattleAnimEnemyMonIndex, 2);
- sprite->data4 = sub_8077ABC(gBattleAnimEnemyMonIndex, 3);
+ sprite->data2 = sub_8077ABC(gBattleAnimBankTarget, 2);
+ sprite->data4 = sub_8077ABC(gBattleAnimBankTarget, 3);
sprite->callback = sub_80782F8;
}
@@ -592,7 +592,7 @@ void sub_8078458(struct Sprite *sprite) {
gSprites[sprite->data3].pos2.x += sprite->data1;
gSprites[sprite->data3].pos2.y += sprite->data2;
} else {
- sub_8078104(sprite);
+ SetCallbackToStoredInData6(sprite);
}
}
@@ -604,7 +604,7 @@ void sub_80784A8(struct Sprite *sprite) {
gSprites[sprite->data5].pos2.x = sprite->data3 >> 8;
gSprites[sprite->data5].pos2.y = sprite->data4 >> 8;
} else {
- sub_8078104(sprite);
+ SetCallbackToStoredInData6(sprite);
}
}
@@ -621,7 +621,7 @@ void sub_8078504(struct Sprite *sprite) {
}
}
} else {
- sub_8078104(sprite);
+ SetCallbackToStoredInData6(sprite);
}
}
@@ -633,8 +633,8 @@ void move_anim_8074EE0(struct Sprite *sprite) {
void unref_sub_8078588(struct Sprite *sprite) {
sprite->data1 = sprite->pos1.x + sprite->pos2.x;
sprite->data3 = sprite->pos1.y + sprite->pos2.y;
- sprite->data2 = sub_8077ABC(gBattleAnimPlayerMonIndex, 2);
- sprite->data4 = sub_8077ABC(gBattleAnimPlayerMonIndex, 3);
+ sprite->data2 = sub_8077ABC(gBattleAnimBankAttacker, 2);
+ sprite->data4 = sub_8077ABC(gBattleAnimBankAttacker, 3);
sprite->callback = sub_80782F8;
}
@@ -645,13 +645,13 @@ void unref_sub_80785CC(struct Sprite *sprite) {
void sub_80785E4(struct Sprite *sprite) {
if (sprite->affineAnimEnded) {
- sub_8078104(sprite);
+ SetCallbackToStoredInData6(sprite);
}
}
void sub_8078600(struct Sprite *sprite) {
if (sprite->animEnded) {
- sub_8078104(sprite);
+ SetCallbackToStoredInData6(sprite);
}
}
@@ -668,19 +668,19 @@ void sub_8078634(u8 task) {
}
void sub_8078650(struct Sprite *sprite) {
- sprite->pos1.x = sub_8077ABC(gBattleAnimPlayerMonIndex, 2);
- sprite->pos1.y = sub_8077ABC(gBattleAnimPlayerMonIndex, 3);
+ sprite->pos1.x = sub_8077ABC(gBattleAnimBankAttacker, 2);
+ sprite->pos1.y = sub_8077ABC(gBattleAnimBankAttacker, 3);
}
void sub_807867C(struct Sprite *sprite, s16 a2) {
- u16 v1 = sub_8077ABC(gBattleAnimPlayerMonIndex, 0);
- u16 v2 = sub_8077ABC(gBattleAnimEnemyMonIndex, 0);
+ u16 v1 = sub_8077ABC(gBattleAnimBankAttacker, 0);
+ u16 v2 = sub_8077ABC(gBattleAnimBankTarget, 0);
if (v1 > v2) {
sprite->pos1.x -= a2;
} else if (v1 < v2) {
sprite->pos1.x += a2;
} else {
- if (GetBankSide(gBattleAnimPlayerMonIndex)) {
+ if (GetBankSide(gBattleAnimBankAttacker)) {
sprite->pos1.x -= a2;
} else {
sprite->pos1.x += a2;
@@ -714,8 +714,8 @@ void oamt_add_pos2_onto_pos1(struct Sprite *sprite) {
void sub_8078764(struct Sprite *sprite, u8 a2) {
if (!a2) {
- sprite->pos1.x = sub_8077EE4(gBattleAnimEnemyMonIndex, 0);
- sprite->pos1.y = sub_8077EE4(gBattleAnimEnemyMonIndex, 1);
+ sprite->pos1.x = sub_8077EE4(gBattleAnimBankTarget, 0);
+ sprite->pos1.y = sub_8077EE4(gBattleAnimBankTarget, 1);
}
sub_807867C(sprite, gBattleAnimArgs[0]);
sprite->pos1.y += gBattleAnimArgs[1];
@@ -723,11 +723,11 @@ void sub_8078764(struct Sprite *sprite, u8 a2) {
void sub_80787B0(struct Sprite *sprite, u8 a2) {
if (!a2) {
- sprite->pos1.x = sub_8077EE4(gBattleAnimPlayerMonIndex, 0);
- sprite->pos1.y = sub_8077EE4(gBattleAnimPlayerMonIndex, 1);
+ sprite->pos1.x = sub_8077EE4(gBattleAnimBankAttacker, 0);
+ sprite->pos1.y = sub_8077EE4(gBattleAnimBankAttacker, 1);
} else {
- sprite->pos1.x = sub_8077EE4(gBattleAnimPlayerMonIndex, 2);
- sprite->pos1.y = sub_8077EE4(gBattleAnimPlayerMonIndex, 3);
+ sprite->pos1.x = sub_8077EE4(gBattleAnimBankAttacker, 2);
+ sprite->pos1.y = sub_8077EE4(gBattleAnimBankAttacker, 3);
}
sub_807867C(sprite, gBattleAnimArgs[0]);
sprite->pos1.y += gBattleAnimArgs[1];
@@ -751,12 +751,12 @@ u8 GetBankByPlayerAI(u8 slot) {
return i;
}
-bool8 sub_8078874(u8 slot) {
+bool8 AnimBankSpriteExists(u8 slot) {
if (IsContest()) {
- if (gBattleAnimPlayerMonIndex == slot) {
+ if (gBattleAnimBankAttacker == slot) {
return TRUE;
}
- if (gBattleAnimEnemyMonIndex == slot) {
+ if (gBattleAnimBankTarget == slot) {
return TRUE;
}
return FALSE;
@@ -798,7 +798,7 @@ void sub_8078954(struct Struct_sub_8078914 *unk) {
unk->field_0 = (u8 *)0x6008000;
unk->field_4 = (u8 *)0x600f000;
unk->field_8 = 0xe;
- } else if (GetBankIdentity_permutated(gBattleAnimPlayerMonIndex) == 1) {
+ } else if (GetBankIdentity_permutated(gBattleAnimBankAttacker) == 1) {
unk->field_0 = (u8 *)0x6004000;
unk->field_4 = (u8 *)0x600e000;
unk->field_8 = 0x8;
@@ -908,7 +908,7 @@ bool8 sub_8078B5C(struct Sprite *sprite) {
void sub_8078BB8(struct Sprite *sprite) {
if (sub_8078B5C(sprite)) {
- sub_8078104(sprite);
+ SetCallbackToStoredInData6(sprite);
}
}
@@ -988,7 +988,7 @@ bool8 sub_8078CE8(struct Sprite *sprite) {
void sub_8078D44(struct Sprite *sprite) {
if (sub_8078CE8(sprite)) {
- sub_8078104(sprite);
+ SetCallbackToStoredInData6(sprite);
}
}
@@ -1026,7 +1026,7 @@ void obj_id_set_rotscale(u8 sprite, s16 xScale, s16 yScale, u16 rotation) {
bool8 sub_8078E38() {
if (IsContest()) {
- if (gSprites[obj_id_for_side_relative_to_move(0)].data2 == 0xc9 /* XXX SPECIES_UNOWN? */) {
+ if (gSprites[GetAnimBankSpriteId(0)].data2 == 0xc9 /* XXX SPECIES_UNOWN? */) {
return FALSE;
}
return TRUE;
@@ -1037,7 +1037,7 @@ bool8 sub_8078E38() {
void sub_8078E70(u8 sprite, u8 a2) {
struct Struct_2017810 *unk;
u8 r7 = gSprites[sprite].data0;
- if (IsContest() || b_side_obj__get_some_boolean(r7)) {
+ if (IsContest() || IsAnimBankSpriteVisible(r7)) {
gSprites[sprite].invisible = FALSE;
}
gSprites[sprite].oam.objMode = a2;
@@ -1098,12 +1098,12 @@ void sub_8079098(struct Sprite *sprite) {
CalcCenterToCornerVec(sprite, sprite->oam.shape, sprite->oam.size, sprite->oam.affineMode);
}
-u16 sub_80790D8(s16 a, s16 b) {
+static u16 ArcTan2_(s16 a, s16 b) {
return ArcTan2(a, b);
}
u16 sub_80790F0(s16 a, s16 b) {
- u16 var = sub_80790D8(a, b);
+ u16 var = ArcTan2_(a, b);
return -var;
}
@@ -1142,22 +1142,22 @@ u32 sub_80791A8(u8 a1, u8 a2, u8 a3, u8 a4, u8 a5, u8 a6, u8 a7) {
}
}
if (a2) {
- shift = gBattleAnimPlayerMonIndex + 16;
+ shift = gBattleAnimBankAttacker + 16;
var |= 1 << shift;
}
if (a3) {
- shift = gBattleAnimEnemyMonIndex + 16;
+ shift = gBattleAnimBankTarget + 16;
var |= 1 << shift;
}
if (a4) {
- if (b_side_obj__get_some_boolean(gBattleAnimPlayerMonIndex ^ 2)) {
- shift = (gBattleAnimPlayerMonIndex ^ 2) + 16;
+ if (IsAnimBankSpriteVisible(gBattleAnimBankAttacker ^ 2)) {
+ shift = (gBattleAnimBankAttacker ^ 2) + 16;
var |= 1 << shift;
}
}
if (a5) {
- if (b_side_obj__get_some_boolean(gBattleAnimEnemyMonIndex ^ 2)) {
- shift = (gBattleAnimEnemyMonIndex ^ 2) + 16;
+ if (IsAnimBankSpriteVisible(gBattleAnimBankTarget ^ 2)) {
+ shift = (gBattleAnimBankTarget ^ 2) + 16;
var |= 1 << shift;
}
}
@@ -1186,24 +1186,24 @@ u32 sub_80792C0(u8 a1, u8 a2, u8 a3, u8 a4) {
}
} else {
if (a1) {
- if (b_side_obj__get_some_boolean(GetBankByPlayerAI(0))) {
+ if (IsAnimBankSpriteVisible(GetBankByPlayerAI(0))) {
var |= 1 << (GetBankByPlayerAI(0) + 16);
}
}
if (a2) {
- if (b_side_obj__get_some_boolean(GetBankByPlayerAI(2))) {
+ if (IsAnimBankSpriteVisible(GetBankByPlayerAI(2))) {
shift = GetBankByPlayerAI(2) + 16;
var |= 1 << shift;
}
}
if (a3) {
- if (b_side_obj__get_some_boolean(GetBankByPlayerAI(1))) {
+ if (IsAnimBankSpriteVisible(GetBankByPlayerAI(1))) {
shift = GetBankByPlayerAI(1) + 16;
var |= 1 << shift;
}
}
if (a4) {
- if (b_side_obj__get_some_boolean(GetBankByPlayerAI(3))) {
+ if (IsAnimBankSpriteVisible(GetBankByPlayerAI(3))) {
shift = GetBankByPlayerAI(3) + 16;
var |= 1 << shift;
}
@@ -1254,24 +1254,24 @@ void sub_807941C(struct Sprite *sprite) {
v2 = 1;
}
sub_80787B0(sprite, v1);
- if (GetBankSide(gBattleAnimPlayerMonIndex)) {
+ if (GetBankSide(gBattleAnimBankAttacker)) {
gBattleAnimArgs[2] = -gBattleAnimArgs[2];
}
sprite->data0 = gBattleAnimArgs[4];
- sprite->data2 = sub_8077ABC(gBattleAnimEnemyMonIndex, 2) + gBattleAnimArgs[2];
- sprite->data4 = sub_8077ABC(gBattleAnimEnemyMonIndex, v2) + gBattleAnimArgs[3];
+ sprite->data2 = sub_8077ABC(gBattleAnimBankTarget, 2) + gBattleAnimArgs[2];
+ sprite->data4 = sub_8077ABC(gBattleAnimBankTarget, v2) + gBattleAnimArgs[3];
sprite->callback = sub_8078B34;
- oamt_set_x3A_32(sprite, move_anim_8072740);
+ StoreSpriteCallbackInData6(sprite, move_anim_8072740);
}
void sub_80794A8(struct Sprite *sprite) {
sub_80787B0(sprite, 1);
- if (GetBankSide(gBattleAnimPlayerMonIndex)) {
+ if (GetBankSide(gBattleAnimBankAttacker)) {
gBattleAnimArgs[2] = -gBattleAnimArgs[2];
}
sprite->data0 = gBattleAnimArgs[4];
- sprite->data2 = sub_8077ABC(gBattleAnimEnemyMonIndex, 2) + gBattleAnimArgs[2];
- sprite->data4 = sub_8077ABC(gBattleAnimEnemyMonIndex, 3) + gBattleAnimArgs[3];
+ sprite->data2 = sub_8077ABC(gBattleAnimBankTarget, 2) + gBattleAnimArgs[2];
+ sprite->data4 = sub_8077ABC(gBattleAnimBankTarget, 3) + gBattleAnimArgs[3];
sprite->data5 = gBattleAnimArgs[5];
sub_80786EC(sprite);
sprite->callback = sub_8079518;
@@ -1294,12 +1294,12 @@ void sub_8079534(struct Sprite *sprite) {
}
if (!gBattleAnimArgs[5]) {
sub_80787B0(sprite, r4);
- slot = gBattleAnimPlayerMonIndex;
+ slot = gBattleAnimBankAttacker;
} else {
sub_8078764(sprite, r4);
- slot = gBattleAnimEnemyMonIndex;
+ slot = gBattleAnimBankTarget;
}
- if (GetBankSide(gBattleAnimPlayerMonIndex)) {
+ if (GetBankSide(gBattleAnimBankAttacker)) {
gBattleAnimArgs[2] = -gBattleAnimArgs[2];
}
sub_8078764(sprite, r4);
@@ -1307,12 +1307,12 @@ void sub_8079534(struct Sprite *sprite) {
sprite->data2 = sub_8077ABC(slot, 2) + gBattleAnimArgs[2];
sprite->data4 = sub_8077ABC(slot, r7) + gBattleAnimArgs[3];
sprite->callback = sub_8078B34;
- oamt_set_x3A_32(sprite, move_anim_8072740);
+ StoreSpriteCallbackInData6(sprite, move_anim_8072740);
}
s16 duplicate_obj_of_side_rel2move_in_transparent_mode(u8 a1) {
u16 i;
- u8 sprite = obj_id_for_side_relative_to_move(a1);
+ u8 sprite = GetAnimBankSpriteId(a1);
if (sprite != 0xff) {
for (i = 0; i < 0x40; i++) {
if (gSprites[i].inUse) {
@@ -1382,7 +1382,7 @@ void sub_80796F8(u8 taskId) {
}
void sub_8079790(u8 task) {
- u8 sprite = obj_id_for_side_relative_to_move(gBattleAnimArgs[0]);
+ u8 sprite = GetAnimBankSpriteId(gBattleAnimArgs[0]);
if (sprite == 0xff) {
DestroyAnimVisualTask(task);
return;
@@ -1626,24 +1626,24 @@ void sub_8079CEC(u8 task) {
}
void unref_sub_8079D20(u8 priority) {
- if (b_side_obj__get_some_boolean(gBattleAnimEnemyMonIndex)) {
- gSprites[gBattleMonSprites[gBattleAnimEnemyMonIndex]].oam.priority = priority;
+ if (IsAnimBankSpriteVisible(gBattleAnimBankTarget)) {
+ gSprites[gBattleMonSprites[gBattleAnimBankTarget]].oam.priority = priority;
}
- if (b_side_obj__get_some_boolean(gBattleAnimPlayerMonIndex)) {
- gSprites[gBattleMonSprites[gBattleAnimPlayerMonIndex]].oam.priority = priority;
+ if (IsAnimBankSpriteVisible(gBattleAnimBankAttacker)) {
+ gSprites[gBattleMonSprites[gBattleAnimBankAttacker]].oam.priority = priority;
}
- if (b_side_obj__get_some_boolean(gBattleAnimEnemyMonIndex ^ 2)) {
- gSprites[gBattleMonSprites[gBattleAnimEnemyMonIndex ^ 2]].oam.priority = priority;
+ if (IsAnimBankSpriteVisible(gBattleAnimBankTarget ^ 2)) {
+ gSprites[gBattleMonSprites[gBattleAnimBankTarget ^ 2]].oam.priority = priority;
}
- if (b_side_obj__get_some_boolean(gBattleAnimPlayerMonIndex ^ 2)) {
- gSprites[gBattleMonSprites[gBattleAnimPlayerMonIndex ^ 2]].oam.priority = priority;
+ if (IsAnimBankSpriteVisible(gBattleAnimBankAttacker ^ 2)) {
+ gSprites[gBattleMonSprites[gBattleAnimBankAttacker ^ 2]].oam.priority = priority;
}
}
void sub_8079E24() {
int i;
for (i = 0; i < gNoOfAllBanks; i++) {
- if (b_side_obj__get_some_boolean(i)) {
+ if (IsAnimBankSpriteVisible(i)) {
gSprites[gBattleMonSprites[i]].subpriority = sub_8079E90(i);
gSprites[gBattleMonSprites[i]].oam.priority = 2;
}
@@ -1708,7 +1708,7 @@ u8 sub_8079F44(u16 species, u8 isBackpic, u8 a3, s16 a4, s16 a5, u8 a6, u32 a7,
u16 sheet = LoadSpriteSheet(&gUnknown_0837F5E0[a3]);
u16 palette = AllocSpritePalette(gSpriteTemplate_837F5B0[a3].paletteTag);
if (!isBackpic) {
- LoadCompressedPalette(species_and_otid_get_pal(species, a8, a7), (palette * 0x10) + 0x100, 0x20);
+ LoadCompressedPalette(GetMonSpritePalFromOtIdPersonality(species, a8, a7), (palette * 0x10) + 0x100, 0x20);
LoadSpecialPokePic(
&gMonFrontPicTable[species],
gMonFrontPicCoords[species].coords,
@@ -1721,7 +1721,7 @@ u8 sub_8079F44(u16 species, u8 isBackpic, u8 a3, s16 a4, s16 a5, u8 a6, u32 a7,
);
} else {
LoadCompressedPalette(
- species_and_otid_get_pal(species, a8, a7), (palette * 0x10) + 0x100, 0x20);
+ GetMonSpritePalFromOtIdPersonality(species, a8, a7), (palette * 0x10) + 0x100, 0x20);
LoadSpecialPokePic(
&gMonBackPicTable[species],
gMonBackPicCoords[species].coords,
@@ -1894,7 +1894,7 @@ u8 sub_807A4A0(int a1, u8 sprite, int a3) {
void sub_807A544(struct Sprite *sprite) {
sub_8078650(sprite);
- if (GetBankSide(gBattleAnimPlayerMonIndex)) {
+ if (GetBankSide(gBattleAnimBankAttacker)) {
sprite->pos1.x -= gBattleAnimArgs[0];
gBattleAnimArgs[3] = -gBattleAnimArgs[3];
sprite->hFlip = TRUE;
@@ -1906,12 +1906,12 @@ void sub_807A544(struct Sprite *sprite) {
sprite->data1 = gBattleAnimArgs[3];
sprite->data3 = gBattleAnimArgs[4];
sprite->data5 = gBattleAnimArgs[5];
- oamt_set_x3A_32(sprite, move_anim_8074EE0);
+ StoreSpriteCallbackInData6(sprite, move_anim_8074EE0);
sprite->callback = sub_8078504;
}
void sub_807A5C4(struct Sprite *sprite) {
- if (GetBankSide(gBattleAnimPlayerMonIndex)) {
+ if (GetBankSide(gBattleAnimBankAttacker)) {
sprite->pos1.x -= gBattleAnimArgs[0];
gBattleAnimArgs[3] *= -1;
} else {
@@ -1923,28 +1923,28 @@ void sub_807A5C4(struct Sprite *sprite) {
sprite->data3 = gBattleAnimArgs[4];
sprite->data5 = gBattleAnimArgs[5];
StartSpriteAnim(sprite, gBattleAnimArgs[6]);
- oamt_set_x3A_32(sprite, move_anim_8074EE0);
+ StoreSpriteCallbackInData6(sprite, move_anim_8074EE0);
sprite->callback = sub_8078504;
}
void sub_807A63C(struct Sprite *sprite) {
sub_8078650(sprite);
- if (GetBankSide(gBattleAnimPlayerMonIndex)) {
+ if (GetBankSide(gBattleAnimBankAttacker)) {
sprite->pos1.x -= gBattleAnimArgs[0];
} else {
sprite->pos1.x += gBattleAnimArgs[0];
}
sprite->pos1.y += gBattleAnimArgs[1];
sprite->callback = sub_8078600;
- oamt_set_x3A_32(sprite, move_anim_8072740);
+ StoreSpriteCallbackInData6(sprite, move_anim_8072740);
}
void sub_807A69C(u8 taskId) {
u16 src;
u16 dest;
struct Task *task = &gTasks[taskId];
- task->data[0] = obj_id_for_side_relative_to_move(0);
- task->data[1] = (GetBankSide(gBattleAnimPlayerMonIndex)) ? -8 : 8;
+ task->data[0] = GetAnimBankSpriteId(0);
+ task->data[1] = (GetBankSide(gBattleAnimBankAttacker)) ? -8 : 8;
task->data[2] = 0;
task->data[3] = 0;
gSprites[task->data[0]].pos2.x -= task->data[0];
@@ -1953,7 +1953,7 @@ void sub_807A69C(u8 taskId) {
dest = (task->data[4] + 0x10) * 0x10;
src = (gSprites[task->data[0]].oam.paletteNum + 0x10) * 0x10;
- task->data[6] = sub_8079E90(gBattleAnimPlayerMonIndex);
+ task->data[6] = sub_8079E90(gBattleAnimBankAttacker);
if (task->data[6] == 20 || task->data[6] == 40) {
task->data[6] = 2;
} else {
@@ -2014,9 +2014,9 @@ void sub_807A8D4(struct Sprite *sprite) {
}
void sub_807A908(struct Sprite *sprite) {
- sprite->pos1.x = sub_8077ABC(gBattleAnimPlayerMonIndex, 2);
- sprite->pos1.y = sub_8077ABC(gBattleAnimPlayerMonIndex, 3);
- if (!GetBankSide(gBattleAnimPlayerMonIndex)) {
+ sprite->pos1.x = sub_8077ABC(gBattleAnimBankAttacker, 2);
+ sprite->pos1.y = sub_8077ABC(gBattleAnimBankAttacker, 3);
+ if (!GetBankSide(gBattleAnimBankAttacker)) {
sprite->data0 = 5;
} else {
sprite->data0 = -10;
@@ -2043,7 +2043,7 @@ void sub_807A9BC(struct Sprite *sprite) {
sprite->data0 = gBattleAnimArgs[2];
sprite->data2 = sprite->pos1.x + gBattleAnimArgs[4];
sprite->data4 = sprite->pos1.y + gBattleAnimArgs[5];
- if (!GetBankSide(gBattleAnimEnemyMonIndex)) {
+ if (!GetBankSide(gBattleAnimBankTarget)) {
x = (u16)gBattleAnimArgs[4] + 30;
sprite->pos1.x += x;
sprite->pos1.y = gBattleAnimArgs[5] - 20;
@@ -2053,5 +2053,5 @@ void sub_807A9BC(struct Sprite *sprite) {
sprite->pos1.y = gBattleAnimArgs[5] - 80;
}
sprite->callback = sub_8078B34;
- oamt_set_x3A_32(sprite, move_anim_8072740);
+ StoreSpriteCallbackInData6(sprite, move_anim_8072740);
}
diff --git a/src/berry_blender.c b/src/scene/berry_blender.c
index 455aabc45..7ffcc5185 100644
--- a/src/berry_blender.c
+++ b/src/scene/berry_blender.c
@@ -828,7 +828,7 @@ static bool8 sub_804E2EC(void)
switch (gBerryBlenderData->field_1)
{
case 0:
- sub_800D238(gUnknown_08E6C100, &ewram[0x10000]);
+ LZDecompressWram(gUnknown_08E6C100, &ewram[0x10000]);
gBerryBlenderData->field_1++;
break;
case 1:
@@ -862,11 +862,11 @@ static bool8 sub_804E2EC(void)
}
break;
case 3:
- sub_800D238(gUnknown_08E6C920, &ewram[0x10000]);
+ LZDecompressWram(gUnknown_08E6C920, &ewram[0x10000]);
gBerryBlenderData->field_1++;
break;
case 4:
- sub_800D238(gUnknown_08E6D354, &ewram[0x13000]);
+ LZDecompressWram(gUnknown_08E6D354, &ewram[0x13000]);
gBerryBlenderData->field_1++;
break;
case 5:
diff --git a/src/contest_painting.c b/src/scene/contest_painting.c
index 391cbdfaa..3662efdec 100644
--- a/src/contest_painting.c
+++ b/src/scene/contest_painting.c
@@ -353,7 +353,7 @@ static void sub_8106AC4(u16 species, u8 arg1)
void *pal;
// Unsure what gUnknown_03005E8C->var0 is supposed to be.
- pal = species_and_otid_get_pal(species, gUnknown_03005E8C->var4, gUnknown_03005E8C->var0);
+ pal = GetMonSpritePalFromOtIdPersonality(species, gUnknown_03005E8C->var4, gUnknown_03005E8C->var0);
LZDecompressVram(pal, gUnknown_03005E90);
if (arg1 == 1)
@@ -402,7 +402,7 @@ static void sub_8106AC4(u16 arg0, u8 arg2)
ldr r1, [r0, 0x4]\n\
ldr r2, [r0]\n\
adds r0, r6, 0\n\
- bl species_and_otid_get_pal\n\
+ bl GetMonSpritePalFromOtIdPersonality\n\
ldr r1, _08106B2C @ =gUnknown_03005E90\n\
mov r8, r1\n\
ldr r1, [r1]\n\
diff --git a/src/credits.c b/src/scene/credits.c
index df70674b6..cf10137c1 100644
--- a/src/credits.c
+++ b/src/scene/credits.c
@@ -1387,7 +1387,7 @@ static u8 sub_81456B4(u16 species, u16 x, u16 y, u16 position)
1
);
- lzPaletteData = species_and_otid_get_pal(species, 0, 0xFFFF);
+ lzPaletteData = GetMonSpritePalFromOtIdPersonality(species, 0, 0xFFFF);
LoadCompressedPalette(lzPaletteData, 0x100 + (position * 16), 0x20);
sub_8143648(position, position);
@@ -1433,7 +1433,7 @@ static void sub_81458DC(void)
for (dexNum = 1, seenTypesCount = 0; dexNum < 386; dexNum++)
{
- if (GetNationalPokedexFlag(dexNum, 1))
+ if (GetSetPokedexFlag(dexNum, 1))
{
unk201C000->unk90[seenTypesCount] = dexNum;
seenTypesCount++;
diff --git a/src/cute_sketch.c b/src/scene/cute_sketch.c
index 5317bc334..5317bc334 100644
--- a/src/cute_sketch.c
+++ b/src/scene/cute_sketch.c
diff --git a/src/egg_hatch.c b/src/scene/egg_hatch.c
index 90d1ee039..032dcd284 100644
--- a/src/egg_hatch.c
+++ b/src/scene/egg_hatch.c
@@ -19,6 +19,7 @@
#include "naming_screen.h"
#include "trig.h"
#include "rng.h"
+#include "trade.h"
extern u8 ewram[];
extern struct SpriteTemplate gUnknown_02024E8C;
@@ -40,18 +41,15 @@ struct EggHatchData* gEggHatchData;
extern const u32 gUnknown_08D00000[];
extern const u32 gUnknown_08D00524[];
-extern const u32 gUnknown_0820CA98[];
-extern const u32 gUnknown_0820F798[];
extern const u16 gUnknown_08D004E0[]; //palette
-extern const u16 gUnknown_0820C9F8[]; //palette
extern const struct SpriteSheet sUnknown_0820A3B0;
extern const struct SpriteSheet sUnknown_0820A3B8;
extern const struct SpritePalette sUnknown_0820A3C0;
-bool8 GetNationalPokedexFlag(u16 nationalNum, u8 caseID);
+bool8 GetSetPokedexFlag(u16 nationalNum, u8 caseID);
u8* GetMonNick(struct Pokemon* mon, u8* dst);
u8 sav1_map_get_name(void);
-const struct CompressedSpritePalette* sub_8040990(struct Pokemon* mon); //gets pokemon palette address
+const struct CompressedSpritePalette* GetMonSpritePalStruct(struct Pokemon* mon); //gets pokemon palette address
void sub_8080990(void);
static void Task_EggHatch(u8 taskID);
@@ -289,8 +287,8 @@ static void AddHatchedMonToParty(u8 id)
SetMonData(mon, MON_DATA_NICKNAME, name);
pokeNum = SpeciesToNationalPokedexNum(pokeNum);
- GetNationalPokedexFlag(pokeNum, 2);
- GetNationalPokedexFlag(pokeNum, 3);
+ GetSetPokedexFlag(pokeNum, 2);
+ GetSetPokedexFlag(pokeNum, 3);
GetMonNick(mon, gStringVar1);
@@ -419,11 +417,11 @@ static u8 EggHatchCreateMonSprite(u8 a0, u8 switchID, u8 pokeID)
u16 species = GetMonData(mon, MON_DATA_SPECIES);
u32 pid = GetMonData(mon, MON_DATA_PERSONALITY);
HandleLoadSpecialPokePic(&gMonFrontPicTable[species], gMonFrontPicCoords[species].coords, gMonFrontPicCoords[species].y_offset,(u32)(&ewram[0]), gUnknown_081FAF4C[2 * a0 + 1], species, pid);
- LoadCompressedObjectPalette(sub_8040990(mon));
+ LoadCompressedObjectPalette(GetMonSpritePalStruct(mon));
}
break;
case 1:
- GetMonSpriteTemplate_803C56C(sub_8040990(mon)->tag, r5);
+ GetMonSpriteTemplate_803C56C(GetMonSpritePalStruct(mon)->tag, r5);
spriteID = CreateSprite(&gUnknown_02024E8C, 120, 70, 6);
gSprites[spriteID].invisible = 1;
gSprites[spriteID].callback = SpriteCallbackDummy;
@@ -512,7 +510,7 @@ static void CB2_EggHatch_0(void)
u32 size;
REG_BG2CNT = 0x4C06;
- LoadPalette(&gUnknown_0820C9F8, 0x10, 0xA0);
+ LoadPalette(gUnknown_0820C9F8, 0x10, 0xA0);
offsetRead = (u32)(&gUnknown_0820CA98);
offsetWrite = (VRAM + 0x4000);
diff --git a/src/evolution_graphics.c b/src/scene/evolution_graphics.c
index 1fd5bf8fa..1fd5bf8fa 100644
--- a/src/evolution_graphics.c
+++ b/src/scene/evolution_graphics.c
diff --git a/src/evolution_scene.c b/src/scene/evolution_scene.c
index e312b081f..24168dc56 100644
--- a/src/evolution_scene.c
+++ b/src/scene/evolution_scene.c
@@ -236,7 +236,7 @@ void EvolutionScene(struct Pokemon* mon, u16 speciesToEvolve, bool8 canStopEvo,
gMonFrontPicCoords[currSpecies].y_offset,
(void*)(0x2000000),
gUnknown_081FAF4C[1], currSpecies);
- pokePal = (void*) sub_80409C8(currSpecies, TiD, PiD);
+ pokePal = (void*) GetMonSpritePalStructFromOtIdPersonality(currSpecies, TiD, PiD);
LoadCompressedPalette(*pokePal, 0x110, 0x20);
GetMonSpriteTemplate_803C56C(currSpecies, 1);
@@ -253,7 +253,7 @@ void EvolutionScene(struct Pokemon* mon, u16 speciesToEvolve, bool8 canStopEvo,
gMonFrontPicCoords[speciesToEvolve].y_offset,
(void*)(0x2000000),
gUnknown_081FAF4C[3], speciesToEvolve);
- pokePal = (void*) sub_80409C8(speciesToEvolve, TiD, PiD);
+ pokePal = (void*) GetMonSpritePalStructFromOtIdPersonality(speciesToEvolve, TiD, PiD);
LoadCompressedPalette(*pokePal, 0x120, 0x20);
GetMonSpriteTemplate_803C56C(speciesToEvolve, 3);
@@ -333,7 +333,7 @@ static void CB2_EvolutionSceneLoadGraphics(void)
gMonFrontPicCoords[postEvoSpecies].y_offset,
(void*)(0x2000000),
gUnknown_081FAF4C[3], postEvoSpecies);
- pokePal = (void*) sub_80409C8(postEvoSpecies, TiD, PiD);
+ pokePal = (void*) GetMonSpritePalStructFromOtIdPersonality(postEvoSpecies, TiD, PiD);
LoadCompressedPalette(*pokePal, 0x120, 0x20);
GetMonSpriteTemplate_803C56C(postEvoSpecies, 3);
@@ -376,13 +376,13 @@ static void CB2_TradeEvolutionSceneLoadGraphics(void)
break;
case 1:
SetUpWindowConfig(&gWindowConfig_81E6F84);
- InitWindowFromConfig(&gUnknown_03004828->field_4, &gWindowConfig_81E6F84);
+ InitWindowFromConfig(&gUnknown_03004828->window, &gWindowConfig_81E6F84);
gMain.state++;
break;
case 2:
- LoadTextWindowGraphics(&gUnknown_03004828->field_4);
- gUnknown_03004828->field_34 = SetTextWindowBaseTileNum(2);
- LoadTextWindowGraphics(&gUnknown_03004828->field_4);
+ LoadTextWindowGraphics(&gUnknown_03004828->window);
+ gUnknown_03004828->textWindowBaseTileNum = SetTextWindowBaseTileNum(2);
+ LoadTextWindowGraphics(&gUnknown_03004828->window);
MenuZeroFillScreen();
ResetPaletteFade();
gMain.state++;
@@ -403,7 +403,7 @@ static void CB2_TradeEvolutionSceneLoadGraphics(void)
gMonFrontPicCoords[postEvoSpecies].y_offset,
(void*)(0x2000000),
gUnknown_081FAF4C[3], postEvoSpecies);
- pokePal = (void*) sub_80409C8(postEvoSpecies, TiD, PiD);
+ pokePal = (void*) GetMonSpritePalStructFromOtIdPersonality(postEvoSpecies, TiD, PiD);
LoadCompressedPalette(*pokePal, 0x120, 0x20);
gMain.state++;
}
@@ -453,7 +453,7 @@ void TradeEvolutionScene(struct Pokemon* mon, u16 speciesToEvolve, u8 preEvoSpri
gMonFrontPicCoords[speciesToEvolve].y_offset,
(void*)(0x2000000),
gUnknown_081FAF4C[1], speciesToEvolve);
- pokePal = (void*) sub_80409C8(speciesToEvolve, TiD, PiD);
+ pokePal = (void*) GetMonSpritePalStructFromOtIdPersonality(speciesToEvolve, TiD, PiD);
LoadCompressedPalette(*pokePal, 0x120, 0x20);
GetMonSpriteTemplate_803C56C(speciesToEvolve, 1);
@@ -492,7 +492,7 @@ static void CB2_TradeEvolutionSceneUpdate(void)
{
AnimateSprites();
BuildOamBuffer();
- sub_80035AC(&gUnknown_03004828->field_4);
+ sub_80035AC(&gUnknown_03004828->window);
UpdatePaletteFade();
RunTasks();
}
@@ -527,8 +527,8 @@ static void CreateShedinja(u16 preEvoSpecies, struct Pokemon* mon)
// can't match it otherwise, ehh
EvoTable = gEvolutionTable;
Evos = EvoTable + preEvoSpecies;
- GetNationalPokedexFlag(SpeciesToNationalPokedexNum(Evos->evolutions[1].targetSpecies), 2);
- GetNationalPokedexFlag(SpeciesToNationalPokedexNum(Evos->evolutions[1].targetSpecies), 3);
+ GetSetPokedexFlag(SpeciesToNationalPokedexNum(Evos->evolutions[1].targetSpecies), 2);
+ GetSetPokedexFlag(SpeciesToNationalPokedexNum(Evos->evolutions[1].targetSpecies), 3);
if (GetMonData(Shedinja, MON_DATA_SPECIES) == SPECIES_SHEDINJA
&& GetMonData(Shedinja, MON_DATA_LANGUAGE) == LANGUAGE_JAPANESE
@@ -654,8 +654,8 @@ static void Task_EvolutionScene(u8 taskID)
SetMonData(mon, MON_DATA_SPECIES, (void*)(&gTasks[taskID].tPostEvoSpecies));
CalculateMonStats(mon);
EvolutionRenameMon(mon, gTasks[taskID].tPreEvoSpecies, gTasks[taskID].tPostEvoSpecies);
- GetNationalPokedexFlag(SpeciesToNationalPokedexNum(gTasks[taskID].tPostEvoSpecies), 2);
- GetNationalPokedexFlag(SpeciesToNationalPokedexNum(gTasks[taskID].tPostEvoSpecies), 3);
+ GetSetPokedexFlag(SpeciesToNationalPokedexNum(gTasks[taskID].tPostEvoSpecies), 2);
+ GetSetPokedexFlag(SpeciesToNationalPokedexNum(gTasks[taskID].tPostEvoSpecies), 3);
IncrementGameStat(14);
}
break;
@@ -667,7 +667,7 @@ static void Task_EvolutionScene(u8 taskID)
{
u8 text[20];
- sub_8053E90();
+ Overworld_PlaySpecialMapMusic();
gTasks[taskID].tBits |= TASK_BIT_LEARN_MOVE;
gTasks[taskID].tLearnsFirstMove = FALSE;
gTasks[taskID].tLearnMoveState = 0;
@@ -691,7 +691,7 @@ static void Task_EvolutionScene(u8 taskID)
if (!gPaletteFade.active)
{
if (!(gTasks[taskID].tBits & TASK_BIT_LEARN_MOVE))
- sub_8053E90();
+ Overworld_PlaySpecialMapMusic();
if (!gTasks[taskID].tEvoWasStopped)
CreateShedinja(gTasks[taskID].tPreEvoSpecies, mon);
DestroyTask(taskID);
@@ -902,11 +902,11 @@ static void Task_TradeEvolutionScene(u8 taskID)
{
case 0:
StringExpandPlaceholders(gStringVar4, gUnknown_08400C4A);
- sub_8002EB0(&gUnknown_03004828->field_4, gStringVar4, gUnknown_03004828->field_34, 2, 15);
+ sub_8002EB0(&gUnknown_03004828->window, gStringVar4, gUnknown_03004828->textWindowBaseTileNum, 2, 15);
gTasks[taskID].tState++;
break;
case 1:
- if (gUnknown_03004828->field_4.state == 0)
+ if (gUnknown_03004828->window.state == 0)
{
PlayCry1(gTasks[taskID].tPreEvoSpecies, 0);
gTasks[taskID].tState++;
@@ -990,19 +990,19 @@ static void Task_TradeEvolutionScene(u8 taskID)
if (IsCryFinished() && !gPaletteFade.active)
{
StringExpandPlaceholders(gStringVar4, gUnknown_08400C60);
- sub_8002EB0(&gUnknown_03004828->field_4, gStringVar4, gUnknown_03004828->field_34, 2, 15);
+ sub_8002EB0(&gUnknown_03004828->window, gStringVar4, gUnknown_03004828->textWindowBaseTileNum, 2, 15);
PlayFanfare(BGM_FANFA5);
gTasks[taskID].tState++;
SetMonData(mon, MON_DATA_SPECIES, (void*)(&gTasks[taskID].tPostEvoSpecies));
CalculateMonStats(mon);
EvolutionRenameMon(mon, gTasks[taskID].tPreEvoSpecies, gTasks[taskID].tPostEvoSpecies);
- GetNationalPokedexFlag(SpeciesToNationalPokedexNum(gTasks[taskID].tPostEvoSpecies), 2);
- GetNationalPokedexFlag(SpeciesToNationalPokedexNum(gTasks[taskID].tPostEvoSpecies), 3);
+ GetSetPokedexFlag(SpeciesToNationalPokedexNum(gTasks[taskID].tPostEvoSpecies), 2);
+ GetSetPokedexFlag(SpeciesToNationalPokedexNum(gTasks[taskID].tPostEvoSpecies), 3);
IncrementGameStat(14);
}
break;
case 13:
- if (gUnknown_03004828->field_4.state == 0 && IsFanfareTaskInactive() == TRUE)
+ if (gUnknown_03004828->window.state == 0 && IsFanfareTaskInactive() == TRUE)
{
var = MonTryLearningNewMove(mon, gTasks[taskID].tLearnsFirstMove);
if (var != 0 && !gTasks[taskID].tEvoWasStopped)
@@ -1024,71 +1024,71 @@ static void Task_TradeEvolutionScene(u8 taskID)
else
{
PlayBGM(BGM_SHINKA);
- sub_8002EB0(&gUnknown_03004828->field_4, gOtherText_LinkStandby2, gUnknown_03004828->field_34, 2, 15);
+ sub_8002EB0(&gUnknown_03004828->window, gOtherText_LinkStandby2, gUnknown_03004828->textWindowBaseTileNum, 2, 15);
gTasks[taskID].tState++;
}
}
break;
case 14:
- if (gUnknown_03004828->field_4.state == 0)
+ if (gUnknown_03004828->window.state == 0)
{
DestroyTask(taskID);
SetMainCallback2(gCB2_AfterEvolution);
}
break;
case 15:
- if (gUnknown_03004828->field_4.state == 0 && !IsSEPlaying())
+ if (gUnknown_03004828->window.state == 0 && !IsSEPlaying())
{
sub_8024CEC();
PlayFanfare(BGM_FANFA1);
StrCpyDecodeToDisplayedStringBattle(gBattleStringsTable[3]);
- sub_8002EB0(&gUnknown_03004828->field_4, gDisplayedStringBattle, gUnknown_03004828->field_34, 2, 15);
+ sub_8002EB0(&gUnknown_03004828->window, gDisplayedStringBattle, gUnknown_03004828->textWindowBaseTileNum, 2, 15);
gTasks[taskID].tLearnsFirstMove = 0x40; // re-used as a counter
gTasks[taskID].tState++;
}
break;
case 16:
- if (gUnknown_03004828->field_4.state == 0 && IsFanfareTaskInactive() == TRUE && --gTasks[taskID].tLearnsFirstMove == 0)
+ if (gUnknown_03004828->window.state == 0 && IsFanfareTaskInactive() == TRUE && --gTasks[taskID].tLearnsFirstMove == 0)
gTasks[taskID].tState = 13;
break;
case 17:
switch (gTasks[taskID].tLearnMoveState)
{
case 0:
- if (gUnknown_03004828->field_4.state == 0 && !IsSEPlaying())
+ if (gUnknown_03004828->window.state == 0 && !IsSEPlaying())
{
sub_8024CEC();
StrCpyDecodeToDisplayedStringBattle(gBattleStringsTable[4]);
- sub_8002EB0(&gUnknown_03004828->field_4, gDisplayedStringBattle, gUnknown_03004828->field_34, 2, 15);
+ sub_8002EB0(&gUnknown_03004828->window, gDisplayedStringBattle, gUnknown_03004828->textWindowBaseTileNum, 2, 15);
gTasks[taskID].tLearnMoveState++;
}
break;
case 1:
- if (gUnknown_03004828->field_4.state == 0 && !IsSEPlaying())
+ if (gUnknown_03004828->window.state == 0 && !IsSEPlaying())
{
StrCpyDecodeToDisplayedStringBattle(gBattleStringsTable[5]);
- sub_8002EB0(&gUnknown_03004828->field_4, gDisplayedStringBattle, gUnknown_03004828->field_34, 2, 15);
+ sub_8002EB0(&gUnknown_03004828->window, gDisplayedStringBattle, gUnknown_03004828->textWindowBaseTileNum, 2, 15);
gTasks[taskID].tLearnMoveState++;
}
break;
case 2:
- if (gUnknown_03004828->field_4.state != 0)
+ if (gUnknown_03004828->window.state != 0)
break;
if (!IsSEPlaying())
{
StrCpyDecodeToDisplayedStringBattle(gBattleStringsTable[6]);
- sub_8002EB0(&gUnknown_03004828->field_4, gDisplayedStringBattle, gUnknown_03004828->field_34, 2, 15);
+ sub_8002EB0(&gUnknown_03004828->window, gDisplayedStringBattle, gUnknown_03004828->textWindowBaseTileNum, 2, 15);
gTasks[taskID].tData9 = 5;
gTasks[taskID].tData10 = 9;
gTasks[taskID].tLearnMoveState++;
}
case 3:
- if (gUnknown_03004828->field_4.state == 0 && !IsSEPlaying())
+ if (gUnknown_03004828->window.state == 0 && !IsSEPlaying())
{
- DrawTextWindow(&gUnknown_03004828->field_4, 24, 8, 29, 13);
+ DrawTextWindow(&gUnknown_03004828->window, 24, 8, 29, 13);
sEvoCursorPos = 0;
- InitWindow(&gUnknown_03004828->field_4, gOtherText_YesNoAndPlayer, gUnknown_03004828->field_34 + 128, 25, 9);
- sub_8002F44(&gUnknown_03004828->field_4);
+ InitWindow(&gUnknown_03004828->window, gOtherText_YesNoAndPlayer, gUnknown_03004828->textWindowBaseTileNum + 128, 25, 9);
+ sub_8002F44(&gUnknown_03004828->window);
sub_814A5C0(0, 0xFFFF, 0xC, 0x2D9F, 0x20);
sub_81150D8();
gTasks[taskID].tLearnMoveState++;
@@ -1112,10 +1112,10 @@ static void Task_TradeEvolutionScene(u8 taskID)
}
if (gMain.newKeys & A_BUTTON)
{
- ZeroFillWindowRect(&gUnknown_03004828->field_4, 0x18, 8, 0x1D, 0xD);
+ ZeroFillWindowRect(&gUnknown_03004828->window, 0x18, 8, 0x1D, 0xD);
DestroyMenuCursor();
StrCpyDecodeToDisplayedStringBattle(gBattleStringsTable[292]);
- sub_8002EB0(&gUnknown_03004828->field_4, gDisplayedStringBattle, gUnknown_03004828->field_34, 2, 15);
+ sub_8002EB0(&gUnknown_03004828->window, gDisplayedStringBattle, gUnknown_03004828->textWindowBaseTileNum, 2, 15);
PlaySE(SE_SELECT);
if (sEvoCursorPos != 0)
gTasks[taskID].tLearnMoveState = gTasks[taskID].tData10;
@@ -1128,10 +1128,10 @@ static void Task_TradeEvolutionScene(u8 taskID)
}
if (gMain.newKeys & B_BUTTON)
{
- ZeroFillWindowRect(&gUnknown_03004828->field_4, 0x18, 8, 0x1D, 0xD);
+ ZeroFillWindowRect(&gUnknown_03004828->window, 0x18, 8, 0x1D, 0xD);
DestroyMenuCursor();
StrCpyDecodeToDisplayedStringBattle(gBattleStringsTable[292]);
- sub_8002EB0(&gUnknown_03004828->field_4, gDisplayedStringBattle, gUnknown_03004828->field_34, 2, 15);
+ sub_8002EB0(&gUnknown_03004828->window, gDisplayedStringBattle, gUnknown_03004828->textWindowBaseTileNum, 2, 15);
PlaySE(SE_SELECT);
gTasks[taskID].tLearnMoveState = gTasks[taskID].tData10;
}
@@ -1157,7 +1157,7 @@ static void Task_TradeEvolutionScene(u8 taskID)
if (IsHMMove2(move))
{
StrCpyDecodeToDisplayedStringBattle(gBattleStringsTable[307]);
- sub_8002EB0(&gUnknown_03004828->field_4, gDisplayedStringBattle, gUnknown_03004828->field_34, 2, 15);
+ sub_8002EB0(&gUnknown_03004828->window, gDisplayedStringBattle, gUnknown_03004828->textWindowBaseTileNum, 2, 15);
gTasks[taskID].tLearnMoveState = 11;
}
else
@@ -1170,42 +1170,42 @@ static void Task_TradeEvolutionScene(u8 taskID)
RemoveMonPPBonus(mon, var);
SetMonMoveSlot(mon, gMoveToLearn, var);
StrCpyDecodeToDisplayedStringBattle(gBattleStringsTable[207]);
- sub_8002EB0(&gUnknown_03004828->field_4, gDisplayedStringBattle, gUnknown_03004828->field_34, 2, 15);
+ sub_8002EB0(&gUnknown_03004828->window, gDisplayedStringBattle, gUnknown_03004828->textWindowBaseTileNum, 2, 15);
gTasks[taskID].tLearnMoveState++;
}
}
}
break;
case 7:
- if (gUnknown_03004828->field_4.state == 0 && !IsSEPlaying())
+ if (gUnknown_03004828->window.state == 0 && !IsSEPlaying())
{
StrCpyDecodeToDisplayedStringBattle(gBattleStringsTable[7]);
- sub_8002EB0(&gUnknown_03004828->field_4, gDisplayedStringBattle, gUnknown_03004828->field_34, 2, 15);
+ sub_8002EB0(&gUnknown_03004828->window, gDisplayedStringBattle, gUnknown_03004828->textWindowBaseTileNum, 2, 15);
gTasks[taskID].tLearnMoveState++;
}
break;
case 8:
- if (gUnknown_03004828->field_4.state == 0 && !IsSEPlaying())
+ if (gUnknown_03004828->window.state == 0 && !IsSEPlaying())
{
StrCpyDecodeToDisplayedStringBattle(gBattleStringsTable[208]);
- sub_8002EB0(&gUnknown_03004828->field_4, gDisplayedStringBattle, gUnknown_03004828->field_34, 2, 15);
+ sub_8002EB0(&gUnknown_03004828->window, gDisplayedStringBattle, gUnknown_03004828->textWindowBaseTileNum, 2, 15);
gTasks[taskID].tState = 15;
}
break;
case 9:
StrCpyDecodeToDisplayedStringBattle(gBattleStringsTable[8]);
- sub_8002EB0(&gUnknown_03004828->field_4, gDisplayedStringBattle, gUnknown_03004828->field_34, 2, 15);
+ sub_8002EB0(&gUnknown_03004828->window, gDisplayedStringBattle, gUnknown_03004828->textWindowBaseTileNum, 2, 15);
gTasks[taskID].tData9 = 10;
gTasks[taskID].tData10 = 0;
gTasks[taskID].tLearnMoveState = 3;
break;
case 10:
StrCpyDecodeToDisplayedStringBattle(gBattleStringsTable[9]);
- sub_8002EB0(&gUnknown_03004828->field_4, gDisplayedStringBattle, gUnknown_03004828->field_34, 2, 15);
+ sub_8002EB0(&gUnknown_03004828->window, gDisplayedStringBattle, gUnknown_03004828->textWindowBaseTileNum, 2, 15);
gTasks[taskID].tState = 13;
break;
case 11:
- if (gUnknown_03004828->field_4.state == 0 && !IsSEPlaying())
+ if (gUnknown_03004828->window.state == 0 && !IsSEPlaying())
gTasks[taskID].tLearnMoveState = 5;
break;
}
diff --git a/src/hall_of_fame.c b/src/scene/hall_of_fame.c
index 10c999ef3..6f7df576b 100644
--- a/src/hall_of_fame.c
+++ b/src/scene/hall_of_fame.c
@@ -1347,7 +1347,7 @@ static u32 HallOfFame_LoadPokemonPic(u16 species, s16 posX, s16 posY, u16 pokeID
LoadSpecialPokePic(&gMonFrontPicTable[species], gMonFrontPicCoords[species].coords, gMonFrontPicCoords[species].y_offset, 0x2000000, gUnknown_0840B5A0[pokeID], species, pid, 1);
- pokePal = species_and_otid_get_pal(species, tid, pid);
+ pokePal = GetMonSpritePalFromOtIdPersonality(species, tid, pid);
LoadCompressedPalette(pokePal, 16 * pokeID + 256, 0x20);
sub_8143648(pokeID, pokeID);
diff --git a/src/intro.c b/src/scene/intro.c
index a43e0356c..dd7cc858c 100644
--- a/src/intro.c
+++ b/src/scene/intro.c
@@ -1785,7 +1785,7 @@ static u16 sub_813CE88(u16 species, s16 x, s16 y, u16 d, u8 front)
LoadSpecialPokePic(&gMonFrontPicTable[species], gMonFrontPicCoords[species].coords, gMonFrontPicCoords[species].y_offset, 0x2000000, gUnknown_0840B5A0[d], species, 0, 1);
else
LoadSpecialPokePic(&gMonBackPicTable[species], gMonBackPicCoords[species].coords, gMonBackPicCoords[species].y_offset, 0x2000000, gUnknown_0840B5A0[d], species, 0, 0);
- lzPaletteData = species_and_otid_get_pal(species, 0, 0xFFFF);
+ lzPaletteData = GetMonSpritePalFromOtIdPersonality(species, 0, 0xFFFF);
LoadCompressedPalette(lzPaletteData, 0x100 + d * 0x10, 0x20);
sub_8143648(d, d);
spriteId = CreateSprite(&gUnknown_02024E8C, x, y, (d + 1) * 4);
diff --git a/src/intro_credits_graphics.c b/src/scene/intro_credits_graphics.c
index cd0589af8..cd0589af8 100755
--- a/src/intro_credits_graphics.c
+++ b/src/scene/intro_credits_graphics.c
diff --git a/src/new_game.c b/src/scene/new_game.c
index 3f9e9f5a1..6ab21c544 100644
--- a/src/new_game.c
+++ b/src/scene/new_game.c
@@ -99,7 +99,7 @@ void sub_8052DE4(void)
void WarpToTruck(void)
{
- warp1_set(25, 40, -1, -1, -1); // inside of truck
+ Overworld_SetWarpDestination(25, 40, -1, -1, -1); // inside of truck
warp_in();
}
diff --git a/src/title_screen.c b/src/scene/title_screen.c
index 2503b0654..2503b0654 100644
--- a/src/title_screen.c
+++ b/src/scene/title_screen.c
diff --git a/src/script_pokemon_util_80C4BF0.c b/src/script_pokemon_util_80C4BF0.c
index 323df991a..f98293a90 100644
--- a/src/script_pokemon_util_80C4BF0.c
+++ b/src/script_pokemon_util_80C4BF0.c
@@ -433,7 +433,7 @@ void ShowContestEntryMonPic(void)
gUnknown_081FAF4C[1],
species,
var1);
- palette = sub_80409C8(species, var2, var1);
+ palette = GetMonSpritePalStructFromOtIdPersonality(species, var2, var1);
LoadCompressedObjectPalette(palette);
GetMonSpriteTemplate_803C56C(species, 1);
gUnknown_02024E8C.paletteTag = palette->tag;
@@ -560,8 +560,8 @@ u8 ScriptGiveMon(u16 species, u8 level, u16 item, u32 unused1, u32 unused2, u8 u
{
case 0:
case 1:
- GetNationalPokedexFlag(nationalDexNum, 2);
- GetNationalPokedexFlag(nationalDexNum, 3);
+ GetSetPokedexFlag(nationalDexNum, 2);
+ GetSetPokedexFlag(nationalDexNum, 3);
break;
}
return sentToPc;
diff --git a/src/sound_check_menu.c b/src/sound_check_menu.c
deleted file mode 100644
index d97ae6d86..000000000
--- a/src/sound_check_menu.c
+++ /dev/null
@@ -1,2199 +0,0 @@
-#include "global.h"
-#include "sprite.h"
-#include "palette.h"
-#include "task.h"
-#include "m4a.h"
-#include "main.h"
-#include "text.h"
-#include "menu.h"
-#include "songs.h"
-#include "title_screen.h"
-#include "sound.h"
-#include "pokedex_cry_screen.h"
-
-// local task defines
-#define WINDOW_SELECTED data[0]
-#define BGM_INDEX data[1]
-#define SE_INDEX data[2]
-#define UNK_DATA3 data[3]
-#define UNK_DATA4 data[4]
-// data 5-7 are not used
-// i dont have a define for data 8 yet because its used in a nonmatching and I can't be sure yet its actually used.
-
-// window selections
-enum
-{
- BGM_WINDOW,
- SE_WINDOW
-};
-
-// driver test cry enums
-enum
-{
- CRY_TEST_UNK0,
- CRY_TEST_VOLUME,
- CRY_TEST_PANPOT,
- CRY_TEST_PITCH,
- CRY_TEST_LENGTH,
- CRY_TEST_RELEASE,
- CRY_TEST_PROGRESS,
- CRY_TEST_CHORUS,
- CRY_TEST_PRIORITY
-};
-
-// minmax range enums
-enum
-{
- MIN,
- MAX
-};
-
-extern struct ToneData voicegroup_84537C0[];
-extern struct ToneData voicegroup_8452590[];
-extern struct ToneData voicegroup_8453DC0[];
-extern struct ToneData voicegroup_8452B90[];
-extern struct ToneData voicegroup_84543C0[];
-extern struct ToneData voicegroup_8453190[];
-extern struct ToneData voicegroup_84549C0[];
-extern struct ToneData voicegroup_8453790[];
-
-static EWRAM_DATA u8 gUnknown_020387B0 = 0;
-static EWRAM_DATA u8 gUnknown_020387B1 = 0;
-static EWRAM_DATA u8 gUnknown_020387B2 = 0;
-static EWRAM_DATA s8 gUnknown_020387B3 = 0;
-static EWRAM_DATA int gUnknown_020387B4[9] = {0};
-static EWRAM_DATA u8 gUnknown_020387D8 = 0;
-static EWRAM_DATA u8 gUnknown_020387D9 = 0;
-
-extern u16 gUnknown_03005D34;
-extern u8 gUnknown_03005E98;
-
-struct MusicPlayerInfo *gUnknown_03005D30;
-
-extern struct MusicPlayerInfo gMPlay_BGM;
-
-void sub_80BA258(u8);
-void sub_80BA384(u8);
-void sub_80BA65C(u8);
-void sub_80BA68C(u8);
-void sub_80BA6B8(u8);
-void sub_80BA700(u16, u16, u16);
-void sub_80BA79C(const u8 *const, u16, u16);
-void sub_80BA800(u8);
-void sub_80BAA48(u8);
-void sub_80BACDC(s8);
-void sub_80BAD5C(void);
-void sub_80BAE10(u8, u8);
-void sub_80BAE78(int, u16, u16, u8);
-void sub_80BAF84(u8);
-void sub_80BB038(u8);
-void sub_80BB1D4(void);
-void sub_80BB25C(u8);
-void sub_80BB3B4(u8);
-void sub_80BB494(void);
-
-static const u8 gDebugText_SoundCheckJap[] = _("サウンドチェック");
-static const u8 gDebugText_BGM[] = _("BGM");
-static const u8 gDebugText_SE[] = _("SE ");
-static const u8 gDebugText_ABDesc[] = _("A‥さいせい B‥おわり");
-static const u8 gDebugText_UpDown[] = _("L‥UP R‥DOWN");
-static const u8 gDebugText_DriverTest[] = _("R‥DRIVER-TEST");
-
-// ideally this should be a multi Coords8 struct, but it wont match when its treated like a struct.
-static const u8 gUnknown_083D0300[] = { 1, 1, 1, 3, 1, 5, 1, 7, 1, 9, 1, 11, 1, 13, 1, 15, 1, 17 };
-
-static const u8 gDebugText_BBack[] = _("Bぼたんで もどる");
-static const u8 gDebugText_APlay[] = _("Aぼたんで さいせい");
-static const u8 gDebugText_Voice[] = _("VOICE‥‥‥‥");
-static const u8 gDebugText_Volume[] = _("VOLUME‥‥‥");
-static const u8 gDebugText_Panpot[] = _("PANPOT‥‥‥");
-static const u8 gDebugText_Pitch[] = _("PITCH‥‥‥‥");
-static const u8 gDebugText_Length[] = _("LENGTH‥‥‥");
-static const u8 gDebugText_Release[] = _("RELEASE‥‥");
-static const u8 gDebugText_Progress[] = _("PROGRESS‥");
-static const u8 gDebugText_Chorus[] = _("CHORUS‥‥‥");
-static const u8 gDebugText_Priority[] = _("PRIORITY‥");
-static const u8 gDebugText_Playing[] = _("さいせいちゆう‥"); // 再生中 (playing)
-static const u8 gDebugText_Reverse[] = _("はんてん‥‥‥‥"); // 反転 (reverse)
-static const u8 gDebugText_Stereo[] = _("すてれお‥‥‥‥"); // stereo
-
-// also ideally should be a MinMax struct, but any attempt to make this into a struct causes it to not match due to the weird multi dim access.
-static const int gUnknown_083D039C[16] =
-{
- 0, 387,
- 0, 127,
- -127, 127,
- -128, 32639,
- 0, 65535,
- 0, 255,
- 0, 65535,
- -64, 63
-};
-
-static const u8 gUnknown_083D03DC[] = _("▶");
-static const u8 gUnknown_083D03DE[] = _(" ");
-
-// why not just use Powers of ten from string_util?
-static const int gUnknown_083D03E0[6] =
-{
- 1,
- 10,
- 100,
- 1000,
- 10000,
- 100000
-};
-
-static const s8 gUnknown_083D03F8[5] = { 0x3F, 0x00, 0xC0, 0x7F, 0x80 };
-
-static const u8 gOtherText_SE[] = _("SE");
-static const u8 gOtherText_Pan[] = _("PAN");
-static const u8 gOtherText_LR[] = _(" LR");
-static const u8 gOtherText_RL[] = _(" RL");
-
-// bgm names
-static const u8 BGMName_STOP[] = _("STOP");
-static const u8 BGMName_TETSUJI[] = _("TETSUJI");
-static const u8 BGMName_FIELD13[] = _("FIELD13");
-static const u8 BGMName_KACHI22[] = _("KACHI22");
-static const u8 BGMName_KACHI2[] = _("KACHI2");
-static const u8 BGMName_KACHI3[] = _("KACHI3");
-static const u8 BGMName_KACHI5[] = _("KACHI5");
-static const u8 BGMName_PCC[] = _("PCC");
-static const u8 BGMName_NIBI[] = _("NIBI");
-static const u8 BGMName_SUIKUN[] = _("SUIKUN");
-static const u8 BGMName_DOORO1[] = _("DOORO1");
-static const u8 BGMName_DOORO_X1[] = _("DOORO-X1");
-static const u8 BGMName_DOORO_X3[] = _("DOORO-X3");
-static const u8 BGMName_MACHI_S2[] = _("MACHI-S2");
-static const u8 BGMName_MACHI_S4[] = _("MACHI-S4");
-static const u8 BGMName_GIM[] = _("GIM");
-static const u8 BGMName_NAMINORI[] = _("NAMINORI");
-static const u8 BGMName_DAN01[] = _("DAN01");
-static const u8 BGMName_FANFA1[] = _("FANFA1");
-static const u8 BGMName_ME_ASA[] = _("ME-ASA");
-static const u8 BGMName_ME_BACHI[] = _("ME-BACHI");
-static const u8 BGMName_FANFA4[] = _("FANFA4");
-static const u8 BGMName_FANFA5[] = _("FANFA5");
-static const u8 BGMName_ME_WAZA[] = _("ME-WAZA");
-static const u8 BGMName_BIJYUTU[] = _("BIJYUTU");
-static const u8 BGMName_DOORO_X4[] = _("DOORO-X4");
-static const u8 BGMName_FUNE_KAN[] = _("FUNE-KAN");
-static const u8 BGMName_ME_SHINKA[] = _("ME-SHINKA");
-static const u8 BGMName_SHINKA[] = _("SHINKA");
-static const u8 BGMName_ME_WASURE[] = _("ME-WASURE");
-static const u8 BGMName_SYOUJOEYE[] = _("SYOUJOEYE");
-static const u8 BGMName_BOYEYE[] = _("BOYEYE");
-static const u8 BGMName_DAN02[] = _("DAN02");
-static const u8 BGMName_MACHI_S3[] = _("MACHI-S3");
-static const u8 BGMName_ODAMAKI[] = _("ODAMAKI");
-static const u8 BGMName_B_TOWER[] = _("B-TOWER");
-static const u8 BGMName_SWIMEYE[] = _("SWIMEYE");
-static const u8 BGMName_DAN03[] = _("DAN03");
-static const u8 BGMName_ME_KINOMI[] = _("ME-KINOMI");
-static const u8 BGMName_ME_TAMA[] = _("ME-TAMA");
-static const u8 BGMName_ME_B_BIG[] = _("ME-B-BIG");
-static const u8 BGMName_ME_B_SMALL[] = _("ME-B-SMALL");
-static const u8 BGMName_ME_ZANNEN[] = _("ME-ZANNEN");
-static const u8 BGMName_BD_TIME[] = _("BD-TIME");
-static const u8 BGMName_TEST1[] = _("TEST1");
-static const u8 BGMName_TEST2[] = _("TEST2");
-static const u8 BGMName_TEST3[] = _("TEST3");
-static const u8 BGMName_TEST4[] = _("TEST4");
-static const u8 BGMName_TEST[] = _("TEST");
-static const u8 BGMName_GOMACHI0[] = _("GOMACHI0");
-static const u8 BGMName_GOTOWN[] = _("GOTOWN");
-static const u8 BGMName_POKECEN[] = _("POKECEN");
-static const u8 BGMName_NEXTROAD[] = _("NEXTROAD");
-static const u8 BGMName_GRANROAD[] = _("GRANROAD");
-static const u8 BGMName_CYCLING[] = _("CYCLING");
-static const u8 BGMName_FRIENDLY[] = _("FRIENDLY");
-static const u8 BGMName_MISHIRO[] = _("MISHIRO");
-static const u8 BGMName_TOZAN[] = _("TOZAN");
-static const u8 BGMName_GIRLEYE[] = _("GIRLEYE");
-static const u8 BGMName_MINAMO[] = _("MINAMO");
-static const u8 BGMName_ASHROAD[] = _("ASHROAD");
-static const u8 BGMName_EVENT0[] = _("EVENT0");
-static const u8 BGMName_DEEPDEEP[] = _("DEEPDEEP");
-static const u8 BGMName_KACHI1[] = _("KACHI1");
-static const u8 BGMName_TITLE3[] = _("TITLE3");
-static const u8 BGMName_DEMO1[] = _("DEMO1");
-static const u8 BGMName_GIRL_SUP[] = _("GIRL-SUP");
-static const u8 BGMName_HAGESHII[] = _("HAGESHII");
-static const u8 BGMName_KAKKOII[] = _("KAKKOII");
-static const u8 BGMName_KAZANBAI[] = _("KAZANBAI");
-static const u8 BGMName_AQA_0[] = _("AQA-0");
-static const u8 BGMName_TSURETEK[] = _("TSURETEK");
-static const u8 BGMName_BOY_SUP[] = _("BOY-SUP");
-static const u8 BGMName_RAINBOW[] = _("RAINBOW");
-static const u8 BGMName_AYASII[] = _("AYASII");
-static const u8 BGMName_KACHI4[] = _("KACHI4");
-static const u8 BGMName_ROPEWAY[] = _("ROPEWAY");
-static const u8 BGMName_CASINO[] = _("CASINO");
-static const u8 BGMName_HIGHTOWN[] = _("HIGHTOWN");
-static const u8 BGMName_SAFARI[] = _("SAFARI");
-static const u8 BGMName_C_ROAD[] = _("C-ROAD");
-static const u8 BGMName_AJITO[] = _("AJITO");
-static const u8 BGMName_M_BOAT[] = _("M-BOAT");
-static const u8 BGMName_M_DUNGON[] = _("M-DUNGON");
-static const u8 BGMName_FINECITY[] = _("FINECITY");
-static const u8 BGMName_MACHUPI[] = _("MACHUPI");
-static const u8 BGMName_P_SCHOOL[] = _("P-SCHOOL");
-static const u8 BGMName_DENDOU[] = _("DENDOU");
-static const u8 BGMName_TONEKUSA[] = _("TONEKUSA");
-static const u8 BGMName_MABOROSI[] = _("MABOROSI");
-static const u8 BGMName_CON_FAN[] = _("CON-FAN");
-static const u8 BGMName_CONTEST0[] = _("CONTEST0");
-static const u8 BGMName_MGM0[] = _("MGM0");
-static const u8 BGMName_T_BATTLE[] = _("T-BATTLE");
-static const u8 BGMName_OOAME[] = _("OOAME");
-static const u8 BGMName_HIDERI[] = _("HIDERI");
-static const u8 BGMName_RUNECITY[] = _("RUNECITY");
-static const u8 BGMName_CON_K[] = _("CON-K");
-static const u8 BGMName_EIKOU_R[] = _("EIKOU-R");
-static const u8 BGMName_KARAKURI[] = _("KARAKURI");
-static const u8 BGMName_HUTAGO[] = _("HUTAGO");
-static const u8 BGMName_SITENNOU[] = _("SITENNOU");
-static const u8 BGMName_YAMA_EYE[] = _("YAMA-EYE");
-static const u8 BGMName_CONLOBBY[] = _("CONLOBBY");
-static const u8 BGMName_INTER_V[] = _("INTER-V");
-static const u8 BGMName_DAIGO[] = _("DAIGO");
-static const u8 BGMName_THANKFOR[] = _("THANKFOR");
-static const u8 BGMName_END[] = _("END");
-static const u8 BGMName_BATTLE27[] = _("BATTLE27");
-static const u8 BGMName_BATTLE31[] = _("BATTLE31");
-static const u8 BGMName_BATTLE20[] = _("BATTLE20");
-static const u8 BGMName_BATTLE32[] = _("BATTLE32");
-static const u8 BGMName_BATTLE33[] = _("BATTLE33");
-static const u8 BGMName_BATTLE36[] = _("BATTLE36");
-static const u8 BGMName_BATTLE34[] = _("BATTLE34");
-static const u8 BGMName_BATTLE35[] = _("BATTLE35");
-static const u8 BGMName_BATTLE38[] = _("BATTLE38");
-static const u8 BGMName_BATTLE30[] = _("BATTLE30");
-
-static const u8 *const gBGMNames[] =
-{
- BGMName_STOP,
- BGMName_TETSUJI,
- BGMName_FIELD13,
- BGMName_KACHI22,
- BGMName_KACHI2,
- BGMName_KACHI3,
- BGMName_KACHI5,
- BGMName_PCC,
- BGMName_NIBI,
- BGMName_SUIKUN,
- BGMName_DOORO1,
- BGMName_DOORO_X1,
- BGMName_DOORO_X3,
- BGMName_MACHI_S2,
- BGMName_MACHI_S4,
- BGMName_GIM,
- BGMName_NAMINORI,
- BGMName_DAN01,
- BGMName_FANFA1,
- BGMName_ME_ASA,
- BGMName_ME_BACHI,
- BGMName_FANFA4,
- BGMName_FANFA5,
- BGMName_ME_WAZA,
- BGMName_BIJYUTU,
- BGMName_DOORO_X4,
- BGMName_FUNE_KAN,
- BGMName_ME_SHINKA,
- BGMName_SHINKA,
- BGMName_ME_WASURE,
- BGMName_SYOUJOEYE,
- BGMName_BOYEYE,
- BGMName_DAN02,
- BGMName_MACHI_S3,
- BGMName_ODAMAKI,
- BGMName_B_TOWER,
- BGMName_SWIMEYE,
- BGMName_DAN03,
- BGMName_ME_KINOMI,
- BGMName_ME_TAMA,
- BGMName_ME_B_BIG,
- BGMName_ME_B_SMALL,
- BGMName_ME_ZANNEN,
- BGMName_BD_TIME,
- BGMName_TEST1,
- BGMName_TEST2,
- BGMName_TEST3,
- BGMName_TEST4,
- BGMName_TEST,
- BGMName_GOMACHI0,
- BGMName_GOTOWN,
- BGMName_POKECEN,
- BGMName_NEXTROAD,
- BGMName_GRANROAD,
- BGMName_CYCLING,
- BGMName_FRIENDLY,
- BGMName_MISHIRO,
- BGMName_TOZAN,
- BGMName_GIRLEYE,
- BGMName_MINAMO,
- BGMName_ASHROAD,
- BGMName_EVENT0,
- BGMName_DEEPDEEP,
- BGMName_KACHI1,
- BGMName_TITLE3,
- BGMName_DEMO1,
- BGMName_GIRL_SUP,
- BGMName_HAGESHII,
- BGMName_KAKKOII,
- BGMName_KAZANBAI,
- BGMName_AQA_0,
- BGMName_TSURETEK,
- BGMName_BOY_SUP,
- BGMName_RAINBOW,
- BGMName_AYASII,
- BGMName_KACHI4,
- BGMName_ROPEWAY,
- BGMName_CASINO,
- BGMName_HIGHTOWN,
- BGMName_SAFARI,
- BGMName_C_ROAD,
- BGMName_AJITO,
- BGMName_M_BOAT,
- BGMName_M_DUNGON,
- BGMName_FINECITY,
- BGMName_MACHUPI,
- BGMName_P_SCHOOL,
- BGMName_DENDOU,
- BGMName_TONEKUSA,
- BGMName_MABOROSI,
- BGMName_CON_FAN,
- BGMName_CONTEST0,
- BGMName_MGM0,
- BGMName_T_BATTLE,
- BGMName_OOAME,
- BGMName_HIDERI,
- BGMName_RUNECITY,
- BGMName_CON_K,
- BGMName_EIKOU_R,
- BGMName_KARAKURI,
- BGMName_HUTAGO,
- BGMName_SITENNOU,
- BGMName_YAMA_EYE,
- BGMName_CONLOBBY,
- BGMName_INTER_V,
- BGMName_DAIGO,
- BGMName_THANKFOR,
- BGMName_END,
- BGMName_BATTLE27,
- BGMName_BATTLE31,
- BGMName_BATTLE20,
- BGMName_BATTLE32,
- BGMName_BATTLE33,
- BGMName_BATTLE36,
- BGMName_BATTLE34,
- BGMName_BATTLE35,
- BGMName_BATTLE38,
- BGMName_BATTLE30
-};
-
-// SE names
-static const u8 SEName_STOP[] = _("STOP");
-static const u8 SEName_KAIFUKU[] = _("KAIFUKU");
-static const u8 SEName_PC_LOGON[] = _("PC-LOGON");
-static const u8 SEName_PC_OFF[] = _("PC-OFF");
-static const u8 SEName_PC_ON[] = _("PC-ON");
-static const u8 SEName_SELECT[] = _("SELECT");
-static const u8 SEName_WIN_OPEN[] = _("WIN-OPEN");
-static const u8 SEName_WALL_HIT[] = _("WALL-HIT");
-static const u8 SEName_DOOR[] = _("DOOR");
-static const u8 SEName_KAIDAN[] = _("KAIDAN");
-static const u8 SEName_DANSA[] = _("DANSA");
-static const u8 SEName_JITENSYA[] = _("JITENSYA");
-static const u8 SEName_KOUKA_L[] = _("KOUKA-L");
-static const u8 SEName_KOUKA_M[] = _("KOUKA-M");
-static const u8 SEName_KOUKA_H[] = _("KOUKA-H");
-static const u8 SEName_BOWA2[] = _("BOWA2");
-static const u8 SEName_POKE_DEAD[] = _("POKE-DEAD");
-static const u8 SEName_NIGERU[] = _("NIGERU");
-static const u8 SEName_JIDO_DOA[] = _("JIDO-DOA");
-static const u8 SEName_NAMINORI[] = _("NAMINORI");
-static const u8 SEName_BAN[] = _("BAN");
-static const u8 SEName_PIN[] = _("PIN");
-static const u8 SEName_BOO[] = _("BOO");
-static const u8 SEName_BOWA[] = _("BOWA");
-static const u8 SEName_JYUNI[] = _("JYUNI");
-static const u8 SEName_A[] = _("A");
-static const u8 SEName_I[] = _("I");
-static const u8 SEName_U[] = _("U");
-static const u8 SEName_E[] = _("E");
-static const u8 SEName_O[] = _("O");
-static const u8 SEName_N[] = _("N");
-static const u8 SEName_SEIKAI[] = _("SEIKAI");
-static const u8 SEName_HAZURE[] = _("HAZURE");
-static const u8 SEName_EXP[] = _("EXP");
-static const u8 SEName_JITE_PYOKO[] = _("JITE-PYOKO");
-static const u8 SEName_MU_PACHI[] = _("MU-PACHI");
-static const u8 SEName_TK_KASYA[] = _("TK-KASYA");
-static const u8 SEName_FU_ZAKU[] = _("FU-ZAKU");
-static const u8 SEName_FU_ZAKU2[] = _("FU-ZAKU2");
-static const u8 SEName_FU_ZUZUZU[] = _("FU-ZUZUZU");
-static const u8 SEName_RU_GASHIN[] = _("RU-GASHIN");
-static const u8 SEName_RU_GASYAN[] = _("RU-GASYAN");
-static const u8 SEName_RU_BARI[] = _("RU-BARI");
-static const u8 SEName_RU_HYUU[] = _("RU-HYUU");
-static const u8 SEName_KI_GASYAN[] = _("KI-GASYAN");
-static const u8 SEName_TK_WARPIN[] = _("TK-WARPIN");
-static const u8 SEName_TK_WARPOUT[] = _("TK-WARPOUT");
-static const u8 SEName_TU_SAA[] = _("TU-SAA");
-static const u8 SEName_HI_TURUN[] = _("HI-TURUN");
-static const u8 SEName_TRACK_MOVE[] = _("TRACK-MOVE");
-static const u8 SEName_TRACK_STOP[] = _("TRACK-STOP");
-static const u8 SEName_TRACK_HAIK[] = _("TRACK-HAIK");
-static const u8 SEName_TRACK_DOOR[] = _("TRACK-DOOR");
-static const u8 SEName_MOTER[] = _("MOTER");
-static const u8 SEName_CARD[] = _("CARD");
-static const u8 SEName_SAVE[] = _("SAVE");
-static const u8 SEName_KON[] = _("KON");
-static const u8 SEName_KON2[] = _("KON2");
-static const u8 SEName_KON3[] = _("KON3");
-static const u8 SEName_KON4[] = _("KON4");
-static const u8 SEName_SUIKOMU[] = _("SUIKOMU");
-static const u8 SEName_NAGERU[] = _("NAGERU");
-static const u8 SEName_TOY_C[] = _("TOY-C");
-static const u8 SEName_TOY_D[] = _("TOY-D");
-static const u8 SEName_TOY_E[] = _("TOY-E");
-static const u8 SEName_TOY_F[] = _("TOY-F");
-static const u8 SEName_TOY_G[] = _("TOY-G");
-static const u8 SEName_TOY_A[] = _("TOY-A");
-static const u8 SEName_TOY_B[] = _("TOY-B");
-static const u8 SEName_TOY_C1[] = _("TOY-C1");
-static const u8 SEName_MIZU[] = _("MIZU");
-static const u8 SEName_HASHI[] = _("HASHI");
-static const u8 SEName_DAUGI[] = _("DAUGI");
-static const u8 SEName_PINPON[] = _("PINPON");
-static const u8 SEName_FUUSEN1[] = _("FUUSEN1");
-static const u8 SEName_FUUSEN2[] = _("FUUSEN2");
-static const u8 SEName_FUUSEN3[] = _("FUUSEN3");
-static const u8 SEName_TOY_KABE[] = _("TOY-KABE");
-static const u8 SEName_TOY_DANGO[] = _("TOY-DANGO");
-static const u8 SEName_DOKU[] = _("DOKU");
-static const u8 SEName_ESUKA[] = _("ESUKA");
-static const u8 SEName_T_AME[] = _("T-AME");
-static const u8 SEName_T_AME_E[] = _("T-AME-E");
-static const u8 SEName_T_OOAME[] = _("T-OOAME");
-static const u8 SEName_T_OOAME_E[] = _("T-OOAME-E");
-static const u8 SEName_T_KOAME[] = _("T-KOAME");
-static const u8 SEName_T_KOAME_E[] = _("T-KOAME-E");
-static const u8 SEName_T_KAMI[] = _("T-KAMI");
-static const u8 SEName_T_KAMI2[] = _("T-KAMI2");
-static const u8 SEName_ELEBETA[] = _("ELEBETA");
-static const u8 SEName_HINSI[] = _("HINSI");
-static const u8 SEName_EXPMAX[] = _("EXPMAX");
-static const u8 SEName_TAMAKORO[] = _("TAMAKORO");
-static const u8 SEName_TAMAKORO_E[] = _("TAMAKORO-E");
-static const u8 SEName_BASABASA[] = _("BASABASA");
-static const u8 SEName_REGI[] = _("REGI");
-static const u8 SEName_C_GAJI[] = _("C-GAJI");
-static const u8 SEName_C_MAKU_U[] = _("C-MAKU-U");
-static const u8 SEName_C_MAKU_D[] = _("C-MAKU-D");
-static const u8 SEName_C_PASI[] = _("C-PASI");
-static const u8 SEName_C_SYU[] = _("C-SYU");
-static const u8 SEName_C_PIKON[] = _("C-PIKON");
-static const u8 SEName_REAPOKE[] = _("REAPOKE");
-static const u8 SEName_OP_BASYU[] = _("OP-BASYU");
-static const u8 SEName_BT_START[] = _("BT-START");
-static const u8 SEName_DENDOU[] = _("DENDOU");
-static const u8 SEName_JIHANKI[] = _("JIHANKI");
-static const u8 SEName_TAMA[] = _("TAMA");
-static const u8 SEName_Z_SCROLL[] = _("Z-SCROLL");
-static const u8 SEName_Z_PAGE[] = _("Z-PAGE");
-static const u8 SEName_PN_ON[] = _("PN-ON");
-static const u8 SEName_PN_OFF[] = _("PN-OFF");
-static const u8 SEName_Z_SEARCH[] = _("Z-SEARCH");
-static const u8 SEName_TAMAGO[] = _("TAMAGO");
-static const u8 SEName_TB_START[] = _("TB-START");
-static const u8 SEName_TB_KON[] = _("TB-KON");
-static const u8 SEName_TB_KARA[] = _("TB-KARA");
-static const u8 SEName_BIDORO[] = _("BIDORO");
-static const u8 SEName_W085[] = _("W085");
-static const u8 SEName_W085B[] = _("W085B");
-static const u8 SEName_W231[] = _("W231");
-static const u8 SEName_W171[] = _("W171");
-static const u8 SEName_W233[] = _("W233");
-static const u8 SEName_W233B[] = _("W233B");
-static const u8 SEName_W145[] = _("W145");
-static const u8 SEName_W145B[] = _("W145B");
-static const u8 SEName_W145C[] = _("W145C");
-static const u8 SEName_W240[] = _("W240");
-static const u8 SEName_W015[] = _("W015");
-static const u8 SEName_W081[] = _("W081");
-static const u8 SEName_W081B[] = _("W081B");
-static const u8 SEName_W088[] = _("W088");
-static const u8 SEName_W016[] = _("W016");
-static const u8 SEName_W016B[] = _("W016B");
-static const u8 SEName_W003[] = _("W003");
-static const u8 SEName_W104[] = _("W104");
-static const u8 SEName_W013[] = _("W013");
-static const u8 SEName_W196[] = _("W196");
-static const u8 SEName_W086[] = _("W086");
-static const u8 SEName_W004[] = _("W004");
-static const u8 SEName_W025[] = _("W025");
-static const u8 SEName_W025B[] = _("W025B");
-static const u8 SEName_W152[] = _("W152");
-static const u8 SEName_W026[] = _("W026");
-static const u8 SEName_W172[] = _("W172");
-static const u8 SEName_W172B[] = _("W172B");
-static const u8 SEName_W053[] = _("W053");
-static const u8 SEName_W007[] = _("W007");
-static const u8 SEName_W092[] = _("W092");
-static const u8 SEName_W221[] = _("W221");
-static const u8 SEName_W221B[] = _("W221B");
-static const u8 SEName_W052[] = _("W052");
-static const u8 SEName_W036[] = _("W036");
-static const u8 SEName_W059[] = _("W059");
-static const u8 SEName_W059B[] = _("W059B");
-static const u8 SEName_W010[] = _("W010");
-static const u8 SEName_W011[] = _("W011");
-static const u8 SEName_W017[] = _("W017");
-static const u8 SEName_W019[] = _("W019");
-static const u8 SEName_W028[] = _("W028");
-static const u8 SEName_W013B[] = _("W013B");
-static const u8 SEName_W044[] = _("W044");
-static const u8 SEName_W029[] = _("W029");
-static const u8 SEName_W057[] = _("W057");
-static const u8 SEName_W056[] = _("W056");
-static const u8 SEName_W250[] = _("W250");
-static const u8 SEName_W030[] = _("W030");
-static const u8 SEName_W039[] = _("W039");
-static const u8 SEName_W054[] = _("W054");
-static const u8 SEName_W077[] = _("W077");
-static const u8 SEName_W020[] = _("W020");
-static const u8 SEName_W082[] = _("W082");
-static const u8 SEName_W047[] = _("W047");
-static const u8 SEName_W195[] = _("W195");
-static const u8 SEName_W006[] = _("W006");
-static const u8 SEName_W091[] = _("W091");
-static const u8 SEName_W146[] = _("W146");
-static const u8 SEName_W120[] = _("W120");
-static const u8 SEName_W153[] = _("W153");
-static const u8 SEName_W071B[] = _("W071B");
-static const u8 SEName_W071[] = _("W071");
-static const u8 SEName_W103[] = _("W103");
-static const u8 SEName_W062[] = _("W062");
-static const u8 SEName_W062B[] = _("W062B");
-static const u8 SEName_W048[] = _("W048");
-static const u8 SEName_W187[] = _("W187");
-static const u8 SEName_W118[] = _("W118");
-static const u8 SEName_W155[] = _("W155");
-static const u8 SEName_W122[] = _("W122");
-static const u8 SEName_W060[] = _("W060");
-static const u8 SEName_W185[] = _("W185");
-static const u8 SEName_W014[] = _("W014");
-static const u8 SEName_W043[] = _("W043");
-static const u8 SEName_W207[] = _("W207");
-static const u8 SEName_W207B[] = _("W207B");
-static const u8 SEName_W215[] = _("W215");
-static const u8 SEName_W109[] = _("W109");
-static const u8 SEName_W173[] = _("W173");
-static const u8 SEName_W280[] = _("W280");
-static const u8 SEName_W202[] = _("W202");
-static const u8 SEName_W060B[] = _("W060B");
-static const u8 SEName_W076[] = _("W076");
-static const u8 SEName_W080[] = _("W080");
-static const u8 SEName_W100[] = _("W100");
-static const u8 SEName_W107[] = _("W107");
-static const u8 SEName_W166[] = _("W166");
-static const u8 SEName_W129[] = _("W129");
-static const u8 SEName_W115[] = _("W115");
-static const u8 SEName_W112[] = _("W112");
-static const u8 SEName_W197[] = _("W197");
-static const u8 SEName_W199[] = _("W199");
-static const u8 SEName_W236[] = _("W236");
-static const u8 SEName_W204[] = _("W204");
-static const u8 SEName_W268[] = _("W268");
-static const u8 SEName_W070[] = _("W070");
-static const u8 SEName_W063[] = _("W063");
-static const u8 SEName_W127[] = _("W127");
-static const u8 SEName_W179[] = _("W179");
-static const u8 SEName_W151[] = _("W151");
-static const u8 SEName_W201[] = _("W201");
-static const u8 SEName_W161[] = _("W161");
-static const u8 SEName_W161B[] = _("W161B");
-static const u8 SEName_W227[] = _("W227");
-static const u8 SEName_W227B[] = _("W227B");
-static const u8 SEName_W226[] = _("W226");
-static const u8 SEName_W208[] = _("W208");
-static const u8 SEName_W213[] = _("W213");
-static const u8 SEName_W213B[] = _("W213B");
-static const u8 SEName_W234[] = _("W234");
-static const u8 SEName_W260[] = _("W260");
-static const u8 SEName_W328[] = _("W328");
-static const u8 SEName_W320[] = _("W320");
-static const u8 SEName_W255[] = _("W255");
-static const u8 SEName_W291[] = _("W291");
-static const u8 SEName_W089[] = _("W089");
-static const u8 SEName_W239[] = _("W239");
-static const u8 SEName_W230[] = _("W230");
-static const u8 SEName_W281[] = _("W281");
-static const u8 SEName_W327[] = _("W327");
-static const u8 SEName_W287[] = _("W287");
-static const u8 SEName_W257[] = _("W257");
-static const u8 SEName_W253[] = _("W253");
-static const u8 SEName_W258[] = _("W258");
-static const u8 SEName_W322[] = _("W322");
-static const u8 SEName_W298[] = _("W298");
-static const u8 SEName_W287B[] = _("W287B");
-static const u8 SEName_W114[] = _("W114");
-static const u8 SEName_W063B[] = _("W063B");
-
-static const u8 *const gSENames[] =
-{
- SEName_STOP,
- SEName_KAIFUKU,
- SEName_PC_LOGON,
- SEName_PC_OFF,
- SEName_PC_ON,
- SEName_SELECT,
- SEName_WIN_OPEN,
- SEName_WALL_HIT,
- SEName_DOOR,
- SEName_KAIDAN,
- SEName_DANSA,
- SEName_JITENSYA,
- SEName_KOUKA_L,
- SEName_KOUKA_M,
- SEName_KOUKA_H,
- SEName_BOWA2,
- SEName_POKE_DEAD,
- SEName_NIGERU,
- SEName_JIDO_DOA,
- SEName_NAMINORI,
- SEName_BAN,
- SEName_PIN,
- SEName_BOO,
- SEName_BOWA,
- SEName_JYUNI,
- SEName_A,
- SEName_I,
- SEName_U,
- SEName_E,
- SEName_O,
- SEName_N,
- SEName_SEIKAI,
- SEName_HAZURE,
- SEName_EXP,
- SEName_JITE_PYOKO,
- SEName_MU_PACHI,
- SEName_TK_KASYA,
- SEName_FU_ZAKU,
- SEName_FU_ZAKU2,
- SEName_FU_ZUZUZU,
- SEName_RU_GASHIN,
- SEName_RU_GASYAN,
- SEName_RU_BARI,
- SEName_RU_HYUU,
- SEName_KI_GASYAN,
- SEName_TK_WARPIN,
- SEName_TK_WARPOUT,
- SEName_TU_SAA,
- SEName_HI_TURUN,
- SEName_TRACK_MOVE,
- SEName_TRACK_STOP,
- SEName_TRACK_HAIK,
- SEName_TRACK_DOOR,
- SEName_MOTER,
- SEName_CARD,
- SEName_SAVE,
- SEName_KON,
- SEName_KON2,
- SEName_KON3,
- SEName_KON4,
- SEName_SUIKOMU,
- SEName_NAGERU,
- SEName_TOY_C,
- SEName_TOY_D,
- SEName_TOY_E,
- SEName_TOY_F,
- SEName_TOY_G,
- SEName_TOY_A,
- SEName_TOY_B,
- SEName_TOY_C1,
- SEName_MIZU,
- SEName_HASHI,
- SEName_DAUGI,
- SEName_PINPON,
- SEName_FUUSEN1,
- SEName_FUUSEN2,
- SEName_FUUSEN3,
- SEName_TOY_KABE,
- SEName_TOY_DANGO,
- SEName_DOKU,
- SEName_ESUKA,
- SEName_T_AME,
- SEName_T_AME_E,
- SEName_T_OOAME,
- SEName_T_OOAME_E,
- SEName_T_KOAME,
- SEName_T_KOAME_E,
- SEName_T_KAMI,
- SEName_T_KAMI2,
- SEName_ELEBETA,
- SEName_HINSI,
- SEName_EXPMAX,
- SEName_TAMAKORO,
- SEName_TAMAKORO_E,
- SEName_BASABASA,
- SEName_REGI,
- SEName_C_GAJI,
- SEName_C_MAKU_U,
- SEName_C_MAKU_D,
- SEName_C_PASI,
- SEName_C_SYU,
- SEName_C_PIKON,
- SEName_REAPOKE,
- SEName_OP_BASYU,
- SEName_BT_START,
- SEName_DENDOU,
- SEName_JIHANKI,
- SEName_TAMA,
- SEName_Z_SCROLL,
- SEName_Z_PAGE,
- SEName_PN_ON,
- SEName_PN_OFF,
- SEName_Z_SEARCH,
- SEName_TAMAGO,
- SEName_TB_START,
- SEName_TB_KON,
- SEName_TB_KARA,
- SEName_BIDORO,
- SEName_W085,
- SEName_W085B,
- SEName_W231,
- SEName_W171,
- SEName_W233,
- SEName_W233B,
- SEName_W145,
- SEName_W145B,
- SEName_W145C,
- SEName_W240,
- SEName_W015,
- SEName_W081,
- SEName_W081B,
- SEName_W088,
- SEName_W016,
- SEName_W016B,
- SEName_W003,
- SEName_W104,
- SEName_W013,
- SEName_W196,
- SEName_W086,
- SEName_W004,
- SEName_W025,
- SEName_W025B,
- SEName_W152,
- SEName_W026,
- SEName_W172,
- SEName_W172B,
- SEName_W053,
- SEName_W007,
- SEName_W092,
- SEName_W221,
- SEName_W221B,
- SEName_W052,
- SEName_W036,
- SEName_W059,
- SEName_W059B,
- SEName_W010,
- SEName_W011,
- SEName_W017,
- SEName_W019,
- SEName_W028,
- SEName_W013B,
- SEName_W044,
- SEName_W029,
- SEName_W057,
- SEName_W056,
- SEName_W250,
- SEName_W030,
- SEName_W039,
- SEName_W054,
- SEName_W077,
- SEName_W020,
- SEName_W082,
- SEName_W047,
- SEName_W195,
- SEName_W006,
- SEName_W091,
- SEName_W146,
- SEName_W120,
- SEName_W153,
- SEName_W071B,
- SEName_W071,
- SEName_W103,
- SEName_W062,
- SEName_W062B,
- SEName_W048,
- SEName_W187,
- SEName_W118,
- SEName_W155,
- SEName_W122,
- SEName_W060,
- SEName_W185,
- SEName_W014,
- SEName_W043,
- SEName_W207,
- SEName_W207B,
- SEName_W215,
- SEName_W109,
- SEName_W173,
- SEName_W280,
- SEName_W202,
- SEName_W060B,
- SEName_W076,
- SEName_W080,
- SEName_W100,
- SEName_W107,
- SEName_W166,
- SEName_W129,
- SEName_W115,
- SEName_W112,
- SEName_W197,
- SEName_W199,
- SEName_W236,
- SEName_W204,
- SEName_W268,
- SEName_W070,
- SEName_W063,
- SEName_W127,
- SEName_W179,
- SEName_W151,
- SEName_W201,
- SEName_W161,
- SEName_W161B,
- SEName_W227,
- SEName_W227B,
- SEName_W226,
- SEName_W208,
- SEName_W213,
- SEName_W213B,
- SEName_W234,
- SEName_W260,
- SEName_W328,
- SEName_W320,
- SEName_W255,
- SEName_W291,
- SEName_W089,
- SEName_W239,
- SEName_W230,
- SEName_W281,
- SEName_W327,
- SEName_W287,
- SEName_W257,
- SEName_W253,
- SEName_W258,
- SEName_W322,
- SEName_W298,
- SEName_W287B,
- SEName_W114,
- SEName_W063B
-};
-
-void sub_80BA0A8(void)
-{
- RunTasks();
- AnimateSprites();
- BuildOamBuffer();
- UpdatePaletteFade();
-}
-
-void sub_80BA0C0(void)
-{
- LoadOam();
- ProcessSpriteCopyRequests();
- TransferPlttBuffer();
-
- if(gUnknown_020387B0 != 0)
- {
- m4aSoundMain();
- m4aSoundMain();
- m4aSoundMain();
- }
-}
-
-// unused
-void CB2_StartSoundCheckMenu(void)
-{
- u8 taskId;
-
- SetVBlankCallback(NULL);
- REG_DISPCNT = 0;
- REG_BG2CNT = 0;
- REG_BG1CNT = 0;
- REG_BG0CNT = 0;
- REG_BG2HOFS = 0;
- REG_BG2VOFS = 0;
- REG_BG1HOFS = 0;
- REG_BG1VOFS = 0;
- REG_BG0HOFS = 0;
- REG_BG0VOFS = 0;
- DmaFill16(3, 0, VRAM, VRAM_SIZE);
- DmaFill32(3, 0, OAM, OAM_SIZE);
- DmaFill16(3, 0, PLTT, PLTT_SIZE);
- ResetPaletteFade();
- ResetTasks();
- ResetSpriteData();
- SetUpWindowConfig(&gWindowConfig_81E6C3C);
- InitMenuWindow(&gWindowConfig_81E6CE4);
- BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, 0);
- REG_WIN0H = WIN_RANGE(0, 0);
- REG_WIN0V = WIN_RANGE(0, 0);
- REG_WIN1H = WIN_RANGE(0, 0);
- REG_WIN1V = WIN_RANGE(0, 0);
- REG_WININ = 0x1111;
- REG_WINOUT = 0x31;
- REG_BLDCNT = 0xE1;
- REG_BLDALPHA = 0;
- REG_BLDY = 7;
- REG_IE = 1; // could be a typo of REG_IME
- REG_IE |= 1;
- REG_DISPSTAT |= 8;
- SetVBlankCallback(sub_80BA0C0);
- SetMainCallback2(sub_80BA0A8);
- REG_DISPCNT = 0x7140;
- taskId = CreateTask(sub_80BA258, 0);
- TASK.WINDOW_SELECTED = BGM_WINDOW;
- TASK.BGM_INDEX = 0;
- TASK.SE_INDEX = 0;
- TASK.UNK_DATA3 = 0;
- gUnknown_020387B0 = 0;
- TASK.UNK_DATA3 = 0; // why?
- m4aSoundInit();
-}
-
-// Task_InitSoundCheckMenu
-void sub_80BA258(u8 taskId)
-{
- u8 soundcheckStr[sizeof(gDebugText_SoundCheckJap)];
- u8 bgmStr[sizeof(gDebugText_BGM)];
- u8 seStr[sizeof(gDebugText_SE)];
- u8 abDescStr[sizeof(gDebugText_ABDesc)];
- u8 upDownStr[sizeof(gDebugText_UpDown)];
- u8 driverStr[sizeof(gDebugText_DriverTest)];
-
- memcpy(soundcheckStr, gDebugText_SoundCheckJap, sizeof(gDebugText_SoundCheckJap));
- memcpy(bgmStr, gDebugText_BGM, sizeof(gDebugText_BGM));
- memcpy(seStr, gDebugText_SE, sizeof(gDebugText_SE));
- memcpy(abDescStr, gDebugText_ABDesc, sizeof(gDebugText_ABDesc));
- memcpy(upDownStr, gDebugText_UpDown, sizeof(gDebugText_UpDown));
- memcpy(driverStr, gDebugText_DriverTest, sizeof(gDebugText_DriverTest));
-
- if(!gPaletteFade.active)
- {
- MenuDrawTextWindow(0x2, 0, 0x1B, 0x3);
- MenuDrawTextWindow(0x2, 0x5, 0x1B, 0xA);
- MenuDrawTextWindow(0x2, 0xC, 0x1B, 0x11);
- MenuPrint(soundcheckStr, 4, 1);
- MenuPrint(abDescStr, 14, 1);
- MenuPrint(bgmStr, 4, 6);
- MenuPrint(upDownStr, 14, 6);
- MenuPrint(seStr, 4, 13);
- MenuPrint(upDownStr, 14, 13);
- MenuPrint(driverStr, 14, 18);
- TASK.FUNC = sub_80BA384;
- REG_WIN0H = WIN_RANGE(17, 223);
- REG_WIN0V = WIN_RANGE(1, 31);
- }
-}
-
-void sub_80BA384(u8 taskId) // Task_HandleDrawingSoundCheckMenuText
-{
- sub_80BA6B8(TASK.WINDOW_SELECTED);
- sub_80BA700(TASK.BGM_INDEX + BGM_STOP, 7, 8); // print by BGM index
- sub_80BA79C(gBGMNames[TASK.BGM_INDEX], 11, 8);
- sub_80BA700(TASK.SE_INDEX, 7, 15);
- sub_80BA79C(gSENames[TASK.SE_INDEX], 11, 15);
- TASK.FUNC = sub_80BA65C;
-}
-
-#ifdef NONMATCHING
-bool8 sub_80BA400(u8 taskId) // Task_ProcessSoundCheckMenuInput
-{
- if(gMain.newKeys & R_BUTTON) // driver test
- {
- TASK.FUNC = sub_80BA800;
- return FALSE;
- }
- if(gMain.newKeys & L_BUTTON)
- {
- TASK.FUNC = sub_80BAF84;
- return FALSE;
- }
- if(gMain.newKeys & START_BUTTON)
- {
- TASK.FUNC = sub_80BB25C;
- return FALSE;
- }
- if(gMain.newKeys & A_BUTTON) // both these cases insist on non reuses of certain data variables and cause the function to not match.
- {
- if(TASK.WINDOW_SELECTED != 0) // is playing?
- {
- if(TASK.UNK_DATA4 != 0)
- {
- if(TASK.SE_INDEX != 0) // why are you insiting on a non signed halfword?
- {
- m4aSongNumStop(TASK.UNK_DATA4);
- }
- else
- {
- m4aSongNumStop(TASK.SE_INDEX);
- TASK.UNK_DATA4 = TASK.SE_INDEX;
- return FALSE;
- }
- }
- else if(TASK.SE_INDEX == 0) // _080BA4BA
- {
- return FALSE;
- }
- // _080BA4C4
- m4aSongNumStart(TASK.SE_INDEX);
- TASK.UNK_DATA4 = TASK.SE_INDEX;
- return FALSE;
- }
- else // _080BA4D0
- {
- if(TASK.UNK_DATA3 != 0)
- {
- if(TASK.BGM_INDEX != 0)
- {
- m4aSongNumStop(TASK.UNK_DATA3 + BGM_STOP);
- }
- else // _080BA500
- {
- m4aSongNumStop(TASK.UNK_DATA3 + BGM_STOP);
- TASK.UNK_DATA3 = TASK.BGM_INDEX;
- return FALSE;
- }
- }
- else if(TASK.BGM_INDEX == 0) // _080BA514
- return FALSE;
-
- m4aSongNumStart(TASK.BGM_INDEX + BGM_STOP);
- TASK.UNK_DATA3 = TASK.BGM_INDEX;
- }
- return FALSE;
- }
- if(gMain.newKeys & B_BUTTON)
- {
- m4aSongNumStart(5);
- BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, 0);
- TASK.FUNC = sub_80BA68C;
- return FALSE;
- }
- if(gMain.newAndRepeatedKeys & DPAD_UP)
- {
- TASK.data[8] ^= A_BUTTON; // huh?
- return TRUE;
- }
- if(gMain.newAndRepeatedKeys & DPAD_DOWN)
- {
- TASK.data[8] ^= A_BUTTON; // huh?
- return TRUE;
- }
- else
- {
- u16 keys = gMain.newAndRepeatedKeys & DPAD_RIGHT;
- if(keys)
- {
- if(TASK.WINDOW_SELECTED != 0)
- {
- if(TASK.SE_INDEX > 0)
- {
- TASK.SE_INDEX--;
- }
- else
- {
- TASK.SE_INDEX = 0xF7;
- }
- }
- else if(TASK.BGM_INDEX > 0)
- {
- TASK.BGM_INDEX--;
- }
- else
- {
- TASK.BGM_INDEX = 0x75;
- }
- return TRUE;
- }
- if(gMain.newAndRepeatedKeys & DPAD_LEFT)
- {
- if(TASK.WINDOW_SELECTED != 0)
- {
- if(TASK.SE_INDEX < 0xF7)
- {
- TASK.SE_INDEX++;
- }
- else
- {
- TASK.SE_INDEX = keys; // ??
- }
- }
- else if(TASK.BGM_INDEX < 0x75)
- {
- TASK.BGM_INDEX++;
- return TRUE;
- }
- else
- {
- TASK.BGM_INDEX = TASK.SE_INDEX;
- return TRUE;
- }
- return TRUE;
- }
- if(gMain.heldKeys & SELECT_BUTTON)
- {
- gUnknown_020387B0 = A_BUTTON;
- return FALSE;
- }
- else
- {
- gUnknown_020387B0 = (gMain.heldKeys & SELECT_BUTTON);
- return FALSE;
- }
- }
-}
-#else
-__attribute__((naked))
-bool8 sub_80BA400(u8 taskId)
-{
- asm(".syntax unified\n\
- push {r4-r6,lr}\n\
- sub sp, 0x4\n\
- lsls r0, 24\n\
- lsrs r4, r0, 24\n\
- ldr r2, _080BA428 @ =gMain\n\
- ldrh r1, [r2, 0x2E]\n\
- movs r0, 0x80\n\
- lsls r0, 1\n\
- ands r0, r1\n\
- cmp r0, 0\n\
- beq _080BA434\n\
- ldr r0, _080BA42C @ =gTasks\n\
- lsls r1, r4, 2\n\
- adds r1, r4\n\
- lsls r1, 3\n\
- adds r1, r0\n\
- ldr r0, _080BA430 @ =sub_80BA800\n\
- str r0, [r1]\n\
- b _080BA64C\n\
- .align 2, 0\n\
-_080BA428: .4byte gMain\n\
-_080BA42C: .4byte gTasks\n\
-_080BA430: .4byte sub_80BA800\n\
-_080BA434:\n\
- movs r0, 0x80\n\
- lsls r0, 2\n\
- ands r0, r1\n\
- cmp r0, 0\n\
- beq _080BA458\n\
- ldr r0, _080BA450 @ =gTasks\n\
- lsls r1, r4, 2\n\
- adds r1, r4\n\
- lsls r1, 3\n\
- adds r1, r0\n\
- ldr r0, _080BA454 @ =sub_80BAF84\n\
- str r0, [r1]\n\
- b _080BA64C\n\
- .align 2, 0\n\
-_080BA450: .4byte gTasks\n\
-_080BA454: .4byte sub_80BAF84\n\
-_080BA458:\n\
- movs r0, 0x8\n\
- ands r0, r1\n\
- cmp r0, 0\n\
- beq _080BA478\n\
- ldr r0, _080BA470 @ =gTasks\n\
- lsls r1, r4, 2\n\
- adds r1, r4\n\
- lsls r1, 3\n\
- adds r1, r0\n\
- ldr r0, _080BA474 @ =sub_80BB25C\n\
- str r0, [r1]\n\
- b _080BA64C\n\
- .align 2, 0\n\
-_080BA470: .4byte gTasks\n\
-_080BA474: .4byte sub_80BB25C\n\
-_080BA478:\n\
- movs r6, 0x1\n\
- movs r5, 0x1\n\
- ands r5, r1\n\
- cmp r5, 0\n\
- beq _080BA538\n\
- ldr r0, _080BA4AC @ =gTasks\n\
- lsls r1, r4, 2\n\
- adds r1, r4\n\
- lsls r1, 3\n\
- adds r5, r1, r0\n\
- movs r1, 0x8\n\
- ldrsh r0, [r5, r1]\n\
- cmp r0, 0\n\
- beq _080BA4D0\n\
- movs r2, 0x10\n\
- ldrsh r0, [r5, r2]\n\
- cmp r0, 0\n\
- beq _080BA4BA\n\
- movs r3, 0xC\n\
- ldrsh r4, [r5, r3]\n\
- cmp r4, 0\n\
- beq _080BA4B0\n\
- ldrh r0, [r5, 0x10]\n\
- bl m4aSongNumStop\n\
- b _080BA4C4\n\
- .align 2, 0\n\
-_080BA4AC: .4byte gTasks\n\
-_080BA4B0:\n\
- ldrh r0, [r5, 0x10]\n\
- bl m4aSongNumStop\n\
- strh r4, [r5, 0x10]\n\
- b _080BA64C\n\
-_080BA4BA:\n\
- movs r4, 0xC\n\
- ldrsh r0, [r5, r4]\n\
- cmp r0, 0\n\
- bne _080BA4C4\n\
- b _080BA64C\n\
-_080BA4C4:\n\
- ldrh r0, [r5, 0xC]\n\
- bl m4aSongNumStart\n\
- ldrh r0, [r5, 0xC]\n\
- strh r0, [r5, 0x10]\n\
- b _080BA64C\n\
-_080BA4D0:\n\
- ldrh r1, [r5, 0xE]\n\
- movs r2, 0xE\n\
- ldrsh r0, [r5, r2]\n\
- cmp r0, 0\n\
- beq _080BA514\n\
- movs r3, 0xA\n\
- ldrsh r4, [r5, r3]\n\
- cmp r4, 0\n\
- beq _080BA500\n\
- ldr r0, _080BA4FC @ =0x0000015d\n\
- adds r4, r0, 0\n\
- adds r0, r1, r4\n\
- lsls r0, 16\n\
- lsrs r0, 16\n\
- bl m4aSongNumStop\n\
- ldrh r1, [r5, 0xA]\n\
- adds r4, r1\n\
- lsls r4, 16\n\
- lsrs r4, 16\n\
- adds r0, r4, 0\n\
- b _080BA528\n\
- .align 2, 0\n\
-_080BA4FC: .4byte 0x0000015d\n\
-_080BA500:\n\
- ldr r2, _080BA510 @ =0x0000015d\n\
- adds r0, r1, r2\n\
- lsls r0, 16\n\
- lsrs r0, 16\n\
- bl m4aSongNumStop\n\
- strh r4, [r5, 0xE]\n\
- b _080BA64C\n\
- .align 2, 0\n\
-_080BA510: .4byte 0x0000015d\n\
-_080BA514:\n\
- ldrh r1, [r5, 0xA]\n\
- movs r3, 0xA\n\
- ldrsh r0, [r5, r3]\n\
- cmp r0, 0\n\
- bne _080BA520\n\
- b _080BA64C\n\
-_080BA520:\n\
- ldr r4, _080BA534 @ =0x0000015d\n\
- adds r0, r1, r4\n\
- lsls r0, 16\n\
- lsrs r0, 16\n\
-_080BA528:\n\
- bl m4aSongNumStart\n\
- ldrh r0, [r5, 0xA]\n\
- strh r0, [r5, 0xE]\n\
- b _080BA64C\n\
- .align 2, 0\n\
-_080BA534: .4byte 0x0000015d\n\
-_080BA538:\n\
- movs r0, 0x2\n\
- ands r0, r1\n\
- cmp r0, 0\n\
- beq _080BA570\n\
- movs r0, 0x5\n\
- bl m4aSongNumStart\n\
- movs r0, 0x1\n\
- negs r0, r0\n\
- str r5, [sp]\n\
- movs r1, 0\n\
- movs r2, 0\n\
- movs r3, 0x10\n\
- bl BeginNormalPaletteFade\n\
- ldr r1, _080BA568 @ =gTasks\n\
- lsls r0, r4, 2\n\
- adds r0, r4\n\
- lsls r0, 3\n\
- adds r0, r1\n\
- ldr r1, _080BA56C @ =sub_80BA68C\n\
- str r1, [r0]\n\
- b _080BA64C\n\
- .align 2, 0\n\
-_080BA568: .4byte gTasks\n\
-_080BA56C: .4byte sub_80BA68C\n\
-_080BA570:\n\
- ldrh r1, [r2, 0x30]\n\
- movs r0, 0x40\n\
- ands r0, r1\n\
- cmp r0, 0\n\
- bne _080BA582\n\
- movs r0, 0x80\n\
- ands r0, r1\n\
- cmp r0, 0\n\
- beq _080BA59C\n\
-_080BA582:\n\
- ldr r0, _080BA598 @ =gTasks\n\
- lsls r1, r4, 2\n\
- adds r1, r4\n\
- lsls r1, 3\n\
- adds r1, r0\n\
- ldrh r0, [r1, 0x8]\n\
- eors r0, r6\n\
- strh r0, [r1, 0x8]\n\
-_080BA592:\n\
- movs r0, 0x1\n\
- b _080BA64E\n\
- .align 2, 0\n\
-_080BA598: .4byte gTasks\n\
-_080BA59C:\n\
- movs r0, 0x10\n\
- ands r0, r1\n\
- lsls r0, 16\n\
- lsrs r3, r0, 16\n\
- cmp r3, 0\n\
- beq _080BA5EA\n\
- ldr r0, _080BA5CC @ =gTasks\n\
- lsls r1, r4, 2\n\
- adds r1, r4\n\
- lsls r1, 3\n\
- adds r1, r0\n\
- movs r2, 0x8\n\
- ldrsh r0, [r1, r2]\n\
- cmp r0, 0\n\
- beq _080BA5D6\n\
- ldrh r2, [r1, 0xC]\n\
- movs r3, 0xC\n\
- ldrsh r0, [r1, r3]\n\
- cmp r0, 0\n\
- ble _080BA5D0\n\
- subs r0, r2, 0x1\n\
- strh r0, [r1, 0xC]\n\
- b _080BA592\n\
- .align 2, 0\n\
-_080BA5CC: .4byte gTasks\n\
-_080BA5D0:\n\
- movs r0, 0xF7\n\
- strh r0, [r1, 0xC]\n\
- b _080BA592\n\
-_080BA5D6:\n\
- ldrh r2, [r1, 0xA]\n\
- movs r4, 0xA\n\
- ldrsh r0, [r1, r4]\n\
- cmp r0, 0\n\
- ble _080BA5E4\n\
- subs r0, r2, 0x1\n\
- b _080BA5E6\n\
-_080BA5E4:\n\
- movs r0, 0x75\n\
-_080BA5E6:\n\
- strh r0, [r1, 0xA]\n\
- b _080BA592\n\
-_080BA5EA:\n\
- movs r0, 0x20\n\
- ands r0, r1\n\
- cmp r0, 0\n\
- beq _080BA630\n\
- ldr r1, _080BA614 @ =gTasks\n\
- lsls r0, r4, 2\n\
- adds r0, r4\n\
- lsls r0, 3\n\
- adds r1, r0, r1\n\
- movs r0, 0x8\n\
- ldrsh r2, [r1, r0]\n\
- cmp r2, 0\n\
- beq _080BA61C\n\
- ldrh r2, [r1, 0xC]\n\
- movs r4, 0xC\n\
- ldrsh r0, [r1, r4]\n\
- cmp r0, 0xF6\n\
- bgt _080BA618\n\
- adds r0, r2, 0x1\n\
- strh r0, [r1, 0xC]\n\
- b _080BA592\n\
- .align 2, 0\n\
-_080BA614: .4byte gTasks\n\
-_080BA618:\n\
- strh r3, [r1, 0xC]\n\
- b _080BA592\n\
-_080BA61C:\n\
- ldrh r3, [r1, 0xA]\n\
- movs r4, 0xA\n\
- ldrsh r0, [r1, r4]\n\
- cmp r0, 0x74\n\
- bgt _080BA62C\n\
- adds r0, r3, 0x1\n\
- strh r0, [r1, 0xA]\n\
- b _080BA592\n\
-_080BA62C:\n\
- strh r2, [r1, 0xA]\n\
- b _080BA592\n\
-_080BA630:\n\
- ldrh r1, [r2, 0x2C]\n\
- movs r0, 0x4\n\
- ands r0, r1\n\
- lsls r0, 16\n\
- lsrs r1, r0, 16\n\
- cmp r1, 0\n\
- beq _080BA648\n\
- ldr r0, _080BA644 @ =gUnknown_020387B0\n\
- strb r6, [r0]\n\
- b _080BA64C\n\
- .align 2, 0\n\
-_080BA644: .4byte gUnknown_020387B0\n\
-_080BA648:\n\
- ldr r0, _080BA658 @ =gUnknown_020387B0\n\
- strb r1, [r0]\n\
-_080BA64C:\n\
- movs r0, 0\n\
-_080BA64E:\n\
- add sp, 0x4\n\
- pop {r4-r6}\n\
- pop {r1}\n\
- bx r1\n\
- .align 2, 0\n\
-_080BA658: .4byte gUnknown_020387B0\n\
- .syntax divided");
-}
-#endif
-
-void sub_80BA65C(u8 taskId)
-{
- if(sub_80BA400(taskId) != FALSE)
- TASK.FUNC = sub_80BA384;
-}
-
-void sub_80BA68C(u8 taskId)
-{
- if(!gPaletteFade.active)
- {
- DestroyTask(taskId);
- SetMainCallback2(CB2_InitTitleScreen);
- }
-}
-
-void sub_80BA6B8(u8 windowType)
-{
- switch(windowType)
- {
- case BGM_WINDOW:
- default:
- REG_WIN1H = WIN_RANGE(17, 223);
- REG_WIN1V = WIN_RANGE(41, 87);
- break;
- case SE_WINDOW:
- REG_WIN1H = WIN_RANGE(17, 223);
- REG_WIN1V = WIN_RANGE(97, 143);
- break;
- }
-}
-
-void sub_80BA700(u16 soundIndex, u16 x, u16 y) // PrintSoundNumber ?
-{
- u8 i;
- u8 str[5];
- bool8 someBool;
- u8 divisorValue;
-
- for(i = 0; i < 3; i++)
- str[i] = 0; // initialize array
-
- str[3] = CHAR_ELLIPSIS;
- str[4] = EOS;
- someBool = FALSE;
-
- divisorValue = soundIndex / 100;
- if(divisorValue)
- {
- str[0] = divisorValue + CHAR_0;
- someBool = TRUE;
- }
-
- divisorValue = (soundIndex % 100) / 10;
- if(divisorValue || someBool != FALSE)
- str[1] = divisorValue + CHAR_0;
-
- str[2] = ((soundIndex % 100) % 10) + CHAR_0;
- MenuPrint(str, x, y);
-}
-
-void sub_80BA79C(const u8 *const string, u16 x, u16 y)
-{
- u8 i;
- u8 str[11];
-
- for(i = 0; i < 11; i++)
- str[i] = 0; // format string.
-
- str[10] = EOS; // the above for loop formats the last element of the array unnecessarily.
-
- for(i = 0; string[i] != EOS && i < 10; i++)
- str[i] = string[i];
-
- MenuPrint(str, x, y);
-}
-
-void sub_80BA800(u8 taskId) // Task_DrawDriverTestMenu
-{
- u8 bbackStr[sizeof(gDebugText_BBack)];
- u8 aplayStr[sizeof(gDebugText_APlay)];
- u8 voiceStr[sizeof(gDebugText_Voice)];
- u8 volumeStr[sizeof(gDebugText_Volume)];
- u8 panpotStr[sizeof(gDebugText_Panpot)];
- u8 pitchStr[sizeof(gDebugText_Pitch)];
- u8 lengthStr[sizeof(gDebugText_Length)];
- u8 releaseStr[sizeof(gDebugText_Release)];
- u8 progressStr[sizeof(gDebugText_Progress)];
- u8 chorusStr[sizeof(gDebugText_Chorus)];
- u8 priorityStr[sizeof(gDebugText_Priority)];
- u8 playingStr[sizeof(gDebugText_Playing)];
- u8 reverseStr[sizeof(gDebugText_Reverse)];
- u8 stereoStr[sizeof(gDebugText_Stereo)];
-
- memcpy(bbackStr, gDebugText_BBack, sizeof(gDebugText_BBack));
- memcpy(aplayStr, gDebugText_APlay, sizeof(gDebugText_APlay));
- memcpy(voiceStr, gDebugText_Voice, sizeof(gDebugText_Voice));
- memcpy(volumeStr, gDebugText_Volume, sizeof(gDebugText_Volume));
- memcpy(panpotStr, gDebugText_Panpot, sizeof(gDebugText_Panpot));
- memcpy(pitchStr, gDebugText_Pitch, sizeof(gDebugText_Pitch));
- memcpy(lengthStr, gDebugText_Length, sizeof(gDebugText_Length));
- memcpy(releaseStr, gDebugText_Release, sizeof(gDebugText_Release));
- memcpy(progressStr, gDebugText_Progress, sizeof(gDebugText_Progress));
- memcpy(chorusStr, gDebugText_Chorus, sizeof(gDebugText_Chorus));
- memcpy(priorityStr, gDebugText_Priority, sizeof(gDebugText_Priority));
- memcpy(playingStr, gDebugText_Playing, sizeof(gDebugText_Playing));
- memcpy(reverseStr, gDebugText_Reverse, sizeof(gDebugText_Reverse));
- memcpy(stereoStr, gDebugText_Stereo, sizeof(gDebugText_Stereo));
-
- REG_DISPCNT = 0x3140;
- MenuDrawTextWindow(0, 0, 0x1D, 0x13);
- MenuPrint(bbackStr, 0x13, 0x4);
- MenuPrint(aplayStr, 0x13, 0x2);
- MenuPrint(voiceStr, 0x2, 0x1);
- MenuPrint(volumeStr, 0x2, 0x3);
- MenuPrint(panpotStr, 0x2, 0x5);
- MenuPrint(pitchStr, 0x2, 0x7);
- MenuPrint(lengthStr, 0x2, 0x9);
- MenuPrint(releaseStr, 0x2, 0xB);
- MenuPrint(progressStr, 0x2, 0xD);
- MenuPrint(chorusStr, 0x2, 0xF);
- MenuPrint(priorityStr, 0x2, 0x11);
- MenuPrint(playingStr, 0x13, 0x10);
- MenuPrint(reverseStr, 0x13, 0xE);
- MenuPrint(stereoStr, 0x13, 0xC);
- REG_WIN0H = WIN_RANGE(0, 240);
- REG_WIN0V = WIN_RANGE(0, 160);
- gUnknown_020387B3 = 0;
- gUnknown_020387B1 = 0;
- gUnknown_020387B2 = 0;
- gUnknown_03005D30 = NULL;
- gUnknown_020387D8 = 0;
- gUnknown_020387D9 = 1;
- gUnknown_020387B4[CRY_TEST_UNK0] = 0;
- gUnknown_020387B4[CRY_TEST_VOLUME] = 0x78;
- gUnknown_020387B4[CRY_TEST_PANPOT] = 0;
- gUnknown_020387B4[CRY_TEST_PITCH] = 0x3C00;
- gUnknown_020387B4[CRY_TEST_LENGTH] = 0xB4;
- gUnknown_020387B4[CRY_TEST_PROGRESS] = 0;
- gUnknown_020387B4[CRY_TEST_RELEASE] = 0;
- gUnknown_020387B4[CRY_TEST_CHORUS] = 0;
- gUnknown_020387B4[CRY_TEST_PRIORITY] = 2;
- sub_80BAD5C();
- sub_80BAE10(0, 0);
- TASK.FUNC = sub_80BAA48;
-}
-
-void sub_80BAA48(u8 taskId) // Task_ProcessDriverTestInput
-{
- if(gMain.newKeys & B_BUTTON)
- {
- REG_DISPCNT = 0x7140;
- REG_WIN0H = WIN_RANGE(17, 223);
- REG_WIN0V = WIN_RANGE(1, 31);
- MenuZeroFillWindowRect(0, 0, 0x1D, 0x13);
- TASK.FUNC = sub_80BA258;
- return;
- }
- if(gMain.newAndRepeatedKeys & DPAD_UP) // _080BAAA8
- {
- u8 backupVar = gUnknown_020387B3;
- if(--gUnknown_020387B3 < 0)
- gUnknown_020387B3 = 8;
-
- sub_80BAE10(backupVar, gUnknown_020387B3);
- return;
- }
- if(gMain.newAndRepeatedKeys & DPAD_DOWN) // _080BAAD0
- {
- u8 backupVar = gUnknown_020387B3;
- if(++gUnknown_020387B3 > 8)
- gUnknown_020387B3 = 0;
-
- sub_80BAE10(backupVar, gUnknown_020387B3);
- return;
- }
- if(gMain.newKeys & START_BUTTON) // _080BAAF8
- {
- gUnknown_020387D8 ^= 1;
- sub_80BAD5C();
- return;
- }
- if(gMain.newKeys & SELECT_BUTTON) // _080BAB14
- {
- gUnknown_020387D9 ^= 1;
- sub_80BAD5C();
- SetPokemonCryStereo(gUnknown_020387D9);
- return;
- }
- if(gMain.newAndRepeatedKeys & R_BUTTON) // _080BAB38
- {
- sub_80BACDC(10);
- sub_80BAD5C();
- return;
- }
- if(gMain.newAndRepeatedKeys & L_BUTTON) // _080BAB46
- {
- sub_80BACDC(-10);
- sub_80BAD5C();
- return;
- }
- if(gMain.newAndRepeatedKeys & DPAD_LEFT) // _080BAB56
- {
- sub_80BACDC(-1);
- sub_80BAD5C();
- return;
- }
- if(gMain.newAndRepeatedKeys & DPAD_RIGHT) // _080BAB64
- {
- sub_80BACDC(1);
- sub_80BAD5C();
- return;
- }
- if(gMain.newKeys & A_BUTTON) // _080BAB78
- {
- u8 divide, remaining;
-
- SetPokemonCryVolume(gUnknown_020387B4[CRY_TEST_VOLUME]);
- SetPokemonCryPanpot(gUnknown_020387B4[CRY_TEST_PANPOT]);
- SetPokemonCryPitch(gUnknown_020387B4[CRY_TEST_PITCH]);
- SetPokemonCryLength(gUnknown_020387B4[CRY_TEST_LENGTH]);
- SetPokemonCryProgress(gUnknown_020387B4[CRY_TEST_PROGRESS]);
- SetPokemonCryRelease(gUnknown_020387B4[CRY_TEST_RELEASE]);
- SetPokemonCryChorus(gUnknown_020387B4[CRY_TEST_CHORUS]);
- SetPokemonCryPriority(gUnknown_020387B4[CRY_TEST_PRIORITY]);
-
- remaining = gUnknown_020387B4[CRY_TEST_UNK0] % 128;
- divide = gUnknown_020387B4[CRY_TEST_UNK0] / 128;
-
- switch(divide)
- {
- case 0:
- if(gUnknown_020387D8)
- gUnknown_03005D30 = SetPokemonCryTone(&voicegroup_84537C0[remaining]);
- else
- gUnknown_03005D30 = SetPokemonCryTone(&voicegroup_8452590[remaining]);
- break;
- case 1:
- if(gUnknown_020387D8)
- gUnknown_03005D30 = SetPokemonCryTone(&voicegroup_8453DC0[remaining]);
- else
- gUnknown_03005D30 = SetPokemonCryTone(&voicegroup_8452B90[remaining]);
- break;
- case 2:
- if(gUnknown_020387D8)
- gUnknown_03005D30 = SetPokemonCryTone(&voicegroup_84543C0[remaining]);
- else
- gUnknown_03005D30 = SetPokemonCryTone(&voicegroup_8453190[remaining]);
- break;
- case 3:
- if(gUnknown_020387D8)
- gUnknown_03005D30 = SetPokemonCryTone(&voicegroup_84549C0[remaining]);
- else
- gUnknown_03005D30 = SetPokemonCryTone(&voicegroup_8453790[remaining]);
- break;
- }
- }
-
- // _080BACA2
- if(gUnknown_03005D30 != NULL)
- {
- gUnknown_020387B1 = IsPokemonCryPlaying(gUnknown_03005D30);
-
- if(gUnknown_020387B1 != gUnknown_020387B2)
- sub_80BAD5C();
-
- gUnknown_020387B2 = gUnknown_020387B1;
- }
-}
-
-void sub_80BACDC(s8 var)
-{
- int minMaxArray[ARRAY_COUNT(gUnknown_083D039C)];
-
- memcpy(minMaxArray, gUnknown_083D039C, sizeof(gUnknown_083D039C));
- gUnknown_020387B4[gUnknown_020387B3] += var;
-
- if(gUnknown_020387B4[gUnknown_020387B3] > minMaxArray[MULTI_DIM_ARR(gUnknown_020387B3, B_16, MAX)])
- gUnknown_020387B4[gUnknown_020387B3] = minMaxArray[MULTI_DIM_ARR(gUnknown_020387B3, B_16, MIN)];
-
- if(gUnknown_020387B4[gUnknown_020387B3] < minMaxArray[MULTI_DIM_ARR(gUnknown_020387B3, B_16, MIN)])
- gUnknown_020387B4[gUnknown_020387B3] = minMaxArray[MULTI_DIM_ARR(gUnknown_020387B3, B_16, MAX)];
-}
-
-void sub_80BAD5C(void)
-{
- sub_80BAE78(gUnknown_020387B4[CRY_TEST_UNK0] + 1, 0xB, 0x1, 0x5);
- sub_80BAE78(gUnknown_020387B4[CRY_TEST_VOLUME], 0xB, 0x3, 0x5);
- sub_80BAE78(gUnknown_020387B4[CRY_TEST_PANPOT], 0xB, 0x5, 0x5);
- sub_80BAE78(gUnknown_020387B4[CRY_TEST_PITCH], 0xB, 0x7, 0x5);
- sub_80BAE78(gUnknown_020387B4[CRY_TEST_LENGTH], 0xB, 0x9, 0x5);
- sub_80BAE78(gUnknown_020387B4[CRY_TEST_RELEASE], 0xB, 0xB, 0x5);
- sub_80BAE78(gUnknown_020387B4[CRY_TEST_PROGRESS], 0xB, 0xD, 0x5);
- sub_80BAE78(gUnknown_020387B4[CRY_TEST_CHORUS], 0xB, 0xF, 0x5);
- sub_80BAE78(gUnknown_020387B4[CRY_TEST_PRIORITY], 0xB, 0x11, 0x5);
- sub_80BAE78(gUnknown_020387B1, 0x1B, 0x10, 0x1);
- sub_80BAE78(gUnknown_020387D8, 0x1B, 0xE, 0x1);
- sub_80BAE78(gUnknown_020387D9, 0x1B, 0xC, 0x1);
-}
-
-void sub_80BAE10(u8 var1, u8 var2)
-{
- u8 str1[sizeof(gUnknown_083D03DC)];
- u8 str2[sizeof(gUnknown_083D03DE)];
-
- memcpy(str1, gUnknown_083D03DC, sizeof(gUnknown_083D03DC));
- memcpy(str2, gUnknown_083D03DE, sizeof(gUnknown_083D03DE));
-
- MenuPrint(str2, gUnknown_083D0300[MULTI_DIM_ARR(var1, B_16, 0)], gUnknown_083D0300[MULTI_DIM_ARR(var1, B_16, 1)]);
- MenuPrint(str1, gUnknown_083D0300[MULTI_DIM_ARR(var2, B_16, 0)], gUnknown_083D0300[MULTI_DIM_ARR(var2, B_16, 1)]);
-}
-
-/*void sub_80BAE78(int var1, u16 var2, u16 var3, u8 var4)
-{
- u32 powers[6];
- u8 str[8];
- u8 i;
- u8 someVar, someVar2;
-
- memcpy(powers, gUnknown_083D03E0, sizeof(powers);
-
- for(i = 0; i < var4; i++)
- str[i] = 0;
-
- str[var4 + 1] = CHAR_0;
- someVar = 0;
-
- if(var1 < 0) // make absolute value? wtf
- {
- var1 = -var1; // just use abs?
- someVar = 1;
- }
-
- // _080BAED6
- someVar2 = 0;
- if(var4 == 1)
- someVar2 = 1;
-
- // _080BAEE2
- for(;;)
- {
-
- }
-}*/
-
-// no.
-__attribute__((naked))
-void sub_80BAE78(int var1, u16 var2, u16 var3, u8 var4)
-{
- asm(".syntax unified\n\
- push {r4-r7,lr}\n\
- mov r7, r10\n\
- mov r6, r9\n\
- mov r5, r8\n\
- push {r5-r7}\n\
- sub sp, 0x2C\n\
- mov r8, r0\n\
- lsls r1, 16\n\
- lsrs r6, r1, 16\n\
- lsls r2, 16\n\
- lsrs r2, 16\n\
- lsls r3, 24\n\
- lsrs r7, r3, 24\n\
- mov r1, sp\n\
- ldr r0, _080BAF80 @ =gUnknown_083D03E0\n\
- ldm r0!, {r3-r5}\n\
- stm r1!, {r3-r5}\n\
- ldm r0!, {r3-r5}\n\
- stm r1!, {r3-r5}\n\
- movs r5, 0\n\
- add r0, sp, 0x18\n\
- mov r9, r0\n\
- cmp r5, r7\n\
- bgt _080BAEC0\n\
- mov r4, r9\n\
- movs r3, 0\n\
-_080BAEAC:\n\
- lsls r0, r5, 24\n\
- asrs r0, 24\n\
- adds r1, r4, r0\n\
- strb r3, [r1]\n\
- adds r0, 0x1\n\
- lsls r0, 24\n\
- lsrs r5, r0, 24\n\
- asrs r0, 24\n\
- cmp r0, r7\n\
- ble _080BAEAC\n\
-_080BAEC0:\n\
- adds r0, r7, 0x1\n\
- add r0, r9\n\
- movs r1, 0xFF\n\
- strb r1, [r0]\n\
- movs r1, 0\n\
- mov r3, r8\n\
- cmp r3, 0\n\
- bge _080BAED6\n\
- negs r3, r3\n\
- mov r8, r3\n\
- movs r1, 0x1\n\
-_080BAED6:\n\
- movs r4, 0\n\
- mov r10, r4\n\
- cmp r7, 0x1\n\
- bne _080BAEE2\n\
- movs r5, 0x1\n\
- mov r10, r5\n\
-_080BAEE2:\n\
- subs r0, r7, 0x1\n\
- lsls r0, 24\n\
- lsrs r5, r0, 24\n\
- lsls r0, r5, 24\n\
- lsls r6, 24\n\
- str r6, [sp, 0x24]\n\
- lsls r2, 24\n\
- str r2, [sp, 0x28]\n\
- cmp r0, 0\n\
- blt _080BAF62\n\
- str r1, [sp, 0x20]\n\
-_080BAEF8:\n\
- asrs r6, r0, 24\n\
- lsls r0, r6, 2\n\
- add r0, sp\n\
- ldr r1, [r0]\n\
- mov r0, r8\n\
- bl __divsi3\n\
- lsls r0, 24\n\
- lsrs r2, r0, 24\n\
- cmp r0, 0\n\
- bne _080BAF1A\n\
- mov r0, r10\n\
- cmp r0, 0\n\
- bne _080BAF1A\n\
- lsls r4, r5, 24\n\
- cmp r6, 0\n\
- bne _080BAF46\n\
-_080BAF1A:\n\
- lsls r4, r5, 24\n\
- ldr r3, [sp, 0x20]\n\
- cmp r3, 0\n\
- beq _080BAF34\n\
- mov r5, r10\n\
- cmp r5, 0\n\
- bne _080BAF34\n\
- asrs r0, r4, 24\n\
- subs r0, r7, r0\n\
- subs r0, 0x1\n\
- add r0, r9\n\
- movs r1, 0xAE\n\
- strb r1, [r0]\n\
-_080BAF34:\n\
- asrs r1, r4, 24\n\
- subs r1, r7, r1\n\
- add r1, r9\n\
- lsls r0, r2, 24\n\
- asrs r0, 24\n\
- subs r0, 0x5F\n\
- strb r0, [r1]\n\
- movs r0, 0x1\n\
- mov r10, r0\n\
-_080BAF46:\n\
- asrs r4, 24\n\
- lsls r0, r4, 2\n\
- add r0, sp\n\
- ldr r1, [r0]\n\
- mov r0, r8\n\
- bl __modsi3\n\
- mov r8, r0\n\
- subs r4, 0x1\n\
- lsls r4, 24\n\
- lsrs r5, r4, 24\n\
- lsls r0, r5, 24\n\
- cmp r0, 0\n\
- bge _080BAEF8\n\
-_080BAF62:\n\
- ldr r3, [sp, 0x24]\n\
- lsrs r1, r3, 24\n\
- ldr r4, [sp, 0x28]\n\
- lsrs r2, r4, 24\n\
- mov r0, r9\n\
- bl MenuPrint\n\
- add sp, 0x2C\n\
- pop {r3-r5}\n\
- mov r8, r3\n\
- mov r9, r4\n\
- mov r10, r5\n\
- pop {r4-r7}\n\
- pop {r0}\n\
- bx r0\n\
- .align 2, 0\n\
-_080BAF80: .4byte gUnknown_083D03E0\n\
- .syntax divided");
-}
-
-void sub_80BAF84(u8 taskId)
-{
- u8 seStr[sizeof(gOtherText_SE)];
- u8 panStr[sizeof(gOtherText_Pan)];
- u8 playingStr[sizeof(gDebugText_Playing)];
-
- memcpy(seStr, gOtherText_SE, sizeof(gOtherText_SE));
- memcpy(panStr, gOtherText_Pan, sizeof(gOtherText_Pan));
- memcpy(playingStr, gDebugText_Playing, sizeof(gDebugText_Playing));
-
- REG_DISPCNT = 0x3140;
- MenuDrawTextWindow(0, 0, 0x1D, 0x13);
- MenuPrint(seStr, 3, 2);
- MenuPrint(panStr, 3, 4);
- MenuPrint(playingStr, 3, 8);
- REG_WIN0H = WIN_RANGE(0, 240);
- REG_WIN0V = WIN_RANGE(0, 160);
- gUnknown_020387B4[CRY_TEST_UNK0] = 1;
- gUnknown_020387B4[CRY_TEST_PANPOT] = 0;
- gUnknown_020387B4[CRY_TEST_CHORUS] = 0;
- gUnknown_020387B4[CRY_TEST_PROGRESS] = 0;
- gUnknown_020387B4[CRY_TEST_RELEASE] = 0;
- sub_80BB1D4();
- TASK.FUNC = sub_80BB038;
-}
-
-void sub_80BB038(u8 taskId)
-{
- sub_80BB1D4();
- if(gUnknown_020387B4[CRY_TEST_PROGRESS])
- {
- if(gUnknown_020387B4[CRY_TEST_RELEASE])
- {
- gUnknown_020387B4[CRY_TEST_RELEASE]--;
- }
- else // _080BB05C
- {
- s8 panpot = gUnknown_083D03F8[gUnknown_020387B4[CRY_TEST_PANPOT]];
- if(panpot != -128)
- {
- if(panpot == 0x7F)
- {
- gUnknown_020387B4[CRY_TEST_CHORUS] += 2;
- if(gUnknown_020387B4[CRY_TEST_CHORUS] < 0x3F)
- SE12PanpotControl(gUnknown_020387B4[CRY_TEST_CHORUS]);
- }
- }
- else // _080BB08C
- {
- gUnknown_020387B4[CRY_TEST_CHORUS] -= 2;
- if(gUnknown_020387B4[CRY_TEST_CHORUS] > -0x40)
- SE12PanpotControl(gUnknown_020387B4[CRY_TEST_CHORUS]);
- }
- }
- }
- // _080BB0A2
- if(gMain.newKeys & B_BUTTON)
- {
- REG_DISPCNT = 0x7140;
- REG_WIN0H = WIN_RANGE(17, 223);
- REG_WIN0V = WIN_RANGE(1, 31);
- MenuZeroFillWindowRect(0, 0, 0x1D, 0x13);
- TASK.FUNC = sub_80BA258;
- return;
- }
- if(gMain.newKeys & A_BUTTON) // _080BB104
- {
- s8 panpot = gUnknown_083D03F8[gUnknown_020387B4[CRY_TEST_PANPOT]];
- if(panpot != -128)
- {
- if(panpot == 0x7F)
- {
- PlaySE12WithPanning(gUnknown_020387B4[CRY_TEST_UNK0], -0x40);
- gUnknown_020387B4[CRY_TEST_CHORUS] = -0x40;
- gUnknown_020387B4[CRY_TEST_PROGRESS] = 1;
- gUnknown_020387B4[CRY_TEST_RELEASE] = 0x1E;
- return;
- }
- }
- else // _080BB140
- {
- PlaySE12WithPanning(gUnknown_020387B4[CRY_TEST_UNK0], 0x3F);
- gUnknown_020387B4[CRY_TEST_CHORUS] = 0x3F;
- gUnknown_020387B4[CRY_TEST_PROGRESS] = 1;
- gUnknown_020387B4[CRY_TEST_RELEASE] = 0x1E;
- return;
- }
- // _080BB154
- PlaySE12WithPanning(gUnknown_020387B4[CRY_TEST_UNK0], panpot);
- gUnknown_020387B4[CRY_TEST_PROGRESS] = 0;
- return;
- }
- if(gMain.newKeys & L_BUTTON) // _080BB15E
- {
- gUnknown_020387B4[CRY_TEST_PANPOT]++;
- if(gUnknown_020387B4[CRY_TEST_PANPOT] > 4)
- gUnknown_020387B4[CRY_TEST_PANPOT] = 0;
- }
- if(gMain.newKeys & R_BUTTON) // _080BB176
- {
- gUnknown_020387B4[CRY_TEST_PANPOT]--;
- if(gUnknown_020387B4[CRY_TEST_PANPOT] < 0)
- gUnknown_020387B4[CRY_TEST_PANPOT] = 4;
- }
- if(gMain.newAndRepeatedKeys & DPAD_RIGHT) // _080BB192
- {
- gUnknown_020387B4[CRY_TEST_UNK0]++;
- if(gUnknown_020387B4[CRY_TEST_UNK0] > 0xF7)
- gUnknown_020387B4[CRY_TEST_UNK0] = 0;
- }
- else if(gMain.newAndRepeatedKeys & DPAD_LEFT) // _080BB1B0
- {
- gUnknown_020387B4[CRY_TEST_UNK0]--;
- if(gUnknown_020387B4[CRY_TEST_UNK0] < 0)
- gUnknown_020387B4[CRY_TEST_UNK0] = 0xF7;
- }
-}
-
-void sub_80BB1D4(void)
-{
- u8 lrStr[sizeof(gOtherText_LR)];
- u8 rlStr[sizeof(gOtherText_RL)];
-
- memcpy(lrStr, gOtherText_LR, sizeof(lrStr));
- memcpy(rlStr, gOtherText_RL, sizeof(rlStr));
-
- sub_80BAE78(gUnknown_020387B4[CRY_TEST_UNK0], 7, 2, 3);
-
- switch(gUnknown_083D03F8[gUnknown_020387B4[CRY_TEST_PANPOT]])
- {
- case 0x7F:
- MenuPrint(lrStr, 7, 4);
- break;
- case -0x80:
- MenuPrint(rlStr, 7, 4);
- break;
- default:
- sub_80BAE78(gUnknown_083D03F8[gUnknown_020387B4[CRY_TEST_PANPOT]], 7, 4, 3);
- break;
- }
- sub_80BAE78(IsSEPlaying(), 12, 8, 1);
-}
-
-void sub_80BB25C(u8 taskId)
-{
- struct CryRelatedStruct cryStruct, cryStruct2;
- u8 zero;
-
- SetUpWindowConfig(&gWindowConfig_81E6C3C);
- InitMenuWindow(&gWindowConfig_81E6CE4);
- gUnknown_03005D34 = 1;
- ResetSpriteData();
- FreeAllSpritePalettes();
-
- cryStruct.unk0 = 0x2000;
- cryStruct.unk2 = 29;
- cryStruct.paletteNo = 12;
- cryStruct.yPos = 30;
- cryStruct.xPos = 4;
-
- zero = 0; // wtf?
- gUnknown_03005E98 = 0;
-
- while(sub_8119E3C(&cryStruct, 3) == FALSE);
-
- cryStruct2.unk0 = 0;
- cryStruct2.unk2 = 15;
- cryStruct2.paletteNo = 13;
- cryStruct2.xPos = 12;
- cryStruct2.yPos = 12;
-
- zero = 0; // wtf?
- gUnknown_03005E98 = 0;
-
- while(ShowPokedexCryScreen(&cryStruct2, 2) == FALSE);
-
- MenuDrawTextWindow(0, 16, 5, 19);
- sub_80BB494();
- BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, 0);
- REG_BG2HOFS = 0;
- REG_BG2VOFS = 0;
- REG_BG2CNT = 0xF01;
- REG_BG3CNT = 0x1D03;
- REG_DISPCNT = 0x1d40;
- m4aMPlayFadeOutTemporarily(&gMPlay_BGM, 2);
- TASK.FUNC = sub_80BB3B4;
-}
-
-void sub_80BB3B4(u8 taskId)
-{
- sub_8119F88(3);
-
- if(gMain.newKeys & A_BUTTON)
- {
- sub_811A050(gUnknown_03005D34);
- }
- if(gMain.newKeys & R_BUTTON)
- {
- StopCryAndClearCrySongs();
- }
- if(gMain.newAndRepeatedKeys & DPAD_UP)
- {
- if(--gUnknown_03005D34 == 0)
- gUnknown_03005D34 = 384; // total species
- sub_80BB494();
- }
- if(gMain.newAndRepeatedKeys & DPAD_DOWN)
- {
- if(++gUnknown_03005D34 > 384)
- gUnknown_03005D34 = 1;
- sub_80BB494();
- }
- if(gMain.newKeys & B_BUTTON)
- {
- REG_DISPCNT = 0x7140;
- REG_WIN0H = WIN_RANGE(17, 223);
- REG_WIN0V = WIN_RANGE(1, 31);
- MenuZeroFillWindowRect(0, 0, 0x1D, 0x13);
- TASK.FUNC = sub_80BA258;
- DestroyCryMeterNeedleSprite();
- }
-}
-
-void sub_80BB494(void)
-{
- sub_80BAE78(gUnknown_03005D34, 1, 17, 3);
-}
diff --git a/src/trade.c b/src/trade.c
deleted file mode 100644
index cb190d194..000000000
--- a/src/trade.c
+++ /dev/null
@@ -1,88 +0,0 @@
-#include "global.h"
-#include "name_string_util.h"
-#include "string_util.h"
-#include "text.h"
-
-struct InGameTrade {
- /*0x00*/ u8 name[11];
- /*0x0C*/ u16 species;
- /*0x0E*/ u8 ivs[6];
- /*0x14*/ bool8 secondAbility;
- /*0x18*/ u32 otId;
- /*0x1C*/ u8 stats[5];
- /*0x24*/ u32 personality;
- /*0x28*/ u16 heldItem;
- /*0x2A*/ u8 mailNum;
- /*0x2B*/ u8 otName[11];
- /*0x36*/ u8 otGender;
- /*0x37*/ u8 sheen;
- /*0x38*/ u16 playerSpecies;
-};
-
-struct UnkStructC {
- /*0x00*/ u16 words[9];
- /*0x10*/ u8 string[8];
- /*0x1A*/ u8 otId[4];
- /*0x1E*/ u16 species;
- /*0x20*/ u16 heldItem;
-};
-
-struct UnkStructD {
- /*0x00*/ u8 pad00[0x10];
- /*0x10*/ u8 var10;
- /*0x11*/ u8 pad11[1];
- /*0x12*/ u16 var12[1];
-};
-
-extern const struct InGameTrade gIngameTrades[];
-extern const u16 gIngameTradeMail[][10];
-
-
-void sub_804A96C(struct UnkStructD *arg0, u8 left, u8 top, u16 *tilemap, u8 width, u8 height, u16 sp8) {
- int y, x;
-
- for (y = 0; y < height; y++)
- {
-
- for (x = 0; x < width; x++)
- {
- arg0->var12[(top * 32 + left) + y * 32 + x] = tilemap[width * y + x] | sp8;
- }
- }
-
-#if ENGLISH
- arg0->var10 = 1;
-#endif
-}
-
-#if GERMAN
-void sub_804A96C_alt(struct UnkStructD *arg0, u8 left, u8 top, u16 *tilemap, u8 width, u8 height, u16 sp8) {
- sub_804A96C(arg0, left, top, tilemap, width, height, sp8);
-
- arg0->var10 = 1;
-}
-#endif
-
-asm(".section .text.sub_804DAD4");
-
-void sub_804DAD4(struct UnkStructC *arg0, struct InGameTrade *trade) {
- s32 i;
-
- for (i = 0; i < 9; i++)
- {
- arg0->words[i] = gIngameTradeMail[trade->mailNum][i];
- }
-
- StringCopy(arg0->string, trade->otName);
-
-#if GERMAN
- PadNameString(arg0->string, CHAR_SPACE);
-#endif
-
- arg0->otId[0] = trade->otId >> 24;
- arg0->otId[1] = trade->otId >> 16;
- arg0->otId[2] = trade->otId >> 8;
- arg0->otId[3] = trade->otId;
- arg0->species = trade->species;
- arg0->heldItem = trade->heldItem;
-}
diff --git a/src/unused_8124F94.c b/src/unused_8124F94.c
index 93b569058..5f76fa92e 100644
--- a/src/unused_8124F94.c
+++ b/src/unused_8124F94.c
@@ -64,7 +64,7 @@ u8 unref_sub_8124FD8(struct UnknownStruct1 *a, const struct UnknownStruct2 *b)
}
else
{
- sub_800D238(b->src, a->dest + a->unk2 * 64);
+ LZDecompressWram(b->src, a->dest + a->unk2 * 64);
}
a->unk88[a->unk1].unk8 = a->unk2;
temp = r6 + a->unk2;
@@ -95,7 +95,7 @@ u8 unref_sub_81250A4(struct UnknownStruct1 *a, struct UnknownStruct3 *b)
{
u16 palette[16];
- sub_800D238(b->paletteSrc, palette);
+ LZDecompressWram(b->paletteSrc, palette);
LoadPalette(palette, a->paletteNum * 16, 32);
}
a->unk8[a->paletteNum].paletteCount = a->paletteNum;
@@ -111,7 +111,7 @@ u8 unref_sub_8125118(struct UnknownStruct1 *a, struct UnknownStruct3 *b)
u8 r7 = b->paletteCount;
u8 i;
- sub_800D238(b->paletteSrc, palettes);
+ LZDecompressWram(b->paletteSrc, palettes);
for (i = a->paletteNum; i < r7; i++)
{
if (a->paletteNum + i >= 16)