summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/AgbRfu_LinkManager.c6
-rw-r--r--src/agb_flash.c55
-rw-r--r--src/battle_ai_script_commands.c4
-rw-r--r--src/battle_ai_switch_items.c4
-rw-r--r--src/battle_anim.c8
-rw-r--r--src/battle_anim_bug.c38
-rw-r--r--src/battle_anim_dark.c2
-rw-r--r--src/battle_anim_effects_1.c23
-rwxr-xr-xsrc/battle_anim_effects_2.c20
-rwxr-xr-xsrc/battle_anim_effects_3.c38
-rw-r--r--src/battle_anim_electric.c2
-rw-r--r--src/battle_anim_fire.c2
-rw-r--r--src/battle_anim_flying.c474
-rw-r--r--src/battle_anim_ghost.c4
-rw-r--r--src/battle_anim_mons.c32
-rw-r--r--src/battle_anim_psychic.c4
-rw-r--r--src/battle_anim_rock.c10
-rw-r--r--src/battle_anim_smokescreen.c55
-rw-r--r--src/battle_anim_sound_tasks.c6
-rwxr-xr-xsrc/battle_anim_throw.c (renamed from src/battle_anim_special.c)1316
-rw-r--r--src/battle_anim_utility_funcs.c12
-rw-r--r--src/battle_anim_water.c765
-rw-r--r--src/battle_arena.c8
-rw-r--r--src/battle_bg.c2
-rw-r--r--src/battle_controller_link_opponent.c56
-rw-r--r--src/battle_controller_link_partner.c12
-rw-r--r--src/battle_controller_opponent.c64
-rw-r--r--src/battle_controller_player.c79
-rw-r--r--src/battle_controller_player_partner.c12
-rw-r--r--src/battle_controller_recorded_opponent.c51
-rw-r--r--src/battle_controller_recorded_player.c39
-rw-r--r--src/battle_controller_safari.c4
-rw-r--r--src/battle_controller_wally.c27
-rw-r--r--src/battle_controllers.c7
-rw-r--r--src/battle_dome.c97
-rw-r--r--src/battle_factory.c184
-rw-r--r--src/battle_factory_screen.c57
-rw-r--r--src/battle_gfx_sfx_util.c193
-rw-r--r--src/battle_interface.c6
-rw-r--r--src/battle_main.c150
-rw-r--r--src/battle_message.c187
-rw-r--r--src/battle_pyramid_bag.c58
-rw-r--r--src/battle_records.c4
-rw-r--r--src/battle_script_commands.c754
-rw-r--r--src/battle_setup.c133
-rw-r--r--src/battle_tent.c6
-rw-r--r--src/battle_tower.c32
-rw-r--r--src/battle_transition.c949
-rw-r--r--src/battle_transition_frontier.c650
-rw-r--r--src/battle_tv.c4
-rw-r--r--src/battle_util.c66
-rw-r--r--src/berry.c18
-rw-r--r--src/berry_blender.c3064
-rwxr-xr-xsrc/berry_crush.c401
-rw-r--r--src/berry_tag_screen.c26
-rw-r--r--src/bike.c11
-rw-r--r--src/braille_puzzles.c51
-rw-r--r--src/cable_car.c672
-rw-r--r--src/cable_club.c810
-rw-r--r--src/coins.c2
-rw-r--r--src/confetti_util.c216
-rw-r--r--src/contest.c3494
-rw-r--r--src/contest_ai.c843
-rw-r--r--src/contest_effect.c479
-rw-r--r--src/contest_link.c563
-rw-r--r--src/contest_link_80F57C4.c2477
-rw-r--r--src/contest_link_80FC4F4.c548
-rw-r--r--src/contest_link_81D9DE4.c331
-rw-r--r--src/contest_link_util.c344
-rw-r--r--src/contest_painting.c134
-rw-r--r--src/contest_util.c3018
-rw-r--r--src/credits.c5
-rw-r--r--src/crt0.s80
-rw-r--r--src/data/contest_moves.h96
-rw-r--r--src/data/contest_opponents.h327
-rwxr-xr-xsrc/data/field_effects/field_effect_object_template_pointers.h102
-rwxr-xr-xsrc/data/field_effects/field_effect_objects.h851
-rw-r--r--src/data/graphics/pokemon.h3
-rw-r--r--src/data/graphics/rayquaza_scene.h135
-rw-r--r--src/data/graphics/slot_machine.h34
-rw-r--r--src/data/items.h6
-rwxr-xr-xsrc/data/object_events/object_event_graphics.h38
-rw-r--r--src/data/pokemon_graphics/back_pic_coordinates.h880
-rw-r--r--src/data/pokemon_graphics/front_pic_coordinates.h880
-rw-r--r--src/data/region_map/region_map_entries.h426
-rw-r--r--src/data/text/nature_names.h2
-rw-r--r--src/data/union_room.h486
-rwxr-xr-xsrc/data/wild_encounters.json8
-rw-r--r--src/daycare.c20
-rw-r--r--src/decoration.c8
-rw-r--r--src/dewford_trend.c4
-rw-r--r--src/digit_obj_util.c2
-rw-r--r--src/diploma.c6
-rw-r--r--src/dodrio_berry_picking.c86
-rw-r--r--src/dynamic_placeholder_text_util.c2
-rw-r--r--src/easy_chat.c38
-rw-r--r--src/egg_hatch.c22
-rwxr-xr-xsrc/ereader_screen.c20
-rw-r--r--src/event_object_lock.c2
-rw-r--r--src/event_object_movement.c360
-rw-r--r--src/evolution_graphics.c10
-rw-r--r--src/evolution_scene.c20
-rwxr-xr-xsrc/faraway_island.c202
-rw-r--r--src/field_camera.c46
-rw-r--r--src/field_control_avatar.c10
-rw-r--r--src/field_door.c5
-rw-r--r--src/field_effect.c2572
-rwxr-xr-xsrc/field_effect_helpers.c319
-rwxr-xr-xsrc/field_message_box.c109
-rw-r--r--src/field_player_avatar.c233
-rw-r--r--src/field_region_map.c8
-rw-r--r--src/field_screen_effect.c88
-rw-r--r--src/field_special_scene.c45
-rw-r--r--src/field_specials.c289
-rw-r--r--src/field_tasks.c71
-rw-r--r--src/field_weather.c12
-rw-r--r--src/field_weather_effect.c10
-rw-r--r--src/fieldmap.c68
-rw-r--r--src/fldeff_cut.c189
-rw-r--r--src/fldeff_dig.c16
-rw-r--r--src/fldeff_escalator.c207
-rw-r--r--src/fldeff_flash.c6
-rw-r--r--src/fldeff_misc.c581
-rw-r--r--src/fldeff_rocksmash.c71
-rw-r--r--src/fldeff_softboiled.c8
-rw-r--r--src/fldeff_strength.c21
-rw-r--r--src/fldeff_sweetscent.c4
-rw-r--r--src/fldeff_teleport.c4
-rw-r--r--src/frontier_pass.c56
-rw-r--r--src/frontier_util.c9
-rw-r--r--src/graphics.c186
-rw-r--r--src/gym_leader_rematch.c1
-rw-r--r--src/hall_of_fame.c362
-rw-r--r--src/image_processing_effects.c44
-rw-r--r--src/international_string_util.c2
-rw-r--r--src/intro.c6
-rw-r--r--src/item.c3
-rwxr-xr-xsrc/item_menu.c951
-rw-r--r--src/item_menu_icons.c105
-rwxr-xr-xsrc/item_use.c26
-rw-r--r--src/libgcnmultiboot.s86
-rw-r--r--src/librfu_intr.c6
-rw-r--r--src/librfu_rfu.c4
-rw-r--r--src/link.c546
-rw-r--r--src/link_rfu_2.c2381
-rw-r--r--src/link_rfu_3.c832
-rw-r--r--src/list_menu.c14
-rw-r--r--src/m4a.c115
-rw-r--r--src/m4a_1.s456
-rw-r--r--src/mail.c8
-rw-r--r--src/main.c6
-rw-r--r--src/main_menu.c5
-rw-r--r--src/map_name_popup.c8
-rw-r--r--src/match_call.c12
-rw-r--r--src/math_util.c18
-rw-r--r--src/mauville_old_man.c3
-rw-r--r--src/menu.c143
-rw-r--r--src/menu_helpers.c6
-rw-r--r--src/menu_specialized.c667
-rwxr-xr-xsrc/mevent2.c6
-rw-r--r--src/mevent_801BAAC.c12
-rw-r--r--src/minigame_countdown.c18
-rw-r--r--src/mirage_tower.c57
-rw-r--r--src/move_relearner.c36
-rw-r--r--src/mystery_event_menu.c8
-rw-r--r--src/mystery_gift.c27
-rw-r--r--src/naming_screen.c1867
-rw-r--r--src/new_game.c2
-rw-r--r--src/option_menu.c10
-rw-r--r--src/overworld.c389
-rw-r--r--src/palette.c86
-rwxr-xr-xsrc/palette_util.c (renamed from src/roulette_util.c)218
-rwxr-xr-xsrc/party_menu.c152
-rw-r--r--src/play_time.c50
-rw-r--r--src/player_pc.c44
-rw-r--r--src/pokeball.c74
-rw-r--r--src/pokeblock.c92
-rw-r--r--src/pokeblock_feed.c49
-rw-r--r--src/pokedex.c107
-rw-r--r--src/pokedex_area_region_map.c10
-rwxr-xr-xsrc/pokedex_area_screen.c7
-rw-r--r--src/pokemon.c164
-rw-r--r--src/pokemon_animation.c87
-rwxr-xr-xsrc/pokemon_jump.c64
-rw-r--r--src/pokemon_storage_system.c1085
-rw-r--r--src/pokemon_summary_screen.c156
-rw-r--r--src/pokenav.c4
-rw-r--r--src/pokenav_conditions_1.c48
-rw-r--r--src/pokenav_conditions_2.c80
-rw-r--r--src/pokenav_conditions_3.c10
-rw-r--r--src/pokenav_main_menu.c17
-rwxr-xr-xsrc/pokenav_match_call_1.c3
-rwxr-xr-xsrc/pokenav_match_call_2.c14
-rw-r--r--src/pokenav_menu_handler_1.c6
-rw-r--r--src/pokenav_menu_handler_2.c20
-rwxr-xr-xsrc/pokenav_region_map.c4
-rw-r--r--src/pokenav_ribbons_1.c10
-rw-r--r--src/pokenav_ribbons_2.c14
-rw-r--r--src/post_battle_event_funcs.c3
-rw-r--r--src/rayquaza_scene.c2196
-rw-r--r--src/record_mixing.c37
-rw-r--r--src/region_map.c73
-rw-r--r--src/reset_rtc_screen.c16
-rw-r--r--src/rom_81520A8.c218
-rw-r--r--src/rotating_gate.c4
-rw-r--r--src/roulette.c4859
-rw-r--r--src/save.c56
-rw-r--r--src/save_failed_screen.c2
-rw-r--r--src/scrcmd.c31
-rw-r--r--src/script.c6
-rw-r--r--src/script_menu.c4
-rwxr-xr-xsrc/script_pokemon_util.c224
-rwxr-xr-xsrc/script_pokemon_util_80F87D8.c726
-rw-r--r--src/secret_base.c21
-rwxr-xr-xsrc/shop.c36
-rw-r--r--src/slot_machine.c5264
-rw-r--r--src/sound.c36
-rw-r--r--src/start_menu.c81
-rw-r--r--src/starter_choose.c303
-rw-r--r--src/strings.c92
-rw-r--r--src/task.c4
-rw-r--r--src/text_window.c6
-rw-r--r--src/title_screen.c7
-rw-r--r--src/trade.c110
-rw-r--r--src/trader.c4
-rwxr-xr-xsrc/trainer_card.c17
-rw-r--r--src/trainer_hill.c100
-rw-r--r--src/trainer_see.c10
-rw-r--r--src/tv.c1307
-rw-r--r--src/union_room.c3700
-rw-r--r--src/union_room_battle.c479
-rwxr-xr-xsrc/union_room_chat.c2610
-rw-r--r--src/union_room_player_avatar.c494
-rw-r--r--src/unk_text_util_2.c36
-rw-r--r--src/unk_transition.c639
-rw-r--r--src/use_pokeblock.c1411
-rw-r--r--src/wallclock.c510
-rw-r--r--src/wild_encounter.c27
-rw-r--r--src/wireless_communication_status_screen.c432
239 files changed, 36867 insertions, 35924 deletions
diff --git a/src/AgbRfu_LinkManager.c b/src/AgbRfu_LinkManager.c
index e4127ee09..42cc9aea3 100644
--- a/src/AgbRfu_LinkManager.c
+++ b/src/AgbRfu_LinkManager.c
@@ -352,7 +352,7 @@ static bool8 rfu_LMAN_linkWatcher(u16 REQ_commandID)
{
for (i = 0; i < RFU_CHILD_MAX; i++)
{
- if ((bm_linkLossSlot >> i) & 1)
+ if (bm_linkLossSlot & (1 << i))
{
lman.linkRecoveryTimer.active |= (1 << i);
lman.linkRecoveryTimer.count[i] = lman.linkRecoveryTimer.count_max;
@@ -396,7 +396,7 @@ static bool8 rfu_LMAN_linkWatcher(u16 REQ_commandID)
bm_disconnectSlot = 0;
for (i = 0; i < RFU_CHILD_MAX; i++)
{
- if ((lman.linkRecoveryTimer.active >> i) & 1 && lman.linkRecoveryTimer.count[i] && --lman.linkRecoveryTimer.count[i] == 0)
+ if ((lman.linkRecoveryTimer.active) & (1 << i) && lman.linkRecoveryTimer.count[i] && --lman.linkRecoveryTimer.count[i] == 0)
{
lman.linkRecoveryTimer.active &= ~(1 << i);
bm_disconnectSlot |= (1 << i);
@@ -918,7 +918,7 @@ static void rfu_LMAN_REQ_callback(u16 reqCommandId, u16 reqResult)
{
lman.reserveDisconnectSlot_flag = 0;
lman.acceptCount = 0;
- lman.acceptSlot_flag = 0;;
+ lman.acceptSlot_flag = 0;
lman.parent_child = MODE_NEUTRAL;
rfu_LMAN_managerChangeAgbClockMaster();
if (reqCommandId == ID_STOP_MODE_REQ)
diff --git a/src/agb_flash.c b/src/agb_flash.c
index a9cf13d5f..f63f84509 100644
--- a/src/agb_flash.c
+++ b/src/agb_flash.c
@@ -41,7 +41,7 @@ u16 ReadFlashId(void)
u8 (*readFlash1)(u8 *);
SetReadFlash1(readFlash1Buffer);
- readFlash1 = (u8 (*)(u8 *))((s32)readFlash1Buffer + 1);
+ readFlash1 = (u8 (*)(u8 *))((uintptr_t)readFlash1Buffer + 1);
// Enter ID mode.
FLASH_WRITE(0x5555, 0xAA);
@@ -113,12 +113,12 @@ void SetReadFlash1(u16 *dest)
u16 *src;
u16 i;
- PollFlashStatus = (u8 (*)(u8 *))((s32)dest + 1);
+ PollFlashStatus = (u8 (*)(u8 *))((uintptr_t)dest + 1);
src = (u16 *)ReadFlash1;
- src = (u16 *)((s32)src ^ 1);
+ src = (u16 *)((uintptr_t)src ^ 1);
- i = ((s32)SetReadFlash1 - (s32)ReadFlash1) >> 1;
+ i = ((uintptr_t)SetReadFlash1 - (uintptr_t)ReadFlash1) >> 1;
while (i != 0)
{
@@ -127,7 +127,8 @@ void SetReadFlash1(u16 *dest)
}
}
-void ReadFlash_Core(u8 *src, u8 *dest, u32 size)
+// Using volatile here to make sure the flash memory will ONLY be read as bytes, to prevent any compiler optimizations.
+void ReadFlash_Core(vu8 *src, u8 *dest, u32 size)
{
while (size-- != 0)
{
@@ -139,10 +140,10 @@ void ReadFlash(u16 sectorNum, u32 offset, u8 *dest, u32 size)
{
u8 *src;
u16 i;
- u16 readFlash_Core_Buffer[0x40];
- u16 *funcSrc;
- u16 *funcDest;
- void (*readFlash_Core)(u8 *, u8 *, u32);
+ vu16 readFlash_Core_Buffer[0x40];
+ vu16 *funcSrc;
+ vu16 *funcDest;
+ void (*readFlash_Core)(vu8 *, u8 *, u32);
REG_WAITCNT = (REG_WAITCNT & ~WAITCNT_SRAM_MASK) | WAITCNT_SRAM_8;
@@ -152,11 +153,11 @@ void ReadFlash(u16 sectorNum, u32 offset, u8 *dest, u32 size)
sectorNum %= SECTORS_PER_BANK;
}
- funcSrc = (u16 *)ReadFlash_Core;
- funcSrc = (u16 *)((s32)funcSrc ^ 1);
+ funcSrc = (vu16 *)ReadFlash_Core;
+ funcSrc = (vu16 *)((uintptr_t)funcSrc ^ 1);
funcDest = readFlash_Core_Buffer;
- i = ((s32)ReadFlash - (s32)ReadFlash_Core) >> 1;
+ i = ((uintptr_t)ReadFlash - (uintptr_t)ReadFlash_Core) >> 1;
while (i != 0)
{
@@ -164,7 +165,7 @@ void ReadFlash(u16 sectorNum, u32 offset, u8 *dest, u32 size)
i--;
}
- readFlash_Core = (void (*)(u8 *, u8 *, u32))((s32)readFlash_Core_Buffer + 1);
+ readFlash_Core = (void (*)(vu8 *, u8 *, u32))((uintptr_t)readFlash_Core_Buffer + 1);
src = FLASH_BASE + (sectorNum << gFlash->sector.shift) + offset;
@@ -185,9 +186,9 @@ u32 VerifyFlashSector_Core(u8 *src, u8 *tgt, u32 size)
u32 VerifyFlashSector(u16 sectorNum, u8 *src)
{
u16 i;
- u16 verifyFlashSector_Core_Buffer[0x80];
- u16 *funcSrc;
- u16 *funcDest;
+ vu16 verifyFlashSector_Core_Buffer[0x80];
+ vu16 *funcSrc;
+ vu16 *funcDest;
u8 *tgt;
u16 size;
u32 (*verifyFlashSector_Core)(u8 *, u8 *, u32);
@@ -200,11 +201,11 @@ u32 VerifyFlashSector(u16 sectorNum, u8 *src)
sectorNum %= SECTORS_PER_BANK;
}
- funcSrc = (u16 *)VerifyFlashSector_Core;
- funcSrc = (u16 *)((s32)funcSrc ^ 1);
+ funcSrc = (vu16 *)VerifyFlashSector_Core;
+ funcSrc = (vu16 *)((uintptr_t)funcSrc ^ 1);
funcDest = verifyFlashSector_Core_Buffer;
- i = ((s32)VerifyFlashSector - (s32)VerifyFlashSector_Core) >> 1;
+ i = (u16)(((uintptr_t)VerifyFlashSector - (uintptr_t)VerifyFlashSector_Core) >> 1);
while (i != 0)
{
@@ -212,7 +213,7 @@ u32 VerifyFlashSector(u16 sectorNum, u8 *src)
i--;
}
- verifyFlashSector_Core = (u32 (*)(u8 *, u8 *, u32))((s32)verifyFlashSector_Core_Buffer + 1);
+ verifyFlashSector_Core = (u32 (*)(u8 *, u8 *, u32))((uintptr_t)verifyFlashSector_Core_Buffer + 1);
tgt = FLASH_BASE + (sectorNum << gFlash->sector.shift);
size = gFlash->sector.size;
@@ -223,9 +224,9 @@ u32 VerifyFlashSector(u16 sectorNum, u8 *src)
u32 VerifyFlashSectorNBytes(u16 sectorNum, u8 *src, u32 n)
{
u16 i;
- u16 verifyFlashSector_Core_Buffer[0x80];
- u16 *funcSrc;
- u16 *funcDest;
+ vu16 verifyFlashSector_Core_Buffer[0x80];
+ vu16 *funcSrc;
+ vu16 *funcDest;
u8 *tgt;
u32 (*verifyFlashSector_Core)(u8 *, u8 *, u32);
@@ -237,11 +238,11 @@ u32 VerifyFlashSectorNBytes(u16 sectorNum, u8 *src, u32 n)
REG_WAITCNT = (REG_WAITCNT & ~WAITCNT_SRAM_MASK) | WAITCNT_SRAM_8;
- funcSrc = (u16 *)VerifyFlashSector_Core;
- funcSrc = (u16 *)((s32)funcSrc ^ 1);
+ funcSrc = (vu16 *)VerifyFlashSector_Core;
+ funcSrc = (vu16 *)((uintptr_t)funcSrc ^ 1);
funcDest = verifyFlashSector_Core_Buffer;
- i = ((s32)VerifyFlashSector - (s32)VerifyFlashSector_Core) >> 1;
+ i = ((uintptr_t)VerifyFlashSector - (uintptr_t)VerifyFlashSector_Core) >> 1;
while (i != 0)
{
@@ -249,7 +250,7 @@ u32 VerifyFlashSectorNBytes(u16 sectorNum, u8 *src, u32 n)
i--;
}
- verifyFlashSector_Core = (u32 (*)(u8 *, u8 *, u32))((s32)verifyFlashSector_Core_Buffer + 1);
+ verifyFlashSector_Core = (u32 (*)(u8 *, u8 *, u32))((uintptr_t)verifyFlashSector_Core_Buffer + 1);
tgt = FLASH_BASE + (sectorNum << gFlash->sector.shift);
diff --git a/src/battle_ai_script_commands.c b/src/battle_ai_script_commands.c
index c9a6a6606..748e4729a 100644
--- a/src/battle_ai_script_commands.c
+++ b/src/battle_ai_script_commands.c
@@ -471,9 +471,9 @@ static u8 ChooseMoveOrAction_Doubles(void)
else
{
if (gBattleTypeFlags & BATTLE_TYPE_PALACE)
- BattleAI_SetupAIData(gBattleStruct->field_92 >> 4);
+ BattleAI_SetupAIData(gBattleStruct->palaceFlags >> 4);
else
- BattleAI_SetupAIData(0xF);
+ BattleAI_SetupAIData((1 << MAX_MON_MOVES) - 1);
gBattlerTarget = i;
diff --git a/src/battle_ai_switch_items.c b/src/battle_ai_switch_items.c
index 32f9620b7..2a5a83e0d 100644
--- a/src/battle_ai_switch_items.c
+++ b/src/battle_ai_switch_items.c
@@ -314,8 +314,8 @@ static bool8 AreStatsRaised(void)
for (i = 0; i < NUM_BATTLE_STATS; i++)
{
- if (gBattleMons[gActiveBattler].statStages[i] > 6)
- buffedStatsValue += gBattleMons[gActiveBattler].statStages[i] - 6;
+ if (gBattleMons[gActiveBattler].statStages[i] > DEFAULT_STAT_STAGE)
+ buffedStatsValue += gBattleMons[gActiveBattler].statStages[i] - DEFAULT_STAT_STAGE;
}
return (buffedStatsValue > 3);
diff --git a/src/battle_anim.c b/src/battle_anim.c
index 32a917cb4..874ac935b 100644
--- a/src/battle_anim.c
+++ b/src/battle_anim.c
@@ -1849,8 +1849,8 @@ void LaunchBattleAnimation(const u8 *const animsTable[], u16 tableId, bool8 isMo
}
else
{
- for (i = 0; i < 4; i++)
- gAnimBattlerSpecies[i] = gContestResources->field_18->species;
+ for (i = 0; i < CONTESTANT_COUNT; i++)
+ gAnimBattlerSpecies[i] = gContestResources->moveAnim->species;
}
if (!isMoveAnim)
@@ -2311,7 +2311,7 @@ void MoveBattlerSpriteToBG(u8 battlerId, bool8 toBG_2, bool8 setSpriteInvisible)
battlerSpriteId = gBattlerSpriteIds[battlerId];
gBattle_BG1_X = -(gSprites[battlerSpriteId].pos1.x + gSprites[battlerSpriteId].pos2.x) + 0x20;
- if (IsContest() && IsSpeciesNotUnown(gContestResources->field_18->species))
+ if (IsContest() && IsSpeciesNotUnown(gContestResources->moveAnim->species))
gBattle_BG1_X--;
gBattle_BG1_Y = -(gSprites[battlerSpriteId].pos1.y + gSprites[battlerSpriteId].pos2.y) + 0x20;
@@ -2369,7 +2369,7 @@ static void sub_80A46A0(void)
struct BattleAnimBgData animBg;
u16 *ptr;
- if (IsSpeciesNotUnown(gContestResources->field_18->species))
+ if (IsSpeciesNotUnown(gContestResources->moveAnim->species))
{
sub_80A6B30(&animBg);
ptr = animBg.bgTilemap;
diff --git a/src/battle_anim_bug.c b/src/battle_anim_bug.c
index ea3df8098..5e8a8b2a7 100644
--- a/src/battle_anim_bug.c
+++ b/src/battle_anim_bug.c
@@ -372,14 +372,11 @@ static void AnimTranslateStinger(struct Sprite *sprite)
{
gBattleAnimArgs[2] = -gBattleAnimArgs[2];
}
- else
+ else if (GetBattlerSide(gBattleAnimAttacker))
{
- if (GetBattlerSide(gBattleAnimAttacker))
- {
- gBattleAnimArgs[2] = -gBattleAnimArgs[2];
- gBattleAnimArgs[1] = -gBattleAnimArgs[1];
- gBattleAnimArgs[3] = -gBattleAnimArgs[3];
- }
+ gBattleAnimArgs[2] = -gBattleAnimArgs[2];
+ gBattleAnimArgs[1] = -gBattleAnimArgs[1];
+ gBattleAnimArgs[3] = -gBattleAnimArgs[3];
}
if (!IsContest() && GetBattlerSide(gBattleAnimAttacker) == GetBattlerSide(gBattleAnimTarget))
@@ -387,13 +384,8 @@ static void AnimTranslateStinger(struct Sprite *sprite)
if (GetBattlerPosition(gBattleAnimTarget) == B_POSITION_PLAYER_LEFT
|| GetBattlerPosition(gBattleAnimTarget) == B_POSITION_OPPONENT_LEFT)
{
- s16 temp1, temp2;
-
- temp1 = gBattleAnimArgs[2];
- gBattleAnimArgs[2] = -temp1;
-
- temp2 = gBattleAnimArgs[0];
- gBattleAnimArgs[0] = -temp2;
+ gBattleAnimArgs[2] *= -1;
+ gBattleAnimArgs[0] *= -1;
}
}
@@ -448,28 +440,24 @@ static void AnimMissileArc_Step(struct Sprite *sprite)
else
{
s16 tempData[8];
- u16 *data = sprite->data;
- u16 x1 = sprite->pos1.x;
- s16 x2 = sprite->pos2.x;
- u16 y1 = sprite->pos1.y;
- s16 y2 = sprite->pos2.y;
+ s16 xpos, ypos;
int i;
for (i = 0; i < 8; i++)
- tempData[i] = data[i];
+ tempData[i] = sprite->data[i];
- x2 += x1;
- y2 += y1;
+ xpos = sprite->pos1.x + sprite->pos2.x;
+ ypos = sprite->pos1.y + sprite->pos2.y;
if (!TranslateAnimHorizontalArc(sprite))
{
- u16 rotation = ArcTan2Neg(sprite->pos1.x + sprite->pos2.x - x2,
- sprite->pos1.y + sprite->pos2.y - y2);
+ u16 rotation = ArcTan2Neg(sprite->pos1.x + sprite->pos2.x - xpos, //Isn't this zero lol
+ sprite->pos1.y + sprite->pos2.y - ypos);
rotation += 0xC000;
TrySetSpriteRotScale(sprite, FALSE, 0x100, 0x100, rotation);
for (i = 0; i < 8; i++)
- data[i] = tempData[i];
+ sprite->data[i] = tempData[i];
}
}
}
diff --git a/src/battle_anim_dark.c b/src/battle_anim_dark.c
index dc3e8c83c..faa5884a5 100644
--- a/src/battle_anim_dark.c
+++ b/src/battle_anim_dark.c
@@ -849,7 +849,7 @@ void AnimTask_MetallicShine(u8 taskId)
if (IsContest())
{
- species = gContestResources->field_18->species;
+ species = gContestResources->moveAnim->species;
}
else
{
diff --git a/src/battle_anim_effects_1.c b/src/battle_anim_effects_1.c
index 516c58e55..c8d43e12e 100644
--- a/src/battle_anim_effects_1.c
+++ b/src/battle_anim_effects_1.c
@@ -3178,14 +3178,14 @@ static void AnimItemSteal_Step3(struct Sprite* sprite)
sprite->pos2.y = Sin(sprite->data[0] + 0x80, 30 - sprite->data[1] * 8);
if (sprite->pos2.y == 0)
- PlaySE12WithPanning(SE_W145B, BattleAnimAdjustPanning(63));
+ PlaySE12WithPanning(SE_M_BUBBLE2, BattleAnimAdjustPanning(63));
if (moveAlongLinearPath(sprite))
{
sprite->pos2.y = 0;
sprite->data[0] = 0;
sprite->callback = AnimItemSteal_Step2;
- PlaySE12WithPanning(SE_W145B, BattleAnimAdjustPanning(-64));
+ PlaySE12WithPanning(SE_M_BUBBLE2, BattleAnimAdjustPanning(-64));
}
}
@@ -3967,24 +3967,25 @@ static void AnimProtect(struct Sprite* sprite)
static void AnimProtect_Step(struct Sprite *sprite)
{
- int a;
- int i;
+ int i, savedPal;
sprite->data[5] += 96;
sprite->pos2.x = -(sprite->data[5] >> 8);
if (++sprite->data[1] > 1)
{
+ int id;
sprite->data[1] = 0;
- a = gPlttBufferFaded[sprite->data[2] + 1];
+ savedPal = gPlttBufferFaded[sprite->data[2] + 1];
i = 0;
do
{
- gPlttBufferFaded[sprite->data[2] + ++i] = gPlttBufferFaded[sprite->data[2] + i + 1];
+ id = sprite->data[2] + ++i;
+ gPlttBufferFaded[id] = gPlttBufferFaded[id + 1];
} while (i < 6);
- gPlttBufferFaded[sprite->data[2] + 7] = a;
+ gPlttBufferFaded[sprite->data[2] + 7] = savedPal;
}
- if (sprite->data[7] > 6 && sprite->data[0] >0 && ++sprite->data[6] > 1)
+ if (sprite->data[7] > 6 && sprite->data[0] > 0 && ++sprite->data[6] > 1)
{
sprite->data[6] = 0;
sprite->data[7] -= 1;
@@ -4259,7 +4260,7 @@ static void AnimLockOnTarget_Step1(struct Sprite* sprite)
sprite->callback = StartAnimLinearTranslation;
StoreSpriteCallbackInData6(sprite, AnimLockOnTarget_Step2);
sprite->data[5] += 0x100;
- PlaySE12WithPanning(SE_W199, BattleAnimAdjustPanning(63));
+ PlaySE12WithPanning(SE_M_LOCK_ON, BattleAnimAdjustPanning(63));
break;
}
@@ -4345,7 +4346,7 @@ static void AnimLockOnTarget_Step4(struct Sprite* sprite)
sprite->data[2]++;
pal = sprite->oam.paletteNum;
LoadPalette(&gPlttBufferUnfaded[0x108 + pal * 16], pal * 16 | 0x101, 4);
- PlaySE12WithPanning(SE_W043, BattleAnimAdjustPanning(63));
+ PlaySE12WithPanning(SE_M_LEER, BattleAnimAdjustPanning(63));
}
else if (sprite->data[1] == 0)
{
@@ -4820,7 +4821,7 @@ static void AnimSharpenSphere_Step(struct Sprite* sprite)
{
sprite->data[4]++;
if (!(sprite->data[4] & 1))
- PlaySE12WithPanning(SE_W207B, sprite->data[5]);
+ PlaySE12WithPanning(SE_M_SWAGGER2, sprite->data[5]);
}
sprite->data[0] = 0;
diff --git a/src/battle_anim_effects_2.c b/src/battle_anim_effects_2.c
index 133742446..d891a4d01 100755
--- a/src/battle_anim_effects_2.c
+++ b/src/battle_anim_effects_2.c
@@ -1578,7 +1578,7 @@ static void AnimAirWaveProjectile(struct Sprite *sprite)
{
sprite->data[0] = 8;
task->data[5] = 4;
- a = sub_8151624(0x1000);
+ a = MathUtil_Inv16(Q_8_8(16));
sprite->pos1.x += sprite->pos2.x;
sprite->pos1.y += sprite->pos2.y;
sprite->pos2.y = 0;
@@ -1597,8 +1597,8 @@ static void AnimAirWaveProjectile(struct Sprite *sprite)
sprite->data[1] = 0;
sprite->data[6] = 0;
sprite->data[5] = 0;
- sprite->data[3] = sub_8151534(sub_8151534(b, a), sub_8151624(0x1C0));
- sprite->data[4] = sub_8151534(sub_8151534(c, a), sub_8151624(0x1C0));
+ sprite->data[3] = MathUtil_Mul16(MathUtil_Mul16(b, a), MathUtil_Inv16(Q_8_8(1.75)));
+ sprite->data[4] = MathUtil_Mul16(MathUtil_Mul16(c, a), MathUtil_Inv16(Q_8_8(1.75)));
sprite->callback = AnimAirWaveProjectile_Step1;
}
}
@@ -1632,7 +1632,7 @@ static void AirCutterProjectileStep1(u8 taskId)
gTasks[taskId].data[gTasks[taskId].data[1] + 13] = spriteId;
gTasks[taskId].data[0] = gTasks[taskId].data[3];
gTasks[taskId].data[1]++;
- PlaySE12WithPanning(SE_W059B, BattleAnimAdjustPanning(-63));
+ PlaySE12WithPanning(SE_M_BLIZZARD2, BattleAnimAdjustPanning(-63));
if (gTasks[taskId].data[1] > 2)
gTasks[taskId].func = AirCutterProjectileStep2;
}
@@ -1689,18 +1689,18 @@ void AnimTask_AirCutterProjectile(u8 taskId)
else
xDiff = attackerX - targetX;
- gTasks[taskId].data[5] = sub_8151534(xDiff, sub_8151624(gBattleAnimArgs[2] & ~1));
- gTasks[taskId].data[6] = sub_8151534(gTasks[taskId].data[5], 0x80);
+ gTasks[taskId].data[5] = MathUtil_Mul16(xDiff, MathUtil_Inv16(gBattleAnimArgs[2] & ~1));
+ gTasks[taskId].data[6] = MathUtil_Mul16(gTasks[taskId].data[5], Q_8_8(0.5));
gTasks[taskId].data[7] = gBattleAnimArgs[2];
if (targetY >= attackerY)
{
yDiff = targetY - attackerY;
- gTasks[taskId].data[8] = sub_8151534(yDiff, sub_8151624(gTasks[taskId].data[5])) & ~1;
+ gTasks[taskId].data[8] = MathUtil_Mul16(yDiff, MathUtil_Inv16(gTasks[taskId].data[5])) & ~1;
}
else
{
yDiff = attackerY - targetY;
- gTasks[taskId].data[8] = sub_8151534(yDiff, sub_8151624(gTasks[taskId].data[5])) | 1;
+ gTasks[taskId].data[8] = MathUtil_Mul16(yDiff, MathUtil_Inv16(gTasks[taskId].data[5])) | 1;
}
gTasks[taskId].data[3] = gBattleAnimArgs[3];
@@ -1829,7 +1829,7 @@ static void AnimBulletSeed_Step1(struct Sprite *sprite)
int i;
u16 rand;
s16* ptr;
- PlaySE12WithPanning(SE_W030, BattleAnimAdjustPanning(63));
+ PlaySE12WithPanning(SE_M_HORN_ATTACK, BattleAnimAdjustPanning(63));
sprite->pos1.x += sprite->pos2.x;
sprite->pos1.y += sprite->pos2.y;
sprite->pos2.y = 0;
@@ -2502,7 +2502,7 @@ static void AnimPencil_Step(struct Sprite *sprite)
sprite->pos1.y -= 1;
sprite->data[2]++;
if (sprite->data[2] % 10 == 0)
- PlaySE12WithPanning(SE_W166, sprite->data[6]);
+ PlaySE12WithPanning(SE_M_SKETCH, sprite->data[6]);
}
sprite->data[4] += sprite->data[3];
if (sprite->data[4] > 31)
diff --git a/src/battle_anim_effects_3.c b/src/battle_anim_effects_3.c
index fd68bbd37..bad46f144 100755
--- a/src/battle_anim_effects_3.c
+++ b/src/battle_anim_effects_3.c
@@ -1647,7 +1647,7 @@ static void AnimClappingHand_Step(struct Sprite *sprite)
sprite->data[2]++;
if (sprite->data[3] == 0)
{
- PlaySE1WithPanning(SE_W227, BattleAnimAdjustPanning(-64));
+ PlaySE1WithPanning(SE_M_ENCORE, BattleAnimAdjustPanning(-64));
}
}
}
@@ -1931,7 +1931,7 @@ static void TormentAttacker_Step(u8 taskId)
y = task->data[3] + task->data[5];
spriteId = CreateSprite(&gThoughtBubbleSpriteTemplate, x, y, 6 - task->data[1]);
- PlaySE12WithPanning(SE_W118, BattleAnimAdjustPanning(-64));
+ PlaySE12WithPanning(SE_M_METRONOME, BattleAnimAdjustPanning(-64));
if (spriteId != MAX_SPRITES)
{
@@ -2297,7 +2297,7 @@ void AnimTask_TransformMon(u8 taskId)
LoadBgTiles(1, animBg.bgTiles, 0x800, animBg.tilesOffset);
if (IsContest())
{
- if (IsSpeciesNotUnown(gContestResources->field_18->species) != IsSpeciesNotUnown(gContestResources->field_18->unk2))
+ if (IsSpeciesNotUnown(gContestResources->moveAnim->species) != IsSpeciesNotUnown(gContestResources->moveAnim->targetSpecies))
{
bgTilemap = (u16 *)animBg.bgTilemap;
for (i = 0; i < 8; i++)
@@ -2319,7 +2319,7 @@ void AnimTask_TransformMon(u8 taskId)
}
}
- if (IsSpeciesNotUnown(gContestResources->field_18->unk2))
+ if (IsSpeciesNotUnown(gContestResources->moveAnim->targetSpecies))
gSprites[gBattlerSpriteIds[gBattleAnimAttacker]].affineAnims = gUnknown_082FF6C0;
else
gSprites[gBattlerSpriteIds[gBattleAnimAttacker]].affineAnims = gUnknown_082FF694;
@@ -2412,7 +2412,7 @@ void AnimTask_MorningSunLightBeam(u8 taskId)
gTasks[taskId].data[11] = gBattle_BG1_Y;
gTasks[taskId].data[0]++;
- PlaySE12WithPanning(SE_W234, BattleAnimAdjustPanning(-64));
+ PlaySE12WithPanning(SE_M_MORNING_SUN, BattleAnimAdjustPanning(-64));
break;
case 1:
if (gTasks[taskId].data[4]++ > 0)
@@ -2447,7 +2447,7 @@ void AnimTask_MorningSunLightBeam(u8 taskId)
{
gTasks[taskId].data[3] = 0;
gTasks[taskId].data[0] = 1;
- PlaySE12WithPanning(SE_W234, BattleAnimAdjustPanning(-64));
+ PlaySE12WithPanning(SE_M_MORNING_SUN, BattleAnimAdjustPanning(-64));
}
break;
case 4:
@@ -3196,10 +3196,10 @@ void AnimTask_RolePlaySilhouette(u8 taskId)
GetAnimBattlerSpriteId(ANIM_ATTACKER);
if (IsContest())
{
- isBackPic = 1;
- personality = gContestResources->field_18->unk10;
- otId = gContestResources->field_18->unkC;
- species = gContestResources->field_18->unk2;
+ isBackPic = TRUE;
+ personality = gContestResources->moveAnim->targetPersonality;
+ otId = gContestResources->moveAnim->otId;
+ species = gContestResources->moveAnim->targetSpecies;
xOffset = 20;
priority = GetBattlerSpriteBGPriority(gBattleAnimAttacker);
}
@@ -4769,7 +4769,7 @@ static void AnimTask_MonToSubstituteDoll(u8 taskId)
if (gSprites[spriteId].pos2.y == 0)
{
- PlaySE12WithPanning(SE_W145B, BattleAnimAdjustPanning(-64));
+ PlaySE12WithPanning(SE_M_BUBBLE2, BattleAnimAdjustPanning(-64));
gTasks[taskId].data[10] -= 0x800;
gTasks[taskId].data[0]++;
}
@@ -4791,7 +4791,7 @@ static void AnimTask_MonToSubstituteDoll(u8 taskId)
if (gSprites[spriteId].pos2.y == 0)
{
- PlaySE12WithPanning(SE_W145B, BattleAnimAdjustPanning(-64));
+ PlaySE12WithPanning(SE_M_BUBBLE2, BattleAnimAdjustPanning(-64));
DestroyAnimVisualTask(taskId);
}
break;
@@ -4828,7 +4828,7 @@ static void AnimBlockX_Step(struct Sprite *sprite)
sprite->pos2.y += 10;
if (sprite->pos2.y >= 0)
{
- PlaySE12WithPanning(SE_W166, BattleAnimAdjustPanning(63));
+ PlaySE12WithPanning(SE_M_SKETCH, BattleAnimAdjustPanning(63));
sprite->pos2.y = 0;
sprite->data[0]++;
}
@@ -4838,7 +4838,7 @@ static void AnimBlockX_Step(struct Sprite *sprite)
sprite->pos2.y = -(gSineTable[sprite->data[1]] >> 3);
if (sprite->data[1] > 0x7F)
{
- PlaySE12WithPanning(SE_W166, BattleAnimAdjustPanning(63));
+ PlaySE12WithPanning(SE_M_SKETCH, BattleAnimAdjustPanning(63));
sprite->data[1] = 0;
sprite->pos2.y = 0;
sprite->data[0]++;
@@ -4857,7 +4857,7 @@ static void AnimBlockX_Step(struct Sprite *sprite)
case 3:
if (++sprite->data[1] > 8)
{
- PlaySE12WithPanning(SE_W043, BattleAnimAdjustPanning(63));
+ PlaySE12WithPanning(SE_M_LEER, BattleAnimAdjustPanning(63));
sprite->data[1] = 0;
sprite->data[0]++;
}
@@ -5031,9 +5031,9 @@ void AnimTask_SnatchOpposingMonMove(u8 taskId)
case 1:
if (IsContest())
{
- personality = gContestResources->field_18->unk8;
- otId = gContestResources->field_18->unkC;
- species = gContestResources->field_18->species;
+ personality = gContestResources->moveAnim->personality;
+ otId = gContestResources->moveAnim->otId;
+ species = gContestResources->moveAnim->species;
subpriority = GetBattlerSpriteSubpriority(gBattleAnimAttacker);
isBackPic = 0;
x = -32;
@@ -5152,7 +5152,7 @@ static void sub_815FE80(struct Sprite *sprite)
case 0:
if (gBattleAnimArgs[7] == -1)
{
- PlaySE12WithPanning(SE_W233, BattleAnimAdjustPanning(63));
+ PlaySE12WithPanning(SE_M_VITAL_THROW, BattleAnimAdjustPanning(63));
sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y) + 16;
sprite->data[0] = -32;
sprite->data[7]++;
diff --git a/src/battle_anim_electric.c b/src/battle_anim_electric.c
index c153dbc10..a57e88b03 100644
--- a/src/battle_anim_electric.c
+++ b/src/battle_anim_electric.c
@@ -1242,7 +1242,7 @@ static bool8 sub_810B430(struct Task *task, u8 taskId)
if (task->data[4] == 0 && task->data[5] > 0)
{
task->data[14] += task->data[15];
- PlaySE12WithPanning(SE_W085, task->data[14]);
+ PlaySE12WithPanning(SE_M_THUNDERBOLT, task->data[14]);
}
if ((task->data[5] < 0 && task->data[7] <= task->data[8])
diff --git a/src/battle_anim_fire.c b/src/battle_anim_fire.c
index f02ecae19..c8402f727 100644
--- a/src/battle_anim_fire.c
+++ b/src/battle_anim_fire.c
@@ -1136,7 +1136,7 @@ static void AnimWillOWispOrb_Step(struct Sprite *sprite)
if ((initialData5 == 0 || initialData5 > 196) && newData5 > 0 && sprite->data[7] == 0)
{
- PlaySE12WithPanning(SE_W172, gAnimCustomPanning);
+ PlaySE12WithPanning(SE_M_FLAME_WHEEL, gAnimCustomPanning);
}
}
else
diff --git a/src/battle_anim_flying.c b/src/battle_anim_flying.c
index 5179c1364..3fc4f20f2 100644
--- a/src/battle_anim_flying.c
+++ b/src/battle_anim_flying.c
@@ -380,21 +380,18 @@ static void AnimTask_AnimateGustTornadoPalette_Step(u8 taskId)
{
u8 data2;
u16 temp;
- int i, base;
if (gTasks[taskId].data[10]++ == gTasks[taskId].data[1])
{
+ int i, base;
gTasks[taskId].data[10] = 0;
data2 = gTasks[taskId].data[2];
temp = gPlttBufferFaded[16 * data2 + 0x108];
i = 7;
base = data2 * 16;
- do
- {
+ for (; i > 0; --i)
gPlttBufferFaded[base + 0x101 + i] = gPlttBufferFaded[base + 0x100 + i];
- i--;
- } while (i > 0);
gPlttBufferFaded[base + 0x101] = temp;
}
@@ -536,17 +533,16 @@ static void AnimFlyBallAttack_Step(struct Sprite *sprite)
void DestroyAnimSpriteAfterTimer(struct Sprite *sprite)
{
- if (sprite->data[0]-- <= 0)
+ if (sprite->data[0]-- > 0)
+ return;
+ if (sprite->oam.affineMode & ST_OAM_AFFINE_ON_MASK)
{
- if (sprite->oam.affineMode & ST_OAM_AFFINE_ON_MASK)
- {
- FreeOamMatrix(sprite->oam.matrixNum);
- sprite->oam.affineMode = ST_OAM_AFFINE_OFF;
- }
-
- DestroySprite(sprite);
- gAnimVisualTaskCount--;
+ FreeOamMatrix(sprite->oam.matrixNum);
+ sprite->oam.affineMode = ST_OAM_AFFINE_OFF;
}
+
+ DestroySprite(sprite);
+ gAnimVisualTaskCount--;
}
struct FeatherDanceData
@@ -570,30 +566,27 @@ struct FeatherDanceData
static void AnimFallingFeather(struct Sprite *sprite)
{
u8 battler, matrixNum, sinIndex;
- s16 spriteCoord, sinVal;
+ s16 sinVal;
struct FeatherDanceData *data = (struct FeatherDanceData *)sprite->data;
- if (gBattleAnimArgs[7] & 0x100)
- battler = gBattleAnimAttacker;
- else
- battler = gBattleAnimTarget;
+ battler = (gBattleAnimArgs[7] & 0x100) ? gBattleAnimAttacker : gBattleAnimTarget;
if (GetBattlerSide(battler) == B_SIDE_PLAYER)
gBattleAnimArgs[0] = -gBattleAnimArgs[0];
sprite->pos1.x = GetBattlerSpriteCoord(battler, BATTLER_COORD_ATTR_HEIGHT) + gBattleAnimArgs[0];
- spriteCoord = GetBattlerSpriteCoord(battler, BATTLER_COORD_ATTR_WIDTH);
- sprite->pos1.y = spriteCoord + gBattleAnimArgs[1];
+ sinVal = GetBattlerSpriteCoord(battler, BATTLER_COORD_ATTR_WIDTH);
+ sprite->pos1.y = sinVal + gBattleAnimArgs[1];
- data->unk8 = sprite->pos1.y << 8;
- data->unkE_1 = spriteCoord + gBattleAnimArgs[6];
+ data->unk8 = (u16)(sprite->pos1.y) << 8;
+ data->unkE_1 = (u16)(sinVal + gBattleAnimArgs[6]);
data->unk0_0c = 1;
- data->unk2 = gBattleAnimArgs[2] & 0xFF;
- data->unkA = (gBattleAnimArgs[2] >> 8) & 0xFF;
+ data->unk2 = (u16)(gBattleAnimArgs[2] & 0xFF);
+ data->unkA = (u16)((gBattleAnimArgs[2] >> 8) & 0xFF) ;
data->unk4 = gBattleAnimArgs[3];
- data->unk6 = gBattleAnimArgs[4];
- *(u16*)(data->unkC) = gBattleAnimArgs[5];
+ data->unk6 = (u16)gBattleAnimArgs[4];
+ *(u16*)(data->unkC) = (u16)gBattleAnimArgs[5];
if (data->unk2 >= 64 && data->unk2 <= 191)
{
@@ -628,27 +621,16 @@ static void AnimFallingFeather(struct Sprite *sprite)
}
}
- data->unk0_1 = data->unk2 >> 6;
- sprite->pos2.x = (gSineTable[data->unk2] * data->unkC[0]) >> 8;
+ data->unk0_1 = data->unk2/64;
+ sprite->pos2.x = (gSineTable[data->unk2] * (s32)data->unkC[0]) >> 8;
matrixNum = sprite->oam.matrixNum;
sinIndex = (-sprite->pos2.x >> 1) + data->unkA;
sinVal = gSineTable[sinIndex];
gOamMatrices[matrixNum].a = gOamMatrices[matrixNum].d = gSineTable[sinIndex + 64];
- // The comparison below is completely pointless. 'sprite' is sure to be a valid pointer and
- // both the 'if' and 'else' parts are exactly the same.
- // The only reason for this is making sure the compiler generates the exact ASM.
- if (sprite)
- {
- gOamMatrices[matrixNum].b = sinVal;
- gOamMatrices[matrixNum].c = -sinVal;
- }
- else
- {
- gOamMatrices[matrixNum].b = sinVal;
- gOamMatrices[matrixNum].c = -sinVal;
- }
+ gOamMatrices[matrixNum].b = sinVal;
+ gOamMatrices[matrixNum].c = -sinVal;
sprite->callback = sub_810E520;
}
@@ -665,242 +647,238 @@ static void sub_810E520(struct Sprite *sprite)
data->unk0_0a = 0;
data->unk1 = 0;
}
+ return;
}
- else
+
+ switch (data->unk2 / 64)
{
- switch (data->unk2 / 64)
+ case 0:
+ if ((u8)data->unk0_1 == 1) // this must be cast to u8
{
- case 0:
- if (data->unk0_1 << 24 >> 24 == 1) // the shifts have to be here
- {
- data->unk0_0d = 1;
- data->unk0_0a = 1;
- data->unk1 = 0;
- }
- else if (data->unk0_1 << 24 >> 24 == 3)
- {
- data->unk0_0b ^= 1;
- data->unk0_0a = 1;
- data->unk1 = 0;
- }
- else if (data->unk0_0d)
+ data->unk0_0d = 1;
+ data->unk0_0a = 1;
+ data->unk1 = 0;
+ }
+ else if ((u8)data->unk0_1 == 3)
+ {
+ data->unk0_0b ^= 1;
+ data->unk0_0a = 1;
+ data->unk1 = 0;
+ }
+ else if (data->unk0_0d)
+ {
+ sprite->hFlip ^= 1;
+ sprite->animNum = sprite->hFlip;
+ sprite->animBeginning = TRUE;
+ sprite->animEnded = FALSE;
+ if (data->unk0_0c)
{
- sprite->hFlip ^= 1;
- sprite->animNum = sprite->hFlip;
- sprite->animBeginning = TRUE;
- sprite->animEnded = FALSE;
- if (data->unk0_0c)
+ if (!IsContest())
{
- if (!IsContest())
+ if (!data->unkE_0)
{
- if (!data->unkE_0)
- {
- sprite->oam.priority--;
- data->unkE_0 ^= 1;
- }
- else
- {
- sprite->oam.priority++;
- data->unkE_0 ^= 1;
- }
+ sprite->oam.priority--;
+ data->unkE_0 ^= 1;
}
else
{
- if (!data->unkE_0)
- {
- sprite->subpriority -= 12;
- data->unkE_0 ^= 1;
- }
- else
- {
- sprite->subpriority += 12;
- data->unkE_0 ^= 1;
- }
+ sprite->oam.priority++;
+ data->unkE_0 ^= 1;
}
}
- data->unk0_0d = 0;
- data->unk2;
- }
- data->unk0_1 = 0;
- break;
- case 1:
- if (data->unk0_1 << 24 >> 24 == 0)
- {
- data->unk0_0d = 1;
- data->unk0_0a = 1;
- data->unk1 = 0;
- }
- else if (data->unk0_1 << 24 >> 24 == 2)
- {
- data->unk0_0a = 1;
- data->unk1 = 0;
- }
- else if (data->unk0_0d)
- {
- sprite->hFlip ^= 1;
- sprite->animNum = sprite->hFlip;
- sprite->animBeginning = TRUE;
- sprite->animEnded = FALSE;
- if (data->unk0_0c)
+ else
{
- if (!IsContest())
+ if (!data->unkE_0)
{
- if (!data->unkE_0)
- {
- sprite->oam.priority--;
- data->unkE_0 ^= 1;
- }
- else
- {
- sprite->oam.priority++;
- data->unkE_0 ^= 1;
- }
+ sprite->subpriority -= 12;
+ data->unkE_0 ^= 1;
}
else
{
- if (!data->unkE_0)
- {
- sprite->subpriority -= 12;
- data->unkE_0 ^= 1;
- }
- else
- {
- sprite->subpriority += 12;
- data->unkE_0 ^= 1;
- }
+ sprite->subpriority += 12;
+ data->unkE_0 ^= 1;
}
}
- data->unk0_0d = 0;
- }
- data->unk0_1 = 1;
- break;
- case 2:
- if (data->unk0_1 << 24 >> 24 == 3)
- {
- data->unk0_0d = 1;
- data->unk0_0a = 1;
- data->unk1 = 0;
- }
- else if (data->unk0_1 << 24 >> 24 == 1)
- {
- data->unk0_0a = 1;
- data->unk1 = 0;
}
- else if (data->unk0_0d)
+ data->unk0_0d = 0;
+ }
+ data->unk0_1 = 0;
+ break;
+ case 1:
+ if ((u8)data->unk0_1 == 0)
+ {
+ data->unk0_0d = 1;
+ data->unk0_0a = 1;
+ data->unk1 = 0;
+ }
+ else if ((u8)data->unk0_1 == 2)
+ {
+ data->unk0_0a = 1;
+ data->unk1 = 0;
+ }
+ else if (data->unk0_0d)
+ {
+ sprite->hFlip ^= 1;
+ sprite->animNum = sprite->hFlip;
+ sprite->animBeginning = TRUE;
+ sprite->animEnded = FALSE;
+ if (data->unk0_0c)
{
- sprite->hFlip ^= 1;
- sprite->animNum = sprite->hFlip;
- sprite->animBeginning = TRUE;
- sprite->animEnded = FALSE;
- if (data->unk0_0c)
+ if (!IsContest())
{
- if (!IsContest())
+ if (!data->unkE_0)
{
- if (!data->unkE_0)
- {
- sprite->oam.priority--;
- data->unkE_0 ^= 1;
- }
- else
- {
- sprite->oam.priority++;
- data->unkE_0 ^= 1;
- }
+ sprite->oam.priority--;
+ data->unkE_0 ^= 1;
}
else
{
- if (!data->unkE_0)
- {
- sprite->subpriority -= 12;
- data->unkE_0 ^= 1;
- }
- else
- {
- sprite->subpriority += 12;
- data->unkE_0 ^= 1;
- }
+ sprite->oam.priority++;
+ data->unkE_0 ^= 1;
+ }
+ }
+ else
+ {
+ if (!data->unkE_0)
+ {
+ sprite->subpriority -= 12;
+ data->unkE_0 ^= 1;
+ }
+ else
+ {
+ sprite->subpriority += 12;
+ data->unkE_0 ^= 1;
}
}
- data->unk0_0d = 0;
- }
- data->unk0_1 = 2;
- break;
- case 3:
- if (data->unk0_1 << 24 >> 24 == 2)
- {
- data->unk0_0d = 1;
}
- else if (data->unk0_1 << 24 >> 24 == 0)
+ data->unk0_0d = 0;
+ }
+ data->unk0_1 = 1;
+ break;
+ case 2:
+ if ((u8)data->unk0_1 == 3)
+ {
+ data->unk0_0d = 1;
+ data->unk0_0a = 1;
+ data->unk1 = 0;
+ }
+ else if ((u8)data->unk0_1 == 1)
+ {
+ data->unk0_0a = 1;
+ data->unk1 = 0;
+ }
+ else if (data->unk0_0d)
+ {
+ sprite->hFlip ^= 1;
+ sprite->animNum = sprite->hFlip;
+ sprite->animBeginning = TRUE;
+ sprite->animEnded = FALSE;
+ if (data->unk0_0c)
{
- data->unk0_0b ^= 1;
- data->unk0_0a = 1;
- data->unk1 = 0;
+ if (!IsContest())
+ {
+ if (!data->unkE_0)
+ {
+ sprite->oam.priority--;
+ data->unkE_0 ^= 1;
+ }
+ else
+ {
+ sprite->oam.priority++;
+ data->unkE_0 ^= 1;
+ }
+ }
+ else
+ {
+ if (!data->unkE_0)
+ {
+ sprite->subpriority -= 12;
+ data->unkE_0 ^= 1;
+ }
+ else
+ {
+ sprite->subpriority += 12;
+ data->unkE_0 ^= 1;
+ }
+ }
}
- else if (data->unk0_0d)
+ data->unk0_0d = 0;
+ }
+ data->unk0_1 = 2;
+ break;
+ case 3:
+ if ((u8)data->unk0_1 == 2)
+ {
+ data->unk0_0d = 1;
+ }
+ else if ((u8)data->unk0_1 == 0)
+ {
+ data->unk0_0b ^= 1;
+ data->unk0_0a = 1;
+ data->unk1 = 0;
+ }
+ else if (data->unk0_0d)
+ {
+ sprite->hFlip ^= 1;
+ sprite->animNum = sprite->hFlip;
+ sprite->animBeginning = TRUE;
+ sprite->animEnded = FALSE;
+ if (data->unk0_0c)
{
- sprite->hFlip ^= 1;
- sprite->animNum = sprite->hFlip;
- sprite->animBeginning = TRUE;
- sprite->animEnded = FALSE;
- if (data->unk0_0c)
+ if (!IsContest())
+ {
+ if (!data->unkE_0)
+ {
+ sprite->oam.priority--;
+ data->unkE_0 ^= 1;
+ }
+ else
+ {
+ sprite->oam.priority++;
+ data->unkE_0 ^= 1;
+ }
+ }
+ else
{
- if (!IsContest())
+ if (!data->unkE_0)
{
- if (!data->unkE_0)
- {
- sprite->oam.priority--;
- data->unkE_0 ^= 1;
- }
- else
- {
- sprite->oam.priority++;
- data->unkE_0 ^= 1;
- }
+ sprite->subpriority -= 12;
+ data->unkE_0 ^= 1;
}
else
{
- if (!data->unkE_0)
- {
- sprite->subpriority -= 12;
- data->unkE_0 ^= 1;
- }
- else
- {
- sprite->subpriority += 12;
- data->unkE_0 ^= 1;
- }
+ sprite->subpriority += 12;
+ data->unkE_0 ^= 1;
}
}
- data->unk0_0d = 0;
}
- data->unk0_1 = 3;
- break;
+ data->unk0_0d = 0;
}
- #ifndef NONMATCHING
- asm("":::"r8");
- #endif
- sprite->pos2.x = (data->unkC[data->unk0_0b] * gSineTable[data->unk2]) >> 8;
- matrixNum = sprite->oam.matrixNum;
+ data->unk0_1 = 3;
+ break;
+ }
- sinIndex = (-sprite->pos2.x >> 1) + data->unkA;
- sinVal = gSineTable[sinIndex];
+ sprite->pos2.x = ((s32)(data->unkC[data->unk0_0b]) * gSineTable[data->unk2]) >> 8;
+ matrixNum = sprite->oam.matrixNum;
- gOamMatrices[matrixNum].a = gOamMatrices[matrixNum].d = gSineTable[sinIndex + 64];
- gOamMatrices[matrixNum].b = sinVal;
- gOamMatrices[matrixNum].c = -sinVal;
+ sinIndex = ((-sprite->pos2.x >> 1) + data->unkA);
+ sinVal = gSineTable[sinIndex];
- data->unk8 += data->unk6;
- sprite->pos1.y = data->unk8 >> 8;
- if (data->unk4 & 0x8000)
- data->unk2 = (data->unk2 - (data->unk4 & 0x7FFF)) & 0xFF;
- else
- data->unk2 = (data->unk2 + (data->unk4 & 0x7FFF)) & 0xFF;
+ gOamMatrices[matrixNum].a = gOamMatrices[matrixNum].d = gSineTable[sinIndex + 64];
+ gOamMatrices[matrixNum].b = sinVal;
+ gOamMatrices[matrixNum].c = -sinVal;
- if (sprite->pos1.y + sprite->pos2.y >= data->unkE_1)
- {
- sprite->data[0] = 0;
- sprite->callback = DestroyAnimSpriteAfterTimer;
- }
+ data->unk8 += data->unk6;
+ sprite->pos1.y = (s16)(data->unk8 >> 8);
+ if (data->unk4 & 0x8000)
+ data->unk2 = (data->unk2 - (data->unk4 & 0x7FFF)) & 0xFF;
+ else
+ data->unk2 = (data->unk2 + (data->unk4 & 0x7FFF)) & 0xFF;
+
+ if (sprite->pos1.y + sprite->pos2.y >= data->unkE_1)
+ {
+ sprite->data[0] = 0;
+ sprite->callback = DestroyAnimSpriteAfterTimer;
}
}
@@ -944,20 +922,20 @@ static void sub_810EB40(struct Sprite *sprite)
{
sprite->pos2.x += sprite->data[1] >> 8;
- if (++sprite->data[0] == 6)
+ if (sprite->data[0]++ == 5)
{
sprite->data[0] = 0;
sprite->pos2.x = 0;
StartSpriteAnim(sprite, 0);
}
- if (--sprite->data[7] == -1)
+ if (sprite->data[7]-- == 0)
DestroyAnimSprite(sprite);
}
void AnimTask_DrillPeckHitSplats(u8 task)
{
- if (!(gTasks[task].data[0] % 32))
+ if ((gTasks[task].data[0] % 32) == 0)
{
gAnimVisualTaskCount++;
@@ -1060,8 +1038,8 @@ static void AnimDiveBall_Step2(struct Sprite *sprite)
static void AnimDiveWaterSplash(struct Sprite *sprite)
{
- u32 matrixNum;
- int t1, t2;
+ u8 matrixNum;
+ s32 t1, t2;
switch (sprite->data[0])
{
@@ -1083,7 +1061,7 @@ static void AnimDiveWaterSplash(struct Sprite *sprite)
sprite->data[0]++;
break;
case 1:
- if (sprite->data[2] <= 11)
+ if (sprite->data[2] < 12)
sprite->data[1] -= 40;
else
sprite->data[1] += 40;
@@ -1091,7 +1069,7 @@ static void AnimDiveWaterSplash(struct Sprite *sprite)
sprite->data[2]++;
TrySetSpriteRotScale(sprite, 0, 256, sprite->data[1], 0);
-
+
matrixNum = sprite->oam.matrixNum;
t1 = 15616;
@@ -1115,8 +1093,8 @@ static void AnimDiveWaterSplash(struct Sprite *sprite)
// Launches a water droplet away from the specified battler. Used by Astonish and Dive
static void AnimSprayWaterDroplet(struct Sprite *sprite)
{
- int v1 = 0x1ff & Random2();
- int v2 = 0x7f & Random2();
+ const u16 v1 = Random2() & 0x1ff;
+ const u16 v2 = Random2() & 0x07f;
if (v1 % 2)
sprite->data[0] = 736 + v1;
@@ -1160,13 +1138,13 @@ static void AnimSprayWaterDroplet_Step(struct Sprite *sprite)
sprite->pos2.y -= sprite->data[1] >> 8;
}
- sprite->data[0] = sprite->data[0];
+ sprite->data[0] -= 0; // Needed to Match
sprite->data[1] -= 32;
if (sprite->data[0] < 0)
sprite->data[0] = 0;
- if (++sprite->data[3] == 31)
+ if (sprite->data[3]++ == 30)
DestroyAnimSprite(sprite);
}
@@ -1212,7 +1190,7 @@ static void AnimSkyAttackBird(struct Sprite *sprite)
sprite->data[7] = ((posy - sprite->pos1.y) << 4) / 12;
rotation = ArcTan2Neg(posx - sprite->pos1.x, posy - sprite->pos1.y);
- rotation += 49152;
+ rotation -= 16384;
TrySetSpriteRotScale(sprite, 1, 0x100, 0x100, rotation);
@@ -1236,12 +1214,12 @@ void unref_sub_810F184(u8 taskId)
{
if (gBattleAnimArgs[0] == 0)
{
- u8 spriteId = GetAnimBattlerSpriteId(ANIM_ATTACKER);
+ const u8 spriteId = GetAnimBattlerSpriteId(ANIM_ATTACKER);
gSprites[spriteId].invisible = TRUE;
}
else
{
- u8 spriteId = GetAnimBattlerSpriteId(ANIM_ATTACKER);
+ const u8 spriteId = GetAnimBattlerSpriteId(ANIM_ATTACKER);
gSprites[spriteId].invisible = FALSE;
}
DestroyAnimVisualTask(taskId);
diff --git a/src/battle_anim_ghost.c b/src/battle_anim_ghost.c
index b8de6b0e1..632954351 100644
--- a/src/battle_anim_ghost.c
+++ b/src/battle_anim_ghost.c
@@ -252,7 +252,7 @@ static void AnimConfuseRayBallBounce_Step1(struct Sprite *sprite)
return;
if (r0 <= 0)
return;
- PlaySE12WithPanning(SE_W109, gAnimCustomPanning);
+ PlaySE12WithPanning(SE_M_CONFUSE_RAY, gAnimCustomPanning);
}
static void AnimConfuseRayBallBounce_Step2(struct Sprite *sprite)
@@ -271,7 +271,7 @@ static void AnimConfuseRayBallBounce_Step2(struct Sprite *sprite)
if (r2 == 0 || r2 > 196)
{
if (r0 > 0)
- PlaySE(SE_W109);
+ PlaySE(SE_M_CONFUSE_RAY);
}
if (sprite->data[6] == 0)
diff --git a/src/battle_anim_mons.c b/src/battle_anim_mons.c
index 861c5f6ca..d9993ab95 100644
--- a/src/battle_anim_mons.c
+++ b/src/battle_anim_mons.c
@@ -141,10 +141,10 @@ u8 GetBattlerSpriteCoord(u8 battlerId, u8 coordType)
default:
if (IsContest())
{
- if (gContestResources->field_18->unk4_0)
- species = gContestResources->field_18->unk2;
+ if (gContestResources->moveAnim->hasTargetAnim)
+ species = gContestResources->moveAnim->targetSpecies;
else
- species = gContestResources->field_18->species;
+ species = gContestResources->moveAnim->species;
}
else
{
@@ -189,10 +189,10 @@ u8 GetBattlerYDelta(u8 battlerId, u16 species)
{
if (IsContest())
{
- if (gContestResources->field_18->unk4_0)
- personality = gContestResources->field_18->unk10;
+ if (gContestResources->moveAnim->hasTargetAnim)
+ personality = gContestResources->moveAnim->targetPersonality;
else
- personality = gContestResources->field_18->unk8;
+ personality = gContestResources->moveAnim->personality;
}
else
{
@@ -306,10 +306,10 @@ u8 GetBattlerSpriteCoord2(u8 battlerId, u8 coordType)
{
if (IsContest())
{
- if (gContestResources->field_18->unk4_0)
- species = gContestResources->field_18->unk2;
+ if (gContestResources->moveAnim->hasTargetAnim)
+ species = gContestResources->moveAnim->targetSpecies;
else
- species = gContestResources->field_18->species;
+ species = gContestResources->moveAnim->species;
}
else
{
@@ -1743,7 +1743,7 @@ void PrepareAffineAnimInTaskData(struct Task *task, u8 spriteId, const union Aff
bool8 RunAffineAnimFromTaskData(struct Task *task)
{
- gAnimTaskAffineAnim = LoadPointerFromVars(task->data[13], task->data[14]) + (task->data[7] << 3);
+ gAnimTaskAffineAnim = &((union AffineAnimCmd *)LoadPointerFromVars(task->data[13], task->data[14]))[task->data[7]];
switch (gAnimTaskAffineAnim->type)
{
default:
@@ -1851,7 +1851,7 @@ static u16 GetBattlerYDeltaFromSpriteId(u8 spriteId)
{
if (IsContest())
{
- species = gContestResources->field_18->species;
+ species = gContestResources->moveAnim->species;
return gMonBackPicCoords[species].y_offset;
}
else
@@ -2103,15 +2103,15 @@ s16 GetBattlerSpriteCoordAttr(u8 battlerId, u8 attr)
if (IsContest())
{
- if (gContestResources->field_18->unk4_0)
+ if (gContestResources->moveAnim->hasTargetAnim)
{
- species = gContestResources->field_18->unk2;
- personality = gContestResources->field_18->unk10;
+ species = gContestResources->moveAnim->targetSpecies;
+ personality = gContestResources->moveAnim->targetPersonality;
}
else
{
- species = gContestResources->field_18->species;
- personality = gContestResources->field_18->unk8;
+ species = gContestResources->moveAnim->species;
+ personality = gContestResources->moveAnim->personality;
}
if (species == SPECIES_UNOWN)
{
diff --git a/src/battle_anim_psychic.c b/src/battle_anim_psychic.c
index 7918698fc..3f451998c 100644
--- a/src/battle_anim_psychic.c
+++ b/src/battle_anim_psychic.c
@@ -1101,7 +1101,7 @@ static void AnimTask_TransparentCloneGrowAndShrink_Step(u8 taskId)
break;
case 1:
task->data[1] -= 4;
- task->data[2] = 256 - (gSineTable[task->data[1]] >> 1);;
+ task->data[2] = 256 - (gSineTable[task->data[1]] >> 1);
SetSpriteRotScale(task->data[15], task->data[2], task->data[2], 0);
SetBattlerSpriteYOffsetFromOtherYScale(task->data[15], task->data[13]);
if (task->data[1] == 0)
@@ -1137,7 +1137,7 @@ static void AnimPsychoBoost(struct Sprite *sprite)
case 1:
if (sprite->affineAnimEnded)
{
- PlaySE12WithPanning(SE_W100, BattleAnimAdjustPanning(-64));
+ PlaySE12WithPanning(SE_M_TELEPORT, BattleAnimAdjustPanning(-64));
ChangeSpriteAffineAnim(sprite, 1);
sprite->data[0]++;
}
diff --git a/src/battle_anim_rock.c b/src/battle_anim_rock.c
index 1f22d2976..29ba49346 100644
--- a/src/battle_anim_rock.c
+++ b/src/battle_anim_rock.c
@@ -182,10 +182,6 @@ static const union AnimCmd *const sAnims_BasicRock[] =
{
sAnim_BasicRock_0,
sAnim_BasicRock_1,
-};
-
-static const union AnimCmd *const sAnims_WeatherBallRockDown[] =
-{
sAnim_WeatherBallRockDown_0,
sAnim_WeatherBallRockDown_1,
};
@@ -296,7 +292,7 @@ const struct SpriteTemplate gWeatherBallRockDownSpriteTemplate =
.tileTag = ANIM_TAG_ROCKS,
.paletteTag = ANIM_TAG_ROCKS,
.oam = &gOamData_AffineNormal_ObjNormal_32x32,
- .anims = sAnims_WeatherBallRockDown,
+ .anims = &sAnims_BasicRock[2],
.images = NULL,
.affineAnims = sAffineAnims_BasicRock,
.callback = AnimWeatherBallDown,
@@ -635,7 +631,7 @@ static void AnimTask_Rollout_Step(u8 taskId)
task->data[0]++;
}
- PlaySE12WithPanning(SE_W029, task->data[13]);
+ PlaySE12WithPanning(SE_M_HEADBUTT, task->data[13]);
break;
case 1:
if (--task->data[11] == 0)
@@ -665,7 +661,7 @@ static void AnimTask_Rollout_Step(u8 taskId)
task->data[9] = 0;
sub_8111214(task);
task->data[13] += task->data[14];
- PlaySE12WithPanning(SE_W091, task->data[13]);
+ PlaySE12WithPanning(SE_M_DIG, task->data[13]);
}
if (--task->data[8] == 0)
diff --git a/src/battle_anim_smokescreen.c b/src/battle_anim_smokescreen.c
index a8c043e67..4120dda72 100644
--- a/src/battle_anim_smokescreen.c
+++ b/src/battle_anim_smokescreen.c
@@ -6,39 +6,40 @@
#include "sprite.h"
#include "util.h"
#include "constants/pokemon.h"
+#include "constants/battle_palace.h"
static void SmokescreenImpact_Callback(struct Sprite *);
static void SpriteCB_DestroySprite(struct Sprite *sprite);
// The below data for smokescreen starts and ends with some data that belongs to battle_gfx_sfx_util.c
-const u8 gUnknown_0831C604[] =
-{
- [NATURE_HARDY] = 0,
- [NATURE_LONELY] = 0,
- [NATURE_BRAVE] = 1,
- [NATURE_ADAMANT] = 0,
- [NATURE_NAUGHTY] = 1,
- [NATURE_BOLD] = 1,
- [NATURE_DOCILE] = 2,
- [NATURE_RELAXED] = 0,
- [NATURE_IMPISH] = 0,
- [NATURE_LAX] = 0,
- [NATURE_TIMID] = 1,
- [NATURE_HASTY] = 1,
- [NATURE_SERIOUS] = 1,
- [NATURE_JOLLY] = 0,
- [NATURE_NAIVE] = 2,
- [NATURE_MODEST] = 1,
- [NATURE_MILD] = 0,
- [NATURE_QUIET] = 1,
- [NATURE_BASHFUL] = 1,
- [NATURE_RASH] = 0,
- [NATURE_CALM] = 0,
- [NATURE_GENTLE] = 0,
- [NATURE_SASSY] = 1,
- [NATURE_CAREFUL] = 1,
- [NATURE_QUIRKY] = 0,
+const u8 gBattlePalaceNatureToMoveTarget[NUM_NATURES] =
+{
+ [NATURE_HARDY] = PALACE_TARGET_STRONGER,
+ [NATURE_LONELY] = PALACE_TARGET_STRONGER,
+ [NATURE_BRAVE] = PALACE_TARGET_WEAKER,
+ [NATURE_ADAMANT] = PALACE_TARGET_STRONGER,
+ [NATURE_NAUGHTY] = PALACE_TARGET_WEAKER,
+ [NATURE_BOLD] = PALACE_TARGET_WEAKER,
+ [NATURE_DOCILE] = PALACE_TARGET_RANDOM,
+ [NATURE_RELAXED] = PALACE_TARGET_STRONGER,
+ [NATURE_IMPISH] = PALACE_TARGET_STRONGER,
+ [NATURE_LAX] = PALACE_TARGET_STRONGER,
+ [NATURE_TIMID] = PALACE_TARGET_WEAKER,
+ [NATURE_HASTY] = PALACE_TARGET_WEAKER,
+ [NATURE_SERIOUS] = PALACE_TARGET_WEAKER,
+ [NATURE_JOLLY] = PALACE_TARGET_STRONGER,
+ [NATURE_NAIVE] = PALACE_TARGET_RANDOM,
+ [NATURE_MODEST] = PALACE_TARGET_WEAKER,
+ [NATURE_MILD] = PALACE_TARGET_STRONGER,
+ [NATURE_QUIET] = PALACE_TARGET_WEAKER,
+ [NATURE_BASHFUL] = PALACE_TARGET_WEAKER,
+ [NATURE_RASH] = PALACE_TARGET_STRONGER,
+ [NATURE_CALM] = PALACE_TARGET_STRONGER,
+ [NATURE_GENTLE] = PALACE_TARGET_STRONGER,
+ [NATURE_SASSY] = PALACE_TARGET_WEAKER,
+ [NATURE_CAREFUL] = PALACE_TARGET_WEAKER,
+ [NATURE_QUIRKY] = PALACE_TARGET_STRONGER,
};
static const struct CompressedSpriteSheet sSmokescreenImpactSpriteSheet =
diff --git a/src/battle_anim_sound_tasks.c b/src/battle_anim_sound_tasks.c
index 8efc987b8..71c81235a 100644
--- a/src/battle_anim_sound_tasks.c
+++ b/src/battle_anim_sound_tasks.c
@@ -134,7 +134,7 @@ void SoundTask_PlayCryHighPitch(u8 taskId)
if (IsContest())
{
if (gBattleAnimArgs[0] == ANIM_ATTACKER)
- species = gContestResources->field_18->species;
+ species = gContestResources->moveAnim->species;
else
DestroyAnimVisualTask(taskId); // UB: function should return upon destroying task.
}
@@ -180,7 +180,7 @@ void SoundTask_PlayDoubleCry(u8 taskId)
if (IsContest())
{
if (gBattleAnimArgs[0] == ANIM_ATTACKER)
- species = gContestResources->field_18->species;
+ species = gContestResources->moveAnim->species;
else
DestroyAnimVisualTask(taskId); // UB: function should return upon destroying task.
}
@@ -284,7 +284,7 @@ void SoundTask_PlayCryWithEcho(u8 taskId)
pan = BattleAnimAdjustPanning(SOUND_PAN_ATTACKER);
if (IsContest())
- species = gContestResources->field_18->species;
+ species = gContestResources->moveAnim->species;
else
species = gAnimBattlerSpecies[gBattleAnimAttacker];
diff --git a/src/battle_anim_special.c b/src/battle_anim_throw.c
index bf0d1d438..fef301326 100755
--- a/src/battle_anim_special.c
+++ b/src/battle_anim_throw.c
@@ -22,51 +22,73 @@
#include "constants/rgb.h"
// iwram
-int gUnknown_030062DC;
-u16 gUnknown_030062E0;
-u16 gUnknown_030062E4;
+u32 gMonShrinkDuration;
+u16 gMonShrinkDelta;
+u16 gMonShrinkDistance;
+
+enum {
+ BALL_ROLL_1,
+ BALL_PIVOT_1,
+ BALL_ROLL_2,
+ BALL_PIVOT_2,
+ BALL_ROLL_3,
+ BALL_NEXT_MOVE,
+ BALL_WAIT_NEXT_SHAKE
+};
+
+enum {
+ MON_SHRINK,
+ MON_SHRINK_STEP,
+ MON_SHRINK_INVISIBLE,
+ MON_SHRINK_FREE
+};
+
+enum {
+ SHINY_STAR_ENCIRCLE,
+ SHINY_STAR_DIAGONAL,
+};
static void sub_8170660(u8);
-static void sub_8170A38(u8);
-static void sub_8170EF0(u8);
-static void sub_8171104(struct Sprite *);
-static void sub_8171030(u8);
-static void sub_81710A8(u8);
-static void sub_8171134(struct Sprite *);
-static void sub_8171CAC(struct Sprite *);
-static void sub_81711E8(struct Sprite *);
-static void sub_8171240(struct Sprite *);
-static void sub_817138C(struct Sprite *);
-static void sub_81713D0(struct Sprite *);
-static void sub_81717B4(struct Sprite *);
-static void sub_81714D4(struct Sprite *);
-static void sub_8171520(struct Sprite *);
-static void sub_81717D8(struct Sprite *);
-static void sub_8171AE4(struct Sprite *);
-static void sub_81717F8(struct Sprite *);
-static void sub_81719EC(struct Sprite *);
-static void sub_81718D8(struct Sprite *);
-static void sub_81719C0(struct Sprite *);
-static void sub_8171D60(u8);
-static void sub_8171AAC(struct Sprite *);
-static void sub_8171BAC(struct Sprite *);
-static void sub_8171CE8(struct Sprite *);
+static void AnimTask_FlashHealthboxOnLevelUp_Step(u8);
+static void AnimTask_ThrowBall_Step(u8);
+static void SpriteCB_Ball_Throw(struct Sprite *);
+static void AnimTask_ThrowBall_StandingTrainer_Step(u8);
+static void Task_PlayerThrow_Wait(u8);
+static void SpriteCB_Ball_Arc(struct Sprite *);
+static void SpriteCB_Ball_Block(struct Sprite *);
+static void SpriteCB_Ball_MonShrink(struct Sprite *);
+static void SpriteCB_Ball_MonShrink_Step(struct Sprite *);
+static void SpriteCB_Ball_Bounce(struct Sprite *);
+static void SpriteCB_Ball_Bounce_Step(struct Sprite *);
+static void SpriteCB_Ball_Release(struct Sprite *);
+static void SpriteCB_Ball_Wobble(struct Sprite *);
+static void SpriteCB_Ball_Wobble_Step(struct Sprite *);
+static void SpriteCB_Ball_Capture(struct Sprite *);
+static void SpriteCB_Ball_Release_Step(struct Sprite *);
+static void SpriteCB_Ball_Capture_Step(struct Sprite *);
+static void MakeCaptureStars(struct Sprite *);
+static void SpriteCB_Ball_FadeOut(struct Sprite *);
+static void DestroySpriteAfterOneFrame(struct Sprite *);
+static void LoadBallParticleGfx(u8);
+static void SpriteCB_CaptureStar_Flicker(struct Sprite *);
+static void SpriteCB_Ball_Release_Wait(struct Sprite *);
+static void SpriteCB_Ball_Block_Step(struct Sprite *);
static void PokeBallOpenParticleAnimation_Step1(struct Sprite *);
static void PokeBallOpenParticleAnimation_Step2(struct Sprite *);
static void DestroyBallOpenAnimationParticle(struct Sprite *);
static void FanOutBallOpenParticles_Step1(struct Sprite *);
static void RepeatBallOpenParticleAnimation_Step1(struct Sprite *);
static void PremierBallOpenParticleAnimation_Step1(struct Sprite *);
-static void sub_8172AB0(u8);
-static void sub_8172B40(u8);
-static void sub_8172B90(u8);
-static void sub_8172FEC(u8);
-static void sub_81731FC(struct Sprite *);
-static void sub_8173250(struct Sprite *);
-static void sub_81731B0(u8);
-static void sub_817339C(struct Sprite *);
-static void sub_81733D4(struct Sprite *);
-static void sub_8173400(struct Sprite *);
+static void Task_FadeMon_ToBallColor(u8);
+static void Task_FadeMon_ToNormal(u8);
+static void Task_FadeMon_ToNormal_Step(u8);
+static void Task_ShinyStars(u8);
+static void SpriteCB_ShinyStars_Encircle(struct Sprite *);
+static void SpriteCB_ShinyStars_Diagonal(struct Sprite *);
+static void Task_ShinyStars_Wait(u8);
+static void SpriteCB_PokeBlock_LiftArm(struct Sprite *);
+static void SpriteCB_PokeBlock_Arc(struct Sprite *);
+static void SpriteCB_ThrowPokeBlock_Free(struct Sprite *);
static void PokeBallOpenParticleAnimation(u8);
static void GreatBallOpenParticleAnimation(u8);
static void SafariBallOpenParticleAnimation(u8);
@@ -76,31 +98,31 @@ static void DiveBallOpenParticleAnimation(u8);
static void RepeatBallOpenParticleAnimation(u8);
static void TimerBallOpenParticleAnimation(u8);
static void PremierBallOpenParticleAnimation(u8);
-static void sub_817330C(struct Sprite *);
+static void SpriteCB_PokeBlock_Throw(struct Sprite *);
-struct BallCaptureSuccessStarData
+struct CaptureStar
{
s8 xOffset;
s8 yOffset;
- s8 unk2;
+ s8 amplitude;
};
-static const struct BallCaptureSuccessStarData sBallCaptureSuccessStarData[] =
+static const struct CaptureStar sCaptureStars[] =
{
{
.xOffset = 10,
.yOffset = 2,
- .unk2 = -3,
+ .amplitude = -3,
},
{
.xOffset = 15,
.yOffset = 0,
- .unk2 = -4,
+ .amplitude = -4,
},
{
.xOffset = -10,
.yOffset = 2,
- .unk2 = -4,
+ .amplitude = -4,
},
};
@@ -117,39 +139,39 @@ static const struct BallCaptureSuccessStarData sBallCaptureSuccessStarData[] =
#define TAG_PARTICLES_LUXURYBALL 55030
#define TAG_PARTICLES_PREMIERBALL 55031
-const struct CompressedSpriteSheet gBallParticleSpritesheets[] =
-{
- {gBattleAnimSpriteGfx_Particles, 0x100, TAG_PARTICLES_POKEBALL},
- {gBattleAnimSpriteGfx_Particles, 0x100, TAG_PARTICLES_GREATBALL},
- {gBattleAnimSpriteGfx_Particles, 0x100, TAG_PARTICLES_SAFARIBALL},
- {gBattleAnimSpriteGfx_Particles, 0x100, TAG_PARTICLES_ULTRABALL},
- {gBattleAnimSpriteGfx_Particles, 0x100, TAG_PARTICLES_MASTERBALL},
- {gBattleAnimSpriteGfx_Particles, 0x100, TAG_PARTICLES_NETBALL},
- {gBattleAnimSpriteGfx_Particles, 0x100, TAG_PARTICLES_DIVEBALL},
- {gBattleAnimSpriteGfx_Particles, 0x100, TAG_PARTICLES_NESTBALL},
- {gBattleAnimSpriteGfx_Particles, 0x100, TAG_PARTICLES_REPEATBALL},
- {gBattleAnimSpriteGfx_Particles, 0x100, TAG_PARTICLES_TIMERBALL},
- {gBattleAnimSpriteGfx_Particles, 0x100, TAG_PARTICLES_LUXURYBALL},
- {gBattleAnimSpriteGfx_Particles, 0x100, TAG_PARTICLES_PREMIERBALL},
+static const struct CompressedSpriteSheet sBallParticleSpriteSheets[POKEBALL_COUNT] =
+{
+ [BALL_POKE] = {gBattleAnimSpriteGfx_Particles, 0x100, TAG_PARTICLES_POKEBALL},
+ [BALL_GREAT] = {gBattleAnimSpriteGfx_Particles, 0x100, TAG_PARTICLES_GREATBALL},
+ [BALL_SAFARI] = {gBattleAnimSpriteGfx_Particles, 0x100, TAG_PARTICLES_SAFARIBALL},
+ [BALL_ULTRA] = {gBattleAnimSpriteGfx_Particles, 0x100, TAG_PARTICLES_ULTRABALL},
+ [BALL_MASTER] = {gBattleAnimSpriteGfx_Particles, 0x100, TAG_PARTICLES_MASTERBALL},
+ [BALL_NET] = {gBattleAnimSpriteGfx_Particles, 0x100, TAG_PARTICLES_NETBALL},
+ [BALL_DIVE] = {gBattleAnimSpriteGfx_Particles, 0x100, TAG_PARTICLES_DIVEBALL},
+ [BALL_NEST] = {gBattleAnimSpriteGfx_Particles, 0x100, TAG_PARTICLES_NESTBALL},
+ [BALL_REPEAT] = {gBattleAnimSpriteGfx_Particles, 0x100, TAG_PARTICLES_REPEATBALL},
+ [BALL_TIMER] = {gBattleAnimSpriteGfx_Particles, 0x100, TAG_PARTICLES_TIMERBALL},
+ [BALL_LUXURY] = {gBattleAnimSpriteGfx_Particles, 0x100, TAG_PARTICLES_LUXURYBALL},
+ [BALL_PREMIER] = {gBattleAnimSpriteGfx_Particles, 0x100, TAG_PARTICLES_PREMIERBALL},
};
-const struct CompressedSpritePalette gBallParticlePalettes[] =
-{
- {gBattleAnimSpritePal_CircleImpact, TAG_PARTICLES_POKEBALL},
- {gBattleAnimSpritePal_CircleImpact, TAG_PARTICLES_GREATBALL},
- {gBattleAnimSpritePal_CircleImpact, TAG_PARTICLES_SAFARIBALL},
- {gBattleAnimSpritePal_CircleImpact, TAG_PARTICLES_ULTRABALL},
- {gBattleAnimSpritePal_CircleImpact, TAG_PARTICLES_MASTERBALL},
- {gBattleAnimSpritePal_CircleImpact, TAG_PARTICLES_NETBALL},
- {gBattleAnimSpritePal_CircleImpact, TAG_PARTICLES_DIVEBALL},
- {gBattleAnimSpritePal_CircleImpact, TAG_PARTICLES_NESTBALL},
- {gBattleAnimSpritePal_CircleImpact, TAG_PARTICLES_REPEATBALL},
- {gBattleAnimSpritePal_CircleImpact, TAG_PARTICLES_TIMERBALL},
- {gBattleAnimSpritePal_CircleImpact, TAG_PARTICLES_LUXURYBALL},
- {gBattleAnimSpritePal_CircleImpact, TAG_PARTICLES_PREMIERBALL},
+static const struct CompressedSpritePalette sBallParticlePalettes[POKEBALL_COUNT] =
+{
+ [BALL_POKE] = {gBattleAnimSpritePal_CircleImpact, TAG_PARTICLES_POKEBALL},
+ [BALL_GREAT] = {gBattleAnimSpritePal_CircleImpact, TAG_PARTICLES_GREATBALL},
+ [BALL_SAFARI] = {gBattleAnimSpritePal_CircleImpact, TAG_PARTICLES_SAFARIBALL},
+ [BALL_ULTRA] = {gBattleAnimSpritePal_CircleImpact, TAG_PARTICLES_ULTRABALL},
+ [BALL_MASTER] = {gBattleAnimSpritePal_CircleImpact, TAG_PARTICLES_MASTERBALL},
+ [BALL_NET] = {gBattleAnimSpritePal_CircleImpact, TAG_PARTICLES_NETBALL},
+ [BALL_DIVE] = {gBattleAnimSpritePal_CircleImpact, TAG_PARTICLES_DIVEBALL},
+ [BALL_NEST] = {gBattleAnimSpritePal_CircleImpact, TAG_PARTICLES_NESTBALL},
+ [BALL_REPEAT] = {gBattleAnimSpritePal_CircleImpact, TAG_PARTICLES_REPEATBALL},
+ [BALL_TIMER] = {gBattleAnimSpritePal_CircleImpact, TAG_PARTICLES_TIMERBALL},
+ [BALL_LUXURY] = {gBattleAnimSpritePal_CircleImpact, TAG_PARTICLES_LUXURYBALL},
+ [BALL_PREMIER] = {gBattleAnimSpritePal_CircleImpact, TAG_PARTICLES_PREMIERBALL},
};
-const union AnimCmd gAnim_RegularBall[] =
+static const union AnimCmd sAnim_RegularBall[] =
{
ANIMCMD_FRAME(0, 1),
ANIMCMD_FRAME(1, 1),
@@ -160,185 +182,185 @@ const union AnimCmd gAnim_RegularBall[] =
ANIMCMD_JUMP(0),
};
-const union AnimCmd gAnim_MasterBall[] =
+static const union AnimCmd sAnim_MasterBall[] =
{
ANIMCMD_FRAME(3, 1),
ANIMCMD_END,
};
-const union AnimCmd gAnim_NetDiveBall[] =
+static const union AnimCmd sAnim_NetDiveBall[] =
{
ANIMCMD_FRAME(4, 1),
ANIMCMD_END,
};
-const union AnimCmd gAnim_NestBall[] =
+static const union AnimCmd sAnim_NestBall[] =
{
ANIMCMD_FRAME(5, 1),
ANIMCMD_END,
};
-const union AnimCmd gAnim_LuxuryPremierBall[] =
+static const union AnimCmd sAnim_LuxuryPremierBall[] =
{
ANIMCMD_FRAME(6, 4),
ANIMCMD_FRAME(7, 4),
ANIMCMD_JUMP(0),
};
-const union AnimCmd gAnim_UltraRepeatTimerBall[] =
+static const union AnimCmd sAnim_UltraRepeatTimerBall[] =
{
ANIMCMD_FRAME(7, 4),
ANIMCMD_END,
};
-const union AnimCmd *const gAnims_BallParticles[] =
+static const union AnimCmd *const sAnims_BallParticles[] =
{
- gAnim_RegularBall,
- gAnim_MasterBall,
- gAnim_NetDiveBall,
- gAnim_NestBall,
- gAnim_LuxuryPremierBall,
- gAnim_UltraRepeatTimerBall,
+ sAnim_RegularBall,
+ sAnim_MasterBall,
+ sAnim_NetDiveBall,
+ sAnim_NestBall,
+ sAnim_LuxuryPremierBall,
+ sAnim_UltraRepeatTimerBall,
};
-const u8 gBallParticleAnimNums[] =
-{
- [BALL_POKE] = 0,
- [BALL_GREAT] = 0,
- [BALL_SAFARI] = 0,
- [BALL_ULTRA] = 5,
- [BALL_MASTER] = 1,
- [BALL_NET] = 2,
- [BALL_DIVE] = 2,
- [BALL_NEST] = 3,
- [BALL_REPEAT] = 5,
- [BALL_TIMER] = 5,
- [BALL_LUXURY] = 4,
+static const u8 sBallParticleAnimNums[POKEBALL_COUNT] =
+{
+ [BALL_POKE] = 0,
+ [BALL_GREAT] = 0,
+ [BALL_SAFARI] = 0,
+ [BALL_ULTRA] = 5,
+ [BALL_MASTER] = 1,
+ [BALL_NET] = 2,
+ [BALL_DIVE] = 2,
+ [BALL_NEST] = 3,
+ [BALL_REPEAT] = 5,
+ [BALL_TIMER] = 5,
+ [BALL_LUXURY] = 4,
[BALL_PREMIER] = 4,
};
-const TaskFunc gBallParticleAnimationFuncs[] =
-{
- PokeBallOpenParticleAnimation,
- GreatBallOpenParticleAnimation,
- SafariBallOpenParticleAnimation,
- UltraBallOpenParticleAnimation,
- MasterBallOpenParticleAnimation,
- SafariBallOpenParticleAnimation,
- DiveBallOpenParticleAnimation,
- UltraBallOpenParticleAnimation,
- RepeatBallOpenParticleAnimation,
- TimerBallOpenParticleAnimation,
- GreatBallOpenParticleAnimation,
- PremierBallOpenParticleAnimation,
+static const TaskFunc sBallParticleAnimationFuncs[POKEBALL_COUNT] =
+{
+ [BALL_POKE] = PokeBallOpenParticleAnimation,
+ [BALL_GREAT] = GreatBallOpenParticleAnimation,
+ [BALL_SAFARI] = SafariBallOpenParticleAnimation,
+ [BALL_ULTRA] = UltraBallOpenParticleAnimation,
+ [BALL_MASTER] = MasterBallOpenParticleAnimation,
+ [BALL_NET] = SafariBallOpenParticleAnimation,
+ [BALL_DIVE] = DiveBallOpenParticleAnimation,
+ [BALL_NEST] = UltraBallOpenParticleAnimation,
+ [BALL_REPEAT] = RepeatBallOpenParticleAnimation,
+ [BALL_TIMER] = TimerBallOpenParticleAnimation,
+ [BALL_LUXURY] = GreatBallOpenParticleAnimation,
+ [BALL_PREMIER] = PremierBallOpenParticleAnimation,
};
-const struct SpriteTemplate gBallParticlesSpriteTemplates[] =
+static const struct SpriteTemplate sBallParticleSpriteTemplates[POKEBALL_COUNT] =
{
- {
+ [BALL_POKE] = {
.tileTag = TAG_PARTICLES_POKEBALL,
.paletteTag = TAG_PARTICLES_POKEBALL,
.oam = &gOamData_AffineOff_ObjNormal_8x8,
- .anims = gAnims_BallParticles,
+ .anims = sAnims_BallParticles,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = SpriteCallbackDummy,
},
- {
+ [BALL_GREAT] = {
.tileTag = TAG_PARTICLES_GREATBALL,
.paletteTag = TAG_PARTICLES_GREATBALL,
.oam = &gOamData_AffineOff_ObjNormal_8x8,
- .anims = gAnims_BallParticles,
+ .anims = sAnims_BallParticles,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = SpriteCallbackDummy,
},
- {
+ [BALL_SAFARI] = {
.tileTag = TAG_PARTICLES_SAFARIBALL,
.paletteTag = TAG_PARTICLES_SAFARIBALL,
.oam = &gOamData_AffineOff_ObjNormal_8x8,
- .anims = gAnims_BallParticles,
+ .anims = sAnims_BallParticles,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = SpriteCallbackDummy,
},
- {
+ [BALL_ULTRA] = {
.tileTag = TAG_PARTICLES_ULTRABALL,
.paletteTag = TAG_PARTICLES_ULTRABALL,
.oam = &gOamData_AffineOff_ObjNormal_8x8,
- .anims = gAnims_BallParticles,
+ .anims = sAnims_BallParticles,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = SpriteCallbackDummy,
},
- {
+ [BALL_MASTER] = {
.tileTag = TAG_PARTICLES_MASTERBALL,
.paletteTag = TAG_PARTICLES_MASTERBALL,
.oam = &gOamData_AffineOff_ObjNormal_8x8,
- .anims = gAnims_BallParticles,
+ .anims = sAnims_BallParticles,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = SpriteCallbackDummy,
},
- {
+ [BALL_NET] = {
.tileTag = TAG_PARTICLES_NETBALL,
.paletteTag = TAG_PARTICLES_NETBALL,
.oam = &gOamData_AffineOff_ObjNormal_8x8,
- .anims = gAnims_BallParticles,
+ .anims = sAnims_BallParticles,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = SpriteCallbackDummy,
},
- {
+ [BALL_DIVE] = {
.tileTag = TAG_PARTICLES_DIVEBALL,
.paletteTag = TAG_PARTICLES_DIVEBALL,
.oam = &gOamData_AffineOff_ObjNormal_8x8,
- .anims = gAnims_BallParticles,
+ .anims = sAnims_BallParticles,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = SpriteCallbackDummy,
},
- {
+ [BALL_NEST] = {
.tileTag = TAG_PARTICLES_NESTBALL,
.paletteTag = TAG_PARTICLES_NESTBALL,
.oam = &gOamData_AffineOff_ObjNormal_8x8,
- .anims = gAnims_BallParticles,
+ .anims = sAnims_BallParticles,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = SpriteCallbackDummy,
},
- {
+ [BALL_REPEAT] = {
.tileTag = TAG_PARTICLES_REPEATBALL,
.paletteTag = TAG_PARTICLES_REPEATBALL,
.oam = &gOamData_AffineOff_ObjNormal_8x8,
- .anims = gAnims_BallParticles,
+ .anims = sAnims_BallParticles,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = SpriteCallbackDummy,
},
- {
+ [BALL_TIMER] = {
.tileTag = TAG_PARTICLES_TIMERBALL,
.paletteTag = TAG_PARTICLES_TIMERBALL,
.oam = &gOamData_AffineOff_ObjNormal_8x8,
- .anims = gAnims_BallParticles,
+ .anims = sAnims_BallParticles,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = SpriteCallbackDummy,
},
- {
+ [BALL_LUXURY] = {
.tileTag = TAG_PARTICLES_LUXURYBALL,
.paletteTag = TAG_PARTICLES_LUXURYBALL,
.oam = &gOamData_AffineOff_ObjNormal_8x8,
- .anims = gAnims_BallParticles,
+ .anims = sAnims_BallParticles,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = SpriteCallbackDummy,
},
- {
+ [BALL_PREMIER] = {
.tileTag = TAG_PARTICLES_PREMIERBALL,
.paletteTag = TAG_PARTICLES_PREMIERBALL,
.oam = &gOamData_AffineOff_ObjNormal_8x8,
- .anims = gAnims_BallParticles,
+ .anims = sAnims_BallParticles,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = SpriteCallbackDummy,
@@ -379,28 +401,29 @@ const struct SpriteTemplate gPokeblockSpriteTemplate =
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_817330C,
+ .callback = SpriteCB_PokeBlock_Throw,
};
-const union AnimCmd gUnknown_085E5350[] =
+static const union AnimCmd sAnim_SafariRock[] =
{
ANIMCMD_FRAME(64, 1),
ANIMCMD_END,
};
-const union AnimCmd *const gUnknown_085E5358[] = {
- gUnknown_085E5350,
+static const union AnimCmd *const sAnims_SafariRock[] = {
+ sAnim_SafariRock,
};
-const struct SpriteTemplate gBattleAnimSpriteTemplate_085E535C =
+// Unused, leftover from FRLG
+static const struct SpriteTemplate sSafariRockSpriteTemplate =
{
.tileTag = ANIM_TAG_ROCKS,
.paletteTag = ANIM_TAG_ROCKS,
.oam = &gOamData_AffineOff_ObjNormal_32x32,
- .anims = gUnknown_085E5358,
+ .anims = sAnims_SafariRock,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_817330C,
+ .callback = SpriteCB_PokeBlock_Throw,
};
extern const struct SpriteTemplate gWishStarSpriteTemplate;
@@ -572,13 +595,13 @@ void AnimTask_FlashHealthboxOnLevelUp(u8 taskId)
{
gTasks[taskId].data[10] = gBattleAnimArgs[0];
gTasks[taskId].data[11] = gBattleAnimArgs[1];
- gTasks[taskId].func = sub_8170A38;
+ gTasks[taskId].func = AnimTask_FlashHealthboxOnLevelUp_Step;
}
-static void sub_8170A38(u8 taskId)
+static void AnimTask_FlashHealthboxOnLevelUp_Step(u8 taskId)
{
u8 paletteNum;
- int paletteOffset, colorOffset;
+ u32 paletteOffset, colorOffset;
gTasks[taskId].data[0]++;
if (gTasks[taskId].data[0]++ >= gTasks[taskId].data[11])
@@ -658,13 +681,13 @@ void AnimTask_SwitchOutBallEffect(u8 taskId)
switch (gTasks[taskId].data[0])
{
case 0:
- x = GetBattlerSpriteCoord(gBattleAnimAttacker, 0);
- y = GetBattlerSpriteCoord(gBattleAnimAttacker, 1);
+ x = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X);
+ y = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y);
priority = gSprites[spriteId].oam.priority;
subpriority = gSprites[spriteId].subpriority;
gTasks[taskId].data[10] = AnimateBallOpenParticles(x, y + 32, priority, subpriority, ballId);
selectedPalettes = sub_80A75AC(1, 0, 0, 0, 0, 0, 0);
- gTasks[taskId].data[11] = LaunchBallFadeMonTask(0, gBattleAnimAttacker, selectedPalettes, ballId);
+ gTasks[taskId].data[11] = LaunchBallFadeMonTask(FALSE, gBattleAnimAttacker, selectedPalettes, ballId);
gTasks[taskId].data[0]++;
break;
case 1:
@@ -730,6 +753,12 @@ u8 ItemIdToBallId(u16 ballItem)
}
}
+#define tSpriteId data[0]
+
+#define sDuration data[0]
+#define sTargetX data[1]
+#define sTargetY data[2]
+
void AnimTask_ThrowBall(u8 taskId)
{
u8 ballId;
@@ -737,26 +766,26 @@ void AnimTask_ThrowBall(u8 taskId)
ballId = ItemIdToBallId(gLastUsedItem);
spriteId = CreateSprite(&gBallSpriteTemplates[ballId], 32, 80, 29);
- gSprites[spriteId].data[0] = 34;
- gSprites[spriteId].data[1] = GetBattlerSpriteCoord(gBattleAnimTarget, 0);
- gSprites[spriteId].data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, 1) - 16;
- gSprites[spriteId].callback = sub_8171104;
- gBattleSpritesDataPtr->animationData->field_9_x2 = gSprites[gBattlerSpriteIds[gBattleAnimTarget]].invisible;
- gTasks[taskId].data[0] = spriteId;
- gTasks[taskId].func = sub_8170EF0;
+ gSprites[spriteId].sDuration = 34;
+ gSprites[spriteId].sTargetX = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X);
+ gSprites[spriteId].sTargetY = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y) - 16;
+ gSprites[spriteId].callback = SpriteCB_Ball_Throw;
+ gBattleSpritesDataPtr->animationData->wildMonInvisible = gSprites[gBattlerSpriteIds[gBattleAnimTarget]].invisible;
+ gTasks[taskId].tSpriteId = spriteId;
+ gTasks[taskId].func = AnimTask_ThrowBall_Step;
}
-static void sub_8170EF0(u8 taskId)
+static void AnimTask_ThrowBall_Step(u8 taskId)
{
- u8 spriteId = gTasks[taskId].data[0];
- if ((u16)gSprites[spriteId].data[0] == 0xFFFF)
+ u8 spriteId = gTasks[taskId].tSpriteId;
+ if ((u16)gSprites[spriteId].sDuration == 0xFFFF)
DestroyAnimVisualTask(taskId);
}
-// Safari Ball / Wally's ball throw
-void AnimTask_ThrowBallSpecial(u8 taskId)
+// Safari Zone throw / Wally's throw
+void AnimTask_ThrowBall_StandingTrainer(u8 taskId)
{
- int x, y;
+ s16 x, y;
u8 ballId;
u8 subpriority;
u8 spriteId;
@@ -775,27 +804,33 @@ void AnimTask_ThrowBallSpecial(u8 taskId)
ballId = ItemIdToBallId(gLastUsedItem);
subpriority = GetBattlerSpriteSubpriority(GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT)) + 1;
spriteId = CreateSprite(&gBallSpriteTemplates[ballId], x + 32, y | 80, subpriority);
- gSprites[spriteId].data[0] = 34;
- gSprites[spriteId].data[1] = GetBattlerSpriteCoord(gBattleAnimTarget, 0);
- gSprites[spriteId].data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, 1) - 16;
+ gSprites[spriteId].sDuration = 34;
+ gSprites[spriteId].sTargetX = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X);
+ gSprites[spriteId].sTargetY = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y) - 16;
gSprites[spriteId].callback = SpriteCallbackDummy;
- gSprites[gBattlerSpriteIds[GetBattlerAtPosition(B_POSITION_PLAYER_LEFT)]].callback = sub_8039E84;
- gTasks[taskId].data[0] = spriteId;
- gTasks[taskId].func = sub_8171030;
+ gSprites[gBattlerSpriteIds[GetBattlerAtPosition(B_POSITION_PLAYER_LEFT)]].callback = SpriteCB_TrainerThrowObject;
+ gTasks[taskId].tSpriteId = spriteId;
+ gTasks[taskId].func = AnimTask_ThrowBall_StandingTrainer_Step;
}
-static void sub_8171030(u8 taskId)
+static void AnimTask_ThrowBall_StandingTrainer_Step(u8 taskId)
{
if (gSprites[gBattlerSpriteIds[GetBattlerAtPosition(B_POSITION_PLAYER_LEFT)]].animCmdIndex == 1)
{
- PlaySE12WithPanning(SE_NAGERU, 0);
- gSprites[gTasks[taskId].data[0]].callback = sub_8171104;
- CreateTask(sub_81710A8, 10);
- gTasks[taskId].func = sub_8170EF0;
+ PlaySE12WithPanning(SE_BALL_THROW, 0);
+ gSprites[gTasks[taskId].tSpriteId].callback = SpriteCB_Ball_Throw;
+ CreateTask(Task_PlayerThrow_Wait, 10);
+ gTasks[taskId].func = AnimTask_ThrowBall_Step;
}
}
-static void sub_81710A8(u8 taskId)
+#undef sDuration
+#undef sTargetX
+#undef sTargetY
+
+#undef tSpriteId
+
+static void Task_PlayerThrow_Wait(u8 taskId)
{
if (gSprites[gBattlerSpriteIds[GetBattlerAtPosition(B_POSITION_PLAYER_LEFT)]].animEnded)
{
@@ -804,29 +839,50 @@ static void sub_81710A8(u8 taskId)
}
}
-static void sub_8171104(struct Sprite *sprite)
+#define sTargetXArg data[1]
+#define sTargetYArg data[2]
+
+#define sOffsetX data[1] // re-use
+#define sTargetX data[2] // re-use
+#define sOffsetY data[3]
+#define sTargetY data[4]
+#define sAmplitude data[5]
+
+static void SpriteCB_Ball_Throw(struct Sprite *sprite)
{
- u16 temp = sprite->data[1];
- u16 temp2 = sprite->data[2];
- sprite->data[1] = sprite->pos1.x;
- sprite->data[2] = temp;
- sprite->data[3] = sprite->pos1.y;
- sprite->data[4] = temp2;
- sprite->data[5] = -40;
+ u16 targetX = sprite->sTargetXArg;
+ u16 targetY = sprite->sTargetYArg;
+
+ sprite->sOffsetX = sprite->pos1.x;
+ sprite->sTargetX = targetX;
+ sprite->sOffsetY = sprite->pos1.y;
+ sprite->sTargetY = targetY;
+ sprite->sAmplitude = -40;
InitAnimArcTranslation(sprite);
- sprite->callback = sub_8171134;
+ sprite->callback = SpriteCB_Ball_Arc;
}
-static void sub_8171134(struct Sprite *sprite)
+#undef sTargetXArg
+#undef sTargetYArg
+#undef sOffsetX
+#undef sTargetX
+#undef sOffsetY
+#undef sTargetY
+#undef sAmplitude
+
+#define sTimer data[5]
+#define sTaskId data[5] // re-use
+
+static void SpriteCB_Ball_Arc(struct Sprite *sprite)
{
- int i;
+ s32 i;
u8 ballId;
if (TranslateAnimHorizontalArc(sprite))
{
if (gBattleSpritesDataPtr->animationData->ballThrowCaseId == BALL_TRAINER_BLOCK)
{
- sprite->callback = sub_8171CAC;
+ sprite->callback = SpriteCB_Ball_Block;
}
else
{
@@ -839,374 +895,451 @@ static void sub_8171134(struct Sprite *sprite)
for (i = 0; i < 8; i++)
sprite->data[i] = 0;
- sprite->data[5] = 0;
- sprite->callback = sub_81711E8;
+ sprite->sTimer = 0;
+ sprite->callback = SpriteCB_Ball_MonShrink;
ballId = ItemIdToBallId(gLastUsedItem);
switch (ballId)
{
case 0 ... POKEBALL_COUNT - 1:
AnimateBallOpenParticles(sprite->pos1.x, sprite->pos1.y - 5, 1, 28, ballId);
- LaunchBallFadeMonTask(0, gBattleAnimTarget, 14, ballId);
+ LaunchBallFadeMonTask(FALSE, gBattleAnimTarget, 14, ballId);
break;
}
}
}
}
-static void sub_81711E8(struct Sprite *sprite)
+static void SpriteCB_Ball_MonShrink(struct Sprite *sprite)
{
- if (++sprite->data[5] == 10)
+ if (++sprite->sTimer == 10)
{
- sprite->data[5] = CreateTask(TaskDummy, 50);
- sprite->callback = sub_8171240;
+ sprite->sTaskId = CreateTask(TaskDummy, 50);
+ sprite->callback = SpriteCB_Ball_MonShrink_Step;
gSprites[gBattlerSpriteIds[gBattleAnimTarget]].data[1] = 0;
}
}
-static void sub_8171240(struct Sprite *sprite)
+#undef sTimer
+#undef sTaskId
+
+#define tState data[0]
+#define sTimer data[1]
+#define sTaskId data[5]
+
+static void SpriteCB_Ball_MonShrink_Step(struct Sprite *sprite)
{
u8 spriteId;
u8 taskId;
spriteId = gBattlerSpriteIds[gBattleAnimTarget];
- taskId = sprite->data[5];
+ taskId = sprite->sTaskId;
- if (++gTasks[taskId].data[1] == 11)
- PlaySE(SE_SUIKOMU);
+ if (++gTasks[taskId].sTimer == 11)
+ PlaySE(SE_BALL_TRADE);
- switch (gTasks[taskId].data[0])
+ switch (gTasks[taskId].tState)
{
- case 0:
+ case MON_SHRINK:
PrepareBattlerSpriteForRotScale(spriteId, ST_OAM_OBJ_NORMAL);
gTasks[taskId].data[10] = 256;
- gUnknown_030062DC = 28;
- gUnknown_030062E4 = (gSprites[spriteId].pos1.y + gSprites[spriteId].pos2.y) - (sprite->pos1.y + sprite->pos2.y);
- gUnknown_030062E0 = (u32)(gUnknown_030062E4 * 256) / 28;
- gTasks[taskId].data[2] = gUnknown_030062E0;
- gTasks[taskId].data[0]++;
+ gMonShrinkDuration = 28;
+ gMonShrinkDistance = (gSprites[spriteId].pos1.y + gSprites[spriteId].pos2.y) - (sprite->pos1.y + sprite->pos2.y);
+ gMonShrinkDelta = (u32)(gMonShrinkDistance * 256) / gMonShrinkDuration;
+ gTasks[taskId].data[2] = gMonShrinkDelta;
+ gTasks[taskId].tState++; // MON_SHRINK_STEP
break;
- case 1:
- gTasks[taskId].data[10] += 0x20;
+ case MON_SHRINK_STEP:
+ gTasks[taskId].data[10] += 32;
SetSpriteRotScale(spriteId, gTasks[taskId].data[10], gTasks[taskId].data[10], 0);
gTasks[taskId].data[3] += gTasks[taskId].data[2];
gSprites[spriteId].pos2.y = -gTasks[taskId].data[3] >> 8;
- if (gTasks[taskId].data[10] >= 0x480)
- gTasks[taskId].data[0]++;
+ if (gTasks[taskId].data[10] >= 1152)
+ gTasks[taskId].tState++; // MON_SHRINK_INVISIBLE
break;
- case 2:
+ case MON_SHRINK_INVISIBLE:
ResetSpriteRotScale(spriteId);
gSprites[spriteId].invisible = TRUE;
- gTasks[taskId].data[0]++;
+ gTasks[taskId].tState++; // MON_SHRINK_FREE
break;
+ case MON_SHRINK_FREE:
default:
if (gTasks[taskId].data[1] > 10)
{
DestroyTask(taskId);
StartSpriteAnim(sprite, 2);
sprite->data[5] = 0;
- sprite->callback = sub_817138C;
+ sprite->callback = SpriteCB_Ball_Bounce;
}
break;
}
}
-static void sub_817138C(struct Sprite *sprite)
+#undef sTimer
+#undef tState
+#undef sTaskId
+
+#define sState data[3]
+#define sAmplitude data[4]
+#define sPhase data[5]
+
+static void SpriteCB_Ball_Bounce(struct Sprite *sprite)
{
- int angle;
+ s16 phase;
if (sprite->animEnded)
{
- sprite->data[3] = 0;
- sprite->data[4] = 40;
- sprite->data[5] = 0;
- angle = 0;
- sprite->pos1.y += Cos(angle, 40);
- sprite->pos2.y = -Cos(angle, sprite->data[4]);
- sprite->callback = sub_81713D0;
+ sprite->sState = 0;
+ sprite->sAmplitude = 40;
+ sprite->sPhase = 0;
+ phase = 0;
+ sprite->pos1.y += Cos(phase, 40);
+ sprite->pos2.y = -Cos(phase, sprite->sAmplitude);
+ sprite->callback = SpriteCB_Ball_Bounce_Step;
}
}
-static void sub_81713D0(struct Sprite *sprite)
+#undef sState
+#undef sAmplitude
+#undef sPhase
+
+#define DIRECTION(state) (state & 0xFF)
+#define PHASE_DELTA(state) (state >> 8)
+#define BOUNCES(state) (state >> 8)
+#define FALL(state) (state &= -0x100)
+#define RISE_FASTER(state) (state += 257)
+
+#define BALL_FALLING 0
+#define BALL_RISING 1
+
+#define sState data[3]
+#define sAmplitude data[4]
+#define sPhase data[5]
+#define sTimer data[5] // re-use
+
+// Animates the Poké Ball dropping to ground and bouncing.
+static void SpriteCB_Ball_Bounce_Step(struct Sprite *sprite)
{
bool8 lastBounce;
- int bounceCount;
+ s16 bounceCount;
- lastBounce = 0;
+ lastBounce = FALSE;
- switch (sprite->data[3] & 0xFF)
+ switch (DIRECTION(sprite->sState))
{
- case 0:
- sprite->pos2.y = -Cos(sprite->data[5], sprite->data[4]);
- sprite->data[5] += (sprite->data[3] >> 8) + 4;
- if (sprite->data[5] >= 64)
+ case BALL_FALLING:
+ sprite->pos2.y = -Cos(sprite->sPhase, sprite->sAmplitude);
+ sprite->sPhase += PHASE_DELTA(sprite->sState) + 4;
+ // Once the ball touches the ground
+ if (sprite->sPhase >= 64)
{
- sprite->data[4] -= 10;
- sprite->data[3] += 257;
+ sprite->sAmplitude -= 10;
+ RISE_FASTER(sprite->sState);
- bounceCount = sprite->data[3] >> 8;
+ bounceCount = BOUNCES(sprite->sState);
if (bounceCount == 4)
- lastBounce = 1;
+ lastBounce = TRUE;
- // Play a different sound effect for each pokeball bounce.
switch (bounceCount)
{
case 1:
- PlaySE(SE_KON);
+ PlaySE(SE_BALL_BOUNCE_1);
break;
case 2:
- PlaySE(SE_KON2);
+ PlaySE(SE_BALL_BOUNCE_2);
break;
case 3:
- PlaySE(SE_KON3);
+ PlaySE(SE_BALL_BOUNCE_3);
break;
default:
- PlaySE(SE_KON4);
+ PlaySE(SE_BALL_BOUNCE_4);
break;
}
}
break;
- case 1:
- sprite->pos2.y = -Cos(sprite->data[5], sprite->data[4]);
- sprite->data[5] -= (sprite->data[3] >> 8) + 4;
- if (sprite->data[5] <= 0)
+ case BALL_RISING:
+ sprite->pos2.y = -Cos(sprite->sPhase, sprite->sAmplitude);
+ sprite->sPhase -= PHASE_DELTA(sprite->sState) + 4;
+ // Once ball reaches max height
+ if (sprite->sPhase <= 0)
{
- sprite->data[5] = 0;
- sprite->data[3] &= -0x100;
+ // Set to BALL_FALLING
+ sprite->sPhase = 0;
+ FALL(sprite->sState);
}
break;
}
if (lastBounce)
{
- sprite->data[3] = 0;
+ sprite->sState = 0;
sprite->pos1.y += Cos(64, 40);
sprite->pos2.y = 0;
if (gBattleSpritesDataPtr->animationData->ballThrowCaseId == BALL_NO_SHAKES)
{
- sprite->data[5] = 0;
- sprite->callback = sub_81717B4;
+ sprite->sTimer = 0;
+ sprite->callback = SpriteCB_Ball_Release;
}
else
{
- sprite->callback = sub_81714D4;
+ sprite->callback = SpriteCB_Ball_Wobble;
sprite->data[4] = 1;
sprite->data[5] = 0;
}
}
}
-static void sub_81714D4(struct Sprite *sprite)
+#undef sState
+#undef sAmplitude
+#undef sPhase
+#undef sTimer
+
+#undef DIRECTION
+#undef PHASE_DELTA
+#undef BOUNCES
+#undef FALL
+#undef RISE_FASTER
+
+#define sTimer data[3]
+#define sState data[3] // re-use
+
+static void SpriteCB_Ball_Wobble(struct Sprite *sprite)
{
- if (++sprite->data[3] == 31)
+ if (++sprite->sTimer == 31)
{
- sprite->data[3] = 0;
- sprite->affineAnimPaused = 1;
- StartSpriteAffineAnim(sprite, 1);
- gBattleSpritesDataPtr->animationData->field_C = 0;
- sprite->callback = sub_8171520;
- PlaySE(SE_BOWA);
+ sprite->sState = 0;
+ sprite->affineAnimPaused = TRUE;
+ StartSpriteAffineAnim(sprite, BALL_ROTATE_RIGHT);
+ gBattleSpritesDataPtr->animationData->ballSubpx = 0;
+ sprite->callback = SpriteCB_Ball_Wobble_Step;
+ PlaySE(SE_BALL);
}
}
-static void sub_8171520(struct Sprite *sprite)
+#undef sTimer
+#undef sState
+
+#define sState data[3]
+#define sDirection data[4]
+#define sTimer data[5]
+
+#define STATE(state) (state & 0xFF)
+#define SHAKES(state) (state >> 8)
+#define SHAKE_INC(state) (state += 0x100)
+#define RESET_STATE(state) (state &= -0x100)
+
+static void SpriteCB_Ball_Wobble_Step(struct Sprite *sprite)
{
- s8 state;
- u16 var0;
+ s8 shakes;
+ u16 frame;
- switch (sprite->data[3] & 0xFF)
+ switch (STATE(sprite->sState))
{
- case 0:
- if (gBattleSpritesDataPtr->animationData->field_C > 0xFF)
+ case BALL_ROLL_1:
+ // Rolling effect: every frame in the rotation, the sprite shifts 176/256 of a pixel.
+ if (gBattleSpritesDataPtr->animationData->ballSubpx > 255)
{
- sprite->pos2.x += sprite->data[4];
- gBattleSpritesDataPtr->animationData->field_C &= 0xFF;
+ sprite->pos2.x += sprite->sDirection;
+ gBattleSpritesDataPtr->animationData->ballSubpx &= 0xFF;
}
else
- {
- gBattleSpritesDataPtr->animationData->field_C += 0xB0;
- }
+ gBattleSpritesDataPtr->animationData->ballSubpx += 176;
- sprite->data[5]++;
- sprite->affineAnimPaused = 0;
- var0 = sprite->data[5] + 7;
- if (var0 > 14)
+ sprite->sTimer++;
+ sprite->affineAnimPaused = FALSE;
+ frame = sprite->sTimer + 7;
+ if (frame > 14)
{
- gBattleSpritesDataPtr->animationData->field_C = 0;
- sprite->data[3]++;
- sprite->data[5] = 0;
+ gBattleSpritesDataPtr->animationData->ballSubpx = 0;
+ sprite->sState++; // BALL_PIVOT_1
+ sprite->sTimer = 0;
}
break;
- case 1:
- if (++sprite->data[5] == 1)
+ case BALL_PIVOT_1:
+ if (++sprite->sTimer == 1)
{
- sprite->data[5] = 0;
- sprite->data[4] = -sprite->data[4];
- sprite->data[3]++;
- sprite->affineAnimPaused = 0;
- if (sprite->data[4] < 0)
- ChangeSpriteAffineAnim(sprite, 2);
+ sprite->sTimer = 0;
+ sprite->sDirection = -sprite->sDirection;
+ sprite->sState++; // BALL_ROLL_2
+ sprite->affineAnimPaused = FALSE;
+ if (sprite->sDirection < 0)
+ ChangeSpriteAffineAnim(sprite, BALL_ROTATE_LEFT);
else
- ChangeSpriteAffineAnim(sprite, 1);
+ ChangeSpriteAffineAnim(sprite, BALL_ROTATE_RIGHT);
}
else
- {
- sprite->affineAnimPaused = 1;
- }
+ sprite->affineAnimPaused = TRUE;
break;
- case 2:
- if (gBattleSpritesDataPtr->animationData->field_C > 0xFF)
+ case BALL_ROLL_2:
+ if (gBattleSpritesDataPtr->animationData->ballSubpx > 255)
{
- sprite->pos2.x += sprite->data[4];
- gBattleSpritesDataPtr->animationData->field_C &= 0xFF;
+ sprite->pos2.x += sprite->sDirection;
+ gBattleSpritesDataPtr->animationData->ballSubpx &= 0xFF;
}
else
- {
- gBattleSpritesDataPtr->animationData->field_C += 0xB0;
- }
+ gBattleSpritesDataPtr->animationData->ballSubpx += 176;
- sprite->data[5]++;
- sprite->affineAnimPaused = 0;
- var0 = sprite->data[5] + 12;
- if (var0 > 24)
+ sprite->sTimer++;
+ sprite->affineAnimPaused = FALSE;
+ frame = sprite->sTimer + 12;
+ if (frame > 24)
{
- gBattleSpritesDataPtr->animationData->field_C = 0;
- sprite->data[3]++;
- sprite->data[5] = 0;
+ gBattleSpritesDataPtr->animationData->ballSubpx = 0;
+ sprite->sState++; // BALL_PIVOT_2
+ sprite->sTimer = 0;
}
break;
- case 3:
- if (sprite->data[5]++ < 0)
+ case BALL_PIVOT_2:
+ if (sprite->sTimer++ < 0)
{
- sprite->affineAnimPaused = 1;
+ sprite->affineAnimPaused = TRUE;
break;
}
- sprite->data[5] = 0;
- sprite->data[4] = -sprite->data[4];
- sprite->data[3]++;
- sprite->affineAnimPaused = 0;
- if (sprite->data[4] < 0)
- ChangeSpriteAffineAnim(sprite, 2);
+ sprite->sTimer = 0;
+ sprite->sDirection = -sprite->sDirection;
+ sprite->sState++; // BALL_ROLL_3
+ sprite->affineAnimPaused = FALSE;
+ if (sprite->sDirection < 0)
+ ChangeSpriteAffineAnim(sprite, BALL_ROTATE_LEFT);
else
- ChangeSpriteAffineAnim(sprite, 1);
+ ChangeSpriteAffineAnim(sprite, BALL_ROTATE_RIGHT);
// fall through
- case 4:
- if (gBattleSpritesDataPtr->animationData->field_C > 0xFF)
+ case BALL_ROLL_3:
+ if (gBattleSpritesDataPtr->animationData->ballSubpx > 0xFF)
{
- sprite->pos2.x += sprite->data[4];
- gBattleSpritesDataPtr->animationData->field_C &= 0xFF;
+ sprite->pos2.x += sprite->sDirection;
+ gBattleSpritesDataPtr->animationData->ballSubpx &= 0xFF;
}
else
- {
- gBattleSpritesDataPtr->animationData->field_C += 0xB0;
- }
+ gBattleSpritesDataPtr->animationData->ballSubpx += 176;
- sprite->data[5]++;
- sprite->affineAnimPaused = 0;
- var0 = sprite->data[5] + 4;
- if (var0 > 8)
+ sprite->sTimer++;
+ sprite->affineAnimPaused = FALSE;
+ frame = sprite->sTimer + 4;
+ if (frame > 8)
{
- gBattleSpritesDataPtr->animationData->field_C = 0;
- sprite->data[3]++;
- sprite->data[5] = 0;
- sprite->data[4] = -sprite->data[4];
+ gBattleSpritesDataPtr->animationData->ballSubpx = 0;
+ sprite->sState++; // BALL_NEXT_MOVE
+ sprite->sTimer = 0;
+ sprite->sDirection = -sprite->sDirection;
}
break;
- case 5:
- sprite->data[3] += 0x100;
- state = sprite->data[3] >> 8;
- if (state == gBattleSpritesDataPtr->animationData->ballThrowCaseId)
+ case BALL_NEXT_MOVE:
+ SHAKE_INC(sprite->sState);
+ shakes = SHAKES(sprite->sState);
+ if (shakes == gBattleSpritesDataPtr->animationData->ballThrowCaseId)
{
- sprite->affineAnimPaused = 1;
- sprite->callback = sub_81717B4;
+ sprite->affineAnimPaused = TRUE;
+ sprite->callback = SpriteCB_Ball_Release;
}
else
{
- if (gBattleSpritesDataPtr->animationData->ballThrowCaseId == BALL_3_SHAKES_SUCCESS && state == 3)
+ if (gBattleSpritesDataPtr->animationData->ballThrowCaseId == BALL_3_SHAKES_SUCCESS && shakes == 3)
{
- sprite->callback = sub_81717D8;
- sprite->affineAnimPaused = 1;
+ sprite->callback = SpriteCB_Ball_Capture;
+ sprite->affineAnimPaused = TRUE;
}
else
{
- sprite->data[3]++;
- sprite->affineAnimPaused = 1;
+ sprite->sState++; // BALL_WAIT_NEXT_SHAKE
+ sprite->affineAnimPaused = TRUE;
}
}
break;
- case 6:
+ case BALL_WAIT_NEXT_SHAKE:
default:
- if (++sprite->data[5] == 31)
+ if (++sprite->sTimer == 31)
{
- sprite->data[5] = 0;
- sprite->data[3] &= -0x100;
+ sprite->sTimer = 0;
+ RESET_STATE(sprite->sState);
StartSpriteAffineAnim(sprite, 3);
- if (sprite->data[4] < 0)
- StartSpriteAffineAnim(sprite, 2);
+ if (sprite->sDirection < 0)
+ StartSpriteAffineAnim(sprite, BALL_ROTATE_LEFT);
else
- StartSpriteAffineAnim(sprite, 1);
+ StartSpriteAffineAnim(sprite, BALL_ROTATE_RIGHT);
- PlaySE(SE_BOWA);
+ PlaySE(SE_BALL);
}
break;
}
}
-static void sub_81717B4(struct Sprite *sprite)
+#undef STATE
+#undef SHAKES
+#undef SHAKE_INC
+#undef RESET_STATE
+
+#undef sState
+
+#define sTimer data[5]
+
+static void SpriteCB_Ball_Release(struct Sprite *sprite)
{
- if (++sprite->data[5] == 31)
+ if (++sprite->sTimer == 31)
{
sprite->data[5] = 0;
- sprite->callback = sub_8171AE4;
+ sprite->callback = SpriteCB_Ball_Release_Step;
}
}
+#undef sTimer
-static void sub_81717D8(struct Sprite *sprite)
+#define sState data[0]
+#define sTimer data[4]
+
+static void SpriteCB_Ball_Capture(struct Sprite *sprite)
{
- sprite->animPaused = 1;
- sprite->callback = sub_81717F8;
+ sprite->animPaused = TRUE;
+ sprite->callback = SpriteCB_Ball_Capture_Step;
sprite->data[3] = 0;
- sprite->data[4] = 0;
+ sprite->sTimer = 0;
sprite->data[5] = 0;
}
-static void sub_81717F8(struct Sprite *sprite)
+// Fade and unfade ball, create star animations, play sound effects
+static void SpriteCB_Ball_Capture_Step(struct Sprite *sprite)
{
u8 *battler = &gBattleAnimTarget;
- sprite->data[4]++;
- if (sprite->data[4] == 40)
+ sprite->sTimer++;
+ if (sprite->sTimer == 40)
{
- PlaySE(SE_RG_GETTING);
+ PlaySE(SE_RG_BALL_CLICK);
BlendPalettes(0x10000 << sprite->oam.paletteNum, 6, RGB(0, 0, 0));
- sub_81719EC(sprite);
+ MakeCaptureStars(sprite);
}
- else if (sprite->data[4] == 60)
+ else if (sprite->sTimer == 60)
{
BeginNormalPaletteFade(0x10000 << sprite->oam.paletteNum, 2, 6, 0, RGB(0, 0, 0));
}
- else if (sprite->data[4] == 95)
+ else if (sprite->sTimer == 95)
{
- gDoingBattleAnim = 0;
+ gDoingBattleAnim = FALSE;
UpdateOamPriorityInAllHealthboxes(1);
m4aMPlayAllStop();
- PlaySE(MUS_RG_FAN6);
+ PlaySE(MUS_RG_CAUGHT_INTRO);
}
- else if (sprite->data[4] == 315)
+ else if (sprite->sTimer == 315)
{
FreeOamMatrix(gSprites[gBattlerSpriteIds[*battler]].oam.matrixNum);
DestroySprite(&gSprites[gBattlerSpriteIds[*battler]]);
- sprite->data[0] = 0;
- sprite->callback = sub_81718D8;
+
+ sprite->sState = 0;
+ sprite->callback = SpriteCB_Ball_FadeOut;
}
}
-static void sub_81718D8(struct Sprite *sprite)
+#undef sTimer
+#undef sState
+
+#define sState data[0]
+#define sFrame data[0] // re-use
+
+static void SpriteCB_Ball_FadeOut(struct Sprite *sprite)
{
u8 paletteIndex;
- switch (sprite->data[0])
+ switch (sprite->sState)
{
case 0:
sprite->data[1] = 0;
@@ -1216,7 +1349,7 @@ static void sub_81718D8(struct Sprite *sprite)
SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(16, 0));
paletteIndex = IndexOfSpritePaletteTag(sprite->template->paletteTag);
BeginNormalPaletteFade(1 << (paletteIndex + 0x10), 0, 0, 16, RGB(31, 31, 31));
- sprite->data[0]++;
+ sprite->sState++;
break;
case 1:
if (sprite->data[1]++ > 0)
@@ -1225,103 +1358,124 @@ static void sub_81718D8(struct Sprite *sprite)
sprite->data[2]++;
SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(16 - sprite->data[2], sprite->data[2]));
if (sprite->data[2] == 16)
- sprite->data[0]++;
+ sprite->sState++;
}
break;
case 2:
sprite->invisible = TRUE;
- sprite->data[0]++;
+ sprite->sState++;
break;
default:
if (!gPaletteFade.active)
{
SetGpuReg(REG_OFFSET_BLDCNT, 0);
SetGpuReg(REG_OFFSET_BLDALPHA, 0);
- sprite->data[0] = 0;
- sprite->callback = sub_81719C0;
+
+ sprite->sFrame = 0;
+ sprite->callback = DestroySpriteAfterOneFrame;
}
break;
}
}
-static void sub_81719C0(struct Sprite *sprite)
+#undef sState
+#undef sFrame
+
+#define sFrame data[0]
+
+static void DestroySpriteAfterOneFrame(struct Sprite *sprite)
{
- if (sprite->data[0] == 0)
- {
- sprite->data[0] = -1;
- }
+ if (sprite->sFrame == 0)
+ sprite->sFrame = -1;
else
{
FreeSpriteOamMatrix(sprite);
DestroySprite(sprite);
}
}
+#undef sFrame
-static void sub_81719EC(struct Sprite *sprite)
+#define sDuration data[0]
+#define sTargetX data[2]
+#define sTargetY data[4]
+#define sAmplitude data[5]
+
+static void MakeCaptureStars(struct Sprite *sprite)
{
u32 i;
u8 subpriority;
if (sprite->subpriority)
- {
subpriority = sprite->subpriority - 1;
- }
else
{
subpriority = 0;
sprite->subpriority = 1;
}
- sub_8171D60(4);
- for (i = 0; i < 3; i++)
+ LoadBallParticleGfx(BALL_MASTER);
+ for (i = 0; i < ARRAY_COUNT(sCaptureStars); i++)
{
- u8 spriteId = CreateSprite(&gBallParticlesSpriteTemplates[4], sprite->pos1.x, sprite->pos1.y, subpriority);
+ u8 spriteId = CreateSprite(&sBallParticleSpriteTemplates[4], sprite->pos1.x, sprite->pos1.y, subpriority);
if (spriteId != MAX_SPRITES)
{
- gSprites[spriteId].data[0] = 24;
- gSprites[spriteId].data[2] = sprite->pos1.x + sBallCaptureSuccessStarData[i].xOffset;
- gSprites[spriteId].data[4] = sprite->pos1.y + sBallCaptureSuccessStarData[i].yOffset;
- gSprites[spriteId].data[5] = sBallCaptureSuccessStarData[i].unk2;
+ gSprites[spriteId].sDuration = 24;
+ gSprites[spriteId].sTargetX = sprite->pos1.x + sCaptureStars[i].xOffset;
+ gSprites[spriteId].sTargetY = sprite->pos1.y + sCaptureStars[i].yOffset;
+ gSprites[spriteId].sAmplitude = sCaptureStars[i].amplitude;
InitAnimArcTranslation(&gSprites[spriteId]);
- gSprites[spriteId].callback = sub_8171AAC;
- StartSpriteAnim(&gSprites[spriteId], gBallParticleAnimNums[4]);
+ gSprites[spriteId].callback = SpriteCB_CaptureStar_Flicker;
+ StartSpriteAnim(&gSprites[spriteId], sBallParticleAnimNums[BALL_MASTER]);
}
}
}
-static void sub_8171AAC(struct Sprite *sprite)
+#undef sDuration
+#undef sTargetX
+#undef sTargetY
+#undef sAmplitude
+
+static void SpriteCB_CaptureStar_Flicker(struct Sprite *sprite)
{
sprite->invisible = !sprite->invisible;
if (TranslateAnimHorizontalArc(sprite))
DestroySprite(sprite);
}
-static void sub_8171AE4(struct Sprite *sprite)
+#define sFrame data[0]
+#define sOffsetY data[1]
+
+// Poké Ball didn't catch - starts:
+// - Ball particle animations
+// - Wild mon fade to normal color
+// - Wild mon emerge from Poké Ball
+static void SpriteCB_Ball_Release_Step(struct Sprite *sprite)
{
u8 ballId;
StartSpriteAnim(sprite, 1);
StartSpriteAffineAnim(sprite, 0);
- sprite->callback = sub_8171BAC;
+ sprite->callback = SpriteCB_Ball_Release_Wait;
ballId = ItemIdToBallId(gLastUsedItem);
switch (ballId)
{
case 0 ... POKEBALL_COUNT - 1:
AnimateBallOpenParticles(sprite->pos1.x, sprite->pos1.y - 5, 1, 28, ballId);
- LaunchBallFadeMonTask(1, gBattleAnimTarget, 14, ballId);
+ LaunchBallFadeMonTask(TRUE, gBattleAnimTarget, 14, ballId);
break;
}
+ // Animate Pokémon emerging from Poké Ball
gSprites[gBattlerSpriteIds[gBattleAnimTarget]].invisible = FALSE;
StartSpriteAffineAnim(&gSprites[gBattlerSpriteIds[gBattleAnimTarget]], 1);
AnimateSprite(&gSprites[gBattlerSpriteIds[gBattleAnimTarget]]);
- gSprites[gBattlerSpriteIds[gBattleAnimTarget]].data[1] = 0x1000;
+ gSprites[gBattlerSpriteIds[gBattleAnimTarget]].sOffsetY = 4096;
}
-static void sub_8171BAC(struct Sprite *sprite)
+static void SpriteCB_Ball_Release_Wait(struct Sprite *sprite)
{
- int next = FALSE;
+ bool8 released = FALSE;
if (sprite->animEnded)
sprite->invisible = TRUE;
@@ -1329,28 +1483,31 @@ static void sub_8171BAC(struct Sprite *sprite)
if (gSprites[gBattlerSpriteIds[gBattleAnimTarget]].affineAnimEnded)
{
StartSpriteAffineAnim(&gSprites[gBattlerSpriteIds[gBattleAnimTarget]], 0);
- next = TRUE;
+ released = TRUE;
}
else
{
- gSprites[gBattlerSpriteIds[gBattleAnimTarget]].data[1] -= 288;
- gSprites[gBattlerSpriteIds[gBattleAnimTarget]].pos2.y = gSprites[gBattlerSpriteIds[gBattleAnimTarget]].data[1] >> 8;
+ gSprites[gBattlerSpriteIds[gBattleAnimTarget]].sOffsetY -= 288;
+ gSprites[gBattlerSpriteIds[gBattleAnimTarget]].pos2.y = gSprites[gBattlerSpriteIds[gBattleAnimTarget]].sOffsetY >> 8;
}
- if (sprite->animEnded && next)
+ if (sprite->animEnded && released)
{
gSprites[gBattlerSpriteIds[gBattleAnimTarget]].pos2.y = 0;
- gSprites[gBattlerSpriteIds[gBattleAnimTarget]].invisible = gBattleSpritesDataPtr->animationData->field_9_x2;
- sprite->data[0] = 0;
- sprite->callback = sub_81719C0;
+ gSprites[gBattlerSpriteIds[gBattleAnimTarget]].invisible = gBattleSpritesDataPtr->animationData->wildMonInvisible;
+ sprite->sFrame = 0;
+ sprite->callback = DestroySpriteAfterOneFrame;
gDoingBattleAnim = 0;
UpdateOamPriorityInAllHealthboxes(1);
}
}
-static void sub_8171CAC(struct Sprite *sprite)
+#undef sFrame
+#undef sOffsetY
+
+static void SpriteCB_Ball_Block(struct Sprite *sprite)
{
- int i;
+ s32 i;
sprite->pos1.x += sprite->pos2.x;
sprite->pos1.y += sprite->pos2.y;
@@ -1359,36 +1516,47 @@ static void sub_8171CAC(struct Sprite *sprite)
for (i = 0; i < 6; i++)
sprite->data[i] = 0;
- sprite->callback = sub_8171CE8;
+ sprite->callback = SpriteCB_Ball_Block_Step;
}
-static void sub_8171CE8(struct Sprite *sprite)
+#define sDy data[0]
+#define sDx data[1]
+
+#define sFrame data[0] // re-use
+
+// Poké Ball moves down off screen after being blocked. The x-speed oscillates.
+static void SpriteCB_Ball_Block_Step(struct Sprite *sprite)
{
- s16 var0 = sprite->data[0] + 0x800;
- s16 var1 = sprite->data[1] + 0x680;
- sprite->pos2.x -= var1 >> 8;
- sprite->pos2.y += var0 >> 8;
- sprite->data[0] = (sprite->data[0] + 0x800) & 0xFF;
- sprite->data[1] = (sprite->data[1] + 0x680) & 0xFF;
+ s16 dy = sprite->sDy + 0x800;
+ s16 dx = sprite->sDx + 0x680;
+ sprite->pos2.x -= dx >> 8;
+ sprite->pos2.y += dy >> 8;
+ sprite->sDy = (sprite->sDy + 0x800) & 0xFF;
+ sprite->sDx = (sprite->sDx + 0x680) & 0xFF;
if (sprite->pos1.y + sprite->pos2.y > 160
|| sprite->pos1.x + sprite->pos2.x < -8)
{
- sprite->data[0] = 0;
- sprite->callback = sub_81719C0;
+ sprite->sFrame = 0;
+ sprite->callback = DestroySpriteAfterOneFrame;
gDoingBattleAnim = 0;
UpdateOamPriorityInAllHealthboxes(1);
}
}
-static void sub_8171D60(u8 ballId)
+#undef sDy
+#undef sDx
+
+#undef sFrame
+
+static void LoadBallParticleGfx(u8 ballId)
{
u8 taskId;
- if (GetSpriteTileStartByTag(gBallParticleSpritesheets[ballId].tag) == 0xFFFF)
+ if (GetSpriteTileStartByTag(sBallParticleSpriteSheets[ballId].tag) == 0xFFFF)
{
- LoadCompressedSpriteSheetUsingHeap(&gBallParticleSpritesheets[ballId]);
- LoadCompressedSpritePaletteUsingHeap(&gBallParticlePalettes[ballId]);
+ LoadCompressedSpriteSheetUsingHeap(&sBallParticleSpriteSheets[ballId]);
+ LoadCompressedSpritePaletteUsingHeap(&sBallParticlePalettes[ballId]);
}
}
@@ -1396,22 +1564,22 @@ u8 AnimateBallOpenParticles(u8 x, u8 y, u8 priority, u8 subpriority, u8 ballId)
{
u8 taskId;
- sub_8171D60(ballId);
- taskId = CreateTask(gBallParticleAnimationFuncs[ballId], 5);
+ LoadBallParticleGfx(ballId);
+ taskId = CreateTask(sBallParticleAnimationFuncs[ballId], 5);
gTasks[taskId].data[1] = x;
gTasks[taskId].data[2] = y;
gTasks[taskId].data[3] = priority;
gTasks[taskId].data[4] = subpriority;
gTasks[taskId].data[15] = ballId;
- PlaySE(SE_BOWA2);
+ PlaySE(SE_BALL_OPEN);
return taskId;
}
-void sub_8171E20(void)
+static void IncrBallParticleCount(void)
{
if (gMain.inBattle)
- gBattleSpritesDataPtr->animationData->field_A++;
+ gBattleSpritesDataPtr->animationData->numBallParticles++;
}
static void PokeBallOpenParticleAnimation(u8 taskId)
@@ -1430,11 +1598,11 @@ static void PokeBallOpenParticleAnimation(u8 taskId)
priority = gTasks[taskId].data[3];
subpriority = gTasks[taskId].data[4];
- spriteId = CreateSprite(&gBallParticlesSpriteTemplates[ballId], x, y, subpriority);
+ spriteId = CreateSprite(&sBallParticleSpriteTemplates[ballId], x, y, subpriority);
if (spriteId != MAX_SPRITES)
{
- sub_8171E20();
- StartSpriteAnim(&gSprites[spriteId], gBallParticleAnimNums[ballId]);
+ IncrBallParticleCount();
+ StartSpriteAnim(&gSprites[spriteId], sBallParticleAnimNums[ballId]);
gSprites[spriteId].callback = PokeBallOpenParticleAnimation_Step1;
gSprites[spriteId].oam.priority = priority;
@@ -1489,11 +1657,11 @@ static void TimerBallOpenParticleAnimation(u8 taskId)
for (i = 0; i < 8; i++)
{
- spriteId = CreateSprite(&gBallParticlesSpriteTemplates[ballId], x, y, subpriority);
+ spriteId = CreateSprite(&sBallParticleSpriteTemplates[ballId], x, y, subpriority);
if (spriteId != MAX_SPRITES)
{
- sub_8171E20();
- StartSpriteAnim(&gSprites[spriteId], gBallParticleAnimNums[ballId]);
+ IncrBallParticleCount();
+ StartSpriteAnim(&gSprites[spriteId], sBallParticleAnimNums[ballId]);
gSprites[spriteId].callback = FanOutBallOpenParticles_Step1;
gSprites[spriteId].oam.priority = priority;
gSprites[spriteId].data[0] = i * 32;
@@ -1523,11 +1691,11 @@ static void DiveBallOpenParticleAnimation(u8 taskId)
for (i = 0; i < 8; i++)
{
- spriteId = CreateSprite(&gBallParticlesSpriteTemplates[ballId], x, y, subpriority);
+ spriteId = CreateSprite(&sBallParticleSpriteTemplates[ballId], x, y, subpriority);
if (spriteId != MAX_SPRITES)
{
- sub_8171E20();
- StartSpriteAnim(&gSprites[spriteId], gBallParticleAnimNums[ballId]);
+ IncrBallParticleCount();
+ StartSpriteAnim(&gSprites[spriteId], sBallParticleAnimNums[ballId]);
gSprites[spriteId].callback = FanOutBallOpenParticles_Step1;
gSprites[spriteId].oam.priority = priority;
gSprites[spriteId].data[0] = i * 32;
@@ -1558,11 +1726,11 @@ static void SafariBallOpenParticleAnimation(u8 taskId)
for (i = 0; i < 8; i++)
{
- spriteId = CreateSprite(&gBallParticlesSpriteTemplates[ballId], x, y, subpriority);
+ spriteId = CreateSprite(&sBallParticleSpriteTemplates[ballId], x, y, subpriority);
if (spriteId != MAX_SPRITES)
{
- sub_8171E20();
- StartSpriteAnim(&gSprites[spriteId], gBallParticleAnimNums[ballId]);
+ IncrBallParticleCount();
+ StartSpriteAnim(&gSprites[spriteId], sBallParticleAnimNums[ballId]);
gSprites[spriteId].callback = FanOutBallOpenParticles_Step1;
gSprites[spriteId].oam.priority = priority;
gSprites[spriteId].data[0] = i * 32;
@@ -1593,11 +1761,11 @@ static void UltraBallOpenParticleAnimation(u8 taskId)
for (i = 0; i < 10; i++)
{
- spriteId = CreateSprite(&gBallParticlesSpriteTemplates[ballId], x, y, subpriority);
+ spriteId = CreateSprite(&sBallParticleSpriteTemplates[ballId], x, y, subpriority);
if (spriteId != MAX_SPRITES)
{
- sub_8171E20();
- StartSpriteAnim(&gSprites[spriteId], gBallParticleAnimNums[ballId]);
+ IncrBallParticleCount();
+ StartSpriteAnim(&gSprites[spriteId], sBallParticleAnimNums[ballId]);
gSprites[spriteId].callback = FanOutBallOpenParticles_Step1;
gSprites[spriteId].oam.priority = priority;
gSprites[spriteId].data[0] = i * 25;
@@ -1634,11 +1802,11 @@ static void GreatBallOpenParticleAnimation(u8 taskId)
for (i = 0; i < 8; i++)
{
- spriteId = CreateSprite(&gBallParticlesSpriteTemplates[ballId], x, y, subpriority);
+ spriteId = CreateSprite(&sBallParticleSpriteTemplates[ballId], x, y, subpriority);
if (spriteId != MAX_SPRITES)
{
- sub_8171E20();
- StartSpriteAnim(&gSprites[spriteId], gBallParticleAnimNums[ballId]);
+ IncrBallParticleCount();
+ StartSpriteAnim(&gSprites[spriteId], sBallParticleAnimNums[ballId]);
gSprites[spriteId].callback = FanOutBallOpenParticles_Step1;
gSprites[spriteId].oam.priority = priority;
gSprites[spriteId].data[0] = i * 32;
@@ -1684,11 +1852,11 @@ static void RepeatBallOpenParticleAnimation(u8 taskId)
for (i = 0; i < POKEBALL_COUNT; i++)
{
- spriteId = CreateSprite(&gBallParticlesSpriteTemplates[ballId], x, y, subpriority);
+ spriteId = CreateSprite(&sBallParticleSpriteTemplates[ballId], x, y, subpriority);
if (spriteId != MAX_SPRITES)
{
- sub_8171E20();
- StartSpriteAnim(&gSprites[spriteId], gBallParticleAnimNums[ballId]);
+ IncrBallParticleCount();
+ StartSpriteAnim(&gSprites[spriteId], sBallParticleAnimNums[ballId]);
gSprites[spriteId].callback = RepeatBallOpenParticleAnimation_Step1;
gSprites[spriteId].oam.priority = priority;
gSprites[spriteId].data[0] = i * 21;
@@ -1728,11 +1896,11 @@ static void MasterBallOpenParticleAnimation(u8 taskId)
{
for (i = 0; i < 8; i++)
{
- spriteId = CreateSprite(&gBallParticlesSpriteTemplates[ballId], x, y, subpriority);
+ spriteId = CreateSprite(&sBallParticleSpriteTemplates[ballId], x, y, subpriority);
if (spriteId != MAX_SPRITES)
{
- sub_8171E20();
- StartSpriteAnim(&gSprites[spriteId], gBallParticleAnimNums[ballId]);
+ IncrBallParticleCount();
+ StartSpriteAnim(&gSprites[spriteId], sBallParticleAnimNums[ballId]);
gSprites[spriteId].callback = FanOutBallOpenParticles_Step1;
gSprites[spriteId].oam.priority = priority;
gSprites[spriteId].data[0] = i * 32;
@@ -1772,11 +1940,11 @@ static void PremierBallOpenParticleAnimation(u8 taskId)
for (i = 0; i < 8; i++)
{
- spriteId = CreateSprite(&gBallParticlesSpriteTemplates[ballId], x, y, subpriority);
+ spriteId = CreateSprite(&sBallParticleSpriteTemplates[ballId], x, y, subpriority);
if (spriteId != MAX_SPRITES)
{
- sub_8171E20();
- StartSpriteAnim(&gSprites[spriteId], gBallParticleAnimNums[ballId]);
+ IncrBallParticleCount();
+ StartSpriteAnim(&gSprites[spriteId], sBallParticleAnimNums[ballId]);
gSprites[spriteId].callback = PremierBallOpenParticleAnimation_Step1;
gSprites[spriteId].oam.priority = priority;
gSprites[spriteId].data[0] = i * 32;
@@ -1802,7 +1970,7 @@ static void PremierBallOpenParticleAnimation_Step1(struct Sprite *sprite)
static void DestroyBallOpenAnimationParticle(struct Sprite *sprite)
{
- int i, j;
+ s32 i, j;
if (!gMain.inBattle)
{
@@ -1813,12 +1981,12 @@ static void DestroyBallOpenAnimationParticle(struct Sprite *sprite)
}
else
{
- gBattleSpritesDataPtr->animationData->field_A--;
- if (gBattleSpritesDataPtr->animationData->field_A == 0)
+ gBattleSpritesDataPtr->animationData->numBallParticles--;
+ if (gBattleSpritesDataPtr->animationData->numBallParticles == 0)
{
for (i = 0; i < POKEBALL_COUNT; i++)
{
- if (FuncIsActiveTask(gBallParticleAnimationFuncs[i]) == TRUE)
+ if (FuncIsActiveTask(sBallParticleAnimationFuncs[i]) == TRUE)
break;
}
@@ -1826,8 +1994,8 @@ static void DestroyBallOpenAnimationParticle(struct Sprite *sprite)
{
for (j = 0; j < POKEBALL_COUNT; j++)
{
- FreeSpriteTilesByTag(gBallParticleSpritesheets[j].tag);
- FreeSpritePaletteByTag(gBallParticlePalettes[j].tag);
+ FreeSpriteTilesByTag(sBallParticleSpriteSheets[j].tag);
+ FreeSpritePaletteByTag(sBallParticlePalettes[j].tag);
}
}
@@ -1840,70 +2008,78 @@ static void DestroyBallOpenAnimationParticle(struct Sprite *sprite)
}
}
-u8 LaunchBallFadeMonTask(u8 unfadeLater, u8 battler, u32 selectedPalettes, u8 ballId)
+#define tCoeff data[0]
+#define tdCoeff data[1]
+#define tTimer data[2]
+#define tPalOffset data[3]
+#define tPaletteLo data[10]
+#define tPaletteHi data[11]
+#define tBallId data[15]
+
+u8 LaunchBallFadeMonTask(bool8 unfadeLater, u8 battler, u32 selectedPalettes, u8 ballId)
{
u8 taskId;
- taskId = CreateTask(sub_8172AB0, 5);
- gTasks[taskId].data[15] = ballId;
- gTasks[taskId].data[3] = battler;
- gTasks[taskId].data[10] = selectedPalettes;
- gTasks[taskId].data[11] = selectedPalettes >> 16;
+ taskId = CreateTask(Task_FadeMon_ToBallColor, 5);
+ gTasks[taskId].tBallId = ballId;
+ gTasks[taskId].tPalOffset = battler;
+ gTasks[taskId].tPaletteLo = selectedPalettes;
+ gTasks[taskId].tPaletteHi = selectedPalettes >> 16;
if (!unfadeLater)
{
BlendPalette(battler * 16 + 0x100, 16, 0, gBallOpenFadeColors[ballId]);
- gTasks[taskId].data[1] = 1;
+ gTasks[taskId].tdCoeff = 1;
}
else
{
BlendPalette(battler * 16 + 0x100, 16, 16, gBallOpenFadeColors[ballId]);
- gTasks[taskId].data[0] = 16;
- gTasks[taskId].data[1] = -1;
- gTasks[taskId].func = sub_8172B40;
+ gTasks[taskId].tCoeff = 16;
+ gTasks[taskId].tdCoeff = -1;
+ gTasks[taskId].func = Task_FadeMon_ToNormal;
}
BeginNormalPaletteFade(selectedPalettes, 0, 0, 16, RGB(31, 31, 31));
return taskId;
}
-static void sub_8172AB0(u8 taskId)
+static void Task_FadeMon_ToBallColor(u8 taskId)
{
- u8 ballId = gTasks[taskId].data[15];
+ u8 ballId = gTasks[taskId].tBallId;
- if (gTasks[taskId].data[2] <= 16)
+ if (gTasks[taskId].tTimer <= 16)
{
- BlendPalette(gTasks[taskId].data[3] * 16 + 0x100, 16, gTasks[taskId].data[0], gBallOpenFadeColors[ballId]);
- gTasks[taskId].data[0] += gTasks[taskId].data[1];
- gTasks[taskId].data[2]++;
+ BlendPalette(gTasks[taskId].tPalOffset * 16 + 0x100, 16, gTasks[taskId].tCoeff, gBallOpenFadeColors[ballId]);
+ gTasks[taskId].tCoeff += gTasks[taskId].tdCoeff;
+ gTasks[taskId].tTimer++;
}
else if (!gPaletteFade.active)
{
- u32 selectedPalettes = (u16)gTasks[taskId].data[10] | ((u16)gTasks[taskId].data[11] << 16);
- BeginNormalPaletteFade(selectedPalettes, 0, 16, 0, RGB(31, 31, 31));
+ u32 selectedPalettes = (u16)gTasks[taskId].tPaletteLo | ((u16)gTasks[taskId].tPaletteHi << 16);
+ BeginNormalPaletteFade(selectedPalettes, 0, 16, 0, RGB_WHITE);
DestroyTask(taskId);
}
}
-static void sub_8172B40(u8 taskId)
+static void Task_FadeMon_ToNormal(u8 taskId)
{
if (!gPaletteFade.active)
{
- u32 selectedPalettes = (u16)gTasks[taskId].data[10] | ((u16)gTasks[taskId].data[11] << 16);
- BeginNormalPaletteFade(selectedPalettes, 0, 16, 0, RGB(31, 31, 31));
- gTasks[taskId].func = sub_8172B90;
+ u32 selectedPalettes = (u16)gTasks[taskId].tPaletteLo | ((u16)gTasks[taskId].tPaletteHi << 16);
+ BeginNormalPaletteFade(selectedPalettes, 0, 16, 0, RGB_WHITE);
+ gTasks[taskId].func = Task_FadeMon_ToNormal_Step;
}
}
-static void sub_8172B90(u8 taskId)
+static void Task_FadeMon_ToNormal_Step(u8 taskId)
{
- u8 ballId = gTasks[taskId].data[15];
+ u8 ballId = gTasks[taskId].tBallId;
- if (gTasks[taskId].data[2] <= 16)
+ if (gTasks[taskId].tTimer <= 16)
{
- BlendPalette(gTasks[taskId].data[3] * 16 + 0x100, 16, gTasks[taskId].data[0], gBallOpenFadeColors[ballId]);
- gTasks[taskId].data[0] += gTasks[taskId].data[1];
- gTasks[taskId].data[2]++;
+ BlendPalette(gTasks[taskId].tPalOffset * 16 + 0x100, 16, gTasks[taskId].tCoeff, gBallOpenFadeColors[ballId]);
+ gTasks[taskId].tCoeff += gTasks[taskId].tdCoeff;
+ gTasks[taskId].tTimer++;
}
else
{
@@ -1911,6 +2087,14 @@ static void sub_8172B90(u8 taskId)
}
}
+#undef tCoeff
+#undef tdCoeff
+#undef tTimer
+#undef tPalOffset
+#undef tPaletteLo
+#undef tPaletteHi
+#undef tBallId
+
// arg0: TRUE to swap to mon, FALSE to swap to substitute
void AnimTask_SwapMonSpriteToFromSubstitute(u8 taskId)
{
@@ -2016,15 +2200,26 @@ void AnimTask_SetTargetToEffectBattler(u8 taskId)
DestroyAnimVisualTask(taskId);
}
-void sub_8172EF0(u8 battler, struct Pokemon *mon)
+#define tBattler data[0]
+#define tStarMove data[1]
+#define tStarTimer data[10]
+#define tStarIdx data[11]
+#define tNumStars data[12]
+#define tTimer data[13]
+
+#define sTaskId data[0]
+#define sPhase data[1] // For encircling stars
+#define sTimer data[1] // For diagnoal stars
+
+void TryShinyAnimation(u8 battler, struct Pokemon *mon)
{
- int isShiny;
+ bool8 isShiny;
u32 otId, personality;
u32 shinyValue;
- u8 taskId1, taskId2;
+ u8 taskCirc, taskDgnl;
- isShiny = 0;
- gBattleSpritesDataPtr->healthBoxesData[battler].flag_x80 = 1;
+ isShiny = FALSE;
+ gBattleSpritesDataPtr->healthBoxesData[battler].triedShinyMonAnim = TRUE;
otId = GetMonData(mon, MON_DATA_OT_ID);
personality = GetMonData(mon, MON_DATA_PERSONALITY);
@@ -2042,125 +2237,126 @@ void sub_8172EF0(u8 battler, struct Pokemon *mon)
LoadCompressedSpritePaletteUsingHeap(&gBattleAnimPaletteTable[ANIM_TAG_GOLD_STARS - ANIM_SPRITES_START]);
}
- taskId1 = CreateTask(sub_8172FEC, 10);
- taskId2 = CreateTask(sub_8172FEC, 10);
- gTasks[taskId1].data[0] = battler;
- gTasks[taskId2].data[0] = battler;
- gTasks[taskId1].data[1] = 0;
- gTasks[taskId2].data[1] = 1;
+ taskCirc = CreateTask(Task_ShinyStars, 10);
+ taskDgnl = CreateTask(Task_ShinyStars, 10);
+ gTasks[taskCirc].tBattler = battler;
+ gTasks[taskDgnl].tBattler = battler;
+ gTasks[taskCirc].tStarMove = SHINY_STAR_ENCIRCLE;
+ gTasks[taskDgnl].tStarMove = SHINY_STAR_DIAGONAL;
return;
}
}
- gBattleSpritesDataPtr->healthBoxesData[battler].field_1_x1 = 1;
+ gBattleSpritesDataPtr->healthBoxesData[battler].finishedShinyMonAnim = TRUE;
}
-static void sub_8172FEC(u8 taskId)
+static void Task_ShinyStars(u8 taskId)
{
u8 battler;
u8 x, y;
u8 spriteId;
- u16 counter;
- s16 state;
+ u16 timer;
+ s16 starIdx;
u8 pan;
- if (gTasks[taskId].data[13] < 60)
+ if (gTasks[taskId].tTimer < 60)
{
- gTasks[taskId].data[13]++;
+ gTasks[taskId].tTimer++;
return;
}
- if (gBattleSpritesDataPtr->animationData->field_A)
+ // Wait until the ball particles have despawned
+ if (gBattleSpritesDataPtr->animationData->numBallParticles)
return;
- counter = gTasks[taskId].data[10]++;
- if (counter & 3)
+ timer = gTasks[taskId].tStarTimer++;
+ if (timer % 4) // Create sprite 1 of every 4 frames
return;
- battler = gTasks[taskId].data[0];
- x = GetBattlerSpriteCoord(battler, 0);
- y = GetBattlerSpriteCoord(battler, 1);
- state = gTasks[taskId].data[11];
- if (state == 0)
+ battler = gTasks[taskId].tBattler;
+ x = GetBattlerSpriteCoord(battler, BATTLER_COORD_X);
+ y = GetBattlerSpriteCoord(battler, BATTLER_COORD_Y);
+
+ starIdx = gTasks[taskId].tStarIdx;
+ if (starIdx == 0) // Big star
{
spriteId = CreateSprite(&gWishStarSpriteTemplate, x, y, 5);
}
- else if (state >= 0 && gTasks[taskId].data[11] < 4)
+ else if (starIdx >= 0 && gTasks[taskId].tStarIdx < 4) // Medium star
{
spriteId = CreateSprite(&gMiniTwinklingStarSpriteTemplate, x, y, 5);
gSprites[spriteId].oam.tileNum += 4;
}
- else
+ else // Small star
{
spriteId = CreateSprite(&gMiniTwinklingStarSpriteTemplate, x, y, 5);
gSprites[spriteId].oam.tileNum += 5;
}
- if (gTasks[taskId].data[1] == 0)
+ if (gTasks[taskId].tStarMove == SHINY_STAR_ENCIRCLE)
{
- gSprites[spriteId].callback = sub_81731FC;
+ gSprites[spriteId].callback = SpriteCB_ShinyStars_Encircle;
}
else
{
- gSprites[spriteId].callback = sub_8173250;
+ gSprites[spriteId].callback = SpriteCB_ShinyStars_Diagonal;
gSprites[spriteId].pos2.x = -32;
gSprites[spriteId].pos2.y = 32;
gSprites[spriteId].invisible = TRUE;
- if (gTasks[taskId].data[11] == 0)
+ if (gTasks[taskId].tStarIdx == 0)
{
if (GetBattlerSide(battler) == B_SIDE_PLAYER)
pan = -64;
else
pan = 63;
- PlaySE12WithPanning(SE_REAPOKE, pan);
+ PlaySE12WithPanning(SE_SHINY, pan);
}
}
- gSprites[spriteId].data[0] = taskId;
- gTasks[taskId].data[11]++;
+ gSprites[spriteId].sTaskId = taskId;
+ gTasks[taskId].tStarIdx++;
if (spriteId != MAX_SPRITES)
- gTasks[taskId].data[12]++;
+ gTasks[taskId].tNumStars++;
- if (gTasks[taskId].data[11] == 5)
- gTasks[taskId].func = sub_81731B0;
+ if (gTasks[taskId].tStarIdx == 5)
+ gTasks[taskId].func = Task_ShinyStars_Wait;
}
-static void sub_81731B0(u8 taskId)
+static void Task_ShinyStars_Wait(u8 taskId)
{
u8 battler;
- if (gTasks[taskId].data[12] == 0)
+ if (gTasks[taskId].tNumStars == 0)
{
- if (gTasks[taskId].data[1] == 1)
+ if (gTasks[taskId].tStarMove == SHINY_STAR_DIAGONAL)
{
- battler = gTasks[taskId].data[0];
- gBattleSpritesDataPtr->healthBoxesData[battler].field_1_x1 = 1;
+ battler = gTasks[taskId].tBattler;
+ gBattleSpritesDataPtr->healthBoxesData[battler].finishedShinyMonAnim = TRUE;
}
DestroyTask(taskId);
}
}
-static void sub_81731FC(struct Sprite *sprite)
+static void SpriteCB_ShinyStars_Encircle(struct Sprite *sprite)
{
- sprite->pos2.x = Sin(sprite->data[1], 24);
- sprite->pos2.y = Cos(sprite->data[1], 24);
- sprite->data[1] += 12;
- if (sprite->data[1] > 0xFF)
+ sprite->pos2.x = Sin(sprite->sPhase, 24);
+ sprite->pos2.y = Cos(sprite->sPhase, 24);
+ sprite->sPhase += 12;
+ if (sprite->sPhase > 255)
{
- gTasks[sprite->data[0]].data[12]--;
+ gTasks[sprite->sTaskId].tNumStars--;
FreeSpriteOamMatrix(sprite);
DestroySprite(sprite);
}
}
-static void sub_8173250(struct Sprite *sprite)
+static void SpriteCB_ShinyStars_Diagonal(struct Sprite *sprite)
{
- if (sprite->data[1] < 4)
- {
- sprite->data[1]++;
- }
+ // Delayed four frames to de-sync from encircling stars
+ if (sprite->sTimer < 4)
+ sprite->sTimer++;
else
{
sprite->invisible = FALSE;
@@ -2168,13 +2364,24 @@ static void sub_8173250(struct Sprite *sprite)
sprite->pos2.y -= 5;
if (sprite->pos2.x > 32)
{
- gTasks[sprite->data[0]].data[12]--;
+ gTasks[sprite->sTaskId].tNumStars--;
FreeSpriteOamMatrix(sprite);
DestroySprite(sprite);
}
}
}
+#undef tBattler
+#undef tStarMove
+#undef tStarTimer
+#undef tStarIdx
+#undef tNumStars
+#undef tTimer
+
+#undef sTaskId
+#undef sPhase
+#undef sTimer
+
void AnimTask_LoadPokeblockGfx(u8 taskId)
{
u8 paletteIndex;
@@ -2192,35 +2399,46 @@ void AnimTask_FreePokeblockGfx(u8 taskId)
DestroyAnimVisualTask(taskId);
}
-static void sub_817330C(struct Sprite *sprite)
+#define sDuration data[0]
+#define sTargetX data[2]
+#define sTargetY data[4]
+#define sAmplitude data[5]
+
+static void SpriteCB_PokeBlock_Throw(struct Sprite *sprite)
{
InitSpritePosToAnimAttacker(sprite, 0);
- sprite->data[0] = 30;
- sprite->data[2] = GetBattlerSpriteCoord(GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT), 0) + gBattleAnimArgs[2];
- sprite->data[4] = GetBattlerSpriteCoord(GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT), 1) + gBattleAnimArgs[3];
- sprite->data[5] = -32;
+ sprite->sDuration = 30;
+ sprite->sTargetX = GetBattlerSpriteCoord(GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT), BATTLER_COORD_X) + gBattleAnimArgs[2];
+ sprite->sTargetY = GetBattlerSpriteCoord(GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT), BATTLER_COORD_Y) + gBattleAnimArgs[3];
+ sprite->sAmplitude = -32;
InitAnimArcTranslation(sprite);
- gSprites[gBattlerSpriteIds[gBattleAnimAttacker]].callback = sub_8039E84;
- sprite->callback = sub_817339C;
+ gSprites[gBattlerSpriteIds[gBattleAnimAttacker]].callback = SpriteCB_TrainerThrowObject;
+ sprite->callback = SpriteCB_PokeBlock_LiftArm;
}
-static void sub_817339C(struct Sprite *sprite)
+#undef sDuration
+#undef sTargetX
+#undef sTargetY
+#undef sAmplitude
+
+static void SpriteCB_PokeBlock_LiftArm(struct Sprite *sprite)
{
if (gSprites[gBattlerSpriteIds[gBattleAnimAttacker]].animCmdIndex == 1)
- sprite->callback = sub_81733D4;
+ sprite->callback = SpriteCB_PokeBlock_Arc;
}
-static void sub_81733D4(struct Sprite *sprite)
+static void SpriteCB_PokeBlock_Arc(struct Sprite *sprite)
{
if (TranslateAnimHorizontalArc(sprite))
{
sprite->data[0] = 0;
sprite->invisible = TRUE;
- sprite->callback = sub_8173400;
+ sprite->callback = SpriteCB_ThrowPokeBlock_Free;
}
}
-static void sub_8173400(struct Sprite *sprite)
+// Destroy after end of player animation
+static void SpriteCB_ThrowPokeBlock_Free(struct Sprite *sprite)
{
if (gSprites[gBattlerSpriteIds[gBattleAnimAttacker]].animEnded)
{
diff --git a/src/battle_anim_utility_funcs.c b/src/battle_anim_utility_funcs.c
index dcef7d483..9790cf9ea 100644
--- a/src/battle_anim_utility_funcs.c
+++ b/src/battle_anim_utility_funcs.c
@@ -318,7 +318,7 @@ void AnimTask_DrawFallingWhiteLinesOnAttacker(u8 taskId)
if (IsContest())
{
- species = gContestResources->field_18->species;
+ species = gContestResources->moveAnim->species;
}
else
{
@@ -440,7 +440,7 @@ static void sub_8116F04(u8 taskId)
if (IsContest())
{
- sAnimStatsChangeData->species = gContestResources->field_18->species;
+ sAnimStatsChangeData->species = gContestResources->moveAnim->species;
}
else
{
@@ -535,9 +535,9 @@ static void sub_81170EC(u8 taskId)
gTasks[taskId].func = sub_81172EC;
if (sAnimStatsChangeData->data[0] == 0)
- PlaySE12WithPanning(SE_W287, BattleAnimAdjustPanning2(-64));
+ PlaySE12WithPanning(SE_M_STAT_INCREASE, BattleAnimAdjustPanning2(-64));
else
- PlaySE12WithPanning(SE_W287B, BattleAnimAdjustPanning2(-64));
+ PlaySE12WithPanning(SE_M_STAT_DECREASE, BattleAnimAdjustPanning2(-64));
}
static void sub_81172EC(u8 taskId)
@@ -569,7 +569,7 @@ static void sub_81172EC(u8 taskId)
if (gTasks[taskId].data[12] == 0)
{
sub_80A477C(0);
- gTasks[taskId].data[15]++;;
+ gTasks[taskId].data[15]++;
}
}
break;
@@ -810,7 +810,7 @@ void sub_8117854(u8 taskId, int unused, u16 arg2, u8 battler1, u8 arg4, u8 arg5,
if (IsContest())
{
- species = gContestResources->field_18->species;
+ species = gContestResources->moveAnim->species;
}
else
{
diff --git a/src/battle_anim_water.c b/src/battle_anim_water.c
index 5810b6bdc..12f37dbba 100644
--- a/src/battle_anim_water.c
+++ b/src/battle_anim_water.c
@@ -52,7 +52,7 @@ static void CreateWaterSpoutLaunchDroplets(struct Task*, u8);
static void CreateWaterSpoutRainDroplet(struct Task*, u8);
static void AnimTask_WaterSport_Step(u8);
static void CreateWaterSportDroplet(struct Task*);
-static void CreateWaterPulseRingBubbles(struct Sprite*, int, int);
+static void CreateWaterPulseRingBubbles(struct Sprite*, s32, s32);
// Both unused
const u8 gUnknown_8593C80[] = INCBIN_U8("graphics/unknown/unknown_593C80.4bpp");
@@ -624,98 +624,24 @@ void AnimTask_RotateAuroraRingColors(u8 taskId)
gTasks[taskId].func = AnimTask_RotateAuroraRingColors_Step;
}
-#ifdef NONMATCHING
static void AnimTask_RotateAuroraRingColors_Step(u8 taskId)
{
int i;
u16 palIndex;
- u16 *palPtr1;
- u16 *palPtr2;
- u16 rgbBuffer;
if (++gTasks[taskId].data[10] == 3)
{
+ u16 tempPlt;
gTasks[taskId].data[10] = 0;
palIndex = gTasks[taskId].data[2] + 1;
- palPtr1 = &gPlttBufferFaded[palIndex];
- rgbBuffer = *palPtr1;
- palPtr2 = &palPtr1[1];
- for (i = 0; i < 7; i++)
- palPtr1[i] = palPtr2[i];
- gPlttBufferFaded[palIndex + 7] = rgbBuffer;
+ tempPlt = gPlttBufferFaded[palIndex];
+ for (i = 1; i < 8; i++)
+ gPlttBufferFaded[palIndex + i - 1] = gPlttBufferFaded[palIndex + i];
+ gPlttBufferFaded[palIndex + 7] = tempPlt;
}
if (++gTasks[taskId].data[11] == gTasks[taskId].data[0])
DestroyAnimVisualTask(taskId);
}
-#else
-NAKED
-static void AnimTask_RotateAuroraRingColors_Step(u8 taskId)
-{
- asm_unified("push {r4-r7,lr}\n\
- lsls r0, 24\n\
- lsrs r4, r0, 24\n\
- ldr r1, =gTasks\n\
- lsls r0, r4, 2\n\
- adds r0, r4\n\
- lsls r0, 3\n\
- adds r2, r0, r1\n\
- ldrh r0, [r2, 0x1C]\n\
- adds r0, 0x1\n\
- strh r0, [r2, 0x1C]\n\
- lsls r0, 16\n\
- asrs r0, 16\n\
- mov r12, r1\n\
- cmp r0, 0x3\n\
- bne _081075BE\n\
- movs r0, 0\n\
- strh r0, [r2, 0x1C]\n\
- ldrh r0, [r2, 0xC]\n\
- adds r0, 0x1\n\
- lsls r0, 16\n\
- lsrs r5, r0, 16\n\
- ldr r1, =gPlttBufferFaded\n\
- lsls r0, r5, 1\n\
- adds r0, r1\n\
- ldrh r6, [r0]\n\
- adds r7, r1, 0\n\
- adds r3, r0, 0x2\n\
- movs r1, 0x6\n\
- adds r2, r0, 0\n\
-_081075A8:\n\
- ldrh r0, [r3]\n\
- strh r0, [r2]\n\
- adds r3, 0x2\n\
- adds r2, 0x2\n\
- subs r1, 0x1\n\
- cmp r1, 0\n\
- bge _081075A8\n\
- adds r0, r5, 0x7\n\
- lsls r0, 1\n\
- adds r0, r7\n\
- strh r6, [r0]\n\
-_081075BE:\n\
- lsls r0, r4, 2\n\
- adds r0, r4\n\
- lsls r0, 3\n\
- add r0, r12\n\
- ldrh r1, [r0, 0x1E]\n\
- adds r1, 0x1\n\
- strh r1, [r0, 0x1E]\n\
- lsls r1, 16\n\
- asrs r1, 16\n\
- movs r2, 0x8\n\
- ldrsh r0, [r0, r2]\n\
- cmp r1, r0\n\
- bne _081075DE\n\
- adds r0, r4, 0\n\
- bl DestroyAnimVisualTask\n\
-_081075DE:\n\
- pop {r4-r7}\n\
- pop {r0}\n\
- bx r0\n\
- .pool\n");
-}
-#endif
// For animating undulating beam attacks (e.g. Flamethrower, Hydro Pump, Signal Beam)
static void AnimToTargetInSinWave(struct Sprite *sprite)
@@ -822,6 +748,7 @@ static void AnimHydroCannonBeam(struct Sprite *sprite)
if (GetBattlerPosition(gBattleAnimAttacker) == B_POSITION_PLAYER_LEFT || GetBattlerPosition(gBattleAnimAttacker) == B_POSITION_OPPONENT_LEFT)
gBattleAnimArgs[0] *= -1;
}
+
if ((gBattleAnimArgs[5] & 0xFF00) == 0)
animType = TRUE;
else
@@ -867,21 +794,25 @@ static void AnimSmallBubblePair_Step(struct Sprite *sprite)
sprite->pos2.x = Sin(sprite->data[0], 4);
sprite->data[1] += 48;
sprite->pos2.y = -(sprite->data[1] >> 8);
- if (--sprite->data[7] == -1)
+ if (sprite->data[7]-- == 0)
DestroyAnimSprite(sprite);
}
-#ifdef NONMATCHING
void AnimTask_CreateSurfWave(u8 taskId)
{
struct BattleAnimBgData animBg;
u8 taskId2;
+ u16 *x, *y; //These pointers are needed to match
+
+ x = &gBattle_BG1_X;
+ y = &gBattle_BG1_Y;
- SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT1_BG1 | BLDCNT_EFFECT_BLEND | BLDCNT_TGT2_ALL);
- SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(0, 16));
+ SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_EFFECT_BLEND | BLDCNT_TGT2_ALL | BLDCNT_TGT1_BG1);
+ SetGpuReg(REG_OFFSET_BLDALPHA, (16 << 8));
SetAnimBgAttribute(1, BG_ANIM_PRIORITY, 1);
SetAnimBgAttribute(1, BG_ANIM_SCREEN_SIZE, 1);
sub_80A6B30(&animBg);
+
if (!IsContest())
{
SetAnimBgAttribute(1, BG_ANIM_CHAR_BASE_BLOCK, 1);
@@ -906,30 +837,30 @@ void AnimTask_CreateSurfWave(u8 taskId)
gTasks[taskId2].data[2] = 0x1000;
if (IsContest())
{
- gBattle_BG1_X = -80;
- gBattle_BG1_Y = -48;
+ *x = -80;
+ *y = -48;
gTasks[taskId].data[0] = 2;
gTasks[taskId].data[1] = 1;
gTasks[taskId2].data[3] = 0;
}
else if (GetBattlerSide(gBattleAnimAttacker) == B_SIDE_OPPONENT)
{
- gBattle_BG1_X = -224;
- gBattle_BG1_Y = 256;
+ *x = -224;
+ *y = 256;
gTasks[taskId].data[0] = 2;
gTasks[taskId].data[1] = -1;
gTasks[taskId2].data[3] = 1;
}
else
{
- gBattle_BG1_X = 0;
- gBattle_BG1_Y = -48;
+ *x = 0;
+ *y = -48;
gTasks[taskId].data[0] = -2;
gTasks[taskId].data[1] = 1;
gTasks[taskId2].data[3] = 0;
}
- SetGpuReg(REG_OFFSET_BG1HOFS, gBattle_BG1_X);
- SetGpuReg(REG_OFFSET_BG1VOFS, gBattle_BG1_Y);
+ SetGpuReg(REG_OFFSET_BG1HOFS, *x);
+ SetGpuReg(REG_OFFSET_BG1VOFS, *y);
if (gTasks[taskId2].data[3] == 0)
{
gTasks[taskId2].data[4] = 48;
@@ -943,245 +874,16 @@ void AnimTask_CreateSurfWave(u8 taskId)
gTasks[taskId].data[6] = 1;
gTasks[taskId].func = AnimTask_CreateSurfWave_Step1;
}
-#else
-NAKED
-void AnimTask_CreateSurfWave(u8 taskId)
-{
- asm_unified("push {r4-r7,lr}\n\
- mov r7, r10\n\
- mov r6, r9\n\
- mov r5, r8\n\
- push {r5-r7}\n\
- sub sp, 0x10\n\
- lsls r0, 24\n\
- lsrs r0, 24\n\
- mov r10, r0\n\
- ldr r1, =0x00003f42\n\
- movs r0, 0x50\n\
- bl SetGpuReg\n\
- movs r1, 0x80\n\
- lsls r1, 5\n\
- movs r0, 0x52\n\
- bl SetGpuReg\n\
- movs r0, 0x1\n\
- movs r1, 0x4\n\
- movs r2, 0x1\n\
- bl SetAnimBgAttribute\n\
- movs r0, 0x1\n\
- movs r1, 0\n\
- movs r2, 0x1\n\
- bl SetAnimBgAttribute\n\
- mov r0, sp\n\
- bl sub_80A6B30\n\
- bl IsContest\n\
- lsls r0, 24\n\
- cmp r0, 0\n\
- bne _081079E0\n\
- movs r0, 0x1\n\
- movs r1, 0x3\n\
- movs r2, 0x1\n\
- bl SetAnimBgAttribute\n\
- ldr r0, =gBattleAnimAttacker\n\
- ldrb r0, [r0]\n\
- bl GetBattlerSide\n\
- lsls r0, 24\n\
- lsrs r0, 24\n\
- cmp r0, 0x1\n\
- bne _081079D0\n\
- mov r0, sp\n\
- ldrb r0, [r0, 0x9]\n\
- ldr r1, =gBattleAnimBgTilemap_SurfOpponent\n\
- bl AnimLoadCompressedBgTilemap\n\
- b _081079EA\n\
- .pool\n\
-_081079D0:\n\
- mov r0, sp\n\
- ldrb r0, [r0, 0x9]\n\
- ldr r1, =gBattleAnimBgTilemap_SurfPlayer\n\
- bl AnimLoadCompressedBgTilemap\n\
- b _081079EA\n\
- .pool\n\
-_081079E0:\n\
- ldr r1, =gBattleAnimBgTilemap_SurfContest\n\
- mov r0, sp\n\
- movs r2, 0x1\n\
- bl AnimLoadCompressedBgTilemapHandleContest\n\
-_081079EA:\n\
- mov r0, sp\n\
- ldrb r0, [r0, 0x9]\n\
- ldr r1, =gBattleAnimBgImage_Surf\n\
- mov r2, sp\n\
- ldrh r2, [r2, 0xA]\n\
- bl AnimLoadCompressedBgGfx\n\
- ldr r0, =gBattleAnimArgs\n\
- movs r1, 0\n\
- ldrsh r0, [r0, r1]\n\
- cmp r0, 0\n\
- bne _08107A24\n\
- ldr r0, =gBattleAnimBgPalette_Surf\n\
- mov r1, sp\n\
- ldrb r1, [r1, 0x8]\n\
- lsls r1, 4\n\
- movs r2, 0x20\n\
- bl LoadCompressedPalette\n\
- b _08107A32\n\
- .pool\n\
-_08107A24:\n\
- ldr r0, =gBattleAnimBackgroundImageMuddyWater_Pal\n\
- mov r1, sp\n\
- ldrb r1, [r1, 0x8]\n\
- lsls r1, 4\n\
- movs r2, 0x20\n\
- bl LoadCompressedPalette\n\
-_08107A32:\n\
- ldr r0, =AnimTask_SurfWaveScanlineEffect\n\
- ldr r4, =gTasks\n\
- mov r2, r10\n\
- lsls r5, r2, 2\n\
- adds r1, r5, r2\n\
- lsls r1, 3\n\
- adds r6, r1, r4\n\
- ldrb r1, [r6, 0x7]\n\
- adds r1, 0x1\n\
- lsls r1, 24\n\
- lsrs r1, 24\n\
- bl CreateTask\n\
- lsls r0, 24\n\
- lsrs r0, 24\n\
- mov r8, r0\n\
- movs r0, 0\n\
- mov r9, r0\n\
- mov r1, r8\n\
- strh r1, [r6, 0x26]\n\
- mov r2, r8\n\
- lsls r0, r2, 2\n\
- add r0, r8\n\
- lsls r0, 3\n\
- adds r7, r0, r4\n\
- mov r0, r9\n\
- strh r0, [r7, 0x8]\n\
- movs r0, 0x80\n\
- lsls r0, 5\n\
- strh r0, [r7, 0xA]\n\
- strh r0, [r7, 0xC]\n\
- bl IsContest\n\
- lsls r0, 24\n\
- lsrs r4, r0, 24\n\
- cmp r4, 0\n\
- beq _08107AB4\n\
- ldr r1, =0x0000ffb0\n\
- adds r0, r1, 0\n\
- ldr r2, =gBattle_BG1_X\n\
- strh r0, [r2]\n\
- adds r1, 0x20\n\
- adds r0, r1, 0\n\
- ldr r2, =gBattle_BG1_Y\n\
- strh r0, [r2]\n\
- movs r0, 0x2\n\
- strh r0, [r6, 0x8]\n\
- movs r0, 0x1\n\
- strh r0, [r6, 0xA]\n\
- mov r0, r9\n\
- strh r0, [r7, 0xE]\n\
- b _08107B0E\n\
- .pool\n\
-_08107AB4:\n\
- ldr r0, =gBattleAnimAttacker\n\
- ldrb r0, [r0]\n\
- bl GetBattlerSide\n\
- lsls r0, 24\n\
- lsrs r1, r0, 24\n\
- cmp r1, 0x1\n\
- bne _08107AF8\n\
- ldr r2, =0x0000ff20\n\
- adds r0, r2, 0\n\
- ldr r2, =gBattle_BG1_X\n\
- strh r0, [r2]\n\
- movs r2, 0x80\n\
- lsls r2, 1\n\
- adds r0, r2, 0\n\
- ldr r2, =gBattle_BG1_Y\n\
- strh r0, [r2]\n\
- movs r0, 0x2\n\
- strh r0, [r6, 0x8]\n\
- ldr r0, =0x0000ffff\n\
- strh r0, [r6, 0xA]\n\
- strh r1, [r7, 0xE]\n\
- b _08107B0E\n\
- .pool\n\
-_08107AF8:\n\
- ldr r0, =gBattle_BG1_X\n\
- strh r4, [r0]\n\
- ldr r1, =0x0000ffd0\n\
- adds r0, r1, 0\n\
- ldr r2, =gBattle_BG1_Y\n\
- strh r0, [r2]\n\
- ldr r0, =0x0000fffe\n\
- strh r0, [r6, 0x8]\n\
- movs r0, 0x1\n\
- strh r0, [r6, 0xA]\n\
- strh r4, [r7, 0xE]\n\
-_08107B0E:\n\
- ldr r0, =gBattle_BG1_X\n\
- ldrh r1, [r0]\n\
- movs r0, 0x14\n\
- bl SetGpuReg\n\
- ldr r2, =gBattle_BG1_Y\n\
- ldrh r1, [r2]\n\
- movs r0, 0x16\n\
- bl SetGpuReg\n\
- ldr r1, =gTasks\n\
- mov r2, r8\n\
- lsls r0, r2, 2\n\
- add r0, r8\n\
- lsls r0, 3\n\
- adds r1, r0, r1\n\
- movs r2, 0xE\n\
- ldrsh r0, [r1, r2]\n\
- cmp r0, 0\n\
- bne _08107B54\n\
- movs r0, 0x30\n\
- strh r0, [r1, 0x10]\n\
- movs r0, 0x70\n\
- b _08107B58\n\
- .pool\n\
-_08107B54:\n\
- movs r0, 0\n\
- strh r0, [r1, 0x10]\n\
-_08107B58:\n\
- strh r0, [r1, 0x12]\n\
- ldr r1, =gTasks\n\
- mov r2, r10\n\
- adds r0, r5, r2\n\
- lsls r0, 3\n\
- adds r0, r1\n\
- movs r1, 0x1\n\
- strh r1, [r0, 0x14]\n\
- ldr r1, =AnimTask_CreateSurfWave_Step1\n\
- str r1, [r0]\n\
- add sp, 0x10\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\
- .pool\n");
-}
-#endif
-#ifdef NONMATCHING
static void AnimTask_CreateSurfWave_Step1(u8 taskId)
{
- struct BattleAnimBgData animBg;
- u8 i;
u16 rgbBuffer;
- u16 *BGptrX = &gBattle_BG1_X;
- u16 *BGptrY = &gBattle_BG1_Y;
- s16 unkUse;
- u32 palOffset;
- u16 palNum;
+ u8 i;
+ u16 *BGptrX, *BGptrY;
+ struct BattleAnimBgData animBg;
+
+ BGptrX = &gBattle_BG1_X;
+ BGptrY = &gBattle_BG1_Y;
*BGptrX += gTasks[taskId].data[0];
*BGptrY += gTasks[taskId].data[1];
@@ -1189,29 +891,26 @@ static void AnimTask_CreateSurfWave_Step1(u8 taskId)
gTasks[taskId].data[2] += gTasks[taskId].data[1];
if (++gTasks[taskId].data[5] == 4)
{
- rgbBuffer = gPlttBufferFaded[animBg.paletteId * 16 + 7];
- for (i = 6; i != 0; i--)
+ rgbBuffer = gPlttBufferFaded[16 * animBg.paletteId + 7];
+ for (i = 6; i != 0; i--) // i > 0 generates the exact same code in this context
{
- palNum = animBg.paletteId * 16;
- palOffset = 1 + i;
- gPlttBufferFaded[palNum + palOffset] = gPlttBufferFaded[palNum + palOffset - 1];
+ gPlttBufferFaded[16 * animBg.paletteId + 1 + i] = gPlttBufferFaded[16 * animBg.paletteId + 1 + i - 1]; // 1 + i - 1 is needed to match for some bizarre reason
}
- gPlttBufferFaded[animBg.paletteId * 16 + 1] = rgbBuffer;
+ gPlttBufferFaded[16 * animBg.paletteId + 1] = rgbBuffer;
gTasks[taskId].data[5] = 0;
}
if (++gTasks[taskId].data[6] > 1)
{
gTasks[taskId].data[6] = 0;
- unkUse = ++gTasks[taskId].data[3];
- if (unkUse <= 13)
+ if (++gTasks[taskId].data[3] < 14)
{
- gTasks[gTasks[taskId].data[15]].data[1] = unkUse | ((16 - unkUse) * 256);
+ gTasks[gTasks[taskId].data[15]].data[1] = (s16)((gTasks[taskId].data[3]) | ((16 - gTasks[taskId].data[3]) << 8));
gTasks[taskId].data[4]++;
}
if (gTasks[taskId].data[3] > 54)
{
- unkUse = --gTasks[taskId].data[4];
- gTasks[gTasks[taskId].data[15]].data[1] = unkUse | ((16 - unkUse) * 256);
+ gTasks[taskId].data[4]--;
+ gTasks[gTasks[taskId].data[15]].data[1] = (s16)((gTasks[taskId].data[4]) | ((16 - gTasks[taskId].data[4]) << 8));
}
}
if (!(gTasks[gTasks[taskId].data[15]].data[1] & 0x1F))
@@ -1220,167 +919,7 @@ static void AnimTask_CreateSurfWave_Step1(u8 taskId)
gTasks[taskId].func = AnimTask_CreateSurfWave_Step2;
}
}
-#else
-NAKED
-static void AnimTask_CreateSurfWave_Step1(u8 taskId)
-{
- asm_unified("push {r4-r7,lr}\n\
- sub sp, 0x10\n\
- lsls r0, 24\n\
- lsrs r5, r0, 24\n\
- ldr r1, =gBattle_BG1_X\n\
- ldr r2, =gBattle_BG1_Y\n\
- ldr r0, =gTasks\n\
- lsls r4, r5, 2\n\
- adds r4, r5\n\
- lsls r4, 3\n\
- adds r4, r0\n\
- ldrh r0, [r4, 0x8]\n\
- ldrh r3, [r1]\n\
- adds r0, r3\n\
- strh r0, [r1]\n\
- ldrh r0, [r4, 0xA]\n\
- ldrh r1, [r2]\n\
- adds r0, r1\n\
- strh r0, [r2]\n\
- mov r0, sp\n\
- bl sub_80A6B30\n\
- ldrh r0, [r4, 0xA]\n\
- ldrh r3, [r4, 0xC]\n\
- adds r0, r3\n\
- strh r0, [r4, 0xC]\n\
- ldrh r0, [r4, 0x12]\n\
- adds r0, 0x1\n\
- strh r0, [r4, 0x12]\n\
- lsls r0, 16\n\
- asrs r0, 16\n\
- cmp r0, 0x4\n\
- bne _08107C18\n\
- ldr r1, =gPlttBufferFaded\n\
- mov r0, sp\n\
- ldrb r0, [r0, 0x8]\n\
- lsls r0, 4\n\
- adds r0, 0x7\n\
- lsls r0, 1\n\
- adds r0, r1\n\
- ldrh r6, [r0]\n\
- movs r2, 0x6\n\
- adds r7, r1, 0\n\
- adds r3, r7, 0\n\
- mov r4, sp\n\
-_08107BDE:\n\
- ldrb r0, [r4, 0x8]\n\
- lsls r0, 4\n\
- adds r1, r2, 0x1\n\
- adds r0, r1\n\
- lsls r1, r0, 1\n\
- adds r1, r3\n\
- subs r0, 0x1\n\
- lsls r0, 1\n\
- adds r0, r3\n\
- ldrh r0, [r0]\n\
- strh r0, [r1]\n\
- subs r0, r2, 0x1\n\
- lsls r0, 24\n\
- lsrs r2, r0, 24\n\
- cmp r2, 0\n\
- bne _08107BDE\n\
- mov r0, sp\n\
- ldrb r0, [r0, 0x8]\n\
- lsls r0, 4\n\
- adds r0, 0x1\n\
- lsls r0, 1\n\
- adds r0, r7\n\
- strh r6, [r0]\n\
- ldr r1, =gTasks\n\
- lsls r0, r5, 2\n\
- adds r0, r5\n\
- lsls r0, 3\n\
- adds r0, r1\n\
- strh r2, [r0, 0x12]\n\
-_08107C18:\n\
- ldr r1, =gTasks\n\
- lsls r2, r5, 2\n\
- adds r0, r2, r5\n\
- lsls r0, 3\n\
- adds r3, r0, r1\n\
- ldrh r0, [r3, 0x14]\n\
- adds r0, 0x1\n\
- strh r0, [r3, 0x14]\n\
- lsls r0, 16\n\
- asrs r0, 16\n\
- adds r4, r1, 0\n\
- adds r6, r2, 0\n\
- cmp r0, 0x1\n\
- ble _08107C86\n\
- movs r0, 0\n\
- strh r0, [r3, 0x14]\n\
- ldrh r0, [r3, 0xE]\n\
- adds r2, r0, 0x1\n\
- strh r2, [r3, 0xE]\n\
- lsls r0, r2, 16\n\
- asrs r0, 16\n\
- cmp r0, 0xD\n\
- bgt _08107C62\n\
- movs r1, 0x26\n\
- ldrsh r0, [r3, r1]\n\
- lsls r1, r0, 2\n\
- adds r1, r0\n\
- lsls r1, 3\n\
- adds r1, r4\n\
- movs r0, 0x10\n\
- subs r0, r2\n\
- lsls r0, 8\n\
- orrs r2, r0\n\
- strh r2, [r1, 0xA]\n\
- ldrh r0, [r3, 0x10]\n\
- adds r0, 0x1\n\
- strh r0, [r3, 0x10]\n\
-_08107C62:\n\
- movs r1, 0xE\n\
- ldrsh r0, [r3, r1]\n\
- cmp r0, 0x36\n\
- ble _08107C86\n\
- ldrh r2, [r3, 0x10]\n\
- subs r2, 0x1\n\
- strh r2, [r3, 0x10]\n\
- movs r1, 0x26\n\
- ldrsh r0, [r3, r1]\n\
- lsls r1, r0, 2\n\
- adds r1, r0\n\
- lsls r1, 3\n\
- adds r1, r4\n\
- movs r0, 0x10\n\
- subs r0, r2\n\
- lsls r0, 8\n\
- orrs r2, r0\n\
- strh r2, [r1, 0xA]\n\
-_08107C86:\n\
- adds r0, r6, r5\n\
- lsls r0, 3\n\
- adds r2, r0, r4\n\
- movs r3, 0x26\n\
- ldrsh r1, [r2, r3]\n\
- lsls r0, r1, 2\n\
- adds r0, r1\n\
- lsls r0, 3\n\
- adds r0, r4\n\
- ldrh r0, [r0, 0xA]\n\
- movs r3, 0x1F\n\
- ands r3, r0\n\
- cmp r3, 0\n\
- bne _08107CA8\n\
- strh r3, [r2, 0x8]\n\
- ldr r0, =AnimTask_CreateSurfWave_Step2\n\
- str r0, [r2]\n\
-_08107CA8:\n\
- add sp, 0x10\n\
- pop {r4-r7}\n\
- pop {r0}\n\
- bx r0\n\
- .pool\n");
-}
-#endif
+
static void AnimTask_CreateSurfWave_Step2(u8 taskId)
{
@@ -2004,216 +1543,50 @@ static void AnimWaterPulseRing_Step(struct Sprite *sprite)
sprite->data[0]++;
}
-#ifdef NONMATCHING
-static void CreateWaterPulseRingBubbles(struct Sprite *sprite, int xDiff, int yDiff)
+static void CreateWaterPulseRingBubbles(struct Sprite *sprite, s32 xDiff, s32 yDiff)
{
- s16 something = sprite->data[0] / 2;
- s16 combinedX = sprite->pos1.x + sprite->pos2.x;
- s16 combinedY = sprite->pos1.y + sprite->pos2.y;
- s16 randomSomethingY = yDiff + (Random2() % 10) - 5;
- s16 randomSomethingX = -xDiff + (Random2() % 10) - 5;
- s16 i;
+ s16 combinedX, combinedY;
+ s16 i, something;
+ s16 unusedVar = 1; //unusedVar is needed to match
+ s16 somethingRandomX, somethingRandomY;
u8 spriteId;
- for (i = 0; i <= 0; i++)
+ something = sprite->data[0] / 2;
+ combinedX = sprite->pos1.x + sprite->pos2.x;
+ combinedY = sprite->pos1.y + sprite->pos2.y;
+ if (yDiff < 0)
+ unusedVar *= -1; //Needed to Match
+ somethingRandomY = yDiff + (Random2() % 10) - 5;
+ somethingRandomX = -xDiff + (Random2() % 10) - 5;
+
+ for (i = 0; i < 1; i++)
{
spriteId = CreateSprite(&gWaterPulseRingBubbleSpriteTemplate, combinedX, combinedY + something, 130);
gSprites[spriteId].data[0] = 20;
- gSprites[spriteId].data[1] = randomSomethingY;
+ gSprites[spriteId].data[1] = somethingRandomY;
gSprites[spriteId].subpriority = GetBattlerSpriteSubpriority(gBattleAnimAttacker) - 1;
- if (randomSomethingX < 0)
- gSprites[spriteId].data[2] = -randomSomethingX;
+ if (somethingRandomX < 0)
+ {
+ gSprites[spriteId].data[2] = -somethingRandomX;
+ }
else
- gSprites[spriteId].data[2] = randomSomethingX;
+ {
+ gSprites[spriteId].data[2] = somethingRandomX;
+ }
}
- for (i = 0; i <= 0; i++)
+ for (i = 0; i < 1; i++)
{
spriteId = CreateSprite(&gWaterPulseRingBubbleSpriteTemplate, combinedX, combinedY - something, 130);
gSprites[spriteId].data[0] = 20;
- gSprites[spriteId].data[1] = randomSomethingY;
+ gSprites[spriteId].data[1] = somethingRandomY;
gSprites[spriteId].subpriority = GetBattlerSpriteSubpriority(gBattleAnimAttacker) - 1;
- if (randomSomethingX > 0)
- gSprites[spriteId].data[2] = -randomSomethingX;
+ if (somethingRandomX > 0)
+ {
+ gSprites[spriteId].data[2] = -somethingRandomX;
+ }
else
- gSprites[spriteId].data[2] = randomSomethingX;
+ {
+ gSprites[spriteId].data[2] = somethingRandomX;
+ }
}
}
-#else
-NAKED
-static void CreateWaterPulseRingBubbles(struct Sprite *sprite, int xDiff, int yDiff)
-{
- asm_unified("push {r4-r7,lr}\n\
- mov r7, r10\n\
- mov r6, r9\n\
- mov r5, r8\n\
- push {r5-r7}\n\
- sub sp, 0x18\n\
- adds r4, r1, 0\n\
- adds r5, r2, 0\n\
- movs r2, 0x2E\n\
- ldrsh r1, [r0, r2]\n\
- lsrs r2, r1, 31\n\
- adds r1, r2\n\
- lsls r1, 15\n\
- lsrs r1, 16\n\
- str r1, [sp]\n\
- ldrh r1, [r0, 0x24]\n\
- ldrh r3, [r0, 0x20]\n\
- adds r1, r3\n\
- lsls r1, 16\n\
- lsrs r1, 16\n\
- mov r8, r1\n\
- ldrh r1, [r0, 0x26]\n\
- ldrh r0, [r0, 0x22]\n\
- adds r1, r0\n\
- lsls r1, 16\n\
- lsrs r1, 16\n\
- mov r10, r1\n\
- bl Random2\n\
- lsls r0, 16\n\
- lsrs r0, 16\n\
- movs r1, 0xA\n\
- bl __umodsi3\n\
- adds r0, r5, r0\n\
- subs r0, 0x5\n\
- lsls r0, 16\n\
- lsrs r0, 16\n\
- mov r9, r0\n\
- bl Random2\n\
- negs r4, r4\n\
- lsls r0, 16\n\
- lsrs r0, 16\n\
- movs r1, 0xA\n\
- bl __umodsi3\n\
- adds r4, r0\n\
- subs r4, 0x5\n\
- lsls r4, 16\n\
- lsrs r7, r4, 16\n\
- movs r6, 0\n\
- mov r0, r8\n\
- lsls r0, 16\n\
- mov r8, r0\n\
- mov r1, r10\n\
- lsls r1, 16\n\
- str r1, [sp, 0xC]\n\
- ldr r2, [sp]\n\
- lsls r2, 16\n\
- str r2, [sp, 0x10]\n\
- asrs r1, 16\n\
- lsls r0, r7, 16\n\
- asrs r5, r0, 16\n\
- str r0, [sp, 0x14]\n\
- negs r3, r5\n\
- str r3, [sp, 0x4]\n\
- asrs r0, r2, 16\n\
- adds r1, r0\n\
- lsls r1, 16\n\
- mov r10, r1\n\
-_08108DE2:\n\
- ldr r0, =gWaterPulseRingBubbleSpriteTemplate\n\
- mov r2, r8\n\
- asrs r1, r2, 16\n\
- mov r3, r10\n\
- asrs r2, r3, 16\n\
- movs r3, 0x82\n\
- bl CreateSprite\n\
- lsls r0, 24\n\
- lsrs r2, r0, 24\n\
- ldr r1, =gSprites\n\
- lsls r0, r2, 4\n\
- adds r0, r2\n\
- lsls r0, 2\n\
- adds r4, r0, r1\n\
- movs r0, 0x14\n\
- strh r0, [r4, 0x2E]\n\
- mov r0, r9\n\
- strh r0, [r4, 0x30]\n\
- ldr r0, =gBattleAnimAttacker\n\
- ldrb r0, [r0]\n\
- bl GetBattlerSpriteSubpriority\n\
- subs r0, 0x1\n\
- adds r1, r4, 0\n\
- adds r1, 0x43\n\
- strb r0, [r1]\n\
- cmp r5, 0\n\
- bge _08108E30\n\
- mov r1, sp\n\
- ldrh r1, [r1, 0x4]\n\
- strh r1, [r4, 0x32]\n\
- b _08108E32\n\
- .pool\n\
-_08108E30:\n\
- strh r7, [r4, 0x32]\n\
-_08108E32:\n\
- lsls r0, r6, 16\n\
- movs r2, 0x80\n\
- lsls r2, 9\n\
- adds r0, r2\n\
- lsrs r6, r0, 16\n\
- cmp r0, 0\n\
- ble _08108DE2\n\
- movs r6, 0\n\
- ldr r3, [sp, 0xC]\n\
- asrs r1, r3, 16\n\
- ldr r0, [sp, 0x14]\n\
- asrs r5, r0, 16\n\
- negs r2, r5\n\
- str r2, [sp, 0x8]\n\
- ldr r3, [sp, 0x10]\n\
- asrs r0, r3, 16\n\
- subs r1, r0\n\
- lsls r1, 16\n\
- mov r10, r1\n\
-_08108E58:\n\
- ldr r0, =gWaterPulseRingBubbleSpriteTemplate\n\
- mov r2, r8\n\
- asrs r1, r2, 16\n\
- mov r3, r10\n\
- asrs r2, r3, 16\n\
- movs r3, 0x82\n\
- bl CreateSprite\n\
- lsls r0, 24\n\
- lsrs r2, r0, 24\n\
- ldr r1, =gSprites\n\
- lsls r0, r2, 4\n\
- adds r0, r2\n\
- lsls r0, 2\n\
- adds r4, r0, r1\n\
- movs r0, 0x14\n\
- strh r0, [r4, 0x2E]\n\
- mov r0, r9\n\
- strh r0, [r4, 0x30]\n\
- ldr r0, =gBattleAnimAttacker\n\
- ldrb r0, [r0]\n\
- bl GetBattlerSpriteSubpriority\n\
- subs r0, 0x1\n\
- adds r1, r4, 0\n\
- adds r1, 0x43\n\
- strb r0, [r1]\n\
- cmp r5, 0\n\
- ble _08108EA8\n\
- mov r1, sp\n\
- ldrh r1, [r1, 0x8]\n\
- strh r1, [r4, 0x32]\n\
- b _08108EAA\n\
- .pool\n\
-_08108EA8:\n\
- strh r7, [r4, 0x32]\n\
-_08108EAA:\n\
- lsls r0, r6, 16\n\
- movs r2, 0x80\n\
- lsls r2, 9\n\
- adds r0, r2\n\
- lsrs r6, r0, 16\n\
- cmp r0, 0\n\
- ble _08108E58\n\
- add sp, 0x18\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");
-}
-#endif
diff --git a/src/battle_arena.c b/src/battle_arena.c
index 42a967fc6..0ffba4910 100644
--- a/src/battle_arena.c
+++ b/src/battle_arena.c
@@ -563,7 +563,7 @@ u8 BattleArena_ShowJudgmentWindow(u8 *state)
}
break;
case 4:
- PlaySE(SE_HANTEI1);
+ PlaySE(SE_ARENA_TIMEUP1);
ShowJudgmentSprite(80, 40, ARENA_CATEGORY_MIND, B_POSITION_PLAYER_LEFT);
ShowJudgmentSprite(160, 40, ARENA_CATEGORY_MIND, B_POSITION_OPPONENT_LEFT);
BattleStringExpandPlaceholdersToDisplayedString(gText_Judgement);
@@ -572,7 +572,7 @@ u8 BattleArena_ShowJudgmentWindow(u8 *state)
ret = 1;
break;
case 5:
- PlaySE(SE_HANTEI1);
+ PlaySE(SE_ARENA_TIMEUP1);
ShowJudgmentSprite(80, 56, ARENA_CATEGORY_SKILL, B_POSITION_PLAYER_LEFT);
ShowJudgmentSprite(160, 56, ARENA_CATEGORY_SKILL, B_POSITION_OPPONENT_LEFT);
BattleStringExpandPlaceholdersToDisplayedString(gText_Judgement);
@@ -581,7 +581,7 @@ u8 BattleArena_ShowJudgmentWindow(u8 *state)
ret = 1;
break;
case 6:
- PlaySE(SE_HANTEI1);
+ PlaySE(SE_ARENA_TIMEUP1);
ShowJudgmentSprite(80, 72, ARENA_CATEGORY_BODY, B_POSITION_PLAYER_LEFT);
ShowJudgmentSprite(160, 72, ARENA_CATEGORY_BODY, B_POSITION_OPPONENT_LEFT);
BattleStringExpandPlaceholdersToDisplayedString(gText_Judgement);
@@ -590,7 +590,7 @@ u8 BattleArena_ShowJudgmentWindow(u8 *state)
ret = 1;
break;
case 7:
- PlaySE(SE_HANTEI2);
+ PlaySE(SE_ARENA_TIMEUP2);
if (gBattleTextBuff1[0] > gBattleTextBuff2[0])
{
ret = 2;
diff --git a/src/battle_bg.c b/src/battle_bg.c
index 00c504bfd..7c9b05b25 100644
--- a/src/battle_bg.c
+++ b/src/battle_bg.c
@@ -1105,7 +1105,7 @@ void InitLinkBattleVsScreen(u8 taskId)
if (gTasks[taskId].data[5] != 0)
DrawLinkBattleVsScreenOutcomeText();
- PlaySE(SE_W231);
+ PlaySE(SE_M_HARDEN);
DestroyTask(taskId);
gSprites[gBattleStruct->linkBattleVsSpriteId_V].invisible = FALSE;
gSprites[gBattleStruct->linkBattleVsSpriteId_S].invisible = FALSE;
diff --git a/src/battle_controller_link_opponent.c b/src/battle_controller_link_opponent.c
index 6604fa142..1041f6fda 100644
--- a/src/battle_controller_link_opponent.c
+++ b/src/battle_controller_link_opponent.c
@@ -239,27 +239,27 @@ static void sub_8064520(void)
{
if (r4 || !IsBattlerSpriteVisible(BATTLE_PARTNER(gActiveBattler)))
{
- if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].field_1_x1)
+ if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].finishedShinyMonAnim)
return;
- if (!gBattleSpritesDataPtr->healthBoxesData[BATTLE_PARTNER(gActiveBattler)].field_1_x1)
+ if (!gBattleSpritesDataPtr->healthBoxesData[BATTLE_PARTNER(gActiveBattler)].finishedShinyMonAnim)
return;
- gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].flag_x80 = 0;
- gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].field_1_x1 = 0;
+ gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].triedShinyMonAnim = FALSE;
+ gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].finishedShinyMonAnim = FALSE;
- gBattleSpritesDataPtr->healthBoxesData[BATTLE_PARTNER(gActiveBattler)].flag_x80 = 0;
- gBattleSpritesDataPtr->healthBoxesData[BATTLE_PARTNER(gActiveBattler)].field_1_x1 = 0;
+ gBattleSpritesDataPtr->healthBoxesData[BATTLE_PARTNER(gActiveBattler)].triedShinyMonAnim = FALSE;
+ gBattleSpritesDataPtr->healthBoxesData[BATTLE_PARTNER(gActiveBattler)].finishedShinyMonAnim = FALSE;
FreeSpriteTilesByTag(0x27F9);
FreeSpritePaletteByTag(0x27F9);
}
else
{
- if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].field_1_x1)
+ if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].finishedShinyMonAnim)
return;
- gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].flag_x80 = 0;
- gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].field_1_x1 = 0;
+ gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].triedShinyMonAnim = FALSE;
+ gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].finishedShinyMonAnim = FALSE;
if (GetBattlerPosition(gActiveBattler) == B_POSITION_OPPONENT_RIGHT)
{
@@ -278,17 +278,17 @@ static void sub_8064734(void)
bool32 r10 = FALSE;
if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].ballAnimActive
- && !gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].flag_x80
- && !gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].field_1_x1)
+ && !gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].triedShinyMonAnim
+ && !gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].finishedShinyMonAnim)
{
- sub_8172EF0(gActiveBattler, &gEnemyParty[gBattlerPartyIndexes[gActiveBattler]]);
+ TryShinyAnimation(gActiveBattler, &gEnemyParty[gBattlerPartyIndexes[gActiveBattler]]);
}
if (!(gBattleTypeFlags & BATTLE_TYPE_MULTI)
&& !gBattleSpritesDataPtr->healthBoxesData[BATTLE_PARTNER(gActiveBattler)].ballAnimActive
- && !gBattleSpritesDataPtr->healthBoxesData[BATTLE_PARTNER(gActiveBattler)].flag_x80
- && !gBattleSpritesDataPtr->healthBoxesData[BATTLE_PARTNER(gActiveBattler)].field_1_x1)
+ && !gBattleSpritesDataPtr->healthBoxesData[BATTLE_PARTNER(gActiveBattler)].triedShinyMonAnim
+ && !gBattleSpritesDataPtr->healthBoxesData[BATTLE_PARTNER(gActiveBattler)].finishedShinyMonAnim)
{
- sub_8172EF0(BATTLE_PARTNER(gActiveBattler), &gEnemyParty[gBattlerPartyIndexes[BATTLE_PARTNER(gActiveBattler)]]);
+ TryShinyAnimation(BATTLE_PARTNER(gActiveBattler), &gEnemyParty[gBattlerPartyIndexes[BATTLE_PARTNER(gActiveBattler)]]);
}
@@ -367,16 +367,16 @@ static void sub_8064B04(void)
if (gSprites[gBattlerSpriteIds[gActiveBattler]].callback == SpriteCallbackDummy
&& gSprites[gBattlerSpriteIds[gActiveBattler]].pos2.x == 0)
{
- if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].flag_x80)
+ if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].triedShinyMonAnim)
{
- sub_8172EF0(gActiveBattler, &gEnemyParty[gBattlerPartyIndexes[gActiveBattler]]);
+ TryShinyAnimation(gActiveBattler, &gEnemyParty[gBattlerPartyIndexes[gActiveBattler]]);
}
else
{
- if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].field_1_x1)
+ if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].finishedShinyMonAnim)
{
- gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].flag_x80 = 0;
- gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].field_1_x1 = 0;
+ gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].triedShinyMonAnim = FALSE;
+ gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].finishedShinyMonAnim = FALSE;
FreeSpriteTilesByTag(0x27F9);
FreeSpritePaletteByTag(0x27F9);
LinkOpponentBufferExecCompleted();
@@ -473,11 +473,11 @@ static void sub_8064DD0(void)
static void sub_8064E50(void)
{
- if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].field_1_x1
+ if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].finishedShinyMonAnim
&& gSprites[gBattlerSpriteIds[gActiveBattler]].callback == SpriteCallbackDummy)
{
- gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].flag_x80 = 0;
- gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].field_1_x1 = 0;
+ gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].triedShinyMonAnim = FALSE;
+ gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].finishedShinyMonAnim = FALSE;
FreeSpriteTilesByTag(0x27F9);
FreeSpritePaletteByTag(0x27F9);
@@ -495,9 +495,9 @@ static void sub_8064E50(void)
static void sub_8064F40(void)
{
if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].ballAnimActive
- && !gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].flag_x80)
+ && !gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].triedShinyMonAnim)
{
- sub_8172EF0(gActiveBattler, &gEnemyParty[gBattlerPartyIndexes[gActiveBattler]]);
+ TryShinyAnimation(gActiveBattler, &gEnemyParty[gBattlerPartyIndexes[gActiveBattler]]);
}
if (gSprites[gUnknown_03005D7C[gActiveBattler]].callback == SpriteCallbackDummy
@@ -1267,9 +1267,9 @@ static void LinkOpponentHandleDrawTrainerPic(void)
else
{
xPos = 176;
- if (gTrainerBattleOpponent_A == TRAINER_OPPONENT_C00)
+ if (gTrainerBattleOpponent_A == TRAINER_UNION_ROOM)
{
- trainerPicId = sub_8068B48();
+ trainerPicId = GetUnionRoomTrainerPic();
}
else if ((gLinkPlayers[GetMultiplayerId() ^ BIT_SIDE].version & 0xFF) == VERSION_FIRE_RED
|| (gLinkPlayers[GetMultiplayerId() ^ BIT_SIDE].version & 0xFF) == VERSION_LEAF_GREEN)
@@ -1357,7 +1357,7 @@ static void LinkOpponentHandleFaintAnimation(void)
if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].specialAnimActive)
{
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState = 0;
- PlaySE12WithPanning(SE_POKE_DEAD, SOUND_PAN_TARGET);
+ PlaySE12WithPanning(SE_FAINT, SOUND_PAN_TARGET);
gSprites[gBattlerSpriteIds[gActiveBattler]].callback = SpriteCB_FaintOpponentMon;
gBattlerControllerFuncs[gActiveBattler] = sub_8064C14;
}
diff --git a/src/battle_controller_link_partner.c b/src/battle_controller_link_partner.c
index ece4c24bc..af81b06d5 100644
--- a/src/battle_controller_link_partner.c
+++ b/src/battle_controller_link_partner.c
@@ -359,10 +359,10 @@ static void sub_814B554(void)
static void sub_814B5A8(void)
{
- if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].field_1_x1)
+ if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].finishedShinyMonAnim)
{
- gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].flag_x80 = 0;
- gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].field_1_x1 = 0;
+ gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].triedShinyMonAnim = FALSE;
+ gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].finishedShinyMonAnim = FALSE;
FreeSpriteTilesByTag(0x27F9);
FreeSpritePaletteByTag(0x27F9);
@@ -380,10 +380,10 @@ static void sub_814B5A8(void)
static void sub_814B69C(void)
{
- if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].flag_x80
+ if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].triedShinyMonAnim
&& !gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].ballAnimActive)
{
- sub_8172EF0(gActiveBattler, &gPlayerParty[gBattlerPartyIndexes[gActiveBattler]]);
+ TryShinyAnimation(gActiveBattler, &gPlayerParty[gBattlerPartyIndexes[gActiveBattler]]);
}
if (gSprites[gUnknown_03005D7C[gActiveBattler]].callback == SpriteCallbackDummy
@@ -1179,7 +1179,7 @@ static void LinkPartnerHandleFaintAnimation(void)
{
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState = 0;
HandleLowHpMusicChange(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], gActiveBattler);
- PlaySE12WithPanning(SE_POKE_DEAD, SOUND_PAN_ATTACKER);
+ PlaySE12WithPanning(SE_FAINT, SOUND_PAN_ATTACKER);
gSprites[gBattlerSpriteIds[gActiveBattler]].data[1] = 0;
gSprites[gBattlerSpriteIds[gActiveBattler]].data[2] = 5;
gSprites[gBattlerSpriteIds[gActiveBattler]].callback = sub_8039C00;
diff --git a/src/battle_controller_opponent.c b/src/battle_controller_opponent.c
index daf2c260e..f186bf3ff 100644
--- a/src/battle_controller_opponent.c
+++ b/src/battle_controller_opponent.c
@@ -249,23 +249,25 @@ static void sub_805F2F0(void)
{
if (var2 == TRUE)
{
- if (var2 && gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].field_1_x1 && gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].field_1_x1)
+ if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].finishedShinyMonAnim
+ && gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].finishedShinyMonAnim)
{
- gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].flag_x80 = 0;
- gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].field_1_x1 = 0;
- gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].flag_x80 = 0;
- gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].field_1_x1 = 0;
+ gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].triedShinyMonAnim = FALSE;
+ gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].finishedShinyMonAnim = FALSE;
+ gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].triedShinyMonAnim = FALSE;
+ gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].finishedShinyMonAnim = FALSE;
FreeSpriteTilesByTag(0x27F9);
FreeSpritePaletteByTag(0x27F9);
}
else
return;
}
- else if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].field_1_x1)
+ else if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].finishedShinyMonAnim)
{
if (GetBattlerPosition(gActiveBattler) == 3)
{
- if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].flag_x80 == 0 && gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].field_1_x1 == 0)
+ if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].triedShinyMonAnim
+ && !gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].finishedShinyMonAnim)
{
FreeSpriteTilesByTag(0x27F9);
FreeSpritePaletteByTag(0x27F9);
@@ -273,8 +275,8 @@ static void sub_805F2F0(void)
else
return;
}
- gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].flag_x80 = 0;
- gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].field_1_x1 = 0;
+ gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].triedShinyMonAnim = FALSE;
+ gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].finishedShinyMonAnim = FALSE;
}
else
return;
@@ -289,10 +291,19 @@ static void sub_805F560(void)
bool32 sp = FALSE;
bool32 r10 = FALSE;
- if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].flag_x80 && !gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].ballAnimActive && !gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].field_1_x1)
- sub_8172EF0(gActiveBattler, &gEnemyParty[gBattlerPartyIndexes[gActiveBattler]]);
- if (!(gBattleTypeFlags & BATTLE_TYPE_TWO_OPPONENTS) && !(gBattleTypeFlags & BATTLE_TYPE_MULTI) && IsDoubleBattle() && !gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].flag_x80 && !gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].ballAnimActive && !gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].field_1_x1)
- sub_8172EF0(gActiveBattler ^ BIT_FLANK, &gEnemyParty[gBattlerPartyIndexes[gActiveBattler ^ BIT_FLANK]]);
+ if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].triedShinyMonAnim
+ && !gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].ballAnimActive
+ && !gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].finishedShinyMonAnim)
+ TryShinyAnimation(gActiveBattler, &gEnemyParty[gBattlerPartyIndexes[gActiveBattler]]);
+
+ if (!(gBattleTypeFlags & BATTLE_TYPE_TWO_OPPONENTS)
+ && !(gBattleTypeFlags & BATTLE_TYPE_MULTI)
+ && IsDoubleBattle()
+ && !gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].triedShinyMonAnim
+ && !gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].ballAnimActive
+ && !gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].finishedShinyMonAnim)
+ TryShinyAnimation(gActiveBattler ^ BIT_FLANK, &gEnemyParty[gBattlerPartyIndexes[gActiveBattler ^ BIT_FLANK]]);
+
if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].ballAnimActive && !gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].ballAnimActive)
{
if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].field_1_x80)
@@ -368,13 +379,16 @@ static void sub_805F560(void)
static void sub_805F994(void)
{
- if (gSprites[gBattlerSpriteIds[gActiveBattler]].pos2.x == 0 && !gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].flag_x80 && !gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].field_1_x1)
- sub_8172EF0(gActiveBattler, &gEnemyParty[gBattlerPartyIndexes[gActiveBattler]]);
+ if (gSprites[gBattlerSpriteIds[gActiveBattler]].pos2.x == 0
+ && !gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].triedShinyMonAnim
+ && !gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].finishedShinyMonAnim)
+ TryShinyAnimation(gActiveBattler, &gEnemyParty[gBattlerPartyIndexes[gActiveBattler]]);
- if (gSprites[gBattlerSpriteIds[gActiveBattler]].callback == SpriteCallbackDummy && gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].field_1_x1)
+ if (gSprites[gBattlerSpriteIds[gActiveBattler]].callback == SpriteCallbackDummy
+ && gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].finishedShinyMonAnim)
{
- gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].flag_x80 = 0;
- gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].field_1_x1 = 0;
+ gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].triedShinyMonAnim = FALSE;
+ gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].finishedShinyMonAnim = FALSE;
FreeSpriteTilesByTag(0x27F9);
FreeSpritePaletteByTag(0x27F9);
OpponentBufferExecCompleted();
@@ -463,10 +477,11 @@ static void sub_805FC80(void)
static void sub_805FD00(void)
{
- if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].field_1_x1 && gSprites[gBattlerSpriteIds[gActiveBattler]].callback == SpriteCallbackDummy)
+ if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].finishedShinyMonAnim
+ && gSprites[gBattlerSpriteIds[gActiveBattler]].callback == SpriteCallbackDummy)
{
- gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].flag_x80 = 0;
- gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].field_1_x1 = 0;
+ gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].triedShinyMonAnim = FALSE;
+ gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].finishedShinyMonAnim = FALSE;
FreeSpriteTilesByTag(0x27F9);
FreeSpritePaletteByTag(0x27F9);
StartSpriteAnim(&gSprites[gBattlerSpriteIds[gActiveBattler]], 0);
@@ -480,8 +495,9 @@ static void sub_805FD00(void)
static void sub_805FDF0(void)
{
- if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].flag_x80 && !gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].ballAnimActive)
- sub_8172EF0(gActiveBattler, &gEnemyParty[gBattlerPartyIndexes[gActiveBattler]]);
+ if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].triedShinyMonAnim
+ && !gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].ballAnimActive)
+ TryShinyAnimation(gActiveBattler, &gEnemyParty[gBattlerPartyIndexes[gActiveBattler]]);
if (gSprites[gUnknown_03005D7C[gActiveBattler]].callback == SpriteCallbackDummy
&& !gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].ballAnimActive)
@@ -1394,7 +1410,7 @@ static void OpponentHandleFaintAnimation(void)
if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].specialAnimActive)
{
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState = 0;
- PlaySE12WithPanning(SE_POKE_DEAD, SOUND_PAN_TARGET);
+ PlaySE12WithPanning(SE_FAINT, SOUND_PAN_TARGET);
gSprites[gBattlerSpriteIds[gActiveBattler]].callback = SpriteCB_FaintOpponentMon;
gBattlerControllerFuncs[gActiveBattler] = sub_805FAC4;
}
diff --git a/src/battle_controller_player.c b/src/battle_controller_player.c
index 7fe1ed24a..d8005e808 100644
--- a/src/battle_controller_player.c
+++ b/src/battle_controller_player.c
@@ -316,7 +316,7 @@ static void HandleInputChooseAction(void)
if (gBattleBufferA[gActiveBattler][1] == B_ACTION_USE_ITEM)
{
// Add item to bag if it is a ball
- if (itemId <= ITEM_PREMIER_BALL)
+ if (itemId <= LAST_BALL)
AddBagItem(itemId, 1);
else
return;
@@ -359,7 +359,7 @@ static void HandleInputChooseTarget(void)
} while (i < gBattlersCount);
}
- if (gMain.heldKeys & DPAD_ANY && gSaveBlock2Ptr->optionsButtonMode == 2)
+ if (gMain.heldKeys & DPAD_ANY && gSaveBlock2Ptr->optionsButtonMode == OPTIONS_BUTTON_MODE_L_EQUALS_A)
gPlayerDpadHoldFrames++;
else
gPlayerDpadHoldFrames = 0;
@@ -367,7 +367,7 @@ static void HandleInputChooseTarget(void)
if (gMain.newKeys & A_BUTTON)
{
PlaySE(SE_SELECT);
- gSprites[gBattlerSpriteIds[gMultiUsePlayerCursor]].callback = sub_8039B2C;
+ gSprites[gBattlerSpriteIds[gMultiUsePlayerCursor]].callback = SpriteCb_HideAsMoveTarget;
BtlController_EmitTwoReturnValues(1, 10, gMoveSelectionCursor[gActiveBattler] | (gMultiUsePlayerCursor << 8));
EndBounceEffect(gMultiUsePlayerCursor, BOUNCE_HEALTHBOX);
PlayerBufferExecCompleted();
@@ -375,7 +375,7 @@ static void HandleInputChooseTarget(void)
else if (gMain.newKeys & B_BUTTON || gPlayerDpadHoldFrames > 59)
{
PlaySE(SE_SELECT);
- gSprites[gBattlerSpriteIds[gMultiUsePlayerCursor]].callback = sub_8039B2C;
+ gSprites[gBattlerSpriteIds[gMultiUsePlayerCursor]].callback = SpriteCb_HideAsMoveTarget;
gBattlerControllerFuncs[gActiveBattler] = HandleInputChooseMove;
DoBounceEffect(gActiveBattler, BOUNCE_HEALTHBOX, 7, 1);
DoBounceEffect(gActiveBattler, BOUNCE_MON, 7, 1);
@@ -384,7 +384,7 @@ static void HandleInputChooseTarget(void)
else if (gMain.newKeys & (DPAD_LEFT | DPAD_UP))
{
PlaySE(SE_SELECT);
- gSprites[gBattlerSpriteIds[gMultiUsePlayerCursor]].callback = sub_8039B2C;
+ gSprites[gBattlerSpriteIds[gMultiUsePlayerCursor]].callback = SpriteCb_HideAsMoveTarget;
do
{
@@ -421,12 +421,12 @@ static void HandleInputChooseTarget(void)
if (gAbsentBattlerFlags & gBitTable[gMultiUsePlayerCursor])
i = 0;
} while (i == 0);
- gSprites[gBattlerSpriteIds[gMultiUsePlayerCursor]].callback = sub_8039AD8;
+ gSprites[gBattlerSpriteIds[gMultiUsePlayerCursor]].callback = SpriteCb_ShowAsMoveTarget;
}
else if (gMain.newKeys & (DPAD_RIGHT | DPAD_DOWN))
{
PlaySE(SE_SELECT);
- gSprites[gBattlerSpriteIds[gMultiUsePlayerCursor]].callback = sub_8039B2C;
+ gSprites[gBattlerSpriteIds[gMultiUsePlayerCursor]].callback = SpriteCb_HideAsMoveTarget;
do
{
@@ -463,7 +463,7 @@ static void HandleInputChooseTarget(void)
if (gAbsentBattlerFlags & gBitTable[gMultiUsePlayerCursor])
i = 0;
} while (i == 0);
- gSprites[gBattlerSpriteIds[gMultiUsePlayerCursor]].callback = sub_8039AD8;
+ gSprites[gBattlerSpriteIds[gMultiUsePlayerCursor]].callback = SpriteCb_ShowAsMoveTarget;
}
}
@@ -536,7 +536,7 @@ static void HandleInputChooseMove(void)
else
gMultiUsePlayerCursor = GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT);
- gSprites[gBattlerSpriteIds[gMultiUsePlayerCursor]].callback = sub_8039AD8;
+ gSprites[gBattlerSpriteIds[gMultiUsePlayerCursor]].callback = SpriteCb_ShowAsMoveTarget;
}
}
else if (gMain.newKeys & B_BUTTON || gPlayerDpadHoldFrames > 59)
@@ -853,7 +853,7 @@ static void sub_80586F8(void)
{
if (gReceivedRemoteLinkPlayers == 0)
{
- m4aSongNumStop(SE_HINSI);
+ m4aSongNumStop(SE_LOW_HEALTH);
gMain.inBattle = 0;
gMain.callback1 = gPreBattleCallback1;
SetMainCallback2(sub_8038D64);
@@ -866,7 +866,7 @@ static void sub_80586F8(void)
{
if (IsLinkTaskFinished())
{
- m4aSongNumStop(SE_HINSI);
+ m4aSongNumStop(SE_LOW_HEALTH);
gMain.inBattle = 0;
gMain.callback1 = gPreBattleCallback1;
SetMainCallback2(sub_8038D64);
@@ -886,16 +886,16 @@ void sub_80587B0(void)
if (IsLinkTaskFinished())
{
if (gWirelessCommType == 0)
- sub_800AC34();
+ SetCloseLinkCallback();
else
- sub_800ADF8();
+ SetLinkStandbyCallback();
gBattlerControllerFuncs[gActiveBattler] = sub_80586F8;
}
}
else
{
- m4aSongNumStop(SE_HINSI);
+ m4aSongNumStop(SE_LOW_HEALTH);
gMain.inBattle = 0;
gMain.callback1 = gPreBattleCallback1;
SetMainCallback2(gMain.savedCallback);
@@ -951,13 +951,13 @@ static void sub_805896C(void)
var = TRUE;
}
- if (var && gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].field_1_x1
- && gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].field_1_x1)
+ if (var && gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].finishedShinyMonAnim
+ && gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].finishedShinyMonAnim)
{
- gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].flag_x80 = 0;
- gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].field_1_x1 = 0;
- gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].flag_x80 = 0;
- gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].field_1_x1 = 0;
+ gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].triedShinyMonAnim = FALSE;
+ gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].finishedShinyMonAnim = FALSE;
+ gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].triedShinyMonAnim = FALSE;
+ gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].finishedShinyMonAnim = FALSE;
FreeSpriteTilesByTag(0x27F9);
FreeSpritePaletteByTag(0x27F9);
@@ -976,10 +976,13 @@ static void sub_8058B40(void)
bool32 r9 = FALSE;
bool32 r8 = FALSE;
- if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].flag_x80 && !gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].ballAnimActive)
- sub_8172EF0(gActiveBattler, &gPlayerParty[gBattlerPartyIndexes[gActiveBattler]]);
- if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].flag_x80 && !gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].ballAnimActive)
- sub_8172EF0(gActiveBattler ^ BIT_FLANK, &gPlayerParty[gBattlerPartyIndexes[gActiveBattler ^ BIT_FLANK]]);
+ if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].triedShinyMonAnim
+ && !gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].ballAnimActive)
+ TryShinyAnimation(gActiveBattler, &gPlayerParty[gBattlerPartyIndexes[gActiveBattler]]);
+
+ if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].triedShinyMonAnim
+ && !gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].ballAnimActive)
+ TryShinyAnimation(gActiveBattler ^ BIT_FLANK, &gPlayerParty[gBattlerPartyIndexes[gActiveBattler ^ BIT_FLANK]]);
if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].ballAnimActive && !gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].ballAnimActive)
{
@@ -1050,12 +1053,12 @@ static void sub_8058B40(void)
static void sub_8058EDC(void)
{
if (gSprites[gHealthboxSpriteIds[gActiveBattler]].callback == SpriteCallbackDummy
- && gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].field_1_x1
+ && gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].finishedShinyMonAnim
&& gSprites[gBattlerSpriteIds[gActiveBattler]].callback == SpriteCallbackDummy)
{
CopyBattleSpriteInvisibility(gActiveBattler);
- gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].flag_x80 = 0;
- gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].field_1_x1 = 0;
+ gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].triedShinyMonAnim = FALSE;
+ gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].finishedShinyMonAnim = FALSE;
FreeSpriteTilesByTag(0x27F9);
FreeSpritePaletteByTag(0x27F9);
@@ -1079,11 +1082,9 @@ static void sub_8058FC0(void)
static void sub_805902C(void)
{
- if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].flag_x80
+ if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].triedShinyMonAnim
&& !gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].ballAnimActive)
- {
- sub_8172EF0(gActiveBattler, &gPlayerParty[gBattlerPartyIndexes[gActiveBattler]]);
- }
+ TryShinyAnimation(gActiveBattler, &gPlayerParty[gBattlerPartyIndexes[gActiveBattler]]);
if (gSprites[gUnknown_03005D7C[gActiveBattler]].callback == SpriteCallbackDummy
&& !gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].ballAnimActive)
@@ -1361,7 +1362,7 @@ static void OpenBagAndChooseItem(void)
gBattlerControllerFuncs[gActiveBattler] = CompleteWhenChoseItem;
nullsub_35();
FreeAllWindowBuffers();
- sub_81AABB0();
+ CB2_BagMenuFromBattle();
}
}
@@ -1468,8 +1469,7 @@ static void MoveSelectionDisplayPpNumber(void)
SetPpNumbersPaletteInMoveSelection();
moveInfo = (struct ChooseMoveStruct*)(&gBattleBufferA[gActiveBattler][4]);
txtPtr = ConvertIntToDecimalStringN(gDisplayedStringBattle, moveInfo->currentPp[gMoveSelectionCursor[gActiveBattler]], STR_CONV_MODE_RIGHT_ALIGN, 2);
- txtPtr[0] = CHAR_SLASH;
- txtPtr++;
+ *(txtPtr)++ = CHAR_SLASH;
ConvertIntToDecimalStringN(txtPtr, moveInfo->maxPp[gMoveSelectionCursor[gActiveBattler]], STR_CONV_MODE_RIGHT_ALIGN, 2);
BattlePutTextOnWindow(gDisplayedStringBattle, 9);
@@ -1481,12 +1481,9 @@ static void MoveSelectionDisplayMoveType(void)
struct ChooseMoveStruct *moveInfo = (struct ChooseMoveStruct*)(&gBattleBufferA[gActiveBattler][4]);
txtPtr = StringCopy(gDisplayedStringBattle, gText_MoveInterfaceType);
- txtPtr[0] = EXT_CTRL_CODE_BEGIN;
- txtPtr++;
- txtPtr[0] = 6;
- txtPtr++;
- txtPtr[0] = 1;
- txtPtr++;
+ *(txtPtr)++ = EXT_CTRL_CODE_BEGIN;
+ *(txtPtr)++ = EXT_CTRL_CODE_SIZE;
+ *(txtPtr)++ = 1;
StringCopy(txtPtr, gTypeNames[gBattleMoves[moveInfo->moves[gMoveSelectionCursor[gActiveBattler]]].type]);
BattlePutTextOnWindow(gDisplayedStringBattle, 10);
@@ -2396,7 +2393,7 @@ static void PlayerHandleFaintAnimation(void)
{
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState = 0;
HandleLowHpMusicChange(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], gActiveBattler);
- PlaySE12WithPanning(SE_POKE_DEAD, SOUND_PAN_ATTACKER);
+ PlaySE12WithPanning(SE_FAINT, SOUND_PAN_ATTACKER);
gSprites[gBattlerSpriteIds[gActiveBattler]].data[1] = 0;
gSprites[gBattlerSpriteIds[gActiveBattler]].data[2] = 5;
gSprites[gBattlerSpriteIds[gActiveBattler]].callback = sub_8039C00;
diff --git a/src/battle_controller_player_partner.c b/src/battle_controller_player_partner.c
index 21c1fdd5b..af6b739cc 100644
--- a/src/battle_controller_player_partner.c
+++ b/src/battle_controller_player_partner.c
@@ -544,10 +544,10 @@ static void sub_81BB9A0(void)
static void sub_81BB9F4(void)
{
- if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].field_1_x1)
+ if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].finishedShinyMonAnim)
{
- gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].flag_x80 = 0;
- gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].field_1_x1 = 0;
+ gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].triedShinyMonAnim = FALSE;
+ gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].finishedShinyMonAnim = FALSE;
FreeSpriteTilesByTag(0x27F9);
FreeSpritePaletteByTag(0x27F9);
@@ -565,10 +565,10 @@ static void sub_81BB9F4(void)
static void sub_81BBAE8(void)
{
- if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].flag_x80
+ if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].triedShinyMonAnim
&& !gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].ballAnimActive)
{
- sub_8172EF0(gActiveBattler, &gPlayerParty[gBattlerPartyIndexes[gActiveBattler]]);
+ TryShinyAnimation(gActiveBattler, &gPlayerParty[gBattlerPartyIndexes[gActiveBattler]]);
}
if (gSprites[gUnknown_03005D7C[gActiveBattler]].callback == SpriteCallbackDummy
@@ -1371,7 +1371,7 @@ static void PlayerPartnerHandleFaintAnimation(void)
{
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState = 0;
HandleLowHpMusicChange(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], gActiveBattler);
- PlaySE12WithPanning(SE_POKE_DEAD, SOUND_PAN_ATTACKER);
+ PlaySE12WithPanning(SE_FAINT, SOUND_PAN_ATTACKER);
gSprites[gBattlerSpriteIds[gActiveBattler]].data[1] = 0;
gSprites[gBattlerSpriteIds[gActiveBattler]].data[2] = 5;
gSprites[gBattlerSpriteIds[gActiveBattler]].callback = sub_8039C00;
diff --git a/src/battle_controller_recorded_opponent.c b/src/battle_controller_recorded_opponent.c
index 7c1bff64a..ca7cd4adc 100644
--- a/src/battle_controller_recorded_opponent.c
+++ b/src/battle_controller_recorded_opponent.c
@@ -239,15 +239,15 @@ static void sub_8186678(void)
{
if (GetBattlerPosition(gActiveBattler) == B_POSITION_OPPONENT_LEFT)
{
- if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].field_1_x1)
+ if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].finishedShinyMonAnim)
return;
- if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].field_1_x1)
+ if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].finishedShinyMonAnim)
return;
- gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].flag_x80 = 0;
- gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].field_1_x1 = 0;
- gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].flag_x80 = 0;
- gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].field_1_x1 = 0;
+ gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].triedShinyMonAnim = FALSE;
+ gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].finishedShinyMonAnim = FALSE;
+ gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].triedShinyMonAnim = FALSE;
+ gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].finishedShinyMonAnim = FALSE;
FreeSpriteTilesByTag(0x27F9);
FreeSpritePaletteByTag(0x27F9);
}
@@ -262,10 +262,13 @@ static void sub_818686C(void)
bool32 r9 = FALSE;
bool32 r8 = FALSE;
- if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].flag_x80 && !gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].ballAnimActive)
- sub_8172EF0(gActiveBattler, &gEnemyParty[gBattlerPartyIndexes[gActiveBattler]]);
- if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].flag_x80 && !gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].ballAnimActive)
- sub_8172EF0(gActiveBattler ^ BIT_FLANK, &gEnemyParty[gBattlerPartyIndexes[gActiveBattler ^ BIT_FLANK]]);
+ if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].triedShinyMonAnim
+ && !gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].ballAnimActive)
+ TryShinyAnimation(gActiveBattler, &gEnemyParty[gBattlerPartyIndexes[gActiveBattler]]);
+
+ if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].triedShinyMonAnim
+ && !gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].ballAnimActive)
+ TryShinyAnimation(gActiveBattler ^ BIT_FLANK, &gEnemyParty[gBattlerPartyIndexes[gActiveBattler ^ BIT_FLANK]]);
if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].ballAnimActive && !gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].ballAnimActive)
{
@@ -348,16 +351,16 @@ static void sub_8186C48(void)
if (gSprites[gBattlerSpriteIds[gActiveBattler]].callback == SpriteCallbackDummy
&& gSprites[gBattlerSpriteIds[gActiveBattler]].pos2.x == 0)
{
- if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].flag_x80)
+ if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].triedShinyMonAnim)
{
- sub_8172EF0(gActiveBattler, &gEnemyParty[gBattlerPartyIndexes[gActiveBattler]]);
+ TryShinyAnimation(gActiveBattler, &gEnemyParty[gBattlerPartyIndexes[gActiveBattler]]);
}
else
{
- if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].field_1_x1)
+ if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].finishedShinyMonAnim)
{
- gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].flag_x80 = 0;
- gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].field_1_x1 = 0;
+ gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].triedShinyMonAnim = FALSE;
+ gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].finishedShinyMonAnim = FALSE;
FreeSpriteTilesByTag(0x27F9);
FreeSpritePaletteByTag(0x27F9);
RecordedOpponentBufferExecCompleted();
@@ -455,11 +458,11 @@ static void sub_8186F14(void)
static void sub_8186F94(void)
{
- if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].field_1_x1
+ if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].finishedShinyMonAnim
&& gSprites[gBattlerSpriteIds[gActiveBattler]].callback == SpriteCallbackDummy)
{
- gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].flag_x80 = 0;
- gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].field_1_x1 = 0;
+ gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].triedShinyMonAnim = FALSE;
+ gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].finishedShinyMonAnim = FALSE;
FreeSpriteTilesByTag(0x27F9);
FreeSpritePaletteByTag(0x27F9);
@@ -477,10 +480,8 @@ static void sub_8186F94(void)
static void sub_8187084(void)
{
if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].ballAnimActive
- && !gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].flag_x80)
- {
- sub_8172EF0(gActiveBattler, &gEnemyParty[gBattlerPartyIndexes[gActiveBattler]]);
- }
+ && !gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].triedShinyMonAnim)
+ TryShinyAnimation(gActiveBattler, &gEnemyParty[gBattlerPartyIndexes[gActiveBattler]]);
if (gSprites[gUnknown_03005D7C[gActiveBattler]].callback == SpriteCallbackDummy
&& !gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].ballAnimActive)
@@ -1229,9 +1230,9 @@ static void RecordedOpponentHandleDrawTrainerPic(void)
else
{
xPos = 176;
- if (gTrainerBattleOpponent_A == TRAINER_OPPONENT_C00)
+ if (gTrainerBattleOpponent_A == TRAINER_UNION_ROOM)
{
- trainerPicId = sub_8068B48();
+ trainerPicId = GetUnionRoomTrainerPic();
}
else
{
@@ -1284,7 +1285,7 @@ static void RecordedOpponentHandleFaintAnimation(void)
if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].specialAnimActive)
{
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState = 0;
- PlaySE12WithPanning(SE_POKE_DEAD, SOUND_PAN_TARGET);
+ PlaySE12WithPanning(SE_FAINT, SOUND_PAN_TARGET);
gSprites[gBattlerSpriteIds[gActiveBattler]].callback = SpriteCB_FaintOpponentMon;
gBattlerControllerFuncs[gActiveBattler] = sub_8186D58;
}
diff --git a/src/battle_controller_recorded_player.c b/src/battle_controller_recorded_player.c
index 5f3b3ea65..72af27d5e 100644
--- a/src/battle_controller_recorded_player.c
+++ b/src/battle_controller_recorded_player.c
@@ -224,14 +224,14 @@ static void sub_8189AA0(void)
}
}
- if (r6 && gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].field_1_x1
- && gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].field_1_x1)
+ if (r6 && gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].finishedShinyMonAnim
+ && gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].finishedShinyMonAnim)
{
- gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].flag_x80 = 0;
- gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].field_1_x1 = 0;
+ gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].triedShinyMonAnim = FALSE;
+ gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].finishedShinyMonAnim = FALSE;
- gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].flag_x80 = 0;
- gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].field_1_x1 = 0;
+ gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].triedShinyMonAnim = FALSE;
+ gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].finishedShinyMonAnim = FALSE;
FreeSpriteTilesByTag(0x27F9);
FreeSpritePaletteByTag(0x27F9);
@@ -277,16 +277,13 @@ static void sub_8189D40(void)
if (GetBattlerPosition(gActiveBattler) == B_POSITION_PLAYER_LEFT)
{
- if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].flag_x80
+ if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].triedShinyMonAnim
&& !gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].ballAnimActive)
- {
- sub_8172EF0(gActiveBattler, &gPlayerParty[gBattlerPartyIndexes[gActiveBattler]]);
- }
- if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].flag_x80
+ TryShinyAnimation(gActiveBattler, &gPlayerParty[gBattlerPartyIndexes[gActiveBattler]]);
+
+ if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].triedShinyMonAnim
&& !gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].ballAnimActive)
- {
- sub_8172EF0(gActiveBattler ^ BIT_FLANK, &gPlayerParty[gBattlerPartyIndexes[gActiveBattler ^ BIT_FLANK]]);
- }
+ TryShinyAnimation(gActiveBattler ^ BIT_FLANK, &gPlayerParty[gBattlerPartyIndexes[gActiveBattler ^ BIT_FLANK]]);
}
if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].ballAnimActive
@@ -439,10 +436,10 @@ static void sub_818A328(void)
static void sub_818A37C(void)
{
- if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].field_1_x1)
+ if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].finishedShinyMonAnim)
{
- gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].flag_x80 = 0;
- gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].field_1_x1 = 0;
+ gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].triedShinyMonAnim = FALSE;
+ gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].finishedShinyMonAnim = FALSE;
FreeSpriteTilesByTag(0x27F9);
FreeSpritePaletteByTag(0x27F9);
@@ -460,10 +457,10 @@ static void sub_818A37C(void)
static void sub_818A470(void)
{
- if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].flag_x80
- && !gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].ballAnimActive)
+ if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].triedShinyMonAnim
+ && !gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].ballAnimActive)
{
- sub_8172EF0(gActiveBattler, &gPlayerParty[gBattlerPartyIndexes[gActiveBattler]]);
+ TryShinyAnimation(gActiveBattler, &gPlayerParty[gBattlerPartyIndexes[gActiveBattler]]);
}
if (gSprites[gUnknown_03005D7C[gActiveBattler]].callback == SpriteCallbackDummy
@@ -1286,7 +1283,7 @@ static void RecordedPlayerHandleFaintAnimation(void)
{
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState = 0;
HandleLowHpMusicChange(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], gActiveBattler);
- PlaySE12WithPanning(SE_POKE_DEAD, -64);
+ PlaySE12WithPanning(SE_FAINT, -64);
gSprites[gBattlerSpriteIds[gActiveBattler]].data[1] = 0;
gSprites[gBattlerSpriteIds[gActiveBattler]].data[2] = 5;
gSprites[gBattlerSpriteIds[gActiveBattler]].callback = sub_8039C00;
diff --git a/src/battle_controller_safari.c b/src/battle_controller_safari.c
index c39b904c9..70e41cf8d 100644
--- a/src/battle_controller_safari.c
+++ b/src/battle_controller_safari.c
@@ -389,7 +389,7 @@ static void SafariHandleSuccessBallThrowAnim(void)
{
gBattleSpritesDataPtr->animationData->ballThrowCaseId = BALL_3_SHAKES_SUCCESS;
gDoingBattleAnim = TRUE;
- InitAndLaunchSpecialAnimation(gActiveBattler, gActiveBattler, GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT), B_ANIM_SAFARI_BALL_THROW);
+ InitAndLaunchSpecialAnimation(gActiveBattler, gActiveBattler, GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT), B_ANIM_BALL_THROW_WITH_TRAINER);
gBattlerControllerFuncs[gActiveBattler] = CompleteOnSpecialAnimDone;
}
@@ -399,7 +399,7 @@ static void SafariHandleBallThrowAnim(void)
gBattleSpritesDataPtr->animationData->ballThrowCaseId = ballThrowCaseId;
gDoingBattleAnim = TRUE;
- InitAndLaunchSpecialAnimation(gActiveBattler, gActiveBattler, GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT), B_ANIM_SAFARI_BALL_THROW);
+ InitAndLaunchSpecialAnimation(gActiveBattler, gActiveBattler, GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT), B_ANIM_BALL_THROW_WITH_TRAINER);
gBattlerControllerFuncs[gActiveBattler] = CompleteOnSpecialAnimDone;
}
diff --git a/src/battle_controller_wally.c b/src/battle_controller_wally.c
index a5b1ae2f7..aa50bc159 100644
--- a/src/battle_controller_wally.c
+++ b/src/battle_controller_wally.c
@@ -285,10 +285,13 @@ static void CompleteOnChosenItem(void)
static void sub_816864C(void)
{
- if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].flag_x80 && !gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].ballAnimActive)
- sub_8172EF0(gActiveBattler, &gPlayerParty[gBattlerPartyIndexes[gActiveBattler]]);
- if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].flag_x80 && !gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].ballAnimActive)
- sub_8172EF0(gActiveBattler ^ BIT_FLANK, &gPlayerParty[gBattlerPartyIndexes[gActiveBattler ^ BIT_FLANK]]);
+ if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].triedShinyMonAnim
+ && !gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].ballAnimActive)
+ TryShinyAnimation(gActiveBattler, &gPlayerParty[gBattlerPartyIndexes[gActiveBattler]]);
+
+ if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].triedShinyMonAnim
+ && !gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].ballAnimActive)
+ TryShinyAnimation(gActiveBattler ^ BIT_FLANK, &gPlayerParty[gBattlerPartyIndexes[gActiveBattler ^ BIT_FLANK]]);
if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].ballAnimActive
&& !gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].ballAnimActive
@@ -320,14 +323,14 @@ static void sub_8168818(void)
if (gSprites[gHealthboxSpriteIds[gActiveBattler]].callback == SpriteCallbackDummy)
r4 = TRUE;
- if (r4 && gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].field_1_x1
- && gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].field_1_x1)
+ if (r4 && gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].finishedShinyMonAnim
+ && gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].finishedShinyMonAnim)
{
- gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].flag_x80 = 0;
- gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].field_1_x1 = 0;
+ gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].triedShinyMonAnim = FALSE;
+ gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].finishedShinyMonAnim = FALSE;
- gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].flag_x80 = 0;
- gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].field_1_x1 = 0;
+ gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].triedShinyMonAnim = FALSE;
+ gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].finishedShinyMonAnim = FALSE;
FreeSpriteTilesByTag(0x27F9);
FreeSpritePaletteByTag(0x27F9);
@@ -1076,7 +1079,7 @@ static void WallyHandleSuccessBallThrowAnim(void)
{
gBattleSpritesDataPtr->animationData->ballThrowCaseId = BALL_3_SHAKES_SUCCESS;
gDoingBattleAnim = TRUE;
- InitAndLaunchSpecialAnimation(gActiveBattler, gActiveBattler, GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT), B_ANIM_SAFARI_BALL_THROW);
+ InitAndLaunchSpecialAnimation(gActiveBattler, gActiveBattler, GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT), B_ANIM_BALL_THROW_WITH_TRAINER);
gBattlerControllerFuncs[gActiveBattler] = CompleteOnFinishedAnimation;
}
@@ -1086,7 +1089,7 @@ static void WallyHandleBallThrowAnim(void)
gBattleSpritesDataPtr->animationData->ballThrowCaseId = ballThrowCaseId;
gDoingBattleAnim = TRUE;
- InitAndLaunchSpecialAnimation(gActiveBattler, gActiveBattler, GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT), B_ANIM_SAFARI_BALL_THROW);
+ InitAndLaunchSpecialAnimation(gActiveBattler, gActiveBattler, GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT), B_ANIM_BALL_THROW_WITH_TRAINER);
gBattlerControllerFuncs[gActiveBattler] = CompleteOnFinishedAnimation;
}
diff --git a/src/battle_controllers.c b/src/battle_controllers.c
index b411c12f6..7f78c1ac9 100644
--- a/src/battle_controllers.c
+++ b/src/battle_controllers.c
@@ -6,6 +6,7 @@
#include "battle_message.h"
#include "cable_club.h"
#include "link.h"
+#include "link_rfu.h"
#include "party_menu.h"
#include "pokemon.h"
#include "recorded_battle.h"
@@ -33,10 +34,10 @@ void HandleLinkBattleSetup(void)
if (gBattleTypeFlags & BATTLE_TYPE_LINK)
{
if (gWirelessCommType)
- sub_800B488();
+ SetWirelessCommType1();
if (!gReceivedRemoteLinkPlayers)
OpenLink();
- CreateTask(task00_08081A90, 0);
+ CreateTask(Task_WaitForLinkPlayerConnection, 0);
CreateTasksForSendRecvLinkBuffers();
}
}
@@ -827,7 +828,7 @@ void sub_8033648(void)
if (gReceivedRemoteLinkPlayers != 0 && (gBattleTypeFlags & BATTLE_TYPE_20))
{
- sub_8011BD0();
+ DestroyTask_RfuIdle();
for (i = 0; i < GetLinkPlayerCount(); i++)
{
if (GetBlockReceivedStatus() & gBitTable[i])
diff --git a/src/battle_dome.c b/src/battle_dome.c
index 6f3d111ba..452997ebd 100644
--- a/src/battle_dome.c
+++ b/src/battle_dome.c
@@ -29,7 +29,7 @@
#include "international_string_util.h"
#include "trainer_pokemon_sprites.h"
#include "scanline_effect.h"
-#include "script_pokemon_util_80F87D8.h"
+#include "script_pokemon_util.h"
#include "graphics.h"
#include "constants/battle_dome.h"
#include "constants/frontier_util.h"
@@ -49,7 +49,7 @@
// An 'Info Card' is a trainer or match information page that can be viewed on the Tourney Tree
struct TourneyTreeInfoCard
{
- u8 spriteIds[NUM_INFOCARD_SPRITES];
+ u8 spriteIds[NUM_INFOCARD_SPRITES];
u8 pos;
u8 tournamentIds[NUM_INFOCARD_TRAINERS];
};
@@ -499,7 +499,7 @@ static const u8 sBattleStyleMovePoints[MOVES_COUNT][NUM_MOVE_POINT_TYPES] =
[MOVE_PSYCHO_BOOST] = {[MOVE_POINTS_DMG] = 1, [MOVE_POINTS_POWERFUL] = 1, [MOVE_POINTS_STRONG] = 1, [MOVE_POINTS_LOW_PP] = 1, [MOVE_POINTS_EFFECT] = 1},
};
-// This array is searched in-order to determine what battle style a tourney trainer uses.
+// This array is searched in-order to determine what battle style a tourney trainer uses.
// If the sum of the points for the party's moves meets/exceeds all the point totals of an element, then they use that battle style
static const u8 sBattleStyleThresholds[NUM_BATTLE_STYLES - 1][NUM_MOVE_POINT_TYPES] =
{
@@ -1188,11 +1188,11 @@ static const u8 sIdToMatchNumber[DOME_TOURNAMENT_TRAINERS_COUNT][DOME_ROUNDS_COU
{ 7, 11, 13, 14},
};
-static const u8 sLastMatchCardNum[DOME_ROUNDS_COUNT] =
+static const u8 sLastMatchCardNum[DOME_ROUNDS_COUNT] =
{
- [DOME_ROUND1] = 23,
- [DOME_ROUND2] = 27,
- [DOME_SEMIFINAL] = 29,
+ [DOME_ROUND1] = 23,
+ [DOME_ROUND2] = 27,
+ [DOME_SEMIFINAL] = 29,
[DOME_FINAL] = 30
};
@@ -1324,12 +1324,12 @@ static const u8 sSpeciesNameTextYCoords[] = {0, 4, 0};
// Offsets within sBattleDomeOpponentStatsTexts for stat combinations
// SPDEF has no offset because by then all stat combinations have been reached, so it has no combination texts
-static const u8 sStatTextOffsets[NUM_STATS - 1] =
+static const u8 sStatTextOffsets[NUM_STATS - 1] =
{
- DOME_TEXT_HP,
- DOME_TEXT_ATK,
- DOME_TEXT_DEF,
- DOME_TEXT_SPEED,
+ DOME_TEXT_HP,
+ DOME_TEXT_ATK,
+ DOME_TEXT_DEF,
+ DOME_TEXT_SPEED,
DOME_TEXT_SPATK
};
@@ -1421,7 +1421,7 @@ static const u8 sTrainerNamePositions[DOME_TOURNAMENT_TRAINERS_COUNT][2] =
static const u8 sTourneyTreePokeballCoords[DOME_TOURNAMENT_TRAINERS_COUNT + DOME_TOURNAMENT_MATCHES_COUNT][2] =
{
{ 68, 33}, // Left side trainers
- { 68, 49},
+ { 68, 49},
{ 68, 65},
{ 68, 81},
{ 68, 97},
@@ -1495,7 +1495,7 @@ static const u8 sTourneyTreePokeballCoords[DOME_TOURNAMENT_TRAINERS_COUNT + DOME
{.src = 0x6021, .y = 0x10, .x = 0x09}, \
{.src = 0x6023, .y = 0x10, .x = 0x0a}, \
{.src = 0x6047, .y = 0x11, .x = 0x0a}, \
- {.src = lastSrc, .y = 0x11, .x = 0x0b},
+ {.src = lastSrc, .y = 0x11, .x = 0x0b},
#define LINESECTION_ROUND1_TRAINER4(lastSrc) \
{.src = 0x602b, .y = 0x12, .x = 0x09}, \
@@ -2395,7 +2395,7 @@ static void InitDomeTrainers(void)
rankingScores[i] += (monTypesCount * monLevel) / 20;
}
- // Seed tourney trainers according to their ranking
+ // Seed tourney trainers according to their ranking
for (i = 0; i < DOME_TOURNAMENT_TRAINERS_COUNT - 1; i++)
{
for (j = i + 1; j < DOME_TOURNAMENT_TRAINERS_COUNT; j++)
@@ -2676,7 +2676,7 @@ static int SelectOpponentMonsFromParty(int *partyMovePoints, bool8 allowRandom)
partyPositions[i] = i;
// All party mons have equal move score totals, choose randomly
- if (partyMovePoints[0] == partyMovePoints[1]
+ if (partyMovePoints[0] == partyMovePoints[1]
&& partyMovePoints[0] == partyMovePoints[2])
{
if (allowRandom)
@@ -2852,8 +2852,8 @@ static int GetTypeEffectivenessPoints(int move, int targetSpecies, int arg2)
NAKED
static int GetTypeEffectivenessPoints(int move, int species, int arg2)
{
- asm_unified("\n\
- push {r4-r7,lr}\n\
+ asm_unified(
+ "push {r4-r7,lr}\n\
mov r7, r10\n\
mov r6, r9\n\
mov r5, r8\n\
@@ -3085,8 +3085,7 @@ _08190156:\n\
mov r10, r5\n\
pop {r4-r7}\n\
pop {r1}\n\
- bx r1\n\
- ");
+ bx r1");
}
#endif // NONMATCHING
@@ -4538,7 +4537,7 @@ static void DisplayTrainerInfoOnCard(u8 flags, u8 trainerTourneyId)
if (flags & MOVE_CARD)
gSprites[sInfoCard->spriteIds[2 + i + arrId]].invisible = TRUE;
}
-
+
// Initialize the text printer
textPrinter.fontId = 2;
textPrinter.x = 0;
@@ -4547,7 +4546,7 @@ static void DisplayTrainerInfoOnCard(u8 flags, u8 trainerTourneyId)
textPrinter.currentY = textPrinter.y;
textPrinter.letterSpacing = 2;
textPrinter.lineSpacing = 0;
- textPrinter.unk = 0;
+ textPrinter.style = 0;
textPrinter.fgColor = TEXT_DYNAMIC_COLOR_5;
textPrinter.bgColor = TEXT_COLOR_TRANSPARENT;
textPrinter.shadowColor = TEXT_DYNAMIC_COLOR_4;
@@ -4692,7 +4691,7 @@ static void DisplayTrainerInfoOnCard(u8 flags, u8 trainerTourneyId)
allocatedArray[NUM_STATS] += allocatedArray[STAT_HP];
// Add the EVs with the nature modifier for this mon and and track number of negative natures
- for (j = 0; j < NUM_EV_STATS; j++)
+ for (j = 0; j < NUM_NATURE_STATS; j++)
{
if (trainerId == TRAINER_FRONTIER_BRAIN)
nature = GetFrontierBrainMonNature(i);
@@ -4706,7 +4705,7 @@ static void DisplayTrainerInfoOnCard(u8 flags, u8 trainerTourneyId)
else if (gNatureStatTable[nature][j] < 0)
{
allocatedArray[j + NUM_STATS + 1] += (allocatedArray[j + 1] * 90) / 100;
- allocatedArray[j + NUM_STATS + NUM_EV_STATS + 2]++;
+ allocatedArray[j + NUM_STATS + NUM_NATURE_STATS + 2]++;
}
else
{
@@ -4742,7 +4741,7 @@ static void DisplayTrainerInfoOnCard(u8 flags, u8 trainerTourneyId)
}
allocatedArray[NUM_STATS] += allocatedArray[STAT_HP];
- for (j = 0; j < NUM_EV_STATS; j++)
+ for (j = 0; j < NUM_NATURE_STATS; j++)
{
nature = gFacilityTrainerMons[DOME_MONS[trainerTourneyId][i]].nature;
if (gNatureStatTable[nature][j] > 0)
@@ -4752,7 +4751,7 @@ static void DisplayTrainerInfoOnCard(u8 flags, u8 trainerTourneyId)
else if (gNatureStatTable[nature][j] < 0)
{
allocatedArray[j + NUM_STATS + 1] += (allocatedArray[j + 1] * 90) / 100;
- allocatedArray[j + NUM_STATS + NUM_EV_STATS + 2]++;
+ allocatedArray[j + NUM_STATS + NUM_NATURE_STATS + 2]++;
}
else
{
@@ -4776,7 +4775,7 @@ static void DisplayTrainerInfoOnCard(u8 flags, u8 trainerTourneyId)
// If 2 good stats have been found already, choose which to use
if (i == 2)
{
-
+
if (allocatedArray[6] < allocatedArray[k])
{
if (allocatedArray[7] < allocatedArray[k])
@@ -4893,7 +4892,7 @@ static int BufferDomeWinString(u8 matchNum, u8 *tournamentIds)
for (i = sCompetitorRangeByMatch[matchNum][0]; i < sCompetitorRangeByMatch[matchNum][0] + sCompetitorRangeByMatch[matchNum][1]; i++)
{
tournamentId = sTourneyTreeTrainerIds2[i];
-
+
if (DOME_TRAINERS[tournamentId].isEliminated
&& DOME_TRAINERS[tournamentId].eliminatedAt >= sCompetitorRangeByMatch[matchNum][2])
{
@@ -5080,7 +5079,7 @@ static void DisplayMatchInfoOnCard(u8 flags, u8 matchNo)
textPrinter.currentY = textPrinter.y;
textPrinter.letterSpacing = 0;
textPrinter.lineSpacing = 0;
- textPrinter.unk = 0;
+ textPrinter.style = 0;
textPrinter.fgColor = TEXT_DYNAMIC_COLOR_5;
textPrinter.bgColor = TEXT_COLOR_TRANSPARENT;
textPrinter.shadowColor = TEXT_DYNAMIC_COLOR_4;
@@ -5353,7 +5352,7 @@ static void ResolveDomeRoundWinners(void)
DOME_TRAINERS[TrainerIdToTournamentId(gTrainerBattleOpponent_A)].isEliminated = TRUE;
DOME_TRAINERS[TrainerIdToTournamentId(gTrainerBattleOpponent_A)].eliminatedAt = gSaveBlock2Ptr->frontier.curChallengeBattleNum;
gSaveBlock2Ptr->frontier.domeWinningMoves[TrainerIdToTournamentId(gTrainerBattleOpponent_A)] = gBattleResults.lastUsedMovePlayer;
-
+
// If the player's match was the final one, no NPC vs NPC matches to decide
if (gSaveBlock2Ptr->frontier.curChallengeBattleNum < DOME_FINAL)
DecideRoundWinners(gSaveBlock2Ptr->frontier.curChallengeBattleNum);
@@ -5363,7 +5362,7 @@ static void ResolveDomeRoundWinners(void)
DOME_TRAINERS[TrainerIdToTournamentId(TRAINER_PLAYER)].isEliminated = TRUE;
DOME_TRAINERS[TrainerIdToTournamentId(TRAINER_PLAYER)].eliminatedAt = gSaveBlock2Ptr->frontier.curChallengeBattleNum;
gSaveBlock2Ptr->frontier.domeWinningMoves[TrainerIdToTournamentId(TRAINER_PLAYER)] = gBattleResults.lastUsedMoveOpponent;
-
+
if (gBattleOutcome == B_OUTCOME_FORFEITED || gSpecialVar_0x8005 == DOME_PLAYER_RETIRED)
DOME_TRAINERS[TrainerIdToTournamentId(TRAINER_PLAYER)].forfeited = TRUE;
@@ -5401,7 +5400,7 @@ static u16 GetWinningMove(int winnerTournamentId, int loserTournamentId, u8 roun
movePower = 40;
else if (movePower == 1)
movePower = 60;
- else if (moveIds[i * MAX_MON_MOVES + j] == MOVE_SELF_DESTRUCT
+ else if (moveIds[i * MAX_MON_MOVES + j] == MOVE_SELF_DESTRUCT
|| moveIds[i * MAX_MON_MOVES + j] == MOVE_EXPLOSION)
movePower /= 2;
@@ -5534,7 +5533,7 @@ static void Task_ShowTourneyTree(u8 taskId)
gTasks[taskId].tState++;
break;
case 2:
- sTilemapBuffer = AllocZeroed(0x800);
+ sTilemapBuffer = AllocZeroed(BG_SCREEN_SIZE);
LZDecompressWram(gDomeTourneyLineMask_Tilemap, sTilemapBuffer);
SetBgTilemapBuffer(1, sTilemapBuffer);
CopyBgTilemapBufferToVram(1);
@@ -5558,7 +5557,7 @@ static void Task_ShowTourneyTree(u8 taskId)
{
for (i = 0; i < ARRAY_COUNT(sTourneyTreePokeballCoords); i++)
CreateSprite(&sTourneyTreePokeballSpriteTemplate, sTourneyTreePokeballCoords[i][0], sTourneyTreePokeballCoords[i][1], 0);
-
+
if (gTasks[taskId].tIsPrevTourneyTree)
CreateSprite(&sExitButtonSpriteTemplate, 218, 12, 0);
else
@@ -5578,7 +5577,7 @@ static void Task_ShowTourneyTree(u8 taskId)
textPrinter.lineSpacing = 0;
textPrinter.currentX = GetStringCenterAlignXOffsetWithLetterSpacing(textPrinter.fontId, textPrinter.currentChar, 0x70, textPrinter.letterSpacing);
textPrinter.currentY = 1;
- textPrinter.unk = 0;
+ textPrinter.style = 0;
textPrinter.fgColor = TEXT_DYNAMIC_COLOR_5;
textPrinter.bgColor = TEXT_COLOR_TRANSPARENT;
textPrinter.shadowColor = TEXT_DYNAMIC_COLOR_4;
@@ -5698,7 +5697,7 @@ static void Task_ShowTourneyTree(u8 taskId)
gTasks[i].tState = 0;
}
ScanlineEffect_Clear();
-
+
i = 0;
while (i < 91)
{
@@ -5713,7 +5712,7 @@ static void Task_ShowTourneyTree(u8 taskId)
gScanlineEffectRegBuffers[1][i] = BGCNT_PRIORITY(1) | BGCNT_SCREENBASE(31) | BGCNT_16COLOR | BGCNT_CHARBASE(2) | BGCNT_TXT256x256;
i++;
}
-
+
ScanlineEffect_SetParams(sTourneyTreeScanlineEffectParams);
DestroyTask(taskId);
break;
@@ -5759,7 +5758,7 @@ static void Task_HandleStaticTourneyTreeInput(u8 taskId)
textPrinter.y = 0;
textPrinter.letterSpacing = 2;
textPrinter.lineSpacing = 0;
- textPrinter.unk = 0;
+ textPrinter.style = 0;
textPrinter.fgColor = TEXT_DYNAMIC_COLOR_2;
textPrinter.bgColor = TEXT_COLOR_TRANSPARENT;
textPrinter.shadowColor = TEXT_DYNAMIC_COLOR_4;
@@ -5851,67 +5850,67 @@ static void HblankCb_TourneyTree(void)
if (vCount < 42)
{
- REG_WININ = WININ_WIN0_BG_ALL | WININ_WIN0_CLR | WININ_WIN0_OBJ
+ REG_WININ = WININ_WIN0_BG_ALL | WININ_WIN0_CLR | WININ_WIN0_OBJ
| WININ_WIN1_BG_ALL | WININ_WIN1_CLR | WININ_WIN1_OBJ;
SET_WIN0H_WIN1H(0, 0);
}
else if (vCount < 50)
{
- REG_WININ = WININ_WIN0_BG0 | WININ_WIN0_BG1 | WININ_WIN0_BG3 | WININ_WIN0_OBJ | WININ_WIN0_CLR
+ REG_WININ = WININ_WIN0_BG0 | WININ_WIN0_BG1 | WININ_WIN0_BG3 | WININ_WIN0_OBJ | WININ_WIN0_CLR
| WININ_WIN1_BG0 | WININ_WIN1_BG1 | WININ_WIN1_BG3 | WININ_WIN1_OBJ | WININ_WIN1_CLR;
SET_WIN0H_WIN1H(WIN_RANGE(152, 155), WIN_RANGE(85, 88));
}
else if (vCount < 58)
{
- REG_WININ = WININ_WIN0_BG_ALL | WININ_WIN0_CLR | WININ_WIN0_OBJ
+ REG_WININ = WININ_WIN0_BG_ALL | WININ_WIN0_CLR | WININ_WIN0_OBJ
| WININ_WIN1_BG_ALL | WININ_WIN1_CLR | WININ_WIN1_OBJ;
SET_WIN0H_WIN1H(0, 0);
}
else if (vCount < 75)
{
- REG_WININ = WININ_WIN0_BG0 | WININ_WIN0_BG1 | WININ_WIN0_BG3 | WININ_WIN0_OBJ | WININ_WIN0_CLR
+ REG_WININ = WININ_WIN0_BG0 | WININ_WIN0_BG1 | WININ_WIN0_BG3 | WININ_WIN0_OBJ | WININ_WIN0_CLR
| WININ_WIN1_BG0 | WININ_WIN1_BG1 | WININ_WIN1_BG3 | WININ_WIN1_OBJ | WININ_WIN1_CLR;
SET_WIN0H_WIN1H(WIN_RANGE(144, 152), WIN_RANGE(88, 96));
}
else if (vCount < 82)
{
- REG_WININ = WININ_WIN0_BG0 | WININ_WIN0_BG1 | WININ_WIN0_BG3 | WININ_WIN0_OBJ | WININ_WIN0_CLR
+ REG_WININ = WININ_WIN0_BG0 | WININ_WIN0_BG1 | WININ_WIN0_BG3 | WININ_WIN0_OBJ | WININ_WIN0_CLR
| WININ_WIN1_BG0 | WININ_WIN1_BG1 | WININ_WIN1_BG3 | WININ_WIN1_OBJ | WININ_WIN1_CLR;
SET_WIN0H_WIN1H(WIN_RANGE(152, 155), WIN_RANGE(85, 88));
}
else if (vCount < 95)
{
- REG_WININ = WININ_WIN0_BG_ALL | WININ_WIN0_CLR | WININ_WIN0_OBJ
+ REG_WININ = WININ_WIN0_BG_ALL | WININ_WIN0_CLR | WININ_WIN0_OBJ
| WININ_WIN1_BG_ALL | WININ_WIN1_CLR | WININ_WIN1_OBJ;
SET_WIN0H_WIN1H(0, 0);
}
else if (vCount < 103)
{
- REG_WININ = WININ_WIN0_BG0 | WININ_WIN0_BG1 | WININ_WIN0_BG2 | WININ_WIN0_OBJ | WININ_WIN0_CLR
+ REG_WININ = WININ_WIN0_BG0 | WININ_WIN0_BG1 | WININ_WIN0_BG2 | WININ_WIN0_OBJ | WININ_WIN0_CLR
| WININ_WIN1_BG0 | WININ_WIN1_BG1 | WININ_WIN1_BG2 | WININ_WIN1_OBJ | WININ_WIN1_CLR;
SET_WIN0H_WIN1H(WIN_RANGE(152, 155), WIN_RANGE(85, 88));
}
else if (vCount < 119)
{
- REG_WININ = WININ_WIN0_BG0 | WININ_WIN0_BG1 | WININ_WIN0_BG2 | WININ_WIN0_OBJ | WININ_WIN0_CLR
+ REG_WININ = WININ_WIN0_BG0 | WININ_WIN0_BG1 | WININ_WIN0_BG2 | WININ_WIN0_OBJ | WININ_WIN0_CLR
| WININ_WIN1_BG0 | WININ_WIN1_BG1 | WININ_WIN1_BG2 | WININ_WIN1_OBJ | WININ_WIN1_CLR;
SET_WIN0H_WIN1H(WIN_RANGE(144, 152), WIN_RANGE(88, 96));
}
else if (vCount < 127)
{
- REG_WININ = WININ_WIN0_BG_ALL | WININ_WIN0_CLR | WININ_WIN0_OBJ
+ REG_WININ = WININ_WIN0_BG_ALL | WININ_WIN0_CLR | WININ_WIN0_OBJ
| WININ_WIN1_BG_ALL | WININ_WIN1_CLR | WININ_WIN1_OBJ;
SET_WIN0H_WIN1H(0, 0);
}
else if (vCount < 135)
{
- REG_WININ = WININ_WIN0_BG0 | WININ_WIN0_BG1 | WININ_WIN0_BG2 | WININ_WIN0_OBJ | WININ_WIN0_CLR
+ REG_WININ = WININ_WIN0_BG0 | WININ_WIN0_BG1 | WININ_WIN0_BG2 | WININ_WIN0_OBJ | WININ_WIN0_CLR
| WININ_WIN1_BG0 | WININ_WIN1_BG1 | WININ_WIN1_BG2 | WININ_WIN1_OBJ | WININ_WIN1_CLR;
SET_WIN0H_WIN1H(WIN_RANGE(152, 155), WIN_RANGE(85, 88));
}
else
{
- REG_WININ = WININ_WIN0_BG_ALL | WININ_WIN0_CLR | WININ_WIN0_OBJ
+ REG_WININ = WININ_WIN0_BG_ALL | WININ_WIN0_CLR | WININ_WIN0_OBJ
| WININ_WIN1_BG_ALL | WININ_WIN1_CLR | WININ_WIN1_OBJ;
SET_WIN0H_WIN1H(0, 0);
}
diff --git a/src/battle_factory.c b/src/battle_factory.c
index 913b1b1a0..940e71f7d 100644
--- a/src/battle_factory.c
+++ b/src/battle_factory.c
@@ -39,7 +39,7 @@ static void GenerateInitialRentalMons(void);
static void GetOpponentMostCommonMonType(void);
static void GetOpponentBattleStyle(void);
static void RestorePlayerPartyHeldItems(void);
-static u16 GetMonSetId(u8 lvlMode, u8 challengeNum, bool8 arg2);
+static u16 GetFactoryMonId(u8 lvlMode, u8 challengeNum, bool8 arg2);
static u8 GetMoveBattleStyle(u16 move);
// Const rom data.
@@ -159,24 +159,27 @@ static const u8 sFixedIVTable[][2] =
{31, 31},
};
-static const u16 sMonsToChooseFrom[][2] =
-{
- {0x006e, 0x00c7},
- {0x00a2, 0x010a},
- {0x010b, 0x0173},
- {0x0174, 0x01d3},
- {0x01d4, 0x0233},
- {0x0234, 0x0293},
- {0x0294, 0x02f3},
- {0x0174, 0x0351},
- {0x0174, 0x01d3},
- {0x01d4, 0x0233},
- {0x0234, 0x0293},
- {0x0294, 0x02f3},
- {0x0174, 0x0371},
- {0x0174, 0x0371},
- {0x0174, 0x0371},
- {0x0174, 0x0371},
+static const u16 sInitialRentalMonRanges[][2] =
+{
+ // Level 50
+ {FRONTIER_MON_GRIMER, FRONTIER_MON_FURRET_1}, // 110 - 199
+ {FRONTIER_MON_DELCATTY_1, FRONTIER_MON_CLOYSTER_1}, // 162 - 266
+ {FRONTIER_MON_DELCATTY_2, FRONTIER_MON_CLOYSTER_2}, // 267 - 371
+ {FRONTIER_MON_DUGTRIO_1, FRONTIER_MON_SLAKING_1}, // 372 - 467
+ {FRONTIER_MON_DUGTRIO_2, FRONTIER_MON_SLAKING_2}, // 468 - 563
+ {FRONTIER_MON_DUGTRIO_3, FRONTIER_MON_SLAKING_3}, // 564 - 659
+ {FRONTIER_MON_DUGTRIO_4, FRONTIER_MON_SLAKING_4}, // 660 - 755
+ {FRONTIER_MON_DUGTRIO_1, FRONTIER_MONS_HIGH_TIER}, // 372 - 849
+
+ // Open level
+ {FRONTIER_MON_DUGTRIO_1, FRONTIER_MON_SLAKING_1}, // 372 - 467
+ {FRONTIER_MON_DUGTRIO_2, FRONTIER_MON_SLAKING_2}, // 468 - 563
+ {FRONTIER_MON_DUGTRIO_3, FRONTIER_MON_SLAKING_3}, // 564 - 659
+ {FRONTIER_MON_DUGTRIO_4, FRONTIER_MON_SLAKING_4}, // 660 - 755
+ {FRONTIER_MON_DUGTRIO_1, NUM_FRONTIER_MONS - 1}, // 372 - 881
+ {FRONTIER_MON_DUGTRIO_1, NUM_FRONTIER_MONS - 1}, // 372 - 881
+ {FRONTIER_MON_DUGTRIO_1, NUM_FRONTIER_MONS - 1}, // 372 - 881
+ {FRONTIER_MON_DUGTRIO_1, NUM_FRONTIER_MONS - 1}, // 372 - 881
};
// code
@@ -320,24 +323,24 @@ static void GenerateOpponentMons(void)
i = 0;
while (i != FRONTIER_PARTY_SIZE)
{
- u16 monSetId = GetMonSetId(lvlMode, challengeNum, FALSE);
- if (gFacilityTrainerMons[monSetId].species == SPECIES_UNOWN)
+ u16 monId = GetFactoryMonId(lvlMode, challengeNum, FALSE);
+ if (gFacilityTrainerMons[monId].species == SPECIES_UNOWN)
continue;
for (j = 0; j < 6; j++)
{
- if (gFacilityTrainerMons[monSetId].species == gFacilityTrainerMons[gSaveBlock2Ptr->frontier.rentalMons[j].monId].species)
+ if (gFacilityTrainerMons[monId].species == gFacilityTrainerMons[gSaveBlock2Ptr->frontier.rentalMons[j].monId].species)
break;
}
if (j != 6)
continue;
- if (lvlMode == FRONTIER_LVL_50 && monSetId > FRONTIER_MONS_HIGH_TIER)
+ if (lvlMode == FRONTIER_LVL_50 && monId > FRONTIER_MONS_HIGH_TIER)
continue;
for (k = firstMonId; k < firstMonId + i; k++)
{
- if (species[k] == gFacilityTrainerMons[monSetId].species)
+ if (species[k] == gFacilityTrainerMons[monId].species)
break;
}
if (k != firstMonId + i)
@@ -345,15 +348,15 @@ static void GenerateOpponentMons(void)
for (k = firstMonId; k < firstMonId + i; k++)
{
- if (heldItems[k] != 0 && heldItems[k] == gBattleFrontierHeldItems[gFacilityTrainerMons[monSetId].itemTableId])
+ if (heldItems[k] != 0 && heldItems[k] == gBattleFrontierHeldItems[gFacilityTrainerMons[monId].itemTableId])
break;
}
if (k != firstMonId + i)
continue;
- species[i] = gFacilityTrainerMons[monSetId].species;
- heldItems[i] = gBattleFrontierHeldItems[gFacilityTrainerMons[monSetId].itemTableId];
- gUnknown_03006298[i] = monSetId;
+ species[i] = gFacilityTrainerMons[monId].species;
+ heldItems[i] = gBattleFrontierHeldItems[gFacilityTrainerMons[monId].itemTableId];
+ gUnknown_03006298[i] = monId;
i++;
}
}
@@ -388,7 +391,7 @@ static void SetPlayerAndOpponentParties(void)
int count = 0;
u8 bits = 0;
u8 monLevel;
- u16 monSetId;
+ u16 monId;
u16 evs;
u8 ivs;
u8 friendship;
@@ -412,17 +415,17 @@ static void SetPlayerAndOpponentParties(void)
ZeroPlayerPartyMons();
for (i = 0; i < FRONTIER_PARTY_SIZE; i++)
{
- monSetId = gSaveBlock2Ptr->frontier.rentalMons[i].monId;
+ monId = gSaveBlock2Ptr->frontier.rentalMons[i].monId;
ivs = gSaveBlock2Ptr->frontier.rentalMons[i].ivs;
CreateMon(&gPlayerParty[i],
- gFacilityTrainerMons[monSetId].species,
+ gFacilityTrainerMons[monId].species,
monLevel,
ivs,
TRUE, gSaveBlock2Ptr->frontier.rentalMons[i].personality,
OT_ID_PLAYER_ID, 0);
count = 0;
- bits = gFacilityTrainerMons[monSetId].evSpread;
+ bits = gFacilityTrainerMons[monId].evSpread;
for (j = 0; j < NUM_STATS; bits >>= 1, j++)
{
if (bits & 1)
@@ -433,16 +436,16 @@ static void SetPlayerAndOpponentParties(void)
bits = 1;
for (j = 0; j < NUM_STATS; bits <<= 1, j++)
{
- if (gFacilityTrainerMons[monSetId].evSpread & bits)
+ if (gFacilityTrainerMons[monId].evSpread & bits)
SetMonData(&gPlayerParty[i], MON_DATA_HP_EV + j, &evs);
}
CalculateMonStats(&gPlayerParty[i]);
friendship = 0;
for (k = 0; k < MAX_MON_MOVES; k++)
- SetMonMoveAvoidReturn(&gPlayerParty[i], gFacilityTrainerMons[monSetId].moves[k], k);
+ SetMonMoveAvoidReturn(&gPlayerParty[i], gFacilityTrainerMons[monId].moves[k], k);
SetMonData(&gPlayerParty[i], MON_DATA_FRIENDSHIP, &friendship);
- SetMonData(&gPlayerParty[i], MON_DATA_HELD_ITEM, &gBattleFrontierHeldItems[gFacilityTrainerMons[monSetId].itemTableId]);
+ SetMonData(&gPlayerParty[i], MON_DATA_HELD_ITEM, &gBattleFrontierHeldItems[gFacilityTrainerMons[monId].itemTableId]);
SetMonData(&gPlayerParty[i], MON_DATA_ABILITY_NUM, &gSaveBlock2Ptr->frontier.rentalMons[i].abilityNum);
}
}
@@ -453,17 +456,17 @@ static void SetPlayerAndOpponentParties(void)
case 2:
for (i = 0; i < FRONTIER_PARTY_SIZE; i++)
{
- monSetId = gSaveBlock2Ptr->frontier.rentalMons[i + 3].monId;
+ monId = gSaveBlock2Ptr->frontier.rentalMons[i + 3].monId;
ivs = gSaveBlock2Ptr->frontier.rentalMons[i + 3].ivs;
CreateMon(&gEnemyParty[i],
- gFacilityTrainerMons[monSetId].species,
+ gFacilityTrainerMons[monId].species,
monLevel,
ivs,
TRUE, gSaveBlock2Ptr->frontier.rentalMons[i + 3].personality,
OT_ID_PLAYER_ID, 0);
count = 0;
- bits = gFacilityTrainerMons[monSetId].evSpread;
+ bits = gFacilityTrainerMons[monId].evSpread;
for (j = 0; j < NUM_STATS; bits >>= 1, j++)
{
if (bits & 1)
@@ -474,14 +477,14 @@ static void SetPlayerAndOpponentParties(void)
bits = 1;
for (j = 0; j < NUM_STATS; bits <<= 1, j++)
{
- if (gFacilityTrainerMons[monSetId].evSpread & bits)
+ if (gFacilityTrainerMons[monId].evSpread & bits)
SetMonData(&gEnemyParty[i], MON_DATA_HP_EV + j, &evs);
}
CalculateMonStats(&gEnemyParty[i]);
for (k = 0; k < MAX_MON_MOVES; k++)
- SetMonMoveAvoidReturn(&gEnemyParty[i], gFacilityTrainerMons[monSetId].moves[k], k);
- SetMonData(&gEnemyParty[i], MON_DATA_HELD_ITEM, &gBattleFrontierHeldItems[gFacilityTrainerMons[monSetId].itemTableId]);
+ SetMonMoveAvoidReturn(&gEnemyParty[i], gFacilityTrainerMons[monId].moves[k], k);
+ SetMonData(&gEnemyParty[i], MON_DATA_HELD_ITEM, &gBattleFrontierHeldItems[gFacilityTrainerMons[monId].itemTableId]);
SetMonData(&gEnemyParty[i], MON_DATA_ABILITY_NUM, &gSaveBlock2Ptr->frontier.rentalMons[i + 3].abilityNum);
}
break;
@@ -497,8 +500,8 @@ static void GenerateInitialRentalMons(void)
u8 challengeNum;
u8 factoryLvlMode;
u8 factoryBattleMode;
- u8 var_40;
- u16 monSetId;
+ u8 rentalRank;
+ u16 monId;
u16 currSpecies;
u16 species[PARTY_SIZE];
u16 monIds[PARTY_SIZE];
@@ -530,30 +533,30 @@ static void GenerateInitialRentalMons(void)
factoryLvlMode = FRONTIER_LVL_50;
firstMonId = 0;
}
- var_40 = GetNumPastRentalsRank(factoryBattleMode, factoryLvlMode);
+ rentalRank = GetNumPastRentalsRank(factoryBattleMode, factoryLvlMode);
currSpecies = SPECIES_NONE;
i = 0;
while (i != PARTY_SIZE)
{
- if (i < var_40)
- monSetId = GetMonSetId(factoryLvlMode, challengeNum, TRUE);
+ if (i < rentalRank) // The more times the player has rented, the more initial rentals are generated from a better set of pokemon
+ monId = GetFactoryMonId(factoryLvlMode, challengeNum, TRUE);
else
- monSetId = GetMonSetId(factoryLvlMode, challengeNum, FALSE);
+ monId = GetFactoryMonId(factoryLvlMode, challengeNum, FALSE);
- if (gFacilityTrainerMons[monSetId].species == SPECIES_UNOWN)
+ if (gFacilityTrainerMons[monId].species == SPECIES_UNOWN)
continue;
// Cannot have two pokemon of the same species.
for (j = firstMonId; j < firstMonId + i; j++)
{
- u16 monId = monIds[j];
- if (monId == monSetId)
+ u16 existingMonId = monIds[j];
+ if (existingMonId == monId)
break;
- if (species[j] == gFacilityTrainerMons[monSetId].species)
+ if (species[j] == gFacilityTrainerMons[monId].species)
{
if (currSpecies == SPECIES_NONE)
- currSpecies = gFacilityTrainerMons[monSetId].species;
+ currSpecies = gFacilityTrainerMons[monId].species;
else
break;
}
@@ -564,9 +567,9 @@ static void GenerateInitialRentalMons(void)
// Cannot have two same held items.
for (j = firstMonId; j < firstMonId + i; j++)
{
- if (heldItems[j] != 0 && heldItems[j] == gBattleFrontierHeldItems[gFacilityTrainerMons[monSetId].itemTableId])
+ if (heldItems[j] != 0 && heldItems[j] == gBattleFrontierHeldItems[gFacilityTrainerMons[monId].itemTableId])
{
- if (gFacilityTrainerMons[monSetId].species == currSpecies)
+ if (gFacilityTrainerMons[monId].species == currSpecies)
currSpecies = SPECIES_NONE;
break;
}
@@ -574,10 +577,10 @@ static void GenerateInitialRentalMons(void)
if (j != firstMonId + i)
continue;
- gSaveBlock2Ptr->frontier.rentalMons[i].monId = monSetId;
- species[i] = gFacilityTrainerMons[monSetId].species;
- heldItems[i] = gBattleFrontierHeldItems[gFacilityTrainerMons[monSetId].itemTableId];
- monIds[i] = monSetId;
+ gSaveBlock2Ptr->frontier.rentalMons[i].monId = monId;
+ species[i] = gFacilityTrainerMons[monId].species;
+ heldItems[i] = gBattleFrontierHeldItems[gFacilityTrainerMons[monId].itemTableId];
+ monIds[i] = monId;
i++;
}
}
@@ -629,10 +632,10 @@ static void GetOpponentBattleStyle(void)
for (i = 0; i < FRONTIER_PARTY_SIZE; i++)
{
- u16 monSetId = gUnknown_03006298[i];
+ u16 monId = gUnknown_03006298[i];
for (j = 0; j < MAX_MON_MOVES; j++)
{
- u8 battleStyle = GetMoveBattleStyle(gFacilityTrainerMons[monSetId].moves[j]);
+ u8 battleStyle = GetMoveBattleStyle(gFacilityTrainerMons[monId].moves[j]);
stylePoints[battleStyle]++;
}
}
@@ -724,16 +727,16 @@ void FillFactoryBrainParty(void)
while (i != FRONTIER_PARTY_SIZE)
{
- u16 monSetId = GetMonSetId(lvlMode, challengeNum, FALSE);
+ u16 monId = GetFactoryMonId(lvlMode, challengeNum, FALSE);
- if (gFacilityTrainerMons[monSetId].species == SPECIES_UNOWN)
+ if (gFacilityTrainerMons[monId].species == SPECIES_UNOWN)
continue;
- if (monLevel == 50 && monSetId > FRONTIER_MONS_HIGH_TIER)
+ if (monLevel == 50 && monId > FRONTIER_MONS_HIGH_TIER)
continue;
for (j = 0; j < 6; j++)
{
- if (monSetId == gSaveBlock2Ptr->frontier.rentalMons[j].monId)
+ if (monId == gSaveBlock2Ptr->frontier.rentalMons[j].monId)
break;
}
if (j != 6)
@@ -741,7 +744,7 @@ void FillFactoryBrainParty(void)
for (k = 0; k < i; k++)
{
- if (species[k] == gFacilityTrainerMons[monSetId].species)
+ if (species[k] == gFacilityTrainerMons[monId].species)
break;
}
if (k != i)
@@ -749,35 +752,35 @@ void FillFactoryBrainParty(void)
for (k = 0; k < i; k++)
{
- if (heldItems[k] != 0 && heldItems[k] == gBattleFrontierHeldItems[gFacilityTrainerMons[monSetId].itemTableId])
+ if (heldItems[k] != 0 && heldItems[k] == gBattleFrontierHeldItems[gFacilityTrainerMons[monId].itemTableId])
break;
}
if (k != i)
continue;
- species[i] = gFacilityTrainerMons[monSetId].species;
- heldItems[i] = gBattleFrontierHeldItems[gFacilityTrainerMons[monSetId].itemTableId];
+ species[i] = gFacilityTrainerMons[monId].species;
+ heldItems[i] = gBattleFrontierHeldItems[gFacilityTrainerMons[monId].itemTableId];
CreateMonWithEVSpreadNatureOTID(&gEnemyParty[i],
- gFacilityTrainerMons[monSetId].species,
+ gFacilityTrainerMons[monId].species,
monLevel,
- gFacilityTrainerMons[monSetId].nature,
+ gFacilityTrainerMons[monId].nature,
fixedIV,
- gFacilityTrainerMons[monSetId].evSpread,
+ gFacilityTrainerMons[monId].evSpread,
otId);
friendship = 0;
for (k = 0; k < MAX_MON_MOVES; k++)
- SetMonMoveAvoidReturn(&gEnemyParty[i], gFacilityTrainerMons[monSetId].moves[k], k);
+ SetMonMoveAvoidReturn(&gEnemyParty[i], gFacilityTrainerMons[monId].moves[k], k);
SetMonData(&gEnemyParty[i], MON_DATA_FRIENDSHIP, &friendship);
- SetMonData(&gEnemyParty[i], MON_DATA_HELD_ITEM, &gBattleFrontierHeldItems[gFacilityTrainerMons[monSetId].itemTableId]);
+ SetMonData(&gEnemyParty[i], MON_DATA_HELD_ITEM, &gBattleFrontierHeldItems[gFacilityTrainerMons[monId].itemTableId]);
i++;
}
}
-static u16 GetMonSetId(u8 lvlMode, u8 challengeNum, bool8 arg2)
+static u16 GetFactoryMonId(u8 lvlMode, u8 challengeNum, bool8 useBetterRange)
{
- u16 range, monSetId;
- u16 adder;
+ u16 numMons, monId;
+ u16 adder; // Used to skip past early mons for open level
if (lvlMode == FRONTIER_LVL_50)
adder = 0;
@@ -786,30 +789,31 @@ static u16 GetMonSetId(u8 lvlMode, u8 challengeNum, bool8 arg2)
if (challengeNum < 7)
{
- if (arg2)
+ if (useBetterRange)
{
- range = (sMonsToChooseFrom[adder + challengeNum + 1][1] - sMonsToChooseFrom[adder + challengeNum + 1][0]) + 1;
- monSetId = Random() % range;
- monSetId += sMonsToChooseFrom[adder + challengeNum + 1][0];
+ numMons = (sInitialRentalMonRanges[adder + challengeNum + 1][1] - sInitialRentalMonRanges[adder + challengeNum + 1][0]) + 1;
+ monId = Random() % numMons;
+ monId += sInitialRentalMonRanges[adder + challengeNum + 1][0];
}
else
{
- range = (sMonsToChooseFrom[adder + challengeNum][1] - sMonsToChooseFrom[adder + challengeNum][0]) + 1;
- monSetId = Random() % range;
- monSetId += sMonsToChooseFrom[adder + challengeNum][0];
+ numMons = (sInitialRentalMonRanges[adder + challengeNum][1] - sInitialRentalMonRanges[adder + challengeNum][0]) + 1;
+ monId = Random() % numMons;
+ monId += sInitialRentalMonRanges[adder + challengeNum][0];
}
}
else
{
- u16 num = challengeNum;
- if (num != 7)
- num = 7;
- range = (sMonsToChooseFrom[adder + num][1] - sMonsToChooseFrom[adder + num][0]) + 1;
- monSetId = Random() % range;
- monSetId += sMonsToChooseFrom[adder + num][0];
+ u16 challenge = challengeNum;
+ if (challenge != 7)
+ challenge = 7; // why bother assigning it above at all
+
+ numMons = (sInitialRentalMonRanges[adder + challenge][1] - sInitialRentalMonRanges[adder + challenge][0]) + 1;
+ monId = Random() % numMons;
+ monId += sInitialRentalMonRanges[adder + challenge][0];
}
- return monSetId;
+ return monId;
}
u8 GetNumPastRentalsRank(u8 battleMode, u8 lvlMode)
diff --git a/src/battle_factory_screen.c b/src/battle_factory_screen.c
index de2f3a10c..388881a1c 100644
--- a/src/battle_factory_screen.c
+++ b/src/battle_factory_screen.c
@@ -24,6 +24,7 @@
#include "pokedex.h"
#include "util.h"
#include "trainer_pokemon_sprites.h"
+#include "starter_choose.h"
#include "constants/battle_frontier.h"
#include "constants/songs.h"
#include "constants/rgb.h"
@@ -57,7 +58,7 @@
struct FactorySelecteableMon
{
- u16 monSetId;
+ u16 monId;
u16 spriteId;
u8 selectedId; // 0 - not selected, 1 - first pokemon, 2 - second pokemon, 3 - third pokemon
struct Pokemon monData;
@@ -132,8 +133,6 @@ struct FactorySwapMonsStruct
bool8 unk30;
};
-extern const u32 gUnknown_085B18AC[];
-
// This file's functions.
static void sub_819A44C(struct Sprite *sprite);
static void CB2_InitSelectScreen(void);
@@ -168,7 +167,7 @@ static u8 sub_819BC9C(void);
static u8 Select_OptionSummary(void);
static u8 Select_OptionOthers(void);
static u8 Select_OptionRentDeselect(void);
-static bool32 Select_AreSpeciesValid(u16 monSetId);
+static bool32 Select_AreSpeciesValid(u16 monId);
static void Swap_DestroyAllSprites(void);
static void Swap_ShowYesNoOptions(void);
static void sub_819E8EC(void);
@@ -263,7 +262,7 @@ static const struct SpriteSheet gUnknown_086103BC[] =
static const struct CompressedSpriteSheet gUnknown_086103E4[] =
{
- {gUnknown_085B18AC, 0x800, TAG_TILE_64},
+ {gPokeballSelection_Gfx, 0x800, TAG_TILE_64},
{},
};
@@ -616,7 +615,7 @@ static const struct SpriteSheet gUnknown_08610650[] =
static const struct CompressedSpriteSheet gUnknown_086106A0[] =
{
- {gUnknown_085B18AC, 0x800, TAG_TILE_64},
+ {gPokeballSelection_Gfx, 0x800, TAG_TILE_64},
{},
};
@@ -1665,7 +1664,7 @@ static void CreateFrontierFactorySelectableMons(u8 firstMonId)
u8 battleMode = VarGet(VAR_FRONTIER_BATTLE_MODE);
u8 lvlMode = gSaveBlock2Ptr->frontier.lvlMode;
u8 challengeNum = gSaveBlock2Ptr->frontier.factoryWinStreaks[battleMode][lvlMode] / 7;
- u8 var_28 = 0;
+ u8 rentalRank = 0;
gFacilityTrainerMons = gBattleFrontierMons;
if (gSaveBlock2Ptr->frontier.lvlMode != FRONTIER_LVL_50)
@@ -1673,29 +1672,29 @@ static void CreateFrontierFactorySelectableMons(u8 firstMonId)
else
level = 50;
- var_28 = GetNumPastRentalsRank(battleMode, lvlMode);
+ rentalRank = GetNumPastRentalsRank(battleMode, lvlMode);
otId = T1_READ_32(gSaveBlock2Ptr->playerTrainerId);
for (i = 0; i < SELECTABLE_MONS_COUNT; i++)
{
- u16 monSetId = gSaveBlock2Ptr->frontier.rentalMons[i].monId;
- sFactorySelectScreen->mons[i + firstMonId].monSetId = monSetId;
- if (i < var_28)
+ u16 monId = gSaveBlock2Ptr->frontier.rentalMons[i].monId;
+ sFactorySelectScreen->mons[i + firstMonId].monId = monId;
+ if (i < rentalRank)
ivs = GetFactoryMonFixedIV(challengeNum + 1, 0);
else
ivs = GetFactoryMonFixedIV(challengeNum, 0);
CreateMonWithEVSpreadNatureOTID(&sFactorySelectScreen->mons[i + firstMonId].monData,
- gFacilityTrainerMons[monSetId].species,
+ gFacilityTrainerMons[monId].species,
level,
- gFacilityTrainerMons[monSetId].nature,
+ gFacilityTrainerMons[monId].nature,
ivs,
- gFacilityTrainerMons[monSetId].evSpread,
+ gFacilityTrainerMons[monId].evSpread,
otId);
happiness = 0;
for (j = 0; j < MAX_MON_MOVES; j++)
- SetMonMoveAvoidReturn(&sFactorySelectScreen->mons[i + firstMonId].monData, gFacilityTrainerMons[monSetId].moves[j], j);
+ SetMonMoveAvoidReturn(&sFactorySelectScreen->mons[i + firstMonId].monData, gFacilityTrainerMons[monId].moves[j], j);
SetMonData(&sFactorySelectScreen->mons[i + firstMonId].monData, MON_DATA_FRIENDSHIP, &happiness);
- SetMonData(&sFactorySelectScreen->mons[i + firstMonId].monData, MON_DATA_HELD_ITEM, &gBattleFrontierHeldItems[gFacilityTrainerMons[monSetId].itemTableId]);
+ SetMonData(&sFactorySelectScreen->mons[i + firstMonId].monData, MON_DATA_HELD_ITEM, &gBattleFrontierHeldItems[gFacilityTrainerMons[monId].itemTableId]);
}
}
@@ -1712,20 +1711,20 @@ static void CreateTentFactorySelectableMons(u8 firstMonId)
for (i = 0; i < SELECTABLE_MONS_COUNT; i++)
{
- u16 monSetId = gSaveBlock2Ptr->frontier.rentalMons[i].monId;
- sFactorySelectScreen->mons[i + firstMonId].monSetId = monSetId;
+ u16 monId = gSaveBlock2Ptr->frontier.rentalMons[i].monId;
+ sFactorySelectScreen->mons[i + firstMonId].monId = monId;
CreateMonWithEVSpreadNatureOTID(&sFactorySelectScreen->mons[i + firstMonId].monData,
- gFacilityTrainerMons[monSetId].species,
+ gFacilityTrainerMons[monId].species,
level,
- gFacilityTrainerMons[monSetId].nature,
+ gFacilityTrainerMons[monId].nature,
ivs,
- gFacilityTrainerMons[monSetId].evSpread,
+ gFacilityTrainerMons[monId].evSpread,
otId);
happiness = 0;
for (j = 0; j < MAX_MON_MOVES; j++)
- SetMonMoveAvoidReturn(&sFactorySelectScreen->mons[i + firstMonId].monData, gFacilityTrainerMons[monSetId].moves[j], j);
+ SetMonMoveAvoidReturn(&sFactorySelectScreen->mons[i + firstMonId].monData, gFacilityTrainerMons[monId].moves[j], j);
SetMonData(&sFactorySelectScreen->mons[i + firstMonId].monData, MON_DATA_FRIENDSHIP, &happiness);
- SetMonData(&sFactorySelectScreen->mons[i + firstMonId].monData, MON_DATA_HELD_ITEM, &gBattleFrontierHeldItems[gFacilityTrainerMons[monSetId].itemTableId]);
+ SetMonData(&sFactorySelectScreen->mons[i + firstMonId].monData, MON_DATA_HELD_ITEM, &gBattleFrontierHeldItems[gFacilityTrainerMons[monId].itemTableId]);
}
}
@@ -1740,7 +1739,7 @@ static void Select_CopyMonsToPlayerParty(void)
if (sFactorySelectScreen->mons[j].selectedId == i + 1)
{
gPlayerParty[i] = sFactorySelectScreen->mons[j].monData;
- gSaveBlock2Ptr->frontier.rentalMons[i].monId = sFactorySelectScreen->mons[j].monSetId;
+ gSaveBlock2Ptr->frontier.rentalMons[i].monId = sFactorySelectScreen->mons[j].monId;
gSaveBlock2Ptr->frontier.rentalMons[i].personality = GetMonData(&gPlayerParty[i], MON_DATA_PERSONALITY, NULL);
gSaveBlock2Ptr->frontier.rentalMons[i].abilityNum = GetBoxMonData(&gPlayerParty[i].box, MON_DATA_ABILITY_NUM, NULL);
gSaveBlock2Ptr->frontier.rentalMons[i].ivs = GetBoxMonData(&gPlayerParty[i].box, MON_DATA_ATK_IV, NULL);
@@ -1871,8 +1870,8 @@ static u8 Select_RunMenuOptionFunc(void)
static u8 Select_OptionRentDeselect(void)
{
u8 selectedId = sFactorySelectScreen->mons[sFactorySelectScreen->cursorPos].selectedId;
- u16 monSetId = sFactorySelectScreen->mons[sFactorySelectScreen->cursorPos].monSetId;
- if (selectedId == 0 && !Select_AreSpeciesValid(monSetId))
+ u16 monId = sFactorySelectScreen->mons[sFactorySelectScreen->cursorPos].monId;
+ if (selectedId == 0 && !Select_AreSpeciesValid(monId))
{
Select_PrintCantSelectSameMon();
sub_819B958(3);
@@ -2160,10 +2159,10 @@ static void Select_SetWinRegs(s16 mWin0H, s16 nWin0H, s16 mWin0V, s16 nWin0V)
SetGpuReg(REG_OFFSET_WINOUT, WINOUT_WIN01_BG0 | WINOUT_WIN01_BG1 | WINOUT_WIN01_BG2 | WINOUT_WIN01_CLR | WINOUT_WIN01_OBJ);
}
-static bool32 Select_AreSpeciesValid(u16 monSetId)
+static bool32 Select_AreSpeciesValid(u16 monId)
{
u8 i, j;
- u32 species = gFacilityTrainerMons[monSetId].species;
+ u32 species = gFacilityTrainerMons[monId].species;
u8 selectState = sFactorySelectScreen->selectingMonsState;
for (i = 1; i < selectState; i++)
@@ -2172,7 +2171,7 @@ static bool32 Select_AreSpeciesValid(u16 monSetId)
{
if (sFactorySelectScreen->mons[j].selectedId == i)
{
- if (gFacilityTrainerMons[sFactorySelectScreen->mons[j].monSetId].species == species)
+ if (gFacilityTrainerMons[sFactorySelectScreen->mons[j].monId].species == species)
return FALSE;
break;
diff --git a/src/battle_gfx_sfx_util.c b/src/battle_gfx_sfx_util.c
index 50001cebe..b1bb61aaf 100644
--- a/src/battle_gfx_sfx_util.c
+++ b/src/battle_gfx_sfx_util.c
@@ -24,20 +24,21 @@
#include "contest.h"
#include "constants/songs.h"
#include "constants/rgb.h"
+#include "constants/battle_palace.h"
extern struct MusicPlayerInfo gMPlayInfo_SE1;
extern struct MusicPlayerInfo gMPlayInfo_SE2;
extern struct MusicPlayerInfo gMPlayInfo_BGM;
-extern const u8 gUnknown_0831C604[];
+extern const u8 gBattlePalaceNatureToMoveTarget[];
extern const u8 * const gBattleAnims_General[];
extern const u8 * const gBattleAnims_Special[];
extern const struct CompressedSpriteSheet gSpriteSheet_EnemyShadow;
extern const struct SpriteTemplate gSpriteTemplate_EnemyShadow;
// this file's functions
-static u8 sub_805D4A8(u16 move);
-static u16 BattlePalaceGetTargetRetValue(void);
+static u8 GetBattlePalaceMoveGroup(u16 move);
+static u16 GetBattlePalaceTarget(void);
static void sub_805D7EC(struct Sprite *sprite);
static bool8 ShouldAnimBeDoneRegardlessOfSubsitute(u8 animId);
static void Task_ClearBitWhenBattleTableAnimDone(u8 taskId);
@@ -108,6 +109,7 @@ void FreeBattleSpritesData(void)
FREE_AND_SET_NULL(gBattleSpritesDataPtr);
}
+// Pokemon chooses move to use in Battle Palace rather than player
u16 ChooseMoveAndTargetInBattlePalace(void)
{
s32 i, var1, var2;
@@ -116,60 +118,88 @@ u16 ChooseMoveAndTargetInBattlePalace(void)
u8 unusableMovesBits = CheckMoveLimitations(gActiveBattler, 0, 0xFF);
s32 percent = Random() % 100;
- i = (gBattleStruct->field_92 & gBitTable[gActiveBattler]) ? 2 : 0;
- var2 = i;
- var1 = i + 2;
-
- for (; i < var1; i++)
+ // Heavy variable re-use here makes this hard to read without defines
+ // Possibly just optimization? might still match with additional vars
+ #define maxGroupNum var1
+ #define minGroupNum var2
+ #define selectedGroup percent
+ #define selectedMoves var2
+ #define moveTarget var1
+ #define validMoveFlags var1
+ #define numValidMoveGroups var2
+ #define validMoveGroup var2
+
+ // If battler is < 50% HP and not asleep, use second set of move group likelihoods
+ // otherwise use first set
+ i = (gBattleStruct->palaceFlags & gBitTable[gActiveBattler]) ? 2 : 0;
+ minGroupNum = i;
+
+ maxGroupNum = i + 2; // + 2 because there are two percentages per set of likelihoods
+
+ // Each nature has a different percent chance to select a move from one of 3 move groups
+ // If percent is less than 1st check, use move from "Attack" group
+ // If percent is less than 2nd check, use move from "Defense" group
+ // Otherwise use move from "Support" group
+ for (; i < maxGroupNum; i++)
{
- if (gUnknown_0831C494[GetNatureFromPersonality(gBattleMons[gActiveBattler].personality)][i] > percent)
+ if (gBattlePalaceNatureToMoveGroupLikelihood[GetNatureFromPersonality(gBattleMons[gActiveBattler].personality)][i] > percent)
break;
}
+ selectedGroup = i - minGroupNum;
+ if (i == maxGroupNum)
+ selectedGroup = PALACE_MOVE_GROUP_SUPPORT;
- percent = i - var2;
- if (i == var1)
- percent = 2;
-
- for (var2 = 0, i = 0; i < MAX_MON_MOVES; i++)
+ // Flag moves that match selected group, to be passed to AI
+ for (selectedMoves = 0, i = 0; i < MAX_MON_MOVES; i++)
{
if (moveInfo->moves[i] == MOVE_NONE)
break;
- if (percent == sub_805D4A8(moveInfo->moves[i]) && moveInfo->currentPp[i] != 0)
- var2 |= gBitTable[i];
+ if (selectedGroup == GetBattlePalaceMoveGroup(moveInfo->moves[i]) && moveInfo->currentPp[i] != 0)
+ selectedMoves |= gBitTable[i];
}
- if (var2 != 0)
+ // Pass selected moves to AI, pick one
+ if (selectedMoves != 0)
{
- gBattleStruct->field_92 &= 0xF;
- gBattleStruct->field_92 |= (var2 << 4);
- BattleAI_SetupAIData(var2);
+ gBattleStruct->palaceFlags &= 0xF;
+ gBattleStruct->palaceFlags |= (selectedMoves << 4);
+ BattleAI_SetupAIData(selectedMoves);
chosenMoveId = BattleAI_ChooseMoveOrAction();
}
+ // If no moves matched the selected group, pick a new move from groups the pokemon has
+ // In this case the AI is not checked again, so the choice may be worse
+ // If a move is chosen this way, there's a 50% chance that it will be unable to use it anyway
if (chosenMoveId == -1)
{
if (unusableMovesBits != 0xF)
{
- var1 = 0, var2 = 0;
+ validMoveFlags = 0, numValidMoveGroups = 0;
for (i = 0; i < MAX_MON_MOVES; i++)
{
- if (sub_805D4A8(moveInfo->moves[i]) == 0 && !(gBitTable[i] & unusableMovesBits))
- var1 += 0x1;
- if (sub_805D4A8(moveInfo->moves[i]) == 1 && !(gBitTable[i] & unusableMovesBits))
- var1 += 0x10;
- if (sub_805D4A8(moveInfo->moves[i]) == 2 && !(gBitTable[i] & unusableMovesBits))
- var1 += 0x100;
+ // validMoveFlags is used here as a bitfield for which moves can be used for each move group type
+ // first 4 bits are for attack (1 for each move), then 4 bits for defense, and 4 for support
+ if (GetBattlePalaceMoveGroup(moveInfo->moves[i]) == PALACE_MOVE_GROUP_ATTACK && !(gBitTable[i] & unusableMovesBits))
+ validMoveFlags += (1 << 0);
+ if (GetBattlePalaceMoveGroup(moveInfo->moves[i]) == PALACE_MOVE_GROUP_DEFENSE && !(gBitTable[i] & unusableMovesBits))
+ validMoveFlags += (1 << 4);
+ if (GetBattlePalaceMoveGroup(moveInfo->moves[i]) == PALACE_MOVE_GROUP_SUPPORT && !(gBitTable[i] & unusableMovesBits))
+ validMoveFlags += (1 << 8);
}
- if ((var1 & 0xF) > 1)
- var2++;
- if ((var1 & 0xF0) > 0x1F)
- var2++;
- if ((var1 & 0xF0) > 0x1FF)
- var2++;
-
- if (var2 > 1 || var2 == 0)
+ // Count the move groups the pokemon has
+ if ((validMoveFlags & 0xF) > 1)
+ numValidMoveGroups++;
+ if ((validMoveFlags & 0xF0) > 0x1F)
+ numValidMoveGroups++;
+ if ((validMoveFlags & 0xF0) > 0x1FF)
+ numValidMoveGroups++;
+
+
+ // If more than 1 possible move group, or no possible move groups
+ // then choose move randomly
+ if (numValidMoveGroups > 1 || numValidMoveGroups == 0)
{
do
{
@@ -178,32 +208,35 @@ u16 ChooseMoveAndTargetInBattlePalace(void)
chosenMoveId = i;
} while (chosenMoveId == -1);
}
+ // Otherwise randomly choose move of only available move group
else
{
- if ((var1 & 0xF) > 1)
- var2 = 0;
- if ((var1 & 0xF0) > 0x1F)
- var2 = 1;
- if ((var1 & 0xF0) > 0x1FF)
- var2 = 2;
+ if ((validMoveFlags & 0xF) > 1)
+ validMoveGroup = PALACE_MOVE_GROUP_ATTACK;
+ if ((validMoveFlags & 0xF0) > 0x1F)
+ validMoveGroup = PALACE_MOVE_GROUP_DEFENSE;
+ if ((validMoveFlags & 0xF0) > 0x1FF)
+ validMoveGroup = PALACE_MOVE_GROUP_SUPPORT;
do
{
i = Random() % MAX_MON_MOVES;
- if (!(gBitTable[i] & unusableMovesBits) && var2 == sub_805D4A8(moveInfo->moves[i]))
+ if (!(gBitTable[i] & unusableMovesBits) && validMoveGroup == GetBattlePalaceMoveGroup(moveInfo->moves[i]))
chosenMoveId = i;
} while (chosenMoveId == -1);
}
+ // If a move was selected (and in this case was not from the Nature-chosen group)
+ // then there's a 50% chance it won't be used anyway
if (Random() % 100 > 49)
{
- gProtectStructs[gActiveBattler].palaceUnableToUseMove = 1;
+ gProtectStructs[gActiveBattler].palaceUnableToUseMove = TRUE;
return 0;
}
}
else
{
- gProtectStructs[gActiveBattler].palaceUnableToUseMove = 1;
+ gProtectStructs[gActiveBattler].palaceUnableToUseMove = TRUE;
return 0;
}
}
@@ -211,26 +244,35 @@ u16 ChooseMoveAndTargetInBattlePalace(void)
if (moveInfo->moves[chosenMoveId] == MOVE_CURSE)
{
if (moveInfo->monType1 != TYPE_GHOST && moveInfo->monType2 != TYPE_GHOST)
- var1 = MOVE_TARGET_USER;
+ moveTarget = MOVE_TARGET_USER;
else
- var1 = MOVE_TARGET_SELECTED;
+ moveTarget = MOVE_TARGET_SELECTED;
}
else
{
- var1 = gBattleMoves[moveInfo->moves[chosenMoveId]].target;
+ moveTarget = gBattleMoves[moveInfo->moves[chosenMoveId]].target;
}
- if (var1 & MOVE_TARGET_USER)
+ if (moveTarget & MOVE_TARGET_USER)
chosenMoveId |= (gActiveBattler << 8);
- else if (var1 == MOVE_TARGET_SELECTED)
- chosenMoveId |= (BattlePalaceGetTargetRetValue());
+ else if (moveTarget == MOVE_TARGET_SELECTED)
+ chosenMoveId |= GetBattlePalaceTarget();
else
chosenMoveId |= (GetBattlerAtPosition((GetBattlerPosition(gActiveBattler) & BIT_SIDE) ^ BIT_SIDE) << 8);
return chosenMoveId;
}
-static u8 sub_805D4A8(u16 move)
+#undef maxGroupNum
+#undef minGroupNum
+#undef selectedGroup
+#undef selectedMoves
+#undef moveTarget
+#undef validMoveFlags
+#undef numValidMoveGroups
+#undef validMoveGroup
+
+static u8 GetBattlePalaceMoveGroup(u16 move)
{
switch (gBattleMoves[move].target)
{
@@ -240,21 +282,21 @@ static u8 sub_805D4A8(u16 move)
case MOVE_TARGET_BOTH:
case MOVE_TARGET_FOES_AND_ALLY:
if (gBattleMoves[move].power == 0)
- return 2;
+ return PALACE_MOVE_GROUP_SUPPORT;
else
- return 0;
+ return PALACE_MOVE_GROUP_ATTACK;
break;
case MOVE_TARGET_DEPENDS:
case MOVE_TARGET_OPPONENTS_FIELD:
- return 2;
+ return PALACE_MOVE_GROUP_SUPPORT;
case MOVE_TARGET_USER:
- return 1;
+ return PALACE_MOVE_GROUP_DEFENSE;
default:
- return 0;
+ return PALACE_MOVE_GROUP_ATTACK;
}
}
-static u16 BattlePalaceGetTargetRetValue(void)
+static u16 GetBattlePalaceTarget(void)
{
if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE)
{
@@ -274,19 +316,19 @@ static u16 BattlePalaceGetTargetRetValue(void)
if (gBattleMons[opposing1].hp == gBattleMons[opposing2].hp)
return (((gActiveBattler & BIT_SIDE) ^ BIT_SIDE) + (Random() & 2)) << 8;
- switch (gUnknown_0831C604[GetNatureFromPersonality(gBattleMons[gActiveBattler].personality)])
+ switch (gBattlePalaceNatureToMoveTarget[GetNatureFromPersonality(gBattleMons[gActiveBattler].personality)])
{
- case 0:
+ case PALACE_TARGET_STRONGER:
if (gBattleMons[opposing1].hp > gBattleMons[opposing2].hp)
return opposing1 << 8;
else
return opposing2 << 8;
- case 1:
+ case PALACE_TARGET_WEAKER:
if (gBattleMons[opposing1].hp < gBattleMons[opposing2].hp)
return opposing1 << 8;
else
return opposing2 << 8;
- case 2:
+ case PALACE_TARGET_RANDOM:
return (((gActiveBattler & BIT_SIDE) ^ BIT_SIDE) + (Random() & 2)) << 8;
}
}
@@ -874,14 +916,14 @@ void HandleSpeciesGfxDataChange(u8 battlerAtk, u8 battlerDef, bool8 notTransform
if (IsContest())
{
position = 0;
- targetSpecies = gContestResources->field_18->unk2;
- personalityValue = gContestResources->field_18->unk8;
- otId = gContestResources->field_18->unkC;
+ targetSpecies = gContestResources->moveAnim->targetSpecies;
+ personalityValue = gContestResources->moveAnim->personality;
+ otId = gContestResources->moveAnim->otId;
HandleLoadSpecialPokePic_DontHandleDeoxys(&gMonBackPicTable[targetSpecies],
gMonSpritesGfxPtr->sprites[0],
targetSpecies,
- gContestResources->field_18->unk10);
+ gContestResources->moveAnim->targetPersonality);
}
else
{
@@ -972,15 +1014,12 @@ void BattleLoadSubstituteOrMonSpriteGfx(u8 battlerId, bool8 loadMonSprite)
palOffset = (battlerId * 16) + 0x100;
LoadCompressedPalette(gSubstituteDollPal, palOffset, 32);
}
- else
+ else if (!IsContest())
{
- if (!IsContest())
- {
- if (GetBattlerSide(battlerId) != B_SIDE_PLAYER)
- BattleLoadOpponentMonSpriteGfx(&gEnemyParty[gBattlerPartyIndexes[battlerId]], battlerId);
- else
- BattleLoadPlayerMonSpriteGfx(&gPlayerParty[gBattlerPartyIndexes[battlerId]], battlerId);
- }
+ if (GetBattlerSide(battlerId) != B_SIDE_PLAYER)
+ BattleLoadOpponentMonSpriteGfx(&gEnemyParty[gBattlerPartyIndexes[battlerId]], battlerId);
+ else
+ BattleLoadPlayerMonSpriteGfx(&gPlayerParty[gBattlerPartyIndexes[battlerId]], battlerId);
}
}
@@ -1016,7 +1055,7 @@ void HandleLowHpMusicChange(struct Pokemon *mon, u8 battlerId)
if (!gBattleSpritesDataPtr->battlerData[battlerId].lowHpSong)
{
if (!gBattleSpritesDataPtr->battlerData[battlerId ^ BIT_FLANK].lowHpSong)
- PlaySE(SE_HINSI);
+ PlaySE(SE_LOW_HEALTH);
gBattleSpritesDataPtr->battlerData[battlerId].lowHpSong = 1;
}
}
@@ -1025,12 +1064,12 @@ void HandleLowHpMusicChange(struct Pokemon *mon, u8 battlerId)
gBattleSpritesDataPtr->battlerData[battlerId].lowHpSong = 0;
if (!IsDoubleBattle())
{
- m4aSongNumStop(SE_HINSI);
+ m4aSongNumStop(SE_LOW_HEALTH);
return;
}
if (IsDoubleBattle() && !gBattleSpritesDataPtr->battlerData[battlerId ^ BIT_FLANK].lowHpSong)
{
- m4aSongNumStop(SE_HINSI);
+ m4aSongNumStop(SE_LOW_HEALTH);
return;
}
}
@@ -1044,7 +1083,7 @@ void BattleStopLowHpSound(void)
if (IsDoubleBattle())
gBattleSpritesDataPtr->battlerData[playerBattler ^ BIT_FLANK].lowHpSong = 0;
- m4aSongNumStop(SE_HINSI);
+ m4aSongNumStop(SE_LOW_HEALTH);
}
u8 GetMonHPBarLevel(struct Pokemon *mon)
diff --git a/src/battle_interface.c b/src/battle_interface.c
index 12273addb..719af6a06 100644
--- a/src/battle_interface.c
+++ b/src/battle_interface.c
@@ -1649,7 +1649,7 @@ u8 CreatePartyStatusSummarySprites(u8 battlerId, struct HpAndStatus *partyInfo,
gBattleSpritesDataPtr->animationData->field_9_x1C++;
}
- PlaySE12WithPanning(SE_TB_START, 0);
+ PlaySE12WithPanning(SE_BALL_TRAY_ENTER, 0);
return taskId;
}
@@ -1852,9 +1852,9 @@ static void SpriteCB_StatusSummaryBallsOnBattleStart(struct Sprite *sprite)
pan = SOUND_PAN_ATTACKER;
if (sprite->data[7] != 0)
- PlaySE2WithPanning(SE_TB_KARA, pan);
+ PlaySE2WithPanning(SE_BALL_TRAY_EXIT, pan);
else
- PlaySE1WithPanning(SE_TB_KON, pan);
+ PlaySE1WithPanning(SE_BALL_TRAY_BALL, pan);
sprite->callback = SpriteCallbackDummy;
}
diff --git a/src/battle_main.c b/src/battle_main.c
index e3eea60d0..2c3df2e34 100644
--- a/src/battle_main.c
+++ b/src/battle_main.c
@@ -96,7 +96,7 @@ static void SpriteCb_WildMonShowHealthbox(struct Sprite *sprite);
static void SpriteCb_WildMonAnimate(struct Sprite *sprite);
static void sub_80398D0(struct Sprite *sprite);
static void SpriteCB_AnimFaintOpponent(struct Sprite *sprite);
-static void sub_8039AF4(struct Sprite *sprite);
+static void SpriteCb_BlinkVisible(struct Sprite *sprite);
static void SpriteCallbackDummy_3(struct Sprite *sprite);
static void oac_poke_ally_(struct Sprite *sprite);
static void SpecialStatusesClear(void);
@@ -995,7 +995,7 @@ static void CB2_HandleStartBattle(void)
sub_8036A5C();
SetPlayerBerryDataInBattleStruct();
- if (gTrainerBattleOpponent_A == TRAINER_OPPONENT_C00)
+ if (gTrainerBattleOpponent_A == TRAINER_UNION_ROOM)
{
gLinkPlayers[0].id = 0;
gLinkPlayers[1].id = 1;
@@ -1484,9 +1484,9 @@ static void CB2_PreInitMultiBattle(void)
{
gBattleCommunication[MULTIUSE_STATE]++;
if (gWirelessCommType)
- sub_800ADF8();
+ SetLinkStandbyCallback();
else
- sub_800AC34();
+ SetCloseLinkCallback();
}
break;
case 3:
@@ -1869,7 +1869,7 @@ static void FreeRestoreBattleData(void)
gScanlineEffect.state = 3;
gMain.inBattle = 0;
ZeroEnemyPartyMons();
- m4aSongNumStop(SE_HINSI);
+ m4aSongNumStop(SE_LOW_HEALTH);
FreeMonSpritesGfx();
FreeBattleSpritesData();
FreeBattleResources();
@@ -2114,7 +2114,7 @@ void sub_8038B74(struct Sprite *sprite)
{
StartSpriteAffineAnim(sprite, 1);
sprite->callback = sub_8038B04;
- PlaySE(SE_BT_START);
+ PlaySE(SE_MUGSHOT);
}
static void sub_8038B94(u8 taskId)
@@ -2368,7 +2368,7 @@ static void sub_8038F34(void)
case 6:
if (IsLinkTaskFinished() == TRUE)
{
- sub_800ADF8();
+ SetLinkStandbyCallback();
BattlePutTextOnWindow(gText_LinkStandby3, 0);
gBattleCommunication[MULTIUSE_STATE]++;
}
@@ -2382,7 +2382,7 @@ static void sub_8038F34(void)
break;
case 8:
if (!gWirelessCommType)
- sub_800AC34();
+ SetCloseLinkCallback();
gBattleCommunication[MULTIUSE_STATE]++;
break;
case 9:
@@ -2556,7 +2556,7 @@ static void sub_803939C(void)
HandleBattleWindow(0x18, 8, 0x1D, 0xD, WINDOW_CLEAR);
if (gMain.field_439_x4)
{
- sub_800ADF8();
+ SetLinkStandbyCallback();
BattlePutTextOnWindow(gText_LinkStandby3, 0);
}
gBattleCommunication[MULTIUSE_STATE]++;
@@ -2566,7 +2566,7 @@ static void sub_803939C(void)
if (--gBattleCommunication[1] == 0)
{
if (gMain.field_439_x4 && !gWirelessCommType)
- sub_800AC34();
+ SetCloseLinkCallback();
gBattleCommunication[MULTIUSE_STATE]++;
}
break;
@@ -2605,7 +2605,7 @@ static void sub_803939C(void)
{
if (gMain.field_439_x4)
{
- sub_800ADF8();
+ SetLinkStandbyCallback();
BattlePutTextOnWindow(gText_LinkStandby3, 0);
}
gBattleCommunication[MULTIUSE_STATE]++;
@@ -2798,31 +2798,31 @@ static void SpriteCB_AnimFaintOpponent(struct Sprite *sprite)
}
}
-void sub_8039AD8(struct Sprite *sprite)
+// Used when selecting a move, which can hit multiple targets, in double battles.
+void SpriteCb_ShowAsMoveTarget(struct Sprite *sprite)
{
sprite->data[3] = 8;
sprite->data[4] = sprite->invisible;
- sprite->callback = sub_8039AF4;
+ sprite->callback = SpriteCb_BlinkVisible;
}
-static void sub_8039AF4(struct Sprite *sprite)
+static void SpriteCb_BlinkVisible(struct Sprite *sprite)
{
- sprite->data[3]--;
- if (sprite->data[3] == 0)
+ if (--sprite->data[3] == 0)
{
sprite->invisible ^= 1;
sprite->data[3] = 8;
}
}
-void sub_8039B2C(struct Sprite *sprite)
+void SpriteCb_HideAsMoveTarget(struct Sprite *sprite)
{
sprite->invisible = sprite->data[4];
sprite->data[4] = FALSE;
sprite->callback = SpriteCallbackDummy_2;
}
-void sub_8039B58(struct Sprite *sprite)
+void SpriteCb_OpponentMonFromBall(struct Sprite *sprite)
{
if (sprite->affineAnimEnded)
{
@@ -2965,7 +2965,7 @@ static void SpriteCB_BounceEffect(struct Sprite *sprite)
#undef sBouncerSpriteId
#undef sWhich
-void sub_8039E44(struct Sprite *sprite)
+void SpriteCb_PlayerMonFromBall(struct Sprite *sprite)
{
if (sprite->affineAnimEnded)
BattleAnimateBackSprite(sprite, sprite->sSpeciesId);
@@ -2978,7 +2978,7 @@ void sub_8039E60(struct Sprite *sprite)
sprite->callback = SpriteCallbackDummy_3;
}
-void sub_8039E84(struct Sprite *sprite)
+void SpriteCB_TrainerThrowObject(struct Sprite *sprite)
{
StartSpriteAnim(sprite, 1);
sprite->callback = sub_8039E60;
@@ -3112,7 +3112,7 @@ static void BattleStartClearSetData(void)
}
gBattleStruct->givenExpMons = 0;
- gBattleStruct->field_92 = 0;
+ gBattleStruct->palaceFlags = 0;
gRandomTurnNumber = Random();
@@ -3135,7 +3135,7 @@ void SwitchInClearSetData(void)
if (gBattleMoves[gCurrentMove].effect != EFFECT_BATON_PASS)
{
for (i = 0; i < NUM_BATTLE_STATS; i++)
- gBattleMons[gActiveBattler].statStages[i] = 6;
+ gBattleMons[gActiveBattler].statStages[i] = DEFAULT_STAT_STAGE;
for (i = 0; i < gBattlersCount; i++)
{
if ((gBattleMons[i].status2 & STATUS2_ESCAPE_PREVENTION) && gDisableStructs[i].battlerPreventingEscape == gActiveBattler)
@@ -3159,7 +3159,7 @@ void SwitchInClearSetData(void)
&& (gDisableStructs[i].battlerWithSureHit == gActiveBattler))
{
gStatuses3[i] &= ~(STATUS3_ALWAYS_HITS);
- gStatuses3[i] |= 0x10;
+ gStatuses3[i] |= STATUS3_ALWAYS_HITS_TURN(2);
}
}
}
@@ -3214,7 +3214,7 @@ void SwitchInClearSetData(void)
*(3 * 2 + gActiveBattler * 8 + (u8*)(gBattleStruct->lastTakenMoveFrom) + 0) = 0;
*(3 * 2 + gActiveBattler * 8 + (u8*)(gBattleStruct->lastTakenMoveFrom) + 1) = 0;
- gBattleStruct->field_92 &= ~(gBitTable[gActiveBattler]);
+ gBattleStruct->palaceFlags &= ~(gBitTable[gActiveBattler]);
for (i = 0; i < gBattlersCount; i++)
{
@@ -3244,7 +3244,7 @@ void FaintClearSetData(void)
u8 *ptr;
for (i = 0; i < NUM_BATTLE_STATS; i++)
- gBattleMons[gActiveBattler].statStages[i] = 6;
+ gBattleMons[gActiveBattler].statStages[i] = DEFAULT_STAT_STAGE;
gBattleMons[gActiveBattler].status2 = 0;
gStatuses3[gActiveBattler] = 0;
@@ -3309,7 +3309,7 @@ void FaintClearSetData(void)
*(3 * 2 + gActiveBattler * 8 + (u8*)(gBattleStruct->lastTakenMoveFrom) + 0) = 0;
*(3 * 2 + gActiveBattler * 8 + (u8*)(gBattleStruct->lastTakenMoveFrom) + 1) = 0;
- gBattleStruct->field_92 &= ~(gBitTable[gActiveBattler]);
+ gBattleStruct->palaceFlags &= ~(gBitTable[gActiveBattler]);
for (i = 0; i < gBattlersCount; i++)
{
@@ -3398,7 +3398,7 @@ static void BattleIntroDrawTrainersOrMonsSprites(void)
hpOnSwitchout = &gBattleStruct->hpOnSwitchout[GetBattlerSide(gActiveBattler)];
*hpOnSwitchout = gBattleMons[gActiveBattler].hp;
for (i = 0; i < NUM_BATTLE_STATS; i++)
- gBattleMons[gActiveBattler].statStages[i] = 6;
+ gBattleMons[gActiveBattler].statStages[i] = DEFAULT_STAT_STAGE;
gBattleMons[gActiveBattler].status2 = 0;
}
@@ -3649,8 +3649,8 @@ static void BattleIntroOpponent1SendsOutMonAnimation(void)
NAKED
static void BattleIntroOpponent1SendsOutMonAnimation(void)
{
- asm(".syntax unified\n\
- push {r4-r6,lr}\n\
+ asm_unified(
+ "push {r4-r6,lr}\n\
ldr r0, =gBattleTypeFlags\n\
ldr r2, [r0]\n\
movs r0, 0x80\n\
@@ -3728,8 +3728,7 @@ _0803B2F2:\n\
pop {r4-r6}\n\
pop {r0}\n\
bx r0\n\
- .pool\n\
- .syntax divided");
+ .pool");
}
#endif // NONMATCHING
@@ -4052,7 +4051,7 @@ void BattleTurnPassed(void)
gRandomTurnNumber = Random();
if (gBattleTypeFlags & BATTLE_TYPE_PALACE)
- BattleScriptExecute(BattleScript_82DB881);
+ BattleScriptExecute(BattleScript_PalacePrintFlavorText);
else if (gBattleTypeFlags & BATTLE_TYPE_ARENA && gBattleStruct->arenaTurnCounter == 0)
BattleScriptExecute(BattleScript_ArenaTurnBeginning);
}
@@ -4851,40 +4850,38 @@ static void SetActionsAndBattlersTurnOrder(void)
gBattleStruct->focusPunchBattlerId = 0;
return;
}
- else
+ for (gActiveBattler = 0; gActiveBattler < gBattlersCount; gActiveBattler++)
{
- for (gActiveBattler = 0; gActiveBattler < gBattlersCount; gActiveBattler++)
+ if (gChosenActionByBattler[gActiveBattler] == B_ACTION_USE_ITEM || gChosenActionByBattler[gActiveBattler] == B_ACTION_SWITCH)
{
- if (gChosenActionByBattler[gActiveBattler] == B_ACTION_USE_ITEM || gChosenActionByBattler[gActiveBattler] == B_ACTION_SWITCH)
- {
- gActionsByTurnOrder[turnOrderId] = gChosenActionByBattler[gActiveBattler];
- gBattlerByTurnOrder[turnOrderId] = gActiveBattler;
- turnOrderId++;
- }
+ gActionsByTurnOrder[turnOrderId] = gChosenActionByBattler[gActiveBattler];
+ gBattlerByTurnOrder[turnOrderId] = gActiveBattler;
+ turnOrderId++;
}
- for (gActiveBattler = 0; gActiveBattler < gBattlersCount; gActiveBattler++)
+ }
+ for (gActiveBattler = 0; gActiveBattler < gBattlersCount; gActiveBattler++)
+ {
+ if (gChosenActionByBattler[gActiveBattler] != B_ACTION_USE_ITEM && gChosenActionByBattler[gActiveBattler] != B_ACTION_SWITCH)
{
- if (gChosenActionByBattler[gActiveBattler] != B_ACTION_USE_ITEM && gChosenActionByBattler[gActiveBattler] != B_ACTION_SWITCH)
- {
- gActionsByTurnOrder[turnOrderId] = gChosenActionByBattler[gActiveBattler];
- gBattlerByTurnOrder[turnOrderId] = gActiveBattler;
- turnOrderId++;
- }
+ gActionsByTurnOrder[turnOrderId] = gChosenActionByBattler[gActiveBattler];
+ gBattlerByTurnOrder[turnOrderId] = gActiveBattler;
+ turnOrderId++;
}
- for (i = 0; i < gBattlersCount - 1; i++)
+ }
+ for (i = 0; i < gBattlersCount - 1; i++)
+ {
+ for (j = i + 1; j < gBattlersCount; j++)
{
- for (j = i + 1; j < gBattlersCount; j++)
+ u8 battler1 = gBattlerByTurnOrder[i];
+ u8 battler2 = gBattlerByTurnOrder[j];
+
+ if (gActionsByTurnOrder[i] != B_ACTION_USE_ITEM
+ && gActionsByTurnOrder[j] != B_ACTION_USE_ITEM
+ && gActionsByTurnOrder[i] != B_ACTION_SWITCH
+ && gActionsByTurnOrder[j] != B_ACTION_SWITCH)
{
- u8 battler1 = gBattlerByTurnOrder[i];
- u8 battler2 = gBattlerByTurnOrder[j];
- if (gActionsByTurnOrder[i] != B_ACTION_USE_ITEM
- && gActionsByTurnOrder[j] != B_ACTION_USE_ITEM
- && gActionsByTurnOrder[i] != B_ACTION_SWITCH
- && gActionsByTurnOrder[j] != B_ACTION_SWITCH)
- {
- if (GetWhoStrikesFirst(battler1, battler2, FALSE))
- SwapTurnOrder(i, j);
- }
+ if (GetWhoStrikesFirst(battler1, battler2, FALSE))
+ SwapTurnOrder(i, j);
}
}
}
@@ -4962,12 +4959,8 @@ static void CheckFocusPunch_ClearVarsBeforeTurnStarts(void)
}
TryClearRageStatuses();
- gCurrentTurnActionNumber = 0;
-{
- // something stupid needed to match
- u8 zero;
- gCurrentActionFuncId = gActionsByTurnOrder[(zero = 0)];
-}
+ gCurrentTurnActionNumber = 0; //See comment underneath
+ gCurrentActionFuncId = gActionsByTurnOrder[gCurrentTurnActionNumber]; //Should be gActionsByTurnOrder[(gCurrentTurnActionNumber = 0)], but that doesn't match
gDynamicBasePower = 0;
gBattleStruct->dynamicMoveType = 0;
gBattleMainFunc = RunTurnActionsFunctions;
@@ -4990,13 +4983,10 @@ static void RunTurnActionsFunctions(void)
gHitMarker &= ~(HITMARKER_x100000);
gBattleMainFunc = sEndTurnFuncsTable[gBattleOutcome & 0x7F];
}
- else
+ else if (gBattleStruct->savedTurnActionNumber != gCurrentTurnActionNumber) // action turn has been done, clear hitmarker bits for another battlerId
{
- if (gBattleStruct->savedTurnActionNumber != gCurrentTurnActionNumber) // action turn has been done, clear hitmarker bits for another battlerId
- {
- gHitMarker &= ~(HITMARKER_NO_ATTACKSTRING);
- gHitMarker &= ~(HITMARKER_UNABLE_TO_USE_MOVE);
- }
+ gHitMarker &= ~(HITMARKER_NO_ATTACKSTRING);
+ gHitMarker &= ~(HITMARKER_UNABLE_TO_USE_MOVE);
}
}
@@ -5019,9 +5009,9 @@ static void HandleEndTurn_BattleWon(void)
gBattlescriptCurrInstr = BattleScript_FrontierTrainerBattleWon;
if (gTrainerBattleOpponent_A == TRAINER_FRONTIER_BRAIN)
- PlayBGM(MUS_KACHI3);
+ PlayBGM(MUS_VICTORY_GYM_LEADER);
else
- PlayBGM(MUS_KACHI1);
+ PlayBGM(MUS_VICTORY_TRAINER);
}
else if (gBattleTypeFlags & BATTLE_TYPE_TRAINER && !(gBattleTypeFlags & BATTLE_TYPE_LINK))
{
@@ -5032,7 +5022,7 @@ static void HandleEndTurn_BattleWon(void)
{
case TRAINER_CLASS_ELITE_FOUR:
case TRAINER_CLASS_CHAMPION:
- PlayBGM(MUS_KACHI5);
+ PlayBGM(MUS_VICTORY_LEAGUE);
break;
case TRAINER_CLASS_TEAM_AQUA:
case TRAINER_CLASS_TEAM_MAGMA:
@@ -5040,13 +5030,13 @@ static void HandleEndTurn_BattleWon(void)
case TRAINER_CLASS_AQUA_LEADER:
case TRAINER_CLASS_MAGMA_ADMIN:
case TRAINER_CLASS_MAGMA_LEADER:
- PlayBGM(MUS_KACHI4);
+ PlayBGM(MUS_VICTORY_AQUA_MAGMA);
break;
case TRAINER_CLASS_LEADER:
- PlayBGM(MUS_KACHI3);
+ PlayBGM(MUS_VICTORY_GYM_LEADER);
break;
default:
- PlayBGM(MUS_KACHI1);
+ PlayBGM(MUS_VICTORY_TRAINER);
break;
}
}
@@ -5279,7 +5269,7 @@ static void ReturnFromBattleToOverworld(void)
SetRoamerInactive();
}
- m4aSongNumStop(SE_HINSI);
+ m4aSongNumStop(SE_LOW_HEALTH);
SetMainCallback2(gMain.savedCallback);
}
@@ -5547,7 +5537,7 @@ static void HandleAction_UseItem(void)
ClearFuryCutterDestinyBondGrudge(gBattlerAttacker);
gLastUsedItem = gBattleBufferB[gBattlerAttacker][1] | (gBattleBufferB[gBattlerAttacker][2] << 8);
- if (gLastUsedItem <= ITEM_PREMIER_BALL) // is ball
+ if (gLastUsedItem <= LAST_BALL) // is ball
{
gBattlescriptCurrInstr = gBattlescriptsForBallThrow[gLastUsedItem];
}
@@ -5826,7 +5816,7 @@ static void HandleAction_GoNear(void)
static void HandleAction_SafariZoneRun(void)
{
gBattlerAttacker = gBattlerByTurnOrder[gCurrentTurnActionNumber];
- PlaySE(SE_NIGERU);
+ PlaySE(SE_FLEE);
gCurrentTurnActionNumber = gBattlersCount;
gBattleOutcome = B_OUTCOME_RAN;
}
diff --git a/src/battle_message.c b/src/battle_message.c
index f60527d7a..c004665d7 100644
--- a/src/battle_message.c
+++ b/src/battle_message.c
@@ -19,12 +19,15 @@
#include "text.h"
#include "trainer_hill.h"
#include "window.h"
+#include "constants/battle_dome.h"
#include "constants/battle_string_ids.h"
+#include "constants/berry.h"
#include "constants/frontier_util.h"
#include "constants/items.h"
#include "constants/moves.h"
#include "constants/trainers.h"
#include "constants/trainer_hill.h"
+#include "constants/weather.h"
struct BattleWindowText
{
@@ -58,8 +61,8 @@ static const u8 sText_Trainer1LoseText[] = _("{B_TRAINER1_LOSE_TEXT}");
static const u8 sText_PkmnGainedEXP[] = _("{B_BUFF1} gained{B_BUFF2}\n{B_BUFF3} EXP. Points!\p");
static const u8 sText_EmptyString4[] = _("");
static const u8 sText_ABoosted[] = _(" a boosted");
-static const u8 sText_PkmnGrewToLv[] = _("{B_BUFF1} grew to\nLV. {B_BUFF2}!{UNKNOWN_A}\p");
-static const u8 sText_PkmnLearnedMove[] = _("{B_BUFF1} learned\n{B_BUFF2}!{UNKNOWN_A}\p");
+static const u8 sText_PkmnGrewToLv[] = _("{B_BUFF1} grew to\nLV. {B_BUFF2}!{WAIT_SE}\p");
+static const u8 sText_PkmnLearnedMove[] = _("{B_BUFF1} learned\n{B_BUFF2}!{WAIT_SE}\p");
static const u8 sText_TryToLearnMove1[] = _("{B_BUFF1} is trying to\nlearn {B_BUFF2}.\p");
static const u8 sText_TryToLearnMove2[] = _("But, {B_BUFF1} can't learn\nmore than four moves.\p");
static const u8 sText_TryToLearnMove3[] = _("Delete a move to make\nroom for {B_BUFF2}?");
@@ -312,23 +315,23 @@ static const u8 sText_StatsWontIncrease2[] = _("{B_ATK_NAME_WITH_PREFIX}'s stats
static const u8 sText_StatsWontDecrease2[] = _("{B_DEF_NAME_WITH_PREFIX}'s stats won't\ngo any lower!");
static const u8 sText_CriticalHit[] = _("A critical hit!");
static const u8 sText_OneHitKO[] = _("It's a one-hit KO!");
-static const u8 sText_123Poof[] = _("{PAUSE 32}1, {PAUSE 15}2, and{PAUSE 15}… {PAUSE 15}… {PAUSE 15}… {PAUSE 15}{PLAY_SE 0x0038}Poof!\p");
+static const u8 sText_123Poof[] = _("{PAUSE 32}1, {PAUSE 15}2, and{PAUSE 15}… {PAUSE 15}… {PAUSE 15}… {PAUSE 15}{PLAY_SE SE_BALL_BOUNCE_1}Poof!\p");
static const u8 sText_AndEllipsis[] = _("And…\p");
static const u8 sText_HMMovesCantBeForgotten[] = _("HM moves can't be\nforgotten now.\p");
static const u8 sText_NotVeryEffective[] = _("It's not very effective…");
static const u8 sText_SuperEffective[] = _("It's super effective!");
-static const u8 sText_GotAwaySafely[] = _("{PLAY_SE 0x0011}Got away safely!\p");
-static const u8 sText_PkmnFledUsingIts[] = _("{PLAY_SE 0x0011}{B_ATK_NAME_WITH_PREFIX} fled\nusing its {B_LAST_ITEM}!\p");
-static const u8 sText_PkmnFledUsing[] = _("{PLAY_SE 0x0011}{B_ATK_NAME_WITH_PREFIX} fled\nusing {B_ATK_ABILITY}!\p");
-static const u8 sText_WildPkmnFled[] = _("{PLAY_SE 0x0011}Wild {B_BUFF1} fled!");
+static const u8 sText_GotAwaySafely[] = _("{PLAY_SE SE_FLEE}Got away safely!\p");
+static const u8 sText_PkmnFledUsingIts[] = _("{PLAY_SE SE_FLEE}{B_ATK_NAME_WITH_PREFIX} fled\nusing its {B_LAST_ITEM}!\p");
+static const u8 sText_PkmnFledUsing[] = _("{PLAY_SE SE_FLEE}{B_ATK_NAME_WITH_PREFIX} fled\nusing {B_ATK_ABILITY}!\p");
+static const u8 sText_WildPkmnFled[] = _("{PLAY_SE SE_FLEE}Wild {B_BUFF1} fled!");
static const u8 sText_PlayerDefeatedLinkTrainer[] = _("Player defeated\n{B_LINK_OPPONENT1_NAME}!");
static const u8 sText_TwoLinkTrainersDefeated[] = _("Player beat {B_LINK_OPPONENT1_NAME}\nand {B_LINK_OPPONENT2_NAME}!");
static const u8 sText_PlayerLostAgainstLinkTrainer[] = _("Player lost against\n{B_LINK_OPPONENT1_NAME}!");
static const u8 sText_PlayerLostToTwo[] = _("Player lost to {B_LINK_OPPONENT1_NAME}\nand {B_LINK_OPPONENT2_NAME}!");
static const u8 sText_PlayerBattledToDrawLinkTrainer[] = _("Player battled to a draw against\n{B_LINK_OPPONENT1_NAME}!");
static const u8 sText_PlayerBattledToDrawVsTwo[] = _("Player battled to a draw against\n{B_LINK_OPPONENT1_NAME} and {B_LINK_OPPONENT2_NAME}!");
-static const u8 sText_WildFled[] = _("{PLAY_SE 0x0011}{B_LINK_OPPONENT1_NAME} fled!");
-static const u8 sText_TwoWildFled[] = _("{PLAY_SE 0x0011}{B_LINK_OPPONENT1_NAME} and\n{B_LINK_OPPONENT2_NAME} fled!");
+static const u8 sText_WildFled[] = _("{PLAY_SE SE_FLEE}{B_LINK_OPPONENT1_NAME} fled!");
+static const u8 sText_TwoWildFled[] = _("{PLAY_SE SE_FLEE}{B_LINK_OPPONENT1_NAME} and\n{B_LINK_OPPONENT2_NAME} fled!");
static const u8 sText_NoRunningFromTrainers[] = _("No! There's no running\nfrom a TRAINER battle!\p");
static const u8 sText_CantEscape[] = _("Can't escape!\p");
static const u8 sText_DontLeaveBirch[] = _("PROF. BIRCH: Don't leave me like this!\p");
@@ -378,7 +381,7 @@ static const u8 sText_PkmnCuriousAboutX[] = _("{B_OPPONENT_MON1_NAME} is curious
static const u8 sText_PkmnEnthralledByX[] = _("{B_OPPONENT_MON1_NAME} is enthralled by\nthe {B_BUFF1}!");
static const u8 sText_PkmnIgnoredX[] = _("{B_OPPONENT_MON1_NAME} completely ignored\nthe {B_BUFF1}!");
static const u8 sText_ThrewPokeblockAtPkmn[] = _("{B_PLAYER_NAME} threw a {POKEBLOCK}\nat the {B_OPPONENT_MON1_NAME}!");
-static const u8 sText_OutOfSafariBalls[] = _("{PLAY_SE 0x0049}ANNOUNCER: You're out of\nSAFARI BALLS! Game over!\p");
+static const u8 sText_OutOfSafariBalls[] = _("{PLAY_SE SE_DING_DONG}ANNOUNCER: You're out of\nSAFARI BALLS! Game over!\p");
static const u8 sText_OpponentMon1Appeared[] = _("{B_OPPONENT_MON1_NAME} appeared!\p");
static const u8 sText_WildPkmnAppeared[] = _("Wild {B_OPPONENT_MON1_NAME} appeared!\p");
static const u8 sText_WildPkmnAppeared2[] = _("Wild {B_OPPONENT_MON1_NAME} appeared!\p");
@@ -433,11 +436,16 @@ static const u8 sText_SpDef2[] = _("SP. DEF");
static const u8 sText_Accuracy[] = _("accuracy");
static const u8 sText_Evasiveness[] = _("evasiveness");
-const u8 * const gStatNamesTable[] =
+const u8 * const gStatNamesTable[NUM_BATTLE_STATS] =
{
- sText_HP2, sText_Attack2, sText_Defense2,
- sText_Speed, sText_SpAtk2, sText_SpDef2,
- sText_Accuracy, sText_Evasiveness
+ [STAT_HP] = sText_HP2,
+ [STAT_ATK] = sText_Attack2,
+ [STAT_DEF] = sText_Defense2,
+ [STAT_SPEED] = sText_Speed,
+ [STAT_SPATK] = sText_SpAtk2,
+ [STAT_SPDEF] = sText_SpDef2,
+ [STAT_ACC] = sText_Accuracy,
+ [STAT_EVASION] = sText_Evasiveness,
};
static const u8 sText_PokeblockWasTooSpicy[] = _("was too spicy!");
@@ -446,11 +454,13 @@ static const u8 sText_PokeblockWasTooSweet[] = _("was too sweet!");
static const u8 sText_PokeblockWasTooBitter[] = _("was too bitter!");
static const u8 sText_PokeblockWasTooSour[] = _("was too sour!");
-const u8 * const gPokeblockWasTooXStringTable[] =
+const u8 * const gPokeblockWasTooXStringTable[FLAVOR_COUNT] =
{
- sText_PokeblockWasTooSpicy, sText_PokeblockWasTooDry,
- sText_PokeblockWasTooSweet, sText_PokeblockWasTooBitter,
- sText_PokeblockWasTooSour
+ [FLAVOR_SPICY] = sText_PokeblockWasTooSpicy,
+ [FLAVOR_DRY] = sText_PokeblockWasTooDry,
+ [FLAVOR_SWEET] = sText_PokeblockWasTooSweet,
+ [FLAVOR_BITTER] = sText_PokeblockWasTooBitter,
+ [FLAVOR_SOUR] = sText_PokeblockWasTooSour
};
static const u8 sText_PlayerUsedItem[] = _("{B_PLAYER_NAME} used\n{B_LAST_ITEM}!");
@@ -464,8 +474,8 @@ static const u8 sText_PkmnBrokeFree[] = _("Oh, no!\nThe POKéMON broke free!");
static const u8 sText_ItAppearedCaught[] = _("Aww!\nIt appeared to be caught!");
static const u8 sText_AarghAlmostHadIt[] = _("Aargh!\nAlmost had it!");
static const u8 sText_ShootSoClose[] = _("Shoot!\nIt was so close, too!");
-static const u8 sText_GotchaPkmnCaught[] = _("Gotcha!\n{B_OPPONENT_MON1_NAME} was caught!{UNKNOWN_A}{PLAY_BGM MUS_KACHI22}\p");
-static const u8 sText_GotchaPkmnCaught2[] = _("Gotcha!\n{B_OPPONENT_MON1_NAME} was caught!{UNKNOWN_A}{PLAY_BGM MUS_KACHI22}{PAUSE 127}");
+static const u8 sText_GotchaPkmnCaught[] = _("Gotcha!\n{B_OPPONENT_MON1_NAME} was caught!{WAIT_SE}{PLAY_BGM MUS_CAUGHT}\p");
+static const u8 sText_GotchaPkmnCaught2[] = _("Gotcha!\n{B_OPPONENT_MON1_NAME} was caught!{WAIT_SE}{PLAY_BGM MUS_CAUGHT}{PAUSE 127}");
static const u8 sText_GiveNicknameCaptured[] = _("Give a nickname to the\ncaptured {B_OPPONENT_MON1_NAME}?");
static const u8 sText_PkmnSentToPC[] = _("{B_OPPONENT_MON1_NAME} was sent to\n{B_PC_CREATOR_NAME} PC.");
static const u8 sText_Someones[] = _("someone's");
@@ -979,16 +989,28 @@ const u16 gStatDownStringIds[] =
STRINGID_PKMNSSTATCHANGED3, STRINGID_PKMNSSTATCHANGED4, STRINGID_STATSWONTDECREASE, STRINGID_EMPTYSTRING3
};
+// Index read from sTWOTURN_STRINGID
const u16 gFirstTurnOfTwoStringIds[] =
{
- STRINGID_PKMNWHIPPEDWHIRLWIND, STRINGID_PKMNTOOKSUNLIGHT, STRINGID_PKMNLOWEREDHEAD, STRINGID_PKMNISGLOWING,
- STRINGID_PKMNFLEWHIGH, STRINGID_PKMNDUGHOLE, STRINGID_PKMNHIDUNDERWATER, STRINGID_PKMNSPRANGUP
+ STRINGID_PKMNWHIPPEDWHIRLWIND, // MOVE_RAZOR_WIND
+ STRINGID_PKMNTOOKSUNLIGHT, // MOVE_SOLAR_BEAM
+ STRINGID_PKMNLOWEREDHEAD, // MOVE_SKULL_BASH
+ STRINGID_PKMNISGLOWING, // MOVE_SKY_ATTACK
+ STRINGID_PKMNFLEWHIGH, // MOVE_FLY
+ STRINGID_PKMNDUGHOLE, // MOVE_DIG
+ STRINGID_PKMNHIDUNDERWATER, // MOVE_DIVE
+ STRINGID_PKMNSPRANGUP // MOVE_BOUNCE
};
+// Index copied from move's index in gTrappingMoves
const u16 gWrappedStringIds[] =
{
- STRINGID_PKMNSQUEEZEDBYBIND, STRINGID_PKMNWRAPPEDBY, STRINGID_PKMNTRAPPEDINVORTEX,
- STRINGID_PKMNCLAMPED, STRINGID_PKMNTRAPPEDINVORTEX, STRINGID_PKMNTRAPPEDBYSANDTOMB
+ STRINGID_PKMNSQUEEZEDBYBIND, // MOVE_BIND
+ STRINGID_PKMNWRAPPEDBY, // MOVE_WRAP
+ STRINGID_PKMNTRAPPEDINVORTEX, // MOVE_FIRE_SPIN
+ STRINGID_PKMNCLAMPED, // MOVE_CLAMP
+ STRINGID_PKMNTRAPPEDINVORTEX, // MOVE_WHIRLPOOL
+ STRINGID_PKMNTRAPPEDBYSANDTOMB // MOVE_SAND_TOMB
};
const u16 gMistUsedStringIds[] =
@@ -1078,13 +1100,25 @@ const u16 gBallEscapeStringIds[] =
STRINGID_PKMNBROKEFREE, STRINGID_ITAPPEAREDCAUGHT, STRINGID_AARGHALMOSTHADIT, STRINGID_SHOOTSOCLOSE
};
-const u16 gWeatherContinuesStringIds[] =
-{
- STRINGID_ITISRAINING, STRINGID_ITISRAINING, STRINGID_ITISRAINING,
- STRINGID_ITISRAINING, STRINGID_ITISRAINING, STRINGID_ITISRAINING,
- STRINGID_ITISRAINING, STRINGID_ITISRAINING, STRINGID_SANDSTORMISRAGING,
- STRINGID_ITISRAINING, STRINGID_ITISRAINING, STRINGID_ITISRAINING,
- STRINGID_SUNLIGHTSTRONG, STRINGID_ITISRAINING, STRINGID_ITISRAINING, STRINGID_ITISRAINING
+// Overworld weathers that don't have an associated battle weather default to "It is raining."
+const u16 gWeatherStartsStringIds[] =
+{
+ [WEATHER_NONE] = STRINGID_ITISRAINING,
+ [WEATHER_SUNNY_CLOUDS] = STRINGID_ITISRAINING,
+ [WEATHER_SUNNY] = STRINGID_ITISRAINING,
+ [WEATHER_RAIN] = STRINGID_ITISRAINING,
+ [WEATHER_SNOW] = STRINGID_ITISRAINING,
+ [WEATHER_RAIN_THUNDERSTORM] = STRINGID_ITISRAINING,
+ [WEATHER_FOG_HORIZONTAL] = STRINGID_ITISRAINING,
+ [WEATHER_VOLCANIC_ASH] = STRINGID_ITISRAINING,
+ [WEATHER_SANDSTORM] = STRINGID_SANDSTORMISRAGING,
+ [WEATHER_FOG_DIAGONAL] = STRINGID_ITISRAINING,
+ [WEATHER_UNDERWATER] = STRINGID_ITISRAINING,
+ [WEATHER_SHADE] = STRINGID_ITISRAINING,
+ [WEATHER_DROUGHT] = STRINGID_SUNLIGHTSTRONG,
+ [WEATHER_DOWNPOUR] = STRINGID_ITISRAINING,
+ [WEATHER_UNDERWATER_BUBBLES] = STRINGID_ITISRAINING,
+ [WEATHER_ABNORMAL] = STRINGID_ITISRAINING
};
const u16 gInobedientStringIds[] =
@@ -1146,11 +1180,17 @@ const u16 gCaughtMonStringIds[] =
const u16 gTrappingMoves[] =
{
- MOVE_BIND, MOVE_WRAP, MOVE_FIRE_SPIN, MOVE_CLAMP, MOVE_WHIRLPOOL, MOVE_SAND_TOMB, 0xFFFF
+ MOVE_BIND,
+ MOVE_WRAP,
+ MOVE_FIRE_SPIN,
+ MOVE_CLAMP,
+ MOVE_WHIRLPOOL,
+ MOVE_SAND_TOMB,
+ 0xFFFF
};
const u8 gText_PkmnIsEvolving[] = _("What?\n{STR_VAR_1} is evolving!");
-const u8 gText_CongratsPkmnEvolved[] = _("Congratulations! Your {STR_VAR_1}\nevolved into {STR_VAR_2}!{UNKNOWN_A}\p");
+const u8 gText_CongratsPkmnEvolved[] = _("Congratulations! Your {STR_VAR_1}\nevolved into {STR_VAR_2}!{WAIT_SE}\p");
const u8 gText_PkmnStoppedEvolving[] = _("Huh? {STR_VAR_1}\nstopped evolving!\p");
const u8 gText_EllipsisQuestionMark[] = _("……?\p");
const u8 gText_WhatWillPkmnDo[] = _("What will\n{B_ACTIVE_NAME_WITH_PREFIX} do?");
@@ -1207,26 +1247,27 @@ const u8 gText_Draw[] = _("{HIGHLIGHT TRANSPARENT}Draw");
static const u8 sText_SpaceIs[] = _(" is");
static const u8 sText_ApostropheS[] = _("'s");
-static const u8 sATypeMove_Table[][17] =
-{
- _("a NORMAL move"),
- _("a FIGHTING move"),
- _("a FLYING move"),
- _("a POISON move"),
- _("a GROUND move"),
- _("a ROCK move"),
- _("a BUG move"),
- _("a GHOST move"),
- _("a STEEL move"),
- _("a ??? move"),
- _("a FIRE move"),
- _("a WATER move"),
- _("a GRASS move"),
- _("an ELECTRIC move"),
- _("a PSYCHIC move"),
- _("an ICE move"),
- _("a DRAGON move"),
- _("a DARK move")
+// For displaying names of invalid moves
+static const u8 sATypeMove_Table[][NUMBER_OF_MON_TYPES - 1] =
+{
+ [TYPE_NORMAL] = _("a NORMAL move"),
+ [TYPE_FIGHTING] = _("a FIGHTING move"),
+ [TYPE_FLYING] = _("a FLYING move"),
+ [TYPE_POISON] = _("a POISON move"),
+ [TYPE_GROUND] = _("a GROUND move"),
+ [TYPE_ROCK] = _("a ROCK move"),
+ [TYPE_BUG] = _("a BUG move"),
+ [TYPE_GHOST] = _("a GHOST move"),
+ [TYPE_STEEL] = _("a STEEL move"),
+ [TYPE_MYSTERY] = _("a ??? move"),
+ [TYPE_FIRE] = _("a FIRE move"),
+ [TYPE_WATER] = _("a WATER move"),
+ [TYPE_GRASS] = _("a GRASS move"),
+ [TYPE_ELECTRIC] = _("an ELECTRIC move"),
+ [TYPE_PSYCHIC] = _("a PSYCHIC move"),
+ [TYPE_ICE] = _("an ICE move"),
+ [TYPE_DRAGON] = _("a DRAGON move"),
+ [TYPE_DARK] = _("a DARK move")
};
const u8 gText_BattleTourney[] = _("BATTLE TOURNEY");
@@ -1235,16 +1276,16 @@ static const u8 sText_Round2[] = _("Round 2");
static const u8 sText_Semifinal[] = _("Semifinal");
static const u8 sText_Final[] = _("Final");
-const u8 *const gRoundsStringTable[] =
+const u8 *const gRoundsStringTable[DOME_ROUNDS_COUNT] =
{
- sText_Round1,
- sText_Round2,
- sText_Semifinal,
- sText_Final
+ [DOME_ROUND1] = sText_Round1,
+ [DOME_ROUND2] = sText_Round2,
+ [DOME_SEMIFINAL] = sText_Semifinal,
+ [DOME_FINAL] = sText_Final
};
const u8 gText_TheGreatNewHope[] = _("The great new hope!\p");
-const u8 gText_WillChampinshipDreamComeTrue[] = _("Will the championship dream come true?!\p");
+const u8 gText_WillChampionshipDreamComeTrue[] = _("Will the championship dream come true?!\p");
const u8 gText_AFormerChampion[] = _("A former CHAMPION!\p");
const u8 gText_ThePreviousChampion[] = _("The previous CHAMPION!\p");
const u8 gText_TheUnbeatenChampion[] = _("The unbeaten CHAMPION!\p");
@@ -1267,10 +1308,12 @@ static const u8 sText_PkmnGettingIntoPosition[] = _("{B_SCR_ACTIVE_NAME_WITH_PRE
static const u8 sText_PkmnBeganGrowlingDeeply[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} began growling deeply!");
static const u8 sText_PkmnEagerForMore[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} is eager for more!");
-const u16 gStringIds_85CCF0A[] =
+const u16 gBattlePalaceFlavorTextTable[] =
{
- STRINGID_GLINTAPPEARSINEYE, STRINGID_PKMNGETTINGINTOPOSITION,
- STRINGID_PKMNBEGANGROWLINGDEEPLY, STRINGID_PKMNEAGERFORMORE
+ STRINGID_GLINTAPPEARSINEYE,
+ STRINGID_PKMNGETTINGINTOPOSITION,
+ STRINGID_PKMNBEGANGROWLINGDEEPLY,
+ STRINGID_PKMNEAGERFORMORE
};
static const u8 sText_RefIfNothingIsDecided[] = _("REFEREE: If nothing is decided in\n3 turns, we will go to judging!");
@@ -1303,7 +1346,7 @@ static const u8 sText_QuestionForfeitMatch[] = _("Would you like to forfeit the
static const u8 sText_ForfeitedMatch[] = _("{B_PLAYER_NAME} forfeited the match!");
static const u8 sText_Trainer1WinText[] = _("{B_TRAINER1_WIN_TEXT}");
static const u8 sText_Trainer2WinText[] = _("{B_TRAINER2_WIN_TEXT}");
-static const u8 sText_Trainer1Fled[] = _( "{PLAY_SE 0x0011}{B_TRAINER1_CLASS} {B_TRAINER1_NAME} fled!");
+static const u8 sText_Trainer1Fled[] = _( "{PLAY_SE SE_FLEE}{B_TRAINER1_CLASS} {B_TRAINER1_NAME} fled!");
static const u8 sText_PlayerLostAgainstTrainer1[] = _("Player lost against\n{B_TRAINER1_CLASS} {B_TRAINER1_NAME}!");
static const u8 sText_PlayerBattledToDrawTrainer1[] = _("Player battled to a draw against\n{B_TRAINER1_CLASS} {B_TRAINER1_NAME}!");
const u8 gText_RecordBattleToPass[] = _("Would you like to record your battle\non your FRONTIER PASS?");
@@ -1981,7 +2024,7 @@ void BufferStringBattle(u16 stringID)
}
else
{
- if (gTrainerBattleOpponent_A == TRAINER_OPPONENT_C00)
+ if (gTrainerBattleOpponent_A == TRAINER_UNION_ROOM)
stringPtr = sText_Trainer1WantsToBattle;
else if (gBattleTypeFlags & BATTLE_TYPE_RECORDED)
stringPtr = sText_LinkTrainerWantsToBattlePause;
@@ -2049,7 +2092,7 @@ void BufferStringBattle(u16 stringID)
{
if (!(gBattleTypeFlags & (BATTLE_TYPE_LINK | BATTLE_TYPE_x2000000)))
stringPtr = sText_Trainer1SentOutPkmn;
- else if (gTrainerBattleOpponent_A == TRAINER_OPPONENT_C00)
+ else if (gTrainerBattleOpponent_A == TRAINER_UNION_ROOM)
stringPtr = sText_Trainer1SentOutPkmn;
else
stringPtr = sText_LinkTrainerSentOutPkmn;
@@ -2110,7 +2153,7 @@ void BufferStringBattle(u16 stringID)
{
if (gBattleTypeFlags & BATTLE_TYPE_MULTI)
stringPtr = sText_LinkTrainerMultiSentOutPkmn;
- else if (gTrainerBattleOpponent_A == TRAINER_OPPONENT_C00)
+ else if (gTrainerBattleOpponent_A == TRAINER_UNION_ROOM)
stringPtr = sText_Trainer1SentOutPkmn2;
else
stringPtr = sText_LinkTrainerSentOutPkmn2;
@@ -2180,7 +2223,7 @@ void BufferStringBattle(u16 stringID)
break;
}
}
- else if (gTrainerBattleOpponent_A == TRAINER_OPPONENT_C00)
+ else if (gTrainerBattleOpponent_A == TRAINER_UNION_ROOM)
{
switch (gBattleTextBuff1[0])
{
@@ -2495,8 +2538,8 @@ u32 BattleStringExpandPlaceholders(const u8 *src, u8 *dst)
case B_TXT_TRAINER1_CLASS: // trainer class name
if (gBattleTypeFlags & BATTLE_TYPE_SECRET_BASE)
toCpy = gTrainerClassNames[GetSecretBaseTrainerClass()];
- else if (gTrainerBattleOpponent_A == TRAINER_OPPONENT_C00)
- toCpy = gTrainerClassNames[sub_8068BB0()];
+ else if (gTrainerBattleOpponent_A == TRAINER_UNION_ROOM)
+ toCpy = gTrainerClassNames[GetUnionRoomTrainerClass()];
else if (gTrainerBattleOpponent_A == TRAINER_FRONTIER_BRAIN)
toCpy = gTrainerClassNames[GetFrontierBrainTrainerClass()];
else if (gBattleTypeFlags & BATTLE_TYPE_FRONTIER)
@@ -2517,7 +2560,7 @@ u32 BattleStringExpandPlaceholders(const u8 *src, u8 *dst)
ConvertInternationalString(text, gBattleResources->secretBase->language);
toCpy = text;
}
- else if (gTrainerBattleOpponent_A == TRAINER_OPPONENT_C00)
+ else if (gTrainerBattleOpponent_A == TRAINER_UNION_ROOM)
{
toCpy = gLinkPlayers[multiplayerId ^ BIT_SIDE].name;
}
@@ -2713,7 +2756,7 @@ u32 BattleStringExpandPlaceholders(const u8 *src, u8 *dst)
{
dst[dstID] = EXT_CTRL_CODE_BEGIN;
dstID++;
- dst[dstID] = 9;
+ dst[dstID] = EXT_CTRL_CODE_PAUSE_UNTIL_PRESS;
dstID++;
}
}
@@ -2952,7 +2995,7 @@ void BattlePutTextOnWindow(const u8 *text, u8 windowId)
printerTemplate.currentY = printerTemplate.y;
printerTemplate.letterSpacing = textInfo[windowId].letterSpacing;
printerTemplate.lineSpacing = textInfo[windowId].lineSpacing;
- printerTemplate.unk = 0;
+ printerTemplate.style = 0;
printerTemplate.fgColor = textInfo[windowId].fgColor;
printerTemplate.bgColor = textInfo[windowId].bgColor;
printerTemplate.shadowColor = textInfo[windowId].shadowColor;
diff --git a/src/battle_pyramid_bag.c b/src/battle_pyramid_bag.c
index 7c650800b..e038e71e1 100644
--- a/src/battle_pyramid_bag.c
+++ b/src/battle_pyramid_bag.c
@@ -402,7 +402,7 @@ static void sub_81C501C(void)
RunTasks();
AnimateSprites();
BuildOamBuffer();
- do_scheduled_bg_tilemap_copies_to_vram();
+ DoScheduledBgTilemapCopiesToVram();
UpdatePaletteFade();
}
@@ -415,7 +415,7 @@ static void sub_81C5038(void)
static void sub_81C504C(void)
{
- while (sub_81221EC() != TRUE && sub_81C5078() != TRUE && sub_81221AC() != TRUE);
+ while (MenuHelpers_CallLinkSomething() != TRUE && sub_81C5078() != TRUE && MenuHelpers_LinkSomething() != TRUE);
}
static bool8 sub_81C5078(void)
@@ -424,7 +424,7 @@ static bool8 sub_81C5078(void)
{
case 0:
SetVBlankHBlankCallbacksToNull();
- clear_scheduled_bg_copies_to_vram();
+ ClearScheduledBgCopiesToVram();
gMain.state++;
break;
case 1:
@@ -445,7 +445,7 @@ static bool8 sub_81C5078(void)
gMain.state++;
break;
case 5:
- if (!sub_81221AC())
+ if (!MenuHelpers_LinkSomething())
{
ResetTasks();
}
@@ -516,7 +516,7 @@ static void sub_81C51DC(void)
InitBgsFromTemplates(0, gUnknown_0861F2B4, ARRAY_COUNT(gUnknown_0861F2B4));
SetBgTilemapBuffer(2, gPyramidBagResources->tilemapBuffer);
ResetAllBgsCoordinates();
- schedule_bg_copy_tilemap_to_vram(2);
+ ScheduleBgCopyTilemapToVram(2);
SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_0 |
DISPCNT_OBJ_1D_MAP |
DISPCNT_OBJ_ON);
@@ -531,12 +531,12 @@ static bool8 sub_81C5238(void)
switch (gPyramidBagResources->state)
{
case 0:
- reset_temp_tile_data_buffers();
- decompress_and_copy_tile_data_to_vram(2, gBagScreen_Gfx, 0, 0, 0);
+ ResetTempTileDataBuffers();
+ DecompressAndCopyTileDataToVram(2, gBagScreen_Gfx, 0, 0, 0);
gPyramidBagResources->state++;
break;
case 1:
- if (free_temp_tile_data_buffers_if_possible() != TRUE)
+ if (FreeTempTileDataBuffersIfPossible() != TRUE)
{
LZDecompressWram(gBattleFrontierGfx_PyramidBagTileMap, gPyramidBagResources->tilemapBuffer);
gPyramidBagResources->state++;
@@ -837,7 +837,7 @@ static void sub_81C5B4C(u8 taskId)
static void Task_HandlePyramidBagInput(u8 taskId)
{
s16 *data = gTasks[taskId].data;
- if (sub_81221EC() != TRUE && !gPaletteFade.active)
+ if (MenuHelpers_CallLinkSomething() != TRUE && !gPaletteFade.active)
{
if (gMain.newKeys & SELECT_BUTTON)
{
@@ -940,7 +940,7 @@ static void sub_81C5F08(u8 windowId, u8 horizontalCount, u8 verticalCount)
static void HandleFewMenuActionsInput(u8 taskId)
{
- if (sub_81221EC() != TRUE)
+ if (MenuHelpers_CallLinkSomething() != TRUE)
{
s32 id = Menu_ProcessInputNoWrap();
switch (id)
@@ -962,7 +962,7 @@ static void HandleFewMenuActionsInput(u8 taskId)
static void HandleMenuActionInput(u8 taskId)
{
- if (sub_81221EC() != TRUE)
+ if (MenuHelpers_CallLinkSomething() != TRUE)
{
s8 id = Menu_GetCursorPos();
if (gMain.newKeys & DPAD_UP)
@@ -970,7 +970,7 @@ static void HandleMenuActionInput(u8 taskId)
if (id > 0 && IsValidMenuAction(id - 2))
{
PlaySE(SE_SELECT);
- sub_8199134(0, -1);
+ ChangeListMenuCursorPosition(MENU_CURSOR_DELTA_NONE, MENU_CURSOR_DELTA_UP);
}
}
else if (gMain.newKeys & DPAD_DOWN)
@@ -978,7 +978,7 @@ static void HandleMenuActionInput(u8 taskId)
if (id < gPyramidBagResources->menuActionsCount - 2 && IsValidMenuAction(id + 2))
{
PlaySE(SE_SELECT);
- sub_8199134(0, 1);
+ ChangeListMenuCursorPosition(MENU_CURSOR_DELTA_NONE, MENU_CURSOR_DELTA_DOWN);
}
}
else if (gMain.newKeys & DPAD_LEFT || GetLRKeysPressed() == MENU_L_PRESSED)
@@ -986,7 +986,7 @@ static void HandleMenuActionInput(u8 taskId)
if (id & 1 && IsValidMenuAction(id - 1))
{
PlaySE(SE_SELECT);
- sub_8199134(-1, 0);
+ ChangeListMenuCursorPosition(MENU_CURSOR_DELTA_LEFT, MENU_CURSOR_DELTA_NONE);
}
}
else if (gMain.newKeys & DPAD_RIGHT || GetLRKeysPressed() == MENU_R_PRESSED)
@@ -994,7 +994,7 @@ static void HandleMenuActionInput(u8 taskId)
if (!(id & 1) && IsValidMenuAction(id + 1))
{
PlaySE(SE_SELECT);
- sub_8199134(1, 0);
+ ChangeListMenuCursorPosition(MENU_CURSOR_DELTA_RIGHT, MENU_CURSOR_DELTA_NONE);
}
}
else if (gMain.newKeys & A_BUTTON)
@@ -1049,7 +1049,7 @@ static void BagAction_UseOnField(u8 taskId)
{
sub_81C61A8();
FillWindowPixelBuffer(1, PIXEL_FILL(0));
- schedule_bg_copy_tilemap_to_vram(0);
+ ScheduleBgCopyTilemapToVram(0);
ItemId_GetFieldFunc(gSpecialVar_ItemId)(taskId);
}
}
@@ -1060,8 +1060,8 @@ static void BagAction_Cancel(u8 taskId)
sub_81C61A8();
PrintItemDescription(data[1]);
- schedule_bg_copy_tilemap_to_vram(0);
- schedule_bg_copy_tilemap_to_vram(1);
+ ScheduleBgCopyTilemapToVram(0);
+ ScheduleBgCopyTilemapToVram(1);
sub_81C5A98(data[0], 0);
SetTaskToMainPyramidBagInputHandler(taskId);
}
@@ -1148,7 +1148,7 @@ static void sub_81C64B4(u8 taskId)
PlaySE(SE_SELECT);
ClearStdWindowAndFrameToTransparent(3, 0);
ClearWindowTilemap(3);
- schedule_bg_copy_tilemap_to_vram(1);
+ ScheduleBgCopyTilemapToVram(1);
sub_81C6350(taskId);
}
else if (gMain.newKeys & B_BUTTON)
@@ -1156,7 +1156,7 @@ static void sub_81C64B4(u8 taskId)
PlaySE(SE_SELECT);
ClearStdWindowAndFrameToTransparent(3, 0);
ClearWindowTilemap(3);
- schedule_bg_copy_tilemap_to_vram(1);
+ ScheduleBgCopyTilemapToVram(1);
DontTossItem(taskId);
}
}
@@ -1188,7 +1188,7 @@ static void sub_81C65CC(u8 taskId)
sub_81C59BC();
SetBagItemsListTemplate();
data[0] = ListMenuInit(&gMultiuseListMenuTemplate, *scrollOffset, *selectedRow);
- schedule_bg_copy_tilemap_to_vram(0);
+ ScheduleBgCopyTilemapToVram(0);
SetTaskToMainPyramidBagInputHandler(taskId);
}
}
@@ -1275,7 +1275,7 @@ static void Task_BeginItemSwap(u8 taskId)
static void Task_ItemSwapHandleInput(u8 taskId)
{
s16 *data = gTasks[taskId].data;
- if (sub_81221EC() != TRUE)
+ if (MenuHelpers_CallLinkSomething() != TRUE)
{
if (gMain.newKeys & SELECT_BUTTON)
{
@@ -1400,8 +1400,8 @@ static void sub_81C6BD8(void)
PutWindowTilemap(0);
PutWindowTilemap(1);
- schedule_bg_copy_tilemap_to_vram(0);
- schedule_bg_copy_tilemap_to_vram(1);
+ ScheduleBgCopyTilemapToVram(0);
+ ScheduleBgCopyTilemapToVram(1);
}
static void PrintOnWindow_Font1(u8 windowId, const u8 *src, u8 x, u8 y, u8 letterSpacing, u8 lineSpacing, u8 speed, u8 colorTableId)
@@ -1417,7 +1417,7 @@ static void PrintOnWindow_Font7(u8 windowId, const u8 *src, u8 x, u8 y, u8 lette
static void sub_81C6CEC(u8 windowId)
{
DrawStdFrameWithCustomTileAndPalette(windowId, 0, 1, 0xE);
- schedule_bg_copy_tilemap_to_vram(1);
+ ScheduleBgCopyTilemapToVram(1);
}
static u8 sub_81C6D08(u8 windowArrayId)
@@ -1432,7 +1432,7 @@ static u8 sub_81C6D24(u8 windowArrayId)
{
*windowId = AddWindow(&gUnknown_0861F350[windowArrayId]);
DrawStdFrameWithCustomTileAndPalette(*windowId, FALSE, 1, 0xE);
- schedule_bg_copy_tilemap_to_vram(1);
+ ScheduleBgCopyTilemapToVram(1);
}
return *windowId;
}
@@ -1445,7 +1445,7 @@ static void sub_81C6D6C(u8 windowArrayId)
ClearStdWindowAndFrameToTransparent(*windowId, FALSE);
ClearWindowTilemap(*windowId);
RemoveWindow(*windowId);
- schedule_bg_copy_tilemap_to_vram(1);
+ ScheduleBgCopyTilemapToVram(1);
*windowId = 0xFF;
}
}
@@ -1459,7 +1459,7 @@ void DisplayItemMessageInBattlePyramid(u8 taskId, const u8 *str, void (*callback
{
FillWindowPixelBuffer(2, PIXEL_FILL(1));
DisplayMessageAndContinueTask(taskId, 2, 0xA, 0xD, 1, GetPlayerTextSpeedDelay(), str, callback);
- schedule_bg_copy_tilemap_to_vram(1);
+ ScheduleBgCopyTilemapToVram(1);
}
static void CloseBattlePyramidBagTextWindow(void)
@@ -1467,7 +1467,7 @@ static void CloseBattlePyramidBagTextWindow(void)
ClearDialogWindowAndFrameToTransparent(2, FALSE);
// This ClearWindowTilemap call is redundant, since ClearDialogWindowAndFrameToTransparent already calls it.
ClearWindowTilemap(2);
- schedule_bg_copy_tilemap_to_vram(1);
+ ScheduleBgCopyTilemapToVram(1);
}
#define ITEM_IMAGE_TAG 0x1024
diff --git a/src/battle_records.c b/src/battle_records.c
index ccd16e219..680733527 100644
--- a/src/battle_records.c
+++ b/src/battle_records.c
@@ -485,7 +485,7 @@ static void CB2_ShowTrainerHillRecords(void)
gMain.state++;
break;
case 2:
- sTilemapBuffer = AllocZeroed(0x800);
+ sTilemapBuffer = AllocZeroed(BG_SCREEN_SIZE);
ResetBgsAndClearDma3BusyFlags(0);
InitBgsFromTemplates(0, sTrainerHillRecordsBgTemplates, ARRAY_COUNT(sTrainerHillRecordsBgTemplates));
SetBgTilemapBuffer(3, sTilemapBuffer);
@@ -494,7 +494,7 @@ static void CB2_ShowTrainerHillRecords(void)
break;
case 3:
LoadTrainerHillRecordsWindowGfx(3);
- LoadPalette(stdpal_get(0), 0xF0, 0x20);
+ LoadPalette(GetTextWindowPalette(0), 0xF0, 0x20);
gMain.state++;
break;
case 4:
diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c
index 84f2b1f4d..9ff5e8fc6 100644
--- a/src/battle_script_commands.c
+++ b/src/battle_script_commands.c
@@ -606,111 +606,66 @@ static const struct StatFractions sAccuracyStageRatios[] =
// The chance is 1/N for each stage.
static const u16 sCriticalHitChance[] = {16, 8, 4, 3, 2};
-static const u32 sStatusFlagsForMoveEffects[] =
-{
- 0x00000000,
- STATUS1_SLEEP,
- STATUS1_POISON,
- STATUS1_BURN,
- STATUS1_FREEZE,
- STATUS1_PARALYSIS,
- STATUS1_TOXIC_POISON,
- STATUS2_CONFUSION,
- STATUS2_FLINCHED,
- 0x00000000,
- STATUS2_UPROAR,
- 0x00000000,
- STATUS2_MULTIPLETURNS,
- STATUS2_WRAPPED,
- 0x00000000,
- 0x00000000,
- 0x00000000,
- 0x00000000,
- 0x00000000,
- 0x00000000,
- 0x00000000,
- 0x00000000,
- 0x00000000,
- 0x00000000,
- 0x00000000,
- 0x00000000,
- 0x00000000,
- 0x00000000,
- 0x00000000,
- STATUS2_RECHARGE,
- 0x00000000,
- 0x00000000,
- STATUS2_ESCAPE_PREVENTION,
- STATUS2_NIGHTMARE,
- 0x00000000,
- 0x00000000,
- 0x00000000,
- 0x00000000,
- 0x00000000,
- 0x00000000,
- 0x00000000,
- 0x00000000,
- 0x00000000,
- 0x00000000,
- 0x00000000,
- 0x00000000,
- 0x00000000,
- 0x00000000,
- 0x00000000,
- 0x00000000,
- 0x00000000,
- 0x00000000,
- 0x00000000,
- STATUS2_LOCK_CONFUSE,
- 0x00000000,
- 0x00000000,
- 0x00000000,
- 0x00000000,
- 0x00000000,
- 0x00000000
+static const u32 sStatusFlagsForMoveEffects[NUM_MOVE_EFFECTS] =
+{
+ [MOVE_EFFECT_SLEEP] = STATUS1_SLEEP,
+ [MOVE_EFFECT_POISON] = STATUS1_POISON,
+ [MOVE_EFFECT_BURN] = STATUS1_BURN,
+ [MOVE_EFFECT_FREEZE] = STATUS1_FREEZE,
+ [MOVE_EFFECT_PARALYSIS] = STATUS1_PARALYSIS,
+ [MOVE_EFFECT_TOXIC] = STATUS1_TOXIC_POISON,
+ [MOVE_EFFECT_CONFUSION] = STATUS2_CONFUSION,
+ [MOVE_EFFECT_FLINCH] = STATUS2_FLINCHED,
+ [MOVE_EFFECT_UPROAR] = STATUS2_UPROAR,
+ [MOVE_EFFECT_CHARGING] = STATUS2_MULTIPLETURNS,
+ [MOVE_EFFECT_WRAP] = STATUS2_WRAPPED,
+ [MOVE_EFFECT_RECHARGE] = STATUS2_RECHARGE,
+ [MOVE_EFFECT_PREVENT_ESCAPE] = STATUS2_ESCAPE_PREVENTION,
+ [MOVE_EFFECT_NIGHTMARE] = STATUS2_NIGHTMARE,
+ [MOVE_EFFECT_THRASH] = STATUS2_LOCK_CONFUSE,
};
static const u8* const sMoveEffectBS_Ptrs[] =
{
- [0] = BattleScript_MoveEffectSleep,
- [MOVE_EFFECT_SLEEP] = BattleScript_MoveEffectSleep,
- [MOVE_EFFECT_POISON] = BattleScript_MoveEffectPoison,
- [MOVE_EFFECT_BURN] = BattleScript_MoveEffectBurn,
- [MOVE_EFFECT_FREEZE] = BattleScript_MoveEffectFreeze,
- [MOVE_EFFECT_PARALYSIS] = BattleScript_MoveEffectParalysis,
- [MOVE_EFFECT_TOXIC] = BattleScript_MoveEffectToxic,
- [MOVE_EFFECT_CONFUSION] = BattleScript_MoveEffectConfusion,
- [MOVE_EFFECT_FLINCH] = BattleScript_MoveEffectSleep,
- [MOVE_EFFECT_TRI_ATTACK] = BattleScript_MoveEffectSleep,
- [MOVE_EFFECT_UPROAR] = BattleScript_MoveEffectUproar,
- [MOVE_EFFECT_PAYDAY] = BattleScript_MoveEffectPayDay,
- [MOVE_EFFECT_CHARGING] = BattleScript_MoveEffectSleep,
- [MOVE_EFFECT_WRAP] = BattleScript_MoveEffectWrap,
- [MOVE_EFFECT_RECOIL_25] = BattleScript_MoveEffectRecoil,
- [MOVE_EFFECT_ATK_PLUS_1] = BattleScript_MoveEffectSleep,
- [MOVE_EFFECT_DEF_PLUS_1] = BattleScript_MoveEffectSleep,
- [MOVE_EFFECT_SPD_PLUS_1] = BattleScript_MoveEffectSleep,
- [MOVE_EFFECT_SP_ATK_PLUS_1] = BattleScript_MoveEffectSleep,
- [MOVE_EFFECT_SP_DEF_PLUS_1] = BattleScript_MoveEffectSleep,
- [MOVE_EFFECT_ACC_PLUS_1] = BattleScript_MoveEffectSleep,
- [MOVE_EFFECT_EVS_PLUS_1] = BattleScript_MoveEffectSleep,
- [MOVE_EFFECT_ATK_MINUS_1] = BattleScript_MoveEffectSleep,
- [MOVE_EFFECT_DEF_MINUS_1] = BattleScript_MoveEffectSleep,
- [MOVE_EFFECT_SPD_MINUS_1] = BattleScript_MoveEffectSleep,
- [MOVE_EFFECT_SP_ATK_MINUS_1] = BattleScript_MoveEffectSleep,
- [MOVE_EFFECT_SP_DEF_MINUS_1] = BattleScript_MoveEffectSleep,
- [MOVE_EFFECT_ACC_MINUS_1] = BattleScript_MoveEffectSleep,
- [MOVE_EFFECT_EVS_MINUS_1] = BattleScript_MoveEffectSleep,
- [MOVE_EFFECT_RECHARGE] = BattleScript_MoveEffectSleep,
- [MOVE_EFFECT_RAGE] = BattleScript_MoveEffectSleep,
- [MOVE_EFFECT_STEAL_ITEM] = BattleScript_MoveEffectSleep,
- [MOVE_EFFECT_PREVENT_ESCAPE] = BattleScript_MoveEffectSleep,
- [MOVE_EFFECT_NIGHTMARE] = BattleScript_MoveEffectSleep,
- [MOVE_EFFECT_ALL_STATS_UP] = BattleScript_MoveEffectSleep,
- [MOVE_EFFECT_RAPIDSPIN] = BattleScript_MoveEffectSleep,
+ [0] = BattleScript_MoveEffectSleep,
+ [MOVE_EFFECT_SLEEP] = BattleScript_MoveEffectSleep,
+ [MOVE_EFFECT_POISON] = BattleScript_MoveEffectPoison,
+ [MOVE_EFFECT_BURN] = BattleScript_MoveEffectBurn,
+ [MOVE_EFFECT_FREEZE] = BattleScript_MoveEffectFreeze,
+ [MOVE_EFFECT_PARALYSIS] = BattleScript_MoveEffectParalysis,
+ [MOVE_EFFECT_TOXIC] = BattleScript_MoveEffectToxic,
+ [MOVE_EFFECT_CONFUSION] = BattleScript_MoveEffectConfusion,
+ [MOVE_EFFECT_FLINCH] = BattleScript_MoveEffectSleep,
+ [MOVE_EFFECT_TRI_ATTACK] = BattleScript_MoveEffectSleep,
+ [MOVE_EFFECT_UPROAR] = BattleScript_MoveEffectUproar,
+ [MOVE_EFFECT_PAYDAY] = BattleScript_MoveEffectPayDay,
+ [MOVE_EFFECT_CHARGING] = BattleScript_MoveEffectSleep,
+ [MOVE_EFFECT_WRAP] = BattleScript_MoveEffectWrap,
+ [MOVE_EFFECT_RECOIL_25] = BattleScript_MoveEffectRecoil,
+ [MOVE_EFFECT_ATK_PLUS_1] = BattleScript_MoveEffectSleep,
+ [MOVE_EFFECT_DEF_PLUS_1] = BattleScript_MoveEffectSleep,
+ [MOVE_EFFECT_SPD_PLUS_1] = BattleScript_MoveEffectSleep,
+ [MOVE_EFFECT_SP_ATK_PLUS_1] = BattleScript_MoveEffectSleep,
+ [MOVE_EFFECT_SP_DEF_PLUS_1] = BattleScript_MoveEffectSleep,
+ [MOVE_EFFECT_ACC_PLUS_1] = BattleScript_MoveEffectSleep,
+ [MOVE_EFFECT_EVS_PLUS_1] = BattleScript_MoveEffectSleep,
+ [MOVE_EFFECT_ATK_MINUS_1] = BattleScript_MoveEffectSleep,
+ [MOVE_EFFECT_DEF_MINUS_1] = BattleScript_MoveEffectSleep,
+ [MOVE_EFFECT_SPD_MINUS_1] = BattleScript_MoveEffectSleep,
+ [MOVE_EFFECT_SP_ATK_MINUS_1] = BattleScript_MoveEffectSleep,
+ [MOVE_EFFECT_SP_DEF_MINUS_1] = BattleScript_MoveEffectSleep,
+ [MOVE_EFFECT_ACC_MINUS_1] = BattleScript_MoveEffectSleep,
+ [MOVE_EFFECT_EVS_MINUS_1] = BattleScript_MoveEffectSleep,
+ [MOVE_EFFECT_RECHARGE] = BattleScript_MoveEffectSleep,
+ [MOVE_EFFECT_RAGE] = BattleScript_MoveEffectSleep,
+ [MOVE_EFFECT_STEAL_ITEM] = BattleScript_MoveEffectSleep,
+ [MOVE_EFFECT_PREVENT_ESCAPE] = BattleScript_MoveEffectSleep,
+ [MOVE_EFFECT_NIGHTMARE] = BattleScript_MoveEffectSleep,
+ [MOVE_EFFECT_ALL_STATS_UP] = BattleScript_MoveEffectSleep,
+ [MOVE_EFFECT_RAPIDSPIN] = BattleScript_MoveEffectSleep,
[MOVE_EFFECT_REMOVE_PARALYSIS] = BattleScript_MoveEffectSleep,
- [MOVE_EFFECT_ATK_DEF_DOWN] = BattleScript_MoveEffectSleep,
- [MOVE_EFFECT_RECOIL_33] = BattleScript_MoveEffectRecoil,
+ [MOVE_EFFECT_ATK_DEF_DOWN] = BattleScript_MoveEffectSleep,
+ [MOVE_EFFECT_RECOIL_33] = BattleScript_MoveEffectRecoil,
};
static const struct WindowTemplate sUnusedWinTemplate = {0, 1, 3, 7, 0xF, 0x1F, 0x3F};
@@ -797,16 +752,16 @@ static const u8 sFlailHpScaleToPowerTable[] =
static const u16 sNaturePowerMoves[] =
{
- MOVE_STUN_SPORE,
- MOVE_RAZOR_LEAF,
- MOVE_EARTHQUAKE,
- MOVE_HYDRO_PUMP,
- MOVE_SURF,
- MOVE_BUBBLE_BEAM,
- MOVE_ROCK_SLIDE,
- MOVE_SHADOW_BALL,
- MOVE_SWIFT,
- MOVE_SWIFT
+ [BATTLE_TERRAIN_GRASS] = MOVE_STUN_SPORE,
+ [BATTLE_TERRAIN_LONG_GRASS] = MOVE_RAZOR_LEAF,
+ [BATTLE_TERRAIN_SAND] = MOVE_EARTHQUAKE,
+ [BATTLE_TERRAIN_UNDERWATER] = MOVE_HYDRO_PUMP,
+ [BATTLE_TERRAIN_WATER] = MOVE_SURF,
+ [BATTLE_TERRAIN_POND] = MOVE_BUBBLE_BEAM,
+ [BATTLE_TERRAIN_MOUNTAIN] = MOVE_ROCK_SLIDE,
+ [BATTLE_TERRAIN_CAVE] = MOVE_SHADOW_BALL,
+ [BATTLE_TERRAIN_BUILDING] = MOVE_SWIFT,
+ [BATTLE_TERRAIN_PLAIN] = MOVE_SWIFT
};
// format: min. weight (hectograms), base power
@@ -864,58 +819,92 @@ static const u8 sPickupProbabilities[] =
static const u8 sTerrainToType[] =
{
- TYPE_GRASS, // tall grass
- TYPE_GRASS, // long grass
- TYPE_GROUND, // sand
- TYPE_WATER, // underwater
- TYPE_WATER, // water
- TYPE_WATER, // pond water
- TYPE_ROCK, // rock
- TYPE_ROCK, // cave
- TYPE_NORMAL, // building
- TYPE_NORMAL, // plain
+ [BATTLE_TERRAIN_GRASS] = TYPE_GRASS,
+ [BATTLE_TERRAIN_LONG_GRASS] = TYPE_GRASS,
+ [BATTLE_TERRAIN_SAND] = TYPE_GROUND,
+ [BATTLE_TERRAIN_UNDERWATER] = TYPE_WATER,
+ [BATTLE_TERRAIN_WATER] = TYPE_WATER,
+ [BATTLE_TERRAIN_POND] = TYPE_WATER,
+ [BATTLE_TERRAIN_MOUNTAIN] = TYPE_ROCK,
+ [BATTLE_TERRAIN_CAVE] = TYPE_ROCK,
+ [BATTLE_TERRAIN_BUILDING] = TYPE_NORMAL,
+ [BATTLE_TERRAIN_PLAIN] = TYPE_NORMAL,
};
+// - ITEM_ULTRA_BALL skips Master Ball and ITEM_NONE
static const u8 sBallCatchBonuses[] =
{
- 20, 15, 10, 15 // Ultra, Great, Poke, Safari
+ [ITEM_ULTRA_BALL - ITEM_ULTRA_BALL] = 20,
+ [ITEM_GREAT_BALL - ITEM_ULTRA_BALL] = 15,
+ [ITEM_POKE_BALL - ITEM_ULTRA_BALL] = 10,
+ [ITEM_SAFARI_BALL - ITEM_ULTRA_BALL] = 15
};
-const ALIGNED(4) u8 gUnknown_0831C494[][4] =
-{
- {0x3d, 0x44, 0x3d, 0x44},
- {0x14, 0x2d, 0x54, 0x5c},
- {0x46, 0x55, 0x20, 0x5c},
- {0x26, 0x45, 0x46, 0x55},
- {0x14, 0x5a, 0x46, 0x5c},
- {0x1e, 0x32, 0x20, 0x5a},
- {0x38, 0x4e, 0x38, 0x4e},
- {0x19, 0x28, 0x4b, 0x5a},
- {0x45, 0x4b, 0x1c, 0x53},
- {0x23, 0x2d, 0x1d, 0x23},
- {0x3e, 0x48, 0x1e, 0x32},
- {0x3a, 0x5f, 0x58, 0x5e},
- {0x22, 0x2d, 0x1d, 0x28},
- {0x23, 0x28, 0x23, 0x5f},
- {0x38, 0x4e, 0x38, 0x4e},
- {0x23, 0x50, 0x22, 0x5e},
- {0x2c, 0x5e, 0x22, 0x28},
- {0x38, 0x4e, 0x38, 0x4e},
- {0x1e, 0x58, 0x1e, 0x58},
- {0x1e, 0x2b, 0x1b, 0x21},
- {0x28, 0x5a, 0x19, 0x57},
- {0x12, 0x58, 0x5a, 0x5f},
- {0x58, 0x5e, 0x16, 0x2a},
- {0x2a, 0x5c, 0x2a, 0x2f},
- {0x38, 0x4e, 0x38, 0x4e}
+// In Battle Palace, moves are chosen based on the pokemons nature rather than by the player
+// Moves are grouped into "Attack", "Defense", or "Support" (see PALACE_MOVE_GROUP_*)
+// Each nature has a certain percent chance of selecting a move from a particular group
+// and a separate percent chance for each group when below 50% HP
+// The table below doesn't list percentages for Support because you can subtract the other two
+// Support percentages are listed in comments off to the side instead
+#define PALACE_STYLE(atk, def, atkLow, defLow) {atk, atk + def, atkLow, atkLow + defLow}
+
+const ALIGNED(4) u8 gBattlePalaceNatureToMoveGroupLikelihood[NUM_NATURES][4] =
+{
+ [NATURE_HARDY] = PALACE_STYLE(61, 7, 61, 7), // 32% support >= 50% HP, 32% support < 50% HP
+ [NATURE_LONELY] = PALACE_STYLE(20, 25, 84, 8), // 55%, 8%
+ [NATURE_BRAVE] = PALACE_STYLE(70, 15, 32, 60), // 15%, 8%
+ [NATURE_ADAMANT] = PALACE_STYLE(38, 31, 70, 15), // 31%, 15%
+ [NATURE_NAUGHTY] = PALACE_STYLE(20, 70, 70, 22), // 10%, 8%
+ [NATURE_BOLD] = PALACE_STYLE(30, 20, 32, 58), // 50%, 10%
+ [NATURE_DOCILE] = PALACE_STYLE(56, 22, 56, 22), // 22%, 22%
+ [NATURE_RELAXED] = PALACE_STYLE(25, 15, 75, 15), // 60%, 10%
+ [NATURE_IMPISH] = PALACE_STYLE(69, 6, 28, 55), // 25%, 17%
+ [NATURE_LAX] = PALACE_STYLE(35, 10, 29, 6), // 55%, 65%
+ [NATURE_TIMID] = PALACE_STYLE(62, 10, 30, 20), // 28%, 50%
+ [NATURE_HASTY] = PALACE_STYLE(58, 37, 88, 6), // 5%, 6%
+ [NATURE_SERIOUS] = PALACE_STYLE(34, 11, 29, 11), // 55%, 60%
+ [NATURE_JOLLY] = PALACE_STYLE(35, 5, 35, 60), // 60%, 5%
+ [NATURE_NAIVE] = PALACE_STYLE(56, 22, 56, 22), // 22%, 22%
+ [NATURE_MODEST] = PALACE_STYLE(35, 45, 34, 60), // 20%, 6%
+ [NATURE_MILD] = PALACE_STYLE(44, 50, 34, 6), // 6%, 60%
+ [NATURE_QUIET] = PALACE_STYLE(56, 22, 56, 22), // 22%, 22%
+ [NATURE_BASHFUL] = PALACE_STYLE(30, 58, 30, 58), // 12%, 12%
+ [NATURE_RASH] = PALACE_STYLE(30, 13, 27, 6), // 57%, 67%
+ [NATURE_CALM] = PALACE_STYLE(40, 50, 25, 62), // 10%, 13%
+ [NATURE_GENTLE] = PALACE_STYLE(18, 70, 90, 5), // 12%, 5%
+ [NATURE_SASSY] = PALACE_STYLE(88, 6, 22, 20), // 6%, 58%
+ [NATURE_CAREFUL] = PALACE_STYLE(42, 50, 42, 5), // 8%, 53%
+ [NATURE_QUIRKY] = PALACE_STYLE(56, 22, 56, 22) // 22%, 22%
};
-static const u8 sUnknown_0831C4F8[] =
-{
- 0x03, 0x00, 0x01, 0x00, 0x00, 0x01, 0x03, 0x00,
- 0x01, 0x02, 0x02, 0x00, 0x03, 0x01, 0x03, 0x01,
- 0x02, 0x03, 0x03, 0x02, 0x01, 0x00, 0x02, 0x02,
- 0x03, 0x00, 0x00, 0x00
+// Indices into gBattlePalaceFlavorTextTable
+static const u8 sBattlePalaceNatureToFlavorTextId[NUM_NATURES] =
+{
+ [NATURE_HARDY] = 3,
+ [NATURE_LONELY] = 0,
+ [NATURE_BRAVE] = 1,
+ [NATURE_ADAMANT] = 0,
+ [NATURE_NAUGHTY] = 0,
+ [NATURE_BOLD] = 1,
+ [NATURE_DOCILE] = 3,
+ [NATURE_RELAXED] = 0,
+ [NATURE_IMPISH] = 1,
+ [NATURE_LAX] = 2,
+ [NATURE_TIMID] = 2,
+ [NATURE_HASTY] = 0,
+ [NATURE_SERIOUS] = 3,
+ [NATURE_JOLLY] = 1,
+ [NATURE_NAIVE] = 3,
+ [NATURE_MODEST] = 1,
+ [NATURE_MILD] = 2,
+ [NATURE_QUIET] = 3,
+ [NATURE_BASHFUL] = 3,
+ [NATURE_RASH] = 2,
+ [NATURE_CALM] = 1,
+ [NATURE_GENTLE] = 0,
+ [NATURE_SASSY] = 2,
+ [NATURE_CAREFUL] = 2,
+ [NATURE_QUIRKY] = 3,
};
static void Cmd_attackcanceler(void)
@@ -1139,13 +1128,13 @@ static void Cmd_accuracycheck(void)
else
{
u8 acc = gBattleMons[gBattlerAttacker].statStages[STAT_ACC];
- buff = acc + 6 - gBattleMons[gBattlerTarget].statStages[STAT_EVASION];
+ buff = acc + DEFAULT_STAT_STAGE - gBattleMons[gBattlerTarget].statStages[STAT_EVASION];
}
- if (buff < 0)
- buff = 0;
- if (buff > 0xC)
- buff = 0xC;
+ if (buff < MIN_STAT_STAGE)
+ buff = MIN_STAT_STAGE;
+ if (buff > MAX_STAT_STAGE)
+ buff = MAX_STAT_STAGE;
moveAcc = gBattleMoves[move].accuracy;
// check Thunder on sunny weather
@@ -1988,11 +1977,11 @@ static void Cmd_effectivenesssound(void)
switch (gMoveResultFlags & (u8)(~(MOVE_RESULT_MISSED)))
{
case MOVE_RESULT_SUPER_EFFECTIVE:
- BtlController_EmitPlaySE(0, SE_KOUKA_H);
+ BtlController_EmitPlaySE(0, SE_SUPER_EFFECTIVE);
MarkBattlerForControllerExec(gActiveBattler);
break;
case MOVE_RESULT_NOT_VERY_EFFECTIVE:
- BtlController_EmitPlaySE(0, SE_KOUKA_L);
+ BtlController_EmitPlaySE(0, SE_NOT_EFFECTIVE);
MarkBattlerForControllerExec(gActiveBattler);
break;
case MOVE_RESULT_DOESNT_AFFECT_FOE:
@@ -2005,17 +1994,17 @@ static void Cmd_effectivenesssound(void)
default:
if (gMoveResultFlags & MOVE_RESULT_SUPER_EFFECTIVE)
{
- BtlController_EmitPlaySE(0, SE_KOUKA_H);
+ BtlController_EmitPlaySE(0, SE_SUPER_EFFECTIVE);
MarkBattlerForControllerExec(gActiveBattler);
}
else if (gMoveResultFlags & MOVE_RESULT_NOT_VERY_EFFECTIVE)
{
- BtlController_EmitPlaySE(0, SE_KOUKA_L);
+ BtlController_EmitPlaySE(0, SE_NOT_EFFECTIVE);
MarkBattlerForControllerExec(gActiveBattler);
}
else if (!(gMoveResultFlags & (MOVE_RESULT_DOESNT_AFFECT_FOE | MOVE_RESULT_FAILED)))
{
- BtlController_EmitPlaySE(0, SE_KOUKA_M);
+ BtlController_EmitPlaySE(0, SE_EFFECTIVE);
MarkBattlerForControllerExec(gActiveBattler);
}
break;
@@ -2245,7 +2234,7 @@ void SetMoveEffect(bool8 primary, u8 certain)
if (gBattleMons[gEffectBattler].status2 & STATUS2_SUBSTITUTE && affectsUser != MOVE_EFFECT_AFFECTS_USER)
INCREMENT_RESET_RETURN
- if (gBattleCommunication[MOVE_EFFECT_BYTE] <= 6) // status change
+ if (gBattleCommunication[MOVE_EFFECT_BYTE] <= PRIMARY_STATUS_MOVE_EFFECT)
{
switch (sStatusFlagsForMoveEffects[gBattleCommunication[MOVE_EFFECT_BYTE]])
{
@@ -2453,7 +2442,7 @@ void SetMoveEffect(bool8 primary, u8 certain)
BattleScriptPush(gBattlescriptCurrInstr + 1);
if (sStatusFlagsForMoveEffects[gBattleCommunication[MOVE_EFFECT_BYTE]] == STATUS1_SLEEP)
- gBattleMons[gEffectBattler].status1 |= ((Random() & 3) + 2);
+ gBattleMons[gEffectBattler].status1 |= STATUS1_SLEEP_TURN((Random() & 3) + 2); // 2-5 turns
else
gBattleMons[gEffectBattler].status1 |= sStatusFlagsForMoveEffects[gBattleCommunication[MOVE_EFFECT_BYTE]];
@@ -2513,7 +2502,7 @@ void SetMoveEffect(bool8 primary, u8 certain)
}
else
{
- gBattleMons[gEffectBattler].status2 |= (((Random()) % 0x4)) + 2;
+ gBattleMons[gEffectBattler].status2 |= STATUS2_CONFUSION_TURN(((Random()) % 4) + 2); // 2-5 turns
BattleScriptPush(gBattlescriptCurrInstr + 1);
gBattlescriptCurrInstr = sMoveEffectBS_Ptrs[gBattleCommunication[MOVE_EFFECT_BYTE]];
@@ -2546,7 +2535,7 @@ void SetMoveEffect(bool8 primary, u8 certain)
gBattleMons[gEffectBattler].status2 |= STATUS2_MULTIPLETURNS;
gLockedMoves[gEffectBattler] = gCurrentMove;
- gBattleMons[gEffectBattler].status2 |= ((Random() & 3) + 2) << 4;
+ gBattleMons[gEffectBattler].status2 |= STATUS2_UPROAR_TURN((Random() & 3) + 2); // 2-5 turns
BattleScriptPush(gBattlescriptCurrInstr + 1);
gBattlescriptCurrInstr = sMoveEffectBS_Ptrs[gBattleCommunication[MOVE_EFFECT_BYTE]];
@@ -2591,7 +2580,7 @@ void SetMoveEffect(bool8 primary, u8 certain)
}
else
{
- gBattleMons[gEffectBattler].status2 |= ((Random() & 3) + 3) << 0xD;
+ gBattleMons[gEffectBattler].status2 |= STATUS2_WRAPPED_TURN((Random() & 3) + 3); // 3-6 turns
*(gBattleStruct->wrappedMove + gEffectBattler * 2 + 0) = gCurrentMove;
*(gBattleStruct->wrappedMove + gEffectBattler * 2 + 1) = gCurrentMove >> 8;
@@ -2834,7 +2823,7 @@ void SetMoveEffect(bool8 primary, u8 certain)
{
gBattleMons[gEffectBattler].status2 |= STATUS2_MULTIPLETURNS;
gLockedMoves[gEffectBattler] = gCurrentMove;
- gBattleMons[gEffectBattler].status2 |= (((Random() & 1) + 2) << 0xA);
+ gBattleMons[gEffectBattler].status2 |= STATUS2_LOCK_CONFUSE_TURN((Random() & 1) + 2); // thrash for 2-3 turns
}
break;
case MOVE_EFFECT_KNOCK_OFF:
@@ -2929,7 +2918,7 @@ static void Cmd_clearstatusfromeffect(void)
{
gActiveBattler = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]);
- if (gBattleCommunication[MOVE_EFFECT_BYTE] <= MOVE_EFFECT_TOXIC)
+ if (gBattleCommunication[MOVE_EFFECT_BYTE] <= PRIMARY_STATUS_MOVE_EFFECT)
gBattleMons[gActiveBattler].status1 &= (~sStatusFlagsForMoveEffects[gBattleCommunication[MOVE_EFFECT_BYTE]]);
else
gBattleMons[gActiveBattler].status2 &= (~sStatusFlagsForMoveEffects[gBattleCommunication[MOVE_EFFECT_BYTE]]);
@@ -3331,7 +3320,7 @@ static void Cmd_getexp(void)
if (!(gBattleTypeFlags & BATTLE_TYPE_TRAINER) && gBattleMons[0].hp && !gBattleStruct->wildVictorySong)
{
BattleStopLowHpSound();
- PlayBGM(MUS_KACHI2);
+ PlayBGM(MUS_VICTORY_WILD);
gBattleStruct->wildVictorySong++;
}
@@ -3482,7 +3471,7 @@ static void Cmd_getexp(void)
else
{
gBattleStruct->expGetterMonId++;
- if (gBattleStruct->expGetterMonId <= 5)
+ if (gBattleStruct->expGetterMonId < PARTY_SIZE)
gBattleScripting.getexpState = 2; // loop again
else
gBattleScripting.getexpState = 6; // we're done
@@ -3500,7 +3489,6 @@ static void Cmd_getexp(void)
}
}
-#ifdef NONMATCHING
static void Cmd_unknown_24(void)
{
u16 HP_count = 0;
@@ -3511,7 +3499,7 @@ static void Cmd_unknown_24(void)
if (gBattleTypeFlags & BATTLE_TYPE_INGAME_PARTNER && gPartnerTrainerId == TRAINER_STEVEN_PARTNER)
{
- for (i = 0; i < 3; i++)
+ for (i = 0; i < MULTI_PARTY_SIZE; i++)
{
if (GetMonData(&gPlayerParty[i], MON_DATA_SPECIES) && !GetMonData(&gPlayerParty[i], MON_DATA_IS_EGG))
HP_count += GetMonData(&gPlayerParty[i], MON_DATA_HP);
@@ -3532,7 +3520,9 @@ static void Cmd_unknown_24(void)
if (HP_count == 0)
gBattleOutcome |= B_OUTCOME_LOST;
- for (HP_count = 0, i = 0; i < PARTY_SIZE; i++)
+ HP_count = 0;
+
+ for (i = 0; i < PARTY_SIZE; i++)
{
if (GetMonData(&gEnemyParty[i], MON_DATA_SPECIES) && !GetMonData(&gEnemyParty[i], MON_DATA_IS_EGG)
&& (!(gBattleTypeFlags & BATTLE_TYPE_ARENA) || !(gBattleStruct->arenaLostOpponentMons & gBitTable[i])))
@@ -3546,33 +3536,31 @@ static void Cmd_unknown_24(void)
if (gBattleOutcome == 0 && (gBattleTypeFlags & (BATTLE_TYPE_LINK | BATTLE_TYPE_x2000000)))
{
- s32 foundPlayer;
- s32 foundOpponent;
-
- // Impossible to decompile loops.
- for (foundPlayer = 0, i = 0; i < gBattlersCount; i += 2)
+ s32 foundPlayer = 0, foundOpponent;
+ for (i = 0; i < gBattlersCount; i += 2)
{
- if (HITMARKER_UNK(i) & gHitMarker && !gSpecialStatuses[i].flag40)
+ if ((gHitMarker & HITMARKER_FAINTED2(i)) && (!gSpecialStatuses[i].flag40))
foundPlayer++;
}
- for (foundOpponent = 0, i = 1; i < gBattlersCount; i += 2)
+ foundOpponent = 0;
+ for (i = 1; i < gBattlersCount; i += 2)
{
- if (HITMARKER_UNK(i) & gHitMarker && !gSpecialStatuses[i].flag40)
+ if ((gHitMarker & HITMARKER_FAINTED2(i)) && (!gSpecialStatuses[i].flag40))
foundOpponent++;
}
if (gBattleTypeFlags & BATTLE_TYPE_MULTI)
{
if (foundOpponent + foundPlayer > 1)
- gBattlescriptCurrInstr = T2_READ_PTR(gBattlescriptCurrInstr + 1);
+ gBattlescriptCurrInstr = (u8*) T2_READ_32(gBattlescriptCurrInstr + 1);
else
gBattlescriptCurrInstr += 5;
}
else
{
if (foundOpponent != 0 && foundPlayer != 0)
- gBattlescriptCurrInstr = T2_READ_PTR(gBattlescriptCurrInstr + 1);
+ gBattlescriptCurrInstr = (u8*) T2_READ_32(gBattlescriptCurrInstr + 1);
else
gBattlescriptCurrInstr += 5;
}
@@ -3582,301 +3570,6 @@ static void Cmd_unknown_24(void)
gBattlescriptCurrInstr += 5;
}
}
-#else
-NAKED
-static void Cmd_unknown_24(void)
-{
- asm("\n\
- .syntax unified\n\
- push {r4-r7,lr}\n\
- mov r7, r8\n\
- push {r7}\n\
- movs r6, 0\n\
- ldr r0, =gBattleControllerExecFlags\n\
- ldr r0, [r0]\n\
- cmp r0, 0\n\
- beq _0804ACE2\n\
- b _0804AF22\n\
- _0804ACE2:\n\
- ldr r0, =gBattleTypeFlags\n\
- ldr r0, [r0]\n\
- movs r1, 0x80\n\
- lsls r1, 15\n\
- ands r0, r1\n\
- cmp r0, 0\n\
- beq _0804AD48\n\
- ldr r0, =gPartnerTrainerId\n\
- ldrh r1, [r0]\n\
- ldr r0, =0x00000c03\n\
- cmp r1, r0\n\
- bne _0804AD48\n\
- movs r5, 0\n\
- _0804ACFC:\n\
- movs r0, 0x64\n\
- adds r1, r5, 0\n\
- muls r1, r0\n\
- ldr r0, =gPlayerParty\n\
- adds r4, r1, r0\n\
- adds r0, r4, 0\n\
- movs r1, 0xB\n\
- bl GetMonData\n\
- cmp r0, 0\n\
- beq _0804AD2C\n\
- adds r0, r4, 0\n\
- movs r1, 0x2D\n\
- bl GetMonData\n\
- cmp r0, 0\n\
- bne _0804AD2C\n\
- adds r0, r4, 0\n\
- movs r1, 0x39\n\
- bl GetMonData\n\
- adds r0, r6, r0\n\
- lsls r0, 16\n\
- lsrs r6, r0, 16\n\
- _0804AD2C:\n\
- adds r5, 0x1\n\
- cmp r5, 0x2\n\
- ble _0804ACFC\n\
- b _0804ADA8\n\
- .pool\n\
- _0804AD48:\n\
- movs r5, 0\n\
- _0804AD4A:\n\
- movs r0, 0x64\n\
- adds r1, r5, 0\n\
- muls r1, r0\n\
- ldr r0, =gPlayerParty\n\
- adds r4, r1, r0\n\
- adds r0, r4, 0\n\
- movs r1, 0xB\n\
- bl GetMonData\n\
- cmp r0, 0\n\
- beq _0804ADA2\n\
- adds r0, r4, 0\n\
- movs r1, 0x2D\n\
- bl GetMonData\n\
- cmp r0, 0\n\
- bne _0804ADA2\n\
- ldr r0, =gBattleTypeFlags\n\
- ldr r0, [r0]\n\
- movs r1, 0x80\n\
- lsls r1, 11\n\
- ands r0, r1\n\
- cmp r0, 0\n\
- beq _0804AD94\n\
- ldr r0, =gBattleStruct\n\
- ldr r0, [r0]\n\
- movs r1, 0xA8\n\
- lsls r1, 2\n\
- adds r0, r1\n\
- ldrb r1, [r0]\n\
- ldr r2, =gBitTable\n\
- lsls r0, r5, 2\n\
- adds r0, r2\n\
- ldr r0, [r0]\n\
- ands r1, r0\n\
- cmp r1, 0\n\
- bne _0804ADA2\n\
- _0804AD94:\n\
- adds r0, r4, 0\n\
- movs r1, 0x39\n\
- bl GetMonData\n\
- adds r0, r6, r0\n\
- lsls r0, 16\n\
- lsrs r6, r0, 16\n\
- _0804ADA2:\n\
- adds r5, 0x1\n\
- cmp r5, 0x5\n\
- ble _0804AD4A\n\
- _0804ADA8:\n\
- cmp r6, 0\n\
- bne _0804ADB6\n\
- ldr r0, =gBattleOutcome\n\
- ldrb r1, [r0]\n\
- movs r2, 0x2\n\
- orrs r1, r2\n\
- strb r1, [r0]\n\
- _0804ADB6:\n\
- movs r6, 0\n\
- movs r5, 0\n\
- _0804ADBA:\n\
- movs r0, 0x64\n\
- adds r1, r5, 0\n\
- muls r1, r0\n\
- ldr r0, =gEnemyParty\n\
- adds r4, r1, r0\n\
- adds r0, r4, 0\n\
- movs r1, 0xB\n\
- bl GetMonData\n\
- cmp r0, 0\n\
- beq _0804AE10\n\
- adds r0, r4, 0\n\
- movs r1, 0x2D\n\
- bl GetMonData\n\
- cmp r0, 0\n\
- bne _0804AE10\n\
- ldr r0, =gBattleTypeFlags\n\
- ldr r0, [r0]\n\
- movs r1, 0x80\n\
- lsls r1, 11\n\
- ands r0, r1\n\
- cmp r0, 0\n\
- beq _0804AE02\n\
- ldr r0, =gBattleStruct\n\
- ldr r0, [r0]\n\
- ldr r1, =0x000002a1\n\
- adds r0, r1\n\
- ldrb r1, [r0]\n\
- ldr r2, =gBitTable\n\
- lsls r0, r5, 2\n\
- adds r0, r2\n\
- ldr r0, [r0]\n\
- ands r1, r0\n\
- cmp r1, 0\n\
- bne _0804AE10\n\
- _0804AE02:\n\
- adds r0, r4, 0\n\
- movs r1, 0x39\n\
- bl GetMonData\n\
- adds r0, r6, r0\n\
- lsls r0, 16\n\
- lsrs r6, r0, 16\n\
- _0804AE10:\n\
- adds r5, 0x1\n\
- cmp r5, 0x5\n\
- ble _0804ADBA\n\
- ldr r2, =gBattleOutcome\n\
- cmp r6, 0\n\
- bne _0804AE24\n\
- ldrb r0, [r2]\n\
- movs r1, 0x1\n\
- orrs r0, r1\n\
- strb r0, [r2]\n\
- _0804AE24:\n\
- ldrb r0, [r2]\n\
- cmp r0, 0\n\
- bne _0804AF1A\n\
- ldr r0, =gBattleTypeFlags\n\
- ldr r1, [r0]\n\
- ldr r2, =0x02000002\n\
- ands r1, r2\n\
- mov r8, r0\n\
- cmp r1, 0\n\
- beq _0804AF1A\n\
- movs r3, 0\n\
- movs r5, 0\n\
- ldr r0, =gBattlersCount\n\
- ldrb r1, [r0]\n\
- mov r12, r0\n\
- ldr r7, =gBattlescriptCurrInstr\n\
- cmp r3, r1\n\
- bge _0804AE70\n\
- ldr r0, =gHitMarker\n\
- movs r6, 0x80\n\
- lsls r6, 21\n\
- ldr r4, [r0]\n\
- adds r2, r1, 0\n\
- ldr r1, =gSpecialStatuses\n\
- _0804AE54:\n\
- adds r0, r6, 0\n\
- lsls r0, r5\n\
- ands r0, r4\n\
- cmp r0, 0\n\
- beq _0804AE68\n\
- ldrb r0, [r1]\n\
- lsls r0, 25\n\
- cmp r0, 0\n\
- blt _0804AE68\n\
- adds r3, 0x1\n\
- _0804AE68:\n\
- adds r1, 0x28\n\
- adds r5, 0x2\n\
- cmp r5, r2\n\
- blt _0804AE54\n\
- _0804AE70:\n\
- movs r2, 0\n\
- movs r5, 0x1\n\
- mov r4, r12\n\
- ldrb r1, [r4]\n\
- cmp r5, r1\n\
- bge _0804AEAA\n\
- ldr r0, =gHitMarker\n\
- movs r4, 0x80\n\
- lsls r4, 21\n\
- mov r12, r4\n\
- ldr r6, [r0]\n\
- ldr r0, =gSpecialStatuses\n\
- adds r4, r1, 0\n\
- adds r1, r0, 0\n\
- adds r1, 0x14\n\
- _0804AE8E:\n\
- mov r0, r12\n\
- lsls r0, r5\n\
- ands r0, r6\n\
- cmp r0, 0\n\
- beq _0804AEA2\n\
- ldrb r0, [r1]\n\
- lsls r0, 25\n\
- cmp r0, 0\n\
- blt _0804AEA2\n\
- adds r2, 0x1\n\
- _0804AEA2:\n\
- adds r1, 0x28\n\
- adds r5, 0x2\n\
- cmp r5, r4\n\
- blt _0804AE8E\n\
- _0804AEAA:\n\
- mov r1, r8\n\
- ldr r0, [r1]\n\
- movs r1, 0x40\n\
- ands r0, r1\n\
- cmp r0, 0\n\
- beq _0804AEF0\n\
- adds r0, r2, r3\n\
- cmp r0, 0x1\n\
- bgt _0804AEF8\n\
- b _0804AF12\n\
- .pool\n\
- _0804AEF0:\n\
- cmp r2, 0\n\
- beq _0804AF12\n\
- cmp r3, 0\n\
- beq _0804AF12\n\
- _0804AEF8:\n\
- ldr r2, [r7]\n\
- ldrb r1, [r2, 0x1]\n\
- ldrb r0, [r2, 0x2]\n\
- lsls r0, 8\n\
- adds r1, r0\n\
- ldrb r0, [r2, 0x3]\n\
- lsls r0, 16\n\
- adds r1, r0\n\
- ldrb r0, [r2, 0x4]\n\
- lsls r0, 24\n\
- adds r1, r0\n\
- str r1, [r7]\n\
- b _0804AF22\n\
- _0804AF12:\n\
- ldr r0, [r7]\n\
- adds r0, 0x5\n\
- str r0, [r7]\n\
- b _0804AF22\n\
- _0804AF1A:\n\
- ldr r1, =gBattlescriptCurrInstr\n\
- ldr r0, [r1]\n\
- adds r0, 0x5\n\
- str r0, [r1]\n\
- _0804AF22:\n\
- pop {r3}\n\
- mov r8, r3\n\
- pop {r4-r7}\n\
- pop {r0}\n\
- bx r0\n\
- .pool\n\
- .syntax divided");
-}
-
-#endif // NONMATCHING
static void MoveValuesCleanUp(void)
{
@@ -4396,7 +4089,7 @@ static void Cmd_playstatchangeanimation(void)
{
if (gBattlescriptCurrInstr[3] & STAT_CHANGE_CANT_PREVENT)
{
- if (gBattleMons[gActiveBattler].statStages[currStat] > 0)
+ if (gBattleMons[gActiveBattler].statStages[currStat] > MIN_STAT_STAGE)
{
statAnimId = startingStatAnimId + currStat;
changeableStatsCount++;
@@ -4408,7 +4101,7 @@ static void Cmd_playstatchangeanimation(void)
&& !(gBattleMons[gActiveBattler].ability == ABILITY_KEEN_EYE && currStat == STAT_ACC)
&& !(gBattleMons[gActiveBattler].ability == ABILITY_HYPER_CUTTER && currStat == STAT_ATK))
{
- if (gBattleMons[gActiveBattler].statStages[currStat] > 0)
+ if (gBattleMons[gActiveBattler].statStages[currStat] > MIN_STAT_STAGE)
{
statAnimId = startingStatAnimId + currStat;
changeableStatsCount++;
@@ -4436,7 +4129,7 @@ static void Cmd_playstatchangeanimation(void)
while (statsToCheck != 0)
{
- if (statsToCheck & 1 && gBattleMons[gActiveBattler].statStages[currStat] < 0xC)
+ if (statsToCheck & 1 && gBattleMons[gActiveBattler].statStages[currStat] < MAX_STAT_STAGE)
{
statAnimId = startingStatAnimId + currStat;
changeableStatsCount++;
@@ -4506,7 +4199,7 @@ static void Cmd_moveend(void)
&& gBattleMons[gBattlerTarget].hp != 0 && gBattlerAttacker != gBattlerTarget
&& GetBattlerSide(gBattlerAttacker) != GetBattlerSide(gBattlerTarget)
&& !(gMoveResultFlags & MOVE_RESULT_NO_EFFECT) && TARGET_TURN_DAMAGED
- && gBattleMoves[gCurrentMove].power && gBattleMons[gBattlerTarget].statStages[STAT_ATK] <= 0xB)
+ && gBattleMoves[gCurrentMove].power && gBattleMons[gBattlerTarget].statStages[STAT_ATK] < MAX_STAT_STAGE)
{
gBattleMons[gBattlerTarget].statStages[STAT_ATK]++;
BattleScriptPushCursor();
@@ -4914,10 +4607,12 @@ static void Cmd_switchindataupdate(void)
SwitchInClearSetData();
- if (gBattleTypeFlags & BATTLE_TYPE_PALACE && gBattleMons[gActiveBattler].maxHP / 2 >= gBattleMons[gActiveBattler].hp
- && gBattleMons[gActiveBattler].hp != 0 && !(gBattleMons[gActiveBattler].status1 & STATUS1_SLEEP))
+ if (gBattleTypeFlags & BATTLE_TYPE_PALACE
+ && gBattleMons[gActiveBattler].maxHP / 2 >= gBattleMons[gActiveBattler].hp
+ && gBattleMons[gActiveBattler].hp != 0
+ && !(gBattleMons[gActiveBattler].status1 & STATUS1_SLEEP))
{
- gBattleStruct->field_92 |= gBitTable[gActiveBattler];
+ gBattleStruct->palaceFlags |= gBitTable[gActiveBattler];
}
gBattleScripting.battler = gActiveBattler;
@@ -5101,7 +4796,7 @@ static void Cmd_jumpifcantswitch(void)
break;
}
- if (i == 6)
+ if (i == PARTY_SIZE)
gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 2);
else
gBattlescriptCurrInstr += 6;
@@ -5480,7 +5175,7 @@ static void Cmd_switchineffects(void)
s32 i;
gActiveBattler = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]);
- sub_803FA70(gActiveBattler);
+ UpdateSentPokesToOpponentValue(gActiveBattler);
gHitMarker &= ~(HITMARKER_FAINTED(gActiveBattler));
gSpecialStatuses[gActiveBattler].flag40 = 0;
@@ -5840,8 +5535,8 @@ static void Cmd_hitanimation(void)
static u32 GetTrainerMoneyToGive(u16 trainerId)
{
u32 i = 0;
- u32 lastMonLevel = 0;
- u32 moneyReward = 0;
+ u32 moneyReward;
+ u8 lastMonLevel = 0;
if (trainerId == TRAINER_SECRET_BASE)
{
@@ -6341,7 +6036,7 @@ static void PutLevelAndGenderOnLvlUpBox(void)
printerTemplate.currentY = 0;
printerTemplate.letterSpacing = 0;
printerTemplate.lineSpacing = 0;
- printerTemplate.unk = 0;
+ printerTemplate.style = 0;
printerTemplate.fgColor = TEXT_COLOR_WHITE;
printerTemplate.bgColor = TEXT_COLOR_TRANSPARENT;
printerTemplate.shadowColor = TEXT_COLOR_DARK_GREY;
@@ -6349,15 +6044,13 @@ static void PutLevelAndGenderOnLvlUpBox(void)
AddTextPrinter(&printerTemplate, 0xFF, NULL);
txtPtr = gStringVar4;
- gStringVar4[0] = CHAR_SPECIAL_F9;
- txtPtr++;
- txtPtr[0] = CHAR_LV_2;
- txtPtr++;
+ *(txtPtr)++ = CHAR_EXTRA_SYMBOL;
+ *(txtPtr)++ = CHAR_LV_2;
var = (u32)(txtPtr);
txtPtr = ConvertIntToDecimalStringN(txtPtr, monLevel, STR_CONV_MODE_LEFT_ALIGN, 3);
var = (u32)(txtPtr) - var;
- txtPtr = StringFill(txtPtr, 0x77, 4 - var);
+ txtPtr = StringFill(txtPtr, CHAR_UNK_SPACER, 4 - var);
if (monGender != MON_GENDERLESS)
{
@@ -6588,11 +6281,11 @@ static void Cmd_various(void)
case VARIOUS_GET_MOVE_TARGET:
gBattlerTarget = GetMoveTarget(gCurrentMove, 0);
break;
- case 4:
+ case VARIOUS_GET_BATTLER_FAINTED:
if (gHitMarker & HITMARKER_FAINTED(gActiveBattler))
- gBattleCommunication[0] = 1;
+ gBattleCommunication[0] = TRUE;
else
- gBattleCommunication[0] = 0;
+ gBattleCommunication[0] = FALSE;
break;
case VARIOUS_RESET_INTIMIDATE_TRACE_BITS:
gSpecialStatuses[gActiveBattler].intimidatedMon = 0;
@@ -6628,17 +6321,19 @@ static void Cmd_various(void)
gHitMarker &= ~(HITMARKER_x400000);
}
break;
- case 8:
- gBattleCommunication[0] = 0;
+ case VARIOUS_PALACE_FLAVOR_TEXT:
+ // Try and print end-of-turn Battle Palace flavor text (e.g. "A glint appears in mon's eyes")
+ gBattleCommunication[0] = FALSE; // whether or not msg should be printed
gBattleScripting.battler = gActiveBattler = gBattleCommunication[1];
- if (!(gBattleStruct->field_92 & gBitTable[gActiveBattler])
+
+ if (!(gBattleStruct->palaceFlags & gBitTable[gActiveBattler])
&& gBattleMons[gActiveBattler].maxHP / 2 >= gBattleMons[gActiveBattler].hp
&& gBattleMons[gActiveBattler].hp != 0
&& !(gBattleMons[gActiveBattler].status1 & STATUS1_SLEEP))
{
- gBattleStruct->field_92 |= gBitTable[gActiveBattler];
- gBattleCommunication[0] = 1;
- gBattleCommunication[MULTISTRING_CHOOSER] = sUnknown_0831C4F8[GetNatureFromPersonality(gBattleMons[gActiveBattler].personality)];
+ gBattleStruct->palaceFlags |= gBitTable[gActiveBattler];
+ gBattleCommunication[0] = TRUE;
+ gBattleCommunication[MULTISTRING_CHOOSER] = sBattlePalaceNatureToFlavorTextId[GetNatureFromPersonality(gBattleMons[gActiveBattler].personality)];
}
break;
case VARIOUS_ARENA_JUDGMENT_WINDOW:
@@ -6733,7 +6428,7 @@ static void Cmd_various(void)
gBattleOutcome = B_OUTCOME_MON_TELEPORTED;
break;
case VARIOUS_PLAY_TRAINER_DEFEATED_MUSIC:
- BtlController_EmitPlayFanfareOrBGM(0, MUS_KACHI1, TRUE);
+ BtlController_EmitPlayFanfareOrBGM(0, MUS_VICTORY_TRAINER, TRUE);
MarkBattlerForControllerExec(gActiveBattler);
break;
}
@@ -7295,7 +6990,7 @@ static u8 ChangeStatBuffs(s8 statValue, u8 statId, u8 flags, const u8 *BS_ptr)
index++;
gBattleTextBuff2[index] = B_BUFF_EOS;
- if (gBattleMons[gActiveBattler].statStages[statId] == 0)
+ if (gBattleMons[gActiveBattler].statStages[statId] == MIN_STAT_STAGE)
gBattleCommunication[MULTISTRING_CHOOSER] = 2;
else
gBattleCommunication[MULTISTRING_CHOOSER] = (gBattlerTarget == gActiveBattler);
@@ -7322,17 +7017,17 @@ static u8 ChangeStatBuffs(s8 statValue, u8 statId, u8 flags, const u8 *BS_ptr)
index++;
gBattleTextBuff2[index] = B_BUFF_EOS;
- if (gBattleMons[gActiveBattler].statStages[statId] == 0xC)
+ if (gBattleMons[gActiveBattler].statStages[statId] == MAX_STAT_STAGE)
gBattleCommunication[MULTISTRING_CHOOSER] = 2;
else
gBattleCommunication[MULTISTRING_CHOOSER] = (gBattlerTarget == gActiveBattler);
}
gBattleMons[gActiveBattler].statStages[statId] += statValue;
- if (gBattleMons[gActiveBattler].statStages[statId] < 0)
- gBattleMons[gActiveBattler].statStages[statId] = 0;
- if (gBattleMons[gActiveBattler].statStages[statId] > 0xC)
- gBattleMons[gActiveBattler].statStages[statId] = 0xC;
+ if (gBattleMons[gActiveBattler].statStages[statId] < MIN_STAT_STAGE)
+ gBattleMons[gActiveBattler].statStages[statId] = MIN_STAT_STAGE;
+ if (gBattleMons[gActiveBattler].statStages[statId] > MAX_STAT_STAGE)
+ gBattleMons[gActiveBattler].statStages[statId] = MAX_STAT_STAGE;
if (gBattleCommunication[MULTISTRING_CHOOSER] == 2 && flags & STAT_BUFF_ALLOW_PTR)
gMoveResultFlags |= MOVE_RESULT_MISSED;
@@ -7357,7 +7052,7 @@ static void Cmd_normalisebuffs(void) // haze
for (i = 0; i < gBattlersCount; i++)
{
for (j = 0; j < NUM_BATTLE_STATS; j++)
- gBattleMons[i].statStages[j] = 6;
+ gBattleMons[i].statStages[j] = DEFAULT_STAT_STAGE;
}
gBattlescriptCurrInstr++;
@@ -7368,7 +7063,7 @@ static void Cmd_setbide(void)
gBattleMons[gBattlerAttacker].status2 |= STATUS2_MULTIPLETURNS;
gLockedMoves[gBattlerAttacker] = gCurrentMove;
gTakenDmg[gBattlerAttacker] = 0;
- gBattleMons[gBattlerAttacker].status2 |= (STATUS2_BIDE - 0x100); // 2 turns
+ gBattleMons[gBattlerAttacker].status2 |= STATUS2_BIDE_TURN(2);
gBattlescriptCurrInstr++;
}
@@ -8326,7 +8021,7 @@ static void Cmd_settypetorandomresistance(void) // conversion 2
static void Cmd_setalwayshitflag(void)
{
gStatuses3[gBattlerTarget] &= ~(STATUS3_ALWAYS_HITS);
- gStatuses3[gBattlerTarget] |= 0x10;
+ gStatuses3[gBattlerTarget] |= STATUS3_ALWAYS_HITS_TURN(2);
gDisableStructs[gBattlerTarget].battlerWithSureHit = gBattlerAttacker;
gBattlescriptCurrInstr++;
}
@@ -8757,7 +8452,7 @@ static void Cmd_rolloutdamagecalculation(void)
static void Cmd_jumpifconfusedandstatmaxed(void)
{
if (gBattleMons[gBattlerTarget].status2 & STATUS2_CONFUSION
- && gBattleMons[gBattlerTarget].statStages[gBattlescriptCurrInstr[1]] == 0xC)
+ && gBattleMons[gBattlerTarget].statStages[gBattlescriptCurrInstr[1]] == MAX_STAT_STAGE)
gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 2);
else
gBattlescriptCurrInstr += 6;
@@ -8964,10 +8659,10 @@ static void Cmd_maxattackhalvehp(void) // belly drum
if (!(gBattleMons[gBattlerAttacker].maxHP / 2))
halfHp = 1;
- if (gBattleMons[gBattlerAttacker].statStages[STAT_ATK] < 12
+ if (gBattleMons[gBattlerAttacker].statStages[STAT_ATK] < MAX_STAT_STAGE
&& gBattleMons[gBattlerAttacker].hp > halfHp)
{
- gBattleMons[gBattlerAttacker].statStages[STAT_ATK] = 12;
+ gBattleMons[gBattlerAttacker].statStages[STAT_ATK] = MAX_STAT_STAGE;
gBattleMoveDamage = gBattleMons[gBattlerAttacker].maxHP / 2;
if (gBattleMoveDamage == 0)
gBattleMoveDamage = 1;
@@ -9145,7 +8840,7 @@ static void Cmd_trydobeatup(void)
else
{
u8 beforeLoop = gBattleCommunication[0];
- for (;gBattleCommunication[0] < 6; gBattleCommunication[0]++)
+ for (;gBattleCommunication[0] < PARTY_SIZE; gBattleCommunication[0]++)
{
if (GetMonData(&party[gBattleCommunication[0]], MON_DATA_HP)
&& GetMonData(&party[gBattleCommunication[0]], MON_DATA_SPECIES2)
@@ -9153,7 +8848,7 @@ static void Cmd_trydobeatup(void)
&& !GetMonData(&party[gBattleCommunication[0]], MON_DATA_STATUS))
break;
}
- if (gBattleCommunication[0] < 6)
+ if (gBattleCommunication[0] < PARTY_SIZE)
{
PREPARE_MON_NICK_WITH_PREFIX_BUFFER(gBattleTextBuff1, gBattlerAttacker, gBattleCommunication[0])
@@ -9241,8 +8936,8 @@ static void Cmd_sethail(void)
static void Cmd_jumpifattackandspecialattackcannotfall(void) // memento
{
- if (gBattleMons[gBattlerTarget].statStages[STAT_ATK] == 0
- && gBattleMons[gBattlerTarget].statStages[STAT_SPATK] == 0
+ if (gBattleMons[gBattlerTarget].statStages[STAT_ATK] == MIN_STAT_STAGE
+ && gBattleMons[gBattlerTarget].statStages[STAT_SPATK] == MIN_STAT_STAGE
&& gBattleCommunication[6] != 1)
{
gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
@@ -9520,7 +9215,7 @@ static void Cmd_setyawn(void)
}
else
{
- gStatuses3[gBattlerTarget] |= 0x1000;
+ gStatuses3[gBattlerTarget] |= STATUS3_YAWN_TURN(2);
gBattlescriptCurrInstr += 5;
}
}
@@ -9654,7 +9349,7 @@ static void Cmd_assistattackselect(void)
else
party = gPlayerParty;
- for (monId = 0; monId < 6; monId++)
+ for (monId = 0; monId < PARTY_SIZE; monId++)
{
if (monId == gBattlerPartyIndexes[gBattlerAttacker])
continue;
@@ -9865,7 +9560,7 @@ static void Cmd_pickup(void)
if (lvlDivBy10 > 9)
lvlDivBy10 = 9;
- for (j = 0; j < 9; j++)
+ for (j = 0; j < (int)ARRAY_COUNT(sPickupProbabilities); j++)
{
if (sPickupProbabilities[j] > rand)
{
@@ -10134,7 +9829,7 @@ static void Cmd_handleballthrow(void)
}
}
else
- ballMultiplier = sBallCatchBonuses[gLastUsedItem - 2];
+ ballMultiplier = sBallCatchBonuses[gLastUsedItem - ITEM_ULTRA_BALL];
odds = (catchRate * ballMultiplier / 10)
* (gBattleMons[gBattlerTarget].maxHP * 3 - gBattleMons[gBattlerTarget].hp * 2)
@@ -10198,6 +9893,7 @@ static void Cmd_handleballthrow(void)
else // not caught
{
gBattleCommunication[MULTISTRING_CHOOSER] = shakes;
+ // Maybe inject SpriteCB_TestBallThrow here
gBattlescriptCurrInstr = BattleScript_ShakeBallThrow;
}
}
@@ -10436,7 +10132,7 @@ static void Cmd_trygivecaughtmonnick(void)
}
break;
case 4:
- if (CalculatePlayerPartyCount() == 6)
+ if (CalculatePlayerPartyCount() == PARTY_SIZE)
gBattlescriptCurrInstr += 5;
else
gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
diff --git a/src/battle_setup.c b/src/battle_setup.c
index b44c7b9ec..3c20d9ffe 100644
--- a/src/battle_setup.c
+++ b/src/battle_setup.c
@@ -12,7 +12,7 @@
#include "fieldmap.h"
#include "random.h"
#include "starter_choose.h"
-#include "script_pokemon_80F8.h"
+#include "script_pokemon_util.h"
#include "palette.h"
#include "window.h"
#include "event_object_movement.h"
@@ -124,28 +124,43 @@ static const u8 sBattleTransitionTable_Trainer[][2] =
{B_TRANSITION_SWIRL, B_TRANSITION_RIPPLE}, // Water
};
-static const u8 sUnknown_0854FE98[] =
-{
- B_TRANSITION_29, B_TRANSITION_30, B_TRANSITION_31, B_TRANSITION_32,
- B_TRANSITION_34, B_TRANSITION_35, B_TRANSITION_36, B_TRANSITION_37,
- B_TRANSITION_38, B_TRANSITION_39, B_TRANSITION_40, B_TRANSITION_41
+// Battle Frontier (excluding Pyramid and Dome, which have their own tables below)
+static const u8 sBattleTransitionTable_BattleFrontier[] =
+{
+ B_TRANSITION_FRONTIER_LOGO_WIGGLE,
+ B_TRANSITION_FRONTIER_LOGO_WAVE,
+ B_TRANSITION_FRONTIER_SQUARES,
+ B_TRANSITION_FRONTIER_SQUARES_SCROLL,
+ B_TRANSITION_FRONTIER_CIRCLES_MEET,
+ B_TRANSITION_FRONTIER_CIRCLES_CROSS,
+ B_TRANSITION_FRONTIER_CIRCLES_ASYMMETRIC_SPIRAL,
+ B_TRANSITION_FRONTIER_CIRCLES_SYMMETRIC_SPIRAL,
+ B_TRANSITION_FRONTIER_CIRCLES_MEET_IN_SEQ,
+ B_TRANSITION_FRONTIER_CIRCLES_CROSS_IN_SEQ,
+ B_TRANSITION_FRONTIER_CIRCLES_ASYMMETRIC_SPIRAL_IN_SEQ,
+ B_TRANSITION_FRONTIER_CIRCLES_SYMMETRIC_SPIRAL_IN_SEQ
};
-static const u8 sUnknown_0854FEA4[] =
+static const u8 sBattleTransitionTable_BattlePyramid[] =
{
- B_TRANSITION_31, B_TRANSITION_32, B_TRANSITION_33
+ B_TRANSITION_FRONTIER_SQUARES,
+ B_TRANSITION_FRONTIER_SQUARES_SCROLL,
+ B_TRANSITION_FRONTIER_SQUARES_SPIRAL
};
-static const u8 sUnknown_0854FEA7[] =
+static const u8 sBattleTransitionTable_BattleDome[] =
{
- B_TRANSITION_29, B_TRANSITION_31, B_TRANSITION_32, B_TRANSITION_33
+ B_TRANSITION_FRONTIER_LOGO_WIGGLE,
+ B_TRANSITION_FRONTIER_SQUARES,
+ B_TRANSITION_FRONTIER_SQUARES_SCROLL,
+ B_TRANSITION_FRONTIER_SQUARES_SPIRAL
};
static const struct TrainerBattleParameter sOrdinaryBattleParams[] =
{
{&sTrainerBattleMode, TRAINER_PARAM_LOAD_VAL_8BIT},
{&gTrainerBattleOpponent_A, TRAINER_PARAM_LOAD_VAL_16BIT},
- {&sTrainerObjectEventLocalId, TRAINER_PARAM_LOAD_VAL_16BIT},
+ {&sTrainerObjectEventLocalId, TRAINER_PARAM_LOAD_VAL_16BIT},
{&sTrainerAIntroSpeech, TRAINER_PARAM_LOAD_VAL_32BIT},
{&sTrainerADefeatSpeech, TRAINER_PARAM_LOAD_VAL_32BIT},
{&sTrainerVictorySpeech, TRAINER_PARAM_CLEAR_VAL_32BIT},
@@ -158,7 +173,7 @@ static const struct TrainerBattleParameter sContinueScriptBattleParams[] =
{
{&sTrainerBattleMode, TRAINER_PARAM_LOAD_VAL_8BIT},
{&gTrainerBattleOpponent_A, TRAINER_PARAM_LOAD_VAL_16BIT},
- {&sTrainerObjectEventLocalId, TRAINER_PARAM_LOAD_VAL_16BIT},
+ {&sTrainerObjectEventLocalId, TRAINER_PARAM_LOAD_VAL_16BIT},
{&sTrainerAIntroSpeech, TRAINER_PARAM_LOAD_VAL_32BIT},
{&sTrainerADefeatSpeech, TRAINER_PARAM_LOAD_VAL_32BIT},
{&sTrainerVictorySpeech, TRAINER_PARAM_CLEAR_VAL_32BIT},
@@ -171,7 +186,7 @@ static const struct TrainerBattleParameter sDoubleBattleParams[] =
{
{&sTrainerBattleMode, TRAINER_PARAM_LOAD_VAL_8BIT},
{&gTrainerBattleOpponent_A, TRAINER_PARAM_LOAD_VAL_16BIT},
- {&sTrainerObjectEventLocalId, TRAINER_PARAM_LOAD_VAL_16BIT},
+ {&sTrainerObjectEventLocalId, TRAINER_PARAM_LOAD_VAL_16BIT},
{&sTrainerAIntroSpeech, TRAINER_PARAM_LOAD_VAL_32BIT},
{&sTrainerADefeatSpeech, TRAINER_PARAM_LOAD_VAL_32BIT},
{&sTrainerVictorySpeech, TRAINER_PARAM_CLEAR_VAL_32BIT},
@@ -184,7 +199,7 @@ static const struct TrainerBattleParameter sOrdinaryNoIntroBattleParams[] =
{
{&sTrainerBattleMode, TRAINER_PARAM_LOAD_VAL_8BIT},
{&gTrainerBattleOpponent_A, TRAINER_PARAM_LOAD_VAL_16BIT},
- {&sTrainerObjectEventLocalId, TRAINER_PARAM_LOAD_VAL_16BIT},
+ {&sTrainerObjectEventLocalId, TRAINER_PARAM_LOAD_VAL_16BIT},
{&sTrainerAIntroSpeech, TRAINER_PARAM_CLEAR_VAL_32BIT},
{&sTrainerADefeatSpeech, TRAINER_PARAM_LOAD_VAL_32BIT},
{&sTrainerVictorySpeech, TRAINER_PARAM_CLEAR_VAL_32BIT},
@@ -197,7 +212,7 @@ static const struct TrainerBattleParameter sContinueScriptDoubleBattleParams[] =
{
{&sTrainerBattleMode, TRAINER_PARAM_LOAD_VAL_8BIT},
{&gTrainerBattleOpponent_A, TRAINER_PARAM_LOAD_VAL_16BIT},
- {&sTrainerObjectEventLocalId, TRAINER_PARAM_LOAD_VAL_16BIT},
+ {&sTrainerObjectEventLocalId, TRAINER_PARAM_LOAD_VAL_16BIT},
{&sTrainerAIntroSpeech, TRAINER_PARAM_LOAD_VAL_32BIT},
{&sTrainerADefeatSpeech, TRAINER_PARAM_LOAD_VAL_32BIT},
{&sTrainerVictorySpeech, TRAINER_PARAM_CLEAR_VAL_32BIT},
@@ -210,7 +225,7 @@ static const struct TrainerBattleParameter sTrainerBOrdinaryBattleParams[] =
{
{&sTrainerBattleMode, TRAINER_PARAM_LOAD_VAL_8BIT},
{&gTrainerBattleOpponent_B, TRAINER_PARAM_LOAD_VAL_16BIT},
- {&sTrainerObjectEventLocalId, TRAINER_PARAM_LOAD_VAL_16BIT},
+ {&sTrainerObjectEventLocalId, TRAINER_PARAM_LOAD_VAL_16BIT},
{&sTrainerBIntroSpeech, TRAINER_PARAM_LOAD_VAL_32BIT},
{&sTrainerBDefeatSpeech, TRAINER_PARAM_LOAD_VAL_32BIT},
{&sTrainerVictorySpeech, TRAINER_PARAM_CLEAR_VAL_32BIT},
@@ -223,7 +238,7 @@ static const struct TrainerBattleParameter sTrainerBContinueScriptBattleParams[]
{
{&sTrainerBattleMode, TRAINER_PARAM_LOAD_VAL_8BIT},
{&gTrainerBattleOpponent_B, TRAINER_PARAM_LOAD_VAL_16BIT},
- {&sTrainerObjectEventLocalId, TRAINER_PARAM_LOAD_VAL_16BIT},
+ {&sTrainerObjectEventLocalId, TRAINER_PARAM_LOAD_VAL_16BIT},
{&sTrainerBIntroSpeech, TRAINER_PARAM_LOAD_VAL_32BIT},
{&sTrainerBDefeatSpeech, TRAINER_PARAM_LOAD_VAL_32BIT},
{&sTrainerVictorySpeech, TRAINER_PARAM_CLEAR_VAL_32BIT},
@@ -234,7 +249,7 @@ static const struct TrainerBattleParameter sTrainerBContinueScriptBattleParams[]
#define REMATCH(trainer1, trainer2, trainer3, trainer4, trainer5, map) \
{ \
- .trainerIds = {trainer1, trainer2, trainer3, trainer4, trainer5}, \
+ .trainerIds = {trainer1, trainer2, trainer3, trainer4, trainer5}, \
.mapGroup = MAP_GROUP(map), \
.mapNum = MAP_NUM(map), \
}
@@ -449,9 +464,9 @@ static void DoTrainerBattle(void)
static void sub_80B0828(void)
{
if (InBattlePyramid())
- CreateBattleStartTask(sub_80B100C(10), 0);
+ CreateBattleStartTask(GetSpecialBattleTransition(10), 0);
else
- CreateBattleStartTask(sub_80B100C(11), 0);
+ CreateBattleStartTask(GetSpecialBattleTransition(11), 0);
IncrementGameStat(GAME_STAT_TOTAL_BATTLES);
IncrementGameStat(GAME_STAT_TRAINER_BATTLES);
@@ -503,22 +518,22 @@ void BattleSetup_StartLegendaryBattle(void)
default:
case SPECIES_GROUDON:
gBattleTypeFlags |= BATTLE_TYPE_GROUDON;
- CreateBattleStartTask(B_TRANSITION_GROUDON, MUS_BATTLE34);
+ CreateBattleStartTask(B_TRANSITION_GROUDON, MUS_VS_KYOGRE_GROUDON);
break;
case SPECIES_KYOGRE:
gBattleTypeFlags |= BATTLE_TYPE_KYOGRE;
- CreateBattleStartTask(B_TRANSITION_KYOGRE, MUS_BATTLE34);
+ CreateBattleStartTask(B_TRANSITION_KYOGRE, MUS_VS_KYOGRE_GROUDON);
break;
case SPECIES_RAYQUAZA:
gBattleTypeFlags |= BATTLE_TYPE_RAYQUAZA;
- CreateBattleStartTask(B_TRANSITION_RAYQUAZA, MUS_VS_REKKU);
+ CreateBattleStartTask(B_TRANSITION_RAYQUAZA, MUS_VS_RAYQUAZA);
break;
case SPECIES_DEOXYS:
- CreateBattleStartTask(B_TRANSITION_BLUR, MUS_RG_VS_DEO);
+ CreateBattleStartTask(B_TRANSITION_BLUR, MUS_RG_VS_DEOXYS);
break;
case SPECIES_LUGIA:
case SPECIES_HO_OH:
- CreateBattleStartTask(B_TRANSITION_BLUR, MUS_RG_VS_DEN);
+ CreateBattleStartTask(B_TRANSITION_BLUR, MUS_RG_VS_LEGEND);
break;
case SPECIES_MEW:
CreateBattleStartTask(B_TRANSITION_GRID_SQUARES, MUS_VS_MEW);
@@ -538,9 +553,9 @@ void StartGroudonKyogreBattle(void)
gBattleTypeFlags = BATTLE_TYPE_LEGENDARY | BATTLE_TYPE_KYOGRE_GROUDON;
if (gGameVersion == VERSION_RUBY)
- CreateBattleStartTask(B_TRANSITION_SHARDS, MUS_BATTLE34); // GROUDON
+ CreateBattleStartTask(B_TRANSITION_SHARDS, MUS_VS_KYOGRE_GROUDON); // GROUDON
else
- CreateBattleStartTask(B_TRANSITION_RIPPLE, MUS_BATTLE34); // KYOGRE
+ CreateBattleStartTask(B_TRANSITION_RIPPLE, MUS_VS_KYOGRE_GROUDON); // KYOGRE
IncrementGameStat(GAME_STAT_TOTAL_BATTLES);
IncrementGameStat(GAME_STAT_WILD_BATTLES);
@@ -573,7 +588,7 @@ void StartRegiBattle(void)
transitionId = B_TRANSITION_GRID_SQUARES;
break;
}
- CreateBattleStartTask(transitionId, MUS_BATTLE36);
+ CreateBattleStartTask(transitionId, MUS_VS_REGI);
IncrementGameStat(GAME_STAT_TOTAL_BATTLES);
IncrementGameStat(GAME_STAT_WILD_BATTLES);
@@ -839,7 +854,17 @@ static u8 GetTrainerBattleTransition(void)
return sBattleTransitionTable_Trainer[transitionType][1];
}
-u8 sub_80B100C(s32 arg0)
+// 0: Battle Tower
+// 3: Battle Dome
+// 4: Battle Palace
+// 5: Battle Arena
+// 6: Battle Factory
+// 7: Battle Pike
+// 10: Battle Pyramid
+// 11: Trainer Hill
+// 12: Secret Base
+// 13: E-Reader
+u8 GetSpecialBattleTransition(s32 id)
{
u16 var;
u8 enemyLevel = GetMonData(&gEnemyParty[0], MON_DATA_LEVEL);
@@ -847,43 +872,43 @@ u8 sub_80B100C(s32 arg0)
if (enemyLevel < playerLevel)
{
- switch (arg0)
+ switch (id)
{
case 11:
case 12:
case 13:
return B_TRANSITION_POKEBALLS_TRAIL;
case 10:
- return sUnknown_0854FEA4[Random() % ARRAY_COUNT(sUnknown_0854FEA4)];
+ return sBattleTransitionTable_BattlePyramid[Random() % ARRAY_COUNT(sBattleTransitionTable_BattlePyramid)];
case 3:
- return sUnknown_0854FEA7[Random() % ARRAY_COUNT(sUnknown_0854FEA7)];
+ return sBattleTransitionTable_BattleDome[Random() % ARRAY_COUNT(sBattleTransitionTable_BattleDome)];
}
if (VarGet(VAR_FRONTIER_BATTLE_MODE) != FRONTIER_MODE_LINK_MULTIS)
- return sUnknown_0854FE98[Random() % ARRAY_COUNT(sUnknown_0854FE98)];
+ return sBattleTransitionTable_BattleFrontier[Random() % ARRAY_COUNT(sBattleTransitionTable_BattleFrontier)];
}
else
{
- switch (arg0)
+ switch (id)
{
case 11:
case 12:
case 13:
return B_TRANSITION_BIG_POKEBALL;
case 10:
- return sUnknown_0854FEA4[Random() % ARRAY_COUNT(sUnknown_0854FEA4)];
+ return sBattleTransitionTable_BattlePyramid[Random() % ARRAY_COUNT(sBattleTransitionTable_BattlePyramid)];
case 3:
- return sUnknown_0854FEA7[Random() % ARRAY_COUNT(sUnknown_0854FEA7)];
+ return sBattleTransitionTable_BattleDome[Random() % ARRAY_COUNT(sBattleTransitionTable_BattleDome)];
}
if (VarGet(VAR_FRONTIER_BATTLE_MODE) != FRONTIER_MODE_LINK_MULTIS)
- return sUnknown_0854FE98[Random() % ARRAY_COUNT(sUnknown_0854FE98)];
+ return sBattleTransitionTable_BattleFrontier[Random() % ARRAY_COUNT(sBattleTransitionTable_BattleFrontier)];
}
var = gSaveBlock2Ptr->frontier.trainerIds[gSaveBlock2Ptr->frontier.curChallengeBattleNum * 2 + 0]
+ gSaveBlock2Ptr->frontier.trainerIds[gSaveBlock2Ptr->frontier.curChallengeBattleNum * 2 + 1];
- return sUnknown_0854FE98[var % ARRAY_COUNT(sUnknown_0854FE98)];
+ return sBattleTransitionTable_BattleFrontier[var % ARRAY_COUNT(sBattleTransitionTable_BattleFrontier)];
}
void ChooseStarter(void)
@@ -1360,7 +1385,7 @@ void ShowTrainerIntroSpeech(void)
else
CopyPyramidTrainerSpeechBefore(LocalIdToPyramidTrainerId(gObjectEvents[gApproachingTrainers[gApproachingTrainerId].objectEventId].localId));
- sub_80982B8();
+ ShowFieldMessageFromBuffer();
}
else if (InTrainerHillChallenge())
{
@@ -1369,7 +1394,7 @@ void ShowTrainerIntroSpeech(void)
else
CopyTrainerHillTrainerText(TRAINER_HILL_TEXT_INTRO, LocalIdToHillTrainerId(gObjectEvents[gApproachingTrainers[gApproachingTrainerId].objectEventId].localId));
- sub_80982B8();
+ ShowFieldMessageFromBuffer();
}
else
{
@@ -1429,46 +1454,46 @@ void SetUpTrainerEncounterMusic(void)
switch (GetTrainerEncounterMusicId(trainerId))
{
case TRAINER_ENCOUNTER_MUSIC_MALE:
- music = MUS_BOYEYE;
+ music = MUS_ENCOUNTER_MALE;
break;
case TRAINER_ENCOUNTER_MUSIC_FEMALE:
- music = MUS_GIRLEYE;
+ music = MUS_ENCOUNTER_FEMALE;
break;
case TRAINER_ENCOUNTER_MUSIC_GIRL:
- music = MUS_SYOUJOEYE;
+ music = MUS_ENCOUNTER_GIRL;
break;
case TRAINER_ENCOUNTER_MUSIC_INTENSE:
- music = MUS_HAGESHII;
+ music = MUS_ENCOUNTER_INTENSE;
break;
case TRAINER_ENCOUNTER_MUSIC_COOL:
- music = MUS_KAKKOII;
+ music = MUS_ENCOUNTER_COOL;
break;
case TRAINER_ENCOUNTER_MUSIC_AQUA:
- music = MUS_AQA_0;
+ music = MUS_ENCOUNTER_AQUA;
break;
case TRAINER_ENCOUNTER_MUSIC_MAGMA:
- music = MUS_MGM0;
+ music = MUS_ENCOUNTER_MAGMA;
break;
case TRAINER_ENCOUNTER_MUSIC_SWIMMER:
- music = MUS_SWIMEYE;
+ music = MUS_ENCOUNTER_SWIMMER;
break;
case TRAINER_ENCOUNTER_MUSIC_TWINS:
- music = MUS_HUTAGO;
+ music = MUS_ENCOUNTER_TWINS;
break;
case TRAINER_ENCOUNTER_MUSIC_ELITE_FOUR:
- music = MUS_SITENNOU;
+ music = MUS_ENCOUNTER_ELITE_FOUR;
break;
case TRAINER_ENCOUNTER_MUSIC_HIKER:
- music = MUS_YAMA_EYE;
+ music = MUS_ENCOUNTER_HIKER;
break;
case TRAINER_ENCOUNTER_MUSIC_INTERVIEWER:
- music = MUS_INTER_V;
+ music = MUS_ENCOUNTER_INTERVIEWER;
break;
case TRAINER_ENCOUNTER_MUSIC_RICH:
- music = MUS_TEST;
+ music = MUS_ENCOUNTER_RICH;
break;
default:
- music = MUS_AYASII;
+ music = MUS_ENCOUNTER_SUSPICIOUS;
}
PlayNewMapMusic(music);
}
diff --git a/src/battle_tent.c b/src/battle_tent.c
index b2db0e39c..0a03fc167 100644
--- a/src/battle_tent.c
+++ b/src/battle_tent.c
@@ -355,7 +355,11 @@ static void GenerateOpponentMons(void)
{
u16 trainerId;
s32 i, j, k;
- register const u16 *monSet asm("r9"); // Fix me. Compiler insists on moving that variable into stack.
+ #ifndef NONMATCHING
+ register const u16 *monSet asm("r9"); // Fix me. Compiler insists on moving that variable into stack.
+ #else
+ const u16 *monSet;
+ #endif
u16 species[FRONTIER_PARTY_SIZE];
u16 heldItems[FRONTIER_PARTY_SIZE];
s32 monId = 0;
diff --git a/src/battle_tower.c b/src/battle_tower.c
index 4695d9aa0..0333c4397 100644
--- a/src/battle_tower.c
+++ b/src/battle_tower.c
@@ -1466,7 +1466,9 @@ u8 GetFrontierOpponentClass(u16 trainerId)
else
{
trainerClass = gFacilityClassToTrainerClass[gSaveBlock2Ptr->frontier.towerRecords[trainerId - TRAINER_RECORD_MIXING_FRIEND].facilityClass];
- asm("");
+ #ifndef NONMATCHING
+ asm("");
+ #endif
}
}
else
@@ -1478,7 +1480,9 @@ u8 GetFrontierOpponentClass(u16 trainerId)
else
{
trainerClass = gFacilityClassToTrainerClass[gApprentices[gSaveBlock2Ptr->apprentices[trainerId - TRAINER_RECORD_MIXING_APPRENTICE].id].facilityClass];
- asm("");
+ #ifndef NONMATCHING
+ asm("");
+ #endif
}
}
@@ -2028,7 +2032,7 @@ void DoSpecialTrainerBattle(void)
}
CreateTask(Task_StartBattleAfterTransition, 1);
PlayMapChosenOrBattleBGM(0);
- BattleTransition_StartOnField(sub_80B100C(0));
+ BattleTransition_StartOnField(GetSpecialBattleTransition(0));
break;
case SPECIAL_BATTLE_SECRET_BASE:
for (i = 0; i < PARTY_SIZE; i++)
@@ -2038,7 +2042,7 @@ void DoSpecialTrainerBattle(void)
}
CreateTask(Task_StartBattleAfterTransition, 1);
PlayMapChosenOrBattleBGM(0);
- BattleTransition_StartOnField(sub_80B100C(12));
+ BattleTransition_StartOnField(GetSpecialBattleTransition(12));
break;
case SPECIAL_BATTLE_EREADER:
ZeroEnemyPartyMons();
@@ -2048,7 +2052,7 @@ void DoSpecialTrainerBattle(void)
gTrainerBattleOpponent_A = 0;
CreateTask(Task_StartBattleAfterTransition, 1);
PlayMapChosenOrBattleBGM(0);
- BattleTransition_StartOnField(sub_80B100C(13));
+ BattleTransition_StartOnField(GetSpecialBattleTransition(13));
break;
case SPECIAL_BATTLE_DOME:
gBattleTypeFlags = BATTLE_TYPE_TRAINER | BATTLE_TYPE_DOME;
@@ -2058,7 +2062,7 @@ void DoSpecialTrainerBattle(void)
FillFrontierTrainerParty(DOME_BATTLE_PARTY_SIZE);
CreateTask(Task_StartBattleAfterTransition, 1);
sub_806E694(0);
- BattleTransition_StartOnField(sub_80B100C(3));
+ BattleTransition_StartOnField(GetSpecialBattleTransition(3));
break;
case SPECIAL_BATTLE_PALACE:
gBattleTypeFlags = BATTLE_TYPE_TRAINER | BATTLE_TYPE_PALACE;
@@ -2070,7 +2074,7 @@ void DoSpecialTrainerBattle(void)
FillTentTrainerParty(FRONTIER_PARTY_SIZE);
CreateTask(Task_StartBattleAfterTransition, 1);
PlayMapChosenOrBattleBGM(0);
- BattleTransition_StartOnField(sub_80B100C(4));
+ BattleTransition_StartOnField(GetSpecialBattleTransition(4));
break;
case SPECIAL_BATTLE_ARENA:
gBattleTypeFlags = BATTLE_TYPE_TRAINER | BATTLE_TYPE_ARENA;
@@ -2080,7 +2084,7 @@ void DoSpecialTrainerBattle(void)
FillTentTrainerParty(FRONTIER_PARTY_SIZE);
CreateTask(Task_StartBattleAfterTransition, 1);
PlayMapChosenOrBattleBGM(0);
- BattleTransition_StartOnField(sub_80B100C(5));
+ BattleTransition_StartOnField(GetSpecialBattleTransition(5));
break;
case SPECIAL_BATTLE_FACTORY:
gBattleTypeFlags = BATTLE_TYPE_TRAINER | BATTLE_TYPE_FACTORY;
@@ -2089,28 +2093,28 @@ void DoSpecialTrainerBattle(void)
FillFactoryTrainerParty();
CreateTask(Task_StartBattleAfterTransition, 1);
PlayMapChosenOrBattleBGM(0);
- BattleTransition_StartOnField(sub_80B100C(6));
+ BattleTransition_StartOnField(GetSpecialBattleTransition(6));
break;
case SPECIAL_BATTLE_PIKE_SINGLE:
gBattleTypeFlags = BATTLE_TYPE_TRAINER | BATTLE_TYPE_BATTLE_TOWER;
FillFrontierTrainerParty(FRONTIER_PARTY_SIZE);
CreateTask(Task_StartBattleAfterTransition, 1);
PlayMapChosenOrBattleBGM(0);
- BattleTransition_StartOnField(sub_80B100C(7));
+ BattleTransition_StartOnField(GetSpecialBattleTransition(7));
break;
case SPECIAL_BATTLE_PYRAMID:
gBattleTypeFlags = BATTLE_TYPE_TRAINER | BATTLE_TYPE_PYRAMID;
FillFrontierTrainerParty(FRONTIER_PARTY_SIZE);
CreateTask(Task_StartBattleAfterTransition, 1);
PlayMapChosenOrBattleBGM(0);
- BattleTransition_StartOnField(sub_80B100C(10));
+ BattleTransition_StartOnField(GetSpecialBattleTransition(10));
break;
case SPECIAL_BATTLE_PIKE_DOUBLE:
gBattleTypeFlags = BATTLE_TYPE_TRAINER | BATTLE_TYPE_BATTLE_TOWER | BATTLE_TYPE_DOUBLE | BATTLE_TYPE_TWO_OPPONENTS;
FillFrontierTrainersParties(1);
CreateTask(Task_StartBattleAfterTransition, 1);
PlayMapChosenOrBattleBGM(0);
- BattleTransition_StartOnField(sub_80B100C(7));
+ BattleTransition_StartOnField(GetSpecialBattleTransition(7));
break;
case SPECIAL_BATTLE_STEVEN:
gBattleTypeFlags = BATTLE_TYPE_TRAINER | BATTLE_TYPE_DOUBLE | BATTLE_TYPE_TWO_OPPONENTS | BATTLE_TYPE_MULTI | BATTLE_TYPE_INGAME_PARTNER;
@@ -2627,7 +2631,7 @@ static void LoadLinkMultiOpponentsData(void)
}
break;
case 4:
- sub_800AC34();
+ SetCloseLinkCallback();
gSpecialVar_Result = 5;
break;
case 5:
@@ -2644,7 +2648,7 @@ static void LoadLinkMultiOpponentsData(void)
static void sub_8164DCC(void)
{
if (gWirelessCommType != 0)
- sub_800AC34();
+ SetCloseLinkCallback();
}
static void SetMultiPartnerGfx(void)
diff --git a/src/battle_transition.c b/src/battle_transition.c
index 23182e976..559279e74 100644
--- a/src/battle_transition.c
+++ b/src/battle_transition.c
@@ -1,6 +1,7 @@
#include "global.h"
#include "battle.h"
#include "battle_transition.h"
+#include "battle_transition_frontier.h"
#include "bg.h"
#include "decompress.h"
#include "event_object_movement.h"
@@ -18,7 +19,6 @@
#include "sprite.h"
#include "task.h"
#include "trig.h"
-#include "unk_transition.h"
#include "util.h"
#include "constants/field_effects.h"
#include "constants/songs.h"
@@ -93,11 +93,11 @@ static void Phase2Task_ShredSplit(u8 taskId);
static void Phase2Task_Blackhole1(u8 taskId);
static void Phase2Task_Blackhole2(u8 taskId);
static void Phase2Task_RectangularSpiral(u8 taskId);
-static void Phase2Task_29(u8 taskId);
-static void Phase2Task_30(u8 taskId);
-static void Phase2Task_31(u8 taskId);
-static void Phase2Task_32(u8 taskId);
-static void Phase2Task_33(u8 taskId);
+static void Phase2Task_FrontierLogoWiggle(u8 taskId);
+static void Phase2Task_FrontierLogoWave(u8 taskId);
+static void Phase2Task_FrontierSquares(u8 taskId);
+static void Phase2Task_FrontierSquaresScroll(u8 taskId);
+static void Phase2Task_FrontierSquaresSpiral(u8 taskId);
static void VBlankCB_BattleTransition(void);
static void VBlankCB_Phase2_Swirl(void);
static void HBlankCB_Phase2_Swirl(void);
@@ -192,12 +192,12 @@ static bool8 Phase2_Blackhole2_Func2(struct Task *task);
static bool8 Phase2_RectangularSpiral_Func1(struct Task *task);
static bool8 Phase2_RectangularSpiral_Func2(struct Task *task);
static bool8 Phase2_RectangularSpiral_Func3(struct Task *task);
-static bool8 Phase2_29_Func1(struct Task *task);
-static bool8 Phase2_29_Func2(struct Task *task);
-static bool8 Phase2_30_Func1(struct Task *task);
-static bool8 Phase2_30_Func2(struct Task *task);
-static bool8 Phase2_30_Func3(struct Task *task);
-static bool8 Phase2_30_Func4(struct Task *task);
+static bool8 Phase2_FrontierLogoWiggle_Func1(struct Task *task);
+static bool8 Phase2_FrontierLogoWiggle_Func2(struct Task *task);
+static bool8 Phase2_FrontierLogoWave_Func1(struct Task *task);
+static bool8 Phase2_FrontierLogoWave_Func2(struct Task *task);
+static bool8 Phase2_FrontierLogoWave_Func3(struct Task *task);
+static bool8 Phase2_FrontierLogoWave_Func4(struct Task *task);
static bool8 Phase2_Rayquaza_Func3(struct Task *task);
static bool8 Phase2_Rayquaza_Func4(struct Task *task);
static bool8 Phase2_Rayquaza_Func5(struct Task *task);
@@ -205,19 +205,19 @@ static bool8 Phase2_Rayquaza_Func6(struct Task *task);
static bool8 Phase2_Rayquaza_Func7(struct Task *task);
static bool8 Phase2_Rayquaza_Func8(struct Task *task);
static bool8 Phase2_Rayquaza_Func9(struct Task *task);
-static bool8 Phase2_31_Func1(struct Task *task);
-static bool8 Phase2_31_Func2(struct Task *task);
-static bool8 Phase2_31_Func3(struct Task *task);
-static bool8 Phase2_31_33_Func5(struct Task *task);
-static bool8 Phase2_33_Func1(struct Task *task);
-static bool8 Phase2_33_Func2(struct Task *task);
-static bool8 Phase2_33_Func3(struct Task *task);
-static bool8 Phase2_33_Func4(struct Task *task);
-static bool8 Phase2_32_Func1(struct Task *task);
-static bool8 Phase2_32_Func2(struct Task *task);
-static bool8 Phase2_32_Func3(struct Task *task);
-static bool8 Phase2_32_Func4(struct Task *task);
-static bool8 Phase2_32_Func5(struct Task *task);
+static bool8 Phase2_FrontierSquares_Func1(struct Task *task);
+static bool8 Phase2_FrontierSquares_Func2(struct Task *task);
+static bool8 Phase2_FrontierSquares_Func3(struct Task *task);
+static bool8 Phase2_FrontierSquares_End(struct Task *task);
+static bool8 Phase2_FrontierSquaresSpiral_Func1(struct Task *task);
+static bool8 Phase2_FrontierSquaresSpiral_Func2(struct Task *task);
+static bool8 Phase2_FrontierSquaresSpiral_Func3(struct Task *task);
+static bool8 Phase2_FrontierSquaresSpiral_Func4(struct Task *task);
+static bool8 Phase2_FrontierSquaresScroll_Func1(struct Task *task);
+static bool8 Phase2_FrontierSquaresScroll_Func2(struct Task *task);
+static bool8 Phase2_FrontierSquaresScroll_Func3(struct Task *task);
+static bool8 Phase2_FrontierSquaresScroll_Func4(struct Task *task);
+static bool8 Phase2_FrontierSquaresScroll_Func5(struct Task *task);
static bool8 Phase2_Mugshot_Func1(struct Task *task);
static bool8 Phase2_Mugshot_Func2(struct Task *task);
static bool8 Phase2_Mugshot_Func3(struct Task *task);
@@ -237,29 +237,29 @@ static bool8 Transition_Phase1(struct Task *task);
static bool8 Transition_WaitForPhase1(struct Task *task);
static bool8 Transition_Phase2(struct Task *task);
static bool8 Transition_WaitForPhase2(struct Task *task);
-static void sub_8149F08(void);
-static void sub_8149F84(void);
+static void InitTransitionStructVars(void);
+static void FadeScreenBlack(void);
static void CreatePhase1Task(s16 a0, s16 a1, s16 a2, s16 a3, s16 a4);
static void sub_814A014(u16 *a0, s16 a1, s16 a2, s16 a3);
static void sub_8149F98(s16 *array, s16 sinAdd, s16 index, s16 indexIncrementer, s16 amplitude, s16 arrSize);
-static void sub_8149F40(u16 **a0);
+static void GetBg0TilemapDst(u16 **tileset);
static void sub_814A1AC(s16 *a0, s16 a1, s16 a2, s16 a3, s16 a4, s16 a5, s16 a6);
static bool8 sub_814A228(s16 *a0, bool8 a1, bool8 a2);
-static void sub_8148484(s16 spriteId, s16 value);
-static void sub_814849C(s16 spriteId);
-static s16 sub_81484B8(s16 spriteId);
+static void SetTrainerPicSlideTable(s16 spriteId, s16 arrId);
+static void IncrementTrainerPicState(s16 spriteId);
+static s16 IsTrainerPicSlideDone(s16 spriteId);
static bool8 Phase1_TransitionAll_Func1(struct Task *task);
static bool8 Phase1_TransitionAll_Func2(struct Task *task);
static bool8 IsPhase1Done(void);
static bool16 sub_8149048(const s16 * const *arg0, struct StructRectangularSpiral *arg1);
static void sub_814713C(struct Sprite *sprite);
-static void sub_8148380(struct Sprite *sprite);
+static void SpriteCb_TrainerPic(struct Sprite *sprite);
static void sub_8149864(struct Sprite *sprite);
-static bool8 sub_81483A8(struct Sprite *sprite);
-static bool8 sub_81483AC(struct Sprite *sprite);
-static bool8 sub_81483F8(struct Sprite *sprite);
-static bool8 sub_814842C(struct Sprite *sprite);
-static bool8 sub_8148458(struct Sprite *sprite);
+static bool8 TrainerPicCb_Nothing(struct Sprite *sprite);
+static bool8 TrainerPicCb_SetSlideOffsets(struct Sprite *sprite);
+static bool8 TrainerPicCb_Slide1(struct Sprite *sprite);
+static bool8 TrainerPicCb_Slide2(struct Sprite *sprite);
+static bool8 TrainerPicCb_Slide3(struct Sprite *sprite);
// iwram bss vars
static s16 sUnusedRectangularSpiralVar;
@@ -273,44 +273,44 @@ EWRAM_DATA static struct TransitionData *sTransitionStructPtr = NULL;
// const rom data
static const u32 sBigPokeball_Tileset[] = INCBIN_U32("graphics/battle_transitions/big_pokeball.4bpp");
static const u32 sPokeballTrail_Tileset[] = INCBIN_U32("graphics/battle_transitions/pokeball_trail.4bpp");
-static const u8 sSpriteImage_85B98F0[] = INCBIN_U8("graphics/battle_transitions/pokeball.4bpp");
-static const u32 sUnknown_085B9AF0[] = INCBIN_U32("graphics/battle_transitions/elite_four_bg.4bpp");
-static const u8 sSpriteImage_85B9CD0[] = INCBIN_U8("graphics/battle_transitions/unused_brendan.4bpp");
-static const u8 sSpriteImage_85BA4D0[] = INCBIN_U8("graphics/battle_transitions/unused_lass.4bpp");
+static const u8 sPokeball_Gfx[] = INCBIN_U8("graphics/battle_transitions/pokeball.4bpp");
+static const u32 sEliteFour_Tileset[] = INCBIN_U32("graphics/battle_transitions/elite_four_bg.4bpp");
+static const u8 sUnusedBrendan_Gfx[] = INCBIN_U8("graphics/battle_transitions/unused_brendan.4bpp");
+static const u8 sUnusedLass_Gfx[] = INCBIN_U8("graphics/battle_transitions/unused_lass.4bpp");
static const u32 sShrinkingBoxTileset[] = INCBIN_U32("graphics/battle_transitions/shrinking_box.4bpp");
-static const u32 sEvilTeam_Palette[] = INCBIN_U32("graphics/battle_transitions/evil_team.gbapal");
+static const u16 sEvilTeam_Palette[] = INCBIN_U16("graphics/battle_transitions/evil_team.gbapal");
static const u32 sTeamAqua_Tileset[] = INCBIN_U32("graphics/battle_transitions/team_aqua.4bpp.lz");
static const u32 sTeamAqua_Tilemap[] = INCBIN_U32("graphics/battle_transitions/team_aqua.bin.lz");
static const u32 sTeamMagma_Tileset[] = INCBIN_U32("graphics/battle_transitions/team_magma.4bpp.lz");
static const u32 sTeamMagma_Tilemap[] = INCBIN_U32("graphics/battle_transitions/team_magma.bin.lz");
-static const u32 gUnknown_085BBC14[] = INCBIN_U32("graphics/battle_transitions/85BBC14.4bpp");
-static const u32 gUnknown_085BC2B4[] = INCBIN_U32("graphics/battle_transitions/85BC2B4.gbapal");
-static const u32 gUnknown_085BC2D4[] = INCBIN_U32("graphics/battle_transitions/85BC2D4.gbapal");
-static const u32 gUnknown_085BC2F4[] = INCBIN_U32("graphics/battle_transitions/85BC2F4.gbapal");
-static const u32 gUnknown_085BC314[] = INCBIN_U32("graphics/battle_transitions/85BC314.bin");
-static const u32 gUnknown_085BCB14[] = INCBIN_U32("graphics/battle_transitions/85BCB14.bin");
-static const u32 gUnknown_085BD314[] = INCBIN_U32("graphics/battle_transitions/85BD314.bin");
+static const u32 sRegis_Tileset[] = INCBIN_U32("graphics/battle_transitions/regis.4bpp");
+static const u16 sRegice_Palette[] = INCBIN_U16("graphics/battle_transitions/regice.gbapal");
+static const u16 sRegisteel_Palette[] = INCBIN_U16("graphics/battle_transitions/registeel.gbapal");
+static const u16 sRegirock_Palette[] = INCBIN_U16("graphics/battle_transitions/regirock.gbapal");
+static const u32 sRegice_Tilemap[] = INCBIN_U32("graphics/battle_transitions/regice.bin");
+static const u32 sRegisteel_Tilemap[] = INCBIN_U32("graphics/battle_transitions/registeel.bin");
+static const u32 sRegirock_Tilemap[] = INCBIN_U32("graphics/battle_transitions/regirock.bin");
static const u16 gUnknown_085BDB14[] = INCBIN_U16("graphics/battle_transitions/85BDB14.gbapal");
-static const u32 gUnknown_085BDB34[] = INCBIN_U32("graphics/battle_transitions/kyogre.4bpp.lz");
-static const u32 gUnknown_085BE1E8[] = INCBIN_U32("graphics/battle_transitions/kyogre.bin.lz");
-static const u32 gUnknown_085BE51C[] = INCBIN_U32("graphics/battle_transitions/groudon.4bpp.lz");
-static const u32 gUnknown_085BEA88[] = INCBIN_U32("graphics/battle_transitions/groudon.bin.lz");
-static const u16 gUnknown_085BEDA0[] = INCBIN_U16("graphics/battle_transitions/kyogre_pt1.gbapal");
-static const u16 gUnknown_085BEEE0[] = INCBIN_U16("graphics/battle_transitions/kyogre_pt2.gbapal");
-static const u16 gUnknown_085BF0A0[] = INCBIN_U16("graphics/battle_transitions/groudon_pt1.gbapal");
-static const u16 gUnknown_085BF2A0[] = INCBIN_U16("graphics/battle_transitions/groudon_pt2.gbapal");
-static const u16 gUnknown_085BF4A0[] = INCBIN_U16("graphics/battle_transitions/rayquaza.gbapal");
-static const u32 gUnknown_085BF6A0[] = INCBIN_U32("graphics/battle_transitions/rayquaza.4bpp");
-static const u32 gUnknown_085C6BE0[] = INCBIN_U32("graphics/battle_transitions/rayquaza.bin");
-static const u32 gUnknown_085C7BE0[] = INCBIN_U32("graphics/battle_transitions/frontier_brain.gbapal");
-static const u32 gUnknown_085C7C00[] = INCBIN_U32("graphics/battle_transitions/frontier_brain.4bpp.lz");
-static const u32 gUnknown_085C828C[] = INCBIN_U32("graphics/battle_transitions/frontier_brain.bin.lz");
-static const u32 gUnknown_085C8578[] = INCBIN_U32("graphics/battle_transitions/frontier_squares_blanktiles.gbapal");
-static const u32 gUnknown_085C8598[] = INCBIN_U32("graphics/battle_transitions/frontier_square_1.4bpp.lz");
-static const u32 gUnknown_085C86F4[] = INCBIN_U32("graphics/battle_transitions/frontier_square_2.4bpp.lz");
-static const u32 gUnknown_085C87F4[] = INCBIN_U32("graphics/battle_transitions/frontier_square_3.4bpp.lz");
-static const u32 gUnknown_085C88A4[] = INCBIN_U32("graphics/battle_transitions/frontier_square_4.4bpp.lz");
-static const u32 gUnknown_085C8928[] = INCBIN_U32("graphics/battle_transitions/frontier_squares.bin");
+static const u32 sKyogre_Tileset[] = INCBIN_U32("graphics/battle_transitions/kyogre.4bpp.lz");
+static const u32 sKyogre_Tilemap[] = INCBIN_U32("graphics/battle_transitions/kyogre.bin.lz");
+static const u32 sGroudon_Tileset[] = INCBIN_U32("graphics/battle_transitions/groudon.4bpp.lz");
+static const u32 sGroudon_Tilemap[] = INCBIN_U32("graphics/battle_transitions/groudon.bin.lz");
+static const u16 sKyogre1_Palette[] = INCBIN_U16("graphics/battle_transitions/kyogre_pt1.gbapal");
+static const u16 sKyogre2_Palette[] = INCBIN_U16("graphics/battle_transitions/kyogre_pt2.gbapal");
+static const u16 sGroudon1_Palette[] = INCBIN_U16("graphics/battle_transitions/groudon_pt1.gbapal");
+static const u16 sGroudon2_Palette[] = INCBIN_U16("graphics/battle_transitions/groudon_pt2.gbapal");
+static const u16 sRayquaza_Palette[] = INCBIN_U16("graphics/battle_transitions/rayquaza.gbapal");
+static const u32 sRayquaza_Tileset[] = INCBIN_U32("graphics/battle_transitions/rayquaza.4bpp");
+static const u32 sRayquaza_Tilemap[] = INCBIN_U32("graphics/battle_transitions/rayquaza.bin");
+static const u16 sFrontierLogo_Palette[] = INCBIN_U16("graphics/battle_transitions/frontier_logo.gbapal");
+static const u32 sFrontierLogo_Tileset[] = INCBIN_U32("graphics/battle_transitions/frontier_logo.4bpp.lz");
+static const u32 sFrontierLogo_Tilemap[] = INCBIN_U32("graphics/battle_transitions/frontier_logo.bin.lz");
+static const u16 sFrontierSquares_Palette[] = INCBIN_U16("graphics/battle_transitions/frontier_squares_blanktiles.gbapal");
+static const u32 sFrontierSquares_FilledBg_Tileset[] = INCBIN_U32("graphics/battle_transitions/frontier_square_1.4bpp.lz");
+static const u32 sFrontierSquares_EmptyBg_Tileset[] = INCBIN_U32("graphics/battle_transitions/frontier_square_2.4bpp.lz");
+static const u32 sFrontierSquares_Shrink1_Tileset[] = INCBIN_U32("graphics/battle_transitions/frontier_square_3.4bpp.lz");
+static const u32 sFrontierSquares_Shrink2_Tileset[] = INCBIN_U32("graphics/battle_transitions/frontier_square_4.4bpp.lz");
+static const u32 sFrontierSquares_Tilemap[] = INCBIN_U32("graphics/battle_transitions/frontier_squares.bin");
static const TaskFunc sPhase1_Tasks[B_TRANSITION_COUNT] =
{
@@ -319,48 +319,48 @@ static const TaskFunc sPhase1_Tasks[B_TRANSITION_COUNT] =
static const TaskFunc sPhase2_Tasks[B_TRANSITION_COUNT] =
{
- Phase2Task_Blur, // 0
- Phase2Task_Swirl, // 1
- Phase2Task_Shuffle, // 2
- Phase2Task_BigPokeball, // 3
- Phase2Task_PokeballsTrail, // 4
- Phase2Task_Clockwise_BlackFade, // 5
- Phase2Task_Ripple, // 6
- Phase2Task_Wave, // 7
- Phase2Task_Slice, // 8
- Phase2Task_WhiteFade, // 9
- Phase2Task_GridSquares, // 10
- Phase2Task_Shards, // 11
- Phase2Task_Sidney, // 12
- Phase2Task_Phoebe, // 13
- Phase2Task_Glacia, // 14
- Phase2Task_Drake, // 15
- Phase2Task_Champion, // 16
- Phase2Task_Aqua, // 17
- Phase2Task_Magma, // 18
- Phase2Task_Regice, // 19
- Phase2Task_Registeel, // 20
- Phase2Task_Regirock, // 21
- Phase2Task_Kyogre, // 22
- Phase2Task_Groudon, // 23
- Phase2Task_Rayquaza, // 24
- Phase2Task_ShredSplit, // 25
- Phase2Task_Blackhole1, // 26
- Phase2Task_Blackhole2, // 27
- Phase2Task_RectangularSpiral, // 28
- Phase2Task_29, // 29
- Phase2Task_30, // 30
- Phase2Task_31, // 31
- Phase2Task_32, // 32
- Phase2Task_33, // 33
- Phase2Task_34, // 34
- Phase2Task_35, // 35
- Phase2Task_36, // 36
- Phase2Task_37, // 37
- Phase2Task_38, // 38
- Phase2Task_39, // 39
- Phase2Task_40, // 40
- Phase2Task_41, // 41
+ [B_TRANSITION_BLUR] = Phase2Task_Blur,
+ [B_TRANSITION_SWIRL] = Phase2Task_Swirl,
+ [B_TRANSITION_SHUFFLE] = Phase2Task_Shuffle,
+ [B_TRANSITION_BIG_POKEBALL] = Phase2Task_BigPokeball,
+ [B_TRANSITION_POKEBALLS_TRAIL] = Phase2Task_PokeballsTrail,
+ [B_TRANSITION_CLOCKWISE_BLACKFADE] = Phase2Task_Clockwise_BlackFade,
+ [B_TRANSITION_RIPPLE] = Phase2Task_Ripple,
+ [B_TRANSITION_WAVE] = Phase2Task_Wave,
+ [B_TRANSITION_SLICE] = Phase2Task_Slice,
+ [B_TRANSITION_WHITEFADE] = Phase2Task_WhiteFade,
+ [B_TRANSITION_GRID_SQUARES] = Phase2Task_GridSquares,
+ [B_TRANSITION_SHARDS] = Phase2Task_Shards,
+ [B_TRANSITION_SIDNEY] = Phase2Task_Sidney,
+ [B_TRANSITION_PHOEBE] = Phase2Task_Phoebe,
+ [B_TRANSITION_GLACIA] = Phase2Task_Glacia,
+ [B_TRANSITION_DRAKE] = Phase2Task_Drake,
+ [B_TRANSITION_CHAMPION] = Phase2Task_Champion,
+ [B_TRANSITION_AQUA] = Phase2Task_Aqua,
+ [B_TRANSITION_MAGMA] = Phase2Task_Magma,
+ [B_TRANSITION_REGICE] = Phase2Task_Regice,
+ [B_TRANSITION_REGISTEEL] = Phase2Task_Registeel,
+ [B_TRANSITION_REGIROCK] = Phase2Task_Regirock,
+ [B_TRANSITION_KYOGRE] = Phase2Task_Kyogre,
+ [B_TRANSITION_GROUDON] = Phase2Task_Groudon,
+ [B_TRANSITION_RAYQUAZA] = Phase2Task_Rayquaza,
+ [B_TRANSITION_SHRED_SPLIT] = Phase2Task_ShredSplit,
+ [B_TRANSITION_BLACKHOLE1] = Phase2Task_Blackhole1,
+ [B_TRANSITION_BLACKHOLE2] = Phase2Task_Blackhole2,
+ [B_TRANSITION_RECTANGULAR_SPIRAL] = Phase2Task_RectangularSpiral,
+ [B_TRANSITION_FRONTIER_LOGO_WIGGLE] = Phase2Task_FrontierLogoWiggle,
+ [B_TRANSITION_FRONTIER_LOGO_WAVE] = Phase2Task_FrontierLogoWave,
+ [B_TRANSITION_FRONTIER_SQUARES] = Phase2Task_FrontierSquares,
+ [B_TRANSITION_FRONTIER_SQUARES_SCROLL] = Phase2Task_FrontierSquaresScroll,
+ [B_TRANSITION_FRONTIER_SQUARES_SPIRAL] = Phase2Task_FrontierSquaresSpiral,
+ [B_TRANSITION_FRONTIER_CIRCLES_MEET] = Phase2Task_FrontierCirclesMeet,
+ [B_TRANSITION_FRONTIER_CIRCLES_CROSS] = Phase2Task_FrontierCirclesCross,
+ [B_TRANSITION_FRONTIER_CIRCLES_ASYMMETRIC_SPIRAL] = Phase2Task_FrontierCirclesAsymmetricSpiral,
+ [B_TRANSITION_FRONTIER_CIRCLES_SYMMETRIC_SPIRAL] = Phase2Task_FrontierCirclesSymmetricSpiral,
+ [B_TRANSITION_FRONTIER_CIRCLES_MEET_IN_SEQ] = Phase2Task_FrontierCirclesMeetInSeq,
+ [B_TRANSITION_FRONTIER_CIRCLES_CROSS_IN_SEQ] = Phase2Task_FrontierCirclesCrossInSeq,
+ [B_TRANSITION_FRONTIER_CIRCLES_ASYMMETRIC_SPIRAL_IN_SEQ] = Phase2Task_FrontierCirclesAsymmetricSpiralInSeq,
+ [B_TRANSITION_FRONTIER_CIRCLES_SYMMETRIC_SPIRAL_IN_SEQ] = Phase2Task_FrontierCirclesSymmetricSpiralInSeq,
};
static const TransitionStateFunc sMainTransitionPhases[] =
@@ -515,42 +515,42 @@ static const TransitionStateFunc sPhase2_Mugshot_Funcs[] =
static const u8 sMugshotsTrainerPicIDsTable[MUGSHOTS_COUNT] =
{
- TRAINER_PIC_ELITE_FOUR_SIDNEY,
- TRAINER_PIC_ELITE_FOUR_PHOEBE,
- TRAINER_PIC_ELITE_FOUR_GLACIA,
- TRAINER_PIC_ELITE_FOUR_DRAKE,
- TRAINER_PIC_CHAMPION_WALLACE
+ [MUGSHOT_SIDNEY] = TRAINER_PIC_ELITE_FOUR_SIDNEY,
+ [MUGSHOT_PHOEBE] = TRAINER_PIC_ELITE_FOUR_PHOEBE,
+ [MUGSHOT_GLACIA] = TRAINER_PIC_ELITE_FOUR_GLACIA,
+ [MUGSHOT_DRAKE] = TRAINER_PIC_ELITE_FOUR_DRAKE,
+ [MUGSHOT_CHAMPION] = TRAINER_PIC_CHAMPION_WALLACE,
};
static const s16 sMugshotsOpponentRotationScales[MUGSHOTS_COUNT][2] =
{
- {0x200, 0x200},
- {0x200, 0x200},
- {0x1B0, 0x1B0},
- {0x1A0, 0x1A0},
- {0x188, 0x188},
+ [MUGSHOT_SIDNEY] = {0x200, 0x200},
+ [MUGSHOT_PHOEBE] = {0x200, 0x200},
+ [MUGSHOT_GLACIA] = {0x1B0, 0x1B0},
+ [MUGSHOT_DRAKE] = {0x1A0, 0x1A0},
+ [MUGSHOT_CHAMPION] = {0x188, 0x188},
};
static const s16 sMugshotsOpponentCoords[MUGSHOTS_COUNT][2] =
{
- {0, 0},
- {0, 0},
- {-4, 4},
- {0, 5},
- {-8, 7},
+ [MUGSHOT_SIDNEY] = {0, 0},
+ [MUGSHOT_PHOEBE] = {0, 0},
+ [MUGSHOT_GLACIA] = {-4, 4},
+ [MUGSHOT_DRAKE] = {0, 5},
+ [MUGSHOT_CHAMPION] = {-8, 7},
};
-static const TransitionSpriteCallback sUnknown_085C8C24[] =
+static const TransitionSpriteCallback sTrainerPicSpriteCbs[] =
{
- sub_81483A8,
- sub_81483AC,
- sub_81483F8,
- sub_814842C,
- sub_81483A8,
- sub_8148458,
- sub_81483A8
+ TrainerPicCb_Nothing,
+ TrainerPicCb_SetSlideOffsets,
+ TrainerPicCb_Slide1,
+ TrainerPicCb_Slide2,
+ TrainerPicCb_Nothing,
+ TrainerPicCb_Slide3,
+ TrainerPicCb_Nothing
};
-static const s16 sUnknown_085C8C40[2] = {12, -12};
-static const s16 sUnknown_085C8C44[2] = {-1, 1};
+static const s16 sTrainerPicSlideOffsets1[2] = {12, -12};
+static const s16 sTrainerPicSlideOffsets2[2] = {-1, 1};
static const TransitionStateFunc sPhase2_Slice_Funcs[] =
{
@@ -712,52 +712,52 @@ static const TransitionStateFunc sPhase1_TransitionAll_Funcs[] =
Phase1_TransitionAll_Func2
};
-static const struct SpriteFrameImage sSpriteImageTable_85C8E2C[] =
+static const struct SpriteFrameImage sSpriteImage_Pokeball[] =
{
- sSpriteImage_85B98F0, 0x200
+ sPokeball_Gfx, sizeof(sPokeball_Gfx)
};
-static const union AnimCmd sSpriteAnim_85C8E34[] =
+static const union AnimCmd sSpriteAnim_Pokeball[] =
{
ANIMCMD_FRAME(0, 1),
ANIMCMD_END
};
-static const union AnimCmd *const sSpriteAnimTable_85C8E3C[] =
+static const union AnimCmd *const sSpriteAnimTable_Pokeball[] =
{
- sSpriteAnim_85C8E34
+ sSpriteAnim_Pokeball
};
-static const union AffineAnimCmd sSpriteAffineAnim_85C8E40[] =
+static const union AffineAnimCmd sSpriteAffineAnim_Pokeball1[] =
{
AFFINEANIMCMD_FRAME(0, 0, -4, 1),
AFFINEANIMCMD_JUMP(0)
};
-static const union AffineAnimCmd sSpriteAffineAnim_85C8E50[] =
+static const union AffineAnimCmd sSpriteAffineAnim_Pokeball2[] =
{
AFFINEANIMCMD_FRAME(0, 0, 4, 1),
AFFINEANIMCMD_JUMP(0)
};
-static const union AffineAnimCmd *const sSpriteAffineAnimTable_85C8E60[] =
+static const union AffineAnimCmd *const sSpriteAffineAnimTable_Pokeball[] =
{
- sSpriteAffineAnim_85C8E40,
- sSpriteAffineAnim_85C8E50
+ sSpriteAffineAnim_Pokeball1,
+ sSpriteAffineAnim_Pokeball2
};
-static const struct SpriteTemplate gUnknown_085C8E68 =
+static const struct SpriteTemplate sSpriteTemplate_Pokeball =
{
.tileTag = 0xFFFF,
- .paletteTag = 4105,
+ .paletteTag = FLDEFF_PAL_TAG_POKEBALL,
.oam = &gObjectEventBaseOam_32x32,
- .anims = sSpriteAnimTable_85C8E3C,
- .images = sSpriteImageTable_85C8E2C,
- .affineAnims = sSpriteAffineAnimTable_85C8E60,
+ .anims = sSpriteAnimTable_Pokeball,
+ .images = sSpriteImage_Pokeball,
+ .affineAnims = sSpriteAffineAnimTable_Pokeball,
.callback = sub_814713C
};
-static const struct OamData gOamData_85C8E80 =
+static const struct OamData sOam_UnusedBrendanLass =
{
.y = 0,
.affineMode = ST_OAM_AFFINE_OFF,
@@ -774,55 +774,52 @@ static const struct OamData gOamData_85C8E80 =
.affineParam = 0,
};
-static const struct SpriteFrameImage sSpriteImageTable_85C8E88[] =
+static const struct SpriteFrameImage sImageTable_UnusedBrendan[] =
{
- sSpriteImage_85B9CD0, 0x800
+ sUnusedBrendan_Gfx, sizeof(sUnusedBrendan_Gfx)
};
-static const struct SpriteFrameImage sSpriteImageTable_85C8E90[] =
+static const struct SpriteFrameImage sImageTable_UnusedLass[] =
{
- sSpriteImage_85BA4D0, 0x800
+ sUnusedLass_Gfx, sizeof(sUnusedLass_Gfx)
};
-static const union AnimCmd sSpriteAnim_85C8E98[] =
+static const union AnimCmd sSpriteAnim_UnusedBrendanLass[] =
{
ANIMCMD_FRAME(0, 1),
ANIMCMD_END
};
-static const union AnimCmd *const sSpriteAnimTable_85C8EA0[] =
+static const union AnimCmd *const sSpriteAnimTable_UnusedBrendanLass[] =
{
- sSpriteAnim_85C8E98
+ sSpriteAnim_UnusedBrendanLass
};
-static const struct SpriteTemplate sSpriteTemplate_85C8EA4 =
+static const struct SpriteTemplate sSpriteTemplate_UnusedBrendan =
{
.tileTag = 0xFFFF,
- .paletteTag = 4106,
- .oam = &gOamData_85C8E80,
- .anims = sSpriteAnimTable_85C8EA0,
- .images = sSpriteImageTable_85C8E88,
+ .paletteTag = 0x100A,
+ .oam = &sOam_UnusedBrendanLass,
+ .anims = sSpriteAnimTable_UnusedBrendanLass,
+ .images = sImageTable_UnusedBrendan,
.affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_8148380
+ .callback = SpriteCb_TrainerPic
};
-static const struct SpriteTemplate sSpriteTemplate_85C8EBC =
+static const struct SpriteTemplate sSpriteTemplate_UnusedLass =
{
.tileTag = 0xFFFF,
- .paletteTag = 4106,
- .oam = &gOamData_85C8E80,
- .anims = sSpriteAnimTable_85C8EA0,
- .images = sSpriteImageTable_85C8E90,
+ .paletteTag = 0x100A,
+ .oam = &sOam_UnusedBrendanLass,
+ .anims = sSpriteAnimTable_UnusedBrendanLass,
+ .images = sImageTable_UnusedLass,
.affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_8148380
+ .callback = SpriteCb_TrainerPic
};
-static const u16 gFieldEffectObjectPalette10[] = INCBIN_U16("graphics/field_effects/palettes/10.gbapal");
+static const u16 sFieldEffectPal_Pokeball[] = INCBIN_U16("graphics/field_effects/palettes/pokeball.gbapal");
-const struct SpritePalette gFieldEffectObjectPaletteInfo10 =
-{
- gFieldEffectObjectPalette10, 0x1009
-};
+const struct SpritePalette gSpritePalette_Pokeball = {sFieldEffectPal_Pokeball, FLDEFF_PAL_TAG_POKEBALL};
static const u16 sMugshotPal_Sidney[] = INCBIN_U16("graphics/battle_transitions/sidney_bg.gbapal");
static const u16 sMugshotPal_Phoebe[] = INCBIN_U16("graphics/battle_transitions/phoebe_bg.gbapal");
@@ -834,70 +831,67 @@ static const u16 sMugshotPal_May[] = INCBIN_U16("graphics/battle_transitions/may
static const u16 *const sOpponentMugshotsPals[MUGSHOTS_COUNT] =
{
- sMugshotPal_Sidney,
- sMugshotPal_Phoebe,
- sMugshotPal_Glacia,
- sMugshotPal_Drake,
- sMugshotPal_Champion
+ [MUGSHOT_SIDNEY] = sMugshotPal_Sidney,
+ [MUGSHOT_PHOEBE] = sMugshotPal_Phoebe,
+ [MUGSHOT_GLACIA] = sMugshotPal_Glacia,
+ [MUGSHOT_DRAKE] = sMugshotPal_Drake,
+ [MUGSHOT_CHAMPION] = sMugshotPal_Champion
};
-static const u16 *const sPlayerMugshotsPals[2] =
+static const u16 *const sPlayerMugshotsPals[GENDER_COUNT] =
{
- sMugshotPal_Brendan,
- sMugshotPal_May
+ [MALE] = sMugshotPal_Brendan,
+ [FEMALE] = sMugshotPal_May
};
static const u16 sUnusedTrainerPalette[] = INCBIN_U16("graphics/battle_transitions/unused_trainer.gbapal");
-static const struct SpritePalette sSpritePalette_UnusedTrainer =
-{
- sUnusedTrainerPalette, 0x100A
-};
+static const struct SpritePalette sSpritePalette_UnusedTrainer = {sUnusedTrainerPalette, 0x100A};
static const u16 sBigPokeball_Tilemap[] = INCBIN_U16("graphics/battle_transitions/big_pokeball_map.bin");
static const u16 sMugshotsTilemap[] = INCBIN_U16("graphics/battle_transitions/elite_four_bg_map.bin");
-static const TransitionStateFunc sPhase2_29_Funcs[] =
+static const TransitionStateFunc sPhase2_FrontierLogoWiggle_Funcs[] =
{
- Phase2_29_Func1,
- Phase2_29_Func2,
+ Phase2_FrontierLogoWiggle_Func1,
+ Phase2_FrontierLogoWiggle_Func2,
Phase2_BigPokeball_Func3,
Phase2_BigPokeball_Func4,
Phase2_BigPokeball_Func5,
Phase2_BigPokeball_Func6
};
-static const TransitionStateFunc sPhase2_30_Funcs[] =
+static const TransitionStateFunc sPhase2_FrontierLogoWave_Funcs[] =
{
- Phase2_30_Func1,
- Phase2_30_Func2,
- Phase2_30_Func3,
- Phase2_30_Func4
+ Phase2_FrontierLogoWave_Func1,
+ Phase2_FrontierLogoWave_Func2,
+ Phase2_FrontierLogoWave_Func3,
+ Phase2_FrontierLogoWave_Func4
};
-static const TransitionStateFunc sPhase2_31_Funcs[] =
+static const TransitionStateFunc sPhase2_FrontierSquares_Funcs[] =
{
- Phase2_31_Func1,
- Phase2_31_Func2,
- Phase2_31_Func3,
- Phase2_31_33_Func5
+ Phase2_FrontierSquares_Func1,
+ Phase2_FrontierSquares_Func2,
+ Phase2_FrontierSquares_Func3,
+ Phase2_FrontierSquares_End
};
-static const TransitionStateFunc sPhase2_33_Funcs[] =
+static const TransitionStateFunc sPhase2_FrontierSquaresSpiral_Funcs[] =
{
- Phase2_33_Func1,
- Phase2_33_Func2,
- Phase2_33_Func3,
- Phase2_33_Func4,
- Phase2_31_33_Func5
+ Phase2_FrontierSquaresSpiral_Func1,
+ Phase2_FrontierSquaresSpiral_Func2,
+ Phase2_FrontierSquaresSpiral_Func3,
+ Phase2_FrontierSquaresSpiral_Func4,
+ Phase2_FrontierSquares_End
};
-static const TransitionStateFunc sPhase2_32_Funcs[] =
+static const TransitionStateFunc sPhase2_FrontierSquaresScroll_Funcs[] =
{
- Phase2_32_Func1,
- Phase2_32_Func2,
- Phase2_32_Func3,
- Phase2_32_Func4,
- Phase2_32_Func5
+ Phase2_FrontierSquaresScroll_Func1,
+ Phase2_FrontierSquaresScroll_Func2,
+ Phase2_FrontierSquaresScroll_Func3,
+ Phase2_FrontierSquaresScroll_Func4,
+ Phase2_FrontierSquaresScroll_Func5
};
static const u8 gUnknown_085C9A30[] = {0x1c, 0x1d, 0x1e, 0x1f, 0x20, 0x21, 0x22, 0x1b, 0x14, 0x0d, 0x06, 0x05, 0x04, 0x03, 0x02, 0x01, 0x00, 0x07, 0x0e, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x13, 0x0c, 0x0b, 0x0a, 0x09, 0x08, 0x0f, 0x10, 0x11, 0x12};
@@ -1102,7 +1096,7 @@ static void Phase2Task_Swirl(u8 taskId)
static bool8 Phase2_Swirl_Func1(struct Task *task)
{
- sub_8149F08();
+ InitTransitionStructVars();
ScanlineEffect_Clear();
BeginNormalPaletteFade(0xFFFFFFFF, 4, 0, 0x10, RGB_BLACK);
sub_8149F98(gScanlineEffectRegBuffers[1], sTransitionStructPtr->field_14, 0, 2, 0, 160);
@@ -1156,7 +1150,7 @@ static void Phase2Task_Shuffle(u8 taskId)
static bool8 Phase2_Shuffle_Func1(struct Task *task)
{
- sub_8149F08();
+ InitTransitionStructVars();
ScanlineEffect_Clear();
BeginNormalPaletteFade(0xFFFFFFFF, 4, 0, 0x10, RGB_BLACK);
@@ -1249,7 +1243,7 @@ static void sub_814669C(struct Task *task)
{
s32 i;
- sub_8149F08();
+ InitTransitionStructVars();
ScanlineEffect_Clear();
task->tData1 = 16;
@@ -1273,13 +1267,13 @@ static void sub_814669C(struct Task *task)
static bool8 Phase2_Aqua_Func1(struct Task *task)
{
- u16 *dst1, *dst2;
+ u16 *tilemap, *tileset;
task->tFrames = 60;
sub_814669C(task);
- sub_8149F58(&dst1, &dst2);
- CpuFill16(0, dst1, 0x800);
- LZ77UnCompVram(sTeamAqua_Tileset, dst2);
+ GetBg0TilesDst(&tilemap, &tileset);
+ CpuFill16(0, tilemap, 0x800);
+ LZ77UnCompVram(sTeamAqua_Tileset, tileset);
LoadPalette(sEvilTeam_Palette, 0xF0, 0x20);
task->tState++;
@@ -1288,13 +1282,13 @@ static bool8 Phase2_Aqua_Func1(struct Task *task)
static bool8 Phase2_Magma_Func1(struct Task *task)
{
- u16 *dst1, *dst2;
+ u16 *tilemap, *tileset;
task->tFrames = 60;
sub_814669C(task);
- sub_8149F58(&dst1, &dst2);
- CpuFill16(0, dst1, 0x800);
- LZ77UnCompVram(sTeamMagma_Tileset, dst2);
+ GetBg0TilesDst(&tilemap, &tileset);
+ CpuFill16(0, tilemap, 0x800);
+ LZ77UnCompVram(sTeamMagma_Tileset, tileset);
LoadPalette(sEvilTeam_Palette, 0xF0, 0x20);
task->tState++;
@@ -1303,13 +1297,13 @@ static bool8 Phase2_Magma_Func1(struct Task *task)
static bool8 Phase2_Regi_Func1(struct Task *task)
{
- u16 *dst1, *dst2;
+ u16 *tilemap, *tileset;
task->tFrames = 60;
sub_814669C(task);
- sub_8149F58(&dst1, &dst2);
- CpuFill16(0, dst1, 0x800);
- CpuCopy16(gUnknown_085BBC14, dst2, 0x2000);
+ GetBg0TilesDst(&tilemap, &tileset);
+ CpuFill16(0, tilemap, 0x800);
+ CpuCopy16(sRegis_Tileset, tileset, 0x2000);
task->tState++;
return FALSE;
@@ -1317,13 +1311,13 @@ static bool8 Phase2_Regi_Func1(struct Task *task)
static bool8 Phase2_BigPokeball_Func1(struct Task *task)
{
- u16 *dst1, *dst2;
+ u16 *tilemap, *tileset;
sub_814669C(task);
- sub_8149F58(&dst1, &dst2);
- CpuFill16(0, dst1, 0x800);
- CpuCopy16(sBigPokeball_Tileset, dst2, 0x580);
- LoadPalette(gFieldEffectObjectPalette10, 0xF0, 0x20);
+ GetBg0TilesDst(&tilemap, &tileset);
+ CpuFill16(0, tilemap, 0x800);
+ CpuCopy16(sBigPokeball_Tileset, tileset, 0x580);
+ LoadPalette(sFieldEffectPal_Pokeball, 0xF0, 0x20);
task->tState++;
return FALSE;
@@ -1332,16 +1326,16 @@ static bool8 Phase2_BigPokeball_Func1(struct Task *task)
static bool8 Phase2_BigPokeball_Func2(struct Task *task)
{
s16 i, j;
- u16 *dst1, *dst2;
+ u16 *tilemap, *tileset;
const u16 *BigPokeballMap;
- sub_8149F58(&dst1, &dst2);
+ GetBg0TilesDst(&tilemap, &tileset);
BigPokeballMap = sBigPokeball_Tilemap;
for (i = 0; i < 20; i++)
{
for (j = 0; j < 30; j++, BigPokeballMap++)
{
- dst1[i * 32 + j] = *BigPokeballMap | 0xF000;
+ tilemap[i * 32 + j] = *BigPokeballMap | 0xF000;
}
}
sub_8149F98(gScanlineEffectRegBuffers[0], 0, task->tData4, 132, task->tData5, 160);
@@ -1352,10 +1346,10 @@ static bool8 Phase2_BigPokeball_Func2(struct Task *task)
static bool8 Phase2_Aqua_Func2(struct Task *task)
{
- u16 *dst1, *dst2;
+ u16 *tilemap, *tileset;
- sub_8149F58(&dst1, &dst2);
- LZ77UnCompVram(sTeamAqua_Tilemap, dst1);
+ GetBg0TilesDst(&tilemap, &tileset);
+ LZ77UnCompVram(sTeamAqua_Tilemap, tilemap);
sub_8149F98(gScanlineEffectRegBuffers[0], 0, task->tData4, 132, task->tData5, 160);
task->tState++;
@@ -1364,10 +1358,10 @@ static bool8 Phase2_Aqua_Func2(struct Task *task)
static bool8 Phase2_Magma_Func2(struct Task *task)
{
- u16 *dst1, *dst2;
+ u16 *tilemap, *tileset;
- sub_8149F58(&dst1, &dst2);
- LZ77UnCompVram(sTeamMagma_Tilemap, dst1);
+ GetBg0TilesDst(&tilemap, &tileset);
+ LZ77UnCompVram(sTeamMagma_Tilemap, tilemap);
sub_8149F98(gScanlineEffectRegBuffers[0], 0, task->tData4, 132, task->tData5, 160);
task->tState++;
@@ -1376,11 +1370,11 @@ static bool8 Phase2_Magma_Func2(struct Task *task)
static bool8 Phase2_Regice_Func2(struct Task *task)
{
- u16 *dst1, *dst2;
+ u16 *tilemap, *tileset;
- sub_8149F58(&dst1, &dst2);
- LoadPalette(gUnknown_085BC2B4, 0xF0, 0x20);
- CpuCopy16(gUnknown_085BC314, dst1, 0x500);
+ GetBg0TilesDst(&tilemap, &tileset);
+ LoadPalette(sRegice_Palette, 0xF0, 0x20);
+ CpuCopy16(sRegice_Tilemap, tilemap, 0x500);
sub_8149F98(gScanlineEffectRegBuffers[0], 0, task->tData4, 132, task->tData5, 160);
task->tState++;
@@ -1389,11 +1383,11 @@ static bool8 Phase2_Regice_Func2(struct Task *task)
static bool8 Phase2_Registeel_Func2(struct Task *task)
{
- u16 *dst1, *dst2;
+ u16 *tilemap, *tileset;
- sub_8149F58(&dst1, &dst2);
- LoadPalette(gUnknown_085BC2D4, 0xF0, 0x20);
- CpuCopy16(gUnknown_085BCB14, dst1, 0x500);
+ GetBg0TilesDst(&tilemap, &tileset);
+ LoadPalette(sRegisteel_Palette, 0xF0, 0x20);
+ CpuCopy16(sRegisteel_Tilemap, tilemap, 0x500);
sub_8149F98(gScanlineEffectRegBuffers[0], 0, task->tData4, 132, task->tData5, 160);
task->tState++;
@@ -1402,11 +1396,11 @@ static bool8 Phase2_Registeel_Func2(struct Task *task)
static bool8 Phase2_Regirock_Func2(struct Task *task)
{
- u16 *dst1, *dst2;
+ u16 *tilemap, *tileset;
- sub_8149F58(&dst1, &dst2);
- LoadPalette(gUnknown_085BC2F4, 0xF0, 0x20);
- CpuCopy16(gUnknown_085BD314, dst1, 0x500);
+ GetBg0TilesDst(&tilemap, &tileset);
+ LoadPalette(sRegirock_Palette, 0xF0, 0x20);
+ CpuCopy16(sRegirock_Tilemap, tilemap, 0x500);
sub_8149F98(gScanlineEffectRegBuffers[0], 0, task->tData4, 132, task->tData5, 160);
task->tState++;
@@ -1415,12 +1409,12 @@ static bool8 Phase2_Regirock_Func2(struct Task *task)
static bool8 Phase2_Kyogre_Func3(struct Task *task)
{
- u16 *dst1, *dst2;
+ u16 *tilemap, *tileset;
- sub_8149F58(&dst1, &dst2);
- CpuFill16(0, dst1, 0x800);
- LZ77UnCompVram(gUnknown_085BDB34, dst2);
- LZ77UnCompVram(gUnknown_085BE1E8, dst1);
+ GetBg0TilesDst(&tilemap, &tileset);
+ CpuFill16(0, tilemap, 0x800);
+ LZ77UnCompVram(sKyogre_Tileset, tileset);
+ LZ77UnCompVram(sKyogre_Tilemap, tilemap);
task->tState++;
return FALSE;
@@ -1432,7 +1426,7 @@ static bool8 Phase2_Kyogre_Func4(struct Task *task)
{
u16 var = task->tData1 % 30;
var /= 3;
- LoadPalette(gUnknown_085BEDA0 + (var * 16), 0xF0, 0x20);
+ LoadPalette(sKyogre1_Palette + (var * 16), 0xF0, 0x20);
}
if (++task->tData1 > 58)
{
@@ -1448,7 +1442,7 @@ static bool8 Phase2_Kyogre_Func5(struct Task *task)
if (task->tData1 % 5 == 0)
{
s16 var = task->tData1 / 5;
- LoadPalette(gUnknown_085BEEE0 + (var * 16), 0xF0, 0x20);
+ LoadPalette(sKyogre2_Palette + (var * 16), 0xF0, 0x20);
}
if (++task->tData1 > 68)
{
@@ -1472,7 +1466,7 @@ static bool8 Phase2_WeatherDuo_Func7(struct Task *task)
if (!gPaletteFade.active)
{
DmaStop(0);
- sub_8149F84();
+ FadeScreenBlack();
DestroyTask(FindTaskIdByFunc(task->func));
}
return FALSE;
@@ -1575,7 +1569,7 @@ static bool8 Phase2_BigPokeball_Func6(struct Task *task)
{
SetVBlankCallback(NULL);
DmaStop(0);
- sub_8149F84();
+ FadeScreenBlack();
DestroyTask(FindTaskIdByFunc(task->func));
}
else
@@ -1624,12 +1618,12 @@ static void Phase2Task_PokeballsTrail(u8 taskId)
static bool8 Phase2_PokeballsTrail_Func1(struct Task *task)
{
- u16 *dst1, *dst2;
+ u16 *tilemap, *tileset;
- sub_8149F58(&dst1, &dst2);
- CpuSet(sPokeballTrail_Tileset, dst2, 0x20);
- CpuFill32(0, dst1, 0x800);
- LoadPalette(gFieldEffectObjectPalette10, 0xF0, 0x20);
+ GetBg0TilesDst(&tilemap, &tileset);
+ CpuSet(sPokeballTrail_Tileset, tileset, 0x20);
+ CpuFill32(0, tilemap, 0x800);
+ LoadPalette(sFieldEffectPal_Pokeball, 0xF0, 0x20);
task->tState++;
return FALSE;
@@ -1662,7 +1656,7 @@ static bool8 Phase2_PokeballsTrail_Func3(struct Task *task)
{
if (!FieldEffectActiveListContains(FLDEFF_POKEBALL))
{
- sub_8149F84();
+ FadeScreenBlack();
DestroyTask(FindTaskIdByFunc(Phase2Task_PokeballsTrail));
}
return FALSE;
@@ -1670,7 +1664,7 @@ static bool8 Phase2_PokeballsTrail_Func3(struct Task *task)
bool8 FldEff_Pokeball(void)
{
- u8 spriteId = CreateSpriteAtEnd(&gUnknown_085C8E68, gFieldEffectArguments[0], gFieldEffectArguments[1], 0);
+ u8 spriteId = CreateSpriteAtEnd(&sSpriteTemplate_Pokeball, gFieldEffectArguments[0], gFieldEffectArguments[1], 0);
gSprites[spriteId].oam.priority = 0;
gSprites[spriteId].oam.affineMode = ST_OAM_AFFINE_NORMAL;
gSprites[spriteId].data[0] = gFieldEffectArguments[2];
@@ -1709,7 +1703,7 @@ static void sub_814713C(struct Sprite *sprite)
u16 *ptr;
sprite->data[2] = posX;
- var = (((REG_BG0CNT >> 8) & 0x1F) << 11); // r2
+ var = (((REG_BG0CNT >> 8) & 0x1F) << 11);
ptr = (u16 *)(VRAM + var);
SOME_VRAM_STORE(ptr, posY - 2, posX, 0xF001);
@@ -1733,7 +1727,7 @@ static bool8 Phase2_Clockwise_BlackFade_Func1(struct Task *task)
{
u16 i;
- sub_8149F08();
+ InitTransitionStructVars();
ScanlineEffect_Clear();
sTransitionStructPtr->WININ = 0;
@@ -1900,7 +1894,7 @@ static bool8 Phase2_Clockwise_BlackFade_Func6(struct Task *task)
static bool8 Phase2_Clockwise_BlackFade_Func7(struct Task *task)
{
DmaStop(0);
- sub_8149F84();
+ FadeScreenBlack();
DestroyTask(FindTaskIdByFunc(Phase2Task_Clockwise_BlackFade));
return FALSE;
}
@@ -1927,7 +1921,7 @@ static bool8 Phase2_Ripple_Func1(struct Task *task)
{
u8 i;
- sub_8149F08();
+ InitTransitionStructVars();
ScanlineEffect_Clear();
for (i = 0; i < 160; i++)
@@ -1962,7 +1956,7 @@ static bool8 Phase2_Ripple_Func2(struct Task *task)
for (i = 0; i < 160; i++, r4 += r8)
{
s16 var = r4 >> 8;
-
+
var++;
var--;
gScanlineEffectRegBuffers[0][i] = sTransitionStructPtr->field_16 + Sin(var, r3);
@@ -2005,7 +1999,7 @@ static bool8 Phase2_Wave_Func1(struct Task *task)
{
u8 i;
- sub_8149F08();
+ InitTransitionStructVars();
ScanlineEffect_Clear();
sTransitionStructPtr->WININ = 63;
@@ -2057,7 +2051,7 @@ static bool8 Phase2_Wave_Func2(struct Task *task)
static bool8 Phase2_Wave_Func3(struct Task *task)
{
DmaStop(0);
- sub_8149F84();
+ FadeScreenBlack();
DestroyTask(FindTaskIdByFunc(Phase2Task_Wave));
return FALSE;
}
@@ -2113,7 +2107,7 @@ static bool8 Phase2_Mugshot_Func1(struct Task *task)
{
u8 i;
- sub_8149F08();
+ InitTransitionStructVars();
ScanlineEffect_Clear();
Mugshots_CreateOpponentPlayerSprites(task);
@@ -2138,20 +2132,20 @@ static bool8 Phase2_Mugshot_Func1(struct Task *task)
static bool8 Phase2_Mugshot_Func2(struct Task *task)
{
s16 i, j;
- u16 *dst1, *dst2;
- const u16 *MugshotsMap;
+ u16 *tilemap, *tileset;
+ const u16 *mugshotsMap;
- MugshotsMap = sMugshotsTilemap;
- sub_8149F58(&dst1, &dst2);
- CpuSet(sUnknown_085B9AF0, dst2, 0xF0);
+ mugshotsMap = sMugshotsTilemap;
+ GetBg0TilesDst(&tilemap, &tileset);
+ CpuSet(sEliteFour_Tileset, tileset, 0xF0);
LoadPalette(sOpponentMugshotsPals[task->tMugshotId], 0xF0, 0x20);
LoadPalette(sPlayerMugshotsPals[gSaveBlock2Ptr->playerGender], 0xFA, 0xC);
for (i = 0; i < 20; i++)
{
- for (j = 0; j < 32; j++, MugshotsMap++)
+ for (j = 0; j < 32; j++, mugshotsMap++)
{
- dst1[i * 32 + j] = *MugshotsMap | 0xF000;
+ tilemap[i * 32 + j] = *mugshotsMap | 0xF000;
}
}
@@ -2229,11 +2223,11 @@ static bool8 Phase2_Mugshot_Func4(struct Task *task)
sTransitionStructPtr->BG0HOFS_1 -= 8;
sTransitionStructPtr->BG0HOFS_2 += 8;
- sub_8148484(task->tOpponentSpriteId, 0);
- sub_8148484(task->tPlayerSpriteId, 1);
- sub_814849C(task->tOpponentSpriteId);
+ SetTrainerPicSlideTable(task->tOpponentSpriteId, 0);
+ SetTrainerPicSlideTable(task->tPlayerSpriteId, 1);
+ IncrementTrainerPicState(task->tOpponentSpriteId);
- PlaySE(SE_BT_START);
+ PlaySE(SE_MUGSHOT);
sTransitionStructPtr->VBlank_DMA++;
return FALSE;
@@ -2243,10 +2237,10 @@ static bool8 Phase2_Mugshot_Func5(struct Task *task)
{
sTransitionStructPtr->BG0HOFS_1 -= 8;
sTransitionStructPtr->BG0HOFS_2 += 8;
- if (sub_81484B8(task->tOpponentSpriteId))
+ if (IsTrainerPicSlideDone(task->tOpponentSpriteId))
{
task->tState++;
- sub_814849C(task->tPlayerSpriteId);
+ IncrementTrainerPicState(task->tPlayerSpriteId);
}
return FALSE;
}
@@ -2255,7 +2249,7 @@ static bool8 Phase2_Mugshot_Func6(struct Task *task)
{
sTransitionStructPtr->BG0HOFS_1 -= 8;
sTransitionStructPtr->BG0HOFS_2 += 8;
- if (sub_81484B8(task->tPlayerSpriteId))
+ if (IsTrainerPicSlideDone(task->tPlayerSpriteId))
{
sTransitionStructPtr->VBlank_DMA = FALSE;
SetVBlankCallback(NULL);
@@ -2317,7 +2311,7 @@ static bool8 Phase2_Mugshot_Func7(struct Task *task)
static bool8 Phase2_Mugshot_Func8(struct Task *task)
{
sTransitionStructPtr->VBlank_DMA = FALSE;
- BlendPalettes(-1, 0x10, 0x7FFF);
+ BlendPalettes(0xFFFFFFFF, 0x10, RGB_WHITE);
sTransitionStructPtr->BLDCNT = 0xFF;
task->tData3 = 0;
@@ -2341,7 +2335,7 @@ static bool8 Phase2_Mugshot_Func9(struct Task *task)
static bool8 Phase2_Mugshot_Func10(struct Task *task)
{
DmaStop(0);
- sub_8149F84();
+ FadeScreenBlack();
DestroyTask(FindTaskIdByFunc(task->func));
return FALSE;
}
@@ -2377,6 +2371,13 @@ static void HBlankCB_Phase2_Mugshots(void)
REG_BG0HOFS = sTransitionStructPtr->BG0HOFS_2;
}
+// data fields for player/opponent sprites in mugshots
+#define sState data[0]
+#define sOffsetX data[1]
+#define sOffsetX2 data[2]
+#define sDone data[6]
+#define sSlideTableId data[7]
+
static void Mugshots_CreateOpponentPlayerSprites(struct Task *task)
{
struct Sprite *opponentSprite, *playerSprite;
@@ -2391,8 +2392,8 @@ static void Mugshots_CreateOpponentPlayerSprites(struct Task *task)
opponentSprite = &gSprites[task->tOpponentSpriteId];
playerSprite = &gSprites[task->tPlayerSpriteId];
- opponentSprite->callback = sub_8148380;
- playerSprite->callback = sub_8148380;
+ opponentSprite->callback = SpriteCb_TrainerPic;
+ playerSprite->callback = SpriteCb_TrainerPic;
opponentSprite->oam.affineMode = ST_OAM_AFFINE_DOUBLE;
playerSprite->oam.affineMode = ST_OAM_AFFINE_DOUBLE;
@@ -2413,77 +2414,86 @@ static void Mugshots_CreateOpponentPlayerSprites(struct Task *task)
SetOamMatrixRotationScaling(playerSprite->oam.matrixNum, -512, 512, 0);
}
-static void sub_8148380(struct Sprite *sprite)
+static void SpriteCb_TrainerPic(struct Sprite *sprite)
{
- while (sUnknown_085C8C24[sprite->data[0]](sprite));
+ while (sTrainerPicSpriteCbs[sprite->sState](sprite));
}
-static bool8 sub_81483A8(struct Sprite *sprite)
+static bool8 TrainerPicCb_Nothing(struct Sprite *sprite)
{
return FALSE;
}
-static bool8 sub_81483AC(struct Sprite *sprite)
+static bool8 TrainerPicCb_SetSlideOffsets(struct Sprite *sprite)
{
- s16 arr0[2];
- s16 arr1[2];
+ s16 offfsets1[ARRAY_COUNT(sTrainerPicSlideOffsets1)];
+ s16 offfsets2[ARRAY_COUNT(sTrainerPicSlideOffsets2)];
- memcpy(arr0, sUnknown_085C8C40, sizeof(sUnknown_085C8C40));
- memcpy(arr1, sUnknown_085C8C44, sizeof(sUnknown_085C8C44));
+ memcpy(offfsets1, sTrainerPicSlideOffsets1, sizeof(sTrainerPicSlideOffsets1));
+ memcpy(offfsets2, sTrainerPicSlideOffsets2, sizeof(sTrainerPicSlideOffsets2));
- sprite->data[0]++;
- sprite->data[1] = arr0[sprite->data[7]];
- sprite->data[2] = arr1[sprite->data[7]];
+ sprite->sState++;
+ sprite->sOffsetX = offfsets1[sprite->sSlideTableId];
+ sprite->sOffsetX2 = offfsets2[sprite->sSlideTableId];
return TRUE;
}
-static bool8 sub_81483F8(struct Sprite *sprite)
+// fast slide to around middle screen
+static bool8 TrainerPicCb_Slide1(struct Sprite *sprite)
{
- sprite->pos1.x += sprite->data[1];
- if (sprite->data[7] && sprite->pos1.x < 133)
- sprite->data[0]++;
- else if (!sprite->data[7] && sprite->pos1.x > 103)
- sprite->data[0]++;
+ sprite->pos1.x += sprite->sOffsetX;
+ if (sprite->sSlideTableId && sprite->pos1.x < 133)
+ sprite->sState++;
+ else if (!sprite->sSlideTableId && sprite->pos1.x > 103)
+ sprite->sState++;
return FALSE;
}
-static bool8 sub_814842C(struct Sprite *sprite)
+// slower but accelerating slide
+static bool8 TrainerPicCb_Slide2(struct Sprite *sprite)
{
- sprite->data[1] += sprite->data[2];
- sprite->pos1.x += sprite->data[1];
- if (sprite->data[1] == 0)
+ sprite->sOffsetX += sprite->sOffsetX2;
+ sprite->pos1.x += sprite->sOffsetX;
+ if (sprite->sOffsetX == 0)
{
- sprite->data[0]++;
- sprite->data[2] = -sprite->data[2];
- sprite->data[6] = 1;
+ sprite->sState++;
+ sprite->sOffsetX2 = -sprite->sOffsetX2;
+ sprite->sDone = TRUE;
}
return FALSE;
}
-static bool8 sub_8148458(struct Sprite *sprite)
+// Has no practical effect
+static bool8 TrainerPicCb_Slide3(struct Sprite *sprite)
{
- sprite->data[1] += sprite->data[2];
- sprite->pos1.x += sprite->data[1];
+ sprite->sOffsetX += sprite->sOffsetX2;
+ sprite->pos1.x += sprite->sOffsetX;
if (sprite->pos1.x < -31 || sprite->pos1.x > 271)
- sprite->data[0]++;
+ sprite->sState++;
return FALSE;
}
-static void sub_8148484(s16 spriteId, s16 value)
+static void SetTrainerPicSlideTable(s16 spriteId, s16 arrId)
{
- gSprites[spriteId].data[7] = value;
+ gSprites[spriteId].sSlideTableId = arrId;
}
-static void sub_814849C(s16 spriteId)
+static void IncrementTrainerPicState(s16 spriteId)
{
- gSprites[spriteId].data[0]++;
+ gSprites[spriteId].sState++;
}
-static s16 sub_81484B8(s16 spriteId)
+static s16 IsTrainerPicSlideDone(s16 spriteId)
{
- return gSprites[spriteId].data[6];
+ return gSprites[spriteId].sDone;
}
+#undef sState
+#undef sOffsetX
+#undef sOffsetX2
+#undef sDone
+#undef sSlideTableId
+
static void Phase2Task_Slice(u8 taskId)
{
while (sPhase2_Slice_Funcs[gTasks[taskId].tState](&gTasks[taskId]));
@@ -2493,7 +2503,7 @@ static bool8 Phase2_Slice_Func1(struct Task *task)
{
u16 i;
- sub_8149F08();
+ InitTransitionStructVars();
ScanlineEffect_Clear();
task->tData2 = 256;
@@ -2559,7 +2569,7 @@ static bool8 Phase2_Slice_Func2(struct Task *task)
static bool8 Phase2_Slice_Func3(struct Task *task)
{
DmaStop(0);
- sub_8149F84();
+ FadeScreenBlack();
DestroyTask(FindTaskIdByFunc(Phase2Task_Slice));
return FALSE;
}
@@ -2596,7 +2606,7 @@ static bool8 Phase2_ShredSplit_Func1(struct Task *task)
{
u16 i;
- sub_8149F08();
+ InitTransitionStructVars();
ScanlineEffect_Clear();
sTransitionStructPtr->WININ = 63;
@@ -2749,7 +2759,7 @@ static bool8 Phase2_ShredSplit_Func3(struct Task *task)
static bool8 Phase2_ShredSplit_Func4(struct Task *task)
{
DmaStop(0);
- sub_8149F84();
+ FadeScreenBlack();
DestroyTask(FindTaskIdByFunc(Phase2Task_ShredSplit));
return FALSE;
}
@@ -2768,7 +2778,7 @@ static bool8 Phase2_Blackhole_Func1(struct Task *task)
{
s32 i;
- sub_8149F08();
+ InitTransitionStructVars();
ScanlineEffect_Clear();
sTransitionStructPtr->WININ = 0;
@@ -2812,7 +2822,7 @@ static bool8 Phase2_Blackhole1_Func3(struct Task *task)
if (task->tData1 == 0xA0)
{
task->tFuncState = 1;
- sub_8149F84();
+ FadeScreenBlack();
}
else
{
@@ -2864,7 +2874,7 @@ static bool8 Phase2_Blackhole2_Func2(struct Task *task)
if (task->tData1 == 0xA0)
{
DmaStop(0);
- sub_8149F84();
+ FadeScreenBlack();
DestroyTask(FindTaskIdByFunc(task->func));
}
@@ -2897,13 +2907,13 @@ static void Phase2Task_RectangularSpiral(u8 taskId)
static bool8 Phase2_RectangularSpiral_Func1(struct Task *task)
{
- u16 *dst1, *dst2;
+ u16 *tilemap, *tileset;
- sub_8149F58(&dst1, &dst2);
- CpuCopy16(sShrinkingBoxTileset, dst2, 0x20);
- CpuCopy16(sShrinkingBoxTileset + 0x70, dst2 + 0x20, 0x20);
- CpuFill16(0xF000, dst1, 0x800);
- LoadPalette(gFieldEffectObjectPalette10, 0xF0, 0x20);
+ GetBg0TilesDst(&tilemap, &tileset);
+ CpuCopy16(sShrinkingBoxTileset, tileset, 0x20);
+ CpuCopy16(sShrinkingBoxTileset + 0x70, tileset + 0x20, 0x20);
+ CpuFill16(0xF000, tilemap, 0x800);
+ LoadPalette(sFieldEffectPal_Pokeball, 0xF0, 0x20);
task->tData3 = 1;
task->tState++;
@@ -2937,12 +2947,12 @@ static bool8 Phase2_RectangularSpiral_Func1(struct Task *task)
static bool8 Phase2_RectangularSpiral_Func2(struct Task *task)
{
- u16 *dst1, *dst2;
+ u16 *tilemap, *tileset;
u8 i;
u16 j;
bool32 done = TRUE;
- sub_8149F58(&dst1, &dst2);
+ GetBg0TilesDst(&tilemap, &tileset);
for (i = 0; i < 2; i++)
{
@@ -2963,7 +2973,7 @@ static bool8 Phase2_RectangularSpiral_Func2(struct Task *task)
var2 = var % 32;
var3 = var / 32 * 32;
- dst1[var3 + var2] = 0xF002;
+ tilemap[var3 + var2] = 0xF002;
}
}
}
@@ -2976,7 +2986,7 @@ static bool8 Phase2_RectangularSpiral_Func2(struct Task *task)
static bool8 Phase2_RectangularSpiral_Func3(struct Task *task)
{
DmaStop(0);
- sub_8149F84();
+ FadeScreenBlack();
DestroyTask(FindTaskIdByFunc(task->func));
return FALSE;
}
@@ -3051,12 +3061,12 @@ static void Phase2Task_Groudon(u8 taskId)
static bool8 Phase2_Groudon_Func3(struct Task *task)
{
- u16 *dst1, *dst2;
+ u16 *tilemap, *tileset;
- sub_8149F58(&dst1, &dst2);
- CpuFill16(0, dst1, 0x800);
- LZ77UnCompVram(gUnknown_085BE51C, dst2);
- LZ77UnCompVram(gUnknown_085BEA88, dst1);
+ GetBg0TilesDst(&tilemap, &tileset);
+ CpuFill16(0, tilemap, 0x800);
+ LZ77UnCompVram(sGroudon_Tileset, tileset);
+ LZ77UnCompVram(sGroudon_Tilemap, tilemap);
task->tState++;
task->tData1 = 0;
@@ -3068,7 +3078,7 @@ static bool8 Phase2_Groudon_Func4(struct Task *task)
if (task->tData1 % 3 == 0)
{
u16 var = (task->tData1 % 30) / 3;
- LoadPalette(gUnknown_085BF0A0 + (var * 16), 0xF0, 0x20);
+ LoadPalette(sGroudon1_Palette + (var * 16), 0xF0, 0x20);
}
if (++task->tData1 > 58)
{
@@ -3084,7 +3094,7 @@ static bool8 Phase2_Groudon_Func5(struct Task *task)
if (task->tData1 % 5 == 0)
{
s16 var = task->tData1 / 5;
- LoadPalette(gUnknown_085BF2A0 + (var * 16), 0xF0, 0x20);
+ LoadPalette(sGroudon2_Palette + (var * 16), 0xF0, 0x20);
}
if (++task->tData1 > 68)
{
@@ -3103,20 +3113,20 @@ static void Phase2Task_Rayquaza(u8 taskId)
static bool8 Phase2_Rayquaza_Func3(struct Task *task)
{
- u16 *dst1, *dst2;
+ u16 *tilemap, *tileset;
u16 i;
- sub_8149F08();
+ InitTransitionStructVars();
ScanlineEffect_Clear();
SetGpuReg(REG_OFFSET_BG0CNT, 0x9A08);
- sub_8149F58(&dst1, &dst2);
- CpuFill16(0, dst1, 0x800);
- CpuCopy16(gUnknown_085BF6A0, dst2, 0x2000);
+ GetBg0TilesDst(&tilemap, &tileset);
+ CpuFill16(0, tilemap, 0x800);
+ CpuCopy16(sRayquaza_Tileset, tileset, 0x2000);
sTransitionStructPtr->field_20 = 0;
task->tState++;
- LoadPalette(gUnknown_085BF4A0 + 0x50, 0xF0, 0x20);
+ LoadPalette(sRayquaza_Palette + 0x50, 0xF0, 0x20);
for (i = 0; i < 160; i++)
{
@@ -3130,10 +3140,10 @@ static bool8 Phase2_Rayquaza_Func3(struct Task *task)
static bool8 Phase2_Rayquaza_Func4(struct Task *task)
{
- u16 *dst1, *dst2;
+ u16 *tilemap, *tileset;
- sub_8149F58(&dst1, &dst2);
- CpuCopy16(gUnknown_085C6BE0, dst1, 0x1000);
+ GetBg0TilesDst(&tilemap, &tileset);
+ CpuCopy16(sRayquaza_Tilemap, tilemap, 0x1000);
task->tState++;
return FALSE;
}
@@ -3143,7 +3153,7 @@ static bool8 Phase2_Rayquaza_Func5(struct Task *task)
if ((task->tData1 % 4) == 0)
{
u16 value = task->tData1 / 4;
- const u16 *palPtr = &gUnknown_085BF4A0[(value + 5) * 16];
+ const u16 *palPtr = &sRayquaza_Palette[(value + 5) * 16];
LoadPalette(palPtr, 0xF0, 0x20);
}
if (++task->tData1 > 40)
@@ -3192,7 +3202,7 @@ static bool8 Phase2_Rayquaza_Func9(struct Task *task)
if ((task->tData1 % 3) == 0)
{
u16 value = task->tData1 / 3;
- const u16 *palPtr = &gUnknown_085BF4A0[(value + 0) * 16];
+ const u16 *palPtr = &sRayquaza_Palette[(value + 0) * 16];
LoadPalette(palPtr, 0xF0, 0x20);
}
if (++task->tData1 >= 40)
@@ -3245,7 +3255,7 @@ static bool8 Phase2_WhiteFade_Func1(struct Task *task)
{
u16 i;
- sub_8149F08();
+ InitTransitionStructVars();
ScanlineEffect_Clear();
sTransitionStructPtr->BLDCNT = 0xBF;
@@ -3322,7 +3332,7 @@ static bool8 Phase2_WhiteFade_Func5(struct Task *task)
{
if (++sTransitionStructPtr->BLDY > 16)
{
- sub_8149F84();
+ FadeScreenBlack();
DestroyTask(FindTaskIdByFunc(Phase2Task_WhiteFade));
}
return FALSE;
@@ -3407,12 +3417,12 @@ static void Phase2Task_GridSquares(u8 taskId)
static bool8 Phase2_GridSquares_Func1(struct Task *task)
{
- u16 *dst1, *dst2;
+ u16 *tilemap, *tileset;
- sub_8149F58(&dst1, &dst2);
- CpuSet(sShrinkingBoxTileset, dst2, 0x10);
- CpuFill16(0xF000, dst1, 0x800);
- LoadPalette(gFieldEffectObjectPalette10, 0xF0, 0x20);
+ GetBg0TilesDst(&tilemap, &tileset);
+ CpuSet(sShrinkingBoxTileset, tileset, 0x10);
+ CpuFill16(0xF000, tilemap, 0x800);
+ LoadPalette(sFieldEffectPal_Pokeball, 0xF0, 0x20);
task->tState++;
return FALSE;
@@ -3420,14 +3430,14 @@ static bool8 Phase2_GridSquares_Func1(struct Task *task)
static bool8 Phase2_GridSquares_Func2(struct Task *task)
{
- u16* dst1;
+ u16* tileset;
if (task->tData1 == 0)
{
- sub_8149F40(&dst1);
+ GetBg0TilemapDst(&tileset);
task->tData1 = 3;
task->tData2++;
- CpuSet(sShrinkingBoxTileset + (task->tData2 * 8), dst1, 0x10);
+ CpuSet(sShrinkingBoxTileset + (task->tData2 * 8), tileset, 0x10);
if (task->tData2 > 0xD)
{
task->tState++;
@@ -3443,7 +3453,7 @@ static bool8 Phase2_GridSquares_Func3(struct Task *task)
{
if (--task->tData1 == 0)
{
- sub_8149F84();
+ FadeScreenBlack();
DestroyTask(FindTaskIdByFunc(Phase2Task_GridSquares));
}
return FALSE;
@@ -3458,7 +3468,7 @@ static bool8 Phase2_Shards_Func1(struct Task *task)
{
u16 i;
- sub_8149F08();
+ InitTransitionStructVars();
ScanlineEffect_Clear();
sTransitionStructPtr->WININ = 0x3F;
@@ -3540,7 +3550,7 @@ static bool8 Phase2_Shards_Func4(struct Task *task)
else
{
DmaStop(0);
- sub_8149F84();
+ FadeScreenBlack();
DestroyTask(FindTaskIdByFunc(Phase2Task_Shards));
return FALSE;
}
@@ -3553,8 +3563,8 @@ static bool8 Phase2_Shards_Func5(struct Task *task)
task->tState = 1;
return TRUE;
}
- else
- return FALSE;
+
+ return FALSE;
}
static void VBlankCB_Phase2_Shards(void)
@@ -3665,7 +3675,7 @@ static bool8 Phase1_TransitionAll_Func2(struct Task *task)
#undef tData6
#undef tData7
-static void sub_8149F08(void)
+static void InitTransitionStructVars(void)
{
memset(sTransitionStructPtr, 0, sizeof(*sTransitionStructPtr));
sub_8089C08(&sTransitionStructPtr->field_14, &sTransitionStructPtr->field_16);
@@ -3678,37 +3688,28 @@ static void VBlankCB_BattleTransition(void)
TransferPlttBuffer();
}
-static void sub_8149F40(u16 **a0)
+static void GetBg0TilemapDst(u16 **tileset)
{
- u16 reg, *vram;
-
- reg = REG_BG0CNT >> 2;
- reg <<= 0xE;
- vram = (u16*)(VRAM + reg);
-
- *a0 = vram;
+ u16 charBase = REG_BG0CNT >> 2;
+ charBase <<= 0xE;
+ *tileset = (u16*)(VRAM + charBase);
}
-void sub_8149F58(u16 **a0, u16 **a1)
+void GetBg0TilesDst(u16 **tilemap, u16 **tileset)
{
- u16 reg0, reg1, *vram0, *vram1;
-
- reg0 = REG_BG0CNT >> 8;
- reg1 = REG_BG0CNT >> 2;
-
- reg0 <<= 0xB;
- reg1 <<= 0xE;
+ u16 screenBase = REG_BG0CNT >> 8;
+ u16 charBase = REG_BG0CNT >> 2;
- vram0 = (u16*)(VRAM + reg0);
- *a0 = vram0;
+ screenBase <<= 0xB;
+ charBase <<= 0xE;
- vram1 = (u16*)(VRAM + reg1);
- *a1 = vram1;
+ *tilemap = (u16*)(VRAM + screenBase);
+ *tileset = (u16*)(VRAM + charBase);
}
-static void sub_8149F84(void)
+static void FadeScreenBlack(void)
{
- BlendPalettes(-1, 0x10, 0);
+ BlendPalettes(0xFFFFFFFF, 16, RGB_BLACK);
}
static void sub_8149F98(s16 *array, s16 sinAdd, s16 index, s16 indexIncrementer, s16 amplitude, s16 arrSize)
@@ -3849,47 +3850,47 @@ static bool8 sub_814A228(s16 *data, bool8 a1, bool8 a2)
#define tData6 data[6]
#define tData7 data[7]
-static bool8 Phase2_29_Func1(struct Task *task)
+static bool8 Phase2_FrontierLogoWiggle_Func1(struct Task *task)
{
- u16 *dst1, *dst2;
+ u16 *tilemap, *tileset;
sub_814669C(task);
- sub_8149F58(&dst1, &dst2);
- CpuFill16(0, dst1, 0x800);
- LZ77UnCompVram(gUnknown_085C7C00, dst2);
- LoadPalette(gUnknown_085C7BE0, 0xF0, 0x20);
+ GetBg0TilesDst(&tilemap, &tileset);
+ CpuFill16(0, tilemap, 0x800);
+ LZ77UnCompVram(sFrontierLogo_Tileset, tileset);
+ LoadPalette(sFrontierLogo_Palette, 0xF0, 0x20);
task->tState++;
return FALSE;
}
-static bool8 Phase2_29_Func2(struct Task *task)
+static bool8 Phase2_FrontierLogoWiggle_Func2(struct Task *task)
{
- u16 *dst1, *dst2;
+ u16 *tilemap, *tileset;
- sub_8149F58(&dst1, &dst2);
- LZ77UnCompVram(gUnknown_085C828C, dst1);
+ GetBg0TilesDst(&tilemap, &tileset);
+ LZ77UnCompVram(sFrontierLogo_Tilemap, tilemap);
sub_8149F98(gScanlineEffectRegBuffers[0], 0, task->tData4, 0x84, task->tData5, 160);
task->tState++;
return TRUE;
}
-static void Phase2Task_29(u8 taskId)
+static void Phase2Task_FrontierLogoWiggle(u8 taskId)
{
- while (sPhase2_29_Funcs[gTasks[taskId].tState](&gTasks[taskId]));
+ while (sPhase2_FrontierLogoWiggle_Funcs[gTasks[taskId].tState](&gTasks[taskId]));
}
-static void Phase2Task_30(u8 taskId)
+static void Phase2Task_FrontierLogoWave(u8 taskId)
{
- while (sPhase2_30_Funcs[gTasks[taskId].tState](&gTasks[taskId]));
+ while (sPhase2_FrontierLogoWave_Funcs[gTasks[taskId].tState](&gTasks[taskId]));
}
-static bool8 Phase2_30_Func1(struct Task *task)
+static bool8 Phase2_FrontierLogoWave_Func1(struct Task *task)
{
- u16 *dst1, *dst2;
+ u16 *tilemap, *tileset;
- sub_8149F08();
+ InitTransitionStructVars();
ScanlineEffect_Clear();
ClearGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_WIN0_ON | DISPCNT_WIN1_ON);
task->tData2 = 0x2000;
@@ -3901,28 +3902,28 @@ static bool8 Phase2_30_Func1(struct Task *task)
sTransitionStructPtr->BLDALPHA = (task->tData6 << 8) | (task->tData5);
REG_BLDCNT = sTransitionStructPtr->BLDCNT;
REG_BLDALPHA = sTransitionStructPtr->BLDALPHA;
- sub_8149F58(&dst1, &dst2);
- CpuFill16(0, dst1, 0x800);
- LZ77UnCompVram(gUnknown_085C7C00, dst2);
- LoadPalette(gUnknown_085C7BE0, 0xF0, 0x20);
+ GetBg0TilesDst(&tilemap, &tileset);
+ CpuFill16(0, tilemap, 0x800);
+ LZ77UnCompVram(sFrontierLogo_Tileset, tileset);
+ LoadPalette(sFrontierLogo_Palette, 0xF0, 0x20);
sTransitionStructPtr->field_16 = 0;
task->tState++;
return FALSE;
}
-static bool8 Phase2_30_Func2(struct Task *task)
+static bool8 Phase2_FrontierLogoWave_Func2(struct Task *task)
{
- u16 *dst1, *dst2;
+ u16 *tilemap, *tileset;
- sub_8149F58(&dst1, &dst2);
- LZ77UnCompVram(gUnknown_085C828C, dst1);
+ GetBg0TilesDst(&tilemap, &tileset);
+ LZ77UnCompVram(sFrontierLogo_Tilemap, tilemap);
task->tState++;
return TRUE;
}
-static bool8 Phase2_30_Func3(struct Task *task)
+static bool8 Phase2_FrontierLogoWave_Func3(struct Task *task)
{
u8 i;
@@ -3939,7 +3940,7 @@ static bool8 Phase2_30_Func3(struct Task *task)
return TRUE;
}
-static bool8 Phase2_30_Func4(struct Task *task)
+static bool8 Phase2_FrontierLogoWave_Func4(struct Task *task)
{
u8 i;
u16 var6, amplitude, var8;
@@ -3973,7 +3974,9 @@ static bool8 Phase2_30_Func4(struct Task *task)
for (i = 0; i < 160; i++, var6 += var8)
{
s16 index = var6 / 256;
- asm("");
+ #ifndef NONMATCHING
+ asm("");
+ #endif
gScanlineEffectRegBuffers[0][i] = sTransitionStructPtr->field_16 + Sin(index, amplitude);
}
@@ -3984,7 +3987,7 @@ static bool8 Phase2_30_Func4(struct Task *task)
}
if (task->tData4 != 0 && !gPaletteFade.active)
- DestroyTask(FindTaskIdByFunc(Phase2Task_30));
+ DestroyTask(FindTaskIdByFunc(Phase2Task_FrontierLogoWave));
task->tData7 -= 17;
sTransitionStructPtr->VBlank_DMA++;
@@ -4007,33 +4010,33 @@ static void HBlankCB_Phase2_30(void)
REG_BG0VOFS = var;
}
-static void Phase2Task_31(u8 taskId)
+static void Phase2Task_FrontierSquares(u8 taskId)
{
- while (sPhase2_31_Funcs[gTasks[taskId].tState](&gTasks[taskId]));
+ while (sPhase2_FrontierSquares_Funcs[gTasks[taskId].tState](&gTasks[taskId]));
}
-static void Phase2Task_33(u8 taskId)
+static void Phase2Task_FrontierSquaresSpiral(u8 taskId)
{
- while (sPhase2_33_Funcs[gTasks[taskId].tState](&gTasks[taskId]));
+ while (sPhase2_FrontierSquaresSpiral_Funcs[gTasks[taskId].tState](&gTasks[taskId]));
}
-static void Phase2Task_32(u8 taskId)
+static void Phase2Task_FrontierSquaresScroll(u8 taskId)
{
- while (sPhase2_32_Funcs[gTasks[taskId].tState](&gTasks[taskId]));
+ while (sPhase2_FrontierSquaresScroll_Funcs[gTasks[taskId].tState](&gTasks[taskId]));
}
-static bool8 Phase2_31_Func1(struct Task *task)
+static bool8 Phase2_FrontierSquares_Func1(struct Task *task)
{
- u16 *dst1, *dst2;
+ u16 *tilemap, *tileset;
- sub_8149F58(&dst1, &dst2);
- LZ77UnCompVram(gUnknown_085C8598, dst2);
+ GetBg0TilesDst(&tilemap, &tileset);
+ LZ77UnCompVram(sFrontierSquares_FilledBg_Tileset, tileset);
FillBgTilemapBufferRect_Palette0(0, 0, 0, 0, 0x20, 0x20);
FillBgTilemapBufferRect(0, 1, 0, 0, 1, 0x20, 0xF);
FillBgTilemapBufferRect(0, 1, 0x1D, 0, 1, 0x20, 0xF);
CopyBgTilemapBufferToVram(0);
- LoadPalette(gUnknown_085C8578, 0xF0, 0x20);
+ LoadPalette(sFrontierSquares_Palette, 0xF0, 0x20);
task->tData2 = 1;
task->tData3 = 0;
@@ -4044,9 +4047,9 @@ static bool8 Phase2_31_Func1(struct Task *task)
return FALSE;
}
-static bool8 Phase2_31_Func2(struct Task *task)
+static bool8 Phase2_FrontierSquares_Func2(struct Task *task)
{
- CopyRectToBgTilemapBufferRect(0, gUnknown_085C8928, 0, 0, 4, 4, task->tData2, task->tData3, 4, 4, 0xF, 0, 0);
+ CopyRectToBgTilemapBufferRect(0, sFrontierSquares_Tilemap, 0, 0, 4, 4, task->tData2, task->tData3, 4, 4, 0xF, 0, 0);
CopyBgTilemapBufferToVram(0);
task->tData2 += 4;
@@ -4062,12 +4065,12 @@ static bool8 Phase2_31_Func2(struct Task *task)
return FALSE;
}
-static bool8 Phase2_31_Func3(struct Task *task)
+static bool8 Phase2_FrontierSquares_Func3(struct Task *task)
{
u8 i;
- u16 *dst1, *dst2;
+ u16 *tilemap, *tileset;
- sub_8149F58(&dst1, &dst2);
+ GetBg0TilesDst(&tilemap, &tileset);
if (task->tData6++ >= task->tData7)
{
switch (task->tData5)
@@ -4081,13 +4084,13 @@ static bool8 Phase2_31_Func3(struct Task *task)
break;
case 1:
BlendPalettes(0xFFFF7FFF, 0x10, 0);
- LZ77UnCompVram(gUnknown_085C86F4, dst2);
+ LZ77UnCompVram(sFrontierSquares_EmptyBg_Tileset, tileset);
break;
case 2:
- LZ77UnCompVram(gUnknown_085C87F4, dst2);
+ LZ77UnCompVram(sFrontierSquares_Shrink1_Tileset, tileset);
break;
case 3:
- LZ77UnCompVram(gUnknown_085C88A4, dst2);
+ LZ77UnCompVram(sFrontierSquares_Shrink2_Tileset, tileset);
break;
default:
FillBgTilemapBufferRect_Palette0(0, 1, 0, 0, 0x20, 0x20);
@@ -4103,19 +4106,19 @@ static bool8 Phase2_31_Func3(struct Task *task)
return FALSE;
}
-static bool8 Phase2_33_Func1(struct Task *task)
+static bool8 Phase2_FrontierSquaresSpiral_Func1(struct Task *task)
{
- u16 *dst1, *dst2;
+ u16 *tilemap, *tileset;
- sub_8149F58(&dst1, &dst2);
- LZ77UnCompVram(gUnknown_085C8598, dst2);
+ GetBg0TilesDst(&tilemap, &tileset);
+ LZ77UnCompVram(sFrontierSquares_FilledBg_Tileset, tileset);
FillBgTilemapBufferRect_Palette0(0, 0, 0, 0, 0x20, 0x20);
FillBgTilemapBufferRect(0, 1, 0, 0, 1, 0x20, 0xF);
FillBgTilemapBufferRect(0, 1, 0x1D, 0, 1, 0x20, 0xF);
CopyBgTilemapBufferToVram(0);
- LoadPalette(gUnknown_085C8578, 0xE0, 0x20);
- LoadPalette(gUnknown_085C8578, 0xF0, 0x20);
+ LoadPalette(sFrontierSquares_Palette, 0xE0, 0x20);
+ LoadPalette(sFrontierSquares_Palette, 0xF0, 0x20);
BlendPalette(0xE0, 0x10, 8, 0);
task->tData2 = 34;
@@ -4125,12 +4128,12 @@ static bool8 Phase2_33_Func1(struct Task *task)
return FALSE;
}
-static bool8 Phase2_33_Func2(struct Task *task)
+static bool8 Phase2_FrontierSquaresSpiral_Func2(struct Task *task)
{
u8 var = gUnknown_085C9A30[task->tData2];
u8 varMod = var % 7;
u8 varDiv = var / 7;
- CopyRectToBgTilemapBufferRect(0, &gUnknown_085C8928, 0, 0, 4, 4, 4 * varMod + 1, 4 * varDiv, 4, 4, 0xF, 0, 0);
+ CopyRectToBgTilemapBufferRect(0, &sFrontierSquares_Tilemap, 0, 0, 4, 4, 4 * varMod + 1, 4 * varDiv, 4, 4, 0xF, 0, 0);
CopyBgTilemapBufferToVram(0);
if (--task->tData2 < 0)
@@ -4138,7 +4141,7 @@ static bool8 Phase2_33_Func2(struct Task *task)
return FALSE;
}
-static bool8 Phase2_33_Func3(struct Task *task)
+static bool8 Phase2_FrontierSquaresSpiral_Func3(struct Task *task)
{
BlendPalette(0xE0, 0x10, 3, 0);
BlendPalettes(0xFFFF3FFF, 0x10, 0);
@@ -4150,13 +4153,13 @@ static bool8 Phase2_33_Func3(struct Task *task)
return FALSE;
}
-static bool8 Phase2_33_Func4(struct Task *task)
+static bool8 Phase2_FrontierSquaresSpiral_Func4(struct Task *task)
{
if ((task->tData3 ^= 1))
{
CopyRectToBgTilemapBufferRect(
0,
- gUnknown_085C8928,
+ sFrontierSquares_Tilemap,
0,
0,
4,
@@ -4193,7 +4196,7 @@ static bool8 Phase2_33_Func4(struct Task *task)
return FALSE;
}
-static bool8 Phase2_31_33_Func5(struct Task *task)
+static bool8 Phase2_FrontierSquares_End(struct Task *task)
{
FillBgTilemapBufferRect_Palette0(0, 1, 0, 0, 0x20, 0x20);
CopyBgTilemapBufferToVram(0);
@@ -4218,16 +4221,16 @@ static void sub_814ABE4(u8 taskId)
}
}
-static bool8 Phase2_32_Func1(struct Task *task)
+static bool8 Phase2_FrontierSquaresScroll_Func1(struct Task *task)
{
u8 taskId = 0;
- u16 *dst1, *dst2;
+ u16 *tilemap, *tileset;
- sub_8149F58(&dst1, &dst2);
- LZ77UnCompVram(gUnknown_085C8598, dst2);
+ GetBg0TilesDst(&tilemap, &tileset);
+ LZ77UnCompVram(sFrontierSquares_FilledBg_Tileset, tileset);
FillBgTilemapBufferRect_Palette0(0, 0, 0, 0, 0x20, 0x20);
CopyBgTilemapBufferToVram(0);
- LoadPalette(gUnknown_085C8578, 0xF0, 0x20);
+ LoadPalette(sFrontierSquares_Palette, 0xF0, 0x20);
gBattle_BG0_X = 0;
gBattle_BG0_Y = 0;
@@ -4260,7 +4263,7 @@ static bool8 Phase2_32_Func1(struct Task *task)
return FALSE;
}
-static bool8 Phase2_32_Func2(struct Task *task)
+static bool8 Phase2_FrontierSquaresScroll_Func2(struct Task *task)
{
u8 var = gUnknown_085C9A53[task->tData2];
u8 varDiv = var / 8;
@@ -4268,7 +4271,7 @@ static bool8 Phase2_32_Func2(struct Task *task)
CopyRectToBgTilemapBufferRect(
0,
- &gUnknown_085C8928,
+ &sFrontierSquares_Tilemap,
0,
0,
4,
@@ -4287,7 +4290,7 @@ static bool8 Phase2_32_Func2(struct Task *task)
return 0;
}
-static bool8 Phase2_32_Func3(struct Task *task)
+static bool8 Phase2_FrontierSquaresScroll_Func3(struct Task *task)
{
BlendPalettes(0xFFFF7FFF, 0x10, 0);
@@ -4297,7 +4300,7 @@ static bool8 Phase2_32_Func3(struct Task *task)
return FALSE;
}
-static bool8 Phase2_32_Func4(struct Task *task)
+static bool8 Phase2_FrontierSquaresScroll_Func4(struct Task *task)
{
u8 var = gUnknown_085C9A53[task->tData2];
u8 varDiv = var / 8;
@@ -4319,7 +4322,7 @@ static bool8 Phase2_32_Func4(struct Task *task)
#undef tSub32_Y_delta
#undef tSub32_Bool
-static bool8 Phase2_32_Func5(struct Task *task)
+static bool8 Phase2_FrontierSquaresScroll_Func5(struct Task *task)
{
gBattle_BG0_X = 0;
gBattle_BG0_Y = 0;
diff --git a/src/battle_transition_frontier.c b/src/battle_transition_frontier.c
new file mode 100644
index 000000000..931de5e44
--- /dev/null
+++ b/src/battle_transition_frontier.c
@@ -0,0 +1,650 @@
+#include "global.h"
+#include "sprite.h"
+#include "decompress.h"
+#include "battle_transition_frontier.h"
+#include "battle_transition.h"
+#include "task.h"
+#include "palette.h"
+#include "trig.h"
+#include "bg.h"
+#include "gpu_regs.h"
+#include "constants/rgb.h"
+
+/*
+ There are 3 "categories" of Battle Frontier transition
+ 1. The full logo is used (B_TRANSITION_FRONTIER_LOGO_*)
+ 2. Small squares with the logo on it are used (B_TRANSITION_FRONTIER_SQUARES_*)
+ 3. The balls that make up the logo come together to form the full logo (B_TRANSITION_FRONTIER_CIRCLES_*)
+
+ This file handles category 3. Functions for the other two are handled in battle_transition.c
+*/
+
+typedef bool8 (*TransitionStateFunc)(struct Task *task);
+
+// this file's functions
+static void SpriteCB_LogoCircleSlide(struct Sprite *sprite);
+static void SpriteCB_LogoCircleSpiral(struct Sprite *sprite);
+static bool8 WaitForLogoCirclesAnim(struct Task *task);
+static bool8 FadeInCenterLogoCircle(struct Task *task);
+static bool8 Circles_Init(struct Task *task);
+static bool8 CirclesMeet_CreateSprites(struct Task *task);
+static bool8 CirclesMeet_End(struct Task *task);
+static bool8 CirclesCross_CreateSprites(struct Task *task);
+static bool8 CirclesCross_End(struct Task *task);
+static bool8 CirclesAsymmetricSpiral_CreateSprites(struct Task *task);
+static bool8 CirclesAsymmetricSpiral_End(struct Task *task);
+static bool8 CirclesSymmetricSpiral_CreateSprites(struct Task *task);
+static bool8 CirclesSymmetricSpiral_End(struct Task *task);
+static bool8 CirclesMeetInSeq_CreateSprites(struct Task *task);
+static bool8 CirclesMeetInSeq_End(struct Task *task);
+static bool8 CirclesCrossInSeq_CreateSprites(struct Task *task);
+static bool8 CirclesCrossInSeq_End(struct Task *task);
+static bool8 CirclesAsymmetricSpiralInSeq_CreateSprites(struct Task *task);
+static bool8 CirclesAsymmetricSpiralInSeq_End(struct Task *task);
+static bool8 CirclesSymmetricSpiralInSeq_CreateSprites(struct Task *task);
+static bool8 CirclesSymmetricSpiralInSeq_End(struct Task *task);
+
+#define PALTAG_LOGO_CIRCLES 0x2E90
+
+// const rom data
+static const u32 sLogoCenter_Gfx[] = INCBIN_U32("graphics/battle_transitions/frontier_logo_center.4bpp.lz");
+static const u32 sLogoCenter_Tilemap[] = INCBIN_U32("graphics/battle_transitions/frontier_logo_center.bin");
+static const u32 sLogoCircles_Gfx[] = INCBIN_U32("graphics/battle_transitions/frontier_logo_circles.4bpp.lz");
+static const u16 sLogo_Pal[] = INCBIN_U16("graphics/battle_transitions/frontier_logo_circles.gbapal");
+
+// Unused Empty data.
+static const u8 sFiller[0x1C0] = {0};
+
+static const struct OamData sOamData_LogoCircles =
+{
+ .y = 0,
+ .affineMode = ST_OAM_AFFINE_OFF,
+ .objMode = ST_OAM_OBJ_NORMAL,
+ .mosaic = 0,
+ .bpp = ST_OAM_4BPP,
+ .shape = SPRITE_SHAPE(64x64),
+ .x = 0,
+ .matrixNum = 0,
+ .size = SPRITE_SIZE(64x64),
+ .tileNum = 0,
+ .priority = 1,
+ .paletteNum = 0,
+ .affineParam = 0
+};
+
+static const struct CompressedSpriteSheet sSpriteSheet_LogoCircles =
+{
+ .data = sLogoCircles_Gfx,
+ .size = 0x1800,
+ .tag = PALTAG_LOGO_CIRCLES
+};
+
+static const struct SpritePalette sSpritePalette_LogoCircles =
+{
+ .data = sLogo_Pal,
+ .tag = PALTAG_LOGO_CIRCLES
+};
+
+static const union AnimCmd sAnim_LogoCircle_Top[] =
+{
+ ANIMCMD_FRAME(0, 1),
+ ANIMCMD_END
+};
+
+static const union AnimCmd sAnim_LogoCircle_Left[] =
+{
+ ANIMCMD_FRAME(64, 1),
+ ANIMCMD_END
+};
+
+static const union AnimCmd sAnim_LogoCircle_Right[] =
+{
+ ANIMCMD_FRAME(128, 1),
+ ANIMCMD_END
+};
+
+static const union AnimCmd *const sAnimTable_LogoCircles[] =
+{
+ sAnim_LogoCircle_Top,
+ sAnim_LogoCircle_Left,
+ sAnim_LogoCircle_Right
+};
+
+static const struct SpriteTemplate sSpriteTemplate_LogoCircles =
+{
+ .tileTag = PALTAG_LOGO_CIRCLES,
+ .paletteTag = PALTAG_LOGO_CIRCLES,
+ .oam = &sOamData_LogoCircles,
+ .anims = sAnimTable_LogoCircles,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = SpriteCallbackDummy,
+};
+
+static const TransitionStateFunc sPhase2_FrontierCirclesMeet_Funcs[] =
+{
+ Circles_Init,
+ CirclesMeet_CreateSprites,
+ WaitForLogoCirclesAnim,
+ FadeInCenterLogoCircle,
+ CirclesMeet_End
+};
+
+static const TransitionStateFunc sPhase2_FrontierCirclesCross_Funcs[] =
+{
+ Circles_Init,
+ CirclesCross_CreateSprites,
+ WaitForLogoCirclesAnim,
+ FadeInCenterLogoCircle,
+ CirclesCross_End
+};
+
+static const TransitionStateFunc sPhase2_FrontierCirclesAsymmetricSpiral_Funcs[] =
+{
+ Circles_Init,
+ CirclesAsymmetricSpiral_CreateSprites,
+ WaitForLogoCirclesAnim,
+ FadeInCenterLogoCircle,
+ CirclesAsymmetricSpiral_End
+};
+
+static const TransitionStateFunc sPhase2_FrontierCirclesSymmetricSpiral_Funcs[] =
+{
+ Circles_Init,
+ CirclesSymmetricSpiral_CreateSprites,
+ WaitForLogoCirclesAnim,
+ FadeInCenterLogoCircle,
+ CirclesSymmetricSpiral_End
+};
+
+static const TransitionStateFunc sPhase2_FrontierCirclesMeetInSeq_Funcs[] =
+{
+ Circles_Init,
+ CirclesMeetInSeq_CreateSprites,
+ WaitForLogoCirclesAnim,
+ FadeInCenterLogoCircle,
+ CirclesMeetInSeq_End
+};
+
+static const TransitionStateFunc sPhase2_FrontierCirclesCrossInSeq_Funcs[] =
+{
+ Circles_Init,
+ CirclesCrossInSeq_CreateSprites,
+ WaitForLogoCirclesAnim,
+ FadeInCenterLogoCircle,
+ CirclesCrossInSeq_End
+};
+
+static const TransitionStateFunc sPhase2_FrontierCirclesAsymmetricSpiralInSeq_Funcs[] =
+{
+ Circles_Init,
+ CirclesAsymmetricSpiralInSeq_CreateSprites,
+ WaitForLogoCirclesAnim,
+ FadeInCenterLogoCircle,
+ CirclesAsymmetricSpiralInSeq_End
+};
+
+static const TransitionStateFunc sPhase2_FrontierCirclesSymmetricSpiralInSeq_Funcs[] =
+{
+ Circles_Init,
+ CirclesSymmetricSpiralInSeq_CreateSprites,
+ WaitForLogoCirclesAnim,
+ FadeInCenterLogoCircle,
+ CirclesSymmetricSpiralInSeq_End
+};
+
+// code
+static void LoadLogoGfx(void)
+{
+ u16 *dst1, *dst2;
+
+ GetBg0TilesDst(&dst1, &dst2);
+ LZ77UnCompVram(sLogoCenter_Gfx, dst2);
+ LZ77UnCompVram(sLogoCenter_Tilemap, dst1);
+ LoadPalette(sLogo_Pal, 0xF0, 0x20);
+ LoadCompressedSpriteSheet(&sSpriteSheet_LogoCircles);
+ LoadSpritePalette(&sSpritePalette_LogoCircles);
+}
+
+static u8 CreateSlidingLogoCircleSprite(s16 x, s16 y, u8 arg2, u8 arg3, s8 arg4, s8 arg5, u8 spriteAnimNum)
+{
+ u8 spriteId = CreateSprite(&sSpriteTemplate_LogoCircles, x, y, 0);
+
+ switch (spriteAnimNum)
+ {
+ case 0:
+ gSprites[spriteId].data[0] = 120;
+ gSprites[spriteId].data[1] = 45;
+ break;
+ case 1:
+ gSprites[spriteId].data[0] = 89;
+ gSprites[spriteId].data[1] = 97;
+ break;
+ case 2:
+ gSprites[spriteId].data[0] = 151;
+ gSprites[spriteId].data[1] = 97;
+ break;
+ }
+
+ gSprites[spriteId].data[2] = arg4;
+ gSprites[spriteId].data[3] = arg5;
+ gSprites[spriteId].data[6] = arg2;
+ gSprites[spriteId].data[7] = arg3;
+ gSprites[spriteId].data[4] = 0;
+ gSprites[spriteId].data[5] = 0;
+
+ StartSpriteAnim(&gSprites[spriteId], spriteAnimNum);
+ gSprites[spriteId].callback = SpriteCB_LogoCircleSlide;
+
+ return spriteId;
+}
+
+static void SpriteCB_LogoCircleSlide(struct Sprite *sprite)
+{
+ s16 *data = sprite->data;
+
+ if (sprite->pos1.x == data[0] && sprite->pos1.y == data[1])
+ {
+ sprite->callback = SpriteCallbackDummy;
+ }
+ else
+ {
+ if (data[4] == data[6])
+ {
+ sprite->pos1.x += data[2];
+ data[4] = 0;
+ }
+ else
+ {
+ data[4]++;
+ }
+
+ if (data[5] == data[7])
+ {
+ sprite->pos1.y += data[3];
+ data[5] = 0;
+ }
+ else
+ {
+ data[5]++;
+ }
+ }
+}
+
+static u8 CreateSpiralingLogoCircleSprite(s16 x, s16 y, s16 arg2, s16 arg3, s16 arg4, s16 arg5, s16 arg6, u8 spriteAnimNum)
+{
+ u8 spriteId = CreateSprite(&sSpriteTemplate_LogoCircles, x, y, 0);
+
+ switch (spriteAnimNum)
+ {
+ case 0:
+ gSprites[spriteId].data[0] = 120;
+ gSprites[spriteId].data[1] = 45;
+ break;
+ case 1:
+ gSprites[spriteId].data[0] = 89;
+ gSprites[spriteId].data[1] = 97;
+ break;
+ case 2:
+ gSprites[spriteId].data[0] = 151;
+ gSprites[spriteId].data[1] = 97;
+ break;
+ }
+
+ gSprites[spriteId].data[2] = arg2;
+ gSprites[spriteId].data[3] = arg3;
+ gSprites[spriteId].data[4] = arg4;
+ gSprites[spriteId].data[5] = arg5;
+ gSprites[spriteId].data[6] = arg6;
+
+ StartSpriteAnim(&gSprites[spriteId], spriteAnimNum);
+ gSprites[spriteId].callback = SpriteCB_LogoCircleSpiral;
+
+ return spriteId;
+}
+
+static void SpriteCB_LogoCircleSpiral(struct Sprite *sprite)
+{
+ sprite->pos2.x = (Sin2(sprite->data[2]) * sprite->data[4]) >> 12; // div by 4096
+ sprite->pos2.y = (Cos2(sprite->data[2]) * sprite->data[4]) >> 12; // div by 4096
+
+ sprite->data[2] = (sprite->data[2] + sprite->data[3]) % 360;
+
+ if (sprite->data[4] != sprite->data[5])
+ sprite->data[4] += sprite->data[6];
+ else
+ sprite->callback = SpriteCallbackDummy;
+}
+
+#define tState data[0]
+
+static void DestroyLogoCirclesGfx(struct Task *task)
+{
+ FreeSpriteTilesByTag(PALTAG_LOGO_CIRCLES);
+ FreeSpritePaletteByTag(PALTAG_LOGO_CIRCLES);
+
+ DestroySprite(&gSprites[task->data[4]]);
+ DestroySprite(&gSprites[task->data[5]]);
+ DestroySprite(&gSprites[task->data[6]]);
+}
+
+static bool8 IsLogoCirclesAnimFinished(struct Task *task)
+{
+ if (gSprites[task->data[4]].callback == SpriteCallbackDummy
+ && gSprites[task->data[5]].callback == SpriteCallbackDummy
+ && gSprites[task->data[6]].callback == SpriteCallbackDummy)
+ return TRUE;
+ else
+ return FALSE;
+}
+
+static bool8 Circles_Init(struct Task *task)
+{
+ if (task->data[1] == 0)
+ {
+ ClearGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_WIN0_ON);
+ ClearGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_WIN1_ON);
+ ClearGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_BG0_ON);
+
+ task->data[1]++;
+ return FALSE;
+ }
+ else
+ {
+ LoadLogoGfx();
+ SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT1_BG0 | BLDCNT_EFFECT_BLEND | BLDCNT_TGT2_ALL);
+ SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(0, 16));
+ ChangeBgX(0, 0, 0);
+ ChangeBgY(0, 0, 0);
+ ChangeBgY(0, 0x500, 2);
+
+ task->data[1] = 0;
+ task->tState++;
+ return TRUE;
+ }
+}
+
+static bool8 FadeInCenterLogoCircle(struct Task *task)
+{
+ if (task->data[2] == 0)
+ SetGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_BG0_ON);
+
+ if (task->data[2] == 16)
+ {
+ if (task->data[3] == 31)
+ {
+ BeginNormalPaletteFade(0xFFFFFFFF, -1, 0, 0x10, RGB_BLACK);
+ task->tState++;
+ }
+ else
+ {
+ task->data[3]++;
+ }
+ }
+ else
+ {
+ u16 blnd;
+
+ task->data[2]++;
+ blnd = task->data[2];
+ SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(blnd, 16 - blnd));
+ }
+
+ return FALSE;
+}
+
+static bool8 WaitForLogoCirclesAnim(struct Task *task)
+{
+ if (IsLogoCirclesAnimFinished(task) == TRUE)
+ task->tState++;
+
+ return FALSE;
+}
+
+void Phase2Task_FrontierCirclesMeet(u8 taskId)
+{
+ while (sPhase2_FrontierCirclesMeet_Funcs[gTasks[taskId].tState](&gTasks[taskId]));
+}
+
+static bool8 CirclesMeet_CreateSprites(struct Task *task)
+{
+ task->data[4] = CreateSlidingLogoCircleSprite(120, -51, 0, 0, 0, 2, 0);
+ task->data[5] = CreateSlidingLogoCircleSprite(-7, 193, 0, 0, 2, -2, 1);
+ task->data[6] = CreateSlidingLogoCircleSprite(247, 193, 0, 0, -2, -2, 2);
+
+ task->tState++;
+ return FALSE;
+}
+
+static bool8 CirclesMeet_End(struct Task *task)
+{
+ if (!gPaletteFade.active)
+ {
+ DestroyLogoCirclesGfx(task);
+ DestroyTask(FindTaskIdByFunc(Phase2Task_FrontierCirclesMeet));
+ }
+
+ return FALSE;
+}
+
+void Phase2Task_FrontierCirclesCross(u8 taskId)
+{
+ while (sPhase2_FrontierCirclesCross_Funcs[gTasks[taskId].tState](&gTasks[taskId]));
+}
+
+static bool8 CirclesCross_CreateSprites(struct Task *task)
+{
+ task->data[4] = CreateSlidingLogoCircleSprite(120, 197, 0, 0, 0, -4, 0);
+ task->data[5] = CreateSlidingLogoCircleSprite(241, 59, 0, 1, -4, 2, 1);
+ task->data[6] = CreateSlidingLogoCircleSprite(-1, 59, 0, 1, 4, 2, 2);
+
+ task->tState++;
+ return FALSE;
+}
+
+static bool8 CirclesCross_End(struct Task *task)
+{
+ if (!gPaletteFade.active)
+ {
+ DestroyLogoCirclesGfx(task);
+ DestroyTask(FindTaskIdByFunc(Phase2Task_FrontierCirclesCross));
+ }
+
+ return FALSE;
+}
+
+void Phase2Task_FrontierCirclesAsymmetricSpiral(u8 taskId)
+{
+ while (sPhase2_FrontierCirclesAsymmetricSpiral_Funcs[gTasks[taskId].tState](&gTasks[taskId]));
+}
+
+static bool8 CirclesAsymmetricSpiral_CreateSprites(struct Task *task)
+{
+ task->data[4] = CreateSpiralingLogoCircleSprite(120, 45, 12, 4, 128, 0, -4, 0);
+ task->data[5] = CreateSpiralingLogoCircleSprite(89, 97, 252, 4, 128, 0, -4, 1);
+ task->data[6] = CreateSpiralingLogoCircleSprite(151, 97, 132, 4, 128, 0, -4, 2);
+
+ task->tState++;
+ return FALSE;
+}
+
+static bool8 CirclesAsymmetricSpiral_End(struct Task *task)
+{
+ if (!gPaletteFade.active)
+ {
+ DestroyLogoCirclesGfx(task);
+ DestroyTask(FindTaskIdByFunc(Phase2Task_FrontierCirclesAsymmetricSpiral));
+ }
+
+ return FALSE;
+}
+
+void Phase2Task_FrontierCirclesSymmetricSpiral(u8 taskId)
+{
+ while (sPhase2_FrontierCirclesSymmetricSpiral_Funcs[gTasks[taskId].tState](&gTasks[taskId]));
+}
+
+static bool8 CirclesSymmetricSpiral_CreateSprites(struct Task *task)
+{
+ task->data[4] = CreateSpiralingLogoCircleSprite(120, 80, 284, 8, 131, 35, -3, 0);
+ task->data[5] = CreateSpiralingLogoCircleSprite(120, 80, 44, 8, 131, 35, -3, 1);
+ task->data[6] = CreateSpiralingLogoCircleSprite(121, 80, 164, 8, 131, 35, -3, 2);
+
+ task->tState++;
+ return FALSE;
+}
+
+static bool8 CirclesSymmetricSpiral_End(struct Task *task)
+{
+ if (!gPaletteFade.active)
+ {
+ DestroyLogoCirclesGfx(task);
+ DestroyTask(FindTaskIdByFunc(Phase2Task_FrontierCirclesSymmetricSpiral));
+ }
+
+ return FALSE;
+}
+
+void Phase2Task_FrontierCirclesMeetInSeq(u8 taskId)
+{
+ while (sPhase2_FrontierCirclesMeetInSeq_Funcs[gTasks[taskId].tState](&gTasks[taskId]));
+}
+
+static bool8 CirclesMeetInSeq_CreateSprites(struct Task *task)
+{
+ if (task->data[1] == 0)
+ {
+ task->data[4] = CreateSlidingLogoCircleSprite(120, -51, 0, 0, 0, 4, 0);
+ }
+ else if (task->data[1] == 16)
+ {
+ task->data[5] = CreateSlidingLogoCircleSprite(-7, 193, 0, 0, 4, -4, 1);
+ }
+ else if (task->data[1] == 32)
+ {
+ task->data[6] = CreateSlidingLogoCircleSprite(247, 193, 0, 0, -4, -4, 2);
+ task->tState++;
+ }
+
+ task->data[1]++;
+ return FALSE;
+}
+
+static bool8 CirclesMeetInSeq_End(struct Task *task)
+{
+ if (!gPaletteFade.active)
+ {
+ DestroyLogoCirclesGfx(task);
+ DestroyTask(FindTaskIdByFunc(Phase2Task_FrontierCirclesMeetInSeq));
+ }
+
+ return FALSE;
+}
+
+void Phase2Task_FrontierCirclesCrossInSeq(u8 taskId)
+{
+ while (sPhase2_FrontierCirclesCrossInSeq_Funcs[gTasks[taskId].tState](&gTasks[taskId]));
+}
+
+static bool8 CirclesCrossInSeq_CreateSprites(struct Task *task)
+{
+ if (task->data[1] == 0)
+ {
+ task->data[4] = CreateSlidingLogoCircleSprite(120, 197, 0, 0, 0, -8, 0);
+ }
+ else if (task->data[1] == 16)
+ {
+ task->data[5] = CreateSlidingLogoCircleSprite(241, 78, 0, 0, -8, 1, 1);
+ }
+ else if (task->data[1] == 32)
+ {
+ task->data[6] = CreateSlidingLogoCircleSprite(-1, 78, 0, 0, 8, 1, 2);
+ task->tState++;
+ }
+
+ task->data[1]++;
+ return FALSE;
+}
+
+static bool8 CirclesCrossInSeq_End(struct Task *task)
+{
+ if (!gPaletteFade.active)
+ {
+ DestroyLogoCirclesGfx(task);
+ DestroyTask(FindTaskIdByFunc(Phase2Task_FrontierCirclesCrossInSeq));
+ }
+
+ return FALSE;
+}
+
+void Phase2Task_FrontierCirclesAsymmetricSpiralInSeq(u8 taskId)
+{
+ while (sPhase2_FrontierCirclesAsymmetricSpiralInSeq_Funcs[gTasks[taskId].tState](&gTasks[taskId]));
+}
+
+static bool8 CirclesAsymmetricSpiralInSeq_CreateSprites(struct Task *task)
+{
+ if (task->data[1] == 0)
+ {
+ task->data[4] = CreateSpiralingLogoCircleSprite(120, 45, 12, 4, 128, 0, -4, 0);
+ }
+ else if (task->data[1] == 16)
+ {
+ task->data[5] = CreateSpiralingLogoCircleSprite(89, 97, 252, 4, 128, 0, -4, 1);
+ }
+ else if (task->data[1] == 32)
+ {
+ task->data[6] = CreateSpiralingLogoCircleSprite(151, 97, 132, 4, 128, 0, -4, 2);
+ task->tState++;
+ }
+
+ task->data[1]++;
+ return FALSE;
+}
+
+static bool8 CirclesAsymmetricSpiralInSeq_End(struct Task *task)
+{
+ if (!gPaletteFade.active)
+ {
+ DestroyLogoCirclesGfx(task);
+ DestroyTask(FindTaskIdByFunc(Phase2Task_FrontierCirclesAsymmetricSpiralInSeq));
+ }
+
+ return FALSE;
+}
+
+void Phase2Task_FrontierCirclesSymmetricSpiralInSeq(u8 taskId)
+{
+ while (sPhase2_FrontierCirclesSymmetricSpiralInSeq_Funcs[gTasks[taskId].tState](&gTasks[taskId]));
+}
+
+static bool8 CirclesSymmetricSpiralInSeq_CreateSprites(struct Task *task)
+{
+ if (task->data[1] == 0)
+ {
+ task->data[4] = CreateSpiralingLogoCircleSprite(120, 80, 284, 8, 131, 35, -3, 0);
+ }
+ else if (task->data[1] == 16)
+ {
+ task->data[5] = CreateSpiralingLogoCircleSprite(120, 80, 44, 8, 131, 35, -3, 1);
+ }
+ else if (task->data[1] == 32)
+ {
+ task->data[6] = CreateSpiralingLogoCircleSprite(121, 80, 164, 8, 131, 35, -3, 2);
+ task->tState++;
+ }
+
+ task->data[1]++;
+ return FALSE;
+}
+
+static bool8 CirclesSymmetricSpiralInSeq_End(struct Task *task)
+{
+ if (!gPaletteFade.active)
+ {
+ DestroyLogoCirclesGfx(task);
+ DestroyTask(FindTaskIdByFunc(Phase2Task_FrontierCirclesSymmetricSpiralInSeq));
+ }
+
+ return FALSE;
+}
diff --git a/src/battle_tv.c b/src/battle_tv.c
index 26df08786..c84ae827b 100644
--- a/src/battle_tv.c
+++ b/src/battle_tv.c
@@ -1398,9 +1398,9 @@ static void TrySetBattleSeminarShow(void)
return;
else if (GetBattlerSide(gBattlerAttacker) == B_SIDE_OPPONENT)
return;
- else if (gBattleMons[gBattlerAttacker].statStages[STAT_ACC] <= 5)
+ else if (gBattleMons[gBattlerAttacker].statStages[STAT_ACC] < DEFAULT_STAT_STAGE)
return;
- else if (gBattleMons[gBattlerTarget].statStages[STAT_EVASION] > 6)
+ else if (gBattleMons[gBattlerTarget].statStages[STAT_EVASION] > DEFAULT_STAT_STAGE)
return;
else if (gCurrentMove == MOVE_HIDDEN_POWER || gCurrentMove == MOVE_WEATHER_BALL)
return;
diff --git a/src/battle_util.c b/src/battle_util.c
index da3d50648..699fd05bc 100644
--- a/src/battle_util.c
+++ b/src/battle_util.c
@@ -259,7 +259,7 @@ void ResetSentPokesToOpponentValue(void)
gSentPokesToOpponent[(i & BIT_FLANK) >> 1] = bits;
}
-void sub_803F9EC(u8 battler)
+void OpponentSwitchInResetSentPokesToOpponentValue(u8 battler)
{
s32 i = 0;
u32 bits = 0;
@@ -279,11 +279,11 @@ void sub_803F9EC(u8 battler)
}
}
-void sub_803FA70(u8 battler)
+void UpdateSentPokesToOpponentValue(u8 battler)
{
if (GetBattlerSide(battler) == B_SIDE_OPPONENT)
{
- sub_803F9EC(battler);
+ OpponentSwitchInResetSentPokesToOpponentValue(battler);
}
else
{
@@ -864,9 +864,9 @@ u8 DoBattlerEndTurnEffects(void)
gBattleMoveDamage = gBattleMons[gActiveBattler].maxHP / 16;
if (gBattleMoveDamage == 0)
gBattleMoveDamage = 1;
- if ((gBattleMons[gActiveBattler].status1 & 0xF00) != 0xF00) // not 16 turns
- gBattleMons[gActiveBattler].status1 += 0x100;
- gBattleMoveDamage *= (gBattleMons[gActiveBattler].status1 & 0xF00) >> 8;
+ if ((gBattleMons[gActiveBattler].status1 & STATUS1_TOXIC_COUNTER) != STATUS1_TOXIC_TURN(15)) // not 16 turns
+ gBattleMons[gActiveBattler].status1 += STATUS1_TOXIC_TURN(1);
+ gBattleMoveDamage *= (gBattleMons[gActiveBattler].status1 & STATUS1_TOXIC_COUNTER) >> 8;
BattleScriptExecute(BattleScript_PoisonTurnDmg);
effect++;
}
@@ -917,7 +917,7 @@ u8 DoBattlerEndTurnEffects(void)
case ENDTURN_WRAP: // wrap
if ((gBattleMons[gActiveBattler].status2 & STATUS2_WRAPPED) && gBattleMons[gActiveBattler].hp != 0)
{
- gBattleMons[gActiveBattler].status2 -= 0x2000;
+ gBattleMons[gActiveBattler].status2 -= STATUS2_WRAPPED_TURN(1);
if (gBattleMons[gActiveBattler].status2 & STATUS2_WRAPPED) // damaged by wrap
{
// This is the only way I could get this array access to match.
@@ -973,7 +973,7 @@ u8 DoBattlerEndTurnEffects(void)
else
{
gBattlerAttacker = gActiveBattler;
- gBattleMons[gActiveBattler].status2 -= 0x10; // uproar timer goes down
+ gBattleMons[gActiveBattler].status2 -= STATUS2_UPROAR_TURN(1);
if (WasUnableToUseMove(gActiveBattler))
{
CancelMultiTurnMoves(gActiveBattler);
@@ -999,7 +999,7 @@ u8 DoBattlerEndTurnEffects(void)
case ENDTURN_THRASH: // thrash
if (gBattleMons[gActiveBattler].status2 & STATUS2_LOCK_CONFUSE)
{
- gBattleMons[gActiveBattler].status2 -= 0x400;
+ gBattleMons[gActiveBattler].status2 -= STATUS2_LOCK_CONFUSE_TURN(1);
if (WasUnableToUseMove(gActiveBattler))
CancelMultiTurnMoves(gActiveBattler);
else if (!(gBattleMons[gActiveBattler].status2 & STATUS2_LOCK_CONFUSE)
@@ -1062,7 +1062,7 @@ u8 DoBattlerEndTurnEffects(void)
break;
case ENDTURN_LOCK_ON: // lock-on decrement
if (gStatuses3[gActiveBattler] & STATUS3_ALWAYS_HITS)
- gStatuses3[gActiveBattler] -= 0x8;
+ gStatuses3[gActiveBattler] -= STATUS3_ALWAYS_HITS_TURN(1);
gBattleStruct->turnEffectsTracker++;
break;
case ENDTURN_CHARGE: // charge
@@ -1078,13 +1078,13 @@ u8 DoBattlerEndTurnEffects(void)
case ENDTURN_YAWN: // yawn
if (gStatuses3[gActiveBattler] & STATUS3_YAWN)
{
- gStatuses3[gActiveBattler] -= 0x800;
+ gStatuses3[gActiveBattler] -= STATUS3_YAWN_TURN(1);
if (!(gStatuses3[gActiveBattler] & STATUS3_YAWN) && !(gBattleMons[gActiveBattler].status1 & STATUS1_ANY)
&& gBattleMons[gActiveBattler].ability != ABILITY_VITAL_SPIRIT
&& gBattleMons[gActiveBattler].ability != ABILITY_INSOMNIA && !UproarWakeUpCheck(gActiveBattler))
{
CancelMultiTurnMoves(gActiveBattler);
- gBattleMons[gActiveBattler].status1 |= (Random() & 3) + 2;
+ gBattleMons[gActiveBattler].status1 |= STATUS1_SLEEP_TURN((Random() & 3) + 2); // 2-5 turns of sleep
BtlController_EmitSetMonData(0, REQUEST_STATUS_BATTLE, 0, 4, &gBattleMons[gActiveBattler].status1);
MarkBattlerForControllerExec(gActiveBattler);
gEffectBattler = gActiveBattler;
@@ -1250,7 +1250,7 @@ bool8 HandleFaintedMonActions(void)
gBattleStruct->faintedActionsState = 3;
break;
case 2:
- sub_803F9EC(gBattlerFainted);
+ OpponentSwitchInResetSentPokesToOpponentValue(gBattlerFainted);
if (++gBattleStruct->faintedActionsBattlerId == gBattlersCount)
gBattleStruct->faintedActionsState = 3;
else
@@ -1478,7 +1478,7 @@ u8 AtkCanceller_UnableToUseMove(void)
case CANCELLER_CONFUSED: // confusion
if (gBattleMons[gBattlerAttacker].status2 & STATUS2_CONFUSION)
{
- gBattleMons[gBattlerAttacker].status2--;
+ gBattleMons[gBattlerAttacker].status2 -= STATUS2_CONFUSION_TURN(1);
if (gBattleMons[gBattlerAttacker].status2 & STATUS2_CONFUSION)
{
if (Random() & 1)
@@ -1540,7 +1540,7 @@ u8 AtkCanceller_UnableToUseMove(void)
case CANCELLER_BIDE: // bide
if (gBattleMons[gBattlerAttacker].status2 & STATUS2_BIDE)
{
- gBattleMons[gBattlerAttacker].status2 -= 0x100;
+ gBattleMons[gBattlerAttacker].status2 -= STATUS2_BIDE_TURN(1);
if (gBattleMons[gBattlerAttacker].status2 & STATUS2_BIDE)
{
gBattlescriptCurrInstr = BattleScript_BideStoringEnergy;
@@ -1978,7 +1978,7 @@ u8 AbilityBattleEffects(u8 caseID, u8 battler, u8 ability, u8 special, u16 moveA
}
break;
case ABILITY_SPEED_BOOST:
- if (gBattleMons[battler].statStages[STAT_SPEED] < 0xC && gDisableStructs[battler].isFirstTurn != 2)
+ if (gBattleMons[battler].statStages[STAT_SPEED] < MAX_STAT_STAGE && gDisableStructs[battler].isFirstTurn != 2)
{
gBattleMons[battler].statStages[STAT_SPEED]++;
gBattleScripting.animArg1 = 0x11;
@@ -2619,9 +2619,9 @@ u8 ItemBattleEffects(u8 caseID, u8 battlerId, bool8 moveTurn)
case HOLD_EFFECT_RESTORE_STATS:
for (i = 0; i < NUM_BATTLE_STATS; i++)
{
- if (gBattleMons[battlerId].statStages[i] < 6)
+ if (gBattleMons[battlerId].statStages[i] < DEFAULT_STAT_STAGE)
{
- gBattleMons[battlerId].statStages[i] = 6;
+ gBattleMons[battlerId].statStages[i] = DEFAULT_STAT_STAGE;
effect = ITEM_STATS_CHANGE;
}
}
@@ -2690,9 +2690,9 @@ u8 ItemBattleEffects(u8 caseID, u8 battlerId, bool8 moveTurn)
case HOLD_EFFECT_RESTORE_STATS:
for (i = 0; i < NUM_BATTLE_STATS; i++)
{
- if (gBattleMons[battlerId].statStages[i] < 6)
+ if (gBattleMons[battlerId].statStages[i] < DEFAULT_STAT_STAGE)
{
- gBattleMons[battlerId].statStages[i] = 6;
+ gBattleMons[battlerId].statStages[i] = DEFAULT_STAT_STAGE;
effect = ITEM_STATS_CHANGE;
}
}
@@ -2811,7 +2811,8 @@ u8 ItemBattleEffects(u8 caseID, u8 battlerId, bool8 moveTurn)
break;
// copy/paste again, smh
case HOLD_EFFECT_ATTACK_UP:
- if (gBattleMons[battlerId].hp <= gBattleMons[battlerId].maxHP / battlerHoldEffectParam && !moveTurn && gBattleMons[battlerId].statStages[STAT_ATK] < 0xC)
+ if (gBattleMons[battlerId].hp <= gBattleMons[battlerId].maxHP / battlerHoldEffectParam
+ && !moveTurn && gBattleMons[battlerId].statStages[STAT_ATK] < MAX_STAT_STAGE)
{
PREPARE_STAT_BUFFER(gBattleTextBuff1, STAT_ATK);
PREPARE_STRING_BUFFER(gBattleTextBuff2, STRINGID_STATROSE);
@@ -2825,7 +2826,8 @@ u8 ItemBattleEffects(u8 caseID, u8 battlerId, bool8 moveTurn)
}
break;
case HOLD_EFFECT_DEFENSE_UP:
- if (gBattleMons[battlerId].hp <= gBattleMons[battlerId].maxHP / battlerHoldEffectParam && !moveTurn && gBattleMons[battlerId].statStages[STAT_DEF] < 0xC)
+ if (gBattleMons[battlerId].hp <= gBattleMons[battlerId].maxHP / battlerHoldEffectParam && !moveTurn
+ && gBattleMons[battlerId].statStages[STAT_DEF] < MAX_STAT_STAGE)
{
PREPARE_STAT_BUFFER(gBattleTextBuff1, STAT_DEF);
@@ -2838,7 +2840,8 @@ u8 ItemBattleEffects(u8 caseID, u8 battlerId, bool8 moveTurn)
}
break;
case HOLD_EFFECT_SPEED_UP:
- if (gBattleMons[battlerId].hp <= gBattleMons[battlerId].maxHP / battlerHoldEffectParam && !moveTurn && gBattleMons[battlerId].statStages[STAT_SPEED] < 0xC)
+ if (gBattleMons[battlerId].hp <= gBattleMons[battlerId].maxHP / battlerHoldEffectParam && !moveTurn
+ && gBattleMons[battlerId].statStages[STAT_SPEED] < MAX_STAT_STAGE)
{
PREPARE_STAT_BUFFER(gBattleTextBuff1, STAT_SPEED);
@@ -2851,7 +2854,8 @@ u8 ItemBattleEffects(u8 caseID, u8 battlerId, bool8 moveTurn)
}
break;
case HOLD_EFFECT_SP_ATTACK_UP:
- if (gBattleMons[battlerId].hp <= gBattleMons[battlerId].maxHP / battlerHoldEffectParam && !moveTurn && gBattleMons[battlerId].statStages[STAT_SPATK] < 0xC)
+ if (gBattleMons[battlerId].hp <= gBattleMons[battlerId].maxHP / battlerHoldEffectParam && !moveTurn
+ && gBattleMons[battlerId].statStages[STAT_SPATK] < MAX_STAT_STAGE)
{
PREPARE_STAT_BUFFER(gBattleTextBuff1, STAT_SPATK);
@@ -2864,7 +2868,8 @@ u8 ItemBattleEffects(u8 caseID, u8 battlerId, bool8 moveTurn)
}
break;
case HOLD_EFFECT_SP_DEFENSE_UP:
- if (gBattleMons[battlerId].hp <= gBattleMons[battlerId].maxHP / battlerHoldEffectParam && !moveTurn && gBattleMons[battlerId].statStages[STAT_SPDEF] < 0xC)
+ if (gBattleMons[battlerId].hp <= gBattleMons[battlerId].maxHP / battlerHoldEffectParam && !moveTurn
+ && gBattleMons[battlerId].statStages[STAT_SPDEF] < MAX_STAT_STAGE)
{
PREPARE_STAT_BUFFER(gBattleTextBuff1, STAT_SPDEF);
@@ -2877,7 +2882,8 @@ u8 ItemBattleEffects(u8 caseID, u8 battlerId, bool8 moveTurn)
}
break;
case HOLD_EFFECT_CRITICAL_UP:
- if (gBattleMons[battlerId].hp <= gBattleMons[battlerId].maxHP / battlerHoldEffectParam && !moveTurn && !(gBattleMons[battlerId].status2 & STATUS2_FOCUS_ENERGY))
+ if (gBattleMons[battlerId].hp <= gBattleMons[battlerId].maxHP / battlerHoldEffectParam && !moveTurn
+ && !(gBattleMons[battlerId].status2 & STATUS2_FOCUS_ENERGY))
{
gBattleMons[battlerId].status2 |= STATUS2_FOCUS_ENERGY;
BattleScriptExecute(BattleScript_BerryFocusEnergyEnd2);
@@ -2889,7 +2895,7 @@ u8 ItemBattleEffects(u8 caseID, u8 battlerId, bool8 moveTurn)
{
for (i = 0; i < 5; i++)
{
- if (gBattleMons[battlerId].statStages[STAT_ATK + i] < 0xC)
+ if (gBattleMons[battlerId].statStages[STAT_ATK + i] < MAX_STAT_STAGE)
break;
}
if (i != 5)
@@ -2897,7 +2903,7 @@ u8 ItemBattleEffects(u8 caseID, u8 battlerId, bool8 moveTurn)
do
{
i = Random() % 5;
- } while (gBattleMons[battlerId].statStages[STAT_ATK + i] == 0xC);
+ } while (gBattleMons[battlerId].statStages[STAT_ATK + i] == MAX_STAT_STAGE);
PREPARE_STAT_BUFFER(gBattleTextBuff1, i + 1);
@@ -3166,9 +3172,9 @@ u8 ItemBattleEffects(u8 caseID, u8 battlerId, bool8 moveTurn)
case HOLD_EFFECT_RESTORE_STATS:
for (i = 0; i < NUM_BATTLE_STATS; i++)
{
- if (gBattleMons[battlerId].statStages[i] < 6)
+ if (gBattleMons[battlerId].statStages[i] < DEFAULT_STAT_STAGE)
{
- gBattleMons[battlerId].statStages[i] = 6;
+ gBattleMons[battlerId].statStages[i] = DEFAULT_STAT_STAGE;
effect = ITEM_STATS_CHANGE;
}
}
diff --git a/src/berry.c b/src/berry.c
index fe4a66af6..d70e8c353 100644
--- a/src/berry.c
+++ b/src/berry.c
@@ -997,7 +997,7 @@ struct BerryTree *GetBerryTreeInfo(u8 id)
bool32 ObjectEventInteractionWaterBerryTree(void)
{
- struct BerryTree *tree = GetBerryTreeInfo(ObjectEventGetBerryTreeId(gSelectedObjectEvent));
+ struct BerryTree *tree = GetBerryTreeInfo(GetObjectEventBerryTreeId(gSelectedObjectEvent));
switch (tree->stage)
{
@@ -1022,7 +1022,7 @@ bool32 ObjectEventInteractionWaterBerryTree(void)
bool8 IsPlayerFacingEmptyBerryTreePatch(void)
{
if (GetObjectEventScriptPointerPlayerFacing() == BerryTreeScript
- && GetStageByBerryTreeId(ObjectEventGetBerryTreeId(gSelectedObjectEvent)) == BERRY_STAGE_NO_BERRY)
+ && GetStageByBerryTreeId(GetObjectEventBerryTreeId(gSelectedObjectEvent)) == BERRY_STAGE_NO_BERRY)
return TRUE;
else
return FALSE;
@@ -1260,7 +1260,7 @@ void ObjectEventInteractionGetBerryTreeData(void)
u8 group;
u8 num;
- id = ObjectEventGetBerryTreeId(gSelectedObjectEvent);
+ id = GetObjectEventBerryTreeId(gSelectedObjectEvent);
berry = GetBerryTypeByBerryTreeId(id);
ResetBerryTreeSparkleFlag(id);
localId = gSpecialVar_LastTalked;
@@ -1277,13 +1277,13 @@ void ObjectEventInteractionGetBerryTreeData(void)
void ObjectEventInteractionGetBerryName(void)
{
- u8 berryType = GetBerryTypeByBerryTreeId(ObjectEventGetBerryTreeId(gSelectedObjectEvent));
+ u8 berryType = GetBerryTypeByBerryTreeId(GetObjectEventBerryTreeId(gSelectedObjectEvent));
GetBerryNameByBerryType(berryType, gStringVar1);
}
void ObjectEventInteractionGetBerryCountString(void)
{
- u8 treeId = ObjectEventGetBerryTreeId(gSelectedObjectEvent);
+ u8 treeId = GetObjectEventBerryTreeId(gSelectedObjectEvent);
u8 berry = GetBerryTypeByBerryTreeId(treeId);
u8 count = GetBerryCountByBerryTreeId(treeId);
GetBerryCountStringByBerryType(berry, gStringVar1, count);
@@ -1298,13 +1298,13 @@ void ObjectEventInteractionPlantBerryTree(void)
{
u8 berry = ItemIdToBerryType(gSpecialVar_ItemId);
- PlantBerryTree(ObjectEventGetBerryTreeId(gSelectedObjectEvent), berry, 1, TRUE);
+ PlantBerryTree(GetObjectEventBerryTreeId(gSelectedObjectEvent), berry, 1, TRUE);
ObjectEventInteractionGetBerryTreeData();
}
void ObjectEventInteractionPickBerryTree(void)
{
- u8 id = ObjectEventGetBerryTreeId(gSelectedObjectEvent);
+ u8 id = GetObjectEventBerryTreeId(gSelectedObjectEvent);
u8 berry = GetBerryTypeByBerryTreeId(id);
gSpecialVar_0x8004 = AddBagItem(BerryTypeToItemId(berry), GetBerryCountByBerryTreeId(id));
@@ -1312,7 +1312,7 @@ void ObjectEventInteractionPickBerryTree(void)
void ObjectEventInteractionRemoveBerryTree(void)
{
- RemoveBerryTree(ObjectEventGetBerryTreeId(gSelectedObjectEvent));
+ RemoveBerryTree(GetObjectEventBerryTreeId(gSelectedObjectEvent));
sub_8092EF0(gSpecialVar_LastTalked, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup);
}
@@ -1331,7 +1331,7 @@ void ResetBerryTreeSparkleFlags(void)
s16 bottom;
int i;
- GetCameraCoords(&cam_left, &cam_top);
+ GetCameraCoords((u16*)&cam_left, (u16*)&cam_top);
left = cam_left;
top = cam_top + 3;
right = cam_left + 14;
diff --git a/src/berry_blender.c b/src/berry_blender.c
index 2a122541d..2cdb841ee 100644
--- a/src/berry_blender.c
+++ b/src/berry_blender.c
@@ -1,5 +1,4 @@
#include "global.h"
-#include "constants/game_stat.h"
#include "overworld.h"
#include "berry_blender.h"
#include "bg.h"
@@ -7,7 +6,6 @@
#include "task.h"
#include "sprite.h"
#include "sound.h"
-#include "constants/songs.h"
#include "m4a.h"
#include "bg.h"
#include "palette.h"
@@ -19,10 +17,10 @@
#include "event_data.h"
#include "main.h"
#include "link.h"
+#include "link_rfu.h"
#include "item_menu_icons.h"
#include "berry.h"
#include "item.h"
-#include "constants/items.h"
#include "string_util.h"
#include "international_string_util.h"
#include "random.h"
@@ -35,43 +33,97 @@
#include "graphics.h"
#include "new_game.h"
#include "save.h"
-#include "link.h"
+#include "strings.h"
#include "constants/berry.h"
+#include "constants/game_stat.h"
+#include "constants/items.h"
#include "constants/rgb.h"
+#include "constants/songs.h"
+
+enum {
+ SCORE_BEST,
+ SCORE_GOOD,
+ SCORE_MISS,
+ NUM_SCORE_TYPES,
+};
-#define BLENDER_SCORE_BEST 0
-#define BLENDER_SCORE_GOOD 1
-#define BLENDER_SCORE_MISS 2
+// Redundant with the above. Reversed
+enum {
+ PROXIMITY_MISS,
+ PROXIMITY_GOOD,
+ PROXIMITY_BEST,
+};
-#define BLENDER_MAX_PLAYERS 4
-#define BLENDER_SCORES_NO 3
+enum {
+ SCOREANIM_GOOD,
+ SCOREANIM_MISS,
+ SCOREANIM_BEST_FLASH,
+ SCOREANIM_BEST_STATIC,
+};
-enum
-{
- PLAY_AGAIN_OK,
- DONT_PLAY_AGAIN,
+enum {
+ PLAY_AGAIN_YES,
+ PLAY_AGAIN_NO,
CANT_PLAY_NO_BERRIES,
CANT_PLAY_NO_PKBLCK_SPACE
};
+enum {
+ BLENDER_MISTER,
+ BLENDER_LADDIE,
+ BLENDER_LASSIE,
+ BLENDER_MASTER,
+ BLENDER_DUDE,
+ BLENDER_MISS
+};
+
+#define BLENDER_MAX_PLAYERS MAX_LINK_PLAYERS
+
+#define NO_PLAYER 0xFF
+
+#define MAX_PROGRESS_BAR 1000
+
+#define MAX_ARROW_POS 0x10000 // By virtue of being u16
+#define MIN_ARROW_SPEED 0x80
+#define ARROW_FALL_ROTATION 0x5800 // The amount the arrow spins as it falls in at the start
+
+// Tile offsets
+#define PROGRESS_BAR_FILLED_TOP 0x80E9
+#define PROGRESS_BAR_FILLED_BOTTOM 0x80F9
+#define PROGRESS_BAR_EMPTY_TOP 0x80E1
+#define PROGRESS_BAR_EMPTY_BOTTOM 0x80F1
+#define RPM_DIGIT 0x8072
+
+// Tile and palette tags
+#define GFXTAG_COUNTDOWN_NUMBERS 12345
+#define GFXTAG_START 12346
+#define GFXTAG_PARTICLES 23456
+#define GFXTAG_PLAYER_ARROW 46545
+#define GFXTAG_SCORE_SYMBOLS 48888
+
+#define PALTAG_PLAYER_ARROW 12312
+#define PALTAG_MISC 46546
+
+// Last berry that an NPC can put in
+#define NUM_NPC_BERRIES ITEM_TO_BERRY(ITEM_ASPEAR_BERRY)
+
struct BlenderBerry
{
u16 itemId;
u8 name[BERRY_NAME_LENGTH + 1];
- u8 flavors[FLAVOR_COUNT];
- u8 smoothness;
+ u8 flavors[FLAVOR_COUNT + 1]; // 5 flavors, + 1 for feel
};
struct TimeAndRPM
{
u32 time;
- u16 max_RPM;
+ u16 maxRPM;
};
struct BlenderGameBlock
{
struct TimeAndRPM timeRPM;
- u16 scores[BLENDER_MAX_PLAYERS][BLENDER_SCORES_NO];
+ u16 scores[BLENDER_MAX_PLAYERS][NUM_SCORE_TYPES];
};
struct TvBlenderStruct
@@ -82,138 +134,122 @@ struct TvBlenderStruct
u8 pokeblockSheen;
};
-struct BerryBlenderData
+struct BerryBlender
{
u8 mainState;
u8 loadGfxState;
- u8 unused_02[0x42];
- u16 field_44;
- u8 scoreIconIds[BLENDER_SCORES_NO];
+ u8 unused0[66];
+ u16 unk0; // never read
+ u8 scoreIconIds[NUM_SCORE_TYPES];
u16 arrowPos;
- s16 field_4C;
- u16 max_RPM;
- u8 syncArrowSpriteIds[BLENDER_MAX_PLAYERS];
- u8 syncArrowSprite2Ids[BLENDER_MAX_PLAYERS];
- u8 unused_57[0xB];
+ s16 speed;
+ u16 maxRPM;
+ u8 playerArrowSpriteIds[BLENDER_MAX_PLAYERS];
+ u8 playerArrowSpriteIds2[BLENDER_MAX_PLAYERS];
+ u8 unused1[11];
u8 gameEndState;
- u16 field_64[BLENDER_MAX_PLAYERS];
- u16 field_6C;
- u16 field_6E;
+ u16 playerContinueResponses[BLENDER_MAX_PLAYERS];
+ u16 canceledPlayerCmd;
+ u16 canceledPlayerId;
u16 playAgainState;
- u8 field_72;
+ u8 slowdownTimer;
u16 chosenItemId[BLENDER_MAX_PLAYERS];
- u8 playersNo;
- u8 unused_7D[0x10];
- u16 field_8E[BLENDER_MAX_PLAYERS];
- u16 field_96[BLENDER_MAX_PLAYERS];
+ u8 numPlayers;
+ u8 unused2[16];
+ u16 arrowIdToPlayerId[BLENDER_MAX_PLAYERS];
+ u16 playerIdToArrowId[BLENDER_MAX_PLAYERS];
u8 yesNoAnswer;
u8 stringVar[100];
u32 gameFrameTime;
s32 framesToWait;
- u32 field_10C;
- u8 unused_110[4];
- u8 field_114;
- u16 field_116;
- u16 field_118;
- u16 field_11A;
- u16 bg_X;
- u16 bg_Y;
- u8 field_120[3];
- u8 field_123;
- u16 scores[BLENDER_MAX_PLAYERS][BLENDER_SCORES_NO];
+ u32 unk1; // never read
+ u8 unused3[4];
+ u8 playerToThrowBerry;
+ u16 progressBarValue;
+ u16 maxProgressBarValue;
+ u16 centerScale;
+ s16 bg_X;
+ s16 bg_Y;
+ u8 opponentTaskIds[BLENDER_MAX_PLAYERS - 1];
+ u8 perfectOpponents; // for debugging, NPCs will always hit Best
+ u16 scores[BLENDER_MAX_PLAYERS][NUM_SCORE_TYPES];
u8 playerPlaces[BLENDER_MAX_PLAYERS];
struct BgAffineSrcData bgAffineSrc;
- u16 field_154;
+ u16 savedMusic;
struct BlenderBerry blendedBerries[BLENDER_MAX_PLAYERS];
struct TimeAndRPM smallBlock;
- u32 field_1A0;
- u8 field_1A4;
+ u32 linkPlayAgainState;
+ u8 ownRanking;
struct TvBlenderStruct tvBlender;
- u8 tilemapBuffers[2][0x800];
+ u8 tilemapBuffers[2][BG_SCREEN_SIZE];
s16 textState;
void *tilesBuffer;
struct BlenderGameBlock gameBlock;
};
-extern struct MusicPlayerInfo gMPlayInfo_SE2;
-extern struct MusicPlayerInfo gMPlayInfo_BGM;
-
-// text
-extern const u8 gText_SavingDontTurnOff2[];
-extern const u8 gText_Space[];
-extern const u8 gText_BlenderMaxSpeedRecord[];
-extern const u8 gText_234Players[];
-
-// this file's functions
-static void BerryBlender_SetBackgroundsPos(void);
-static void sub_8080EA4(u8 taskId);
-static void sub_8080FD0(u8 taskId);
-static void sub_80810F8(u8 taskId);
-static void sub_8081224(u8 taskId);
-static void sub_8083F3C(u8 taskId);
-static void sub_80833F8(struct Sprite *sprite);
-static void sub_8082F68(struct Sprite *sprite);
-static void sub_8083010(struct Sprite *sprite);
-static void sub_80830C0(struct Sprite *sprite);
-static void sub_8082F9C(struct Sprite *sprite);
-static void Blender_SetPlayerNamesLocal(u8 opponentsNum);
-static void sub_807FAC8(void);
-static void sub_8082D28(void);
-static bool32 Blender_PrintText(s16 *textState, const u8 *string, s32 textSpeed);
-static void sub_807FFA4(void);
-static void sub_8080018(void);
-static void sub_80808D4(void);
-static void Blender_DummiedOutFunc(s16 a0, s16 a1);
-static void sub_8081898(void);
-static void sub_8082CB4(struct BgAffineSrcData *bgAffineSrc);
-static bool8 sub_8083380(void);
-static void sub_808074C(void);
-static void Blender_PrintPlayerNames(void);
-static void sub_8080588(void);
-static void Blender_SetParticipantBerryData(u8 participantId, u16 itemId);
-static void Blender_AddTextPrinter(u8 windowId, const u8 *string, u8 x, u8 y, s32 speed, s32 caseId);
-static void sub_8080DF8(void);
-static void sub_8082E84(void);
-static void sub_80832BC(s16* a0, u16 a1);
-static void sub_8083140(u16 a0, u16 a2);
-static void sub_8083230(u16 a0);
-static void sub_808330C(void);
-static void sub_8082AD4(void);
-static void CB2_HandleBlenderEndGame(void);
-static bool8 Blender_PrintBlendingRanking(void);
-static bool8 Blender_PrintBlendingResults(void);
-static void CB2_HandlePlayerPlayAgainChoice(void);
-static void CB2_HandlePlayerLinkPlayAgainChoice(void);
-static void sub_8083170(u16 a0, u16 a1);
-static void Blender_PrintMadePokeblockString(struct Pokeblock *pokeblock, u8 *dst);
-static bool32 TryAddContestLinkTvShow(struct Pokeblock *pokeblock, struct TvBlenderStruct *a1);
-
-// EWRAM
-EWRAM_DATA static struct BerryBlenderData *sBerryBlenderData = NULL;
-EWRAM_DATA static s32 sUnknown_020322A8[5] = {0};
-EWRAM_DATA static s32 sUnknown_020322BC[5] = {0};
-EWRAM_DATA static u32 sUnknown_020322D0 = 0;
-
-// IWRAM bss
-static s16 sUnknown_03000DE8[8];
-static s16 sUnknown_03000DF8[6];
-static s16 sUnknown_03000E04;
-static s16 sUnknown_03000E06;
-
-// IWRAM common
-u8 gInGameOpponentsNo;
+static void SetBgPos(void);
+static void Task_HandleOpponent1(u8);
+static void Task_HandleOpponent2(u8);
+static void Task_HandleOpponent3(u8);
+static void Task_HandleBerryMaster(u8);
+static void Task_PlayPokeblockFanfare(u8);
+static void SpriteCB_PlayerArrow(struct Sprite *);
+static void SpriteCB_ScoreSymbol(struct Sprite *);
+static void SpriteCB_CountdownNumber(struct Sprite *);
+static void SpriteCB_Start(struct Sprite *);
+static void SpriteCB_ScoreSymbolBest(struct Sprite *);
+static void InitLocalPlayers(u8);
+static void CB2_LoadBerryBlender(void);
+static void UpdateBlenderCenter(void);
+static bool32 Blender_PrintText(s16 *, const u8 *, s32 );
+static void StartBlender(void);
+static void CB2_StartBlenderLink(void);
+static void CB2_StartBlenderLocal(void);
+static void Blender_DummiedOutFunc(s16, s16);
+static void CB2_PlayBlender(void);
+static void DrawBlenderCenter(struct BgAffineSrcData *);
+static bool8 UpdateBlenderLandScreenShake(void);
+static void SetPlayerIdMaps(void);
+static void PrintPlayerNames(void);
+static void InitBlenderBgs(void);
+static void SetPlayerBerryData(u8, u16);
+static void Blender_AddTextPrinter(u8, const u8 *, u8, u8, s32, s32);
+static void ResetLinkCmds(void);
+static void CreateParticleSprites(void);
+static void ShakeBgCoordForHit(s16*, u16);
+static void TryUpdateProgressBar(u16, u16);
+static void UpdateRPM(u16);
+static void RestoreBgCoords(void);
+static void ProcessLinkPlayerCmds(void);
+static void CB2_EndBlenderGame(void);
+static bool8 PrintBlendingRanking(void);
+static bool8 PrintBlendingResults(void);
+static void CB2_CheckPlayAgainLocal(void);
+static void CB2_CheckPlayAgainLink(void);
+static void UpdateProgressBar(u16, u16);
+static void PrintMadePokeblockString(struct Pokeblock *, u8 *);
+static bool32 TryAddContestLinkTvShow(struct Pokeblock *, struct TvBlenderStruct *);
+
+EWRAM_DATA static struct BerryBlender *sBerryBlender = NULL;
+EWRAM_DATA static s32 sDebug_PokeblockFactorFlavors[FLAVOR_COUNT] = {0};
+EWRAM_DATA static s32 sDebug_PokeblockFactorFlavorsAfterRPM[FLAVOR_COUNT] = {0};
+EWRAM_DATA static u32 sDebug_PokeblockFactorRPM = 0;
+
+static s16 sPokeblockFlavors[FLAVOR_COUNT + 1]; // + 1 for feel
+static s16 sPokeblockPresentFlavors[FLAVOR_COUNT + 1];
+static s16 sDebug_MaxRPMStage;
+static s16 sDebug_GameTimeStage;
-// rom
+u8 gInGameOpponentsNo;
-static const u16 sBlenderCenterPal[] = INCBIN_U16("graphics/berry_blender/center.gbapal");
-static const u8 sBlenderCenterMap[] = INCBIN_U8("graphics/berry_blender/center_map.bin");
-static const u16 sBlenderOuterPal[] = INCBIN_U16("graphics/berry_blender/outer.gbapal");
+static const u16 sBlenderCenter_Pal[] = INCBIN_U16("graphics/berry_blender/center.gbapal");
+static const u8 sBlenderCenter_Tilemap[] = INCBIN_U8("graphics/berry_blender/center_map.bin");
+static const u16 sBlenderOuter_Pal[] = INCBIN_U16("graphics/berry_blender/outer.gbapal");
-// unreferenced pals?
-static const u16 sUnknownPal_0[] = INCBIN_U16("graphics/unknown/unknown_339514.gbapal");
-static const u16 sUnknownArray_1[224] = {0};
+static const u16 sUnused_Pal[] = INCBIN_U16("graphics/berry_blender/unused.gbapal");
+static const u16 sEmpty_Pal[16 * 14] = {0};
-// unused text?
+// unused text
static const u8 sUnusedText_YesNo[] = _("YES\nNO");
static const u8 sUnusedText_2[] = _("▶");
static const u8 sUnusedText_Space[] = _(" ");
@@ -232,22 +268,12 @@ static const u8 sText_Miss[] = _("MISS");
static const u8* const sBlenderOpponentsNames[] =
{
- sText_Mister,
- sText_Laddie,
- sText_Lassie,
- sText_Master,
- sText_Dude,
- sText_Miss
-};
-
-enum
-{
- BLENDER_MISTER,
- BLENDER_LADDIE,
- BLENDER_LASSIE,
- BLENDER_MASTER,
- BLENDER_DUDE,
- BLENDER_MISS
+ [BLENDER_MISTER] = sText_Mister,
+ [BLENDER_LADDIE] = sText_Laddie,
+ [BLENDER_LASSIE] = sText_Lassie,
+ [BLENDER_MASTER] = sText_Master,
+ [BLENDER_DUDE] = sText_Dude,
+ [BLENDER_MISS] = sText_Miss
};
static const u8 sText_PressAToStart[] = _("Press the A Button to start.");
@@ -274,7 +300,7 @@ static const u8 sText_TheLevelIs[] = _("The level is ");
static const u8 sText_TheFeelIs[] = _(", and the feel is ");
static const u8 sText_Dot2[] = _(".");
-static const struct BgTemplate sBerryBlenderBgTemplates[3] =
+static const struct BgTemplate sBgTemplates[3] =
{
{
.bg = 0,
@@ -305,7 +331,7 @@ static const struct BgTemplate sBerryBlenderBgTemplates[3] =
}
};
-static const struct WindowTemplate sBerryBlender_WindowTemplates[] =
+static const struct WindowTemplate sWindowTemplates[] =
{
{
.bg = 0,
@@ -364,7 +390,7 @@ static const struct WindowTemplate sBerryBlender_WindowTemplates[] =
DUMMY_WIN_TEMPLATE
};
-static const struct WindowTemplate sBlender_YesNoWindowTemplate =
+static const struct WindowTemplate sYesNoWindowTemplate_ContinuePlaying =
{
.bg = 0,
.tilemapLeft = 21,
@@ -375,31 +401,58 @@ static const struct WindowTemplate sBlender_YesNoWindowTemplate =
.baseBlock = 0xCC
};
-static const s8 sUnknown_083399C0[][2] =
+static const s8 sPlayerArrowQuadrant[BLENDER_MAX_PLAYERS][2] =
{
- {-1, -1}, {1, -1}, {-1, 1}, {1, 1}
+ {-1, -1},
+ { 1, -1},
+ {-1, 1},
+ { 1, 1}
};
-static const u8 sBlenderSyncArrowsPos[BLENDER_MAX_PLAYERS][2] =
+static const u8 sPlayerArrowPos[BLENDER_MAX_PLAYERS][2] =
{
- {72, 32}, {168, 32}, {72, 128}, {168, 128}
+ { 72, 32},
+ {168, 32},
+ { 72, 128},
+ {168, 128}
};
-static const u8 sUnknown_083399D0[3][4] =
+static const u8 sPlayerIdMap[BLENDER_MAX_PLAYERS - 1][BLENDER_MAX_PLAYERS] =
{
- {-1, 0, 1, -1}, {-1, 0, 1, 2}, {0, 1, 2, 3}
+ {NO_PLAYER, 0, 1, NO_PLAYER}, // 2 Players
+ {NO_PLAYER, 0, 1, 2}, // 3 Players
+ { 0, 1, 2, 3} // 4 Players
};
-static const u16 sUnknown_083399DC[] = {0, 0xC000, 0x4000, 0x8000};
-static const u8 sUnknown_083399E4[] = {1, 1, 0};
-static const u8 sUnknown_083399E7[] = {32, 224, 96, 160, 0};
-static const TaskFunc sUnknown_083399EC[] =
+// Blender arrow positions:
+//
+// 0x0000 (limit 0x10000)
+// . .
+// . .
+// 0x4000 . . 0xC000
+// . .
+// . .
+// . .
+// 0x8000
+//
+static const u16 sArrowStartPos[] = {
+ 0,
+ MAX_ARROW_POS / 4 * 3, // 0xC000
+ MAX_ARROW_POS / 4, // 0x4000
+ MAX_ARROW_POS / 4 * 2 // 0x8000
+};
+static const u8 sArrowStartPosIds[BLENDER_MAX_PLAYERS - 1] = {1, 1, 0};
+static const u8 sArrowHitRangeStart[BLENDER_MAX_PLAYERS] = {32, 224, 96, 160};
+
+static const TaskFunc sLocalOpponentTasks[] =
{
- sub_8080EA4, sub_8080FD0, sub_80810F8
+ Task_HandleOpponent1,
+ Task_HandleOpponent2,
+ Task_HandleOpponent3
};
-static const struct OamData sOamData_8216314 =
+static const struct OamData sOam_PlayerArrow =
{
.y = 0,
.affineMode = ST_OAM_AFFINE_OFF,
@@ -416,40 +469,40 @@ static const struct OamData sOamData_8216314 =
.affineParam = 0,
};
-static const union AnimCmd sSpriteAnim_821631C[] =
+static const union AnimCmd sAnim_PlayerArrow_TopLeft[] =
{
- ANIMCMD_FRAME(16, 5, 1, 1),
+ ANIMCMD_FRAME(16, 5, .vFlip = TRUE, .hFlip = TRUE),
ANIMCMD_END
};
-static const union AnimCmd sSpriteAnim_8216324[] =
+static const union AnimCmd sAnim_PlayerArrow_TopRight[] =
{
ANIMCMD_FRAME(16, 5, .vFlip = TRUE),
ANIMCMD_END
};
-static const union AnimCmd sSpriteAnim_821632C[] =
+static const union AnimCmd sAnim_PlayerArrow_BottomLeft[] =
{
ANIMCMD_FRAME(16, 5, .hFlip = TRUE),
ANIMCMD_END
};
-static const union AnimCmd sSpriteAnim_8216334[] =
+static const union AnimCmd sAnim_PlayerArrow_BottomRight[] =
{
ANIMCMD_FRAME(16, 5, 0, 0),
ANIMCMD_END
};
-static const union AnimCmd sSpriteAnim_821633C[] =
+static const union AnimCmd sAnim_PlayerArrow_TopLeft_Flash[] =
{
- ANIMCMD_FRAME(48, 2, 1, 1),
- ANIMCMD_FRAME(32, 5, 1, 1),
- ANIMCMD_FRAME(48, 3, 1, 1),
- ANIMCMD_FRAME(16, 5, 1, 1),
+ ANIMCMD_FRAME(48, 2, .vFlip = TRUE, .hFlip = TRUE),
+ ANIMCMD_FRAME(32, 5, .vFlip = TRUE, .hFlip = TRUE),
+ ANIMCMD_FRAME(48, 3, .vFlip = TRUE, .hFlip = TRUE),
+ ANIMCMD_FRAME(16, 5, .vFlip = TRUE, .hFlip = TRUE),
ANIMCMD_END
};
-static const union AnimCmd sSpriteAnim_8216350[] =
+static const union AnimCmd sAnim_PlayerArrow_TopRight_Flash[] =
{
ANIMCMD_FRAME(48, 2, .vFlip = TRUE),
ANIMCMD_FRAME(32, 5, .vFlip = TRUE),
@@ -458,7 +511,7 @@ static const union AnimCmd sSpriteAnim_8216350[] =
ANIMCMD_END
};
-static const union AnimCmd sSpriteAnim_8216364[] =
+static const union AnimCmd sAnim_PlayerArrow_BottomLeft_Flash[] =
{
ANIMCMD_FRAME(48, 2, .hFlip = TRUE),
ANIMCMD_FRAME(32, 5, .hFlip = TRUE),
@@ -467,7 +520,7 @@ static const union AnimCmd sSpriteAnim_8216364[] =
ANIMCMD_END
};
-static const union AnimCmd sSpriteAnim_8216378[] =
+static const union AnimCmd sAnim_PlayerArrow_BottomRight_Flash[] =
{
ANIMCMD_FRAME(48, 2, 0, 0),
ANIMCMD_FRAME(32, 5, 0, 0),
@@ -476,73 +529,73 @@ static const union AnimCmd sSpriteAnim_8216378[] =
ANIMCMD_END
};
-static const union AnimCmd sSpriteAnim_821638C[] =
+static const union AnimCmd sAnim_PlayerArrow_TopLeft_Off[] =
{
- ANIMCMD_FRAME(0, 5, 1, 1),
+ ANIMCMD_FRAME(0, 5, .vFlip = TRUE, .hFlip = TRUE),
ANIMCMD_END
};
-static const union AnimCmd sSpriteAnim_8216394[] =
+static const union AnimCmd sAnim_PlayerArrow_TopRight_Off[] =
{
ANIMCMD_FRAME(0, 5, .vFlip = TRUE),
ANIMCMD_END
};
-static const union AnimCmd sSpriteAnim_821639C[] =
+static const union AnimCmd sAnim_PlayerArrow_BottomLeft_Off[] =
{
ANIMCMD_FRAME(0, 5, .hFlip = TRUE),
ANIMCMD_END
};
-static const union AnimCmd sSpriteAnim_82163A4[] =
+static const union AnimCmd sAnim_PlayerArrow_BottomRight_Off[] =
{
ANIMCMD_FRAME(0, 5, 0, 0),
ANIMCMD_END
};
-static const union AnimCmd *const sSpriteAnimTable_82163AC[] =
+static const union AnimCmd *const sAnims_PlayerArrow[] =
{
- sSpriteAnim_821631C,
- sSpriteAnim_8216324,
- sSpriteAnim_821632C,
- sSpriteAnim_8216334,
- sSpriteAnim_821633C,
- sSpriteAnim_8216350,
- sSpriteAnim_8216364,
- sSpriteAnim_8216378,
- sSpriteAnim_821638C,
- sSpriteAnim_8216394,
- sSpriteAnim_821639C,
- sSpriteAnim_82163A4
+ sAnim_PlayerArrow_TopLeft,
+ sAnim_PlayerArrow_TopRight,
+ sAnim_PlayerArrow_BottomLeft,
+ sAnim_PlayerArrow_BottomRight,
+ sAnim_PlayerArrow_TopLeft_Flash,
+ sAnim_PlayerArrow_TopRight_Flash,
+ sAnim_PlayerArrow_BottomLeft_Flash,
+ sAnim_PlayerArrow_BottomRight_Flash,
+ sAnim_PlayerArrow_TopLeft_Off,
+ sAnim_PlayerArrow_TopRight_Off,
+ sAnim_PlayerArrow_BottomLeft_Off,
+ sAnim_PlayerArrow_BottomRight_Off
};
-static const struct SpriteSheet sSpriteSheet_BlenderArrow =
+static const struct SpriteSheet sSpriteSheet_PlayerArrow =
{
- gBerryBlenderArrowTiles, 0x800, 46545
+ gBerryBlenderPlayerArrow_Gfx, 0x800, GFXTAG_PLAYER_ARROW
};
static const struct SpritePalette sSpritePal_BlenderMisc =
{
- gBerryBlenderMiscPalette, 46546
+ gBerryBlenderMiscPalette, PALTAG_MISC
};
-static const struct SpritePalette sSpritePal_BlenderArrow =
+static const struct SpritePalette sSpritePal_PlayerArrow =
{
- gBerryBlenderArrowPalette, 12312
+ gBerryBlenderArrowPalette, PALTAG_PLAYER_ARROW
};
-static const struct SpriteTemplate sBlenderSyncArrow_SpriteTemplate =
+static const struct SpriteTemplate sSpriteTemplate_PlayerArrow =
{
- .tileTag = 46545,
- .paletteTag = 12312,
- .oam = &sOamData_8216314,
- .anims = sSpriteAnimTable_82163AC,
+ .tileTag = GFXTAG_PLAYER_ARROW,
+ .paletteTag = PALTAG_PLAYER_ARROW,
+ .oam = &sOam_PlayerArrow,
+ .anims = sAnims_PlayerArrow,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_80833F8
+ .callback = SpriteCB_PlayerArrow
};
-static const struct OamData sOamData_821640C =
+static const struct OamData sOam_ScoreSymbols =
{
.y = 0,
.affineMode = ST_OAM_AFFINE_OFF,
@@ -559,19 +612,19 @@ static const struct OamData sOamData_821640C =
.affineParam = 0,
};
-static const union AnimCmd sSpriteAnim_8216414[] =
+static const union AnimCmd sAnim_ScoreSymbols_Good[] =
{
ANIMCMD_FRAME(0, 20),
ANIMCMD_END
};
-static const union AnimCmd sSpriteAnim_821641C[] =
+static const union AnimCmd sAnim_ScoreSymbols_Miss[] =
{
ANIMCMD_FRAME(4, 20, 1, 0),
ANIMCMD_END
};
-static const union AnimCmd sSpriteAnim_8216424[] =
+static const union AnimCmd sAnim_ScoreSymbols_BestFlash[] =
{
ANIMCMD_FRAME(8, 4),
ANIMCMD_FRAME(12, 4),
@@ -581,37 +634,37 @@ static const union AnimCmd sSpriteAnim_8216424[] =
ANIMCMD_END
};
-static const union AnimCmd sSpriteAnim_821643C[] =
+static const union AnimCmd sAnim_ScoreSymbols_BestStatic[] =
{
ANIMCMD_FRAME(8, 4),
ANIMCMD_END
};
-static const union AnimCmd *const sSpriteAnimTable_8216444[] =
+static const union AnimCmd *const sAnims_ScoreSymbols[] =
{
- sSpriteAnim_8216414,
- sSpriteAnim_821641C,
- sSpriteAnim_8216424,
- sSpriteAnim_821643C,
+ [SCOREANIM_GOOD] = sAnim_ScoreSymbols_Good,
+ [SCOREANIM_MISS] = sAnim_ScoreSymbols_Miss,
+ [SCOREANIM_BEST_FLASH] = sAnim_ScoreSymbols_BestFlash,
+ [SCOREANIM_BEST_STATIC] = sAnim_ScoreSymbols_BestStatic,
};
-static const struct SpriteSheet sUnknown_08339B38 =
+static const struct SpriteSheet sSpriteSheet_ScoreSymbols =
{
- gBerryBlenderMarubatsuTiles, 0x200, 48888
+ gBerryBlenderScoreSymbols_Gfx, 0x200, GFXTAG_SCORE_SYMBOLS
};
-static const struct SpriteTemplate sUnknown_08339B40 =
+static const struct SpriteTemplate sSpriteTemplate_ScoreSymbols =
{
- .tileTag = 48888,
- .paletteTag = 46546,
- .oam = &sOamData_821640C,
- .anims = sSpriteAnimTable_8216444,
+ .tileTag = GFXTAG_SCORE_SYMBOLS,
+ .paletteTag = PALTAG_MISC,
+ .oam = &sOam_ScoreSymbols,
+ .anims = sAnims_ScoreSymbols,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_8082F68
+ .callback = SpriteCB_ScoreSymbol
};
-static const struct OamData sOamData_8216474 =
+static const struct OamData sOam_Particles =
{
.y = 0,
.affineMode = ST_OAM_AFFINE_OFF,
@@ -628,7 +681,7 @@ static const struct OamData sOamData_8216474 =
.affineParam = 0,
};
-static const union AnimCmd sSpriteAnim_821647C[] =
+static const union AnimCmd sAnim_SparkleCrossToX[] =
{
ANIMCMD_FRAME(0, 3),
ANIMCMD_FRAME(1, 4),
@@ -638,7 +691,7 @@ static const union AnimCmd sSpriteAnim_821647C[] =
ANIMCMD_END
};
-static const union AnimCmd sSpriteAnim_8216494[] =
+static const union AnimCmd sAnim_SparkleXToCross[] =
{
ANIMCMD_FRAME(0, 3),
ANIMCMD_FRAME(2, 4),
@@ -648,7 +701,7 @@ static const union AnimCmd sSpriteAnim_8216494[] =
ANIMCMD_END
};
-static const union AnimCmd sSpriteAnim_82164AC[] =
+static const union AnimCmd sAnim_SparkleFull[] =
{
ANIMCMD_FRAME(0, 2),
ANIMCMD_FRAME(1, 2),
@@ -661,44 +714,44 @@ static const union AnimCmd sSpriteAnim_82164AC[] =
ANIMCMD_END
};
-static const union AnimCmd sSpriteAnim_82164D0[] =
+static const union AnimCmd sAnim_GreenArrow[] =
{
ANIMCMD_FRAME(5, 5, 1, 1),
ANIMCMD_END
};
-static const union AnimCmd sSpriteAnim_82164D8[] =
+static const union AnimCmd sAnim_GreenDot[] =
{
ANIMCMD_FRAME(6, 5, 1, 1),
ANIMCMD_END
};
-static const union AnimCmd *const sSpriteAnimTable_82164E0[] =
+static const union AnimCmd *const sAnims_Particles[] =
{
- sSpriteAnim_821647C,
- sSpriteAnim_8216494,
- sSpriteAnim_82164AC,
- sSpriteAnim_82164D0,
- sSpriteAnim_82164D8,
+ sAnim_SparkleCrossToX, // Only this effect is ever used, rest go unused
+ sAnim_SparkleXToCross,
+ sAnim_SparkleFull,
+ sAnim_GreenArrow,
+ sAnim_GreenDot,
};
-static const struct SpriteSheet sUnknown_08339BD8 =
+static const struct SpriteSheet sSpriteSheet_Particles =
{
- gBerryBlenderParticlesTiles, 0xE0, 23456
+ gBerryBlenderParticles_Gfx, 0xE0, GFXTAG_PARTICLES
};
-static const struct SpriteTemplate sUnknown_08339BE0 =
+static const struct SpriteTemplate sSpriteTemplate_Particles =
{
- .tileTag = 23456,
- .paletteTag = 46546,
- .oam = &sOamData_8216474,
- .anims = sSpriteAnimTable_82164E0,
+ .tileTag = GFXTAG_PARTICLES,
+ .paletteTag = PALTAG_MISC,
+ .oam = &sOam_Particles,
+ .anims = sAnims_Particles,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = SpriteCallbackDummy
};
-static const struct OamData sOamData_8216514 =
+static const struct OamData sOam_CountdownNumbers =
{
.y = 0,
.affineMode = ST_OAM_AFFINE_OFF,
@@ -715,48 +768,48 @@ static const struct OamData sOamData_8216514 =
.affineParam = 0,
};
-static const union AnimCmd sSpriteAnim_821651C[] =
+static const union AnimCmd sAnim_CountdownNumbers_3[] =
{
ANIMCMD_FRAME(32, 30),
ANIMCMD_END
};
-static const union AnimCmd sSpriteAnim_8216524[] =
+static const union AnimCmd sAnim_CountdownNumbers_2[] =
{
ANIMCMD_FRAME(16, 30),
ANIMCMD_END
};
-static const union AnimCmd sSpriteAnim_821652C[] =
+static const union AnimCmd sAnim_CountdownNumbers_1[] =
{
ANIMCMD_FRAME(0, 30),
ANIMCMD_END
};
-static const union AnimCmd *const sSpriteAnimTable_8216534[] =
+static const union AnimCmd *const sAnims_CountdownNumbers[] =
{
- sSpriteAnim_821651C,
- sSpriteAnim_8216524,
- sSpriteAnim_821652C,
+ sAnim_CountdownNumbers_3,
+ sAnim_CountdownNumbers_2,
+ sAnim_CountdownNumbers_1,
};
-static const struct SpriteSheet sUnknown_08339C24 =
+static const struct SpriteSheet sSpriteSheet_CountdownNumbers =
{
- gBerryBlenderCountdownNumbersTiles, 0x600, 12345
+ gBerryBlenderCountdownNumbers_Gfx, 0x600, GFXTAG_COUNTDOWN_NUMBERS
};
-static const struct SpriteTemplate sUnknown_08339C2C =
+static const struct SpriteTemplate sSpriteTemplate_CountdownNumbers =
{
- .tileTag = 12345,
- .paletteTag = 46546,
- .oam = &sOamData_8216514,
- .anims = sSpriteAnimTable_8216534,
+ .tileTag = GFXTAG_COUNTDOWN_NUMBERS,
+ .paletteTag = PALTAG_MISC,
+ .oam = &sOam_CountdownNumbers,
+ .anims = sAnims_CountdownNumbers,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_8083010
+ .callback = SpriteCB_CountdownNumber
};
-static const struct OamData sOamData_8216560 =
+static const struct OamData sOam_Start =
{
.y = 0,
.affineMode = ST_OAM_AFFINE_OFF,
@@ -773,34 +826,36 @@ static const struct OamData sOamData_8216560 =
.affineParam = 0,
};
-static const union AnimCmd sSpriteAnim_8216568[] =
+static const union AnimCmd sAnim_Start[] =
{
ANIMCMD_FRAME(0, 30),
ANIMCMD_END
};
-static const union AnimCmd *const sSpriteAnimTable_8216570[] =
+static const union AnimCmd *const sAnims_Start[] =
{
- sSpriteAnim_8216568,
+ sAnim_Start,
};
-static const struct SpriteSheet sUnknown_08339C58 =
+static const struct SpriteSheet sSpriteSheet_Start =
{
- gBerryBlenderStartTiles, 0x400, 12346
+ gBerryBlenderStart_Gfx, 0x400, GFXTAG_START
};
-static const struct SpriteTemplate sUnknown_08339C60 =
+static const struct SpriteTemplate sSpriteTemplate_Start =
{
- .tileTag = 12346,
- .paletteTag = 46546,
- .oam = &sOamData_8216560,
- .anims = sSpriteAnimTable_8216570,
+ .tileTag = GFXTAG_START,
+ .paletteTag = PALTAG_MISC,
+ .oam = &sOam_Start,
+ .anims = sAnims_Start,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_80830C0
+ .callback = SpriteCB_Start
};
-static const s16 sUnknown_08339C78[][5] =
+// Data for throwing the berries in at the start
+// x, y, bounce speed, x speed, y speed
+static const s16 sBerrySpriteData[][5] =
{
{-10, 20, 10, 2, 1},
{250, 20, 10, -2, 1},
@@ -808,18 +863,54 @@ static const s16 sUnknown_08339C78[][5] =
{250, 140, 10, -2, -1},
};
-static const u8 sOpponentBerrySets[][3] =
-{
- {4, 3, 2}, {0, 4, 3}, {1, 0, 4}, {2, 1, 0}, {3, 2, 1}, {0, 2, 3}, {1, 3, 4}, {2, 4, 0}, {3, 0, 1}, {4, 1, 2},
-};
-
-static const u8 sSpecialOpponentBerrySets[] = {30, 31, 32, 33, 34};
-
-static const u8 sUnknown_08339CC3[] = {1, 1, 2, 3, 4};
-
-static const u8 sUnknown_08339CC8[] = {0x1C, 0x16, 0x13, 0x1A, 0x19, 0x0E, 0x0D, 0x0B, 0x07, 0x15};
-
-static const u8 sUnknown_08339CD2[] =
+// There are only 5 different berries the NPCs will ever use
+// Each of these sets represents 3 berries chosen to be used by the NPCs
+// If the player's berry is one of the 5 possible berries, a set is chosen that excludes it
+static const u8 sOpponentBerrySets[NUM_NPC_BERRIES * 2][3] =
+{
+ // These sets are used if the player chose one of the 5 NPC berries
+ {ITEM_TO_BERRY(ITEM_ASPEAR_BERRY) - 1, ITEM_TO_BERRY(ITEM_RAWST_BERRY) - 1, ITEM_TO_BERRY(ITEM_PECHA_BERRY) - 1}, // player chose Cheri Berry
+ {ITEM_TO_BERRY(ITEM_CHERI_BERRY) - 1, ITEM_TO_BERRY(ITEM_ASPEAR_BERRY) - 1, ITEM_TO_BERRY(ITEM_RAWST_BERRY) - 1}, // player chose Chesto Berry
+ {ITEM_TO_BERRY(ITEM_CHESTO_BERRY) - 1, ITEM_TO_BERRY(ITEM_CHERI_BERRY) - 1, ITEM_TO_BERRY(ITEM_ASPEAR_BERRY) - 1}, // player chose Pecha Berry
+ {ITEM_TO_BERRY(ITEM_PECHA_BERRY) - 1, ITEM_TO_BERRY(ITEM_CHESTO_BERRY) - 1, ITEM_TO_BERRY(ITEM_CHERI_BERRY) - 1}, // player chose Rawst Berry
+ {ITEM_TO_BERRY(ITEM_RAWST_BERRY) - 1, ITEM_TO_BERRY(ITEM_PECHA_BERRY) - 1, ITEM_TO_BERRY(ITEM_CHESTO_BERRY) - 1}, // player chose Aspear Berry
+
+ // These sets are used if the player chose a different berry (set is selected by player's berry % 5)
+ {ITEM_TO_BERRY(ITEM_CHERI_BERRY) - 1, ITEM_TO_BERRY(ITEM_PECHA_BERRY) - 1, ITEM_TO_BERRY(ITEM_RAWST_BERRY) - 1}, // player chose Leppa, Figy, ...
+ {ITEM_TO_BERRY(ITEM_CHESTO_BERRY) - 1, ITEM_TO_BERRY(ITEM_RAWST_BERRY) - 1, ITEM_TO_BERRY(ITEM_ASPEAR_BERRY) - 1}, // player chose Oran, Wiki, ...
+ {ITEM_TO_BERRY(ITEM_PECHA_BERRY) - 1, ITEM_TO_BERRY(ITEM_ASPEAR_BERRY) - 1, ITEM_TO_BERRY(ITEM_CHERI_BERRY) - 1}, // player chose Persim, Mago, ...
+ {ITEM_TO_BERRY(ITEM_RAWST_BERRY) - 1, ITEM_TO_BERRY(ITEM_CHERI_BERRY) - 1, ITEM_TO_BERRY(ITEM_CHESTO_BERRY) - 1}, // player chose Lum, Aguav, ...
+ {ITEM_TO_BERRY(ITEM_ASPEAR_BERRY) - 1, ITEM_TO_BERRY(ITEM_CHESTO_BERRY) - 1, ITEM_TO_BERRY(ITEM_PECHA_BERRY) - 1}, // player chose Sitrus, Iapapa, ...
+};
+
+// Berry master's berries follow the same rules as above, but instead of explicitly listing
+// the alternate sets if the player chooses one of these berries, it implicitly uses these berries - 5, i.e. Tamato - Nomel
+static const u8 sBerryMasterBerries[] = {
+ ITEM_TO_BERRY(ITEM_SPELON_BERRY) - 1,
+ ITEM_TO_BERRY(ITEM_PAMTRE_BERRY) - 1,
+ ITEM_TO_BERRY(ITEM_WATMEL_BERRY) - 1,
+ ITEM_TO_BERRY(ITEM_DURIN_BERRY) - 1,
+ ITEM_TO_BERRY(ITEM_BELUE_BERRY) - 1
+};
+
+// "0 players" is link
+static const u8 sNumPlayersToSpeedDivisor[] = {1, 1, 2, 3, 4};
+
+// Black pokeblocks will use one of these random combinations of flavors
+static const u8 sBlackPokeblockFlavorFlags[] = {
+ (1 << FLAVOR_SOUR) | (1 << FLAVOR_BITTER) | (1 << FLAVOR_SWEET),
+ (1 << FLAVOR_SOUR) | (1 << FLAVOR_SWEET) | (1 << FLAVOR_DRY),
+ (1 << FLAVOR_SOUR) | (1 << FLAVOR_DRY) | (1 << FLAVOR_SPICY),
+ (1 << FLAVOR_SOUR) | (1 << FLAVOR_BITTER) | (1 << FLAVOR_DRY),
+ (1 << FLAVOR_SOUR) | (1 << FLAVOR_BITTER) | (1 << FLAVOR_SPICY),
+ (1 << FLAVOR_BITTER) | (1 << FLAVOR_SWEET) | (1 << FLAVOR_DRY),
+ (1 << FLAVOR_BITTER) | (1 << FLAVOR_SWEET) | (1 << FLAVOR_SPICY),
+ (1 << FLAVOR_BITTER) | (1 << FLAVOR_DRY) | (1 << FLAVOR_SPICY),
+ (1 << FLAVOR_SWEET) | (1 << FLAVOR_DRY) | (1 << FLAVOR_SPICY),
+ (1 << FLAVOR_SOUR) | (1 << FLAVOR_SWEET) | (1 << FLAVOR_SPICY),
+};
+
+static const u8 sUnused[] =
{
0xfe, 0x02, 0x02, 0xce, 0xd0, 0x37, 0x44, 0x07, 0x1f, 0x0c, 0x10,
0x00, 0xff, 0xfe, 0x91, 0x72, 0xce, 0xd0, 0x37, 0x44, 0x07, 0x1f,
@@ -840,20 +931,18 @@ static const struct WindowTemplate sBlenderRecordWindowTemplate =
.baseBlock = 8
};
-// code
-
-static void Blender_ControlHitPitch(void)
+static void UpdateHitPitch(void)
{
- m4aMPlayPitchControl(&gMPlayInfo_SE2, 0xFFFF, 2 * (sBerryBlenderData->field_4C - 128));
+ m4aMPlayPitchControl(&gMPlayInfo_SE2, 0xFFFF, 2 * (sBerryBlender->speed - MIN_ARROW_SPEED));
}
-static void VBlankCB0_BerryBlender(void)
+static void VBlankCB_BerryBlender(void)
{
- BerryBlender_SetBackgroundsPos();
- SetBgAffine(2, sBerryBlenderData->bgAffineSrc.texX, sBerryBlenderData->bgAffineSrc.texY,
- sBerryBlenderData->bgAffineSrc.scrX, sBerryBlenderData->bgAffineSrc.scrY,
- sBerryBlenderData->bgAffineSrc.sx, sBerryBlenderData->bgAffineSrc.sy,
- sBerryBlenderData->bgAffineSrc.alpha);
+ SetBgPos();
+ SetBgAffine(2, sBerryBlender->bgAffineSrc.texX, sBerryBlender->bgAffineSrc.texY,
+ sBerryBlender->bgAffineSrc.scrX, sBerryBlender->bgAffineSrc.scrY,
+ sBerryBlender->bgAffineSrc.sx, sBerryBlender->bgAffineSrc.sy,
+ sBerryBlender->bgAffineSrc.alpha);
LoadOam();
ProcessSpriteCopyRequests();
TransferPlttBuffer();
@@ -861,64 +950,64 @@ static void VBlankCB0_BerryBlender(void)
static bool8 LoadBerryBlenderGfx(void)
{
- switch (sBerryBlenderData->loadGfxState)
+ switch (sBerryBlender->loadGfxState)
{
case 0:
- sBerryBlenderData->tilesBuffer = AllocZeroed(GetDecompressedDataSize(sBlenderCenterGfx) + 100);
- LZDecompressWram(sBlenderCenterGfx, sBerryBlenderData->tilesBuffer);
- sBerryBlenderData->loadGfxState++;
+ sBerryBlender->tilesBuffer = AllocZeroed(GetDecompressedDataSize(gBerryBlenderCenter_Gfx) + 100);
+ LZDecompressWram(gBerryBlenderCenter_Gfx, sBerryBlender->tilesBuffer);
+ sBerryBlender->loadGfxState++;
break;
case 1:
- CopyToBgTilemapBuffer(2, sBlenderCenterMap, 0x400, 0);
+ CopyToBgTilemapBuffer(2, sBlenderCenter_Tilemap, 0x400, 0);
CopyBgTilemapBufferToVram(2);
- LoadPalette(sBlenderCenterPal, 0, 0x100);
- sBerryBlenderData->loadGfxState++;
+ LoadPalette(sBlenderCenter_Pal, 0, 0x100);
+ sBerryBlender->loadGfxState++;
break;
case 2:
- LoadBgTiles(2, sBerryBlenderData->tilesBuffer, GetDecompressedDataSize(sBlenderCenterGfx), 0);
- sBerryBlenderData->loadGfxState++;
+ LoadBgTiles(2, sBerryBlender->tilesBuffer, GetDecompressedDataSize(gBerryBlenderCenter_Gfx), 0);
+ sBerryBlender->loadGfxState++;
break;
case 3:
- LZDecompressWram(gUnknown_08D91DB8, sBerryBlenderData->tilesBuffer);
- sBerryBlenderData->loadGfxState++;
+ LZDecompressWram(gBerryBlenderOuter_Gfx, sBerryBlender->tilesBuffer);
+ sBerryBlender->loadGfxState++;
break;
case 4:
- LoadBgTiles(1, sBerryBlenderData->tilesBuffer, GetDecompressedDataSize(gUnknown_08D91DB8), 0);
- sBerryBlenderData->loadGfxState++;
+ LoadBgTiles(1, sBerryBlender->tilesBuffer, GetDecompressedDataSize(gBerryBlenderOuter_Gfx), 0);
+ sBerryBlender->loadGfxState++;
break;
case 5:
- LZDecompressWram(gUnknown_08D927EC, sBerryBlenderData->tilesBuffer);
- sBerryBlenderData->loadGfxState++;
+ LZDecompressWram(gBerryBlenderOuter_Tilemap, sBerryBlender->tilesBuffer);
+ sBerryBlender->loadGfxState++;
break;
case 6:
- CopyToBgTilemapBuffer(1, sBerryBlenderData->tilesBuffer, GetDecompressedDataSize(gUnknown_08D927EC), 0);
+ CopyToBgTilemapBuffer(1, sBerryBlender->tilesBuffer, GetDecompressedDataSize(gBerryBlenderOuter_Tilemap), 0);
CopyBgTilemapBufferToVram(1);
- sBerryBlenderData->loadGfxState++;
+ sBerryBlender->loadGfxState++;
break;
case 7:
- LoadPalette(sBlenderOuterPal, 0x80, 0x20);
- sBerryBlenderData->loadGfxState++;
+ LoadPalette(sBlenderOuter_Pal, 0x80, 0x20);
+ sBerryBlender->loadGfxState++;
break;
case 8:
- LoadSpriteSheet(&sSpriteSheet_BlenderArrow);
- LoadSpriteSheet(&sUnknown_08339BD8);
- LoadSpriteSheet(&sUnknown_08339B38);
- sBerryBlenderData->loadGfxState++;
+ LoadSpriteSheet(&sSpriteSheet_PlayerArrow);
+ LoadSpriteSheet(&sSpriteSheet_Particles);
+ LoadSpriteSheet(&sSpriteSheet_ScoreSymbols);
+ sBerryBlender->loadGfxState++;
break;
case 9:
- LoadSpriteSheet(&sUnknown_08339C24);
- LoadSpriteSheet(&sUnknown_08339C58);
- LoadSpritePalette(&sSpritePal_BlenderArrow);
+ LoadSpriteSheet(&sSpriteSheet_CountdownNumbers);
+ LoadSpriteSheet(&sSpriteSheet_Start);
+ LoadSpritePalette(&sSpritePal_PlayerArrow);
LoadSpritePalette(&sSpritePal_BlenderMisc);
- Free(sBerryBlenderData->tilesBuffer);
- sBerryBlenderData->loadGfxState = 0;
+ Free(sBerryBlender->tilesBuffer);
+ sBerryBlender->loadGfxState = 0;
return TRUE;
}
return FALSE;
}
-static void sub_807F9D0(void)
+static void DrawBlenderBg(void)
{
FillBgTilemapBufferRect_Palette0(0, 0, 0, 0, 0x1E, 0x14);
CopyBgTilemapBufferToVram(0);
@@ -933,7 +1022,7 @@ static void sub_807F9D0(void)
static void InitBerryBlenderWindows(void)
{
- if (InitWindows(sBerryBlender_WindowTemplates))
+ if (InitWindows(sWindowTemplates))
{
s32 i;
@@ -946,24 +1035,27 @@ static void InitBerryBlenderWindows(void)
}
}
+// gSpecialVar_0x8004 is the number of NPC opponents
+// Set to 0 indicates it's a link blender
void DoBerryBlending(void)
{
- if (sBerryBlenderData == NULL)
- sBerryBlenderData = AllocZeroed(sizeof(*sBerryBlenderData));
+ if (sBerryBlender == NULL)
+ sBerryBlender = AllocZeroed(sizeof(*sBerryBlender));
- sBerryBlenderData->gameEndState = 0;
- sBerryBlenderData->mainState = 0;
- sBerryBlenderData->gameEndState = 0;
+ sBerryBlender->gameEndState = 0;
+ sBerryBlender->mainState = 0;
+ sBerryBlender->gameEndState = 0;
- Blender_SetPlayerNamesLocal(gSpecialVar_0x8004);
- SetMainCallback2(sub_807FAC8);
+ InitLocalPlayers(gSpecialVar_0x8004);
+ SetMainCallback2(CB2_LoadBerryBlender);
}
-static void sub_807FAC8(void)
+// Show the blender screen initially and prompt to choose a berry
+static void CB2_LoadBerryBlender(void)
{
s32 i;
- switch (sBerryBlenderData->mainState)
+ switch (sBerryBlender->mainState)
{
case 0:
SetGpuReg(REG_OFFSET_DISPCNT, 0);
@@ -971,68 +1063,69 @@ static void sub_807FAC8(void)
FreeAllSpritePalettes();
SetVBlankCallback(NULL);
ResetBgsAndClearDma3BusyFlags(0);
- InitBgsFromTemplates(1, sBerryBlenderBgTemplates, ARRAY_COUNT(sBerryBlenderBgTemplates));
- SetBgTilemapBuffer(1, sBerryBlenderData->tilemapBuffers[0]);
- SetBgTilemapBuffer(2, sBerryBlenderData->tilemapBuffers[1]);
+ InitBgsFromTemplates(1, sBgTemplates, ARRAY_COUNT(sBgTemplates));
+ SetBgTilemapBuffer(1, sBerryBlender->tilemapBuffers[0]);
+ SetBgTilemapBuffer(2, sBerryBlender->tilemapBuffers[1]);
LoadUserWindowBorderGfx(0, 1, 0xD0);
LoadMessageBoxGfx(0, 0x14, 0xF0);
InitBerryBlenderWindows();
- sBerryBlenderData->mainState++;
- sBerryBlenderData->field_118 = 0;
- sBerryBlenderData->field_116 = 0;
- sBerryBlenderData->field_11A = 0x50;
- sBerryBlenderData->bg_X = 0;
- sBerryBlenderData->bg_Y = 0;
- sBerryBlenderData->loadGfxState = 0;
+ sBerryBlender->mainState++;
+ sBerryBlender->maxProgressBarValue = 0;
+ sBerryBlender->progressBarValue = 0;
+ sBerryBlender->centerScale = 80;
+ sBerryBlender->bg_X = 0;
+ sBerryBlender->bg_Y = 0;
+ sBerryBlender->loadGfxState = 0;
- sub_8082D28();
+ UpdateBlenderCenter();
break;
case 1:
if (LoadBerryBlenderGfx())
{
for (i = 0; i < BLENDER_MAX_PLAYERS; i++)
{
- sBerryBlenderData->syncArrowSpriteIds[i] = CreateSprite(&sBlenderSyncArrow_SpriteTemplate, sBlenderSyncArrowsPos[i][0], sBlenderSyncArrowsPos[i][1], 1);
- StartSpriteAnim(&gSprites[sBerryBlenderData->syncArrowSpriteIds[i]], i + 8);
+ sBerryBlender->playerArrowSpriteIds[i] = CreateSprite(&sSpriteTemplate_PlayerArrow, sPlayerArrowPos[i][0], sPlayerArrowPos[i][1], 1);
+ StartSpriteAnim(&gSprites[sBerryBlender->playerArrowSpriteIds[i]], i + 8);
}
- if (gReceivedRemoteLinkPlayers != 0 && gWirelessCommType)
+ if (gReceivedRemoteLinkPlayers && gWirelessCommType)
{
LoadWirelessStatusIndicatorSpriteGfx();
CreateWirelessStatusIndicatorSprite(0, 0);
}
- SetVBlankCallback(VBlankCB0_BerryBlender);
- sBerryBlenderData->mainState++;
+ SetVBlankCallback(VBlankCB_BerryBlender);
+ sBerryBlender->mainState++;
}
break;
case 2:
BeginNormalPaletteFade(0xFFFFFFFF, 0, 0x10, 0, RGB_BLACK);
- sub_8082D28();
- sBerryBlenderData->mainState++;
+ UpdateBlenderCenter();
+ sBerryBlender->mainState++;
break;
case 3:
- sub_807F9D0();
+ DrawBlenderBg();
if (!gPaletteFade.active)
- sBerryBlenderData->mainState++;
+ sBerryBlender->mainState++;
break;
case 4:
- if (Blender_PrintText(&sBerryBlenderData->textState, sText_BerryBlenderStart, GetPlayerTextSpeedDelay()))
- sBerryBlenderData->mainState++;
+ if (Blender_PrintText(&sBerryBlender->textState, sText_BerryBlenderStart, GetPlayerTextSpeedDelay()))
+ sBerryBlender->mainState++;
break;
case 5:
BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 0x10, RGB_BLACK);
- sBerryBlenderData->mainState++;
+ sBerryBlender->mainState++;
break;
case 6:
if (!gPaletteFade.active)
{
+ // Go to bag menu to choose berry, set callback to StartBlender
FreeAllWindowBuffers();
UnsetBgTilemapBuffer(2);
UnsetBgTilemapBuffer(1);
SetVBlankCallback(NULL);
- ChooseBerrySetCallback(sub_807FFA4);
+ ChooseBerryForMachine(StartBlender);
- sBerryBlenderData->mainState = 0;
+ sBerryBlender->mainState = 0;
}
break;
}
@@ -1043,47 +1136,71 @@ static void sub_807FAC8(void)
UpdatePaletteFade();
}
-static void sub_807FD08(struct Sprite* sprite)
+#define sTargetY data[0]
+#define sX data[1]
+#define sY data[2]
+#define sBounceSpeed data[3]
+#define sYUpSpeed data[4]
+#define sBounces data[5]
+#define sXSpeed data[6]
+#define sYDownSpeed data[7]
+
+// For throwing berries into the machine
+static void SpriteCB_Berry(struct Sprite* sprite)
{
- sprite->data[1] += sprite->data[6];
- sprite->data[2] -= sprite->data[4];
- sprite->data[2] += sprite->data[7];
- sprite->data[0] += sprite->data[7];
- sprite->data[4]--;
+ sprite->sX += sprite->sXSpeed;
+ sprite->sY -= sprite->sYUpSpeed;
+ sprite->sY += sprite->sYDownSpeed;
+ sprite->sTargetY += sprite->sYDownSpeed;
+ sprite->sYUpSpeed--;
- if (sprite->data[0] < sprite->data[2])
+ if (sprite->sTargetY < sprite->sY)
{
- sprite->data[3] = sprite->data[4] = sprite->data[3] - 1;
+ sprite->sBounceSpeed = sprite->sYUpSpeed = sprite->sBounceSpeed - 1;
- if (++sprite->data[5] > 3)
+ if (++sprite->sBounces > 3)
DestroySprite(sprite);
else
- PlaySE(SE_TB_KARA);
+ PlaySE(SE_BALL_TRAY_EXIT);
}
- sprite->pos1.x = sprite->data[1];
- sprite->pos1.y = sprite->data[2];
+ sprite->pos1.x = sprite->sX;
+ sprite->pos1.y = sprite->sY;
}
-static void sub_807FD64(struct Sprite* sprite, s16 a2, s16 a3, s16 a4, s16 a5, s16 a6)
+static void SetBerrySpriteData(struct Sprite* sprite, s16 x, s16 y, s16 bounceSpeed, s16 xSpeed, s16 ySpeed)
{
- sprite->data[0] = a3;
- sprite->data[1] = a2;
- sprite->data[2] = a3;
- sprite->data[3] = a4;
- sprite->data[4] = 10;
- sprite->data[5] = 0;
- sprite->data[6] = a5;
- sprite->data[7] = a6;
- sprite->callback = sub_807FD08;
+ sprite->sTargetY = y;
+ sprite->sX = x;
+ sprite->sY = y;
+ sprite->sBounceSpeed = bounceSpeed;
+ sprite->sYUpSpeed = 10;
+ sprite->sBounces = 0;
+ sprite->sXSpeed = xSpeed;
+ sprite->sYDownSpeed = ySpeed;
+ sprite->callback = SpriteCB_Berry;
}
-static void sub_807FD90(u16 a0, u8 a1)
+#undef sTargetY
+#undef sX
+#undef sY
+#undef sBounceSpeed
+#undef sYUpSpeed
+#undef sBounces
+#undef sXSpeed
+#undef sYDownSpeed
+
+static void CreateBerrySprite(u16 a0, u8 playerId)
{
- u8 spriteId = LoadSpinningBerryPicGfx(a0 + 123, 0, 80, a1 & 1);
- sub_807FD64(&gSprites[spriteId], sUnknown_08339C78[a1][0], sUnknown_08339C78[a1][1], sUnknown_08339C78[a1][2], sUnknown_08339C78[a1][3], sUnknown_08339C78[a1][4]);
+ u8 spriteId = CreateSpinningBerrySprite(a0 + FIRST_BERRY_INDEX - 10, 0, 80, playerId & 1);
+ SetBerrySpriteData(&gSprites[spriteId],
+ sBerrySpriteData[playerId][0],
+ sBerrySpriteData[playerId][1],
+ sBerrySpriteData[playerId][2],
+ sBerrySpriteData[playerId][3],
+ sBerrySpriteData[playerId][4]);
}
-static void Blender_CopyBerryData(struct BlenderBerry* berry, u16 itemId)
+static void ConvertItemToBlenderBerry(struct BlenderBerry* berry, u16 itemId)
{
const struct Berry *berryInfo = GetBerryInfo(ITEM_TO_BERRY(itemId));
@@ -1094,19 +1211,19 @@ static void Blender_CopyBerryData(struct BlenderBerry* berry, u16 itemId)
berry->flavors[FLAVOR_SWEET] = berryInfo->sweet;
berry->flavors[FLAVOR_BITTER] = berryInfo->bitter;
berry->flavors[FLAVOR_SOUR] = berryInfo->sour;
- berry->smoothness = berryInfo->smoothness;
+ berry->flavors[FLAVOR_COUNT] = berryInfo->smoothness;
}
-static void Blender_SetPlayerNamesLocal(u8 opponentsNum)
+static void InitLocalPlayers(u8 opponentsNum)
{
switch (opponentsNum)
{
- case 0:
+ case 0: // Link games have 0 in-game opponents
gInGameOpponentsNo = 0;
break;
case 1:
gInGameOpponentsNo = 1;
- sBerryBlenderData->playersNo = 2;
+ sBerryBlender->numPlayers = 2;
StringCopy(gLinkPlayers[0].name, gSaveBlock2Ptr->playerName);
if (!FlagGet(FLAG_HIDE_LILYCOVE_CONTEST_HALL_BLEND_MASTER))
@@ -1119,7 +1236,7 @@ static void Blender_SetPlayerNamesLocal(u8 opponentsNum)
break;
case 2:
gInGameOpponentsNo = 2;
- sBerryBlenderData->playersNo = 3;
+ sBerryBlender->numPlayers = 3;
StringCopy(gLinkPlayers[0].name, gSaveBlock2Ptr->playerName);
StringCopy(gLinkPlayers[1].name, sBlenderOpponentsNames[BLENDER_DUDE]);
StringCopy(gLinkPlayers[2].name, sBlenderOpponentsNames[BLENDER_LASSIE]);
@@ -1130,7 +1247,7 @@ static void Blender_SetPlayerNamesLocal(u8 opponentsNum)
break;
case 3:
gInGameOpponentsNo = 3;
- sBerryBlenderData->playersNo = 4;
+ sBerryBlender->numPlayers = 4;
StringCopy(gLinkPlayers[0].name, gSaveBlock2Ptr->playerName);
StringCopy(gLinkPlayers[1].name, sBlenderOpponentsNames[BLENDER_MISS]);
StringCopy(gLinkPlayers[2].name, sBlenderOpponentsNames[BLENDER_LADDIE]);
@@ -1144,217 +1261,226 @@ static void Blender_SetPlayerNamesLocal(u8 opponentsNum)
}
}
-static void sub_807FFA4(void)
+static void StartBlender(void)
{
s32 i;
SetGpuReg(REG_OFFSET_DISPCNT, 0);
- if (sBerryBlenderData == NULL)
- sBerryBlenderData = AllocZeroed(sizeof(*sBerryBlenderData));
+ if (sBerryBlender == NULL)
+ sBerryBlender = AllocZeroed(sizeof(*sBerryBlender));
- sBerryBlenderData->mainState = 0;
- sBerryBlenderData->field_10C = 0;
+ sBerryBlender->mainState = 0;
+ sBerryBlender->unk1 = 0;
for (i = 0; i < BLENDER_MAX_PLAYERS; i++)
- sBerryBlenderData->chosenItemId[i] = ITEM_NONE;
+ sBerryBlender->chosenItemId[i] = ITEM_NONE;
- Blender_SetPlayerNamesLocal(gSpecialVar_0x8004);
+ InitLocalPlayers(gSpecialVar_0x8004);
if (gSpecialVar_0x8004 == 0)
- SetMainCallback2(sub_8080018);
+ SetMainCallback2(CB2_StartBlenderLink);
else
- SetMainCallback2(sub_80808D4);
+ SetMainCallback2(CB2_StartBlenderLocal);
}
-static void sub_8080018(void)
+static void CB2_StartBlenderLink(void)
{
s32 i, j;
- switch (sBerryBlenderData->mainState)
+ switch (sBerryBlender->mainState)
{
case 0:
- sub_8080588();
+ InitBlenderBgs();
gLinkType = LINKTYPE_BERRY_BLENDER;
- sBerryBlenderData->field_72 = 0;
+ sBerryBlender->slowdownTimer = 0;
for (i = 0; i < BLENDER_MAX_PLAYERS; i++)
{
- sBerryBlenderData->field_64[i] = 0;
- for (j = 0; j < 3; j++)
+ sBerryBlender->playerContinueResponses[i] = 0;
+ for (j = 0; j < NUM_SCORE_TYPES; j++)
{
- sBerryBlenderData->scores[i][j] = 0;
+ sBerryBlender->scores[i][j] = 0;
}
}
- sBerryBlenderData->playAgainState = 0;
- sBerryBlenderData->max_RPM = 0;
- sBerryBlenderData->loadGfxState = 0;
- sBerryBlenderData->mainState++;
+ sBerryBlender->playAgainState = 0;
+ sBerryBlender->maxRPM = 0;
+ sBerryBlender->loadGfxState = 0;
+ sBerryBlender->mainState++;
break;
case 1:
if (LoadBerryBlenderGfx())
{
- sBerryBlenderData->mainState++;
- sub_8082D28();
+ sBerryBlender->mainState++;
+ UpdateBlenderCenter();
}
break;
case 2:
for (i = 0; i < BLENDER_MAX_PLAYERS; i++)
{
- sBerryBlenderData->syncArrowSprite2Ids[i] = CreateSprite(&sBlenderSyncArrow_SpriteTemplate, sBlenderSyncArrowsPos[i][0], sBlenderSyncArrowsPos[i][1], 1);
- StartSpriteAnim(&gSprites[sBerryBlenderData->syncArrowSprite2Ids[i]], i + 8);
+ sBerryBlender->playerArrowSpriteIds2[i] = CreateSprite(&sSpriteTemplate_PlayerArrow, sPlayerArrowPos[i][0], sPlayerArrowPos[i][1], 1);
+ StartSpriteAnim(&gSprites[sBerryBlender->playerArrowSpriteIds2[i]], i + 8);
}
- if (gReceivedRemoteLinkPlayers != 0 && gWirelessCommType)
+ if (gReceivedRemoteLinkPlayers && gWirelessCommType)
{
LoadWirelessStatusIndicatorSpriteGfx();
CreateWirelessStatusIndicatorSprite(0, 0);
}
- sBerryBlenderData->mainState++;
+ sBerryBlender->mainState++;
break;
case 3:
BeginNormalPaletteFade(0xFFFFFFFF, 0, 0x10, 0, RGB_BLACK);
- sBerryBlenderData->mainState++;
+ sBerryBlender->mainState++;
break;
case 4:
- sub_807F9D0();
+ DrawBlenderBg();
if (!gPaletteFade.active)
{
- sBerryBlenderData->mainState++;
+ sBerryBlender->mainState++;
}
break;
case 5:
- Blender_PrintText(&sBerryBlenderData->textState, sText_CommunicationStandby, 0);
- sBerryBlenderData->mainState = 8;
- sBerryBlenderData->framesToWait = 0;
+ Blender_PrintText(&sBerryBlender->textState, sText_CommunicationStandby, 0);
+ sBerryBlender->mainState = 8;
+ sBerryBlender->framesToWait = 0;
break;
case 8:
- sBerryBlenderData->mainState++;
- sBerryBlenderData->field_114 = 0;
- Blender_CopyBerryData(&sBerryBlenderData->blendedBerries[0], gSpecialVar_ItemId);
- memcpy(gBlockSendBuffer, &sBerryBlenderData->blendedBerries[0], sizeof(struct BlenderBerry));
- sub_800ADF8();
- sBerryBlenderData->framesToWait = 0;
+ // Send berry choice to link partners
+ sBerryBlender->mainState++;
+ sBerryBlender->playerToThrowBerry = 0;
+ ConvertItemToBlenderBerry(&sBerryBlender->blendedBerries[0], gSpecialVar_ItemId);
+ memcpy(gBlockSendBuffer, &sBerryBlender->blendedBerries[0], sizeof(struct BlenderBerry));
+ SetLinkStandbyCallback();
+ sBerryBlender->framesToWait = 0;
break;
case 9:
if (IsLinkTaskFinished())
{
ResetBlockReceivedFlags();
if (GetMultiplayerId() == 0)
- sub_800A4D8(4);
- sBerryBlenderData->mainState++;
+ SendBlockRequest(4);
+ sBerryBlender->mainState++;
}
break;
case 10:
- if (++sBerryBlenderData->framesToWait > 20)
+ if (++sBerryBlender->framesToWait > 20)
{
+ // Wait for partners' berries
ClearDialogWindowAndFrameToTransparent(4, TRUE);
- if (GetBlockReceivedStatus() == sub_800A9D8())
+ if (GetBlockReceivedStatus() == GetLinkPlayerCountAsBitFlags())
{
for (i = 0; i < GetLinkPlayerCount(); i++)
{
- memcpy(&sBerryBlenderData->blendedBerries[i], &gBlockRecvBuffer[i][0], sizeof(struct BlenderBerry));
- sBerryBlenderData->chosenItemId[i] = sBerryBlenderData->blendedBerries[i].itemId;
+ memcpy(&sBerryBlender->blendedBerries[i], &gBlockRecvBuffer[i][0], sizeof(struct BlenderBerry));
+ sBerryBlender->chosenItemId[i] = sBerryBlender->blendedBerries[i].itemId;
}
ResetBlockReceivedFlags();
- sBerryBlenderData->mainState++;
+ sBerryBlender->mainState++;
}
}
break;
case 11:
- sBerryBlenderData->playersNo = GetLinkPlayerCount();
+ sBerryBlender->numPlayers = GetLinkPlayerCount();
+ // Throw 1 player's berry in
for (i = 0; i < BLENDER_MAX_PLAYERS; i++)
{
- if (sBerryBlenderData->field_114 == sUnknown_083399D0[sBerryBlenderData->playersNo - 2][i])
+ if (sBerryBlender->playerToThrowBerry == sPlayerIdMap[sBerryBlender->numPlayers - 2][i])
{
- sub_807FD90(sBerryBlenderData->chosenItemId[sBerryBlenderData->field_114], i);
+ CreateBerrySprite(sBerryBlender->chosenItemId[sBerryBlender->playerToThrowBerry], i);
break;
}
}
- sBerryBlenderData->framesToWait = 0;
- sBerryBlenderData->mainState++;
- sBerryBlenderData->field_114++;
+ sBerryBlender->framesToWait = 0;
+ sBerryBlender->mainState++;
+ sBerryBlender->playerToThrowBerry++;
break;
case 12:
- if (++sBerryBlenderData->framesToWait > 60)
+ if (++sBerryBlender->framesToWait > 60)
{
- if (sBerryBlenderData->field_114 >= sBerryBlenderData->playersNo)
+ if (sBerryBlender->playerToThrowBerry >= sBerryBlender->numPlayers)
{
- sBerryBlenderData->mainState++;
- sBerryBlenderData->arrowPos = sUnknown_083399DC[sUnknown_083399E4[sBerryBlenderData->playersNo - 2]] - 22528;
+ // Finished throwing berries in
+ sBerryBlender->mainState++;
+ sBerryBlender->arrowPos = sArrowStartPos[sArrowStartPosIds[sBerryBlender->numPlayers - 2]] - ARROW_FALL_ROTATION;
}
else
{
- sBerryBlenderData->mainState--;
+ // Haven't finished throwing berries in, go back to prev step
+ sBerryBlender->mainState--;
}
- sBerryBlenderData->framesToWait = 0;
+ sBerryBlender->framesToWait = 0;
}
break;
case 13:
if (IsLinkTaskFinished())
{
- sBerryBlenderData->mainState++;
- sub_8082CB4(&sBerryBlenderData->bgAffineSrc);
- PlaySE(SE_RU_HYUU);
+ sBerryBlender->mainState++;
+ DrawBlenderCenter(&sBerryBlender->bgAffineSrc);
+ PlaySE(SE_FALL);
ShowBg(2);
}
break;
case 14:
SetGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_BG2_ON);
- sBerryBlenderData->arrowPos += 0x200;
- sBerryBlenderData->field_11A += 4;
- if (sBerryBlenderData->field_11A > 0xFF)
+ sBerryBlender->arrowPos += 0x200;
+ sBerryBlender->centerScale += 4;
+ if (sBerryBlender->centerScale > 255)
{
SetGpuRegBits(REG_OFFSET_BG2CNT, 2);
- sBerryBlenderData->mainState++;
- sBerryBlenderData->field_11A = 0x100;
- sBerryBlenderData->arrowPos = sUnknown_083399DC[sUnknown_083399E4[sBerryBlenderData->playersNo - 2]];
- sBerryBlenderData->framesToWait = 0;
- PlaySE(SE_TRACK_DOOR);
- sub_808074C();
- Blender_PrintPlayerNames();
+ sBerryBlender->mainState++;
+ sBerryBlender->centerScale = 256;
+ sBerryBlender->arrowPos = sArrowStartPos[sArrowStartPosIds[sBerryBlender->numPlayers - 2]];
+ sBerryBlender->framesToWait = 0;
+ PlaySE(SE_TRUCK_DOOR);
+ SetPlayerIdMaps();
+ PrintPlayerNames();
}
- sub_8082CB4(&sBerryBlenderData->bgAffineSrc);
+ DrawBlenderCenter(&sBerryBlender->bgAffineSrc);
break;
case 15:
- if (sub_8083380())
+ if (UpdateBlenderLandScreenShake())
{
- sBerryBlenderData->framesToWait = 0;
- sBerryBlenderData->mainState++;
+ sBerryBlender->framesToWait = 0;
+ sBerryBlender->mainState++;
}
- sub_8082CB4(&sBerryBlenderData->bgAffineSrc);
+ DrawBlenderCenter(&sBerryBlender->bgAffineSrc);
break;
case 16:
- CreateSprite(&sUnknown_08339C2C, 120, -16, 3);
- sBerryBlenderData->mainState++;
+ CreateSprite(&sSpriteTemplate_CountdownNumbers, 120, -16, 3);
+ sBerryBlender->mainState++;
+ break;
+ case 17:
+ // Wait here for the countdown
+ // State is progressed in SpriteCB_Start
break;
case 18:
- sBerryBlenderData->mainState++;
+ sBerryBlender->mainState++;
break;
case 19:
- sub_800ADF8();
- sBerryBlenderData->mainState++;
+ SetLinkStandbyCallback();
+ sBerryBlender->mainState++;
break;
case 20:
if (IsLinkTaskFinished())
{
- sub_800A418();
- sBerryBlenderData->mainState++;
+ SetBerryBlenderLinkCallback();
+ sBerryBlender->mainState++;
}
break;
case 21:
- sBerryBlenderData->field_4C = 128;
- sBerryBlenderData->gameFrameTime = 0;
- SetMainCallback2(sub_8081898);
+ sBerryBlender->speed = MIN_ARROW_SPEED;
+ sBerryBlender->gameFrameTime = 0;
+ SetMainCallback2(CB2_PlayBlender);
if (GetCurrentMapMusic() != MUS_CYCLING)
{
- sBerryBlenderData->field_154 = GetCurrentMapMusic();
+ sBerryBlender->savedMusic = GetCurrentMapMusic();
}
PlayBGM(MUS_CYCLING);
break;
}
- Blender_DummiedOutFunc(sBerryBlenderData->bg_X, sBerryBlenderData->bg_Y);
+ Blender_DummiedOutFunc(sBerryBlender->bg_X, sBerryBlender->bg_Y);
RunTasks();
AnimateSprites();
BuildOamBuffer();
@@ -1362,7 +1488,7 @@ static void sub_8080018(void)
UpdatePaletteFade();
}
-static void sub_8080588(void)
+static void InitBlenderBgs(void)
{
SetGpuReg(REG_OFFSET_DISPCNT, 0);
@@ -1370,47 +1496,47 @@ static void sub_8080588(void)
FreeAllSpritePalettes();
ResetTasks();
- SetVBlankCallback(VBlankCB0_BerryBlender);
+ SetVBlankCallback(VBlankCB_BerryBlender);
ResetBgsAndClearDma3BusyFlags(0);
- InitBgsFromTemplates(1, sBerryBlenderBgTemplates, ARRAY_COUNT(sBerryBlenderBgTemplates));
+ InitBgsFromTemplates(1, sBgTemplates, ARRAY_COUNT(sBgTemplates));
- SetBgTilemapBuffer(1, sBerryBlenderData->tilemapBuffers[0]);
- SetBgTilemapBuffer(2, sBerryBlenderData->tilemapBuffers[1]);
+ SetBgTilemapBuffer(1, sBerryBlender->tilemapBuffers[0]);
+ SetBgTilemapBuffer(2, sBerryBlender->tilemapBuffers[1]);
LoadUserWindowBorderGfx(0, 1, 0xD0);
LoadMessageBoxGfx(0, 0x14, 0xF0);
InitBerryBlenderWindows();
- sBerryBlenderData->field_44 = 0;
- sBerryBlenderData->field_4C = 0;
- sBerryBlenderData->arrowPos = 0;
- sBerryBlenderData->max_RPM = 0;
- sBerryBlenderData->bg_X = 0;
- sBerryBlenderData->bg_Y = 0;
+ sBerryBlender->unk0 = 0;
+ sBerryBlender->speed = 0;
+ sBerryBlender->arrowPos = 0;
+ sBerryBlender->maxRPM = 0;
+ sBerryBlender->bg_X = 0;
+ sBerryBlender->bg_Y = 0;
}
-static u8 sub_8080624(u16 arrowPos, u8 playerId)
+static u8 GetArrowProximity(u16 arrowPos, u8 playerId)
{
- u32 var1 = (arrowPos / 0x100) + 0x18;
- u8 arrID = sBerryBlenderData->field_96[playerId];
- u32 var2 = sUnknown_083399E7[arrID];
+ u32 pos = (arrowPos / 256) + 24;
+ u8 arrowId = sBerryBlender->playerIdToArrowId[playerId];
+ u32 hitRangeStart = sArrowHitRangeStart[arrowId];
- if (var1 >= var2 && var1 < var2 + 0x30)
+ if (pos >= hitRangeStart && pos < hitRangeStart + 48)
{
- if (var1 >= var2 + 20 && var1 < var2 + 28)
- return 2;
+ if (pos >= hitRangeStart + 20 && pos < hitRangeStart + 28)
+ return PROXIMITY_BEST;
else
- return 1;
+ return PROXIMITY_GOOD;
}
- return 0;
+ return PROXIMITY_MISS;
}
-static void Blender_SetOpponentsBerryData(u16 playerBerryItemId, u8 playersNum, struct BlenderBerry* playerBerry)
+static void SetOpponentsBerryData(u16 playerBerryItemId, u8 playersNum, struct BlenderBerry* playerBerry)
{
u16 opponentSetId = 0;
u16 opponentBerryId;
- u16 var;
+ u16 berryMasterDiff;
u16 i;
if (playerBerryItemId == ITEM_ENIGMA_BERRY)
@@ -1420,70 +1546,73 @@ static void Blender_SetOpponentsBerryData(u16 playerBerryItemId, u8 playersNum,
if (playerBerry->flavors[opponentSetId] > playerBerry->flavors[i])
opponentSetId = i;
}
- opponentSetId += 5;
+ opponentSetId += NUM_NPC_BERRIES;
}
else
{
- opponentSetId = playerBerryItemId - FIRST_BERRY_INDEX;
- if (opponentSetId >= 5)
- opponentSetId = (opponentSetId % 5) + 5;
+ opponentSetId = ITEM_TO_BERRY(playerBerryItemId) - 1;
+ if (opponentSetId >= NUM_NPC_BERRIES)
+ opponentSetId = (opponentSetId % NUM_NPC_BERRIES) + NUM_NPC_BERRIES;
}
for (i = 0; i < playersNum - 1; i++)
{
opponentBerryId = sOpponentBerrySets[opponentSetId][i];
- var = playerBerryItemId - 163;
+ berryMasterDiff = ITEM_TO_BERRY(playerBerryItemId) - ITEM_TO_BERRY(ITEM_SPELON_BERRY);
if (!FlagGet(FLAG_HIDE_LILYCOVE_CONTEST_HALL_BLEND_MASTER) && gSpecialVar_0x8004 == 1)
{
- opponentSetId %= 5;
- opponentBerryId = sSpecialOpponentBerrySets[opponentSetId];
- if (var <= 4)
- opponentBerryId -= 5;
+ opponentSetId %= ARRAY_COUNT(sBerryMasterBerries);
+ opponentBerryId = sBerryMasterBerries[opponentSetId];
+
+ // If the player's berry is any of the Berry Master's berries,
+ // then use the next lower set of berries
+ if (berryMasterDiff < ARRAY_COUNT(sBerryMasterBerries))
+ opponentBerryId -= ARRAY_COUNT(sBerryMasterBerries);
}
- Blender_SetParticipantBerryData(i + 1, opponentBerryId + FIRST_BERRY_INDEX);
+ SetPlayerBerryData(i + 1, opponentBerryId + FIRST_BERRY_INDEX);
}
}
-static void sub_808074C(void)
+static void SetPlayerIdMaps(void)
{
s32 i, j;
for (i = 0; i < BLENDER_MAX_PLAYERS; i++)
{
- sBerryBlenderData->field_96[i] = 0xFF;
- sBerryBlenderData->field_8E[i] = sUnknown_083399D0[sBerryBlenderData->playersNo - 2][i];
+ sBerryBlender->playerIdToArrowId[i] = NO_PLAYER;
+ sBerryBlender->arrowIdToPlayerId[i] = sPlayerIdMap[sBerryBlender->numPlayers - 2][i];
}
for (j = 0; j < BLENDER_MAX_PLAYERS; j++)
{
for (i = 0; i < BLENDER_MAX_PLAYERS; i++)
{
- if (sBerryBlenderData->field_8E[i] == j)
- sBerryBlenderData->field_96[j] = i;
+ if (sBerryBlender->arrowIdToPlayerId[i] == j)
+ sBerryBlender->playerIdToArrowId[j] = i;
}
}
}
-static void Blender_PrintPlayerNames(void)
+static void PrintPlayerNames(void)
{
s32 i, xPos;
- u32 multiplayerId = 0;
+ u32 playerId = 0;
u8 text[20];
if (gReceivedRemoteLinkPlayers)
- multiplayerId = GetMultiplayerId();
+ playerId = GetMultiplayerId();
for (i = 0; i < BLENDER_MAX_PLAYERS; i++)
{
- if (sBerryBlenderData->field_8E[i] != 0xFF)
+ if (sBerryBlender->arrowIdToPlayerId[i] != NO_PLAYER)
{
- sBerryBlenderData->syncArrowSpriteIds[sBerryBlenderData->field_8E[i]] = sBerryBlenderData->syncArrowSprite2Ids[i];
- StartSpriteAnim(&gSprites[sBerryBlenderData->syncArrowSpriteIds[sBerryBlenderData->field_8E[i]]], i);
+ sBerryBlender->playerArrowSpriteIds[sBerryBlender->arrowIdToPlayerId[i]] = sBerryBlender->playerArrowSpriteIds2[i];
+ StartSpriteAnim(&gSprites[sBerryBlender->playerArrowSpriteIds[sBerryBlender->arrowIdToPlayerId[i]]], i);
text[0] = EOS;
- StringCopy(text, gLinkPlayers[sBerryBlenderData->field_8E[i]].name);
+ StringCopy(text, gLinkPlayers[sBerryBlender->arrowIdToPlayerId[i]].name);
xPos = GetStringCenterAlignXOffset(1, text, 0x38);
- if (multiplayerId == sBerryBlenderData->field_8E[i])
- Blender_AddTextPrinter(i, text, xPos, 1, 0, 2);
+ if (playerId == sBerryBlender->arrowIdToPlayerId[i])
+ Blender_AddTextPrinter(i, text, xPos, 1, 0, 2); // Highlight player's name in red
else
Blender_AddTextPrinter(i, text, xPos, 1, 0, 1);
@@ -1493,167 +1622,174 @@ static void Blender_PrintPlayerNames(void)
}
}
-static void sub_80808D4(void)
+static void CB2_StartBlenderLocal(void)
{
s32 i, j;
- switch (sBerryBlenderData->mainState)
+ switch (sBerryBlender->mainState)
{
case 0:
- sub_800B4C0();
- sub_8080588();
- Blender_SetParticipantBerryData(0, gSpecialVar_ItemId);
- Blender_CopyBerryData(&sBerryBlenderData->blendedBerries[0], gSpecialVar_ItemId);
- Blender_SetOpponentsBerryData(gSpecialVar_ItemId, sBerryBlenderData->playersNo, &sBerryBlenderData->blendedBerries[0]);
+ SetWirelessCommType0();
+ InitBlenderBgs();
+ SetPlayerBerryData(0, gSpecialVar_ItemId);
+ ConvertItemToBlenderBerry(&sBerryBlender->blendedBerries[0], gSpecialVar_ItemId);
+ SetOpponentsBerryData(gSpecialVar_ItemId, sBerryBlender->numPlayers, &sBerryBlender->blendedBerries[0]);
for (i = 0; i < BLENDER_MAX_PLAYERS; i++)
{
- sBerryBlenderData->field_64[i] = 0;
- for (j = 0; j < 3; j++)
+ sBerryBlender->playerContinueResponses[i] = 0;
+ for (j = 0; j < NUM_SCORE_TYPES; j++)
{
- sBerryBlenderData->scores[i][j] = 0;
+ sBerryBlender->scores[i][j] = 0;
}
}
- sBerryBlenderData->playAgainState = 0;
- sBerryBlenderData->loadGfxState = 0;
+ sBerryBlender->playAgainState = 0;
+ sBerryBlender->loadGfxState = 0;
gLinkType = LINKTYPE_BERRY_BLENDER;
- sBerryBlenderData->mainState++;
+ sBerryBlender->mainState++;
break;
case 1:
if (LoadBerryBlenderGfx())
{
- sBerryBlenderData->mainState++;
- sub_8082D28();
+ sBerryBlender->mainState++;
+ UpdateBlenderCenter();
}
break;
case 2:
for (i = 0; i < BLENDER_MAX_PLAYERS; i++)
{
- sBerryBlenderData->syncArrowSprite2Ids[i] = CreateSprite(&sBlenderSyncArrow_SpriteTemplate, sBlenderSyncArrowsPos[i][0], sBlenderSyncArrowsPos[i][1], 1);
- StartSpriteAnim(&gSprites[sBerryBlenderData->syncArrowSprite2Ids[i]], i + 8);
+ sBerryBlender->playerArrowSpriteIds2[i] = CreateSprite(&sSpriteTemplate_PlayerArrow, sPlayerArrowPos[i][0], sPlayerArrowPos[i][1], 1);
+ StartSpriteAnim(&gSprites[sBerryBlender->playerArrowSpriteIds2[i]], i + 8);
}
- sBerryBlenderData->mainState++;
+ sBerryBlender->mainState++;
break;
case 3:
BeginNormalPaletteFade(0xFFFFFFFF, 0, 0x10, 0, RGB_BLACK);
- sBerryBlenderData->mainState++;
- sBerryBlenderData->framesToWait = 0;
+ sBerryBlender->mainState++;
+ sBerryBlender->framesToWait = 0;
break;
case 4:
- if (++sBerryBlenderData->framesToWait == 2)
- sub_807F9D0();
+ if (++sBerryBlender->framesToWait == 2)
+ DrawBlenderBg();
if (!gPaletteFade.active)
- sBerryBlenderData->mainState = 8;
+ sBerryBlender->mainState = 8;
break;
case 8:
- sBerryBlenderData->mainState = 11;
- sBerryBlenderData->field_114 = 0;
+ sBerryBlender->mainState = 11;
+ sBerryBlender->playerToThrowBerry = 0;
break;
case 11:
for (i = 0; i < BLENDER_MAX_PLAYERS; i++)
{
- u32 var = sUnknown_083399D0[sBerryBlenderData->playersNo - 2][i];
- if (sBerryBlenderData->field_114 == var)
+ // Throw 1 player's berry in
+ u32 playerId = sPlayerIdMap[sBerryBlender->numPlayers - 2][i];
+ if (sBerryBlender->playerToThrowBerry == playerId)
{
- sub_807FD90(sBerryBlenderData->chosenItemId[sBerryBlenderData->field_114], i);
+ CreateBerrySprite(sBerryBlender->chosenItemId[sBerryBlender->playerToThrowBerry], i);
break;
}
}
- sBerryBlenderData->framesToWait = 0;
- sBerryBlenderData->mainState++;
- sBerryBlenderData->field_114++;
+ sBerryBlender->framesToWait = 0;
+ sBerryBlender->mainState++;
+ sBerryBlender->playerToThrowBerry++;
break;
case 12:
- if (++sBerryBlenderData->framesToWait > 60)
+ if (++sBerryBlender->framesToWait > 60)
{
- if (sBerryBlenderData->field_114 >= sBerryBlenderData->playersNo)
+ if (sBerryBlender->playerToThrowBerry >= sBerryBlender->numPlayers)
{
- sBerryBlenderData->arrowPos = sUnknown_083399DC[sUnknown_083399E4[sBerryBlenderData->playersNo - 2]] - 22528;
- sBerryBlenderData->mainState++;
+ // Finished throwing berries in
+ sBerryBlender->arrowPos = sArrowStartPos[sArrowStartPosIds[sBerryBlender->numPlayers - 2]] - ARROW_FALL_ROTATION;
+ sBerryBlender->mainState++;
}
else
{
- sBerryBlenderData->mainState--;
+ // Haven't finished throwing berries in, go back to prev step
+ sBerryBlender->mainState--;
}
- sBerryBlenderData->framesToWait = 0;
+ sBerryBlender->framesToWait = 0;
}
break;
case 13:
- sBerryBlenderData->mainState++;
- sub_808074C();
- PlaySE(SE_RU_HYUU);
- sub_8082CB4(&sBerryBlenderData->bgAffineSrc);
+ sBerryBlender->mainState++;
+ SetPlayerIdMaps();
+ PlaySE(SE_FALL);
+ DrawBlenderCenter(&sBerryBlender->bgAffineSrc);
ShowBg(2);
break;
case 14:
SetGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_BG2_ON);
- sBerryBlenderData->arrowPos += 0x200;
- sBerryBlenderData->field_11A += 4;
- if (sBerryBlenderData->field_11A > 0xFF)
+ sBerryBlender->arrowPos += 0x200;
+ sBerryBlender->centerScale += 4;
+ if (sBerryBlender->centerScale > 255)
{
- sBerryBlenderData->mainState++;
- sBerryBlenderData->field_11A = 0x100;
- sBerryBlenderData->arrowPos = sUnknown_083399DC[sUnknown_083399E4[sBerryBlenderData->playersNo - 2]];
+ sBerryBlender->mainState++;
+ sBerryBlender->centerScale = 256;
+ sBerryBlender->arrowPos = sArrowStartPos[sArrowStartPosIds[sBerryBlender->numPlayers - 2]];
SetGpuRegBits(REG_OFFSET_BG2CNT, 2);
- sBerryBlenderData->framesToWait = 0;
- PlaySE(SE_TRACK_DOOR);
- Blender_PrintPlayerNames();
+ sBerryBlender->framesToWait = 0;
+ PlaySE(SE_TRUCK_DOOR);
+ PrintPlayerNames();
}
- sub_8082CB4(&sBerryBlenderData->bgAffineSrc);
+ DrawBlenderCenter(&sBerryBlender->bgAffineSrc);
break;
case 15:
- if (sub_8083380())
+ if (UpdateBlenderLandScreenShake())
{
- sBerryBlenderData->mainState++;
+ sBerryBlender->mainState++;
}
- sub_8082CB4(&sBerryBlenderData->bgAffineSrc);
+ DrawBlenderCenter(&sBerryBlender->bgAffineSrc);
break;
case 16:
- CreateSprite(&sUnknown_08339C2C, 120, -16, 3);
- sBerryBlenderData->mainState++;
+ CreateSprite(&sSpriteTemplate_CountdownNumbers, 120, -16, 3);
+ sBerryBlender->mainState++;
+ break;
+ case 17:
+ // Wait here for the countdown
+ // State is progressed in SpriteCB_Start
break;
case 18:
- sBerryBlenderData->mainState++;
+ sBerryBlender->mainState++;
break;
case 19:
- sBerryBlenderData->mainState++;
+ sBerryBlender->mainState++;
break;
case 20:
- sBerryBlenderData->mainState++;
+ sBerryBlender->mainState++;
break;
case 21:
- sub_8080DF8();
- sBerryBlenderData->field_4C = 0x80;
- sBerryBlenderData->gameFrameTime = 0;
- sBerryBlenderData->field_123 = 0;
- sBerryBlenderData->field_72 = 0;
- SetMainCallback2(sub_8081898);
+ ResetLinkCmds();
+ sBerryBlender->speed = MIN_ARROW_SPEED;
+ sBerryBlender->gameFrameTime = 0;
+ sBerryBlender->perfectOpponents = FALSE;
+ sBerryBlender->slowdownTimer = 0;
+ SetMainCallback2(CB2_PlayBlender);
if (gSpecialVar_0x8004 == 1)
{
if (!FlagGet(FLAG_HIDE_LILYCOVE_CONTEST_HALL_BLEND_MASTER))
- sBerryBlenderData->field_120[0] = CreateTask(sub_8081224, 10);
+ sBerryBlender->opponentTaskIds[0] = CreateTask(Task_HandleBerryMaster, 10);
else
- sBerryBlenderData->field_120[0] = CreateTask(sUnknown_083399EC[0], 10);
+ sBerryBlender->opponentTaskIds[0] = CreateTask(sLocalOpponentTasks[0], 10);
}
if (gSpecialVar_0x8004 > 1)
{
for (i = 0; i < gSpecialVar_0x8004; i++)
- sBerryBlenderData->field_120[i] = CreateTask(sUnknown_083399EC[i], 10 + i);
+ sBerryBlender->opponentTaskIds[i] = CreateTask(sLocalOpponentTasks[i], 10 + i);
}
if (GetCurrentMapMusic() != MUS_CYCLING)
- sBerryBlenderData->field_154 = GetCurrentMapMusic();
+ sBerryBlender->savedMusic = GetCurrentMapMusic();
PlayBGM(MUS_CYCLING);
- PlaySE(SE_MOTER);
- Blender_ControlHitPitch();
+ PlaySE(SE_BERRY_BLENDER);
+ UpdateHitPitch();
break;
}
- Blender_DummiedOutFunc(sBerryBlenderData->bg_X, sBerryBlenderData->bg_Y);
+ Blender_DummiedOutFunc(sBerryBlender->bg_X, sBerryBlender->bg_Y);
RunTasks();
AnimateSprites();
BuildOamBuffer();
@@ -1661,410 +1797,433 @@ static void sub_80808D4(void)
UpdatePaletteFade();
}
-static void sub_8080DF8(void)
+static void ResetLinkCmds(void)
{
s32 i;
- for (i = 0; i < 4; i++)
+ for (i = 0; i < BLENDER_MAX_PLAYERS; i++)
{
- gSendCmd[0] = 0;
- gSendCmd[2] = 0;
- gRecvCmds[i][0] = 0;
- gRecvCmds[i][2] = 0;
+ gSendCmd[BLENDER_COMM_INPUT_STATE] = 0;
+ gSendCmd[BLENDER_COMM_SCORE] = 0;
+ gRecvCmds[i][BLENDER_COMM_INPUT_STATE] = 0;
+ gRecvCmds[i][BLENDER_COMM_SCORE] = 0;
}
}
-static void sub_8080E20(u8 taskId)
+#define tTimer data[0]
+#define tDelay data[1]
+#define tPlayerId data[2]
+
+static void Task_OpponentMiss(u8 taskId)
{
- if(++gTasks[taskId].data[0] > gTasks[taskId].data[1])
+ if(++gTasks[taskId].tTimer > gTasks[taskId].tDelay)
{
- gRecvCmds[gTasks[taskId].data[2]][2] = 0x2345;
+ gRecvCmds[gTasks[taskId].tPlayerId][BLENDER_COMM_SCORE] = LINKCMD_BLENDER_SCORE_MISS;
DestroyTask(taskId);
}
}
-static void sub_8080E6C(u8 a0, u8 a1)
+static void CreateOpponentMissTask(u8 playerId, u8 delay)
{
- u8 taskId = CreateTask(sub_8080E20, 80);
- gTasks[taskId].data[1] = a1;
- gTasks[taskId].data[2] = a0;
+ u8 taskId = CreateTask(Task_OpponentMiss, 80);
+ gTasks[taskId].tDelay = delay;
+ gTasks[taskId].tPlayerId = playerId;
}
-static void sub_8080EA4(u8 taskId)
+#undef tTimer
+#undef tDelay
+#undef tPlayerId
+
+#define tDidInput data[0]
+
+static void Task_HandleOpponent1(u8 taskId)
{
- if (sub_8080624(sBerryBlenderData->arrowPos, 1) == 2)
+ if (GetArrowProximity(sBerryBlender->arrowPos, 1) == PROXIMITY_BEST)
{
- if (gTasks[taskId].data[0] == 0)
+ if (!gTasks[taskId].tDidInput)
{
- if (sBerryBlenderData->field_123 == 0)
+ if (!sBerryBlender->perfectOpponents)
{
u8 rand = Random() / 655;
- if (sBerryBlenderData->field_4C < 500)
+ if (sBerryBlender->speed < 500)
{
if (rand > 75)
- gRecvCmds[1][2] = 0x4523;
+ gRecvCmds[1][BLENDER_COMM_SCORE] = LINKCMD_BLENDER_SCORE_BEST;
else
- gRecvCmds[1][2] = 0x5432;
+ gRecvCmds[1][BLENDER_COMM_SCORE] = LINKCMD_BLENDER_SCORE_GOOD;
- gRecvCmds[1][2] = 0x5432;
+ // BUG: Overrwrote above assignment. Opponent 1 can't get Best at low speed
+ gRecvCmds[1][BLENDER_COMM_SCORE] = LINKCMD_BLENDER_SCORE_GOOD;
}
- else if (sBerryBlenderData->field_4C < 1500)
+ else if (sBerryBlender->speed < 1500)
{
if (rand > 80)
{
- gRecvCmds[1][2] = 0x4523;
+ gRecvCmds[1][BLENDER_COMM_SCORE] = LINKCMD_BLENDER_SCORE_BEST;
}
else
{
u8 value = rand - 21;
if (value < 60)
- gRecvCmds[1][2] = 0x5432;
+ gRecvCmds[1][BLENDER_COMM_SCORE] = LINKCMD_BLENDER_SCORE_GOOD;
else if (rand < 10)
- sub_8080E6C(1, 5);
+ CreateOpponentMissTask(1, 5);
}
}
else if (rand <= 90)
{
u8 value = rand - 71;
if (value < 20)
- gRecvCmds[1][2] = 0x5432;
+ gRecvCmds[1][BLENDER_COMM_SCORE] = LINKCMD_BLENDER_SCORE_GOOD;
else if (rand < 30)
- sub_8080E6C(1, 5);
+ CreateOpponentMissTask(1, 5);
}
else
{
- gRecvCmds[1][2] = 0x4523;
+ gRecvCmds[1][BLENDER_COMM_SCORE] = LINKCMD_BLENDER_SCORE_BEST;
}
}
else
{
- gRecvCmds[1][2] = 0x4523;
+ gRecvCmds[1][BLENDER_COMM_SCORE] = LINKCMD_BLENDER_SCORE_BEST;
}
- gTasks[taskId].data[0] = 1;
+ gTasks[taskId].tDidInput = TRUE;
}
}
else
{
- gTasks[taskId].data[0] = 0;
+ gTasks[taskId].tDidInput = FALSE;
}
}
-static void sub_8080FD0(u8 taskId)
+static void Task_HandleOpponent2(u8 taskId)
{
- u32 var1 = (sBerryBlenderData->arrowPos + 0x1800) & 0xFFFF;
- u32 var2 = sBerryBlenderData->field_96[2] & 0xFF;
- if ((var1 >> 8) > sUnknown_083399E7[var2] + 20 && (var1 >> 8) < sUnknown_083399E7[var2] + 40)
+ u32 var1 = (sBerryBlender->arrowPos + 0x1800) & 0xFFFF;
+ u32 arrowId = sBerryBlender->playerIdToArrowId[2] & 0xFF;
+ if ((var1 >> 8) > sArrowHitRangeStart[arrowId] + 20 && (var1 >> 8) < sArrowHitRangeStart[arrowId] + 40)
{
- if (gTasks[taskId].data[0] == 0)
+ if (!gTasks[taskId].tDidInput)
{
- if (sBerryBlenderData->field_123 == 0)
+ if (!sBerryBlender->perfectOpponents)
{
u8 rand = Random() / 655;
- if (sBerryBlenderData->field_4C < 500)
+ if (sBerryBlender->speed < 500)
{
if (rand > 66)
- gRecvCmds[2][2] = 0x4523;
+ gRecvCmds[2][BLENDER_COMM_SCORE] = LINKCMD_BLENDER_SCORE_BEST;
else
- gRecvCmds[2][2] = 0x5432;
+ gRecvCmds[2][BLENDER_COMM_SCORE] = LINKCMD_BLENDER_SCORE_GOOD;
}
else
{
u8 value;
if (rand > 65)
- gRecvCmds[2][2] = 0x4523;
+ gRecvCmds[2][BLENDER_COMM_SCORE] = LINKCMD_BLENDER_SCORE_BEST;
value = rand - 41;
if (value < 25)
- gRecvCmds[2][2] = 0x5432;
+ gRecvCmds[2][BLENDER_COMM_SCORE] = LINKCMD_BLENDER_SCORE_GOOD;
if (rand < 10)
- sub_8080E6C(2, 5);
+ CreateOpponentMissTask(2, 5);
}
- gTasks[taskId].data[0] = 1;
+ gTasks[taskId].tDidInput = TRUE;
}
else
{
- gRecvCmds[2][2] = 0x4523;
- gTasks[taskId].data[0] = 1;
+ gRecvCmds[2][BLENDER_COMM_SCORE] = LINKCMD_BLENDER_SCORE_BEST;
+ gTasks[taskId].tDidInput = TRUE;
}
}
}
else
{
- gTasks[taskId].data[0] = 0;
+ gTasks[taskId].tDidInput = FALSE;
}
}
-static void sub_80810F8(u8 taskId)
+static void Task_HandleOpponent3(u8 taskId)
{
- u32 var1, var2;
-
- var1 = (sBerryBlenderData->arrowPos + 0x1800) & 0xFFFF;
- var2 = sBerryBlenderData->field_96[3] & 0xFF;
- if ((var1 >> 8) > sUnknown_083399E7[var2] + 20 && (var1 >> 8) < sUnknown_083399E7[var2] + 40)
+ u32 var1 = (sBerryBlender->arrowPos + 0x1800) & 0xFFFF;
+ u32 arrowId = sBerryBlender->playerIdToArrowId[3] & 0xFF;
+ if ((var1 >> 8) > sArrowHitRangeStart[arrowId] + 20 && (var1 >> 8) < sArrowHitRangeStart[arrowId] + 40)
{
if (gTasks[taskId].data[0] == 0)
{
- if (sBerryBlenderData->field_123 == 0)
+ if (!sBerryBlender->perfectOpponents)
{
u8 rand = (Random() / 655);
- if (sBerryBlenderData->field_4C < 500)
+ if (sBerryBlender->speed < 500)
{
if (rand > 88)
- gRecvCmds[3][2] = 0x4523;
+ gRecvCmds[3][BLENDER_COMM_SCORE] = LINKCMD_BLENDER_SCORE_BEST;
else
- gRecvCmds[3][2] = 0x5432;
+ gRecvCmds[3][BLENDER_COMM_SCORE] = LINKCMD_BLENDER_SCORE_GOOD;
}
else
{
if (rand > 60)
{
- gRecvCmds[3][2] = 0x4523;
+ gRecvCmds[3][BLENDER_COMM_SCORE] = LINKCMD_BLENDER_SCORE_BEST;
}
else
{
s8 value = rand - 56; // makes me wonder what the original code was
u8 value2 = value;
if (value2 < 5)
- gRecvCmds[3][2] = 0x5432;
+ gRecvCmds[3][BLENDER_COMM_SCORE] = LINKCMD_BLENDER_SCORE_GOOD;
}
if (rand < 5)
- sub_8080E6C(3, 5);
+ CreateOpponentMissTask(3, 5);
}
- gTasks[taskId].data[0] = 1;
+ gTasks[taskId].tDidInput = TRUE;
}
else
{
- gRecvCmds[3][2] = 0x4523;
- gTasks[taskId].data[0] = 1;
+ gRecvCmds[3][BLENDER_COMM_SCORE] = LINKCMD_BLENDER_SCORE_BEST;
+ gTasks[taskId].tDidInput = TRUE;
}
}
}
else
{
- gTasks[taskId].data[0] = 0;
+ gTasks[taskId].tDidInput = FALSE;
}
}
-static void sub_8081224(u8 taskId)
+static void Task_HandleBerryMaster(u8 taskId)
{
- if (sub_8080624(sBerryBlenderData->arrowPos, 1) == 2)
+ if (GetArrowProximity(sBerryBlender->arrowPos, 1) == PROXIMITY_BEST)
{
- if (gTasks[taskId].data[0] == 0)
+ if (!gTasks[taskId].tDidInput)
{
- gRecvCmds[1][2] = 0x4523;
- gTasks[taskId].data[0] = 1;
+ gRecvCmds[1][BLENDER_COMM_SCORE] = LINKCMD_BLENDER_SCORE_BEST;
+ gTasks[taskId].tDidInput = TRUE;
}
}
else
{
- gTasks[taskId].data[0] = 0;
+ gTasks[taskId].tDidInput = FALSE;
}
}
-static void sub_8081288(u16 a0, u8 a1)
+#undef tDidInput
+
+static void CreateScoreSymbolSprite(u16 cmd, u8 arrowId)
{
u8 spriteId;
- spriteId = CreateSprite(&sUnknown_08339B40,
- sBlenderSyncArrowsPos[a1][0] - (10 * sUnknown_083399C0[a1][0]),
- sBlenderSyncArrowsPos[a1][1] - (10 * sUnknown_083399C0[a1][1]),
+ spriteId = CreateSprite(&sSpriteTemplate_ScoreSymbols,
+ sPlayerArrowPos[arrowId][0] - (10 * sPlayerArrowQuadrant[arrowId][0]),
+ sPlayerArrowPos[arrowId][1] - (10 * sPlayerArrowQuadrant[arrowId][1]),
1);
- if (a0 == 0x4523)
+ if (cmd == LINKCMD_BLENDER_SCORE_BEST)
{
- StartSpriteAnim(&gSprites[spriteId], 2);
- gSprites[spriteId].callback = sub_8082F9C;
- PlaySE(SE_RU_GASHIN);
+ StartSpriteAnim(&gSprites[spriteId], SCOREANIM_BEST_FLASH);
+ gSprites[spriteId].callback = SpriteCB_ScoreSymbolBest;
+ PlaySE(SE_ICE_STAIRS);
}
- else if (a0 == 0x5432)
+ else if (cmd == LINKCMD_BLENDER_SCORE_GOOD)
{
- StartSpriteAnim(&gSprites[spriteId], 0);
- PlaySE(SE_SEIKAI);
+ StartSpriteAnim(&gSprites[spriteId], SCOREANIM_GOOD);
+ PlaySE(SE_SUCCESS);
}
- else if (a0 == 0x2345)
+ else if (cmd == LINKCMD_BLENDER_SCORE_MISS)
{
- StartSpriteAnim(&gSprites[spriteId], 1);
- PlaySE(SE_HAZURE);
+ StartSpriteAnim(&gSprites[spriteId], SCOREANIM_MISS);
+ PlaySE(SE_FAILURE);
}
- sub_8082E84();
+ CreateParticleSprites();
}
-static void sub_8081370(u16 a0)
+static void UpdateSpeedFromHit(u16 cmd)
{
- Blender_ControlHitPitch();
- switch (a0)
+ UpdateHitPitch();
+ switch (cmd)
{
- case 0x4523:
- if (sBerryBlenderData->field_4C < 1500)
- sBerryBlenderData->field_4C += (0x180 / sUnknown_08339CC3[sBerryBlenderData->playersNo]);
+ case LINKCMD_BLENDER_SCORE_BEST:
+ if (sBerryBlender->speed < 1500) {
+ sBerryBlender->speed += (384 / sNumPlayersToSpeedDivisor[sBerryBlender->numPlayers]);
+ }
else
{
- sBerryBlenderData->field_4C += (128 / sUnknown_08339CC3[sBerryBlenderData->playersNo]);
- sub_80832BC(&sBerryBlenderData->bg_X, (sBerryBlenderData->field_4C / 100) - 10);
- sub_80832BC(&sBerryBlenderData->bg_Y, (sBerryBlenderData->field_4C / 100) - 10);
+ sBerryBlender->speed += (128 / sNumPlayersToSpeedDivisor[sBerryBlender->numPlayers]);
+ ShakeBgCoordForHit(&sBerryBlender->bg_X, (sBerryBlender->speed / 100) - 10);
+ ShakeBgCoordForHit(&sBerryBlender->bg_Y, (sBerryBlender->speed / 100) - 10);
}
break;
- case 0x5432:
- if (sBerryBlenderData->field_4C < 1500)
- sBerryBlenderData->field_4C += (0x100 / sUnknown_08339CC3[sBerryBlenderData->playersNo]);
+ case LINKCMD_BLENDER_SCORE_GOOD:
+ if (sBerryBlender->speed < 1500)
+ sBerryBlender->speed += (256 / sNumPlayersToSpeedDivisor[sBerryBlender->numPlayers]);
break;
- case 0x2345:
- sBerryBlenderData->field_4C -= (0x100 / sUnknown_08339CC3[sBerryBlenderData->playersNo]);
- if (sBerryBlenderData->field_4C < 0x80)
- sBerryBlenderData->field_4C = 0x80;
+ case LINKCMD_BLENDER_SCORE_MISS:
+ sBerryBlender->speed -= (256 / sNumPlayersToSpeedDivisor[sBerryBlender->numPlayers]);
+ if (sBerryBlender->speed < MIN_ARROW_SPEED)
+ sBerryBlender->speed = MIN_ARROW_SPEED;
break;
}
}
-static bool32 sub_80814B0(u16 arg0, u16 arg1, u16 arg2)
+// Return TRUE if the received command matches the corresponding Link or RFU command
+static bool32 CheckRecvCmdMatches(u16 recvCmd, u16 linkCmd, u16 rfuCmd)
{
- if (gReceivedRemoteLinkPlayers != 0 && gWirelessCommType)
+ if (gReceivedRemoteLinkPlayers && gWirelessCommType)
{
- if ((arg0 & 0xFF00) == arg2)
+ if ((recvCmd & 0xFF00) == rfuCmd)
return TRUE;
}
else
{
- if (arg0 == arg1)
+ if (recvCmd == linkCmd)
return TRUE;
}
return FALSE;
}
-static void sub_80814F4(void)
+static void UpdateOpponentScores(void)
{
s32 i;
if (gSpecialVar_0x8004 != 0)
{
- if (gSendCmd[2] != 0)
+ // Local game, "send" players score to itself
+ if (gSendCmd[BLENDER_COMM_SCORE] != 0)
{
- gRecvCmds[0][2] = gSendCmd[2];
- gRecvCmds[0][0] = 0x4444;
- gSendCmd[2] = 0;
+ gRecvCmds[0][BLENDER_COMM_SCORE] = gSendCmd[BLENDER_COMM_SCORE];
+ gRecvCmds[0][BLENDER_COMM_INPUT_STATE] = LINKCMD_BLENDER_SEND_KEYS;
+ gSendCmd[BLENDER_COMM_SCORE] = 0;
}
- for (i = 1; i < 4; i++)
+
+ // Local game, simulate NPCs sending keys
+ // Their actual inputs are handled by Task_HandleOpponent
+ for (i = 1; i < BLENDER_MAX_PLAYERS; i++)
{
- if (gRecvCmds[i][2] != 0)
- gRecvCmds[i][0] = 0x4444;
+ if (gRecvCmds[i][BLENDER_COMM_SCORE] != 0)
+ gRecvCmds[i][BLENDER_COMM_INPUT_STATE] = LINKCMD_BLENDER_SEND_KEYS;
}
}
- for (i = 0; i < sBerryBlenderData->playersNo; i++)
+ for (i = 0; i < sBerryBlender->numPlayers; i++)
{
- if (sub_80814B0(gRecvCmds[i][0], 0x4444, 0x4400))
+ if (CheckRecvCmdMatches(gRecvCmds[i][BLENDER_COMM_INPUT_STATE], LINKCMD_BLENDER_SEND_KEYS, RFUCMD_BLENDER_SEND_KEYS))
{
- u32 var = sBerryBlenderData->field_96[i];
- if (gRecvCmds[i][2] == 0x4523)
+ u32 arrowId = sBerryBlender->playerIdToArrowId[i];
+ if (gRecvCmds[i][BLENDER_COMM_SCORE] == LINKCMD_BLENDER_SCORE_BEST)
{
- sub_8081370(0x4523);
- sBerryBlenderData->field_116 += (sBerryBlenderData->field_4C / 55);
- if (sBerryBlenderData->field_116 >= 1000)
- sBerryBlenderData->field_116 = 1000;
- sub_8081288(0x4523, var);
- sBerryBlenderData->scores[i][BLENDER_SCORE_BEST]++;
+ UpdateSpeedFromHit(LINKCMD_BLENDER_SCORE_BEST);
+ sBerryBlender->progressBarValue += (sBerryBlender->speed / 55);
+ if (sBerryBlender->progressBarValue >= MAX_PROGRESS_BAR)
+ sBerryBlender->progressBarValue = MAX_PROGRESS_BAR;
+ CreateScoreSymbolSprite(LINKCMD_BLENDER_SCORE_BEST, arrowId);
+ sBerryBlender->scores[i][SCORE_BEST]++;
}
- else if (gRecvCmds[i][2] == 0x5432)
+ else if (gRecvCmds[i][BLENDER_COMM_SCORE] == LINKCMD_BLENDER_SCORE_GOOD)
{
- sub_8081370(0x5432);
- sBerryBlenderData->field_116 += (sBerryBlenderData->field_4C / 70);
- sub_8081288(0x5432, var);
- sBerryBlenderData->scores[i][BLENDER_SCORE_GOOD]++;
+ UpdateSpeedFromHit(LINKCMD_BLENDER_SCORE_GOOD);
+ sBerryBlender->progressBarValue += (sBerryBlender->speed / 70);
+ CreateScoreSymbolSprite(LINKCMD_BLENDER_SCORE_GOOD, arrowId);
+ sBerryBlender->scores[i][SCORE_GOOD]++;
}
- else if (gRecvCmds[i][2] == 0x2345)
+ else if (gRecvCmds[i][BLENDER_COMM_SCORE] == LINKCMD_BLENDER_SCORE_MISS)
{
- sub_8081288(0x2345, var);
- sub_8081370(0x2345);
- if (sBerryBlenderData->scores[i][BLENDER_SCORE_MISS] < 999)
- sBerryBlenderData->scores[i][BLENDER_SCORE_MISS]++;
+ CreateScoreSymbolSprite(LINKCMD_BLENDER_SCORE_MISS, arrowId);
+ UpdateSpeedFromHit(LINKCMD_BLENDER_SCORE_MISS);
+ if (sBerryBlender->scores[i][SCORE_MISS] < 999)
+ sBerryBlender->scores[i][SCORE_MISS]++;
}
- if (gRecvCmds[i][2] == 0x2345 || gRecvCmds[2][i] == 0x4523 || gRecvCmds[2][i] == 0x5432) // could be a bug, 2 and i are reversed
+
+ // BUG: Should [i][BLENDER_COMM_SCORE] below, not [BLENDER_COMM_SCORE][i]
+ // As a result the music tempo updates if any player misses, but only if 1 specific player hits
+ if (gRecvCmds[i][BLENDER_COMM_SCORE] == LINKCMD_BLENDER_SCORE_MISS
+ || gRecvCmds[BLENDER_COMM_SCORE][i] == LINKCMD_BLENDER_SCORE_BEST
+ || gRecvCmds[BLENDER_COMM_SCORE][i] == LINKCMD_BLENDER_SCORE_GOOD)
{
- if (sBerryBlenderData->field_4C > 1500)
- m4aMPlayTempoControl(&gMPlayInfo_BGM, ((sBerryBlenderData->field_4C - 750) / 20) + 256);
+ if (sBerryBlender->speed > 1500)
+ m4aMPlayTempoControl(&gMPlayInfo_BGM, ((sBerryBlender->speed - 750) / 20) + 256);
else
- m4aMPlayTempoControl(&gMPlayInfo_BGM, 0x100);
+ m4aMPlayTempoControl(&gMPlayInfo_BGM, 256);
}
}
}
if (gSpecialVar_0x8004 != 0)
{
- for (i = 0; i < sBerryBlenderData->playersNo; i++)
+ for (i = 0; i < sBerryBlender->numPlayers; i++)
{
- gRecvCmds[i][0] = 0;
- gRecvCmds[i][2] = 0;
+ gRecvCmds[i][BLENDER_COMM_INPUT_STATE] = 0;
+ gRecvCmds[i][BLENDER_COMM_SCORE] = 0;
}
}
}
-static void sub_8081744(void)
+static void HandlePlayerInput(void)
{
- u8 var2;
- bool8 A_pressed = FALSE;
+ u8 arrowId;
+ bool8 pressedA = FALSE;
u8 playerId = 0;
- if (gReceivedRemoteLinkPlayers != 0)
+ if (gReceivedRemoteLinkPlayers)
playerId = GetMultiplayerId();
- var2 = sBerryBlenderData->field_96[playerId];
+ arrowId = sBerryBlender->playerIdToArrowId[playerId];
- if (sBerryBlenderData->gameEndState == 0)
+ if (sBerryBlender->gameEndState == 0)
{
- if (gSaveBlock2Ptr->optionsButtonMode == OPTIONS_BUTTON_MODE_L_EQUALS_A && gMain.newKeys & A_BUTTON)
+ if (gSaveBlock2Ptr->optionsButtonMode == OPTIONS_BUTTON_MODE_L_EQUALS_A && JOY_NEW(A_BUTTON))
{
- if ((gMain.heldKeysRaw & (A_BUTTON | L_BUTTON)) != (A_BUTTON | L_BUTTON))
- A_pressed = TRUE;
+ if (JOY_HELD_RAW(A_BUTTON | L_BUTTON) != (A_BUTTON | L_BUTTON))
+ pressedA = TRUE;
}
- else if (gMain.newKeys & A_BUTTON)
+ else if (JOY_NEW(A_BUTTON))
{
- A_pressed = TRUE;
+ pressedA = TRUE;
}
- if (A_pressed)
+ if (pressedA)
{
- u8 var3;
- StartSpriteAnim(&gSprites[sBerryBlenderData->syncArrowSpriteIds[sBerryBlenderData->field_8E[var2]]], var2 + 4);
- var3 = sub_8080624(sBerryBlenderData->arrowPos, playerId);
+ u8 proximity;
+ StartSpriteAnim(&gSprites[sBerryBlender->playerArrowSpriteIds[sBerryBlender->arrowIdToPlayerId[arrowId]]], arrowId + 4);
+ proximity = GetArrowProximity(sBerryBlender->arrowPos, playerId);
- if (var3 == 2)
- gSendCmd[2] = 0x4523;
- else if (var3 == 1)
- gSendCmd[2] = 0x5432;
+ if (proximity == PROXIMITY_BEST)
+ gSendCmd[BLENDER_COMM_SCORE] = LINKCMD_BLENDER_SCORE_BEST;
+ else if (proximity == PROXIMITY_GOOD)
+ gSendCmd[BLENDER_COMM_SCORE] = LINKCMD_BLENDER_SCORE_GOOD;
else
- gSendCmd[2] = 0x2345;
+ gSendCmd[BLENDER_COMM_SCORE] = LINKCMD_BLENDER_SCORE_MISS;
}
}
- if (++sBerryBlenderData->field_72 > 5)
+ if (++sBerryBlender->slowdownTimer > 5)
{
- if (sBerryBlenderData->field_4C > 128)
- sBerryBlenderData->field_4C--;
- sBerryBlenderData->field_72 = 0;
+ if (sBerryBlender->speed > MIN_ARROW_SPEED)
+ sBerryBlender->speed--;
+ sBerryBlender->slowdownTimer = 0;
}
- if (gEnableContestDebugging && gMain.newKeys & L_BUTTON)
- sBerryBlenderData->field_123 ^= 1;
+
+ if (gEnableContestDebugging && JOY_NEW(L_BUTTON))
+ sBerryBlender->perfectOpponents ^= 1;
}
-static void sub_8081898(void)
+static void CB2_PlayBlender(void)
{
- sub_8082D28();
+ UpdateBlenderCenter();
- if (sBerryBlenderData->gameFrameTime < (99 * 60 * 60) + (59 * 60)) // game time can't be longer than 99 minutes and 59 seconds, can't print 3 digits
- sBerryBlenderData->gameFrameTime++;
+ if (sBerryBlender->gameFrameTime < (99 * 60 * 60) + (59 * 60)) // game time can't be longer than 99 minutes and 59 seconds, can't print 3 digits
+ sBerryBlender->gameFrameTime++;
- sub_8081744();
- SetLinkDebugValues((u16)(sBerryBlenderData->field_4C), sBerryBlenderData->field_116);
- sub_80814F4();
- sub_8083140(sBerryBlenderData->field_116, 1000);
- sub_8083230(sBerryBlenderData->field_4C);
- sub_808330C();
- sub_8082AD4();
- if (sBerryBlenderData->gameEndState == 0 && sBerryBlenderData->field_118 >= 1000)
+ HandlePlayerInput();
+ SetLinkDebugValues((u16)(sBerryBlender->speed), sBerryBlender->progressBarValue);
+ UpdateOpponentScores();
+ TryUpdateProgressBar(sBerryBlender->progressBarValue, MAX_PROGRESS_BAR);
+ UpdateRPM(sBerryBlender->speed);
+ RestoreBgCoords();
+ ProcessLinkPlayerCmds();
+ if (sBerryBlender->gameEndState == 0 && sBerryBlender->maxProgressBarValue >= MAX_PROGRESS_BAR)
{
- sBerryBlenderData->field_116 = 1000;
- sBerryBlenderData->gameEndState = 1;
- SetMainCallback2(CB2_HandleBlenderEndGame);
+ sBerryBlender->progressBarValue = MAX_PROGRESS_BAR;
+ sBerryBlender->gameEndState = 1;
+ SetMainCallback2(CB2_EndBlenderGame);
}
- Blender_DummiedOutFunc(sBerryBlenderData->bg_X, sBerryBlenderData->bg_Y);
+ Blender_DummiedOutFunc(sBerryBlender->bg_X, sBerryBlender->bg_Y);
RunTasks();
AnimateSprites();
BuildOamBuffer();
@@ -2077,357 +2236,380 @@ static void Blender_DummiedOutFunc(s16 a0, s16 a1)
}
-static bool8 sub_8081964(struct BlenderBerry* berries, u8 index1, u8 index2)
+static bool8 AreBlenderBerriesSame(struct BlenderBerry* berries, u8 a, u8 b)
{
- if (berries[index1].itemId != berries[index2].itemId
- || (StringCompare(berries[index1].name, berries[index2].name) == 0
- && (berries[index1].flavors[FLAVOR_SPICY] == berries[index2].flavors[FLAVOR_SPICY]
- && berries[index1].flavors[FLAVOR_DRY] == berries[index2].flavors[FLAVOR_DRY]
- && berries[index1].flavors[FLAVOR_SWEET] == berries[index2].flavors[FLAVOR_SWEET]
- && berries[index1].flavors[FLAVOR_BITTER] == berries[index2].flavors[FLAVOR_BITTER]
- && berries[index1].flavors[FLAVOR_SOUR] == berries[index2].flavors[FLAVOR_SOUR]
- && berries[index1].smoothness == berries[index2].smoothness)))
+ // First check to itemId is pointless (and wrong anyway?), always false when this is called
+ // Only used to determine if two enigma berries are equivalent
+ if (berries[a].itemId != berries[b].itemId
+ || (StringCompare(berries[a].name, berries[b].name) == 0
+ && (berries[a].flavors[FLAVOR_SPICY] == berries[b].flavors[FLAVOR_SPICY]
+ && berries[a].flavors[FLAVOR_DRY] == berries[b].flavors[FLAVOR_DRY]
+ && berries[a].flavors[FLAVOR_SWEET] == berries[b].flavors[FLAVOR_SWEET]
+ && berries[a].flavors[FLAVOR_BITTER] == berries[b].flavors[FLAVOR_BITTER]
+ && berries[a].flavors[FLAVOR_SOUR] == berries[b].flavors[FLAVOR_SOUR]
+ && berries[a].flavors[FLAVOR_COUNT] == berries[b].flavors[FLAVOR_COUNT])))
return TRUE;
else
return FALSE;
}
-static u32 Blender_GetPokeblockColor(struct BlenderBerry* berries, s16* a1, u8 playersNo, u8 a3)
+static u32 CalculatePokeblockColor(struct BlenderBerry* berries, s16* _flavors, u8 numPlayers, u8 negativeFlavors)
{
- s16 vars[6];
- s32 i;
- s32 r6;
- u8 r2;
+ s16 flavors[FLAVOR_COUNT + 1];
+ s32 i, j;
+ u8 numFlavors;
- for (i = 0; i < 6; i++)
- vars[i] = a1[i];
+ for (i = 0; i < FLAVOR_COUNT + 1; i++)
+ flavors[i] = _flavors[i];
- r6 = 0;
- for (i = 0; i < 5; i++)
+ j = 0;
+ for (i = 0; i < FLAVOR_COUNT; i++)
{
- if (vars[i] == 0)
- r6++;
+ if (flavors[i] == 0)
+ j++;
}
- if (r6 == 5 || a3 > 3)
- return 12;
- for (i = 0; i < playersNo; i++)
+
+ // If all flavors are 0, or at least 3 were negative/0
+ // or if players used the same berry, color is black
+ if (j == 5 || negativeFlavors > 3)
+ return PBLOCK_CLR_BLACK;
+
+ for (i = 0; i < numPlayers; i++)
{
- for (r6 = 0; r6 < playersNo; r6++)
+ for (j = 0; j < numPlayers; j++)
{
- if (berries[i].itemId == berries[r6].itemId && i != r6
- && (berries[i].itemId != ITEM_ENIGMA_BERRY || sub_8081964(berries, i, r6)))
- return 12;
+ if (berries[i].itemId == berries[j].itemId && i != j
+ && (berries[i].itemId != ITEM_ENIGMA_BERRY || AreBlenderBerriesSame(berries, i, j)))
+ return PBLOCK_CLR_BLACK;
}
}
- r2 = 0;
- for (r2 = 0, i = 0; i < 5; i++)
+
+ numFlavors = 0;
+ for (numFlavors = 0, i = 0; i < FLAVOR_COUNT; i++)
{
- if (vars[i] > 0)
- r2++;
+ if (flavors[i] > 0)
+ numFlavors++;
}
- if (r2 > 3)
- return 13;
- if (r2 == 3)
- return 11;
- for (i = 0; i < 5; i++)
+
+ // Check for special colors (White/Gray/Gold)
+ if (numFlavors > 3)
+ return PBLOCK_CLR_WHITE;
+
+ if (numFlavors == 3)
+ return PBLOCK_CLR_GRAY;
+
+ for (i = 0; i < FLAVOR_COUNT; i++)
{
- if (vars[i] > 50)
- return 14;
- }
- if (r2 == 1 && vars[0] > 0)
- return 1;
- if (r2 == 1 && vars[1] > 0)
- return 2;
- if (r2 == 1 && vars[2] > 0)
- return 3;
- if (r2 == 1 && vars[3] > 0)
- return 4;
- if (r2 == 1 && vars[4] > 0)
- return 5;
- if (r2 == 2)
- {
- s32 var = 0;
- for (i = 0; i < 5; i++)
+ if (flavors[i] > 50)
+ return PBLOCK_CLR_GOLD;
+ }
+
+ // Only 1 flavor present, return corresponding color
+ if (numFlavors == 1 && flavors[FLAVOR_SPICY] > 0)
+ return PBLOCK_CLR_RED;
+ if (numFlavors == 1 && flavors[FLAVOR_DRY] > 0)
+ return PBLOCK_CLR_BLUE;
+ if (numFlavors == 1 && flavors[FLAVOR_SWEET] > 0)
+ return PBLOCK_CLR_PINK;
+ if (numFlavors == 1 && flavors[FLAVOR_BITTER] > 0)
+ return PBLOCK_CLR_GREEN;
+ if (numFlavors == 1 && flavors[FLAVOR_SOUR] > 0)
+ return PBLOCK_CLR_YELLOW;
+
+ if (numFlavors == 2)
+ {
+ // Determine which 2 flavors are present
+ s32 idx = 0;
+ for (i = 0; i < FLAVOR_COUNT; i++)
{
- if (vars[i] > 0)
- sUnknown_03000DF8[var++] = i;
+ if (flavors[i] > 0)
+ sPokeblockPresentFlavors[idx++] = i;
}
- if (vars[sUnknown_03000DF8[0]] >= vars[sUnknown_03000DF8[1]])
+ // Use the stronger flavor to determine color
+ // The weaker flavor is returned in the upper 16 bits, but this is ignored in the color assignment
+ if (flavors[sPokeblockPresentFlavors[0]] >= flavors[sPokeblockPresentFlavors[1]])
{
- if (sUnknown_03000DF8[0] == 0)
- return (sUnknown_03000DF8[1] << 16) | 6;
- if (sUnknown_03000DF8[0] == 1)
- return (sUnknown_03000DF8[1] << 16) | 7;
- if (sUnknown_03000DF8[0] == 2)
- return (sUnknown_03000DF8[1] << 16) | 8;
- if (sUnknown_03000DF8[0] == 3)
- return (sUnknown_03000DF8[1] << 16) | 9;
- if (sUnknown_03000DF8[0] == 4)
- return (sUnknown_03000DF8[1] << 16) | 10;
+ if (sPokeblockPresentFlavors[0] == FLAVOR_SPICY)
+ return (sPokeblockPresentFlavors[1] << 16) | PBLOCK_CLR_PURPLE;
+ if (sPokeblockPresentFlavors[0] == FLAVOR_DRY)
+ return (sPokeblockPresentFlavors[1] << 16) | PBLOCK_CLR_INDIGO;
+ if (sPokeblockPresentFlavors[0] == FLAVOR_SWEET)
+ return (sPokeblockPresentFlavors[1] << 16) | PBLOCK_CLR_BROWN;
+ if (sPokeblockPresentFlavors[0] == FLAVOR_BITTER)
+ return (sPokeblockPresentFlavors[1] << 16) | PBLOCK_CLR_LITE_BLUE;
+ if (sPokeblockPresentFlavors[0] == FLAVOR_SOUR)
+ return (sPokeblockPresentFlavors[1] << 16) | PBLOCK_CLR_OLIVE;
}
else
{
- if (sUnknown_03000DF8[1] == 0)
- return (sUnknown_03000DF8[0] << 16) | 6;
- if (sUnknown_03000DF8[1] == 1)
- return (sUnknown_03000DF8[0] << 16) | 7;
- if (sUnknown_03000DF8[1] == 2)
- return (sUnknown_03000DF8[0] << 16) | 8;
- if (sUnknown_03000DF8[1] == 3)
- return (sUnknown_03000DF8[0] << 16) | 9;
- if (sUnknown_03000DF8[1] == 4)
- return (sUnknown_03000DF8[0] << 16) | 10;
+ if (sPokeblockPresentFlavors[1] == FLAVOR_SPICY)
+ return (sPokeblockPresentFlavors[0] << 16) | PBLOCK_CLR_PURPLE;
+ if (sPokeblockPresentFlavors[1] == FLAVOR_DRY)
+ return (sPokeblockPresentFlavors[0] << 16) | PBLOCK_CLR_INDIGO;
+ if (sPokeblockPresentFlavors[1] == FLAVOR_SWEET)
+ return (sPokeblockPresentFlavors[0] << 16) | PBLOCK_CLR_BROWN;
+ if (sPokeblockPresentFlavors[1] == FLAVOR_BITTER)
+ return (sPokeblockPresentFlavors[0] << 16) | PBLOCK_CLR_LITE_BLUE;
+ if (sPokeblockPresentFlavors[1] == FLAVOR_SOUR)
+ return (sPokeblockPresentFlavors[0] << 16) | PBLOCK_CLR_OLIVE;
}
}
- return 0;
+ return PBLOCK_CLR_NONE;
}
-static void sub_8081BB0(s16 value)
+static void Debug_SetMaxRPMStage(s16 value)
{
- sUnknown_03000E04 = value;
+ sDebug_MaxRPMStage = value;
}
-static s16 sub_8081BBC(void)
+// Unused
+static s16 Debug_GetMaxRPMStage(void)
{
- return sUnknown_03000E04;
+ return sDebug_MaxRPMStage;
}
-static void sub_8081BC8(s16 value)
+static void Debug_SetGameTimeStage(s16 value)
{
- sUnknown_03000E06 = value;
+ sDebug_GameTimeStage = value;
}
-static s16 sub_8081BD4(void)
+// Unued
+static s16 Debug_GetGameTimeStage(void)
{
- return sUnknown_03000E06;
+ return sDebug_GameTimeStage;
}
-static void Blender_CalculatePokeblock(struct BlenderBerry *berries, struct Pokeblock *pokeblock, u8 playersNo, u8 *flavors, u16 maxRPM)
+static void CalculatePokeblock(struct BlenderBerry *berries, struct Pokeblock *pokeblock, u8 numPlayers, u8 *flavors, u16 maxRPM)
{
s32 i, j;
s32 multiuseVar, var2;
- u8 var3;
+ u8 numNegatives;
- for (i = 0; i < 6; i++)
- sUnknown_03000DE8[i] = 0;
+ for (i = 0; i < FLAVOR_COUNT + 1; i++)
+ sPokeblockFlavors[i] = 0;
- for (i = 0; i < playersNo; i++)
+ // Add up the flavor + feel of each players berry
+ for (i = 0; i < numPlayers; i++)
{
- for (j = 0; j < 6; j++)
- sUnknown_03000DE8[j] += berries[i].flavors[j];
+ for (j = 0; j < FLAVOR_COUNT + 1; j++)
+ sPokeblockFlavors[j] += berries[i].flavors[j];
}
- multiuseVar = sUnknown_03000DE8[0];
- sUnknown_03000DE8[0] -= sUnknown_03000DE8[1];
- sUnknown_03000DE8[1] -= sUnknown_03000DE8[2];
- sUnknown_03000DE8[2] -= sUnknown_03000DE8[3];
- sUnknown_03000DE8[3] -= sUnknown_03000DE8[4];
- sUnknown_03000DE8[4] -= multiuseVar;
+ // Subtract each flavor total from the prev one
+ // The idea is to focus on only the flavors with the highest totals
+ // Bad way to do it though (order matters here)
+ multiuseVar = sPokeblockFlavors[0];
+ sPokeblockFlavors[FLAVOR_SPICY] -= sPokeblockFlavors[FLAVOR_DRY];
+ sPokeblockFlavors[FLAVOR_DRY] -= sPokeblockFlavors[FLAVOR_SWEET];
+ sPokeblockFlavors[FLAVOR_SWEET] -= sPokeblockFlavors[FLAVOR_BITTER];
+ sPokeblockFlavors[FLAVOR_BITTER] -= sPokeblockFlavors[FLAVOR_SOUR];
+ sPokeblockFlavors[FLAVOR_SOUR] -= multiuseVar;
+ // Count (and reset) the resulting negative flavors
multiuseVar = 0;
- for (i = 0; i < 5; i++)
+ for (i = 0; i < FLAVOR_COUNT; i++)
{
- if (sUnknown_03000DE8[i] < 0)
+ if (sPokeblockFlavors[i] < 0)
{
- sUnknown_03000DE8[i] = 0;
+ sPokeblockFlavors[i] = 0;
multiuseVar++;
}
}
- var3 = multiuseVar;
- for (i = 0; i < 5; i++)
+ numNegatives = multiuseVar;
+
+ // Subtract the number of negative flavor totals from each positive total (without going below 0)
+ for (i = 0; i < FLAVOR_COUNT; i++)
{
- if (sUnknown_03000DE8[i] > 0)
+ if (sPokeblockFlavors[i] > 0)
{
- if (sUnknown_03000DE8[i] < multiuseVar)
- sUnknown_03000DE8[i] = 0;
+ if (sPokeblockFlavors[i] < multiuseVar)
+ sPokeblockFlavors[i] = 0;
else
- sUnknown_03000DE8[i] -= multiuseVar;
+ sPokeblockFlavors[i] -= multiuseVar;
}
}
- for (i = 0; i < 5; i++)
- {
- sUnknown_020322A8[i] = sUnknown_03000DE8[i];
- }
- multiuseVar = maxRPM / 333 + 100;
- sUnknown_020322D0 = multiuseVar;
+ for (i = 0; i < FLAVOR_COUNT; i++)
+ sDebug_PokeblockFactorFlavors[i] = sPokeblockFlavors[i];
- for (i = 0; i < 5; i++)
+ // Factor in max RPM and round
+ sDebug_PokeblockFactorRPM = multiuseVar = maxRPM / 333 + 100;
+ for (i = 0; i < FLAVOR_COUNT; i++)
{
- s32 r4;
- s32 r5 = sUnknown_03000DE8[i];
- r5 = (r5 * multiuseVar) / 10;
- r4 = r5 % 10;
- r5 /= 10;
- if (r4 > 4)
- r5++;
- sUnknown_03000DE8[i] = r5;
- }
- for (i = 0; i < 5; i++)
- {
- sUnknown_020322BC[i] = sUnknown_03000DE8[i];
+ s32 remainder;
+ s32 flavor = sPokeblockFlavors[i];
+ flavor = (flavor * multiuseVar) / 10;
+ remainder = flavor % 10;
+ flavor /= 10;
+ if (remainder > 4)
+ flavor++;
+ sPokeblockFlavors[i] = flavor;
}
- pokeblock->color = Blender_GetPokeblockColor(berries, &sUnknown_03000DE8[0], playersNo, var3);
- sUnknown_03000DE8[5] = (sUnknown_03000DE8[5] / playersNo) - playersNo;
+ for (i = 0; i < FLAVOR_COUNT; i++)
+ sDebug_PokeblockFactorFlavorsAfterRPM[i] = sPokeblockFlavors[i];
- if (sUnknown_03000DE8[5] < 0)
- sUnknown_03000DE8[5] = 0;
+ // Calculate color and feel of pokeblock
+ pokeblock->color = CalculatePokeblockColor(berries, &sPokeblockFlavors[0], numPlayers, numNegatives);
+ sPokeblockFlavors[FLAVOR_COUNT] = (sPokeblockFlavors[FLAVOR_COUNT] / numPlayers) - numPlayers;
- if (pokeblock->color == 12)
+ if (sPokeblockFlavors[FLAVOR_COUNT] < 0)
+ sPokeblockFlavors[FLAVOR_COUNT] = 0;
+
+ if (pokeblock->color == PBLOCK_CLR_BLACK)
{
- multiuseVar = Random() % 10;
- for (i = 0; i < 5; i++)
+ // Black pokeblocks get their flavors randomly reassigned
+ multiuseVar = Random() % ARRAY_COUNT(sBlackPokeblockFlavorFlags);
+ for (i = 0; i < FLAVOR_COUNT; i++)
{
- if ((sUnknown_08339CC8[multiuseVar] >> i) & 1)
- sUnknown_03000DE8[i] = 2;
+ if ((sBlackPokeblockFlavorFlags[multiuseVar] >> i) & 1)
+ sPokeblockFlavors[i] = 2;
else
- sUnknown_03000DE8[i] = 0;
+ sPokeblockFlavors[i] = 0;
}
}
- for (i = 0; i < 6; i++)
+ for (i = 0; i < FLAVOR_COUNT + 1; i++)
{
- if (sUnknown_03000DE8[i] > 255)
- sUnknown_03000DE8[i] = 255;
+ if (sPokeblockFlavors[i] > 255)
+ sPokeblockFlavors[i] = 255;
}
- pokeblock->spicy = sUnknown_03000DE8[0];
- pokeblock->dry = sUnknown_03000DE8[1];
- pokeblock->sweet = sUnknown_03000DE8[2];
- pokeblock->bitter = sUnknown_03000DE8[3];
- pokeblock->sour = sUnknown_03000DE8[4];
- pokeblock->feel = sUnknown_03000DE8[5];
+ pokeblock->spicy = sPokeblockFlavors[FLAVOR_SPICY];
+ pokeblock->dry = sPokeblockFlavors[FLAVOR_DRY];
+ pokeblock->sweet = sPokeblockFlavors[FLAVOR_SWEET];
+ pokeblock->bitter = sPokeblockFlavors[FLAVOR_BITTER];
+ pokeblock->sour = sPokeblockFlavors[FLAVOR_SOUR];
+ pokeblock->feel = sPokeblockFlavors[FLAVOR_COUNT];
- for (i = 0; i < 6; i++)
- {
- flavors[i] = sUnknown_03000DE8[i];
- }
+ for (i = 0; i < FLAVOR_COUNT + 1; i++)
+ flavors[i] = sPokeblockFlavors[i];
}
-static void BlenderDebug_CalculatePokeblock(struct BlenderBerry* berries, struct Pokeblock* pokeblock, u8 playersNo, u8* flavors, u16 a4)
+// Unused
+static void Debug_CalculatePokeblock(struct BlenderBerry* berries, struct Pokeblock* pokeblock, u8 numPlayers, u8* flavors, u16 maxRPM)
{
- Blender_CalculatePokeblock(berries, pokeblock, playersNo, flavors, a4);
+ CalculatePokeblock(berries, pokeblock, numPlayers, flavors, maxRPM);
}
-static void sub_8081E20(void)
+static void Debug_SetStageVars(void)
{
- u32 frames = (u16)(sBerryBlenderData->gameFrameTime);
- u16 max_RPM = sBerryBlenderData->max_RPM;
- s16 var = 0;
+ u32 frames = (u16)(sBerryBlender->gameFrameTime);
+ u16 maxRPM = sBerryBlender->maxRPM;
+ s16 stage = 0;
if (frames < 900)
- var = 5;
+ stage = 5;
else if ((u16)(frames - 900) < 600)
- var = 4;
+ stage = 4;
else if ((u16)(frames - 1500) < 600)
- var = 3;
+ stage = 3;
else if ((u16)(frames - 2100) < 900)
- var = 2;
+ stage = 2;
else if ((u16)(frames - 3300) < 300)
- var = 1;
-
- sub_8081BC8(var);
-
- var = 0;
- if (max_RPM <= 64)
- {
- if (max_RPM >= 50 && max_RPM < 100)
- var = -1;
- else if (max_RPM >= 100 && max_RPM < 150)
- var = -2;
- else if (max_RPM >= 150 && max_RPM < 200)
- var = -3;
- else if (max_RPM >= 200 && max_RPM < 250)
- var = -4;
- else if (max_RPM >= 250 && max_RPM < 300)
- var = -5;
- else if (max_RPM >= 350 && max_RPM < 400)
- var = -6;
- else if (max_RPM >= 400 && max_RPM < 450)
- var = -7;
- else if (max_RPM >= 500 && max_RPM < 550)
- var = -8;
- else if (max_RPM >= 550 && max_RPM < 600)
- var = -9;
- else if (max_RPM >= 600)
- var = -10;
- }
-
- sub_8081BB0(var);
-}
-
-static void sub_8081F94(u16 *a0)
-{
- if (gReceivedRemoteLinkPlayers != 0 && gWirelessCommType)
- *a0 = 0x2F00;
+ stage = 1;
+
+ Debug_SetGameTimeStage(stage);
+
+ stage = 0;
+ if (maxRPM <= 64)
+ {
+ if (maxRPM >= 50 && maxRPM < 100)
+ stage = -1;
+ else if (maxRPM >= 100 && maxRPM < 150)
+ stage = -2;
+ else if (maxRPM >= 150 && maxRPM < 200)
+ stage = -3;
+ else if (maxRPM >= 200 && maxRPM < 250)
+ stage = -4;
+ else if (maxRPM >= 250 && maxRPM < 300)
+ stage = -5;
+ else if (maxRPM >= 350 && maxRPM < 400)
+ stage = -6;
+ else if (maxRPM >= 400 && maxRPM < 450)
+ stage = -7;
+ else if (maxRPM >= 500 && maxRPM < 550)
+ stage = -8;
+ else if (maxRPM >= 550 && maxRPM < 600)
+ stage = -9;
+ else if (maxRPM >= 600)
+ stage = -10;
+ }
+
+ Debug_SetMaxRPMStage(stage);
+}
+
+static void SendContinuePromptResponse(u16 *cmd)
+{
+ if (gReceivedRemoteLinkPlayers && gWirelessCommType)
+ *cmd = RFUCMD_SEND_PACKET;
else
- *a0 = 0x2FFF;
+ *cmd = LINKCMD_SEND_PACKET;
}
-static void CB2_HandleBlenderEndGame(void)
+static void CB2_EndBlenderGame(void)
{
u8 i, j;
- if (sBerryBlenderData->gameEndState < 3)
- sub_8082D28();
+ if (sBerryBlender->gameEndState < 3)
+ UpdateBlenderCenter();
GetMultiplayerId(); // unused return value
- switch (sBerryBlenderData->gameEndState)
+ switch (sBerryBlender->gameEndState)
{
case 1:
m4aMPlayTempoControl(&gMPlayInfo_BGM, 256);
for (i = 0; i < gSpecialVar_0x8004; i++)
{
- DestroyTask(sBerryBlenderData->field_120[i]);
+ DestroyTask(sBerryBlender->opponentTaskIds[i]);
}
- sBerryBlenderData->gameEndState++;
+ sBerryBlender->gameEndState++;
break;
case 2:
- sBerryBlenderData->field_4C -= 32;
- if (sBerryBlenderData->field_4C <= 0)
+ sBerryBlender->speed -= 32;
+ if (sBerryBlender->speed <= 0)
{
ClearLinkCallback();
- sBerryBlenderData->field_4C = 0;
+ sBerryBlender->speed = 0;
- if (gReceivedRemoteLinkPlayers != 0)
- sBerryBlenderData->gameEndState++;
+ if (gReceivedRemoteLinkPlayers)
+ sBerryBlender->gameEndState++;
else
- sBerryBlenderData->gameEndState = 5;
+ sBerryBlender->gameEndState = 5;
- sBerryBlenderData->mainState = 0;
+ sBerryBlender->mainState = 0;
m4aMPlayStop(&gMPlayInfo_SE2);
}
- Blender_ControlHitPitch();
+ UpdateHitPitch();
break;
case 3:
if (GetMultiplayerId() != 0)
{
- sBerryBlenderData->gameEndState++;
+ sBerryBlender->gameEndState++;
}
else if (IsLinkTaskFinished())
{
- if (gReceivedRemoteLinkPlayers != 0 && gWirelessCommType)
+ if (gReceivedRemoteLinkPlayers && gWirelessCommType)
{
- sBerryBlenderData->gameBlock.timeRPM.time = sBerryBlenderData->gameFrameTime;
- sBerryBlenderData->gameBlock.timeRPM.max_RPM = sBerryBlenderData->max_RPM;
+ sBerryBlender->gameBlock.timeRPM.time = sBerryBlender->gameFrameTime;
+ sBerryBlender->gameBlock.timeRPM.maxRPM = sBerryBlender->maxRPM;
for (i = 0; i < BLENDER_MAX_PLAYERS; i++)
{
- for (j = 0; j < BLENDER_SCORES_NO; j++)
- sBerryBlenderData->gameBlock.scores[i][j] = sBerryBlenderData->scores[i][j];
+ for (j = 0; j < NUM_SCORE_TYPES; j++)
+ sBerryBlender->gameBlock.scores[i][j] = sBerryBlender->scores[i][j];
}
- if (SendBlock(0, &sBerryBlenderData->gameBlock, sizeof(sBerryBlenderData->gameBlock)))
- sBerryBlenderData->gameEndState++;
+ if (SendBlock(0, &sBerryBlender->gameBlock, sizeof(sBerryBlender->gameBlock)))
+ sBerryBlender->gameEndState++;
}
else
{
- sBerryBlenderData->smallBlock.time = sBerryBlenderData->gameFrameTime;
- sBerryBlenderData->smallBlock.max_RPM = sBerryBlenderData->max_RPM;
- if (SendBlock(0, &sBerryBlenderData->smallBlock, sizeof(sBerryBlenderData->smallBlock) + 32))
- sBerryBlenderData->gameEndState++;
+ sBerryBlender->smallBlock.time = sBerryBlender->gameFrameTime;
+ sBerryBlender->smallBlock.maxRPM = sBerryBlender->maxRPM;
+ if (SendBlock(0, &sBerryBlender->smallBlock, sizeof(sBerryBlender->smallBlock) + 32))
+ sBerryBlender->gameEndState++;
}
}
break;
@@ -2435,64 +2617,64 @@ static void CB2_HandleBlenderEndGame(void)
if (GetBlockReceivedStatus())
{
ResetBlockReceivedFlags();
- sBerryBlenderData->gameEndState++;
+ sBerryBlender->gameEndState++;
- if (gReceivedRemoteLinkPlayers != 0 && gWirelessCommType)
+ if (gReceivedRemoteLinkPlayers && gWirelessCommType)
{
struct BlenderGameBlock *receivedBlock = (struct BlenderGameBlock*)(&gBlockRecvBuffer);
- sBerryBlenderData->max_RPM = receivedBlock->timeRPM.max_RPM;
- sBerryBlenderData->gameFrameTime = receivedBlock->timeRPM.time;
+ sBerryBlender->maxRPM = receivedBlock->timeRPM.maxRPM;
+ sBerryBlender->gameFrameTime = receivedBlock->timeRPM.time;
for (i = 0; i < BLENDER_MAX_PLAYERS; i++)
{
- for (j = 0; j < BLENDER_SCORES_NO; j++)
- sBerryBlenderData->scores[i][j] = receivedBlock->scores[i][j];
+ for (j = 0; j < NUM_SCORE_TYPES; j++)
+ sBerryBlender->scores[i][j] = receivedBlock->scores[i][j];
}
}
else
{
struct TimeAndRPM *receivedBlock = (struct TimeAndRPM*)(&gBlockRecvBuffer);
- sBerryBlenderData->max_RPM = receivedBlock->max_RPM;
- sBerryBlenderData->gameFrameTime = receivedBlock->time;
+ sBerryBlender->maxRPM = receivedBlock->maxRPM;
+ sBerryBlender->gameFrameTime = receivedBlock->time;
}
}
break;
case 5:
- if (Blender_PrintBlendingRanking())
- sBerryBlenderData->gameEndState++;
+ if (PrintBlendingRanking())
+ sBerryBlender->gameEndState++;
break;
case 6:
- if (Blender_PrintBlendingResults())
+ if (PrintBlendingResults())
{
if (gInGameOpponentsNo == 0)
IncrementGameStat(GAME_STAT_POKEBLOCKS_WITH_FRIENDS);
else
IncrementGameStat(GAME_STAT_POKEBLOCKS);
- sBerryBlenderData->gameEndState++;
+ sBerryBlender->gameEndState++;
}
break;
case 7:
- if (Blender_PrintText(&sBerryBlenderData->textState, sText_WouldLikeToBlendAnotherBerry, GetPlayerTextSpeedDelay()))
- sBerryBlenderData->gameEndState++;
+ if (Blender_PrintText(&sBerryBlender->textState, sText_WouldLikeToBlendAnotherBerry, GetPlayerTextSpeedDelay()))
+ sBerryBlender->gameEndState++;
break;
case 9:
- sBerryBlenderData->yesNoAnswer = 0;
- CreateYesNoMenu(&sBlender_YesNoWindowTemplate, 1, 0xD, 0);
- sBerryBlenderData->gameEndState++;
+ sBerryBlender->yesNoAnswer = 0;
+ CreateYesNoMenu(&sYesNoWindowTemplate_ContinuePlaying, 1, 0xD, 0);
+ sBerryBlender->gameEndState++;
break;
case 10:
switch (Menu_ProcessInputNoWrapClearOnChoose())
{
case 1:
case -1:
- sBerryBlenderData->yesNoAnswer = 1;
- sBerryBlenderData->gameEndState++;
- for (i = 0; i <BLENDER_MAX_PLAYERS; i++)
+ sBerryBlender->yesNoAnswer = 1;
+ sBerryBlender->gameEndState++;
+ for (i = 0; i < BLENDER_MAX_PLAYERS; i++)
{
- if (sBerryBlenderData->field_8E[i] != 0xFF)
+ if (sBerryBlender->arrowIdToPlayerId[i] != NO_PLAYER)
{
PutWindowTilemap(i);
CopyWindowToVram(i, 3);
@@ -2500,11 +2682,11 @@ static void CB2_HandleBlenderEndGame(void)
}
break;
case 0:
- sBerryBlenderData->yesNoAnswer = 0;
- sBerryBlenderData->gameEndState++;
- for (i = 0; i <BLENDER_MAX_PLAYERS; i++)
+ sBerryBlender->yesNoAnswer = 0;
+ sBerryBlender->gameEndState++;
+ for (i = 0; i < BLENDER_MAX_PLAYERS; i++)
{
- if (sBerryBlenderData->field_8E[i] != 0xFF)
+ if (sBerryBlender->arrowIdToPlayerId[i] != NO_PLAYER)
{
PutWindowTilemap(i);
CopyWindowToVram(i, 3);
@@ -2514,62 +2696,64 @@ static void CB2_HandleBlenderEndGame(void)
}
break;
case 11:
- sub_8081F94(&gSendCmd[0]);
- if (sBerryBlenderData->yesNoAnswer == 0)
+ SendContinuePromptResponse(&gSendCmd[BLENDER_COMM_INPUT_STATE]);
+ if (sBerryBlender->yesNoAnswer == 0)
{
- if (IsBagPocketNonEmpty(POCKET_BERRIES) == FALSE) // no berries
+ if (IsBagPocketNonEmpty(POCKET_BERRIES) == FALSE)
{
- sBerryBlenderData->playAgainState = CANT_PLAY_NO_BERRIES;
- gSendCmd[1] = 0x9999;
+ // No berries
+ sBerryBlender->playAgainState = CANT_PLAY_NO_BERRIES;
+ gSendCmd[BLENDER_COMM_RESP] = LINKCMD_BLENDER_NO_BERRIES;
}
- else if (GetFirstFreePokeblockSlot() == -1) // no space for pokeblocks
+ else if (GetFirstFreePokeblockSlot() == -1)
{
- sBerryBlenderData->playAgainState = CANT_PLAY_NO_PKBLCK_SPACE;
- gSendCmd[1] = 0xAAAA;
+ // No space for pokeblocks
+ sBerryBlender->playAgainState = CANT_PLAY_NO_PKBLCK_SPACE;
+ gSendCmd[BLENDER_COMM_RESP] = LINKCMD_BLENDER_NO_PBLOCK_SPACE;
}
else
{
- sBerryBlenderData->playAgainState = PLAY_AGAIN_OK;
- gSendCmd[1] = 0x7779;
+ sBerryBlender->playAgainState = PLAY_AGAIN_YES;
+ gSendCmd[BLENDER_COMM_RESP] = LINKCMD_BLENDER_PLAY_AGAIN;
}
- sBerryBlenderData->gameEndState++;
+ sBerryBlender->gameEndState++;
}
else
{
- sBerryBlenderData->playAgainState = DONT_PLAY_AGAIN;
- gSendCmd[1] = 0x8888;
- sBerryBlenderData->gameEndState++;
+ sBerryBlender->playAgainState = PLAY_AGAIN_NO;
+ gSendCmd[BLENDER_COMM_RESP] = LINKCMD_CONT_BLOCK;
+ sBerryBlender->gameEndState++;
}
break;
case 12:
if (gInGameOpponentsNo)
{
- SetMainCallback2(CB2_HandlePlayerPlayAgainChoice);
- sBerryBlenderData->gameEndState = 0;
- sBerryBlenderData->mainState = 0;
+ SetMainCallback2(CB2_CheckPlayAgainLocal);
+ sBerryBlender->gameEndState = 0;
+ sBerryBlender->mainState = 0;
}
else
{
- sBerryBlenderData->gameEndState++;
+ sBerryBlender->gameEndState++;
}
break;
case 8:
- sBerryBlenderData->gameEndState++;
+ sBerryBlender->gameEndState++;
break;
case 13:
- if (Blender_PrintText(&sBerryBlenderData->textState, sText_CommunicationStandby, GetPlayerTextSpeedDelay()))
+ if (Blender_PrintText(&sBerryBlender->textState, sText_CommunicationStandby, GetPlayerTextSpeedDelay()))
{
- SetMainCallback2(CB2_HandlePlayerLinkPlayAgainChoice);
- sBerryBlenderData->gameEndState = 0;
- sBerryBlenderData->mainState = 0;
+ SetMainCallback2(CB2_CheckPlayAgainLink);
+ sBerryBlender->gameEndState = 0;
+ sBerryBlender->mainState = 0;
}
break;
}
- sub_808330C();
- sub_8083230(sBerryBlenderData->field_4C);
- sub_8082AD4();
- Blender_DummiedOutFunc(sBerryBlenderData->bg_X, sBerryBlenderData->bg_Y);
+ RestoreBgCoords();
+ UpdateRPM(sBerryBlender->speed);
+ ProcessLinkPlayerCmds();
+ Blender_DummiedOutFunc(sBerryBlender->bg_X, sBerryBlender->bg_Y);
RunTasks();
AnimateSprites();
BuildOamBuffer();
@@ -2579,30 +2763,30 @@ static void CB2_HandleBlenderEndGame(void)
static bool8 LinkPlayAgainHandleSaving(void)
{
- switch (sBerryBlenderData->field_1A0)
+ switch (sBerryBlender->linkPlayAgainState)
{
case 0:
- sub_800ADF8();
- sBerryBlenderData->field_1A0 = 1;
- sBerryBlenderData->framesToWait = 0;
+ SetLinkStandbyCallback();
+ sBerryBlender->linkPlayAgainState = 1;
+ sBerryBlender->framesToWait = 0;
break;
case 1:
if (IsLinkTaskFinished())
{
- sBerryBlenderData->field_1A0++;
+ sBerryBlender->linkPlayAgainState++;
gSoftResetDisabled = TRUE;
}
break;
case 2:
FullSaveGame();
- sBerryBlenderData->field_1A0++;
- sBerryBlenderData->framesToWait = 0;
+ sBerryBlender->linkPlayAgainState++;
+ sBerryBlender->framesToWait = 0;
break;
case 3:
- if (++sBerryBlenderData->framesToWait == 10)
+ if (++sBerryBlender->framesToWait == 10)
{
- sub_800ADF8();
- sBerryBlenderData->field_1A0++;
+ SetLinkStandbyCallback();
+ sBerryBlender->linkPlayAgainState++;
}
break;
case 4:
@@ -2610,21 +2794,21 @@ static bool8 LinkPlayAgainHandleSaving(void)
{
if (CheckSaveFile())
{
- sBerryBlenderData->field_1A0 = 5;
+ sBerryBlender->linkPlayAgainState = 5;
}
else
{
- sBerryBlenderData->framesToWait = 0;
- sBerryBlenderData->field_1A0 = 3;
+ sBerryBlender->framesToWait = 0;
+ sBerryBlender->linkPlayAgainState = 3;
}
}
break;
case 5:
- sBerryBlenderData->field_1A0++;
- sBerryBlenderData->framesToWait = 0;
+ sBerryBlender->linkPlayAgainState++;
+ sBerryBlender->framesToWait = 0;
break;
case 6:
- if (++sBerryBlenderData->framesToWait > 5)
+ if (++sBerryBlender->framesToWait > 5)
{
gSoftResetDisabled = FALSE;
return TRUE;
@@ -2635,113 +2819,115 @@ static bool8 LinkPlayAgainHandleSaving(void)
return FALSE;
}
-static void CB2_HandlePlayerLinkPlayAgainChoice(void)
+static void CB2_CheckPlayAgainLink(void)
{
- switch (sBerryBlenderData->gameEndState)
+ switch (sBerryBlender->gameEndState)
{
case 0:
- if (sBerryBlenderData->field_64[0] == 0x2222)
+ if (sBerryBlender->playerContinueResponses[0] == LINKCMD_SEND_LINK_TYPE)
{
- sBerryBlenderData->gameEndState = 5;
+ // Link leader says game will continue
+ sBerryBlender->gameEndState = 5;
}
- else if (sBerryBlenderData->field_64[0] == 0x1111)
+ else if (sBerryBlender->playerContinueResponses[0] == LINKCMD_BLENDER_STOP)
{
- if (sBerryBlenderData->field_6C == 0x9999)
- sBerryBlenderData->gameEndState = 2;
- else if (sBerryBlenderData->field_6C == 0xAAAA)
- sBerryBlenderData->gameEndState = 1;
+ // Link leader says game will stop, if necessary print why
+ if (sBerryBlender->canceledPlayerCmd == LINKCMD_BLENDER_NO_BERRIES)
+ sBerryBlender->gameEndState = 2;
+ else if (sBerryBlender->canceledPlayerCmd == LINKCMD_BLENDER_NO_PBLOCK_SPACE)
+ sBerryBlender->gameEndState = 1;
else
- sBerryBlenderData->gameEndState = 5;
+ sBerryBlender->gameEndState = 5;
}
break;
case 1:
- sBerryBlenderData->gameEndState = 3;
- StringCopy(gStringVar4, gLinkPlayers[sBerryBlenderData->field_6E].name);
+ sBerryBlender->gameEndState = 3;
+ StringCopy(gStringVar4, gLinkPlayers[sBerryBlender->canceledPlayerId].name);
StringAppend(gStringVar4, sText_ApostropheSPokeblockCaseIsFull);
break;
case 2:
- sBerryBlenderData->gameEndState++;
- StringCopy(gStringVar4, gLinkPlayers[sBerryBlenderData->field_6E].name);
+ sBerryBlender->gameEndState++;
+ StringCopy(gStringVar4, gLinkPlayers[sBerryBlender->canceledPlayerId].name);
StringAppend(gStringVar4, sText_HasNoBerriesToPut);
break;
case 3:
- if (Blender_PrintText(&sBerryBlenderData->textState, gStringVar4, GetPlayerTextSpeedDelay()))
+ if (Blender_PrintText(&sBerryBlender->textState, gStringVar4, GetPlayerTextSpeedDelay()))
{
- sBerryBlenderData->framesToWait = 0;
- sBerryBlenderData->gameEndState++;
+ sBerryBlender->framesToWait = 0;
+ sBerryBlender->gameEndState++;
}
break;
case 4:
- if (++sBerryBlenderData->framesToWait > 60)
- sBerryBlenderData->gameEndState = 5;
+ if (++sBerryBlender->framesToWait > 60)
+ sBerryBlender->gameEndState = 5;
break;
case 5:
- Blender_PrintText(&sBerryBlenderData->textState, gText_SavingDontTurnOff2, 0);
- sub_800ADF8();
- sBerryBlenderData->gameEndState++;
+ Blender_PrintText(&sBerryBlender->textState, gText_SavingDontTurnOff2, 0);
+ SetLinkStandbyCallback();
+ sBerryBlender->gameEndState++;
break;
case 6:
if (IsLinkTaskFinished())
{
- sBerryBlenderData->framesToWait = 0;
- sBerryBlenderData->gameEndState++;
- sBerryBlenderData->field_1A0 = 0;
+ sBerryBlender->framesToWait = 0;
+ sBerryBlender->gameEndState++;
+ sBerryBlender->linkPlayAgainState = 0;
}
break;
case 7:
if (LinkPlayAgainHandleSaving())
{
PlaySE(SE_SAVE);
- sBerryBlenderData->gameEndState++;
+ sBerryBlender->gameEndState++;
}
break;
case 8:
- sBerryBlenderData->gameEndState++;
- sub_800ADF8();
+ sBerryBlender->gameEndState++;
+ SetLinkStandbyCallback();
break;
case 9:
if (IsLinkTaskFinished())
{
BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 0x10, RGB_BLACK);
- sBerryBlenderData->gameEndState++;
+ sBerryBlender->gameEndState++;
}
break;
case 10:
if (!gPaletteFade.active)
{
- if (sBerryBlenderData->field_64[0] == 0x2222)
+ if (sBerryBlender->playerContinueResponses[0] == LINKCMD_SEND_LINK_TYPE)
{
FreeAllWindowBuffers();
UnsetBgTilemapBuffer(2);
UnsetBgTilemapBuffer(1);
- FREE_AND_SET_NULL(sBerryBlenderData);
+ FREE_AND_SET_NULL(sBerryBlender);
SetMainCallback2(DoBerryBlending);
}
else
{
- sBerryBlenderData->framesToWait = 0;
- sBerryBlenderData->gameEndState++;
+ sBerryBlender->framesToWait = 0;
+ sBerryBlender->gameEndState++;
}
}
break;
case 11:
- if (++sBerryBlenderData->framesToWait > 30)
+ if (++sBerryBlender->framesToWait > 30)
{
- sub_800AC34();
- sBerryBlenderData->gameEndState++;
+ SetCloseLinkCallback();
+ sBerryBlender->gameEndState++;
}
break;
case 12:
- if (gReceivedRemoteLinkPlayers == 0)
+ if (!gReceivedRemoteLinkPlayers)
{
- FREE_AND_SET_NULL(sBerryBlenderData);
+ FREE_AND_SET_NULL(sBerryBlender);
SetMainCallback2(CB2_ReturnToFieldContinueScriptPlayMapMusic);
}
break;
}
- sub_8082AD4();
- Blender_DummiedOutFunc(sBerryBlenderData->bg_X, sBerryBlenderData->bg_Y);
+ ProcessLinkPlayerCmds();
+ Blender_DummiedOutFunc(sBerryBlender->bg_X, sBerryBlender->bg_Y);
RunTasks();
AnimateSprites();
BuildOamBuffer();
@@ -2749,40 +2935,40 @@ static void CB2_HandlePlayerLinkPlayAgainChoice(void)
UpdatePaletteFade();
}
-static void CB2_HandlePlayerPlayAgainChoice(void)
+static void CB2_CheckPlayAgainLocal(void)
{
- switch (sBerryBlenderData->gameEndState)
+ switch (sBerryBlender->gameEndState)
{
case 0:
- if (sBerryBlenderData->playAgainState == PLAY_AGAIN_OK || sBerryBlenderData->playAgainState == DONT_PLAY_AGAIN)
- sBerryBlenderData->gameEndState = 9;
- if (sBerryBlenderData->playAgainState == CANT_PLAY_NO_BERRIES)
- sBerryBlenderData->gameEndState = 2;
- if (sBerryBlenderData->playAgainState == CANT_PLAY_NO_PKBLCK_SPACE)
- sBerryBlenderData->gameEndState = 1;
+ if (sBerryBlender->playAgainState == PLAY_AGAIN_YES || sBerryBlender->playAgainState == PLAY_AGAIN_NO)
+ sBerryBlender->gameEndState = 9;
+ if (sBerryBlender->playAgainState == CANT_PLAY_NO_BERRIES)
+ sBerryBlender->gameEndState = 2;
+ if (sBerryBlender->playAgainState == CANT_PLAY_NO_PKBLCK_SPACE)
+ sBerryBlender->gameEndState = 1;
break;
case 1:
- sBerryBlenderData->gameEndState = 3;
- sBerryBlenderData->textState = 0;
+ sBerryBlender->gameEndState = 3;
+ sBerryBlender->textState = 0;
StringCopy(gStringVar4, sText_YourPokeblockCaseIsFull);
break;
case 2:
- sBerryBlenderData->gameEndState++;
- sBerryBlenderData->textState = 0;
+ sBerryBlender->gameEndState++;
+ sBerryBlender->textState = 0;
StringCopy(gStringVar4, sText_RunOutOfBerriesForBlending);
break;
case 3:
- if (Blender_PrintText(&sBerryBlenderData->textState, gStringVar4, GetPlayerTextSpeedDelay()))
- sBerryBlenderData->gameEndState = 9;
+ if (Blender_PrintText(&sBerryBlender->textState, gStringVar4, GetPlayerTextSpeedDelay()))
+ sBerryBlender->gameEndState = 9;
break;
case 9:
BeginFastPaletteFade(3);
- sBerryBlenderData->gameEndState++;
+ sBerryBlender->gameEndState++;
break;
case 10:
if (!gPaletteFade.active)
{
- if (sBerryBlenderData->playAgainState == PLAY_AGAIN_OK)
+ if (sBerryBlender->playAgainState == PLAY_AGAIN_YES)
SetMainCallback2(DoBerryBlending);
else
SetMainCallback2(CB2_ReturnToFieldContinueScriptPlayMapMusic);
@@ -2790,13 +2976,13 @@ static void CB2_HandlePlayerPlayAgainChoice(void)
FreeAllWindowBuffers();
UnsetBgTilemapBuffer(2);
UnsetBgTilemapBuffer(1);
- FREE_AND_SET_NULL(sBerryBlenderData);
+ FREE_AND_SET_NULL(sBerryBlender);
}
break;
}
- sub_8082AD4();
- Blender_DummiedOutFunc(sBerryBlenderData->bg_X, sBerryBlenderData->bg_Y);
+ ProcessLinkPlayerCmds();
+ Blender_DummiedOutFunc(sBerryBlender->bg_X, sBerryBlender->bg_Y);
RunTasks();
AnimateSprites();
BuildOamBuffer();
@@ -2804,152 +2990,169 @@ static void CB2_HandlePlayerPlayAgainChoice(void)
UpdatePaletteFade();
}
-static void sub_8082AD4(void)
+static void ProcessLinkPlayerCmds(void)
{
if (gReceivedRemoteLinkPlayers)
{
- if (sub_80814B0(gRecvCmds[0][0], 0x2FFF, 0x2F00))
+ if (CheckRecvCmdMatches(gRecvCmds[0][BLENDER_COMM_INPUT_STATE], LINKCMD_SEND_PACKET, RFUCMD_SEND_PACKET))
{
- if (gRecvCmds[0][1] == 0x1111)
+ if (gRecvCmds[0][BLENDER_COMM_RESP] == LINKCMD_BLENDER_STOP)
{
- switch (gRecvCmds[0][2])
+ // Link leader has indicated play is stopping, read signal to determine why
+ switch (gRecvCmds[0][BLENDER_COMM_STOP_TYPE])
{
- case 0x8888:
- sBerryBlenderData->field_6C = 0x8888;
- sBerryBlenderData->field_6E = gRecvCmds[0][3];
+ case LINKCMD_CONT_BLOCK: // Someone selected "No" to continue playing
+ sBerryBlender->canceledPlayerCmd = LINKCMD_CONT_BLOCK;
+ sBerryBlender->canceledPlayerId = gRecvCmds[0][BLENDER_COMM_PLAYER_ID];
break;
- case 0x9999:
- sBerryBlenderData->field_6C = 0x9999;
- sBerryBlenderData->field_6E = gRecvCmds[0][3];
+ case LINKCMD_BLENDER_NO_BERRIES:
+ sBerryBlender->canceledPlayerCmd = LINKCMD_BLENDER_NO_BERRIES;
+ sBerryBlender->canceledPlayerId = gRecvCmds[0][BLENDER_COMM_PLAYER_ID];
break;
- case 0xAAAA:
- sBerryBlenderData->field_6C = 0xAAAA;
- sBerryBlenderData->field_6E = gRecvCmds[0][3];
+ case LINKCMD_BLENDER_NO_PBLOCK_SPACE:
+ sBerryBlender->canceledPlayerCmd = LINKCMD_BLENDER_NO_PBLOCK_SPACE;
+ sBerryBlender->canceledPlayerId = gRecvCmds[0][BLENDER_COMM_PLAYER_ID];
break;
}
- sBerryBlenderData->field_64[0] = 0x1111;
+ sBerryBlender->playerContinueResponses[0] = LINKCMD_BLENDER_STOP;
}
- else if (gRecvCmds[0][1] == 0x2222)
+ else if (gRecvCmds[0][BLENDER_COMM_RESP] == LINKCMD_SEND_LINK_TYPE)
{
- sBerryBlenderData->field_64[0] = 0x2222;
+ // Link leader has indicated play will continue
+ sBerryBlender->playerContinueResponses[0] = LINKCMD_SEND_LINK_TYPE;
}
}
- if (GetMultiplayerId() == 0 && sBerryBlenderData->field_64[0] != 0x1111 && sBerryBlenderData->field_64[0] != 0x2222)
+
+ // If player is link leader, check for responses to the "Continue playing" prompt (even if it's not up yet)
+ if (GetMultiplayerId() == 0
+ && sBerryBlender->playerContinueResponses[0] != LINKCMD_BLENDER_STOP
+ && sBerryBlender->playerContinueResponses[0] != LINKCMD_SEND_LINK_TYPE)
{
u8 i;
+
+ // Try to gather responses
for (i = 0; i < GetLinkPlayerCount(); i++)
{
- if (sub_80814B0(gRecvCmds[i][0], 0x2FFF, 0x2F00))
+ if (CheckRecvCmdMatches(gRecvCmds[i][BLENDER_COMM_INPUT_STATE], LINKCMD_SEND_PACKET, RFUCMD_SEND_PACKET))
{
- switch (gRecvCmds[i][1])
+ switch (gRecvCmds[i][BLENDER_COMM_RESP])
{
- case 0x8888:
- sBerryBlenderData->field_64[i] = 0x8888;
+ case LINKCMD_CONT_BLOCK: // Selected "No"
+ sBerryBlender->playerContinueResponses[i] = LINKCMD_CONT_BLOCK;
break;
- case 0x7779:
- sBerryBlenderData->field_64[i] = 0x7779;
+ case LINKCMD_BLENDER_PLAY_AGAIN: // Selected "Yes"
+ sBerryBlender->playerContinueResponses[i] = LINKCMD_BLENDER_PLAY_AGAIN;
break;
- case 0x9999:
- sBerryBlenderData->field_64[i] = 0x9999;
+ case LINKCMD_BLENDER_NO_BERRIES:
+ sBerryBlender->playerContinueResponses[i] = LINKCMD_BLENDER_NO_BERRIES;
break;
- case 0xAAAA:
- sBerryBlenderData->field_64[i] = 0xAAAA;
+ case LINKCMD_BLENDER_NO_PBLOCK_SPACE:
+ sBerryBlender->playerContinueResponses[i] = LINKCMD_BLENDER_NO_PBLOCK_SPACE;
break;
}
}
}
+
+ // Count players that have responded, stopping at first non-response
for (i = 0; i < GetLinkPlayerCount(); i++)
{
- if (sBerryBlenderData->field_64[i] == 0)
+ if (sBerryBlender->playerContinueResponses[i] == 0)
break;
}
+
+ // If all players responded, handle response
if (i == GetLinkPlayerCount())
{
+ // Count players that decided to play again, stopping at first negative response
for (i = 0; i < GetLinkPlayerCount(); i++)
{
- if (sBerryBlenderData->field_64[i] != 0x7779)
+ if (sBerryBlender->playerContinueResponses[i] != LINKCMD_BLENDER_PLAY_AGAIN)
break;
}
- sub_8081F94(&gSendCmd[0]);
+
+ // Schedule signal to other players about whether or not play will continue
+ SendContinuePromptResponse(&gSendCmd[BLENDER_COMM_INPUT_STATE]);
if (i == GetLinkPlayerCount())
{
- gSendCmd[1] = 0x2222;
+ // All players chose to continue playing
+ gSendCmd[BLENDER_COMM_RESP] = LINKCMD_SEND_LINK_TYPE;
}
else
{
- gSendCmd[1] = 0x1111;
- gSendCmd[2] = sBerryBlenderData->field_64[i];
- gSendCmd[3] = i;
+ // At least 1 player decided to stop playing, or can't continue playing
+ gSendCmd[BLENDER_COMM_RESP] = LINKCMD_BLENDER_STOP;
+ gSendCmd[BLENDER_COMM_STOP_TYPE] = sBerryBlender->playerContinueResponses[i];
+ gSendCmd[BLENDER_COMM_PLAYER_ID] = i;
}
}
}
}
}
-static void sub_8082CB4(struct BgAffineSrcData *dest)
+static void DrawBlenderCenter(struct BgAffineSrcData *dest)
{
struct BgAffineSrcData affineSrc;
affineSrc.texX = 0x7800;
affineSrc.texY = 0x5000;
- affineSrc.scrX = 0x78 - sBerryBlenderData->bg_X;
- affineSrc.scrY = 0x50 - sBerryBlenderData->bg_Y;
- affineSrc.sx = sBerryBlenderData->field_11A;
- affineSrc.sy = sBerryBlenderData->field_11A;
- affineSrc.alpha = sBerryBlenderData->arrowPos;
+ affineSrc.scrX = 0x78 - sBerryBlender->bg_X;
+ affineSrc.scrY = 0x50 - sBerryBlender->bg_Y;
+ affineSrc.sx = sBerryBlender->centerScale;
+ affineSrc.sy = sBerryBlender->centerScale;
+ affineSrc.alpha = sBerryBlender->arrowPos;
*dest = affineSrc;
}
u16 GetBlenderArrowPosition(void)
{
- return sBerryBlenderData->arrowPos;
+ return sBerryBlender->arrowPos;
}
-static void sub_8082D28(void)
+static void UpdateBlenderCenter(void)
{
u8 playerId = 0;
- if (gReceivedRemoteLinkPlayers != 0)
+ if (gReceivedRemoteLinkPlayers)
playerId = GetMultiplayerId();
- if (gWirelessCommType && gReceivedRemoteLinkPlayers != 0)
+ if (gWirelessCommType && gReceivedRemoteLinkPlayers)
{
if (playerId == 0)
{
- sBerryBlenderData->arrowPos += sBerryBlenderData->field_4C;
- gSendCmd[5] = sBerryBlenderData->field_116;
- gSendCmd[6] = sBerryBlenderData->arrowPos;
- sub_8082CB4(&sBerryBlenderData->bgAffineSrc);
+ sBerryBlender->arrowPos += sBerryBlender->speed;
+ gSendCmd[BLENDER_COMM_PROGRESS_BAR] = sBerryBlender->progressBarValue;
+ gSendCmd[BLENDER_COMM_ARROW_POS] = sBerryBlender->arrowPos;
+ DrawBlenderCenter(&sBerryBlender->bgAffineSrc);
}
else
{
- if ((gRecvCmds[0][0] & 0xFF00) == 0x4400)
+ if ((gRecvCmds[0][BLENDER_COMM_INPUT_STATE] & 0xFF00) == RFUCMD_BLENDER_SEND_KEYS)
{
- sBerryBlenderData->field_116 = gRecvCmds[0][5];
- sBerryBlenderData->arrowPos = gRecvCmds[0][6];
- sub_8082CB4(&sBerryBlenderData->bgAffineSrc);
+ sBerryBlender->progressBarValue = gRecvCmds[0][BLENDER_COMM_PROGRESS_BAR];
+ sBerryBlender->arrowPos = gRecvCmds[0][BLENDER_COMM_ARROW_POS];
+ DrawBlenderCenter(&sBerryBlender->bgAffineSrc);
}
}
}
else
{
- sBerryBlenderData->arrowPos += sBerryBlenderData->field_4C;
- sub_8082CB4(&sBerryBlenderData->bgAffineSrc);
+ sBerryBlender->arrowPos += sBerryBlender->speed;
+ DrawBlenderCenter(&sBerryBlender->bgAffineSrc);
}
}
-static void BerryBlender_SetBackgroundsPos(void)
+static void SetBgPos(void)
{
- SetGpuReg(REG_OFFSET_BG1HOFS, sBerryBlenderData->bg_X);
- SetGpuReg(REG_OFFSET_BG1VOFS, sBerryBlenderData->bg_Y);
+ SetGpuReg(REG_OFFSET_BG1HOFS, sBerryBlender->bg_X);
+ SetGpuReg(REG_OFFSET_BG1VOFS, sBerryBlender->bg_Y);
- SetGpuReg(REG_OFFSET_BG0HOFS, sBerryBlenderData->bg_X);
- SetGpuReg(REG_OFFSET_BG0VOFS, sBerryBlenderData->bg_Y);
+ SetGpuReg(REG_OFFSET_BG0HOFS, sBerryBlender->bg_X);
+ SetGpuReg(REG_OFFSET_BG0VOFS, sBerryBlender->bg_Y);
}
-static void sub_8082E3C(struct Sprite* sprite)
+static void SpriteCB_Particle(struct Sprite* sprite)
{
sprite->data[2] += sprite->data[0];
sprite->data[3] += sprite->data[1];
@@ -2960,7 +3163,7 @@ static void sub_8082E3C(struct Sprite* sprite)
DestroySprite(sprite);
}
-static void sub_8082E84(void)
+static void CreateParticleSprites(void)
{
s32 limit = (Random() % 2) + 1;
s32 i;
@@ -2971,20 +3174,20 @@ static void sub_8082E84(void)
s32 x, y;
u8 spriteId;
- rand = sBerryBlenderData->arrowPos + (Random() % 20);
+ rand = sBerryBlender->arrowPos + (Random() % 20);
x = gSineTable[(rand & 0xFF) + 64] / 4;
y = gSineTable[(rand & 0xFF)] / 4;
- spriteId = CreateSprite(&sUnknown_08339BE0, x + 120, y + 80, 1);
+ spriteId = CreateSprite(&sSpriteTemplate_Particles, x + 120, y + 80, 1);
gSprites[spriteId].data[0] = 16 - (Random() % 32);
gSprites[spriteId].data[1] = 16 - (Random() % 32);
- gSprites[spriteId].callback = sub_8082E3C;
+ gSprites[spriteId].callback = SpriteCB_Particle;
}
}
-static void sub_8082F68(struct Sprite* sprite)
+static void SpriteCB_ScoreSymbol(struct Sprite* sprite)
{
sprite->data[0]++;
sprite->pos2.y = -(sprite->data[0] / 3);
@@ -2993,7 +3196,7 @@ static void sub_8082F68(struct Sprite* sprite)
DestroySprite(sprite);
}
-static void sub_8082F9C(struct Sprite* sprite)
+static void SpriteCB_ScoreSymbolBest(struct Sprite* sprite)
{
sprite->data[0]++;
sprite->pos2.y = -(sprite->data[0] * 2);
@@ -3004,56 +3207,65 @@ static void sub_8082F9C(struct Sprite* sprite)
DestroySprite(sprite);
}
-static void Blender_SetParticipantBerryData(u8 participantId, u16 itemId)
+static void SetPlayerBerryData(u8 playerId, u16 itemId)
{
- sBerryBlenderData->chosenItemId[participantId] = itemId;
- Blender_CopyBerryData(&sBerryBlenderData->blendedBerries[participantId], itemId);
+ sBerryBlender->chosenItemId[playerId] = itemId;
+ ConvertItemToBlenderBerry(&sBerryBlender->blendedBerries[playerId], itemId);
}
-static void sub_8083010(struct Sprite* sprite)
+#define sState data[0]
+#define sYPos data[1]
+#define sDelay data[2]
+#define sAnimId data[3]
+
+static void SpriteCB_CountdownNumber(struct Sprite* sprite)
{
- switch (sprite->data[0])
+ switch (sprite->sState)
{
case 0:
- sprite->data[1] += 8;
- if (sprite->data[1] > 88)
+ sprite->sYPos += 8;
+ if (sprite->sYPos > DISPLAY_HEIGHT / 2 + 8)
{
- sprite->data[1] = 88;
- sprite->data[0]++;
- PlaySE(SE_KON);
+ sprite->sYPos = DISPLAY_HEIGHT / 2 + 8;
+ sprite->sState++;
+ PlaySE(SE_BALL_BOUNCE_1);
}
break;
case 1:
- sprite->data[2] += 1;
- if (sprite->data[2] > 20)
+ if (++sprite->sDelay > 20)
{
- sprite->data[0]++;
- sprite->data[2] = 0;
+ sprite->sState++;
+ sprite->sDelay = 0;
}
break;
case 2:
- sprite->data[1] += 4;
- if (sprite->data[1] > 176)
+ sprite->sYPos += 4;
+ if (sprite->sYPos > DISPLAY_HEIGHT + 16)
{
- if (++sprite->data[3] == 3)
+ if (++sprite->sAnimId == 3)
{
DestroySprite(sprite);
- CreateSprite(&sUnknown_08339C60, 120, -20, 2);
+ CreateSprite(&sSpriteTemplate_Start, 120, -20, 2);
}
else
{
- sprite->data[0] = 0;
- sprite->data[1] = -16;
- StartSpriteAnim(sprite, sprite->data[3]);
+ sprite->sState = 0;
+ sprite->sYPos = -16;
+ StartSpriteAnim(sprite, sprite->sAnimId);
}
}
break;
}
- sprite->pos2.y = sprite->data[1];
+ sprite->pos2.y = sprite->sYPos;
}
-static void sub_80830C0(struct Sprite* sprite)
+#undef sState
+#undef sYPos
+#undef sDelay
+#undef sAnimId
+
+static void SpriteCB_Start(struct Sprite* sprite)
{
switch (sprite->data[0])
{
@@ -3073,9 +3285,9 @@ static void sub_80830C0(struct Sprite* sprite)
break;
case 2:
sprite->data[1] += 4;
- if (sprite->data[1] > 176)
+ if (sprite->data[1] > DISPLAY_HEIGHT + 16)
{
- sBerryBlenderData->mainState++;
+ sBerryBlender->mainState++;
DestroySprite(sprite);
}
break;
@@ -3084,175 +3296,190 @@ static void sub_80830C0(struct Sprite* sprite)
sprite->pos2.y = sprite->data[1];
}
-static void sub_8083140(u16 a0, u16 a1)
+static void TryUpdateProgressBar(u16 current, u16 limit)
{
- if (sBerryBlenderData->field_118 < a0)
+ // Progress bar doesn't move unless it's going up
+ if (sBerryBlender->maxProgressBarValue < current)
{
- sBerryBlenderData->field_118 += 2;
- sub_8083170(sBerryBlenderData->field_118, a1);
+ sBerryBlender->maxProgressBarValue += 2;
+ UpdateProgressBar(sBerryBlender->maxProgressBarValue, limit);
}
}
-static void sub_8083170(u16 a0, u16 a1)
+static void UpdateProgressBar(u16 value, u16 limit)
{
- s32 var1, var2, var3, var4;
+ s32 amountFilled, maxFilledSegment, subSegmentsFilled, i;
u16 *vram;
vram = (u16*)(BG_SCREEN_ADDR(12));
- var1 = (a0 * 64) / a1;
- var2 = var1 / 8;
- for (var4 = 0; var4 < var2; var4++)
+ amountFilled = (value * 64) / limit;
+ maxFilledSegment = amountFilled / 8;
+
+ // Set filled progress bar tiles in full segments
+ for (i = 0; i < maxFilledSegment; i++)
{
- vram[11 + var4] = 0x80E9;
- vram[43 + var4] = 0x80F9;
+ vram[11 + i] = PROGRESS_BAR_FILLED_TOP;
+ vram[43 + i] = PROGRESS_BAR_FILLED_BOTTOM;
}
- var3 = var1 % 8;
- if (var3 != 0)
+
+ // If progress bar between segments, fill with the corresponding partial segment tiles
+ subSegmentsFilled = amountFilled % 8;
+ if (subSegmentsFilled != 0)
{
- vram[11 + var4] = var3 + 0x80E1;
- vram[43 + var4] = var3 + 0x80F1;
- var4++;
+ vram[11 + i] = subSegmentsFilled + PROGRESS_BAR_EMPTY_TOP;
+ vram[43 + i] = subSegmentsFilled + PROGRESS_BAR_EMPTY_BOTTOM;
+ i++;
}
- for (; var4 < 8; var4++)
+
+ // Fill the remaining full segments with empty progress tiles
+ // Essentially unnecessary, given that it starts empty and progress only goes up
+ for (; i < 8; i++)
{
- vram[11 + var4] = 0x80E1;
- vram[43 + var4] = 0x80F1;
+ vram[11 + i] = PROGRESS_BAR_EMPTY_TOP;
+ vram[43 + i] = PROGRESS_BAR_EMPTY_BOTTOM;
}
}
-static u32 sub_8083210(u16 a0)
+static u32 ArrowSpeedToRPM(u16 speed)
{
- return 0x57E40 * a0 / 0x10000;
+ return 60 * 60 * 100 * speed / MAX_ARROW_POS;
}
-static void sub_8083230(u16 a0)
+static void UpdateRPM(u16 speed)
{
u8 i;
- u8 palAdders[5];
+ u8 digits[5];
- u32 var = sub_8083210(a0);
- if (sBerryBlenderData->max_RPM < var)
- sBerryBlenderData->max_RPM = var;
+ // Check if new max RPM has been reached
+ u32 currentRPM = ArrowSpeedToRPM(speed);
+ if (sBerryBlender->maxRPM < currentRPM)
+ sBerryBlender->maxRPM = currentRPM;
+
+ // Draw the current RPM number at the bottom of the screen
for (i = 0; i < 5; i++)
{
- palAdders[i] = var % 10;
- var /= 10;
+ digits[i] = currentRPM % 10;
+ currentRPM /= 10;
}
- *((u16*)(VRAM + 0x6458)) = palAdders[4] + 0x8072;
- *((u16*)(VRAM + 0x645A)) = palAdders[3] + 0x8072;
- *((u16*)(VRAM + 0x645C)) = palAdders[2] + 0x8072;
- *((u16*)(VRAM + 0x6460)) = palAdders[1] + 0x8072;
- *((u16*)(VRAM + 0x6462)) = palAdders[0] + 0x8072;
+ *((u16*)(BG_SCREEN_ADDR(12) + 0x458)) = digits[4] + RPM_DIGIT;
+ *((u16*)(BG_SCREEN_ADDR(12) + 0x45A)) = digits[3] + RPM_DIGIT;
+ *((u16*)(BG_SCREEN_ADDR(12) + 0x45C)) = digits[2] + RPM_DIGIT;
+ *((u16*)(BG_SCREEN_ADDR(12) + 0x460)) = digits[1] + RPM_DIGIT;
+ *((u16*)(BG_SCREEN_ADDR(12) + 0x462)) = digits[0] + RPM_DIGIT;
}
-static void sub_80832BC(s16* a0, u16 a1)
+// Passed a pointer to the bg x/y
+// Used when hitting a Best at high RPM
+static void ShakeBgCoordForHit(s16* coord, u16 speed)
{
- if (*a0 == 0)
- *a0 = (Random() % a1) - (a1 / 2);
+ if (*coord == 0)
+ *coord = (Random() % speed) - (speed / 2);
}
-static void sub_80832E8(s16* a0)
+static void RestoreBgCoord(s16* coord)
{
- if (*a0 < 0)
- (*a0)++;
- if (*a0 > 0)
- (*a0)--;
+ if (*coord < 0)
+ (*coord)++;
+ if (*coord > 0)
+ (*coord)--;
}
-static void sub_808330C(void)
+// For "unshaking" the screen after ShakeBgCoordForHit is called
+static void RestoreBgCoords(void)
{
- sub_80832E8(&sBerryBlenderData->bg_X);
- sub_80832E8(&sBerryBlenderData->bg_Y);
+ RestoreBgCoord((s16 *)&sBerryBlender->bg_X);
+ RestoreBgCoord((s16 *)&sBerryBlender->bg_Y);
}
-static void sub_8083334(s16* a0, u16 a1)
+static void BlenderLandShakeBgCoord(s16* coord, u16 timer)
{
- s32 var;
+ u8 strength;
- if (a1 < 10)
- var = 16;
+ if (timer < 10)
+ strength = 16;
else
- var = 8;
+ strength = 8;
- if (*a0 == 0)
+ if (*coord == 0)
{
- *a0 = (Random() % var) - (var / 2);
+ *coord = (Random() % strength) - (strength / 2);
}
else
{
- if (*a0 < 0)
- (*a0)++;
- if (*a0 > 0)
- (*a0)--;
+ if (*coord < 0)
+ (*coord)++;
+ if (*coord > 0)
+ (*coord)--;
}
}
-static bool8 sub_8083380(void)
+// For shaking the screen when the blender lands after falling in at the start
+static bool8 UpdateBlenderLandScreenShake(void)
{
- if (sBerryBlenderData->framesToWait == 0)
+ if (sBerryBlender->framesToWait == 0)
{
- sBerryBlenderData->bg_X = 0;
- sBerryBlenderData->bg_Y = 0;
+ sBerryBlender->bg_X = 0;
+ sBerryBlender->bg_Y = 0;
}
- sBerryBlenderData->framesToWait++;
- sub_8083334(&sBerryBlenderData->bg_X, sBerryBlenderData->framesToWait);
- sub_8083334(&sBerryBlenderData->bg_Y, sBerryBlenderData->framesToWait);
+ sBerryBlender->framesToWait++;
+ BlenderLandShakeBgCoord(&sBerryBlender->bg_X, sBerryBlender->framesToWait);
+ BlenderLandShakeBgCoord(&sBerryBlender->bg_Y, sBerryBlender->framesToWait);
- if (sBerryBlenderData->framesToWait == 20)
+ if (sBerryBlender->framesToWait == 20)
{
- sBerryBlenderData->bg_X = 0;
- sBerryBlenderData->bg_Y = 0;
+ sBerryBlender->bg_X = 0;
+ sBerryBlender->bg_Y = 0;
return TRUE;
}
return FALSE;
}
-static void sub_80833F8(struct Sprite* sprite)
+static void SpriteCB_PlayerArrow(struct Sprite* sprite)
{
- sprite->pos2.x = -(sBerryBlenderData->bg_X);
- sprite->pos2.y = -(sBerryBlenderData->bg_Y);
+ sprite->pos2.x = -(sBerryBlender->bg_X);
+ sprite->pos2.y = -(sBerryBlender->bg_Y);
}
static void TryUpdateBerryBlenderRecord(void)
{
- if (gSaveBlock1Ptr->berryBlenderRecords[sBerryBlenderData->playersNo - 2] < sBerryBlenderData->max_RPM)
- gSaveBlock1Ptr->berryBlenderRecords[sBerryBlenderData->playersNo - 2] = sBerryBlenderData->max_RPM;
+ if (gSaveBlock1Ptr->berryBlenderRecords[sBerryBlender->numPlayers - 2] < sBerryBlender->maxRPM)
+ gSaveBlock1Ptr->berryBlenderRecords[sBerryBlender->numPlayers - 2] = sBerryBlender->maxRPM;
}
-static bool8 Blender_PrintBlendingResults(void)
+static bool8 PrintBlendingResults(void)
{
u16 i;
s32 xPos, yPos;
struct Pokeblock pokeblock;
- u8 flavors[6];
+ u8 flavors[FLAVOR_COUNT + 1];
u8 text[40];
u16 berryIds[4]; // unused
- switch (sBerryBlenderData->mainState)
+ switch (sBerryBlender->mainState)
{
case 0:
- sBerryBlenderData->mainState++;
- sBerryBlenderData->framesToWait = 17;
+ sBerryBlender->mainState++;
+ sBerryBlender->framesToWait = 17;
break;
case 1:
- sBerryBlenderData->framesToWait -= 10;
- if (sBerryBlenderData->framesToWait < 0)
+ sBerryBlender->framesToWait -= 10;
+ if (sBerryBlender->framesToWait < 0)
{
- sBerryBlenderData->framesToWait = 0;
- sBerryBlenderData->mainState++;
+ sBerryBlender->framesToWait = 0;
+ sBerryBlender->mainState++;
}
break;
case 2:
- if (++sBerryBlenderData->framesToWait > 20)
+ if (++sBerryBlender->framesToWait > 20)
{
- for (i = 0; i < BLENDER_SCORES_NO; i++)
- DestroySprite(&gSprites[sBerryBlenderData->scoreIconIds[i]]);
+ for (i = 0; i < NUM_SCORE_TYPES; i++)
+ DestroySprite(&gSprites[sBerryBlender->scoreIconIds[i]]);
- sBerryBlenderData->framesToWait = 0;
- sBerryBlenderData->mainState++;
+ sBerryBlender->framesToWait = 0;
+ sBerryBlender->mainState++;
}
break;
case 3:
@@ -3263,92 +3490,91 @@ static bool8 Blender_PrintBlendingResults(void)
xPos = GetStringCenterAlignXOffset(1, sText_BlendingResults, 0xA8);
Blender_AddTextPrinter(5, sText_BlendingResults, xPos, 1, TEXT_SPEED_FF, 0);
- if (sBerryBlenderData->playersNo == 4)
+ if (sBerryBlender->numPlayers == BLENDER_MAX_PLAYERS)
yPos = 17;
else
yPos = 21;
- for (i = 0; i < sBerryBlenderData->playersNo; yPos += 16, i++)
+ for (i = 0; i < sBerryBlender->numPlayers; yPos += 16, i++)
{
- u8 place = sBerryBlenderData->playerPlaces[i];
-
- ConvertIntToDecimalStringN(sBerryBlenderData->stringVar, i + 1, STR_CONV_MODE_LEFT_ALIGN, 1);
- StringAppend(sBerryBlenderData->stringVar, sText_Dot);
- StringAppend(sBerryBlenderData->stringVar, gText_Space);
- StringAppend(sBerryBlenderData->stringVar, gLinkPlayers[place].name);
- Blender_AddTextPrinter(5, sBerryBlenderData->stringVar, 8, yPos, TEXT_SPEED_FF, 3);
-
- StringCopy(sBerryBlenderData->stringVar, sBerryBlenderData->blendedBerries[place].name);
- ConvertInternationalString(sBerryBlenderData->stringVar, gLinkPlayers[place].language);
- StringAppend(sBerryBlenderData->stringVar, sText_SpaceBerry);
- Blender_AddTextPrinter(5, sBerryBlenderData->stringVar, 0x54, yPos, TEXT_SPEED_FF, 3);
+ u8 place = sBerryBlender->playerPlaces[i];
+
+ ConvertIntToDecimalStringN(sBerryBlender->stringVar, i + 1, STR_CONV_MODE_LEFT_ALIGN, 1);
+ StringAppend(sBerryBlender->stringVar, sText_Dot);
+ StringAppend(sBerryBlender->stringVar, gText_Space);
+ StringAppend(sBerryBlender->stringVar, gLinkPlayers[place].name);
+ Blender_AddTextPrinter(5, sBerryBlender->stringVar, 8, yPos, TEXT_SPEED_FF, 3);
+
+ StringCopy(sBerryBlender->stringVar, sBerryBlender->blendedBerries[place].name);
+ ConvertInternationalString(sBerryBlender->stringVar, gLinkPlayers[place].language);
+ StringAppend(sBerryBlender->stringVar, sText_SpaceBerry);
+ Blender_AddTextPrinter(5, sBerryBlender->stringVar, 0x54, yPos, TEXT_SPEED_FF, 3);
}
Blender_AddTextPrinter(5, sText_MaximumSpeed, 0, 0x51, TEXT_SPEED_FF, 3);
- ConvertIntToDecimalStringN(sBerryBlenderData->stringVar, sBerryBlenderData->max_RPM / 100, STR_CONV_MODE_RIGHT_ALIGN, 3);
- StringAppend(sBerryBlenderData->stringVar, sText_Dot);
+ ConvertIntToDecimalStringN(sBerryBlender->stringVar, sBerryBlender->maxRPM / 100, STR_CONV_MODE_RIGHT_ALIGN, 3);
+ StringAppend(sBerryBlender->stringVar, sText_Dot);
- ConvertIntToDecimalStringN(text, sBerryBlenderData->max_RPM % 100, STR_CONV_MODE_LEADING_ZEROS, 2);
- StringAppend(sBerryBlenderData->stringVar, text);
- StringAppend(sBerryBlenderData->stringVar, sText_RPM);
+ ConvertIntToDecimalStringN(text, sBerryBlender->maxRPM % 100, STR_CONV_MODE_LEADING_ZEROS, 2);
+ StringAppend(sBerryBlender->stringVar, text);
+ StringAppend(sBerryBlender->stringVar, sText_RPM);
- xPos = GetStringRightAlignXOffset(1, sBerryBlenderData->stringVar, 0xA8);
- Blender_AddTextPrinter(5, sBerryBlenderData->stringVar, xPos, 0x51, TEXT_SPEED_FF, 3);
+ xPos = GetStringRightAlignXOffset(1, sBerryBlender->stringVar, 0xA8);
+ Blender_AddTextPrinter(5, sBerryBlender->stringVar, xPos, 0x51, TEXT_SPEED_FF, 3);
Blender_AddTextPrinter(5, sText_Time, 0, 0x61, TEXT_SPEED_FF, 3);
- seconds = (sBerryBlenderData->gameFrameTime / 60) % 60;
- minutes = (sBerryBlenderData->gameFrameTime / (60 * 60));
+ seconds = (sBerryBlender->gameFrameTime / 60) % 60;
+ minutes = (sBerryBlender->gameFrameTime / (60 * 60));
- ConvertIntToDecimalStringN(sBerryBlenderData->stringVar, minutes, STR_CONV_MODE_LEADING_ZEROS, 2);
- txtPtr = StringAppend(sBerryBlenderData->stringVar, sText_Min);
+ ConvertIntToDecimalStringN(sBerryBlender->stringVar, minutes, STR_CONV_MODE_LEADING_ZEROS, 2);
+ txtPtr = StringAppend(sBerryBlender->stringVar, sText_Min);
ConvertIntToDecimalStringN(txtPtr, seconds, STR_CONV_MODE_LEADING_ZEROS, 2);
- StringAppend(sBerryBlenderData->stringVar, sText_Sec);
+ StringAppend(sBerryBlender->stringVar, sText_Sec);
- xPos = GetStringRightAlignXOffset(1, sBerryBlenderData->stringVar, 0xA8);
- Blender_AddTextPrinter(5, sBerryBlenderData->stringVar, xPos, 0x61, TEXT_SPEED_FF, 3);
+ xPos = GetStringRightAlignXOffset(1, sBerryBlender->stringVar, 0xA8);
+ Blender_AddTextPrinter(5, sBerryBlender->stringVar, xPos, 0x61, TEXT_SPEED_FF, 3);
- sBerryBlenderData->framesToWait = 0;
- sBerryBlenderData->mainState++;
+ sBerryBlender->framesToWait = 0;
+ sBerryBlender->mainState++;
CopyWindowToVram(5, 2);
}
break;
case 4:
- if (gMain.newKeys & A_BUTTON)
- sBerryBlenderData->mainState++;
+ if (JOY_NEW(A_BUTTON))
+ sBerryBlender->mainState++;
break;
case 5:
ClearStdWindowAndFrameToTransparent(5, 1);
for (i = 0; i < BLENDER_MAX_PLAYERS; i++)
{
- if (sBerryBlenderData->chosenItemId[i] != 0)
- berryIds[i] = sBerryBlenderData->chosenItemId[i] - FIRST_BERRY_INDEX;
- if (sBerryBlenderData->field_8E[i] != 0xFF)
+ if (sBerryBlender->chosenItemId[i] != 0)
+ berryIds[i] = sBerryBlender->chosenItemId[i] - FIRST_BERRY_INDEX;
+ if (sBerryBlender->arrowIdToPlayerId[i] != NO_PLAYER)
{
PutWindowTilemap(i);
CopyWindowToVram(i, 3);
}
}
- sub_8081E20();
-
- Blender_CalculatePokeblock(sBerryBlenderData->blendedBerries, &pokeblock, sBerryBlenderData->playersNo, flavors, sBerryBlenderData->max_RPM);
- Blender_PrintMadePokeblockString(&pokeblock, sBerryBlenderData->stringVar);
- TryAddContestLinkTvShow(&pokeblock, &sBerryBlenderData->tvBlender);
+ Debug_SetStageVars();
+ CalculatePokeblock(sBerryBlender->blendedBerries, &pokeblock, sBerryBlender->numPlayers, flavors, sBerryBlender->maxRPM);
+ PrintMadePokeblockString(&pokeblock, sBerryBlender->stringVar);
+ TryAddContestLinkTvShow(&pokeblock, &sBerryBlender->tvBlender);
- CreateTask(sub_8083F3C, 6);
+ CreateTask(Task_PlayPokeblockFanfare, 6);
IncrementDailyBerryBlender();
RemoveBagItem(gSpecialVar_ItemId, 1);
AddPokeblock(&pokeblock);
- sBerryBlenderData->textState = 0;
- sBerryBlenderData->mainState++;
+ sBerryBlender->textState = 0;
+ sBerryBlender->mainState++;
break;
case 6:
- if (Blender_PrintText(&sBerryBlenderData->textState, sBerryBlenderData->stringVar, GetPlayerTextSpeedDelay()))
+ if (Blender_PrintText(&sBerryBlender->textState, sBerryBlender->stringVar, GetPlayerTextSpeedDelay()))
{
TryUpdateBerryBlenderRecord();
return TRUE;
@@ -3359,7 +3585,7 @@ static bool8 Blender_PrintBlendingResults(void)
return FALSE;
}
-static void Blender_PrintMadePokeblockString(struct Pokeblock *pokeblock, u8 *dst)
+static void PrintMadePokeblockString(struct Pokeblock *pokeblock, u8 *dst)
{
u8 text[12];
u8 flavorLvl, feel;
@@ -3384,7 +3610,7 @@ static void Blender_PrintMadePokeblockString(struct Pokeblock *pokeblock, u8 *ds
StringAppend(dst, sText_NewParagraph);
}
-static void Blender_SortBasedOnPoints(u8 *places, u8 playersNum, u32 *scores)
+static void SortBasedOnPoints(u8 *places, u8 playersNum, u32 *scores)
{
s32 i, j;
@@ -3394,128 +3620,128 @@ static void Blender_SortBasedOnPoints(u8 *places, u8 playersNum, u32 *scores)
{
if (scores[places[i]] > scores[places[j]])
{
- u8 temp = places[i];
- places[i] = places[j];
- places[j] = temp;
+ u8 temp;
+ SWAP(places[i], places[j], temp);
}
}
}
}
-static void Blender_SortScores(void)
+static void SortScores(void)
{
u8 playerId;
u8 i;
u8 places[BLENDER_MAX_PLAYERS];
u32 points[BLENDER_MAX_PLAYERS];
- for (i = 0; i < sBerryBlenderData->playersNo; i++)
+ for (i = 0; i < sBerryBlender->numPlayers; i++)
places[i] = i;
- for (i = 0; i < sBerryBlenderData->playersNo; i++)
+ for (i = 0; i < sBerryBlender->numPlayers; i++)
{
- points[i] = 1000000 * sBerryBlenderData->scores[i][BLENDER_SCORE_BEST];
- points[i] += 1000 * sBerryBlenderData->scores[i][BLENDER_SCORE_GOOD];
- points[i] += 1000 - sBerryBlenderData->scores[i][BLENDER_SCORE_MISS];
+ points[i] = 1000000 * sBerryBlender->scores[i][SCORE_BEST];
+ points[i] += 1000 * sBerryBlender->scores[i][SCORE_GOOD];
+ points[i] += 1000 - sBerryBlender->scores[i][SCORE_MISS];
}
- Blender_SortBasedOnPoints(places, sBerryBlenderData->playersNo, points);
- for (i = 0; i < sBerryBlenderData->playersNo; i++)
- sBerryBlenderData->playerPlaces[i] = places[i];
+ SortBasedOnPoints(places, sBerryBlender->numPlayers, points);
+ for (i = 0; i < sBerryBlender->numPlayers; i++)
+ sBerryBlender->playerPlaces[i] = places[i];
- if (gReceivedRemoteLinkPlayers == 0)
+ if (!gReceivedRemoteLinkPlayers)
playerId = 0;
else
playerId = GetMultiplayerId();
- for (i = 0; i < sBerryBlenderData->playersNo; i++)
+ for (i = 0; i < sBerryBlender->numPlayers; i++)
{
- if (sBerryBlenderData->playerPlaces[i] == playerId)
- sBerryBlenderData->field_1A4 = i;
+ if (sBerryBlender->playerPlaces[i] == playerId)
+ sBerryBlender->ownRanking = i;
}
}
-static bool8 Blender_PrintBlendingRanking(void)
+static bool8 PrintBlendingRanking(void)
{
u16 i;
s32 xPos, yPos;
- switch (sBerryBlenderData->mainState)
+ switch (sBerryBlender->mainState)
{
case 0:
- sBerryBlenderData->mainState++;
- sBerryBlenderData->framesToWait = 255;
+ sBerryBlender->mainState++;
+ sBerryBlender->framesToWait = 255;
break;
case 1:
- sBerryBlenderData->framesToWait -= 10;
- if (sBerryBlenderData->framesToWait < 0)
+ sBerryBlender->framesToWait -= 10;
+ if (sBerryBlender->framesToWait < 0)
{
- sBerryBlenderData->framesToWait = 0;
- sBerryBlenderData->mainState++;
+ sBerryBlender->framesToWait = 0;
+ sBerryBlender->mainState++;
}
break;
case 2:
- if (++sBerryBlenderData->framesToWait > 20)
+ if (++sBerryBlender->framesToWait > 20)
{
- sBerryBlenderData->framesToWait = 0;
- sBerryBlenderData->mainState++;
+ sBerryBlender->framesToWait = 0;
+ sBerryBlender->mainState++;
}
break;
case 3:
DrawStdFrameWithCustomTileAndPalette(5, 0, 1, 0xD);
- xPos = GetStringCenterAlignXOffset(1, sText_Ranking, 0xA8);
+ xPos = GetStringCenterAlignXOffset(1, sText_Ranking, 168);
Blender_AddTextPrinter(5, sText_Ranking, xPos, 1, TEXT_SPEED_FF, 0);
- sBerryBlenderData->scoreIconIds[BLENDER_SCORE_BEST] = CreateSprite(&sUnknown_08339B40, 128, 52, 0);
- StartSpriteAnim(&gSprites[sBerryBlenderData->scoreIconIds[BLENDER_SCORE_BEST]], 3);
- gSprites[sBerryBlenderData->scoreIconIds[BLENDER_SCORE_BEST]].callback = SpriteCallbackDummy;
+ sBerryBlender->scoreIconIds[SCORE_BEST] = CreateSprite(&sSpriteTemplate_ScoreSymbols, 128, 52, 0);
+ StartSpriteAnim(&gSprites[sBerryBlender->scoreIconIds[SCORE_BEST]], SCOREANIM_BEST_STATIC);
+ gSprites[sBerryBlender->scoreIconIds[SCORE_BEST]].callback = SpriteCallbackDummy;
- sBerryBlenderData->scoreIconIds[BLENDER_SCORE_GOOD] = CreateSprite(&sUnknown_08339B40, 160, 52, 0);
- gSprites[sBerryBlenderData->scoreIconIds[BLENDER_SCORE_GOOD]].callback = SpriteCallbackDummy;
+ sBerryBlender->scoreIconIds[SCORE_GOOD] = CreateSprite(&sSpriteTemplate_ScoreSymbols, 160, 52, 0);
+ // implicitly uses SCOREANIM_GOOD, no need to assign
+ gSprites[sBerryBlender->scoreIconIds[SCORE_GOOD]].callback = SpriteCallbackDummy;
- sBerryBlenderData->scoreIconIds[BLENDER_SCORE_MISS] = CreateSprite(&sUnknown_08339B40, 192, 52, 0);
- StartSpriteAnim(&gSprites[sBerryBlenderData->scoreIconIds[BLENDER_SCORE_MISS]], 1);
- gSprites[sBerryBlenderData->scoreIconIds[BLENDER_SCORE_MISS]].callback = SpriteCallbackDummy;
+ sBerryBlender->scoreIconIds[SCORE_MISS] = CreateSprite(&sSpriteTemplate_ScoreSymbols, 192, 52, 0);
+ StartSpriteAnim(&gSprites[sBerryBlender->scoreIconIds[SCORE_MISS]], SCOREANIM_MISS);
+ gSprites[sBerryBlender->scoreIconIds[SCORE_MISS]].callback = SpriteCallbackDummy;
- Blender_SortScores();
+ SortScores();
- for (yPos = 0x29, i = 0; i < sBerryBlenderData->playersNo; yPos += 0x10, i++)
+ for (yPos = 41, i = 0; i < sBerryBlender->numPlayers; yPos += 16, i++)
{
- u8 place = sBerryBlenderData->playerPlaces[i];
+ u8 place = sBerryBlender->playerPlaces[i];
- ConvertIntToDecimalStringN(sBerryBlenderData->stringVar, i + 1, STR_CONV_MODE_LEFT_ALIGN, 1);
- StringAppend(sBerryBlenderData->stringVar, sText_Dot);
- StringAppend(sBerryBlenderData->stringVar, gText_Space);
- StringAppend(sBerryBlenderData->stringVar, gLinkPlayers[place].name);
- Blender_AddTextPrinter(5, sBerryBlenderData->stringVar, 0, yPos, TEXT_SPEED_FF, 3);
+ ConvertIntToDecimalStringN(sBerryBlender->stringVar, i + 1, STR_CONV_MODE_LEFT_ALIGN, 1);
+ StringAppend(sBerryBlender->stringVar, sText_Dot);
+ StringAppend(sBerryBlender->stringVar, gText_Space);
+ StringAppend(sBerryBlender->stringVar, gLinkPlayers[place].name);
+ Blender_AddTextPrinter(5, sBerryBlender->stringVar, 0, yPos, TEXT_SPEED_FF, 3);
- ConvertIntToDecimalStringN(sBerryBlenderData->stringVar, sBerryBlenderData->scores[place][BLENDER_SCORE_BEST], STR_CONV_MODE_RIGHT_ALIGN, 3);
- Blender_AddTextPrinter(5, sBerryBlenderData->stringVar, 0x4E, yPos, TEXT_SPEED_FF, 3);
+ ConvertIntToDecimalStringN(sBerryBlender->stringVar, sBerryBlender->scores[place][SCORE_BEST], STR_CONV_MODE_RIGHT_ALIGN, 3);
+ Blender_AddTextPrinter(5, sBerryBlender->stringVar, 78, yPos, TEXT_SPEED_FF, 3);
- ConvertIntToDecimalStringN(sBerryBlenderData->stringVar, sBerryBlenderData->scores[place][BLENDER_SCORE_GOOD], STR_CONV_MODE_RIGHT_ALIGN, 3);
- Blender_AddTextPrinter(5, sBerryBlenderData->stringVar, 0x6E, yPos, TEXT_SPEED_FF, 3);
+ ConvertIntToDecimalStringN(sBerryBlender->stringVar, sBerryBlender->scores[place][SCORE_GOOD], STR_CONV_MODE_RIGHT_ALIGN, 3);
+ Blender_AddTextPrinter(5, sBerryBlender->stringVar, 78 + 32, yPos, TEXT_SPEED_FF, 3);
- ConvertIntToDecimalStringN(sBerryBlenderData->stringVar, sBerryBlenderData->scores[place][BLENDER_SCORE_MISS], STR_CONV_MODE_RIGHT_ALIGN, 3);
- Blender_AddTextPrinter(5, sBerryBlenderData->stringVar, 0x8E, yPos, TEXT_SPEED_FF, 3);
+ ConvertIntToDecimalStringN(sBerryBlender->stringVar, sBerryBlender->scores[place][SCORE_MISS], STR_CONV_MODE_RIGHT_ALIGN, 3);
+ Blender_AddTextPrinter(5, sBerryBlender->stringVar, 78 + 64, yPos, TEXT_SPEED_FF, 3);
}
PutWindowTilemap(5);
CopyWindowToVram(5, 3);
- sBerryBlenderData->framesToWait = 0;
- sBerryBlenderData->mainState++;
+ sBerryBlender->framesToWait = 0;
+ sBerryBlender->mainState++;
break;
case 4:
- if (++sBerryBlenderData->framesToWait > 20)
- sBerryBlenderData->mainState++;
+ if (++sBerryBlender->framesToWait > 20)
+ sBerryBlender->mainState++;
break;
case 5:
- if (gMain.newKeys & A_BUTTON)
+ if (JOY_NEW(A_BUTTON))
{
PlaySE(SE_SELECT);
- sBerryBlenderData->mainState++;
+ sBerryBlender->mainState++;
}
break;
case 6:
- sBerryBlenderData->mainState = 0;
+ sBerryBlender->mainState = 0;
return TRUE;
}
@@ -3534,11 +3760,11 @@ void ShowBerryBlenderRecordWindow(void)
DrawStdWindowFrame(gRecordsWindowId, 0);
FillWindowPixelBuffer(gRecordsWindowId, PIXEL_FILL(1));
- xPos = GetStringCenterAlignXOffset(1, gText_BlenderMaxSpeedRecord, 0x90);
+ xPos = GetStringCenterAlignXOffset(1, gText_BlenderMaxSpeedRecord, 144);
AddTextPrinterParameterized(gRecordsWindowId, 1, gText_BlenderMaxSpeedRecord, xPos, 1, 0, NULL);
- AddTextPrinterParameterized(gRecordsWindowId, 1, gText_234Players, 4, 0x29, 0, NULL);
+ AddTextPrinterParameterized(gRecordsWindowId, 1, gText_234Players, 4, 41, 0, NULL);
- for (i = 0, yPos = 0x29; i < BLENDER_SCORES_NO; i++)
+ for (i = 0, yPos = 41; i < NUM_SCORE_TYPES; i++)
{
u8 *txtPtr;
u32 record;
@@ -3550,7 +3776,7 @@ void ShowBerryBlenderRecordWindow(void)
txtPtr = ConvertIntToDecimalStringN(txtPtr, record % 100, STR_CONV_MODE_LEADING_ZEROS, 2);
txtPtr = StringAppend(txtPtr, sText_RPM);
- xPos = GetStringRightAlignXOffset(1, text, 0x8C);
+ xPos = GetStringRightAlignXOffset(1, text, 140);
AddTextPrinterParameterized(gRecordsWindowId, 1, text, xPos, yPos + (i * 16), 0, NULL);
}
@@ -3558,16 +3784,16 @@ void ShowBerryBlenderRecordWindow(void)
CopyWindowToVram(gRecordsWindowId, 3);
}
-static void sub_8083F3C(u8 taskId)
+static void Task_PlayPokeblockFanfare(u8 taskId)
{
if (gTasks[taskId].data[0] == 0)
{
- PlayFanfare(MUS_FANFA1);
+ PlayFanfare(MUS_LEVEL_UP);
gTasks[taskId].data[0]++;
}
if (IsFanfareTaskInactive())
{
- PlayBGM(sBerryBlenderData->field_154);
+ PlayBGM(sBerryBlender->savedMusic);
DestroyTask(taskId);
}
}
@@ -3581,28 +3807,30 @@ static bool32 TryAddContestLinkTvShow(struct Pokeblock *pokeblock, struct TvBlen
tvBlender->pokeblockColor = pokeblock->color;
tvBlender->name[0] = EOS;
- if (gReceivedRemoteLinkPlayers != 0)
+ if (gReceivedRemoteLinkPlayers)
{
- if (sBerryBlenderData->field_1A4 == 0 && sheen > 20)
+ if (sBerryBlender->ownRanking == 0 && sheen > 20)
{
- StringCopy(tvBlender->name, gLinkPlayers[sBerryBlenderData->playerPlaces[sBerryBlenderData->playersNo - 1]].name);
+ // Player came first, try to put on air
+ StringCopy(tvBlender->name, gLinkPlayers[sBerryBlender->playerPlaces[sBerryBlender->numPlayers - 1]].name);
tvBlender->pokeblockFlavor = GetPokeblocksFlavor(pokeblock);
if (Put3CheersForPokeblocksOnTheAir(tvBlender->name, tvBlender->pokeblockFlavor,
tvBlender->pokeblockColor, tvBlender->pokeblockSheen,
- gLinkPlayers[sBerryBlenderData->playerPlaces[sBerryBlenderData->playersNo - 1]].language))
+ gLinkPlayers[sBerryBlender->playerPlaces[sBerryBlender->numPlayers - 1]].language))
{
return TRUE;
}
return FALSE;
}
- else if (sBerryBlenderData->field_1A4 == sBerryBlenderData->playersNo - 1 && sheen <= 20)
+ else if (sBerryBlender->ownRanking == sBerryBlender->numPlayers - 1 && sheen <= 20)
{
- StringCopy(tvBlender->name, gLinkPlayers[sBerryBlenderData->playerPlaces[0]].name);
+ // Player came last, try to put on air
+ StringCopy(tvBlender->name, gLinkPlayers[sBerryBlender->playerPlaces[0]].name);
tvBlender->pokeblockFlavor = GetPokeblocksFlavor(pokeblock);
if (Put3CheersForPokeblocksOnTheAir(tvBlender->name, tvBlender->pokeblockFlavor,
tvBlender->pokeblockColor, tvBlender->pokeblockSheen,
- gLinkPlayers[sBerryBlenderData->playerPlaces[0]].language))
+ gLinkPlayers[sBerryBlender->playerPlaces[0]].language))
{
return TRUE;
}
@@ -3623,19 +3851,19 @@ static void Blender_AddTextPrinter(u8 windowId, const u8 *string, u8 x, u8 y, s3
{
case 0:
case 3:
- txtColor[0] = 1;
- txtColor[1] = 2;
- txtColor[2] = 3;
+ txtColor[0] = TEXT_COLOR_WHITE;
+ txtColor[1] = TEXT_COLOR_DARK_GREY;
+ txtColor[2] = TEXT_COLOR_LIGHT_GREY;
break;
case 1:
- txtColor[0] = 0;
- txtColor[1] = 2;
- txtColor[2] = 3;
+ txtColor[0] = TEXT_COLOR_TRANSPARENT;
+ txtColor[1] = TEXT_COLOR_DARK_GREY;
+ txtColor[2] = TEXT_COLOR_LIGHT_GREY;
break;
case 2:
- txtColor[0] = 0;
- txtColor[1] = 4;
- txtColor[2] = 5;
+ txtColor[0] = TEXT_COLOR_TRANSPARENT;
+ txtColor[1] = TEXT_COLOR_RED;
+ txtColor[2] = TEXT_COLOR_LIGHT_RED;
break;
}
diff --git a/src/berry_crush.c b/src/berry_crush.c
index a67d1548e..d753e603c 100755
--- a/src/berry_crush.c
+++ b/src/berry_crush.c
@@ -193,7 +193,7 @@ static void sub_8020F88(void);
static void sub_8020FA0(u8);
void sub_8020FC4(struct BerryCrushGame *);
void sub_8022BEC(u16, u8, u8 *);
-void sub_8024604(u8 *, u32, s32, u32, u32, u32, u32);
+static void BerryCrush_SetPaletteFadeParams(u8 *, bool8, u32, s8, u8, u8, u16);
static int sub_8021450(struct BerryCrushGame *);
void sub_8022588(struct BerryCrushGame *);
void sub_8022600(struct BerryCrushGame *);
@@ -206,7 +206,7 @@ void sub_8022554(struct BerryCrushGame_138 *r0);
void sub_8024578(struct BerryCrushGame *);
void sub_8024644(u8 *, u32, u32, u32, u32);
static void sub_8022A20(struct Sprite *sprite);
-static u32 sub_8022C58(struct BerryCrushGame *r6, u8 *r1);
+static u32 BerryCrushCommand_BeginNormalPaletteFade(struct BerryCrushGame *r6, u8 *r1);
static u32 sub_8022CB0(struct BerryCrushGame *r4, u8 *r5);
static u32 sub_8022D14(struct BerryCrushGame *r7, u8 *r5);
static u32 sub_8022E1C(struct BerryCrushGame *r4, __attribute__((unused)) u8 *r1);
@@ -322,7 +322,7 @@ static const u8 sBerryCrushTextColorTable[][3] =
};
-static const struct WindowTemplate gUnknown_082F32EC =
+static const struct WindowTemplate sWindowTemplate_BerryCrushRankings =
{
.bg = 0,
.tilemapLeft = 3,
@@ -421,7 +421,7 @@ static const u8 gUnknown_082F3344[][4] =
{12, 14, 15, 16},
};
-static const u32 gUnknown_082F334C[] =
+static const u32 sPressingSpeedConversionTable[] =
{
50000000 / (1 << 0),
50000000 / (1 << 1),
@@ -767,7 +767,7 @@ static const u8 *const gUnknown_082F43B4[] =
static u32 (*const gUnknown_082F43CC[])(struct BerryCrushGame *, u8 *) =
{
NULL,
- sub_8022C58,
+ BerryCrushCommand_BeginNormalPaletteFade,
sub_8022CB0,
sub_8022D14,
sub_8022E1C,
@@ -825,14 +825,14 @@ u32 sub_8020C0C(MainCallback callback)
if (callback == CB2_ReturnToField)
{
gTextFlags.autoScroll = TRUE;
- PlayNewMapMusic(MUS_POKECEN);
+ PlayNewMapMusic(MUS_POKE_CENTER);
SetMainCallback1(CB1_Overworld);
}
return 0;
}
-void sub_8020C70(MainCallback callback)
+void StartBerryCrush(MainCallback callback)
{
u8 playerCount = 0;
u8 multiplayerId;
@@ -842,7 +842,7 @@ void sub_8020C70(MainCallback callback)
SetMainCallback2(callback);
Rfu.unk_10 = 0;
Rfu.unk_12 = 0;
- Rfu.unk_ee = 1;
+ Rfu.errorState = 1;
return;
}
@@ -853,7 +853,7 @@ void sub_8020C70(MainCallback callback)
SetMainCallback2(callback);
Rfu.unk_10 = 0;
Rfu.unk_12 = 0;
- Rfu.unk_ee = 1;
+ Rfu.errorState = 1;
return;
}
@@ -863,7 +863,7 @@ void sub_8020C70(MainCallback callback)
SetMainCallback2(callback);
Rfu.unk_10 = 0;
Rfu.unk_12 = 0;
- Rfu.unk_ee = 1;
+ Rfu.errorState = 1;
return;
}
@@ -874,7 +874,7 @@ void sub_8020C70(MainCallback callback)
gUnknown_02022C90->unk12 = 1;
gUnknown_02022C90->unkE = 1;
gUnknown_02022C90->unkF = 6;
- sub_8024604(gUnknown_02022C90->unk36, 1, -1, 0, 16, 0, 0);
+ BerryCrush_SetPaletteFadeParams(gUnknown_02022C90->unk36, 1, -1, 0, 16, 0, 0);
sub_8022BEC(4, 1, gUnknown_02022C90->unk36);
SetMainCallback2(sub_8020F88);
gUnknown_02022C90->unkA = CreateTask(sub_8020FA0, 8);
@@ -891,7 +891,7 @@ static void sub_8020D8C(void)
gUnknown_02022C90->unk68.as_four_players.others[gUnknown_02022C90->unk8].unk0 = gSpecialVar_ItemId - FIRST_BERRY_INDEX;
gUnknown_02022C90->unkE = 1;
gUnknown_02022C90->unkF = 9;
- sub_8024604(gUnknown_02022C90->unk36, 0, -1, 0, 16, 0, 0);
+ BerryCrush_SetPaletteFadeParams(gUnknown_02022C90->unk36, 0, -1, 0, 16, 0, 0);
sub_8022BEC(4, 1, gUnknown_02022C90->unk36);
gUnknown_02022C90->unkA = CreateTask(sub_8020FA0, 8);
SetMainCallback2(sub_8020F88);
@@ -900,7 +900,7 @@ static void sub_8020D8C(void)
void sub_8020E1C(void)
{
DestroyTask(gUnknown_02022C90->unkA);
- ChooseBerrySetCallback(sub_8020D8C);
+ ChooseBerryForMachine(sub_8020D8C);
}
static void sub_8020E3C(void)
@@ -918,11 +918,11 @@ void sub_8020E58(void)
u32 var0, var1;
var0 = gUnknown_02022C90->unk68.as_four_players.unk00.unk04;
- var0 <<= 8;
- var0 = sub_81515FC(var0, 60 << 8);
+ var0 = Q_24_8(var0);
+ var0 = MathUtil_Div32(var0, Q_24_8(60));
var1 = gUnknown_02022C90->unk68.as_four_players.unk00.unk0A;
- var1 <<= 8;
- var1 = sub_81515FC(var1, var0) & 0xFFFF;
+ var1 = Q_24_8(var1);
+ var1 = MathUtil_Div32(var1, var0) & 0xFFFF;
gUnknown_02022C90->unk16 = var1;
switch (gUnknown_02022C90->unk9)
{
@@ -1031,7 +1031,7 @@ int sub_802104C(void)
SetHBlankCallback(NULL);
SetGpuReg(REG_OFFSET_DISPCNT, 0);
ScanlineEffect_Stop();
- reset_temp_tile_data_buffers();
+ ResetTempTileDataBuffers();
break;
case 1:
CpuFill16(0, (void *)OAM, OAM_SIZE);
@@ -1069,14 +1069,14 @@ int sub_802104C(void)
CopyBgTilemapBufferToVram(1);
CopyBgTilemapBufferToVram(2);
CopyBgTilemapBufferToVram(3);
- decompress_and_copy_tile_data_to_vram(1, gUnknown_08DE34B8, 0, 0, 0);
+ DecompressAndCopyTileDataToVram(1, gUnknown_08DE34B8, 0, 0, 0);
break;
case 6:
- if (free_temp_tile_data_buffers_if_possible())
+ if (FreeTempTileDataBuffersIfPossible())
return 0;
InitStandardTextBoxWindows();
- sub_8197200();
+ InitTextBoxGfxAndPrinters();
sub_8022588(var0);
sub_8022600(var0);
gPaletteFade.bufferTransferDisabled = TRUE;
@@ -1125,7 +1125,7 @@ int sub_802130C(void)
switch (var0->unkC)
{
case 0:
- sub_8010434();
+ Rfu_SetLinkStandbyCallback();
break;
case 1:
if (!IsLinkTaskFinished())
@@ -1232,12 +1232,12 @@ void sub_80214A8(struct BerryCrushGame *arg0, struct BerryCrushGame_138 *arg1)
var0 *= 128;
var6 = var5 + 32;
var6 = var6 / 2;
- var1 = sub_81515D4(7, 0x3F80, var6);
+ var1 = MathUtil_Div16Shift(7, Q_8_8(63.5), var6);
data[0] = (u16)arg1->unk38[i]->pos1.x * 128;
- data[3] = sub_81515D4(7, var0, var1);
- var1 = sub_8151550(7, var1, 85);
+ data[3] = MathUtil_Div16Shift(7, var0, var1);
+ var1 = MathUtil_Mul16Shift(7, var1, 85);
data[4] = 0;
- data[5] = sub_81515D4(7, 0x3F80, var1);
+ data[5] = MathUtil_Div16Shift(7, Q_8_8(63.5), var1);
data[7] |= 0x8000;
if (arg1->unkC[i]->unk8 < 0)
StartSpriteAffineAnim(arg1->unk38[i], 1);
@@ -1344,9 +1344,9 @@ void sub_80216E0(struct BerryCrushGame *arg0, struct BerryCrushGame_138 *arg1)
else
{
if (sp4 == 1)
- PlaySE(SE_TOY_DANGO);
+ PlaySE(SE_MUD_BALL);
else
- PlaySE(SE_TOY_KABE);
+ PlaySE(SE_BREAKABLE_DOOR);
arg0->unk25_2 = 1;
}
@@ -1383,12 +1383,12 @@ void sub_8021944(struct BerryCrushGame_138 *arg0, u16 arg1)
arg0->unk4 = arg1 / 3600;
arg0->unk6 = (arg1 % 3600) / 60;
- r3 = sub_8151534((arg1 % 60) << 8, 4);
+ r3 = MathUtil_Mul16(Q_8_8(arg1 % 60), 4);
for (i = 0; i < 8; i++)
{
if ((r3 >> (7 - i)) & 1)
- r7 += gUnknown_082F334C[i];
+ r7 += sPressingSpeedConversionTable[i];
}
arg0->unk8 = r7 / 1000000;
@@ -1442,7 +1442,7 @@ void sub_8021A28(struct BerryCrushGame * sp0C, u8 sp10, u8 sp14, u8 sp18)
r7 = sp24->as_four_players.unk00.unk0C[sp10][r8] & 15;
for (r2 = 0; r2 < 4; ++r2)
if ((r7 >> (3 - r2)) & 1)
- r3 += gUnknown_082F334C[r2];
+ r3 += sPressingSpeedConversionTable[r2];
r7 = r3 / 1000000u;
ConvertIntToDecimalStringN(gStringVar2, r7, STR_CONV_MODE_LEADING_ZEROS, 2);
StringExpandPlaceholders(gStringVar4, gUnknown_082F43B4[sp10]);
@@ -1499,7 +1499,7 @@ void sub_8021D34(struct BerryCrushGame *r8)
AddTextPrinterParameterized3(r8->unk138.unk82, 2, r6, r7, sBerryCrushTextColorTable[0], 0, gText_TimesPerSec);
for (; r10 < 8; ++r10)
if (((u8)r8->unk16 >> (7 - r10)) & 1)
- sp0C += *(r10 + gUnknown_082F334C); // It's accessed in a different way here for unknown reason
+ sp0C += *(r10 + sPressingSpeedConversionTable); // It's accessed in a different way here for unknown reason
ConvertIntToDecimalStringN(gStringVar1, r8->unk16 >> 8, STR_CONV_MODE_RIGHT_ALIGN, 3);
ConvertIntToDecimalStringN(gStringVar2, sp0C / 1000000, STR_CONV_MODE_LEADING_ZEROS, 2);
StringExpandPlaceholders(gStringVar4, gText_XDotY3);
@@ -1580,93 +1580,89 @@ void sub_802222C(struct BerryCrushGame *r4)
sub_8022600(r4);
}
-void sub_8022250(u8 r4)
+static void Task_ShowBerryCrushRankings(u8 taskId)
{
- u8 r9 = 0, r2, r7, r10;
- u32 sp0C = 0;
- s16 *r6 = gTasks[r4].data;
- const u8 *r10_; // turn r5/sl register swap into r8/sl
+ u8 i = 0, j, xPos, yPos;
+ u32 score = 0;
+ s16 *data = gTasks[taskId].data;
+ u8 *str;
- switch (r6[0])
+ switch (data[0])
{
case 0:
- r6[1] = AddWindow(&gUnknown_082F32EC);
- PutWindowTilemap((u8)r6[1]);
- FillWindowPixelBuffer((u8)r6[1], PIXEL_FILL(0));
- LoadUserWindowBorderGfx_((u8)r6[1], 541, 208);
- DrawStdFrameWithCustomTileAndPalette((u8)r6[1], 0, 541, 13);
+ data[1] = AddWindow(&sWindowTemplate_BerryCrushRankings);
+ PutWindowTilemap(data[1]);
+ FillWindowPixelBuffer(data[1], PIXEL_FILL(0));
+ LoadUserWindowBorderGfx_(data[1], 541, 208);
+ DrawStdFrameWithCustomTileAndPalette(data[1], 0, 541, 13);
break;
case 1:
- r10_ = gText_BerryCrush2;
- ++r10_; --r10_; // swap sb/sl
- #ifndef NONMATCHING
- asm("":::"r8"); // turn r8/sl register swap into sb/sl
- #endif
- r7 = 96 - GetStringWidth(1, r10_, -1) / 2u;
+ xPos = 96 - GetStringWidth(1, gText_BerryCrush2, -1) / 2u;
AddTextPrinterParameterized3(
- (u8)r6[1],
+ data[1],
1,
- r7,
+ xPos,
1,
sBerryCrushTextColorTable[3],
0,
- r10_
+ gText_BerryCrush2
);
- r10_ = gText_PressingSpeedRankings;
- r7 = 96 - GetStringWidth(1, r10_, -1) / 2u;
+ xPos = 96 - GetStringWidth(1, gText_PressingSpeedRankings, -1) / 2u;
AddTextPrinterParameterized3(
- (u8)r6[1],
+ data[1],
1,
- r7,
+ xPos,
17,
sBerryCrushTextColorTable[3],
0,
- r10_
+ gText_PressingSpeedRankings
);
- r10 = 41;
- for (; r9 < 4; ++r9)
+ yPos = 41;
+ for (i = 0; i < 4; ++i)
{
- ConvertIntToDecimalStringN(gStringVar1, r9 + 2, STR_CONV_MODE_LEFT_ALIGN, 1);
+ ConvertIntToDecimalStringN(gStringVar1, i + 2, STR_CONV_MODE_LEFT_ALIGN, 1);
StringExpandPlaceholders(gStringVar4, gText_Var1Players);
AddTextPrinterParameterized3(
- (u8)r6[1],
+ data[1],
1,
0,
- r10,
+ yPos,
sBerryCrushTextColorTable[0],
0,
gStringVar4
);
- r7 = 192 - (u8)GetStringWidth(1, gText_TimesPerSec, -1);
+ xPos = 192 - (u8)GetStringWidth(1, gText_TimesPerSec, -1);
AddTextPrinterParameterized3(
- (u8)r6[1],
+ data[1],
1,
- r7,
- r10,
+ xPos,
+ yPos,
sBerryCrushTextColorTable[0],
0,
gText_TimesPerSec
);
- for (r2 = 0; r2 < 8; ++r2)
- if (((u8)r6[r9 + 2] >> (7 - r2)) & 1)
- sp0C += gUnknown_082F334C[r2];
- ConvertIntToDecimalStringN(gStringVar1, (u16)r6[r9 + 2] >> 8, STR_CONV_MODE_RIGHT_ALIGN, 3);
- ConvertIntToDecimalStringN(gStringVar2, sp0C / 1000000, STR_CONV_MODE_LEADING_ZEROS, 2);
+ for (j = 0; j < 8; ++j)
+ {
+ if (((data[i + 2] & 0xFF) >> (7 - j)) & 1)
+ score += sPressingSpeedConversionTable[j];
+ }
+ ConvertIntToDecimalStringN(gStringVar1, (u16)data[i + 2] >> 8, STR_CONV_MODE_RIGHT_ALIGN, 3);
+ ConvertIntToDecimalStringN(gStringVar2, score / 1000000, STR_CONV_MODE_LEADING_ZEROS, 2);
StringExpandPlaceholders(gStringVar4, gText_XDotY3);
- r7 -= GetStringWidth(1, gStringVar4, -1);
+ xPos -= GetStringWidth(1, gStringVar4, -1);
AddTextPrinterParameterized3(
- (u8)r6[1],
+ data[1],
1,
- r7,
- r10,
+ xPos,
+ yPos,
sBerryCrushTextColorTable[0],
0,
gStringVar4
);
- r10 += 16;
- sp0C = 0;
+ yPos += 16;
+ score = 0;
}
- CopyWindowToVram((u8)r6[1], 3);
+ CopyWindowToVram(data[1], 3);
break;
case 2:
if (gMain.newKeys & (A_BUTTON | B_BUTTON))
@@ -1674,16 +1670,16 @@ void sub_8022250(u8 r4)
else
return;
case 3:
- ClearStdWindowAndFrameToTransparent((u8)r6[1], 1);
- ClearWindowTilemap((u8)r6[1]);
- RemoveWindow((u8)r6[1]);
- DestroyTask(r4);
+ ClearStdWindowAndFrameToTransparent(data[1], 1);
+ ClearWindowTilemap(data[1]);
+ RemoveWindow(data[1]);
+ DestroyTask(taskId);
EnableBothScriptContexts();
ScriptContext2_Disable();
- r6[0] = 0;
+ data[0] = 0;
return;
}
- ++r6[0];
+ ++data[0];
}
void ShowBerryCrushRankings(void)
@@ -1691,7 +1687,7 @@ void ShowBerryCrushRankings(void)
u8 taskId;
ScriptContext2_Enable();
- taskId = CreateTask(sub_8022250, 0);
+ taskId = CreateTask(Task_ShowBerryCrushRankings, 0);
gTasks[taskId].data[2] = gSaveBlock2Ptr->berryCrush.berryCrushResults[0];
gTasks[taskId].data[3] = gSaveBlock2Ptr->berryCrush.berryCrushResults[1];
gTasks[taskId].data[4] = gSaveBlock2Ptr->berryCrush.berryCrushResults[2];
@@ -1943,12 +1939,12 @@ void sub_8022B28(struct Sprite *sprite)
r7[2] = 32;
r7[7] = 168;
r4 = sprite->pos2.x * 128;
- r5 = sub_81515D4(7, (168 - sprite->pos1.y) << 7, (r2 + 32) >> 1);
+ r5 = MathUtil_Div16Shift(7, (168 - sprite->pos1.y) << 7, (r2 + 32) >> 1);
sprite->data[0] = sprite->pos1.x << 7;
- r7[3] = sub_81515D4(7, r4, r5);
- r2 = sub_8151550(7, r5, 85);
+ r7[3] = MathUtil_Div16Shift(7, r4, r5);
+ r2 = MathUtil_Mul16Shift(7, r5, 85);
r7[4] = r8;
- r7[5] = sub_81515D4(7, 0x3F80, r2);
+ r7[5] = MathUtil_Div16Shift(7, Q_8_8(63.5), r2);
r7[6] = sprite->pos2.x / 4;
r7[7] |= 0x8000;
sprite->pos2.y = r8;
@@ -1979,39 +1975,42 @@ void sub_8022BEC(u16 r5, u8 r4, u8 *r7)
}
}
-static u32 sub_8022C58(struct BerryCrushGame *r6, u8 *r1)
+static u32 BerryCrushCommand_BeginNormalPaletteFade(struct BerryCrushGame *game, u8 *params)
{
- u16 r4;
- u32 r0;
-#ifndef NONMATCHING // fake match, nobody can write such code
- register u32 r2 asm("r2");
- register u32 r3 asm("r3");
+ // params points to packed values:
+ // bytes 0-3: selectedPals (bitfield)
+ // byte 4: delay
+ // byte 5: startY
+ // byte 6: stopY
+ // bytes 7-8: fade color
+ // byte 9: if TRUE, communicate on fade complete
- r2 = r1[0];
- r3 = r1[1];
- r3 <<= 8;
- r2 |= r3;
- r3 = r1[2];
- r3 <<= 16;
- r2 |= r3;
- r3 = r1[3];
- r3 <<= 24;
- r0 = r2;
- r0 |= r3;
+ u16 color;
+ u32 selectedPals;
+ selectedPals = ({
+#ifndef NONMATCHING
+ register u32 value asm("r2");
+ register u32 b asm("r3");
#else
- u32 r2;
+ u32 value;
+ u32 b;
+#endif //NONMATCHING
+ value = params[0] << 0;
+ value |= (b = params[1] << 8);
+ value |= (b = params[2] << 16);
+ value |= (b = params[3] << 24);
+ value;
+ });
+
+ params[0] = params[9];
+
+ color = params[8] << 8;
+ color |= params[7] << 0;
- r0 = T1_READ_32(r1);
-#endif
- r2 = r1[9];
- r1[0] = r2;
- r4 = r1[8] << 8;
- r2 = r1[7];
- r4 |= r2;
gPaletteFade.bufferTransferDisabled = FALSE;
- BeginNormalPaletteFade(r0, r1[4], r1[5], r1[6], r4);
+ BeginNormalPaletteFade(selectedPals, params[4], params[5], params[6], color);
UpdatePaletteFade();
- r6->unkE = 2;
+ game->unkE = 2;
return 0;
}
@@ -2028,7 +2027,7 @@ static u32 sub_8022CB0(struct BerryCrushGame *r4, u8 *r5)
r4->unkC = 3;
return 0;
case 1:
- sub_8010434();
+ Rfu_SetLinkStandbyCallback();
++r4->unkC;
return 0;
case 2:
@@ -2111,12 +2110,12 @@ static u32 sub_8022E5C(struct BerryCrushGame *r4, __attribute__((unused)) u8 *r1
switch (r4->unkC)
{
case 0:
- sub_8010434();
+ Rfu_SetLinkStandbyCallback();
break;
case 1:
if (IsLinkTaskFinished())
{
- PlayNewMapMusic(MUS_RG_SLOT);
+ PlayNewMapMusic(MUS_RG_GAME_CORNER);
sub_8022BEC(7, 1, NULL);
r4->unk12 = 3;
r4->unkC = 0;
@@ -2168,7 +2167,7 @@ static u32 sub_8022F1C(struct BerryCrushGame *r5, u8 *r2)
sub_8022BEC(3, 1, NULL);
return 0;
case 1:
- sub_8010434();
+ Rfu_SetLinkStandbyCallback();
break;
case 2:
if (!IsLinkTaskFinished())
@@ -2195,7 +2194,7 @@ static u32 sub_8022F1C(struct BerryCrushGame *r5, u8 *r2)
}
r5->unk10 = 0;
ResetBlockReceivedFlags();
- r5->unk20 = sub_81515FC(r5->unk18 << 8, 0x2000);
+ r5->unk20 = MathUtil_Div32(Q_24_8(r5->unk18), Q_24_8(32));
break;
case 5:
ClearDialogWindowAndFrame(0, 1);
@@ -2214,7 +2213,7 @@ static u32 sub_8023070(struct BerryCrushGame *r4, __attribute__((unused)) u8 *r
{
case 0:
sub_80214A8(r4, &r4->unk138);
- sub_8010434();
+ Rfu_SetLinkStandbyCallback();
break;
case 1:
if (!IsLinkTaskFinished())
@@ -2227,14 +2226,14 @@ static u32 sub_8023070(struct BerryCrushGame *r4, __attribute__((unused)) u8 *r
case 2:
r4->unk138.unk38[r4->unk138.unk0]->callback = sub_8021608;
r4->unk138.unk38[r4->unk138.unk0]->affineAnimPaused = FALSE;
- PlaySE(SE_NAGERU);
+ PlaySE(SE_BALL_THROW);
break;
case 3:
if (r4->unk138.unk38[r4->unk138.unk0]->callback == sub_8021608)
return 0;
r4->unk138.unk38[r4->unk138.unk0] = NULL;
++r4->unk138.unk0;
- sub_8010434();
+ Rfu_SetLinkStandbyCallback();
break;
case 4:
if (!IsLinkTaskFinished())
@@ -2248,12 +2247,12 @@ static u32 sub_8023070(struct BerryCrushGame *r4, __attribute__((unused)) u8 *r
break;
case 5:
sub_80216A8(r4, &r4->unk138);
- sub_8010434();
+ Rfu_SetLinkStandbyCallback();
break;
case 6:
if (!IsLinkTaskFinished())
return 0;
- PlaySE(SE_RU_HYUU);
+ PlaySE(SE_FALL);
sub_8022BEC(11, 1, NULL);
r4->unk12 = 5;
r4->unkC = 0;
@@ -2275,7 +2274,7 @@ static u32 sub_80231B8(struct BerryCrushGame *r4, __attribute__((unused)) u8 *r
r4->unk138.unk1 = 4;
r4->unk138.unk0 = 0;
r4->unk138.unk2 = gUnknown_082F326C[r4->unk138.unk1][0];
- PlaySE(SE_W070);
+ PlaySE(SE_M_STRENGTH);
break;
case 1:
r4->unk2C = gUnknown_082F326C[r4->unk138.unk1][r4->unk138.unk0];
@@ -2296,7 +2295,7 @@ static u32 sub_80231B8(struct BerryCrushGame *r4, __attribute__((unused)) u8 *r
SetGpuReg(REG_OFFSET_BG0VOFS, 0);
SetGpuReg(REG_OFFSET_BG2VOFS, 0);
SetGpuReg(REG_OFFSET_BG3VOFS, 0);
- sub_8010434();
+ Rfu_SetLinkStandbyCallback();
break;
case 3:
if (!IsLinkTaskFinished())
@@ -2324,7 +2323,7 @@ static u32 sub_80232EC(struct BerryCrushGame *r4, __attribute__((unused)) u8 *r
return 0;
// fallthrough
case 0:
- sub_8010434();
+ Rfu_SetLinkStandbyCallback();
break;
case 3:
if (!IsLinkTaskFinished())
@@ -2358,7 +2357,7 @@ void sub_802339C(struct BerryCrushGame *r4)
for (r7 = 0; r7 < r4->unk9; ++r7)
{
r2 = gRecvCmds[r7];
- if ((r2[0] & 0xFF00) == 0x2F00
+ if ((r2[0] & 0xFF00) == RFUCMD_SEND_PACKET
&& r2[1] == 2)
{
if ((u8)r2[2] & 4)
@@ -2412,9 +2411,9 @@ void sub_802339C(struct BerryCrushGame *r4)
r2_ = r4->unk1A;
if (r0 - r2_ > 0)
{
- r2_ <<= 8;
- r2_ = sub_81515FC(r2_, r4->unk20);
- r2_ >>= 8;
+ r2_ = Q_24_8(r2_);
+ r2_ = MathUtil_Div32(r2_, r4->unk20);
+ r2_ = Q_24_8_TO_INT(r2_);
r4->unk24 = r2_;
}
else
@@ -2560,7 +2559,7 @@ void sub_80236B8(struct BerryCrushGame *r5)
r5->unk5C.unk02_1 = r5->unk25_4;
r5->unk5C.unk0A = r5->unk25_5;
memcpy(r5->unk40.unk2, &r5->unk5C, sizeof(r5->unk40.unk2));
- sub_800FE50(r5->unk40.unk2);
+ Rfu_SendPacket(r5->unk40.unk2);
}
void sub_802385C(struct BerryCrushGame *r5)
@@ -2581,7 +2580,7 @@ void sub_802385C(struct BerryCrushGame *r5)
for (r4 = 0; r4 < r5->unk9; ++r4)
r5->unk68.as_four_players.others[r4].unk4.as_2d_bytes[1][5] = 0;
#endif
- if ((gRecvCmds[0][0] & 0xFF00) != 0x2F00
+ if ((gRecvCmds[0][0] & 0xFF00) != RFUCMD_SEND_PACKET
|| gRecvCmds[0][1] != 2)
{
r5->unk25_2 = 0;
@@ -2668,7 +2667,7 @@ static u32 sub_8023A30(struct BerryCrushGame *r4, __attribute__((unused)) u8 *r1
{
case 0:
r4->unk12 = 8;
- PlaySE(SE_W070);
+ PlaySE(SE_M_STRENGTH);
BlendPalettes(0xFFFFFFFF, 8, RGB(31, 31, 0));
r4->unk138.unk0 = 2;
break;
@@ -2704,7 +2703,7 @@ static u32 sub_8023A30(struct BerryCrushGame *r4, __attribute__((unused)) u8 *r1
case 4:
if (!sub_80218D4(r4, &r4->unk138))
return 0;
- sub_8010434();
+ Rfu_SetLinkStandbyCallback();
r4->unk10 = 0;
break;
case 5:
@@ -2725,7 +2724,7 @@ static u32 sub_8023BC0(struct BerryCrushGame *r5, u8 *r6)
{
case 0:
r5->unk12 = 9;
- PlaySE(SE_HAZURE);
+ PlaySE(SE_FAILURE);
BlendPalettes(0xFFFFFFFF, 8, RGB(31, 0, 0));
r5->unk138.unk0 = 4;
break;
@@ -2738,7 +2737,7 @@ static u32 sub_8023BC0(struct BerryCrushGame *r5, u8 *r6)
case 2:
if (!sub_80218D4(r5, &r5->unk138))
return 0;
- sub_8010434();
+ Rfu_SetLinkStandbyCallback();
r5->unk10 = 0;
SetGpuReg(REG_OFFSET_BG0VOFS, 0);
SetGpuReg(REG_OFFSET_BG2VOFS, 0);
@@ -2801,14 +2800,14 @@ static u32 sub_8023CAC(struct BerryCrushGame *r7, __attribute__((unused)) u8 *r1
);
r7->unk68.as_four_players.unk00.unk04 = r7->unk28;
r7->unk68.as_four_players.unk00.unk06 = r7->unk18 / (r7->unk28 / 60);
- r2 = sub_8151574(r7->unk30 << 8, 0x3200);
- r2 = sub_81515FC(r2, r7->unk32 << 8) + 0x3200;
- r2 >>= 8;
+ r2 = MathUtil_Mul32(Q_24_8(r7->unk30), Q_24_8(50));
+ r2 = MathUtil_Div32(r2, Q_24_8(r7->unk32)) + Q_24_8(50);
+ r2 = Q_24_8_TO_INT(r2);
r7->unk68.as_four_players.unk00.unk08 = r2 & 0x7F;
- r2 <<= 8;
- r2 = sub_81515FC(r2, 0x6400);
- r4 = (r7->unk1C * r7->unk9) << 8;
- r4 = sub_8151574(r4, r2);
+ r2 = Q_24_8(r2);
+ r2 = MathUtil_Div32(r2, Q_24_8(100));
+ r4 = Q_24_8(r7->unk1C * r7->unk9);
+ r4 = MathUtil_Mul32(r4, r2);
r7->unk68.as_four_players.unk00.unk00 = r4 >> 8;
r7->unk68.as_five_players.unk1C[0].unk4.as_2d_bytes[0][7] = Random() % 3;
for (r6 = 0, r8 = 0; r8 < r7->unk9; ++r8)
@@ -2823,11 +2822,11 @@ static u32 sub_8023CAC(struct BerryCrushGame *r7, __attribute__((unused)) u8 *r1
if (r7->unk68.as_four_players.others[r8].unk4.as_hwords[3] != 0)
{
r2 = r7->unk68.as_four_players.others[r8].unk4.as_hwords[2];
- r2 <<= 8;
- r2 = sub_8151574(r2, 0x6400);
+ r2 = Q_24_8(r2);
+ r2 = MathUtil_Mul32(r2, Q_24_8(100));
r4 = r7->unk68.as_four_players.others[r8].unk4.as_hwords[3];
- r4 <<= 8;
- r4 = sub_81515FC(r2, r4);
+ r4 = Q_24_8(r4);
+ r4 = MathUtil_Div32(r2, r4);
}
else
{
@@ -2838,11 +2837,11 @@ static u32 sub_8023CAC(struct BerryCrushGame *r7, __attribute__((unused)) u8 *r1
if (r7->unk68.as_four_players.others[r8].unk4.as_hwords[3] != 0)
{
r2 = r7->unk68.as_four_players.others[r8].unk4.as_hwords[4];
- r2 <<= 8;
- r2 = sub_8151574(r2, 0x6400);
+ r2 = Q_24_8(r2);
+ r2 = MathUtil_Mul32(r2, Q_24_8(100));
r4 = r7->unk68.as_four_players.others[r8].unk4.as_hwords[3];
- r4 <<= 8;
- r4 = sub_81515FC(r2, r4);
+ r4 = Q_24_8(r4);
+ r4 = MathUtil_Div32(r2, r4);
}
else
{
@@ -2861,11 +2860,11 @@ static u32 sub_8023CAC(struct BerryCrushGame *r7, __attribute__((unused)) u8 *r1
else
{
r2 = r7->unk68.as_four_players.others[r8].unk4.as_hwords[5];
- r2 <<= 8;
- r2 = sub_8151574(r2, 0x6400);
+ r2 = Q_24_8(r2);
+ r2 = MathUtil_Mul32(r2, Q_24_8(100));
r4 = r7->unk28;
- r4 <<= 8;
- r4 = sub_81515FC(r2, r4);
+ r4 = Q_24_8(r4);
+ r4 = MathUtil_Div32(r2, r4);
}
break;
}
@@ -3006,7 +3005,7 @@ static u32 sub_8024134(struct BerryCrushGame *r5, u8 *r4)
r5->unkC = 0;
return 0;
case 1:
- sub_8010434();
+ Rfu_SetLinkStandbyCallback();
break;
case 2:
if (!IsLinkTaskFinished())
@@ -3014,10 +3013,10 @@ static u32 sub_8024134(struct BerryCrushGame *r5, u8 *r4)
DrawDialogueFrame(0, 0);
AddTextPrinterParameterized2(0, 1, gText_SavingDontTurnOffPower, 0, 0, 2, 1, 3);
CopyWindowToVram(0, 3);
- CreateTask(sub_8153688, 0);
+ CreateTask(Task_LinkSave, 0);
break;
case 3:
- if (FuncIsActiveTask(sub_8153688))
+ if (FuncIsActiveTask(Task_LinkSave))
return 0;
break;
case 4:
@@ -3085,7 +3084,7 @@ static u32 sub_80242E0(struct BerryCrushGame *r4, __attribute__((unused)) u8 *r1
switch (r4->unkC)
{
case 0:
- sub_8010434();
+ Rfu_SetLinkStandbyCallback();
break;
case 1:
if (!IsLinkTaskFinished())
@@ -3185,12 +3184,12 @@ static u32 sub_8024508(struct BerryCrushGame *r5, __attribute__((unused)) u8 *r1
switch (r5->unkC)
{
case 0:
- sub_8010434();
+ Rfu_SetLinkStandbyCallback();
break;
case 1:
if (!IsLinkTaskFinished())
return 0;
- sub_800AC34();
+ SetCloseLinkCallback();
break;
case 2:
if (gReceivedRemoteLinkPlayers != 0)
@@ -3210,6 +3209,11 @@ static u32 sub_8024568(__attribute__((unused)) struct BerryCrushGame *r0, __attr
return 0;
}
+#if MODERN
+// TODO remove this as soon as the code below is understood
+// add a UBFIX if required (code buggy?)
+__attribute__((optimize("no-aggressive-loop-optimizations")))
+#endif
void sub_8024578(struct BerryCrushGame *r4)
{
u8 r5 = 0;
@@ -3251,68 +3255,23 @@ void sub_8024578(struct BerryCrushGame *r4)
}
}
-#ifdef NONMATCHING
-void sub_8024604(u8 *r0, u32 r1, s32 r2, u32 r3, u32 r5, u32 r6, u32 r4)
+static void BerryCrush_SetPaletteFadeParams(u8 *params, bool8 communicateAfter, u32 selectedPals, s8 delay, u8 startY, u8 targetY, u16 palette)
{
- u8 sp[8];
- u8 *p;
-
- 1[(u32 *)sp] = r2;
- 0[(u16 *)sp] = r4;
- p = &sp[4];
- r0[0] = p[0];
- r0[1] = p[1];
- r0[2] = p[2];
- r0[3] = p[3];
- r0[4] = r3;
- r0[5] = r5;
- r0[6] = r6;
- r0[7] = sp[0];
- r0[8] = sp[1];
- r0[9] = r1;
+ params[0] = ((u8 *)&selectedPals)[0];
+ params[1] = ((u8 *)&selectedPals)[1];
+ params[2] = ((u8 *)&selectedPals)[2];
+ params[3] = ((u8 *)&selectedPals)[3];
+ params[4] = delay;
+ params[5] = startY;
+ params[6] = targetY;
+ params[7] = ((u8 *)&palette)[0];
+ params[8] = ((u8 *)&palette)[1];
+ params[9] = communicateAfter;
}
-#else
-NAKED
-void sub_8024604(u8 *r0, u32 r1, s32 r2, u32 r3, u32 r5, u32 r6, u32 r4)
-{
- asm_unified("\n\
- push {r4-r6,lr}\n\
- sub sp, 0x8\n\
- str r2, [sp, 0x4]\n\
- ldr r5, [sp, 0x18]\n\
- ldr r6, [sp, 0x1C]\n\
- ldr r4, [sp, 0x20]\n\
- mov r2, sp\n\
- strh r4, [r2]\n\
- add r4, sp, 0x4\n\
- ldrb r2, [r4]\n\
- strb r2, [r0]\n\
- ldrb r2, [r4, 0x1]\n\
- strb r2, [r0, 0x1]\n\
- ldrb r2, [r4, 0x2]\n\
- strb r2, [r0, 0x2]\n\
- ldrb r2, [r4, 0x3]\n\
- strb r2, [r0, 0x3]\n\
- strb r3, [r0, 0x4]\n\
- strb r5, [r0, 0x5]\n\
- strb r6, [r0, 0x6]\n\
- mov r2, sp\n\
- ldrb r2, [r2]\n\
- strb r2, [r0, 0x7]\n\
- mov r2, sp\n\
- ldrb r2, [r2, 0x1]\n\
- strb r2, [r0, 0x8]\n\
- strb r1, [r0, 0x9]\n\
- add sp, 0x8\n\
- pop {r4-r6}\n\
- pop {r0}\n\
- bx r0");
-}
-#endif
void sub_8024644(u8 *r0, u32 r1, u32 r2, u32 r3, u32 r5)
{
- u8 sp[4];
+ u8 sp[2];
0[(u16 *)sp] = r3;
r0[0] = r1;
diff --git a/src/berry_tag_screen.c b/src/berry_tag_screen.c
index 89175c1bf..e5c89bdb7 100644
--- a/src/berry_tag_screen.c
+++ b/src/berry_tag_screen.c
@@ -186,7 +186,7 @@ static void CB2_BerryTagScreen(void)
RunTasks();
AnimateSprites();
BuildOamBuffer();
- do_scheduled_bg_tilemap_copies_to_vram();
+ DoScheduledBgTilemapCopiesToVram();
UpdatePaletteFade();
}
@@ -201,11 +201,11 @@ static void CB2_InitBerryTagScreen(void)
{
while (1)
{
- if (sub_81221EC() == TRUE)
+ if (MenuHelpers_CallLinkSomething() == TRUE)
break;
if (InitBerryTagScreen() == TRUE)
break;
- if (sub_81221AC() == TRUE)
+ if (MenuHelpers_LinkSomething() == TRUE)
break;
}
}
@@ -217,7 +217,7 @@ static bool8 InitBerryTagScreen(void)
case 0:
SetVBlankHBlankCallbacksToNull();
ResetVramOamAndBgCntRegs();
- clear_scheduled_bg_copies_to_vram();
+ ClearScheduledBgCopiesToVram();
gMain.state++;
break;
case 1:
@@ -238,7 +238,7 @@ static bool8 InitBerryTagScreen(void)
gMain.state++;
break;
case 5:
- if (!sub_81221AC())
+ if (!MenuHelpers_LinkSomething())
ResetTasks();
gMain.state++;
break;
@@ -301,8 +301,8 @@ static void HandleInitBackgrounds(void)
SetBgTilemapBuffer(2, sBerryTag->tilemapBuffers[0]);
SetBgTilemapBuffer(3, sBerryTag->tilemapBuffers[1]);
ResetAllBgsCoordinates();
- schedule_bg_copy_tilemap_to_vram(2);
- schedule_bg_copy_tilemap_to_vram(3);
+ ScheduleBgCopyTilemapToVram(2);
+ ScheduleBgCopyTilemapToVram(3);
SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_OBJ_1D_MAP | DISPCNT_OBJ_ON);
SetGpuReg(REG_OFFSET_BLDCNT, 0);
ShowBg(0);
@@ -318,12 +318,12 @@ static bool8 LoadBerryTagGfx(void)
switch (sBerryTag->gfxState)
{
case 0:
- reset_temp_tile_data_buffers();
- decompress_and_copy_tile_data_to_vram(2, gBerryCheck_Gfx, 0, 0, 0);
+ ResetTempTileDataBuffers();
+ DecompressAndCopyTileDataToVram(2, gBerryCheck_Gfx, 0, 0, 0);
sBerryTag->gfxState++;
break;
case 1:
- if (free_temp_tile_data_buffers_if_possible() != TRUE)
+ if (FreeTempTileDataBuffersIfPossible() != TRUE)
{
LZDecompressWram(gBerryTag_Gfx, sBerryTag->tilemapBuffers[0]);
sBerryTag->gfxState++;
@@ -371,8 +371,8 @@ static void HandleInitWindows(void)
LoadPalette(sFontPalette, 0xF0, 0x20);
for (i = 0; i < ARRAY_COUNT(sWindowTemplates) - 1; i++)
PutWindowTilemap(i);
- schedule_bg_copy_tilemap_to_vram(0);
- schedule_bg_copy_tilemap_to_vram(1);
+ ScheduleBgCopyTilemapToVram(0);
+ ScheduleBgCopyTilemapToVram(1);
}
static void PrintTextInBerryTagScreen(u8 windowId, const u8 *text, u8 x, u8 y, s32 speed, u8 colorStructId)
@@ -386,7 +386,7 @@ static void AddBerryTagTextToBg0(void)
FillWindowPixelBuffer(WIN_BERRY_TAG, PIXEL_FILL(15));
PrintTextInBerryTagScreen(WIN_BERRY_TAG, gText_BerryTag, GetStringCenterAlignXOffset(1, gText_BerryTag, 0x40), 1, 0, 1);
PutWindowTilemap(WIN_BERRY_TAG);
- schedule_bg_copy_tilemap_to_vram(0);
+ ScheduleBgCopyTilemapToVram(0);
}
static void PrintAllBerryData(void)
diff --git a/src/bike.c b/src/bike.c
index cd24d2487..c4964b627 100644
--- a/src/bike.c
+++ b/src/bike.c
@@ -7,7 +7,6 @@
#include "metatile_behavior.h"
#include "overworld.h"
#include "sound.h"
-#include "constants/flags.h"
#include "constants/map_types.h"
#include "constants/songs.h"
@@ -660,7 +659,7 @@ static void AcroBikeTransition_SideJump(u8 direction)
}
}
playerObjEvent = &gObjectEvents[gPlayerAvatar.objectEventId];
- PlaySE(SE_JITE_PYOKO);
+ PlaySE(SE_BIKE_HOP);
playerObjEvent->facingDirectionLocked = 1;
PlayerSetAnimId(GetJumpMovementAction(direction), 2);
}
@@ -836,7 +835,7 @@ static void Bike_UpdateDirTimerHistory(u8 dir)
gPlayerAvatar.directionHistory = (gPlayerAvatar.directionHistory << 4) | (dir & 0xF);
- for (i = 7; i != 0; i--)
+ for (i = ARRAY_COUNT(gPlayerAvatar.dirTimerHistory) - 1; i != 0; i--)
gPlayerAvatar.dirTimerHistory[i] = gPlayerAvatar.dirTimerHistory[i - 1];
gPlayerAvatar.dirTimerHistory[0] = 1;
}
@@ -847,7 +846,7 @@ static void Bike_UpdateABStartSelectHistory(u8 input)
gPlayerAvatar.abStartSelectHistory = (gPlayerAvatar.abStartSelectHistory << 4) | (input & 0xF);
- for (i = 7; i != 0; i--)
+ for (i = ARRAY_COUNT(gPlayerAvatar.abStartSelectTimerHistory) - 1; i != 0; i--)
gPlayerAvatar.abStartSelectTimerHistory[i] = gPlayerAvatar.abStartSelectTimerHistory[i - 1];
gPlayerAvatar.abStartSelectTimerHistory[0] = 1;
}
@@ -1001,10 +1000,10 @@ void BikeClearState(int newDirHistory, int newAbStartHistory)
gPlayerAvatar.directionHistory = newDirHistory;
gPlayerAvatar.abStartSelectHistory = newAbStartHistory;
- for (i = 0; i < 8; i++)
+ for (i = 0; i < ARRAY_COUNT(gPlayerAvatar.dirTimerHistory); i++)
gPlayerAvatar.dirTimerHistory[i] = 0;
- for (i = 0; i < 8; i++)
+ for (i = 0; i < ARRAY_COUNT(gPlayerAvatar.abStartSelectTimerHistory); i++)
gPlayerAvatar.abStartSelectTimerHistory[i] = 0;
}
diff --git a/src/braille_puzzles.c b/src/braille_puzzles.c
index c00be82ad..a1ea44e26 100644
--- a/src/braille_puzzles.c
+++ b/src/braille_puzzles.c
@@ -6,7 +6,6 @@
#include "sound.h"
#include "task.h"
#include "constants/field_effects.h"
-#include "constants/flags.h"
#include "constants/maps.h"
#include "constants/songs.h"
#include "constants/species.h"
@@ -87,14 +86,14 @@ bool8 ShouldDoBrailleDigEffect(void)
void DoBrailleDigEffect(void)
{
- MapGridSetMetatileIdAt(16, 8, METATILE_ID(Cave, SealedChamberEntrance_TopLeft));
- MapGridSetMetatileIdAt(17, 8, METATILE_ID(Cave, SealedChamberEntrance_TopMid));
- MapGridSetMetatileIdAt(18, 8, METATILE_ID(Cave, SealedChamberEntrance_TopRight));
- MapGridSetMetatileIdAt(16, 9, METATILE_ID(Cave, SealedChamberEntrance_BottomLeft) | METATILE_COLLISION_MASK);
- MapGridSetMetatileIdAt(17, 9, METATILE_ID(Cave, SealedChamberEntrance_BottomMid));
- MapGridSetMetatileIdAt(18, 9, METATILE_ID(Cave, SealedChamberEntrance_BottomRight) | METATILE_COLLISION_MASK);
+ MapGridSetMetatileIdAt(16, 8, METATILE_Cave_SealedChamberEntrance_TopLeft);
+ MapGridSetMetatileIdAt(17, 8, METATILE_Cave_SealedChamberEntrance_TopMid);
+ MapGridSetMetatileIdAt(18, 8, METATILE_Cave_SealedChamberEntrance_TopRight);
+ MapGridSetMetatileIdAt(16, 9, METATILE_Cave_SealedChamberEntrance_BottomLeft | METATILE_COLLISION_MASK);
+ MapGridSetMetatileIdAt(17, 9, METATILE_Cave_SealedChamberEntrance_BottomMid);
+ MapGridSetMetatileIdAt(18, 9, METATILE_Cave_SealedChamberEntrance_BottomRight | METATILE_COLLISION_MASK);
DrawWholeMapView();
- PlaySE(SE_BAN);
+ PlaySE(SE_BANG);
FlagSet(FLAG_SYS_BRAILLE_DIG);
ScriptContext2_Disable();
}
@@ -141,7 +140,7 @@ void DoBrailleRegirockEffect(void)
MapGridSetMetatileIdAt(15, 27, 563);
MapGridSetMetatileIdAt(16, 27, 3636);
DrawWholeMapView();
- PlaySE(SE_BAN);
+ PlaySE(SE_BANG);
FlagSet(FLAG_SYS_REGIROCK_PUZZLE_COMPLETED);
ScriptContext2_Disable();
}
@@ -165,7 +164,7 @@ void DoBrailleRegisteelEffect(void)
bool8 FldEff_UseFlyAncientTomb(void)
{
- u8 taskId = oei_task_add();
+ u8 taskId = CreateFieldMoveTask();
gTasks[taskId].data[8] = (u32)UseRegisteelHm_Callback >> 16;
gTasks[taskId].data[9] = (u32)UseRegisteelHm_Callback;
@@ -187,7 +186,7 @@ void UseFlyAncientTomb_Finish(void)
MapGridSetMetatileIdAt(15, 27, 563);
MapGridSetMetatileIdAt(16, 27, 3636);
DrawWholeMapView();
- PlaySE(SE_BAN);
+ PlaySE(SE_BANG);
FlagSet(FLAG_SYS_REGISTEEL_PUZZLE_COMPLETED);
ScriptContext2_Disable();
}
@@ -280,14 +279,14 @@ void UseRegirockHm_Callback(void)
void DoBrailleRegirockEffect(void)
{
- MapGridSetMetatileIdAt(14, 26, METATILE_ID(Cave, SealedChamberEntrance_TopLeft));
- MapGridSetMetatileIdAt(15, 26, METATILE_ID(Cave, SealedChamberEntrance_TopMid));
- MapGridSetMetatileIdAt(16, 26, METATILE_ID(Cave, SealedChamberEntrance_TopRight));
- MapGridSetMetatileIdAt(14, 27, METATILE_ID(Cave, SealedChamberEntrance_BottomLeft) | METATILE_COLLISION_MASK);
- MapGridSetMetatileIdAt(15, 27, METATILE_ID(Cave, SealedChamberEntrance_BottomMid));
- MapGridSetMetatileIdAt(16, 27, METATILE_ID(Cave, SealedChamberEntrance_BottomRight) | METATILE_COLLISION_MASK);
+ MapGridSetMetatileIdAt(14, 26, METATILE_Cave_SealedChamberEntrance_TopLeft);
+ MapGridSetMetatileIdAt(15, 26, METATILE_Cave_SealedChamberEntrance_TopMid);
+ MapGridSetMetatileIdAt(16, 26, METATILE_Cave_SealedChamberEntrance_TopRight);
+ MapGridSetMetatileIdAt(14, 27, METATILE_Cave_SealedChamberEntrance_BottomLeft | METATILE_COLLISION_MASK);
+ MapGridSetMetatileIdAt(15, 27, METATILE_Cave_SealedChamberEntrance_BottomMid);
+ MapGridSetMetatileIdAt(16, 27, METATILE_Cave_SealedChamberEntrance_BottomRight | METATILE_COLLISION_MASK);
DrawWholeMapView();
- PlaySE(SE_BAN);
+ PlaySE(SE_BANG);
FlagSet(FLAG_SYS_REGIROCK_PUZZLE_COMPLETED);
ScriptContext2_Disable();
}
@@ -319,14 +318,14 @@ void UseRegisteelHm_Callback(void)
void DoBrailleRegisteelEffect(void)
{
- MapGridSetMetatileIdAt(14, 26, METATILE_ID(Cave, SealedChamberEntrance_TopLeft));
- MapGridSetMetatileIdAt(15, 26, METATILE_ID(Cave, SealedChamberEntrance_TopMid));
- MapGridSetMetatileIdAt(16, 26, METATILE_ID(Cave, SealedChamberEntrance_TopRight));
- MapGridSetMetatileIdAt(14, 27, METATILE_ID(Cave, SealedChamberEntrance_BottomLeft) | METATILE_COLLISION_MASK);
- MapGridSetMetatileIdAt(15, 27, METATILE_ID(Cave, SealedChamberEntrance_BottomMid));
- MapGridSetMetatileIdAt(16, 27, METATILE_ID(Cave, SealedChamberEntrance_BottomRight) | METATILE_COLLISION_MASK);
+ MapGridSetMetatileIdAt(14, 26, METATILE_Cave_SealedChamberEntrance_TopLeft);
+ MapGridSetMetatileIdAt(15, 26, METATILE_Cave_SealedChamberEntrance_TopMid);
+ MapGridSetMetatileIdAt(16, 26, METATILE_Cave_SealedChamberEntrance_TopRight);
+ MapGridSetMetatileIdAt(14, 27, METATILE_Cave_SealedChamberEntrance_BottomLeft | METATILE_COLLISION_MASK);
+ MapGridSetMetatileIdAt(15, 27, METATILE_Cave_SealedChamberEntrance_BottomMid);
+ MapGridSetMetatileIdAt(16, 27, METATILE_Cave_SealedChamberEntrance_BottomRight | METATILE_COLLISION_MASK);
DrawWholeMapView();
- PlaySE(SE_BAN);
+ PlaySE(SE_BANG);
FlagSet(FLAG_SYS_REGISTEEL_PUZZLE_COMPLETED);
ScriptContext2_Disable();
}
@@ -411,7 +410,7 @@ bool32 BrailleWait_CheckButtonPress(void)
// this used to be FldEff_UseFlyAncientTomb . why did GF merge the 2 functions?
bool8 FldEff_UsePuzzleEffect(void)
{
- u8 taskId = oei_task_add();
+ u8 taskId = CreateFieldMoveTask();
if (sBraillePuzzleCallbackFlag == REGISTEEL_PUZZLE)
{
diff --git a/src/cable_car.c b/src/cable_car.c
index 00eedfdae..acd0bc7a5 100644
--- a/src/cable_car.c
+++ b/src/cable_car.c
@@ -22,66 +22,74 @@
#include "constants/songs.h"
#include "constants/weather.h"
+#define GOING_DOWN gSpecialVar_0x8004
+
+#define STATE_END 0xFF
+
+#define TAG_CABLE_CAR 1
+#define TAG_DOOR 2
+#define TAG_CABLE 3
+
struct CableCar
{
- u8 taskId;
+ u8 bgTaskId;
u8 state;
u8 weather;
- u16 unk4;
+ u16 weatherDelay;
u16 timer;
u8 bg0HorizontalOffset;
u8 bg0VerticalOffset;
- u8 fillerA[0x2];
+ u8 unused0[2];
u8 bg1HorizontalOffset;
u8 bg1VerticalOffset;
- u8 fillerE[0x6];
+ u8 unused1[6];
u8 bg3HorizontalOffset;
u8 bg3VerticalOffset;
- u8 filler16[0x2];
- u8 unk18;
- u8 unk19;
- u8 unk1A;
- u8 unk1B;
- u8 unk1C;
- u8 unk1D;
- u8 unk1E;
- u8 unk1F;
- u8 unk20;
- u16 unk22[9][12];
- u8 fillerFA[0x2];
- /*0x00FC*/ u16 bgTilemapBuffers[4][0x800];
- /*0x40FC*/ u16 *mtChimneyTilemap;
- /*0x4100*/ u16 *treeTilemap;
- /*0x4104*/ u16 *mountainTilemap;
- /*0x4108*/ const u16 *pylonHookTilemapEntries;
- /*0x410C*/ u8 *pylonStemTilemap;
+ u8 unused2[2];
+ u8 groundTileIdx;
+ u8 groundSegmentXStart;
+ u8 groundSegmentYStart;
+ u8 groundTilemapOffset;
+ u8 groundTimer; // Incremented, but does nothing
+ u8 groundXOffset;
+ u8 groundYOffset;
+ u8 groundXBase;
+ u8 groundYBase;
+ u16 groundTileBuffer[9][12];
+ u8 unused3[2];
+ u16 bgTilemapBuffers[4][BG_SCREEN_SIZE];
+ u16 *groundTilemap;
+ u16 *treesTilemap;
+ u16 *bgMountainsTilemap;
+ const u16 *pylonHookTilemapEntries;
+ u8 *pylonStemTilemap;
};
static EWRAM_DATA struct CableCar *sCableCar = NULL;
-EWRAM_DATA u8 gUnknown_0203ABB0 = 0;
-EWRAM_DATA u8 gUnknown_0203ABB1 = 0;
-EWRAM_DATA u8 gUnknown_0203ABB2 = 0;
-EWRAM_DATA u8 gUnknown_0203ABB3 = 0;
-EWRAM_DATA u8 gUnknown_0203ABB4 = 0;
-EWRAM_DATA u8 gUnknown_0203ABB5 = 0;
-
-static void CableCarMainCallback_Setup(void);
-static void sub_8150B6C(u8);
-static void LoadCableCarSprites(void);
-static void sub_81514C8(u8);
-static void sub_81503E4(u8);
-static void sub_8150550(u8);
-static void sub_8150664(u8);
-static void CableCarVblankCallback(void);
-static void CableCarMainCallback_Run(void);
-static void sub_815115C(void);
-static void sub_81511B8(void);
-static void sub_8150868(struct Sprite *);
-static void nullsub_58(struct Sprite *);
-static void sub_8151214(void);
-static void sub_8151388(void);
-
-const struct BgTemplate gCableCarBgTemplates[4] = {
+static EWRAM_DATA u8 sGroundX_Up = 0;
+static EWRAM_DATA u8 sGroundY_Up = 0;
+static EWRAM_DATA u8 sGroundSegmentY_Up = 0;
+static EWRAM_DATA u8 sGroundX_Down = 0;
+static EWRAM_DATA u8 sGroundY_Down = 0;
+static EWRAM_DATA u8 sGroundSegmentY_Down = 0;
+
+static void CB2_LoadCableCar(void);
+static void SetBgRegs(bool8);
+static void CreateCableCarSprites(void);
+static void InitGroundTilemapData(bool8);
+static void Task_CableCar(u8);
+static void Task_AnimateBgGoingUp(u8);
+static void Task_AnimateBgGoingDown(u8);
+static void VBlankCB_CableCar(void);
+static void CB2_CableCar(void);
+static void AnimateGroundGoingUp(void);
+static void AnimateGroundGoingDown(void);
+static void SpriteCB_CableCar(struct Sprite *);
+static void SpriteCB_Cable(struct Sprite *);
+static void DrawNextGroundSegmentGoingUp(void);
+static void DrawNextGroundSegmentGoingDown(void);
+
+static const struct BgTemplate sBgTemplates[4] = {
{
.bg = 0,
.charBaseIndex = 0,
@@ -120,11 +128,11 @@ const struct BgTemplate gCableCarBgTemplates[4] = {
},
};
-const u8 gCableCarMtChimneyTilemap[] = INCBIN_U8("graphics/misc/cable_car_mt_chimney_map.bin.lz");
-const u8 gCableCarTreeTilemap[] = INCBIN_U8("graphics/misc/cable_car_tree_map.bin.lz");
-const u8 gCableCarMountainTilemap[] = INCBIN_U8("graphics/misc/cable_car_mountain_map.bin.lz");
+static const u8 sGround_Tilemap[] = INCBIN_U8("graphics/cable_car/ground.bin.lz");
+static const u8 sTrees_Tilemap[] = INCBIN_U8("graphics/cable_car/trees.bin.lz");
+static const u8 sBgMountains_Tilemap[] = INCBIN_U8("graphics/cable_car/bg_mountains.bin.lz");
-const u16 gCableCarPylonHookTilemapEntries[] = {
+static const u16 sPylonHook_TilemapEntries[] = {
0x3000,
0x3001,
0x3002,
@@ -137,21 +145,21 @@ const u16 gCableCarPylonHookTilemapEntries[] = {
0x3009,
};
-const u8 gCableCarPylonStemTilemap[] = INCBIN_U8("graphics/misc/cable_car_pylon_stem_map.bin.lz");
+static const u8 sPylonStems_Tilemap[] = INCBIN_U8("graphics/cable_car/pylons.bin.lz");
-const struct CompressedSpriteSheet gUnknown_085CDB54[] = {
- { gCableCar_Gfx, 0x800, 1 },
- { gCableCarDoor_Gfx, 0x40, 2 },
- { gCableCarCord_Gfx, 0x80, 3 },
+static const struct CompressedSpriteSheet sSpriteSheets[] = {
+ { gCableCar_Gfx, 0x800, TAG_CABLE_CAR },
+ { gCableCarDoor_Gfx, 0x40, TAG_DOOR },
+ { gCableCarCable_Gfx, 0x80, TAG_CABLE },
{ },
};
-const struct SpritePalette gUnknown_085CDB74[] = {
- { gCableCar_Pal, 1 },
+static const struct SpritePalette sSpritePalettes[] = {
+ { gCableCar_Pal, TAG_CABLE_CAR },
{ }
};
-const struct OamData gOamData_85CDB84 =
+static const struct OamData sOam_CableCar =
{
.y = 0,
.affineMode = ST_OAM_AFFINE_DOUBLE,
@@ -165,7 +173,7 @@ const struct OamData gOamData_85CDB84 =
.paletteNum = 0,
};
-const struct OamData gOamData_85CDB8C =
+static const struct OamData sOam_CableCarDoor =
{
.y = 0,
.affineMode = ST_OAM_AFFINE_DOUBLE,
@@ -179,7 +187,7 @@ const struct OamData gOamData_85CDB8C =
.paletteNum = 0,
};
-const struct OamData gOamData_85CDB94 =
+static const struct OamData sOam_Cable =
{
.y = 0,
.affineMode = ST_OAM_AFFINE_DOUBLE,
@@ -193,43 +201,43 @@ const struct OamData gOamData_85CDB94 =
.paletteNum = 0,
};
-const struct SpriteTemplate gSpriteTemplate_85CDB9C[] =
+static const struct SpriteTemplate sSpriteTemplate_CableCar[] =
{
{
- .tileTag = 1,
- .paletteTag = 1,
- .oam = &gOamData_85CDB84,
+ .tileTag = TAG_CABLE_CAR,
+ .paletteTag = TAG_CABLE_CAR,
+ .oam = &sOam_CableCar,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_8150868,
+ .callback = SpriteCB_CableCar,
},
{
- .tileTag = 2,
- .paletteTag = 1,
- .oam = &gOamData_85CDB8C,
+ .tileTag = TAG_DOOR,
+ .paletteTag = TAG_CABLE_CAR,
+ .oam = &sOam_CableCarDoor,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_8150868,
+ .callback = SpriteCB_CableCar,
},
};
-const struct SpriteTemplate gSpriteTemplate_85CDBCC = {
- .tileTag = 3,
- .paletteTag = 1,
- .oam = &gOamData_85CDB94,
+static const struct SpriteTemplate sSpriteTemplate_Cable = {
+ .tileTag = TAG_CABLE,
+ .paletteTag = TAG_CABLE_CAR,
+ .oam = &sOam_Cable,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
- .callback = nullsub_58,
+ .callback = SpriteCB_Cable,
};
-static void CableCarTask1(u8 taskId)
+static void Task_LoadCableCar(u8 taskId)
{
if (!gPaletteFade.active)
{
- SetMainCallback2(CableCarMainCallback_Setup);
+ SetMainCallback2(CB2_LoadCableCar);
DestroyTask(taskId);
}
}
@@ -237,11 +245,11 @@ static void CableCarTask1(u8 taskId)
void CableCar(void)
{
ScriptContext2_Enable();
- CreateTask(CableCarTask1, 1);
+ CreateTask(Task_LoadCableCar, 1);
BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB(0, 0, 0));
}
-static void CableCarMainCallback_Setup(void)
+static void CB2_LoadCableCar(void)
{
u16 imebak;
u8 i = 0;
@@ -252,7 +260,7 @@ static void CableCarMainCallback_Setup(void)
case 0:
default:
SetVBlankCallback(NULL);
- sub_8150B6C(0);
+ SetBgRegs(FALSE);
ScanlineEffect_Stop();
DmaFillLarge16(3, 0, (void *)VRAM, VRAM_SIZE, 0x1000);
DmaFill32Defvars(3, 0, (void *)OAM, OAM_SIZE);
@@ -265,15 +273,15 @@ static void CableCarMainCallback_Setup(void)
ResetTasks();
FreeAllSpritePalettes();
ResetPaletteFade();
- reset_temp_tile_data_buffers();
+ ResetTempTileDataBuffers();
StartWeather();
- for (i = 0; i < 20; i++)
+ for (i = 0; i < NUM_ASH_SPRITES; i++)
gWeatherPtr->sprites.s2.ashSprites[i] = NULL;
InitMapMusic();
ResetMapMusic();
ResetBgsAndClearDma3BusyFlags(0);
- InitBgsFromTemplates(0, gCableCarBgTemplates, ARRAY_COUNT(gCableCarBgTemplates));
+ InitBgsFromTemplates(0, sBgTemplates, ARRAY_COUNT(sBgTemplates));
SetBgTilemapBuffer(0, sCableCar->bgTilemapBuffers[0]);
SetBgTilemapBuffer(1, sCableCar->bgTilemapBuffers[1]);
SetBgTilemapBuffer(2, sCableCar->bgTilemapBuffers[2]);
@@ -282,27 +290,27 @@ static void CableCarMainCallback_Setup(void)
gMain.state++;
break;
case 2:
- for (i = 0; i < 3; i++)
- LoadCompressedSpriteSheet(&gUnknown_085CDB54[i]);
-
- LoadSpritePalettes(gUnknown_085CDB74);
- sCableCar->mtChimneyTilemap = malloc_and_decompress(gCableCarMtChimneyTilemap, &sizeOut);
- sCableCar->treeTilemap = malloc_and_decompress(gCableCarTreeTilemap, &sizeOut);
- sCableCar->mountainTilemap = malloc_and_decompress(gCableCarMountainTilemap, &sizeOut);
- sCableCar->pylonStemTilemap = malloc_and_decompress(gCableCarPylonStemTilemap, &sizeOut);
- sCableCar->pylonHookTilemapEntries = gCableCarPylonHookTilemapEntries;
- decompress_and_copy_tile_data_to_vram(0, gUnknown_08DBA5B8, 0, 0, 0);
+ for (i = 0; i < ARRAY_COUNT(sSpriteSheets) - 1; i++)
+ LoadCompressedSpriteSheet(&sSpriteSheets[i]);
+
+ LoadSpritePalettes(sSpritePalettes);
+ sCableCar->groundTilemap = malloc_and_decompress(sGround_Tilemap, &sizeOut);
+ sCableCar->treesTilemap = malloc_and_decompress(sTrees_Tilemap, &sizeOut);
+ sCableCar->bgMountainsTilemap = malloc_and_decompress(sBgMountains_Tilemap, &sizeOut);
+ sCableCar->pylonStemTilemap = malloc_and_decompress(sPylonStems_Tilemap, &sizeOut);
+ sCableCar->pylonHookTilemapEntries = sPylonHook_TilemapEntries;
+ DecompressAndCopyTileDataToVram(0, gCableCarBg_Gfx, 0, 0, 0);
gMain.state++;
break;
case 3:
- if (!free_temp_tile_data_buffers_if_possible())
+ if (!FreeTempTileDataBuffersIfPossible())
{
- LoadPalette(gUnknown_08DBA518, 0, 0x80);
+ LoadPalette(gCableCarBg_Pal, 0, 0x80);
gMain.state++;
}
break;
case 4:
- LoadCableCarSprites();
+ CreateCableCarSprites();
RunTasks();
gMain.state++;
break;
@@ -313,7 +321,7 @@ static void CableCarMainCallback_Setup(void)
}
else if (gWeatherPtr->sprites.s2.ashSprites[0])
{
- for (i = 0; i < 20; i++)
+ for (i = 0; i < NUM_ASH_SPRITES; i++)
{
if (gWeatherPtr->sprites.s2.ashSprites[i])
gWeatherPtr->sprites.s2.ashSprites[i]->oam.priority = 0;
@@ -323,28 +331,28 @@ static void CableCarMainCallback_Setup(void)
}
break;
case 6:
- CopyToBgTilemapBufferRect_ChangePalette(1, sCableCar->treeTilemap, 0, 17, 32, 15, 17);
- CopyToBgTilemapBufferRect_ChangePalette(2, sCableCar->mountainTilemap, 0, 0, 30, 20, 17);
+ CopyToBgTilemapBufferRect_ChangePalette(1, sCableCar->treesTilemap, 0, 17, 32, 15, 17);
+ CopyToBgTilemapBufferRect_ChangePalette(2, sCableCar->bgMountainsTilemap, 0, 0, 30, 20, 17);
CopyToBgTilemapBufferRect_ChangePalette(3, sCableCar->pylonHookTilemapEntries, 0, 0, 5, 2, 17);
CopyToBgTilemapBufferRect_ChangePalette(3, sCableCar->pylonStemTilemap, 0, 2, 2, 20, 17);
gMain.state++;
break;
case 7:
- sub_81514C8(gSpecialVar_0x8004);
- CopyToBgTilemapBufferRect_ChangePalette(0, sCableCar->mtChimneyTilemap + 0x48, 0, 14, 12, 3, 17);
- CopyToBgTilemapBufferRect_ChangePalette(0, sCableCar->mtChimneyTilemap + 0x6C, 12, 17, 12, 3, 17);
- CopyToBgTilemapBufferRect_ChangePalette(0, sCableCar->mtChimneyTilemap + 0x90, 24, 20, 12, 3, 17);
- CopyToBgTilemapBufferRect_ChangePalette(0, sCableCar->mtChimneyTilemap + 0x0, 0, 17, 12, 3, 17);
- CopyToBgTilemapBufferRect_ChangePalette(0, sCableCar->mtChimneyTilemap + 0x24, 0, 20, 12, 3, 17);
- CopyToBgTilemapBufferRect_ChangePalette(0, sCableCar->mtChimneyTilemap + 0x0, 12, 20, 12, 3, 17);
- CopyToBgTilemapBufferRect_ChangePalette(0, sCableCar->mtChimneyTilemap + 0x24, 12, 23, 12, 3, 17);
- CopyToBgTilemapBufferRect_ChangePalette(0, sCableCar->mtChimneyTilemap + 0x0, 24, 23, 12, 3, 17);
+ InitGroundTilemapData(GOING_DOWN);
+ CopyToBgTilemapBufferRect_ChangePalette(0, sCableCar->groundTilemap + 0x48, 0, 14, 12, 3, 17);
+ CopyToBgTilemapBufferRect_ChangePalette(0, sCableCar->groundTilemap + 0x6C, 12, 17, 12, 3, 17);
+ CopyToBgTilemapBufferRect_ChangePalette(0, sCableCar->groundTilemap + 0x90, 24, 20, 12, 3, 17);
+ CopyToBgTilemapBufferRect_ChangePalette(0, sCableCar->groundTilemap + 0x0, 0, 17, 12, 3, 17);
+ CopyToBgTilemapBufferRect_ChangePalette(0, sCableCar->groundTilemap + 0x24, 0, 20, 12, 3, 17);
+ CopyToBgTilemapBufferRect_ChangePalette(0, sCableCar->groundTilemap + 0x0, 12, 20, 12, 3, 17);
+ CopyToBgTilemapBufferRect_ChangePalette(0, sCableCar->groundTilemap + 0x24, 12, 23, 12, 3, 17);
+ CopyToBgTilemapBufferRect_ChangePalette(0, sCableCar->groundTilemap + 0x0, 24, 23, 12, 3, 17);
gMain.state++;
break;
case 8:
BeginNormalPaletteFade(0xFFFFFFFF, 3, 16, 0, RGB(0, 0, 0));
- FadeInNewBGM(MUS_ROPEWAY, 1);
- sub_8150B6C(1);
+ FadeInNewBGM(MUS_CABLE_CAR, 1);
+ SetBgRegs(TRUE);
gMain.state++;
break;
case 9:
@@ -352,18 +360,18 @@ static void CableCarMainCallback_Setup(void)
REG_IME = 0;
REG_IE |= INTR_FLAG_VBLANK;
REG_IME = imebak;
- SetVBlankCallback(CableCarVblankCallback);
- SetMainCallback2(CableCarMainCallback_Run);
- CreateTask(sub_81503E4, 0);
- if (gSpecialVar_0x8004 == 0)
- sCableCar->taskId = CreateTask(sub_8150550, 1);
+ SetVBlankCallback(VBlankCB_CableCar);
+ SetMainCallback2(CB2_CableCar);
+ CreateTask(Task_CableCar, 0);
+ if (!GOING_DOWN)
+ sCableCar->bgTaskId = CreateTask(Task_AnimateBgGoingUp, 1);
else
- sCableCar->taskId = CreateTask(sub_8150664, 1);
+ sCableCar->bgTaskId = CreateTask(Task_AnimateBgGoingDown, 1);
break;
}
}
-static void CableCarMainCallback_Run(void)
+static void CB2_CableCar(void)
{
RunTasks();
AnimateSprites();
@@ -372,7 +380,7 @@ static void CableCarMainCallback_Run(void)
MapMusicMain();
}
-static void CleanupCableCar(void)
+static void CB2_EndCableCar(void)
{
u8 i = 0;
@@ -380,10 +388,10 @@ static void CleanupCableCar(void)
HideBg(1);
HideBg(2);
HideBg(3);
- sub_8150B6C(0);
+ SetBgRegs(FALSE);
gSpriteCoordOffsetX = 0;
SetCurrentAndNextWeatherNoDelay(WEATHER_NONE);
- for (i = 0; i < 20; i++)
+ for (i = 0; i < NUM_ASH_SPRITES; i++)
gWeatherPtr->sprites.s2.ashSprites[i] = NULL;
ResetTasks();
@@ -396,9 +404,9 @@ static void CleanupCableCar(void)
ResetBgsAndClearDma3BusyFlags(0);
sCableCar->pylonHookTilemapEntries = NULL;
FREE_AND_SET_NULL(sCableCar->pylonStemTilemap);
- FREE_AND_SET_NULL(sCableCar->mountainTilemap);
- FREE_AND_SET_NULL(sCableCar->treeTilemap);
- FREE_AND_SET_NULL(sCableCar->mtChimneyTilemap);
+ FREE_AND_SET_NULL(sCableCar->bgMountainsTilemap);
+ FREE_AND_SET_NULL(sCableCar->treesTilemap);
+ FREE_AND_SET_NULL(sCableCar->groundTilemap);
FREE_AND_SET_NULL(sCableCar);
DmaFillLarge16(3, 0, (void *)VRAM, VRAM_SIZE, 0x1000);
DmaFill32Defvars(3, 0, (void *)OAM, OAM_SIZE);
@@ -408,7 +416,7 @@ static void CleanupCableCar(void)
SetMainCallback2(CB2_LoadMap);
}
-static void sub_81503E4(u8 taskId)
+static void Task_CableCar(u8 taskId)
{
u8 i = 0;
@@ -416,13 +424,15 @@ static void sub_81503E4(u8 taskId)
switch (sCableCar->state)
{
case 0:
- if (sCableCar->timer == sCableCar->unk4)
+ // Wait to change weather
+ if (sCableCar->timer == sCableCar->weatherDelay)
{
SetNextWeather(sCableCar->weather);
sCableCar->state = 1;
}
break;
case 1:
+ // Update ash sprites
switch (sCableCar->weather)
{
case WEATHER_VOLCANIC_ASH:
@@ -442,7 +452,7 @@ static void sub_81503E4(u8 taskId)
{
sCableCar->state = 2;
}
- else if (sCableCar->timer >= sCableCar->unk4 + 8)
+ else if (sCableCar->timer >= sCableCar->weatherDelay + 8)
{
for (; i < NUM_ASH_SPRITES; i++)
{
@@ -454,6 +464,7 @@ static void sub_81503E4(u8 taskId)
}
break;
case 2:
+ // Wait to fade out
if (sCableCar->timer == 570)
{
sCableCar->state = 3;
@@ -462,21 +473,22 @@ static void sub_81503E4(u8 taskId)
}
break;
case 3:
+ // Wait for fade out
if (!gPaletteFade.active)
- sCableCar->state = 0xFF;
+ sCableCar->state = STATE_END;
break;
- case 0xFF:
+ case STATE_END:
SetVBlankCallback(NULL);
DestroyTask(taskId);
- DestroyTask(sCableCar->taskId);
- SetMainCallback2(CleanupCableCar);
+ DestroyTask(sCableCar->bgTaskId);
+ SetMainCallback2(CB2_EndCableCar);
break;
}
}
-static void sub_8150550(u8 taskId)
+static void Task_AnimateBgGoingUp(u8 taskId)
{
- if (sCableCar->state != 0xFF)
+ if (sCableCar->state != STATE_END)
{
sCableCar->bg3HorizontalOffset--;
if ((sCableCar->timer % 2) == 0)
@@ -507,13 +519,13 @@ static void sub_8150550(u8 taskId)
}
}
- sub_815115C();
+ AnimateGroundGoingUp();
gSpriteCoordOffsetX = (gSpriteCoordOffsetX + 1) % 128;
}
-static void sub_8150664(u8 taskId)
+static void Task_AnimateBgGoingDown(u8 taskId)
{
- if (sCableCar->state != 0xFF)
+ if (sCableCar->state != STATE_END)
{
sCableCar->bg3HorizontalOffset++;
if ((sCableCar->timer % 2) == 0)
@@ -548,14 +560,14 @@ static void sub_8150664(u8 taskId)
}
}
- sub_81511B8();
- if (sCableCar->timer < sCableCar->unk4)
+ AnimateGroundGoingDown();
+ if (sCableCar->timer < sCableCar->weatherDelay)
gSpriteCoordOffsetX = (gSpriteCoordOffsetX + 247) % 248;
else
gWeatherPtr->ashBaseSpritesX = (gWeatherPtr->ashBaseSpritesX + 247) % 248;
}
-static void CableCarVblankCallback(void)
+static void VBlankCB_CableCar(void)
{
CopyBgTilemapBufferToVram(0);
CopyBgTilemapBufferToVram(3);
@@ -570,83 +582,100 @@ static void CableCarVblankCallback(void)
TransferPlttBuffer();
}
-static void nullsub_58(struct Sprite *sprite)
+static void SpriteCB_Cable(struct Sprite *sprite)
{
+
}
-static void sub_8150868(struct Sprite *sprite)
+#define sXPos data[0]
+#define sYPos data[1]
+
+static void SpriteCB_CableCar(struct Sprite *sprite)
{
- if (sCableCar->state != 0xFF)
+ if (sCableCar->state != STATE_END)
{
- if (gSpecialVar_0x8004 == 0)
+ if (!GOING_DOWN)
{
- sprite->pos1.x = sprite->data[0] - (u8)(0.14f * S16TOPOSFLOAT(sCableCar->timer));
- sprite->pos1.y = sprite->data[1] - (u8)(0.067f * S16TOPOSFLOAT(sCableCar->timer));
+ sprite->pos1.x = sprite->sXPos - (u8)(0.14f * S16TOPOSFLOAT(sCableCar->timer));
+ sprite->pos1.y = sprite->sYPos - (u8)(0.067f * S16TOPOSFLOAT(sCableCar->timer));
}
else
{
- sprite->pos1.x = sprite->data[0] + (u8)(0.14f * S16TOPOSFLOAT(sCableCar->timer));
- sprite->pos1.y = sprite->data[1] + (u8)(0.067f * S16TOPOSFLOAT(sCableCar->timer));
+ sprite->pos1.x = sprite->sXPos + (u8)(0.14f * S16TOPOSFLOAT(sCableCar->timer));
+ sprite->pos1.y = sprite->sYPos + (u8)(0.067f * S16TOPOSFLOAT(sCableCar->timer));
}
}
}
-void sub_8150948(struct Sprite *sprite)
+#define sState data[2]
+#define sTimer data[3]
+
+static void SpriteCB_Player(struct Sprite *sprite)
{
- if (sCableCar->state != 255)
+ if (sCableCar->state != STATE_END)
{
- if (!gSpecialVar_0x8004)
+ // Move along with cable car
+ if (!GOING_DOWN)
{
- sprite->pos1.x = sprite->data[0] - (u8)(0.14f * S16TOPOSFLOAT(sCableCar->timer));
- sprite->pos1.y = sprite->data[1] - (u8)(0.067f * S16TOPOSFLOAT(sCableCar->timer));
+ sprite->pos1.x = sprite->sXPos - (u8)(0.14f * S16TOPOSFLOAT(sCableCar->timer));
+ sprite->pos1.y = sprite->sYPos - (u8)(0.067f * S16TOPOSFLOAT(sCableCar->timer));
}
else
{
- sprite->pos1.x = sprite->data[0] + (u8)(0.14f * S16TOPOSFLOAT(sCableCar->timer));
- sprite->pos1.y = sprite->data[1] + (u8)(0.067f * S16TOPOSFLOAT(sCableCar->timer));
+ sprite->pos1.x = sprite->sXPos + (u8)(0.14f * S16TOPOSFLOAT(sCableCar->timer));
+ sprite->pos1.y = sprite->sYPos + (u8)(0.067f * S16TOPOSFLOAT(sCableCar->timer));
}
- switch (sprite->data[2])
+ // Bounce up and down
+ switch (sprite->sState)
{
case 0:
sprite->pos2.y = 17;
- if (sprite->data[3] ++ > 9)
+ if (sprite->sTimer++ > 9)
{
- sprite->data[3] = 0;
- sprite->data[2] ++;
+ sprite->sTimer = 0;
+ sprite->sState++;
}
break;
default:
sprite->pos2.y = 16;
- if (sprite->data[3] ++ > 9)
+ if (sprite->sTimer++ > 9)
{
- sprite->data[3] = 0;
- sprite->data[2] = 0;
+ sprite->sTimer = 0;
+ sprite->sState = 0;
}
break;
}
}
}
-static void sub_8150A68(struct Sprite *sprite)
+#undef sState
+#undef sTimer
+
+#define sTimer data[0]
+#define sSameDir data[1] // Whether or not the hiker is headed the same dir as the Cable Car
+#define sDelay data[2]
+
+static void SpriteCB_HikerGoingUp(struct Sprite *sprite)
{
- if (sprite->data[0] == 0)
+ if (sprite->sTimer == 0)
{
sprite->pos1.x += 2 * sprite->centerToCornerVecX;
sprite->pos1.y += 16 + sprite->centerToCornerVecY;
}
- if (++sprite->data[0] >= sprite->data[2])
+ if (++sprite->sTimer >= sprite->sDelay)
{
- switch (sprite->data[1])
+ switch (sprite->sSameDir)
{
- case 0:
+ case FALSE:
sprite->pos1.x++;
- if ((sprite->data[0] % 4) == 0)
+ if ((sprite->sTimer % 4) == 0)
sprite->pos1.y++;
break;
- case 1:
- if ((sprite->data[0] % 2) != 0)
+ case TRUE:
+ // Hiker moves slower if travelling with the Cable Car
+ if ((sprite->sTimer % 2) != 0)
{
sprite->pos1.x++;
if ((sprite->pos1.x % 4) == 0)
@@ -660,22 +689,23 @@ static void sub_8150A68(struct Sprite *sprite)
}
}
-static void sub_8150AF4(struct Sprite *sprite)
+static void SpriteCB_HikerGoingDown(struct Sprite *sprite)
{
- if (sprite->data[0] == 0)
+ if (sprite->sTimer == 0)
sprite->pos1.y += 16 + sprite->centerToCornerVecY;
- if (++sprite->data[0] >= sprite->data[2])
+ if (++sprite->sTimer >= sprite->sDelay)
{
- switch (sprite->data[1])
+ switch (sprite->sSameDir)
{
- case 0:
+ case FALSE:
sprite->pos1.x--;
- if ((sprite->data[0] % 4) == 0)
+ if ((sprite->sTimer % 4) == 0)
sprite->pos1.y--;
break;
- case 1:
- if ((sprite->data[0] % 2) != 0)
+ case TRUE:
+ // Hiker moves slower if travelling with the Cable Car
+ if ((sprite->sTimer % 2) != 0)
{
sprite->pos1.x--;
if ((sprite->pos1.x % 4) == 0)
@@ -689,9 +719,11 @@ static void sub_8150AF4(struct Sprite *sprite)
}
}
-static void sub_8150B6C(bool8 which)
+#undef sTimer
+
+static void SetBgRegs(bool8 active)
{
- switch (which)
+ switch (active)
{
case FALSE:
default:
@@ -723,7 +755,7 @@ static void sub_8150B6C(bool8 which)
SetGpuReg(REG_OFFSET_WIN1H, 0);
SetGpuReg(REG_OFFSET_WIN0V, 0);
SetGpuReg(REG_OFFSET_WIN1V, 0);
- if (gSpecialVar_0x8004 == 0)
+ if (!GOING_DOWN)
{
sCableCar->bg3HorizontalOffset = 176;
sCableCar->bg3VerticalOffset = 16;
@@ -762,14 +794,14 @@ static void sub_8150B6C(bool8 which)
}
}
-static void LoadCableCarSprites(void)
+static void CreateCableCarSprites(void)
{
u8 spriteId;
u8 i;
u8 playerGraphicsIds[2] = {
- OBJ_EVENT_GFX_RIVAL_BRENDAN_NORMAL,
- OBJ_EVENT_GFX_RIVAL_MAY_NORMAL
+ [MALE] = OBJ_EVENT_GFX_RIVAL_BRENDAN_NORMAL,
+ [FEMALE] = OBJ_EVENT_GFX_RIVAL_MAY_NORMAL
};
u16 rval = Random();
u8 hikerGraphicsIds[4] = {
@@ -779,248 +811,264 @@ static void LoadCableCarSprites(void)
OBJ_EVENT_GFX_ZIGZAGOON_1
};
s16 hikerCoords[2][2] = {
- { 0, 80 },
- { 240, 146 }
- };
- u8 hikerMovementDelayTable[4] = {
- 0,
- 60,
- 120,
- 170
+ { 0, 80 }, // Going up
+ { 240, 146 } // Going down
};
- void (*callbacks[2])(struct Sprite *) = {
- sub_8150A68,
- sub_8150AF4
+ u8 hikerMovementDelayTable[4] = { 0, 60, 120, 170};
+ void (*hikerCallbacks[2])(struct Sprite *) = {
+ SpriteCB_HikerGoingUp,
+ SpriteCB_HikerGoingDown
};
- switch (gSpecialVar_0x8004)
+ switch (GOING_DOWN)
{
- case 0:
+ case FALSE:
default:
- spriteId = AddPseudoObjectEvent(playerGraphicsIds[gSaveBlock2Ptr->playerGender], sub_8150948, 200, 73, 102);
+ // Create player sprite
+ spriteId = AddPseudoObjectEvent(playerGraphicsIds[gSaveBlock2Ptr->playerGender], SpriteCB_Player, 200, 73, 102);
if (spriteId != MAX_SPRITES)
{
gSprites[spriteId].oam.priority = 2;
gSprites[spriteId].pos2.x = 8;
gSprites[spriteId].pos2.y = 16;
- gSprites[spriteId].data[0] = 0xc8;
- gSprites[spriteId].data[1] = 0x49;
+ gSprites[spriteId].sXPos = 200;
+ gSprites[spriteId].sYPos = 73;
}
- spriteId = CreateSprite(&gSpriteTemplate_85CDB9C[0], 176, 43, 0x67);
+ // Create car sprite
+ spriteId = CreateSprite(&sSpriteTemplate_CableCar[0], 176, 43, 0x67);
gSprites[spriteId].pos2.x = gSprites[spriteId].pos2.y = 32;
- gSprites[spriteId].data[0] = 176;
- gSprites[spriteId].data[1] = 43;
- spriteId = CreateSprite(&gSpriteTemplate_85CDB9C[1], 200, 99, 0x65);
+ gSprites[spriteId].sXPos = 176;
+ gSprites[spriteId].sYPos = 43;
+ // Create door sprite
+ spriteId = CreateSprite(&sSpriteTemplate_CableCar[1], 200, 99, 0x65);
gSprites[spriteId].pos2.x = 8;
gSprites[spriteId].pos2.y = 4;
- gSprites[spriteId].data[0] = 200;
- gSprites[spriteId].data[1] = 99;
+ gSprites[spriteId].sXPos = 200;
+ gSprites[spriteId].sYPos = 99;
+ // Init weather
sCableCar->weather = WEATHER_VOLCANIC_ASH;
- sCableCar->unk4 = 0x15e;
+ sCableCar->weatherDelay = 350;
SetCurrentAndNextWeatherNoDelay(WEATHER_SUNNY);
break;
- case 1:
- CopyToBgTilemapBufferRect_ChangePalette(0, sCableCar->mtChimneyTilemap + 0x24, 24, 26, 12, 3, 17);
- spriteId = AddPseudoObjectEvent(playerGraphicsIds[gSaveBlock2Ptr->playerGender], sub_8150948, 128, 39, 102);
+ case TRUE:
+ CopyToBgTilemapBufferRect_ChangePalette(0, sCableCar->groundTilemap + 0x24, 24, 26, 12, 3, 17);
+ // Create player sprite
+ spriteId = AddPseudoObjectEvent(playerGraphicsIds[gSaveBlock2Ptr->playerGender], SpriteCB_Player, 128, 39, 102);
if (spriteId != MAX_SPRITES)
{
gSprites[spriteId].oam.priority = 2;
gSprites[spriteId].pos2.x = 8;
gSprites[spriteId].pos2.y = 16;
- gSprites[spriteId].data[0] = 0x80;
- gSprites[spriteId].data[1] = 0x27;
+ gSprites[spriteId].sXPos = 128;
+ gSprites[spriteId].sYPos = 39;
}
- spriteId = CreateSprite(&gSpriteTemplate_85CDB9C[0], 104, 9, 0x67);
- gSprites[spriteId].pos2.x = gSprites[spriteId].pos2.y = 0x20;
- gSprites[spriteId].data[0] = 104;
- gSprites[spriteId].data[1] = 9;
- spriteId = CreateSprite(&gSpriteTemplate_85CDB9C[1], 128, 65, 0x65);
+ // Create car sprite
+ spriteId = CreateSprite(&sSpriteTemplate_CableCar[0], 104, 9, 0x67);
+ gSprites[spriteId].pos2.x = gSprites[spriteId].pos2.y = 32;
+ gSprites[spriteId].sXPos = 104;
+ gSprites[spriteId].sYPos = 9;
+ // Create door sprite
+ spriteId = CreateSprite(&sSpriteTemplate_CableCar[1], 128, 65, 0x65);
gSprites[spriteId].pos2.x = 8;
gSprites[spriteId].pos2.y = 4;
- gSprites[spriteId].data[0] = 0x80;
- gSprites[spriteId].data[1] = 0x41;
+ gSprites[spriteId].sXPos = 128;
+ gSprites[spriteId].sYPos = 65;
+ // Init weather
sCableCar->weather = WEATHER_SUNNY;
- sCableCar->unk4 = 0x109;
+ sCableCar->weatherDelay = 265;
SetCurrentAndNextWeatherNoDelay(WEATHER_VOLCANIC_ASH);
break;
}
for (i = 0; i < 9; i++)
{
- spriteId = CreateSprite(&gSpriteTemplate_85CDBCC, 16 * i + 96, 8 * i - 8, 0x68);
+ spriteId = CreateSprite(&sSpriteTemplate_Cable, 16 * i + 96, 8 * i - 8, 0x68);
gSprites[spriteId].pos2.x = 8;
gSprites[spriteId].pos2.y = 8;
}
+
+ // 1/64 chance for an NPC to appear hiking on the ground below the Cable Car
if ((rval % 64) == 0)
{
- spriteId = AddPseudoObjectEvent(hikerGraphicsIds[rval % 3], callbacks[gSpecialVar_0x8004], hikerCoords[gSpecialVar_0x8004][0], hikerCoords[gSpecialVar_0x8004][1], 0x6a);
+ // Unclear if this was intentional, but the - 1 in the below ARRAY_COUNT means the Zigzagoon is never used
+ spriteId = AddPseudoObjectEvent(hikerGraphicsIds[rval % (ARRAY_COUNT(hikerGraphicsIds) - 1)], hikerCallbacks[GOING_DOWN], hikerCoords[GOING_DOWN][0], hikerCoords[GOING_DOWN][1], 106);
if (spriteId != MAX_SPRITES)
{
gSprites[spriteId].oam.priority = 2;
gSprites[spriteId].pos2.x = -gSprites[spriteId].centerToCornerVecX;
gSprites[spriteId].pos2.y = -gSprites[spriteId].centerToCornerVecY;
- if (gSpecialVar_0x8004 == 0)
+
+ // Randomly choose which direction the NPC is going
+ if (!GOING_DOWN)
{
if (rval % 2)
{
+ // Do walking west anim
StartSpriteAnim(&gSprites[spriteId], 6);
- gSprites[spriteId].data[1] = 1;
+ gSprites[spriteId].sSameDir = TRUE;
gSprites[spriteId].pos1.y += 2;
}
else
{
+ // Do walking east anim
StartSpriteAnim(&gSprites[spriteId], 7);
- gSprites[spriteId].data[1] = 0;
+ gSprites[spriteId].sSameDir = FALSE;
}
}
else
{
if (rval % 2)
{
+ // Do walking east anim
StartSpriteAnim(&gSprites[spriteId], 7);
- gSprites[spriteId].data[1] = 1;
+ gSprites[spriteId].sSameDir = TRUE;
gSprites[spriteId].pos1.y += 2;
}
else
{
+ // Do walking west anim
StartSpriteAnim(&gSprites[spriteId], 6);
- gSprites[spriteId].data[1] = 0;
+ gSprites[spriteId].sSameDir = FALSE;
}
}
- gSprites[spriteId].data[2] = hikerMovementDelayTable[rval % 4];
+ gSprites[spriteId].sDelay = hikerMovementDelayTable[rval % ARRAY_COUNT(hikerMovementDelayTable)];
}
}
}
-void sub_8151088(void)
+static void BufferNextGroundSegment(void)
{
- u8 i;
- u8 j;
- u8 k;
+ u8 i, j, k;
u8 offset;
- for (i = 0, k = 0, offset = 0x24 * (sCableCar->unk1B + 2); i < 3; i++)
+ for (i = 0, k = 0, offset = 0x24 * (sCableCar->groundTilemapOffset + 2); i < 3; i++)
{
- for (j = 0; j < 12; j++)
+ for (j = 0; j < ARRAY_COUNT(sCableCar->groundTileBuffer[0]); j++)
{
- sCableCar->unk22[i][j] = sCableCar->mtChimneyTilemap[offset++];
- sCableCar->unk22[i + 3][j] = sCableCar->mtChimneyTilemap[k];
- sCableCar->unk22[i + 6][j] = (sCableCar->mtChimneyTilemap + 0x24)[k];
+ sCableCar->groundTileBuffer[i][j] = sCableCar->groundTilemap[offset++];
+ sCableCar->groundTileBuffer[i + 3][j] = sCableCar->groundTilemap[k];
+ sCableCar->groundTileBuffer[i + 6][j] = (sCableCar->groundTilemap + 0x24)[k];
k++;
}
}
- sCableCar->unk1B = (sCableCar->unk1B + 1) % 3;
+ sCableCar->groundTilemapOffset = (sCableCar->groundTilemapOffset + 1) % 3;
}
-static void sub_815115C(void)
+static void AnimateGroundGoingUp(void)
{
- sCableCar->unk1C = (sCableCar->unk1C + 1) % 0x60;
- sCableCar->bg0HorizontalOffset = sCableCar->unk1F - sCableCar->unk1D;
- sCableCar->bg0VerticalOffset = sCableCar->unk20 - sCableCar->unk1E;
- sCableCar->unk1D++;
- if ((sCableCar->unk1D % 4) == 0)
- sCableCar->unk1E++;
-
- if (sCableCar->unk1D > 16)
- sub_8151214();
+ sCableCar->groundTimer = (sCableCar->groundTimer + 1) % 96;
+ sCableCar->bg0HorizontalOffset = sCableCar->groundXBase - sCableCar->groundXOffset;
+ sCableCar->bg0VerticalOffset = sCableCar->groundYBase - sCableCar->groundYOffset;
+ sCableCar->groundXOffset++;
+ if ((sCableCar->groundXOffset % 4) == 0)
+ sCableCar->groundYOffset++;
+
+ if (sCableCar->groundXOffset > 16)
+ DrawNextGroundSegmentGoingUp();
}
-static void sub_81511B8(void)
+static void AnimateGroundGoingDown(void)
{
- sCableCar->unk1C = (sCableCar->unk1C + 1) % 0x60;
- sCableCar->bg0HorizontalOffset = sCableCar->unk1F + sCableCar->unk1D;
- sCableCar->bg0VerticalOffset = sCableCar->unk20 + sCableCar->unk1E;
- sCableCar->unk1D++;
- if ((sCableCar->unk1D % 4) == 0)
- sCableCar->unk1E++;
-
- if (sCableCar->unk1D > 16)
- sub_8151388();
+ sCableCar->groundTimer = (sCableCar->groundTimer + 1) % 96;
+ sCableCar->bg0HorizontalOffset = sCableCar->groundXBase + sCableCar->groundXOffset;
+ sCableCar->bg0VerticalOffset = sCableCar->groundYBase + sCableCar->groundYOffset;
+ sCableCar->groundXOffset++;
+ if ((sCableCar->groundXOffset % 4) == 0)
+ sCableCar->groundYOffset++;
+
+ if (sCableCar->groundXOffset > 16)
+ DrawNextGroundSegmentGoingDown();
}
-static void sub_8151214(void)
+static void DrawNextGroundSegmentGoingUp(void)
{
u8 i = 0;
- sCableCar->unk1D = sCableCar->unk1E = 0;
- sCableCar->unk1F = sCableCar->bg0HorizontalOffset;
- sCableCar->unk20 = sCableCar->bg0VerticalOffset;
- sCableCar->unk19 = (sCableCar->unk19 + 30) % 32;
- sCableCar->unk18 -= 2;
- gUnknown_0203ABB2 = (sCableCar->unk1A + 23) % 32;
- for (i = 0; i < 9; i++)
+ sCableCar->groundXOffset = sCableCar->groundYOffset = 0;
+ sCableCar->groundXBase = sCableCar->bg0HorizontalOffset;
+ sCableCar->groundYBase = sCableCar->bg0VerticalOffset;
+ sCableCar->groundSegmentXStart = (sCableCar->groundSegmentXStart + 30) % 32;
+ sCableCar->groundTileIdx -= 2;
+ sGroundSegmentY_Up = (sCableCar->groundSegmentYStart + 23) % 32;
+
+ // Draw next segment
+ for (i = 0; i < ARRAY_COUNT(sCableCar->groundTileBuffer); i++)
{
- gUnknown_0203ABB0 = sCableCar->unk19;
- gUnknown_0203ABB1 = (gUnknown_0203ABB2 + i) % 32;
- FillBgTilemapBufferRect(0, sCableCar->unk22[i][sCableCar->unk18], gUnknown_0203ABB0, gUnknown_0203ABB1, 1, 1, 17);
- gUnknown_0203ABB0 = (gUnknown_0203ABB0 + 1) % 32;
- FillBgTilemapBufferRect(0, sCableCar->unk22[i][sCableCar->unk18 + 1], gUnknown_0203ABB0, gUnknown_0203ABB1, 1, 1, 17);
+ sGroundX_Up = sCableCar->groundSegmentXStart;
+ sGroundY_Up = (sGroundSegmentY_Up + i) % 32;
+ FillBgTilemapBufferRect(0, sCableCar->groundTileBuffer[i][sCableCar->groundTileIdx], sGroundX_Up, sGroundY_Up, 1, 1, 17);
+ sGroundX_Up = (sGroundX_Up + 1) % 32;
+ FillBgTilemapBufferRect(0, sCableCar->groundTileBuffer[i][sCableCar->groundTileIdx + 1], sGroundX_Up, sGroundY_Up, 1, 1, 17);
}
- gUnknown_0203ABB0 = (sCableCar->unk19 + 30) % 32;
- FillBgTilemapBufferRect(0, 0, gUnknown_0203ABB0, 0, 2, 32, 17);
- if (sCableCar->unk18 == 0)
+ // Erase old segment
+ sGroundX_Up = (sCableCar->groundSegmentXStart + 30) % 32;
+ FillBgTilemapBufferRect(0, 0, sGroundX_Up, 0, 2, 32, 17);
+ if (sCableCar->groundTileIdx == 0)
{
- sCableCar->unk1A = (sCableCar->unk1A + 29) % 32;
- sCableCar->unk18 = 12;
- sub_8151088();
- gUnknown_0203ABB0 = (sCableCar->unk1A + 1) % 32;
- FillBgTilemapBufferRect(0, 0, 0, gUnknown_0203ABB0, 32, 9, 17);
+ sCableCar->groundSegmentYStart = (sCableCar->groundSegmentYStart + 29) % 32;
+ sCableCar->groundTileIdx = 12;
+ BufferNextGroundSegment();
+ sGroundX_Up = (sCableCar->groundSegmentYStart + 1) % 32;
+ FillBgTilemapBufferRect(0, 0, 0, sGroundX_Up, 32, 9, 17);
}
}
-static void sub_8151388(void)
+static void DrawNextGroundSegmentGoingDown(void)
{
u8 i = 0;
- sCableCar->unk1D = sCableCar->unk1E = 0;
- sCableCar->unk1F = sCableCar->bg0HorizontalOffset;
- sCableCar->unk20 = sCableCar->bg0VerticalOffset;
- sCableCar->unk19 = (sCableCar->unk19 + 2) % 32;
- sCableCar->unk18 += 2;
- gUnknown_0203ABB5 = sCableCar->unk1A;
- for (i = 0; i < 9; i++)
+ sCableCar->groundXOffset = sCableCar->groundYOffset = 0;
+ sCableCar->groundXBase = sCableCar->bg0HorizontalOffset;
+ sCableCar->groundYBase = sCableCar->bg0VerticalOffset;
+ sCableCar->groundSegmentXStart = (sCableCar->groundSegmentXStart + 2) % 32;
+ sCableCar->groundTileIdx += 2;
+ sGroundSegmentY_Down = sCableCar->groundSegmentYStart;
+
+ // Draw next segment
+ for (i = 0; i < ARRAY_COUNT(sCableCar->groundTileBuffer); i++)
{
- gUnknown_0203ABB3 = sCableCar->unk19;
- gUnknown_0203ABB4 = (gUnknown_0203ABB5 + i) % 32;
- FillBgTilemapBufferRect(0, sCableCar->unk22[i][sCableCar->unk18], gUnknown_0203ABB3, gUnknown_0203ABB4, 1, 1, 17);
- gUnknown_0203ABB3 = (gUnknown_0203ABB3 + 1) % 32;
- FillBgTilemapBufferRect(0, sCableCar->unk22[i][sCableCar->unk18 + 1], gUnknown_0203ABB3, gUnknown_0203ABB4, 1, 1, 17);
+ sGroundX_Down = sCableCar->groundSegmentXStart;
+ sGroundY_Down = (sGroundSegmentY_Down + i) % 32;
+ FillBgTilemapBufferRect(0, sCableCar->groundTileBuffer[i][sCableCar->groundTileIdx], sGroundX_Down, sGroundY_Down, 1, 1, 17);
+ sGroundX_Down = (sGroundX_Down + 1) % 32;
+ FillBgTilemapBufferRect(0, sCableCar->groundTileBuffer[i][sCableCar->groundTileIdx + 1], sGroundX_Down, sGroundY_Down, 1, 1, 17);
}
- gUnknown_0203ABB4 = (sCableCar->unk1A + 23) % 32;
- FillBgTilemapBufferRect(0, 0, sCableCar->unk19, gUnknown_0203ABB4, 2, 9, 17);
- if (sCableCar->unk18 == 10)
+ // Erase old segment
+ sGroundY_Down = (sCableCar->groundSegmentYStart + 23) % 32;
+ FillBgTilemapBufferRect(0, 0, sCableCar->groundSegmentXStart, sGroundY_Down, 2, 9, 17);
+ if (sCableCar->groundTileIdx == 10)
{
- sCableCar->unk1A = (sCableCar->unk1A + 3) % 32;
- sCableCar->unk18 = 0xfe;
- sub_8151088();
+ sCableCar->groundSegmentYStart = (sCableCar->groundSegmentYStart + 3) % 32;
+ sCableCar->groundTileIdx = -2;
+ BufferNextGroundSegment();
}
}
-static void sub_81514C8(u8 arg0)
+static void InitGroundTilemapData(bool8 goingDown)
{
- switch (arg0)
+ switch (goingDown)
{
- case 0:
+ case FALSE:
default:
- sCableCar->unk1B = 2;
- sCableCar->unk19 = 0;
- sCableCar->unk1A = 20;
- sCableCar->unk18 = 12;
- sub_8151088();
- sub_8151214();
+ sCableCar->groundTilemapOffset = 2;
+ sCableCar->groundSegmentXStart = 0;
+ sCableCar->groundSegmentYStart = 20;
+ sCableCar->groundTileIdx = 12;
+ BufferNextGroundSegment();
+ DrawNextGroundSegmentGoingUp();
break;
- case 1:
- sCableCar->unk1B = 2;
- sCableCar->unk19 = 28;
- sCableCar->unk1A = 20;
- sCableCar->unk18 = 4;
- sub_8151088();
- sub_8151388();
+ case TRUE:
+ sCableCar->groundTilemapOffset = 2;
+ sCableCar->groundSegmentXStart = 28;
+ sCableCar->groundSegmentYStart = 20;
+ sCableCar->groundTileIdx = 4;
+ BufferNextGroundSegment();
+ DrawNextGroundSegmentGoingDown();
break;
}
- sCableCar->unk1C = 0;
+ sCableCar->groundTimer = 0;
}
diff --git a/src/cable_club.c b/src/cable_club.c
index c2ac72883..93f87ec9b 100644
--- a/src/cable_club.c
+++ b/src/cable_club.c
@@ -20,7 +20,7 @@
#include "union_room.h"
#include "mevent2.h"
#include "script.h"
-#include "script_pokemon_util_80F87D8.h"
+#include "script_pokemon_util.h"
#include "sound.h"
#include "start_menu.h"
#include "string_util.h"
@@ -33,8 +33,9 @@
#include "constants/battle_frontier.h"
#include "constants/cable_club.h"
#include "constants/songs.h"
+#include "constants/trainers.h"
-static const struct WindowTemplate gUnknown_08550594 = {
+static const struct WindowTemplate sWindowTemplate_LinkPlayerCount = {
.bg = 0,
.tilemapLeft = 16,
.tilemapTop = 11,
@@ -43,57 +44,67 @@ static const struct WindowTemplate gUnknown_08550594 = {
.paletteNum = 15,
.baseBlock = 0x0125,
};
-static const u8 *const gTrainerCardColorNames[] = {
+
+static const u8 *const sTrainerCardColorNames[] = {
gText_BronzeCard,
gText_CopperCard,
gText_SilverCard,
gText_GoldCard
};
-static void sub_80B2634(u8 taskId);
-static void sub_80B2688(u8 taskId);
-static void sub_80B270C(u8 taskId);
-static void sub_80B275C(u8 taskId);
-static void sub_80B2804(u8 taskId);
-static void sub_80B28A8(u8 taskId);
-static void sub_80B2918(u8 taskId);
-static void sub_80B2A08(u8 taskId);
-static void sub_80B2C30(u8 taskId);
-static void sub_80B2CB0(u8 taskId);
-static void sub_80B2CEC(u8 taskId);
-static void sub_80B2D2C(u8 taskId);
-static bool8 sub_80B2D6C(u8 taskId);
-static void sub_80B2EE4(u8 taskId);
-static void sub_80B3144(u8 taskId);
-static void sub_80B3194(u8 taskId);
-static void sub_80B31E8(u8 taskId);
-static void sub_80B3220(u8 taskId);
-
-static void sub_80B236C(u8 arg0, u8 arg1)
+static void Task_LinkupStart(u8 taskId);
+static void Task_LinkupAwaitConnection(u8 taskId);
+static void Task_LinkupConfirmWhenReady(u8 taskId);
+static void Task_LinkupAwaitConfirmation(u8 taskId);
+static void Task_LinkupTryConfirmation(u8 taskId);
+static void Task_LinkupConfirm(u8 taskId);
+static void Task_LinkupExchangeDataWithLeader(u8 taskId);
+static void Task_LinkupCheckStatusAfterConfirm(u8 taskId);
+static void Task_LinkupAwaitTrainerCardData(u8 taskId);
+static void Task_StopLinkup(u8 taskId);
+static void Task_LinkupFailed(u8 taskId);
+static void Task_LinkupConnectionError(u8 taskId);
+static bool8 TryLinkTimeout(u8 taskId);
+static void Task_ValidateMixingGameLanguage(u8 taskId);
+static void Task_ReestablishLink(u8 taskId);
+static void Task_ReestablishLinkAwaitConnection(u8 taskId);
+static void Task_ReestablishLinkLeader(u8 taskId);
+static void Task_ReestablishLinkAwaitConfirmation(u8 taskId);
+
+#define tState data[0]
+
+
+#define tMinPlayers data[1]
+#define tMaxPlayers data[2]
+#define tNumPlayers data[3]
+#define tTimer data[4]
+#define tWindowId data[5]
+
+static void CreateLinkupTask(u8 minPlayers, u8 maxPlayers)
{
- if (FindTaskIdByFunc(sub_80B2634) == 0xFF)
+ if (FindTaskIdByFunc(Task_LinkupStart) == 0xFF)
{
u8 taskId1;
- taskId1 = CreateTask(sub_80B2634, 80);
- gTasks[taskId1].data[1] = arg0;
- gTasks[taskId1].data[2] = arg1;
+ taskId1 = CreateTask(Task_LinkupStart, 80);
+ gTasks[taskId1].tMinPlayers = minPlayers;
+ gTasks[taskId1].tMaxPlayers = maxPlayers;
}
}
-static void sub_80B23B0(u16 windowId, u32 value)
+static void PrintNumPlayersInLink(u16 windowId, u32 numPlayers)
{
u8 xPos;
- ConvertIntToDecimalStringN(gStringVar1, value, STR_CONV_MODE_LEFT_ALIGN, 1);
+ ConvertIntToDecimalStringN(gStringVar1, numPlayers, STR_CONV_MODE_LEFT_ALIGN, 1);
SetStandardWindowBorderStyle(windowId, 0);
- StringExpandPlaceholders(gStringVar4, gText_XPLink);
+ StringExpandPlaceholders(gStringVar4, gText_NumPlayerLink);
xPos = GetStringCenterAlignXOffset(1, gStringVar4, 88);
AddTextPrinterParameterized(windowId, 1, gStringVar4, xPos, 1, 0xFF, NULL);
CopyWindowToVram(windowId, 3);
}
-static void sub_80B241C(u16 windowId)
+static void ClearLinkPlayerCountWindow(u16 windowId)
{
// Following this call with a copy-to-vram with mode 3 is identical to
// calling ClearStdWindowAndFrame(windowId, TRUE).
@@ -101,68 +112,68 @@ static void sub_80B241C(u16 windowId)
CopyWindowToVram(windowId, 3);
}
-static void sub_80B243C(u8 taskId, u8 arg1)
+static void UpdateLinkPlayerCountDisplay(u8 taskId, u8 numPlayers)
{
s16 *data = gTasks[taskId].data;
- if (arg1 != data[3])
+ if (numPlayers != tNumPlayers)
{
- if (arg1 <= 1)
- sub_80B241C(data[5]);
+ if (numPlayers <= 1)
+ ClearLinkPlayerCountWindow(tWindowId);
else
- sub_80B23B0(data[5], arg1);
- data[3] = arg1;
+ PrintNumPlayersInLink(tWindowId, numPlayers);
+ tNumPlayers = numPlayers;
}
}
-static u32 sub_80B2478(u8 lower, u8 upper)
+static u32 ExchangeDataAndGetLinkupStatus(u8 minPlayers, u8 maxPlayers)
{
int playerCount;
- switch (GetLinkPlayerDataExchangeStatusTimed(lower, upper))
+ switch (GetLinkPlayerDataExchangeStatusTimed(minPlayers, maxPlayers))
{
case EXCHANGE_COMPLETE:
- return 1;
- case EXCHANGE_IN_PROGRESS:
- return 3;
+ return LINKUP_SUCCESS;
+ case EXCHANGE_DIFF_SELECTIONS:
+ return LINKUP_DIFF_SELECTIONS;
case EXCHANGE_PLAYER_NOT_READY:
- return 7;
+ return LINKUP_PLAYER_NOT_READY;
case EXCHANGE_PARTNER_NOT_READY:
- return 9;
- case EXCHANGE_STAT_6:
+ return LINKUP_PARTNER_NOT_READY;
+ case EXCHANGE_WRONG_NUM_PLAYERS:
ConvertIntToDecimalStringN(gStringVar1, GetLinkPlayerCount_2(), STR_CONV_MODE_LEFT_ALIGN, 1);
- return 4;
+ return LINKUP_WRONG_NUM_PLAYERS;
case EXCHANGE_STAT_7:
- return 10;
+ return LINKUP_FAILED_CONTEST_GMODE;
case EXCHANGE_TIMED_OUT:
default:
- return 0;
+ return LINKUP_ONGOING;
}
}
-static bool32 sub_80B24F8(u8 taskId)
+static bool32 CheckLinkErrored(u8 taskId)
{
if (HasLinkErrorOccurred() == TRUE)
{
- gTasks[taskId].func = sub_80B2D2C;
+ gTasks[taskId].func = Task_LinkupConnectionError;
return TRUE;
}
return FALSE;
}
-static bool32 sub_80B252C(u8 taskId)
+static bool32 CheckLinkCanceledBeforeConnection(u8 taskId)
{
if ((gMain.newKeys & B_BUTTON)
&& IsLinkConnectionEstablished() == FALSE)
{
gLinkType = 0;
- gTasks[taskId].func = sub_80B2CEC;
+ gTasks[taskId].func = Task_LinkupFailed;
return TRUE;
}
return FALSE;
}
-static bool32 sub_80B2578(u8 taskId)
+static bool32 CheckLinkCanceled(u8 taskId)
{
if (IsLinkConnectionEstablished())
SetSuppressLinkErrorMessage(TRUE);
@@ -170,7 +181,7 @@ static bool32 sub_80B2578(u8 taskId)
if (gMain.newKeys & B_BUTTON)
{
gLinkType = 0;
- gTasks[taskId].func = sub_80B2CEC;
+ gTasks[taskId].func = Task_LinkupFailed;
return TRUE;
}
return FALSE;
@@ -180,23 +191,24 @@ static bool32 sub_80B25CC(u8 taskId)
{
if (GetSioMultiSI() == 1)
{
- gTasks[taskId].func = sub_80B2D2C;
+ gTasks[taskId].func = Task_LinkupConnectionError;
return TRUE;
}
return FALSE;
}
+// Unused
static void sub_80B2600(u8 taskId)
{
gTasks[taskId].data[0]++;
if (gTasks[taskId].data[0] == 10)
{
- sub_800A4D8(2);
+ SendBlockRequest(2);
DestroyTask(taskId);
}
}
-static void sub_80B2634(u8 taskId)
+static void Task_LinkupStart(u8 taskId)
{
s16 *data = gTasks[taskId].data;
@@ -205,21 +217,21 @@ static void sub_80B2634(u8 taskId)
OpenLinkTimed();
ResetLinkPlayerCount();
ResetLinkPlayers();
- data[5] = AddWindow(&gUnknown_08550594);
+ tWindowId = AddWindow(&sWindowTemplate_LinkPlayerCount);
}
else if (data[0] > 9)
{
- gTasks[taskId].func = sub_80B2688;
+ gTasks[taskId].func = Task_LinkupAwaitConnection;
}
data[0]++;
}
-static void sub_80B2688(u8 taskId)
+static void Task_LinkupAwaitConnection(u8 taskId)
{
u32 playerCount = GetLinkPlayerCount_2();
- if (sub_80B252C(taskId) == TRUE
- || sub_80B2578(taskId) == TRUE
+ if (CheckLinkCanceledBeforeConnection(taskId) == TRUE
+ || CheckLinkCanceled(taskId) == TRUE
|| playerCount < 2)
return;
@@ -229,60 +241,60 @@ static void sub_80B2688(u8 taskId)
{
PlaySE(SE_PIN);
ShowFieldAutoScrollMessage(gText_ConfirmLinkWhenPlayersReady);
- gTasks[taskId].func = sub_80B270C;
+ gTasks[taskId].func = Task_LinkupConfirmWhenReady;
}
else
{
PlaySE(SE_BOO);
ShowFieldAutoScrollMessage(gText_AwaitingLinkup);
- gTasks[taskId].func = sub_80B2918;
+ gTasks[taskId].func = Task_LinkupExchangeDataWithLeader;
}
}
-static void sub_80B270C(u8 taskId)
+static void Task_LinkupConfirmWhenReady(u8 taskId)
{
- if (sub_80B252C(taskId) == TRUE
+ if (CheckLinkCanceledBeforeConnection(taskId) == TRUE
|| sub_80B25CC(taskId) == TRUE
- || sub_80B24F8(taskId) == TRUE)
+ || CheckLinkErrored(taskId) == TRUE)
return;
if (GetFieldMessageBoxMode() == FIELD_MESSAGE_BOX_HIDDEN)
{
- gTasks[taskId].data[3] = 0;
- gTasks[taskId].func = sub_80B275C;
+ gTasks[taskId].tNumPlayers = 0;
+ gTasks[taskId].func = Task_LinkupAwaitConfirmation;
}
}
-static void sub_80B275C(u8 taskId)
+static void Task_LinkupAwaitConfirmation(u8 taskId)
{
s16 *data = gTasks[taskId].data;
s32 linkPlayerCount = GetLinkPlayerCount_2();
- if (sub_80B252C(taskId) == TRUE
+ if (CheckLinkCanceledBeforeConnection(taskId) == TRUE
|| sub_80B25CC(taskId) == TRUE
- || sub_80B24F8(taskId) == TRUE)
+ || CheckLinkErrored(taskId) == TRUE)
return;
- sub_80B243C(taskId, linkPlayerCount);
+ UpdateLinkPlayerCountDisplay(taskId, linkPlayerCount);
if (!(gMain.newKeys & A_BUTTON))
return;
- if (linkPlayerCount < data[1])
+ if (linkPlayerCount < tMinPlayers)
return;
- sub_800AA04(linkPlayerCount);
- sub_80B241C(data[5]);
+ SaveLinkPlayers(linkPlayerCount);
+ ClearLinkPlayerCountWindow(tWindowId);
ConvertIntToDecimalStringN(gStringVar1, linkPlayerCount, STR_CONV_MODE_LEFT_ALIGN, 1);
ShowFieldAutoScrollMessage(gText_ConfirmStartLinkWithXPlayers);
- gTasks[taskId].func = sub_80B2804;
+ gTasks[taskId].func = Task_LinkupTryConfirmation;
}
-static void sub_80B2804(u8 taskId)
+static void Task_LinkupTryConfirmation(u8 taskId)
{
- if (sub_80B252C(taskId) == TRUE
+ if (CheckLinkCanceledBeforeConnection(taskId) == TRUE
|| sub_80B25CC(taskId) == TRUE
- || sub_80B24F8(taskId) == TRUE)
+ || CheckLinkErrored(taskId) == TRUE)
return;
if (GetFieldMessageBoxMode() == FIELD_MESSAGE_BOX_HIDDEN)
@@ -290,213 +302,221 @@ static void sub_80B2804(u8 taskId)
if (GetSavedPlayerCount() != GetLinkPlayerCount_2())
{
ShowFieldAutoScrollMessage(gText_ConfirmLinkWhenPlayersReady);
- gTasks[taskId].func = sub_80B270C;
+ gTasks[taskId].func = Task_LinkupConfirmWhenReady;
}
else if (gMain.heldKeys & B_BUTTON)
{
ShowFieldAutoScrollMessage(gText_ConfirmLinkWhenPlayersReady);
- gTasks[taskId].func = sub_80B270C;
+ gTasks[taskId].func = Task_LinkupConfirmWhenReady;
}
else if (gMain.heldKeys & A_BUTTON)
{
PlaySE(SE_SELECT);
CheckShouldAdvanceLinkState();
- gTasks[taskId].func = sub_80B28A8;
+ gTasks[taskId].func = Task_LinkupConfirm;
}
}
}
-static void sub_80B28A8(u8 taskId)
+static void Task_LinkupConfirm(u8 taskId)
{
- u8 local1 = gTasks[taskId].data[1];
- u8 local2 = gTasks[taskId].data[2];
+ u8 minPlayers = gTasks[taskId].tMinPlayers;
+ u8 maxPlayers = gTasks[taskId].tMaxPlayers;
- if (sub_80B24F8(taskId) == TRUE
- || sub_80B2D6C(taskId) == TRUE)
+ if (CheckLinkErrored(taskId) == TRUE
+ || TryLinkTimeout(taskId) == TRUE)
return;
if (GetLinkPlayerCount_2() != GetSavedPlayerCount())
{
- gTasks[taskId].func = sub_80B2D2C;
+ gTasks[taskId].func = Task_LinkupConnectionError;
}
else
{
- gSpecialVar_Result = sub_80B2478(local1, local2);
- if (gSpecialVar_Result != 0)
- gTasks[taskId].func = sub_80B2A08;
+ gSpecialVar_Result = ExchangeDataAndGetLinkupStatus(minPlayers, maxPlayers);
+ if (gSpecialVar_Result != LINKUP_ONGOING)
+ gTasks[taskId].func = Task_LinkupCheckStatusAfterConfirm;
}
}
-static void sub_80B2918(u8 taskId)
+static void Task_LinkupExchangeDataWithLeader(u8 taskId)
{
- u8 local1, local2;
+ u8 minPlayers, maxPlayers;
struct TrainerCard *card;
- local1 = gTasks[taskId].data[1];
- local2 = gTasks[taskId].data[2];
+ minPlayers = gTasks[taskId].tMinPlayers;
+ maxPlayers = gTasks[taskId].tMaxPlayers;
- if (sub_80B252C(taskId) == TRUE
- || sub_80B24F8(taskId) == TRUE)
+ if (CheckLinkCanceledBeforeConnection(taskId) == TRUE
+ || CheckLinkErrored(taskId) == TRUE)
return;
- gSpecialVar_Result = sub_80B2478(local1, local2);
- if (gSpecialVar_Result == 0)
+ gSpecialVar_Result = ExchangeDataAndGetLinkupStatus(minPlayers, maxPlayers);
+ if (gSpecialVar_Result == LINKUP_ONGOING)
return;
- if (gSpecialVar_Result == 3 || gSpecialVar_Result == 4)
+ if (gSpecialVar_Result == LINKUP_DIFF_SELECTIONS
+ || gSpecialVar_Result == LINKUP_WRONG_NUM_PLAYERS)
{
- sub_800AC34();
+ SetCloseLinkCallback();
HideFieldMessageBox();
- gTasks[taskId].func = sub_80B2CB0;
+ gTasks[taskId].func = Task_StopLinkup;
}
- else if (gSpecialVar_Result == 7 || gSpecialVar_Result == 9)
+ else if (gSpecialVar_Result == LINKUP_PLAYER_NOT_READY
+ || gSpecialVar_Result == LINKUP_PARTNER_NOT_READY)
{
CloseLink();
HideFieldMessageBox();
- gTasks[taskId].func = sub_80B2CB0;
+ gTasks[taskId].func = Task_StopLinkup;
}
else
{
gFieldLinkPlayerCount = GetLinkPlayerCount_2();
gLocalLinkPlayerId = GetMultiplayerId();
- sub_800AA04(gFieldLinkPlayerCount);
+ SaveLinkPlayers(gFieldLinkPlayerCount);
card = (struct TrainerCard *)gBlockSendBuffer;
TrainerCard_GenerateCardForPlayer(card);
card->monSpecies[0] = GetMonData(&gPlayerParty[gSelectedOrderFromParty[0] - 1], MON_DATA_SPECIES, NULL);
card->monSpecies[1] = GetMonData(&gPlayerParty[gSelectedOrderFromParty[1] - 1], MON_DATA_SPECIES, NULL);
- gTasks[taskId].func = sub_80B2C30;
+ gTasks[taskId].func = Task_LinkupAwaitTrainerCardData;
}
}
-static void sub_80B2A08(u8 taskId)
+static void Task_LinkupCheckStatusAfterConfirm(u8 taskId)
{
struct TrainerCard *card;
- if (sub_80B24F8(taskId) == TRUE)
+ if (CheckLinkErrored(taskId) == TRUE)
return;
- if (gSpecialVar_Result == 4)
+ if (gSpecialVar_Result == LINKUP_WRONG_NUM_PLAYERS)
{
if (!Link_AnyPartnersPlayingRubyOrSapphire())
{
- sub_800AC34();
+ SetCloseLinkCallback();
HideFieldMessageBox();
- gTasks[taskId].func = sub_80B2CB0;
+ gTasks[taskId].func = Task_StopLinkup;
}
else
{
CloseLink();
HideFieldMessageBox();
- gTasks[taskId].func = sub_80B2CB0;
+ gTasks[taskId].func = Task_StopLinkup;
}
}
- else if (gSpecialVar_Result == 3)
+ else if (gSpecialVar_Result == LINKUP_DIFF_SELECTIONS)
{
- sub_800AC34();
+ SetCloseLinkCallback();
HideFieldMessageBox();
- gTasks[taskId].func = sub_80B2CB0;
+ gTasks[taskId].func = Task_StopLinkup;
}
- else if (gSpecialVar_Result == 7 || gSpecialVar_Result == 9)
+ else if (gSpecialVar_Result == LINKUP_PLAYER_NOT_READY
+ || gSpecialVar_Result == LINKUP_PARTNER_NOT_READY)
{
CloseLink();
HideFieldMessageBox();
- gTasks[taskId].func = sub_80B2CB0;
+ gTasks[taskId].func = Task_StopLinkup;
}
else
{
gFieldLinkPlayerCount = GetLinkPlayerCount_2();
gLocalLinkPlayerId = GetMultiplayerId();
- sub_800AA04(gFieldLinkPlayerCount);
+ SaveLinkPlayers(gFieldLinkPlayerCount);
card = (struct TrainerCard *)gBlockSendBuffer;
TrainerCard_GenerateCardForPlayer(card);
card->monSpecies[0] = GetMonData(&gPlayerParty[gSelectedOrderFromParty[0] - 1], MON_DATA_SPECIES, NULL);
card->monSpecies[1] = GetMonData(&gPlayerParty[gSelectedOrderFromParty[1] - 1], MON_DATA_SPECIES, NULL);
- gTasks[taskId].func = sub_80B2C30;
- sub_800A4D8(2);
+ gTasks[taskId].func = Task_LinkupAwaitTrainerCardData;
+ SendBlockRequest(2);
}
}
-bool32 sub_80B2AF4(u16 *arg0, u16 *arg1)
+bool32 AreBattleTowerLinkSpeciesSame(u16 *speciesList1, u16 *speciesList2)
{
int i;
int j;
- bool32 result = FALSE;
- int k = 0;
+ bool32 haveSameSpecies = FALSE;
+ int numSameSpecies = 0;
gStringVar1[0] = EOS;
gStringVar2[0] = EOS;
- for (i = 0; i < 2; i++)
+ for (i = 0; i < FRONTIER_MULTI_PARTY_SIZE; i++)
{
- for (j = 0; j < 2; j++)
+ for (j = 0; j < FRONTIER_MULTI_PARTY_SIZE; j++)
{
- if (arg0[i] == arg1[j])
+ if (speciesList1[i] == speciesList2[j])
{
- if (k == 0)
+ if (numSameSpecies == 0)
{
- StringCopy(gStringVar1, gSpeciesNames[arg0[i]]);
- result = TRUE;
+ StringCopy(gStringVar1, gSpeciesNames[speciesList1[i]]);
+ haveSameSpecies = TRUE;
}
- if (k == 1)
+ if (numSameSpecies == 1)
{
- StringCopy(gStringVar2, gSpeciesNames[arg0[i]]);
- result = TRUE;
+ StringCopy(gStringVar2, gSpeciesNames[speciesList1[i]]);
+ haveSameSpecies = TRUE;
}
- k++;
+ numSameSpecies++;
}
}
}
- gSpecialVar_0x8005 = k;
+ // var below is read by BattleFrontier_BattleTowerLobby_EventScript_AbortLink
+ gSpecialVar_0x8005 = numSameSpecies;
- return result;
+ return haveSameSpecies;
}
-static void task_map_chg_seq_0807EC34(u16 *a0, u32 taskId)
+static void FinishLinkup(u16 *linkupStatus, u32 taskId)
{
struct TrainerCard *trainerCards = gTrainerCards;
- if (*a0 == 1)
+ if (*linkupStatus == LINKUP_SUCCESS)
{
if (gLinkType == LINKTYPE_BATTLE_TOWER_50 || gLinkType == LINKTYPE_BATTLE_TOWER_OPEN)
{
- if (sub_80B2AF4(trainerCards[0].monSpecies, trainerCards[1].monSpecies))
+ if (AreBattleTowerLinkSpeciesSame(trainerCards[0].monSpecies, trainerCards[1].monSpecies))
{
- *a0 = 11;
- sub_800AC34();
- gTasks[taskId].func = sub_80B2CB0;
+ // Unsuccessful battle tower linkup
+ *linkupStatus = LINKUP_FAILED_BATTLE_TOWER;
+ SetCloseLinkCallback();
+ gTasks[taskId].func = Task_StopLinkup;
}
else
{
- sub_80B241C(gTasks[taskId].data[5]);
+ // Successful battle tower linkup
+ ClearLinkPlayerCountWindow(gTasks[taskId].tWindowId);
EnableBothScriptContexts();
DestroyTask(taskId);
}
}
else
{
- sub_80B241C(gTasks[taskId].data[5]);
+ // Successful linkup
+ ClearLinkPlayerCountWindow(gTasks[taskId].tWindowId);
EnableBothScriptContexts();
DestroyTask(taskId);
}
}
else
{
- sub_800AC34();
- gTasks[taskId].func = sub_80B2CB0;
+ // Unsuccessful linkup
+ SetCloseLinkCallback();
+ gTasks[taskId].func = Task_StopLinkup;
}
}
-static void sub_80B2C30(u8 taskId)
+static void Task_LinkupAwaitTrainerCardData(u8 taskId)
{
u8 index;
struct TrainerCard *trainerCards;
- if (sub_80B24F8(taskId) == TRUE)
+ if (CheckLinkErrored(taskId) == TRUE)
return;
- if (GetBlockReceivedStatus() != sub_800A9A8())
+ if (GetBlockReceivedStatus() != GetSavedLinkPlayerCountAsBitFlags())
return;
for (index = 0; index < GetLinkPlayerCount(); index++)
@@ -506,74 +526,74 @@ static void sub_80B2C30(u8 taskId)
SetSuppressLinkErrorMessage(FALSE);
ResetBlockReceivedFlags();
- task_map_chg_seq_0807EC34(&gSpecialVar_Result, taskId);
+ FinishLinkup(&gSpecialVar_Result, taskId);
}
-static void sub_80B2CB0(u8 taskId)
+static void Task_StopLinkup(u8 taskId)
{
- if (gReceivedRemoteLinkPlayers == FALSE)
+ if (!gReceivedRemoteLinkPlayers)
{
- sub_80B241C(gTasks[taskId].data[5]);
+ ClearLinkPlayerCountWindow(gTasks[taskId].tWindowId);
EnableBothScriptContexts();
- RemoveWindow(gTasks[taskId].data[5]);
+ RemoveWindow(gTasks[taskId].tWindowId);
DestroyTask(taskId);
}
}
-static void sub_80B2CEC(u8 taskId)
+static void Task_LinkupFailed(u8 taskId)
{
- gSpecialVar_Result = 5;
- sub_80B241C(gTasks[taskId].data[5]);
- sub_8098374();
- RemoveWindow(gTasks[taskId].data[5]);
+ gSpecialVar_Result = LINKUP_FAILED;
+ ClearLinkPlayerCountWindow(gTasks[taskId].tWindowId);
+ StopFieldMessage();
+ RemoveWindow(gTasks[taskId].tWindowId);
EnableBothScriptContexts();
DestroyTask(taskId);
}
-static void sub_80B2D2C(u8 taskId)
+static void Task_LinkupConnectionError(u8 taskId)
{
- gSpecialVar_Result = 6;
- sub_80B241C(gTasks[taskId].data[5]);
- RemoveWindow(gTasks[taskId].data[5]);
+ gSpecialVar_Result = LINKUP_CONNECTION_ERROR;
+ ClearLinkPlayerCountWindow(gTasks[taskId].tWindowId);
+ RemoveWindow(gTasks[taskId].tWindowId);
HideFieldMessageBox();
EnableBothScriptContexts();
DestroyTask(taskId);
}
-static bool8 sub_80B2D6C(u8 taskId)
+static bool8 TryLinkTimeout(u8 taskId)
{
- gTasks[taskId].data[4]++;
- if (gTasks[taskId].data[4] > 600)
+ gTasks[taskId].tTimer++;
+ if (gTasks[taskId].tTimer > 600)
{
- gTasks[taskId].func = sub_80B2D2C;
+ gTasks[taskId].func = Task_LinkupConnectionError;
return TRUE;
}
return FALSE;
}
-void TryBattleLinkup(u8 arg0)
+void TryBattleLinkup(void)
{
- u8 r3 = 2;
- u8 r2 = 2;
+ u8 minPlayers = 2;
+ u8 maxPlayers = 2;
switch (gSpecialVar_0x8004)
{
case USING_SINGLE_BATTLE:
- r3 = 2;
+ minPlayers = 2;
gLinkType = LINKTYPE_SINGLE_BATTLE;
break;
case USING_DOUBLE_BATTLE:
- r3 = 2;
+ minPlayers = 2;
gLinkType = LINKTYPE_DOUBLE_BATTLE;
break;
case USING_MULTI_BATTLE:
- r3 = 4;
- r2 = 4;
+ minPlayers = 4;
+ maxPlayers = 4;
gLinkType = LINKTYPE_MULTI_BATTLE;
break;
case USING_BATTLE_TOWER:
- r3 = 2;
+ minPlayers = 2;
if (gSaveBlock2Ptr->frontier.lvlMode == FRONTIER_LVL_50)
gLinkType = LINKTYPE_BATTLE_TOWER_50;
else
@@ -582,46 +602,52 @@ void TryBattleLinkup(u8 arg0)
break;
}
- sub_80B236C(r3, r2);
+ CreateLinkupTask(minPlayers, maxPlayers);
}
+#undef tMinPlayers
+#undef tMaxPlayers
+#undef tNumPlayers
+#undef tTimer
+#undef tWindowId
+
void TryTradeLinkup(void)
{
- gLinkType = LINKTYPE_0x1133;
+ gLinkType = LINKTYPE_TRADE_SETUP;
gBattleTypeFlags = 0;
- sub_80B236C(2, 2);
+ CreateLinkupTask(2, 2);
}
void TryRecordMixLinkup(void)
{
- gSpecialVar_Result = 0;
- gLinkType = LINKTYPE_0x3311;
+ gSpecialVar_Result = LINKUP_ONGOING;
+ gLinkType = LINKTYPE_RECORD_MIX_BEFORE;
gBattleTypeFlags = 0;
- sub_80B236C(2, 4);
+ CreateLinkupTask(2, 4);
}
-void sub_80B2EA8(void)
+void ValidateMixingGameLanguage(void)
{
- u32 taskId = FindTaskIdByFunc(sub_80B2EE4);
+ u32 taskId = FindTaskIdByFunc(Task_ValidateMixingGameLanguage);
if (taskId == 0xFF)
{
- taskId = CreateTask(sub_80B2EE4, 80);
- gTasks[taskId].data[0] = 0;
+ taskId = CreateTask(Task_ValidateMixingGameLanguage, 80);
+ gTasks[taskId].tState = 0;
}
}
-static void sub_80B2EE4(u8 taskId)
+static void Task_ValidateMixingGameLanguage(u8 taskId)
{
int playerCount;
int i;
- switch (gTasks[taskId].data[0])
+ switch (gTasks[taskId].tState)
{
case 0:
- if (gSpecialVar_Result == 1)
+ if (gSpecialVar_Result == LINKUP_SUCCESS)
{
- bool32 unk = FALSE;
+ bool32 mixingForeignGames = FALSE;
bool32 isEnglishRSLinked = FALSE;
bool32 isJapaneseEmeraldLinked = FALSE;
@@ -635,7 +661,7 @@ static void sub_80B2EE4(u8 taskId)
{
if (language == LANGUAGE_JAPANESE)
{
- unk = TRUE;
+ mixingForeignGames = TRUE;
break;
}
else
@@ -654,14 +680,14 @@ static void sub_80B2EE4(u8 taskId)
if (isEnglishRSLinked && isJapaneseEmeraldLinked)
{
- unk = TRUE;
+ mixingForeignGames = TRUE;
}
- if (unk)
+ if (mixingForeignGames)
{
- gSpecialVar_Result = 12;
- sub_800AD10();
- gTasks[taskId].data[0] = 1;
+ gSpecialVar_Result = LINKUP_FOREIGN_GAME;
+ SetCloseLinkCallbackHandleJP();
+ gTasks[taskId].tState = 1;
return;
}
}
@@ -669,7 +695,7 @@ static void sub_80B2EE4(u8 taskId)
DestroyTask(taskId);
break;
case 1:
- if (gReceivedRemoteLinkPlayers == FALSE)
+ if (!gReceivedRemoteLinkPlayers)
{
EnableBothScriptContexts();
DestroyTask(taskId);
@@ -682,26 +708,26 @@ void TryBerryBlenderLinkup(void)
{
gLinkType = LINKTYPE_BERRY_BLENDER_SETUP;
gBattleTypeFlags = 0;
- sub_80B236C(2, 4);
+ CreateLinkupTask(2, 4);
}
void TryContestGModeLinkup(void)
{
gLinkType = LINKTYPE_CONTEST_GMODE;
gBattleTypeFlags = 0;
- sub_80B236C(4, 4);
+ CreateLinkupTask(4, 4);
}
void TryContestEModeLinkup(void)
{
gLinkType = LINKTYPE_CONTEST_EMODE;
gBattleTypeFlags = 0;
- sub_80B236C(2, 4);
+ CreateLinkupTask(2, 4);
}
-u8 sub_80B3050(void)
+u8 CreateTask_ReestablishCableClubLink(void)
{
- if (FuncIsActiveTask(sub_80B3144) != FALSE)
+ if (FuncIsActiveTask(Task_ReestablishLink) != FALSE)
return 0xFF;
switch (gSpecialVar_0x8004)
@@ -717,26 +743,22 @@ u8 sub_80B3050(void)
break;
case USING_BATTLE_TOWER:
if (gSaveBlock2Ptr->frontier.lvlMode == FRONTIER_LVL_50)
- {
gLinkType = LINKTYPE_BATTLE_TOWER_50;
- }
else
- {
gLinkType = LINKTYPE_BATTLE_TOWER_OPEN;
- }
break;
case USING_TRADE_CENTER:
- gLinkType = LINKTYPE_0x1111;
+ gLinkType = LINKTYPE_TRADE;
break;
case USING_RECORD_CORNER:
- gLinkType = LINKTYPE_0x3322;
+ gLinkType = LINKTYPE_RECORD_MIX_AFTER;
break;
}
- return CreateTask(sub_80B3144, 80);
+ return CreateTask(Task_ReestablishLink, 80);
}
-static void sub_80B3144(u8 taskId)
+static void Task_ReestablishLink(u8 taskId)
{
s16 *data = gTasks[taskId].data;
@@ -744,42 +766,42 @@ static void sub_80B3144(u8 taskId)
{
OpenLink();
ResetLinkPlayers();
- CreateTask(task00_08081A90, 80);
+ CreateTask(Task_WaitForLinkPlayerConnection, 80);
}
else if (data[0] >= 10)
{
- gTasks[taskId].func = sub_80B3194;
+ gTasks[taskId].func = Task_ReestablishLinkAwaitConnection;
}
data[0]++;
}
-static void sub_80B3194(u8 taskId)
+static void Task_ReestablishLinkAwaitConnection(u8 taskId)
{
if (GetLinkPlayerCount_2() >= 2)
{
if (IsLinkMaster() == TRUE)
- gTasks[taskId].func = sub_80B31E8;
+ gTasks[taskId].func = Task_ReestablishLinkLeader;
else
- gTasks[taskId].func = sub_80B3220;
+ gTasks[taskId].func = Task_ReestablishLinkAwaitConfirmation;
}
}
-static void sub_80B31E8(u8 taskId)
+static void Task_ReestablishLinkLeader(u8 taskId)
{
if (GetSavedPlayerCount() == GetLinkPlayerCount_2())
{
CheckShouldAdvanceLinkState();
- gTasks[taskId].func = sub_80B3220;
+ gTasks[taskId].func = Task_ReestablishLinkAwaitConfirmation;
}
}
-static void sub_80B3220(u8 taskId)
+static void Task_ReestablishLinkAwaitConfirmation(u8 taskId)
{
if (gReceivedRemoteLinkPlayers == TRUE
&& IsLinkPlayerDataExchangeComplete() == TRUE)
{
- sub_800AB18();
- sub_8009F18();
+ CheckLinkPlayersMatchSaved();
+ StartSendingKeysToLink();
DestroyTask(taskId);
}
}
@@ -794,90 +816,92 @@ static void SetLinkBattleTypeFlags(int linkService)
{
switch (linkService)
{
- case USING_SINGLE_BATTLE:
- gBattleTypeFlags = BATTLE_TYPE_LINK | BATTLE_TYPE_TRAINER;
- break;
- case USING_DOUBLE_BATTLE:
- gBattleTypeFlags = BATTLE_TYPE_DOUBLE | BATTLE_TYPE_LINK | BATTLE_TYPE_TRAINER;
- break;
- case USING_MULTI_BATTLE:
- ReducePlayerPartyToSelectedMons();
- gBattleTypeFlags = BATTLE_TYPE_DOUBLE | BATTLE_TYPE_LINK | BATTLE_TYPE_TRAINER | BATTLE_TYPE_MULTI;
- break;
- case USING_BATTLE_TOWER:
- gBattleTypeFlags = BATTLE_TYPE_BATTLE_TOWER | BATTLE_TYPE_DOUBLE | BATTLE_TYPE_LINK | BATTLE_TYPE_TRAINER | BATTLE_TYPE_MULTI;
- break;
+ case USING_SINGLE_BATTLE:
+ gBattleTypeFlags = BATTLE_TYPE_LINK | BATTLE_TYPE_TRAINER;
+ break;
+ case USING_DOUBLE_BATTLE:
+ gBattleTypeFlags = BATTLE_TYPE_DOUBLE | BATTLE_TYPE_LINK | BATTLE_TYPE_TRAINER;
+ break;
+ case USING_MULTI_BATTLE:
+ ReducePlayerPartyToSelectedMons();
+ gBattleTypeFlags = BATTLE_TYPE_DOUBLE | BATTLE_TYPE_LINK | BATTLE_TYPE_TRAINER | BATTLE_TYPE_MULTI;
+ break;
+ case USING_BATTLE_TOWER:
+ gBattleTypeFlags = BATTLE_TYPE_BATTLE_TOWER | BATTLE_TYPE_DOUBLE | BATTLE_TYPE_LINK | BATTLE_TYPE_TRAINER | BATTLE_TYPE_MULTI;
+ break;
}
}
-static void sub_80B32B4(u8 taskId)
+#define tTimer data[1]
+
+static void Task_StartWiredCableClubBattle(u8 taskId)
{
struct Task* task = &gTasks[taskId];
- switch (task->data[0])
+ switch (task->tState)
{
case 0:
FadeScreen(FADE_TO_BLACK, 0);
gLinkType = LINKTYPE_BATTLE;
ClearLinkCallback_2();
- task->data[0]++;
+ task->tState++;
break;
case 1:
if (!gPaletteFade.active)
- task->data[0]++;
+ task->tState++;
break;
case 2:
- task->data[1]++;
- if (task->data[1] > 20)
- task->data[0]++;
+ task->tTimer++;
+ if (task->tTimer > 20)
+ task->tState++;
break;
case 3:
- sub_800AC34();
- task->data[0]++;
+ SetCloseLinkCallback();
+ task->tState++;
break;
case 4:
if (!gReceivedRemoteLinkPlayers)
- task->data[0]++;
+ task->tState++;
break;
case 5:
if (gLinkPlayers[0].trainerId & 1)
- PlayMapChosenOrBattleBGM(MUS_BATTLE32);
+ PlayMapChosenOrBattleBGM(MUS_VS_GYM_LEADER);
else
- PlayMapChosenOrBattleBGM(MUS_BATTLE20);
+ PlayMapChosenOrBattleBGM(MUS_VS_TRAINER);
SetLinkBattleTypeFlags(gSpecialVar_0x8004);
CleanupOverworldWindowsAndTilemaps();
- gTrainerBattleOpponent_A = 0x800;
+ gTrainerBattleOpponent_A = TRAINER_LINK_OPPONENT;
SetMainCallback2(CB2_InitBattle);
- gMain.savedCallback = sub_80B360C;
+ gMain.savedCallback = CB2_ReturnFromCableClubBattle;
DestroyTask(taskId);
break;
}
}
-static void sub_80B33BC(u8 taskId)
+static void Task_StartWirelessCableClubBattle(u8 taskId)
{
int i;
s16* data = gTasks[taskId].data;
- switch (data[0])
+ switch (tState)
{
case 0:
FadeScreen(FADE_TO_BLACK, 0);
gLinkType = LINKTYPE_BATTLE;
ClearLinkCallback_2();
- data[0] = 1;
+ tState = 1;
break;
case 1:
if (!gPaletteFade.active)
- data[0] = 2;
+ tState = 2;
break;
case 2:
SendBlock(0, &gLocalLinkPlayer, sizeof(gLocalLinkPlayer));
- data[0] = 3;
+ tState = 3;
break;
case 3:
- if (GetBlockReceivedStatus() == sub_800A9D8())
+ if (GetBlockReceivedStatus() == GetLinkPlayerCountAsBitFlags())
{
for (i = 0; i < GetLinkPlayerCount(); i++)
{
@@ -886,86 +910,88 @@ static void sub_80B33BC(u8 taskId)
sub_800B524(&gLinkPlayers[i]);
ResetBlockReceivedFlag(i);
}
- data[0] = 4;
+ tState = 4;
}
break;
case 4:
- data[1]++;
- if (data[1] > 20)
- data[0] = 5;
+ tTimer++;
+ if (tTimer > 20)
+ tState = 5;
break;
case 5:
- sub_800ADF8();
- data[0] = 6;
+ SetLinkStandbyCallback();
+ tState = 6;
break;
case 6:
if (IsLinkTaskFinished())
{
- data[0] = 7;
+ tState = 7;
}
break;
case 7:
if (gLinkPlayers[0].trainerId & 1)
- PlayMapChosenOrBattleBGM(MUS_BATTLE32);
+ PlayMapChosenOrBattleBGM(MUS_VS_GYM_LEADER);
else
- PlayMapChosenOrBattleBGM(MUS_BATTLE20);
+ PlayMapChosenOrBattleBGM(MUS_VS_TRAINER);
gLinkPlayers[0].linkType = LINKTYPE_BATTLE;
SetLinkBattleTypeFlags(gSpecialVar_0x8004);
CleanupOverworldWindowsAndTilemaps();
- gTrainerBattleOpponent_A = 0x800;
+ gTrainerBattleOpponent_A = TRAINER_LINK_OPPONENT;
SetMainCallback2(CB2_InitBattle);
- gMain.savedCallback = sub_80B360C;
+ gMain.savedCallback = CB2_ReturnFromCableClubBattle;
DestroyTask(taskId);
break;
}
}
-static void sub_80B3554(void)
+#undef tTimer
+
+static void CB2_ReturnFromUnionRoomBattle(void)
{
u8 playerCount;
int i;
- bool32 r4;
+ bool32 linkedWithFRLG;
switch (gMain.state)
{
- case 0:
- playerCount = GetLinkPlayerCount();
- r4 = FALSE;
- for (i = 0; i < playerCount; i++)
+ case 0:
+ playerCount = GetLinkPlayerCount();
+ linkedWithFRLG = FALSE;
+ for (i = 0; i < playerCount; i++)
+ {
+ u32 version = (u8)gLinkPlayers[i].version;
+ if (version == VERSION_FIRE_RED || version == VERSION_LEAF_GREEN)
{
- u32 version = (u8)gLinkPlayers[i].version;
- if (version == VERSION_FIRE_RED || version == VERSION_LEAF_GREEN)
- {
- r4 = TRUE;
- break;
- }
+ linkedWithFRLG = TRUE;
+ break;
}
+ }
- if (r4)
- {
- gMain.state = 2;
- }
- else
- {
- sub_800AC34();
- gMain.state = 1;
- }
- break;
- case 1:
- if (gReceivedRemoteLinkPlayers == FALSE)
- {
- SetMainCallback2(CB2_ReturnToField);
- }
- break;
- case 2:
+ if (linkedWithFRLG)
+ {
+ gMain.state = 2;
+ }
+ else
+ {
+ SetCloseLinkCallback();
+ gMain.state = 1;
+ }
+ break;
+ case 1:
+ if (!gReceivedRemoteLinkPlayers)
+ {
SetMainCallback2(CB2_ReturnToField);
- break;
+ }
+ break;
+ case 2:
+ SetMainCallback2(CB2_ReturnToField);
+ break;
}
RunTasks();
}
-void sub_80B360C(void)
+void CB2_ReturnFromCableClubBattle(void)
{
gBattleTypeFlags &= ~BATTLE_TYPE_20;
Overworld_ResetMapMusic();
@@ -980,26 +1006,22 @@ void sub_80B360C(void)
{
switch (gBattleOutcome)
{
- case B_OUTCOME_WON:
- sub_801B990(0, gLinkPlayers[GetMultiplayerId() ^ 1].trainerId);
- break;
- case B_OUTCOME_LOST:
- sub_801B990(1, gLinkPlayers[GetMultiplayerId() ^ 1].trainerId);
- break;
+ case B_OUTCOME_WON:
+ RecordIdOfWonderCardSenderByEventType(0, gLinkPlayers[GetMultiplayerId() ^ 1].trainerId);
+ break;
+ case B_OUTCOME_LOST:
+ RecordIdOfWonderCardSenderByEventType(1, gLinkPlayers[GetMultiplayerId() ^ 1].trainerId);
+ break;
}
}
}
if (InUnionRoom() == TRUE)
- {
- gMain.savedCallback = sub_80B3554;
- }
+ gMain.savedCallback = CB2_ReturnFromUnionRoomBattle;
else
- {
gMain.savedCallback = CB2_ReturnToFieldFromMultiplayer;
- }
- SetMainCallback2(sub_80A0514);
+ SetMainCallback2(CB2_SetUpSaveAfterLinkBattle);
}
void CleanupLinkRoomState(void)
@@ -1020,22 +1042,23 @@ void ExitLinkRoom(void)
QueueExitLinkRoomKey();
}
-static void sub_80B3728(u8 taskId)
+// Note: gSpecialVar_0x8005 contains the id of the seat the player entered
+static void Task_EnterCableClubSeat(u8 taskId)
{
struct Task* task = &gTasks[taskId];
- switch (task->data[0])
+ switch (task->tState)
{
case 0:
ShowFieldMessage(gText_PleaseWaitForLink);
- task->data[0] = 1;
+ task->tState = 1;
break;
case 1:
if (IsFieldMessageBoxHidden())
{
sub_8087288();
SetLocalLinkPlayerId(gSpecialVar_0x8005);
- task->data[0] = 2;
+ task->tState = 2;
}
break;
case 2:
@@ -1045,12 +1068,12 @@ static void sub_80B3728(u8 taskId)
break;
case 1:
HideFieldMessageBox();
- task->data[0] = 0;
+ task->tState = 0;
sub_80872C4();
SwitchTaskToFollowupFunc(taskId);
break;
case 2:
- task->data[0] = 3;
+ task->tState = 3;
break;
}
break;
@@ -1063,35 +1086,35 @@ static void sub_80B3728(u8 taskId)
}
}
-void sub_80B37D4(TaskFunc followupFunc)
+void CreateTask_EnterCableClubSeat(TaskFunc followupFunc)
{
- u8 taskId = CreateTask(sub_80B3728, 80);
- SetTaskFuncWithFollowupFunc(taskId, sub_80B3728, followupFunc);
+ u8 taskId = CreateTask(Task_EnterCableClubSeat, 80);
+ SetTaskFuncWithFollowupFunc(taskId, Task_EnterCableClubSeat, followupFunc);
ScriptContext1_Stop();
}
-static void sub_80B37FC(u8 taskId)
+static void Task_StartWiredTrade(u8 taskId)
{
struct Task *task = &gTasks[taskId];
- switch (task->data[0])
+ switch (task->tState)
{
case 0:
ScriptContext2_Enable();
FadeScreen(FADE_TO_BLACK, 0);
ClearLinkCallback_2();
- task->data[0]++;
+ task->tState++;
break;
case 1:
if (!gPaletteFade.active)
- task->data[0]++;
+ task->tState++;
break;
case 2:
gSelectedTradeMonPositions[TRADE_PLAYER] = 0;
gSelectedTradeMonPositions[TRADE_PARTNER] = 0;
m4aMPlayAllStop();
- sub_800AC34();
- task->data[0]++;
+ SetCloseLinkCallback();
+ task->tState++;
break;
case 3:
if (!gReceivedRemoteLinkPlayers)
@@ -1103,55 +1126,51 @@ static void sub_80B37FC(u8 taskId)
}
}
-static void sub_80B3894(u8 taskId)
+static void Task_StartWirelessTrade(u8 taskId)
{
s16 *data = gTasks[taskId].data;
- switch (data[0])
+ switch (tState)
{
case 0:
ScriptContext2_Enable();
FadeScreen(FADE_TO_BLACK, 0);
ClearLinkRfuCallback();
- data[0]++;
+ tState++;
break;
case 1:
if (!gPaletteFade.active)
- data[0]++;
+ tState++;
break;
case 2:
gSelectedTradeMonPositions[TRADE_PLAYER] = 0;
gSelectedTradeMonPositions[TRADE_PARTNER] = 0;
m4aMPlayAllStop();
- sub_800ADF8();
- data[0]++;
+ SetLinkStandbyCallback();
+ tState++;
break;
case 3:
if (IsLinkTaskFinished())
{
- sub_8013F78();
+ CreateTask_CreateTradeMenu();
DestroyTask(taskId);
}
break;
}
}
-// Note: VAR_0x8005 is set to the ID of the trade seat.
void PlayerEnteredTradeSeat(void)
{
if (gWirelessCommType != 0)
- {
- sub_80B37D4(sub_80B3894);
- }
+ CreateTask_EnterCableClubSeat(Task_StartWirelessTrade);
else
- {
- sub_80B37D4(sub_80B37FC);
- }
+ CreateTask_EnterCableClubSeat(Task_StartWiredTrade);
}
-static void sub_80B3950(void)
+// Unused
+static void CreateTask_StartWiredTrade(void)
{
- CreateTask(sub_80B37FC, 80);
+ CreateTask(Task_StartWiredTrade, 80);
}
void nullsub_37(void)
@@ -1159,25 +1178,20 @@ void nullsub_37(void)
}
-// Note: VAR_0x8005 is set to the ID of the player spot.
void ColosseumPlayerSpotTriggered(void)
{
gLinkType = LINKTYPE_BATTLE;
- if (gWirelessCommType != 0)
- {
- sub_80B37D4(sub_80B33BC);
- }
+ if (gWirelessCommType)
+ CreateTask_EnterCableClubSeat(Task_StartWirelessCableClubBattle);
else
- {
- sub_80B37D4(sub_80B32B4);
- }
+ CreateTask_EnterCableClubSeat(Task_StartWiredCableClubBattle);
}
-// This function is never called.
-static void sub_80B39A4(void)
+// Unused
+static void CreateTask_EnterCableClubSeatNoFollowup(void)
{
- u8 taskId = CreateTask(sub_80B3728, 80);
+ u8 taskId = CreateTask(Task_EnterCableClubSeat, 80);
ScriptContext1_Stop();
}
@@ -1199,16 +1213,18 @@ bool32 GetLinkTrainerCardColor(u8 linkPlayerIndex)
if (numStars == 0)
return FALSE;
- StringCopy(gStringVar2, gTrainerCardColorNames[numStars - 1]);
+ StringCopy(gStringVar2, sTrainerCardColorNames[numStars - 1]);
return TRUE;
}
-void task00_08081A90(u8 taskId)
+#define tTimer data[0]
+
+void Task_WaitForLinkPlayerConnection(u8 taskId)
{
struct Task *task = &gTasks[taskId];
- task->data[0]++;
- if (task->data[0] > 300)
+ task->tTimer++;
+ if (task->tTimer > 300)
{
CloseLink();
SetMainCallback2(CB2_LinkError);
@@ -1217,9 +1233,10 @@ void task00_08081A90(u8 taskId)
if (gReceivedRemoteLinkPlayers)
{
+ // Players connected, destroy task
if (gWirelessCommType == 0)
{
- if (!sub_800AA60())
+ if (!DoesLinkPlayerCountMatchSaved())
{
CloseLink();
SetMainCallback2(CB2_LinkError);
@@ -1233,6 +1250,8 @@ void task00_08081A90(u8 taskId)
}
}
+#undef tTimer
+
static void sub_80B3AAC(u8 taskId)
{
if (!gReceivedRemoteLinkPlayers)
@@ -1242,67 +1261,72 @@ static void sub_80B3AAC(u8 taskId)
}
}
+// Unused
static void sub_80B3AD0(u8 taskId)
{
- sub_800AC34();
+ SetCloseLinkCallback();
gTasks[taskId].func = sub_80B3AAC;
}
+#define tTimer data[1]
+
void sub_80B3AF8(u8 taskId)
{
s16 *data = gTasks[taskId].data;
- switch (data[0])
+ switch (tState)
{
- case 0:
- if (gWirelessCommType != 0)
- {
- DestroyTask(taskId);
- }
- else
- {
- OpenLink();
- CreateTask(task00_08081A90, 1);
- data[0]++;
- }
- break;
- case 1:
- if (++data[1] > 11)
- {
- data[1] = 0;
- data[0]++;
- }
- break;
- case 2:
- if (GetLinkPlayerCount_2() >= GetSavedPlayerCount())
+ case 0:
+ if (gWirelessCommType != 0)
+ {
+ DestroyTask(taskId);
+ }
+ else
+ {
+ OpenLink();
+ CreateTask(Task_WaitForLinkPlayerConnection, 1);
+ tState++;
+ }
+ break;
+ case 1:
+ if (++tTimer > 11)
+ {
+ tTimer = 0;
+ tState++;
+ }
+ break;
+ case 2:
+ if (GetLinkPlayerCount_2() >= GetSavedPlayerCount())
+ {
+ if (IsLinkMaster())
{
- if (IsLinkMaster())
- {
- if (++data[1] > 30)
- {
- CheckShouldAdvanceLinkState();
- data[0]++;
- }
- }
- else
+ if (++tTimer > 30)
{
- data[0]++;
+ CheckShouldAdvanceLinkState();
+ tState++;
}
}
- break;
- case 3:
- if (gReceivedRemoteLinkPlayers == TRUE && IsLinkPlayerDataExchangeComplete() == TRUE)
+ else
{
- DestroyTask(taskId);
+ tState++;
}
- break;
+ }
+ break;
+ case 3:
+ if (gReceivedRemoteLinkPlayers == TRUE && IsLinkPlayerDataExchangeComplete() == TRUE)
+ {
+ DestroyTask(taskId);
+ }
+ break;
}
}
+#undef tTimer
+
void TrySetBattleTowerLinkType(void)
{
if (gWirelessCommType == 0)
- {
gLinkType = LINKTYPE_BATTLE_TOWER;
- }
}
+
+#undef tState
diff --git a/src/coins.c b/src/coins.c
index 302817f8d..52c7dd3ec 100644
--- a/src/coins.c
+++ b/src/coins.c
@@ -14,7 +14,7 @@ void PrintCoinsString(u32 coinAmount)
{
u32 xAlign;
- ConvertIntToDecimalStringN(gStringVar1, coinAmount, STR_CONV_MODE_RIGHT_ALIGN, 4);
+ ConvertIntToDecimalStringN(gStringVar1, coinAmount, STR_CONV_MODE_RIGHT_ALIGN, MAX_COIN_DIGITS);
StringExpandPlaceholders(gStringVar4, gText_Coins);
xAlign = GetStringRightAlignXOffset(1, gStringVar4, 0x40);
diff --git a/src/confetti_util.c b/src/confetti_util.c
new file mode 100644
index 000000000..6d4770056
--- /dev/null
+++ b/src/confetti_util.c
@@ -0,0 +1,216 @@
+#include "global.h"
+#include "confetti_util.h"
+#include "malloc.h"
+#include "main.h"
+#include "digit_obj_util.h"
+
+static EWRAM_DATA struct
+{
+ u8 count;
+ struct ConfettiUtil *array;
+} *sWork = NULL;
+
+static void sub_81520A8(void *dest, u16 value, u8 left, u8 top, u8 width, u8 height) // Unused.
+{
+ u8 i;
+ u8 j;
+ u8 x;
+ u8 y;
+
+ for (i = 0, y = top; i < height; i++)
+ {
+ for (x = left, j = 0; j < width; j++)
+ {
+ *(u16 *)((dest) + (y * 64 + x * 2)) = value;
+ x = (x + 1) % 32;
+ }
+ y = (y + 1) % 32;
+ }
+}
+
+static void sub_8152134(void *dest, const u16 *src, u8 left, u8 top, u8 width, u8 height) // Unused.
+{
+ u8 i, j;
+ u8 x, y;
+ const u16 *_src;
+
+ for (i = 0, _src = src, y = top; i < height; i++)
+ {
+ for (x = left, j = 0; j < width; j++)
+ {
+ *(u16 *)((dest) + (y * 64 + x * 2)) = *(_src++);
+ x = (x + 1) % 32;
+ }
+ y = (y + 1) % 32;
+ }
+}
+
+bool32 ConfettiUtil_Init(u8 count)
+{
+ u8 i = 0;
+
+ if (count == 0)
+ return FALSE;
+ if (count > 64)
+ count = 64;
+
+ sWork = AllocZeroed(sizeof(*sWork));
+ if (sWork == NULL)
+ return FALSE;
+ sWork->array = AllocZeroed(count * sizeof(struct ConfettiUtil));
+ if (sWork->array == NULL)
+ {
+ FREE_AND_SET_NULL(sWork);
+ return FALSE;
+ }
+
+ sWork->count = count;
+ for (i = 0; i < count; i++)
+ {
+ memcpy(&sWork->array[i].oam, &gDummyOamData, sizeof(struct OamData));
+ sWork->array[i].dummied = TRUE;
+ }
+
+ return TRUE;
+}
+
+bool32 ConfettiUtil_Free(void)
+{
+ u8 i = 0;
+
+ if (sWork == NULL)
+ return FALSE;
+
+ for (i = 0; i < sWork->count; i++)
+ memcpy(&gMain.oamBuffer[i + 64], &gDummyOamData, sizeof(struct OamData));
+
+ memset(sWork->array, 0, sWork->count * sizeof(struct ConfettiUtil));
+ FREE_AND_SET_NULL(sWork->array);
+ memset(sWork, 0, sizeof(*sWork));
+ FREE_AND_SET_NULL(sWork);
+
+ return TRUE;
+}
+
+bool32 ConfettiUtil_Update(void)
+{
+ u8 i = 0;
+
+ if (sWork == NULL || sWork->array == NULL)
+ return FALSE;
+
+ for (i = 0; i < sWork->count; i++)
+ {
+ if (sWork->array[i].active && sWork->array[i].allowUpdates)
+ {
+ if (sWork->array[i].callback != NULL)
+ sWork->array[i].callback(&sWork->array[i]);
+
+ if (sWork->array[i].dummied)
+ {
+ memcpy(&gMain.oamBuffer[i + 64], &gDummyOamData, sizeof(struct OamData));
+ }
+ else
+ {
+ sWork->array[i].oam.y = sWork->array[i].y + sWork->array[i].yDelta;
+ sWork->array[i].oam.x = sWork->array[i].x + sWork->array[i].xDelta;
+ sWork->array[i].oam.priority = sWork->array[i].priority;
+ sWork->array[i].oam.tileNum = sWork->array[i].tileNum;
+ memcpy(&gMain.oamBuffer[i + 64], &sWork->array[i], sizeof(struct OamData));
+ }
+ }
+ }
+
+ return TRUE;
+}
+
+static bool32 SetAnimAndTileNum(struct ConfettiUtil *structPtr, u8 animNum)
+{
+ u16 tileStart;
+
+ if (structPtr == NULL)
+ return FALSE;
+
+ tileStart = GetSpriteTileStartByTag(structPtr->tileTag);
+ if (tileStart == 0xFFFF)
+ return FALSE;
+
+ structPtr->animNum = animNum;
+ structPtr->tileNum = (GetTilesPerImage(structPtr->oam.shape, structPtr->oam.size) * animNum) + tileStart;
+ return TRUE;
+}
+
+u8 ConfettiUtil_SetCallback(u8 id, void (*func)(struct ConfettiUtil *))
+{
+ if (sWork == NULL || id >= sWork->count)
+ return 0xFF;
+ else if (!sWork->array[id].active)
+ return 0xFF;
+
+ sWork->array[id].callback = func;
+ return id;
+}
+
+u8 ConfettiUtil_SetData(u8 id, u8 dataArrayId, s16 dataValue)
+{
+ if (sWork == NULL || id >= sWork->count)
+ return 0xFF;
+ else if (!sWork->array[id].active || dataArrayId > ARRAY_COUNT(sWork->array[id].data) - 1) // - 1 b/c last slot is reserved for taskId
+ return 0xFF;
+
+ sWork->array[id].data[dataArrayId] = dataValue;
+ return id;
+}
+
+u8 ConfettiUtil_AddNew(const struct OamData *oam, u16 tileTag, u16 palTag, s16 x, s16 y, u8 animNum, u8 priority)
+{
+ struct ConfettiUtil *structPtr = NULL;
+ u8 i;
+
+ if (sWork == NULL || oam == NULL)
+ return 0xFF;
+
+ for (i = 0; i < sWork->count; i++)
+ {
+ if (!sWork->array[i].active)
+ {
+ structPtr = &sWork->array[i];
+ memset(structPtr, 0, sizeof(*structPtr));
+ structPtr->id = i;
+ structPtr->active = TRUE;
+ structPtr->allowUpdates = TRUE;
+ break;
+ }
+ }
+
+ if (structPtr == NULL)
+ return 0xFF;
+
+ memcpy(&structPtr->oam, oam, sizeof(*oam));
+ structPtr->tileTag = tileTag;
+ structPtr->palTag = palTag;
+ structPtr->x = x;
+ structPtr->y = y;
+ structPtr->oam.paletteNum = IndexOfSpritePaletteTag(palTag);
+ if (priority < 4)
+ {
+ structPtr->priority = priority;
+ structPtr->oam.priority = priority;
+ }
+ SetAnimAndTileNum(structPtr, animNum);
+
+ return structPtr->id;
+}
+
+u8 ConfettiUtil_Remove(u8 id)
+{
+ if (sWork == NULL || !sWork->array[id].active)
+ return 0xFF;
+
+ memset(&sWork->array[id], 0, sizeof(struct ConfettiUtil));
+ sWork->array[id].oam.y = 160;
+ sWork->array[id].oam.x = 240;
+ sWork->array[id].dummied = TRUE;
+ memcpy(&gMain.oamBuffer[id + 64], &gDummyOamData, sizeof(struct OamData));
+ return id;
+}
diff --git a/src/contest.c b/src/contest.c
index 58628e35d..a84d72aa9 100644
--- a/src/contest.c
+++ b/src/contest.c
@@ -2,15 +2,10 @@
#include "gpu_regs.h"
#include "bg.h"
#include "malloc.h"
-#include "constants/items.h"
-#include "constants/event_objects.h"
-#include "constants/moves.h"
-#include "constants/songs.h"
-#include "constants/species.h"
-#include "constants/flags.h"
#include "battle.h"
#include "battle_anim.h"
#include "contest.h"
+#include "contest_link.h"
#include "data.h"
#include "decompress.h"
#include "graphics.h"
@@ -31,103 +26,81 @@
#include "tv.h"
#include "scanline_effect.h"
#include "util.h"
-#include "contest_link_80F57C4.h"
+#include "contest_util.h"
#include "dma3.h"
#include "battle_message.h"
#include "event_scripts.h"
#include "event_data.h"
#include "strings.h"
#include "contest_effect.h"
-#include "contest_link_80FC4F4.h"
-#include "script_pokemon_util_80F87D8.h"
+#include "contest_link.h"
#include "international_string_util.h"
#include "data.h"
-#include "constants/rgb.h"
#include "contest_ai.h"
-
-#define APPLAUSE_METER_GFX_TAG 0xABE2
-
-// An index into a palette where the text color for each contestant is stored.
-// Contestant 0 will use palette color 10, contestant 1 will use color 11, etc.
-#define CONTESTANT_TEXT_COLOR_START 10
-
-enum
-{
-// The "{Pokemon Name} / {Trainer Name}" windows.
- CONTEST_WINDOW_CONTESTANT0_NAME,
- CONTEST_WINDOW_CONTESTANT1_NAME,
- CONTEST_WINDOW_CONTESTANT2_NAME,
- CONTEST_WINDOW_CONTESTANT3_NAME,
- CONTEST_WINDOW_GENERAL_TEXT,
- // The available moves, from top to bottom
- CONTEST_WINDOW_MOVE0,
- CONTEST_WINDOW_MOVE1,
- CONTEST_WINDOW_MOVE2,
- CONTEST_WINDOW_MOVE3,
- // The small "/" character between the move category and the
- // appeal/jam display
- CONTEST_WINDOW_SLASH,
- CONTEST_WINDOW_MOVE_DESCRIPTION
-};
-
-#define MOVE_WINDOWS_START CONTEST_WINDOW_MOVE0
+#include "constants/event_objects.h"
+#include "constants/items.h"
+#include "constants/moves.h"
+#include "constants/rgb.h"
+#include "constants/songs.h"
+#include "constants/species.h"
+#include "constants/tv.h"
// This file's functions.
-static void sub_80D782C(void);
-static void sub_80D7C7C(u8 taskId);
-static void sub_80D7CB4(u8 taskId);
-static void sub_80D7DAC(u8 taskId);
-static void sub_80D7DC8(u8 taskId);
-static void sub_80D7DE8(u8 taskId);
+static void LoadContestPalettes(void);
+static void Task_StartContestWaitFade(u8 taskId);
+static void Task_TryStartLinkContest(u8 taskId);
+static void Task_CommunicateMonIdxs(u8 taskId);
+static void Task_EndCommunicateMonIdxs(u8 taskId);
+static void Task_ReadyStartLinkContest(u8 taskId);
static bool8 SetupContestGraphics(u8 *stateVar);
-static void sub_80D80C8(u8 taskId);
-static void sub_80D8108(u8 taskId);
-static void vblank_cb_battle(void);
+static void Task_WaitToRaiseCurtainAtStart(u8 taskId);
+static void Task_RaiseCurtainAtStart(u8 taskId);
+static void VBlankCB_Contest(void);
static void CB2_ContestMain(void);
-static void sub_80D833C(u8 taskId);
-static void sub_80D8424(u8 taskId);
-static void sub_80D8610(u8 taskId);
-static void sub_80D8490(u8 taskId);
-static void sub_80D880C(s8);
-static void sub_80D883C(s8);
-static void sub_80D8894(u8 taskId);
-static void sub_80D892C(u8 taskId);
-static void sub_80D895C(u8 taskId);
-static void sub_80D8A04(u8 taskId);
-static void sub_80D8A50(u8 taskId);
-static void sub_80D8A88(u8 taskId);
-static void sub_80D8B38(u8 taskId);
-static void sub_80DA110(u8);
-static void sub_80DA134(struct Sprite *);
-static void sub_80DA164(struct Sprite *);
-static void sub_80DA198(u8);
-static void sub_80DA25C(u8);
-static void sub_80DA28C(u8);
-static void sub_80DA31C(u8);
+static void Task_DisplayAppealNumberText(u8 taskId);
+static void Task_TryShowMoveSelectScreen(u8 taskId);
+static void Task_ShowMoveSelectScreen(u8 taskId);
+static void Task_HandleMoveSelectInput(u8 taskId);
+static void DrawMoveSelectArrow(s8);
+static void EraseMoveSelectArrow(s8);
+static void Task_SelectedMove(u8 taskId);
+static void Task_EndCommunicateMoveSelections(u8 taskId);
+static void Task_HideMoveSelectScreen(u8 taskId);
+static void Task_HideApplauseMeterForAppealStart(u8 taskId);
+static void Task_WaitHideApplauseMeterForAppealStart(u8 taskId);
+static void Task_AppealSetup(u8 taskId);
+static void Task_DoAppeals(u8 taskId);
+static void Task_EndWaitForLink(u8);
+static void SpriteCB_MonSlideIn(struct Sprite *);
+static void SpriteCB_MonSlideOut(struct Sprite *);
+static void Task_FinishRoundOfAppeals(u8);
+static void Task_ReadyUpdateHeartSliders(u8);
+static void Task_UpdateHeartSliders(u8);
+static void Task_WaitForHeartSliders(u8);
static void sub_80DA348(u8);
-static void sub_80DA38C(u8);
-static void sub_80DA3CC(u8);
-static void sub_80DA464(u8);
-static void sub_80DA49C(u8);
-static void sub_80DA4CC(u8);
-static void sub_80DA51C(u8);
-static void sub_80DA5B4(u8);
-static void sub_80DA5E8(u8);
-static void sub_80DA6B4(u8);
-static void sub_80DA700(u8);
-static void sub_80DA740(u8);
-static void sub_80DA7A0(u8);
-static void sub_80DA7EC(u8);
-static void sub_80DA830(u8);
-static void sub_80DA874(void);
-static bool8 sub_80DA8A4(void);
+static void Task_WaitPrintRoundResult(u8);
+static void Task_PrintRoundResultText(u8);
+static void Task_ReUpdateHeartSliders(u8);
+static void Task_WaitForHeartSlidersAgain(u8);
+static void Task_DropCurtainAtRoundEnd(u8);
+static void Task_TryStartNextRoundOfAppeals(u8);
+static void Task_StartNewRoundOfAppeals(u8);
+static void Task_EndAppeals(u8);
+static void Task_WaitForOutOfTimeMsg(u8);
+static void Task_DropCurtainAtAppealsEnd(u8);
+static void Task_TryCommunicateFinalStandings(u8);
+static void Task_CommunicateFinalStandings(u8);
+static void Task_EndCommunicateFinalStandings(u8);
+static void Task_ContestReturnToField(u8);
+static void FieldCB_ContestReturnToField(void);
+static bool8 IsPlayerLinkLeader(void);
static void PrintContestantTrainerName(u8);
static void PrintContestantTrainerNameWithColor(u8 a0, u8 a1);
static void PrintContestantMonName(u8);
static void PrintContestantMonNameWithColor(u8, u8);
-static u8 sub_80DB0C4(void);
-static u8 sub_80DB120(void);
-static u8 sub_80DB174(u16, u32, u32, u32);
+static u8 CreateJudgeSprite(void);
+static u8 CreateJudgeSpeechBubbleSprite(void);
+static u8 CreateContestantSprite(u16, u32, u32, u32);
static void PrintContestMoveDescription(u16);
static u16 SanitizeSpecies(u16);
static void ContestClearGeneralTextWindow(void);
@@ -135,95 +108,234 @@ static u16 GetChosenMove(u8);
static void GetAllChosenMoves(void);
static void ContestPrintLinkStandby(void);
static void FillContestantWindowBgs(void);
-static void sub_80DC2BC(void);
-static void sub_80DC490(bool8);
-static void sub_80DC4F0(void);
+static void CreateSliderHeartSprites(void);
+static void SetBottomSliderHeartsInvisibility(bool8);
+static void CreateNextTurnSprites(void);
static void CreateApplauseMeterSprite(void);
-static void sub_80DC5E8(void);
-static void sub_80DC7EC(void);
+static void CreateJudgeAttentionEyeTask(void);
+static void CreateUnusedBlendTask(void);
static void ContestDebugDoPrint(void);
static void DrawContestantWindows(void);
static void ApplyNextTurnOrder(void);
-static void StartMoveApplauseMeterOnscreen(void);
-static void TryMoveApplauseMeterOffscreen(void);
-static void sub_80DE224(void);
-static void sub_80DE350(void);
-static void sub_80DE424(u8);
-static void sub_80DE69C(u8);
-static void sub_80DEA20(void);
+static void SlideApplauseMeterIn(void);
+static void SlideApplauseMeterOut(void);
+static void SetBgForCurtainDrop(void);
+static void UpdateContestantBoxOrder(void);
+static void Task_StartDropCurtainAtRoundEnd(u8);
+static void AnimateSliderHearts(u8);
+static void CreateInvisibleBattleTargetSprite(void);
static void Contest_StartTextPrinter(const u8 *, u32);
static void ContestBG_FillBoxWithIncrementingTile(u8, u16, u8, u8, u8, u8, u8, s16);
static bool32 Contest_RunTextPrinters(void);
static void Contest_SetBgCopyFlags(u32 flagIndex);
-static void sub_80DBD18(void);
-static void sub_80DD080(u8);
-static void sub_80DE9DC(u8);
-static void sub_80DCBE8(u8, u8);
-static u8 sub_80DC9EC(u8);
+static void CalculateFinalScores(void);
+static void CalculateAppealMoveImpact(u8);
+static void SetMoveAnimAttackerData(u8);
+static void BlinkContestantBox(u8, u8);
+static u8 CreateContestantBoxBlinkSprites(u8);
static u16 SanitizeMove(u16);
-static void sub_80DE864(u8);
-static void SelectContestMoveBankTarget(u16);
-static void sub_80DE9B0(u8);
-static void sub_80DC674(u8);
-static void sub_80DE12C(void);
-static void sub_80DD45C(u8, u8);
-static void sub_80DD720(u8);
-static void sub_80DE008(bool8);
-static u8 sub_80DC028(s16, s16, u8);
-static bool8 sub_80DB5B8(u8, u8);
-static bool8 sub_80DB798(u8);
-static void sub_80DB884(void);
-static void sub_80DC9B4(u8);
-static void sub_80DDED0(s8, s8);
+static void SetMoveSpecificAnimData(u8);
+static void SetMoveTargetPosition(u16);
+static void ClearMoveAnimData(u8);
+static void StopFlashJudgeAttentionEye(u8);
+static void DrawUnnervedSymbols(void);
+static void PrintAppealMoveResultText(u8, u8);
+static void DoJudgeSpeechBubble(u8);
+static void ShowHideNextTurnGfx(bool8);
+static u8 UpdateAppealHearts(s16, s16, u8);
+static bool8 UpdateConditionStars(u8, u8);
+static bool8 DrawStatusSymbol(u8);
+static void DrawStatusSymbols(void);
+static void StartStopFlashJudgeAttentionEye(u8);
+static void BlendAudienceBackground(s8, s8);
static void ShowAndUpdateApplauseMeter(s8 unused);
-static void sub_80DDE0C(void);
+static void AnimateAudience(void);
static void UpdateApplauseMeter(void);
static void RankContestants(void);
-static void sub_80DBA18(void);
-static void sub_80DC3AC(void);
-static bool8 sub_80DC3C4(void);
+static void SetAttentionLevels(void);
+static void UpdateHeartSliders(void);
+static bool8 SlidersDoneUpdating(void);
static void ContestBG_FillBoxWithTile(u8, u16, u8, u8, u8, u8, u8);
static void Contest_PrintTextToBg0WindowStd(u32, const u8 *);
-static s16 sub_80DBD34(u8);
+static s16 GetContestantRound2Points(u8);
static void DetermineFinalStandings(void);
-static bool8 sub_80DBF30(s32, s32, struct UnknownContestStruct6 *);
-static void sub_80DC0F4(u8);
-static void sub_80DC408(struct Sprite *);
-static void sub_80DC728(u8);
-static void sub_80DC6A4(u8);
-static void sub_80DC8D0(u8);
-static void sub_80DC81C(u8);
-static void sub_80DC87C(u8);
-static void sub_80DCC84(struct Sprite *);
-static void sub_80DCCD8(struct Sprite *sprite);
+static bool8 DidContestantPlaceHigher(s32, s32, struct ContestFinalStandings *);
+static void Task_UpdateAppealHearts(u8);
+static void SpriteCB_UpdateHeartSlider(struct Sprite *);
+static void Task_FlashJudgeAttentionEye(u8);
+static void Task_StopFlashJudgeAttentionEye(u8);
+static void Task_UnusedBlend(u8);
+static void InitUnusedBlendTaskData(u8);
+static void UpdateBlendTaskContestantData(u8);
+static void SpriteCB_BlinkContestantBox(struct Sprite *);
+static void SpriteCB_EndBlinkContestantBox(struct Sprite *sprite);
static u8 StartApplauseOverflowAnimation(void);
static void Task_ApplauseOverflowAnimation(u8);
-static void Task_MoveApplauseMeterOnscreen(u8);
-static void Task_MoveApplauseMeterOffscreen(u8);
+static void Task_SlideApplauseMeterIn(u8);
+static void Task_SlideApplauseMeterOut(u8);
static void Task_ShowAndUpdateApplauseMeter(u8);
-static void sub_80DDE30(u8);
-static void sub_80DDF80(u8);
+static void Task_AnimateAudience(u8);
+static void Task_BlendAudienceBackground(u8);
static const u8 *GetTurnOrderNumberGfx(u8);
-static void sub_80DE464(u8);
-static void sub_80DE4A8(u8);
-static void sub_80DE5F4(u8);
-static void sub_80DE65C(u8);
-static void sub_80DE794(u8);
-static void sub_80DEA5C(void);
-static void sub_80DF250(void);
-static void sub_80DF4F8(void);
-static void sub_80DF080(u8);
+static void Task_UpdateCurtainDropAtRoundEnd(u8);
+static void Task_ResetForNextRound(u8);
+static void Task_WaitRaiseCurtainAtRoundEnd(u8);
+static void Task_StartRaiseCurtainAtRoundEnd(u8);
+static void Task_WaitForSliderHeartAnim(u8);
+static void SetBattleTargetSpritePosition(void);
+static void CalculateContestLiveUpdateData(void);
+static void SetConestLiveUpdateTVData(void);
+static void SetContestLiveUpdateFlags(u8);
static void ContestDebugPrintBitStrings(void);
-static void sub_80DF9D4(u8 *);
-static void sub_80DF9E0(u8 *, s32);
+static void StripPlayerNameForLinkContest(u8 *);
+static void StripMonNameForLinkContest(u8 *, s32);
static void SwapMoveDescAndContestTilemaps(void);
+// An index into a palette where the text color for each contestant is stored.
+// Contestant 0 will use palette color 10, contestant 1 will use color 11, etc.
+#define CONTESTANT_TEXT_COLOR_START 10
+
+enum {
+// The "{Pokemon Name} / {Trainer Name}" windows.
+ WIN_CONTESTANT0_NAME,
+ WIN_CONTESTANT1_NAME,
+ WIN_CONTESTANT2_NAME,
+ WIN_CONTESTANT3_NAME,
+ WIN_GENERAL_TEXT,
+ // The available moves, from top to bottom
+ WIN_MOVE0,
+ WIN_MOVE1,
+ WIN_MOVE2,
+ WIN_MOVE3,
+ // The small "/" character between the move category and the
+ // appeal/jam display
+ WIN_SLASH,
+ WIN_MOVE_DESCRIPTION
+};
+
+enum {
+ JUDGE_SYMBOL_SWIRL,
+ JUDGE_SYMBOL_SWIRL_UNUSED,
+ JUDGE_SYMBOL_ONE_EXCLAMATION,
+ JUDGE_SYMBOL_TWO_EXCLAMATIONS,
+ JUDGE_SYMBOL_NUMBER_ONE_UNUSED,
+ JUDGE_SYMBOL_NUMBER_ONE,
+ JUDGE_SYMBOL_NUMBER_FOUR,
+ JUDGE_SYMBOL_QUESTION_MARK,
+ JUDGE_SYMBOL_STAR,
+};
+
+enum {
+ STAT_SYMBOL_CIRCLE,
+ STAT_SYMBOL_WAVE,
+ STAT_SYMBOL_X,
+ STAT_SYMBOL_SWIRL,
+ STAT_SYMBOL_SQUARE,
+};
+
+enum {
+ CONTEST_DEBUG_MODE_OFF,
+ CONTEST_DEBUG_MODE_PRINT_POINT_TOTAL,
+ CONTEST_DEBUG_MODE_PRINT_WINNER_FLAGS,
+ CONTEST_DEBUG_MODE_PRINT_LOSER_FLAGS
+};
+
+#define MOVE_WINDOWS_START WIN_MOVE0
+
+#define TAG_CONTEST_SYMBOLS_PAL 0xABE0
+#define TAG_JUDGE_SYMBOLS_GFX 0xABE0
+#define TAG_FACES_GFX 0xABE1
+#define TAG_APPLAUSE_METER 0xABE2
+
+#define TAG_SLIDER_HEART 0x4E20
+#define TAG_JUDGE 0x4E21
+#define TAG_NEXT_TURN_PAL 0x4E22
+#define TAG_NEXT_TURN_1_GFX 0x4E22
+#define TAG_NEXT_TURN_2_GFX 0x4E23
+#define TAG_NEXT_TURN_3_GFX 0x4E24
+#define TAG_NEXT_TURN_4_GFX 0x4E25
+
+#define TAG_BLINK_EFFECT_CONTESTANT0 0x80E8
+#define TAG_BLINK_EFFECT_CONTESTANT1 0x80E9
+#define TAG_BLINK_EFFECT_CONTESTANT2 0x80EA
+#define TAG_BLINK_EFFECT_CONTESTANT3 0x80EB
+
+enum {
+ SLIDER_HEART_ANIM_NORMAL,
+ SLIDER_HEART_ANIM_DISAPPEAR,
+ SLIDER_HEART_ANIM_APPEAR,
+};
+
+// States for Task_DoAppeals
+enum {
+ APPEALSTATE_START_TURN,
+ APPEALSTATE_WAIT_LINK,
+ APPEALSTATE_CHECK_SKIP_TURN,
+ APPEALSTATE_SLIDE_MON_IN,
+ APPEALSTATE_WAIT_SLIDE_MON,
+ APPEALSTATE_PRINT_USED_MOVE_MSG,
+ APPEALSTATE_WAIT_USED_MOVE_MSG,
+ APPEALSTATE_MOVE_ANIM,
+ APPEALSTATE_WAIT_MOVE_ANIM,
+ APPEALSTATE_MOVE_ANIM_MULTITURN,
+ APPEALSTATE_SLIDE_MON_OUT,
+ APPEALSTATE_FREE_MON_SPRITE,
+ APPEALSTATE_UPDATE_MOVE_USERS_HEARTS,
+ APPEALSTATE_WAIT_MOVE_USERS_HEARTS,
+ APPEALSTATE_PRINT_COMBO_MSG,
+ APPEALSTATE_TRY_UPDATE_HEARTS_FROM_COMBO,
+ APPEALSTATE_WAIT_HEARTS_FROM_COMBO,
+ APPEALSTATE_CHECK_REPEATED_MOVE,
+ APPEALSTATE_WAIT_HEARTS_FROM_REPEAT,
+ APPEALSTATE_UPDATE_HEARTS_FROM_REPEAT,
+ APPEALSTATE_START_TURN_END_DELAY,
+ APPEALSTATE_TURN_END_DELAY,
+ APPEALSTATE_START_NEXT_TURN,
+ APPEALSTATE_TRY_PRINT_MOVE_RESULT,
+ APPEALSTATE_WAIT_MOVE_RESULT_MSG,
+ APPEALSTATE_UPDATE_OPPONENTS,
+ APPEALSTATE_UPDATE_OPPONENT,
+ APPEALSTATE_WAIT_OPPONENT_RESPONSE_MSG,
+ APPEALSTATE_UPDATE_OPPONENT_HEARTS,
+ APPEALSTATE_WAIT_OPPONENT_HEARTS,
+ APPEALSTATE_UPDATE_OPPONENT_STATUS,
+ APPEALSTATE_PRINT_SKIP_TURN_MSG,
+ APPEALSTATE_WAIT_SKIP_TURN_MSG,
+ APPEALSTATE_PRINT_TOO_NERVOUS_MSG,
+ APPEALSTATE_WAIT_TOO_NERVOUS_MSG,
+ APPEALSTATE_TRY_JUDGE_STAR,
+ APPEALSTATE_WAIT_JUDGE_STAR,
+ APPEALSTATE_UPDATE_MOVE_USERS_STARS,
+ APPEALSTATE_WAIT_MOVE_USERS_STARS,
+ APPEALSTATE_UPDATE_OPPONENT_STARS,
+ APPEALSTATE_WAIT_OPPONENT_STARS,
+ APPEALSTATE_UPDATE_CROWD,
+ APPEALSTATE_42, // Unused state
+ APPEALSTATE_WAIT_EXCITEMENT_HEARTS,
+ APPEALSTATE_44, // Unused state
+ APPEALSTATE_WAIT_JUDGE_COMBO,
+ APPEALSTATE_WAIT_JUDGE_REPEATED_MOVE,
+ APPEALSTATE_TRY_SHOW_NEXT_TURN_GFX,
+ APPEALSTATE_CHECK_TURN_ORDER_MOD,
+ APPEALSTATE_WAIT_JUDGE_TURN_ORDER,
+ APPEALSTATE_UPDATE_MOVE_USERS_STATUS,
+ APPEALSTATE_TRY_PRINT_SKIP_NEXT_TURN_MSG,
+ APPEALSTATE_WAIT_SKIP_NEXT_TURN_MSG,
+ APPEALSTATE_DO_CROWD_UNEXCITED,
+ APPEALSTATE_DO_CROWD_EXCITED,
+ APPEALSTATE_SLIDE_APPLAUSE_OUT,
+ APPEALSTATE_WAIT_SLIDE_APPLAUSE,
+ APPEALSTATE_PRINT_CROWD_WATCHES_MSG,
+ APPEALSTATE_PRINT_MON_MOVE_IGNORED_MSG,
+ APPEALSTATE_WAIT_MON_MOVE_IGNORED_MSG,
+};
+
// EWRAM vars.
EWRAM_DATA struct ContestPokemon gContestMons[CONTESTANT_COUNT] = {0};
-EWRAM_DATA s16 gContestMonConditions[CONTESTANT_COUNT] = {0};
-EWRAM_DATA s16 gUnknown_02039F08[CONTESTANT_COUNT] = {0};
-EWRAM_DATA s16 gUnknown_02039F10[CONTESTANT_COUNT] = {0};
-EWRAM_DATA s16 gUnknown_02039F18[CONTESTANT_COUNT] = {0};
+EWRAM_DATA s16 gContestMonRound1Points[CONTESTANT_COUNT] = {0}; // "Round 1" points are based on condition
+EWRAM_DATA s16 gContestMonTotalPoints[CONTESTANT_COUNT] = {0}; // Round 1 points + Round 2 points
+EWRAM_DATA s16 gContestMonAppealPointTotals[CONTESTANT_COUNT] = {0};
+EWRAM_DATA s16 gContestMonRound2Points[CONTESTANT_COUNT] = {0}; // "Round 2" points are just appeal points * 2
EWRAM_DATA u8 gContestFinalStandings[CONTESTANT_COUNT] = {0};
EWRAM_DATA u8 gContestMonPartyIndex = 0;
EWRAM_DATA u8 gContestPlayerMonIndex = 0;
@@ -231,7 +343,7 @@ EWRAM_DATA u8 gContestantTurnOrder[CONTESTANT_COUNT] = {0};
EWRAM_DATA u8 gLinkContestFlags = 0;
// Bit 0: Is a link contest
// Bit 1: Link contest uses wireless adapter
-EWRAM_DATA u8 gUnknown_02039F2B = 0;
+EWRAM_DATA u8 gContestLinkLeaderIndex = 0;
EWRAM_DATA u16 gSpecialVar_ContestCategory = 0;
EWRAM_DATA u16 gSpecialVar_ContestRank = 0;
EWRAM_DATA u8 gNumLinkContestPlayers = 0;
@@ -239,7 +351,7 @@ EWRAM_DATA u8 gHighestRibbonRank = 0;
EWRAM_DATA struct ContestResources *gContestResources = NULL;
EWRAM_DATA u8 sContestBgCopyFlags = 0;
EWRAM_DATA struct ContestWinner gCurContestWinner = {0};
-EWRAM_DATA u8 gUnknown_02039F5C = 0;
+EWRAM_DATA bool8 gUnknown_02039F5C = 0;
EWRAM_DATA u8 gUnknown_02039F5D = 0;
// IWRAM common vars.
@@ -250,24 +362,25 @@ extern const u8 gText_BDot[];
extern const u8 gText_CDot[];
extern void (*const gContestEffectFuncs[])(void);
-static const u8 gUnknown_08587A6C[] =
+static const u8 sSliderHeartYPositions[CONTESTANT_COUNT] =
{
- 0x24, 0x4C, 0x74, 0x9C
+ 36, 76, 116, 156
};
-static const u8 gUnknown_08587A70[] =
+// The "Next Turn" sprites cover up the slider, so the y positions are the same as above
+static const u8 sNextTurnSpriteYPositions[CONTESTANT_COUNT] =
{
- 0x24, 0x4C, 0x74, 0x9C
+ 36, 76, 116, 156
};
-static const struct SpriteSheet gUnknown_08587A74 =
+static const struct SpriteSheet sSpriteSheet_SliderHeart =
{
- .data = gTiles_8C19450,
+ .data = gContestSliderHeart_Gfx,
.size = 0x20,
- .tag = 0x4E20
+ .tag = TAG_SLIDER_HEART
};
-static const struct OamData gOamData_8587A7C =
+static const struct OamData sOam_SliderHeart =
{
.y = 0,
.affineMode = ST_OAM_AFFINE_OFF,
@@ -284,75 +397,75 @@ static const struct OamData gOamData_8587A7C =
.affineParam = 0
};
-static const union AffineAnimCmd gSpriteAffineAnim_8587A84[] =
+static const union AffineAnimCmd sAffineAnim_SliderHeart_Normal[] =
{
- AFFINEANIMCMD_FRAME(0x100, 0x100, 0, 0),
+ AFFINEANIMCMD_FRAME(256, 256, 0, 0),
AFFINEANIMCMD_END,
};
-static const union AffineAnimCmd gSpriteAffineAnim_8587A94[] =
+static const union AffineAnimCmd sAffineAnim_SliderHeart_SpinDisappear[] =
{
- AFFINEANIMCMD_FRAME(0x100, 0x100, 0, 0),
- AFFINEANIMCMD_FRAME(0xFFF6, 0xFFF6, -20, 20),
+ AFFINEANIMCMD_FRAME(256, 256, 0, 0),
+ AFFINEANIMCMD_FRAME(-10, -10, -20, 20),
AFFINEANIMCMD_END
};
-static const union AffineAnimCmd gSpriteAffineAnim_8587AAC[] =
+static const union AffineAnimCmd sAffineAnim_SliderHeart_SpinAppear[] =
{
- AFFINEANIMCMD_FRAME(0x38, 0x38, 0, 0),
+ AFFINEANIMCMD_FRAME(56, 56, 0, 0),
AFFINEANIMCMD_FRAME(10, 10, 20, 20),
AFFINEANIMCMD_END
};
-static const union AffineAnimCmd* const gSpriteAffineAnimTable_8587AC4[] =
+static const union AffineAnimCmd* const sAffineAnims_SliderHeart[] =
{
- gSpriteAffineAnim_8587A84,
- gSpriteAffineAnim_8587A94,
- gSpriteAffineAnim_8587AAC
+ [SLIDER_HEART_ANIM_NORMAL] = sAffineAnim_SliderHeart_Normal,
+ [SLIDER_HEART_ANIM_DISAPPEAR] = sAffineAnim_SliderHeart_SpinDisappear,
+ [SLIDER_HEART_ANIM_APPEAR] = sAffineAnim_SliderHeart_SpinAppear
};
-static const struct SpriteTemplate gSpriteTemplate_8587AD0 =
+static const struct SpriteTemplate sSpriteTemplate_SliderHeart =
{
- .tileTag = 0x4E20,
- .paletteTag = 0xABE0,
- .oam = &gOamData_8587A7C,
+ .tileTag = TAG_SLIDER_HEART,
+ .paletteTag = TAG_CONTEST_SYMBOLS_PAL,
+ .oam = &sOam_SliderHeart,
.anims = gDummySpriteAnimTable,
.images = NULL,
- .affineAnims = gSpriteAffineAnimTable_8587AC4,
+ .affineAnims = sAffineAnims_SliderHeart,
.callback = SpriteCallbackDummy
};
-static const struct CompressedSpriteSheet gUnknown_08587AE8[] =
+static const struct CompressedSpriteSheet sSpriteSheet_NextTurn[CONTESTANT_COUNT] =
{
{
.data = gContestNextTurnGfx,
.size = 0x100,
- .tag = 0x4E22
+ .tag = TAG_NEXT_TURN_1_GFX
},
{
.data = gContestNextTurnGfx,
.size = 0x100,
- .tag = 0x4E23
+ .tag = TAG_NEXT_TURN_2_GFX
},
{
.data = gContestNextTurnGfx,
.size = 0x100,
- .tag = 0x4E24
+ .tag = TAG_NEXT_TURN_3_GFX
},
{
.data = gContestNextTurnGfx,
.size = 0x100,
- .tag = 0x4E25
+ .tag = TAG_NEXT_TURN_4_GFX
}
};
-static const struct SpritePalette gUnknown_08587B08 =
+static const struct SpritePalette sSpritePalette_NextTurn =
{
.data = gContestPal,
- .tag = 0x4E22
+ .tag = TAG_NEXT_TURN_PAL
};
-static const struct OamData gOamData_8587B10 =
+static const struct OamData sOam_NextTurn =
{
.y = 0,
.affineMode = ST_OAM_AFFINE_OFF,
@@ -369,39 +482,39 @@ static const struct OamData gOamData_8587B10 =
.affineParam = 0
};
-static const struct SpriteTemplate gSpriteTemplate_8587B18[] =
+static const struct SpriteTemplate sSpriteTemplates_NextTurn[CONTESTANT_COUNT] =
{
{
- .tileTag = 0x4E22,
- .paletteTag = 0x4E22,
- .oam = &gOamData_8587B10,
+ .tileTag = TAG_NEXT_TURN_1_GFX,
+ .paletteTag = TAG_NEXT_TURN_PAL,
+ .oam = &sOam_NextTurn,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = SpriteCallbackDummy,
},
{
- .tileTag = 0x4E23,
- .paletteTag = 0x4E22,
- .oam = &gOamData_8587B10,
+ .tileTag = TAG_NEXT_TURN_2_GFX,
+ .paletteTag = TAG_NEXT_TURN_PAL,
+ .oam = &sOam_NextTurn,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = SpriteCallbackDummy,
},
{
- .tileTag = 0x4E24,
- .paletteTag = 0x4E22,
- .oam = &gOamData_8587B10,
+ .tileTag = TAG_NEXT_TURN_3_GFX,
+ .paletteTag = TAG_NEXT_TURN_PAL,
+ .oam = &sOam_NextTurn,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = SpriteCallbackDummy,
},
{
- .tileTag = 0x4E25,
- .paletteTag = 0x4E22,
- .oam = &gOamData_8587B10,
+ .tileTag = TAG_NEXT_TURN_4_GFX,
+ .paletteTag = TAG_NEXT_TURN_PAL,
+ .oam = &sOam_NextTurn,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
@@ -409,7 +522,7 @@ static const struct SpriteTemplate gSpriteTemplate_8587B18[] =
}
};
-const struct Subsprite gSubspriteTable_8587B78[] =
+static const struct Subsprite sSubsprites_NextTurn[] =
{
{
.x = -28,
@@ -429,22 +542,23 @@ const struct Subsprite gSubspriteTable_8587B78[] =
}
};
-const struct SubspriteTable gSubspriteTables_8587B80[] =
+static const struct SubspriteTable sSubspriteTable_NextTurn[] =
{
{
- .subspriteCount = 2,
- .subsprites = gSubspriteTable_8587B78
+ .subspriteCount = ARRAY_COUNT(sSubsprites_NextTurn),
+ .subsprites = sSubsprites_NextTurn
}
};
-const struct CompressedSpriteSheet gUnknown_08587B88 =
+// Unused
+static const struct CompressedSpriteSheet sSpriteSheet_Faces =
{
- .data = gUnknown_08C19168,
+ .data = gContestFaces_Gfx,
.size = 0x180,
- .tag = 0xABE1
+ .tag = TAG_FACES_GFX
};
-const struct OamData gOamData_8587B90 =
+static const struct OamData sOam_Faces =
{
.y = 0,
.affineMode = ST_OAM_AFFINE_OFF,
@@ -458,31 +572,32 @@ const struct OamData gOamData_8587B90 =
.paletteNum = 0,
};
-const struct SpriteTemplate gSpriteTemplate_8587B98 =
+// Unused
+static const struct SpriteTemplate sSpriteTemplate_Faces =
{
- .tileTag = 0xABE1,
- .paletteTag = 0xABE0,
- .oam = &gOamData_8587B90,
+ .tileTag = TAG_FACES_GFX,
+ .paletteTag = TAG_CONTEST_SYMBOLS_PAL,
+ .oam = &sOam_Faces,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = SpriteCallbackDummy
};
-static const struct CompressedSpriteSheet sApplauseMeterSpriteSheet =
+static const struct CompressedSpriteSheet sSpriteSheet_ApplauseMeter =
{
.data = gContestApplauseGfx,
.size = 0x400,
- .tag = APPLAUSE_METER_GFX_TAG
+ .tag = TAG_APPLAUSE_METER
};
-static const struct SpritePalette sApplauseMeterPalette =
+static const struct SpritePalette sSpritePalette_ApplauseMeter =
{
.data = gContestPal,
- .tag = APPLAUSE_METER_GFX_TAG
+ .tag = TAG_APPLAUSE_METER
};
-static const struct OamData sApplauseMeterOamData =
+static const struct OamData sOam_ApplauseMeter =
{
.y = 0,
.affineMode = ST_OAM_AFFINE_OFF,
@@ -496,18 +611,18 @@ static const struct OamData sApplauseMeterOamData =
.paletteNum = 0,
};
-static const struct SpriteTemplate sApplauseMeterSpriteTemplate =
+static const struct SpriteTemplate sSpriteTemplate_ApplauseMeter =
{
- .tileTag = APPLAUSE_METER_GFX_TAG,
- .paletteTag = APPLAUSE_METER_GFX_TAG,
- .oam = &sApplauseMeterOamData,
+ .tileTag = TAG_APPLAUSE_METER,
+ .paletteTag = TAG_APPLAUSE_METER,
+ .oam = &sOam_ApplauseMeter,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = SpriteCallbackDummy
};
-const struct OamData gOamData_8587BE0 =
+const struct OamData sOam_Judge =
{
.y = 0,
.affineMode = ST_OAM_AFFINE_OFF,
@@ -521,41 +636,41 @@ const struct OamData gOamData_8587BE0 =
.paletteNum = 2,
};
-const struct SpriteTemplate gSpriteTemplate_8587BE8 =
+const struct SpriteTemplate sSpriteTemplate_Judge =
{
- .tileTag = 0x4E21,
- .paletteTag = 0x4E21,
- .oam = &gOamData_8587BE0,
+ .tileTag = TAG_JUDGE,
+ .paletteTag = TAG_JUDGE,
+ .oam = &sOam_Judge,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = SpriteCallbackDummy
};
-const struct CompressedSpriteSheet gUnknown_08587C00 =
+const struct CompressedSpriteSheet sSpriteSheet_Judge =
{
.data = gContestJudgeGfx,
.size = 0x800,
- .tag = 0x4E21
+ .tag = TAG_JUDGE
};
-const struct CompressedSpriteSheet gUnknown_08587C08 =
+static const struct CompressedSpriteSheet sSpriteSheet_JudgeSymbols =
{
.data = gContestJudgeSymbolsGfx,
.size = 0x380,
- .tag = 0xABE0
+ .tag = TAG_JUDGE_SYMBOLS_GFX
};
-const struct CompressedSpritePalette gUnknown_08587C10 =
+const struct CompressedSpritePalette sSpritePalette_JudgeSymbols =
{
.data = gContest3Pal,
- .tag = 0xABE0
+ .tag = TAG_CONTEST_SYMBOLS_PAL
};
-const struct SpriteTemplate gSpriteTemplate_8587C18 =
+const struct SpriteTemplate sSpriteTemplate_JudgeSpeechBubble =
{
- .tileTag = 0xABE0,
- .paletteTag = 0xABE0,
+ .tileTag = TAG_JUDGE_SYMBOLS_GFX,
+ .paletteTag = TAG_CONTEST_SYMBOLS_PAL,
.oam = &gOamData_AffineOff_ObjNormal_16x16,
.anims = gDummySpriteAnimTable,
.images = NULL,
@@ -563,7 +678,7 @@ const struct SpriteTemplate gSpriteTemplate_8587C18 =
.callback = SpriteCallbackDummy
};
-const u16 gUnknown_08587C30[] = INCBIN_U16("graphics/unknown/unknown_587C30.gbapal");
+static const u16 sText_Pal[] = INCBIN_U16("graphics/contest/text.gbapal");
#include "data/contest_text_tables.h"
@@ -609,7 +724,7 @@ static const struct BgTemplate sContestBgTemplates[] =
static const struct WindowTemplate sContestWindowTemplates[] =
{
- [CONTEST_WINDOW_CONTESTANT0_NAME] = {
+ [WIN_CONTESTANT0_NAME] = {
.bg = 0,
.tilemapLeft = 18,
.tilemapTop = 0,
@@ -618,7 +733,7 @@ static const struct WindowTemplate sContestWindowTemplates[] =
.paletteNum = 0xF,
.baseBlock = 0x200
},
- [CONTEST_WINDOW_CONTESTANT1_NAME] = {
+ [WIN_CONTESTANT1_NAME] = {
.bg = 0,
.tilemapLeft = 18,
.tilemapTop = 5,
@@ -627,7 +742,7 @@ static const struct WindowTemplate sContestWindowTemplates[] =
.paletteNum = 0xF,
.baseBlock = 0x218
},
- [CONTEST_WINDOW_CONTESTANT2_NAME] = {
+ [WIN_CONTESTANT2_NAME] = {
.bg = 0,
.tilemapLeft = 18,
.tilemapTop = 10,
@@ -636,7 +751,7 @@ static const struct WindowTemplate sContestWindowTemplates[] =
.paletteNum = 0xF,
.baseBlock = 0x230
},
- [CONTEST_WINDOW_CONTESTANT3_NAME] = {
+ [WIN_CONTESTANT3_NAME] = {
.bg = 0,
.tilemapLeft = 18,
.tilemapTop = 15,
@@ -645,7 +760,7 @@ static const struct WindowTemplate sContestWindowTemplates[] =
.paletteNum = 0xF,
.baseBlock = 0x248
},
- [CONTEST_WINDOW_GENERAL_TEXT] = {
+ [WIN_GENERAL_TEXT] = {
.bg = 0,
.tilemapLeft = 1,
.tilemapTop = 15,
@@ -654,7 +769,7 @@ static const struct WindowTemplate sContestWindowTemplates[] =
.paletteNum = 0xF,
.baseBlock = 0x260
},
- [CONTEST_WINDOW_MOVE0] = {
+ [WIN_MOVE0] = {
.bg = 0,
.tilemapLeft = 1,
.tilemapTop = 31,
@@ -663,7 +778,7 @@ static const struct WindowTemplate sContestWindowTemplates[] =
.paletteNum = 0xF,
.baseBlock = 0x2A4
},
- [CONTEST_WINDOW_MOVE1] = {
+ [WIN_MOVE1] = {
.bg = 0,
.tilemapLeft = 1,
.tilemapTop = 33,
@@ -672,7 +787,7 @@ static const struct WindowTemplate sContestWindowTemplates[] =
.paletteNum = 0xF,
.baseBlock = 0x2B6
},
- [CONTEST_WINDOW_MOVE2] = {
+ [WIN_MOVE2] = {
.bg = 0,
.tilemapLeft = 1,
.tilemapTop = 35,
@@ -681,7 +796,7 @@ static const struct WindowTemplate sContestWindowTemplates[] =
.paletteNum = 0xF,
.baseBlock = 0x2C8
},
- [CONTEST_WINDOW_MOVE3] = {
+ [WIN_MOVE3] = {
.bg = 0,
.tilemapLeft = 1,
.tilemapTop = 37,
@@ -690,7 +805,7 @@ static const struct WindowTemplate sContestWindowTemplates[] =
.paletteNum = 0xF,
.baseBlock = 0x2DA
},
- [CONTEST_WINDOW_SLASH] = {
+ [WIN_SLASH] = {
.bg = 0,
.tilemapLeft = 16,
.tilemapTop = 31,
@@ -699,7 +814,7 @@ static const struct WindowTemplate sContestWindowTemplates[] =
.paletteNum = 0xF,
.baseBlock = 0x2EC
},
- [CONTEST_WINDOW_MOVE_DESCRIPTION] = {
+ [WIN_MOVE_DESCRIPTION] = {
.bg = 0,
.tilemapLeft = 11,
.tilemapTop = 35,
@@ -713,52 +828,52 @@ static const struct WindowTemplate sContestWindowTemplates[] =
#include "data/contest_opponents.h"
-static const struct CompressedSpriteSheet sUnknown_08589904[] =
+static const struct CompressedSpriteSheet sSpriteSheets_ContestantsTurnBlinkEffect[CONTESTANT_COUNT] =
{
{
.data = gBlankGfxCompressed,
.size = 0x1000,
- .tag = 0x80E8
+ .tag = TAG_BLINK_EFFECT_CONTESTANT0
},
{
.data = gBlankGfxCompressed,
.size = 0x1000,
- .tag = 0x80E9
+ .tag = TAG_BLINK_EFFECT_CONTESTANT1
},
{
.data = gBlankGfxCompressed,
.size = 0x1000,
- .tag = 0x80EA
+ .tag = TAG_BLINK_EFFECT_CONTESTANT2
},
{
.data = gBlankGfxCompressed,
.size = 0x1000,
- .tag = 0x80EB
+ .tag = TAG_BLINK_EFFECT_CONTESTANT3
}
};
// Yup this is super dangerous but that's how it is here
-static const struct SpritePalette sUnknown_08589924[] =
+static const struct SpritePalette sSpritePalettes_ContestantsTurnBlinkEffect[CONTESTANT_COUNT] =
{
{
.data = (u16*)(gHeap + 0x1A0A4),
- .tag = 0x80E8
+ .tag = TAG_BLINK_EFFECT_CONTESTANT0
},
{
.data = (u16*)(gHeap + 0x1A0C4),
- .tag = 0x80E9
+ .tag = TAG_BLINK_EFFECT_CONTESTANT1
},
{
.data = (u16*)(gHeap + 0x1A0E4),
- .tag = 0x80EA
+ .tag = TAG_BLINK_EFFECT_CONTESTANT2
},
{
.data = (u16*)(gHeap + 0x1A104),
- .tag = 0x80EB
+ .tag = TAG_BLINK_EFFECT_CONTESTANT3
}
};
-const struct OamData gOamData_8589944 =
+const struct OamData sOam_ContestantsTurnBlinkEffect =
{
.y = 0,
.affineMode = ST_OAM_AFFINE_DOUBLE,
@@ -773,13 +888,13 @@ const struct OamData gOamData_8589944 =
.affineParam = 0,
};
-const union AffineAnimCmd gSpriteAffineAnim_858994C[] =
+const union AffineAnimCmd sAffineAnim_ContestantsTurnBlinkEffect_0[] =
{
AFFINEANIMCMD_FRAME(0x100, 0x100, 0, 0),
AFFINEANIMCMD_END
};
-const union AffineAnimCmd gSpriteAffineAnim_858995C[] =
+const union AffineAnimCmd sAffineAnim_ContestantsTurnBlinkEffect_1[] =
{
AFFINEANIMCMD_FRAME(3, 3, 0, 15),
AFFINEANIMCMD_FRAME(-3, -3, 0, 15),
@@ -788,59 +903,89 @@ const union AffineAnimCmd gSpriteAffineAnim_858995C[] =
AFFINEANIMCMD_END
};
-const union AffineAnimCmd *const gSpriteAffineAnimTable_8589984[] =
+const union AffineAnimCmd *const sAffineAnims_ContestantsTurnBlinkEffect[] =
{
- gSpriteAffineAnim_858994C,
- gSpriteAffineAnim_858995C
+ sAffineAnim_ContestantsTurnBlinkEffect_0,
+ sAffineAnim_ContestantsTurnBlinkEffect_1
};
-const struct SpriteTemplate gSpriteTemplate_858998C[] =
+const struct SpriteTemplate sSpriteTemplates_ContestantsTurnBlinkEffect[CONTESTANT_COUNT] =
{
{
- .tileTag = 0x80E8,
- .paletteTag = 0x80E8,
- .oam = &gOamData_8589944,
+ .tileTag = TAG_BLINK_EFFECT_CONTESTANT0,
+ .paletteTag = TAG_BLINK_EFFECT_CONTESTANT0,
+ .oam = &sOam_ContestantsTurnBlinkEffect,
.anims = gDummySpriteAnimTable,
.images = NULL,
- .affineAnims = gSpriteAffineAnimTable_8589984,
+ .affineAnims = sAffineAnims_ContestantsTurnBlinkEffect,
.callback = SpriteCallbackDummy
},
{
- .tileTag = 0x80E9,
- .paletteTag = 0x80E9,
- .oam = &gOamData_8589944,
+ .tileTag = TAG_BLINK_EFFECT_CONTESTANT1,
+ .paletteTag = TAG_BLINK_EFFECT_CONTESTANT1,
+ .oam = &sOam_ContestantsTurnBlinkEffect,
.anims = gDummySpriteAnimTable,
.images = NULL,
- .affineAnims = gSpriteAffineAnimTable_8589984,
+ .affineAnims = sAffineAnims_ContestantsTurnBlinkEffect,
.callback = SpriteCallbackDummy
},
{
- .tileTag = 0x80EA,
- .paletteTag = 0x80EA,
- .oam = &gOamData_8589944,
+ .tileTag = TAG_BLINK_EFFECT_CONTESTANT2,
+ .paletteTag = TAG_BLINK_EFFECT_CONTESTANT2,
+ .oam = &sOam_ContestantsTurnBlinkEffect,
.anims = gDummySpriteAnimTable,
.images = NULL,
- .affineAnims = gSpriteAffineAnimTable_8589984,
+ .affineAnims = sAffineAnims_ContestantsTurnBlinkEffect,
.callback = SpriteCallbackDummy
},
{
- .tileTag = 0x80EB,
- .paletteTag = 0x80EB,
- .oam = &gOamData_8589944,
+ .tileTag = TAG_BLINK_EFFECT_CONTESTANT3,
+ .paletteTag = TAG_BLINK_EFFECT_CONTESTANT3,
+ .oam = &sOam_ContestantsTurnBlinkEffect,
.anims = gDummySpriteAnimTable,
.images = NULL,
- .affineAnims = gSpriteAffineAnimTable_8589984,
+ .affineAnims = sAffineAnims_ContestantsTurnBlinkEffect,
.callback = SpriteCallbackDummy
}
};
-const s8 gContestExcitementTable[][5] =
+static const s8 gContestExcitementTable[CONTEST_CATEGORIES_COUNT][CONTEST_CATEGORIES_COUNT] =
{
- { 1, 0, -1, -1, 0},
- { 0, 1, 0, -1, -1},
- {-1, 0, 1, 0, -1},
- {-1, -1, 0, 1, 0},
- { 0, -1, -1, 0, 1}
+ [CONTEST_CATEGORY_COOL] = {
+ [CONTEST_CATEGORY_COOL] = +1,
+ [CONTEST_CATEGORY_BEAUTY] = 0,
+ [CONTEST_CATEGORY_CUTE] = -1,
+ [CONTEST_CATEGORY_SMART] = -1,
+ [CONTEST_CATEGORY_TOUGH] = 0
+ },
+ [CONTEST_CATEGORY_BEAUTY] = {
+ [CONTEST_CATEGORY_COOL] = 0,
+ [CONTEST_CATEGORY_BEAUTY] = +1,
+ [CONTEST_CATEGORY_CUTE] = 0,
+ [CONTEST_CATEGORY_SMART] = -1,
+ [CONTEST_CATEGORY_TOUGH] = -1
+ },
+ [CONTEST_CATEGORY_CUTE] = {
+ [CONTEST_CATEGORY_COOL] = -1,
+ [CONTEST_CATEGORY_BEAUTY] = 0,
+ [CONTEST_CATEGORY_CUTE] = +1,
+ [CONTEST_CATEGORY_SMART] = 0,
+ [CONTEST_CATEGORY_TOUGH] = -1
+ },
+ [CONTEST_CATEGORY_SMART] = {
+ [CONTEST_CATEGORY_COOL] = -1,
+ [CONTEST_CATEGORY_BEAUTY] = -1,
+ [CONTEST_CATEGORY_CUTE] = 0,
+ [CONTEST_CATEGORY_SMART] = +1,
+ [CONTEST_CATEGORY_TOUGH] = 0
+ },
+ [CONTEST_CATEGORY_TOUGH] = {
+ [CONTEST_CATEGORY_COOL] = 0,
+ [CONTEST_CATEGORY_BEAUTY] = -1,
+ [CONTEST_CATEGORY_CUTE] = -1,
+ [CONTEST_CATEGORY_SMART] = 0,
+ [CONTEST_CATEGORY_TOUGH] = +1
+ }
};
static void TaskDummy1(u8 taskId)
@@ -854,8 +999,6 @@ void ResetLinkContestBoolean(void)
static void SetupContestGpuRegs(void)
{
- u16 savedIme;
-
SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_OBJ_1D_MAP);
SetGpuReg(REG_OFFSET_BLDCNT, 0);
SetGpuReg(REG_OFFSET_BLDALPHA, 0);
@@ -887,12 +1030,12 @@ void LoadContestBgAfterMoveAnim(void)
CopyToBgTilemapBuffer(3, gOldContestGfx, 0, 0);
CopyBgTilemapBufferToVram(3);
LoadCompressedPalette(gOldContestPalette, 0, 0x200);
- sub_80D782C();
+ LoadContestPalettes();
for (i = 0; i < CONTESTANT_COUNT; i++)
{
- u32 contestantWindowId = MOVE_WINDOWS_START + i;
+ u32 contestantWindowId = 5 + i;
- LoadPalette(eUnknownHeap1A004.cachedWindowPalettes[contestantWindowId], 16 * (MOVE_WINDOWS_START + gContestantTurnOrder[i]), sizeof((eUnknownHeap1A004.cachedWindowPalettes[contestantWindowId])));
+ LoadPalette(eUnknownHeap1A004.cachedWindowPalettes[contestantWindowId], 16 * (5 + gContestantTurnOrder[i]), sizeof((eUnknownHeap1A004.cachedWindowPalettes[contestantWindowId])));
}
}
@@ -923,11 +1066,11 @@ static void InitContestWindows(void)
}
}
-static void sub_80D782C(void)
+static void LoadContestPalettes(void)
{
s32 i;
- LoadPalette(gUnknown_08587C30, 0xf0, 0x20);
+ LoadPalette(sText_Pal, 0xf0, 0x20);
FillPalette(RGB_BLACK, 0, 2);
for (i = 10; i < 14; i++)
LoadPalette(gPlttBufferUnfaded + 241, 240 + i, 2);
@@ -941,7 +1084,7 @@ static void InitContestResources(void)
eContest = (struct Contest){};
for (i = 0; i < CONTESTANT_COUNT; i++)
{
- eContest.unused2[i] = 0xFF;
+ eContest.unk[i] = 0xFF;
}
for (i = 0; i < CONTESTANT_COUNT; i++)
{
@@ -953,10 +1096,10 @@ static void InitContestResources(void)
eContestantStatus[i].effectStringId = CONTEST_STRING_NONE;
eContestantStatus[i].effectStringId2 = CONTEST_STRING_NONE;
}
- eContestResources8 = (struct UnknownContestStruct7){};
+ eContestAppealResults = (struct ContestAppealMoveResults){};
eContestAI = (struct ContestAIInfo){};
- *gContestResources->field_10 = (struct UnknownContestStruct5){};
- memset(gContestResources->field_14, 0, CONTESTANT_COUNT * sizeof(struct UnknownContestStruct4));
+ *gContestResources->excitement = (struct ContestExcitement){};
+ memset(eContestGfxState, 0, CONTESTANT_COUNT * sizeof(struct ContestGraphicsState));
if (!(gLinkContestFlags & LINK_CONTEST_FLAG_IS_LINK))
SortContestants(FALSE);
@@ -969,7 +1112,7 @@ static void InitContestResources(void)
// Calling this here while all the nextTurnOrder values are 0xFF will actually
// just reverse the turn order.
ApplyNextTurnOrder();
- memset(gContestResources->field_1c, 0, sizeof(*gContestResources->field_1c) * CONTESTANT_COUNT);
+ memset(gContestResources->tv, 0, sizeof(*gContestResources->tv) * CONTESTANT_COUNT);
}
static void AllocContestResources(void)
@@ -977,19 +1120,19 @@ static void AllocContestResources(void)
gContestResources = AllocZeroed(sizeof(struct ContestResources));
gContestResources->contest = AllocZeroed(sizeof(struct Contest));
gContestResources->status = AllocZeroed(sizeof(struct ContestantStatus) * CONTESTANT_COUNT);
- gContestResources->field_8 = AllocZeroed(sizeof(struct UnknownContestStruct7));
+ gContestResources->appealResults = AllocZeroed(sizeof(struct ContestAppealMoveResults));
gContestResources->aiData = AllocZeroed(sizeof(struct ContestAIInfo));
- gContestResources->field_10 = AllocZeroed(sizeof(struct UnknownContestStruct5) * CONTESTANT_COUNT);
- gContestResources->field_14 = AllocZeroed(sizeof(struct UnknownContestStruct4) * CONTESTANT_COUNT);
- gContestResources->field_18 = AllocZeroed(sizeof(struct ContestStruct_field_18));
- gContestResources->field_1c = AllocZeroed(sizeof(struct ContestResourcesField1C) * CONTESTANT_COUNT);
- gContestResources->field_20 = AllocZeroed(sizeof(struct ContestResourcesField20));
+ gContestResources->excitement = AllocZeroed(sizeof(struct ContestExcitement) * CONTESTANT_COUNT);
+ gContestResources->gfxState = AllocZeroed(sizeof(struct ContestGraphicsState) * CONTESTANT_COUNT);
+ gContestResources->moveAnim = AllocZeroed(sizeof(struct ContestMoveAnimData));
+ gContestResources->tv = AllocZeroed(sizeof(struct ContestTV) * CONTESTANT_COUNT);
+ gContestResources->unused = AllocZeroed(sizeof(struct ContestUnused));
gContestResources->contestBgTilemaps[0] = AllocZeroed(0x1000);
gContestResources->contestBgTilemaps[1] = AllocZeroed(0x1000);
gContestResources->contestBgTilemaps[2] = AllocZeroed(0x1000);
gContestResources->contestBgTilemaps[3] = AllocZeroed(0x1000);
- gContestResources->field_34 = AllocZeroed(0x800);
- gContestResources->field_38 = AllocZeroed(0x800);
+ gContestResources->boxBlinkTiles1 = AllocZeroed(0x800);
+ gContestResources->boxBlinkTiles2 = AllocZeroed(0x800);
gContestResources->field_3c = AllocZeroed(0x2000);
gUnknown_0202305C = gContestResources->field_3c;
gUnknown_02023060 = gContestResources->contestBgTilemaps[1];
@@ -999,19 +1142,19 @@ static void FreeContestResources(void)
{
FREE_AND_SET_NULL(gContestResources->contest);
FREE_AND_SET_NULL(gContestResources->status);
- FREE_AND_SET_NULL(gContestResources->field_8);
+ FREE_AND_SET_NULL(gContestResources->appealResults);
FREE_AND_SET_NULL(gContestResources->aiData);
- FREE_AND_SET_NULL(gContestResources->field_10);
- FREE_AND_SET_NULL(gContestResources->field_14);
- FREE_AND_SET_NULL(gContestResources->field_18);
- FREE_AND_SET_NULL(gContestResources->field_1c);
- FREE_AND_SET_NULL(gContestResources->field_20);
+ FREE_AND_SET_NULL(gContestResources->excitement);
+ FREE_AND_SET_NULL(gContestResources->gfxState);
+ FREE_AND_SET_NULL(gContestResources->moveAnim);
+ FREE_AND_SET_NULL(gContestResources->tv);
+ FREE_AND_SET_NULL(gContestResources->unused);
FREE_AND_SET_NULL(gContestResources->contestBgTilemaps[0]);
FREE_AND_SET_NULL(gContestResources->contestBgTilemaps[1]);
FREE_AND_SET_NULL(gContestResources->contestBgTilemaps[2]);
FREE_AND_SET_NULL(gContestResources->contestBgTilemaps[3]);
- FREE_AND_SET_NULL(gContestResources->field_34);
- FREE_AND_SET_NULL(gContestResources->field_38);
+ FREE_AND_SET_NULL(gContestResources->boxBlinkTiles1);
+ FREE_AND_SET_NULL(gContestResources->boxBlinkTiles2);
FREE_AND_SET_NULL(gContestResources->field_3c);
FREE_AND_SET_NULL(gContestResources);
gUnknown_0202305C = NULL;
@@ -1055,13 +1198,13 @@ void CB2_StartContest(void)
}
break;
case 3:
- sub_80DE224();
+ SetBgForCurtainDrop();
gBattle_BG1_X = 0;
gBattle_BG1_Y = 0;
BeginFastPaletteFade(2);
gPaletteFade.bufferTransferDisabled = FALSE;
- SetVBlankCallback(vblank_cb_battle);
- eContest.mainTaskId = CreateTask(sub_80D7C7C, 10);
+ SetVBlankCallback(VBlankCB_Contest);
+ eContest.mainTaskId = CreateTask(Task_StartContestWaitFade, 10);
SetMainCallback2(CB2_ContestMain);
if (gLinkContestFlags & LINK_CONTEST_FLAG_IS_WIRELESS)
{
@@ -1072,16 +1215,18 @@ void CB2_StartContest(void)
}
}
-static void sub_80D7C7C(u8 taskId)
+static void Task_StartContestWaitFade(u8 taskId)
{
if (!gPaletteFade.active)
{
gTasks[taskId].data[0] = 0;
- gTasks[taskId].func = sub_80D7CB4;
+ gTasks[taskId].func = Task_TryStartLinkContest;
}
}
-static void sub_80D7CB4(u8 taskId)
+// If this is a link contest try to start appeals communication
+// Otherwise skip ahead
+static void Task_TryStartLinkContest(u8 taskId)
{
if (gLinkContestFlags & LINK_CONTEST_FLAG_IS_LINK)
{
@@ -1096,7 +1241,7 @@ static void sub_80D7CB4(u8 taskId)
case 1:
if (IsLinkTaskFinished())
{
- sub_800ADF8();
+ SetLinkStandbyCallback();
gTasks[taskId].data[0]++;
}
return;
@@ -1113,36 +1258,37 @@ static void sub_80D7CB4(u8 taskId)
gPaletteFade.bufferTransferDisabled = FALSE;
if (!(gLinkContestFlags & LINK_CONTEST_FLAG_IS_WIRELESS))
ContestPrintLinkStandby();
- CreateTask(sub_80D7DAC, 0);
+ CreateTask(Task_CommunicateMonIdxs, 0);
gTasks[taskId].data[0] = 0;
gTasks[taskId].func = TaskDummy1;
}
}
else
{
- gTasks[taskId].func = sub_80D80C8;
+ gTasks[taskId].func = Task_WaitToRaiseCurtainAtStart;
}
}
-static void sub_80D7DAC(u8 taskId)
+static void Task_CommunicateMonIdxs(u8 taskId)
{
- SetTaskFuncWithFollowupFunc(taskId, sub_80FC998, sub_80D7DC8);
+ SetTaskFuncWithFollowupFunc(taskId, Task_LinkContest_CommunicateMonIdxs, Task_EndCommunicateMonIdxs);
}
-static void sub_80D7DC8(u8 taskId)
+static void Task_EndCommunicateMonIdxs(u8 taskId)
{
gTasks[taskId].data[0] = 1;
- gTasks[taskId].func = sub_80D7DE8;
+ gTasks[taskId].func = Task_ReadyStartLinkContest;
}
-static void sub_80D7DE8(u8 taskId)
+static void Task_ReadyStartLinkContest(u8 taskId)
{
+ // data[0] always 1 here
gTasks[taskId].data[0]--;
if (gTasks[taskId].data[0] <= 0)
{
GetMultiplayerId(); // unused return value
DestroyTask(taskId);
- gTasks[eContest.mainTaskId].func = sub_80D80C8;
+ gTasks[eContest.mainTaskId].func = Task_WaitToRaiseCurtainAtStart;
gRngValue = gContestRngValue;
}
}
@@ -1165,7 +1311,7 @@ static bool8 SetupContestGraphics(u8 *stateVar)
break;
case 2:
LZDecompressVram(gContestAudienceGfx, (void *)(BG_SCREEN_ADDR(4)));
- DmaCopyLarge32(3, (void *)(BG_SCREEN_ADDR(4)), eUnzippedContestAudienceGfx, 0x2000, 0x1000);
+ DmaCopyLarge32(3, (void *)(BG_SCREEN_ADDR(4)), eUnzippedContestAudience_Gfx, 0x2000, 0x1000);
break;
case 3:
CopyToBgTilemapBuffer(3, gOldContestGfx, 0, 0);
@@ -1180,31 +1326,33 @@ static bool8 SetupContestGraphics(u8 *stateVar)
case 5:
LoadCompressedPalette(gOldContestPalette, 0, 0x200);
CpuCopy32(gPlttBufferUnfaded + 128, tempPalette1, 16 * sizeof(u16));
- CpuCopy32(gPlttBufferUnfaded + (MOVE_WINDOWS_START + gContestPlayerMonIndex) * 16, tempPalette2, 16 * sizeof(u16));
+ CpuCopy32(gPlttBufferUnfaded + (5 + gContestPlayerMonIndex) * 16, tempPalette2, 16 * sizeof(u16));
CpuCopy32(tempPalette2, gPlttBufferUnfaded + 128, 16 * sizeof(u16));
- CpuCopy32(tempPalette1, gPlttBufferUnfaded + (MOVE_WINDOWS_START + gContestPlayerMonIndex) * 16, 16 * sizeof(u16));
+ CpuCopy32(tempPalette1, gPlttBufferUnfaded + (5 + gContestPlayerMonIndex) * 16, 16 * sizeof(u16));
DmaCopy32Defvars(3, gPlttBufferUnfaded, eUnknownHeap1A004.cachedWindowPalettes, sizeof(eUnknownHeap1A004.cachedWindowPalettes));
- sub_80D782C();
+ LoadContestPalettes();
break;
case 6:
DrawContestantWindows();
FillContestantWindowBgs();
SwapMoveDescAndContestTilemaps();
- eContest.unk19216 = sub_80DB120();
- sub_80DC2BC();
- sub_80DC4F0();
+ eContest.judgeSpeechBubbleSpriteId = CreateJudgeSpeechBubbleSprite();
+ CreateSliderHeartSprites();
+ CreateNextTurnSprites();
CreateApplauseMeterSprite();
- sub_80DC5E8();
- sub_80DC7EC();
+ CreateJudgeAttentionEyeTask();
+ CreateUnusedBlendTask();
gBattlerPositions[0] = B_POSITION_PLAYER_LEFT;
gBattlerPositions[1] = B_POSITION_OPPONENT_LEFT;
gBattlerPositions[2] = B_POSITION_OPPONENT_RIGHT;
gBattlerPositions[3] = B_POSITION_PLAYER_RIGHT;
gBattleTypeFlags = 0;
- gBattlerAttacker = 2;
- gBattlerTarget = 3;
- gBattlerSpriteIds[gBattlerAttacker] = sub_80DB0C4();
- sub_80DEA20();
+ gBattlerAttacker = B_POSITION_PLAYER_RIGHT;
+ gBattlerTarget = B_POSITION_OPPONENT_RIGHT;
+ // Unclear why judge sprite is assigned here
+ // Overwritten in APPEALSTATE_SLIDE_MON_IN with the attacking contest mon
+ gBattlerSpriteIds[gBattlerAttacker] = CreateJudgeSprite();
+ CreateInvisibleBattleTargetSprite();
CopyBgTilemapBufferToVram(3);
CopyBgTilemapBufferToVram(2);
CopyBgTilemapBufferToVram(1);
@@ -1222,18 +1370,18 @@ static bool8 SetupContestGraphics(u8 *stateVar)
return FALSE;
}
-static void sub_80D80C8(u8 taskId)
+static void Task_WaitToRaiseCurtainAtStart(u8 taskId)
{
gPaletteFade.bufferTransferDisabled = FALSE;
if (!gPaletteFade.active)
{
gTasks[taskId].data[0] = 0;
gTasks[taskId].data[1] = 0;
- gTasks[taskId].func = sub_80D8108;
+ gTasks[taskId].func = Task_RaiseCurtainAtStart;
}
}
-static void sub_80D8108(u8 taskId)
+static void Task_RaiseCurtainAtStart(u8 taskId)
{
switch (gTasks[taskId].data[0])
{
@@ -1241,7 +1389,7 @@ static void sub_80D8108(u8 taskId)
if (gTasks[taskId].data[1]++ <= 60)
break;
gTasks[taskId].data[1] = 0;
- PlaySE12WithPanning(SE_C_MAKU_U, 0);
+ PlaySE12WithPanning(SE_CONTEST_CURTAIN_RISE, 0);
gTasks[taskId].data[0]++;
break;
case 1:
@@ -1251,7 +1399,7 @@ static void sub_80D8108(u8 taskId)
gTasks[taskId].data[0]++;
break;
case 2:
- sub_80DE350();
+ UpdateContestantBoxOrder();
gTasks[taskId].data[0]++;
break;
case 3:
@@ -1262,7 +1410,7 @@ static void sub_80D8108(u8 taskId)
((struct BgCnt *)&bg2Cnt)->priority = 0;
SetGpuReg(REG_OFFSET_BG0CNT, bg0Cnt);
SetGpuReg(REG_OFFSET_BG2CNT, bg2Cnt);
- StartMoveApplauseMeterOnscreen();
+ SlideApplauseMeterIn();
gTasks[taskId].data[0]++;
break;
}
@@ -1272,7 +1420,7 @@ static void sub_80D8108(u8 taskId)
break;
gTasks[taskId].data[0] = 0;
gTasks[taskId].data[1] = 0;
- gTasks[taskId].func = sub_80D833C;
+ gTasks[taskId].func = Task_DisplayAppealNumberText;
break;
}
}
@@ -1294,7 +1442,7 @@ static void CB2_ContestMain(void)
sContestBgCopyFlags = 0;
}
-static void vblank_cb_battle(void)
+static void VBlankCB_Contest(void)
{
SetGpuReg(REG_OFFSET_BG0HOFS, gBattle_BG0_X);
SetGpuReg(REG_OFFSET_BG0VOFS, gBattle_BG0_Y);
@@ -1314,7 +1462,7 @@ static void vblank_cb_battle(void)
ScanlineEffect_InitHBlankDmaTransfer();
}
-static void sub_80D833C(u8 taskId)
+static void Task_DisplayAppealNumberText(u8 taskId)
{
if (gTasks[taskId].data[0] == 0)
{
@@ -1322,7 +1470,7 @@ static void sub_80D833C(u8 taskId)
gBattle_BG2_Y = 0;
ContestDebugDoPrint();
DmaCopy32Defvars(3, gPlttBufferUnfaded, eUnknownHeap1A004.unk18204, PLTT_BUFFER_SIZE * 2);
- ConvertIntToDecimalStringN(gStringVar1, eContest.turnNumber + 1, STR_CONV_MODE_LEFT_ALIGN, 1);
+ ConvertIntToDecimalStringN(gStringVar1, eContest.appealNumber + 1, STR_CONV_MODE_LEFT_ALIGN, 1);
if (!Contest_IsMonsTurnDisabled(gContestPlayerMonIndex))
StringCopy(gDisplayedStringBattle, gText_AppealNumWhichMoveWillBePlayed);
else
@@ -1337,67 +1485,70 @@ static void sub_80D833C(u8 taskId)
if (!Contest_RunTextPrinters())
{
gTasks[taskId].data[0] = 0;
- gTasks[taskId].func = sub_80D8424;
+ gTasks[taskId].func = Task_TryShowMoveSelectScreen;
}
}
}
-static void sub_80D8424(u8 taskId)
+static void Task_TryShowMoveSelectScreen(u8 taskId)
{
+ // Wait for button press to show move select screen
if ((gMain.newKeys & A_BUTTON) || (gMain.newKeys == B_BUTTON))
{
PlaySE(SE_SELECT);
if (!Contest_IsMonsTurnDisabled(gContestPlayerMonIndex))
{
- sub_80DC490(TRUE);
- gTasks[taskId].func = sub_80D8490;
+ SetBottomSliderHeartsInvisibility(TRUE);
+ gTasks[taskId].func = Task_ShowMoveSelectScreen;
}
else
{
- gTasks[taskId].func = sub_80D8894;
+ // Skip move selection (selected move will be MOVE_NONE)
+ gTasks[taskId].func = Task_SelectedMove;
}
}
}
-static void sub_80D8490(u8 taskId)
+static void Task_ShowMoveSelectScreen(u8 taskId)
{
u8 i;
- u8 sp8[32];
+ u8 moveName[32];
- gBattle_BG0_Y = 0xA0;
- gBattle_BG2_Y = 0xA0;
+ gBattle_BG0_Y = 160;
+ gBattle_BG2_Y = 160;
for (i = 0; i < MAX_MON_MOVES; i++)
{
u16 move = gContestMons[gContestPlayerMonIndex].moves[i];
- u8 *r5 = sp8;
+ u8 *moveNameBuffer = moveName;
if (eContestantStatus[gContestPlayerMonIndex].prevMove != MOVE_NONE
- && sub_80DE1E8(gContestPlayerMonIndex)
- && AreMovesContestCombo(eContestantStatus[gContestPlayerMonIndex].prevMove, move) != 0
+ && IsContestantAllowedToCombo(gContestPlayerMonIndex)
+ && AreMovesContestCombo(eContestantStatus[gContestPlayerMonIndex].prevMove, move)
&& eContestantStatus[gContestPlayerMonIndex].hasJudgesAttention)
{
- r5 = StringCopy(sp8, gText_ColorLightShadowDarkGrey);
+ // Highlight the text because it's a combo move
+ moveNameBuffer = StringCopy(moveName, gText_ColorLightShadowDarkGrey);
}
- else if (move != 0
+ else if (move != MOVE_NONE
&& eContestantStatus[gContestPlayerMonIndex].prevMove == move
&& gContestMoves[move].effect != CONTEST_EFFECT_REPETITION_NOT_BORING)
{
- // Gray the text because it is a repeated move
- r5 = StringCopy(sp8, gText_ColorBlue);
+ // Gray the text because it's a repeated move
+ moveNameBuffer = StringCopy(moveName, gText_ColorBlue);
}
- r5 = StringCopy(r5, gMoveNames[move]);
+ moveNameBuffer = StringCopy(moveNameBuffer, gMoveNames[move]);
FillWindowPixelBuffer(i + MOVE_WINDOWS_START, PIXEL_FILL(0));
- Contest_PrintTextToBg0WindowAt(i + MOVE_WINDOWS_START, sp8, 5, 1, 7);
+ Contest_PrintTextToBg0WindowAt(i + MOVE_WINDOWS_START, moveName, 5, 1, 7);
}
- sub_80D880C(eContest.playerMoveChoice);
+ DrawMoveSelectArrow(eContest.playerMoveChoice);
PrintContestMoveDescription(gContestMons[gContestPlayerMonIndex].moves[eContest.playerMoveChoice]);
- gTasks[taskId].func = sub_80D8610;
+ gTasks[taskId].func = Task_HandleMoveSelectInput;
}
-static void sub_80D8610(u8 taskId)
+static void Task_HandleMoveSelectInput(u8 taskId)
{
u8 numMoves = 0;
s32 i;
@@ -1411,16 +1562,17 @@ static void sub_80D8610(u8 taskId)
if (gMain.newKeys & A_BUTTON)
{
PlaySE(SE_SELECT);
- gTasks[taskId].func = sub_80D8894;
+ gTasks[taskId].func = Task_SelectedMove;
}
else
{
switch (gMain.newAndRepeatedKeys)
{
case B_BUTTON:
+ // Cancel move selection
PlaySE(SE_SELECT);
- sub_80DC490(FALSE);
- ConvertIntToDecimalStringN(gStringVar1, eContest.turnNumber + 1, STR_CONV_MODE_LEFT_ALIGN, 1);
+ SetBottomSliderHeartsInvisibility(FALSE);
+ ConvertIntToDecimalStringN(gStringVar1, eContest.appealNumber + 1, STR_CONV_MODE_LEFT_ALIGN, 1);
if (!Contest_IsMonsTurnDisabled(gContestPlayerMonIndex))
StringCopy(gDisplayedStringBattle, gText_AppealNumWhichMoveWillBePlayed);
else
@@ -1430,29 +1582,29 @@ static void sub_80D8610(u8 taskId)
Contest_StartTextPrinter(gStringVar4, 0);
gBattle_BG0_Y = 0;
gBattle_BG2_Y = 0;
- gTasks[taskId].func = sub_80D8424;
+ gTasks[taskId].func = Task_TryShowMoveSelectScreen;
break;
case DPAD_LEFT:
case DPAD_RIGHT:
break;
case DPAD_UP:
- sub_80D883C(eContest.playerMoveChoice);
+ EraseMoveSelectArrow(eContest.playerMoveChoice);
if (eContest.playerMoveChoice == 0)
eContest.playerMoveChoice = numMoves - 1;
else
eContest.playerMoveChoice--;
- sub_80D880C(eContest.playerMoveChoice);
+ DrawMoveSelectArrow(eContest.playerMoveChoice);
PrintContestMoveDescription(gContestMons[gContestPlayerMonIndex].moves[eContest.playerMoveChoice]);
if (numMoves > 1)
PlaySE(SE_SELECT);
break;
case DPAD_DOWN:
- sub_80D883C(eContest.playerMoveChoice);
+ EraseMoveSelectArrow(eContest.playerMoveChoice);
if (eContest.playerMoveChoice == numMoves - 1)
eContest.playerMoveChoice = 0;
else
eContest.playerMoveChoice++;
- sub_80D880C(eContest.playerMoveChoice);
+ DrawMoveSelectArrow(eContest.playerMoveChoice);
PrintContestMoveDescription(gContestMons[gContestPlayerMonIndex].moves[eContest.playerMoveChoice]);
if (numMoves > 1)
PlaySE(SE_SELECT);
@@ -1461,18 +1613,18 @@ static void sub_80D8610(u8 taskId)
}
}
-static void sub_80D880C(s8 a0)
+static void DrawMoveSelectArrow(s8 moveIndex)
{
- ContestBG_FillBoxWithIncrementingTile(2, 55, 0, 31 + a0 * 2, 2, 2, 17, 1);
+ ContestBG_FillBoxWithIncrementingTile(2, 55, 0, 31 + moveIndex * 2, 2, 2, 17, 1);
}
-static void sub_80D883C(s8 a0)
+static void EraseMoveSelectArrow(s8 moveIndex)
{
- ContestBG_FillBoxWithIncrementingTile(2, 11, 0, 31 + a0 * 2, 2, 1, 17, 1);
- ContestBG_FillBoxWithIncrementingTile(2, 11, 0, 32 + a0 * 2, 2, 1, 17, 1);
+ ContestBG_FillBoxWithIncrementingTile(2, 11, 0, 31 + moveIndex * 2, 2, 1, 17, 1);
+ ContestBG_FillBoxWithIncrementingTile(2, 11, 0, 32 + moveIndex * 2, 2, 1, 17, 1);
}
-static void sub_80D8894(u8 taskId)
+static void Task_SelectedMove(u8 taskId)
{
if (gLinkContestFlags & LINK_CONTEST_FLAG_IS_LINK)
{
@@ -1480,35 +1632,35 @@ static void sub_80D8894(u8 taskId)
u8 taskId2;
eContestantStatus[gContestPlayerMonIndex].currMove = move;
- taskId2 = CreateTask(sub_80FC9F8, 0);
- SetTaskFuncWithFollowupFunc(taskId2, sub_80FC9F8, sub_80D892C);
+ taskId2 = CreateTask(Task_LinkContest_CommunicateMoveSelections, 0);
+ SetTaskFuncWithFollowupFunc(taskId2, Task_LinkContest_CommunicateMoveSelections, Task_EndCommunicateMoveSelections);
gTasks[taskId].func = TaskDummy1;
ContestPrintLinkStandby();
- sub_80DC490(FALSE);
+ SetBottomSliderHeartsInvisibility(FALSE);
}
else
{
GetAllChosenMoves();
- gTasks[taskId].func = sub_80D895C;
+ gTasks[taskId].func = Task_HideMoveSelectScreen;
}
}
-static void sub_80D892C(u8 taskId)
+static void Task_EndCommunicateMoveSelections(u8 taskId)
{
DestroyTask(taskId);
- gTasks[eContest.mainTaskId].func = sub_80D895C;
+ gTasks[eContest.mainTaskId].func = Task_HideMoveSelectScreen;
}
-static void sub_80D895C(u8 taskId)
+static void Task_HideMoveSelectScreen(u8 taskId)
{
s32 i;
ContestClearGeneralTextWindow();
gBattle_BG0_Y = 0;
gBattle_BG2_Y = 0;
- sub_80DC490(FALSE);
+ SetBottomSliderHeartsInvisibility(FALSE);
- for (i = 0; i < CONTESTANT_COUNT; i++)
+ for (i = 0; i < MAX_MON_MOVES; i++)
{
FillWindowPixelBuffer(MOVE_WINDOWS_START + i, PIXEL_FILL(0));
PutWindowTilemap(MOVE_WINDOWS_START + i);
@@ -1520,36 +1672,40 @@ static void sub_80D895C(u8 taskId)
LoadPalette(eUnknownHeap1A004.unk18204, 0, PLTT_BUFFER_SIZE * 2);
gTasks[taskId].data[0] = 0;
gTasks[taskId].data[1] = 0;
- gTasks[taskId].func = sub_80D8A04;
+ gTasks[taskId].func = Task_HideApplauseMeterForAppealStart;
}
-static void sub_80D8A04(u8 taskId)
+static void Task_HideApplauseMeterForAppealStart(u8 taskId)
{
if (++gTasks[taskId].data[0] > 2)
{
gTasks[taskId].data[0] = 0;
if (++gTasks[taskId].data[1] == 2)
{
- TryMoveApplauseMeterOffscreen();
- sub_80DE69C(1);
- gTasks[taskId].func = sub_80D8A50;
+ SlideApplauseMeterOut();
+ AnimateSliderHearts(SLIDER_HEART_ANIM_DISAPPEAR);
+ gTasks[taskId].func = Task_WaitHideApplauseMeterForAppealStart;
}
}
}
-static void sub_80D8A50(u8 taskId)
+static void Task_WaitHideApplauseMeterForAppealStart(u8 taskId)
{
- if (!eContest.applauseMeterIsMoving && !eContest.unk1920B_1)
- gTasks[taskId].func = sub_80D8A88;
+ if (!eContest.applauseMeterIsMoving && !eContest.sliderHeartsAnimating)
+ gTasks[taskId].func = Task_AppealSetup;
}
-static void sub_80D8A88(u8 taskId)
+#define tState data[0]
+#define tMonSpriteId data[2]
+#define tCounter data[10]
+
+static void Task_AppealSetup(u8 taskId)
{
if (++gTasks[taskId].data[0] > 19)
{
- eContest.unk19214 = 0;
- eContest.unk1921C = gRngValue;
- if ((gLinkContestFlags & LINK_CONTEST_FLAG_IS_LINK) && sub_80DA8A4())
+ eContest.turnNumber = 0;
+ eContest.unusedRng = gRngValue;
+ if ((gLinkContestFlags & LINK_CONTEST_FLAG_IS_LINK) && IsPlayerLinkLeader())
{
s32 i;
@@ -1558,498 +1714,511 @@ static void sub_80D8A88(u8 taskId)
eContestantStatus[gNumLinkContestPlayers + i].currMove = GetChosenMove(gNumLinkContestPlayers + i);
}
}
- gTasks[taskId].data[0] = 0;
- gTasks[taskId].func = sub_80D8B38;
+ gTasks[taskId].tState = APPEALSTATE_START_TURN;
+ gTasks[taskId].func = Task_DoAppeals;
}
}
-static void sub_80D8B38(u8 taskId)
+static void Task_DoAppeals(u8 taskId)
{
u8 spriteId;
s32 i;
- u8 r6 = eContest.unk19215;
+ u8 contestant = eContest.currentContestant;
s8 r3;
- switch (gTasks[taskId].data[0])
+ switch (gTasks[taskId].tState)
{
- case 0:
+ case APPEALSTATE_START_TURN:
ContestDebugDoPrint();
- for (i = 0; eContest.unk19214 != gContestResources->field_8->turnOrder[i]; i++)
+ for (i = 0; eContest.turnNumber != eContestAppealResults.turnOrder[i]; i++)
;
- eContest.unk19215 = i;
- r6 = eContest.unk19215;
+ eContest.currentContestant = i;
+ contestant = eContest.currentContestant;
if (gLinkContestFlags & LINK_CONTEST_FLAG_IS_LINK)
{
u8 taskId2;
- eContest.unk1920B_2 = 1;
- if (sub_80DA8A4())
- sub_80DD080(eContest.unk19215);
- taskId2 = CreateTask(sub_80FCC88, 0);
- SetTaskFuncWithFollowupFunc(taskId2, sub_80FCC88, sub_80DA110);
+ eContest.waitForLink = TRUE;
+ if (IsPlayerLinkLeader())
+ CalculateAppealMoveImpact(eContest.currentContestant);
+ taskId2 = CreateTask(Task_LinkContest_CommunicateAppealsState, 0);
+ SetTaskFuncWithFollowupFunc(taskId2, Task_LinkContest_CommunicateAppealsState, Task_EndWaitForLink);
ContestPrintLinkStandby();
- gTasks[taskId].data[0] = 1;
+ gTasks[taskId].tState = APPEALSTATE_WAIT_LINK;
}
else
{
- sub_80DD080(eContest.unk19215);
- gTasks[taskId].data[0] = 2;
+ CalculateAppealMoveImpact(eContest.currentContestant);
+ gTasks[taskId].tState = APPEALSTATE_CHECK_SKIP_TURN;
}
return;
- case 1:
- if (!eContest.unk1920B_2)
- gTasks[taskId].data[0] = 2;
+ case APPEALSTATE_WAIT_LINK:
+ if (!eContest.waitForLink)
+ gTasks[taskId].tState = APPEALSTATE_CHECK_SKIP_TURN;
return;
- case 2:
- sub_80DF080(r6);
+ case APPEALSTATE_CHECK_SKIP_TURN:
+ SetContestLiveUpdateFlags(contestant);
ContestDebugPrintBitStrings();
- if (eContestantStatus[r6].numTurnsSkipped != 0
- || eContestantStatus[r6].noMoreTurns)
+ if (eContestantStatus[contestant].numTurnsSkipped != 0
+ || eContestantStatus[contestant].noMoreTurns)
{
- gTasks[taskId].data[0] = 31;
+ gTasks[taskId].tState = APPEALSTATE_PRINT_SKIP_TURN_MSG;
}
else
{
ContestClearGeneralTextWindow();
- gTasks[taskId].data[10] = 0;
- gTasks[taskId].data[0] = 3;
+ gTasks[taskId].tCounter = 0;
+ gTasks[taskId].tState = APPEALSTATE_SLIDE_MON_IN;
}
return;
- case 3:
- for (i = 0; i < 4; i++)
+ case APPEALSTATE_SLIDE_MON_IN:
+ for (i = 0; i < CONTESTANT_COUNT; i++)
gBattleMonForms[i] = 0;
- memset(gContestResources->field_18, 0, sizeof(*gContestResources->field_18));
- sub_80DE9DC(eContest.unk19215);
- spriteId = sub_80DB174(
- gContestMons[eContest.unk19215].species,
- gContestMons[eContest.unk19215].otId,
- gContestMons[eContest.unk19215].personality,
- eContest.unk19215);
+ memset(gContestResources->moveAnim, 0, sizeof(*gContestResources->moveAnim));
+ SetMoveAnimAttackerData(eContest.currentContestant);
+ spriteId = CreateContestantSprite(
+ gContestMons[eContest.currentContestant].species,
+ gContestMons[eContest.currentContestant].otId,
+ gContestMons[eContest.currentContestant].personality,
+ eContest.currentContestant);
gSprites[spriteId].pos2.x = 120;
- gSprites[spriteId].callback = sub_80DA134;
- gTasks[taskId].data[2] = spriteId;
+ gSprites[spriteId].callback = SpriteCB_MonSlideIn;
+ gTasks[taskId].tMonSpriteId = spriteId;
gBattlerSpriteIds[gBattlerAttacker] = spriteId;
- sub_80DCBE8(sub_80DC9EC(eContest.unk19215), FALSE);
- gTasks[taskId].data[0] = 4;
+ BlinkContestantBox(CreateContestantBoxBlinkSprites(eContest.currentContestant), FALSE);
+ gTasks[taskId].tState = APPEALSTATE_WAIT_SLIDE_MON;
return;
- case 4:
- spriteId = gTasks[taskId].data[2];
+ case APPEALSTATE_WAIT_SLIDE_MON:
+ spriteId = gTasks[taskId].tMonSpriteId;
if (gSprites[spriteId].callback == SpriteCallbackDummy)
{
- if (!gContestResources->field_14[r6].unk2_1)
- gTasks[taskId].data[0] = 5;
+ // Once mon has slid in, also wait for box to finish blinking
+ if (!eContestGfxState[contestant].boxBlinking)
+ gTasks[taskId].tState = APPEALSTATE_PRINT_USED_MOVE_MSG;
}
return;
- case 5:
- if (eContestantStatus[r6].nervous)
+ case APPEALSTATE_PRINT_USED_MOVE_MSG:
+ if (eContestantStatus[contestant].nervous)
{
- gTasks[taskId].data[0] = 33;
+ gTasks[taskId].tState = APPEALSTATE_PRINT_TOO_NERVOUS_MSG;
}
else
{
ContestClearGeneralTextWindow();
- StringCopy(gStringVar1, gContestMons[r6].nickname);
- if (eContestantStatus[r6].currMove < MOVES_COUNT)
- StringCopy(gStringVar2, gMoveNames[eContestantStatus[r6].currMove]);
+ StringCopy(gStringVar1, gContestMons[contestant].nickname);
+ if (eContestantStatus[contestant].currMove < MOVES_COUNT)
+ StringCopy(gStringVar2, gMoveNames[eContestantStatus[contestant].currMove]);
else
- StringCopy(gStringVar2, sInvalidContestMoveNames[eContestantStatus[r6].moveCategory]);
+ StringCopy(gStringVar2, sInvalidContestMoveNames[eContestantStatus[contestant].moveCategory]);
StringExpandPlaceholders(gStringVar4, gText_MonAppealedWithMove);
Contest_StartTextPrinter(gStringVar4, 1);
- gTasks[taskId].data[0] = 6;
+ gTasks[taskId].tState = APPEALSTATE_WAIT_USED_MOVE_MSG;
}
return;
- case 6:
+ case APPEALSTATE_WAIT_USED_MOVE_MSG:
if (!Contest_RunTextPrinters())
{
- eContest.unk1925E = 0;
- gTasks[taskId].data[0] = 7;
+ eContest.moveAnimTurnCount = 0;
+ gTasks[taskId].tState = APPEALSTATE_MOVE_ANIM;
}
return;
- case 7:
+ case APPEALSTATE_MOVE_ANIM:
{
- u16 move = SanitizeMove(eContestantStatus[eContest.unk19215].currMove);
-
- sub_80DE864(eContest.unk19215);
- sub_80DE9DC(eContest.unk19215);
- SelectContestMoveBankTarget(move);
+ u16 move = SanitizeMove(eContestantStatus[eContest.currentContestant].currMove);
+ SetMoveSpecificAnimData(eContest.currentContestant);
+ SetMoveAnimAttackerData(eContest.currentContestant);
+ SetMoveTargetPosition(move);
DoMoveAnim(move);
- gTasks[taskId].data[0] = 8;
+ gTasks[taskId].tState = APPEALSTATE_WAIT_MOVE_ANIM;
}
return;
- case 8:
+ case APPEALSTATE_WAIT_MOVE_ANIM:
gAnimScriptCallback();
if (!gAnimScriptActive)
{
- sub_80DE9B0(r6);
- if (eContest.unk1925E != 0)
+ ClearMoveAnimData(contestant);
+ if (eContest.moveAnimTurnCount != 0)
{
- gTasks[taskId].data[10] = 0;
- gTasks[taskId].data[0] = 9;
+ gTasks[taskId].tCounter = 0;
+ gTasks[taskId].tState = APPEALSTATE_MOVE_ANIM_MULTITURN;
}
else
{
- if (!eContestantStatus[r6].hasJudgesAttention)
- sub_80DC674(r6);
- sub_80DE12C();
- gTasks[taskId].data[0] = 23;
+ if (!eContestantStatus[contestant].hasJudgesAttention)
+ StopFlashJudgeAttentionEye(contestant);
+ DrawUnnervedSymbols();
+ gTasks[taskId].tState = APPEALSTATE_TRY_PRINT_MOVE_RESULT;
}
}
return;
- case 9:
- if (gTasks[taskId].data[10]++ > 30)
+ case APPEALSTATE_MOVE_ANIM_MULTITURN:
+ if (gTasks[taskId].tCounter++ > 30)
{
- gTasks[taskId].data[10] = 0;
- gTasks[taskId].data[0] = 7;
+ gTasks[taskId].tCounter = 0;
+ gTasks[taskId].tState = APPEALSTATE_MOVE_ANIM;
}
return;
- case 23:
+ case APPEALSTATE_TRY_PRINT_MOVE_RESULT:
gTasks[taskId].data[1] = 0;
- if (eContestantStatus[r6].effectStringId != CONTEST_STRING_NONE)
+ if (eContestantStatus[contestant].effectStringId != CONTEST_STRING_NONE)
{
- sub_80DD45C(r6, eContestantStatus[r6].effectStringId);
- eContestantStatus[r6].effectStringId = CONTEST_STRING_NONE;
- gTasks[taskId].data[0] = 24;
+ PrintAppealMoveResultText(contestant, eContestantStatus[contestant].effectStringId);
+ eContestantStatus[contestant].effectStringId = CONTEST_STRING_NONE;
+ gTasks[taskId].tState = APPEALSTATE_WAIT_MOVE_RESULT_MSG;
}
else
{
- if (eContestantStatus[r6].effectStringId2 != CONTEST_STRING_NONE)
+ if (eContestantStatus[contestant].effectStringId2 != CONTEST_STRING_NONE)
{
for (i = 0; i < CONTESTANT_COUNT; i++)
{
- if (i != r6 && eContestantStatus[i].effectStringId != CONTEST_STRING_NONE)
+ if (i != contestant && eContestantStatus[i].effectStringId != CONTEST_STRING_NONE)
break;
}
- if (i == 4)
+ if (i == CONTESTANT_COUNT)
{
- sub_80DD45C(r6, eContestantStatus[r6].effectStringId2);
- eContestantStatus[r6].effectStringId2 = CONTEST_STRING_NONE;
- gTasks[taskId].data[0] = 24;
+ PrintAppealMoveResultText(contestant, eContestantStatus[contestant].effectStringId2);
+ eContestantStatus[contestant].effectStringId2 = CONTEST_STRING_NONE;
+ gTasks[taskId].tState = APPEALSTATE_WAIT_MOVE_RESULT_MSG;
}
else
{
- gTasks[taskId].data[0] = 48;
+ gTasks[taskId].tState = APPEALSTATE_CHECK_TURN_ORDER_MOD;
}
}
else
{
- gTasks[taskId].data[0] = 48;
+ gTasks[taskId].tState = APPEALSTATE_CHECK_TURN_ORDER_MOD;
}
}
return;
- case 24:
+ case APPEALSTATE_WAIT_MOVE_RESULT_MSG:
if (!Contest_RunTextPrinters())
- gTasks[taskId].data[0] = 23;
+ gTasks[taskId].tState = APPEALSTATE_TRY_PRINT_MOVE_RESULT;
return;
- case 48:
- if (eContestantStatus[r6].turnOrderModAction == 1)
+ case APPEALSTATE_CHECK_TURN_ORDER_MOD:
+ if (eContestantStatus[contestant].turnOrderModAction == 1)
{
- sub_80DD720(5);
+ DoJudgeSpeechBubble(JUDGE_SYMBOL_NUMBER_ONE);
}
- else if (eContestantStatus[r6].turnOrderModAction == 2)
+ else if (eContestantStatus[contestant].turnOrderModAction == 2)
{
- sub_80DD720(6);
+ DoJudgeSpeechBubble(JUDGE_SYMBOL_NUMBER_FOUR);
}
- else if (eContestantStatus[r6].turnOrderModAction == 3)
+ else if (eContestantStatus[contestant].turnOrderModAction == 3)
{
- sub_80DD720(7);
+ DoJudgeSpeechBubble(JUDGE_SYMBOL_QUESTION_MARK);
}
else
{
- gTasks[taskId].data[0] = 47;
+ gTasks[taskId].tState = APPEALSTATE_TRY_SHOW_NEXT_TURN_GFX;
return;
}
- gTasks[taskId].data[0] = 49;
+ gTasks[taskId].tState = APPEALSTATE_WAIT_JUDGE_TURN_ORDER;
return;
- case 49:
- if (!eContest.unk1920A_4)
- gTasks[taskId].data[0] = 47;
+ case APPEALSTATE_WAIT_JUDGE_TURN_ORDER:
+ if (!eContest.waitForJudgeSpeechBubble)
+ gTasks[taskId].tState = APPEALSTATE_TRY_SHOW_NEXT_TURN_GFX;
return;
- case 47:
- sub_80DE008(TRUE);
- gTasks[taskId].data[0] = 12;
+ case APPEALSTATE_TRY_SHOW_NEXT_TURN_GFX:
+ ShowHideNextTurnGfx(TRUE);
+ gTasks[taskId].tState = APPEALSTATE_UPDATE_MOVE_USERS_HEARTS;
return;
- case 12:
- sub_80DC028(0, eContestantStatus[r6].appeal2, r6);
- gTasks[taskId].data[0] = 13;
+ case APPEALSTATE_UPDATE_MOVE_USERS_HEARTS:
+ UpdateAppealHearts(0, eContestantStatus[contestant].appeal, contestant);
+ gTasks[taskId].tState = APPEALSTATE_WAIT_MOVE_USERS_HEARTS;
return;
- case 13:
- if (!gContestResources->field_14[eContest.unk19215].unk2_2)
- gTasks[taskId].data[0] = 35;
+ case APPEALSTATE_WAIT_MOVE_USERS_HEARTS:
+ if (!eContestGfxState[eContest.currentContestant].updatingAppealHearts)
+ gTasks[taskId].tState = APPEALSTATE_TRY_JUDGE_STAR;
return;
- case 35:
- if (eContestantStatus[r6].conditionMod == 1)
- sub_80DD720(8);
- gTasks[taskId].data[0] = 36;
+ case APPEALSTATE_TRY_JUDGE_STAR:
+ if (eContestantStatus[contestant].conditionMod == CONDITION_GAIN)
+ DoJudgeSpeechBubble(JUDGE_SYMBOL_STAR);
+ gTasks[taskId].tState = APPEALSTATE_WAIT_JUDGE_STAR;
return;
- case 36:
- if (!eContest.unk1920A_4)
- gTasks[taskId].data[0] = 37;
+ case APPEALSTATE_WAIT_JUDGE_STAR:
+ if (!eContest.waitForJudgeSpeechBubble)
+ gTasks[taskId].tState = APPEALSTATE_UPDATE_MOVE_USERS_STARS;
return;
- case 37:
- if (sub_80DB5B8(r6, 1))
+ case APPEALSTATE_UPDATE_MOVE_USERS_STARS:
+ if (UpdateConditionStars(contestant, TRUE))
{
- gTasks[taskId].data[10] = 0;
- gTasks[taskId].data[0] = 38;
+ gTasks[taskId].tCounter = 0;
+ gTasks[taskId].tState = APPEALSTATE_WAIT_MOVE_USERS_STARS;
}
else
{
- gTasks[taskId].data[0] = 50;
+ gTasks[taskId].tState = APPEALSTATE_UPDATE_MOVE_USERS_STATUS;
}
return;
- case 38:
- if (++gTasks[taskId].data[10] > 20)
+ case APPEALSTATE_WAIT_MOVE_USERS_STARS:
+ if (++gTasks[taskId].tCounter > 20)
{
- gTasks[taskId].data[10] = 0;
- gTasks[taskId].data[0] = 50;
+ gTasks[taskId].tCounter = 0;
+ gTasks[taskId].tState = APPEALSTATE_UPDATE_MOVE_USERS_STATUS;
}
return;
- case 50:
- if (sub_80DB798(r6))
- PlaySE(SE_C_PASI);
- gTasks[taskId].data[0] = 25;
+ case APPEALSTATE_UPDATE_MOVE_USERS_STATUS:
+ if (DrawStatusSymbol(contestant))
+ PlaySE(SE_CONTEST_ICON_CHANGE);
+ gTasks[taskId].tState = APPEALSTATE_UPDATE_OPPONENTS;
return;
- case 25:
+ case APPEALSTATE_UPDATE_OPPONENTS:
gTasks[taskId].data[1] = 0;
- gTasks[taskId].data[0] = 26;
+ gTasks[taskId].tState = APPEALSTATE_UPDATE_OPPONENT;
return;
- case 26:
+ case APPEALSTATE_UPDATE_OPPONENT:
{
- s32 r2 = 0;
+ // Update each other contestant as a result of this move appeal
+ s32 j = 0;
- r3 = 0;
+ r3 = FALSE; // Can't get this to use local variable. Should be "needsUpdate"
for (i = gTasks[taskId].data[1]; i < CONTESTANT_COUNT; i++)
{
- r3 = 0;
- for (r2 = 0; r2 < CONTESTANT_COUNT; r2++)
+ r3 = FALSE;
+ for (j = 0; j < CONTESTANT_COUNT; j++)
{
- if (r2 != r6 && gContestantTurnOrder[r2] == i
- && eContestantStatus[r2].effectStringId != CONTEST_STRING_NONE)
+ if (j != contestant && gContestantTurnOrder[j] == i
+ && eContestantStatus[j].effectStringId != CONTEST_STRING_NONE)
{
- r3 = 1;
+ r3 = TRUE;
break;
}
}
- if (r3 != 0)
+ if (r3)
break;
}
if (r3)
{
- gTasks[taskId].data[1] = gContestantTurnOrder[r2];
- sub_80DD45C(r2, eContestantStatus[r2].effectStringId);
- eContestantStatus[r2].effectStringId = CONTEST_STRING_NONE;
- gTasks[taskId].data[0] = 27;
+ // Update contestant
+ gTasks[taskId].data[1] = gContestantTurnOrder[j];
+ PrintAppealMoveResultText(j, eContestantStatus[j].effectStringId);
+ eContestantStatus[j].effectStringId = CONTEST_STRING_NONE;
+ gTasks[taskId].tState = APPEALSTATE_WAIT_OPPONENT_RESPONSE_MSG;
}
else
{
+ // Done updating contestants
gTasks[taskId].data[1] = 0;
- gTasks[taskId].data[10] = 0;
- gTasks[taskId].data[0] = 51;
- sub_80DB884();
+ gTasks[taskId].tCounter = 0;
+ gTasks[taskId].tState = APPEALSTATE_TRY_PRINT_SKIP_NEXT_TURN_MSG;
+ DrawStatusSymbols();
}
}
return;
- case 27:
+ case APPEALSTATE_WAIT_OPPONENT_RESPONSE_MSG:
+ // Wait for contestants response to current appeal
+ // i.e. "Contestant managed to avert its gaze"
if (!Contest_RunTextPrinters())
- gTasks[taskId].data[0] = 28;
+ gTasks[taskId].tState = APPEALSTATE_UPDATE_OPPONENT_HEARTS;
return;
- case 28:
+ case APPEALSTATE_UPDATE_OPPONENT_HEARTS:
for (i = 0; gTasks[taskId].data[1] != gContestantTurnOrder[i]; i++)
;
- sub_80DC028(eContestantStatus[i].appeal2 + eContestantStatus[i].jam, -eContestantStatus[i].jam, i);
- gTasks[taskId].data[0] = 29;
+ UpdateAppealHearts(eContestantStatus[i].appeal + eContestantStatus[i].jam, -eContestantStatus[i].jam, i);
+ gTasks[taskId].tState = APPEALSTATE_WAIT_OPPONENT_HEARTS;
return;
- case 29:
+ case APPEALSTATE_WAIT_OPPONENT_HEARTS:
for (i = 0; gTasks[taskId].data[1] != gContestantTurnOrder[i]; i++)
;
- if (!gContestResources->field_14[i].unk2_2)
- gTasks[taskId].data[0] = 39;
+ if (!eContestGfxState[i].updatingAppealHearts)
+ gTasks[taskId].tState = APPEALSTATE_UPDATE_OPPONENT_STARS;
return;
- case 39:
+ case APPEALSTATE_UPDATE_OPPONENT_STARS:
for (i = 0; gTasks[taskId].data[1] != gContestantTurnOrder[i]; i++)
;
- if (sub_80DB5B8(i, 1))
+ if (UpdateConditionStars(i, TRUE))
{
- gTasks[taskId].data[10] = 0;
- gTasks[taskId].data[0] = 40;
+ gTasks[taskId].tCounter = 0;
+ gTasks[taskId].tState = APPEALSTATE_WAIT_OPPONENT_STARS;
}
else
{
- gTasks[taskId].data[0] = 30;
+ gTasks[taskId].tState = APPEALSTATE_UPDATE_OPPONENT_STATUS;
}
return;
- case 40:
- if (++gTasks[taskId].data[10] > 20)
+ case APPEALSTATE_WAIT_OPPONENT_STARS:
+ if (++gTasks[taskId].tCounter > 20)
{
- gTasks[taskId].data[10] = 0;
- gTasks[taskId].data[0] = 30;
+ gTasks[taskId].tCounter = 0;
+ gTasks[taskId].tState = APPEALSTATE_UPDATE_OPPONENT_STATUS;
}
return;
- case 30:
+ case APPEALSTATE_UPDATE_OPPONENT_STATUS:
for (i = 0; i < CONTESTANT_COUNT; i++)
{
if (gContestantTurnOrder[i] == gTasks[taskId].data[1])
break;
}
- if (sub_80DB798(i))
- PlaySE(SE_C_PASI);
+ if (DrawStatusSymbol(i))
+ PlaySE(SE_CONTEST_ICON_CHANGE);
else
- PlaySE(SE_C_SYU);
+ PlaySE(SE_CONTEST_ICON_CLEAR);
if (eContestantStatus[i].judgesAttentionWasRemoved)
{
- sub_80DC674(i);
- eContestantStatus[i].judgesAttentionWasRemoved = 0;
+ StopFlashJudgeAttentionEye(i);
+ eContestantStatus[i].judgesAttentionWasRemoved = FALSE;
}
gTasks[taskId].data[1]++;
- gTasks[taskId].data[0] = 26;
+ gTasks[taskId].tState = APPEALSTATE_UPDATE_OPPONENT;
return;
- case 51:
- if (gTasks[taskId].data[10]++ > 9)
+ case APPEALSTATE_TRY_PRINT_SKIP_NEXT_TURN_MSG:
+ if (gTasks[taskId].tCounter++ > 9)
{
- gTasks[taskId].data[10] = 0;
- if (eContestantStatus[r6].numTurnsSkipped != 0
- || eContestantStatus[r6].turnSkipped)
+ gTasks[taskId].tCounter = 0;
+ if (eContestantStatus[contestant].numTurnsSkipped != 0
+ || eContestantStatus[contestant].turnSkipped)
{
ContestClearGeneralTextWindow();
- StringCopy(gStringVar1, gContestMons[r6].nickname);
+ StringCopy(gStringVar1, gContestMons[contestant].nickname);
StringExpandPlaceholders(gStringVar4, gText_MonCantAppealNextTurn);
Contest_StartTextPrinter(gStringVar4, 1);
}
- gTasks[taskId].data[0] = 52;
+ gTasks[taskId].tState = APPEALSTATE_WAIT_SKIP_NEXT_TURN_MSG;
}
return;
- case 52:
+ case APPEALSTATE_WAIT_SKIP_NEXT_TURN_MSG:
if (!Contest_RunTextPrinters())
{
- if (!eContestantStatus[r6].unk15_6)
- gTasks[taskId].data[0] = 17;
+ if (!eContestantStatus[contestant].usedComboMove)
+ gTasks[taskId].tState = APPEALSTATE_CHECK_REPEATED_MOVE;
else
- gTasks[taskId].data[0] = 14;
+ gTasks[taskId].tState = APPEALSTATE_PRINT_COMBO_MSG;
}
return;
- case 14:
- r3 = eContestantStatus[r6].unk16;
- if (eContestantStatus[r6].unk16 != 0)
+ case APPEALSTATE_PRINT_COMBO_MSG:
+ {
+ s8 completedCombo = eContestantStatus[contestant].completedCombo;
+ if (eContestantStatus[contestant].completedCombo)
{
+ // Finished combo
+
+ // Looks like there were originally meant to be move combos of
+ // different effectivenesses. completedCombo however is only ever 0 or 1,
+ // so in here only "Went over well" will ever be used
ContestClearGeneralTextWindow();
- if (r3 == 1)
+ if (completedCombo == 1)
Contest_StartTextPrinter(gText_AppealComboWentOverWell, TRUE);
- else if (r3 == 2)
+ else if (completedCombo == 2)
Contest_StartTextPrinter(gText_AppealComboWentOverVeryWell, TRUE);
else
Contest_StartTextPrinter(gText_AppealComboWentOverExcellently, TRUE);
- sub_80DD720(3);
- gTasks[taskId].data[10] = 0;
- gTasks[taskId].data[0] = 45;
+
+ DoJudgeSpeechBubble(JUDGE_SYMBOL_TWO_EXCLAMATIONS);
+ gTasks[taskId].tCounter = 0;
+ gTasks[taskId].tState = APPEALSTATE_WAIT_JUDGE_COMBO;
}
else
{
+ // Started combo
ContestClearGeneralTextWindow();
- StringCopy(gStringVar1, gContestMons[r6].nickname);
+ StringCopy(gStringVar1, gContestMons[contestant].nickname);
StringExpandPlaceholders(gStringVar4, gText_JudgeLookedAtMonExpectantly);
Contest_StartTextPrinter(gStringVar4, 1);
- sub_80DD720(2);
- gTasks[taskId].data[10] = 0;
- gTasks[taskId].data[0] = 45;
+ DoJudgeSpeechBubble(JUDGE_SYMBOL_ONE_EXCLAMATION);
+ gTasks[taskId].tCounter = 0;
+ gTasks[taskId].tState = APPEALSTATE_WAIT_JUDGE_COMBO;
}
return;
- case 45:
- if (!eContest.unk1920A_4)
+ }
+ case APPEALSTATE_WAIT_JUDGE_COMBO:
+ if (!eContest.waitForJudgeSpeechBubble)
{
- sub_80DC9B4(eContest.unk19215);
- gTasks[taskId].data[0] = 15;
+ StartStopFlashJudgeAttentionEye(eContest.currentContestant);
+ gTasks[taskId].tState = APPEALSTATE_TRY_UPDATE_HEARTS_FROM_COMBO;
}
return;
- case 15:
+ case APPEALSTATE_TRY_UPDATE_HEARTS_FROM_COMBO:
if (!Contest_RunTextPrinters())
{
- if (++gTasks[taskId].data[10] > 50)
+ if (++gTasks[taskId].tCounter > 50)
{
- if (!eContestantStatus[r6].hasJudgesAttention)
+ if (!eContestantStatus[contestant].hasJudgesAttention)
{
- sub_80DC028(
- eContestantStatus[r6].appeal2,
- eContestantStatus[r6].unk17,
- r6);
- eContestantStatus[r6].appeal2 += eContestantStatus[r6].unk17;
+ UpdateAppealHearts(
+ eContestantStatus[contestant].appeal,
+ eContestantStatus[contestant].comboAppealBonus,
+ contestant);
+ eContestantStatus[contestant].appeal += eContestantStatus[contestant].comboAppealBonus;
}
- gTasks[taskId].data[0] = 16;
+ gTasks[taskId].tState = APPEALSTATE_WAIT_HEARTS_FROM_COMBO;
}
}
return;
- case 16:
- if (!gContestResources->field_14[r6].unk2_2)
+ case APPEALSTATE_WAIT_HEARTS_FROM_COMBO:
+ if (!eContestGfxState[contestant].updatingAppealHearts)
{
- gTasks[taskId].data[10] = 0;
- gTasks[taskId].data[0] = 17;
+ gTasks[taskId].tCounter = 0;
+ gTasks[taskId].tState = APPEALSTATE_CHECK_REPEATED_MOVE;
}
return;
- case 17:
- if (eContestantStatus[r6].disappointedRepeat)
+ case APPEALSTATE_CHECK_REPEATED_MOVE:
+ if (eContestantStatus[contestant].repeatedMove)
{
ContestClearGeneralTextWindow();
- StringCopy(gStringVar1, gContestMons[r6].nickname);
+ StringCopy(gStringVar1, gContestMons[contestant].nickname);
StringExpandPlaceholders(gStringVar4, gText_RepeatedAppeal);
Contest_StartTextPrinter(gStringVar4, TRUE);
- gTasks[taskId].data[10] = 0;
- sub_80DD720(0);
- gTasks[taskId].data[0] = 46;
+ gTasks[taskId].tCounter = 0;
+ DoJudgeSpeechBubble(JUDGE_SYMBOL_SWIRL);
+ gTasks[taskId].tState = APPEALSTATE_WAIT_JUDGE_REPEATED_MOVE;
}
else
{
- gTasks[taskId].data[0] = 41;
+ gTasks[taskId].tState = APPEALSTATE_UPDATE_CROWD;
}
return;
- case 46:
- if (!eContest.unk1920A_4)
- gTasks[taskId].data[0] = 19;
+ case APPEALSTATE_WAIT_JUDGE_REPEATED_MOVE:
+ if (!eContest.waitForJudgeSpeechBubble)
+ gTasks[taskId].tState = APPEALSTATE_UPDATE_HEARTS_FROM_REPEAT;
return;
- case 19:
+ case APPEALSTATE_UPDATE_HEARTS_FROM_REPEAT:
if (!Contest_RunTextPrinters())
{
- sub_80DC028(eContestantStatus[r6].appeal2, -eContestantStatus[r6].unk18, r6);
- eContestantStatus[r6].appeal2 -= eContestantStatus[r6].unk18;
- gTasks[taskId].data[0] = 18;
+ UpdateAppealHearts(eContestantStatus[contestant].appeal, -eContestantStatus[contestant].repeatJam, contestant);
+ eContestantStatus[contestant].appeal -= eContestantStatus[contestant].repeatJam;
+ gTasks[taskId].tState = APPEALSTATE_WAIT_HEARTS_FROM_REPEAT;
}
return;
- case 18:
+ case APPEALSTATE_WAIT_HEARTS_FROM_REPEAT:
ContestDebugDoPrint();
- if (!gContestResources->field_14[r6].unk2_2)
+ if (!eContestGfxState[contestant].updatingAppealHearts)
{
- gTasks[taskId].data[10] = 0;
+ gTasks[taskId].tCounter = 0;
ContestClearGeneralTextWindow();
- gTasks[taskId].data[0] = 41;
+ gTasks[taskId].tState = APPEALSTATE_UPDATE_CROWD;
}
return;
- case 41:
- if (gContestResources->field_10->excitementFrozen && r6 != gContestResources->field_10->excitementFreezer)
+ case APPEALSTATE_UPDATE_CROWD:
+ if (eContestExcitement.frozen && contestant != eContestExcitement.freezer)
{
- gTasks[taskId].data[0] = 57;
+ gTasks[taskId].tState = APPEALSTATE_PRINT_CROWD_WATCHES_MSG;
}
else
{
- r3 = gContestResources->field_10->bits_0;
- if (eContestantStatus[r6].overrideCategoryExcitementMod)
+ r3 = eContestExcitement.moveExcitement; // Can't get this to use local variable. Should be "moveExcitement"
+ if (eContestantStatus[contestant].overrideCategoryExcitementMod)
{
r3 = 1;
- StringCopy(gStringVar3, gMoveNames[eContestantStatus[r6].currMove]);
+ StringCopy(gStringVar3, gMoveNames[eContestantStatus[contestant].currMove]);
}
else
{
- StringCopy(gStringVar3, sContestConditions[gContestMoves[eContestantStatus[r6].currMove].contestCategory]);
- }
- if (r3 > 0)
- {
- if (eContestantStatus[r6].disappointedRepeat)
- r3 = 0;
+ StringCopy(gStringVar3, sContestConditions[gContestMoves[eContestantStatus[contestant].currMove].contestCategory]);
}
+
+ if (r3 > 0 && eContestantStatus[contestant].repeatedMove)
+ r3 = 0;
+
ContestClearGeneralTextWindow();
- StringCopy(gStringVar1, gContestMons[r6].nickname);
+ StringCopy(gStringVar1, gContestMons[contestant].nickname);
eContest.applauseLevel += r3;
if (eContest.applauseLevel < 0)
eContest.applauseLevel = 0;
if (r3 == 0)
{
- gTasks[taskId].data[0] = 55;
+ gTasks[taskId].tState = APPEALSTATE_SLIDE_APPLAUSE_OUT;
}
else
{
@@ -2060,28 +2229,28 @@ static void sub_80D8B38(u8 taskId)
else
StringExpandPlaceholders(gStringVar4, gText_MonsXGotTheCrowdGoing);
Contest_StartTextPrinter(gStringVar4, 1);
- gTasks[taskId].data[10] = 0;
+ gTasks[taskId].tCounter = 0;
gTasks[taskId].data[11] = 0;
if (r3 < 0)
- gTasks[taskId].data[0] = 53;
+ gTasks[taskId].tState = APPEALSTATE_DO_CROWD_UNEXCITED;
else
- gTasks[taskId].data[0] = 54;
+ gTasks[taskId].tState = APPEALSTATE_DO_CROWD_EXCITED;
}
}
return;
- case 53:
- switch (gTasks[taskId].data[10])
+ case APPEALSTATE_DO_CROWD_UNEXCITED:
+ switch (gTasks[taskId].tCounter)
{
case 0:
- sub_80DDED0(-1, 1);
- PlayFanfare(MUS_ME_ZANNEN);
- gTasks[taskId].data[10]++;
+ BlendAudienceBackground(-1, 1);
+ PlayFanfare(MUS_TOO_BAD);
+ gTasks[taskId].tCounter++;
break;
case 1:
- if (!eContest.unk1920B_0 && !Contest_RunTextPrinters())
+ if (!eContest.waitForAudienceBlend && !Contest_RunTextPrinters())
{
ShowAndUpdateApplauseMeter(-1);
- gTasks[taskId].data[10]++;
+ gTasks[taskId].tCounter++;
}
break;
case 2:
@@ -2090,38 +2259,38 @@ static void sub_80D8B38(u8 taskId)
if (gTasks[taskId].data[11]++ > 29)
{
gTasks[taskId].data[11] = 0;
- sub_80DDED0(-1, -1);
- gTasks[taskId].data[10]++;
+ BlendAudienceBackground(-1, -1);
+ gTasks[taskId].tCounter++;
}
}
break;
case 3:
if (!gPaletteFade.active)
{
- gTasks[taskId].data[10] = 0;
+ gTasks[taskId].tCounter = 0;
gTasks[taskId].data[11] = 0;
- gTasks[taskId].data[0] = 43;
+ gTasks[taskId].tState = APPEALSTATE_WAIT_EXCITEMENT_HEARTS;
}
break;
}
return;
- case 54:
- switch (gTasks[taskId].data[10])
+ case APPEALSTATE_DO_CROWD_EXCITED:
+ switch (gTasks[taskId].tCounter)
{
case 0:
if (!Contest_RunTextPrinters())
{
- sub_80DDED0(1, 1);
- gTasks[taskId].data[10]++;
+ BlendAudienceBackground(1, 1);
+ gTasks[taskId].tCounter++;
}
break;
case 1:
- if (!eContest.unk1920B_0)
+ if (!eContest.waitForAudienceBlend)
{
- sub_80DDE0C();
- PlaySE(SE_W227B);
+ AnimateAudience();
+ PlaySE(SE_M_ENCORE2);
ShowAndUpdateApplauseMeter(1);
- gTasks[taskId].data[10]++;
+ gTasks[taskId].tCounter++;
}
break;
case 2:
@@ -2130,83 +2299,83 @@ static void sub_80D8B38(u8 taskId)
if (gTasks[taskId].data[11]++ > 29)
{
gTasks[taskId].data[11] = 0;
- sub_80DC028(eContestantStatus[r6].appeal2, gContestResources->field_10->unk2, r6);
- eContestantStatus[r6].appeal2 += gContestResources->field_10->unk2;
- gTasks[taskId].data[10]++;
+ UpdateAppealHearts(eContestantStatus[contestant].appeal, eContestExcitement.excitementAppealBonus, contestant);
+ eContestantStatus[contestant].appeal += eContestExcitement.excitementAppealBonus;
+ gTasks[taskId].tCounter++;
}
}
break;
case 3:
- if (!gContestResources->field_14[r6].unk2_2)
+ if (!eContestGfxState[contestant].updatingAppealHearts)
{
- if (!eContest.unk1920A_7)
+ if (!eContest.animatingAudience)
{
- sub_80DDED0(1, -1);
- gTasks[taskId].data[10]++;
+ BlendAudienceBackground(1, -1);
+ gTasks[taskId].tCounter++;
}
}
break;
case 4:
if (!gPaletteFade.active)
{
- gTasks[taskId].data[10] = 0;
+ gTasks[taskId].tCounter = 0;
gTasks[taskId].data[11] = 0;
- gTasks[taskId].data[0] = 43;
+ gTasks[taskId].tState = APPEALSTATE_WAIT_EXCITEMENT_HEARTS;
}
break;
}
return;
- case 43:
- if (!gContestResources->field_14[r6].unk2_2)
+ case APPEALSTATE_WAIT_EXCITEMENT_HEARTS:
+ if (!eContestGfxState[contestant].updatingAppealHearts)
{
ContestClearGeneralTextWindow();
- gTasks[taskId].data[0] = 55;
+ gTasks[taskId].tState = APPEALSTATE_SLIDE_APPLAUSE_OUT;
}
return;
- case 57:
+ case APPEALSTATE_PRINT_CROWD_WATCHES_MSG:
ContestClearGeneralTextWindow();
- StringCopy(gStringVar3, gContestMons[gContestResources->field_10->excitementFreezer].nickname);
- StringCopy(gStringVar1, gContestMons[r6].nickname);
- StringCopy(gStringVar2, gMoveNames[eContestantStatus[r6].currMove]);
+ StringCopy(gStringVar3, gContestMons[eContestExcitement.freezer].nickname);
+ StringCopy(gStringVar1, gContestMons[contestant].nickname);
+ StringCopy(gStringVar2, gMoveNames[eContestantStatus[contestant].currMove]);
StringExpandPlaceholders(gStringVar4, gText_CrowdContinuesToWatchMon);
Contest_StartTextPrinter(gStringVar4, TRUE);
- gTasks[taskId].data[0] = 58;
+ gTasks[taskId].tState = APPEALSTATE_PRINT_MON_MOVE_IGNORED_MSG;
return;
- case 58:
+ case APPEALSTATE_PRINT_MON_MOVE_IGNORED_MSG:
if (!Contest_RunTextPrinters())
{
ContestClearGeneralTextWindow();
StringExpandPlaceholders(gStringVar4, gText_MonsMoveIsIgnored);
Contest_StartTextPrinter(gStringVar4, TRUE);
- gTasks[taskId].data[0] = 59;
+ gTasks[taskId].tState = APPEALSTATE_WAIT_MON_MOVE_IGNORED_MSG;
}
return;
- case 59:
+ case APPEALSTATE_WAIT_MON_MOVE_IGNORED_MSG:
if (!Contest_RunTextPrinters())
{
ContestClearGeneralTextWindow();
- gTasks[taskId].data[0] = 55;
+ gTasks[taskId].tState = APPEALSTATE_SLIDE_APPLAUSE_OUT;
}
return;
- case 33:
- if (eContestantStatus[r6].hasJudgesAttention)
- eContestantStatus[r6].hasJudgesAttention = 0;
- sub_80DC9B4(r6);
- StringCopy(gStringVar1, gContestMons[r6].nickname);
- StringCopy(gStringVar2, gMoveNames[eContestantStatus[r6].currMove]);
+ case APPEALSTATE_PRINT_TOO_NERVOUS_MSG:
+ if (eContestantStatus[contestant].hasJudgesAttention)
+ eContestantStatus[contestant].hasJudgesAttention = FALSE;
+ StartStopFlashJudgeAttentionEye(contestant);
+ StringCopy(gStringVar1, gContestMons[contestant].nickname);
+ StringCopy(gStringVar2, gMoveNames[eContestantStatus[contestant].currMove]);
StringExpandPlaceholders(gStringVar4, gText_MonWasTooNervousToMove);
Contest_StartTextPrinter(gStringVar4, TRUE);
- gTasks[taskId].data[0] = 34;
+ gTasks[taskId].tState = APPEALSTATE_WAIT_TOO_NERVOUS_MSG;
return;
- case 34:
+ case APPEALSTATE_WAIT_TOO_NERVOUS_MSG:
if (!Contest_RunTextPrinters())
- gTasks[taskId].data[0] = 55;
+ gTasks[taskId].tState = APPEALSTATE_SLIDE_APPLAUSE_OUT;
return;
- case 55:
- TryMoveApplauseMeterOffscreen();
- gTasks[taskId].data[0] = 56;
+ case APPEALSTATE_SLIDE_APPLAUSE_OUT:
+ SlideApplauseMeterOut();
+ gTasks[taskId].tState = APPEALSTATE_WAIT_SLIDE_APPLAUSE;
return;
- case 56:
+ case APPEALSTATE_WAIT_SLIDE_APPLAUSE:
if (!eContest.applauseMeterIsMoving)
{
if (eContest.applauseLevel > 4)
@@ -2214,68 +2383,68 @@ static void sub_80D8B38(u8 taskId)
eContest.applauseLevel = 0;
UpdateApplauseMeter();
}
- gTasks[taskId].data[0] = 10;
+ gTasks[taskId].tState = APPEALSTATE_SLIDE_MON_OUT;
}
return;
- case 10:
- spriteId = gTasks[taskId].data[2];
- gSprites[spriteId].callback = sub_80DA164;
- gTasks[taskId].data[0] = 11;
+ case APPEALSTATE_SLIDE_MON_OUT:
+ spriteId = gTasks[taskId].tMonSpriteId;
+ gSprites[spriteId].callback = SpriteCB_MonSlideOut;
+ gTasks[taskId].tState = APPEALSTATE_FREE_MON_SPRITE;
return;
- case 11:
- spriteId = gTasks[taskId].data[2];
+ case APPEALSTATE_FREE_MON_SPRITE:
+ spriteId = gTasks[taskId].tMonSpriteId;
if (gSprites[spriteId].invisible)
{
FreeSpriteOamMatrix(&gSprites[spriteId]);
DestroySprite(&gSprites[spriteId]);
- gTasks[taskId].data[0] = 20;
+ gTasks[taskId].tState = APPEALSTATE_START_TURN_END_DELAY;
}
return;
- case 20:
- gTasks[taskId].data[10] = 0;
- gTasks[taskId].data[0] = 21;
+ case APPEALSTATE_START_TURN_END_DELAY:
+ gTasks[taskId].tCounter = 0;
+ gTasks[taskId].tState = APPEALSTATE_TURN_END_DELAY;
return;
- case 31:
+ case APPEALSTATE_PRINT_SKIP_TURN_MSG:
ContestClearGeneralTextWindow();
- StringCopy(gStringVar1, gContestMons[r6].nickname);
+ StringCopy(gStringVar1, gContestMons[contestant].nickname);
StringExpandPlaceholders(gStringVar4, gText_MonWasWatchingOthers);
Contest_StartTextPrinter(gStringVar4, TRUE);
- gTasks[taskId].data[0] = 32;
+ gTasks[taskId].tState = APPEALSTATE_WAIT_SKIP_TURN_MSG;
return;
- case 32:
+ case APPEALSTATE_WAIT_SKIP_TURN_MSG:
if (!Contest_RunTextPrinters())
- gTasks[taskId].data[0] = 21;
+ gTasks[taskId].tState = APPEALSTATE_TURN_END_DELAY;
return;
- case 21:
- if (++gTasks[taskId].data[10] > 29)
+ case APPEALSTATE_TURN_END_DELAY:
+ if (++gTasks[taskId].tCounter > 29)
{
- gTasks[taskId].data[10] = 0;
- gTasks[taskId].data[0] = 22;
+ gTasks[taskId].tCounter = 0;
+ gTasks[taskId].tState = APPEALSTATE_START_NEXT_TURN;
}
return;
- case 22:
- if (++eContest.unk19214 == 4)
+ case APPEALSTATE_START_NEXT_TURN:
+ if (++eContest.turnNumber == CONTESTANT_COUNT)
{
- gTasks[taskId].data[0] = 0;
+ gTasks[taskId].tState = 0;
gTasks[taskId].data[1] = 0;
- gTasks[taskId].data[2] = 0;
- gTasks[taskId].func = sub_80DA198;
+ gTasks[taskId].tMonSpriteId = 0;
+ gTasks[taskId].func = Task_FinishRoundOfAppeals;
}
else
{
- gTasks[taskId].data[0] = 0;
+ gTasks[taskId].tState = APPEALSTATE_START_TURN;
}
return;
}
}
-static void sub_80DA110(u8 taskId)
+static void Task_EndWaitForLink(u8 taskId)
{
- eContest.unk1920B_2 = 0;
+ eContest.waitForLink = FALSE;
DestroyTask(taskId);
}
-static void sub_80DA134(struct Sprite *sprite)
+static void SpriteCB_MonSlideIn(struct Sprite *sprite)
{
if (sprite->pos2.x != 0)
{
@@ -2291,7 +2460,7 @@ static void sub_80DA134(struct Sprite *sprite)
}
}
-static void sub_80DA164(struct Sprite *sprite)
+static void SpriteCB_MonSlideOut(struct Sprite *sprite)
{
sprite->pos2.x -= 6;
if (sprite->pos1.x + sprite->pos2.x < -32)
@@ -2301,7 +2470,7 @@ static void sub_80DA164(struct Sprite *sprite)
}
}
-static void sub_80DA198(u8 taskId)
+static void Task_FinishRoundOfAppeals(u8 taskId)
{
switch (gTasks[taskId].data[0])
{
@@ -2310,57 +2479,57 @@ static void sub_80DA198(u8 taskId)
{
u8 taskId2;
- eContest.unk1920B_2 = 1;
- if (sub_80DA8A4())
+ eContest.waitForLink = TRUE;
+ if (IsPlayerLinkLeader())
{
RankContestants();
- sub_80DBA18();
+ SetAttentionLevels();
}
- taskId2 = CreateTask(sub_80FCC88, 0);
- SetTaskFuncWithFollowupFunc(taskId2, sub_80FCC88, sub_80DA110);
+ taskId2 = CreateTask(Task_LinkContest_CommunicateAppealsState, 0);
+ SetTaskFuncWithFollowupFunc(taskId2, Task_LinkContest_CommunicateAppealsState, Task_EndWaitForLink);
ContestPrintLinkStandby();
gTasks[taskId].data[0] = 1;
}
else
{
RankContestants();
- sub_80DBA18();
+ SetAttentionLevels();
gTasks[taskId].data[0] = 2;
}
break;
case 1:
- if (!eContest.unk1920B_2)
+ if (!eContest.waitForLink)
gTasks[taskId].data[0] = 2;
break;
case 2:
gTasks[taskId].data[0] = 0;
- gTasks[taskId].func = sub_80DA25C;
+ gTasks[taskId].func = Task_ReadyUpdateHeartSliders;
break;
}
}
-static void sub_80DA25C(u8 taskId)
+static void Task_ReadyUpdateHeartSliders(u8 taskId)
{
- sub_80DE008(FALSE);
+ ShowHideNextTurnGfx(FALSE);
gTasks[taskId].data[0] = 0;
gTasks[taskId].data[1] = 0;
- gTasks[taskId].func = sub_80DA28C;
+ gTasks[taskId].func = Task_UpdateHeartSliders;
}
-static void sub_80DA28C(u8 taskId)
+static void Task_UpdateHeartSliders(u8 taskId)
{
switch (gTasks[taskId].data[0])
{
case 0:
if (++gTasks[taskId].data[1] > 20)
{
- sub_80DE69C(2);
+ AnimateSliderHearts(SLIDER_HEART_ANIM_APPEAR);
gTasks[taskId].data[1] = 0;
gTasks[taskId].data[0]++;
}
break;
case 1:
- if (!eContest.unk1920B_1)
+ if (!eContest.sliderHeartsAnimating)
{
if (++gTasks[taskId].data[1] > 20)
{
@@ -2370,17 +2539,17 @@ static void sub_80DA28C(u8 taskId)
}
break;
case 2:
- sub_80DC3AC();
+ UpdateHeartSliders();
gTasks[taskId].data[0] = 0;
gTasks[taskId].data[1] = 0;
- gTasks[taskId].func = sub_80DA31C;
+ gTasks[taskId].func = Task_WaitForHeartSliders;
break;
}
}
-static void sub_80DA31C(u8 taskId)
+static void Task_WaitForHeartSliders(u8 taskId)
{
- if (sub_80DC3C4())
+ if (SlidersDoneUpdating())
gTasks[taskId].func = sub_80DA348;
}
@@ -2389,20 +2558,20 @@ static void sub_80DA348(u8 taskId)
DmaCopy32Defvars(3, eUnknownHeap1A004.unk18204, gPlttBufferUnfaded, PLTT_BUFFER_SIZE * 2);
gTasks[taskId].data[0] = 0;
gTasks[taskId].data[1] = 2;
- gTasks[taskId].func = sub_80DA38C;
+ gTasks[taskId].func = Task_WaitPrintRoundResult;
}
-static void sub_80DA38C(u8 taskId)
+static void Task_WaitPrintRoundResult(u8 taskId)
{
if (++gTasks[taskId].data[0] > 2)
{
gTasks[taskId].data[0] = 0;
if (--gTasks[taskId].data[1] == 0)
- gTasks[taskId].func = sub_80DA3CC;
+ gTasks[taskId].func = Task_PrintRoundResultText;
}
}
-static void sub_80DA3CC(u8 taskId)
+static void Task_PrintRoundResultText(u8 taskId)
{
if (gTasks[taskId].data[0] == 0)
{
@@ -2419,44 +2588,44 @@ static void sub_80DA3CC(u8 taskId)
if (!Contest_RunTextPrinters())
{
gTasks[taskId].data[0] = 0;
- gTasks[taskId].func = sub_80DA464;
+ gTasks[taskId].func = Task_ReUpdateHeartSliders;
ContestDebugDoPrint();
}
}
}
-static void sub_80DA464(u8 taskId)
+static void Task_ReUpdateHeartSliders(u8 taskId)
{
if (gTasks[taskId].data[0]++ > 29)
{
gTasks[taskId].data[0] = 0;
- sub_80DC3AC();
- gTasks[taskId].func = sub_80DA49C;
+ UpdateHeartSliders(); // ? Sliders have already been updated
+ gTasks[taskId].func = Task_WaitForHeartSlidersAgain;
}
}
-static void sub_80DA49C(u8 taskId)
+static void Task_WaitForHeartSlidersAgain(u8 taskId)
{
- if (sub_80DC3C4())
+ if (SlidersDoneUpdating())
{
gTasks[taskId].data[0] = 0;
- gTasks[taskId].func = sub_80DA4CC;
+ gTasks[taskId].func = Task_DropCurtainAtRoundEnd;
}
}
-static void sub_80DA4CC(u8 taskId)
+static void Task_DropCurtainAtRoundEnd(u8 taskId)
{
- sub_80DE224();
- gTasks[taskId].func = sub_80DE424;
+ SetBgForCurtainDrop();
+ gTasks[taskId].func = Task_StartDropCurtainAtRoundEnd;
}
-static void sub_80DA4F4(u8 taskId)
+static void Task_UpdateContestantBoxOrder(u8 taskId)
{
- sub_80DE350();
- gTasks[taskId].func = sub_80DA51C;
+ UpdateContestantBoxOrder();
+ gTasks[taskId].func = Task_TryStartNextRoundOfAppeals;
}
-static void sub_80DA51C(u8 taskId)
+static void Task_TryStartNextRoundOfAppeals(u8 taskId)
{
vu16 sp0 = GetGpuReg(REG_OFFSET_BG0CNT);
vu16 sp2 = GetGpuReg(REG_OFFSET_BG2CNT);
@@ -2464,114 +2633,114 @@ static void sub_80DA51C(u8 taskId)
((vBgCnt *)&sp2)->priority = 0;
SetGpuReg(REG_OFFSET_BG0CNT, sp0);
SetGpuReg(REG_OFFSET_BG2CNT, sp2);
- eContest.turnNumber++;
- if (eContest.turnNumber == 5)
+ eContest.appealNumber++;
+ if (eContest.appealNumber == CONTEST_NUM_APPEALS)
{
- gTasks[taskId].func = sub_80DA5E8;
+ gTasks[taskId].func = Task_EndAppeals;
}
else
{
- StartMoveApplauseMeterOnscreen();
- gTasks[taskId].func = sub_80DA5B4;
+ SlideApplauseMeterIn();
+ gTasks[taskId].func = Task_StartNewRoundOfAppeals;
}
}
-static void sub_80DA5B4(u8 taskId)
+static void Task_StartNewRoundOfAppeals(u8 taskId)
{
if (!eContest.applauseMeterIsMoving)
- gTasks[taskId].func = sub_80D833C;
+ gTasks[taskId].func = Task_DisplayAppealNumberText;
}
-static void sub_80DA5E8(u8 taskId)
+static void Task_EndAppeals(u8 taskId)
{
s32 i;
gBattle_BG0_Y = 0;
gBattle_BG2_Y = 0;
for (i = 0; i < CONTESTANT_COUNT; i++)
- gUnknown_02039F10[i] = eContestantStatus[i].pointTotal;
- sub_80DBD18();
+ gContestMonAppealPointTotals[i] = eContestantStatus[i].pointTotal;
+ CalculateFinalScores();
ContestClearGeneralTextWindow();
if (!(gLinkContestFlags & LINK_CONTEST_FLAG_IS_LINK))
BravoTrainerPokemonProfile_BeforeInterview1(eContestantStatus[gContestPlayerMonIndex].prevMove);
else
{
- sub_80DF250();
- sub_80DF4F8();
+ CalculateContestLiveUpdateData();
+ SetConestLiveUpdateTVData();
ContestDebugPrintBitStrings();
}
gContestRngValue = gRngValue;
StringExpandPlaceholders(gStringVar4, gText_AllOutOfAppealTime);
Contest_StartTextPrinter(gStringVar4, TRUE);
gTasks[taskId].data[2] = 0;
- gTasks[taskId].func = sub_80DA6B4;
+ gTasks[taskId].func = Task_WaitForOutOfTimeMsg;
}
-static void sub_80DA6B4(u8 taskId)
+static void Task_WaitForOutOfTimeMsg(u8 taskId)
{
if (!Contest_RunTextPrinters())
{
- sub_80DE224();
+ SetBgForCurtainDrop();
gBattle_BG1_X = 0;
gBattle_BG1_Y = 160;
- PlaySE12WithPanning(SE_C_MAKU_D, 0);
+ PlaySE12WithPanning(SE_CONTEST_CURTAIN_FALL, 0);
gTasks[taskId].data[0] = 0;
- gTasks[taskId].func = sub_80DA700;
+ gTasks[taskId].func = Task_DropCurtainAtAppealsEnd;
}
}
-static void sub_80DA700(u8 taskId)
+static void Task_DropCurtainAtAppealsEnd(u8 taskId)
{
gBattle_BG1_Y -= 7;
if ((s16)gBattle_BG1_Y < 0)
gBattle_BG1_Y = 0;
if (gBattle_BG1_Y == 0)
{
- gTasks[taskId].func = sub_80DA740;
+ gTasks[taskId].func = Task_TryCommunicateFinalStandings;
gTasks[taskId].data[0] = 0;
}
}
-static void sub_80DA740(u8 taskId)
+static void Task_TryCommunicateFinalStandings(u8 taskId)
{
if (gTasks[taskId].data[0]++ >= 50)
{
gTasks[taskId].data[0] = 0;
if (gLinkContestFlags & LINK_CONTEST_FLAG_IS_LINK)
{
- gTasks[taskId].func = sub_80DA7A0;
+ gTasks[taskId].func = Task_CommunicateFinalStandings;
}
else
{
BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK);
- gTasks[taskId].func = sub_80DA830;
+ gTasks[taskId].func = Task_ContestReturnToField;
}
}
}
-static void sub_80DA7A0(u8 taskId)
+static void Task_CommunicateFinalStandings(u8 taskId)
{
- u8 taskId2 = CreateTask(sub_80FCACC, 0);
+ u8 taskId2 = CreateTask(Task_LinkContest_CommunicateFinalStandings, 0);
- SetTaskFuncWithFollowupFunc(taskId2, sub_80FCACC, sub_80DA7EC);
+ SetTaskFuncWithFollowupFunc(taskId2, Task_LinkContest_CommunicateFinalStandings, Task_EndCommunicateFinalStandings);
gTasks[taskId].func = TaskDummy1;
ContestPrintLinkStandby();
- sub_80DC490(FALSE);
+ SetBottomSliderHeartsInvisibility(FALSE);
}
-static void sub_80DA7EC(u8 taskId)
+static void Task_EndCommunicateFinalStandings(u8 taskId)
{
DestroyTask(taskId);
BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK);
- gTasks[eContest.mainTaskId].func = sub_80DA830;
+ gTasks[eContest.mainTaskId].func = Task_ContestReturnToField;
}
-static void sub_80DA830(u8 taskId)
+static void Task_ContestReturnToField(u8 taskId)
{
if (!gPaletteFade.active)
{
DestroyTask(taskId);
- gFieldCallback = sub_80DA874;
+ gFieldCallback = FieldCB_ContestReturnToField;
FreeAllWindowBuffers();
FreeContestResources();
FreeMonSpritesGfx();
@@ -2579,7 +2748,7 @@ static void sub_80DA830(u8 taskId)
}
}
-static void sub_80DA874(void)
+static void FieldCB_ContestReturnToField(void)
{
ScriptContext2_Disable();
EnableBothScriptContexts();
@@ -2588,17 +2757,17 @@ static void sub_80DA874(void)
static void TryPutPlayerLast(void)
{
if (!(gLinkContestFlags & LINK_CONTEST_FLAG_IS_LINK))
- gContestPlayerMonIndex = 3;
+ gContestPlayerMonIndex = CONTESTANT_COUNT - 1;
}
-static bool8 sub_80DA8A4(void)
+static bool8 IsPlayerLinkLeader(void)
{
- if (gContestPlayerMonIndex == gUnknown_02039F2B)
+ if (gContestPlayerMonIndex == gContestLinkLeaderIndex)
return TRUE;
return FALSE;
}
-void sub_80DA8C8(u8 partyIndex)
+void CreateContestMonFromParty(u8 partyIndex)
{
u8 name[20];
u16 heldItem;
@@ -2611,21 +2780,21 @@ void sub_80DA8C8(u8 partyIndex)
StringCopy(name, gSaveBlock2Ptr->playerName);
if (gLinkContestFlags & LINK_CONTEST_FLAG_IS_LINK)
{
- sub_80DF9D4(name);
+ StripPlayerNameForLinkContest(name);
}
memcpy(gContestMons[gContestPlayerMonIndex].trainerName, name, 8);
if (gSaveBlock2Ptr->playerGender == MALE)
gContestMons[gContestPlayerMonIndex].trainerGfxId = OBJ_EVENT_GFX_LINK_BRENDAN;
else
gContestMons[gContestPlayerMonIndex].trainerGfxId = OBJ_EVENT_GFX_LINK_MAY;
- gContestMons[gContestPlayerMonIndex].aiChecks = 0;
- gContestMons[gContestPlayerMonIndex].unk2C[0] = 0;
+ gContestMons[gContestPlayerMonIndex].aiFlags = 0;
+ gContestMons[gContestPlayerMonIndex].highestRank = 0;
gContestMons[gContestPlayerMonIndex].species = GetMonData(&gPlayerParty[partyIndex], MON_DATA_SPECIES);
GetMonData(&gPlayerParty[partyIndex], MON_DATA_NICKNAME, name);
StringGetEnd10(name);
if (gLinkContestFlags & LINK_CONTEST_FLAG_IS_LINK)
{
- sub_80DF9E0(name, GetMonData(&gPlayerParty[partyIndex], MON_DATA_LANGUAGE));
+ StripMonNameForLinkContest(name, GetMonData(&gPlayerParty[partyIndex], MON_DATA_LANGUAGE));
}
memcpy(gContestMons[gContestPlayerMonIndex].nickname, name, POKEMON_NAME_LENGTH + 1);
StringCopy(gContestMons[gContestPlayerMonIndex].nickname, name);
@@ -2675,33 +2844,33 @@ void sub_80DA8C8(u8 partyIndex)
gContestMons[gContestPlayerMonIndex].tough = tough;
}
-void sub_80DAB8C(u8 contestType, u8 rank)
+void SetContestants(u8 contestType, u8 rank)
{
s32 i;
u8 opponentsCount = 0;
u8 opponents[100];
- bool8 r7 = FALSE;
- const u8 * r3;
+ bool8 allowPostgameContestants = FALSE;
+ const u8 * filter;
TryPutPlayerLast();
if (FlagGet(FLAG_SYS_GAME_CLEAR) && !(gLinkContestFlags & LINK_CONTEST_FLAG_IS_LINK))
- r7 = TRUE;
+ allowPostgameContestants = TRUE;
// Find all suitable opponents
- r3 = gPostgameContestOpponentFilter;
+ filter = gPostgameContestOpponentFilter;
for (i = 0; i < ARRAY_COUNT(gContestOpponents); i++)
{
if (rank == gContestOpponents[i].whichRank)
{
- if (r7 == TRUE)
+ if (allowPostgameContestants == TRUE)
{
- if (r3[i] == 1)
+ if (filter[i] == CONTEST_FILTER_NO_POSTGAME)
continue;
}
else
{
- if (r3[i] == 2)
+ if (filter[i] == CONTEST_FILTER_ONLY_POSTGAME)
continue;
}
if (contestType == CONTEST_CATEGORY_COOL && gContestOpponents[i].aiPool_Cool)
@@ -2719,7 +2888,7 @@ void sub_80DAB8C(u8 contestType, u8 rank)
opponents[opponentsCount] = 0xFF;
// Choose three random opponents from the list
- for (i = 0; i < 3; i++)
+ for (i = 0; i < CONTESTANT_COUNT - 1; i++)
{
u16 rnd = Random() % opponentsCount;
s32 j;
@@ -2730,18 +2899,19 @@ void sub_80DAB8C(u8 contestType, u8 rank)
opponentsCount--;
}
- sub_80DA8C8(gContestMonPartyIndex);
+ CreateContestMonFromParty(gContestMonPartyIndex);
}
-void sub_80DACBC(u8 contestType, u8 rank, bool32 isPostgame)
+void SetLinkAIContestants(u8 contestType, u8 rank, bool32 isPostgame)
{
s32 i, j;
u8 opponentsCount = 0;
u8 opponents[100];
- if (gNumLinkContestPlayers == 4)
+ if (gNumLinkContestPlayers == CONTESTANT_COUNT)
return;
+ // Find all suitable AI opponents
for (i = 0; i < ARRAY_COUNT(gContestOpponents); i++)
{
if (rank != gContestOpponents[i].whichRank)
@@ -2765,13 +2935,15 @@ void sub_80DACBC(u8 contestType, u8 rank, bool32 isPostgame)
opponents[opponentsCount++] = i;
}
opponents[opponentsCount] = 0xFF;
+
+ // Fill remaining contestant slots with random AI opponents from the list
for (i = 0; i < CONTESTANT_COUNT - gNumLinkContestPlayers; i++)
{
u16 rnd = GetContestRand() % opponentsCount;
gContestMons[gNumLinkContestPlayers + i] = gContestOpponents[opponents[rnd]];
- sub_80DF9D4(gContestMons[gNumLinkContestPlayers + i].trainerName);
- sub_80DF9E0(gContestMons[gNumLinkContestPlayers + i].nickname, GAME_LANGUAGE);
+ StripPlayerNameForLinkContest(gContestMons[gNumLinkContestPlayers + i].trainerName);
+ StripMonNameForLinkContest(gContestMons[gNumLinkContestPlayers + i].nickname, GAME_LANGUAGE);
for (j = rnd; opponents[j] != 0xFF; j++)
opponents[j] = opponents[j + 1];
opponentsCount--;
@@ -2871,7 +3043,7 @@ static void PrintContestantMonNameWithColor(u8 contestant, u8 color)
Contest_PrintTextToBg0WindowAt(gContestantTurnOrder[contestant], gDisplayedStringBattle, 5, 1, 7);
}
-static u16 sub_80DAFE0(u8 who, u8 contestCategory)
+static u16 CalculateContestantRound1Points(u8 who, u8 contestCategory)
{
u8 statMain;
u8 statSub1;
@@ -2909,47 +3081,47 @@ static u16 sub_80DAFE0(u8 who, u8 contestCategory)
return statMain + (statSub1 + statSub2 + gContestMons[who].sheen) / 2;
}
-void sub_80DB09C(u8 contestCategory)
+void CalculateRound1Points(u8 contestCategory)
{
s32 i;
for (i = 0; i < CONTESTANT_COUNT; i++)
- gContestMonConditions[i] = sub_80DAFE0(i, contestCategory);
+ gContestMonRound1Points[i] = CalculateContestantRound1Points(i, contestCategory);
}
-static u8 sub_80DB0C4(void)
+static u8 CreateJudgeSprite(void)
{
u8 spriteId;
- LoadCompressedSpriteSheet(&gUnknown_08587C00);
+ LoadCompressedSpriteSheet(&sSpriteSheet_Judge);
LoadCompressedPalette(gContest2Pal, 0x110, 32);
- spriteId = CreateSprite(&gSpriteTemplate_8587BE8, 112, 36, 30);
+ spriteId = CreateSprite(&sSpriteTemplate_Judge, 112, 36, 30);
gSprites[spriteId].oam.paletteNum = 1;
gSprites[spriteId].callback = SpriteCallbackDummy;
return spriteId;
}
-static u8 sub_80DB120(void)
+static u8 CreateJudgeSpeechBubbleSprite(void)
{
u8 spriteId;
- LoadCompressedSpriteSheet(&gUnknown_08587C08);
- LoadCompressedSpritePalette(&gUnknown_08587C10);
- spriteId = CreateSprite(&gSpriteTemplate_8587C18, 96, 10, 29);
+ LoadCompressedSpriteSheet(&sSpriteSheet_JudgeSymbols);
+ LoadCompressedSpritePalette(&sSpritePalette_JudgeSymbols);
+ spriteId = CreateSprite(&sSpriteTemplate_JudgeSpeechBubble, 96, 10, 29);
gSprites[spriteId].invisible = TRUE;
gSprites[spriteId].data[0] = gSprites[spriteId].oam.tileNum;
return spriteId;
}
-static u8 sub_80DB174(u16 species, u32 otId, u32 personality, u32 index)
+static u8 CreateContestantSprite(u16 species, u32 otId, u32 personality, u32 index)
{
u8 spriteId;
species = SanitizeSpecies(species);
if (index == gContestPlayerMonIndex)
- HandleLoadSpecialPokePic_2(gMonBackPicTable + species, gMonSpritesGfxPtr->sprites[0], species, personality);
+ HandleLoadSpecialPokePic_2(&gMonBackPicTable[species], gMonSpritesGfxPtr->sprites[0], species, personality);
else
- HandleLoadSpecialPokePic_DontHandleDeoxys(gMonBackPicTable + species, gMonSpritesGfxPtr->sprites[0], species, personality);
+ HandleLoadSpecialPokePic_DontHandleDeoxys(&gMonBackPicTable[species], gMonSpritesGfxPtr->sprites[0], species, personality);
LoadCompressedPalette(GetMonSpritePalFromSpeciesAndPersonality(species, otId, personality), 0x120, 0x20);
SetMultiuseSpriteTemplateToPokemon(species, 0);
@@ -2987,27 +3159,28 @@ static void SwapMoveDescAndContestTilemaps(void)
CpuCopy16(gContestResources->contestBgTilemaps[2], gContestResources->contestBgTilemaps[2] + 0x500, 32 * 20);
}
-static u16 sub_80DB2EC(u16 a0, u8 a1)
+// Functionally unused
+static u16 GetMoveEffectSymbolTileOffset(u16 move, u8 contestant)
{
- u16 var;
+ u16 offset;
- switch (gContestEffects[gContestMoves[a0].effect].effectType)
+ switch (gContestEffects[gContestMoves[move].effect].effectType)
{
case 0:
case 1:
case 8:
- var = 0x9082;
+ offset = 0x9082;
break;
case 2:
case 3:
- var = 0x9088;
+ offset = 0x9088;
break;
default:
- var = 0x9086;
+ offset = 0x9086;
break;
}
- var += 0x9000 + (a1 << 12);
- return var;
+ offset += 0x9000 + (contestant << 12);
+ return offset;
}
static void PrintContestMoveDescription(u16 a)
@@ -3054,158 +3227,163 @@ static void PrintContestMoveDescription(u16 a)
// Empty hearts
ContestBG_FillBoxWithTile(0, 0x5014, 0x15, 0x20, numHearts, 0x01, 0x11);
- FillWindowPixelBuffer(CONTEST_WINDOW_MOVE_DESCRIPTION, PIXEL_FILL(0));
- Contest_PrintTextToBg0WindowStd(CONTEST_WINDOW_MOVE_DESCRIPTION, gContestEffectDescriptionPointers[gContestMoves[a].effect]);
- Contest_PrintTextToBg0WindowStd(CONTEST_WINDOW_SLASH, gText_Slash);
+ FillWindowPixelBuffer(WIN_MOVE_DESCRIPTION, PIXEL_FILL(0));
+ Contest_PrintTextToBg0WindowStd(WIN_MOVE_DESCRIPTION, gContestEffectDescriptionPointers[gContestMoves[a].effect]);
+ Contest_PrintTextToBg0WindowStd(WIN_SLASH, gText_Slash);
}
-static void sub_80DB4E0(u16 move, u8 b)
+static void DrawMoveEffectSymbol(u16 move, u8 contestant)
{
- u8 r7 = gContestantTurnOrder[b] * 5 + 2;
+ u8 contestantOffset = gContestantTurnOrder[contestant] * 5 + 2;
- if (!Contest_IsMonsTurnDisabled(b) && move != MOVE_NONE)
+ if (!Contest_IsMonsTurnDisabled(contestant) && move != MOVE_NONE)
{
- u16 tile = sub_80DB2EC(move, b);
+ u16 tile = GetMoveEffectSymbolTileOffset(move, contestant);
- ContestBG_FillBoxWithIncrementingTile(0, tile, 20, r7, 2, 1, 17, 1);
- ContestBG_FillBoxWithIncrementingTile(0, tile + 16, 20, r7 + 1, 2, 1, 17, 1);
+ ContestBG_FillBoxWithIncrementingTile(0, tile, 20, contestantOffset, 2, 1, 17, 1);
+ ContestBG_FillBoxWithIncrementingTile(0, tile + 16, 20, contestantOffset + 1, 2, 1, 17, 1);
}
else
{
- ContestBG_FillBoxWithTile(0, 0, 20, r7, 2, 2, 17);
+ ContestBG_FillBoxWithTile(0, 0, 20, contestantOffset, 2, 2, 17);
}
}
-static void sub_80DB584(void)
+// Unused
+static void DrawMoveEffectSymbols(void)
{
s32 i;
for (i = 0; i < CONTESTANT_COUNT; i++)
- sub_80DB4E0(eContestantStatus[i].currMove, i);
+ DrawMoveEffectSymbol(eContestantStatus[i].currMove, i);
}
-static u16 sub_80DB5B0(void)
+static u16 GetStarTileOffset(void)
{
return 0x2034;
}
-static bool8 sub_80DB5B8(u8 contestantIdx, bool8 resetMod)
+static bool8 UpdateConditionStars(u8 contestantIdx, bool8 resetMod)
{
- u8 r6;
- s32 r4;
+ u8 contestantOffset;
+ s32 numStars;
- if (eContestantStatus[contestantIdx].conditionMod == 0)
+ if (eContestantStatus[contestantIdx].conditionMod == CONDITION_NO_CHANGE)
return FALSE;
- r6 = gContestantTurnOrder[contestantIdx] * 5 + 2;
- r4 = eContestantStatus[contestantIdx].condition / 10;
- if (eContestantStatus[contestantIdx].conditionMod == 1)
+ contestantOffset = gContestantTurnOrder[contestantIdx] * 5 + 2;
+ numStars = eContestantStatus[contestantIdx].condition / 10;
+ if (eContestantStatus[contestantIdx].conditionMod == CONDITION_GAIN)
{
- ContestBG_FillBoxWithTile(0, sub_80DB5B0(), 19, r6, 1, r4, 17);
+ ContestBG_FillBoxWithTile(0, GetStarTileOffset(), 19, contestantOffset, 1, numStars, 17);
if (resetMod)
{
- PlaySE(SE_EXPMAX);
- eContestantStatus[contestantIdx].conditionMod = 0;
+ PlaySE(SE_EXP_MAX);
+ eContestantStatus[contestantIdx].conditionMod = CONDITION_NO_CHANGE;
}
}
- else
+ else // CONDITION_LOSE
{
- ContestBG_FillBoxWithTile(0, 0, 19, r6 + r4, 1, 3 - r4, 17);
+ ContestBG_FillBoxWithTile(0, 0, 19, contestantOffset + numStars, 1, 3 - numStars, 17);
if (resetMod)
{
- PlaySE(SE_FU_ZAKU2);
- eContestantStatus[contestantIdx].conditionMod = 0;
+ PlaySE(SE_CONTEST_CONDITION_LOSE);
+ eContestantStatus[contestantIdx].conditionMod = CONDITION_NO_CHANGE;
}
}
return TRUE;
}
-static void sub_80DB69C(void)
+static void DrawConditionStars(void)
{
s32 i;
- s32 r6;
+ s32 numStars;
for (i = 0; i < CONTESTANT_COUNT; i++)
{
- u8 r4 = gContestantTurnOrder[i] * 5 + 2;
- u16 r5 = sub_80DB5B0();
+ u8 contestantOffset = gContestantTurnOrder[i] * 5 + 2;
+ u16 starOffset = GetStarTileOffset();
- r6 = eContestantStatus[i].condition / 10;
- ContestBG_FillBoxWithTile(0, r5, 19, r4, 1, r6, 17);
- ContestBG_FillBoxWithTile(0, 0, 19, r4 + r6, 1, 3 - r6, 17);
+ numStars = eContestantStatus[i].condition / 10;
+ ContestBG_FillBoxWithTile(0, starOffset, 19, contestantOffset, 1, numStars, 17);
+ ContestBG_FillBoxWithTile(0, 0, 19, contestantOffset + numStars, 1, 3 - numStars, 17);
}
}
-static u16 sub_80DB748(u8 status)
+static u16 GetStatusSymbolTileOffset(u8 status)
{
- u16 var = 0;
+ u16 offset = 0;
switch (status)
{
- case 0:
- var = 0x80;
+ case STAT_SYMBOL_CIRCLE: // For resistant
+ offset = 0x80;
break;
- case 1:
- var = 0x84;
+ case STAT_SYMBOL_WAVE: // For nervous
+ offset = 0x84;
break;
- case 2:
- var = 0x86;
+ case STAT_SYMBOL_X: // For turn skipped
+ offset = 0x86;
break;
- case 3:
- var = 0x88;
+ case STAT_SYMBOL_SWIRL: // For jammed/unnerved
+ offset = 0x88;
break;
- case 4:
- var = 0x82;
+ case STAT_SYMBOL_SQUARE: // Never used
+ offset = 0x82;
break;
}
- var += 0x9000;
- return var;
+ offset += 0x9000;
+ return offset;
}
-static bool8 sub_80DB798(u8 a)
+static bool8 DrawStatusSymbol(u8 contestant)
{
- bool8 r9 = TRUE;
- u16 r8 = 0;
- u8 r7 = gContestantTurnOrder[a] * 5 + 2;
+ bool8 statused = TRUE;
+ u16 symbolOffset = 0;
+ u8 contestantOffset = gContestantTurnOrder[contestant] * 5 + 2;
- if (eContestantStatus[a].resistant != 0 || eContestantStatus[a].immune != 0 || eContestantStatus[a].jamSafetyCount != 0 || eContestantStatus[a].jamReduction != 0)
- r8 = sub_80DB748(0);
- else if (eContestantStatus[a].nervous)
- r8 = sub_80DB748(1);
- else if (eContestantStatus[a].numTurnsSkipped != 0 || eContestantStatus[a].noMoreTurns)
- r8 = sub_80DB748(2);
+ if (eContestantStatus[contestant].resistant
+ || eContestantStatus[contestant].immune
+ || eContestantStatus[contestant].jamSafetyCount != 0
+ || eContestantStatus[contestant].jamReduction != 0)
+ symbolOffset = GetStatusSymbolTileOffset(STAT_SYMBOL_CIRCLE);
+ else if (eContestantStatus[contestant].nervous)
+ symbolOffset = GetStatusSymbolTileOffset(STAT_SYMBOL_WAVE);
+ else if (eContestantStatus[contestant].numTurnsSkipped != 0 || eContestantStatus[contestant].noMoreTurns)
+ symbolOffset = GetStatusSymbolTileOffset(STAT_SYMBOL_X);
else
- r9 = FALSE;
- if (r9)
+ statused = FALSE;
+
+ if (statused)
{
- ContestBG_FillBoxWithIncrementingTile(0, r8, 20, r7, 2, 1, 17, 1);
- ContestBG_FillBoxWithIncrementingTile(0, r8 + 16, 20, r7 + 1, 2, 1, 17, 1);
+ ContestBG_FillBoxWithIncrementingTile(0, symbolOffset, 20, contestantOffset, 2, 1, 17, 1);
+ ContestBG_FillBoxWithIncrementingTile(0, symbolOffset + 16, 20, contestantOffset + 1, 2, 1, 17, 1);
}
else
{
- ContestBG_FillBoxWithTile(0, 0, 20, r7, 2, 2, 17);
+ ContestBG_FillBoxWithTile(0, 0, 20, contestantOffset, 2, 2, 17);
}
- return r9;
+ return statused;
}
-static void sub_80DB884(void)
+static void DrawStatusSymbols(void)
{
s32 i;
for (i = 0; i < CONTESTANT_COUNT; i++)
- sub_80DB798(i);
+ DrawStatusSymbol(i);
}
static void ContestClearGeneralTextWindow(void)
{
- FillWindowPixelBuffer(CONTEST_WINDOW_GENERAL_TEXT, PIXEL_FILL(0));
- CopyWindowToVram(CONTEST_WINDOW_GENERAL_TEXT, 2);
+ FillWindowPixelBuffer(WIN_GENERAL_TEXT, PIXEL_FILL(0));
+ CopyWindowToVram(WIN_GENERAL_TEXT, 2);
Contest_SetBgCopyFlags(0);
}
static u16 GetChosenMove(u8 contestant)
{
if (Contest_IsMonsTurnDisabled(contestant))
- return 0;
+ return MOVE_NONE;
if (contestant == gContestPlayerMonIndex)
{
return gContestMons[contestant].moves[eContest.playerMoveChoice];
@@ -3230,27 +3408,24 @@ static void GetAllChosenMoves(void)
static void RankContestants(void)
{
- s32 i;
- s32 j;
+ s32 i, j;
s16 arr[CONTESTANT_COUNT];
for (i = 0; i < CONTESTANT_COUNT; i++)
{
- eContestantStatus[i].pointTotal += eContestantStatus[i].appeal2;
+ eContestantStatus[i].pointTotal += eContestantStatus[i].appeal;
arr[i] = eContestantStatus[i].pointTotal;
}
// Sort the point totals using bubble-sort.
- for (i = 0; i < 3; i++)
+ for (i = 0; i < CONTESTANT_COUNT - 1; i++)
{
- for (j = 3; j > i; j--)
+ for (j = CONTESTANT_COUNT - 1; j > i; j--)
{
if (arr[j - 1] < arr[j])
{
- u16 temp = arr[j];
-
- arr[j] = arr[j - 1];
- arr[j - 1] = temp;
+ u16 temp;
+ SWAP(arr[j], arr[j - 1], temp);
}
}
}
@@ -3279,7 +3454,7 @@ static void RankContestants(void)
ApplyNextTurnOrder();
}
-static void sub_80DBA18(void)
+static void SetAttentionLevels(void)
{
s32 i;
@@ -3289,13 +3464,13 @@ static void sub_80DBA18(void)
if (eContestantStatus[i].currMove == MOVE_NONE)
attentionLevel = 5;
- else if (eContestantStatus[i].appeal2 <= 0)
+ else if (eContestantStatus[i].appeal <= 0)
attentionLevel = 0;
- else if (eContestantStatus[i].appeal2 < 30)
+ else if (eContestantStatus[i].appeal < 30)
attentionLevel = 1;
- else if (eContestantStatus[i].appeal2 < 60)
+ else if (eContestantStatus[i].appeal < 60)
attentionLevel = 2;
- else if (eContestantStatus[i].appeal2 < 80)
+ else if (eContestantStatus[i].appeal < 80)
attentionLevel = 3;
else
attentionLevel = 4;
@@ -3308,18 +3483,17 @@ static bool8 ContestantCanUseTurn(u8 contestant)
{
if (eContestantStatus[contestant].numTurnsSkipped != 0 || eContestantStatus[contestant].noMoreTurns)
return FALSE;
- else
- return TRUE;
+ return TRUE;
}
-static void sub_80DBAA0(void)
+static void SetContestantStatusesForNextRound(void)
{
s32 i;
for (i = 0; i < CONTESTANT_COUNT; i++)
{
- eContestantStatus[i].appeal2 = 0;
- eContestantStatus[i].appeal1 = 0;
+ eContestantStatus[i].appeal = 0;
+ eContestantStatus[i].baseAppeal = 0;
eContestantStatus[i].jamSafetyCount = 0;
if (eContestantStatus[i].numTurnsSkipped > 0)
eContestantStatus[i].numTurnsSkipped--;
@@ -3332,9 +3506,9 @@ static void sub_80DBAA0(void)
eContestantStatus[i].nervous = FALSE;
eContestantStatus[i].effectStringId = CONTEST_STRING_NONE;
eContestantStatus[i].effectStringId2 = CONTEST_STRING_NONE;
- eContestantStatus[i].conditionMod = 0;
- eContestantStatus[i].unk15_2 = eContestantStatus[i].disappointedRepeat;
- eContestantStatus[i].disappointedRepeat = FALSE;
+ eContestantStatus[i].conditionMod = CONDITION_NO_CHANGE;
+ eContestantStatus[i].repeatedPrevMove = eContestantStatus[i].repeatedMove;
+ eContestantStatus[i].repeatedMove = FALSE;
eContestantStatus[i].turnOrderModAction = 0;
eContestantStatus[i].appealTripleCondition = 0;
if (eContestantStatus[i].turnSkipped)
@@ -3344,64 +3518,62 @@ static void sub_80DBAA0(void)
}
if (eContestantStatus[i].exploded)
{
- eContestantStatus[i].noMoreTurns = 1;
- eContestantStatus[i].exploded = 0;
+ eContestantStatus[i].noMoreTurns = TRUE;
+ eContestantStatus[i].exploded = FALSE;
}
eContestantStatus[i].overrideCategoryExcitementMod = 0;
}
for (i = 0; i < CONTESTANT_COUNT; i++)
{
eContestantStatus[i].prevMove = eContestantStatus[i].currMove;
- eContest.moveHistory[eContest.turnNumber][i] = eContestantStatus[i].currMove;
- eContest.excitementHistory[eContest.turnNumber][i] = Contest_GetMoveExcitement(eContestantStatus[i].currMove);
+ eContest.moveHistory[eContest.appealNumber][i] = eContestantStatus[i].currMove;
+ eContest.excitementHistory[eContest.appealNumber][i] = Contest_GetMoveExcitement(eContestantStatus[i].currMove);
eContestantStatus[i].currMove = MOVE_NONE;
}
- eContestResources10.excitementFrozen = 0;
+ eContestExcitement.frozen = FALSE;
}
-bool8 Contest_IsMonsTurnDisabled(u8 a)
+bool8 Contest_IsMonsTurnDisabled(u8 contestant)
{
- if (eContestantStatus[a].numTurnsSkipped != 0 || eContestantStatus[a].noMoreTurns)
+ if (eContestantStatus[contestant].numTurnsSkipped != 0 || eContestantStatus[contestant].noMoreTurns)
return TRUE;
- else
- return FALSE;
+ return FALSE;
}
-static void sub_80DBCE0(u8 contestant)
+static void CalculateTotalPointsForContestant(u8 contestant)
{
- gUnknown_02039F18[contestant] = sub_80DBD34(contestant);
- gUnknown_02039F08[contestant] = gContestMonConditions[contestant] + gUnknown_02039F18[contestant];
+ gContestMonRound2Points[contestant] = GetContestantRound2Points(contestant);
+ gContestMonTotalPoints[contestant] = gContestMonRound1Points[contestant] + gContestMonRound2Points[contestant];
}
-static void sub_80DBD18(void)
+static void CalculateFinalScores(void)
{
s32 i;
for (i = 0; i < CONTESTANT_COUNT; i++)
- sub_80DBCE0(i);
+ CalculateTotalPointsForContestant(i);
DetermineFinalStandings();
}
-static s16 sub_80DBD34(u8 contestant)
+static s16 GetContestantRound2Points(u8 contestant)
{
- return gUnknown_02039F10[contestant] * 2;
+ return gContestMonAppealPointTotals[contestant] * 2;
}
static void DetermineFinalStandings(void)
{
u16 randomOrdering[CONTESTANT_COUNT] = {0};
- struct UnknownContestStruct6 sp8[CONTESTANT_COUNT];
+ struct ContestFinalStandings standings[CONTESTANT_COUNT];
s32 i;
- s32 j;
+ // Seed random order in case of ties
for (i = 0; i < CONTESTANT_COUNT; i++)
{
- s32 r2;
-
+ s32 j;
randomOrdering[i] = Random();
- for (r2 = 0; r2 < i; r2++)
+ for (j = 0; j < i; j++)
{
- if (randomOrdering[i] == randomOrdering[r2])
+ if (randomOrdering[i] == randomOrdering[j])
{
i--;
break;
@@ -3409,42 +3581,47 @@ static void DetermineFinalStandings(void)
}
}
+ // Init data for ranking contestants
for (i = 0; i < CONTESTANT_COUNT; i++)
{
- sp8[i].unk0 = gUnknown_02039F08[i];
- sp8[i].unk4 = gContestMonConditions[i];
- sp8[i].unk8 = randomOrdering[i];
- sp8[i].unkC = i;
+ standings[i].totalPoints = gContestMonTotalPoints[i];
+ standings[i].round1Points = gContestMonRound1Points[i];
+ standings[i].random = randomOrdering[i];
+ standings[i].contestant = i;
}
- for (i = 0; i < 3; i++)
+ // Rank contestants
+ for (i = 0; i < CONTESTANT_COUNT - 1; i++)
{
- for (j = 3; j > i; j--)
+ s32 j;
+ for (j = CONTESTANT_COUNT - 1; j > i; j--)
{
- if (sub_80DBF30(j - 1, j, sp8))
+ if (DidContestantPlaceHigher(j - 1, j, standings))
{
- struct UnknownContestStruct6 temp;
-
- temp.unk0 = sp8[j - 1].unk0;
- temp.unk4 = sp8[j - 1].unk4;
- temp.unk8 = sp8[j - 1].unk8;
- temp.unkC = sp8[j - 1].unkC;
-
- sp8[j - 1].unk0 = sp8[j].unk0;
- sp8[j - 1].unk4 = sp8[j].unk4;
- sp8[j - 1].unk8 = sp8[j].unk8;
- sp8[j - 1].unkC = sp8[j].unkC;
-
- sp8[j].unk0 = temp.unk0;
- sp8[j].unk4 = temp.unk4;
- sp8[j].unk8 = temp.unk8;
- sp8[j].unkC = temp.unkC;
+ // Swap contestants in array
+ struct ContestFinalStandings temp;
+
+ temp.totalPoints = standings[j - 1].totalPoints;
+ temp.round1Points = standings[j - 1].round1Points;
+ temp.random = standings[j - 1].random;
+ temp.contestant = standings[j - 1].contestant;
+
+ standings[j - 1].totalPoints = standings[j].totalPoints;
+ standings[j - 1].round1Points = standings[j].round1Points;
+ standings[j - 1].random = standings[j].random;
+ standings[j - 1].contestant = standings[j].contestant;
+
+ standings[j].totalPoints = temp.totalPoints;
+ standings[j].round1Points = temp.round1Points;
+ standings[j].random = temp.random;
+ standings[j].contestant = temp.contestant;
}
}
}
+ // Assign placements. i is the placing (0 is 1st, 1 is 2nd...)
for (i = 0; i < CONTESTANT_COUNT; i++)
- gContestFinalStandings[sp8[i].unkC] = i;
+ gContestFinalStandings[standings[i].contestant] = i;
}
void SaveLinkContestResults(void)
@@ -3458,19 +3635,22 @@ void SaveLinkContestResults(void)
}
}
-static bool8 sub_80DBF30(s32 a, s32 b, struct UnknownContestStruct6 *c)
+static bool8 DidContestantPlaceHigher(s32 a, s32 b, struct ContestFinalStandings *standings)
{
bool8 retVal;
- if (c[a].unk0 < c[b].unk0)
+ // Rank contestants first based on total points
+ if (standings[a].totalPoints < standings[b].totalPoints)
retVal = TRUE;
- else if (c[a].unk0 > c[b].unk0)
+ else if (standings[a].totalPoints > standings[b].totalPoints)
retVal = FALSE;
- else if (c[a].unk4 < c[b].unk4)
+ // If tied, rank on round 1 points
+ else if (standings[a].round1Points < standings[b].round1Points)
retVal = TRUE;
- else if (c[a].unk4 > c[b].unk4)
+ else if (standings[a].round1Points > standings[b].round1Points)
retVal = FALSE;
- else if (c[a].unk8 < c[b].unk8)
+ // If tied again, choose randomly
+ else if (standings[a].random < standings[b].random)
retVal = TRUE;
else
retVal = FALSE;
@@ -3490,200 +3670,218 @@ static void FillContestantWindowBgs(void)
int i;
for(i = 0; i < CONTESTANT_COUNT; i++)
- {
ContestBG_FillBoxWithTile(0, 0, 0x16, 2 + i * 5, 8, 2, 0x11);
- }
}
-static u16 sub_80DBFC8(u8 a)
+static u16 GetAppealHeartTileOffset(u8 contestant)
{
- u16 var;
+ u16 offset;
- if (a == 0)
- var = 0x5011;
- else if (a == 1)
- var = 0x6011;
- else if (a == 2)
- var = 0x7011;
+ if (contestant == 0)
+ offset = 0x5011;
+ else if (contestant == 1)
+ offset = 0x6011;
+ else if (contestant == 2)
+ offset = 0x7011;
else
- var = 0x8011;
- return var + 1;
+ offset = 0x8011;
+ return offset + 1;
}
-static s8 sub_80DBFFC(s16 a)
+static s8 GetNumHeartsFromAppealPoints(s16 appeal)
{
- s8 retVal = a / 10;
+ s8 hearts = appeal / 10;
- if (retVal > 16)
- retVal = 16;
- else if (retVal < -16)
- retVal = -16;
- return retVal;
+ if (hearts > 16)
+ hearts = 16;
+ else if (hearts < -16)
+ hearts = -16;
+ return hearts;
}
-static u8 sub_80DC028(s16 a, s16 b, u8 c)
+#define tNumHearts data[0]
+#define tHeartsDelta data[1]
+#define tHeartsSign data[2]
+#define tContestant data[3]
+#define tDelayTimer data[10]
+
+static u8 UpdateAppealHearts(s16 startAppeal, s16 appealDelta, u8 contestant)
{
u8 taskId;
- s8 r4;
- s8 r5;
-
- gContestResources->field_14[c].unk2_2 = 1;
- taskId = CreateTask(sub_80DC0F4, 20);
- r4 = sub_80DBFFC(a);
- r5 = sub_80DBFFC(a + b) - r4;
- sub_80DBFC8(c); // unused return value
- gTasks[taskId].data[0] = abs(r4);
- gTasks[taskId].data[1] = r5;
- if (r4 > 0 || (r4 == 0 && r5 > 0))
- gTasks[taskId].data[2] = 1;
+ s8 startHearts;
+ s8 heartsDelta;
+
+ eContestGfxState[contestant].updatingAppealHearts = TRUE;
+ taskId = CreateTask(Task_UpdateAppealHearts, 20);
+ startHearts = GetNumHeartsFromAppealPoints(startAppeal);
+ heartsDelta = GetNumHeartsFromAppealPoints(startAppeal + appealDelta) - startHearts;
+ GetAppealHeartTileOffset(contestant); // unused return value
+ gTasks[taskId].tNumHearts = abs(startHearts);
+ gTasks[taskId].tHeartsDelta = heartsDelta;
+ if (startHearts > 0 || (startHearts == 0 && heartsDelta > 0))
+ gTasks[taskId].tHeartsSign = 1;
else
- gTasks[taskId].data[2] = -1;
- gTasks[taskId].data[3] = c;
+ gTasks[taskId].tHeartsSign = -1;
+ gTasks[taskId].tContestant = contestant;
return taskId;
}
-static void sub_80DC0F4(u8 taskId)
+static void Task_UpdateAppealHearts(u8 taskId)
{
- u8 r7 = gTasks[taskId].data[3];
- s16 r3 = gTasks[taskId].data[0];
- s16 r1 = gTasks[taskId].data[1];
+ u8 contestant = gTasks[taskId].tContestant;
+ s16 startHearts = gTasks[taskId].tNumHearts;
+ s16 heartsDelta = gTasks[taskId].tHeartsDelta;
- if (++gTasks[taskId].data[10] > 14)
+ if (++gTasks[taskId].tDelayTimer > 14)
{
- u16 r6;
- u8 r5;
- u8 r10;
- u8 r11;
+ u16 heartOffset;
+ u8 newNumHearts;
+ u8 pitchMod;
+ bool8 onSecondLine;
- gTasks[taskId].data[10] = 0;
- if (gTasks[taskId].data[1] == 0)
+ gTasks[taskId].tDelayTimer = 0;
+ if (gTasks[taskId].tHeartsDelta == 0)
{
+ // No more hearts to add/remove, end
DestroyTask(taskId);
- gContestResources->field_14[r7].unk2_2 = 0;
+ eContestGfxState[contestant].updatingAppealHearts = FALSE;
return;
}
- else if (r3 == 0)
+ else if (startHearts == 0)
{
- if (r1 < 0)
+ if (heartsDelta < 0)
{
- r6 = sub_80DBFC8(r7) + 2;
- gTasks[taskId].data[1]++;
+ // Losing hearts, get black heart offset
+ heartOffset = GetAppealHeartTileOffset(contestant) + 2;
+ gTasks[taskId].tHeartsDelta++;
}
else
{
- r6 = sub_80DBFC8(r7);
- gTasks[taskId].data[1]--;
+ // Gaining hearts, get red heart offset
+ heartOffset = GetAppealHeartTileOffset(contestant);
+ gTasks[taskId].tHeartsDelta--;
}
- r5 = gTasks[taskId].data[0]++;
+ newNumHearts = gTasks[taskId].tNumHearts++;
}
else
{
- if (gTasks[taskId].data[2] < 0)
+ if (gTasks[taskId].tHeartsSign < 0)
{
- if (r1 < 0)
+ // Hearts currently black (negative)
+ if (heartsDelta < 0)
{
- r5 = gTasks[taskId].data[0]++;
- gTasks[taskId].data[1]++;
- r6 = sub_80DBFC8(r7) + 2;
+ // Losing points, add black heart
+ newNumHearts = gTasks[taskId].tNumHearts++;
+ gTasks[taskId].tHeartsDelta++;
+ heartOffset = GetAppealHeartTileOffset(contestant) + 2;
}
else
{
- r5 = --gTasks[taskId].data[0];
- r6 = 0;
- gTasks[taskId].data[1]--;
+ // Gaining points, remove black heart
+ newNumHearts = --gTasks[taskId].tNumHearts;
+ heartOffset = 0;
+ gTasks[taskId].tHeartsDelta--;
}
}
else
{
- if (r1 < 0)
+ // Hearts currently red (positive)
+ if (heartsDelta < 0)
{
- r5 = --gTasks[taskId].data[0];
- r6 = 0;
- gTasks[taskId].data[1]++;
+ // Losing points, remove red heart
+ newNumHearts = --gTasks[taskId].tNumHearts;
+ heartOffset = 0;
+ gTasks[taskId].tHeartsDelta++;
}
else
{
- r5 = gTasks[taskId].data[0]++;
- gTasks[taskId].data[1]--;
- r6 = sub_80DBFC8(r7);
+ // Gaining points, add red heart
+ newNumHearts = gTasks[taskId].tNumHearts++;
+ gTasks[taskId].tHeartsDelta--;
+ heartOffset = GetAppealHeartTileOffset(contestant);
}
}
}
- r10 = r5;
- r11 = 0;
+ pitchMod = newNumHearts;
+ onSecondLine = FALSE;
- if (r5 > 7)
+ // Check if wrapping to second line of hearts
+ if (newNumHearts > 7)
{
- r11 = 1;
- r5-= 8;
+ onSecondLine = TRUE;
+ newNumHearts -= 8;
}
- ContestBG_FillBoxWithTile(0, r6, r5 + 22, gContestantTurnOrder[r7] * 5 + 2 + r11, 1, 1, 17);
- if (r1 > 0)
+ ContestBG_FillBoxWithTile(0, heartOffset, newNumHearts + 22, gContestantTurnOrder[contestant] * 5 + 2 + onSecondLine, 1, 1, 17);
+ if (heartsDelta > 0)
{
- PlaySE(SE_C_GAJI);
+ PlaySE(SE_CONTEST_HEART);
m4aMPlayImmInit(&gMPlayInfo_SE1);
- m4aMPlayPitchControl(&gMPlayInfo_SE1, 0xFFFF, r10 * 256);
+ m4aMPlayPitchControl(&gMPlayInfo_SE1, 0xFFFF, pitchMod * 256);
}
else
{
PlaySE(SE_BOO);
}
- if (!r11 && !r5 && !r6)
- gTasks[taskId].data[2] = -gTasks[taskId].data[2];
+ if (!onSecondLine && newNumHearts == 0 && heartOffset == 0)
+ gTasks[taskId].tHeartsSign = -gTasks[taskId].tHeartsSign;
}
}
-static void sub_80DC2BC(void)
+static void CreateSliderHeartSprites(void)
{
s32 i;
- LoadSpriteSheet(&gUnknown_08587A74);
+ LoadSpriteSheet(&sSpriteSheet_SliderHeart);
for (i = 0; i < CONTESTANT_COUNT; i++)
{
- u8 y = gUnknown_08587A6C[gContestantTurnOrder[i]];
+ u8 y = sSliderHeartYPositions[gContestantTurnOrder[i]];
- gContestResources->field_14[i].unk0 = CreateSprite(&gSpriteTemplate_8587AD0, 180, y, 1);
+ eContestGfxState[i].sliderHeartSpriteId = CreateSprite(&sSpriteTemplate_SliderHeart, 180, y, 1);
}
}
-static void sub_80DC308(u8 contestant)
+#define sContestant data[0]
+#define sTargetX data[1]
+#define sMoveX data[2]
+
+static void UpdateHeartSlider(u8 contestant)
{
u8 spriteId;
- s16 r5;
-
- gContestResources->field_14[contestant].unk2_0 = 1;
- spriteId = gContestResources->field_14[contestant].unk0;
- r5 = eContestantStatus[contestant].pointTotal / 10 * 2;
- if (r5 > 56)
- r5 = 56;
- else if (r5 < 0)
- r5 = 0;
+ s16 slideTarget;
+
+ eContestGfxState[contestant].sliderUpdating = TRUE;
+ spriteId = eContestGfxState[contestant].sliderHeartSpriteId;
+ slideTarget = eContestantStatus[contestant].pointTotal / 10 * 2;
+ if (slideTarget > 56)
+ slideTarget = 56;
+ else if (slideTarget < 0)
+ slideTarget = 0;
gSprites[spriteId].invisible = FALSE;
- gSprites[spriteId].data[0] = contestant;
- gSprites[spriteId].data[1] = r5;
- if (gSprites[spriteId].data[1] > gSprites[spriteId].pos2.x)
- gSprites[spriteId].data[2] = 1;
+ gSprites[spriteId].sContestant = contestant;
+ gSprites[spriteId].sTargetX = slideTarget;
+ if (gSprites[spriteId].sTargetX > gSprites[spriteId].pos2.x)
+ gSprites[spriteId].sMoveX = 1;
else
- gSprites[spriteId].data[2] = -1;
- gSprites[spriteId].callback = sub_80DC408;
+ gSprites[spriteId].sMoveX = -1;
+ gSprites[spriteId].callback = SpriteCB_UpdateHeartSlider;
}
-static void sub_80DC3AC(void)
+static void UpdateHeartSliders(void)
{
s32 i;
for (i = 0; i < CONTESTANT_COUNT; i++)
- sub_80DC308(i);
+ UpdateHeartSlider(i);
}
-static bool8 sub_80DC3C4(void)
+static bool8 SlidersDoneUpdating(void)
{
s32 i;
for (i = 0; i < CONTESTANT_COUNT; i++)
{
- if (gContestResources->field_14[i].unk2_0)
+ if (eContestGfxState[i].sliderUpdating)
break;
}
if (i == CONTESTANT_COUNT)
@@ -3692,57 +3890,64 @@ static bool8 sub_80DC3C4(void)
return FALSE;
}
-static void sub_80DC408(struct Sprite *sprite)
+static void SpriteCB_UpdateHeartSlider(struct Sprite *sprite)
{
- if (sprite->pos2.x == sprite->data[1])
+ if (sprite->pos2.x == sprite->sTargetX)
{
- gContestResources->field_14[sprite->data[0]].unk2_0 = 0;
+ eContestGfxState[sprite->sContestant].sliderUpdating = FALSE;
sprite->callback = SpriteCallbackDummy;
}
else
{
- sprite->pos2.x += sprite->data[2];
+ sprite->pos2.x += sprite->sMoveX;
}
}
-static void sub_80DC44C(void)
+#undef sContestant
+#undef sTargetX
+#undef sMoveX
+
+// Y positions change as the contestants change order
+static void UpdateSliderHeartSpriteYPositions(void)
{
s32 i;
for (i = 0; i < CONTESTANT_COUNT; i++)
- gSprites[gContestResources->field_14[i].unk0].pos1.y = gUnknown_08587A6C[gContestantTurnOrder[i]];
+ gSprites[eContestGfxState[i].sliderHeartSpriteId].pos1.y = sSliderHeartYPositions[gContestantTurnOrder[i]];
}
-static void sub_80DC490(bool8 a)
+// Used to hide (or subsequently reshow) the bottom two slider hearts that get hidden by text windows by moving them offscreen
+static void SetBottomSliderHeartsInvisibility(bool8 invisible)
{
s32 i;
for (i = 0; i < CONTESTANT_COUNT; i++)
{
+ // Skip the top two contestants sliders
if (gContestantTurnOrder[i] > 1)
{
- if (!a)
- gSprites[gContestResources->field_14[i].unk0].pos1.x = 180;
+ if (!invisible)
+ gSprites[eContestGfxState[i].sliderHeartSpriteId].pos1.x = 180;
else
- gSprites[gContestResources->field_14[i].unk0].pos1.x = 256;
+ gSprites[eContestGfxState[i].sliderHeartSpriteId].pos1.x = 256;
}
}
}
-static void sub_80DC4F0(void)
+static void CreateNextTurnSprites(void)
{
s32 i;
- LoadSpritePalette(&gUnknown_08587B08);
+ LoadSpritePalette(&sSpritePalette_NextTurn);
for (i = 0; i < CONTESTANT_COUNT; i++)
{
- LoadCompressedSpriteSheet(&gUnknown_08587AE8[i]);
- gContestResources->field_14[i].unk1 = CreateSprite(&gSpriteTemplate_8587B18[i],
+ LoadCompressedSpriteSheet(&sSpriteSheet_NextTurn[i]);
+ eContestGfxState[i].nextTurnSpriteId = CreateSprite(&sSpriteTemplates_NextTurn[i],
204,
- gUnknown_08587A70[gContestantTurnOrder[i]],
+ sNextTurnSpriteYPositions[gContestantTurnOrder[i]],
0);
- SetSubspriteTables(&gSprites[gContestResources->field_14[i].unk1], gSubspriteTables_8587B80);
- gSprites[gContestResources->field_14[i].unk1].invisible = TRUE;
+ SetSubspriteTables(&gSprites[eContestGfxState[i].nextTurnSpriteId], sSubspriteTable_NextTurn);
+ gSprites[eContestGfxState[i].nextTurnSpriteId].invisible = TRUE;
}
}
@@ -3750,189 +3955,193 @@ static void CreateApplauseMeterSprite(void)
{
u8 spriteId;
- LoadCompressedSpriteSheet(&sApplauseMeterSpriteSheet);
- LoadSpritePalette(&sApplauseMeterPalette);
- spriteId = CreateSprite(&sApplauseMeterSpriteTemplate, 30, 44, 1);
+ LoadCompressedSpriteSheet(&sSpriteSheet_ApplauseMeter);
+ LoadSpritePalette(&sSpritePalette_ApplauseMeter);
+ spriteId = CreateSprite(&sSpriteTemplate_ApplauseMeter, 30, 44, 1);
gSprites[spriteId].invisible = TRUE;
eContest.applauseMeterSpriteId = spriteId;
}
-static void sub_80DC5E8(void)
+static void CreateJudgeAttentionEyeTask(void)
{
u8 i;
- u8 taskId = CreateTask(sub_80DC728, 30);
+ u8 taskId = CreateTask(Task_FlashJudgeAttentionEye, 30);
- eContest.unk19211 = taskId;
+ eContest.judgeAttentionTaskId = taskId;
for (i = 0; i < CONTESTANT_COUNT; i++)
gTasks[taskId].data[i * 4] = 0xFF;
}
-static void sub_80DC630(u8 a)
+static void StartFlashJudgeAttentionEye(u8 contestant)
{
- gTasks[eContest.unk19211].data[a * 4 + 0] = 0;
- gTasks[eContest.unk19211].data[a * 4 + 1] = 0;
+ gTasks[eContest.judgeAttentionTaskId].data[contestant * 4 + 0] = 0;
+ gTasks[eContest.judgeAttentionTaskId].data[contestant * 4 + 1] = 0;
}
-static void sub_80DC674(u8 a)
+static void StopFlashJudgeAttentionEye(u8 contestant)
{
- u8 taskId = CreateTask(sub_80DC6A4, 31);
-
- gTasks[taskId].data[0] = a;
+ u8 taskId = CreateTask(Task_StopFlashJudgeAttentionEye, 31);
+ gTasks[taskId].data[0] = contestant;
}
-static void sub_80DC6A4(u8 taskId)
+static void Task_StopFlashJudgeAttentionEye(u8 taskId)
{
- u8 r4 = gTasks[taskId].data[0];
+ u8 contestant = gTasks[taskId].data[0];
- if (gTasks[eContest.unk19211].data[r4 * 4 + 0] == 0
- || gTasks[eContest.unk19211].data[r4 * 4 + 0] == 0xFF)
+ if (gTasks[eContest.judgeAttentionTaskId].data[contestant * 4 + 0] == 0
+ || gTasks[eContest.judgeAttentionTaskId].data[contestant * 4 + 0] == 0xFF)
{
- gTasks[eContest.unk19211].data[r4 * 4 + 0] = 0xFF;
- gTasks[eContest.unk19211].data[r4 * 4 + 1] = 0;
- BlendPalette((eContest.prevTurnOrder[r4] + MOVE_WINDOWS_START) * 16 + 6, 2, 0, RGB(31, 31, 18));
+ gTasks[eContest.judgeAttentionTaskId].data[contestant * 4 + 0] = 0xFF;
+ gTasks[eContest.judgeAttentionTaskId].data[contestant * 4 + 1] = 0;
+ BlendPalette((eContest.prevTurnOrder[contestant] + 5) * 16 + 6, 2, 0, RGB(31, 31, 18));
DestroyTask(taskId);
}
}
-static void sub_80DC728(u8 taskId)
+static void Task_FlashJudgeAttentionEye(u8 taskId)
{
u8 i;
for (i = 0; i < CONTESTANT_COUNT; i++)
{
- u8 r3 = i * 4;
+ u8 offset = i * 4;
- if (gTasks[taskId].data[r3 + 0] != 0xFF)
+ if (gTasks[taskId].data[offset + 0] != 0xFF)
{
- if (gTasks[taskId].data[r3 + 1] == 0)
- gTasks[taskId].data[r3 + 0]++;
+ if (gTasks[taskId].data[offset + 1] == 0)
+ gTasks[taskId].data[offset + 0]++;
else
- gTasks[taskId].data[r3 + 0]--;
+ gTasks[taskId].data[offset + 0]--;
- if (gTasks[taskId].data[r3 + 0] == 16
- || gTasks[taskId].data[r3 + 0] == 0)
- gTasks[taskId].data[r3 + 1] ^= 1;
+ if (gTasks[taskId].data[offset + 0] == 16
+ || gTasks[taskId].data[offset + 0] == 0)
+ gTasks[taskId].data[offset + 1] ^= 1;
- BlendPalette(
- (eContest.prevTurnOrder[i] + MOVE_WINDOWS_START) * 16 + 6,
- 2,
- gTasks[taskId].data[r3 + 0],
- RGB(31, 31, 18));
+ BlendPalette((eContest.prevTurnOrder[i] + 5) * 16 + 6, 2, gTasks[taskId].data[offset + 0], RGB(31, 31, 18));
}
}
}
-static void sub_80DC7EC(void)
+// Note: While the below task is run for the entire Appeals portion of the contest,
+// because data[i * 4] is always 0xFF it never does anything
+// If turned on by setting that data between 0 and 16, it blends
+// an odd selection of palette colors (e.g. the text box, the appeal hearts
+// for only one contestant, the heart outlines in the move selection box, etc)
+// Given the similarities, it's possible this was an incorrect attempt
+// at something similar to what CreateJudgeAttentionEyeTask does
+static void CreateUnusedBlendTask(void)
{
s32 i;
- eContest.unk19212 = CreateTask(sub_80DC8D0, 30);
+ eContest.blendTaskId = CreateTask(Task_UnusedBlend, 30);
for (i = 0; i < CONTESTANT_COUNT; i++)
- sub_80DC81C(i);
+ InitUnusedBlendTaskData(i);
}
-static void sub_80DC81C(u8 contestant)
+static void InitUnusedBlendTaskData(u8 contestant)
{
- gTasks[eContest.unk19212].data[contestant * 4 + 0] = 0xFF;
- gTasks[eContest.unk19212].data[contestant * 4 + 1] = 0;
+ gTasks[eContest.blendTaskId].data[contestant * 4] = 0xFF;
+ gTasks[eContest.blendTaskId].data[contestant * 4 + 1] = 0;
}
-static void sub_80DC864(void)
+static void UpdateBlendTaskContestantsData(void)
{
s32 i;
for (i = 0; i < CONTESTANT_COUNT; i++)
- sub_80DC87C(i);
+ UpdateBlendTaskContestantData(i);
}
-static void sub_80DC87C(u8 contestant)
+static void UpdateBlendTaskContestantData(u8 contestant)
{
- u32 windowId1;
- u32 windowId2;
+ u32 palOffset1;
+ u32 palOffset2;
- sub_80DC81C(contestant);
+ InitUnusedBlendTaskData(contestant);
- windowId1 = contestant + MOVE_WINDOWS_START;
+ palOffset1 = contestant + 5;
DmaCopy16Defvars(3,
- gPlttBufferUnfaded + windowId1 * 16 + 10,
- gPlttBufferFaded + windowId1 * 16 + 10,
+ gPlttBufferUnfaded + palOffset1 * 16 + 10,
+ gPlttBufferFaded + palOffset1 * 16 + 10,
2);
- windowId2 = (contestant + MOVE_WINDOWS_START) * 16 + 12 + contestant;
+ palOffset2 = (contestant + 5) * 16 + 12 + contestant;
DmaCopy16Defvars(3,
- gPlttBufferUnfaded + windowId2,
- gPlttBufferFaded + windowId2,
+ gPlttBufferUnfaded + palOffset2,
+ gPlttBufferFaded + palOffset2,
2);
}
-static void sub_80DC8D0(u8 taskId)
+// See comments on CreateUnusedBlendTask
+static void Task_UnusedBlend(u8 taskId)
{
u8 i;
for (i = 0; i < CONTESTANT_COUNT; i++)
{
- u8 r3 = i * 4;
+ u8 idx = i * 4;
- if (gTasks[taskId].data[r3 + 0] != 0xFF)
+ // Below is never true
+ if (gTasks[taskId].data[idx] != 0xFF)
{
- if (++gTasks[taskId].data[r3 + 2] > 2)
+ if (++gTasks[taskId].data[idx + 2] > 2)
{
- gTasks[taskId].data[r3 + 2] = 0;
+ gTasks[taskId].data[idx + 2] = 0;
- if (gTasks[taskId].data[r3 + 1] == 0)
- gTasks[taskId].data[r3 + 0]++;
+ if (gTasks[taskId].data[idx + 1] == 0)
+ gTasks[taskId].data[idx]++;
else
- gTasks[taskId].data[r3 + 0]--;
+ gTasks[taskId].data[idx]--;
- if (gTasks[taskId].data[r3 + 0] == 16
- || gTasks[taskId].data[r3 + 0] == 0)
- gTasks[taskId].data[r3 + 1] ^= 1;
+ if (gTasks[taskId].data[idx] == 16
+ || gTasks[taskId].data[idx] == 0)
+ gTasks[taskId].data[idx + 1] ^= 1;
- BlendPalette((i + MOVE_WINDOWS_START) * 16 + 10, 1, gTasks[taskId].data[r3 + 0], RGB(31, 31, 18));
- BlendPalette((i + MOVE_WINDOWS_START) * 16 + 12 + i, 1, gTasks[taskId].data[r3 + 0], RGB(31, 31, 18));
+ BlendPalette((i + 5) * 16 + 10, 1, gTasks[taskId].data[idx + 0], RGB(31, 31, 18));
+ BlendPalette((i + 5) * 16 + 12 + i, 1, gTasks[taskId].data[idx + 0], RGB(31, 31, 18));
}
}
}
}
-static void sub_80DC9B4(u8 contestant)
+static void StartStopFlashJudgeAttentionEye(u8 contestant)
{
if (eContestantStatus[contestant].hasJudgesAttention)
- sub_80DC630(contestant);
+ StartFlashJudgeAttentionEye(contestant);
else
- sub_80DC674(contestant);
+ StopFlashJudgeAttentionEye(contestant);
}
-static u8 sub_80DC9EC(u8 contestant)
+static u8 CreateContestantBoxBlinkSprites(u8 contestant)
{
u8 spriteId1, spriteId2;
u8 x = gContestantTurnOrder[contestant] * 40 + 32;
- LoadCompressedSpriteSheet(&sUnknown_08589904[contestant]);
- LoadSpritePalette(&sUnknown_08589924[contestant]);
- spriteId1 = CreateSprite(&gSpriteTemplate_858998C[contestant], 184, x, 29);
- spriteId2 = CreateSprite(&gSpriteTemplate_858998C[contestant], 248, x, 29);
+ LoadCompressedSpriteSheet(&sSpriteSheets_ContestantsTurnBlinkEffect[contestant]);
+ LoadSpritePalette(&sSpritePalettes_ContestantsTurnBlinkEffect[contestant]);
+ spriteId1 = CreateSprite(&sSpriteTemplates_ContestantsTurnBlinkEffect[contestant], 184, x, 29);
+ spriteId2 = CreateSprite(&sSpriteTemplates_ContestantsTurnBlinkEffect[contestant], 248, x, 29);
gSprites[spriteId2].oam.tileNum += 64;
CopySpriteTiles(0,
3,
(void *)VRAM,
(u16 *)(BG_SCREEN_ADDR(28) + gContestantTurnOrder[contestant] * 5 * 64 + 0x26),
- gContestResources->field_34);
+ gContestResources->boxBlinkTiles1);
CopySpriteTiles(0,
3, (void *)VRAM,
(u16 *)(BG_SCREEN_ADDR(28) + gContestantTurnOrder[contestant] * 5 * 64 + 0x36),
- gContestResources->field_38);
+ gContestResources->boxBlinkTiles2);
- CpuFill32(0, gContestResources->field_34 + 0x500, 0x300);
- CpuFill32(0, gContestResources->field_38 + 0x500, 0x300);
+ CpuFill32(0, gContestResources->boxBlinkTiles1 + 0x500, 0x300);
+ CpuFill32(0, gContestResources->boxBlinkTiles2 + 0x500, 0x300);
- RequestDma3Copy(gContestResources->field_34,
+ RequestDma3Copy(gContestResources->boxBlinkTiles1,
(u8 *)(VRAM + 0x10000 + gSprites[spriteId1].oam.tileNum * 32),
0x800,
1);
- RequestDma3Copy(gContestResources->field_38,
+ RequestDma3Copy(gContestResources->boxBlinkTiles2,
(u8 *)(VRAM + 0x10000 + gSprites[spriteId2].oam.tileNum * 32),
0x800,
1);
@@ -3946,7 +4155,7 @@ static u8 sub_80DC9EC(u8 contestant)
return spriteId1;
}
-static void sub_80DCB78(u8 spriteId)
+static void DestroyContestantBoxBlinkSprites(u8 spriteId)
{
u8 spriteId2 = gSprites[spriteId].data[0];
@@ -3955,55 +4164,56 @@ static void sub_80DCB78(u8 spriteId)
DestroySpriteAndFreeResources(&gSprites[spriteId]);
}
-static void sub_80DCBB4(void)
+static void SetBlendForContestantBoxBlink(void)
{
SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT2_ALL | BLDCNT_EFFECT_BLEND);
SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(7, 9));
}
-static void sub_80DCBD0(void)
+static void ResetBlendForContestantBoxBlink(void)
{
SetGpuReg(REG_OFFSET_BLDCNT, 0);
SetGpuReg(REG_OFFSET_BLDALPHA, 0);
}
-static void sub_80DCBE8(u8 a, bool8 b)
+// To indicate whose turn is up
+static void BlinkContestantBox(u8 spriteId, bool8 b)
{
- u8 r5;
+ u8 spriteId2;
- sub_80DCBB4();
- gContestResources->field_14[gSprites[a].data[1]].unk2_1 = 1;
- r5 = gSprites[a].data[0];
- StartSpriteAffineAnim(&gSprites[a], 1);
- StartSpriteAffineAnim(&gSprites[r5], 1);
- gSprites[a].callback = sub_80DCC84;
- gSprites[r5].callback = SpriteCallbackDummy;
+ SetBlendForContestantBoxBlink();
+ eContestGfxState[gSprites[spriteId].data[1]].boxBlinking = TRUE;
+ spriteId2 = gSprites[spriteId].data[0];
+ StartSpriteAffineAnim(&gSprites[spriteId], 1);
+ StartSpriteAffineAnim(&gSprites[spriteId2], 1);
+ gSprites[spriteId].callback = SpriteCB_BlinkContestantBox;
+ gSprites[spriteId2].callback = SpriteCallbackDummy;
if (b == FALSE)
- PlaySE(SE_C_PIKON);
+ PlaySE(SE_CONTEST_MONS_TURN);
else
PlaySE(SE_PC_LOGIN);
}
-static void sub_80DCC84(struct Sprite *sprite)
+static void SpriteCB_BlinkContestantBox(struct Sprite *sprite)
{
if (sprite->affineAnimEnded)
{
- u8 r1 = sprite->data[0];
+ u8 spriteId2 = sprite->data[0];
- if (gSprites[r1].affineAnimEnded)
+ if (gSprites[spriteId2].affineAnimEnded)
{
sprite->invisible = TRUE;
- gSprites[r1].invisible = TRUE;
- sprite->callback = sub_80DCCD8;
+ gSprites[spriteId2].invisible = TRUE;
+ sprite->callback = SpriteCB_EndBlinkContestantBox;
}
}
}
-static void sub_80DCCD8(struct Sprite *sprite)
+static void SpriteCB_EndBlinkContestantBox(struct Sprite *sprite)
{
- gContestResources->field_14[sprite->data[1]].unk2_1 = 0;
- sub_80DCB78(sprite->data[0]);
- sub_80DCBD0();
+ eContestGfxState[sprite->data[1]].boxBlinking = FALSE;
+ DestroyContestantBoxBlinkSprites(sprite->data[0]);
+ ResetBlendForContestantBoxBlink();
}
// Unused.
@@ -4039,8 +4249,8 @@ static void ContestDebugDoPrint(void)
{
case CONTEST_DEBUG_MODE_OFF:
break;
- case CONTEST_DEBUG_MODE_PRINT_UNK_C:
- case CONTEST_DEBUG_MODE_PRINT_UNK_D:
+ case CONTEST_DEBUG_MODE_PRINT_WINNER_FLAGS:
+ case CONTEST_DEBUG_MODE_PRINT_LOSER_FLAGS:
ContestDebugPrintBitStrings();
break;
// The only other possible value is 1, which is only set by ContestDebugTogglePointTotal.
@@ -4063,9 +4273,9 @@ static void ContestDebugDoPrint(void)
}
for (i = 0; i < CONTESTANT_COUNT; i++)
{
- value = eContestantStatus[i].appeal2;
+ value = eContestantStatus[i].appeal;
txtPtr = text;
- if (eContestantStatus[i].appeal2 < 0)
+ if (eContestantStatus[i].appeal < 0)
{
value *= -1;
txtPtr = StringCopy(txtPtr, gText_OneDash);
@@ -4115,8 +4325,8 @@ void SortContestants(bool8 useRanking)
// Determine where the contestant should be ordered.
for (v3 = 0; v3 < i; v3++)
{
- if (gContestMonConditions[gContestantTurnOrder[v3]] < gContestMonConditions[i]
- || (gContestMonConditions[gContestantTurnOrder[v3]] == gContestMonConditions[i] && randomOrdering[gContestantTurnOrder[v3]] < randomOrdering[i]))
+ if (gContestMonRound1Points[gContestantTurnOrder[v3]] < gContestMonRound1Points[i]
+ || (gContestMonRound1Points[gContestantTurnOrder[v3]] == gContestMonRound1Points[i] && randomOrdering[gContestantTurnOrder[v3]] < randomOrdering[i]))
{
// Shift everything larger up to make room.
s32 j;
@@ -4199,24 +4409,23 @@ static void DrawContestantWindows(void)
for (i = 0; i < CONTESTANT_COUNT; i++)
{
- s32 windowId = i + MOVE_WINDOWS_START;
- LoadPalette(eUnknownHeap1A004.cachedWindowPalettes[windowId], (gContestantTurnOrder[i] + MOVE_WINDOWS_START) * 16, sizeof(eUnknownHeap1A004.cachedWindowPalettes[0]));
+ s32 windowId = i + 5;
+ LoadPalette(eUnknownHeap1A004.cachedWindowPalettes[windowId], (gContestantTurnOrder[i] + 5) * 16, sizeof(eUnknownHeap1A004.cachedWindowPalettes[0]));
}
DrawContestantWindowText();
}
-static void sub_80DD080(u8 contestant)
+static void CalculateAppealMoveImpact(u8 contestant)
{
u16 move;
u8 effect;
u8 rnd;
- bool8 r8;
+ bool8 canUseTurn;
s32 i;
- eContestantStatus[contestant].appeal2 = 0;
- eContestantStatus[contestant].appeal1 = 0;
- r8 = ContestantCanUseTurn(contestant);
- if (!r8)
+ eContestantStatus[contestant].appeal = 0;
+ eContestantStatus[contestant].baseAppeal = 0;
+ if (!ContestantCanUseTurn(contestant))
return;
move = eContestantStatus[contestant].currMove;
@@ -4225,93 +4434,93 @@ static void sub_80DD080(u8 contestant)
eContestantStatus[contestant].moveCategory = gContestMoves[eContestantStatus[contestant].currMove].contestCategory;
if (eContestantStatus[contestant].currMove == eContestantStatus[contestant].prevMove && eContestantStatus[contestant].currMove != MOVE_NONE)
{
- eContestantStatus[contestant].disappointedRepeat = TRUE;
+ eContestantStatus[contestant].repeatedMove = TRUE;
eContestantStatus[contestant].moveRepeatCount++;
}
else
{
eContestantStatus[contestant].moveRepeatCount = 0;
}
- eContestantStatus[contestant].appeal1 = gContestEffects[effect].appeal;
- eContestantStatus[contestant].appeal2 = eContestantStatus[contestant].appeal1;
- eContestResources8.jam = gContestEffects[effect].jam;
- eContestResources8.jam2 = eContestResources8.jam;
+ eContestantStatus[contestant].baseAppeal = gContestEffects[effect].appeal;
+ eContestantStatus[contestant].appeal = eContestantStatus[contestant].baseAppeal;
+ eContestAppealResults.jam = gContestEffects[effect].jam;
+ eContestAppealResults.jam2 = eContestAppealResults.jam;
- eContestResources8.contestant = contestant;
+ eContestAppealResults.contestant = contestant;
for (i = 0; i < CONTESTANT_COUNT; i++)
{
eContestantStatus[i].jam = 0;
- eContestResources8.unnervedPokes[i] = 0;
+ eContestAppealResults.unnervedPokes[i] = 0;
}
if (eContestantStatus[contestant].hasJudgesAttention
&& !AreMovesContestCombo(eContestantStatus[contestant].prevMove, eContestantStatus[contestant].currMove))
- eContestantStatus[contestant].hasJudgesAttention = 0;
+ eContestantStatus[contestant].hasJudgesAttention = FALSE;
gContestEffectFuncs[effect]();
- if (eContestantStatus[contestant].conditionMod == 1)
- eContestantStatus[contestant].appeal2 += eContestantStatus[contestant].condition - 10;
+ if (eContestantStatus[contestant].conditionMod == CONDITION_GAIN)
+ eContestantStatus[contestant].appeal += eContestantStatus[contestant].condition - 10;
else if (eContestantStatus[contestant].appealTripleCondition)
- eContestantStatus[contestant].appeal2 += eContestantStatus[contestant].condition * 3;
+ eContestantStatus[contestant].appeal += eContestantStatus[contestant].condition * 3;
else
- eContestantStatus[contestant].appeal2 += eContestantStatus[contestant].condition;
+ eContestantStatus[contestant].appeal += eContestantStatus[contestant].condition;
- eContestantStatus[contestant].unk16 = 0;
- eContestantStatus[contestant].unk15_6 = 0;
- if (sub_80DE1E8(contestant))
+ eContestantStatus[contestant].completedCombo = FALSE;
+ eContestantStatus[contestant].usedComboMove = FALSE;
+ if (IsContestantAllowedToCombo(contestant))
{
- u8 r2 = AreMovesContestCombo(eContestantStatus[contestant].prevMove, eContestantStatus[contestant].currMove);
+ bool8 completedCombo = AreMovesContestCombo(eContestantStatus[contestant].prevMove, eContestantStatus[contestant].currMove);
- if (r2 != 0 && eContestantStatus[contestant].hasJudgesAttention)
+ if (completedCombo && eContestantStatus[contestant].hasJudgesAttention)
+ {
+ eContestantStatus[contestant].completedCombo = completedCombo;
+ eContestantStatus[contestant].usedComboMove = TRUE;
+ eContestantStatus[contestant].hasJudgesAttention = FALSE;
+ eContestantStatus[contestant].comboAppealBonus = eContestantStatus[contestant].baseAppeal * eContestantStatus[contestant].completedCombo;
+ eContestantStatus[contestant].completedComboFlag = TRUE; // Redundant with completedCombo, used by AI
+ }
+ else if (gContestMoves[eContestantStatus[contestant].currMove].comboStarterId != 0)
{
- eContestantStatus[contestant].unk16 = r2;
- eContestantStatus[contestant].unk15_6 = 1;
- eContestantStatus[contestant].hasJudgesAttention = 0;
- eContestantStatus[contestant].unk17 = eContestantStatus[contestant].appeal1 * eContestantStatus[contestant].unk16;
- eContestantStatus[contestant].unk15_3 = 1;
+ eContestantStatus[contestant].hasJudgesAttention = TRUE;
+ eContestantStatus[contestant].usedComboMove = TRUE;
}
else
{
- if (gContestMoves[eContestantStatus[contestant].currMove].comboStarterId != 0)
- {
- eContestantStatus[contestant].hasJudgesAttention = 1;
- eContestantStatus[contestant].unk15_6 = 1;
- }
- else
- {
- eContestantStatus[contestant].hasJudgesAttention = 0;
- }
+ eContestantStatus[contestant].hasJudgesAttention = FALSE;
}
}
- if (eContestantStatus[contestant].disappointedRepeat)
- eContestantStatus[contestant].unk18 = (eContestantStatus[contestant].moveRepeatCount + 1) * 10;
+ if (eContestantStatus[contestant].repeatedMove)
+ eContestantStatus[contestant].repeatJam = (eContestantStatus[contestant].moveRepeatCount + 1) * 10;
if (eContestantStatus[contestant].nervous)
{
- eContestantStatus[contestant].hasJudgesAttention = 0;
- eContestantStatus[contestant].appeal2 = 0;
- eContestantStatus[contestant].appeal1 = 0;
+ eContestantStatus[contestant].hasJudgesAttention = FALSE;
+ eContestantStatus[contestant].appeal = 0;
+ eContestantStatus[contestant].baseAppeal = 0;
}
- eContestResources10.bits_0 = Contest_GetMoveExcitement(eContestantStatus[contestant].currMove);
+ eContestExcitement.moveExcitement = Contest_GetMoveExcitement(eContestantStatus[contestant].currMove);
if (eContestantStatus[contestant].overrideCategoryExcitementMod)
- eContestResources10.bits_0 = 1;
+ eContestExcitement.moveExcitement = 1;
- if (eContestResources10.bits_0 > 0)
+ if (eContestExcitement.moveExcitement > 0)
{
- if (eContest.applauseLevel + eContestResources10.bits_0 > 4)
- eContestResources10.unk2 = 60;
+ if (eContest.applauseLevel + eContestExcitement.moveExcitement > 4)
+ eContestExcitement.excitementAppealBonus = 60;
else
- eContestResources10.unk2 = 10;
+ eContestExcitement.excitementAppealBonus = 10;
}
else
{
- eContestResources10.unk2 = 0;
+ eContestExcitement.excitementAppealBonus = 0;
}
- rnd = Random() % 3;
+ // Transform and Role Play require a visible target mon
+ // so randomly choose a contestant to be the "target"
+ rnd = Random() % (CONTESTANT_COUNT - 1);
for (i = 0; i < CONTESTANT_COUNT; i++)
{
+ // Target can't be the attacker
if (i != contestant)
{
if (rnd == 0)
@@ -4319,7 +4528,7 @@ static void sub_80DD080(u8 contestant)
rnd--;
}
}
- eContestantStatus[contestant].unk1B = i;
+ eContestantStatus[contestant].contestantAnimTarget = i;
}
void SetContestantEffectStringID(u8 a, u8 b)
@@ -4346,17 +4555,17 @@ void SetStartledString(u8 contestant, u8 jam)
SetContestantEffectStringID(contestant, CONTEST_STRING_LOOKED_DOWN);
}
-static void sub_80DD45C(u8 contestant, u8 stringId)
+static void PrintAppealMoveResultText(u8 contestant, u8 stringId)
{
StringCopy(gStringVar1, gContestMons[contestant].nickname);
StringCopy(gStringVar2, gMoveNames[eContestantStatus[contestant].currMove]);
- if (gContestMoves[eContestantStatus[eContestResources8.contestant].currMove].contestCategory == CONTEST_CATEGORY_COOL)
+ if (gContestMoves[eContestantStatus[eContestAppealResults.contestant].currMove].contestCategory == CONTEST_CATEGORY_COOL)
StringCopy(gStringVar3, gText_Contest_Shyness);
- else if (gContestMoves[eContestantStatus[eContestResources8.contestant].currMove].contestCategory == CONTEST_CATEGORY_BEAUTY)
+ else if (gContestMoves[eContestantStatus[eContestAppealResults.contestant].currMove].contestCategory == CONTEST_CATEGORY_BEAUTY)
StringCopy(gStringVar3, gText_Contest_Anxiety);
- else if (gContestMoves[eContestantStatus[eContestResources8.contestant].currMove].contestCategory == CONTEST_CATEGORY_CUTE)
+ else if (gContestMoves[eContestantStatus[eContestAppealResults.contestant].currMove].contestCategory == CONTEST_CATEGORY_CUTE)
StringCopy(gStringVar3, gText_Contest_Laziness);
- else if (gContestMoves[eContestantStatus[eContestResources8.contestant].currMove].contestCategory == CONTEST_CATEGORY_SMART)
+ else if (gContestMoves[eContestantStatus[eContestAppealResults.contestant].currMove].contestCategory == CONTEST_CATEGORY_SMART)
StringCopy(gStringVar3, gText_Contest_Hesitancy);
else
StringCopy(gStringVar3, gText_Contest_Fear);
@@ -4442,69 +4651,69 @@ static void ApplyNextTurnOrder(void)
for (i = 0; i < CONTESTANT_COUNT; i++)
{
- eContestResources8.turnOrder[i] = newTurnOrder[i];
+ eContestAppealResults.turnOrder[i] = newTurnOrder[i];
eContestantStatus[i].nextTurnOrder = 0xFF;
eContestantStatus[i].turnOrderMod = 0;
gContestantTurnOrder[i] = newTurnOrder[i];
}
}
-static void sub_80DD6DC(struct Sprite *sprite)
+static void SpriteCB_JudgeSpeechBubble(struct Sprite *sprite)
{
if (sprite->data[1]++ > 84)
{
sprite->data[1] = 0;
sprite->invisible = TRUE;
sprite->callback = SpriteCallbackDummy;
- eContest.unk1920A_4 = 0;
+ eContest.waitForJudgeSpeechBubble = FALSE;
}
}
-static void sub_80DD720(u8 a)
+static void DoJudgeSpeechBubble(u8 symbolId)
{
- u8 spriteId = eContest.unk19216;
+ u8 spriteId = eContest.judgeSpeechBubbleSpriteId;
- switch (a)
+ switch (symbolId)
{
- case 0:
- case 1:
+ case JUDGE_SYMBOL_SWIRL:
+ case JUDGE_SYMBOL_SWIRL_UNUSED:
gSprites[spriteId].oam.tileNum = gSprites[spriteId].data[0];
- PlaySE(SE_HAZURE);
+ PlaySE(SE_FAILURE);
break;
- case 2:
+ case JUDGE_SYMBOL_ONE_EXCLAMATION:
gSprites[spriteId].oam.tileNum = gSprites[spriteId].data[0] + 4;
- PlaySE(SE_SEIKAI);
+ PlaySE(SE_SUCCESS);
break;
- case 3:
+ case JUDGE_SYMBOL_TWO_EXCLAMATIONS:
gSprites[spriteId].oam.tileNum = gSprites[spriteId].data[0] + 8;
- PlaySE(SE_SEIKAI);
+ PlaySE(SE_SUCCESS);
break;
- case 4:
+ case JUDGE_SYMBOL_NUMBER_ONE_UNUSED: // Identical to JUDGE_SYMBOL_NUMBER_ONE
gSprites[spriteId].oam.tileNum = gSprites[spriteId].data[0] + 12;
- PlaySE(SE_TK_WARPIN);
+ PlaySE(SE_WARP_IN);
break;
- case 5: // exactly the same as case 4
+ case JUDGE_SYMBOL_NUMBER_ONE:
gSprites[spriteId].oam.tileNum = gSprites[spriteId].data[0] + 12;
- PlaySE(SE_TK_WARPIN);
+ PlaySE(SE_WARP_IN);
break;
- case 6:
+ case JUDGE_SYMBOL_NUMBER_FOUR:
gSprites[spriteId].oam.tileNum = gSprites[spriteId].data[0] + 16;
- PlaySE(SE_TK_WARPIN);
+ PlaySE(SE_WARP_IN);
break;
- case 8:
+ case JUDGE_SYMBOL_STAR:
gSprites[spriteId].oam.tileNum = gSprites[spriteId].data[0] + 24;
- PlaySE(SE_W215);
+ PlaySE(SE_M_HEAL_BELL);
break;
- case 7:
+ case JUDGE_SYMBOL_QUESTION_MARK:
default:
gSprites[spriteId].oam.tileNum = gSprites[spriteId].data[0] + 20;
- PlaySE(SE_TK_WARPIN);
+ PlaySE(SE_WARP_IN);
break;
}
gSprites[spriteId].data[1] = 0;
gSprites[spriteId].invisible = FALSE;
- gSprites[spriteId].callback = sub_80DD6DC;
- eContest.unk1920A_4 = 1;
+ gSprites[spriteId].callback = SpriteCB_JudgeSpeechBubble;
+ eContest.waitForJudgeSpeechBubble = TRUE;
}
static void UpdateApplauseMeter(void)
@@ -4537,7 +4746,7 @@ static u8 StartApplauseOverflowAnimation(void)
u8 taskId = CreateTask(Task_ApplauseOverflowAnimation, 10);
gTasks[taskId].data[1] = 1;
- gTasks[taskId].data[2] = IndexOfSpritePaletteTag(APPLAUSE_METER_GFX_TAG);
+ gTasks[taskId].data[2] = IndexOfSpritePaletteTag(TAG_APPLAUSE_METER);
return taskId;
}
@@ -4571,15 +4780,15 @@ static void Task_ApplauseOverflowAnimation(u8 taskId)
}
}
-static void StartMoveApplauseMeterOnscreen(void)
+static void SlideApplauseMeterIn(void)
{
- CreateTask(Task_MoveApplauseMeterOnscreen, 10);
+ CreateTask(Task_SlideApplauseMeterIn, 10);
gSprites[eContest.applauseMeterSpriteId].pos2.x = -70;
gSprites[eContest.applauseMeterSpriteId].invisible = FALSE;
eContest.applauseMeterIsMoving = TRUE;
}
-static void Task_MoveApplauseMeterOnscreen(u8 taskId)
+static void Task_SlideApplauseMeterIn(u8 taskId)
{
struct Sprite *sprite = &gSprites[eContest.applauseMeterSpriteId];
@@ -4595,7 +4804,7 @@ static void Task_MoveApplauseMeterOnscreen(u8 taskId)
}
}
-static void TryMoveApplauseMeterOffscreen(void)
+static void SlideApplauseMeterOut(void)
{
if (gSprites[eContest.applauseMeterSpriteId].invisible == TRUE)
{
@@ -4603,13 +4812,13 @@ static void TryMoveApplauseMeterOffscreen(void)
}
else
{
- CreateTask(Task_MoveApplauseMeterOffscreen, 10);
+ CreateTask(Task_SlideApplauseMeterOut, 10);
gSprites[eContest.applauseMeterSpriteId].pos2.x = 0;
eContest.applauseMeterIsMoving = TRUE;
}
}
-static void Task_MoveApplauseMeterOffscreen(u8 taskId)
+static void Task_SlideApplauseMeterOut(u8 taskId)
{
struct Sprite *sprite = &gSprites[eContest.applauseMeterSpriteId];
@@ -4639,7 +4848,7 @@ static void Task_ShowAndUpdateApplauseMeter(u8 taskId)
switch (gTasks[taskId].data[10])
{
case 0:
- StartMoveApplauseMeterOnscreen();
+ SlideApplauseMeterIn();
gTasks[taskId].data[10]++;
break;
case 1:
@@ -4661,131 +4870,153 @@ static void Task_ShowAndUpdateApplauseMeter(u8 taskId)
}
// Unused.
-void HideApplauseMeterNoAnim(void)
+static void HideApplauseMeterNoAnim(void)
{
gSprites[eContest.applauseMeterSpriteId].pos2.x = 0;
gSprites[eContest.applauseMeterSpriteId].invisible = FALSE;
}
// Unused.
-void ShowApplauseMeterNoAnim(void)
+static void ShowApplauseMeterNoAnim(void)
{
gSprites[eContest.applauseMeterSpriteId].invisible = TRUE;
}
-static void sub_80DDE0C(void)
+#define tDelay data[10]
+#define tFrame data[11]
+#define tCycles data[12]
+
+static void AnimateAudience(void)
{
- CreateTask(sub_80DDE30, 15);
- eContest.unk1920A_7 = 1;
+ CreateTask(Task_AnimateAudience, 15);
+ eContest.animatingAudience = TRUE;
}
-static void sub_80DDE30(u8 taskId)
+static void Task_AnimateAudience(u8 taskId)
{
- if (gTasks[taskId].data[10]++ > 6)
+ if (gTasks[taskId].tDelay++ > 6)
{
- gTasks[taskId].data[10] = 0;
- if (gTasks[taskId].data[11] == 0)
+ gTasks[taskId].tDelay = 0;
+ if (gTasks[taskId].tFrame == 0)
{
- RequestDma3Copy(eUnknownHeap19000, (void *)(BG_SCREEN_ADDR(4)), 0x1000, 1);
+ RequestDma3Copy(eContestAudienceFrame2_Gfx, (void *)(BG_SCREEN_ADDR(4)), 0x1000, 1);
}
else
{
- RequestDma3Copy(eUnzippedContestAudienceGfx, (void *)(BG_SCREEN_ADDR(4)), 0x1000, 1);
- gTasks[taskId].data[12]++;
+ RequestDma3Copy(eUnzippedContestAudience_Gfx, (void *)(BG_SCREEN_ADDR(4)), 0x1000, 1);
+ gTasks[taskId].tCycles++;
}
- gTasks[taskId].data[11] ^= 1;
+ gTasks[taskId].tFrame ^= 1;
- if (gTasks[taskId].data[12] == 9)
+ if (gTasks[taskId].tCycles == 9)
{
- eContest.unk1920A_7 = 0;
+ eContest.animatingAudience = FALSE;
DestroyTask(taskId);
}
}
}
-#define tBlendColor data[0]
-#define tBlendCoeff data[1]
+#undef tDelay
+#undef tFrame
+#undef tCycles
-static void sub_80DDED0(s8 a, s8 b)
+#define tBlendColor data[0]
+#define tBlendCoeff data[1]
+#define tBlendDir data[2]
+#define tTargetBlendCoeff data[3]
+#define tBlendDelay data[10]
+
+static void BlendAudienceBackground(s8 excitementDir, s8 blendDir)
{
- u8 taskId = CreateTask(sub_80DDF80, 10);
+ u8 taskId = CreateTask(Task_BlendAudienceBackground, 10);
u16 blendColor;
u8 blendCoeff;
- u8 r3;
+ u8 targetBlendCoeff;
- if (a > 0)
+ if (excitementDir > 0)
{
blendColor = RGB(30, 27, 8);
- if (b > 0)
+ if (blendDir > 0)
{
+ // Blend to yellow (amount depends on applause meter)
blendCoeff = 0;
- r3 = eContest.applauseLevel * 3;
+ targetBlendCoeff = eContest.applauseLevel * 3;
}
else
{
+ // Blend back to original
blendCoeff = eContest.applauseLevel * 3;
- r3 = 0;
+ targetBlendCoeff = 0;
}
}
else
{
- blendColor = 0;
- if (b > 0)
+ blendColor = RGB_BLACK;
+ if (blendDir > 0)
{
+ // Blend to black
blendCoeff = 0;
- r3 = 12;
+ targetBlendCoeff = 12;
}
else
{
+ // Black back to original
blendCoeff = 12;
- r3 = 0;
+ targetBlendCoeff = 0;
}
}
gTasks[taskId].tBlendColor = blendColor;
gTasks[taskId].tBlendCoeff = blendCoeff;
- gTasks[taskId].data[2] = b;
- gTasks[taskId].data[3] = r3;
- eContest.unk1920B_0 = 0;
+ gTasks[taskId].tBlendDir = blendDir;
+ gTasks[taskId].tTargetBlendCoeff = targetBlendCoeff;
+ // Because this isn't set to TRUE here, the main task doesn't wait for the color blend
+ // Unclear if this was intentional or not (perhaps waiting added too much delay). In any case it does nothing now
+ eContest.waitForAudienceBlend = FALSE;
+
}
-static void sub_80DDF80(u8 taskId)
+static void Task_BlendAudienceBackground(u8 taskId)
{
- if (gTasks[taskId].data[10]++ >= 0)
+ if (gTasks[taskId].tBlendDelay++ >= 0)
{
- gTasks[taskId].data[10] = 0;
- if (gTasks[taskId].data[2] > 0)
+ gTasks[taskId].tBlendDelay = 0;
+ if (gTasks[taskId].tBlendDir > 0)
gTasks[taskId].tBlendCoeff++;
else
gTasks[taskId].tBlendCoeff--;
+
BlendPalette(17, 1, gTasks[taskId].tBlendCoeff, gTasks[taskId].tBlendColor);
BlendPalette(26, 1, gTasks[taskId].tBlendCoeff, gTasks[taskId].tBlendColor);
- if (gTasks[taskId].tBlendCoeff == gTasks[taskId].data[3])
+
+ if (gTasks[taskId].tBlendCoeff == gTasks[taskId].tTargetBlendCoeff)
{
DestroyTask(taskId);
- eContest.unk1920B_0 = 0;
+ eContest.waitForAudienceBlend = FALSE;
}
}
}
#undef tBlendColor
#undef tBlendCoeff
+#undef tTargetBlendCoeff
+#undef tBlendDelay
-static void sub_80DE008(bool8 a)
+static void ShowHideNextTurnGfx(bool8 show)
{
s32 i;
for (i = 0; i < CONTESTANT_COUNT; i++)
{
- if (eContestantStatus[i].turnOrderMod != 0 && a)
+ if (eContestantStatus[i].turnOrderMod != 0 && show)
{
- CpuCopy32(GetTurnOrderNumberGfx(i), (void *)(VRAM + 0x10000 + (gSprites[gContestResources->field_14[i].unk1].oam.tileNum + 6) * 32), 32);
- gSprites[gContestResources->field_14[i].unk1].pos1.y = gUnknown_08587A70[gContestantTurnOrder[i]];
- gSprites[gContestResources->field_14[i].unk1].invisible = FALSE;
+ CpuCopy32(GetTurnOrderNumberGfx(i), (void *)(VRAM + 0x10000 + (gSprites[eContestGfxState[i].nextTurnSpriteId].oam.tileNum + 6) * 32), 32);
+ gSprites[eContestGfxState[i].nextTurnSpriteId].pos1.y = sNextTurnSpriteYPositions[gContestantTurnOrder[i]];
+ gSprites[eContestGfxState[i].nextTurnSpriteId].invisible = FALSE;
}
else
{
- gSprites[gContestResources->field_14[i].unk1].invisible = TRUE;
+ gSprites[eContestGfxState[i].nextTurnSpriteId].invisible = TRUE;
}
}
}
@@ -4798,37 +5029,33 @@ static const u8 *GetTurnOrderNumberGfx(u8 contestant)
return gContestNextTurnNumbersGfx + eContestantStatus[contestant].nextTurnOrder * 32;
}
-static void sub_80DE12C(void)
+static void DrawUnnervedSymbols(void)
{
- s32 r7 = 0;
- u8 r10 = 2;
- u8 r8 = 1;
- u8 r9 = 0x11;
-
- for (r7 = 0; r7 < CONTESTANT_COUNT; r7++)
+ s32 i = 0;
+ for (i = 0; i < CONTESTANT_COUNT; i++)
{
- if (eContestResources8.unnervedPokes[r7] != 0 && !Contest_IsMonsTurnDisabled(r7))
+ if (eContestAppealResults.unnervedPokes[i] != 0 && !Contest_IsMonsTurnDisabled(i))
{
- u32 r6 = gContestantTurnOrder[r7] * 5 + 2;
- u16 var = sub_80DB748(3);
+ u32 contestantOffset = gContestantTurnOrder[i] * 5 + 2;
+ u16 symbolOffset = GetStatusSymbolTileOffset(STAT_SYMBOL_SWIRL);
- ContestBG_FillBoxWithIncrementingTile(0, var, 0x14, r6, r10, r8, r9, r8);
- var += 16;
- ContestBG_FillBoxWithIncrementingTile(0, var, 0x14, r6 + 1, r10, r8, r9, r8);
- PlaySE(SE_C_PASI);
+ ContestBG_FillBoxWithIncrementingTile(0, symbolOffset, 20, contestantOffset, 2, 1, 17, 1);
+ symbolOffset += 16;
+ ContestBG_FillBoxWithIncrementingTile(0, symbolOffset, 20, contestantOffset + 1, 2, 1, 17, 1);
+ PlaySE(SE_CONTEST_ICON_CHANGE);
}
}
}
-bool8 sub_80DE1E8(u8 contestant)
+bool8 IsContestantAllowedToCombo(u8 contestant)
{
- if (eContestantStatus[contestant].disappointedRepeat || eContestantStatus[contestant].nervous)
+ if (eContestantStatus[contestant].repeatedMove || eContestantStatus[contestant].nervous)
return FALSE;
else
return TRUE;
}
-static void sub_80DE224(void)
+static void SetBgForCurtainDrop(void)
{
s32 i;
u16 bg0Cnt, bg1Cnt, bg2Cnt;
@@ -4859,14 +5086,14 @@ static void sub_80DE224(void)
CopyToBgTilemapBuffer(1, gUnknown_08C17980, 0, 0);
Contest_SetBgCopyFlags(1);
- for (i = 0; i < 4; i++)
+ for (i = 0; i < CONTESTANT_COUNT; i++)
{
- gSprites[gContestResources->field_14[i].unk0].oam.priority = 1;
- gSprites[gContestResources->field_14[i].unk1].oam.priority = 1;
+ gSprites[eContestGfxState[i].sliderHeartSpriteId].oam.priority = 1;
+ gSprites[eContestGfxState[i].nextTurnSpriteId].oam.priority = 1;
}
}
-static void sub_80DE350(void)
+static void UpdateContestantBoxOrder(void)
{
s32 i;
u16 bg1Cnt;
@@ -4887,20 +5114,20 @@ static void sub_80DE350(void)
for (i = 0; i < CONTESTANT_COUNT; i++)
{
- gSprites[gContestResources->field_14[i].unk0].oam.priority = 0;
- gSprites[gContestResources->field_14[i].unk1].oam.priority = 0;
+ gSprites[eContestGfxState[i].sliderHeartSpriteId].oam.priority = 0;
+ gSprites[eContestGfxState[i].nextTurnSpriteId].oam.priority = 0;
}
}
-static void sub_80DE424(u8 taskId)
+static void Task_StartDropCurtainAtRoundEnd(u8 taskId)
{
gBattle_BG1_X = 0;
gBattle_BG1_Y = DISPLAY_HEIGHT;
- PlaySE12WithPanning(SE_C_MAKU_D, 0);
- gTasks[taskId].func = sub_80DE464;
+ PlaySE12WithPanning(SE_CONTEST_CURTAIN_FALL, 0);
+ gTasks[taskId].func = Task_UpdateCurtainDropAtRoundEnd;
}
-static void sub_80DE464(u8 taskId)
+static void Task_UpdateCurtainDropAtRoundEnd(u8 taskId)
{
if ((s16)(gBattle_BG1_Y -= 7) < 0)
gBattle_BG1_Y = 0;
@@ -4909,11 +5136,11 @@ static void sub_80DE464(u8 taskId)
gTasks[taskId].data[0] = 0;
gTasks[taskId].data[1] = 0;
gTasks[taskId].data[2] = 0;
- gTasks[taskId].func = sub_80DE4A8;
+ gTasks[taskId].func = Task_ResetForNextRound;
}
}
-static void sub_80DE4A8(u8 taskId)
+static void Task_ResetForNextRound(u8 taskId)
{
s32 i;
@@ -4923,11 +5150,11 @@ static void sub_80DE4A8(u8 taskId)
for (i = 0; i < CONTESTANT_COUNT; i++)
eContest.prevTurnOrder[i] = gContestantTurnOrder[i];
FillContestantWindowBgs();
- sub_80DC864();
- sub_80DB69C();
+ UpdateBlendTaskContestantsData();
+ DrawConditionStars();
DrawContestantWindows();
- sub_80DE008(TRUE);
- sub_80DC44C();
+ ShowHideNextTurnGfx(TRUE);
+ UpdateSliderHeartSpriteYPositions();
gTasks[taskId].data[0] = 1;
break;
case 1:
@@ -4935,40 +5162,40 @@ static void sub_80DE4A8(u8 taskId)
{
u8 taskId2;
- eContest.unk1920B_2 = 1;
- if (sub_80DA8A4())
- sub_80DBAA0();
- taskId2 = CreateTask(sub_80FCC88, 0);
- SetTaskFuncWithFollowupFunc(taskId2, sub_80FCC88, sub_80DA110);
+ eContest.waitForLink = TRUE;
+ if (IsPlayerLinkLeader())
+ SetContestantStatusesForNextRound();
+ taskId2 = CreateTask(Task_LinkContest_CommunicateAppealsState, 0);
+ SetTaskFuncWithFollowupFunc(taskId2, Task_LinkContest_CommunicateAppealsState, Task_EndWaitForLink);
ContestPrintLinkStandby();
gTasks[taskId].data[0] = 2;
}
else
{
- sub_80DBAA0();
+ SetContestantStatusesForNextRound();
gTasks[taskId].data[0] = 3;
}
break;
case 2:
- if (!eContest.unk1920B_2)
+ if (!eContest.waitForLink)
gTasks[taskId].data[0] = 3;
break;
case 3:
- sub_80DB884();
+ DrawStatusSymbols();
SwapMoveDescAndContestTilemaps();
gTasks[taskId].data[0] = 0;
- gTasks[taskId].func = sub_80DE5F4;
+ gTasks[taskId].func = Task_WaitRaiseCurtainAtRoundEnd;
break;
}
}
-static void sub_80DE5C0(u8 taskId)
+static void Task_UpdateRaiseCurtainAtRoundEnd(u8 taskId)
{
if ((s16)(gBattle_BG1_Y += 7) > DISPLAY_HEIGHT)
- gTasks[taskId].func = sub_80DA4F4;
+ gTasks[taskId].func = Task_UpdateContestantBoxOrder;
}
-static void sub_80DE5F4(u8 taskId)
+static void Task_WaitRaiseCurtainAtRoundEnd(u8 taskId)
{
if (gTasks[taskId].data[2] < 10)
{
@@ -4989,7 +5216,7 @@ static void sub_80DE5F4(u8 taskId)
{
gTasks[taskId].data[1] = 0;
gTasks[taskId].data[2] = 0;
- gTasks[taskId].func = sub_80DE65C;
+ gTasks[taskId].func = Task_StartRaiseCurtainAtRoundEnd;
}
else
{
@@ -4999,7 +5226,7 @@ static void sub_80DE5F4(u8 taskId)
}
}
-static void sub_80DE65C(u8 taskId)
+static void Task_StartRaiseCurtainAtRoundEnd(u8 taskId)
{
if (gTasks[taskId].data[2] < 10)
{
@@ -5008,50 +5235,54 @@ static void sub_80DE65C(u8 taskId)
else
{
gTasks[taskId].data[2] = 0;
- PlaySE12WithPanning(SE_C_MAKU_U, 0);
- gTasks[taskId].func = sub_80DE5C0;
+ PlaySE12WithPanning(SE_CONTEST_CURTAIN_RISE, 0);
+ gTasks[taskId].func = Task_UpdateRaiseCurtainAtRoundEnd;
}
}
-static void sub_80DE69C(u8 a)
+#define tAnimId data[0]
+
+static void AnimateSliderHearts(u8 animId)
{
s32 i;
u8 taskId;
for (i = 0; i < CONTESTANT_COUNT; i++)
{
- gSprites[gContestResources->field_14[i].unk0].oam.matrixNum = AllocOamMatrix();
- gSprites[gContestResources->field_14[i].unk0].oam.affineMode = ST_OAM_AFFINE_NORMAL;
- StartSpriteAffineAnim(&gSprites[gContestResources->field_14[i].unk0], a);
- if (a == 2)
+ gSprites[eContestGfxState[i].sliderHeartSpriteId].oam.matrixNum = AllocOamMatrix();
+ gSprites[eContestGfxState[i].sliderHeartSpriteId].oam.affineMode = ST_OAM_AFFINE_NORMAL;
+ StartSpriteAffineAnim(&gSprites[eContestGfxState[i].sliderHeartSpriteId], animId);
+ if (animId == SLIDER_HEART_ANIM_APPEAR)
{
- AnimateSprite(&gSprites[gContestResources->field_14[i].unk0]);
- gSprites[gContestResources->field_14[i].unk0].invisible = FALSE;
+ AnimateSprite(&gSprites[eContestGfxState[i].sliderHeartSpriteId]);
+ gSprites[eContestGfxState[i].sliderHeartSpriteId].invisible = FALSE;
}
}
- taskId = CreateTask(sub_80DE794, 5);
- gTasks[taskId].data[0] = a;
- eContest.unk1920B_1 = 1;
+ taskId = CreateTask(Task_WaitForSliderHeartAnim, 5);
+ gTasks[taskId].tAnimId = animId;
+ eContest.sliderHeartsAnimating = TRUE;
}
-static void sub_80DE794(u8 taskId)
+static void Task_WaitForSliderHeartAnim(u8 taskId)
{
s32 i;
- if (gSprites[gContestResources->field_14[0].unk0].affineAnimEnded)
+ if (gSprites[eContestGfxState[0].sliderHeartSpriteId].affineAnimEnded)
{
- if ((u8)gTasks[taskId].data[0] == 1)
+ if ((u8)gTasks[taskId].tAnimId == SLIDER_HEART_ANIM_DISAPPEAR)
{
for (i = 0; i < CONTESTANT_COUNT; i++)
- gSprites[gContestResources->field_14[i].unk0].invisible = TRUE;
+ gSprites[eContestGfxState[i].sliderHeartSpriteId].invisible = TRUE;
}
for (i = 0; i < CONTESTANT_COUNT; i++)
- FreeSpriteOamMatrix(&gSprites[gContestResources->field_14[i].unk0]);
- eContest.unk1920B_1 = 0;
+ FreeSpriteOamMatrix(&gSprites[eContestGfxState[i].sliderHeartSpriteId]);
+ eContest.sliderHeartsAnimating = FALSE;
DestroyTask(taskId);
}
}
+#undef tAnimId
+
static u16 SanitizeMove(u16 move)
{
if (move >= MOVES_COUNT)
@@ -5066,14 +5297,14 @@ static u16 SanitizeSpecies(u16 species)
return species;
}
-static void sub_80DE864(u8 a)
+static void SetMoveSpecificAnimData(u8 contestant)
{
s32 i;
- u16 move = SanitizeMove(eContestantStatus[a].currMove);
- u16 species = SanitizeSpecies(gContestMons[a].species);
- u8 r5_2;
+ u16 move = SanitizeMove(eContestantStatus[contestant].currMove);
+ u16 species = SanitizeSpecies(gContestMons[contestant].species);
+ u8 targetContestant;
- memset(&gContestResources->field_18->species, 0, 0x14);
+ memset(&gContestResources->moveAnim->species, 0, 20);
ClearBattleAnimationVars();
for (i = 0; i < CONTESTANT_COUNT; i++)
gBattleMonForms[i] = 0;
@@ -5087,10 +5318,10 @@ static void sub_80DE864(u8 a)
break;
case MOVE_TRANSFORM:
case MOVE_ROLE_PLAY:
- r5_2 = eContestantStatus[a].unk1B;
- gContestResources->field_18->unk2 = SanitizeSpecies(gContestMons[r5_2].species);
- gContestResources->field_18->unk10 = gContestMons[r5_2].personality;
- gContestResources->field_18->unk4_0 = 1;
+ targetContestant = eContestantStatus[contestant].contestantAnimTarget;
+ gContestResources->moveAnim->targetSpecies = SanitizeSpecies(gContestMons[targetContestant].species);
+ gContestResources->moveAnim->targetPersonality = gContestMons[targetContestant].personality;
+ gContestResources->moveAnim->hasTargetAnim = TRUE;
break;
case MOVE_RETURN:
gAnimFriendship = MAX_FRIENDSHIP;
@@ -5102,9 +5333,9 @@ static void sub_80DE864(u8 a)
case MOVE_RAZOR_WIND:
case MOVE_SKULL_BASH:
case MOVE_SKY_ATTACK:
- if (eContest.unk1925E == 0)
+ if (eContest.moveAnimTurnCount == 0)
{
- eContest.unk1925E = 2;
+ eContest.moveAnimTurnCount = 2;
gAnimMoveTurn = 0;
}
else
@@ -5113,66 +5344,66 @@ static void sub_80DE864(u8 a)
}
break;
}
- sub_80DEA5C();
+ SetBattleTargetSpritePosition();
}
-static void sub_80DE9B0(u8 unused)
+static void ClearMoveAnimData(u8 contestant)
{
- memset(gContestResources->field_18, 0, sizeof(struct ContestStruct_field_18));
- if (eContest.unk1925E != 0)
- eContest.unk1925E--;
+ memset(gContestResources->moveAnim, 0, sizeof(struct ContestMoveAnimData));
+ if (eContest.moveAnimTurnCount != 0)
+ eContest.moveAnimTurnCount--;
}
-static void sub_80DE9DC(u8 contestant)
+static void SetMoveAnimAttackerData(u8 contestant)
{
- gContestResources->field_18->unk5 = contestant;
- gContestResources->field_18->species = SanitizeSpecies(gContestMons[contestant].species);
- gContestResources->field_18->unk8 = gContestMons[contestant].personality;
- gContestResources->field_18->unkC = gContestMons[contestant].otId;
+ gContestResources->moveAnim->contestant = contestant;
+ gContestResources->moveAnim->species = SanitizeSpecies(gContestMons[contestant].species);
+ gContestResources->moveAnim->personality = gContestMons[contestant].personality;
+ gContestResources->moveAnim->otId = gContestMons[contestant].otId;
}
-static void sub_80DEA20(void)
+static void CreateInvisibleBattleTargetSprite(void)
{
- gBattlerSpriteIds[3] = CreateInvisibleSpriteWithCallback(SpriteCallbackDummy);
+ gBattlerSpriteIds[B_POSITION_OPPONENT_RIGHT] = CreateInvisibleSpriteWithCallback(SpriteCallbackDummy);
InitSpriteAffineAnim(&gSprites[gBattlerSpriteIds[gBattlerTarget]]);
- sub_80DEA5C();
+ SetBattleTargetSpritePosition();
}
-static void sub_80DEA5C(void)
+static void SetBattleTargetSpritePosition(void)
{
- struct Sprite *sprite = &gSprites[gBattlerSpriteIds[3]];
+ struct Sprite *sprite = &gSprites[gBattlerSpriteIds[B_POSITION_OPPONENT_RIGHT]];
sprite->pos2.x = 0;
sprite->pos2.y = 0;
- sprite->pos1.x = GetBattlerSpriteCoord(3, 0);
- sprite->pos1.y = GetBattlerSpriteCoord(3, 1);
+ sprite->pos1.x = GetBattlerSpriteCoord(B_POSITION_OPPONENT_RIGHT, BATTLER_COORD_X);
+ sprite->pos1.y = GetBattlerSpriteCoord(B_POSITION_OPPONENT_RIGHT, BATTLER_COORD_Y);
sprite->invisible = TRUE;
}
-static void SelectContestMoveBankTarget(u16 move)
+static void SetMoveTargetPosition(u16 move)
{
switch (gBattleMoves[move].target)
{
case MOVE_TARGET_USER_OR_SELECTED:
case MOVE_TARGET_USER:
- gBattlerTarget = 2;
+ gBattlerTarget = B_POSITION_PLAYER_RIGHT;
break;
case MOVE_TARGET_SELECTED:
case MOVE_TARGET_RANDOM:
case MOVE_TARGET_BOTH:
case MOVE_TARGET_FOES_AND_ALLY:
default:
- gBattlerTarget = 3;
+ gBattlerTarget = B_POSITION_OPPONENT_RIGHT;
break;
}
}
-static void Contest_PrintTextToBg0WindowStd(u32 a, const u8 *b)
+static void Contest_PrintTextToBg0WindowStd(u32 windowId, const u8 *b)
{
struct TextPrinterTemplate printerTemplate;
printerTemplate.currentChar = b;
- printerTemplate.windowId = a;
+ printerTemplate.windowId = windowId;
printerTemplate.fontId = 1;
printerTemplate.x = 0;
printerTemplate.y = 1;
@@ -5180,13 +5411,13 @@ static void Contest_PrintTextToBg0WindowStd(u32 a, const u8 *b)
printerTemplate.currentY = 1;
printerTemplate.letterSpacing = 0;
printerTemplate.lineSpacing = 0;
- printerTemplate.unk = 0;
+ printerTemplate.style = 0;
printerTemplate.fgColor = 15;
printerTemplate.bgColor = 0;
printerTemplate.shadowColor = 8;
AddTextPrinter(&printerTemplate, 0, 0);
- PutWindowTilemap(a);
+ PutWindowTilemap(windowId);
Contest_SetBgCopyFlags(0);
}
@@ -5203,7 +5434,7 @@ void Contest_PrintTextToBg0WindowAt(u32 windowId, u8 *currChar, s32 x, s32 y, s3
printerTemplate.currentY = y;
printerTemplate.letterSpacing = 0;
printerTemplate.lineSpacing = 0;
- printerTemplate.unk = 0;
+ printerTemplate.style = 0;
printerTemplate.fgColor = 15;
printerTemplate.bgColor = 0;
printerTemplate.shadowColor = 8;
@@ -5227,7 +5458,7 @@ static void Contest_StartTextPrinter(const u8 *currChar, bool32 b)
printerTemplate.currentY = 1;
printerTemplate.letterSpacing = 0;
printerTemplate.lineSpacing = 0;
- printerTemplate.unk = 0;
+ printerTemplate.style = 0;
printerTemplate.fgColor = 1;
printerTemplate.bgColor = 0;
printerTemplate.shadowColor = 8;
@@ -5277,7 +5508,7 @@ void ResetContestLinkResults(void)
s32 j;
for(i = 0; i < CONTEST_CATEGORIES_COUNT; i++)
- for(j = 0; j < 4; j++)
+ for(j = 0; j < CONTESTANT_COUNT; j++)
gSaveBlock2Ptr->contestLinkResults[i][j] = 0;
}
@@ -5313,22 +5544,22 @@ bool8 sub_80DEDA8(u8 rank)
}
if (rank != 0xFE)
{
- u8 r4 = sub_80DEFA8(rank, 1);
+ u8 id = sub_80DEFA8(rank, 1);
- gSaveBlock1Ptr->contestWinners[r4].personality = gContestMons[i].personality;
- gSaveBlock1Ptr->contestWinners[r4].species = gContestMons[i].species;
- gSaveBlock1Ptr->contestWinners[r4].trainerId = gContestMons[i].otId;
- StringCopy(gSaveBlock1Ptr->contestWinners[r4].monName, gContestMons[i].nickname);
- StringCopy(gSaveBlock1Ptr->contestWinners[r4].trainerName, gContestMons[i].trainerName);
+ gSaveBlock1Ptr->contestWinners[id].personality = gContestMons[i].personality;
+ gSaveBlock1Ptr->contestWinners[id].species = gContestMons[i].species;
+ gSaveBlock1Ptr->contestWinners[id].trainerId = gContestMons[i].otId;
+ StringCopy(gSaveBlock1Ptr->contestWinners[id].monName, gContestMons[i].nickname);
+ StringCopy(gSaveBlock1Ptr->contestWinners[id].trainerName, gContestMons[i].trainerName);
if(gLinkContestFlags & LINK_CONTEST_FLAG_IS_LINK)
- gSaveBlock1Ptr->contestWinners[r4].contestRank = CONTEST_RANK_LINK;
+ gSaveBlock1Ptr->contestWinners[id].contestRank = CONTEST_RANK_LINK;
else
- gSaveBlock1Ptr->contestWinners[r4].contestRank = gSpecialVar_ContestRank;
+ gSaveBlock1Ptr->contestWinners[id].contestRank = gSpecialVar_ContestRank;
if (rank != 0xFF)
- gSaveBlock1Ptr->contestWinners[r4].contestCategory = gSpecialVar_ContestCategory;
+ gSaveBlock1Ptr->contestWinners[id].contestCategory = gSpecialVar_ContestCategory;
else
- gSaveBlock1Ptr->contestWinners[r4].contestCategory = r7;
+ gSaveBlock1Ptr->contestWinners[id].contestCategory = r7;
}
else
{
@@ -5354,24 +5585,24 @@ u8 sub_80DEFA8(u8 rank, u8 b)
case CONTEST_RANK_MASTER:
if (b != 0)
{
- for (i = 5; i >= 1; i--)
+ for (i = NUM_CONTEST_HALL_WINNERS - 1; i >= 1; i--)
memcpy(&gSaveBlock1Ptr->contestWinners[i], &gSaveBlock1Ptr->contestWinners[i - 1], sizeof(struct ContestWinner));
}
return 0;
- default: // CONTEST_RANK_LINK
+ default:
switch (gSpecialVar_ContestCategory)
{
case CONTEST_CATEGORY_COOL:
- return 8;
+ return CONTEST_WINNER_MUSEUM_COOL - 1;
case CONTEST_CATEGORY_BEAUTY:
- return 9;
+ return CONTEST_WINNER_MUSEUM_BEAUTY - 1;
case CONTEST_CATEGORY_CUTE:
- return 10;
+ return CONTEST_WINNER_MUSEUM_CUTE - 1;
case CONTEST_CATEGORY_SMART:
- return 11;
+ return CONTEST_WINNER_MUSEUM_SMART - 1;
case CONTEST_CATEGORY_TOUGH:
default:
- return 12;
+ return CONTEST_WINNER_MUSEUM_TOUGH - 1;
}
}
}
@@ -5381,290 +5612,303 @@ void ClearContestWinnerPicsInContestHall(void)
s32 i;
for (i = 0; i < 8; i++)
- gSaveBlock1Ptr->contestWinners[i] = gUnknown_08587FA4[i];
+ gSaveBlock1Ptr->contestWinners[i] = gDefaultContestWinners[i];
}
-// The functions below are probably related to Contests in TV.
-static void sub_80DF080(u8 contestant)
+static void SetContestLiveUpdateFlags(u8 contestant)
{
s32 i;
- if (!gContestResources->field_10->excitementFrozen
- && gContestResources->field_10->bits_0 > 0
- && !eContestantStatus[contestant].disappointedRepeat)
+ if (!eContestExcitement.frozen
+ && eContestExcitement.moveExcitement > 0
+ && !eContestantStatus[contestant].repeatedMove)
{
- gContestResources->field_1c[contestant].unkC |= 1;
- gContestResources->field_1c[contestant].unkE_2 = 1;
+ gContestResources->tv[contestant].winnerFlags |= CONTESTLIVE_FLAG_EXCITING_APPEAL;
+ gContestResources->tv[contestant].madeExcitingAppeal = TRUE;
}
if (eContestantStatus[contestant].nervous)
- gContestResources->field_1c[contestant].unkC |= 2;
+ gContestResources->tv[contestant].winnerFlags |= CONTESTLIVE_FLAG_GOT_NERVOUS;
- if (!gContestResources->field_10->excitementFrozen
- && gContestResources->field_10->bits_0 != 0
- && gContestResources->field_10->unk2 == 60)
+ if (!eContestExcitement.frozen
+ && eContestExcitement.moveExcitement != 0
+ && eContestExcitement.excitementAppealBonus == 60)
{
- gContestResources->field_1c[contestant].unkC |= 4;
+ gContestResources->tv[contestant].winnerFlags |= CONTESTLIVE_FLAG_MAXED_EXCITEMENT;
}
- if (eContestantStatus[contestant].unk15_6
- && eContestantStatus[contestant].unk16 != 0)
+ if (eContestantStatus[contestant].usedComboMove
+ && eContestantStatus[contestant].completedCombo)
{
- gContestResources->field_1c[contestant].unkC |= 8;
+ gContestResources->tv[contestant].winnerFlags |= CONTESTLIVE_FLAG_USED_COMBO;
}
for (i = 0; i < CONTESTANT_COUNT; i++)
{
if (i != contestant && eContestantStatus[i].jam != 0)
{
- gContestResources->field_1c[contestant].unkC |= 0x10;
- gContestResources->field_1c[i].unkC |= 0x40;
+ gContestResources->tv[contestant].winnerFlags |= CONTESTLIVE_FLAG_STARTLED_OTHER;
+ gContestResources->tv[i].winnerFlags |= CONTESTLIVE_FLAG_GOT_STARTLED;
}
}
if (eContestantStatus[contestant].numTurnsSkipped != 0
|| eContestantStatus[contestant].noMoreTurns)
{
- gContestResources->field_1c[contestant].unkC |= 0x20;
+ gContestResources->tv[contestant].winnerFlags |= CONTESTLIVE_FLAG_SKIPPED_TURN;
}
else if (!eContestantStatus[contestant].nervous)
{
- gContestResources->field_1c[contestant].unkC |= 0x80;
- gContestResources->field_1c[contestant].unkE_1 = 1;
- gContestResources->field_1c[contestant].unk0[eContest.turnNumber] = eContestantStatus[contestant].currMove;
+ gContestResources->tv[contestant].winnerFlags |= CONTESTLIVE_FLAG_MADE_APPEAL;
+ gContestResources->tv[contestant].madeAppeal = TRUE;
+ gContestResources->tv[contestant].appeals[eContest.appealNumber] = eContestantStatus[contestant].currMove;
}
- if (eContestantStatus[contestant].disappointedRepeat)
- gContestResources->field_1c[contestant].unkD |= 2;
+ if (eContestantStatus[contestant].repeatedMove)
+ gContestResources->tv[contestant].loserFlags |= CONTESTLIVE_FLAG_REPEATED_MOVE;
if (eContest.applauseLevel == 4
- && !gContestResources->field_10->excitementFrozen
- && gContestResources->field_10->bits_0 < 0)
+ && !eContestExcitement.frozen
+ && eContestExcitement.moveExcitement < 0)
{
- gContestResources->field_1c[contestant].unkD |= 0x20;
+ gContestResources->tv[contestant].loserFlags |= CONTESTLIVE_FLAG_MISSED_EXCITEMENT;
}
}
-static void sub_80DF250(void)
+static void CalculateContestLiveUpdateData(void)
{
- u8 r1;
+ u8 loser;
s32 i, j;
- bool32 r12, r8;
- u16 sp0[6];
- u8 spC[6];
- u16 sp14[5];
- u8 var_38;
- u8 r3;
- u8 count;
-
- r1 = 0;
- var_38 = 0;
-
+ bool32 notLastInRound1, notLastInRound2;
+ u16 appealMoves[CONTEST_NUM_APPEALS + 1];
+ u8 numMoveUses[CONTEST_NUM_APPEALS + 1];
+ u16 moveCandidates[CONTEST_NUM_APPEALS];
+ u8 winner;
+ u8 mostUses;
+ u8 numMoveCandidates;
+
+ loser = 0;
+ winner = 0;
+
+ // Get loser/winner ids
for (i = 0; i < CONTESTANT_COUNT; i++)
{
if (gContestFinalStandings[i] == 0)
- var_38 = i;
- else if (gContestFinalStandings[i] == 3)
- r1 = i;
+ winner = i;
+ else if (gContestFinalStandings[i] == CONTESTANT_COUNT - 1)
+ loser = i;
}
- gContestResources->field_1c[r1].unkD |= 1;
+ // Set flags for commenting on loser
+ gContestResources->tv[loser].loserFlags |= CONTESTLIVE_FLAG_LOST;
for (i = 0; i < CONTESTANT_COUNT; i++)
{
- if (i != var_38 && gUnknown_02039F08[var_38] - gUnknown_02039F08[i] <= 50)
- gContestResources->field_1c[i].unkD |= 4;
+ if (i != winner && gContestMonTotalPoints[winner] - gContestMonTotalPoints[i] <= 50)
+ gContestResources->tv[i].loserFlags |= CONTESTLIVE_FLAG_LOST_SMALL_MARGIN;
- if (!gContestResources->field_1c[i].unkE_2)
- gContestResources->field_1c[i].unkD |= 8;
+ if (!gContestResources->tv[i].madeExcitingAppeal)
+ gContestResources->tv[i].loserFlags |= CONTESTLIVE_FLAG_NO_EXCITEMENT;
for (j = 0; j < CONTESTANT_COUNT; j++)
{
- if (gContestMonConditions[i] < gContestMonConditions[j])
+ if (gContestMonRound1Points[i] < gContestMonRound1Points[j])
break;
}
- if (j == 4 && gContestFinalStandings[i] != 0)
- gContestResources->field_1c[i].unkD |= 0x10;
+ if (j == CONTESTANT_COUNT && gContestFinalStandings[i] != 0)
+ gContestResources->tv[i].loserFlags |= CONTESTLIVE_FLAG_BLEW_LEAD;
- r12 = FALSE;
- r8 = FALSE;
+ notLastInRound1 = FALSE;
+ notLastInRound2 = FALSE;
for (j = 0; j < CONTESTANT_COUNT; j++)
{
- if (gContestMonConditions[i] > gContestMonConditions[j])
- r12 = TRUE;
- if (gUnknown_02039F18[i] > gUnknown_02039F18[j])
- r8 = TRUE;
+ if (gContestMonRound1Points[i] > gContestMonRound1Points[j])
+ notLastInRound1 = TRUE;
+ if (gContestMonRound2Points[i] > gContestMonRound2Points[j])
+ notLastInRound2 = TRUE;
}
- if (!r12 && !r8)
- gContestResources->field_1c[i].unkD |= 0x40;
+ if (!notLastInRound1 && !notLastInRound2)
+ gContestResources->tv[i].loserFlags |= CONTESTLIVE_FLAG_LAST_BOTH_ROUNDS;
- if (!gContestResources->field_1c[i].unkE_1)
- gContestResources->field_1c[i].unkD |= 0x80;
+ if (!gContestResources->tv[i].madeAppeal)
+ gContestResources->tv[i].loserFlags |= CONTESTLIVE_FLAG_NO_APPEALS;
}
- for (i = 0; i < 5; i++)
+ // Get what moves the winner used and how many times they used them
+ for (i = 0; i < CONTEST_NUM_APPEALS; i++)
{
- sp0[i] = 0;
- spC[i] = 0;
+ appealMoves[i] = MOVE_NONE;
+ numMoveUses[i] = 0;
}
- sp0[5] = 0xFFFF;
- spC[5] = 0;
+ appealMoves[CONTEST_NUM_APPEALS] = 0xFFFF;
+ numMoveUses[CONTEST_NUM_APPEALS] = 0;
- for (i = 0; i < 5; i++)
+ for (i = 0; i < CONTEST_NUM_APPEALS; i++)
{
- if (gContestResources->field_1c[var_38].unk0[i] != 0)
+ if (gContestResources->tv[winner].appeals[i] != MOVE_NONE)
{
- for (j = 0; j < 5; j++)
+ for (j = 0; j < CONTEST_NUM_APPEALS; j++)
{
- if (gContestResources->field_1c[var_38].unk0[i] != sp0[j])
+ if (gContestResources->tv[winner].appeals[i] != appealMoves[j])
{
- if (sp0[j] == 0)
+ if (appealMoves[j] == MOVE_NONE)
{
- sp0[j] = gContestResources->field_1c[var_38].unk0[i];
- spC[j]++;
+ appealMoves[j] = gContestResources->tv[winner].appeals[i];
+ numMoveUses[j]++;
}
}
else
{
- spC[j]++;
+ numMoveUses[j]++;
}
}
}
}
- sp14[0] = sp0[0];
- r3 = spC[0];
- count = 0;
- for (i = 1; sp0[i] != 0xFFFF; i++)
+ // Choose an appeal move to comment on for the winner (most commonly used)
+ moveCandidates[0] = appealMoves[0];
+ mostUses = numMoveUses[0];
+ numMoveCandidates = 0;
+ for (i = 1; appealMoves[i] != 0xFFFF; i++)
{
- if (r3 < spC[i])
+ if (mostUses < numMoveUses[i])
{
- sp14[0] = sp0[i];
- r3 = spC[i];
- count = 1;
+ moveCandidates[0] = appealMoves[i];
+ mostUses = numMoveUses[i];
+ numMoveCandidates = 1;
}
- else if (r3 == spC[i])
+ else if (mostUses == numMoveUses[i])
{
- sp14[count] = sp0[i];
- count++;
+ moveCandidates[numMoveCandidates] = appealMoves[i];
+ numMoveCandidates++;
}
}
- gContestResources->field_1c[var_38].unkA = sp14[Random() % count];
+ gContestResources->tv[winner].move = moveCandidates[Random() % numMoveCandidates];
}
-static void sub_80DF4F8(void)
+static void SetConestLiveUpdateTVData(void)
{
s32 i;
- u32 bits;
- u8 r7;
- u8 r9, r10;
+ u32 flags;
+ u8 winner;
+ u8 round1Placing, round2Placing;
u8 count;
- u8 r5;
- u8 r2;
- u16 var;
- u8 r4;
- u8 r6;
- u8 sp0[4];
-
+ u8 randAction;
+ u8 numLoserCandidates;
+ u8 flagId;
+ u16 winnerFlag;
+ u8 loserFlag;
+ u8 loser;
+ u8 loserCandidates[CONTESTANT_COUNT - 1];
+
+ // Players mon didn't win, don't generate show
if (gContestFinalStandings[gContestPlayerMonIndex] != 0)
return;
- r7 = 0;
+ // Get winner id (unnecessary, we now know it's gContestPlayerMonIndex)
+ winner = 0;
for (i = 0; i < CONTESTANT_COUNT; i++)
{
if (gContestFinalStandings[i] == 0)
- r7 = i;
+ winner = i;
}
- r9 = 0;
- r10 = 0;
+ // Get winner's placement in Round 1 and 2
+ round1Placing = 0;
+ round2Placing = 0;
for (i = 0; i < CONTESTANT_COUNT; i++)
{
- if (gContestMonConditions[r7] < gContestMonConditions[i])
- r9++;
- if (gUnknown_02039F18[r7] < gUnknown_02039F18[i])
- r10++;
+ if (gContestMonRound1Points[winner] < gContestMonRound1Points[i])
+ round1Placing++;
+ if (gContestMonRound2Points[winner] < gContestMonRound2Points[i])
+ round2Placing++;
}
- bits = gContestResources->field_1c[r7].unkC;
+ // Count how many TV comment-worthy actions the winner took
+ flags = gContestResources->tv[winner].winnerFlags;
count = 0;
- for (i = 0; i < 8; bits >>= 1, i++)
+ for (i = 0; i < 8; flags >>= 1, i++)
{
- if (bits & 1)
+ if (flags & 1)
count++;
}
- r5 = Random() % count;
- bits = gContestResources->field_1c[r7].unkC;
+ // Randomly choose one of these actions to comment on
+ randAction = Random() % count;
+ flags = gContestResources->tv[winner].winnerFlags;
count = 0;
- r2 = 0;
- for (i = 0; i < 8; bits >>= 1, r2++, i++)
+ flagId = 0;
+ for (i = 0; i < 8; flags >>= 1, flagId++, i++)
{
- if (!(bits & 1))
+ if (!(flags & 1))
continue;
- if (r5 == count)
+ if (randAction == count)
break;
count++;
}
+ winnerFlag = 1 << flagId;
- var = 1 << r2;
- if (r7 == 0)
+ // Pick a losing player with the highest severity of bad actions to comment on
+ if (winner == 0)
{
- sp0[0] = 1;
- r4 = gContestResources->field_1c[1].unkD;
+ loserCandidates[0] = 1;
+ loserFlag = gContestResources->tv[1].loserFlags;
i = 2;
}
else
{
- sp0[0] = 0;
- r4 = gContestResources->field_1c[0].unkD;
+ loserCandidates[0] = 0;
+ loserFlag = gContestResources->tv[0].loserFlags;
i = 1;
}
- r5 = 1;
+ numLoserCandidates = 1;
for (; i < CONTESTANT_COUNT; i++)
{
- if (i != r7)
+ if (i != winner)
{
- if (r4 < gContestResources->field_1c[i].unkD)
+ if (loserFlag < gContestResources->tv[i].loserFlags)
{
- sp0[0] = i;
- r4 = gContestResources->field_1c[i].unkD;
- r5 = 1;
+ // Losing player currently has the worst (highest) set of flags, only candidate
+ loserCandidates[0] = i;
+ loserFlag = gContestResources->tv[i].loserFlags;
+ numLoserCandidates = 1;
}
- else if (r4 == gContestResources->field_1c[i].unkD)
+ else if (loserFlag == gContestResources->tv[i].loserFlags)
{
- sp0[r5] = i;
- r5++;
+ // Tie, increment number of loser candidates
+ loserCandidates[numLoserCandidates] = i;
+ numLoserCandidates++;
}
}
}
+ loser = loserCandidates[Random() % numLoserCandidates];
- r6 = sp0[Random() % r5];
- r2 = 0x80;
- for (i = 0; i < 8; r2 >>= 1, i++)
+ // Choose the "worst" action to comment on (flag with highest value)
+ flagId = CONTESTLIVE_FLAG_NO_APPEALS;
+ for (i = 0; i < 8; flagId >>= 1, i++)
{
- r4 = gContestResources->field_1c[r6].unkD & r2;
- if (r4)
+ loserFlag = gContestResources->tv[loser].loserFlags & flagId;
+ if (loserFlag)
break;
}
- ContestLiveUpdates_BeforeInterview_1(r9);
- ContestLiveUpdates_BeforeInterview_2(r10);
- ContestLiveUpdates_BeforeInterview_3(var);
- ContestLiveUpdates_BeforeInterview_4(gContestResources->field_1c[r7].unkA);
- ContestLiveUpdates_BeforeInterview_5(r4, r6);
+ ContestLiveUpdates_Init(round1Placing);
+ ContestLiveUpdates_SetRound2Placing(round2Placing);
+ ContestLiveUpdates_SetWinnerAppealFlag(winnerFlag);
+ ContestLiveUpdates_SetWinnerMoveUsed(gContestResources->tv[winner].move);
+ ContestLiveUpdates_SetLoserData(loserFlag, loser);
}
// Unused
-void ContestDebugToggleBitfields(bool8 showUnkD)
+void ContestDebugToggleBitfields(bool8 loserFlags)
{
if (eContestDebugMode == CONTEST_DEBUG_MODE_OFF)
{
- if (!showUnkD)
- eContestDebugMode = CONTEST_DEBUG_MODE_PRINT_UNK_C;
+ if (!loserFlags)
+ eContestDebugMode = CONTEST_DEBUG_MODE_PRINT_WINNER_FLAGS;
else
- eContestDebugMode = CONTEST_DEBUG_MODE_PRINT_UNK_D;
+ eContestDebugMode = CONTEST_DEBUG_MODE_PRINT_LOSER_FLAGS;
}
else
{
@@ -5694,19 +5938,19 @@ static void ContestDebugPrintBitStrings(void)
if (!gEnableContestDebugging)
return;
- if (eContestDebugMode != CONTEST_DEBUG_MODE_PRINT_UNK_C && eContestDebugMode != CONTEST_DEBUG_MODE_PRINT_UNK_D)
+ if (eContestDebugMode != CONTEST_DEBUG_MODE_PRINT_WINNER_FLAGS && eContestDebugMode != CONTEST_DEBUG_MODE_PRINT_LOSER_FLAGS)
return;
for (i = 0; i < CONTESTANT_COUNT; i++)
FillWindowPixelBuffer(i, PIXEL_FILL(0));
- if (eContestDebugMode == CONTEST_DEBUG_MODE_PRINT_UNK_C)
+ if (eContestDebugMode == CONTEST_DEBUG_MODE_PRINT_WINNER_FLAGS)
{
for (i = 0; i < CONTESTANT_COUNT; i++)
{
txtPtr = StringCopy(text1, gText_CDot);
Contest_PrintTextToBg0WindowAt(gContestantTurnOrder[i], text1, 5, 1, 7);
- bits = gContestResources->field_1c[i].unkC;
+ bits = gContestResources->tv[i].winnerFlags;
for (j = 7; j > -1; j--) // Weird loop.
{
txtPtr = ConvertIntToDecimalStringN(txtPtr, bits & 1, STR_CONV_MODE_LEFT_ALIGN, 1);
@@ -5721,12 +5965,12 @@ static void ContestDebugPrintBitStrings(void)
Contest_PrintTextToBg0WindowAt(gContestantTurnOrder[i], text1 + j, 55, 1, 7);
}
}
- else
+ else // CONTEST_DEBUG_MODE_PRINT_LOSER_FLAGS
{
for (i = 0; i < CONTESTANT_COUNT; i++)
{
StringCopy(text1, gText_BDot);
- bits = gContestResources->field_1c[i].unkD;
+ bits = gContestResources->tv[i].loserFlags;
txtPtr = &text1[2];
for (j = 7; j > -1; j--) // Weird loop.
{
@@ -5745,14 +5989,14 @@ static void ContestDebugPrintBitStrings(void)
SwapMoveDescAndContestTilemaps();
}
-static u8 sub_80DF940(u8 *nickname)
+static u8 GetMonNicknameLanguage(u8 *nickname)
{
u8 ret = GAME_LANGUAGE;
if (nickname[0] == EXT_CTRL_CODE_BEGIN && nickname[1] == EXT_CTRL_CODE_JPN)
return LANGUAGE_ENGLISH;
- if (StringLength(nickname) < 6)
+ if (StringLength(nickname) < PLAYER_NAME_LENGTH - 1)
{
while (*nickname != EOS)
{
@@ -5786,7 +6030,7 @@ static u8 sub_80DF940(u8 *nickname)
return ret;
}
-static void sub_80DF9D4(u8 *playerName)
+static void StripPlayerNameForLinkContest(u8 *playerName)
{
u8 chr = playerName[5];
@@ -5794,7 +6038,7 @@ static void sub_80DF9D4(u8 *playerName)
playerName[PLAYER_NAME_LENGTH] = chr;
}
-static void sub_80DF9E0(u8 *monName, s32 language)
+static void StripMonNameForLinkContest(u8 *monName, s32 language)
{
u8 chr;
@@ -5812,13 +6056,13 @@ static void sub_80DF9E0(u8 *monName, s32 language)
}
}
-void sub_80DFA08(struct ContestPokemon *mon, s32 language)
+void StripPlayerAndMonNamesForLinkContest(struct ContestPokemon *mon, s32 language)
{
u8 *name = mon->nickname;
if (language == LANGUAGE_JAPANESE)
{
- ConvertInternationalString(name, sub_80DF940(name));
+ ConvertInternationalString(name, GetMonNicknameLanguage(name));
}
else if (name[POKEMON_NAME_LENGTH] == EXT_CTRL_CODE_BEGIN)
{
diff --git a/src/contest_ai.c b/src/contest_ai.c
index 723c503ab..2f048718f 100644
--- a/src/contest_ai.c
+++ b/src/contest_ai.c
@@ -4,16 +4,17 @@
#include "random.h"
#include "contest_ai.h"
#include "contest_effect.h"
+#include "constants/moves.h"
extern const u8 *gAIScriptPtr;
-extern const u8 *gContestAIChecks[];
+extern const u8 *gContestAI_ScriptsTable[];
static void ContestAICmd_score(void);
-static void ContestAICmd_get_turn(void);
-static void ContestAICmd_if_turn_less_than(void);
-static void ContestAICmd_if_turn_more_than(void);
-static void ContestAICmd_if_turn_eq(void);
-static void ContestAICmd_if_turn_not_eq(void);
+static void ContestAICmd_get_appeal_num(void);
+static void ContestAICmd_if_appeal_num_less_than(void);
+static void ContestAICmd_if_appeal_num_more_than(void);
+static void ContestAICmd_if_appeal_num_eq(void);
+static void ContestAICmd_if_appeal_num_not_eq(void);
static void ContestAICmd_get_excitement(void);
static void ContestAICmd_if_excitement_less_than(void);
static void ContestAICmd_if_excitement_more_than(void);
@@ -29,22 +30,22 @@ static void ContestAICmd_if_user_condition_less_than(void);
static void ContestAICmd_if_user_condition_more_than(void);
static void ContestAICmd_if_user_condition_eq(void);
static void ContestAICmd_if_user_condition_not_eq(void);
-static void ContestAICmd_unk_15(void);
-static void ContestAICmd_unk_16(void);
-static void ContestAICmd_unk_17(void);
-static void ContestAICmd_unk_18(void);
-static void ContestAICmd_unk_19(void);
-static void ContestAICmd_unk_1A(void);
-static void ContestAICmd_unk_1B(void);
-static void ContestAICmd_unk_1C(void);
-static void ContestAICmd_unk_1D(void);
-static void ContestAICmd_unk_1E(void);
+static void ContestAICmd_get_points(void);
+static void ContestAICmd_if_points_less_than(void);
+static void ContestAICmd_if_points_more_than(void);
+static void ContestAICmd_if_points_eq(void);
+static void ContestAICmd_if_points_not_eq(void);
+static void ContestAICmd_get_preliminary_points(void);
+static void ContestAICmd_if_preliminary_points_less_than(void);
+static void ContestAICmd_if_preliminary_points_more_than(void);
+static void ContestAICmd_if_preliminary_points_eq(void);
+static void ContestAICmd_if_preliminary_points_not_eq(void);
static void ContestAICmd_get_contest_type(void);
static void ContestAICmd_if_contest_type_eq(void);
static void ContestAICmd_if_contest_type_not_eq(void);
static void ContestAICmd_get_move_excitement(void);
static void ContestAICmd_if_move_excitement_less_than(void);
-static void ContestAICmd_if_move_excitement_greater_than(void);
+static void ContestAICmd_if_move_excitement_more_than(void);
static void ContestAICmd_if_move_excitement_eq(void);
static void ContestAICmd_if_move_excitement_not_eq(void);
static void ContestAICmd_get_move_effect(void);
@@ -55,18 +56,18 @@ static void ContestAICmd_if_move_effect_type_eq(void);
static void ContestAICmd_if_move_effect_type_not_eq(void);
static void ContestAICmd_check_most_appealing_move(void);
static void ContestAICmd_if_most_appealing_move(void);
-static void ContestAICmd_unk_2F(void);
-static void ContestAICmd_unk_30(void);
-static void ContestAICmd_unk_31(void);
-static void ContestAICmd_unk_32(void);
-static void ContestAICmd_unk_33(void);
-static void ContestAICmd_unk_34(void);
-static void ContestAICmd_unk_35(void);
-static void ContestAICmd_unk_36(void);
-static void ContestAICmd_unk_37(void);
-static void ContestAICmd_unk_38(void);
-static void ContestAICmd_unk_39(void);
-static void ContestAICmd_unk_3A(void);
+static void ContestAICmd_check_most_jamming_move(void);
+static void ContestAICmd_if_most_jamming_move(void);
+static void ContestAICmd_get_num_move_hearts(void);
+static void ContestAICmd_if_num_move_hearts_less_than(void);
+static void ContestAICmd_if_num_move_hearts_more_than(void);
+static void ContestAICmd_if_num_move_hearts_eq(void);
+static void ContestAICmd_if_num_move_hearts_not_eq(void);
+static void ContestAICmd_get_num_move_jam_hearts(void);
+static void ContestAICmd_if_num_move_jam_hearts_less_than(void);
+static void ContestAICmd_if_num_move_jam_hearts_more_than(void);
+static void ContestAICmd_if_num_move_jam_hearts_eq(void);
+static void ContestAICmd_if_num_move_jam_hearts_not_eq(void);
static void ContestAICmd_get_move_used_count(void);
static void ContestAICmd_if_most_used_count_less_than(void);
static void ContestAICmd_if_most_used_count_more_than(void);
@@ -94,201 +95,201 @@ static void ContestAICmd_if_used_combo_starter_not_eq(void);
static void ContestAICmd_check_can_participate(void);
static void ContestAICmd_if_can_participate(void);
static void ContestAICmd_if_cannot_participate(void);
-static void ContestAICmd_get_val_812A188(void);
-static void ContestAICmd_unk_57(void);
-static void ContestAICmd_contest_58(void);
-static void ContestAICmd_unk_59(void);
-static void ContestAICmd_unk_5A(void);
-static void ContestAICmd_unk_5B(void);
-static void ContestAICmd_unk_5C(void);
-static void ContestAICmd_unk_5D(void);
-static void ContestAICmd_unk_5E(void);
-static void ContestAICmd_unk_5F(void);
-static void ContestAICmd_unk_60(void);
-static void ContestAICmd_unk_61(void);
-static void ContestAICmd_unk_62(void);
-static void ContestAICmd_unk_63(void);
-static void ContestAICmd_unk_64(void);
-static void ContestAICmd_unk_65(void);
-static void ContestAICmd_unk_66(void);
-static void ContestAICmd_unk_67(void);
-static void ContestAICmd_unk_68(void);
-static void ContestAICmd_unk_69(void);
-static void ContestAICmd_unk_6A(void);
-static void ContestAICmd_unk_6B(void);
-static void ContestAICmd_unk_6C(void);
-static void ContestAICmd_unk_6D(void);
-static void ContestAICmd_unk_6E(void);
-static void ContestAICmd_unk_6F(void);
-static void ContestAICmd_unk_70(void);
-static void ContestAICmd_unk_71(void);
-static void ContestAICmd_unk_72(void);
-static void ContestAICmd_unk_73(void);
-static void ContestAICmd_unk_74(void);
-static void ContestAICmd_unk_75(void);
-static void ContestAICmd_unk_76(void);
-static void ContestAICmd_unk_77(void);
-static void ContestAICmd_unk_78(void);
-static void ContestAICmd_unk_79(void);
-static void ContestAICmd_unk_7A(void);
-static void ContestAICmd_unk_7B(void);
-static void ContestAICmd_unk_7C(void);
-static void ContestAICmd_if_random(void);
-static void ContestAICmd_unk_7E(void);
-static void ContestAICmd_jump(void);
+static void ContestAICmd_get_completed_combo(void);
+static void ContestAICmd_if_completed_combo(void);
+static void ContestAICmd_if_not_completed_combo(void);
+static void ContestAICmd_get_points_diff(void);
+static void ContestAICmd_if_points_more_than_mon(void);
+static void ContestAICmd_if_points_less_than_mon(void);
+static void ContestAICmd_if_points_eq_mon(void);
+static void ContestAICmd_if_points_not_eq_mon(void);
+static void ContestAICmd_get_preliminary_points_diff(void);
+static void ContestAICmd_if_preliminary_points_more_than_mon(void);
+static void ContestAICmd_if_preliminary_points_less_than_mon(void);
+static void ContestAICmd_if_preliminary_points_eq_mon(void);
+static void ContestAICmd_if_preliminary_points_not_eq_mon(void);
+static void ContestAICmd_get_used_moves_effect(void);
+static void ContestAICmd_if_used_moves_effect_less_than(void);
+static void ContestAICmd_if_used_moves_effect_more_than(void);
+static void ContestAICmd_if_used_moves_effect_eq(void);
+static void ContestAICmd_if_used_moves_effect_not_eq(void);
+static void ContestAICmd_get_used_moves_excitement(void);
+static void ContestAICmd_if_used_moves_excitement_less_than(void);
+static void ContestAICmd_if_used_moves_excitement_more_than(void);
+static void ContestAICmd_if_used_moves_excitement_eq(void);
+static void ContestAICmd_if_used_moves_excitement_not_eq(void);
+static void ContestAICmd_get_used_moves_effect_type(void);
+static void ContestAICmd_if_used_moves_effect_type_eq(void);
+static void ContestAICmd_if_used_moves_effect_type_not_eq(void);
+static void ContestAICmd_save_result(void);
+static void ContestAICmd_setvar(void);
+static void ContestAICmd_add(void);
+static void ContestAICmd_addvar(void);
+static void ContestAICmd_addvar_duplicate(void);
+static void ContestAICmd_if_less_than(void);
+static void ContestAICmd_if_greater_than(void);
+static void ContestAICmd_if_eq(void);
+static void ContestAICmd_if_not_eq(void);
+static void ContestAICmd_if_less_than_var(void);
+static void ContestAICmd_if_greater_than_var(void);
+static void ContestAICmd_if_eq_var(void);
+static void ContestAICmd_if_not_eq_var(void);
+static void ContestAICmd_if_random_less_than(void);
+static void ContestAICmd_if_random_greater_than(void);
+static void ContestAICmd_goto(void);
static void ContestAICmd_call(void);
static void ContestAICmd_end(void);
static void ContestAICmd_check_user_has_exciting_move(void);
static void ContestAICmd_if_user_has_exciting_move(void);
static void ContestAICmd_if_user_doesnt_have_exciting_move(void);
-static void ContestAICmd_unk_85(void);
-static void ContestAICmd_unk_86(void);
-static void ContestAICmd_if_effect_in_user_moveset(void);
+static void ContestAICmd_check_user_has_move(void);
+static void ContestAICmd_if_user_has_move(void);
+static void ContestAICmd_if_user_doesnt_have_move(void);
typedef void (* ContestAICmdFunc)(void);
static const ContestAICmdFunc sContestAICmdTable[] =
{
- ContestAICmd_score, // 0x00
- ContestAICmd_get_turn, // 0x01
- ContestAICmd_if_turn_less_than, // 0x02
- ContestAICmd_if_turn_more_than, // 0x03
- ContestAICmd_if_turn_eq, // 0x04
- ContestAICmd_if_turn_not_eq, // 0x05
- ContestAICmd_get_excitement, // 0x06
- ContestAICmd_if_excitement_less_than, // 0x07
- ContestAICmd_if_excitement_more_than, // 0x08
- ContestAICmd_if_excitement_eq, // 0x09
- ContestAICmd_if_excitement_not_eq, // 0x0A
- ContestAICmd_get_user_order, // 0x0B
- ContestAICmd_if_user_order_less_than, // 0x0C
- ContestAICmd_if_user_order_more_than, // 0x0D
- ContestAICmd_if_user_order_eq, // 0x0E
- ContestAICmd_if_user_order_not_eq, // 0x0F
- ContestAICmd_get_user_condition, // 0x10
- ContestAICmd_if_user_condition_less_than, // 0x11
- ContestAICmd_if_user_condition_more_than, // 0x12
- ContestAICmd_if_user_condition_eq, // 0x13
- ContestAICmd_if_user_condition_not_eq, // 0x14
- ContestAICmd_unk_15, // 0x15
- ContestAICmd_unk_16, // 0x16
- ContestAICmd_unk_17, // 0x17
- ContestAICmd_unk_18, // 0x18
- ContestAICmd_unk_19, // 0x19
- ContestAICmd_unk_1A, // 0x1A
- ContestAICmd_unk_1B, // 0x1B
- ContestAICmd_unk_1C, // 0x1C
- ContestAICmd_unk_1D, // 0x1D
- ContestAICmd_unk_1E, // 0x1E
- ContestAICmd_get_contest_type, // 0x1F
- ContestAICmd_if_contest_type_eq, // 0x20
- ContestAICmd_if_contest_type_not_eq, // 0x21
- ContestAICmd_get_move_excitement, // 0x22
- ContestAICmd_if_move_excitement_less_than, // 0x23
- ContestAICmd_if_move_excitement_greater_than, // 0x24
- ContestAICmd_if_move_excitement_eq, // 0x25
- ContestAICmd_if_move_excitement_not_eq, // 0x26
- ContestAICmd_get_move_effect, // 0x27
- ContestAICmd_if_move_effect_eq, // 0x28
- ContestAICmd_if_move_effect_not_eq, // 0x29
- ContestAICmd_get_move_effect_type, // 0x2A
- ContestAICmd_if_move_effect_type_eq, // 0x2B
- ContestAICmd_if_move_effect_type_not_eq, // 0x2C
- ContestAICmd_check_most_appealing_move, // 0x2D
- ContestAICmd_if_most_appealing_move, // 0x2E
- ContestAICmd_unk_2F, // 0x2F
- ContestAICmd_unk_30, // 0x30
- ContestAICmd_unk_31, // 0x31
- ContestAICmd_unk_32, // 0x32
- ContestAICmd_unk_33, // 0x33
- ContestAICmd_unk_34, // 0x34
- ContestAICmd_unk_35, // 0x35
- ContestAICmd_unk_36, // 0x36
- ContestAICmd_unk_37, // 0x37
- ContestAICmd_unk_38, // 0x38
- ContestAICmd_unk_39, // 0x39
- ContestAICmd_unk_3A, // 0x3A
- ContestAICmd_get_move_used_count, // 0x3B
- ContestAICmd_if_most_used_count_less_than, // 0x3C
- ContestAICmd_if_most_used_count_more_than, // 0x3D
- ContestAICmd_if_most_used_count_eq, // 0x3E
- ContestAICmd_if_most_used_count_not_eq, // 0x3F
- ContestAICmd_check_combo_starter, // 0x40
- ContestAICmd_if_combo_starter, // 0x41
- ContestAICmd_if_not_combo_starter, // 0x42
- ContestAICmd_check_combo_finisher, // 0x43
- ContestAICmd_if_combo_finisher, // 0x44
- ContestAICmd_if_not_combo_finisher, // 0x45
- ContestAICmd_check_would_finish_combo, // 0x46
- ContestAICmd_if_would_finish_combo, // 0x47
- ContestAICmd_if_would_not_finish_combo, // 0x48
- ContestAICmd_get_condition, // 0x49
- ContestAICmd_if_condition_less_than, // 0x4A
- ContestAICmd_if_condition_more_than, // 0x4B
- ContestAICmd_if_condition_eq, // 0x4C
- ContestAICmd_if_condition_not_eq, // 0x4D
- ContestAICmd_get_used_combo_starter, // 0x4E
- ContestAICmd_if_used_combo_starter_less_than, // 0x4F
- ContestAICmd_if_used_combo_starter_more_than, // 0x50
- ContestAICmd_if_used_combo_starter_eq, // 0x51
- ContestAICmd_if_used_combo_starter_not_eq, // 0x52
- ContestAICmd_check_can_participate, // 0x53
- ContestAICmd_if_can_participate, // 0x54
- ContestAICmd_if_cannot_participate, // 0x55
- ContestAICmd_get_val_812A188, // 0x56
- ContestAICmd_unk_57, // 0x57
- ContestAICmd_contest_58, // 0x58
- ContestAICmd_unk_59, // 0x59
- ContestAICmd_unk_5A, // 0x5A
- ContestAICmd_unk_5B, // 0x5B
- ContestAICmd_unk_5C, // 0x5C
- ContestAICmd_unk_5D, // 0x5D
- ContestAICmd_unk_5E, // 0x5E
- ContestAICmd_unk_5F, // 0x5F
- ContestAICmd_unk_60, // 0x60
- ContestAICmd_unk_61, // 0x61
- ContestAICmd_unk_62, // 0x62
- ContestAICmd_unk_63, // 0x63
- ContestAICmd_unk_64, // 0x64
- ContestAICmd_unk_65, // 0x65
- ContestAICmd_unk_66, // 0x66
- ContestAICmd_unk_67, // 0x67
- ContestAICmd_unk_68, // 0x68
- ContestAICmd_unk_69, // 0x69
- ContestAICmd_unk_6A, // 0x6A
- ContestAICmd_unk_6B, // 0x6B
- ContestAICmd_unk_6C, // 0x6C
- ContestAICmd_unk_6D, // 0x6D
- ContestAICmd_unk_6E, // 0x6E
- ContestAICmd_unk_6F, // 0x6F
- ContestAICmd_unk_70, // 0x70
- ContestAICmd_unk_71, // 0x71
- ContestAICmd_unk_72, // 0x72
- ContestAICmd_unk_73, // 0x73
- ContestAICmd_unk_74, // 0x74
- ContestAICmd_unk_75, // 0x75
- ContestAICmd_unk_76, // 0x76
- ContestAICmd_unk_77, // 0x77
- ContestAICmd_unk_78, // 0x78
- ContestAICmd_unk_79, // 0x79
- ContestAICmd_unk_7A, // 0x7A
- ContestAICmd_unk_7B, // 0x7B
- ContestAICmd_unk_7C, // 0x7C
- ContestAICmd_if_random, // 0x7D
- ContestAICmd_unk_7E, // 0x7E
- ContestAICmd_jump, // 0x7F
- ContestAICmd_call, // 0x80
- ContestAICmd_end, // 0x81
- ContestAICmd_check_user_has_exciting_move, // 0x82
- ContestAICmd_if_user_has_exciting_move, // 0x83
- ContestAICmd_if_user_doesnt_have_exciting_move, // 0x84
- ContestAICmd_unk_85, // 0x85
- ContestAICmd_unk_86, // 0x86
- ContestAICmd_if_effect_in_user_moveset, // 0x87
+ ContestAICmd_score, // 0x00
+ ContestAICmd_get_appeal_num, // 0x01
+ ContestAICmd_if_appeal_num_less_than, // 0x02
+ ContestAICmd_if_appeal_num_more_than, // 0x03
+ ContestAICmd_if_appeal_num_eq, // 0x04
+ ContestAICmd_if_appeal_num_not_eq, // 0x05
+ ContestAICmd_get_excitement, // 0x06
+ ContestAICmd_if_excitement_less_than, // 0x07
+ ContestAICmd_if_excitement_more_than, // 0x08
+ ContestAICmd_if_excitement_eq, // 0x09
+ ContestAICmd_if_excitement_not_eq, // 0x0A
+ ContestAICmd_get_user_order, // 0x0B
+ ContestAICmd_if_user_order_less_than, // 0x0C
+ ContestAICmd_if_user_order_more_than, // 0x0D
+ ContestAICmd_if_user_order_eq, // 0x0E
+ ContestAICmd_if_user_order_not_eq, // 0x0F
+ ContestAICmd_get_user_condition, // 0x10
+ ContestAICmd_if_user_condition_less_than, // 0x11
+ ContestAICmd_if_user_condition_more_than, // 0x12
+ ContestAICmd_if_user_condition_eq, // 0x13
+ ContestAICmd_if_user_condition_not_eq, // 0x14
+ ContestAICmd_get_points, // 0x15
+ ContestAICmd_if_points_less_than, // 0x16
+ ContestAICmd_if_points_more_than, // 0x17
+ ContestAICmd_if_points_eq, // 0x18
+ ContestAICmd_if_points_not_eq, // 0x19
+ ContestAICmd_get_preliminary_points, // 0x1A
+ ContestAICmd_if_preliminary_points_less_than, // 0x1B
+ ContestAICmd_if_preliminary_points_more_than, // 0x1C
+ ContestAICmd_if_preliminary_points_eq, // 0x1D
+ ContestAICmd_if_preliminary_points_not_eq, // 0x1E
+ ContestAICmd_get_contest_type, // 0x1F
+ ContestAICmd_if_contest_type_eq, // 0x20
+ ContestAICmd_if_contest_type_not_eq, // 0x21
+ ContestAICmd_get_move_excitement, // 0x22
+ ContestAICmd_if_move_excitement_less_than, // 0x23
+ ContestAICmd_if_move_excitement_more_than, // 0x24
+ ContestAICmd_if_move_excitement_eq, // 0x25
+ ContestAICmd_if_move_excitement_not_eq, // 0x26
+ ContestAICmd_get_move_effect, // 0x27
+ ContestAICmd_if_move_effect_eq, // 0x28
+ ContestAICmd_if_move_effect_not_eq, // 0x29
+ ContestAICmd_get_move_effect_type, // 0x2A
+ ContestAICmd_if_move_effect_type_eq, // 0x2B
+ ContestAICmd_if_move_effect_type_not_eq, // 0x2C
+ ContestAICmd_check_most_appealing_move, // 0x2D
+ ContestAICmd_if_most_appealing_move, // 0x2E
+ ContestAICmd_check_most_jamming_move, // 0x2F
+ ContestAICmd_if_most_jamming_move, // 0x30
+ ContestAICmd_get_num_move_hearts, // 0x31
+ ContestAICmd_if_num_move_hearts_less_than, // 0x32
+ ContestAICmd_if_num_move_hearts_more_than, // 0x33
+ ContestAICmd_if_num_move_hearts_eq, // 0x34
+ ContestAICmd_if_num_move_hearts_not_eq, // 0x35
+ ContestAICmd_get_num_move_jam_hearts, // 0x36
+ ContestAICmd_if_num_move_jam_hearts_less_than, // 0x37
+ ContestAICmd_if_num_move_jam_hearts_more_than, // 0x38
+ ContestAICmd_if_num_move_jam_hearts_eq, // 0x39
+ ContestAICmd_if_num_move_jam_hearts_not_eq, // 0x3A
+ ContestAICmd_get_move_used_count, // 0x3B
+ ContestAICmd_if_most_used_count_less_than, // 0x3C
+ ContestAICmd_if_most_used_count_more_than, // 0x3D
+ ContestAICmd_if_most_used_count_eq, // 0x3E
+ ContestAICmd_if_most_used_count_not_eq, // 0x3F
+ ContestAICmd_check_combo_starter, // 0x40
+ ContestAICmd_if_combo_starter, // 0x41
+ ContestAICmd_if_not_combo_starter, // 0x42
+ ContestAICmd_check_combo_finisher, // 0x43
+ ContestAICmd_if_combo_finisher, // 0x44
+ ContestAICmd_if_not_combo_finisher, // 0x45
+ ContestAICmd_check_would_finish_combo, // 0x46
+ ContestAICmd_if_would_finish_combo, // 0x47
+ ContestAICmd_if_would_not_finish_combo, // 0x48
+ ContestAICmd_get_condition, // 0x49
+ ContestAICmd_if_condition_less_than, // 0x4A
+ ContestAICmd_if_condition_more_than, // 0x4B
+ ContestAICmd_if_condition_eq, // 0x4C
+ ContestAICmd_if_condition_not_eq, // 0x4D
+ ContestAICmd_get_used_combo_starter, // 0x4E
+ ContestAICmd_if_used_combo_starter_less_than, // 0x4F
+ ContestAICmd_if_used_combo_starter_more_than, // 0x50
+ ContestAICmd_if_used_combo_starter_eq, // 0x51
+ ContestAICmd_if_used_combo_starter_not_eq, // 0x52
+ ContestAICmd_check_can_participate, // 0x53
+ ContestAICmd_if_can_participate, // 0x54
+ ContestAICmd_if_cannot_participate, // 0x55
+ ContestAICmd_get_completed_combo, // 0x56
+ ContestAICmd_if_completed_combo, // 0x57
+ ContestAICmd_if_not_completed_combo, // 0x58
+ ContestAICmd_get_points_diff, // 0x59
+ ContestAICmd_if_points_more_than_mon, // 0x5A
+ ContestAICmd_if_points_less_than_mon, // 0x5B
+ ContestAICmd_if_points_eq_mon, // 0x5C
+ ContestAICmd_if_points_not_eq_mon, // 0x5D
+ ContestAICmd_get_preliminary_points_diff, // 0x5E
+ ContestAICmd_if_preliminary_points_more_than_mon, // 0x5F
+ ContestAICmd_if_preliminary_points_less_than_mon, // 0x60
+ ContestAICmd_if_preliminary_points_eq_mon, // 0x61
+ ContestAICmd_if_preliminary_points_not_eq_mon, // 0x62
+ ContestAICmd_get_used_moves_effect, // 0x63
+ ContestAICmd_if_used_moves_effect_less_than, // 0x64
+ ContestAICmd_if_used_moves_effect_more_than, // 0x65
+ ContestAICmd_if_used_moves_effect_eq, // 0x66
+ ContestAICmd_if_used_moves_effect_not_eq, // 0x67
+ ContestAICmd_get_used_moves_excitement, // 0x68
+ ContestAICmd_if_used_moves_excitement_less_than, // 0x69
+ ContestAICmd_if_used_moves_excitement_more_than, // 0x6A
+ ContestAICmd_if_used_moves_excitement_eq, // 0x6B
+ ContestAICmd_if_used_moves_excitement_not_eq, // 0x6C
+ ContestAICmd_get_used_moves_effect_type, // 0x6D
+ ContestAICmd_if_used_moves_effect_type_eq, // 0x6E
+ ContestAICmd_if_used_moves_effect_type_not_eq, // 0x6F
+ ContestAICmd_save_result, // 0x70
+ ContestAICmd_setvar, // 0x71
+ ContestAICmd_add, // 0x72
+ ContestAICmd_addvar, // 0x73
+ ContestAICmd_addvar_duplicate, // 0x74
+ ContestAICmd_if_less_than, // 0x75
+ ContestAICmd_if_greater_than, // 0x76
+ ContestAICmd_if_eq, // 0x77
+ ContestAICmd_if_not_eq, // 0x78
+ ContestAICmd_if_less_than_var, // 0x79
+ ContestAICmd_if_greater_than_var, // 0x7A
+ ContestAICmd_if_eq_var, // 0x7B
+ ContestAICmd_if_not_eq_var, // 0x7C
+ ContestAICmd_if_random_less_than, // 0x7D
+ ContestAICmd_if_random_greater_than, // 0x7E
+ ContestAICmd_goto, // 0x7F
+ ContestAICmd_call, // 0x80
+ ContestAICmd_end, // 0x81
+ ContestAICmd_check_user_has_exciting_move, // 0x82
+ ContestAICmd_if_user_has_exciting_move, // 0x83
+ ContestAICmd_if_user_doesnt_have_exciting_move, // 0x84
+ ContestAICmd_check_user_has_move, // 0x85
+ ContestAICmd_if_user_has_move, // 0x86
+ ContestAICmd_if_user_doesnt_have_move, // 0x87
};
static void ContestAI_DoAIProcessing(void);
-static bool8 sub_81563B0(u8);
+static bool8 GetContestantIdByTurn(u8);
static void AIStackPushVar(const u8 *);
static u8 AIStackPop(void);
@@ -297,40 +298,42 @@ void ContestAI_ResetAI(u8 contestantAI)
int i;
memset(&eContestAI, 0, sizeof(struct ContestAIInfo));
- for (i = 0; i < 4; i++)
- eContestAI.unk5[i] = 100;
+ for (i = 0; i < MAX_MON_MOVES; i++)
+ eContestAI.moveScores[i] = 100;
eContestAI.contestantId = contestantAI;
eContestAI.stackSize = 0;
- eContestAI.aiChecks = gContestMons[eContestAI.contestantId].aiChecks;
+ eContestAI.aiFlags = gContestMons[eContestAI.contestantId].aiFlags;
}
u8 ContestAI_GetActionToUse(void)
{
- while (eContestAI.aiChecks != 0)
+ while (eContestAI.aiFlags != 0)
{
- if (eContestAI.aiChecks & 1)
+ if (eContestAI.aiFlags & 1)
{
eContestAI.aiState = CONTESTAI_SETTING_UP;
ContestAI_DoAIProcessing();
}
- eContestAI.aiChecks >>= 1;
- eContestAI.currentAICheck++;
+ eContestAI.aiFlags >>= 1;
+ eContestAI.currentAIFlag++;
eContestAI.nextMoveIndex = 0;
}
while (1)
{
- u8 rval = Random() & 3;
- u8 r2 = eContestAI.unk5[rval];
+ // Randomly choose a move index. If it's the move
+ // with the highest (or tied highest) score, return
+ u8 moveIdx = Random() & (MAX_MON_MOVES - 1); // % MAX_MON_MOVES doesn't match
+ u8 score = eContestAI.moveScores[moveIdx];
int i;
- for (i = 0; i < 4; i++)
+ for (i = 0; i < MAX_MON_MOVES; i++)
{
- if (r2 < eContestAI.unk5[i])
+ if (score < eContestAI.moveScores[i])
break;
}
- if (i == 4)
- return rval;
+ if (i == MAX_MON_MOVES)
+ return moveIdx;
}
}
@@ -343,28 +346,28 @@ static void ContestAI_DoAIProcessing(void)
case CONTESTAI_DO_NOT_PROCESS:
break;
case CONTESTAI_SETTING_UP:
- gAIScriptPtr = gContestAIChecks[eContestAI.currentAICheck];
+ gAIScriptPtr = gContestAI_ScriptsTable[eContestAI.currentAIFlag];
- if (gContestMons[eContestAI.contestantId].moves[eContestAI.nextMoveIndex] == 0)
- eContestAI.nextMove = 0; // don't process a move that doesn't exist.
+ if (gContestMons[eContestAI.contestantId].moves[eContestAI.nextMoveIndex] == MOVE_NONE)
+ eContestAI.nextMove = MOVE_NONE; // don't process a move that doesn't exist.
else
eContestAI.nextMove = gContestMons[eContestAI.contestantId].moves[eContestAI.nextMoveIndex];
eContestAI.aiState++;
break;
case CONTESTAI_PROCESSING:
- if (eContestAI.nextMove != 0)
+ if (eContestAI.nextMove != MOVE_NONE)
{
sContestAICmdTable[*gAIScriptPtr](); // run the command.
}
else
{
- eContestAI.unk5[eContestAI.nextMoveIndex] = 0; // don't consider a move that doesn't exist.
+ eContestAI.moveScores[eContestAI.nextMoveIndex] = 0; // don't consider a move that doesn't exist.
eContestAI.aiAction |= 1;
}
if (eContestAI.aiAction & 1)
{
eContestAI.nextMoveIndex++;
- if (eContestAI.nextMoveIndex < 4)
+ if (eContestAI.nextMoveIndex < MAX_MON_MOVES)
eContestAI.aiState = 0;
else
// aiState = CONTESTAI_FINISHED
@@ -376,12 +379,12 @@ static void ContestAI_DoAIProcessing(void)
}
}
-static u8 sub_81563B0(u8 var)
+static u8 GetContestantIdByTurn(u8 turn)
{
int i;
- for (i = 0; i < 4; i++)
- if (eContestResources8.turnOrder[i] == var)
+ for (i = 0; i < CONTESTANT_COUNT; i++)
+ if (eContestAppealResults.turnOrder[i] == turn)
break;
return i;
@@ -389,27 +392,27 @@ static u8 sub_81563B0(u8 var)
static void ContestAICmd_score(void)
{
- s16 score = eContestAI.unk5[eContestAI.nextMoveIndex] + (s8)gAIScriptPtr[1];
+ s16 score = eContestAI.moveScores[eContestAI.nextMoveIndex] + (s8)gAIScriptPtr[1];
if (score > 255)
score = 255;
else if (score < 0)
score = 0;
- eContestAI.unk5[eContestAI.nextMoveIndex] = score;
+ eContestAI.moveScores[eContestAI.nextMoveIndex] = score;
gAIScriptPtr += 2;
}
-static void ContestAICmd_get_turn(void)
+static void ContestAICmd_get_appeal_num(void)
{
- eContestAI.scriptResult = eContest.turnNumber;
+ eContestAI.scriptResult = eContest.appealNumber;
gAIScriptPtr += 1;
}
-static void ContestAICmd_if_turn_less_than(void)
+static void ContestAICmd_if_appeal_num_less_than(void)
{
- ContestAICmd_get_turn();
+ ContestAICmd_get_appeal_num();
if (eContestAI.scriptResult < gAIScriptPtr[0])
gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 1);
@@ -417,9 +420,9 @@ static void ContestAICmd_if_turn_less_than(void)
gAIScriptPtr += 5;
}
-static void ContestAICmd_if_turn_more_than(void)
+static void ContestAICmd_if_appeal_num_more_than(void)
{
- ContestAICmd_get_turn();
+ ContestAICmd_get_appeal_num();
if (eContestAI.scriptResult > gAIScriptPtr[0])
gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 1);
@@ -427,9 +430,9 @@ static void ContestAICmd_if_turn_more_than(void)
gAIScriptPtr += 5;
}
-static void ContestAICmd_if_turn_eq(void)
+static void ContestAICmd_if_appeal_num_eq(void)
{
- ContestAICmd_get_turn();
+ ContestAICmd_get_appeal_num();
if (eContestAI.scriptResult == gAIScriptPtr[0])
gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 1);
@@ -437,9 +440,9 @@ static void ContestAICmd_if_turn_eq(void)
gAIScriptPtr += 5;
}
-static void ContestAICmd_if_turn_not_eq(void)
+static void ContestAICmd_if_appeal_num_not_eq(void)
{
- ContestAICmd_get_turn();
+ ContestAICmd_get_appeal_num();
if (eContestAI.scriptResult != gAIScriptPtr[0])
gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 1);
@@ -495,7 +498,7 @@ static void ContestAICmd_if_excitement_not_eq(void)
static void ContestAICmd_get_user_order(void)
{
- eContestAI.scriptResult = eContestResources8.turnOrder[eContestAI.contestantId];
+ eContestAI.scriptResult = eContestAppealResults.turnOrder[eContestAI.contestantId];
gAIScriptPtr += 1;
}
@@ -585,15 +588,15 @@ static void ContestAICmd_if_user_condition_not_eq(void)
gAIScriptPtr += 5;
}
-static void ContestAICmd_unk_15(void)
+static void ContestAICmd_get_points(void)
{
eContestAI.scriptResult = eContestantStatus[eContestAI.contestantId].pointTotal;
gAIScriptPtr += 1;
}
-static void ContestAICmd_unk_16(void)
+static void ContestAICmd_if_points_less_than(void)
{
- ContestAICmd_unk_15();
+ ContestAICmd_get_points();
if (eContestAI.scriptResult < (s16)T1_READ_16(gAIScriptPtr + 0))
gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 2);
@@ -601,9 +604,9 @@ static void ContestAICmd_unk_16(void)
gAIScriptPtr += 6;
}
-static void ContestAICmd_unk_17(void)
+static void ContestAICmd_if_points_more_than(void)
{
- ContestAICmd_unk_15();
+ ContestAICmd_get_points();
if (eContestAI.scriptResult > (s16)T1_READ_16(gAIScriptPtr + 0))
gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 2);
@@ -611,9 +614,9 @@ static void ContestAICmd_unk_17(void)
gAIScriptPtr += 6;
}
-static void ContestAICmd_unk_18(void)
+static void ContestAICmd_if_points_eq(void)
{
- ContestAICmd_unk_15();
+ ContestAICmd_get_points();
if (eContestAI.scriptResult == (s16)T1_READ_16(gAIScriptPtr + 0))
gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 2);
@@ -621,9 +624,9 @@ static void ContestAICmd_unk_18(void)
gAIScriptPtr += 6;
}
-static void ContestAICmd_unk_19(void)
+static void ContestAICmd_if_points_not_eq(void)
{
- ContestAICmd_unk_15();
+ ContestAICmd_get_points();
if (eContestAI.scriptResult != (s16)T1_READ_16(gAIScriptPtr + 0))
gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 2);
@@ -631,15 +634,15 @@ static void ContestAICmd_unk_19(void)
gAIScriptPtr += 6;
}
-static void ContestAICmd_unk_1A(void)
+static void ContestAICmd_get_preliminary_points(void)
{
- eContestAI.scriptResult = gContestMonConditions[eContestAI.contestantId];
+ eContestAI.scriptResult = gContestMonRound1Points[eContestAI.contestantId];
gAIScriptPtr += 1;
}
-static void ContestAICmd_unk_1B(void)
+static void ContestAICmd_if_preliminary_points_less_than(void)
{
- ContestAICmd_unk_1A();
+ ContestAICmd_get_preliminary_points();
if (eContestAI.scriptResult < (s16)T1_READ_16(gAIScriptPtr + 0))
gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 2);
@@ -647,9 +650,9 @@ static void ContestAICmd_unk_1B(void)
gAIScriptPtr += 6;
}
-static void ContestAICmd_unk_1C(void)
+static void ContestAICmd_if_preliminary_points_more_than(void)
{
- ContestAICmd_unk_1A();
+ ContestAICmd_get_preliminary_points();
if (eContestAI.scriptResult > (s16)T1_READ_16(gAIScriptPtr + 0))
gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 2);
@@ -657,9 +660,9 @@ static void ContestAICmd_unk_1C(void)
gAIScriptPtr += 6;
}
-static void ContestAICmd_unk_1D(void)
+static void ContestAICmd_if_preliminary_points_eq(void)
{
- ContestAICmd_unk_1A();
+ ContestAICmd_get_preliminary_points();
if (eContestAI.scriptResult == (s16)T1_READ_16(gAIScriptPtr + 0))
gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 2);
@@ -667,9 +670,9 @@ static void ContestAICmd_unk_1D(void)
gAIScriptPtr += 6;
}
-static void ContestAICmd_unk_1E(void)
+static void ContestAICmd_if_preliminary_points_not_eq(void)
{
- ContestAICmd_unk_1A();
+ ContestAICmd_get_preliminary_points();
if (eContestAI.scriptResult != (s16)T1_READ_16(gAIScriptPtr + 0))
gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 2);
@@ -719,7 +722,7 @@ static void ContestAICmd_if_move_excitement_less_than(void)
gAIScriptPtr += 5;
}
-static void ContestAICmd_if_move_excitement_greater_than(void)
+static void ContestAICmd_if_move_excitement_more_than(void)
{
ContestAICmd_get_move_excitement();
@@ -836,7 +839,7 @@ static void ContestAICmd_if_most_appealing_move(void)
gAIScriptPtr += 4;
}
-static void ContestAICmd_unk_2F(void)
+static void ContestAICmd_check_most_jamming_move(void)
{
int i;
u16 move = gContestMons[eContestAI.contestantId].moves[eContestAI.nextMoveIndex];
@@ -845,7 +848,7 @@ static void ContestAICmd_unk_2F(void)
for (i = 0; i < MAX_MON_MOVES; i++)
{
u16 newMove = gContestMons[eContestAI.contestantId].moves[i];
- if (newMove != 0 && jam < gContestEffects[gContestMoves[newMove].effect].jam)
+ if (newMove != MOVE_NONE && jam < gContestEffects[gContestMoves[newMove].effect].jam)
break;
}
@@ -857,9 +860,9 @@ static void ContestAICmd_unk_2F(void)
gAIScriptPtr += 1;
}
-static void ContestAICmd_unk_30(void)
+static void ContestAICmd_if_most_jamming_move(void)
{
- ContestAICmd_unk_2F();
+ ContestAICmd_check_most_jamming_move();
if (eContestAI.scriptResult != FALSE)
gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 1);
@@ -867,7 +870,7 @@ static void ContestAICmd_unk_30(void)
gAIScriptPtr += 5;
}
-static void ContestAICmd_unk_31(void)
+static void ContestAICmd_get_num_move_hearts(void)
{
u16 move = gContestMons[eContestAI.contestantId].moves[eContestAI.nextMoveIndex];
@@ -875,9 +878,9 @@ static void ContestAICmd_unk_31(void)
gAIScriptPtr += 1;
}
-static void ContestAICmd_unk_32(void)
+static void ContestAICmd_if_num_move_hearts_less_than(void)
{
- ContestAICmd_unk_31();
+ ContestAICmd_get_num_move_hearts();
if (eContestAI.scriptResult < gAIScriptPtr[0])
gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 1);
@@ -885,9 +888,9 @@ static void ContestAICmd_unk_32(void)
gAIScriptPtr += 5;
}
-static void ContestAICmd_unk_33(void)
+static void ContestAICmd_if_num_move_hearts_more_than(void)
{
- ContestAICmd_unk_31();
+ ContestAICmd_get_num_move_hearts();
if (eContestAI.scriptResult > gAIScriptPtr[0])
gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 1);
@@ -895,9 +898,9 @@ static void ContestAICmd_unk_33(void)
gAIScriptPtr += 5;
}
-static void ContestAICmd_unk_34(void)
+static void ContestAICmd_if_num_move_hearts_eq(void)
{
- ContestAICmd_unk_31();
+ ContestAICmd_get_num_move_hearts();
if (eContestAI.scriptResult == gAIScriptPtr[0])
gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 1);
@@ -905,9 +908,9 @@ static void ContestAICmd_unk_34(void)
gAIScriptPtr += 5;
}
-static void ContestAICmd_unk_35(void)
+static void ContestAICmd_if_num_move_hearts_not_eq(void)
{
- ContestAICmd_unk_31();
+ ContestAICmd_get_num_move_hearts();
if (eContestAI.scriptResult != gAIScriptPtr[0])
gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 1);
@@ -915,7 +918,7 @@ static void ContestAICmd_unk_35(void)
gAIScriptPtr += 5;
}
-static void ContestAICmd_unk_36(void)
+static void ContestAICmd_get_num_move_jam_hearts(void)
{
u16 move = gContestMons[eContestAI.contestantId].moves[eContestAI.nextMoveIndex];
@@ -923,9 +926,9 @@ static void ContestAICmd_unk_36(void)
gAIScriptPtr += 1;
}
-static void ContestAICmd_unk_37(void)
+static void ContestAICmd_if_num_move_jam_hearts_less_than(void)
{
- ContestAICmd_unk_36();
+ ContestAICmd_get_num_move_jam_hearts();
if (eContestAI.scriptResult < gAIScriptPtr[0])
gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 1);
@@ -933,9 +936,9 @@ static void ContestAICmd_unk_37(void)
gAIScriptPtr += 5;
}
-static void ContestAICmd_unk_38(void)
+static void ContestAICmd_if_num_move_jam_hearts_more_than(void)
{
- ContestAICmd_unk_36();
+ ContestAICmd_get_num_move_jam_hearts();
if (eContestAI.scriptResult > gAIScriptPtr[0])
gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 1);
@@ -943,9 +946,9 @@ static void ContestAICmd_unk_38(void)
gAIScriptPtr += 5;
}
-static void ContestAICmd_unk_39(void)
+static void ContestAICmd_if_num_move_jam_hearts_eq(void)
{
- ContestAICmd_unk_36();
+ ContestAICmd_get_num_move_jam_hearts();
if (eContestAI.scriptResult == gAIScriptPtr[0])
gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 1);
@@ -953,9 +956,9 @@ static void ContestAICmd_unk_39(void)
gAIScriptPtr += 5;
}
-static void ContestAICmd_unk_3A(void)
+static void ContestAICmd_if_num_move_jam_hearts_not_eq(void)
{
- ContestAICmd_unk_36();
+ ContestAICmd_get_num_move_jam_hearts();
if (eContestAI.scriptResult != gAIScriptPtr[0])
gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 1);
@@ -1047,7 +1050,7 @@ static void ContestAICmd_if_combo_starter(void)
{
ContestAICmd_check_combo_starter();
- if (eContestAI.scriptResult != 0)
+ if (eContestAI.scriptResult)
gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 0);
else
gAIScriptPtr += 4;
@@ -1057,7 +1060,7 @@ static void ContestAICmd_if_not_combo_starter(void)
{
ContestAICmd_check_combo_starter();
- if (eContestAI.scriptResult == 0)
+ if (!eContestAI.scriptResult)
gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 0);
else
gAIScriptPtr += 4;
@@ -1093,7 +1096,7 @@ static void ContestAICmd_if_combo_finisher(void)
{
ContestAICmd_check_combo_finisher();
- if (eContestAI.scriptResult != 0)
+ if (eContestAI.scriptResult)
gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 0);
else
gAIScriptPtr += 4;
@@ -1103,7 +1106,7 @@ static void ContestAICmd_if_not_combo_finisher(void)
{
ContestAICmd_check_combo_finisher();
- if (eContestAI.scriptResult == 0)
+ if (!eContestAI.scriptResult)
gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 0);
else
gAIScriptPtr += 4;
@@ -1128,7 +1131,7 @@ static void ContestAICmd_if_would_finish_combo(void)
{
ContestAICmd_check_would_finish_combo();
- if (eContestAI.scriptResult != 0)
+ if (eContestAI.scriptResult)
gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 0);
else
gAIScriptPtr += 4;
@@ -1138,7 +1141,7 @@ static void ContestAICmd_if_would_not_finish_combo(void)
{
ContestAICmd_check_would_finish_combo();
- if (eContestAI.scriptResult == 0)
+ if (!eContestAI.scriptResult)
gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 0);
else
gAIScriptPtr += 4;
@@ -1146,9 +1149,9 @@ static void ContestAICmd_if_would_not_finish_combo(void)
static void ContestAICmd_get_condition(void)
{
- int var = sub_81563B0(gAIScriptPtr[1]);
+ u8 contestant = GetContestantIdByTurn(gAIScriptPtr[1]);
- eContestAI.scriptResult = eContestantStatus[var].condition / 10;
+ eContestAI.scriptResult = eContestantStatus[contestant].condition / 10;
gAIScriptPtr += 2;
}
@@ -1194,11 +1197,11 @@ static void ContestAICmd_if_condition_not_eq(void)
static void ContestAICmd_get_used_combo_starter(void)
{
- u16 result = 0;
- u8 var = sub_81563B0(gAIScriptPtr[1]);
+ u16 result = FALSE;
+ u8 contestant = GetContestantIdByTurn(gAIScriptPtr[1]);
- if (sub_80DE1E8(var))
- result = gContestMoves[eContestantStatus[var].prevMove].comboStarterId ? 1 : 0;
+ if (IsContestantAllowedToCombo(contestant))
+ result = gContestMoves[eContestantStatus[contestant].prevMove].comboStarterId ? TRUE : FALSE;
eContestAI.scriptResult = result;
gAIScriptPtr += 2;
@@ -1246,7 +1249,7 @@ static void ContestAICmd_if_used_combo_starter_not_eq(void)
static void ContestAICmd_check_can_participate(void)
{
- if (Contest_IsMonsTurnDisabled(sub_81563B0(gAIScriptPtr[1])))
+ if (Contest_IsMonsTurnDisabled(GetContestantIdByTurn(gAIScriptPtr[1])))
eContestAI.scriptResult = FALSE;
else
eContestAI.scriptResult = TRUE;
@@ -1258,7 +1261,7 @@ static void ContestAICmd_if_can_participate(void)
{
ContestAICmd_check_can_participate();
- if (eContestAI.scriptResult != 0)
+ if (eContestAI.scriptResult)
gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 0);
else
gAIScriptPtr += 4;
@@ -1268,51 +1271,51 @@ static void ContestAICmd_if_cannot_participate(void)
{
ContestAICmd_check_can_participate();
- if (eContestAI.scriptResult == 0)
+ if (!eContestAI.scriptResult)
gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 0);
else
gAIScriptPtr += 4;
}
-static void ContestAICmd_get_val_812A188(void)
+static void ContestAICmd_get_completed_combo(void)
{
- u8 var = sub_81563B0(gAIScriptPtr[1]);
+ u8 contestant = GetContestantIdByTurn(gAIScriptPtr[1]);
- eContestAI.scriptResult = eContestantStatus[var].unk15_3;
+ eContestAI.scriptResult = eContestantStatus[contestant].completedComboFlag;
gAIScriptPtr += 2;
}
-static void ContestAICmd_unk_57(void)
+static void ContestAICmd_if_completed_combo(void)
{
- ContestAICmd_get_val_812A188();
+ ContestAICmd_get_completed_combo();
- if (eContestAI.scriptResult != 0)
+ if (eContestAI.scriptResult)
gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 0);
else
gAIScriptPtr += 4;
}
-static void ContestAICmd_contest_58(void)
+static void ContestAICmd_if_not_completed_combo(void)
{
- ContestAICmd_get_val_812A188();
+ ContestAICmd_get_completed_combo();
- if (eContestAI.scriptResult == 0)
+ if (!eContestAI.scriptResult)
gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 0);
else
gAIScriptPtr += 4;
}
-static void ContestAICmd_unk_59(void)
+static void ContestAICmd_get_points_diff(void)
{
- u8 var = sub_81563B0(gAIScriptPtr[1]);
+ u8 contestant = GetContestantIdByTurn(gAIScriptPtr[1]);
- eContestAI.scriptResult = eContestantStatus[var].pointTotal - eContestantStatus[eContestAI.contestantId].pointTotal;
+ eContestAI.scriptResult = eContestantStatus[contestant].pointTotal - eContestantStatus[eContestAI.contestantId].pointTotal;
gAIScriptPtr += 2;
}
-static void ContestAICmd_unk_5A(void)
+static void ContestAICmd_if_points_more_than_mon(void)
{
- ContestAICmd_unk_59();
+ ContestAICmd_get_points_diff();
if (eContestAI.scriptResult < 0)
gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 0);
@@ -1320,9 +1323,9 @@ static void ContestAICmd_unk_5A(void)
gAIScriptPtr += 4;
}
-static void ContestAICmd_unk_5B(void)
+static void ContestAICmd_if_points_less_than_mon(void)
{
- ContestAICmd_unk_59();
+ ContestAICmd_get_points_diff();
if (eContestAI.scriptResult > 0)
gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 0);
@@ -1330,9 +1333,9 @@ static void ContestAICmd_unk_5B(void)
gAIScriptPtr += 4;
}
-static void ContestAICmd_unk_5C(void)
+static void ContestAICmd_if_points_eq_mon(void)
{
- ContestAICmd_unk_59();
+ ContestAICmd_get_points_diff();
if (eContestAI.scriptResult == 0)
gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 0);
@@ -1340,9 +1343,9 @@ static void ContestAICmd_unk_5C(void)
gAIScriptPtr += 4;
}
-static void ContestAICmd_unk_5D(void)
+static void ContestAICmd_if_points_not_eq_mon(void)
{
- ContestAICmd_unk_59();
+ ContestAICmd_get_points_diff();
if (eContestAI.scriptResult != 0)
gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 0);
@@ -1350,17 +1353,17 @@ static void ContestAICmd_unk_5D(void)
gAIScriptPtr += 4;
}
-static void ContestAICmd_unk_5E(void)
+static void ContestAICmd_get_preliminary_points_diff(void)
{
- u8 var = sub_81563B0(gAIScriptPtr[1]);
+ u8 contestant = GetContestantIdByTurn(gAIScriptPtr[1]);
- eContestAI.scriptResult = gContestMonConditions[var] - gContestMonConditions[eContestAI.contestantId];
+ eContestAI.scriptResult = gContestMonRound1Points[contestant] - gContestMonRound1Points[eContestAI.contestantId];
gAIScriptPtr += 2;
}
-static void ContestAICmd_unk_5F(void)
+static void ContestAICmd_if_preliminary_points_more_than_mon(void)
{
- ContestAICmd_unk_5E();
+ ContestAICmd_get_preliminary_points_diff();
if (eContestAI.scriptResult < 0)
gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 0);
@@ -1368,9 +1371,9 @@ static void ContestAICmd_unk_5F(void)
gAIScriptPtr += 4;
}
-static void ContestAICmd_unk_60(void)
+static void ContestAICmd_if_preliminary_points_less_than_mon(void)
{
- ContestAICmd_unk_5E();
+ ContestAICmd_get_preliminary_points_diff();
if (eContestAI.scriptResult > 0)
gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 0);
@@ -1378,9 +1381,9 @@ static void ContestAICmd_unk_60(void)
gAIScriptPtr += 4;
}
-static void ContestAICmd_unk_61(void)
+static void ContestAICmd_if_preliminary_points_eq_mon(void)
{
- ContestAICmd_unk_5E();
+ ContestAICmd_get_preliminary_points_diff();
if (eContestAI.scriptResult == 0)
gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 0);
@@ -1388,9 +1391,9 @@ static void ContestAICmd_unk_61(void)
gAIScriptPtr += 4;
}
-static void ContestAICmd_unk_62(void)
+static void ContestAICmd_if_preliminary_points_not_eq_mon(void)
{
- ContestAICmd_unk_5E();
+ ContestAICmd_get_preliminary_points_diff();
if (eContestAI.scriptResult != 0)
gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 0);
@@ -1398,19 +1401,19 @@ static void ContestAICmd_unk_62(void)
gAIScriptPtr += 4;
}
-static void ContestAICmd_unk_63(void)
+static void ContestAICmd_get_used_moves_effect(void)
{
- u8 var = sub_81563B0(gAIScriptPtr[1]);
- u8 var2 = gAIScriptPtr[2];
- u16 move = eContest.moveHistory[var2][var];
+ u8 contestant = GetContestantIdByTurn(gAIScriptPtr[1]);
+ u8 round = gAIScriptPtr[2];
+ u16 move = eContest.moveHistory[round][contestant];
eContestAI.scriptResult = gContestMoves[move].effect;
gAIScriptPtr += 3;
}
-static void ContestAICmd_unk_64(void)
+static void ContestAICmd_if_used_moves_effect_less_than(void)
{
- ContestAICmd_unk_63();
+ ContestAICmd_get_used_moves_effect();
if (eContestAI.scriptResult < gAIScriptPtr[0])
gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 1);
@@ -1418,9 +1421,9 @@ static void ContestAICmd_unk_64(void)
gAIScriptPtr += 5;
}
-static void ContestAICmd_unk_65(void)
+static void ContestAICmd_if_used_moves_effect_more_than(void)
{
- ContestAICmd_unk_63();
+ ContestAICmd_get_used_moves_effect();
if (eContestAI.scriptResult > gAIScriptPtr[0])
gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 1);
@@ -1428,9 +1431,9 @@ static void ContestAICmd_unk_65(void)
gAIScriptPtr += 5;
}
-static void ContestAICmd_unk_66(void)
+static void ContestAICmd_if_used_moves_effect_eq(void)
{
- ContestAICmd_unk_63();
+ ContestAICmd_get_used_moves_effect();
if (eContestAI.scriptResult == gAIScriptPtr[0])
gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 1);
@@ -1438,9 +1441,9 @@ static void ContestAICmd_unk_66(void)
gAIScriptPtr += 5;
}
-static void ContestAICmd_unk_67(void)
+static void ContestAICmd_if_used_moves_effect_not_eq(void)
{
- ContestAICmd_unk_63();
+ ContestAICmd_get_used_moves_effect();
if (eContestAI.scriptResult != gAIScriptPtr[0])
gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 1);
@@ -1448,19 +1451,19 @@ static void ContestAICmd_unk_67(void)
gAIScriptPtr += 5;
}
-static void ContestAICmd_unk_68(void)
+static void ContestAICmd_get_used_moves_excitement(void)
{
- u8 var = sub_81563B0(gAIScriptPtr[1]);
- u8 var2 = gAIScriptPtr[2];
- s8 result = eContest.excitementHistory[var2][var];
+ u8 contestant = GetContestantIdByTurn(gAIScriptPtr[1]);
+ u8 round = gAIScriptPtr[2];
+ s8 result = eContest.excitementHistory[round][contestant];
eContestAI.scriptResult = result;
gAIScriptPtr += 3;
}
-static void ContestAICmd_unk_69(void)
+static void ContestAICmd_if_used_moves_excitement_less_than(void)
{
- ContestAICmd_unk_68();
+ ContestAICmd_get_used_moves_excitement();
if (eContestAI.scriptResult < gAIScriptPtr[0])
gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 1);
@@ -1468,9 +1471,9 @@ static void ContestAICmd_unk_69(void)
gAIScriptPtr += 5;
}
-static void ContestAICmd_unk_6A(void)
+static void ContestAICmd_if_used_moves_excitement_more_than(void)
{
- ContestAICmd_unk_68();
+ ContestAICmd_get_used_moves_excitement();
if (eContestAI.scriptResult > gAIScriptPtr[0])
gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 1);
@@ -1478,9 +1481,9 @@ static void ContestAICmd_unk_6A(void)
gAIScriptPtr += 5;
}
-static void ContestAICmd_unk_6B(void)
+static void ContestAICmd_if_used_moves_excitement_eq(void)
{
- ContestAICmd_unk_68();
+ ContestAICmd_get_used_moves_excitement();
if (eContestAI.scriptResult == gAIScriptPtr[0])
gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 1);
@@ -1488,9 +1491,9 @@ static void ContestAICmd_unk_6B(void)
gAIScriptPtr += 5;
}
-static void ContestAICmd_unk_6C(void)
+static void ContestAICmd_if_used_moves_excitement_not_eq(void)
{
- ContestAICmd_unk_68();
+ ContestAICmd_get_used_moves_excitement();
if (eContestAI.scriptResult != gAIScriptPtr[0])
gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 1);
@@ -1498,19 +1501,19 @@ static void ContestAICmd_unk_6C(void)
gAIScriptPtr += 5;
}
-static void ContestAICmd_unk_6D(void)
+static void ContestAICmd_get_used_moves_effect_type(void)
{
- u8 var = sub_81563B0(gAIScriptPtr[1]);
- u8 var2 = gAIScriptPtr[2];
- u16 move = eContest.moveHistory[var2][var];
+ u8 contestant = GetContestantIdByTurn(gAIScriptPtr[1]);
+ u8 round = gAIScriptPtr[2];
+ u16 move = eContest.moveHistory[round][contestant];
eContestAI.scriptResult = gContestEffects[gContestMoves[move].effect].effectType;
gAIScriptPtr += 3;
}
-static void ContestAICmd_unk_6E(void)
+static void ContestAICmd_if_used_moves_effect_type_eq(void)
{
- ContestAICmd_unk_6D();
+ ContestAICmd_get_used_moves_effect_type();
if (eContestAI.scriptResult == gAIScriptPtr[0])
gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 1);
@@ -1518,9 +1521,9 @@ static void ContestAICmd_unk_6E(void)
gAIScriptPtr += 5;
}
-static void ContestAICmd_unk_6F(void)
+static void ContestAICmd_if_used_moves_effect_type_not_eq(void)
{
- ContestAICmd_unk_6D();
+ ContestAICmd_get_used_moves_effect_type();
if (eContestAI.scriptResult != gAIScriptPtr[0])
gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 1);
@@ -1528,119 +1531,129 @@ static void ContestAICmd_unk_6F(void)
gAIScriptPtr += 5;
}
-static void ContestAICmd_unk_70(void)
+static void ContestAICmd_save_result(void)
{
- eContestAI.scriptArr[gAIScriptPtr[1]] = eContestAI.scriptResult;
+ eContestAI.vars[gAIScriptPtr[1]] = eContestAI.scriptResult;
gAIScriptPtr += 2;
}
-static void ContestAICmd_unk_71(void)
+static void ContestAICmd_setvar(void)
{
- eContestAI.scriptArr[gAIScriptPtr[1]] = T1_READ_16(gAIScriptPtr + 2);
+ eContestAI.vars[gAIScriptPtr[1]] = T1_READ_16(gAIScriptPtr + 2);
gAIScriptPtr += 4;
}
-static void ContestAICmd_unk_72(void)
+static void ContestAICmd_add(void)
{
// wtf? shouldn't T1_READ_16 work here? why the signed 8 load by gAIScriptPtr[2]?
- eContestAI.scriptArr[gAIScriptPtr[1]] += ((s8)gAIScriptPtr[2] | gAIScriptPtr[3] << 8);
+ eContestAI.vars[gAIScriptPtr[1]] += ((s8)gAIScriptPtr[2] | gAIScriptPtr[3] << 8);
gAIScriptPtr += 4;
}
-static void ContestAICmd_unk_73(void)
+static void ContestAICmd_addvar(void)
{
- eContestAI.scriptArr[gAIScriptPtr[1]] += eContestAI.scriptArr[gAIScriptPtr[2]];
+ eContestAI.vars[gAIScriptPtr[1]] += eContestAI.vars[gAIScriptPtr[2]];
gAIScriptPtr += 3;
}
-static void ContestAICmd_unk_74(void)
+static void ContestAICmd_addvar_duplicate(void)
{
- eContestAI.scriptArr[gAIScriptPtr[1]] += eContestAI.scriptArr[gAIScriptPtr[2]];
+ eContestAI.vars[gAIScriptPtr[1]] += eContestAI.vars[gAIScriptPtr[2]];
gAIScriptPtr += 3;
}
-static void ContestAICmd_unk_75(void)
+static void ContestAICmd_if_less_than(void)
{
- if (eContestAI.scriptArr[gAIScriptPtr[1]] < T1_READ_16(gAIScriptPtr + 2))
+ if (eContestAI.vars[gAIScriptPtr[1]] < T1_READ_16(gAIScriptPtr + 2))
gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 4);
else
gAIScriptPtr += 8;
}
-static void ContestAICmd_unk_76(void)
+static void ContestAICmd_if_greater_than(void)
{
- if (eContestAI.scriptArr[gAIScriptPtr[1]] > T1_READ_16(gAIScriptPtr + 2))
+ if (eContestAI.vars[gAIScriptPtr[1]] > T1_READ_16(gAIScriptPtr + 2))
gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 4);
else
gAIScriptPtr += 8;
}
-static void ContestAICmd_unk_77(void)
+static void ContestAICmd_if_eq(void)
{
- if (eContestAI.scriptArr[gAIScriptPtr[1]] == T1_READ_16(gAIScriptPtr + 2))
+ if (eContestAI.vars[gAIScriptPtr[1]] == T1_READ_16(gAIScriptPtr + 2))
gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 4);
else
gAIScriptPtr += 8;
}
-static void ContestAICmd_unk_78(void)
+static void ContestAICmd_if_not_eq(void)
{
- if (eContestAI.scriptArr[gAIScriptPtr[1]] != T1_READ_16(gAIScriptPtr + 2))
+ if (eContestAI.vars[gAIScriptPtr[1]] != T1_READ_16(gAIScriptPtr + 2))
gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 4);
else
gAIScriptPtr += 8;
}
-static void ContestAICmd_unk_79(void)
+static void ContestAICmd_if_less_than_var(void)
{
- if (eContestAI.scriptArr[gAIScriptPtr[1]] < (eContestAI.scriptArr[gAIScriptPtr[2]]))
+ if (eContestAI.vars[gAIScriptPtr[1]] < (eContestAI.vars[gAIScriptPtr[2]]))
gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 3);
else
gAIScriptPtr += 7;
}
-static void ContestAICmd_unk_7A(void)
+static void ContestAICmd_if_greater_than_var(void)
{
- if (eContestAI.scriptArr[gAIScriptPtr[1]] > (eContestAI.scriptArr[gAIScriptPtr[2]]))
+ if (eContestAI.vars[gAIScriptPtr[1]] > (eContestAI.vars[gAIScriptPtr[2]]))
gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 3);
else
gAIScriptPtr += 7;
}
-static void ContestAICmd_unk_7B(void)
+static void ContestAICmd_if_eq_var(void)
{
- if (eContestAI.scriptArr[gAIScriptPtr[1]] == (eContestAI.scriptArr[gAIScriptPtr[2]]))
+ if (eContestAI.vars[gAIScriptPtr[1]] == (eContestAI.vars[gAIScriptPtr[2]]))
gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 3);
else
gAIScriptPtr += 7;
}
-static void ContestAICmd_unk_7C(void)
+static void ContestAICmd_if_not_eq_var(void)
{
- if (eContestAI.scriptArr[gAIScriptPtr[1]] != (eContestAI.scriptArr[gAIScriptPtr[2]]))
+ if (eContestAI.vars[gAIScriptPtr[1]] != (eContestAI.vars[gAIScriptPtr[2]]))
gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 3);
else
gAIScriptPtr += 7;
}
-static void ContestAICmd_if_random(void)
+// UB: Should just be comparing to gAIScriptPtr[1] in the functions below
+// The values passed via gAIScriptPtr[1] range from 0-255
+// and vars is an s16[3], so this goes way out of bounds
+static void ContestAICmd_if_random_less_than(void)
{
- if ((Random() & 0xFF) < eContestAI.scriptArr[gAIScriptPtr[1]])
+#ifndef UBFIX
+ if ((Random() & 0xFF) < eContestAI.vars[gAIScriptPtr[1]])
+#else
+ if ((Random() & 0xFF) < gAIScriptPtr[1])
+#endif
gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 2);
else
gAIScriptPtr += 6;
}
-static void ContestAICmd_unk_7E(void)
+static void ContestAICmd_if_random_greater_than(void)
{
- if ((Random() & 0xFF) > eContestAI.scriptArr[gAIScriptPtr[1]])
+#ifndef UBFIX
+ if (((Random()) & 0xFF) > eContestAI.vars[gAIScriptPtr[1]])
+#else
+ if (((Random()) & 0xFF) > gAIScriptPtr[1])
+#endif
gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 2);
else
gAIScriptPtr += 6;
}
-// jump
-static void ContestAICmd_jump(void)
+static void ContestAICmd_goto(void)
{
gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 1);
}
@@ -1701,7 +1714,7 @@ static void ContestAICmd_if_user_has_exciting_move(void)
{
ContestAICmd_check_user_has_exciting_move();
- if (eContestAI.scriptResult != 0)
+ if (eContestAI.scriptResult)
gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 0);
else
gAIScriptPtr += 4;
@@ -1711,47 +1724,53 @@ static void ContestAICmd_if_user_doesnt_have_exciting_move(void)
{
ContestAICmd_check_user_has_exciting_move();
- if (eContestAI.scriptResult == 0)
+ if (!eContestAI.scriptResult)
gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 0);
else
gAIScriptPtr += 4;
}
-static void ContestAICmd_unk_85(void)
+// BUG: This is checking if the user has a specific move, but when it's used in the AI script
+// they're checking for an effect. Checking for a specific effect would make more sense,
+// but given that effects are normally read as a single byte and this reads 2 bytes, it
+// seems reading a move was intended and the AI script is using it incorrectly.
+// In any case, to fix it to correctly check for effects replace the u16 move assignment with
+// u16 move = gContestMoves[gContestMons[eContestAI.contestantId].moves[i]].effect;
+static void ContestAICmd_check_user_has_move(void)
{
- int result = 0;
+ int hasMove = FALSE;
int i;
- u16 arg = T1_READ_16(gAIScriptPtr + 1);
+ u16 targetMove = T1_READ_16(gAIScriptPtr + 1);
for (i = 0; i < MAX_MON_MOVES; i++)
{
u16 move = gContestMons[eContestAI.contestantId].moves[i];
- if (move == arg)
+ if (move == targetMove)
{
- result = 1;
+ hasMove = TRUE;
break;
}
}
- eContestAI.scriptResult = result;
+ eContestAI.scriptResult = hasMove;
gAIScriptPtr += 3;
}
-static void ContestAICmd_unk_86(void)
+static void ContestAICmd_if_user_has_move(void)
{
- ContestAICmd_unk_85();
+ ContestAICmd_check_user_has_move();
- if (eContestAI.scriptResult != 0)
+ if (eContestAI.scriptResult)
gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 0);
else
gAIScriptPtr += 4;
}
-static void ContestAICmd_if_effect_in_user_moveset(void)
+static void ContestAICmd_if_user_doesnt_have_move(void)
{
- ContestAICmd_unk_85();
+ ContestAICmd_check_user_has_move();
- if (eContestAI.scriptResult == 0)
+ if (!eContestAI.scriptResult)
gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 0);
else
gAIScriptPtr += 4;
diff --git a/src/contest_effect.c b/src/contest_effect.c
index d6b06c3ba..1fe21daab 100644
--- a/src/contest_effect.c
+++ b/src/contest_effect.c
@@ -68,7 +68,10 @@ bool8 AreMovesContestCombo(u16 lastMove, u16 nextMove)
if (lastMoveComboStarterId == 0)
return FALSE;
- else if (lastMoveComboStarterId == nextMoveComboMoves[0] || lastMoveComboStarterId == nextMoveComboMoves[1] || lastMoveComboStarterId == nextMoveComboMoves[2] || lastMoveComboStarterId == nextMoveComboMoves[3])
+ else if (lastMoveComboStarterId == nextMoveComboMoves[0]
+ || lastMoveComboStarterId == nextMoveComboMoves[1]
+ || lastMoveComboStarterId == nextMoveComboMoves[2]
+ || lastMoveComboStarterId == nextMoveComboMoves[3])
return gComboStarterLookupTable[lastMoveComboStarterId];
else
return FALSE;
@@ -82,98 +85,98 @@ static void ContestEffect_HighlyAppealing(void)
// After this move, the user is more easily startled.
static void ContestEffect_UserMoreEasilyStartled(void)
{
- eContestantStatus[eContestResources8.contestant].moreEasilyStartled = TRUE;
- SetContestantEffectStringID(eContestResources8.contestant, CONTEST_STRING_MORE_CONSCIOUS);
+ eContestantStatus[eContestAppealResults.contestant].moreEasilyStartled = TRUE;
+ SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_MORE_CONSCIOUS);
}
// Makes a great appeal, but allows no more to the end.
static void ContestEffect_GreatAppealButNoMoreMoves(void)
{
- eContestantStatus[eContestResources8.contestant].exploded = TRUE;
- SetContestantEffectStringID(eContestResources8.contestant, CONTEST_STRING_NO_APPEAL);
+ eContestantStatus[eContestAppealResults.contestant].exploded = TRUE;
+ SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_NO_APPEAL);
}
// Can be used repeatedly without boring the JUDGE.
static void ContestEffect_RepetitionNotBoring(void)
{
- eContestantStatus[eContestResources8.contestant].usedRepeatableMove = TRUE;
- eContestantStatus[eContestResources8.contestant].disappointedRepeat = FALSE;
- eContestantStatus[eContestResources8.contestant].moveRepeatCount = 0;
+ eContestantStatus[eContestAppealResults.contestant].usedRepeatableMove = TRUE;
+ eContestantStatus[eContestAppealResults.contestant].repeatedMove = FALSE;
+ eContestantStatus[eContestAppealResults.contestant].moveRepeatCount = 0;
}
// Can avoid being startled by others once.
static void ContestEffect_AvoidStartleOnce(void)
{
- eContestantStatus[eContestResources8.contestant].jamSafetyCount = 1;
- SetContestantEffectStringID(eContestResources8.contestant, CONTEST_STRING_SETTLE_DOWN);
+ eContestantStatus[eContestAppealResults.contestant].jamSafetyCount = 1;
+ SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_SETTLE_DOWN);
}
// Can avoid being startled by others.
static void ContestEffect_AvoidStartle(void)
{
- eContestantStatus[eContestResources8.contestant].immune = TRUE;
- SetContestantEffectStringID(eContestResources8.contestant, CONTEST_STRING_OBLIVIOUS_TO_OTHERS);
+ eContestantStatus[eContestAppealResults.contestant].immune = TRUE;
+ SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_OBLIVIOUS_TO_OTHERS);
}
// Can avoid being startled by others a little.
static void ContestEffect_AvoidStartleSlightly(void)
{
- eContestantStatus[eContestResources8.contestant].jamReduction = 20;
- SetContestantEffectStringID(eContestResources8.contestant,CONTEST_STRING_LESS_AWARE);
+ eContestantStatus[eContestAppealResults.contestant].jamReduction = 20;
+ SetContestantEffectStringID(eContestAppealResults.contestant,CONTEST_STRING_LESS_AWARE);
}
// After this move, the user is less likely to be startled.
static void ContestEffect_UserLessEasilyStartled(void)
{
- eContestantStatus[eContestResources8.contestant].resistant = TRUE;
- SetContestantEffectStringID(eContestResources8.contestant,CONTEST_STRING_STOPPED_CARING);
+ eContestantStatus[eContestAppealResults.contestant].resistant = TRUE;
+ SetContestantEffectStringID(eContestAppealResults.contestant,CONTEST_STRING_STOPPED_CARING);
}
// Slightly startles the POKéMON in front.
static void ContestEffect_StartleFrontMon(void)
{
u8 idx = 0;
- u8 a = eContestResources8.contestant;
+ u8 a = eContestAppealResults.contestant;
- if (eContestResources8.turnOrder[a] != 0) {
+ if (eContestAppealResults.turnOrder[a] != 0) {
int i;
- for (i = 0; i < 4; i++)
+ for (i = 0; i < CONTESTANT_COUNT; i++)
{
- if (eContestResources8.turnOrder[a] - 1 == eContestResources8.turnOrder[i])
+ if (eContestAppealResults.turnOrder[a] - 1 == eContestAppealResults.turnOrder[i])
break;
}
- eContestResources8.jamQueue[0] = i;
- eContestResources8.jamQueue[1] = 0xFF;
+ eContestAppealResults.jamQueue[0] = i;
+ eContestAppealResults.jamQueue[1] = 0xFF;
idx = WasAtLeastOneOpponentJammed();
}
if (idx == 0)
- SetContestantEffectStringID2(eContestResources8.contestant, CONTEST_STRING_MESSED_UP2);
- SetContestantEffectStringID(eContestResources8.contestant, CONTEST_STRING_ATTEMPT_STARTLE);
+ SetContestantEffectStringID2(eContestAppealResults.contestant, CONTEST_STRING_MESSED_UP2);
+ SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_ATTEMPT_STARTLE);
}
// Slightly startles those that have made appeals.
static void ContestEffect_StartlePrevMons(void)
{
u8 idx = 0;
- u8 a = eContestResources8.contestant;
+ u8 contestant = eContestAppealResults.contestant;
- if (eContestResources8.turnOrder[a] != 0)
+ if (eContestAppealResults.turnOrder[contestant] != 0)
{
int i, j;
- for (i = 0, j = 0; i < 4; i++)
+ for (i = 0, j = 0; i < CONTESTANT_COUNT; i++)
{
- if (eContestResources8.turnOrder[a] > eContestResources8.turnOrder[i])
- eContestResources8.jamQueue[j++] = i;
+ if (eContestAppealResults.turnOrder[contestant] > eContestAppealResults.turnOrder[i])
+ eContestAppealResults.jamQueue[j++] = i;
}
- eContestResources8.jamQueue[j] = 0xFF;
+ eContestAppealResults.jamQueue[j] = 0xFF;
idx = WasAtLeastOneOpponentJammed();
}
if (idx == 0)
- SetContestantEffectStringID2(eContestResources8.contestant, CONTEST_STRING_MESSED_UP2);
- SetContestantEffectStringID(eContestResources8.contestant, CONTEST_STRING_ATTEMPT_STARTLE);
+ SetContestantEffectStringID2(eContestAppealResults.contestant, CONTEST_STRING_MESSED_UP2);
+ SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_ATTEMPT_STARTLE);
}
// Startles the POKéMON that appealed before the user.
@@ -189,7 +192,7 @@ static void ContestEffect_StartlePrevMon2(void)
else
jam = 60;
- eContestResources8.jam = jam;
+ eContestAppealResults.jam = jam;
ContestEffect_StartleFrontMon();
}
@@ -197,8 +200,8 @@ static void ContestEffect_StartlePrevMon2(void)
static void ContestEffect_StartlePrevMons2(void)
{
u8 numStartled = 0;
- u8 contestant = eContestResources8.contestant;
- u8 turnOrder = eContestResources8.turnOrder[contestant];
+ u8 contestant = eContestAppealResults.contestant;
+ u8 turnOrder = eContestAppealResults.turnOrder[contestant];
if (turnOrder != 0)
{
@@ -206,12 +209,12 @@ static void ContestEffect_StartlePrevMons2(void)
for (i = 0; i < 4; i++)
{
- if (eContestResources8.turnOrder[contestant] > eContestResources8.turnOrder[i])
+ if (eContestAppealResults.turnOrder[contestant] > eContestAppealResults.turnOrder[i])
{
u8 rval, jam;
- eContestResources8.jamQueue[0] = i;
- eContestResources8.jamQueue[1] = 0xFF;
+ eContestAppealResults.jamQueue[0] = i;
+ eContestAppealResults.jamQueue[1] = 0xFF;
rval = Random() % 10;
if (rval == 0)
@@ -227,31 +230,31 @@ static void ContestEffect_StartlePrevMons2(void)
else
jam = 60;
- eContestResources8.jam = jam;
+ eContestAppealResults.jam = jam;
if (WasAtLeastOneOpponentJammed())
numStartled++;
}
}
}
- SetContestantEffectStringID(eContestResources8.contestant, CONTEST_STRING_ATTEMPT_STARTLE);
+ SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_ATTEMPT_STARTLE);
if (numStartled == 0)
- SetContestantEffectStringID2(eContestResources8.contestant, CONTEST_STRING_MESSED_UP2);
+ SetContestantEffectStringID2(eContestAppealResults.contestant, CONTEST_STRING_MESSED_UP2);
}
// Shifts the JUDGE's attention from others.
static void ContestEffect_ShiftJudgeAttention(void)
{
bool32 hitAny = FALSE;
- u8 contestant = eContestResources8.contestant;
+ u8 contestant = eContestAppealResults.contestant;
- if (eContestResources8.turnOrder[eContestResources8.contestant] != 0)
+ if (eContestAppealResults.turnOrder[eContestAppealResults.contestant] != 0)
{
int i;
for (i = 0; i < 4; i++)
{
- if (eContestResources8.turnOrder[contestant] > eContestResources8.turnOrder[i] &&
+ if (eContestAppealResults.turnOrder[contestant] > eContestAppealResults.turnOrder[i] &&
eContestantStatus[i].hasJudgesAttention &&
CanUnnerveContestant(i))
{
@@ -262,10 +265,10 @@ static void ContestEffect_ShiftJudgeAttention(void)
}
}
}
- SetContestantEffectStringID(eContestResources8.contestant,CONTEST_STRING_DAZZLE_ATTEMPT);
+ SetContestantEffectStringID(eContestAppealResults.contestant,CONTEST_STRING_DAZZLE_ATTEMPT);
if (!hitAny)
{
- SetContestantEffectStringID2(eContestResources8.contestant, CONTEST_STRING_MESSED_UP2);
+ SetContestantEffectStringID2(eContestAppealResults.contestant, CONTEST_STRING_MESSED_UP2);
}
}
@@ -273,81 +276,81 @@ static void ContestEffect_ShiftJudgeAttention(void)
static void ContestEffect_StartleMonWithJudgesAttention(void)
{
u8 numStartled = 0;
- u8 contestant = eContestResources8.contestant;
+ u8 contestant = eContestAppealResults.contestant;
- if (eContestResources8.turnOrder[eContestResources8.contestant] != 0)
+ if (eContestAppealResults.turnOrder[eContestAppealResults.contestant] != 0)
{
int i;
for (i = 0; i < 4; i++)
{
- if (eContestResources8.turnOrder[contestant] > eContestResources8.turnOrder[i])
+ if (eContestAppealResults.turnOrder[contestant] > eContestAppealResults.turnOrder[i])
{
if (eContestantStatus[i].hasJudgesAttention)
- eContestResources8.jam = 50;
+ eContestAppealResults.jam = 50;
else
- eContestResources8.jam = 10;
- eContestResources8.jamQueue[0] = i;
- eContestResources8.jamQueue[1] = 0xFF;
+ eContestAppealResults.jam = 10;
+ eContestAppealResults.jamQueue[0] = i;
+ eContestAppealResults.jamQueue[1] = 0xFF;
if (WasAtLeastOneOpponentJammed())
numStartled++;
}
}
}
- SetContestantEffectStringID(eContestResources8.contestant, CONTEST_STRING_ATTEMPT_STARTLE);
+ SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_ATTEMPT_STARTLE);
if (numStartled == 0)
- SetContestantEffectStringID2(eContestResources8.contestant, CONTEST_STRING_MESSED_UP2);
+ SetContestantEffectStringID2(eContestAppealResults.contestant, CONTEST_STRING_MESSED_UP2);
}
// Jams the others, and misses one turn of appeals.
static void ContestEffect_JamsOthersButMissOneTurn(void)
{
- eContestantStatus[eContestResources8.contestant].turnSkipped = TRUE;
+ eContestantStatus[eContestAppealResults.contestant].turnSkipped = TRUE;
ContestEffect_StartlePrevMons();
- SetContestantEffectStringID(eContestResources8.contestant, CONTEST_STRING_ATTEMPT_STARTLE);
+ SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_ATTEMPT_STARTLE);
}
// Startles POKéMON that made a same-type appeal.
static void ContestEffect_StartleMonsSameTypeAppeal(void)
{
- u16 move = eContestantStatus[eContestResources8.contestant].currMove;
+ u16 move = eContestantStatus[eContestAppealResults.contestant].currMove;
JamByMoveCategory(gContestMoves[move].contestCategory);
- SetContestantEffectStringID(eContestResources8.contestant, CONTEST_STRING_ATTEMPT_STARTLE);
+ SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_ATTEMPT_STARTLE);
}
// Badly startles POKéMON that made COOL appeals.
static void ContestEffect_StartleMonsCoolAppeal(void)
{
JamByMoveCategory(CONTEST_CATEGORY_COOL);
- SetContestantEffectStringID(eContestResources8.contestant, CONTEST_STRING_ATTEMPT_STARTLE);
+ SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_ATTEMPT_STARTLE);
}
// Badly startles POKéMON that made BEAUTY appeals.
static void ContestEffect_StartleMonsBeautyAppeal(void)
{
JamByMoveCategory(CONTEST_CATEGORY_BEAUTY);
- SetContestantEffectStringID(eContestResources8.contestant, CONTEST_STRING_ATTEMPT_STARTLE);
+ SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_ATTEMPT_STARTLE);
}
// Badly startles POKéMON that made CUTE appeals.
static void ContestEffect_StartleMonsCuteAppeal(void)
{
JamByMoveCategory(CONTEST_CATEGORY_CUTE);
- SetContestantEffectStringID(eContestResources8.contestant, CONTEST_STRING_ATTEMPT_STARTLE);
+ SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_ATTEMPT_STARTLE);
}
// Badly startles POKéMON that made SMART appeals.
static void ContestEffect_StartleMonsSmartAppeal(void)
{
JamByMoveCategory(CONTEST_CATEGORY_SMART);
- SetContestantEffectStringID(eContestResources8.contestant, CONTEST_STRING_ATTEMPT_STARTLE);
+ SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_ATTEMPT_STARTLE);
}
// Badly startles POKéMON that made TOUGH appeals.
static void ContestEffect_StartleMonsToughAppeal(void)
{
JamByMoveCategory(CONTEST_CATEGORY_TOUGH);
- SetContestantEffectStringID(eContestResources8.contestant, CONTEST_STRING_ATTEMPT_STARTLE);
+ SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_ATTEMPT_STARTLE);
}
// Makes one POKéMON after the user nervous.
@@ -355,13 +358,13 @@ static void ContestEffect_MakeFollowingMonNervous(void)
{
bool32 hitAny = FALSE;
- if (eContestResources8.turnOrder[eContestResources8.contestant] != 3)
+ if (eContestAppealResults.turnOrder[eContestAppealResults.contestant] != 3)
{
int i;
for (i = 0; i < 4; i++)
{
- if (eContestResources8.turnOrder[eContestResources8.contestant] + 1 == eContestResources8.turnOrder[i])
+ if (eContestAppealResults.turnOrder[eContestAppealResults.contestant] + 1 == eContestAppealResults.turnOrder[i])
{
if (CanUnnerveContestant(i))
{
@@ -377,9 +380,9 @@ static void ContestEffect_MakeFollowingMonNervous(void)
}
}
}
- SetContestantEffectStringID(eContestResources8.contestant, CONTEST_STRING_UNNERVE_ATTEMPT);
+ SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_UNNERVE_ATTEMPT);
if (!hitAny)
- SetContestantEffectStringID2(eContestResources8.contestant, CONTEST_STRING_MESSED_UP2);
+ SetContestantEffectStringID2(eContestAppealResults.contestant, CONTEST_STRING_MESSED_UP2);
}
// Makes all POKéMON after the user nervous.
@@ -390,13 +393,13 @@ static void ContestEffect_MakeFollowingMonsNervous(void)
u8 contestantIds[5];
int i;
int numAfter;
- s16 oddsMod[4];
- s16 odds[4];
+ s16 oddsMod[CONTESTANT_COUNT];
+ s16 odds[CONTESTANT_COUNT];
memset(contestantIds, 0xFF, ARRAY_COUNT(contestantIds));
- for (i = 0, numAfter = 0; i < 4; i++)
+ for (i = 0, numAfter = 0; i < CONTESTANT_COUNT; i++)
{
- if (eContestResources8.turnOrder[eContestResources8.contestant] < eContestResources8.turnOrder[i] &&
+ if (eContestAppealResults.turnOrder[eContestAppealResults.contestant] < eContestAppealResults.turnOrder[i] &&
!eContestantStatus[i].nervous && !Contest_IsMonsTurnDisabled(i))
contestantIds[numAfter++] = i;
}
@@ -418,12 +421,12 @@ static void ContestEffect_MakeFollowingMonsNervous(void)
}
else
{
- for (i = 0; i < 4; i++)
+ for (i = 0; i < CONTESTANT_COUNT; i++)
odds[i] = 0;
}
- for (i = 0; i < 4; i++)
+ for (i = 0; i < CONTESTANT_COUNT; i++)
{
- if (eContestantStatus[i].hasJudgesAttention && sub_80DE1E8(i))
+ if (eContestantStatus[i].hasJudgesAttention && IsContestantAllowedToCombo(i))
oddsMod[i] = gComboStarterLookupTable[gContestMoves[eContestantStatus[i].prevMove].comboStarterId] * 10;
else
oddsMod[i] = 0;
@@ -457,12 +460,12 @@ static void ContestEffect_MakeFollowingMonsNervous(void)
SetContestantEffectStringID(contestantIds[i], CONTEST_STRING_UNAFFECTED);
numUnnerved++;
}
- eContestResources8.unnervedPokes[contestantIds[i]] = 1;
+ eContestAppealResults.unnervedPokes[contestantIds[i]] = 1;
}
}
- SetContestantEffectStringID(eContestResources8.contestant, CONTEST_STRING_UNNERVE_WAITING);
+ SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_UNNERVE_WAITING);
if (numUnnerved == 0)
- SetContestantEffectStringID2(eContestResources8.contestant, CONTEST_STRING_MESSED_UP2);
+ SetContestantEffectStringID2(eContestAppealResults.contestant, CONTEST_STRING_MESSED_UP2);
}
// Worsens the condition of those that made appeals.
@@ -471,22 +474,22 @@ static void ContestEffect_WorsenConditionOfPrevMons(void)
u8 numHit = 0;
int i;
- for (i = 0; i < 4; i++)
+ for (i = 0; i < CONTESTANT_COUNT; i++)
{
- if (eContestResources8.turnOrder[eContestResources8.contestant] > eContestResources8.turnOrder[i] &&
+ if (eContestAppealResults.turnOrder[eContestAppealResults.contestant] > eContestAppealResults.turnOrder[i] &&
eContestantStatus[i].condition > 0 &&
CanUnnerveContestant(i))
{
eContestantStatus[i].condition = 0;
- eContestantStatus[i].conditionMod = 2;
+ eContestantStatus[i].conditionMod = CONDITION_LOSE;
SetContestantEffectStringID(i, CONTEST_STRING_REGAINED_FORM);
numHit++;
}
}
- SetContestantEffectStringID(eContestResources8.contestant, CONTEST_STRING_TAUNT_WELL);
+ SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_TAUNT_WELL);
if (numHit == 0)
- SetContestantEffectStringID2(eContestResources8.contestant, CONTEST_STRING_IGNORED);
+ SetContestantEffectStringID2(eContestAppealResults.contestant, CONTEST_STRING_IGNORED);
}
// Badly startles POKéMON in good condition.
@@ -495,44 +498,44 @@ static void ContestEffect_BadlyStartlesMonsInGoodCondition(void)
u8 numHit = 0;
int i;
- for (i = 0; i < 4; i++)
+ for (i = 0; i < CONTESTANT_COUNT; i++)
{
- if (eContestResources8.turnOrder[eContestResources8.contestant] > eContestResources8.turnOrder[i])
+ if (eContestAppealResults.turnOrder[eContestAppealResults.contestant] > eContestAppealResults.turnOrder[i])
{
if (eContestantStatus[i].condition > 0)
- eContestResources8.jam = 40;
+ eContestAppealResults.jam = 40;
else
- eContestResources8.jam = 10;
- eContestResources8.jamQueue[0] = i;
- eContestResources8.jamQueue[1] = 0xFF;
+ eContestAppealResults.jam = 10;
+ eContestAppealResults.jamQueue[0] = i;
+ eContestAppealResults.jamQueue[1] = 0xFF;
if (WasAtLeastOneOpponentJammed())
numHit++;
}
}
- SetContestantEffectStringID(eContestResources8.contestant, CONTEST_STRING_JAM_WELL);
+ SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_JAM_WELL);
if (numHit == 0)
- SetContestantEffectStringID2(eContestResources8.contestant, CONTEST_STRING_IGNORED);
+ SetContestantEffectStringID2(eContestAppealResults.contestant, CONTEST_STRING_IGNORED);
}
// The appeal works great if performed first.
static void ContestEffect_BetterIfFirst(void)
{
- if (gContestantTurnOrder[eContestResources8.contestant] == 0)
+ if (gContestantTurnOrder[eContestAppealResults.contestant] == 0)
{
- u16 move = eContestantStatus[eContestResources8.contestant].currMove;
- eContestantStatus[eContestResources8.contestant].appeal2 += 2 * gContestEffects[gContestMoves[move].effect].appeal;
- SetContestantEffectStringID(eContestResources8.contestant, CONTEST_STRING_HUSTLE_STANDOUT);
+ u16 move = eContestantStatus[eContestAppealResults.contestant].currMove;
+ eContestantStatus[eContestAppealResults.contestant].appeal += 2 * gContestEffects[gContestMoves[move].effect].appeal;
+ SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_HUSTLE_STANDOUT);
}
}
// The appeal works great if performed last.
static void ContestEffect_BetterIfLast(void)
{
- if (gContestantTurnOrder[eContestResources8.contestant] == 3)
+ if (gContestantTurnOrder[eContestAppealResults.contestant] == 3)
{
- u16 move = eContestantStatus[eContestResources8.contestant].currMove;
- eContestantStatus[eContestResources8.contestant].appeal2 += 2 * gContestEffects[gContestMoves[move].effect].appeal;
- SetContestantEffectStringID(eContestResources8.contestant, CONTEST_STRING_WORK_HARD_UNNOTICED);
+ u16 move = eContestantStatus[eContestAppealResults.contestant].currMove;
+ eContestantStatus[eContestAppealResults.contestant].appeal += 2 * gContestEffects[gContestMoves[move].effect].appeal;
+ SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_WORK_HARD_UNNOTICED);
}
}
@@ -542,24 +545,24 @@ static void ContestEffect_AppealAsGoodAsPrevOnes(void)
int i;
int appealSum;
- for (i = 0, appealSum = 0; i < 4; i++)
+ for (i = 0, appealSum = 0; i < CONTESTANT_COUNT; i++)
{
- if (eContestResources8.turnOrder[eContestResources8.contestant] > eContestResources8.turnOrder[i])
- appealSum += eContestantStatus[i].appeal2;
+ if (eContestAppealResults.turnOrder[eContestAppealResults.contestant] > eContestAppealResults.turnOrder[i])
+ appealSum += eContestantStatus[i].appeal;
}
if (appealSum < 0)
appealSum = 0;
- if (eContestResources8.turnOrder[eContestResources8.contestant] == 0 || appealSum == 0)
+ if (eContestAppealResults.turnOrder[eContestAppealResults.contestant] == 0 || appealSum == 0)
{
- SetContestantEffectStringID(eContestResources8.contestant, CONTEST_STRING_APPEAL_NOT_WELL);
+ SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_APPEAL_NOT_WELL);
}
else
{
- eContestantStatus[eContestResources8.contestant].appeal2 += appealSum / 2;
- SetContestantEffectStringID(eContestResources8.contestant, CONTEST_STRING_WORK_BEFORE);
+ eContestantStatus[eContestAppealResults.contestant].appeal += appealSum / 2;
+ SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_WORK_BEFORE);
}
- eContestantStatus[eContestResources8.contestant].appeal2 = RoundTowardsZero(eContestantStatus[eContestResources8.contestant].appeal2);
+ eContestantStatus[eContestAppealResults.contestant].appeal = RoundTowardsZero(eContestantStatus[eContestAppealResults.contestant].appeal);
}
// Makes the appeal as good as the one before it.
@@ -567,42 +570,42 @@ static void ContestEffect_AppealAsGoodAsPrevOne(void)
{
s16 appeal = 0;
- if (eContestResources8.turnOrder[eContestResources8.contestant] != 0)
+ if (eContestAppealResults.turnOrder[eContestAppealResults.contestant] != 0)
{
int i;
- for (i = 0; i < 4; i++)
+ for (i = 0; i < CONTESTANT_COUNT; i++)
{
- if (eContestResources8.turnOrder[eContestResources8.contestant] - 1 == eContestResources8.turnOrder[i])
- appeal = eContestantStatus[i].appeal2;
+ if (eContestAppealResults.turnOrder[eContestAppealResults.contestant] - 1 == eContestAppealResults.turnOrder[i])
+ appeal = eContestantStatus[i].appeal;
}
}
- if (eContestResources8.turnOrder[eContestResources8.contestant] == 0 || appeal <= 0)
+ if (eContestAppealResults.turnOrder[eContestAppealResults.contestant] == 0 || appeal <= 0)
{
- SetContestantEffectStringID(eContestResources8.contestant, CONTEST_STRING_APPEAL_NOT_WELL2);
+ SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_APPEAL_NOT_WELL2);
}
else
{
- eContestantStatus[eContestResources8.contestant].appeal2 += appeal;
- SetContestantEffectStringID(eContestResources8.contestant, CONTEST_STRING_WORK_PRECEDING);
+ eContestantStatus[eContestAppealResults.contestant].appeal += appeal;
+ SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_WORK_PRECEDING);
}
}
// The appeal works better the later it is performed.
static void ContestEffect_BetterWhenLater(void)
{
- u8 whichTurn = eContestResources8.turnOrder[eContestResources8.contestant];
+ u8 whichTurn = eContestAppealResults.turnOrder[eContestAppealResults.contestant];
if (whichTurn == 0)
- eContestantStatus[eContestResources8.contestant].appeal2 = 10;
+ eContestantStatus[eContestAppealResults.contestant].appeal = 10;
else
- eContestantStatus[eContestResources8.contestant].appeal2 = 20 * whichTurn;
+ eContestantStatus[eContestAppealResults.contestant].appeal = 20 * whichTurn;
if (whichTurn == 0)
- SetContestantEffectStringID(eContestResources8.contestant, CONTEST_STRING_APPEAL_NOT_SHOWN_WELL);
+ SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_APPEAL_NOT_SHOWN_WELL);
else if (whichTurn == 1)
- SetContestantEffectStringID(eContestResources8.contestant, CONTEST_STRING_APPEAL_SLIGHTLY_WELL);
+ SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_APPEAL_SLIGHTLY_WELL);
else if (whichTurn == 2)
- SetContestantEffectStringID(eContestResources8.contestant, CONTEST_STRING_APPEAL_PRETTY_WELL);
+ SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_APPEAL_PRETTY_WELL);
else
- SetContestantEffectStringID(eContestResources8.contestant, CONTEST_STRING_APPEAL_EXCELLENTLY);
+ SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_APPEAL_EXCELLENTLY);
}
// The appeal's quality varies depending on its timing.
@@ -614,31 +617,31 @@ static void ContestEffect_QualityDependsOnTiming(void)
if (rval < 3)
{
appeal = 10;
- SetContestantEffectStringID(eContestResources8.contestant, CONTEST_STRING_APPEAL_NOT_VERY_WELL);
+ SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_APPEAL_NOT_VERY_WELL);
} else if (rval < 6)
{
appeal = 20;
- SetContestantEffectStringID(eContestResources8.contestant, CONTEST_STRING_APPEAL_SLIGHTLY_WELL2);
+ SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_APPEAL_SLIGHTLY_WELL2);
} else if (rval < 8)
{
appeal = 40;
- SetContestantEffectStringID(eContestResources8.contestant, CONTEST_STRING_APPEAL_PRETTY_WELL2);
+ SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_APPEAL_PRETTY_WELL2);
} else if (rval < 9)
{
appeal = 60;
- SetContestantEffectStringID(eContestResources8.contestant, CONTEST_STRING_APPEAL_VERY_WELL);
+ SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_APPEAL_VERY_WELL);
}
else
{
appeal = 80;
- SetContestantEffectStringID(eContestResources8.contestant, CONTEST_STRING_APPEAL_EXCELLENTLY2);
+ SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_APPEAL_EXCELLENTLY2);
}
- eContestantStatus[eContestResources8.contestant].appeal2 = appeal;
+ eContestantStatus[eContestAppealResults.contestant].appeal = appeal;
}
static void ContestEffect_BetterIfSameType(void)
{
- s8 turnOrder = eContestResources8.turnOrder[eContestResources8.contestant];
+ s8 turnOrder = eContestAppealResults.turnOrder[eContestAppealResults.contestant];
s8 i = turnOrder - 1, j;
u16 move;
@@ -647,9 +650,9 @@ static void ContestEffect_BetterIfSameType(void)
while (1)
{
- for (j = 0; j < 4; j++)
+ for (j = 0; j < CONTESTANT_COUNT; j++)
{
- if (eContestResources8.turnOrder[j] == i)
+ if (eContestAppealResults.turnOrder[j] == i)
break;
}
if (eContestantStatus[j].noMoreTurns || eContestantStatus[j].nervous || eContestantStatus[j].numTurnsSkipped)
@@ -663,29 +666,29 @@ static void ContestEffect_BetterIfSameType(void)
}
}
- move = eContestantStatus[eContestResources8.contestant].currMove;
+ move = eContestantStatus[eContestAppealResults.contestant].currMove;
if (gContestMoves[move].contestCategory == gContestMoves[eContestantStatus[j].currMove].contestCategory)
{
- eContestantStatus[eContestResources8.contestant].appeal2 += gContestEffects[gContestMoves[move].effect].appeal * 2;
- SetContestantEffectStringID(eContestResources8.contestant, CONTEST_STRING_SAME_TYPE_GOOD);
+ eContestantStatus[eContestAppealResults.contestant].appeal += gContestEffects[gContestMoves[move].effect].appeal * 2;
+ SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_SAME_TYPE_GOOD);
}
}
// Works well if different in type than the one before.
static void ContestEffect_BetterIfDiffType(void)
{
- if (eContestResources8.turnOrder[eContestResources8.contestant] != 0)
+ if (eContestAppealResults.turnOrder[eContestAppealResults.contestant] != 0)
{
- u16 move = eContestantStatus[eContestResources8.contestant].currMove;
+ u16 move = eContestantStatus[eContestAppealResults.contestant].currMove;
int i;
- for (i = 0; i < 4; i++)
+ for (i = 0; i < CONTESTANT_COUNT; i++)
{
- if (eContestResources8.turnOrder[eContestResources8.contestant] - 1 == eContestResources8.turnOrder[i] &&
+ if (eContestAppealResults.turnOrder[eContestAppealResults.contestant] - 1 == eContestAppealResults.turnOrder[i] &&
gContestMoves[move].contestCategory != gContestMoves[eContestantStatus[i].currMove].contestCategory)
{
- eContestantStatus[eContestResources8.contestant].appeal2 += gContestEffects[gContestMoves[move].effect].appeal * 2;
- SetContestantEffectStringID(eContestResources8.contestant, CONTEST_STRING_DIFF_TYPE_GOOD);
+ eContestantStatus[eContestAppealResults.contestant].appeal += gContestEffects[gContestMoves[move].effect].appeal * 2;
+ SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_DIFF_TYPE_GOOD);
break;
}
}
@@ -695,23 +698,23 @@ static void ContestEffect_BetterIfDiffType(void)
// Affected by how well the appeal in front goes.
static void ContestEffect_AffectedByPrevAppeal(void)
{
- if (eContestResources8.turnOrder[eContestResources8.contestant] != 0)
+ if (eContestAppealResults.turnOrder[eContestAppealResults.contestant] != 0)
{
int i;
- for (i = 0; i < 4; i++)
+ for (i = 0; i < CONTESTANT_COUNT; i++)
{
- if (eContestResources8.turnOrder[eContestResources8.contestant] - 1 == eContestResources8.turnOrder[i])
+ if (eContestAppealResults.turnOrder[eContestAppealResults.contestant] - 1 == eContestAppealResults.turnOrder[i])
{
- if (eContestantStatus[eContestResources8.contestant].appeal2 > eContestantStatus[i].appeal2)
+ if (eContestantStatus[eContestAppealResults.contestant].appeal > eContestantStatus[i].appeal)
{
- eContestantStatus[eContestResources8.contestant].appeal2 *= 2;
- SetContestantEffectStringID(eContestResources8.contestant, CONTEST_STRING_STOOD_OUT_AS_MUCH);
+ eContestantStatus[eContestAppealResults.contestant].appeal *= 2;
+ SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_STOOD_OUT_AS_MUCH);
}
- else if (eContestantStatus[eContestResources8.contestant].appeal2 < eContestantStatus[i].appeal2)
+ else if (eContestantStatus[eContestAppealResults.contestant].appeal < eContestantStatus[i].appeal)
{
- eContestantStatus[eContestResources8.contestant].appeal2 = 0;
- SetContestantEffectStringID(eContestResources8.contestant, CONTEST_STRING_NOT_AS_WELL);
+ eContestantStatus[eContestAppealResults.contestant].appeal = 0;
+ SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_NOT_AS_WELL);
}
}
}
@@ -721,26 +724,26 @@ static void ContestEffect_AffectedByPrevAppeal(void)
// Ups the user's condition. Helps prevent nervousness.
static void ContestEffect_ImproveConditionPreventNervousness(void)
{
- if (eContestantStatus[eContestResources8.contestant].condition < 30)
+ if (eContestantStatus[eContestAppealResults.contestant].condition < 30)
{
- eContestantStatus[eContestResources8.contestant].condition += 10;
- eContestantStatus[eContestResources8.contestant].conditionMod = 1;
- SetContestantEffectStringID(eContestResources8.contestant, CONTEST_STRING_CONDITION_ROSE);
+ eContestantStatus[eContestAppealResults.contestant].condition += 10;
+ eContestantStatus[eContestAppealResults.contestant].conditionMod = CONDITION_GAIN;
+ SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_CONDITION_ROSE);
}
else
{
- SetContestantEffectStringID(eContestResources8.contestant, CONTEST_STRING_NO_CONDITION_IMPROVE);
+ SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_NO_CONDITION_IMPROVE);
}
}
// The appeal works well if the user's condition is good.
static void ContestEffect_BetterWithGoodCondition(void)
{
- eContestantStatus[eContestResources8.contestant].appealTripleCondition = TRUE;
- if (eContestantStatus[eContestResources8.contestant].condition != 0)
- SetContestantEffectStringID(eContestResources8.contestant, CONTEST_STRING_HOT_STATUS);
+ eContestantStatus[eContestAppealResults.contestant].appealTripleCondition = TRUE;
+ if (eContestantStatus[eContestAppealResults.contestant].condition != 0)
+ SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_HOT_STATUS);
else
- SetContestantEffectStringID(eContestResources8.contestant, CONTEST_STRING_BAD_CONDITION_WEAK_APPEAL);
+ SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_BAD_CONDITION_WEAK_APPEAL);
}
// The next appeal can be made earlier next turn.
@@ -748,20 +751,20 @@ static void ContestEffect_NextAppealEarlier(void)
{
s8 i;
s8 j;
- u8 turnOrder[4];
+ u8 turnOrder[CONTESTANT_COUNT];
- if (eContest.turnNumber != 4)
+ if (eContest.appealNumber != CONTEST_LAST_APPEAL)
{
- for (i = 0; i < 4; i++)
+ for (i = 0; i < CONTESTANT_COUNT; i++)
turnOrder[i] = eContestantStatus[i].nextTurnOrder;
- turnOrder[eContestResources8.contestant] = 0xFF;
+ turnOrder[eContestAppealResults.contestant] = 0xFF;
- for (i = 0; i < 4; i++)
+ for (i = 0; i < CONTESTANT_COUNT; i++)
{
- for (j = 0; j < 4; j++)
+ for (j = 0; j < CONTESTANT_COUNT; j++)
{
- if (j != eContestResources8.contestant &&
+ if (j != eContestAppealResults.contestant &&
i == turnOrder[j] &&
turnOrder[j] == eContestantStatus[j].nextTurnOrder)
{
@@ -769,19 +772,19 @@ static void ContestEffect_NextAppealEarlier(void)
break;
}
}
- if (j == 4)
+ if (j == CONTESTANT_COUNT)
break;
}
- turnOrder[eContestResources8.contestant] = 0;
- eContestantStatus[eContestResources8.contestant].turnOrderMod = 1;
+ turnOrder[eContestAppealResults.contestant] = 0;
+ eContestantStatus[eContestAppealResults.contestant].turnOrderMod = 1;
- for (i = 0; i < 4; i++)
+ for (i = 0; i < CONTESTANT_COUNT; i++)
{
eContestantStatus[i].nextTurnOrder = turnOrder[i];
}
- eContestantStatus[eContestResources8.contestant].turnOrderModAction = 1;
- SetContestantEffectStringID(eContestResources8.contestant, CONTEST_STRING_MOVE_UP_LINE);
+ eContestantStatus[eContestAppealResults.contestant].turnOrderModAction = 1;
+ SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_MOVE_UP_LINE);
}
}
@@ -790,20 +793,20 @@ static void ContestEffect_NextAppealLater(void)
{
s8 i;
s8 j;
- u8 turnOrder[4];
+ u8 turnOrder[CONTESTANT_COUNT];
- if (eContest.turnNumber != 4)
+ if (eContest.appealNumber != CONTEST_LAST_APPEAL)
{
- for (i = 0; i < 4; i++)
+ for (i = 0; i < CONTESTANT_COUNT; i++)
turnOrder[i] = eContestantStatus[i].nextTurnOrder;
- turnOrder[eContestResources8.contestant] = 0xFF;
+ turnOrder[eContestAppealResults.contestant] = 0xFF;
- for (i = 3; i > -1; i--)
+ for (i = CONTESTANT_COUNT - 1; i > -1; i--)
{
- for (j = 0; j < 4; j++)
+ for (j = 0; j < CONTESTANT_COUNT; j++)
{
- if (j != eContestResources8.contestant &&
+ if (j != eContestAppealResults.contestant &&
i == turnOrder[j] &&
turnOrder[j] == eContestantStatus[j].nextTurnOrder)
{
@@ -811,19 +814,19 @@ static void ContestEffect_NextAppealLater(void)
break;
}
}
- if (j == 4)
+ if (j == CONTESTANT_COUNT)
break;
}
- turnOrder[eContestResources8.contestant] = 3;
- eContestantStatus[eContestResources8.contestant].turnOrderMod = 1;
+ turnOrder[eContestAppealResults.contestant] = CONTESTANT_COUNT - 1;
+ eContestantStatus[eContestAppealResults.contestant].turnOrderMod = 1;
- for (i = 0; i < 4; i++)
+ for (i = 0; i < CONTESTANT_COUNT; i++)
{
eContestantStatus[i].nextTurnOrder = turnOrder[i];
}
- eContestantStatus[eContestResources8.contestant].turnOrderModAction = 2;
- SetContestantEffectStringID(eContestResources8.contestant, CONTEST_STRING_MOVE_BACK_LINE);
+ eContestantStatus[eContestAppealResults.contestant].turnOrderModAction = 2;
+ SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_MOVE_BACK_LINE);
}
}
@@ -838,22 +841,22 @@ static void ContestEffect_ScrambleNextTurnOrder(void)
{
s8 i;
s8 j;
- u8 turnOrder[4];
- u8 unselectedContestants[4];
+ u8 turnOrder[CONTESTANT_COUNT];
+ u8 unselectedContestants[CONTESTANT_COUNT];
- if (eContest.turnNumber != 4)
+ if (eContest.appealNumber != CONTEST_LAST_APPEAL)
{
- for (i = 0; i < 4; i++)
+ for (i = 0; i < CONTESTANT_COUNT; i++)
{
turnOrder[i] = eContestantStatus[i].nextTurnOrder;
unselectedContestants[i] = i;
}
- for (i = 0; i < 4; i++)
+ for (i = 0; i < CONTESTANT_COUNT; i++)
{
- u8 rval = Random() % (4 - i);
+ u8 rval = Random() % (CONTESTANT_COUNT - i);
- for (j = 0; j < 4; j++)
+ for (j = 0; j < CONTESTANT_COUNT; j++)
{
if (unselectedContestants[j] != 0xFF)
{
@@ -869,22 +872,22 @@ static void ContestEffect_ScrambleNextTurnOrder(void)
}
}
- for (i = 0; i < 4; i++)
+ for (i = 0; i < CONTESTANT_COUNT; i++)
{
eContestantStatus[i].nextTurnOrder = turnOrder[i];
eContestantStatus[i].turnOrderMod = 2;
}
- eContestantStatus[eContestResources8.contestant].turnOrderModAction = 3;
- SetContestantEffectStringID(eContestResources8.contestant, CONTEST_STRING_SCRAMBLE_ORDER);
+ eContestantStatus[eContestAppealResults.contestant].turnOrderModAction = 3;
+ SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_SCRAMBLE_ORDER);
}
}
// An appeal that excites the audience in any CONTEST.
static void ContestEffect_ExciteAudienceInAnyContest(void)
{
- if (gContestMoves[eContestantStatus[eContestResources8.contestant].currMove].contestCategory != gSpecialVar_ContestCategory)
+ if (gContestMoves[eContestantStatus[eContestAppealResults.contestant].currMove].contestCategory != gSpecialVar_ContestCategory)
{
- eContestantStatus[eContestResources8.contestant].overrideCategoryExcitementMod = TRUE;
+ eContestantStatus[eContestAppealResults.contestant].overrideCategoryExcitementMod = TRUE;
}
}
@@ -894,26 +897,26 @@ static void ContestEffect_BadlyStartleMonsWithGoodAppeals(void)
int i;
u8 numJammed = 0;
- for (i = 0; i < 4; i++)
+ for (i = 0; i < CONTESTANT_COUNT; i++)
{
- if (eContestResources8.turnOrder[eContestResources8.contestant] > eContestResources8.turnOrder[i])
+ if (eContestAppealResults.turnOrder[eContestAppealResults.contestant] > eContestAppealResults.turnOrder[i])
{
- if (eContestantStatus[i].appeal2 > 0)
+ if (eContestantStatus[i].appeal > 0)
{
- eContestResources8.jam = eContestantStatus[i].appeal2 / 2;
- eContestResources8.jam = RoundUp(eContestResources8.jam);
+ eContestAppealResults.jam = eContestantStatus[i].appeal / 2;
+ eContestAppealResults.jam = RoundUp(eContestAppealResults.jam);
}
else
- eContestResources8.jam = 10;
- eContestResources8.jamQueue[0] = i;
- eContestResources8.jamQueue[1] = 0xFF;
+ eContestAppealResults.jam = 10;
+ eContestAppealResults.jamQueue[0] = i;
+ eContestAppealResults.jamQueue[1] = 0xFF;
if (WasAtLeastOneOpponentJammed())
numJammed++;
}
}
if (numJammed == 0)
- SetContestantEffectStringID2(eContestResources8.contestant, CONTEST_STRING_MESSED_UP2);
- SetContestantEffectStringID(eContestResources8.contestant, CONTEST_STRING_ATTEMPT_STARTLE);
+ SetContestantEffectStringID2(eContestAppealResults.contestant, CONTEST_STRING_MESSED_UP2);
+ SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_ATTEMPT_STARTLE);
}
// The appeal works best the more the crowd is excited.
@@ -924,39 +927,39 @@ static void ContestEffect_BetterWhenAudienceExcited(void)
if (eContest.applauseLevel == 0)
{
appeal = 10;
- SetContestantEffectStringID(eContestResources8.contestant, CONTEST_STRING_APPEAL_NOT_VERY_WELL);
+ SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_APPEAL_NOT_VERY_WELL);
}
else if (eContest.applauseLevel == 1)
{
appeal = 20;
- SetContestantEffectStringID(eContestResources8.contestant, CONTEST_STRING_APPEAL_SLIGHTLY_WELL2);
+ SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_APPEAL_SLIGHTLY_WELL2);
}
else if (eContest.applauseLevel == 2)
{
appeal = 30;
- SetContestantEffectStringID(eContestResources8.contestant, CONTEST_STRING_APPEAL_PRETTY_WELL2);
+ SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_APPEAL_PRETTY_WELL2);
}
else if (eContest.applauseLevel == 3)
{
appeal = 50;
- SetContestantEffectStringID(eContestResources8.contestant, CONTEST_STRING_APPEAL_VERY_WELL);
+ SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_APPEAL_VERY_WELL);
}
else
{
appeal = 60;
- SetContestantEffectStringID(eContestResources8.contestant, CONTEST_STRING_APPEAL_EXCELLENTLY2);
+ SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_APPEAL_EXCELLENTLY2);
}
- eContestantStatus[eContestResources8.contestant].appeal2 = appeal;
+ eContestantStatus[eContestAppealResults.contestant].appeal = appeal;
}
// Temporarily stops the crowd from growing excited.
static void ContestEffect_DontExciteAudience(void)
{
- if (!eContestResources10.excitementFrozen)
+ if (!eContestExcitement.frozen)
{
- eContestResources10.excitementFrozen = TRUE;
- eContestResources10.excitementFreezer = eContestResources8.contestant;
- SetContestantEffectStringID(eContestResources8.contestant, CONTEST_STRING_ATTRACTED_ATTENTION);
+ eContestExcitement.frozen = TRUE;
+ eContestExcitement.freezer = eContestAppealResults.contestant;
+ SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_ATTRACTED_ATTENTION);
}
}
@@ -965,28 +968,28 @@ static void JamByMoveCategory(u8 category)
int i;
int numJammed = 0;
- for (i = 0; i < 4; i++)
+ for (i = 0; i < CONTESTANT_COUNT; i++)
{
- if (eContestResources8.turnOrder[eContestResources8.contestant] > eContestResources8.turnOrder[i])
+ if (eContestAppealResults.turnOrder[eContestAppealResults.contestant] > eContestAppealResults.turnOrder[i])
{
if (category == gContestMoves[eContestantStatus[i].currMove].contestCategory)
- eContestResources8.jam = 40;
+ eContestAppealResults.jam = 40;
else
- eContestResources8.jam = 10;
- eContestResources8.jamQueue[0] = i;
- eContestResources8.jamQueue[1] = 0xFF;
+ eContestAppealResults.jam = 10;
+ eContestAppealResults.jamQueue[0] = i;
+ eContestAppealResults.jamQueue[1] = 0xFF;
if (WasAtLeastOneOpponentJammed())
numJammed++;
}
}
if (numJammed == 0)
- SetContestantEffectStringID2(eContestResources8.contestant, CONTEST_STRING_MESSED_UP2);
+ SetContestantEffectStringID2(eContestAppealResults.contestant, CONTEST_STRING_MESSED_UP2);
}
static bool8 CanUnnerveContestant(u8 i)
{
- eContestResources8.unnervedPokes[i] = 1;
+ eContestAppealResults.unnervedPokes[i] = 1;
if (eContestantStatus[i].immune)
{
SetContestantEffectStringID(i, CONTEST_STRING_AVOID_SEEING);
@@ -1010,41 +1013,41 @@ static bool8 CanUnnerveContestant(u8 i)
static bool8 WasAtLeastOneOpponentJammed(void)
{
- s16 jamBuffer[4] = {0};
+ s16 jamBuffer[CONTESTANT_COUNT] = {0};
int i;
- for (i = 0; eContestResources8.jamQueue[i] != 0xFF; i++)
+ for (i = 0; eContestAppealResults.jamQueue[i] != 0xFF; i++)
{
- u8 contestant = eContestResources8.jamQueue[i];
+ u8 contestant = eContestAppealResults.jamQueue[i];
if (CanUnnerveContestant(contestant))
{
- eContestResources8.jam2 = eContestResources8.jam;
+ eContestAppealResults.jam2 = eContestAppealResults.jam;
if (eContestantStatus[contestant].moreEasilyStartled)
- eContestResources8.jam2 *= 2;
+ eContestAppealResults.jam2 *= 2;
if (eContestantStatus[contestant].resistant)
{
- eContestResources8.jam2 = 10;
+ eContestAppealResults.jam2 = 10;
SetContestantEffectStringID(contestant, CONTEST_STRING_LITTLE_DISTRACTED);
}
else
{
- eContestResources8.jam2 -= eContestantStatus[contestant].jamReduction;
- if (eContestResources8.jam2 <= 0)
+ eContestAppealResults.jam2 -= eContestantStatus[contestant].jamReduction;
+ if (eContestAppealResults.jam2 <= 0)
{
- eContestResources8.jam2 = 0;
+ eContestAppealResults.jam2 = 0;
SetContestantEffectStringID(contestant, CONTEST_STRING_NOT_FAZED);
}
else
{
- JamContestant(contestant, eContestResources8.jam2);
- SetStartledString(contestant, eContestResources8.jam2);
- jamBuffer[contestant] = eContestResources8.jam2;
+ JamContestant(contestant, eContestAppealResults.jam2);
+ SetStartledString(contestant, eContestAppealResults.jam2);
+ jamBuffer[contestant] = eContestAppealResults.jam2;
}
}
}
}
- for (i = 0; i < 4; i++)
+ for (i = 0; i < CONTESTANT_COUNT; i++)
{
if (jamBuffer[i] != 0)
return TRUE;
@@ -1054,7 +1057,7 @@ static bool8 WasAtLeastOneOpponentJammed(void)
static void JamContestant(u8 i, u8 jam)
{
- eContestantStatus[i].appeal2 -= jam;
+ eContestantStatus[i].appeal -= jam;
eContestantStatus[i].jam += jam;
}
diff --git a/src/contest_link.c b/src/contest_link.c
new file mode 100644
index 000000000..ae6975268
--- /dev/null
+++ b/src/contest_link.c
@@ -0,0 +1,563 @@
+#include "global.h"
+#include "contest.h"
+#include "decompress.h"
+#include "event_data.h"
+#include "link.h"
+#include "pokemon.h"
+#include "random.h"
+#include "task.h"
+#include "contest_link.h"
+
+static void Task_LinkContest_StartInitFlags(u8);
+static void Task_LinkContest_InitFlags(u8);
+
+#define tState data[0]
+#define tDelayTimer data[1]
+#define tCategories(i) data[(i) + 1]
+#define tLeaderIds(i) data[(i) + 5]
+#define tCategory data[9]
+#define tTimer data[11]
+#define tStandbyState data[12]
+
+bool32 LinkContest_SendBlock(void *src, u16 size)
+{
+ memcpy(gDecompressionBuffer, src, size);
+ if (SendBlock(bitmask_all_link_players_but_self(), gDecompressionBuffer, size))
+ return TRUE;
+ else
+ return FALSE;
+}
+
+bool8 LinkContest_GetBlockReceived(u8 flag)
+{
+ u8 mask = (1 << flag);
+ if (!(GetBlockReceivedStatus() & mask))
+ {
+ return FALSE;
+ }
+ else
+ {
+ ResetBlockReceivedFlag(flag);
+ return TRUE;
+ }
+}
+
+bool8 LinkContest_GetBlockReceivedFromAllPlayers(void)
+{
+ if (GetBlockReceivedStatus() == GetLinkPlayerCountAsBitFlags())
+ {
+ ResetBlockReceivedFlags();
+ return TRUE;
+ }
+ else
+ {
+ return FALSE;
+ }
+}
+
+void Task_LinkContest_Init(u8 taskId)
+{
+ u8 i;
+
+ for (i = 0; i < CONTESTANT_COUNT; i++)
+ gBlockRecvBuffer[i][0] = 0xFF;
+
+ gTasks[taskId].tState = 0;
+ gTasks[taskId].func = Task_LinkContest_StartInitFlags;
+}
+
+static void Task_LinkContest_StartInitFlags(u8 taskId)
+{
+ gTasks[taskId].func = Task_LinkContest_InitFlags;
+}
+
+static void Task_LinkContest_InitFlags(u8 taskId)
+{
+ int i;
+
+ if (!gReceivedRemoteLinkPlayers)
+ return;
+
+ gContestPlayerMonIndex = GetMultiplayerId();
+ gNumLinkContestPlayers = GetLinkPlayerCount();
+ gLinkContestFlags = LINK_CONTEST_FLAG_IS_LINK;
+ if (gWirelessCommType == 1)
+ gLinkContestFlags = LINK_CONTEST_FLAG_IS_LINK | LINK_CONTEST_FLAG_IS_WIRELESS;
+
+ // Get number of players using Emerald/FRLG
+ for (i = 0; i < gNumLinkContestPlayers && (u32)(gLinkPlayers[i].version & 0xFF) - 1 > VERSION_RUBY - 1; i++)
+ ;
+
+ if (i < gNumLinkContestPlayers)
+ gLinkContestFlags |= LINK_CONTEST_FLAG_HAS_RS_PLAYER;
+
+ SwitchTaskToFollowupFunc(taskId);
+}
+
+bool32 LinkContest_TryLinkStandby(s16 *state)
+{
+ // Skip standby for RS cabled links
+ if (gLinkContestFlags & LINK_CONTEST_FLAG_HAS_RS_PLAYER)
+ return TRUE;
+
+ switch (*state)
+ {
+ case 0:
+ if (IsLinkTaskFinished())
+ {
+ SetLinkStandbyCallback();
+ (*state)++;
+ }
+ return FALSE;
+ case 1:
+ (*state)++;
+ return FALSE;
+ default:
+ if (IsLinkTaskFinished() != TRUE)
+ return FALSE;
+ else
+ return TRUE;
+ }
+}
+
+void Task_LinkContest_CommunicateMonsRS(u8 taskId)
+{
+ int i;
+
+ if (!LinkContest_TryLinkStandby(&gTasks[taskId].tStandbyState))
+ return;
+
+ switch (gTasks[taskId].tState)
+ {
+ case 0:
+ // Send players mon
+ if (GetMultiplayerId() == 0)
+ {
+ if (IsLinkTaskFinished())
+ {
+ memcpy(gBlockSendBuffer, &gContestMons[gContestPlayerMonIndex], sizeof(struct ContestPokemon));
+ gTasks[taskId].tState = 10;
+ }
+ }
+ else
+ {
+ memcpy(gBlockSendBuffer, &gContestMons[gContestPlayerMonIndex], sizeof(struct ContestPokemon));
+ gTasks[taskId].tState = 1;
+ }
+ break;
+ case 1:
+ // Wait for other players data
+ if (LinkContest_GetBlockReceivedFromAllPlayers())
+ {
+ for (i = 0; i < gNumLinkContestPlayers; i++)
+ {
+ memcpy(&gContestMons[i], gBlockRecvBuffer[i], sizeof(struct ContestPokemon));
+ StripPlayerAndMonNamesForLinkContest(&gContestMons[i], gLinkPlayers[i].language);
+ }
+
+ gTasks[taskId].tState++;
+ }
+ break;
+ case 10:
+ // Only if leader. Request other players data
+ if (++gTasks[taskId].tTimer > 300)
+ {
+ SendBlockRequest(2);
+ gTasks[taskId].tState = 1;
+ }
+ break;
+ default:
+ gTasks[taskId].tState = 0;
+ gTasks[taskId].tTimer = 0;
+ gTasks[taskId].tStandbyState = 0;
+ SwitchTaskToFollowupFunc(taskId);
+ break;
+ }
+}
+
+void Task_LinkContest_CommunicateRngRS(u8 taskId)
+{
+ switch (gTasks[taskId].tState)
+ {
+ case 0:
+ if (GetMultiplayerId() == 0)
+ {
+ if (IsLinkTaskFinished() && LinkContest_SendBlock(&gRngValue, sizeof(gRngValue)) == TRUE)
+ gTasks[taskId].tState++;
+ }
+ else
+ {
+ gTasks[taskId].tState++;
+ }
+ break;
+ case 1:
+ if (LinkContest_GetBlockReceived(0))
+ {
+ memcpy(&gRngValue, gBlockRecvBuffer[0], sizeof(gRngValue));
+ memcpy(&gContestRngValue, gBlockRecvBuffer[0], sizeof(gContestRngValue));
+ gTasks[taskId].tState++;
+ }
+ break;
+ default:
+ gTasks[taskId].tState = 0;
+ SwitchTaskToFollowupFunc(taskId);
+ break;
+ }
+}
+
+void Task_LinkContest_CommunicateCategoryRS(u8 taskId)
+{
+ int i;
+
+ if (!LinkContest_TryLinkStandby(&gTasks[taskId].tStandbyState))
+ return;
+
+ switch (gTasks[taskId].tState)
+ {
+ case 0:
+ gBlockSendBuffer[0] = gTasks[taskId].tCategory;
+ if (GetMultiplayerId() == 0)
+ {
+ if (IsLinkTaskFinished())
+ gTasks[taskId].tState = 10;
+ }
+ else
+ {
+ gTasks[taskId].tState++;
+ }
+ break;
+ case 1:
+ if (LinkContest_GetBlockReceivedFromAllPlayers())
+ {
+ for (i = 0; i < gNumLinkContestPlayers; i++)
+ gTasks[taskId].tCategories(i) = gBlockRecvBuffer[i][0];
+
+ gTasks[taskId].tState++;
+ }
+ break;
+ case 10:
+ if (++gTasks[taskId].tTimer > 10)
+ {
+ SendBlockRequest(2);
+ gTasks[taskId].tState = 1;
+ }
+ break;
+ default:
+ gTasks[taskId].tState = 0;
+ gTasks[taskId].tTimer = 0;
+ gTasks[taskId].tStandbyState = 0;
+ SwitchTaskToFollowupFunc(taskId);
+ break;
+ }
+}
+
+void Task_LinkContest_CommunicateMonIdxs(u8 taskId)
+{
+ switch (gTasks[taskId].tState)
+ {
+ case 0:
+ if (IsLinkTaskFinished())
+ {
+ if (LinkContest_SendBlock(&gContestPlayerMonIndex, sizeof(gContestPlayerMonIndex)) == TRUE)
+ gTasks[taskId].tState++;
+ }
+ break;
+ case 1:
+ if (LinkContest_GetBlockReceivedFromAllPlayers())
+ gTasks[taskId].tState++;
+ break;
+ default:
+ gTasks[taskId].tState = 0;
+ SwitchTaskToFollowupFunc(taskId);
+ break;
+ }
+}
+
+void Task_LinkContest_CommunicateMoveSelections(u8 taskId)
+{
+ int i;
+
+ switch (gTasks[taskId].tState)
+ {
+ case 0:
+ if (IsLinkTaskFinished())
+ {
+ // Send player's move selection
+ if (LinkContest_SendBlock(&eContestantStatus[gContestPlayerMonIndex].currMove, sizeof(eContestantStatus[gContestPlayerMonIndex].currMove)) == TRUE)
+ gTasks[taskId].tState++;
+ }
+ break;
+ case 1:
+ if (LinkContest_GetBlockReceivedFromAllPlayers())
+ {
+ // Receive partners' move selections
+ for (i = 0; i < gNumLinkContestPlayers; i++)
+ eContestantStatus[i].currMove = gBlockRecvBuffer[i][0];
+
+ gTasks[taskId].tState++;
+ }
+ break;
+ default:
+ gTasks[taskId].tState = 0;
+ SwitchTaskToFollowupFunc(taskId);
+ break;
+ }
+}
+
+void Task_LinkContest_CommunicateFinalStandings(u8 taskId)
+{
+ switch (gTasks[taskId].tState)
+ {
+ case 0:
+ if (IsLinkTaskFinished())
+ {
+ if (LinkContest_SendBlock(gContestMonTotalPoints, sizeof(gContestMonTotalPoints)) == 1)
+ gTasks[taskId].tState++;
+ }
+ break;
+ case 1:
+ if (LinkContest_GetBlockReceivedFromAllPlayers())
+ {
+ memcpy(gContestMonTotalPoints, gBlockRecvBuffer[gContestLinkLeaderIndex], sizeof(gContestMonTotalPoints));
+ gTasks[taskId].tState++;
+ }
+ break;
+ case 2:
+ case 5:
+ case 8:
+ case 11:
+ if (gTasks[taskId].tDelayTimer++ > 10)
+ {
+ gTasks[taskId].tDelayTimer = 0;
+ gTasks[taskId].tState++;
+ }
+ break;
+ case 3:
+ if (IsLinkTaskFinished())
+ {
+ if (LinkContest_SendBlock(gContestMonAppealPointTotals, sizeof(gContestMonAppealPointTotals)) == 1)
+ gTasks[taskId].tState++;
+ }
+ break;
+ case 4:
+ if (LinkContest_GetBlockReceivedFromAllPlayers())
+ {
+ memcpy(gContestMonAppealPointTotals, gBlockRecvBuffer[gContestLinkLeaderIndex], sizeof(gContestMonAppealPointTotals));
+ gTasks[taskId].tState++;
+ }
+ break;
+ case 6:
+ if (IsLinkTaskFinished())
+ {
+ if (LinkContest_SendBlock(gContestMonRound2Points, sizeof(gContestMonRound2Points)) == 1)
+ gTasks[taskId].tState++;
+ }
+ break;
+ case 7:
+ if (LinkContest_GetBlockReceivedFromAllPlayers())
+ {
+ memcpy(gContestMonRound2Points, gBlockRecvBuffer[gContestLinkLeaderIndex], sizeof(gContestMonRound2Points));
+ gTasks[taskId].tState++;
+ }
+ break;
+ case 9:
+ if (IsLinkTaskFinished())
+ {
+ if (LinkContest_SendBlock(gContestFinalStandings, sizeof(gContestFinalStandings)) == 1)
+ gTasks[taskId].tState++;
+ }
+ break;
+ case 10:
+ if (LinkContest_GetBlockReceivedFromAllPlayers())
+ {
+ memcpy(gContestFinalStandings, gBlockRecvBuffer[gContestLinkLeaderIndex], sizeof(gContestFinalStandings));
+ gTasks[taskId].tState++;
+ }
+ break;
+ default:
+ gTasks[taskId].tState = 0;
+ SwitchTaskToFollowupFunc(taskId);
+ break;
+ }
+}
+
+void Task_LinkContest_CommunicateAppealsState(u8 taskId)
+{
+ switch (gTasks[taskId].tState)
+ {
+ case 0:
+ if (IsLinkTaskFinished())
+ {
+ if (LinkContest_SendBlock(eContestantStatus, CONTESTANT_COUNT * sizeof(struct ContestantStatus)) == 1)
+ gTasks[taskId].tState++;
+ }
+ break;
+ case 1:
+ if (LinkContest_GetBlockReceivedFromAllPlayers())
+ {
+ memcpy(eContestantStatus, gBlockRecvBuffer[gContestLinkLeaderIndex], CONTESTANT_COUNT * sizeof(struct ContestantStatus));
+ gTasks[taskId].tState++;
+ }
+ break;
+ case 2:
+ case 5:
+ case 8:
+ case 11:
+ if (gTasks[taskId].tDelayTimer++ > 10)
+ {
+ gTasks[taskId].tDelayTimer = 0;
+ gTasks[taskId].tState++;
+ }
+ break;
+ case 3:
+ if (IsLinkTaskFinished())
+ {
+ if (LinkContest_SendBlock(gContestResources->appealResults, sizeof(struct ContestAppealMoveResults)) == 1)
+ gTasks[taskId].tState++;
+ }
+ break;
+ case 4:
+ if (LinkContest_GetBlockReceivedFromAllPlayers())
+ {
+ memcpy(gContestResources->appealResults, gBlockRecvBuffer[gContestLinkLeaderIndex], sizeof(struct ContestAppealMoveResults));
+ gTasks[taskId].tState++;
+ }
+ break;
+ case 6:
+ if (IsLinkTaskFinished())
+ {
+ if (LinkContest_SendBlock(gContestResources->excitement, sizeof(struct ContestExcitement)) == 1)
+ gTasks[taskId].tState++;
+ }
+ break;
+ case 7:
+ if (LinkContest_GetBlockReceivedFromAllPlayers())
+ {
+ memcpy(gContestResources->excitement, gBlockRecvBuffer[gContestLinkLeaderIndex], sizeof(struct ContestExcitement));
+ gTasks[taskId].tState++;
+ }
+ break;
+ case 9:
+ if (IsLinkTaskFinished())
+ {
+ if (LinkContest_SendBlock(gContestantTurnOrder, sizeof(gContestantTurnOrder)) == 1)
+ gTasks[taskId].tState++;
+ }
+ break;
+ case 10:
+ if (LinkContest_GetBlockReceivedFromAllPlayers())
+ {
+ memcpy(gContestantTurnOrder, gBlockRecvBuffer[gContestLinkLeaderIndex], sizeof(gContestantTurnOrder));
+ gTasks[taskId].tState++;
+ }
+ break;
+ default:
+ gTasks[taskId].tState = 0;
+ SwitchTaskToFollowupFunc(taskId);
+ break;
+ }
+}
+
+void Task_LinkContest_CommunicateLeaderIdsRS(u8 taskId)
+{
+ int i;
+
+ if (!LinkContest_TryLinkStandby(&gTasks[taskId].tStandbyState))
+ return;
+
+ switch (gTasks[taskId].tState)
+ {
+ case 0:
+ gBlockSendBuffer[0] = 0x6E;
+ if (GetMultiplayerId() == 0)
+ {
+ if (IsLinkTaskFinished())
+ gTasks[taskId].tState = 10;
+ }
+ else
+ {
+ gTasks[taskId].tState++;
+ }
+ break;
+ case 1:
+ if (LinkContest_GetBlockReceivedFromAllPlayers())
+ {
+ for (i = 0; i < CONTESTANT_COUNT; i++)
+ gTasks[taskId].tLeaderIds(i) = gBlockRecvBuffer[i][0];
+
+ gTasks[taskId].tState++;
+ }
+ break;
+ case 10:
+ if (++gTasks[taskId].tTimer > 10)
+ {
+ SendBlockRequest(2);
+ gTasks[taskId].tState = 1;
+ }
+ break;
+ default:
+ gTasks[taskId].tState = 0;
+ gTasks[taskId].tTimer = 0;
+ gTasks[taskId].tStandbyState = 0;
+ SwitchTaskToFollowupFunc(taskId);
+ break;
+ }
+}
+
+void Task_LinkContest_CommunicateRound1Points(u8 taskId)
+{
+ if (!LinkContest_TryLinkStandby(&gTasks[taskId].tStandbyState))
+ return;
+
+ switch (gTasks[taskId].tState)
+ {
+ case 0:
+ if (IsLinkTaskFinished())
+ {
+ if (LinkContest_SendBlock(gContestMonRound1Points, sizeof(gContestMonRound1Points)) == 1)
+ gTasks[taskId].tState++;
+ }
+ break;
+ case 1:
+ if (LinkContest_GetBlockReceivedFromAllPlayers())
+ {
+ memcpy(gContestMonRound1Points, gBlockRecvBuffer[gContestLinkLeaderIndex], sizeof(gContestMonRound1Points));
+ gTasks[taskId].tState++;
+ }
+ break;
+ default:
+ gTasks[taskId].tState = 0;
+ gTasks[taskId].tStandbyState = 0;
+ SwitchTaskToFollowupFunc(taskId);
+ break;
+ }
+}
+
+void Task_LinkContest_CommunicateTurnOrder(u8 taskId)
+{
+ if (!LinkContest_TryLinkStandby(&gTasks[taskId].tStandbyState))
+ return;
+
+ switch (gTasks[taskId].tState)
+ {
+ case 0:
+ if (IsLinkTaskFinished())
+ {
+ if (LinkContest_SendBlock(gContestantTurnOrder, sizeof(gContestantTurnOrder)) == 1)
+ gTasks[taskId].tState++;
+ }
+ break;
+ case 1:
+ if (LinkContest_GetBlockReceivedFromAllPlayers())
+ {
+ memcpy(gContestantTurnOrder, gBlockRecvBuffer[gContestLinkLeaderIndex], sizeof(gContestantTurnOrder));
+ gTasks[taskId].tState++;
+ }
+ break;
+ default:
+ gTasks[taskId].tState = 0;
+ gTasks[taskId].tStandbyState = 0;
+ SwitchTaskToFollowupFunc(taskId);
+ break;
+ }
+}
diff --git a/src/contest_link_80F57C4.c b/src/contest_link_80F57C4.c
deleted file mode 100644
index 0cecaed07..000000000
--- a/src/contest_link_80F57C4.c
+++ /dev/null
@@ -1,2477 +0,0 @@
-#include "global.h"
-#include "malloc.h"
-#include "battle.h"
-#include "battle_gfx_sfx_util.h"
-#include "bg.h"
-#include "contest.h"
-#include "contest_link_80F57C4.h"
-#include "contest_link_80FC4F4.h"
-#include "data.h"
-#include "decompress.h"
-#include "dma3.h"
-#include "event_data.h"
-#include "field_specials.h"
-#include "gpu_regs.h"
-#include "graphics.h"
-#include "international_string_util.h"
-#include "link.h"
-#include "link_rfu.h"
-#include "load_save.h"
-#include "main.h"
-#include "overworld.h"
-#include "palette.h"
-#include "pokedex.h"
-#include "pokemon.h"
-#include "pokemon_icon.h"
-#include "random.h"
-#include "save.h"
-#include "scanline_effect.h"
-#include "script.h"
-#include "sound.h"
-#include "string_util.h"
-#include "strings.h"
-#include "task.h"
-#include "text.h"
-#include "trig.h"
-#include "tv.h"
-#include "util.h"
-#include "window.h"
-#include "constants/game_stat.h"
-#include "constants/rgb.h"
-#include "constants/songs.h"
-#include "constants/tv.h"
-#include "constants/vars.h"
-#include "contest.h"
-
-struct ContestLinkUnk0
-{
- u8 unk0;
- u8 unk1;
- u8 taskId;
- u8 unk3;
- u8 unk4;
- u8 unk5;
- u8 unk6;
- u8 unk7;
- u8 spriteId;
- u8 unk9;
- u8 unkA;
- s16 unkC[4];
- u8 unk14;
- u8 filler15[0x3];
-};
-
-struct ContestLinkUnk14
-{
- int unk0;
- int unk4;
- u32 unk8;
- u32 unkC;
- u8 unk10;
- u8 unk11;
- u8 unk12;
-};
-
-struct ContestLink80F57C4
-{
- struct ContestLinkUnk0 *unk0;
- struct ContestLinkUnk14 (*unk4)[4];
- u8 *unk8;
- u8 *unkC[4];
- u8 *unk1C;
-};
-
-EWRAM_DATA struct ContestLink80F57C4 *gUnknown_0203A034 = NULL;
-
-static void sub_80F6A9C(void);
-static void sub_80F71C8(void);
-u8 sub_80F7310(u8, u8);
-s8 sub_80F7364(u8, u8);
-static void sub_80F7ED0(int, u8 *, int);
-static void sub_80F7DF4(void);
-static void LoadAllContestMonIcons(u8, u8);
-static void sub_80F6DC0(void);
-static void sub_80F6AE8(void);
-static void sub_80F5CE4(u8);
-static void sub_80F5C00(void);
-static void sub_80F68B4(u8);
-static void sub_80F7880(void);
-static void sub_80F5C24(void);
-static void sub_80F707C(const u8 *);
-static void sub_80F5ED8(u8);
-static void sub_80F5F14(u8);
-static void sub_80F5F30(u8);
-static void sub_80F5F74(u8);
-static void sub_80F7144(void);
-static void sub_80F68F0(u8);
-s32 sub_80F6B78(const u8 *, u8);
-static void sub_80F6E9C(s16, u16, u16, u16);
-static void sub_80F6058(u8);
-static void sub_80F7A80(u8, u8);
-void sub_80F7CA8(u8);
-static void sub_80F6EF4(u16);
-static void sub_80F60F0(u8);
-static void sub_80F616C(u8);
-static void sub_80F6204(u8);
-static void sub_80F73DC(u8);
-static void sub_80F74BC(u8);
-static void sub_80F753C(u8);
-static void sub_80F77E0(u8, u8);
-static void sub_80F7824(u8);
-static void sub_80F6404(u8);
-static void sub_80F75A8(struct Sprite *);
-static void sub_80F7670(u8);
-static void sub_80F7620(struct Sprite *);
-static void sub_80F66B4(u8);
-static void sub_80F671C(u8);
-static void sub_80F677C(u8);
-static void sub_80F67C4(u8);
-static void sub_80F6820(u8);
-static void sub_80F7E64(void);
-static void sub_80F6F68(struct Sprite *);
-static void sub_80F7014(struct Sprite *);
-static void sub_80F6FDC(struct Sprite *);
-static void sub_80F8508(u8);
-static void sub_80F8568(u8);
-static void sub_80F8584(u8);
-static void sub_80F85A0(u8);
-static void sub_80F85BC(u8);
-static void sub_80F86B8(u8);
-static void sub_80F878C(u8);
-static void sub_80F87B4(u8);
-static void sub_80F7768(struct Sprite *sprite);
-
-static const u16 sUnknown_0858D6B0[] = INCBIN_U16("graphics/unknown/unknown_58D6B0.gbapal");
-static const u8 sUnknown_0858D6D0[] = INCBIN_U8("graphics/unknown/unknown_58D6D0.4bpp");
-static const u16 sMiscBlank_Pal[] = INCBIN_U16("graphics/interface/blank.gbapal");
-
-static const struct OamData sOamData_858D7F0 =
-{
- .y = 0,
- .affineMode = ST_OAM_AFFINE_OFF,
- .objMode = ST_OAM_OBJ_NORMAL,
- .mosaic = 0,
- .bpp = ST_OAM_4BPP,
- .shape = SPRITE_SHAPE(64x32),
- .x = 0,
- .matrixNum = 0,
- .size = SPRITE_SIZE(64x32),
- .tileNum = 0,
- .priority = 3,
- .paletteNum = 2,
- .affineParam = 0,
-};
-
-static const struct SpriteTemplate sSpriteTemplate_858D7F8 =
-{
- .tileTag = 3009,
- .paletteTag = 3009,
- .oam = &sOamData_858D7F0,
- .anims = gDummySpriteAnimTable,
- .images = NULL,
- .affineAnims = gDummySpriteAffineAnimTable,
- .callback = SpriteCallbackDummy
-};
-
-static const struct SpriteSheet sUnknown_0858D810[] =
-{
- { .data = gMiscBlank_Gfx, .size = 0x400, .tag = 3009 },
- { .data = gMiscBlank_Gfx, .size = 0x400, .tag = 3010 },
- { .data = gMiscBlank_Gfx, .size = 0x400, .tag = 3011 },
- { .data = gMiscBlank_Gfx, .size = 0x400, .tag = 3012 },
- { .data = gMiscBlank_Gfx, .size = 0x400, .tag = 3013 },
- { .data = gMiscBlank_Gfx, .size = 0x400, .tag = 3014 },
- { .data = gMiscBlank_Gfx, .size = 0x400, .tag = 3015 },
- { .data = gMiscBlank_Gfx, .size = 0x400, .tag = 3016 },
-};
-
-static const struct SpritePalette sUnknown_0858D850 =
-{
- .data = sMiscBlank_Pal,
- .tag = 3009,
-};
-
-static const struct OamData sOamData_858D858 =
-{
- .y = 0,
- .affineMode = ST_OAM_AFFINE_OFF,
- .objMode = ST_OAM_OBJ_NORMAL,
- .mosaic = 0,
- .bpp = ST_OAM_4BPP,
- .shape = SPRITE_SHAPE(8x8),
- .x = 0,
- .matrixNum = 0,
- .size = SPRITE_SIZE(8x8),
- .tileNum = 0,
- .priority = 0,
- .paletteNum = 0,
- .affineParam = 0,
-};
-
-static const struct SpriteTemplate sSpriteTemplate_858D860 =
-{
- .tileTag = 3017,
- .paletteTag = 3017,
- .oam = &sOamData_858D858,
- .anims = gDummySpriteAnimTable,
- .images = NULL,
- .affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_80F7768
-};
-
-static const struct CompressedSpriteSheet sUnknown_0858D878 =
-{
- .data = gContestConfetti_Gfx,
- .size = 0x220,
- .tag = 3017
-};
-
-
-static const struct CompressedSpritePalette sUnknown_0858D880 =
-{
- .data = gContestConfetti_Pal,
- .tag = 3017
-};
-
-static const struct BgTemplate sUnknown_0858D888[] =
-{
- {
- .bg = 0,
- .charBaseIndex = 0,
- .mapBaseIndex = 30,
- .screenSize = 0,
- .paletteMode = 0,
- .priority = 0,
- .baseTile = 0,
- },
- {
- .bg = 1,
- .charBaseIndex = 0,
- .mapBaseIndex = 24,
- .screenSize = 0,
- .paletteMode = 0,
- .priority = 3,
- .baseTile = 0,
- },
- {
- .bg = 2,
- .charBaseIndex = 0,
- .mapBaseIndex = 28,
- .screenSize = 0,
- .paletteMode = 0,
- .priority = 3,
- .baseTile = 0,
- },
- {
- .bg = 3,
- .charBaseIndex = 0,
- .mapBaseIndex = 26,
- .screenSize = 0,
- .paletteMode = 0,
- .priority = 3,
- .baseTile = 0,
- }
-};
-
-static const struct WindowTemplate sUnknown_0858D898[] =
-{
- {
- .bg = 1,
- .tilemapLeft = 7,
- .tilemapTop = 4,
- .width = 12,
- .height = 2,
- .paletteNum = 15,
- .baseBlock = 770
- },
- {
- .bg = 1,
- .tilemapLeft = 7,
- .tilemapTop = 7,
- .width = 12,
- .height = 2,
- .paletteNum = 15,
- .baseBlock = 794
- },
- {
- .bg = 1,
- .tilemapLeft = 7,
- .tilemapTop = 10,
- .width = 12,
- .height = 2,
- .paletteNum = 15,
- .baseBlock = 818
- },
- {
- .bg = 1,
- .tilemapLeft = 7,
- .tilemapTop = 13,
- .width = 12,
- .height = 2,
- .paletteNum = 15,
- .baseBlock = 842
- },
- DUMMY_WIN_TEMPLATE,
-};
-
-static const struct OamData sUnknown_0858D8C0 =
-{
- .y = 0,
- .affineMode = ST_OAM_AFFINE_OFF,
- .objMode = ST_OAM_OBJ_NORMAL,
- .mosaic = 0,
- .bpp = ST_OAM_4BPP,
- .shape = SPRITE_SHAPE(16x16),
- .x = 0,
- .matrixNum = 0,
- .size = SPRITE_SIZE(16x16),
- .tileNum = 0,
- .priority = 0,
- .paletteNum = 0,
- .affineParam = 0,
-};
-
-
-static const struct SpriteTemplate sSpriteTemplate_858D8C8 =
-{
- .tileTag = 22222,
- .paletteTag = 0,
- .oam = &sUnknown_0858D8C0,
- .anims = gDummySpriteAnimTable,
- .images = NULL,
- .affineAnims = gDummySpriteAffineAnimTable,
- .callback = SpriteCallbackDummy
-};
-
-static const struct SpriteSheet sUnknown_0858D8E0 =
-{
- .data = gMiscBlank_Gfx,
- .size = 0x200,
- .tag = 22222
-};
-
-static const u8 sContestLinkTextColors[4] = {TEXT_COLOR_WHITE, TEXT_DYNAMIC_COLOR_6, TEXT_DYNAMIC_COLOR_5};
-
-
-void sub_80F57C4(void)
-{
- int i;
-
- SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_OBJ_1D_MAP);
- ResetBgsAndClearDma3BusyFlags(0);
- InitBgsFromTemplates(0, sUnknown_0858D888, ARRAY_COUNT(sUnknown_0858D888));
- for (i = 0; i < 4; i++)
- SetBgTilemapBuffer(i, gUnknown_0203A034->unkC[i]);
-
- InitWindows(sUnknown_0858D898);
- DeactivateAllTextPrinters();
- SetGpuReg(REG_OFFSET_MOSAIC, 0);
- SetGpuReg(REG_OFFSET_WININ, WININ_WIN0_BG_ALL | WININ_WIN0_OBJ | WININ_WIN0_CLR | WININ_WIN1_BG_ALL | WININ_WIN1_OBJ | WININ_WIN1_CLR);
- SetGpuReg(REG_OFFSET_WINOUT, WINOUT_WIN01_BG1 | WINOUT_WIN01_BG2 | WINOUT_WIN01_BG3 | WINOUT_WIN01_CLR | WINOUT_WINOBJ_BG_ALL | WINOUT_WINOBJ_OBJ | WINOUT_WINOBJ_CLR);
- SetGpuReg(REG_OFFSET_WIN0H, 0);
- SetGpuReg(REG_OFFSET_WIN0V, 0);
- SetGpuReg(REG_OFFSET_WIN1H, 0);
- SetGpuReg(REG_OFFSET_WIN1V, 0);
- SetGpuReg(REG_OFFSET_BLDCNT, 0);
- SetGpuReg(REG_OFFSET_BLDALPHA, 0);
- SetGpuReg(REG_OFFSET_BLDY, 0);
- SetGpuReg(REG_OFFSET_BG0HOFS, 0);
- SetGpuReg(REG_OFFSET_BG0VOFS, 0);
- SetGpuReg(REG_OFFSET_BG1HOFS, 0);
- SetGpuReg(REG_OFFSET_BG1VOFS, 0);
- SetGpuReg(REG_OFFSET_BG2HOFS, 0);
- SetGpuReg(REG_OFFSET_BG2VOFS, 0);
- SetGpuReg(REG_OFFSET_BG3HOFS, 0);
- SetGpuReg(REG_OFFSET_BG3VOFS, 0);
- SetGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_BG_ALL_ON | DISPCNT_OBJ_ON | DISPCNT_WIN0_ON | DISPCNT_WIN1_ON | DISPCNT_OBJWIN_ON);
- gBattle_BG0_X = 0;
- gBattle_BG0_Y = 0;
- gBattle_BG1_X = 0;
- gBattle_BG1_Y = 0;
- gBattle_BG2_X = 0;
- gBattle_BG2_Y = 0;
- gBattle_BG3_X = 0;
- gBattle_BG3_Y = 0;
- gBattle_WIN0H = 0;
- gBattle_WIN0V = 0;
- gBattle_WIN1H = 0;
- gBattle_WIN1V = 0;
-}
-
-void sub_80F591C(void)
-{
- int i, j;
- s8 var0, var1;
- u16 tile1, tile2;
-
- LZDecompressVram(gUnknown_08C19588, (void *)BG_CHAR_ADDR(0));
- CopyToBgTilemapBuffer(3, gUnknown_08C1A12C, 0, 0);
- CopyToBgTilemapBuffer(2, gUnknown_08C1A000, 0, 0);
- CopyToBgTilemapBuffer(0, gUnknown_08C19EEC, 0, 0);
- sub_80F71C8();
- LoadCompressedPalette(gUnknown_08C1A2B4, 0, 0x200);
- LoadPalette(sUnknown_0858D6B0, 0xF0, 0x20);
-
- for (i = 0; i < 4; i++)
- {
- var0 = sub_80F7310(i, 1);
- var1 = sub_80F7364(i, 1);
- for (j = 0; j < 10; j++)
- {
- tile1 = 0x60B2;
- if (j < var0)
- tile1 += 2;
-
- if (j < abs(var1))
- {
- tile2 = 0x60A4;
- if (var1 < 0)
- tile2 += 2;
- }
- else
- {
- tile2 = 0x60A2;
- }
-
- FillBgTilemapBufferRect_Palette0(1, tile1, j + 19, i * 3 + 5, 1, 1);
- FillBgTilemapBufferRect_Palette0(1, tile2, j + 19, i * 3 + 6, 1, 1);
- }
- }
-
- CopyBgTilemapBufferToVram(0);
- CopyBgTilemapBufferToVram(1);
- CopyBgTilemapBufferToVram(2);
- CopyBgTilemapBufferToVram(3);
- ShowBg(0);
- ShowBg(1);
- ShowBg(2);
- ShowBg(3);
-}
-
-static void sub_80F5A74(u8 monIndex)
-{
- struct ContestPokemon *mon = &gContestMons[monIndex];
- u8 *str = gDisplayedStringBattle;
- if (monIndex == gContestPlayerMonIndex)
- str = StringCopy(gDisplayedStringBattle, gText_ColorDarkGrey);
-
- StringCopy(str, mon->nickname);
- sub_80F7ED0(monIndex, gDisplayedStringBattle, 0);
- StringCopy(str, gText_Slash);
- StringAppend(str, mon->trainerName);
- sub_80F7ED0(monIndex, gDisplayedStringBattle, 50);
-}
-
-void sub_80F5AE0(void)
-{
- int i;
-
- for (i = 0; i < CONTESTANT_COUNT; i++)
- sub_80F5A74(i);
-
- CopyBgTilemapBufferToVram(1);
-}
-
-void sub_80F5B00(void)
-{
- gPaletteFade.bufferTransferDisabled = 1;
- SetVBlankCallback(NULL);
- sub_80F7DF4();
- sub_80F57C4();
- ScanlineEffect_Clear();
- ResetPaletteFade();
- ResetSpriteData();
- ResetTasks();
- FreeAllSpritePalettes();
- sub_80F591C();
- sub_80F6A9C();
- LoadAllContestMonIcons(0, 1);
- sub_80F5AE0();
- memset(gUnknown_0203A034->unk0, 0, sizeof(*gUnknown_0203A034->unk0));
- memset(gUnknown_0203A034->unk4, 0, sizeof(*gUnknown_0203A034->unk4));
- sub_80F6DC0();
- sub_80F6AE8();
- BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, RGB_BLACK);
- gPaletteFade.bufferTransferDisabled = 0;
- gUnknown_0203A034->unk0->taskId = CreateTask(sub_80F5CE4, 5);
- SetMainCallback2(sub_80F5C00);
- gBattle_WIN1H = 0x00F0;
- gBattle_WIN1V = 0x80A0;
- CreateTask(sub_80F68B4, 20);
- sub_80F7880();
- if (gLinkContestFlags & LINK_CONTEST_FLAG_IS_WIRELESS)
- gPaletteFade.bufferTransferDisabled = 1;
- else
- PlayBGM(MUS_CON_K);
-
- SetVBlankCallback(sub_80F5C24);
-}
-
-static void sub_80F5C00(void)
-{
- AnimateSprites();
- BuildOamBuffer();
- RunTasks();
- UpdatePaletteFade();
- CopyBgTilemapBufferToVram(1);
- CopyBgTilemapBufferToVram(2);
-}
-
-static void sub_80F5C24(void)
-{
- SetGpuReg(REG_OFFSET_BG0HOFS, gBattle_BG0_X);
- SetGpuReg(REG_OFFSET_BG0VOFS, gBattle_BG0_Y);
- SetGpuReg(REG_OFFSET_BG1HOFS, gBattle_BG1_X);
- SetGpuReg(REG_OFFSET_BG1VOFS, gBattle_BG1_Y);
- SetGpuReg(REG_OFFSET_BG2HOFS, gBattle_BG2_X);
- SetGpuReg(REG_OFFSET_BG2VOFS, gBattle_BG2_Y);
- SetGpuReg(REG_OFFSET_BG3HOFS, gBattle_BG3_X);
- SetGpuReg(REG_OFFSET_BG3VOFS, gBattle_BG3_Y);
- SetGpuReg(REG_OFFSET_WIN0H, gBattle_WIN0H);
- SetGpuReg(REG_OFFSET_WIN0V, gBattle_WIN0V);
- SetGpuReg(REG_OFFSET_WIN1H, gBattle_WIN1H);
- SetGpuReg(REG_OFFSET_WIN1V, gBattle_WIN1V);
- LoadOam();
- ProcessSpriteCopyRequests();
- TransferPlttBuffer();
- ScanlineEffect_InitHBlankDmaTransfer();
-}
-
-static void sub_80F5CE4(u8 taskId)
-{
- u16 var;
-
- if (gLinkContestFlags & LINK_CONTEST_FLAG_IS_LINK)
- {
- switch (gTasks[taskId].data[0])
- {
- case 0:
- SaveLinkContestResults();
- if (gContestFinalStandings[gContestPlayerMonIndex] == 0)
- {
- IncrementGameStat(GAME_STAT_WON_LINK_CONTEST);
- gSpecialVar_0x8005 = 8;
- InterviewBefore();
- if (gSpecialVar_Result != 1)
- InterviewAfter();
- }
-
- TryGainNewFanFromCounter(2);
- sub_80DEDA8(gSpecialVar_ContestRank);
- sub_80DEDA8(0xFE);
- gUnknown_02039F5C = 1;
- gUnknown_02039F5D = sub_80DEFA8(0xFE, 0);
- var = VarGet(VAR_CONTEST_HALL_STATE);
- VarSet(VAR_CONTEST_HALL_STATE, 0);
- SetContinueGameWarpStatusToDynamicWarp();
- TrySavingData(SAVE_LINK);
- ClearContinueGameWarpStatus2();
- VarSet(VAR_CONTEST_HALL_STATE, var);
- gTasks[taskId].data[0]++;
- break;
- case 1:
- gTasks[taskId].data[0]++;
- if (!(gLinkContestFlags & LINK_CONTEST_FLAG_IS_WIRELESS))
- gTasks[taskId].data[0] = 100;
- break;
- case 2:
- if (IsLinkTaskFinished())
- {
- sub_800ADF8();
- gTasks[taskId].data[0]++;
- }
- return;
- case 3:
- if (IsLinkTaskFinished() == TRUE)
- {
- PlayBGM(MUS_CON_K);
- gPaletteFade.bufferTransferDisabled = 0;
- gTasks[taskId].data[0]++;
- break;
- }
- return;
- }
- }
-
- if (!gPaletteFade.active)
- {
- gTasks[taskId].data[0] = 0;
- if (gLinkContestFlags & LINK_CONTEST_FLAG_IS_LINK)
- {
- sub_80F707C(gText_CommunicationStandby);
- gTasks[taskId].func = sub_80F5ED8;
- }
- else
- {
- IncrementGameStat(GAME_STAT_ENTERED_CONTEST);
- if (gContestFinalStandings[gContestPlayerMonIndex] == 0)
- IncrementGameStat(GAME_STAT_WON_CONTEST);
-
- sub_80DEDA8(gSpecialVar_ContestRank);
- sub_80DEDA8(0xFE);
- gUnknown_02039F5C = 1;
- gUnknown_02039F5D = sub_80DEFA8(0xFE, 0);
- TryGainNewFanFromCounter(2);
- gTasks[taskId].func = sub_80F5F74;
- }
- }
-}
-
-static void sub_80F5ED8(u8 taskId)
-{
- if (gReceivedRemoteLinkPlayers)
- {
- CreateTask(sub_80F5F14, 0);
- gTasks[taskId].func = TaskDummy;
- }
-}
-
-static void sub_80F5F14(u8 taskId)
-{
- SetTaskFuncWithFollowupFunc(taskId, sub_80FC998, sub_80F5F30);
-}
-
-static void sub_80F5F30(u8 taskId)
-{
- if (IsLinkTaskFinished())
- {
- DestroyTask(taskId);
- gTasks[gUnknown_0203A034->unk0->taskId].func = sub_80F5F74;
- sub_80F7144();
- }
-}
-
-static void sub_80F5F74(u8 taskId)
-{
- s16 var0;
-
- if (gTasks[taskId].data[0] == 0)
- {
- CreateTask(sub_80F68F0, 20);
- var0 = sub_80F6B78(gText_AnnouncingResults, gUnknown_0203A034->unk0->unk0);
- sub_80F6E9C(var0, 144, 120, 1088);
- gTasks[taskId].data[0]++;
- }
- else if (gTasks[taskId].data[0] == 1)
- {
- if (gUnknown_0203A034->unk0->unk4 == 0)
- {
- gTasks[taskId].data[1] = 0;
- gTasks[taskId].data[0]++;
- }
- }
- else if (gTasks[taskId].data[0] == 2)
- {
- if (++gTasks[taskId].data[1] == 21)
- {
- gTasks[taskId].data[1] = 0;
- gTasks[taskId].data[0]++;
- }
- }
- else if (gTasks[taskId].data[0] == 3)
- {
- var0 = sub_80F6B78(gText_PreliminaryResults, gUnknown_0203A034->unk0->unk0);
- sub_80F6E9C(var0, 144, -1, 1088);
- gTasks[taskId].data[0]++;
- }
- else if (gTasks[taskId].data[0] == 4)
- {
- if (gUnknown_0203A034->unk0->unk4 == 2)
- {
- gTasks[taskId].data[0] = 0;
- gTasks[taskId].func = sub_80F6058;
- }
- }
-}
-
-static void sub_80F6058(u8 taskId)
-{
- switch (gTasks[taskId].data[0])
- {
- case 0:
- if (!gUnknown_0203A034->unk0->unkA)
- {
- sub_80F7A80(0, gTasks[taskId].data[2]++);
- if (!gUnknown_0203A034->unk0->unk14)
- gTasks[taskId].data[0] = 2;
- else
- gTasks[taskId].data[0]++;
- }
- break;
- case 1:
- if (!gUnknown_0203A034->unk0->unk14)
- gTasks[taskId].data[0] = 0;
- break;
- case 2:
- sub_80F6EF4(1088);
- gTasks[taskId].data[0] = 0;
- gTasks[taskId].data[2] = 0;
- gTasks[taskId].func = sub_80F60F0;
- break;
- }
-}
-
-static void sub_80F60F0(u8 taskId)
-{
- s16 var0;
-
- if (gUnknown_0203A034->unk0->unk4 == 0)
- {
- if (++gTasks[taskId].data[1] == 21)
- {
- gTasks[taskId].data[1] = 0;
- var0 = sub_80F6B78(gText_Round2Results, gUnknown_0203A034->unk0->unk0);
- sub_80F6E9C(var0, 144, -1, 1088);
- }
- }
- else if (gUnknown_0203A034->unk0->unk4 == 2)
- {
- gTasks[taskId].func = sub_80F616C;
- }
-}
-
-static void sub_80F616C(u8 taskId)
-{
- switch (gTasks[taskId].data[0])
- {
- case 0:
- if (!gUnknown_0203A034->unk0->unkA)
- {
- sub_80F7A80(1, gTasks[taskId].data[2]++);
- if (!gUnknown_0203A034->unk0->unk14)
- gTasks[taskId].data[0] = 2;
- else
- gTasks[taskId].data[0]++;
- }
- break;
- case 1:
- if (!gUnknown_0203A034->unk0->unk14)
- gTasks[taskId].data[0] = 0;
- break;
- case 2:
- sub_80F6EF4(1088);
- gTasks[taskId].data[0] = 0;
- gTasks[taskId].func = sub_80F6204;
- break;
- }
-}
-
-static void sub_80F6204(u8 taskId)
-{
- int i;
- u8 newTaskId;
- u8 buffer[100];
- s16 var0;
-
- switch (gTasks[taskId].data[0])
- {
- case 0:
- if (!gUnknown_0203A034->unk0->unk4)
- gTasks[taskId].data[0]++;
- break;
- case 1:
- if (++gTasks[taskId].data[1] == 31)
- {
- gTasks[taskId].data[1] = 0;
- gTasks[taskId].data[0]++;
- }
- break;
- case 2:
- for (i = 0; i < CONTESTANT_COUNT; i++)
- {
- newTaskId = CreateTask(sub_80F73DC, 10);
- gTasks[newTaskId].data[0] = gContestFinalStandings[i];
- gTasks[newTaskId].data[1] = i;
- }
- gTasks[taskId].data[0]++;
- break;
- case 3:
- if (gUnknown_0203A034->unk0->unk5 == 4)
- {
- if (++gTasks[taskId].data[1] == 31)
- {
- gTasks[taskId].data[1] = 0;
- CreateTask(sub_80F74BC, 10);
- gTasks[taskId].data[0]++;
- for (i = 0; i < CONTESTANT_COUNT && gContestFinalStandings[i] != 0; i++)
- ;
-
- sub_80F77E0(i, 14);
- }
- }
- break;
- case 4:
- if (++gTasks[taskId].data[1] == 21)
- {
- gTasks[taskId].data[1] = 0;
- for (i = 0; i < CONTESTANT_COUNT && gContestFinalStandings[i] != 0; i++)
- ;
-
- StringCopy(gStringVar1, gContestMons[i].trainerName);
- sub_81DB5AC(gStringVar1);
- StringCopy(gStringVar2, gContestMons[i].nickname);
- StringExpandPlaceholders(buffer, gText_Var1sVar2Won);
- var0 = sub_80F6B78(buffer, gUnknown_0203A034->unk0->unk0);
- sub_80F6E9C(var0, 144, -1, 1088);
- gTasks[taskId].data[0]++;
- }
- break;
- case 5:
- gTasks[taskId].data[0] = 0;
- gTasks[taskId].func = sub_80F6404;
- break;
- }
-}
-
-static void sub_80F6404(u8 taskId)
-{
- int i;
- u8 spriteId;
- u16 species;
- u32 otId;
- u32 personality;
- const struct CompressedSpritePalette *pokePal;
-
- switch (gTasks[taskId].data[0])
- {
- case 0:
- gBattle_WIN0H = 0x00F0;
- gBattle_WIN0V = 0x5050;
- for (i = 0; i < CONTESTANT_COUNT && gContestFinalStandings[i] != 0; i++)
- ;
-
- species = gContestMons[i].species;
- personality = gContestMons[i].personality;
- otId = gContestMons[i].otId;
- if (i == gContestPlayerMonIndex)
- {
- HandleLoadSpecialPokePic_2(
- &gMonFrontPicTable[species],
- gMonSpritesGfxPtr->sprites[1],
- species,
- personality);
- }
- else
- {
- HandleLoadSpecialPokePic_DontHandleDeoxys(
- &gMonFrontPicTable[species],
- gMonSpritesGfxPtr->sprites[1],
- species,
- personality);
- }
-
- pokePal = GetMonSpritePalStructFromOtIdPersonality(species, otId, personality);
- LoadCompressedSpritePalette(pokePal);
- SetMultiuseSpriteTemplateToPokemon(species, B_POSITION_OPPONENT_LEFT);
- gMultiuseSpriteTemplate.paletteTag = pokePal->tag;
- spriteId = CreateSprite(&gMultiuseSpriteTemplate, 272, 80, 10);
- gSprites[spriteId].data[1] = species;
- gSprites[spriteId].oam.priority = 0;
- gSprites[spriteId].callback = sub_80F75A8;
- gUnknown_0203A034->unk0->spriteId = spriteId;
- LoadCompressedSpriteSheet(&sUnknown_0858D878);
- LoadCompressedSpritePalette(&sUnknown_0858D880);
- CreateTask(sub_80F7670, 10);
- gTasks[taskId].data[0]++;
- break;
- case 1:
- if (++gTasks[taskId].data[3] == 1)
- {
- u8 counter;
- gTasks[taskId].data[3] = 0;
- gTasks[taskId].data[2] += 2;
- if (gTasks[taskId].data[2] > 32)
- gTasks[taskId].data[2] = 32;
-
- counter = gTasks[taskId].data[2];
- gBattle_WIN0V = ((80 - counter) << 8) | (80 + counter);
- if (counter == 32)
- gTasks[taskId].data[0]++;
- }
- break;
- case 2:
- if (gUnknown_0203A034->unk0->unk6 == 1)
- gTasks[taskId].data[0]++;
- break;
- case 3:
- if (++gTasks[taskId].data[1] == 121)
- {
- gTasks[taskId].data[1] = 0;
- gSprites[gUnknown_0203A034->unk0->spriteId].callback = sub_80F7620;
- gTasks[taskId].data[0]++;
- }
- break;
- case 4:
- if (gUnknown_0203A034->unk0->unk6 == 2)
- {
- u8 top = (gBattle_WIN0V >> 8);
- top += 2;
- if (top > 80)
- top = 80;
-
- gBattle_WIN0V = (top << 8) | (160 - top);
- if (top == 80)
- gTasks[taskId].data[0]++;
- }
- break;
- case 5:
- if (gUnknown_0203A034->unk0->unk6 == 2)
- {
- gUnknown_0203A034->unk0->unk9 = 1;
- gTasks[taskId].data[0] = 0;
- gTasks[taskId].func = sub_80F66B4;
- }
- break;
- }
-}
-
-static void sub_80F66B4(u8 taskId)
-{
- int i, nationalDexNum;
-
- if (gMain.newKeys & A_BUTTON)
- {
- if (!(gLinkContestFlags & LINK_CONTEST_FLAG_IS_LINK))
- {
- for (i = 0; i < CONTESTANT_COUNT; i++)
- {
- nationalDexNum = SpeciesToNationalPokedexNum(gContestMons[i].species);
- GetSetPokedexFlag(nationalDexNum, FLAG_SET_SEEN);
- }
- }
-
- gTasks[taskId].data[10] = 0;
- gTasks[taskId].func = sub_80F671C;
- }
-}
-
-static void sub_80F671C(u8 taskId)
-{
- if (gLinkContestFlags & LINK_CONTEST_FLAG_IS_LINK)
- {
- if (!gTasks[taskId].data[10])
- {
- sub_80F707C(gText_CommunicationStandby);
- sub_800AC34();
- gTasks[taskId].func = sub_80F677C;
- }
- }
- else
- {
- gTasks[taskId].func = sub_80F67C4;
- }
-}
-
-static void sub_80F677C(u8 taskId)
-{
- if (!gReceivedRemoteLinkPlayers)
- {
- if (gLinkContestFlags & LINK_CONTEST_FLAG_IS_WIRELESS)
- DestroyWirelessStatusIndicatorSprite();
-
- sub_80F7144();
- gTasks[taskId].func = sub_80F67C4;
- }
-}
-
-static void sub_80F67C4(u8 taskId)
-{
- if (!(gLinkContestFlags & LINK_CONTEST_FLAG_IS_LINK))
- BravoTrainerPokemonProfile_BeforeInterview2(gContestFinalStandings[gContestPlayerMonIndex]);
-
- BeginHardwarePaletteFade(0xFF, 0, 0, 16, 0);
- gTasks[taskId].func = sub_80F6820;
-}
-
-static void sub_80F6820(u8 taskId)
-{
- if (!gPaletteFade.active)
- {
- if (gTasks[taskId].data[1] == 0)
- {
- DestroyTask(gUnknown_0203A034->unk0->unk3);
- BlendPalettes(0x0000FFFF, 16, RGB_BLACK);
- gTasks[taskId].data[1]++;
- }
- else if (gTasks[taskId].data[1] == 1)
- {
- BlendPalettes(0xFFFF0000, 16, RGB_BLACK);
- gTasks[taskId].data[1]++;
- }
- else
- {
- SetGpuReg(REG_OFFSET_BLDCNT, 0);
- SetGpuReg(REG_OFFSET_BLDY, 0);
- DestroyTask(taskId);
- FreeAllWindowBuffers();
- SetMainCallback2(CB2_ReturnToFieldContinueScriptPlayMapMusic);
- sub_80F7E64();
- }
- }
-}
-
-static void sub_80F68B4(u8 taskId)
-{
- gBattle_BG3_X += 2;
- gBattle_BG3_Y += 1;
- if (gBattle_BG3_X > 255)
- gBattle_BG3_X -= 255;
- if (gBattle_BG3_Y > 255)
- gBattle_BG3_Y -= 255;
-}
-
-static void sub_80F68F0(u8 taskId)
-{
- if (++gTasks[taskId].data[0] == 2)
- {
- gTasks[taskId].data[0] = 0;
- if (gTasks[taskId].data[2] == 0)
- gTasks[taskId].data[1]++;
- else
- gTasks[taskId].data[1]--;
-
- if (gTasks[taskId].data[1] == 16)
- gTasks[taskId].data[2] = 1;
- else if (gTasks[taskId].data[1] == 0)
- gTasks[taskId].data[2] = 0;
-
- BlendPalette(0x6B, 1, gTasks[taskId].data[1], RGB(30, 22, 11));
- BlendPalette(0x68, 1, gTasks[taskId].data[1], RGB_WHITE);
- BlendPalette(0x6E, 1, gTasks[taskId].data[1], RGB(30, 29, 29));
- }
-
- if (gTasks[taskId].data[1] == 0)
- gUnknown_0203A034->unk0->unkA = 0;
- else
- gUnknown_0203A034->unk0->unkA = 1;
-}
-
-void sub_80F69B8(u16 species, u8 monIndex, u8 srcOffset, u8 useDmaNow, u32 personality)
-{
- const u8 *iconPtr;
- u16 var0, var1, frameNum;
-
- if (monIndex == gContestPlayerMonIndex)
- frameNum = 1;
- else
- frameNum = 0;
-
- iconPtr = GetMonIconPtr(species, personality, frameNum);
- iconPtr += srcOffset * 0x200 + 0x80;
- if (useDmaNow)
- {
- RequestDma3Copy(iconPtr, (void *)BG_CHAR_ADDR(1) + monIndex * 0x200, 0x180, 1);
- var0 = ((monIndex + 10) << 12);
- var1 = (monIndex * 0x10 + 0x200);
- WriteSequenceToBgTilemapBuffer(1, var1 | var0, 3, monIndex * 3 + 4, 4, 3, 17, 1);
- }
- else
- {
- RequestDma3Copy(iconPtr, (void *)BG_CHAR_ADDR(1) + monIndex * 0x200, 0x180, 1);
- }
-}
-
-static void LoadAllContestMonIcons(u8 srcOffset, u8 useDmaNow)
-{
- int i;
-
- for (i = 0; i < CONTESTANT_COUNT; i++)
- sub_80F69B8(gContestMons[i].species, i, srcOffset, useDmaNow, gContestMons[i].personality);
-}
-
-static void sub_80F6A9C(void)
-{
- int i, species;
-
- for (i = 0; i < CONTESTANT_COUNT; i++)
- {
- species = gContestMons[i].species;
- LoadPalette(gMonIconPalettes[gMonIconPaletteIndices[GetIconSpecies(species, 0)]], i * 0x10 + 0xA0, 0x20);
- }
-}
-
-static void sub_80F6AE8(void)
-{
- u16 sheet;
- u8 spriteId;
-
- if (gLinkContestFlags & LINK_CONTEST_FLAG_IS_WIRELESS)
- {
- LoadWirelessStatusIndicatorSpriteGfx();
- CreateWirelessStatusIndicatorSprite(8, 8);
- gSprites[gWirelessStatusIndicatorSpriteId].subpriority = 1;
- sheet = LoadSpriteSheet(&sUnknown_0858D8E0);
- RequestDma3Fill(0xFFFFFFFF, (void *)BG_CHAR_ADDR(4) + sheet * 0x20, 0x80, 1);
- spriteId = CreateSprite(&sSpriteTemplate_858D8C8, 8, 8, 0);
- gSprites[spriteId].oam.objMode = ST_OAM_OBJ_WINDOW;
- }
-}
-
-// Functionally equivalent, the same except compiler generated variables from
-// src are placed on different stack positions.
-
-#ifdef NONMATCHING
-s32 sub_80F6B78(const u8 *text, u8 spriteId)
-{
- u8 *windowTilesPtr;
- u16 windowId;
- int origWidth;
- struct WindowTemplate windowTemplate;
- int strWidth;
- u8 *spriteTilePtrs[4];
- u8 *dst;
- int i;
- struct Sprite *sprite;
- const u8 *src; // The culprit.
-
- memset(&windowTemplate, 0, sizeof(windowTemplate));
- windowTemplate.width = 30;
- windowTemplate.height = 2;
- windowId = AddWindow(&windowTemplate);
- FillWindowPixelBuffer(windowId, PIXEL_FILL(1));
-
- origWidth = GetStringWidth(1, text, 0);
- strWidth = (origWidth + 9) / 8;
- if (strWidth > 30)
- strWidth = 30;
-
- AddTextPrinterParameterized3(windowId, 1, (strWidth * 8 - origWidth) / 2, 1, sContestLinkTextColors, -1, text);
- windowTilesPtr = (u8 *)(GetWindowAttribute(windowId, WINDOW_TILE_DATA));
- src = (u8 *)(sUnknown_0858D6D0);
-
- sprite = &gSprites[spriteId];
- spriteTilePtrs[0] = (u8 *)(sprite->oam.tileNum * 32 + VRAM + 0x10000);
-
- for (i = 1; i < 4; i++)
- spriteTilePtrs[i] = (void*)(gSprites[sprite->data[i - 1]].oam.tileNum * 32 + VRAM + 0x10000);
-
- for (i = 0; i < 4; i++)
- CpuFill32(0, spriteTilePtrs[i], 0x400);
-
- dst = spriteTilePtrs[0];
- CpuCopy32(src, dst, 0x20);
- CpuCopy32(src + 128, dst + 0x100, 0x20);
- CpuCopy32(src + 128, dst + 0x200, 0x20);
- CpuCopy32(src + 64, dst + 0x300, 0x20);
-
- for (i = 0; i < strWidth; i++)
- {
- dst = &spriteTilePtrs[(i + 1) / 8][((i + 1) % 8) * 32];
- CpuCopy32(src + 192, dst, 0x20);
- CpuCopy32(windowTilesPtr, dst + 0x100, 0x20);
- CpuCopy32(windowTilesPtr + 960, dst + 0x200, 0x20);
- CpuCopy32(src + 224, dst + 0x300, 0x20);
- windowTilesPtr += 0x20;
- }
-
- dst = &spriteTilePtrs[(i + 1) / 8][((i + 1) % 8) * 32];
- CpuCopy32(src + 32, dst, 0x20);
- CpuCopy32(src + 160, dst + 0x100, 0x20);
- CpuCopy32(src + 160, dst + 0x200, 0x20);
- CpuCopy32(src + 96, dst + 0x300, 0x20);
- RemoveWindow(windowId);
-
- return (240 - (strWidth + 2) * 8) / 2;
-}
-
-#else
-NAKED
-s32 sub_80F6B78(const u8 *text, u8 spriteId)
-{
- asm_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, 0x44\n\
- adds r5, r0, 0\n\
- lsls r1, 24\n\
- lsrs r7, r1, 24\n\
- add r4, sp, 0x20\n\
- adds r0, r4, 0\n\
- movs r1, 0\n\
- movs r2, 0x8\n\
- bl memset\n\
- movs r0, 0x1E\n\
- strb r0, [r4, 0x3]\n\
- movs r0, 0x2\n\
- strb r0, [r4, 0x4]\n\
- adds r0, r4, 0\n\
- bl AddWindow\n\
- lsls r6, r0, 24\n\
- lsrs r4, r6, 24\n\
- adds r0, r4, 0\n\
- movs r1, 0x11\n\
- bl FillWindowPixelBuffer\n\
- movs r0, 0x1\n\
- adds r1, r5, 0\n\
- movs r2, 0\n\
- bl GetStringWidth\n\
- adds r2, r0, 0\n\
- adds r2, 0x9\n\
- cmp r2, 0\n\
- bge _080F6BC4\n\
- adds r2, 0x7\n\
-_080F6BC4:\n\
- asrs r2, 3\n\
- mov r10, r2\n\
- cmp r2, 0x1E\n\
- ble _080F6BD0\n\
- movs r1, 0x1E\n\
- mov r10, r1\n\
-_080F6BD0:\n\
- mov r1, r10\n\
- lsls r2, r1, 3\n\
- subs r2, r0\n\
- lsrs r0, r2, 31\n\
- adds r2, r0\n\
- asrs r2, 1\n\
- lsls r2, 24\n\
- lsrs r2, 24\n\
- ldr r0, =sContestLinkTextColors\n\
- str r0, [sp]\n\
- movs r0, 0x1\n\
- negs r0, r0\n\
- str r0, [sp, 0x4]\n\
- str r5, [sp, 0x8]\n\
- adds r0, r4, 0\n\
- movs r1, 0x1\n\
- movs r3, 0x1\n\
- bl AddTextPrinterParameterized3\n\
- adds r0, r4, 0\n\
- movs r1, 0x7\n\
- bl GetWindowAttribute\n\
- mov r9, r0\n\
- ldr r2, =sUnknown_0858D6D0\n\
- mov r8, r2\n\
- lsls r1, r7, 4\n\
- adds r1, r7\n\
- lsls r1, 2\n\
- ldr r3, =gSprites\n\
- adds r1, r3\n\
- ldrh r0, [r1, 0x4]\n\
- lsls r0, 22\n\
- lsrs r0, 17\n\
- ldr r2, =0x06010000\n\
- adds r0, r2\n\
- str r0, [sp, 0xC]\n\
- str r6, [sp, 0x38]\n\
- mov r7, sp\n\
- adds r7, 0x1C\n\
- str r7, [sp, 0x2C]\n\
- mov r0, r10\n\
- adds r0, 0x2\n\
- str r0, [sp, 0x30]\n\
- movs r5, 0\n\
- add r7, sp, 0x10\n\
- mov r12, r7\n\
- adds r6, r1, 0\n\
- adds r6, 0x2E\n\
- movs r4, 0x2\n\
-_080F6C34:\n\
- adds r0, r6, r5\n\
- movs r7, 0\n\
- ldrsh r1, [r0, r7]\n\
- lsls r0, r1, 4\n\
- adds r0, r1\n\
- lsls r0, 2\n\
- adds r0, r3\n\
- ldrh r0, [r0, 0x4]\n\
- lsls r0, 22\n\
- lsrs r0, 17\n\
- adds r0, r2\n\
- mov r1, r12\n\
- adds r1, 0x4\n\
- mov r12, r1\n\
- subs r1, 0x4\n\
- stm r1!, {r0}\n\
- adds r5, 0x2\n\
- subs r4, 0x1\n\
- cmp r4, 0\n\
- bge _080F6C34\n\
- mov r7, r8\n\
- adds r7, 0x80\n\
- mov r2, r8\n\
- adds r2, 0x40\n\
- str r2, [sp, 0x28]\n\
- mov r0, r8\n\
- adds r0, 0x20\n\
- str r0, [sp, 0x3C]\n\
- mov r1, r8\n\
- adds r1, 0xA0\n\
- str r1, [sp, 0x40]\n\
- adds r2, 0x20\n\
- str r2, [sp, 0x34]\n\
- add r5, sp, 0xC\n\
- movs r6, 0\n\
- movs r4, 0x3\n\
-_080F6C7C:\n\
- str r6, [sp, 0x1C]\n\
- ldm r5!, {r1}\n\
- ldr r0, [sp, 0x2C]\n\
- ldr r2, =0x05000100\n\
- bl CpuSet\n\
- subs r4, 0x1\n\
- cmp r4, 0\n\
- bge _080F6C7C\n\
- ldr r5, [sp, 0xC]\n\
- ldr r6, =0x04000008\n\
- mov r0, r8\n\
- adds r1, r5, 0\n\
- adds r2, r6, 0\n\
- bl CpuSet\n\
- movs r0, 0x80\n\
- lsls r0, 1\n\
- adds r1, r5, r0\n\
- adds r0, r7, 0\n\
- adds r2, r6, 0\n\
- bl CpuSet\n\
- movs r2, 0x80\n\
- lsls r2, 2\n\
- adds r1, r5, r2\n\
- adds r0, r7, 0\n\
- adds r2, r6, 0\n\
- bl CpuSet\n\
- movs r7, 0xC0\n\
- lsls r7, 2\n\
- adds r1, r5, r7\n\
- ldr r0, [sp, 0x28]\n\
- adds r2, r6, 0\n\
- bl CpuSet\n\
- movs r4, 0\n\
- cmp r4, r10\n\
- bge _080F6D32\n\
- adds r7, r6, 0\n\
-_080F6CCE:\n\
- adds r6, r4, 0x1\n\
- adds r0, r6, 0\n\
- cmp r6, 0\n\
- bge _080F6CDA\n\
- adds r0, r4, 0\n\
- adds r0, 0x8\n\
-_080F6CDA:\n\
- asrs r0, 3\n\
- lsls r1, r0, 2\n\
- add r1, sp\n\
- adds r1, 0xC\n\
- lsls r0, 3\n\
- subs r0, r6, r0\n\
- lsls r0, 5\n\
- ldr r1, [r1]\n\
- adds r5, r1, r0\n\
- mov r0, r8\n\
- adds r0, 0xC0\n\
- adds r1, r5, 0\n\
- adds r2, r7, 0\n\
- bl CpuSet\n\
- movs r0, 0x80\n\
- lsls r0, 1\n\
- adds r1, r5, r0\n\
- mov r0, r9\n\
- adds r2, r7, 0\n\
- bl CpuSet\n\
- movs r0, 0xF0\n\
- lsls r0, 2\n\
- add r0, r9\n\
- movs r2, 0x80\n\
- lsls r2, 2\n\
- adds r1, r5, r2\n\
- adds r2, r7, 0\n\
- bl CpuSet\n\
- movs r0, 0xC0\n\
- lsls r0, 2\n\
- adds r1, r5, r0\n\
- mov r0, r8\n\
- adds r0, 0xE0\n\
- adds r2, r7, 0\n\
- bl CpuSet\n\
- movs r1, 0x20\n\
- add r9, r1\n\
- adds r4, r6, 0\n\
- cmp r4, r10\n\
- blt _080F6CCE\n\
-_080F6D32:\n\
- adds r2, r4, 0x1\n\
- adds r0, r2, 0\n\
- cmp r2, 0\n\
- bge _080F6D3E\n\
- adds r0, r4, 0\n\
- adds r0, 0x8\n\
-_080F6D3E:\n\
- asrs r0, 3\n\
- lsls r1, r0, 2\n\
- add r1, sp\n\
- adds r1, 0xC\n\
- lsls r0, 3\n\
- subs r0, r2, r0\n\
- lsls r0, 5\n\
- ldr r1, [r1]\n\
- adds r5, r1, r0\n\
- ldr r4, =0x04000008\n\
- ldr r0, [sp, 0x3C]\n\
- adds r1, r5, 0\n\
- adds r2, r4, 0\n\
- bl CpuSet\n\
- movs r2, 0x80\n\
- lsls r2, 1\n\
- adds r1, r5, r2\n\
- ldr r0, [sp, 0x40]\n\
- adds r2, r4, 0\n\
- bl CpuSet\n\
- movs r7, 0x80\n\
- lsls r7, 2\n\
- adds r1, r5, r7\n\
- ldr r0, [sp, 0x40]\n\
- adds r2, r4, 0\n\
- bl CpuSet\n\
- movs r0, 0xC0\n\
- lsls r0, 2\n\
- adds r1, r5, r0\n\
- ldr r0, [sp, 0x34]\n\
- adds r2, r4, 0\n\
- bl CpuSet\n\
- ldr r1, [sp, 0x38]\n\
- lsrs r0, r1, 24\n\
- bl RemoveWindow\n\
- ldr r2, [sp, 0x30]\n\
- lsls r1, r2, 3\n\
- movs r0, 0xF0\n\
- subs r0, r1\n\
- asrs r0, 1\n\
- add sp, 0x44\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\
- .pool");
-}
-#endif // NONMATCHING
-
-static void sub_80F6DC0(void)
-{
- int i;
- struct SpriteTemplate template;
- u8 spriteIds[8];
-
- template = sSpriteTemplate_858D7F8;
- for (i = 0; i < (int)ARRAY_COUNT(sUnknown_0858D810); i++)
- LoadSpriteSheet(&sUnknown_0858D810[i]);
-
- LoadSpritePalette(&sUnknown_0858D850);
- for (i = 0; i < 8; i++)
- {
- spriteIds[i] = CreateSprite(&template, 272, 144, 10);
- template.tileTag++;
- }
-
- gSprites[spriteIds[0]].data[0] = spriteIds[1];
- gSprites[spriteIds[0]].data[1] = spriteIds[2];
- gSprites[spriteIds[0]].data[2] = spriteIds[3];
-
- gSprites[spriteIds[4]].data[0] = spriteIds[5];
- gSprites[spriteIds[4]].data[1] = spriteIds[6];
- gSprites[spriteIds[4]].data[2] = spriteIds[7];
-
- gUnknown_0203A034->unk0->unk0 = spriteIds[0];
- gUnknown_0203A034->unk0->unk4 = 0;
- gUnknown_0203A034->unk0->unk1 = spriteIds[4];
- sub_80F7144();
-}
-
-static void sub_80F6E9C(s16 arg0, u16 y, u16 arg2, u16 arg3)
-{
- struct Sprite *sprite = &gSprites[gUnknown_0203A034->unk0->unk0];
- sprite->pos1.x = 272;
- sprite->pos1.y = y;
- sprite->pos2.x = 0;
- sprite->pos2.y = 0;
- sprite->data[4] = arg0 + 32;
- sprite->data[5] = arg2;
- sprite->data[6] = arg3;
- sprite->data[7] = 0;
- sprite->callback = sub_80F6F68;
- gUnknown_0203A034->unk0->unk4 = 1;
-}
-
-static void sub_80F6EF4(u16 arg0)
-{
- struct Sprite *sprite = &gSprites[gUnknown_0203A034->unk0->unk0];
- sprite->pos1.x += sprite->pos2.x;
- sprite->pos1.y += sprite->pos2.y;
- sprite->pos2.y = 0;
- sprite->pos2.x = 0;
- sprite->data[6] = arg0;
- sprite->data[7] = 0;
- sprite->callback = sub_80F7014;
- gUnknown_0203A034->unk0->unk4 = 3;
-}
-
-static void sub_80F6F40(struct Sprite *sprite)
-{
- sprite->pos1.x = 272;
- sprite->pos1.y = 144;
- sprite->pos2.y = 0;
- sprite->pos2.x = 0;
- sprite->callback = SpriteCallbackDummy;
- gUnknown_0203A034->unk0->unk4 = 0;
-}
-
-static void sub_80F6F68(struct Sprite *sprite)
-{
- int i;
-
- s16 delta = sprite->data[7] + sprite->data[6];
- sprite->pos1.x -= delta >> 8;
- sprite->data[7] += sprite->data[6];
- sprite->data[7] &= 0xFF;
- if (sprite->pos1.x < sprite->data[4])
- sprite->pos1.x = sprite->data[4];
-
- for (i = 0; i < 3; i++)
- {
- struct Sprite *sprite2 = &gSprites[sprite->data[i]];
- sprite2->pos1.x = sprite->pos1.x + sprite->pos2.x + (i + 1) * 64;
- }
-
- if (sprite->pos1.x == sprite->data[4])
- sprite->callback = sub_80F6FDC;
-}
-
-static void sub_80F6FDC(struct Sprite *sprite)
-{
- gUnknown_0203A034->unk0->unk4 = 2;
- if ((u16)sprite->data[5] != 0xFFFF)
- {
- if (--sprite->data[5] == -1)
- sub_80F6EF4(sprite->data[6]);
- }
-}
-
-static void sub_80F7014(struct Sprite *sprite)
-{
- int i;
- s16 delta;
-
- delta = sprite->data[7] + sprite->data[6];
- sprite->pos1.x -= delta >> 8;
- sprite->data[7] += sprite->data[6];
- sprite->data[7] &= 0xFF;
- for (i = 0; i < 3; i++)
- {
- struct Sprite *sprite2 = &gSprites[sprite->data[i]];
- sprite2->pos1.x = sprite->pos1.x + sprite->pos2.x + (i + 1) * 64;
- }
-
- if (sprite->pos1.x + sprite->pos2.x < -224)
- sub_80F6F40(sprite);
-}
-
-static void sub_80F707C(const u8 *text)
-{
- int i;
- u16 x;
- struct Sprite *sprite;
-
- x = sub_80F6B78(text, gUnknown_0203A034->unk0->unk1);
- sprite = &gSprites[gUnknown_0203A034->unk0->unk1];
- sprite->pos1.x = x + 32;
- sprite->pos1.y = 80;
- sprite->invisible = 0;
- for (i = 0; i < 3; i++)
- {
- gSprites[sprite->data[i]].pos1.x = sprite->pos1.x + sprite->pos2.x + (i + 1) * 64;
- gSprites[sprite->data[i]].pos1.y = sprite->pos1.y;
- gSprites[sprite->data[i]].invisible = 0;
- }
-
- gBattle_WIN0H = 0x00F0;
- gBattle_WIN0V = ((sprite->pos1.y - 16) << 8) | (sprite->pos1.y + 16);
- SetGpuReg(REG_OFFSET_WININ, WININ_WIN1_BG_ALL | WININ_WIN1_OBJ | WININ_WIN1_CLR
- | WININ_WIN0_BG1 | WININ_WIN0_BG2 | WININ_WIN0_BG3 | WININ_WIN0_OBJ | WININ_WIN0_CLR);
-}
-
-static void sub_80F7144(void)
-{
- int i;
- struct Sprite *sprite;
-
- sprite = &gSprites[gUnknown_0203A034->unk0->unk1];
- sprite->invisible = 1;
- for (i = 0; i < 3; i++)
- gSprites[sprite->data[i]].invisible = 1;
-
- gBattle_WIN0H = 0;
- gBattle_WIN0V = 0;
- SetGpuReg(REG_OFFSET_WIN0H, gBattle_WIN0H);
- SetGpuReg(REG_OFFSET_WIN0V, gBattle_WIN0V);
- SetGpuReg(REG_OFFSET_WININ, WININ_WIN0_BG_ALL | WININ_WIN0_OBJ | WININ_WIN0_CLR
- | WININ_WIN1_BG_ALL | WININ_WIN1_OBJ | WININ_WIN1_CLR);
-}
-
-static void sub_80F71C8(void)
-{
- u8 palette;
- int x, y;
-
- x = 5;
- y = 1;
- if (gLinkContestFlags & LINK_CONTEST_FLAG_IS_LINK)
- {
- CopyToBgTilemapBufferRect(2, gUnknown_08DC6498, 5, 1, 5, 2);
- x = 10;
- }
- else if (gSpecialVar_ContestRank == CONTEST_RANK_NORMAL)
- {
- CopyToBgTilemapBufferRect(2, gUnknown_08DC63F8, 5, 1, 10, 2);
- x = 15;
- }
- else if (gSpecialVar_ContestRank == CONTEST_RANK_SUPER)
- {
- CopyToBgTilemapBufferRect(2, gUnknown_08DC6420, 5, 1, 10, 2);
- x = 15;
- }
- else if (gSpecialVar_ContestRank == CONTEST_RANK_HYPER)
- {
- CopyToBgTilemapBufferRect(2, gUnknown_08DC6448, 5, 1, 10, 2);
- x = 15;
- }
- else // CONTEST_RANK_MASTER
- {
- CopyToBgTilemapBufferRect(2, gUnknown_08DC6470, 5, 1, 10, 2);
- x = 15;
- }
-
- if (gSpecialVar_ContestCategory == CONTEST_CATEGORY_COOL)
- {
- palette = 0;
- CopyToBgTilemapBufferRect(2, gUnknown_08DC64AC, x, y, 5, 2);
- }
- else if (gSpecialVar_ContestCategory == CONTEST_CATEGORY_BEAUTY)
- {
- palette = 1;
- CopyToBgTilemapBufferRect(2, gUnknown_08DC64C0, x, y, 5, 2);
- }
- else if (gSpecialVar_ContestCategory == CONTEST_CATEGORY_CUTE)
- {
- palette = 2;
- CopyToBgTilemapBufferRect(2, gUnknown_08DC64D4, x, y, 5, 2);
- }
- else if (gSpecialVar_ContestCategory == CONTEST_CATEGORY_SMART)
- {
- palette = 3;
- CopyToBgTilemapBufferRect(2, gUnknown_08DC64E8, x, y, 5, 2);
- }
- else // CONTEST_CATEGORY_TOUGH
- {
- palette = 4;
- CopyToBgTilemapBufferRect(2, gUnknown_08DC64FC, x, y, 5, 2);
- }
-
- x += 5;
- CopyToBgTilemapBufferRect(2, gUnknown_08DC6510, x, y, 6, 2);
- CopyToBgTilemapBufferRect_ChangePalette(2, gUnknown_0203A034->unkC[2], 0, 0, 32, 4, palette);
-}
-
-u8 sub_80F7310(u8 monIndex, u8 arg1)
-{
- u32 var0 = gContestMonConditions[monIndex] << 16;
- u32 var1 = var0 / 0x3F;
-
- if (var1 & 0xFFFF)
- var1 += 0x10000;
-
- var1 >>= 16;
- if (var1 == 0 && var0)
- var1 = 1;
-
- if (arg1 && var1 > 10)
- var1 = 10;
-
- return var1;
-}
-
-s8 sub_80F7364(u8 arg0, u8 arg1)
-{
- u32 r4, r2;
- s16 val;
- s8 ret;
-
- val = gUnknown_02039F18[arg0];
- if (val < 0)
- r4 = -val << 16;
- else
- r4 = val << 16;
-
- r2 = r4 / 80;
- if (r2 & 0xFFFF)
- r2 += 0x10000;
-
- r2 >>= 16;
- if (r2 == 0 && r4 != 0)
- r2 = 1;
-
- if (arg1 != 0 && r2 > 10)
- r2 = 10;
-
- if (gUnknown_02039F18[arg0] < 0)
- ret = -r2;
- else
- ret = r2;
-
- return ret;
-}
-
-static void sub_80F73DC(u8 taskId)
-{
- u16 firstTileNum;
-
- if (gTasks[taskId].data[10] == 0)
- {
- gTasks[taskId].data[11] = (3 - gTasks[taskId].data[0]) * 40;
- gTasks[taskId].data[10]++;
- }
- else if (gTasks[taskId].data[10] == 1)
- {
- if (--gTasks[taskId].data[11] == -1)
- {
- firstTileNum = gTasks[taskId].data[0] * 2 + 0x5043;
- WriteSequenceToBgTilemapBuffer(2, firstTileNum, 1, gTasks[taskId].data[1] * 3 + 5, 2, 1, 17, 1);
- WriteSequenceToBgTilemapBuffer(2, firstTileNum + 0x10, 1, gTasks[taskId].data[1] * 3 + 6, 2, 1, 17, 1);
- gUnknown_0203A034->unk0->unk5++;
- DestroyTask(taskId);
- PlaySE(SE_JYUNI);
- }
- }
-}
-
-static void sub_80F74BC(u8 taskId)
-{
- int i;
- for (i = 0; i < CONTESTANT_COUNT && gContestFinalStandings[i] != 0; i++)
- ;
-
- CopyToBgTilemapBufferRect_ChangePalette(2, i * 0xC0 + 0x100 + gUnknown_0203A034->unkC[2], 0, i * 3 + 4, 32, 3, 9);
- gTasks[taskId].data[10] = i;
- gTasks[taskId].data[12] = 1;
- gTasks[taskId].func = sub_80F753C;
- gUnknown_0203A034->unk0->unk3 = taskId;
-}
-
-static void sub_80F753C(u8 taskId)
-{
- if (++gTasks[taskId].data[11] == 1)
- {
- gTasks[taskId].data[11] = 0;
- BlendPalette(0x91, 1, gTasks[taskId].data[12], RGB(13, 28, 27));
- if (gTasks[taskId].data[13] == 0)
- {
- if (++gTasks[taskId].data[12] == 16)
- gTasks[taskId].data[13] = 1;
- }
- else
- {
- if (--gTasks[taskId].data[12] == 0)
- gTasks[taskId].data[13] = 0;
- }
- }
-}
-
-static void sub_80F75A8(struct Sprite *sprite)
-{
- if (sprite->data[0] < 10)
- {
- if (++sprite->data[0] == 10)
- {
- PlayCry1(sprite->data[1], 0);
- sprite->data[1] = 0;
- }
- }
- else
- {
- s16 delta = sprite->data[1] + 0x600;
- sprite->pos1.x -= delta >> 8;
- sprite->data[1] += 0x600;
- sprite->data[1] &= 0xFF;
- if (sprite->pos1.x < 120)
- sprite->pos1.x = 120;
-
- if (sprite->pos1.x == 120)
- {
- sprite->callback = SpriteCallbackDummy;
- sprite->data[1] = 0;
- gUnknown_0203A034->unk0->unk6 = 1;
- }
- }
-}
-
-static void sub_80F7620(struct Sprite *sprite)
-{
- s16 delta = sprite->data[1] + 0x600;
- sprite->pos1.x -= delta >> 8;
- sprite->data[1] += + 0x600;
- sprite->data[1] &= 0xFF;
- if (sprite->pos1.x < -32)
- {
- sprite->callback = SpriteCallbackDummy;
- sprite->invisible = 1;
- gUnknown_0203A034->unk0->unk6 = 2;
- }
-}
-
-static void sub_80F7670(u8 taskId)
-{
- if (++gTasks[taskId].data[0] == 5)
- {
- gTasks[taskId].data[0] = 0;
- if (gUnknown_0203A034->unk0->unk7 < 40)
- {
- u8 spriteId = CreateSprite(&sSpriteTemplate_858D860, (Random() % 240) - 20, 44, 5);
- gSprites[spriteId].data[0] = Random() % 512;
- gSprites[spriteId].data[1] = (Random() % 24) + 16;
- gSprites[spriteId].data[2] = (Random() % 256) + 48;
- gSprites[spriteId].oam.tileNum += Random() % 17;
- gUnknown_0203A034->unk0->unk7++;
- }
- }
-
- if (gUnknown_0203A034->unk0->unk9)
- DestroyTask(taskId);
-}
-
-static void sub_80F7768(struct Sprite *sprite)
-{
- s16 delta;
-
- sprite->data[3] += sprite->data[0];
- sprite->pos2.x = Sin(sprite->data[3] >> 8, sprite->data[1]);
- delta = sprite->data[4] + sprite->data[2];
- sprite->pos1.x += delta >> 8;
- sprite->data[4] += sprite->data[2];
- sprite->data[4] &= 0xff;
-
- sprite->pos1.y++;
- if (gUnknown_0203A034->unk0->unk9)
- sprite->invisible = 1;
-
- if (sprite->pos1.x > 248 || sprite->pos1.y > 116)
- {
- DestroySprite(sprite);
- gUnknown_0203A034->unk0->unk7--;
- }
-}
-
-static void sub_80F77E0(u8 monIndex, u8 numFrames)
-{
- u8 taskId = CreateTask(sub_80F7824, 8);
- gTasks[taskId].data[0] = monIndex;
- gTasks[taskId].data[1] = numFrames;
- gTasks[taskId].data[2] = gContestMons[monIndex].species;
-}
-
-static void sub_80F7824(u8 taskId)
-{
- u8 monIndex = gTasks[taskId].data[0];
- if (gTasks[taskId].data[10]++ == gTasks[taskId].data[1])
- {
- gTasks[taskId].data[10] = 0;
- sub_80F69B8(gTasks[taskId].data[2], monIndex, gTasks[taskId].data[11], FALSE, gContestMons[monIndex].personality);
- gTasks[taskId].data[11] ^= 1;
- }
-}
-
-static void sub_80F7880(void)
-{
- int i, r4;
- u32 r1;
- s16 r2;
- s8 var;
-
- r2 = gUnknown_02039F08[0];
- for (i = 1; i < 4; i++)
- {
- if (r2 < gUnknown_02039F08[i])
- r2 = gUnknown_02039F08[i];
- }
-
- if (r2 < 0)
- {
- r2 = gUnknown_02039F08[0];
- for (i = 1; i < 4; i++)
- {
- if (r2 > gUnknown_02039F08[i])
- r2 = gUnknown_02039F08[i];
- }
- }
-
- for (i = 0; i < CONTESTANT_COUNT; i++)
- {
- r4 = (gContestMonConditions[i] * 1000) / abs(r2);
- if (r4 % 10 > 4)
- r4 += 10;
- (*gUnknown_0203A034->unk4)[i].unk0 = r4 / 10;
-
- r4 = (abs(gUnknown_02039F18[i]) * 1000) / abs(r2);
- if (r4 % 10 > 4)
- r4 += 10;
- (*gUnknown_0203A034->unk4)[i].unk4 = r4 / 10;
-
- if (gUnknown_02039F18[i] < 0)
- (*gUnknown_0203A034->unk4)[i].unk10 = 1;
-
- r1 = ((*gUnknown_0203A034->unk4)[i].unk0 * 22528) / 100;
- if ((r1 & 0xFF) > 0x7F)
- r1 += 0x100;
- (*gUnknown_0203A034->unk4)[i].unk8 = r1 >> 8;
-
- r1 = ((*gUnknown_0203A034->unk4)[i].unk4 * 22528) / 100;
- if ((r1 & 0xFF) > 0x7F)
- r1 += 0x100;
- (*gUnknown_0203A034->unk4)[i].unkC = r1 >> 8;
-
- (*gUnknown_0203A034->unk4)[i].unk11 = sub_80F7310(i, 1);
- var = sub_80F7364(i, 1);
- (*gUnknown_0203A034->unk4)[i].unk12 = abs(var);
-
- if (gContestFinalStandings[i])
- {
- s16 var1 = (*gUnknown_0203A034->unk4)[i].unk8;
- s16 var2 = (*gUnknown_0203A034->unk4)[i].unkC;
-
- if ((*gUnknown_0203A034->unk4)[i].unk10)
- var2 *= -1;
-
- if (var1 + var2 == 88)
- {
- if (var2 > 0)
- (*gUnknown_0203A034->unk4)[i].unkC--;
- else if (var1 > 0)
- (*gUnknown_0203A034->unk4)[i].unk8--;
- }
- }
- }
-}
-
-static void sub_80F7A80(u8 arg0, u8 arg1)
-{
- int i, taskId;
- u32 var0;
- u8 sp8 = 0, spC = 0;
-
- if (!arg0)
- {
- for (i = 0; i < 4; i++)
- {
- u8 unk = (*gUnknown_0203A034->unk4)[i].unk11;
- if (arg1 < unk)
- {
- FillBgTilemapBufferRect_Palette0(1, 0x60B3, ((19 + unk) - arg1) - 1, i * 3 + 5, 1, 1);
- taskId = CreateTask(sub_80F7CA8, 10);
-
- var0 = (((*gUnknown_0203A034->unk4)[i].unk8 << 16) / (*gUnknown_0203A034->unk4)[i].unk11) * (arg1 + 1);
- if ((var0 & 0xFFFF) > 0x7FFF)
- var0 += 0x10000;
-
- gTasks[taskId].data[0] = i;
- gTasks[taskId].data[1] = var0 >> 16;
- gUnknown_0203A034->unk0->unk14++;
- sp8++;
- }
- }
- }
- else
- {
- for (i = 0; i < 4; i++)
- {
- s8 unk = (*gUnknown_0203A034->unk4)[i].unk12;
- u32 tile = (*gUnknown_0203A034->unk4)[i].unk10 ? 0x60A5 : 0x60A3;
- if (arg1 < unk)
- {
- FillBgTilemapBufferRect_Palette0(1, tile, ((19 + unk) - arg1) - 1, i * 3 + 6, 1, 1);
- taskId = CreateTask(sub_80F7CA8, 10);
-
- var0 = (((*gUnknown_0203A034->unk4)[i].unkC << 16) / (*gUnknown_0203A034->unk4)[i].unk12) * (arg1 + 1);
- if ((var0 & 0xFFFF) > 0x7FFF)
- var0 += 0x10000;
-
- gTasks[taskId].data[0] = i;
- if ((*gUnknown_0203A034->unk4)[i].unk10)
- {
- gTasks[taskId].data[2] = 1;
- spC++;
- }
- else
- {
- sp8++;
- }
-
- if ((*gUnknown_0203A034->unk4)[i].unk10)
- gTasks[taskId].data[1] = -(var0 >> 16) + (*gUnknown_0203A034->unk4)[i].unk8 ;
- else
- gTasks[taskId].data[1] = (var0 >> 16) + (*gUnknown_0203A034->unk4)[i].unk8;
-
- gUnknown_0203A034->unk0->unk14++;
- }
- }
- }
-
- if (spC)
- PlaySE(SE_BOO);
- if (sp8)
- PlaySE(SE_PIN);
-}
-
-void sub_80F7CA8(u8 taskId)
-{
- int i;
- u8 var0;
- u16 tileNum;
- bool32 r4 = FALSE;
- bool32 endTask = FALSE;
- u8 r6 = gTasks[taskId].data[0];
- s16 r7 = gTasks[taskId].data[1];
- s16 r12 = gTasks[taskId].data[2];
-
- if (r12)
- {
- if (gUnknown_0203A034->unk0->unkC[r6] <= 0)
- r4 = TRUE;
- }
- else
- {
- if (gUnknown_0203A034->unk0->unkC[r6] > 87)
- r4 = TRUE;
- }
-
- if (gUnknown_0203A034->unk0->unkC[r6] == r7)
- endTask = TRUE;
-
- if (!endTask)
- {
- if (r4)
- gUnknown_0203A034->unk0->unkC[r6] = r7;
- else if (r12)
- gUnknown_0203A034->unk0->unkC[r6] = gUnknown_0203A034->unk0->unkC[r6] - 1;
- else
- gUnknown_0203A034->unk0->unkC[r6] = gUnknown_0203A034->unk0->unkC[r6] + 1;
- }
-
- if (!r4 && !endTask)
- {
- for (i = 0; i < 11; i++)
- {
- if (gUnknown_0203A034->unk0->unkC[r6] >= (i + 1) * 8)
- var0 = 8;
- else if (gUnknown_0203A034->unk0->unkC[r6] >= i * 8)
- var0 = gUnknown_0203A034->unk0->unkC[r6] % 8;
- else
- var0 = 0;
-
- if (var0 < 4)
- tileNum = 0x504C + var0;
- else
- tileNum = 0x5057 + var0;
-
- FillBgTilemapBufferRect_Palette0(2, tileNum, i + 7, r6 * 3 + 6, 1, 1);
- }
- }
-
- if (endTask)
- {
- gUnknown_0203A034->unk0->unk14--;
- DestroyTask(taskId);
- }
-}
-
-static void sub_80F7DF4(void)
-{
- gUnknown_0203A034 = AllocZeroed(sizeof(*gUnknown_0203A034));
- gUnknown_0203A034->unk0 = AllocZeroed(sizeof(*gUnknown_0203A034->unk0));
- gUnknown_0203A034->unk4 = AllocZeroed(sizeof(*gUnknown_0203A034->unk4));
- gUnknown_0203A034->unk8 = AllocZeroed(BG_SCREEN_SIZE);
- gUnknown_0203A034->unkC[0] = AllocZeroed(BG_SCREEN_SIZE);
- gUnknown_0203A034->unkC[1] = AllocZeroed(BG_SCREEN_SIZE);
- gUnknown_0203A034->unkC[2] = AllocZeroed(BG_SCREEN_SIZE);
- gUnknown_0203A034->unkC[3] = AllocZeroed(BG_SCREEN_SIZE);
- gUnknown_0203A034->unk1C = AllocZeroed(0x1000);
- AllocateMonSpritesGfx();
-}
-
-static void sub_80F7E64(void)
-{
- FREE_AND_SET_NULL(gUnknown_0203A034->unk0);
- FREE_AND_SET_NULL(gUnknown_0203A034->unk4);
- FREE_AND_SET_NULL(gUnknown_0203A034->unk8);
- FREE_AND_SET_NULL(gUnknown_0203A034->unkC[0]);
- FREE_AND_SET_NULL(gUnknown_0203A034->unkC[1]);
- FREE_AND_SET_NULL(gUnknown_0203A034->unkC[2]);
- FREE_AND_SET_NULL(gUnknown_0203A034->unkC[3]);
- FREE_AND_SET_NULL(gUnknown_0203A034->unk1C);
- FREE_AND_SET_NULL(gUnknown_0203A034);
- FreeMonSpritesGfx();
-}
-
-static void sub_80F7ED0(int windowId, u8 *str, int arg2)
-{
- struct TextPrinterTemplate textPrinter;
- textPrinter.currentChar = str;
- textPrinter.windowId = windowId;
- textPrinter.fontId = 7;
- textPrinter.x = arg2;
- textPrinter.y = 2;
- textPrinter.currentX = arg2;
- textPrinter.currentY = 2;
- textPrinter.letterSpacing = 0;
- textPrinter.lineSpacing = 0;
- textPrinter.unk = 0;
- textPrinter.fgColor = 1;
- textPrinter.bgColor = 0;
- textPrinter.shadowColor = 8;
- AddTextPrinter(&textPrinter, 0, NULL);
- PutWindowTilemap(windowId);
-}
-
-void TryEnterContestMon(void)
-{
- u8 eligibility = GetContestEntryEligibility(&gPlayerParty[gContestMonPartyIndex]);
-
- // Nonzero eligibility can still be non-eligibile, if mon is fainted or egg
- if (eligibility)
- {
- sub_80DAB8C(gSpecialVar_ContestCategory, gSpecialVar_ContestRank);
- sub_80DB09C(gSpecialVar_ContestCategory);
- }
-
- gSpecialVar_Result = eligibility;
-}
-
-u16 HasMonWonThisContestBefore(void)
-{
- u16 hasRankRibbon = FALSE;
- struct Pokemon *mon = &gPlayerParty[gContestMonPartyIndex];
- switch (gSpecialVar_ContestCategory)
- {
- case CONTEST_CATEGORY_COOL:
- if (GetMonData(mon, MON_DATA_COOL_RIBBON) > gSpecialVar_ContestRank)
- hasRankRibbon = TRUE;
- break;
- case CONTEST_CATEGORY_BEAUTY:
- if (GetMonData(mon, MON_DATA_BEAUTY_RIBBON) > gSpecialVar_ContestRank)
- hasRankRibbon = TRUE;
- break;
- case CONTEST_CATEGORY_CUTE:
- if (GetMonData(mon, MON_DATA_CUTE_RIBBON) > gSpecialVar_ContestRank)
- hasRankRibbon = TRUE;
- break;
- case CONTEST_CATEGORY_SMART:
- if (GetMonData(mon, MON_DATA_SMART_RIBBON) > gSpecialVar_ContestRank)
- hasRankRibbon = TRUE;
- break;
- case CONTEST_CATEGORY_TOUGH:
- if (GetMonData(mon, MON_DATA_TOUGH_RIBBON) > gSpecialVar_ContestRank)
- hasRankRibbon = TRUE;
- break;
- }
-
- return hasRankRibbon;
-}
-
-void GiveMonContestRibbon(void)
-{
- u8 ribbonData;
-
- if (gContestFinalStandings[gContestPlayerMonIndex] != 0)
- return;
-
- switch (gSpecialVar_ContestCategory)
- {
- case CONTEST_CATEGORY_COOL:
- ribbonData = GetMonData(&gPlayerParty[gContestMonPartyIndex], MON_DATA_COOL_RIBBON);
- if (ribbonData <= gSpecialVar_ContestRank && ribbonData < 4)
- {
- ribbonData++;
- SetMonData(&gPlayerParty[gContestMonPartyIndex], MON_DATA_COOL_RIBBON, &ribbonData);
- if (GetRibbonCount(&gPlayerParty[gContestMonPartyIndex]) > NUM_CUTIES_RIBBONS)
- TryPutSpotTheCutiesOnAir(&gPlayerParty[gContestMonPartyIndex], MON_DATA_COOL_RIBBON);
- }
- break;
- case CONTEST_CATEGORY_BEAUTY:
- ribbonData = GetMonData(&gPlayerParty[gContestMonPartyIndex], MON_DATA_BEAUTY_RIBBON);
- if (ribbonData <= gSpecialVar_ContestRank && ribbonData < 4)
- {
- ribbonData++;
- SetMonData(&gPlayerParty[gContestMonPartyIndex], MON_DATA_BEAUTY_RIBBON, &ribbonData);
- if (GetRibbonCount(&gPlayerParty[gContestMonPartyIndex]) > NUM_CUTIES_RIBBONS)
- TryPutSpotTheCutiesOnAir(&gPlayerParty[gContestMonPartyIndex], MON_DATA_BEAUTY_RIBBON);
- }
- break;
- case CONTEST_CATEGORY_CUTE:
- ribbonData = GetMonData(&gPlayerParty[gContestMonPartyIndex], MON_DATA_CUTE_RIBBON);
- if (ribbonData <= gSpecialVar_ContestRank && ribbonData < 4)
- {
- ribbonData++;
- SetMonData(&gPlayerParty[gContestMonPartyIndex], MON_DATA_CUTE_RIBBON, &ribbonData);
- if (GetRibbonCount(&gPlayerParty[gContestMonPartyIndex]) > NUM_CUTIES_RIBBONS)
- TryPutSpotTheCutiesOnAir(&gPlayerParty[gContestMonPartyIndex], MON_DATA_CUTE_RIBBON);
- }
- break;
- case CONTEST_CATEGORY_SMART:
- ribbonData = GetMonData(&gPlayerParty[gContestMonPartyIndex], MON_DATA_SMART_RIBBON);
- if (ribbonData <= gSpecialVar_ContestRank && ribbonData < 4)
- {
- ribbonData++;
- SetMonData(&gPlayerParty[gContestMonPartyIndex], MON_DATA_SMART_RIBBON, &ribbonData);
- if (GetRibbonCount(&gPlayerParty[gContestMonPartyIndex]) > NUM_CUTIES_RIBBONS)
- TryPutSpotTheCutiesOnAir(&gPlayerParty[gContestMonPartyIndex], MON_DATA_SMART_RIBBON);
- }
- break;
- case CONTEST_CATEGORY_TOUGH:
- ribbonData = GetMonData(&gPlayerParty[gContestMonPartyIndex], MON_DATA_TOUGH_RIBBON);
- if (ribbonData <= gSpecialVar_ContestRank && ribbonData < 4)
- {
- ribbonData++;
- SetMonData(&gPlayerParty[gContestMonPartyIndex], MON_DATA_TOUGH_RIBBON, &ribbonData);
- if (GetRibbonCount(&gPlayerParty[gContestMonPartyIndex]) > NUM_CUTIES_RIBBONS)
- TryPutSpotTheCutiesOnAir(&gPlayerParty[gContestMonPartyIndex], MON_DATA_TOUGH_RIBBON);
- }
- break;
- }
-}
-
-void BufferContestantTrainerName(void)
-{
- StringCopy(gStringVar1, gContestMons[gSpecialVar_0x8006].trainerName);
- sub_81DB5AC(gStringVar1);
-}
-
-void BufferContestantMonNickname(void)
-{
- StringCopy(gStringVar3, gContestMons[gSpecialVar_0x8006].nickname);
-}
-
-// Unused script special
-void GetContestMonConditionRanking(void)
-{
- u8 i, rank;
-
- for (i = 0, rank = 0; i < CONTESTANT_COUNT; i++)
- {
- if (gContestMonConditions[gSpecialVar_0x8006] < gContestMonConditions[i])
- rank++;
- }
-
- gSpecialVar_0x8004 = rank;
-}
-
-void GetContestMonCondition(void)
-{
- gSpecialVar_0x8004 = gContestMonConditions[gSpecialVar_0x8006];
-}
-
-void GetContestWinnerId(void)
-{
- u8 i;
-
- for (i = 0; i < CONTESTANT_COUNT && gContestFinalStandings[i] != 0; i++)
- ;
-
- gSpecialVar_0x8005 = i;
-}
-
-void BufferContestWinnerTrainerName(void)
-{
- u8 i;
-
- for (i = 0; i < CONTESTANT_COUNT && gContestFinalStandings[i] != 0; i++)
- ;
-
- StringCopy(gStringVar3, gContestMons[i].trainerName);
- sub_81DB5AC(gStringVar3);
-}
-
-void BufferContestWinnerMonName(void)
-{
- u8 i;
-
- for (i = 0; i < CONTESTANT_COUNT && gContestFinalStandings[i] != 0; i++)
- ;
-
- StringCopy(gStringVar1, gContestMons[i].nickname);
-}
-
-void CB2_SetStartContestCallback(void)
-{
- SetMainCallback2(CB2_StartContest);
-}
-
-static void Task_StartContest(u8 taskId)
-{
- if (!gPaletteFade.active)
- {
- DestroyTask(taskId);
- SetMainCallback2(CB2_SetStartContestCallback);
- }
-}
-
-void StartContest(void)
-{
- ScriptContext2_Enable();
- CreateTask(Task_StartContest, 10);
- BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK);
-}
-
-void BufferContestantMonSpecies(void)
-{
- gSpecialVar_0x8004 = gContestMons[gSpecialVar_0x8006].species;
-}
-
-static void sub_80F8458(u8 taskId)
-{
- if (!gPaletteFade.active)
- {
- DestroyTask(taskId);
- SetMainCallback2(sub_80F5B00);
- }
-}
-
-void sub_80F8484(void)
-{
- ScriptContext2_Enable();
- CreateTask(sub_80F8458, 10);
- BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK);
-}
-
-void GetContestPlayerId(void)
-{
- gSpecialVar_0x8004 = gContestPlayerMonIndex;
-}
-
-void sub_80F84C4(u8 taskId)
-{
- u8 newTaskId;
- ScriptContext2_Enable();
- newTaskId = CreateTask(sub_80FC580, 0);
- SetTaskFuncWithFollowupFunc(newTaskId, sub_80FC580, sub_80F8508);
- gTasks[newTaskId].data[9] = taskId;
-}
-
-static void sub_80F8508(u8 taskId)
-{
- if (gLinkContestFlags & LINK_CONTEST_FLAG_HAS_RS_PLAYER)
- {
- sub_80DA8C8(gContestMonPartyIndex);
- SetTaskFuncWithFollowupFunc(taskId, sub_80FC6BC, sub_80F8568);
- }
- else
- {
- sub_80DA8C8(gContestMonPartyIndex);
- gTasks[taskId].func = sub_81D9DE4;
- }
-}
-
-static void sub_80F8568(u8 taskId)
-{
- SetTaskFuncWithFollowupFunc(taskId, sub_80FC804, sub_80F8584);
-}
-
-static void sub_80F8584(u8 taskId)
-{
- SetTaskFuncWithFollowupFunc(taskId, sub_80FCE48, sub_80F85A0);
-}
-
-static void sub_80F85A0(u8 taskId)
-{
- SetTaskFuncWithFollowupFunc(taskId, sub_80FC894, sub_80F85BC);
-}
-
-static void sub_80F85BC(u8 taskId)
-{
- u8 i;
- u8 sp0[4];
- u8 sp4[4];
-
- memset(sp0, 0, sizeof(sp0));
- memset(sp4, 0, sizeof(sp4));
-
- for (i = 0; i < gNumLinkContestPlayers; i++)
- sp0[i] = gTasks[taskId].data[i + 1];
-
- for (i = 0; i < gNumLinkContestPlayers;)
- {
- i++;
- if (i >= gNumLinkContestPlayers || sp0[0] != sp0[i])
- break;
- }
-
- if (i == gNumLinkContestPlayers)
- gSpecialVar_0x8004 = 0;
- else
- gSpecialVar_0x8004 = 1;
-
- for (i = 0; i < gNumLinkContestPlayers; i++)
- sp4[i] = gTasks[taskId].data[i + 5];
-
- gUnknown_02039F2B = sub_80F86E0(sp4);
- sub_80DB09C(gSpecialVar_ContestCategory);
- SetTaskFuncWithFollowupFunc(taskId, sub_80FCF40, sub_80F86B8);
-}
-
-static void sub_80F86B8(u8 taskId)
-{
- SortContestants(FALSE);
- SetTaskFuncWithFollowupFunc(taskId, sub_80FCFD0, sub_80F8714);
-}
-
-u8 sub_80F86E0(u8 *arg0)
-{
- int i;
- u8 result = 0;
-
- for (i = 1; i < gNumLinkContestPlayers; i++)
- {
- if (arg0[result] < arg0[i])
- result = i;
- }
-
- return result;
-}
-
-void sub_80F8714(u8 taskId)
-{
- int i;
-
- if (gSpecialVar_0x8004 == 1)
- {
- if (IsLinkTaskFinished())
- gTasks[taskId].func = sub_80F878C;
- }
- else
- {
- for (i = 0; i < CONTESTANT_COUNT; i++)
- StringGetEnd10(gContestMons[i].nickname);
-
- DestroyTask(taskId);
- SetDynamicWarp(0, gSaveBlock1Ptr->location.mapGroup, gSaveBlock1Ptr->location.mapNum, -1);
- ScriptContext2_Disable();
- EnableBothScriptContexts();
- }
-}
-
-static void sub_80F878C(u8 taskId)
-{
- sub_800AC34();
- gTasks[taskId].func = sub_80F87B4;
-}
-
-static void sub_80F87B4(u8 taskId)
-{
- if (!gReceivedRemoteLinkPlayers)
- {
- DestroyTask(taskId);
- ScriptContext2_Disable();
- EnableBothScriptContexts();
- }
-}
diff --git a/src/contest_link_80FC4F4.c b/src/contest_link_80FC4F4.c
deleted file mode 100644
index d6cfea638..000000000
--- a/src/contest_link_80FC4F4.c
+++ /dev/null
@@ -1,548 +0,0 @@
-#include "global.h"
-#include "contest.h"
-#include "decompress.h"
-#include "event_data.h"
-#include "link.h"
-#include "pokemon.h"
-#include "random.h"
-#include "task.h"
-#include "constants/flags.h"
-
-static void sub_80FC5C0(u8);
-static void sub_80FC5DC(u8);
-
-bool32 sub_80FC4F4(void *src, u16 size)
-{
- memcpy(gDecompressionBuffer, src, size);
- if (SendBlock(bitmask_all_link_players_but_self(), gDecompressionBuffer, size))
- return TRUE;
- else
- return FALSE;
-}
-
-bool8 sub_80FC530(u8 arg0)
-{
- u8 mask = (1 << arg0);
- if (!(GetBlockReceivedStatus() & mask))
- {
- return FALSE;
- }
- else
- {
- ResetBlockReceivedFlag(arg0);
- return TRUE;
- }
-}
-
-bool8 sub_80FC55C(void)
-{
- if (GetBlockReceivedStatus() == sub_800A9D8())
- {
- ResetBlockReceivedFlags();
- return TRUE;
- }
- else
- {
- return FALSE;
- }
-}
-
-void sub_80FC580(u8 taskId)
-{
- u8 i;
-
- for (i = 0; i < 4; i++)
- gBlockRecvBuffer[i][0] = 0xFF;
-
- gTasks[taskId].data[0] = 0;
- gTasks[taskId].func = sub_80FC5C0;
-}
-
-static void sub_80FC5C0(u8 taskId)
-{
- gTasks[taskId].func = sub_80FC5DC;
-}
-
-static void sub_80FC5DC(u8 taskId)
-{
- int i;
-
- if (!gReceivedRemoteLinkPlayers)
- return;
-
- gContestPlayerMonIndex = GetMultiplayerId();
- gNumLinkContestPlayers = GetLinkPlayerCount();
- gLinkContestFlags = LINK_CONTEST_FLAG_IS_LINK;
- if (gWirelessCommType == 1)
- gLinkContestFlags = LINK_CONTEST_FLAG_IS_LINK | LINK_CONTEST_FLAG_IS_WIRELESS;
-
- for (i = 0; i < gNumLinkContestPlayers && (u32)(gLinkPlayers[i].version & 0xFF) - 1 > VERSION_RUBY - 1; i++)
- ;
-
- if (i < gNumLinkContestPlayers)
- gLinkContestFlags |= LINK_CONTEST_FLAG_HAS_RS_PLAYER;
-
- SwitchTaskToFollowupFunc(taskId);
-}
-
-bool32 sub_80FC670(s16 *arg0)
-{
- if (gLinkContestFlags & LINK_CONTEST_FLAG_HAS_RS_PLAYER)
- return TRUE;
-
- switch (*arg0)
- {
- case 0:
- if (IsLinkTaskFinished())
- {
- sub_800ADF8();
- (*arg0)++;
- }
- return FALSE;
- case 1:
- (*arg0)++;
- return FALSE;
- default:
- if (IsLinkTaskFinished() != TRUE)
- return FALSE;
- else
- return TRUE;
- }
-}
-
-void sub_80FC6BC(u8 taskId)
-{
- int i;
-
- if (!sub_80FC670(&gTasks[taskId].data[12]))
- return;
-
- switch (gTasks[taskId].data[0])
- {
- case 0:
- if (GetMultiplayerId() == 0)
- {
- if (IsLinkTaskFinished())
- {
- memcpy(gBlockSendBuffer, &gContestMons[gContestPlayerMonIndex], sizeof(struct ContestPokemon));
- gTasks[taskId].data[0] = 10;
- }
- }
- else
- {
- memcpy(gBlockSendBuffer, &gContestMons[gContestPlayerMonIndex], sizeof(struct ContestPokemon));
- gTasks[taskId].data[0] = 1;
- }
- break;
- case 1:
- if (sub_80FC55C())
- {
- for (i = 0; i < gNumLinkContestPlayers; i++)
- {
- memcpy(&gContestMons[i], gBlockRecvBuffer[i], sizeof(struct ContestPokemon));
- sub_80DFA08(&gContestMons[i], gLinkPlayers[i].language);
- }
-
- gTasks[taskId].data[0]++;
- }
- break;
- case 10:
- if (++gTasks[taskId].data[11] > 300)
- {
- sub_800A4D8(2);
- gTasks[taskId].data[0] = 1;
- }
- break;
- default:
- gTasks[taskId].data[0] = 0;
- gTasks[taskId].data[11] = 0;
- gTasks[taskId].data[12] = 0;
- SwitchTaskToFollowupFunc(taskId);
- break;
- }
-}
-
-void sub_80FC804(u8 taskId)
-{
- switch (gTasks[taskId].data[0])
- {
- case 0:
- if (GetMultiplayerId() == 0)
- {
- if (IsLinkTaskFinished() && sub_80FC4F4(&gRngValue, sizeof(gRngValue)) == TRUE)
- gTasks[taskId].data[0]++;
- }
- else
- {
- gTasks[taskId].data[0]++;
- }
- break;
- case 1:
- if (sub_80FC530(0))
- {
- memcpy(&gRngValue, gBlockRecvBuffer[0], sizeof(gRngValue));
- memcpy(&gContestRngValue, gBlockRecvBuffer[0], sizeof(gContestRngValue));
- gTasks[taskId].data[0]++;
- }
- break;
- default:
- gTasks[taskId].data[0] = 0;
- SwitchTaskToFollowupFunc(taskId);
- break;
- }
-}
-
-void sub_80FC894(u8 taskId)
-{
- int i;
-
- if (!sub_80FC670(&gTasks[taskId].data[12]))
- return;
-
- switch (gTasks[taskId].data[0])
- {
- case 0:
- gBlockSendBuffer[0] = gTasks[taskId].data[9];
- if (GetMultiplayerId() == 0)
- {
- if (IsLinkTaskFinished())
- gTasks[taskId].data[0] = 10;
- }
- else
- {
- gTasks[taskId].data[0]++;
- }
- break;
- case 1:
- if (sub_80FC55C())
- {
- for (i = 0; i < gNumLinkContestPlayers; i++)
- gTasks[taskId].data[i + 1] = gBlockRecvBuffer[i][0];
-
- gTasks[taskId].data[0]++;
- }
- break;
- case 10:
- if (++gTasks[taskId].data[11] > 10)
- {
- sub_800A4D8(2);
- gTasks[taskId].data[0] = 1;
- }
- break;
- default:
- gTasks[taskId].data[0] = 0;
- gTasks[taskId].data[11] = 0;
- gTasks[taskId].data[12] = 0;
- SwitchTaskToFollowupFunc(taskId);
- break;
- }
-}
-
-void sub_80FC998(u8 taskId)
-{
- switch (gTasks[taskId].data[0])
- {
- case 0:
- if (IsLinkTaskFinished())
- {
- if (sub_80FC4F4(&gContestPlayerMonIndex, sizeof(gContestPlayerMonIndex)) == TRUE)
- gTasks[taskId].data[0]++;
- }
- break;
- case 1:
- if (sub_80FC55C())
- gTasks[taskId].data[0]++;
- break;
- default:
- gTasks[taskId].data[0] = 0;
- SwitchTaskToFollowupFunc(taskId);
- break;
- }
-}
-
-void sub_80FC9F8(u8 taskId)
-{
- int i;
-
- switch (gTasks[taskId].data[0])
- {
- case 0:
- if (IsLinkTaskFinished())
- {
- if (sub_80FC4F4(&eContestantStatus[gContestPlayerMonIndex].currMove, sizeof(eContestantStatus[gContestPlayerMonIndex].currMove)) == TRUE)
- gTasks[taskId].data[0]++;
- }
- break;
- case 1:
- if (sub_80FC55C())
- {
- for (i = 0; i < gNumLinkContestPlayers; i++)
- eContestantStatus[i].currMove = gBlockRecvBuffer[i][0];
-
- gTasks[taskId].data[0]++;
- }
- break;
- default:
- gTasks[taskId].data[0] = 0;
- SwitchTaskToFollowupFunc(taskId);
- break;
- }
-}
-
-void sub_80FCACC(u8 taskId)
-{
- switch (gTasks[taskId].data[0])
- {
- case 0:
- if (IsLinkTaskFinished())
- {
- if (sub_80FC4F4(gUnknown_02039F08, sizeof(gUnknown_02039F08)) == 1)
- gTasks[taskId].data[0]++;
- }
- break;
- case 1:
- if (sub_80FC55C())
- {
- memcpy(gUnknown_02039F08, gBlockRecvBuffer[gUnknown_02039F2B], sizeof(gUnknown_02039F08));
- gTasks[taskId].data[0]++;
- }
- break;
- case 2:
- case 5:
- case 8:
- case 11:
- if (gTasks[taskId].data[1]++ > 10)
- {
- gTasks[taskId].data[1] = 0;
- gTasks[taskId].data[0]++;
- }
- break;
- case 3:
- if (IsLinkTaskFinished())
- {
- if (sub_80FC4F4(gUnknown_02039F10, sizeof(gUnknown_02039F10)) == 1)
- gTasks[taskId].data[0]++;
- }
- break;
- case 4:
- if (sub_80FC55C())
- {
- memcpy(gUnknown_02039F10, gBlockRecvBuffer[gUnknown_02039F2B], sizeof(gUnknown_02039F10));
- gTasks[taskId].data[0]++;
- }
- break;
- case 6:
- if (IsLinkTaskFinished())
- {
- if (sub_80FC4F4(gUnknown_02039F18, sizeof(gUnknown_02039F18)) == 1)
- gTasks[taskId].data[0]++;
- }
- break;
- case 7:
- if (sub_80FC55C())
- {
- memcpy(gUnknown_02039F18, gBlockRecvBuffer[gUnknown_02039F2B], sizeof(gUnknown_02039F18));
- gTasks[taskId].data[0]++;
- }
- break;
- case 9:
- if (IsLinkTaskFinished())
- {
- if (sub_80FC4F4(gContestFinalStandings, sizeof(gContestFinalStandings)) == 1)
- gTasks[taskId].data[0]++;
- }
- break;
- case 10:
- if (sub_80FC55C())
- {
- memcpy(gContestFinalStandings, gBlockRecvBuffer[gUnknown_02039F2B], sizeof(gContestFinalStandings));
- gTasks[taskId].data[0]++;
- }
- break;
- default:
- gTasks[taskId].data[0] = 0;
- SwitchTaskToFollowupFunc(taskId);
- break;
- }
-}
-
-void sub_80FCC88(u8 taskId)
-{
- switch (gTasks[taskId].data[0])
- {
- case 0:
- if (IsLinkTaskFinished())
- {
- if (sub_80FC4F4(eContestantStatus, 4 * sizeof(struct ContestantStatus)) == 1)
- gTasks[taskId].data[0]++;
- }
- break;
- case 1:
- if (sub_80FC55C())
- {
- memcpy(eContestantStatus, gBlockRecvBuffer[gUnknown_02039F2B], 4 * sizeof(struct ContestantStatus));
- gTasks[taskId].data[0]++;
- }
- break;
- case 2:
- case 5:
- case 8:
- case 11:
- if (gTasks[taskId].data[1]++ > 10)
- {
- gTasks[taskId].data[1] = 0;
- gTasks[taskId].data[0]++;
- }
- break;
- case 3:
- if (IsLinkTaskFinished())
- {
- if (sub_80FC4F4(gContestResources->field_8, sizeof(struct UnknownContestStruct7)) == 1)
- gTasks[taskId].data[0]++;
- }
- break;
- case 4:
- if (sub_80FC55C())
- {
- memcpy(gContestResources->field_8, gBlockRecvBuffer[gUnknown_02039F2B], sizeof(struct UnknownContestStruct7));
- gTasks[taskId].data[0]++;
- }
- break;
- case 6:
- if (IsLinkTaskFinished())
- {
- if (sub_80FC4F4(gContestResources->field_10, sizeof(struct UnknownContestStruct5)) == 1)
- gTasks[taskId].data[0]++;
- }
- break;
- case 7:
- if (sub_80FC55C())
- {
- memcpy(gContestResources->field_10, gBlockRecvBuffer[gUnknown_02039F2B], sizeof(struct UnknownContestStruct5));
- gTasks[taskId].data[0]++;
- }
- break;
- case 9:
- if (IsLinkTaskFinished())
- {
- if (sub_80FC4F4(gContestantTurnOrder, sizeof(gContestantTurnOrder)) == 1)
- gTasks[taskId].data[0]++;
- }
- break;
- case 10:
- if (sub_80FC55C())
- {
- memcpy(gContestantTurnOrder, gBlockRecvBuffer[gUnknown_02039F2B], sizeof(gContestantTurnOrder));
- gTasks[taskId].data[0]++;
- }
- break;
- default:
- gTasks[taskId].data[0] = 0;
- SwitchTaskToFollowupFunc(taskId);
- break;
- }
-}
-
-void sub_80FCE48(u8 taskId)
-{
- int i;
-
- if (!sub_80FC670(&gTasks[taskId].data[12]))
- return;
-
- switch (gTasks[taskId].data[0])
- {
- case 0:
- gBlockSendBuffer[0] = 0x6E;
- if (GetMultiplayerId() == 0)
- {
- if (IsLinkTaskFinished())
- gTasks[taskId].data[0] = 10;
- }
- else
- {
- gTasks[taskId].data[0]++;
- }
- break;
- case 1:
- if (sub_80FC55C())
- {
- for (i = 0; i < 4; i++)
- gTasks[taskId].data[i + 5] = gBlockRecvBuffer[i][0];
-
- gTasks[taskId].data[0]++;
- }
- break;
- case 10:
- if (++gTasks[taskId].data[11] > 10)
- {
- sub_800A4D8(2);
- gTasks[taskId].data[0] = 1;
- }
- break;
- default:
- gTasks[taskId].data[0] = 0;
- gTasks[taskId].data[11] = 0;
- gTasks[taskId].data[12] = 0;
- SwitchTaskToFollowupFunc(taskId);
- break;
- }
-}
-
-void sub_80FCF40(u8 taskId)
-{
- if (!sub_80FC670(&gTasks[taskId].data[12]))
- return;
-
- switch (gTasks[taskId].data[0])
- {
- case 0:
- if (IsLinkTaskFinished())
- {
- if (sub_80FC4F4(gContestMonConditions, sizeof(gContestMonConditions)) == 1)
- gTasks[taskId].data[0]++;
- }
- break;
- case 1:
- if (sub_80FC55C())
- {
- memcpy(gContestMonConditions, gBlockRecvBuffer[gUnknown_02039F2B], sizeof(gContestMonConditions));
- gTasks[taskId].data[0]++;
- }
- break;
- default:
- gTasks[taskId].data[0] = 0;
- gTasks[taskId].data[12] = 0;
- SwitchTaskToFollowupFunc(taskId);
- break;
- }
-}
-
-void sub_80FCFD0(u8 taskId)
-{
- if (!sub_80FC670(&gTasks[taskId].data[12]))
- return;
-
- switch (gTasks[taskId].data[0])
- {
- case 0:
- if (IsLinkTaskFinished())
- {
- if (sub_80FC4F4(gContestantTurnOrder, sizeof(gContestantTurnOrder)) == 1)
- gTasks[taskId].data[0]++;
- }
- break;
- case 1:
- if (sub_80FC55C())
- {
- memcpy(gContestantTurnOrder, gBlockRecvBuffer[gUnknown_02039F2B], sizeof(gContestantTurnOrder));
- gTasks[taskId].data[0]++;
- }
- break;
- default:
- gTasks[taskId].data[0] = 0;
- gTasks[taskId].data[12] = 0;
- SwitchTaskToFollowupFunc(taskId);
- break;
- }
-}
diff --git a/src/contest_link_81D9DE4.c b/src/contest_link_81D9DE4.c
deleted file mode 100644
index 8060b6cdc..000000000
--- a/src/contest_link_81D9DE4.c
+++ /dev/null
@@ -1,331 +0,0 @@
-#include "global.h"
-#include "contest.h"
-#include "event_data.h"
-#include "link.h"
-#include "random.h"
-#include "task.h"
-
-static void sub_81D9F14(u8);
-static void sub_81D9F30(u8);
-static void sub_81D9F4C(u8);
-static void sub_81D9F68(u8);
-static void sub_81DA10C(u8);
-static void sub_81DA138(u8);
-static void sub_81DA160(u8);
-static void sub_81DA244(u8);
-static void sub_81DA2E8(u8);
-static void sub_81DA3B8(u8);
-static void sub_81DA488(u8);
-
-void sub_81D9DE4(u8 taskId)
-{
- int gameCleared;
-
- switch (gTasks[taskId].data[9])
- {
- case 0:
- gHighestRibbonRank = GetMonData(&gPlayerParty[gContestMonPartyIndex], MON_DATA_COOL_RIBBON);
- break;
- case 1:
- gHighestRibbonRank = GetMonData(&gPlayerParty[gContestMonPartyIndex], MON_DATA_BEAUTY_RIBBON);
- break;
- case 2:
- gHighestRibbonRank = GetMonData(&gPlayerParty[gContestMonPartyIndex], MON_DATA_CUTE_RIBBON);
- break;
- case 3:
- gHighestRibbonRank = GetMonData(&gPlayerParty[gContestMonPartyIndex], MON_DATA_SMART_RIBBON);
- break;
- case 4:
- default:
- gHighestRibbonRank = GetMonData(&gPlayerParty[gContestMonPartyIndex], MON_DATA_TOUGH_RIBBON);
- break;
- }
-
- gContestMons[gContestPlayerMonIndex].unk2C[0] = gHighestRibbonRank;
- gameCleared = FlagGet(FLAG_SYS_GAME_CLEAR) > 0;
- gContestMons[gContestPlayerMonIndex].unk2C[1] = gameCleared;
- SetTaskFuncWithFollowupFunc(taskId, sub_81DA160, sub_81D9F14);
-}
-
-static void sub_81D9F14(u8 taskId)
-{
- SetTaskFuncWithFollowupFunc(taskId, sub_81DA244, sub_81D9F30);
-}
-
-static void sub_81D9F30(u8 taskId)
-{
- SetTaskFuncWithFollowupFunc(taskId, sub_81DA2E8, sub_81D9F4C);
-}
-
-static void sub_81D9F4C(u8 taskId)
-{
- SetTaskFuncWithFollowupFunc(taskId, sub_81DA3B8, sub_81D9F68);
-}
-
-static void sub_81D9F68(u8 taskId)
-{
- u8 i;
- u8 rank;
- int gameCleared;
- u8 data1[4];
- u8 data2[4];
-
- memset(data1, 0, sizeof(data1));
- memset(data2, 0, sizeof(data2));
-
- for (i = 0; i < gNumLinkContestPlayers; i++)
- data1[i] = gTasks[taskId].data[i + 1];
-
- i = 0;
- if (i < gNumLinkContestPlayers)
- {
- while (++i < gNumLinkContestPlayers)
- {
- if (data1[0] != data1[i])
- break;
- }
- }
-
- if (i == gNumLinkContestPlayers)
- gSpecialVar_0x8004 = 0;
- else
- gSpecialVar_0x8004 = 1;
-
- for (i = 0; i < gNumLinkContestPlayers; i++)
- data2[i] = gTasks[taskId].data[i + 5];
-
- if (gNumLinkContestPlayers != 4 && GetMultiplayerId() == 0)
- {
- rank = gContestMons[0].unk2C[0];
- for (i = 1; i < gNumLinkContestPlayers; i++)
- {
- if (rank < gContestMons[i].unk2C[0])
- rank = gContestMons[i].unk2C[0];
- }
-
- if (rank)
- rank--;
-
- gameCleared = 1;
- for (i = 0; i < gNumLinkContestPlayers; i++)
- {
- if (!gContestMons[i].unk2C[1])
- {
- gameCleared = 0;
- break;
- }
- }
-
- sub_80DACBC(data1[0], rank, gameCleared);
- }
-
- gUnknown_02039F2B = sub_80F86E0(data2);
- if (gNumLinkContestPlayers < 4)
- SetTaskFuncWithFollowupFunc(taskId, sub_81DA488, sub_81DA10C);
- else
- gTasks[taskId].func = sub_81DA10C;
-}
-
-static void sub_81DA10C(u8 taskId)
-{
- sub_80DB09C(gSpecialVar_ContestCategory);
- SetTaskFuncWithFollowupFunc(taskId, sub_80FCF40, sub_81DA138);
-}
-
-static void sub_81DA138(u8 taskId)
-{
- SortContestants(FALSE);
- SetTaskFuncWithFollowupFunc(taskId, sub_80FCFD0, sub_80F8714);
-}
-
-static void sub_81DA160(u8 taskId)
-{
- int i;
-
- if (!sub_80FC670(&gTasks[taskId].data[12]))
- return;
-
- switch (gTasks[taskId].data[0])
- {
- default:
- gTasks[taskId].data[0] = 0;
- gTasks[taskId].data[12] = 0;
- SwitchTaskToFollowupFunc(taskId);
- break;
- case 0:
- if (IsLinkTaskFinished())
- {
- if (sub_80FC4F4(&gContestMons[gContestPlayerMonIndex], sizeof(struct ContestPokemon)) == 1)
- gTasks[taskId].data[0]++;
- }
- break;
- case 1:
- if (sub_80FC55C())
- {
- for (i = 0; i < gNumLinkContestPlayers; i++)
- {
- memcpy(&gContestMons[i], gBlockRecvBuffer[i], sizeof(struct ContestPokemon));
- sub_80DFA08(&gContestMons[i], gLinkPlayers[i].language);
- }
-
- gTasks[taskId].data[0]++;
- }
- break;
- }
-}
-
-static void sub_81DA244(u8 taskId)
-{
- if (!sub_80FC670(&gTasks[taskId].data[12]))
- return;
-
- switch (gTasks[taskId].data[0])
- {
- default:
- gTasks[taskId].data[0] = 0;
- gTasks[taskId].data[12] = 0;
- SwitchTaskToFollowupFunc(taskId);
- break;
- case 0:
- if (GetMultiplayerId() == 0)
- {
- if (!IsLinkTaskFinished())
- return;
-
- if (sub_80FC4F4(&gRngValue, sizeof(gRngValue)) == 1)
- gTasks[taskId].data[0]++;
- }
- else
- {
- gTasks[taskId].data[0]++;
- }
- break;
- case 1:
- if (sub_80FC530(0))
- {
- memcpy(&gRngValue, gBlockRecvBuffer[0], sizeof(gRngValue));
- memcpy(&gContestRngValue, gBlockRecvBuffer[0], sizeof(gContestRngValue));
- gTasks[taskId].data[0]++;
- }
- break;
- }
-}
-
-static void sub_81DA2E8(u8 taskId)
-{
- int i;
- u16 data[4];
- u16 var0;
-
- if (!sub_80FC670(&gTasks[taskId].data[12]))
- return;
-
- switch (gTasks[taskId].data[0])
- {
- default:
- gTasks[taskId].data[0] = 0;
- gTasks[taskId].data[12] = 0;
- SwitchTaskToFollowupFunc(taskId);
- break;
- case 0:
- if (IsLinkTaskFinished())
- {
- var0 = 0x6E;
- if (sub_80FC4F4(&var0, sizeof(var0)) == 1)
- gTasks[taskId].data[0]++;
- }
- break;
- case 1:
- if (sub_80FC55C())
- {
- for (i = 0; i < gNumLinkContestPlayers; i++)
- {
- data[i] = gBlockRecvBuffer[i][0];
- gTasks[taskId].data[i + 5] = data[i];
- }
-
- gTasks[taskId].data[0]++;
- }
- break;
- }
-}
-
-static void sub_81DA3B8(u8 taskId)
-{
- int i;
- u16 data[4];
- u16 var0;
-
- if (!sub_80FC670(&gTasks[taskId].data[12]))
- return;
-
- switch (gTasks[taskId].data[0])
- {
- default:
- gTasks[taskId].data[0] = 0;
- gTasks[taskId].data[12] = 0;
- SwitchTaskToFollowupFunc(taskId);
- break;
- case 0:
- if (IsLinkTaskFinished())
- {
- var0 = gTasks[taskId].data[9];
- if (sub_80FC4F4(&var0, sizeof(var0)) == 1)
- gTasks[taskId].data[0]++;
- }
- break;
- case 1:
- if (sub_80FC55C())
- {
- for (i = 0; i < gNumLinkContestPlayers; i++)
- {
- data[i] = gBlockRecvBuffer[i][0];
- gTasks[taskId].data[i + 1] = data[i];
- }
-
- gTasks[taskId].data[0]++;
- }
- break;
- }
-}
-
-static void sub_81DA488(u8 taskId)
-{
- int i;
-
- if (!sub_80FC670(&gTasks[taskId].data[12]))
- return;
-
- switch (gTasks[taskId].data[0])
- {
- default:
- gTasks[taskId].data[0] = 0;
- gTasks[taskId].data[12] = 0;
- SwitchTaskToFollowupFunc(taskId);
- break;
- case 0:
- if (GetMultiplayerId() == 0)
- {
- if (!IsLinkTaskFinished())
- return;
-
- if (sub_80FC4F4(&gContestMons[gNumLinkContestPlayers], (4 - gNumLinkContestPlayers) * sizeof(struct ContestPokemon)) == 1)
- gTasks[taskId].data[0]++;
- }
- else
- {
- gTasks[taskId].data[0]++;
- }
- break;
- case 1:
- if (sub_80FC530(0))
- {
- memcpy(&gContestMons[gNumLinkContestPlayers], gBlockRecvBuffer[0], (4 - gNumLinkContestPlayers) * sizeof(struct ContestPokemon));
- for (i = gNumLinkContestPlayers; i < 4; i++)
- sub_80DFA08(&gContestMons[i], gLinkPlayers[0].language);
-
- gTasks[taskId].data[0]++;
- }
- break;
- }
-}
diff --git a/src/contest_link_util.c b/src/contest_link_util.c
new file mode 100644
index 000000000..31ffb5fdb
--- /dev/null
+++ b/src/contest_link_util.c
@@ -0,0 +1,344 @@
+#include "global.h"
+#include "contest.h"
+#include "contest_link.h"
+#include "event_data.h"
+#include "link.h"
+#include "random.h"
+#include "task.h"
+
+/*
+ The functions in this file handle preliminary communication
+ for Emerald-only link contests. If the link contest has an RS
+ player linked, none of these functions are used.
+
+ The equivalent functions for RS-linked contests are spread
+ between contest_link.c and contest_util.c, and are suffixed RS
+ instead of Em
+*/
+
+static void Task_LinkContest_CommunicateMonsEm(u8);
+static void Task_LinkContest_StartCommunicateRngEm(u8);
+static void Task_LinkContest_CommunicateRngEm(u8);
+static void Task_LinkContest_StartCommunicateLeaderIdsEm(u8);
+static void Task_LinkContest_CommunicateLeaderIdsEm(u8);
+static void Task_LinkContest_StartCommunicateCategoryEm(u8);
+static void Task_LinkContest_CommunicateCategoryEm(u8);
+static void Task_LinkContest_SetUpContestEm(u8);
+static void Task_LinkContest_CommunicateAIMonsEm(u8);
+static void Task_LinkContest_CalculateRound1Em(u8);
+static void Task_LinkContest_CalculateTurnOrderEm(u8);
+
+#define tCategory data[9]
+
+void Task_LinkContest_StartCommunicationEm(u8 taskId)
+{
+ int gameCleared;
+
+ switch (gTasks[taskId].tCategory)
+ {
+ case CONTEST_CATEGORY_COOL:
+ gHighestRibbonRank = GetMonData(&gPlayerParty[gContestMonPartyIndex], MON_DATA_COOL_RIBBON);
+ break;
+ case CONTEST_CATEGORY_BEAUTY:
+ gHighestRibbonRank = GetMonData(&gPlayerParty[gContestMonPartyIndex], MON_DATA_BEAUTY_RIBBON);
+ break;
+ case CONTEST_CATEGORY_CUTE:
+ gHighestRibbonRank = GetMonData(&gPlayerParty[gContestMonPartyIndex], MON_DATA_CUTE_RIBBON);
+ break;
+ case CONTEST_CATEGORY_SMART:
+ gHighestRibbonRank = GetMonData(&gPlayerParty[gContestMonPartyIndex], MON_DATA_SMART_RIBBON);
+ break;
+ case CONTEST_CATEGORY_TOUGH:
+ default:
+ gHighestRibbonRank = GetMonData(&gPlayerParty[gContestMonPartyIndex], MON_DATA_TOUGH_RIBBON);
+ break;
+ }
+
+ gContestMons[gContestPlayerMonIndex].highestRank = gHighestRibbonRank;
+ gameCleared = FlagGet(FLAG_SYS_GAME_CLEAR) > 0;
+ gContestMons[gContestPlayerMonIndex].gameCleared = gameCleared;
+ SetTaskFuncWithFollowupFunc(taskId, Task_LinkContest_CommunicateMonsEm, Task_LinkContest_StartCommunicateRngEm);
+}
+
+static void Task_LinkContest_StartCommunicateRngEm(u8 taskId)
+{
+ SetTaskFuncWithFollowupFunc(taskId, Task_LinkContest_CommunicateRngEm, Task_LinkContest_StartCommunicateLeaderIdsEm);
+}
+
+static void Task_LinkContest_StartCommunicateLeaderIdsEm(u8 taskId)
+{
+ SetTaskFuncWithFollowupFunc(taskId, Task_LinkContest_CommunicateLeaderIdsEm, Task_LinkContest_StartCommunicateCategoryEm);
+}
+
+static void Task_LinkContest_StartCommunicateCategoryEm(u8 taskId)
+{
+ SetTaskFuncWithFollowupFunc(taskId, Task_LinkContest_CommunicateCategoryEm, Task_LinkContest_SetUpContestEm);
+}
+
+static void Task_LinkContest_SetUpContestEm(u8 taskId)
+{
+ u8 i;
+ u8 rank;
+ int gameCleared;
+ u8 categories[CONTESTANT_COUNT];
+ u8 leaderIds[CONTESTANT_COUNT];
+
+ memset(categories, 0, sizeof(categories));
+ memset(leaderIds, 0, sizeof(leaderIds));
+
+ for (i = 0; i < gNumLinkContestPlayers; i++)
+ categories[i] = gTasks[taskId].data[i + 1];
+
+ // Ensure all players are doing the same category
+ for (i = 0; i < gNumLinkContestPlayers && categories[0] == categories[i]; i++)
+ ;
+
+ if (i == gNumLinkContestPlayers)
+ gSpecialVar_0x8004 = FALSE; // Category choices the same
+ else
+ gSpecialVar_0x8004 = TRUE; // Category choices differ
+
+ for (i = 0; i < gNumLinkContestPlayers; i++)
+ leaderIds[i] = gTasks[taskId].data[i + 5];
+
+ // If < 4 players and player is leader, set AI contestants based on rank and game clear
+ if (gNumLinkContestPlayers != CONTESTANT_COUNT && GetMultiplayerId() == 0)
+ {
+ rank = gContestMons[0].highestRank;
+ for (i = 1; i < gNumLinkContestPlayers; i++)
+ {
+ if (rank < gContestMons[i].highestRank)
+ rank = gContestMons[i].highestRank;
+ }
+
+ if (rank)
+ rank--;
+
+ gameCleared = TRUE;
+ for (i = 0; i < gNumLinkContestPlayers; i++)
+ {
+ if (!gContestMons[i].gameCleared)
+ {
+ gameCleared = FALSE;
+ break;
+ }
+ }
+
+ SetLinkAIContestants(categories[0], rank, gameCleared);
+ }
+
+ // Assign link leader. After initial communication all players will read data only from them
+ gContestLinkLeaderIndex = LinkContest_GetLeaderIndex(leaderIds);
+
+ if (gNumLinkContestPlayers < CONTESTANT_COUNT)
+ SetTaskFuncWithFollowupFunc(taskId, Task_LinkContest_CommunicateAIMonsEm, Task_LinkContest_CalculateRound1Em);
+ else
+ gTasks[taskId].func = Task_LinkContest_CalculateRound1Em;
+}
+
+static void Task_LinkContest_CalculateRound1Em(u8 taskId)
+{
+ CalculateRound1Points(gSpecialVar_ContestCategory);
+ SetTaskFuncWithFollowupFunc(taskId, Task_LinkContest_CommunicateRound1Points, Task_LinkContest_CalculateTurnOrderEm);
+}
+
+static void Task_LinkContest_CalculateTurnOrderEm(u8 taskId)
+{
+ SortContestants(FALSE);
+ SetTaskFuncWithFollowupFunc(taskId, Task_LinkContest_CommunicateTurnOrder, Task_LinkContest_FinalizeConnection);
+}
+
+static void Task_LinkContest_CommunicateMonsEm(u8 taskId)
+{
+ int i;
+
+ if (!LinkContest_TryLinkStandby(&gTasks[taskId].data[12]))
+ return;
+
+ switch (gTasks[taskId].data[0])
+ {
+ default:
+ gTasks[taskId].data[0] = 0;
+ gTasks[taskId].data[12] = 0;
+ SwitchTaskToFollowupFunc(taskId);
+ break;
+ case 0:
+ if (IsLinkTaskFinished())
+ {
+ if (LinkContest_SendBlock(&gContestMons[gContestPlayerMonIndex], sizeof(struct ContestPokemon)) == 1)
+ gTasks[taskId].data[0]++;
+ }
+ break;
+ case 1:
+ if (LinkContest_GetBlockReceivedFromAllPlayers())
+ {
+ for (i = 0; i < gNumLinkContestPlayers; i++)
+ {
+ memcpy(&gContestMons[i], gBlockRecvBuffer[i], sizeof(struct ContestPokemon));
+ StripPlayerAndMonNamesForLinkContest(&gContestMons[i], gLinkPlayers[i].language);
+ }
+
+ gTasks[taskId].data[0]++;
+ }
+ break;
+ }
+}
+
+static void Task_LinkContest_CommunicateRngEm(u8 taskId)
+{
+ if (!LinkContest_TryLinkStandby(&gTasks[taskId].data[12]))
+ return;
+
+ switch (gTasks[taskId].data[0])
+ {
+ default:
+ gTasks[taskId].data[0] = 0;
+ gTasks[taskId].data[12] = 0;
+ SwitchTaskToFollowupFunc(taskId);
+ break;
+ case 0:
+ if (GetMultiplayerId() == 0)
+ {
+ // Only the leader sends the RNG seed
+ if (!IsLinkTaskFinished())
+ return;
+
+ if (LinkContest_SendBlock(&gRngValue, sizeof(gRngValue)) == 1)
+ gTasks[taskId].data[0]++;
+ }
+ else
+ {
+ // Other link members skip to waiting
+ gTasks[taskId].data[0]++;
+ }
+ break;
+ case 1:
+ // Wait to receive RNG data
+ if (LinkContest_GetBlockReceived(0))
+ {
+ memcpy(&gRngValue, gBlockRecvBuffer[0], sizeof(gRngValue));
+ memcpy(&gContestRngValue, gBlockRecvBuffer[0], sizeof(gContestRngValue));
+ gTasks[taskId].data[0]++;
+ }
+ break;
+ }
+}
+
+static void Task_LinkContest_CommunicateLeaderIdsEm(u8 taskId)
+{
+ int i;
+ u16 data[CONTESTANT_COUNT];
+ u16 leaderId;
+
+ if (!LinkContest_TryLinkStandby(&gTasks[taskId].data[12]))
+ return;
+
+ switch (gTasks[taskId].data[0])
+ {
+ default:
+ gTasks[taskId].data[0] = 0;
+ gTasks[taskId].data[12] = 0;
+ SwitchTaskToFollowupFunc(taskId);
+ break;
+ case 0:
+ if (IsLinkTaskFinished())
+ {
+ leaderId = 0x6E;
+ if (LinkContest_SendBlock(&leaderId, sizeof(leaderId)) == 1)
+ gTasks[taskId].data[0]++;
+ }
+ break;
+ case 1:
+ if (LinkContest_GetBlockReceivedFromAllPlayers())
+ {
+ for (i = 0; i < gNumLinkContestPlayers; i++)
+ {
+ data[i] = gBlockRecvBuffer[i][0];
+ gTasks[taskId].data[i + 5] = data[i];
+ }
+
+ gTasks[taskId].data[0]++;
+ }
+ break;
+ }
+}
+
+static void Task_LinkContest_CommunicateCategoryEm(u8 taskId)
+{
+ int i;
+ u16 data[CONTESTANT_COUNT];
+ u16 category;
+
+ if (!LinkContest_TryLinkStandby(&gTasks[taskId].data[12]))
+ return;
+
+ switch (gTasks[taskId].data[0])
+ {
+ default:
+ gTasks[taskId].data[0] = 0;
+ gTasks[taskId].data[12] = 0;
+ SwitchTaskToFollowupFunc(taskId);
+ break;
+ case 0:
+ if (IsLinkTaskFinished())
+ {
+ category = gTasks[taskId].tCategory;
+ if (LinkContest_SendBlock(&category, sizeof(category)) == 1)
+ gTasks[taskId].data[0]++;
+ }
+ break;
+ case 1:
+ if (LinkContest_GetBlockReceivedFromAllPlayers())
+ {
+ for (i = 0; i < gNumLinkContestPlayers; i++)
+ {
+ data[i] = gBlockRecvBuffer[i][0];
+ gTasks[taskId].data[i + 1] = data[i];
+ }
+
+ gTasks[taskId].data[0]++;
+ }
+ break;
+ }
+}
+
+static void Task_LinkContest_CommunicateAIMonsEm(u8 taskId)
+{
+ int i;
+
+ if (!LinkContest_TryLinkStandby(&gTasks[taskId].data[12]))
+ return;
+
+ switch (gTasks[taskId].data[0])
+ {
+ default:
+ gTasks[taskId].data[0] = 0;
+ gTasks[taskId].data[12] = 0;
+ SwitchTaskToFollowupFunc(taskId);
+ break;
+ case 0:
+ if (GetMultiplayerId() == 0)
+ {
+ if (!IsLinkTaskFinished())
+ return;
+
+ if (LinkContest_SendBlock(&gContestMons[gNumLinkContestPlayers], (CONTESTANT_COUNT - gNumLinkContestPlayers) * sizeof(struct ContestPokemon)) == 1)
+ gTasks[taskId].data[0]++;
+ }
+ else
+ {
+ gTasks[taskId].data[0]++;
+ }
+ break;
+ case 1:
+ if (LinkContest_GetBlockReceived(0))
+ {
+ memcpy(&gContestMons[gNumLinkContestPlayers], gBlockRecvBuffer[0], (CONTESTANT_COUNT - gNumLinkContestPlayers) * sizeof(struct ContestPokemon));
+ for (i = gNumLinkContestPlayers; i < CONTESTANT_COUNT; i++)
+ StripPlayerAndMonNamesForLinkContest(&gContestMons[i], gLinkPlayers[0].language);
+
+ gTasks[taskId].data[0]++;
+ }
+ break;
+ }
+}
diff --git a/src/contest_painting.c b/src/contest_painting.c
index 7f33cac09..a0c39dfc7 100644
--- a/src/contest_painting.c
+++ b/src/contest_painting.c
@@ -170,7 +170,7 @@ void SetContestWinnerForPainting(int contestWinnerId)
u8 *ptr2 = &gUnknown_02039F5C;
gCurContestWinner = gSaveBlock1Ptr->contestWinners[contestWinnerId - 1];
*ptr1 = contestWinnerId - 1;
- *ptr2 = 0;
+ *ptr2 = FALSE;
}
void CB2_ContestPainting(void)
@@ -281,7 +281,7 @@ static void InitContestPaintingWindow(void)
ShowBg(1);
}
-static void PrintContestPaintingCaption(u8 contestType, u8 arg1)
+static void PrintContestPaintingCaption(u8 contestType, bool8 arg1)
{
int x;
u8 category;
@@ -384,8 +384,6 @@ static void InitContestMonPixels(u16 species, u8 whichSprite)
}
}
-#ifdef NONMATCHING
-// functionally equivalent.
static void _InitContestMonPixels(u8 *spriteGfx, u16 *palette, u16 (*destPixels)[64][64])
{
u16 tileY, tileX, pixelY, pixelX;
@@ -399,132 +397,30 @@ static void _InitContestMonPixels(u8 *spriteGfx, u16 *palette, u16 (*destPixels)
{
for (pixelX = 0; pixelX < 8; pixelX++)
{
- int offset = 32 * (8 * tileY + tileX) + (pixelY * 4 + pixelX / 2);
- colorIndex = spriteGfx[offset];
+ colorIndex = spriteGfx[((tileY * 8) + tileX) * 32 + (pixelY << 2) + (pixelX >> 1)];
if (pixelX & 1)
colorIndex >>= 4;
else
- colorIndex &= 0xF;
+ colorIndex &= 0xF; // %=16 works here too. Both match
- if (colorIndex == 0) // transparent pixel
- (*destPixels)[8 * tileY + pixelY][tileX * 8 + pixelX] = 0x8000;
+ if (colorIndex == 0) // transparent pixel
+ (*destPixels)[tileY * 8 + pixelY][tileX * 8 + pixelX] = 0x8000;
else
- (*destPixels)[8 * tileY + pixelY][tileX * 8 + pixelX] = palette[colorIndex];
+ (*destPixels)[tileY * 8 + pixelY][tileX * 8 + pixelX] = palette[colorIndex];
}
}
}
}
}
-#else
-NAKED
-static void _InitContestMonPixels(u8 *spriteGfx, u16 *palette, u16 (*destPixels)[64][64])
-{
- asm_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, 0xC\n\
- mov r10, r0\n\
- mov r9, r1\n\
- str r2, [sp]\n\
- movs r0, 0\n\
-_08130394:\n\
- movs r3, 0\n\
- adds r1, r0, 0x1\n\
- str r1, [sp, 0x4]\n\
- lsls r0, 3\n\
- str r0, [sp, 0x8]\n\
-_0813039E:\n\
- movs r1, 0\n\
- adds r2, r3, 0x1\n\
- mov r8, r2\n\
- ldr r7, [sp, 0x8]\n\
- adds r0, r7, r3\n\
- lsls r0, 5\n\
- mov r12, r0\n\
- lsls r4, r3, 3\n\
-_081303AE:\n\
- movs r3, 0\n\
- lsls r0, r1, 2\n\
- adds r6, r1, 0x1\n\
- mov r2, r12\n\
- adds r5, r2, r0\n\
- ldr r7, [sp, 0x8]\n\
- adds r0, r7, r1\n\
- lsls r0, 7\n\
- ldr r1, [sp]\n\
- adds r2, r0, r1\n\
-_081303C2:\n\
- lsrs r0, r3, 1\n\
- adds r0, r5, r0\n\
- add r0, r10\n\
- ldrb r1, [r0]\n\
- movs r0, 0x1\n\
- ands r0, r3\n\
- cmp r0, 0\n\
- beq _081303D6\n\
- lsrs r1, 4\n\
- b _081303DA\n\
-_081303D6:\n\
- movs r0, 0xF\n\
- ands r1, r0\n\
-_081303DA:\n\
- cmp r1, 0\n\
- bne _081303EC\n\
- adds r0, r4, r3\n\
- lsls r0, 1\n\
- adds r0, r2\n\
- movs r7, 0x80\n\
- lsls r7, 8\n\
- adds r1, r7, 0\n\
- b _081303F8\n\
-_081303EC:\n\
- adds r0, r4, r3\n\
- lsls r0, 1\n\
- adds r0, r2\n\
- lsls r1, 1\n\
- add r1, r9\n\
- ldrh r1, [r1]\n\
-_081303F8:\n\
- strh r1, [r0]\n\
- adds r0, r3, 0x1\n\
- lsls r0, 16\n\
- lsrs r3, r0, 16\n\
- cmp r3, 0x7\n\
- bls _081303C2\n\
- lsls r0, r6, 16\n\
- lsrs r1, r0, 16\n\
- cmp r1, 0x7\n\
- bls _081303AE\n\
- mov r1, r8\n\
- lsls r0, r1, 16\n\
- lsrs r3, r0, 16\n\
- cmp r3, 0x7\n\
- bls _0813039E\n\
- ldr r2, [sp, 0x4]\n\
- lsls r0, r2, 16\n\
- lsrs r0, 16\n\
- cmp r0, 0x7\n\
- bls _08130394\n\
- add sp, 0xC\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");
-}
-#endif
-static void LoadContestPaintingFrame(u8 contestWinnerId, u8 arg1)
+#define VRAM_PICTURE_DATA(x, y) (((u16 *)(BG_SCREEN_ADDR(12)))[(y) * 32 + (x)])
+
+static void LoadContestPaintingFrame(u8 contestWinnerId, bool8 arg1)
{
u8 x, y;
LoadPalette(gPictureFramePalettes, 0, 0x100);
- if (arg1 == 1)
+ if (arg1 == TRUE)
{
switch (gContestPaintingWinner->contestCategory / 3)
{
@@ -550,8 +446,6 @@ static void LoadContestPaintingFrame(u8 contestWinnerId, u8 arg1)
break;
}
-#define VRAM_PICTURE_DATA(x, y) (((u16 *)(BG_SCREEN_ADDR(12)))[(y) * 32 + (x)])
-
// Set the background
for (y = 0; y < 20; y++)
{
@@ -569,8 +463,6 @@ static void LoadContestPaintingFrame(u8 contestWinnerId, u8 arg1)
// Re-set the entire top row to the first top frame part
for (x = 0; x < 16; x++)
VRAM_PICTURE_DATA(x + 7, 2) = (*gContestMonPixels)[2][7];
-
-#undef VRAM_PICTURE_DATA
}
else if (contestWinnerId < 8)
{
@@ -605,6 +497,8 @@ static void LoadContestPaintingFrame(u8 contestWinnerId, u8 arg1)
}
}
+#undef VRAM_PICTURE_DATA
+
static void InitPaintingMonOamData(u8 contestWinnerId)
{
//Some hacks just to get the asm to match
@@ -692,7 +586,7 @@ static void DoContestPaintingImageProcessing(u8 imageEffect)
LoadPalette(gContestPaintingMonPalette, 0x100, 0x200);
}
-static void CreateContestPaintingPicture(u8 contestWinnerId, u8 arg1)
+static void CreateContestPaintingPicture(u8 contestWinnerId, bool8 arg1)
{
AllocPaintingResources();
InitContestMonPixels(gContestPaintingWinner->species, 0);
diff --git a/src/contest_util.c b/src/contest_util.c
new file mode 100644
index 000000000..123d3e8eb
--- /dev/null
+++ b/src/contest_util.c
@@ -0,0 +1,3018 @@
+#include "global.h"
+#include "malloc.h"
+#include "battle.h"
+#include "battle_gfx_sfx_util.h"
+#include "bg.h"
+#include "contest.h"
+#include "contest_util.h"
+#include "contest_link.h"
+#include "contest_painting.h"
+#include "data.h"
+#include "decompress.h"
+#include "dma3.h"
+#include "event_data.h"
+#include "event_object_movement.h"
+#include "field_specials.h"
+#include "gpu_regs.h"
+#include "graphics.h"
+#include "international_string_util.h"
+#include "link.h"
+#include "link_rfu.h"
+#include "load_save.h"
+#include "main.h"
+#include "overworld.h"
+#include "palette.h"
+#include "pokedex.h"
+#include "pokemon.h"
+#include "pokemon_icon.h"
+#include "random.h"
+#include "save.h"
+#include "scanline_effect.h"
+#include "script.h"
+#include "script_menu.h"
+#include "sound.h"
+#include "string_util.h"
+#include "strings.h"
+#include "task.h"
+#include "text.h"
+#include "trig.h"
+#include "tv.h"
+#include "util.h"
+#include "window.h"
+#include "constants/event_objects.h"
+#include "constants/field_specials.h"
+#include "constants/game_stat.h"
+#include "constants/rgb.h"
+#include "constants/songs.h"
+#include "constants/tv.h"
+#include "contest.h"
+
+enum {
+ SLIDING_TEXT_OFFSCREEN,
+ SLIDING_TEXT_ENTERING,
+ SLIDING_TEXT_ARRIVED,
+ SLIDING_TEXT_EXITING,
+};
+
+enum {
+ SLIDING_MON_ENTERED = 1,
+ SLIDING_MON_EXITED,
+};
+
+#define GET_CONTEST_WINNER_ID(i) { for ((i) = 0; (i) < CONTESTANT_COUNT && gContestFinalStandings[(i)] != 0; (i)++); }
+
+#define TAG_CONFETTI 3017
+
+#define MAX_BAR_LENGTH 87
+
+struct ContestResultsInternal
+{
+ u8 slidingTextBoxSpriteId;
+ u8 linkTextBoxSpriteId;
+ u8 showResultsTaskId;
+ u8 highlightWinnerTaskId;
+ u8 slidingTextBoxState;
+ u8 numStandingsPrinted;
+ u8 winnerMonSlidingState;
+ u8 confettiCount;
+ u8 winnerMonSpriteId;
+ bool8 destroyConfetti;
+ bool8 pointsFlashing;
+ s16 unkC[CONTESTANT_COUNT];
+ u8 numBarsUpdating;
+};
+
+struct ContestMonResults
+{
+ int relativePreliminaryPoints;
+ int relativeRound2Points;
+ u32 barLengthPreliminary;
+ u32 barLengthRound2;
+ bool8 lostPoints;
+ u8 numStars;
+ u8 numHearts;
+};
+
+struct ContestResults
+{
+ struct ContestResultsInternal *data;
+ struct ContestMonResults (*monResults)[CONTESTANT_COUNT];
+ u8 *unusedBg; // Allocated/freed, never used
+ u8 *tilemapBuffers[4];
+ u8 *unused; // Allocated/freed, never used
+};
+
+static EWRAM_DATA struct ContestResults *sContestResults = NULL;
+
+static void LoadAllContestMonIconPalettes(void);
+static void LoadContestResultsTilemaps(void);
+static u8 GetNumPreliminaryPoints(u8, bool8);
+static s8 GetNumRound2Points(u8, bool8);
+static void AddContestTextPrinter(int, u8 *, int);
+static void AllocContestResults(void);
+static void FreeContestResults(void);
+static void LoadAllContestMonIcons(u8, u8);
+static void LoadContestResultSprites(void);
+static void TryCreateWirelessSprites(void);
+static void Task_StartShowContestResults(u8 taskId);
+static void CB2_StartShowContestResults(void);
+static void Task_ShowContestResults(u8);
+static void CB2_ShowContestResults(void);
+static void VBlankCB_ShowContestResults(void);
+static void Task_SlideContestResultsBg(u8);
+static void Task_WaitForLinkPartnersBeforeResults(u8);
+static void Task_CommunicateMonIdxsForResults(u8);
+static void Task_WaitForLinkPartnerMonIdxs(u8);
+static void Task_AnnouncePreliminaryResults(u8);
+static void Task_FlashStarsAndHearts(u8);
+static void Task_ShowPreliminaryResults(u8);
+static void Task_AnnounceRound2Results(u8);
+static void Task_ShowRound2Results(u8);
+static void Task_AnnounceWinner(u8);
+static void Task_DrawFinalStandingNumber(u8);
+static void Task_StartHighlightWinnersBox(u8);
+static void Task_HighlightWinnersBox(u8);
+static void Task_ShowWinnerMonBanner(u8);
+static void Task_SetSeenWinnerMon(u8);
+static void Task_TryDisconnectLinkPartners(u8);
+static void Task_WaitForLinkPartnersDisconnect(u8);
+static void Task_TrySetContestInterviewData(u8);
+static void Task_EndShowContestResults(u8);
+static void CalculateContestantsResultData(void);
+static void ShowLinkResultsTextBox(const u8 *);
+static void HideLinkResultsTextBox(void);
+static s32 DrawResultsTextWindow(const u8 *, u8);
+static void StartTextBoxSlideIn(s16, u16, u16, u16);
+static void UpdateContestResultBars(bool8, u8);
+static void Task_UpdateContestResultBar(u8);
+static void StartTextBoxSlideOut(u16);
+static void BounceMonIconInBox(u8, u8);
+static void Task_BounceMonIconInBox(u8);
+static void SpriteCB_WinnerMonSlideIn(struct Sprite *);
+static void SpriteCB_WinnerMonSlideOut(struct Sprite *);
+static void Task_CreateConfetti(u8);
+static void SpriteCB_TextBoxSlideIn(struct Sprite *);
+static void SpriteCB_TextBoxSlideOut(struct Sprite *);
+static void SpriteCB_EndTextBoxSlideIn(struct Sprite *);
+static void Task_StartCommunication(u8);
+static void Task_StartCommunicateRngRS(u8);
+static void Task_StartCommunicateLeaderIdsRS(u8);
+static void Task_StartCommunicateCategoryRS(u8);
+static void Task_LinkContest_SetUpContestRS(u8);
+static void Task_LinkContest_CalculateTurnOrderRS(u8);
+static void Task_LinkContest_Disconnect(u8);
+static void Task_LinkContest_WaitDisconnect(u8);
+static void SpriteCB_Confetti(struct Sprite *sprite);
+static void Task_ShowContestEntryMonPic(u8 taskId);
+static void Task_LinkContestWaitForConnection(u8 taskId);
+
+extern const u16 gObjectEventPalette8[];
+extern const u16 gObjectEventPalette17[];
+extern const u16 gObjectEventPalette33[];
+extern const u16 gObjectEventPalette34[];
+
+static const u16 sUnknown_0858D6B0[] = INCBIN_U16("graphics/unknown/unknown_58D6B0.gbapal");
+static const u8 sUnknown_0858D6D0[] = INCBIN_U8("graphics/unknown/unknown_58D6D0.4bpp");
+static const u16 sMiscBlank_Pal[] = INCBIN_U16("graphics/interface/blank.gbapal");
+
+static const struct OamData sOamData_858D7F0 =
+{
+ .y = 0,
+ .affineMode = ST_OAM_AFFINE_OFF,
+ .objMode = ST_OAM_OBJ_NORMAL,
+ .mosaic = 0,
+ .bpp = ST_OAM_4BPP,
+ .shape = SPRITE_SHAPE(64x32),
+ .x = 0,
+ .matrixNum = 0,
+ .size = SPRITE_SIZE(64x32),
+ .tileNum = 0,
+ .priority = 3,
+ .paletteNum = 2,
+ .affineParam = 0,
+};
+
+static const struct SpriteTemplate sSpriteTemplate_858D7F8 =
+{
+ .tileTag = 3009,
+ .paletteTag = 3009,
+ .oam = &sOamData_858D7F0,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = SpriteCallbackDummy
+};
+
+static const struct SpriteSheet sUnknown_0858D810[] =
+{
+ { .data = gMiscBlank_Gfx, .size = 0x400, .tag = 3009 },
+ { .data = gMiscBlank_Gfx, .size = 0x400, .tag = 3010 },
+ { .data = gMiscBlank_Gfx, .size = 0x400, .tag = 3011 },
+ { .data = gMiscBlank_Gfx, .size = 0x400, .tag = 3012 },
+ { .data = gMiscBlank_Gfx, .size = 0x400, .tag = 3013 },
+ { .data = gMiscBlank_Gfx, .size = 0x400, .tag = 3014 },
+ { .data = gMiscBlank_Gfx, .size = 0x400, .tag = 3015 },
+ { .data = gMiscBlank_Gfx, .size = 0x400, .tag = 3016 },
+};
+
+static const struct SpritePalette sUnknown_0858D850 =
+{
+ .data = sMiscBlank_Pal,
+ .tag = 3009,
+};
+
+static const struct OamData sOamData_Confetti =
+{
+ .y = 0,
+ .affineMode = ST_OAM_AFFINE_OFF,
+ .objMode = ST_OAM_OBJ_NORMAL,
+ .mosaic = 0,
+ .bpp = ST_OAM_4BPP,
+ .shape = SPRITE_SHAPE(8x8),
+ .x = 0,
+ .matrixNum = 0,
+ .size = SPRITE_SIZE(8x8),
+ .tileNum = 0,
+ .priority = 0,
+ .paletteNum = 0,
+ .affineParam = 0,
+};
+
+static const struct SpriteTemplate sSpriteTemplate_Confetti =
+{
+ .tileTag = TAG_CONFETTI,
+ .paletteTag = TAG_CONFETTI,
+ .oam = &sOamData_Confetti,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = SpriteCB_Confetti
+};
+
+static const struct CompressedSpriteSheet sSpriteSheet_Confetti =
+{
+ .data = gConfetti_Gfx,
+ .size = 0x220,
+ .tag = TAG_CONFETTI
+};
+
+
+static const struct CompressedSpritePalette sSpritePalette_Confetti =
+{
+ .data = gConfetti_Pal,
+ .tag = TAG_CONFETTI
+};
+
+static const struct BgTemplate sBgTemplates[] =
+{
+ {
+ .bg = 0,
+ .charBaseIndex = 0,
+ .mapBaseIndex = 30,
+ .screenSize = 0,
+ .paletteMode = 0,
+ .priority = 0,
+ .baseTile = 0,
+ },
+ {
+ .bg = 1,
+ .charBaseIndex = 0,
+ .mapBaseIndex = 24,
+ .screenSize = 0,
+ .paletteMode = 0,
+ .priority = 3,
+ .baseTile = 0,
+ },
+ {
+ .bg = 2,
+ .charBaseIndex = 0,
+ .mapBaseIndex = 28,
+ .screenSize = 0,
+ .paletteMode = 0,
+ .priority = 3,
+ .baseTile = 0,
+ },
+ {
+ .bg = 3,
+ .charBaseIndex = 0,
+ .mapBaseIndex = 26,
+ .screenSize = 0,
+ .paletteMode = 0,
+ .priority = 3,
+ .baseTile = 0,
+ }
+};
+
+static const struct WindowTemplate sWindowTemplates[] =
+{
+ {
+ .bg = 1,
+ .tilemapLeft = 7,
+ .tilemapTop = 4,
+ .width = 12,
+ .height = 2,
+ .paletteNum = 15,
+ .baseBlock = 770
+ },
+ {
+ .bg = 1,
+ .tilemapLeft = 7,
+ .tilemapTop = 7,
+ .width = 12,
+ .height = 2,
+ .paletteNum = 15,
+ .baseBlock = 794
+ },
+ {
+ .bg = 1,
+ .tilemapLeft = 7,
+ .tilemapTop = 10,
+ .width = 12,
+ .height = 2,
+ .paletteNum = 15,
+ .baseBlock = 818
+ },
+ {
+ .bg = 1,
+ .tilemapLeft = 7,
+ .tilemapTop = 13,
+ .width = 12,
+ .height = 2,
+ .paletteNum = 15,
+ .baseBlock = 842
+ },
+ DUMMY_WIN_TEMPLATE,
+};
+
+static const struct OamData sUnknown_0858D8C0 =
+{
+ .y = 0,
+ .affineMode = ST_OAM_AFFINE_OFF,
+ .objMode = ST_OAM_OBJ_NORMAL,
+ .mosaic = 0,
+ .bpp = ST_OAM_4BPP,
+ .shape = SPRITE_SHAPE(16x16),
+ .x = 0,
+ .matrixNum = 0,
+ .size = SPRITE_SIZE(16x16),
+ .tileNum = 0,
+ .priority = 0,
+ .paletteNum = 0,
+ .affineParam = 0,
+};
+
+
+static const struct SpriteTemplate sSpriteTemplate_858D8C8 =
+{
+ .tileTag = 22222,
+ .paletteTag = 0,
+ .oam = &sUnknown_0858D8C0,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = SpriteCallbackDummy
+};
+
+static const struct SpriteSheet sUnknown_0858D8E0 =
+{
+ .data = gMiscBlank_Gfx,
+ .size = 0x200,
+ .tag = 22222
+};
+
+static const u8 sContestLinkTextColors[4] = {TEXT_COLOR_WHITE, TEXT_DYNAMIC_COLOR_6, TEXT_DYNAMIC_COLOR_5};
+
+
+static void InitContestResultsDisplay(void)
+{
+ int i;
+
+ SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_OBJ_1D_MAP);
+ ResetBgsAndClearDma3BusyFlags(0);
+ InitBgsFromTemplates(0, sBgTemplates, ARRAY_COUNT(sBgTemplates));
+ for (i = 0; i < (int)ARRAY_COUNT(sContestResults->tilemapBuffers); i++)
+ SetBgTilemapBuffer(i, sContestResults->tilemapBuffers[i]);
+
+ InitWindows(sWindowTemplates);
+ DeactivateAllTextPrinters();
+ SetGpuReg(REG_OFFSET_MOSAIC, 0);
+ SetGpuReg(REG_OFFSET_WININ, WININ_WIN0_BG_ALL | WININ_WIN0_OBJ | WININ_WIN0_CLR | WININ_WIN1_BG_ALL | WININ_WIN1_OBJ | WININ_WIN1_CLR);
+ SetGpuReg(REG_OFFSET_WINOUT, WINOUT_WIN01_BG1 | WINOUT_WIN01_BG2 | WINOUT_WIN01_BG3 | WINOUT_WIN01_CLR | WINOUT_WINOBJ_BG_ALL | WINOUT_WINOBJ_OBJ | WINOUT_WINOBJ_CLR);
+ SetGpuReg(REG_OFFSET_WIN0H, 0);
+ SetGpuReg(REG_OFFSET_WIN0V, 0);
+ SetGpuReg(REG_OFFSET_WIN1H, 0);
+ SetGpuReg(REG_OFFSET_WIN1V, 0);
+ SetGpuReg(REG_OFFSET_BLDCNT, 0);
+ SetGpuReg(REG_OFFSET_BLDALPHA, 0);
+ SetGpuReg(REG_OFFSET_BLDY, 0);
+ SetGpuReg(REG_OFFSET_BG0HOFS, 0);
+ SetGpuReg(REG_OFFSET_BG0VOFS, 0);
+ SetGpuReg(REG_OFFSET_BG1HOFS, 0);
+ SetGpuReg(REG_OFFSET_BG1VOFS, 0);
+ SetGpuReg(REG_OFFSET_BG2HOFS, 0);
+ SetGpuReg(REG_OFFSET_BG2VOFS, 0);
+ SetGpuReg(REG_OFFSET_BG3HOFS, 0);
+ SetGpuReg(REG_OFFSET_BG3VOFS, 0);
+ SetGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_BG_ALL_ON | DISPCNT_OBJ_ON | DISPCNT_WIN0_ON | DISPCNT_WIN1_ON | DISPCNT_OBJWIN_ON);
+ gBattle_BG0_X = 0;
+ gBattle_BG0_Y = 0;
+ gBattle_BG1_X = 0;
+ gBattle_BG1_Y = 0;
+ gBattle_BG2_X = 0;
+ gBattle_BG2_Y = 0;
+ gBattle_BG3_X = 0;
+ gBattle_BG3_Y = 0;
+ gBattle_WIN0H = 0;
+ gBattle_WIN0V = 0;
+ gBattle_WIN1H = 0;
+ gBattle_WIN1V = 0;
+}
+
+static void LoadContestResultsBgGfx(void)
+{
+ int i, j;
+ s8 numStars, round2Points;
+ u16 tile1, tile2;
+
+ LZDecompressVram(gContestResults_Gfx, (void *)BG_CHAR_ADDR(0));
+ CopyToBgTilemapBuffer(3, gUnknown_08C1A12C, 0, 0);
+ CopyToBgTilemapBuffer(2, gUnknown_08C1A000, 0, 0);
+ CopyToBgTilemapBuffer(0, gUnknown_08C19EEC, 0, 0);
+ LoadContestResultsTilemaps();
+ LoadCompressedPalette(gContestResults_Pal, 0, 0x200);
+ LoadPalette(sUnknown_0858D6B0, 0xF0, 0x20);
+
+ for (i = 0; i < CONTESTANT_COUNT; i++)
+ {
+ numStars = GetNumPreliminaryPoints(i, TRUE);
+ round2Points = GetNumRound2Points(i, TRUE);
+ for (j = 0; j < 10; j++)
+ {
+ tile1 = 0x60B2;
+ if (j < numStars)
+ tile1 += 2;
+
+ // Abs of round2Points is number of hearts
+ if (j < abs(round2Points))
+ {
+ tile2 = 0x60A4;
+ if (round2Points < 0)
+ tile2 += 2;
+ }
+ else
+ {
+ tile2 = 0x60A2;
+ }
+
+ FillBgTilemapBufferRect_Palette0(1, tile1, j + 19, i * 3 + 5, 1, 1);
+ FillBgTilemapBufferRect_Palette0(1, tile2, j + 19, i * 3 + 6, 1, 1);
+ }
+ }
+
+ CopyBgTilemapBufferToVram(0);
+ CopyBgTilemapBufferToVram(1);
+ CopyBgTilemapBufferToVram(2);
+ CopyBgTilemapBufferToVram(3);
+ ShowBg(0);
+ ShowBg(1);
+ ShowBg(2);
+ ShowBg(3);
+}
+
+static void LoadContestMonName(u8 monIndex)
+{
+ struct ContestPokemon *mon = &gContestMons[monIndex];
+ u8 *str = gDisplayedStringBattle;
+ if (monIndex == gContestPlayerMonIndex)
+ str = StringCopy(gDisplayedStringBattle, gText_ColorDarkGrey);
+
+ StringCopy(str, mon->nickname);
+ AddContestTextPrinter(monIndex, gDisplayedStringBattle, 0);
+ StringCopy(str, gText_Slash);
+ StringAppend(str, mon->trainerName);
+ AddContestTextPrinter(monIndex, gDisplayedStringBattle, 50);
+}
+
+static void LoadAllContestMonNames(void)
+{
+ int i;
+
+ for (i = 0; i < CONTESTANT_COUNT; i++)
+ LoadContestMonName(i);
+
+ CopyBgTilemapBufferToVram(1);
+}
+
+static void CB2_StartShowContestResults(void)
+{
+ gPaletteFade.bufferTransferDisabled = TRUE;
+ SetVBlankCallback(NULL);
+ AllocContestResults();
+ InitContestResultsDisplay();
+ ScanlineEffect_Clear();
+ ResetPaletteFade();
+ ResetSpriteData();
+ ResetTasks();
+ FreeAllSpritePalettes();
+ LoadContestResultsBgGfx();
+ LoadAllContestMonIconPalettes();
+ LoadAllContestMonIcons(0, TRUE);
+ LoadAllContestMonNames();
+ memset(sContestResults->data, 0, sizeof(*sContestResults->data));
+ memset(sContestResults->monResults, 0, sizeof(*sContestResults->monResults));
+ LoadContestResultSprites();
+ TryCreateWirelessSprites();
+ BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, RGB_BLACK);
+ gPaletteFade.bufferTransferDisabled = FALSE;
+ sContestResults->data->showResultsTaskId = CreateTask(Task_ShowContestResults, 5);
+ SetMainCallback2(CB2_ShowContestResults);
+ gBattle_WIN1H = 0x00F0;
+ gBattle_WIN1V = 0x80A0;
+ CreateTask(Task_SlideContestResultsBg, 20);
+ CalculateContestantsResultData();
+ if (gLinkContestFlags & LINK_CONTEST_FLAG_IS_WIRELESS)
+ gPaletteFade.bufferTransferDisabled = TRUE;
+ else
+ PlayBGM(MUS_CONTEST_RESULTS);
+
+ SetVBlankCallback(VBlankCB_ShowContestResults);
+}
+
+static void CB2_ShowContestResults(void)
+{
+ AnimateSprites();
+ BuildOamBuffer();
+ RunTasks();
+ UpdatePaletteFade();
+ CopyBgTilemapBufferToVram(1);
+ CopyBgTilemapBufferToVram(2);
+}
+
+static void VBlankCB_ShowContestResults(void)
+{
+ SetGpuReg(REG_OFFSET_BG0HOFS, gBattle_BG0_X);
+ SetGpuReg(REG_OFFSET_BG0VOFS, gBattle_BG0_Y);
+ SetGpuReg(REG_OFFSET_BG1HOFS, gBattle_BG1_X);
+ SetGpuReg(REG_OFFSET_BG1VOFS, gBattle_BG1_Y);
+ SetGpuReg(REG_OFFSET_BG2HOFS, gBattle_BG2_X);
+ SetGpuReg(REG_OFFSET_BG2VOFS, gBattle_BG2_Y);
+ SetGpuReg(REG_OFFSET_BG3HOFS, gBattle_BG3_X);
+ SetGpuReg(REG_OFFSET_BG3VOFS, gBattle_BG3_Y);
+ SetGpuReg(REG_OFFSET_WIN0H, gBattle_WIN0H);
+ SetGpuReg(REG_OFFSET_WIN0V, gBattle_WIN0V);
+ SetGpuReg(REG_OFFSET_WIN1H, gBattle_WIN1H);
+ SetGpuReg(REG_OFFSET_WIN1V, gBattle_WIN1V);
+ LoadOam();
+ ProcessSpriteCopyRequests();
+ TransferPlttBuffer();
+ ScanlineEffect_InitHBlankDmaTransfer();
+}
+
+#define tState data[0]
+#define tTimer data[1]
+#define tCounter data[2]
+
+static void Task_ShowContestResults(u8 taskId)
+{
+ u16 var;
+
+ if (gLinkContestFlags & LINK_CONTEST_FLAG_IS_LINK)
+ {
+ switch (gTasks[taskId].tState)
+ {
+ case 0:
+ SaveLinkContestResults();
+ if (gContestFinalStandings[gContestPlayerMonIndex] == 0)
+ {
+ IncrementGameStat(GAME_STAT_WON_LINK_CONTEST);
+ gSpecialVar_0x8005 = TVSHOW_CONTEST_LIVE_UPDATES;
+ InterviewBefore();
+ if (gSpecialVar_Result != TRUE)
+ InterviewAfter();
+ }
+
+ TryGainNewFanFromCounter(FANCOUNTER_FINISHED_CONTEST);
+ sub_80DEDA8(gSpecialVar_ContestRank);
+ sub_80DEDA8(0xFE);
+ gUnknown_02039F5C = TRUE;
+ gUnknown_02039F5D = sub_80DEFA8(0xFE, 0);
+ var = VarGet(VAR_CONTEST_HALL_STATE);
+ VarSet(VAR_CONTEST_HALL_STATE, 0);
+ SetContinueGameWarpStatusToDynamicWarp();
+ TrySavingData(SAVE_LINK);
+ ClearContinueGameWarpStatus2();
+ VarSet(VAR_CONTEST_HALL_STATE, var);
+ gTasks[taskId].tState++;
+ break;
+ case 1:
+ gTasks[taskId].tState++;
+ if (!(gLinkContestFlags & LINK_CONTEST_FLAG_IS_WIRELESS))
+ gTasks[taskId].tState = 100;
+ break;
+ case 2:
+ if (IsLinkTaskFinished())
+ {
+ SetLinkStandbyCallback();
+ gTasks[taskId].tState++;
+ }
+ return;
+ case 3:
+ if (IsLinkTaskFinished() == TRUE)
+ {
+ PlayBGM(MUS_CONTEST_RESULTS);
+ gPaletteFade.bufferTransferDisabled = FALSE;
+ gTasks[taskId].tState++;
+ break;
+ }
+ return;
+ }
+ }
+
+ if (!gPaletteFade.active)
+ {
+ gTasks[taskId].tState = 0;
+ if (gLinkContestFlags & LINK_CONTEST_FLAG_IS_LINK)
+ {
+ ShowLinkResultsTextBox(gText_CommunicationStandby);
+ gTasks[taskId].func = Task_WaitForLinkPartnersBeforeResults;
+ }
+ else
+ {
+ IncrementGameStat(GAME_STAT_ENTERED_CONTEST);
+ if (gContestFinalStandings[gContestPlayerMonIndex] == 0)
+ IncrementGameStat(GAME_STAT_WON_CONTEST);
+
+ sub_80DEDA8(gSpecialVar_ContestRank);
+ sub_80DEDA8(0xFE);
+ gUnknown_02039F5C = TRUE;
+ gUnknown_02039F5D = sub_80DEFA8(0xFE, 0);
+ TryGainNewFanFromCounter(FANCOUNTER_FINISHED_CONTEST);
+ gTasks[taskId].func = Task_AnnouncePreliminaryResults;
+ }
+ }
+}
+
+static void Task_WaitForLinkPartnersBeforeResults(u8 taskId)
+{
+ if (gReceivedRemoteLinkPlayers)
+ {
+ CreateTask(Task_CommunicateMonIdxsForResults, 0);
+ gTasks[taskId].func = TaskDummy;
+ }
+}
+
+static void Task_CommunicateMonIdxsForResults(u8 taskId)
+{
+ SetTaskFuncWithFollowupFunc(taskId, Task_LinkContest_CommunicateMonIdxs, Task_WaitForLinkPartnerMonIdxs);
+}
+
+static void Task_WaitForLinkPartnerMonIdxs(u8 taskId)
+{
+ if (IsLinkTaskFinished())
+ {
+ DestroyTask(taskId);
+ gTasks[sContestResults->data->showResultsTaskId].func = Task_AnnouncePreliminaryResults;
+ HideLinkResultsTextBox();
+ }
+}
+
+static void Task_AnnouncePreliminaryResults(u8 taskId)
+{
+ s16 x;
+
+ if (gTasks[taskId].tState == 0)
+ {
+ CreateTask(Task_FlashStarsAndHearts, 20);
+ x = DrawResultsTextWindow(gText_AnnouncingResults, sContestResults->data->slidingTextBoxSpriteId);
+ StartTextBoxSlideIn(x, 144, 120, 1088);
+ gTasks[taskId].tState++;
+ }
+ else if (gTasks[taskId].tState == 1)
+ {
+ // Wait for "Announcing Results" text to leave
+ if (sContestResults->data->slidingTextBoxState == SLIDING_TEXT_OFFSCREEN)
+ {
+ gTasks[taskId].tTimer = 0;
+ gTasks[taskId].tState++;
+ }
+ }
+ else if (gTasks[taskId].tState == 2)
+ {
+ if (++gTasks[taskId].tTimer == 21)
+ {
+ gTasks[taskId].tTimer = 0;
+ gTasks[taskId].tState++;
+ }
+ }
+ else if (gTasks[taskId].tState == 3)
+ {
+ x = DrawResultsTextWindow(gText_PreliminaryResults, sContestResults->data->slidingTextBoxSpriteId);
+ StartTextBoxSlideIn(x, 144, -1, 1088);
+ gTasks[taskId].tState++;
+ }
+ else if (gTasks[taskId].tState == 4)
+ {
+ if (sContestResults->data->slidingTextBoxState == SLIDING_TEXT_ARRIVED)
+ {
+ gTasks[taskId].tState = 0;
+ gTasks[taskId].func = Task_ShowPreliminaryResults;
+ }
+ }
+}
+
+static void Task_ShowPreliminaryResults(u8 taskId)
+{
+ switch (gTasks[taskId].tState)
+ {
+ case 0:
+ if (!sContestResults->data->pointsFlashing)
+ {
+ UpdateContestResultBars(FALSE, gTasks[taskId].tCounter++);
+ if (sContestResults->data->numBarsUpdating == 0)
+ gTasks[taskId].tState = 2;
+ else
+ gTasks[taskId].tState++;
+ }
+ break;
+ case 1:
+ if (sContestResults->data->numBarsUpdating == 0)
+ gTasks[taskId].tState = 0;
+ break;
+ case 2:
+ StartTextBoxSlideOut(1088);
+ gTasks[taskId].tState = 0;
+ gTasks[taskId].tCounter = 0;
+ gTasks[taskId].func = Task_AnnounceRound2Results;
+ break;
+ }
+}
+
+static void Task_AnnounceRound2Results(u8 taskId)
+{
+ s16 x;
+
+ if (sContestResults->data->slidingTextBoxState == SLIDING_TEXT_OFFSCREEN)
+ {
+ if (++gTasks[taskId].tTimer == 21)
+ {
+ gTasks[taskId].tTimer = 0;
+ x = DrawResultsTextWindow(gText_Round2Results, sContestResults->data->slidingTextBoxSpriteId);
+ StartTextBoxSlideIn(x, 144, -1, 1088);
+ }
+ }
+ else if (sContestResults->data->slidingTextBoxState == SLIDING_TEXT_ARRIVED)
+ {
+ gTasks[taskId].func = Task_ShowRound2Results;
+ }
+}
+
+static void Task_ShowRound2Results(u8 taskId)
+{
+ switch (gTasks[taskId].tState)
+ {
+ case 0:
+ if (!sContestResults->data->pointsFlashing)
+ {
+ UpdateContestResultBars(TRUE, gTasks[taskId].tCounter++);
+ if (sContestResults->data->numBarsUpdating == 0)
+ gTasks[taskId].tState = 2;
+ else
+ gTasks[taskId].tState++;
+ }
+ break;
+ case 1:
+ if (sContestResults->data->numBarsUpdating == 0)
+ gTasks[taskId].tState = 0;
+ break;
+ case 2:
+ StartTextBoxSlideOut(1088);
+ gTasks[taskId].tState = 0;
+ gTasks[taskId].func = Task_AnnounceWinner;
+ break;
+ }
+}
+
+// Task data for Task_DrawFinalStandingNumber
+#define tFinalStanding data[0]
+#define tMonIndex data[1]
+
+static void Task_AnnounceWinner(u8 taskId)
+{
+ int i;
+ switch (gTasks[taskId].tState)
+ {
+ case 0:
+ if (sContestResults->data->slidingTextBoxState == SLIDING_TEXT_OFFSCREEN)
+ gTasks[taskId].tState++;
+ break;
+ case 1:
+ if (++gTasks[taskId].tTimer == 31)
+ {
+ gTasks[taskId].tTimer = 0;
+ gTasks[taskId].tState++;
+ }
+ break;
+ case 2:
+ for (i = 0; i < CONTESTANT_COUNT; i++)
+ {
+ u8 newTaskId = CreateTask(Task_DrawFinalStandingNumber, 10);
+ gTasks[newTaskId].tFinalStanding = gContestFinalStandings[i];
+ gTasks[newTaskId].tMonIndex = i;
+ }
+ gTasks[taskId].tState++;
+ break;
+ case 3:
+ if (sContestResults->data->numStandingsPrinted == CONTESTANT_COUNT)
+ {
+ if (++gTasks[taskId].tTimer == 31)
+ {
+ gTasks[taskId].tTimer = 0;
+ CreateTask(Task_StartHighlightWinnersBox, 10);
+ gTasks[taskId].tState++;
+ GET_CONTEST_WINNER_ID(i);
+ BounceMonIconInBox(i, 14);
+ }
+ }
+ break;
+ case 4:
+ if (++gTasks[taskId].tTimer == 21)
+ {
+ u8 winnerTextBuffer[100];
+ s16 x;
+ gTasks[taskId].tTimer = 0;
+ GET_CONTEST_WINNER_ID(i);
+ StringCopy(gStringVar1, gContestMons[i].trainerName);
+ sub_81DB5AC(gStringVar1);
+ StringCopy(gStringVar2, gContestMons[i].nickname);
+ StringExpandPlaceholders(winnerTextBuffer, gText_ContestantsMonWon);
+ x = DrawResultsTextWindow(winnerTextBuffer, sContestResults->data->slidingTextBoxSpriteId);
+ StartTextBoxSlideIn(x, 144, -1, 1088);
+ gTasks[taskId].tState++;
+ }
+ break;
+ case 5:
+ gTasks[taskId].tState = 0;
+ gTasks[taskId].func = Task_ShowWinnerMonBanner;
+ break;
+ }
+}
+
+static void Task_ShowWinnerMonBanner(u8 taskId)
+{
+ int i;
+ u8 spriteId;
+ u16 species;
+ u32 otId;
+ u32 personality;
+ const struct CompressedSpritePalette *pokePal;
+
+ switch (gTasks[taskId].tState)
+ {
+ case 0:
+ gBattle_WIN0H = 0x00F0;
+ gBattle_WIN0V = 0x5050;
+
+ GET_CONTEST_WINNER_ID(i);
+ species = gContestMons[i].species;
+ personality = gContestMons[i].personality;
+ otId = gContestMons[i].otId;
+ if (i == gContestPlayerMonIndex)
+ {
+ HandleLoadSpecialPokePic_2(
+ &gMonFrontPicTable[species],
+ gMonSpritesGfxPtr->sprites[1],
+ species,
+ personality);
+ }
+ else
+ {
+ HandleLoadSpecialPokePic_DontHandleDeoxys(
+ &gMonFrontPicTable[species],
+ gMonSpritesGfxPtr->sprites[1],
+ species,
+ personality);
+ }
+
+ pokePal = GetMonSpritePalStructFromOtIdPersonality(species, otId, personality);
+ LoadCompressedSpritePalette(pokePal);
+ SetMultiuseSpriteTemplateToPokemon(species, B_POSITION_OPPONENT_LEFT);
+ gMultiuseSpriteTemplate.paletteTag = pokePal->tag;
+ spriteId = CreateSprite(&gMultiuseSpriteTemplate, 272, 80, 10);
+ gSprites[spriteId].data[1] = species;
+ gSprites[spriteId].oam.priority = 0;
+ gSprites[spriteId].callback = SpriteCB_WinnerMonSlideIn;
+ sContestResults->data->winnerMonSpriteId = spriteId;
+ LoadCompressedSpriteSheet(&sSpriteSheet_Confetti);
+ LoadCompressedSpritePalette(&sSpritePalette_Confetti);
+ CreateTask(Task_CreateConfetti, 10);
+ gTasks[taskId].tState++;
+ break;
+ case 1:
+ if (++gTasks[taskId].data[3] == 1)
+ {
+ u8 counter;
+ gTasks[taskId].data[3] = 0;
+ gTasks[taskId].tCounter += 2;
+ if (gTasks[taskId].tCounter > 32)
+ gTasks[taskId].tCounter = 32;
+
+ counter = gTasks[taskId].tCounter;
+ gBattle_WIN0V = ((80 - counter) << 8) | (80 + counter);
+ if (counter == 32)
+ gTasks[taskId].tState++;
+ }
+ break;
+ case 2:
+ if (sContestResults->data->winnerMonSlidingState == SLIDING_MON_ENTERED)
+ gTasks[taskId].tState++;
+ break;
+ case 3:
+ if (++gTasks[taskId].tTimer == 121)
+ {
+ gTasks[taskId].tTimer = 0;
+ gSprites[sContestResults->data->winnerMonSpriteId].callback = SpriteCB_WinnerMonSlideOut;
+ gTasks[taskId].tState++;
+ }
+ break;
+ case 4:
+ if (sContestResults->data->winnerMonSlidingState == SLIDING_MON_EXITED)
+ {
+ u8 top = (gBattle_WIN0V >> 8);
+ top += 2;
+ if (top > 80)
+ top = 80;
+
+ gBattle_WIN0V = (top << 8) | (160 - top);
+ if (top == 80)
+ gTasks[taskId].tState++;
+ }
+ break;
+ case 5:
+ if (sContestResults->data->winnerMonSlidingState == SLIDING_MON_EXITED)
+ {
+ sContestResults->data->destroyConfetti = TRUE;
+ gTasks[taskId].tState = 0;
+ gTasks[taskId].func = Task_SetSeenWinnerMon;
+ }
+ break;
+ }
+}
+
+static void Task_SetSeenWinnerMon(u8 taskId)
+{
+ int i, nationalDexNum;
+
+ if (JOY_NEW(A_BUTTON))
+ {
+ if (!(gLinkContestFlags & LINK_CONTEST_FLAG_IS_LINK))
+ {
+ for (i = 0; i < CONTESTANT_COUNT; i++)
+ {
+ nationalDexNum = SpeciesToNationalPokedexNum(gContestMons[i].species);
+ GetSetPokedexFlag(nationalDexNum, FLAG_SET_SEEN);
+ }
+ }
+
+ gTasks[taskId].data[10] = 0;
+ gTasks[taskId].func = Task_TryDisconnectLinkPartners;
+ }
+}
+
+static void Task_TryDisconnectLinkPartners(u8 taskId)
+{
+ if (gLinkContestFlags & LINK_CONTEST_FLAG_IS_LINK)
+ {
+ if (!gTasks[taskId].data[10])
+ {
+ ShowLinkResultsTextBox(gText_CommunicationStandby);
+ SetCloseLinkCallback();
+ gTasks[taskId].func = Task_WaitForLinkPartnersDisconnect;
+ }
+ }
+ else
+ {
+ gTasks[taskId].func = Task_TrySetContestInterviewData;
+ }
+}
+
+static void Task_WaitForLinkPartnersDisconnect(u8 taskId)
+{
+ if (!gReceivedRemoteLinkPlayers)
+ {
+ if (gLinkContestFlags & LINK_CONTEST_FLAG_IS_WIRELESS)
+ DestroyWirelessStatusIndicatorSprite();
+
+ HideLinkResultsTextBox();
+ gTasks[taskId].func = Task_TrySetContestInterviewData;
+ }
+}
+
+static void Task_TrySetContestInterviewData(u8 taskId)
+{
+ if (!(gLinkContestFlags & LINK_CONTEST_FLAG_IS_LINK))
+ BravoTrainerPokemonProfile_BeforeInterview2(gContestFinalStandings[gContestPlayerMonIndex]);
+
+ BeginHardwarePaletteFade(0xFF, 0, 0, 16, 0);
+ gTasks[taskId].func = Task_EndShowContestResults;
+}
+
+static void Task_EndShowContestResults(u8 taskId)
+{
+ if (!gPaletteFade.active)
+ {
+ if (gTasks[taskId].tTimer == 0)
+ {
+ DestroyTask(sContestResults->data->highlightWinnerTaskId);
+ BlendPalettes(0x0000FFFF, 16, RGB_BLACK);
+ gTasks[taskId].tTimer++;
+ }
+ else if (gTasks[taskId].tTimer == 1)
+ {
+ BlendPalettes(0xFFFF0000, 16, RGB_BLACK);
+ gTasks[taskId].tTimer++;
+ }
+ else
+ {
+ SetGpuReg(REG_OFFSET_BLDCNT, 0);
+ SetGpuReg(REG_OFFSET_BLDY, 0);
+ DestroyTask(taskId);
+ FreeAllWindowBuffers();
+ SetMainCallback2(CB2_ReturnToFieldContinueScriptPlayMapMusic);
+ FreeContestResults();
+ }
+ }
+}
+
+#undef tState
+#undef tTimer
+#undef tCounter
+
+static void Task_SlideContestResultsBg(u8 taskId)
+{
+ gBattle_BG3_X += 2;
+ gBattle_BG3_Y += 1;
+ if (gBattle_BG3_X > 255)
+ gBattle_BG3_X -= 255;
+ if (gBattle_BG3_Y > 255)
+ gBattle_BG3_Y -= 255;
+}
+
+#define tDelay data[0]
+#define tCoeff data[1]
+#define tDecreasing data[2]
+
+static void Task_FlashStarsAndHearts(u8 taskId)
+{
+ if (++gTasks[taskId].tDelay == 2)
+ {
+ gTasks[taskId].tDelay = 0;
+ if (!gTasks[taskId].tDecreasing)
+ gTasks[taskId].tCoeff++;
+ else
+ gTasks[taskId].tCoeff--;
+
+ if (gTasks[taskId].tCoeff == 16)
+ gTasks[taskId].tDecreasing = TRUE;
+ else if (gTasks[taskId].tCoeff == 0)
+ gTasks[taskId].tDecreasing = FALSE;
+
+ BlendPalette(0x6B, 1, gTasks[taskId].tCoeff, RGB(30, 22, 11));
+ BlendPalette(0x68, 1, gTasks[taskId].tCoeff, RGB_WHITE);
+ BlendPalette(0x6E, 1, gTasks[taskId].tCoeff, RGB(30, 29, 29));
+ }
+
+ if (gTasks[taskId].tCoeff == 0)
+ sContestResults->data->pointsFlashing = FALSE;
+ else
+ sContestResults->data->pointsFlashing = TRUE;
+}
+
+static void LoadContestMonIcon(u16 species, u8 monIndex, u8 srcOffset, u8 useDmaNow, u32 personality)
+{
+ const u8 *iconPtr;
+ u16 var0, var1, frameNum;
+
+ if (monIndex == gContestPlayerMonIndex)
+ frameNum = 1;
+ else
+ frameNum = 0;
+
+ iconPtr = GetMonIconPtr(species, personality, frameNum);
+ iconPtr += srcOffset * 0x200 + 0x80;
+ if (useDmaNow)
+ {
+ RequestDma3Copy(iconPtr, (void *)BG_CHAR_ADDR(1) + monIndex * 0x200, 0x180, 1);
+ var0 = ((monIndex + 10) << 12);
+ var1 = (monIndex * 0x10 + 0x200);
+ WriteSequenceToBgTilemapBuffer(1, var1 | var0, 3, monIndex * 3 + 4, 4, 3, 17, 1);
+ }
+ else
+ {
+ RequestDma3Copy(iconPtr, (void *)BG_CHAR_ADDR(1) + monIndex * 0x200, 0x180, 1);
+ }
+}
+
+static void LoadAllContestMonIcons(u8 srcOffset, bool8 useDmaNow)
+{
+ int i;
+
+ for (i = 0; i < CONTESTANT_COUNT; i++)
+ LoadContestMonIcon(gContestMons[i].species, i, srcOffset, useDmaNow, gContestMons[i].personality);
+}
+
+static void LoadAllContestMonIconPalettes(void)
+{
+ int i, species;
+
+ for (i = 0; i < CONTESTANT_COUNT; i++)
+ {
+ species = gContestMons[i].species;
+ LoadPalette(gMonIconPalettes[gMonIconPaletteIndices[GetIconSpecies(species, 0)]], i * 0x10 + 0xA0, 0x20);
+ }
+}
+
+static void TryCreateWirelessSprites(void)
+{
+ u16 sheet;
+ u8 spriteId;
+
+ if (gLinkContestFlags & LINK_CONTEST_FLAG_IS_WIRELESS)
+ {
+ LoadWirelessStatusIndicatorSpriteGfx();
+ CreateWirelessStatusIndicatorSprite(8, 8);
+ gSprites[gWirelessStatusIndicatorSpriteId].subpriority = 1;
+ sheet = LoadSpriteSheet(&sUnknown_0858D8E0);
+ RequestDma3Fill(0xFFFFFFFF, (void *)BG_CHAR_ADDR(4) + sheet * 0x20, 0x80, 1);
+ spriteId = CreateSprite(&sSpriteTemplate_858D8C8, 8, 8, 0);
+ gSprites[spriteId].oam.objMode = ST_OAM_OBJ_WINDOW;
+ }
+}
+
+// Functionally equivalent, the same except compiler generated variables from
+// src are placed on different stack positions.
+
+#ifdef NONMATCHING
+static s32 DrawResultsTextWindow(const u8 *text, u8 spriteId)
+{
+ u8 *windowTilesPtr;
+ u16 windowId;
+ int origWidth;
+ struct WindowTemplate windowTemplate;
+ int strWidth;
+ u8 *spriteTilePtrs[4];
+ u8 *dst;
+ int i;
+ struct Sprite *sprite;
+ const u8 *src; // The culprit.
+
+ memset(&windowTemplate, 0, sizeof(windowTemplate));
+ windowTemplate.width = 30;
+ windowTemplate.height = 2;
+ windowId = AddWindow(&windowTemplate);
+ FillWindowPixelBuffer(windowId, PIXEL_FILL(1));
+
+ origWidth = GetStringWidth(1, text, 0);
+ strWidth = (origWidth + 9) / 8;
+ if (strWidth > 30)
+ strWidth = 30;
+
+ AddTextPrinterParameterized3(windowId, 1, (strWidth * 8 - origWidth) / 2, 1, sContestLinkTextColors, -1, text);
+ windowTilesPtr = (u8 *)(GetWindowAttribute(windowId, WINDOW_TILE_DATA));
+ src = (u8 *)(sUnknown_0858D6D0);
+
+ sprite = &gSprites[spriteId];
+ spriteTilePtrs[0] = (u8 *)(sprite->oam.tileNum * 32 + VRAM + 0x10000);
+
+ for (i = 1; i < 4; i++)
+ spriteTilePtrs[i] = (void*)(gSprites[sprite->data[i - 1]].oam.tileNum * 32 + VRAM + 0x10000);
+
+ for (i = 0; i < 4; i++)
+ CpuFill32(0, spriteTilePtrs[i], 0x400);
+
+ dst = spriteTilePtrs[0];
+ CpuCopy32(src, dst, 0x20);
+ CpuCopy32(src + 128, dst + 0x100, 0x20);
+ CpuCopy32(src + 128, dst + 0x200, 0x20);
+ CpuCopy32(src + 64, dst + 0x300, 0x20);
+
+ for (i = 0; i < strWidth; i++)
+ {
+ dst = &spriteTilePtrs[(i + 1) / 8][((i + 1) % 8) * 32];
+ CpuCopy32(src + 192, dst, 0x20);
+ CpuCopy32(windowTilesPtr, dst + 0x100, 0x20);
+ CpuCopy32(windowTilesPtr + 960, dst + 0x200, 0x20);
+ CpuCopy32(src + 224, dst + 0x300, 0x20);
+ windowTilesPtr += 0x20;
+ }
+
+ dst = &spriteTilePtrs[(i + 1) / 8][((i + 1) % 8) * 32];
+ CpuCopy32(src + 32, dst, 0x20);
+ CpuCopy32(src + 160, dst + 0x100, 0x20);
+ CpuCopy32(src + 160, dst + 0x200, 0x20);
+ CpuCopy32(src + 96, dst + 0x300, 0x20);
+ RemoveWindow(windowId);
+
+ return (240 - (strWidth + 2) * 8) / 2;
+}
+
+#else
+NAKED
+static s32 DrawResultsTextWindow(const u8 *text, u8 spriteId)
+{
+ asm_unified(
+ "push {r4-r7,lr}\n\
+ mov r7, r10\n\
+ mov r6, r9\n\
+ mov r5, r8\n\
+ push {r5-r7}\n\
+ sub sp, 0x44\n\
+ adds r5, r0, 0\n\
+ lsls r1, 24\n\
+ lsrs r7, r1, 24\n\
+ add r4, sp, 0x20\n\
+ adds r0, r4, 0\n\
+ movs r1, 0\n\
+ movs r2, 0x8\n\
+ bl memset\n\
+ movs r0, 0x1E\n\
+ strb r0, [r4, 0x3]\n\
+ movs r0, 0x2\n\
+ strb r0, [r4, 0x4]\n\
+ adds r0, r4, 0\n\
+ bl AddWindow\n\
+ lsls r6, r0, 24\n\
+ lsrs r4, r6, 24\n\
+ adds r0, r4, 0\n\
+ movs r1, 0x11\n\
+ bl FillWindowPixelBuffer\n\
+ movs r0, 0x1\n\
+ adds r1, r5, 0\n\
+ movs r2, 0\n\
+ bl GetStringWidth\n\
+ adds r2, r0, 0\n\
+ adds r2, 0x9\n\
+ cmp r2, 0\n\
+ bge _080F6BC4\n\
+ adds r2, 0x7\n\
+_080F6BC4:\n\
+ asrs r2, 3\n\
+ mov r10, r2\n\
+ cmp r2, 0x1E\n\
+ ble _080F6BD0\n\
+ movs r1, 0x1E\n\
+ mov r10, r1\n\
+_080F6BD0:\n\
+ mov r1, r10\n\
+ lsls r2, r1, 3\n\
+ subs r2, r0\n\
+ lsrs r0, r2, 31\n\
+ adds r2, r0\n\
+ asrs r2, 1\n\
+ lsls r2, 24\n\
+ lsrs r2, 24\n\
+ ldr r0, =sContestLinkTextColors\n\
+ str r0, [sp]\n\
+ movs r0, 0x1\n\
+ negs r0, r0\n\
+ str r0, [sp, 0x4]\n\
+ str r5, [sp, 0x8]\n\
+ adds r0, r4, 0\n\
+ movs r1, 0x1\n\
+ movs r3, 0x1\n\
+ bl AddTextPrinterParameterized3\n\
+ adds r0, r4, 0\n\
+ movs r1, 0x7\n\
+ bl GetWindowAttribute\n\
+ mov r9, r0\n\
+ ldr r2, =sUnknown_0858D6D0\n\
+ mov r8, r2\n\
+ lsls r1, r7, 4\n\
+ adds r1, r7\n\
+ lsls r1, 2\n\
+ ldr r3, =gSprites\n\
+ adds r1, r3\n\
+ ldrh r0, [r1, 0x4]\n\
+ lsls r0, 22\n\
+ lsrs r0, 17\n\
+ ldr r2, =0x06010000\n\
+ adds r0, r2\n\
+ str r0, [sp, 0xC]\n\
+ str r6, [sp, 0x38]\n\
+ mov r7, sp\n\
+ adds r7, 0x1C\n\
+ str r7, [sp, 0x2C]\n\
+ mov r0, r10\n\
+ adds r0, 0x2\n\
+ str r0, [sp, 0x30]\n\
+ movs r5, 0\n\
+ add r7, sp, 0x10\n\
+ mov r12, r7\n\
+ adds r6, r1, 0\n\
+ adds r6, 0x2E\n\
+ movs r4, 0x2\n\
+_080F6C34:\n\
+ adds r0, r6, r5\n\
+ movs r7, 0\n\
+ ldrsh r1, [r0, r7]\n\
+ lsls r0, r1, 4\n\
+ adds r0, r1\n\
+ lsls r0, 2\n\
+ adds r0, r3\n\
+ ldrh r0, [r0, 0x4]\n\
+ lsls r0, 22\n\
+ lsrs r0, 17\n\
+ adds r0, r2\n\
+ mov r1, r12\n\
+ adds r1, 0x4\n\
+ mov r12, r1\n\
+ subs r1, 0x4\n\
+ stm r1!, {r0}\n\
+ adds r5, 0x2\n\
+ subs r4, 0x1\n\
+ cmp r4, 0\n\
+ bge _080F6C34\n\
+ mov r7, r8\n\
+ adds r7, 0x80\n\
+ mov r2, r8\n\
+ adds r2, 0x40\n\
+ str r2, [sp, 0x28]\n\
+ mov r0, r8\n\
+ adds r0, 0x20\n\
+ str r0, [sp, 0x3C]\n\
+ mov r1, r8\n\
+ adds r1, 0xA0\n\
+ str r1, [sp, 0x40]\n\
+ adds r2, 0x20\n\
+ str r2, [sp, 0x34]\n\
+ add r5, sp, 0xC\n\
+ movs r6, 0\n\
+ movs r4, 0x3\n\
+_080F6C7C:\n\
+ str r6, [sp, 0x1C]\n\
+ ldm r5!, {r1}\n\
+ ldr r0, [sp, 0x2C]\n\
+ ldr r2, =0x05000100\n\
+ bl CpuSet\n\
+ subs r4, 0x1\n\
+ cmp r4, 0\n\
+ bge _080F6C7C\n\
+ ldr r5, [sp, 0xC]\n\
+ ldr r6, =0x04000008\n\
+ mov r0, r8\n\
+ adds r1, r5, 0\n\
+ adds r2, r6, 0\n\
+ bl CpuSet\n\
+ movs r0, 0x80\n\
+ lsls r0, 1\n\
+ adds r1, r5, r0\n\
+ adds r0, r7, 0\n\
+ adds r2, r6, 0\n\
+ bl CpuSet\n\
+ movs r2, 0x80\n\
+ lsls r2, 2\n\
+ adds r1, r5, r2\n\
+ adds r0, r7, 0\n\
+ adds r2, r6, 0\n\
+ bl CpuSet\n\
+ movs r7, 0xC0\n\
+ lsls r7, 2\n\
+ adds r1, r5, r7\n\
+ ldr r0, [sp, 0x28]\n\
+ adds r2, r6, 0\n\
+ bl CpuSet\n\
+ movs r4, 0\n\
+ cmp r4, r10\n\
+ bge _080F6D32\n\
+ adds r7, r6, 0\n\
+_080F6CCE:\n\
+ adds r6, r4, 0x1\n\
+ adds r0, r6, 0\n\
+ cmp r6, 0\n\
+ bge _080F6CDA\n\
+ adds r0, r4, 0\n\
+ adds r0, 0x8\n\
+_080F6CDA:\n\
+ asrs r0, 3\n\
+ lsls r1, r0, 2\n\
+ add r1, sp\n\
+ adds r1, 0xC\n\
+ lsls r0, 3\n\
+ subs r0, r6, r0\n\
+ lsls r0, 5\n\
+ ldr r1, [r1]\n\
+ adds r5, r1, r0\n\
+ mov r0, r8\n\
+ adds r0, 0xC0\n\
+ adds r1, r5, 0\n\
+ adds r2, r7, 0\n\
+ bl CpuSet\n\
+ movs r0, 0x80\n\
+ lsls r0, 1\n\
+ adds r1, r5, r0\n\
+ mov r0, r9\n\
+ adds r2, r7, 0\n\
+ bl CpuSet\n\
+ movs r0, 0xF0\n\
+ lsls r0, 2\n\
+ add r0, r9\n\
+ movs r2, 0x80\n\
+ lsls r2, 2\n\
+ adds r1, r5, r2\n\
+ adds r2, r7, 0\n\
+ bl CpuSet\n\
+ movs r0, 0xC0\n\
+ lsls r0, 2\n\
+ adds r1, r5, r0\n\
+ mov r0, r8\n\
+ adds r0, 0xE0\n\
+ adds r2, r7, 0\n\
+ bl CpuSet\n\
+ movs r1, 0x20\n\
+ add r9, r1\n\
+ adds r4, r6, 0\n\
+ cmp r4, r10\n\
+ blt _080F6CCE\n\
+_080F6D32:\n\
+ adds r2, r4, 0x1\n\
+ adds r0, r2, 0\n\
+ cmp r2, 0\n\
+ bge _080F6D3E\n\
+ adds r0, r4, 0\n\
+ adds r0, 0x8\n\
+_080F6D3E:\n\
+ asrs r0, 3\n\
+ lsls r1, r0, 2\n\
+ add r1, sp\n\
+ adds r1, 0xC\n\
+ lsls r0, 3\n\
+ subs r0, r2, r0\n\
+ lsls r0, 5\n\
+ ldr r1, [r1]\n\
+ adds r5, r1, r0\n\
+ ldr r4, =0x04000008\n\
+ ldr r0, [sp, 0x3C]\n\
+ adds r1, r5, 0\n\
+ adds r2, r4, 0\n\
+ bl CpuSet\n\
+ movs r2, 0x80\n\
+ lsls r2, 1\n\
+ adds r1, r5, r2\n\
+ ldr r0, [sp, 0x40]\n\
+ adds r2, r4, 0\n\
+ bl CpuSet\n\
+ movs r7, 0x80\n\
+ lsls r7, 2\n\
+ adds r1, r5, r7\n\
+ ldr r0, [sp, 0x40]\n\
+ adds r2, r4, 0\n\
+ bl CpuSet\n\
+ movs r0, 0xC0\n\
+ lsls r0, 2\n\
+ adds r1, r5, r0\n\
+ ldr r0, [sp, 0x34]\n\
+ adds r2, r4, 0\n\
+ bl CpuSet\n\
+ ldr r1, [sp, 0x38]\n\
+ lsrs r0, r1, 24\n\
+ bl RemoveWindow\n\
+ ldr r2, [sp, 0x30]\n\
+ lsls r1, r2, 3\n\
+ movs r0, 0xF0\n\
+ subs r0, r1\n\
+ asrs r0, 1\n\
+ add sp, 0x44\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\
+ .pool");
+}
+#endif // NONMATCHING
+
+static void LoadContestResultSprites(void)
+{
+ int i;
+ struct SpriteTemplate template;
+ u8 spriteIds[ARRAY_COUNT(sUnknown_0858D810)];
+
+ template = sSpriteTemplate_858D7F8;
+ for (i = 0; i < (int)ARRAY_COUNT(sUnknown_0858D810); i++)
+ LoadSpriteSheet(&sUnknown_0858D810[i]);
+
+ LoadSpritePalette(&sUnknown_0858D850);
+ for (i = 0; i < (int)ARRAY_COUNT(sUnknown_0858D810); i++)
+ {
+ spriteIds[i] = CreateSprite(&template, 272, 144, 10);
+ template.tileTag++;
+ }
+
+ gSprites[spriteIds[0]].data[0] = spriteIds[1];
+ gSprites[spriteIds[0]].data[1] = spriteIds[2];
+ gSprites[spriteIds[0]].data[2] = spriteIds[3];
+
+ gSprites[spriteIds[4]].data[0] = spriteIds[5];
+ gSprites[spriteIds[4]].data[1] = spriteIds[6];
+ gSprites[spriteIds[4]].data[2] = spriteIds[7];
+
+ sContestResults->data->slidingTextBoxSpriteId = spriteIds[0];
+ sContestResults->data->slidingTextBoxState = SLIDING_TEXT_OFFSCREEN;
+ sContestResults->data->linkTextBoxSpriteId = spriteIds[4];
+ HideLinkResultsTextBox();
+}
+
+#define sTargetX data[4]
+#define sSlideOutTimer data[5]
+#define sSlideIncrement data[6]
+#define sDistance data[7]
+
+// If slideOutTimer is -1, it will not automatically slide out
+static void StartTextBoxSlideIn(s16 x, u16 y, u16 slideOutTimer, u16 slideIncrement)
+{
+ struct Sprite *sprite = &gSprites[sContestResults->data->slidingTextBoxSpriteId];
+ sprite->pos1.x = 272;
+ sprite->pos1.y = y;
+ sprite->pos2.x = 0;
+ sprite->pos2.y = 0;
+ sprite->sTargetX = x + 32;
+ sprite->sSlideOutTimer = slideOutTimer;
+ sprite->sSlideIncrement = slideIncrement;
+ sprite->sDistance = 0;
+ sprite->callback = SpriteCB_TextBoxSlideIn;
+ sContestResults->data->slidingTextBoxState = SLIDING_TEXT_ENTERING;
+}
+
+static void StartTextBoxSlideOut(u16 slideIncrement)
+{
+ struct Sprite *sprite = &gSprites[sContestResults->data->slidingTextBoxSpriteId];
+ sprite->pos1.x += sprite->pos2.x;
+ sprite->pos1.y += sprite->pos2.y;
+ sprite->pos2.y = 0;
+ sprite->pos2.x = 0;
+ sprite->sSlideIncrement = slideIncrement;
+ sprite->sDistance = 0;
+ sprite->callback = SpriteCB_TextBoxSlideOut;
+ sContestResults->data->slidingTextBoxState = SLIDING_TEXT_EXITING;
+}
+
+static void EndTextBoxSlideOut(struct Sprite *sprite)
+{
+ sprite->pos1.x = 272;
+ sprite->pos1.y = 144;
+ sprite->pos2.y = 0;
+ sprite->pos2.x = 0;
+ sprite->callback = SpriteCallbackDummy;
+ sContestResults->data->slidingTextBoxState = SLIDING_TEXT_OFFSCREEN;
+}
+
+static void SpriteCB_TextBoxSlideIn(struct Sprite *sprite)
+{
+ int i;
+
+ s16 delta = sprite->sDistance + sprite->sSlideIncrement;
+ sprite->pos1.x -= delta >> 8;
+ sprite->sDistance += sprite->sSlideIncrement;
+ sprite->sDistance &= 0xFF;
+
+ // Prevent overshooting target
+ if (sprite->pos1.x < sprite->sTargetX)
+ sprite->pos1.x = sprite->sTargetX;
+
+ for (i = 0; i < 3; i++)
+ {
+ struct Sprite *sprite2 = &gSprites[sprite->data[i]];
+ sprite2->pos1.x = sprite->pos1.x + sprite->pos2.x + (i + 1) * 64;
+ }
+
+ if (sprite->pos1.x == sprite->sTargetX)
+ sprite->callback = SpriteCB_EndTextBoxSlideIn;
+}
+
+static void SpriteCB_EndTextBoxSlideIn(struct Sprite *sprite)
+{
+ sContestResults->data->slidingTextBoxState = SLIDING_TEXT_ARRIVED;
+ if ((u16)sprite->sSlideOutTimer != 0xFFFF)
+ {
+ if (--sprite->sSlideOutTimer == -1)
+ StartTextBoxSlideOut(sprite->sSlideIncrement);
+ }
+}
+
+static void SpriteCB_TextBoxSlideOut(struct Sprite *sprite)
+{
+ int i;
+ s16 delta;
+
+ delta = sprite->sDistance + sprite->sSlideIncrement;
+ sprite->pos1.x -= delta >> 8;
+ sprite->sDistance += sprite->sSlideIncrement;
+ sprite->sDistance &= 0xFF;
+ for (i = 0; i < 3; i++)
+ {
+ struct Sprite *sprite2 = &gSprites[sprite->data[i]];
+ sprite2->pos1.x = sprite->pos1.x + sprite->pos2.x + (i + 1) * 64;
+ }
+
+ if (sprite->pos1.x + sprite->pos2.x < -224)
+ EndTextBoxSlideOut(sprite);
+}
+
+static void ShowLinkResultsTextBox(const u8 *text)
+{
+ int i;
+ u16 x;
+ struct Sprite *sprite;
+
+ x = DrawResultsTextWindow(text, sContestResults->data->linkTextBoxSpriteId);
+ sprite = &gSprites[sContestResults->data->linkTextBoxSpriteId];
+ sprite->pos1.x = x + 32;
+ sprite->pos1.y = 80;
+ sprite->invisible = FALSE;
+ for (i = 0; i < 3; i++)
+ {
+ gSprites[sprite->data[i]].pos1.x = sprite->pos1.x + sprite->pos2.x + (i + 1) * 64;
+ gSprites[sprite->data[i]].pos1.y = sprite->pos1.y;
+ gSprites[sprite->data[i]].invisible = FALSE;
+ }
+
+ gBattle_WIN0H = 0x00F0;
+ gBattle_WIN0V = ((sprite->pos1.y - 16) << 8) | (sprite->pos1.y + 16);
+ SetGpuReg(REG_OFFSET_WININ, WININ_WIN1_BG_ALL | WININ_WIN1_OBJ | WININ_WIN1_CLR
+ | WININ_WIN0_BG1 | WININ_WIN0_BG2 | WININ_WIN0_BG3 | WININ_WIN0_OBJ | WININ_WIN0_CLR);
+}
+
+static void HideLinkResultsTextBox(void)
+{
+ int i;
+ struct Sprite *sprite;
+
+ sprite = &gSprites[sContestResults->data->linkTextBoxSpriteId];
+ sprite->invisible = TRUE;
+ for (i = 0; i < 3; i++)
+ gSprites[sprite->data[i]].invisible = TRUE;
+
+ gBattle_WIN0H = 0;
+ gBattle_WIN0V = 0;
+ SetGpuReg(REG_OFFSET_WIN0H, gBattle_WIN0H);
+ SetGpuReg(REG_OFFSET_WIN0V, gBattle_WIN0V);
+ SetGpuReg(REG_OFFSET_WININ, WININ_WIN0_BG_ALL | WININ_WIN0_OBJ | WININ_WIN0_CLR
+ | WININ_WIN1_BG_ALL | WININ_WIN1_OBJ | WININ_WIN1_CLR);
+}
+
+static void LoadContestResultsTilemaps(void)
+{
+ u8 palette;
+ int x, y;
+
+ x = 5;
+ y = 1;
+ if (gLinkContestFlags & LINK_CONTEST_FLAG_IS_LINK)
+ {
+ CopyToBgTilemapBufferRect(2, gLinkContestResults_Tilemap, 5, 1, 5, 2);
+ x = 10;
+ }
+ else if (gSpecialVar_ContestRank == CONTEST_RANK_NORMAL)
+ {
+ CopyToBgTilemapBufferRect(2, gNormalContestResults_Tilemap, 5, 1, 10, 2);
+ x = 15;
+ }
+ else if (gSpecialVar_ContestRank == CONTEST_RANK_SUPER)
+ {
+ CopyToBgTilemapBufferRect(2, gSuperContestResults_Tilemap, 5, 1, 10, 2);
+ x = 15;
+ }
+ else if (gSpecialVar_ContestRank == CONTEST_RANK_HYPER)
+ {
+ CopyToBgTilemapBufferRect(2, gHyperContestResults_Tilemap, 5, 1, 10, 2);
+ x = 15;
+ }
+ else // CONTEST_RANK_MASTER
+ {
+ CopyToBgTilemapBufferRect(2, gMasterContestResults_Tilemap, 5, 1, 10, 2);
+ x = 15;
+ }
+
+ if (gSpecialVar_ContestCategory == CONTEST_CATEGORY_COOL)
+ {
+ palette = 0;
+ CopyToBgTilemapBufferRect(2, gCoolContestResults_Tilemap, x, y, 5, 2);
+ }
+ else if (gSpecialVar_ContestCategory == CONTEST_CATEGORY_BEAUTY)
+ {
+ palette = 1;
+ CopyToBgTilemapBufferRect(2, gBeautyContestResults_Tilemap, x, y, 5, 2);
+ }
+ else if (gSpecialVar_ContestCategory == CONTEST_CATEGORY_CUTE)
+ {
+ palette = 2;
+ CopyToBgTilemapBufferRect(2, gCuteContestResults_Tilemap, x, y, 5, 2);
+ }
+ else if (gSpecialVar_ContestCategory == CONTEST_CATEGORY_SMART)
+ {
+ palette = 3;
+ CopyToBgTilemapBufferRect(2, gSmartContestResults_Tilemap, x, y, 5, 2);
+ }
+ else // CONTEST_CATEGORY_TOUGH
+ {
+ palette = 4;
+ CopyToBgTilemapBufferRect(2, gToughContestResults_Tilemap, x, y, 5, 2);
+ }
+
+ x += 5;
+ CopyToBgTilemapBufferRect(2, gContestResults_Tilemap, x, y, 6, 2);
+ CopyToBgTilemapBufferRect_ChangePalette(2, sContestResults->tilemapBuffers[2], 0, 0, 32, 4, palette);
+}
+
+// Represented on results board as stars
+static u8 GetNumPreliminaryPoints(u8 monIndex, bool8 capPoints)
+{
+ u32 condition = gContestMonRound1Points[monIndex] << 16;
+ u32 numStars = condition / 0x3F;
+
+ if (numStars & 0xFFFF)
+ numStars += 0x10000;
+
+ numStars >>= 16;
+ if (numStars == 0 && condition)
+ numStars = 1;
+
+ if (capPoints && numStars > 10)
+ numStars = 10;
+
+ return numStars;
+}
+
+// Represented on results board as hearts
+static s8 GetNumRound2Points(u8 monIndex, bool8 capPoints)
+{
+ u32 r4, numHearts;
+ s16 results;
+ s8 points;
+
+ results = gContestMonRound2Points[monIndex];
+ if (results < 0)
+ r4 = -results << 16;
+ else
+ r4 = results << 16;
+
+ numHearts = r4 / 80;
+ if (numHearts & 0xFFFF)
+ numHearts += 0x10000;
+
+ numHearts >>= 16;
+ if (numHearts == 0 && r4 != 0)
+ numHearts = 1;
+
+ if (capPoints && numHearts > 10)
+ numHearts = 10;
+
+ if (gContestMonRound2Points[monIndex] < 0)
+ points = -numHearts;
+ else
+ points = numHearts;
+
+ return points;
+}
+
+#define tState data[10]
+
+static void Task_DrawFinalStandingNumber(u8 taskId)
+{
+ u16 firstTileNum;
+
+ if (gTasks[taskId].tState == 0)
+ {
+ gTasks[taskId].data[11] = (3 - gTasks[taskId].tFinalStanding) * 40;
+ gTasks[taskId].tState++;
+ }
+ else if (gTasks[taskId].tState == 1)
+ {
+ if (--gTasks[taskId].data[11] == -1)
+ {
+ firstTileNum = gTasks[taskId].tFinalStanding * 2 + 0x5043;
+ WriteSequenceToBgTilemapBuffer(2, firstTileNum, 1, gTasks[taskId].tMonIndex * 3 + 5, 2, 1, 17, 1);
+ WriteSequenceToBgTilemapBuffer(2, firstTileNum + 0x10, 1, gTasks[taskId].tMonIndex * 3 + 6, 2, 1, 17, 1);
+ sContestResults->data->numStandingsPrinted++;
+ DestroyTask(taskId);
+ PlaySE(SE_CONTEST_PLACE);
+ }
+ }
+}
+
+#undef tFinalStanding
+#undef tMonIndex
+#undef tState
+
+static void Task_StartHighlightWinnersBox(u8 taskId)
+{
+ int i;
+ GET_CONTEST_WINNER_ID(i);
+ CopyToBgTilemapBufferRect_ChangePalette(2, i * 0xC0 + 0x100 + sContestResults->tilemapBuffers[2], 0, i * 3 + 4, 32, 3, 9);
+ gTasks[taskId].data[10] = i;
+ gTasks[taskId].data[12] = 1;
+ gTasks[taskId].func = Task_HighlightWinnersBox;
+ sContestResults->data->highlightWinnerTaskId = taskId;
+}
+
+static void Task_HighlightWinnersBox(u8 taskId)
+{
+ if (++gTasks[taskId].data[11] == 1)
+ {
+ gTasks[taskId].data[11] = 0;
+ BlendPalette(0x91, 1, gTasks[taskId].data[12], RGB(13, 28, 27));
+ if (gTasks[taskId].data[13] == 0)
+ {
+ if (++gTasks[taskId].data[12] == 16)
+ gTasks[taskId].data[13] = 1;
+ }
+ else
+ {
+ if (--gTasks[taskId].data[12] == 0)
+ gTasks[taskId].data[13] = 0;
+ }
+ }
+}
+
+static void SpriteCB_WinnerMonSlideIn(struct Sprite *sprite)
+{
+ if (sprite->data[0] < 10)
+ {
+ if (++sprite->data[0] == 10)
+ {
+ PlayCry1(sprite->data[1], 0);
+ sprite->data[1] = 0;
+ }
+ }
+ else
+ {
+ s16 delta = sprite->data[1] + 0x600;
+ sprite->pos1.x -= delta >> 8;
+ sprite->data[1] += 0x600;
+ sprite->data[1] &= 0xFF;
+ if (sprite->pos1.x < 120)
+ sprite->pos1.x = 120;
+
+ if (sprite->pos1.x == 120)
+ {
+ sprite->callback = SpriteCallbackDummy;
+ sprite->data[1] = 0;
+ sContestResults->data->winnerMonSlidingState = SLIDING_MON_ENTERED;
+ }
+ }
+}
+
+static void SpriteCB_WinnerMonSlideOut(struct Sprite *sprite)
+{
+ s16 delta = sprite->data[1] + 0x600;
+ sprite->pos1.x -= delta >> 8;
+ sprite->data[1] += + 0x600;
+ sprite->data[1] &= 0xFF;
+ if (sprite->pos1.x < -32)
+ {
+ sprite->callback = SpriteCallbackDummy;
+ sprite->invisible = TRUE;
+ sContestResults->data->winnerMonSlidingState = SLIDING_MON_EXITED;
+ }
+}
+
+static void Task_CreateConfetti(u8 taskId)
+{
+ if (++gTasks[taskId].data[0] == 5)
+ {
+ gTasks[taskId].data[0] = 0;
+ if (sContestResults->data->confettiCount < 40)
+ {
+ u8 spriteId = CreateSprite(&sSpriteTemplate_Confetti, (Random() % 240) - 20, 44, 5);
+ gSprites[spriteId].data[0] = Random() % 512;
+ gSprites[spriteId].data[1] = (Random() % 24) + 16;
+ gSprites[spriteId].data[2] = (Random() % 256) + 48;
+ gSprites[spriteId].oam.tileNum += Random() % 17;
+ sContestResults->data->confettiCount++;
+ }
+ }
+
+ if (sContestResults->data->destroyConfetti)
+ DestroyTask(taskId);
+}
+
+static void SpriteCB_Confetti(struct Sprite *sprite)
+{
+ s16 delta;
+
+ sprite->data[3] += sprite->data[0];
+ sprite->pos2.x = Sin(sprite->data[3] >> 8, sprite->data[1]);
+ delta = sprite->data[4] + sprite->data[2];
+ sprite->pos1.x += delta >> 8;
+ sprite->data[4] += sprite->data[2];
+ sprite->data[4] &= 0xff;
+
+ sprite->pos1.y++;
+ if (sContestResults->data->destroyConfetti)
+ sprite->invisible = TRUE;
+
+ if (sprite->pos1.x > 248 || sprite->pos1.y > 116)
+ {
+ DestroySprite(sprite);
+ sContestResults->data->confettiCount--;
+ }
+}
+
+#define tMonIndex data[0]
+#define tNumFrames data[1]
+#define tSpecies data[2]
+#define tTimer data[10]
+#define tBounced data[11]
+
+static void BounceMonIconInBox(u8 monIndex, u8 numFrames)
+{
+ u8 taskId = CreateTask(Task_BounceMonIconInBox, 8);
+ gTasks[taskId].tMonIndex = monIndex;
+ gTasks[taskId].tNumFrames = numFrames;
+ gTasks[taskId].tSpecies = gContestMons[monIndex].species;
+}
+
+static void Task_BounceMonIconInBox(u8 taskId)
+{
+ u8 monIndex = gTasks[taskId].tMonIndex;
+ if (gTasks[taskId].tTimer++ == gTasks[taskId].tNumFrames)
+ {
+ gTasks[taskId].tTimer = 0;
+ LoadContestMonIcon(gTasks[taskId].tSpecies, monIndex, gTasks[taskId].tBounced, FALSE, gContestMons[monIndex].personality);
+ gTasks[taskId].tBounced ^= 1;
+ }
+}
+
+#undef tMonIndex
+#undef tNumFrames
+#undef tSpecies
+#undef tTimer
+#undef tBounced
+
+static void CalculateContestantsResultData(void)
+{
+ int i, relativePoints;
+ u32 barLength;
+ s16 highestPoints;
+ s8 round2Points;
+
+ highestPoints = gContestMonTotalPoints[0];
+ for (i = 1; i < CONTESTANT_COUNT; i++)
+ {
+ if (highestPoints < gContestMonTotalPoints[i])
+ highestPoints = gContestMonTotalPoints[i];
+ }
+
+ if (highestPoints < 0)
+ {
+ highestPoints = gContestMonTotalPoints[0];
+ for (i = 1; i < CONTESTANT_COUNT; i++)
+ {
+ if (highestPoints > gContestMonTotalPoints[i])
+ highestPoints = gContestMonTotalPoints[i];
+ }
+ }
+
+ for (i = 0; i < CONTESTANT_COUNT; i++)
+ {
+ relativePoints = (gContestMonRound1Points[i] * 1000) / abs(highestPoints);
+ if (relativePoints % 10 > 4)
+ relativePoints += 10;
+ (*sContestResults->monResults)[i].relativePreliminaryPoints = relativePoints / 10;
+
+ relativePoints = (abs(gContestMonRound2Points[i]) * 1000) / abs(highestPoints);
+ if (relativePoints % 10 > 4)
+ relativePoints += 10;
+ (*sContestResults->monResults)[i].relativeRound2Points = relativePoints / 10;
+
+ if (gContestMonRound2Points[i] < 0)
+ (*sContestResults->monResults)[i].lostPoints = TRUE;
+
+ barLength = ((*sContestResults->monResults)[i].relativePreliminaryPoints * 0x5800) / 100;
+ if ((barLength & 0xFF) > 0x7F)
+ barLength += 0x100;
+ (*sContestResults->monResults)[i].barLengthPreliminary = barLength >> 8;
+
+ barLength = ((*sContestResults->monResults)[i].relativeRound2Points * 0x5800) / 100;
+ if ((barLength & 0xFF) > 0x7F)
+ barLength += 0x100;
+ (*sContestResults->monResults)[i].barLengthRound2 = barLength >> 8;
+
+ (*sContestResults->monResults)[i].numStars = GetNumPreliminaryPoints(i, TRUE);
+ round2Points = GetNumRound2Points(i, TRUE);
+ (*sContestResults->monResults)[i].numHearts = abs(round2Points);
+
+ if (gContestFinalStandings[i])
+ {
+ s16 barLengthPreliminary = (*sContestResults->monResults)[i].barLengthPreliminary;
+ s16 barLengthRound2 = (*sContestResults->monResults)[i].barLengthRound2;
+
+ if ((*sContestResults->monResults)[i].lostPoints)
+ barLengthRound2 *= -1;
+
+ if (barLengthPreliminary + barLengthRound2 == MAX_BAR_LENGTH + 1)
+ {
+ if (barLengthRound2 > 0)
+ (*sContestResults->monResults)[i].barLengthRound2--;
+ else if (barLengthPreliminary > 0)
+ (*sContestResults->monResults)[i].barLengthPreliminary--;
+ }
+ }
+ }
+}
+
+#define tMonId data[0]
+#define tTarget data[1]
+#define tDecreasing data[2]
+
+static void UpdateContestResultBars(bool8 isRound2, u8 numUpdates)
+{
+ int i, taskId;
+ u32 target;
+ u8 numIncreasing = 0, numDecreasing = 0;
+
+ if (!isRound2)
+ {
+ for (i = 0; i < CONTESTANT_COUNT; i++)
+ {
+ u8 numStars = (*sContestResults->monResults)[i].numStars;
+ if (numUpdates < numStars)
+ {
+ FillBgTilemapBufferRect_Palette0(1, 0x60B3, ((19 + numStars) - numUpdates) - 1, i * 3 + 5, 1, 1);
+ taskId = CreateTask(Task_UpdateContestResultBar, 10);
+
+ target = (((*sContestResults->monResults)[i].barLengthPreliminary << 16) / (*sContestResults->monResults)[i].numStars) * (numUpdates + 1);
+ if ((target & 0xFFFF) > 0x7FFF)
+ target += 0x10000;
+
+ gTasks[taskId].tMonId = i;
+ gTasks[taskId].tTarget = target >> 16;
+ sContestResults->data->numBarsUpdating++;
+ numIncreasing++;
+ }
+ }
+ }
+ else
+ {
+ for (i = 0; i < CONTESTANT_COUNT; i++)
+ {
+ s8 numHearts = (*sContestResults->monResults)[i].numHearts;
+ u32 tile = (*sContestResults->monResults)[i].lostPoints ? 0x60A5 : 0x60A3;
+ if (numUpdates < numHearts)
+ {
+ FillBgTilemapBufferRect_Palette0(1, tile, ((19 + numHearts) - numUpdates) - 1, i * 3 + 6, 1, 1);
+ taskId = CreateTask(Task_UpdateContestResultBar, 10);
+
+ target = (((*sContestResults->monResults)[i].barLengthRound2 << 16) / (*sContestResults->monResults)[i].numHearts) * (numUpdates + 1);
+ if ((target & 0xFFFF) > 0x7FFF)
+ target += 0x10000;
+
+ gTasks[taskId].tMonId = i;
+ if ((*sContestResults->monResults)[i].lostPoints)
+ {
+ gTasks[taskId].tDecreasing = TRUE;
+ numDecreasing++;
+ }
+ else
+ {
+ numIncreasing++;
+ }
+
+ if ((*sContestResults->monResults)[i].lostPoints)
+ gTasks[taskId].tTarget = -(target >> 16) + (*sContestResults->monResults)[i].barLengthPreliminary;
+ else
+ gTasks[taskId].tTarget = (target >> 16) + (*sContestResults->monResults)[i].barLengthPreliminary;
+
+ sContestResults->data->numBarsUpdating++;
+ }
+ }
+ }
+
+ if (numDecreasing)
+ PlaySE(SE_BOO);
+ if (numIncreasing)
+ PlaySE(SE_PIN);
+}
+
+static void Task_UpdateContestResultBar(u8 taskId)
+{
+ int i;
+ bool32 minMaxReached = FALSE;
+ bool32 targetReached = FALSE;
+ u8 monId = gTasks[taskId].tMonId;
+ s16 target = gTasks[taskId].tTarget;
+ s16 decreasing = gTasks[taskId].tDecreasing;
+
+ if (decreasing)
+ {
+ if (sContestResults->data->unkC[monId] <= 0)
+ minMaxReached = TRUE;
+ }
+ else
+ {
+ if (sContestResults->data->unkC[monId] > MAX_BAR_LENGTH)
+ minMaxReached = TRUE;
+ }
+
+ if (sContestResults->data->unkC[monId] == target)
+ targetReached = TRUE;
+
+ if (!targetReached)
+ {
+ if (minMaxReached)
+ sContestResults->data->unkC[monId] = target;
+ else if (decreasing)
+ sContestResults->data->unkC[monId] = sContestResults->data->unkC[monId] - 1;
+ else
+ sContestResults->data->unkC[monId] = sContestResults->data->unkC[monId] + 1;
+ }
+
+ if (!minMaxReached && !targetReached)
+ {
+ u8 var0;
+ u16 tileNum;
+ for (i = 0; i < 11; i++)
+ {
+ if (sContestResults->data->unkC[monId] >= (i + 1) * 8)
+ var0 = 8;
+ else if (sContestResults->data->unkC[monId] >= i * 8)
+ var0 = sContestResults->data->unkC[monId] % 8;
+ else
+ var0 = 0;
+
+ if (var0 < 4)
+ tileNum = 0x504C + var0;
+ else
+ tileNum = 0x5057 + var0;
+
+ FillBgTilemapBufferRect_Palette0(2, tileNum, i + 7, monId * 3 + 6, 1, 1);
+ }
+ }
+
+ if (targetReached)
+ {
+ sContestResults->data->numBarsUpdating--;
+ DestroyTask(taskId);
+ }
+}
+
+#undef tMonId
+#undef tTarget
+#undef tDecreasing
+
+static void AllocContestResults(void)
+{
+ sContestResults = AllocZeroed(sizeof(*sContestResults));
+ sContestResults->data = AllocZeroed(sizeof(*sContestResults->data));
+ sContestResults->monResults = AllocZeroed(sizeof(*sContestResults->monResults));
+ sContestResults->unusedBg = AllocZeroed(BG_SCREEN_SIZE);
+ sContestResults->tilemapBuffers[0] = AllocZeroed(BG_SCREEN_SIZE);
+ sContestResults->tilemapBuffers[1] = AllocZeroed(BG_SCREEN_SIZE);
+ sContestResults->tilemapBuffers[2] = AllocZeroed(BG_SCREEN_SIZE);
+ sContestResults->tilemapBuffers[3] = AllocZeroed(BG_SCREEN_SIZE);
+ sContestResults->unused = AllocZeroed(0x1000);
+ AllocateMonSpritesGfx();
+}
+
+static void FreeContestResults(void)
+{
+ FREE_AND_SET_NULL(sContestResults->data);
+ FREE_AND_SET_NULL(sContestResults->monResults);
+ FREE_AND_SET_NULL(sContestResults->unusedBg);
+ FREE_AND_SET_NULL(sContestResults->tilemapBuffers[0]);
+ FREE_AND_SET_NULL(sContestResults->tilemapBuffers[1]);
+ FREE_AND_SET_NULL(sContestResults->tilemapBuffers[2]);
+ FREE_AND_SET_NULL(sContestResults->tilemapBuffers[3]);
+ FREE_AND_SET_NULL(sContestResults->unused);
+ FREE_AND_SET_NULL(sContestResults);
+ FreeMonSpritesGfx();
+}
+
+static void AddContestTextPrinter(int windowId, u8 *str, int x)
+{
+ struct TextPrinterTemplate textPrinter;
+ textPrinter.currentChar = str;
+ textPrinter.windowId = windowId;
+ textPrinter.fontId = 7;
+ textPrinter.x = x;
+ textPrinter.y = 2;
+ textPrinter.currentX = x;
+ textPrinter.currentY = 2;
+ textPrinter.letterSpacing = 0;
+ textPrinter.lineSpacing = 0;
+ textPrinter.style = 0;
+ textPrinter.fgColor = 1;
+ textPrinter.bgColor = 0;
+ textPrinter.shadowColor = 8;
+ AddTextPrinter(&textPrinter, 0, NULL);
+ PutWindowTilemap(windowId);
+}
+
+void TryEnterContestMon(void)
+{
+ u8 eligibility = GetContestEntryEligibility(&gPlayerParty[gContestMonPartyIndex]);
+
+ // Nonzero eligibility can still be non-eligibile, if mon is fainted or egg
+ if (eligibility)
+ {
+ SetContestants(gSpecialVar_ContestCategory, gSpecialVar_ContestRank);
+ CalculateRound1Points(gSpecialVar_ContestCategory);
+ }
+
+ gSpecialVar_Result = eligibility;
+}
+
+u16 HasMonWonThisContestBefore(void)
+{
+ u16 hasRankRibbon = FALSE;
+ struct Pokemon *mon = &gPlayerParty[gContestMonPartyIndex];
+ switch (gSpecialVar_ContestCategory)
+ {
+ case CONTEST_CATEGORY_COOL:
+ if (GetMonData(mon, MON_DATA_COOL_RIBBON) > gSpecialVar_ContestRank)
+ hasRankRibbon = TRUE;
+ break;
+ case CONTEST_CATEGORY_BEAUTY:
+ if (GetMonData(mon, MON_DATA_BEAUTY_RIBBON) > gSpecialVar_ContestRank)
+ hasRankRibbon = TRUE;
+ break;
+ case CONTEST_CATEGORY_CUTE:
+ if (GetMonData(mon, MON_DATA_CUTE_RIBBON) > gSpecialVar_ContestRank)
+ hasRankRibbon = TRUE;
+ break;
+ case CONTEST_CATEGORY_SMART:
+ if (GetMonData(mon, MON_DATA_SMART_RIBBON) > gSpecialVar_ContestRank)
+ hasRankRibbon = TRUE;
+ break;
+ case CONTEST_CATEGORY_TOUGH:
+ if (GetMonData(mon, MON_DATA_TOUGH_RIBBON) > gSpecialVar_ContestRank)
+ hasRankRibbon = TRUE;
+ break;
+ }
+
+ return hasRankRibbon;
+}
+
+void GiveMonContestRibbon(void)
+{
+ u8 ribbonData;
+
+ if (gContestFinalStandings[gContestPlayerMonIndex] != 0)
+ return;
+
+ switch (gSpecialVar_ContestCategory)
+ {
+ case CONTEST_CATEGORY_COOL:
+ ribbonData = GetMonData(&gPlayerParty[gContestMonPartyIndex], MON_DATA_COOL_RIBBON);
+ if (ribbonData <= gSpecialVar_ContestRank && ribbonData < 4)
+ {
+ ribbonData++;
+ SetMonData(&gPlayerParty[gContestMonPartyIndex], MON_DATA_COOL_RIBBON, &ribbonData);
+ if (GetRibbonCount(&gPlayerParty[gContestMonPartyIndex]) > NUM_CUTIES_RIBBONS)
+ TryPutSpotTheCutiesOnAir(&gPlayerParty[gContestMonPartyIndex], MON_DATA_COOL_RIBBON);
+ }
+ break;
+ case CONTEST_CATEGORY_BEAUTY:
+ ribbonData = GetMonData(&gPlayerParty[gContestMonPartyIndex], MON_DATA_BEAUTY_RIBBON);
+ if (ribbonData <= gSpecialVar_ContestRank && ribbonData < 4)
+ {
+ ribbonData++;
+ SetMonData(&gPlayerParty[gContestMonPartyIndex], MON_DATA_BEAUTY_RIBBON, &ribbonData);
+ if (GetRibbonCount(&gPlayerParty[gContestMonPartyIndex]) > NUM_CUTIES_RIBBONS)
+ TryPutSpotTheCutiesOnAir(&gPlayerParty[gContestMonPartyIndex], MON_DATA_BEAUTY_RIBBON);
+ }
+ break;
+ case CONTEST_CATEGORY_CUTE:
+ ribbonData = GetMonData(&gPlayerParty[gContestMonPartyIndex], MON_DATA_CUTE_RIBBON);
+ if (ribbonData <= gSpecialVar_ContestRank && ribbonData < 4)
+ {
+ ribbonData++;
+ SetMonData(&gPlayerParty[gContestMonPartyIndex], MON_DATA_CUTE_RIBBON, &ribbonData);
+ if (GetRibbonCount(&gPlayerParty[gContestMonPartyIndex]) > NUM_CUTIES_RIBBONS)
+ TryPutSpotTheCutiesOnAir(&gPlayerParty[gContestMonPartyIndex], MON_DATA_CUTE_RIBBON);
+ }
+ break;
+ case CONTEST_CATEGORY_SMART:
+ ribbonData = GetMonData(&gPlayerParty[gContestMonPartyIndex], MON_DATA_SMART_RIBBON);
+ if (ribbonData <= gSpecialVar_ContestRank && ribbonData < 4)
+ {
+ ribbonData++;
+ SetMonData(&gPlayerParty[gContestMonPartyIndex], MON_DATA_SMART_RIBBON, &ribbonData);
+ if (GetRibbonCount(&gPlayerParty[gContestMonPartyIndex]) > NUM_CUTIES_RIBBONS)
+ TryPutSpotTheCutiesOnAir(&gPlayerParty[gContestMonPartyIndex], MON_DATA_SMART_RIBBON);
+ }
+ break;
+ case CONTEST_CATEGORY_TOUGH:
+ ribbonData = GetMonData(&gPlayerParty[gContestMonPartyIndex], MON_DATA_TOUGH_RIBBON);
+ if (ribbonData <= gSpecialVar_ContestRank && ribbonData < 4)
+ {
+ ribbonData++;
+ SetMonData(&gPlayerParty[gContestMonPartyIndex], MON_DATA_TOUGH_RIBBON, &ribbonData);
+ if (GetRibbonCount(&gPlayerParty[gContestMonPartyIndex]) > NUM_CUTIES_RIBBONS)
+ TryPutSpotTheCutiesOnAir(&gPlayerParty[gContestMonPartyIndex], MON_DATA_TOUGH_RIBBON);
+ }
+ break;
+ }
+}
+
+void BufferContestantTrainerName(void)
+{
+ StringCopy(gStringVar1, gContestMons[gSpecialVar_0x8006].trainerName);
+ sub_81DB5AC(gStringVar1);
+}
+
+void BufferContestantMonNickname(void)
+{
+ StringCopy(gStringVar3, gContestMons[gSpecialVar_0x8006].nickname);
+}
+
+// Unused script special
+void GetContestMonConditionRanking(void)
+{
+ u8 i, rank;
+
+ for (i = 0, rank = 0; i < CONTESTANT_COUNT; i++)
+ {
+ if (gContestMonRound1Points[gSpecialVar_0x8006] < gContestMonRound1Points[i])
+ rank++;
+ }
+
+ gSpecialVar_0x8004 = rank;
+}
+
+void GetContestMonCondition(void)
+{
+ gSpecialVar_0x8004 = gContestMonRound1Points[gSpecialVar_0x8006];
+}
+
+void GetContestWinnerId(void)
+{
+ u8 i;
+ GET_CONTEST_WINNER_ID(i);
+ gSpecialVar_0x8005 = i;
+}
+
+void BufferContestWinnerTrainerName(void)
+{
+ u8 i;
+ GET_CONTEST_WINNER_ID(i);
+ StringCopy(gStringVar3, gContestMons[i].trainerName);
+ sub_81DB5AC(gStringVar3);
+}
+
+void BufferContestWinnerMonName(void)
+{
+ u8 i;
+ GET_CONTEST_WINNER_ID(i);
+ StringCopy(gStringVar1, gContestMons[i].nickname);
+}
+
+void CB2_SetStartContestCallback(void)
+{
+ SetMainCallback2(CB2_StartContest);
+}
+
+static void Task_StartContest(u8 taskId)
+{
+ if (!gPaletteFade.active)
+ {
+ DestroyTask(taskId);
+ SetMainCallback2(CB2_SetStartContestCallback);
+ }
+}
+
+void StartContest(void)
+{
+ ScriptContext2_Enable();
+ CreateTask(Task_StartContest, 10);
+ BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK);
+}
+
+void BufferContestantMonSpecies(void)
+{
+ gSpecialVar_0x8004 = gContestMons[gSpecialVar_0x8006].species;
+}
+
+static void Task_StartShowContestResults(u8 taskId)
+{
+ if (!gPaletteFade.active)
+ {
+ DestroyTask(taskId);
+ SetMainCallback2(CB2_StartShowContestResults);
+ }
+}
+
+void ShowContestResults(void)
+{
+ ScriptContext2_Enable();
+ CreateTask(Task_StartShowContestResults, 10);
+ BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK);
+}
+
+void GetContestPlayerId(void)
+{
+ gSpecialVar_0x8004 = gContestPlayerMonIndex;
+}
+
+void ContestLinkTransfer(u8 category)
+{
+ u8 newTaskId;
+ ScriptContext2_Enable();
+ newTaskId = CreateTask(Task_LinkContest_Init, 0);
+ SetTaskFuncWithFollowupFunc(newTaskId, Task_LinkContest_Init, Task_StartCommunication);
+ gTasks[newTaskId].data[9] = category;
+}
+
+static void Task_StartCommunication(u8 taskId)
+{
+ if (gLinkContestFlags & LINK_CONTEST_FLAG_HAS_RS_PLAYER)
+ {
+ CreateContestMonFromParty(gContestMonPartyIndex);
+ SetTaskFuncWithFollowupFunc(taskId, Task_LinkContest_CommunicateMonsRS, Task_StartCommunicateRngRS);
+ }
+ else
+ {
+ CreateContestMonFromParty(gContestMonPartyIndex);
+ gTasks[taskId].func = Task_LinkContest_StartCommunicationEm;
+ }
+}
+
+static void Task_StartCommunicateRngRS(u8 taskId)
+{
+ SetTaskFuncWithFollowupFunc(taskId, Task_LinkContest_CommunicateRngRS, Task_StartCommunicateLeaderIdsRS);
+}
+
+static void Task_StartCommunicateLeaderIdsRS(u8 taskId)
+{
+ SetTaskFuncWithFollowupFunc(taskId, Task_LinkContest_CommunicateLeaderIdsRS, Task_StartCommunicateCategoryRS);
+}
+
+static void Task_StartCommunicateCategoryRS(u8 taskId)
+{
+ SetTaskFuncWithFollowupFunc(taskId, Task_LinkContest_CommunicateCategoryRS, Task_LinkContest_SetUpContestRS);
+}
+
+static void Task_LinkContest_SetUpContestRS(u8 taskId)
+{
+ u8 i;
+ u8 categories[CONTESTANT_COUNT];
+ u8 leaderIds[CONTESTANT_COUNT];
+
+ memset(categories, 0, sizeof(categories));
+ memset(leaderIds, 0, sizeof(leaderIds));
+
+ for (i = 0; i < gNumLinkContestPlayers; i++)
+ categories[i] = gTasks[taskId].data[i + 1];
+
+ // Ensure all players are doing the same category
+ for (i = 0; i < gNumLinkContestPlayers && categories[0] == categories[i]; i++)
+ ;
+
+ if (i == gNumLinkContestPlayers)
+ gSpecialVar_0x8004 = FALSE; // Category choices the same
+ else
+ gSpecialVar_0x8004 = TRUE; // Category choices differ
+
+ for (i = 0; i < gNumLinkContestPlayers; i++)
+ leaderIds[i] = gTasks[taskId].data[i + 5];
+
+ gContestLinkLeaderIndex = LinkContest_GetLeaderIndex(leaderIds);
+ CalculateRound1Points(gSpecialVar_ContestCategory);
+ SetTaskFuncWithFollowupFunc(taskId, Task_LinkContest_CommunicateRound1Points, Task_LinkContest_CalculateTurnOrderRS);
+}
+
+static void Task_LinkContest_CalculateTurnOrderRS(u8 taskId)
+{
+ SortContestants(FALSE);
+ SetTaskFuncWithFollowupFunc(taskId, Task_LinkContest_CommunicateTurnOrder, Task_LinkContest_FinalizeConnection);
+}
+
+u8 LinkContest_GetLeaderIndex(u8 *ids)
+{
+ int i;
+ u8 leaderIdx = 0;
+
+ for (i = 1; i < gNumLinkContestPlayers; i++)
+ {
+ if (ids[leaderIdx] < ids[i])
+ leaderIdx = i;
+ }
+
+ return leaderIdx;
+}
+
+void Task_LinkContest_FinalizeConnection(u8 taskId)
+{
+ int i;
+
+ if (gSpecialVar_0x8004 == TRUE)
+ {
+ // Link partner data doesn't agree, disconnect
+ if (IsLinkTaskFinished())
+ gTasks[taskId].func = Task_LinkContest_Disconnect;
+ }
+ else
+ {
+ // Succesfully connected
+ for (i = 0; i < CONTESTANT_COUNT; i++)
+ StringGetEnd10(gContestMons[i].nickname);
+
+ DestroyTask(taskId);
+ SetDynamicWarp(0, gSaveBlock1Ptr->location.mapGroup, gSaveBlock1Ptr->location.mapNum, -1);
+ ScriptContext2_Disable();
+ EnableBothScriptContexts();
+ }
+}
+
+static void Task_LinkContest_Disconnect(u8 taskId)
+{
+ SetCloseLinkCallback();
+ gTasks[taskId].func = Task_LinkContest_WaitDisconnect;
+}
+
+static void Task_LinkContest_WaitDisconnect(u8 taskId)
+{
+ if (!gReceivedRemoteLinkPlayers)
+ {
+ DestroyTask(taskId);
+ ScriptContext2_Disable();
+ EnableBothScriptContexts();
+ }
+}
+
+void SetContestTrainerGfxIds(void)
+{
+ gSaveBlock1Ptr->vars[VAR_OBJ_GFX_ID_0 - VARS_START] = gContestMons[0].trainerGfxId;
+ gSaveBlock1Ptr->vars[VAR_OBJ_GFX_ID_1 - VARS_START] = gContestMons[1].trainerGfxId;
+ gSaveBlock1Ptr->vars[VAR_OBJ_GFX_ID_2 - VARS_START] = gContestMons[2].trainerGfxId;
+}
+
+// Unused
+void sub_80F8814(void)
+{
+ u16 var1;
+ u8 var0 = gSpecialVar_0x8005;
+ switch (var0)
+ {
+ case 0:
+ var1 = 3;
+ break;
+ case 1:
+ var1 = 4;
+ break;
+ case 2:
+ var1 = 5;
+ break;
+ default:
+ var1 = 100;
+ break;
+ }
+
+ gSpecialVar_0x8004 = var1;
+}
+
+void BufferContestTrainerAndMonNames(void)
+{
+ BufferContestantTrainerName();
+ BufferContestantMonNickname();
+ BufferContestantMonSpecies();
+}
+
+// Unused
+void DoesContestCategoryHaveWinner(void)
+{
+ int contestWinner;
+ switch (gSpecialVar_ContestCategory)
+ {
+ case CONTEST_CATEGORY_COOL:
+ contestWinner = 8;
+ break;
+ case CONTEST_CATEGORY_BEAUTY:
+ contestWinner = 9;
+ break;
+ case CONTEST_CATEGORY_CUTE:
+ contestWinner = 10;
+ break;
+ case CONTEST_CATEGORY_SMART:
+ contestWinner = 11;
+ break;
+ case CONTEST_CATEGORY_TOUGH:
+ default:
+ contestWinner = 12;
+ break;
+ }
+
+ if (gSaveBlock1Ptr->contestWinners[contestWinner].species == SPECIES_NONE)
+ gSpecialVar_0x8004 = FALSE;
+ else
+ gSpecialVar_0x8004 = TRUE;
+}
+
+void SaveMuseumContestPainting(void)
+{
+ sub_80DEDA8(0xFF);
+}
+
+void ShouldReadyContestArtist(void)
+{
+ if (gContestFinalStandings[gContestPlayerMonIndex] == 0
+ && gSpecialVar_ContestRank == CONTEST_RANK_MASTER
+ && gContestMonTotalPoints[gContestPlayerMonIndex] >= 800)
+ {
+ gSpecialVar_0x8004 = TRUE;
+ }
+ else
+ {
+ gSpecialVar_0x8004 = FALSE;
+ }
+}
+
+u8 CountPlayerContestPaintings(void)
+{
+ int i;
+ u8 count = 0;
+
+ for (i = 0; i < 5; i++)
+ {
+ if (gSaveBlock1Ptr->contestWinners[8 + i].species)
+ count++;
+ }
+
+ return count;
+}
+
+// Unused
+void sub_80F8970(void)
+{
+ s16 conditions[CONTESTANT_COUNT];
+ int i, j;
+ s16 condition;
+ s8 var0;
+ u8 var2;
+ u8 r8;
+ u8 r7;
+
+ for (i = 0; i < CONTESTANT_COUNT; i++)
+ conditions[i] = gContestMonRound1Points[i];
+
+ for (i = 0; i < CONTESTANT_COUNT - 1; i++)
+ {
+ for (j = CONTESTANT_COUNT - 1; j > i; j--)
+ {
+ if (conditions[j - 1] < conditions[j])
+ {
+ int temp;
+ SWAP(conditions[j], conditions[j - 1], temp)
+ }
+ }
+ }
+
+ condition = conditions[gSpecialVar_0x8006];
+ var0 = 0;
+ r8 = 0;
+ for (i = 0; i < CONTESTANT_COUNT; i++)
+ {
+ if (conditions[i] == condition)
+ {
+ var0++;
+ if (i == gSpecialVar_0x8006)
+ r8 = var0;
+ }
+ }
+
+ for (i = 0; i < CONTESTANT_COUNT; i++)
+ {
+ if (conditions[i] == condition)
+ break;
+ }
+
+ r7 = i;
+ var2 = r8;
+ for (i = 0; i < CONTESTANT_COUNT; i++)
+ {
+ if (condition == gContestMonRound1Points[i])
+ {
+ if (var2 == 1)
+ break;
+ var2--;
+ }
+ }
+
+ StringCopy(gStringVar1, gContestMons[i].nickname);
+ StringCopy(gStringVar2, gContestMons[i].trainerName);
+ sub_81DB5AC(gStringVar2);
+
+ if (var0 == 1)
+ gSpecialVar_0x8006 = r7;
+ else if (r8 == var0)
+ gSpecialVar_0x8006 = r7;
+ else
+ gSpecialVar_0x8006 = r7 + 4;
+}
+
+static void ExitContestWinnerPainting(void)
+{
+ SetMainCallback2(CB2_ReturnToFieldContinueScriptPlayMapMusic);
+}
+
+void ShowContestWinnerPainting(void)
+{
+ SetMainCallback2(CB2_ContestPainting);
+ gMain.savedCallback = ExitContestWinnerPainting;
+}
+
+void SetLinkContestPlayerGfx(void)
+{
+ int i;
+
+ if (gLinkContestFlags & LINK_CONTEST_FLAG_IS_LINK)
+ {
+ for (i = 0; i < gNumLinkContestPlayers; i++)
+ {
+ int version = (u8)gLinkPlayers[i].version;
+ if (version == VERSION_RUBY || version == VERSION_SAPPHIRE)
+ {
+ if (gLinkPlayers[i].gender == MALE)
+ gContestMons[i].trainerGfxId = OBJ_EVENT_GFX_LINK_RS_BRENDAN;
+ else
+ gContestMons[i].trainerGfxId = OBJ_EVENT_GFX_LINK_RS_MAY;
+ }
+ }
+
+ VarSet(VAR_OBJ_GFX_ID_0, gContestMons[0].trainerGfxId);
+ VarSet(VAR_OBJ_GFX_ID_1, gContestMons[1].trainerGfxId);
+ VarSet(VAR_OBJ_GFX_ID_2, gContestMons[2].trainerGfxId);
+ VarSet(VAR_OBJ_GFX_ID_3, gContestMons[3].trainerGfxId);
+ }
+}
+
+void LoadLinkContestPlayerPalettes(void)
+{
+ int i;
+ u8 objectEventId;
+ int version;
+ struct Sprite *sprite;
+ static const u8 sContestantLocalIds[CONTESTANT_COUNT] = { 3, 4, 5, 14 };
+
+ gReservedSpritePaletteCount = 12;
+ if (gLinkContestFlags & LINK_CONTEST_FLAG_IS_LINK)
+ {
+ for (i = 0; i < gNumLinkContestPlayers; i++)
+ {
+ objectEventId = GetObjectEventIdByLocalIdAndMap(sContestantLocalIds[i], gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup);
+ sprite = &gSprites[gObjectEvents[objectEventId].spriteId];
+ sprite->oam.paletteNum = 6 + i;
+ version = (u8)gLinkPlayers[i].version;
+ if (version == VERSION_RUBY || version == VERSION_SAPPHIRE)
+ {
+ if (gLinkPlayers[i].gender == MALE)
+ LoadPalette(gObjectEventPalette33, 0x160 + i * 0x10, 0x20);
+ else
+ LoadPalette(gObjectEventPalette34, 0x160 + i * 0x10, 0x20);
+ }
+ else
+ {
+ if (gLinkPlayers[i].gender == MALE)
+ LoadPalette(gObjectEventPalette8, 0x160 + i * 0x10, 0x20);
+ else
+ LoadPalette(gObjectEventPalette17, 0x160 + i * 0x10, 0x20);
+ }
+ }
+ }
+}
+
+bool8 GiveMonArtistRibbon(void)
+{
+ u8 hasArtistRibbon;
+
+ hasArtistRibbon = GetMonData(&gPlayerParty[gContestMonPartyIndex], MON_DATA_ARTIST_RIBBON);
+ if (!hasArtistRibbon
+ && gContestFinalStandings[gContestPlayerMonIndex] == 0
+ && gSpecialVar_ContestRank == CONTEST_RANK_MASTER
+ && gContestMonTotalPoints[gContestPlayerMonIndex] >= 800)
+ {
+ hasArtistRibbon = 1;
+ SetMonData(&gPlayerParty[gContestMonPartyIndex], MON_DATA_ARTIST_RIBBON, &hasArtistRibbon);
+ if (GetRibbonCount(&gPlayerParty[gContestMonPartyIndex]) > NUM_CUTIES_RIBBONS)
+ TryPutSpotTheCutiesOnAir(&gPlayerParty[gContestMonPartyIndex], MON_DATA_ARTIST_RIBBON);
+
+ return TRUE;
+ }
+ else
+ {
+ return FALSE;
+ }
+}
+
+bool8 IsContestDebugActive(void)
+{
+ return FALSE; // gUnknown_0203856C in pokeruby
+}
+
+void ShowContestEntryMonPic(void)
+{
+ const struct CompressedSpritePalette *palette;
+ u32 personality, otId;
+ u16 species;
+ u8 spriteId;
+ u8 taskId;
+ u8 left, top;
+
+ if (FindTaskIdByFunc(Task_ShowContestEntryMonPic) == 0xFF)
+ {
+ AllocateMonSpritesGfx();
+ left = 10;
+ top = 3;
+ species = gContestMons[gSpecialVar_0x8006].species;
+ personality = gContestMons[gSpecialVar_0x8006].personality;
+ otId = gContestMons[gSpecialVar_0x8006].otId;
+ taskId = CreateTask(Task_ShowContestEntryMonPic, 0x50);
+ gTasks[taskId].data[0] = 0;
+ gTasks[taskId].data[1] = species;
+ if (gSpecialVar_0x8006 == gContestPlayerMonIndex)
+ HandleLoadSpecialPokePic_2(&gMonFrontPicTable[species], gMonSpritesGfxPtr->sprites[1], species, personality);
+ else
+ HandleLoadSpecialPokePic_DontHandleDeoxys(&gMonFrontPicTable[species], gMonSpritesGfxPtr->sprites[1], species, personality);
+
+ palette = GetMonSpritePalStructFromOtIdPersonality(species, otId, personality);
+ LoadCompressedSpritePalette(palette);
+ SetMultiuseSpriteTemplateToPokemon(species, 1);
+ gMultiuseSpriteTemplate.paletteTag = palette->tag;
+ spriteId = CreateSprite(&gMultiuseSpriteTemplate, (left + 1) * 8 + 32, (top * 8) + 40, 0);
+
+ if (gLinkContestFlags & LINK_CONTEST_FLAG_IS_LINK)
+ {
+ if (!(gLinkContestFlags & LINK_CONTEST_FLAG_HAS_RS_PLAYER))
+ DoMonFrontSpriteAnimation(&gSprites[spriteId], species, FALSE, 0);
+ }
+ else
+ {
+ DoMonFrontSpriteAnimation(&gSprites[spriteId], species, FALSE, 0);
+ }
+
+ gTasks[taskId].data[2] = spriteId;
+ gTasks[taskId].data[3] = left;
+ gTasks[taskId].data[4] = top;
+ gSprites[spriteId].callback = SpriteCallbackDummy;
+ gSprites[spriteId].oam.priority = 0;
+ }
+}
+
+void HideContestEntryMonPic(void)
+{
+ u8 taskId = FindTaskIdByFunc(Task_ShowContestEntryMonPic);
+ if (taskId != 0xFF)
+ {
+ gTasks[taskId].data[0]++;
+ FreeMonSpritesGfx();
+ }
+}
+
+static void Task_ShowContestEntryMonPic(u8 taskId)
+{
+ struct Task *task = &gTasks[taskId];
+ struct Sprite *sprite;
+
+ switch(task->data[0])
+ {
+ case 0:
+ task->data[0]++;
+ break;
+ case 1:
+ task->data[5] = CreateWindowFromRect(10, 3, 8, 8);
+ SetStandardWindowBorderStyle(task->data[5], 1);
+ task->data[0]++;
+ break;
+ case 2:
+ break;
+ case 3:
+ sprite = &gSprites[task->data[2]];
+ FreeSpritePaletteByTag(GetSpritePaletteTagByPaletteNum(sprite->oam.paletteNum));
+
+ if(sprite->oam.affineMode)
+ FreeOamMatrix(sprite->oam.matrixNum);
+
+ DestroySprite(sprite);
+ task->data[0]++;
+ break;
+ case 4:
+ ClearToTransparentAndRemoveWindow(gTasks[taskId].data[5]);
+ DestroyTask(taskId);
+ break;
+ }
+}
+
+void GetContestMultiplayerId(void)
+{
+ if ((gLinkContestFlags & LINK_CONTEST_FLAG_IS_LINK)
+ && gNumLinkContestPlayers == CONTESTANT_COUNT
+ && !(gLinkContestFlags & LINK_CONTEST_FLAG_IS_WIRELESS))
+ gSpecialVar_Result = GetMultiplayerId();
+ else
+ gSpecialVar_Result = MAX_LINK_PLAYERS;
+}
+
+void GenerateContestRand(void)
+{
+ u16 random;
+ u16 *result;
+
+ if (gLinkContestFlags & LINK_CONTEST_FLAG_IS_LINK)
+ {
+ gContestRngValue = ISO_RANDOMIZE1(gContestRngValue);
+ random = gContestRngValue >> 16;
+ result = &gSpecialVar_Result;
+ }
+ else
+ {
+ result = &gSpecialVar_Result;
+ random = Random();
+ }
+ *result = random % *result;
+}
+
+u16 GetContestRand(void)
+{
+ gContestRngValue = ISO_RANDOMIZE1(gContestRngValue);
+ return gContestRngValue >> 16;
+}
+
+bool8 LinkContestWaitForConnection(void)
+{
+ if (gLinkContestFlags & LINK_CONTEST_FLAG_IS_WIRELESS)
+ {
+ CreateTask(Task_LinkContestWaitForConnection, 5);
+ return TRUE;
+ }
+ else
+ {
+ return FALSE;
+ }
+}
+
+static void Task_LinkContestWaitForConnection(u8 taskId)
+{
+ switch (gTasks[taskId].data[0])
+ {
+ case 0:
+ if (IsLinkTaskFinished())
+ {
+ SetLinkStandbyCallback();
+ gTasks[taskId].data[0]++;
+ }
+ break;
+ case 1:
+ gTasks[taskId].data[0]++;
+ break;
+ default:
+ if (IsLinkTaskFinished() == 1)
+ {
+ EnableBothScriptContexts();
+ DestroyTask(taskId);
+ }
+ break;
+ }
+}
+
+void LinkContestTryShowWirelessIndicator(void)
+{
+ if (gLinkContestFlags & LINK_CONTEST_FLAG_IS_WIRELESS)
+ {
+ if (gReceivedRemoteLinkPlayers)
+ {
+ LoadWirelessStatusIndicatorSpriteGfx();
+ CreateWirelessStatusIndicatorSprite(8, 8);
+ }
+ }
+}
+
+void LinkContestTryHideWirelessIndicator(void)
+{
+ if (gLinkContestFlags & LINK_CONTEST_FLAG_IS_WIRELESS)
+ {
+ if (gReceivedRemoteLinkPlayers)
+ DestroyWirelessStatusIndicatorSprite();
+ }
+}
+
+bool8 IsContestWithRSPlayer(void)
+{
+ if (gLinkContestFlags & LINK_CONTEST_FLAG_HAS_RS_PLAYER)
+ return TRUE;
+ else
+ return FALSE;
+}
+
+void ClearLinkContestFlags(void)
+{
+ gLinkContestFlags = 0;
+}
+
+bool8 IsWirelessContest(void)
+{
+ if (gLinkContestFlags & LINK_CONTEST_FLAG_IS_WIRELESS)
+ return TRUE;
+ else
+ return FALSE;
+}
diff --git a/src/credits.c b/src/credits.c
index dd1166d82..5f331097b 100644
--- a/src/credits.c
+++ b/src/credits.c
@@ -20,7 +20,6 @@
#include "trig.h"
#include "graphics.h"
#include "pokedex.h"
-#include "constants/vars.h"
#include "event_data.h"
#include "random.h"
#include "constants/species.h"
@@ -1161,7 +1160,7 @@ static void sub_8175548(void)
{
ResetBgsAndClearDma3BusyFlags(0);
InitBgsFromTemplates(0, sBackgroundTemplates, 1);
- SetBgTilemapBuffer(0, AllocZeroed(0x800));
+ SetBgTilemapBuffer(0, AllocZeroed(BG_SCREEN_SIZE));
LoadPalette(gUnknown_085E56F0, 0x80, 0x40);
InitWindows(sWindowTemplates);
DeactivateAllTextPrinters();
@@ -1240,7 +1239,7 @@ void CB2_StartCreditsSequence(void)
BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, RGB_BLACK);
EnableInterrupts(INTR_FLAG_VBLANK);
SetVBlankCallback(CreditsVBlankCallback);
- m4aSongNumStart(MUS_THANKFOR);
+ m4aSongNumStart(MUS_CREDITS);
SetMainCallback2(CB2_RunCreditsSequence);
gUnknown_0203BCE5 = 0;
sCreditsData = AllocZeroed(sizeof(struct CreditsData));
diff --git a/src/crt0.s b/src/crt0.s
index 3ab711713..cb7c93a6b 100644
--- a/src/crt0.s
+++ b/src/crt0.s
@@ -82,10 +82,10 @@ GPIOPortReadEnable: @ 80000C8
.align 2, 0
.global Init
Init: @ 8000204
- mov r0, PSR_IRQ_MODE
+ mov r0, #PSR_IRQ_MODE
msr cpsr_cf, r0
ldr sp, sp_irq
- mov r0, PSR_SYS_MODE
+ mov r0, #PSR_SYS_MODE
msr cpsr_cf, r0
ldr sp, sp_sys
ldr r1, =INTR_VECTOR
@@ -106,91 +106,91 @@ sp_irq: .word IWRAM_END - 0x60
.align 2, 0
.global IntrMain
IntrMain: @ 8000248
- mov r3, REG_BASE
- add r3, r3, 0x200
- ldr r2, [r3, OFFSET_REG_IE - 0x200]
- ldrh r1, [r3, OFFSET_REG_IME - 0x200]
+ mov r3, #REG_BASE
+ add r3, r3, #OFFSET_REG_IE
+ ldr r2, [r3]
+ ldrh r1, [r3, #OFFSET_REG_IME - 0x200]
mrs r0, spsr
- stmdb sp!, {r0-r3,lr}
- mov r0, 0
- strh r0, [r3, OFFSET_REG_IME - 0x200]
- and r1, r2, r2, lsr 16
- mov r12, 0
- ands r0, r1, INTR_FLAG_VCOUNT
+ stmfd sp!, {r0-r3,lr}
+ mov r0, #0
+ strh r0, [r3, #OFFSET_REG_IME - 0x200]
+ and r1, r2, r2, lsr #16
+ mov r12, #0
+ ands r0, r1, #INTR_FLAG_VCOUNT
bne IntrMain_FoundIntr
add r12, r12, 0x4
mov r0, 0x1
- strh r0, [r3, OFFSET_REG_IME - 0x200]
- ands r0, r1, INTR_FLAG_SERIAL
+ strh r0, [r3, #OFFSET_REG_IME - 0x200]
+ ands r0, r1, #INTR_FLAG_SERIAL
bne IntrMain_FoundIntr
add r12, r12, 0x4
- ands r0, r1, INTR_FLAG_TIMER3
+ ands r0, r1, #INTR_FLAG_TIMER3
bne IntrMain_FoundIntr
add r12, r12, 0x4
- ands r0, r1, INTR_FLAG_HBLANK
+ ands r0, r1, #INTR_FLAG_HBLANK
bne IntrMain_FoundIntr
add r12, r12, 0x4
- ands r0, r1, INTR_FLAG_VBLANK
+ ands r0, r1, #INTR_FLAG_VBLANK
bne IntrMain_FoundIntr
add r12, r12, 0x4
- ands r0, r1, INTR_FLAG_TIMER0
+ ands r0, r1, #INTR_FLAG_TIMER0
bne IntrMain_FoundIntr
add r12, r12, 0x4
- ands r0, r1, INTR_FLAG_TIMER1
+ ands r0, r1, #INTR_FLAG_TIMER1
bne IntrMain_FoundIntr
add r12, r12, 0x4
- ands r0, r1, INTR_FLAG_TIMER2
+ ands r0, r1, #INTR_FLAG_TIMER2
bne IntrMain_FoundIntr
add r12, r12, 0x4
- ands r0, r1, INTR_FLAG_DMA0
+ ands r0, r1, #INTR_FLAG_DMA0
bne IntrMain_FoundIntr
add r12, r12, 0x4
- ands r0, r1, INTR_FLAG_DMA1
+ ands r0, r1, #INTR_FLAG_DMA1
bne IntrMain_FoundIntr
add r12, r12, 0x4
- ands r0, r1, INTR_FLAG_DMA2
+ ands r0, r1, #INTR_FLAG_DMA2
bne IntrMain_FoundIntr
add r12, r12, 0x4
- ands r0, r1, INTR_FLAG_DMA3
+ ands r0, r1, #INTR_FLAG_DMA3
bne IntrMain_FoundIntr
add r12, r12, 0x4
- ands r0, r1, INTR_FLAG_KEYPAD
+ ands r0, r1, #INTR_FLAG_KEYPAD
bne IntrMain_FoundIntr
add r12, r12, 0x4
- ands r0, r1, INTR_FLAG_GAMEPAK
- strbne r0, [r3, OFFSET_REG_SOUNDCNT_X - 0x200]
+ ands r0, r1, #INTR_FLAG_GAMEPAK
+ strbne r0, [r3, #REG_SOUNDCNT_X - REG_IE]
bne . @ spin
IntrMain_FoundIntr:
- strh r0, [r3, OFFSET_REG_IF - 0x200]
+ strh r0, [r3, #OFFSET_REG_IF - 0x200]
bic r2, r2, r0
ldr r0, =gSTWIStatus
ldr r0, [r0]
ldrb r0, [r0, 0xA]
mov r1, 0x8
- mov r0, r1, lsl r0
- orr r0, r0, INTR_FLAG_GAMEPAK
- orr r1, r0, INTR_FLAG_SERIAL | INTR_FLAG_TIMER3 | INTR_FLAG_VCOUNT | INTR_FLAG_HBLANK
+ lsl r0, r1, r0
+ orr r0, r0, #INTR_FLAG_GAMEPAK
+ orr r1, r0, #INTR_FLAG_SERIAL | INTR_FLAG_TIMER3 | INTR_FLAG_VCOUNT | INTR_FLAG_HBLANK
and r1, r1, r2
- strh r1, [r3, OFFSET_REG_IE - 0x200]
+ strh r1, [r3, #OFFSET_REG_IE - 0x200]
mrs r3, cpsr
- bic r3, r3, PSR_I_BIT | PSR_F_BIT | PSR_MODE_MASK
- orr r3, r3, PSR_SYS_MODE
+ bic r3, r3, #PSR_I_BIT | PSR_F_BIT | PSR_MODE_MASK
+ orr r3, r3, #PSR_SYS_MODE
msr cpsr_cf, r3
ldr r1, =gIntrTable
add r1, r1, r12
ldr r0, [r1]
- stmdb sp!, {lr}
+ stmfd sp!, {lr}
adr lr, IntrMain_RetAddr
bx r0
IntrMain_RetAddr:
- ldmia sp!, {lr}
+ ldmfd sp!, {lr}
mrs r3, cpsr
- bic r3, r3, PSR_I_BIT | PSR_F_BIT | PSR_MODE_MASK
- orr r3, r3, PSR_I_BIT | PSR_IRQ_MODE
+ bic r3, r3, #PSR_I_BIT | PSR_F_BIT | PSR_MODE_MASK
+ orr r3, r3, #PSR_I_BIT | PSR_IRQ_MODE
msr cpsr_cf, r3
ldmia sp!, {r0-r3,lr}
- strh r2, [r3, OFFSET_REG_IE - 0x200]
- strh r1, [r3, OFFSET_REG_IME - 0x200]
+ strh r2, [r3, #OFFSET_REG_IE - 0x200]
+ strh r1, [r3, #OFFSET_REG_IME - 0x200]
msr spsr_cf, r0
bx lr
diff --git a/src/data/contest_moves.h b/src/data/contest_moves.h
index 5460ac806..658528210 100644
--- a/src/data/contest_moves.h
+++ b/src/data/contest_moves.h
@@ -2838,289 +2838,289 @@ const struct ContestEffect gContestEffects[] =
{
[CONTEST_EFFECT_HIGHLY_APPEALING] =
{
- .effectType = 0,
+ .effectType = CONTEST_EFFECT_TYPE_APPEAL,
.appeal = 40,
.jam = 0,
},
[CONTEST_EFFECT_USER_MORE_EASILY_STARTLED] =
{
- .effectType = 0,
+ .effectType = CONTEST_EFFECT_TYPE_APPEAL,
.appeal = 60,
.jam = 0,
},
[CONTEST_EFFECT_GREAT_APPEAL_BUT_NO_MORE_MOVES] =
{
- .effectType = 0,
+ .effectType = CONTEST_EFFECT_TYPE_APPEAL,
.appeal = 80,
.jam = 0,
},
[CONTEST_EFFECT_REPETITION_NOT_BORING] =
{
- .effectType = 0,
+ .effectType = CONTEST_EFFECT_TYPE_APPEAL,
.appeal = 30,
.jam = 0,
},
[CONTEST_EFFECT_AVOID_STARTLE_ONCE] =
{
- .effectType = 1,
+ .effectType = CONTEST_EFFECT_TYPE_AVOID_STARTLE,
.appeal = 20,
.jam = 0,
},
[CONTEST_EFFECT_AVOID_STARTLE] =
{
- .effectType = 1,
+ .effectType = CONTEST_EFFECT_TYPE_AVOID_STARTLE,
.appeal = 10,
.jam = 0,
},
[CONTEST_EFFECT_AVOID_STARTLE_SLIGHTLY] =
{
- .effectType = 1,
+ .effectType = CONTEST_EFFECT_TYPE_AVOID_STARTLE,
.appeal = 30,
.jam = 0,
},
[CONTEST_EFFECT_USER_LESS_EASILY_STARTLED] =
{
- .effectType = 1,
+ .effectType = CONTEST_EFFECT_TYPE_AVOID_STARTLE,
.appeal = 30,
.jam = 0,
},
[CONTEST_EFFECT_STARTLE_FRONT_MON] =
{
- .effectType = 2,
+ .effectType = CONTEST_EFFECT_TYPE_STARTLE_MON,
.appeal = 30,
.jam = 20,
},
[CONTEST_EFFECT_SLIGHTLY_STARTLE_PREV_MONS] =
{
- .effectType = 3,
+ .effectType = CONTEST_EFFECT_TYPE_STARTLE_MONS,
.appeal = 30,
.jam = 10,
},
[CONTEST_EFFECT_STARTLE_PREV_MON] =
{
- .effectType = 2,
+ .effectType = CONTEST_EFFECT_TYPE_STARTLE_MON,
.appeal = 20,
.jam = 30,
},
[CONTEST_EFFECT_STARTLE_PREV_MONS] =
{
- .effectType = 3,
+ .effectType = CONTEST_EFFECT_TYPE_STARTLE_MONS,
.appeal = 20,
.jam = 20,
},
[CONTEST_EFFECT_BADLY_STARTLE_FRONT_MON] =
{
- .effectType = 2,
+ .effectType = CONTEST_EFFECT_TYPE_STARTLE_MON,
.appeal = 10,
.jam = 40,
},
[CONTEST_EFFECT_BADLY_STARTLE_PREV_MONS] =
{
- .effectType = 3,
+ .effectType = CONTEST_EFFECT_TYPE_STARTLE_MONS,
.appeal = 10,
.jam = 30,
},
[CONTEST_EFFECT_STARTLE_PREV_MON_2] =
{
- .effectType = 2,
+ .effectType = CONTEST_EFFECT_TYPE_STARTLE_MON,
.appeal = 30,
.jam = 20,
},
[CONTEST_EFFECT_STARTLE_PREV_MONS_2] =
{
- .effectType = 3,
+ .effectType = CONTEST_EFFECT_TYPE_STARTLE_MONS,
.appeal = 30,
.jam = 10,
},
[CONTEST_EFFECT_SHIFT_JUDGE_ATTENTION] =
{
- .effectType = 4,
+ .effectType = CONTEST_EFFECT_TYPE_WORSEN,
.appeal = 30,
.jam = 0,
},
[CONTEST_EFFECT_STARTLE_MON_WITH_JUDGES_ATTENTION] =
{
- .effectType = 3,
+ .effectType = CONTEST_EFFECT_TYPE_STARTLE_MONS,
.appeal = 20,
.jam = 10,
},
[CONTEST_EFFECT_JAMS_OTHERS_BUT_MISS_ONE_TURN] =
{
- .effectType = 3,
+ .effectType = CONTEST_EFFECT_TYPE_STARTLE_MONS,
.appeal = 40,
.jam = 40,
},
[CONTEST_EFFECT_STARTLE_MONS_SAME_TYPE_APPEAL] =
{
- .effectType = 3,
+ .effectType = CONTEST_EFFECT_TYPE_STARTLE_MONS,
.appeal = 20,
.jam = 10,
},
[CONTEST_EFFECT_STARTLE_MONS_COOL_APPEAL] =
{
- .effectType = 3,
+ .effectType = CONTEST_EFFECT_TYPE_STARTLE_MONS,
.appeal = 20,
.jam = 10,
},
[CONTEST_EFFECT_STARTLE_MONS_BEAUTY_APPEAL] =
{
- .effectType = 3,
+ .effectType = CONTEST_EFFECT_TYPE_STARTLE_MONS,
.appeal = 20,
.jam = 10,
},
[CONTEST_EFFECT_STARTLE_MONS_CUTE_APPEAL] =
{
- .effectType = 3,
+ .effectType = CONTEST_EFFECT_TYPE_STARTLE_MONS,
.appeal = 20,
.jam = 10,
},
[CONTEST_EFFECT_STARTLE_MONS_SMART_APPEAL] =
{
- .effectType = 3,
+ .effectType = CONTEST_EFFECT_TYPE_STARTLE_MONS,
.appeal = 20,
.jam = 10,
},
[CONTEST_EFFECT_STARTLE_MONS_TOUGH_APPEAL] =
{
- .effectType = 3,
+ .effectType = CONTEST_EFFECT_TYPE_STARTLE_MONS,
.appeal = 20,
.jam = 10,
},
[CONTEST_EFFECT_MAKE_FOLLOWING_MON_NERVOUS] =
{
- .effectType = 4,
+ .effectType = CONTEST_EFFECT_TYPE_WORSEN,
.appeal = 20,
.jam = 0,
},
[CONTEST_EFFECT_MAKE_FOLLOWING_MONS_NERVOUS] =
{
- .effectType = 4,
+ .effectType = CONTEST_EFFECT_TYPE_WORSEN,
.appeal = 20,
.jam = 0,
},
[CONTEST_EFFECT_WORSEN_CONDITION_OF_PREV_MONS] =
{
- .effectType = 4,
+ .effectType = CONTEST_EFFECT_TYPE_WORSEN,
.appeal = 30,
.jam = 0,
},
[CONTEST_EFFECT_BADLY_STARTLES_MONS_IN_GOOD_CONDITION] =
{
- .effectType = 3,
+ .effectType = CONTEST_EFFECT_TYPE_STARTLE_MONS,
.appeal = 30,
.jam = 10,
},
[CONTEST_EFFECT_BETTER_IF_FIRST] =
{
- .effectType = 5,
+ .effectType = CONTEST_EFFECT_TYPE_SPECIAL_APPEAL,
.appeal = 20,
.jam = 0,
},
[CONTEST_EFFECT_BETTER_IF_LAST] =
{
- .effectType = 5,
+ .effectType = CONTEST_EFFECT_TYPE_SPECIAL_APPEAL,
.appeal = 20,
.jam = 0,
},
[CONTEST_EFFECT_APPEAL_AS_GOOD_AS_PREV_ONES] =
{
- .effectType = 5,
+ .effectType = CONTEST_EFFECT_TYPE_SPECIAL_APPEAL,
.appeal = 10,
.jam = 0,
},
[CONTEST_EFFECT_APPEAL_AS_GOOD_AS_PREV_ONE] =
{
- .effectType = 5,
+ .effectType = CONTEST_EFFECT_TYPE_SPECIAL_APPEAL,
.appeal = 10,
.jam = 0,
},
[CONTEST_EFFECT_BETTER_WHEN_LATER] =
{
- .effectType = 5,
+ .effectType = CONTEST_EFFECT_TYPE_SPECIAL_APPEAL,
.appeal = 10,
.jam = 0,
},
[CONTEST_EFFECT_QUALITY_DEPENDS_ON_TIMING] =
{
- .effectType = 5,
+ .effectType = CONTEST_EFFECT_TYPE_SPECIAL_APPEAL,
.appeal = 10,
.jam = 0,
},
[CONTEST_EFFECT_BETTER_IF_SAME_TYPE] =
{
- .effectType = 5,
+ .effectType = CONTEST_EFFECT_TYPE_SPECIAL_APPEAL,
.appeal = 20,
.jam = 0,
},
[CONTEST_EFFECT_BETTER_IF_DIFF_TYPE] =
{
- .effectType = 5,
+ .effectType = CONTEST_EFFECT_TYPE_SPECIAL_APPEAL,
.appeal = 20,
.jam = 0,
},
[CONTEST_EFFECT_AFFECTED_BY_PREV_APPEAL] =
{
- .effectType = 5,
+ .effectType = CONTEST_EFFECT_TYPE_SPECIAL_APPEAL,
.appeal = 30,
.jam = 0,
},
[CONTEST_EFFECT_IMPROVE_CONDITION_PREVENT_NERVOUSNESS] =
{
- .effectType = 5,
+ .effectType = CONTEST_EFFECT_TYPE_SPECIAL_APPEAL,
.appeal = 10,
.jam = 0,
},
[CONTEST_EFFECT_BETTER_WITH_GOOD_CONDITION] =
{
- .effectType = 5,
+ .effectType = CONTEST_EFFECT_TYPE_SPECIAL_APPEAL,
.appeal = 10,
.jam = 0,
},
[CONTEST_EFFECT_NEXT_APPEAL_EARLIER] =
{
- .effectType = 6,
+ .effectType = CONTEST_EFFECT_TYPE_TURN_ORDER,
.appeal = 30,
.jam = 0,
},
[CONTEST_EFFECT_NEXT_APPEAL_LATER] =
{
- .effectType = 6,
+ .effectType = CONTEST_EFFECT_TYPE_TURN_ORDER,
.appeal = 30,
.jam = 0,
},
[CONTEST_EFFECT_MAKE_SCRAMBLING_TURN_ORDER_EASIER] =
{
- .effectType = 6,
+ .effectType = CONTEST_EFFECT_TYPE_TURN_ORDER,
.appeal = 30,
.jam = 0,
},
[CONTEST_EFFECT_SCRAMBLE_NEXT_TURN_ORDER] =
{
- .effectType = 6,
+ .effectType = CONTEST_EFFECT_TYPE_TURN_ORDER,
.appeal = 30,
.jam = 0,
},
[CONTEST_EFFECT_EXCITE_AUDIENCE_IN_ANY_CONTEST] =
{
- .effectType = 5,
+ .effectType = CONTEST_EFFECT_TYPE_SPECIAL_APPEAL,
.appeal = 10,
.jam = 0,
},
[CONTEST_EFFECT_BADLY_STARTLE_MONS_WITH_GOOD_APPEALS] =
{
- .effectType = 3,
+ .effectType = CONTEST_EFFECT_TYPE_STARTLE_MONS,
.appeal = 20,
.jam = 10,
},
[CONTEST_EFFECT_BETTER_WHEN_AUDIENCE_EXCITED] =
{
- .effectType = 5,
+ .effectType = CONTEST_EFFECT_TYPE_SPECIAL_APPEAL,
.appeal = 10,
.jam = 0,
},
[CONTEST_EFFECT_DONT_EXCITE_AUDIENCE] =
{
- .effectType = 4,
+ .effectType = CONTEST_EFFECT_TYPE_WORSEN,
.appeal = 30,
.jam = 0,
},
diff --git a/src/data/contest_opponents.h b/src/data/contest_opponents.h
index 8fa746725..6de931ef2 100644
--- a/src/data/contest_opponents.h
+++ b/src/data/contest_opponents.h
@@ -100,7 +100,44 @@
#define CONTEST_OPPONENT_TREY 94
#define CONTEST_OPPONENT_LANE 95
-const struct ContestWinner gUnknown_08587FA4[] =
+// All contest opponents have a common set of AI flags (which contains all of the actually
+// useful AI scripts, as well as some dummys) and a random combination of 2-3 dummy flags.
+// Seems that like the battle AI they had more plans for this than what ended up in the final game
+#define CONTEST_AI_SET_1 (CONTEST_AI_COMMON | CONTEST_AI_DUMMY_20 | CONTEST_AI_DUMMY_21)
+#define CONTEST_AI_SET_2 (CONTEST_AI_COMMON | CONTEST_AI_DUMMY_19 | CONTEST_AI_DUMMY_25)
+#define CONTEST_AI_SET_3 (CONTEST_AI_COMMON | CONTEST_AI_DUMMY_18 | CONTEST_AI_DUMMY_23)
+#define CONTEST_AI_SET_4 (CONTEST_AI_COMMON | CONTEST_AI_DUMMY_17 | CONTEST_AI_DUMMY_23)
+#define CONTEST_AI_SET_5 (CONTEST_AI_COMMON | CONTEST_AI_DUMMY_16 | CONTEST_AI_DUMMY_25)
+#define CONTEST_AI_SET_6 (CONTEST_AI_COMMON | CONTEST_AI_DUMMY_15 | CONTEST_AI_DUMMY_22)
+#define CONTEST_AI_SET_7 (CONTEST_AI_COMMON | CONTEST_AI_DUMMY_14 | CONTEST_AI_DUMMY_23)
+#define CONTEST_AI_SET_8 (CONTEST_AI_COMMON | CONTEST_AI_DUMMY_13 | CONTEST_AI_DUMMY_21)
+#define CONTEST_AI_SET_9 (CONTEST_AI_COMMON | CONTEST_AI_DUMMY_12 | CONTEST_AI_DUMMY_24)
+#define CONTEST_AI_SET_A (CONTEST_AI_COMMON | CONTEST_AI_DUMMY_11 | CONTEST_AI_DUMMY_25)
+#define CONTEST_AI_SET_B (CONTEST_AI_COMMON | CONTEST_AI_DUMMY_10 | CONTEST_AI_DUMMY_21)
+#define CONTEST_AI_SET_C (CONTEST_AI_COMMON | CONTEST_AI_DUMMY_9 | CONTEST_AI_DUMMY_21)
+#define CONTEST_AI_SET_D (CONTEST_AI_COMMON | CONTEST_AI_DUMMY_8 | CONTEST_AI_DUMMY_22 | CONTEST_AI_DUMMY_25)
+#define CONTEST_AI_SET_E (CONTEST_AI_COMMON | CONTEST_AI_DUMMY_7 | CONTEST_AI_DUMMY_24)
+#define CONTEST_AI_SET_F (CONTEST_AI_COMMON | CONTEST_AI_DUMMY_6 | CONTEST_AI_DUMMY_25)
+#define CONTEST_AI_SET_10 (CONTEST_AI_COMMON | CONTEST_AI_DUMMY_20 | CONTEST_AI_DUMMY_23)
+#define CONTEST_AI_SET_11 (CONTEST_AI_COMMON | CONTEST_AI_DUMMY_18 | CONTEST_AI_DUMMY_25)
+#define CONTEST_AI_SET_12 (CONTEST_AI_COMMON | CONTEST_AI_DUMMY_17 | CONTEST_AI_DUMMY_25)
+#define CONTEST_AI_SET_13 (CONTEST_AI_COMMON | CONTEST_AI_DUMMY_16 | CONTEST_AI_DUMMY_22)
+#define CONTEST_AI_SET_14 (CONTEST_AI_COMMON | CONTEST_AI_DUMMY_15 | CONTEST_AI_DUMMY_21)
+#define CONTEST_AI_SET_15 (CONTEST_AI_COMMON | CONTEST_AI_DUMMY_14 | CONTEST_AI_DUMMY_22)
+#define CONTEST_AI_SET_16 (CONTEST_AI_COMMON | CONTEST_AI_DUMMY_13 | CONTEST_AI_DUMMY_25)
+#define CONTEST_AI_SET_17 (CONTEST_AI_COMMON | CONTEST_AI_DUMMY_12 | CONTEST_AI_DUMMY_23 | CONTEST_AI_DUMMY_25)
+#define CONTEST_AI_SET_18 (CONTEST_AI_COMMON | CONTEST_AI_DUMMY_10 | CONTEST_AI_DUMMY_25)
+#define CONTEST_AI_SET_19 (CONTEST_AI_COMMON | CONTEST_AI_DUMMY_9 | CONTEST_AI_DUMMY_25)
+#define CONTEST_AI_SET_1A (CONTEST_AI_COMMON | CONTEST_AI_DUMMY_8 | CONTEST_AI_DUMMY_25)
+#define CONTEST_AI_SET_1B (CONTEST_AI_COMMON | CONTEST_AI_DUMMY_7 | CONTEST_AI_DUMMY_21)
+#define CONTEST_AI_SET_1C (CONTEST_AI_COMMON | CONTEST_AI_DUMMY_6 | CONTEST_AI_DUMMY_21)
+#define CONTEST_AI_SET_1D (CONTEST_AI_COMMON | CONTEST_AI_DUMMY_20 | CONTEST_AI_DUMMY_25)
+#define CONTEST_AI_SET_1E (CONTEST_AI_COMMON | CONTEST_AI_DUMMY_15 | CONTEST_AI_DUMMY_25)
+#define CONTEST_AI_SET_1F (CONTEST_AI_COMMON | CONTEST_AI_DUMMY_14 | CONTEST_AI_DUMMY_25)
+#define CONTEST_AI_SET_20 (CONTEST_AI_COMMON | CONTEST_AI_DUMMY_12 | CONTEST_AI_DUMMY_25)
+#define CONTEST_AI_SET_21 (CONTEST_AI_COMMON | CONTEST_AI_DUMMY_7 | CONTEST_AI_DUMMY_25)
+
+const struct ContestWinner gDefaultContestWinners[] =
{
{
.personality = 0,
@@ -183,7 +220,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("POOCHY"),
.trainerName = _("JIMMY"),
.trainerGfxId = OBJ_EVENT_GFX_BOY_1,
- .aiChecks = 0xC000FFF,
+ .aiFlags = CONTEST_AI_SET_1,
.whichRank = CONTEST_RANK_NORMAL,
.aiPool_Cool = TRUE,
.aiPool_Beauty = FALSE,
@@ -203,7 +240,6 @@ const struct ContestPokemon gContestOpponents[] =
.smart = 3,
.tough = 4,
.sheen = 50,
- .unk2C = {0},
.personality = 0,
.otId = 0xFFFF
},
@@ -212,7 +248,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("MUSILLE"),
.trainerName = _("EDITH"),
.trainerGfxId = OBJ_EVENT_GFX_GIRL_1,
- .aiChecks = 0x82000FFF,
+ .aiFlags = CONTEST_AI_SET_2,
.whichRank = CONTEST_RANK_NORMAL,
.aiPool_Cool = FALSE,
.aiPool_Beauty = FALSE,
@@ -232,7 +268,6 @@ const struct ContestPokemon gContestOpponents[] =
.smart = 1,
.tough = 2,
.sheen = 60,
- .unk2C = {0},
.personality = 0,
.otId = 0xFFFF
},
@@ -241,7 +276,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("DUSTER"),
.trainerName = _("EVAN"),
.trainerGfxId = OBJ_EVENT_GFX_LITTLE_BOY,
- .aiChecks = 0x21000FFF,
+ .aiFlags = CONTEST_AI_SET_3,
.whichRank = CONTEST_RANK_NORMAL,
.aiPool_Cool = FALSE,
.aiPool_Beauty = TRUE,
@@ -261,7 +296,6 @@ const struct ContestPokemon gContestOpponents[] =
.smart = 12,
.tough = 4,
.sheen = 70,
- .unk2C = {0},
.personality = 0,
.otId = 0xFFFF
},
@@ -270,7 +304,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("DOTS"),
.trainerName = _("KELSEY"),
.trainerGfxId = OBJ_EVENT_GFX_WOMAN_1,
- .aiChecks = 0x20800FFF,
+ .aiFlags = CONTEST_AI_SET_4,
.whichRank = CONTEST_RANK_NORMAL,
.aiPool_Cool = FALSE,
.aiPool_Beauty = FALSE,
@@ -290,7 +324,6 @@ const struct ContestPokemon gContestOpponents[] =
.smart = 2,
.tough = 7,
.sheen = 80,
- .unk2C = {0},
.personality = 0,
.otId = 0xFFFF
},
@@ -299,7 +332,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("TATAY"),
.trainerName = _("MADISON"),
.trainerGfxId = OBJ_EVENT_GFX_POKEFAN_F,
- .aiChecks = 0x80400FFF,
+ .aiFlags = CONTEST_AI_SET_5,
.whichRank = CONTEST_RANK_NORMAL,
.aiPool_Cool = TRUE,
.aiPool_Beauty = FALSE,
@@ -319,7 +352,6 @@ const struct ContestPokemon gContestOpponents[] =
.smart = 5,
.tough = 4,
.sheen = 90,
- .unk2C = {0},
.personality = 0,
.otId = 0xFFFF
},
@@ -328,7 +360,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("NINDA"),
.trainerName = _("RAYMOND"),
.trainerGfxId = OBJ_EVENT_GFX_BLACK_BELT,
- .aiChecks = 0x10200FFF,
+ .aiFlags = CONTEST_AI_SET_6,
.whichRank = CONTEST_RANK_NORMAL,
.aiPool_Cool = FALSE,
.aiPool_Beauty = FALSE,
@@ -348,7 +380,6 @@ const struct ContestPokemon gContestOpponents[] =
.smart = 7,
.tough = 8,
.sheen = 100,
- .unk2C = {0},
.personality = 0,
.otId = 0xFFFF
},
@@ -357,7 +388,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("SMISH"),
.trainerName = _("GRANT"),
.trainerGfxId = OBJ_EVENT_GFX_YOUNGSTER,
- .aiChecks = 0x20100FFF,
+ .aiFlags = CONTEST_AI_SET_7,
.whichRank = CONTEST_RANK_NORMAL,
.aiPool_Cool = FALSE,
.aiPool_Beauty = FALSE,
@@ -377,7 +408,6 @@ const struct ContestPokemon gContestOpponents[] =
.smart = 2,
.tough = 2,
.sheen = 50,
- .unk2C = {0},
.personality = 0,
.otId = 0xFFFF
},
@@ -386,7 +416,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("SLEAL"),
.trainerName = _("PAIGE"),
.trainerGfxId = OBJ_EVENT_GFX_WOMAN_4,
- .aiChecks = 0x8080FFF,
+ .aiFlags = CONTEST_AI_SET_8,
.whichRank = CONTEST_RANK_NORMAL,
.aiPool_Cool = FALSE,
.aiPool_Beauty = TRUE,
@@ -406,7 +436,6 @@ const struct ContestPokemon gContestOpponents[] =
.smart = 10,
.tough = 10,
.sheen = 60,
- .unk2C = {0},
.personality = 0,
.otId = 0xFFFF
},
@@ -415,7 +444,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("SLOKTH"),
.trainerName = _("ALEC"),
.trainerGfxId = OBJ_EVENT_GFX_CAMPER,
- .aiChecks = 0x40040FFF,
+ .aiFlags = CONTEST_AI_SET_9,
.whichRank = CONTEST_RANK_NORMAL,
.aiPool_Cool = FALSE,
.aiPool_Beauty = TRUE,
@@ -435,7 +464,6 @@ const struct ContestPokemon gContestOpponents[] =
.smart = 5,
.tough = 18,
.sheen = 70,
- .unk2C = {0},
.personality = 0,
.otId = 0xFFFF
},
@@ -444,7 +472,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("WHIRIS"),
.trainerName = _("SYDNEY"),
.trainerGfxId = OBJ_EVENT_GFX_LASS,
- .aiChecks = 0x80020FFF,
+ .aiFlags = CONTEST_AI_SET_A,
.whichRank = CONTEST_RANK_NORMAL,
.aiPool_Cool = TRUE,
.aiPool_Beauty = FALSE,
@@ -464,7 +492,6 @@ const struct ContestPokemon gContestOpponents[] =
.smart = 2,
.tough = 7,
.sheen = 80,
- .unk2C = {0},
.personality = 0,
.otId = 0xFFFF
},
@@ -473,7 +500,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("MAHITA"),
.trainerName = _("MORRIS"),
.trainerGfxId = OBJ_EVENT_GFX_SCHOOL_KID_M,
- .aiChecks = 0x8010FFF,
+ .aiFlags = CONTEST_AI_SET_B,
.whichRank = CONTEST_RANK_NORMAL,
.aiPool_Cool = TRUE,
.aiPool_Beauty = FALSE,
@@ -493,7 +520,6 @@ const struct ContestPokemon gContestOpponents[] =
.smart = 8,
.tough = 1,
.sheen = 90,
- .unk2C = {0},
.personality = 0,
.otId = 0xFFFF
},
@@ -502,7 +528,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("RONAR"),
.trainerName = _("MARIAH"),
.trainerGfxId = OBJ_EVENT_GFX_GIRL_2,
- .aiChecks = 0x8008FFF,
+ .aiFlags = CONTEST_AI_SET_C,
.whichRank = CONTEST_RANK_NORMAL,
.aiPool_Cool = TRUE,
.aiPool_Beauty = FALSE,
@@ -522,7 +548,6 @@ const struct ContestPokemon gContestOpponents[] =
.smart = 10,
.tough = 2,
.sheen = 100,
- .unk2C = {0},
.personality = 0,
.otId = 0xFFFF
},
@@ -531,7 +556,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("BATRO"),
.trainerName = _("RUSSELL"),
.trainerGfxId = OBJ_EVENT_GFX_MAN_3,
- .aiChecks = 0x90004FFF,
+ .aiFlags = CONTEST_AI_SET_D,
.whichRank = CONTEST_RANK_NORMAL,
.aiPool_Cool = FALSE,
.aiPool_Beauty = TRUE,
@@ -551,7 +576,6 @@ const struct ContestPokemon gContestOpponents[] =
.smart = 2,
.tough = 10,
.sheen = 50,
- .unk2C = {0},
.personality = 0,
.otId = 0xFFFF
},
@@ -560,7 +584,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("GULIN"),
.trainerName = _("MELANIE"),
.trainerGfxId = OBJ_EVENT_GFX_TWIN,
- .aiChecks = 0x40002FFF,
+ .aiFlags = CONTEST_AI_SET_E,
.whichRank = CONTEST_RANK_NORMAL,
.aiPool_Cool = FALSE,
.aiPool_Beauty = FALSE,
@@ -580,7 +604,6 @@ const struct ContestPokemon gContestOpponents[] =
.smart = 10,
.tough = 5,
.sheen = 60,
- .unk2C = {0},
.personality = 0,
.otId = 0xFFFF
},
@@ -589,7 +612,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("RIKELEC"),
.trainerName = _("CHANCE"),
.trainerGfxId = OBJ_EVENT_GFX_RICH_BOY,
- .aiChecks = 0x80001FFF,
+ .aiFlags = CONTEST_AI_SET_F,
.whichRank = CONTEST_RANK_NORMAL,
.aiPool_Cool = TRUE,
.aiPool_Beauty = TRUE,
@@ -609,7 +632,6 @@ const struct ContestPokemon gContestOpponents[] =
.smart = 1,
.tough = 1,
.sheen = 70,
- .unk2C = {0},
.personality = 0,
.otId = 0xFFFF
},
@@ -618,7 +640,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("BULBY"),
.trainerName = _("AGATHA"),
.trainerGfxId = OBJ_EVENT_GFX_WOMAN_2,
- .aiChecks = 0xC000FFF,
+ .aiFlags = CONTEST_AI_SET_1,
.whichRank = CONTEST_RANK_NORMAL,
.aiPool_Cool = FALSE,
.aiPool_Beauty = FALSE,
@@ -638,7 +660,6 @@ const struct ContestPokemon gContestOpponents[] =
.smart = 10,
.tough = 4,
.sheen = 50,
- .unk2C = {0},
.personality = 0,
.otId = 0xFFFF
},
@@ -647,7 +668,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("FUTTERBE"),
.trainerName = _("BEAU"),
.trainerGfxId = OBJ_EVENT_GFX_HEX_MANIAC,
- .aiChecks = 0x82000FFF,
+ .aiFlags = CONTEST_AI_SET_2,
.whichRank = CONTEST_RANK_NORMAL,
.aiPool_Cool = FALSE,
.aiPool_Beauty = TRUE,
@@ -667,7 +688,6 @@ const struct ContestPokemon gContestOpponents[] =
.smart = 10,
.tough = 4,
.sheen = 60,
- .unk2C = {0},
.personality = 0,
.otId = 0xFFFF
},
@@ -676,7 +696,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("PIDEOT"),
.trainerName = _("KAY"),
.trainerGfxId = OBJ_EVENT_GFX_WOMAN_5,
- .aiChecks = 0x21000FFF,
+ .aiFlags = CONTEST_AI_SET_3,
.whichRank = CONTEST_RANK_NORMAL,
.aiPool_Cool = TRUE,
.aiPool_Beauty = TRUE,
@@ -696,7 +716,6 @@ const struct ContestPokemon gContestOpponents[] =
.smart = 2,
.tough = 3,
.sheen = 70,
- .unk2C = {0},
.personality = 0,
.otId = 0xFFFF
},
@@ -705,7 +724,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("DIGLE"),
.trainerName = _("CALE"),
.trainerGfxId = OBJ_EVENT_GFX_HIKER,
- .aiChecks = 0x20800FFF,
+ .aiFlags = CONTEST_AI_SET_4,
.whichRank = CONTEST_RANK_NORMAL,
.aiPool_Cool = FALSE,
.aiPool_Beauty = FALSE,
@@ -725,7 +744,6 @@ const struct ContestPokemon gContestOpponents[] =
.smart = 5,
.tough = 10,
.sheen = 80,
- .unk2C = {0},
.personality = 0,
.otId = 0xFFFF
},
@@ -734,7 +752,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("WAGIL"),
.trainerName = _("CAITLIN"),
.trainerGfxId = OBJ_EVENT_GFX_TUBER_F,
- .aiChecks = 0x80400FFF,
+ .aiFlags = CONTEST_AI_SET_5,
.whichRank = CONTEST_RANK_NORMAL,
.aiPool_Cool = FALSE,
.aiPool_Beauty = TRUE,
@@ -754,7 +772,6 @@ const struct ContestPokemon gContestOpponents[] =
.smart = 3,
.tough = 10,
.sheen = 90,
- .unk2C = {0},
.personality = 0,
.otId = 0xFFFF
},
@@ -763,7 +780,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("TOTDIL"),
.trainerName = _("COLBY"),
.trainerGfxId = OBJ_EVENT_GFX_NINJA_BOY,
- .aiChecks = 0x10200FFF,
+ .aiFlags = CONTEST_AI_SET_6,
.whichRank = CONTEST_RANK_NORMAL,
.aiPool_Cool = TRUE,
.aiPool_Beauty = TRUE,
@@ -783,7 +800,6 @@ const struct ContestPokemon gContestOpponents[] =
.smart = 1,
.tough = 5,
.sheen = 100,
- .unk2C = {0},
.personality = 0,
.otId = 0xFFFF
},
@@ -792,7 +808,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("BALEDY"),
.trainerName = _("KYLIE"),
.trainerGfxId = OBJ_EVENT_GFX_BEAUTY,
- .aiChecks = 0x20100FFF,
+ .aiFlags = CONTEST_AI_SET_7,
.whichRank = CONTEST_RANK_NORMAL,
.aiPool_Cool = TRUE,
.aiPool_Beauty = FALSE,
@@ -812,7 +828,6 @@ const struct ContestPokemon gContestOpponents[] =
.smart = 6,
.tough = 2,
.sheen = 90,
- .unk2C = {0},
.personality = 0,
.otId = 0xFFFF
},
@@ -821,7 +836,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("BIRDLY"),
.trainerName = _("LIAM"),
.trainerGfxId = OBJ_EVENT_GFX_MAN_5,
- .aiChecks = 0x8080FFF,
+ .aiFlags = CONTEST_AI_SET_8,
.whichRank = CONTEST_RANK_NORMAL,
.aiPool_Cool = FALSE,
.aiPool_Beauty = FALSE,
@@ -841,7 +856,6 @@ const struct ContestPokemon gContestOpponents[] =
.smart = 5,
.tough = 3,
.sheen = 80,
- .unk2C = {0},
.personality = 0,
.otId = 0xFFFF
},
@@ -850,7 +864,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("TARVITAR"),
.trainerName = _("MILO"),
.trainerGfxId = OBJ_EVENT_GFX_MANIAC,
- .aiChecks = 0x40040FFF,
+ .aiFlags = CONTEST_AI_SET_9,
.whichRank = CONTEST_RANK_NORMAL,
.aiPool_Cool = FALSE,
.aiPool_Beauty = FALSE,
@@ -870,7 +884,6 @@ const struct ContestPokemon gContestOpponents[] =
.smart = 8,
.tough = 10,
.sheen = 70,
- .unk2C = {0},
.personality = 0,
.otId = 0xFFFF
},
@@ -879,7 +892,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("RELIA"),
.trainerName = _("KARINA"),
.trainerGfxId = OBJ_EVENT_GFX_PICNICKER,
- .aiChecks = 0x24000FFF,
+ .aiFlags = CONTEST_AI_SET_10,
.whichRank = CONTEST_RANK_SUPER,
.aiPool_Cool = FALSE,
.aiPool_Beauty = TRUE,
@@ -899,7 +912,6 @@ const struct ContestPokemon gContestOpponents[] =
.smart = 10,
.tough = 20,
.sheen = 100,
- .unk2C = {0},
.personality = 0,
.otId = 0xFFFF
},
@@ -908,7 +920,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("DUODO"),
.trainerName = _("BOBBY"),
.trainerGfxId = OBJ_EVENT_GFX_RUNNING_TRIATHLETE_M,
- .aiChecks = 0x82000FFF,
+ .aiFlags = CONTEST_AI_SET_2,
.whichRank = CONTEST_RANK_SUPER,
.aiPool_Cool = TRUE,
.aiPool_Beauty = TRUE,
@@ -928,7 +940,6 @@ const struct ContestPokemon gContestOpponents[] =
.smart = 85,
.tough = 35,
.sheen = 110,
- .unk2C = {0},
.personality = 0,
.otId = 0xFFFF
},
@@ -937,7 +948,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("PINCHIN"),
.trainerName = _("CLAIRE"),
.trainerGfxId = OBJ_EVENT_GFX_GIRL_1,
- .aiChecks = 0x81000FFF,
+ .aiFlags = CONTEST_AI_SET_11,
.whichRank = CONTEST_RANK_SUPER,
.aiPool_Cool = FALSE,
.aiPool_Beauty = FALSE,
@@ -957,7 +968,6 @@ const struct ContestPokemon gContestOpponents[] =
.smart = 10,
.tough = 25,
.sheen = 120,
- .unk2C = {0},
.personality = 0,
.otId = 0xFFFF
},
@@ -966,7 +976,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("NACAC"),
.trainerName = _("WILLIE"),
.trainerGfxId = OBJ_EVENT_GFX_LITTLE_BOY,
- .aiChecks = 0x80800FFF,
+ .aiFlags = CONTEST_AI_SET_12,
.whichRank = CONTEST_RANK_SUPER,
.aiPool_Cool = TRUE,
.aiPool_Beauty = FALSE,
@@ -986,7 +996,6 @@ const struct ContestPokemon gContestOpponents[] =
.smart = 65,
.tough = 25,
.sheen = 130,
- .unk2C = {0},
.personality = 0,
.otId = 0xFFFF
},
@@ -995,7 +1004,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("SHRAND"),
.trainerName = _("CASSIDY"),
.trainerGfxId = OBJ_EVENT_GFX_POKEFAN_F,
- .aiChecks = 0x10400FFF,
+ .aiFlags = CONTEST_AI_SET_13,
.whichRank = CONTEST_RANK_SUPER,
.aiPool_Cool = TRUE,
.aiPool_Beauty = FALSE,
@@ -1015,7 +1024,6 @@ const struct ContestPokemon gContestOpponents[] =
.smart = 10,
.tough = 100,
.sheen = 140,
- .unk2C = {0},
.personality = 0,
.otId = 0xFFFF
},
@@ -1024,7 +1032,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("TOYBAL"),
.trainerName = _("MORGAN"),
.trainerGfxId = OBJ_EVENT_GFX_BLACK_BELT,
- .aiChecks = 0x8200FFF,
+ .aiFlags = CONTEST_AI_SET_14,
.whichRank = CONTEST_RANK_SUPER,
.aiPool_Cool = FALSE,
.aiPool_Beauty = TRUE,
@@ -1044,7 +1052,6 @@ const struct ContestPokemon gContestOpponents[] =
.smart = 35,
.tough = 35,
.sheen = 150,
- .unk2C = {0},
.personality = 0,
.otId = 0xFFFF
},
@@ -1053,7 +1060,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("CHAMCHAM"),
.trainerName = _("SUMMER"),
.trainerGfxId = OBJ_EVENT_GFX_WOMAN_4,
- .aiChecks = 0x10100FFF,
+ .aiFlags = CONTEST_AI_SET_15,
.whichRank = CONTEST_RANK_SUPER,
.aiPool_Cool = TRUE,
.aiPool_Beauty = TRUE,
@@ -1073,7 +1080,6 @@ const struct ContestPokemon gContestOpponents[] =
.smart = 40,
.tough = 40,
.sheen = 100,
- .unk2C = {0},
.personality = 0,
.otId = 0xFFFF
},
@@ -1082,7 +1088,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("SPININ"),
.trainerName = _("MILES"),
.trainerGfxId = OBJ_EVENT_GFX_CAMPER,
- .aiChecks = 0x80080FFF,
+ .aiFlags = CONTEST_AI_SET_16,
.whichRank = CONTEST_RANK_SUPER,
.aiPool_Cool = FALSE,
.aiPool_Beauty = FALSE,
@@ -1102,7 +1108,6 @@ const struct ContestPokemon gContestOpponents[] =
.smart = 10,
.tough = 25,
.sheen = 110,
- .unk2C = {0},
.personality = 0,
.otId = 0xFFFF
},
@@ -1111,7 +1116,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("SWABY"),
.trainerName = _("AUDREY"),
.trainerGfxId = OBJ_EVENT_GFX_LASS,
- .aiChecks = 0xA0040FFF,
+ .aiFlags = CONTEST_AI_SET_17,
.whichRank = CONTEST_RANK_SUPER,
.aiPool_Cool = FALSE,
.aiPool_Beauty = TRUE,
@@ -1131,7 +1136,6 @@ const struct ContestPokemon gContestOpponents[] =
.smart = 30,
.tough = 25,
.sheen = 120,
- .unk2C = {0},
.personality = 0,
.otId = 0xFFFF
},
@@ -1140,7 +1144,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("POINKER"),
.trainerName = _("AVERY"),
.trainerGfxId = OBJ_EVENT_GFX_SCHOOL_KID_M,
- .aiChecks = 0x80020FFF,
+ .aiFlags = CONTEST_AI_SET_A,
.whichRank = CONTEST_RANK_SUPER,
.aiPool_Cool = FALSE,
.aiPool_Beauty = FALSE,
@@ -1160,7 +1164,6 @@ const struct ContestPokemon gContestOpponents[] =
.smart = 40,
.tough = 30,
.sheen = 130,
- .unk2C = {0},
.personality = 0,
.otId = 0xFFFF
},
@@ -1169,7 +1172,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("KECON"),
.trainerName = _("ARIANA"),
.trainerGfxId = OBJ_EVENT_GFX_GIRL_2,
- .aiChecks = 0x80010FFF,
+ .aiFlags = CONTEST_AI_SET_18,
.whichRank = CONTEST_RANK_SUPER,
.aiPool_Cool = FALSE,
.aiPool_Beauty = FALSE,
@@ -1189,7 +1192,6 @@ const struct ContestPokemon gContestOpponents[] =
.smart = 75,
.tough = 35,
.sheen = 140,
- .unk2C = {0},
.personality = 0,
.otId = 0xFFFF
},
@@ -1198,7 +1200,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("GOLDEN"),
.trainerName = _("ASHTON"),
.trainerGfxId = OBJ_EVENT_GFX_MAN_3,
- .aiChecks = 0x80008FFF,
+ .aiFlags = CONTEST_AI_SET_19,
.whichRank = CONTEST_RANK_SUPER,
.aiPool_Cool = TRUE,
.aiPool_Beauty = TRUE,
@@ -1218,7 +1220,6 @@ const struct ContestPokemon gContestOpponents[] =
.smart = 30,
.tough = 25,
.sheen = 150,
- .unk2C = {0},
.personality = 0,
.otId = 0xFFFF
},
@@ -1227,7 +1228,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("BOBOACH"),
.trainerName = _("SANDRA"),
.trainerGfxId = OBJ_EVENT_GFX_TWIN,
- .aiChecks = 0x80004FFF,
+ .aiFlags = CONTEST_AI_SET_1A,
.whichRank = CONTEST_RANK_SUPER,
.aiPool_Cool = FALSE,
.aiPool_Beauty = FALSE,
@@ -1247,7 +1248,6 @@ const struct ContestPokemon gContestOpponents[] =
.smart = 25,
.tough = 15,
.sheen = 100,
- .unk2C = {0},
.personality = 0,
.otId = 0xFFFF
},
@@ -1256,7 +1256,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("CORPY"),
.trainerName = _("CARSON"),
.trainerGfxId = OBJ_EVENT_GFX_YOUNGSTER,
- .aiChecks = 0x8002FFF,
+ .aiFlags = CONTEST_AI_SET_1B,
.whichRank = CONTEST_RANK_SUPER,
.aiPool_Cool = TRUE,
.aiPool_Beauty = TRUE,
@@ -1276,7 +1276,6 @@ const struct ContestPokemon gContestOpponents[] =
.smart = 60,
.tough = 20,
.sheen = 110,
- .unk2C = {0},
.personality = 0,
.otId = 0xFFFF
},
@@ -1285,7 +1284,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("TADO"),
.trainerName = _("KATRINA"),
.trainerGfxId = OBJ_EVENT_GFX_WOMAN_1,
- .aiChecks = 0x8001FFF,
+ .aiFlags = CONTEST_AI_SET_1C,
.whichRank = CONTEST_RANK_SUPER,
.aiPool_Cool = FALSE,
.aiPool_Beauty = TRUE,
@@ -1305,7 +1304,6 @@ const struct ContestPokemon gContestOpponents[] =
.smart = 15,
.tough = 75,
.sheen = 120,
- .unk2C = {0},
.personality = 0,
.otId = 0xFFFF
},
@@ -1314,7 +1312,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("BROWLO"),
.trainerName = _("LUKE"),
.trainerGfxId = OBJ_EVENT_GFX_FAT_MAN,
- .aiChecks = 0xC000FFF,
+ .aiFlags = CONTEST_AI_SET_1,
.whichRank = CONTEST_RANK_SUPER,
.aiPool_Cool = FALSE,
.aiPool_Beauty = FALSE,
@@ -1334,7 +1332,6 @@ const struct ContestPokemon gContestOpponents[] =
.smart = 30,
.tough = 20,
.sheen = 100,
- .unk2C = {0},
.personality = 0,
.otId = 0xFFFF
},
@@ -1343,7 +1340,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("FETCHIN"),
.trainerName = _("RAUL"),
.trainerGfxId = OBJ_EVENT_GFX_MAN_5,
- .aiChecks = 0x82000FFF,
+ .aiFlags = CONTEST_AI_SET_2,
.whichRank = CONTEST_RANK_SUPER,
.aiPool_Cool = TRUE,
.aiPool_Beauty = FALSE,
@@ -1363,7 +1360,6 @@ const struct ContestPokemon gContestOpponents[] =
.smart = 20,
.tough = 20,
.sheen = 110,
- .unk2C = {0},
.personality = 0,
.otId = 0xFFFF
},
@@ -1372,7 +1368,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("SEELEY"),
.trainerName = _("JADA"),
.trainerGfxId = OBJ_EVENT_GFX_WOMAN_2,
- .aiChecks = 0x21000FFF,
+ .aiFlags = CONTEST_AI_SET_3,
.whichRank = CONTEST_RANK_SUPER,
.aiPool_Cool = FALSE,
.aiPool_Beauty = TRUE,
@@ -1392,7 +1388,6 @@ const struct ContestPokemon gContestOpponents[] =
.smart = 20,
.tough = 20,
.sheen = 120,
- .unk2C = {0},
.personality = 0,
.otId = 0xFFFF
},
@@ -1401,7 +1396,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("DROWZIN"),
.trainerName = _("ZEEK"),
.trainerGfxId = OBJ_EVENT_GFX_PSYCHIC_M,
- .aiChecks = 0x20800FFF,
+ .aiFlags = CONTEST_AI_SET_4,
.whichRank = CONTEST_RANK_SUPER,
.aiPool_Cool = FALSE,
.aiPool_Beauty = TRUE,
@@ -1421,7 +1416,6 @@ const struct ContestPokemon gContestOpponents[] =
.smart = 30,
.tough = 45,
.sheen = 130,
- .unk2C = {0},
.personality = 0,
.otId = 0xFFFF
},
@@ -1430,7 +1424,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("HITEMON"),
.trainerName = _("DIEGO"),
.trainerGfxId = OBJ_EVENT_GFX_EXPERT_M,
- .aiChecks = 0x80400FFF,
+ .aiFlags = CONTEST_AI_SET_5,
.whichRank = CONTEST_RANK_SUPER,
.aiPool_Cool = TRUE,
.aiPool_Beauty = FALSE,
@@ -1450,7 +1444,6 @@ const struct ContestPokemon gContestOpponents[] =
.smart = 20,
.tough = 45,
.sheen = 140,
- .unk2C = {0},
.personality = 0,
.otId = 0xFFFF
},
@@ -1459,7 +1452,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("BLISS"),
.trainerName = _("ALIYAH"),
.trainerGfxId = OBJ_EVENT_GFX_TEALA,
- .aiChecks = 0x10200FFF,
+ .aiFlags = CONTEST_AI_SET_6,
.whichRank = CONTEST_RANK_SUPER,
.aiPool_Cool = FALSE,
.aiPool_Beauty = TRUE,
@@ -1479,7 +1472,6 @@ const struct ContestPokemon gContestOpponents[] =
.smart = 20,
.tough = 20,
.sheen = 150,
- .unk2C = {0},
.personality = 0,
.otId = 0xFFFF
},
@@ -1488,7 +1480,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("KIDLEK"),
.trainerName = _("NATALIA"),
.trainerGfxId = OBJ_EVENT_GFX_POKEFAN_F,
- .aiChecks = 0x20100FFF,
+ .aiFlags = CONTEST_AI_SET_7,
.whichRank = CONTEST_RANK_SUPER,
.aiPool_Cool = TRUE,
.aiPool_Beauty = FALSE,
@@ -1508,7 +1500,6 @@ const struct ContestPokemon gContestOpponents[] =
.smart = 25,
.tough = 25,
.sheen = 140,
- .unk2C = {0},
.personality = 0,
.otId = 0xFFFF
},
@@ -1517,7 +1508,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("SNUBBINS"),
.trainerName = _("DEVIN"),
.trainerGfxId = OBJ_EVENT_GFX_GENTLEMAN,
- .aiChecks = 0x8080FFF,
+ .aiFlags = CONTEST_AI_SET_8,
.whichRank = CONTEST_RANK_SUPER,
.aiPool_Cool = FALSE,
.aiPool_Beauty = FALSE,
@@ -1537,7 +1528,6 @@ const struct ContestPokemon gContestOpponents[] =
.smart = 20,
.tough = 20,
.sheen = 130,
- .unk2C = {0},
.personality = 0,
.otId = 0xFFFF
},
@@ -1546,7 +1536,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("DREAVIS"),
.trainerName = _("TYLOR"),
.trainerGfxId = OBJ_EVENT_GFX_HEX_MANIAC,
- .aiChecks = 0x40040FFF,
+ .aiFlags = CONTEST_AI_SET_9,
.whichRank = CONTEST_RANK_SUPER,
.aiPool_Cool = FALSE,
.aiPool_Beauty = TRUE,
@@ -1566,7 +1556,6 @@ const struct ContestPokemon gContestOpponents[] =
.smart = 45,
.tough = 20,
.sheen = 120,
- .unk2C = {0},
.personality = 0,
.otId = 0xFFFF
},
@@ -1575,7 +1564,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("LAIRN"),
.trainerName = _("RONNIE"),
.trainerGfxId = OBJ_EVENT_GFX_HIKER,
- .aiChecks = 0x84000FFF,
+ .aiFlags = CONTEST_AI_SET_1D,
.whichRank = CONTEST_RANK_HYPER,
.aiPool_Cool = FALSE,
.aiPool_Beauty = FALSE,
@@ -1595,7 +1584,6 @@ const struct ContestPokemon gContestOpponents[] =
.smart = 100,
.tough = 90,
.sheen = 200,
- .unk2C = {0},
.personality = 0,
.otId = 0xFFFF
},
@@ -1604,7 +1592,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("SHIFTY"),
.trainerName = _("CLAUDIA"),
.trainerGfxId = OBJ_EVENT_GFX_GIRL_1,
- .aiChecks = 0x82000FFF,
+ .aiFlags = CONTEST_AI_SET_2,
.whichRank = CONTEST_RANK_HYPER,
.aiPool_Cool = TRUE,
.aiPool_Beauty = TRUE,
@@ -1624,7 +1612,6 @@ const struct ContestPokemon gContestOpponents[] =
.smart = 35,
.tough = 70,
.sheen = 210,
- .unk2C = {0},
.personality = 0,
.otId = 0xFFFF
},
@@ -1633,7 +1620,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("NINAS"),
.trainerName = _("ELIAS"),
.trainerGfxId = OBJ_EVENT_GFX_LITTLE_BOY,
- .aiChecks = 0x81000FFF,
+ .aiFlags = CONTEST_AI_SET_11,
.whichRank = CONTEST_RANK_HYPER,
.aiPool_Cool = FALSE,
.aiPool_Beauty = FALSE,
@@ -1653,7 +1640,6 @@ const struct ContestPokemon gContestOpponents[] =
.smart = 70,
.tough = 70,
.sheen = 220,
- .unk2C = {0},
.personality = 0,
.otId = 0xFFFF
},
@@ -1662,7 +1648,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("WELOW"),
.trainerName = _("JADE"),
.trainerGfxId = OBJ_EVENT_GFX_POKEFAN_F,
- .aiChecks = 0x80800FFF,
+ .aiFlags = CONTEST_AI_SET_12,
.whichRank = CONTEST_RANK_HYPER,
.aiPool_Cool = TRUE,
.aiPool_Beauty = TRUE,
@@ -1682,7 +1668,6 @@ const struct ContestPokemon gContestOpponents[] =
.smart = 75,
.tough = 40,
.sheen = 230,
- .unk2C = {0},
.personality = 0,
.otId = 0xFFFF
},
@@ -1691,7 +1676,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("YENA"),
.trainerName = _("FRANCIS"),
.trainerGfxId = OBJ_EVENT_GFX_BLACK_BELT,
- .aiChecks = 0x80400FFF,
+ .aiFlags = CONTEST_AI_SET_5,
.whichRank = CONTEST_RANK_HYPER,
.aiPool_Cool = FALSE,
.aiPool_Beauty = FALSE,
@@ -1711,7 +1696,6 @@ const struct ContestPokemon gContestOpponents[] =
.smart = 70,
.tough = 70,
.sheen = 240,
- .unk2C = {0},
.personality = 0,
.otId = 0xFFFF
},
@@ -1720,7 +1704,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("TIFLY"),
.trainerName = _("ALISHA"),
.trainerGfxId = OBJ_EVENT_GFX_WOMAN_4,
- .aiChecks = 0x80200FFF,
+ .aiFlags = CONTEST_AI_SET_1E,
.whichRank = CONTEST_RANK_HYPER,
.aiPool_Cool = FALSE,
.aiPool_Beauty = TRUE,
@@ -1740,7 +1724,6 @@ const struct ContestPokemon gContestOpponents[] =
.smart = 80,
.tough = 100,
.sheen = 250,
- .unk2C = {0},
.personality = 0,
.otId = 0xFFFF
},
@@ -1749,7 +1732,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("KINGSEA"),
.trainerName = _("SAUL"),
.trainerGfxId = OBJ_EVENT_GFX_CAMPER,
- .aiChecks = 0x80100FFF,
+ .aiFlags = CONTEST_AI_SET_1F,
.whichRank = CONTEST_RANK_HYPER,
.aiPool_Cool = TRUE,
.aiPool_Beauty = FALSE,
@@ -1769,7 +1752,6 @@ const struct ContestPokemon gContestOpponents[] =
.smart = 70,
.tough = 90,
.sheen = 200,
- .unk2C = {0},
.personality = 0,
.otId = 0xFFFF
},
@@ -1778,7 +1760,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("CASTER"),
.trainerName = _("FELICIA"),
.trainerGfxId = OBJ_EVENT_GFX_LASS,
- .aiChecks = 0x80080FFF,
+ .aiFlags = CONTEST_AI_SET_16,
.whichRank = CONTEST_RANK_HYPER,
.aiPool_Cool = TRUE,
.aiPool_Beauty = TRUE,
@@ -1798,7 +1780,6 @@ const struct ContestPokemon gContestOpponents[] =
.smart = 50,
.tough = 65,
.sheen = 210,
- .unk2C = {0},
.personality = 0,
.otId = 0xFFFF
},
@@ -1807,7 +1788,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("CHOKEM"),
.trainerName = _("EMILIO"),
.trainerGfxId = OBJ_EVENT_GFX_SCHOOL_KID_M,
- .aiChecks = 0x80040FFF,
+ .aiFlags = CONTEST_AI_SET_20,
.whichRank = CONTEST_RANK_HYPER,
.aiPool_Cool = TRUE,
.aiPool_Beauty = FALSE,
@@ -1827,7 +1808,6 @@ const struct ContestPokemon gContestOpponents[] =
.smart = 60,
.tough = 50,
.sheen = 220,
- .unk2C = {0},
.personality = 0,
.otId = 0xFFFF
},
@@ -1836,7 +1816,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("LOMBE"),
.trainerName = _("KARLA"),
.trainerGfxId = OBJ_EVENT_GFX_GIRL_2,
- .aiChecks = 0x80020FFF,
+ .aiFlags = CONTEST_AI_SET_A,
.whichRank = CONTEST_RANK_HYPER,
.aiPool_Cool = FALSE,
.aiPool_Beauty = TRUE,
@@ -1856,7 +1836,6 @@ const struct ContestPokemon gContestOpponents[] =
.smart = 45,
.tough = 70,
.sheen = 230,
- .unk2C = {0},
.personality = 0,
.otId = 0xFFFF
},
@@ -1865,7 +1844,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("VIPES"),
.trainerName = _("DARRYL"),
.trainerGfxId = OBJ_EVENT_GFX_MAN_3,
- .aiChecks = 0x80010FFF,
+ .aiFlags = CONTEST_AI_SET_18,
.whichRank = CONTEST_RANK_HYPER,
.aiPool_Cool = FALSE,
.aiPool_Beauty = FALSE,
@@ -1885,7 +1864,6 @@ const struct ContestPokemon gContestOpponents[] =
.smart = 40,
.tough = 100,
.sheen = 240,
- .unk2C = {0},
.personality = 0,
.otId = 0xFFFF
},
@@ -1894,7 +1872,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("MERAIL"),
.trainerName = _("SELENA"),
.trainerGfxId = OBJ_EVENT_GFX_EXPERT_F,
- .aiChecks = 0x80008FFF,
+ .aiFlags = CONTEST_AI_SET_19,
.whichRank = CONTEST_RANK_HYPER,
.aiPool_Cool = FALSE,
.aiPool_Beauty = TRUE,
@@ -1914,7 +1892,6 @@ const struct ContestPokemon gContestOpponents[] =
.smart = 50,
.tough = 30,
.sheen = 250,
- .unk2C = {0},
.personality = 0,
.otId = 0xFFFF
},
@@ -1923,7 +1900,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("KARPAG"),
.trainerName = _("NOEL"),
.trainerGfxId = OBJ_EVENT_GFX_YOUNGSTER,
- .aiChecks = 0x80004FFF,
+ .aiFlags = CONTEST_AI_SET_1A,
.whichRank = CONTEST_RANK_HYPER,
.aiPool_Cool = FALSE,
.aiPool_Beauty = FALSE,
@@ -1943,7 +1920,6 @@ const struct ContestPokemon gContestOpponents[] =
.smart = 50,
.tough = 160,
.sheen = 255,
- .unk2C = {0},
.personality = 0,
.otId = 0xFFFF
},
@@ -1952,7 +1928,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("LUNONE"),
.trainerName = _("LACEY"),
.trainerGfxId = OBJ_EVENT_GFX_WOMAN_1,
- .aiChecks = 0x80002FFF,
+ .aiFlags = CONTEST_AI_SET_21,
.whichRank = CONTEST_RANK_HYPER,
.aiPool_Cool = FALSE,
.aiPool_Beauty = TRUE,
@@ -1972,7 +1948,6 @@ const struct ContestPokemon gContestOpponents[] =
.smart = 70,
.tough = 50,
.sheen = 210,
- .unk2C = {0},
.personality = 0,
.otId = 0xFFFF
},
@@ -1981,7 +1956,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("ABSO"),
.trainerName = _("CORBIN"),
.trainerGfxId = OBJ_EVENT_GFX_MANIAC,
- .aiChecks = 0x80001FFF,
+ .aiFlags = CONTEST_AI_SET_F,
.whichRank = CONTEST_RANK_HYPER,
.aiPool_Cool = TRUE,
.aiPool_Beauty = TRUE,
@@ -2001,7 +1976,6 @@ const struct ContestPokemon gContestOpponents[] =
.smart = 35,
.tough = 35,
.sheen = 220,
- .unk2C = {0},
.personality = 0,
.otId = 0xFFFF
},
@@ -2010,7 +1984,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("EGGSOR"),
.trainerName = _("GRACIE"),
.trainerGfxId = OBJ_EVENT_GFX_PICNICKER,
- .aiChecks = 0xC000FFF,
+ .aiFlags = CONTEST_AI_SET_1,
.whichRank = CONTEST_RANK_HYPER,
.aiPool_Cool = FALSE,
.aiPool_Beauty = FALSE,
@@ -2030,7 +2004,6 @@ const struct ContestPokemon gContestOpponents[] =
.smart = 100,
.tough = 80,
.sheen = 200,
- .unk2C = {0},
.personality = 0,
.otId = 0xFFFF
},
@@ -2039,7 +2012,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("CUBIN"),
.trainerName = _("COLTIN"),
.trainerGfxId = OBJ_EVENT_GFX_MAN_4,
- .aiChecks = 0x82000FFF,
+ .aiFlags = CONTEST_AI_SET_2,
.whichRank = CONTEST_RANK_HYPER,
.aiPool_Cool = FALSE,
.aiPool_Beauty = FALSE,
@@ -2059,7 +2032,6 @@ const struct ContestPokemon gContestOpponents[] =
.smart = 35,
.tough = 100,
.sheen = 210,
- .unk2C = {0},
.personality = 0,
.otId = 0xFFFF
},
@@ -2068,7 +2040,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("HITMON"),
.trainerName = _("ELLIE"),
.trainerGfxId = OBJ_EVENT_GFX_EXPERT_F,
- .aiChecks = 0x21000FFF,
+ .aiFlags = CONTEST_AI_SET_3,
.whichRank = CONTEST_RANK_HYPER,
.aiPool_Cool = TRUE,
.aiPool_Beauty = FALSE,
@@ -2088,7 +2060,6 @@ const struct ContestPokemon gContestOpponents[] =
.smart = 50,
.tough = 100,
.sheen = 220,
- .unk2C = {0},
.personality = 0,
.otId = 0xFFFF
},
@@ -2097,7 +2068,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("SURTLE"),
.trainerName = _("MARCUS"),
.trainerGfxId = OBJ_EVENT_GFX_SAILOR,
- .aiChecks = 0x20800FFF,
+ .aiFlags = CONTEST_AI_SET_4,
.whichRank = CONTEST_RANK_HYPER,
.aiPool_Cool = FALSE,
.aiPool_Beauty = FALSE,
@@ -2117,7 +2088,6 @@ const struct ContestPokemon gContestOpponents[] =
.smart = 40,
.tough = 95,
.sheen = 230,
- .unk2C = {0},
.personality = 0,
.otId = 0xFFFF
},
@@ -2126,7 +2096,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("KHANKAN"),
.trainerName = _("KIARA"),
.trainerGfxId = OBJ_EVENT_GFX_GIRL_3,
- .aiChecks = 0x80400FFF,
+ .aiFlags = CONTEST_AI_SET_5,
.whichRank = CONTEST_RANK_HYPER,
.aiPool_Cool = TRUE,
.aiPool_Beauty = FALSE,
@@ -2146,7 +2116,6 @@ const struct ContestPokemon gContestOpponents[] =
.smart = 50,
.tough = 100,
.sheen = 240,
- .unk2C = {0},
.personality = 0,
.otId = 0xFFFF
},
@@ -2155,7 +2124,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("PINOC"),
.trainerName = _("BRYCE"),
.trainerGfxId = OBJ_EVENT_GFX_BUG_CATCHER,
- .aiChecks = 0x10200FFF,
+ .aiFlags = CONTEST_AI_SET_6,
.whichRank = CONTEST_RANK_HYPER,
.aiPool_Cool = FALSE,
.aiPool_Beauty = TRUE,
@@ -2175,7 +2144,6 @@ const struct ContestPokemon gContestOpponents[] =
.smart = 80,
.tough = 80,
.sheen = 250,
- .unk2C = {0},
.personality = 0,
.otId = 0xFFFF
},
@@ -2184,7 +2152,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("DILTOT"),
.trainerName = _("JAMIE"),
.trainerGfxId = OBJ_EVENT_GFX_WOMAN_5,
- .aiChecks = 0x20100FFF,
+ .aiFlags = CONTEST_AI_SET_7,
.whichRank = CONTEST_RANK_HYPER,
.aiPool_Cool = FALSE,
.aiPool_Beauty = FALSE,
@@ -2204,7 +2172,6 @@ const struct ContestPokemon gContestOpponents[] =
.smart = 40,
.tough = 110,
.sheen = 240,
- .unk2C = {0},
.personality = 0,
.otId = 0xFFFF
},
@@ -2213,7 +2180,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("DOOMOND"),
.trainerName = _("JORGE"),
.trainerGfxId = OBJ_EVENT_GFX_GENTLEMAN,
- .aiChecks = 0x8080FFF,
+ .aiFlags = CONTEST_AI_SET_8,
.whichRank = CONTEST_RANK_HYPER,
.aiPool_Cool = TRUE,
.aiPool_Beauty = TRUE,
@@ -2233,7 +2200,6 @@ const struct ContestPokemon gContestOpponents[] =
.smart = 25,
.tough = 80,
.sheen = 230,
- .unk2C = {0},
.personality = 0,
.otId = 0xFFFF
},
@@ -2242,7 +2208,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("MILKAN"),
.trainerName = _("DEVON"),
.trainerGfxId = OBJ_EVENT_GFX_POKEFAN_M,
- .aiChecks = 0x40040FFF,
+ .aiFlags = CONTEST_AI_SET_9,
.whichRank = CONTEST_RANK_HYPER,
.aiPool_Cool = FALSE,
.aiPool_Beauty = TRUE,
@@ -2262,7 +2228,6 @@ const struct ContestPokemon gContestOpponents[] =
.smart = 35,
.tough = 40,
.sheen = 220,
- .unk2C = {0},
.personality = 0,
.otId = 0xFFFF
},
@@ -2271,7 +2236,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("RADOS"),
.trainerName = _("JUSTINA"),
.trainerGfxId = OBJ_EVENT_GFX_PICNICKER,
- .aiChecks = 0x84000FFF,
+ .aiFlags = CONTEST_AI_SET_1D,
.whichRank = CONTEST_RANK_MASTER,
.aiPool_Cool = TRUE,
.aiPool_Beauty = TRUE,
@@ -2291,7 +2256,6 @@ const struct ContestPokemon gContestOpponents[] =
.smart = 40,
.tough = 160,
.sheen = 255,
- .unk2C = {0},
.personality = 0,
.otId = 0xFFFF
},
@@ -2300,7 +2264,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("LOUDERD"),
.trainerName = _("RALPH"),
.trainerGfxId = OBJ_EVENT_GFX_EXPERT_M,
- .aiChecks = 0x82000FFF,
+ .aiFlags = CONTEST_AI_SET_2,
.whichRank = CONTEST_RANK_MASTER,
.aiPool_Cool = TRUE,
.aiPool_Beauty = FALSE,
@@ -2320,7 +2284,6 @@ const struct ContestPokemon gContestOpponents[] =
.smart = 150,
.tough = 160,
.sheen = 255,
- .unk2C = {0},
.personality = 0,
.otId = 0xFFFF
},
@@ -2329,7 +2292,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("SITTY"),
.trainerName = _("ROSA"),
.trainerGfxId = OBJ_EVENT_GFX_GIRL_1,
- .aiChecks = 0x81000FFF,
+ .aiFlags = CONTEST_AI_SET_11,
.whichRank = CONTEST_RANK_MASTER,
.aiPool_Cool = FALSE,
.aiPool_Beauty = TRUE,
@@ -2349,7 +2312,6 @@ const struct ContestPokemon gContestOpponents[] =
.smart = 185,
.tough = 60,
.sheen = 255,
- .unk2C = {0},
.personality = 0,
.otId = 0xFFFF
},
@@ -2358,7 +2320,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("SLING"),
.trainerName = _("KEATON"),
.trainerGfxId = OBJ_EVENT_GFX_LITTLE_BOY,
- .aiChecks = 0x80800FFF,
+ .aiFlags = CONTEST_AI_SET_12,
.whichRank = CONTEST_RANK_MASTER,
.aiPool_Cool = FALSE,
.aiPool_Beauty = FALSE,
@@ -2378,7 +2340,6 @@ const struct ContestPokemon gContestOpponents[] =
.smart = 110,
.tough = 150,
.sheen = 255,
- .unk2C = {0},
.personality = 0,
.otId = 0xFFFF
},
@@ -2387,7 +2348,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("TARIA"),
.trainerName = _("MAYRA"),
.trainerGfxId = OBJ_EVENT_GFX_POKEFAN_F,
- .aiChecks = 0x80400FFF,
+ .aiFlags = CONTEST_AI_SET_5,
.whichRank = CONTEST_RANK_MASTER,
.aiPool_Cool = TRUE,
.aiPool_Beauty = TRUE,
@@ -2407,7 +2368,6 @@ const struct ContestPokemon gContestOpponents[] =
.smart = 30,
.tough = 90,
.sheen = 255,
- .unk2C = {0},
.personality = 0,
.otId = 0xFFFF
},
@@ -2416,7 +2376,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("LIRKI"),
.trainerName = _("LAMAR"),
.trainerGfxId = OBJ_EVENT_GFX_RICH_BOY,
- .aiChecks = 0x80200FFF,
+ .aiFlags = CONTEST_AI_SET_1E,
.whichRank = CONTEST_RANK_MASTER,
.aiPool_Cool = TRUE,
.aiPool_Beauty = FALSE,
@@ -2436,7 +2396,6 @@ const struct ContestPokemon gContestOpponents[] =
.smart = 230,
.tough = 80,
.sheen = 255,
- .unk2C = {0},
.personality = 0,
.otId = 0xFFFF
},
@@ -2445,7 +2404,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("BLOSSOM"),
.trainerName = _("AUBREY"),
.trainerGfxId = OBJ_EVENT_GFX_WOMAN_4,
- .aiChecks = 0x80100FFF,
+ .aiFlags = CONTEST_AI_SET_1F,
.whichRank = CONTEST_RANK_MASTER,
.aiPool_Cool = FALSE,
.aiPool_Beauty = TRUE,
@@ -2465,7 +2424,6 @@ const struct ContestPokemon gContestOpponents[] =
.smart = 130,
.tough = 40,
.sheen = 255,
- .unk2C = {0},
.personality = 0,
.otId = 0xFFFF
},
@@ -2474,7 +2432,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("EYESAB"),
.trainerName = _("NIGEL"),
.trainerGfxId = OBJ_EVENT_GFX_CAMPER,
- .aiChecks = 0x80080FFF,
+ .aiFlags = CONTEST_AI_SET_16,
.whichRank = CONTEST_RANK_MASTER,
.aiPool_Cool = FALSE,
.aiPool_Beauty = FALSE,
@@ -2494,7 +2452,6 @@ const struct ContestPokemon gContestOpponents[] =
.smart = 150,
.tough = 160,
.sheen = 255,
- .unk2C = {0},
.personality = 0,
.otId = 0xFFFF
},
@@ -2503,7 +2460,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("UTAN"),
.trainerName = _("CAMILLE"),
.trainerGfxId = OBJ_EVENT_GFX_LASS,
- .aiChecks = 0x80040FFF,
+ .aiFlags = CONTEST_AI_SET_20,
.whichRank = CONTEST_RANK_MASTER,
.aiPool_Cool = FALSE,
.aiPool_Beauty = FALSE,
@@ -2523,7 +2480,6 @@ const struct ContestPokemon gContestOpponents[] =
.smart = 130,
.tough = 170,
.sheen = 255,
- .unk2C = {0},
.personality = 0,
.otId = 0xFFFF
},
@@ -2532,7 +2488,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("PEDOS"),
.trainerName = _("DEON"),
.trainerGfxId = OBJ_EVENT_GFX_SCHOOL_KID_M,
- .aiChecks = 0x80020FFF,
+ .aiFlags = CONTEST_AI_SET_A,
.whichRank = CONTEST_RANK_MASTER,
.aiPool_Cool = TRUE,
.aiPool_Beauty = FALSE,
@@ -2552,7 +2508,6 @@ const struct ContestPokemon gContestOpponents[] =
.smart = 75,
.tough = 100,
.sheen = 255,
- .unk2C = {0},
.personality = 0,
.otId = 0xFFFF
},
@@ -2561,7 +2516,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("LUVIS"),
.trainerName = _("JANELLE"),
.trainerGfxId = OBJ_EVENT_GFX_GIRL_2,
- .aiChecks = 0x80010FFF,
+ .aiFlags = CONTEST_AI_SET_18,
.whichRank = CONTEST_RANK_MASTER,
.aiPool_Cool = FALSE,
.aiPool_Beauty = FALSE,
@@ -2581,7 +2536,6 @@ const struct ContestPokemon gContestOpponents[] =
.smart = 40,
.tough = 190,
.sheen = 255,
- .unk2C = {0},
.personality = 0,
.otId = 0xFFFF
},
@@ -2590,7 +2544,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("HEROSS"),
.trainerName = _("HEATH"),
.trainerGfxId = OBJ_EVENT_GFX_MAN_3,
- .aiChecks = 0x80008FFF,
+ .aiFlags = CONTEST_AI_SET_19,
.whichRank = CONTEST_RANK_MASTER,
.aiPool_Cool = TRUE,
.aiPool_Beauty = FALSE,
@@ -2610,7 +2564,6 @@ const struct ContestPokemon gContestOpponents[] =
.smart = 240,
.tough = 140,
.sheen = 255,
- .unk2C = {0},
.personality = 0,
.otId = 0xFFFF
},
@@ -2619,7 +2572,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("RODLECT"),
.trainerName = _("SASHA"),
.trainerGfxId = OBJ_EVENT_GFX_TWIN,
- .aiChecks = 0x80004FFF,
+ .aiFlags = CONTEST_AI_SET_1A,
.whichRank = CONTEST_RANK_MASTER,
.aiPool_Cool = TRUE,
.aiPool_Beauty = TRUE,
@@ -2639,7 +2592,6 @@ const struct ContestPokemon gContestOpponents[] =
.smart = 35,
.tough = 50,
.sheen = 255,
- .unk2C = {0},
.personality = 0,
.otId = 0xFFFF
},
@@ -2648,7 +2600,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("CHUPY"),
.trainerName = _("FRANKIE"),
.trainerGfxId = OBJ_EVENT_GFX_YOUNGSTER,
- .aiChecks = 0x80002FFF,
+ .aiFlags = CONTEST_AI_SET_21,
.whichRank = CONTEST_RANK_MASTER,
.aiPool_Cool = FALSE,
.aiPool_Beauty = TRUE,
@@ -2668,7 +2620,6 @@ const struct ContestPokemon gContestOpponents[] =
.smart = 115,
.tough = 120,
.sheen = 255,
- .unk2C = {0},
.personality = 0,
.otId = 0xFFFF
},
@@ -2677,7 +2628,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("WOBET"),
.trainerName = _("HELEN"),
.trainerGfxId = OBJ_EVENT_GFX_WOMAN_1,
- .aiChecks = 0x80001FFF,
+ .aiFlags = CONTEST_AI_SET_F,
.whichRank = CONTEST_RANK_MASTER,
.aiPool_Cool = TRUE,
.aiPool_Beauty = TRUE,
@@ -2697,7 +2648,6 @@ const struct ContestPokemon gContestOpponents[] =
.smart = 220,
.tough = 210,
.sheen = 255,
- .unk2C = {0},
.personality = 0,
.otId = 0xFFFF
},
@@ -2706,7 +2656,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("GAREN"),
.trainerName = _("CAMILE"),
.trainerGfxId = OBJ_EVENT_GFX_HEX_MANIAC,
- .aiChecks = 0xC000FFF,
+ .aiFlags = CONTEST_AI_SET_1,
.whichRank = CONTEST_RANK_MASTER,
.aiPool_Cool = TRUE,
.aiPool_Beauty = FALSE,
@@ -2726,7 +2676,6 @@ const struct ContestPokemon gContestOpponents[] =
.smart = 80,
.tough = 180,
.sheen = 255,
- .unk2C = {0},
.personality = 0,
.otId = 0xFFFF
},
@@ -2735,7 +2684,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("GONPOR"),
.trainerName = _("MARTIN"),
.trainerGfxId = OBJ_EVENT_GFX_SCIENTIST_1,
- .aiChecks = 0x82000FFF,
+ .aiFlags = CONTEST_AI_SET_2,
.whichRank = CONTEST_RANK_MASTER,
.aiPool_Cool = TRUE,
.aiPool_Beauty = TRUE,
@@ -2755,7 +2704,6 @@ const struct ContestPokemon gContestOpponents[] =
.smart = 130,
.tough = 130,
.sheen = 255,
- .unk2C = {0},
.personality = 0,
.otId = 0xFFFF
},
@@ -2764,7 +2712,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("DRITE"),
.trainerName = _("SERGIO"),
.trainerGfxId = OBJ_EVENT_GFX_BOY_1,
- .aiChecks = 0x21000FFF,
+ .aiFlags = CONTEST_AI_SET_3,
.whichRank = CONTEST_RANK_MASTER,
.aiPool_Cool = TRUE,
.aiPool_Beauty = FALSE,
@@ -2784,7 +2732,6 @@ const struct ContestPokemon gContestOpponents[] =
.smart = 120,
.tough = 150,
.sheen = 255,
- .unk2C = {0},
.personality = 0,
.otId = 0xFFFF
},
@@ -2793,7 +2740,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("MEOWY"),
.trainerName = _("KAILEY"),
.trainerGfxId = OBJ_EVENT_GFX_TWIN,
- .aiChecks = 0x20800FFF,
+ .aiFlags = CONTEST_AI_SET_4,
.whichRank = CONTEST_RANK_MASTER,
.aiPool_Cool = FALSE,
.aiPool_Beauty = FALSE,
@@ -2813,7 +2760,6 @@ const struct ContestPokemon gContestOpponents[] =
.smart = 170,
.tough = 80,
.sheen = 255,
- .unk2C = {0},
.personality = 0,
.otId = 0xFFFF
},
@@ -2822,7 +2768,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("NYX"),
.trainerName = _("PERLA"),
.trainerGfxId = OBJ_EVENT_GFX_BEAUTY,
- .aiChecks = 0x80400FFF,
+ .aiFlags = CONTEST_AI_SET_5,
.whichRank = CONTEST_RANK_MASTER,
.aiPool_Cool = FALSE,
.aiPool_Beauty = TRUE,
@@ -2842,7 +2788,6 @@ const struct ContestPokemon gContestOpponents[] =
.smart = 150,
.tough = 120,
.sheen = 255,
- .unk2C = {0},
.personality = 0,
.otId = 0xFFFF
},
@@ -2851,7 +2796,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("GEPITO"),
.trainerName = _("CLARA"),
.trainerGfxId = OBJ_EVENT_GFX_WOMAN_2,
- .aiChecks = 0x10200FFF,
+ .aiFlags = CONTEST_AI_SET_6,
.whichRank = CONTEST_RANK_MASTER,
.aiPool_Cool = FALSE,
.aiPool_Beauty = FALSE,
@@ -2871,7 +2816,6 @@ const struct ContestPokemon gContestOpponents[] =
.smart = 120,
.tough = 80,
.sheen = 255,
- .unk2C = {0},
.personality = 0,
.otId = 0xFFFF
},
@@ -2880,7 +2824,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("SPEON"),
.trainerName = _("JAKOB"),
.trainerGfxId = OBJ_EVENT_GFX_PSYCHIC_M,
- .aiChecks = 0x20100FFF,
+ .aiFlags = CONTEST_AI_SET_7,
.whichRank = CONTEST_RANK_MASTER,
.aiPool_Cool = TRUE,
.aiPool_Beauty = TRUE,
@@ -2900,7 +2844,6 @@ const struct ContestPokemon gContestOpponents[] =
.smart = 80,
.tough = 150,
.sheen = 255,
- .unk2C = {0},
.personality = 0,
.otId = 0xFFFF
},
@@ -2909,7 +2852,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("SLOWGO"),
.trainerName = _("TREY"),
.trainerGfxId = OBJ_EVENT_GFX_SAILOR,
- .aiChecks = 0x8080FFF,
+ .aiFlags = CONTEST_AI_SET_8,
.whichRank = CONTEST_RANK_MASTER,
.aiPool_Cool = FALSE,
.aiPool_Beauty = FALSE,
@@ -2929,7 +2872,6 @@ const struct ContestPokemon gContestOpponents[] =
.smart = 110,
.tough = 170,
.sheen = 255,
- .unk2C = {0},
.personality = 0,
.otId = 0xFFFF
},
@@ -2938,7 +2880,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("URSING"),
.trainerName = _("LANE"),
.trainerGfxId = OBJ_EVENT_GFX_BLACK_BELT,
- .aiChecks = 0x40040FFF,
+ .aiFlags = CONTEST_AI_SET_9,
.whichRank = CONTEST_RANK_MASTER,
.aiPool_Cool = TRUE,
.aiPool_Beauty = FALSE,
@@ -2958,7 +2900,6 @@ const struct ContestPokemon gContestOpponents[] =
.smart = 80,
.tough = 190,
.sheen = 255,
- .unk2C = {0},
.personality = 0,
.otId = 0xFFFF
}
diff --git a/src/data/field_effects/field_effect_object_template_pointers.h b/src/data/field_effects/field_effect_object_template_pointers.h
index de39e6db3..41d6271bf 100755
--- a/src/data/field_effects/field_effect_object_template_pointers.h
+++ b/src/data/field_effects/field_effect_object_template_pointers.h
@@ -8,70 +8,70 @@ const struct SpriteTemplate gFieldEffectObjectTemplate_Ash;
const struct SpriteTemplate gFieldEffectObjectTemplate_SurfBlob;
const struct SpriteTemplate gFieldEffectObjectTemplate_Arrow;
const struct SpriteTemplate gFieldEffectObjectTemplate_GroundImpactDust;
-const struct SpriteTemplate gFieldEffectObjectTemplate_BikeHopTallGrass;
+const struct SpriteTemplate gFieldEffectObjectTemplate_JumpTallGrass;
const struct SpriteTemplate gFieldEffectObjectTemplate_SandFootprints;
-const struct SpriteTemplate gFieldEffectObjectTemplate_BikeHopBigSplash;
+const struct SpriteTemplate gFieldEffectObjectTemplate_JumpBigSplash;
const struct SpriteTemplate gFieldEffectObjectTemplate_Splash;
-const struct SpriteTemplate gFieldEffectObjectTemplate_BikeHopSmallSplash;
+const struct SpriteTemplate gFieldEffectObjectTemplate_JumpSmallSplash;
const struct SpriteTemplate gFieldEffectObjectTemplate_LongGrass;
-const struct SpriteTemplate gFieldEffectObjectTemplate_Unknown16;
-const struct SpriteTemplate gFieldEffectObjectTemplate_Unknown17;
-const struct SpriteTemplate gFieldEffectObjectTemplate_Unknown18;
-const struct SpriteTemplate gFieldEffectObjectTemplate_Unknown19;
-const struct SpriteTemplate gFieldEffectObjectTemplate_Unknown20;
-const struct SpriteTemplate gFieldEffectObjectTemplate_Unknown21;
-const struct SpriteTemplate gFieldEffectObjectTemplate_BerryTreeGrowthSparkle;
+const struct SpriteTemplate gFieldEffectObjectTemplate_JumpLongGrass;
+const struct SpriteTemplate gFieldEffectObjectTemplate_UnusedGrass;
+const struct SpriteTemplate gFieldEffectObjectTemplate_UnusedGrass2;
+const struct SpriteTemplate gFieldEffectObjectTemplate_UnusedSand;
+const struct SpriteTemplate gFieldEffectObjectTemplate_WaterSurfacing;
+const struct SpriteTemplate gFieldEffectObjectTemplate_ReflectionDistortion;
+const struct SpriteTemplate gFieldEffectObjectTemplate_Sparkle;
const struct SpriteTemplate gFieldEffectObjectTemplate_DeepSandFootprints;
const struct SpriteTemplate gFieldEffectObjectTemplate_TreeDisguise;
const struct SpriteTemplate gFieldEffectObjectTemplate_MountainDisguise;
const struct SpriteTemplate gFieldEffectObjectTemplate_Bird;
const struct SpriteTemplate gFieldEffectObjectTemplate_BikeTireTracks;
const struct SpriteTemplate gFieldEffectObjectTemplate_SandDisguisePlaceholder;
-const struct SpriteTemplate gFieldEffectObjectTemplate_Unknown29;
+const struct SpriteTemplate gFieldEffectObjectTemplate_SandPile;
const struct SpriteTemplate gFieldEffectObjectTemplate_ShortGrass;
const struct SpriteTemplate gFieldEffectObjectTemplate_HotSpringsWater;
-const struct SpriteTemplate gFieldEffectObjectTemplate_JumpOutOfAsh;
-const struct SpriteTemplate gFieldEffectObjectTemplate_LavaridgeGymWarp;
+const struct SpriteTemplate gFieldEffectObjectTemplate_AshPuff;
+const struct SpriteTemplate gFieldEffectObjectTemplate_AshLaunch;
const struct SpriteTemplate gFieldEffectObjectTemplate_Bubbles;
-const struct SpriteTemplate gFieldEffectObjectTemplate_Unknown35;
+const struct SpriteTemplate gFieldEffectObjectTemplate_SmallSparkle;
const struct SpriteTemplate gFieldEffectObjectTemplate_Rayquaza;
const struct SpriteTemplate *const gFieldEffectObjectTemplatePointers[] = {
- &gFieldEffectObjectTemplate_ShadowSmall,
- &gFieldEffectObjectTemplate_ShadowMedium,
- &gFieldEffectObjectTemplate_ShadowLarge,
- &gFieldEffectObjectTemplate_ShadowExtraLarge,
- &gFieldEffectObjectTemplate_TallGrass,
- &gFieldEffectObjectTemplate_Ripple,
- &gFieldEffectObjectTemplate_Ash,
- &gFieldEffectObjectTemplate_SurfBlob,
- &gFieldEffectObjectTemplate_Arrow,
- &gFieldEffectObjectTemplate_GroundImpactDust,
- &gFieldEffectObjectTemplate_BikeHopTallGrass,
- &gFieldEffectObjectTemplate_SandFootprints,
- &gFieldEffectObjectTemplate_BikeHopBigSplash,
- &gFieldEffectObjectTemplate_Splash,
- &gFieldEffectObjectTemplate_BikeHopSmallSplash,
- &gFieldEffectObjectTemplate_LongGrass,
- &gFieldEffectObjectTemplate_Unknown16,
- &gFieldEffectObjectTemplate_Unknown17,
- &gFieldEffectObjectTemplate_Unknown18,
- &gFieldEffectObjectTemplate_Unknown19,
- &gFieldEffectObjectTemplate_Unknown20,
- &gFieldEffectObjectTemplate_Unknown21,
- &gFieldEffectObjectTemplate_BerryTreeGrowthSparkle,
- &gFieldEffectObjectTemplate_DeepSandFootprints,
- &gFieldEffectObjectTemplate_TreeDisguise,
- &gFieldEffectObjectTemplate_MountainDisguise,
- &gFieldEffectObjectTemplate_Bird,
- &gFieldEffectObjectTemplate_BikeTireTracks,
- &gFieldEffectObjectTemplate_SandDisguisePlaceholder,
- &gFieldEffectObjectTemplate_Unknown29,
- &gFieldEffectObjectTemplate_ShortGrass,
- &gFieldEffectObjectTemplate_HotSpringsWater,
- &gFieldEffectObjectTemplate_JumpOutOfAsh,
- &gFieldEffectObjectTemplate_LavaridgeGymWarp,
- &gFieldEffectObjectTemplate_Bubbles,
- &gFieldEffectObjectTemplate_Unknown35,
- &gFieldEffectObjectTemplate_Rayquaza,
+ [FLDEFFOBJ_SHADOW_S] = &gFieldEffectObjectTemplate_ShadowSmall,
+ [FLDEFFOBJ_SHADOW_M] = &gFieldEffectObjectTemplate_ShadowMedium,
+ [FLDEFFOBJ_SHADOW_L] = &gFieldEffectObjectTemplate_ShadowLarge,
+ [FLDEFFOBJ_SHADOW_XL] = &gFieldEffectObjectTemplate_ShadowExtraLarge,
+ [FLDEFFOBJ_TALL_GRASS] = &gFieldEffectObjectTemplate_TallGrass,
+ [FLDEFFOBJ_RIPPLE] = &gFieldEffectObjectTemplate_Ripple,
+ [FLDEFFOBJ_ASH] = &gFieldEffectObjectTemplate_Ash,
+ [FLDEFFOBJ_SURF_BLOB] = &gFieldEffectObjectTemplate_SurfBlob,
+ [FLDEFFOBJ_ARROW] = &gFieldEffectObjectTemplate_Arrow,
+ [FLDEFFOBJ_GROUND_IMPACT_DUST] = &gFieldEffectObjectTemplate_GroundImpactDust,
+ [FLDEFFOBJ_JUMP_TALL_GRASS] = &gFieldEffectObjectTemplate_JumpTallGrass,
+ [FLDEFFOBJ_SAND_FOOTPRINTS] = &gFieldEffectObjectTemplate_SandFootprints,
+ [FLDEFFOBJ_JUMP_BIG_SPLASH] = &gFieldEffectObjectTemplate_JumpBigSplash,
+ [FLDEFFOBJ_SPLASH] = &gFieldEffectObjectTemplate_Splash,
+ [FLDEFFOBJ_JUMP_SMALL_SPLASH] = &gFieldEffectObjectTemplate_JumpSmallSplash,
+ [FLDEFFOBJ_LONG_GRASS] = &gFieldEffectObjectTemplate_LongGrass,
+ [FLDEFFOBJ_JUMP_LONG_GRASS] = &gFieldEffectObjectTemplate_JumpLongGrass,
+ [FLDEFFOBJ_UNUSED_GRASS] = &gFieldEffectObjectTemplate_UnusedGrass,
+ [FLDEFFOBJ_UNUSED_GRASS_2] = &gFieldEffectObjectTemplate_UnusedGrass2,
+ [FLDEFFOBJ_UNUSED_SAND] = &gFieldEffectObjectTemplate_UnusedSand,
+ [FLDEFFOBJ_WATER_SURFACING] = &gFieldEffectObjectTemplate_WaterSurfacing,
+ [FLDEFFOBJ_REFLECTION_DISTORTION] = &gFieldEffectObjectTemplate_ReflectionDistortion,
+ [FLDEFFOBJ_SPARKLE] = &gFieldEffectObjectTemplate_Sparkle,
+ [FLDEFFOBJ_DEEP_SAND_FOOTPRINTS] = &gFieldEffectObjectTemplate_DeepSandFootprints,
+ [FLDEFFOBJ_TREE_DISGUISE] = &gFieldEffectObjectTemplate_TreeDisguise,
+ [FLDEFFOBJ_MOUNTAIN_DISGUISE] = &gFieldEffectObjectTemplate_MountainDisguise,
+ [FLDEFFOBJ_BIRD] = &gFieldEffectObjectTemplate_Bird,
+ [FLDEFFOBJ_BIKE_TIRE_TRACKS] = &gFieldEffectObjectTemplate_BikeTireTracks,
+ [FLDEFFOBJ_SAND_DISGUISE] = &gFieldEffectObjectTemplate_SandDisguisePlaceholder,
+ [FLDEFFOBJ_SAND_PILE] = &gFieldEffectObjectTemplate_SandPile,
+ [FLDEFFOBJ_SHORT_GRASS] = &gFieldEffectObjectTemplate_ShortGrass,
+ [FLDEFFOBJ_HOT_SPRINGS_WATER] = &gFieldEffectObjectTemplate_HotSpringsWater,
+ [FLDEFFOBJ_ASH_PUFF] = &gFieldEffectObjectTemplate_AshPuff,
+ [FLDEFFOBJ_ASH_LAUNCH] = &gFieldEffectObjectTemplate_AshLaunch,
+ [FLDEFFOBJ_BUBBLES] = &gFieldEffectObjectTemplate_Bubbles,
+ [FLDEFFOBJ_SMALL_SPARKLE] = &gFieldEffectObjectTemplate_SmallSparkle,
+ [FLDEFFOBJ_RAYQUAZA] = &gFieldEffectObjectTemplate_Rayquaza,
};
diff --git a/src/data/field_effects/field_effect_objects.h b/src/data/field_effects/field_effect_objects.h
index 65f35107d..1626b9f32 100755
--- a/src/data/field_effects/field_effect_objects.h
+++ b/src/data/field_effects/field_effect_objects.h
@@ -1,43 +1,74 @@
-const struct SpritePalette gFieldEffectObjectPaletteInfo0 = {gFieldEffectObjectPalette0, 0x1004};
+const struct SpritePalette gSpritePalette_GeneralFieldEffect0 = {gFieldEffectObjectPalette0, FLDEFF_PAL_TAG_GENERAL_0};
+const struct SpritePalette gSpritePalette_GeneralFieldEffect1 = {gFieldEffectObjectPalette1, FLDEFF_PAL_TAG_GENERAL_1};
-const struct SpritePalette gFieldEffectObjectPaletteInfo1 = {gFieldEffectObjectPalette1, 0x1005};
-
-const union AnimCmd gFieldEffectObjectImageAnim_850C9D0[] =
+static const union AnimCmd sAnim_Shadow[] =
{
ANIMCMD_FRAME(0, 1),
ANIMCMD_END,
};
-const union AnimCmd *const gFieldEffectObjectImageAnimTable_Shadow[] =
+static const union AnimCmd *const sAnimTable_Shadow[] =
{
- gFieldEffectObjectImageAnim_850C9D0,
+ sAnim_Shadow,
};
-const struct SpriteFrameImage gFieldEffectObjectPicTable_ShadowSmall[] = {
+static const struct SpriteFrameImage sPicTable_ShadowSmall[] = {
obj_frame_tiles(gFieldEffectObjectPic_ShadowSmall),
};
-const struct SpriteFrameImage gFieldEffectObjectPicTable_ShadowMedium[] = {
+static const struct SpriteFrameImage sPicTable_ShadowMedium[] = {
obj_frame_tiles(gFieldEffectObjectPic_ShadowMedium),
};
-const struct SpriteFrameImage gFieldEffectObjectPicTable_ShadowLarge[] = {
+static const struct SpriteFrameImage sPicTable_ShadowLarge[] = {
obj_frame_tiles(gFieldEffectObjectPic_ShadowLarge),
};
-const struct SpriteFrameImage gFieldEffectObjectPicTable_ShadowExtraLarge[] = {
+static const struct SpriteFrameImage sPicTable_ShadowExtraLarge[] = {
obj_frame_tiles(gFieldEffectObjectPic_ShadowExtraLarge),
};
-const struct SpriteTemplate gFieldEffectObjectTemplate_ShadowSmall = {0xFFFF, 0xFFFF, &gObjectEventBaseOam_8x8, gFieldEffectObjectImageAnimTable_Shadow, gFieldEffectObjectPicTable_ShadowSmall, gDummySpriteAffineAnimTable, UpdateShadowFieldEffect};
+const struct SpriteTemplate gFieldEffectObjectTemplate_ShadowSmall = {
+ .tileTag = 0xFFFF,
+ .paletteTag = 0xFFFF,
+ .oam = &gObjectEventBaseOam_8x8,
+ .anims = sAnimTable_Shadow,
+ .images = sPicTable_ShadowSmall,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = UpdateShadowFieldEffect,
+};
-const struct SpriteTemplate gFieldEffectObjectTemplate_ShadowMedium = {0xFFFF, 0xFFFF, &gObjectEventBaseOam_16x8, gFieldEffectObjectImageAnimTable_Shadow, gFieldEffectObjectPicTable_ShadowMedium, gDummySpriteAffineAnimTable, UpdateShadowFieldEffect};
+const struct SpriteTemplate gFieldEffectObjectTemplate_ShadowMedium = {
+ .tileTag = 0xFFFF,
+ .paletteTag = 0xFFFF,
+ .oam = &gObjectEventBaseOam_16x8,
+ .anims = sAnimTable_Shadow,
+ .images = sPicTable_ShadowMedium,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = UpdateShadowFieldEffect,
+};
-const struct SpriteTemplate gFieldEffectObjectTemplate_ShadowLarge = {0xFFFF, 0xFFFF, &gObjectEventBaseOam_32x8, gFieldEffectObjectImageAnimTable_Shadow, gFieldEffectObjectPicTable_ShadowLarge, gDummySpriteAffineAnimTable, UpdateShadowFieldEffect};
+const struct SpriteTemplate gFieldEffectObjectTemplate_ShadowLarge = {
+ .tileTag = 0xFFFF,
+ .paletteTag = 0xFFFF,
+ .oam = &gObjectEventBaseOam_32x8,
+ .anims = sAnimTable_Shadow,
+ .images = sPicTable_ShadowLarge,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = UpdateShadowFieldEffect,
+};
-const struct SpriteTemplate gFieldEffectObjectTemplate_ShadowExtraLarge = {0xFFFF, 0xFFFF, &gObjectEventBaseOam_64x32, gFieldEffectObjectImageAnimTable_Shadow, gFieldEffectObjectPicTable_ShadowExtraLarge, gDummySpriteAffineAnimTable, UpdateShadowFieldEffect};
+const struct SpriteTemplate gFieldEffectObjectTemplate_ShadowExtraLarge = {
+ .tileTag = 0xFFFF,
+ .paletteTag = 0xFFFF,
+ .oam = &gObjectEventBaseOam_64x32,
+ .anims = sAnimTable_Shadow,
+ .images = sPicTable_ShadowExtraLarge,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = UpdateShadowFieldEffect,
+};
-const struct SpriteFrameImage gFieldEffectObjectPicTable_TallGrass[] = {
+static const struct SpriteFrameImage sPicTable_TallGrass[] = {
overworld_frame(gFieldEffectObjectPic_TallGrass, 2, 2, 0),
overworld_frame(gFieldEffectObjectPic_TallGrass, 2, 2, 1),
overworld_frame(gFieldEffectObjectPic_TallGrass, 2, 2, 2),
@@ -45,7 +76,7 @@ const struct SpriteFrameImage gFieldEffectObjectPicTable_TallGrass[] = {
overworld_frame(gFieldEffectObjectPic_TallGrass, 2, 2, 4),
};
-const union AnimCmd gFieldEffectObjectImageAnim_850CA84[] =
+static const union AnimCmd sAnim_TallGrass[] =
{
ANIMCMD_FRAME(1, 10),
ANIMCMD_FRAME(2, 10),
@@ -55,14 +86,22 @@ const union AnimCmd gFieldEffectObjectImageAnim_850CA84[] =
ANIMCMD_END,
};
-const union AnimCmd *const gFieldEffectObjectImageAnimTable_TallGrass[] =
+static const union AnimCmd *const sAnimTable_TallGrass[] =
{
- gFieldEffectObjectImageAnim_850CA84,
+ sAnim_TallGrass,
};
-const struct SpriteTemplate gFieldEffectObjectTemplate_TallGrass = {0xFFFF, 0x1005, &gObjectEventBaseOam_16x16, gFieldEffectObjectImageAnimTable_TallGrass, gFieldEffectObjectPicTable_TallGrass, gDummySpriteAffineAnimTable, UpdateTallGrassFieldEffect};
+const struct SpriteTemplate gFieldEffectObjectTemplate_TallGrass = {
+ .tileTag = 0xFFFF,
+ .paletteTag = FLDEFF_PAL_TAG_GENERAL_1,
+ .oam = &gObjectEventBaseOam_16x16,
+ .anims = sAnimTable_TallGrass,
+ .images = sPicTable_TallGrass,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = UpdateTallGrassFieldEffect,
+};
-const struct SpriteFrameImage gFieldEffectObjectPicTable_Ripple[] = {
+static const struct SpriteFrameImage sPicTable_Ripple[] = {
overworld_frame(gFieldEffectObjectPic_Ripple, 2, 2, 0),
overworld_frame(gFieldEffectObjectPic_Ripple, 2, 2, 1),
overworld_frame(gFieldEffectObjectPic_Ripple, 2, 2, 2),
@@ -70,7 +109,7 @@ const struct SpriteFrameImage gFieldEffectObjectPicTable_Ripple[] = {
overworld_frame(gFieldEffectObjectPic_Ripple, 2, 2, 4),
};
-const union AnimCmd gFieldEffectObjectImageAnim_850CAE0[] =
+static const union AnimCmd sAnim_Ripple[] =
{
ANIMCMD_FRAME(0, 12),
ANIMCMD_FRAME(1, 9),
@@ -83,14 +122,22 @@ const union AnimCmd gFieldEffectObjectImageAnim_850CAE0[] =
ANIMCMD_END,
};
-const union AnimCmd *const gFieldEffectObjectImageAnimTable_Ripple[] =
+static const union AnimCmd *const sAnimTable_Ripple[] =
{
- gFieldEffectObjectImageAnim_850CAE0,
+ sAnim_Ripple,
};
-const struct SpriteTemplate gFieldEffectObjectTemplate_Ripple = {0xFFFF, 0x1005, &gObjectEventBaseOam_16x16, gFieldEffectObjectImageAnimTable_Ripple, gFieldEffectObjectPicTable_Ripple, gDummySpriteAffineAnimTable, WaitFieldEffectSpriteAnim};
+const struct SpriteTemplate gFieldEffectObjectTemplate_Ripple = {
+ .tileTag = 0xFFFF,
+ .paletteTag = FLDEFF_PAL_TAG_GENERAL_1,
+ .oam = &gObjectEventBaseOam_16x16,
+ .anims = sAnimTable_Ripple,
+ .images = sPicTable_Ripple,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = WaitFieldEffectSpriteAnim,
+};
-const struct SpriteFrameImage gFieldEffectObjectPicTable_Ash[] = {
+static const struct SpriteFrameImage sPicTable_Ash[] = {
overworld_frame(gFieldEffectObjectPic_Ash, 2, 2, 0),
overworld_frame(gFieldEffectObjectPic_Ash, 2, 2, 1),
overworld_frame(gFieldEffectObjectPic_Ash, 2, 2, 2),
@@ -98,7 +145,7 @@ const struct SpriteFrameImage gFieldEffectObjectPicTable_Ash[] = {
overworld_frame(gFieldEffectObjectPic_Ash, 2, 2, 4),
};
-const union AnimCmd gFieldEffectObjectImageAnim_850CB48[] =
+static const union AnimCmd sAnim_Ash[] =
{
ANIMCMD_FRAME(0, 12),
ANIMCMD_FRAME(1, 12),
@@ -108,54 +155,70 @@ const union AnimCmd gFieldEffectObjectImageAnim_850CB48[] =
ANIMCMD_END,
};
-const union AnimCmd *const gFieldEffectObjectImageAnimTable_Ash[] =
+static const union AnimCmd *const sAnimTable_Ash[] =
{
- gFieldEffectObjectImageAnim_850CB48,
+ sAnim_Ash,
};
-const struct SpriteTemplate gFieldEffectObjectTemplate_Ash = {0xFFFF, 0x1005, &gObjectEventBaseOam_16x16, gFieldEffectObjectImageAnimTable_Ash, gFieldEffectObjectPicTable_Ash, gDummySpriteAffineAnimTable, UpdateAshFieldEffect};
+const struct SpriteTemplate gFieldEffectObjectTemplate_Ash = {
+ .tileTag = 0xFFFF,
+ .paletteTag = FLDEFF_PAL_TAG_GENERAL_1,
+ .oam = &gObjectEventBaseOam_16x16,
+ .anims = sAnimTable_Ash,
+ .images = sPicTable_Ash,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = UpdateAshFieldEffect,
+};
-const struct SpriteFrameImage gFieldEffectObjectPicTable_SurfBlob[] = {
+static const struct SpriteFrameImage sPicTable_SurfBlob[] = {
overworld_frame(gFieldEffectObjectPic_SurfBlob, 4, 4, 0),
overworld_frame(gFieldEffectObjectPic_SurfBlob, 4, 4, 1),
overworld_frame(gFieldEffectObjectPic_SurfBlob, 4, 4, 2),
};
-const union AnimCmd gSurfBlobAnim_FaceSouth[] =
+static const union AnimCmd sSurfBlobAnim_FaceSouth[] =
{
ANIMCMD_FRAME(0, 1),
ANIMCMD_JUMP(0),
};
-const union AnimCmd gSurfBlobAnim_FaceNorth[] =
+static const union AnimCmd sSurfBlobAnim_FaceNorth[] =
{
ANIMCMD_FRAME(1, 1),
ANIMCMD_JUMP(0),
};
-const union AnimCmd gSurfBlobAnim_FaceWest[] =
+static const union AnimCmd sSurfBlobAnim_FaceWest[] =
{
ANIMCMD_FRAME(2, 1),
ANIMCMD_JUMP(0),
};
-const union AnimCmd gSurfBlobAnim_FaceEast[] =
+static const union AnimCmd sSurfBlobAnim_FaceEast[] =
{
ANIMCMD_FRAME(2, 1, .hFlip = TRUE),
ANIMCMD_JUMP(0),
};
-const union AnimCmd *const gFieldEffectObjectImageAnimTable_SurfBlob[] =
+static const union AnimCmd *const sAnimTable_SurfBlob[] =
{
- gSurfBlobAnim_FaceSouth,
- gSurfBlobAnim_FaceNorth,
- gSurfBlobAnim_FaceWest,
- gSurfBlobAnim_FaceEast,
+ sSurfBlobAnim_FaceSouth,
+ sSurfBlobAnim_FaceNorth,
+ sSurfBlobAnim_FaceWest,
+ sSurfBlobAnim_FaceEast,
};
-const struct SpriteTemplate gFieldEffectObjectTemplate_SurfBlob = {0xFFFF, 0xFFFF, &gObjectEventBaseOam_32x32, gFieldEffectObjectImageAnimTable_SurfBlob, gFieldEffectObjectPicTable_SurfBlob, gDummySpriteAffineAnimTable, UpdateSurfBlobFieldEffect};
+const struct SpriteTemplate gFieldEffectObjectTemplate_SurfBlob = {
+ .tileTag = 0xFFFF,
+ .paletteTag = 0xFFFF,
+ .oam = &gObjectEventBaseOam_32x32,
+ .anims = sAnimTable_SurfBlob,
+ .images = sPicTable_SurfBlob,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = UpdateSurfBlobFieldEffect,
+};
-const struct SpriteFrameImage gFieldEffectObjectPicTable_Arrow[] = {
+static const struct SpriteFrameImage sPicTable_Arrow[] = {
overworld_frame(gFieldEffectObjectPic_Arrow, 2, 2, 0),
overworld_frame(gFieldEffectObjectPic_Arrow, 2, 2, 1),
overworld_frame(gFieldEffectObjectPic_Arrow, 2, 2, 2),
@@ -166,51 +229,59 @@ const struct SpriteFrameImage gFieldEffectObjectPicTable_Arrow[] = {
overworld_frame(gFieldEffectObjectPic_Arrow, 2, 2, 7),
};
-const union AnimCmd gFieldEffectObjectImageAnim_850CC1C[] =
+static const union AnimCmd sArrowAnim_South[] =
{
ANIMCMD_FRAME(3, 32),
ANIMCMD_FRAME(7, 32),
ANIMCMD_JUMP(0),
};
-const union AnimCmd gFieldEffectObjectImageAnim_850CC28[] =
+static const union AnimCmd sArrowAnim_North[] =
{
ANIMCMD_FRAME(0, 32),
ANIMCMD_FRAME(4, 32),
ANIMCMD_JUMP(0),
};
-const union AnimCmd gFieldEffectObjectImageAnim_850CC34[] =
+static const union AnimCmd sArrowAnim_West[] =
{
ANIMCMD_FRAME(1, 32),
ANIMCMD_FRAME(5, 32),
ANIMCMD_JUMP(0),
};
-const union AnimCmd gFieldEffectObjectImageAnim_850CC40[] =
+static const union AnimCmd sArrowAnim_East[] =
{
ANIMCMD_FRAME(2, 32),
ANIMCMD_FRAME(6, 32),
ANIMCMD_JUMP(0),
};
-const union AnimCmd *const gFieldEffectObjectImageAnimTable_Arrow[] =
+static const union AnimCmd *const sAnimTable_Arrow[] =
{
- gFieldEffectObjectImageAnim_850CC1C,
- gFieldEffectObjectImageAnim_850CC28,
- gFieldEffectObjectImageAnim_850CC34,
- gFieldEffectObjectImageAnim_850CC40,
+ sArrowAnim_South,
+ sArrowAnim_North,
+ sArrowAnim_West,
+ sArrowAnim_East,
};
-const struct SpriteTemplate gFieldEffectObjectTemplate_Arrow = {0xFFFF, 0xFFFF, &gObjectEventBaseOam_16x16, gFieldEffectObjectImageAnimTable_Arrow, gFieldEffectObjectPicTable_Arrow, gDummySpriteAffineAnimTable, SpriteCallbackDummy};
+const struct SpriteTemplate gFieldEffectObjectTemplate_Arrow = {
+ .tileTag = 0xFFFF,
+ .paletteTag = 0xFFFF,
+ .oam = &gObjectEventBaseOam_16x16,
+ .anims = sAnimTable_Arrow,
+ .images = sPicTable_Arrow,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = SpriteCallbackDummy,
+};
-const struct SpriteFrameImage gFieldEffectObjectPicTable_GroundImpactDust[] = {
+static const struct SpriteFrameImage sPicTable_GroundImpactDust[] = {
overworld_frame(gFieldEffectObjectPic_GroundImpactDust, 2, 1, 0),
overworld_frame(gFieldEffectObjectPic_GroundImpactDust, 2, 1, 1),
overworld_frame(gFieldEffectObjectPic_GroundImpactDust, 2, 1, 2),
};
-const union AnimCmd gFieldEffectObjectImageAnim_850CC8C[] =
+static const union AnimCmd sAnim_GroundImpactDust[] =
{
ANIMCMD_FRAME(0, 8),
ANIMCMD_FRAME(1, 8),
@@ -218,21 +289,29 @@ const union AnimCmd gFieldEffectObjectImageAnim_850CC8C[] =
ANIMCMD_END,
};
-const union AnimCmd *const gFieldEffectObjectImageAnimTable_GroundImpactDust[] =
+static const union AnimCmd *const sAnimTable_GroundImpactDust[] =
{
- gFieldEffectObjectImageAnim_850CC8C,
+ sAnim_GroundImpactDust,
};
-const struct SpriteTemplate gFieldEffectObjectTemplate_GroundImpactDust = {0xFFFF, 0x1004, &gObjectEventBaseOam_16x8, gFieldEffectObjectImageAnimTable_GroundImpactDust, gFieldEffectObjectPicTable_GroundImpactDust, gDummySpriteAffineAnimTable, sub_8156194};
+const struct SpriteTemplate gFieldEffectObjectTemplate_GroundImpactDust = {
+ .tileTag = 0xFFFF,
+ .paletteTag = FLDEFF_PAL_TAG_GENERAL_0,
+ .oam = &gObjectEventBaseOam_16x8,
+ .anims = sAnimTable_GroundImpactDust,
+ .images = sPicTable_GroundImpactDust,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = UpdateJumpImpactEffect,
+};
-const struct SpriteFrameImage gFieldEffectObjectPicTable_BikeHopTallGrass[] = {
- overworld_frame(gFieldEffectObjectPic_BikeHopTallGrass, 2, 1, 0),
- overworld_frame(gFieldEffectObjectPic_BikeHopTallGrass, 2, 1, 1),
- overworld_frame(gFieldEffectObjectPic_BikeHopTallGrass, 2, 1, 2),
- overworld_frame(gFieldEffectObjectPic_BikeHopTallGrass, 2, 1, 3),
+static const struct SpriteFrameImage sPicTable_JumpTallGrass[] = {
+ overworld_frame(gFieldEffectObjectPic_JumpTallGrass, 2, 1, 0),
+ overworld_frame(gFieldEffectObjectPic_JumpTallGrass, 2, 1, 1),
+ overworld_frame(gFieldEffectObjectPic_JumpTallGrass, 2, 1, 2),
+ overworld_frame(gFieldEffectObjectPic_JumpTallGrass, 2, 1, 3),
};
-const union AnimCmd gFieldEffectObjectImageAnim_850CCD8[] =
+static const union AnimCmd sAnim_JumpTallGrass[] =
{
ANIMCMD_FRAME(0, 8),
ANIMCMD_FRAME(1, 8),
@@ -241,171 +320,203 @@ const union AnimCmd gFieldEffectObjectImageAnim_850CCD8[] =
ANIMCMD_END,
};
-const union AnimCmd *const gFieldEffectObjectImageAnimTable_BikeHopTallGrass[] =
+static const union AnimCmd *const sAnimTable_JumpTallGrass[] =
{
- gFieldEffectObjectImageAnim_850CCD8,
+ sAnim_JumpTallGrass,
};
-const struct SpriteTemplate gFieldEffectObjectTemplate_BikeHopTallGrass = {0xFFFF, 0x1005, &gObjectEventBaseOam_16x8, gFieldEffectObjectImageAnimTable_BikeHopTallGrass, gFieldEffectObjectPicTable_BikeHopTallGrass, gDummySpriteAffineAnimTable, sub_8156194};
+const struct SpriteTemplate gFieldEffectObjectTemplate_JumpTallGrass = {
+ .tileTag = 0xFFFF,
+ .paletteTag = FLDEFF_PAL_TAG_GENERAL_1,
+ .oam = &gObjectEventBaseOam_16x8,
+ .anims = sAnimTable_JumpTallGrass,
+ .images = sPicTable_JumpTallGrass,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = UpdateJumpImpactEffect,
+};
-const struct SpriteFrameImage gFieldEffectObjectPicTable_SandFootprints[] = {
+static const struct SpriteFrameImage sPicTable_SandFootprints[] = {
overworld_frame(gFieldEffectObjectPic_SandFootprints, 2, 2, 0),
overworld_frame(gFieldEffectObjectPic_SandFootprints, 2, 2, 1),
};
-const union AnimCmd gFieldEffectObjectImageAnim_850CD18[] =
+static const union AnimCmd sSandFootprintsAnim_South[] =
{
ANIMCMD_FRAME(0, 1, .vFlip = TRUE),
ANIMCMD_END,
};
-const union AnimCmd gFieldEffectObjectImageAnim_850CD20[] =
+static const union AnimCmd sSandFootprintsAnim_North[] =
{
ANIMCMD_FRAME(0, 1),
ANIMCMD_END,
};
-const union AnimCmd gFieldEffectObjectImageAnim_850CD28[] =
+static const union AnimCmd sSandFootprintsAnim_West[] =
{
ANIMCMD_FRAME(1, 1),
ANIMCMD_END,
};
-const union AnimCmd gFieldEffectObjectImageAnim_850CD30[] =
+static const union AnimCmd sSandFootprintsAnim_East[] =
{
ANIMCMD_FRAME(1, 1, .hFlip = TRUE),
ANIMCMD_END,
};
-const union AnimCmd *const gFieldEffectObjectImageAnimTable_SandFootprints[] =
+static const union AnimCmd *const sAnimTable_SandFootprints[] =
{
- gFieldEffectObjectImageAnim_850CD18,
- gFieldEffectObjectImageAnim_850CD18,
- gFieldEffectObjectImageAnim_850CD20,
- gFieldEffectObjectImageAnim_850CD28,
- gFieldEffectObjectImageAnim_850CD30,
+ sSandFootprintsAnim_South,
+ sSandFootprintsAnim_South,
+ sSandFootprintsAnim_North,
+ sSandFootprintsAnim_West,
+ sSandFootprintsAnim_East,
};
-const struct SpriteTemplate gFieldEffectObjectTemplate_SandFootprints = {0xFFFF, 0x1004, &gObjectEventBaseOam_16x16, gFieldEffectObjectImageAnimTable_SandFootprints, gFieldEffectObjectPicTable_SandFootprints, gDummySpriteAffineAnimTable, UpdateFootprintsTireTracksFieldEffect};
+const struct SpriteTemplate gFieldEffectObjectTemplate_SandFootprints = {
+ .tileTag = 0xFFFF,
+ .paletteTag = FLDEFF_PAL_TAG_GENERAL_0,
+ .oam = &gObjectEventBaseOam_16x16,
+ .anims = sAnimTable_SandFootprints,
+ .images = sPicTable_SandFootprints,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = UpdateFootprintsTireTracksFieldEffect,
+};
-const struct SpriteFrameImage gFieldEffectObjectPicTable_DeepSandFootprints[] = {
+static const struct SpriteFrameImage sPicTable_DeepSandFootprints[] = {
overworld_frame(gFieldEffectObjectPic_DeepSandFootprints, 2, 2, 0),
overworld_frame(gFieldEffectObjectPic_DeepSandFootprints, 2, 2, 1),
};
-const union AnimCmd gFieldEffectObjectImageAnim_850CD74[] =
+static const union AnimCmd sDeepSandFootprintsAnim_South[] =
{
ANIMCMD_FRAME(0, 1, .vFlip = TRUE),
ANIMCMD_END,
};
-const union AnimCmd gFieldEffectObjectImageAnim_850CD7C[] =
+static const union AnimCmd sDeepSandFootprintsAnim_North[] =
{
ANIMCMD_FRAME(0, 1),
ANIMCMD_END,
};
-const union AnimCmd gFieldEffectObjectImageAnim_850CD84[] =
+static const union AnimCmd sDeepSandFootprintsAnim_West[] =
{
ANIMCMD_FRAME(1, 1),
ANIMCMD_END,
};
-const union AnimCmd gFieldEffectObjectImageAnim_850CD8C[] =
+static const union AnimCmd sDeepSandFootprintsAnim_East[] =
{
ANIMCMD_FRAME(1, 1, .hFlip = TRUE),
ANIMCMD_END,
};
-const union AnimCmd *const gFieldEffectObjectImageAnimTable_DeepSandFootprints[] =
+static const union AnimCmd *const sAnimTable_DeepSandFootprints[] =
{
- gFieldEffectObjectImageAnim_850CD74,
- gFieldEffectObjectImageAnim_850CD74,
- gFieldEffectObjectImageAnim_850CD7C,
- gFieldEffectObjectImageAnim_850CD84,
- gFieldEffectObjectImageAnim_850CD8C,
+ sDeepSandFootprintsAnim_South,
+ sDeepSandFootprintsAnim_South,
+ sDeepSandFootprintsAnim_North,
+ sDeepSandFootprintsAnim_West,
+ sDeepSandFootprintsAnim_East,
};
-const struct SpriteTemplate gFieldEffectObjectTemplate_DeepSandFootprints = {0xFFFF, 0x1004, &gObjectEventBaseOam_16x16, gFieldEffectObjectImageAnimTable_DeepSandFootprints, gFieldEffectObjectPicTable_DeepSandFootprints, gDummySpriteAffineAnimTable, UpdateFootprintsTireTracksFieldEffect};
+const struct SpriteTemplate gFieldEffectObjectTemplate_DeepSandFootprints = {
+ .tileTag = 0xFFFF,
+ .paletteTag = FLDEFF_PAL_TAG_GENERAL_0,
+ .oam = &gObjectEventBaseOam_16x16,
+ .anims = sAnimTable_DeepSandFootprints,
+ .images = sPicTable_DeepSandFootprints,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = UpdateFootprintsTireTracksFieldEffect,
+};
-const struct SpriteFrameImage gFieldEffectObjectPicTable_BikeTireTracks[] = {
+static const struct SpriteFrameImage sPicTable_BikeTireTracks[] = {
overworld_frame(gFieldEffectObjectPic_BikeTireTracks, 2, 2, 0),
overworld_frame(gFieldEffectObjectPic_BikeTireTracks, 2, 2, 1),
overworld_frame(gFieldEffectObjectPic_BikeTireTracks, 2, 2, 2),
overworld_frame(gFieldEffectObjectPic_BikeTireTracks, 2, 2, 3),
};
-const union AnimCmd gFieldEffectObjectImageAnim_850CDE0[] =
+static const union AnimCmd sBikeTireTracksAnim_South[] =
{
ANIMCMD_FRAME(2, 1),
ANIMCMD_END,
};
-const union AnimCmd gFieldEffectObjectImageAnim_850CDE8[] =
+static const union AnimCmd sBikeTireTracksAnim_North[] =
{
ANIMCMD_FRAME(2, 1),
ANIMCMD_END,
};
-const union AnimCmd gFieldEffectObjectImageAnim_850CDF0[] =
+static const union AnimCmd sBikeTireTracksAnim_West[] =
{
ANIMCMD_FRAME(1, 1),
ANIMCMD_END,
};
-const union AnimCmd gFieldEffectObjectImageAnim_850CDF8[] =
+static const union AnimCmd sBikeTireTracksAnim_East[] =
{
ANIMCMD_FRAME(1, 1),
ANIMCMD_END,
};
-const union AnimCmd gFieldEffectObjectImageAnim_850CE00[] =
+static const union AnimCmd sBikeTireTracksAnim_SECornerTurn[] =
{
ANIMCMD_FRAME(0, 1),
ANIMCMD_END,
};
-const union AnimCmd gFieldEffectObjectImageAnim_850CE08[] =
+static const union AnimCmd sBikeTireTracksAnim_SWCornerTurn[] =
{
ANIMCMD_FRAME(0, 1, .hFlip = TRUE),
ANIMCMD_END,
};
-const union AnimCmd gFieldEffectObjectImageAnim_850CE10[] =
+static const union AnimCmd sBikeTireTracksAnim_NWCornerTurn[] =
{
ANIMCMD_FRAME(3, 1, .hFlip = TRUE),
ANIMCMD_END,
};
-const union AnimCmd gFieldEffectObjectImageAnim_850CE18[] =
+static const union AnimCmd sBikeTireTracksAnim_NECornerTurn[] =
{
ANIMCMD_FRAME(3, 1),
ANIMCMD_END,
};
-const union AnimCmd *const gFieldEffectObjectImageAnimTable_BikeTireTracks[] =
+static const union AnimCmd *const sAnimTable_BikeTireTracks[] =
{
- gFieldEffectObjectImageAnim_850CDE0,
- gFieldEffectObjectImageAnim_850CDE0,
- gFieldEffectObjectImageAnim_850CDE8,
- gFieldEffectObjectImageAnim_850CDF0,
- gFieldEffectObjectImageAnim_850CDF8,
- gFieldEffectObjectImageAnim_850CE00,
- gFieldEffectObjectImageAnim_850CE08,
- gFieldEffectObjectImageAnim_850CE10,
- gFieldEffectObjectImageAnim_850CE18,
+ sBikeTireTracksAnim_South,
+ sBikeTireTracksAnim_South,
+ sBikeTireTracksAnim_North,
+ sBikeTireTracksAnim_West,
+ sBikeTireTracksAnim_East,
+ sBikeTireTracksAnim_SECornerTurn,
+ sBikeTireTracksAnim_SWCornerTurn,
+ sBikeTireTracksAnim_NWCornerTurn,
+ sBikeTireTracksAnim_NECornerTurn,
};
-const struct SpriteTemplate gFieldEffectObjectTemplate_BikeTireTracks = {0xFFFF, 0x1004, &gObjectEventBaseOam_16x16, gFieldEffectObjectImageAnimTable_BikeTireTracks, gFieldEffectObjectPicTable_BikeTireTracks, gDummySpriteAffineAnimTable, UpdateFootprintsTireTracksFieldEffect};
+const struct SpriteTemplate gFieldEffectObjectTemplate_BikeTireTracks = {
+ .tileTag = 0xFFFF,
+ .paletteTag = FLDEFF_PAL_TAG_GENERAL_0,
+ .oam = &gObjectEventBaseOam_16x16,
+ .anims = sAnimTable_BikeTireTracks,
+ .images = sPicTable_BikeTireTracks,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = UpdateFootprintsTireTracksFieldEffect,
+};
-const struct SpriteFrameImage gFieldEffectObjectPicTable_BikeHopBigSplash[] = {
- overworld_frame(gFieldEffectObjectPic_BikeHopBigSplash, 2, 2, 0),
- overworld_frame(gFieldEffectObjectPic_BikeHopBigSplash, 2, 2, 1),
- overworld_frame(gFieldEffectObjectPic_BikeHopBigSplash, 2, 2, 2),
- overworld_frame(gFieldEffectObjectPic_BikeHopBigSplash, 2, 2, 3),
+static const struct SpriteFrameImage sPicTable_JumpBigSplash[] = {
+ overworld_frame(gFieldEffectObjectPic_JumpBigSplash, 2, 2, 0),
+ overworld_frame(gFieldEffectObjectPic_JumpBigSplash, 2, 2, 1),
+ overworld_frame(gFieldEffectObjectPic_JumpBigSplash, 2, 2, 2),
+ overworld_frame(gFieldEffectObjectPic_JumpBigSplash, 2, 2, 3),
};
-const union AnimCmd gFieldEffectObjectImageAnim_850CE7C[] =
+static const union AnimCmd sAnim_JumpBigSplash[] =
{
ANIMCMD_FRAME(0, 8),
ANIMCMD_FRAME(1, 8),
@@ -414,26 +525,34 @@ const union AnimCmd gFieldEffectObjectImageAnim_850CE7C[] =
ANIMCMD_END,
};
-const union AnimCmd *const gFieldEffectObjectImageAnimTable_BikeHopBigSplash[] =
+static const union AnimCmd *const sAnimTable_JumpBigSplash[] =
{
- gFieldEffectObjectImageAnim_850CE7C,
+ sAnim_JumpBigSplash,
};
-const struct SpriteTemplate gFieldEffectObjectTemplate_BikeHopBigSplash = {0xFFFF, 0x1004, &gObjectEventBaseOam_16x16, gFieldEffectObjectImageAnimTable_BikeHopBigSplash, gFieldEffectObjectPicTable_BikeHopBigSplash, gDummySpriteAffineAnimTable, sub_8156194};
+const struct SpriteTemplate gFieldEffectObjectTemplate_JumpBigSplash = {
+ .tileTag = 0xFFFF,
+ .paletteTag = FLDEFF_PAL_TAG_GENERAL_0,
+ .oam = &gObjectEventBaseOam_16x16,
+ .anims = sAnimTable_JumpBigSplash,
+ .images = sPicTable_JumpBigSplash,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = UpdateJumpImpactEffect,
+};
-const struct SpriteFrameImage gFieldEffectObjectPicTable_Splash[] = {
+static const struct SpriteFrameImage sPicTable_Splash[] = {
overworld_frame(gFieldEffectObjectPic_Splash, 2, 1, 0),
overworld_frame(gFieldEffectObjectPic_Splash, 2, 1, 1),
};
-const union AnimCmd gFieldEffectObjectImageAnim_850CEBC[] =
+static const union AnimCmd sAnim_Splash_0[] =
{
ANIMCMD_FRAME(0, 4),
ANIMCMD_FRAME(1, 4),
ANIMCMD_END,
};
-const union AnimCmd gFieldEffectObjectImageAnim_850CEC8[] =
+static const union AnimCmd sAnim_Splash_1[] =
{
ANIMCMD_FRAME(0, 4),
ANIMCMD_FRAME(1, 4),
@@ -446,21 +565,29 @@ const union AnimCmd gFieldEffectObjectImageAnim_850CEC8[] =
ANIMCMD_JUMP(0),
};
-const union AnimCmd *const gFieldEffectObjectImageAnimTable_Splash[] =
+static const union AnimCmd *const sAnimTable_Splash[] =
{
- gFieldEffectObjectImageAnim_850CEBC,
- gFieldEffectObjectImageAnim_850CEC8,
+ sAnim_Splash_0,
+ sAnim_Splash_1,
};
-const struct SpriteTemplate gFieldEffectObjectTemplate_Splash = {0xFFFF, 0x1004, &gObjectEventBaseOam_16x8, gFieldEffectObjectImageAnimTable_Splash, gFieldEffectObjectPicTable_Splash, gDummySpriteAffineAnimTable, UpdateSplashFieldEffect};
+const struct SpriteTemplate gFieldEffectObjectTemplate_Splash = {
+ .tileTag = 0xFFFF,
+ .paletteTag = FLDEFF_PAL_TAG_GENERAL_0,
+ .oam = &gObjectEventBaseOam_16x8,
+ .anims = sAnimTable_Splash,
+ .images = sPicTable_Splash,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = UpdateSplashFieldEffect,
+};
-const struct SpriteFrameImage gFieldEffectObjectPicTable_BikeHopSmallSplash[] = {
- overworld_frame(gFieldEffectObjectPic_BikeHopSmallSplash, 2, 1, 0),
- overworld_frame(gFieldEffectObjectPic_BikeHopSmallSplash, 2, 1, 1),
- overworld_frame(gFieldEffectObjectPic_BikeHopSmallSplash, 2, 1, 2),
+static const struct SpriteFrameImage sPicTable_JumpSmallSplash[] = {
+ overworld_frame(gFieldEffectObjectPic_JumpSmallSplash, 2, 1, 0),
+ overworld_frame(gFieldEffectObjectPic_JumpSmallSplash, 2, 1, 1),
+ overworld_frame(gFieldEffectObjectPic_JumpSmallSplash, 2, 1, 2),
};
-const union AnimCmd gFieldEffectObjectImageAnim_850CF24[] =
+static const union AnimCmd sAnim_JumpSmallSplash[] =
{
ANIMCMD_FRAME(0, 4),
ANIMCMD_FRAME(1, 4),
@@ -468,21 +595,29 @@ const union AnimCmd gFieldEffectObjectImageAnim_850CF24[] =
ANIMCMD_END,
};
-const union AnimCmd *const gFieldEffectObjectImageAnimTable_BikeHopSmallSplash[] =
+static const union AnimCmd *const sAnimTable_JumpSmallSplash[] =
{
- gFieldEffectObjectImageAnim_850CF24,
+ sAnim_JumpSmallSplash,
};
-const struct SpriteTemplate gFieldEffectObjectTemplate_BikeHopSmallSplash = {0xFFFF, 0x1004, &gObjectEventBaseOam_16x8, gFieldEffectObjectImageAnimTable_BikeHopSmallSplash, gFieldEffectObjectPicTable_BikeHopSmallSplash, gDummySpriteAffineAnimTable, sub_8156194};
+const struct SpriteTemplate gFieldEffectObjectTemplate_JumpSmallSplash = {
+ .tileTag = 0xFFFF,
+ .paletteTag = FLDEFF_PAL_TAG_GENERAL_0,
+ .oam = &gObjectEventBaseOam_16x8,
+ .anims = sAnimTable_JumpSmallSplash,
+ .images = sPicTable_JumpSmallSplash,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = UpdateJumpImpactEffect,
+};
-const struct SpriteFrameImage gFieldEffectObjectPicTable_LongGrass[] = {
+static const struct SpriteFrameImage sPicTable_LongGrass[] = {
overworld_frame(gFieldEffectObjectPic_LongGrass, 2, 2, 0),
overworld_frame(gFieldEffectObjectPic_LongGrass, 2, 2, 1),
overworld_frame(gFieldEffectObjectPic_LongGrass, 2, 2, 2),
overworld_frame(gFieldEffectObjectPic_LongGrass, 2, 2, 3),
};
-const union AnimCmd gFieldEffectObjectImageAnim_850CF70[] =
+static const union AnimCmd sAnim_LongGrass[] =
{
ANIMCMD_FRAME(1, 3),
ANIMCMD_FRAME(2, 3),
@@ -494,23 +629,31 @@ const union AnimCmd gFieldEffectObjectImageAnim_850CF70[] =
ANIMCMD_END,
};
-const union AnimCmd *const gFieldEffectObjectImageAnimTable_LongGrass[] =
+static const union AnimCmd *const sAnimTable_LongGrass[] =
{
- gFieldEffectObjectImageAnim_850CF70,
+ sAnim_LongGrass,
};
-const struct SpriteTemplate gFieldEffectObjectTemplate_LongGrass = {0xFFFF, 0x1005, &gObjectEventBaseOam_16x16, gFieldEffectObjectImageAnimTable_LongGrass, gFieldEffectObjectPicTable_LongGrass, gDummySpriteAffineAnimTable, UpdateLongGrassFieldEffect};
+const struct SpriteTemplate gFieldEffectObjectTemplate_LongGrass = {
+ .tileTag = 0xFFFF,
+ .paletteTag = FLDEFF_PAL_TAG_GENERAL_1,
+ .oam = &gObjectEventBaseOam_16x16,
+ .anims = sAnimTable_LongGrass,
+ .images = sPicTable_LongGrass,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = UpdateLongGrassFieldEffect,
+};
-const struct SpriteFrameImage gFieldEffectObjectPicTable_Unknown16[] = {
- overworld_frame(gFieldEffectObjectPic_Unknown16, 2, 2, 0),
- overworld_frame(gFieldEffectObjectPic_Unknown16, 2, 2, 1),
- overworld_frame(gFieldEffectObjectPic_Unknown16, 2, 2, 2),
- overworld_frame(gFieldEffectObjectPic_Unknown16, 2, 2, 3),
- overworld_frame(gFieldEffectObjectPic_Unknown16, 2, 2, 4),
- overworld_frame(gFieldEffectObjectPic_Unknown16, 2, 2, 6),
+static const struct SpriteFrameImage sPicTable_JumpLongGrass[] = {
+ overworld_frame(gFieldEffectObjectPic_JumpLongGrass, 2, 2, 0),
+ overworld_frame(gFieldEffectObjectPic_JumpLongGrass, 2, 2, 1),
+ overworld_frame(gFieldEffectObjectPic_JumpLongGrass, 2, 2, 2),
+ overworld_frame(gFieldEffectObjectPic_JumpLongGrass, 2, 2, 3),
+ overworld_frame(gFieldEffectObjectPic_JumpLongGrass, 2, 2, 4),
+ overworld_frame(gFieldEffectObjectPic_JumpLongGrass, 2, 2, 6),
};
-const union AnimCmd gFieldEffectObjectImageAnim_850CFDC[] =
+static const union AnimCmd sAnim_JumpLongGrass[] =
{
ANIMCMD_FRAME(0, 4),
ANIMCMD_FRAME(1, 4),
@@ -521,15 +664,23 @@ const union AnimCmd gFieldEffectObjectImageAnim_850CFDC[] =
ANIMCMD_END,
};
-const union AnimCmd *const gFieldEffectObjectImageAnimTable_Unknown16[] =
+static const union AnimCmd *const sAnimTable_JumpLongGrass[] =
{
- gFieldEffectObjectImageAnim_850CFDC,
+ sAnim_JumpLongGrass,
};
-const struct SpriteTemplate gFieldEffectObjectTemplate_Unknown16 = {0xFFFF, 0x1005, &gObjectEventBaseOam_16x16, gFieldEffectObjectImageAnimTable_Unknown16, gFieldEffectObjectPicTable_Unknown16, gDummySpriteAffineAnimTable, sub_8156194};
+const struct SpriteTemplate gFieldEffectObjectTemplate_JumpLongGrass = {
+ .tileTag = 0xFFFF,
+ .paletteTag = FLDEFF_PAL_TAG_GENERAL_1,
+ .oam = &gObjectEventBaseOam_16x16,
+ .anims = sAnimTable_JumpLongGrass,
+ .images = sPicTable_JumpLongGrass,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = UpdateJumpImpactEffect,
+};
-const struct SpriteFrameImage gFieldEffectObjectPicTable_Unknown17[] = {
- overworld_frame(gFieldEffectObjectPic_Unknown16, 2, 2, 6),
+static const struct SpriteFrameImage sPicTable_UnusedGrass[] = {
+ overworld_frame(gFieldEffectObjectPic_JumpLongGrass, 2, 2, 6),
overworld_frame(gFieldEffectObjectPic_Unknown17, 2, 2, 0),
overworld_frame(gFieldEffectObjectPic_Unknown17, 2, 2, 1),
overworld_frame(gFieldEffectObjectPic_Unknown17, 2, 2, 2),
@@ -540,7 +691,7 @@ const struct SpriteFrameImage gFieldEffectObjectPicTable_Unknown17[] = {
overworld_frame(gFieldEffectObjectPic_Unknown17, 2, 2, 7),
};
-const union AnimCmd gFieldEffectObjectImageAnim_850D05C[] =
+static const union AnimCmd sAnim_UnusedGrass[] =
{
ANIMCMD_FRAME(0, 10),
ANIMCMD_FRAME(1, 4),
@@ -554,21 +705,29 @@ const union AnimCmd gFieldEffectObjectImageAnim_850D05C[] =
ANIMCMD_JUMP(7),
};
-const union AnimCmd *const gFieldEffectObjectImageAnimTable_Unknown17[] =
+static const union AnimCmd *const sAnimTable_UnusedGrass[] =
{
- gFieldEffectObjectImageAnim_850D05C,
+ sAnim_UnusedGrass,
};
-const struct SpriteTemplate gFieldEffectObjectTemplate_Unknown17 = {0xFFFF, 0x1005, &gObjectEventBaseOam_16x16, gFieldEffectObjectImageAnimTable_Unknown17, gFieldEffectObjectPicTable_Unknown17, gDummySpriteAffineAnimTable, WaitFieldEffectSpriteAnim};
+const struct SpriteTemplate gFieldEffectObjectTemplate_UnusedGrass = {
+ .tileTag = 0xFFFF,
+ .paletteTag = FLDEFF_PAL_TAG_GENERAL_1,
+ .oam = &gObjectEventBaseOam_16x16,
+ .anims = sAnimTable_UnusedGrass,
+ .images = sPicTable_UnusedGrass,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = WaitFieldEffectSpriteAnim,
+};
-const struct SpriteFrameImage gFieldEffectObjectPicTable_Unknown18[] = {
- overworld_frame(gFieldEffectObjectPic_Unknown18, 2, 2, 0),
- overworld_frame(gFieldEffectObjectPic_Unknown18, 2, 2, 1),
- overworld_frame(gFieldEffectObjectPic_Unknown18, 2, 2, 2),
- overworld_frame(gFieldEffectObjectPic_Unknown18, 2, 2, 3),
+static const struct SpriteFrameImage sPicTable_UnusedGrass2[] = {
+ overworld_frame(gFieldEffectObjectPic_UnusedGrass2, 2, 2, 0),
+ overworld_frame(gFieldEffectObjectPic_UnusedGrass2, 2, 2, 1),
+ overworld_frame(gFieldEffectObjectPic_UnusedGrass2, 2, 2, 2),
+ overworld_frame(gFieldEffectObjectPic_UnusedGrass2, 2, 2, 3),
};
-const union AnimCmd gFieldEffectObjectImageAnim_850D0C0[] =
+static const union AnimCmd sAnim_UnusedGrass2[] =
{
ANIMCMD_FRAME(0, 4),
ANIMCMD_FRAME(1, 4),
@@ -579,21 +738,29 @@ const union AnimCmd gFieldEffectObjectImageAnim_850D0C0[] =
ANIMCMD_JUMP(0),
};
-const union AnimCmd *const gFieldEffectObjectImageAnimTable_Unknown18[] =
+static const union AnimCmd *const sAnimTable_UnusedGrass2[] =
{
- gFieldEffectObjectImageAnim_850D0C0,
+ sAnim_UnusedGrass2,
};
-const struct SpriteTemplate gFieldEffectObjectTemplate_Unknown18 = {0xFFFF, 0x1005, &gObjectEventBaseOam_16x16, gFieldEffectObjectImageAnimTable_Unknown18, gFieldEffectObjectPicTable_Unknown18, gDummySpriteAffineAnimTable, WaitFieldEffectSpriteAnim};
+const struct SpriteTemplate gFieldEffectObjectTemplate_UnusedGrass2 = {
+ .tileTag = 0xFFFF,
+ .paletteTag = FLDEFF_PAL_TAG_GENERAL_1,
+ .oam = &gObjectEventBaseOam_16x16,
+ .anims = sAnimTable_UnusedGrass2,
+ .images = sPicTable_UnusedGrass2,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = WaitFieldEffectSpriteAnim,
+};
-const struct SpriteFrameImage gFieldEffectObjectPicTable_Unknown19[] = {
- overworld_frame(gFieldEffectObjectPic_Unknown19, 2, 2, 0),
- overworld_frame(gFieldEffectObjectPic_Unknown19, 2, 2, 1),
- overworld_frame(gFieldEffectObjectPic_Unknown19, 2, 2, 2),
- overworld_frame(gFieldEffectObjectPic_Unknown19, 2, 2, 3),
+static const struct SpriteFrameImage sPicTable_UnusedSand[] = {
+ overworld_frame(gFieldEffectObjectPic_UnusedSand, 2, 2, 0),
+ overworld_frame(gFieldEffectObjectPic_UnusedSand, 2, 2, 1),
+ overworld_frame(gFieldEffectObjectPic_UnusedSand, 2, 2, 2),
+ overworld_frame(gFieldEffectObjectPic_UnusedSand, 2, 2, 3),
};
-const union AnimCmd gFieldEffectObjectImageAnim_850D118[] =
+static const union AnimCmd sAnim_UnusedSand[] =
{
ANIMCMD_FRAME(0, 4),
ANIMCMD_FRAME(1, 4),
@@ -602,20 +769,28 @@ const union AnimCmd gFieldEffectObjectImageAnim_850D118[] =
ANIMCMD_JUMP(0),
};
-const union AnimCmd *const gFieldEffectObjectImageAnimTable_Unknown19[] =
+static const union AnimCmd *const sAnimTable_UnusedSand[] =
{
- gFieldEffectObjectImageAnim_850D118,
+ sAnim_UnusedSand,
};
-const struct SpriteTemplate gFieldEffectObjectTemplate_Unknown19 = {0xFFFF, 0x1004, &gObjectEventBaseOam_16x16, gFieldEffectObjectImageAnimTable_Unknown19, gFieldEffectObjectPicTable_Unknown19, gDummySpriteAffineAnimTable, WaitFieldEffectSpriteAnim};
+const struct SpriteTemplate gFieldEffectObjectTemplate_UnusedSand = {
+ .tileTag = 0xFFFF,
+ .paletteTag = FLDEFF_PAL_TAG_GENERAL_0,
+ .oam = &gObjectEventBaseOam_16x16,
+ .anims = sAnimTable_UnusedSand,
+ .images = sPicTable_UnusedSand,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = WaitFieldEffectSpriteAnim,
+};
-const struct SpriteFrameImage gFieldEffectObjectPicTable_Unknown29[] = {
- overworld_frame(gFieldEffectObjectPic_Unknown29, 2, 1, 0),
- overworld_frame(gFieldEffectObjectPic_Unknown29, 2, 1, 1),
- overworld_frame(gFieldEffectObjectPic_Unknown29, 2, 1, 2),
+static const struct SpriteFrameImage sPicTable_SandPile[] = {
+ overworld_frame(gFieldEffectObjectPic_SandPile, 2, 1, 0),
+ overworld_frame(gFieldEffectObjectPic_SandPile, 2, 1, 1),
+ overworld_frame(gFieldEffectObjectPic_SandPile, 2, 1, 2),
};
-const union AnimCmd gFieldEffectObjectImageAnim_850D160[] =
+static const union AnimCmd sAnim_SandPile[] =
{
ANIMCMD_FRAME(0, 4),
ANIMCMD_FRAME(1, 4),
@@ -623,21 +798,29 @@ const union AnimCmd gFieldEffectObjectImageAnim_850D160[] =
ANIMCMD_END,
};
-const union AnimCmd *const gFieldEffectObjectImageAnimTable_Unknown29[] =
+static const union AnimCmd *const sAnimTable_SandPile[] =
{
- gFieldEffectObjectImageAnim_850D160,
+ sAnim_SandPile,
};
-const struct SpriteTemplate gFieldEffectObjectTemplate_Unknown29 = {0xFFFF, 0x1004, &gObjectEventBaseOam_16x8, gFieldEffectObjectImageAnimTable_Unknown29, gFieldEffectObjectPicTable_Unknown29, gDummySpriteAffineAnimTable, UpdateSandPileFieldEffect};
+const struct SpriteTemplate gFieldEffectObjectTemplate_SandPile = {
+ .tileTag = 0xFFFF,
+ .paletteTag = FLDEFF_PAL_TAG_GENERAL_0,
+ .oam = &gObjectEventBaseOam_16x8,
+ .anims = sAnimTable_SandPile,
+ .images = sPicTable_SandPile,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = UpdateSandPileFieldEffect,
+};
-const struct SpriteFrameImage gFieldEffectObjectPicTable_Unknown20[] = {
- overworld_frame(gFieldEffectObjectPic_Unknown20, 2, 2, 0),
- overworld_frame(gFieldEffectObjectPic_Unknown20, 2, 2, 1),
- overworld_frame(gFieldEffectObjectPic_Unknown20, 2, 2, 2),
- overworld_frame(gFieldEffectObjectPic_Unknown20, 2, 2, 3),
+static const struct SpriteFrameImage sPicTable_WaterSurfacing[] = {
+ overworld_frame(gFieldEffectObjectPic_WaterSurfacing, 2, 2, 0),
+ overworld_frame(gFieldEffectObjectPic_WaterSurfacing, 2, 2, 1),
+ overworld_frame(gFieldEffectObjectPic_WaterSurfacing, 2, 2, 2),
+ overworld_frame(gFieldEffectObjectPic_WaterSurfacing, 2, 2, 3),
};
-const union AnimCmd gFieldEffectObjectImageAnim_850D1AC[] =
+static const union AnimCmd sAnim_WaterSurfacing[] =
{
ANIMCMD_FRAME(0, 4),
ANIMCMD_FRAME(1, 4),
@@ -648,14 +831,22 @@ const union AnimCmd gFieldEffectObjectImageAnim_850D1AC[] =
ANIMCMD_JUMP(0),
};
-const union AnimCmd *const gFieldEffectObjectImageAnimTable_Unknown20[] =
+static const union AnimCmd *const sAnimTable_WaterSurfacing[] =
{
- gFieldEffectObjectImageAnim_850D1AC,
+ sAnim_WaterSurfacing,
};
-const struct SpriteTemplate gFieldEffectObjectTemplate_Unknown20 = {0xFFFF, 0x1004, &gObjectEventBaseOam_16x16, gFieldEffectObjectImageAnimTable_Unknown20, gFieldEffectObjectPicTable_Unknown20, gDummySpriteAffineAnimTable, WaitFieldEffectSpriteAnim};
+const struct SpriteTemplate gFieldEffectObjectTemplate_WaterSurfacing = {
+ .tileTag = 0xFFFF,
+ .paletteTag = FLDEFF_PAL_TAG_GENERAL_0,
+ .oam = &gObjectEventBaseOam_16x16,
+ .anims = sAnimTable_WaterSurfacing,
+ .images = sPicTable_WaterSurfacing,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = WaitFieldEffectSpriteAnim,
+};
-const union AffineAnimCmd gFieldEffectObjectRotScalAnim_850D1E4[] =
+static const union AffineAnimCmd sAffineAnim_ReflectionDistortion_0[] =
{
AFFINEANIMCMD_FRAME(0xFF00, 0x100, -128, 0),
AFFINEANIMCMD_FRAME(0x1, 0x0, 0, 4),
@@ -669,7 +860,7 @@ const union AffineAnimCmd gFieldEffectObjectRotScalAnim_850D1E4[] =
AFFINEANIMCMD_JUMP(1),
};
-const union AffineAnimCmd gFieldEffectObjectRotScalAnim_850D234[] =
+static const union AffineAnimCmd sAffineAnim_ReflectionDistortion_1[] =
{
AFFINEANIMCMD_FRAME(0x100, 0x100, -128, 0),
AFFINEANIMCMD_FRAME(0xFFFF, 0x0, 0, 4),
@@ -683,24 +874,32 @@ const union AffineAnimCmd gFieldEffectObjectRotScalAnim_850D234[] =
AFFINEANIMCMD_JUMP(1),
};
-const union AffineAnimCmd *const gFieldEffectObjectRotScalAnimTable_Unknown21[] =
+static const union AffineAnimCmd *const sAffineAnims_ReflectionDistortion[] =
{
- gFieldEffectObjectRotScalAnim_850D1E4,
- gFieldEffectObjectRotScalAnim_850D234,
+ sAffineAnim_ReflectionDistortion_0,
+ sAffineAnim_ReflectionDistortion_1,
};
-const struct SpriteTemplate gFieldEffectObjectTemplate_Unknown21 = {0x0, 0xFFFF, &gDummyOamData, gDummySpriteAnimTable, NULL, gFieldEffectObjectRotScalAnimTable_Unknown21, SpriteCallbackDummy};
+const struct SpriteTemplate gFieldEffectObjectTemplate_ReflectionDistortion = {
+ .tileTag = 0x0,
+ .paletteTag = 0xFFFF,
+ .oam = &gDummyOamData,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = sAffineAnims_ReflectionDistortion,
+ .callback = SpriteCallbackDummy,
+};
-const struct SpriteFrameImage gFieldEffectObjectPicTable_BerryTreeGrowthSparkle[] = {
- overworld_frame(gFieldEffectObjectPic_BerryTreeGrowthSparkle, 2, 2, 0),
- overworld_frame(gFieldEffectObjectPic_BerryTreeGrowthSparkle, 2, 2, 1),
- overworld_frame(gFieldEffectObjectPic_BerryTreeGrowthSparkle, 2, 2, 2),
- overworld_frame(gFieldEffectObjectPic_BerryTreeGrowthSparkle, 2, 2, 3),
- overworld_frame(gFieldEffectObjectPic_BerryTreeGrowthSparkle, 2, 2, 4),
- overworld_frame(gFieldEffectObjectPic_BerryTreeGrowthSparkle, 2, 2, 5),
+static const struct SpriteFrameImage sPicTable_Sparkle[] = {
+ overworld_frame(gFieldEffectObjectPic_Sparkle, 2, 2, 0),
+ overworld_frame(gFieldEffectObjectPic_Sparkle, 2, 2, 1),
+ overworld_frame(gFieldEffectObjectPic_Sparkle, 2, 2, 2),
+ overworld_frame(gFieldEffectObjectPic_Sparkle, 2, 2, 3),
+ overworld_frame(gFieldEffectObjectPic_Sparkle, 2, 2, 4),
+ overworld_frame(gFieldEffectObjectPic_Sparkle, 2, 2, 5),
};
-const union AnimCmd gFieldEffectObjectImageAnim_850D2D4[] =
+static const union AnimCmd sAnim_Sparkle[] =
{
ANIMCMD_FRAME(0, 8),
ANIMCMD_FRAME(1, 8),
@@ -725,14 +924,22 @@ const union AnimCmd gFieldEffectObjectImageAnim_850D2D4[] =
ANIMCMD_END,
};
-const union AnimCmd *const gFieldEffectObjectImageAnimTable_BerryTreeGrowthSparkle[] =
+static const union AnimCmd *const sAnimTable_Sparkle[] =
{
- gFieldEffectObjectImageAnim_850D2D4,
+ sAnim_Sparkle,
};
-const struct SpriteTemplate gFieldEffectObjectTemplate_BerryTreeGrowthSparkle = {0xFFFF, 0xFFFF, &gObjectEventBaseOam_16x16, gFieldEffectObjectImageAnimTable_BerryTreeGrowthSparkle, gFieldEffectObjectPicTable_BerryTreeGrowthSparkle, gDummySpriteAffineAnimTable, WaitFieldEffectSpriteAnim};
+const struct SpriteTemplate gFieldEffectObjectTemplate_Sparkle = {
+ .tileTag = 0xFFFF,
+ .paletteTag = 0xFFFF,
+ .oam = &gObjectEventBaseOam_16x16,
+ .anims = sAnimTable_Sparkle,
+ .images = sPicTable_Sparkle,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = WaitFieldEffectSpriteAnim,
+};
-const struct SpriteFrameImage gFieldEffectObjectPicTable_TreeDisguise[] = {
+static const struct SpriteFrameImage sPicTable_TreeDisguise[] = {
overworld_frame(gFieldEffectObjectPic_TreeDisguise, 2, 4, 0),
overworld_frame(gFieldEffectObjectPic_TreeDisguise, 2, 4, 1),
overworld_frame(gFieldEffectObjectPic_TreeDisguise, 2, 4, 2),
@@ -742,13 +949,13 @@ const struct SpriteFrameImage gFieldEffectObjectPicTable_TreeDisguise[] = {
overworld_frame(gFieldEffectObjectPic_TreeDisguise, 2, 4, 6),
};
-const union AnimCmd gFieldEffectObjectImageAnim_850D37C[] =
+static const union AnimCmd sAnim_TreeDisguise[] =
{
ANIMCMD_FRAME(0, 16),
ANIMCMD_END,
};
-const union AnimCmd gFieldEffectObjectImageAnim_850D384[] =
+static const union AnimCmd sAnim_TreeDisguiseReveal[] =
{
ANIMCMD_FRAME(0, 4),
ANIMCMD_FRAME(1, 4),
@@ -760,15 +967,23 @@ const union AnimCmd gFieldEffectObjectImageAnim_850D384[] =
ANIMCMD_END,
};
-const union AnimCmd *const gFieldEffectObjectImageAnimTable_TreeDisguise[] =
+static const union AnimCmd *const sAnimTable_TreeDisguise[] =
{
- gFieldEffectObjectImageAnim_850D37C,
- gFieldEffectObjectImageAnim_850D384,
+ sAnim_TreeDisguise,
+ sAnim_TreeDisguiseReveal,
};
-const struct SpriteTemplate gFieldEffectObjectTemplate_TreeDisguise = {0xFFFF, 0xFFFF, &gObjectEventBaseOam_16x32, gFieldEffectObjectImageAnimTable_TreeDisguise, gFieldEffectObjectPicTable_TreeDisguise, gDummySpriteAffineAnimTable, UpdateDisguiseFieldEffect};
+const struct SpriteTemplate gFieldEffectObjectTemplate_TreeDisguise = {
+ .tileTag = 0xFFFF,
+ .paletteTag = 0xFFFF,
+ .oam = &gObjectEventBaseOam_16x32,
+ .anims = sAnimTable_TreeDisguise,
+ .images = sPicTable_TreeDisguise,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = UpdateDisguiseFieldEffect,
+};
-const struct SpriteFrameImage gFieldEffectObjectPicTable_MountainDisguise[] = {
+static const struct SpriteFrameImage sPicTable_MountainDisguise[] = {
overworld_frame(gFieldEffectObjectPic_MountainDisguise, 2, 4, 0),
overworld_frame(gFieldEffectObjectPic_MountainDisguise, 2, 4, 1),
overworld_frame(gFieldEffectObjectPic_MountainDisguise, 2, 4, 2),
@@ -778,13 +993,13 @@ const struct SpriteFrameImage gFieldEffectObjectPicTable_MountainDisguise[] = {
overworld_frame(gFieldEffectObjectPic_MountainDisguise, 2, 4, 6),
};
-const union AnimCmd gFieldEffectObjectImageAnim_850D3FC[] =
+static const union AnimCmd sAnim_MountainDisguise[] =
{
ANIMCMD_FRAME(0, 16),
ANIMCMD_END,
};
-const union AnimCmd gFieldEffectObjectImageAnim_850D404[] =
+static const union AnimCmd sAnim_MountainDisguiseReveal[] =
{
ANIMCMD_FRAME(0, 4),
ANIMCMD_FRAME(1, 4),
@@ -796,15 +1011,23 @@ const union AnimCmd gFieldEffectObjectImageAnim_850D404[] =
ANIMCMD_END,
};
-const union AnimCmd *const gFieldEffectObjectImageAnimTable_MountainDisguise[] =
+static const union AnimCmd *const sAnimTable_MountainDisguise[] =
{
- gFieldEffectObjectImageAnim_850D3FC,
- gFieldEffectObjectImageAnim_850D404,
+ sAnim_MountainDisguise,
+ sAnim_MountainDisguiseReveal,
};
-const struct SpriteTemplate gFieldEffectObjectTemplate_MountainDisguise = {0xFFFF, 0xFFFF, &gObjectEventBaseOam_16x32, gFieldEffectObjectImageAnimTable_MountainDisguise, gFieldEffectObjectPicTable_MountainDisguise, gDummySpriteAffineAnimTable, UpdateDisguiseFieldEffect};
+const struct SpriteTemplate gFieldEffectObjectTemplate_MountainDisguise = {
+ .tileTag = 0xFFFF,
+ .paletteTag = 0xFFFF,
+ .oam = &gObjectEventBaseOam_16x32,
+ .anims = sAnimTable_MountainDisguise,
+ .images = sPicTable_MountainDisguise,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = UpdateDisguiseFieldEffect,
+};
-const struct SpriteFrameImage gFieldEffectObjectPicTable_SandDisguisePlaceholder[] = {
+static const struct SpriteFrameImage sPicTable_SandDisguisePlaceholder[] = {
overworld_frame(gFieldEffectObjectPic_SandDisguisePlaceholder, 2, 4, 0),
overworld_frame(gFieldEffectObjectPic_SandDisguisePlaceholder, 2, 4, 1),
overworld_frame(gFieldEffectObjectPic_SandDisguisePlaceholder, 2, 4, 2),
@@ -814,70 +1037,102 @@ const struct SpriteFrameImage gFieldEffectObjectPicTable_SandDisguisePlaceholder
overworld_frame(gFieldEffectObjectPic_SandDisguisePlaceholder, 2, 4, 6),
};
-const struct SpriteTemplate gFieldEffectObjectTemplate_SandDisguisePlaceholder = {0xFFFF, 0xFFFF, &gObjectEventBaseOam_16x32, gFieldEffectObjectImageAnimTable_TreeDisguise, gFieldEffectObjectPicTable_SandDisguisePlaceholder, gDummySpriteAffineAnimTable, UpdateDisguiseFieldEffect};
+const struct SpriteTemplate gFieldEffectObjectTemplate_SandDisguisePlaceholder = {
+ .tileTag = 0xFFFF,
+ .paletteTag = 0xFFFF,
+ .oam = &gObjectEventBaseOam_16x32,
+ .anims = sAnimTable_TreeDisguise,
+ .images = sPicTable_SandDisguisePlaceholder,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = UpdateDisguiseFieldEffect,
+};
-const struct SpriteFrameImage gFieldEffectObjectPicTable_Bird[] = {
+static const struct SpriteFrameImage sPicTable_Bird[] = {
obj_frame_tiles(gFieldEffectObjectPic_Bird),
};
-const union AnimCmd gFieldEffectObjectImageAnim_850D49C[] =
+static const union AnimCmd sAnim_Bird[] =
{
ANIMCMD_FRAME(0, 1),
ANIMCMD_END,
};
-const union AnimCmd *const gFieldEffectObjectImageAnimTable_Bird[] =
+static const union AnimCmd *const sAnimTable_Bird[] =
{
- gFieldEffectObjectImageAnim_850D49C,
+ sAnim_Bird,
};
-const struct SpriteTemplate gFieldEffectObjectTemplate_Bird = {0xFFFF, 0xFFFF, &gObjectEventBaseOam_32x32, gFieldEffectObjectImageAnimTable_Bird, gFieldEffectObjectPicTable_Bird, gDummySpriteAffineAnimTable, SpriteCallbackDummy};
+const struct SpriteTemplate gFieldEffectObjectTemplate_Bird = {
+ .tileTag = 0xFFFF,
+ .paletteTag = 0xFFFF,
+ .oam = &gObjectEventBaseOam_32x32,
+ .anims = sAnimTable_Bird,
+ .images = sPicTable_Bird,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = SpriteCallbackDummy,
+};
-const struct SpriteFrameImage gFieldEffectObjectPicTable_ShortGrass[] = {
+static const struct SpriteFrameImage sPicTable_ShortGrass[] = {
overworld_frame(gFieldEffectObjectPic_ShortGrass, 2, 2, 0),
overworld_frame(gFieldEffectObjectPic_ShortGrass, 2, 2, 1),
};
-const union AnimCmd gFieldEffectObjectImageAnim_850D4D0[] =
+static const union AnimCmd sAnim_ShortGrass[] =
{
ANIMCMD_FRAME(0, 4),
ANIMCMD_FRAME(1, 4),
ANIMCMD_END,
};
-const union AnimCmd *const gFieldEffectObjectImageAnimTable_ShortGrass[] =
+static const union AnimCmd *const sAnimTable_ShortGrass[] =
{
- gFieldEffectObjectImageAnim_850D4D0,
+ sAnim_ShortGrass,
};
-const struct SpriteTemplate gFieldEffectObjectTemplate_ShortGrass = {0xFFFF, 0x1005, &gObjectEventBaseOam_16x16, gFieldEffectObjectImageAnimTable_ShortGrass, gFieldEffectObjectPicTable_ShortGrass, gDummySpriteAffineAnimTable, UpdateShortGrassFieldEffect};
+const struct SpriteTemplate gFieldEffectObjectTemplate_ShortGrass = {
+ .tileTag = 0xFFFF,
+ .paletteTag = FLDEFF_PAL_TAG_GENERAL_1,
+ .oam = &gObjectEventBaseOam_16x16,
+ .anims = sAnimTable_ShortGrass,
+ .images = sPicTable_ShortGrass,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = UpdateShortGrassFieldEffect,
+};
-const struct SpriteFrameImage gFieldEffectObjectPicTable_HotSpringsWater[] = {
+static const struct SpriteFrameImage sPicTable_HotSpringsWater[] = {
obj_frame_tiles(gFieldEffectObjectPic_HotSpringsWater),
};
-const union AnimCmd gFieldEffectObjectImageAnim_850D500[] =
+static const union AnimCmd sAnim_HotSpringsWater[] =
{
ANIMCMD_FRAME(0, 4),
ANIMCMD_END,
};
-const union AnimCmd *const gFieldEffectObjectImageAnimTable_HotSpringsWater[] =
+static const union AnimCmd *const sAnimTable_HotSpringsWater[] =
{
- gFieldEffectObjectImageAnim_850D500,
+ sAnim_HotSpringsWater,
};
-const struct SpriteTemplate gFieldEffectObjectTemplate_HotSpringsWater = {0xFFFF, 0x1005, &gObjectEventBaseOam_16x16, gFieldEffectObjectImageAnimTable_HotSpringsWater, gFieldEffectObjectPicTable_HotSpringsWater, gDummySpriteAffineAnimTable, UpdateHotSpringsWaterFieldEffect};
+const struct SpriteTemplate gFieldEffectObjectTemplate_HotSpringsWater = {
+ .tileTag = 0xFFFF,
+ .paletteTag = FLDEFF_PAL_TAG_GENERAL_1,
+ .oam = &gObjectEventBaseOam_16x16,
+ .anims = sAnimTable_HotSpringsWater,
+ .images = sPicTable_HotSpringsWater,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = UpdateHotSpringsWaterFieldEffect,
+};
-const struct SpriteFrameImage gFieldEffectObjectPicTable_JumpOutOfAsh[] = {
- overworld_frame(gFieldEffectObjectPic_JumpOutOfAsh, 2, 2, 0),
- overworld_frame(gFieldEffectObjectPic_JumpOutOfAsh, 2, 2, 1),
- overworld_frame(gFieldEffectObjectPic_JumpOutOfAsh, 2, 2, 2),
- overworld_frame(gFieldEffectObjectPic_JumpOutOfAsh, 2, 2, 3),
- overworld_frame(gFieldEffectObjectPic_JumpOutOfAsh, 2, 2, 4),
+static const struct SpriteFrameImage sPicTable_AshPuff[] = {
+ overworld_frame(gFieldEffectObjectPic_AshPuff, 2, 2, 0),
+ overworld_frame(gFieldEffectObjectPic_AshPuff, 2, 2, 1),
+ overworld_frame(gFieldEffectObjectPic_AshPuff, 2, 2, 2),
+ overworld_frame(gFieldEffectObjectPic_AshPuff, 2, 2, 3),
+ overworld_frame(gFieldEffectObjectPic_AshPuff, 2, 2, 4),
};
-const union AnimCmd gFieldEffectObjectImageAnim_850D54C[] =
+static const union AnimCmd sAnim_AshPuff[] =
{
ANIMCMD_FRAME(0, 6),
ANIMCMD_FRAME(1, 6),
@@ -887,33 +1142,33 @@ const union AnimCmd gFieldEffectObjectImageAnim_850D54C[] =
ANIMCMD_END,
};
-const union AnimCmd *const gFieldEffectObjectImageAnimTable_JumpOutOfAsh[] =
+static const union AnimCmd *const sAnimTable_AshPuff[] =
{
- gFieldEffectObjectImageAnim_850D54C,
+ sAnim_AshPuff,
};
-const struct SpriteTemplate gFieldEffectObjectTemplate_JumpOutOfAsh =
+const struct SpriteTemplate gFieldEffectObjectTemplate_AshPuff =
{
.tileTag = 0xFFFF,
- .paletteTag = 0x100D,
+ .paletteTag = FLDEFF_PAL_TAG_ASH,
.oam = &gObjectEventBaseOam_16x16,
- .anims = gFieldEffectObjectImageAnimTable_JumpOutOfAsh,
- .images = gFieldEffectObjectPicTable_JumpOutOfAsh,
+ .anims = sAnimTable_AshPuff,
+ .images = sPicTable_AshPuff,
.affineAnims = gDummySpriteAffineAnimTable,
- .callback = SpriteCB_PopOutOfAsh
+ .callback = SpriteCB_AshPuff
};
-const struct SpritePalette gFieldEffectObjectPaletteInfo2 = {gFieldEffectObjectPalette2, 0x100D};
+const struct SpritePalette gSpritePalette_Ash = {gFieldEffectPal_Ash, FLDEFF_PAL_TAG_ASH};
-const struct SpriteFrameImage gFieldEffectObjectPicTable_LavaridgeGymWarp[] = {
- overworld_frame(gFieldEffectObjectPic_LavaridgeGymWarp, 2, 2, 0),
- overworld_frame(gFieldEffectObjectPic_LavaridgeGymWarp, 2, 2, 1),
- overworld_frame(gFieldEffectObjectPic_LavaridgeGymWarp, 2, 2, 2),
- overworld_frame(gFieldEffectObjectPic_LavaridgeGymWarp, 2, 2, 3),
- overworld_frame(gFieldEffectObjectPic_LavaridgeGymWarp, 2, 2, 4),
+static const struct SpriteFrameImage sPicTable_AshLaunch[] = {
+ overworld_frame(gFieldEffectObjectPic_AshLaunch, 2, 2, 0),
+ overworld_frame(gFieldEffectObjectPic_AshLaunch, 2, 2, 1),
+ overworld_frame(gFieldEffectObjectPic_AshLaunch, 2, 2, 2),
+ overworld_frame(gFieldEffectObjectPic_AshLaunch, 2, 2, 3),
+ overworld_frame(gFieldEffectObjectPic_AshLaunch, 2, 2, 4),
};
-const union AnimCmd gFieldEffectObjectImageAnim_LavaridgeGymWarp[] =
+static const union AnimCmd sAnim_AshLaunch[] =
{
ANIMCMD_FRAME(0, 6),
ANIMCMD_FRAME(1, 6),
@@ -923,23 +1178,23 @@ const union AnimCmd gFieldEffectObjectImageAnim_LavaridgeGymWarp[] =
ANIMCMD_END,
};
-const union AnimCmd *const gFieldEffectObjectImageAnimTable_LavaridgeGymWarp[] =
+static const union AnimCmd *const sAnimTable_AshLaunch[] =
{
- gFieldEffectObjectImageAnim_LavaridgeGymWarp,
+ sAnim_AshLaunch,
};
-const struct SpriteTemplate gFieldEffectObjectTemplate_LavaridgeGymWarp =
+const struct SpriteTemplate gFieldEffectObjectTemplate_AshLaunch =
{
.tileTag = 0xFFFF,
- .paletteTag = 0x100D,
+ .paletteTag = FLDEFF_PAL_TAG_ASH,
.oam = &gObjectEventBaseOam_16x16,
- .anims = gFieldEffectObjectImageAnimTable_LavaridgeGymWarp,
- .images = gFieldEffectObjectPicTable_LavaridgeGymWarp,
+ .anims = sAnimTable_AshLaunch,
+ .images = sPicTable_AshLaunch,
.affineAnims = gDummySpriteAffineAnimTable,
- .callback = SpriteCB_LavaridgeGymWarp
+ .callback = SpriteCB_AshLaunch
};
-const struct SpriteFrameImage gFieldEffectObjectPicTable_Bubbles[] = {
+static const struct SpriteFrameImage sPicTable_Bubbles[] = {
overworld_frame(gFieldEffectObjectPic_Bubbles, 2, 4, 0),
overworld_frame(gFieldEffectObjectPic_Bubbles, 2, 4, 1),
overworld_frame(gFieldEffectObjectPic_Bubbles, 2, 4, 2),
@@ -950,7 +1205,7 @@ const struct SpriteFrameImage gFieldEffectObjectPicTable_Bubbles[] = {
overworld_frame(gFieldEffectObjectPic_Bubbles, 2, 4, 7),
};
-const union AnimCmd gFieldEffectObjectImageAnim_850D624[] =
+static const union AnimCmd sAnim_Bubbles[] =
{
ANIMCMD_FRAME(0, 4),
ANIMCMD_FRAME(1, 4),
@@ -963,19 +1218,27 @@ const union AnimCmd gFieldEffectObjectImageAnim_850D624[] =
ANIMCMD_END,
};
-const union AnimCmd *const gFieldEffectObjectImageAnimTable_Bubbles[] =
+static const union AnimCmd *const sAnimTable_Bubbles[] =
{
- gFieldEffectObjectImageAnim_850D624,
+ sAnim_Bubbles,
};
-const struct SpriteTemplate gFieldEffectObjectTemplate_Bubbles = {0xFFFF, 0x1004, &gObjectEventBaseOam_16x32, gFieldEffectObjectImageAnimTable_Bubbles, gFieldEffectObjectPicTable_Bubbles, gDummySpriteAffineAnimTable, UpdateBubblesFieldEffect};
+const struct SpriteTemplate gFieldEffectObjectTemplate_Bubbles = {
+ .tileTag = 0xFFFF,
+ .paletteTag = FLDEFF_PAL_TAG_GENERAL_0,
+ .oam = &gObjectEventBaseOam_16x32,
+ .anims = sAnimTable_Bubbles,
+ .images = sPicTable_Bubbles,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = UpdateBubblesFieldEffect,
+};
-const struct SpriteFrameImage gFieldEffectObjectPicTable_Unknown35[] = {
- overworld_frame(gFieldEffectObjectPic_Unknown35, 2, 2, 0),
- overworld_frame(gFieldEffectObjectPic_Unknown35, 2, 2, 1),
+static const struct SpriteFrameImage sPicTable_SmallSparkle[] = {
+ overworld_frame(gFieldEffectObjectPic_SmallSparkle, 2, 2, 0),
+ overworld_frame(gFieldEffectObjectPic_SmallSparkle, 2, 2, 1),
};
-const union AnimCmd gFieldEffectObjectImageAnim_850D674[] =
+static const union AnimCmd sAnim_SmallSparkle[] =
{
ANIMCMD_FRAME(0, 3),
ANIMCMD_FRAME(1, 5),
@@ -983,28 +1246,44 @@ const union AnimCmd gFieldEffectObjectImageAnim_850D674[] =
ANIMCMD_END,
};
-const union AnimCmd *const gFieldEffectObjectImageAnimTable_Unknown35[] =
+static const union AnimCmd *const sAnimTable_SmallSparkle[] =
{
- gFieldEffectObjectImageAnim_850D674,
+ sAnim_SmallSparkle,
};
-const struct SpriteTemplate gFieldEffectObjectTemplate_Unknown35 = {0xFFFF, 0x100F, &gObjectEventBaseOam_16x16, gFieldEffectObjectImageAnimTable_Unknown35, gFieldEffectObjectPicTable_Unknown35, gDummySpriteAffineAnimTable, UpdateSparkleFieldEffect};
+const struct SpriteTemplate gFieldEffectObjectTemplate_SmallSparkle = {
+ .tileTag = 0xFFFF,
+ .paletteTag = FLDEFF_PAL_TAG_SMALL_SPARKLE,
+ .oam = &gObjectEventBaseOam_16x16,
+ .anims = sAnimTable_SmallSparkle,
+ .images = sPicTable_SmallSparkle,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = UpdateSparkleFieldEffect,
+};
-const struct SpritePalette gFieldEffectObjectPaletteInfo3 = {gFieldEffectObjectPalette3, 0x100F};
+const struct SpritePalette gSpritePalette_SmallSparkle = {gFieldEffectPal_SmallSparkle, FLDEFF_PAL_TAG_SMALL_SPARKLE};
-const union AnimCmd gFieldEffectObjectImageAnim_850D6A8[] = {
+static const union AnimCmd sAnim_Rayquaza[] = {
ANIMCMD_FRAME(0, 1),
ANIMCMD_END,
};
-const union AnimCmd *const gFieldEffectObjectImageAnimTable_Rayquaza[] = {
- gFieldEffectObjectImageAnim_850D6A8,
+static const union AnimCmd *const sAnimTable_Rayquaza[] = {
+ sAnim_Rayquaza,
};
-const struct SpriteFrameImage gFieldEffectObjectPicTable_Rayquaza[] = {
+const struct SpriteFrameImage sPicTable_Rayquaza[] = {
overworld_frame(gObjectEventPic_Rayquaza, 4, 4, 0),
};
-const struct SpriteTemplate gFieldEffectObjectTemplate_Rayquaza = {0xFFFF, 0xFFFF, &gObjectEventBaseOam_32x32, gFieldEffectObjectImageAnimTable_Rayquaza, gFieldEffectObjectPicTable_Rayquaza, gDummySpriteAffineAnimTable, sub_8155F80};
+const struct SpriteTemplate gFieldEffectObjectTemplate_Rayquaza = {
+ .tileTag = 0xFFFF,
+ .paletteTag = 0xFFFF,
+ .oam = &gObjectEventBaseOam_32x32,
+ .anims = sAnimTable_Rayquaza,
+ .images = sPicTable_Rayquaza,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = UpdateRayquazaSpotlightEffect,
+};
-const struct SpritePalette gFieldEffectObjectPaletteInfoUnused = {gObjectEventPalette2, 0x1011};
+static const struct SpritePalette sSpritePalette_Unused = {gObjectEventPalette2, FLDEFF_PAL_TAG_UNKNOWN};
diff --git a/src/data/graphics/pokemon.h b/src/data/graphics/pokemon.h
index fd4d8b95d..bce0b7a21 100644
--- a/src/data/graphics/pokemon.h
+++ b/src/data/graphics/pokemon.h
@@ -2698,7 +2698,8 @@ const u8 gMonIcon_Deoxys[] = INCBIN_U8("graphics/pokemon/deoxys/icon.4bpp");
const u8 gMonIcon_DeoxysSpeed[] = INCBIN_U8("graphics/pokemon/deoxys/icon_speed.4bpp");
const u8 gMonIcon_DeoxysSpeedWide[] = INCBIN_U8("graphics/unused/deoxys_speed_icon_wide.4bpp");
-asm(".space 0x6800");
+// Probably the leftover space from the other Deoxys forms
+static const u8 sEmpty[0x6800] = {0};
const u16 gUnknown_D437F8[] = INCBIN_U16("graphics/unknown/unknown_D437F8.bin");
diff --git a/src/data/graphics/rayquaza_scene.h b/src/data/graphics/rayquaza_scene.h
index d0269980c..633213db8 100644
--- a/src/data/graphics/rayquaza_scene.h
+++ b/src/data/graphics/rayquaza_scene.h
@@ -1,73 +1,62 @@
-const u32 gRaySceneGroudon_Gfx[] = INCBIN_U32("graphics/rayquaza_scene/groudon.4bpp.lz");
-const u32 gRaySceneGroudon2_Gfx[] = INCBIN_U32("graphics/rayquaza_scene/groudon_shoulder.4bpp.lz");
-const u32 gRaySceneGroudon3_Gfx[] = INCBIN_U32("graphics/rayquaza_scene/groudon_claw.4bpp.lz");
-
-const u32 gRaySceneKyogre_Gfx[] = INCBIN_U32("graphics/rayquaza_scene/kyogre.4bpp.lz");
-const u32 gRaySceneKyogre2_Gfx[] = INCBIN_U32("graphics/rayquaza_scene/kyogre_shoulder.4bpp.lz");
-const u32 gRaySceneKyogre3_Gfx[] = INCBIN_U32("graphics/rayquaza_scene/kyogre_fin.4bpp.lz");
-
-const u32 gRaySceneGroudon_Pal[] = INCBIN_U32("graphics/rayquaza_scene/groudon.gbapal.lz");
-const u32 gRaySceneKyogre_Pal[] = INCBIN_U32("graphics/rayquaza_scene/kyogre.gbapal.lz");
-
-const u32 gRaySceneClouds_Gfx[] = INCBIN_U32("graphics/rayquaza_scene/clouds.4bpp.lz");
-const u32 gRaySceneClouds_Pal[] = INCBIN_U32("graphics/rayquaza_scene/clouds.gbapal.lz"); // pal 1 clouds, pal 2 rain
-const u32 gRaySceneClouds1_Tilemap[] = INCBIN_U32("graphics/rayquaza_scene/clouds1.bin.lz");
-const u32 gRaySceneClouds2_Tilemap[] = INCBIN_U32("graphics/rayquaza_scene/clouds2.bin.lz");
-const u32 gRaySceneClouds3_Tilemap[] = INCBIN_U32("graphics/rayquaza_scene/clouds3.bin.lz");
-
-const u32 gRaySceneSmoke_Gfx[] = INCBIN_U32("graphics/rayquaza_scene/smoke.4bpp.lz");
-const u32 gRaySceneSmoke_Pal[] = INCBIN_U32("graphics/rayquaza_scene/smoke.gbapal.lz");
-
-const u32 gRaySceneRayquaza_Gfx[] = INCBIN_U32("graphics/rayquaza_scene/rayquaza.8bpp.lz");
-const u32 gRaySceneRayquaza_Pal[] = INCBIN_U32("graphics/rayquaza_scene/rayquaza.gbapal.lz");
-const u32 gRaySceneRayquaza_Tilemap[] = INCBIN_U32("graphics/rayquaza_scene/rayquaza.bin.lz");
-
-const u32 gRaySceneOvercast_Gfx[] = INCBIN_U32("graphics/rayquaza_scene/overcast.4bpp.lz"); // uses pal 2 of gRaySceneRayquaza_Pal
-const u32 gRaySceneOvercast_Tilemap[] = INCBIN_U32("graphics/rayquaza_scene/overcast.bin.lz");
-
-const u32 gRaySceneRayquazaFly1_Gfx[] = INCBIN_U32("graphics/rayquaza_scene/rayquaza_fly1.4bpp.lz");
-const u32 gRaySceneRayquazaTail_Gfx[] = INCBIN_U32( "graphics/rayquaza_scene/rayquaza_tail_fix.4bpp.lz"); // for some reason there are an extra 0xC bytes at the end of the original 4bpp, so in order to produce the correct lz, we have to cat the bytes at the end with a make rule. not sure why those bytes are there, it may have been a bug in Game Freak's software.
-
-const u32 gRaySceneOvercast2_Gfx[] = INCBIN_U32("graphics/rayquaza_scene/overcast2.4bpp.lz");
-
-const u32 gRaySceneRayquazaLight_Gfx[] = INCBIN_U32("graphics/rayquaza_scene/rayquaza_light.4bpp.lz"); // uses pal 2 of gRaySceneOvercast2_Pal
-
-const u32 gRaySceneOvercast2_Pal[] = INCBIN_U32("graphics/rayquaza_scene/overcast2.gbapal.lz");
-const u32 gRaySceneOvercast2_Tilemap[] = INCBIN_U32("graphics/rayquaza_scene/overcast2.bin.lz");
-
-const u32 gRaySceneRayquazaLight_Tilemap[] = INCBIN_U32("graphics/rayquaza_scene/rayquaza_light.bin.lz");
-
-const u32 gRaySceneChaseBg_Gfx[] = INCBIN_U32("graphics/rayquaza_scene/chase_bg.4bpp.lz");
-const u32 gRaySceneChaseBg_Tilemap[] = INCBIN_U32("graphics/rayquaza_scene/chase_bg.bin.lz");
-
-const u32 gRaySceneChaseStreaks_Gfx[] = INCBIN_U32("graphics/rayquaza_scene/chase_streaks.4bpp.lz");
-const u32 gRaySceneChaseStreaks_Tilemap[] = INCBIN_U32("graphics/rayquaza_scene/chase_streaks.bin.lz");
-
-const u32 gRaySceneRayquazaChase_Gfx[] = INCBIN_U32("graphics/rayquaza_scene/rayquaza_chase.4bpp.lz");
-const u32 gRayChaseRayquazaChase_Tilemap[] = INCBIN_U32("graphics/rayquaza_scene/rayquaza_chase.bin.lz");
-const u32 gRayChaseRayquazaChase2_Tilemap[] = INCBIN_U32("graphics/rayquaza_scene/rayquaza_chase2.bin.lz");
-
-const u32 gRaySceneChase_Pal[] = INCBIN_U32("graphics/rayquaza_scene/chase.gbapal.lz");
-
-const u32 gRaySceneGroudonLeft_Gfx[] = INCBIN_U32("graphics/rayquaza_scene/groudon_left.4bpp.lz");
-const u32 gRaySceneGroudonTail_Gfx[] = INCBIN_U32("graphics/rayquaza_scene/groudon_tail.4bpp.lz");
-
-const u32 gRaySceneKyogreRight_Gfx[] = INCBIN_U32("graphics/rayquaza_scene/kyogre_right.4bpp.lz");
-
-const u32 gRaySceneRayquazaHover_Gfx[] = INCBIN_U32("graphics/rayquaza_scene/rayquaza_hover.4bpp.lz");
-const u32 gRaySceneRayquazaFlyIn_Gfx[] = INCBIN_U32("graphics/rayquaza_scene/rayquaza_flyin.4bpp.lz");
-
-const u32 gRaySceneSplash_Gfx[] = INCBIN_U32("graphics/rayquaza_scene/splash.4bpp.lz");
-
-const u32 gRaySceneGroudonLeft_Pal[] = INCBIN_U32("graphics/rayquaza_scene/groudon_left.gbapal.lz");
-const u32 gRaySceneKyogreRight_Pal[] = INCBIN_U32("graphics/rayquaza_scene/kyogre_right.gbapal.lz");
-const u32 gRaySceneRayquazaHover_Pal[] = INCBIN_U32("graphics/rayquaza_scene/rayquaza_hover.gbapal.lz");
-
-const u32 gRaySceneSplash_Pal[] = INCBIN_U32("graphics/rayquaza_scene/splash.gbapal.lz");
-
-const u32 gRaySceneHushBg_Gfx[] = INCBIN_U32("graphics/rayquaza_scene/hush_bg.4bpp.lz");
-const u32 gRaySceneHushRing_Gfx[] = INCBIN_U32("graphics/rayquaza_scene/hush_ring.8bpp.lz");
-const u32 gRaySceneHushBg_Tilemap[] = INCBIN_U32("graphics/rayquaza_scene/hush_bg.bin.lz");
-const u32 gRaySceneHushRing_Tilemap[] = INCBIN_U32("graphics/rayquaza_scene/hush_ring.bin.lz");
-const u32 gRaySceneHushRing_Map[] = INCBIN_U32("graphics/rayquaza_scene/hush_ring_map.bin.lz");
-const u32 gRaySceneHushBg_Pal[] = INCBIN_U32("graphics/rayquaza_scene/hush_bg.gbapal.lz");
+// Scene 1 (RAY_ANIM_DUO_FIGHT / RAY_ANIM_DUO_FIGHT_PRE)
+const u32 gRaySceneDuoFight_Groudon_Gfx[] = INCBIN_U32("graphics/rayquaza_scene/scene_1/groudon.4bpp.lz");
+const u32 gRaySceneDuoFight_GroudonShoulder_Gfx[] = INCBIN_U32("graphics/rayquaza_scene/scene_1/groudon_shoulder.4bpp.lz");
+const u32 gRaySceneDuoFight_GroudonClaw_Gfx[] = INCBIN_U32("graphics/rayquaza_scene/scene_1/groudon_claw.4bpp.lz");
+const u32 gRaySceneDuoFight_Kyogre_Gfx[] = INCBIN_U32("graphics/rayquaza_scene/scene_1/kyogre.4bpp.lz");
+const u32 gRaySceneDuoFight_KyogrePectoralFin_Gfx[] = INCBIN_U32("graphics/rayquaza_scene/scene_1/kyogre_pectoral_fin.4bpp.lz");
+const u32 gRaySceneDuoFight_KyogreDorsalFin_Gfx[] = INCBIN_U32("graphics/rayquaza_scene/scene_1/kyogre_dorsal_fin.4bpp.lz");
+const u32 gRaySceneDuoFight_Groudon_Pal[] = INCBIN_U32("graphics/rayquaza_scene/scene_1/groudon.gbapal.lz");
+const u32 gRaySceneDuoFight_Kyogre_Pal[] = INCBIN_U32("graphics/rayquaza_scene/scene_1/kyogre.gbapal.lz");
+const u32 gRaySceneDuoFight_Clouds_Gfx[] = INCBIN_U32("graphics/rayquaza_scene/scene_1/clouds.4bpp.lz");
+const u32 gRaySceneDuoFight_Clouds_Pal[] = INCBIN_U32("graphics/rayquaza_scene/scene_1/clouds.gbapal.lz"); // pal 1 clouds, pal 2 rain
+const u32 gRaySceneDuoFight_Clouds1_Tilemap[] = INCBIN_U32("graphics/rayquaza_scene/scene_1/clouds1.bin.lz");
+const u32 gRaySceneDuoFight_Clouds2_Tilemap[] = INCBIN_U32("graphics/rayquaza_scene/scene_1/clouds2.bin.lz");
+const u32 gRaySceneDuoFight_Clouds3_Tilemap[] = INCBIN_U32("graphics/rayquaza_scene/scene_1/clouds3.bin.lz");
+
+// Scene 2 (RAY_ANIM_TAKES_FLIGHT)
+const u32 gRaySceneTakesFlight_Smoke_Gfx[] = INCBIN_U32("graphics/rayquaza_scene/scene_2/smoke.4bpp.lz");
+const u32 gRaySceneTakesFlight_Smoke_Pal[] = INCBIN_U32("graphics/rayquaza_scene/scene_2/smoke.gbapal.lz");
+const u32 gRaySceneTakesFlight_Rayquaza_Gfx[] = INCBIN_U32("graphics/rayquaza_scene/scene_2/rayquaza.8bpp.lz");
+const u32 gRaySceneTakesFlight_Rayquaza_Pal[] = INCBIN_U32("graphics/rayquaza_scene/scene_2/rayquaza.gbapal.lz");
+const u32 gRaySceneTakesFlight_Rayquaza_Tilemap[] = INCBIN_U32("graphics/rayquaza_scene/scene_2/rayquaza.bin.lz");
+const u32 gRaySceneTakesFlight_Bg_Gfx[] = INCBIN_U32("graphics/rayquaza_scene/scene_2/bg.4bpp.lz"); // uses pal 2 of gRaySceneTakesFlight_Rayquaza_Pal
+const u32 gRaySceneTakesFlight_Bg_Tilemap[] = INCBIN_U32("graphics/rayquaza_scene/scene_2/bg.bin.lz");
+
+// Scene 3 (RAY_ANIM_DESCENDS)
+const u32 gRaySceneDescends_Rayquaza_Gfx[] = INCBIN_U32("graphics/rayquaza_scene/scene_3/rayquaza.4bpp.lz");
+// for some reason there are an extra 0xC bytes at the end of the original rayquaza_tail.4bpp, so in order to produce the correct lz,
+// we have to cat the bytes at the end with a make rule. not sure why those bytes are there, it may have been a bug in Game Freak's software.
+const u32 gRaySceneDescends_RayquazaTail_Gfx[] = INCBIN_U32("graphics/rayquaza_scene/scene_3/rayquaza_tail_fix.4bpp.lz");
+const u32 gRaySceneDescends_Bg_Gfx[] = INCBIN_U32("graphics/rayquaza_scene/scene_3/bg.4bpp.lz");
+const u32 gRaySceneDescends_Light_Gfx[] = INCBIN_U32("graphics/rayquaza_scene/scene_3/light.4bpp.lz"); // uses pal 2 of gRaySceneDescends_Bg_Pal
+const u32 gRaySceneDescends_Bg_Pal[] = INCBIN_U32("graphics/rayquaza_scene/scene_3/bg.gbapal.lz");
+const u32 gRaySceneDescends_Bg_Tilemap[] = INCBIN_U32("graphics/rayquaza_scene/scene_3/bg.bin.lz");
+const u32 gRaySceneDescends_Light_Tilemap[] = INCBIN_U32("graphics/rayquaza_scene/scene_3/light.bin.lz");
+
+// Scene 4 (RAY_ANIM_CHARGES)
+const u32 gRaySceneCharges_Bg_Gfx[] = INCBIN_U32("graphics/rayquaza_scene/scene_4/bg.4bpp.lz");
+const u32 gRaySceneCharges_Bg_Tilemap[] = INCBIN_U32("graphics/rayquaza_scene/scene_4/bg.bin.lz");
+const u32 gRaySceneCharges_Streaks_Gfx[] = INCBIN_U32("graphics/rayquaza_scene/scene_4/streaks.4bpp.lz");
+const u32 gRaySceneCharges_Streaks_Tilemap[] = INCBIN_U32("graphics/rayquaza_scene/scene_4/streaks.bin.lz");
+const u32 gRaySceneCharges_Rayquaza_Gfx[] = INCBIN_U32("graphics/rayquaza_scene/scene_4/rayquaza.4bpp.lz");
+const u32 gRaySceneCharges_Rayquaza_Tilemap[] = INCBIN_U32("graphics/rayquaza_scene/scene_4/rayquaza.bin.lz");
+const u32 gRaySceneCharges_Orbs_Tilemap[] = INCBIN_U32("graphics/rayquaza_scene/scene_4/orbs.bin.lz");
+const u32 gRaySceneCharges_Bg_Pal[] = INCBIN_U32("graphics/rayquaza_scene/scene_4/bg.gbapal.lz");
+
+// Scene 5 (RAY_ANIM_CHASES_AWAY)
+const u32 gRaySceneChasesAway_Groudon_Gfx[] = INCBIN_U32("graphics/rayquaza_scene/scene_5/groudon.4bpp.lz");
+const u32 gRaySceneChasesAway_GroudonTail_Gfx[] = INCBIN_U32("graphics/rayquaza_scene/scene_5/groudon_tail.4bpp.lz");
+const u32 gRaySceneChasesAway_Kyogre_Gfx[] = INCBIN_U32("graphics/rayquaza_scene/scene_5/kyogre.4bpp.lz");
+const u32 gRaySceneChasesAway_Rayquaza_Gfx[] = INCBIN_U32("graphics/rayquaza_scene/scene_5/rayquaza.4bpp.lz");
+const u32 gRaySceneChasesAway_RayquazaTail_Gfx[] = INCBIN_U32("graphics/rayquaza_scene/scene_5/rayquaza_tail.4bpp.lz");
+const u32 gRaySceneChasesAway_KyogreSplash_Gfx[] = INCBIN_U32("graphics/rayquaza_scene/scene_5/kyogre_splash.4bpp.lz");
+const u32 gRaySceneChasesAway_Groudon_Pal[] = INCBIN_U32("graphics/rayquaza_scene/scene_5/groudon.gbapal.lz");
+const u32 gRaySceneChasesAway_Kyogre_Pal[] = INCBIN_U32("graphics/rayquaza_scene/scene_5/kyogre.gbapal.lz");
+const u32 gRaySceneChasesAway_Rayquaza_Pal[] = INCBIN_U32("graphics/rayquaza_scene/scene_5/rayquaza.gbapal.lz");
+const u32 gRaySceneChasesAway_KyogreSplash_Pal[] = INCBIN_U32("graphics/rayquaza_scene/scene_5/kyogre_splash.gbapal.lz");
+const u32 gRaySceneChasesAway_Light_Gfx[] = INCBIN_U32("graphics/rayquaza_scene/scene_5/light.4bpp.lz");
+const u32 gRaySceneChasesAway_Ring_Gfx[] = INCBIN_U32("graphics/rayquaza_scene/scene_5/ring.8bpp.lz");
+const u32 gRaySceneChasesAway_Light_Tilemap[] = INCBIN_U32("graphics/rayquaza_scene/scene_5/light.bin.lz");
+const u32 gRaySceneChasesAway_Bg_Tilemap[] = INCBIN_U32("graphics/rayquaza_scene/scene_5/bg.bin.lz");
+const u32 gRaySceneChasesAway_Ring_Tilemap[] = INCBIN_U32("graphics/rayquaza_scene/scene_5/ring.bin.lz");
+const u32 gRaySceneChasesAway_Bg_Pal[] = INCBIN_U32("graphics/rayquaza_scene/scene_5/bg.gbapal.lz");
diff --git a/src/data/graphics/slot_machine.h b/src/data/graphics/slot_machine.h
index a94f2b622..6500ad7f3 100644
--- a/src/data/graphics/slot_machine.h
+++ b/src/data/graphics/slot_machine.h
@@ -2,21 +2,15 @@ const u16 gSlotMachineMenu_Pal[] = INCBIN_U16("graphics/slot_machine/menu.gbapal
const u32 gSlotMachineMenu_Gfx[] = INCBIN_U32("graphics/slot_machine/menu.4bpp.lz");
const u16 gSlotMachineMenu_Tilemap[] = INCBIN_U16("graphics/slot_machine/menu.bin");
-const u16 gUnknown_08DCEC70[] = INCBIN_U16("graphics/slot_machine/slots_layout.bin");
+const u16 gSlotMachineInfoBox_Tilemap[] = INCBIN_U16("graphics/slot_machine/info_box.bin");
-const u16 gUnknown_08DCF170[] = INCBIN_U16("graphics/slot_machine/reel_symbols/1.gbapal");
-
-const u16 gUnknown_08DCF190[] = INCBIN_U16("graphics/slot_machine/reel_pikachu.gbapal");
-
-const u16 gUnknown_08DCF1B0[] = INCBIN_U16("graphics/slot_machine/shadow.gbapal");
-
-const u16 gSlotMachineReelTime_Pal[] = INCBIN_U16("graphics/slot_machine/reel_time.gbapal");
-
-const u16 gUnknown_08DCF1F0[] = INCBIN_U16("graphics/slot_machine/smoke.gbapal"); // also duck and pika aura
-
-const u16 gUnknown_08DCF210[] = INCBIN_U16("graphics/slot_machine/reel_time_explosion/0.gbapal");
-
-const u16 gUnknown_08DCF230[] = INCBIN_U16("graphics/slot_machine/spr6.gbapal");
+const u16 gSlotMachineReelSymbols_Pal[] = INCBIN_U16("graphics/slot_machine/reel_symbols/1.gbapal");
+const u16 gSlotMachineReelTimePikachu_Pal[] = INCBIN_U16("graphics/slot_machine/reel_time_pikachu.gbapal");
+const u16 gSlotMachineReelTimeMisc_Pal[] = INCBIN_U16("graphics/slot_machine/shadow.gbapal");
+const u16 gSlotMachineReelTimeMachine_Pal[] = INCBIN_U16("graphics/slot_machine/reel_time_machine.gbapal");
+const u16 gSlotMachineMisc_Pal[] = INCBIN_U16("graphics/slot_machine/smoke.gbapal");
+const u16 gSlotMachineReelTimeExplosion_Pal[] = INCBIN_U16("graphics/slot_machine/reel_time_explosion/0.gbapal");
+const u16 gSlotMachineDigitalDisplay_Pal[] = INCBIN_U16("graphics/slot_machine/digital_display.gbapal");
const u8 gSlotMachineReelSymbol1Tiles[] = INCBIN_U8("graphics/slot_machine/reel_symbols/1.4bpp");
const u8 gSlotMachineReelSymbol2Tiles[] = INCBIN_U8("graphics/slot_machine/reel_symbols/2.4bpp");
@@ -26,7 +20,7 @@ const u8 gSlotMachineReelSymbol5Tiles[] = INCBIN_U8("graphics/slot_machine/reel_
const u8 gSlotMachineReelSymbol6Tiles[] = INCBIN_U8("graphics/slot_machine/reel_symbols/6.4bpp");
const u8 gSlotMachineReelSymbol7Tiles[] = INCBIN_U8("graphics/slot_machine/reel_symbols/7.4bpp");
-const u32 gSlotMachineReelTime_Gfx[] = INCBIN_U32("graphics/slot_machine/reel_time.4bpp.lz");
+const u32 gSlotMachineDigitalDisplay_Gfx[] = INCBIN_U32("graphics/slot_machine/digital_display.4bpp.lz");
const u8 gSlotMachineNumber0Tiles[] = INCBIN_U8("graphics/slot_machine/numbers/0.4bpp");
const u8 gSlotMachineNumber1Tiles[] = INCBIN_U8("graphics/slot_machine/numbers/1.4bpp");
@@ -39,7 +33,7 @@ const u8 gSlotMachineNumber7Tiles[] = INCBIN_U8("graphics/slot_machine/numbers/7
const u8 gSlotMachineNumber8Tiles[] = INCBIN_U8("graphics/slot_machine/numbers/8.4bpp");
const u8 gSlotMachineNumber9Tiles[] = INCBIN_U8("graphics/slot_machine/numbers/9.4bpp");
-const u8 gSlotMachineReelTimeBolt[] = INCBIN_U8("graphics/slot_machine/bolt.4bpp");
+const u8 gSlotMachinePikaPowerBolt[] = INCBIN_U8("graphics/slot_machine/bolt.4bpp");
const u8 gSlotMachineReelTimeDuck[] = INCBIN_U8("graphics/slot_machine/duck.4bpp");
const u8 gSlotMachineReelTimeSmoke[] = INCBIN_U8("graphics/slot_machine/smoke.4bpp");
@@ -50,8 +44,8 @@ const u8 gSlotMachineReelTimeNumber3[] = INCBIN_U8("graphics/slot_machine/reel_t
const u8 gSlotMachineReelTimeNumber4[] = INCBIN_U8("graphics/slot_machine/reel_time_numbers/4.4bpp");
const u8 gSlotMachineReelTimeNumber5[] = INCBIN_U8("graphics/slot_machine/reel_time_numbers/5.4bpp");
-const u8 gSlotMachineReelTimeLargeBolt0[] = INCBIN_U8("graphics/slot_machine/large_bolt/0.4bpp");
-const u8 gSlotMachineReelTimeLargeBolt1[] = INCBIN_U8("graphics/slot_machine/large_bolt/1.4bpp");
+const u8 gSlotMachineReelTimeBolt0[] = INCBIN_U8("graphics/slot_machine/large_bolt/0.4bpp");
+const u8 gSlotMachineReelTimeBolt1[] = INCBIN_U8("graphics/slot_machine/large_bolt/1.4bpp");
const u8 gSlotMachineReelTimeExplosion0[] = INCBIN_U8("graphics/slot_machine/reel_time_explosion/0.4bpp");
const u8 gSlotMachineReelTimeExplosion1[] = INCBIN_U8("graphics/slot_machine/reel_time_explosion/1.4bpp");
@@ -59,5 +53,5 @@ const u8 gSlotMachineReelTimeExplosion1[] = INCBIN_U8("graphics/slot_machine/ree
const u8 gSlotMachineReelTimeShadow[] = INCBIN_U8("graphics/slot_machine/shadow.4bpp");
const u8 gSlotMachineReelTimePikaAura[] = INCBIN_U8("graphics/slot_machine/pika_aura.4bpp");
-const u8 gUnknown_08DD19F8[] = INCBIN_U8("graphics/unknown/unknown_DD19F8.bin");
-const u8 gUnknown_08DD1A18[] = INCBIN_U8("graphics/unknown/unknown_DD1A18.4bpp");
+const u8 gSlotMachineReelBackground_Tilemap[] = INCBIN_U8("graphics/slot_machine/reel_background.bin");
+const u8 gSlotMachineReelTimeNumberGap_Gfx[] = INCBIN_U8("graphics/slot_machine/reel_time_number_gap.4bpp");
diff --git a/src/data/items.h b/src/data/items.h
index 4d262e683..30beb5352 100644
--- a/src/data/items.h
+++ b/src/data/items.h
@@ -3426,7 +3426,7 @@ const struct Item gItems[] =
.pocket = POCKET_KEY_ITEMS,
.type = 2,
.fieldUseFunc = ItemUseOutOfBattle_Rod,
- .secondaryId = 0,
+ .secondaryId = OLD_ROD,
},
[ITEM_GOOD_ROD] =
@@ -3440,7 +3440,7 @@ const struct Item gItems[] =
.pocket = POCKET_KEY_ITEMS,
.type = 2,
.fieldUseFunc = ItemUseOutOfBattle_Rod,
- .secondaryId = 1,
+ .secondaryId = GOOD_ROD,
},
[ITEM_SUPER_ROD] =
@@ -3454,7 +3454,7 @@ const struct Item gItems[] =
.pocket = POCKET_KEY_ITEMS,
.type = 2,
.fieldUseFunc = ItemUseOutOfBattle_Rod,
- .secondaryId = 2,
+ .secondaryId = SUPER_ROD,
},
[ITEM_SS_TICKET] =
diff --git a/src/data/object_events/object_event_graphics.h b/src/data/object_events/object_event_graphics.h
index 769a6bb0a..50fc6715c 100755
--- a/src/data/object_events/object_event_graphics.h
+++ b/src/data/object_events/object_event_graphics.h
@@ -252,7 +252,7 @@ const u32 gObjectEventPic_CableCar[] = INCBIN_U32("graphics/object_events/pics/m
const u16 gObjectEventPalette20[] = INCBIN_U16("graphics/object_events/palettes/20.gbapal");
const u32 gObjectEventPic_SSTidal[] = INCBIN_U32("graphics/object_events/pics/misc/ss_tidal.4bpp");
const u16 gObjectEventPalette21[] = INCBIN_U16("graphics/object_events/palettes/21.gbapal");
-const u32 gFieldEffectObjectPic_BerryTreeGrowthSparkle[] = INCBIN_U32("graphics/field_effects/pics/berry_tree_growth_sparkle.4bpp");
+const u32 gFieldEffectObjectPic_Sparkle[] = INCBIN_U32("graphics/field_effects/pics/sparkle.4bpp");
const u32 gObjectEventPic_BerryTreeDirtPile[] = INCBIN_U32("graphics/object_events/pics/berry_trees/dirt_pile.4bpp");
const u32 gObjectEventPic_BerryTreeSprout[] = INCBIN_U32("graphics/object_events/pics/berry_trees/sprout.4bpp");
const u32 gObjectEventPic_PechaBerryTree[] = INCBIN_U32("graphics/object_events/pics/berry_trees/pecha.4bpp");
@@ -293,43 +293,43 @@ const u32 gFieldEffectObjectPic_ShadowSmall[] = INCBIN_U32("graphics/field_effec
const u32 gFieldEffectObjectPic_ShadowMedium[] = INCBIN_U32("graphics/field_effects/pics/shadow_medium.4bpp");
const u32 gFieldEffectObjectPic_ShadowLarge[] = INCBIN_U32("graphics/field_effects/pics/shadow_large.4bpp");
const u32 gFieldEffectObjectPic_ShadowExtraLarge[] = INCBIN_U32("graphics/field_effects/pics/shadow_extra_large.4bpp");
-const u32 filler_8368A08[0x48] = {};
+static const u32 sFiller[0x48] = {};
const u8 gFieldEffectPic_CutGrass[] = INCBIN_U8("graphics/field_effects/pics/cut_grass.4bpp");
const u32 gFieldEffectPic_CutGrass_Copy[] = INCBIN_U32("graphics/field_effects/pics/cut_grass.4bpp");
-const u16 gFieldEffectObjectPalette6[] = INCBIN_U16("graphics/field_effects/palettes/06.gbapal");
+const u16 gFieldEffectPal_CutGrass[] = INCBIN_U16("graphics/field_effects/palettes/cut_grass.gbapal");
const u32 gFieldEffectObjectPic_Ripple[] = INCBIN_U32("graphics/field_effects/pics/ripple.4bpp");
const u32 gFieldEffectObjectPic_Ash[] = INCBIN_U32("graphics/field_effects/pics/ash.4bpp");
const u32 gFieldEffectObjectPic_Arrow[] = INCBIN_U32("graphics/field_effects/pics/arrow.4bpp");
-const u16 gFieldEffectObjectPalette0[] = INCBIN_U16("graphics/field_effects/palettes/00.gbapal");
-const u16 gFieldEffectObjectPalette1[] = INCBIN_U16("graphics/field_effects/palettes/01.gbapal");
+const u16 gFieldEffectObjectPalette0[] = INCBIN_U16("graphics/field_effects/palettes/general_0.gbapal");
+const u16 gFieldEffectObjectPalette1[] = INCBIN_U16("graphics/field_effects/palettes/general_1.gbapal");
const u32 gFieldEffectObjectPic_GroundImpactDust[] = INCBIN_U32("graphics/field_effects/pics/ground_impact_dust.4bpp");
-const u32 gFieldEffectObjectPic_BikeHopTallGrass[] = INCBIN_U32("graphics/field_effects/pics/bike_hop_tall_grass.4bpp");
-const u32 gUnusedGrass[] = INCBIN_U32("graphics/field_effects/pics/unused_grass.4bpp");
-const u32 gFieldEffectObjectPic_Unknown16[] = INCBIN_U32("graphics/field_effects/pics/unknown_16.4bpp");
+const u32 gFieldEffectObjectPic_JumpTallGrass[] = INCBIN_U32("graphics/field_effects/pics/jump_tall_grass.4bpp");
+const u32 gUnusedGrass3[] = INCBIN_U32("graphics/field_effects/pics/unused_grass_3.4bpp");
+const u32 gFieldEffectObjectPic_JumpLongGrass[] = INCBIN_U32("graphics/field_effects/pics/unknown_16.4bpp");
const u32 gFieldEffectObjectPic_Unknown17[] = INCBIN_U32("graphics/field_effects/pics/unknown_17.4bpp");
-const u32 gFieldEffectObjectPic_Unknown18[] = INCBIN_U32("graphics/field_effects/pics/unknown_18.4bpp");
+const u32 gFieldEffectObjectPic_UnusedGrass2[] = INCBIN_U32("graphics/field_effects/pics/unused_grass_2.4bpp");
const u32 gFieldEffectObjectPic_LongGrass[] = INCBIN_U32("graphics/field_effects/pics/long_grass.4bpp");
const u32 gFieldEffectObjectPic_TallGrass[] = INCBIN_U32("graphics/field_effects/pics/tall_grass.4bpp");
const u32 gFieldEffectObjectPic_ShortGrass[] = INCBIN_U32("graphics/field_effects/pics/short_grass.4bpp");
const u32 gFieldEffectObjectPic_SandFootprints[] = INCBIN_U32("graphics/field_effects/pics/sand_footprints.4bpp");
const u32 gFieldEffectObjectPic_DeepSandFootprints[] = INCBIN_U32("graphics/field_effects/pics/deep_sand_footprints.4bpp");
const u32 gFieldEffectObjectPic_BikeTireTracks[] = INCBIN_U32("graphics/field_effects/pics/bike_tire_tracks.4bpp");
-const u32 gFieldEffectObjectPic_Unknown19[] = INCBIN_U32("graphics/field_effects/pics/unknown_19.4bpp");
-const u32 gFieldEffectObjectPic_Unknown29[] = INCBIN_U32("graphics/field_effects/pics/unknown_29.4bpp");
-const u32 gFieldEffectObjectPic_BikeHopBigSplash[] = INCBIN_U32("graphics/field_effects/pics/bike_hop_big_splash.4bpp");
+const u32 gFieldEffectObjectPic_UnusedSand[] = INCBIN_U32("graphics/field_effects/pics/unused_sand.4bpp");
+const u32 gFieldEffectObjectPic_SandPile[] = INCBIN_U32("graphics/field_effects/pics/sand_pile.4bpp");
+const u32 gFieldEffectObjectPic_JumpBigSplash[] = INCBIN_U32("graphics/field_effects/pics/jump_big_splash.4bpp");
const u32 gFieldEffectObjectPic_Splash[] = INCBIN_U32("graphics/field_effects/pics/splash.4bpp");
-const u32 gFieldEffectObjectPic_BikeHopSmallSplash[] = INCBIN_U32("graphics/field_effects/pics/bike_hop_small_splash.4bpp");
-const u32 gFieldEffectObjectPic_Unknown20[] = INCBIN_U32("graphics/field_effects/pics/unknown_20.4bpp");
+const u32 gFieldEffectObjectPic_JumpSmallSplash[] = INCBIN_U32("graphics/field_effects/pics/jump_small_splash.4bpp");
+const u32 gFieldEffectObjectPic_WaterSurfacing[] = INCBIN_U32("graphics/field_effects/pics/water_surfacing.4bpp");
const u32 gFieldEffectObjectPic_TreeDisguise[] = INCBIN_U32("graphics/field_effects/pics/tree_disguise.4bpp");
const u32 gFieldEffectObjectPic_MountainDisguise[] = INCBIN_U32("graphics/field_effects/pics/mountain_disguise.4bpp");
const u32 gFieldEffectObjectPic_SandDisguisePlaceholder[] = INCBIN_U32("graphics/field_effects/pics/sand_disguise_placeholder.4bpp");
const u32 gFieldEffectObjectPic_HotSpringsWater[] = INCBIN_U32("graphics/field_effects/pics/hot_springs_water.4bpp");
-const u16 gFieldEffectObjectPalette2[] = INCBIN_U16("graphics/field_effects/palettes/02.gbapal");
-const u32 gFieldEffectObjectPic_JumpOutOfAsh[] = INCBIN_U32("graphics/field_effects/pics/jump_out_of_ash.4bpp");
-const u32 gFieldEffectObjectPic_LavaridgeGymWarp[] = INCBIN_U32("graphics/field_effects/pics/lavaridge_gym_warp.4bpp");
+const u16 gFieldEffectPal_Ash[] = INCBIN_U16("graphics/field_effects/palettes/ash.gbapal");
+const u32 gFieldEffectObjectPic_AshPuff[] = INCBIN_U32("graphics/field_effects/pics/ash_puff.4bpp");
+const u32 gFieldEffectObjectPic_AshLaunch[] = INCBIN_U32("graphics/field_effects/pics/ash_launch.4bpp");
const u32 gFieldEffectObjectPic_Bubbles[] = INCBIN_U32("graphics/field_effects/pics/bubbles.4bpp");
-const u32 gFieldEffectObjectPic_Unknown35[] = INCBIN_U32("graphics/field_effects/pics/unknown_35.4bpp");
-const u16 gFieldEffectObjectPalette3[] = INCBIN_U16("graphics/field_effects/palettes/03.gbapal");
+const u32 gFieldEffectObjectPic_SmallSparkle[] = INCBIN_U32("graphics/field_effects/pics/small_sparkle.4bpp");
+const u16 gFieldEffectPal_SmallSparkle[] = INCBIN_U16("graphics/field_effects/palettes/small_sparkle.gbapal");
const u32 gFieldEffectObjectPic_Bird[] = INCBIN_U32("graphics/field_effects/pics/bird.4bpp");
const u32 gObjectEventPic_Juan[] = INCBIN_U32("graphics/object_events/pics/people/gym_leaders/juan.4bpp");
const u32 gObjectEventPic_Scott[] = INCBIN_U32("graphics/object_events/pics/people/scott.4bpp");
diff --git a/src/data/pokemon_graphics/back_pic_coordinates.h b/src/data/pokemon_graphics/back_pic_coordinates.h
index 0a89f20c8..131ac13d9 100644
--- a/src/data/pokemon_graphics/back_pic_coordinates.h
+++ b/src/data/pokemon_graphics/back_pic_coordinates.h
@@ -3,2202 +3,2202 @@ const struct MonCoords gMonBackPicCoords[] =
[SPECIES_NONE] =
{
.size = 0x88,
- .y_offset = 0x00,
+ .y_offset = 0,
},
[SPECIES_BULBASAUR] =
{
.size = 0x64,
- .y_offset = 0x10,
+ .y_offset = 16,
},
[SPECIES_IVYSAUR] =
{
.size = 0x66,
- .y_offset = 0x09,
+ .y_offset = 9,
},
[SPECIES_VENUSAUR] =
{
.size = 0x87,
- .y_offset = 0x07,
+ .y_offset = 7,
},
[SPECIES_CHARMANDER] =
{
.size = 0x65,
- .y_offset = 0x0e,
+ .y_offset = 14,
},
[SPECIES_CHARMELEON] =
{
.size = 0x66,
- .y_offset = 0x09,
+ .y_offset = 9,
},
[SPECIES_CHARIZARD] =
{
.size = 0x87,
- .y_offset = 0x04,
+ .y_offset = 4,
},
[SPECIES_SQUIRTLE] =
{
.size = 0x65,
- .y_offset = 0x0e,
+ .y_offset = 14,
},
[SPECIES_WARTORTLE] =
{
.size = 0x76,
- .y_offset = 0x0a,
+ .y_offset = 10,
},
[SPECIES_BLASTOISE] =
{
.size = 0x86,
- .y_offset = 0x08,
+ .y_offset = 8,
},
[SPECIES_CATERPIE] =
{
.size = 0x55,
- .y_offset = 0x0f,
+ .y_offset = 15,
},
[SPECIES_METAPOD] =
{
.size = 0x65,
- .y_offset = 0x0c,
+ .y_offset = 12,
},
[SPECIES_BUTTERFREE] =
{
.size = 0x87,
- .y_offset = 0x06,
+ .y_offset = 6,
},
[SPECIES_WEEDLE] =
{
.size = 0x56,
- .y_offset = 0x0b,
+ .y_offset = 11,
},
[SPECIES_KAKUNA] =
{
.size = 0x46,
- .y_offset = 0x0a,
+ .y_offset = 10,
},
[SPECIES_BEEDRILL] =
{
.size = 0x86,
- .y_offset = 0x09,
+ .y_offset = 9,
},
[SPECIES_PIDGEY] =
{
.size = 0x66,
- .y_offset = 0x08,
+ .y_offset = 8,
},
[SPECIES_PIDGEOTTO] =
{
.size = 0x85,
- .y_offset = 0x0c,
+ .y_offset = 12,
},
[SPECIES_PIDGEOT] =
{
.size = 0x78,
- .y_offset = 0x02,
+ .y_offset = 2,
},
[SPECIES_RATTATA] =
{
.size = 0x65,
- .y_offset = 0x0d,
+ .y_offset = 13,
},
[SPECIES_RATICATE] =
{
.size = 0x75,
- .y_offset = 0x0d,
+ .y_offset = 13,
},
[SPECIES_SPEAROW] =
{
.size = 0x65,
- .y_offset = 0x0c,
+ .y_offset = 12,
},
[SPECIES_FEAROW] =
{
.size = 0x87,
- .y_offset = 0x05,
+ .y_offset = 5,
},
[SPECIES_EKANS] =
{
.size = 0x66,
- .y_offset = 0x09,
+ .y_offset = 9,
},
[SPECIES_ARBOK] =
{
.size = 0x77,
- .y_offset = 0x04,
+ .y_offset = 4,
},
[SPECIES_PIKACHU] =
{
.size = 0x77,
- .y_offset = 0x07,
+ .y_offset = 7,
},
[SPECIES_RAICHU] =
{
.size = 0x66,
- .y_offset = 0x08,
+ .y_offset = 8,
},
[SPECIES_SANDSHREW] =
{
.size = 0x65,
- .y_offset = 0x0d,
+ .y_offset = 13,
},
[SPECIES_SANDSLASH] =
{
.size = 0x86,
- .y_offset = 0x09,
+ .y_offset = 9,
},
[SPECIES_NIDORAN_F] =
{
.size = 0x55,
- .y_offset = 0x0c,
+ .y_offset = 12,
},
[SPECIES_NIDORINA] =
{
.size = 0x86,
- .y_offset = 0x0a,
+ .y_offset = 10,
},
[SPECIES_NIDOQUEEN] =
{
.size = 0x77,
- .y_offset = 0x06,
+ .y_offset = 6,
},
[SPECIES_NIDORAN_M] =
{
.size = 0x56,
- .y_offset = 0x08,
+ .y_offset = 8,
},
[SPECIES_NIDORINO] =
{
.size = 0x86,
- .y_offset = 0x09,
+ .y_offset = 9,
},
[SPECIES_NIDOKING] =
{
.size = 0x88,
- .y_offset = 0x03,
+ .y_offset = 3,
},
[SPECIES_CLEFAIRY] =
{
.size = 0x65,
- .y_offset = 0x0d,
+ .y_offset = 13,
},
[SPECIES_CLEFABLE] =
{
.size = 0x76,
- .y_offset = 0x0a,
+ .y_offset = 10,
},
[SPECIES_VULPIX] =
{
.size = 0x76,
- .y_offset = 0x09,
+ .y_offset = 9,
},
[SPECIES_NINETALES] =
{
.size = 0x77,
- .y_offset = 0x05,
+ .y_offset = 5,
},
[SPECIES_JIGGLYPUFF] =
{
.size = 0x65,
- .y_offset = 0x0d,
+ .y_offset = 13,
},
[SPECIES_WIGGLYTUFF] =
{
.size = 0x66,
- .y_offset = 0x08,
+ .y_offset = 8,
},
[SPECIES_ZUBAT] =
{
.size = 0x76,
- .y_offset = 0x0b,
+ .y_offset = 11,
},
[SPECIES_GOLBAT] =
{
.size = 0x87,
- .y_offset = 0x06,
+ .y_offset = 6,
},
[SPECIES_ODDISH] =
{
.size = 0x56,
- .y_offset = 0x0b,
+ .y_offset = 11,
},
[SPECIES_GLOOM] =
{
.size = 0x66,
- .y_offset = 0x0a,
+ .y_offset = 10,
},
[SPECIES_VILEPLUME] =
{
.size = 0x87,
- .y_offset = 0x07,
+ .y_offset = 7,
},
[SPECIES_PARAS] =
{
.size = 0x63,
- .y_offset = 0x14,
+ .y_offset = 20,
},
[SPECIES_PARASECT] =
{
.size = 0x87,
- .y_offset = 0x07,
+ .y_offset = 7,
},
[SPECIES_VENONAT] =
{
.size = 0x77,
- .y_offset = 0x06,
+ .y_offset = 6,
},
[SPECIES_VENOMOTH] =
{
.size = 0x77,
- .y_offset = 0x04,
+ .y_offset = 4,
},
[SPECIES_DIGLETT] =
{
.size = 0x54,
- .y_offset = 0x10,
+ .y_offset = 16,
},
[SPECIES_DUGTRIO] =
{
.size = 0x66,
- .y_offset = 0x0b,
+ .y_offset = 11,
},
[SPECIES_MEOWTH] =
{
.size = 0x65,
- .y_offset = 0x0c,
+ .y_offset = 12,
},
[SPECIES_PERSIAN] =
{
.size = 0x87,
- .y_offset = 0x07,
+ .y_offset = 7,
},
[SPECIES_PSYDUCK] =
{
.size = 0x67,
- .y_offset = 0x07,
+ .y_offset = 7,
},
[SPECIES_GOLDUCK] =
{
.size = 0x77,
- .y_offset = 0x05,
+ .y_offset = 5,
},
[SPECIES_MANKEY] =
{
.size = 0x76,
- .y_offset = 0x0b,
+ .y_offset = 11,
},
[SPECIES_PRIMEAPE] =
{
.size = 0x77,
- .y_offset = 0x07,
+ .y_offset = 7,
},
[SPECIES_GROWLITHE] =
{
.size = 0x66,
- .y_offset = 0x08,
+ .y_offset = 8,
},
[SPECIES_ARCANINE] =
{
.size = 0x87,
- .y_offset = 0x06,
+ .y_offset = 6,
},
[SPECIES_POLIWAG] =
{
.size = 0x74,
- .y_offset = 0x10,
+ .y_offset = 16,
},
[SPECIES_POLIWHIRL] =
{
.size = 0x65,
- .y_offset = 0x0c,
+ .y_offset = 12,
},
[SPECIES_POLIWRATH] =
{
.size = 0x86,
- .y_offset = 0x0b,
+ .y_offset = 11,
},
[SPECIES_ABRA] =
{
.size = 0x66,
- .y_offset = 0x0b,
+ .y_offset = 11,
},
[SPECIES_KADABRA] =
{
.size = 0x76,
- .y_offset = 0x08,
+ .y_offset = 8,
},
[SPECIES_ALAKAZAM] =
{
.size = 0x67,
- .y_offset = 0x05,
+ .y_offset = 5,
},
[SPECIES_MACHOP] =
{
.size = 0x65,
- .y_offset = 0x0c,
+ .y_offset = 12,
},
[SPECIES_MACHOKE] =
{
.size = 0x76,
- .y_offset = 0x09,
+ .y_offset = 9,
},
[SPECIES_MACHAMP] =
{
.size = 0x67,
- .y_offset = 0x04,
+ .y_offset = 4,
},
[SPECIES_BELLSPROUT] =
{
.size = 0x66,
- .y_offset = 0x0a,
+ .y_offset = 10,
},
[SPECIES_WEEPINBELL] =
{
.size = 0x66,
- .y_offset = 0x09,
+ .y_offset = 9,
},
[SPECIES_VICTREEBEL] =
{
.size = 0x87,
- .y_offset = 0x06,
+ .y_offset = 6,
},
[SPECIES_TENTACOOL] =
{
.size = 0x56,
- .y_offset = 0x0a,
+ .y_offset = 10,
},
[SPECIES_TENTACRUEL] =
{
.size = 0x86,
- .y_offset = 0x0b,
+ .y_offset = 11,
},
[SPECIES_GEODUDE] =
{
.size = 0x66,
- .y_offset = 0x0b,
+ .y_offset = 11,
},
[SPECIES_GRAVELER] =
{
.size = 0x75,
- .y_offset = 0x0c,
+ .y_offset = 12,
},
[SPECIES_GOLEM] =
{
.size = 0x84,
- .y_offset = 0x10,
+ .y_offset = 16,
},
[SPECIES_PONYTA] =
{
.size = 0x66,
- .y_offset = 0x09,
+ .y_offset = 9,
},
[SPECIES_RAPIDASH] =
{
.size = 0x87,
- .y_offset = 0x05,
+ .y_offset = 5,
},
[SPECIES_SLOWPOKE] =
{
.size = 0x85,
- .y_offset = 0x0e,
+ .y_offset = 14,
},
[SPECIES_SLOWBRO] =
{
.size = 0x86,
- .y_offset = 0x0a,
+ .y_offset = 10,
},
[SPECIES_MAGNEMITE] =
{
.size = 0x43,
- .y_offset = 0x14,
+ .y_offset = 20,
},
[SPECIES_MAGNETON] =
{
.size = 0x66,
- .y_offset = 0x0a,
+ .y_offset = 10,
},
[SPECIES_FARFETCHD] =
{
.size = 0x66,
- .y_offset = 0x0a,
+ .y_offset = 10,
},
[SPECIES_DODUO] =
{
.size = 0x66,
- .y_offset = 0x08,
+ .y_offset = 8,
},
[SPECIES_DODRIO] =
{
.size = 0x88,
- .y_offset = 0x01,
+ .y_offset = 1,
},
[SPECIES_SEEL] =
{
.size = 0x66,
- .y_offset = 0x0a,
+ .y_offset = 10,
},
[SPECIES_DEWGONG] =
{
.size = 0x77,
- .y_offset = 0x05,
+ .y_offset = 5,
},
[SPECIES_GRIMER] =
{
.size = 0x75,
- .y_offset = 0x0c,
+ .y_offset = 12,
},
[SPECIES_MUK] =
{
.size = 0x87,
- .y_offset = 0x05,
+ .y_offset = 5,
},
[SPECIES_SHELLDER] =
{
.size = 0x76,
- .y_offset = 0x0b,
+ .y_offset = 11,
},
[SPECIES_CLOYSTER] =
{
.size = 0x87,
- .y_offset = 0x06,
+ .y_offset = 6,
},
[SPECIES_GASTLY] =
{
.size = 0x85,
- .y_offset = 0x0e,
+ .y_offset = 14,
},
[SPECIES_HAUNTER] =
{
.size = 0x76,
- .y_offset = 0x08,
+ .y_offset = 8,
},
[SPECIES_GENGAR] =
{
.size = 0x76,
- .y_offset = 0x09,
+ .y_offset = 9,
},
[SPECIES_ONIX] =
{
.size = 0x78,
- .y_offset = 0x00,
+ .y_offset = 0,
},
[SPECIES_DROWZEE] =
{
.size = 0x65,
- .y_offset = 0x0d,
+ .y_offset = 13,
},
[SPECIES_HYPNO] =
{
.size = 0x66,
- .y_offset = 0x09,
+ .y_offset = 9,
},
[SPECIES_KRABBY] =
{
.size = 0x66,
- .y_offset = 0x0a,
+ .y_offset = 10,
},
[SPECIES_KINGLER] =
{
.size = 0x77,
- .y_offset = 0x04,
+ .y_offset = 4,
},
[SPECIES_VOLTORB] =
{
.size = 0x55,
- .y_offset = 0x0e,
+ .y_offset = 14,
},
[SPECIES_ELECTRODE] =
{
.size = 0x65,
- .y_offset = 0x0d,
+ .y_offset = 13,
},
[SPECIES_EXEGGCUTE] =
{
.size = 0x65,
- .y_offset = 0x0d,
+ .y_offset = 13,
},
[SPECIES_EXEGGUTOR] =
{
.size = 0x87,
- .y_offset = 0x04,
+ .y_offset = 4,
},
[SPECIES_CUBONE] =
{
.size = 0x66,
- .y_offset = 0x0a,
+ .y_offset = 10,
},
[SPECIES_MAROWAK] =
{
.size = 0x66,
- .y_offset = 0x08,
+ .y_offset = 8,
},
[SPECIES_HITMONLEE] =
{
.size = 0x65,
- .y_offset = 0x0c,
+ .y_offset = 12,
},
[SPECIES_HITMONCHAN] =
{
.size = 0x65,
- .y_offset = 0x0c,
+ .y_offset = 12,
},
[SPECIES_LICKITUNG] =
{
.size = 0x65,
- .y_offset = 0x0e,
+ .y_offset = 14,
},
[SPECIES_KOFFING] =
{
.size = 0x66,
- .y_offset = 0x09,
+ .y_offset = 9,
},
[SPECIES_WEEZING] =
{
.size = 0x77,
- .y_offset = 0x06,
+ .y_offset = 6,
},
[SPECIES_RHYHORN] =
{
.size = 0x85,
- .y_offset = 0x0c,
+ .y_offset = 12,
},
[SPECIES_RHYDON] =
{
.size = 0x88,
- .y_offset = 0x03,
+ .y_offset = 3,
},
[SPECIES_CHANSEY] =
{
.size = 0x86,
- .y_offset = 0x0b,
+ .y_offset = 11,
},
[SPECIES_TANGELA] =
{
.size = 0x85,
- .y_offset = 0x0e,
+ .y_offset = 14,
},
[SPECIES_KANGASKHAN] =
{
.size = 0x77,
- .y_offset = 0x05,
+ .y_offset = 5,
},
[SPECIES_HORSEA] =
{
.size = 0x66,
- .y_offset = 0x09,
+ .y_offset = 9,
},
[SPECIES_SEADRA] =
{
.size = 0x66,
- .y_offset = 0x08,
+ .y_offset = 8,
},
[SPECIES_GOLDEEN] =
{
.size = 0x66,
- .y_offset = 0x08,
+ .y_offset = 8,
},
[SPECIES_SEAKING] =
{
.size = 0x76,
- .y_offset = 0x0b,
+ .y_offset = 11,
},
[SPECIES_STARYU] =
{
.size = 0x65,
- .y_offset = 0x0d,
+ .y_offset = 13,
},
[SPECIES_STARMIE] =
{
.size = 0x85,
- .y_offset = 0x0e,
+ .y_offset = 14,
},
[SPECIES_MR_MIME] =
{
.size = 0x85,
- .y_offset = 0x0d,
+ .y_offset = 13,
},
[SPECIES_SCYTHER] =
{
.size = 0x77,
- .y_offset = 0x07,
+ .y_offset = 7,
},
[SPECIES_JYNX] =
{
.size = 0x86,
- .y_offset = 0x0a,
+ .y_offset = 10,
},
[SPECIES_ELECTABUZZ] =
{
.size = 0x66,
- .y_offset = 0x08,
+ .y_offset = 8,
},
[SPECIES_MAGMAR] =
{
.size = 0x66,
- .y_offset = 0x08,
+ .y_offset = 8,
},
[SPECIES_PINSIR] =
{
.size = 0x66,
- .y_offset = 0x09,
+ .y_offset = 9,
},
[SPECIES_TAUROS] =
{
.size = 0x85,
- .y_offset = 0x0d,
+ .y_offset = 13,
},
[SPECIES_MAGIKARP] =
{
.size = 0x76,
- .y_offset = 0x09,
+ .y_offset = 9,
},
[SPECIES_GYARADOS] =
{
.size = 0x78,
- .y_offset = 0x00,
+ .y_offset = 0,
},
[SPECIES_LAPRAS] =
{
.size = 0x77,
- .y_offset = 0x04,
+ .y_offset = 4,
},
[SPECIES_DITTO] =
{
.size = 0x54,
- .y_offset = 0x11,
+ .y_offset = 17,
},
[SPECIES_EEVEE] =
{
.size = 0x66,
- .y_offset = 0x0a,
+ .y_offset = 10,
},
[SPECIES_VAPOREON] =
{
.size = 0x66,
- .y_offset = 0x0a,
+ .y_offset = 10,
},
[SPECIES_JOLTEON] =
{
.size = 0x87,
- .y_offset = 0x06,
+ .y_offset = 6,
},
[SPECIES_FLAREON] =
{
.size = 0x67,
- .y_offset = 0x05,
+ .y_offset = 5,
},
[SPECIES_PORYGON] =
{
.size = 0x65,
- .y_offset = 0x0d,
+ .y_offset = 13,
},
[SPECIES_OMANYTE] =
{
.size = 0x66,
- .y_offset = 0x0a,
+ .y_offset = 10,
},
[SPECIES_OMASTAR] =
{
.size = 0x66,
- .y_offset = 0x08,
+ .y_offset = 8,
},
[SPECIES_KABUTO] =
{
.size = 0x65,
- .y_offset = 0x0d,
+ .y_offset = 13,
},
[SPECIES_KABUTOPS] =
{
.size = 0x77,
- .y_offset = 0x05,
+ .y_offset = 5,
},
[SPECIES_AERODACTYL] =
{
.size = 0x86,
- .y_offset = 0x08,
+ .y_offset = 8,
},
[SPECIES_SNORLAX] =
{
.size = 0x86,
- .y_offset = 0x0b,
+ .y_offset = 11,
},
[SPECIES_ARTICUNO] =
{
.size = 0x65,
- .y_offset = 0x0c,
+ .y_offset = 12,
},
[SPECIES_ZAPDOS] =
{
.size = 0x76,
- .y_offset = 0x0b,
+ .y_offset = 11,
},
[SPECIES_MOLTRES] =
{
.size = 0x87,
- .y_offset = 0x04,
+ .y_offset = 4,
},
[SPECIES_DRATINI] =
{
.size = 0x66,
- .y_offset = 0x09,
+ .y_offset = 9,
},
[SPECIES_DRAGONAIR] =
{
.size = 0x78,
- .y_offset = 0x00,
+ .y_offset = 0,
},
[SPECIES_DRAGONITE] =
{
.size = 0x87,
- .y_offset = 0x06,
+ .y_offset = 6,
},
[SPECIES_MEWTWO] =
{
.size = 0x78,
- .y_offset = 0x01,
+ .y_offset = 1,
},
[SPECIES_MEW] =
{
.size = 0x66,
- .y_offset = 0x08,
+ .y_offset = 8,
},
[SPECIES_CHIKORITA] =
{
.size = 0x56,
- .y_offset = 0x0a,
+ .y_offset = 10,
},
[SPECIES_BAYLEEF] =
{
.size = 0x66,
- .y_offset = 0x08,
+ .y_offset = 8,
},
[SPECIES_MEGANIUM] =
{
.size = 0x78,
- .y_offset = 0x00,
+ .y_offset = 0,
},
[SPECIES_CYNDAQUIL] =
{
.size = 0x76,
- .y_offset = 0x09,
+ .y_offset = 9,
},
[SPECIES_QUILAVA] =
{
.size = 0x87,
- .y_offset = 0x04,
+ .y_offset = 4,
},
[SPECIES_TYPHLOSION] =
{
.size = 0x87,
- .y_offset = 0x04,
+ .y_offset = 4,
},
[SPECIES_TOTODILE] =
{
.size = 0x66,
- .y_offset = 0x0b,
+ .y_offset = 11,
},
[SPECIES_CROCONAW] =
{
.size = 0x67,
- .y_offset = 0x07,
+ .y_offset = 7,
},
[SPECIES_FERALIGATR] =
{
.size = 0x88,
- .y_offset = 0x01,
+ .y_offset = 1,
},
[SPECIES_SENTRET] =
{
.size = 0x67,
- .y_offset = 0x05,
+ .y_offset = 5,
},
[SPECIES_FURRET] =
{
.size = 0x66,
- .y_offset = 0x08,
+ .y_offset = 8,
},
[SPECIES_HOOTHOOT] =
{
.size = 0x66,
- .y_offset = 0x08,
+ .y_offset = 8,
},
[SPECIES_NOCTOWL] =
{
.size = 0x68,
- .y_offset = 0x03,
+ .y_offset = 3,
},
[SPECIES_LEDYBA] =
{
.size = 0x76,
- .y_offset = 0x0b,
+ .y_offset = 11,
},
[SPECIES_LEDIAN] =
{
.size = 0x77,
- .y_offset = 0x07,
+ .y_offset = 7,
},
[SPECIES_SPINARAK] =
{
.size = 0x73,
- .y_offset = 0x15,
+ .y_offset = 21,
},
[SPECIES_ARIADOS] =
{
.size = 0x86,
- .y_offset = 0x0b,
+ .y_offset = 11,
},
[SPECIES_CROBAT] =
{
.size = 0x87,
- .y_offset = 0x05,
+ .y_offset = 5,
},
[SPECIES_CHINCHOU] =
{
.size = 0x86,
- .y_offset = 0x08,
+ .y_offset = 8,
},
[SPECIES_LANTURN] =
{
.size = 0x86,
- .y_offset = 0x08,
+ .y_offset = 8,
},
[SPECIES_PICHU] =
{
.size = 0x66,
- .y_offset = 0x0b,
+ .y_offset = 11,
},
[SPECIES_CLEFFA] =
{
.size = 0x65,
- .y_offset = 0x0f,
+ .y_offset = 15,
},
[SPECIES_IGGLYBUFF] =
{
.size = 0x66,
- .y_offset = 0x0b,
+ .y_offset = 11,
},
[SPECIES_TOGEPI] =
{
.size = 0x54,
- .y_offset = 0x10,
+ .y_offset = 16,
},
[SPECIES_TOGETIC] =
{
.size = 0x66,
- .y_offset = 0x08,
+ .y_offset = 8,
},
[SPECIES_NATU] =
{
.size = 0x54,
- .y_offset = 0x11,
+ .y_offset = 17,
},
[SPECIES_XATU] =
{
.size = 0x76,
- .y_offset = 0x08,
+ .y_offset = 8,
},
[SPECIES_MAREEP] =
{
.size = 0x66,
- .y_offset = 0x09,
+ .y_offset = 9,
},
[SPECIES_FLAAFFY] =
{
.size = 0x66,
- .y_offset = 0x09,
+ .y_offset = 9,
},
[SPECIES_AMPHAROS] =
{
.size = 0x88,
- .y_offset = 0x01,
+ .y_offset = 1,
},
[SPECIES_BELLOSSOM] =
{
.size = 0x66,
- .y_offset = 0x0b,
+ .y_offset = 11,
},
[SPECIES_MARILL] =
{
.size = 0x75,
- .y_offset = 0x0c,
+ .y_offset = 12,
},
[SPECIES_AZUMARILL] =
{
.size = 0x86,
- .y_offset = 0x08,
+ .y_offset = 8,
},
[SPECIES_SUDOWOODO] =
{
.size = 0x66,
- .y_offset = 0x08,
+ .y_offset = 8,
},
[SPECIES_POLITOED] =
{
.size = 0x66,
- .y_offset = 0x09,
+ .y_offset = 9,
},
[SPECIES_HOPPIP] =
{
.size = 0x66,
- .y_offset = 0x0b,
+ .y_offset = 11,
},
[SPECIES_SKIPLOOM] =
{
.size = 0x65,
- .y_offset = 0x0d,
+ .y_offset = 13,
},
[SPECIES_JUMPLUFF] =
{
.size = 0x87,
- .y_offset = 0x04,
+ .y_offset = 4,
},
[SPECIES_AIPOM] =
{
.size = 0x66,
- .y_offset = 0x09,
+ .y_offset = 9,
},
[SPECIES_SUNKERN] =
{
.size = 0x56,
- .y_offset = 0x0a,
+ .y_offset = 10,
},
[SPECIES_SUNFLORA] =
{
.size = 0x66,
- .y_offset = 0x08,
+ .y_offset = 8,
},
[SPECIES_YANMA] =
{
.size = 0x77,
- .y_offset = 0x04,
+ .y_offset = 4,
},
[SPECIES_WOOPER] =
{
.size = 0x85,
- .y_offset = 0x0f,
+ .y_offset = 15,
},
[SPECIES_QUAGSIRE] =
{
.size = 0x76,
- .y_offset = 0x08,
+ .y_offset = 8,
},
[SPECIES_ESPEON] =
{
.size = 0x76,
- .y_offset = 0x0b,
+ .y_offset = 11,
},
[SPECIES_UMBREON] =
{
.size = 0x87,
- .y_offset = 0x04,
+ .y_offset = 4,
},
[SPECIES_MURKROW] =
{
.size = 0x66,
- .y_offset = 0x09,
+ .y_offset = 9,
},
[SPECIES_SLOWKING] =
{
.size = 0x66,
- .y_offset = 0x08,
+ .y_offset = 8,
},
[SPECIES_MISDREAVUS] =
{
.size = 0x66,
- .y_offset = 0x0a,
+ .y_offset = 10,
},
[SPECIES_UNOWN] =
{
.size = 0x36,
- .y_offset = 0x08,
+ .y_offset = 8,
},
[SPECIES_WOBBUFFET] =
{
.size = 0x75,
- .y_offset = 0x0c,
+ .y_offset = 12,
},
[SPECIES_GIRAFARIG] =
{
.size = 0x87,
- .y_offset = 0x05,
+ .y_offset = 5,
},
[SPECIES_PINECO] =
{
.size = 0x65,
- .y_offset = 0x0f,
+ .y_offset = 15,
},
[SPECIES_FORRETRESS] =
{
.size = 0x84,
- .y_offset = 0x10,
+ .y_offset = 16,
},
[SPECIES_DUNSPARCE] =
{
.size = 0x85,
- .y_offset = 0x0f,
+ .y_offset = 15,
},
[SPECIES_GLIGAR] =
{
.size = 0x87,
- .y_offset = 0x05,
+ .y_offset = 5,
},
[SPECIES_STEELIX] =
{
.size = 0x88,
- .y_offset = 0x00,
+ .y_offset = 0,
},
[SPECIES_SNUBBULL] =
{
.size = 0x76,
- .y_offset = 0x0a,
+ .y_offset = 10,
},
[SPECIES_GRANBULL] =
{
.size = 0x87,
- .y_offset = 0x05,
+ .y_offset = 5,
},
[SPECIES_QWILFISH] =
{
.size = 0x77,
- .y_offset = 0x07,
+ .y_offset = 7,
},
[SPECIES_SCIZOR] =
{
.size = 0x77,
- .y_offset = 0x04,
+ .y_offset = 4,
},
[SPECIES_SHUCKLE] =
{
.size = 0x56,
- .y_offset = 0x0b,
+ .y_offset = 11,
},
[SPECIES_HERACROSS] =
{
.size = 0x77,
- .y_offset = 0x04,
+ .y_offset = 4,
},
[SPECIES_SNEASEL] =
{
.size = 0x66,
- .y_offset = 0x08,
+ .y_offset = 8,
},
[SPECIES_TEDDIURSA] =
{
.size = 0x66,
- .y_offset = 0x08,
+ .y_offset = 8,
},
[SPECIES_URSARING] =
{
.size = 0x88,
- .y_offset = 0x03,
+ .y_offset = 3,
},
[SPECIES_SLUGMA] =
{
.size = 0x66,
- .y_offset = 0x08,
+ .y_offset = 8,
},
[SPECIES_MAGCARGO] =
{
.size = 0x76,
- .y_offset = 0x09,
+ .y_offset = 9,
},
[SPECIES_SWINUB] =
{
.size = 0x63,
- .y_offset = 0x15,
+ .y_offset = 21,
},
[SPECIES_PILOSWINE] =
{
.size = 0x75,
- .y_offset = 0x0d,
+ .y_offset = 13,
},
[SPECIES_CORSOLA] =
{
.size = 0x65,
- .y_offset = 0x0c,
+ .y_offset = 12,
},
[SPECIES_REMORAID] =
{
.size = 0x75,
- .y_offset = 0x0d,
+ .y_offset = 13,
},
[SPECIES_OCTILLERY] =
{
.size = 0x66,
- .y_offset = 0x0a,
+ .y_offset = 10,
},
[SPECIES_DELIBIRD] =
{
.size = 0x67,
- .y_offset = 0x06,
+ .y_offset = 6,
},
[SPECIES_MANTINE] =
{
.size = 0x87,
- .y_offset = 0x07,
+ .y_offset = 7,
},
[SPECIES_SKARMORY] =
{
.size = 0x87,
- .y_offset = 0x04,
+ .y_offset = 4,
},
[SPECIES_HOUNDOUR] =
{
.size = 0x55,
- .y_offset = 0x0c,
+ .y_offset = 12,
},
[SPECIES_HOUNDOOM] =
{
.size = 0x87,
- .y_offset = 0x07,
+ .y_offset = 7,
},
[SPECIES_KINGDRA] =
{
.size = 0x87,
- .y_offset = 0x06,
+ .y_offset = 6,
},
[SPECIES_PHANPY] =
{
.size = 0x65,
- .y_offset = 0x0e,
+ .y_offset = 14,
},
[SPECIES_DONPHAN] =
{
.size = 0x85,
- .y_offset = 0x0d,
+ .y_offset = 13,
},
[SPECIES_PORYGON2] =
{
.size = 0x76,
- .y_offset = 0x0a,
+ .y_offset = 10,
},
[SPECIES_STANTLER] =
{
.size = 0x78,
- .y_offset = 0x03,
+ .y_offset = 3,
},
[SPECIES_SMEARGLE] =
{
.size = 0x76,
- .y_offset = 0x0a,
+ .y_offset = 10,
},
[SPECIES_TYROGUE] =
{
.size = 0x66,
- .y_offset = 0x08,
+ .y_offset = 8,
},
[SPECIES_HITMONTOP] =
{
.size = 0x87,
- .y_offset = 0x05,
+ .y_offset = 5,
},
[SPECIES_SMOOCHUM] =
{
.size = 0x56,
- .y_offset = 0x09,
+ .y_offset = 9,
},
[SPECIES_ELEKID] =
{
.size = 0x66,
- .y_offset = 0x08,
+ .y_offset = 8,
},
[SPECIES_MAGBY] =
{
.size = 0x66,
- .y_offset = 0x0b,
+ .y_offset = 11,
},
[SPECIES_MILTANK] =
{
.size = 0x87,
- .y_offset = 0x07,
+ .y_offset = 7,
},
[SPECIES_BLISSEY] =
{
.size = 0x85,
- .y_offset = 0x0d,
+ .y_offset = 13,
},
[SPECIES_RAIKOU] =
{
.size = 0x86,
- .y_offset = 0x0a,
+ .y_offset = 10,
},
[SPECIES_ENTEI] =
{
.size = 0x87,
- .y_offset = 0x06,
+ .y_offset = 6,
},
[SPECIES_SUICUNE] =
{
.size = 0x88,
- .y_offset = 0x03,
+ .y_offset = 3,
},
[SPECIES_LARVITAR] =
{
.size = 0x66,
- .y_offset = 0x08,
+ .y_offset = 8,
},
[SPECIES_PUPITAR] =
{
.size = 0x67,
- .y_offset = 0x05,
+ .y_offset = 5,
},
[SPECIES_TYRANITAR] =
{
.size = 0x88,
- .y_offset = 0x00,
+ .y_offset = 0,
},
[SPECIES_LUGIA] =
{
.size = 0x88,
- .y_offset = 0x01,
+ .y_offset = 1,
},
[SPECIES_HO_OH] =
{
.size = 0x88,
- .y_offset = 0x01,
+ .y_offset = 1,
},
[SPECIES_CELEBI] =
{
.size = 0x66,
- .y_offset = 0x08,
+ .y_offset = 8,
},
[SPECIES_OLD_UNOWN_B] =
{
.size = 0x88,
- .y_offset = 0x02,
+ .y_offset = 2,
},
[SPECIES_OLD_UNOWN_C] =
{
.size = 0x88,
- .y_offset = 0x02,
+ .y_offset = 2,
},
[SPECIES_OLD_UNOWN_D] =
{
.size = 0x88,
- .y_offset = 0x02,
+ .y_offset = 2,
},
[SPECIES_OLD_UNOWN_E] =
{
.size = 0x88,
- .y_offset = 0x02,
+ .y_offset = 2,
},
[SPECIES_OLD_UNOWN_F] =
{
.size = 0x88,
- .y_offset = 0x02,
+ .y_offset = 2,
},
[SPECIES_OLD_UNOWN_G] =
{
.size = 0x88,
- .y_offset = 0x02,
+ .y_offset = 2,
},
[SPECIES_OLD_UNOWN_H] =
{
.size = 0x88,
- .y_offset = 0x02,
+ .y_offset = 2,
},
[SPECIES_OLD_UNOWN_I] =
{
.size = 0x88,
- .y_offset = 0x02,
+ .y_offset = 2,
},
[SPECIES_OLD_UNOWN_J] =
{
.size = 0x88,
- .y_offset = 0x02,
+ .y_offset = 2,
},
[SPECIES_OLD_UNOWN_K] =
{
.size = 0x88,
- .y_offset = 0x02,
+ .y_offset = 2,
},
[SPECIES_OLD_UNOWN_L] =
{
.size = 0x88,
- .y_offset = 0x02,
+ .y_offset = 2,
},
[SPECIES_OLD_UNOWN_M] =
{
.size = 0x88,
- .y_offset = 0x02,
+ .y_offset = 2,
},
[SPECIES_OLD_UNOWN_N] =
{
.size = 0x88,
- .y_offset = 0x02,
+ .y_offset = 2,
},
[SPECIES_OLD_UNOWN_O] =
{
.size = 0x88,
- .y_offset = 0x02,
+ .y_offset = 2,
},
[SPECIES_OLD_UNOWN_P] =
{
.size = 0x88,
- .y_offset = 0x02,
+ .y_offset = 2,
},
[SPECIES_OLD_UNOWN_Q] =
{
.size = 0x88,
- .y_offset = 0x02,
+ .y_offset = 2,
},
[SPECIES_OLD_UNOWN_R] =
{
.size = 0x88,
- .y_offset = 0x02,
+ .y_offset = 2,
},
[SPECIES_OLD_UNOWN_S] =
{
.size = 0x88,
- .y_offset = 0x02,
+ .y_offset = 2,
},
[SPECIES_OLD_UNOWN_T] =
{
.size = 0x88,
- .y_offset = 0x02,
+ .y_offset = 2,
},
[SPECIES_OLD_UNOWN_U] =
{
.size = 0x88,
- .y_offset = 0x02,
+ .y_offset = 2,
},
[SPECIES_OLD_UNOWN_V] =
{
.size = 0x88,
- .y_offset = 0x02,
+ .y_offset = 2,
},
[SPECIES_OLD_UNOWN_W] =
{
.size = 0x88,
- .y_offset = 0x02,
+ .y_offset = 2,
},
[SPECIES_OLD_UNOWN_X] =
{
.size = 0x88,
- .y_offset = 0x02,
+ .y_offset = 2,
},
[SPECIES_OLD_UNOWN_Y] =
{
.size = 0x88,
- .y_offset = 0x02,
+ .y_offset = 2,
},
[SPECIES_OLD_UNOWN_Z] =
{
.size = 0x88,
- .y_offset = 0x02,
+ .y_offset = 2,
},
[SPECIES_TREECKO] =
{
.size = 0x87,
- .y_offset = 0x06,
+ .y_offset = 6,
},
[SPECIES_GROVYLE] =
{
.size = 0x86,
- .y_offset = 0x08,
+ .y_offset = 8,
},
[SPECIES_SCEPTILE] =
{
.size = 0x88,
- .y_offset = 0x01,
+ .y_offset = 1,
},
[SPECIES_TORCHIC] =
{
.size = 0x67,
- .y_offset = 0x05,
+ .y_offset = 5,
},
[SPECIES_COMBUSKEN] =
{
.size = 0x88,
- .y_offset = 0x00,
+ .y_offset = 0,
},
[SPECIES_BLAZIKEN] =
{
.size = 0x88,
- .y_offset = 0x00,
+ .y_offset = 0,
},
[SPECIES_MUDKIP] =
{
.size = 0x77,
- .y_offset = 0x05,
+ .y_offset = 5,
},
[SPECIES_MARSHTOMP] =
{
.size = 0x87,
- .y_offset = 0x04,
+ .y_offset = 4,
},
[SPECIES_SWAMPERT] =
{
.size = 0x87,
- .y_offset = 0x05,
+ .y_offset = 5,
},
[SPECIES_POOCHYENA] =
{
.size = 0x76,
- .y_offset = 0x09,
+ .y_offset = 9,
},
[SPECIES_MIGHTYENA] =
{
.size = 0x87,
- .y_offset = 0x04,
+ .y_offset = 4,
},
[SPECIES_ZIGZAGOON] =
{
.size = 0x76,
- .y_offset = 0x0b,
+ .y_offset = 11,
},
[SPECIES_LINOONE] =
{
.size = 0x85,
- .y_offset = 0x0f,
+ .y_offset = 15,
},
[SPECIES_WURMPLE] =
{
.size = 0x76,
- .y_offset = 0x0b,
+ .y_offset = 11,
},
[SPECIES_SILCOON] =
{
.size = 0x83,
- .y_offset = 0x15,
+ .y_offset = 21,
},
[SPECIES_BEAUTIFLY] =
{
.size = 0x88,
- .y_offset = 0x00,
+ .y_offset = 0,
},
[SPECIES_CASCOON] =
{
.size = 0x73,
- .y_offset = 0x14,
+ .y_offset = 20,
},
[SPECIES_DUSTOX] =
{
.size = 0x83,
- .y_offset = 0x14,
+ .y_offset = 20,
},
[SPECIES_LOTAD] =
{
.size = 0x75,
- .y_offset = 0x0f,
+ .y_offset = 15,
},
[SPECIES_LOMBRE] =
{
.size = 0x86,
- .y_offset = 0x08,
+ .y_offset = 8,
},
[SPECIES_LUDICOLO] =
{
.size = 0x86,
- .y_offset = 0x0a,
+ .y_offset = 10,
},
[SPECIES_SEEDOT] =
{
.size = 0x86,
- .y_offset = 0x09,
+ .y_offset = 9,
},
[SPECIES_NUZLEAF] =
{
.size = 0x76,
- .y_offset = 0x0a,
+ .y_offset = 10,
},
[SPECIES_SHIFTRY] =
{
.size = 0x86,
- .y_offset = 0x08,
+ .y_offset = 8,
},
[SPECIES_NINCADA] =
{
.size = 0x83,
- .y_offset = 0x14,
+ .y_offset = 20,
},
[SPECIES_NINJASK] =
{
.size = 0x86,
- .y_offset = 0x08,
+ .y_offset = 8,
},
[SPECIES_SHEDINJA] =
{
.size = 0x77,
- .y_offset = 0x06,
+ .y_offset = 6,
},
[SPECIES_TAILLOW] =
{
.size = 0x64,
- .y_offset = 0x11,
+ .y_offset = 17,
},
[SPECIES_SWELLOW] =
{
.size = 0x86,
- .y_offset = 0x08,
+ .y_offset = 8,
},
[SPECIES_SHROOMISH] =
{
.size = 0x85,
- .y_offset = 0x0d,
+ .y_offset = 13,
},
[SPECIES_BRELOOM] =
{
.size = 0x87,
- .y_offset = 0x04,
+ .y_offset = 4,
},
[SPECIES_SPINDA] =
{
.size = 0x77,
- .y_offset = 0x04,
+ .y_offset = 4,
},
[SPECIES_WINGULL] =
{
.size = 0x85,
- .y_offset = 0x0e,
+ .y_offset = 14,
},
[SPECIES_PELIPPER] =
{
.size = 0x87,
- .y_offset = 0x06,
+ .y_offset = 6,
},
[SPECIES_SURSKIT] =
{
.size = 0x86,
- .y_offset = 0x0b,
+ .y_offset = 11,
},
[SPECIES_MASQUERAIN] =
{
.size = 0x88,
- .y_offset = 0x00,
+ .y_offset = 0,
},
[SPECIES_WAILMER] =
{
.size = 0x83,
- .y_offset = 0x15,
+ .y_offset = 21,
},
[SPECIES_WAILORD] =
{
.size = 0x83,
- .y_offset = 0x16,
+ .y_offset = 22,
},
[SPECIES_SKITTY] =
{
.size = 0x86,
- .y_offset = 0x0a,
+ .y_offset = 10,
},
[SPECIES_DELCATTY] =
{
.size = 0x86,
- .y_offset = 0x08,
+ .y_offset = 8,
},
[SPECIES_KECLEON] =
{
.size = 0x87,
- .y_offset = 0x06,
+ .y_offset = 6,
},
[SPECIES_BALTOY] =
{
.size = 0x86,
- .y_offset = 0x08,
+ .y_offset = 8,
},
[SPECIES_CLAYDOL] =
{
.size = 0x87,
- .y_offset = 0x07,
+ .y_offset = 7,
},
[SPECIES_NOSEPASS] =
{
.size = 0x85,
- .y_offset = 0x0c,
+ .y_offset = 12,
},
[SPECIES_TORKOAL] =
{
.size = 0x86,
- .y_offset = 0x0a,
+ .y_offset = 10,
},
[SPECIES_SABLEYE] =
{
.size = 0x76,
- .y_offset = 0x08,
+ .y_offset = 8,
},
[SPECIES_BARBOACH] =
{
.size = 0x66,
- .y_offset = 0x0a,
+ .y_offset = 10,
},
[SPECIES_WHISCASH] =
{
.size = 0x86,
- .y_offset = 0x0a,
+ .y_offset = 10,
},
[SPECIES_LUVDISC] =
{
.size = 0x46,
- .y_offset = 0x0a,
+ .y_offset = 10,
},
[SPECIES_CORPHISH] =
{
.size = 0x77,
- .y_offset = 0x07,
+ .y_offset = 7,
},
[SPECIES_CRAWDAUNT] =
{
.size = 0x87,
- .y_offset = 0x05,
+ .y_offset = 5,
},
[SPECIES_FEEBAS] =
{
.size = 0x67,
- .y_offset = 0x07,
+ .y_offset = 7,
},
[SPECIES_MILOTIC] =
{
.size = 0x68,
- .y_offset = 0x02,
+ .y_offset = 2,
},
[SPECIES_CARVANHA] =
{
.size = 0x87,
- .y_offset = 0x07,
+ .y_offset = 7,
},
[SPECIES_SHARPEDO] =
{
.size = 0x88,
- .y_offset = 0x02,
+ .y_offset = 2,
},
[SPECIES_TRAPINCH] =
{
.size = 0x75,
- .y_offset = 0x0e,
+ .y_offset = 14,
},
[SPECIES_VIBRAVA] =
{
.size = 0x74,
- .y_offset = 0x11,
+ .y_offset = 17,
},
[SPECIES_FLYGON] =
{
.size = 0x88,
- .y_offset = 0x02,
+ .y_offset = 2,
},
[SPECIES_MAKUHITA] =
{
.size = 0x76,
- .y_offset = 0x0b,
+ .y_offset = 11,
},
[SPECIES_HARIYAMA] =
{
.size = 0x87,
- .y_offset = 0x07,
+ .y_offset = 7,
},
[SPECIES_ELECTRIKE] =
{
.size = 0x84,
- .y_offset = 0x10,
+ .y_offset = 16,
},
[SPECIES_MANECTRIC] =
{
.size = 0x87,
- .y_offset = 0x04,
+ .y_offset = 4,
},
[SPECIES_NUMEL] =
{
.size = 0x86,
- .y_offset = 0x0b,
+ .y_offset = 11,
},
[SPECIES_CAMERUPT] =
{
.size = 0x84,
- .y_offset = 0x13,
+ .y_offset = 19,
},
[SPECIES_SPHEAL] =
{
.size = 0x64,
- .y_offset = 0x12,
+ .y_offset = 18,
},
[SPECIES_SEALEO] =
{
.size = 0x86,
- .y_offset = 0x0a,
+ .y_offset = 10,
},
[SPECIES_WALREIN] =
{
.size = 0x87,
- .y_offset = 0x06,
+ .y_offset = 6,
},
[SPECIES_CACNEA] =
{
.size = 0x85,
- .y_offset = 0x0f,
+ .y_offset = 15,
},
[SPECIES_CACTURNE] =
{
.size = 0x87,
- .y_offset = 0x07,
+ .y_offset = 7,
},
[SPECIES_SNORUNT] =
{
.size = 0x76,
- .y_offset = 0x0a,
+ .y_offset = 10,
},
[SPECIES_GLALIE] =
{
.size = 0x85,
- .y_offset = 0x0c,
+ .y_offset = 12,
},
[SPECIES_LUNATONE] =
{
.size = 0x87,
- .y_offset = 0x05,
+ .y_offset = 5,
},
[SPECIES_SOLROCK] =
{
.size = 0x87,
- .y_offset = 0x05,
+ .y_offset = 5,
},
[SPECIES_AZURILL] =
{
.size = 0x86,
- .y_offset = 0x0a,
+ .y_offset = 10,
},
[SPECIES_SPOINK] =
{
.size = 0x56,
- .y_offset = 0x0b,
+ .y_offset = 11,
},
[SPECIES_GRUMPIG] =
{
.size = 0x87,
- .y_offset = 0x04,
+ .y_offset = 4,
},
[SPECIES_PLUSLE] =
{
.size = 0x76,
- .y_offset = 0x08,
+ .y_offset = 8,
},
[SPECIES_MINUN] =
{
.size = 0x76,
- .y_offset = 0x08,
+ .y_offset = 8,
},
[SPECIES_MAWILE] =
{
.size = 0x87,
- .y_offset = 0x04,
+ .y_offset = 4,
},
[SPECIES_MEDITITE] =
{
.size = 0x76,
- .y_offset = 0x0b,
+ .y_offset = 11,
},
[SPECIES_MEDICHAM] =
{
.size = 0x68,
- .y_offset = 0x03,
+ .y_offset = 3,
},
[SPECIES_SWABLU] =
{
.size = 0x86,
- .y_offset = 0x09,
+ .y_offset = 9,
},
[SPECIES_ALTARIA] =
{
.size = 0x87,
- .y_offset = 0x06,
+ .y_offset = 6,
},
[SPECIES_WYNAUT] =
{
.size = 0x77,
- .y_offset = 0x07,
+ .y_offset = 7,
},
[SPECIES_DUSKULL] =
{
.size = 0x66,
- .y_offset = 0x0b,
+ .y_offset = 11,
},
[SPECIES_DUSCLOPS] =
{
.size = 0x86,
- .y_offset = 0x08,
+ .y_offset = 8,
},
[SPECIES_ROSELIA] =
{
.size = 0x86,
- .y_offset = 0x08,
+ .y_offset = 8,
},
[SPECIES_SLAKOTH] =
{
.size = 0x85,
- .y_offset = 0x0f,
+ .y_offset = 15,
},
[SPECIES_VIGOROTH] =
{
.size = 0x86,
- .y_offset = 0x0a,
+ .y_offset = 10,
},
[SPECIES_SLAKING] =
{
.size = 0x86,
- .y_offset = 0x08,
+ .y_offset = 8,
},
[SPECIES_GULPIN] =
{
.size = 0x66,
- .y_offset = 0x0b,
+ .y_offset = 11,
},
[SPECIES_SWALOT] =
{
.size = 0x77,
- .y_offset = 0x06,
+ .y_offset = 6,
},
[SPECIES_TROPIUS] =
{
.size = 0x87,
- .y_offset = 0x07,
+ .y_offset = 7,
},
[SPECIES_WHISMUR] =
{
.size = 0x85,
- .y_offset = 0x0d,
+ .y_offset = 13,
},
[SPECIES_LOUDRED] =
{
.size = 0x86,
- .y_offset = 0x09,
+ .y_offset = 9,
},
[SPECIES_EXPLOUD] =
{
.size = 0x88,
- .y_offset = 0x03,
+ .y_offset = 3,
},
[SPECIES_CLAMPERL] =
{
.size = 0x85,
- .y_offset = 0x0d,
+ .y_offset = 13,
},
[SPECIES_HUNTAIL] =
{
.size = 0x68,
- .y_offset = 0x02,
+ .y_offset = 2,
},
[SPECIES_GOREBYSS] =
{
.size = 0x77,
- .y_offset = 0x05,
+ .y_offset = 5,
},
[SPECIES_ABSOL] =
{
.size = 0x78,
- .y_offset = 0x03,
+ .y_offset = 3,
},
[SPECIES_SHUPPET] =
{
.size = 0x77,
- .y_offset = 0x06,
+ .y_offset = 6,
},
[SPECIES_BANETTE] =
{
.size = 0x65,
- .y_offset = 0x0c,
+ .y_offset = 12,
},
[SPECIES_SEVIPER] =
{
.size = 0x88,
- .y_offset = 0x03,
+ .y_offset = 3,
},
[SPECIES_ZANGOOSE] =
{
.size = 0x88,
- .y_offset = 0x01,
+ .y_offset = 1,
},
[SPECIES_RELICANTH] =
{
.size = 0x86,
- .y_offset = 0x0a,
+ .y_offset = 10,
},
[SPECIES_ARON] =
{
.size = 0x54,
- .y_offset = 0x11,
+ .y_offset = 17,
},
[SPECIES_LAIRON] =
{
.size = 0x84,
- .y_offset = 0x11,
+ .y_offset = 17,
},
[SPECIES_AGGRON] =
{
.size = 0x87,
- .y_offset = 0x07,
+ .y_offset = 7,
},
[SPECIES_CASTFORM] =
{
.size = 0x45,
- .y_offset = 0x0d,
+ .y_offset = 13,
},
[SPECIES_VOLBEAT] =
{
.size = 0x76,
- .y_offset = 0x08,
+ .y_offset = 8,
},
[SPECIES_ILLUMISE] =
{
.size = 0x67,
- .y_offset = 0x06,
+ .y_offset = 6,
},
[SPECIES_LILEEP] =
{
.size = 0x86,
- .y_offset = 0x09,
+ .y_offset = 9,
},
[SPECIES_CRADILY] =
{
.size = 0x77,
- .y_offset = 0x04,
+ .y_offset = 4,
},
[SPECIES_ANORITH] =
{
.size = 0x83,
- .y_offset = 0x17,
+ .y_offset = 23,
},
[SPECIES_ARMALDO] =
{
.size = 0x77,
- .y_offset = 0x05,
+ .y_offset = 5,
},
[SPECIES_RALTS] =
{
.size = 0x45,
- .y_offset = 0x0d,
+ .y_offset = 13,
},
[SPECIES_KIRLIA] =
{
.size = 0x57,
- .y_offset = 0x06,
+ .y_offset = 6,
},
[SPECIES_GARDEVOIR] =
{
.size = 0x77,
- .y_offset = 0x04,
+ .y_offset = 4,
},
[SPECIES_BAGON] =
{
.size = 0x66,
- .y_offset = 0x08,
+ .y_offset = 8,
},
[SPECIES_SHELGON] =
{
.size = 0x85,
- .y_offset = 0x0d,
+ .y_offset = 13,
},
[SPECIES_SALAMENCE] =
{
.size = 0x77,
- .y_offset = 0x06,
+ .y_offset = 6,
},
[SPECIES_BELDUM] =
{
.size = 0x66,
- .y_offset = 0x0a,
+ .y_offset = 10,
},
[SPECIES_METANG] =
{
.size = 0x84,
- .y_offset = 0x10,
+ .y_offset = 16,
},
[SPECIES_METAGROSS] =
{
.size = 0x83,
- .y_offset = 0x14,
+ .y_offset = 20,
},
[SPECIES_REGIROCK] =
{
.size = 0x86,
- .y_offset = 0x0a,
+ .y_offset = 10,
},
[SPECIES_REGICE] =
{
.size = 0x85,
- .y_offset = 0x0e,
+ .y_offset = 14,
},
[SPECIES_REGISTEEL] =
{
.size = 0x85,
- .y_offset = 0x0e,
+ .y_offset = 14,
},
[SPECIES_KYOGRE] =
{
.size = 0x84,
- .y_offset = 0x13,
+ .y_offset = 19,
},
[SPECIES_GROUDON] =
{
.size = 0x87,
- .y_offset = 0x07,
+ .y_offset = 7,
},
[SPECIES_RAYQUAZA] =
{
.size = 0x78,
- .y_offset = 0x00,
+ .y_offset = 0,
},
[SPECIES_LATIAS] =
{
.size = 0x88,
- .y_offset = 0x02,
+ .y_offset = 2,
},
[SPECIES_LATIOS] =
{
.size = 0x88,
- .y_offset = 0x03,
+ .y_offset = 3,
},
[SPECIES_JIRACHI] =
{
.size = 0x87,
- .y_offset = 0x05,
+ .y_offset = 5,
},
[SPECIES_DEOXYS] =
{
.size = 0x86,
- .y_offset = 0x09,
+ .y_offset = 9,
},
[SPECIES_CHIMECHO] =
{
.size = 0x47,
- .y_offset = 0x07,
+ .y_offset = 7,
},
[SPECIES_EGG] =
{
.size = 0x36,
- .y_offset = 0x0a,
+ .y_offset = 10,
},
[SPECIES_UNOWN_B] =
{
.size = 0x56,
- .y_offset = 0x09,
+ .y_offset = 9,
},
[SPECIES_UNOWN_C] =
{
.size = 0x67,
- .y_offset = 0x06,
+ .y_offset = 6,
},
[SPECIES_UNOWN_D] =
{
.size = 0x56,
- .y_offset = 0x08,
+ .y_offset = 8,
},
[SPECIES_UNOWN_E] =
{
.size = 0x56,
- .y_offset = 0x0a,
+ .y_offset = 10,
},
[SPECIES_UNOWN_F] =
{
.size = 0x66,
- .y_offset = 0x0a,
+ .y_offset = 10,
},
[SPECIES_UNOWN_G] =
{
.size = 0x57,
- .y_offset = 0x05,
+ .y_offset = 5,
},
[SPECIES_UNOWN_H] =
{
.size = 0x66,
- .y_offset = 0x08,
+ .y_offset = 8,
},
[SPECIES_UNOWN_I] =
{
.size = 0x37,
- .y_offset = 0x07,
+ .y_offset = 7,
},
[SPECIES_UNOWN_J] =
{
.size = 0x46,
- .y_offset = 0x09,
+ .y_offset = 9,
},
[SPECIES_UNOWN_K] =
{
.size = 0x57,
- .y_offset = 0x07,
+ .y_offset = 7,
},
[SPECIES_UNOWN_L] =
{
.size = 0x46,
- .y_offset = 0x0a,
+ .y_offset = 10,
},
[SPECIES_UNOWN_M] =
{
.size = 0x65,
- .y_offset = 0x0d,
+ .y_offset = 13,
},
[SPECIES_UNOWN_N] =
{
.size = 0x65,
- .y_offset = 0x0d,
+ .y_offset = 13,
},
[SPECIES_UNOWN_O] =
{
.size = 0x66,
- .y_offset = 0x08,
+ .y_offset = 8,
},
[SPECIES_UNOWN_P] =
{
.size = 0x46,
- .y_offset = 0x0a,
+ .y_offset = 10,
},
[SPECIES_UNOWN_Q] =
{
.size = 0x55,
- .y_offset = 0x0f,
+ .y_offset = 15,
},
[SPECIES_UNOWN_R] =
{
.size = 0x45,
- .y_offset = 0x0c,
+ .y_offset = 12,
},
[SPECIES_UNOWN_S] =
{
.size = 0x57,
- .y_offset = 0x04,
+ .y_offset = 4,
},
[SPECIES_UNOWN_T] =
{
.size = 0x45,
- .y_offset = 0x0d,
+ .y_offset = 13,
},
[SPECIES_UNOWN_U] =
{
.size = 0x65,
- .y_offset = 0x0d,
+ .y_offset = 13,
},
[SPECIES_UNOWN_V] =
{
.size = 0x56,
- .y_offset = 0x0b,
+ .y_offset = 11,
},
[SPECIES_UNOWN_W] =
{
.size = 0x55,
- .y_offset = 0x0d,
+ .y_offset = 13,
},
[SPECIES_UNOWN_X] =
{
.size = 0x55,
- .y_offset = 0x0f,
+ .y_offset = 15,
},
[SPECIES_UNOWN_Y] =
{
.size = 0x46,
- .y_offset = 0x0a,
+ .y_offset = 10,
},
[SPECIES_UNOWN_Z] =
{
.size = 0x46,
- .y_offset = 0x0a,
+ .y_offset = 10,
},
[SPECIES_UNOWN_EMARK] =
{
.size = 0x37,
- .y_offset = 0x06,
+ .y_offset = 6,
},
[SPECIES_UNOWN_QMARK] =
{
.size = 0x47,
- .y_offset = 0x06,
+ .y_offset = 6,
},
};
diff --git a/src/data/pokemon_graphics/front_pic_coordinates.h b/src/data/pokemon_graphics/front_pic_coordinates.h
index 19de9a7dd..b787877b9 100644
--- a/src/data/pokemon_graphics/front_pic_coordinates.h
+++ b/src/data/pokemon_graphics/front_pic_coordinates.h
@@ -3,2201 +3,2201 @@ const struct MonCoords gMonFrontPicCoords[] =
[SPECIES_NONE] =
{
.size = 0x88,
- .y_offset = 0x00,
+ .y_offset = 0,
},
[SPECIES_BULBASAUR] =
{
.size = 0x45,
- .y_offset = 0x0e,
+ .y_offset = 14,
},
[SPECIES_IVYSAUR] =
{
.size = 0x56,
- .y_offset = 0x0a,
+ .y_offset = 10,
},
[SPECIES_VENUSAUR] =
{
.size = 0x88,
- .y_offset = 0x03,
+ .y_offset = 3,
},
[SPECIES_CHARMANDER] =
{
.size = 0x55,
- .y_offset = 0x0c,
+ .y_offset = 12,
},
[SPECIES_CHARMELEON] =
{
.size = 0x66,
- .y_offset = 0x09,
+ .y_offset = 9,
},
[SPECIES_CHARIZARD] =
{
.size = 0x88,
- .y_offset = 0x01,
+ .y_offset = 1,
},
[SPECIES_SQUIRTLE] =
{
.size = 0x65,
- .y_offset = 0x0d,
+ .y_offset = 13,
},
[SPECIES_WARTORTLE] =
{
.size = 0x66,
- .y_offset = 0x08,
+ .y_offset = 8,
},
[SPECIES_BLASTOISE] =
{
.size = 0x88,
- .y_offset = 0x00,
+ .y_offset = 0,
},
[SPECIES_CATERPIE] =
{
.size = 0x45,
- .y_offset = 0x10,
+ .y_offset = 16,
},
[SPECIES_METAPOD] =
{
.size = 0x54,
- .y_offset = 0x14,
+ .y_offset = 20,
},
[SPECIES_BUTTERFREE] =
{
.size = 0x76,
- .y_offset = 0x09,
+ .y_offset = 9,
},
[SPECIES_WEEDLE] =
{
.size = 0x54,
- .y_offset = 0x12,
+ .y_offset = 18,
},
[SPECIES_KAKUNA] =
{
.size = 0x45,
- .y_offset = 0x0e,
+ .y_offset = 14,
},
[SPECIES_BEEDRILL] =
{
.size = 0x86,
- .y_offset = 0x09,
+ .y_offset = 9,
},
[SPECIES_PIDGEY] =
{
.size = 0x65,
- .y_offset = 0x0d,
+ .y_offset = 13,
},
[SPECIES_PIDGEOTTO] =
{
.size = 0x67,
- .y_offset = 0x0b,
+ .y_offset = 11,
},
[SPECIES_PIDGEOT] =
{
.size = 0x88,
- .y_offset = 0x01,
+ .y_offset = 1,
},
[SPECIES_RATTATA] =
{
.size = 0x44,
- .y_offset = 0x10,
+ .y_offset = 16,
},
[SPECIES_RATICATE] =
{
.size = 0x66,
- .y_offset = 0x0b,
+ .y_offset = 11,
},
[SPECIES_SPEAROW] =
{
.size = 0x45,
- .y_offset = 0x0f,
+ .y_offset = 15,
},
[SPECIES_FEAROW] =
{
.size = 0x78,
- .y_offset = 0x00,
+ .y_offset = 0,
},
[SPECIES_EKANS] =
{
.size = 0x65,
- .y_offset = 0x0c,
+ .y_offset = 12,
},
[SPECIES_ARBOK] =
{
.size = 0x88,
- .y_offset = 0x02,
+ .y_offset = 2,
},
[SPECIES_PIKACHU] =
{
.size = 0x67,
- .y_offset = 0x09,
+ .y_offset = 9,
},
[SPECIES_RAICHU] =
{
.size = 0x67,
- .y_offset = 0x04,
+ .y_offset = 4,
},
[SPECIES_SANDSHREW] =
{
.size = 0x55,
- .y_offset = 0x0e,
+ .y_offset = 14,
},
[SPECIES_SANDSLASH] =
{
.size = 0x76,
- .y_offset = 0x09,
+ .y_offset = 9,
},
[SPECIES_NIDORAN_F] =
{
.size = 0x45,
- .y_offset = 0x0f,
+ .y_offset = 15,
},
[SPECIES_NIDORINA] =
{
.size = 0x66,
- .y_offset = 0x0b,
+ .y_offset = 11,
},
[SPECIES_NIDOQUEEN] =
{
.size = 0x78,
- .y_offset = 0x03,
+ .y_offset = 3,
},
[SPECIES_NIDORAN_M] =
{
.size = 0x55,
- .y_offset = 0x0c,
+ .y_offset = 12,
},
[SPECIES_NIDORINO] =
{
.size = 0x66,
- .y_offset = 0x09,
+ .y_offset = 9,
},
[SPECIES_NIDOKING] =
{
.size = 0x78,
- .y_offset = 0x02,
+ .y_offset = 2,
},
[SPECIES_CLEFAIRY] =
{
.size = 0x55,
- .y_offset = 0x10,
+ .y_offset = 16,
},
[SPECIES_CLEFABLE] =
{
.size = 0x66,
- .y_offset = 0x08,
+ .y_offset = 8,
},
[SPECIES_VULPIX] =
{
.size = 0x65,
- .y_offset = 0x0c,
+ .y_offset = 12,
},
[SPECIES_NINETALES] =
{
.size = 0x88,
- .y_offset = 0x03,
+ .y_offset = 3,
},
[SPECIES_JIGGLYPUFF] =
{
.size = 0x45,
- .y_offset = 0x10,
+ .y_offset = 16,
},
[SPECIES_WIGGLYTUFF] =
{
.size = 0x67,
- .y_offset = 0x08,
+ .y_offset = 8,
},
[SPECIES_ZUBAT] =
{
.size = 0x67,
- .y_offset = 0x06,
+ .y_offset = 6,
},
[SPECIES_GOLBAT] =
{
.size = 0x88,
- .y_offset = 0x03,
+ .y_offset = 3,
},
[SPECIES_ODDISH] =
{
.size = 0x45,
- .y_offset = 0x0f,
+ .y_offset = 15,
},
[SPECIES_GLOOM] =
{
.size = 0x66,
- .y_offset = 0x0a,
+ .y_offset = 10,
},
[SPECIES_VILEPLUME] =
{
.size = 0x77,
- .y_offset = 0x06,
+ .y_offset = 6,
},
[SPECIES_PARAS] =
{
.size = 0x55,
- .y_offset = 0x0f,
+ .y_offset = 15,
},
[SPECIES_PARASECT] =
{
.size = 0x86,
- .y_offset = 0x08,
+ .y_offset = 8,
},
[SPECIES_VENONAT] =
{
.size = 0x66,
- .y_offset = 0x08,
+ .y_offset = 8,
},
[SPECIES_VENOMOTH] =
{
.size = 0x88,
- .y_offset = 0x02,
+ .y_offset = 2,
},
[SPECIES_DIGLETT] =
{
.size = 0x54,
- .y_offset = 0x12,
+ .y_offset = 18,
},
[SPECIES_DUGTRIO] =
{
.size = 0x75,
- .y_offset = 0x0d,
+ .y_offset = 13,
},
[SPECIES_MEOWTH] =
{
.size = 0x55,
- .y_offset = 0x0c,
+ .y_offset = 12,
},
[SPECIES_PERSIAN] =
{
.size = 0x77,
- .y_offset = 0x07,
+ .y_offset = 7,
},
[SPECIES_PSYDUCK] =
{
.size = 0x56,
- .y_offset = 0x09,
+ .y_offset = 9,
},
[SPECIES_GOLDUCK] =
{
.size = 0x78,
- .y_offset = 0x02,
+ .y_offset = 2,
},
[SPECIES_MANKEY] =
{
.size = 0x65,
- .y_offset = 0x0e,
+ .y_offset = 14,
},
[SPECIES_PRIMEAPE] =
{
.size = 0x77,
- .y_offset = 0x07,
+ .y_offset = 7,
},
[SPECIES_GROWLITHE] =
{
.size = 0x66,
- .y_offset = 0x0b,
+ .y_offset = 11,
},
[SPECIES_ARCANINE] =
{
.size = 0x88,
- .y_offset = 0x02,
+ .y_offset = 2,
},
[SPECIES_POLIWAG] =
{
.size = 0x74,
- .y_offset = 0x13,
+ .y_offset = 19,
},
[SPECIES_POLIWHIRL] =
{
.size = 0x76,
- .y_offset = 0x0a,
+ .y_offset = 10,
},
[SPECIES_POLIWRATH] =
{
.size = 0x76,
- .y_offset = 0x08,
+ .y_offset = 8,
},
[SPECIES_ABRA] =
{
.size = 0x66,
- .y_offset = 0x0b,
+ .y_offset = 11,
},
[SPECIES_KADABRA] =
{
.size = 0x77,
- .y_offset = 0x05,
+ .y_offset = 5,
},
[SPECIES_ALAKAZAM] =
{
.size = 0x87,
- .y_offset = 0x04,
+ .y_offset = 4,
},
[SPECIES_MACHOP] =
{
.size = 0x56,
- .y_offset = 0x0b,
+ .y_offset = 11,
},
[SPECIES_MACHOKE] =
{
.size = 0x67,
- .y_offset = 0x06,
+ .y_offset = 6,
},
[SPECIES_MACHAMP] =
{
.size = 0x88,
- .y_offset = 0x01,
+ .y_offset = 1,
},
[SPECIES_BELLSPROUT] =
{
.size = 0x65,
- .y_offset = 0x0f,
+ .y_offset = 15,
},
[SPECIES_WEEPINBELL] =
{
.size = 0x66,
- .y_offset = 0x0b,
+ .y_offset = 11,
},
[SPECIES_VICTREEBEL] =
{
.size = 0x77,
- .y_offset = 0x05,
+ .y_offset = 5,
},
[SPECIES_TENTACOOL] =
{
.size = 0x46,
- .y_offset = 0x09,
+ .y_offset = 9,
},
[SPECIES_TENTACRUEL] =
{
.size = 0x87,
- .y_offset = 0x04,
+ .y_offset = 4,
},
[SPECIES_GEODUDE] =
{
.size = 0x54,
- .y_offset = 0x12,
+ .y_offset = 18,
},
[SPECIES_GRAVELER] =
{
.size = 0x87,
- .y_offset = 0x04,
+ .y_offset = 4,
},
[SPECIES_GOLEM] =
{
.size = 0x77,
- .y_offset = 0x05,
+ .y_offset = 5,
},
[SPECIES_PONYTA] =
{
.size = 0x66,
- .y_offset = 0x08,
+ .y_offset = 8,
},
[SPECIES_RAPIDASH] =
{
.size = 0x88,
- .y_offset = 0x01,
+ .y_offset = 1,
},
[SPECIES_SLOWPOKE] =
{
.size = 0x66,
- .y_offset = 0x0b,
+ .y_offset = 11,
},
[SPECIES_SLOWBRO] =
{
.size = 0x86,
- .y_offset = 0x08,
+ .y_offset = 8,
},
[SPECIES_MAGNEMITE] =
{
.size = 0x43,
- .y_offset = 0x15,
+ .y_offset = 21,
},
[SPECIES_MAGNETON] =
{
.size = 0x76,
- .y_offset = 0x08,
+ .y_offset = 8,
},
[SPECIES_FARFETCHD] =
{
.size = 0x66,
- .y_offset = 0x09,
+ .y_offset = 9,
},
[SPECIES_DODUO] =
{
.size = 0x57,
- .y_offset = 0x05,
+ .y_offset = 5,
},
[SPECIES_DODRIO] =
{
.size = 0x88,
- .y_offset = 0x00,
+ .y_offset = 0,
},
[SPECIES_SEEL] =
{
.size = 0x76,
- .y_offset = 0x0a,
+ .y_offset = 10,
},
[SPECIES_DEWGONG] =
{
.size = 0x87,
- .y_offset = 0x07,
+ .y_offset = 7,
},
[SPECIES_GRIMER] =
{
.size = 0x65,
- .y_offset = 0x0c,
+ .y_offset = 12,
},
[SPECIES_MUK] =
{
.size = 0x87,
- .y_offset = 0x04,
+ .y_offset = 4,
},
[SPECIES_SHELLDER] =
{
.size = 0x55,
- .y_offset = 0x10,
+ .y_offset = 16,
},
[SPECIES_CLOYSTER] =
{
.size = 0x87,
- .y_offset = 0x05,
+ .y_offset = 5,
},
[SPECIES_GASTLY] =
{
.size = 0x77,
- .y_offset = 0x06,
+ .y_offset = 6,
},
[SPECIES_HAUNTER] =
{
.size = 0x77,
- .y_offset = 0x05,
+ .y_offset = 5,
},
[SPECIES_GENGAR] =
{
.size = 0x77,
- .y_offset = 0x05,
+ .y_offset = 5,
},
[SPECIES_ONIX] =
{
.size = 0x78,
- .y_offset = 0x02,
+ .y_offset = 2,
},
[SPECIES_DROWZEE] =
{
.size = 0x77,
- .y_offset = 0x07,
+ .y_offset = 7,
},
[SPECIES_HYPNO] =
{
.size = 0x77,
- .y_offset = 0x04,
+ .y_offset = 4,
},
[SPECIES_KRABBY] =
{
.size = 0x65,
- .y_offset = 0x0d,
+ .y_offset = 13,
},
[SPECIES_KINGLER] =
{
.size = 0x88,
- .y_offset = 0x03,
+ .y_offset = 3,
},
[SPECIES_VOLTORB] =
{
.size = 0x44,
- .y_offset = 0x13,
+ .y_offset = 19,
},
[SPECIES_ELECTRODE] =
{
.size = 0x55,
- .y_offset = 0x0e,
+ .y_offset = 14,
},
[SPECIES_EXEGGCUTE] =
{
.size = 0x87,
- .y_offset = 0x07,
+ .y_offset = 7,
},
[SPECIES_EXEGGUTOR] =
{
.size = 0x88,
- .y_offset = 0x00,
+ .y_offset = 0,
},
[SPECIES_CUBONE] =
{
.size = 0x55,
- .y_offset = 0x0f,
+ .y_offset = 15,
},
[SPECIES_MAROWAK] =
{
.size = 0x76,
- .y_offset = 0x0b,
+ .y_offset = 11,
},
[SPECIES_HITMONLEE] =
{
.size = 0x87,
- .y_offset = 0x04,
+ .y_offset = 4,
},
[SPECIES_HITMONCHAN] =
{
.size = 0x67,
- .y_offset = 0x04,
+ .y_offset = 4,
},
[SPECIES_LICKITUNG] =
{
.size = 0x86,
- .y_offset = 0x08,
+ .y_offset = 8,
},
[SPECIES_KOFFING] =
{
.size = 0x66,
- .y_offset = 0x08,
+ .y_offset = 8,
},
[SPECIES_WEEZING] =
{
.size = 0x88,
- .y_offset = 0x02,
+ .y_offset = 2,
},
[SPECIES_RHYHORN] =
{
.size = 0x76,
- .y_offset = 0x09,
+ .y_offset = 9,
},
[SPECIES_RHYDON] =
{
.size = 0x88,
- .y_offset = 0x02,
+ .y_offset = 2,
},
[SPECIES_CHANSEY] =
{
.size = 0x76,
- .y_offset = 0x09,
+ .y_offset = 9,
},
[SPECIES_TANGELA] =
{
.size = 0x67,
- .y_offset = 0x07,
+ .y_offset = 7,
},
[SPECIES_KANGASKHAN] =
{
.size = 0x88,
- .y_offset = 0x00,
+ .y_offset = 0,
},
[SPECIES_HORSEA] =
{
.size = 0x45,
- .y_offset = 0x0f,
+ .y_offset = 15,
},
[SPECIES_SEADRA] =
{
.size = 0x67,
- .y_offset = 0x07,
+ .y_offset = 7,
},
[SPECIES_GOLDEEN] =
{
.size = 0x66,
- .y_offset = 0x0a,
+ .y_offset = 10,
},
[SPECIES_SEAKING] =
{
.size = 0x77,
- .y_offset = 0x04,
+ .y_offset = 4,
},
[SPECIES_STARYU] =
{
.size = 0x66,
- .y_offset = 0x0a,
+ .y_offset = 10,
},
[SPECIES_STARMIE] =
{
.size = 0x77,
- .y_offset = 0x06,
+ .y_offset = 6,
},
[SPECIES_MR_MIME] =
{
.size = 0x66,
- .y_offset = 0x08,
+ .y_offset = 8,
},
[SPECIES_SCYTHER] =
{
.size = 0x88,
- .y_offset = 0x00,
+ .y_offset = 0,
},
[SPECIES_JYNX] =
{
.size = 0x77,
- .y_offset = 0x04,
+ .y_offset = 4,
},
[SPECIES_ELECTABUZZ] =
{
.size = 0x78,
- .y_offset = 0x02,
+ .y_offset = 2,
},
[SPECIES_MAGMAR] =
{
.size = 0x77,
- .y_offset = 0x04,
+ .y_offset = 4,
},
[SPECIES_PINSIR] =
{
.size = 0x77,
- .y_offset = 0x04,
+ .y_offset = 4,
},
[SPECIES_TAUROS] =
{
.size = 0x78,
- .y_offset = 0x00,
+ .y_offset = 0,
},
[SPECIES_MAGIKARP] =
{
.size = 0x67,
- .y_offset = 0x06,
+ .y_offset = 6,
},
[SPECIES_GYARADOS] =
{
.size = 0x88,
- .y_offset = 0x08,
+ .y_offset = 8,
},
[SPECIES_LAPRAS] =
{
.size = 0x85,
- .y_offset = 0x0d,
+ .y_offset = 13,
},
[SPECIES_DITTO] =
{
.size = 0x54,
- .y_offset = 0x11,
+ .y_offset = 17,
},
[SPECIES_EEVEE] =
{
.size = 0x56,
- .y_offset = 0x09,
+ .y_offset = 9,
},
[SPECIES_VAPOREON] =
{
.size = 0x67,
- .y_offset = 0x06,
+ .y_offset = 6,
},
[SPECIES_JOLTEON] =
{
.size = 0x76,
- .y_offset = 0x09,
+ .y_offset = 9,
},
[SPECIES_FLAREON] =
{
.size = 0x66,
- .y_offset = 0x0a,
+ .y_offset = 10,
},
[SPECIES_PORYGON] =
{
.size = 0x55,
- .y_offset = 0x0d,
+ .y_offset = 13,
},
[SPECIES_OMANYTE] =
{
.size = 0x45,
- .y_offset = 0x0f,
+ .y_offset = 15,
},
[SPECIES_OMASTAR] =
{
.size = 0x67,
- .y_offset = 0x07,
+ .y_offset = 7,
},
[SPECIES_KABUTO] =
{
.size = 0x54,
- .y_offset = 0x11,
+ .y_offset = 17,
},
[SPECIES_KABUTOPS] =
{
.size = 0x88,
- .y_offset = 0x03,
+ .y_offset = 3,
},
[SPECIES_AERODACTYL] =
{
.size = 0x88,
- .y_offset = 0x01,
+ .y_offset = 1,
},
[SPECIES_SNORLAX] =
{
.size = 0x87,
- .y_offset = 0x05,
+ .y_offset = 5,
},
[SPECIES_ARTICUNO] =
{
.size = 0x88,
- .y_offset = 0x03,
+ .y_offset = 3,
},
[SPECIES_ZAPDOS] =
{
.size = 0x87,
- .y_offset = 0x04,
+ .y_offset = 4,
},
[SPECIES_MOLTRES] =
{
.size = 0x88,
- .y_offset = 0x00,
+ .y_offset = 0,
},
[SPECIES_DRATINI] =
{
.size = 0x75,
- .y_offset = 0x0e,
+ .y_offset = 14,
},
[SPECIES_DRAGONAIR] =
{
.size = 0x87,
- .y_offset = 0x06,
+ .y_offset = 6,
},
[SPECIES_DRAGONITE] =
{
.size = 0x88,
- .y_offset = 0x00,
+ .y_offset = 0,
},
[SPECIES_MEWTWO] =
{
.size = 0x88,
- .y_offset = 0x00,
+ .y_offset = 0,
},
[SPECIES_MEW] =
{
.size = 0x55,
- .y_offset = 0x0d,
+ .y_offset = 13,
},
[SPECIES_CHIKORITA] =
{
.size = 0x75,
- .y_offset = 0x0d,
+ .y_offset = 13,
},
[SPECIES_BAYLEEF] =
{
.size = 0x77,
- .y_offset = 0x04,
+ .y_offset = 4,
},
[SPECIES_MEGANIUM] =
{
.size = 0x88,
- .y_offset = 0x00,
+ .y_offset = 0,
},
[SPECIES_CYNDAQUIL] =
{
.size = 0x55,
- .y_offset = 0x0e,
+ .y_offset = 14,
},
[SPECIES_QUILAVA] =
{
.size = 0x76,
- .y_offset = 0x08,
+ .y_offset = 8,
},
[SPECIES_TYPHLOSION] =
{
.size = 0x78,
- .y_offset = 0x00,
+ .y_offset = 0,
},
[SPECIES_TOTODILE] =
{
.size = 0x55,
- .y_offset = 0x0f,
+ .y_offset = 15,
},
[SPECIES_CROCONAW] =
{
.size = 0x67,
- .y_offset = 0x06,
+ .y_offset = 6,
},
[SPECIES_FERALIGATR] =
{
.size = 0x88,
- .y_offset = 0x00,
+ .y_offset = 0,
},
[SPECIES_SENTRET] =
{
.size = 0x47,
- .y_offset = 0x04,
+ .y_offset = 4,
},
[SPECIES_FURRET] =
{
.size = 0x67,
- .y_offset = 0x07,
+ .y_offset = 7,
},
[SPECIES_HOOTHOOT] =
{
.size = 0x55,
- .y_offset = 0x0d,
+ .y_offset = 13,
},
[SPECIES_NOCTOWL] =
{
.size = 0x58,
- .y_offset = 0x03,
+ .y_offset = 3,
},
[SPECIES_LEDYBA] =
{
.size = 0x56,
- .y_offset = 0x0c,
+ .y_offset = 12,
},
[SPECIES_LEDIAN] =
{
.size = 0x67,
- .y_offset = 0x04,
+ .y_offset = 4,
},
[SPECIES_SPINARAK] =
{
.size = 0x54,
- .y_offset = 0x13,
+ .y_offset = 19,
},
[SPECIES_ARIADOS] =
{
.size = 0x87,
- .y_offset = 0x05,
+ .y_offset = 5,
},
[SPECIES_CROBAT] =
{
.size = 0x88,
- .y_offset = 0x00,
+ .y_offset = 0,
},
[SPECIES_CHINCHOU] =
{
.size = 0x75,
- .y_offset = 0x10,
+ .y_offset = 16,
},
[SPECIES_LANTURN] =
{
.size = 0x87,
- .y_offset = 0x0b,
+ .y_offset = 11,
},
[SPECIES_PICHU] =
{
.size = 0x45,
- .y_offset = 0x0c,
+ .y_offset = 12,
},
[SPECIES_CLEFFA] =
{
.size = 0x44,
- .y_offset = 0x14,
+ .y_offset = 20,
},
[SPECIES_IGGLYBUFF] =
{
.size = 0x44,
- .y_offset = 0x12,
+ .y_offset = 18,
},
[SPECIES_TOGEPI] =
{
.size = 0x34,
- .y_offset = 0x14,
+ .y_offset = 20,
},
[SPECIES_TOGETIC] =
{
.size = 0x46,
- .y_offset = 0x09,
+ .y_offset = 9,
},
[SPECIES_NATU] =
{
.size = 0x44,
- .y_offset = 0x14,
+ .y_offset = 20,
},
[SPECIES_XATU] =
{
.size = 0x47,
- .y_offset = 0x07,
+ .y_offset = 7,
},
[SPECIES_MAREEP] =
{
.size = 0x55,
- .y_offset = 0x10,
+ .y_offset = 16,
},
[SPECIES_FLAAFFY] =
{
.size = 0x56,
- .y_offset = 0x0a,
+ .y_offset = 10,
},
[SPECIES_AMPHAROS] =
{
.size = 0x77,
- .y_offset = 0x05,
+ .y_offset = 5,
},
[SPECIES_BELLOSSOM] =
{
.size = 0x45,
- .y_offset = 0x0e,
+ .y_offset = 14,
},
[SPECIES_MARILL] =
{
.size = 0x65,
- .y_offset = 0x0e,
+ .y_offset = 14,
},
[SPECIES_AZUMARILL] =
{
.size = 0x76,
- .y_offset = 0x09,
+ .y_offset = 9,
},
[SPECIES_SUDOWOODO] =
{
.size = 0x67,
- .y_offset = 0x06,
+ .y_offset = 6,
},
[SPECIES_POLITOED] =
{
.size = 0x67,
- .y_offset = 0x06,
+ .y_offset = 6,
},
[SPECIES_HOPPIP] =
{
.size = 0x66,
- .y_offset = 0x0a,
+ .y_offset = 10,
},
[SPECIES_SKIPLOOM] =
{
.size = 0x55,
- .y_offset = 0x0f,
+ .y_offset = 15,
},
[SPECIES_JUMPLUFF] =
{
.size = 0x77,
- .y_offset = 0x07,
+ .y_offset = 7,
},
[SPECIES_AIPOM] =
{
.size = 0x58,
- .y_offset = 0x03,
+ .y_offset = 3,
},
[SPECIES_SUNKERN] =
{
.size = 0x44,
- .y_offset = 0x10,
+ .y_offset = 16,
},
[SPECIES_SUNFLORA] =
{
.size = 0x56,
- .y_offset = 0x08,
+ .y_offset = 8,
},
[SPECIES_YANMA] =
{
.size = 0x86,
- .y_offset = 0x0a,
+ .y_offset = 10,
},
[SPECIES_WOOPER] =
{
.size = 0x54,
- .y_offset = 0x10,
+ .y_offset = 16,
},
[SPECIES_QUAGSIRE] =
{
.size = 0x77,
- .y_offset = 0x07,
+ .y_offset = 7,
},
[SPECIES_ESPEON] =
{
.size = 0x66,
- .y_offset = 0x08,
+ .y_offset = 8,
},
[SPECIES_UMBREON] =
{
.size = 0x67,
- .y_offset = 0x08,
+ .y_offset = 8,
},
[SPECIES_MURKROW] =
{
.size = 0x66,
- .y_offset = 0x0b,
+ .y_offset = 11,
},
[SPECIES_SLOWKING] =
{
.size = 0x58,
- .y_offset = 0x01,
+ .y_offset = 1,
},
[SPECIES_MISDREAVUS] =
{
.size = 0x55,
- .y_offset = 0x0c,
+ .y_offset = 12,
},
[SPECIES_UNOWN] =
{
.size = 0x35,
- .y_offset = 0x0f,
+ .y_offset = 15,
},
[SPECIES_WOBBUFFET] =
{
.size = 0x77,
- .y_offset = 0x06,
+ .y_offset = 6,
},
[SPECIES_GIRAFARIG] =
{
.size = 0x88,
- .y_offset = 0x03,
+ .y_offset = 3,
},
[SPECIES_PINECO] =
{
.size = 0x56,
- .y_offset = 0x0a,
+ .y_offset = 10,
},
[SPECIES_FORRETRESS] =
{
.size = 0x76,
- .y_offset = 0x09,
+ .y_offset = 9,
},
[SPECIES_DUNSPARCE] =
{
.size = 0x74,
- .y_offset = 0x11,
+ .y_offset = 17,
},
[SPECIES_GLIGAR] =
{
.size = 0x78,
- .y_offset = 0x03,
+ .y_offset = 3,
},
[SPECIES_STEELIX] =
{
.size = 0x88,
- .y_offset = 0x00,
+ .y_offset = 0,
},
[SPECIES_SNUBBULL] =
{
.size = 0x55,
- .y_offset = 0x0d,
+ .y_offset = 13,
},
[SPECIES_GRANBULL] =
{
.size = 0x57,
- .y_offset = 0x06,
+ .y_offset = 6,
},
[SPECIES_QWILFISH] =
{
.size = 0x56,
- .y_offset = 0x0a,
+ .y_offset = 10,
},
[SPECIES_SCIZOR] =
{
.size = 0x88,
- .y_offset = 0x00,
+ .y_offset = 0,
},
[SPECIES_SHUCKLE] =
{
.size = 0x66,
- .y_offset = 0x09,
+ .y_offset = 9,
},
[SPECIES_HERACROSS] =
{
.size = 0x88,
- .y_offset = 0x03,
+ .y_offset = 3,
},
[SPECIES_SNEASEL] =
{
.size = 0x67,
- .y_offset = 0x05,
+ .y_offset = 5,
},
[SPECIES_TEDDIURSA] =
{
.size = 0x45,
- .y_offset = 0x0d,
+ .y_offset = 13,
},
[SPECIES_URSARING] =
{
.size = 0x78,
- .y_offset = 0x01,
+ .y_offset = 1,
},
[SPECIES_SLUGMA] =
{
.size = 0x45,
- .y_offset = 0x0d,
+ .y_offset = 13,
},
[SPECIES_MAGCARGO] =
{
.size = 0x57,
- .y_offset = 0x0d,
+ .y_offset = 13,
},
[SPECIES_SWINUB] =
{
.size = 0x43,
- .y_offset = 0x14,
+ .y_offset = 20,
},
[SPECIES_PILOSWINE] =
{
.size = 0x66,
- .y_offset = 0x08,
+ .y_offset = 8,
},
[SPECIES_CORSOLA] =
{
.size = 0x65,
- .y_offset = 0x0c,
+ .y_offset = 12,
},
[SPECIES_REMORAID] =
{
.size = 0x55,
- .y_offset = 0x0e,
+ .y_offset = 14,
},
[SPECIES_OCTILLERY] =
{
.size = 0x66,
- .y_offset = 0x0a,
+ .y_offset = 10,
},
[SPECIES_DELIBIRD] =
{
.size = 0x56,
- .y_offset = 0x08,
+ .y_offset = 8,
},
[SPECIES_MANTINE] =
{
.size = 0x88,
- .y_offset = 0x01,
+ .y_offset = 1,
},
[SPECIES_SKARMORY] =
{
.size = 0x88,
- .y_offset = 0x00,
+ .y_offset = 0,
},
[SPECIES_HOUNDOUR] =
{
.size = 0x56,
- .y_offset = 0x0b,
+ .y_offset = 11,
},
[SPECIES_HOUNDOOM] =
{
.size = 0x77,
- .y_offset = 0x05,
+ .y_offset = 5,
},
[SPECIES_KINGDRA] =
{
.size = 0x78,
- .y_offset = 0x04,
+ .y_offset = 4,
},
[SPECIES_PHANPY] =
{
.size = 0x54,
- .y_offset = 0x10,
+ .y_offset = 16,
},
[SPECIES_DONPHAN] =
{
.size = 0x86,
- .y_offset = 0x08,
+ .y_offset = 8,
},
[SPECIES_PORYGON2] =
{
.size = 0x55,
- .y_offset = 0x0f,
+ .y_offset = 15,
},
[SPECIES_STANTLER] =
{
.size = 0x88,
- .y_offset = 0x00,
+ .y_offset = 0,
},
[SPECIES_SMEARGLE] =
{
.size = 0x77,
- .y_offset = 0x06,
+ .y_offset = 6,
},
[SPECIES_TYROGUE] =
{
.size = 0x46,
- .y_offset = 0x09,
+ .y_offset = 9,
},
[SPECIES_HITMONTOP] =
{
.size = 0x67,
- .y_offset = 0x05,
+ .y_offset = 5,
},
[SPECIES_SMOOCHUM] =
{
.size = 0x35,
- .y_offset = 0x0f,
+ .y_offset = 15,
},
[SPECIES_ELEKID] =
{
.size = 0x76,
- .y_offset = 0x0a,
+ .y_offset = 10,
},
[SPECIES_MAGBY] =
{
.size = 0x45,
- .y_offset = 0x0d,
+ .y_offset = 13,
},
[SPECIES_MILTANK] =
{
.size = 0x77,
- .y_offset = 0x04,
+ .y_offset = 4,
},
[SPECIES_BLISSEY] =
{
.size = 0x77,
- .y_offset = 0x06,
+ .y_offset = 6,
},
[SPECIES_RAIKOU] =
{
.size = 0x88,
- .y_offset = 0x00,
+ .y_offset = 0,
},
[SPECIES_ENTEI] =
{
.size = 0x88,
- .y_offset = 0x00,
+ .y_offset = 0,
},
[SPECIES_SUICUNE] =
{
.size = 0x88,
- .y_offset = 0x00,
+ .y_offset = 0,
},
[SPECIES_LARVITAR] =
{
.size = 0x46,
- .y_offset = 0x09,
+ .y_offset = 9,
},
[SPECIES_PUPITAR] =
{
.size = 0x56,
- .y_offset = 0x09,
+ .y_offset = 9,
},
[SPECIES_TYRANITAR] =
{
.size = 0x88,
- .y_offset = 0x00,
+ .y_offset = 0,
},
[SPECIES_LUGIA] =
{
.size = 0x88,
- .y_offset = 0x00,
+ .y_offset = 0,
},
[SPECIES_HO_OH] =
{
.size = 0x88,
- .y_offset = 0x00,
+ .y_offset = 0,
},
[SPECIES_CELEBI] =
{
.size = 0x55,
- .y_offset = 0x0e,
+ .y_offset = 14,
},
[SPECIES_OLD_UNOWN_B] =
{
.size = 0x87,
- .y_offset = 0x04,
+ .y_offset = 4,
},
[SPECIES_OLD_UNOWN_C] =
{
.size = 0x87,
- .y_offset = 0x04,
+ .y_offset = 4,
},
[SPECIES_OLD_UNOWN_D] =
{
.size = 0x87,
- .y_offset = 0x04,
+ .y_offset = 4,
},
[SPECIES_OLD_UNOWN_E] =
{
.size = 0x87,
- .y_offset = 0x04,
+ .y_offset = 4,
},
[SPECIES_OLD_UNOWN_F] =
{
.size = 0x87,
- .y_offset = 0x04,
+ .y_offset = 4,
},
[SPECIES_OLD_UNOWN_G] =
{
.size = 0x87,
- .y_offset = 0x04,
+ .y_offset = 4,
},
[SPECIES_OLD_UNOWN_H] =
{
.size = 0x87,
- .y_offset = 0x04,
+ .y_offset = 4,
},
[SPECIES_OLD_UNOWN_I] =
{
.size = 0x87,
- .y_offset = 0x04,
+ .y_offset = 4,
},
[SPECIES_OLD_UNOWN_J] =
{
.size = 0x87,
- .y_offset = 0x04,
+ .y_offset = 4,
},
[SPECIES_OLD_UNOWN_K] =
{
.size = 0x87,
- .y_offset = 0x04,
+ .y_offset = 4,
},
[SPECIES_OLD_UNOWN_L] =
{
.size = 0x87,
- .y_offset = 0x04,
+ .y_offset = 4,
},
[SPECIES_OLD_UNOWN_M] =
{
.size = 0x87,
- .y_offset = 0x04,
+ .y_offset = 4,
},
[SPECIES_OLD_UNOWN_N] =
{
.size = 0x87,
- .y_offset = 0x04,
+ .y_offset = 4,
},
[SPECIES_OLD_UNOWN_O] =
{
.size = 0x87,
- .y_offset = 0x04,
+ .y_offset = 4,
},
[SPECIES_OLD_UNOWN_P] =
{
.size = 0x87,
- .y_offset = 0x04,
+ .y_offset = 4,
},
[SPECIES_OLD_UNOWN_Q] =
{
.size = 0x87,
- .y_offset = 0x04,
+ .y_offset = 4,
},
[SPECIES_OLD_UNOWN_R] =
{
.size = 0x87,
- .y_offset = 0x04,
+ .y_offset = 4,
},
[SPECIES_OLD_UNOWN_S] =
{
.size = 0x87,
- .y_offset = 0x04,
+ .y_offset = 4,
},
[SPECIES_OLD_UNOWN_T] =
{
.size = 0x87,
- .y_offset = 0x04,
+ .y_offset = 4,
},
[SPECIES_OLD_UNOWN_U] =
{
.size = 0x87,
- .y_offset = 0x04,
+ .y_offset = 4,
},
[SPECIES_OLD_UNOWN_V] =
{
.size = 0x87,
- .y_offset = 0x04,
+ .y_offset = 4,
},
[SPECIES_OLD_UNOWN_W] =
{
.size = 0x87,
- .y_offset = 0x04,
+ .y_offset = 4,
},
[SPECIES_OLD_UNOWN_X] =
{
.size = 0x87,
- .y_offset = 0x04,
+ .y_offset = 4,
},
[SPECIES_OLD_UNOWN_Y] =
{
.size = 0x87,
- .y_offset = 0x04,
+ .y_offset = 4,
},
[SPECIES_OLD_UNOWN_Z] =
{
.size = 0x87,
- .y_offset = 0x04,
+ .y_offset = 4,
},
[SPECIES_TREECKO] =
{
.size = 0x66,
- .y_offset = 0x08,
+ .y_offset = 8,
},
[SPECIES_GROVYLE] =
{
.size = 0x87,
- .y_offset = 0x04,
+ .y_offset = 4,
},
[SPECIES_SCEPTILE] =
{
.size = 0x88,
- .y_offset = 0x00,
+ .y_offset = 0,
},
[SPECIES_TORCHIC] =
{
.size = 0x56,
- .y_offset = 0x08,
+ .y_offset = 8,
},
[SPECIES_COMBUSKEN] =
{
.size = 0x88,
- .y_offset = 0x01,
+ .y_offset = 1,
},
[SPECIES_BLAZIKEN] =
{
.size = 0x88,
- .y_offset = 0x00,
+ .y_offset = 0,
},
[SPECIES_MUDKIP] =
{
.size = 0x56,
- .y_offset = 0x0c,
+ .y_offset = 12,
},
[SPECIES_MARSHTOMP] =
{
.size = 0x67,
- .y_offset = 0x06,
+ .y_offset = 6,
},
[SPECIES_SWAMPERT] =
{
.size = 0x88,
- .y_offset = 0x00,
+ .y_offset = 0,
},
[SPECIES_POOCHYENA] =
{
.size = 0x55,
- .y_offset = 0x0c,
+ .y_offset = 12,
},
[SPECIES_MIGHTYENA] =
{
.size = 0x87,
- .y_offset = 0x04,
+ .y_offset = 4,
},
[SPECIES_ZIGZAGOON] =
{
.size = 0x85,
- .y_offset = 0x0f,
+ .y_offset = 15,
},
[SPECIES_LINOONE] =
{
.size = 0x78,
- .y_offset = 0x03,
+ .y_offset = 3,
},
[SPECIES_WURMPLE] =
{
.size = 0x45,
- .y_offset = 0x0e,
+ .y_offset = 14,
},
[SPECIES_SILCOON] =
{
.size = 0x75,
- .y_offset = 0x11,
+ .y_offset = 17,
},
[SPECIES_BEAUTIFLY] =
{
.size = 0x86,
- .y_offset = 0x09,
+ .y_offset = 9,
},
[SPECIES_CASCOON] =
{
.size = 0x74,
- .y_offset = 0x10,
+ .y_offset = 16,
},
[SPECIES_DUSTOX] =
{
.size = 0x86,
- .y_offset = 0x0f,
+ .y_offset = 15,
},
[SPECIES_LOTAD] =
{
.size = 0x65,
- .y_offset = 0x0e,
+ .y_offset = 14,
},
[SPECIES_LOMBRE] =
{
.size = 0x66,
- .y_offset = 0x09,
+ .y_offset = 9,
},
[SPECIES_LUDICOLO] =
{
.size = 0x88,
- .y_offset = 0x00,
+ .y_offset = 0,
},
[SPECIES_SEEDOT] =
{
.size = 0x46,
- .y_offset = 0x10,
+ .y_offset = 16,
},
[SPECIES_NUZLEAF] =
{
.size = 0x56,
- .y_offset = 0x08,
+ .y_offset = 8,
},
[SPECIES_SHIFTRY] =
{
.size = 0x88,
- .y_offset = 0x02,
+ .y_offset = 2,
},
[SPECIES_NINCADA] =
{
.size = 0x74,
- .y_offset = 0x12,
+ .y_offset = 18,
},
[SPECIES_NINJASK] =
{
.size = 0x86,
- .y_offset = 0x0a,
+ .y_offset = 10,
},
[SPECIES_SHEDINJA] =
{
.size = 0x66,
- .y_offset = 0x0a,
+ .y_offset = 10,
},
[SPECIES_TAILLOW] =
{
.size = 0x64,
- .y_offset = 0x10,
+ .y_offset = 16,
},
[SPECIES_SWELLOW] =
{
.size = 0x87,
- .y_offset = 0x06,
+ .y_offset = 6,
},
[SPECIES_SHROOMISH] =
{
.size = 0x54,
- .y_offset = 0x10,
+ .y_offset = 16,
},
[SPECIES_BRELOOM] =
{
.size = 0x77,
- .y_offset = 0x04,
+ .y_offset = 4,
},
[SPECIES_SPINDA] =
{
.size = 0x68,
- .y_offset = 0x08,
+ .y_offset = 8,
},
[SPECIES_WINGULL] =
{
.size = 0x84,
- .y_offset = 0x18,
+ .y_offset = 24,
},
[SPECIES_PELIPPER] =
{
.size = 0x77,
- .y_offset = 0x04,
+ .y_offset = 4,
},
[SPECIES_SURSKIT] =
{
.size = 0x65,
- .y_offset = 0x0f,
+ .y_offset = 15,
},
[SPECIES_MASQUERAIN] =
{
.size = 0x88,
- .y_offset = 0x01,
+ .y_offset = 1,
},
[SPECIES_WAILMER] =
{
.size = 0x75,
- .y_offset = 0x0f,
+ .y_offset = 15,
},
[SPECIES_WAILORD] =
{
.size = 0x87,
- .y_offset = 0x0a,
+ .y_offset = 10,
},
[SPECIES_SKITTY] =
{
.size = 0x66,
- .y_offset = 0x0b,
+ .y_offset = 11,
},
[SPECIES_DELCATTY] =
{
.size = 0x66,
- .y_offset = 0x08,
+ .y_offset = 8,
},
[SPECIES_KECLEON] =
{
.size = 0x67,
- .y_offset = 0x07,
+ .y_offset = 7,
},
[SPECIES_BALTOY] =
{
.size = 0x55,
- .y_offset = 0x10,
+ .y_offset = 16,
},
[SPECIES_CLAYDOL] =
{
.size = 0x78,
- .y_offset = 0x06,
+ .y_offset = 6,
},
[SPECIES_NOSEPASS] =
{
.size = 0x56,
- .y_offset = 0x0c,
+ .y_offset = 12,
},
[SPECIES_TORKOAL] =
{
.size = 0x88,
- .y_offset = 0x02,
+ .y_offset = 2,
},
[SPECIES_SABLEYE] =
{
.size = 0x66,
- .y_offset = 0x09,
+ .y_offset = 9,
},
[SPECIES_BARBOACH] =
{
.size = 0x46,
- .y_offset = 0x0b,
+ .y_offset = 11,
},
[SPECIES_WHISCASH] =
{
.size = 0x76,
- .y_offset = 0x09,
+ .y_offset = 9,
},
[SPECIES_LUVDISC] =
{
.size = 0x46,
- .y_offset = 0x18,
+ .y_offset = 24,
},
[SPECIES_CORPHISH] =
{
.size = 0x66,
- .y_offset = 0x0c,
+ .y_offset = 12,
},
[SPECIES_CRAWDAUNT] =
{
.size = 0x88,
- .y_offset = 0x01,
+ .y_offset = 1,
},
[SPECIES_FEEBAS] =
{
.size = 0x46,
- .y_offset = 0x0d,
+ .y_offset = 13,
},
[SPECIES_MILOTIC] =
{
.size = 0x88,
- .y_offset = 0x00,
+ .y_offset = 0,
},
[SPECIES_CARVANHA] =
{
.size = 0x67,
- .y_offset = 0x06,
+ .y_offset = 6,
},
[SPECIES_SHARPEDO] =
{
.size = 0x78,
- .y_offset = 0x03,
+ .y_offset = 3,
},
[SPECIES_TRAPINCH] =
{
.size = 0x54,
- .y_offset = 0x10,
+ .y_offset = 16,
},
[SPECIES_VIBRAVA] =
{
.size = 0x86,
- .y_offset = 0x0c,
+ .y_offset = 12,
},
[SPECIES_FLYGON] =
{
.size = 0x88,
- .y_offset = 0x01,
+ .y_offset = 1,
},
[SPECIES_MAKUHITA] =
{
.size = 0x65,
- .y_offset = 0x0c,
+ .y_offset = 12,
},
[SPECIES_HARIYAMA] =
{
.size = 0x88,
- .y_offset = 0x01,
+ .y_offset = 1,
},
[SPECIES_ELECTRIKE] =
{
.size = 0x64,
- .y_offset = 0x12,
+ .y_offset = 18,
},
[SPECIES_MANECTRIC] =
{
.size = 0x67,
- .y_offset = 0x04,
+ .y_offset = 4,
},
[SPECIES_NUMEL] =
{
.size = 0x65,
- .y_offset = 0x0f,
+ .y_offset = 15,
},
[SPECIES_CAMERUPT] =
{
.size = 0x87,
- .y_offset = 0x09,
+ .y_offset = 9,
},
[SPECIES_SPHEAL] =
{
.size = 0x65,
- .y_offset = 0x10,
+ .y_offset = 16,
},
[SPECIES_SEALEO] =
{
.size = 0x86,
- .y_offset = 0x0a,
+ .y_offset = 10,
},
[SPECIES_WALREIN] =
{
.size = 0x88,
- .y_offset = 0x01,
+ .y_offset = 1,
},
[SPECIES_CACNEA] =
{
.size = 0x74,
- .y_offset = 0x10,
+ .y_offset = 16,
},
[SPECIES_CACTURNE] =
{
.size = 0x88,
- .y_offset = 0x00,
+ .y_offset = 0,
},
[SPECIES_SNORUNT] =
{
.size = 0x56,
- .y_offset = 0x0b,
+ .y_offset = 11,
},
[SPECIES_GLALIE] =
{
.size = 0x76,
- .y_offset = 0x0a,
+ .y_offset = 10,
},
[SPECIES_LUNATONE] =
{
.size = 0x66,
- .y_offset = 0x09,
+ .y_offset = 9,
},
[SPECIES_SOLROCK] =
{
.size = 0x88,
- .y_offset = 0x01,
+ .y_offset = 1,
},
[SPECIES_AZURILL] =
{
.size = 0x55,
- .y_offset = 0x0f,
+ .y_offset = 15,
},
[SPECIES_SPOINK] =
{
.size = 0x46,
- .y_offset = 0x09,
+ .y_offset = 9,
},
[SPECIES_GRUMPIG] =
{
.size = 0x77,
- .y_offset = 0x05,
+ .y_offset = 5,
},
[SPECIES_PLUSLE] =
{
.size = 0x56,
- .y_offset = 0x0e,
+ .y_offset = 14,
},
[SPECIES_MINUN] =
{
.size = 0x66,
- .y_offset = 0x0c,
+ .y_offset = 12,
},
[SPECIES_MAWILE] =
{
.size = 0x76,
- .y_offset = 0x08,
+ .y_offset = 8,
},
[SPECIES_MEDITITE] =
{
.size = 0x65,
- .y_offset = 0x0c,
+ .y_offset = 12,
},
[SPECIES_MEDICHAM] =
{
.size = 0x68,
- .y_offset = 0x01,
+ .y_offset = 1,
},
[SPECIES_SWABLU] =
{
.size = 0x76,
- .y_offset = 0x11,
+ .y_offset = 17,
},
[SPECIES_ALTARIA] =
{
.size = 0x88,
- .y_offset = 0x02,
+ .y_offset = 2,
},
[SPECIES_WYNAUT] =
{
.size = 0x55,
- .y_offset = 0x0c,
+ .y_offset = 12,
},
[SPECIES_DUSKULL] =
{
.size = 0x66,
- .y_offset = 0x0a,
+ .y_offset = 10,
},
[SPECIES_DUSCLOPS] =
{
.size = 0x77,
- .y_offset = 0x05,
+ .y_offset = 5,
},
[SPECIES_ROSELIA] =
{
.size = 0x76,
- .y_offset = 0x08,
+ .y_offset = 8,
},
[SPECIES_SLAKOTH] =
{
.size = 0x74,
- .y_offset = 0x12,
+ .y_offset = 18,
},
[SPECIES_VIGOROTH] =
{
.size = 0x78,
- .y_offset = 0x00,
+ .y_offset = 0,
},
[SPECIES_SLAKING] =
{
.size = 0x86,
- .y_offset = 0x08,
+ .y_offset = 8,
},
[SPECIES_GULPIN] =
{
.size = 0x55,
- .y_offset = 0x12,
+ .y_offset = 18,
},
[SPECIES_SWALOT] =
{
.size = 0x66,
- .y_offset = 0x08,
+ .y_offset = 8,
},
[SPECIES_TROPIUS] =
{
.size = 0x88,
- .y_offset = 0x00,
+ .y_offset = 0,
},
[SPECIES_WHISMUR] =
{
.size = 0x55,
- .y_offset = 0x0e,
+ .y_offset = 14,
},
[SPECIES_LOUDRED] =
{
.size = 0x78,
- .y_offset = 0x03,
+ .y_offset = 3,
},
[SPECIES_EXPLOUD] =
{
.size = 0x88,
- .y_offset = 0x01,
+ .y_offset = 1,
},
[SPECIES_CLAMPERL] =
{
.size = 0x55,
- .y_offset = 0x0e,
+ .y_offset = 14,
},
[SPECIES_HUNTAIL] =
{
.size = 0x78,
- .y_offset = 0x03,
+ .y_offset = 3,
},
[SPECIES_GOREBYSS] =
{
.size = 0x86,
- .y_offset = 0x0b,
+ .y_offset = 11,
},
[SPECIES_ABSOL] =
{
.size = 0x68,
- .y_offset = 0x00,
+ .y_offset = 0,
},
[SPECIES_SHUPPET] =
{
.size = 0x56,
- .y_offset = 0x0e,
+ .y_offset = 14,
},
[SPECIES_BANETTE] =
{
.size = 0x55,
- .y_offset = 0x0c,
+ .y_offset = 12,
},
[SPECIES_SEVIPER] =
{
.size = 0x77,
- .y_offset = 0x08,
+ .y_offset = 8,
},
[SPECIES_ZANGOOSE] =
{
.size = 0x87,
- .y_offset = 0x05,
+ .y_offset = 5,
},
[SPECIES_RELICANTH] =
{
.size = 0x77,
- .y_offset = 0x0b,
+ .y_offset = 11,
},
[SPECIES_ARON] =
{
.size = 0x43,
- .y_offset = 0x14,
+ .y_offset = 20,
},
[SPECIES_LAIRON] =
{
.size = 0x75,
- .y_offset = 0x0d,
+ .y_offset = 13,
},
[SPECIES_AGGRON] =
{
.size = 0x88,
- .y_offset = 0x00,
+ .y_offset = 0,
},
[SPECIES_CASTFORM] =
{
.size = 0x34,
- .y_offset = 0x11,
+ .y_offset = 17,
},
[SPECIES_VOLBEAT] =
{
.size = 0x66,
- .y_offset = 0x08,
+ .y_offset = 8,
},
[SPECIES_ILLUMISE] =
{
.size = 0x56,
- .y_offset = 0x08,
+ .y_offset = 8,
},
[SPECIES_LILEEP] =
{
.size = 0x67,
- .y_offset = 0x07,
+ .y_offset = 7,
},
[SPECIES_CRADILY] =
{
.size = 0x78,
- .y_offset = 0x00,
+ .y_offset = 0,
},
[SPECIES_ANORITH] =
{
.size = 0x66,
- .y_offset = 0x08,
+ .y_offset = 8,
},
[SPECIES_ARMALDO] =
{
.size = 0x88,
- .y_offset = 0x00,
+ .y_offset = 0,
},
[SPECIES_RALTS] =
{
.size = 0x35,
- .y_offset = 0x0f,
+ .y_offset = 15,
},
[SPECIES_KIRLIA] =
{
.size = 0x47,
- .y_offset = 0x06,
+ .y_offset = 6,
},
[SPECIES_GARDEVOIR] =
{
.size = 0x78,
- .y_offset = 0x01,
+ .y_offset = 1,
},
[SPECIES_BAGON] =
{
.size = 0x56,
- .y_offset = 0x0b,
+ .y_offset = 11,
},
[SPECIES_SHELGON] =
{
.size = 0x66,
- .y_offset = 0x09,
+ .y_offset = 9,
},
[SPECIES_SALAMENCE] =
{
.size = 0x87,
- .y_offset = 0x04,
+ .y_offset = 4,
},
[SPECIES_BELDUM] =
{
.size = 0x55,
- .y_offset = 0x0f,
+ .y_offset = 15,
},
[SPECIES_METANG] =
{
.size = 0x87,
- .y_offset = 0x07,
+ .y_offset = 7,
},
[SPECIES_METAGROSS] =
{
.size = 0x87,
- .y_offset = 0x06,
+ .y_offset = 6,
},
[SPECIES_REGIROCK] =
{
.size = 0x78,
- .y_offset = 0x04,
+ .y_offset = 4,
},
[SPECIES_REGICE] =
{
.size = 0x88,
- .y_offset = 0x02,
+ .y_offset = 2,
},
[SPECIES_REGISTEEL] =
{
.size = 0x88,
- .y_offset = 0x03,
+ .y_offset = 3,
},
[SPECIES_KYOGRE] =
{
.size = 0x87,
- .y_offset = 0x04,
+ .y_offset = 4,
},
[SPECIES_GROUDON] =
{
.size = 0x88,
- .y_offset = 0x01,
+ .y_offset = 1,
},
[SPECIES_RAYQUAZA] =
{
.size = 0x88,
- .y_offset = 0x00,
+ .y_offset = 0,
},
[SPECIES_LATIAS] =
{
.size = 0x88,
- .y_offset = 0x01,
+ .y_offset = 1,
},
[SPECIES_LATIOS] =
{
.size = 0x88,
- .y_offset = 0x02,
+ .y_offset = 2,
},
[SPECIES_JIRACHI] =
{
.size = 0x66,
- .y_offset = 0x0d,
+ .y_offset = 13,
},
[SPECIES_DEOXYS] =
{
.size = 0x88,
- .y_offset = 0x01,
+ .y_offset = 1,
},
[SPECIES_CHIMECHO] =
{
.size = 0x37,
- .y_offset = 0x06,
+ .y_offset = 6,
},
[SPECIES_EGG] =
{
.size = 0x33,
- .y_offset = 0x14,
+ .y_offset = 20,
},
[SPECIES_UNOWN_B] =
{
.size = 0x34,
- .y_offset = 0x10,
+ .y_offset = 16,
},
[SPECIES_UNOWN_C] =
{
.size = 0x44,
- .y_offset = 0x10,
+ .y_offset = 16,
},
[SPECIES_UNOWN_D] =
{
.size = 0x44,
- .y_offset = 0x10,
+ .y_offset = 16,
},
[SPECIES_UNOWN_E] =
{
.size = 0x44,
- .y_offset = 0x11,
+ .y_offset = 17,
},
[SPECIES_UNOWN_F] =
{
.size = 0x44,
- .y_offset = 0x11,
+ .y_offset = 17,
},
[SPECIES_UNOWN_G] =
{
.size = 0x35,
- .y_offset = 0x0e,
+ .y_offset = 14,
},
[SPECIES_UNOWN_H] =
{
.size = 0x44,
- .y_offset = 0x10,
+ .y_offset = 16,
},
[SPECIES_UNOWN_I] =
{
.size = 0x34,
- .y_offset = 0x10,
+ .y_offset = 16,
},
[SPECIES_UNOWN_J] =
{
.size = 0x34,
- .y_offset = 0x11,
+ .y_offset = 17,
},
[SPECIES_UNOWN_K] =
{
.size = 0x44,
- .y_offset = 0x11,
+ .y_offset = 17,
},
[SPECIES_UNOWN_L] =
{
.size = 0x34,
- .y_offset = 0x13,
+ .y_offset = 19,
},
[SPECIES_UNOWN_M] =
{
.size = 0x44,
- .y_offset = 0x13,
+ .y_offset = 19,
},
[SPECIES_UNOWN_N] =
{
.size = 0x43,
- .y_offset = 0x14,
+ .y_offset = 20,
},
[SPECIES_UNOWN_O] =
{
.size = 0x44,
- .y_offset = 0x10,
+ .y_offset = 16,
},
[SPECIES_UNOWN_P] =
{
.size = 0x34,
- .y_offset = 0x13,
+ .y_offset = 19,
},
[SPECIES_UNOWN_Q] =
{
.size = 0x43,
- .y_offset = 0x15,
+ .y_offset = 21,
},
[SPECIES_UNOWN_R] =
{
.size = 0x34,
- .y_offset = 0x13,
+ .y_offset = 19,
},
[SPECIES_UNOWN_S] =
{
.size = 0x45,
- .y_offset = 0x0c,
+ .y_offset = 12,
},
[SPECIES_UNOWN_T] =
{
.size = 0x34,
- .y_offset = 0x12,
+ .y_offset = 18,
},
[SPECIES_UNOWN_U] =
{
.size = 0x44,
- .y_offset = 0x12,
+ .y_offset = 18,
},
[SPECIES_UNOWN_V] =
{
.size = 0x44,
- .y_offset = 0x12,
+ .y_offset = 18,
},
[SPECIES_UNOWN_W] =
{
.size = 0x44,
- .y_offset = 0x13,
+ .y_offset = 19,
},
[SPECIES_UNOWN_X] =
{
.size = 0x33,
- .y_offset = 0x15,
+ .y_offset = 21,
},
[SPECIES_UNOWN_Y] =
{
.size = 0x34,
- .y_offset = 0x11,
+ .y_offset = 17,
},
[SPECIES_UNOWN_Z] =
{
.size = 0x34,
- .y_offset = 0x10,
+ .y_offset = 16,
},
[SPECIES_UNOWN_EMARK] =
{
.size = 0x35,
- .y_offset = 0x0f,
+ .y_offset = 15,
},
[SPECIES_UNOWN_QMARK] =
{
.size = 0x35,
- .y_offset = 0x0d,
+ .y_offset = 13,
},
};
diff --git a/src/data/region_map/region_map_entries.h b/src/data/region_map/region_map_entries.h
index 1d503d72f..6b433f90f 100644
--- a/src/data/region_map/region_map_entries.h
+++ b/src/data/region_map/region_map_entries.h
@@ -200,219 +200,219 @@ static const u8 sMapName_DesertUnderpass[] = _("DESERT UNDERPASS");
static const u8 sMapName_TrainerHill[] = _("TRAINER HILL");
const struct RegionMapLocation gRegionMapEntries[] = {
- [MAPSEC_LITTLEROOT_TOWN] = { 4, 11, 1, 1, sMapName_LittlerootTown},
- [MAPSEC_OLDALE_TOWN] = { 4, 9, 1, 1, sMapName_OldaleTown},
- [MAPSEC_DEWFORD_TOWN] = { 2, 14, 1, 1, sMapName_DewfordTown},
- [MAPSEC_LAVARIDGE_TOWN] = { 5, 3, 1, 1, sMapName_LavaridgeTown},
- [MAPSEC_FALLARBOR_TOWN] = { 3, 0, 1, 1, sMapName_FallarborTown},
- [MAPSEC_VERDANTURF_TOWN] = { 4, 6, 1, 1, sMapName_VerdanturfTown},
- [MAPSEC_PACIFIDLOG_TOWN] = {17, 10, 1, 1, sMapName_PacifidlogTown},
- [MAPSEC_PETALBURG_CITY] = { 1, 9, 1, 1, sMapName_PetalburgCity},
- [MAPSEC_SLATEPORT_CITY] = { 8, 10, 1, 2, sMapName_SlateportCity},
- [MAPSEC_MAUVILLE_CITY] = { 8, 6, 2, 1, sMapName_MauvilleCity},
- [MAPSEC_RUSTBORO_CITY] = { 0, 5, 1, 2, sMapName_RustboroCity},
- [MAPSEC_FORTREE_CITY] = {12, 0, 1, 1, sMapName_FortreeCity},
- [MAPSEC_LILYCOVE_CITY] = {18, 3, 2, 1, sMapName_LilycoveCity},
- [MAPSEC_MOSSDEEP_CITY] = {24, 5, 2, 1, sMapName_MossdeepCity},
- [MAPSEC_SOOTOPOLIS_CITY] = {21, 7, 1, 1, sMapName_SootopolisCity},
- [MAPSEC_EVER_GRANDE_CITY] = {27, 8, 1, 2, sMapName_EverGrandeCity},
- [MAPSEC_ROUTE_101] = { 4, 10, 1, 1, sMapName_Route101},
- [MAPSEC_ROUTE_102] = { 2, 9, 2, 1, sMapName_Route102},
- [MAPSEC_ROUTE_103] = { 4, 8, 4, 1, sMapName_Route103},
- [MAPSEC_ROUTE_104] = { 0, 7, 1, 3, sMapName_Route104},
- [MAPSEC_ROUTE_105] = { 0, 10, 1, 3, sMapName_Route105},
- [MAPSEC_ROUTE_106] = { 0, 13, 2, 1, sMapName_Route106},
- [MAPSEC_ROUTE_107] = { 3, 14, 3, 1, sMapName_Route107},
- [MAPSEC_ROUTE_108] = { 6, 14, 2, 1, sMapName_Route108},
- [MAPSEC_ROUTE_109] = { 8, 12, 1, 3, sMapName_Route109},
- [MAPSEC_ROUTE_110] = { 8, 7, 1, 3, sMapName_Route110},
- [MAPSEC_ROUTE_111] = { 8, 0, 1, 6, sMapName_Route111},
- [MAPSEC_ROUTE_112] = { 6, 3, 2, 1, sMapName_Route112},
- [MAPSEC_ROUTE_113] = { 4, 0, 4, 1, sMapName_Route113},
- [MAPSEC_ROUTE_114] = { 1, 0, 2, 3, sMapName_Route114},
- [MAPSEC_ROUTE_115] = { 0, 2, 1, 3, sMapName_Route115},
- [MAPSEC_ROUTE_116] = { 1, 5, 4, 1, sMapName_Route116},
- [MAPSEC_ROUTE_117] = { 5, 6, 3, 1, sMapName_Route117},
- [MAPSEC_ROUTE_118] = {10, 6, 2, 1, sMapName_Route118},
- [MAPSEC_ROUTE_119] = {11, 0, 1, 6, sMapName_Route119},
- [MAPSEC_ROUTE_120] = {13, 0, 1, 4, sMapName_Route120},
- [MAPSEC_ROUTE_121] = {14, 3, 4, 1, sMapName_Route121},
- [MAPSEC_ROUTE_122] = {16, 4, 1, 2, sMapName_Route122},
- [MAPSEC_ROUTE_123] = {12, 6, 5, 1, sMapName_Route123},
- [MAPSEC_ROUTE_124] = {20, 3, 4, 3, sMapName_Route124},
- [MAPSEC_ROUTE_125] = {24, 3, 2, 2, sMapName_Route125},
- [MAPSEC_ROUTE_126] = {20, 6, 3, 3, sMapName_Route126},
- [MAPSEC_ROUTE_127] = {23, 6, 3, 3, sMapName_Route127},
- [MAPSEC_ROUTE_128] = {23, 9, 4, 1, sMapName_Route128},
- [MAPSEC_ROUTE_129] = {24, 10, 2, 1, sMapName_Route129},
- [MAPSEC_ROUTE_130] = {21, 10, 3, 1, sMapName_Route130},
- [MAPSEC_ROUTE_131] = {18, 10, 3, 1, sMapName_Route131},
- [MAPSEC_ROUTE_132] = {15, 10, 2, 1, sMapName_Route132},
- [MAPSEC_ROUTE_133] = {12, 10, 3, 1, sMapName_Route133},
- [MAPSEC_ROUTE_134] = { 9, 10, 3, 1, sMapName_Route134},
- [MAPSEC_UNDERWATER_124] = {20, 3, 4, 3, sMapName_Underwater},
- [MAPSEC_UNDERWATER_125] = {20, 6, 3, 3, sMapName_Underwater},
- [MAPSEC_UNDERWATER_126] = {23, 6, 3, 3, sMapName_Underwater},
- [MAPSEC_UNDERWATER_127] = {23, 9, 4, 1, sMapName_Underwater},
- [MAPSEC_UNDERWATER_SOOTOPOLIS] = {21, 7, 1, 1, sMapName_Underwater},
- [MAPSEC_GRANITE_CAVE] = { 1, 13, 1, 1, sMapName_GraniteCave},
- [MAPSEC_MT_CHIMNEY] = { 6, 2, 1, 1, sMapName_MtChimney},
- [MAPSEC_SAFARI_ZONE] = {16, 2, 1, 1, sMapName_SafariZone},
- [MAPSEC_BATTLE_FRONTIER] = {22, 12, 1, 1, sMapName_BattleFrontier},
- [MAPSEC_PETALBURG_WOODS] = { 0, 8, 1, 1, sMapName_PetalburgWoods},
- [MAPSEC_RUSTURF_TUNNEL] = { 2, 5, 1, 1, sMapName_RusturfTunnel},
- [MAPSEC_ABANDONED_SHIP] = { 6, 14, 1, 1, sMapName_AbandonedShip},
- [MAPSEC_NEW_MAUVILLE] = { 8, 7, 1, 1, sMapName_NewMauville},
- [MAPSEC_METEOR_FALLS] = { 0, 3, 1, 1, sMapName_MeteorFalls},
- [MAPSEC_METEOR_FALLS2] = { 1, 2, 1, 1, sMapName_MeteorFalls},
- [MAPSEC_MT_PYRE] = {16, 4, 1, 1, sMapName_MtPyre},
- [MAPSEC_AQUA_HIDEOUT_OLD] = {19, 3, 1, 1, sMapName_AquaHideoutOld},
- [MAPSEC_SHOAL_CAVE] = {24, 4, 1, 1, sMapName_ShoalCave},
- [MAPSEC_SEAFLOOR_CAVERN] = {24, 9, 1, 1, sMapName_SeafloorCavern},
- [MAPSEC_UNDERWATER_128] = {24, 9, 1, 1, sMapName_Underwater},
- [MAPSEC_VICTORY_ROAD] = {27, 9, 1, 1, sMapName_VictoryRoad},
- [MAPSEC_MIRAGE_ISLAND] = {17, 10, 1, 1, sMapName_MirageIsland},
- [MAPSEC_CAVE_OF_ORIGIN] = {21, 7, 1, 1, sMapName_CaveOfOrigin},
- [MAPSEC_SOUTHERN_ISLAND] = {12, 14, 1, 1, sMapName_SouthernIsland},
- [MAPSEC_FIERY_PATH] = { 6, 3, 1, 1, sMapName_FieryPath},
- [MAPSEC_FIERY_PATH2] = { 7, 3, 1, 1, sMapName_FieryPath},
- [MAPSEC_JAGGED_PASS] = { 6, 3, 1, 1, sMapName_JaggedPass},
- [MAPSEC_JAGGED_PASS2] = { 7, 2, 1, 1, sMapName_JaggedPass},
- [MAPSEC_SEALED_CHAMBER] = {11, 10, 1, 1, sMapName_SealedChamber},
- [MAPSEC_UNDERWATER_SEALED_CHAMBER] = {11, 10, 1, 1, sMapName_Underwater},
- [MAPSEC_SCORCHED_SLAB] = {13, 0, 1, 1, sMapName_ScorchedSlab},
- [MAPSEC_ISLAND_CAVE] = { 0, 10, 1, 1, sMapName_IslandCave},
- [MAPSEC_DESERT_RUINS] = { 8, 3, 1, 1, sMapName_DesertRuins},
- [MAPSEC_ANCIENT_TOMB] = {13, 2, 1, 1, sMapName_AncientTomb},
- [MAPSEC_INSIDE_OF_TRUCK] = { 0, 0, 1, 1, sMapName_InsideOfTruck},
- [MAPSEC_SKY_PILLAR] = {19, 10, 1, 1, sMapName_SkyPillar},
- [MAPSEC_SECRET_BASE] = { 0, 0, 1, 1, sMapName_SecretBase},
- [MAPSEC_DYNAMIC] = { 0, 0, 1, 1, sMapName_None},
- [MAPSEC_PALLET_TOWN] = { 0, 0, 1, 1, sMapName_PalletTown},
- [MAPSEC_VIRIDIAN_CITY] = { 0, 0, 1, 1, sMapName_ViridianCity},
- [MAPSEC_PEWTER_CITY] = { 0, 0, 1, 1, sMapName_PewterCity},
- [MAPSEC_CERULEAN_CITY] = { 0, 0, 1, 1, sMapName_CeruleanCity},
- [MAPSEC_LAVENDER_TOWN] = { 0, 0, 1, 1, sMapName_LavenderTown},
- [MAPSEC_VERMILION_CITY] = { 0, 0, 1, 1, sMapName_VermilionCity},
- [MAPSEC_CELADON_CITY] = { 0, 0, 1, 1, sMapName_CeladonCity},
- [MAPSEC_FUCHSIA_CITY] = { 0, 0, 1, 1, sMapName_FuchsiaCity},
- [MAPSEC_CINNABAR_ISLAND] = { 0, 0, 1, 1, sMapName_CinnabarIsland},
- [MAPSEC_INDIGO_PLATEAU] = { 0, 0, 1, 1, sMapName_IndigoPlateau},
- [MAPSEC_SAFFRON_CITY] = { 0, 0, 1, 1, sMapName_SaffronCity},
- [MAPSEC_ROUTE_4_FLYDUP] = { 0, 0, 1, 1, sMapName_Route4},
- [MAPSEC_ROUTE_10_FLYDUP] = { 0, 0, 1, 1, sMapName_Route10},
- [MAPSEC_ROUTE_1] = { 0, 0, 1, 1, sMapName_Route1},
- [MAPSEC_ROUTE_2] = { 0, 0, 1, 1, sMapName_Route2},
- [MAPSEC_ROUTE_3] = { 0, 0, 1, 1, sMapName_Route3},
- [MAPSEC_ROUTE_4] = { 0, 0, 1, 1, sMapName_Route4_2},
- [MAPSEC_ROUTE_5] = { 0, 0, 1, 1, sMapName_Route5},
- [MAPSEC_ROUTE_6] = { 0, 0, 1, 1, sMapName_Route6},
- [MAPSEC_ROUTE_7] = { 0, 0, 1, 1, sMapName_Route7},
- [MAPSEC_ROUTE_8] = { 0, 0, 1, 1, sMapName_Route8},
- [MAPSEC_ROUTE_9] = { 0, 0, 1, 1, sMapName_Route9},
- [MAPSEC_ROUTE_10] = { 0, 0, 1, 1, sMapName_Route10_2},
- [MAPSEC_ROUTE_11] = { 0, 0, 1, 1, sMapName_Route11},
- [MAPSEC_ROUTE_12] = { 0, 0, 1, 1, sMapName_Route12},
- [MAPSEC_ROUTE_13] = { 0, 0, 1, 1, sMapName_Route13},
- [MAPSEC_ROUTE_14] = { 0, 0, 1, 1, sMapName_Route14},
- [MAPSEC_ROUTE_15] = { 0, 0, 1, 1, sMapName_Route15},
- [MAPSEC_ROUTE_16] = { 0, 0, 1, 1, sMapName_Route16},
- [MAPSEC_ROUTE_17] = { 0, 0, 1, 1, sMapName_Route17},
- [MAPSEC_ROUTE_18] = { 0, 0, 1, 1, sMapName_Route18},
- [MAPSEC_ROUTE_19] = { 0, 0, 1, 1, sMapName_Route19},
- [MAPSEC_ROUTE_20] = { 0, 0, 1, 1, sMapName_Route20},
- [MAPSEC_ROUTE_21] = { 0, 0, 1, 1, sMapName_Route21},
- [MAPSEC_ROUTE_22] = { 0, 0, 1, 1, sMapName_Route22},
- [MAPSEC_ROUTE_23] = { 0, 0, 1, 1, sMapName_Route23},
- [MAPSEC_ROUTE_24] = { 0, 0, 1, 1, sMapName_Route24},
- [MAPSEC_ROUTE_25] = { 0, 0, 1, 1, sMapName_Route25},
- [MAPSEC_VIRIDIAN_FOREST] = { 0, 0, 1, 1, sMapName_ViridianForest},
- [MAPSEC_MT_MOON] = { 0, 0, 1, 1, sMapName_MtMoon},
- [MAPSEC_S_S_ANNE] = { 0, 0, 1, 1, sMapName_SSAnne},
- [MAPSEC_UNDERGROUND_PATH] = { 0, 0, 1, 1, sMapName_UndergroundPath},
- [MAPSEC_UNDERGROUND_PATH_2] = { 0, 0, 1, 1, sMapName_UndergroundPath2},
- [MAPSEC_DIGLETTS_CAVE] = { 0, 0, 1, 1, sMapName_DiglettsCave},
- [MAPSEC_KANTO_VICTORY_ROAD] = { 0, 0, 1, 1, sMapName_KantoVictoryRoad},
- [MAPSEC_ROCKET_HIDEOUT] = { 0, 0, 1, 1, sMapName_RocketHideout},
- [MAPSEC_SILPH_CO] = { 0, 0, 1, 1, sMapName_SilphCo},
- [MAPSEC_POKEMON_MANSION] = { 0, 0, 1, 1, sMapName_PokemonMansion},
- [MAPSEC_KANTO_SAFARI_ZONE] = { 0, 0, 1, 1, sMapName_KantoSafariZone},
- [MAPSEC_POKEMON_LEAGUE] = { 0, 0, 1, 1, sMapName_PokemonLeague},
- [MAPSEC_ROCK_TUNNEL] = { 0, 0, 1, 1, sMapName_RockTunnel},
- [MAPSEC_SEAFOAM_ISLANDS] = { 0, 0, 1, 1, sMapName_SeafoamIslands},
- [MAPSEC_POKEMON_TOWER] = { 0, 0, 1, 1, sMapName_PokemonTower},
- [MAPSEC_CERULEAN_CAVE] = { 0, 0, 1, 1, sMapName_CeruleanCave},
- [MAPSEC_POWER_PLANT] = { 0, 0, 1, 1, sMapName_PowerPlant},
- [MAPSEC_ONE_ISLAND] = { 0, 0, 1, 1, sMapName_OneIsland},
- [MAPSEC_TWO_ISLAND] = { 0, 0, 1, 1, sMapName_TwoIsland},
- [MAPSEC_THREE_ISLAND] = { 0, 0, 1, 1, sMapName_ThreeIsland},
- [MAPSEC_FOUR_ISLAND] = { 0, 0, 1, 1, sMapName_FourIsland},
- [MAPSEC_FIVE_ISLAND] = { 0, 0, 1, 1, sMapName_FiveIsland},
- [MAPSEC_SEVEN_ISLAND] = { 0, 0, 1, 1, sMapName_SevenIsland},
- [MAPSEC_SIX_ISLAND] = { 0, 0, 1, 1, sMapName_SixIsland},
- [MAPSEC_KINDLE_ROAD] = { 0, 0, 1, 1, sMapName_KindleRoad},
- [MAPSEC_TREASURE_BEACH] = { 0, 0, 1, 1, sMapName_TreasureBeach},
- [MAPSEC_CAPE_BRINK] = { 0, 0, 1, 1, sMapName_CapeBrink},
- [MAPSEC_BOND_BRIDGE] = { 0, 0, 1, 1, sMapName_BondBridge},
- [MAPSEC_THREE_ISLE_PORT] = { 0, 0, 1, 1, sMapName_ThreeIslePort},
- [MAPSEC_SEVII_ISLE_6] = { 0, 0, 1, 1, sMapName_SeviiIsle6},
- [MAPSEC_SEVII_ISLE_7] = { 0, 0, 1, 1, sMapName_SeviiIsle7},
- [MAPSEC_SEVII_ISLE_8] = { 0, 0, 1, 1, sMapName_SeviiIsle8},
- [MAPSEC_SEVII_ISLE_9] = { 0, 0, 1, 1, sMapName_SeviiIsle9},
- [MAPSEC_RESORT_GORGEOUS] = { 0, 0, 1, 1, sMapName_ResortGorgeous},
- [MAPSEC_WATER_LABYRINTH] = { 0, 0, 1, 1, sMapName_WaterLabyrinth},
- [MAPSEC_FIVE_ISLE_MEADOW] = { 0, 0, 1, 1, sMapName_FiveIsleMeadow},
- [MAPSEC_MEMORIAL_PILLAR] = { 0, 0, 1, 1, sMapName_MemorialPillar},
- [MAPSEC_OUTCAST_ISLAND] = { 0, 0, 1, 1, sMapName_OutcastIsland},
- [MAPSEC_GREEN_PATH] = { 0, 0, 1, 1, sMapName_GreenPath},
- [MAPSEC_WATER_PATH] = { 0, 0, 1, 1, sMapName_WaterPath},
- [MAPSEC_RUIN_VALLEY] = { 0, 0, 1, 1, sMapName_RuinValley},
- [MAPSEC_TRAINER_TOWER] = { 0, 0, 1, 1, sMapName_TrainerTower},
- [MAPSEC_CANYON_ENTRANCE] = { 0, 0, 1, 1, sMapName_CanyonEntrance},
- [MAPSEC_SEVAULT_CANYON] = { 0, 0, 1, 1, sMapName_SevaultCanyon},
- [MAPSEC_TANOBY_RUINS] = { 0, 0, 1, 1, sMapName_TanobyRuins},
- [MAPSEC_SEVII_ISLE_22] = { 0, 0, 1, 1, sMapName_SeviiIsle22},
- [MAPSEC_SEVII_ISLE_23] = { 0, 0, 1, 1, sMapName_SeviiIsle23},
- [MAPSEC_SEVII_ISLE_24] = { 0, 0, 1, 1, sMapName_SeviiIsle24},
- [MAPSEC_NAVEL_ROCK_FRLG] = { 0, 0, 1, 1, sMapName_NavelRock},
- [MAPSEC_MT_EMBER] = { 0, 0, 1, 1, sMapName_MtEmber},
- [MAPSEC_BERRY_FOREST] = { 0, 0, 1, 1, sMapName_BerryForest},
- [MAPSEC_ICEFALL_CAVE] = { 0, 0, 1, 1, sMapName_IcefallCave},
- [MAPSEC_ROCKET_WAREHOUSE] = { 0, 0, 1, 1, sMapName_RocketWarehouse},
- [MAPSEC_TRAINER_TOWER_2] = { 0, 0, 1, 1, sMapName_TrainerTower2},
- [MAPSEC_DOTTED_HOLE] = { 0, 0, 1, 1, sMapName_DottedHole},
- [MAPSEC_LOST_CAVE] = { 0, 0, 1, 1, sMapName_LostCave},
- [MAPSEC_PATTERN_BUSH] = { 0, 0, 1, 1, sMapName_PatternBush},
- [MAPSEC_ALTERING_CAVE_FRLG] = { 0, 0, 1, 1, sMapName_AlteringCave},
- [MAPSEC_TANOBY_CHAMBERS] = { 0, 0, 1, 1, sMapName_TanobyChambers},
- [MAPSEC_THREE_ISLE_PATH] = { 0, 0, 1, 1, sMapName_ThreeIslePath},
- [MAPSEC_TANOBY_KEY] = { 0, 0, 1, 1, sMapName_TanobyKey},
- [MAPSEC_BIRTH_ISLAND_FRLG] = { 0, 0, 1, 1, sMapName_BirthIsland},
- [MAPSEC_MONEAN_CHAMBER] = { 0, 0, 1, 1, sMapName_MoneanChamber},
- [MAPSEC_LIPTOO_CHAMBER] = { 0, 0, 1, 1, sMapName_LiptooChamber},
- [MAPSEC_WEEPTH_CHAMBER] = { 0, 0, 1, 1, sMapName_WeepthChamber},
- [MAPSEC_DILFORD_CHAMBER] = { 0, 0, 1, 1, sMapName_DilfordChamber},
- [MAPSEC_SCUFIB_CHAMBER] = { 0, 0, 1, 1, sMapName_ScufibChamber},
- [MAPSEC_RIXY_CHAMBER] = { 0, 0, 1, 1, sMapName_RixyChamber},
- [MAPSEC_VIAPOIS_CHAMBER] = { 0, 0, 1, 1, sMapName_ViapoisChamber},
- [MAPSEC_EMBER_SPA] = { 0, 0, 1, 1, sMapName_EmberSpa},
- [MAPSEC_SPECIAL_AREA] = { 0, 0, 1, 1, sMapName_SpecialArea},
- [MAPSEC_AQUA_HIDEOUT] = {19, 3, 1, 1, sMapName_AquaHideout},
- [MAPSEC_MAGMA_HIDEOUT] = { 6, 3, 1, 1, sMapName_MagmaHideout},
- [MAPSEC_MIRAGE_TOWER] = { 8, 2, 1, 1, sMapName_MirageTower},
- [MAPSEC_BIRTH_ISLAND] = { 0, 0, 1, 1, sMapName_BirthIsland},
- [MAPSEC_FARAWAY_ISLAND] = { 0, 0, 1, 1, sMapName_FarawayIsland},
- [MAPSEC_ARTISAN_CAVE] = {22, 12, 1, 1, sMapName_ArtisanCave},
- [MAPSEC_MARINE_CAVE] = { 0, 0, 1, 1, sMapName_MarineCave},
- [MAPSEC_UNDERWATER_MARINE_CAVE] = { 0, 0, 1, 1, sMapName_Underwater},
- [MAPSEC_TERRA_CAVE] = { 0, 0, 1, 1, sMapName_TerraCave},
- [MAPSEC_UNDERWATER_TERRA_CAVE] = { 0, 10, 1, 3, sMapName_Underwater},
- [MAPSEC_UNDERWATER_UNK1] = {24, 3, 2, 2, sMapName_Underwater},
- [MAPSEC_UNDERWATER_129] = {24, 10, 2, 1, sMapName_Underwater},
- [MAPSEC_DESERT_UNDERPASS] = { 2, 0, 1, 1, sMapName_DesertUnderpass},
- [MAPSEC_ALTERING_CAVE] = { 6, 8, 1, 1, sMapName_AlteringCave},
- [MAPSEC_NAVEL_ROCK] = { 0, 0, 1, 1, sMapName_NavelRock},
- [MAPSEC_TRAINER_HILL] = { 8, 4, 1, 1, sMapName_TrainerHill}
+ [MAPSEC_LITTLEROOT_TOWN] = { 4, 11, 1, 1, sMapName_LittlerootTown},
+ [MAPSEC_OLDALE_TOWN] = { 4, 9, 1, 1, sMapName_OldaleTown},
+ [MAPSEC_DEWFORD_TOWN] = { 2, 14, 1, 1, sMapName_DewfordTown},
+ [MAPSEC_LAVARIDGE_TOWN] = { 5, 3, 1, 1, sMapName_LavaridgeTown},
+ [MAPSEC_FALLARBOR_TOWN] = { 3, 0, 1, 1, sMapName_FallarborTown},
+ [MAPSEC_VERDANTURF_TOWN] = { 4, 6, 1, 1, sMapName_VerdanturfTown},
+ [MAPSEC_PACIFIDLOG_TOWN] = {17, 10, 1, 1, sMapName_PacifidlogTown},
+ [MAPSEC_PETALBURG_CITY] = { 1, 9, 1, 1, sMapName_PetalburgCity},
+ [MAPSEC_SLATEPORT_CITY] = { 8, 10, 1, 2, sMapName_SlateportCity},
+ [MAPSEC_MAUVILLE_CITY] = { 8, 6, 2, 1, sMapName_MauvilleCity},
+ [MAPSEC_RUSTBORO_CITY] = { 0, 5, 1, 2, sMapName_RustboroCity},
+ [MAPSEC_FORTREE_CITY] = {12, 0, 1, 1, sMapName_FortreeCity},
+ [MAPSEC_LILYCOVE_CITY] = {18, 3, 2, 1, sMapName_LilycoveCity},
+ [MAPSEC_MOSSDEEP_CITY] = {24, 5, 2, 1, sMapName_MossdeepCity},
+ [MAPSEC_SOOTOPOLIS_CITY] = {21, 7, 1, 1, sMapName_SootopolisCity},
+ [MAPSEC_EVER_GRANDE_CITY] = {27, 8, 1, 2, sMapName_EverGrandeCity},
+ [MAPSEC_ROUTE_101] = { 4, 10, 1, 1, sMapName_Route101},
+ [MAPSEC_ROUTE_102] = { 2, 9, 2, 1, sMapName_Route102},
+ [MAPSEC_ROUTE_103] = { 4, 8, 4, 1, sMapName_Route103},
+ [MAPSEC_ROUTE_104] = { 0, 7, 1, 3, sMapName_Route104},
+ [MAPSEC_ROUTE_105] = { 0, 10, 1, 3, sMapName_Route105},
+ [MAPSEC_ROUTE_106] = { 0, 13, 2, 1, sMapName_Route106},
+ [MAPSEC_ROUTE_107] = { 3, 14, 3, 1, sMapName_Route107},
+ [MAPSEC_ROUTE_108] = { 6, 14, 2, 1, sMapName_Route108},
+ [MAPSEC_ROUTE_109] = { 8, 12, 1, 3, sMapName_Route109},
+ [MAPSEC_ROUTE_110] = { 8, 7, 1, 3, sMapName_Route110},
+ [MAPSEC_ROUTE_111] = { 8, 0, 1, 6, sMapName_Route111},
+ [MAPSEC_ROUTE_112] = { 6, 3, 2, 1, sMapName_Route112},
+ [MAPSEC_ROUTE_113] = { 4, 0, 4, 1, sMapName_Route113},
+ [MAPSEC_ROUTE_114] = { 1, 0, 2, 3, sMapName_Route114},
+ [MAPSEC_ROUTE_115] = { 0, 2, 1, 3, sMapName_Route115},
+ [MAPSEC_ROUTE_116] = { 1, 5, 4, 1, sMapName_Route116},
+ [MAPSEC_ROUTE_117] = { 5, 6, 3, 1, sMapName_Route117},
+ [MAPSEC_ROUTE_118] = {10, 6, 2, 1, sMapName_Route118},
+ [MAPSEC_ROUTE_119] = {11, 0, 1, 6, sMapName_Route119},
+ [MAPSEC_ROUTE_120] = {13, 0, 1, 4, sMapName_Route120},
+ [MAPSEC_ROUTE_121] = {14, 3, 4, 1, sMapName_Route121},
+ [MAPSEC_ROUTE_122] = {16, 4, 1, 2, sMapName_Route122},
+ [MAPSEC_ROUTE_123] = {12, 6, 5, 1, sMapName_Route123},
+ [MAPSEC_ROUTE_124] = {20, 3, 4, 3, sMapName_Route124},
+ [MAPSEC_ROUTE_125] = {24, 3, 2, 2, sMapName_Route125},
+ [MAPSEC_ROUTE_126] = {20, 6, 3, 3, sMapName_Route126},
+ [MAPSEC_ROUTE_127] = {23, 6, 3, 3, sMapName_Route127},
+ [MAPSEC_ROUTE_128] = {23, 9, 4, 1, sMapName_Route128},
+ [MAPSEC_ROUTE_129] = {24, 10, 2, 1, sMapName_Route129},
+ [MAPSEC_ROUTE_130] = {21, 10, 3, 1, sMapName_Route130},
+ [MAPSEC_ROUTE_131] = {18, 10, 3, 1, sMapName_Route131},
+ [MAPSEC_ROUTE_132] = {15, 10, 2, 1, sMapName_Route132},
+ [MAPSEC_ROUTE_133] = {12, 10, 3, 1, sMapName_Route133},
+ [MAPSEC_ROUTE_134] = { 9, 10, 3, 1, sMapName_Route134},
+ [MAPSEC_UNDERWATER_124] = {20, 3, 4, 3, sMapName_Underwater},
+ [MAPSEC_UNDERWATER_126] = {20, 6, 3, 3, sMapName_Underwater},
+ [MAPSEC_UNDERWATER_127] = {23, 6, 3, 3, sMapName_Underwater},
+ [MAPSEC_UNDERWATER_128] = {23, 9, 4, 1, sMapName_Underwater},
+ [MAPSEC_UNDERWATER_SOOTOPOLIS] = {21, 7, 1, 1, sMapName_Underwater},
+ [MAPSEC_GRANITE_CAVE] = { 1, 13, 1, 1, sMapName_GraniteCave},
+ [MAPSEC_MT_CHIMNEY] = { 6, 2, 1, 1, sMapName_MtChimney},
+ [MAPSEC_SAFARI_ZONE] = {16, 2, 1, 1, sMapName_SafariZone},
+ [MAPSEC_BATTLE_FRONTIER] = {22, 12, 1, 1, sMapName_BattleFrontier},
+ [MAPSEC_PETALBURG_WOODS] = { 0, 8, 1, 1, sMapName_PetalburgWoods},
+ [MAPSEC_RUSTURF_TUNNEL] = { 2, 5, 1, 1, sMapName_RusturfTunnel},
+ [MAPSEC_ABANDONED_SHIP] = { 6, 14, 1, 1, sMapName_AbandonedShip},
+ [MAPSEC_NEW_MAUVILLE] = { 8, 7, 1, 1, sMapName_NewMauville},
+ [MAPSEC_METEOR_FALLS] = { 0, 3, 1, 1, sMapName_MeteorFalls},
+ [MAPSEC_METEOR_FALLS2] = { 1, 2, 1, 1, sMapName_MeteorFalls},
+ [MAPSEC_MT_PYRE] = {16, 4, 1, 1, sMapName_MtPyre},
+ [MAPSEC_AQUA_HIDEOUT_OLD] = {19, 3, 1, 1, sMapName_AquaHideoutOld},
+ [MAPSEC_SHOAL_CAVE] = {24, 4, 1, 1, sMapName_ShoalCave},
+ [MAPSEC_SEAFLOOR_CAVERN] = {24, 9, 1, 1, sMapName_SeafloorCavern},
+ [MAPSEC_UNDERWATER_SEAFLOOR_CAVERN] = {24, 9, 1, 1, sMapName_Underwater},
+ [MAPSEC_VICTORY_ROAD] = {27, 9, 1, 1, sMapName_VictoryRoad},
+ [MAPSEC_MIRAGE_ISLAND] = {17, 10, 1, 1, sMapName_MirageIsland},
+ [MAPSEC_CAVE_OF_ORIGIN] = {21, 7, 1, 1, sMapName_CaveOfOrigin},
+ [MAPSEC_SOUTHERN_ISLAND] = {12, 14, 1, 1, sMapName_SouthernIsland},
+ [MAPSEC_FIERY_PATH] = { 6, 3, 1, 1, sMapName_FieryPath},
+ [MAPSEC_FIERY_PATH2] = { 7, 3, 1, 1, sMapName_FieryPath},
+ [MAPSEC_JAGGED_PASS] = { 6, 3, 1, 1, sMapName_JaggedPass},
+ [MAPSEC_JAGGED_PASS2] = { 7, 2, 1, 1, sMapName_JaggedPass},
+ [MAPSEC_SEALED_CHAMBER] = {11, 10, 1, 1, sMapName_SealedChamber},
+ [MAPSEC_UNDERWATER_SEALED_CHAMBER] = {11, 10, 1, 1, sMapName_Underwater},
+ [MAPSEC_SCORCHED_SLAB] = {13, 0, 1, 1, sMapName_ScorchedSlab},
+ [MAPSEC_ISLAND_CAVE] = { 0, 10, 1, 1, sMapName_IslandCave},
+ [MAPSEC_DESERT_RUINS] = { 8, 3, 1, 1, sMapName_DesertRuins},
+ [MAPSEC_ANCIENT_TOMB] = {13, 2, 1, 1, sMapName_AncientTomb},
+ [MAPSEC_INSIDE_OF_TRUCK] = { 0, 0, 1, 1, sMapName_InsideOfTruck},
+ [MAPSEC_SKY_PILLAR] = {19, 10, 1, 1, sMapName_SkyPillar},
+ [MAPSEC_SECRET_BASE] = { 0, 0, 1, 1, sMapName_SecretBase},
+ [MAPSEC_DYNAMIC] = { 0, 0, 1, 1, sMapName_None},
+ [MAPSEC_PALLET_TOWN] = { 0, 0, 1, 1, sMapName_PalletTown},
+ [MAPSEC_VIRIDIAN_CITY] = { 0, 0, 1, 1, sMapName_ViridianCity},
+ [MAPSEC_PEWTER_CITY] = { 0, 0, 1, 1, sMapName_PewterCity},
+ [MAPSEC_CERULEAN_CITY] = { 0, 0, 1, 1, sMapName_CeruleanCity},
+ [MAPSEC_LAVENDER_TOWN] = { 0, 0, 1, 1, sMapName_LavenderTown},
+ [MAPSEC_VERMILION_CITY] = { 0, 0, 1, 1, sMapName_VermilionCity},
+ [MAPSEC_CELADON_CITY] = { 0, 0, 1, 1, sMapName_CeladonCity},
+ [MAPSEC_FUCHSIA_CITY] = { 0, 0, 1, 1, sMapName_FuchsiaCity},
+ [MAPSEC_CINNABAR_ISLAND] = { 0, 0, 1, 1, sMapName_CinnabarIsland},
+ [MAPSEC_INDIGO_PLATEAU] = { 0, 0, 1, 1, sMapName_IndigoPlateau},
+ [MAPSEC_SAFFRON_CITY] = { 0, 0, 1, 1, sMapName_SaffronCity},
+ [MAPSEC_ROUTE_4_FLYDUP] = { 0, 0, 1, 1, sMapName_Route4},
+ [MAPSEC_ROUTE_10_FLYDUP] = { 0, 0, 1, 1, sMapName_Route10},
+ [MAPSEC_ROUTE_1] = { 0, 0, 1, 1, sMapName_Route1},
+ [MAPSEC_ROUTE_2] = { 0, 0, 1, 1, sMapName_Route2},
+ [MAPSEC_ROUTE_3] = { 0, 0, 1, 1, sMapName_Route3},
+ [MAPSEC_ROUTE_4] = { 0, 0, 1, 1, sMapName_Route4_2},
+ [MAPSEC_ROUTE_5] = { 0, 0, 1, 1, sMapName_Route5},
+ [MAPSEC_ROUTE_6] = { 0, 0, 1, 1, sMapName_Route6},
+ [MAPSEC_ROUTE_7] = { 0, 0, 1, 1, sMapName_Route7},
+ [MAPSEC_ROUTE_8] = { 0, 0, 1, 1, sMapName_Route8},
+ [MAPSEC_ROUTE_9] = { 0, 0, 1, 1, sMapName_Route9},
+ [MAPSEC_ROUTE_10] = { 0, 0, 1, 1, sMapName_Route10_2},
+ [MAPSEC_ROUTE_11] = { 0, 0, 1, 1, sMapName_Route11},
+ [MAPSEC_ROUTE_12] = { 0, 0, 1, 1, sMapName_Route12},
+ [MAPSEC_ROUTE_13] = { 0, 0, 1, 1, sMapName_Route13},
+ [MAPSEC_ROUTE_14] = { 0, 0, 1, 1, sMapName_Route14},
+ [MAPSEC_ROUTE_15] = { 0, 0, 1, 1, sMapName_Route15},
+ [MAPSEC_ROUTE_16] = { 0, 0, 1, 1, sMapName_Route16},
+ [MAPSEC_ROUTE_17] = { 0, 0, 1, 1, sMapName_Route17},
+ [MAPSEC_ROUTE_18] = { 0, 0, 1, 1, sMapName_Route18},
+ [MAPSEC_ROUTE_19] = { 0, 0, 1, 1, sMapName_Route19},
+ [MAPSEC_ROUTE_20] = { 0, 0, 1, 1, sMapName_Route20},
+ [MAPSEC_ROUTE_21] = { 0, 0, 1, 1, sMapName_Route21},
+ [MAPSEC_ROUTE_22] = { 0, 0, 1, 1, sMapName_Route22},
+ [MAPSEC_ROUTE_23] = { 0, 0, 1, 1, sMapName_Route23},
+ [MAPSEC_ROUTE_24] = { 0, 0, 1, 1, sMapName_Route24},
+ [MAPSEC_ROUTE_25] = { 0, 0, 1, 1, sMapName_Route25},
+ [MAPSEC_VIRIDIAN_FOREST] = { 0, 0, 1, 1, sMapName_ViridianForest},
+ [MAPSEC_MT_MOON] = { 0, 0, 1, 1, sMapName_MtMoon},
+ [MAPSEC_S_S_ANNE] = { 0, 0, 1, 1, sMapName_SSAnne},
+ [MAPSEC_UNDERGROUND_PATH] = { 0, 0, 1, 1, sMapName_UndergroundPath},
+ [MAPSEC_UNDERGROUND_PATH_2] = { 0, 0, 1, 1, sMapName_UndergroundPath2},
+ [MAPSEC_DIGLETTS_CAVE] = { 0, 0, 1, 1, sMapName_DiglettsCave},
+ [MAPSEC_KANTO_VICTORY_ROAD] = { 0, 0, 1, 1, sMapName_KantoVictoryRoad},
+ [MAPSEC_ROCKET_HIDEOUT] = { 0, 0, 1, 1, sMapName_RocketHideout},
+ [MAPSEC_SILPH_CO] = { 0, 0, 1, 1, sMapName_SilphCo},
+ [MAPSEC_POKEMON_MANSION] = { 0, 0, 1, 1, sMapName_PokemonMansion},
+ [MAPSEC_KANTO_SAFARI_ZONE] = { 0, 0, 1, 1, sMapName_KantoSafariZone},
+ [MAPSEC_POKEMON_LEAGUE] = { 0, 0, 1, 1, sMapName_PokemonLeague},
+ [MAPSEC_ROCK_TUNNEL] = { 0, 0, 1, 1, sMapName_RockTunnel},
+ [MAPSEC_SEAFOAM_ISLANDS] = { 0, 0, 1, 1, sMapName_SeafoamIslands},
+ [MAPSEC_POKEMON_TOWER] = { 0, 0, 1, 1, sMapName_PokemonTower},
+ [MAPSEC_CERULEAN_CAVE] = { 0, 0, 1, 1, sMapName_CeruleanCave},
+ [MAPSEC_POWER_PLANT] = { 0, 0, 1, 1, sMapName_PowerPlant},
+ [MAPSEC_ONE_ISLAND] = { 0, 0, 1, 1, sMapName_OneIsland},
+ [MAPSEC_TWO_ISLAND] = { 0, 0, 1, 1, sMapName_TwoIsland},
+ [MAPSEC_THREE_ISLAND] = { 0, 0, 1, 1, sMapName_ThreeIsland},
+ [MAPSEC_FOUR_ISLAND] = { 0, 0, 1, 1, sMapName_FourIsland},
+ [MAPSEC_FIVE_ISLAND] = { 0, 0, 1, 1, sMapName_FiveIsland},
+ [MAPSEC_SEVEN_ISLAND] = { 0, 0, 1, 1, sMapName_SevenIsland},
+ [MAPSEC_SIX_ISLAND] = { 0, 0, 1, 1, sMapName_SixIsland},
+ [MAPSEC_KINDLE_ROAD] = { 0, 0, 1, 1, sMapName_KindleRoad},
+ [MAPSEC_TREASURE_BEACH] = { 0, 0, 1, 1, sMapName_TreasureBeach},
+ [MAPSEC_CAPE_BRINK] = { 0, 0, 1, 1, sMapName_CapeBrink},
+ [MAPSEC_BOND_BRIDGE] = { 0, 0, 1, 1, sMapName_BondBridge},
+ [MAPSEC_THREE_ISLE_PORT] = { 0, 0, 1, 1, sMapName_ThreeIslePort},
+ [MAPSEC_SEVII_ISLE_6] = { 0, 0, 1, 1, sMapName_SeviiIsle6},
+ [MAPSEC_SEVII_ISLE_7] = { 0, 0, 1, 1, sMapName_SeviiIsle7},
+ [MAPSEC_SEVII_ISLE_8] = { 0, 0, 1, 1, sMapName_SeviiIsle8},
+ [MAPSEC_SEVII_ISLE_9] = { 0, 0, 1, 1, sMapName_SeviiIsle9},
+ [MAPSEC_RESORT_GORGEOUS] = { 0, 0, 1, 1, sMapName_ResortGorgeous},
+ [MAPSEC_WATER_LABYRINTH] = { 0, 0, 1, 1, sMapName_WaterLabyrinth},
+ [MAPSEC_FIVE_ISLE_MEADOW] = { 0, 0, 1, 1, sMapName_FiveIsleMeadow},
+ [MAPSEC_MEMORIAL_PILLAR] = { 0, 0, 1, 1, sMapName_MemorialPillar},
+ [MAPSEC_OUTCAST_ISLAND] = { 0, 0, 1, 1, sMapName_OutcastIsland},
+ [MAPSEC_GREEN_PATH] = { 0, 0, 1, 1, sMapName_GreenPath},
+ [MAPSEC_WATER_PATH] = { 0, 0, 1, 1, sMapName_WaterPath},
+ [MAPSEC_RUIN_VALLEY] = { 0, 0, 1, 1, sMapName_RuinValley},
+ [MAPSEC_TRAINER_TOWER] = { 0, 0, 1, 1, sMapName_TrainerTower},
+ [MAPSEC_CANYON_ENTRANCE] = { 0, 0, 1, 1, sMapName_CanyonEntrance},
+ [MAPSEC_SEVAULT_CANYON] = { 0, 0, 1, 1, sMapName_SevaultCanyon},
+ [MAPSEC_TANOBY_RUINS] = { 0, 0, 1, 1, sMapName_TanobyRuins},
+ [MAPSEC_SEVII_ISLE_22] = { 0, 0, 1, 1, sMapName_SeviiIsle22},
+ [MAPSEC_SEVII_ISLE_23] = { 0, 0, 1, 1, sMapName_SeviiIsle23},
+ [MAPSEC_SEVII_ISLE_24] = { 0, 0, 1, 1, sMapName_SeviiIsle24},
+ [MAPSEC_NAVEL_ROCK_FRLG] = { 0, 0, 1, 1, sMapName_NavelRock},
+ [MAPSEC_MT_EMBER] = { 0, 0, 1, 1, sMapName_MtEmber},
+ [MAPSEC_BERRY_FOREST] = { 0, 0, 1, 1, sMapName_BerryForest},
+ [MAPSEC_ICEFALL_CAVE] = { 0, 0, 1, 1, sMapName_IcefallCave},
+ [MAPSEC_ROCKET_WAREHOUSE] = { 0, 0, 1, 1, sMapName_RocketWarehouse},
+ [MAPSEC_TRAINER_TOWER_2] = { 0, 0, 1, 1, sMapName_TrainerTower2},
+ [MAPSEC_DOTTED_HOLE] = { 0, 0, 1, 1, sMapName_DottedHole},
+ [MAPSEC_LOST_CAVE] = { 0, 0, 1, 1, sMapName_LostCave},
+ [MAPSEC_PATTERN_BUSH] = { 0, 0, 1, 1, sMapName_PatternBush},
+ [MAPSEC_ALTERING_CAVE_FRLG] = { 0, 0, 1, 1, sMapName_AlteringCave},
+ [MAPSEC_TANOBY_CHAMBERS] = { 0, 0, 1, 1, sMapName_TanobyChambers},
+ [MAPSEC_THREE_ISLE_PATH] = { 0, 0, 1, 1, sMapName_ThreeIslePath},
+ [MAPSEC_TANOBY_KEY] = { 0, 0, 1, 1, sMapName_TanobyKey},
+ [MAPSEC_BIRTH_ISLAND_FRLG] = { 0, 0, 1, 1, sMapName_BirthIsland},
+ [MAPSEC_MONEAN_CHAMBER] = { 0, 0, 1, 1, sMapName_MoneanChamber},
+ [MAPSEC_LIPTOO_CHAMBER] = { 0, 0, 1, 1, sMapName_LiptooChamber},
+ [MAPSEC_WEEPTH_CHAMBER] = { 0, 0, 1, 1, sMapName_WeepthChamber},
+ [MAPSEC_DILFORD_CHAMBER] = { 0, 0, 1, 1, sMapName_DilfordChamber},
+ [MAPSEC_SCUFIB_CHAMBER] = { 0, 0, 1, 1, sMapName_ScufibChamber},
+ [MAPSEC_RIXY_CHAMBER] = { 0, 0, 1, 1, sMapName_RixyChamber},
+ [MAPSEC_VIAPOIS_CHAMBER] = { 0, 0, 1, 1, sMapName_ViapoisChamber},
+ [MAPSEC_EMBER_SPA] = { 0, 0, 1, 1, sMapName_EmberSpa},
+ [MAPSEC_SPECIAL_AREA] = { 0, 0, 1, 1, sMapName_SpecialArea},
+ [MAPSEC_AQUA_HIDEOUT] = {19, 3, 1, 1, sMapName_AquaHideout},
+ [MAPSEC_MAGMA_HIDEOUT] = { 6, 3, 1, 1, sMapName_MagmaHideout},
+ [MAPSEC_MIRAGE_TOWER] = { 8, 2, 1, 1, sMapName_MirageTower},
+ [MAPSEC_BIRTH_ISLAND] = { 0, 0, 1, 1, sMapName_BirthIsland},
+ [MAPSEC_FARAWAY_ISLAND] = { 0, 0, 1, 1, sMapName_FarawayIsland},
+ [MAPSEC_ARTISAN_CAVE] = {22, 12, 1, 1, sMapName_ArtisanCave},
+ [MAPSEC_MARINE_CAVE] = { 0, 0, 1, 1, sMapName_MarineCave},
+ [MAPSEC_UNDERWATER_MARINE_CAVE] = { 0, 0, 1, 1, sMapName_Underwater},
+ [MAPSEC_TERRA_CAVE] = { 0, 0, 1, 1, sMapName_TerraCave},
+ [MAPSEC_UNDERWATER_105] = { 0, 10, 1, 3, sMapName_Underwater},
+ [MAPSEC_UNDERWATER_125] = {24, 3, 2, 2, sMapName_Underwater},
+ [MAPSEC_UNDERWATER_129] = {24, 10, 2, 1, sMapName_Underwater},
+ [MAPSEC_DESERT_UNDERPASS] = { 2, 0, 1, 1, sMapName_DesertUnderpass},
+ [MAPSEC_ALTERING_CAVE] = { 6, 8, 1, 1, sMapName_AlteringCave},
+ [MAPSEC_NAVEL_ROCK] = { 0, 0, 1, 1, sMapName_NavelRock},
+ [MAPSEC_TRAINER_HILL] = { 8, 4, 1, 1, sMapName_TrainerHill}
};
#endif //GUARD_DATA_REGION_MAP_REGION_MAP_ENTRIES_H
diff --git a/src/data/text/nature_names.h b/src/data/text/nature_names.h
index d0d217d9b..601898445 100644
--- a/src/data/text/nature_names.h
+++ b/src/data/text/nature_names.h
@@ -24,7 +24,7 @@ static const u8 sSassyNatureName[] = _("SASSY");
static const u8 sCarefulNatureName[] = _("CAREFUL");
static const u8 sQuirkyNatureName[] = _("QUIRKY");
-const u8 *const gNatureNamePointers[] =
+const u8 *const gNatureNamePointers[NUM_NATURES] =
{
[NATURE_HARDY] = sHardyNatureName,
[NATURE_LONELY] = sLonelyNatureName,
diff --git a/src/data/union_room.h b/src/data/union_room.h
index 8cb0bc8aa..be7bfae71 100644
--- a/src/data/union_room.h
+++ b/src/data/union_room.h
@@ -50,27 +50,36 @@ const u8 sText_4PlayerMode[] = _("4-PLAYER\nMODE");
const u8 sText_5PlayerMode[] = _("5-PLAYER\nMODE");
static const u8 *const sPlayersNeededOrModeTexts[][5] = {
+ // 2 players required
{
sText_1PlayerNeeded,
sText_2PlayerMode
- }, {
+ },
+ // 4 players required
+ {
sText_3PlayersNeeded,
sText_2PlayersNeeded,
sText_1PlayerNeeded,
sText_4PlayerMode
- }, {
+ },
+ // 2-5 players required
+ {
sText_1PlayerNeeded,
sText_2PlayerMode,
sText_3PlayerMode,
sText_4PlayerMode,
sText_5PlayerMode
- }, {
+ },
+ // 3-5 players required
+ {
sText_2PlayersNeeded,
sText_1PlayerNeeded,
sText_3PlayerMode,
sText_4PlayerMode,
sText_5PlayerMode
- }, {
+ },
+ // 2-4 players required
+ {
sText_1PlayerNeeded,
sText_2PlayerMode,
sText_3PlayerMode,
@@ -90,15 +99,15 @@ ALIGNED(4) const u8 sText_OtherTrainerUnavailableNow[] = _("The other TRAINER do
ALIGNED(4) const u8 sText_CantTransmitTrainerTooFar[] = _("You can't transmit with a TRAINER\nwho is too far away.\p");
ALIGNED(4) const u8 sText_TrainersNotReadyYet[] = _("The other TRAINER(S) is/are not\nready yet.\p");
-const u8 *const sCantTransmitToTrainerTexts[] = {
- sText_CantTransmitTrainerTooFar,
- sText_TrainersNotReadyYet
+static const u8 *const sCantTransmitToTrainerTexts[] = {
+ [UR_TRADE_PLAYER_NOT_READY - 1] = sText_CantTransmitTrainerTooFar,
+ [UR_TRADE_PARTNER_NOT_READY - 1] = sText_TrainersNotReadyYet
};
ALIGNED(4) const u8 sText_ModeWithTheseMembersWillBeCanceled[] = _("The {STR_VAR_1} MODE with\nthese members will be canceled.{PAUSE 60}");
ALIGNED(4) const u8 sText_MemberNoLongerAvailable[] = _("There is a member who can no\nlonger remain available.\p");
-const u8 *const sPlayerUnavailableTexts[] = {
+static const u8 *const sPlayerUnavailableTexts[] = {
sText_OtherTrainerUnavailableNow,
sText_MemberNoLongerAvailable
};
@@ -111,17 +120,17 @@ ALIGNED(4) const u8 sText_AwaitingOtherMembers[] = _("{STR_VAR_1}!\nAwaiting oth
ALIGNED(4) const u8 sText_QuitBeingMember[] = _("Quit being a member?");
ALIGNED(4) const u8 sText_StoppedBeingMember[] = _("You stopped being a member.\p");
-const u8 *const sPlayerDisconnectedTexts[] = {
- NULL,
- sText_MemberNoLongerAvailable,
- sText_TrainerAppearsUnavailable,
- NULL,
- NULL,
- NULL,
- sText_PlayerRepliedNo,
- NULL,
- NULL,
- sText_StoppedBeingMember
+static const u8 *const sPlayerDisconnectedTexts[] = {
+ [RFU_STATUS_OK] = NULL,
+ [RFU_STATUS_FATAL_ERROR] = sText_MemberNoLongerAvailable,
+ [RFU_STATUS_CONNECTION_ERROR] = sText_TrainerAppearsUnavailable,
+ [RFU_STATUS_CHILD_SEND_COMPLETE] = NULL,
+ [RFU_STATUS_NEW_CHILD_DETECTED] = NULL,
+ [RFU_STATUS_JOIN_GROUP_OK] = NULL,
+ [RFU_STATUS_JOIN_GROUP_NO] = sText_PlayerRepliedNo,
+ [RFU_STATUS_WAIT_ACK_JOIN_GROUP] = NULL,
+ [RFU_STATUS_LEAVE_GROUP_NOTICE] = NULL,
+ [RFU_STATUS_LEAVE_GROUP] = sText_StoppedBeingMember
};
ALIGNED(4) const u8 sText_WirelessLinkEstablished[] = _("The WIRELESS COMMUNICATION\nSYSTEM link has been established.");
@@ -130,16 +139,16 @@ ALIGNED(4) const u8 sText_LinkWithFriendDropped[] = _("The link with your friend
ALIGNED(4) const u8 sText_PlayerRepliedNo2[] = _("{STR_VAR_1} replied, “No…”");
const u8 *const sLinkDroppedTexts[] = {
- NULL,
- sText_LinkWithFriendDropped,
- sText_LinkWithFriendDropped,
- NULL,
- NULL,
- NULL,
- sText_PlayerRepliedNo2,
- NULL,
- NULL,
- NULL
+ [RFU_STATUS_OK] = NULL,
+ [RFU_STATUS_FATAL_ERROR] = sText_LinkWithFriendDropped,
+ [RFU_STATUS_CONNECTION_ERROR] = sText_LinkWithFriendDropped,
+ [RFU_STATUS_CHILD_SEND_COMPLETE] = NULL,
+ [RFU_STATUS_NEW_CHILD_DETECTED] = NULL,
+ [RFU_STATUS_JOIN_GROUP_OK] = NULL,
+ [RFU_STATUS_JOIN_GROUP_NO] = sText_PlayerRepliedNo2,
+ [RFU_STATUS_WAIT_ACK_JOIN_GROUP] = NULL,
+ [RFU_STATUS_LEAVE_GROUP_NOTICE] = NULL,
+ [RFU_STATUS_LEAVE_GROUP] = NULL
};
ALIGNED(4) const u8 sText_DoYouWantXMode[] = _("Do you want the {STR_VAR_2}\nMODE?");
@@ -213,7 +222,7 @@ static const u8 *const sAwaitingResponseTexts[] = {
ALIGNED(4) const u8 sText_ShowTrainerCard[] = _("The other TRAINER showed\nyou their TRAINER CARD.\pWould you like to show your\nTRAINER CARD?");
ALIGNED(4) const u8 sText_BattleChallenge[] = _("The other TRAINER challenges you\nto battle.\pWill you accept the battle\nchallenge?");
ALIGNED(4) const u8 sText_ChatInvitation[] = _("The other TRAINER invites you\nto chat.\pWill you accept the chat\ninvitation?");
-ALIGNED(4) const u8 sText_OfferToTradeMon[] = _("There is an offer to trade your\nregistered Lv. {SPECIAL_F7 0x00} {SPECIAL_F7 0x01}\pin exchange for a\nLv. {SPECIAL_F7 0x02} {SPECIAL_F7 0x03}.\pWill you accept this trade\noffer?");
+ALIGNED(4) const u8 sText_OfferToTradeMon[] = _("There is an offer to trade your\nregistered Lv. {DYNAMIC 0} {DYNAMIC 1}\pin exchange for a\nLv. {DYNAMIC 2} {DYNAMIC 3}.\pWill you accept this trade\noffer?");
ALIGNED(4) const u8 sText_OfferToTradeEgg[] = _("There is an offer to trade your\nregistered EGG.\lWill you accept this trade offer?");
ALIGNED(4) const u8 sText_ChatDropped[] = _("The chat has been dropped.\p");
ALIGNED(4) const u8 sText_OfferDeclined1[] = _("You declined the offer.\p");
@@ -251,7 +260,7 @@ ALIGNED(4) const u8 sText_WaitForBattleFemale[] = _("A battle? Of course, but I
ALIGNED(4) const u8 sText_WaitForChatFemale[] = _("Did you want to chat?\nOkay, but please wait a moment.");
ALIGNED(4) const u8 sText_ShowTrainerCardFemale[] = _("As my introduction, I'll show you\nmy TRAINER CARD.");
-const u8 *const sText_WaitOrShowCardTexts[GENDER_COUNT][4] = {
+static const u8 *const sText_WaitOrShowCardTexts[GENDER_COUNT][4] = {
{
sText_WaitForBattleMale,
sText_WaitForChatMale,
@@ -274,7 +283,7 @@ ALIGNED(4) const u8 sText_TradeWillBeStarted[] = _("The trade will be started.{P
ALIGNED(4) const u8 sText_BattleWillBeStarted[] = _("The battle will be started.{PAUSE 60}");
ALIGNED(4) const u8 sText_EnteringChat[] = _("Entering the chat…{PAUSE 60}");
-const u8 *const sStartActivityTexts[][GENDER_COUNT][3] = {
+static const u8 *const sStartActivityTexts[][GENDER_COUNT][3] = {
{
{
sText_BattleWillBeStarted,
@@ -325,18 +334,21 @@ const u8 *const sIfYouWantToDoSomethingTexts[GENDER_COUNT] = {
ALIGNED(4) const u8 sText_TrainerBattleBusy[] = _("Whoops! Sorry, but I have to do\nsomething else.\lAnother time, okay?\p");
ALIGNED(4) const u8 sText_NeedTwoMonsOfLevel30OrLower1[] = _("If you want to battle, you need\ntwo POKéMON that are below\lLv. 30.\p");
ALIGNED(4) const u8 sText_NeedTwoMonsOfLevel30OrLower2[] = _("For a battle, you need two\nPOKéMON that are below Lv. 30.\p");
-ALIGNED(4) const u8 sText_DeclineBattleMale[] = _("Oh, all right.\nCome see me anytime, okay?\p");
-ALIGNED(4) const u8 stext_DeclineBattleFemale[] = _("Oh…\nPlease come by anytime.\p");
-static const u8 *const sDeclineBattleTexts[GENDER_COUNT] = {
- sText_DeclineBattleMale,
- stext_DeclineBattleFemale
+ALIGNED(4) const u8 sText_DeclineChatMale[] = _("Oh, all right.\nCome see me anytime, okay?\p");
+ALIGNED(4) const u8 stext_DeclineChatFemale[] = _("Oh…\nPlease come by anytime.\p");
+
+// Response from partner when player declines chat
+static const u8 *const sDeclineChatTexts[GENDER_COUNT] = {
+ sText_DeclineChatMale,
+ stext_DeclineChatFemale
};
ALIGNED(4) const u8 sText_ChatDeclinedMale[] = _("Oh, sorry!\nI just can't right this instant.\lLet's chat another time.\p");
ALIGNED(4) const u8 sText_ChatDeclinedFemale[] = _("Oh, I'm sorry.\nI have too much to do right now.\lLet's chat some other time.\p");
-const u8 *const sChatDeclinedTexts[GENDER_COUNT] = {
+// Response from partner when they decline chat
+static const u8 *const sChatDeclinedTexts[GENDER_COUNT] = {
sText_ChatDeclinedMale,
sText_ChatDeclinedFemale
};
@@ -484,8 +496,8 @@ static const u8 *const sChooseTrainerTexts[NUM_LINK_GROUP_TYPES] =
[LINK_GROUP_BERRY_PICKING] = sText_ChooseLeaderBerryPicking,
[LINK_GROUP_WONDER_CARD] = sText_ChooseTrainerToShareWonderCards,
[LINK_GROUP_WONDER_NEWS] = sText_ChooseTrainerToShareWonderNews,
- [LINK_GROUP_UNK_9] = NULL,
- [LINK_GROUP_UNK_10] = NULL,
+ [LINK_GROUP_UNION_ROOM_RESUME] = NULL,
+ [LINK_GROUP_UNION_ROOM_INIT] = NULL,
[LINK_GROUP_UNK_11] = NULL,
[LINK_GROUP_RECORD_CORNER] = sText_ChooseLeaderRecordCorner,
[LINK_GROUP_BERRY_BLENDER] = sText_ChooseLeaderBerryBlender,
@@ -555,51 +567,51 @@ static const u8 *const sCardColorTexts[] = {
sText_ItsGoldCard
};
-ALIGNED(4) const u8 sText_TrainerCardInfoPage1[] = _("This is {SPECIAL_F7 0x00} {SPECIAL_F7 0x01}'s\nTRAINER CARD…\l{SPECIAL_F7 0x02}\pPOKéDEX: {SPECIAL_F7 0x03}\nTIME: {SPECIAL_F7 0x04}:{SPECIAL_F7 0x05}\p");
-ALIGNED(4) const u8 sText_TrainerCardInfoPage2[] = _("BATTLES: WINS: {SPECIAL_F7 0x00} LOSSES: {SPECIAL_F7 0x02}\nTRADES: {SPECIAL_F7 0x03}\p“{SPECIAL_F7 0x04} {SPECIAL_F7 0x05}\n{SPECIAL_F7 0x06} {SPECIAL_F7 0x07}”\p");
-ALIGNED(4) const u8 sText_GladToMeetYouMale[] = _("{SPECIAL_F7 0x01}: Glad to have met you!{PAUSE 60}");
-ALIGNED(4) const u8 sText_GladToMeetYouFemale[] = _("{SPECIAL_F7 0x01}: Glad to meet you!{PAUSE 60}");
+ALIGNED(4) const u8 sText_TrainerCardInfoPage1[] = _("This is {DYNAMIC 0} {DYNAMIC 1}'s\nTRAINER CARD…\l{DYNAMIC 2}\pPOKéDEX: {DYNAMIC 3}\nTIME: {DYNAMIC 4}:{DYNAMIC 5}\p");
+ALIGNED(4) const u8 sText_TrainerCardInfoPage2[] = _("BATTLES: WINS: {DYNAMIC 0} LOSSES: {DYNAMIC 2}\nTRADES: {DYNAMIC 3}\p“{DYNAMIC 4} {DYNAMIC 5}\n{DYNAMIC 6} {DYNAMIC 7}”\p");
+ALIGNED(4) const u8 sText_GladToMeetYouMale[] = _("{DYNAMIC 1}: Glad to have met you!{PAUSE 60}");
+ALIGNED(4) const u8 sText_GladToMeetYouFemale[] = _("{DYNAMIC 1}: Glad to meet you!{PAUSE 60}");
const u8 *const sGladToMeetYouTexts[GENDER_COUNT] = {
sText_GladToMeetYouMale,
sText_GladToMeetYouFemale
};
-ALIGNED(4) const u8 sText_FinishedCheckingPlayersTrainerCard[] = _("Finished checking {SPECIAL_F7 0x01}'s\nTRAINER CARD.{PAUSE 60}");
-
-const u8 *const sLinkGroupActivityTexts[] = {
- sText_EmptyString,
- sText_SingleBattle,
- sText_DoubleBattle,
- sText_MultiBattle,
- sText_PokemonTrades,
- sText_Chat,
- sText_WonderCards,
- sText_WonderNews,
- sText_Cards,
- sText_PokemonJump,
- sText_BerryCrush,
- sText_BerryPicking,
- sText_Search,
- sText_EmptyString,
- sText_BattleTowerOpenLv,
- sText_RecordCorner,
- sText_BerryBlender,
- sText_EmptyString,
- sText_EmptyString,
- sText_EmptyString,
- sText_EmptyString,
- sText_WonderCards,
- sText_WonderNews,
- sText_CoolContest,
- sText_BeautyContest,
- sText_CuteContest,
- sText_SmartContest,
- sText_ToughContest,
- sText_BattleTowerLv50
+ALIGNED(4) const u8 sText_FinishedCheckingPlayersTrainerCard[] = _("Finished checking {DYNAMIC 1}'s\nTRAINER CARD.{PAUSE 60}");
+
+static const u8 *const sLinkGroupActivityNameTexts[] = {
+ [ACTIVITY_NONE] = sText_EmptyString,
+ [ACTIVITY_BATTLE_SINGLE] = sText_SingleBattle,
+ [ACTIVITY_BATTLE_DOUBLE] = sText_DoubleBattle,
+ [ACTIVITY_BATTLE_MULTI] = sText_MultiBattle,
+ [ACTIVITY_TRADE] = sText_PokemonTrades,
+ [ACTIVITY_CHAT] = sText_Chat,
+ [ACTIVITY_WONDER_CARD] = sText_WonderCards,
+ [ACTIVITY_WONDER_NEWS] = sText_WonderNews,
+ [ACTIVITY_CARD] = sText_Cards,
+ [ACTIVITY_POKEMON_JUMP] = sText_PokemonJump,
+ [ACTIVITY_BERRY_CRUSH] = sText_BerryCrush,
+ [ACTIVITY_BERRY_PICK] = sText_BerryPicking,
+ [ACTIVITY_SEARCH] = sText_Search,
+ [ACTIVITY_SPIN_TRADE] = sText_EmptyString,
+ [ACTIVITY_BATTLE_TOWER_OPEN] = sText_BattleTowerOpenLv,
+ [ACTIVITY_RECORD_CORNER] = sText_RecordCorner,
+ [ACTIVITY_BERRY_BLENDER] = sText_BerryBlender,
+ [ACTIVITY_ACCEPT] = sText_EmptyString,
+ [ACTIVITY_DECLINE] = sText_EmptyString,
+ [ACTIVITY_NPCTALK] = sText_EmptyString,
+ [ACTIVITY_PLYRTALK] = sText_EmptyString,
+ [ACTIVITY_WONDER_CARD2] = sText_WonderCards,
+ [ACTIVITY_WONDER_NEWS2] = sText_WonderNews,
+ [ACTIVITY_CONTEST_COOL] = sText_CoolContest,
+ [ACTIVITY_CONTEST_BEAUTY] = sText_BeautyContest,
+ [ACTIVITY_CONTEST_CUTE] = sText_CuteContest,
+ [ACTIVITY_CONTEST_SMART] = sText_SmartContest,
+ [ACTIVITY_CONTEST_TOUGH] = sText_ToughContest,
+ [ACTIVITY_BATTLE_TOWER] = sText_BattleTowerLv50
};
-const struct WindowTemplate gUnknown_082F00BC = {
+static const struct WindowTemplate sWindowTemplate_BButtonCancel = {
.bg = 0x00,
.tilemapLeft = 0x00,
.tilemapTop = 0x00,
@@ -609,62 +621,69 @@ const struct WindowTemplate gUnknown_082F00BC = {
.baseBlock = 0x0008
};
-const u32 gUnknown_082F00C4[NUM_LINK_GROUP_TYPES] = {
- 0x0201,
- 0x0202,
- 0x0403,
- 0x0204,
- 0x2509,
- 0x250a,
- 0x350b,
- 0x0000,
- 0x0000,
- 0x0000,
- 0x0000,
- 0x0000,
- 0x240f,
- 0x2410,
- 0x0000,
- 0x2417,
- 0x2418,
- 0x2419,
- 0x241a,
- 0x241b,
- 0x021c,
- 0x020e
+// Minimum and maximum number of players for a link group
+// A minimum of 0 means the min and max are equal
+#define LINK_GROUP_CAPACITY(min, max)(((min) << 12) | ((max) << 8))
+#define GROUP_MAX(capacity)(capacity & 0x0F)
+#define GROUP_MIN(capacity)(capacity >> 4)
+#define GROUP_MIN2(capacity)(capacity & 0xF0) // Unnecessary to have both, but needed to match
+
+static const u32 sLinkGroupToActivityAndCapacity[NUM_LINK_GROUP_TYPES] = {
+ [LINK_GROUP_SINGLE_BATTLE] = ACTIVITY_BATTLE_SINGLE | LINK_GROUP_CAPACITY(0, 2),
+ [LINK_GROUP_DOUBLE_BATTLE] = ACTIVITY_BATTLE_DOUBLE | LINK_GROUP_CAPACITY(0, 2),
+ [LINK_GROUP_MULTI_BATTLE] = ACTIVITY_BATTLE_MULTI | LINK_GROUP_CAPACITY(0, 4),
+ [LINK_GROUP_TRADE] = ACTIVITY_TRADE | LINK_GROUP_CAPACITY(0, 2),
+ [LINK_GROUP_POKEMON_JUMP] = ACTIVITY_POKEMON_JUMP | LINK_GROUP_CAPACITY(2, 5),
+ [LINK_GROUP_BERRY_CRUSH] = ACTIVITY_BERRY_CRUSH | LINK_GROUP_CAPACITY(2, 5),
+ [LINK_GROUP_BERRY_PICKING] = ACTIVITY_BERRY_PICK | LINK_GROUP_CAPACITY(3, 5),
+ [LINK_GROUP_WONDER_CARD] = ACTIVITY_NONE | LINK_GROUP_CAPACITY(0, 0),
+ [LINK_GROUP_WONDER_NEWS] = ACTIVITY_NONE | LINK_GROUP_CAPACITY(0, 0),
+ [LINK_GROUP_UNION_ROOM_RESUME] = ACTIVITY_NONE | LINK_GROUP_CAPACITY(0, 0),
+ [LINK_GROUP_UNION_ROOM_INIT] = ACTIVITY_NONE | LINK_GROUP_CAPACITY(0, 0),
+ [LINK_GROUP_UNK_11] = ACTIVITY_NONE | LINK_GROUP_CAPACITY(0, 0),
+ [LINK_GROUP_RECORD_CORNER] = ACTIVITY_RECORD_CORNER | LINK_GROUP_CAPACITY(2, 4),
+ [LINK_GROUP_BERRY_BLENDER] = ACTIVITY_BERRY_BLENDER | LINK_GROUP_CAPACITY(2, 4),
+ [LINK_GROUP_UNK_14] = ACTIVITY_NONE | LINK_GROUP_CAPACITY(0, 0),
+ [LINK_GROUP_COOL_CONTEST] = ACTIVITY_CONTEST_COOL | LINK_GROUP_CAPACITY(2, 4),
+ [LINK_GROUP_BEAUTY_CONTEST] = ACTIVITY_CONTEST_BEAUTY | LINK_GROUP_CAPACITY(2, 4),
+ [LINK_GROUP_CUTE_CONTEST] = ACTIVITY_CONTEST_CUTE | LINK_GROUP_CAPACITY(2, 4),
+ [LINK_GROUP_SMART_CONTEST] = ACTIVITY_CONTEST_SMART | LINK_GROUP_CAPACITY(2, 4),
+ [LINK_GROUP_TOUGH_CONTEST] = ACTIVITY_CONTEST_TOUGH | LINK_GROUP_CAPACITY(2, 4),
+ [LINK_GROUP_BATTLE_TOWER] = ACTIVITY_BATTLE_TOWER | LINK_GROUP_CAPACITY(0, 2),
+ [LINK_GROUP_BATTLE_TOWER_OPEN] = ACTIVITY_BATTLE_TOWER_OPEN | LINK_GROUP_CAPACITY(0, 2)
};
-const struct WindowTemplate gUnknown_082F011C = {
- .bg = 0x00,
- .tilemapLeft = 0x01,
- .tilemapTop = 0x03,
- .width = 0x0d,
- .height = 0x08,
- .paletteNum = 0x0f,
+static const struct WindowTemplate sWindowTemplate_PlayerList = {
+ .bg = 0,
+ .tilemapLeft = 1,
+ .tilemapTop = 3,
+ .width = 13,
+ .height = 8,
+ .paletteNum = 15,
.baseBlock = 0x0044
};
-const struct WindowTemplate gUnknown_082F0124 = {
- .bg = 0x00,
- .tilemapLeft = 0x01,
- .tilemapTop = 0x03,
- .width = 0x0d,
- .height = 0x0a,
- .paletteNum = 0x0f,
+static const struct WindowTemplate sWindowTemplate_5PlayerList = {
+ .bg = 0,
+ .tilemapLeft = 1,
+ .tilemapTop = 3,
+ .width = 13,
+ .height = 10,
+ .paletteNum = 15,
.baseBlock = 0x0044
};
-const struct WindowTemplate gUnknown_082F012C = {
- .bg = 0x00,
- .tilemapLeft = 0x10,
- .tilemapTop = 0x03,
- .width = 0x07,
- .height = 0x04,
- .paletteNum = 0x0f,
+static const struct WindowTemplate sWindowTemplate_NumPlayerMode = {
+ .bg = 0,
+ .tilemapLeft = 16,
+ .tilemapTop = 3,
+ .width = 7,
+ .height = 4,
+ .paletteNum = 15,
.baseBlock = 0x00c6
};
-const struct ListMenuItem gUnknown_082F0134[] = {
+static const struct ListMenuItem sPossibleGroupMembersListMenuItems[] = {
{ sText_EmptyString, 0 },
{ sText_EmptyString, 1 },
{ sText_EmptyString, 2 },
@@ -672,11 +691,11 @@ const struct ListMenuItem gUnknown_082F0134[] = {
{ sText_EmptyString, 4 }
};
-const struct ListMenuTemplate gUnknown_082F015C = {
- .items = gUnknown_082F0134,
+static const struct ListMenuTemplate sListMenuTemplate_PossibleGroupMembers = {
+ .items = sPossibleGroupMembersListMenuItems,
.moveCursorFunc = NULL,
- .itemPrintFunc = sub_8013278,
- .totalItems = 5,
+ .itemPrintFunc = ItemPrintFunc_PossibleGroupMembers,
+ .totalItems = ARRAY_COUNT(sPossibleGroupMembersListMenuItems),
.maxShowed = 5,
.windowId = 0,
.header_X = 0,
@@ -732,11 +751,11 @@ const struct ListMenuItem gUnknown_082F0184[] = {
{ sText_EmptyString, 15 }
};
-const struct ListMenuTemplate gUnknown_082F0204 = {
+static const struct ListMenuTemplate sListMenuTemplate_UnionRoomGroups = {
.items = gUnknown_082F0184,
.moveCursorFunc = ListMenuDefaultCursorMoveFunc,
- .itemPrintFunc = sub_8013DF4,
- .totalItems = 16,
+ .itemPrintFunc = ListMenuItemPrintFunc_UnionRoomGroups,
+ .totalItems = ARRAY_COUNT(gUnknown_082F0184),
.maxShowed = 5,
.windowId = 0,
.header_X = 0,
@@ -753,7 +772,7 @@ const struct ListMenuTemplate gUnknown_082F0204 = {
.cursorKind = 0
};
-const struct WindowTemplate gUnknown_082F021C = {
+static const struct WindowTemplate sWindowTemplate_InviteToActivity = {
.bg = 0x00,
.tilemapLeft = 0x14,
.tilemapTop = 0x05,
@@ -770,11 +789,11 @@ const struct ListMenuItem gUnknown_082F0224[] = {
{ sText_Exit, 0x040 }
};
-const struct ListMenuTemplate gUnknown_082F0244 = {
+static const struct ListMenuTemplate sListMenuTemplate_InviteToActivity = {
.items = gUnknown_082F0224,
.moveCursorFunc = ListMenuDefaultCursorMoveFunc,
.itemPrintFunc = NULL,
- .totalItems = 4,
+ .totalItems = ARRAY_COUNT(gUnknown_082F0224),
.maxShowed = 4,
.windowId = 0,
.header_X = 0,
@@ -791,7 +810,7 @@ const struct ListMenuTemplate gUnknown_082F0244 = {
.cursorKind = 0
};
-const struct WindowTemplate gUnknown_082F025C = {
+static const struct WindowTemplate sWindowTemplate_RegisterForTrade = {
.bg = 0x00,
.tilemapLeft = 0x12,
.tilemapTop = 0x07,
@@ -801,17 +820,17 @@ const struct WindowTemplate gUnknown_082F025C = {
.baseBlock = 0x0001
};
-const struct ListMenuItem gUnknown_082F0264[] = {
+static const struct ListMenuItem sRegisterForTradeListMenuItems[] = {
{ gText_Register, 1 },
{ sText_Info, 2 },
{ sText_Exit, 3 }
};
-const struct ListMenuTemplate gUnknown_082F027C = {
- .items = gUnknown_082F0264,
+static const struct ListMenuTemplate sListMenuTemplate_RegisterForTrade = {
+ .items = sRegisterForTradeListMenuItems,
.moveCursorFunc = ListMenuDefaultCursorMoveFunc,
.itemPrintFunc = NULL,
- .totalItems = 3,
+ .totalItems = ARRAY_COUNT(sRegisterForTradeListMenuItems),
.maxShowed = 3,
.windowId = 0,
.header_X = 0,
@@ -838,7 +857,7 @@ const struct WindowTemplate gUnknown_082F0294 = {
.baseBlock = 0x0001
};
-static const struct ListMenuItem sTradingBoardTypes[] = {
+static const struct ListMenuItem sTradingBoardTypes[NUMBER_OF_MON_TYPES] = {
{ gTypeNames[TYPE_NORMAL], TYPE_NORMAL },
{ gTypeNames[TYPE_FIRE], TYPE_FIRE },
{ gTypeNames[TYPE_WATER], TYPE_WATER },
@@ -856,14 +875,14 @@ static const struct ListMenuItem sTradingBoardTypes[] = {
{ gTypeNames[TYPE_DRAGON], TYPE_DRAGON },
{ gTypeNames[TYPE_STEEL], TYPE_STEEL },
{ gTypeNames[TYPE_DARK], TYPE_DARK },
- { sText_Exit, NUMBER_OF_MON_TYPES }
+ { sText_Exit, NUMBER_OF_MON_TYPES }
};
-const struct ListMenuTemplate sMenuTemplate_TradingBoardRequestType = {
+static const struct ListMenuTemplate sMenuTemplate_TradingBoardRequestType = {
.items = sTradingBoardTypes,
.moveCursorFunc = ListMenuDefaultCursorMoveFunc,
.itemPrintFunc = NULL,
- .totalItems = NUMBER_OF_MON_TYPES,
+ .totalItems = ARRAY_COUNT(sTradingBoardTypes),
.maxShowed = 6,
.windowId = 0,
.header_X = 0,
@@ -880,7 +899,7 @@ const struct ListMenuTemplate sMenuTemplate_TradingBoardRequestType = {
.cursorKind = 0
};
-const struct WindowTemplate gUnknown_082F0344 = {
+static const struct WindowTemplate sWindowTemplate_TradingBoard = {
.bg = 0x00,
.tilemapLeft = 0x01,
.tilemapTop = 0x01,
@@ -900,7 +919,7 @@ const struct WindowTemplate gUnknown_082F034C = {
.baseBlock = 0x0039
};
-const struct ListMenuItem gUnknown_082F0354[] = {
+static const struct ListMenuItem sTradeBoardListMenuItems[] = {
{ sText_EmptyString, -3 },
{ sText_EmptyString, 0 },
{ sText_EmptyString, 1 },
@@ -913,11 +932,11 @@ const struct ListMenuItem gUnknown_082F0354[] = {
{ sText_Exit2, 8 }
};
-const struct ListMenuTemplate gUnknown_082F03A4 = {
- .items = gUnknown_082F0354,
+static const struct ListMenuTemplate sTradeBoardListMenuTemplate = {
+ .items = sTradeBoardListMenuItems,
.moveCursorFunc = ListMenuDefaultCursorMoveFunc,
- .itemPrintFunc = sub_8017BE8,
- .totalItems = 10,
+ .itemPrintFunc = TradeBoardListMenuItemPrintFunc,
+ .totalItems = ARRAY_COUNT(sTradeBoardListMenuItems),
.maxShowed = 6,
.windowId = 0,
.header_X = 0,
@@ -944,7 +963,7 @@ const struct WindowTemplate UnrefWindowTemplate_082F03B4 = {
.baseBlock = 0x0039
};
-const struct ListMenuItem gUnknown_082F03C4[] = {
+static const struct ListMenuItem sEmptyListMenuItems[] = {
{ sText_EmptyString, 0 },
{ sText_EmptyString, 1 },
{ sText_EmptyString, 2 },
@@ -963,11 +982,12 @@ const struct ListMenuItem gUnknown_082F03C4[] = {
{ sText_EmptyString, 15 }
};
-const struct ListMenuTemplate UnrefListMenuTemplate_082F0444 = {
- .items = gUnknown_082F03C4,
+// Unused
+static const struct ListMenuTemplate sUnknownListMenuTemplate = {
+ .items = sEmptyListMenuItems,
.moveCursorFunc = ListMenuDefaultCursorMoveFunc,
.itemPrintFunc = nullsub_14,
- .totalItems = 16,
+ .totalItems = ARRAY_COUNT(sEmptyListMenuItems),
.maxShowed = 4,
.windowId = 0,
.header_X = 0,
@@ -984,78 +1004,100 @@ const struct ListMenuTemplate UnrefListMenuTemplate_082F0444 = {
.cursorKind = 0
};
-const struct UnkStruct_Shared gUnknown_082F045C = {0};
-
-ALIGNED(4) const u8 gUnknown_082F0474[] = {0x01, 0xff};
-ALIGNED(4) const u8 gUnknown_082F0478[] = {0x02, 0xff};
-ALIGNED(4) const u8 gUnknown_082F047C[] = {0x03, 0xff};
-ALIGNED(4) const u8 gUnknown_082F0480[] = {0x04, 0xff};
-ALIGNED(4) const u8 gUnknown_082F0484[] = {0x09, 0xff};
-ALIGNED(4) const u8 gUnknown_082F0488[] = {0x0a, 0xff};
-ALIGNED(4) const u8 gUnknown_082F048C[] = {0x0b, 0xff};
-ALIGNED(4) const u8 gUnknown_082F0490[] = {0x15, 0xff};
-ALIGNED(4) const u8 gUnknown_082F0494[] = {0x16, 0xff};
-ALIGNED(4) const u8 gUnknown_082F0498[] = {0x40, 0x41, 0x44, 0x45, 0x48, 0x51, 0x52, 0x53, 0x54, 0xff};
-ALIGNED(4) const u8 gUnknown_082F04A4[] = {0x0c, 0xff};
-ALIGNED(4) const u8 gUnknown_082F04A8[] = {0x01, 0x02, 0x03, 0x04, 0x09, 0x0a, 0x0b, 0x15, 0x16, 0x0d, 0xff};
-ALIGNED(4) const u8 gUnknown_082F04B4[] = {0x0f, 0xff};
-ALIGNED(4) const u8 gUnknown_082F04B8[] = {0x10, 0xff};
-ALIGNED(4) const u8 gUnknown_082F04BC[] = {0x17, 0xff};
-ALIGNED(4) const u8 gUnknown_082F04C0[] = {0x18, 0xff};
-ALIGNED(4) const u8 gUnknown_082F04C4[] = {0x19, 0xff};
-ALIGNED(4) const u8 gUnknown_082F04C8[] = {0x1a, 0xff};
-ALIGNED(4) const u8 gUnknown_082F04CC[] = {0x1b, 0xff};
-ALIGNED(4) const u8 gUnknown_082F04D0[] = {0x1c, 0xff};
-ALIGNED(4) const u8 gUnknown_082F04D4[] = {0x0e, 0xff};
-
-const u8 *const gUnknown_082F04D8[NUM_LINK_GROUP_TYPES] = {
- gUnknown_082F0474,
- gUnknown_082F0478,
- gUnknown_082F047C,
- gUnknown_082F0480,
- gUnknown_082F0484,
- gUnknown_082F0488,
- gUnknown_082F048C,
- gUnknown_082F0490,
- gUnknown_082F0494,
- gUnknown_082F0498,
- gUnknown_082F04A4,
- gUnknown_082F04A8,
- gUnknown_082F04B4,
- gUnknown_082F04B8,
- NULL,
- gUnknown_082F04BC,
- gUnknown_082F04C0,
- gUnknown_082F04C4,
- gUnknown_082F04C8,
- gUnknown_082F04CC,
- gUnknown_082F04D0,
- gUnknown_082F04D4
+const struct WirelessGnameUnamePair sWirelessGnameUnamePair_Dummy = {0};
+
+ALIGNED(4) const u8 sAcceptedActivityIds_SingleBattle[] = {ACTIVITY_BATTLE_SINGLE, 0xff};
+ALIGNED(4) const u8 sAcceptedActivityIds_DoubleBattle[] = {ACTIVITY_BATTLE_DOUBLE, 0xff};
+ALIGNED(4) const u8 sAcceptedActivityIds_MultiBattle[] = {ACTIVITY_BATTLE_MULTI, 0xff};
+ALIGNED(4) const u8 sAcceptedActivityIds_Trade[] = {ACTIVITY_TRADE, 0xff};
+ALIGNED(4) const u8 sAcceptedActivityIds_PokemonJump[] = {ACTIVITY_POKEMON_JUMP, 0xff};
+ALIGNED(4) const u8 sAcceptedActivityIds_BerryCrush[] = {ACTIVITY_BERRY_CRUSH, 0xff};
+ALIGNED(4) const u8 sAcceptedActivityIds_BerryPicking[] = {ACTIVITY_BERRY_PICK, 0xff};
+ALIGNED(4) const u8 sAcceptedActivityIds_WonderCard[] = {ACTIVITY_WONDER_CARD2, 0xff};
+ALIGNED(4) const u8 sAcceptedActivityIds_WonderNews[] = {ACTIVITY_WONDER_NEWS2, 0xff};
+ALIGNED(4) const u8 sAcceptedActivityIds_Resume[] = {
+ IN_UNION_ROOM | ACTIVITY_NONE,
+ IN_UNION_ROOM | ACTIVITY_BATTLE_SINGLE,
+ IN_UNION_ROOM | ACTIVITY_TRADE,
+ IN_UNION_ROOM | ACTIVITY_CHAT,
+ IN_UNION_ROOM | ACTIVITY_CARD,
+ IN_UNION_ROOM | ACTIVITY_ACCEPT,
+ IN_UNION_ROOM | ACTIVITY_DECLINE,
+ IN_UNION_ROOM | ACTIVITY_NPCTALK,
+ IN_UNION_ROOM | ACTIVITY_PLYRTALK,
+ 0xff
+};
+ALIGNED(4) const u8 sAcceptedActivityIds_Init[] = {ACTIVITY_SEARCH, 0xff};
+ALIGNED(4) const u8 sAcceptedActivityIds_Unk11[] = {
+ ACTIVITY_BATTLE_SINGLE,
+ ACTIVITY_BATTLE_DOUBLE,
+ ACTIVITY_BATTLE_MULTI,
+ ACTIVITY_TRADE,
+ ACTIVITY_POKEMON_JUMP,
+ ACTIVITY_BERRY_CRUSH,
+ ACTIVITY_BERRY_PICK,
+ ACTIVITY_WONDER_CARD2,
+ ACTIVITY_WONDER_NEWS2,
+ ACTIVITY_SPIN_TRADE,
+ 0xff
+};
+ALIGNED(4) const u8 sAcceptedActivityIds_RecordCorner[] = {ACTIVITY_RECORD_CORNER, 0xff};
+ALIGNED(4) const u8 sAcceptedActivityIds_BerryBlender[] = {ACTIVITY_BERRY_BLENDER, 0xff};
+ALIGNED(4) const u8 sAcceptedActivityIds_CoolContest[] = {ACTIVITY_CONTEST_COOL, 0xff};
+ALIGNED(4) const u8 sAcceptedActivityIds_BeautyContest[] = {ACTIVITY_CONTEST_BEAUTY, 0xff};
+ALIGNED(4) const u8 sAcceptedActivityIds_CuteContest[] = {ACTIVITY_CONTEST_CUTE, 0xff};
+ALIGNED(4) const u8 sAcceptedActivityIds_SmartContest[] = {ACTIVITY_CONTEST_SMART, 0xff};
+ALIGNED(4) const u8 sAcceptedActivityIds_ToughContest[] = {ACTIVITY_CONTEST_TOUGH, 0xff};
+ALIGNED(4) const u8 sAcceptedActivityIds_BattleTower[] = {ACTIVITY_BATTLE_TOWER, 0xff};
+ALIGNED(4) const u8 sAcceptedActivityIds_BattleTowerOpen[] = {ACTIVITY_BATTLE_TOWER_OPEN, 0xff};
+
+const u8 *const sAcceptedActivityIds[NUM_LINK_GROUP_TYPES] = {
+ [LINK_GROUP_SINGLE_BATTLE] = sAcceptedActivityIds_SingleBattle,
+ [LINK_GROUP_DOUBLE_BATTLE] = sAcceptedActivityIds_DoubleBattle,
+ [LINK_GROUP_MULTI_BATTLE] = sAcceptedActivityIds_MultiBattle,
+ [LINK_GROUP_TRADE] = sAcceptedActivityIds_Trade,
+ [LINK_GROUP_POKEMON_JUMP] = sAcceptedActivityIds_PokemonJump,
+ [LINK_GROUP_BERRY_CRUSH] = sAcceptedActivityIds_BerryCrush,
+ [LINK_GROUP_BERRY_PICKING] = sAcceptedActivityIds_BerryPicking,
+ [LINK_GROUP_WONDER_CARD] = sAcceptedActivityIds_WonderCard,
+ [LINK_GROUP_WONDER_NEWS] = sAcceptedActivityIds_WonderNews,
+ [LINK_GROUP_UNION_ROOM_RESUME] = sAcceptedActivityIds_Resume,
+ [LINK_GROUP_UNION_ROOM_INIT] = sAcceptedActivityIds_Init,
+ [LINK_GROUP_UNK_11] = sAcceptedActivityIds_Unk11,
+ [LINK_GROUP_RECORD_CORNER] = sAcceptedActivityIds_RecordCorner,
+ [LINK_GROUP_BERRY_BLENDER] = sAcceptedActivityIds_BerryBlender,
+ [LINK_GROUP_UNK_14] = NULL,
+ [LINK_GROUP_COOL_CONTEST] = sAcceptedActivityIds_CoolContest,
+ [LINK_GROUP_BEAUTY_CONTEST] = sAcceptedActivityIds_BeautyContest,
+ [LINK_GROUP_CUTE_CONTEST] = sAcceptedActivityIds_CuteContest,
+ [LINK_GROUP_SMART_CONTEST] = sAcceptedActivityIds_SmartContest,
+ [LINK_GROUP_TOUGH_CONTEST] = sAcceptedActivityIds_ToughContest,
+ [LINK_GROUP_BATTLE_TOWER] = sAcceptedActivityIds_BattleTower,
+ [LINK_GROUP_BATTLE_TOWER_OPEN] = sAcceptedActivityIds_BattleTowerOpen
};
-// Link group type to ID for gUnknown_02022C2C
-const u8 gUnknown_082F0530[NUM_LINK_GROUP_TYPES + 2] =
+static const u8 sLinkGroupToURoomActivity[NUM_LINK_GROUP_TYPES + 2] =
{
- 0x01,
- 0x02,
- 0x03,
- 0x04,
- 0x09,
- 0x0a,
- 0x0b,
- 0x15,
- 0x16,
- 0x00,
- 0x00,
- 0x00,
- 0x0f,
- 0x10,
- 0x00,
- 0x17,
- 0x18,
- 0x19,
- 0x1a,
- 0x1b,
- 0x1c,
- 0x0e
+ [LINK_GROUP_SINGLE_BATTLE] = ACTIVITY_BATTLE_SINGLE,
+ [LINK_GROUP_DOUBLE_BATTLE] = ACTIVITY_BATTLE_DOUBLE,
+ [LINK_GROUP_MULTI_BATTLE] = ACTIVITY_BATTLE_MULTI,
+ [LINK_GROUP_TRADE] = ACTIVITY_TRADE,
+ [LINK_GROUP_POKEMON_JUMP] = ACTIVITY_POKEMON_JUMP,
+ [LINK_GROUP_BERRY_CRUSH] = ACTIVITY_BERRY_CRUSH,
+ [LINK_GROUP_BERRY_PICKING] = ACTIVITY_BERRY_PICK,
+ [LINK_GROUP_WONDER_CARD] = ACTIVITY_WONDER_CARD2,
+ [LINK_GROUP_WONDER_NEWS] = ACTIVITY_WONDER_NEWS2,
+ [LINK_GROUP_UNION_ROOM_RESUME] = ACTIVITY_NONE,
+ [LINK_GROUP_UNION_ROOM_INIT] = ACTIVITY_NONE,
+ [LINK_GROUP_UNK_11] = ACTIVITY_NONE,
+ [LINK_GROUP_RECORD_CORNER] = ACTIVITY_RECORD_CORNER,
+ [LINK_GROUP_BERRY_BLENDER] = ACTIVITY_BERRY_BLENDER,
+ [LINK_GROUP_UNK_14] = ACTIVITY_NONE,
+ [LINK_GROUP_COOL_CONTEST] = ACTIVITY_CONTEST_COOL,
+ [LINK_GROUP_BEAUTY_CONTEST] = ACTIVITY_CONTEST_BEAUTY,
+ [LINK_GROUP_CUTE_CONTEST] = ACTIVITY_CONTEST_CUTE,
+ [LINK_GROUP_SMART_CONTEST] = ACTIVITY_CONTEST_SMART,
+ [LINK_GROUP_TOUGH_CONTEST] = ACTIVITY_CONTEST_TOUGH,
+ [LINK_GROUP_BATTLE_TOWER] = ACTIVITY_BATTLE_TOWER,
+ [LINK_GROUP_BATTLE_TOWER_OPEN] = ACTIVITY_BATTLE_TOWER_OPEN
};
diff --git a/src/data/wild_encounters.json b/src/data/wild_encounters.json
index b27de4513..0b30c0f65 100755
--- a/src/data/wild_encounters.json
+++ b/src/data/wild_encounters.json
@@ -2265,8 +2265,8 @@
}
},
{
- "map": "MAP_UNDERWATER2",
- "base_label": "gUnderwater2",
+ "map": "MAP_UNDERWATER_ROUTE126",
+ "base_label": "gUnderwater_Route126",
"water_mons": {
"encounter_rate": 4,
"mons": [
@@ -9075,8 +9075,8 @@
}
},
{
- "map": "MAP_UNDERWATER1",
- "base_label": "gUnderwater1",
+ "map": "MAP_UNDERWATER_ROUTE124",
+ "base_label": "gUnderwater_Route124",
"water_mons": {
"encounter_rate": 4,
"mons": [
diff --git a/src/daycare.c b/src/daycare.c
index dcbadeba8..b87c326e9 100644
--- a/src/daycare.c
+++ b/src/daycare.c
@@ -892,11 +892,11 @@ static bool8 TryProduceOrHatchEgg(struct DayCare *daycare)
TriggerPendingDaycareEgg();
}
- // Hatch Egg
+ // Try to hatch Egg
if (++daycare->stepCounter == 255)
{
- u32 steps;
- u8 toSub = GetEggStepsToSubtract();
+ u32 eggCycles;
+ u8 toSub = GetEggCyclesToSubtract();
for (i = 0; i < gPlayerPartyCount; i++)
{
@@ -905,15 +905,15 @@ static bool8 TryProduceOrHatchEgg(struct DayCare *daycare)
if (GetMonData(&gPlayerParty[i], MON_DATA_SANITY_IS_BAD_EGG))
continue;
- steps = GetMonData(&gPlayerParty[i], MON_DATA_FRIENDSHIP);
- if (steps != 0)
+ eggCycles = GetMonData(&gPlayerParty[i], MON_DATA_FRIENDSHIP);
+ if (eggCycles != 0)
{
- if (steps >= toSub)
- steps -= toSub;
+ if (eggCycles >= toSub)
+ eggCycles -= toSub;
else
- steps -= 1;
+ eggCycles -= 1;
- SetMonData(&gPlayerParty[i], MON_DATA_FRIENDSHIP, &steps);
+ SetMonData(&gPlayerParty[i], MON_DATA_FRIENDSHIP, &eggCycles);
}
else
{
@@ -1186,7 +1186,7 @@ static void DaycareAddTextPrinter(u8 windowId, const u8 *text, u32 x, u32 y)
printer.y = y;
printer.currentX = x;
printer.currentY = y;
- printer.unk = 0;
+ printer.style = 0;
gTextFlags.useAlternateDownArrow = 0;
printer.letterSpacing = 0;
printer.lineSpacing = 1;
diff --git a/src/decoration.c b/src/decoration.c
index c878f397a..40cccbe5e 100644
--- a/src/decoration.c
+++ b/src/decoration.c
@@ -541,7 +541,7 @@ static u8 AddDecorationWindow(u8 windowIndex)
}
DrawStdFrameWithCustomTileAndPalette(*windowId, FALSE, 0x214, 14);
- schedule_bg_copy_tilemap_to_vram(0);
+ ScheduleBgCopyTilemapToVram(0);
return *windowId;
}
@@ -550,7 +550,7 @@ static void RemoveDecorationWindow(u8 windowIndex)
ClearStdWindowAndFrameToTransparent(sDecorMenuWindowIds[windowIndex], FALSE);
ClearWindowTilemap(sDecorMenuWindowIds[windowIndex]);
RemoveWindow(sDecorMenuWindowIds[windowIndex]);
- schedule_bg_copy_tilemap_to_vram(0);
+ ScheduleBgCopyTilemapToVram(0);
}
static void AddDecorationActionsWindow(void)
@@ -729,7 +729,7 @@ static void PrintDecorationCategoryMenuItems(u8 taskId)
}
AddTextPrinterParameterized(windowId, 1, gTasks[taskId].tDecorationMenuCommand == DECOR_MENU_TRADE ? gText_Exit : gText_Cancel, 8, i * 16 + 1, 0, NULL);
- schedule_bg_copy_tilemap_to_vram(0);
+ ScheduleBgCopyTilemapToVram(0);
}
static void PrintDecorationCategoryMenuItem(u8 winid, u8 category, u8 x, u8 y, bool8 disabled, u8 speed)
@@ -1623,7 +1623,7 @@ static void AttemptPlaceDecoration_(u8 taskId)
}
else
{
- PlaySE(SE_HAZURE);
+ PlaySE(SE_FAILURE);
StringExpandPlaceholders(gStringVar4, gText_CantBePlacedHere);
DisplayItemMessageOnField(taskId, gStringVar4, CantPlaceDecorationPrompt);
}
diff --git a/src/dewford_trend.c b/src/dewford_trend.c
index 9c5e69d99..e3b98859c 100644
--- a/src/dewford_trend.c
+++ b/src/dewford_trend.c
@@ -225,7 +225,9 @@ void TrendyPhraseIsOld(void)
if (gSaveBlock1Ptr->easyChatPairs[0].unk0_0 - gSaveBlock1Ptr->easyChatPairs[1].unk0_0 < 2)
{
- asm("":::"r2"); //Force the compiler to store address of gSaveBlock1 in r3 instead of r2
+ #ifndef NONMATCHING
+ asm("":::"r2"); //Force the compiler to store address of gSaveBlock1 in r3 instead of r2
+ #endif
if (!gSaveBlock1Ptr->easyChatPairs[0].unk1_6 && gSaveBlock1Ptr->easyChatPairs[1].unk1_6)
result = 1;
}
diff --git a/src/digit_obj_util.c b/src/digit_obj_util.c
index fe5d49e69..f887dafb9 100644
--- a/src/digit_obj_util.c
+++ b/src/digit_obj_util.c
@@ -33,7 +33,7 @@ struct DigitPrinterAlloc
};
// this file's functions
-static u8 GetFirstOamId(u8 oamCount);;
+static u8 GetFirstOamId(u8 oamCount);
static void CopyWorkToOam(struct DigitPrinter *objWork);
static void DrawNumObjsLeadingZeros(struct DigitPrinter *objWork, s32 num, bool32 sign);
static void DrawNumObjsMinusInFront(struct DigitPrinter *objWork, s32 num, bool32 sign);
diff --git a/src/diploma.c b/src/diploma.c
index 3c03c057f..7eb3b0e81 100644
--- a/src/diploma.c
+++ b/src/diploma.c
@@ -76,9 +76,9 @@ void CB2_ShowDiploma(void)
sDiplomaTilemapPtr = malloc(0x1000);
InitDiplomaBg();
InitDiplomaWindow();
- reset_temp_tile_data_buffers();
- decompress_and_copy_tile_data_to_vram(1, &sDiplomaTiles, 0, 0, 0);
- while (free_temp_tile_data_buffers_if_possible())
+ ResetTempTileDataBuffers();
+ DecompressAndCopyTileDataToVram(1, &sDiplomaTiles, 0, 0, 0);
+ while (FreeTempTileDataBuffersIfPossible())
;
LZDecompressWram(sDiplomaTilemap, sDiplomaTilemapPtr);
CopyBgTilemapBufferToVram(1);
diff --git a/src/dodrio_berry_picking.c b/src/dodrio_berry_picking.c
index 936c1828f..34f73126b 100644
--- a/src/dodrio_berry_picking.c
+++ b/src/dodrio_berry_picking.c
@@ -450,7 +450,7 @@ static void (*const gUnknown_082F7AF4[])(void) =
};
// code
-void sub_802493C(u16 a0, void (*callback)(void))
+void StartDodrioBerryPicking(u16 a0, void (*callback)(void))
{
gUnknown_03000DB0 = FALSE;
@@ -467,7 +467,7 @@ void sub_802493C(u16 a0, void (*callback)(void))
sub_80273F0();
sub_8026B5C(gUnknown_02022C98->unk24, &gUnknown_02022C98->unk44, &gUnknown_02022C98->unk48);
StopMapMusic();
- PlayNewMapMusic(MUS_RG_KINOMIKUI);
+ PlayNewMapMusic(MUS_RG_BERRY_PICK);
}
else
{
@@ -558,7 +558,7 @@ static void sub_8024BC8(u8 taskId)
case 2:
if (!sub_802A770())
{
- sub_8010434();
+ Rfu_SetLinkStandbyCallback();
gUnknown_02022C98->unk0C++;
}
break;
@@ -671,7 +671,7 @@ static void sub_8024E38(void)
gUnknown_02022C98->unk10++;
break;
case 1:
- sub_8010434();
+ Rfu_SetLinkStandbyCallback();
gUnknown_02022C98->unk10++;
break;
case 2:
@@ -690,7 +690,7 @@ static void sub_8024E38(void)
case 4:
if (++gUnknown_02022C98->unk30 > 5)
{
- sub_8010434();
+ Rfu_SetLinkStandbyCallback();
gUnknown_02022C98->unk10++;
}
break;
@@ -832,9 +832,9 @@ static void sub_8025158(void)
static bool32 sub_8025170(void)
{
- u8 r4 = GetBlockReceivedStatus();
- u8 r0 = sub_800A9D8();
- if (r4 == r0)
+ u8 recvStatus = GetBlockReceivedStatus();
+ u8 playerFlags = GetLinkPlayerCountAsBitFlags();
+ if (recvStatus == playerFlags)
{
ResetBlockReceivedFlags();
return TRUE;
@@ -877,7 +877,7 @@ static void sub_8025198(void)
if (WaitFanfare(TRUE))
{
sub_8026240(6);
- FadeOutAndPlayNewMapMusic(MUS_RG_WIN_YASEI, 4);
+ FadeOutAndPlayNewMapMusic(MUS_RG_VICTORY_WILD, 4);
}
break;
}
@@ -916,7 +916,7 @@ static void sub_8025230(void)
if (WaitFanfare(TRUE)) {
gUnknown_02022C98->unk114 = gUnknown_02022C98->unk4A[gUnknown_02022C98->multiplayerId][5];
sub_8026240(6);
- FadeOutAndPlayNewMapMusic(MUS_RG_WIN_YASEI, 4);
+ FadeOutAndPlayNewMapMusic(MUS_RG_VICTORY_WILD, 4);
}
break;
}
@@ -1081,7 +1081,7 @@ static void sub_8025644(void)
switch (gUnknown_02022C98->unk10)
{
case 0:
- sub_800AC34();
+ SetCloseLinkCallback();
sub_80292E0(7);
gUnknown_02022C98->unk10++;
break;
@@ -1174,7 +1174,7 @@ static void sub_8025758(void)
gUnknown_02022C98->unk10++;
break;
case 4:
- PlayNewMapMusic(MUS_RG_KINOMIKUI);
+ PlayNewMapMusic(MUS_RG_BERRY_PICK);
sub_8028E4C();
gUnknown_02022C98->unk10++;
break;
@@ -1458,8 +1458,8 @@ static void sub_8025F48(void)
{
if (gUnknown_02022C98->unk144 == 0)
{
- m4aSongNumStop(SE_SEIKAI);
- PlaySE(SE_SEIKAI);
+ m4aSongNumStop(SE_SUCCESS);
+ PlaySE(SE_SUCCESS);
gUnknown_02022C98->unk144 = 1;
}
}
@@ -1480,7 +1480,7 @@ static void sub_8025F48(void)
}
else if (gUnknown_02022C98->unk154 == 1)
{
- PlayFanfareByFanfareNum(11); // MUS_ME_ZANNEN
+ PlayFanfareByFanfareNum(11); // MUS_TOO_BAD
gUnknown_02022C98->unk154 = 2;
}
}
@@ -1501,8 +1501,8 @@ static void sub_8026044(void)
{
if (gUnknown_02022C98->unk144 == 0)
{
- m4aSongNumStop(SE_SEIKAI);
- PlaySE(SE_SEIKAI);
+ m4aSongNumStop(SE_SUCCESS);
+ PlaySE(SE_SUCCESS);
gUnknown_02022C98->unk144 = 1;
}
}
@@ -1522,7 +1522,7 @@ static void sub_8026044(void)
{
if (gUnknown_02022C98->unk148[r4] == 0)
{
- PlaySE(SE_FUUSEN1 + ptr->unk0[r4]);
+ PlaySE(SE_BALLOON_RED + ptr->unk0[r4]);
gUnknown_02022C98->unk148[r4] = 1;
}
}
@@ -1538,7 +1538,7 @@ static void sub_8026044(void)
}
else if (gUnknown_02022C98->unk154 == 1)
{
- PlayFanfareByFanfareNum(11); // MUS_ME_ZANNEN
+ PlayFanfareByFanfareNum(11); // MUS_TOO_BAD
gUnknown_02022C98->unk154 = 2;
}
}
@@ -1792,7 +1792,7 @@ static void sub_802671C(void)
if (gUnknown_02022C98->unk148[i] == 0)
{
gUnknown_02022C98->unk148[i] = 1;
- PlaySE(SE_FUUSEN1 + ptr->unk32CC.unk14.unk0[i]);
+ PlaySE(SE_BALLOON_RED + ptr->unk32CC.unk14.unk0[i]);
}
if (gUnknown_02022C98->unk40 < 10 || r10 == 1)
{
@@ -2359,19 +2359,19 @@ static void sub_8027554(void)
{
gUnknown_02022C98->unk31A0[gUnknown_02022C98->multiplayerId].unk2C.unk0 = 2;
gUnknown_02022C98->unkB0[gUnknown_02022C98->multiplayerId] = 6;
- PlaySE(SE_W204);
+ PlaySE(SE_M_CHARM);
}
else if (gMain.newKeys & DPAD_LEFT)
{
gUnknown_02022C98->unk31A0[gUnknown_02022C98->multiplayerId].unk2C.unk0 = 3;
gUnknown_02022C98->unkB0[gUnknown_02022C98->multiplayerId] = 6;
- PlaySE(SE_W204);
+ PlaySE(SE_M_CHARM);
}
else if (gMain.newKeys & DPAD_RIGHT)
{
gUnknown_02022C98->unk31A0[gUnknown_02022C98->multiplayerId].unk2C.unk0 = 1;
gUnknown_02022C98->unkB0[gUnknown_02022C98->multiplayerId] = 6;
- PlaySE(SE_W204);
+ PlaySE(SE_M_CHARM);
}
else
{
@@ -2748,14 +2748,14 @@ static void sub_8027DD0(u32 arg0)
struct UnkPacket1 packet;
packet.id = 1;
packet.unk4 = arg0;
- sub_800FE50(&packet);
+ Rfu_SendPacket(&packet);
}
static u32 sub_8027DFC(u32 arg0)
{
struct UnkPacket1 *packet;
- if ((gRecvCmds[0][0] & 0xFF00) != 0x2F00)
+ if ((gRecvCmds[0][0] & 0xFF00) != RFUCMD_SEND_PACKET)
return 0;
packet = (void *)&gRecvCmds[arg0][1];
@@ -2857,7 +2857,7 @@ static void sub_8027E30(struct DodrioSubstruct_31A0 *arg0, struct DodrioSubstruc
packet.unkA_3 = arg6;
packet.unkB_1 = arg7;
packet.unkB_0 = arg8;
- sub_800FE50(&packet);
+ Rfu_SendPacket(&packet);
}
static u32 sub_8028164(u32 unused, struct DodrioSubstruct_31A0 *arg0, struct DodrioSubstruct_31A0_2C *arg1, struct DodrioSubstruct_31A0_2C *arg2, struct DodrioSubstruct_31A0_2C *arg3, struct DodrioSubstruct_31A0_2C *arg4, struct DodrioSubstruct_31A0_2C *arg5, u8 *arg6, u32 *arg7, u32 *arg8)
@@ -2865,7 +2865,7 @@ static u32 sub_8028164(u32 unused, struct DodrioSubstruct_31A0 *arg0, struct Dod
struct UnkPacket2 *packet;
struct DodrioSubstruct_31A0_14 *ptr = &arg0->unk14;
- if ((gRecvCmds[0][0] & 0xFF00) != 0x2F00)
+ if ((gRecvCmds[0][0] & 0xFF00) != RFUCMD_SEND_PACKET)
return 0;
packet = (void *)&gRecvCmds[0][1];
@@ -2935,14 +2935,14 @@ static void sub_80282EC(u8 arg0)
struct UnkPacket3 packet;
packet.id = 3;
packet.unk4 = arg0;
- sub_800FE50(&packet);
+ Rfu_SendPacket(&packet);
}
static u32 sub_8028318(u32 arg0, u8 *arg1)
{
struct UnkPacket3 *packet;
- if ((gRecvCmds[0][0] & 0xFF00) != 0x2F00)
+ if ((gRecvCmds[0][0] & 0xFF00) != RFUCMD_SEND_PACKET)
return 0;
packet = (void *)&gRecvCmds[arg0][1];
@@ -2966,14 +2966,14 @@ static void sub_8028350(u32 arg0)
struct UnkPacket4 packet;
packet.id = 4;
packet.unk4 = arg0;
- sub_800FE50(&packet);
+ Rfu_SendPacket(&packet);
}
static u32 sub_8028374(u32 arg0)
{
struct UnkPacket4 *packet;
- if ((gRecvCmds[0][0] & 0xFF00) != 0x2F00)
+ if ((gRecvCmds[0][0] & 0xFF00) != RFUCMD_SEND_PACKET)
return 0;
packet = (void *)&gRecvCmds[arg0][1];
@@ -3450,7 +3450,7 @@ static u32 sub_80285AC(struct Sprite *sprite)
u8 mod = (++sprite->data[1] / 13) % 4;
if (sprite->data[1] % 13 == 0 && mod != 0)
- PlaySE(SE_W204);
+ PlaySE(SE_M_CHARM);
if (sprite->data[1] >= 104)
{
sprite->data[0] = 0;
@@ -3567,7 +3567,7 @@ static bool32 sub_8028828(void)
continue;
gUnknown_02022CF4->unkC[i] = 1;
gUnknown_02022CF4->unk16[i] = -16;
- PlaySE(SE_TK_KASYA);
+ PlaySE(SE_CLICK);
}
sprite->pos1.y += gUnknown_02022CF4->unk16[i];
}
@@ -4320,7 +4320,7 @@ static void sub_802988C(void)
}
break;
case 9:
- PlayNewMapMusic(MUS_FANFA1);
+ PlayNewMapMusic(MUS_LEVEL_UP);
FillWindowPixelBuffer(gUnknown_02022CF8->unk3008[0], PIXEL_FILL(1));
FillWindowPixelBuffer(gUnknown_02022CF8->unk3008[1], PIXEL_FILL(1));
strWidth = GetStringWidth(1, gText_AnnouncingPrizes, -1);
@@ -4354,7 +4354,7 @@ static void sub_802988C(void)
PutWindowTilemap(gUnknown_02022CF8->unk3008[1]);
}
CopyBgTilemapBufferToVram(0);
- FadeOutAndFadeInNewMapMusic(MUS_RG_WIN_YASEI, 20, 10);
+ FadeOutAndFadeInNewMapMusic(MUS_RG_VICTORY_WILD, 20, 10);
gUnknown_02022CF8->state++;
break;
case 11:
@@ -4483,12 +4483,12 @@ static void sub_802A380(void)
case 2:
if (!IsDma3ManagerBusyWithBgCopy())
{
- CreateTask(sub_8153688, 0);
+ CreateTask(Task_LinkSave, 0);
gUnknown_02022CF8->state++;
}
break;
case 3:
- if (!FuncIsActiveTask(sub_8153688))
+ if (!FuncIsActiveTask(Task_LinkSave))
gUnknown_02022CF8->state++;
break;
default:
@@ -4629,7 +4629,7 @@ static void sub_802A7A8(void)
ChangeBgX(3, 0, 0);
ChangeBgY(3, 0, 0);
InitStandardTextBoxWindows();
- sub_8197200();
+ InitTextBoxGfxAndPrinters();
SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_OBJ_ON | DISPCNT_OBJ_1D_MAP);
SetBgTilemapBuffer(3, gUnknown_02022CF8->tilemapBuffers[0]);
SetBgTilemapBuffer(1, gUnknown_02022CF8->tilemapBuffers[1]);
@@ -4644,20 +4644,20 @@ static bool32 sub_802A8E8(void)
LoadPalette(gDodrioBerryBgPal1, 0, sizeof(gDodrioBerryBgPal1));
break;
case 1:
- reset_temp_tile_data_buffers();
+ ResetTempTileDataBuffers();
break;
case 2:
- decompress_and_copy_tile_data_to_vram(3, gDodrioBerryBgGfx1, 0, 0, 0);
+ DecompressAndCopyTileDataToVram(3, gDodrioBerryBgGfx1, 0, 0, 0);
break;
case 3:
- decompress_and_copy_tile_data_to_vram(1, gDodrioBerryBgGfx2, 0, 0, 0);
+ DecompressAndCopyTileDataToVram(1, gDodrioBerryBgGfx2, 0, 0, 0);
break;
case 4:
- if (free_temp_tile_data_buffers_if_possible() == TRUE)
+ if (FreeTempTileDataBuffersIfPossible() == TRUE)
return FALSE;
break;
case 5:
- LoadPalette(stdpal_get(3), 0xD0, 0x20);
+ LoadPalette(GetTextWindowPalette(3), 0xD0, 0x20);
break;
default:
gUnknown_02022CF8->unk3018 = 0;
diff --git a/src/dynamic_placeholder_text_util.c b/src/dynamic_placeholder_text_util.c
index bdfcf6653..1ec0c1e06 100644
--- a/src/dynamic_placeholder_text_util.c
+++ b/src/dynamic_placeholder_text_util.c
@@ -32,7 +32,7 @@ u8 *DynamicPlaceholderTextUtil_ExpandPlaceholders(u8 *dest, const u8 *src)
{
while (*src != EOS)
{
- if (*src != CHAR_SPECIAL_F7)
+ if (*src != CHAR_DYNAMIC)
{
*dest++ = *src++;
}
diff --git a/src/easy_chat.c b/src/easy_chat.c
index 05e366420..8e1044591 100644
--- a/src/easy_chat.c
+++ b/src/easy_chat.c
@@ -29,7 +29,6 @@
#include "window.h"
#include "constants/easy_chat.h"
#include "constants/event_objects.h"
-#include "constants/flags.h"
#include "constants/lilycove_lady.h"
#include "constants/mauville_old_man.h"
#include "constants/songs.h"
@@ -2024,7 +2023,7 @@ static int sub_811B368(void)
{
if (sEasyChatScreen->type == EASY_CHAT_TYPE_BARD_SONG)
{
- PlaySE(SE_HAZURE);
+ PlaySE(SE_FAILURE);
return 0;
}
else
@@ -2039,7 +2038,7 @@ static int sub_811B394(void)
u16 easyChatWord = sub_811F578(sub_811B940());
if (sub_811BF88(easyChatWord))
{
- PlaySE(SE_HAZURE);
+ PlaySE(SE_FAILURE);
return 0;
}
else
@@ -2538,7 +2537,7 @@ u8 sub_811BBBC(void)
return sEasyChatScreen->unk_0c;
}
-void sub_811BBC8(u8 *arg0, u8 *arg1)
+static void sub_811BBC8(s8 *arg0, s8 *arg1)
{
*arg0 = sEasyChatScreen->unk_10;
*arg1 = sEasyChatScreen->unk_11;
@@ -2794,7 +2793,7 @@ static bool8 sub_811BFA4(void)
DeactivateAllTextPrinters();
sub_811CF64();
sub_811CF04();
- CpuFastFill(0, (void *)VRAM + 0x1000000, 0x400);
+ CpuFastFill(0, (void *)OAM, OAM_SIZE);
break;
case 1:
DecompressAndLoadBgGfxUsingHeap(3, gEasyChatWindow_Gfx, 0, 0, 0);
@@ -2828,8 +2827,12 @@ static bool8 sub_811BFA4(void)
else
{
sub_811DE5C(0, 0, 0, 0);
- SetGpuReg(REG_OFFSET_WININ, WIN_RANGE(0, 63));
- SetGpuReg(REG_OFFSET_WINOUT, WIN_RANGE(0, 59));
+ SetGpuReg(REG_OFFSET_WININ, WININ_WIN0_BG_ALL | WININ_WIN0_OBJ | WININ_WIN0_CLR);
+ SetGpuReg(REG_OFFSET_WINOUT, WINOUT_WIN01_BG0
+ | WINOUT_WIN01_BG1
+ | WINOUT_WIN01_BG3
+ | WINOUT_WIN01_OBJ
+ | WINOUT_WIN01_CLR);
ShowBg(3);
ShowBg(1);
ShowBg(2);
@@ -4526,18 +4529,18 @@ static void sub_811E30C(void)
x = var0 * 13;
x = x * 8 + 28;
y = var1 * 16 + 96;
- sub_811E34C(x, y);
+ sub_811E34C((u8)x, (u8)y);
}
static void sub_811E34C(u8 x, u8 y)
{
- if (sUnknown_0203A11C->unk2E4)
- {
- sUnknown_0203A11C->unk2E4->pos1.x = x;
- sUnknown_0203A11C->unk2E4->pos1.y = y;
- sUnknown_0203A11C->unk2E4->pos2.x = 0;
- sUnknown_0203A11C->unk2E4->data[0] = 0;
- }
+ if (!sUnknown_0203A11C->unk2E4)
+ return;
+
+ sUnknown_0203A11C->unk2E4->pos1.x = (s16)x;
+ sUnknown_0203A11C->unk2E4->pos1.y = (s16)y;
+ sUnknown_0203A11C->unk2E4->pos2.x = 0;
+ sUnknown_0203A11C->unk2E4->data[0] = 0;
}
static void sub_811E380(void)
@@ -5269,12 +5272,17 @@ void InitEasyChatPhrases(void)
gSaveBlock1Ptr->mail[i].words[j] = 0xFFFF;
}
+#ifndef UBFIX
// BUG: This is supposed to clear 64 bits, but this loop is clearing 64 bytes.
// However, this bug has no resulting effect on gameplay because only the
// Mauville old man data is corrupted, which is initialized directly after
// this function is called when starting a new game.
for (i = 0; i < 64; i++)
gSaveBlock1Ptr->additionalPhrases[i] = 0;
+#else
+ for (i = 0; i < ARRAY_COUNT(gSaveBlock1Ptr->additionalPhrases); i++)
+ gSaveBlock1Ptr->additionalPhrases[i] = 0;
+#endif
}
static bool8 sub_811F28C(void)
diff --git a/src/egg_hatch.c b/src/egg_hatch.c
index 3bc35bc4a..87f0a13fd 100644
--- a/src/egg_hatch.c
+++ b/src/egg_hatch.c
@@ -490,7 +490,7 @@ static void CB2_EggHatch_0(void)
SetVBlankCallback(VBlankCB_EggHatch);
gSpecialVar_0x8005 = GetCurrentMapMusic();
- reset_temp_tile_data_buffers();
+ ResetTempTileDataBuffers();
ResetBgsAndClearDma3BusyFlags(0);
InitBgsFromTemplates(0, sBgTemplates_EggHatch, ARRAY_COUNT(sBgTemplates_EggHatch));
@@ -578,10 +578,10 @@ static void Task_EggHatchPlayBGM(u8 taskID)
PlayRainStoppingSoundEffect();
}
if (gTasks[taskID].data[0] == 1)
- PlayBGM(MUS_ME_SHINKA);
+ PlayBGM(MUS_EVOLUTION_INTRO);
if (gTasks[taskID].data[0] > 60)
{
- PlayBGM(MUS_SHINKA);
+ PlayBGM(MUS_EVOLUTION);
DestroyTask(taskID);
// UB: task is destroyed, yet the value is incremented
}
@@ -637,7 +637,7 @@ static void CB2_EggHatch_1(void)
GetMonNickname2(&gPlayerParty[sEggHatchData->eggPartyID], gStringVar1);
StringExpandPlaceholders(gStringVar4, gText_HatchedFromEgg);
EggHatchPrintMessage(sEggHatchData->windowId, gStringVar4, 0, 3, 0xFF);
- PlayFanfare(MUS_FANFA5);
+ PlayFanfare(MUS_EVOLVED);
sEggHatchData->CB2_state++;
PutWindowTilemap(sEggHatchData->windowId);
CopyWindowToVram(sEggHatchData->windowId, 3);
@@ -672,7 +672,7 @@ static void CB2_EggHatch_1(void)
species = GetMonData(&gPlayerParty[sEggHatchData->eggPartyID], MON_DATA_SPECIES);
gender = GetMonGender(&gPlayerParty[sEggHatchData->eggPartyID]);
personality = GetMonData(&gPlayerParty[sEggHatchData->eggPartyID], MON_DATA_PERSONALITY, 0);
- DoNamingScreen(3, gStringVar3, species, gender, personality, EggHatchSetMonNickname);
+ DoNamingScreen(NAMING_SCREEN_NICKNAME, gStringVar3, species, gender, personality, EggHatchSetMonNickname);
break;
case 1:
case -1:
@@ -716,7 +716,7 @@ static void SpriteCB_Egg_0(struct Sprite* sprite)
sprite->pos2.x = Sin(sprite->data[1], 1);
if (sprite->data[0] == 15)
{
- PlaySE(SE_BOWA);
+ PlaySE(SE_BALL);
StartSpriteAnim(sprite, 1);
CreateRandomEggShardSprite();
}
@@ -739,7 +739,7 @@ static void SpriteCB_Egg_1(struct Sprite* sprite)
sprite->pos2.x = Sin(sprite->data[1], 2);
if (sprite->data[0] == 15)
{
- PlaySE(SE_BOWA);
+ PlaySE(SE_BALL);
StartSpriteAnim(sprite, 2);
}
}
@@ -766,13 +766,13 @@ static void SpriteCB_Egg_2(struct Sprite* sprite)
sprite->pos2.x = Sin(sprite->data[1], 2);
if (sprite->data[0] == 15)
{
- PlaySE(SE_BOWA);
+ PlaySE(SE_BALL);
StartSpriteAnim(sprite, 2);
CreateRandomEggShardSprite();
CreateRandomEggShardSprite();
}
if (sprite->data[0] == 30)
- PlaySE(SE_BOWA);
+ PlaySE(SE_BALL);
}
}
}
@@ -799,7 +799,7 @@ static void SpriteCB_Egg_4(struct Sprite* sprite)
sprite->data[0]++;
if (!gPaletteFade.active)
{
- PlaySE(SE_TAMAGO);
+ PlaySE(SE_EGG_HATCH);
sprite->invisible = TRUE;
sprite->callback = SpriteCB_Egg_5;
sprite->data[0] = 0;
@@ -865,7 +865,7 @@ static void EggHatchPrintMessage(u8 windowId, u8* string, u8 x, u8 y, u8 speed)
AddTextPrinterParameterized4(windowId, 1, x, y, 0, 0, sEggHatchData->textColor, speed, string);
}
-u8 GetEggStepsToSubtract(void)
+u8 GetEggCyclesToSubtract(void)
{
u8 count, i;
for (count = CalculatePlayerPartyCount(), i = 0; i < count; i++)
diff --git a/src/ereader_screen.c b/src/ereader_screen.c
index 754bbe445..b4a9164b3 100755
--- a/src/ereader_screen.c
+++ b/src/ereader_screen.c
@@ -85,10 +85,10 @@ static u8 sub_81D4DE8(struct Unk03006370 *arg0)
return var0;
}
-static void sub_81D4E30(void)
+static void OpenEReaderLink(void)
{
memset(gDecompressionBuffer, 0, 0x2000);
- gLinkType = LINKTYPE_0x5503;
+ gLinkType = LINKTYPE_EREADER;
OpenLink();
SetSuppressLinkErrorMessage(TRUE);
}
@@ -153,7 +153,7 @@ static u32 sub_81D4EE4(u8 *arg0, u16 *arg1)
case 2:
if (GetLinkPlayerCount_2() == 2)
{
- PlaySE(SE_PINPON);
+ PlaySE(SE_DING_DONG);
CheckShouldAdvanceLinkState();
*arg1 = 0;
*arg0 = 3;
@@ -192,7 +192,7 @@ static u32 sub_81D4EE4(u8 *arg0, u16 *arg1)
}
break;
case 4:
- sub_800ABF4(0);
+ SetCloseLinkCallbackAndType(0);
*arg0 = 5;
break;
case 5:
@@ -255,7 +255,7 @@ static void sub_81D5084(u8 taskId)
data->unk8 = 1;
break;
case 1:
- sub_81D4E30();
+ OpenEReaderLink();
sub_81D505C(&data->unk0);
data->unk8 = 2;
break;
@@ -285,7 +285,7 @@ static void sub_81D5084(u8 taskId)
case 5:
if (sub_81D5064(&data->unk0, 90))
{
- sub_81D4E30();
+ OpenEReaderLink();
data->unk8 = 6;
}
else if (gMain.newKeys & B_BUTTON)
@@ -319,7 +319,7 @@ static void sub_81D5084(u8 taskId)
else if (sub_81D5064(&data->unk0, 10))
{
CloseLink();
- sub_81D4E30();
+ OpenEReaderLink();
sub_81D505C(&data->unk0);
}
break;
@@ -360,7 +360,7 @@ static void sub_81D5084(u8 taskId)
data->unk8 = 12;
break;
case 12:
- sub_81D4E30();
+ OpenEReaderLink();
AddTextPrinterToWindow1(gJPText_AllowEReaderToLoadCard);
data->unk8 = 13;
break;
@@ -403,7 +403,7 @@ static void sub_81D5084(u8 taskId)
break;
case 15:
data->unkE = EReader_IsReceivedDataValid((struct EReaderTrainerHillSet *)gDecompressionBuffer);
- sub_800ABF4(data->unkE);
+ SetCloseLinkCallbackAndType(data->unkE);
data->unk8 = 16;
break;
case 16:
@@ -431,7 +431,7 @@ static void sub_81D5084(u8 taskId)
if (sub_81D5064(&data->unk0, 120))
{
AddTextPrinterToWindow1(gJPText_NewTrainerHasComeToHoenn);
- PlayFanfare(MUS_FANFA4);
+ PlayFanfare(MUS_OBTAIN_ITEM);
data->unk8 = 19;
}
break;
diff --git a/src/event_object_lock.c b/src/event_object_lock.c
index b728f7774..67652a99b 100644
--- a/src/event_object_lock.c
+++ b/src/event_object_lock.c
@@ -96,7 +96,7 @@ void ScriptUnfreezeObjectEvents(void)
UnfreezeObjectEvents();
}
-void sub_8098524(void)
+void UnionRoom_UnlockPlayerAndChatPartner(void)
{
u8 playerObjectId;
diff --git a/src/event_object_movement.c b/src/event_object_movement.c
index d6a2fe2ec..72de880c8 100644
--- a/src/event_object_movement.c
+++ b/src/event_object_movement.c
@@ -28,6 +28,7 @@
#include "constants/items.h"
#include "constants/mauville_old_man.h"
#include "constants/trainer_types.h"
+#include "constants/union_room.h"
// this file was known as evobjmv.c in Game Freak's original source
@@ -97,7 +98,7 @@ static void DoRippleFieldEffect(struct ObjectEvent*, struct Sprite*);
static void DoGroundEffects_OnSpawn(struct ObjectEvent*, struct Sprite*);
static void DoGroundEffects_OnBeginStep(struct ObjectEvent*, struct Sprite*);
static void DoGroundEffects_OnFinishStep(struct ObjectEvent*, struct Sprite*);
-static void sub_8097D68(struct Sprite*);
+static void UpdateObjectEventSpritePosition(struct Sprite*);
static void ApplyLevitateMovement(u8);
static bool8 MovementType_Disguise_Callback(struct ObjectEvent *, struct Sprite *);
static bool8 MovementType_Hidden_Callback(struct ObjectEvent *, struct Sprite *);
@@ -130,6 +131,9 @@ static void ClearObjectEventMovement(struct ObjectEvent *, struct Sprite *);
static void ObjectEventSetSingleMovement(struct ObjectEvent *, struct Sprite *, u8);
static void oamt_npc_ministep_reset(struct Sprite *, u8, u8);
static void UpdateObjectEventSpriteSubpriorityAndVisibility(struct Sprite *);
+static void InitSpriteForFigure8Anim(struct Sprite *sprite);
+static bool8 AnimateSpriteInFigure8(struct Sprite *sprite);
+static void UpdateObjectEventSprite(struct Sprite *);
const u8 gReflectionEffectPaletteMap[] = {1, 1, 6, 7, 8, 9, 6, 7, 8, 9, 11, 11, 0, 0, 0, 0};
@@ -1121,13 +1125,13 @@ void ResetObjectEvents(void)
static void CreateReflectionEffectSprites(void)
{
- u8 spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[21], 0, 0, 31);
+ u8 spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[FLDEFFOBJ_REFLECTION_DISTORTION], 0, 0, 31);
gSprites[spriteId].oam.affineMode = ST_OAM_AFFINE_NORMAL;
InitSpriteAffineAnim(&gSprites[spriteId]);
StartSpriteAffineAnim(&gSprites[spriteId], 0);
gSprites[spriteId].invisible = TRUE;
- spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[21], 0, 0, 31);
+ spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[FLDEFFOBJ_REFLECTION_DISTORTION], 0, 0, 31);
gSprites[spriteId].oam.affineMode = ST_OAM_AFFINE_NORMAL;
InitSpriteAffineAnim(&gSprites[spriteId]);
StartSpriteAffineAnim(&gSprites[spriteId], 1);
@@ -1219,7 +1223,6 @@ static u8 InitObjectEventStateFromTemplate(struct ObjectEventTemplate *template,
objectEvent->movementType = template->movementType;
objectEvent->localId = template->localId;
objectEvent->mapNum = mapNum;
- objectEvent++; objectEvent--;
objectEvent->mapGroup = mapGroup;
objectEvent->initialCoords.x = x;
objectEvent->initialCoords.y = y;
@@ -1232,13 +1235,11 @@ static u8 InitObjectEventStateFromTemplate(struct ObjectEventTemplate *template,
objectEvent->range.as_nybbles.x = template->movementRangeX;
objectEvent->range.as_nybbles.y = template->movementRangeY;
objectEvent->trainerType = template->trainerType;
+ objectEvent->mapNum = mapNum; //redundant, but needed to match
objectEvent->trainerRange_berryTreeId = template->trainerRange_berryTreeId;
objectEvent->previousMovementDirection = gInitialMovementTypeFacingDirections[template->movementType];
SetObjectEventDirection(objectEvent, objectEvent->previousMovementDirection);
SetObjectEventDynamicGraphicsId(objectEvent);
-#ifndef NONMATCHING
- asm("":::"r5", "r6");
-#endif
if (gRangedMovementTypes[objectEvent->movementType])
{
if (objectEvent->range.as_nybbles.x == 0)
@@ -1522,7 +1523,9 @@ u8 AddPseudoObjectEvent(u16 graphicsId, void (*callback)(struct Sprite *), s16 x
return spriteId;
}
-u8 sprite_new(u8 graphicsId, u8 a1, s16 x, s16 y, u8 z, u8 direction)
+// Used to create sprite object events instead of a full object event
+// Used when resources are limiting, e.g. for the audience in contests or group members in Union Room
+u8 CreateObjectSprite(u8 graphicsId, u8 a1, s16 x, s16 y, u8 z, u8 direction)
{
u8 spriteId;
struct Sprite *sprite;
@@ -1531,11 +1534,11 @@ u8 sprite_new(u8 graphicsId, u8 a1, s16 x, s16 y, u8 z, u8 direction)
const struct ObjectEventGraphicsInfo *graphicsInfo;
graphicsInfo = GetObjectEventGraphicsInfo(graphicsId);
- MakeObjectTemplateFromObjectEventGraphicsInfo(graphicsId, UpdateObjectEventSpriteSubpriorityAndVisibility, &spriteTemplate, &subspriteTables);
+ MakeObjectTemplateFromObjectEventGraphicsInfo(graphicsId, UpdateObjectEventSprite, &spriteTemplate, &subspriteTables);
*(u16 *)&spriteTemplate.paletteTag = 0xFFFF;
x += 7;
y += 7;
- sub_80930E0(&x, &y, 8, 16);
+ SetSpritePosToOffsetMapCoords(&x, &y, 8, 16);
spriteId = CreateSpriteAtEnd(&spriteTemplate, x, y, 0);
if (spriteId != MAX_SPRITES)
{
@@ -1946,7 +1949,7 @@ void sub_808E7E4(u8 localId, u8 mapNum, u8 mapGroup)
}
}
-void sub_808E82C(u8 localId, u8 mapNum, u8 mapGroup, s16 x, s16 y)
+void SetObjectEventSpritePosByLocalIdAndMap(u8 localId, u8 mapNum, u8 mapGroup, s16 x, s16 y)
{
u8 objectEventId;
struct Sprite *sprite;
@@ -2337,7 +2340,13 @@ const u8 *GetObjectEventScriptPointerByObjectEventId(u8 objectEventId)
static u16 GetObjectEventFlagIdByLocalIdAndMap(u8 localId, u8 mapNum, u8 mapGroup)
{
- return GetObjectEventTemplateByLocalIdAndMap(localId, mapNum, mapGroup)->flagId;
+ struct ObjectEventTemplate *obj = GetObjectEventTemplateByLocalIdAndMap(localId, mapNum, mapGroup);
+#ifdef UBFIX
+ // BUG: The function may return NULL, and attempting to read from NULL may freeze the game using modern compilers.
+ if (obj == NULL)
+ return 0;
+#endif // UBFIX
+ return obj->flagId;
}
static u16 GetObjectEventFlagIdByObjectEventId(u8 objectEventId)
@@ -2363,7 +2372,8 @@ static u8 GetObjectTrainerTypeByObjectEventId(u8 objectEventId)
return gObjectEvents[objectEventId].trainerType;
}
-u8 sub_808F0D4(u8 localId, u8 mapNum, u8 mapGroup)
+// Unused
+u8 GetObjectEventBerryTreeIdByLocalIdAndMap(u8 localId, u8 mapNum, u8 mapGroup)
{
u8 objectEventId;
@@ -2374,7 +2384,7 @@ u8 sub_808F0D4(u8 localId, u8 mapNum, u8 mapGroup)
return gObjectEvents[objectEventId].trainerRange_berryTreeId;
}
-u8 ObjectEventGetBerryTreeId(u8 objectEventId)
+u8 GetObjectEventBerryTreeId(u8 objectEventId)
{
return gObjectEvents[objectEventId].trainerRange_berryTreeId;
}
@@ -4864,22 +4874,22 @@ void SetSpritePosToMapCoords(s16 mapX, s16 mapY, s16 *destX, s16 *destY)
s16 dx = -gTotalCameraPixelOffsetX - gFieldCamera.x;
s16 dy = -gTotalCameraPixelOffsetY - gFieldCamera.y;
if (gFieldCamera.x > 0)
- dx += 1 << 4;
+ dx += 16;
if (gFieldCamera.x < 0)
- dx -= 1 << 4;
+ dx -= 16;
if (gFieldCamera.y > 0)
- dy += 1 << 4;
+ dy += 16;
if (gFieldCamera.y < 0)
- dy -= 1 << 4;
+ dy -= 16;
*destX = ((mapX - gSaveBlock1Ptr->pos.x) << 4) + dx;
*destY = ((mapY - gSaveBlock1Ptr->pos.y) << 4) + dy;
}
-void sub_80930E0(s16 *x, s16 *y, s16 dx, s16 dy)
+void SetSpritePosToOffsetMapCoords(s16 *x, s16 *y, s16 dx, s16 dy)
{
SetSpritePosToMapCoords(*x, *y, x, y);
*x += dx;
@@ -6864,15 +6874,15 @@ bool8 MovementAction_UnusedAcroActionRight_Step0(struct ObjectEvent *objectEvent
return FALSE;
}
-void sub_8095AF0(struct ObjectEvent *objectEvent, struct Sprite *sprite)
+void InitFigure8Anim(struct ObjectEvent *objectEvent, struct Sprite *sprite)
{
- sub_8097750(sprite);
+ InitSpriteForFigure8Anim(sprite);
sprite->animPaused = FALSE;
}
-bool8 sub_8095B0C(struct ObjectEvent *objectEvent, struct Sprite *sprite)
+bool8 DoFigure8Anim(struct ObjectEvent *objectEvent, struct Sprite *sprite)
{
- if (sub_8097758(sprite))
+ if (AnimateSpriteInFigure8(sprite))
{
ShiftStillObjectEventCoords(objectEvent);
objectEvent->triggerGroundEffectsOnStop = TRUE;
@@ -6884,14 +6894,14 @@ bool8 sub_8095B0C(struct ObjectEvent *objectEvent, struct Sprite *sprite)
bool8 MovementAction_Figure8_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite)
{
- sub_8095AF0(objectEvent, sprite);
+ InitFigure8Anim(objectEvent, sprite);
sprite->data[2] = 1;
return MovementAction_Figure8_Step1(objectEvent, sprite);
}
bool8 MovementAction_Figure8_Step1(struct ObjectEvent *objectEvent, struct Sprite *sprite)
{
- if (sub_8095B0C(objectEvent, sprite))
+ if (DoFigure8Anim(objectEvent, sprite))
{
sprite->data[2] = 2;
return TRUE;
@@ -8094,33 +8104,33 @@ void GroundEffect_Seaweed(struct ObjectEvent *objEvent, struct Sprite *sprite)
}
static void (*const sGroundEffectFuncs[])(struct ObjectEvent *objEvent, struct Sprite *sprite) = {
- GroundEffect_SpawnOnTallGrass,
- GroundEffect_StepOnTallGrass,
- GroundEffect_SpawnOnLongGrass,
- GroundEffect_StepOnLongGrass,
- GroundEffect_WaterReflection,
- GroundEffect_IceReflection,
- GroundEffect_FlowingWater,
- GroundEffect_SandTracks,
- GroundEffect_DeepSandTracks,
- GroundEffect_Ripple,
- GroundEffect_StepOnPuddle,
- GroundEffect_SandHeap,
- GroundEffect_JumpOnTallGrass,
- GroundEffect_JumpOnLongGrass,
- GroundEffect_JumpOnShallowWater,
- GroundEffect_JumpOnWater,
- GroundEffect_JumpLandingDust,
- GroundEffect_ShortGrass,
- GroundEffect_HotSprings,
- GroundEffect_Seaweed
+ GroundEffect_SpawnOnTallGrass, // GROUND_EFFECT_FLAG_TALL_GRASS_ON_SPAWN
+ GroundEffect_StepOnTallGrass, // GROUND_EFFECT_FLAG_TALL_GRASS_ON_MOVE
+ GroundEffect_SpawnOnLongGrass, // GROUND_EFFECT_FLAG_LONG_GRASS_ON_SPAWN
+ GroundEffect_StepOnLongGrass, // GROUND_EFFECT_FLAG_LONG_GRASS_ON_MOVE
+ GroundEffect_WaterReflection, // GROUND_EFFECT_FLAG_ICE_REFLECTION
+ GroundEffect_IceReflection, // GROUND_EFFECT_FLAG_REFLECTION
+ GroundEffect_FlowingWater, // GROUND_EFFECT_FLAG_SHALLOW_FLOWING_WATER
+ GroundEffect_SandTracks, // GROUND_EFFECT_FLAG_SAND
+ GroundEffect_DeepSandTracks, // GROUND_EFFECT_FLAG_DEEP_SAND
+ GroundEffect_Ripple, // GROUND_EFFECT_FLAG_RIPPLES
+ GroundEffect_StepOnPuddle, // GROUND_EFFECT_FLAG_PUDDLE
+ GroundEffect_SandHeap, // GROUND_EFFECT_FLAG_SAND_PILE
+ GroundEffect_JumpOnTallGrass, // GROUND_EFFECT_FLAG_LAND_IN_TALL_GRASS
+ GroundEffect_JumpOnLongGrass, // GROUND_EFFECT_FLAG_LAND_IN_LONG_GRASS
+ GroundEffect_JumpOnShallowWater, // GROUND_EFFECT_FLAG_LAND_IN_SHALLOW_WATER
+ GroundEffect_JumpOnWater, // GROUND_EFFECT_FLAG_LAND_IN_DEEP_WATER
+ GroundEffect_JumpLandingDust, // GROUND_EFFECT_FLAG_LAND_ON_NORMAL_GROUND
+ GroundEffect_ShortGrass, // GROUND_EFFECT_FLAG_SHORT_GRASS
+ GroundEffect_HotSprings, // GROUND_EFFECT_FLAG_HOT_SPRINGS
+ GroundEffect_Seaweed // GROUND_EFFECT_FLAG_SEAWEED
};
static void DoFlaggedGroundEffects(struct ObjectEvent *objEvent, struct Sprite *sprite, u32 flags)
{
u8 i;
- if (ObjectEventIsFarawayIslandMew(objEvent) == TRUE && !sub_81D4A58(objEvent))
+ if (ObjectEventIsFarawayIslandMew(objEvent) == TRUE && !ShouldMewShakeGrass(objEvent))
return;
for (i = 0; i < ARRAY_COUNT(sGroundEffectFuncs); i++, flags >>= 1)
@@ -8206,15 +8216,13 @@ bool8 FreezeObjectEvent(struct ObjectEvent *objectEvent)
{
return TRUE;
}
- else
- {
- objectEvent->frozen = 1;
- objectEvent->spriteAnimPausedBackup = gSprites[objectEvent->spriteId].animPaused;
- objectEvent->spriteAffineAnimPausedBackup = gSprites[objectEvent->spriteId].affineAnimPaused;
- gSprites[objectEvent->spriteId].animPaused = 1;
- gSprites[objectEvent->spriteId].affineAnimPaused = 1;
- return FALSE;
- }
+
+ objectEvent->frozen = 1;
+ objectEvent->spriteAnimPausedBackup = gSprites[objectEvent->spriteId].animPaused;
+ objectEvent->spriteAffineAnimPausedBackup = gSprites[objectEvent->spriteId].affineAnimPaused;
+ gSprites[objectEvent->spriteId].animPaused = 1;
+ gSprites[objectEvent->spriteId].affineAnimPaused = 1;
+ return FALSE;
}
void FreezeObjectEvents(void)
@@ -8387,11 +8395,11 @@ bool8 sub_80976EC(struct Sprite *sprite)
if (sprite->data[5] > 15)
return TRUE;
- else
- return FALSE;
+
+ return FALSE;
}
-static const s8 gUnknown_0850E772[] = {
+static const s8 sFigure8XOffsets[FIGURE_8_LENGTH] = {
1, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 1, 2, 2, 1, 2,
2, 1, 2, 2, 1, 2, 1, 1,
@@ -8403,7 +8411,7 @@ static const s8 gUnknown_0850E772[] = {
0, 1, 0, 0, 0, 0, 0, 0,
};
-static const s8 gUnknown_0850E7BA[] = {
+static const s8 sFigure8YOffsets[FIGURE_8_LENGTH] = {
0, 0, 1, 0, 0, 1, 0, 0,
1, 0, 1, 1, 0, 1, 1, 0,
1, 1, 0, 1, 1, 0, 1, 1,
@@ -8415,68 +8423,68 @@ static const s8 gUnknown_0850E7BA[] = {
-1, -1, -1, -1, -1, -1, -1, -2,
};
-s16 sub_8097728(s16 a1)
+s16 GetFigure8YOffset(s16 idx)
{
- return gUnknown_0850E7BA[a1];
+ return sFigure8YOffsets[idx];
}
-s16 sub_809773C(s16 a1)
+s16 GetFigure8XOffset(s16 idx)
{
- return gUnknown_0850E772[a1];
+ return sFigure8XOffsets[idx];
}
-void sub_8097750(struct Sprite *sprite)
+static void InitSpriteForFigure8Anim(struct Sprite *sprite)
{
sprite->data[6] = 0;
sprite->data[7] = 0;
}
-bool8 sub_8097758(struct Sprite *sprite)
+static bool8 AnimateSpriteInFigure8(struct Sprite *sprite)
{
- bool8 result = FALSE;
+ bool8 finished = FALSE;
switch(sprite->data[7])
{
- case 0:
- sprite->pos2.x += sub_809773C(sprite->data[6]);
- sprite->pos2.y += sub_8097728(sprite->data[6]);
- break;
- case 1:
- sprite->pos2.x -= sub_809773C(0x47 - sprite->data[6]);
- sprite->pos2.y += sub_8097728(0x47 - sprite->data[6]);
- break;
- case 2:
- sprite->pos2.x -= sub_809773C(sprite->data[6]);
- sprite->pos2.y += sub_8097728(sprite->data[6]);
- break;
- case 3:
- sprite->pos2.x += sub_809773C(0x47 - sprite->data[6]);
- sprite->pos2.y += sub_8097728(0x47 - sprite->data[6]);
- break;
- }
- if(++sprite->data[6] == 0x48)
+ case 0:
+ sprite->pos2.x += GetFigure8XOffset(sprite->data[6]);
+ sprite->pos2.y += GetFigure8YOffset(sprite->data[6]);
+ break;
+ case 1:
+ sprite->pos2.x -= GetFigure8XOffset((FIGURE_8_LENGTH - 1) - sprite->data[6]);
+ sprite->pos2.y += GetFigure8YOffset((FIGURE_8_LENGTH - 1) - sprite->data[6]);
+ break;
+ case 2:
+ sprite->pos2.x -= GetFigure8XOffset(sprite->data[6]);
+ sprite->pos2.y += GetFigure8YOffset(sprite->data[6]);
+ break;
+ case 3:
+ sprite->pos2.x += GetFigure8XOffset((FIGURE_8_LENGTH - 1) - sprite->data[6]);
+ sprite->pos2.y += GetFigure8YOffset((FIGURE_8_LENGTH - 1) - sprite->data[6]);
+ break;
+ }
+ if (++sprite->data[6] == FIGURE_8_LENGTH)
{
sprite->data[6] = 0;
sprite->data[7]++;
}
- if(sprite->data[7] == 0x4)
+ if (sprite->data[7] == 4)
{
sprite->pos2.y = 0;
sprite->pos2.x = 0;
- result = TRUE;
+ finished = TRUE;
}
- return result;
+ return finished;
}
-static const s8 gUnknown_0850E802[] = {
+static const s8 gUnknown_0850E802[16] = {
-4, -6, -8, -10, -11, -12, -12, -12, -11, -10, -9, -8, -6, -4, 0, 0
};
-static const s8 gUnknown_0850E812[] = {
+static const s8 gUnknown_0850E812[16] = {
0, -2, -3, -4, -5, -6, -6, -6, -5, -5, -4, -3, -2, 0, 0, 0
};
-static const s8 gUnknown_0850E822[] = {
+static const s8 gUnknown_0850E822[16] = {
-2, -4, -6, -8, -9, -10, -10, -10, -9, -8, -6, -5, -3, -2, 0, 0
};
@@ -8499,23 +8507,11 @@ void sub_809783C(struct Sprite *sprite, u8 a2, u8 a3, u8 a4)
sprite->data[6] = 0;
}
-static const s16 gUnknown_0850E840[] = {
- 16, 16, 32,
-};
-
-static const u8 gUnknown_0850E846[] = {
- 0, 0, 1,
-};
-
u8 sub_809785C(struct Sprite *sprite)
{
- s16 v5[3];
- u8 v6[3];
- u8 v2;
-
- memcpy(v5, gUnknown_0850E840, 6); // TODO: get rid of memcpy
- memcpy(v6, gUnknown_0850E846, 3);
- v2 = 0;
+ s16 v5[] = {16, 16, 32};
+ u8 v6[] = {0, 0, 1};
+ u8 v2 = 0;
if (sprite->data[4])
Step1(sprite, sprite->data[3]);
@@ -8536,23 +8532,11 @@ u8 sub_809785C(struct Sprite *sprite)
return v2;
}
-static const s16 gUnknown_0850E84A[] = {
- 32, 32, 64,
-};
-
-static const u8 gUnknown_0850E850[] = {
- 1, 1, 2,
-};
-
u8 sub_80978E4(struct Sprite *sprite)
{
- s16 v5[3];
- u8 v6[3];
- u8 v2;
-
- memcpy(v5, gUnknown_0850E84A, 6);
- memcpy(v6, gUnknown_0850E850, 3);
- v2 = 0;
+ s16 v5[] = {32, 32, 64};
+ u8 v6[] = {1, 1, 2};
+ u8 v2 = 0;
if (sprite->data[4] && !(sprite->data[6] & 1))
Step1(sprite, sprite->data[3]);
@@ -8580,12 +8564,9 @@ static void SetMovementDelay(struct Sprite *sprite, s16 timer)
static bool8 WaitForMovementDelay(struct Sprite *sprite)
{
- sprite->data[3]--;
-
- if (sprite->data[3] == 0)
+ if (--sprite->data[3] == 0)
return TRUE;
- else
- return FALSE;
+ return FALSE;
}
void SetAndStartSpriteAnim(struct Sprite *sprite, u8 animNum, u8 animCmdIndex)
@@ -8599,8 +8580,7 @@ bool8 SpriteAnimEnded(struct Sprite *sprite)
{
if (sprite->animEnded)
return TRUE;
- else
- return FALSE;
+ return FALSE;
}
void UpdateObjectEventSpriteVisibility(struct Sprite *sprite, bool8 invisible)
@@ -8630,51 +8610,56 @@ void UpdateObjectEventSpriteVisibility(struct Sprite *sprite, bool8 invisible)
sprite->invisible = TRUE;
}
-static void UpdateObjectEventSpriteSubpriorityAndVisibility(struct Sprite *sprite)
+#define tInvisible data[2]
+#define tAnimNum data[3]
+#define tAnimState data[4]
+
+static void UpdateObjectEventSprite(struct Sprite *sprite)
{
- sub_8097D68(sprite);
+ UpdateObjectEventSpritePosition(sprite);
SetObjectSubpriorityByZCoord(sprite->data[1], sprite, 1);
- UpdateObjectEventSpriteVisibility(sprite, sprite->data[2]);
+ UpdateObjectEventSpriteVisibility(sprite, sprite->tInvisible);
}
-void sub_8097AF0(void)
+// Unused
+static void DestroyObjectEventSprites(void)
{
int i;
- for(i = 0; i < MAX_SPRITES; i++)
+ for (i = 0; i < MAX_SPRITES; i++)
{
struct Sprite *sprite = &gSprites[i];
- if(sprite->inUse && sprite->callback == UpdateObjectEventSpriteSubpriorityAndVisibility)
+ if(sprite->inUse && sprite->callback == UpdateObjectEventSprite)
DestroySprite(sprite);
}
}
-int sub_8097B2C(u8 var) // this should return a u8, because all that call this shifts to u8, but it wont match because it doesnt shift u8 at the end.
+static int GetObjectEventSpriteId(u8 var) // this should return a u8, because all that call this shifts to u8, but it wont match because it doesnt shift u8 at the end.
{
int i;
- for(i = 0; i < MAX_SPRITES; i++)
+ for (i = 0; i < MAX_SPRITES; i++)
{
struct Sprite *sprite = &gSprites[i];
- if(sprite->inUse && sprite->callback == UpdateObjectEventSpriteSubpriorityAndVisibility && (u8)sprite->data[0] == var)
+ if(sprite->inUse && sprite->callback == UpdateObjectEventSprite && (u8)sprite->data[0] == var)
return i;
}
return MAX_SPRITES;
}
-void sub_8097B78(u8 var1, u8 var2)
+void TurnObjectEventSprite(u8 objectEventId, u8 direction)
{
- u8 spriteId = sub_8097B2C(var1);
+ u8 spriteId = GetObjectEventSpriteId(objectEventId);
- if(spriteId != MAX_SPRITES)
- StartSpriteAnim(&gSprites[spriteId], GetFaceDirectionAnimNum(var2));
+ if (spriteId != MAX_SPRITES)
+ StartSpriteAnim(&gSprites[spriteId], GetFaceDirectionAnimNum(direction));
}
-void sub_8097BB4(u8 var1, u8 graphicsId)
+void SetObjectEventSpriteGraphics(u8 objectEventId, u8 graphicsId)
{
- int spriteId = sub_8097B2C(var1);
+ int spriteId = GetObjectEventSpriteId(objectEventId);
- if(spriteId != MAX_SPRITES)
+ if (spriteId != MAX_SPRITES)
{
struct Sprite *sprite = &gSprites[spriteId];
const struct ObjectEventGraphicsInfo *graphicsInfo = GetObjectEventGraphicsInfo(graphicsId);
@@ -8685,7 +8670,7 @@ void sub_8097BB4(u8 var1, u8 graphicsId)
sprite->oam.paletteNum = graphicsInfo->paletteSlot;
sprite->images = graphicsInfo->images;
- if(graphicsInfo->subspriteTables == NULL)
+ if (graphicsInfo->subspriteTables == NULL)
{
sprite->subspriteTables = NULL;
sprite->subspriteTableNum = 0;
@@ -8700,102 +8685,102 @@ void sub_8097BB4(u8 var1, u8 graphicsId)
}
}
-void sub_8097C44(u8 var, bool32 var2)
+void SetObjectEventSpriteInvisibility(u8 objectEventId, bool32 invisible)
{
- u8 spriteId = sub_8097B2C(var);
+ u8 spriteId = GetObjectEventSpriteId(objectEventId);
- if(spriteId == MAX_SPRITES)
+ if (spriteId == MAX_SPRITES)
return;
- if(var2)
- gSprites[spriteId].data[2] = 1;
+ if (invisible)
+ gSprites[spriteId].tInvisible = TRUE;
else
- gSprites[spriteId].data[2] = 0;
+ gSprites[spriteId].tInvisible = FALSE;
}
-bool32 sub_8097C8C(u8 var)
+bool32 IsObjectEventSpriteInvisible(u8 objectEventId)
{
- u8 spriteId = sub_8097B2C(var);
+ u8 spriteId = GetObjectEventSpriteId(objectEventId);
- if(spriteId == MAX_SPRITES)
+ if (spriteId == MAX_SPRITES)
return FALSE;
- return (gSprites[spriteId].data[2] == TRUE);
+ return (gSprites[spriteId].tInvisible == TRUE);
}
-void sub_8097CC4(u8 var1, u8 var2)
+void SetObjectEventSpriteAnim(u8 objectEventId, u8 animNum)
{
- u8 spriteId = sub_8097B2C(var1);
+ u8 spriteId = GetObjectEventSpriteId(objectEventId);
- if(spriteId != MAX_SPRITES)
+ if (spriteId != MAX_SPRITES)
{
- gSprites[spriteId].data[3] = var2;
- gSprites[spriteId].data[4] = 0;
+ gSprites[spriteId].tAnimNum = animNum;
+ gSprites[spriteId].tAnimState = 0;
}
}
-void sub_8097CF4(struct Sprite *sprite)
+static void MoveUnionRoomObjectUp(struct Sprite *sprite)
{
- switch(sprite->data[4])
+ switch(sprite->tAnimState)
{
case 0:
sprite->pos2.y = 0;
- sprite->data[4]++;
+ sprite->tAnimState++;
case 1:
sprite->pos2.y -= 8;
- if(sprite->pos2.y == -160)
+ if (sprite->pos2.y == -160)
{
sprite->pos2.y = 0;
- sprite->data[2] = 1;
- sprite->data[3] = 0;
- sprite->data[4] = 0;
+ sprite->tInvisible = TRUE;
+ sprite->tAnimNum = 0;
+ sprite->tAnimState = 0;
}
}
}
-void sub_8097D30(struct Sprite *sprite)
+static void MoveUnionRoomObjectDown(struct Sprite *sprite)
{
- switch(sprite->data[4])
+ switch(sprite->tAnimState)
{
case 0:
sprite->pos2.y = -160;
- sprite->data[4]++;
+ sprite->tAnimState++;
case 1:
sprite->pos2.y += 8;
if(sprite->pos2.y == 0)
{
- sprite->data[3] = 0;
- sprite->data[4] = 0;
+ sprite->tAnimNum = 0;
+ sprite->tAnimState = 0;
}
}
}
-static void sub_8097D68(struct Sprite *sprite)
+static void UpdateObjectEventSpritePosition(struct Sprite *sprite)
{
- switch(sprite->data[3])
+ switch(sprite->tAnimNum)
{
- case 1:
- sub_8097D30(sprite);
+ case 0:
break;
- case 2:
- sub_8097CF4(sprite);
+ case UNION_ROOM_SPAWN_IN:
+ MoveUnionRoomObjectDown(sprite);
break;
- case 0:
+ case UNION_ROOM_SPAWN_OUT:
+ MoveUnionRoomObjectUp(sprite);
break;
default:
- sprite->data[3] = 0;
+ sprite->tAnimNum = 0;
break;
}
}
-bool32 sub_8097D9C(u8 var)
+bool32 IsObjectEventSpriteAnimating(u8 var)
{
- u8 spriteId = sub_8097B2C(var);
+ u8 spriteId = GetObjectEventSpriteId(var);
- if(spriteId == MAX_SPRITES)
+ if (spriteId == MAX_SPRITES)
return FALSE;
- if(gSprites[spriteId].data[3] != FALSE)
+ if (gSprites[spriteId].tAnimNum != 0)
return TRUE;
return FALSE;
@@ -8862,8 +8847,7 @@ u8 MovementAction_StoreAndLockAnim_Step0(struct ObjectEvent *objectEvent, struct
}
else
{
- u8 i;
- u8 firstFreeSlot;
+ u8 i, firstFreeSlot;
bool32 found;
for (firstFreeSlot = 16, found = FALSE, i = 0; i < 16; i++)
{
@@ -8941,7 +8925,7 @@ void CreateLevitateMovementTask(struct ObjectEvent *objectEvent)
u8 taskId = CreateTask(ApplyLevitateMovement, 0xFF);
struct Task *task = &gTasks[taskId];
- StoreWordInTwoHalfwords(&task->data[0], (u32)objectEvent);
+ StoreWordInTwoHalfwords((u16 *)&task->data[0], (u32)objectEvent);
objectEvent->warpArrowSpriteId = taskId;
task->data[3] = 0xFFFF;
}
@@ -8952,7 +8936,7 @@ static void ApplyLevitateMovement(u8 taskId)
struct Sprite *sprite;
struct Task *task = &gTasks[taskId];
- LoadWordFromTwoHalfwords(&task->data[0], (u32 *)&objectEvent); // load the map object pointer.
+ LoadWordFromTwoHalfwords((u16 *)&task->data[0], (u32 *)&objectEvent); // load the map object pointer.
sprite = &gSprites[objectEvent->spriteId];
if(!(task->data[2] & 0x3))
@@ -8969,7 +8953,7 @@ void DestroyExtraMovementTask(u8 taskId)
struct ObjectEvent *objectEvent;
struct Task *task = &gTasks[taskId];
- LoadWordFromTwoHalfwords(&task->data[0], (u32 *)&objectEvent); // unused objectEvent
+ LoadWordFromTwoHalfwords((u16 *)&task->data[0], (u32 *)&objectEvent); // unused objectEvent
DestroyTask(taskId);
}
diff --git a/src/evolution_graphics.c b/src/evolution_graphics.c
index 849c676b3..28bbd4ef7 100644
--- a/src/evolution_graphics.c
+++ b/src/evolution_graphics.c
@@ -271,7 +271,7 @@ static void EvoTask_BeginPreSet1_FadeAndPlaySE(u8 taskID)
gTasks[taskID].tFrameCounter = 0;
BeginNormalPaletteFade(3 << gTasks[taskID].data[1], 0xA, 0, 0x10, RGB_WHITE);
gTasks[taskID].func = EvoTask_CreatePreEvoSparkleSet1;
- PlaySE(SE_W025);
+ PlaySE(SE_M_MEGA_KICK);
}
static void EvoTask_CreatePreEvoSparkleSet1(u8 taskID)
@@ -311,7 +311,7 @@ static void EvoTask_BeginPreSparklesSet2(u8 taskID)
SetEvoSparklesMatrices();
gTasks[taskID].tFrameCounter = 0;
gTasks[taskID].func = EvoTask_CreatePreEvoSparklesSet2;
- PlaySE(SE_W062B);
+ PlaySE(SE_M_BUBBLE_BEAM2);
}
static void EvoTask_CreatePreEvoSparklesSet2(u8 taskID)
@@ -345,7 +345,7 @@ static void EvoTask_BeginPostSparklesSet1(u8 taskID)
SetEvoSparklesMatrices();
gTasks[taskID].tFrameCounter = 0;
gTasks[taskID].func = EvoTask_CreatePostEvoSparklesSet1;
- PlaySE(SE_REAPOKE);
+ PlaySE(SE_SHINY);
}
static void EvoTask_CreatePostEvoSparklesSet1(u8 taskID)
@@ -389,7 +389,7 @@ static void EvoTask_BeginPostSparklesSet2_AndFlash(u8 taskID)
CpuSet(&gPlttBufferFaded[0x20], &gPlttBufferUnfaded[0x20], 0x30);
BeginNormalPaletteFade(0xFFF9041C, 0, 0, 0x10, RGB_WHITE); // was 0xFFF9001C in R/S
gTasks[taskID].func = EvoTask_CreatePostEvoSparklesSet2_AndFlash;
- PlaySE(SE_W080);
+ PlaySE(SE_M_PETAL_DANCE);
}
static void EvoTask_CreatePostEvoSparklesSet2_AndFlash(u8 taskID)
@@ -437,7 +437,7 @@ static void EvoTask_BeginPostSparklesSet2_AndFlash_Trade(u8 taskID)
CpuSet(&gPlttBufferFaded[0x20], &gPlttBufferUnfaded[0x20], 0x30);
BeginNormalPaletteFade(0xFFF90400, 0, 0, 0x10, RGB_WHITE); // was 0xFFFF0001 in R/S
gTasks[taskID].func = EvoTask_CreatePostEvoSparklesSet2_AndFlash_Trade;
- PlaySE(SE_W080);
+ PlaySE(SE_M_PETAL_DANCE);
}
static void EvoTask_CreatePostEvoSparklesSet2_AndFlash_Trade(u8 taskID)
diff --git a/src/evolution_scene.c b/src/evolution_scene.c
index 019d48416..41d4900f7 100644
--- a/src/evolution_scene.c
+++ b/src/evolution_scene.c
@@ -630,14 +630,14 @@ static void Task_EvolutionScene(u8 taskID)
case 3:
if (EvoScene_IsMonAnimFinished(sEvoStructPtr->preEvoSpriteID)) // wait for animation, play tu du SE
{
- PlaySE(MUS_ME_SHINKA);
+ PlaySE(MUS_EVOLUTION_INTRO);
gTasks[taskID].tState++;
}
break;
case 4: // play evolution music and fade screen black
if (!IsSEPlaying())
{
- PlayNewMapMusic(MUS_SHINKA);
+ PlayNewMapMusic(MUS_EVOLUTION);
gTasks[taskID].tState++;
BeginNormalPaletteFade(0x1C, 4, 0, 0x10, RGB_BLACK);
}
@@ -713,7 +713,7 @@ static void Task_EvolutionScene(u8 taskID)
{
StringExpandPlaceholders(gStringVar4, gText_CongratsPkmnEvolved);
BattlePutTextOnWindow(gStringVar4, 0);
- PlayBGM(MUS_FANFA5);
+ PlayBGM(MUS_EVOLVED);
gTasks[taskID].tState++;
SetMonData(mon, MON_DATA_SPECIES, (void*)(&gTasks[taskID].tPostEvoSpecies));
CalculateMonStats(mon);
@@ -808,7 +808,7 @@ static void Task_EvolutionScene(u8 taskID)
if (!IsTextPrinterActive(0) && !IsSEPlaying())
{
BufferMoveToLearnIntoBattleTextBuff2();
- PlayFanfare(MUS_FANFA1);
+ PlayFanfare(MUS_LEVEL_UP);
BattleStringExpandPlaceholdersToDisplayedString(gBattleStringsTable[STRINGID_PKMNLEARNEDMOVE - BATTLESTRINGS_ID_ADDER]);
BattlePutTextOnWindow(gDisplayedStringBattle, 0);
gTasks[taskID].tLearnsFirstMove = 0x40; // re-used as a counter
@@ -998,15 +998,15 @@ static void Task_TradeEvolutionScene(u8 taskID)
case 2:
if (IsCryFinished())
{
- m4aSongNumStop(MUS_SHINKA);
- PlaySE(MUS_ME_SHINKA);
+ m4aSongNumStop(MUS_EVOLUTION);
+ PlaySE(MUS_EVOLUTION_INTRO);
gTasks[taskID].tState++;
}
break;
case 3:
if (!IsSEPlaying())
{
- PlayBGM(MUS_SHINKA);
+ PlayBGM(MUS_EVOLUTION);
gTasks[taskID].tState++;
BeginNormalPaletteFade(0x1C, 4, 0, 0x10, RGB_BLACK);
}
@@ -1076,7 +1076,7 @@ static void Task_TradeEvolutionScene(u8 taskID)
{
StringExpandPlaceholders(gStringVar4, gText_CongratsPkmnEvolved);
DrawTextOnTradeWindow(0, gStringVar4, 1);
- PlayFanfare(MUS_FANFA5);
+ PlayFanfare(MUS_EVOLVED);
gTasks[taskID].tState++;
SetMonData(mon, MON_DATA_SPECIES, (&gTasks[taskID].tPostEvoSpecies));
CalculateMonStats(mon);
@@ -1109,7 +1109,7 @@ static void Task_TradeEvolutionScene(u8 taskID)
}
else
{
- PlayBGM(MUS_SHINKA);
+ PlayBGM(MUS_EVOLUTION);
DrawTextOnTradeWindow(0, gText_CommunicationStandby5, 1);
gTasks[taskID].tState++;
}
@@ -1153,7 +1153,7 @@ static void Task_TradeEvolutionScene(u8 taskID)
if (!IsTextPrinterActive(0) && !IsSEPlaying())
{
BufferMoveToLearnIntoBattleTextBuff2();
- PlayFanfare(MUS_FANFA1);
+ PlayFanfare(MUS_LEVEL_UP);
BattleStringExpandPlaceholdersToDisplayedString(gBattleStringsTable[STRINGID_PKMNLEARNEDMOVE - BATTLESTRINGS_ID_ADDER]);
DrawTextOnTradeWindow(0, gDisplayedStringBattle, 1);
gTasks[taskID].tLearnsFirstMove = 0x40; // re-used as a counter
diff --git a/src/faraway_island.c b/src/faraway_island.c
index f8e3eac14..e3d8444c9 100755
--- a/src/faraway_island.c
+++ b/src/faraway_island.c
@@ -6,34 +6,33 @@
#include "metatile_behavior.h"
#include "sprite.h"
#include "constants/event_objects.h"
-#include "constants/flags.h"
+#include "constants/field_effects.h"
#include "constants/maps.h"
#include "constants/metatile_behaviors.h"
-#include "constants/vars.h"
-static u8 sub_81D4890(u8);
-static bool8 sub_81D4C14(struct ObjectEvent*, u8);
-static u8 sub_81D4C9C(struct ObjectEvent*, u8);
-static u8 sub_81D4C58(struct ObjectEvent*, u8);
-static u8 sub_81D4CE0(struct ObjectEvent*, u8);
-static u8 sub_81D4D24(u8);
-static bool8 CanMewWalkToCoords(s16, s16);
+static u8 GetValidMewMoveDirection(u8);
+static bool8 ShouldMewMoveNorth(struct ObjectEvent*, u8);
+static bool8 ShouldMewMoveSouth(struct ObjectEvent*, u8);
+static bool8 ShouldMewMoveEast(struct ObjectEvent*, u8);
+static bool8 ShouldMewMoveWest(struct ObjectEvent*, u8);
+static u8 GetRandomMewDirectionCandidate(u8);
+static bool8 CanMewMoveToCoords(s16, s16);
-static EWRAM_DATA u8 sUnknown_0203CF50 = 0;
+static EWRAM_DATA u8 sGrassSpriteId = 0;
static s16 sPlayerToMewDeltaX;
static s16 sPlayerToMewDeltaY;
static u8 sMewDirectionCandidates[4];
-extern const struct SpritePalette gFieldEffectObjectPaletteInfo1;
+extern const struct SpritePalette gSpritePalette_GeneralFieldEffect1;
extern const struct SpriteTemplate *const gFieldEffectObjectTemplatePointers[];
static const s16 sFarawayIslandRockCoords[4][2] =
{
- {21, 16},
- {25, 16},
- {16, 17},
- {20, 20},
+ {14 + 7, 9 + 7},
+ {18 + 7, 9 + 7},
+ { 9 + 7, 10 + 7},
+ {13 + 7, 13 + 7},
};
static u8 GetMewObjectEventId(void)
@@ -43,10 +42,12 @@ static u8 GetMewObjectEventId(void)
return objectEventId;
}
+// When the player enters Faraway Island interior it begins a "hide and seek" minigame where Mew disappears into the grass
+// This function returns the direction Mew will take a step, and is run every time the player takes a step
u32 GetMewMoveDirection(void)
{
u8 i;
- int skip;
+ int mewSafeFromTrap;
struct ObjectEvent *mew = &gObjectEvents[GetMewObjectEventId()];
sPlayerToMewDeltaX = gObjectEvents[gPlayerAvatar.objectEventId].previousCoords.x - mew->currentCoords.x;
@@ -54,43 +55,47 @@ u32 GetMewMoveDirection(void)
for (i = 0; i < ARRAY_COUNT(sMewDirectionCandidates); i++)
sMewDirectionCandidates[i] = DIR_NONE;
+ // Player hasn't moved (just facing new direction), don't move
if (gObjectEvents[gPlayerAvatar.objectEventId].previousCoords.x == gObjectEvents[gPlayerAvatar.objectEventId].currentCoords.x
&& gObjectEvents[gPlayerAvatar.objectEventId].previousCoords.y == gObjectEvents[gPlayerAvatar.objectEventId].currentCoords.y)
{
return DIR_NONE;
}
+ // Mew is invisible except for every 8th step
if (VarGet(VAR_FARAWAY_ISLAND_STEP_COUNTER) % 8 == 0)
- mew->invisible = 0;
+ mew->invisible = FALSE;
else
- mew->invisible = 1;
+ mew->invisible = TRUE;
+ // Mew will stay in place for 1 step after its visible
if (VarGet(VAR_FARAWAY_ISLAND_STEP_COUNTER) % 9 == 0)
return DIR_NONE;
+ // Below loop is for Mew to try to avoid getting trapped between the player and a rock
for (i = 0; i < ARRAY_COUNT(sFarawayIslandRockCoords); i++)
{
if (gObjectEvents[gPlayerAvatar.objectEventId].previousCoords.x == sFarawayIslandRockCoords[i][0])
{
- skip = 0;
+ mewSafeFromTrap = FALSE;
if (gObjectEvents[gPlayerAvatar.objectEventId].previousCoords.y < sFarawayIslandRockCoords[i][1])
{
if (mew->currentCoords.y <= sFarawayIslandRockCoords[i][1])
- skip = 1;
+ mewSafeFromTrap = TRUE;
}
else
{
if (mew->currentCoords.y >= sFarawayIslandRockCoords[i][1])
- skip = 1;
+ mewSafeFromTrap = TRUE;
}
- if (!skip)
+ if (!mewSafeFromTrap)
{
if (sPlayerToMewDeltaX > 0)
{
if (mew->currentCoords.x + 1 == gObjectEvents[gPlayerAvatar.objectEventId].previousCoords.x)
{
- if (CanMewWalkToCoords(mew->currentCoords.x + 1, mew->currentCoords.y))
+ if (CanMewMoveToCoords(mew->currentCoords.x + 1, mew->currentCoords.y))
return DIR_EAST;
}
}
@@ -98,7 +103,7 @@ u32 GetMewMoveDirection(void)
{
if (mew->currentCoords.x - 1 == gObjectEvents[gPlayerAvatar.objectEventId].previousCoords.x)
{
- if (CanMewWalkToCoords(mew->currentCoords.x - 1, mew->currentCoords.y))
+ if (CanMewMoveToCoords(mew->currentCoords.x - 1, mew->currentCoords.y))
return DIR_WEST;
}
}
@@ -107,12 +112,12 @@ u32 GetMewMoveDirection(void)
{
if (sPlayerToMewDeltaY > 0)
{
- if (CanMewWalkToCoords(mew->currentCoords.x, mew->currentCoords.y - 1))
+ if (CanMewMoveToCoords(mew->currentCoords.x, mew->currentCoords.y - 1))
return DIR_NORTH;
}
else
{
- if (CanMewWalkToCoords(mew->currentCoords.x, mew->currentCoords.y + 1))
+ if (CanMewMoveToCoords(mew->currentCoords.x, mew->currentCoords.y + 1))
return DIR_SOUTH;
}
}
@@ -121,25 +126,25 @@ u32 GetMewMoveDirection(void)
if (gObjectEvents[gPlayerAvatar.objectEventId].previousCoords.y == sFarawayIslandRockCoords[i][1])
{
- skip = 0;
+ mewSafeFromTrap = FALSE;
if (gObjectEvents[gPlayerAvatar.objectEventId].previousCoords.x < sFarawayIslandRockCoords[i][0])
{
if (mew->currentCoords.x <= sFarawayIslandRockCoords[i][0])
- skip = 1;
+ mewSafeFromTrap = TRUE;
}
else
{
if (mew->currentCoords.x >= sFarawayIslandRockCoords[i][0])
- skip = 1;
+ mewSafeFromTrap = TRUE;
}
- if (!skip)
+ if (!mewSafeFromTrap)
{
if (sPlayerToMewDeltaY > 0)
{
if (mew->currentCoords.y + 1 == gObjectEvents[gPlayerAvatar.objectEventId].previousCoords.y)
{
- if (CanMewWalkToCoords(mew->currentCoords.x, mew->currentCoords.y + 1))
+ if (CanMewMoveToCoords(mew->currentCoords.x, mew->currentCoords.y + 1))
return DIR_SOUTH;
}
}
@@ -147,7 +152,7 @@ u32 GetMewMoveDirection(void)
{
if (mew->currentCoords.y - 1 == gObjectEvents[gPlayerAvatar.objectEventId].previousCoords.y)
{
- if (CanMewWalkToCoords(mew->currentCoords.x, mew->currentCoords.y - 1))
+ if (CanMewMoveToCoords(mew->currentCoords.x, mew->currentCoords.y - 1))
return DIR_NORTH;
}
}
@@ -156,12 +161,12 @@ u32 GetMewMoveDirection(void)
{
if (sPlayerToMewDeltaX > 0)
{
- if (CanMewWalkToCoords(mew->currentCoords.x - 1, mew->currentCoords.y))
+ if (CanMewMoveToCoords(mew->currentCoords.x - 1, mew->currentCoords.y))
return DIR_WEST;
}
else
{
- if (CanMewWalkToCoords(mew->currentCoords.x + 1, mew->currentCoords.y))
+ if (CanMewMoveToCoords(mew->currentCoords.x + 1, mew->currentCoords.y))
return DIR_EAST;
}
}
@@ -169,92 +174,101 @@ u32 GetMewMoveDirection(void)
}
}
- if (sub_81D4C14(mew, 0))
+ // Check if Mew can move in any direction without getting closer to the player
+ // If so load into sMewDirectionCandidates
+ // If Mew can move in two of the checked directions, choose one randomly
+ if (ShouldMewMoveNorth(mew, 0))
{
- if (sub_81D4C58(mew, 1))
- return sub_81D4D24(2);
- else if (sub_81D4CE0(mew, 1))
- return sub_81D4D24(2);
+ if (ShouldMewMoveEast(mew, 1))
+ return GetRandomMewDirectionCandidate(2);
+ else if (ShouldMewMoveWest(mew, 1))
+ return GetRandomMewDirectionCandidate(2);
else
return DIR_NORTH;
}
- if (sub_81D4C9C(mew, 0))
+ if (ShouldMewMoveSouth(mew, 0))
{
- if (sub_81D4C58(mew, 1))
- return sub_81D4D24(2);
- else if (sub_81D4CE0(mew, 1))
- return sub_81D4D24(2);
+ if (ShouldMewMoveEast(mew, 1))
+ return GetRandomMewDirectionCandidate(2);
+ else if (ShouldMewMoveWest(mew, 1))
+ return GetRandomMewDirectionCandidate(2);
else
return DIR_SOUTH;
}
- if (sub_81D4C58(mew, 0))
+ if (ShouldMewMoveEast(mew, 0))
{
- if (sub_81D4C14(mew, 1))
- return sub_81D4D24(2);
- else if (sub_81D4C9C(mew, 1))
- return sub_81D4D24(2);
+ if (ShouldMewMoveNorth(mew, 1))
+ return GetRandomMewDirectionCandidate(2);
+ else if (ShouldMewMoveSouth(mew, 1))
+ return GetRandomMewDirectionCandidate(2);
else
return DIR_EAST;
}
- if (sub_81D4CE0(mew, 0))
+ if (ShouldMewMoveWest(mew, 0))
{
- if (sub_81D4C14(mew, 1))
- return sub_81D4D24(2);
- else if (sub_81D4C9C(mew, 1))
- return sub_81D4D24(2);
+ if (ShouldMewMoveNorth(mew, 1))
+ return GetRandomMewDirectionCandidate(2);
+ else if (ShouldMewMoveSouth(mew, 1))
+ return GetRandomMewDirectionCandidate(2);
else
return DIR_WEST;
}
+ // If this point is reached, Mew cannot move without getting closer to the player
+
+ // Avoid player on same Y, try move North/South
if (sPlayerToMewDeltaY == 0)
{
if (gObjectEvents[gPlayerAvatar.objectEventId].currentCoords.y > mew->currentCoords.y)
{
- if (CanMewWalkToCoords(mew->currentCoords.x, mew->currentCoords.y - 1))
+ if (CanMewMoveToCoords(mew->currentCoords.x, mew->currentCoords.y - 1))
return DIR_NORTH;
}
if (gObjectEvents[gPlayerAvatar.objectEventId].currentCoords.y < mew->currentCoords.y)
{
- if (CanMewWalkToCoords(mew->currentCoords.x, mew->currentCoords.y + 1))
+ if (CanMewMoveToCoords(mew->currentCoords.x, mew->currentCoords.y + 1))
return DIR_SOUTH;
}
- if (CanMewWalkToCoords(mew->currentCoords.x, mew->currentCoords.y - 1))
+ if (CanMewMoveToCoords(mew->currentCoords.x, mew->currentCoords.y - 1))
return DIR_NORTH;
- if (CanMewWalkToCoords(mew->currentCoords.x, mew->currentCoords.y + 1))
+ if (CanMewMoveToCoords(mew->currentCoords.x, mew->currentCoords.y + 1))
return DIR_SOUTH;
}
+ // Avoid player on same X, try move West/East
if (sPlayerToMewDeltaX == 0)
{
if (gObjectEvents[gPlayerAvatar.objectEventId].currentCoords.x > mew->currentCoords.x)
{
- if (CanMewWalkToCoords(mew->currentCoords.x - 1, mew->currentCoords.y))
+ if (CanMewMoveToCoords(mew->currentCoords.x - 1, mew->currentCoords.y))
return DIR_WEST;
}
if (gObjectEvents[gPlayerAvatar.objectEventId].currentCoords.x < mew->currentCoords.x)
{
- if (CanMewWalkToCoords(mew->currentCoords.x + 1, mew->currentCoords.y))
+ if (CanMewMoveToCoords(mew->currentCoords.x + 1, mew->currentCoords.y))
return DIR_EAST;
}
- if (CanMewWalkToCoords(mew->currentCoords.x + 1, mew->currentCoords.y))
+ if (CanMewMoveToCoords(mew->currentCoords.x + 1, mew->currentCoords.y))
return DIR_EAST;
- if (CanMewWalkToCoords(mew->currentCoords.x - 1, mew->currentCoords.y))
+ if (CanMewMoveToCoords(mew->currentCoords.x - 1, mew->currentCoords.y))
return DIR_WEST;
}
- return sub_81D4890(DIR_NONE);
+ // Can't avoid player on axis, move any valid direction
+ return GetValidMewMoveDirection(DIR_NONE);
}
-static bool8 CanMewWalkToCoords(s16 x, s16 y)
+// Mew can move to any Tall/Long Grass metatile the player isn't currently on
+static bool8 CanMewMoveToCoords(s16 x, s16 y)
{
if (gObjectEvents[gPlayerAvatar.objectEventId].currentCoords.x == x
&& gObjectEvents[gPlayerAvatar.objectEventId].currentCoords.y == y)
@@ -265,7 +279,8 @@ static bool8 CanMewWalkToCoords(s16 x, s16 y)
return MetatileBehavior_IsPokeGrass(MapGridGetMetatileBehaviorAt(x, y));
}
-static u8 sub_81D4890(u8 ignoredDir)
+// Last ditch effort to move, clear move candidates and try all directions again
+static u8 GetValidMewMoveDirection(u8 ignoredDir)
{
u8 i;
u8 count = 0;
@@ -274,25 +289,25 @@ static u8 sub_81D4890(u8 ignoredDir)
for (i = 0; i < ARRAY_COUNT(sMewDirectionCandidates); i++)
sMewDirectionCandidates[i] = DIR_NONE;
- if (CanMewWalkToCoords(mew->currentCoords.x, mew->currentCoords.y - 1) == TRUE && ignoredDir != DIR_NORTH)
+ if (CanMewMoveToCoords(mew->currentCoords.x, mew->currentCoords.y - 1) == TRUE && ignoredDir != DIR_NORTH)
{
sMewDirectionCandidates[count] = DIR_NORTH;
count++;
}
- if (CanMewWalkToCoords(mew->currentCoords.x + 1, mew->currentCoords.y) == TRUE && ignoredDir != DIR_EAST)
+ if (CanMewMoveToCoords(mew->currentCoords.x + 1, mew->currentCoords.y) == TRUE && ignoredDir != DIR_EAST)
{
sMewDirectionCandidates[count] = DIR_EAST;
count++;
}
- if (CanMewWalkToCoords(mew->currentCoords.x, mew->currentCoords.y + 1) == TRUE && ignoredDir != DIR_SOUTH)
+ if (CanMewMoveToCoords(mew->currentCoords.x, mew->currentCoords.y + 1) == TRUE && ignoredDir != DIR_SOUTH)
{
sMewDirectionCandidates[count] = DIR_SOUTH;
count++;
}
- if (CanMewWalkToCoords(mew->currentCoords.x - 1, mew->currentCoords.y) == TRUE && ignoredDir != DIR_WEST)
+ if (CanMewMoveToCoords(mew->currentCoords.x - 1, mew->currentCoords.y) == TRUE && ignoredDir != DIR_WEST)
{
sMewDirectionCandidates[count] = DIR_WEST;
count++;
@@ -342,7 +357,9 @@ bool8 IsMewPlayingHideAndSeek(void)
return FALSE;
}
-bool8 sub_81D4A58(struct ObjectEvent *objectEvent)
+// Every 4th step Mew will shake the grass it steps into
+// Otherwise its movement leaves grass undisturbed
+bool8 ShouldMewShakeGrass(struct ObjectEvent *objectEvent)
{
if (VarGet(VAR_FARAWAY_ISLAND_STEP_COUNTER) != 0xFFFF
&& VarGet(VAR_FARAWAY_ISLAND_STEP_COUNTER) % 4 == 0)
@@ -351,38 +368,41 @@ bool8 sub_81D4A58(struct ObjectEvent *objectEvent)
return FALSE;
}
-void sub_81D4A90(void)
+void SetMewAboveGrass(void)
{
s16 x;
s16 y;
u8 spriteId;
struct ObjectEvent *mew = &gObjectEvents[GetMewObjectEventId()];
- mew->invisible = 0;
+ mew->invisible = FALSE;
if (gSpecialVar_0x8004 == 1)
{
+ // For after battle where Mew should still be present (e.g. if ran from battle)
mew->fixedPriority = 1;
gSprites[mew->spriteId].subspriteMode = SUBSPRITES_IGNORE_PRIORITY;
gSprites[mew->spriteId].subpriority = 1;
}
else
{
+ // Mew emerging from grass when found
+ // Also do field effect for grass shaking as it emerges
VarSet(VAR_FARAWAY_ISLAND_STEP_COUNTER, 0xFFFF);
mew->fixedPriority = 1;
gSprites[mew->spriteId].subspriteMode = SUBSPRITES_IGNORE_PRIORITY;
if (gSpecialVar_Facing != DIR_NORTH)
gSprites[mew->spriteId].subpriority = 1;
- LoadSpritePalette(&gFieldEffectObjectPaletteInfo1);
- UpdateSpritePaletteWithWeather(IndexOfSpritePaletteTag(gFieldEffectObjectPaletteInfo1.tag));
+ LoadSpritePalette(&gSpritePalette_GeneralFieldEffect1);
+ UpdateSpritePaletteWithWeather(IndexOfSpritePaletteTag(gSpritePalette_GeneralFieldEffect1.tag));
x = mew->currentCoords.x;
y = mew->currentCoords.y;
- sub_80930E0(&x, &y, 8, 8);
- sUnknown_0203CF50 = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[15], x, y, gSprites[mew->spriteId].subpriority - 1);
- if (sUnknown_0203CF50 != MAX_SPRITES)
+ SetSpritePosToOffsetMapCoords(&x, &y, 8, 8);
+ sGrassSpriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[FLDEFFOBJ_LONG_GRASS], x, y, gSprites[mew->spriteId].subpriority - 1);
+ if (sGrassSpriteId != MAX_SPRITES)
{
- struct Sprite *sprite = &gSprites[sUnknown_0203CF50];
+ struct Sprite *sprite = &gSprites[sGrassSpriteId];
sprite->coordOffsetEnabled = 1;
sprite->oam.priority = 2;
sprite->callback = SpriteCallbackDummy;
@@ -390,15 +410,15 @@ void sub_81D4A90(void)
}
}
-void sub_81D4BEC(void)
+void DestroyMewEmergingGrassSprite(void)
{
- if (sUnknown_0203CF50 != MAX_SPRITES)
- DestroySprite(&gSprites[sUnknown_0203CF50]);
+ if (sGrassSpriteId != MAX_SPRITES)
+ DestroySprite(&gSprites[sGrassSpriteId]);
}
-static bool8 sub_81D4C14(struct ObjectEvent *mew, u8 index)
+static bool8 ShouldMewMoveNorth(struct ObjectEvent *mew, u8 index)
{
- if (sPlayerToMewDeltaY > 0 && CanMewWalkToCoords(mew->currentCoords.x, mew->currentCoords.y - 1))
+ if (sPlayerToMewDeltaY > 0 && CanMewMoveToCoords(mew->currentCoords.x, mew->currentCoords.y - 1))
{
sMewDirectionCandidates[index] = DIR_NORTH;
return TRUE;
@@ -407,9 +427,9 @@ static bool8 sub_81D4C14(struct ObjectEvent *mew, u8 index)
return FALSE;
}
-static u8 sub_81D4C58(struct ObjectEvent *mew, u8 index)
+static bool8 ShouldMewMoveEast(struct ObjectEvent *mew, u8 index)
{
- if (sPlayerToMewDeltaX < 0 && CanMewWalkToCoords(mew->currentCoords.x + 1, mew->currentCoords.y))
+ if (sPlayerToMewDeltaX < 0 && CanMewMoveToCoords(mew->currentCoords.x + 1, mew->currentCoords.y))
{
sMewDirectionCandidates[index] = DIR_EAST;
return TRUE;
@@ -418,9 +438,9 @@ static u8 sub_81D4C58(struct ObjectEvent *mew, u8 index)
return FALSE;
}
-static u8 sub_81D4C9C(struct ObjectEvent *mew, u8 index)
+static bool8 ShouldMewMoveSouth(struct ObjectEvent *mew, u8 index)
{
- if (sPlayerToMewDeltaY < 0 && CanMewWalkToCoords(mew->currentCoords.x, mew->currentCoords.y + 1))
+ if (sPlayerToMewDeltaY < 0 && CanMewMoveToCoords(mew->currentCoords.x, mew->currentCoords.y + 1))
{
sMewDirectionCandidates[index] = DIR_SOUTH;
return TRUE;
@@ -429,9 +449,9 @@ static u8 sub_81D4C9C(struct ObjectEvent *mew, u8 index)
return FALSE;
}
-static u8 sub_81D4CE0(struct ObjectEvent *mew, u8 index)
+static bool8 ShouldMewMoveWest(struct ObjectEvent *mew, u8 index)
{
- if (sPlayerToMewDeltaX > 0 && CanMewWalkToCoords(mew->currentCoords.x - 1, mew->currentCoords.y))
+ if (sPlayerToMewDeltaX > 0 && CanMewMoveToCoords(mew->currentCoords.x - 1, mew->currentCoords.y))
{
sMewDirectionCandidates[index] = DIR_WEST;
return TRUE;
@@ -440,7 +460,7 @@ static u8 sub_81D4CE0(struct ObjectEvent *mew, u8 index)
return FALSE;
}
-static u8 sub_81D4D24(u8 mod)
+static u8 GetRandomMewDirectionCandidate(u8 numDirections)
{
- return sMewDirectionCandidates[VarGet(VAR_FARAWAY_ISLAND_STEP_COUNTER) % mod];
+ return sMewDirectionCandidates[VarGet(VAR_FARAWAY_ISLAND_STEP_COUNTER) % numDirections];
}
diff --git a/src/field_camera.c b/src/field_camera.c
index c5b32ff3b..57be52221 100644
--- a/src/field_camera.c
+++ b/src/field_camera.c
@@ -39,7 +39,7 @@ static void CameraPanningCB_PanAhead(void);
static struct FieldCameraOffset sFieldCameraOffset;
static s16 sHorizontalCameraPan;
static s16 sVerticalCameraPan;
-static u8 gUnknown_03000E2C;
+static bool8 gUnknown_03000E2C;
static void (*sFieldCameraPanningCallback)(void);
struct CameraObject gFieldCamera;
@@ -47,7 +47,7 @@ u16 gTotalCameraPixelOffsetY;
u16 gTotalCameraPixelOffsetX;
// text
-static void move_tilemap_camera_to_upper_left_corner_(struct FieldCameraOffset *cameraOffset)
+static void ResetCameraOffset(struct FieldCameraOffset *cameraOffset)
{
cameraOffset->xTileOffset = 0;
cameraOffset->yTileOffset = 0;
@@ -56,23 +56,23 @@ static void move_tilemap_camera_to_upper_left_corner_(struct FieldCameraOffset *
cameraOffset->copyBGToVRAM = TRUE;
}
-static void tilemap_move_something(struct FieldCameraOffset *cameraOffset, u32 b, u32 c)
+static void AddCameraTileOffset(struct FieldCameraOffset *cameraOffset, u32 xOffset, u32 yOffset)
{
- cameraOffset->xTileOffset += b;
+ cameraOffset->xTileOffset += xOffset;
cameraOffset->xTileOffset %= 32;
- cameraOffset->yTileOffset += c;
+ cameraOffset->yTileOffset += yOffset;
cameraOffset->yTileOffset %= 32;
}
-static void coords8_add(struct FieldCameraOffset *cameraOffset, u32 b, u32 c)
+static void AddCameraPixelOffset(struct FieldCameraOffset *cameraOffset, u32 xOffset, u32 yOffset)
{
- cameraOffset->xPixelOffset += b;
- cameraOffset->yPixelOffset += c;
+ cameraOffset->xPixelOffset += xOffset;
+ cameraOffset->yPixelOffset += yOffset;
}
-void move_tilemap_camera_to_upper_left_corner(void)
+void ResetFieldCamera(void)
{
- move_tilemap_camera_to_upper_left_corner_(&sFieldCameraOffset);
+ ResetCameraOffset(&sFieldCameraOffset);
}
void FieldUpdateBgTilemapScroll(void)
@@ -89,10 +89,10 @@ void FieldUpdateBgTilemapScroll(void)
SetGpuReg(REG_OFFSET_BG3VOFS, r4);
}
-void sub_8089C08(s16 *a, s16 *b)
+void sub_8089C08(s16 *x, s16 *y)
{
- *a = sFieldCameraOffset.xPixelOffset + sHorizontalCameraPan;
- *b = sFieldCameraOffset.yPixelOffset + sVerticalCameraPan + 8;
+ *x = sFieldCameraOffset.xPixelOffset + sHorizontalCameraPan;
+ *y = sFieldCameraOffset.yPixelOffset + sVerticalCameraPan + 8;
}
void DrawWholeMapView(void)
@@ -306,9 +306,9 @@ static void DrawMetatile(s32 metatileLayerType, u16 *metatiles, u16 offset)
gBGTilemapBuffers2[offset + 0x21] = metatiles[7];
break;
}
- schedule_bg_copy_tilemap_to_vram(1);
- schedule_bg_copy_tilemap_to_vram(2);
- schedule_bg_copy_tilemap_to_vram(3);
+ ScheduleBgCopyTilemapToVram(1);
+ ScheduleBgCopyTilemapToVram(2);
+ ScheduleBgCopyTilemapToVram(3);
}
static s32 MapPosToBgTilemapOffset(struct FieldCameraOffset *cameraOffset, s32 x, s32 y)
@@ -418,11 +418,11 @@ void CameraUpdate(void)
UpdateObjectEventsForCameraUpdate(deltaX, deltaY);
RotatingGatePuzzleCameraUpdate(deltaX, deltaY);
ResetBerryTreeSparkleFlags();
- tilemap_move_something(&sFieldCameraOffset, deltaX * 2, deltaY * 2);
+ AddCameraTileOffset(&sFieldCameraOffset, deltaX * 2, deltaY * 2);
RedrawMapSlicesForCameraUpdate(&sFieldCameraOffset, deltaX * 2, deltaY * 2);
}
- coords8_add(&sFieldCameraOffset, movementSpeedX, movementSpeedY);
+ AddCameraPixelOffset(&sFieldCameraOffset, movementSpeedX, movementSpeedY);
gTotalCameraPixelOffsetX -= movementSpeedX;
gTotalCameraPixelOffsetY -= movementSpeedY;
}
@@ -436,9 +436,9 @@ void MoveCameraAndRedrawMap(int deltaX, int deltaY) //unused
gTotalCameraPixelOffsetY -= deltaY * 16;
}
-void SetCameraPanningCallback(void (*a)(void))
+void SetCameraPanningCallback(void (*callback)(void))
{
- sFieldCameraPanningCallback = a;
+ sFieldCameraPanningCallback = callback;
}
void SetCameraPanning(s16 a, s16 b)
@@ -450,7 +450,7 @@ void SetCameraPanning(s16 a, s16 b)
void InstallCameraPanAheadCallback(void)
{
sFieldCameraPanningCallback = CameraPanningCB_PanAhead;
- gUnknown_03000E2C = 0;
+ gUnknown_03000E2C = FALSE;
sHorizontalCameraPan = 0;
sVerticalCameraPan = 32;
}
@@ -478,12 +478,12 @@ static void CameraPanningCB_PanAhead(void)
if (gPlayerAvatar.tileTransitionState == T_TILE_TRANSITION)
{
gUnknown_03000E2C ^= 1;
- if (gUnknown_03000E2C == 0)
+ if (gUnknown_03000E2C == FALSE)
return;
}
else
{
- gUnknown_03000E2C = 0;
+ gUnknown_03000E2C = FALSE;
}
var = GetPlayerMovementDirection();
diff --git a/src/field_control_avatar.c b/src/field_control_avatar.c
index e41b5a69a..fab14c577 100644
--- a/src/field_control_avatar.c
+++ b/src/field_control_avatar.c
@@ -545,7 +545,7 @@ static bool8 TryStartStepCountScript(u16 metatileBehavior)
UpdateHappinessStepCounter();
UpdateFarawayIslandStepCounter();
- if (!(gPlayerAvatar.flags & PLAYER_AVATAR_FLAG_6) && !MetatileBehavior_IsForcedMovementTile(metatileBehavior))
+ if (!(gPlayerAvatar.flags & PLAYER_AVATAR_FLAG_FORCED_MOVE) && !MetatileBehavior_IsForcedMovementTile(metatileBehavior))
{
if (UpdatePoisonStepCounter() == TRUE)
{
@@ -725,7 +725,7 @@ static bool8 TryStartWarpEventScript(struct MapPosition *position, u16 metatileB
}
if (MetatileBehavior_IsAquaHideoutWarp(metatileBehavior) == TRUE)
{
- DoTeleportWarp();
+ DoTeleportTileWarp();
return TRUE;
}
if (MetatileBehavior_IsWarpOrBridge(metatileBehavior) == TRUE)
@@ -938,7 +938,7 @@ static struct BgEvent *GetBackgroundEventAtPosition(struct MapHeader *mapHeader,
return NULL;
}
-bool8 dive_warp(struct MapPosition *position, u16 metatileBehavior)
+bool8 TryDoDiveWarp(struct MapPosition *position, u16 metatileBehavior)
{
if (gMapHeader.mapType == MAP_TYPE_UNDERWATER && !MetatileBehavior_IsUnableToEmerge(metatileBehavior))
{
@@ -946,7 +946,7 @@ bool8 dive_warp(struct MapPosition *position, u16 metatileBehavior)
{
StoreInitialPlayerAvatarState();
DoDiveWarp();
- PlaySE(SE_W291);
+ PlaySE(SE_M_DIVE);
return TRUE;
}
}
@@ -956,7 +956,7 @@ bool8 dive_warp(struct MapPosition *position, u16 metatileBehavior)
{
StoreInitialPlayerAvatarState();
DoDiveWarp();
- PlaySE(SE_W291);
+ PlaySE(SE_M_DIVE);
return TRUE;
}
}
diff --git a/src/field_door.c b/src/field_door.c
index b4794349c..4dcb07cca 100644
--- a/src/field_door.c
+++ b/src/field_door.c
@@ -5,7 +5,6 @@
#include "fieldmap.h"
#include "metatile_behavior.h"
#include "task.h"
-#include "constants/flags.h"
#include "constants/maps.h"
#include "constants/songs.h"
#include "constants/metatile_labels.h"
@@ -527,9 +526,9 @@ u32 GetDoorSoundEffect(u32 x, u32 y)
if (sound == DOOR_SOUND_NORMAL)
return SE_DOOR;
else if (sound == DOOR_SOUND_SLIDING)
- return SE_JIDO_DOA;
+ return SE_SLIDING_DOOR;
else if (sound == DOOR_SOUND_ARENA)
- return SE_TU_SAA;
+ return SE_REPEL;
else
return SE_DOOR;
}
diff --git a/src/field_effect.c b/src/field_effect.c
index c4e9fc40a..b64902c0e 100644
--- a/src/field_effect.c
+++ b/src/field_effect.c
@@ -39,195 +39,197 @@ EWRAM_DATA s32 gFieldEffectArguments[8] = {0};
// Static type declarations
static void Task_PokecenterHeal(u8 taskId);
-static void PokecenterHealEffect_0(struct Task *);
-static void PokecenterHealEffect_1(struct Task *);
-static void PokecenterHealEffect_2(struct Task *);
-static void PokecenterHealEffect_3(struct Task *);
+static void PokecenterHealEffect_Init(struct Task *);
+static void PokecenterHealEffect_WaitForBallPlacement(struct Task *);
+static void PokecenterHealEffect_WaitForBallFlashing(struct Task *);
+static void PokecenterHealEffect_WaitForSoundAndEnd(struct Task *);
+static u8 CreatePokecenterMonitorSprite(s16, s16);
+static void SpriteCB_PokecenterMonitor(struct Sprite *);
static void Task_HallOfFameRecord(u8 taskId);
-static void HallOfFameRecordEffect_0(struct Task *);
-static void HallOfFameRecordEffect_1(struct Task *);
-static void HallOfFameRecordEffect_2(struct Task *);
-static void HallOfFameRecordEffect_3(struct Task *);
-
-static u8 CreatePokeballGlowSprite(s16, s16, s16, u16);
+static void HallOfFameRecordEffect_Init(struct Task *);
+static void HallOfFameRecordEffect_WaitForBallPlacement(struct Task *);
+static void HallOfFameRecordEffect_WaitForBallFlashing(struct Task *);
+static void HallOfFameRecordEffect_WaitForSoundAndEnd(struct Task *);
+static void CreateHofMonitorSprite(s16, s16, s16, bool8);
+static void SpriteCB_HallOfFameMonitor(struct Sprite *);
+
+static u8 CreateGlowingPokeballsEffect(s16, s16, s16, bool16);
static void SpriteCB_PokeballGlowEffect(struct Sprite *);
-static void PokeballGlowEffect_0(struct Sprite *);
-static void PokeballGlowEffect_1(struct Sprite *);
-static void PokeballGlowEffect_2(struct Sprite *);
-static void PokeballGlowEffect_3(struct Sprite *);
-static void PokeballGlowEffect_4(struct Sprite *);
-static void PokeballGlowEffect_5(struct Sprite *);
-static void PokeballGlowEffect_6(struct Sprite *);
-static void PokeballGlowEffect_7(struct Sprite *);
-
-static u8 PokecenterHealEffectHelper(s16, s16);
-static void HallOfFameRecordEffectHelper(s16, s16, s16, u8);
-
-static void FieldCallback_Fly(void);
-static void task00_8084310(u8);
-static void mapldr_08084390(void);
-static void c3_080843F8(u8);
+static void PokeballGlowEffect_PlaceBalls(struct Sprite *);
+static void PokeballGlowEffect_TryPlaySe(struct Sprite *);
+static void PokeballGlowEffect_Flash1(struct Sprite *);
+static void PokeballGlowEffect_Flash2(struct Sprite *);
+static void PokeballGlowEffect_WaitAfterFlash(struct Sprite *);
+static void PokeballGlowEffect_Dummy(struct Sprite *);
+static void PokeballGlowEffect_WaitForSound(struct Sprite *);
+static void PokeballGlowEffect_Idle(struct Sprite *);
+static void SpriteCB_PokeballGlow(struct Sprite *);
+
+static void FieldCallback_UseFly(void);
+static void Task_UseFly(u8);
+static void FieldCallback_FlyIntoMap(void);
+static void Task_FlyIntoMap(u8);
static void Task_FallWarpFieldEffect(u8);
-static bool8 FallWarpEffect_1(struct Task *);
-static bool8 FallWarpEffect_2(struct Task *);
-static bool8 FallWarpEffect_3(struct Task *);
-static bool8 FallWarpEffect_4(struct Task *);
-static bool8 FallWarpEffect_5(struct Task *);
-static bool8 FallWarpEffect_6(struct Task *);
-static bool8 FallWarpEffect_7(struct Task *);
-
-static void Task_EscalatorWarpFieldEffect(u8);
-static bool8 EscalatorWarpEffect_1(struct Task *);
-static bool8 EscalatorWarpEffect_2(struct Task *);
-static bool8 EscalatorWarpEffect_3(struct Task *);
-static bool8 EscalatorWarpEffect_4(struct Task *);
-static bool8 EscalatorWarpEffect_5(struct Task *);
-static bool8 EscalatorWarpEffect_6(struct Task *);
-
-static void sub_80B6FB8(struct Task *);
-static void sub_80B7004(struct Task *);
-static void sub_80B7050(void);
-static void sub_80B7060(void);
-static void sub_80B70B4(void);
-static void sub_80B70DC(u8);
-
-static bool8 sub_80B7114(struct Task *);
-static bool8 sub_80B7190(struct Task *);
-static bool8 sub_80B71D0(struct Task *);
-static bool8 sub_80B7230(struct Task *);
-static bool8 sub_80B7270(struct Task *);
-static bool8 sub_80B72D0(struct Task *);
-static bool8 sub_80B72F4(struct Task *);
-
-static void sub_80B7384(u8);
-static bool8 sub_80B73D0(struct Task *, struct ObjectEvent *);
-static bool8 waterfall_1_do_anim_probably(struct Task *, struct ObjectEvent *);
-static bool8 waterfall_2_wait_anim_finish_probably(struct Task *, struct ObjectEvent *);
-static bool8 sub_80B7450(struct Task *, struct ObjectEvent *);
-static bool8 sub_80B7478(struct Task *, struct ObjectEvent *);
-
-static void Task_Dive(u8);
-static bool8 dive_1_lock(struct Task *);
-static bool8 dive_2_unknown(struct Task *);
-static bool8 dive_3_unknown(struct Task *);
+static bool8 FallWarpEffect_Init(struct Task *);
+static bool8 FallWarpEffect_WaitWeather(struct Task *);
+static bool8 FallWarpEffect_StartFall(struct Task *);
+static bool8 FallWarpEffect_Fall(struct Task *);
+static bool8 FallWarpEffect_Land(struct Task *);
+static bool8 FallWarpEffect_CameraShake(struct Task *);
+static bool8 FallWarpEffect_End(struct Task *);
+
+static void Task_EscalatorWarpOut(u8);
+static bool8 EscalatorWarpOut_Init(struct Task *);
+static bool8 EscalatorWarpOut_WaitForPlayer(struct Task *);
+static bool8 EscalatorWarpOut_Up_Ride(struct Task *);
+static bool8 EscalatorWarpOut_Up_End(struct Task *);
+static bool8 EscalatorWarpOut_Down_Ride(struct Task *);
+static bool8 EscalatorWarpOut_Down_End(struct Task *);
+static void RideUpEscalatorOut(struct Task *);
+static void RideDownEscalatorOut(struct Task *);
+static void FadeOutAtEndOfEscalator(void);
+static void WarpAtEndOfEscalator(void);
+
+static void FieldCallback_EscalatorWarpIn(void);
+static void Task_EscalatorWarpIn(u8);
+static bool8 EscalatorWarpIn_Init(struct Task *);
+static bool8 EscalatorWarpIn_Down_Init(struct Task *);
+static bool8 EscalatorWarpIn_Down_Ride(struct Task *);
+static bool8 EscalatorWarpIn_Up_Init(struct Task *);
+static bool8 EscalatorWarpIn_Up_Ride(struct Task *);
+static bool8 EscalatorWarpIn_WaitForMovement(struct Task *);
+static bool8 EscalatorWarpIn_End(struct Task *);
+
+static void Task_UseWaterfall(u8);
+static bool8 WaterfallFieldEffect_Init(struct Task *, struct ObjectEvent *);
+static bool8 WaterfallFieldEffect_ShowMon(struct Task *, struct ObjectEvent *);
+static bool8 WaterfallFieldEffect_WaitForShowMon(struct Task *, struct ObjectEvent *);
+static bool8 WaterfallFieldEffect_RideUp(struct Task *, struct ObjectEvent *);
+static bool8 WaterfallFieldEffect_ContinueRideOrEnd(struct Task *, struct ObjectEvent *);
+
+static void Task_UseDive(u8);
+static bool8 DiveFieldEffect_Init(struct Task *);
+static bool8 DiveFieldEffect_ShowMon(struct Task *);
+static bool8 DiveFieldEffect_TryWarp(struct Task *);
static void Task_LavaridgeGymB1FWarp(u8);
-static bool8 LavaridgeGymB1FWarpEffect_1(struct Task *, struct ObjectEvent *, struct Sprite *);
-static bool8 LavaridgeGymB1FWarpEffect_2(struct Task *, struct ObjectEvent *, struct Sprite *);
-static bool8 LavaridgeGymB1FWarpEffect_3(struct Task *, struct ObjectEvent *, struct Sprite *);
-static bool8 LavaridgeGymB1FWarpEffect_4(struct Task *, struct ObjectEvent *, struct Sprite *);
-static bool8 LavaridgeGymB1FWarpEffect_5(struct Task *, struct ObjectEvent *, struct Sprite *);
-static bool8 LavaridgeGymB1FWarpEffect_6(struct Task *, struct ObjectEvent *, struct Sprite *);
+static bool8 LavaridgeGymB1FWarpEffect_Init(struct Task *, struct ObjectEvent *, struct Sprite *);
+static bool8 LavaridgeGymB1FWarpEffect_CameraShake(struct Task *, struct ObjectEvent *, struct Sprite *);
+static bool8 LavaridgeGymB1FWarpEffect_Launch(struct Task *, struct ObjectEvent *, struct Sprite *);
+static bool8 LavaridgeGymB1FWarpEffect_Rise(struct Task *, struct ObjectEvent *, struct Sprite *);
+static bool8 LavaridgeGymB1FWarpEffect_FadeOut(struct Task *, struct ObjectEvent *, struct Sprite *);
+static bool8 LavaridgeGymB1FWarpEffect_Warp(struct Task *, struct ObjectEvent *, struct Sprite *);
static void FieldCB_LavaridgeGymB1FWarpExit(void);
static void Task_LavaridgeGymB1FWarpExit(u8);
-static bool8 LavaridgeGymB1FWarpExitEffect_1(struct Task *, struct ObjectEvent *, struct Sprite *);
-static bool8 LavaridgeGymB1FWarpExitEffect_2(struct Task *, struct ObjectEvent *, struct Sprite *);
-static bool8 LavaridgeGymB1FWarpExitEffect_3(struct Task *, struct ObjectEvent *, struct Sprite *);
-static bool8 LavaridgeGymB1FWarpExitEffect_4(struct Task *, struct ObjectEvent *, struct Sprite *);
+static bool8 LavaridgeGymB1FWarpExitEffect_Init(struct Task *, struct ObjectEvent *, struct Sprite *);
+static bool8 LavaridgeGymB1FWarpExitEffect_StartPopOut(struct Task *, struct ObjectEvent *, struct Sprite *);
+static bool8 LavaridgeGymB1FWarpExitEffect_PopOut(struct Task *, struct ObjectEvent *, struct Sprite *);
+static bool8 LavaridgeGymB1FWarpExitEffect_End(struct Task *, struct ObjectEvent *, struct Sprite *);
static void Task_LavaridgeGym1FWarp(u8);
-static bool8 LavaridgeGym1FWarpEffect_1(struct Task *, struct ObjectEvent *, struct Sprite *);
-static bool8 LavaridgeGym1FWarpEffect_2(struct Task *, struct ObjectEvent *, struct Sprite *);
-static bool8 LavaridgeGym1FWarpEffect_3(struct Task *, struct ObjectEvent *, struct Sprite *);
-static bool8 LavaridgeGym1FWarpEffect_4(struct Task *, struct ObjectEvent *, struct Sprite *);
-static bool8 LavaridgeGym1FWarpEffect_5(struct Task *, struct ObjectEvent *, struct Sprite *);
-
-static void DoEscapeRopeFieldEffect(u8);
-static void EscapeRopeFieldEffect_Step0(struct Task *);
-static void EscapeRopeFieldEffect_Step1(struct Task *);
-
-static void mapldr_080859D4(void);
-static void sub_80B7E94(u8);
-
-static void sub_80B7EC4(struct Task *);
-static void sub_80B7EE8(struct Task *);
-
-static void ExecuteTeleportFieldEffectTask(u8);
-static void TeleportFieldEffectTask1(struct Task*);
-static void TeleportFieldEffectTask2(struct Task*);
-static void TeleportFieldEffectTask3(struct Task*);
-static void TeleportFieldEffectTask4(struct Task*);
-
-static void mapldr_08085D88(void);
-static void sub_80B8250(u8);
-
-static void sub_80B8280(struct Task *);
-static void sub_80B830C(struct Task *);
-static void sub_80B8410(struct Task *);
-
-static void sub_80B8554(u8);
-static void sub_80B8584(struct Task *);
-static void sub_80B85F8(struct Task *);
-static void sub_80B8660(struct Task *);
-static void sub_80B86EC(struct Task *);
-static void sub_80B871C(struct Task *);
-static void sub_80B8770(struct Task *);
-static void overworld_bg_setup_2(struct Task *);
-
-static void sub_80B880C(void);
-static void sub_80B8874(u16);
-
-static void sub_80B88B4(u8);
-static void sub_80B88E4(struct Task *);
-static void sub_80B8920(struct Task *);
-static void sub_80B898C(struct Task *);
-static void sub_80B89DC(struct Task *);
-static void sub_80B8A0C(struct Task *);
-static void sub_80B8A44(struct Task *);
-static void sub_80B8A64(struct Task *);
-
-static void sub_80B8AE0(void);
-static void sub_80B8B28(struct Task *);
-static bool8 sub_80B8B38(struct Task *);
-static bool8 sub_80B8BF0(struct Task *);
-
-static u8 sub_80B8C60(u32, u32, u32);
-static void sub_80B8CC0(struct Sprite *);
-static void sub_80B8D04(struct Sprite *);
-static void sub_80B8D20(struct Sprite *);
-
-static void sub_80B8D84(u8);
-static void sub_80B8DB4(struct Task *);
-static void sub_80B8E14(struct Task *);
-static void sub_80B8E60(struct Task *);
-static void sub_80B8EA8(struct Task *);
-static void sub_80B8F24(struct Task *);
-
-static void sub_80B9128(struct Sprite *);
-
-static void sub_80B91D4(u8);
-static void sub_80B9204(struct Task *);
-static void sub_80B925C(struct Task *);
-static void sub_80B92A0(struct Task *);
-static void sub_80B92F8(struct Task *);
-static void sub_80B933C(struct Task *);
-static void sub_80B9390(struct Task *);
-static void sub_80B9418(struct Task *);
-static void sub_80B9474(struct Task *);
-static void sub_80B9494(struct Task *);
-
-static u8 sub_80B94C4(void);
-static u8 sub_80B9508(u8);
-static void sub_80B9524(u8);
-static void sub_80B9560(u8, u8);
-static void sub_80B957C(struct Sprite *);
-static void sub_80B963C(struct Sprite *);
-
-static void sub_80B97D4(u8);
-static void sub_80B9804(struct Task *);
-static void sub_80B98B8(struct Task *);
-static void sub_80B9924(struct Task *);
-static void sub_80B9978(struct Task *);
-static void sub_80B99F0(struct Task *);
-static void sub_80B9A28(struct Task *);
-static void sub_80B9A60(struct Task *);
-
-static void sub_80B9BE8(u8 taskId);
-static void sub_80B9DB8(struct Sprite* sprite);
-static void Fldeff_MoveDeoxysRock_Step(u8 taskId);
+static bool8 LavaridgeGym1FWarpEffect_Init(struct Task *, struct ObjectEvent *, struct Sprite *);
+static bool8 LavaridgeGym1FWarpEffect_AshPuff(struct Task *, struct ObjectEvent *, struct Sprite *);
+static bool8 LavaridgeGym1FWarpEffect_Disappear(struct Task *, struct ObjectEvent *, struct Sprite *);
+static bool8 LavaridgeGym1FWarpEffect_FadeOut(struct Task *, struct ObjectEvent *, struct Sprite *);
+static bool8 LavaridgeGym1FWarpEffect_Warp(struct Task *, struct ObjectEvent *, struct Sprite *);
+
+static void Task_EscapeRopeWarpOut(u8);
+static void EscapeRopeWarpOutEffect_Init(struct Task *);
+static void EscapeRopeWarpOutEffect_Spin(struct Task *);
+
+static void FieldCallback_EscapeRopeWarpIn(void);
+static void Task_EscapeRopeWarpIn(u8);
+static void EscapeRopeWarpInEffect_Init(struct Task *);
+static void EscapeRopeWarpInEffect_Spin(struct Task *);
+
+static void Task_TeleportWarpOut(u8);
+static void TeleportWarpOutFieldEffect_Init(struct Task*);
+static void TeleportWarpOutFieldEffect_SpinGround(struct Task*);
+static void TeleportWarpOutFieldEffect_SpinExit(struct Task*);
+static void TeleportWarpOutFieldEffect_End(struct Task*);
+
+static void FieldCallback_TeleportWarpIn(void);
+static void Task_TeleportWarpIn(u8);
+static void TeleportWarpInFieldEffect_Init(struct Task *);
+static void TeleportWarpInFieldEffect_SpinEnter(struct Task *);
+static void TeleportWarpInFieldEffect_SpinGround(struct Task *);
+
+static void Task_FieldMoveShowMonOutdoors(u8);
+static void FieldMoveShowMonOutdoorsEffect_Init(struct Task *);
+static void FieldMoveShowMonOutdoorsEffect_LoadGfx(struct Task *);
+static void FieldMoveShowMonOutdoorsEffect_CreateBanner(struct Task *);
+static void FieldMoveShowMonOutdoorsEffect_WaitForMon(struct Task *);
+static void FieldMoveShowMonOutdoorsEffect_ShrinkBanner(struct Task *);
+static void FieldMoveShowMonOutdoorsEffect_RestoreBg(struct Task *);
+static void FieldMoveShowMonOutdoorsEffect_End(struct Task *);
+static void VBlankCB_FieldMoveShowMonOutdoors(void);
+static void LoadFieldMoveOutdoorStreaksTilemap(u16);
+
+static void Task_FieldMoveShowMonIndoors(u8);
+static void FieldMoveShowMonIndoorsEffect_Init(struct Task *);
+static void FieldMoveShowMonIndoorsEffect_LoadGfx(struct Task *);
+static void FieldMoveShowMonIndoorsEffect_SlideBannerOn(struct Task *);
+static void FieldMoveShowMonIndoorsEffect_WaitForMon(struct Task *);
+static void FieldMoveShowMonIndoorsEffect_RestoreBg(struct Task *);
+static void FieldMoveShowMonIndoorsEffect_SlideBannerOff(struct Task *);
+static void FieldMoveShowMonIndoorsEffect_End(struct Task *);
+static void VBlankCB_FieldMoveShowMonIndoors(void);
+static void AnimateIndoorShowMonBg(struct Task *);
+static bool8 SlideIndoorBannerOnscreen(struct Task *);
+static bool8 SlideIndoorBannerOffscreen(struct Task *);
+
+static u8 InitFieldMoveMonSprite(u32, u32, u32);
+static void SpriteCB_FieldMoveMonSlideOnscreen(struct Sprite *);
+static void SpriteCB_FieldMoveMonWaitAfterCry(struct Sprite *);
+static void SpriteCB_FieldMoveMonSlideOffscreen(struct Sprite *);
+
+static void Task_SurfFieldEffect(u8);
+static void SurfFieldEffect_Init(struct Task *);
+static void SurfFieldEffect_FieldMovePose(struct Task *);
+static void SurfFieldEffect_ShowMon(struct Task *);
+static void SurfFieldEffect_JumpOnSurfBlob(struct Task *);
+static void SurfFieldEffect_End(struct Task *);
+
+static void SpriteCB_NPCFlyOut(struct Sprite *);
+
+static void Task_FlyOut(u8);
+static void FlyOutFieldEffect_FieldMovePose(struct Task *);
+static void FlyOutFieldEffect_ShowMon(struct Task *);
+static void FlyOutFieldEffect_BirdLeaveBall(struct Task *);
+static void FlyOutFieldEffect_WaitBirdLeave(struct Task *);
+static void FlyOutFieldEffect_BirdSwoopDown(struct Task *);
+static void FlyOutFieldEffect_JumpOnBird(struct Task *);
+static void FlyOutFieldEffect_FlyOffWithBird(struct Task *);
+static void FlyOutFieldEffect_WaitFlyOff(struct Task *);
+static void FlyOutFieldEffect_End(struct Task *);
+
+static u8 CreateFlyBirdSprite(void);
+static u8 GetFlyBirdAnimCompleted(u8);
+static void StartFlyBirdSwoopDown(u8);
+static void SetFlyBirdPlayerSpriteId(u8, u8);
+static void SpriteCB_FlyBirdLeaveBall(struct Sprite *);
+static void SpriteCB_FlyBirdSwoopDown(struct Sprite *);
+
+static void Task_FlyIn(u8);
+static void FlyInFieldEffect_BirdSwoopDown(struct Task *);
+static void FlyInFieldEffect_FlyInWithBird(struct Task *);
+static void FlyInFieldEffect_JumpOffBird(struct Task *);
+static void FlyInFieldEffect_FieldMovePose(struct Task *);
+static void FlyInFieldEffect_BirdReturnToBall(struct Task *);
+static void FlyInFieldEffect_WaitBirdReturn(struct Task *);
+static void FlyInFieldEffect_End(struct Task *);
+
+static void Task_DestroyDeoxysRock(u8 taskId);
+static void DestroyDeoxysRockEffect_CameraShake(s16*, u8);
+static void DestroyDeoxysRockEffect_RockFragments(s16*, u8);
+static void DestroyDeoxysRockEffect_WaitAndEnd(s16*, u8);
+static void CreateDeoxysRockFragments(struct Sprite*);
+static void SpriteCB_DeoxysRockFragment(struct Sprite* sprite);
+
+static void Task_MoveDeoxysRock(u8 taskId);
// Static RAM declarations
@@ -240,34 +242,33 @@ extern const struct CompressedSpriteSheet gTrainerFrontPicTable[];
extern u8 *gFieldEffectScriptPointers[];
extern const struct SpriteTemplate *const gFieldEffectObjectTemplatePointers[];
-// .rodata
-const u32 gNewGameBirchPic[] = INCBIN_U32("graphics/birch_speech/birch.4bpp");
-const u32 gUnusedBirchBeauty[] = INCBIN_U32("graphics/unused/intro_birch_beauty.4bpp");
-const u16 gNewGameBirchPalette[16] = INCBIN_U16("graphics/birch_speech/birch.gbapal");
-const u32 gSpriteImage_855A970[] = INCBIN_U32("graphics/misc/pokeball_glow.4bpp");
-const u16 gFieldEffectObjectPalette4[16] = INCBIN_U16("graphics/field_effects/palettes/04.gbapal");
-const u32 gSpriteImage_855A9B0[] = INCBIN_U32("graphics/misc/pokecenter_monitor/0.4bpp");
-const u32 gSpriteImage_855AA70[] = INCBIN_U32("graphics/misc/pokecenter_monitor/1.4bpp");
-const u32 gSpriteImage_855AB30[] = INCBIN_U32("graphics/misc/big_hof_monitor.4bpp");
-const u8 gSpriteImage_855AD30[] = INCBIN_U8("graphics/misc/small_hof_monitor.4bpp");
-const u16 gFieldEffectObjectPalette5[16] = INCBIN_U16("graphics/field_effects/palettes/05.gbapal");
+static const u32 sNewGameBirch_Gfx[] = INCBIN_U32("graphics/birch_speech/birch.4bpp");
+static const u32 sUnusedBirchBeauty[] = INCBIN_U32("graphics/unused/intro_birch_beauty.4bpp");
+static const u16 sNewGameBirch_Pal[16] = INCBIN_U16("graphics/birch_speech/birch.gbapal");
+static const u32 sPokeballGlow_Gfx[] = INCBIN_U32("graphics/misc/pokeball_glow.4bpp");
+static const u16 sPokeballGlow_Pal[16] = INCBIN_U16("graphics/field_effects/palettes/pokeball_glow.gbapal");
+static const u32 sPokecenterMonitor0_Gfx[] = INCBIN_U32("graphics/misc/pokecenter_monitor/0.4bpp");
+static const u32 sPokecenterMonitor1_Gfx[] = INCBIN_U32("graphics/misc/pokecenter_monitor/1.4bpp");
+static const u32 sHofMonitorBig_Gfx[] = INCBIN_U32("graphics/misc/hof_monitor_big.4bpp");
+static const u8 sHofMonitorSmall_Gfx[] = INCBIN_U8("graphics/misc/hof_monitor_small.4bpp");
+static const u16 sHofMonitor_Pal[16] = INCBIN_U16("graphics/field_effects/palettes/hof_monitor.gbapal");
// Graphics for the lights streaking past your Pokemon when it uses a field move.
-const u32 gFieldMoveStreaksTiles[] = INCBIN_U32("graphics/misc/field_move_streaks.4bpp");
-const u16 gFieldMoveStreaksPalette[16] = INCBIN_U16("graphics/misc/field_move_streaks.gbapal");
-const u16 gFieldMoveStreaksTilemap[] = INCBIN_U16("graphics/misc/field_move_streaks_map.bin");
-
-// The following light streaks effect is used when the map is dark (e.g. a cave).
-const u32 gDarknessFieldMoveStreaksTiles[] = INCBIN_U32("graphics/misc/darkness_field_move_streaks.4bpp");
-const u16 gDarknessFieldMoveStreaksPalette[16] = INCBIN_U16("graphics/misc/darkness_field_move_streaks.gbapal");
-const u16 gDarknessFieldMoveStreaksTilemap[] = INCBIN_U16("graphics/misc/darkness_field_move_streaks_map.bin");
-
-const u16 gUnknown_0855B610[16] = INCBIN_U16("graphics/misc/spotlight.gbapal");
-const u8 gUnknown_0855B630[] = INCBIN_U8("graphics/misc/spotlight.4bpp");
-const u8 gUnknown_0855C170[] = INCBIN_U8("graphics/unknown/unknown_55C170.4bpp");
-const u8 gUnknown_0855C190[] = INCBIN_U8("graphics/unknown/unknown_55C190.4bpp");
-const u8 gUnknown_0855C1B0[] = INCBIN_U8("graphics/unknown/unknown_55C1B0.4bpp");
-const u8 gUnknown_0855C1D0[] = INCBIN_U8("graphics/unknown/unknown_55C1D0.4bpp");
+static const u32 sFieldMoveStreaksOutdoors_Gfx[] = INCBIN_U32("graphics/misc/field_move_streaks.4bpp");
+static const u16 sFieldMoveStreaksOutdoors_Pal[16] = INCBIN_U16("graphics/misc/field_move_streaks.gbapal");
+static const u16 sFieldMoveStreaksOutdoors_Tilemap[320] = INCBIN_U16("graphics/misc/field_move_streaks_map.bin");
+
+// The following light streaks effect is used when the map is indoors
+static const u32 sFieldMoveStreaksIndoors_Gfx[] = INCBIN_U32("graphics/misc/darkness_field_move_streaks.4bpp");
+static const u16 sFieldMoveStreaksIndoors_Pal[16] = INCBIN_U16("graphics/misc/darkness_field_move_streaks.gbapal");
+static const u16 sFieldMoveStreaksIndoors_Tilemap[320] = INCBIN_U16("graphics/misc/darkness_field_move_streaks_map.bin");
+
+static const u16 sSpotlight_Pal[16] = INCBIN_U16("graphics/misc/spotlight.gbapal");
+static const u8 sSpotlight_Gfx[] = INCBIN_U8("graphics/misc/spotlight.4bpp");
+static const u8 sRockFragment_TopLeft[] = INCBIN_U8("graphics/misc/deoxys_rock_fragment_top_left.4bpp");
+static const u8 sRockFragment_TopRight[] = INCBIN_U8("graphics/misc/deoxys_rock_fragment_top_right.4bpp");
+static const u8 sRockFragment_BottomLeft[] = INCBIN_U8("graphics/misc/deoxys_rock_fragment_bottom_left.4bpp");
+static const u8 sRockFragment_BottomRight[] = INCBIN_U8("graphics/misc/deoxys_rock_fragment_bottom_right.4bpp");
bool8 (*const gFieldEffectScriptFuncs[])(u8 **, u32 *) =
{
@@ -281,7 +282,7 @@ bool8 (*const gFieldEffectScriptFuncs[])(u8 **, u32 *) =
FieldEffectCmd_loadfadedpal_callnative,
};
-const struct OamData gNewGameBirchOamAttributes =
+static const struct OamData sOam_64x64 =
{
.y = 0,
.affineMode = ST_OAM_AFFINE_OFF,
@@ -295,7 +296,7 @@ const struct OamData gNewGameBirchOamAttributes =
.paletteNum = 0,
};
-const struct OamData gOamData_855C218 =
+static const struct OamData sOam_8x8 =
{
.y = 0,
.affineMode = ST_OAM_AFFINE_OFF,
@@ -309,7 +310,7 @@ const struct OamData gOamData_855C218 =
.paletteNum = 0,
};
-const struct OamData gOamData_855C220 =
+static const struct OamData sOam_16x16 =
{
.y = 0,
.affineMode = ST_OAM_AFFINE_OFF,
@@ -323,52 +324,52 @@ const struct OamData gOamData_855C220 =
.paletteNum = 0,
};
-const struct SpriteFrameImage gNewGameBirchPicTable[] =
+static const struct SpriteFrameImage sPicTable_NewGameBirch[] =
{
- obj_frame_tiles(gNewGameBirchPic)
+ obj_frame_tiles(sNewGameBirch_Gfx)
};
-const struct SpritePalette gNewGameBirchObjectPaletteInfo =
+static const struct SpritePalette sSpritePalette_NewGameBirch =
{
- .data = gNewGameBirchPalette,
+ .data = sNewGameBirch_Pal,
.tag = 0x1006
};
-const union AnimCmd gNewGameBirchImageAnim[] =
+static const union AnimCmd sAnim_NewGameBirch[] =
{
ANIMCMD_FRAME(.imageValue = 0, .duration = 1),
ANIMCMD_END
};
-const union AnimCmd *const gNewGameBirchImageAnimTable[] =
+static const union AnimCmd *const sAnimTable_NewGameBirch[] =
{
- gNewGameBirchImageAnim
+ sAnim_NewGameBirch
};
-const struct SpriteTemplate gNewGameBirchObjectTemplate =
+static const struct SpriteTemplate sSpriteTemplate_NewGameBirch =
{
.tileTag = 0xFFFF,
- .paletteTag = 4102,
- .oam = &gNewGameBirchOamAttributes,
- .anims = gNewGameBirchImageAnimTable,
- .images = gNewGameBirchPicTable,
+ .paletteTag = 0x1006,
+ .oam = &sOam_64x64,
+ .anims = sAnimTable_NewGameBirch,
+ .images = sPicTable_NewGameBirch,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = SpriteCallbackDummy
};
-const struct SpritePalette gFieldEffectObjectPaletteInfo4 =
+const struct SpritePalette gSpritePalette_PokeballGlow =
{
- .data = gFieldEffectObjectPalette4,
- .tag = 0x1007
+ .data = sPokeballGlow_Pal,
+ .tag = FLDEFF_PAL_TAG_POKEBALL_GLOW
};
-const struct SpritePalette gFieldEffectObjectPaletteInfo5 =
+const struct SpritePalette gSpritePalette_HofMonitor =
{
- .data = gFieldEffectObjectPalette5,
- .tag = 0x1010
+ .data = sHofMonitor_Pal,
+ .tag = FLDEFF_PAL_TAG_HOF_MONITOR
};
-const struct OamData gOamData_855C26C =
+static const struct OamData sOam_32x16 =
{
.y = 0,
.affineMode = ST_OAM_AFFINE_OFF,
@@ -382,28 +383,28 @@ const struct OamData gOamData_855C26C =
.paletteNum = 0,
};
-const struct SpriteFrameImage gSpriteImageTable_855C274[] =
+static const struct SpriteFrameImage sPicTable_PokeballGlow[] =
{
- obj_frame_tiles(gSpriteImage_855A970)
+ obj_frame_tiles(sPokeballGlow_Gfx)
};
-const struct SpriteFrameImage gSpriteImageTable_855C27C[] =
+static const struct SpriteFrameImage sPicTable_PokecenterMonitor[] =
{
- obj_frame_tiles(gSpriteImage_855A9B0),
- obj_frame_tiles(gSpriteImage_855AA70)
+ obj_frame_tiles(sPokecenterMonitor0_Gfx),
+ obj_frame_tiles(sPokecenterMonitor1_Gfx)
};
-const struct SpriteFrameImage gSpriteImageTable_855C28C[] =
+static const struct SpriteFrameImage sPicTable_HofMonitorBig[] =
{
- obj_frame_tiles(gSpriteImage_855AB30)
+ obj_frame_tiles(sHofMonitorBig_Gfx)
};
-const struct SpriteFrameImage gSpriteImageTable_855C294[] =
+static const struct SpriteFrameImage sPicTable_HofMonitorSmall[] =
{
- {.data = gSpriteImage_855AD30, .size = 0x200} // the macro breaks down here
+ {.data = sHofMonitorSmall_Gfx, .size = 0x200} // the macro breaks down here
};
-const struct Subsprite gSubspriteTable_855C29C[] =
+static const struct Subsprite sSubsprites_PokecenterMonitor[] =
{
{
.x = -12,
@@ -439,9 +440,9 @@ const struct Subsprite gSubspriteTable_855C29C[] =
}
};
-const struct SubspriteTable gUnknown_0855C2AC = subsprite_table(gSubspriteTable_855C29C);
+static const struct SubspriteTable sSubspriteTable_PokecenterMonitor = subsprite_table(sSubsprites_PokecenterMonitor);
-const struct Subsprite gSubspriteTable_855C2B4[] =
+static const struct Subsprite sSubsprites_HofMonitorBig[] =
{
{
.x = -32,
@@ -477,7 +478,7 @@ const struct Subsprite gSubspriteTable_855C2B4[] =
}
};
-const struct SubspriteTable gUnknown_0855C2C4 = subsprite_table(gSubspriteTable_855C2B4);
+static const struct SubspriteTable sSubspriteTable_HofMonitorBig = subsprite_table(sSubsprites_HofMonitorBig);
const union AnimCmd gSpriteAnim_855C2CC[] =
{
@@ -504,84 +505,84 @@ const union AnimCmd *const gSpriteAnimTable_855C2F8[] =
gSpriteAnim_855C2D4
};
-const union AnimCmd *const gSpriteAnimTable_855C300[] =
+static const union AnimCmd *const sAnimTable_HofMonitor[] =
{
gSpriteAnim_855C2CC
};
-const struct SpriteTemplate gSpriteTemplate_855C304 =
+static const struct SpriteTemplate sSpriteTemplate_PokeballGlow =
{
.tileTag = 0xFFFF,
- .paletteTag = 4103,
- .oam = &gOamData_855C218,
+ .paletteTag = FLDEFF_PAL_TAG_POKEBALL_GLOW,
+ .oam = &sOam_8x8,
.anims = gSpriteAnimTable_855C2F8,
- .images = gSpriteImageTable_855C274,
+ .images = sPicTable_PokeballGlow,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = SpriteCB_PokeballGlow
};
-const struct SpriteTemplate gSpriteTemplate_855C31C =
+static const struct SpriteTemplate sSpriteTemplate_PokecenterMonitor =
{
.tileTag = 0xFFFF,
- .paletteTag = 4100,
- .oam = &gOamData_855C220,
+ .paletteTag = FLDEFF_PAL_TAG_GENERAL_0,
+ .oam = &sOam_16x16,
.anims = gSpriteAnimTable_855C2F8,
- .images = gSpriteImageTable_855C27C,
+ .images = sPicTable_PokecenterMonitor,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = SpriteCB_PokecenterMonitor
};
-const struct SpriteTemplate gSpriteTemplate_855C334 =
+static const struct SpriteTemplate sSpriteTemplate_HofMonitorBig =
{
.tileTag = 0xFFFF,
- .paletteTag = 4112,
- .oam = &gOamData_855C220,
- .anims = gSpriteAnimTable_855C300,
- .images = gSpriteImageTable_855C28C,
+ .paletteTag = FLDEFF_PAL_TAG_HOF_MONITOR,
+ .oam = &sOam_16x16,
+ .anims = sAnimTable_HofMonitor,
+ .images = sPicTable_HofMonitorBig,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = SpriteCB_HallOfFameMonitor
};
-const struct SpriteTemplate gSpriteTemplate_855C34C =
+static const struct SpriteTemplate sSpriteTemplate_HofMonitorSmall =
{
.tileTag = 0xFFFF,
- .paletteTag = 4112,
- .oam = &gOamData_855C26C,
- .anims = gSpriteAnimTable_855C300,
- .images = gSpriteImageTable_855C294,
+ .paletteTag = FLDEFF_PAL_TAG_HOF_MONITOR,
+ .oam = &sOam_32x16,
+ .anims = sAnimTable_HofMonitor,
+ .images = sPicTable_HofMonitorSmall,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = SpriteCB_HallOfFameMonitor
};
-void (*const gUnknown_0855C364[])(struct Task *) =
+void (*const sPokecenterHealEffectFuncs[])(struct Task *) =
{
- PokecenterHealEffect_0,
- PokecenterHealEffect_1,
- PokecenterHealEffect_2,
- PokecenterHealEffect_3
+ PokecenterHealEffect_Init,
+ PokecenterHealEffect_WaitForBallPlacement,
+ PokecenterHealEffect_WaitForBallFlashing,
+ PokecenterHealEffect_WaitForSoundAndEnd
};
-void (*const gUnknown_0855C374[])(struct Task *) =
+void (*const sHallOfFameRecordEffectFuncs[])(struct Task *) =
{
- HallOfFameRecordEffect_0,
- HallOfFameRecordEffect_1,
- HallOfFameRecordEffect_2,
- HallOfFameRecordEffect_3
+ HallOfFameRecordEffect_Init,
+ HallOfFameRecordEffect_WaitForBallPlacement,
+ HallOfFameRecordEffect_WaitForBallFlashing,
+ HallOfFameRecordEffect_WaitForSoundAndEnd
};
-void (*const gUnknown_0855C384[])(struct Sprite *) =
+void (*const sPokeballGlowEffectFuncs[])(struct Sprite *) =
{
- PokeballGlowEffect_0,
- PokeballGlowEffect_1,
- PokeballGlowEffect_2,
- PokeballGlowEffect_3,
- PokeballGlowEffect_4,
- PokeballGlowEffect_5,
- PokeballGlowEffect_6,
- PokeballGlowEffect_7
+ PokeballGlowEffect_PlaceBalls,
+ PokeballGlowEffect_TryPlaySe,
+ PokeballGlowEffect_Flash1,
+ PokeballGlowEffect_Flash2,
+ PokeballGlowEffect_WaitAfterFlash,
+ PokeballGlowEffect_Dummy,
+ PokeballGlowEffect_WaitForSound,
+ PokeballGlowEffect_Idle
};
-const struct Coords16 gUnknown_0855C3A4[] =
+static const struct Coords16 sPokeballCoordOffsets[PARTY_SIZE] =
{
{.x = 0, .y = 0},
{.x = 6, .y = 0},
@@ -591,93 +592,91 @@ const struct Coords16 gUnknown_0855C3A4[] =
{.x = 6, .y = 8}
};
-const u8 gUnknown_0855C3BC[] = {16, 12, 8, 0};
-const u8 gUnknown_0855C3C0[] = {16, 12, 8, 0};
-const u8 gUnknown_0855C3C4[] = { 0, 0, 0, 0};
+static const u8 sPokeballGlowReds[] = {16, 12, 8, 0};
+static const u8 sPokeballGlowGreens[] = {16, 12, 8, 0};
+static const u8 sPokeballGlowBlues[] = { 0, 0, 0, 0};
bool8 (*const sFallWarpFieldEffectFuncs[])(struct Task *) =
{
- FallWarpEffect_1,
- FallWarpEffect_2,
- FallWarpEffect_3,
- FallWarpEffect_4,
- FallWarpEffect_5,
- FallWarpEffect_6,
- FallWarpEffect_7,
+ FallWarpEffect_Init,
+ FallWarpEffect_WaitWeather,
+ FallWarpEffect_StartFall,
+ FallWarpEffect_Fall,
+ FallWarpEffect_Land,
+ FallWarpEffect_CameraShake,
+ FallWarpEffect_End,
};
-bool8 (*const sEscalatorWarpFieldEffectFuncs[])(struct Task *) =
+bool8 (*const sEscalatorWarpOutFieldEffectFuncs[])(struct Task *) =
{
- EscalatorWarpEffect_1,
- EscalatorWarpEffect_2,
- EscalatorWarpEffect_3,
- EscalatorWarpEffect_4,
- EscalatorWarpEffect_5,
- EscalatorWarpEffect_6,
+ EscalatorWarpOut_Init,
+ EscalatorWarpOut_WaitForPlayer,
+ EscalatorWarpOut_Up_Ride,
+ EscalatorWarpOut_Up_End,
+ EscalatorWarpOut_Down_Ride,
+ EscalatorWarpOut_Down_End,
};
-bool8 (*const gUnknown_0855C3FC[])(struct Task *) =
+bool8 (*const sEscalatorWarpInFieldEffectFuncs[])(struct Task *) =
{
- sub_80B7114,
- sub_80B7190,
- sub_80B71D0,
- sub_80B7230,
- sub_80B7270,
- sub_80B72D0,
- sub_80B72F4,
+ EscalatorWarpIn_Init,
+ EscalatorWarpIn_Down_Init,
+ EscalatorWarpIn_Down_Ride,
+ EscalatorWarpIn_Up_Init,
+ EscalatorWarpIn_Up_Ride,
+ EscalatorWarpIn_WaitForMovement,
+ EscalatorWarpIn_End,
};
-bool8 (*const gUnknown_0855C418[])(struct Task *, struct ObjectEvent *) =
+bool8 (*const sWaterfallFieldEffectFuncs[])(struct Task *, struct ObjectEvent *) =
{
- sub_80B73D0,
- waterfall_1_do_anim_probably,
- waterfall_2_wait_anim_finish_probably,
- sub_80B7450,
- sub_80B7478,
+ WaterfallFieldEffect_Init,
+ WaterfallFieldEffect_ShowMon,
+ WaterfallFieldEffect_WaitForShowMon,
+ WaterfallFieldEffect_RideUp,
+ WaterfallFieldEffect_ContinueRideOrEnd,
};
-bool8 (*const gUnknown_0855C42C[])(struct Task *) =
+bool8 (*const sDiveFieldEffectFuncs[])(struct Task *) =
{
- dive_1_lock,
- dive_2_unknown,
- dive_3_unknown,
+ DiveFieldEffect_Init,
+ DiveFieldEffect_ShowMon,
+ DiveFieldEffect_TryWarp,
};
bool8 (*const sLavaridgeGymB1FWarpEffectFuncs[])(struct Task *, struct ObjectEvent *, struct Sprite *) =
{
- LavaridgeGymB1FWarpEffect_1,
- LavaridgeGymB1FWarpEffect_2,
- LavaridgeGymB1FWarpEffect_3,
- LavaridgeGymB1FWarpEffect_4,
- LavaridgeGymB1FWarpEffect_5,
- LavaridgeGymB1FWarpEffect_6,
+ LavaridgeGymB1FWarpEffect_Init,
+ LavaridgeGymB1FWarpEffect_CameraShake,
+ LavaridgeGymB1FWarpEffect_Launch,
+ LavaridgeGymB1FWarpEffect_Rise,
+ LavaridgeGymB1FWarpEffect_FadeOut,
+ LavaridgeGymB1FWarpEffect_Warp,
};
bool8 (*const sLavaridgeGymB1FWarpExitEffectFuncs[])(struct Task *, struct ObjectEvent *, struct Sprite *) =
{
- LavaridgeGymB1FWarpExitEffect_1,
- LavaridgeGymB1FWarpExitEffect_2,
- LavaridgeGymB1FWarpExitEffect_3,
- LavaridgeGymB1FWarpExitEffect_4,
+ LavaridgeGymB1FWarpExitEffect_Init,
+ LavaridgeGymB1FWarpExitEffect_StartPopOut,
+ LavaridgeGymB1FWarpExitEffect_PopOut,
+ LavaridgeGymB1FWarpExitEffect_End,
};
bool8 (*const sLavaridgeGym1FWarpEffectFuncs[])(struct Task *, struct ObjectEvent *, struct Sprite *) =
{
- LavaridgeGym1FWarpEffect_1,
- LavaridgeGym1FWarpEffect_2,
- LavaridgeGym1FWarpEffect_3,
- LavaridgeGym1FWarpEffect_4,
- LavaridgeGym1FWarpEffect_5,
+ LavaridgeGym1FWarpEffect_Init,
+ LavaridgeGym1FWarpEffect_AshPuff,
+ LavaridgeGym1FWarpEffect_Disappear,
+ LavaridgeGym1FWarpEffect_FadeOut,
+ LavaridgeGym1FWarpEffect_Warp,
};
-void (*const gEscapeRopeFieldEffectFuncs[])(struct Task *) =
+void (*const sEscapeRopeWarpOutEffectFuncs[])(struct Task *) =
{
- EscapeRopeFieldEffect_Step0,
- EscapeRopeFieldEffect_Step1,
+ EscapeRopeWarpOutEffect_Init,
+ EscapeRopeWarpOutEffect_Spin,
};
-// .text
-
u32 FieldEffectStart(u8 id)
{
u8 *script;
@@ -881,7 +880,7 @@ u8 CreateTrainerSprite(u8 trainerSpriteID, s16 x, s16 y, u8 subpriority, u8 *buf
LoadCompressedSpriteSheetOverrideBuffer(&gTrainerFrontPicTable[trainerSpriteID], buffer);
spriteTemplate.tileTag = gTrainerFrontPicTable[trainerSpriteID].tag;
spriteTemplate.paletteTag = gTrainerFrontPicPaletteTable[trainerSpriteID].tag;
- spriteTemplate.oam = &gNewGameBirchOamAttributes;
+ spriteTemplate.oam = &sOam_64x64;
spriteTemplate.anims = gDummySpriteAnimTable;
spriteTemplate.images = NULL;
spriteTemplate.affineAnims = gDummySpriteAffineAnimTable;
@@ -897,8 +896,8 @@ void LoadTrainerGfx_TrainerCard(u8 gender, u16 palOffset, u8 *dest)
u8 AddNewGameBirchObject(s16 x, s16 y, u8 subpriority)
{
- LoadSpritePalette(&gNewGameBirchObjectPaletteInfo);
- return CreateSprite(&gNewGameBirchObjectTemplate, x, y, subpriority);
+ LoadSpritePalette(&sSpritePalette_NewGameBirch);
+ return CreateSprite(&sSpriteTemplate_NewGameBirch, x, y, subpriority);
}
u8 CreateMonSprite_PicBox(u16 species, s16 x, s16 y, u8 subpriority)
@@ -911,10 +910,10 @@ u8 CreateMonSprite_PicBox(u16 species, s16 x, s16 y, u8 subpriority)
return spriteId;
}
-u8 CreateMonSprite_FieldMove(u16 species, u32 d, u32 g, s16 x, s16 y, u8 subpriority)
+u8 CreateMonSprite_FieldMove(u16 species, u32 otId, u32 personality, s16 x, s16 y, u8 subpriority)
{
- const struct CompressedSpritePalette *spritePalette = GetMonSpritePalStructFromOtIdPersonality(species, d, g);
- u16 spriteId = CreateMonPicSprite_HandleDeoxys(species, d, g, 1, x, y, 0, spritePalette->tag);
+ const struct CompressedSpritePalette *spritePalette = GetMonSpritePalStructFromOtIdPersonality(species, otId, personality);
+ u16 spriteId = CreateMonPicSprite_HandleDeoxys(species, otId, personality, 1, x, y, 0, spritePalette->tag);
PreservePaletteInWeather(IndexOfSpritePaletteTag(spritePalette->tag) + 0x10);
if (spriteId == 0xFFFF)
return MAX_SPRITES;
@@ -974,6 +973,28 @@ void MultiplyPaletteRGBComponents(u16 i, u8 r, u8 g, u8 b)
gPlttBufferFaded[i] = outPal;
}
+// Task data for Task_PokecenterHeal and Task_HallOfFameRecord
+#define tState data[0]
+#define tNumMons data[1]
+#define tFirstBallX data[2]
+#define tFirstBallY data[3]
+#define tMonitorX data[4]
+#define tMonitorY data[5]
+#define tBallSpriteId data[6]
+#define tMonitorSpriteId data[7]
+#define tStartHofFlash data[15]
+
+// Sprite data for SpriteCB_PokeballGlowEffect
+#define sState data[0]
+#define sTimer data[1]
+#define sCounter data[2]
+#define sPlayHealSe data[5]
+#define sNumMons data[6]
+#define sSpriteId data[7]
+
+// Sprite data for SpriteCB_PokeballGlow
+#define sEffectSpriteId data[0]
+
bool8 FldEff_PokecenterHeal(void)
{
u8 nPokemon;
@@ -981,11 +1002,11 @@ bool8 FldEff_PokecenterHeal(void)
nPokemon = CalculatePlayerPartyCount();
task = &gTasks[CreateTask(Task_PokecenterHeal, 0xff)];
- task->data[1] = nPokemon;
- task->data[2] = 0x5d;
- task->data[3] = 0x24;
- task->data[4] = 0x7c;
- task->data[5] = 0x18;
+ task->tNumMons = nPokemon;
+ task->tFirstBallX = 93;
+ task->tFirstBallY = 36;
+ task->tMonitorX = 124;
+ task->tMonitorY = 24;
return FALSE;
}
@@ -993,38 +1014,38 @@ static void Task_PokecenterHeal(u8 taskId)
{
struct Task *task;
task = &gTasks[taskId];
- gUnknown_0855C364[task->data[0]](task);
+ sPokecenterHealEffectFuncs[task->tState](task);
}
-static void PokecenterHealEffect_0(struct Task *task)
+static void PokecenterHealEffect_Init(struct Task *task)
{
- task->data[0]++;
- task->data[6] = CreatePokeballGlowSprite(task->data[1], task->data[2], task->data[3], 1);
- task->data[7] = PokecenterHealEffectHelper(task->data[4], task->data[5]);
+ task->tState++;
+ task->tBallSpriteId = CreateGlowingPokeballsEffect(task->tNumMons, task->tFirstBallX, task->tFirstBallY, TRUE);
+ task->tMonitorSpriteId = CreatePokecenterMonitorSprite(task->tMonitorX, task->tMonitorY);
}
-static void PokecenterHealEffect_1(struct Task *task)
+static void PokecenterHealEffect_WaitForBallPlacement(struct Task *task)
{
- if (gSprites[task->data[6]].data[0] > 1)
+ if (gSprites[task->tBallSpriteId].sState > 1)
{
- gSprites[task->data[7]].data[0]++;
- task->data[0]++;
+ gSprites[task->tMonitorSpriteId].sState++;
+ task->tState++;
}
}
-static void PokecenterHealEffect_2(struct Task *task)
+static void PokecenterHealEffect_WaitForBallFlashing(struct Task *task)
{
- if (gSprites[task->data[6]].data[0] > 4)
+ if (gSprites[task->tBallSpriteId].sState > 4)
{
- task->data[0]++;
+ task->tState++;
}
}
-static void PokecenterHealEffect_3(struct Task *task)
+static void PokecenterHealEffect_WaitForSoundAndEnd(struct Task *task)
{
- if (gSprites[task->data[6]].data[0] > 6)
+ if (gSprites[task->tBallSpriteId].sState > 6)
{
- DestroySprite(&gSprites[task->data[6]]);
+ DestroySprite(&gSprites[task->tBallSpriteId]);
FieldEffectActiveListRemove(FLDEFF_POKECENTER_HEAL);
DestroyTask(FindTaskIdByFunc(Task_PokecenterHeal));
}
@@ -1037,9 +1058,9 @@ bool8 FldEff_HallOfFameRecord(void)
nPokemon = CalculatePlayerPartyCount();
task = &gTasks[CreateTask(Task_HallOfFameRecord, 0xff)];
- task->data[1] = nPokemon;
- task->data[2] = 0x75;
- task->data[3] = 0x34;
+ task->tNumMons = nPokemon;
+ task->tFirstBallX = 117;
+ task->tFirstBallY = 52;
return FALSE;
}
@@ -1047,51 +1068,50 @@ static void Task_HallOfFameRecord(u8 taskId)
{
struct Task *task;
task = &gTasks[taskId];
- gUnknown_0855C374[task->data[0]](task);
+ sHallOfFameRecordEffectFuncs[task->tState](task);
}
-static void HallOfFameRecordEffect_0(struct Task *task)
+static void HallOfFameRecordEffect_Init(struct Task *task)
{
u8 taskId;
- task->data[0]++;
- task->data[6] = CreatePokeballGlowSprite(task->data[1], task->data[2], task->data[3], 0);
+ task->tState++;
+ task->tBallSpriteId = CreateGlowingPokeballsEffect(task->tNumMons, task->tFirstBallX, task->tFirstBallY, FALSE);
taskId = FindTaskIdByFunc(Task_HallOfFameRecord);
- HallOfFameRecordEffectHelper(taskId, 0x78, 0x18, 0);
- HallOfFameRecordEffectHelper(taskId, 0x28, 0x08, 1);
- HallOfFameRecordEffectHelper(taskId, 0x48, 0x08, 1);
- HallOfFameRecordEffectHelper(taskId, 0xa8, 0x08, 1);
- HallOfFameRecordEffectHelper(taskId, 0xc8, 0x08, 1);
+ CreateHofMonitorSprite(taskId, 120, 24, FALSE);
+ CreateHofMonitorSprite(taskId, 40, 8, TRUE);
+ CreateHofMonitorSprite(taskId, 72, 8, TRUE);
+ CreateHofMonitorSprite(taskId, 168, 8, TRUE);
+ CreateHofMonitorSprite(taskId, 200, 8, TRUE);
}
-static void HallOfFameRecordEffect_1(struct Task *task)
+static void HallOfFameRecordEffect_WaitForBallPlacement(struct Task *task)
{
- if (gSprites[task->data[6]].data[0] > 1)
+ if (gSprites[task->tBallSpriteId].sState > 1)
{
- task->data[15]++; // was this ever initialized? is this ever used?
- task->data[0]++;
+ task->tStartHofFlash++;
+ task->tState++;
}
}
-static void HallOfFameRecordEffect_2(struct Task *task)
+static void HallOfFameRecordEffect_WaitForBallFlashing(struct Task *task)
{
- if (gSprites[task->data[6]].data[0] > 4)
+ if (gSprites[task->tBallSpriteId].sState > 4)
{
- task->data[0]++;
+ task->tState++;
}
}
-static void HallOfFameRecordEffect_3(struct Task *task)
+static void HallOfFameRecordEffect_WaitForSoundAndEnd(struct Task *task)
{
- if (gSprites[task->data[6]].data[0] > 6)
+ if (gSprites[task->tBallSpriteId].sState > 6)
{
- DestroySprite(&gSprites[task->data[6]]);
+ DestroySprite(&gSprites[task->tBallSpriteId]);
FieldEffectActiveListRemove(FLDEFF_HALL_OF_FAME_RECORD);
DestroyTask(FindTaskIdByFunc(Task_HallOfFameRecord));
}
}
-
-static u8 CreatePokeballGlowSprite(s16 data6, s16 x, s16 y, u16 data5)
+static u8 CreateGlowingPokeballsEffect(s16 numMons, s16 x, s16 y, bool16 playHealSe)
{
u8 spriteId;
struct Sprite *sprite;
@@ -1099,150 +1119,150 @@ static u8 CreatePokeballGlowSprite(s16 data6, s16 x, s16 y, u16 data5)
sprite = &gSprites[spriteId];
sprite->pos2.x = x;
sprite->pos2.y = y;
- sprite->data[5] = data5;
- sprite->data[6] = data6;
- sprite->data[7] = spriteId;
+ sprite->sPlayHealSe = playHealSe;
+ sprite->sNumMons = numMons;
+ sprite->sSpriteId = spriteId;
return spriteId;
}
static void SpriteCB_PokeballGlowEffect(struct Sprite *sprite)
{
- gUnknown_0855C384[sprite->data[0]](sprite);
+ sPokeballGlowEffectFuncs[sprite->sState](sprite);
}
-static void PokeballGlowEffect_0(struct Sprite *sprite)
+static void PokeballGlowEffect_PlaceBalls(struct Sprite *sprite)
{
- u8 endSpriteId;
- if (sprite->data[1] == 0 || (--sprite->data[1]) == 0)
+ u8 spriteId;
+ if (sprite->sTimer == 0 || (--sprite->sTimer) == 0)
{
- sprite->data[1] = 25;
- endSpriteId = CreateSpriteAtEnd(&gSpriteTemplate_855C304, gUnknown_0855C3A4[sprite->data[2]].x + sprite->pos2.x, gUnknown_0855C3A4[sprite->data[2]].y + sprite->pos2.y, 0);
- gSprites[endSpriteId].oam.priority = 2;
- gSprites[endSpriteId].data[0] = sprite->data[7];
- sprite->data[2]++;
- sprite->data[6]--;
- PlaySE(SE_BOWA);
+ sprite->sTimer = 25;
+ spriteId = CreateSpriteAtEnd(&sSpriteTemplate_PokeballGlow, sPokeballCoordOffsets[sprite->sCounter].x + sprite->pos2.x, sPokeballCoordOffsets[sprite->sCounter].y + sprite->pos2.y, 0);
+ gSprites[spriteId].oam.priority = 2;
+ gSprites[spriteId].sEffectSpriteId = sprite->sSpriteId;
+ sprite->sCounter++;
+ sprite->sNumMons--;
+ PlaySE(SE_BALL);
}
- if (sprite->data[6] == 0)
+ if (sprite->sNumMons == 0)
{
- sprite->data[1] = 32;
- sprite->data[0]++;
+ sprite->sTimer = 32;
+ sprite->sState++;
}
}
-static void PokeballGlowEffect_1(struct Sprite *sprite)
+static void PokeballGlowEffect_TryPlaySe(struct Sprite *sprite)
{
- if ((--sprite->data[1]) == 0)
+ if ((--sprite->sTimer) == 0)
{
- sprite->data[0]++;
- sprite->data[1] = 8;
- sprite->data[2] = 0;
+ sprite->sState++;
+ sprite->sTimer = 8;
+ sprite->sCounter = 0;
sprite->data[3] = 0;
- if (sprite->data[5])
+ if (sprite->sPlayHealSe)
{
- PlayFanfare(MUS_ME_ASA);
+ PlayFanfare(MUS_HEAL);
}
}
}
-static void PokeballGlowEffect_2(struct Sprite *sprite)
+static void PokeballGlowEffect_Flash1(struct Sprite *sprite)
{
u8 phase;
- if ((--sprite->data[1]) == 0)
+ if ((--sprite->sTimer) == 0)
{
- sprite->data[1] = 8;
- sprite->data[2]++;
- sprite->data[2] &= 3;
- if (sprite->data[2] == 0)
- {
+ sprite->sTimer = 8;
+ sprite->sCounter++;
+ sprite->sCounter &= 3;
+
+ if (sprite->sCounter == 0)
sprite->data[3]++;
- }
}
- phase = (sprite->data[2] + 3) & 3;
- MultiplyInvertedPaletteRGBComponents((IndexOfSpritePaletteTag(0x1007) << 4) + 0x108, gUnknown_0855C3BC[phase], gUnknown_0855C3C0[phase], gUnknown_0855C3C4[phase]);
- phase = (sprite->data[2] + 2) & 3;
- MultiplyInvertedPaletteRGBComponents((IndexOfSpritePaletteTag(0x1007) << 4) + 0x106, gUnknown_0855C3BC[phase], gUnknown_0855C3C0[phase], gUnknown_0855C3C4[phase]);
- phase = (sprite->data[2] + 1) & 3;
- MultiplyInvertedPaletteRGBComponents((IndexOfSpritePaletteTag(0x1007) << 4) + 0x102, gUnknown_0855C3BC[phase], gUnknown_0855C3C0[phase], gUnknown_0855C3C4[phase]);
- phase = sprite->data[2];
- MultiplyInvertedPaletteRGBComponents((IndexOfSpritePaletteTag(0x1007) << 4) + 0x105, gUnknown_0855C3BC[phase], gUnknown_0855C3C0[phase], gUnknown_0855C3C4[phase]);
- MultiplyInvertedPaletteRGBComponents((IndexOfSpritePaletteTag(0x1007) << 4) + 0x103, gUnknown_0855C3BC[phase], gUnknown_0855C3C0[phase], gUnknown_0855C3C4[phase]);
+ phase = (sprite->sCounter + 3) & 3;
+ MultiplyInvertedPaletteRGBComponents((IndexOfSpritePaletteTag(FLDEFF_PAL_TAG_POKEBALL_GLOW) << 4) + 0x108, sPokeballGlowReds[phase], sPokeballGlowGreens[phase], sPokeballGlowBlues[phase]);
+ phase = (sprite->sCounter + 2) & 3;
+ MultiplyInvertedPaletteRGBComponents((IndexOfSpritePaletteTag(FLDEFF_PAL_TAG_POKEBALL_GLOW) << 4) + 0x106, sPokeballGlowReds[phase], sPokeballGlowGreens[phase], sPokeballGlowBlues[phase]);
+ phase = (sprite->sCounter + 1) & 3;
+ MultiplyInvertedPaletteRGBComponents((IndexOfSpritePaletteTag(FLDEFF_PAL_TAG_POKEBALL_GLOW) << 4) + 0x102, sPokeballGlowReds[phase], sPokeballGlowGreens[phase], sPokeballGlowBlues[phase]);
+ phase = sprite->sCounter;
+ MultiplyInvertedPaletteRGBComponents((IndexOfSpritePaletteTag(FLDEFF_PAL_TAG_POKEBALL_GLOW) << 4) + 0x105, sPokeballGlowReds[phase], sPokeballGlowGreens[phase], sPokeballGlowBlues[phase]);
+ MultiplyInvertedPaletteRGBComponents((IndexOfSpritePaletteTag(FLDEFF_PAL_TAG_POKEBALL_GLOW) << 4) + 0x103, sPokeballGlowReds[phase], sPokeballGlowGreens[phase], sPokeballGlowBlues[phase]);
if (sprite->data[3] > 2)
{
- sprite->data[0]++;
- sprite->data[1] = 8;
- sprite->data[2] = 0;
+ sprite->sState++;
+ sprite->sTimer = 8;
+ sprite->sCounter = 0;
}
}
-static void PokeballGlowEffect_3(struct Sprite *sprite)
+static void PokeballGlowEffect_Flash2(struct Sprite *sprite)
{
u8 phase;
- if ((--sprite->data[1]) == 0)
+ if ((--sprite->sTimer) == 0)
{
- sprite->data[1] = 8;
- sprite->data[2]++;
- sprite->data[2] &= 3;
- if (sprite->data[2] == 3)
+ sprite->sTimer = 8;
+ sprite->sCounter++;
+ sprite->sCounter &= 3;
+ if (sprite->sCounter == 3)
{
- sprite->data[0]++;
- sprite->data[1] = 30;
+ sprite->sState++;
+ sprite->sTimer = 30;
}
}
- phase = sprite->data[2];
- MultiplyInvertedPaletteRGBComponents((IndexOfSpritePaletteTag(0x1007) << 4) + 0x108, gUnknown_0855C3BC[phase], gUnknown_0855C3C0[phase], gUnknown_0855C3C4[phase]);
- MultiplyInvertedPaletteRGBComponents((IndexOfSpritePaletteTag(0x1007) << 4) + 0x106, gUnknown_0855C3BC[phase], gUnknown_0855C3C0[phase], gUnknown_0855C3C4[phase]);
- MultiplyInvertedPaletteRGBComponents((IndexOfSpritePaletteTag(0x1007) << 4) + 0x102, gUnknown_0855C3BC[phase], gUnknown_0855C3C0[phase], gUnknown_0855C3C4[phase]);
- MultiplyInvertedPaletteRGBComponents((IndexOfSpritePaletteTag(0x1007) << 4) + 0x105, gUnknown_0855C3BC[phase], gUnknown_0855C3C0[phase], gUnknown_0855C3C4[phase]);
- MultiplyInvertedPaletteRGBComponents((IndexOfSpritePaletteTag(0x1007) << 4) + 0x103, gUnknown_0855C3BC[phase], gUnknown_0855C3C0[phase], gUnknown_0855C3C4[phase]);
+ phase = sprite->sCounter;
+ MultiplyInvertedPaletteRGBComponents((IndexOfSpritePaletteTag(FLDEFF_PAL_TAG_POKEBALL_GLOW) << 4) + 0x108, sPokeballGlowReds[phase], sPokeballGlowGreens[phase], sPokeballGlowBlues[phase]);
+ MultiplyInvertedPaletteRGBComponents((IndexOfSpritePaletteTag(FLDEFF_PAL_TAG_POKEBALL_GLOW) << 4) + 0x106, sPokeballGlowReds[phase], sPokeballGlowGreens[phase], sPokeballGlowBlues[phase]);
+ MultiplyInvertedPaletteRGBComponents((IndexOfSpritePaletteTag(FLDEFF_PAL_TAG_POKEBALL_GLOW) << 4) + 0x102, sPokeballGlowReds[phase], sPokeballGlowGreens[phase], sPokeballGlowBlues[phase]);
+ MultiplyInvertedPaletteRGBComponents((IndexOfSpritePaletteTag(FLDEFF_PAL_TAG_POKEBALL_GLOW) << 4) + 0x105, sPokeballGlowReds[phase], sPokeballGlowGreens[phase], sPokeballGlowBlues[phase]);
+ MultiplyInvertedPaletteRGBComponents((IndexOfSpritePaletteTag(FLDEFF_PAL_TAG_POKEBALL_GLOW) << 4) + 0x103, sPokeballGlowReds[phase], sPokeballGlowGreens[phase], sPokeballGlowBlues[phase]);
}
-static void PokeballGlowEffect_4(struct Sprite *sprite)
+static void PokeballGlowEffect_WaitAfterFlash(struct Sprite *sprite)
{
- if ((--sprite->data[1]) == 0)
+ if ((--sprite->sTimer) == 0)
{
- sprite->data[0]++;
+ sprite->sState++;
}
}
-static void PokeballGlowEffect_5(struct Sprite *sprite)
+static void PokeballGlowEffect_Dummy(struct Sprite *sprite)
{
- sprite->data[0]++;
+ sprite->sState++;
}
-static void PokeballGlowEffect_6(struct Sprite *sprite)
+static void PokeballGlowEffect_WaitForSound(struct Sprite *sprite)
{
- if (sprite->data[5] == 0 || IsFanfareTaskInactive())
+ if (sprite->sPlayHealSe == FALSE || IsFanfareTaskInactive())
{
- sprite->data[0]++;
+ sprite->sState++;
}
}
-static void PokeballGlowEffect_7(struct Sprite *sprite)
+static void PokeballGlowEffect_Idle(struct Sprite *sprite)
{
+ // Idle until destroyed
}
-void SpriteCB_PokeballGlow(struct Sprite *sprite)
+static void SpriteCB_PokeballGlow(struct Sprite *sprite)
{
- if (gSprites[sprite->data[0]].data[0] > 4)
+ if (gSprites[sprite->sEffectSpriteId].sState > 4)
{
FieldEffectFreeGraphicsResources(sprite);
}
}
-static u8 PokecenterHealEffectHelper(s16 x, s16 y)
+static u8 CreatePokecenterMonitorSprite(s16 x, s16 y)
{
- u8 spriteIdAtEnd;
+ u8 spriteId;
struct Sprite *sprite;
- spriteIdAtEnd = CreateSpriteAtEnd(&gSpriteTemplate_855C31C, x, y, 0);
- sprite = &gSprites[spriteIdAtEnd];
+ spriteId = CreateSpriteAtEnd(&sSpriteTemplate_PokecenterMonitor, x, y, 0);
+ sprite = &gSprites[spriteId];
sprite->oam.priority = 2;
sprite->invisible = TRUE;
- SetSubspriteTables(sprite, &gUnknown_0855C2AC);
- return spriteIdAtEnd;
+ SetSubspriteTables(sprite, &sSubspriteTable_PokecenterMonitor);
+ return spriteId;
}
-void SpriteCB_PokecenterMonitor(struct Sprite *sprite)
+static void SpriteCB_PokecenterMonitor(struct Sprite *sprite)
{
if (sprite->data[0] != 0)
{
@@ -1256,24 +1276,24 @@ void SpriteCB_PokecenterMonitor(struct Sprite *sprite)
}
}
-static void HallOfFameRecordEffectHelper(s16 a0, s16 a1, s16 a2, u8 a3)
+static void CreateHofMonitorSprite(s16 taskId, s16 x, s16 y, bool8 isSmallMonitor)
{
- u8 spriteIdAtEnd;
- if (!a3)
+ u8 spriteId;
+ if (!isSmallMonitor)
{
- spriteIdAtEnd = CreateSpriteAtEnd(&gSpriteTemplate_855C334, a1, a2, 0);
- SetSubspriteTables(&gSprites[spriteIdAtEnd], &gUnknown_0855C2C4);
+ spriteId = CreateSpriteAtEnd(&sSpriteTemplate_HofMonitorBig, x, y, 0);
+ SetSubspriteTables(&gSprites[spriteId], &sSubspriteTable_HofMonitorBig);
} else
{
- spriteIdAtEnd = CreateSpriteAtEnd(&gSpriteTemplate_855C34C, a1, a2, 0);
+ spriteId = CreateSpriteAtEnd(&sSpriteTemplate_HofMonitorSmall, x, y, 0);
}
- gSprites[spriteIdAtEnd].invisible = TRUE;
- gSprites[spriteIdAtEnd].data[0] = a0;
+ gSprites[spriteId].invisible = TRUE;
+ gSprites[spriteId].data[0] = taskId;
}
-void SpriteCB_HallOfFameMonitor(struct Sprite *sprite)
+static void SpriteCB_HallOfFameMonitor(struct Sprite *sprite)
{
- if (gTasks[sprite->data[0]].data[15])
+ if (gTasks[sprite->data[0]].tStartHofFlash)
{
if (sprite->data[1] == 0 || (--sprite->data[1]) == 0)
{
@@ -1288,37 +1308,51 @@ void SpriteCB_HallOfFameMonitor(struct Sprite *sprite)
}
}
+#undef tState
+#undef tNumMons
+#undef tFirstBallX
+#undef tFirstBallY
+#undef tMonitorX
+#undef tMonitorY
+#undef tBallSpriteId
+#undef tMonitorSpriteId
+#undef tStartHofFlash
+#undef sState
+#undef sTimer
+#undef sCounter
+#undef sPlayHealSe
+#undef sNumMons
+#undef sSpriteId
+#undef sEffectSpriteId
void ReturnToFieldFromFlyMapSelect(void)
{
SetMainCallback2(CB2_ReturnToField);
- gFieldCallback = FieldCallback_Fly;
+ gFieldCallback = FieldCallback_UseFly;
}
-static void FieldCallback_Fly(void)
+static void FieldCallback_UseFly(void)
{
FadeInFromBlack();
- CreateTask(task00_8084310, 0);
+ CreateTask(Task_UseFly, 0);
ScriptContext2_Enable();
FreezeObjectEvents();
gFieldCallback = NULL;
}
-static void task00_8084310(u8 taskId)
+static void Task_UseFly(u8 taskId)
{
struct Task *task;
task = &gTasks[taskId];
if (!task->data[0])
{
if (!IsWeatherNotFadingIn())
- {
return;
- }
+
gFieldEffectArguments[0] = GetCursorSelectionMonId();
- if ((int)gFieldEffectArguments[0] > 5)
- {
+ if ((int)gFieldEffectArguments[0] > PARTY_SIZE - 1)
gFieldEffectArguments[0] = 0;
- }
+
FieldEffectStart(FLDEFF_USE_FLY);
task->data[0]++;
}
@@ -1327,18 +1361,18 @@ static void task00_8084310(u8 taskId)
Overworld_ResetStateAfterFly();
WarpIntoMap();
SetMainCallback2(CB2_LoadMap);
- gFieldCallback = mapldr_08084390;
+ gFieldCallback = FieldCallback_FlyIntoMap;
DestroyTask(taskId);
}
}
-static void mapldr_08084390(void)
+static void FieldCallback_FlyIntoMap(void)
{
Overworld_PlaySpecialMapMusic();
FadeInFromBlack();
- CreateTask(c3_080843F8, 0);
+ CreateTask(Task_FlyIntoMap, 0);
gObjectEvents[gPlayerAvatar.objectEventId].invisible = TRUE;
- if (gPlayerAvatar.flags & 0x08)
+ if (gPlayerAvatar.flags & PLAYER_AVATAR_FLAG_SURFING)
{
ObjectEventTurn(&gObjectEvents[gPlayerAvatar.objectEventId], DIR_WEST);
}
@@ -1347,7 +1381,7 @@ static void mapldr_08084390(void)
gFieldCallback = NULL;
}
-static void c3_080843F8(u8 taskId)
+static void Task_FlyIntoMap(u8 taskId)
{
struct Task *task;
task = &gTasks[taskId];
@@ -1368,6 +1402,15 @@ static void c3_080843F8(u8 taskId)
}
}
+#define tState data[0]
+#define tFallOffset data[1]
+#define tTotalFall data[2]
+#define tSetTrigger data[3]
+#define tSubsprMode data[4]
+
+#define tVertShake data[1] // re-used
+#define tNumShakes data[2]
+
void FieldCB_FallWarpExit(void)
{
Overworld_PlaySpecialMapMusic();
@@ -1382,10 +1425,10 @@ static void Task_FallWarpFieldEffect(u8 taskId)
{
struct Task *task;
task = &gTasks[taskId];
- while (sFallWarpFieldEffectFuncs[task->data[0]](task)); // return code signifies whether to continue blocking here
+ while (sFallWarpFieldEffectFuncs[task->tState](task));
}
-static bool8 FallWarpEffect_1(struct Task *task)
+static bool8 FallWarpEffect_Init(struct Task *task)
{
struct ObjectEvent *playerObject;
struct Sprite *playerSprite;
@@ -1395,98 +1438,95 @@ static bool8 FallWarpEffect_1(struct Task *task)
gObjectEvents[gPlayerAvatar.objectEventId].invisible = TRUE;
gPlayerAvatar.preventStep = TRUE;
ObjectEventSetHeldMovement(playerObject, GetFaceDirectionMovementAction(GetPlayerFacingDirection()));
- task->data[4] = playerSprite->subspriteMode;
+ task->tSubsprMode = playerSprite->subspriteMode;
playerObject->fixedPriority = 1;
playerSprite->oam.priority = 1;
playerSprite->subspriteMode = SUBSPRITES_IGNORE_PRIORITY;
- task->data[0]++;
+ task->tState++;
return TRUE;
}
-static bool8 FallWarpEffect_2(struct Task *task)
+static bool8 FallWarpEffect_WaitWeather(struct Task *task)
{
if (IsWeatherNotFadingIn())
- {
- task->data[0]++;
- }
+ task->tState++;
+
return FALSE;
}
-static bool8 FallWarpEffect_3(struct Task *task)
+static bool8 FallWarpEffect_StartFall(struct Task *task)
{
struct Sprite *sprite;
s16 centerToCornerVecY;
sprite = &gSprites[gPlayerAvatar.spriteId];
centerToCornerVecY = -(sprite->centerToCornerVecY << 1);
sprite->pos2.y = -(sprite->pos1.y + sprite->centerToCornerVecY + gSpriteCoordOffsetY + centerToCornerVecY);
- task->data[1] = 1;
- task->data[2] = 0;
+ task->tFallOffset = 1;
+ task->tTotalFall = 0;
gObjectEvents[gPlayerAvatar.objectEventId].invisible = FALSE;
- PlaySE(SE_RU_HYUU);
- task->data[0]++;
+ PlaySE(SE_FALL);
+ task->tState++;
return FALSE;
}
-static bool8 FallWarpEffect_4(struct Task *task)
+static bool8 FallWarpEffect_Fall(struct Task *task)
{
struct ObjectEvent *objectEvent;
struct Sprite *sprite;
objectEvent = &gObjectEvents[gPlayerAvatar.objectEventId];
sprite = &gSprites[gPlayerAvatar.spriteId];
- sprite->pos2.y += task->data[1];
- if (task->data[1] < 8)
+ sprite->pos2.y += task->tFallOffset;
+ if (task->tFallOffset < 8)
{
- task->data[2] += task->data[1];
- if (task->data[2] & 0xf)
- {
- task->data[1] <<= 1;
- }
+ task->tTotalFall += task->tFallOffset;
+
+ if (task->tTotalFall & 0xf)
+ task->tFallOffset <<= 1;
}
- if (task->data[3] == 0 && sprite->pos2.y >= -16)
+ if (task->tSetTrigger == FALSE && sprite->pos2.y >= -16)
{
- task->data[3]++;
+ task->tSetTrigger++;
objectEvent->fixedPriority = 0;
- sprite->subspriteMode = task->data[4];
+ sprite->subspriteMode = task->tSubsprMode;
objectEvent->triggerGroundEffectsOnMove = 1;
}
if (sprite->pos2.y >= 0)
{
- PlaySE(SE_W070);
+ PlaySE(SE_M_STRENGTH);
objectEvent->triggerGroundEffectsOnStop = 1;
objectEvent->landingJump = 1;
sprite->pos2.y = 0;
- task->data[0]++;
+ task->tState++;
}
return FALSE;
}
-static bool8 FallWarpEffect_5(struct Task *task)
+static bool8 FallWarpEffect_Land(struct Task *task)
{
- task->data[0]++;
- task->data[1] = 4;
- task->data[2] = 0;
+ task->tState++;
+ task->tVertShake = 4;
+ task->tNumShakes = 0;
SetCameraPanningCallback(NULL);
return TRUE;
}
-static bool8 FallWarpEffect_6(struct Task *task)
+static bool8 FallWarpEffect_CameraShake(struct Task *task)
{
- SetCameraPanning(0, task->data[1]);
- task->data[1] = -task->data[1];
- task->data[2]++;
- if ((task->data[2] & 3) == 0)
- {
- task->data[1] >>= 1;
- }
- if (task->data[1] == 0)
- {
- task->data[0]++;
- }
+ SetCameraPanning(0, task->tVertShake);
+ task->tVertShake = -task->tVertShake;
+ task->tNumShakes++;
+
+ if ((task->tNumShakes & 3) == 0)
+ task->tVertShake >>= 1;
+
+ if (task->tVertShake == 0)
+ task->tState++;
+
return FALSE;
}
-static bool8 FallWarpEffect_7(struct Task *task)
+static bool8 FallWarpEffect_End(struct Task *task)
{
gPlayerAvatar.preventStep = FALSE;
ScriptContext2_Disable();
@@ -1497,89 +1537,100 @@ static bool8 FallWarpEffect_7(struct Task *task)
return FALSE;
}
+#undef tState
+#undef tFallOffset
+#undef tTotalFall
+#undef tSetTrigger
+#undef tSubsprMode
+#undef tVertShake
+#undef tNumShakes
+
+#define tState data[0]
+#define tGoingUp data[1]
+
void StartEscalatorWarp(u8 metatileBehavior, u8 priority)
{
u8 taskId;
- taskId = CreateTask(Task_EscalatorWarpFieldEffect, priority);
- gTasks[taskId].data[1] = 0;
+ taskId = CreateTask(Task_EscalatorWarpOut, priority);
+ gTasks[taskId].tGoingUp = FALSE;
if (metatileBehavior == MB_UP_ESCALATOR)
{
- gTasks[taskId].data[1] = 1;
+ gTasks[taskId].tGoingUp = TRUE;
}
}
-static void Task_EscalatorWarpFieldEffect(u8 taskId)
+static void Task_EscalatorWarpOut(u8 taskId)
{
struct Task *task;
task = &gTasks[taskId];
- while (sEscalatorWarpFieldEffectFuncs[task->data[0]](task));
+ while (sEscalatorWarpOutFieldEffectFuncs[task->tState](task));
}
-static bool8 EscalatorWarpEffect_1(struct Task *task)
+static bool8 EscalatorWarpOut_Init(struct Task *task)
{
FreezeObjectEvents();
CameraObjectReset2();
- sub_80E1558(task->data[1]);
- task->data[0]++;
+ StartEscalator(task->tGoingUp);
+ task->tState++;
return FALSE;
}
-static bool8 EscalatorWarpEffect_2(struct Task *task)
+static bool8 EscalatorWarpOut_WaitForPlayer(struct Task *task)
{
struct ObjectEvent *objectEvent;
objectEvent = &gObjectEvents[gPlayerAvatar.objectEventId];
if (!ObjectEventIsMovementOverridden(objectEvent) || ObjectEventClearHeldMovementIfFinished(objectEvent))
{
ObjectEventSetHeldMovement(objectEvent, GetFaceDirectionMovementAction(GetPlayerFacingDirection()));
- task->data[0]++;
+ task->tState++;
task->data[2] = 0;
task->data[3] = 0;
- if ((u8)task->data[1] == 0)
+ if ((u8)task->tGoingUp == FALSE)
{
- task->data[0] = 4;
+ task->tState = 4; // jump to EscalatorWarpOut_Down_Ride
}
- PlaySE(SE_ESUKA);
+ PlaySE(SE_ESCALATOR);
}
return FALSE;
}
-static bool8 EscalatorWarpEffect_3(struct Task *task)
+static bool8 EscalatorWarpOut_Up_Ride(struct Task *task)
{
- sub_80B6FB8(task);
+ RideUpEscalatorOut(task);
if (task->data[2] > 3)
{
- sub_80B7050();
- task->data[0]++;
+ FadeOutAtEndOfEscalator();
+ task->tState++;
}
return FALSE;
}
-static bool8 EscalatorWarpEffect_4(struct Task *task)
+static bool8 EscalatorWarpOut_Up_End(struct Task *task)
{
- sub_80B6FB8(task);
- sub_80B7060();
+ RideUpEscalatorOut(task);
+ WarpAtEndOfEscalator();
return FALSE;
}
-static bool8 EscalatorWarpEffect_5(struct Task *task)
+static bool8 EscalatorWarpOut_Down_Ride(struct Task *task)
{
- sub_80B7004(task);
+ RideDownEscalatorOut(task);
if (task->data[2] > 3)
{
- sub_80B7050();
- task->data[0]++;
+ FadeOutAtEndOfEscalator();
+ task->tState++;
}
return FALSE;
}
-static bool8 EscalatorWarpEffect_6(struct Task *task)
+static bool8 EscalatorWarpOut_Down_End(struct Task *task)
{
- sub_80B7004(task);
- sub_80B7060();
+ RideDownEscalatorOut(task);
+ WarpAtEndOfEscalator();
return FALSE;
}
-static void sub_80B6FB8(struct Task *task)
+static void RideUpEscalatorOut(struct Task *task)
{
struct Sprite *sprite;
sprite = &gSprites[gPlayerAvatar.spriteId];
@@ -1592,7 +1643,7 @@ static void sub_80B6FB8(struct Task *task)
}
}
-static void sub_80B7004(struct Task *task)
+static void RideDownEscalatorOut(struct Task *task)
{
struct Sprite *sprite;
sprite = &gSprites[gPlayerAvatar.spriteId];
@@ -1605,41 +1656,46 @@ static void sub_80B7004(struct Task *task)
}
}
-static void sub_80B7050(void)
+static void FadeOutAtEndOfEscalator(void)
{
TryFadeOutOldMapMusic();
WarpFadeOutScreen();
}
-static void sub_80B7060(void)
+static void WarpAtEndOfEscalator(void)
{
if (!gPaletteFade.active && BGMusicStopped() == TRUE)
{
- sub_80E1570();
+ StopEscalator();
WarpIntoMap();
- gFieldCallback = sub_80B70B4;
+ gFieldCallback = FieldCallback_EscalatorWarpIn;
SetMainCallback2(CB2_LoadMap);
- DestroyTask(FindTaskIdByFunc(Task_EscalatorWarpFieldEffect));
+ DestroyTask(FindTaskIdByFunc(Task_EscalatorWarpOut));
}
}
-static void sub_80B70B4(void)
+#undef tState
+#undef tGoingUp
+
+static void FieldCallback_EscalatorWarpIn(void)
{
Overworld_PlaySpecialMapMusic();
WarpFadeInScreen();
ScriptContext2_Enable();
- CreateTask(sub_80B70DC, 0);
+ CreateTask(Task_EscalatorWarpIn, 0);
gFieldCallback = NULL;
}
-static void sub_80B70DC(u8 taskId)
+#define tState data[0]
+
+static void Task_EscalatorWarpIn(u8 taskId)
{
struct Task *task;
task = &gTasks[taskId];
- while (gUnknown_0855C3FC[task->data[0]](task));
+ while (sEscalatorWarpInFieldEffectFuncs[task->tState](task));
}
-static bool8 sub_80B7114(struct Task *task)
+static bool8 EscalatorWarpIn_Init(struct Task *task)
{
struct ObjectEvent *objectEvent;
s16 x;
@@ -1650,31 +1706,35 @@ static bool8 sub_80B7114(struct Task *task)
ObjectEventSetHeldMovement(objectEvent, GetFaceDirectionMovementAction(DIR_EAST));
PlayerGetDestCoords(&x, &y);
behavior = MapGridGetMetatileBehaviorAt(x, y);
- task->data[0]++;
+ task->tState++;
task->data[1] = 16;
- if (behavior == 0x6b)
+
+ if (behavior == MB_DOWN_ESCALATOR)
{
- behavior = 1;
- task->data[0] = 3;
- } else
+ // If dest is down escalator tile, player is riding up
+ behavior = TRUE;
+ task->tState = 3; // jump to EscalatorWarpIn_Up_Init
+ }
+ else // MB_UP_ESCALATOR
{
- behavior = 0;
+ // If dest is up escalator tile, player is riding down
+ behavior = FALSE;
}
- sub_80E1558(behavior);
+ StartEscalator(behavior);
return TRUE;
}
-static bool8 sub_80B7190(struct Task *task)
+static bool8 EscalatorWarpIn_Down_Init(struct Task *task)
{
struct Sprite *sprite;
sprite = &gSprites[gPlayerAvatar.spriteId];
sprite->pos2.x = Cos(0x84, task->data[1]);
sprite->pos2.y = Sin(0x94, task->data[1]);
- task->data[0]++;
+ task->tState++;
return FALSE;
}
-static bool8 sub_80B71D0(struct Task *task)
+static bool8 EscalatorWarpIn_Down_Ride(struct Task *task)
{
struct Sprite *sprite;
sprite = &gSprites[gPlayerAvatar.spriteId];
@@ -1689,22 +1749,22 @@ static bool8 sub_80B71D0(struct Task *task)
{
sprite->pos2.x = 0;
sprite->pos2.y = 0;
- task->data[0] = 5;
+ task->tState = 5;
}
return FALSE;
}
-static bool8 sub_80B7230(struct Task *task)
+static bool8 EscalatorWarpIn_Up_Init(struct Task *task)
{
struct Sprite *sprite;
sprite = &gSprites[gPlayerAvatar.spriteId];
sprite->pos2.x = Cos(0x7c, task->data[1]);
sprite->pos2.y = Sin(0x76, task->data[1]);
- task->data[0]++;
+ task->tState++;
return FALSE;
}
-static bool8 sub_80B7270(struct Task *task)
+static bool8 EscalatorWarpIn_Up_Ride(struct Task *task)
{
struct Sprite *sprite;
sprite = &gSprites[gPlayerAvatar.spriteId];
@@ -1719,23 +1779,23 @@ static bool8 sub_80B7270(struct Task *task)
{
sprite->pos2.x = 0;
sprite->pos2.y = 0;
- task->data[0]++;
+ task->tState++;
}
return FALSE;
}
-static bool8 sub_80B72D0(struct Task *task)
+static bool8 EscalatorWarpIn_WaitForMovement(struct Task *task)
{
- if (sub_80E1584())
+ if (IsEscalatorMoving())
{
return FALSE;
}
- sub_80E1570();
- task->data[0]++;
+ StopEscalator();
+ task->tState++;
return TRUE;
}
-static bool8 sub_80B72F4(struct Task *task)
+static bool8 EscalatorWarpIn_End(struct Task *task)
{
struct ObjectEvent *objectEvent;
objectEvent = &gObjectEvents[gPlayerAvatar.objectEventId];
@@ -1744,104 +1804,113 @@ static bool8 sub_80B72F4(struct Task *task)
CameraObjectReset1();
ScriptContext2_Disable();
ObjectEventSetHeldMovement(objectEvent, GetWalkNormalMovementAction(DIR_EAST));
- DestroyTask(FindTaskIdByFunc(sub_80B70DC));
+ DestroyTask(FindTaskIdByFunc(Task_EscalatorWarpIn));
}
return FALSE;
}
+#undef tState
+
+#define tState data[0]
+#define tMonId data[1]
+
bool8 FldEff_UseWaterfall(void)
{
u8 taskId;
- taskId = CreateTask(sub_80B7384, 0xff);
- gTasks[taskId].data[1] = gFieldEffectArguments[0];
- sub_80B7384(taskId);
+ taskId = CreateTask(Task_UseWaterfall, 0xff);
+ gTasks[taskId].tMonId = gFieldEffectArguments[0];
+ Task_UseWaterfall(taskId);
return FALSE;
}
-static void sub_80B7384(u8 taskId)
+static void Task_UseWaterfall(u8 taskId)
{
- while (gUnknown_0855C418[gTasks[taskId].data[0]](&gTasks[taskId], &gObjectEvents[gPlayerAvatar.objectEventId]));
+ while (sWaterfallFieldEffectFuncs[gTasks[taskId].tState](&gTasks[taskId], &gObjectEvents[gPlayerAvatar.objectEventId]));
}
-static bool8 sub_80B73D0(struct Task *task, struct ObjectEvent *objectEvent)
+static bool8 WaterfallFieldEffect_Init(struct Task *task, struct ObjectEvent *objectEvent)
{
ScriptContext2_Enable();
gPlayerAvatar.preventStep = TRUE;
- task->data[0]++;
+ task->tState++;
return FALSE;
}
-static bool8 waterfall_1_do_anim_probably(struct Task *task, struct ObjectEvent *objectEvent)
+static bool8 WaterfallFieldEffect_ShowMon(struct Task *task, struct ObjectEvent *objectEvent)
{
ScriptContext2_Enable();
if (!ObjectEventIsMovementOverridden(objectEvent))
{
ObjectEventClearHeldMovementIfFinished(objectEvent);
- gFieldEffectArguments[0] = task->data[1];
+ gFieldEffectArguments[0] = task->tMonId;
FieldEffectStart(FLDEFF_FIELD_MOVE_SHOW_MON_INIT);
- task->data[0]++;
+ task->tState++;
}
return FALSE;
}
-static bool8 waterfall_2_wait_anim_finish_probably(struct Task *task, struct ObjectEvent *objectEvent)
+static bool8 WaterfallFieldEffect_WaitForShowMon(struct Task *task, struct ObjectEvent *objectEvent)
{
if (FieldEffectActiveListContains(FLDEFF_FIELD_MOVE_SHOW_MON))
{
return FALSE;
}
- task->data[0]++;
+ task->tState++;
return TRUE;
}
-static bool8 sub_80B7450(struct Task *task, struct ObjectEvent *objectEvent)
+static bool8 WaterfallFieldEffect_RideUp(struct Task *task, struct ObjectEvent *objectEvent)
{
ObjectEventSetHeldMovement(objectEvent, GetWalkSlowMovementAction(DIR_NORTH));
- task->data[0]++;
+ task->tState++;
return FALSE;
}
-static bool8 sub_80B7478(struct Task *task, struct ObjectEvent *objectEvent)
+static bool8 WaterfallFieldEffect_ContinueRideOrEnd(struct Task *task, struct ObjectEvent *objectEvent)
{
if (!ObjectEventClearHeldMovementIfFinished(objectEvent))
- {
return FALSE;
- }
+
if (MetatileBehavior_IsWaterfall(objectEvent->currentMetatileBehavior))
{
- task->data[0] = 3;
+ // Still ascending waterfall, back to WaterfallFieldEffect_RideUp
+ task->tState = 3;
return TRUE;
}
+
ScriptContext2_Disable();
gPlayerAvatar.preventStep = FALSE;
- DestroyTask(FindTaskIdByFunc(sub_80B7384));
+ DestroyTask(FindTaskIdByFunc(Task_UseWaterfall));
FieldEffectActiveListRemove(FLDEFF_USE_WATERFALL);
return FALSE;
}
+#undef tState
+#undef tMonId
+
bool8 FldEff_UseDive(void)
{
u8 taskId;
- taskId = CreateTask(Task_Dive, 0xff);
+ taskId = CreateTask(Task_UseDive, 0xff);
gTasks[taskId].data[15] = gFieldEffectArguments[0];
gTasks[taskId].data[14] = gFieldEffectArguments[1];
- Task_Dive(taskId);
+ Task_UseDive(taskId);
return FALSE;
}
-void Task_Dive(u8 taskId)
+void Task_UseDive(u8 taskId)
{
- while (gUnknown_0855C42C[gTasks[taskId].data[0]](&gTasks[taskId]));
+ while (sDiveFieldEffectFuncs[gTasks[taskId].data[0]](&gTasks[taskId]));
}
-static bool8 dive_1_lock(struct Task *task)
+static bool8 DiveFieldEffect_Init(struct Task *task)
{
gPlayerAvatar.preventStep = TRUE;
task->data[0]++;
return FALSE;
}
-static bool8 dive_2_unknown(struct Task *task)
+static bool8 DiveFieldEffect_ShowMon(struct Task *task)
{
ScriptContext2_Enable();
gFieldEffectArguments[0] = task->data[15];
@@ -1850,14 +1919,16 @@ static bool8 dive_2_unknown(struct Task *task)
return FALSE;
}
-static bool8 dive_3_unknown(struct Task *task)
+static bool8 DiveFieldEffect_TryWarp(struct Task *task)
{
struct MapPosition mapPosition;
PlayerGetDestCoords(&mapPosition.x, &mapPosition.y);
+
+ // Wait for show mon first
if (!FieldEffectActiveListContains(FLDEFF_FIELD_MOVE_SHOW_MON))
{
- dive_warp(&mapPosition, gObjectEvents[gPlayerAvatar.objectEventId].currentMetatileBehavior);
- DestroyTask(FindTaskIdByFunc(Task_Dive));
+ TryDoDiveWarp(&mapPosition, gObjectEvents[gPlayerAvatar.objectEventId].currentMetatileBehavior);
+ DestroyTask(FindTaskIdByFunc(Task_UseDive));
FieldEffectActiveListRemove(FLDEFF_USE_DIVE);
}
return FALSE;
@@ -1873,7 +1944,7 @@ static void Task_LavaridgeGymB1FWarp(u8 taskId)
while (sLavaridgeGymB1FWarpEffectFuncs[gTasks[taskId].data[0]](&gTasks[taskId], &gObjectEvents[gPlayerAvatar.objectEventId], &gSprites[gPlayerAvatar.spriteId]));
}
-static bool8 LavaridgeGymB1FWarpEffect_1(struct Task *task, struct ObjectEvent *objectEvent, struct Sprite *sprite)
+static bool8 LavaridgeGymB1FWarpEffect_Init(struct Task *task, struct ObjectEvent *objectEvent, struct Sprite *sprite)
{
FreezeObjectEvents();
CameraObjectReset2();
@@ -1885,7 +1956,7 @@ static bool8 LavaridgeGymB1FWarpEffect_1(struct Task *task, struct ObjectEvent *
return TRUE;
}
-static bool8 LavaridgeGymB1FWarpEffect_2(struct Task *task, struct ObjectEvent *objectEvent, struct Sprite *sprite)
+static bool8 LavaridgeGymB1FWarpEffect_CameraShake(struct Task *task, struct ObjectEvent *objectEvent, struct Sprite *sprite)
{
SetCameraPanning(0, task->data[1]);
task->data[1] = -task->data[1];
@@ -1898,7 +1969,7 @@ static bool8 LavaridgeGymB1FWarpEffect_2(struct Task *task, struct ObjectEvent *
return FALSE;
}
-static bool8 LavaridgeGymB1FWarpEffect_3(struct Task *task, struct ObjectEvent *objectEvent, struct Sprite *sprite)
+static bool8 LavaridgeGymB1FWarpEffect_Launch(struct Task *task, struct ObjectEvent *objectEvent, struct Sprite *sprite)
{
sprite->pos2.y = 0;
task->data[3] = 1;
@@ -1906,13 +1977,13 @@ static bool8 LavaridgeGymB1FWarpEffect_3(struct Task *task, struct ObjectEvent *
gFieldEffectArguments[1] = objectEvent->currentCoords.y;
gFieldEffectArguments[2] = sprite->subpriority - 1;
gFieldEffectArguments[3] = sprite->oam.priority;
- FieldEffectStart(FLDEFF_LAVARIDGE_GYM_WARP);
- PlaySE(SE_W153);
+ FieldEffectStart(FLDEFF_ASH_LAUNCH);
+ PlaySE(SE_M_EXPLOSION);
task->data[0]++;
return TRUE;
}
-static bool8 LavaridgeGymB1FWarpEffect_4(struct Task *task, struct ObjectEvent *objectEvent, struct Sprite *sprite)
+static bool8 LavaridgeGymB1FWarpEffect_Rise(struct Task *task, struct ObjectEvent *objectEvent, struct Sprite *sprite)
{
s16 centerToCornerVecY;
SetCameraPanning(0, task->data[1]);
@@ -1955,7 +2026,7 @@ static bool8 LavaridgeGymB1FWarpEffect_4(struct Task *task, struct ObjectEvent *
return FALSE;
}
-static bool8 LavaridgeGymB1FWarpEffect_5(struct Task *task, struct ObjectEvent *objectEvent, struct Sprite *sprite)
+static bool8 LavaridgeGymB1FWarpEffect_FadeOut(struct Task *task, struct ObjectEvent *objectEvent, struct Sprite *sprite)
{
TryFadeOutOldMapMusic();
WarpFadeOutScreen();
@@ -1963,7 +2034,7 @@ static bool8 LavaridgeGymB1FWarpEffect_5(struct Task *task, struct ObjectEvent *
return FALSE;
}
-static bool8 LavaridgeGymB1FWarpEffect_6(struct Task *task, struct ObjectEvent *objectEvent, struct Sprite *sprite)
+static bool8 LavaridgeGymB1FWarpEffect_Warp(struct Task *task, struct ObjectEvent *objectEvent, struct Sprite *sprite)
{
if (!gPaletteFade.active && BGMusicStopped() == TRUE)
{
@@ -1989,7 +2060,7 @@ static void Task_LavaridgeGymB1FWarpExit(u8 taskId)
while (sLavaridgeGymB1FWarpExitEffectFuncs[gTasks[taskId].data[0]](&gTasks[taskId], &gObjectEvents[gPlayerAvatar.objectEventId], &gSprites[gPlayerAvatar.spriteId]));
}
-static bool8 LavaridgeGymB1FWarpExitEffect_1(struct Task *task, struct ObjectEvent *objectEvent, struct Sprite *sprite)
+static bool8 LavaridgeGymB1FWarpExitEffect_Init(struct Task *task, struct ObjectEvent *objectEvent, struct Sprite *sprite)
{
CameraObjectReset2();
FreezeObjectEvents();
@@ -1999,7 +2070,7 @@ static bool8 LavaridgeGymB1FWarpExitEffect_1(struct Task *task, struct ObjectEve
return FALSE;
}
-static bool8 LavaridgeGymB1FWarpExitEffect_2(struct Task *task, struct ObjectEvent *objectEvent, struct Sprite *sprite)
+static bool8 LavaridgeGymB1FWarpExitEffect_StartPopOut(struct Task *task, struct ObjectEvent *objectEvent, struct Sprite *sprite)
{
if (IsWeatherNotFadingIn())
{
@@ -2007,13 +2078,13 @@ static bool8 LavaridgeGymB1FWarpExitEffect_2(struct Task *task, struct ObjectEve
gFieldEffectArguments[1] = objectEvent->currentCoords.y;
gFieldEffectArguments[2] = sprite->subpriority - 1;
gFieldEffectArguments[3] = sprite->oam.priority;
- task->data[1] = FieldEffectStart(FLDEFF_POP_OUT_OF_ASH);
+ task->data[1] = FieldEffectStart(FLDEFF_ASH_PUFF);
task->data[0]++;
}
return FALSE;
}
-static bool8 LavaridgeGymB1FWarpExitEffect_3(struct Task *task, struct ObjectEvent *objectEvent, struct Sprite *sprite)
+static bool8 LavaridgeGymB1FWarpExitEffect_PopOut(struct Task *task, struct ObjectEvent *objectEvent, struct Sprite *sprite)
{
sprite = &gSprites[task->data[1]];
if (sprite->animCmdIndex > 1)
@@ -2021,13 +2092,13 @@ static bool8 LavaridgeGymB1FWarpExitEffect_3(struct Task *task, struct ObjectEve
task->data[0]++;
objectEvent->invisible = FALSE;
CameraObjectReset1();
- PlaySE(SE_W091);
+ PlaySE(SE_M_DIG);
ObjectEventSetHeldMovement(objectEvent, GetJumpMovementAction(DIR_EAST));
}
return FALSE;
}
-static bool8 LavaridgeGymB1FWarpExitEffect_4(struct Task *task, struct ObjectEvent *objectEvent, struct Sprite *sprite)
+static bool8 LavaridgeGymB1FWarpExitEffect_End(struct Task *task, struct ObjectEvent *objectEvent, struct Sprite *sprite)
{
if (ObjectEventClearHeldMovementIfFinished(objectEvent))
{
@@ -2039,23 +2110,21 @@ static bool8 LavaridgeGymB1FWarpExitEffect_4(struct Task *task, struct ObjectEve
return FALSE;
}
-// For the ash puff effect when warping off the B1F ash tiles
-u8 FldEff_LavaridgeGymWarp(void)
+// For the ash effect when jumping off the Lavaridge Gym B1F warp tiles
+u8 FldEff_AshLaunch(void)
{
u8 spriteId;
- sub_80930E0((s16 *)&gFieldEffectArguments[0], (s16 *)&gFieldEffectArguments[1], 8, 8);
- spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[33], gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2]);
+ SetSpritePosToOffsetMapCoords((s16 *)&gFieldEffectArguments[0], (s16 *)&gFieldEffectArguments[1], 8, 8);
+ spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[FLDEFFOBJ_ASH_LAUNCH], gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2]);
gSprites[spriteId].oam.priority = gFieldEffectArguments[3];
- gSprites[spriteId].coordOffsetEnabled = 1;
+ gSprites[spriteId].coordOffsetEnabled = TRUE;
return spriteId;
}
-void SpriteCB_LavaridgeGymWarp(struct Sprite *sprite)
+void SpriteCB_AshLaunch(struct Sprite *sprite)
{
if (sprite->animEnded)
- {
- FieldEffectStop(sprite, FLDEFF_LAVARIDGE_GYM_WARP);
- }
+ FieldEffectStop(sprite, FLDEFF_ASH_LAUNCH);
}
void StartLavaridgeGym1FWarp(u8 priority)
@@ -2068,7 +2137,7 @@ static void Task_LavaridgeGym1FWarp(u8 taskId)
while(sLavaridgeGym1FWarpEffectFuncs[gTasks[taskId].data[0]](&gTasks[taskId], &gObjectEvents[gPlayerAvatar.objectEventId], &gSprites[gPlayerAvatar.spriteId]));
}
-static bool8 LavaridgeGym1FWarpEffect_1(struct Task *task, struct ObjectEvent *objectEvent, struct Sprite *sprite)
+static bool8 LavaridgeGym1FWarpEffect_Init(struct Task *task, struct ObjectEvent *objectEvent, struct Sprite *sprite)
{
FreezeObjectEvents();
CameraObjectReset2();
@@ -2078,7 +2147,7 @@ static bool8 LavaridgeGym1FWarpEffect_1(struct Task *task, struct ObjectEvent *o
return FALSE;
}
-static bool8 LavaridgeGym1FWarpEffect_2(struct Task *task, struct ObjectEvent *objectEvent, struct Sprite *sprite)
+static bool8 LavaridgeGym1FWarpEffect_AshPuff(struct Task *task, struct ObjectEvent *objectEvent, struct Sprite *sprite)
{
if (ObjectEventClearHeldMovementIfFinished(objectEvent))
{
@@ -2088,19 +2157,19 @@ static bool8 LavaridgeGym1FWarpEffect_2(struct Task *task, struct ObjectEvent *o
gFieldEffectArguments[1] = objectEvent->currentCoords.y;
gFieldEffectArguments[2] = sprite->subpriority - 1;
gFieldEffectArguments[3] = sprite->oam.priority;
- task->data[1] = FieldEffectStart(FLDEFF_POP_OUT_OF_ASH);
+ task->data[1] = FieldEffectStart(FLDEFF_ASH_PUFF);
task->data[0]++;
} else
{
task->data[1]++;
ObjectEventSetHeldMovement(objectEvent, GetWalkInPlaceFastestMovementAction(objectEvent->facingDirection));
- PlaySE(SE_FU_ZUZUZU);
+ PlaySE(SE_LAVARIDGE_FALL_WARP);
}
}
return FALSE;
}
-static bool8 LavaridgeGym1FWarpEffect_3(struct Task *task, struct ObjectEvent *objectEvent, struct Sprite *sprite)
+static bool8 LavaridgeGym1FWarpEffect_Disappear(struct Task *task, struct ObjectEvent *objectEvent, struct Sprite *sprite)
{
if (gSprites[task->data[1]].animCmdIndex == 2)
{
@@ -2110,9 +2179,9 @@ static bool8 LavaridgeGym1FWarpEffect_3(struct Task *task, struct ObjectEvent *o
return FALSE;
}
-static bool8 LavaridgeGym1FWarpEffect_4(struct Task *task, struct ObjectEvent *objectEvent, struct Sprite *sprite)
+static bool8 LavaridgeGym1FWarpEffect_FadeOut(struct Task *task, struct ObjectEvent *objectEvent, struct Sprite *sprite)
{
- if (!FieldEffectActiveListContains(FLDEFF_POP_OUT_OF_ASH))
+ if (!FieldEffectActiveListContains(FLDEFF_ASH_PUFF))
{
TryFadeOutOldMapMusic();
WarpFadeOutScreen();
@@ -2121,7 +2190,7 @@ static bool8 LavaridgeGym1FWarpEffect_4(struct Task *task, struct ObjectEvent *o
return FALSE;
}
-static bool8 LavaridgeGym1FWarpEffect_5(struct Task *task, struct ObjectEvent *objectEvent, struct Sprite *sprite)
+static bool8 LavaridgeGym1FWarpEffect_Warp(struct Task *task, struct ObjectEvent *objectEvent, struct Sprite *sprite)
{
if (!gPaletteFade.active && BGMusicStopped() == TRUE)
{
@@ -2133,48 +2202,53 @@ static bool8 LavaridgeGym1FWarpEffect_5(struct Task *task, struct ObjectEvent *o
return FALSE;
}
-u8 FldEff_PopOutOfAsh(void)
+// For the ash effect when a trainer pops out of ash, or when the player enters/exits a warp in Lavaridge Gym 1F
+u8 FldEff_AshPuff(void)
{
u8 spriteId;
- sub_80930E0((s16 *)&gFieldEffectArguments[0], (s16 *)&gFieldEffectArguments[1], 8, 8);
- spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[32], gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2]);
+ SetSpritePosToOffsetMapCoords((s16 *)&gFieldEffectArguments[0], (s16 *)&gFieldEffectArguments[1], 8, 8);
+ spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[FLDEFFOBJ_ASH_PUFF], gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2]);
gSprites[spriteId].oam.priority = gFieldEffectArguments[3];
- gSprites[spriteId].coordOffsetEnabled = 1;
+ gSprites[spriteId].coordOffsetEnabled = TRUE;
return spriteId;
}
-void SpriteCB_PopOutOfAsh(struct Sprite *sprite)
+void SpriteCB_AshPuff(struct Sprite *sprite)
{
if (sprite->animEnded)
- {
- FieldEffectStop(sprite, FLDEFF_POP_OUT_OF_ASH);
- }
+ FieldEffectStop(sprite, FLDEFF_ASH_PUFF);
}
+#define tState data[0]
+#define tSpinDelay data[1]
+#define tNumTurns data[2]
+#define tTimer data[14]
+#define tStartDir data[15]
+
void StartEscapeRopeFieldEffect(void)
{
ScriptContext2_Enable();
FreezeObjectEvents();
- CreateTask(DoEscapeRopeFieldEffect, 0x50);
+ CreateTask(Task_EscapeRopeWarpOut, 80);
}
-static void DoEscapeRopeFieldEffect(u8 taskId)
+static void Task_EscapeRopeWarpOut(u8 taskId)
{
- gEscapeRopeFieldEffectFuncs[gTasks[taskId].data[0]](&gTasks[taskId]);
+ sEscapeRopeWarpOutEffectFuncs[gTasks[taskId].tState](&gTasks[taskId]);
}
-static void EscapeRopeFieldEffect_Step0(struct Task *task)
+static void EscapeRopeWarpOutEffect_Init(struct Task *task)
{
- task->data[0]++;
- task->data[14] = 64;
- task->data[15] = GetPlayerFacingDirection();
+ task->tState++;
+ task->tTimer = 64;
+ task->tStartDir = GetPlayerFacingDirection();
}
-static void EscapeRopeFieldEffect_Step1(struct Task *task)
+static void EscapeRopeWarpOutEffect_Spin(struct Task *task)
{
struct ObjectEvent *objectEvent;
u8 spinDirections[5] = {DIR_SOUTH, DIR_WEST, DIR_EAST, DIR_NORTH, DIR_SOUTH};
- if (task->data[14] != 0 && (--task->data[14]) == 0)
+ if (task->tTimer != 0 && (--task->tTimer) == 0)
{
TryFadeOutOldMapMusic();
WarpFadeOutScreen();
@@ -2182,32 +2256,31 @@ static void EscapeRopeFieldEffect_Step1(struct Task *task)
objectEvent = &gObjectEvents[gPlayerAvatar.objectEventId];
if (!ObjectEventIsMovementOverridden(objectEvent) || ObjectEventClearHeldMovementIfFinished(objectEvent))
{
- if (task->data[14] == 0 && !gPaletteFade.active && BGMusicStopped() == TRUE)
+ if (task->tTimer == 0 && !gPaletteFade.active && BGMusicStopped() == TRUE)
{
- SetObjectEventDirection(objectEvent, task->data[15]);
+ SetObjectEventDirection(objectEvent, task->tStartDir);
SetWarpDestinationToEscapeWarp();
WarpIntoMap();
- gFieldCallback = mapldr_080859D4;
+ gFieldCallback = FieldCallback_EscapeRopeWarpIn;
SetMainCallback2(CB2_LoadMap);
- DestroyTask(FindTaskIdByFunc(DoEscapeRopeFieldEffect));
- } else if (task->data[1] == 0 || (--task->data[1]) == 0)
+ DestroyTask(FindTaskIdByFunc(Task_EscapeRopeWarpOut));
+ }
+ else if (task->tSpinDelay == 0 || (--task->tSpinDelay) == 0)
{
ObjectEventSetHeldMovement(objectEvent, GetFaceDirectionMovementAction(spinDirections[objectEvent->facingDirection]));
- if (task->data[2] < 12)
- {
- task->data[2]++;
- }
- task->data[1] = 8 >> (task->data[2] >> 2);
+ if (task->tNumTurns < 12)
+ task->tNumTurns++;
+ task->tSpinDelay = 8 >> (task->tNumTurns >> 2);
}
}
}
-void (*const gUnknown_0855C484[])(struct Task *) = {
- sub_80B7EC4,
- sub_80B7EE8
+void (*const sEscapeRopeWarpInEffectFuncs[])(struct Task *) = {
+ EscapeRopeWarpInEffect_Init,
+ EscapeRopeWarpInEffect_Spin
};
-static void mapldr_080859D4(void)
+static void FieldCallback_EscapeRopeWarpIn(void)
{
Overworld_PlaySpecialMapMusic();
WarpFadeInScreen();
@@ -2215,78 +2288,84 @@ static void mapldr_080859D4(void)
FreezeObjectEvents();
gFieldCallback = NULL;
gObjectEvents[gPlayerAvatar.objectEventId].invisible = TRUE;
- CreateTask(sub_80B7E94, 0);
+ CreateTask(Task_EscapeRopeWarpIn, 0);
}
-static void sub_80B7E94(u8 taskId)
+static void Task_EscapeRopeWarpIn(u8 taskId)
{
- gUnknown_0855C484[gTasks[taskId].data[0]](&gTasks[taskId]);
+ sEscapeRopeWarpInEffectFuncs[gTasks[taskId].tState](&gTasks[taskId]);
}
-static void sub_80B7EC4(struct Task *task)
+static void EscapeRopeWarpInEffect_Init(struct Task *task)
{
if (IsWeatherNotFadingIn())
{
- task->data[0]++;
- task->data[15] = GetPlayerFacingDirection();
+ task->tState++;
+ task->tStartDir = GetPlayerFacingDirection();
}
}
-static void sub_80B7EE8(struct Task *task)
+static void EscapeRopeWarpInEffect_Spin(struct Task *task)
{
- u8 spinDirections[5] = {1, 3, 4, 2, 1};
+ u8 spinDirections[5] = {DIR_SOUTH, DIR_WEST, DIR_EAST, DIR_NORTH, DIR_SOUTH};
struct ObjectEvent *objectEvent = &gObjectEvents[gPlayerAvatar.objectEventId];
- if (task->data[1] == 0 || (--task->data[1]) == 0)
+ if (task->tSpinDelay == 0 || (--task->tSpinDelay) == 0)
{
if (ObjectEventIsMovementOverridden(objectEvent) && !ObjectEventClearHeldMovementIfFinished(objectEvent))
{
return;
}
- if (task->data[2] >= 32 && task->data[15] == GetPlayerFacingDirection())
+ if (task->tNumTurns >= 32 && task->tStartDir == GetPlayerFacingDirection())
{
objectEvent->invisible = FALSE;
ScriptContext2_Disable();
UnfreezeObjectEvents();
- DestroyTask(FindTaskIdByFunc(sub_80B7E94));
+ DestroyTask(FindTaskIdByFunc(Task_EscapeRopeWarpIn));
return;
}
ObjectEventSetHeldMovement(objectEvent, GetFaceDirectionMovementAction(spinDirections[objectEvent->facingDirection]));
- if (task->data[2] < 32)
- {
- task->data[2]++;
- }
- task->data[1] = task->data[2] >> 2;
+ if (task->tNumTurns < 32)
+ task->tNumTurns++;
+ task->tSpinDelay = task->tNumTurns >> 2;
}
objectEvent->invisible ^= 1;
}
-void CreateTeleportFieldEffectTask(void)
+#undef tState
+#undef tSpinDelay
+#undef tNumTurns
+#undef tTimer
+#undef tStartDir
+
+#define tState data[0]
+
+void FldEff_TeleportWarpOut(void)
{
- CreateTask(ExecuteTeleportFieldEffectTask, 0);
+ CreateTask(Task_TeleportWarpOut, 0);
}
-static void (*const sTeleportFieldEffectTasks[])(struct Task *) = {
- TeleportFieldEffectTask1,
- TeleportFieldEffectTask2,
- TeleportFieldEffectTask3,
- TeleportFieldEffectTask4
+static void (*const sTeleportWarpOutFieldEffectFuncs[])(struct Task *) = {
+ TeleportWarpOutFieldEffect_Init,
+ TeleportWarpOutFieldEffect_SpinGround,
+ TeleportWarpOutFieldEffect_SpinExit,
+ TeleportWarpOutFieldEffect_End
};
-static void ExecuteTeleportFieldEffectTask(u8 taskId)
+static void Task_TeleportWarpOut(u8 taskId)
{
- sTeleportFieldEffectTasks[gTasks[taskId].data[0]](&gTasks[taskId]);
+ sTeleportWarpOutFieldEffectFuncs[gTasks[taskId].tState](&gTasks[taskId]);
}
-static void TeleportFieldEffectTask1(struct Task *task)
+static void TeleportWarpOutFieldEffect_Init(struct Task *task)
{
ScriptContext2_Enable();
FreezeObjectEvents();
CameraObjectReset2();
task->data[15] = GetPlayerFacingDirection();
- task->data[0]++;
+ task->tState++;
}
-static void TeleportFieldEffectTask2(struct Task *task)
+static void TeleportWarpOutFieldEffect_SpinGround(struct Task *task)
{
u8 spinDirections[5] = {DIR_SOUTH, DIR_WEST, DIR_EAST, DIR_NORTH, DIR_SOUTH};
struct ObjectEvent *objectEvent = &gObjectEvents[gPlayerAvatar.objectEventId];
@@ -2298,15 +2377,15 @@ static void TeleportFieldEffectTask2(struct Task *task)
}
if (task->data[2] > 7 && task->data[15] == objectEvent->facingDirection)
{
- task->data[0]++;
+ task->tState++;
task->data[1] = 4;
task->data[2] = 8;
task->data[3] = 1;
- PlaySE(SE_TK_WARPIN);
+ PlaySE(SE_WARP_IN);
}
}
-static void TeleportFieldEffectTask3(struct Task *task)
+static void TeleportWarpOutFieldEffect_SpinExit(struct Task *task)
{
u8 spinDirections[5] = {DIR_SOUTH, DIR_WEST, DIR_EAST, DIR_NORTH, DIR_SOUTH};
struct ObjectEvent *objectEvent = &gObjectEvents[gPlayerAvatar.objectEventId];
@@ -2328,13 +2407,13 @@ static void TeleportFieldEffectTask3(struct Task *task)
}
if (task->data[4] >= 0xa8)
{
- task->data[0]++;
+ task->tState++;
TryFadeOutOldMapMusic();
WarpFadeOutScreen();
}
}
-static void TeleportFieldEffectTask4(struct Task *task)
+static void TeleportWarpOutFieldEffect_End(struct Task *task)
{
if (!gPaletteFade.active)
{
@@ -2349,13 +2428,13 @@ static void TeleportFieldEffectTask4(struct Task *task)
SetWarpDestinationToLastHealLocation();
WarpIntoMap();
SetMainCallback2(CB2_LoadMap);
- gFieldCallback = mapldr_08085D88;
- DestroyTask(FindTaskIdByFunc(ExecuteTeleportFieldEffectTask));
+ gFieldCallback = FieldCallback_TeleportWarpIn;
+ DestroyTask(FindTaskIdByFunc(Task_TeleportWarpOut));
}
}
}
-static void mapldr_08085D88(void)
+static void FieldCallback_TeleportWarpIn(void)
{
Overworld_PlaySpecialMapMusic();
WarpFadeInScreen();
@@ -2364,21 +2443,21 @@ static void mapldr_08085D88(void)
gFieldCallback = NULL;
gObjectEvents[gPlayerAvatar.objectEventId].invisible = TRUE;
CameraObjectReset2();
- CreateTask(sub_80B8250, 0);
+ CreateTask(Task_TeleportWarpIn, 0);
}
-void (*const gUnknown_0855C49C[])(struct Task *) = {
- sub_80B8280,
- sub_80B830C,
- sub_80B8410
+void (*const sTeleportWarpInFieldEffectFuncs[])(struct Task *) = {
+ TeleportWarpInFieldEffect_Init,
+ TeleportWarpInFieldEffect_SpinEnter,
+ TeleportWarpInFieldEffect_SpinGround
};
-static void sub_80B8250(u8 taskId)
+static void Task_TeleportWarpIn(u8 taskId)
{
- gUnknown_0855C49C[gTasks[taskId].data[0]](&gTasks[taskId]);
+ sTeleportWarpInFieldEffectFuncs[gTasks[taskId].data[0]](&gTasks[taskId]);
}
-static void sub_80B8280(struct Task *task)
+static void TeleportWarpInFieldEffect_Init(struct Task *task)
{
struct Sprite *sprite;
s16 centerToCornerVecY;
@@ -2393,13 +2472,13 @@ static void sub_80B8280(struct Task *task)
task->data[2] = 1;
task->data[14] = sprite->subspriteMode;
task->data[15] = GetPlayerFacingDirection();
- PlaySE(SE_TK_WARPIN);
+ PlaySE(SE_WARP_IN);
}
}
-static void sub_80B830C(struct Task *task)
+static void TeleportWarpInFieldEffect_SpinEnter(struct Task *task)
{
- u8 spinDirections[5] = {1, 3, 4, 2, 1};
+ u8 spinDirections[5] = {DIR_SOUTH, DIR_WEST, DIR_EAST, DIR_NORTH, DIR_SOUTH};
struct ObjectEvent *objectEvent = &gObjectEvents[gPlayerAvatar.objectEventId];
struct Sprite *sprite = &gSprites[gPlayerAvatar.spriteId];
if ((sprite->pos2.y += task->data[1]) >= -8)
@@ -2436,9 +2515,9 @@ static void sub_80B830C(struct Task *task)
}
}
-static void sub_80B8410(struct Task *task)
+static void TeleportWarpInFieldEffect_SpinGround(struct Task *task)
{
- u8 spinDirections[5] = {1, 3, 4, 2, 1};
+ u8 spinDirections[5] = {DIR_SOUTH, DIR_WEST, DIR_EAST, DIR_NORTH, DIR_SOUTH};
struct ObjectEvent *objectEvent = &gObjectEvents[gPlayerAvatar.objectEventId];
if ((--task->data[1]) == 0)
{
@@ -2449,22 +2528,39 @@ static void sub_80B8410(struct Task *task)
ScriptContext2_Disable();
CameraObjectReset1();
UnfreezeObjectEvents();
- DestroyTask(FindTaskIdByFunc(sub_80B8250));
+ DestroyTask(FindTaskIdByFunc(Task_TeleportWarpIn));
}
}
}
+// Task data for Task_FieldMoveShowMonOutDoors
+#define tState data[0]
+#define tWinHoriz data[1]
+#define tWinVert data[2]
+#define tWinIn data[3]
+#define tWinOut data[4]
+#define tBgHoriz data[5]
+#define tBgVert data[6]
+#define tMonSpriteId data[15]
+
+// Sprite data for field move mon sprite
+#define sSpecies data[0]
+#define sOnscreenTimer data[1]
+#define sSlidOffscreen data[7]
+
+// There are two variants (outdoor/indoor) of the "show mon for a field move" effect
+// Outdoor has a black background with thick white streaks and appears from the right by stretching vertically and horizontally
+// Indoor has blue background with thin white streaks and appears from the left by stretching horizontally
+// For both the background streaks move to the right, and the mon sprite enters from the right and exits left
bool8 FldEff_FieldMoveShowMon(void)
{
u8 taskId;
if (IsMapTypeOutdoors(GetCurrentMapType()) == TRUE)
- {
- taskId = CreateTask(sub_80B8554, 0xff);
- } else
- {
- taskId = CreateTask(sub_80B88B4, 0xff);
- }
- gTasks[taskId].data[15] = sub_80B8C60(gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2]);
+ taskId = CreateTask(Task_FieldMoveShowMonOutdoors, 0xff);
+ else
+ taskId = CreateTask(Task_FieldMoveShowMonIndoors, 0xff);
+
+ gTasks[taskId].tMonSpriteId = InitFieldMoveMonSprite(gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2]);
return FALSE;
}
@@ -2482,240 +2578,248 @@ bool8 FldEff_FieldMoveShowMonInit(void)
return FALSE;
}
-void (*const gUnknown_0855C4A8[])(struct Task *) = {
- sub_80B8584,
- sub_80B85F8,
- sub_80B8660,
- sub_80B86EC,
- sub_80B871C,
- sub_80B8770,
- overworld_bg_setup_2,
+void (*const sFieldMoveShowMonOutdoorsEffectFuncs[])(struct Task *) = {
+ FieldMoveShowMonOutdoorsEffect_Init,
+ FieldMoveShowMonOutdoorsEffect_LoadGfx,
+ FieldMoveShowMonOutdoorsEffect_CreateBanner,
+ FieldMoveShowMonOutdoorsEffect_WaitForMon,
+ FieldMoveShowMonOutdoorsEffect_ShrinkBanner,
+ FieldMoveShowMonOutdoorsEffect_RestoreBg,
+ FieldMoveShowMonOutdoorsEffect_End,
};
-static void sub_80B8554(u8 taskId)
+static void Task_FieldMoveShowMonOutdoors(u8 taskId)
{
- gUnknown_0855C4A8[gTasks[taskId].data[0]](&gTasks[taskId]);
+ sFieldMoveShowMonOutdoorsEffectFuncs[gTasks[taskId].tState](&gTasks[taskId]);
}
-static void sub_80B8584(struct Task *task)
+static void FieldMoveShowMonOutdoorsEffect_Init(struct Task *task)
{
task->data[11] = REG_WININ;
task->data[12] = REG_WINOUT;
- StoreWordInTwoHalfwords(&task->data[13], (u32)gMain.vblankCallback);
- task->data[1] = 0xf0f1;
- task->data[2] = 0x5051;
- task->data[3] = 0x3f;
- task->data[4] = 0x3e;
- SetGpuReg(REG_OFFSET_WIN0H, task->data[1]);
- SetGpuReg(REG_OFFSET_WIN0V, task->data[2]);
- SetGpuReg(REG_OFFSET_WININ, task->data[3]);
- SetGpuReg(REG_OFFSET_WINOUT, task->data[4]);
- SetVBlankCallback(sub_80B880C);
- task->data[0]++;
+ StoreWordInTwoHalfwords((u16 *)&task->data[13], (u32)gMain.vblankCallback);
+ task->tWinHoriz = WIN_RANGE(DISPLAY_WIDTH, DISPLAY_WIDTH + 1);
+ task->tWinVert = WIN_RANGE(DISPLAY_HEIGHT / 2, DISPLAY_HEIGHT / 2 + 1);
+ task->tWinIn = WININ_WIN0_BG_ALL | WININ_WIN0_OBJ | WININ_WIN0_CLR;
+ task->tWinOut = WINOUT_WIN01_BG1 | WINOUT_WIN01_BG2 | WINOUT_WIN01_BG3 | WINOUT_WIN01_OBJ | WINOUT_WIN01_CLR;
+ SetGpuReg(REG_OFFSET_WIN0H, task->tWinHoriz);
+ SetGpuReg(REG_OFFSET_WIN0V, task->tWinVert);
+ SetGpuReg(REG_OFFSET_WININ, task->tWinIn);
+ SetGpuReg(REG_OFFSET_WINOUT, task->tWinOut);
+ SetVBlankCallback(VBlankCB_FieldMoveShowMonOutdoors);
+ task->tState++;
}
-static void sub_80B85F8(struct Task *task)
+static void FieldMoveShowMonOutdoorsEffect_LoadGfx(struct Task *task)
{
u16 offset = ((REG_BG0CNT >> 2) << 14);
u16 delta = ((REG_BG0CNT >> 8) << 11);
- CpuCopy16(gFieldMoveStreaksTiles, (void *)(VRAM + offset), 0x200);
+ CpuCopy16(sFieldMoveStreaksOutdoors_Gfx, (void *)(VRAM + offset), 0x200);
CpuFill32(0, (void *)(VRAM + delta), 0x800);
- LoadPalette(gFieldMoveStreaksPalette, 0xf0, 0x20);
- sub_80B8874(delta);
- task->data[0]++;
+ LoadPalette(sFieldMoveStreaksOutdoors_Pal, 0xf0, 0x20);
+ LoadFieldMoveOutdoorStreaksTilemap(delta);
+ task->tState++;
}
-static void sub_80B8660(struct Task *task)
+static void FieldMoveShowMonOutdoorsEffect_CreateBanner(struct Task *task)
{
- s16 v0;
- s16 v2;
- s16 v3;
- task->data[5] -= 16;
- v0 = ((u16)task->data[1] >> 8);
- v2 = ((u16)task->data[2] >> 8);
- v3 = ((u16)task->data[2] & 0xff);
- v0 -= 16;
- v2 -= 2;
- v3 += 2;
- if (v0 < 0)
- {
- v0 = 0;
- }
- if (v2 < 0x28)
- {
- v2 = 0x28;
- }
- if (v3 > 0x78)
- {
- v3 = 0x78;
- }
- task->data[1] = (v0 << 8) | (task->data[1] & 0xff);
- task->data[2] = (v2 << 8) | v3;
- if (v0 == 0 && v2 == 0x28 && v3 == 0x78)
+ s16 horiz;
+ s16 vertHi;
+ s16 vertLo;
+ task->tBgHoriz -= 16;
+ horiz = ((u16)task->tWinHoriz >> 8);
+ vertHi = ((u16)task->tWinVert >> 8);
+ vertLo = ((u16)task->tWinVert & 0xff);
+ horiz -= 16;
+ vertHi -= 2;
+ vertLo += 2;
+
+ if (horiz < 0)
+ horiz = 0;
+
+ if (vertHi < DISPLAY_HEIGHT / 4)
+ vertHi = DISPLAY_HEIGHT / 4;
+
+ if (vertLo > DISPLAY_WIDTH / 2)
+ vertLo = DISPLAY_WIDTH / 2;
+
+ task->tWinHoriz = (horiz << 8) | (task->tWinHoriz & 0xff);
+ task->tWinVert = (vertHi << 8) | vertLo;
+ if (horiz == 0 && vertHi == DISPLAY_HEIGHT / 4 && vertLo == DISPLAY_WIDTH / 2)
{
- gSprites[task->data[15]].callback = sub_80B8CC0;
- task->data[0]++;
+ gSprites[task->tMonSpriteId].callback = SpriteCB_FieldMoveMonSlideOnscreen;
+ task->tState++;
}
}
-static void sub_80B86EC(struct Task *task)
+static void FieldMoveShowMonOutdoorsEffect_WaitForMon(struct Task *task)
{
- task->data[5] -= 16;
- if (gSprites[task->data[15]].data[7])
- {
- task->data[0]++;
- }
+ task->tBgHoriz -= 16;
+
+ if (gSprites[task->tMonSpriteId].sSlidOffscreen)
+ task->tState++;
}
-static void sub_80B871C(struct Task *task)
+static void FieldMoveShowMonOutdoorsEffect_ShrinkBanner(struct Task *task)
{
- s16 v2;
- s16 v3;
- task->data[5] -= 16;
- v2 = (task->data[2] >> 8);
- v3 = (task->data[2] & 0xff);
- v2 += 6;
- v3 -= 6;
- if (v2 > 0x50)
- {
- v2 = 0x50;
- }
- if (v3 < 0x51)
- {
- v3 = 0x51;
- }
- task->data[2] = (v2 << 8) | v3;
- if (v2 == 0x50 && v3 == 0x51)
- {
- task->data[0]++;
- }
+ s16 vertHi;
+ s16 vertLo;
+ task->tBgHoriz -= 16;
+ vertHi = (task->tWinVert >> 8);
+ vertLo = (task->tWinVert & 0xFF);
+ vertHi += 6;
+ vertLo -= 6;
+
+ if (vertHi > DISPLAY_HEIGHT / 2)
+ vertHi = DISPLAY_HEIGHT / 2;
+
+ if (vertLo < DISPLAY_HEIGHT / 2 + 1)
+ vertLo = DISPLAY_HEIGHT / 2 + 1;
+
+ task->tWinVert = (vertHi << 8) | vertLo;
+
+ if (vertHi == DISPLAY_HEIGHT / 2 && vertLo == DISPLAY_HEIGHT / 2 + 1)
+ task->tState++;
}
-static void sub_80B8770(struct Task *task)
+static void FieldMoveShowMonOutdoorsEffect_RestoreBg(struct Task *task)
{
u16 bg0cnt = (REG_BG0CNT >> 8) << 11;
CpuFill32(0, (void *)VRAM + bg0cnt, 0x800);
- task->data[1] = 0xf1;
- task->data[2] = 0xa1;
- task->data[3] = task->data[11];
- task->data[4] = task->data[12];
- task->data[0]++;
+ task->tWinHoriz = DISPLAY_WIDTH + 1;
+ task->tWinVert = DISPLAY_HEIGHT + 1;
+ task->tWinIn = task->data[11];
+ task->tWinOut = task->data[12];
+ task->tState++;
}
-static void overworld_bg_setup_2(struct Task *task)
+static void FieldMoveShowMonOutdoorsEffect_End(struct Task *task)
{
IntrCallback callback;
LoadWordFromTwoHalfwords((u16 *)&task->data[13], (u32 *)&callback);
SetVBlankCallback(callback);
- sub_8197200();
- FreeResourcesAndDestroySprite(&gSprites[task->data[15]], task->data[15]);
+ InitTextBoxGfxAndPrinters();
+ FreeResourcesAndDestroySprite(&gSprites[task->tMonSpriteId], task->tMonSpriteId);
FieldEffectActiveListRemove(FLDEFF_FIELD_MOVE_SHOW_MON);
- DestroyTask(FindTaskIdByFunc(sub_80B8554));
+ DestroyTask(FindTaskIdByFunc(Task_FieldMoveShowMonOutdoors));
}
-static void sub_80B880C(void)
+static void VBlankCB_FieldMoveShowMonOutdoors(void)
{
IntrCallback callback;
- struct Task *task = &gTasks[FindTaskIdByFunc(sub_80B8554)];
+ struct Task *task = &gTasks[FindTaskIdByFunc(Task_FieldMoveShowMonOutdoors)];
LoadWordFromTwoHalfwords((u16 *)&task->data[13], (u32 *)&callback);
callback();
- SetGpuReg(REG_OFFSET_WIN0H, task->data[1]);
- SetGpuReg(REG_OFFSET_WIN0V, task->data[2]);
- SetGpuReg(REG_OFFSET_WININ, task->data[3]);
- SetGpuReg(REG_OFFSET_WINOUT, task->data[4]);
- SetGpuReg(REG_OFFSET_BG0HOFS, task->data[5]);
- SetGpuReg(REG_OFFSET_BG0VOFS, task->data[6]);
+ SetGpuReg(REG_OFFSET_WIN0H, task->tWinHoriz);
+ SetGpuReg(REG_OFFSET_WIN0V, task->tWinVert);
+ SetGpuReg(REG_OFFSET_WININ, task->tWinIn);
+ SetGpuReg(REG_OFFSET_WINOUT, task->tWinOut);
+ SetGpuReg(REG_OFFSET_BG0HOFS, task->tBgHoriz);
+ SetGpuReg(REG_OFFSET_BG0VOFS, task->tBgVert);
}
-static void sub_80B8874(u16 offs)
+static void LoadFieldMoveOutdoorStreaksTilemap(u16 offs)
{
u16 i;
u16 *dest;
- dest = (u16 *)(VRAM + 0x140 + offs);
- for (i = 0; i < 0x140; i++, dest++)
- {
- *dest = gFieldMoveStreaksTilemap[i] | METATILE_ELEVATION_MASK;
- }
-}
-
-void (*const gUnknown_0855C4C4[])(struct Task *) = {
- sub_80B88E4,
- sub_80B8920,
- sub_80B898C,
- sub_80B89DC,
- sub_80B8A0C,
- sub_80B8A44,
- sub_80B8A64,
+ dest = (u16 *)(VRAM + ARRAY_COUNT(sFieldMoveStreaksOutdoors_Tilemap) + offs);
+ for (i = 0; i < ARRAY_COUNT(sFieldMoveStreaksOutdoors_Tilemap); i++, dest++)
+ {
+ *dest = sFieldMoveStreaksOutdoors_Tilemap[i] | 0xF000;
+ }
+}
+
+#undef tState
+#undef tWinHoriz
+#undef tWinVert
+#undef tWinIn
+#undef tWinOut
+#undef tBgHoriz
+#undef tBgVert
+#undef tMonSpriteId
+
+// Task data for Task_FieldMoveShowMonIndoors
+#define tState data[0]
+#define tBgHoriz data[1]
+#define tBgVert data[2]
+#define tBgOffsetIdx data[3]
+#define tBgOffset data[4]
+#define tMonSpriteId data[15]
+
+void (*const sFieldMoveShowMonIndoorsEffectFuncs[])(struct Task *) = {
+ FieldMoveShowMonIndoorsEffect_Init,
+ FieldMoveShowMonIndoorsEffect_LoadGfx,
+ FieldMoveShowMonIndoorsEffect_SlideBannerOn,
+ FieldMoveShowMonIndoorsEffect_WaitForMon,
+ FieldMoveShowMonIndoorsEffect_RestoreBg,
+ FieldMoveShowMonIndoorsEffect_SlideBannerOff,
+ FieldMoveShowMonIndoorsEffect_End,
};
-static void sub_80B88B4(u8 taskId)
+static void Task_FieldMoveShowMonIndoors(u8 taskId)
{
- gUnknown_0855C4C4[gTasks[taskId].data[0]](&gTasks[taskId]);
+ sFieldMoveShowMonIndoorsEffectFuncs[gTasks[taskId].tState](&gTasks[taskId]);
}
-static void sub_80B88E4(struct Task *task)
+static void FieldMoveShowMonIndoorsEffect_Init(struct Task *task)
{
- SetGpuReg(REG_OFFSET_BG0HOFS, task->data[1]);
- SetGpuReg(REG_OFFSET_BG0VOFS, task->data[2]);
+ SetGpuReg(REG_OFFSET_BG0HOFS, task->tBgHoriz);
+ SetGpuReg(REG_OFFSET_BG0VOFS, task->tBgVert);
StoreWordInTwoHalfwords((u16 *)&task->data[13], (u32)gMain.vblankCallback);
- SetVBlankCallback(sub_80B8AE0);
- task->data[0]++;
+ SetVBlankCallback(VBlankCB_FieldMoveShowMonIndoors);
+ task->tState++;
}
-static void sub_80B8920(struct Task *task)
+static void FieldMoveShowMonIndoorsEffect_LoadGfx(struct Task *task)
{
u16 offset;
u16 delta;
offset = ((REG_BG0CNT >> 2) << 14);
delta = ((REG_BG0CNT >> 8) << 11);
task->data[12] = delta;
- CpuCopy16(gDarknessFieldMoveStreaksTiles, (void *)(VRAM + offset), 0x80);
+ CpuCopy16(sFieldMoveStreaksIndoors_Gfx, (void *)(VRAM + offset), 0x80);
CpuFill32(0, (void *)(VRAM + delta), 0x800);
- LoadPalette(gDarknessFieldMoveStreaksPalette, 0xf0, 0x20);
- task->data[0]++;
+ LoadPalette(sFieldMoveStreaksIndoors_Pal, 0xf0, 0x20);
+ task->tState++;
}
-static void sub_80B898C(struct Task *task)
+static void FieldMoveShowMonIndoorsEffect_SlideBannerOn(struct Task *task)
{
- if (sub_80B8B38(task))
+ if (SlideIndoorBannerOnscreen(task))
{
- SetGpuReg(REG_OFFSET_WIN1H, 0x00f0);
- SetGpuReg(REG_OFFSET_WIN1V, 0x2878);
- gSprites[task->data[15]].callback = sub_80B8CC0;
- task->data[0]++;
+ SetGpuReg(REG_OFFSET_WIN1H, WIN_RANGE(0, DISPLAY_WIDTH));
+ SetGpuReg(REG_OFFSET_WIN1V, WIN_RANGE(DISPLAY_HEIGHT / 4, DISPLAY_HEIGHT - DISPLAY_HEIGHT / 4));
+ gSprites[task->tMonSpriteId].callback = SpriteCB_FieldMoveMonSlideOnscreen;
+ task->tState++;
}
- sub_80B8B28(task);
+ AnimateIndoorShowMonBg(task);
}
-static void sub_80B89DC(struct Task *task)
+static void FieldMoveShowMonIndoorsEffect_WaitForMon(struct Task *task)
{
- sub_80B8B28(task);
- if (gSprites[task->data[15]].data[7])
- {
- task->data[0]++;
- }
+ AnimateIndoorShowMonBg(task);
+ if (gSprites[task->tMonSpriteId].sSlidOffscreen)
+ task->tState++;
}
-static void sub_80B8A0C(struct Task *task)
+static void FieldMoveShowMonIndoorsEffect_RestoreBg(struct Task *task)
{
- sub_80B8B28(task);
- task->data[3] = task->data[1] & 7;
- task->data[4] = 0;
- SetGpuReg(REG_OFFSET_WIN1H, 0xffff);
- SetGpuReg(REG_OFFSET_WIN1V, 0xffff);
- task->data[0]++;
+ AnimateIndoorShowMonBg(task);
+ task->tBgOffsetIdx = task->tBgHoriz & 7;
+ task->tBgOffset = 0;
+ SetGpuReg(REG_OFFSET_WIN1H, WIN_RANGE(0xFF, 0xFF));
+ SetGpuReg(REG_OFFSET_WIN1V, WIN_RANGE(0xFF, 0xFF));
+ task->tState++;
}
-static void sub_80B8A44(struct Task *task)
+static void FieldMoveShowMonIndoorsEffect_SlideBannerOff(struct Task *task)
{
- sub_80B8B28(task);
- if (sub_80B8BF0(task))
- {
- task->data[0]++;
- }
+ AnimateIndoorShowMonBg(task);
+ if (SlideIndoorBannerOffscreen(task))
+ task->tState++;
}
-static void sub_80B8A64(struct Task *task)
+static void FieldMoveShowMonIndoorsEffect_End(struct Task *task)
{
IntrCallback intrCallback;
u16 bg0cnt;
@@ -2723,231 +2827,248 @@ static void sub_80B8A64(struct Task *task)
CpuFill32(0, (void *)VRAM + bg0cnt, 0x800);
LoadWordFromTwoHalfwords((u16 *)&task->data[13], (u32 *)&intrCallback);
SetVBlankCallback(intrCallback);
- sub_8197200();
- FreeResourcesAndDestroySprite(&gSprites[task->data[15]], task->data[15]);
+ InitTextBoxGfxAndPrinters();
+ FreeResourcesAndDestroySprite(&gSprites[task->tMonSpriteId], task->tMonSpriteId);
FieldEffectActiveListRemove(FLDEFF_FIELD_MOVE_SHOW_MON);
- DestroyTask(FindTaskIdByFunc(sub_80B88B4));
+ DestroyTask(FindTaskIdByFunc(Task_FieldMoveShowMonIndoors));
}
-static void sub_80B8AE0(void)
+static void VBlankCB_FieldMoveShowMonIndoors(void)
{
IntrCallback intrCallback;
struct Task *task;
- task = &gTasks[FindTaskIdByFunc(sub_80B88B4)];
+ task = &gTasks[FindTaskIdByFunc(Task_FieldMoveShowMonIndoors)];
LoadWordFromTwoHalfwords((u16 *)&task->data[13], (u32 *)&intrCallback);
intrCallback();
- SetGpuReg(REG_OFFSET_BG0HOFS, task->data[1]);
- SetGpuReg(REG_OFFSET_BG0VOFS, task->data[2]);
+ SetGpuReg(REG_OFFSET_BG0HOFS, task->tBgHoriz);
+ SetGpuReg(REG_OFFSET_BG0VOFS, task->tBgVert);
}
-static void sub_80B8B28(struct Task *task)
+static void AnimateIndoorShowMonBg(struct Task *task)
{
- task->data[1] -= 16;
- task->data[3] += 16;
+ task->tBgHoriz -= 16;
+ task->tBgOffsetIdx += 16;
}
-static bool8 sub_80B8B38(struct Task *task)
+static bool8 SlideIndoorBannerOnscreen(struct Task *task)
{
u16 i;
u16 srcOffs;
u16 dstOffs;
u16 *dest;
- if (task->data[4] >= 32)
- {
+
+ if (task->tBgOffset >= 32)
return TRUE;
- }
- dstOffs = (task->data[3] >> 3) & 0x1f;
- if (dstOffs >= task->data[4])
+
+ dstOffs = (task->tBgOffsetIdx >> 3) & 0x1f;
+ if (dstOffs >= task->tBgOffset)
{
dstOffs = (32 - dstOffs) & 0x1f;
- srcOffs = (32 - task->data[4]) & 0x1f;
+ srcOffs = (32 - task->tBgOffset) & 0x1f;
dest = (u16 *)(VRAM + 0x140 + (u16)task->data[12]);
for (i = 0; i < 10; i++)
{
- dest[dstOffs + i * 32] = gDarknessFieldMoveStreaksTilemap[srcOffs + i * 32];
+ dest[dstOffs + i * 32] = sFieldMoveStreaksIndoors_Tilemap[srcOffs + i * 32];
dest[dstOffs + i * 32] |= 0xf000;
- dest[((dstOffs + 1) & 0x1f) + i * 32] = gDarknessFieldMoveStreaksTilemap[((srcOffs + 1) & 0x1f) + i * 32] | 0xf000;
+ dest[((dstOffs + 1) & 0x1f) + i * 32] = sFieldMoveStreaksIndoors_Tilemap[((srcOffs + 1) & 0x1f) + i * 32] | 0xf000;
dest[((dstOffs + 1) & 0x1f) + i * 32] |= 0xf000;
}
- task->data[4] += 2;
+ task->tBgOffset += 2;
}
return FALSE;
}
-static bool8 sub_80B8BF0(struct Task *task)
+static bool8 SlideIndoorBannerOffscreen(struct Task *task)
{
u16 i;
u16 dstOffs;
u16 *dest;
- if (task->data[4] >= 32)
- {
+
+ if (task->tBgOffset >= 32)
return TRUE;
- }
- dstOffs = task->data[3] >> 3;
- if (dstOffs >= task->data[4])
+
+ dstOffs = task->tBgOffsetIdx >> 3;
+ if (dstOffs >= task->tBgOffset)
{
- dstOffs = (task->data[1] >> 3) & 0x1f;
+ dstOffs = (task->tBgHoriz >> 3) & 0x1f;
dest = (u16 *)(VRAM + 0x140 + (u16)task->data[12]);
for (i = 0; i < 10; i++)
{
dest[dstOffs + i * 32] = 0xf000;
dest[((dstOffs + 1) & 0x1f) + i * 32] = 0xf000;
}
- task->data[4] += 2;
+ task->tBgOffset += 2;
}
return FALSE;
}
-static u8 sub_80B8C60(u32 a0, u32 a1, u32 a2)
+#undef tState
+#undef tBgHoriz
+#undef tBgVert
+#undef tBgOffsetIdx
+#undef tBgOffset
+#undef tMonSpriteId
+
+static u8 InitFieldMoveMonSprite(u32 species, u32 otId, u32 personality)
{
u16 v0;
u8 monSprite;
struct Sprite *sprite;
- v0 = (a0 & 0x80000000) >> 16;
- a0 &= 0x7fffffff;
- monSprite = CreateMonSprite_FieldMove(a0, a1, a2, 0x140, 0x50, 0);
+ v0 = (species & 0x80000000) >> 16;
+ species &= 0x7fffffff;
+ monSprite = CreateMonSprite_FieldMove(species, otId, personality, 320, 80, 0);
sprite = &gSprites[monSprite];
sprite->callback = SpriteCallbackDummy;
sprite->oam.priority = 0;
- sprite->data[0] = a0;
+ sprite->sSpecies = species;
sprite->data[6] = v0;
return monSprite;
}
-static void sub_80B8CC0(struct Sprite *sprite)
+static void SpriteCB_FieldMoveMonSlideOnscreen(struct Sprite *sprite)
{
- if ((sprite->pos1.x -= 20) <= 0x78)
+ if ((sprite->pos1.x -= 20) <= DISPLAY_WIDTH / 2)
{
- sprite->pos1.x = 0x78;
- sprite->data[1] = 30;
- sprite->callback = sub_80B8D04;
+ sprite->pos1.x = DISPLAY_WIDTH / 2;
+ sprite->sOnscreenTimer = 30;
+ sprite->callback = SpriteCB_FieldMoveMonWaitAfterCry;
if (sprite->data[6])
{
- PlayCry2(sprite->data[0], 0, 0x7d, 0xa);
+ PlayCry2(sprite->sSpecies, 0, 0x7d, 0xa);
}
else
{
- PlayCry1(sprite->data[0], 0);
+ PlayCry1(sprite->sSpecies, 0);
}
}
}
-static void sub_80B8D04(struct Sprite *sprite)
+static void SpriteCB_FieldMoveMonWaitAfterCry(struct Sprite *sprite)
{
- if ((--sprite->data[1]) == 0)
- {
- sprite->callback = sub_80B8D20;
- }
+ if ((--sprite->sOnscreenTimer) == 0)
+ sprite->callback = SpriteCB_FieldMoveMonSlideOffscreen;
}
-static void sub_80B8D20(struct Sprite *sprite)
+static void SpriteCB_FieldMoveMonSlideOffscreen(struct Sprite *sprite)
{
- if (sprite->pos1.x < -0x40)
- {
- sprite->data[7] = 1;
- }
+ if (sprite->pos1.x < -64)
+ sprite->sSlidOffscreen = TRUE;
else
- {
sprite->pos1.x -= 20;
- }
}
+#undef tState
+#undef tMonSpriteId
+#undef sSpecies
+#undef sSlidOffscreen
+#undef sOnscreenTimer
+
+#define tState data[0]
+#define tDestX data[1]
+#define tDestY data[2]
+#define tMonId data[15]
+
u8 FldEff_UseSurf(void)
{
- u8 taskId = CreateTask(sub_80B8D84, 0xff);
- gTasks[taskId].data[15] = gFieldEffectArguments[0];
+ u8 taskId = CreateTask(Task_SurfFieldEffect, 0xff);
+ gTasks[taskId].tMonId = gFieldEffectArguments[0];
Overworld_ClearSavedMusic();
- Overworld_ChangeMusicTo(MUS_NAMINORI);
+ Overworld_ChangeMusicTo(MUS_SURF);
return FALSE;
}
-void (*const gUnknown_0855C4E0[])(struct Task *) = {
- sub_80B8DB4,
- sub_80B8E14,
- sub_80B8E60,
- sub_80B8EA8,
- sub_80B8F24,
+void (*const sSurfFieldEffectFuncs[])(struct Task *) = {
+ SurfFieldEffect_Init,
+ SurfFieldEffect_FieldMovePose,
+ SurfFieldEffect_ShowMon,
+ SurfFieldEffect_JumpOnSurfBlob,
+ SurfFieldEffect_End,
};
-static void sub_80B8D84(u8 taskId)
+static void Task_SurfFieldEffect(u8 taskId)
{
- gUnknown_0855C4E0[gTasks[taskId].data[0]](&gTasks[taskId]);
+ sSurfFieldEffectFuncs[gTasks[taskId].tState](&gTasks[taskId]);
}
-static void sub_80B8DB4(struct Task *task)
+static void SurfFieldEffect_Init(struct Task *task)
{
ScriptContext2_Enable();
FreezeObjectEvents();
gPlayerAvatar.preventStep = TRUE;
- SetPlayerAvatarStateMask(8);
- PlayerGetDestCoords(&task->data[1], &task->data[2]);
- MoveCoords(gObjectEvents[gPlayerAvatar.objectEventId].movementDirection, &task->data[1], &task->data[2]);
- task->data[0]++;
+ SetPlayerAvatarStateMask(PLAYER_AVATAR_FLAG_SURFING);
+ PlayerGetDestCoords(&task->tDestX, &task->tDestY);
+ MoveCoords(gObjectEvents[gPlayerAvatar.objectEventId].movementDirection, &task->tDestX, &task->tDestY);
+ task->tState++;
}
-static void sub_80B8E14(struct Task *task)
+static void SurfFieldEffect_FieldMovePose(struct Task *task)
{
struct ObjectEvent *objectEvent;
objectEvent = &gObjectEvents[gPlayerAvatar.objectEventId];
if (!ObjectEventIsMovementOverridden(objectEvent) || ObjectEventClearHeldMovementIfFinished(objectEvent))
{
- sub_808C114();
+ SetPlayerAvatarFieldMove();
ObjectEventSetHeldMovement(objectEvent, MOVEMENT_ACTION_START_ANIM_IN_DIRECTION);
- task->data[0]++;
+ task->tState++;
}
}
-static void sub_80B8E60(struct Task *task)
+static void SurfFieldEffect_ShowMon(struct Task *task)
{
struct ObjectEvent *objectEvent;
objectEvent = &gObjectEvents[gPlayerAvatar.objectEventId];
if (ObjectEventCheckHeldMovementStatus(objectEvent))
{
- gFieldEffectArguments[0] = task->data[15] | 0x80000000;
+ gFieldEffectArguments[0] = task->tMonId | 0x80000000;
FieldEffectStart(FLDEFF_FIELD_MOVE_SHOW_MON_INIT);
- task->data[0]++;
+ task->tState++;
}
}
-static void sub_80B8EA8(struct Task *task)
+static void SurfFieldEffect_JumpOnSurfBlob(struct Task *task)
{
struct ObjectEvent *objectEvent;
if (!FieldEffectActiveListContains(FLDEFF_FIELD_MOVE_SHOW_MON))
{
objectEvent = &gObjectEvents[gPlayerAvatar.objectEventId];
- ObjectEventSetGraphicsId(objectEvent, GetPlayerAvatarGraphicsIdByStateId(3));
+ ObjectEventSetGraphicsId(objectEvent, GetPlayerAvatarGraphicsIdByStateId(PLAYER_AVATAR_STATE_SURFING));
ObjectEventClearHeldMovementIfFinished(objectEvent);
ObjectEventSetHeldMovement(objectEvent, GetJumpSpecialMovementAction(objectEvent->movementDirection));
- gFieldEffectArguments[0] = task->data[1];
- gFieldEffectArguments[1] = task->data[2];
+ gFieldEffectArguments[0] = task->tDestX;
+ gFieldEffectArguments[1] = task->tDestY;
gFieldEffectArguments[2] = gPlayerAvatar.objectEventId;
objectEvent->fieldEffectSpriteId = FieldEffectStart(FLDEFF_SURF_BLOB);
- task->data[0]++;
+ task->tState++;
}
}
-static void sub_80B8F24(struct Task *task)
+static void SurfFieldEffect_End(struct Task *task)
{
struct ObjectEvent *objectEvent;
objectEvent = &gObjectEvents[gPlayerAvatar.objectEventId];
if (ObjectEventClearHeldMovementIfFinished(objectEvent))
{
gPlayerAvatar.preventStep = FALSE;
- gPlayerAvatar.flags &= 0xdf;
+ gPlayerAvatar.flags &= ~PLAYER_AVATAR_FLAG_5;
ObjectEventSetHeldMovement(objectEvent, GetFaceDirectionMovementAction(objectEvent->movementDirection));
- sub_81555AC(objectEvent->fieldEffectSpriteId, 1);
+ SetSurfBobState(objectEvent->fieldEffectSpriteId, 1);
UnfreezeObjectEvents();
ScriptContext2_Disable();
FieldEffectActiveListRemove(FLDEFF_USE_SURF);
- DestroyTask(FindTaskIdByFunc(sub_80B8D84));
+ DestroyTask(FindTaskIdByFunc(Task_SurfFieldEffect));
}
}
-u8 sub_80B8F98(void)
+#undef tState
+#undef tDestX
+#undef tDestY
+#undef tMonId
+
+u8 FldEff_RayquazaSpotlight(void)
{
u8 i, j, k;
- u8 spriteId = CreateSprite(gFieldEffectObjectTemplatePointers[36], 0x78, -0x18, 1);
+ u8 spriteId = CreateSprite(gFieldEffectObjectTemplatePointers[FLDEFFOBJ_RAYQUAZA], 120, -24, 1);
struct Sprite *sprite = &gSprites[spriteId];
sprite->oam.priority = 1;
@@ -2961,7 +3082,7 @@ u8 sub_80B8F98(void)
SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT1_BG0 | BLDCNT_EFFECT_BLEND | BLDCNT_TGT2_BG1 | BLDCNT_TGT2_BG2 | BLDCNT_TGT2_BG3 | BLDCNT_TGT2_OBJ | BLDCNT_TGT2_BD);
SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(14, 14));
SetGpuReg(REG_OFFSET_WININ, WININ_WIN0_BG_ALL | WININ_WIN0_OBJ | WININ_WIN0_CLR | WININ_WIN1_BG_ALL | WININ_WIN1_OBJ | WININ_WIN1_CLR);
- LoadPalette(gUnknown_0855B610, 0xC0, sizeof(gUnknown_0855B610));
+ LoadPalette(sSpotlight_Pal, 0xC0, sizeof(sSpotlight_Pal));
SetGpuReg(REG_OFFSET_BG0VOFS, 120);
for (i = 3; i < 15; i++)
{
@@ -2974,8 +3095,8 @@ u8 sub_80B8F98(void)
{
for (i = 0; i < 8; i++)
{
- *(u16*)(BG_CHAR_ADDR(2) + (k + 1) * 32 + i * 4) = (gUnknown_0855B630[k * 32 + i * 4 + 1] << 8) + gUnknown_0855B630[k * 32 + i * 4];
- *(u16*)(BG_CHAR_ADDR(2) + (k + 1) * 32 + i * 4 + 2) = (gUnknown_0855B630[k * 32 + i * 4 + 3] << 8) + gUnknown_0855B630[k * 32 + i * 4 + 2];
+ *(u16*)(BG_CHAR_ADDR(2) + (k + 1) * 32 + i * 4) = (sSpotlight_Gfx[k * 32 + i * 4 + 1] << 8) + sSpotlight_Gfx[k * 32 + i * 4];
+ *(u16*)(BG_CHAR_ADDR(2) + (k + 1) * 32 + i * 4 + 2) = (sSpotlight_Gfx[k * 32 + i * 4 + 3] << 8) + sSpotlight_Gfx[k * 32 + i * 4 + 2];
}
}
return spriteId;
@@ -2983,18 +3104,18 @@ u8 sub_80B8F98(void)
u8 FldEff_NPCFlyOut(void)
{
- u8 spriteId = CreateSprite(gFieldEffectObjectTemplatePointers[26], 0x78, 0, 1);
+ u8 spriteId = CreateSprite(gFieldEffectObjectTemplatePointers[FLDEFFOBJ_BIRD], 0x78, 0, 1);
struct Sprite *sprite = &gSprites[spriteId];
sprite->oam.paletteNum = 0;
sprite->oam.priority = 1;
- sprite->callback = sub_80B9128;
+ sprite->callback = SpriteCB_NPCFlyOut;
sprite->data[1] = gFieldEffectArguments[0];
- PlaySE(SE_W019);
+ PlaySE(SE_M_FLY);
return spriteId;
}
-static void sub_80B9128(struct Sprite *sprite)
+static void SpriteCB_NPCFlyOut(struct Sprite *sprite)
{
struct Sprite *npcSprite;
@@ -3004,214 +3125,224 @@ static void sub_80B9128(struct Sprite *sprite)
if (sprite->data[0])
{
npcSprite = &gSprites[sprite->data[1]];
- npcSprite->coordOffsetEnabled = 0;
+ npcSprite->coordOffsetEnabled = FALSE;
npcSprite->pos1.x = sprite->pos1.x + sprite->pos2.x;
npcSprite->pos1.y = sprite->pos1.y + sprite->pos2.y - 8;
npcSprite->pos2.x = 0;
npcSprite->pos2.y = 0;
}
+
if (sprite->data[2] >= 0x80)
- {
FieldEffectStop(sprite, FLDEFF_NPCFLY_OUT);
- }
}
+// Task data for Task_FlyOut/FlyIn
+#define tState data[0]
+#define tMonId data[1]
+#define tBirdSpriteId data[1] //re-used
+#define tTimer data[2]
+#define tAvatarFlags data[15]
+
+// Sprite data for the fly bird
+#define sPlayerSpriteId data[6]
+#define sAnimCompleted data[7]
+
u8 FldEff_UseFly(void)
{
- u8 taskId = CreateTask(sub_80B91D4, 0xfe);
- gTasks[taskId].data[1] = gFieldEffectArguments[0];
+ u8 taskId = CreateTask(Task_FlyOut, 254);
+ gTasks[taskId].tMonId = gFieldEffectArguments[0];
return 0;
}
-void (*const gUnknown_0855C4F4[])(struct Task *) = {
- sub_80B9204,
- sub_80B925C,
- sub_80B92A0,
- sub_80B92F8,
- sub_80B933C,
- sub_80B9390,
- sub_80B9418,
- sub_80B9474,
- sub_80B9494,
+void (*const sFlyOutFieldEffectFuncs[])(struct Task *) = {
+ FlyOutFieldEffect_FieldMovePose,
+ FlyOutFieldEffect_ShowMon,
+ FlyOutFieldEffect_BirdLeaveBall,
+ FlyOutFieldEffect_WaitBirdLeave,
+ FlyOutFieldEffect_BirdSwoopDown,
+ FlyOutFieldEffect_JumpOnBird,
+ FlyOutFieldEffect_FlyOffWithBird,
+ FlyOutFieldEffect_WaitFlyOff,
+ FlyOutFieldEffect_End,
};
-static void sub_80B91D4(u8 taskId)
+static void Task_FlyOut(u8 taskId)
{
- gUnknown_0855C4F4[gTasks[taskId].data[0]](&gTasks[taskId]);
+ sFlyOutFieldEffectFuncs[gTasks[taskId].tState](&gTasks[taskId]);
}
-static void sub_80B9204(struct Task *task)
+static void FlyOutFieldEffect_FieldMovePose(struct Task *task)
{
struct ObjectEvent *objectEvent = &gObjectEvents[gPlayerAvatar.objectEventId];
if (!ObjectEventIsMovementOverridden(objectEvent) || ObjectEventClearHeldMovementIfFinished(objectEvent))
{
- task->data[15] = gPlayerAvatar.flags;
+ task->tAvatarFlags = gPlayerAvatar.flags;
gPlayerAvatar.preventStep = TRUE;
- SetPlayerAvatarStateMask(1);
- sub_808C114();
+ SetPlayerAvatarStateMask(PLAYER_AVATAR_FLAG_ON_FOOT);
+ SetPlayerAvatarFieldMove();
ObjectEventSetHeldMovement(objectEvent, MOVEMENT_ACTION_START_ANIM_IN_DIRECTION);
- task->data[0]++;
+ task->tState++;
}
}
-static void sub_80B925C(struct Task *task)
+static void FlyOutFieldEffect_ShowMon(struct Task *task)
{
struct ObjectEvent *objectEvent = &gObjectEvents[gPlayerAvatar.objectEventId];
if (ObjectEventClearHeldMovementIfFinished(objectEvent))
{
- task->data[0]++;
- gFieldEffectArguments[0] = task->data[1];
+ task->tState++;
+ gFieldEffectArguments[0] = task->tMonId;
FieldEffectStart(FLDEFF_FIELD_MOVE_SHOW_MON_INIT);
}
}
-static void sub_80B92A0(struct Task *task)
+static void FlyOutFieldEffect_BirdLeaveBall(struct Task *task)
{
if (!FieldEffectActiveListContains(FLDEFF_FIELD_MOVE_SHOW_MON))
{
struct ObjectEvent *objectEvent = &gObjectEvents[gPlayerAvatar.objectEventId];
- if (task->data[15] & 0x08)
+ if (task->tAvatarFlags & PLAYER_AVATAR_FLAG_SURFING)
{
- sub_81555AC(objectEvent->fieldEffectSpriteId, 2);
- sub_81555D8(objectEvent->fieldEffectSpriteId, 0);
+ SetSurfBobState(objectEvent->fieldEffectSpriteId, 2);
+ SetSurfBobWhileFlyingOutState(objectEvent->fieldEffectSpriteId, 0);
}
- task->data[1] = sub_80B94C4();
- task->data[0]++;
+ task->tBirdSpriteId = CreateFlyBirdSprite(); // Does "leave ball" animation by default
+ task->tState++;
}
}
-static void sub_80B92F8(struct Task *task)
+static void FlyOutFieldEffect_WaitBirdLeave(struct Task *task)
{
- if (sub_80B9508(task->data[1]))
+ if (GetFlyBirdAnimCompleted(task->tBirdSpriteId))
{
- task->data[0]++;
- task->data[2] = 16;
+ task->tState++;
+ task->tTimer = 16;
SetPlayerAvatarTransitionFlags(PLAYER_AVATAR_FLAG_ON_FOOT);
ObjectEventSetHeldMovement(&gObjectEvents[gPlayerAvatar.objectEventId], MOVEMENT_ACTION_FACE_LEFT);
}
}
-static void sub_80B933C(struct Task *task)
+static void FlyOutFieldEffect_BirdSwoopDown(struct Task *task)
{
struct ObjectEvent *objectEvent = &gObjectEvents[gPlayerAvatar.objectEventId];
- if ((task->data[2] == 0 || (--task->data[2]) == 0) && ObjectEventClearHeldMovementIfFinished(objectEvent))
+ if ((task->tTimer == 0 || (--task->tTimer) == 0) && ObjectEventClearHeldMovementIfFinished(objectEvent))
{
- task->data[0]++;
- PlaySE(SE_W019);
- sub_80B9524(task->data[1]);
+ task->tState++;
+ PlaySE(SE_M_FLY);
+ StartFlyBirdSwoopDown(task->tBirdSpriteId);
}
}
-static void sub_80B9390(struct Task *task)
+static void FlyOutFieldEffect_JumpOnBird(struct Task *task)
{
- if ((++task->data[2]) >= 8)
+ if ((++task->tTimer) >= 8)
{
struct ObjectEvent *objectEvent = &gObjectEvents[gPlayerAvatar.objectEventId];
- ObjectEventSetGraphicsId(objectEvent, GetPlayerAvatarGraphicsIdByStateId(0x03));
+ ObjectEventSetGraphicsId(objectEvent, GetPlayerAvatarGraphicsIdByStateId(PLAYER_AVATAR_STATE_SURFING));
StartSpriteAnim(&gSprites[objectEvent->spriteId], 0x16);
- objectEvent->inanimate = 1;
+ objectEvent->inanimate = TRUE;
ObjectEventSetHeldMovement(objectEvent, MOVEMENT_ACTION_JUMP_IN_PLACE_LEFT);
- if (task->data[15] & 0x08)
+ if (task->tAvatarFlags & PLAYER_AVATAR_FLAG_SURFING)
{
DestroySprite(&gSprites[objectEvent->fieldEffectSpriteId]);
}
- task->data[0]++;
- task->data[2] = 0;
+ task->tState++;
+ task->tTimer = 0;
}
}
-static void sub_80B9418(struct Task *task)
+static void FlyOutFieldEffect_FlyOffWithBird(struct Task *task)
{
- if ((++task->data[2]) >= 10)
+ if ((++task->tTimer) >= 10)
{
struct ObjectEvent *objectEvent = &gObjectEvents[gPlayerAvatar.objectEventId];
ObjectEventClearHeldMovementIfActive(objectEvent);
- objectEvent->inanimate = 0;
- objectEvent->hasShadow = 0;
- sub_80B9560(task->data[1], objectEvent->spriteId);
+ objectEvent->inanimate = FALSE;
+ objectEvent->hasShadow = FALSE;
+ SetFlyBirdPlayerSpriteId(task->tBirdSpriteId, objectEvent->spriteId);
CameraObjectReset2();
- task->data[0]++;
+ task->tState++;
}
}
-static void sub_80B9474(struct Task *task)
+static void FlyOutFieldEffect_WaitFlyOff(struct Task *task)
{
- if (sub_80B9508(task->data[1]))
+ if (GetFlyBirdAnimCompleted(task->tBirdSpriteId))
{
WarpFadeOutScreen();
- task->data[0]++;
+ task->tState++;
}
}
-static void sub_80B9494(struct Task *task)
+static void FlyOutFieldEffect_End(struct Task *task)
{
if (!gPaletteFade.active)
{
FieldEffectActiveListRemove(FLDEFF_USE_FLY);
- DestroyTask(FindTaskIdByFunc(sub_80B91D4));
+ DestroyTask(FindTaskIdByFunc(Task_FlyOut));
}
}
-static u8 sub_80B94C4(void)
+static u8 CreateFlyBirdSprite(void)
{
u8 spriteId;
struct Sprite *sprite;
- spriteId = CreateSprite(gFieldEffectObjectTemplatePointers[26], 0xff, 0xb4, 0x1);
+ spriteId = CreateSprite(gFieldEffectObjectTemplatePointers[FLDEFFOBJ_BIRD], 0xff, 0xb4, 0x1);
sprite = &gSprites[spriteId];
sprite->oam.paletteNum = 0;
sprite->oam.priority = 1;
- sprite->callback = sub_80B957C;
+ sprite->callback = SpriteCB_FlyBirdLeaveBall;
return spriteId;
}
-static u8 sub_80B9508(u8 spriteId)
+static u8 GetFlyBirdAnimCompleted(u8 spriteId)
{
- return gSprites[spriteId].data[7];
+ return gSprites[spriteId].sAnimCompleted;
}
-static void sub_80B9524(u8 spriteId)
+static void StartFlyBirdSwoopDown(u8 spriteId)
{
struct Sprite *sprite;
sprite = &gSprites[spriteId];
- sprite->callback = sub_80B963C;
- sprite->pos1.x = 0x78;
- sprite->pos1.y = 0x00;
+ sprite->callback = SpriteCB_FlyBirdSwoopDown;
+ sprite->pos1.x = DISPLAY_WIDTH / 2;
+ sprite->pos1.y = 0;
sprite->pos2.x = 0;
sprite->pos2.y = 0;
memset(&sprite->data[0], 0, 8 * sizeof(u16) /* zero all data cells */);
- sprite->data[6] = 0x40;
+ sprite->sPlayerSpriteId = MAX_SPRITES;
}
-static void sub_80B9560(u8 a0, u8 a1)
+static void SetFlyBirdPlayerSpriteId(u8 birdSpriteId, u8 playerSpriteId)
{
- gSprites[a0].data[6] = a1;
+ gSprites[birdSpriteId].sPlayerSpriteId = playerSpriteId;
}
-const union AffineAnimCmd SpriteAffineAnim_855C518[] = {
+static const union AffineAnimCmd sAffineAnim_FlyBirdLeaveBall[] = {
AFFINEANIMCMD_FRAME(8, 8, -30, 0),
AFFINEANIMCMD_FRAME(28, 28, 0, 30),
AFFINEANIMCMD_END
};
-const union AffineAnimCmd SpriteAffineAnim_855C530[] = {
+static const union AffineAnimCmd sAffineAnim_FlyBirdReturnToBall[] = {
AFFINEANIMCMD_FRAME(256, 256, 64, 0),
AFFINEANIMCMD_FRAME(-10, -10, 0, 22),
AFFINEANIMCMD_END
};
-const union AffineAnimCmd *const gSpriteAffineAnimTable_0855C548[] = {
- SpriteAffineAnim_855C518,
- SpriteAffineAnim_855C530
+static const union AffineAnimCmd *const sAffineAnims_FlyBird[] = {
+ sAffineAnim_FlyBirdLeaveBall,
+ sAffineAnim_FlyBirdReturnToBall
};
-static void sub_80B957C(struct Sprite *sprite)
+static void SpriteCB_FlyBirdLeaveBall(struct Sprite *sprite)
{
- if (sprite->data[7] == 0)
+ if (sprite->sAnimCompleted == FALSE)
{
if (sprite->data[0] == 0)
{
sprite->oam.affineMode = ST_OAM_AFFINE_DOUBLE;
- sprite->affineAnims = gSpriteAffineAnimTable_0855C548;
+ sprite->affineAnims = sAffineAnims_FlyBird;
InitSpriteAffineAnim(sprite);
StartSpriteAffineAnim(sprite, 0);
sprite->pos1.x = 0x76;
@@ -3229,7 +3360,7 @@ static void sub_80B957C(struct Sprite *sprite)
}
if (sprite->data[1] > 0x81)
{
- sprite->data[7]++;
+ sprite->sAnimCompleted++;
sprite->oam.affineMode = ST_OAM_AFFINE_OFF;
FreeOamMatrix(sprite->oam.matrixNum);
CalcCenterToCornerVec(sprite, sprite->oam.shape, sprite->oam.size, ST_OAM_AFFINE_OFF);
@@ -3237,15 +3368,15 @@ static void sub_80B957C(struct Sprite *sprite)
}
}
-static void sub_80B963C(struct Sprite *sprite)
+static void SpriteCB_FlyBirdSwoopDown(struct Sprite *sprite)
{
sprite->pos2.x = Cos(sprite->data[2], 0x8c);
sprite->pos2.y = Sin(sprite->data[2], 0x48);
sprite->data[2] = (sprite->data[2] + 4) & 0xff;
- if (sprite->data[6] != MAX_SPRITES)
+ if (sprite->sPlayerSpriteId != MAX_SPRITES)
{
- struct Sprite *sprite1 = &gSprites[sprite->data[6]];
- sprite1->coordOffsetEnabled = 0;
+ struct Sprite *sprite1 = &gSprites[sprite->sPlayerSpriteId];
+ sprite1->coordOffsetEnabled = FALSE;
sprite1->pos1.x = sprite->pos1.x + sprite->pos2.x;
sprite1->pos1.y = sprite->pos1.y + sprite->pos2.y - 8;
sprite1->pos2.x = 0;
@@ -3253,18 +3384,18 @@ static void sub_80B963C(struct Sprite *sprite)
}
if (sprite->data[2] >= 0x80)
{
- sprite->data[7] = 1;
+ sprite->sAnimCompleted = TRUE;
}
}
-void sub_80B96B0(struct Sprite *sprite)
+static void SpriteCB_FlyBirdReturnToBall(struct Sprite *sprite)
{
- if (sprite->data[7] == 0)
+ if (sprite->sAnimCompleted == FALSE)
{
if (sprite->data[0] == 0)
{
sprite->oam.affineMode = ST_OAM_AFFINE_DOUBLE;
- sprite->affineAnims = gSpriteAffineAnimTable_0855C548;
+ sprite->affineAnims = sAffineAnims_FlyBird;
InitSpriteAffineAnim(sprite);
StartSpriteAffineAnim(sprite, 1);
sprite->pos1.x = 0x5e;
@@ -3293,7 +3424,7 @@ void sub_80B96B0(struct Sprite *sprite)
}
if (sprite->data[3] >= 60)
{
- sprite->data[7]++;
+ sprite->sAnimCompleted++;
sprite->oam.affineMode = ST_OAM_AFFINE_OFF;
FreeOamMatrix(sprite->oam.matrixNum);
sprite->invisible = TRUE;
@@ -3301,80 +3432,80 @@ void sub_80B96B0(struct Sprite *sprite)
}
}
-void sub_80B9794(u8 spriteId)
+static void StartFlyBirdReturnToBall(u8 spriteId)
{
- sub_80B9524(spriteId);
- gSprites[spriteId].callback = sub_80B96B0;
+ StartFlyBirdSwoopDown(spriteId); // Set up is the same, but overrwrites the callback below
+ gSprites[spriteId].callback = SpriteCB_FlyBirdReturnToBall;
}
u8 FldEff_FlyIn(void)
{
- CreateTask(sub_80B97D4, 0xfe);
+ CreateTask(Task_FlyIn, 254);
return 0;
}
-void (*const gUnknown_0855C550[])(struct Task *) = {
- sub_80B9804,
- sub_80B98B8,
- sub_80B9924,
- sub_80B9978,
- sub_80B99F0,
- sub_80B9A28,
- sub_80B9A60,
+void (*const sFlyInFieldEffectFuncs[])(struct Task *) = {
+ FlyInFieldEffect_BirdSwoopDown,
+ FlyInFieldEffect_FlyInWithBird,
+ FlyInFieldEffect_JumpOffBird,
+ FlyInFieldEffect_FieldMovePose,
+ FlyInFieldEffect_BirdReturnToBall,
+ FlyInFieldEffect_WaitBirdReturn,
+ FlyInFieldEffect_End,
};
-static void sub_80B97D4(u8 taskId)
+static void Task_FlyIn(u8 taskId)
{
- gUnknown_0855C550[gTasks[taskId].data[0]](&gTasks[taskId]);
+ sFlyInFieldEffectFuncs[gTasks[taskId].tState](&gTasks[taskId]);
}
-static void sub_80B9804(struct Task *task)
+static void FlyInFieldEffect_BirdSwoopDown(struct Task *task)
{
struct ObjectEvent *objectEvent;
objectEvent = &gObjectEvents[gPlayerAvatar.objectEventId];
if (!ObjectEventIsMovementOverridden(objectEvent) || ObjectEventClearHeldMovementIfFinished(objectEvent))
{
- task->data[0]++;
- task->data[2] = 17;
- task->data[15] = gPlayerAvatar.flags;
+ task->tState++;
+ task->tTimer = 17;
+ task->tAvatarFlags = gPlayerAvatar.flags;
gPlayerAvatar.preventStep = TRUE;
- SetPlayerAvatarStateMask(0x01);
- if (task->data[15] & 0x08)
+ SetPlayerAvatarStateMask(PLAYER_AVATAR_FLAG_ON_FOOT);
+ if (task->tAvatarFlags & PLAYER_AVATAR_FLAG_SURFING)
{
- sub_81555AC(objectEvent->fieldEffectSpriteId, 0);
+ SetSurfBobState(objectEvent->fieldEffectSpriteId, 0);
}
- ObjectEventSetGraphicsId(objectEvent, GetPlayerAvatarGraphicsIdByStateId(0x3));
+ ObjectEventSetGraphicsId(objectEvent, GetPlayerAvatarGraphicsIdByStateId(PLAYER_AVATAR_STATE_SURFING));
CameraObjectReset2();
ObjectEventTurn(objectEvent, DIR_WEST);
StartSpriteAnim(&gSprites[objectEvent->spriteId], 0x16);
objectEvent->invisible = FALSE;
- task->data[1] = sub_80B94C4();
- sub_80B9524(task->data[1]);
- sub_80B9560(task->data[1], objectEvent->spriteId);
+ task->tBirdSpriteId = CreateFlyBirdSprite();
+ StartFlyBirdSwoopDown(task->tBirdSpriteId);
+ SetFlyBirdPlayerSpriteId(task->tBirdSpriteId, objectEvent->spriteId);
}
}
-static void sub_80B98B8(struct Task *task)
+static void FlyInFieldEffect_FlyInWithBird(struct Task *task)
{
struct ObjectEvent *objectEvent;
struct Sprite *sprite;
- if (task->data[2] == 0 || (--task->data[2]) == 0)
+ if (task->tTimer == 0 || (--task->tTimer) == 0)
{
objectEvent = &gObjectEvents[gPlayerAvatar.objectEventId];
sprite = &gSprites[objectEvent->spriteId];
- sub_80B9560(task->data[1], 0x40);
+ SetFlyBirdPlayerSpriteId(task->tBirdSpriteId, MAX_SPRITES);
sprite->pos1.x += sprite->pos2.x;
sprite->pos1.y += sprite->pos2.y;
sprite->pos2.x = 0;
sprite->pos2.y = 0;
- task->data[0]++;
- task->data[2] = 0;
+ task->tState++;
+ task->tTimer = 0;
}
}
-static void sub_80B9924(struct Task *task)
+static void FlyInFieldEffect_JumpOffBird(struct Task *task)
{
- s16 unknown_0855C56C[18] = {
+ s16 sYPositions[18] = {
-2,
-4,
-5,
@@ -3395,227 +3526,257 @@ static void sub_80B9924(struct Task *task)
8
};
struct Sprite *sprite = &gSprites[gPlayerAvatar.spriteId];
- sprite->pos2.y = unknown_0855C56C[task->data[2]];
- if ((++task->data[2]) >= 18)
- {
- task->data[0]++;
- }
+ sprite->pos2.y = sYPositions[task->tTimer];
+
+ if ((++task->tTimer) >= (int)ARRAY_COUNT(sYPositions))
+ task->tState++;
}
-static void sub_80B9978(struct Task *task)
+static void FlyInFieldEffect_FieldMovePose(struct Task *task)
{
struct ObjectEvent *objectEvent;
struct Sprite *sprite;
- if (sub_80B9508(task->data[1]))
+ if (GetFlyBirdAnimCompleted(task->tBirdSpriteId))
{
objectEvent = &gObjectEvents[gPlayerAvatar.objectEventId];
sprite = &gSprites[objectEvent->spriteId];
- objectEvent->inanimate = 0;
+ objectEvent->inanimate = FALSE;
MoveObjectEventToMapCoords(objectEvent, objectEvent->currentCoords.x, objectEvent->currentCoords.y);
sprite->pos2.x = 0;
sprite->pos2.y = 0;
- sprite->coordOffsetEnabled = 1;
- sub_808C114();
+ sprite->coordOffsetEnabled = TRUE;
+ SetPlayerAvatarFieldMove();
ObjectEventSetHeldMovement(objectEvent, MOVEMENT_ACTION_START_ANIM_IN_DIRECTION);
- task->data[0]++;
+ task->tState++;
}
}
-static void sub_80B99F0(struct Task *task)
+static void FlyInFieldEffect_BirdReturnToBall(struct Task *task)
{
if (ObjectEventClearHeldMovementIfFinished(&gObjectEvents[gPlayerAvatar.objectEventId]))
{
- task->data[0]++;
- sub_80B9794(task->data[1]);
+ task->tState++;
+ StartFlyBirdReturnToBall(task->tBirdSpriteId);
}
}
-static void sub_80B9A28(struct Task *task)
+static void FlyInFieldEffect_WaitBirdReturn(struct Task *task)
{
- if (sub_80B9508(task->data[1]))
+ if (GetFlyBirdAnimCompleted(task->tBirdSpriteId))
{
- DestroySprite(&gSprites[task->data[1]]);
- task->data[0]++;
- task->data[1] = 0x10;
+ DestroySprite(&gSprites[task->tBirdSpriteId]);
+ task->tState++;
+ task->data[1] = 16;
}
}
-static void sub_80B9A60(struct Task *task)
+static void FlyInFieldEffect_End(struct Task *task)
{
u8 state;
struct ObjectEvent *objectEvent;
if ((--task->data[1]) == 0)
{
objectEvent = &gObjectEvents[gPlayerAvatar.objectEventId];
- state = 0;
- if (task->data[15] & 0x08)
+ state = PLAYER_AVATAR_STATE_NORMAL;
+ if (task->tAvatarFlags & PLAYER_AVATAR_FLAG_SURFING)
{
- state = 3;
- sub_81555AC(objectEvent->fieldEffectSpriteId, 1);
+ state = PLAYER_AVATAR_STATE_SURFING;
+ SetSurfBobState(objectEvent->fieldEffectSpriteId, 1);
}
ObjectEventSetGraphicsId(objectEvent, GetPlayerAvatarGraphicsIdByStateId(state));
ObjectEventTurn(objectEvent, DIR_SOUTH);
- gPlayerAvatar.flags = task->data[15];
+ gPlayerAvatar.flags = task->tAvatarFlags;
gPlayerAvatar.preventStep = FALSE;
FieldEffectActiveListRemove(FLDEFF_FLY_IN);
- DestroyTask(FindTaskIdByFunc(sub_80B97D4));
+ DestroyTask(FindTaskIdByFunc(Task_FlyIn));
}
}
-bool8 sub_80B9ADC(void)
+#undef tState
+#undef tMonId
+#undef tBirdSpriteId
+#undef tTimer
+#undef tAvatarFlags
+#undef sPlayerSpriteId
+#undef sAnimCompleted
+
+#define tState data[1]
+#define tObjectEventId data[2]
+#define tTimer data[3]
+#define tCameraTaskId data[5]
+#define tLocalId data[6]
+#define tMapNum data[7]
+#define tMapGroup data[8]
+
+bool8 FldEff_DestroyDeoxysRock(void)
{
u8 taskId;
- u8 objectEventIdBuffer;
- if (!TryGetObjectEventIdByLocalIdAndMap(gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2], &objectEventIdBuffer))
+ u8 objectEventId;
+ if (!TryGetObjectEventIdByLocalIdAndMap(gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2], &objectEventId))
{
- taskId = CreateTask(sub_80B9BE8, 0x50);
- gTasks[taskId].data[2] = objectEventIdBuffer;
- gTasks[taskId].data[6] = gFieldEffectArguments[0];
- gTasks[taskId].data[7] = gFieldEffectArguments[1];
- gTasks[taskId].data[8] = gFieldEffectArguments[2];
+ taskId = CreateTask(Task_DestroyDeoxysRock, 80);
+ gTasks[taskId].tObjectEventId = objectEventId;
+ gTasks[taskId].tLocalId = gFieldEffectArguments[0];
+ gTasks[taskId].tMapNum = gFieldEffectArguments[1];
+ gTasks[taskId].tMapGroup = gFieldEffectArguments[2];
}
else
{
- FieldEffectActiveListRemove(0x41);
+ FieldEffectActiveListRemove(FLDEFF_DESTROY_DEOXYS_ROCK);
}
return FALSE;
}
-void sub_80B9B3C(u8 taskId)
+#define tShakeDelay data[0]
+#define tShakeUp data[1]
+#define tShake data[5]
+#define tEndDelay data[6]
+#define tEnding data[7]
+
+static void Task_DeoxysRockCameraShake(u8 taskId)
{
s16 *data = gTasks[taskId].data;
- if (data[7] != 0)
+ if (tEnding)
{
- if (++data[6] > 20)
+ if (++tEndDelay > 20)
{
- data[6] = 0;
- if (data[5] != 0)
- data[5]--;
+ tEndDelay = 0;
+ if (tShake != 0)
+ tShake--;
}
}
else
{
- data[5] = 4;
+ tShake = 4;
}
- if (++data[0] > 1)
+ if (++tShakeDelay > 1)
{
- data[0] = 0;
- if (++data[1] & 1)
- {
- SetCameraPanning(0, -data[5]);
- }
+ tShakeDelay = 0;
+
+ if (++tShakeUp & 1)
+ SetCameraPanning(0, -tShake);
else
- {
- SetCameraPanning(0, data[5]);
- }
+ SetCameraPanning(0, tShake);
}
UpdateCameraPanning();
- if (data[5] == 0)
+ if (tShake == 0)
DestroyTask(taskId);
}
-void sub_80B9BD0(u8 taskId)
+static void StartEndingDeoxysRockCameraShake(u8 taskId)
{
- gTasks[taskId].data[7] = 1;
+ gTasks[taskId].tEnding = TRUE;
}
-void (*const gUnknown_0855C590[])(s16*, u8) = {
- sub_80B9C28,
- sub_80B9C54,
- sub_80B9CDC,
+#undef tShakeDelay
+#undef tShakeUp
+#undef tShake
+#undef tEndDelay
+#undef tEnding
+
+void (*const sDestroyDeoxysRockEffectFuncs[])(s16*, u8) = {
+ DestroyDeoxysRockEffect_CameraShake,
+ DestroyDeoxysRockEffect_RockFragments,
+ DestroyDeoxysRockEffect_WaitAndEnd,
};
-static void sub_80B9BE8(u8 taskId)
+static void Task_DestroyDeoxysRock(u8 taskId)
{
s16 *data = gTasks[taskId].data;
InstallCameraPanAheadCallback();
SetCameraPanningCallback(0);
- gUnknown_0855C590[data[1]](data, taskId);
+ sDestroyDeoxysRockEffectFuncs[tState](data, taskId);
}
-void sub_80B9C28(s16* data, u8 taskId)
+static void DestroyDeoxysRockEffect_CameraShake(s16* data, u8 taskId)
{
- u8 newTaskId = CreateTask(sub_80B9B3C, 0x5A);
- PlaySE(SE_T_KAMI2);
- data[5] = newTaskId;
- data[1]++;
+ u8 newTaskId = CreateTask(Task_DeoxysRockCameraShake, 90);
+ PlaySE(SE_THUNDER2);
+ tCameraTaskId = newTaskId;
+ tState++;
}
-void sub_80B9D24(struct Sprite*);
-
-void sub_80B9C54(s16* data, u8 taskId)
+static void DestroyDeoxysRockEffect_RockFragments(s16* data, u8 taskId)
{
- if (++data[3] > 0x78)
+ if (++tTimer > 120)
{
- struct Sprite *sprite = &gSprites[gObjectEvents[data[2]].spriteId];
- gObjectEvents[data[2]].invisible = TRUE;
+ struct Sprite *sprite = &gSprites[gObjectEvents[tObjectEventId].spriteId];
+ gObjectEvents[tObjectEventId].invisible = TRUE;
BlendPalettes(0x0000FFFF, 0x10, RGB_WHITE);
BeginNormalPaletteFade(0x0000FFFF, 0, 0x10, 0, RGB_WHITE);
- sub_80B9D24(sprite);
- PlaySE(SE_T_KAMI);
- sub_80B9BD0(data[5]);
- data[3] = 0;
- data[1]++;
+ CreateDeoxysRockFragments(sprite);
+ PlaySE(SE_THUNDER);
+ StartEndingDeoxysRockCameraShake(tCameraTaskId);
+ tTimer = 0;
+ tState++;
}
}
-void sub_80B9CDC(s16* a0, u8 taskId)
+static void DestroyDeoxysRockEffect_WaitAndEnd(s16* data, u8 taskId)
{
- if (!gPaletteFade.active && !FuncIsActiveTask(sub_80B9B3C))
+ if (!gPaletteFade.active && !FuncIsActiveTask(Task_DeoxysRockCameraShake))
{
InstallCameraPanAheadCallback();
- RemoveObjectEventByLocalIdAndMap(a0[6], a0[7], a0[8]);
- FieldEffectActiveListRemove(0x41);
+ RemoveObjectEventByLocalIdAndMap(tLocalId, tMapNum, tMapGroup);
+ FieldEffectActiveListRemove(FLDEFF_DESTROY_DEOXYS_ROCK);
DestroyTask(taskId);
}
}
-const struct SpriteFrameImage gSpriteImageTable_855C59C[] = {
- obj_frame_tiles(gUnknown_0855C170),
- obj_frame_tiles(gUnknown_0855C190),
- obj_frame_tiles(gUnknown_0855C1B0),
- obj_frame_tiles(gUnknown_0855C1D0),
+#undef tState
+#undef tObjectEventId
+#undef tTimer
+#undef tCameraTaskId
+#undef tLocalId
+#undef tMapNum
+#undef tMapGroup
+
+static const struct SpriteFrameImage sImages_DeoxysRockFragment[] = {
+ obj_frame_tiles(sRockFragment_TopLeft),
+ obj_frame_tiles(sRockFragment_TopRight),
+ obj_frame_tiles(sRockFragment_BottomLeft),
+ obj_frame_tiles(sRockFragment_BottomRight),
};
-const union AnimCmd gSpriteAnim_855C5BC[] = {
+static const union AnimCmd sAnim_RockFragment_TopLeft[] = {
ANIMCMD_FRAME(.imageValue = 0),
ANIMCMD_END
};
-const union AnimCmd gSpriteAnim_855C5C4[] = {
+static const union AnimCmd sAnim_RockFragment_TopRight[] = {
ANIMCMD_FRAME(.imageValue = 1),
ANIMCMD_END
};
-const union AnimCmd gSpriteAnim_855C5CC[] = {
+static const union AnimCmd sAnim_RockFragment_BottomLeft[] = {
ANIMCMD_FRAME(.imageValue = 2),
ANIMCMD_END
};
-const union AnimCmd gSpriteAnim_855C5D4[] = {
+static const union AnimCmd sAnim_RockFragment_BottomRight[] = {
ANIMCMD_FRAME(.imageValue = 3),
ANIMCMD_END
};
-const union AnimCmd *const gSpriteAnimTable_855C5DC[] = {
- gSpriteAnim_855C5BC,
- gSpriteAnim_855C5C4,
- gSpriteAnim_855C5CC,
- gSpriteAnim_855C5D4,
+static const union AnimCmd *const sAnims_DeoxysRockFragment[] = {
+ sAnim_RockFragment_TopLeft,
+ sAnim_RockFragment_TopRight,
+ sAnim_RockFragment_BottomLeft,
+ sAnim_RockFragment_BottomRight,
};
-const struct SpriteTemplate gUnknown_0855C5EC = {
+static const struct SpriteTemplate sSpriteTemplate_DeoxysRockFragment = {
.tileTag = 0xFFFF,
.paletteTag = 4378,
- .oam = &gOamData_855C218,
- .anims = gSpriteAnimTable_855C5DC,
- .images = gSpriteImageTable_855C59C,
+ .oam = &sOam_8x8,
+ .anims = sAnims_DeoxysRockFragment,
+ .images = sImages_DeoxysRockFragment,
.affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_80B9DB8
+ .callback = SpriteCB_DeoxysRockFragment
};
-void sub_80B9D24(struct Sprite* sprite)
+static void CreateDeoxysRockFragments(struct Sprite* sprite)
{
int i;
int xPos = (s16)gTotalCameraPixelOffsetX + sprite->pos1.x + sprite->pos2.x;
@@ -3623,7 +3784,7 @@ void sub_80B9D24(struct Sprite* sprite)
for (i = 0; i < 4; i++)
{
- u8 spriteId = CreateSprite(&gUnknown_0855C5EC, xPos, yPos, 0);
+ u8 spriteId = CreateSprite(&sSpriteTemplate_DeoxysRockFragment, xPos, yPos, 0);
if (spriteId != MAX_SPRITES)
{
StartSpriteAnim(&gSprites[spriteId], i);
@@ -3633,8 +3794,9 @@ void sub_80B9D24(struct Sprite* sprite)
}
}
-static void sub_80B9DB8(struct Sprite* sprite)
+static void SpriteCB_DeoxysRockFragment(struct Sprite* sprite)
{
+ // 1 case for each fragment, fly off in 4 different directions
switch (sprite->data[0])
{
case 0:
@@ -3654,11 +3816,11 @@ static void sub_80B9DB8(struct Sprite* sprite)
sprite->pos1.y += 12;
break;
}
- if ((u16)(sprite->pos1.x + 4) > 0xF8 || sprite->pos1.y < -4 || sprite->pos1.y > 0xA4)
+ if ((u16)(sprite->pos1.x + 4) > DISPLAY_WIDTH + 8 || sprite->pos1.y < -4 || sprite->pos1.y > DISPLAY_HEIGHT + 4)
DestroySprite(sprite);
}
-bool8 Fldeff_MoveDeoxysRock(struct Sprite* sprite)
+bool8 FldEff_MoveDeoxysRock(struct Sprite* sprite)
{
u8 objectEventIdBuffer;
if (!TryGetObjectEventIdByLocalIdAndMap(gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2], &objectEventIdBuffer))
@@ -3672,7 +3834,7 @@ bool8 Fldeff_MoveDeoxysRock(struct Sprite* sprite)
xPos = (gFieldEffectArguments[3] - xPos) * 16;
yPos = (gFieldEffectArguments[4] - yPos) * 16;
ShiftObjectEventCoords(object, gFieldEffectArguments[3] + 7, gFieldEffectArguments[4] + 7);
- taskId = CreateTask(Fldeff_MoveDeoxysRock_Step, 0x50);
+ taskId = CreateTask(Task_MoveDeoxysRock, 80);
gTasks[taskId].data[1] = object->spriteId;
gTasks[taskId].data[2] = gSprites[object->spriteId].pos1.x + xPos;
gTasks[taskId].data[3] = gSprites[object->spriteId].pos1.y + yPos;
@@ -3682,7 +3844,7 @@ bool8 Fldeff_MoveDeoxysRock(struct Sprite* sprite)
return FALSE;
}
-static void Fldeff_MoveDeoxysRock_Step(u8 taskId)
+static void Task_MoveDeoxysRock(u8 taskId)
{
// BUG: Possible divide by zero
s16 *data = gTasks[taskId].data;
@@ -3711,7 +3873,7 @@ static void Fldeff_MoveDeoxysRock_Step(u8 taskId)
sprite->pos1.y = data[3];
ShiftStillObjectEventCoords(object);
object->triggerGroundEffectsOnStop = TRUE;
- FieldEffectActiveListRemove(0x42);
+ FieldEffectActiveListRemove(FLDEFF_MOVE_DEOXYS_ROCK);
DestroyTask(taskId);
}
break;
diff --git a/src/field_effect_helpers.c b/src/field_effect_helpers.c
index 52c30ab0f..886e023d1 100755
--- a/src/field_effect_helpers.c
+++ b/src/field_effect_helpers.c
@@ -166,7 +166,7 @@ u8 CreateWarpArrowSprite(void)
u8 spriteId;
struct Sprite *sprite;
- spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[8], 0, 0, 0x52);
+ spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[FLDEFFOBJ_ARROW], 0, 0, 0x52);
if (spriteId != MAX_SPRITES)
{
sprite = &gSprites[spriteId];
@@ -202,11 +202,11 @@ void ShowWarpArrowSprite(u8 spriteId, u8 direction, s16 x, s16 y)
}
}
-const u8 gShadowEffectTemplateIds[] = {
- 0,
- 1,
- 2,
- 3
+static const u8 sShadowEffectTemplateIds[] = {
+ FLDEFFOBJ_SHADOW_S,
+ FLDEFFOBJ_SHADOW_M,
+ FLDEFFOBJ_SHADOW_L,
+ FLDEFFOBJ_SHADOW_XL
};
const u16 gShadowVerticalOffsets[] = {
@@ -224,7 +224,7 @@ u32 FldEff_Shadow(void)
objectEventId = GetObjectEventIdByLocalIdAndMap(gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2]);
graphicsInfo = GetObjectEventGraphicsInfo(gObjectEvents[objectEventId].graphicsId);
- spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[gShadowEffectTemplateIds[graphicsInfo->shadowSize]], 0, 0, 0x94);
+ spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[sShadowEffectTemplateIds[graphicsInfo->shadowSize]], 0, 0, 0x94);
if (spriteId != MAX_SPRITES)
{
gSprites[spriteId].coordOffsetEnabled = TRUE;
@@ -274,8 +274,8 @@ u32 FldEff_TallGrass(void)
x = gFieldEffectArguments[0];
y = gFieldEffectArguments[1];
- sub_80930E0(&x, &y, 8, 8);
- spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[4], x, y, 0);
+ SetSpritePosToOffsetMapCoords(&x, &y, 8, 8);
+ spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[FLDEFFOBJ_TALL_GRASS], x, y, 0);
if (spriteId != MAX_SPRITES)
{
sprite = &gSprites[spriteId];
@@ -340,15 +340,15 @@ u32 FldEff_JumpTallGrass(void)
u8 spriteId;
struct Sprite *sprite;
- sub_80930E0((s16 *)&gFieldEffectArguments[0], (s16 *)&gFieldEffectArguments[1], 8, 12);
- spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[10], gFieldEffectArguments[0], gFieldEffectArguments[1], 0);
+ SetSpritePosToOffsetMapCoords((s16 *)&gFieldEffectArguments[0], (s16 *)&gFieldEffectArguments[1], 8, 12);
+ spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[FLDEFFOBJ_JUMP_TALL_GRASS], gFieldEffectArguments[0], gFieldEffectArguments[1], 0);
if (spriteId != MAX_SPRITES)
{
sprite = &gSprites[spriteId];
sprite->coordOffsetEnabled = TRUE;
sprite->oam.priority = gFieldEffectArguments[3];
sprite->data[0] = gFieldEffectArguments[2];
- sprite->data[1] = 12;
+ sprite->data[1] = FLDEFF_JUMP_TALL_GRASS;
}
return 0;
}
@@ -380,8 +380,8 @@ u32 FldEff_LongGrass(void)
x = gFieldEffectArguments[0];
y = gFieldEffectArguments[1];
- sub_80930E0(&x, &y, 8, 8);
- spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[15], x, y, 0);
+ SetSpritePosToOffsetMapCoords(&x, &y, 8, 8);
+ spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[FLDEFFOBJ_LONG_GRASS], x, y, 0);
if (spriteId != MAX_SPRITES)
{
sprite = &gSprites[spriteId];
@@ -443,15 +443,15 @@ u32 FldEff_JumpLongGrass(void)
u8 spriteId;
struct Sprite *sprite;
- sub_80930E0((s16 *)&gFieldEffectArguments[0], (s16 *)&gFieldEffectArguments[1], 8, 8);
- spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[16], gFieldEffectArguments[0], gFieldEffectArguments[1], 0);
+ SetSpritePosToOffsetMapCoords((s16 *)&gFieldEffectArguments[0], (s16 *)&gFieldEffectArguments[1], 8, 8);
+ spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[FLDEFFOBJ_JUMP_LONG_GRASS], gFieldEffectArguments[0], gFieldEffectArguments[1], 0);
if (spriteId != MAX_SPRITES)
{
sprite = &gSprites[spriteId];
sprite->coordOffsetEnabled = TRUE;
sprite->oam.priority = gFieldEffectArguments[3];
sprite->data[0] = gFieldEffectArguments[2];
- sprite->data[1] = 18;
+ sprite->data[1] = FLDEFF_JUMP_LONG_GRASS;
}
return 0;
}
@@ -465,7 +465,7 @@ u32 FldEff_ShortGrass(void)
objectEventId = GetObjectEventIdByLocalIdAndMap(gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2]);
objectEvent = &gObjectEvents[objectEventId];
- spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[30], 0, 0, 0);
+ spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[FLDEFFOBJ_SHORT_GRASS], 0, 0, 0);
if (spriteId != MAX_SPRITES)
{
sprite = &(gSprites[spriteId]);
@@ -521,8 +521,8 @@ u32 FldEff_SandFootprints(void)
u8 spriteId;
struct Sprite *sprite;
- sub_80930E0((s16 *)&gFieldEffectArguments[0], (s16 *)&gFieldEffectArguments[1], 8, 8);
- spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[11], gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2]);
+ SetSpritePosToOffsetMapCoords((s16 *)&gFieldEffectArguments[0], (s16 *)&gFieldEffectArguments[1], 8, 8);
+ spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[FLDEFFOBJ_SAND_FOOTPRINTS], gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2]);
if (spriteId != MAX_SPRITES)
{
sprite = &gSprites[spriteId];
@@ -539,8 +539,8 @@ u32 FldEff_DeepSandFootprints(void)
u8 spriteId;
struct Sprite *sprite;
- sub_80930E0((s16 *)&gFieldEffectArguments[0], (s16 *)&gFieldEffectArguments[1], 8, 8);
- spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[23], gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2]);
+ SetSpritePosToOffsetMapCoords((s16 *)&gFieldEffectArguments[0], (s16 *)&gFieldEffectArguments[1], 8, 8);
+ spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[FLDEFFOBJ_DEEP_SAND_FOOTPRINTS], gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2]);
if (spriteId != MAX_SPRITES)
{
sprite = &gSprites[spriteId];
@@ -557,8 +557,8 @@ u32 FldEff_BikeTireTracks(void)
u8 spriteId;
struct Sprite *sprite;
- sub_80930E0((s16 *)&gFieldEffectArguments[0], (s16 *)&gFieldEffectArguments[1], 8, 8);
- spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[27], gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2]);
+ SetSpritePosToOffsetMapCoords((s16 *)&gFieldEffectArguments[0], (s16 *)&gFieldEffectArguments[1], 8, 8);
+ spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[FLDEFFOBJ_BIKE_TIRE_TRACKS], gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2]);
if (spriteId != MAX_SPRITES)
{
sprite = &gSprites[spriteId];
@@ -611,7 +611,7 @@ u32 FldEff_Splash(void)
objectEventId = GetObjectEventIdByLocalIdAndMap(gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2]);
objectEvent = &gObjectEvents[objectEventId];
- spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[13], 0, 0, 0);
+ spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[FLDEFFOBJ_SPLASH], 0, 0, 0);
if (spriteId != MAX_SPRITES)
{
graphicsInfo = GetObjectEventGraphicsInfo(objectEvent->graphicsId);
@@ -623,7 +623,7 @@ u32 FldEff_Splash(void)
sprite->data[1] = gFieldEffectArguments[1];
sprite->data[2] = gFieldEffectArguments[2];
sprite->pos2.y = (graphicsInfo->height >> 1) - 4;
- PlaySE(SE_MIZU);
+ PlaySE(SE_PUDDLE);
}
return 0;
}
@@ -649,8 +649,8 @@ u32 FldEff_JumpSmallSplash(void)
u8 spriteId;
struct Sprite *sprite;
- sub_80930E0((s16 *)&gFieldEffectArguments[0], (s16 *)&gFieldEffectArguments[1], 8, 12);
- spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[14], gFieldEffectArguments[0], gFieldEffectArguments[1], 0);
+ SetSpritePosToOffsetMapCoords((s16 *)&gFieldEffectArguments[0], (s16 *)&gFieldEffectArguments[1], 8, 12);
+ spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[FLDEFFOBJ_JUMP_SMALL_SPLASH], gFieldEffectArguments[0], gFieldEffectArguments[1], 0);
if (spriteId != MAX_SPRITES)
{
sprite = &gSprites[spriteId];
@@ -667,8 +667,8 @@ u32 FldEff_JumpBigSplash(void)
u8 spriteId;
struct Sprite *sprite;
- sub_80930E0((s16 *)&gFieldEffectArguments[0], (s16 *)&gFieldEffectArguments[1], 8, 8);
- spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[12], gFieldEffectArguments[0], gFieldEffectArguments[1], 0);
+ SetSpritePosToOffsetMapCoords((s16 *)&gFieldEffectArguments[0], (s16 *)&gFieldEffectArguments[1], 8, 8);
+ spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[FLDEFFOBJ_JUMP_BIG_SPLASH], gFieldEffectArguments[0], gFieldEffectArguments[1], 0);
if (spriteId != MAX_SPRITES)
{
sprite = &gSprites[spriteId];
@@ -690,7 +690,7 @@ u32 FldEff_FeetInFlowingWater(void)
objectEventId = GetObjectEventIdByLocalIdAndMap(gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2]);
objectEvent = &gObjectEvents[objectEventId];
- spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[13], 0, 0, 0);
+ spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[FLDEFFOBJ_SPLASH], 0, 0, 0);
if (spriteId != MAX_SPRITES)
{
graphicsInfo = GetObjectEventGraphicsInfo(objectEvent->graphicsId);
@@ -733,7 +733,7 @@ static void UpdateFeetInFlowingWaterFieldEffect(struct Sprite *sprite)
sprite->data[4] = objectEvent->currentCoords.y;
if (!sprite->invisible)
{
- PlaySE(SE_MIZU);
+ PlaySE(SE_PUDDLE);
}
}
}
@@ -744,7 +744,7 @@ u32 FldEff_Ripple(void)
u8 spriteId;
struct Sprite *sprite;
- spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[5], gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2]);
+ spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[FLDEFFOBJ_RIPPLE], gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2]);
if (spriteId != MAX_SPRITES)
{
sprite = &gSprites[spriteId];
@@ -764,7 +764,7 @@ u32 FldEff_HotSpringsWater(void)
objectEventId = GetObjectEventIdByLocalIdAndMap(gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2]);
objectEvent = &gObjectEvents[objectEventId];
- spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[31], 0, 0, 0);
+ spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[FLDEFFOBJ_HOT_SPRINGS_WATER], 0, 0, 0);
if (spriteId != MAX_SPRITES)
{
sprite = &gSprites[spriteId];
@@ -800,70 +800,70 @@ void UpdateHotSpringsWaterFieldEffect(struct Sprite *sprite)
}
}
-u32 FldEff_Unknown19(void)
+u32 FldEff_UnusedGrass(void)
{
u8 spriteId;
struct Sprite *sprite;
- sub_80930E0((s16 *)&gFieldEffectArguments[0], (s16 *)&gFieldEffectArguments[1], 8, 8);
- spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[17], gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2]);
+ SetSpritePosToOffsetMapCoords((s16 *)&gFieldEffectArguments[0], (s16 *)&gFieldEffectArguments[1], 8, 8);
+ spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[FLDEFFOBJ_UNUSED_GRASS], gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2]);
if (spriteId != MAX_SPRITES)
{
sprite = &gSprites[spriteId];
sprite->coordOffsetEnabled = TRUE;
sprite->oam.priority = gFieldEffectArguments[3];
- sprite->data[0] = FLDEFF_UNKNOWN_19;
+ sprite->data[0] = FLDEFF_UNUSED_GRASS;
}
return 0;
}
-u32 FldEff_Unknown20(void)
+u32 FldEff_UnusedGrass2(void)
{
u8 spriteId;
struct Sprite *sprite;
- sub_80930E0((s16 *)&gFieldEffectArguments[0], (s16 *)&gFieldEffectArguments[1], 8, 8);
- spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[18], gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2]);
+ SetSpritePosToOffsetMapCoords((s16 *)&gFieldEffectArguments[0], (s16 *)&gFieldEffectArguments[1], 8, 8);
+ spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[FLDEFFOBJ_UNUSED_GRASS_2], gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2]);
if (spriteId != MAX_SPRITES)
{
sprite = &gSprites[spriteId];
sprite->coordOffsetEnabled = TRUE;
sprite->oam.priority = gFieldEffectArguments[3];
- sprite->data[0] = FLDEFF_UNKNOWN_20;
+ sprite->data[0] = FLDEFF_UNUSED_GRASS_2;
}
return 0;
}
-u32 FldEff_Unknown21(void)
+u32 FldEff_UnusedSand(void)
{
u8 spriteId;
struct Sprite *sprite;
- sub_80930E0((s16 *)&gFieldEffectArguments[0], (s16 *)&gFieldEffectArguments[1], 8, 8);
- spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[19], gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2]);
+ SetSpritePosToOffsetMapCoords((s16 *)&gFieldEffectArguments[0], (s16 *)&gFieldEffectArguments[1], 8, 8);
+ spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[FLDEFFOBJ_UNUSED_SAND], gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2]);
if (spriteId != MAX_SPRITES)
{
sprite = &gSprites[spriteId];
sprite->coordOffsetEnabled = TRUE;
sprite->oam.priority = gFieldEffectArguments[3];
- sprite->data[0] = FLDEFF_UNKNOWN_21;
+ sprite->data[0] = FLDEFF_UNUSED_SAND;
}
return 0;
}
-u32 FldEff_Unknown22(void)
+u32 FldEff_WaterSurfacing(void)
{
u8 spriteId;
struct Sprite *sprite;
- sub_80930E0((s16 *)&gFieldEffectArguments[0], (s16 *)&gFieldEffectArguments[1], 8, 8);
- spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[20], gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2]);
+ SetSpritePosToOffsetMapCoords((s16 *)&gFieldEffectArguments[0], (s16 *)&gFieldEffectArguments[1], 8, 8);
+ spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[FLDEFFOBJ_WATER_SURFACING], gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2]);
if (spriteId != MAX_SPRITES)
{
sprite = &gSprites[spriteId];
sprite->coordOffsetEnabled = TRUE;
sprite->oam.priority = gFieldEffectArguments[3];
- sprite->data[0] = FLDEFF_UNKNOWN_22;
+ sprite->data[0] = FLDEFF_WATER_SURFACING;
}
return 0;
}
@@ -888,8 +888,8 @@ u32 FldEff_Ash(void)
x = gFieldEffectArguments[0];
y = gFieldEffectArguments[1];
- sub_80930E0(&x, &y, 8, 8);
- spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[6], x, y, gFieldEffectArguments[2]);
+ SetSpritePosToOffsetMapCoords(&x, &y, 8, 8);
+ spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[FLDEFFOBJ_ASH], x, y, gFieldEffectArguments[2]);
if (spriteId != MAX_SPRITES)
{
sprite = &gSprites[spriteId];
@@ -944,8 +944,8 @@ u32 FldEff_SurfBlob(void)
u8 spriteId;
struct Sprite *sprite;
- sub_80930E0((s16 *)&gFieldEffectArguments[0], (s16 *)&gFieldEffectArguments[1], 8, 8);
- spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[7], gFieldEffectArguments[0], gFieldEffectArguments[1], 0x96);
+ SetSpritePosToOffsetMapCoords((s16 *)&gFieldEffectArguments[0], (s16 *)&gFieldEffectArguments[1], 8, 8);
+ spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[FLDEFFOBJ_SURF_BLOB], gFieldEffectArguments[0], gFieldEffectArguments[1], 0x96);
if (spriteId !=MAX_SPRITES)
{
sprite = &gSprites[spriteId];
@@ -960,33 +960,34 @@ u32 FldEff_SurfBlob(void)
return spriteId;
}
-void sub_81555AC(u8 spriteId, u8 value)
+// States for bobbing up and down while surfing
+void SetSurfBobState(u8 spriteId, u8 value)
{
gSprites[spriteId].data[0] = (gSprites[spriteId].data[0] & ~0xF) | (value & 0xF);
}
-void sub_81555D8(u8 spriteId, u8 value)
+void SetSurfBobWhileFlyingOutState(u8 spriteId, u8 value)
{
gSprites[spriteId].data[0] = (gSprites[spriteId].data[0] & ~0xF0) | ((value & 0xF) << 4);
}
-void sub_8155604(u8 spriteId, u8 value, s16 data1)
+void SetSurfBobWhileFishingState(u8 spriteId, u8 value, s16 data1)
{
gSprites[spriteId].data[0] = (gSprites[spriteId].data[0] & ~0xF00) | ((value & 0xF) << 8);
gSprites[spriteId].data[1] = data1;
}
-static u8 sub_8155638(struct Sprite *sprite)
+static u8 GetSurfBobState(struct Sprite *sprite)
{
return sprite->data[0] & 0xF;
}
-static u8 sub_8155640(struct Sprite *sprite)
+static u8 GetSurfBobWhileFlyingOutState(struct Sprite *sprite)
{
return (sprite->data[0] & 0xF0) >> 4;
}
-static u8 sub_815564C(struct Sprite *sprite)
+static u8 GetSurfBobWhileFishingState(struct Sprite *sprite)
{
return (sprite->data[0] & 0xF00) >> 8;
}
@@ -1018,7 +1019,7 @@ static void SynchroniseSurfAnim(struct ObjectEvent *objectEvent, struct Sprite *
[DIR_NORTHEAST] = 1,
};
- if (sub_8155640(sprite) == 0)
+ if (GetSurfBobWhileFlyingOutState(sprite) == 0)
StartSpriteAnimIfDifferent(sprite, surfBlobDirectionAnims[objectEvent->movementDirection]);
}
@@ -1049,8 +1050,8 @@ void sub_81556E8(struct ObjectEvent *objectEvent, struct Sprite *sprite)
static void CreateBobbingEffect(struct ObjectEvent *objectEvent, struct Sprite *linkedSprite, struct Sprite *sprite)
{
u16 unk_085CDC6A[] = {3, 7};
- u8 v0 = sub_8155638(sprite);
- if (v0 != 0)
+ u8 bobState = GetSurfBobState(sprite);
+ if (bobState != 0)
{
if (((u16)(++ sprite->data[4]) & unk_085CDC6A[sprite->data[5]]) == 0)
{
@@ -1060,9 +1061,9 @@ static void CreateBobbingEffect(struct ObjectEvent *objectEvent, struct Sprite *
{
sprite->data[3] = -sprite->data[3];
}
- if (v0 != 2)
+ if (bobState != 2)
{
- if (sub_815564C(sprite) == 0)
+ if (GetSurfBobWhileFishingState(sprite) == 0)
linkedSprite->pos2.y = sprite->pos2.y;
else
linkedSprite->pos2.y = sprite->data[1] + sprite->pos2.y;
@@ -1106,15 +1107,15 @@ u32 FldEff_Dust(void)
u8 spriteId;
struct Sprite *sprite;
- sub_80930E0((s16 *)&gFieldEffectArguments[0], (s16 *)&gFieldEffectArguments[1], 8, 12);
- spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[9], gFieldEffectArguments[0], gFieldEffectArguments[1], 0);
+ SetSpritePosToOffsetMapCoords((s16 *)&gFieldEffectArguments[0], (s16 *)&gFieldEffectArguments[1], 8, 12);
+ spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[FLDEFFOBJ_GROUND_IMPACT_DUST], gFieldEffectArguments[0], gFieldEffectArguments[1], 0);
if (spriteId != MAX_SPRITES)
{
sprite = &gSprites[spriteId];
sprite->coordOffsetEnabled = TRUE;
sprite->oam.priority = gFieldEffectArguments[3];
sprite->data[0] = gFieldEffectArguments[2];
- sprite->data[1] = 10;
+ sprite->data[1] = FLDEFF_DUST;
}
return 0;
}
@@ -1129,7 +1130,7 @@ u32 FldEff_SandPile(void)
objectEventId = GetObjectEventIdByLocalIdAndMap(gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2]);
objectEvent = &gObjectEvents[objectEventId];
- spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[29], 0, 0, 0);
+ spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[FLDEFFOBJ_SAND_PILE], 0, 0, 0);
if (spriteId != MAX_SPRITES)
{
graphicsInfo = GetObjectEventGraphicsInfo(objectEvent->graphicsId);
@@ -1182,8 +1183,8 @@ u32 FldEff_Bubbles(void)
u8 spriteId;
struct Sprite *sprite;
- sub_80930E0((s16 *)&gFieldEffectArguments[0], (s16 *)&gFieldEffectArguments[1], 8, 0);
- spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[34], gFieldEffectArguments[0], gFieldEffectArguments[1], 0x52);
+ SetSpritePosToOffsetMapCoords((s16 *)&gFieldEffectArguments[0], (s16 *)&gFieldEffectArguments[1], 8, 0);
+ spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[FLDEFFOBJ_BUBBLES], gFieldEffectArguments[0], gFieldEffectArguments[1], 0x52);
if (spriteId != MAX_SPRITES)
{
sprite = &gSprites[spriteId];
@@ -1210,8 +1211,8 @@ u32 FldEff_BerryTreeGrowthSparkle(void)
u8 spriteId;
struct Sprite *sprite;
- sub_80930E0((s16 *)&gFieldEffectArguments[0], (s16 *)&gFieldEffectArguments[1], 8, 4);
- spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[22], gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2]);
+ SetSpritePosToOffsetMapCoords((s16 *)&gFieldEffectArguments[0], (s16 *)&gFieldEffectArguments[1], 8, 4);
+ spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[FLDEFFOBJ_SPARKLE], gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2]);
if (spriteId != MAX_SPRITES)
{
sprite = &gSprites[spriteId];
@@ -1225,20 +1226,20 @@ u32 FldEff_BerryTreeGrowthSparkle(void)
u32 ShowTreeDisguiseFieldEffect(void)
{
- return ShowDisguiseFieldEffect(FLDEFF_TREE_DISGUISE, 24, 4);
+ return ShowDisguiseFieldEffect(FLDEFF_TREE_DISGUISE, FLDEFFOBJ_TREE_DISGUISE, 4);
}
u32 ShowMountainDisguiseFieldEffect(void)
{
- return ShowDisguiseFieldEffect(FLDEFF_MOUNTAIN_DISGUISE, 25, 3);
+ return ShowDisguiseFieldEffect(FLDEFF_MOUNTAIN_DISGUISE, FLDEFFOBJ_MOUNTAIN_DISGUISE, 3);
}
u32 ShowSandDisguiseFieldEffect(void)
{
- return ShowDisguiseFieldEffect(FLDEFF_SAND_DISGUISE, 28, 2);
+ return ShowDisguiseFieldEffect(FLDEFF_SAND_DISGUISE, FLDEFFOBJ_SAND_DISGUISE, 2);
}
-static u32 ShowDisguiseFieldEffect(u8 fldEff, u8 templateIdx, u8 paletteNum)
+static u32 ShowDisguiseFieldEffect(u8 fldEff, u8 fldEffObj, u8 paletteNum)
{
u8 spriteId;
struct Sprite *sprite;
@@ -1248,7 +1249,7 @@ static u32 ShowDisguiseFieldEffect(u8 fldEff, u8 templateIdx, u8 paletteNum)
FieldEffectActiveListRemove(fldEff);
return MAX_SPRITES;
}
- spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[templateIdx], 0, 0, 0);
+ spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[fldEffObj], 0, 0, 0);
if (spriteId != MAX_SPRITES)
{
sprite = &gSprites[spriteId];
@@ -1330,8 +1331,8 @@ u32 FldEff_Sparkle(void)
gFieldEffectArguments[0] += 7;
gFieldEffectArguments[1] += 7;
- sub_80930E0((s16 *)&gFieldEffectArguments[0], (s16 *)&gFieldEffectArguments[1], 8, 8);
- spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[35], gFieldEffectArguments[0], gFieldEffectArguments[1], 0x52);
+ SetSpritePosToOffsetMapCoords((s16 *)&gFieldEffectArguments[0], (s16 *)&gFieldEffectArguments[1], 8, 8);
+ spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[FLDEFFOBJ_SMALL_SPARKLE], gFieldEffectArguments[0], gFieldEffectArguments[1], 0x52);
if (spriteId != MAX_SPRITES)
{
gSprites[spriteId].oam.priority = gFieldEffectArguments[2];
@@ -1358,61 +1359,72 @@ void UpdateSparkleFieldEffect(struct Sprite *sprite)
FieldEffectStop(sprite, FLDEFF_SPARKLE);
}
-void sub_8155EA0(struct Sprite *sprite)
+#define sTimer data[0]
+#define sState data[2]
+#define sStartY data[4]
+#define sCounter data[5]
+#define sAnimCounter data[6]
+#define sAnimState data[7]
+
+// Same as InitSpriteForFigure8Anim
+static void InitRayquazaForFigure8Anim(struct Sprite *sprite)
{
- sprite->data[6] = 0;
- sprite->data[7] = 0;
+ sprite->sAnimCounter = 0;
+ sprite->sAnimState = 0;
}
-bool8 sub_8155EA8(struct Sprite *sprite)
+// Only different from AnimateSpriteInFigure8 by the addition of SetGpuReg to move the spotlight
+static bool8 AnimateRayquazaInFigure8(struct Sprite *sprite)
{
- bool8 returnBool = FALSE;
+ bool8 finished = FALSE;
- switch (sprite->data[7])
+ switch (sprite->sAnimState)
{
- case 0:
- sprite->pos2.x += sub_809773C(sprite->data[6]);
- sprite->pos2.y += sub_8097728(sprite->data[6]);
- break;
- case 1:
- sprite->pos2.x -= sub_809773C(0x47 - sprite->data[6]);
- sprite->pos2.y += sub_8097728(0x47 - sprite->data[6]);
- break;
- case 2:
- sprite->pos2.x -= sub_809773C(sprite->data[6]);
- sprite->pos2.y += sub_8097728(sprite->data[6]);
- break;
- case 3:
- sprite->pos2.x += sub_809773C(0x47 - sprite->data[6]);
- sprite->pos2.y += sub_8097728(0x47 - sprite->data[6]);
- break;
+ case 0:
+ sprite->pos2.x += GetFigure8XOffset(sprite->sAnimCounter);
+ sprite->pos2.y += GetFigure8YOffset(sprite->sAnimCounter);
+ break;
+ case 1:
+ sprite->pos2.x -= GetFigure8XOffset((FIGURE_8_LENGTH - 1) - sprite->sAnimCounter);
+ sprite->pos2.y += GetFigure8YOffset((FIGURE_8_LENGTH - 1) - sprite->sAnimCounter);
+ break;
+ case 2:
+ sprite->pos2.x -= GetFigure8XOffset(sprite->sAnimCounter);
+ sprite->pos2.y += GetFigure8YOffset(sprite->sAnimCounter);
+ break;
+ case 3:
+ sprite->pos2.x += GetFigure8XOffset((FIGURE_8_LENGTH - 1) - sprite->sAnimCounter);
+ sprite->pos2.y += GetFigure8YOffset((FIGURE_8_LENGTH - 1) - sprite->sAnimCounter);
+ break;
}
+ // Update spotlight to sweep left and right with Rayquaza
SetGpuReg(REG_OFFSET_BG0HOFS, -sprite->pos2.x);
- if (++sprite->data[6] == 72)
+
+ if (++sprite->sAnimCounter == FIGURE_8_LENGTH)
{
- sprite->data[6] = 0;
- sprite->data[7]++;
+ sprite->sAnimCounter = 0;
+ sprite->sAnimState++;
}
- if (sprite->data[7] == 4)
+ if (sprite->sAnimState == 4)
{
sprite->pos2.y = 0;
sprite->pos2.x = 0;
- returnBool = TRUE;
+ finished = TRUE;
}
- return returnBool;
+ return finished;
}
-void sub_8155F80(struct Sprite *sprite)
+void UpdateRayquazaSpotlightEffect(struct Sprite *sprite)
{
u8 i, j;
- switch (sprite->data[2])
+ switch (sprite->sState)
{
case 0:
- SetGpuReg(REG_OFFSET_BG0VOFS, 0x78 - (sprite->data[0] / 3));
- if (sprite->data[0] == 0x60)
+ SetGpuReg(REG_OFFSET_BG0VOFS, DISPLAY_WIDTH / 2 - (sprite->sTimer / 3));
+ if (sprite->sTimer == 96)
{
for (i = 0; i < 3; i++)
{
@@ -1422,42 +1434,42 @@ void sub_8155F80(struct Sprite *sprite)
}
}
}
- if (sprite->data[0] > 0x137)
+ if (sprite->sTimer > 311)
{
- sprite->data[2] = 1;
- sprite->data[0] = 0;
+ sprite->sState = 1;
+ sprite->sTimer = 0;
}
break;
case 1:
- sprite->pos1.y = (gSineTable[sprite->data[0] / 3] >> 2) + sprite->data[4];
- if (sprite->data[0] == 0xBD)
+ sprite->pos1.y = (gSineTable[sprite->sTimer / 3] >> 2) + sprite->sStartY;
+ if (sprite->sTimer == 189)
{
- sprite->data[2] = 2;
- sprite->data[5] = 0;
- sprite->data[0] = 0;
+ sprite->sState = 2;
+ sprite->sCounter = 0;
+ sprite->sTimer = 0;
}
break;
case 2:
- if (sprite->data[0] == 0x3C)
+ if (sprite->sTimer == 60)
{
- sprite->data[5]++;
- sprite->data[0] = 0;
+ sprite->sCounter++;
+ sprite->sTimer = 0;
}
- if (sprite->data[5] == 7)
+ if (sprite->sCounter == 7)
{
- sprite->data[5] = 0;
- sprite->data[2] = 3;
+ sprite->sCounter = 0;
+ sprite->sState = 3;
}
break;
case 3:
if (sprite->pos2.y == 0)
{
- sprite->data[0] = 0;
- sprite->data[2]++;
+ sprite->sTimer = 0;
+ sprite->sState++;
}
- if (sprite->data[0] == 5)
+ if (sprite->sTimer == 5)
{
- sprite->data[0] = 0;
+ sprite->sTimer = 0;
if (sprite->pos2.y > 0)
sprite->pos2.y--;
else
@@ -1465,38 +1477,38 @@ void sub_8155F80(struct Sprite *sprite)
}
break;
case 4:
- if (sprite->data[0] == 0x3C)
+ if (sprite->sTimer == 60)
{
- sprite->data[2] = 5;
- sprite->data[0] = 0;
- sprite->data[5] = 0;
+ sprite->sState = 5;
+ sprite->sTimer = 0;
+ sprite->sCounter = 0;
}
break;
case 5:
- sub_8155EA0(sprite);
- sprite->data[2] = 6;
- sprite->data[0] = 0;
+ InitRayquazaForFigure8Anim(sprite);
+ sprite->sState = 6;
+ sprite->sTimer = 0;
break;
case 6:
- if (sub_8155EA8(sprite))
+ if (AnimateRayquazaInFigure8(sprite))
{
- sprite->data[0] = 0;
- if (++sprite->data[5] <= 2)
+ sprite->sTimer = 0;
+ if (++sprite->sCounter <= 2)
{
- sub_8155EA0(sprite);
+ InitRayquazaForFigure8Anim(sprite);
}
else
{
- sprite->data[5] = 0;
- sprite->data[2] = 7;
+ sprite->sCounter = 0;
+ sprite->sState = 7;
}
}
break;
case 7:
- if (sprite->data[0] == 0x1E)
+ if (sprite->sTimer == 30)
{
- sprite->data[2] = 8;
- sprite->data[0] = 0;
+ sprite->sState = 8;
+ sprite->sTimer = 0;
}
break;
case 8:
@@ -1508,11 +1520,11 @@ void sub_8155F80(struct Sprite *sprite)
}
}
SetGpuReg(REG_OFFSET_BG0VOFS, 0);
- FieldEffectStop(sprite, FLDEFF_RAYQUAZA);
+ FieldEffectStop(sprite, FLDEFF_RAYQUAZA_SPOTLIGHT);
break;
}
- if (sprite->data[2] == 1)
+ if (sprite->sState == 1)
{
if ((sprite->data[1] & 7) == 0)
sprite->pos2.y += sprite->data[3];
@@ -1521,10 +1533,17 @@ void sub_8155F80(struct Sprite *sprite)
sprite->data[1]++;
}
- sprite->data[0]++;
+ sprite->sTimer++;
}
-void sub_8156194(struct Sprite *sprite)
+#undef sTimer
+#undef sState
+#undef sStartY
+#undef sCounter
+#undef sAnimCounter
+#undef sAnimState
+
+void UpdateJumpImpactEffect(struct Sprite *sprite)
{
if (sprite->animEnded)
{
diff --git a/src/field_message_box.c b/src/field_message_box.c
index be76b0c19..1b760c7df 100755
--- a/src/field_message_box.c
+++ b/src/field_message_box.c
@@ -5,128 +5,136 @@
#include "task.h"
#include "text.h"
#include "match_call.h"
+#include "field_message_box.h"
static EWRAM_DATA u8 sFieldMessageBoxMode = 0;
-static void textbox_fdecode_auto_and_task_add(u8*, bool32);
-static void textbox_auto_and_task_add(void);
+static void ExpandStringAndStartDrawFieldMessage(const u8*, bool32);
+static void StartDrawFieldMessage(void);
void InitFieldMessageBox(void)
{
- sFieldMessageBoxMode = 0;
- gTextFlags.canABSpeedUpPrint = 0;
- gTextFlags.useAlternateDownArrow = 0;
- gTextFlags.autoScroll = 0;
- gTextFlags.forceMidTextSpeed = 0;
+ sFieldMessageBoxMode = FIELD_MESSAGE_BOX_HIDDEN;
+ gTextFlags.canABSpeedUpPrint = FALSE;
+ gTextFlags.useAlternateDownArrow = FALSE;
+ gTextFlags.autoScroll = FALSE;
+ gTextFlags.forceMidTextSpeed = FALSE;
}
-static void sub_8098154(u8 taskId)
+#define tState data[0]
+
+static void Task_DrawFieldMessage(u8 taskId)
{
struct Task *task = &gTasks[taskId];
- switch (task->data[0])
+ switch (task->tState)
{
case 0:
LoadMessageBoxAndBorderGfx();
- task->data[0]++;
+ task->tState++;
break;
case 1:
DrawDialogueFrame(0, 1);
- task->data[0]++;
+ task->tState++;
break;
case 2:
- if (RunTextPrintersAndIsPrinter0Active() != 1)
+ if (RunTextPrintersAndIsPrinter0Active() != TRUE)
{
- sFieldMessageBoxMode = 0;
+ sFieldMessageBoxMode = FIELD_MESSAGE_BOX_HIDDEN;
DestroyTask(taskId);
}
}
}
-static void task_add_textbox(void)
+#undef tState
+
+static void CreateTask_DrawFieldMessage(void)
{
- CreateTask(sub_8098154, 0x50);
+ CreateTask(Task_DrawFieldMessage, 0x50);
}
-static void task_del_textbox(void)
+static void DestroyTask_DrawFieldMessage(void)
{
- u8 taskId = FindTaskIdByFunc(sub_8098154);
+ u8 taskId = FindTaskIdByFunc(Task_DrawFieldMessage);
if (taskId != 0xFF)
DestroyTask(taskId);
}
-bool8 ShowFieldMessage(u8 *str)
+bool8 ShowFieldMessage(const u8 *str)
{
- if (sFieldMessageBoxMode != 0)
+ if (sFieldMessageBoxMode != FIELD_MESSAGE_BOX_HIDDEN)
return FALSE;
- textbox_fdecode_auto_and_task_add(str, 1);
- sFieldMessageBoxMode = 2;
+ ExpandStringAndStartDrawFieldMessage(str, TRUE);
+ sFieldMessageBoxMode = FIELD_MESSAGE_BOX_NORMAL;
return TRUE;
}
-void sub_8098214(u8 taskId)
+static void Task_HidePokenavMessageWhenDone(u8 taskId)
{
if (!IsMatchCallTaskActive())
{
- sFieldMessageBoxMode = 0;
+ sFieldMessageBoxMode = FIELD_MESSAGE_BOX_HIDDEN;
DestroyTask(taskId);
}
}
-bool8 sub_8098238(u8 *str)
+bool8 ShowPokenavFieldMessage(const u8 *str)
{
- if (sFieldMessageBoxMode != 0)
+ if (sFieldMessageBoxMode != FIELD_MESSAGE_BOX_HIDDEN)
return FALSE;
StringExpandPlaceholders(gStringVar4, str);
- CreateTask(sub_8098214, 0);
+ CreateTask(Task_HidePokenavMessageWhenDone, 0);
StartMatchCallFromScript(str);
sFieldMessageBoxMode = 2;
return TRUE;
}
-bool8 ShowFieldAutoScrollMessage(u8 *str)
+bool8 ShowFieldAutoScrollMessage(const u8 *str)
{
- if (sFieldMessageBoxMode != 0)
+ if (sFieldMessageBoxMode != FIELD_MESSAGE_BOX_HIDDEN)
return FALSE;
- sFieldMessageBoxMode = 3;
- textbox_fdecode_auto_and_task_add(str, 0);
+ sFieldMessageBoxMode = FIELD_MESSAGE_BOX_AUTO_SCROLL;
+ ExpandStringAndStartDrawFieldMessage(str, FALSE);
return TRUE;
}
-bool8 sub_80982A0(u8 *str)
+// Unused
+static bool8 ForceShowFieldAutoScrollMessage(const u8 *str)
{
- sFieldMessageBoxMode = 3;
- textbox_fdecode_auto_and_task_add(str, 1);
+ sFieldMessageBoxMode = FIELD_MESSAGE_BOX_AUTO_SCROLL;
+ ExpandStringAndStartDrawFieldMessage(str, TRUE);
return TRUE;
}
-bool8 sub_80982B8(void)
+// Same as ShowFieldMessage, but instead of accepting a
+// string arg it just prints whats already in gStringVar4
+bool8 ShowFieldMessageFromBuffer(void)
{
- if (sFieldMessageBoxMode != 0)
+ if (sFieldMessageBoxMode != FIELD_MESSAGE_BOX_HIDDEN)
return FALSE;
- sFieldMessageBoxMode = 2;
- textbox_auto_and_task_add();
+ sFieldMessageBoxMode = FIELD_MESSAGE_BOX_NORMAL;
+ StartDrawFieldMessage();
return TRUE;
}
-static void textbox_fdecode_auto_and_task_add(u8* str, bool32 allowSkippingDelayWithButtonPress)
+static void ExpandStringAndStartDrawFieldMessage(const u8* str, bool32 allowSkippingDelayWithButtonPress)
{
StringExpandPlaceholders(gStringVar4, str);
AddTextPrinterForMessage(allowSkippingDelayWithButtonPress);
- task_add_textbox();
+ CreateTask_DrawFieldMessage();
}
-static void textbox_auto_and_task_add(void)
+static void StartDrawFieldMessage(void)
{
AddTextPrinterForMessage(TRUE);
- task_add_textbox();
+ CreateTask_DrawFieldMessage();
}
void HideFieldMessageBox(void)
{
- task_del_textbox();
+ DestroyTask_DrawFieldMessage();
ClearDialogWindowAndFrame(0, 1);
- sFieldMessageBoxMode = 0;
+ sFieldMessageBoxMode = FIELD_MESSAGE_BOX_HIDDEN;
}
u8 GetFieldMessageBoxMode(void)
@@ -136,20 +144,21 @@ u8 GetFieldMessageBoxMode(void)
bool8 IsFieldMessageBoxHidden(void)
{
- if (sFieldMessageBoxMode == 0)
+ if (sFieldMessageBoxMode == FIELD_MESSAGE_BOX_HIDDEN)
return TRUE;
return FALSE;
}
-void sub_8098358(void)
+// Unused
+static void ReplaceFieldMessageWithFrame(void)
{
- task_del_textbox();
+ DestroyTask_DrawFieldMessage();
DrawStdWindowFrame(0, 1);
- sFieldMessageBoxMode = 0;
+ sFieldMessageBoxMode = FIELD_MESSAGE_BOX_HIDDEN;
}
-void sub_8098374(void)
+void StopFieldMessage(void)
{
- task_del_textbox();
- sFieldMessageBoxMode = 0;
+ DestroyTask_DrawFieldMessage();
+ sFieldMessageBoxMode = FIELD_MESSAGE_BOX_HIDDEN;
}
diff --git a/src/field_player_avatar.c b/src/field_player_avatar.c
index b0918a78d..5fab2489b 100644
--- a/src/field_player_avatar.c
+++ b/src/field_player_avatar.c
@@ -25,7 +25,7 @@
#include "constants/event_objects.h"
#include "constants/event_object_movement.h"
#include "constants/field_effects.h"
-#include "constants/flags.h"
+#include "constants/items.h"
#include "constants/maps.h"
#include "constants/moves.h"
#include "constants/songs.h"
@@ -101,9 +101,9 @@ static void sub_808C280(struct ObjectEvent *);
static void StartStrengthAnim(u8, u8);
static void Task_PushBoulder(u8 taskId);
-static u8 PushBoulder_Start(struct Task *task, struct ObjectEvent *playerObject, struct ObjectEvent *strengthObject);
-static u8 PushBoulder_Move(struct Task *task, struct ObjectEvent *playerObject, struct ObjectEvent *strengthObject);
-static u8 PushBoulder_End(struct Task *task, struct ObjectEvent *playerObject, struct ObjectEvent *strengthObject);
+static bool8 PushBoulder_Start(struct Task *task, struct ObjectEvent *playerObject, struct ObjectEvent *strengthObject);
+static bool8 PushBoulder_Move(struct Task *task, struct ObjectEvent *playerObject, struct ObjectEvent *strengthObject);
+static bool8 PushBoulder_End(struct Task *task, struct ObjectEvent *playerObject, struct ObjectEvent *strengthObject);
static void DoPlayerMatJump(void);
static void DoPlayerAvatarSecretBaseMatJump(u8 taskId);
@@ -121,22 +121,22 @@ static void Task_StopSurfingInit(u8 taskId);
static void Task_WaitStopSurfing(u8 taskId);
static void Task_Fishing(u8 taskId);
-static u8 Fishing1(struct Task *task);
-static u8 Fishing2(struct Task *task);
-static u8 Fishing3(struct Task *task);
-static u8 Fishing4(struct Task *task);
-static u8 Fishing5(struct Task *task);
-static u8 Fishing6(struct Task *task);
-static u8 Fishing7(struct Task *task);
-static u8 Fishing8(struct Task *task);
-static u8 Fishing9(struct Task *task);
-static u8 Fishing10(struct Task *task);
-static u8 Fishing11(struct Task *task);
-static u8 Fishing12(struct Task *task);
-static u8 Fishing13(struct Task *task);
-static u8 Fishing14(struct Task *task);
-static u8 Fishing15(struct Task *task);
-static u8 Fishing16(struct Task *task);
+static u8 Fishing_Init(struct Task *task);
+static u8 Fishing_GetRodOut(struct Task *task);
+static u8 Fishing_WaitBeforeDots(struct Task *task);
+static u8 Fishing_InitDots(struct Task *task);
+static u8 Fishing_ShowDots(struct Task *task);
+static u8 Fishing_CheckForBite(struct Task *task);
+static u8 Fishing_GotBite(struct Task *task);
+static u8 Fishing_WaitForA(struct Task *task);
+static u8 Fishing_CheckMoreDots(struct Task *task);
+static u8 Fishing_MonOnHook(struct Task *task);
+static u8 Fishing_StartEncounter(struct Task *task);
+static u8 Fishing_NotEvenNibble(struct Task *task);
+static u8 Fishing_GotAway(struct Task *task);
+static u8 Fishing_NoMon(struct Task *task);
+static u8 Fishing_PutRodAway(struct Task *task);
+static u8 Fishing_EndNoMon(struct Task *task);
static void AlignFishingAnimationFrames(void);
static u8 sub_808D38C(struct ObjectEvent *object, s16 *a1);
@@ -320,7 +320,7 @@ static u8 ObjectEventCB2_NoMovement2(void)
return 0;
}
-void player_step(u8 direction, u16 newKeys, u16 heldKeys)
+void PlayerStep(u8 direction, u16 newKeys, u16 heldKeys)
{
struct ObjectEvent *playerObjEvent = &gObjectEvents[gPlayerAvatar.objectEventId];
@@ -379,9 +379,9 @@ static bool8 TryInterruptObjectEventSpecialAnim(struct ObjectEvent *playerObjEve
static void npc_clear_strange_bits(struct ObjectEvent *objEvent)
{
- objEvent->inanimate = 0;
- objEvent->disableAnim = 0;
- objEvent->facingDirectionLocked = 0;
+ objEvent->inanimate = FALSE;
+ objEvent->disableAnim = FALSE;
+ objEvent->facingDirectionLocked = FALSE;
gPlayerAvatar.flags &= ~PLAYER_AVATAR_FLAG_DASH;
}
@@ -424,14 +424,14 @@ static u8 GetForcedMovementByMetatileBehavior(void)
static bool8 ForcedMovement_None(void)
{
- if (gPlayerAvatar.flags & PLAYER_AVATAR_FLAG_6)
+ if (gPlayerAvatar.flags & PLAYER_AVATAR_FLAG_FORCED_MOVE)
{
struct ObjectEvent *playerObjEvent = &gObjectEvents[gPlayerAvatar.objectEventId];
- playerObjEvent->facingDirectionLocked = 0;
- playerObjEvent->enableAnim = 1;
+ playerObjEvent->facingDirectionLocked = FALSE;
+ playerObjEvent->enableAnim = TRUE;
SetObjectEventDirection(playerObjEvent, playerObjEvent->facingDirection);
- gPlayerAvatar.flags &= ~PLAYER_AVATAR_FLAG_6;
+ gPlayerAvatar.flags &= ~PLAYER_AVATAR_FLAG_FORCED_MOVE;
}
return FALSE;
}
@@ -441,7 +441,7 @@ static u8 DoForcedMovement(u8 direction, void (*b)(u8))
struct PlayerAvatar *playerAvatar = &gPlayerAvatar;
u8 collision = CheckForPlayerAvatarCollision(direction);
- playerAvatar->flags |= PLAYER_AVATAR_FLAG_6;
+ playerAvatar->flags |= PLAYER_AVATAR_FLAG_FORCED_MOVE;
if (collision)
{
ForcedMovement_None();
@@ -453,7 +453,7 @@ static u8 DoForcedMovement(u8 direction, void (*b)(u8))
{
if (collision == COLLISION_LEDGE_JUMP)
PlayerJumpLedge(direction);
- playerAvatar->flags |= PLAYER_AVATAR_FLAG_6;
+ playerAvatar->flags |= PLAYER_AVATAR_FLAG_FORCED_MOVE;
playerAvatar->runningState = MOVING;
return 1;
}
@@ -470,7 +470,7 @@ static u8 DoForcedMovementInCurrentDirection(void (*a)(u8))
{
struct ObjectEvent *playerObjEvent = &gObjectEvents[gPlayerAvatar.objectEventId];
- playerObjEvent->disableAnim = 1;
+ playerObjEvent->disableAnim = TRUE;
return DoForcedMovement(playerObjEvent->movementDirection, a);
}
@@ -519,12 +519,12 @@ static bool8 ForcedMovement_PushedEastByCurrent(void)
return DoForcedMovement(DIR_EAST, PlayerRideWaterCurrent);
}
-u8 ForcedMovement_Slide(u8 direction, void (*b)(u8))
+static u8 ForcedMovement_Slide(u8 direction, void (*b)(u8))
{
struct ObjectEvent *playerObjEvent = &gObjectEvents[gPlayerAvatar.objectEventId];
- playerObjEvent->disableAnim = 1;
- playerObjEvent->facingDirectionLocked = 1;
+ playerObjEvent->disableAnim = TRUE;
+ playerObjEvent->facingDirectionLocked = TRUE;
return DoForcedMovement(direction, b);
}
@@ -567,8 +567,8 @@ static bool8 ForcedMovement_MuddySlope(void)
if (playerObjEvent->movementDirection != DIR_NORTH || GetPlayerSpeed() <= 3)
{
Bike_UpdateBikeCounterSpeed(0);
- playerObjEvent->facingDirectionLocked = 1;
- return DoForcedMovement(1, PlayerGoSpeed2);
+ playerObjEvent->facingDirectionLocked = TRUE;
+ return DoForcedMovement(DIR_SOUTH, PlayerGoSpeed2);
}
else
{
@@ -869,7 +869,7 @@ static void PlayerAvatarTransition_Surfing(struct ObjectEvent *objEvent)
gFieldEffectArguments[2] = gPlayerAvatar.objectEventId;
spriteId = FieldEffectStart(FLDEFF_SURF_BLOB);
objEvent->fieldEffectSpriteId = spriteId;
- sub_81555AC(spriteId, 1);
+ SetSurfBobState(spriteId, 1);
}
static void PlayerAvatarTransition_Underwater(struct ObjectEvent *objEvent)
@@ -885,7 +885,7 @@ static void PlayerAvatarTransition_ReturnToField(struct ObjectEvent *objEvent)
gPlayerAvatar.flags |= PLAYER_AVATAR_FLAG_5;
}
-void sub_808B578(void)
+void UpdatePlayerAvatarTransitionState(void)
{
gPlayerAvatar.tileTransitionState = T_NOT_MOVING;
if (PlayerIsAnimActive())
@@ -1021,7 +1021,7 @@ void PlayerTurnInPlace(u8 direction)
void PlayerJumpLedge(u8 direction)
{
- PlaySE(SE_DANSA);
+ PlaySE(SE_LEDGE);
PlayerSetAnimId(GetJump2MovementAction(direction), 8);
}
@@ -1055,28 +1055,28 @@ void PlayerEndWheelie(u8 direction)
// wheelie hopping standing
void PlayerStandingHoppingWheelie(u8 a)
{
- PlaySE(SE_JITE_PYOKO);
+ PlaySE(SE_BIKE_HOP);
PlayerSetAnimId(GetAcroWheelieHopFaceDirectionMovementAction(a), 1);
}
// wheelie hopping moving
void PlayerMovingHoppingWheelie(u8 a)
{
- PlaySE(SE_JITE_PYOKO);
+ PlaySE(SE_BIKE_HOP);
PlayerSetAnimId(GetAcroWheelieHopDirectionMovementAction(a), 2);
}
// wheelie hopping ledge
void PlayerLedgeHoppingWheelie(u8 a)
{
- PlaySE(SE_JITE_PYOKO);
+ PlaySE(SE_BIKE_HOP);
PlayerSetAnimId(GetAcroWheelieJumpDirectionMovementAction(a), 8);
}
// acro turn jump
void PlayerAcroTurnJump(u8 direction)
{
- PlaySE(SE_JITE_PYOKO);
+ PlaySE(SE_BIKE_HOP);
PlayerSetAnimId(GetJumpInPlaceTurnAroundMovementAction(direction), 1);
}
@@ -1328,7 +1328,7 @@ void ClearPlayerAvatarInfo(void)
void SetPlayerAvatarStateMask(u8 flags)
{
- gPlayerAvatar.flags &= (PLAYER_AVATAR_FLAG_DASH | PLAYER_AVATAR_FLAG_6 | PLAYER_AVATAR_FLAG_5);
+ gPlayerAvatar.flags &= (PLAYER_AVATAR_FLAG_DASH | PLAYER_AVATAR_FLAG_FORCED_MOVE | PLAYER_AVATAR_FLAG_5);
gPlayerAvatar.flags |= flags;
}
@@ -1404,13 +1404,13 @@ void SetPlayerInvisibility(bool8 invisible)
gSprites[gObjectEvents[gPlayerAvatar.objectEventId].fieldEffectSpriteId].invisible = invisible;
}
-void sub_808C114(void)
+void SetPlayerAvatarFieldMove(void)
{
ObjectEventSetGraphicsId(&gObjectEvents[gPlayerAvatar.objectEventId], GetPlayerAvatarGraphicsIdByStateId(PLAYER_AVATAR_STATE_FIELD_MOVE));
StartSpriteAnim(&gSprites[gPlayerAvatar.spriteId], 0);
}
-void sub_808C15C(u8 direction)
+static void SetPlayerAvatarFishing(u8 direction)
{
ObjectEventSetGraphicsId(&gObjectEvents[gPlayerAvatar.objectEventId], GetPlayerAvatarGraphicsIdByStateId(PLAYER_AVATAR_STATE_FISHING));
StartSpriteAnim(&gSprites[gPlayerAvatar.spriteId], GetFishingDirectionAnimNum(direction));
@@ -1423,7 +1423,7 @@ void PlayerUseAcroBikeOnBumpySlope(u8 direction)
SeekSpriteAnim(&gSprites[gPlayerAvatar.spriteId], 1);
}
-void sub_808C228(u8 direction)
+void SetPlayerAvatarWatering(u8 direction)
{
ObjectEventSetGraphicsId(&gObjectEvents[gPlayerAvatar.objectEventId], GetPlayerAvatarGraphicsIdByStateId(PLAYER_AVATAR_STATE_WATERING));
StartSpriteAnim(&gSprites[gPlayerAvatar.spriteId], GetFaceDirectionAnimNum(direction));
@@ -1501,7 +1501,7 @@ static bool8 PushBoulder_Move(struct Task *task, struct ObjectEvent *playerObjec
gFieldEffectArguments[2] = strengthObject->previousElevation;
gFieldEffectArguments[3] = gSprites[strengthObject->spriteId].oam.priority;
FieldEffectStart(FLDEFF_DUST);
- PlaySE(SE_W070);
+ PlaySE(SE_M_STRENGTH);
task->data[0]++;
}
return FALSE;
@@ -1540,7 +1540,7 @@ static u8 PlayerAvatar_DoSecretBaseMatJump(struct Task *task, struct ObjectEvent
gPlayerAvatar.preventStep = TRUE;
if (ObjectEventClearHeldMovementIfFinished(objectEvent))
{
- PlaySE(SE_DANSA);
+ PlaySE(SE_LEDGE);
ObjectEventSetHeldMovement(objectEvent, GetJumpInPlaceMovementAction(objectEvent->facingDirection));
task->data[1]++;
if (task->data[1] > 1)
@@ -1574,7 +1574,7 @@ static bool8 PlayerAvatar_SecretBaseMatSpinStep0(struct Task *task, struct Objec
task->data[1] = objectEvent->movementDirection;
gPlayerAvatar.preventStep = TRUE;
ScriptContext2_Enable();
- PlaySE(SE_TK_WARPIN);
+ PlaySE(SE_WARP_IN);
return TRUE;
}
@@ -1650,7 +1650,7 @@ static void Task_StopSurfingInit(u8 taskId)
if (!ObjectEventClearHeldMovementIfFinished(playerObjEvent))
return;
}
- sub_81555AC(playerObjEvent->fieldEffectSpriteId, 2);
+ SetSurfBobState(playerObjEvent->fieldEffectSpriteId, 2);
ObjectEventSetHeldMovement(playerObjEvent, GetJumpSpecialMovementAction((u8)gTasks[taskId].data[0]));
gTasks[taskId].func = Task_WaitStopSurfing;
}
@@ -1670,26 +1670,6 @@ static void Task_WaitStopSurfing(u8 taskId)
}
}
-static bool8 (*const sFishingStateFuncs[])(struct Task *) =
-{
- Fishing1,
- Fishing2,
- Fishing3,
- Fishing4,
- Fishing5,
- Fishing6,
- Fishing7,
- Fishing8,
- Fishing9,
- Fishing10,
- Fishing11,
- Fishing12,
- Fishing13,
- Fishing14,
- Fishing15,
- Fishing16,
-};
-
#define tStep data[0]
#define tFrameCounter data[1]
#define tNumDots data[2]
@@ -1699,6 +1679,7 @@ static bool8 (*const sFishingStateFuncs[])(struct Task *) =
#define tPlayerGfxId data[14]
#define tFishingRod data[15]
+// Some states are jumped to directly, labeled below
#define FISHING_START_ROUND 3
#define FISHING_GOT_BITE 6
#define FISHING_ON_HOOK 9
@@ -1706,6 +1687,26 @@ static bool8 (*const sFishingStateFuncs[])(struct Task *) =
#define FISHING_GOT_AWAY 12
#define FISHING_SHOW_RESULT 13
+static bool8 (*const sFishingStateFuncs[])(struct Task *) =
+{
+ Fishing_Init,
+ Fishing_GetRodOut,
+ Fishing_WaitBeforeDots,
+ Fishing_InitDots, // FISHING_START_ROUND
+ Fishing_ShowDots,
+ Fishing_CheckForBite,
+ Fishing_GotBite, // FISHING_GOT_BITE
+ Fishing_WaitForA,
+ Fishing_CheckMoreDots,
+ Fishing_MonOnHook, // FISHING_ON_HOOK
+ Fishing_StartEncounter,
+ Fishing_NotEvenNibble, // FISHING_NO_BITE
+ Fishing_GotAway, // FISHING_GOT_AWAY
+ Fishing_NoMon, // FISHING_SHOW_RESULT
+ Fishing_PutRodAway,
+ Fishing_EndNoMon,
+};
+
void StartFishing(u8 rod)
{
u8 taskId = CreateTask(Task_Fishing, 0xFF);
@@ -1720,7 +1721,7 @@ static void Task_Fishing(u8 taskId)
;
}
-static bool8 Fishing1(struct Task *task)
+static bool8 Fishing_Init(struct Task *task)
{
ScriptContext2_Enable();
gPlayerAvatar.preventStep = TRUE;
@@ -1728,24 +1729,32 @@ static bool8 Fishing1(struct Task *task)
return FALSE;
}
-static bool8 Fishing2(struct Task *task)
+static bool8 Fishing_GetRodOut(struct Task *task)
{
struct ObjectEvent *playerObjEvent;
- const s16 arr1[] = {1, 1, 1};
- const s16 arr2[] = {1, 3, 6};
+ const s16 minRounds1[] = {
+ [OLD_ROD] = 1,
+ [GOOD_ROD] = 1,
+ [SUPER_ROD] = 1
+ };
+ const s16 minRounds2[] = {
+ [OLD_ROD] = 1,
+ [GOOD_ROD] = 3,
+ [SUPER_ROD] = 6
+ };
task->tRoundsPlayed = 0;
- task->tMinRoundsRequired = arr1[task->tFishingRod] + (Random() % arr2[task->tFishingRod]);
+ task->tMinRoundsRequired = minRounds1[task->tFishingRod] + (Random() % minRounds2[task->tFishingRod]);
task->tPlayerGfxId = gObjectEvents[gPlayerAvatar.objectEventId].graphicsId;
playerObjEvent = &gObjectEvents[gPlayerAvatar.objectEventId];
ObjectEventClearHeldMovementIfActive(playerObjEvent);
- playerObjEvent->enableAnim = 1;
- sub_808C15C(playerObjEvent->facingDirection);
+ playerObjEvent->enableAnim = TRUE;
+ SetPlayerAvatarFishing(playerObjEvent->facingDirection);
task->tStep++;
return FALSE;
}
-static bool8 Fishing3(struct Task *task)
+static bool8 Fishing_WaitBeforeDots(struct Task *task)
{
AlignFishingAnimationFrames();
@@ -1756,7 +1765,7 @@ static bool8 Fishing3(struct Task *task)
return FALSE;
}
-static bool8 Fishing4(struct Task *task)
+static bool8 Fishing_InitDots(struct Task *task)
{
u32 randVal;
@@ -1774,8 +1783,7 @@ static bool8 Fishing4(struct Task *task)
return TRUE;
}
-// Play a round of the dot game
-static bool8 Fishing5(struct Task *task)
+static bool8 Fishing_ShowDots(struct Task *task)
{
const u8 dot[] = _("·");
@@ -1810,8 +1818,7 @@ static bool8 Fishing5(struct Task *task)
}
}
-// Determine if fish bites
-static bool8 Fishing6(struct Task *task)
+static bool8 Fishing_CheckForBite(struct Task *task)
{
bool8 bite;
@@ -1831,34 +1838,25 @@ static bool8 Fishing6(struct Task *task)
if (ability == ABILITY_SUCTION_CUPS || ability == ABILITY_STICKY_HOLD)
{
if (Random() % 100 > 14)
- {
bite = TRUE;
- }
}
}
if (!bite)
{
if (Random() & 1)
- {
task->tStep = FISHING_NO_BITE;
- }
else
- {
bite = TRUE;
- }
}
if (bite == TRUE)
- {
StartSpriteAnim(&gSprites[gPlayerAvatar.spriteId], GetFishingBiteDirectionAnimNum(GetPlayerFacingDirection()));
- }
}
return TRUE;
}
-// Oh! A Bite!
-static bool8 Fishing7(struct Task *task)
+static bool8 Fishing_GotBite(struct Task *task)
{
AlignFishingAnimationFrames();
AddTextPrinterParameterized(0, 1, gText_OhABite, 0, 17, 0, NULL);
@@ -1868,9 +1866,13 @@ static bool8 Fishing7(struct Task *task)
}
// We have a bite. Now, wait for the player to press A, or the timer to expire.
-static bool8 Fishing8(struct Task *task)
+static bool8 Fishing_WaitForA(struct Task *task)
{
- const s16 reelTimeouts[3] = {36, 33, 30};
+ const s16 reelTimeouts[3] = {
+ [OLD_ROD] = 36,
+ [GOOD_ROD] = 33,
+ [SUPER_ROD] = 30
+ };
AlignFishingAnimationFrames();
task->tFrameCounter++;
@@ -1882,13 +1884,13 @@ static bool8 Fishing8(struct Task *task)
}
// Determine if we're going to play the dot game again
-static bool8 Fishing9(struct Task *task)
+static bool8 Fishing_CheckMoreDots(struct Task *task)
{
- const s16 arr[][2] =
+ const s16 moreDotsChance[][2] =
{
- {0, 0},
- {40, 10},
- {70, 30}
+ [OLD_ROD] = {0, 0},
+ [GOOD_ROD] = {40, 10},
+ [SUPER_ROD] = {70, 30}
};
AlignFishingAnimationFrames();
@@ -1902,13 +1904,13 @@ static bool8 Fishing9(struct Task *task)
// probability of having to play another round
s16 probability = Random() % 100;
- if (arr[task->tFishingRod][task->tRoundsPlayed] > probability)
+ if (moreDotsChance[task->tFishingRod][task->tRoundsPlayed] > probability)
task->tStep = FISHING_START_ROUND;
}
return FALSE;
}
-static bool8 Fishing10(struct Task *task)
+static bool8 Fishing_MonOnHook(struct Task *task)
{
AlignFishingAnimationFrames();
FillWindowPixelBuffer(0, PIXEL_FILL(1));
@@ -1918,7 +1920,7 @@ static bool8 Fishing10(struct Task *task)
return FALSE;
}
-static bool8 Fishing11(struct Task *task)
+static bool8 Fishing_StartEncounter(struct Task *task)
{
if (task->tFrameCounter == 0)
AlignFishingAnimationFrames();
@@ -1934,7 +1936,7 @@ static bool8 Fishing11(struct Task *task)
ObjectEventSetGraphicsId(playerObjEvent, task->tPlayerGfxId);
ObjectEventTurn(playerObjEvent, playerObjEvent->movementDirection);
if (gPlayerAvatar.flags & PLAYER_AVATAR_FLAG_SURFING)
- sub_8155604(gObjectEvents[gPlayerAvatar.objectEventId].fieldEffectSpriteId, 0, 0);
+ SetSurfBobWhileFishingState(gObjectEvents[gPlayerAvatar.objectEventId].fieldEffectSpriteId, 0, 0);
gSprites[gPlayerAvatar.spriteId].pos2.x = 0;
gSprites[gPlayerAvatar.spriteId].pos2.y = 0;
ClearDialogWindowAndFrame(0, TRUE);
@@ -1948,14 +1950,13 @@ static bool8 Fishing11(struct Task *task)
gPlayerAvatar.preventStep = FALSE;
ScriptContext2_Disable();
FishingWildEncounter(task->tFishingRod);
- sub_80ED950(1);
+ RecordFishingAttemptForTV(TRUE);
DestroyTask(FindTaskIdByFunc(Task_Fishing));
}
return FALSE;
}
-// Not even a nibble
-static bool8 Fishing12(struct Task *task)
+static bool8 Fishing_NotEvenNibble(struct Task *task)
{
AlignFishingAnimationFrames();
StartSpriteAnim(&gSprites[gPlayerAvatar.spriteId], GetFishingNoCatchDirectionAnimNum(GetPlayerFacingDirection()));
@@ -1965,8 +1966,7 @@ static bool8 Fishing12(struct Task *task)
return TRUE;
}
-// It got away
-static bool8 Fishing13(struct Task *task)
+static bool8 Fishing_GotAway(struct Task *task)
{
AlignFishingAnimationFrames();
StartSpriteAnim(&gSprites[gPlayerAvatar.spriteId], GetFishingNoCatchDirectionAnimNum(GetPlayerFacingDirection()));
@@ -1976,15 +1976,14 @@ static bool8 Fishing13(struct Task *task)
return TRUE;
}
-// Wait one second
-static bool8 Fishing14(struct Task *task)
+static bool8 Fishing_NoMon(struct Task *task)
{
AlignFishingAnimationFrames();
task->tStep++;
return FALSE;
}
-static bool8 Fishing15(struct Task *task)
+static bool8 Fishing_PutRodAway(struct Task *task)
{
AlignFishingAnimationFrames();
if (gSprites[gPlayerAvatar.spriteId].animEnded)
@@ -1994,7 +1993,7 @@ static bool8 Fishing15(struct Task *task)
ObjectEventSetGraphicsId(playerObjEvent, task->tPlayerGfxId);
ObjectEventTurn(playerObjEvent, playerObjEvent->movementDirection);
if (gPlayerAvatar.flags & PLAYER_AVATAR_FLAG_SURFING)
- sub_8155604(gObjectEvents[gPlayerAvatar.objectEventId].fieldEffectSpriteId, 0, 0);
+ SetSurfBobWhileFishingState(gObjectEvents[gPlayerAvatar.objectEventId].fieldEffectSpriteId, 0, 0);
gSprites[gPlayerAvatar.spriteId].pos2.x = 0;
gSprites[gPlayerAvatar.spriteId].pos2.y = 0;
task->tStep++;
@@ -2002,7 +2001,7 @@ static bool8 Fishing15(struct Task *task)
return FALSE;
}
-static bool8 Fishing16(struct Task *task)
+static bool8 Fishing_EndNoMon(struct Task *task)
{
RunTextPrinters();
if (!IsTextPrinterActive(0))
@@ -2011,7 +2010,7 @@ static bool8 Fishing16(struct Task *task)
ScriptContext2_Disable();
UnfreezeObjectEvents();
ClearDialogWindowAndFrame(0, TRUE);
- sub_80ED950(0);
+ RecordFishingAttemptForTV(FALSE);
DestroyTask(FindTaskIdByFunc(Task_Fishing));
}
return FALSE;
@@ -2053,7 +2052,7 @@ static void AlignFishingAnimationFrames(void)
if (animType == 10 || animType == 11)
playerSprite->pos2.y = 8;
if (gPlayerAvatar.flags & PLAYER_AVATAR_FLAG_SURFING)
- sub_8155604(gObjectEvents[gPlayerAvatar.objectEventId].fieldEffectSpriteId, 1, playerSprite->pos2.y);
+ SetSurfBobWhileFishingState(gObjectEvents[gPlayerAvatar.objectEventId].fieldEffectSpriteId, 1, playerSprite->pos2.y);
}
void sub_808D074(u8 a0)
diff --git a/src/field_region_map.c b/src/field_region_map.c
index 57f95f93e..fc6f0fa76 100644
--- a/src/field_region_map.c
+++ b/src/field_region_map.c
@@ -116,7 +116,7 @@ static void MCB2_InitRegionMapRegisters(void)
InitWindows(sFieldRegionMapWindowTemplates);
DeactivateAllTextPrinters();
LoadUserWindowBorderGfx(0, 0x27, 0xd0);
- clear_scheduled_bg_copies_to_vram();
+ ClearScheduledBgCopiesToVram();
SetMainCallback2(MCB2_FieldUpdateRegionMap);
SetVBlankCallback(VBCB_FieldUpdateRegionMap);
}
@@ -134,7 +134,7 @@ static void MCB2_FieldUpdateRegionMap(void)
AnimateSprites();
BuildOamBuffer();
UpdatePaletteFade();
- do_scheduled_bg_tilemap_copies_to_vram();
+ DoScheduledBgTilemapCopiesToVram();
}
static void FieldUpdateRegionMap(void)
@@ -153,7 +153,7 @@ static void FieldUpdateRegionMap(void)
DrawStdFrameWithCustomTileAndPalette(1, 0, 0x27, 0xd);
offset = GetStringCenterAlignXOffset(1, gText_Hoenn, 0x38);
AddTextPrinterParameterized(1, 1, gText_Hoenn, offset, 1, 0, NULL);
- schedule_bg_copy_tilemap_to_vram(0);
+ ScheduleBgCopyTilemapToVram(0);
DrawStdFrameWithCustomTileAndPalette(0, 0, 0x27, 0xd);
PrintRegionMapSecName();
BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, RGB_BLACK);
@@ -208,7 +208,7 @@ static void PrintRegionMapSecName(void)
{
FillWindowPixelBuffer(0, PIXEL_FILL(1));
AddTextPrinterParameterized(0, 1, sFieldRegionMapHandler->regionMap.mapSecName, 0, 1, 0, NULL);
- schedule_bg_copy_tilemap_to_vram(0);
+ ScheduleBgCopyTilemapToVram(0);
}
else
{
diff --git a/src/field_screen_effect.c b/src/field_screen_effect.c
index ea9429ce8..9becd2166 100644
--- a/src/field_screen_effect.c
+++ b/src/field_screen_effect.c
@@ -12,6 +12,7 @@
#include "field_special_scene.h"
#include "field_weather.h"
#include "gpu_regs.h"
+#include "io_reg.h"
#include "link.h"
#include "link_rfu.h"
#include "load_save.h"
@@ -34,18 +35,14 @@
#include "trainer_hill.h"
#include "fldeff.h"
-extern const u16 gOrbEffectBackgroundLayerFlags[];
-
// This file's functions.
-static void sub_8080B9C(u8);
static void Task_ExitNonAnimDoor(u8);
static void Task_ExitNonDoor(u8);
-static void task0A_fade_n_map_maybe(u8);
-static void sub_808115C(u8);
+static void Task_DoContestHallWarp(u8);
static void FillPalBufferWhite(void);
static void Task_ExitDoor(u8);
static bool32 WaitForWeatherFadeIn(void);
-static void task0A_mpl_807E31C(u8 taskId);
+static void Task_TeleportTileWarpExit(u8 taskId);
static void Task_WarpAndLoadMap(u8 taskId);
static void Task_DoDoorWarp(u8 taskId);
static void Task_EnableScriptAfterMusicFade(u8 taskId);
@@ -162,7 +159,7 @@ static void Task_ReturnToFieldCableLink(u8 taskId)
switch (task->data[0])
{
case 0:
- task->data[1] = sub_80B3050();
+ task->data[1] = CreateTask_ReestablishCableClubLink();
task->data[0]++;
break;
case 1:
@@ -197,14 +194,14 @@ static void Task_ReturnToFieldWirelessLink(u8 taskId)
switch (task->data[0])
{
case 0:
- sub_800ADF8();
+ SetLinkStandbyCallback();
task->data[0]++;
break;
case 1:
if (!IsLinkTaskFinished())
{
if (++task->data[1] > 1800)
- sub_8011170(0x6000);
+ GetLinkmanErrorParams(0x6000);
}
else
{
@@ -215,7 +212,7 @@ static void Task_ReturnToFieldWirelessLink(u8 taskId)
case 2:
if (WaitForWeatherFadeIn() == TRUE)
{
- sub_8009F18();
+ StartSendingKeysToLink();
ScriptContext2_Disable();
DestroyTask(taskId);
}
@@ -230,7 +227,7 @@ void Task_ReturnToFieldRecordMixing(u8 taskId)
switch (task->data[0])
{
case 0:
- sub_800ADF8();
+ SetLinkStandbyCallback();
task->data[0]++;
break;
case 1:
@@ -240,7 +237,7 @@ void Task_ReturnToFieldRecordMixing(u8 taskId)
}
break;
case 2:
- sub_8009F18();
+ StartSendingKeysToLink();
ResetAllMultiplayerState();
ScriptContext2_Disable();
DestroyTask(taskId);
@@ -291,19 +288,19 @@ void FieldCB_WarpExitFadeFromWhite(void)
void FieldCB_WarpExitFadeFromBlack(void)
{
- if (!sub_81D6534()) // sub_81D6534 always returns false
+ if (!OnTrainerHillEReaderChallengeFloor()) // always false
Overworld_PlaySpecialMapMusic();
FadeInFromBlack();
SetUpWarpExitTask();
ScriptContext2_Enable();
}
-static void FieldCB_TeleportWarpExit(void)
+static void FieldCB_TeleportTileWarpExit(void)
{
Overworld_PlaySpecialMapMusic();
WarpFadeInScreen();
- PlaySE(SE_TK_WARPOUT);
- CreateTask(task0A_mpl_807E31C, 10);
+ PlaySE(SE_WARP_OUT);
+ CreateTask(Task_TeleportTileWarpExit, 10);
ScriptContext2_Enable();
}
@@ -311,10 +308,10 @@ static void FieldCB_MossdeepGymWarpExit(void)
{
Overworld_PlaySpecialMapMusic();
WarpFadeInScreen();
- PlaySE(SE_TK_WARPOUT);
+ PlaySE(SE_WARP_OUT);
CreateTask(Task_ExitNonDoor, 10);
ScriptContext2_Enable();
- sub_8085540(0xE);
+ SetObjectEventLoadFlag((~SKIP_OBJECT_EVENT_LOAD) & 0xF);
}
static void Task_ExitDoor(u8 taskId)
@@ -490,7 +487,7 @@ void DoWarp(void)
TryFadeOutOldMapMusic();
WarpFadeOutScreen();
PlayRainStoppingSoundEffect();
- PlaySE(SE_KAIDAN);
+ PlaySE(SE_EXIT);
gFieldCallback = FieldCB_DefaultWarpExit;
CreateTask(Task_WarpAndLoadMap, 10);
}
@@ -546,24 +543,25 @@ void DoLavaridgeGym1FWarp(void)
StartLavaridgeGym1FWarp(10);
}
-void DoTeleportWarp(void)
+// Warp from a teleporting tile, e.g. in Aqua Hideout (For the move Teleport see FldEff_TeleportWarpOut)
+void DoTeleportTileWarp(void)
{
ScriptContext2_Enable();
TryFadeOutOldMapMusic();
WarpFadeOutScreen();
- PlaySE(SE_TK_WARPIN);
+ PlaySE(SE_WARP_IN);
CreateTask(Task_WarpAndLoadMap, 10);
- gFieldCallback = FieldCB_TeleportWarpExit;
+ gFieldCallback = FieldCB_TeleportTileWarpExit;
}
void DoMossdeepGymWarp(void)
{
- sub_8085540(1);
+ SetObjectEventLoadFlag(SKIP_OBJECT_EVENT_LOAD);
ScriptContext2_Enable();
SaveObjectEvents();
TryFadeOutOldMapMusic();
WarpFadeOutScreen();
- PlaySE(SE_TK_WARPIN);
+ PlaySE(SE_WARP_IN);
CreateTask(Task_WarpAndLoadMap, 10);
gFieldCallback = FieldCB_MossdeepGymWarpExit;
}
@@ -576,19 +574,21 @@ void DoPortholeWarp(void)
gFieldCallback = FieldCB_ShowPortholeView;
}
-static void sub_80AF8E0(u8 taskId)
+#define tState data[0]
+
+static void Task_DoCableClubWarp(u8 taskId)
{
struct Task *task = &gTasks[taskId];
- switch (task->data[0])
+ switch (task->tState)
{
case 0:
ScriptContext2_Enable();
- task->data[0]++;
+ task->tState++;
break;
case 1:
if (!PaletteFadeActive() && BGMusicStopped())
- task->data[0]++;
+ task->tState++;
break;
case 2:
WarpIntoMap();
@@ -598,13 +598,15 @@ static void sub_80AF8E0(u8 taskId)
}
}
+#undef tState
+
void DoCableClubWarp(void)
{
ScriptContext2_Enable();
TryFadeOutOldMapMusic();
WarpFadeOutScreen();
- PlaySE(SE_KAIDAN);
- CreateTask(sub_80AF8E0, 10);
+ PlaySE(SE_EXIT);
+ CreateTask(Task_DoCableClubWarp, 10);
}
static void Task_ReturnToWorldFromLinkRoom(u8 taskId)
@@ -617,13 +619,13 @@ static void Task_ReturnToWorldFromLinkRoom(u8 taskId)
ClearLinkCallback_2();
FadeScreen(FADE_TO_BLACK, 0);
TryFadeOutOldMapMusic();
- PlaySE(SE_KAIDAN);
+ PlaySE(SE_EXIT);
data[0]++;
break;
case 1:
if (!PaletteFadeActive() && BGMusicStopped())
{
- sub_800AC34();
+ SetCloseLinkCallback();
data[0]++;
}
break;
@@ -727,7 +729,7 @@ static void Task_DoDoorWarp(u8 taskId)
}
}
-static void task0A_fade_n_map_maybe(u8 taskId)
+static void Task_DoContestHallWarp(u8 taskId)
{
struct Task *task = &gTasks[taskId];
@@ -746,7 +748,7 @@ static void task0A_fade_n_map_maybe(u8 taskId)
break;
case 2:
WarpIntoMap();
- SetMainCallback2(sub_8086024);
+ SetMainCallback2(CB2_ReturnToFieldContestHall);
DestroyTask(taskId);
break;
}
@@ -758,9 +760,9 @@ void DoContestHallWarp(void)
TryFadeOutOldMapMusic();
WarpFadeOutScreen();
PlayRainStoppingSoundEffect();
- PlaySE(SE_KAIDAN);
+ PlaySE(SE_EXIT);
gFieldCallback = FieldCB_WarpExitFadeFromBlack;
- CreateTask(task0A_fade_n_map_maybe, 10);
+ CreateTask(Task_DoContestHallWarp, 10);
}
static void SetFlashScanlineEffectWindowBoundary(u16 *dest, u32 y, s32 left, s32 right)
@@ -976,7 +978,7 @@ void AnimateFlash(u8 flashLevel)
u8 value = 0;
if (!flashLevel)
value = 1;
- sub_80AFFDC(120, 80, sFlashLevelPixelRadii[curFlashLevel], sFlashLevelPixelRadii[flashLevel], value, 1);
+ sub_80AFFDC(DISPLAY_WIDTH / 2, DISPLAY_HEIGHT / 2, sFlashLevelPixelRadii[curFlashLevel], sFlashLevelPixelRadii[flashLevel], value, 1);
sub_80AFFB8();
ScriptContext2_Enable();
}
@@ -985,18 +987,18 @@ void WriteFlashScanlineEffectBuffer(u8 flashLevel)
{
if (flashLevel)
{
- SetFlashScanlineEffectWindowBoundaries(&gScanlineEffectRegBuffers[0][0], 120, 80, sFlashLevelPixelRadii[flashLevel]);
+ SetFlashScanlineEffectWindowBoundaries(&gScanlineEffectRegBuffers[0][0], DISPLAY_WIDTH / 2, DISPLAY_HEIGHT / 2, sFlashLevelPixelRadii[flashLevel]);
CpuFastSet(&gScanlineEffectRegBuffers[0], &gScanlineEffectRegBuffers[1], 480);
}
}
void WriteBattlePyramidViewScanlineEffectBuffer(void)
{
- SetFlashScanlineEffectWindowBoundaries(&gScanlineEffectRegBuffers[0][0], 120, 80, gSaveBlock2Ptr->frontier.pyramidLightRadius);
+ SetFlashScanlineEffectWindowBoundaries(&gScanlineEffectRegBuffers[0][0], DISPLAY_WIDTH / 2, DISPLAY_HEIGHT / 2, gSaveBlock2Ptr->frontier.pyramidLightRadius);
CpuFastSet(&gScanlineEffectRegBuffers[0], &gScanlineEffectRegBuffers[1], 480);
}
-static void task0A_mpl_807E31C(u8 taskId)
+static void Task_TeleportTileWarpExit(u8 taskId)
{
switch (gTasks[taskId].data[0])
{
@@ -1026,7 +1028,7 @@ static void sub_80B01BC(u8 taskId)
case 0:
FreezeObjectEvents();
ScriptContext2_Enable();
- PlaySE(SE_TK_WARPIN);
+ PlaySE(SE_WARP_IN);
sub_808D1C8();
task->data[0]++;
break;
@@ -1053,7 +1055,7 @@ void sub_80B0244(void)
{
ScriptContext2_Enable();
CreateTask(Task_WarpAndLoadMap, 10);
- gFieldCallback = FieldCB_TeleportWarpExit;
+ gFieldCallback = FieldCB_TeleportTileWarpExit;
}
void sub_80B0268(void)
@@ -1137,7 +1139,7 @@ static void Task_OrbEffect(u8 taskId)
SetGpuReg(REG_OFFSET_WININ, WININ_WIN0_BG_ALL | WININ_WIN0_OBJ | WININ_WIN0_CLR);
SetGpuReg(REG_OFFSET_WINOUT, WINOUT_WIN01_BG1 | WINOUT_WIN01_BG2 | WINOUT_WIN01_BG3 | WINOUT_WIN01_OBJ);
SetBgTilemapPalette(0, 0, 0, 0x1E, 0x14, 0xF);
- schedule_bg_copy_tilemap_to_vram(0);
+ ScheduleBgCopyTilemapToVram(0);
SetOrbFlashScanlineEffectWindowBoundaries(&gScanlineEffectRegBuffers[0][0], tCenterX, tCenterY, 1);
CpuFastSet(&gScanlineEffectRegBuffers[0], &gScanlineEffectRegBuffers[1], 480);
ScanlineEffect_SetParams(sFlashEffectParams);
diff --git a/src/field_special_scene.c b/src/field_special_scene.c
index 540bcd1d4..bd6c833af 100644
--- a/src/field_special_scene.c
+++ b/src/field_special_scene.c
@@ -17,7 +17,6 @@
#include "constants/event_object_movement.h"
#include "constants/field_specials.h"
#include "constants/songs.h"
-#include "constants/vars.h"
#include "constants/metatile_labels.h"
#define SECONDS(value) ((signed) (60.0 * value + 0.5))
@@ -74,11 +73,11 @@ void Task_Truck1(u8 taskId)
s16 box1, box2, box3;
box1 = GetTruckBoxMovement(data[0] + 30) * 4; // top box.
- sub_808E82C(1, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, 3 - cameraXpan, box1 + 3);
+ SetObjectEventSpritePosByLocalIdAndMap(1, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, 3 - cameraXpan, box1 + 3);
box2 = GetTruckBoxMovement(data[0]) * 2; // bottom left box.
- sub_808E82C(2, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, -cameraXpan, box2 - 3);
+ SetObjectEventSpritePosByLocalIdAndMap(2, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, -cameraXpan, box2 - 3);
box3 = GetTruckBoxMovement(data[0]) * 4; // bottom right box.
- sub_808E82C(3, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, -3 - cameraXpan, box3);
+ SetObjectEventSpritePosByLocalIdAndMap(3, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, -3 - cameraXpan, box3);
if (++data[0] == SECONDS(500)) // this will never run
data[0] = 0; // reset the timer if it gets stuck.
@@ -117,11 +116,11 @@ void Task_Truck2(u8 taskId)
cameraYpan = GetTruckCameraBobbingY(data[2]);
SetCameraPanning(cameraXpan, cameraYpan);
box1 = GetTruckBoxMovement(data[2] + 30) * 4;
- sub_808E82C(1, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, 3 - cameraXpan, box1 + 3);
+ SetObjectEventSpritePosByLocalIdAndMap(1, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, 3 - cameraXpan, box1 + 3);
box2 = GetTruckBoxMovement(data[2]) * 2;
- sub_808E82C(2, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, -cameraXpan, box2 - 3);
+ SetObjectEventSpritePosByLocalIdAndMap(2, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, -cameraXpan, box2 - 3);
box3 = GetTruckBoxMovement(data[2]) * 4;
- sub_808E82C(3, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, -3 - cameraXpan, box3);
+ SetObjectEventSpritePosByLocalIdAndMap(3, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, -3 - cameraXpan, box3);
}
}
@@ -148,9 +147,9 @@ static void Task_Truck3(u8 taskId)
cameraXpan = gTruckCamera_HorizontalTable[data[1]];
cameraYpan = 0;
SetCameraPanning(cameraXpan, 0);
- sub_808E82C(1, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, 3 - cameraXpan, cameraYpan + 3);
- sub_808E82C(2, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, -cameraXpan, cameraYpan - 3);
- sub_808E82C(3, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, -3 - cameraXpan, cameraYpan);
+ SetObjectEventSpritePosByLocalIdAndMap(1, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, 3 - cameraXpan, cameraYpan + 3);
+ SetObjectEventSpritePosByLocalIdAndMap(2, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, -cameraXpan, cameraYpan - 3);
+ SetObjectEventSpritePosByLocalIdAndMap(3, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, -3 - cameraXpan, cameraYpan);
}
}
@@ -172,7 +171,7 @@ void Task_HandleTruckSequence(u8 taskId)
data[1] = 0; // reset the timer.
data[2] = CreateTask(Task_Truck1, 0xA);
data[0] = 1; // run the next case.
- PlaySE(SE_TRACK_MOVE);
+ PlaySE(SE_TRUCK_MOVE);
}
break;
case 1:
@@ -192,7 +191,7 @@ void Task_HandleTruckSequence(u8 taskId)
DestroyTask(data[2]);
data[3] = CreateTask(Task_Truck2, 0xA);
data[0] = 3;
- PlaySE(SE_TRACK_STOP);
+ PlaySE(SE_TRUCK_STOP);
}
break;
case 3:
@@ -207,7 +206,7 @@ void Task_HandleTruckSequence(u8 taskId)
data[1]++;
if (data[1] == 90)
{
- PlaySE(SE_TRACK_HAIKI);
+ PlaySE(SE_TRUCK_UNLOAD);
data[1] = 0;
data[0] = 5;
}
@@ -216,11 +215,11 @@ void Task_HandleTruckSequence(u8 taskId)
data[1]++;
if (data[1] == 120)
{
- MapGridSetMetatileIdAt(11, 8, METATILE_ID(InsideOfTruck, ExitLight_Top));
- MapGridSetMetatileIdAt(11, 9, METATILE_ID(InsideOfTruck, ExitLight_Mid));
- MapGridSetMetatileIdAt(11, 10, METATILE_ID(InsideOfTruck, ExitLight_Bottom));
+ MapGridSetMetatileIdAt(11, 8, METATILE_InsideOfTruck_ExitLight_Top);
+ MapGridSetMetatileIdAt(11, 9, METATILE_InsideOfTruck_ExitLight_Mid);
+ MapGridSetMetatileIdAt(11, 10, METATILE_InsideOfTruck_ExitLight_Bottom);
DrawWholeMapView();
- PlaySE(SE_TRACK_DOOR);
+ PlaySE(SE_TRUCK_DOOR);
DestroyTask(taskId);
ScriptContext2_Disable();
}
@@ -230,9 +229,9 @@ void Task_HandleTruckSequence(u8 taskId)
void ExecuteTruckSequence(void)
{
- MapGridSetMetatileIdAt(11, 8, METATILE_ID(InsideOfTruck, DoorClosedFloor_Top));
- MapGridSetMetatileIdAt(11, 9, METATILE_ID(InsideOfTruck, DoorClosedFloor_Mid));
- MapGridSetMetatileIdAt(11, 10, METATILE_ID(InsideOfTruck, DoorClosedFloor_Bottom));
+ MapGridSetMetatileIdAt(11, 8, METATILE_InsideOfTruck_DoorClosedFloor_Top);
+ MapGridSetMetatileIdAt(11, 9, METATILE_InsideOfTruck_DoorClosedFloor_Mid);
+ MapGridSetMetatileIdAt(11, 10, METATILE_InsideOfTruck_DoorClosedFloor_Bottom);
DrawWholeMapView();
ScriptContext2_Enable();
CpuFastFill(0, gPlttBufferFaded, 0x400);
@@ -243,9 +242,9 @@ void EndTruckSequence(u8 taskId)
{
if (!FuncIsActiveTask(Task_HandleTruckSequence))
{
- sub_808E82C(1, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, 3, 3);
- sub_808E82C(2, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, 0, -3);
- sub_808E82C(3, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, -3, 0);
+ SetObjectEventSpritePosByLocalIdAndMap(1, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, 3, 3);
+ SetObjectEventSpritePosByLocalIdAndMap(2, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, 0, -3);
+ SetObjectEventSpritePosByLocalIdAndMap(3, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, -3, 0);
}
}
diff --git a/src/field_specials.c b/src/field_specials.c
index 9f1f12a47..57b750145 100644
--- a/src/field_specials.c
+++ b/src/field_specials.c
@@ -35,7 +35,6 @@
#include "rtc.h"
#include "script.h"
#include "script_menu.h"
-#include "slot_machine.h"
#include "sound.h"
#include "starter_choose.h"
#include "string_util.h"
@@ -59,11 +58,11 @@
#include "constants/mevent.h"
#include "constants/tv.h"
#include "constants/script_menu.h"
+#include "constants/slot_machine.h"
#include "constants/songs.h"
#include "constants/species.h"
#include "constants/moves.h"
#include "constants/party_menu.h"
-#include "constants/vars.h"
#include "constants/battle_frontier.h"
#include "constants/weather.h"
#include "constants/metatile_labels.h"
@@ -656,9 +655,9 @@ void MauvilleGymPressSwitch(void)
for (i = 0; i < ARRAY_COUNT(sMauvilleGymSwitchCoords); i++)
{
if (i == gSpecialVar_0x8004)
- MapGridSetMetatileIdAt(sMauvilleGymSwitchCoords[i].x, sMauvilleGymSwitchCoords[i].y, METATILE_ID(MauvilleGym, PressedSwitch));
+ MapGridSetMetatileIdAt(sMauvilleGymSwitchCoords[i].x, sMauvilleGymSwitchCoords[i].y, METATILE_MauvilleGym_PressedSwitch);
else
- MapGridSetMetatileIdAt(sMauvilleGymSwitchCoords[i].x, sMauvilleGymSwitchCoords[i].y, METATILE_ID(MauvilleGym, RaisedSwitch));
+ MapGridSetMetatileIdAt(sMauvilleGymSwitchCoords[i].x, sMauvilleGymSwitchCoords[i].y, METATILE_MauvilleGym_RaisedSwitch);
}
}
@@ -673,83 +672,83 @@ void MauvilleGymSetDefaultBarriers(void)
{
switch (MapGridGetMetatileIdAt(x, y))
{
- case METATILE_ID(MauvilleGym, GreenBeamH1_On):
- MapGridSetMetatileIdAt(x, y, METATILE_ID(MauvilleGym, GreenBeamH1_Off));
+ case METATILE_MauvilleGym_GreenBeamH1_On:
+ MapGridSetMetatileIdAt(x, y, METATILE_MauvilleGym_GreenBeamH1_Off);
break;
- case METATILE_ID(MauvilleGym, GreenBeamH2_On):
- MapGridSetMetatileIdAt(x, y, METATILE_ID(MauvilleGym, GreenBeamH2_Off));
+ case METATILE_MauvilleGym_GreenBeamH2_On:
+ MapGridSetMetatileIdAt(x, y, METATILE_MauvilleGym_GreenBeamH2_Off);
break;
- case METATILE_ID(MauvilleGym, GreenBeamH3_On):
- MapGridSetMetatileIdAt(x, y, METATILE_ID(MauvilleGym, GreenBeamH3_Off));
+ case METATILE_MauvilleGym_GreenBeamH3_On:
+ MapGridSetMetatileIdAt(x, y, METATILE_MauvilleGym_GreenBeamH3_Off);
break;
- case METATILE_ID(MauvilleGym, GreenBeamH4_On):
- MapGridSetMetatileIdAt(x, y, METATILE_ID(MauvilleGym, GreenBeamH4_Off));
+ case METATILE_MauvilleGym_GreenBeamH4_On:
+ MapGridSetMetatileIdAt(x, y, METATILE_MauvilleGym_GreenBeamH4_Off);
break;
- case METATILE_ID(MauvilleGym, GreenBeamH1_Off):
- MapGridSetMetatileIdAt(x, y, METATILE_ID(MauvilleGym, GreenBeamH1_On));
+ case METATILE_MauvilleGym_GreenBeamH1_Off:
+ MapGridSetMetatileIdAt(x, y, METATILE_MauvilleGym_GreenBeamH1_On);
break;
- case METATILE_ID(MauvilleGym, GreenBeamH2_Off):
- MapGridSetMetatileIdAt(x, y, METATILE_ID(MauvilleGym, GreenBeamH2_On));
+ case METATILE_MauvilleGym_GreenBeamH2_Off:
+ MapGridSetMetatileIdAt(x, y, METATILE_MauvilleGym_GreenBeamH2_On);
break;
- case METATILE_ID(MauvilleGym, GreenBeamH3_Off):
- MapGridSetMetatileIdAt(x, y, METATILE_ID(MauvilleGym, GreenBeamH3_On) | METATILE_COLLISION_MASK);
+ case METATILE_MauvilleGym_GreenBeamH3_Off:
+ MapGridSetMetatileIdAt(x, y, METATILE_MauvilleGym_GreenBeamH3_On | METATILE_COLLISION_MASK);
break;
- case METATILE_ID(MauvilleGym, GreenBeamH4_Off):
- MapGridSetMetatileIdAt(x, y, METATILE_ID(MauvilleGym, GreenBeamH4_On) | METATILE_COLLISION_MASK);
+ case METATILE_MauvilleGym_GreenBeamH4_Off:
+ MapGridSetMetatileIdAt(x, y, METATILE_MauvilleGym_GreenBeamH4_On | METATILE_COLLISION_MASK);
break;
- case METATILE_ID(MauvilleGym, RedBeamH1_On):
- MapGridSetMetatileIdAt(x, y, METATILE_ID(MauvilleGym, RedBeamH1_Off));
+ case METATILE_MauvilleGym_RedBeamH1_On:
+ MapGridSetMetatileIdAt(x, y, METATILE_MauvilleGym_RedBeamH1_Off);
break;
- case METATILE_ID(MauvilleGym, RedBeamH2_On):
- MapGridSetMetatileIdAt(x, y, METATILE_ID(MauvilleGym, RedBeamH2_Off));
+ case METATILE_MauvilleGym_RedBeamH2_On:
+ MapGridSetMetatileIdAt(x, y, METATILE_MauvilleGym_RedBeamH2_Off);
break;
- case METATILE_ID(MauvilleGym, RedBeamH3_On):
- MapGridSetMetatileIdAt(x, y, METATILE_ID(MauvilleGym, RedBeamH3_Off));
+ case METATILE_MauvilleGym_RedBeamH3_On:
+ MapGridSetMetatileIdAt(x, y, METATILE_MauvilleGym_RedBeamH3_Off);
break;
- case METATILE_ID(MauvilleGym, RedBeamH4_On):
- MapGridSetMetatileIdAt(x, y, METATILE_ID(MauvilleGym, RedBeamH4_Off));
+ case METATILE_MauvilleGym_RedBeamH4_On:
+ MapGridSetMetatileIdAt(x, y, METATILE_MauvilleGym_RedBeamH4_Off);
break;
- case METATILE_ID(MauvilleGym, RedBeamH1_Off):
- MapGridSetMetatileIdAt(x, y, METATILE_ID(MauvilleGym, RedBeamH1_On));
+ case METATILE_MauvilleGym_RedBeamH1_Off:
+ MapGridSetMetatileIdAt(x, y, METATILE_MauvilleGym_RedBeamH1_On);
break;
- case METATILE_ID(MauvilleGym, RedBeamH2_Off):
- MapGridSetMetatileIdAt(x, y, METATILE_ID(MauvilleGym, RedBeamH2_On));
+ case METATILE_MauvilleGym_RedBeamH2_Off:
+ MapGridSetMetatileIdAt(x, y, METATILE_MauvilleGym_RedBeamH2_On);
break;
- case METATILE_ID(MauvilleGym, RedBeamH3_Off):
- MapGridSetMetatileIdAt(x, y, METATILE_ID(MauvilleGym, RedBeamH3_On) | METATILE_COLLISION_MASK);
+ case METATILE_MauvilleGym_RedBeamH3_Off:
+ MapGridSetMetatileIdAt(x, y, METATILE_MauvilleGym_RedBeamH3_On | METATILE_COLLISION_MASK);
break;
- case METATILE_ID(MauvilleGym, RedBeamH4_Off):
- MapGridSetMetatileIdAt(x, y, METATILE_ID(MauvilleGym, RedBeamH4_On) | METATILE_COLLISION_MASK);
+ case METATILE_MauvilleGym_RedBeamH4_Off:
+ MapGridSetMetatileIdAt(x, y, METATILE_MauvilleGym_RedBeamH4_On | METATILE_COLLISION_MASK);
break;
- case METATILE_ID(MauvilleGym, GreenBeamV1_On):
- MapGridSetMetatileIdAt(x, y, METATILE_ID(MauvilleGym, PoleBottom_On) | METATILE_COLLISION_MASK);
+ case METATILE_MauvilleGym_GreenBeamV1_On:
+ MapGridSetMetatileIdAt(x, y, METATILE_MauvilleGym_PoleBottom_On | METATILE_COLLISION_MASK);
break;
- case METATILE_ID(MauvilleGym, GreenBeamV2_On):
- MapGridSetMetatileIdAt(x, y, METATILE_ID(MauvilleGym, FloorTile));
+ case METATILE_MauvilleGym_GreenBeamV2_On:
+ MapGridSetMetatileIdAt(x, y, METATILE_MauvilleGym_FloorTile);
break;
- case METATILE_ID(MauvilleGym, RedBeamV1_On):
- MapGridSetMetatileIdAt(x, y, METATILE_ID(MauvilleGym, PoleBottom_Off) | METATILE_COLLISION_MASK);
+ case METATILE_MauvilleGym_RedBeamV1_On:
+ MapGridSetMetatileIdAt(x, y, METATILE_MauvilleGym_PoleBottom_Off | METATILE_COLLISION_MASK);
break;
- case METATILE_ID(MauvilleGym, RedBeamV2_On):
- MapGridSetMetatileIdAt(x, y, METATILE_ID(MauvilleGym, FloorTile));
+ case METATILE_MauvilleGym_RedBeamV2_On:
+ MapGridSetMetatileIdAt(x, y, METATILE_MauvilleGym_FloorTile);
break;
- case METATILE_ID(MauvilleGym, PoleBottom_On):
- MapGridSetMetatileIdAt(x, y, METATILE_ID(MauvilleGym, GreenBeamV1_On) | METATILE_COLLISION_MASK);
+ case METATILE_MauvilleGym_PoleBottom_On:
+ MapGridSetMetatileIdAt(x, y, METATILE_MauvilleGym_GreenBeamV1_On | METATILE_COLLISION_MASK);
break;
- case METATILE_ID(MauvilleGym, FloorTile):
- if (MapGridGetMetatileIdAt(x, y - 1) == METATILE_ID(MauvilleGym, GreenBeamV1_On))
- MapGridSetMetatileIdAt(x, y, METATILE_ID(MauvilleGym, GreenBeamV2_On) | METATILE_COLLISION_MASK);
+ case METATILE_MauvilleGym_FloorTile:
+ if (MapGridGetMetatileIdAt(x, y - 1) == METATILE_MauvilleGym_GreenBeamV1_On)
+ MapGridSetMetatileIdAt(x, y, METATILE_MauvilleGym_GreenBeamV2_On | METATILE_COLLISION_MASK);
else
- MapGridSetMetatileIdAt(x, y, METATILE_ID(MauvilleGym, RedBeamV2_On) | METATILE_COLLISION_MASK);
+ MapGridSetMetatileIdAt(x, y, METATILE_MauvilleGym_RedBeamV2_On | METATILE_COLLISION_MASK);
break;
- case METATILE_ID(MauvilleGym, PoleBottom_Off):
- MapGridSetMetatileIdAt(x, y, METATILE_ID(MauvilleGym, RedBeamV1_On) | METATILE_COLLISION_MASK);
+ case METATILE_MauvilleGym_PoleBottom_Off:
+ MapGridSetMetatileIdAt(x, y, METATILE_MauvilleGym_RedBeamV1_On | METATILE_COLLISION_MASK);
break;
- case METATILE_ID(MauvilleGym, PoleTop_Off):
- MapGridSetMetatileIdAt(x, y, METATILE_ID(MauvilleGym, PoleTop_On) | METATILE_COLLISION_MASK);
+ case METATILE_MauvilleGym_PoleTop_Off:
+ MapGridSetMetatileIdAt(x, y, METATILE_MauvilleGym_PoleTop_On | METATILE_COLLISION_MASK);
break;
- case METATILE_ID(MauvilleGym, PoleTop_On):
- MapGridSetMetatileIdAt(x, y, METATILE_ID(MauvilleGym, PoleTop_Off));
+ case METATILE_MauvilleGym_PoleTop_On:
+ MapGridSetMetatileIdAt(x, y, METATILE_MauvilleGym_PoleTop_Off);
break;
}
}
@@ -763,7 +762,7 @@ void MauvilleGymDeactivatePuzzle(void)
const struct UCoords8 *switchCoords = sMauvilleGymSwitchCoords;
for (i = ARRAY_COUNT(sMauvilleGymSwitchCoords) - 1; i >= 0; i--)
{
- MapGridSetMetatileIdAt(switchCoords->x, switchCoords->y, METATILE_ID(MauvilleGym, PressedSwitch));
+ MapGridSetMetatileIdAt(switchCoords->x, switchCoords->y, METATILE_MauvilleGym_PressedSwitch);
switchCoords++;
}
for (y = 12; y < 24; y++)
@@ -772,42 +771,42 @@ void MauvilleGymDeactivatePuzzle(void)
{
switch (MapGridGetMetatileIdAt(x, y))
{
- case METATILE_ID(MauvilleGym, GreenBeamH1_On):
- MapGridSetMetatileIdAt(x, y, METATILE_ID(MauvilleGym, GreenBeamH1_Off));
+ case METATILE_MauvilleGym_GreenBeamH1_On:
+ MapGridSetMetatileIdAt(x, y, METATILE_MauvilleGym_GreenBeamH1_Off);
break;
- case METATILE_ID(MauvilleGym, GreenBeamH2_On):
- MapGridSetMetatileIdAt(x, y, METATILE_ID(MauvilleGym, GreenBeamH2_Off));
+ case METATILE_MauvilleGym_GreenBeamH2_On:
+ MapGridSetMetatileIdAt(x, y, METATILE_MauvilleGym_GreenBeamH2_Off);
break;
- case METATILE_ID(MauvilleGym, GreenBeamH3_On):
- MapGridSetMetatileIdAt(x, y, METATILE_ID(MauvilleGym, GreenBeamH3_Off));
+ case METATILE_MauvilleGym_GreenBeamH3_On:
+ MapGridSetMetatileIdAt(x, y, METATILE_MauvilleGym_GreenBeamH3_Off);
break;
- case METATILE_ID(MauvilleGym, GreenBeamH4_On):
- MapGridSetMetatileIdAt(x, y, METATILE_ID(MauvilleGym, GreenBeamH4_Off));
+ case METATILE_MauvilleGym_GreenBeamH4_On:
+ MapGridSetMetatileIdAt(x, y, METATILE_MauvilleGym_GreenBeamH4_Off);
break;
- case METATILE_ID(MauvilleGym, RedBeamH1_On):
- MapGridSetMetatileIdAt(x, y, METATILE_ID(MauvilleGym, RedBeamH1_Off));
+ case METATILE_MauvilleGym_RedBeamH1_On:
+ MapGridSetMetatileIdAt(x, y, METATILE_MauvilleGym_RedBeamH1_Off);
break;
- case METATILE_ID(MauvilleGym, RedBeamH2_On):
- MapGridSetMetatileIdAt(x, y, METATILE_ID(MauvilleGym, RedBeamH2_Off));
+ case METATILE_MauvilleGym_RedBeamH2_On:
+ MapGridSetMetatileIdAt(x, y, METATILE_MauvilleGym_RedBeamH2_Off);
break;
- case METATILE_ID(MauvilleGym, RedBeamH3_On):
- MapGridSetMetatileIdAt(x, y, METATILE_ID(MauvilleGym, RedBeamH3_Off));
+ case METATILE_MauvilleGym_RedBeamH3_On:
+ MapGridSetMetatileIdAt(x, y, METATILE_MauvilleGym_RedBeamH3_Off);
break;
- case METATILE_ID(MauvilleGym, RedBeamH4_On):
- MapGridSetMetatileIdAt(x, y, METATILE_ID(MauvilleGym, RedBeamH4_Off));
+ case METATILE_MauvilleGym_RedBeamH4_On:
+ MapGridSetMetatileIdAt(x, y, METATILE_MauvilleGym_RedBeamH4_Off);
break;
- case METATILE_ID(MauvilleGym, GreenBeamV1_On):
- MapGridSetMetatileIdAt(x, y, METATILE_ID(MauvilleGym, PoleBottom_On) | METATILE_COLLISION_MASK);
+ case METATILE_MauvilleGym_GreenBeamV1_On:
+ MapGridSetMetatileIdAt(x, y, METATILE_MauvilleGym_PoleBottom_On | METATILE_COLLISION_MASK);
break;
- case METATILE_ID(MauvilleGym, RedBeamV1_On):
- MapGridSetMetatileIdAt(x, y, METATILE_ID(MauvilleGym, PoleBottom_Off) | METATILE_COLLISION_MASK);
+ case METATILE_MauvilleGym_RedBeamV1_On:
+ MapGridSetMetatileIdAt(x, y, METATILE_MauvilleGym_PoleBottom_Off | METATILE_COLLISION_MASK);
break;
- case METATILE_ID(MauvilleGym, GreenBeamV2_On):
- case METATILE_ID(MauvilleGym, RedBeamV2_On):
- MapGridSetMetatileIdAt(x, y, METATILE_ID(MauvilleGym, FloorTile));
+ case METATILE_MauvilleGym_GreenBeamV2_On:
+ case METATILE_MauvilleGym_RedBeamV2_On:
+ MapGridSetMetatileIdAt(x, y, METATILE_MauvilleGym_FloorTile);
break;
- case METATILE_ID(MauvilleGym, PoleTop_On):
- MapGridSetMetatileIdAt(x, y, METATILE_ID(MauvilleGym, PoleTop_Off));
+ case METATILE_MauvilleGym_PoleTop_On:
+ MapGridSetMetatileIdAt(x, y, METATILE_MauvilleGym_PoleTop_Off);
break;
}
}
@@ -817,18 +816,18 @@ void MauvilleGymDeactivatePuzzle(void)
static const bool8 sSlidingDoorNextFrameDelay[] = {0, 1, 1, 1, 1};
static const u16 sPetalburgGymSlidingDoorMetatiles[] = {
- METATILE_ID(PetalburgGym, SlidingDoor_Frame0),
- METATILE_ID(PetalburgGym, SlidingDoor_Frame1),
- METATILE_ID(PetalburgGym, SlidingDoor_Frame2),
- METATILE_ID(PetalburgGym, SlidingDoor_Frame3),
- METATILE_ID(PetalburgGym, SlidingDoor_Frame4),
+ METATILE_PetalburgGym_SlidingDoor_Frame0,
+ METATILE_PetalburgGym_SlidingDoor_Frame1,
+ METATILE_PetalburgGym_SlidingDoor_Frame2,
+ METATILE_PetalburgGym_SlidingDoor_Frame3,
+ METATILE_PetalburgGym_SlidingDoor_Frame4,
};
void PetalburgGymSlideOpenRoomDoors(void)
{
sSlidingDoorNextFrameCounter = 0;
sSlidingDoorFrame = 0;
- PlaySE(SE_KI_GASYAN);
+ PlaySE(SE_UNLOCK);
CreateTask(Task_PetalburgGymSlideOpenRoomDoors, 8);
}
@@ -1096,30 +1095,30 @@ static void PCTurnOnEffect_1(s16 isPcTurnedOn, s8 dx, s8 dy)
{
if (gSpecialVar_0x8004 == PC_LOCATION_OTHER)
{
- tileId = METATILE_ID(Building, PC_Off);
+ tileId = METATILE_Building_PC_Off;
}
else if (gSpecialVar_0x8004 == PC_LOCATION_BRENDANS_HOUSE)
{
- tileId = METATILE_ID(BrendansMaysHouse, BrendanPC_Off);
+ tileId = METATILE_BrendansMaysHouse_BrendanPC_Off;
}
else if (gSpecialVar_0x8004 == PC_LOCATION_MAYS_HOUSE)
{
- tileId = METATILE_ID(BrendansMaysHouse, MayPC_Off);
+ tileId = METATILE_BrendansMaysHouse_MayPC_Off;
}
}
else
{
if (gSpecialVar_0x8004 == PC_LOCATION_OTHER)
{
- tileId = METATILE_ID(Building, PC_On);
+ tileId = METATILE_Building_PC_On;
}
else if (gSpecialVar_0x8004 == PC_LOCATION_BRENDANS_HOUSE)
{
- tileId = METATILE_ID(BrendansMaysHouse, BrendanPC_On);
+ tileId = METATILE_BrendansMaysHouse_BrendanPC_On;
}
else if (gSpecialVar_0x8004 == PC_LOCATION_MAYS_HOUSE)
{
- tileId = METATILE_ID(BrendansMaysHouse, MayPC_On);
+ tileId = METATILE_BrendansMaysHouse_MayPC_On;
}
}
MapGridSetMetatileIdAt(gSaveBlock1Ptr->pos.x + dx + 7, gSaveBlock1Ptr->pos.y + dy + 7, tileId | METATILE_COLLISION_MASK);
@@ -1153,15 +1152,15 @@ static void PCTurnOffEffect(void)
}
if (gSpecialVar_0x8004 == 0)
{
- tileId = METATILE_ID(Building, PC_Off);
+ tileId = METATILE_Building_PC_Off;
}
else if (gSpecialVar_0x8004 == 1)
{
- tileId = METATILE_ID(BrendansMaysHouse, BrendanPC_Off);
+ tileId = METATILE_BrendansMaysHouse_BrendanPC_Off;
}
else if (gSpecialVar_0x8004 == 2)
{
- tileId = METATILE_ID(BrendansMaysHouse, MayPC_Off);
+ tileId = METATILE_BrendansMaysHouse_MayPC_Off;
}
MapGridSetMetatileIdAt(gSaveBlock1Ptr->pos.x + dx + 7, gSaveBlock1Ptr->pos.y + dy + 7, tileId | METATILE_COLLISION_MASK);
DrawWholeMapView();
@@ -1196,13 +1195,13 @@ static void LotteryCornerComputerEffect(struct Task *task)
task->data[3] = 0;
if (task->data[4] != 0)
{
- MapGridSetMetatileIdAt(18, 8, METATILE_ID(Shop, Laptop1_Normal) | METATILE_COLLISION_MASK);
- MapGridSetMetatileIdAt(18, 9, METATILE_ID(Shop, Laptop2_Normal) | METATILE_COLLISION_MASK);
+ MapGridSetMetatileIdAt(18, 8, METATILE_Shop_Laptop1_Normal | METATILE_COLLISION_MASK);
+ MapGridSetMetatileIdAt(18, 9, METATILE_Shop_Laptop2_Normal | METATILE_COLLISION_MASK);
}
else
{
- MapGridSetMetatileIdAt(18, 8, METATILE_ID(Shop, Laptop1_Flash) | METATILE_COLLISION_MASK);
- MapGridSetMetatileIdAt(18, 9, METATILE_ID(Shop, Laptop2_Flash) | METATILE_COLLISION_MASK);
+ MapGridSetMetatileIdAt(18, 8, METATILE_Shop_Laptop1_Flash | METATILE_COLLISION_MASK);
+ MapGridSetMetatileIdAt(18, 9, METATILE_Shop_Laptop2_Flash | METATILE_COLLISION_MASK);
}
DrawWholeMapView();
task->data[4] ^= 1;
@@ -1216,8 +1215,8 @@ static void LotteryCornerComputerEffect(struct Task *task)
void EndLotteryCornerComputerEffect(void)
{
- MapGridSetMetatileIdAt(18, 8, METATILE_ID(Shop, Laptop1_Normal) | METATILE_COLLISION_MASK);
- MapGridSetMetatileIdAt(18, 9, METATILE_ID(Shop, Laptop2_Normal) | METATILE_COLLISION_MASK);
+ MapGridSetMetatileIdAt(18, 8, METATILE_Shop_Laptop1_Normal | METATILE_COLLISION_MASK);
+ MapGridSetMetatileIdAt(18, 9, METATILE_Shop_Laptop2_Normal | METATILE_COLLISION_MASK);
DrawWholeMapView();
}
@@ -1510,7 +1509,7 @@ void ShakeCamera(void)
gTasks[taskId].delay = gSpecialVar_0x8007;
gTasks[taskId].verticalPan = gSpecialVar_0x8004;
SetCameraPanningCallback(NULL);
- PlaySE(SE_W070);
+ PlaySE(SE_M_STRENGTH);
}
static void Task_ShakeCamera(u8 taskId)
@@ -1751,38 +1750,38 @@ const u8 *const gDeptStoreFloorNames[] =
static const u16 sElevatorWindowTiles_Ascending[][3] =
{
{
- METATILE_ID(BattleFrontier, Elevator_Top0),
- METATILE_ID(BattleFrontier, Elevator_Top1),
- METATILE_ID(BattleFrontier, Elevator_Top2)
+ METATILE_BattleFrontier_Elevator_Top0,
+ METATILE_BattleFrontier_Elevator_Top1,
+ METATILE_BattleFrontier_Elevator_Top2
},
{
- METATILE_ID(BattleFrontier, Elevator_Mid0),
- METATILE_ID(BattleFrontier, Elevator_Mid1),
- METATILE_ID(BattleFrontier, Elevator_Mid2)
+ METATILE_BattleFrontier_Elevator_Mid0,
+ METATILE_BattleFrontier_Elevator_Mid1,
+ METATILE_BattleFrontier_Elevator_Mid2
},
{
- METATILE_ID(BattleFrontier, Elevator_Bottom0),
- METATILE_ID(BattleFrontier, Elevator_Bottom1),
- METATILE_ID(BattleFrontier, Elevator_Bottom2)
+ METATILE_BattleFrontier_Elevator_Bottom0,
+ METATILE_BattleFrontier_Elevator_Bottom1,
+ METATILE_BattleFrontier_Elevator_Bottom2
},
};
static const u16 sElevatorWindowTiles_Descending[][3] =
{
{
- METATILE_ID(BattleFrontier, Elevator_Top0),
- METATILE_ID(BattleFrontier, Elevator_Top2),
- METATILE_ID(BattleFrontier, Elevator_Top1)
+ METATILE_BattleFrontier_Elevator_Top0,
+ METATILE_BattleFrontier_Elevator_Top2,
+ METATILE_BattleFrontier_Elevator_Top1
},
{
- METATILE_ID(BattleFrontier, Elevator_Mid0),
- METATILE_ID(BattleFrontier, Elevator_Mid2),
- METATILE_ID(BattleFrontier, Elevator_Mid1)
+ METATILE_BattleFrontier_Elevator_Mid0,
+ METATILE_BattleFrontier_Elevator_Mid2,
+ METATILE_BattleFrontier_Elevator_Mid1
},
{
- METATILE_ID(BattleFrontier, Elevator_Bottom0),
- METATILE_ID(BattleFrontier, Elevator_Bottom2),
- METATILE_ID(BattleFrontier, Elevator_Bottom1)
+ METATILE_BattleFrontier_Elevator_Bottom0,
+ METATILE_BattleFrontier_Elevator_Bottom2,
+ METATILE_BattleFrontier_Elevator_Bottom1
},
};
@@ -1881,7 +1880,7 @@ void MoveElevator(void)
SetCameraPanningCallback(NULL);
MoveElevatorWindowLights(floorDelta, data[6]);
- PlaySE(SE_ELEBETA);
+ PlaySE(SE_ELEVATOR);
}
static void Task_MoveElevator(u8 taskId)
@@ -1898,7 +1897,7 @@ static void Task_MoveElevator(u8 taskId)
// arrived at floor
if (data[2] == data[5])
{
- PlaySE(SE_PINPON);
+ PlaySE(SE_DING_DONG);
DestroyTask(taskId);
EnableBothScriptContexts();
InstallCameraPanAheadCallback();
@@ -2642,7 +2641,7 @@ static void Task_ShowScrollableMultichoice(u8 taskId)
ScrollableMultichoice_UpdateScrollArrows(taskId);
task->tListTaskId = ListMenuInit(&gScrollableMultichoice_ListMenuTemplate, task->tScrollOffset, task->tSelectedRow);
- schedule_bg_copy_tilemap_to_vram(0);
+ ScheduleBgCopyTilemapToVram(0);
gTasks[taskId].func = ScrollableMultichoice_ProcessInput;
}
@@ -2855,7 +2854,7 @@ void SetBattleTowerLinkPlayerGfx(void)
void ShowNatureGirlMessage(void)
{
- static const u8 *const sNatureGirlMessages[] = {
+ static const u8 *const sNatureGirlMessages[NUM_NATURES] = {
[NATURE_HARDY] = BattleFrontier_Lounge5_Text_NatureGirlHardy,
[NATURE_LONELY] = BattleFrontier_Lounge5_Text_NatureGirlLonely,
[NATURE_BRAVE] = BattleFrontier_Lounge5_Text_NatureGirlBrave,
@@ -3439,9 +3438,9 @@ static void ChangeDeoxysRockLevel(u8 rockLevel)
TryGetObjectEventIdByLocalIdAndMap(1, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, &objectEventId);
if (rockLevel == 0)
- PlaySE(SE_W109);
+ PlaySE(SE_M_CONFUSE_RAY);
else
- PlaySE(SE_RG_DEOMOV);
+ PlaySE(SE_RG_DEOXYS_MOVE);
CreateTask(WaitForDeoxysRockMovement, 8);
gFieldEffectArguments[0] = 1;
@@ -3650,14 +3649,14 @@ bool8 AbnormalWeatherHasExpired(void)
}
}
- if (gSaveBlock1Ptr->location.mapGroup == MAP_GROUP(UNDERWATER3))
+ if (gSaveBlock1Ptr->location.mapGroup == MAP_GROUP(UNDERWATER_ROUTE127))
{
switch (gSaveBlock1Ptr->location.mapNum)
{
- case MAP_NUM(UNDERWATER3):
- case MAP_NUM(UNDERWATER5):
- case MAP_NUM(UNDERWATER6):
- case MAP_NUM(UNDERWATER7):
+ case MAP_NUM(UNDERWATER_ROUTE127):
+ case MAP_NUM(UNDERWATER_ROUTE129):
+ case MAP_NUM(UNDERWATER_ROUTE105):
+ case MAP_NUM(UNDERWATER_ROUTE125):
VarSet(VAR_SHOULD_END_ABNORMAL_WEATHER, 1);
return FALSE;
default:
@@ -3688,7 +3687,7 @@ void Unused_SetWeatherSunny(void)
SetCurrentAndNextWeather(WEATHER_SUNNY);
}
-// Always returns 1
+// All mart employees have a local id of 1, so function always returns 1
u32 GetMartEmployeeObjectEventId(void)
{
static const u8 sPokeMarts[][3] =
@@ -3865,7 +3864,7 @@ static void Task_LinkRetireStatusWithBattleTowerPartner(u8 taskId)
case 7:
if (IsLinkTaskFinished() == 1)
{
- sub_800ADF8();
+ SetLinkStandbyCallback();
gTasks[taskId].data[0]++;
}
break;
@@ -3878,7 +3877,7 @@ static void Task_LinkRetireStatusWithBattleTowerPartner(u8 taskId)
case 9:
if (gWirelessCommType == 0)
{
- sub_800AC34();
+ SetCloseLinkCallback();
}
gBattleTypeFlags = sBattleTowerMultiBattleTypeFlags;
EnableBothScriptContexts();
@@ -3889,12 +3888,14 @@ static void Task_LinkRetireStatusWithBattleTowerPartner(u8 taskId)
void Script_DoRayquazaScene(void)
{
- if (gSpecialVar_0x8004 == 0)
+ if (!gSpecialVar_0x8004)
{
+ // Groudon/Kyogre fight scene
DoRayquazaScene(0, TRUE, CB2_ReturnToFieldContinueScriptPlayMapMusic);
}
else
{
+ // Rayquaza arrives scene
DoRayquazaScene(1, FALSE, CB2_ReturnToFieldContinueScriptPlayMapMusic);
}
}
@@ -3905,7 +3906,7 @@ void Script_DoRayquazaScene(void)
void LoopWingFlapSE(void)
{
CreateTask(Task_LoopWingFlapSE, 8);
- PlaySE(SE_W017);
+ PlaySE(SE_M_WING_ATTACK);
}
static void Task_LoopWingFlapSE(u8 taskId)
@@ -3917,7 +3918,7 @@ static void Task_LoopWingFlapSE(u8 taskId)
{
playCount++;
delay = 0;
- PlaySE(SE_W017);
+ PlaySE(SE_M_WING_ATTACK);
}
if (playCount == gSpecialVar_0x8004 - 1)
@@ -4095,11 +4096,17 @@ void UpdateTrainerFanClubGameClear(void)
}
// If the player has < 3 fans, gain a new fan whenever the counter reaches 20+
-// Defeating Drake or participating in a Link Contest increments the counter by 2
+// Defeating Drake or participating in a Contest increments the counter by 2
// Participating at Battle Tower or in a Secret Base battle increments the counter by 1
u8 TryGainNewFanFromCounter(u8 incrementId)
{
- static const u8 sCounterIncrements[] = { 2, 1, 2, 1 };
+ static const u8 sCounterIncrements[] =
+ {
+ [FANCOUNTER_DEFEATED_DRAKE] = 2,
+ [FANCOUNTER_BATTLED_AT_BASE] = 1,
+ [FANCOUNTER_FINISHED_CONTEST] = 2,
+ [FANCOUNTER_USED_BATTLE_TOWER] = 1
+ };
if (VarGet(VAR_LILYCOVE_FAN_CLUB_STATE) == 2)
{
diff --git a/src/field_tasks.c b/src/field_tasks.c
index 21b2732c3..91b4558d5 100644
--- a/src/field_tasks.c
+++ b/src/field_tasks.c
@@ -19,7 +19,6 @@
#include "constants/field_tasks.h"
#include "constants/items.h"
#include "constants/songs.h"
-#include "constants/vars.h"
#include "constants/metatile_labels.h"
struct PacifidlogMetatileOffsets
@@ -52,26 +51,26 @@ static const TaskFunc sPerStepCallbacks[] =
// they are in pairs but declared as 1D array
static const struct PacifidlogMetatileOffsets sHalfSubmergedBridgeMetatileOffsets[] =
{
- { 0, 0, METATILE_ID(Pacifidlog, HalfSubmergedLogs_Vertical0)}, {0, 1, METATILE_ID(Pacifidlog, HalfSubmergedLogs_Vertical1)},
- { 0, -1, METATILE_ID(Pacifidlog, HalfSubmergedLogs_Vertical0)}, {0, 0, METATILE_ID(Pacifidlog, HalfSubmergedLogs_Vertical1)},
- { 0, 0, METATILE_ID(Pacifidlog, HalfSubmergedLogs_Horizontal0)}, {1, 0, METATILE_ID(Pacifidlog, HalfSubmergedLogs_Horizontal1)},
- {-1, 0, METATILE_ID(Pacifidlog, HalfSubmergedLogs_Horizontal0)}, {0, 0, METATILE_ID(Pacifidlog, HalfSubmergedLogs_Horizontal1)}
+ { 0, 0, METATILE_Pacifidlog_HalfSubmergedLogs_Vertical0}, {0, 1, METATILE_Pacifidlog_HalfSubmergedLogs_Vertical1},
+ { 0, -1, METATILE_Pacifidlog_HalfSubmergedLogs_Vertical0}, {0, 0, METATILE_Pacifidlog_HalfSubmergedLogs_Vertical1},
+ { 0, 0, METATILE_Pacifidlog_HalfSubmergedLogs_Horizontal0}, {1, 0, METATILE_Pacifidlog_HalfSubmergedLogs_Horizontal1},
+ {-1, 0, METATILE_Pacifidlog_HalfSubmergedLogs_Horizontal0}, {0, 0, METATILE_Pacifidlog_HalfSubmergedLogs_Horizontal1}
};
static const struct PacifidlogMetatileOffsets sFullySubmergedBridgeMetatileOffsets[] =
{
- { 0, 0, METATILE_ID(Pacifidlog, SubmergedLogs_Vertical0)}, {0, 1, METATILE_ID(Pacifidlog, SubmergedLogs_Vertical1)},
- { 0, -1, METATILE_ID(Pacifidlog, SubmergedLogs_Vertical0)}, {0, 0, METATILE_ID(Pacifidlog, SubmergedLogs_Vertical1)},
- { 0, 0, METATILE_ID(Pacifidlog, SubmergedLogs_Horizontal0)}, {1, 0, METATILE_ID(Pacifidlog, SubmergedLogs_Horizontal1)},
- {-1, 0, METATILE_ID(Pacifidlog, SubmergedLogs_Horizontal0)}, {0, 0, METATILE_ID(Pacifidlog, SubmergedLogs_Horizontal1)}
+ { 0, 0, METATILE_Pacifidlog_SubmergedLogs_Vertical0}, {0, 1, METATILE_Pacifidlog_SubmergedLogs_Vertical1},
+ { 0, -1, METATILE_Pacifidlog_SubmergedLogs_Vertical0}, {0, 0, METATILE_Pacifidlog_SubmergedLogs_Vertical1},
+ { 0, 0, METATILE_Pacifidlog_SubmergedLogs_Horizontal0}, {1, 0, METATILE_Pacifidlog_SubmergedLogs_Horizontal1},
+ {-1, 0, METATILE_Pacifidlog_SubmergedLogs_Horizontal0}, {0, 0, METATILE_Pacifidlog_SubmergedLogs_Horizontal1}
};
static const struct PacifidlogMetatileOffsets sFloatingBridgeMetatileOffsets[] =
{
- { 0, 0, METATILE_ID(Pacifidlog, FloatingLogs_Vertical0)}, {0, 1, METATILE_ID(Pacifidlog, FloatingLogs_Vertical1)},
- { 0, -1, METATILE_ID(Pacifidlog, FloatingLogs_Vertical0)}, {0, 0, METATILE_ID(Pacifidlog, FloatingLogs_Vertical1)},
- { 0, 0, METATILE_ID(Pacifidlog, FloatingLogs_Horizontal0)}, {1, 0, METATILE_ID(Pacifidlog, FloatingLogs_Horizontal1)},
- {-1, 0, METATILE_ID(Pacifidlog, FloatingLogs_Horizontal0)}, {0, 0, METATILE_ID(Pacifidlog, FloatingLogs_Horizontal1)}
+ { 0, 0, METATILE_Pacifidlog_FloatingLogs_Vertical0}, {0, 1, METATILE_Pacifidlog_FloatingLogs_Vertical1},
+ { 0, -1, METATILE_Pacifidlog_FloatingLogs_Vertical0}, {0, 0, METATILE_Pacifidlog_FloatingLogs_Vertical1},
+ { 0, 0, METATILE_Pacifidlog_FloatingLogs_Horizontal0}, {1, 0, METATILE_Pacifidlog_FloatingLogs_Horizontal1},
+ {-1, 0, METATILE_Pacifidlog_FloatingLogs_Horizontal0}, {0, 0, METATILE_Pacifidlog_FloatingLogs_Horizontal1}
};
// Each element corresponds to a y coordinate row in the sootopolis gym 1F map.
@@ -106,10 +105,10 @@ static const u16 sSootopolisGymIceRowVars[] =
};
static const u16 sMuddySlopeMetatiles[] = {
- METATILE_ID(General, MuddySlope_Frame0),
- METATILE_ID(General, MuddySlope_Frame3),
- METATILE_ID(General, MuddySlope_Frame2),
- METATILE_ID(General, MuddySlope_Frame1)
+ METATILE_General_MuddySlope_Frame0,
+ METATILE_General_MuddySlope_Frame3,
+ METATILE_General_MuddySlope_Frame2,
+ METATILE_General_MuddySlope_Frame1
};
static void Task_RunPerStepCallback(u8 taskId)
@@ -358,7 +357,7 @@ static void PacifidlogBridgePerStepCallback(u8 taskId)
data[2] = x;
data[3] = y;
if (MetatileBehavior_IsPacifidlogLog(MapGridGetMetatileBehaviorAt(x, y)))
- PlaySE(SE_MIZU);
+ PlaySE(SE_PUDDLE);
}
break;
case 2:
@@ -381,11 +380,11 @@ static void SetLoweredForetreeBridgeMetatile(s16 x, s16 y)
{
switch (MapGridGetMetatileIdAt(x, y))
{
- case METATILE_ID(Fortree, BridgeOverGrass_Raised):
- MapGridSetMetatileIdAt(x, y, METATILE_ID(Fortree, BridgeOverGrass_Lowered));
+ case METATILE_Fortree_BridgeOverGrass_Raised:
+ MapGridSetMetatileIdAt(x, y, METATILE_Fortree_BridgeOverGrass_Lowered);
break;
- case METATILE_ID(Fortree, BridgeOverTrees_Raised):
- MapGridSetMetatileIdAt(x, y, METATILE_ID(Fortree, BridgeOverTrees_Lowered));
+ case METATILE_Fortree_BridgeOverTrees_Raised:
+ MapGridSetMetatileIdAt(x, y, METATILE_Fortree_BridgeOverTrees_Lowered);
break;
}
}
@@ -398,11 +397,11 @@ static void SetNormalFortreeBridgeMetatile(s16 x, s16 y)
{
switch (MapGridGetMetatileIdAt(x, y))
{
- case METATILE_ID(Fortree, BridgeOverGrass_Lowered):
- MapGridSetMetatileIdAt(x, y, METATILE_ID(Fortree, BridgeOverGrass_Raised));
+ case METATILE_Fortree_BridgeOverGrass_Lowered:
+ MapGridSetMetatileIdAt(x, y, METATILE_Fortree_BridgeOverGrass_Raised);
break;
- case METATILE_ID(Fortree, BridgeOverTrees_Lowered):
- MapGridSetMetatileIdAt(x, y, METATILE_ID(Fortree, BridgeOverTrees_Raised));
+ case METATILE_Fortree_BridgeOverTrees_Lowered:
+ MapGridSetMetatileIdAt(x, y, METATILE_Fortree_BridgeOverTrees_Raised);
break;
}
}
@@ -444,7 +443,7 @@ static void FortreeBridgePerStepCallback(u8 taskId)
flag = 1;
if (flag && (isFortreeBridgeCur == 1 || isFortreeBridgePrev == 1))
- PlaySE(SE_HASHI);
+ PlaySE(SE_BRIDGE_WALK);
if (isFortreeBridgePrev)
{
@@ -530,7 +529,7 @@ void SetSootopolisGymCrackedIceMetatiles(void)
for (y = 0; y < height; y++)
{
if (IsIcePuzzleCoordVisited(x, y) == TRUE)
- MapGridSetMetatileIdAt(x + 7, y + 7, METATILE_ID(SootopolisGym, Ice_Cracked));
+ MapGridSetMetatileIdAt(x + 7, y + 7, METATILE_SootopolisGym_Ice_Cracked);
}
}
}
@@ -584,8 +583,8 @@ static void SootopolisGymIcePerStepCallback(u8 taskId)
{
x = data[4];
y = data[5];
- PlaySE(SE_RU_BARI);
- MapGridSetMetatileIdAt(x, y, METATILE_ID(SootopolisGym, Ice_Cracked));
+ PlaySE(SE_ICE_CRACK);
+ MapGridSetMetatileIdAt(x, y, METATILE_SootopolisGym_Ice_Cracked);
CurrentMapDrawMetatileAt(x, y);
MarkIcePuzzleCoordVisited(x - 7, y - 7);
data[1] = 1;
@@ -600,8 +599,8 @@ static void SootopolisGymIcePerStepCallback(u8 taskId)
{
x = data[4];
y = data[5];
- PlaySE(SE_RU_GASYAN);
- MapGridSetMetatileIdAt(x, y, METATILE_ID(SootopolisGym, Ice_Broken));
+ PlaySE(SE_ICE_BREAK);
+ MapGridSetMetatileIdAt(x, y, METATILE_SootopolisGym_Ice_Broken);
CurrentMapDrawMetatileAt(x, y);
data[1] = 1;
}
@@ -621,10 +620,10 @@ static void AshGrassPerStepCallback(u8 taskId)
data[2] = y;
if (MetatileBehavior_IsAshGrass(MapGridGetMetatileBehaviorAt(x, y)))
{
- if (MapGridGetMetatileIdAt(x, y) == METATILE_ID(Fallarbor, AshGrass))
- StartAshFieldEffect(x, y, METATILE_ID(Fallarbor, NormalGrass), 4);
+ if (MapGridGetMetatileIdAt(x, y) == METATILE_Fallarbor_AshGrass)
+ StartAshFieldEffect(x, y, METATILE_Fallarbor_NormalGrass, 4);
else
- StartAshFieldEffect(x, y, METATILE_ID(Lavaridge, NormalGrass), 4);
+ StartAshFieldEffect(x, y, METATILE_Lavaridge_NormalGrass, 4);
if (CheckBagHasItem(ITEM_SOOT_SACK, 1))
{
@@ -693,7 +692,7 @@ static void SetMuddySlopeMetatile(s16 *data, s16 x, s16 y)
MapGridSetMetatileIdAt(x, y, tile);
CurrentMapDrawMetatileAt(x, y);
- MapGridSetMetatileIdAt(x, y, METATILE_ID(General, MuddySlope_Frame0));
+ MapGridSetMetatileIdAt(x, y, METATILE_General_MuddySlope_Frame0);
}
static void Task_MuddySlope(u8 taskId)
diff --git a/src/field_weather.c b/src/field_weather.c
index 684a86479..25ee0582a 100644
--- a/src/field_weather.c
+++ b/src/field_weather.c
@@ -1038,13 +1038,13 @@ void SetRainStrengthFromSoundEffect(u16 soundEffect)
{
switch (soundEffect)
{
- case SE_T_KOAME:
+ case SE_RAIN:
gWeatherPtr->rainStrength = 0;
break;
- case SE_T_OOAME:
+ case SE_DOWNPOUR:
gWeatherPtr->rainStrength = 1;
break;
- case SE_T_AME:
+ case SE_THUNDERSTORM:
gWeatherPtr->rainStrength = 2;
break;
default:
@@ -1062,14 +1062,14 @@ void PlayRainStoppingSoundEffect(void)
switch (gWeatherPtr->rainStrength)
{
case 0:
- PlaySE(SE_T_KOAME_E);
+ PlaySE(SE_RAIN_STOP);
break;
case 1:
- PlaySE(SE_T_OOAME_E);
+ PlaySE(SE_DOWNPOUR_STOP);
break;
case 2:
default:
- PlaySE(SE_T_AME_E);
+ PlaySE(SE_THUNDERSTORM_STOP);
break;
}
}
diff --git a/src/field_weather_effect.c b/src/field_weather_effect.c
index 26a7adf27..320a10670 100644
--- a/src/field_weather_effect.c
+++ b/src/field_weather_effect.c
@@ -479,7 +479,7 @@ void Rain_InitVars(void)
gWeatherPtr->targetRainSpriteCount = 10;
gWeatherPtr->gammaTargetIndex = 3;
gWeatherPtr->gammaStepDelay = 20;
- SetRainStrengthFromSoundEffect(SE_T_KOAME);
+ SetRainStrengthFromSoundEffect(SE_RAIN);
}
void Rain_InitAll(void)
@@ -1023,7 +1023,7 @@ void Thunderstorm_InitVars(void)
gWeatherPtr->gammaStepDelay = 20;
gWeatherPtr->weatherGfxLoaded = FALSE; // duplicate assignment
gWeatherPtr->thunderTriggered = 0;
- SetRainStrengthFromSoundEffect(SE_T_AME);
+ SetRainStrengthFromSoundEffect(SE_THUNDERSTORM);
}
void Thunderstorm_InitAll(void)
@@ -1051,7 +1051,7 @@ void Downpour_InitVars(void)
gWeatherPtr->gammaTargetIndex = 3;
gWeatherPtr->gammaStepDelay = 20;
gWeatherPtr->weatherGfxLoaded = FALSE; // duplicate assignment
- SetRainStrengthFromSoundEffect(SE_T_OOAME);
+ SetRainStrengthFromSoundEffect(SE_DOWNPOUR);
}
void Downpour_InitAll(void)
@@ -1220,9 +1220,9 @@ static void UpdateThunderSound(void)
return;
if (Random() & 1)
- PlaySE(SE_T_KAMI);
+ PlaySE(SE_THUNDER);
else
- PlaySE(SE_T_KAMI2);
+ PlaySE(SE_THUNDER2);
gWeatherPtr->thunderTriggered = 0;
}
diff --git a/src/fieldmap.c b/src/fieldmap.c
index 21bbaa8f8..49337ebbe 100644
--- a/src/fieldmap.c
+++ b/src/fieldmap.c
@@ -44,7 +44,7 @@ static void InitBackupMapLayoutConnections(struct MapHeader *mapHeader);
static void LoadSavedMapView(void);
static bool8 SkipCopyingMetatileFromSavedMap(u16* mapMetatilePtr, u16 mapWidth, u8 yMode);
-struct MapHeader const *const mapconnection_get_mapheader(struct MapConnection *connection)
+struct MapHeader const *const GetMapHeaderFromConnection(struct MapConnection *connection)
{
return Overworld_GetMapHeaderByGroupAndId(connection->mapGroup, connection->mapNum);
}
@@ -124,7 +124,7 @@ static void InitBackupMapLayoutConnections(struct MapHeader *mapHeader)
gMapConnectionFlags = sDummyConnectionFlags;
for (i = 0; i < count; i++, connection++)
{
- struct MapHeader const *cMap = mapconnection_get_mapheader(connection);
+ struct MapHeader const *cMap = GetMapHeaderFromConnection(connection);
u32 offset = connection->offset;
switch (connection->direction)
{
@@ -533,9 +533,16 @@ static bool32 SavedMapViewIsEmpty(void)
u16 i;
u32 marker = 0;
+#ifndef UBFIX
// BUG: This loop extends past the bounds of the mapView array. Its size is only 0x100.
for (i = 0; i < 0x200; i++)
marker |= gSaveBlock1Ptr->mapView[i];
+#else
+ // UBFIX: Only iterate over 0x100
+ for (i = 0; i < ARRAY_COUNT(gSaveBlock1Ptr->mapView); i++)
+ marker |= gSaveBlock1Ptr->mapView[i];
+#endif
+
if (marker == 0)
return TRUE;
@@ -734,7 +741,7 @@ int CanCameraMoveInDirection(int direction)
void sub_80887F8(struct MapConnection *connection, int direction, int x, int y)
{
struct MapHeader const *mapHeader;
- mapHeader = mapconnection_get_mapheader(connection);
+ mapHeader = GetMapHeaderFromConnection(connection);
switch (direction)
{
case CONNECTION_EAST:
@@ -805,7 +812,7 @@ struct MapConnection *sub_8088950(u8 direction, int x, int y)
bool8 sub_80889A8(u8 direction, int x, int y, struct MapConnection *connection)
{
struct MapHeader const *mapHeader;
- mapHeader = mapconnection_get_mapheader(connection);
+ mapHeader = GetMapHeaderFromConnection(connection);
switch (direction)
{
case CONNECTION_SOUTH:
@@ -846,7 +853,7 @@ int sub_8088A38(int x, int width)
int sub_8088A4C(struct MapConnection *connection, int x, int y)
{
struct MapHeader const *mapHeader;
- mapHeader = mapconnection_get_mapheader(connection);
+ mapHeader = GetMapHeaderFromConnection(connection);
switch (connection->direction)
{
case CONNECTION_SOUTH:
@@ -893,7 +900,7 @@ struct MapConnection *GetConnectionAtCoords(s16 x, s16 y)
return NULL;
}
-void sub_8088B3C(u16 x, u16 y)
+void SetCameraFocusCoords(u16 x, u16 y)
{
gSaveBlock1Ptr->pos.x = x - 7;
gSaveBlock1Ptr->pos.y = y - 7;
@@ -905,7 +912,8 @@ void GetCameraFocusCoords(u16 *x, u16 *y)
*y = gSaveBlock1Ptr->pos.y + 7;
}
-void SetPlayerCoords(u16 x, u16 y)
+// Unused
+static void SetCameraCoords(u16 x, u16 y)
{
gSaveBlock1Ptr->pos.x = x;
gSaveBlock1Ptr->pos.y = y;
@@ -917,11 +925,11 @@ void GetCameraCoords(u16 *x, u16 *y)
*y = gSaveBlock1Ptr->pos.y;
}
-void sub_8088B94(int x, int y, int a2)
+void MapGridSetMetatileImpassabilityAt(int x, int y, bool32 impassable)
{
if (x >= 0 && x < gBackupMapLayout.width && y >= 0 && y < gBackupMapLayout.height)
{
- if (a2 != 0)
+ if (impassable)
gBackupMapLayout.map[x + gBackupMapLayout.width * y] |= METATILE_COLLISION_MASK;
else
gBackupMapLayout.map[x + gBackupMapLayout.width * y] &= ~METATILE_COLLISION_MASK;
@@ -938,23 +946,23 @@ static bool8 SkipCopyingMetatileFromSavedMap(u16* mapMetatilePtr, u16 mapWidth,
else
mapMetatilePtr += mapWidth;
- if (sub_80FADE4(*mapMetatilePtr & METATILE_ID_MASK, yMode) == 1)
+ if (IsLargeBreakableDecoration(*mapMetatilePtr & METATILE_ID_MASK, yMode) == TRUE)
return TRUE;
return FALSE;
}
-void copy_tileset_patterns_to_vram(struct Tileset const *tileset, u16 numTiles, u16 offset)
+static void CopyTilesetToVram(struct Tileset const *tileset, u16 numTiles, u16 offset)
{
if (tileset)
{
if (!tileset->isCompressed)
LoadBgTiles(2, tileset->tiles, numTiles * 32, offset);
else
- decompress_and_copy_tile_data_to_vram(2, tileset->tiles, numTiles * 32, offset, 0);
+ DecompressAndCopyTileDataToVram(2, tileset->tiles, numTiles * 32, offset, 0);
}
}
-void copy_tileset_patterns_to_vram2(struct Tileset const *tileset, u16 numTiles, u16 offset)
+static void CopyTilesetToVramUsingHeap(struct Tileset const *tileset, u16 numTiles, u16 offset)
{
if (tileset)
{
@@ -975,7 +983,7 @@ void nullsub_90(void)
}
-void apply_map_tileset_palette(struct Tileset const *tileset, u16 destOffset, u16 size)
+void LoadTilesetPalette(struct Tileset const *tileset, u16 destOffset, u16 size)
{
u16 black = RGB_BLACK;
@@ -1000,45 +1008,45 @@ void apply_map_tileset_palette(struct Tileset const *tileset, u16 destOffset, u1
}
}
-void copy_map_tileset1_to_vram(struct MapLayout const *mapLayout)
+void CopyPrimaryTilesetToVram(struct MapLayout const *mapLayout)
{
- copy_tileset_patterns_to_vram(mapLayout->primaryTileset, NUM_TILES_IN_PRIMARY, 0);
+ CopyTilesetToVram(mapLayout->primaryTileset, NUM_TILES_IN_PRIMARY, 0);
}
-void copy_map_tileset2_to_vram(struct MapLayout const *mapLayout)
+void CopySecondaryTilesetToVram(struct MapLayout const *mapLayout)
{
- copy_tileset_patterns_to_vram(mapLayout->secondaryTileset, NUM_TILES_TOTAL - NUM_TILES_IN_PRIMARY, NUM_TILES_IN_PRIMARY);
+ CopyTilesetToVram(mapLayout->secondaryTileset, NUM_TILES_TOTAL - NUM_TILES_IN_PRIMARY, NUM_TILES_IN_PRIMARY);
}
-void copy_map_tileset2_to_vram_2(struct MapLayout const *mapLayout)
+void CopySecondaryTilesetToVramUsingHeap(struct MapLayout const *mapLayout)
{
- copy_tileset_patterns_to_vram2(mapLayout->secondaryTileset, NUM_TILES_TOTAL - NUM_TILES_IN_PRIMARY, NUM_TILES_IN_PRIMARY);
+ CopyTilesetToVramUsingHeap(mapLayout->secondaryTileset, NUM_TILES_TOTAL - NUM_TILES_IN_PRIMARY, NUM_TILES_IN_PRIMARY);
}
-void apply_map_tileset1_palette(struct MapLayout const *mapLayout)
+static void LoadPrimaryTilesetPalette(struct MapLayout const *mapLayout)
{
- apply_map_tileset_palette(mapLayout->primaryTileset, 0, NUM_PALS_IN_PRIMARY * 16 * 2);
+ LoadTilesetPalette(mapLayout->primaryTileset, 0, NUM_PALS_IN_PRIMARY * 16 * 2);
}
-void apply_map_tileset2_palette(struct MapLayout const *mapLayout)
+void LoadSecondaryTilesetPalette(struct MapLayout const *mapLayout)
{
- apply_map_tileset_palette(mapLayout->secondaryTileset, NUM_PALS_IN_PRIMARY * 16, (NUM_PALS_TOTAL - NUM_PALS_IN_PRIMARY) * 16 * 2);
+ LoadTilesetPalette(mapLayout->secondaryTileset, NUM_PALS_IN_PRIMARY * 16, (NUM_PALS_TOTAL - NUM_PALS_IN_PRIMARY) * 16 * 2);
}
-void copy_map_tileset1_tileset2_to_vram(struct MapLayout const *mapLayout)
+void CopyMapTilesetsToVram(struct MapLayout const *mapLayout)
{
if (mapLayout)
{
- copy_tileset_patterns_to_vram2(mapLayout->primaryTileset, NUM_TILES_IN_PRIMARY, 0);
- copy_tileset_patterns_to_vram2(mapLayout->secondaryTileset, NUM_TILES_TOTAL - NUM_TILES_IN_PRIMARY, NUM_TILES_IN_PRIMARY);
+ CopyTilesetToVramUsingHeap(mapLayout->primaryTileset, NUM_TILES_IN_PRIMARY, 0);
+ CopyTilesetToVramUsingHeap(mapLayout->secondaryTileset, NUM_TILES_TOTAL - NUM_TILES_IN_PRIMARY, NUM_TILES_IN_PRIMARY);
}
}
-void apply_map_tileset1_tileset2_palette(struct MapLayout const *mapLayout)
+void LoadMapTilesetPalettes(struct MapLayout const *mapLayout)
{
if (mapLayout)
{
- apply_map_tileset1_palette(mapLayout);
- apply_map_tileset2_palette(mapLayout);
+ LoadPrimaryTilesetPalette(mapLayout);
+ LoadSecondaryTilesetPalette(mapLayout);
}
}
diff --git a/src/fldeff_cut.c b/src/fldeff_cut.c
index 88927959e..991617713 100644
--- a/src/fldeff_cut.c
+++ b/src/fldeff_cut.c
@@ -1,6 +1,7 @@
#include "global.h"
#include "event_object_lock.h"
#include "event_object_movement.h"
+#include "event_scripts.h"
#include "faraway_island.h"
#include "field_camera.h"
#include "field_effect.h"
@@ -24,11 +25,10 @@
extern struct MapPosition gPlayerFacingPosition;
-extern const u8 EventScript_FldEffCut[];
extern const u8 FarawayIsland_Interior_EventScript_HideMewWhenGrassCut[];
extern const u8 gFieldEffectPic_CutGrass[];
-extern const u16 gFieldEffectObjectPalette6[];
+extern const u16 gFieldEffectPal_CutGrass[];
// cut 'square' defines
#define CUT_NORMAL_SIDE 3
@@ -122,12 +122,12 @@ static const struct SpriteFrameImage sSpriteImageTable_CutGrass[] =
{gFieldEffectPic_CutGrass, 0x20},
};
-const struct SpritePalette gFieldEffectObjectPaletteInfo6 = {gFieldEffectObjectPalette6, 0x1000};
+const struct SpritePalette gSpritePalette_CutGrass = {gFieldEffectPal_CutGrass, FLDEFF_PAL_TAG_CUT_GRASS};
static const struct SpriteTemplate sSpriteTemplate_CutGrass =
{
.tileTag = 0xFFFF,
- .paletteTag = 0x1000,
+ .paletteTag = FLDEFF_PAL_TAG_CUT_GRASS,
.oam = &sOamData_CutGrass,
.anims = sSpriteAnimTable_CutGrass,
.images = sSpriteImageTable_CutGrass,
@@ -227,9 +227,7 @@ bool8 SetUpFieldMove_Cut(void)
y = gPlayerFacingPosition.y + sHyperCutStruct[i].y;
tileCuttable = TRUE;
- j = 0;
- do
- {
+ for (j = 0; j < 2; ++j) {
if (sHyperCutStruct[i].unk2[j] == 0)
break;
if (cutTiles[(u8)(sHyperCutStruct[i].unk2[j] - 1)] == FALSE)
@@ -237,7 +235,7 @@ bool8 SetUpFieldMove_Cut(void)
tileCuttable = FALSE;
break;
}
- } while (++j <= 1);
+ }
if (tileCuttable == TRUE)
{
@@ -253,11 +251,8 @@ bool8 SetUpFieldMove_Cut(void)
sHyperCutTiles[tileArrayId] = TRUE;
ret = TRUE;
}
- else
- {
- if (MetatileBehavior_IsCuttableGrass(tileBehavior) == TRUE)
- sHyperCutTiles[tileArrayId] = TRUE;
- }
+ else if (MetatileBehavior_IsCuttableGrass(tileBehavior) == TRUE)
+ sHyperCutTiles[tileArrayId] = TRUE;
}
}
}
@@ -281,7 +276,7 @@ static void FieldCallback_CutGrass(void)
bool8 FldEff_UseCutOnGrass(void)
{
- u8 taskId = oei_task_add();
+ u8 taskId = CreateFieldMoveTask();
gTasks[taskId].data[8] = (u32)StartCutGrassFieldEffect >> 16;
gTasks[taskId].data[9] = (u32)StartCutGrassFieldEffect;
@@ -292,12 +287,12 @@ bool8 FldEff_UseCutOnGrass(void)
static void FieldCallback_CutTree(void)
{
gFieldEffectArguments[0] = GetCursorSelectionMonId();
- ScriptContext1_SetupScript(EventScript_FldEffCut);
+ ScriptContext1_SetupScript(EventScript_UseCut);
}
bool8 FldEff_UseCutOnTree(void)
{
- u8 taskId = oei_task_add();
+ u8 taskId = CreateFieldMoveTask();
gTasks[taskId].data[8] = (u32)StartCutTreeFieldEffect >> 16;
gTasks[taskId].data[9] = (u32)StartCutTreeFieldEffect;
@@ -316,7 +311,7 @@ bool8 FldEff_CutGrass(void)
s16 x, y;
u8 i = 0;
- PlaySE(SE_W015);
+ PlaySE(SE_M_CUT);
PlayerGetDestCoords(&gPlayerFacingPosition.x, &gPlayerFacingPosition.y);
for (i = 0; i < CUT_HYPER_AREA; i++)
{
@@ -355,36 +350,36 @@ static void SetCutGrassMetatile(s16 x, s16 y)
switch (metatileId)
{
- case METATILE_ID(Fortree, LongGrass_Root):
- case METATILE_ID(General, LongGrass):
- case METATILE_ID(General, TallGrass):
- MapGridSetMetatileIdAt(x, y, METATILE_ID(General, Grass));
+ case METATILE_Fortree_LongGrass_Root:
+ case METATILE_General_LongGrass:
+ case METATILE_General_TallGrass:
+ MapGridSetMetatileIdAt(x, y, METATILE_General_Grass);
break;
- case METATILE_ID(General, TallGrass_TreeLeft):
- MapGridSetMetatileIdAt(x, y, METATILE_ID(General, Grass_TreeLeft));
+ case METATILE_General_TallGrass_TreeLeft:
+ MapGridSetMetatileIdAt(x, y, METATILE_General_Grass_TreeLeft);
break;
- case METATILE_ID(General, TallGrass_TreeRight):
- MapGridSetMetatileIdAt(x, y, METATILE_ID(General, Grass_TreeRight));
+ case METATILE_General_TallGrass_TreeRight:
+ MapGridSetMetatileIdAt(x, y, METATILE_General_Grass_TreeRight);
break;
- case METATILE_ID(Fortree, SecretBase_LongGrass_BottomLeft):
- MapGridSetMetatileIdAt(x, y, METATILE_ID(Fortree, SecretBase_LongGrass_TopLeft));
+ case METATILE_Fortree_SecretBase_LongGrass_BottomLeft:
+ MapGridSetMetatileIdAt(x, y, METATILE_Fortree_SecretBase_LongGrass_TopLeft);
break;
- case METATILE_ID(Fortree, SecretBase_LongGrass_BottomMid):
- MapGridSetMetatileIdAt(x, y, METATILE_ID(Fortree, SecretBase_LongGrass_TopMid));
+ case METATILE_Fortree_SecretBase_LongGrass_BottomMid:
+ MapGridSetMetatileIdAt(x, y, METATILE_Fortree_SecretBase_LongGrass_TopMid);
break;
- case METATILE_ID(Fortree, SecretBase_LongGrass_BottomRight):
- MapGridSetMetatileIdAt(x, y, METATILE_ID(Fortree, SecretBase_LongGrass_TopRight));
+ case METATILE_Fortree_SecretBase_LongGrass_BottomRight:
+ MapGridSetMetatileIdAt(x, y, METATILE_Fortree_SecretBase_LongGrass_TopRight);
break;
- case METATILE_ID(Lavaridge, NormalGrass):
- case METATILE_ID(Lavaridge, AshGrass):
- MapGridSetMetatileIdAt(x, y, METATILE_ID(Lavaridge, LavaField));
+ case METATILE_Lavaridge_NormalGrass:
+ case METATILE_Lavaridge_AshGrass:
+ MapGridSetMetatileIdAt(x, y, METATILE_Lavaridge_LavaField);
break;
- case METATILE_ID(Fallarbor, NormalGrass):
- case METATILE_ID(Fallarbor, AshGrass):
- MapGridSetMetatileIdAt(x, y, METATILE_ID(Fallarbor, AshField));
+ case METATILE_Fallarbor_NormalGrass:
+ case METATILE_Fallarbor_AshGrass:
+ MapGridSetMetatileIdAt(x, y, METATILE_Fallarbor_AshField);
break;
- case METATILE_ID(General, TallGrass_TreeUp):
- MapGridSetMetatileIdAt(x, y, METATILE_ID(General, Grass_TreeUp));
+ case METATILE_General_TallGrass_TreeUp:
+ MapGridSetMetatileIdAt(x, y, METATILE_General_Grass_TreeUp);
break;
}
}
@@ -402,13 +397,13 @@ static u8 GetLongGrassCaseAt(s16 x, s16 y)
{
u16 metatileId = MapGridGetMetatileIdAt(x, y);
- if (metatileId == METATILE_ID(General, Grass))
+ if (metatileId == METATILE_General_Grass)
return LONG_GRASS_FIELD;
- else if (metatileId == METATILE_ID(Fortree, SecretBase_LongGrass_TopLeft))
+ else if (metatileId == METATILE_Fortree_SecretBase_LongGrass_TopLeft)
return LONG_GRASS_BASE_LEFT;
- else if (metatileId == METATILE_ID(Fortree, SecretBase_LongGrass_TopMid))
+ else if (metatileId == METATILE_Fortree_SecretBase_LongGrass_TopMid)
return LONG_GRASS_BASE_CENTER;
- else if (metatileId == METATILE_ID(Fortree, SecretBase_LongGrass_TopRight))
+ else if (metatileId == METATILE_Fortree_SecretBase_LongGrass_TopRight)
return LONG_GRASS_BASE_RIGHT;
else
return LONG_GRASS_NONE;
@@ -422,34 +417,34 @@ static void SetCutGrassMetatiles(s16 x, s16 y)
for (i = 0; i < sCutSquareSide; i++)
{
s16 currentX = x + i;
- if (MapGridGetMetatileIdAt(currentX, y) == METATILE_ID(General, LongGrass))
+ if (MapGridGetMetatileIdAt(currentX, y) == METATILE_General_LongGrass)
{
switch (GetLongGrassCaseAt(currentX, y + 1))
{
case LONG_GRASS_FIELD:
- MapGridSetMetatileIdAt(currentX, y + 1, METATILE_ID(Fortree, LongGrass_Root));
+ MapGridSetMetatileIdAt(currentX, y + 1, METATILE_Fortree_LongGrass_Root);
break;
case LONG_GRASS_BASE_LEFT:
- MapGridSetMetatileIdAt(currentX, y + 1, METATILE_ID(Fortree, SecretBase_LongGrass_BottomLeft));
+ MapGridSetMetatileIdAt(currentX, y + 1, METATILE_Fortree_SecretBase_LongGrass_BottomLeft);
break;
case LONG_GRASS_BASE_CENTER:
- MapGridSetMetatileIdAt(currentX, y + 1, METATILE_ID(Fortree, SecretBase_LongGrass_BottomMid));
+ MapGridSetMetatileIdAt(currentX, y + 1, METATILE_Fortree_SecretBase_LongGrass_BottomMid);
break;
case LONG_GRASS_BASE_RIGHT:
- MapGridSetMetatileIdAt(currentX, y + 1, METATILE_ID(Fortree, SecretBase_LongGrass_BottomRight));
+ MapGridSetMetatileIdAt(currentX, y + 1, METATILE_Fortree_SecretBase_LongGrass_BottomRight);
break;
}
}
- if (MapGridGetMetatileIdAt(currentX, lowerY) == METATILE_ID(General, Grass))
+ if (MapGridGetMetatileIdAt(currentX, lowerY) == METATILE_General_Grass)
{
- if (MapGridGetMetatileIdAt(currentX, lowerY + 1) == METATILE_ID(Fortree, LongGrass_Root))
- MapGridSetMetatileIdAt(currentX, lowerY + 1, METATILE_ID(General, Grass));
- if (MapGridGetMetatileIdAt(currentX, lowerY + 1) == METATILE_ID(Fortree, SecretBase_LongGrass_BottomLeft))
- MapGridSetMetatileIdAt(currentX, lowerY + 1, METATILE_ID(Fortree, SecretBase_LongGrass_TopLeft));
- if (MapGridGetMetatileIdAt(currentX, lowerY + 1) == METATILE_ID(Fortree, SecretBase_LongGrass_BottomMid))
- MapGridSetMetatileIdAt(currentX, lowerY + 1, METATILE_ID(Fortree, SecretBase_LongGrass_TopMid));
- if (MapGridGetMetatileIdAt(currentX, lowerY + 1) == METATILE_ID(Fortree, SecretBase_LongGrass_BottomRight))
- MapGridSetMetatileIdAt(currentX, lowerY + 1, METATILE_ID(Fortree, SecretBase_LongGrass_TopRight));
+ if (MapGridGetMetatileIdAt(currentX, lowerY + 1) == METATILE_Fortree_LongGrass_Root)
+ MapGridSetMetatileIdAt(currentX, lowerY + 1, METATILE_General_Grass);
+ if (MapGridGetMetatileIdAt(currentX, lowerY + 1) == METATILE_Fortree_SecretBase_LongGrass_BottomLeft)
+ MapGridSetMetatileIdAt(currentX, lowerY + 1, METATILE_Fortree_SecretBase_LongGrass_TopLeft);
+ if (MapGridGetMetatileIdAt(currentX, lowerY + 1) == METATILE_Fortree_SecretBase_LongGrass_BottomMid)
+ MapGridSetMetatileIdAt(currentX, lowerY + 1, METATILE_Fortree_SecretBase_LongGrass_TopMid);
+ if (MapGridGetMetatileIdAt(currentX, lowerY + 1) == METATILE_Fortree_SecretBase_LongGrass_BottomRight)
+ MapGridSetMetatileIdAt(currentX, lowerY + 1, METATILE_Fortree_SecretBase_LongGrass_TopRight);
}
}
@@ -486,62 +481,62 @@ static void HandleLongGrassOnHyper(u8 caseId, s16 x, s16 y)
if (arr[0] == TRUE)
{
- if (MapGridGetMetatileIdAt(newX, y + 3) == METATILE_ID(Fortree, LongGrass_Root))
- MapGridSetMetatileIdAt(newX, y + 3, METATILE_ID(General, Grass));
- if (MapGridGetMetatileIdAt(newX, y + 3) == METATILE_ID(Fortree, SecretBase_LongGrass_BottomLeft))
- MapGridSetMetatileIdAt(newX, y + 3, METATILE_ID(Fortree, SecretBase_LongGrass_TopLeft));
- if (MapGridGetMetatileIdAt(newX, y + 3) == METATILE_ID(Fortree, SecretBase_LongGrass_BottomMid))
- MapGridSetMetatileIdAt(newX, y + 3, METATILE_ID(Fortree, SecretBase_LongGrass_TopMid));
- if (MapGridGetMetatileIdAt(newX, y + 3) == METATILE_ID(Fortree, SecretBase_LongGrass_BottomRight))
- MapGridSetMetatileIdAt(newX, y + 3, METATILE_ID(Fortree, SecretBase_LongGrass_TopRight));
+ if (MapGridGetMetatileIdAt(newX, y + 3) == METATILE_Fortree_LongGrass_Root)
+ MapGridSetMetatileIdAt(newX, y + 3, METATILE_General_Grass);
+ if (MapGridGetMetatileIdAt(newX, y + 3) == METATILE_Fortree_SecretBase_LongGrass_BottomLeft)
+ MapGridSetMetatileIdAt(newX, y + 3, METATILE_Fortree_SecretBase_LongGrass_TopLeft);
+ if (MapGridGetMetatileIdAt(newX, y + 3) == METATILE_Fortree_SecretBase_LongGrass_BottomMid)
+ MapGridSetMetatileIdAt(newX, y + 3, METATILE_Fortree_SecretBase_LongGrass_TopMid);
+ if (MapGridGetMetatileIdAt(newX, y + 3) == METATILE_Fortree_SecretBase_LongGrass_BottomRight)
+ MapGridSetMetatileIdAt(newX, y + 3, METATILE_Fortree_SecretBase_LongGrass_TopRight);
}
if (arr[1] == TRUE)
{
- if (MapGridGetMetatileIdAt(newX, y + 2) == METATILE_ID(General, LongGrass))
+ if (MapGridGetMetatileIdAt(newX, y + 2) == METATILE_General_LongGrass)
{
switch (GetLongGrassCaseAt(newX, y + 3))
{
case LONG_GRASS_FIELD:
- MapGridSetMetatileIdAt(newX, y + 3, METATILE_ID(Fortree, LongGrass_Root));
+ MapGridSetMetatileIdAt(newX, y + 3, METATILE_Fortree_LongGrass_Root);
break;
case LONG_GRASS_BASE_LEFT:
- MapGridSetMetatileIdAt(newX, y + 3, METATILE_ID(Fortree, SecretBase_LongGrass_BottomLeft));
+ MapGridSetMetatileIdAt(newX, y + 3, METATILE_Fortree_SecretBase_LongGrass_BottomLeft);
break;
case LONG_GRASS_BASE_CENTER:
- MapGridSetMetatileIdAt(newX, y + 3, METATILE_ID(Fortree, SecretBase_LongGrass_BottomMid));
+ MapGridSetMetatileIdAt(newX, y + 3, METATILE_Fortree_SecretBase_LongGrass_BottomMid);
break;
case LONG_GRASS_BASE_RIGHT:
- MapGridSetMetatileIdAt(newX, y + 3, METATILE_ID(Fortree, SecretBase_LongGrass_BottomRight));
+ MapGridSetMetatileIdAt(newX, y + 3, METATILE_Fortree_SecretBase_LongGrass_BottomRight);
break;
}
}
- if (MapGridGetMetatileIdAt(newX, y + 4) == METATILE_ID(Fortree, LongGrass_Root))
- MapGridSetMetatileIdAt(newX, y + 4, METATILE_ID(General, Grass));
- if (MapGridGetMetatileIdAt(newX, y + 4) == METATILE_ID(Fortree, SecretBase_LongGrass_BottomLeft))
- MapGridSetMetatileIdAt(newX, y + 4, METATILE_ID(Fortree, SecretBase_LongGrass_TopLeft));
- if (MapGridGetMetatileIdAt(newX, y + 4) == METATILE_ID(Fortree, SecretBase_LongGrass_BottomMid))
- MapGridSetMetatileIdAt(newX, y + 4, METATILE_ID(Fortree, SecretBase_LongGrass_TopMid));
- if (MapGridGetMetatileIdAt(newX, y + 4) == METATILE_ID(Fortree, SecretBase_LongGrass_BottomRight))
- MapGridSetMetatileIdAt(newX, y + 4, METATILE_ID(Fortree, SecretBase_LongGrass_TopRight));
+ if (MapGridGetMetatileIdAt(newX, y + 4) == METATILE_Fortree_LongGrass_Root)
+ MapGridSetMetatileIdAt(newX, y + 4, METATILE_General_Grass);
+ if (MapGridGetMetatileIdAt(newX, y + 4) == METATILE_Fortree_SecretBase_LongGrass_BottomLeft)
+ MapGridSetMetatileIdAt(newX, y + 4, METATILE_Fortree_SecretBase_LongGrass_TopLeft);
+ if (MapGridGetMetatileIdAt(newX, y + 4) == METATILE_Fortree_SecretBase_LongGrass_BottomMid)
+ MapGridSetMetatileIdAt(newX, y + 4, METATILE_Fortree_SecretBase_LongGrass_TopMid);
+ if (MapGridGetMetatileIdAt(newX, y + 4) == METATILE_Fortree_SecretBase_LongGrass_BottomRight)
+ MapGridSetMetatileIdAt(newX, y + 4, METATILE_Fortree_SecretBase_LongGrass_TopRight);
}
if (arr[2] == TRUE)
{
- if (MapGridGetMetatileIdAt(newX, y + 3) == METATILE_ID(General, LongGrass))
+ if (MapGridGetMetatileIdAt(newX, y + 3) == METATILE_General_LongGrass)
{
switch (GetLongGrassCaseAt(newX, y + 4))
{
case LONG_GRASS_FIELD:
- MapGridSetMetatileIdAt(newX, y + 4, METATILE_ID(Fortree, LongGrass_Root));
+ MapGridSetMetatileIdAt(newX, y + 4, METATILE_Fortree_LongGrass_Root);
break;
case LONG_GRASS_BASE_LEFT:
- MapGridSetMetatileIdAt(newX, y + 4, METATILE_ID(Fortree, SecretBase_LongGrass_BottomLeft));
+ MapGridSetMetatileIdAt(newX, y + 4, METATILE_Fortree_SecretBase_LongGrass_BottomLeft);
break;
case LONG_GRASS_BASE_CENTER:
- MapGridSetMetatileIdAt(newX, y + 4, METATILE_ID(Fortree, SecretBase_LongGrass_BottomMid));
+ MapGridSetMetatileIdAt(newX, y + 4, METATILE_Fortree_SecretBase_LongGrass_BottomMid);
break;
case LONG_GRASS_BASE_RIGHT:
- MapGridSetMetatileIdAt(newX, y + 4, METATILE_ID(Fortree, SecretBase_LongGrass_BottomRight));
+ MapGridSetMetatileIdAt(newX, y + 4, METATILE_Fortree_SecretBase_LongGrass_BottomRight);
break;
}
}
@@ -595,16 +590,16 @@ void FixLongGrassMetatilesWindowTop(s16 x, s16 y)
switch (GetLongGrassCaseAt(x, y + 1))
{
case LONG_GRASS_FIELD:
- MapGridSetMetatileIdAt(x, y + 1, METATILE_ID(Fortree, LongGrass_Root));
+ MapGridSetMetatileIdAt(x, y + 1, METATILE_Fortree_LongGrass_Root);
break;
case LONG_GRASS_BASE_LEFT:
- MapGridSetMetatileIdAt(x, y + 1, METATILE_ID(Fortree, SecretBase_LongGrass_BottomLeft));
+ MapGridSetMetatileIdAt(x, y + 1, METATILE_Fortree_SecretBase_LongGrass_BottomLeft);
break;
case LONG_GRASS_BASE_CENTER:
- MapGridSetMetatileIdAt(x, y + 1, METATILE_ID(Fortree, SecretBase_LongGrass_BottomMid));
+ MapGridSetMetatileIdAt(x, y + 1, METATILE_Fortree_SecretBase_LongGrass_BottomMid);
break;
case LONG_GRASS_BASE_RIGHT:
- MapGridSetMetatileIdAt(x, y + 1, METATILE_ID(Fortree, SecretBase_LongGrass_BottomRight));
+ MapGridSetMetatileIdAt(x, y + 1, METATILE_Fortree_SecretBase_LongGrass_BottomRight);
break;
}
}
@@ -612,7 +607,7 @@ void FixLongGrassMetatilesWindowTop(s16 x, s16 y)
void FixLongGrassMetatilesWindowBottom(s16 x, s16 y)
{
- if (MapGridGetMetatileIdAt(x, y) == METATILE_ID(General, Grass))
+ if (MapGridGetMetatileIdAt(x, y) == METATILE_General_Grass)
{
u8 metatileBehavior = MapGridGetMetatileBehaviorAt(x, y + 1);
if (MetatileBehavior_IsLongGrassSouthEdge(metatileBehavior))
@@ -620,17 +615,17 @@ void FixLongGrassMetatilesWindowBottom(s16 x, s16 y)
s32 metatileId = MapGridGetMetatileIdAt(x, y + 1);
switch (metatileId)
{
- case METATILE_ID(Fortree, LongGrass_Root):
- MapGridSetMetatileIdAt(x, y + 1, METATILE_ID(General, Grass));
+ case METATILE_Fortree_LongGrass_Root:
+ MapGridSetMetatileIdAt(x, y + 1, METATILE_General_Grass);
break;
- case METATILE_ID(Fortree, SecretBase_LongGrass_BottomLeft):
- MapGridSetMetatileIdAt(x, y + 1, METATILE_ID(Fortree, SecretBase_LongGrass_TopLeft));
+ case METATILE_Fortree_SecretBase_LongGrass_BottomLeft:
+ MapGridSetMetatileIdAt(x, y + 1, METATILE_Fortree_SecretBase_LongGrass_TopLeft);
break;
- case METATILE_ID(Fortree, SecretBase_LongGrass_BottomMid):
- MapGridSetMetatileIdAt(x, y + 1, METATILE_ID(Fortree, SecretBase_LongGrass_TopMid));
+ case METATILE_Fortree_SecretBase_LongGrass_BottomMid:
+ MapGridSetMetatileIdAt(x, y + 1, METATILE_Fortree_SecretBase_LongGrass_TopMid);
break;
- case METATILE_ID(Fortree, SecretBase_LongGrass_BottomRight):
- MapGridSetMetatileIdAt(x, y + 1, METATILE_ID(Fortree, SecretBase_LongGrass_TopRight));
+ case METATILE_Fortree_SecretBase_LongGrass_BottomRight:
+ MapGridSetMetatileIdAt(x, y + 1, METATILE_Fortree_SecretBase_LongGrass_TopRight);
break;
}
}
@@ -639,7 +634,7 @@ void FixLongGrassMetatilesWindowBottom(s16 x, s16 y)
static void StartCutTreeFieldEffect(void)
{
- PlaySE(SE_W015);
+ PlaySE(SE_M_CUT);
FieldEffectActiveListRemove(FLDEFF_USE_CUT_ON_TREE);
EnableBothScriptContexts();
}
diff --git a/src/fldeff_dig.c b/src/fldeff_dig.c
index ee5caa0df..c3ab989cd 100644
--- a/src/fldeff_dig.c
+++ b/src/fldeff_dig.c
@@ -10,8 +10,8 @@
#include "constants/field_effects.h"
// static functions
-static void hm2_dig(void);
-static void sub_8135780(void);
+static void FieldCallback_Dig(void);
+static void StartDigFieldEffect(void);
// text
bool8 SetUpFieldMove_Dig(void)
@@ -19,7 +19,7 @@ bool8 SetUpFieldMove_Dig(void)
if (CanUseDigOrEscapeRopeOnCurMap() == TRUE)
{
gFieldCallback2 = FieldCallback_PrepareFadeInFromMenu;
- gPostMenuFieldCallback = hm2_dig;
+ gPostMenuFieldCallback = FieldCallback_Dig;
return TRUE;
}
else
@@ -28,7 +28,7 @@ bool8 SetUpFieldMove_Dig(void)
}
}
-static void hm2_dig(void)
+static void FieldCallback_Dig(void)
{
Overworld_ResetStateAfterDigEscRope();
FieldEffectStart(FLDEFF_USE_DIG);
@@ -37,16 +37,16 @@ static void hm2_dig(void)
bool8 FldEff_UseDig(void)
{
- u8 taskId = oei_task_add();
+ u8 taskId = CreateFieldMoveTask();
- gTasks[taskId].data[8] = (u32)sub_8135780 >> 16;
- gTasks[taskId].data[9] = (u32)sub_8135780;
+ gTasks[taskId].data[8] = (u32)StartDigFieldEffect >> 16;
+ gTasks[taskId].data[9] = (u32)StartDigFieldEffect;
if (!ShouldDoBrailleDigEffect())
SetPlayerAvatarTransitionFlags(PLAYER_AVATAR_FLAG_ON_FOOT);
return FALSE;
}
-static void sub_8135780(void)
+static void StartDigFieldEffect(void)
{
u8 taskId;
diff --git a/src/fldeff_escalator.c b/src/fldeff_escalator.c
index 10fb78ee2..7a96eaa82 100644
--- a/src/fldeff_escalator.c
+++ b/src/fldeff_escalator.c
@@ -8,161 +8,188 @@
static EWRAM_DATA u8 sEscalatorAnim_TaskId = 0;
-static void sub_80E12E8(u8 taskId, const s16 *list, u16 isImpassableFlag)
-{
- s16 r5 = gTasks[taskId].data[4] - 1;
- s16 r3 = gTasks[taskId].data[5] - 1;
- s16 r4 = gTasks[taskId].data[1];
- s16 y;
- s16 x;
+static void SetEscalatorMetatile(u8 taskId, const s16 *metatileIds, u16 metatileMasks);
+static void Task_DrawEscalator(u8 taskId);
+static void Task_DrawTeleporterHousing(u8 taskId);
+static void Task_DrawTeleporterCable(u8 taskId);
+
+#define ESCALATOR_STAGES 3
+#define LAST_ESCALATOR_STAGE (ESCALATOR_STAGES - 1)
+
+static const u16 sEscalatorMetatiles_1F_0[ESCALATOR_STAGES] = {
+ METATILE_PokemonCenter_Escalator1F_Tile0_Frame2,
+ METATILE_PokemonCenter_Escalator1F_Tile0_Frame1,
+ METATILE_PokemonCenter_Escalator1F_Tile0_Frame0
+};
+
+static const u16 sEscalatorMetatiles_1F_1[ESCALATOR_STAGES] = {
+ METATILE_PokemonCenter_Escalator1F_Tile1_Frame2,
+ METATILE_PokemonCenter_Escalator1F_Tile1_Frame1,
+ METATILE_PokemonCenter_Escalator1F_Tile1_Frame0
+};
+
+static const u16 sEscalatorMetatiles_1F_2[ESCALATOR_STAGES] = {
+ METATILE_PokemonCenter_Escalator1F_Tile2_Frame2,
+ METATILE_PokemonCenter_Escalator1F_Tile2_Frame1,
+ METATILE_PokemonCenter_Escalator1F_Tile2_Frame0
+};
+
+static const u16 sEscalatorMetatiles_1F_3[ESCALATOR_STAGES] = {
+ METATILE_PokemonCenter_Escalator1F_Tile3_Frame2,
+ METATILE_PokemonCenter_Escalator1F_Tile3_Frame1,
+ METATILE_PokemonCenter_Escalator1F_Tile3_Frame0
+};
- if (gTasks[taskId].data[2] == 0)
+static const u16 sEscalatorMetatiles_2F_0[ESCALATOR_STAGES] = {
+ METATILE_PokemonCenter_Escalator2F_Tile0_Frame0,
+ METATILE_PokemonCenter_Escalator2F_Tile0_Frame1,
+ METATILE_PokemonCenter_Escalator2F_Tile0_Frame2
+};
+
+static const u16 sEscalatorMetatiles_2F_1[ESCALATOR_STAGES] = {
+ METATILE_PokemonCenter_Escalator2F_Tile1_Frame0,
+ METATILE_PokemonCenter_Escalator2F_Tile1_Frame1,
+ METATILE_PokemonCenter_Escalator2F_Tile1_Frame2
+};
+
+static const u16 sEscalatorMetatiles_2F_2[ESCALATOR_STAGES] = {
+ METATILE_PokemonCenter_Escalator2F_Tile2_Frame0,
+ METATILE_PokemonCenter_Escalator2F_Tile2_Frame1,
+ METATILE_PokemonCenter_Escalator2F_Tile2_Frame2
+};
+
+#define tState data[0]
+#define tTransitionStage data[1]
+#define tGoingUp data[2]
+#define tDrawingEscalator data[3]
+#define tPlayerX data[4]
+#define tPlayerY data[5]
+
+static void SetEscalatorMetatile(u8 taskId, const s16 *metatileIds, u16 metatileMasks)
+{
+ s16 x = gTasks[taskId].tPlayerX - 1;
+ s16 y = gTasks[taskId].tPlayerY - 1;
+ s16 transitionStage = gTasks[taskId].tTransitionStage;
+ s16 i;
+ s16 j;
+
+ // Check all the escalator sections and only progress the selected one to the next stage
+ if (!gTasks[taskId].tGoingUp)
{
- for (y = 0; y < 3; y++)
+ for (i = 0; i < 3; i++)
{
- for (x = 0; x < 3; x++)
+ for (j = 0; j < 3; j++)
{
- s16 metatileId = MapGridGetMetatileIdAt(r5 + x, r3 + y);
+ s16 metatileId = MapGridGetMetatileIdAt(x + j, y + i);
- if (list[r4] == metatileId)
+ if (metatileIds[transitionStage] == metatileId)
{
- if (r4 != 2)
- MapGridSetMetatileIdAt(r5 + x, r3 + y, isImpassableFlag | list[r4 + 1]);
+ if (transitionStage != LAST_ESCALATOR_STAGE)
+ MapGridSetMetatileIdAt(x + j, y + i, metatileMasks | metatileIds[transitionStage + 1]);
else
- MapGridSetMetatileIdAt(r5 + x, r3 + y, isImpassableFlag | list[0]);
+ MapGridSetMetatileIdAt(x + j, y + i, metatileMasks | metatileIds[0]);
}
}
}
}
else
{
- for (y = 0; y < 3; y++)
+ for (i = 0; i < 3; i++)
{
- for (x = 0; x < 3; x++)
+ for (j = 0; j < 3; j++)
{
- s16 metatileId = MapGridGetMetatileIdAt(r5 + x, r3 + y);
+ s16 metatileId = MapGridGetMetatileIdAt(x + j, y + i);
- if (list[2 - r4] == metatileId)
+ if (metatileIds[LAST_ESCALATOR_STAGE - transitionStage] == metatileId)
{
- if (r4 != 2)
- MapGridSetMetatileIdAt(r5 + x, r3 + y, isImpassableFlag | list[1 - r4]);
+ if (transitionStage != LAST_ESCALATOR_STAGE)
+ MapGridSetMetatileIdAt(x + j, y + i, metatileMasks | metatileIds[1 - transitionStage]);
else
- MapGridSetMetatileIdAt(r5 + x, r3 + y, isImpassableFlag | list[2]);
+ MapGridSetMetatileIdAt(x + j, y + i, metatileMasks | metatileIds[LAST_ESCALATOR_STAGE]);
}
}
}
}
}
-static const u16 sElevatorMetatiles_1F_0[] = {
- METATILE_ID(PokemonCenter, Elevator1F_Tile0_Frame2),
- METATILE_ID(PokemonCenter, Elevator1F_Tile0_Frame1),
- METATILE_ID(PokemonCenter, Elevator1F_Tile0_Frame0)
-};
-
-static const u16 sElevatorMetatiles_1F_1[] = {
- METATILE_ID(PokemonCenter, Elevator1F_Tile1_Frame2),
- METATILE_ID(PokemonCenter, Elevator1F_Tile1_Frame1),
- METATILE_ID(PokemonCenter, Elevator1F_Tile1_Frame0)
-};
-
-static const u16 sElevatorMetatiles_1F_2[] = {
- METATILE_ID(PokemonCenter, Elevator1F_Tile2_Frame2),
- METATILE_ID(PokemonCenter, Elevator1F_Tile2_Frame1),
- METATILE_ID(PokemonCenter, Elevator1F_Tile2_Frame0)
-};
-
-static const u16 sElevatorMetatiles_1F_3[] = {
- METATILE_ID(PokemonCenter, Elevator1F_Tile3_Frame2),
- METATILE_ID(PokemonCenter, Elevator1F_Tile3_Frame1),
- METATILE_ID(PokemonCenter, Elevator1F_Tile3_Frame0)
-};
-
-static const u16 sElevatorMetatiles_2F_0[] = {
- METATILE_ID(PokemonCenter, Elevator2F_Tile0_Frame0),
- METATILE_ID(PokemonCenter, Elevator2F_Tile0_Frame1),
- METATILE_ID(PokemonCenter, Elevator2F_Tile0_Frame2)
-};
-
-static const u16 sElevatorMetatiles_2F_1[] = {
- METATILE_ID(PokemonCenter, Elevator2F_Tile1_Frame0),
- METATILE_ID(PokemonCenter, Elevator2F_Tile1_Frame1),
- METATILE_ID(PokemonCenter, Elevator2F_Tile1_Frame2)
-};
-
-static const u16 sElevatorMetatiles_2F_2[] = {
- METATILE_ID(PokemonCenter, Elevator2F_Tile2_Frame0),
- METATILE_ID(PokemonCenter, Elevator2F_Tile2_Frame1),
- METATILE_ID(PokemonCenter, Elevator2F_Tile2_Frame2)
-};
-
-static void sub_80E1444(u8 taskId)
+static void Task_DrawEscalator(u8 taskId)
{
s16 *data = gTasks[taskId].data;
- data[3] = 1;
+ tDrawingEscalator = TRUE;
- switch (data[0])
+ // Set tile for each section of the escalator in sequence for current transition stage
+ switch (tState)
{
case 0:
- sub_80E12E8(taskId, sElevatorMetatiles_1F_0, 0);
+ SetEscalatorMetatile(taskId, sEscalatorMetatiles_1F_0, 0);
break;
case 1:
- sub_80E12E8(taskId, sElevatorMetatiles_1F_1, 0);
+ SetEscalatorMetatile(taskId, sEscalatorMetatiles_1F_1, 0);
break;
case 2:
- sub_80E12E8(taskId, sElevatorMetatiles_1F_2, METATILE_COLLISION_MASK);
+ SetEscalatorMetatile(taskId, sEscalatorMetatiles_1F_2, METATILE_COLLISION_MASK);
break;
case 3:
- sub_80E12E8(taskId, sElevatorMetatiles_1F_3, 0);
+ SetEscalatorMetatile(taskId, sEscalatorMetatiles_1F_3, 0);
break;
case 4:
- sub_80E12E8(taskId, sElevatorMetatiles_2F_0, METATILE_COLLISION_MASK);
+ SetEscalatorMetatile(taskId, sEscalatorMetatiles_2F_0, METATILE_COLLISION_MASK);
break;
case 5:
- sub_80E12E8(taskId, sElevatorMetatiles_2F_1, 0);
+ SetEscalatorMetatile(taskId, sEscalatorMetatiles_2F_1, 0);
break;
case 6:
- sub_80E12E8(taskId, sElevatorMetatiles_2F_2, 0);
+ SetEscalatorMetatile(taskId, sEscalatorMetatiles_2F_2, 0);
break;
}
- data[0] = (data[0] + 1) & 7;
- if (!data[0])
+ tState = (tState + 1) & 7;
+
+ // If all metatiles of the escalator have been set, draw map and progress to next stage
+ if (tState == 0)
{
DrawWholeMapView();
- data[1] = (data[1] + 1) % 3;
- data[3] = 0;
+ tTransitionStage = (tTransitionStage + 1) % ESCALATOR_STAGES;
+ tDrawingEscalator = FALSE;
}
}
-static u8 sub_80E150C(u16 var)
+static u8 CreateEscalatorTask(bool16 goingUp)
{
- u8 taskId = CreateTask(sub_80E1444, 0);
+ u8 taskId = CreateTask(Task_DrawEscalator, 0);
s16 *data = gTasks[taskId].data;
- PlayerGetDestCoords(&data[4], &data[5]);
- data[0] = 0;
- data[1] = 0;
- data[2] = var;
- sub_80E1444(taskId);
+ PlayerGetDestCoords(&tPlayerX, &tPlayerY);
+ tState = 0;
+ tTransitionStage = 0;
+ tGoingUp = goingUp;
+ Task_DrawEscalator(taskId);
return taskId;
}
-void sub_80E1558(u8 var)
+void StartEscalator(bool8 goingUp)
{
- sEscalatorAnim_TaskId = sub_80E150C(var);
+ sEscalatorAnim_TaskId = CreateEscalatorTask(goingUp);
}
-void sub_80E1570(void)
+void StopEscalator(void)
{
DestroyTask(sEscalatorAnim_TaskId);
}
-bool8 sub_80E1584(void)
+bool8 IsEscalatorMoving(void)
{
- if (gTasks[sEscalatorAnim_TaskId].data[3] == 0 && gTasks[sEscalatorAnim_TaskId].data[1] == 2)
+ if (gTasks[sEscalatorAnim_TaskId].tDrawingEscalator == FALSE
+ && gTasks[sEscalatorAnim_TaskId].tTransitionStage == LAST_ESCALATOR_STAGE)
return FALSE;
else
return TRUE;
}
+
+#undef tState
+#undef tTransitionStage
+#undef tGoingUp
+#undef tDrawingEscalator
+#undef tPlayerX
+#undef tPlayerY
diff --git a/src/fldeff_flash.c b/src/fldeff_flash.c
index 3cb91d4b1..b2ddf3180 100644
--- a/src/fldeff_flash.c
+++ b/src/fldeff_flash.c
@@ -96,7 +96,7 @@ bool8 SetUpFieldMove_Flash(void)
static void FieldCallback_Flash(void)
{
- u8 taskId = oei_task_add();
+ u8 taskId = CreateFieldMoveTask();
gFieldEffectArguments[0] = GetCursorSelectionMonId();
gTasks[taskId].data[8] = (uintptr_t)FldEff_UseFlash >> 16;
gTasks[taskId].data[9] = (uintptr_t)FldEff_UseFlash;
@@ -104,9 +104,9 @@ static void FieldCallback_Flash(void)
static void FldEff_UseFlash(void)
{
- PlaySE(SE_W115);
+ PlaySE(SE_M_REFLECT);
FlagSet(FLAG_SYS_USE_FLASH);
- ScriptContext1_SetupScript(EventScript_FldEffFlash);
+ ScriptContext1_SetupScript(EventScript_UseFlash);
}
static void CB2_ChangeMapMain(void)
diff --git a/src/fldeff_misc.c b/src/fldeff_misc.c
index 9574ac563..7eae8cfd1 100644
--- a/src/fldeff_misc.c
+++ b/src/fldeff_misc.c
@@ -23,73 +23,58 @@
#include "constants/metatile_labels.h"
#include "constants/songs.h"
#include "constants/tv.h"
-#include "constants/vars.h"
EWRAM_DATA struct MapPosition gPlayerFacingPosition = {0};
-static void sub_80F9C90(u8);
-static void sub_80F9DFC(u8);
+static void Task_ComputerScreenOpenEffect(u8);
+static void Task_ComputerScreenCloseEffect(u8);
+static void CreateComputerScreenEffectTask(TaskFunc, u16, u16, u8);
static void Task_SecretBasePCTurnOn(u8);
static void Task_PopSecretBaseBalloon(u8);
static void DoBalloonSoundEffect(s16);
-static void Task_WateringBerryTreeAnim_1(u8);
-static void Task_WateringBerryTreeAnim_2(u8);
-static void Task_WateringBerryTreeAnim_3(u8);
-
-static void sub_80F9C44(TaskFunc, u16, u16, u8);
+static void Task_WateringBerryTreeAnim_Start(u8);
+static void Task_WateringBerryTreeAnim_Continue(u8);
+static void Task_WateringBerryTreeAnim_End(u8);
static void FieldCallback_SecretBaseCave(void);
-static void CaveEntranceSpriteCallback1(struct Sprite *);
-static void CaveEntranceSpriteCallback2(struct Sprite *);
-static void CaveEntranceSpriteCallbackEnd(struct Sprite *);
+static void SpriteCB_CaveEntranceInit(struct Sprite *);
+static void SpriteCB_CaveEntranceOpen(struct Sprite *);
+static void SpriteCB_CaveEntranceEnd(struct Sprite *);
static void StartSecretBaseCaveFieldEffect(void);
static void FieldCallback_SecretBaseTree(void);
-static void TreeEntranceSpriteCallback1(struct Sprite *);
-static void TreeEntranceSpriteCallback2(struct Sprite *);
-static void TreeEntranceSpriteCallbackEnd(struct Sprite *);
+static void SpriteCB_TreeEntranceInit(struct Sprite *);
+static void SpriteCB_TreeEntranceOpen(struct Sprite *);
+static void SpriteCB_TreeEntranceEnd(struct Sprite *);
static void StartSecretBaseTreeFieldEffect(void);
static void FieldCallback_SecretBaseShrub(void);
-static void ShrubEntranceSpriteCallback1(struct Sprite *);
-static void ShrubEntranceSpriteCallback2(struct Sprite *);
-static void ShrubEntranceSpriteCallbackEnd(struct Sprite *);
+static void SpriteCB_ShrubEntranceInit(struct Sprite *);
+static void SpriteCB_ShrubEntranceOpen(struct Sprite *);
+static void SpriteCB_ShrubEntranceEnd(struct Sprite *);
static void StartSecretBaseShrubFieldEffect(void);
-static void SpriteCB_SandPillar_0(struct Sprite *);
-static void SpriteCB_SandPillar_1(struct Sprite *);
-static void SpriteCB_SandPillar_2(struct Sprite *);
-
-static const u8 gSpriteImage_858D978[] = INCBIN_U8("graphics/unknown/858E588/0.4bpp");
-static const u8 gSpriteImage_858D9F8[] = INCBIN_U8("graphics/unknown/858E588/1.4bpp");
-static const u8 gSpriteImage_858DA78[] = INCBIN_U8("graphics/unknown/858E588/2.4bpp");
-static const u8 gSpriteImage_858DAF8[] = INCBIN_U8("graphics/unknown/858E588/3.4bpp");
-static const u8 gSpriteImage_858DB78[] = INCBIN_U8("graphics/unknown/858E588/4.4bpp");
-
-static const u8 gUnusedEmptySpace_858DBF8[32] = {0};
-
-static const u16 gFieldEffectObjectPalette7[] = INCBIN_U16("graphics/field_effects/palettes/07.gbapal");
-static const u8 gSpriteImage_858DC38[] = INCBIN_U8("graphics/unknown/858E5D8/0.4bpp");
-static const u8 gSpriteImage_858DCB8[] = INCBIN_U8("graphics/unknown/858E5D8/1.4bpp");
-static const u8 gSpriteImage_858DD38[] = INCBIN_U8("graphics/unknown/858E5D8/2.4bpp");
-static const u8 gSpriteImage_858DDB8[] = INCBIN_U8("graphics/unknown/858E5D8/3.4bpp");
-static const u8 gSpriteImage_858DE38[] = INCBIN_U8("graphics/unknown/858E5D8/4.4bpp");
-static const u8 gSpriteImage_858DEB8[] = INCBIN_U8("graphics/unknown/858E5B0/0.4bpp");
-static const u8 gSpriteImage_858DF38[] = INCBIN_U8("graphics/unknown/858E5B0/1.4bpp");
-static const u8 gSpriteImage_858DFB8[] = INCBIN_U8("graphics/unknown/858E5B0/2.4bpp");
-static const u8 gSpriteImage_858E038[] = INCBIN_U8("graphics/unknown/858E5B0/3.4bpp");
-static const u8 gSpriteImage_858E0B8[] = INCBIN_U8("graphics/unknown/858E5B0/4.4bpp");
-static const u8 gSpriteImage_858E138[] = INCBIN_U8("graphics/unknown/858E5B0/5.4bpp");
-static const u16 gFieldEffectObjectPalette8[] = INCBIN_U16("graphics/field_effects/palettes/08.gbapal");
-static const u8 gSpriteImage_858E1D8[] = INCBIN_U8("graphics/unknown/858E674/0.4bpp");
-static const u8 gSpriteImage_858E2D8[] = INCBIN_U8("graphics/unknown/858E674/1.4bpp");
-static const u8 gSpriteImage_858E3D8[] = INCBIN_U8("graphics/unknown/858E674/2.4bpp");
-
-static const struct OamData gOamData_858E4D8 =
+static void SpriteCB_SandPillar_BreakTop(struct Sprite *);
+static void SpriteCB_SandPillar_BreakBase(struct Sprite *);
+static void SpriteCB_SandPillar_End(struct Sprite *);
+
+static const u8 sSecretPowerCave_Gfx[] = INCBIN_U8("graphics/field_effects/pics/secret_power_cave.4bpp");
+static const u8 sFiller[32] = {0};
+static const u16 sSecretPowerCave_Pal[] = INCBIN_U16("graphics/field_effects/palettes/secret_power_cave.gbapal");
+static const u8 sSecretPowerShrub_Gfx[] = INCBIN_U8("graphics/field_effects/pics/secret_power_shrub.4bpp");
+static const u8 sSecretPowerTree_Gfx[] = INCBIN_U8("graphics/field_effects/pics/secret_power_tree.4bpp");
+static const u16 sSecretPowerPlant_Pal[] = INCBIN_U16("graphics/field_effects/palettes/secret_power_plant.gbapal");
+
+// TODO: These should also be combined into a single image, not matching for some reason
+static const u8 sSandPillar0_Gfx[] = INCBIN_U8("graphics/field_effects/pics/sand_pillar/0.4bpp");
+static const u8 sSandPillar1_Gfx[] = INCBIN_U8("graphics/field_effects/pics/sand_pillar/1.4bpp");
+static const u8 sSandPillar2_Gfx[] = INCBIN_U8("graphics/field_effects/pics/sand_pillar/2.4bpp");
+
+static const struct OamData sOam_SecretPower =
{
.y = 0,
.x = 0,
@@ -101,7 +86,7 @@ static const struct OamData gOamData_858E4D8 =
.priority = 2,
};
-static const union AnimCmd gSpriteAnim_858E4E0[] =
+static const union AnimCmd sAnim_SecretPowerCave[] =
{
ANIMCMD_FRAME(0, 8),
ANIMCMD_FRAME(1, 8),
@@ -111,7 +96,7 @@ static const union AnimCmd gSpriteAnim_858E4E0[] =
ANIMCMD_END,
};
-static const union AnimCmd gSpriteAnim_858E4F8[] =
+static const union AnimCmd sAnim_VineDropLeft[] =
{
ANIMCMD_FRAME(0, 8),
ANIMCMD_FRAME(1, 8),
@@ -121,7 +106,7 @@ static const union AnimCmd gSpriteAnim_858E4F8[] =
ANIMCMD_END,
};
-static const union AnimCmd gSpriteAnim_858E510[] =
+static const union AnimCmd sAnim_VineRiseLeft[] =
{
ANIMCMD_FRAME(4, 8),
ANIMCMD_FRAME(3, 8),
@@ -131,7 +116,7 @@ static const union AnimCmd gSpriteAnim_858E510[] =
ANIMCMD_END,
};
-static const union AnimCmd gSpriteAnim_858E528[] =
+static const union AnimCmd sAnim_VineDropRight[] =
{
ANIMCMD_FRAME(0, 8, .hFlip = TRUE),
ANIMCMD_FRAME(1, 8, .hFlip = TRUE),
@@ -141,7 +126,7 @@ static const union AnimCmd gSpriteAnim_858E528[] =
ANIMCMD_END,
};
-static const union AnimCmd gSpriteAnim_858E540[] =
+static const union AnimCmd sAnim_VineRiseRight[] =
{
ANIMCMD_FRAME(4, 8, .hFlip = TRUE),
ANIMCMD_FRAME(3, 8, .hFlip = TRUE),
@@ -151,7 +136,7 @@ static const union AnimCmd gSpriteAnim_858E540[] =
ANIMCMD_END,
};
-static const union AnimCmd gSpriteAnim_858E558[] =
+static const union AnimCmd sAnim_SecretPowerShrub[] =
{
ANIMCMD_FRAME(0, 8),
ANIMCMD_FRAME(1, 8),
@@ -161,88 +146,89 @@ static const union AnimCmd gSpriteAnim_858E558[] =
ANIMCMD_END,
};
-static const union AnimCmd *const gSpriteAnimTable_858E570[] =
+static const union AnimCmd *const sAnimTable_SecretPowerCave[] =
{
- gSpriteAnim_858E4E0,
+ sAnim_SecretPowerCave,
};
-static const union AnimCmd *const gSpriteAnimTable_858E574[] =
+static const union AnimCmd *const sAnimTable_SecretPowerTree[] =
{
- gSpriteAnim_858E4F8,
- gSpriteAnim_858E510,
- gSpriteAnim_858E528,
- gSpriteAnim_858E540,
+ sAnim_VineDropLeft,
+ sAnim_VineRiseLeft,
+ sAnim_VineDropRight,
+ sAnim_VineRiseRight,
};
-static const union AnimCmd *const gSpriteAnimTable_858E584[] =
+static const union AnimCmd *const sAnimTable_SecretPowerShrub[] =
{
- gSpriteAnim_858E558,
+ sAnim_SecretPowerShrub,
};
-static const struct SpriteFrameImage gUnknown_858E588[] =
+static const struct SpriteFrameImage sPicTable_SecretPowerCave[] =
{
- {gSpriteImage_858D978, 0x80},
- {gSpriteImage_858D9F8, 0x80},
- {gSpriteImage_858DA78, 0x80},
- {gSpriteImage_858DAF8, 0x80},
- {gSpriteImage_858DB78, 0x80},
+ overworld_frame(sSecretPowerCave_Gfx, 2, 2, 0),
+ overworld_frame(sSecretPowerCave_Gfx, 2, 2, 1),
+ overworld_frame(sSecretPowerCave_Gfx, 2, 2, 2),
+ overworld_frame(sSecretPowerCave_Gfx, 2, 2, 3),
+ overworld_frame(sSecretPowerCave_Gfx, 2, 2, 4),
};
-static const struct SpriteFrameImage gUnknown_858E5B0[] =
+static const struct SpriteFrameImage sPicTable_SecretPowerTree[] =
{
- {gSpriteImage_858DEB8, 0x80},
- {gSpriteImage_858DF38, 0x80},
- {gSpriteImage_858DFB8, 0x80},
- {gSpriteImage_858E038, 0x80},
- {gSpriteImage_858E0B8, 0x80},
+ overworld_frame(sSecretPowerTree_Gfx, 2, 2, 0),
+ overworld_frame(sSecretPowerTree_Gfx, 2, 2, 1),
+ overworld_frame(sSecretPowerTree_Gfx, 2, 2, 2),
+ overworld_frame(sSecretPowerTree_Gfx, 2, 2, 3),
+ overworld_frame(sSecretPowerTree_Gfx, 2, 2, 4),
+ // 6th frame exists but isnt accessed, the tree vine metatile is used instead
};
-static const struct SpriteFrameImage gUnknown_858E5D8[] =
+static const struct SpriteFrameImage sPicTable_SecretPowerShrub[] =
{
- {gSpriteImage_858DC38, 0x80},
- {gSpriteImage_858DCB8, 0x80},
- {gSpriteImage_858DD38, 0x80},
- {gSpriteImage_858DDB8, 0x80},
- {gSpriteImage_858DE38, 0x80},
+ overworld_frame(sSecretPowerShrub_Gfx, 2, 2, 0),
+ overworld_frame(sSecretPowerShrub_Gfx, 2, 2, 1),
+ overworld_frame(sSecretPowerShrub_Gfx, 2, 2, 2),
+ overworld_frame(sSecretPowerShrub_Gfx, 2, 2, 3),
+ overworld_frame(sSecretPowerShrub_Gfx, 2, 2, 4),
};
-static const struct SpriteTemplate gUnknown_0858E600 =
+static const struct SpriteTemplate sSpriteTemplate_SecretPowerCave =
{
.tileTag = 0xFFFF,
- .paletteTag = 0x1003,
- .oam = &gOamData_858E4D8,
- .anims = gSpriteAnimTable_858E570,
- .images = gUnknown_858E588,
+ .paletteTag = FLDEFF_PAL_TAG_SECRET_POWER_TREE,
+ .oam = &sOam_SecretPower,
+ .anims = sAnimTable_SecretPowerCave,
+ .images = sPicTable_SecretPowerCave,
.affineAnims = gDummySpriteAffineAnimTable,
- .callback = CaveEntranceSpriteCallback1,
+ .callback = SpriteCB_CaveEntranceInit,
};
-static const struct SpriteTemplate gUnknown_0858E618 =
+static const struct SpriteTemplate sSpriteTemplate_SecretPowerTree =
{
.tileTag = 0xFFFF,
- .paletteTag = 0x1008,
- .oam = &gOamData_858E4D8,
- .anims = gSpriteAnimTable_858E574,
- .images = gUnknown_858E5B0,
+ .paletteTag = FLDEFF_PAL_TAG_SECRET_POWER_PLANT,
+ .oam = &sOam_SecretPower,
+ .anims = sAnimTable_SecretPowerTree,
+ .images = sPicTable_SecretPowerTree,
.affineAnims = gDummySpriteAffineAnimTable,
- .callback = TreeEntranceSpriteCallback1,
+ .callback = SpriteCB_TreeEntranceInit,
};
-static const struct SpriteTemplate gUnknown_0858E630 =
+static const struct SpriteTemplate sSpriteTemplate_SecretPowerShrub =
{
.tileTag = 0xFFFF,
- .paletteTag = 0x1008,
- .oam = &gOamData_858E4D8,
- .anims = gSpriteAnimTable_858E584,
- .images = gUnknown_858E5D8,
+ .paletteTag = FLDEFF_PAL_TAG_SECRET_POWER_PLANT,
+ .oam = &sOam_SecretPower,
+ .anims = sAnimTable_SecretPowerShrub,
+ .images = sPicTable_SecretPowerShrub,
.affineAnims = gDummySpriteAffineAnimTable,
- .callback = ShrubEntranceSpriteCallback1,
+ .callback = SpriteCB_ShrubEntranceInit,
};
-const struct SpritePalette gFieldEffectObjectPaletteInfo7 = {gFieldEffectObjectPalette7, 0x1003};
-const struct SpritePalette gFieldEffectObjectPaletteInfo8 = {gFieldEffectObjectPalette8, 0x1008};
+const struct SpritePalette gSpritePalette_SecretPower_Cave = {sSecretPowerCave_Pal, FLDEFF_PAL_TAG_SECRET_POWER_TREE};
+const struct SpritePalette gSpritePalette_SecretPower_Plant = {sSecretPowerPlant_Pal, FLDEFF_PAL_TAG_SECRET_POWER_PLANT};
-static const struct OamData gOamData_858E658 =
+static const struct OamData sOam_SandPillar =
{
.x = 0,
.y = 0,
@@ -254,7 +240,7 @@ static const struct OamData gOamData_858E658 =
.priority = 2,
};
-static const union AnimCmd gSpriteAnim_858E660[] =
+static const union AnimCmd sAnim_SandPillar[] =
{
ANIMCMD_FRAME(0, 6),
ANIMCMD_FRAME(1, 6),
@@ -262,47 +248,44 @@ static const union AnimCmd gSpriteAnim_858E660[] =
ANIMCMD_END,
};
-static const union AnimCmd *const gSpriteAnimTable_858E670[] =
+static const union AnimCmd *const sAnimTable_SandPillar[] =
{
- gSpriteAnim_858E660,
+ sAnim_SandPillar,
};
-static const struct SpriteFrameImage gUnknown_0858E674[] =
+static const struct SpriteFrameImage sPicTable_SandPillar[] =
{
- {gSpriteImage_858E1D8, 0x100},
- {gSpriteImage_858E2D8, 0x100},
- {gSpriteImage_858E3D8, 0x100},
+ {sSandPillar0_Gfx, sizeof(sSandPillar0_Gfx)},
+ {sSandPillar1_Gfx, sizeof(sSandPillar1_Gfx)},
+ {sSandPillar2_Gfx, sizeof(sSandPillar2_Gfx)},
};
-static const struct SpriteTemplate gUnknown_0858E68C =
+static const struct SpriteTemplate sSpriteTemplate_SandPillar =
{
.tileTag = 0xFFFF,
- .paletteTag = 0x100E,
- .oam = &gOamData_858E658,
- .anims = gSpriteAnimTable_858E670,
- .images = gUnknown_0858E674,
+ .paletteTag = FLDEFF_PAL_TAG_SAND_PILLAR,
+ .oam = &sOam_SandPillar,
+ .anims = sAnimTable_SandPillar,
+ .images = sPicTable_SandPillar,
.affineAnims = gDummySpriteAffineAnimTable,
- .callback = SpriteCB_SandPillar_0,
+ .callback = SpriteCB_SandPillar_BreakTop,
};
-// This uses one of the secret base palettes, so there is no "graphics/field_effects/palettes/09.pal" file.
-const struct SpritePalette gFieldEffectObjectPaletteInfo9 = {gTilesetPalettes_SecretBase[5], 0x100E};
+const struct SpritePalette gSpritePalette_SandPillar = {gTilesetPalettes_SecretBase[5], FLDEFF_PAL_TAG_SAND_PILLAR};
-static const u8 gSpriteImage_858E6AC[] = INCBIN_U8("graphics/unknown/858E84C/0.4bpp");
-static const u8 gSpriteImage_858E72C[] = INCBIN_U8("graphics/unknown/858E84C/1.4bpp");
-static const u8 gSpriteImage_858E7AC[] = INCBIN_U8("graphics/unknown/858E84C/2.4bpp");
-static const u16 gUnknown_0858E82C[] = INCBIN_U16("graphics/unknown/unknown_58E82C.gbapal");
+static const u8 sRecordMixLights_Gfx[] = INCBIN_U8("graphics/field_effects/pics/record_mix_lights.4bpp");
+static const u16 sRecordMixLights_Pal[] = INCBIN_U16("graphics/field_effects/palettes/record_mix_lights.gbapal");
-static const struct SpriteFrameImage gUnknown_0858E84C[] =
+static const struct SpriteFrameImage sPicTable_RecordMixLights[] =
{
- {gSpriteImage_858E6AC, sizeof(gSpriteImage_858E6AC)},
- {gSpriteImage_858E72C, sizeof(gSpriteImage_858E72C)},
- {gSpriteImage_858E7AC, sizeof(gSpriteImage_858E7AC)},
+ overworld_frame(sRecordMixLights_Gfx, 4, 1, 0),
+ overworld_frame(sRecordMixLights_Gfx, 4, 1, 1),
+ overworld_frame(sRecordMixLights_Gfx, 4, 1, 2),
};
-static const struct SpritePalette gUnknown_0858E864 = {gUnknown_0858E82C, 0x1000};
+static const struct SpritePalette sSpritePalette_RecordMixLights = {sRecordMixLights_Pal, 0x1000};
-static const union AnimCmd gSpriteAnim_858E86C[] =
+static const union AnimCmd sAnim_RecordMixLights[] =
{
ANIMCMD_FRAME(0, 30),
ANIMCMD_FRAME(1, 30),
@@ -310,173 +293,182 @@ static const union AnimCmd gSpriteAnim_858E86C[] =
ANIMCMD_JUMP(0),
};
-static const union AnimCmd *const gSpriteAnimTable_858E87C[] =
+static const union AnimCmd *const sAnimTable_RecordMixLights[] =
{
- gSpriteAnim_858E86C,
+ sAnim_RecordMixLights,
};
-static const struct SpriteTemplate gUnknown_0858E880 =
+static const struct SpriteTemplate sSpriteTemplate_RecordMixLights =
{
.tileTag = 0xFFFF,
.paletteTag = 0x1000,
.oam = &gObjectEventBaseOam_32x8,
- .anims = gSpriteAnimTable_858E87C,
- .images = gUnknown_0858E84C,
+ .anims = sAnimTable_RecordMixLights,
+ .images = sPicTable_RecordMixLights,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = SpriteCallbackDummy,
};
-void sub_80F9BCC(u16 a0, u16 a1, u8 a2)
+// For accessing pokemon storage PC or the Hall of Fame PC
+void ComputerScreenOpenEffect(u16 increment, u16 unused, u8 priority)
{
- sub_80F9C44(sub_80F9C90, a0, a1, a2);
+ CreateComputerScreenEffectTask(Task_ComputerScreenOpenEffect, increment, unused, priority);
}
-void sub_80F9BF4(u16 a0, u16 a1, u8 a2)
+void ComputerScreenCloseEffect(u16 increment, u16 unused, u8 priority)
{
- sub_80F9C44(sub_80F9DFC, a0, a1, a2);
+ CreateComputerScreenEffectTask(Task_ComputerScreenCloseEffect, increment, unused, priority);
}
-bool8 sub_80F9C1C(void)
+bool8 IsComputerScreenOpenEffectActive(void)
{
- return FuncIsActiveTask(sub_80F9C90);
+ return FuncIsActiveTask(Task_ComputerScreenOpenEffect);
}
-bool8 sub_80F9C30(void)
+bool8 IsComputerScreenCloseEffectActive(void)
{
- return FuncIsActiveTask(sub_80F9DFC);
+ return FuncIsActiveTask(Task_ComputerScreenCloseEffect);
}
-static void sub_80F9C44(void (*taskfunc) (u8), u16 a1, u16 a2, u8 a3)
+#define tState data[0]
+#define tHorzIncrement data[1]
+#define tVertIncrement data[2]
+#define tWinLeft data[3]
+#define tWinRight data[4]
+#define tWinTop data[5]
+#define tWinBottom data[6]
+#define tBlendCnt data[7]
+#define tBlendY data[8]
+
+static void CreateComputerScreenEffectTask(void (*taskfunc) (u8), u16 increment, u16 unused, u8 priority)
{
- u8 taskId = CreateTask(taskfunc, a3);
+ u8 taskId = CreateTask(taskfunc, priority);
- gTasks[taskId].data[0] = 0;
- gTasks[taskId].data[1] = a1 == 0 ? 16 : a1;
- gTasks[taskId].data[2] = a1 == 0 ? 20 : a1;
+ gTasks[taskId].tState = 0;
+ gTasks[taskId].tHorzIncrement = increment == 0 ? 16 : increment;
+ gTasks[taskId].tVertIncrement = increment == 0 ? 20 : increment;
gTasks[taskId].func(taskId);
}
-static void sub_80F9C90(u8 taskId)
+static void Task_ComputerScreenOpenEffect(u8 taskId)
{
struct Task *task = &gTasks[taskId];
- switch (task->data[0])
+ switch (task->tState)
{
case 0:
- task->data[3] = 0x78;
- task->data[4] = 0x78;
- task->data[5] = 0x50;
- task->data[6] = 0x51;
+ task->tWinLeft = DISPLAY_WIDTH / 2;
+ task->tWinRight = DISPLAY_WIDTH / 2;
+ task->tWinTop = DISPLAY_HEIGHT / 2;
+ task->tWinBottom = DISPLAY_HEIGHT / 2 + 1;
SetGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_WIN0_ON);
- SetGpuReg(REG_OFFSET_WIN0H, WIN_RANGE(task->data[3], task->data[4]));
- SetGpuReg(REG_OFFSET_WIN0V, WIN_RANGE(task->data[5], task->data[6]));
- SetGpuReg(REG_OFFSET_WININ, 0x3F);
+ SetGpuReg(REG_OFFSET_WIN0H, WIN_RANGE(task->tWinLeft, task->tWinRight));
+ SetGpuReg(REG_OFFSET_WIN0V, WIN_RANGE(task->tWinTop, task->tWinBottom));
+ SetGpuReg(REG_OFFSET_WININ, WININ_WIN0_BG_ALL | WININ_WIN0_OBJ | WININ_WIN0_CLR);
SetGpuReg(REG_OFFSET_WINOUT, 0);
break;
case 1:
- task->data[7] = GetGpuReg(REG_OFFSET_BLDCNT);
- task->data[8] = GetGpuReg(REG_OFFSET_BLDY);
+ task->tBlendCnt = GetGpuReg(REG_OFFSET_BLDCNT);
+ task->tBlendY = GetGpuReg(REG_OFFSET_BLDY);
SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT1_ALL | BLDCNT_EFFECT_LIGHTEN);
- SetGpuReg(REG_OFFSET_BLDY, 0x10);
+ SetGpuReg(REG_OFFSET_BLDY, 16);
break;
case 2:
- task->data[3] -= task->data[1];
- task->data[4] += task->data[1];
+ task->tWinLeft -= task->tHorzIncrement;
+ task->tWinRight += task->tHorzIncrement;
- if (task->data[3] < 1 || task->data[4] > 0xEF)
+ if (task->tWinLeft < 1 || task->tWinRight > DISPLAY_WIDTH - 1)
{
- task->data[3] = 0;
- task->data[4] = 0xF0;
+ task->tWinLeft = 0;
+ task->tWinRight = DISPLAY_WIDTH;
SetGpuReg(REG_OFFSET_BLDY, 0);
- SetGpuReg(REG_OFFSET_BLDCNT, task->data[7]);
+ SetGpuReg(REG_OFFSET_BLDCNT, task->tBlendCnt);
BlendPalettes(0xFFFFFFFF, 0, 0);
gPlttBufferFaded[0] = 0;
}
- SetGpuReg(REG_OFFSET_WIN0H, WIN_RANGE(task->data[3], task->data[4]));
+ SetGpuReg(REG_OFFSET_WIN0H, WIN_RANGE(task->tWinLeft, task->tWinRight));
- if (task->data[3] != 0)
+ if (task->tWinLeft != 0)
return;
break;
case 3:
- task->data[5] -= task->data[2];
- task->data[6] += task->data[2];
+ task->tWinTop -= task->tVertIncrement;
+ task->tWinBottom += task->tVertIncrement;
- if (task->data[5] < 1 || task->data[6] > 0x9F)
+ if (task->tWinTop < 1 || task->tWinBottom > DISPLAY_HEIGHT - 1)
{
- task->data[5] = 0;
- task->data[6] = 0xA0;
+ task->tWinTop = 0;
+ task->tWinBottom = DISPLAY_HEIGHT;
ClearGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_WIN0_ON);
}
- SetGpuReg(REG_OFFSET_WIN0V, WIN_RANGE(task->data[5], task->data[6]));
+ SetGpuReg(REG_OFFSET_WIN0V, WIN_RANGE(task->tWinTop, task->tWinBottom));
- if (task->data[5] != 0)
+ if (task->tWinTop != 0)
return;
break;
default:
- SetGpuReg(REG_OFFSET_BLDCNT, task->data[7]);
+ SetGpuReg(REG_OFFSET_BLDCNT, task->tBlendCnt);
DestroyTask(taskId);
return;
}
- task->data[0]++;
+ task->tState++;
}
-static void sub_80F9DFC(u8 taskId)
+static void Task_ComputerScreenCloseEffect(u8 taskId)
{
struct Task *task = &gTasks[taskId];
- int temp = task->data[0];
-
- switch (temp)
+ switch (task->tState)
{
case 0:
- gPlttBufferFaded[0] = temp;
+ gPlttBufferFaded[0] = 0;
break;
case 1:
- task->data[3] = 0;
- task->data[4] = 0xF0;
- task->data[5] = 0;
- task->data[6] = 0xA0;
+ task->tWinLeft = 0;
+ task->tWinRight = DISPLAY_WIDTH;
+ task->tWinTop = 0;
+ task->tWinBottom = DISPLAY_HEIGHT;
SetGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_WIN0_ON);
- SetGpuReg(REG_OFFSET_WIN0H, WIN_RANGE(task->data[3], task->data[4]));
- SetGpuReg(REG_OFFSET_WIN0V, WIN_RANGE(task->data[5], task->data[6]));
- SetGpuReg(REG_OFFSET_WININ, 0x3F);
+ SetGpuReg(REG_OFFSET_WIN0H, WIN_RANGE(task->tWinLeft, task->tWinRight));
+ SetGpuReg(REG_OFFSET_WIN0V, WIN_RANGE(task->tWinTop, task->tWinBottom));
+ SetGpuReg(REG_OFFSET_WININ, WININ_WIN0_BG_ALL | WININ_WIN0_OBJ | WININ_WIN0_CLR);
SetGpuReg(REG_OFFSET_WINOUT, 0);
break;
case 2:
- task->data[5] += task->data[2];
- task->data[6] -= task->data[2];
+ task->tWinTop += task->tVertIncrement;
+ task->tWinBottom -= task->tVertIncrement;
- if (task->data[5] > 0x4F || task->data[6] < 0x52)
+ if (task->tWinTop >= DISPLAY_HEIGHT / 2 || task->tWinBottom <= DISPLAY_HEIGHT / 2 + 1)
{
- task->data[5] = 0x50;
- task->data[6] = 0x51;
+ task->tWinTop = DISPLAY_HEIGHT / 2;
+ task->tWinBottom = DISPLAY_HEIGHT / 2 + 1;
SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT1_ALL | BLDCNT_EFFECT_LIGHTEN);
- SetGpuReg(REG_OFFSET_BLDY, 0x10);
+ SetGpuReg(REG_OFFSET_BLDY, 16);
}
- SetGpuReg(REG_OFFSET_WIN0V, WIN_RANGE(task->data[5], task->data[6]));
+ SetGpuReg(REG_OFFSET_WIN0V, WIN_RANGE(task->tWinTop, task->tWinBottom));
- if (task->data[5] != 0x50)
+ if (task->tWinTop != DISPLAY_HEIGHT / 2)
return;
break;
case 3:
- task->data[3] += task->data[1];
- task->data[4] -= task->data[1];
+ task->tWinLeft += task->tHorzIncrement;
+ task->tWinRight -= task->tHorzIncrement;
- if (task->data[3] > 0x77 || task->data[4] < 0x79)
+ if (task->tWinLeft >= DISPLAY_WIDTH / 2 || task->tWinRight <= DISPLAY_WIDTH / 2)
{
- task->data[3] = 0x78;
- task->data[4] = 0x78;
- BlendPalettes(-1, 0x10, 0);
+ task->tWinLeft = DISPLAY_WIDTH / 2;
+ task->tWinRight = DISPLAY_WIDTH / 2;
+ BlendPalettes(-1, 16, 0);
gPlttBufferFaded[0] = 0;
}
- SetGpuReg(REG_OFFSET_WIN0H, WIN_RANGE(task->data[3], task->data[4]));
+ SetGpuReg(REG_OFFSET_WIN0H, WIN_RANGE(task->tWinLeft, task->tWinRight));
- if (task->data[3] != 0x78)
+ if (task->tWinLeft != DISPLAY_WIDTH / 2)
return;
break;
default:
@@ -486,9 +478,19 @@ static void sub_80F9DFC(u8 taskId)
DestroyTask(taskId);
return;
}
- task->data[0]++;
+ task->tState++;
}
+#undef tState
+#undef tHorzIncrement
+#undef tVertIncrement
+#undef tWinLeft
+#undef tWinRight
+#undef tWinTop
+#undef tWinBottom
+#undef tBlendCnt
+#undef tBlendY
+
static void SetCurrentSecretBase(void)
{
SetCurSecretBaseIdFromPosition(&gPlayerFacingPosition, gMapHeader.events);
@@ -497,7 +499,7 @@ static void SetCurrentSecretBase(void)
static void AdjustSecretPowerSpritePixelOffsets(void)
{
- if (gPlayerAvatar.flags & 0x6)
+ if (gPlayerAvatar.flags & (PLAYER_AVATAR_FLAG_MACH_BIKE | PLAYER_AVATAR_FLAG_ACRO_BIKE))
{
switch (gFieldEffectArguments[1])
{
@@ -590,7 +592,7 @@ static void FieldCallback_SecretBaseCave(void)
bool8 FldEff_UseSecretPowerCave(void)
{
- u8 taskId = oei_task_add();
+ u8 taskId = CreateFieldMoveTask();
gTasks[taskId].data[8] = (u32)StartSecretBaseCaveFieldEffect >> 16;
gTasks[taskId].data[9] = (u32)StartSecretBaseCaveFieldEffect;
@@ -607,22 +609,22 @@ static void StartSecretBaseCaveFieldEffect(void)
bool8 FldEff_SecretPowerCave(void)
{
AdjustSecretPowerSpritePixelOffsets();
- CreateSprite(&gUnknown_0858E600,
+ CreateSprite(&sSpriteTemplate_SecretPowerCave,
gSprites[gPlayerAvatar.spriteId].oam.x + gFieldEffectArguments[5],
gSprites[gPlayerAvatar.spriteId].oam.y + gFieldEffectArguments[6],
148);
return FALSE;
}
-static void CaveEntranceSpriteCallback1(struct Sprite *sprite)
+static void SpriteCB_CaveEntranceInit(struct Sprite *sprite)
{
- PlaySE(SE_W088);
+ PlaySE(SE_M_ROCK_THROW);
sprite->data[0] = 0;
- sprite->callback = CaveEntranceSpriteCallback2;
+ sprite->callback = SpriteCB_CaveEntranceOpen;
}
-static void CaveEntranceSpriteCallback2(struct Sprite *sprite)
+static void SpriteCB_CaveEntranceOpen(struct Sprite *sprite)
{
if (sprite->data[0] < 40)
{
@@ -632,11 +634,11 @@ static void CaveEntranceSpriteCallback2(struct Sprite *sprite)
else
{
sprite->data[0] = 0;
- sprite->callback = CaveEntranceSpriteCallbackEnd;
+ sprite->callback = SpriteCB_CaveEntranceEnd;
}
}
-static void CaveEntranceSpriteCallbackEnd(struct Sprite *sprite)
+static void SpriteCB_CaveEntranceEnd(struct Sprite *sprite)
{
FieldEffectStop(sprite, FLDEFF_SECRET_POWER_CAVE);
EnableBothScriptContexts();
@@ -650,7 +652,7 @@ static void FieldCallback_SecretBaseTree(void)
bool8 FldEff_UseSecretPowerTree(void)
{
- u8 taskId = oei_task_add();
+ u8 taskId = CreateFieldMoveTask();
gTasks[taskId].data[8] = (u32)StartSecretBaseTreeFieldEffect >> 16;
gTasks[taskId].data[9] = (u32)StartSecretBaseTreeFieldEffect;
@@ -676,7 +678,7 @@ bool8 FldEff_SecretPowerTree(void)
AdjustSecretPowerSpritePixelOffsets();
- CreateSprite(&gUnknown_0858E618,
+ CreateSprite(&sSpriteTemplate_SecretPowerTree,
gSprites[gPlayerAvatar.spriteId].oam.x + gFieldEffectArguments[5],
gSprites[gPlayerAvatar.spriteId].oam.y + gFieldEffectArguments[6],
148);
@@ -687,16 +689,16 @@ bool8 FldEff_SecretPowerTree(void)
return FALSE;
}
-static void TreeEntranceSpriteCallback1(struct Sprite *sprite)
+static void SpriteCB_TreeEntranceInit(struct Sprite *sprite)
{
- PlaySE(SE_W010);
+ PlaySE(SE_M_SCRATCH);
sprite->animNum = gFieldEffectArguments[7];
sprite->data[0] = 0;
- sprite->callback = TreeEntranceSpriteCallback2;
+ sprite->callback = SpriteCB_TreeEntranceOpen;
}
-static void TreeEntranceSpriteCallback2(struct Sprite *sprite)
+static void SpriteCB_TreeEntranceOpen(struct Sprite *sprite)
{
sprite->data[0]++;
@@ -706,11 +708,11 @@ static void TreeEntranceSpriteCallback2(struct Sprite *sprite)
ToggleSecretBaseEntranceMetatile();
sprite->data[0] = 0;
- sprite->callback = TreeEntranceSpriteCallbackEnd;
+ sprite->callback = SpriteCB_TreeEntranceEnd;
}
}
-static void TreeEntranceSpriteCallbackEnd(struct Sprite *sprite)
+static void SpriteCB_TreeEntranceEnd(struct Sprite *sprite)
{
FieldEffectStop(sprite, FLDEFF_SECRET_POWER_TREE);
EnableBothScriptContexts();
@@ -724,7 +726,7 @@ static void FieldCallback_SecretBaseShrub(void)
bool8 FldEff_UseSecretPowerShrub(void)
{
- u8 taskId = oei_task_add();
+ u8 taskId = CreateFieldMoveTask();
gTasks[taskId].data[8] = (u32)StartSecretBaseShrubFieldEffect >> 16;
gTasks[taskId].data[9] = (u32)StartSecretBaseShrubFieldEffect;
@@ -742,7 +744,7 @@ bool8 FldEff_SecretPowerShrub(void)
{
AdjustSecretPowerSpritePixelOffsets();
- CreateSprite(&gUnknown_0858E630,
+ CreateSprite(&sSpriteTemplate_SecretPowerShrub,
gSprites[gPlayerAvatar.spriteId].oam.x + gFieldEffectArguments[5],
gSprites[gPlayerAvatar.spriteId].oam.y + gFieldEffectArguments[6],
148);
@@ -750,15 +752,15 @@ bool8 FldEff_SecretPowerShrub(void)
return FALSE;
}
-static void ShrubEntranceSpriteCallback1(struct Sprite *sprite)
+static void SpriteCB_ShrubEntranceInit(struct Sprite *sprite)
{
- PlaySE(SE_W077);
+ PlaySE(SE_M_POISON_POWDER);
sprite->data[0] = 0;
- sprite->callback = ShrubEntranceSpriteCallback2;
+ sprite->callback = SpriteCB_ShrubEntranceOpen;
}
-static void ShrubEntranceSpriteCallback2(struct Sprite *sprite)
+static void SpriteCB_ShrubEntranceOpen(struct Sprite *sprite)
{
if (sprite->data[0] < 40)
{
@@ -770,16 +772,20 @@ static void ShrubEntranceSpriteCallback2(struct Sprite *sprite)
else
{
sprite->data[0] = 0;
- sprite->callback = ShrubEntranceSpriteCallbackEnd;
+ sprite->callback = SpriteCB_ShrubEntranceEnd;
}
}
-static void ShrubEntranceSpriteCallbackEnd(struct Sprite *sprite)
+static void SpriteCB_ShrubEntranceEnd(struct Sprite *sprite)
{
FieldEffectStop(sprite, FLDEFF_SECRET_POWER_SHRUB);
EnableBothScriptContexts();
}
+#define tX data[0]
+#define tY data[1]
+#define tState data[2]
+
bool8 FldEff_SecretBasePCTurnOn(void)
{
s16 x, y;
@@ -788,9 +794,9 @@ bool8 FldEff_SecretBasePCTurnOn(void)
GetXYCoordsOneStepInFrontOfPlayer(&x, &y);
taskId = CreateTask(Task_SecretBasePCTurnOn, 0);
- gTasks[taskId].data[0] = x;
- gTasks[taskId].data[1] = y;
- gTasks[taskId].data[2] = 0;
+ gTasks[taskId].tX = x;
+ gTasks[taskId].tY = y;
+ gTasks[taskId].tState = 0;
return FALSE;
}
@@ -799,30 +805,34 @@ static void Task_SecretBasePCTurnOn(u8 taskId)
{
s16 *data = gTasks[taskId].data;
- switch (data[2])
+ switch (tState)
{
case 4:
case 12:
- MapGridSetMetatileIdAt(data[0], data[1], METATILE_SecretBase_PC_On);
- CurrentMapDrawMetatileAt(data[0], data[1]);
+ MapGridSetMetatileIdAt(tX, tY, METATILE_SecretBase_PC_On);
+ CurrentMapDrawMetatileAt(tX, tY);
break;
case 8:
case 16:
- MapGridSetMetatileIdAt(data[0], data[1], METATILE_SecretBase_PC);
- CurrentMapDrawMetatileAt(data[0], data[1]);
+ MapGridSetMetatileIdAt(tX, tY, METATILE_SecretBase_PC);
+ CurrentMapDrawMetatileAt(tX, tY);
break;
case 20:
- MapGridSetMetatileIdAt(data[0], data[1], METATILE_SecretBase_PC_On);
- CurrentMapDrawMetatileAt(data[0], data[1]);
+ MapGridSetMetatileIdAt(tX, tY, METATILE_SecretBase_PC_On);
+ CurrentMapDrawMetatileAt(tX, tY);
FieldEffectActiveListRemove(FLDEFF_PCTURN_ON);
EnableBothScriptContexts();
DestroyTask(taskId);
return;
}
- data[2]++;
+ tState++;
}
+#undef tX
+#undef tY
+#undef tState
+
void DoSecretBasePCTurnOffEffect(void)
{
s16 x, y;
@@ -878,33 +888,33 @@ static void DoBalloonSoundEffect(s16 metatileId)
switch (metatileId)
{
case METATILE_SecretBase_RedBalloon:
- PlaySE(SE_FUUSEN1);
+ PlaySE(SE_BALLOON_RED);
break;
case METATILE_SecretBase_BlueBalloon:
- PlaySE(SE_FUUSEN2);
+ PlaySE(SE_BALLOON_BLUE);
break;
case METATILE_SecretBase_YellowBalloon:
- PlaySE(SE_FUUSEN3);
+ PlaySE(SE_BALLOON_YELLOW);
break;
case METATILE_SecretBase_MudBall:
- PlaySE(SE_TOY_DANGO);
+ PlaySE(SE_MUD_BALL);
break;
}
}
-bool8 FldEff_NopA6FC(void)
+bool8 FldEff_Nop47(void)
{
return FALSE;
}
-bool8 FldEff_NopA700(void)
+bool8 FldEff_Nop48(void)
{
return FALSE;
}
static void DoSecretBaseBreakableDoorEffect(s16 x, s16 y)
{
- PlaySE(SE_TOY_KABE);
+ PlaySE(SE_BREAKABLE_DOOR);
MapGridSetMetatileIdAt(x, y, METATILE_SecretBase_BreakableDoor_BottomOpen);
MapGridSetMetatileIdAt(x, y - 1, METATILE_SecretBase_BreakableDoor_TopOpen);
CurrentMapDrawMetatileAt(x, y);
@@ -949,28 +959,28 @@ static void Task_SecretBaseMusicNoteMatSound(u8 taskId)
switch (gTasks[taskId].tMetatileID)
{
case METATILE_SecretBase_NoteMat_C_Low:
- PlaySE(SE_TOY_C);
+ PlaySE(SE_NOTE_C);
break;
case METATILE_SecretBase_NoteMat_D:
- PlaySE(SE_TOY_D);
+ PlaySE(SE_NOTE_D);
break;
case METATILE_SecretBase_NoteMat_E:
- PlaySE(SE_TOY_E);
+ PlaySE(SE_NOTE_E);
break;
case METATILE_SecretBase_NoteMat_F:
- PlaySE(SE_TOY_F);
+ PlaySE(SE_NOTE_F);
break;
case METATILE_SecretBase_NoteMat_G:
- PlaySE(SE_TOY_G);
+ PlaySE(SE_NOTE_G);
break;
case METATILE_SecretBase_NoteMat_A:
- PlaySE(SE_TOY_A);
+ PlaySE(SE_NOTE_A);
break;
case METATILE_SecretBase_NoteMat_B:
- PlaySE(SE_TOY_B);
+ PlaySE(SE_NOTE_B);
break;
case METATILE_SecretBase_NoteMat_C_High:
- PlaySE(SE_TOY_C1);
+ PlaySE(SE_NOTE_C_HIGH);
break;
}
@@ -996,7 +1006,7 @@ static void SpriteCB_GlitterMatSparkle(struct Sprite *sprite)
sprite->data[0]++;
if (sprite->data[0] == 8)
- PlaySE(SE_W215);
+ PlaySE(SE_M_HEAL_BELL);
if (sprite->data[0] >= 32)
DestroySprite(sprite);
@@ -1008,9 +1018,9 @@ void DoSecretBaseGlitterMatSparkle(void)
s16 y = gObjectEvents[gPlayerAvatar.objectEventId].currentCoords.y;
u8 spriteId;
- sub_80930E0(&x, &y, 8, 4);
+ SetSpritePosToOffsetMapCoords(&x, &y, 8, 4);
- spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[22], x, y, 0);
+ spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[FLDEFFOBJ_SPARKLE], x, y, 0);
if (spriteId != MAX_SPRITES)
{
gSprites[spriteId].coordOffsetEnabled = TRUE;
@@ -1034,7 +1044,7 @@ bool8 FldEff_SandPillar(void)
switch (GetPlayerFacingDirection())
{
case DIR_SOUTH:
- CreateSprite(&gUnknown_0858E68C,
+ CreateSprite(&sSpriteTemplate_SandPillar,
gSprites[gPlayerAvatar.spriteId].oam.x + 8,
gSprites[gPlayerAvatar.spriteId].oam.y + 32,
0);
@@ -1042,7 +1052,7 @@ bool8 FldEff_SandPillar(void)
break;
case DIR_NORTH:
- CreateSprite(&gUnknown_0858E68C,
+ CreateSprite(&sSpriteTemplate_SandPillar,
gSprites[gPlayerAvatar.spriteId].oam.x + 8,
gSprites[gPlayerAvatar.spriteId].oam.y,
148);
@@ -1050,7 +1060,7 @@ bool8 FldEff_SandPillar(void)
break;
case DIR_WEST:
- CreateSprite(&gUnknown_0858E68C,
+ CreateSprite(&sSpriteTemplate_SandPillar,
gSprites[gPlayerAvatar.spriteId].oam.x - 8,
gSprites[gPlayerAvatar.spriteId].oam.y + 16,
148);
@@ -1058,7 +1068,7 @@ bool8 FldEff_SandPillar(void)
break;
case DIR_EAST:
- CreateSprite(&gUnknown_0858E68C,
+ CreateSprite(&sSpriteTemplate_SandPillar,
gSprites[gPlayerAvatar.spriteId].oam.x + 24,
gSprites[gPlayerAvatar.spriteId].oam.y + 16,
148);
@@ -1069,9 +1079,9 @@ bool8 FldEff_SandPillar(void)
return FALSE;
}
-static void SpriteCB_SandPillar_0(struct Sprite *sprite)
+static void SpriteCB_SandPillar_BreakTop(struct Sprite *sprite)
{
- PlaySE(SE_W088);
+ PlaySE(SE_M_ROCK_THROW);
if (MapGridGetMetatileIdAt(gFieldEffectArguments[5], gFieldEffectArguments[6] - 1) == METATILE_SecretBase_SandOrnament_TopWall)
MapGridSetMetatileIdAt(gFieldEffectArguments[5], gFieldEffectArguments[6] - 1, METATILE_SecretBase_Wall_TopMid | METATILE_COLLISION_MASK);
@@ -1083,10 +1093,10 @@ static void SpriteCB_SandPillar_0(struct Sprite *sprite)
CurrentMapDrawMetatileAt(gFieldEffectArguments[5], gFieldEffectArguments[6]);
sprite->data[0] = 0;
- sprite->callback = SpriteCB_SandPillar_1;
+ sprite->callback = SpriteCB_SandPillar_BreakBase;
}
-static void SpriteCB_SandPillar_1(struct Sprite *sprite)
+static void SpriteCB_SandPillar_BreakBase(struct Sprite *sprite)
{
if (sprite->data[0] < 18)
{
@@ -1097,11 +1107,11 @@ static void SpriteCB_SandPillar_1(struct Sprite *sprite)
MapGridSetMetatileIdAt(gFieldEffectArguments[5], gFieldEffectArguments[6], METATILE_SecretBase_SandOrnament_BrokenBase | METATILE_COLLISION_MASK);
CurrentMapDrawMetatileAt(gFieldEffectArguments[5], gFieldEffectArguments[6]);
sprite->data[0] = 0;
- sprite->callback = SpriteCB_SandPillar_2;
+ sprite->callback = SpriteCB_SandPillar_End;
}
}
-static void SpriteCB_SandPillar_2(struct Sprite *sprite)
+static void SpriteCB_SandPillar_End(struct Sprite *sprite)
{
FieldEffectStop(sprite, FLDEFF_SAND_PILLAR);
EnableBothScriptContexts();
@@ -1167,12 +1177,13 @@ void InteractWithShieldOrTVDecoration(void)
}
}
-bool8 sub_80FADE4(u16 metatileId, u8 arg1)
+// As opposed to a small one (single metatile) like the balloons
+bool8 IsLargeBreakableDecoration(u16 metatileId, bool8 checkBase)
{
if (!CurMapIsSecretBase())
return FALSE;
- if (!arg1)
+ if (!checkBase)
{
if (metatileId == METATILE_SecretBase_SandOrnament_Top || metatileId == METATILE_SecretBase_SandOrnament_TopWall)
return TRUE;
@@ -1215,7 +1226,7 @@ static void Task_FieldPoisonEffect(u8 taskId)
void FldEffPoison_Start(void)
{
- PlaySE(SE_DOKU);
+ PlaySE(SE_FIELD_POISON);
CreateTask(Task_FieldPoisonEffect, 80);
}
@@ -1224,25 +1235,26 @@ bool32 FldEffPoison_IsActive(void)
return FuncIsActiveTask(Task_FieldPoisonEffect);
}
-static void Task_WateringBerryTreeAnim_0(u8 taskId)
+static void Task_WateringBerryTreeAnim(u8 taskId)
{
- gTasks[taskId].func = Task_WateringBerryTreeAnim_1;
+ gTasks[taskId].func = Task_WateringBerryTreeAnim_Start;
}
-static void Task_WateringBerryTreeAnim_1(u8 taskId)
+static void Task_WateringBerryTreeAnim_Start(u8 taskId)
{
struct ObjectEvent *playerObjEvent = &gObjectEvents[gPlayerAvatar.objectEventId];
if (!ObjectEventIsMovementOverridden(playerObjEvent)
|| ObjectEventClearHeldMovementIfFinished(playerObjEvent))
{
- sub_808C228(GetPlayerFacingDirection());
+ // Start watering
+ SetPlayerAvatarWatering(GetPlayerFacingDirection());
ObjectEventSetHeldMovement(playerObjEvent, GetWalkInPlaceNormalMovementAction(GetPlayerFacingDirection()));
- gTasks[taskId].func = Task_WateringBerryTreeAnim_2;
+ gTasks[taskId].func = Task_WateringBerryTreeAnim_Continue;
}
}
-static void Task_WateringBerryTreeAnim_2(u8 taskId)
+static void Task_WateringBerryTreeAnim_Continue(u8 taskId)
{
struct ObjectEvent *playerObjEvent = &gObjectEvents[gPlayerAvatar.objectEventId];
@@ -1250,15 +1262,15 @@ static void Task_WateringBerryTreeAnim_2(u8 taskId)
{
s16 value = gTasks[taskId].data[1]++;
+ // Continue holding watering action 10 times, then end
if (value < 10)
ObjectEventSetHeldMovement(playerObjEvent, GetWalkInPlaceNormalMovementAction(GetPlayerFacingDirection()));
-
else
- gTasks[taskId].func = Task_WateringBerryTreeAnim_3;
+ gTasks[taskId].func = Task_WateringBerryTreeAnim_End;
}
}
-static void Task_WateringBerryTreeAnim_3(u8 taskId)
+static void Task_WateringBerryTreeAnim_End(u8 taskId)
{
SetPlayerAvatarTransitionFlags(GetPlayerAvatarFlags());
DestroyTask(taskId);
@@ -1267,16 +1279,17 @@ static void Task_WateringBerryTreeAnim_3(u8 taskId)
void DoWateringBerryTreeAnim(void)
{
- CreateTask(Task_WateringBerryTreeAnim_0, 80);
+ CreateTask(Task_WateringBerryTreeAnim, 80);
}
-u8 CreateRecordMixingSprite(void)
+// The lights that blink on the counter when mixing records in the cable club
+u8 CreateRecordMixingLights(void)
{
u8 spriteId;
- LoadSpritePalette(&gUnknown_0858E864);
+ LoadSpritePalette(&sSpritePalette_RecordMixLights);
- spriteId = CreateSprite(&gUnknown_0858E880, 0, 0, 82);
+ spriteId = CreateSprite(&sSpriteTemplate_RecordMixLights, 0, 0, 82);
if (spriteId == MAX_SPRITES)
{
@@ -1293,13 +1306,13 @@ u8 CreateRecordMixingSprite(void)
return spriteId;
}
-void DestroyRecordMixingSprite(void)
+void DestroyRecordMixingLights(void)
{
int i;
for (i = 0; i < MAX_SPRITES; i++)
{
- if (gSprites[i].template == &gUnknown_0858E880)
+ if (gSprites[i].template == &sSpriteTemplate_RecordMixLights)
{
FreeSpritePalette(&gSprites[i]);
DestroySprite(&gSprites[i]);
diff --git a/src/fldeff_rocksmash.c b/src/fldeff_rocksmash.c
index 614fa6135..6f4ce8002 100644
--- a/src/fldeff_rocksmash.c
+++ b/src/fldeff_rocksmash.c
@@ -20,12 +20,13 @@
#include "constants/songs.h"
// static functions
-static void task08_080C9820(u8 taskId);
-static void sub_8135578(u8 taskId);
-static void sub_813552C(u8 taskId);
-static void sub_813561C(u8 taskId);
-static void sub_81356C4(void);
-static void sub_8135714(void);
+static void Task_DoFieldMove_Init(u8 taskId);
+static void Task_DoFieldMove_ShowMonAfterPose(u8 taskId);
+static void Task_DoFieldMove_WaitForMon(u8 taskId);
+static void Task_DoFieldMove_RunFunc(u8 taskId);
+
+static void FieldCallback_RockSmash(void);
+static void FieldMove_RockSmash(void);
// text
bool8 CheckObjectGraphicsInFrontOfPlayer(u8 graphicsId)
@@ -46,13 +47,13 @@ bool8 CheckObjectGraphicsInFrontOfPlayer(u8 graphicsId)
}
}
-u8 oei_task_add(void)
+u8 CreateFieldMoveTask(void)
{
GetXYCoordsOneStepInFrontOfPlayer(&gPlayerFacingPosition.x, &gPlayerFacingPosition.y);
- return CreateTask(task08_080C9820, 8);
+ return CreateTask(Task_DoFieldMove_Init, 8);
}
-static void task08_080C9820(u8 taskId)
+static void Task_DoFieldMove_Init(u8 taskId)
{
u8 objEventId;
@@ -64,56 +65,61 @@ static void task08_080C9820(u8 taskId)
{
if (gMapHeader.mapType == MAP_TYPE_UNDERWATER)
{
+ // Skip field move pose underwater
FieldEffectStart(FLDEFF_FIELD_MOVE_SHOW_MON_INIT);
- gTasks[taskId].func = sub_8135578;
+ gTasks[taskId].func = Task_DoFieldMove_WaitForMon;
}
else
{
- sub_808C114();
+ // Do field move pose
+ SetPlayerAvatarFieldMove();
ObjectEventSetHeldMovement(&gObjectEvents[objEventId], MOVEMENT_ACTION_START_ANIM_IN_DIRECTION);
- gTasks[taskId].func = sub_813552C;
+ gTasks[taskId].func = Task_DoFieldMove_ShowMonAfterPose;
}
}
}
-static void sub_813552C(u8 taskId)
+static void Task_DoFieldMove_ShowMonAfterPose(u8 taskId)
{
if (ObjectEventCheckHeldMovementStatus(&gObjectEvents[gPlayerAvatar.objectEventId]) == TRUE)
{
FieldEffectStart(FLDEFF_FIELD_MOVE_SHOW_MON_INIT);
- gTasks[taskId].func = sub_8135578;
+ gTasks[taskId].func = Task_DoFieldMove_WaitForMon;
}
}
-static void sub_8135578(u8 taskId)
+static void Task_DoFieldMove_WaitForMon(u8 taskId)
{
if (!FieldEffectActiveListContains(FLDEFF_FIELD_MOVE_SHOW_MON))
{
gFieldEffectArguments[1] = GetPlayerFacingDirection();
- if (gFieldEffectArguments[1] == 1)
+ if (gFieldEffectArguments[1] == DIR_SOUTH)
gFieldEffectArguments[2] = 0;
- if (gFieldEffectArguments[1] == 2)
+ if (gFieldEffectArguments[1] == DIR_NORTH)
gFieldEffectArguments[2] = 1;
- if (gFieldEffectArguments[1] == 3)
+ if (gFieldEffectArguments[1] == DIR_WEST)
gFieldEffectArguments[2] = 2;
- if (gFieldEffectArguments[1] == 4)
+ if (gFieldEffectArguments[1] == DIR_EAST)
gFieldEffectArguments[2] = 3;
ObjectEventSetGraphicsId(&gObjectEvents[gPlayerAvatar.objectEventId], GetPlayerAvatarGraphicsIdByCurrentState());
StartSpriteAnim(&gSprites[gPlayerAvatar.spriteId], gFieldEffectArguments[2]);
- FieldEffectActiveListRemove(6);
- gTasks[taskId].func = sub_813561C;
+ FieldEffectActiveListRemove(FLDEFF_FIELD_MOVE_SHOW_MON);
+ gTasks[taskId].func = Task_DoFieldMove_RunFunc;
}
}
-static void sub_813561C(u8 taskId)
+static void Task_DoFieldMove_RunFunc(u8 taskId)
{
- void (*func)(void) = (void (*)(void))(((u16)gTasks[taskId].data[8] << 16) | (u16)gTasks[taskId].data[9]);
+ // The function for the field move to do is stored in halves across data[8] and data[9]
+ void (*fieldMoveFunc)(void) = (void (*)(void))(((u16)gTasks[taskId].data[8] << 16) | (u16)gTasks[taskId].data[9]);
- func();
+ fieldMoveFunc();
gPlayerAvatar.preventStep = FALSE;
DestroyTask(taskId);
}
+// Called when Rock Smash is used from the party menu
+// For interacting with a smashable rock in the field, see EventScript_RockSmash
bool8 SetUpFieldMove_RockSmash(void)
{
// In Ruby and Sapphire, Regirock's tomb is opened by using Strength. In Emerald,
@@ -128,7 +134,7 @@ bool8 SetUpFieldMove_RockSmash(void)
else if (CheckObjectGraphicsInFrontOfPlayer(OBJ_EVENT_GFX_BREAKABLE_ROCK) == TRUE)
{
gFieldCallback2 = FieldCallback_PrepareFadeInFromMenu;
- gPostMenuFieldCallback = sub_81356C4;
+ gPostMenuFieldCallback = FieldCallback_RockSmash;
return TRUE;
}
else
@@ -137,25 +143,26 @@ bool8 SetUpFieldMove_RockSmash(void)
}
}
-static void sub_81356C4(void)
+static void FieldCallback_RockSmash(void)
{
gFieldEffectArguments[0] = GetCursorSelectionMonId();
- ScriptContext1_SetupScript(EventScript_FldEffRockSmash);
+ ScriptContext1_SetupScript(EventScript_UseRockSmash);
}
bool8 FldEff_UseRockSmash(void)
{
- u8 taskId = oei_task_add();
+ u8 taskId = CreateFieldMoveTask();
- gTasks[taskId].data[8] = (u32)sub_8135714 >> 16;
- gTasks[taskId].data[9] = (u32)sub_8135714;
+ gTasks[taskId].data[8] = (u32)FieldMove_RockSmash >> 16;
+ gTasks[taskId].data[9] = (u32)FieldMove_RockSmash;
IncrementGameStat(GAME_STAT_USED_ROCK_SMASH);
return FALSE;
}
-static void sub_8135714(void)
+// The actual rock smashing is handled by EventScript_SmashRock, so this function does very little
+static void FieldMove_RockSmash(void)
{
- PlaySE(SE_W088);
+ PlaySE(SE_M_ROCK_THROW);
FieldEffectActiveListRemove(FLDEFF_USE_ROCK_SMASH);
EnableBothScriptContexts();
}
diff --git a/src/fldeff_softboiled.c b/src/fldeff_softboiled.c
index 1a42b297d..3a38f67f0 100644
--- a/src/fldeff_softboiled.c
+++ b/src/fldeff_softboiled.c
@@ -61,13 +61,13 @@ void Task_TryUseSoftboiledOnPartyMon(u8 taskId)
}
// Take away Softboiled user's health first (-1)
- PlaySE(SE_KAIFUKU);
+ PlaySE(SE_USE_ITEM);
PartyMenuModifyHP(taskId, userPartyId, -1, GetMonData(&gPlayerParty[userPartyId], MON_DATA_MAX_HP)/5, Task_SoftboiledRestoreHealth);
}
static void Task_SoftboiledRestoreHealth(u8 taskId)
{
- PlaySE(SE_KAIFUKU);
+ PlaySE(SE_USE_ITEM);
PartyMenuModifyHP(taskId, gPartyMenu.slotId2, 1, GetMonData(&gPlayerParty[gPartyMenu.slotId], MON_DATA_MAX_HP)/5, Task_DisplayHPRestoredMessage);
}
@@ -76,7 +76,7 @@ static void Task_DisplayHPRestoredMessage(u8 taskId)
GetMonNickname(&gPlayerParty[gPartyMenu.slotId2], gStringVar1);
StringExpandPlaceholders(gStringVar4, gText_PkmnHPRestoredByVar2);
DisplayPartyMenuMessage(gStringVar4, FALSE);
- schedule_bg_copy_tilemap_to_vram(2);
+ ScheduleBgCopyTilemapToVram(2);
gTasks[taskId].func = Task_FinishSoftboiled;
}
@@ -106,6 +106,6 @@ static void CantUseSoftboiledOnMon(u8 taskId)
{
PlaySE(SE_SELECT);
DisplayPartyMenuMessage(gText_CantBeUsedOnPkmn, FALSE);
- schedule_bg_copy_tilemap_to_vram(2);
+ ScheduleBgCopyTilemapToVram(2);
gTasks[taskId].func = Task_ChooseNewMonForSoftboiled;
}
diff --git a/src/fldeff_strength.c b/src/fldeff_strength.c
index f479ef68d..61960d0ff 100644
--- a/src/fldeff_strength.c
+++ b/src/fldeff_strength.c
@@ -11,8 +11,8 @@
#include "constants/field_effects.h"
// static functions
-static void FldEff_UseStrength(void);
-static void sub_8145E74(void);
+static void FieldCallback_Strength(void);
+static void StartStrengthFieldEffect(void);
// text
bool8 SetUpFieldMove_Strength(void)
@@ -21,28 +21,29 @@ bool8 SetUpFieldMove_Strength(void)
{
gSpecialVar_Result = GetCursorSelectionMonId();
gFieldCallback2 = FieldCallback_PrepareFadeInFromMenu;
- gPostMenuFieldCallback = FldEff_UseStrength;
+ gPostMenuFieldCallback = FieldCallback_Strength;
return TRUE;
}
return FALSE;
}
-static void FldEff_UseStrength(void)
+static void FieldCallback_Strength(void)
{
gFieldEffectArguments[0] = GetCursorSelectionMonId();
- ScriptContext1_SetupScript(EventScript_FldEffStrength);
+ ScriptContext1_SetupScript(EventScript_UseStrength);
}
-bool8 sub_8145E2C(void)
+bool8 FldEff_UseStrength(void)
{
- u8 taskId = oei_task_add();
- gTasks[taskId].data[8] = (u32)sub_8145E74 >> 16;
- gTasks[taskId].data[9] = (u32)sub_8145E74;
+ u8 taskId = CreateFieldMoveTask();
+ gTasks[taskId].data[8] = (u32)StartStrengthFieldEffect >> 16;
+ gTasks[taskId].data[9] = (u32)StartStrengthFieldEffect;
GetMonNickname(&gPlayerParty[gFieldEffectArguments[0]], gStringVar1);
return FALSE;
}
-static void sub_8145E74(void)
+// Just passes control back to EventScript_UseStrength
+static void StartStrengthFieldEffect(void)
{
FieldEffectActiveListRemove(FLDEFF_USE_STRENGTH);
EnableBothScriptContexts();
diff --git a/src/fldeff_sweetscent.c b/src/fldeff_sweetscent.c
index 788310b5d..a9d81501f 100644
--- a/src/fldeff_sweetscent.c
+++ b/src/fldeff_sweetscent.c
@@ -41,7 +41,7 @@ bool8 FldEff_SweetScent(void)
u8 taskId;
SetWeatherScreenFadeOut();
- taskId = oei_task_add();
+ taskId = CreateFieldMoveTask();
gTasks[taskId].data[8] = (u32)StartSweetScentFieldEffect >> 16;
gTasks[taskId].data[9] = (u32)StartSweetScentFieldEffect;
return FALSE;
@@ -51,7 +51,7 @@ static void StartSweetScentFieldEffect(void)
{
u8 taskId;
- PlaySE(SE_W230);
+ PlaySE(SE_M_SWEET_SCENT);
CpuFastSet(gPlttBufferUnfaded, gPaletteDecompressionBuffer, 0x100);
CpuFastSet(gPlttBufferFaded, gPlttBufferUnfaded, 0x100);
BeginNormalPaletteFade(~(1 << (gSprites[GetPlayerAvatarObjectId()].oam.paletteNum + 16)), 4, 0, 8, RGB_RED);
diff --git a/src/fldeff_teleport.c b/src/fldeff_teleport.c
index cbf8ee6cc..3f087e5da 100644
--- a/src/fldeff_teleport.c
+++ b/src/fldeff_teleport.c
@@ -30,7 +30,7 @@ static void FieldCallback_Teleport(void)
bool8 FldEff_UseTeleport(void)
{
- u8 taskId = oei_task_add();
+ u8 taskId = CreateFieldMoveTask();
gTasks[taskId].data[8] = (u32)StartTeleportFieldEffect >> 16;
gTasks[taskId].data[9] = (u32)StartTeleportFieldEffect;
SetPlayerAvatarTransitionFlags(PLAYER_AVATAR_FLAG_ON_FOOT);
@@ -40,5 +40,5 @@ bool8 FldEff_UseTeleport(void)
static void StartTeleportFieldEffect(void)
{
FieldEffectActiveListRemove(FLDEFF_USE_TELEPORT);
- CreateTeleportFieldEffectTask();
+ FldEff_TeleportWarpOut();
}
diff --git a/src/frontier_pass.c b/src/frontier_pass.c
index 42a518ed6..702f6c098 100644
--- a/src/frontier_pass.c
+++ b/src/frontier_pass.c
@@ -698,7 +698,7 @@ static bool32 InitFrontierPass(void)
ResetSpriteData();
FreeAllSpritePalettes();
ResetPaletteFade();
- reset_temp_tile_data_buffers();
+ ResetTempTileDataBuffers();
break;
case 3:
AllocateFrontierPassGfx();
@@ -719,11 +719,11 @@ static bool32 InitFrontierPass(void)
sPassGfx->unk20 = malloc_and_decompress(gUnknown_085712F8, &sizeOut);
sPassGfx->unk24 = malloc_and_decompress(gUnknown_08571060, &sizeOut);
sPassGfx->unk28 = malloc_and_decompress(gUnknown_085712C0, &sizeOut);
- decompress_and_copy_tile_data_to_vram(1, gUnknown_08DE08C8, 0, 0, 0);
- decompress_and_copy_tile_data_to_vram(2, gUnknown_08DE2084, 0, 0, 0);
+ DecompressAndCopyTileDataToVram(1, gUnknown_08DE08C8, 0, 0, 0);
+ DecompressAndCopyTileDataToVram(2, gUnknown_08DE2084, 0, 0, 0);
break;
case 7:
- if (free_temp_tile_data_buffers_if_possible())
+ if (FreeTempTileDataBuffersIfPossible())
return FALSE;
FillBgTilemapBufferRect_Palette0(0, 0, 0, 0, 30, 20);
FillBgTilemapBufferRect_Palette0(1, 0, 0, 0, 30, 20);
@@ -735,7 +735,7 @@ static bool32 InitFrontierPass(void)
case 8:
LoadPalette(gUnknown_08DE07C8[0], 0, 0x1A0);
LoadPalette(gUnknown_08DE07C8[1 + sPassData->trainerStars], 0x10, 0x20);
- LoadPalette(stdpal_get(0), 0xF0, 0x20);
+ LoadPalette(GetTextWindowPalette(0), 0xF0, 0x20);
sub_80C629C();
sub_80C6104(sPassData->cursorArea, sPassData->previousCursorArea);
if (sPassData->unkE == 1 || sPassData->unkE == 2)
@@ -871,10 +871,10 @@ static void CB2_ReturnFromRecord(void)
switch (InBattlePyramid())
{
case 1:
- PlayBGM(MUS_PYRAMID);
+ PlayBGM(MUS_B_PYRAMID);
break;
case 2:
- PlayBGM(MUS_PYRAMID_TOP);
+ PlayBGM(MUS_B_PYRAMID_TOP);
break;
default:
Overworld_PlaySpecialMapMusic();
@@ -1016,16 +1016,16 @@ static void Task_DoFadeEffect(u8 taskId)
if (!data[0])
{
sub_80C5F58(TRUE, FALSE);
- data[1] = 0x100;
- data[2] = 0x100;
+ data[1] = Q_8_8(1);
+ data[2] = Q_8_8(1);
data[3] = 0x15;
data[4] = 0x15;
BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 0x10, RGB_WHITE);
}
else
{
- data[1] = 0x1FC;
- data[2] = 0x1FC;
+ data[1] = Q_8_8(1.984375); // 1 and 63/64
+ data[2] = Q_8_8(1.984375);
data[3] = -0x15;
data[4] = -0x15;
SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_OBJ_ON | DISPCNT_OBJ_1D_MAP);
@@ -1038,23 +1038,23 @@ static void Task_DoFadeEffect(u8 taskId)
BeginNormalPaletteFade(0xFFFFFFFF, 0, 0x10, 0, RGB_WHITE);
}
sPassGfx->setAffine = TRUE;
- sPassGfx->unk2E = sub_8151624(data[1]);
- sPassGfx->unk30 = sub_8151624(data[2]);
+ sPassGfx->unk2E = MathUtil_Inv16(data[1]);
+ sPassGfx->unk30 = MathUtil_Inv16(data[2]);
break;
case 1:
UpdatePaletteFade();
data[1] += data[3];
data[2] += data[4];
- sPassGfx->unk2E = sub_8151624(data[1]);
- sPassGfx->unk30 = sub_8151624(data[2]);
+ sPassGfx->unk2E = MathUtil_Inv16(data[1]);
+ sPassGfx->unk30 = MathUtil_Inv16(data[2]);
if (!data[0])
{
- if (data[1] <= 0x1FC)
+ if (data[1] <= Q_8_8(1.984375))
return;
}
else
{
- if (data[1] != 0x100)
+ if (data[1] != Q_8_8(1))
return;
}
break;
@@ -1154,8 +1154,8 @@ static void sub_80C5F58(bool8 arg0, bool8 arg1)
gUnknown_085713E0[sPassData->unkE - 1][1] << 8,
gUnknown_085713E0[sPassData->unkE - 1][0],
gUnknown_085713E0[sPassData->unkE - 1][1],
- sub_8151624(0x1FC),
- sub_8151624(0x1FC),
+ MathUtil_Inv16(Q_8_8(1.984375)), // 1 and 63/64
+ MathUtil_Inv16(Q_8_8(1.984375)),
0);
}
else
@@ -1165,8 +1165,8 @@ static void sub_80C5F58(bool8 arg0, bool8 arg1)
gUnknown_085713E0[sPassData->unkE - 1][1] << 8,
gUnknown_085713E0[sPassData->unkE - 1][0],
gUnknown_085713E0[sPassData->unkE - 1][1],
- sub_8151624(0x100),
- sub_8151624(0x100),
+ MathUtil_Inv16(Q_8_8(1)),
+ MathUtil_Inv16(Q_8_8(1)),
0);
}
}
@@ -1239,7 +1239,9 @@ static void sub_80C6104(u8 cursorArea, u8 previousCursorArea)
if (!var)
{
- asm("":::"r4");
+ #ifndef NONMATCHING
+ asm("":::"r4");
+ #endif
if (previousCursorArea == CURSOR_AREA_NOTHING || previousCursorArea > CURSOR_AREA_CANCEL)
return;
}
@@ -1353,7 +1355,7 @@ static bool32 InitFrontierMap(void)
ResetSpriteData();
FreeAllSpritePalettes();
ResetPaletteFade();
- reset_temp_tile_data_buffers();
+ ResetTempTileDataBuffers();
break;
case 3:
ResetBgsAndClearDma3BusyFlags(0);
@@ -1372,13 +1374,13 @@ static bool32 InitFrontierMap(void)
InitWindows(sMapWindowTemplates);
DeactivateAllTextPrinters();
PrintOnFrontierMap();
- decompress_and_copy_tile_data_to_vram(1, gUnknown_0856FBBC, 0, 0, 0);
+ DecompressAndCopyTileDataToVram(1, gUnknown_0856FBBC, 0, 0, 0);
break;
case 5:
- if (free_temp_tile_data_buffers_if_possible())
+ if (FreeTempTileDataBuffersIfPossible())
return FALSE;
LoadPalette(gUnknown_08DE07C8[0], 0, 0x1A0);
- LoadPalette(stdpal_get(0), 0xF0, 0x20);
+ LoadPalette(GetTextWindowPalette(0), 0xF0, 0x20);
CopyToBgTilemapBuffer(2, gUnknown_08570E00, 0, 0);
CopyBgTilemapBufferToVram(2);
break;
@@ -1705,5 +1707,5 @@ static void HandleFrontierMapCursorMove(u8 direction)
CopyWindowToVram(i, 3);
CopyBgTilemapBufferToVram(0);
- PlaySE(SE_Z_SCROLL);
+ PlaySE(SE_DEX_SCROLL);
}
diff --git a/src/frontier_util.c b/src/frontier_util.c
index 668771375..3e7fecb48 100644
--- a/src/frontier_util.c
+++ b/src/frontier_util.c
@@ -7,7 +7,7 @@
#include "battle_tower.h"
#include "field_specials.h"
#include "battle.h"
-#include "script_pokemon_util_80F87D8.h"
+#include "script_pokemon_util.h"
#include "main.h"
#include "window.h"
#include "menu.h"
@@ -2539,8 +2539,8 @@ void CreateFrontierBrainPokemon(void)
NAKED
void CreateFrontierBrainPokemon(void)
{
- asm_unified("\n\
- push {r4-r7,lr}\n\
+ asm_unified(
+ "push {r4-r7,lr}\n\
mov r7, r10\n\
mov r6, r9\n\
mov r5, r8\n\
@@ -2768,8 +2768,7 @@ _081A4FD0:\n\
pop {r4-r7}\n\
pop {r0}\n\
bx r0\n\
- .pool\n\
-");
+ .pool");
}
#endif
diff --git a/src/graphics.c b/src/graphics.c
index d8222cfae..3973c1507 100644
--- a/src/graphics.c
+++ b/src/graphics.c
@@ -461,23 +461,21 @@ const u32 gContestMiscGfx[] = INCBIN_U32("graphics/contest/misc.4bpp.lz");
const u32 gContestAudienceGfx[] = INCBIN_U32("graphics/contest/audience.4bpp.lz");
-const u32 gUnknown_08C19168[] = INCBIN_U32("graphics/contest/faces.4bpp.lz");
+const u32 gContestFaces_Gfx[] = INCBIN_U32("graphics/contest/faces.4bpp.lz");
const u32 gContestJudgeSymbolsGfx[] = INCBIN_U32("graphics/contest/judge_symbols.4bpp.lz");
const u32 gContest3Pal[] = INCBIN_U32("graphics/contest/judge_symbols.gbapal.lz");
-const u8 gTiles_8C19450[] = INCBIN_U8("graphics/contest/heart.4bpp");
+const u8 gContestSliderHeart_Gfx[] = INCBIN_U8("graphics/contest/slider_heart.4bpp");
const u32 gUnknownGfx_C19470[] = INCBIN_U32("graphics/unknown/unknown_C19470.4bpp.lz");
const u32 gUnknownPal_C19470[] = INCBIN_U32("graphics/unknown/unknown_C19470.gbapal.lz");
-const u32 gUnknown_08C19588[] = INCBIN_U32("graphics/contest/misc_2.4bpp.lz");
-
+const u32 gContestResults_Gfx[] = INCBIN_U32("graphics/contest/results_screen.4bpp.lz");
const u32 gUnknown_08C19EEC[] = INCBIN_U32("graphics/contest/misc_2_tilemap_1.bin.lz");
const u32 gUnknown_08C1A000[] = INCBIN_U32("graphics/contest/misc_2_tilemap_2.bin.lz");
const u32 gUnknown_08C1A12C[] = INCBIN_U32("graphics/contest/misc_2_tilemap_3.bin.lz");
-
-const u32 gUnknown_08C1A2B4[] = INCBIN_U32("graphics/contest/misc_2.gbapal.lz");
+const u32 gContestResults_Pal[] = INCBIN_U32("graphics/contest/results_screen.gbapal.lz");
const u32 gBattleAnimSpriteGfx_Impact[] = INCBIN_U32("graphics/battle_anims/sprites/impact.4bpp.lz");
const u32 gBattleAnimSpritePal_Impact[] = INCBIN_U32("graphics/battle_anims/sprites/impact.gbapal.lz");
@@ -875,8 +873,8 @@ const u32 gSubstituteDollTilemap[] = INCBIN_U32("graphics/battle_anims/sprites/s
const u32 gBattleAnimSpriteGfx_GreenStar[] = INCBIN_U32("graphics/battle_anims/sprites/green_star.4bpp.lz");
const u32 gBattleAnimSpritePal_GreenStar[] = INCBIN_U32("graphics/battle_anims/sprites/green_star.gbapal.lz");
-const u32 gContestConfetti_Gfx[] = INCBIN_U32("graphics/misc/confetti.4bpp.lz");
-const u32 gContestConfetti_Pal[] = INCBIN_U32("graphics/misc/confetti.gbapal.lz");
+const u32 gConfetti_Gfx[] = INCBIN_U32("graphics/misc/confetti.4bpp.lz");
+const u32 gConfetti_Pal[] = INCBIN_U32("graphics/misc/confetti.gbapal.lz");
const u32 gBattleAnimSpriteGfx_PinkCloud[] = INCBIN_U32("graphics/battle_anims/sprites/pink_cloud.4bpp.lz");
const u32 gBattleAnimSpritePal_PinkCloud[] = INCBIN_U32("graphics/battle_anims/sprites/pink_cloud.gbapal.lz");
@@ -989,8 +987,7 @@ const u16 gTilesetAnims_BattleDomePals0_1[] = INCBIN_U16("graphics/battle_fronti
const u16 gTilesetAnims_BattleDomePals0_2[] = INCBIN_U16("graphics/battle_frontier/dome_anim3.gbapal");
const u16 gTilesetAnims_BattleDomePals0_3[] = INCBIN_U16("graphics/battle_frontier/dome_anim4.gbapal");
-// 8D856C0
-asm(".2byte 0x013F, 0x0119, 0x0113, 0x010E"); // unused?
+static const u16 sUnused0[] = {0x13F, 0x119, 0x113, 0x10E};
const u16 gUnknown_08D856C8[] = INCBIN_U16("graphics/battle_frontier/pyramid_light.gbapal"); // unfaded pal for the player light in battle pyramid
@@ -1070,10 +1067,9 @@ const u32 gBattleAnimBgPalette_Solarbeam[] = INCBIN_U32("graphics/battle_anims/b
const u32 gUnknown_E6BC04[] = INCBIN_U32("graphics/unknown/unknown_E6BC04.bin.lz");
-const u32 sBlenderCenterGfx[] = INCBIN_U32("graphics/berry_blender/center.8bpp.lz");
-
-const u32 gUnknown_08D91DB8[] = INCBIN_U32("graphics/berry_blender/outer.4bpp.lz");
-const u32 gUnknown_08D927EC[] = INCBIN_U32("graphics/berry_blender/outer_map.bin.lz");
+const u32 gBerryBlenderCenter_Gfx[] = INCBIN_U32("graphics/berry_blender/center.8bpp.lz");
+const u32 gBerryBlenderOuter_Gfx[] = INCBIN_U32("graphics/berry_blender/outer.4bpp.lz");
+const u32 gBerryBlenderOuter_Tilemap[] = INCBIN_U32("graphics/berry_blender/outer_map.bin.lz");
const u32 gBattleAnimBgPalette_Cosmic[] = INCBIN_U32("graphics/battle_anims/backgrounds/cosmic.gbapal.lz");
const u32 gBattleAnimBgImage_Cosmic[] = INCBIN_U32("graphics/battle_anims/backgrounds/cosmic.4bpp.lz");
@@ -1221,21 +1217,21 @@ const u32 gBattleAnimSpriteGfx_WhiteFeather[] = INCBIN_U32("graphics/battle_anim
const u32 gBattleAnimSpritePal_Sparkle6[] = INCBIN_U32("graphics/battle_anims/sprites/sparkle_6.gbapal.lz");
const u32 gBattleAnimSpriteGfx_Sparkle6[] = INCBIN_U32("graphics/battle_anims/sprites/sparkle_6.4bpp.lz");
-const u16 gUnknown_08DBA518[] = INCBIN_U16("graphics/misc/cable_car_bg.gbapal");
-const u16 gCableCar_Pal[] = INCBIN_U16("graphics/misc/cable_car.gbapal");
+const u16 gCableCarBg_Pal[] = INCBIN_U16("graphics/cable_car/bg.gbapal");
+const u16 gCableCar_Pal[] = INCBIN_U16("graphics/cable_car/cable_car.gbapal");
+const u32 gCableCarBg_Gfx[] = INCBIN_U32("graphics/cable_car/bg.4bpp.lz");
+const u32 gCableCar_Gfx[] = INCBIN_U32("graphics/cable_car/cable_car.4bpp.lz");
+const u32 gCableCarDoor_Gfx[] = INCBIN_U32("graphics/cable_car/door.4bpp.lz");
+const u32 gCableCarCable_Gfx[] = INCBIN_U32("graphics/cable_car/cable.4bpp.lz");
-const u32 gUnknown_08DBA5B8[] = INCBIN_U32("graphics/misc/cable_car_bg.4bpp.lz");
-const u32 gCableCar_Gfx[] = INCBIN_U32("graphics/misc/cable_car.4bpp.lz");
-const u32 gCableCarDoor_Gfx[] = INCBIN_U32("graphics/misc/cable_car_door.4bpp.lz");
-const u32 gCableCarCord_Gfx[] = INCBIN_U32("graphics/misc/cable_car_cord.4bpp.lz");
-
-const u32 gRouletteMenuTiles[] = INCBIN_U32("graphics/roulette/window.4bpp.lz");
-const u32 gRouletteWheelTiles[] = INCBIN_U32("graphics/roulette/wheel.8bpp.lz");
+// Roulette
+const u32 gRouletteMenu_Gfx[] = INCBIN_U32("graphics/roulette/window.4bpp.lz");
+const u32 gRouletteWheel_Gfx[] = INCBIN_U32("graphics/roulette/wheel.8bpp.lz");
const u32 gRouletteCenter_Gfx[] = INCBIN_U32("graphics/roulette/center.4bpp.lz");
-const u32 gRouletteHeadersTiles[] = INCBIN_U32("graphics/roulette/headers.4bpp.lz");
-const u32 gRouletteCreditTiles[] = INCBIN_U32("graphics/roulette/credit.4bpp.lz");
-const u32 gRouletteNumbersTiles[] = INCBIN_U32("graphics/roulette/numbers.4bpp.lz");
-const u32 gRouletteMultiplierTiles[] = INCBIN_U32("graphics/roulette/multiplier.4bpp.lz");
+const u32 gRouletteHeaders_Gfx[] = INCBIN_U32("graphics/roulette/headers.4bpp.lz");
+const u32 gRouletteCredit_Gfx[] = INCBIN_U32("graphics/roulette/credit.4bpp.lz");
+const u32 gRouletteNumbers_Gfx[] = INCBIN_U32("graphics/roulette/numbers.4bpp.lz");
+const u32 gRouletteMultiplier_Gfx[] = INCBIN_U32("graphics/roulette/multiplier.4bpp.lz");
#include "data/graphics/mail.h"
@@ -1298,26 +1294,25 @@ const u8 gFireRedMenuElements_Gfx[] = INCBIN_U8("graphics/interface_fr/menu.4bpp
const u8 gBagMenuHMIcon_Gfx[] = INCBIN_U8("graphics/interface/hm.4bpp");
-// contest link stuff, appears to be a set of tilemaps
+// contest results screen
-const u16 gUnknown_08DC63F8[] = INCBIN_U16("graphics/contest/clink_tilemap1.bin");
-const u16 gUnknown_08DC6420[] = INCBIN_U16("graphics/contest/clink_tilemap2.bin");
-const u16 gUnknown_08DC6448[] = INCBIN_U16("graphics/contest/clink_tilemap3.bin");
-const u16 gUnknown_08DC6470[] = INCBIN_U16("graphics/contest/clink_tilemap4.bin");
-const u16 gUnknown_08DC6498[] = INCBIN_U16("graphics/contest/clink_tilemap5.bin");
-const u16 gUnknown_08DC64AC[] = INCBIN_U16("graphics/contest/clink_tilemap6.bin");
-const u16 gUnknown_08DC64C0[] = INCBIN_U16("graphics/contest/clink_tilemap7.bin");
-const u16 gUnknown_08DC64D4[] = INCBIN_U16("graphics/contest/clink_tilemap8.bin");
-const u16 gUnknown_08DC64E8[] = INCBIN_U16("graphics/contest/clink_tilemap9.bin");
-const u16 gUnknown_08DC64FC[] = INCBIN_U16("graphics/contest/clink_tilemap10.bin");
-const u16 gUnknown_08DC6510[] = INCBIN_U16("graphics/contest/clink_tilemap11.bin");
+const u16 gNormalContestResults_Tilemap[] = INCBIN_U16("graphics/contest/results_screen_normal.bin");
+const u16 gSuperContestResults_Tilemap[] = INCBIN_U16("graphics/contest/results_screen_super.bin");
+const u16 gHyperContestResults_Tilemap[] = INCBIN_U16("graphics/contest/results_screen_hyper.bin");
+const u16 gMasterContestResults_Tilemap[] = INCBIN_U16("graphics/contest/results_screen_master.bin");
+const u16 gLinkContestResults_Tilemap[] = INCBIN_U16("graphics/contest/results_screen_link.bin");
+const u16 gCoolContestResults_Tilemap[] = INCBIN_U16("graphics/contest/results_screen_cool.bin");
+const u16 gBeautyContestResults_Tilemap[] = INCBIN_U16("graphics/contest/results_screen_beauty.bin");
+const u16 gCuteContestResults_Tilemap[] = INCBIN_U16("graphics/contest/results_screen_cute.bin");
+const u16 gSmartContestResults_Tilemap[] = INCBIN_U16("graphics/contest/results_screen_smart.bin");
+const u16 gToughContestResults_Tilemap[] = INCBIN_U16("graphics/contest/results_screen_tough.bin");
+const u16 gContestResults_Tilemap[] = INCBIN_U16("graphics/contest/results_screen.bin");
// pokenav
-const u16 gPokenavCondition_Pal[] = INCBIN_U16("graphics/pokenav/condition.gbapal");
-
-const u32 gPokenavCondition_Gfx[] = INCBIN_U32("graphics/pokenav/condition.4bpp.lz");
-const u32 gPokenavCondition_Tilemap[] = INCBIN_U32("graphics/pokenav/condition.bin.lz");
+const u16 gPokenavCondition_Pal[] = INCBIN_U16("graphics/pokenav/condition/graph.gbapal");
+const u32 gPokenavCondition_Gfx[] = INCBIN_U32("graphics/pokenav/condition/graph.4bpp.lz");
+const u32 gPokenavCondition_Tilemap[] = INCBIN_U32("graphics/pokenav/condition/graph.bin.lz");
const u16 gPokenavOptions_Tilemap[] = INCBIN_U16("graphics/pokenav/options/options.bin");
const u32 gPokenavOptions_Gfx[] = INCBIN_U32("graphics/pokenav/options/options.4bpp.lz");
@@ -1348,33 +1343,23 @@ const u32 gPokenavMessageBox_Tilemap[] = INCBIN_U32("graphics/pokenav/message.bi
const u16 gRegionMapCityZoomTiles_Pal[] = INCBIN_U16("graphics/pokenav/zoom_tiles.gbapal");
const u32 gRegionMapCityZoomText_Gfx[] = INCBIN_U32("graphics/pokenav/city_zoom_text.4bpp.lz");
-const u16 gPokenavConditionCancel_Pal[] = INCBIN_U16("graphics/pokenav/cancel.gbapal");
-const u8 gPokenavConditionCancel_Gfx[] = INCBIN_U8("graphics/pokenav/cancel.4bpp");
+const u16 gPokenavConditionCancel_Pal[] = INCBIN_U16("graphics/pokenav/condition/cancel.gbapal");
+const u8 gPokenavConditionCancel_Gfx[] = INCBIN_U8("graphics/pokenav/condition/cancel.4bpp");
-const u16 gPokenavConditionMarker_Pal[] = INCBIN_U16("graphics/pokenav/marker.gbapal");
-const u8 gPokenavConditionMarker_Gfx[] = INCBIN_U8("graphics/pokenav/marker.4bpp");
+const u16 gPokenavConditionMarker_Pal[] = INCBIN_U16("graphics/pokenav/condition/marker.gbapal");
+const u8 gPokenavConditionMarker_Gfx[] = INCBIN_U8("graphics/pokenav/condition/marker.4bpp");
const u16 gBerryBlenderMiscPalette[] = INCBIN_U16("graphics/berry_blender/misc.gbapal");
-
const u16 gBerryBlenderArrowPalette[] = INCBIN_U16("graphics/berry_blender/arrow.gbapal");
-
const u8 gBerryBlenderBetaArrow_Gfx[] = INCBIN_U8("graphics/berry_blender/arrow_old.4bpp"); //unused
-
-const u8 gBerryBlenderMarubatsuTiles[] = INCBIN_U8("graphics/berry_blender/marubatsu.4bpp");
-
-const u8 gBerryBlenderParticlesTiles[] = INCBIN_U8("graphics/berry_blender/particles.4bpp");
-
-asm(".space 0x120");
-
-const u8 gBerryBlenderCountdownNumbersTiles[] = INCBIN_U8("graphics/berry_blender/countdown_numbers.4bpp");
-
-const u8 gBerryBlenderStartTiles[] = INCBIN_U8("graphics/berry_blender/start.4bpp");
-
-asm(".space 0x200");
-
-const u8 gBerryBlenderArrowTiles[] = INCBIN_U8("graphics/berry_blender/arrow.4bpp");
-
-asm(".space 0x2C0");
+const u8 gBerryBlenderScoreSymbols_Gfx[] = INCBIN_U8("graphics/berry_blender/score_symbols.4bpp");
+const u8 gBerryBlenderParticles_Gfx[] = INCBIN_U8("graphics/berry_blender/particles.4bpp");
+static const u8 sEmpty0[0x120] = {0};
+const u8 gBerryBlenderCountdownNumbers_Gfx[] = INCBIN_U8("graphics/berry_blender/countdown_numbers.4bpp");
+const u8 gBerryBlenderStart_Gfx[] = INCBIN_U8("graphics/berry_blender/start.4bpp");
+static const u8 sEmpty1[0x200] = {0};
+const u8 gBerryBlenderPlayerArrow_Gfx[] = INCBIN_U8("graphics/berry_blender/arrow.4bpp");
+static const u8 sEmpty2[0x2C0] = {0};
const u16 gEasyChatCursor_Pal[] = INCBIN_U16("graphics/easy_chat/cursor.gbapal");
const u32 gEasyChatCursor_Gfx[] = INCBIN_U32("graphics/easy_chat/cursor.4bpp.lz");
@@ -1388,11 +1373,11 @@ const u16 gEasyChatMode_Pal[] = INCBIN_U16("graphics/easy_chat/mode.gbapal");
const u32 gEasyChatWindow_Gfx[] = INCBIN_U32("graphics/easy_chat/window.4bpp.lz"); // uses mode pal
const u32 gEasyChatWindow_Tilemap[] = INCBIN_U32("graphics/easy_chat/window.bin.lz");
-const u16 gWallclockMale_Pal[] = INCBIN_U16("graphics/interface/wallclock_male.gbapal");
-const u16 gWallclockFemale_Pal[] = INCBIN_U16("graphics/interface/wallclock_female.gbapal");
-const u32 gWallclock_Gfx[] = INCBIN_U32("graphics/interface/wallclock.4bpp.lz");
-const u32 gUnknown_08DCC648[] = INCBIN_U32("graphics/interface/wallclock1.bin.lz");
-const u32 gUnknown_08DCC908[] = INCBIN_U32("graphics/interface/wallclock2.bin.lz");
+const u16 gWallClockMale_Pal[] = INCBIN_U16("graphics/wallclock/male.gbapal");
+const u16 gWallClockFemale_Pal[] = INCBIN_U16("graphics/wallclock/female.gbapal");
+const u32 gWallClock_Gfx[] = INCBIN_U32("graphics/wallclock/clock.4bpp.lz");
+const u32 gWallClockStart_Tilemap[] = INCBIN_U32("graphics/wallclock/clock_start.bin.lz");
+const u32 gWallClockView_Tilemap[] = INCBIN_U32("graphics/wallclock/clock_view.bin.lz");
const u16 gUsePokeblockCondition_Pal[] = INCBIN_U16("graphics/pokeblock/use_screen/condition.gbapal");
const u32 gUsePokeblockCondition_Gfx[] = INCBIN_U32("graphics/pokeblock/use_screen/condition.4bpp.lz");
@@ -1437,29 +1422,23 @@ const u32 gNamingScreenMenu_Gfx[] = INCBIN_U32("graphics/naming_screen/menu.4bpp
const u8 gNamingScreenRWindow_Gfx[] = INCBIN_U8("graphics/naming_screen/rwindow.4bpp");
const u8 gNamingScreenROptions_Gfx[] = INCBIN_U8("graphics/naming_screen/roptions.4bpp");
const u8 gNamingScreenCursor_Gfx[] = INCBIN_U8("graphics/naming_screen/cursor.4bpp");
-const u8 gNamingScreenKeyboardButton_Gfx[] = INCBIN_U8("graphics/naming_screen/keyboard_button.4bpp");
-
-const u8 gNamingScreenRightPointingTriangleTiles[] = INCBIN_U8("graphics/naming_screen/right_pointing_triangle.4bpp");
-const u8 gNamingScreenUnderscoreTiles[] = INCBIN_U8("graphics/naming_screen/underscore.4bpp");
-
-const u32 gUnknown_08DD4544[] = INCBIN_U32("graphics/unknown/unknown_DD4544.bin.lz");
-const u32 gUnknown_08DD4620[] = INCBIN_U32("graphics/unknown/unknown_DD4620.bin.lz");
-const u32 gUnknown_08DD46E0[] = INCBIN_U32("graphics/unknown/unknown_DD46E0.bin.lz");
-const u32 gUnknown_08DD47A0[] = INCBIN_U32("graphics/unknown/unknown_DD47A0.bin.lz");
-
-// link
-
-const u16 gLinkMiscMenu_Pal[] = INCBIN_U16("graphics/link/misc.gbapal");
-const u32 gLinkMiscMenu_Gfx[] = INCBIN_U32("graphics/link/misc.4bpp.lz");
-const u32 gLinkMiscMenu_Tilemap[] = INCBIN_U32("graphics/link/misc.bin.lz");
-
-const u16 gUnknown_08DD4BB0[] = INCBIN_U16("graphics/link/link1.gbapal");
-const u16 gUnknown_08DD4BD0[] = INCBIN_U16("graphics/link/link2.gbapal");
-
-const u32 gUnknown_08DD4BF0[] = INCBIN_U32("graphics/link/link_winedge.4bpp.lz");
-const u32 gUnknown_08DD4C4C[] = INCBIN_U32("graphics/link/link_winedge.bin.lz");
-
-const u32 gUnknown_08DD4CF8[] = INCBIN_U32("graphics/interface/unk_change_case.4bpp.lz");
+const u8 gNamingScreenPageButton_Gfx[] = INCBIN_U8("graphics/naming_screen/page_button.4bpp");
+const u8 gNamingScreenInputArrow_Gfx[] = INCBIN_U8("graphics/naming_screen/input_arrow.4bpp");
+const u8 gNamingScreenUnderscore_Gfx[] = INCBIN_U8("graphics/naming_screen/underscore.4bpp");
+const u32 gNamingScreenBackground_Tilemap[] = INCBIN_U32("graphics/naming_screen/background.bin.lz");
+const u32 gNamingScreenKeyboardUpper_Tilemap[] = INCBIN_U32("graphics/naming_screen/keyboard_upper.bin.lz");
+const u32 gNamingScreenKeyboardLower_Tilemap[] = INCBIN_U32("graphics/naming_screen/keyboard_lower.bin.lz");
+const u32 gNamingScreenKeyboardSymbols_Tilemap[] = INCBIN_U32("graphics/naming_screen/keyboard_symbols.bin.lz");
+
+// union room chat
+const u16 gUnionRoomChat_Background_Pal[] = INCBIN_U16("graphics/union_room_chat/background.gbapal");
+const u32 gUnionRoomChat_Background_Gfx[] = INCBIN_U32("graphics/union_room_chat/background.4bpp.lz");
+const u32 gUnionRoomChat_Background_Tilemap[] = INCBIN_U32("graphics/union_room_chat/background.bin.lz");
+const u16 gUnionRoomChat_Window_Pal1[] = INCBIN_U16("graphics/union_room_chat/window_1.gbapal");
+const u16 gUnionRoomChat_Window_Pal2[] = INCBIN_U16("graphics/union_room_chat/window_2.gbapal");
+const u32 gUnionRoomChat_Border_Gfx[] = INCBIN_U32("graphics/union_room_chat/border.4bpp.lz");
+const u32 gUnionRoomChat_Border_Tilemap[] = INCBIN_U32("graphics/union_room_chat/border.bin.lz");
+const u32 gUnionRoomChat_RButtonLabels[] = INCBIN_U32("graphics/union_room_chat/r_button_labels.4bpp.lz");
const u16 gTilesetPalettes_General[][16] =
{
@@ -1489,8 +1468,7 @@ const u16 gTradeGba_Pal[] = INCBIN_U16("graphics/link/gba.gbapal");
const u16 gTradeGba2_Pal[] = INCBIN_U16("graphics/link/gba_pal2.gbapal");
const u8 gTradeGba_Gfx[] = INCBIN_U8("graphics/link/gba.4bpp");
-// 8DD8760
-asm(".space 0x20"); //blank palette??
+static const u16 sEmptyPal[16] = {0};
#include "data/graphics/berry_fix.h"
@@ -1541,8 +1519,8 @@ const u16 gMonIconPalettes[][16] =
INCBIN_U16("graphics/pokemon/icon_palettes/icon_palette_2.gbapal"),
};
-const u16 gTitleScreenBgPalettes[] = INCBIN_U16("graphics/title_screen/pokemon_logo.gbapal");
-const u16 gTitleScreenBgPalettes2[] = INCBIN_U16("graphics/title_screen/rayquaza_and_clouds.gbapal");
+const u16 gTitleScreenBgPalettes[] = INCBIN_U16("graphics/title_screen/pokemon_logo.gbapal",
+ "graphics/title_screen/rayquaza_and_clouds.gbapal");
const u16 gTitleScreenEmeraldVersionPal[] = INCBIN_U16("graphics/title_screen/emerald_version.gbapal");
@@ -1572,10 +1550,10 @@ const u32 gUnknown_08DE34B8[] = INCBIN_U32("graphics/berry_crusher/tiles.4bpp.lz
const u32 gUnknown_08DE3FD4[] = INCBIN_U32("graphics/berry_crusher/tiles.bin.lz");
// random garbage at the end.
-asm(".space 0x54BAC \n\
- .byte 0x0D, 0x00, 0x58, 0x02 \n\
- .space 0x1145 \n\
- .byte 0x02 \n\
- .space 0x3242 \n\
- .byte 0x40 \n\
- .space 0x13");
+static const u8 sEmpty3[0x54BAC] = {0};
+static const u8 sUnused1[] = {0x0D, 0x00, 0x58, 0x02};
+static const u8 sEmpty4[0x1145] = {0};
+static const u8 sUnused2[] = {0x02};
+static const u8 sEmpty5[0x3242] = {0};
+static const u8 sUnused3[] = {0x40};
+static const u8 sEmpty6[0x13] = {0};
diff --git a/src/gym_leader_rematch.c b/src/gym_leader_rematch.c
index 355ae5534..efe874894 100644
--- a/src/gym_leader_rematch.c
+++ b/src/gym_leader_rematch.c
@@ -1,5 +1,4 @@
#include "global.h"
-#include "constants/flags.h"
#include "random.h"
#include "event_data.h"
#include "battle_setup.h"
diff --git a/src/hall_of_fame.c b/src/hall_of_fame.c
index 05e4ed0aa..2b548dea2 100644
--- a/src/hall_of_fame.c
+++ b/src/hall_of_fame.c
@@ -33,9 +33,12 @@
#include "fldeff_misc.h"
#include "trainer_pokemon_sprites.h"
#include "data.h"
-#include "rom_81520A8.h"
+#include "confetti_util.h"
#include "constants/rgb.h"
+#define HALL_OF_FAME_MAX_TEAMS 50
+#define TAG_CONFETTI 1001
+
struct HallofFameMon
{
u32 tid;
@@ -58,33 +61,31 @@ struct HofGfx
u8 tilemap2[0x1000];
};
-static EWRAM_DATA u32 sUnknown_0203BCD4 = 0;
+static EWRAM_DATA u32 sHofFadePalettes = 0;
static EWRAM_DATA struct HallofFameTeam *sHofMonPtr = NULL;
static EWRAM_DATA struct HofGfx *sHofGfxPtr = NULL;
extern struct MusicPlayerInfo gMPlayInfo_BGM;
-#define HALL_OF_FAME_MAX_TEAMS 50
-
// this file's functions
static void ClearVramOamPltt_LoadHofPal(void);
-static void sub_8174F70(void);
-static void sub_8174FAC(void);
-static bool8 sub_81751FC(void);
+static void LoadHofGfx(void);
+static void InitHofBgs(void);
+static bool8 CreateHofConfettiSprite(void);
static void SetCallback2AfterHallOfFameDisplay(void);
static bool8 sub_8175024(void);
static void Task_Hof_InitMonData(u8 taskId);
static void Task_Hof_InitTeamSaveData(u8 taskId);
static void Task_Hof_SetMonDisplayTask(u8 taskId);
static void Task_Hof_TrySaveData(u8 taskId);
-static void Task_Hof_WaitForFrames(u8 taskId);
+static void Task_Hof_WaitToDisplayMon(u8 taskId);
static void Task_Hof_DisplayMon(u8 taskId);
static void Task_Hof_PrintMonInfoAfterAnimating(u8 taskId);
static void Task_Hof_TryDisplayAnotherMon(u8 taskId);
static void Task_Hof_PaletteFadeAndPrintWelcomeText(u8 taskId);
-static void sub_8173DC0(u8 taskId);
-static void sub_8173EA4(u8 taskId);
-static void sub_8173EE4(u8 taskId);
+static void Task_Hof_DoConfetti(u8 taskId);
+static void Task_Hof_WaitToDisplayPlayer(u8 taskId);
+static void Task_Hof_DisplayPlayer(u8 taskId);
static void Task_Hof_WaitAndPrintPlayerInfo(u8 taskId);
static void Task_Hof_ExitOnKeyPressed(u8 taskId);
static void Task_Hof_HandlePaletteOnExit(u8 taskId);
@@ -101,8 +102,8 @@ static void SpriteCB_GetOnScreenAndAnimate(struct Sprite *sprite);
static void HallOfFame_PrintMonInfo(struct HallofFameMon* currMon, u8 unused1, u8 unused2);
static void HallOfFame_PrintWelcomeText(u8 unusedPossiblyWindowId, u8 unused2);
static void HallOfFame_PrintPlayerInfo(u8 unused1, u8 unused2);
-static void Task_DoConfettiEffect(u8 taskId);
-static void sub_81751A4(struct Sprite* sprite);
+static void Task_DoDomeConfetti(u8 taskId);
+static void SpriteCB_HofConfetti(struct Sprite* sprite);
// const rom data
static const struct BgTemplate sHof_BgTemplates[] =
@@ -143,15 +144,15 @@ static const u8 sPlayerInfoTextColors[4] = {TEXT_COLOR_TRANSPARENT, TEXT_COLOR_D
static const u8 sUnused_085E538C[] = {4, 5, 0, 0};
-static const struct CompressedSpriteSheet sHallOfFame_ConfettiSpriteSheet[] =
+static const struct CompressedSpriteSheet sSpriteSheet_Confetti[] =
{
- {gContestConfetti_Gfx, 0x220, 1001},
+ {.data = gConfetti_Gfx, .size = 0x220, .tag = TAG_CONFETTI},
{},
};
-static const struct CompressedSpritePalette sHallOfFame_ConfettiSpritePalette[] =
+static const struct CompressedSpritePalette sSpritePalette_Confetti[] =
{
- {gContestConfetti_Pal, 1001},
+ {.data = gConfetti_Pal, .tag = TAG_CONFETTI},
{},
};
@@ -172,7 +173,7 @@ static const s16 sHallOfFame_MonHalfTeamPositions[PARTY_SIZE / 2][4] =
{-86, 244, 184, 64}
};
-static const struct OamData sOamData_85E53FC =
+static const struct OamData sOamData_Confetti =
{
.y = 0,
.affineMode = ST_OAM_AFFINE_OFF,
@@ -189,126 +190,138 @@ static const struct OamData sOamData_85E53FC =
.affineParam = 0,
};
-static const union AnimCmd sSpriteAnim_85E5404[] =
+static const union AnimCmd sAnim_PinkConfettiA[] =
{
ANIMCMD_FRAME(0, 30),
ANIMCMD_END
};
-static const union AnimCmd sSpriteAnim_85E540C[] =
+static const union AnimCmd sAnim_RedConfettiA[] =
{
ANIMCMD_FRAME(1, 30),
ANIMCMD_END
};
-static const union AnimCmd sSpriteAnim_85E5414[] =
+static const union AnimCmd sAnim_BlueConfettiA[] =
{
ANIMCMD_FRAME(2, 30),
ANIMCMD_END
};
-static const union AnimCmd sSpriteAnim_85E541C[] =
+static const union AnimCmd sAnim_RedConfettiB[] =
{
ANIMCMD_FRAME(3, 30),
ANIMCMD_END
};
-static const union AnimCmd sSpriteAnim_85E5424[] =
+static const union AnimCmd sAnim_BlueConfettiB[] =
{
ANIMCMD_FRAME(4, 30),
ANIMCMD_END
};
-static const union AnimCmd sSpriteAnim_85E542C[] =
+static const union AnimCmd sAnim_YellowConfettiA[] =
{
ANIMCMD_FRAME(5, 30),
ANIMCMD_END
};
-static const union AnimCmd sSpriteAnim_85E5434[] =
+static const union AnimCmd sAnim_WhiteConfettiA[] =
{
ANIMCMD_FRAME(6, 30),
ANIMCMD_END
};
-static const union AnimCmd sSpriteAnim_85E543C[] =
+static const union AnimCmd sAnim_GreenConfettiA[] =
{
ANIMCMD_FRAME(7, 30),
ANIMCMD_END
};
-static const union AnimCmd sSpriteAnim_85E5444[] =
+static const union AnimCmd sAnim_PinkConfettiB[] =
{
ANIMCMD_FRAME(8, 30),
ANIMCMD_END
};
-static const union AnimCmd sSpriteAnim_85E544C[] =
+static const union AnimCmd sAnim_BlueConfettiC[] =
{
ANIMCMD_FRAME(9, 30),
ANIMCMD_END
};
-static const union AnimCmd sSpriteAnim_85E5454[] =
+static const union AnimCmd sAnim_YellowConfettiB[] =
{
ANIMCMD_FRAME(10, 30),
ANIMCMD_END
};
-static const union AnimCmd sSpriteAnim_85E545C[] =
+static const union AnimCmd sAnim_WhiteConfettiB[] =
{
ANIMCMD_FRAME(11, 30),
ANIMCMD_END
};
-static const union AnimCmd sSpriteAnim_85E5464[] =
+static const union AnimCmd sAnim_GreenConfettiB[] =
{
ANIMCMD_FRAME(12, 30),
ANIMCMD_END
};
-static const union AnimCmd sSpriteAnim_85E546C[] =
+static const union AnimCmd sAnim_PinkConfettiC[] =
{
ANIMCMD_FRAME(13, 30),
ANIMCMD_END
};
-static const union AnimCmd sSpriteAnim_85E5474[] =
+static const union AnimCmd sAnim_RedConfettiC[] =
{
ANIMCMD_FRAME(14, 30),
ANIMCMD_END
};
-static const union AnimCmd sSpriteAnim_85E547C[] =
+static const union AnimCmd sAnim_YellowConfettiC[] =
{
ANIMCMD_FRAME(15, 30),
ANIMCMD_END
};
-static const union AnimCmd sSpriteAnim_85E5484[] =
+static const union AnimCmd sAnim_WhiteConfettiC[] =
{
ANIMCMD_FRAME(16, 30),
ANIMCMD_END
};
-static const union AnimCmd * const sSpriteAnimTable_85E548C[] =
-{
- sSpriteAnim_85E5404, sSpriteAnim_85E540C, sSpriteAnim_85E5414, sSpriteAnim_85E541C,
- sSpriteAnim_85E5424, sSpriteAnim_85E542C, sSpriteAnim_85E5434, sSpriteAnim_85E543C,
- sSpriteAnim_85E5444, sSpriteAnim_85E544C, sSpriteAnim_85E5454, sSpriteAnim_85E545C,
- sSpriteAnim_85E5464, sSpriteAnim_85E546C, sSpriteAnim_85E5474, sSpriteAnim_85E547C,
- sSpriteAnim_85E5484
+static const union AnimCmd * const sAnims_Confetti[] =
+{
+ sAnim_PinkConfettiA,
+ sAnim_RedConfettiA,
+ sAnim_BlueConfettiA,
+ sAnim_RedConfettiB,
+ sAnim_BlueConfettiB,
+ sAnim_YellowConfettiA,
+ sAnim_WhiteConfettiA,
+ sAnim_GreenConfettiA,
+ sAnim_PinkConfettiB,
+ sAnim_BlueConfettiC,
+ sAnim_YellowConfettiB,
+ sAnim_WhiteConfettiB,
+ sAnim_GreenConfettiB,
+ sAnim_PinkConfettiC,
+ sAnim_RedConfettiC,
+ sAnim_YellowConfettiC,
+ sAnim_WhiteConfettiC
};
-static const struct SpriteTemplate sSpriteTemplate_85E54D0 =
+static const struct SpriteTemplate sSpriteTemplate_HofConfetti =
{
- .tileTag = 1001,
- .paletteTag = 1001,
- .oam = &sOamData_85E53FC,
- .anims = sSpriteAnimTable_85E548C,
+ .tileTag = TAG_CONFETTI,
+ .paletteTag = TAG_CONFETTI,
+ .oam = &sOamData_Confetti,
+ .anims = sAnims_Confetti,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_81751A4
+ .callback = SpriteCB_HofConfetti
};
static const u16 sHallOfFame_Pal[] = INCBIN_U16("graphics/misc/japanese_hof.gbapal");
@@ -317,10 +330,19 @@ static const u32 sHallOfFame_Gfx[] = INCBIN_U32("graphics/misc/japanese_hof.4bpp
static const struct HallofFameMon sDummyFameMon =
{
- 0x3EA03EA, 0, 0, 0, {0}
+ .tid = 0x3EA03EA,
+ .personality = 0,
+ .species = SPECIES_NONE,
+ .lvl = 0,
+ .nick = {0}
};
-static const u8 sUnused2[] = {2, 1, 3, 6, 4, 5, 0, 0};
+// Unused, order of party slots on Hall of Fame screen
+static const u8 sHallOfFame_SlotOrder[] = {
+ 2, 1, 3,
+ 6, 4, 5,
+ 0, 0
+};
// code
static void VBlankCB_HallOfFame(void)
@@ -350,14 +372,14 @@ static bool8 InitHallOfFameScreen(void)
gMain.state = 1;
break;
case 1:
- sub_8174F70();
+ LoadHofGfx();
gMain.state++;
break;
case 2:
SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT1_BG1 | BLDCNT_EFFECT_BLEND | BLDCNT_TGT2_ALL);
SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(16, 7));
SetGpuReg(REG_OFFSET_BLDY, 0);
- sub_8174FAC();
+ InitHofBgs();
sHofGfxPtr->state = 0;
gMain.state++;
break;
@@ -374,7 +396,7 @@ static bool8 InitHallOfFameScreen(void)
if (!gPaletteFade.active)
{
SetMainCallback2(CB2_HallOfFame);
- PlayBGM(MUS_DENDOU);
+ PlayBGM(MUS_HALL_OF_FAME);
return FALSE;
}
break;
@@ -433,7 +455,7 @@ static void Task_Hof_InitMonData(u8 taskId)
}
else
{
- sHofMonPtr->mon[i].species = 0;
+ sHofMonPtr->mon[i].species = SPECIES_NONE;
sHofMonPtr->mon[i].tid = 0;
sHofMonPtr->mon[i].personality = 0;
sHofMonPtr->mon[i].lvl = 0;
@@ -441,7 +463,7 @@ static void Task_Hof_InitMonData(u8 taskId)
}
}
- sUnknown_0203BCD4 = 0;
+ sHofFadePalettes = 0;
gTasks[taskId].tDisplayedMonId = 0;
gTasks[taskId].tPlayerSpriteID = 0xFF;
@@ -514,12 +536,12 @@ static void Task_Hof_TrySaveData(u8 taskId)
else
{
PlaySE(SE_SAVE);
- gTasks[taskId].func = Task_Hof_WaitForFrames;
+ gTasks[taskId].func = Task_Hof_WaitToDisplayMon;
gTasks[taskId].tFrameCount = 32;
}
}
-static void Task_Hof_WaitForFrames(u8 taskId)
+static void Task_Hof_WaitToDisplayMon(u8 taskId)
{
if (gTasks[taskId].tFrameCount)
gTasks[taskId].tFrameCount--;
@@ -539,32 +561,32 @@ static void Task_Hof_SetMonDisplayTask(u8 taskId)
static void Task_Hof_DisplayMon(u8 taskId)
{
u8 spriteId;
- s16 xPos, yPos, field4, field6;
+ s16 startX, startY, destX, destY;
u16 currMonId = gTasks[taskId].tDisplayedMonId;
struct HallofFameMon* currMon = &sHofMonPtr->mon[currMonId];
if (gTasks[taskId].tMonNumber > PARTY_SIZE / 2)
{
- xPos = sHallOfFame_MonFullTeamPositions[currMonId][0];
- yPos = sHallOfFame_MonFullTeamPositions[currMonId][1];
- field4 = sHallOfFame_MonFullTeamPositions[currMonId][2];
- field6 = sHallOfFame_MonFullTeamPositions[currMonId][3];
+ startX = sHallOfFame_MonFullTeamPositions[currMonId][0];
+ startY = sHallOfFame_MonFullTeamPositions[currMonId][1];
+ destX = sHallOfFame_MonFullTeamPositions[currMonId][2];
+ destY = sHallOfFame_MonFullTeamPositions[currMonId][3];
}
else
{
- xPos = sHallOfFame_MonHalfTeamPositions[currMonId][0];
- yPos = sHallOfFame_MonHalfTeamPositions[currMonId][1];
- field4 = sHallOfFame_MonHalfTeamPositions[currMonId][2];
- field6 = sHallOfFame_MonHalfTeamPositions[currMonId][3];
+ startX = sHallOfFame_MonHalfTeamPositions[currMonId][0];
+ startY = sHallOfFame_MonHalfTeamPositions[currMonId][1];
+ destX = sHallOfFame_MonHalfTeamPositions[currMonId][2];
+ destY = sHallOfFame_MonHalfTeamPositions[currMonId][3];
}
if (currMon->species == SPECIES_EGG)
- field6 += 10;
+ destY += 10;
- spriteId = CreatePicSprite2(currMon->species, currMon->tid, currMon->personality, 1, xPos, yPos, currMonId, 0xFFFF);
- gSprites[spriteId].tDestinationX = field4;
- gSprites[spriteId].tDestinationY = field6;
+ spriteId = CreatePicSprite2(currMon->species, currMon->tid, currMon->personality, 1, startX, startY, currMonId, 0xFFFF);
+ gSprites[spriteId].tDestinationX = destX;
+ gSprites[spriteId].tDestinationY = destY;
gSprites[spriteId].data[0] = 0;
gSprites[spriteId].tSpecies = currMon->species;
gSprites[spriteId].callback = SpriteCB_GetOnScreenAndAnimate;
@@ -599,11 +621,11 @@ static void Task_Hof_TryDisplayAnotherMon(u8 taskId)
}
else
{
- sUnknown_0203BCD4 |= (0x10000 << gSprites[gTasks[taskId].tMonSpriteId(currPokeID)].oam.paletteNum);
- if (gTasks[taskId].tDisplayedMonId <= 4 && currMon[1].species != SPECIES_NONE) // there is another pokemon to display
+ sHofFadePalettes |= (0x10000 << gSprites[gTasks[taskId].tMonSpriteId(currPokeID)].oam.paletteNum);
+ if (gTasks[taskId].tDisplayedMonId < PARTY_SIZE - 1 && currMon[1].species != SPECIES_NONE) // there is another pokemon to display
{
gTasks[taskId].tDisplayedMonId++;
- BeginNormalPaletteFade(sUnknown_0203BCD4, 0, 12, 12, RGB(16, 29, 24));
+ BeginNormalPaletteFade(sHofFadePalettes, 0, 12, 12, RGB(16, 29, 24));
gSprites[gTasks[taskId].tMonSpriteId(currPokeID)].oam.priority = 1;
gTasks[taskId].func = Task_Hof_DisplayMon;
}
@@ -626,18 +648,21 @@ static void Task_Hof_PaletteFadeAndPrintWelcomeText(u8 taskId)
}
HallOfFame_PrintWelcomeText(0, 15);
- PlaySE(SE_DENDOU);
+ PlaySE(SE_APPLAUSE);
gTasks[taskId].tFrameCount = 400;
- gTasks[taskId].func = sub_8173DC0;
+ gTasks[taskId].func = Task_Hof_DoConfetti;
}
-static void sub_8173DC0(u8 taskId)
+static void Task_Hof_DoConfetti(u8 taskId)
{
if (gTasks[taskId].tFrameCount != 0)
{
gTasks[taskId].tFrameCount--;
+
+ // Create new confetti every 4th frame for the first 290 frames
+ // For the last 110 frames wait for the existing confetti to fall offscreen
if ((gTasks[taskId].tFrameCount & 3) == 0 && gTasks[taskId].tFrameCount > 110)
- sub_81751FC();
+ CreateHofConfettiSprite();
}
else
{
@@ -647,19 +672,19 @@ static void sub_8173DC0(u8 taskId)
if (gTasks[taskId].tMonSpriteId(i) != 0xFF)
gSprites[gTasks[taskId].tMonSpriteId(i)].oam.priority = 1;
}
- BeginNormalPaletteFade(sUnknown_0203BCD4, 0, 12, 12, RGB(16, 29, 24));
+ BeginNormalPaletteFade(sHofFadePalettes, 0, 12, 12, RGB(16, 29, 24));
FillWindowPixelBuffer(0, PIXEL_FILL(0));
CopyWindowToVram(0, 3);
gTasks[taskId].tFrameCount = 7;
- gTasks[taskId].func = sub_8173EA4;
+ gTasks[taskId].func = Task_Hof_WaitToDisplayPlayer;
}
}
-static void sub_8173EA4(u8 taskId)
+static void Task_Hof_WaitToDisplayPlayer(u8 taskId)
{
if (gTasks[taskId].tFrameCount >= 16)
{
- gTasks[taskId].func = sub_8173EE4;
+ gTasks[taskId].func = Task_Hof_DisplayPlayer;
}
else
{
@@ -668,7 +693,7 @@ static void sub_8173EA4(u8 taskId)
}
}
-static void sub_8173EE4(u8 taskId)
+static void Task_Hof_DisplayPlayer(u8 taskId)
{
SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_OBJ_ON | DISPCNT_OBJ_1D_MAP);
ShowBg(0);
@@ -677,7 +702,7 @@ static void sub_8173EE4(u8 taskId)
gTasks[taskId].tPlayerSpriteID = CreateTrainerPicSprite(PlayerGenderToFrontTrainerPicId_Debug(gSaveBlock2Ptr->playerGender, TRUE), 1, 120, 72, 6, 0xFFFF);
AddWindow(&sHof_WindowTemplate);
LoadWindowGfx(1, gSaveBlock2Ptr->optionsWindowFrameType, 0x21D, 0xD0);
- LoadPalette(stdpal_get(1), 0xE0, 0x20);
+ LoadPalette(GetTextWindowPalette(1), 0xE0, 0x20);
gTasks[taskId].tFrameCount = 120;
gTasks[taskId].func = Task_Hof_WaitAndPrintPlayerInfo;
}
@@ -784,14 +809,14 @@ void CB2_DoHallOfFamePC(void)
gMain.state = 1;
break;
case 1:
- sub_8174F70();
+ LoadHofGfx();
gMain.state++;
break;
case 2:
SetGpuReg(REG_OFFSET_BLDCNT, 0);
SetGpuReg(REG_OFFSET_BLDALPHA, 0);
SetGpuReg(REG_OFFSET_BLDY, 0);
- sub_8174FAC();
+ InitHofBgs();
gMain.state++;
break;
case 3:
@@ -799,7 +824,7 @@ void CB2_DoHallOfFamePC(void)
{
struct HallofFameTeam *fameTeam = (struct HallofFameTeam*)(gDecompressionBuffer);
fameTeam->mon[0] = sDummyFameMon;
- sub_80F9BCC(0, 0, 0);
+ ComputerScreenOpenEffect(0, 0, 0);
SetVBlankCallback(VBlankCB_HallOfFame);
gMain.state++;
}
@@ -809,7 +834,7 @@ void CB2_DoHallOfFamePC(void)
AnimateSprites();
BuildOamBuffer();
UpdatePaletteFade();
- if (!sub_80F9C1C())
+ if (!IsComputerScreenOpenEffectActive())
gMain.state++;
break;
case 5:
@@ -874,7 +899,7 @@ static void Task_HofPC_DrawSpritesPrintText(u8 taskId)
savedTeams++;
currMon = &savedTeams->mon[0];
- sUnknown_0203BCD4 = 0;
+ sHofFadePalettes = 0;
gTasks[taskId].tCurrMonId = 0;
gTasks[taskId].tMonNo = 0;
@@ -949,8 +974,8 @@ static void Task_HofPC_PrintMonInfo(u8 taskId)
currMonID = gTasks[taskId].tMonSpriteId(gTasks[taskId].tCurrMonId);
gSprites[currMonID].oam.priority = 0;
- sUnknown_0203BCD4 = (0x10000 << gSprites[currMonID].oam.paletteNum) ^ 0xFFFF0000;
- BlendPalettesUnfaded(sUnknown_0203BCD4, 0xC, RGB(16, 29, 24));
+ sHofFadePalettes = (0x10000 << gSprites[currMonID].oam.paletteNum) ^ 0xFFFF0000;
+ BlendPalettesUnfaded(sHofFadePalettes, 0xC, RGB(16, 29, 24));
currMon = &savedTeams->mon[gTasks[taskId].tCurrMonId];
if (currMon->species != SPECIES_EGG)
@@ -972,7 +997,7 @@ static void Task_HofPC_HandleInput(u8 taskId)
if (gTasks[taskId].tCurrTeamNo != 0) // prepare another team to view
{
gTasks[taskId].tCurrTeamNo--;
- for (i = 0; i < 6; i++)
+ for (i = 0; i < PARTY_SIZE; i++)
{
u8 spriteId = gTasks[taskId].tMonSpriteId(i);
if (spriteId != 0xFF)
@@ -1023,13 +1048,13 @@ static void Task_HofPC_HandlePaletteOnExit(u8 taskId)
CpuCopy16(gPlttBufferFaded, gPlttBufferUnfaded, 0x400);
fameTeam = (struct HallofFameTeam*)(gDecompressionBuffer);
fameTeam->mon[0] = sDummyFameMon;
- sub_80F9BF4(0, 0, 0);
+ ComputerScreenCloseEffect(0, 0, 0);
gTasks[taskId].func = Task_HofPC_HandleExit;
}
static void Task_HofPC_HandleExit(u8 taskId)
{
- if (!sub_80F9C30())
+ if (!IsComputerScreenCloseEffectActive())
{
u8 i;
@@ -1250,20 +1275,20 @@ static void ClearVramOamPltt_LoadHofPal(void)
LoadPalette(sHallOfFame_Pal, 0, 0x20);
}
-static void sub_8174F70(void)
+static void LoadHofGfx(void)
{
ScanlineEffect_Stop();
ResetTasks();
ResetSpriteData();
- reset_temp_tile_data_buffers();
+ ResetTempTileDataBuffers();
ResetAllPicSprites();
FreeAllSpritePalettes();
gReservedSpritePaletteCount = 8;
- LoadCompressedSpriteSheet(sHallOfFame_ConfettiSpriteSheet);
- LoadCompressedSpritePalette(sHallOfFame_ConfettiSpritePalette);
+ LoadCompressedSpriteSheet(sSpriteSheet_Confetti);
+ LoadCompressedSpritePalette(sSpritePalette_Confetti);
}
-static void sub_8174FAC(void)
+static void InitHofBgs(void)
{
ResetBgsAndClearDma3BusyFlags(0);
InitBgsFromTemplates(0, sHof_BgTemplates, ARRAY_COUNT(sHof_BgTemplates));
@@ -1282,10 +1307,10 @@ static bool8 sub_8175024(void)
switch (sHofGfxPtr->state)
{
case 0:
- decompress_and_copy_tile_data_to_vram(1, sHallOfFame_Gfx, 0, 0, 0);
+ DecompressAndCopyTileDataToVram(1, sHallOfFame_Gfx, 0, 0, 0);
break;
case 1:
- if (free_temp_tile_data_buffers_if_possible())
+ if (FreeTempTileDataBuffersIfPossible())
return TRUE;
break;
case 2:
@@ -1299,7 +1324,7 @@ static bool8 sub_8175024(void)
break;
case 3:
InitStandardTextBoxWindows();
- sub_8197200();
+ InitTextBoxGfxAndPrinters();
break;
case 4:
SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_OBJ_1D_MAP | DISPCNT_OBJ_ON);
@@ -1344,7 +1369,10 @@ static void SpriteCB_GetOnScreenAndAnimate(struct Sprite *sprite)
#undef tDestinationY
#undef tSpecies
-static void sub_81751A4(struct Sprite* sprite)
+#define sSineIdx data[0]
+#define sExtraY data[1]
+
+static void SpriteCB_HofConfetti(struct Sprite* sprite)
{
if (sprite->pos2.y > 120)
{
@@ -1353,20 +1381,20 @@ static void sub_81751A4(struct Sprite* sprite)
else
{
u16 rand;
- u8 tableID;
+ u8 sineIdx;
sprite->pos2.y++;
- sprite->pos2.y += sprite->data[1];
+ sprite->pos2.y += sprite->sExtraY;
- tableID = sprite->data[0];
+ sineIdx = sprite->sSineIdx;
rand = (Random() % 4) + 8;
- sprite->pos2.x = rand * gSineTable[tableID] / 256;
+ sprite->pos2.x = rand * gSineTable[sineIdx] / 256;
- sprite->data[0] += 4;
+ sprite->sSineIdx += 4;
}
}
-static bool8 sub_81751FC(void)
+static bool8 CreateHofConfettiSprite(void)
{
u8 spriteID;
struct Sprite* sprite;
@@ -1374,110 +1402,136 @@ static bool8 sub_81751FC(void)
s16 posX = Random() % 240;
s16 posY = -(Random() % 8);
- spriteID = CreateSprite(&sSpriteTemplate_85E54D0, posX, posY, 0);
+ spriteID = CreateSprite(&sSpriteTemplate_HofConfetti, posX, posY, 0);
sprite = &gSprites[spriteID];
- StartSpriteAnim(sprite, Random() % 17);
+ StartSpriteAnim(sprite, Random() % ARRAY_COUNT(sAnims_Confetti));
+ // 1/4 confetti sprites move an extra Y coord each frame
if (Random() & 3)
- sprite->data[1] = 0;
+ sprite->sExtraY = 0;
else
- sprite->data[1] = 1;
+ sprite->sExtraY = 1;
return FALSE;
}
-// Used when a Battle Dome tourney is won
-void DoConfettiEffect(void)
+// The below confetti functions are used when a Battle Dome tourney is won
+// For the Hall of Fame confetti see Task_Hof_DoConfetti
+// The end result is essentially the same, just a very different way of handling it
+#define tState data[0]
+#define tTimer data[1]
+#define tConfettiCount data[15]
+
+// Indexes into the data array of the struct ConfettiUtil
+#define CONFETTI_SINE_IDX 0
+#define CONFETTI_EXTRA_Y 1
+#define CONFETTI_TASK_ID 7
+
+void DoDomeConfetti(void)
{
u8 taskId;
gSpecialVar_0x8004 = 180;
- taskId = CreateTask(Task_DoConfettiEffect, 0);
+ taskId = CreateTask(Task_DoDomeConfetti, 0);
if (taskId != 0xFF)
{
- gTasks[taskId].data[1] = gSpecialVar_0x8004;
+ gTasks[taskId].tTimer = gSpecialVar_0x8004;
gSpecialVar_0x8005 = taskId;
}
}
-static void StopConfettiEffect(void)
+static void StopDomeConfetti(void)
{
u8 taskId;
- if ((taskId = FindTaskIdByFunc(Task_DoConfettiEffect)) != 0xFF)
+ if ((taskId = FindTaskIdByFunc(Task_DoDomeConfetti)) != 0xFF)
DestroyTask(taskId);
- sub_8152254();
- FreeSpriteTilesByTag(0x3E9);
- FreeSpritePaletteByTag(0x3E9);
+ ConfettiUtil_Free();
+ FreeSpriteTilesByTag(TAG_CONFETTI);
+ FreeSpritePaletteByTag(TAG_CONFETTI);
}
-static void sub_81752F4(struct UnkStruct_81520A8 *structPtr)
+static void UpdateDomeConfetti(struct ConfettiUtil *util)
{
- if (structPtr->yDelta > 110)
+ if (util->yDelta > 110)
{
- gTasks[structPtr->data[7]].data[15]--;
- sub_81525D0(structPtr->id);
+ // Destroy confetti after it falls far enough
+ gTasks[util->data[CONFETTI_TASK_ID]].tConfettiCount--;
+ ConfettiUtil_Remove(util->id);
}
else
{
- u8 var;
+ // Move confetti down
+ u8 sineIdx;
s32 rand;
- structPtr->yDelta++;
- structPtr->yDelta += structPtr->data[1];
+ util->yDelta++;
+ util->yDelta += util->data[CONFETTI_EXTRA_Y];
- var = structPtr->data[0];
+ sineIdx = util->data[CONFETTI_SINE_IDX];
rand = Random();
rand &= 3;
rand += 8;
- structPtr->xDelta = (rand) * ((gSineTable[var])) / 256;
+ util->xDelta = (rand) * ((gSineTable[sineIdx])) / 256;
- structPtr->data[0] += 4;
+ util->data[CONFETTI_SINE_IDX] += 4;
}
}
-static void Task_DoConfettiEffect(u8 taskId)
+static void Task_DoDomeConfetti(u8 taskId)
{
- u32 var = 0;
+ u32 id = 0;
u16 *data = gTasks[taskId].data;
- switch (data[0])
+ switch (tState)
{
case 0:
- if (!sub_81521C0(0x40))
+ if (!ConfettiUtil_Init(64))
{
+ // Init failed
DestroyTask(taskId);
- gSpecialVar_0x8004 = var;
+ gSpecialVar_0x8004 = 0;
gSpecialVar_0x8005 = 0xFFFF;
}
- LoadCompressedSpriteSheet(sHallOfFame_ConfettiSpriteSheet);
- LoadCompressedSpritePalette(sHallOfFame_ConfettiSpritePalette);
- data[0]++;
+ LoadCompressedSpriteSheet(sSpriteSheet_Confetti);
+ LoadCompressedSpritePalette(sSpritePalette_Confetti);
+ tState++;
break;
case 1:
- if (data[1] != 0 && data[1] % 3 == 0)
+ if (tTimer != 0 && tTimer % 3 == 0)
{
- var = sub_81524C4(&sOamData_85E53FC, 0x3E9, 0x3E9, Random() % 240, -(Random() % 8), Random() % 0x11, var);
- if (var != 0xFF)
+ // Create new confetti every 3 frames
+ id = ConfettiUtil_AddNew(&sOamData_Confetti,
+ TAG_CONFETTI,
+ TAG_CONFETTI,
+ Random() % 240,
+ -(Random() % 8),
+ Random() % ARRAY_COUNT(sAnims_Confetti),
+ id);
+ if (id != 0xFF)
{
- sub_8152438(var, sub_81752F4);
- if ((Random() & 3) == 0)
- sub_8152474(var, 1, 1);
- sub_8152474(var, 7, taskId);
- data[15]++;
+ ConfettiUtil_SetCallback(id, UpdateDomeConfetti);
+
+ // 1/4 of the confetti move an extra y coord every frame
+ if ((Random() % 4) == 0)
+ ConfettiUtil_SetData(id, CONFETTI_EXTRA_Y, 1);
+
+ ConfettiUtil_SetData(id, CONFETTI_TASK_ID, taskId);
+ tConfettiCount++;
}
}
- sub_81522D4();
- if (data[1] != 0)
- data[1]--;
- else if (data[15] == 0)
- data[0] = 0xFF;
+
+ ConfettiUtil_Update();
+ if (tTimer != 0)
+ tTimer--;
+ else if (tConfettiCount == 0)
+ tState = 0xFF;
break;
case 0xFF:
- StopConfettiEffect();
- gSpecialVar_0x8004 = var;
+ StopDomeConfetti();
+ gSpecialVar_0x8004 = 0;
gSpecialVar_0x8005 = 0xFFFF;
break;
}
diff --git a/src/image_processing_effects.c b/src/image_processing_effects.c
index 13794faf0..cbd8b9b37 100644
--- a/src/image_processing_effects.c
+++ b/src/image_processing_effects.c
@@ -5,7 +5,7 @@
// IWRAM common
u8 gCanvasColumnStart;
-u16 (*gCanvasPixels)[][32];
+u16 *gCanvasPixels;
u8 gCanvasRowEnd;
u8 gCanvasHeight;
u8 gCanvasColumnEnd;
@@ -125,7 +125,7 @@ static void ApplyImageEffect_RedChannelGrayscale(u8 delta)
for (j = 0; j < gCanvasRowEnd; j++)
{
- u16 *pixelRow = &(*gCanvasPixels)[0][(gCanvasRowStart + j) * gCanvasWidth];
+ u16 *pixelRow = &gCanvasPixels[(gCanvasRowStart + j) * gCanvasWidth];
u16 *pixel = &pixelRow[gCanvasColumnStart];
for (i = 0; i < gCanvasColumnEnd; i++, pixel++)
{
@@ -150,7 +150,7 @@ static void ApplyImageEffect_RedChannelGrayscaleHighlight(u8 highlight)
for (j = 0; j < gCanvasRowEnd; j++)
{
- u16 *pixelRow = &(*gCanvasPixels)[0][(gCanvasRowStart + j) * gCanvasWidth];
+ u16 *pixelRow = &gCanvasPixels[(gCanvasRowStart + j) * gCanvasWidth];
u16 *pixel = &pixelRow[gCanvasColumnStart];
for (i = 0; i < gCanvasColumnEnd; i++, pixel++)
{
@@ -179,7 +179,7 @@ static void ApplyImageEffect_Grayscale(void)
for (j = 0; j < gCanvasRowEnd; j++)
{
- u16 *pixelRow = &(*gCanvasPixels)[0][(gCanvasRowStart + j) * gCanvasWidth];
+ u16 *pixelRow = &gCanvasPixels[(gCanvasRowStart + j) * gCanvasWidth];
u16 *pixel = &pixelRow[gCanvasColumnStart];
for (i = 0; i < gCanvasColumnEnd; i++, pixel++)
{
@@ -195,7 +195,7 @@ static void ApplyImageEffect_Blur(void)
for (i = 0; i < gCanvasColumnEnd; i++)
{
- u16 *pixelRow = &(*gCanvasPixels)[0][gCanvasRowStart * gCanvasWidth];
+ u16 *pixelRow = &gCanvasPixels[gCanvasRowStart * gCanvasWidth];
u16 *pixel = &pixelRow[gCanvasColumnStart + i];
u16 prevPixel = *pixel;
@@ -221,7 +221,7 @@ static void ApplyImageEffect_PersonalityColor(u8 personality)
for (j = 0; j < gCanvasRowEnd; j++)
{
- u16 *pixelRow = &(*gCanvasPixels)[0][(gCanvasRowStart + j) * gCanvasWidth];
+ u16 *pixelRow = &gCanvasPixels[(gCanvasRowStart + j) * gCanvasWidth];
u16 *pixel = &pixelRow[gCanvasColumnStart];
for (i = 0; i < gCanvasColumnEnd; i++, pixel++)
{
@@ -237,7 +237,7 @@ static void ApplyImageEffect_BlackAndWhite(void)
for (j = 0; j < gCanvasRowEnd; j++)
{
- u16 *pixelRow = &(*gCanvasPixels)[0][(gCanvasRowStart + j) * gCanvasWidth];
+ u16 *pixelRow = &gCanvasPixels[(gCanvasRowStart + j) * gCanvasWidth];
u16 *pixel = &pixelRow[gCanvasColumnStart];
for (i = 0; i < gCanvasColumnEnd; i++, pixel++)
{
@@ -255,7 +255,7 @@ static void ApplyImageEffect_BlackOutline(void)
// Handle top row of pixels first.
for (j = 0; j < gCanvasRowEnd; j++)
{
- u16 *pixelRow = &(*gCanvasPixels)[0][(gCanvasRowStart + j) * gCanvasWidth];
+ u16 *pixelRow = &gCanvasPixels[(gCanvasRowStart + j) * gCanvasWidth];
pixel = &pixelRow[gCanvasColumnStart];
*pixel = QuantizePixel_BlackOutline(pixel, pixel + 1);
for (i = 1, pixel++; i < gCanvasColumnEnd - 1; i++, pixel++)
@@ -270,7 +270,7 @@ static void ApplyImageEffect_BlackOutline(void)
// Handle each column from left to right.
for (i = 0; i < gCanvasColumnEnd; i++)
{
- u16 *pixelRow = &(*gCanvasPixels)[0][gCanvasRowStart * gCanvasWidth];
+ u16 *pixelRow = &gCanvasPixels[gCanvasRowStart * gCanvasWidth];
pixel = &pixelRow[gCanvasColumnStart + i];
*pixel = QuantizePixel_BlackOutline(pixel, pixel + gCanvasWidth);
for (j = 1, pixel += gCanvasWidth; j < gCanvasRowEnd - 1; j++, pixel += gCanvasWidth)
@@ -289,7 +289,7 @@ static void ApplyImageEffect_Invert(void)
for (j = 0; j < gCanvasRowEnd; j++)
{
- u16 *pixelRow = &(*gCanvasPixels)[0][(gCanvasRowStart + j) * gCanvasWidth];
+ u16 *pixelRow = &gCanvasPixels[(gCanvasRowStart + j) * gCanvasWidth];
u16 *pixel = &pixelRow[gCanvasColumnStart];
for (i = 0; i < gCanvasColumnEnd; i++, pixel++)
{
@@ -306,7 +306,7 @@ static void ApplyImageEffect_Shimmer(void)
u16 prevPixel;
// First, invert all of the colors.
- pixel = (*gCanvasPixels)[0];
+ pixel = gCanvasPixels;
for (i = 0; i < 64; i++)
{
for (j = 0; j < 64; j++, pixel++)
@@ -319,7 +319,7 @@ static void ApplyImageEffect_Shimmer(void)
// Blur the pixels twice.
for (j = 0; j < 64; j++)
{
- pixel = &(*gCanvasPixels)[0][j];
+ pixel = &gCanvasPixels[j];
prevPixel = *pixel;
*pixel = 0x8000;
for (i = 1, pixel += 64; i < 63; i++, pixel += 64)
@@ -332,7 +332,7 @@ static void ApplyImageEffect_Shimmer(void)
}
*pixel = 0x8000;
- pixel = &(*gCanvasPixels)[0][j];
+ pixel = &gCanvasPixels[j];
prevPixel = *pixel;
*pixel = 0x8000;
for (i = 1, pixel += 64; i < 63; i++, pixel += 64)
@@ -350,7 +350,7 @@ static void ApplyImageEffect_Shimmer(void)
// Finally, invert colors back to the original color space.
// The above blur causes the outline areas to darken, which makes
// this inversion give the effect of light outlines.
- pixel = (*gCanvasPixels)[0];
+ pixel = gCanvasPixels;
for (i = 0; i < 64; i++)
{
for (j = 0; j < 64; j++, pixel++)
@@ -367,7 +367,7 @@ static void ApplyImageEffect_BlurRight(void)
for (j = 0; j < gCanvasRowEnd; j++)
{
- u16 *pixelRow = &(*gCanvasPixels)[0][(gCanvasRowStart + j) * gCanvasWidth];
+ u16 *pixelRow = &gCanvasPixels[(gCanvasRowStart + j) * gCanvasWidth];
u16 *pixel = &pixelRow[gCanvasColumnStart];
u16 prevPixel = *pixel;
for (i = 1, pixel++; i < gCanvasColumnEnd - 1; i++, pixel++)
@@ -387,7 +387,7 @@ static void ApplyImageEffect_BlurDown(void)
for (i = 0; i < gCanvasColumnEnd; i++)
{
- u16 *pixelRow = &(*gCanvasPixels)[0][gCanvasRowStart * gCanvasWidth];
+ u16 *pixelRow = &gCanvasPixels[gCanvasRowStart * gCanvasWidth];
u16 *pixel = &pixelRow[gCanvasColumnStart + i];
u16 prevPixel = *pixel;
for (j = 1, pixel += gCanvasWidth; j < gCanvasRowEnd - 1; j++, pixel += gCanvasWidth)
@@ -445,7 +445,7 @@ static void AddPointillismPoints(u16 arg0)
for (i = 0; i < points[0].delta; i++)
{
- u16 *pixel = &(*gCanvasPixels)[points[i].row * 2][points[i].column];
+ u16 *pixel = &gCanvasPixels[points[i].row * 64] + points[i].column;
if (!(0x8000 & *pixel))
{
@@ -910,7 +910,7 @@ static void QuantizePalette_Standard(bool8 useLimitedPalette)
gCanvasPalette[maxIndex] = RGB2(15, 15, 15);
for (j = 0; j < gCanvasRowEnd; j++)
{
- u16 *pixelRow = &(*gCanvasPixels)[0][(gCanvasRowStart + j) * gCanvasWidth];
+ u16 *pixelRow = &gCanvasPixels[(gCanvasRowStart + j) * gCanvasWidth];
u16 *pixel = &pixelRow[gCanvasColumnStart];
for (i = 0; i < gCanvasColumnEnd; i++, pixel++)
{
@@ -978,7 +978,7 @@ static void QuantizePalette_BlackAndWhite(void)
for (j = 0; j < gCanvasRowEnd; j++)
{
- u16 *pixelRow = &(*gCanvasPixels)[0][(gCanvasRowStart + j) * gCanvasWidth];
+ u16 *pixelRow = &gCanvasPixels[(gCanvasRowStart + j) * gCanvasWidth];
u16 *pixel = &pixelRow[gCanvasColumnStart];
for (i = 0; i < gCanvasColumnEnd; i++, pixel++)
{
@@ -1009,7 +1009,7 @@ static void QuantizePalette_GrayscaleSmall(void)
for (j = 0; j < gCanvasRowEnd; j++)
{
- u16 *pixelRow = &(*gCanvasPixels)[0][(gCanvasRowStart + j) * gCanvasWidth];
+ u16 *pixelRow = &gCanvasPixels[(gCanvasRowStart + j) * gCanvasWidth];
u16 *pixel = &pixelRow[gCanvasColumnStart];
for (i = 0; i < gCanvasColumnEnd; i++, pixel++)
{
@@ -1027,7 +1027,7 @@ static void QuantizePalette_Grayscale(void)
for (j = 0; j < gCanvasRowEnd; j++)
{
- u16 *pixelRow = &(*gCanvasPixels)[0][(gCanvasRowStart + j) * gCanvasWidth];
+ u16 *pixelRow = &gCanvasPixels[(gCanvasRowStart + j) * gCanvasWidth];
u16 *pixel = &pixelRow[gCanvasColumnStart];
for (i = 0; i < gCanvasColumnEnd; i++, pixel++)
{
@@ -1045,7 +1045,7 @@ static void QuantizePalette_PrimaryColors(void)
for (j = 0; j < gCanvasRowEnd; j++)
{
- u16 *pixelRow = &(*gCanvasPixels)[0][(gCanvasRowStart + j) * gCanvasWidth];
+ u16 *pixelRow = &gCanvasPixels[(gCanvasRowStart + j) * gCanvasWidth];
u16 *pixel = &pixelRow[gCanvasColumnStart];
for (i = 0; i < gCanvasColumnEnd; i++, pixel++)
{
diff --git a/src/international_string_util.c b/src/international_string_util.c
index ec5057359..23ca6c081 100644
--- a/src/international_string_util.c
+++ b/src/international_string_util.c
@@ -136,7 +136,7 @@ void PadNameString(u8 *dest, u8 padChar)
while (length < PLAYER_NAME_LENGTH - 1)
{
dest[length] = EXT_CTRL_CODE_BEGIN;
- dest[length + 1] = EXT_CTRL_CODE_UNKNOWN_7;
+ dest[length + 1] = EXT_CTRL_CODE_RESET_SIZE;
length += 2;
}
}
diff --git a/src/intro.c b/src/intro.c
index 72aefd737..eca8b84b1 100644
--- a/src/intro.c
+++ b/src/intro.c
@@ -1129,7 +1129,7 @@ static void Task_IntroFadeIn(u8 taskId)
SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_0 | DISPCNT_OBJ_1D_MAP | DISPCNT_BG_ALL_ON | DISPCNT_OBJ_ON);
gTasks[taskId].func = Task_IntroWaterDrops;
gIntroFrameCounter = 0;
- m4aSongNumStart(MUS_DEMO1);
+ m4aSongNumStart(MUS_INTRO);
ResetSerial();
}
@@ -1563,7 +1563,7 @@ static void Task_IntroLoadPart3Graphics(u8 taskId)
SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_1 | DISPCNT_OBJ_1D_MAP | DISPCNT_BG2_ON | DISPCNT_OBJ_ON);
gTasks[taskId].func = Task_IntroSpinAndZoomPokeball;
gIntroFrameCounter = 0;
- m4aSongNumStart(MUS_T_BATTLE);
+ m4aSongNumStart(MUS_INTRO_BATTLE);
}
static void Task_IntroSpinAndZoomPokeball(u8 taskId)
@@ -2355,7 +2355,7 @@ static void Task_IntroRayquazaGlowScene_1(u8 taskId)
if (data[1] == 6)
{
spriteId = CreateSprite(&gIntroRayquazaHyperbeamSprite, 120, 88, 15);
- PlaySE(SE_OP_BASYU);
+ PlaySE(SE_INTRO_BLAST);
gSprites[spriteId].invisible = TRUE;
gSprites[spriteId].data[3] = data[4];
data[0]++;
diff --git a/src/item.c b/src/item.c
index 44b73802b..5a77d363e 100644
--- a/src/item.c
+++ b/src/item.c
@@ -247,7 +247,8 @@ bool8 CheckBagHasSpace(u16 itemId, u16 count)
NAKED
bool8 CheckBagHasSpace(u16 itemId, u16 count)
{
- asm_unified("push {r4-r7,lr}\n\
+ asm_unified(
+ "push {r4-r7,lr}\n\
mov r7, r10\n\
mov r6, r9\n\
mov r5, r8\n\
diff --git a/src/item_menu.c b/src/item_menu.c
index fe381516c..ace2fd11e 100755
--- a/src/item_menu.c
+++ b/src/item_menu.c
@@ -52,7 +52,14 @@
#include "battle_pike.h"
#include "constants/rgb.h"
-void GoToBagMenu(u8 bagMenuType, u8 pocketId, void ( *postExitMenuMainCallback2)());
+enum
+{
+ SWITCH_POCKET_NONE,
+ SWITCH_POCKET_LEFT,
+ SWITCH_POCKET_RIGHT
+};
+
+void GoToBagMenu(u8 bagMenuType, u8 pocketId, void (*postExitMenuMainCallback2)());
void CB2_Bag(void);
bool8 SetupBagMenu(void);
void BagMenu_InitBGs(void);
@@ -62,13 +69,13 @@ void AllocateBagItemListBuffers(void);
void LoadBagItemListBuffers(u8);
void BagMenu_PrintPocketNames(const u8*, const u8*);
void BagMenu_CopyPocketNameToWindow(u32);
-void BagMenu_DrawPocketIndicatorSquare(u8, u8);
-void bag_menu_add_pocket_scroll_arrow_indicators_maybe(void);
-void bag_menu_add_list_scroll_arrow_indicators_maybe(void);
+static void DrawPocketIndicatorSquare(u8 x, bool8 isCurrentPocket);
+void CreatePocketScrollArrowPair(void);
+void CreatePocketSwitchArrowPair(void);
void BagMenu_PrepareTMHMMoveWindow(void);
bool8 IsWallysBag(void);
void Task_WallyTutorialBagMenu(u8);
-void Task_BagMenu(u8);
+void Task_BagMenu_HandleInput(u8);
void GetItemName(s8*, u16);
u16 ItemIdToBattleMoveId(u16);
u16 BagGetItemIdByPocketPosition(u8, u16);
@@ -77,19 +84,19 @@ void BagMenu_PrintCursor(u8, u8);
void BagMenu_Print(u8, u8, const u8*, u8, u8, u8, u8, u8, u8);
bool8 ItemId_GetImportance(u16);
u16 BagGetQuantityByPocketPosition(u8, u16);
-void sub_81AB89C(void);
+void BagDestroyPocketSwitchArrowPair(void);
void TaskCloseBagMenu_2(u8);
u8 AddItemMessageWindow(u8);
-void bag_menu_RemoveBagItem_message_window(u8);
+void BagMenu_RemoveBagItemMessageindow(u8);
void set_callback3_to_bag(u8);
void PrintItemDepositAmount(u8, s16);
-u8 BagMenu_AddWindow(u8);
-u8 GetSwitchBagPocketDirection(void);
-void SwitchBagPocket(u8, s16, u16);
-bool8 sub_81AC2C0(void);
-void BagMenu_SwapItems(u8);
-void sub_81AC10C(u8);
-void sub_81AC3C0(u8);
+static u8 BagMenu_AddWindow(u8);
+static u8 GetSwitchBagPocketDirection(void);
+static void SwitchBagPocket(u8, s16, u16);
+static bool8 CanSwapItems(void);
+static void BagMenu_SwapItems(u8 taskId);
+static void sub_81AC10C(u8);
+static void Task_HandleSwappingItemsInput(u8);
void sub_81AC498(u8);
void sub_81AC590(u8);
void PrintTMHMMoveData(u16);
@@ -106,29 +113,28 @@ void BagMenu_YesNo(u8, u8, const struct YesNoFuncTable*);
void Task_ActuallyToss(u8);
void ItemMenu_Cancel(u8);
void sub_81AD350(u8);
-void BagMenu_PrintItemCantBeHeld(u8);
-void DisplayCurrentMoneyWindow(void);
-void DisplaySellItemPriceAndConfirm(u8);
+static void BagMenu_PrintItemCantBeHeld(u8);
+static void DisplayCurrentMoneyWindow(void);
+static void DisplaySellItemPriceAndConfirm(u8);
void sub_81AD730(u8);
void sub_81AD6E4(u8);
-void bag_menu_remove_money_window(void);
-void bag_menu_RemoveBagItem_message_window(u8);
-void Task_BuyHowManyDialogueHandleInput(u8);
-void sub_81AD8C8(u8);
-void sub_81AD9C0(u8);
-void sub_81ADB14(u8);
-void sub_81ADA7C(u8);
-void sub_81ADC0C(u8);
+static void RemoveMoneyWindow(void);
+static void Task_SellHowManyDialogueHandleInput(u8);
+static void BagMenu_Sell_UpdateItemListAndMoney(u8);
+static void BagMenu_Sell_WaitForABPress(u8);
+static void BagMenu_TryDepositItem(u8);
+static void Task_ChooseHowManyToDeposit(u8 taskId);
+static void BagMenu_Deposit_WaitForABPress(u8);
void CB2_ApprenticeExitBagMenu(void);
void CB2_FavorLadyExitBagMenu(void);
void CB2_QuizLadyExitBagMenu(void);
-void sub_81ABA6C(void);
+void All_CalculateNItemsAndMaxShowed(void);
static void SetPocketListPositions(void);
-void sub_81ABAE0(void);
-u8 sub_81AB1F0(u8);
+void UpdatePocketScrollPositions(void);
+u8 CreateBagInputHandlerTask(u8);
void sub_81AC23C(u8);
void BagMenu_MoveCursorCallback(s32 a, bool8 b, struct ListMenu*);
-void PrintItemQuantityPlusGFX(u8 rboxId, s32 item_index_in_pocket, u8 a);
+void BagMenu_ItemPrintCallback(u8 windowId, s32 itemIndex, u8 a);
void ItemMenu_UseOutOfBattle(u8 taskId);
void ItemMenu_Toss(u8 taskId);
void ItemMenu_Register(u8 taskId);
@@ -140,11 +146,11 @@ void Task_FadeAndCloseBagMenu(u8 taskId);
void unknown_ItemMenu_Show(u8 taskId);
void unknown_ItemMenu_Give2(u8 taskId);
void unknown_ItemMenu_Confirm2(u8 taskId);
-void unknown_item_menu_type(u8 taskId);
-void item_menu_type_2(u8 taskId);
-void DisplaySellItemAskString(u8 taskId);
-void DisplayDepositItemAskString(u8 taskId);
-void item_menu_type_b(u8 taskId);
+void Task_ItemContext_FieldOrBattle(u8 taskId);
+void Task_ItemContext_FieldGive(u8 taskId);
+void Task_ItemContext_Sell(u8 taskId);
+void Task_ItemContext_Deposit(u8 taskId);
+void Task_ItemContext_ItemPC_2(u8 taskId);
void BagMenu_ConfirmToss(u8 taskId);
void BagMenu_CancelToss(u8 taskId);
void BagMenu_ConfirmSell(u8 taskId);
@@ -152,7 +158,7 @@ void BagMenu_CancelSell(u8 taskId);
// .rodata
-static const struct BgTemplate sBgTemplates_ItemMenu[3] =
+static const struct BgTemplate sBgTemplates_ItemMenu[] =
{
{
.bg = 0,
@@ -187,7 +193,7 @@ static const struct ListMenuTemplate sItemListMenu =
{
.items = NULL,
.moveCursorFunc = BagMenu_MoveCursorCallback,
- .itemPrintFunc = PrintItemQuantityPlusGFX,
+ .itemPrintFunc = BagMenu_ItemPrintCallback,
.totalItems = 0,
.maxShowed = 0,
.windowId = 0,
@@ -205,59 +211,115 @@ static const struct ListMenuTemplate sItemListMenu =
.cursorKind = 0
};
-const struct MenuAction sItemMenuActions[] = {
- {gMenuText_Use, ItemMenu_UseOutOfBattle},
- {gMenuText_Toss, ItemMenu_Toss},
- {gMenuText_Register, ItemMenu_Register},
- {gMenuText_Give, ItemMenu_Give},
- {gText_Cancel2, ItemMenu_Cancel},
- {gMenuText_Use, ItemMenu_UseInBattle},
- {gMenuText_Check, ItemMenu_UseOutOfBattle},
- {gMenuText_Walk, ItemMenu_UseOutOfBattle},
- {gMenuText_Deselect, ItemMenu_Register},
- {gMenuText_CheckTag, ItemMenu_CheckTag},
- {gMenuText_Confirm, Task_FadeAndCloseBagMenu},
- {gMenuText_Show, unknown_ItemMenu_Show},
- {gMenuText_Give2, unknown_ItemMenu_Give2},
- {gMenuText_Confirm, unknown_ItemMenu_Confirm2},
- {gText_EmptyString2, NULL}
+static const struct MenuAction sItemMenuActions[] = {
+ [ITEMMENUACTION_USE] = {gMenuText_Use, ItemMenu_UseOutOfBattle},
+ [ITEMMENUACTION_TOSS] = {gMenuText_Toss, ItemMenu_Toss},
+ [ITEMMENUACTION_REGISTER] = {gMenuText_Register, ItemMenu_Register},
+ [ITEMMENUACTION_GIVE] = {gMenuText_Give, ItemMenu_Give},
+ [ITEMMENUACTION_CANCEL] = {gText_Cancel2, ItemMenu_Cancel},
+ [ITEMMENUACTION_BATTLE_USE] = {gMenuText_Use, ItemMenu_UseInBattle},
+ [ITEMMENUACTION_CHECK] = {gMenuText_Check, ItemMenu_UseOutOfBattle},
+ [ITEMMENUACTION_WALK] = {gMenuText_Walk, ItemMenu_UseOutOfBattle},
+ [ITEMMENUACTION_DESELECT] = {gMenuText_Deselect, ItemMenu_Register},
+ [ITEMMENUACTION_CHECK_TAG] = {gMenuText_CheckTag, ItemMenu_CheckTag},
+ [ITEMMENUACTION_CONFIRM] = {gMenuText_Confirm, Task_FadeAndCloseBagMenu},
+ [ITEMMENUACTION_SHOW] = {gMenuText_Show, unknown_ItemMenu_Show},
+ [ITEMMENUACTION_GIVE_2] = {gMenuText_Give2, unknown_ItemMenu_Give2},
+ [ITEMMENUACTION_CONFIRM_2] = {gMenuText_Confirm, unknown_ItemMenu_Confirm2},
+ [ITEMMENUACTION_DUMMY] = {gText_EmptyString2, NULL}
+};
+
+// these are all 2D arrays with a width of 2 but are represented as 1D arrays
+// ITEMMENUACTION_DUMMY is used to represent blank spaces
+static const u8 sContextMenuItems_ItemsPocket[] = {
+ ITEMMENUACTION_USE, ITEMMENUACTION_GIVE,
+ ITEMMENUACTION_TOSS, ITEMMENUACTION_CANCEL
+};
+
+static const u8 sContextMenuItems_KeyItemsPocket[] = {
+ ITEMMENUACTION_USE, ITEMMENUACTION_REGISTER,
+ ITEMMENUACTION_DUMMY, ITEMMENUACTION_CANCEL
+};
+
+static const u8 sContextMenuItems_BallsPocket[] = {
+ ITEMMENUACTION_GIVE, ITEMMENUACTION_DUMMY,
+ ITEMMENUACTION_TOSS, ITEMMENUACTION_CANCEL
};
-const u8 gUnknown_0861402C[] = {0, 3, 1, 4};
-const u8 gUnknown_08614030[] = {0, 2, 14, 4};
-const u8 gUnknown_08614034[] = {3, 14, 1, 4};
-const u8 gUnknown_08614038[] = {0, 3, 14, 4};
-const u8 gUnknown_0861403C[] = {9, 14, 0, 3, 1, 4};
-const u8 gUnknown_08614042[] = {5, 4};
-const u8 gUnknown_08614044[] = {3, 4};
-const u8 gUnknown_08614046 = 4;
-const u8 gUnknown_08614047[] = {10, 9, 14, 4};
-const u8 gUnknown_0861404B[] = {11, 4};
-const u8 gUnknown_0861404D[] = {12, 4};
-const u8 gUnknown_0861404F[] = {13, 4};
-
-const TaskFunc gUnknown_08614054[] = {
- unknown_item_menu_type,
- unknown_item_menu_type,
- item_menu_type_2,
- DisplaySellItemAskString,
- Task_FadeAndCloseBagMenu,
- unknown_item_menu_type,
- DisplayDepositItemAskString,
- unknown_item_menu_type,
- unknown_item_menu_type,
- unknown_item_menu_type,
- NULL,
- item_menu_type_b
+static const u8 sContextMenuItems_TmHmPocket[] = {
+ ITEMMENUACTION_USE, ITEMMENUACTION_GIVE,
+ ITEMMENUACTION_DUMMY, ITEMMENUACTION_CANCEL
};
-const struct YesNoFuncTable sYesNoTossFunctions = {BagMenu_ConfirmToss, BagMenu_CancelToss};
+static const u8 sContextMenuItems_BerriesPocket[] = {
+ ITEMMENUACTION_CHECK_TAG, ITEMMENUACTION_DUMMY,
+ ITEMMENUACTION_USE, ITEMMENUACTION_GIVE,
+ ITEMMENUACTION_TOSS, ITEMMENUACTION_CANCEL
+};
-const struct YesNoFuncTable sYesNoSellItemFunctions = {BagMenu_ConfirmSell, BagMenu_CancelSell};
+static const u8 sContextMenuItems_BattleUse[] = {
+ ITEMMENUACTION_BATTLE_USE, ITEMMENUACTION_CANCEL
+};
-const struct ScrollArrowsTemplate gBagScrollArrowsTemplate = {SCROLL_ARROW_LEFT, 0x1C, 16, SCROLL_ARROW_RIGHT, 100, 16, -1, -1, 0x6F, 0x6F, 0};
+static const u8 sContextMenuItems_Give[] = {
+ ITEMMENUACTION_GIVE, ITEMMENUACTION_CANCEL
+};
-const u8 gRegisteredSelect_Gfx[] = INCBIN_U8("graphics/interface/select_button.4bpp");
+static const u8 sContextMenuItems_Cancel[] = {
+ ITEMMENUACTION_CANCEL
+};
+
+static const u8 sContextMenuItems_BerryBlenderCrush[] = {
+ ITEMMENUACTION_CONFIRM, ITEMMENUACTION_CHECK_TAG,
+ ITEMMENUACTION_DUMMY, ITEMMENUACTION_CANCEL
+};
+
+static const u8 sContextMenuItems_Apprentice[] = {
+ ITEMMENUACTION_SHOW, ITEMMENUACTION_CANCEL
+};
+
+static const u8 sContextMenuItems_FavorLady[] = {
+ ITEMMENUACTION_GIVE_2, ITEMMENUACTION_CANCEL
+};
+
+static const u8 sContextMenuItems_QuizLady[] = {
+ ITEMMENUACTION_CONFIRM_2, ITEMMENUACTION_CANCEL
+};
+
+static const TaskFunc gUnknown_08614054[] = {
+ [ITEMMENULOCATION_FIELD] = Task_ItemContext_FieldOrBattle,
+ [ITEMMENULOCATION_BATTLE] = Task_ItemContext_FieldOrBattle,
+ [ITEMMENULOCATION_PARTY] = Task_ItemContext_FieldGive,
+ [ITEMMENULOCATION_SHOP] = Task_ItemContext_Sell,
+ [ITEMMENULOCATION_BERRY_TREE] = Task_FadeAndCloseBagMenu,
+ [ITEMMENULOCATION_BERRY_BLENDER_CRUSH] = Task_ItemContext_FieldOrBattle,
+ [ITEMMENULOCATION_ITEMPC] = Task_ItemContext_Deposit,
+ [ITEMMENULOCATION_FAVOR_LADY] = Task_ItemContext_FieldOrBattle,
+ [ITEMMENULOCATION_QUIZ_LADY] = Task_ItemContext_FieldOrBattle,
+ [ITEMMENULOCATION_APPRENTICE] = Task_ItemContext_FieldOrBattle,
+ [ITEMMENULOCATION_WALLY] = NULL,
+ [ITEMMENULOCATION_PCBOX] = Task_ItemContext_ItemPC_2
+};
+
+static const struct YesNoFuncTable sYesNoTossFunctions = {BagMenu_ConfirmToss, BagMenu_CancelToss};
+
+static const struct YesNoFuncTable sYesNoSellItemFunctions = {BagMenu_ConfirmSell, BagMenu_CancelSell};
+
+static const struct ScrollArrowsTemplate sBagScrollArrowsTemplate = {
+ .firstArrowType = SCROLL_ARROW_LEFT,
+ .firstX = 28,
+ .firstY = 16,
+ .secondArrowType = SCROLL_ARROW_RIGHT,
+ .secondX = 100,
+ .secondY = 16,
+ .fullyUpThreshold = -1,
+ .fullyDownThreshold = -1,
+ .tileTag = 111,
+ .palTag = 111,
+ .palNum = 0,
+};
+
+static const u8 sRegisteredSelect_Gfx[] = INCBIN_U8("graphics/interface/select_button.4bpp");
static const u8 sFontColorTable[][3] = {
// bgColor, textColor, shadowColor
@@ -268,7 +330,7 @@ static const u8 sFontColorTable[][3] = {
{0, 14, 10}
};
-const struct WindowTemplate gUnknown_08614174[] =
+const struct WindowTemplate sDefaultBagWindows[] =
{
{ // Item names
.bg = 0,
@@ -327,7 +389,7 @@ const struct WindowTemplate gUnknown_08614174[] =
DUMMY_WIN_TEMPLATE,
};
-const struct WindowTemplate gUnknown_086141AC[] =
+const struct WindowTemplate sContextMenuWindowTemplates[] =
{
{
.bg = 1,
@@ -424,11 +486,11 @@ const struct WindowTemplate gUnknown_086141AC[] =
// .text
struct ListBuffer1 {
- struct ListMenuItem subBuffers[65];
+ struct ListMenuItem subBuffers[MAX_POCKET_ITEMS];
};
struct ListBuffer2 {
- s8 name[65][24];
+ s8 name[MAX_POCKET_ITEMS][24];
};
struct TempWallyStruct {
@@ -436,7 +498,7 @@ struct TempWallyStruct {
struct ItemSlot bagPocket_PokeBalls[BAG_POKEBALLS_COUNT];
u16 cursorPosition[POCKETS_COUNT];
u16 scrollPosition[POCKETS_COUNT];
- u8 filler[0x2];
+ u8 filler[2];
u16 pocket;
};
@@ -461,95 +523,96 @@ void ResetBagScrollPositions(void)
void CB2_BagMenuFromStartMenu(void)
{
- GoToBagMenu(RETURN_LOCATION_FIELD, POCKETS_COUNT, CB2_ReturnToFieldWithOpenMenu);
+ GoToBagMenu(ITEMMENULOCATION_FIELD, POCKETS_COUNT, CB2_ReturnToFieldWithOpenMenu);
}
-void sub_81AABB0(void)
+void CB2_BagMenuFromBattle(void)
{
if (!InBattlePyramid())
- GoToBagMenu(RETURN_LOCATION_BATTLE, POCKETS_COUNT, CB2_SetUpReshowBattleScreenAfterMenu2);
+ GoToBagMenu(ITEMMENULOCATION_BATTLE, POCKETS_COUNT, CB2_SetUpReshowBattleScreenAfterMenu2);
else
GoToBattlePyramidBagMenu(1, CB2_SetUpReshowBattleScreenAfterMenu2);
}
+// Choosing berry to plant
void CB2_ChooseBerry(void)
{
- GoToBagMenu(RETURN_LOCATION_FIELD_2, BERRIES_POCKET, CB2_ReturnToFieldContinueScript);
+ GoToBagMenu(ITEMMENULOCATION_BERRY_TREE, BERRIES_POCKET, CB2_ReturnToFieldContinueScript);
}
-void ChooseBerrySetCallback(void (*callback)(void))
+// Choosing berry for Berry Blender or Berry Crush
+void ChooseBerryForMachine(void (*exitCallback)(void))
{
- GoToBagMenu(RETURN_LOCATION_FIELD_3, BERRIES_POCKET, callback);
+ GoToBagMenu(ITEMMENULOCATION_BERRY_BLENDER_CRUSH, BERRIES_POCKET, exitCallback);
}
void CB2_GoToSellMenu(void)
{
- GoToBagMenu(RETURN_LOCATION_SHOP, POCKETS_COUNT, CB2_ExitSellMenu);
+ GoToBagMenu(ITEMMENULOCATION_SHOP, POCKETS_COUNT, CB2_ExitSellMenu);
}
-void sub_81AAC14(void)
+void CB2_GoToItemDepositMenu(void)
{
- GoToBagMenu(RETURN_LOCATION_PC, POCKETS_COUNT, sub_816B31C);
+ GoToBagMenu(ITEMMENULOCATION_ITEMPC, POCKETS_COUNT, sub_816B31C);
}
void ApprenticeOpenBagMenu(void)
{
- GoToBagMenu(RETURN_LOCATION_FIELD_6, POCKETS_COUNT, CB2_ApprenticeExitBagMenu);
+ GoToBagMenu(ITEMMENULOCATION_APPRENTICE, POCKETS_COUNT, CB2_ApprenticeExitBagMenu);
gSpecialVar_0x8005 = ITEM_NONE;
gSpecialVar_Result = FALSE;
}
void FavorLadyOpenBagMenu(void)
{
- GoToBagMenu(RETURN_LOCATION_FIELD_4, POCKETS_COUNT, CB2_FavorLadyExitBagMenu);
+ GoToBagMenu(ITEMMENULOCATION_FAVOR_LADY, POCKETS_COUNT, CB2_FavorLadyExitBagMenu);
gSpecialVar_Result = FALSE;
}
void QuizLadyOpenBagMenu(void)
{
- GoToBagMenu(RETURN_LOCATION_FIELD_5, POCKETS_COUNT, CB2_QuizLadyExitBagMenu);
+ GoToBagMenu(ITEMMENULOCATION_QUIZ_LADY, POCKETS_COUNT, CB2_QuizLadyExitBagMenu);
gSpecialVar_Result = FALSE;
}
-void GoToBagMenu(u8 bagMenuType, u8 pocketId, void ( *postExitMenuMainCallback2)())
+void GoToBagMenu(u8 location, u8 pocket, void ( *postExitMenuMainCallback2)())
{
- u8 temp;
gBagMenu = AllocZeroed(sizeof(struct BagMenuStruct));
- if (gBagMenu == 0)
+ if (gBagMenu == NULL)
{
SetMainCallback2(postExitMenuMainCallback2);
}
else
{
- if (bagMenuType != RETURN_LOCATION_UNCHANGED)
- gBagPositionStruct.location = bagMenuType;
+ if (location != ITEMMENULOCATION_LAST)
+ gBagPositionStruct.location = location;
if (postExitMenuMainCallback2)
gBagPositionStruct.bagCallback = postExitMenuMainCallback2;
- if (pocketId < POCKETS_COUNT)
- gBagPositionStruct.pocket = pocketId;
- temp = gBagPositionStruct.location - (POCKETS_COUNT - 1);
- if (temp <= 1)
- gBagMenu->unk81B = 1;
- gBagMenu->mainCallback2 = 0;
- gBagMenu->unk81A = 0xFF;
- gBagMenu->unk81E = -1;
- gBagMenu->unk81F = -1;
+ if (pocket < POCKETS_COUNT)
+ gBagPositionStruct.pocket = pocket;
+ if (gBagPositionStruct.location == ITEMMENULOCATION_BERRY_TREE ||
+ gBagPositionStruct.location == ITEMMENULOCATION_BERRY_BLENDER_CRUSH)
+ gBagMenu->pocketSwitchDisabled = TRUE;
+ gBagMenu->exitCallback = NULL;
+ gBagMenu->itemOriginalLocation = 0xFF;
+ gBagMenu->pocketScrollArrowsTask = 0xFF;
+ gBagMenu->pocketSwitchArrowsTask = 0xFF;
memset(gBagMenu->spriteId, 0xFF, sizeof(gBagMenu->spriteId));
memset(gBagMenu->windowPointers, 0xFF, 10);
SetMainCallback2(CB2_Bag);
}
}
-void c2_bag_3(void)
+void CB2_BagMenuRun(void)
{
RunTasks();
AnimateSprites();
BuildOamBuffer();
- do_scheduled_bg_tilemap_copies_to_vram();
+ DoScheduledBgTilemapCopiesToVram();
UpdatePaletteFade();
}
-void vblank_cb_bag_menu(void)
+void VBlankCB_BagMenuRun(void)
{
LoadOam();
ProcessSpriteCopyRequests();
@@ -560,7 +623,7 @@ void vblank_cb_bag_menu(void)
void CB2_Bag(void)
{
- while(sub_81221EC() != TRUE && SetupBagMenu() != TRUE && sub_81221AC() != TRUE) {};
+ while(MenuHelpers_CallLinkSomething() != TRUE && SetupBagMenu() != TRUE && MenuHelpers_LinkSomething() != TRUE) {};
}
bool8 SetupBagMenu(void)
@@ -572,7 +635,7 @@ bool8 SetupBagMenu(void)
{
case 0:
SetVBlankHBlankCallbacksToNull();
- clear_scheduled_bg_copies_to_vram();
+ ClearScheduledBgCopiesToVram();
gMain.state++;
break;
case 1:
@@ -596,13 +659,13 @@ bool8 SetupBagMenu(void)
gMain.state++;
break;
case 6:
- if (sub_81221AC() == FALSE)
+ if (!MenuHelpers_LinkSomething())
ResetTasks();
gMain.state++;
break;
case 7:
BagMenu_InitBGs();
- gBagMenu->unk834 = 0;
+ gBagMenu->graphicsLoadState = 0;
gMain.state++;
break;
case 8:
@@ -615,9 +678,9 @@ bool8 SetupBagMenu(void)
gMain.state++;
break;
case 10:
- sub_81ABA6C();
+ All_CalculateNItemsAndMaxShowed();
SetPocketListPositions();
- sub_81ABAE0();
+ UpdatePocketScrollPositions();
gMain.state++;
break;
case 11:
@@ -631,11 +694,11 @@ bool8 SetupBagMenu(void)
case 13:
BagMenu_PrintPocketNames(gPocketNamesStringsTable[gBagPositionStruct.pocket], 0);
BagMenu_CopyPocketNameToWindow(0);
- BagMenu_DrawPocketIndicatorSquare(gBagPositionStruct.pocket, 1);
+ DrawPocketIndicatorSquare(gBagPositionStruct.pocket, TRUE);
gMain.state++;
break;
case 14:
- taskId = sub_81AB1F0(gBagPositionStruct.location);
+ taskId = CreateBagInputHandlerTask(gBagPositionStruct.location);
gTasks[taskId].data[0] = ListMenuInit(&gMultiuseListMenuTemplate, gBagPositionStruct.scrollPosition[gBagPositionStruct.pocket], gBagPositionStruct.cursorPosition[gBagPositionStruct.pocket]);
gTasks[taskId].data[3] = 0;
gTasks[taskId].tItemCount = 0;
@@ -650,8 +713,8 @@ bool8 SetupBagMenu(void)
gMain.state++;
break;
case 17:
- bag_menu_add_pocket_scroll_arrow_indicators_maybe();
- bag_menu_add_list_scroll_arrow_indicators_maybe();
+ CreatePocketScrollArrowPair();
+ CreatePocketSwitchArrowPair();
gMain.state++;
break;
case 18:
@@ -659,7 +722,7 @@ bool8 SetupBagMenu(void)
gMain.state++;
break;
case 19:
- BlendPalettes(-1, 16, 0);
+ BlendPalettes(0xFFFFFFFF, 16, 0);
gMain.state++;
break;
case 20:
@@ -668,8 +731,8 @@ bool8 SetupBagMenu(void)
gMain.state++;
break;
default:
- SetVBlankCallback(vblank_cb_bag_menu);
- SetMainCallback2(c2_bag_3);
+ SetVBlankCallback(VBlankCB_BagMenuRun);
+ SetMainCallback2(CB2_BagMenuRun);
return TRUE;
}
return FALSE;
@@ -683,7 +746,7 @@ void BagMenu_InitBGs(void)
InitBgsFromTemplates(0, sBgTemplates_ItemMenu, 3);
SetBgTilemapBuffer(2, gBagMenu->tilemapBuffer);
ResetAllBgsCoordinates();
- schedule_bg_copy_tilemap_to_vram(2);
+ ScheduleBgCopyTilemapToVram(2);
SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_OBJ_ON | DISPCNT_OBJ_1D_MAP);
ShowBg(0);
ShowBg(1);
@@ -693,18 +756,18 @@ void BagMenu_InitBGs(void)
bool8 LoadBagMenu_Graphics(void)
{
- switch (gBagMenu->unk834)
+ switch (gBagMenu->graphicsLoadState)
{
case 0:
- reset_temp_tile_data_buffers();
- decompress_and_copy_tile_data_to_vram(2, gBagScreen_Gfx, 0, 0, 0);
- gBagMenu->unk834++;
+ ResetTempTileDataBuffers();
+ DecompressAndCopyTileDataToVram(2, gBagScreen_Gfx, 0, 0, 0);
+ gBagMenu->graphicsLoadState++;
break;
case 1:
- if (free_temp_tile_data_buffers_if_possible() != TRUE)
+ if (FreeTempTileDataBuffersIfPossible() != TRUE)
{
LZDecompressWram(gBagScreen_GfxTileMap, gBagMenu->tilemapBuffer);
- gBagMenu->unk834++;
+ gBagMenu->graphicsLoadState++;
}
break;
case 2:
@@ -712,34 +775,34 @@ bool8 LoadBagMenu_Graphics(void)
LoadCompressedPalette(gBagScreenFemale_Pal, 0, 0x40);
else
LoadCompressedPalette(gBagScreenMale_Pal, 0, 0x40);
- gBagMenu->unk834++;
+ gBagMenu->graphicsLoadState++;
break;
case 3:
if (IsWallysBag() == TRUE || gSaveBlock2Ptr->playerGender == MALE)
LoadCompressedSpriteSheet(&gBagMaleSpriteSheet);
else
LoadCompressedSpriteSheet(&gBagFemaleSpriteSheet);
- gBagMenu->unk834++;
+ gBagMenu->graphicsLoadState++;
break;
case 4:
LoadCompressedSpritePalette(&gBagPaletteTable);
- gBagMenu->unk834++;
+ gBagMenu->graphicsLoadState++;
break;
default:
LoadListMenuArrowsGfx();
- gBagMenu->unk834 = 0;
+ gBagMenu->graphicsLoadState = 0;
return TRUE;
}
return FALSE;
}
-u8 sub_81AB1F0(u8 a)
+u8 CreateBagInputHandlerTask(u8 location)
{
u8 taskId;
- if (a == 10)
+ if (location == ITEMMENULOCATION_WALLY)
taskId = CreateTask(Task_WallyTutorialBagMenu, 0);
else
- taskId = CreateTask(Task_BagMenu, 0);
+ taskId = CreateTask(Task_BagMenu_HandleInput, 0);
return taskId;
}
@@ -767,7 +830,7 @@ void LoadBagItemListBuffers(u8 pocketId)
StringCopy(sListBuffer2->name[i], gText_CloseBag);
subBuffer = sListBuffer1->subBuffers;
subBuffer[i].name = sListBuffer2->name[i];
- subBuffer[i].id = -2;
+ subBuffer[i].id = LIST_CANCEL;
}
else
{
@@ -813,73 +876,76 @@ void GetItemName(s8 *dest, u16 itemId)
}
}
-void BagMenu_MoveCursorCallback(s32 a, bool8 b, struct ListMenu *unused)
+void BagMenu_MoveCursorCallback(s32 itemIndex, bool8 onInit, struct ListMenu *list)
{
- if (b != 1)
+ if (onInit != TRUE)
{
PlaySE(SE_SELECT);
- ShakeBagVisual();
+ ShakeBagSprite();
}
- if (gBagMenu->unk81A == 0xFF)
+ if (gBagMenu->itemOriginalLocation == 0xFF)
{
- RemoveBagItemIconSprite(1 ^ gBagMenu->unk81B_1);
- if (a != -2)
- AddBagItemIconSprite(BagGetItemIdByPocketPosition(gBagPositionStruct.pocket + 1, a), gBagMenu->unk81B_1);
+ RemoveBagItemIconSprite(gBagMenu->itemIconSlot ^ 1);
+ if (itemIndex != LIST_CANCEL)
+ AddBagItemIconSprite(BagGetItemIdByPocketPosition(gBagPositionStruct.pocket + 1, itemIndex), gBagMenu->itemIconSlot);
else
- AddBagItemIconSprite(-1, gBagMenu->unk81B_1);
- gBagMenu->unk81B_1 ^= 1;
- if (!gBagMenu->unk81B_3)
- BagMenu_PrintDescription(a);
+ AddBagItemIconSprite(-1, gBagMenu->itemIconSlot);
+ gBagMenu->itemIconSlot ^= 1;
+ if (!gBagMenu->inhibitItemDescriptionPrint)
+ BagMenu_PrintDescription(itemIndex);
}
}
-void PrintItemQuantityPlusGFX(u8 rboxId, s32 item_index_in_pocket, u8 a)
+void BagMenu_ItemPrintCallback(u8 windowId, s32 itemIndex, u8 y)
{
u16 itemId;
u16 itemQuantity;
- bool8 unique;
int offset;
- if (item_index_in_pocket != -2)
+
+ if (itemIndex != LIST_CANCEL)
{
- if (gBagMenu->unk81A != 0xFF)
+ if (gBagMenu->itemOriginalLocation != 0xFF)
{
- if (gBagMenu->unk81A == (u8)item_index_in_pocket)
- BagMenu_PrintCursor(a, 2);
+ if (gBagMenu->itemOriginalLocation == (u8)itemIndex)
+ BagMenu_PrintCursor(y, 2);
else
- BagMenu_PrintCursor(a, -1);
+ BagMenu_PrintCursor(y, 0xFF);
}
- itemId = BagGetItemIdByPocketPosition(gBagPositionStruct.pocket + 1, item_index_in_pocket);
- itemQuantity = BagGetQuantityByPocketPosition(gBagPositionStruct.pocket + 1, item_index_in_pocket);
+
+ itemId = BagGetItemIdByPocketPosition(gBagPositionStruct.pocket + 1, itemIndex);
+ itemQuantity = BagGetQuantityByPocketPosition(gBagPositionStruct.pocket + 1, itemIndex);
+
if (itemId >= ITEM_HM01 && itemId <= ITEM_HM08)
- BlitBitmapToWindow(rboxId, gBagMenuHMIcon_Gfx, 8, a - 1, 16, 16);
+ BlitBitmapToWindow(windowId, gBagMenuHMIcon_Gfx, 8, y - 1, 16, 16);
+
if (gBagPositionStruct.pocket == BERRIES_POCKET)
{
ConvertIntToDecimalStringN(gStringVar1, itemQuantity, STR_CONV_MODE_RIGHT_ALIGN, 3);
StringExpandPlaceholders(gStringVar4, gText_xVar1);
- offset = GetStringRightAlignXOffset(7, gStringVar4, 0x77);
- BagMenu_Print(rboxId, 7, gStringVar4, offset, a, 0, 0, -1, 0);
+ offset = GetStringRightAlignXOffset(7, gStringVar4, 119);
+ BagMenu_Print(windowId, 7, gStringVar4, offset, y, 0, 0, -1, 0);
}
- else if (gBagPositionStruct.pocket != KEYITEMS_POCKET && (unique = ItemId_GetImportance(itemId)) == FALSE)
+ else if (gBagPositionStruct.pocket != KEYITEMS_POCKET && ItemId_GetImportance(itemId) == FALSE)
{
ConvertIntToDecimalStringN(gStringVar1, itemQuantity, STR_CONV_MODE_RIGHT_ALIGN, 2);
StringExpandPlaceholders(gStringVar4, gText_xVar1);
- offset = GetStringRightAlignXOffset(7, gStringVar4, 0x77);
- BagMenu_Print(rboxId, 7, gStringVar4, offset, a, unique, unique, -1, unique);
+ offset = GetStringRightAlignXOffset(7, gStringVar4, 119);
+ BagMenu_Print(windowId, 7, gStringVar4, offset, y, 0, 0, -1, 0);
}
else
{
if (gSaveBlock1Ptr->registeredItem && gSaveBlock1Ptr->registeredItem == itemId)
- BlitBitmapToWindow(rboxId, gRegisteredSelect_Gfx, 0x60, a - 1, 0x18, 16);
+ BlitBitmapToWindow(windowId, sRegisteredSelect_Gfx, 96, y - 1, 24, 16);
}
}
}
-void BagMenu_PrintDescription(int a)
+void BagMenu_PrintDescription(int itemIndex)
{
const u8 *str;
- if (a != -2)
+ if (itemIndex != LIST_CANCEL)
{
- str = ItemId_GetDescription(BagGetItemIdByPocketPosition(gBagPositionStruct.pocket + 1, a));
+ str = ItemId_GetDescription(BagGetItemIdByPocketPosition(gBagPositionStruct.pocket + 1, itemIndex));
}
else
{
@@ -891,48 +957,56 @@ void BagMenu_PrintDescription(int a)
BagMenu_Print(1, 1, str, 3, 1, 0, 0, 0, 0);
}
-void BagMenu_PrintCursor_(u8 a, u8 b)
+void BagMenu_PrintCursor_(u8 listTaskId, u8 colorIndex)
{
- BagMenu_PrintCursor(ListMenuGetYCoordForPrintingArrowCursor(a), b);
+ BagMenu_PrintCursor(ListMenuGetYCoordForPrintingArrowCursor(listTaskId), colorIndex);
}
-void BagMenu_PrintCursor(u8 a, u8 b)
+void BagMenu_PrintCursor(u8 y, u8 colorIndex)
{
- if (b == 0xFF)
- FillWindowPixelRect(0, PIXEL_FILL(0), 0, a, GetMenuCursorDimensionByFont(1, 0), GetMenuCursorDimensionByFont(1, 1));
+ if (colorIndex == 0xFF)
+ FillWindowPixelRect(0, PIXEL_FILL(0), 0, y, GetMenuCursorDimensionByFont(1, 0), GetMenuCursorDimensionByFont(1, 1));
else
- BagMenu_Print(0, 1, gText_SelectorArrow2, 0, a, 0, 0, 0, b);
+ BagMenu_Print(0, 1, gText_SelectorArrow2, 0, y, 0, 0, 0, colorIndex);
}
-void bag_menu_add_pocket_scroll_arrow_indicators_maybe(void)
+void CreatePocketScrollArrowPair(void)
{
- if (gBagMenu->unk81E == 0xFF)
- gBagMenu->unk81E = AddScrollIndicatorArrowPairParameterized(SCROLL_ARROW_UP, 0xAC, 12, 0x94, gBagMenu->numItemStacks[gBagPositionStruct.pocket] - gBagMenu->numShownItems[gBagPositionStruct.pocket], 0x6E, 0x6E, &gBagPositionStruct.scrollPosition[gBagPositionStruct.pocket]);
+ if (gBagMenu->pocketScrollArrowsTask == 0xFF)
+ gBagMenu->pocketScrollArrowsTask = AddScrollIndicatorArrowPairParameterized(
+ SCROLL_ARROW_UP,
+ 172,
+ 12,
+ 148,
+ gBagMenu->numItemStacks[gBagPositionStruct.pocket] - gBagMenu->numShownItems[gBagPositionStruct.pocket],
+ 110,
+ 110,
+ &gBagPositionStruct.scrollPosition[gBagPositionStruct.pocket]);
}
-void sub_81AB824(void)
+void BagDestroyPocketScrollArrowPair(void)
{
- if (gBagMenu->unk81E != 0xFF)
+ if (gBagMenu->pocketScrollArrowsTask != 0xFF)
{
- RemoveScrollIndicatorArrowPair(gBagMenu->unk81E);
- gBagMenu->unk81E = 0xFF;
+ RemoveScrollIndicatorArrowPair(gBagMenu->pocketScrollArrowsTask);
+ gBagMenu->pocketScrollArrowsTask = 0xFF;
}
- sub_81AB89C();
+ BagDestroyPocketSwitchArrowPair();
}
-void bag_menu_add_list_scroll_arrow_indicators_maybe(void)
+void CreatePocketSwitchArrowPair(void)
{
- if (gBagMenu->unk81B != 1 && gBagMenu->unk81F == 0xFF)
- gBagMenu->unk81F = AddScrollIndicatorArrowPair(&gBagScrollArrowsTemplate, &gBagPositionStruct.unk6);
+ if (gBagMenu->pocketSwitchDisabled != TRUE && gBagMenu->pocketSwitchArrowsTask == 0xFF)
+ gBagMenu->pocketSwitchArrowsTask = AddScrollIndicatorArrowPair(&sBagScrollArrowsTemplate, &gBagPositionStruct.unk6);
}
-void sub_81AB89C(void)
+void BagDestroyPocketSwitchArrowPair(void)
{
- if (gBagMenu->unk81F != 0xFF)
+ if (gBagMenu->pocketSwitchArrowsTask != 0xFF)
{
- RemoveScrollIndicatorArrowPair(gBagMenu->unk81F);
- gBagMenu->unk81F = 0xFF;
+ RemoveScrollIndicatorArrowPair(gBagMenu->pocketSwitchArrowsTask);
+ gBagMenu->pocketSwitchArrowsTask = 0xFF;
}
}
@@ -956,11 +1030,11 @@ void TaskCloseBagMenu_2(u8 taskId)
if (!gPaletteFade.active)
{
DestroyListMenuTask(data[0], &gBagPositionStruct.scrollPosition[gBagPositionStruct.pocket], &gBagPositionStruct.cursorPosition[gBagPositionStruct.pocket]);
- if (gBagMenu->mainCallback2 != 0)
- SetMainCallback2(gBagMenu->mainCallback2);
+ if (gBagMenu->exitCallback != NULL)
+ SetMainCallback2(gBagMenu->exitCallback);
else
SetMainCallback2(gBagPositionStruct.bagCallback);
- sub_81AB824();
+ BagDestroyPocketScrollArrowPair();
ResetSpriteData();
FreeAllSpritePalettes();
FreeBagItemListBuffers();
@@ -982,7 +1056,9 @@ void UpdatePocketItemList(u8 pocketId)
CompactItemsInBagPocket(pocket);
break;
}
+
gBagMenu->numItemStacks[pocketId] = 0;
+
for (i = 0; i < pocket->capacity && pocket->itemSlots[i].itemId; i++)
gBagMenu->numItemStacks[pocketId]++;
@@ -995,7 +1071,7 @@ void UpdatePocketItemList(u8 pocketId)
gBagMenu->numShownItems[pocketId] = gBagMenu->numItemStacks[pocketId];
}
-void sub_81ABA6C(void)
+void All_CalculateNItemsAndMaxShowed(void)
{
u8 i;
for (i = 0; i < POCKETS_COUNT; i++)
@@ -1014,7 +1090,7 @@ static void SetPocketListPositions(void)
SetInitialScrollAndCursorPositions(i);
}
-void sub_81ABAE0(void)
+void UpdatePocketScrollPositions(void)
{
u8 i;
for (i = 0; i < POCKETS_COUNT; i++)
@@ -1026,14 +1102,14 @@ u8 GetItemListPosition(u8 pocketId)
return gBagPositionStruct.scrollPosition[pocketId] + gBagPositionStruct.cursorPosition[pocketId];
}
-void DisplayItemMessage(u8 taskId, u8 fontId, const u8 *str, void ( *callback)(u8 taskId))
+void DisplayItemMessage(u8 taskId, u8 fontId, const u8 *str, void (*callback)(u8 taskId))
{
s16* data = gTasks[taskId].data;
data[10] = AddItemMessageWindow(4);
FillWindowPixelBuffer(data[10], PIXEL_FILL(1));
DisplayMessageAndContinueTask(taskId, data[10], 10, 13, fontId, GetPlayerTextSpeedDelay(), str, callback);
- schedule_bg_copy_tilemap_to_vram(1);
+ ScheduleBgCopyTilemapToVram(1);
}
void BagMenu_InitListsMenu(u8 taskId)
@@ -1041,13 +1117,13 @@ void BagMenu_InitListsMenu(u8 taskId)
s16* data = gTasks[taskId].data;
u16* scrollPos = &gBagPositionStruct.scrollPosition[gBagPositionStruct.pocket];
u16* cursorPos = &gBagPositionStruct.cursorPosition[gBagPositionStruct.pocket];
- bag_menu_RemoveBagItem_message_window(4);
+ BagMenu_RemoveBagItemMessageindow(4);
DestroyListMenuTask(data[0], scrollPos, cursorPos);
UpdatePocketItemList(gBagPositionStruct.pocket);
SetInitialScrollAndCursorPositions(gBagPositionStruct.pocket);
LoadBagItemListBuffers(gBagPositionStruct.pocket);
data[0] = ListMenuInit(&gMultiuseListMenuTemplate, *scrollPos, *cursorPos);
- schedule_bg_copy_tilemap_to_vram(0);
+ ScheduleBgCopyTilemapToVram(0);
set_callback3_to_bag(taskId);
}
@@ -1073,99 +1149,100 @@ void PrintItemSoldAmount(int windowId, int numSold, int moneyEarned)
PrintMoneyAmount(windowId, 38, 1, moneyEarned, 0);
}
-void Task_BagMenu(u8 taskId)
+void Task_BagMenu_HandleInput(u8 taskId)
{
s16* data = gTasks[taskId].data;
u16* scrollPos = &gBagPositionStruct.scrollPosition[gBagPositionStruct.pocket];
u16* cursorPos = &gBagPositionStruct.cursorPosition[gBagPositionStruct.pocket];
- u16 select;
- if (sub_81221EC() != TRUE && !gPaletteFade.active)
+ s32 listPosition;
+
+ if (MenuHelpers_CallLinkSomething() != TRUE && !gPaletteFade.active)
{
switch (GetSwitchBagPocketDirection())
{
- case 1:
- SwitchBagPocket(taskId, -1, 0);
+ case SWITCH_POCKET_LEFT:
+ SwitchBagPocket(taskId, MENU_CURSOR_DELTA_LEFT, 0);
return;
- case 2:
- SwitchBagPocket(taskId, 1, 0);
+ case SWITCH_POCKET_RIGHT:
+ SwitchBagPocket(taskId, MENU_CURSOR_DELTA_RIGHT, 0);
return;
- }
- if ((select = (gMain.newKeys & SELECT_BUTTON)))
- {
- if (sub_81AC2C0() == 1)
- {
- ListMenuGetScrollAndRow(data[0], scrollPos, cursorPos);
- if ((*scrollPos + *cursorPos) != gBagMenu->numItemStacks[gBagPositionStruct.pocket] - 1)
+ default:
+ if (gMain.newKeys & SELECT_BUTTON)
{
- PlaySE(SE_SELECT);
- BagMenu_SwapItems(taskId);
+ if (CanSwapItems() == TRUE)
+ {
+ ListMenuGetScrollAndRow(data[0], scrollPos, cursorPos);
+ if ((*scrollPos + *cursorPos) != gBagMenu->numItemStacks[gBagPositionStruct.pocket] - 1)
+ {
+ PlaySE(SE_SELECT);
+ BagMenu_SwapItems(taskId);
+ }
+ }
+ return;
}
- }
- return;
+ break;
}
- else
+
+ listPosition = ListMenu_ProcessInput(data[0]);
+ ListMenuGetScrollAndRow(data[0], scrollPos, cursorPos);
+ switch (listPosition)
{
- int listPosition = ListMenu_ProcessInput(data[0]);
- ListMenuGetScrollAndRow(data[0], scrollPos, cursorPos);
- switch (listPosition)
- {
- case LIST_NOTHING_CHOSEN:
- break;
- case LIST_CANCEL:
- if (gBagPositionStruct.location == 5)
- {
- PlaySE(SE_HAZURE);
- break;
- }
- PlaySE(SE_SELECT);
- gSpecialVar_ItemId = select;
- gTasks[taskId].func = Task_FadeAndCloseBagMenu;
- break;
- default: // A_BUTTON
- PlaySE(SE_SELECT);
- sub_81AB824();
- BagMenu_PrintCursor_(data[0], 2);
- data[1] = listPosition;
- data[2] = BagGetQuantityByPocketPosition(gBagPositionStruct.pocket + 1, listPosition);
- gSpecialVar_ItemId = BagGetItemIdByPocketPosition(gBagPositionStruct.pocket + 1, listPosition);
- gUnknown_08614054[gBagPositionStruct.location](taskId);
+ case LIST_NOTHING_CHOSEN:
+ break;
+ case LIST_CANCEL:
+ if (gBagPositionStruct.location == ITEMMENULOCATION_BERRY_BLENDER_CRUSH)
+ {
+ PlaySE(SE_FAILURE);
break;
- }
+ }
+ PlaySE(SE_SELECT);
+ gSpecialVar_ItemId = ITEM_NONE;
+ gTasks[taskId].func = Task_FadeAndCloseBagMenu;
+ break;
+ default: // A_BUTTON
+ PlaySE(SE_SELECT);
+ BagDestroyPocketScrollArrowPair();
+ BagMenu_PrintCursor_(data[0], 2);
+ data[1] = listPosition;
+ data[2] = BagGetQuantityByPocketPosition(gBagPositionStruct.pocket + 1, listPosition);
+ gSpecialVar_ItemId = BagGetItemIdByPocketPosition(gBagPositionStruct.pocket + 1, listPosition);
+ gUnknown_08614054[gBagPositionStruct.location](taskId);
+ break;
}
}
}
void set_callback3_to_bag(u8 taskId)
{
- bag_menu_add_pocket_scroll_arrow_indicators_maybe();
- bag_menu_add_list_scroll_arrow_indicators_maybe();
+ CreatePocketScrollArrowPair();
+ CreatePocketSwitchArrowPair();
ClearWindowTilemap(3);
ClearWindowTilemap(4);
PutWindowTilemap(1);
- schedule_bg_copy_tilemap_to_vram(0);
- gTasks[taskId].func = Task_BagMenu;
+ ScheduleBgCopyTilemapToVram(0);
+ gTasks[taskId].func = Task_BagMenu_HandleInput;
}
-u8 GetSwitchBagPocketDirection(void)
+static u8 GetSwitchBagPocketDirection(void)
{
u8 LRKeys;
- if (gBagMenu->unk81B != 0)
- return 0;
+ if (gBagMenu->pocketSwitchDisabled)
+ return SWITCH_POCKET_NONE;
LRKeys = GetLRKeysPressed();
if ((gMain.newKeys & DPAD_LEFT) || LRKeys == MENU_L_PRESSED)
{
PlaySE(SE_SELECT);
- return 1;
+ return SWITCH_POCKET_LEFT;
}
if ((gMain.newKeys & DPAD_RIGHT) || LRKeys == MENU_R_PRESSED)
{
PlaySE(SE_SELECT);
- return 2;
+ return SWITCH_POCKET_RIGHT;
}
- return 0;
+ return SWITCH_POCKET_NONE;
}
-void ChangeBagPocketId(u8 *bagPocketId, s8 deltaBagPocketId)
+static void ChangeBagPocketId(u8 *bagPocketId, s8 deltaBagPocketId)
{
if (deltaBagPocketId == 1 && *bagPocketId == POCKETS_COUNT - 1)
*bagPocketId = 0;
@@ -1175,7 +1252,7 @@ void ChangeBagPocketId(u8 *bagPocketId, s8 deltaBagPocketId)
*bagPocketId += deltaBagPocketId;
}
-void SwitchBagPocket(u8 taskId, s16 deltaBagPocketId, u16 a3)
+static void SwitchBagPocket(u8 taskId, s16 deltaBagPocketId, u16 a3)
{
s16* data = gTasks[taskId].data;
u8 pocketId;
@@ -1188,13 +1265,13 @@ void SwitchBagPocket(u8 taskId, s16 deltaBagPocketId, u16 a3)
ClearWindowTilemap(0);
ClearWindowTilemap(1);
DestroyListMenuTask(data[0], &gBagPositionStruct.scrollPosition[gBagPositionStruct.pocket], &gBagPositionStruct.cursorPosition[gBagPositionStruct.pocket]);
- schedule_bg_copy_tilemap_to_vram(0);
- gSprites[gBagMenu->spriteId[2 + (gBagMenu->unk81B_1 ^ 1)]].invisible = TRUE;
- sub_81AB824();
+ ScheduleBgCopyTilemapToVram(0);
+ gSprites[gBagMenu->spriteId[2 + (gBagMenu->itemIconSlot ^ 1)]].invisible = TRUE;
+ BagDestroyPocketScrollArrowPair();
}
pocketId = gBagPositionStruct.pocket;
ChangeBagPocketId(&pocketId, deltaBagPocketId);
- if (deltaBagPocketId == 1)
+ if (deltaBagPocketId == MENU_CURSOR_DELTA_RIGHT)
{
BagMenu_PrintPocketNames(gPocketNamesStringsTable[gBagPositionStruct.pocket], gPocketNamesStringsTable[pocketId]);
BagMenu_CopyPocketNameToWindow(0);
@@ -1204,10 +1281,10 @@ void SwitchBagPocket(u8 taskId, s16 deltaBagPocketId, u16 a3)
BagMenu_PrintPocketNames(gPocketNamesStringsTable[pocketId], gPocketNamesStringsTable[gBagPositionStruct.pocket]);
BagMenu_CopyPocketNameToWindow(8);
}
- BagMenu_DrawPocketIndicatorSquare(gBagPositionStruct.pocket, 0);
- BagMenu_DrawPocketIndicatorSquare(pocketId, 1);
+ DrawPocketIndicatorSquare(gBagPositionStruct.pocket, FALSE);
+ DrawPocketIndicatorSquare(pocketId, TRUE);
FillBgTilemapBufferRect_Palette0(2, 11, 14, 2, 15, 16);
- schedule_bg_copy_tilemap_to_vram(2);
+ ScheduleBgCopyTilemapToVram(2);
SetBagVisualPocketId(pocketId, 1);
RemoveBagSprite(1);
AddSwitchPocketRotatingBallSprite(deltaBagPocketId);
@@ -1218,19 +1295,19 @@ void sub_81AC10C(u8 taskId)
{
s16* data = gTasks[taskId].data;
- if (!sub_81221AC() && !IsWallysBag())
+ if (!MenuHelpers_LinkSomething() && !IsWallysBag())
{
switch (GetSwitchBagPocketDirection())
{
- case 1:
+ case SWITCH_POCKET_LEFT:
ChangeBagPocketId(&gBagPositionStruct.pocket, data[11]);
SwitchTaskToFollowupFunc(taskId);
- SwitchBagPocket(taskId, -1, 1);
+ SwitchBagPocket(taskId, MENU_CURSOR_DELTA_LEFT, 1);
return;
- case 2:
+ case SWITCH_POCKET_RIGHT:
ChangeBagPocketId(&gBagPositionStruct.pocket, data[11]);
SwitchTaskToFollowupFunc(taskId);
- SwitchBagPocket(taskId, 1, 1);
+ SwitchBagPocket(taskId, MENU_CURSOR_DELTA_RIGHT, 1);
return;
}
}
@@ -1254,9 +1331,9 @@ void sub_81AC10C(u8 taskId)
data[0] = ListMenuInit(&gMultiuseListMenuTemplate, gBagPositionStruct.scrollPosition[gBagPositionStruct.pocket], gBagPositionStruct.cursorPosition[gBagPositionStruct.pocket]);
PutWindowTilemap(1);
PutWindowTilemap(2);
- schedule_bg_copy_tilemap_to_vram(0);
- bag_menu_add_pocket_scroll_arrow_indicators_maybe();
- bag_menu_add_list_scroll_arrow_indicators_maybe();
+ ScheduleBgCopyTilemapToVram(0);
+ CreatePocketScrollArrowPair();
+ CreatePocketSwitchArrowPair();
SwitchTaskToFollowupFunc(taskId);
}
}
@@ -1264,21 +1341,21 @@ void sub_81AC10C(u8 taskId)
void sub_81AC23C(u8 a)
{
FillBgTilemapBufferRect_Palette0(2, 17, 14, a + 2, 15, 1);
- schedule_bg_copy_tilemap_to_vram(2);
+ ScheduleBgCopyTilemapToVram(2);
}
-void BagMenu_DrawPocketIndicatorSquare(u8 x, u8 is_current_bag)
+static void DrawPocketIndicatorSquare(u8 x, bool8 isCurrentPocket)
{
- if (is_current_bag == 0)
+ if (!isCurrentPocket)
FillBgTilemapBufferRect_Palette0(2, 0x1017, x + 5, 3, 1, 1);
else
FillBgTilemapBufferRect_Palette0(2, 0x102B, x + 5, 3, 1, 1);
- schedule_bg_copy_tilemap_to_vram(2);
+ ScheduleBgCopyTilemapToVram(2);
}
-bool8 sub_81AC2C0(void)
+static bool8 CanSwapItems(void)
{
- if (gBagPositionStruct.location <= 1)
+ if (gBagPositionStruct.location <= ITEMMENULOCATION_BATTLE)
{
u8 temp = gBagPositionStruct.pocket - 2;
if (temp > 1)
@@ -1293,23 +1370,23 @@ void BagMenu_SwapItems(u8 taskId)
ListMenuSetUnkIndicatorsStructField(data[0], 16, 1);
data[1] = gBagPositionStruct.scrollPosition[gBagPositionStruct.pocket] + gBagPositionStruct.cursorPosition[gBagPositionStruct.pocket];
- gBagMenu->unk81A = data[1];
+ gBagMenu->itemOriginalLocation = data[1];
CopyItemName(BagGetItemIdByPocketPosition(gBagPositionStruct.pocket + 1, data[1]), gStringVar1);
StringExpandPlaceholders(gStringVar4, gText_MoveVar1Where);
FillWindowPixelBuffer(1, PIXEL_FILL(0));
BagMenu_Print(1, 1, gStringVar4, 3, 1, 0, 0, 0, 0);
sub_80D4FEC(data[1]);
- sub_81AB89C();
+ BagDestroyPocketSwitchArrowPair();
BagMenu_PrintCursor_(data[0], 2);
- gTasks[taskId].func = sub_81AC3C0;
+ gTasks[taskId].func = Task_HandleSwappingItemsInput;
}
-void sub_81AC3C0(u8 taskId)
+static void Task_HandleSwappingItemsInput(u8 taskId)
{
s16* data = gTasks[taskId].data;
int input;
- if (sub_81221EC() != TRUE)
+ if (MenuHelpers_CallLinkSomething() != TRUE)
{
if (gMain.newKeys & SELECT_BUTTON)
{
@@ -1354,15 +1431,15 @@ void sub_81AC498(u8 taskId)
else
{
MoveItemSlotInList(gBagPockets[gBagPositionStruct.pocket].itemSlots, data[1], realPos);
- gBagMenu->unk81A = -1;
+ gBagMenu->itemOriginalLocation = -1;
DestroyListMenuTask(data[0], scrollPos, cursorPos);
if (data[1] < realPos)
gBagPositionStruct.cursorPosition[gBagPositionStruct.pocket]--;
LoadBagItemListBuffers(gBagPositionStruct.pocket);
data[0] = ListMenuInit(&gMultiuseListMenuTemplate, *scrollPos, *cursorPos);
sub_80D4FC8(1);
- bag_menu_add_list_scroll_arrow_indicators_maybe();
- gTasks[taskId].func = Task_BagMenu;
+ CreatePocketSwitchArrowPair();
+ gTasks[taskId].func = Task_BagMenu_HandleInput;
}
}
@@ -1372,90 +1449,90 @@ void sub_81AC590(u8 taskId)
u16* scrollPos = &gBagPositionStruct.scrollPosition[gBagPositionStruct.pocket];
u16* cursorPos = &gBagPositionStruct.cursorPosition[gBagPositionStruct.pocket];
- gBagMenu->unk81A = -1;
+ gBagMenu->itemOriginalLocation = -1;
DestroyListMenuTask(data[0], scrollPos, cursorPos);
if (data[1] < (*scrollPos + *cursorPos))
gBagPositionStruct.cursorPosition[gBagPositionStruct.pocket]--;
LoadBagItemListBuffers(gBagPositionStruct.pocket);
data[0] = ListMenuInit(&gMultiuseListMenuTemplate, *scrollPos, *cursorPos);
sub_80D4FC8(1);
- bag_menu_add_list_scroll_arrow_indicators_maybe();
- gTasks[taskId].func = Task_BagMenu;
+ CreatePocketSwitchArrowPair();
+ gTasks[taskId].func = Task_BagMenu_HandleInput;
}
-void sub_81AC644(u8 unused)
+void OpenContextMenu(u8 unused)
{
- switch (gBagPositionStruct.location - 1)
+ switch (gBagPositionStruct.location)
{
- case 0:
- case 9:
+ case ITEMMENULOCATION_BATTLE:
+ case ITEMMENULOCATION_WALLY:
if (ItemId_GetBattleUsage(gSpecialVar_ItemId))
{
- gBagMenu->unk820 = gUnknown_08614042;
- gBagMenu->unk828 = 2;
+ gBagMenu->contextMenuItemsPtr = sContextMenuItems_BattleUse;
+ gBagMenu->contextMenuNumItems = ARRAY_COUNT(sContextMenuItems_BattleUse);
}
else
{
- gBagMenu->unk820 = &gUnknown_08614046;
- gBagMenu->unk828 = 1;
+ gBagMenu->contextMenuItemsPtr = sContextMenuItems_Cancel;
+ gBagMenu->contextMenuNumItems = ARRAY_COUNT(sContextMenuItems_Cancel);
}
break;
- case 4:
- gBagMenu->unk820 = gUnknown_08614047;
- gBagMenu->unk828 = 4;
+ case ITEMMENULOCATION_BERRY_BLENDER_CRUSH:
+ gBagMenu->contextMenuItemsPtr = sContextMenuItems_BerryBlenderCrush;
+ gBagMenu->contextMenuNumItems = ARRAY_COUNT(sContextMenuItems_BerryBlenderCrush);
break;
- case 8:
+ case ITEMMENULOCATION_APPRENTICE:
if (!ItemId_GetImportance(gSpecialVar_ItemId) && gSpecialVar_ItemId != ITEM_ENIGMA_BERRY)
{
- gBagMenu->unk820 = gUnknown_0861404B;
- gBagMenu->unk828 = 2;
+ gBagMenu->contextMenuItemsPtr = sContextMenuItems_Apprentice;
+ gBagMenu->contextMenuNumItems = ARRAY_COUNT(sContextMenuItems_Apprentice);
}
else
{
- gBagMenu->unk820 = &gUnknown_08614046;
- gBagMenu->unk828 = 1;
+ gBagMenu->contextMenuItemsPtr = sContextMenuItems_Cancel;
+ gBagMenu->contextMenuNumItems = ARRAY_COUNT(sContextMenuItems_Cancel);
}
break;
- case 6:
+ case ITEMMENULOCATION_FAVOR_LADY:
if (!ItemId_GetImportance(gSpecialVar_ItemId) && gSpecialVar_ItemId != ITEM_ENIGMA_BERRY)
{
- gBagMenu->unk820 = gUnknown_0861404D;
- gBagMenu->unk828 = 2;
+ gBagMenu->contextMenuItemsPtr = sContextMenuItems_FavorLady;
+ gBagMenu->contextMenuNumItems = ARRAY_COUNT(sContextMenuItems_FavorLady);
}
else
{
- gBagMenu->unk820 = &gUnknown_08614046;
- gBagMenu->unk828 = 1;
+ gBagMenu->contextMenuItemsPtr = sContextMenuItems_Cancel;
+ gBagMenu->contextMenuNumItems = ARRAY_COUNT(sContextMenuItems_Cancel);
}
break;
- case 7:
+ case ITEMMENULOCATION_QUIZ_LADY:
if (!ItemId_GetImportance(gSpecialVar_ItemId) && gSpecialVar_ItemId != ITEM_ENIGMA_BERRY)
{
- gBagMenu->unk820 = gUnknown_0861404F;
- gBagMenu->unk828 = 2;
+ gBagMenu->contextMenuItemsPtr = sContextMenuItems_QuizLady;
+ gBagMenu->contextMenuNumItems = ARRAY_COUNT(sContextMenuItems_QuizLady);
}
else
{
- gBagMenu->unk820 = &gUnknown_08614046;
- gBagMenu->unk828 = 1;
+ gBagMenu->contextMenuItemsPtr = sContextMenuItems_Cancel;
+ gBagMenu->contextMenuNumItems = ARRAY_COUNT(sContextMenuItems_Cancel);
}
break;
- case 1:
- case 2:
- case 3:
- case 5:
+ case ITEMMENULOCATION_PARTY:
+ case ITEMMENULOCATION_SHOP:
+ case ITEMMENULOCATION_BERRY_TREE:
+ case ITEMMENULOCATION_ITEMPC:
default:
- if (sub_81221AC() == TRUE || InUnionRoom() == TRUE)
+ if (MenuHelpers_LinkSomething() == TRUE || InUnionRoom() == TRUE)
{
if (gBagPositionStruct.pocket == KEYITEMS_POCKET || !sub_8122148(gSpecialVar_ItemId))
{
- gBagMenu->unk820 = &gUnknown_08614046;
- gBagMenu->unk828 = 1;
+ gBagMenu->contextMenuItemsPtr = sContextMenuItems_Cancel;
+ gBagMenu->contextMenuNumItems = ARRAY_COUNT(sContextMenuItems_Cancel);
}
else
{
- gBagMenu->unk820 = gUnknown_08614044;
- gBagMenu->unk828 = 2;
+ gBagMenu->contextMenuItemsPtr = sContextMenuItems_Give;
+ gBagMenu->contextMenuNumItems = ARRAY_COUNT(sContextMenuItems_Give);
}
}
else
@@ -1463,35 +1540,35 @@ void sub_81AC644(u8 unused)
switch (gBagPositionStruct.pocket)
{
case ITEMS_POCKET:
- gBagMenu->unk820 = &gBagMenu->unk824;
- gBagMenu->unk828 = 4;
- memcpy(&gBagMenu->unk824, &gUnknown_0861402C, 4);
+ gBagMenu->contextMenuItemsPtr = gBagMenu->contextMenuItemsBuffer;
+ gBagMenu->contextMenuNumItems = ARRAY_COUNT(sContextMenuItems_ItemsPocket);
+ memcpy(&gBagMenu->contextMenuItemsBuffer, &sContextMenuItems_ItemsPocket, sizeof(sContextMenuItems_ItemsPocket));
if (ItemIsMail(gSpecialVar_ItemId) == TRUE)
- gBagMenu->unk824 = 6;
+ gBagMenu->contextMenuItemsBuffer[0] = ITEMMENUACTION_CHECK;
break;
case KEYITEMS_POCKET:
- gBagMenu->unk820 = &gBagMenu->unk824;
- gBagMenu->unk828 = 4;
- memcpy(&gBagMenu->unk824, &gUnknown_08614030, 4);
+ gBagMenu->contextMenuItemsPtr = gBagMenu->contextMenuItemsBuffer;
+ gBagMenu->contextMenuNumItems = ARRAY_COUNT(sContextMenuItems_KeyItemsPocket);
+ memcpy(&gBagMenu->contextMenuItemsBuffer, &sContextMenuItems_KeyItemsPocket, sizeof(sContextMenuItems_KeyItemsPocket));
if (gSaveBlock1Ptr->registeredItem == gSpecialVar_ItemId)
- gBagMenu->unk825 = 8;
+ gBagMenu->contextMenuItemsBuffer[1] = ITEMMENUACTION_DESELECT;
if (gSpecialVar_ItemId == ITEM_MACH_BIKE || gSpecialVar_ItemId == ITEM_ACRO_BIKE)
{
- if (TestPlayerAvatarFlags(6))
- gBagMenu->unk824 = 7;
+ if (TestPlayerAvatarFlags(PLAYER_AVATAR_FLAG_MACH_BIKE | PLAYER_AVATAR_FLAG_ACRO_BIKE))
+ gBagMenu->contextMenuItemsBuffer[0] = ITEMMENUACTION_WALK;
}
break;
case BALLS_POCKET:
- gBagMenu->unk820 = gUnknown_08614034;
- gBagMenu->unk828 = 4;
+ gBagMenu->contextMenuItemsPtr = sContextMenuItems_BallsPocket;
+ gBagMenu->contextMenuNumItems = ARRAY_COUNT(sContextMenuItems_BallsPocket);
break;
case TMHM_POCKET:
- gBagMenu->unk820 = gUnknown_08614038;
- gBagMenu->unk828 = 4;
+ gBagMenu->contextMenuItemsPtr = sContextMenuItems_TmHmPocket;
+ gBagMenu->contextMenuNumItems = ARRAY_COUNT(sContextMenuItems_TmHmPocket);
break;
case BERRIES_POCKET:
- gBagMenu->unk820 = gUnknown_0861403C;
- gBagMenu->unk828 = 6;
+ gBagMenu->contextMenuItemsPtr = sContextMenuItems_BerriesPocket;
+ gBagMenu->contextMenuNumItems = ARRAY_COUNT(sContextMenuItems_BerriesPocket);
break;
}
}
@@ -1502,7 +1579,7 @@ void sub_81AC644(u8 unused)
PrintTMHMMoveData(gSpecialVar_ItemId);
PutWindowTilemap(3);
PutWindowTilemap(4);
- schedule_bg_copy_tilemap_to_vram(0);
+ ScheduleBgCopyTilemapToVram(0);
}
else
{
@@ -1511,11 +1588,11 @@ void sub_81AC644(u8 unused)
FillWindowPixelBuffer(1, PIXEL_FILL(0));
BagMenu_Print(1, 1, gStringVar4, 3, 1, 0, 0, 0, 0);
}
- if (gBagMenu->unk828 == 1)
+ if (gBagMenu->contextMenuNumItems == 1)
sub_81ACAF8(BagMenu_AddWindow(0));
- else if (gBagMenu->unk828 == 2)
+ else if (gBagMenu->contextMenuNumItems == 2)
sub_81ACAF8(BagMenu_AddWindow(1));
- else if (gBagMenu->unk828 == 4)
+ else if (gBagMenu->contextMenuNumItems == 4)
sub_81ACB54(BagMenu_AddWindow(2), 2, 2);
else
sub_81ACB54(BagMenu_AddWindow(3), 2, 3);
@@ -1523,20 +1600,20 @@ void sub_81AC644(u8 unused)
void sub_81ACAF8(u8 a)
{
- AddItemMenuActionTextPrinters(a, 7, 8, 1, 0, 16, gBagMenu->unk828, sItemMenuActions, gBagMenu->unk820);
- InitMenuInUpperLeftCornerPlaySoundWhenAPressed(a, gBagMenu->unk828, 0);
+ AddItemMenuActionTextPrinters(a, 7, 8, 1, 0, 16, gBagMenu->contextMenuNumItems, sItemMenuActions, gBagMenu->contextMenuItemsPtr);
+ InitMenuInUpperLeftCornerPlaySoundWhenAPressed(a, gBagMenu->contextMenuNumItems, 0);
}
void sub_81ACB54(u8 a, u8 b, u8 c)
{
- sub_8198DBC(a, 7, 8, 1, 0x38, b, c, sItemMenuActions, gBagMenu->unk820);
+ sub_8198DBC(a, 7, 8, 1, 0x38, b, c, sItemMenuActions, gBagMenu->contextMenuItemsPtr);
sub_8199944(a, 0x38, b, c, 0);
}
-void unknown_item_menu_type(u8 taskId)
+void Task_ItemContext_FieldOrBattle(u8 taskId)
{
- sub_81AC644(taskId);
- if (gBagMenu->unk828 <= 2)
+ OpenContextMenu(taskId);
+ if (gBagMenu->contextMenuNumItems <= 2)
gTasks[taskId].func = Task_HandleInBattleItemMenuInput;
else
gTasks[taskId].func = Task_HandleOutOfBattleItemMenuInput;
@@ -1544,20 +1621,20 @@ void unknown_item_menu_type(u8 taskId)
void Task_HandleInBattleItemMenuInput(u8 taskId)
{
- if (sub_81221EC() != TRUE)
+ if (MenuHelpers_CallLinkSomething() != TRUE)
{
- s8 r4 = Menu_ProcessInputNoWrap();
- switch (r4)
+ s8 selection = Menu_ProcessInputNoWrap();
+ switch (selection)
{
case MENU_NOTHING_CHOSEN:
break;
case MENU_B_PRESSED:
PlaySE(SE_SELECT);
- sItemMenuActions[4].func.void_u8(taskId);
+ sItemMenuActions[ITEMMENUACTION_CANCEL].func.void_u8(taskId);
break;
default:
PlaySE(SE_SELECT);
- sItemMenuActions[gBagMenu->unk820[r4]].func.void_u8(taskId);
+ sItemMenuActions[gBagMenu->contextMenuItemsPtr[selection]].func.void_u8(taskId);
break;
}
}
@@ -1565,7 +1642,7 @@ void Task_HandleInBattleItemMenuInput(u8 taskId)
void Task_HandleOutOfBattleItemMenuInput(u8 taskId)
{
- if (sub_81221EC() != TRUE)
+ if (MenuHelpers_CallLinkSomething() != TRUE)
{
s8 cursorPos = Menu_GetCursorPos();
if (gMain.newKeys & DPAD_UP)
@@ -1573,15 +1650,15 @@ void Task_HandleOutOfBattleItemMenuInput(u8 taskId)
if (cursorPos > 0 && sub_81ACDFC(cursorPos - 2))
{
PlaySE(SE_SELECT);
- sub_8199134(0, -1);
+ ChangeListMenuCursorPosition(MENU_CURSOR_DELTA_NONE, MENU_CURSOR_DELTA_UP);
}
}
else if (gMain.newKeys & DPAD_DOWN)
{
- if (cursorPos < (gBagMenu->unk828 - 2) && sub_81ACDFC(cursorPos + 2))
+ if (cursorPos < (gBagMenu->contextMenuNumItems - 2) && sub_81ACDFC(cursorPos + 2))
{
PlaySE(SE_SELECT);
- sub_8199134(0, 1);
+ ChangeListMenuCursorPosition(MENU_CURSOR_DELTA_NONE, MENU_CURSOR_DELTA_DOWN);
}
}
else if ((gMain.newKeys & DPAD_LEFT) || GetLRKeysPressed() == MENU_L_PRESSED)
@@ -1589,7 +1666,7 @@ void Task_HandleOutOfBattleItemMenuInput(u8 taskId)
if ((cursorPos & 1) && sub_81ACDFC(cursorPos - 1))
{
PlaySE(SE_SELECT);
- sub_8199134(-1, 0);
+ ChangeListMenuCursorPosition(MENU_CURSOR_DELTA_LEFT, MENU_CURSOR_DELTA_NONE);
}
}
else if ((gMain.newKeys & DPAD_RIGHT) || GetLRKeysPressed() == MENU_R_PRESSED)
@@ -1597,18 +1674,18 @@ void Task_HandleOutOfBattleItemMenuInput(u8 taskId)
if (!(cursorPos & 1) && sub_81ACDFC(cursorPos + 1))
{
PlaySE(SE_SELECT);
- sub_8199134(1, 0);
+ ChangeListMenuCursorPosition(MENU_CURSOR_DELTA_RIGHT, MENU_CURSOR_DELTA_NONE);
}
}
else if (gMain.newKeys & A_BUTTON)
{
PlaySE(SE_SELECT);
- sItemMenuActions[gBagMenu->unk820[cursorPos]].func.void_u8(taskId);
+ sItemMenuActions[gBagMenu->contextMenuItemsPtr[cursorPos]].func.void_u8(taskId);
}
else if (gMain.newKeys & B_BUTTON)
{
PlaySE(SE_SELECT);
- sItemMenuActions[4].func.void_u8(taskId);
+ sItemMenuActions[ITEMMENUACTION_CANCEL].func.void_u8(taskId);
}
}
}
@@ -1617,22 +1694,22 @@ bool8 sub_81ACDFC(s8 a)
{
if (a < 0)
return FALSE;
- if (a > gBagMenu->unk828)
+ if (a > gBagMenu->contextMenuNumItems)
return FALSE;
- if (gBagMenu->unk820[a] == 14)
+ if (gBagMenu->contextMenuItemsPtr[a] == 14)
return FALSE;
return TRUE;
}
void BagMenu_RemoveSomeWindow(void)
{
- if (gBagMenu->unk828 == 1)
+ if (gBagMenu->contextMenuNumItems == 1)
BagMenu_RemoveWindow(0);
- else if (gBagMenu->unk828 == 2)
+ else if (gBagMenu->contextMenuNumItems == 2)
{
BagMenu_RemoveWindow(1);
}
- else if (gBagMenu->unk828 == 4)
+ else if (gBagMenu->contextMenuNumItems == 4)
{
BagMenu_RemoveWindow(2);
}
@@ -1650,7 +1727,7 @@ void ItemMenu_UseOutOfBattle(u8 taskId)
else
{
FillWindowPixelBuffer(1, PIXEL_FILL(0));
- schedule_bg_copy_tilemap_to_vram(0);
+ ScheduleBgCopyTilemapToVram(0);
if (gBagPositionStruct.pocket != BERRIES_POCKET)
ItemId_GetFieldFunc(gSpecialVar_ItemId)(taskId);
else
@@ -1707,7 +1784,7 @@ void Task_ChooseHowManyToToss(u8 taskId)
if (AdjustQuantityAccordingToDPadInput(&tItemCount, data[2]) == TRUE)
{
- PrintItemDepositAmount(gBagMenu->unk817, tItemCount);
+ PrintItemDepositAmount(gBagMenu->windowPointers[7], tItemCount);
}
else if (gMain.newKeys & A_BUTTON)
{
@@ -1750,7 +1827,7 @@ void Task_ActuallyToss(u8 taskId)
SetInitialScrollAndCursorPositions(gBagPositionStruct.pocket);
LoadBagItemListBuffers(gBagPositionStruct.pocket);
data[0] = ListMenuInit(&gMultiuseListMenuTemplate, *scrollPos, *cursorPos);
- schedule_bg_copy_tilemap_to_vram(0);
+ ScheduleBgCopyTilemapToVram(0);
set_callback3_to_bag(taskId);
}
}
@@ -1768,7 +1845,7 @@ void ItemMenu_Register(u8 taskId)
DestroyListMenuTask(data[0], scrollPos, cursorPos);
LoadBagItemListBuffers(gBagPositionStruct.pocket);
data[0] = ListMenuInit(&gMultiuseListMenuTemplate, *scrollPos, *cursorPos);
- schedule_bg_copy_tilemap_to_vram(0);
+ ScheduleBgCopyTilemapToVram(0);
ItemMenu_Cancel(taskId);
}
@@ -1785,7 +1862,7 @@ void ItemMenu_Give(u8 taskId)
BagMenu_PrintThereIsNoPokemon(taskId);
else
{
- gBagMenu->mainCallback2 = CB2_ChooseMonToGiveItem;
+ gBagMenu->exitCallback = CB2_ChooseMonToGiveItem;
Task_FadeAndCloseBagMenu(taskId);
}
}
@@ -1800,7 +1877,7 @@ void BagMenu_PrintThereIsNoPokemon(u8 taskId)
DisplayItemMessage(taskId, 1, gText_NoPokemon, sub_81AD350);
}
-void BagMenu_PrintItemCantBeHeld(u8 taskId)
+static void BagMenu_PrintItemCantBeHeld(u8 taskId)
{
CopyItemName(gSpecialVar_ItemId, gStringVar1);
StringExpandPlaceholders(gStringVar4, gText_Var1CantBeHeld);
@@ -1818,7 +1895,7 @@ void sub_81AD350(u8 taskId)
void ItemMenu_CheckTag(u8 taskId)
{
- gBagMenu->mainCallback2 = DoBerryTagScreen;
+ gBagMenu->exitCallback = DoBerryTagScreen;
Task_FadeAndCloseBagMenu(taskId);
}
@@ -1828,8 +1905,8 @@ void ItemMenu_Cancel(u8 taskId)
BagMenu_RemoveSomeWindow();
BagMenu_PrintDescription(data[1]);
- schedule_bg_copy_tilemap_to_vram(0);
- schedule_bg_copy_tilemap_to_vram(1);
+ ScheduleBgCopyTilemapToVram(0);
+ ScheduleBgCopyTilemapToVram(1);
BagMenu_PrintCursor_(data[0], 0);
set_callback3_to_bag(taskId);
}
@@ -1845,10 +1922,10 @@ void ItemMenu_UseInBattle(u8 taskId)
void CB2_ReturnToBagMenuPocket(void)
{
- GoToBagMenu(RETURN_LOCATION_UNCHANGED, POCKETS_COUNT, NULL);
+ GoToBagMenu(ITEMMENULOCATION_LAST, POCKETS_COUNT, NULL);
}
-void item_menu_type_2(u8 taskId)
+void Task_ItemContext_FieldGive(u8 taskId)
{
if (!itemid_80BF6D8_mail_related(gSpecialVar_ItemId))
{
@@ -1870,7 +1947,7 @@ void item_menu_type_2(u8 taskId)
}
}
-void item_menu_type_b(u8 taskId)
+void Task_ItemContext_ItemPC_2(u8 taskId)
{
if (ItemIsMail(gSpecialVar_ItemId) == TRUE)
DisplayItemMessage(taskId, 1, gText_CantWriteMail, sub_81AD350);
@@ -1914,7 +1991,7 @@ bool8 UseRegisteredKeyItemOnField(void)
#undef tUsingRegisteredKeyItem
-void DisplaySellItemAskString(u8 taskId)
+void Task_ItemContext_Sell(u8 taskId)
{
s16* data = gTasks[taskId].data;
@@ -1941,7 +2018,7 @@ void DisplaySellItemAskString(u8 taskId)
}
}
-void DisplaySellItemPriceAndConfirm(u8 taskId)
+static void DisplaySellItemPriceAndConfirm(u8 taskId)
{
s16* data = gTasks[taskId].data;
@@ -1959,8 +2036,8 @@ void BagMenu_CancelSell(u8 taskId)
{
s16* data = gTasks[taskId].data;
- bag_menu_remove_money_window();
- bag_menu_RemoveBagItem_message_window(4);
+ RemoveMoneyWindow();
+ BagMenu_RemoveBagItemMessageindow(4);
BagMenu_PrintCursor_(data[0], 0);
set_callback3_to_bag(taskId);
}
@@ -1972,16 +2049,16 @@ void sub_81AD730(u8 taskId)
PrintItemSoldAmount(windowId, 1, (ItemId_GetPrice(gSpecialVar_ItemId) / 2) * tItemCount);
DisplayCurrentMoneyWindow();
- gTasks[taskId].func = Task_BuyHowManyDialogueHandleInput;
+ gTasks[taskId].func = Task_SellHowManyDialogueHandleInput;
}
-void Task_BuyHowManyDialogueHandleInput(u8 taskId)
+static void Task_SellHowManyDialogueHandleInput(u8 taskId)
{
s16* data = gTasks[taskId].data;
if (AdjustQuantityAccordingToDPadInput(&tItemCount, data[2]) == TRUE)
{
- PrintItemSoldAmount(gBagMenu->unk818, tItemCount, (ItemId_GetPrice(gSpecialVar_ItemId) / 2) * tItemCount);
+ PrintItemSoldAmount(gBagMenu->windowPointers[8], tItemCount, (ItemId_GetPrice(gSpecialVar_ItemId) / 2) * tItemCount);
}
else if (gMain.newKeys & A_BUTTON)
{
@@ -1993,9 +2070,9 @@ void Task_BuyHowManyDialogueHandleInput(u8 taskId)
{
PlaySE(SE_SELECT);
BagMenu_PrintCursor_(data[0], 0);
- bag_menu_remove_money_window();
+ RemoveMoneyWindow();
BagMenu_RemoveWindow(8);
- bag_menu_RemoveBagItem_message_window(4);
+ BagMenu_RemoveBagItemMessageindow(4);
set_callback3_to_bag(taskId);
}
}
@@ -2007,16 +2084,16 @@ void BagMenu_ConfirmSell(u8 taskId)
CopyItemName(gSpecialVar_ItemId, gStringVar2);
ConvertIntToDecimalStringN(gStringVar1, (ItemId_GetPrice(gSpecialVar_ItemId) / 2) * tItemCount, STR_CONV_MODE_LEFT_ALIGN, 6);
StringExpandPlaceholders(gStringVar4, gText_TurnedOverVar1ForVar2);
- DisplayItemMessage(taskId, 1, gStringVar4, sub_81AD8C8);
+ DisplayItemMessage(taskId, 1, gStringVar4, BagMenu_Sell_UpdateItemListAndMoney);
}
-void sub_81AD8C8(u8 taskId)
+static void BagMenu_Sell_UpdateItemListAndMoney(u8 taskId)
{
s16* data = gTasks[taskId].data;
u16* scrollPos = &gBagPositionStruct.scrollPosition[gBagPositionStruct.pocket];
u16* cursorPos = &gBagPositionStruct.cursorPosition[gBagPositionStruct.pocket];
- PlaySE(SE_REGI);
+ PlaySE(SE_SHOP);
RemoveBagItem(gSpecialVar_ItemId, tItemCount);
AddMoney(&gSaveBlock1Ptr->money, (ItemId_GetPrice(gSpecialVar_ItemId) / 2) * tItemCount);
DestroyListMenuTask(data[0], scrollPos, cursorPos);
@@ -2025,28 +2102,28 @@ void sub_81AD8C8(u8 taskId)
LoadBagItemListBuffers(gBagPositionStruct.pocket);
data[0] = ListMenuInit(&gMultiuseListMenuTemplate, *scrollPos, *cursorPos);
BagMenu_PrintCursor_(data[0], 2);
- PrintMoneyAmountInMoneyBox(gBagMenu->unk819, GetMoney(&gSaveBlock1Ptr->money), 0);
- gTasks[taskId].func = sub_81AD9C0;
+ PrintMoneyAmountInMoneyBox(gBagMenu->windowPointers[9], GetMoney(&gSaveBlock1Ptr->money), 0);
+ gTasks[taskId].func = BagMenu_Sell_WaitForABPress;
}
-void sub_81AD9C0(u8 taskId)
+static void BagMenu_Sell_WaitForABPress(u8 taskId)
{
if (gMain.newKeys & (A_BUTTON | B_BUTTON))
{
PlaySE(SE_SELECT);
- bag_menu_remove_money_window();
+ RemoveMoneyWindow();
BagMenu_InitListsMenu(taskId);
}
}
-void DisplayDepositItemAskString(u8 taskId)
+void Task_ItemContext_Deposit(u8 taskId)
{
s16* data = gTasks[taskId].data;
tItemCount = 1;
if (data[2] == 1)
{
- sub_81ADB14(taskId);
+ BagMenu_TryDepositItem(taskId);
}
else
{
@@ -2055,23 +2132,23 @@ void DisplayDepositItemAskString(u8 taskId)
FillWindowPixelBuffer(1, PIXEL_FILL(0));
BagMenu_Print(1, 1, gStringVar4, 3, 1, 0, 0, 0, 0);
sub_81ABC3C(7);
- gTasks[taskId].func = sub_81ADA7C;
+ gTasks[taskId].func = Task_ChooseHowManyToDeposit;
}
}
-void sub_81ADA7C(u8 taskId)
+static void Task_ChooseHowManyToDeposit(u8 taskId)
{
s16* data = gTasks[taskId].data;
if (AdjustQuantityAccordingToDPadInput(&tItemCount, data[2]) == TRUE)
{
- PrintItemDepositAmount(gBagMenu->unk817, tItemCount);
+ PrintItemDepositAmount(gBagMenu->windowPointers[7], tItemCount);
}
else if (gMain.newKeys & A_BUTTON)
{
PlaySE(SE_SELECT);
BagMenu_RemoveWindow(7);
- sub_81ADB14(taskId);
+ BagMenu_TryDepositItem(taskId);
}
else if (gMain.newKeys & B_BUTTON)
{
@@ -2083,7 +2160,7 @@ void sub_81ADA7C(u8 taskId)
}
}
-void sub_81ADB14(u8 taskId)
+static void BagMenu_TryDepositItem(u8 taskId)
{
s16* data = gTasks[taskId].data;
@@ -2091,7 +2168,7 @@ void sub_81ADB14(u8 taskId)
if (ItemId_GetImportance(gSpecialVar_ItemId))
{
BagMenu_Print(1, 1, gText_CantStoreImportantItems, 3, 1, 0, 0, 0, 0);
- gTasks[taskId].func = sub_81ADC0C;
+ gTasks[taskId].func = BagMenu_Deposit_WaitForABPress;
}
else if (AddPCItem(gSpecialVar_ItemId, tItemCount) == TRUE)
{
@@ -2104,11 +2181,11 @@ void sub_81ADB14(u8 taskId)
else
{
BagMenu_Print(1, 1, gText_NoRoomForItems, 3, 1, 0, 0, 0, 0);
- gTasks[taskId].func = sub_81ADC0C;
+ gTasks[taskId].func = BagMenu_Deposit_WaitForABPress;
}
}
-void sub_81ADC0C(u8 taskId)
+static void BagMenu_Deposit_WaitForABPress(u8 taskId)
{
s16* data = gTasks[taskId].data;
@@ -2166,7 +2243,7 @@ void DoWallyTutorialBagMenu(void)
PrepareBagForWallyTutorial();
AddBagItem(ITEM_POTION, 1);
AddBagItem(ITEM_POKE_BALL, 1);
- GoToBagMenu(RETURN_LOCATION_BATTLE_2, ITEMS_POCKET, CB2_SetUpReshowBattleScreenAfterMenu2);
+ GoToBagMenu(ITEMMENULOCATION_WALLY, ITEMS_POCKET, CB2_SetUpReshowBattleScreenAfterMenu2);
}
void Task_WallyTutorialBagMenu(u8 taskId)
@@ -2179,14 +2256,14 @@ void Task_WallyTutorialBagMenu(u8 taskId)
{
case 0x66:
PlaySE(SE_SELECT);
- SwitchBagPocket(taskId, 1, 0);
+ SwitchBagPocket(taskId, MENU_CURSOR_DELTA_RIGHT, 0);
data[8]++;
break;
case 0xCC:
PlaySE(SE_SELECT);
BagMenu_PrintCursor_(data[0], 2);
gSpecialVar_ItemId = ITEM_POKE_BALL;
- sub_81AC644(taskId);
+ OpenContextMenu(taskId);
data[8]++;
break;
case 0x132:
@@ -2286,92 +2363,92 @@ void SetupBagMenu_Textboxes(void)
{
u8 i;
- InitWindows(gUnknown_08614174);
+ InitWindows(sDefaultBagWindows);
DeactivateAllTextPrinters();
LoadUserWindowBorderGfx(0, 1, 0xE0);
LoadMessageBoxGfx(0, 10, 0xD0);
- sub_819A2BC(0xC0, 1);
+ ListMenuLoadStdPalAt(0xC0, 1);
LoadPalette(&gUnknown_0860F074, 0xF0, 0x20);
for (i = 0; i < 3; i++)
{
FillWindowPixelBuffer(i, PIXEL_FILL(0));
PutWindowTilemap(i);
}
- schedule_bg_copy_tilemap_to_vram(0);
- schedule_bg_copy_tilemap_to_vram(1);
+ ScheduleBgCopyTilemapToVram(0);
+ ScheduleBgCopyTilemapToVram(1);
}
-void BagMenu_Print(u8 windowId, u8 fontId, const u8 *str, u8 left, u8 top, u8 letterSpacing, u8 lineSpacing, u8 speed, u8 h)
+void BagMenu_Print(u8 windowId, u8 fontId, const u8 *str, u8 left, u8 top, u8 letterSpacing, u8 lineSpacing, u8 speed, u8 colorIndex)
{
- AddTextPrinterParameterized4(windowId, fontId, left, top, letterSpacing, lineSpacing, sFontColorTable[h], speed, str);
+ AddTextPrinterParameterized4(windowId, fontId, left, top, letterSpacing, lineSpacing, sFontColorTable[colorIndex], speed, str);
}
//Unused
-u8 sub_81AE124(u8 a)
+u8 sub_81AE124(u8 which)
{
- return gBagMenu->windowPointers[a];
+ return gBagMenu->windowPointers[which];
}
-u8 BagMenu_AddWindow(u8 a)
+u8 BagMenu_AddWindow(u8 which)
{
- u8 *ptr = &gBagMenu->windowPointers[a];
+ u8 *ptr = &gBagMenu->windowPointers[which];
if (*ptr == 0xFF)
{
- *ptr = AddWindow(&gUnknown_086141AC[a]);
+ *ptr = AddWindow(&sContextMenuWindowTemplates[which]);
DrawStdFrameWithCustomTileAndPalette(*ptr, 0, 1, 14);
- schedule_bg_copy_tilemap_to_vram(1);
+ ScheduleBgCopyTilemapToVram(1);
}
return *ptr;
}
-void BagMenu_RemoveWindow(u8 a)
+void BagMenu_RemoveWindow(u8 which)
{
- u8 *ptr = &gBagMenu->windowPointers[a];
+ u8 *ptr = &gBagMenu->windowPointers[which];
if (*ptr != 0xFF)
{
- ClearStdWindowAndFrameToTransparent(*ptr, 0);
+ ClearStdWindowAndFrameToTransparent(*ptr, FALSE);
ClearWindowTilemap(*ptr);
RemoveWindow(*ptr);
- schedule_bg_copy_tilemap_to_vram(1);
+ ScheduleBgCopyTilemapToVram(1);
*ptr = 0xFF;
}
}
-u8 AddItemMessageWindow(u8 a)
+u8 AddItemMessageWindow(u8 which)
{
- u8 *ptr = &gBagMenu->windowPointers[a];
+ u8 *ptr = &gBagMenu->windowPointers[which];
if (*ptr == 0xFF)
- *ptr = AddWindow(&gUnknown_086141AC[a]);
+ *ptr = AddWindow(&sContextMenuWindowTemplates[which]);
return *ptr;
}
-void bag_menu_RemoveBagItem_message_window(u8 a)
+void BagMenu_RemoveBagItemMessageindow(u8 which)
{
- u8 *ptr = &gBagMenu->windowPointers[a];
+ u8 *ptr = &gBagMenu->windowPointers[which];
if (*ptr != 0xFF)
{
ClearDialogWindowAndFrameToTransparent(*ptr, FALSE);
// This ClearWindowTilemap call is redundant, since ClearDialogWindowAndFrameToTransparent already calls it.
ClearWindowTilemap(*ptr);
RemoveWindow(*ptr);
- schedule_bg_copy_tilemap_to_vram(1);
+ ScheduleBgCopyTilemapToVram(1);
*ptr = 0xFF;
}
}
void BagMenu_YesNo(u8 a, u8 b, const struct YesNoFuncTable *funcTable)
{
- CreateYesNoMenuWithCallbacks(a, &gUnknown_086141AC[b], 1, 0, 2, 1, 14, funcTable);
+ CreateYesNoMenuWithCallbacks(a, &sContextMenuWindowTemplates[b], 1, 0, 2, 1, 14, funcTable);
}
-void DisplayCurrentMoneyWindow(void)
+static void DisplayCurrentMoneyWindow(void)
{
u8 windowId = BagMenu_AddWindow(9);
PrintMoneyAmountInMoneyBoxWithBorder(windowId, 1, 14, GetMoney(&gSaveBlock1Ptr->money));
AddMoneyLabelObject(19, 11);
}
-void bag_menu_remove_money_window(void)
+static void RemoveMoneyWindow(void)
{
BagMenu_RemoveWindow(9);
RemoveMoneyLabelObject();
diff --git a/src/item_menu_icons.c b/src/item_menu_icons.c
index cbc038d8c..cc51236c8 100644
--- a/src/item_menu_icons.c
+++ b/src/item_menu_icons.c
@@ -19,7 +19,7 @@ struct CompressedTilesPal
// this file's functions
static void SpriteCB_BagVisualSwitchingPockets(struct Sprite *sprite);
-static void SpriteCB_ShakeBagVisual(struct Sprite *sprite);
+static void SpriteCB_ShakeBagSprite(struct Sprite *sprite);
static void SpriteCB_SwitchPocketRotatingBallInit(struct Sprite *sprite);
static void SpriteCB_SwitchPocketRotatingBallContinue(struct Sprite *sprite);
@@ -310,51 +310,51 @@ static const struct SpriteTemplate gBerryPicRotatingSpriteTemplate =
.callback = SpriteCallbackDummy,
};
-static const struct CompressedTilesPal gBerryPicTable[] =
-{
- {gBerryPic_Cheri, gBerryPalette_Cheri},
- {gBerryPic_Chesto, gBerryPalette_Chesto},
- {gBerryPic_Pecha, gBerryPalette_Pecha},
- {gBerryPic_Rawst, gBerryPalette_Rawst},
- {gBerryPic_Aspear, gBerryPalette_Aspear},
- {gBerryPic_Leppa, gBerryPalette_Leppa},
- {gBerryPic_Oran, gBerryPalette_Oran},
- {gBerryPic_Persim, gBerryPalette_Persim},
- {gBerryPic_Lum, gBerryPalette_Lum},
- {gBerryPic_Sitrus, gBerryPalette_Sitrus},
- {gBerryPic_Figy, gBerryPalette_Figy},
- {gBerryPic_Wiki, gBerryPalette_Wiki},
- {gBerryPic_Mago, gBerryPalette_Mago},
- {gBerryPic_Aguav, gBerryPalette_Aguav},
- {gBerryPic_Iapapa, gBerryPalette_Iapapa},
- {gBerryPic_Razz, gBerryPalette_Razz},
- {gBerryPic_Bluk, gBerryPalette_Bluk},
- {gBerryPic_Nanab, gBerryPalette_Nanab},
- {gBerryPic_Wepear, gBerryPalette_Wepear},
- {gBerryPic_Pinap, gBerryPalette_Pinap},
- {gBerryPic_Pomeg, gBerryPalette_Pomeg},
- {gBerryPic_Kelpsy, gBerryPalette_Kelpsy},
- {gBerryPic_Qualot, gBerryPalette_Qualot},
- {gBerryPic_Hondew, gBerryPalette_Hondew},
- {gBerryPic_Grepa, gBerryPalette_Grepa},
- {gBerryPic_Tamato, gBerryPalette_Tamato},
- {gBerryPic_Cornn, gBerryPalette_Cornn},
- {gBerryPic_Magost, gBerryPalette_Magost},
- {gBerryPic_Rabuta, gBerryPalette_Rabuta},
- {gBerryPic_Nomel, gBerryPalette_Nomel},
- {gBerryPic_Spelon, gBerryPalette_Spelon},
- {gBerryPic_Pamtre, gBerryPalette_Pamtre},
- {gBerryPic_Watmel, gBerryPalette_Watmel},
- {gBerryPic_Durin, gBerryPalette_Durin},
- {gBerryPic_Belue, gBerryPalette_Belue},
- {gBerryPic_Liechi, gBerryPalette_Liechi},
- {gBerryPic_Ganlon, gBerryPalette_Ganlon},
- {gBerryPic_Salac, gBerryPalette_Salac},
- {gBerryPic_Petaya, gBerryPalette_Petaya},
- {gBerryPic_Apicot, gBerryPalette_Apicot},
- {gBerryPic_Lansat, gBerryPalette_Lansat},
- {gBerryPic_Starf, gBerryPalette_Starf},
- {gBerryPic_Enigma, gBerryPalette_Enigma},
+static const struct CompressedTilesPal sBerryPicTable[] =
+{
+ [ITEM_TO_BERRY(ITEM_CHERI_BERRY) - 1] = {gBerryPic_Cheri, gBerryPalette_Cheri},
+ [ITEM_TO_BERRY(ITEM_CHESTO_BERRY) - 1] = {gBerryPic_Chesto, gBerryPalette_Chesto},
+ [ITEM_TO_BERRY(ITEM_PECHA_BERRY) - 1] = {gBerryPic_Pecha, gBerryPalette_Pecha},
+ [ITEM_TO_BERRY(ITEM_RAWST_BERRY) - 1] = {gBerryPic_Rawst, gBerryPalette_Rawst},
+ [ITEM_TO_BERRY(ITEM_ASPEAR_BERRY) - 1] = {gBerryPic_Aspear, gBerryPalette_Aspear},
+ [ITEM_TO_BERRY(ITEM_LEPPA_BERRY) - 1] = {gBerryPic_Leppa, gBerryPalette_Leppa},
+ [ITEM_TO_BERRY(ITEM_ORAN_BERRY) - 1] = {gBerryPic_Oran, gBerryPalette_Oran},
+ [ITEM_TO_BERRY(ITEM_PERSIM_BERRY) - 1] = {gBerryPic_Persim, gBerryPalette_Persim},
+ [ITEM_TO_BERRY(ITEM_LUM_BERRY) - 1] = {gBerryPic_Lum, gBerryPalette_Lum},
+ [ITEM_TO_BERRY(ITEM_SITRUS_BERRY) - 1] = {gBerryPic_Sitrus, gBerryPalette_Sitrus},
+ [ITEM_TO_BERRY(ITEM_FIGY_BERRY) - 1] = {gBerryPic_Figy, gBerryPalette_Figy},
+ [ITEM_TO_BERRY(ITEM_WIKI_BERRY) - 1] = {gBerryPic_Wiki, gBerryPalette_Wiki},
+ [ITEM_TO_BERRY(ITEM_MAGO_BERRY) - 1] = {gBerryPic_Mago, gBerryPalette_Mago},
+ [ITEM_TO_BERRY(ITEM_AGUAV_BERRY) - 1] = {gBerryPic_Aguav, gBerryPalette_Aguav},
+ [ITEM_TO_BERRY(ITEM_IAPAPA_BERRY) - 1] = {gBerryPic_Iapapa, gBerryPalette_Iapapa},
+ [ITEM_TO_BERRY(ITEM_RAZZ_BERRY) - 1] = {gBerryPic_Razz, gBerryPalette_Razz},
+ [ITEM_TO_BERRY(ITEM_BLUK_BERRY) - 1] = {gBerryPic_Bluk, gBerryPalette_Bluk},
+ [ITEM_TO_BERRY(ITEM_NANAB_BERRY) - 1] = {gBerryPic_Nanab, gBerryPalette_Nanab},
+ [ITEM_TO_BERRY(ITEM_WEPEAR_BERRY) - 1] = {gBerryPic_Wepear, gBerryPalette_Wepear},
+ [ITEM_TO_BERRY(ITEM_PINAP_BERRY) - 1] = {gBerryPic_Pinap, gBerryPalette_Pinap},
+ [ITEM_TO_BERRY(ITEM_POMEG_BERRY) - 1] = {gBerryPic_Pomeg, gBerryPalette_Pomeg},
+ [ITEM_TO_BERRY(ITEM_KELPSY_BERRY) - 1] = {gBerryPic_Kelpsy, gBerryPalette_Kelpsy},
+ [ITEM_TO_BERRY(ITEM_QUALOT_BERRY) - 1] = {gBerryPic_Qualot, gBerryPalette_Qualot},
+ [ITEM_TO_BERRY(ITEM_HONDEW_BERRY) - 1] = {gBerryPic_Hondew, gBerryPalette_Hondew},
+ [ITEM_TO_BERRY(ITEM_GREPA_BERRY) - 1] = {gBerryPic_Grepa, gBerryPalette_Grepa},
+ [ITEM_TO_BERRY(ITEM_TAMATO_BERRY) - 1] = {gBerryPic_Tamato, gBerryPalette_Tamato},
+ [ITEM_TO_BERRY(ITEM_CORNN_BERRY) - 1] = {gBerryPic_Cornn, gBerryPalette_Cornn},
+ [ITEM_TO_BERRY(ITEM_MAGOST_BERRY) - 1] = {gBerryPic_Magost, gBerryPalette_Magost},
+ [ITEM_TO_BERRY(ITEM_RABUTA_BERRY) - 1] = {gBerryPic_Rabuta, gBerryPalette_Rabuta},
+ [ITEM_TO_BERRY(ITEM_NOMEL_BERRY) - 1] = {gBerryPic_Nomel, gBerryPalette_Nomel},
+ [ITEM_TO_BERRY(ITEM_SPELON_BERRY) - 1] = {gBerryPic_Spelon, gBerryPalette_Spelon},
+ [ITEM_TO_BERRY(ITEM_PAMTRE_BERRY) - 1] = {gBerryPic_Pamtre, gBerryPalette_Pamtre},
+ [ITEM_TO_BERRY(ITEM_WATMEL_BERRY) - 1] = {gBerryPic_Watmel, gBerryPalette_Watmel},
+ [ITEM_TO_BERRY(ITEM_DURIN_BERRY) - 1] = {gBerryPic_Durin, gBerryPalette_Durin},
+ [ITEM_TO_BERRY(ITEM_BELUE_BERRY) - 1] = {gBerryPic_Belue, gBerryPalette_Belue},
+ [ITEM_TO_BERRY(ITEM_LIECHI_BERRY) - 1] = {gBerryPic_Liechi, gBerryPalette_Liechi},
+ [ITEM_TO_BERRY(ITEM_GANLON_BERRY) - 1] = {gBerryPic_Ganlon, gBerryPalette_Ganlon},
+ [ITEM_TO_BERRY(ITEM_SALAC_BERRY) - 1] = {gBerryPic_Salac, gBerryPalette_Salac},
+ [ITEM_TO_BERRY(ITEM_PETAYA_BERRY) - 1] = {gBerryPic_Petaya, gBerryPalette_Petaya},
+ [ITEM_TO_BERRY(ITEM_APICOT_BERRY) - 1] = {gBerryPic_Apicot, gBerryPalette_Apicot},
+ [ITEM_TO_BERRY(ITEM_LANSAT_BERRY) - 1] = {gBerryPic_Lansat, gBerryPalette_Lansat},
+ [ITEM_TO_BERRY(ITEM_STARF_BERRY) - 1] = {gBerryPic_Starf, gBerryPalette_Starf},
+ [ITEM_TO_BERRY(ITEM_ENIGMA_BERRY) - 1] = {gBerryPic_Enigma, gBerryPalette_Enigma},
};
const struct CompressedSpriteSheet gBerryCheckCircleSpriteSheet =
@@ -456,17 +456,17 @@ static void SpriteCB_BagVisualSwitchingPockets(struct Sprite *sprite)
}
}
-void ShakeBagVisual(void)
+void ShakeBagSprite(void)
{
struct Sprite *sprite = &gSprites[gBagMenu->spriteId[0]];
if (sprite->affineAnimEnded)
{
StartSpriteAffineAnim(sprite, 1);
- sprite->callback = SpriteCB_ShakeBagVisual;
+ sprite->callback = SpriteCB_ShakeBagSprite;
}
}
-static void SpriteCB_ShakeBagVisual(struct Sprite *sprite)
+static void SpriteCB_ShakeBagSprite(struct Sprite *sprite)
{
if (sprite->affineAnimEnded)
{
@@ -581,10 +581,10 @@ static void LoadBerryGfx(u8 berryId)
// unknown empty if statement
}
- pal.data = gBerryPicTable[berryId].pal;
+ pal.data = sBerryPicTable[berryId].pal;
pal.tag = TAG_BERRY_PIC_PAL;
LoadCompressedSpritePalette(&pal);
- LZDecompressWram(gBerryPicTable[berryId].tiles, &gDecompressionBuffer[0x1000]);
+ LZDecompressWram(sBerryPicTable[berryId].tiles, &gDecompressionBuffer[0x1000]);
sub_80D5018(&gDecompressionBuffer[0x1000], &gDecompressionBuffer[0]);
}
@@ -599,7 +599,8 @@ void FreeBerryTagSpritePalette(void)
FreeSpritePaletteByTag(TAG_BERRY_PIC_PAL);
}
-u8 LoadSpinningBerryPicGfx(u8 berryId, u8 x, u8 y, bool8 startAffine)
+// For throwing berries into the Berry Blender
+u8 CreateSpinningBerrySprite(u8 berryId, u8 x, u8 y, bool8 startAffine)
{
u8 spriteId;
diff --git a/src/item_use.c b/src/item_use.c
index d359dbcef..a9132ae5e 100755
--- a/src/item_use.c
+++ b/src/item_use.c
@@ -38,11 +38,9 @@
#include "text.h"
#include "constants/event_bg.h"
#include "constants/event_objects.h"
-#include "constants/flags.h"
#include "constants/item_effects.h"
#include "constants/items.h"
#include "constants/songs.h"
-#include "constants/vars.h"
static void SetUpItemUseCallback(u8 taskId);
static void FieldCB_UseItemOnField(void);
@@ -107,7 +105,7 @@ static void SetUpItemUseCallback(u8 taskId)
type = ItemId_GetType(gSpecialVar_ItemId) - 1;
if (!InBattlePyramid())
{
- gBagMenu->mainCallback2 = sItemUseCallbacks[type];
+ gBagMenu->exitCallback = sItemUseCallbacks[type];
Task_FadeAndCloseBagMenu(taskId);
}
else
@@ -192,7 +190,7 @@ static void CB2_CheckMail(void)
void ItemUseOutOfBattle_Mail(u8 taskId)
{
- gBagMenu->mainCallback2 = CB2_CheckMail;
+ gBagMenu->exitCallback = CB2_CheckMail;
Task_FadeAndCloseBagMenu(taskId);
}
@@ -330,7 +328,7 @@ static void Task_UseItemfinder(u8 taskId)
}
return;
}
- PlaySE(SE_DAUGI);
+ PlaySE(SE_ITEMFINDER);
tItemfinderBeeps++;
}
tCounter = (tCounter + 1) & 0x1F;
@@ -399,7 +397,7 @@ static bool8 IsHiddenItemPresentInConnection(struct MapConnection *connection, i
u32 localOffset;
s32 localLength;
- struct MapHeader const *const mapHeader = mapconnection_get_mapheader(connection);
+ struct MapHeader const *const mapHeader = GetMapHeaderFromConnection(connection);
switch (connection->direction)
{
@@ -611,13 +609,13 @@ static void Task_StandingOnHiddenItem(u8 taskId)
void ItemUseOutOfBattle_PokeblockCase(u8 taskId)
{
- if (sub_81221AC() == TRUE) // link func
+ if (MenuHelpers_LinkSomething() == TRUE) // link func
{
DisplayDadsAdviceCannotUseItemMessage(taskId, gTasks[taskId].tUsingRegisteredKeyItem);
}
else if (gTasks[taskId].tUsingRegisteredKeyItem != TRUE)
{
- gBagMenu->mainCallback2 = CB2_OpenPokeblockCaseOnField;
+ gBagMenu->exitCallback = CB2_OpenPokeblockCaseOnField;
Task_FadeAndCloseBagMenu(taskId);
}
else
@@ -679,7 +677,7 @@ void ItemUseOutOfBattle_Berry(u8 taskId)
{
sItemUseOnFieldCB = ItemUseOnFieldCB_Berry;
gFieldCallback = FieldCB_UseItemOnField;
- gBagMenu->mainCallback2 = CB2_ReturnToField;
+ gBagMenu->exitCallback = CB2_ReturnToField;
Task_FadeAndCloseBagMenu(taskId);
}
else
@@ -723,7 +721,7 @@ static void ItemUseOnFieldCB_WailmerPailBerry(u8 taskId)
static bool8 TryToWaterSudowoodo(void)
{
- u16 x, y;
+ s16 x, y;
u8 z;
u8 objId;
GetXYCoordsOneStepInFrontOfPlayer(&x, &y);
@@ -847,7 +845,7 @@ static void Task_StartUseRepel(u8 taskId)
if (++data[8] > 7)
{
data[8] = 0;
- PlaySE(SE_TU_SAA);
+ PlaySE(SE_REPEL);
gTasks[taskId].func = Task_UseRepel;
}
}
@@ -869,7 +867,7 @@ static void Task_UsedBlackWhiteFlute(u8 taskId)
{
if(++gTasks[taskId].data[8] > 7)
{
- PlaySE(SE_BIDORO);
+ PlaySE(SE_GLASS_FLUTE);
if (!InBattlePyramid())
DisplayItemMessage(taskId, 1, gStringVar4, BagMenu_InitListsMenu);
else
@@ -971,7 +969,7 @@ static void Task_UseStatIncreaseItem(u8 taskId)
{
if(++gTasks[taskId].data[8] > 7)
{
- PlaySE(SE_KAIFUKU);
+ PlaySE(SE_USE_ITEM);
RemoveBagItem(gSpecialVar_ItemId, 1);
if (!InBattlePyramid())
DisplayItemMessage(taskId, 1, UseStatIncreaseItem(gSpecialVar_ItemId), Task_CloseStatIncreaseMessage);
@@ -1003,7 +1001,7 @@ static void ItemUseInBattle_ShowPartyMenu(u8 taskId)
{
if (!InBattlePyramid())
{
- gBagMenu->mainCallback2 = ChooseMonForInBattleItem;
+ gBagMenu->exitCallback = ChooseMonForInBattleItem;
Task_FadeAndCloseBagMenu(taskId);
}
else
diff --git a/src/libgcnmultiboot.s b/src/libgcnmultiboot.s
index 0e418e51f..dbf70ccf8 100644
--- a/src/libgcnmultiboot.s
+++ b/src/libgcnmultiboot.s
@@ -22,7 +22,7 @@ GameCubeMultiBoot_Hash: @ 82DED70
movs r2, 0x20
GameCubeMultiBoot_Hash_Loop:
- lsrs r3, 1
+ lsrs r3, #1
bcc GameCubeMultiBoot_Hash_SkipEor
eors r3, r4
@@ -37,8 +37,8 @@ GameCubeMultiBoot_Hash_SkipEor:
thumb_func_start GameCubeMultiBoot_Main
@ void GameCubeMultiBoot_Main(struct GameCubeMultiBoot *mb);
GameCubeMultiBoot_Main: @ 82DED84
- ldr r1, [r0, GCMB_STRUCT_SERIAL_INTR_HANDLER]
- cmp r1, 0
+ ldr r1, [r0, #GCMB_STRUCT_SERIAL_INTR_HANDLER]
+ cmp r1, #0
beq _082DEDAA
ldrb r1, [r0, 0x1]
adds r1, 0x1
@@ -47,30 +47,30 @@ GameCubeMultiBoot_Main: @ 82DED84
cmp r1, 0x2
beq _082DEDF4
ldr r3, pool_InterruptRegs
- ldrh r2, [r3, OFFSET_REG_IME - 0x200]
+ ldrh r2, [r3, #OFFSET_REG_IME - 0x200]
movs r1, 0
- strh r1, [r3, OFFSET_REG_IME - 0x200]
+ strh r1, [r3, #OFFSET_REG_IME - 0x200]
ldrb r1, [r0]
cmp r1, 0xA
bgt _082DEDA8
adds r1, 0x1
strb r1, [r0]
_082DEDA8:
- strh r2, [r3, OFFSET_REG_IME - 0x200]
+ strh r2, [r3, #OFFSET_REG_IME - 0x200]
_082DEDAA:
bcs GameCubeMultiBoot_Init
ldrb r1, [r0, 0x2]
cmp r1, 0
bne _082DEDF6
- ldr r1, [r0, GCMB_STRUCT_CUR_DEST_PTR]
- ldr r2, [r0, GCMB_STRUCT_BASE_DEST_PTR]
+ ldr r1, [r0, #GCMB_STRUCT_CUR_DEST_PTR]
+ ldr r2, [r0, #GCMB_STRUCT_BASE_DEST_PTR]
subs r1, r2
beq _082DEE76
cmp r1, 0xA0
bcc _082DEE76
push {r4-r6}
movs r1, 0x98
- adds r2, ROM_HEADER_NINTENDO_LOGO_OFFSET
+ adds r2, #ROM_HEADER_NINTENDO_LOGO_OFFSET
ldr r4, pool_NintendoLogo
_082DEDC6:
ldm r2!, {r5}
@@ -82,8 +82,8 @@ _082DEDC6:
ldm r2!, {r5}
ldm r4!, {r6}
eors r5, r6
- lsrs r5, 8
- str r2, [r0, GCMB_STRUCT_BASE_DEST_PTR]
+ lsrs r5, #8
+ str r2, [r0, #GCMB_STRUCT_BASE_DEST_PTR]
_082DEDDC:
pop {r4-r6}
bne GameCubeMultiBoot_Init
@@ -100,11 +100,11 @@ _082DEDDC:
_082DEDF4:
bx lr
_082DEDF6:
- ldr r1, [r0, GCMB_STRUCT_CUR_DEST_PTR]
+ ldr r1, [r0, #GCMB_STRUCT_CUR_DEST_PTR]
mov r12, r1
ldr r3, [r0, 0x18]
push {r4-r7}
- ldr r4, [r0, GCMB_STRUCT_BASE_DEST_PTR]
+ ldr r4, [r0, #GCMB_STRUCT_BASE_DEST_PTR]
ldr r5, pool_Kawa
ldr r6, [r0, 0x14]
ldr r7, pool_HashVal
@@ -118,7 +118,7 @@ _082DEE06:
eors r3, r1
movs r2, 0x20
_082DEE16:
- lsrs r3, 1
+ lsrs r3, #1
bcc _082DEE1C
eors r3, r7
_082DEE1C:
@@ -128,22 +128,22 @@ _082DEE1C:
adds r6, 0x1
b _082DEE06
_082DEE26:
- str r4, [r0, GCMB_STRUCT_BASE_DEST_PTR]
+ str r4, [r0, #GCMB_STRUCT_BASE_DEST_PTR]
str r6, [r0, 0x14]
pop {r4-r7}
str r3, [r0, 0x18]
ldrh r1, [r0, 0x12]
- cmp r1, 0
+ cmp r1, #0
bne _082DEE76
- ldr r1, [r0, GCMB_STRUCT_CUR_DEST_PTR]
- ldr r2, [r0, GCMB_STRUCT_BASE_DEST_PTR]
+ ldr r1, [r0, #GCMB_STRUCT_CUR_DEST_PTR]
+ ldr r2, [r0, #GCMB_STRUCT_BASE_DEST_PTR]
cmp r1, r2
bne _082DEE76
ldr r1, [r0, 0xC]
- cmp r1, 0
+ cmp r1, #0
beq _082DEE60
ldrh r1, [r0, 0x10]
- cmp r1, 0
+ cmp r1, #0
beq _082DEDF4
mov r12, lr
movs r1, 0xBB
@@ -159,11 +159,11 @@ _082DEE26:
_082DEE60:
mov r12, lr
ldrb r1, [r0, 0x3]
- lsls r1, 24
+ lsls r1, #24
subs r1, 0x1
str r1, [r0, 0xC]
bl GameCubeMultiBoot_Hash
- lsls r3, 8
+ lsls r3, #8
adds r3, 0xFF
str r3, [r0, 0x1C]
bx r12
@@ -186,8 +186,8 @@ GameCubeMultiBoot_ExecuteProgram: @ 82DEE84
cmp r1, 0x2
bne GameCubeMultiBoot_ExecuteProgram_Fail
ldr r3, pool_InterruptRegs
- movs r1, 0
- strh r1, [r3, OFFSET_REG_IME - 0x200]
+ movs r1, #0
+ strh r1, [r3, #OFFSET_REG_IME - 0x200]
ldr r1, pool_MultiBootLoadAddr
adds r1, 0xC0
bx r1
@@ -201,25 +201,25 @@ GameCubeMultiBoot_Init: @ 82DEE98
ldr r3, pool_InterruptRegs
@ Save IME register.
- ldrh r2, [r3, OFFSET_REG_IME - 0x200]
+ ldrh r2, [r3, #OFFSET_REG_IME - 0x200]
@ Disable interrupts.
movs r1, 0
- strh r1, [r3, OFFSET_REG_IME - 0x200]
+ strh r1, [r3, #OFFSET_REG_IME - 0x200]
@ Set the handler to the "Stop" routine.
@ Unless the first command that is received is a device reset command, the
@ "Stop" routine will be executed and no further commands will be processed.
adr r3, GcMbIntrHandler_Stop
- str r3, [r0, GCMB_STRUCT_SERIAL_INTR_HANDLER]
+ str r3, [r0, #GCMB_STRUCT_SERIAL_INTR_HANDLER]
ldrb r3, [r0, 0x3]
push {r3}
ldrb r3, [r0, 0x1]
push {r0,r3}
- adds r3, r0, 0
- adds r3, GCMB_STRUCT_BASE_DEST_PTR
+ adds r3, r0, #0
+ adds r3, #GCMB_STRUCT_BASE_DEST_PTR
@ clear all but the last 3 fields of the struct
GameCubeMultiBoot_Init_ClearStructLoop:
@@ -261,7 +261,7 @@ GameCubeMultiBoot_Init_ClearStructLoop:
strh r1, [r3, OFFSET_REG_IE - 0x200]
@ Restore IME register.
- strh r2, [r3, OFFSET_REG_IME - 0x200]
+ strh r2, [r3, #OFFSET_REG_IME - 0x200]
bx lr
thumb_func_end GameCubeMultiBoot_Init
@@ -275,11 +275,11 @@ GameCubeMultiBoot_HandleSerialInterrupt: @ 82DEEE2
ldrh r1, [r3, OFFSET_REG_JOYCNT - 0x120]
strh r1, [r3, OFFSET_REG_JOYCNT - 0x120]
- movs r2, 0
+ movs r2, #0
strb r2, [r0]
- ldr r2, [r0, GCMB_STRUCT_SERIAL_INTR_HANDLER]
- cmp r2, 0
+ ldr r2, [r0, #GCMB_STRUCT_SERIAL_INTR_HANDLER]
+ cmp r2, #0
beq GameCubeMultiBoot_HandleSerialInterruptDone
lsrs r1, 1 @ was a device reset command received?
@@ -297,7 +297,7 @@ GcMbIntrHandler_Stop:
strh r2, [r3, OFFSET_REG_JOYSTAT - 0x120]
GameCubeMultiBoot_SetInterruptHandler:
- str r2, [r0, GCMB_STRUCT_SERIAL_INTR_HANDLER]
+ str r2, [r0, #GCMB_STRUCT_SERIAL_INTR_HANDLER]
GameCubeMultiBoot_ReadVCount:
ldr r3, pool_RegDispstat
@@ -319,8 +319,8 @@ GameCubeMultiBoot_BeginHandshake:
cmp r1, 0
bne GcMbIntrHandler_Stop
ldr r1, pool_MultiBootLoadAddr
- str r1, [r0, GCMB_STRUCT_BASE_DEST_PTR]
- str r1, [r0, GCMB_STRUCT_CUR_DEST_PTR]
+ str r1, [r0, #GCMB_STRUCT_BASE_DEST_PTR]
+ str r1, [r0, #GCMB_STRUCT_CUR_DEST_PTR]
adr r2, GcMbIntrHandler_CheckGameCodeSent
b GameCubeMultiBoot_SetInterruptHandler
@@ -417,8 +417,8 @@ _082DEF94:
_082DEFA6:
bne GcMbIntrHandler_Stop
ldr r1, pool_MultiBootLoadAddr
- str r1, [r0, GCMB_STRUCT_BASE_DEST_PTR]
- str r1, [r0, GCMB_STRUCT_CUR_DEST_PTR]
+ str r1, [r0, #GCMB_STRUCT_BASE_DEST_PTR]
+ str r1, [r0, #GCMB_STRUCT_CUR_DEST_PTR]
adr r2, GcMbIntrHandler_82DEFB4
b GameCubeMultiBoot_SetInterruptHandler
@@ -427,7 +427,7 @@ _082DEFA6:
GcMbIntrHandler_82DEFB4: @ 82DEFB4
lsrs r1, 1 @ is receive complete?
bcc GcMbIntrHandler_Stop @ branch if not
- ldr r2, [r0, GCMB_STRUCT_CUR_DEST_PTR]
+ ldr r2, [r0, #GCMB_STRUCT_CUR_DEST_PTR]
movs r1, 0x4
ands r1, r2
adds r1, 0x8
@@ -435,7 +435,7 @@ GcMbIntrHandler_82DEFB4: @ 82DEFB4
strh r1, [r3, OFFSET_REG_JOYSTAT - 0x120]
ldr r1, [r3, OFFSET_REG_JOY_RECV - 0x120]
stm r2!, {r1}
- str r2, [r0, GCMB_STRUCT_CUR_DEST_PTR]
+ str r2, [r0, #GCMB_STRUCT_CUR_DEST_PTR]
ldrh r1, [r0, 0x12]
subs r1, 0x1
strh r1, [r0, 0x12]
@@ -500,11 +500,11 @@ GameCubeMultiBoot_Quit: @ 82DF012
ldr r3, pool_InterruptRegs
@ Save IME register.
- ldrh r2, [r3, OFFSET_REG_IME - 0x200]
+ ldrh r2, [r3, #OFFSET_REG_IME - 0x200]
@ Disable interrupts.
movs r1, 0
- strh r1, [r3, OFFSET_REG_IME - 0x200]
+ strh r1, [r3, #OFFSET_REG_IME - 0x200]
ldr r3, pool_SerialRegs
@@ -528,7 +528,7 @@ GameCubeMultiBoot_Quit: @ 82DF012
strh r1, [r3, OFFSET_REG_IE - 0x200]
@ Restore IME register.
- strh r2, [r3, OFFSET_REG_IME - 0x200]
+ strh r2, [r3, #OFFSET_REG_IME - 0x200]
bx lr
thumb_func_end GameCubeMultiBoot_Quit
diff --git a/src/librfu_intr.c b/src/librfu_intr.c
index 23962a937..1361be40e 100644
--- a/src/librfu_intr.c
+++ b/src/librfu_intr.c
@@ -148,7 +148,11 @@ static void sio32intr_clock_slave(void)
{
u32 regSIODATA32;
u32 r0;
- register u32 reqLen asm("r2");
+ #ifndef NONMATCHING
+ register u32 reqLen asm("r2");
+ #else
+ u32 reqLen;
+ #endif
gSTWIStatus->timerActive = 0;
STWI_set_timer_in_RAM(100);
diff --git a/src/librfu_rfu.c b/src/librfu_rfu.c
index 3f5bd8b69..fe1d10834 100644
--- a/src/librfu_rfu.c
+++ b/src/librfu_rfu.c
@@ -488,7 +488,7 @@ static void rfu_CB_configGameData(u8 reqCommand, u16 reqResult)
for (i = 0; i < RFU_GAME_NAME_LENGTH; ++i)
gRfuLinkStatus->my.gname[i] = *gname_uname_p++;
++gname_uname_p;
- for (i = 0; i < RFU_USER_NAME_LENGTH; ++i)
+ for (i = 0; i < PLAYER_NAME_LENGTH + 1; ++i)
gRfuLinkStatus->my.uname[i] = *gname_uname_p++;
}
rfu_STC_REQ_callback(reqCommand, reqResult);
@@ -718,7 +718,7 @@ static void rfu_STC_readParentCandidateList(void)
for (j = 0; j < RFU_GAME_NAME_LENGTH; ++j)
target->gname[j] = *packet_p++;
++packet_p;
- for (j = 0; j < RFU_USER_NAME_LENGTH; ++j)
+ for (j = 0; j < PLAYER_NAME_LENGTH + 1; ++j)
target->uname[j] = *packet_p++;
++gRfuLinkStatus->findParentCount;
}
diff --git a/src/link.c b/src/link.c
index 34c9ee7ef..cdaf58469 100644
--- a/src/link.c
+++ b/src/link.c
@@ -1,5 +1,3 @@
-
-// Includes
#include "global.h"
#include "m4a.h"
#include "malloc.h"
@@ -30,10 +28,6 @@
#include "constants/rgb.h"
#include "constants/trade.h"
-extern u16 gHeldKeyCodeToSend;
-
-// Static type declarations
-
struct BlockTransfer
{
u16 pos;
@@ -51,15 +45,13 @@ struct LinkTestBGInfo
u32 dummy_C;
};
-// Static RAM declarations
-
static struct BlockTransfer sBlockSend;
static struct BlockTransfer sBlockRecv[MAX_LINK_PLAYERS];
static u32 sBlockSendDelayCounter;
-static u32 gUnknown_03000D54;
-static u8 gUnknown_03000D58;
+static bool32 sDummy1; // Never read
+static bool8 sDummy2; // Never assigned, read in unused function
static u32 sPlayerDataExchangeStatus;
-static u32 gUnknown_03000D60;
+static bool32 sDummy3; // Never read
static u8 sLinkTestLastBlockSendPos;
static u8 sLinkTestLastBlockRecvPos[MAX_LINK_PLAYERS];
static u8 sNumVBlanksWithoutSerialIntr;
@@ -74,18 +66,18 @@ u32 gLinkDebugSeed;
struct LinkPlayerBlock gLocalLinkPlayerBlock;
bool8 gLinkErrorOccurred;
u32 gLinkDebugFlags;
-u32 gFiller_03003074;
+u32 gLinkFiller1;
bool8 gRemoteLinkPlayersNotReceived[MAX_LINK_PLAYERS];
u8 gBlockReceivedStatus[MAX_LINK_PLAYERS];
-u32 gFiller_03003080;
+u32 gLinkFiller2;
u16 gLinkHeldKeys;
u16 gRecvCmds[MAX_RFU_PLAYERS][CMD_LENGTH];
u32 gLinkStatus;
-bool8 gUnknown_030030E4;
-bool8 gUnknown_030030E8;
-bool8 gUnknown_030030EC[MAX_LINK_PLAYERS];
-bool8 gUnknown_030030F0[MAX_LINK_PLAYERS];
-u16 gUnknown_030030F4;
+bool8 gLinkDummy1; // Never read
+bool8 gLinkDummy2; // Never read
+bool8 gReadyToExitStandby[MAX_LINK_PLAYERS];
+bool8 gReadyToCloseLink[MAX_LINK_PLAYERS];
+u16 gReadyCloseLinkType; // Never read
u8 gSuppressLinkErrorMessage;
bool8 gWirelessCommType;
bool8 gSavedLinkPlayerCount;
@@ -97,19 +89,17 @@ void (*gLinkCallback)(void);
u8 gShouldAdvanceLinkState;
u16 gLinkTestBlockChecksums[MAX_LINK_PLAYERS];
u8 gBlockRequestType;
-u32 gFiller_03003154;
-u32 gFiller_03003158;
-u32 gFiller_0300315c;
+u32 gLinkFiller3;
+u32 gLinkFiller4;
+u32 gLinkFiller5;
u8 gLastSendQueueCount;
struct Link gLink;
u8 gLastRecvQueueCount;
u16 gLinkSavedIme;
-u32 gFiller_03004138;
-u32 gFiller_0300413C;
EWRAM_DATA u8 gLinkTestDebugValuesEnabled = 0;
EWRAM_DATA u8 gUnknown_020223BD = 0;
-EWRAM_DATA u32 gUnknown_020223C0 = 0;
+EWRAM_DATA u32 gBerryBlenderKeySendAttempts = 0;
EWRAM_DATA u16 gBlockRecvBuffer[MAX_RFU_PLAYERS][BLOCK_BUFFER_SIZE / 2] = {};
EWRAM_DATA u8 gBlockSendBuffer[BLOCK_BUFFER_SIZE] = {};
EWRAM_DATA bool8 gLinkOpen = FALSE;
@@ -124,16 +114,16 @@ EWRAM_DATA struct {
u8 lastSendQueueCount;
u8 unk_06;
} sLinkErrorBuffer = {};
-EWRAM_DATA u16 gUnknown_02022B08 = 0;
-EWRAM_DATA void *gUnknown_02022B0C = NULL;
+static EWRAM_DATA u16 sReadyCloseLinkAttempts = 0; // never read
+static EWRAM_DATA void *sLinkErrorBgTilemapBuffer = NULL;
// Static ROM declarations
static void InitLocalLinkPlayer(void);
-static void sub_80096BC(void);
+static void VBlankCB_LinkError(void);
static void CB2_LinkTest(void);
static void ProcessRecvCmds(u8 unused);
-static void sub_8009F70(void);
+static void LinkCB_SendHeldKeys(void);
static void ResetBlockSend(void);
static bool32 InitBlockSend(const void *src, size_t size);
static void LinkCB_BlockSendBegin(void);
@@ -145,17 +135,17 @@ static void LinkTest_prnthex(u32 pos, u8 a0, u8 a1, u8 a2);
static void LinkCB_RequestPlayerDataExchange(void);
static void Task_PrintTestData(u8 taskId);
-static void sub_800AC80(void);
-static void sub_800ACAC(void);
-static void sub_800AD5C(void);
-static void sub_800AD88(void);
-static void sub_800AE30(void);
-static void sub_800AE5C(void);
+static void LinkCB_ReadyCloseLink(void);
+static void LinkCB_WaitCloseLink(void);
+static void LinkCB_ReadyCloseLinkWithJP(void);
+static void LinkCB_WaitCloseLinkWithJP(void);
+static void LinkCB_Standby(void);
+static void LinkCB_StandbyForAll(void);
static void CheckErrorStatus(void);
static void CB2_PrintErrorMessage(void);
static bool8 IsSioMultiMaster(void);
-static void sub_800B4A4(void);
+static void SetWirelessCommType0_Internal(void);
static void DisableSerial(void);
static void EnableSerial(void);
static void CheckMasterOrSlave(void);
@@ -172,29 +162,29 @@ static void SendRecvDone(void);
// .rodata
-ALIGNED(4) const u16 gWirelessLinkDisplayPal[] = INCBIN_U16("graphics/interface/wireless_link_display.gbapal");
-const u32 gWirelessLinkDisplayGfx[] = INCBIN_U32("graphics/interface/wireless_link_display.4bpp.lz");
-const u32 gWirelessLinkDisplayTilemap[] = INCBIN_U32("graphics/interface/wireless_link_display.bin.lz");
-const u16 gLinkTestDigitsPal[] = INCBIN_U16("graphics/interface/link_test_digits.gbapal");
-const u16 gLinkTestDigitsGfx[] = INCBIN_U16("graphics/interface/link_test_digits.4bpp");
-const u8 unkstring_82ed160[] = _("{HIGHLIGHT TRANSPARENT}{COLOR WHITE}");
-const u16 g2BlankTilesGfx[] = INCBIN_U16("graphics/interface/blank_1x2.4bpp");
-const struct BlockRequest gUnknown_082ED1A8[] = {
+static const u16 sWirelessLinkDisplayPal[] = INCBIN_U16("graphics/interface/wireless_link_display.gbapal");
+static const u32 sWirelessLinkDisplayGfx[] = INCBIN_U32("graphics/interface/wireless_link_display.4bpp.lz");
+static const u32 sWirelessLinkDisplayTilemap[] = INCBIN_U32("graphics/interface/wireless_link_display.bin.lz");
+static const u16 sLinkTestDigitsPal[] = INCBIN_U16("graphics/interface/link_test_digits.gbapal");
+static const u16 sLinkTestDigitsGfx[] = INCBIN_U16("graphics/interface/link_test_digits.4bpp");
+static const u8 sUnusedTransparentWhite[] = _("{HIGHLIGHT TRANSPARENT}{COLOR WHITE}");
+static const u16 s2BlankTilesGfx[] = INCBIN_U16("graphics/interface/blank_1x2.4bpp");
+static const struct BlockRequest sBlockRequests[] = {
{gBlockSendBuffer, 200},
{gBlockSendBuffer, 200},
{gBlockSendBuffer, 100},
{gBlockSendBuffer, 220},
{gBlockSendBuffer, 40}
};
-const u8 gBGControlRegs[] = {
+static const u8 sBGControlRegs[] = {
REG_OFFSET_BG0CNT,
REG_OFFSET_BG1CNT,
REG_OFFSET_BG2CNT,
REG_OFFSET_BG3CNT
};
-const char gASCIIGameFreakInc[] = "GameFreak inc.";
-const char gASCIITestPrint[] = "TEST PRINT\nP0\nP1\nP2\nP3";
-const struct BgTemplate gUnknown_082ED1FC[] = {
+static const char sASCIIGameFreakInc[] = "GameFreak inc.";
+static const char sASCIITestPrint[] = "TEST PRINT\nP0\nP1\nP2\nP3";
+static const struct BgTemplate sLinkErrorBgTemplates[] = {
{
.bg = 0,
.charBaseIndex = 2,
@@ -207,29 +197,50 @@ const struct BgTemplate gUnknown_082ED1FC[] = {
.priority = 1
}
};
-const struct WindowTemplate gUnknown_082ED204[] = {
- {0x00, 0x00, 0x00, 0x1E, 0x05, 0x0F, 0x0002},
- {0x00, 0x00, 0x06, 0x1E, 0x07, 0x0F, 0x0098},
- {0x00, 0x00, 0x0D, 0x1E, 0x07, 0x0F, 0x016A},
- DUMMY_WIN_TEMPLATE
+static const struct WindowTemplate sLinkErrorWindowTemplates[] = {
+ {
+ .bg = 0,
+ .tilemapLeft = 0,
+ .tilemapTop = 0,
+ .width = 30,
+ .height = 5,
+ .paletteNum = 15,
+ .baseBlock = 0x002
+ }, {
+ .bg = 0,
+ .tilemapLeft = 0,
+ .tilemapTop = 6,
+ .width = 30,
+ .height = 7,
+ .paletteNum = 15,
+ .baseBlock = 0x098
+ }, {
+ .bg = 0,
+ .tilemapLeft = 0,
+ .tilemapTop = 13,
+ .width = 30,
+ .height = 7,
+ .paletteNum = 15,
+ .baseBlock = 0x16A
+ }, DUMMY_WIN_TEMPLATE
};
static const u8 sTextColors[] = { TEXT_COLOR_TRANSPARENT, TEXT_COLOR_WHITE, TEXT_COLOR_DARK_GREY };
-static const u8 sUnused_082ED224[] = {0x00, 0xff, 0xfe, 0xff, 0x00};
+static const u8 sUnused_082ED224[] = {0x00, 0xFF, 0xFE, 0xFF, 0x00};
// .text
bool8 IsWirelessAdapterConnected(void)
{
- sub_800B488();
- sub_800E700();
+ SetWirelessCommType1();
+ InitRFUAPI();
if (rfu_LMAN_REQBN_softReset_and_checkID() == 0x8001)
{
rfu_REQ_stopMode();
rfu_waitREQComplete();
return TRUE;
}
- sub_800B4A4();
+ SetWirelessCommType0_Internal();
CloseLink();
RestoreSerialTimer3IntrHandlers();
return FALSE;
@@ -242,8 +253,8 @@ void Task_DestroySelf(u8 taskId)
static void InitLinkTestBG(u8 paletteNum, u8 bgNum, u8 screenBaseBlock, u8 charBaseBlock, u16 a4)
{
- LoadPalette(gLinkTestDigitsPal, paletteNum * 16, 0x20);
- DmaCopy16(3, gLinkTestDigitsGfx, (u16 *)BG_CHAR_ADDR(charBaseBlock) + (16 * a4), sizeof gLinkTestDigitsGfx);
+ LoadPalette(sLinkTestDigitsPal, paletteNum * 16, 0x20);
+ DmaCopy16(3, sLinkTestDigitsGfx, (u16 *)BG_CHAR_ADDR(charBaseBlock) + (16 * a4), sizeof sLinkTestDigitsGfx);
gLinkTestBGInfo.screenBaseBlock = screenBaseBlock;
gLinkTestBGInfo.paletteNum = paletteNum;
gLinkTestBGInfo.dummy_8 = a4;
@@ -265,12 +276,12 @@ static void InitLinkTestBG(u8 paletteNum, u8 bgNum, u8 screenBaseBlock, u8 charB
void sub_80094EC(u8 paletteNum, u8 bgNum, u8 screenBaseBlock, u8 charBaseBlock)
{
- LoadPalette(gLinkTestDigitsPal, paletteNum * 16, 0x20);
- DmaCopy16(3, gLinkTestDigitsGfx, (u16 *)BG_CHAR_ADDR(charBaseBlock), sizeof gLinkTestDigitsGfx);
+ LoadPalette(sLinkTestDigitsPal, paletteNum * 16, 0x20);
+ DmaCopy16(3, sLinkTestDigitsGfx, (u16 *)BG_CHAR_ADDR(charBaseBlock), sizeof sLinkTestDigitsGfx);
gLinkTestBGInfo.screenBaseBlock = screenBaseBlock;
gLinkTestBGInfo.paletteNum = paletteNum;
gLinkTestBGInfo.dummy_8 = 0;
- SetGpuReg(gBGControlRegs[bgNum], BGCNT_SCREENBASE(screenBaseBlock) | BGCNT_CHARBASE(charBaseBlock));
+ SetGpuReg(sBGControlRegs[bgNum], BGCNT_SCREENBASE(screenBaseBlock) | BGCNT_CHARBASE(charBaseBlock));
}
void LinkTestScreen(void)
@@ -280,9 +291,9 @@ void LinkTestScreen(void)
ResetSpriteData();
FreeAllSpritePalettes();
ResetTasks();
- SetVBlankCallback(sub_80096BC);
+ SetVBlankCallback(VBlankCB_LinkError);
ResetBlockSend();
- gLinkType = LINKTYPE_0x1111;
+ gLinkType = LINKTYPE_TRADE;
OpenLink();
SeedRng(gMain.vblankCounter2);
for (i = 0; i < MAX_LINK_PLAYERS; i++)
@@ -296,7 +307,7 @@ void LinkTestScreen(void)
AnimateSprites();
BuildOamBuffer();
UpdatePaletteFade();
- gUnknown_03000D60 = 0;
+ sDummy3 = FALSE;
InitLocalLinkPlayer();
CreateTask(Task_PrintTestData, 0);
SetMainCallback2(CB2_LinkTest);
@@ -323,7 +334,7 @@ static void InitLocalLinkPlayer(void)
}
}
-static void sub_80096BC(void)
+static void VBlankCB_LinkError(void)
{
LoadOam();
ProcessSpriteCopyRequests();
@@ -334,9 +345,9 @@ static void InitLink(void)
{
int i;
- for (i = 0; i < 8; i++)
+ for (i = 0; i < CMD_LENGTH; i++)
{
- gSendCmd[i] = 0xefff;
+ gSendCmd[i] = 0xEfff;
}
gLinkOpen = TRUE;
EnableSerial();
@@ -365,22 +376,22 @@ void OpenLink(void)
gSuppressLinkErrorMessage = FALSE;
ResetBlockReceivedFlags();
ResetBlockSend();
- gUnknown_03000D54 = 0;
- gUnknown_030030E8 = FALSE;
- gUnknown_030030E4 = FALSE;
- gUnknown_030030F4 = 0;
+ sDummy1 = FALSE;
+ gLinkDummy2 = FALSE;
+ gLinkDummy1 = FALSE;
+ gReadyCloseLinkType = 0;
CreateTask(Task_TriggerHandshake, 2);
}
else
{
- sub_800E700();
+ InitRFUAPI();
}
gReceivedRemoteLinkPlayers = 0;
for (i = 0; i < MAX_LINK_PLAYERS; i++)
{
gRemoteLinkPlayersNotReceived[i] = TRUE;
- gUnknown_030030F0[i] = FALSE;
- gUnknown_030030EC[i] = FALSE;
+ gReadyToCloseLink[i] = FALSE;
+ gReadyToExitStandby[i] = FALSE;
}
}
@@ -389,7 +400,7 @@ void CloseLink(void)
gReceivedRemoteLinkPlayers = FALSE;
if (gWirelessCommType)
{
- sub_800EDD4();
+ LinkRfu_Shutdown();
}
gLinkOpen = FALSE;
DisableSerial();
@@ -456,7 +467,7 @@ static void LinkTestProcessKeyInput(void)
}
if (gMain.newKeys & SELECT_BUTTON)
{
- sub_800AC34();
+ SetCloseLinkCallback();
}
if (gLinkTestDebugValuesEnabled)
{
@@ -482,7 +493,7 @@ u16 LinkMain2(const u16 *heldKeys)
{
return 0;
}
- for (i = 0; i < 8; i++)
+ for (i = 0; i < CMD_LENGTH; i++)
{
gSendCmd[i] = 0;
}
@@ -536,19 +547,19 @@ static void ProcessRecvCmds(u8 unused)
InitLocalLinkPlayer();
block = &gLocalLinkPlayerBlock;
block->linkPlayer = gLocalLinkPlayer;
- memcpy(block->magic1, gASCIIGameFreakInc, sizeof(block->magic1) - 1);
- memcpy(block->magic2, gASCIIGameFreakInc, sizeof(block->magic2) - 1);
+ memcpy(block->magic1, sASCIIGameFreakInc, sizeof(block->magic1) - 1);
+ memcpy(block->magic2, sASCIIGameFreakInc, sizeof(block->magic2) - 1);
InitBlockSend(block, sizeof(*block));
break;
}
- case LINKCMD_SEND_HELD_KEYS:
+ case LINKCMD_BLENDER_SEND_KEYS:
gLinkPartnersHeldKeys[i] = gRecvCmds[i][1];
break;
case LINKCMD_0x5555:
- gUnknown_030030E8 = TRUE;
+ gLinkDummy2 = TRUE;
break;
case LINKCMD_0x5566:
- gUnknown_030030E8 = TRUE;
+ gLinkDummy2 = TRUE;
break;
case LINKCMD_INIT_BLOCK:
{
@@ -602,8 +613,8 @@ static void ProcessRecvCmds(u8 unused)
linkPlayer->progressFlags = 0;
}
sub_800B524(linkPlayer);
- if (strcmp(block->magic1, gASCIIGameFreakInc) != 0
- || strcmp(block->magic2, gASCIIGameFreakInc) != 0)
+ if (strcmp(block->magic1, sASCIIGameFreakInc) != 0
+ || strcmp(block->magic2, sASCIIGameFreakInc) != 0)
{
SetMainCallback2(CB2_LinkError);
}
@@ -619,19 +630,19 @@ static void ProcessRecvCmds(u8 unused)
}
}
break;
- case LINKCMD_0x5FFF:
- gUnknown_030030F0[i] = TRUE;
+ case LINKCMD_READY_CLOSE_LINK:
+ gReadyToCloseLink[i] = TRUE;
break;
- case LINKCMD_0x2FFE:
- gUnknown_030030EC[i] = TRUE;
+ case LINKCMD_READY_EXIT_STANDBY:
+ gReadyToExitStandby[i] = TRUE;
break;
- case LINKCMD_0xAAAA:
- sub_800A418();
+ case LINKCMD_BLENDER_NO_PBLOCK_SPACE:
+ SetBerryBlenderLinkCallback();
break;
- case LINKCMD_0xCCCC:
- SendBlock(0, gUnknown_082ED1A8[gRecvCmds[i][1]].address, gUnknown_082ED1A8[gRecvCmds[i][1]].size);
+ case LINKCMD_SEND_BLOCK_REQ:
+ SendBlock(0, sBlockRequests[gRecvCmds[i][1]].address, sBlockRequests[gRecvCmds[i][1]].size);
break;
- case LINKCMD_SEND_HELD_KEYS_2:
+ case LINKCMD_SEND_HELD_KEYS:
gLinkPartnersHeldKeys[i] = gRecvCmds[i][1];
break;
}
@@ -646,11 +657,11 @@ static void BuildSendCmd(u16 command)
gSendCmd[0] = LINKCMD_SEND_LINK_TYPE;
gSendCmd[1] = gLinkType;
break;
- case LINKCMD_0x2FFE:
- gSendCmd[0] = LINKCMD_0x2FFE;
+ case LINKCMD_READY_EXIT_STANDBY:
+ gSendCmd[0] = LINKCMD_READY_EXIT_STANDBY;
break;
- case LINKCMD_SEND_HELD_KEYS:
- gSendCmd[0] = LINKCMD_SEND_HELD_KEYS;
+ case LINKCMD_BLENDER_SEND_KEYS:
+ gSendCmd[0] = LINKCMD_BLENDER_SEND_KEYS;
gSendCmd[1] = gMain.heldKeys;
break;
case LINKCMD_0x5555:
@@ -676,99 +687,85 @@ static void BuildSendCmd(u16 command)
gSendCmd[1] = sBlockSend.size;
gSendCmd[2] = sBlockSend.multiplayerId + 0x80;
break;
- case LINKCMD_0xAAAA:
- gSendCmd[0] = LINKCMD_0xAAAA;
+ case LINKCMD_BLENDER_NO_PBLOCK_SPACE:
+ gSendCmd[0] = LINKCMD_BLENDER_NO_PBLOCK_SPACE;
break;
case LINKCMD_0xAAAB:
gSendCmd[0] = LINKCMD_0xAAAB;
gSendCmd[1] = gSpecialVar_ItemId;
break;
- case LINKCMD_0xCCCC:
- gSendCmd[0] = LINKCMD_0xCCCC;
+ case LINKCMD_SEND_BLOCK_REQ:
+ gSendCmd[0] = LINKCMD_SEND_BLOCK_REQ;
gSendCmd[1] = gBlockRequestType;
break;
- case LINKCMD_0x5FFF:
- gSendCmd[0] = LINKCMD_0x5FFF;
- gSendCmd[1] = gUnknown_030030F4;
+ case LINKCMD_READY_CLOSE_LINK:
+ gSendCmd[0] = LINKCMD_READY_CLOSE_LINK;
+ gSendCmd[1] = gReadyCloseLinkType;
break;
case LINKCMD_0x5566:
gSendCmd[0] = LINKCMD_0x5566;
break;
- case LINKCMD_SEND_HELD_KEYS_2:
+ case LINKCMD_SEND_HELD_KEYS:
if (gHeldKeyCodeToSend == 0 || gLinkTransferringData)
{
break;
}
- gSendCmd[0] = LINKCMD_SEND_HELD_KEYS_2;
+ gSendCmd[0] = LINKCMD_SEND_HELD_KEYS;
gSendCmd[1] = gHeldKeyCodeToSend;
break;
}
}
-void sub_8009F18(void)
+void StartSendingKeysToLink(void)
{
if (gWirelessCommType)
- {
- sub_800F804();
- }
- gLinkCallback = sub_8009F70;
+ StartSendingKeysToRfu();
+
+ gLinkCallback = LinkCB_SendHeldKeys;
}
bool32 IsSendingKeysToLink(void)
{
if (gWirelessCommType)
- {
return IsSendingKeysToRfu();
- }
- if (gLinkCallback == sub_8009F70)
- {
+
+ if (gLinkCallback == LinkCB_SendHeldKeys)
return TRUE;
- }
+
return FALSE;
}
-static void sub_8009F70(void)
+static void LinkCB_SendHeldKeys(void)
{
if (gReceivedRemoteLinkPlayers == TRUE)
- {
- BuildSendCmd(LINKCMD_SEND_HELD_KEYS_2);
- }
+ BuildSendCmd(LINKCMD_SEND_HELD_KEYS);
}
void ClearLinkCallback(void)
{
if (gWirelessCommType)
- {
ClearLinkRfuCallback();
- }
else
- {
gLinkCallback = NULL;
- }
}
void ClearLinkCallback_2(void)
{
if (gWirelessCommType)
- {
ClearLinkRfuCallback();
- }
else
- {
gLinkCallback = NULL;
- }
}
u8 GetLinkPlayerCount(void)
{
if (gWirelessCommType)
- {
- return sub_80104F4();
- }
+ return Rfu_GetLinkPlayerCount();
+
return EXTRACT_PLAYER_COUNT(gLinkStatus);
}
-static int sub_8009FF8(u32 version1, u32 version2)
+static int AreAnyLinkPlayersUsingVersions(u32 version1, u32 version2)
{
int i;
u8 nPlayers;
@@ -776,22 +773,22 @@ static int sub_8009FF8(u32 version1, u32 version2)
nPlayers = GetLinkPlayerCount();
for (i = 0; i < nPlayers; i++)
{
- if ((gLinkPlayers[i].version & 0xFF) == version1 || (gLinkPlayers[i].version & 0xFF) == version2)
- {
+ if ((gLinkPlayers[i].version & 0xFF) == version1
+ || (gLinkPlayers[i].version & 0xFF) == version2)
return 1;
- }
}
return -1;
}
-u32 sub_800A03C(void)
+u32 LinkDummy_Return2(void)
{
return 2;
}
-bool32 sub_800A040(void)
+// Unused
+static bool32 IsFullLinkGroupWithNoRS(void)
{
- if (GetLinkPlayerCount() != 4 || sub_8009FF8(VERSION_RUBY, VERSION_SAPPHIRE) < 0)
+ if (GetLinkPlayerCount() != MAX_LINK_PLAYERS || AreAnyLinkPlayersUsingVersions(VERSION_RUBY, VERSION_SAPPHIRE) < 0)
{
return FALSE;
}
@@ -800,18 +797,18 @@ bool32 sub_800A040(void)
bool32 Link_AnyPartnersPlayingRubyOrSapphire(void)
{
- if (sub_8009FF8(VERSION_RUBY, VERSION_SAPPHIRE) >= 0)
+ if (AreAnyLinkPlayersUsingVersions(VERSION_RUBY, VERSION_SAPPHIRE) >= 0)
{
return TRUE;
}
return FALSE;
}
-bool32 sub_800A07C(void)
+bool32 Link_AnyPartnersPlayingFRLG_JP(void)
{
int i;
- i = sub_8009FF8(VERSION_FIRE_RED, VERSION_LEAF_GREEN);
+ i = AreAnyLinkPlayersUsingVersions(VERSION_FIRE_RED, VERSION_LEAF_GREEN);
if (i >= 0 && gLinkPlayers[i].language == LANGUAGE_JAPANESE)
{
return TRUE;
@@ -826,23 +823,23 @@ void OpenLinkTimed(void)
OpenLink();
}
-u8 GetLinkPlayerDataExchangeStatusTimed(int lower, int upper)
+u8 GetLinkPlayerDataExchangeStatusTimed(int minPlayers, int maxPlayers)
{
int i;
int count;
u32 index;
- u8 cmpVal;
+ u8 numPlayers;
u32 linkType1;
u32 linkType2;
count = 0;
if (gReceivedRemoteLinkPlayers == TRUE)
{
- cmpVal = GetLinkPlayerCount_2();
- if (lower > cmpVal || cmpVal > upper)
+ numPlayers = GetLinkPlayerCount_2();
+ if (minPlayers > numPlayers || numPlayers > maxPlayers)
{
- sPlayerDataExchangeStatus = EXCHANGE_STAT_6;
- return 6;
+ sPlayerDataExchangeStatus = EXCHANGE_WRONG_NUM_PLAYERS;
+ return sPlayerDataExchangeStatus;
}
else
{
@@ -860,19 +857,19 @@ u8 GetLinkPlayerDataExchangeStatusTimed(int lower, int upper)
}
if (count == GetLinkPlayerCount())
{
- if (gLinkPlayers[0].linkType == 0x1133)
+ if (gLinkPlayers[0].linkType == LINKTYPE_TRADE_SETUP)
{
switch (GetGameProgressForLinkTrade())
{
- case TRADE_PLAYER_NOT_READY:
- sPlayerDataExchangeStatus = EXCHANGE_PLAYER_NOT_READY;
- break;
- case TRADE_PARTNER_NOT_READY:
- sPlayerDataExchangeStatus = EXCHANGE_PARTNER_NOT_READY;
- break;
- case TRADE_BOTH_PLAYERS_READY:
- sPlayerDataExchangeStatus = EXCHANGE_COMPLETE;
- break;
+ case TRADE_PLAYER_NOT_READY:
+ sPlayerDataExchangeStatus = EXCHANGE_PLAYER_NOT_READY;
+ break;
+ case TRADE_PARTNER_NOT_READY:
+ sPlayerDataExchangeStatus = EXCHANGE_PARTNER_NOT_READY;
+ break;
+ case TRADE_BOTH_PLAYERS_READY:
+ sPlayerDataExchangeStatus = EXCHANGE_COMPLETE;
+ break;
}
}
else
@@ -882,11 +879,14 @@ u8 GetLinkPlayerDataExchangeStatusTimed(int lower, int upper)
}
else
{
- sPlayerDataExchangeStatus = EXCHANGE_IN_PROGRESS;
+ sPlayerDataExchangeStatus = EXCHANGE_DIFF_SELECTIONS;
linkType1 = gLinkPlayers[GetMultiplayerId()].linkType;
linkType2 = gLinkPlayers[GetMultiplayerId() ^ 1].linkType;
- if ((linkType1 == 0x2266 && linkType2 == 0x2277) || (linkType1 == 0x2277 && linkType2 == 0x2266))
+ if ((linkType1 == LINKTYPE_BATTLE_TOWER_50 && linkType2 == LINKTYPE_BATTLE_TOWER_OPEN)
+ || (linkType1 == LINKTYPE_BATTLE_TOWER_OPEN && linkType2 == LINKTYPE_BATTLE_TOWER_50))
{
+ // 3 below indicates partner made different level mode selection
+ // See BattleFrontier_BattleTowerLobby_EventScript_AbortLinkDifferentSelections
gSpecialVar_0x8005 = 3;
}
}
@@ -921,7 +921,7 @@ bool8 IsLinkPlayerDataExchangeComplete(void)
else
{
retval = FALSE;
- sPlayerDataExchangeStatus = EXCHANGE_IN_PROGRESS;
+ sPlayerDataExchangeStatus = EXCHANGE_DIFF_SELECTIONS;
}
return retval;
}
@@ -959,7 +959,7 @@ static bool32 InitBlockSend(const void *src, size_t size)
sBlockSend.active = TRUE;
sBlockSend.size = size;
sBlockSend.pos = 0;
- if (size > 0x100)
+ if (size > BLOCK_BUFFER_SIZE)
{
sBlockSend.src = src;
}
@@ -992,7 +992,7 @@ static void LinkCB_BlockSend(void)
src = sBlockSend.src;
gSendCmd[0] = LINKCMD_CONT_BLOCK;
- for (i = 0; i < 7; i++)
+ for (i = 0; i < CMD_LENGTH - 1; i++)
{
gSendCmd[i + 1] = (src[sBlockSend.pos + i * 2 + 1] << 8) | src[sBlockSend.pos + i * 2];
}
@@ -1009,41 +1009,43 @@ static void LinkCB_BlockSendEnd(void)
gLinkCallback = NULL;
}
-static void sub_800A3F8(void)
+static void LinkCB_BerryBlenderSendHeldKeys(void)
{
GetMultiplayerId();
- BuildSendCmd(LINKCMD_SEND_HELD_KEYS);
- gUnknown_020223C0++;
+ BuildSendCmd(LINKCMD_BLENDER_SEND_KEYS);
+ gBerryBlenderKeySendAttempts++;
}
-void sub_800A418(void)
+void SetBerryBlenderLinkCallback(void)
{
- gUnknown_020223C0 = 0;
+ gBerryBlenderKeySendAttempts = 0;
if (gWirelessCommType)
{
- sub_800F850();
+ Rfu_SetBerryBlenderLinkCallback();
}
else
{
- gLinkCallback = sub_800A3F8;
+ gLinkCallback = LinkCB_BerryBlenderSendHeldKeys;
}
}
-u32 sub_800A44C(void)
+// Unused
+static u32 GetBerryBlenderKeySendAttempts(void)
{
- return gUnknown_020223C0;
+ return gBerryBlenderKeySendAttempts;
}
-void sub_800A458(void)
+// Unused
+static void SendBerryBlenderNoSpaceForPokeblocks(void)
{
- BuildSendCmd(LINKCMD_0xAAAA);
+ BuildSendCmd(LINKCMD_BLENDER_NO_PBLOCK_SPACE);
}
u8 GetMultiplayerId(void)
{
if (gWirelessCommType == TRUE)
{
- return rfu_get_multiplayer_id();
+ return Rfu_GetMultiplayerId();
}
return SIO_MULTI_CNT->id;
}
@@ -1060,21 +1062,21 @@ bool8 SendBlock(u8 unused, const void *src, u16 size)
{
if (gWirelessCommType == TRUE)
{
- return sub_800FE84(src, size);
+ return Rfu_InitBlockSend(src, size);
}
return InitBlockSend(src, size);
}
-bool8 sub_800A4D8(u8 a0)
+bool8 SendBlockRequest(u8 blockReqType)
{
if (gWirelessCommType == TRUE)
{
- return sub_8010100(a0);
+ return Rfu_SendBlockRequest(blockReqType);
}
if (gLinkCallback == NULL)
{
- gBlockRequestType = a0;
- BuildSendCmd(LINKCMD_0xCCCC);
+ gBlockRequestType = blockReqType;
+ BuildSendCmd(LINKCMD_SEND_BLOCK_REQ);
return TRUE;
}
return FALSE;
@@ -1093,7 +1095,7 @@ u8 GetBlockReceivedStatus(void)
{
if (gWirelessCommType == TRUE)
{
- return sub_800FCD8();
+ return Rfu_GetBlockReceivedStatus();
}
return (gBlockReceivedStatus[3] << 3) | (gBlockReceivedStatus[2] << 2) | (gBlockReceivedStatus[1] << 1) | (gBlockReceivedStatus[0] << 0);
}
@@ -1102,7 +1104,7 @@ static void SetBlockReceivedFlag(u8 who)
{
if (gWirelessCommType == TRUE)
{
- sub_800F6FC(who);
+ Rfu_SetBlockReceivedFlag(who);
}
else
{
@@ -1118,7 +1120,7 @@ void ResetBlockReceivedFlags(void)
{
for (i = 0; i < MAX_RFU_PLAYERS; i++)
{
- sub_800F728(i);
+ Rfu_ResetBlockReceivedFlag(i);
}
}
else
@@ -1134,7 +1136,7 @@ void ResetBlockReceivedFlag(u8 who)
{
if (gWirelessCommType == TRUE)
{
- sub_800F728(who);
+ Rfu_ResetBlockReceivedFlag(who);
}
else if (gBlockReceivedStatus[who])
{
@@ -1261,7 +1263,7 @@ static void Task_PrintTestData(u8 taskId)
char sp[32];
int i;
- strcpy(sp, gASCIITestPrint);
+ strcpy(sp, sASCIITestPrint);
LinkTest_prntstr(sp, 5, 2);
LinkTest_prnthex(gShouldAdvanceLinkState, 2, 1, 2);
LinkTest_prnthex(gLinkStatus, 15, 1, 8);
@@ -1289,7 +1291,7 @@ void SetLinkDebugValues(u32 seed, u32 flags)
gLinkDebugFlags = flags;
}
-u8 sub_800A9A8(void)
+u8 GetSavedLinkPlayerCountAsBitFlags(void)
{
int i;
u8 flags;
@@ -1302,7 +1304,7 @@ u8 sub_800A9A8(void)
return flags;
}
-u8 sub_800A9D8(void)
+u8 GetLinkPlayerCountAsBitFlags(void)
{
int i;
u8 flags;
@@ -1315,11 +1317,11 @@ u8 sub_800A9D8(void)
return flags;
}
-void sub_800AA04(u8 a0)
+void SaveLinkPlayers(u8 playerCount)
{
int i;
- gSavedLinkPlayerCount = a0;
+ gSavedLinkPlayerCount = playerCount;
gSavedMultiplayerId = GetMultiplayerId();
for (i = 0; i < MAX_RFU_PLAYERS; i++)
{
@@ -1334,17 +1336,17 @@ u8 GetSavedPlayerCount(void)
return gSavedLinkPlayerCount;
}
-u8 sub_800AA54(void)
+// Unused
+static u8 GetSavedMultiplayerId(void)
{
return gSavedMultiplayerId;
}
-bool8 sub_800AA60(void)
+bool8 DoesLinkPlayerCountMatchSaved(void)
{
int i;
- unsigned count;
+ u32 count = 0;
- count = 0;
for (i = 0; i < gSavedLinkPlayerCount; i++)
{
if (gLinkPlayers[i].trainerId == gSavedLinkPlayers[i].trainerId)
@@ -1352,9 +1354,7 @@ bool8 sub_800AA60(void)
if (gLinkType == LINKTYPE_BATTLE_TOWER)
{
if (gLinkType == gLinkPlayers[i].linkType)
- {
count++;
- }
}
else
{
@@ -1372,7 +1372,7 @@ bool8 sub_800AA60(void)
return FALSE;
}
-void sub_800AAF4(void)
+void ClearSavedLinkPlayers(void)
{
int i;
@@ -1383,13 +1383,14 @@ void sub_800AAF4(void)
}
}
-void sub_800AB18(void)
+void CheckLinkPlayersMatchSaved(void)
{
u8 i;
for (i = 0; i < gSavedLinkPlayerCount; i++)
{
- if (gSavedLinkPlayers[i].trainerId != gLinkPlayers[i].trainerId || StringCompare(gSavedLinkPlayers[i].name, gLinkPlayers[i].name) != 0)
+ if (gSavedLinkPlayers[i].trainerId != gLinkPlayers[i].trainerId
+ || StringCompare(gSavedLinkPlayers[i].name, gLinkPlayers[i].name) != 0)
{
gLinkErrorOccurred = TRUE;
CloseLink();
@@ -1418,114 +1419,116 @@ bool8 IsLinkMaster(void)
return EXTRACT_MASTER(gLinkStatus);
}
-u8 sub_800ABE8(void)
+// Unused
+static u8 GetDummy2(void)
{
- return gUnknown_03000D58;
+ return sDummy2;
}
-void sub_800ABF4(u16 a0)
+void SetCloseLinkCallbackAndType(u16 type)
{
if (gWirelessCommType == TRUE)
{
- task_add_05_task_del_08FA224_when_no_RfuFunc();
+ Rfu_SetCloseLinkCallback();
}
else
{
if (gLinkCallback == NULL)
{
- gLinkCallback = sub_800AC80;
- gUnknown_030030E4 = FALSE;
- gUnknown_030030F4 = a0;
+ gLinkCallback = LinkCB_ReadyCloseLink;
+ gLinkDummy1 = FALSE;
+ gReadyCloseLinkType = type;
}
}
}
-void sub_800AC34(void)
+void SetCloseLinkCallback(void)
{
if (gWirelessCommType == TRUE)
{
- task_add_05_task_del_08FA224_when_no_RfuFunc();
+ Rfu_SetCloseLinkCallback();
}
else
{
if (gLinkCallback != NULL)
{
- gUnknown_02022B08++;
+ sReadyCloseLinkAttempts++;
}
else
{
- gLinkCallback = sub_800AC80;
- gUnknown_030030E4 = FALSE;
- gUnknown_030030F4 = 0;
+ gLinkCallback = LinkCB_ReadyCloseLink;
+ gLinkDummy1 = FALSE;
+ gReadyCloseLinkType = 0;
}
}
}
-static void sub_800AC80(void)
+static void LinkCB_ReadyCloseLink(void)
{
if (gLastRecvQueueCount == 0)
{
- BuildSendCmd(LINKCMD_0x5FFF);
- gLinkCallback = sub_800ACAC;
+ BuildSendCmd(LINKCMD_READY_CLOSE_LINK);
+ gLinkCallback = LinkCB_WaitCloseLink;
}
}
-static void sub_800ACAC(void)
+static void LinkCB_WaitCloseLink(void)
{
int i;
unsigned count;
- u8 linkPlayerCount;
- linkPlayerCount = GetLinkPlayerCount();
+ // Wait for all players to be ready
+ u8 linkPlayerCount = GetLinkPlayerCount();
count = 0;
for (i = 0; i < linkPlayerCount; i++)
{
- if (gUnknown_030030F0[i])
- {
+ if (gReadyToCloseLink[i])
count++;
- }
}
+
if (count == linkPlayerCount)
{
+ // All ready, close link
gBattleTypeFlags &= ~BATTLE_TYPE_20;
gLinkVSyncDisabled = TRUE;
CloseLink();
gLinkCallback = NULL;
- gUnknown_030030E4 = TRUE;
+ gLinkDummy1 = TRUE;
}
}
-void sub_800AD10(void)
+// Used instead of SetCloseLinkCallback when disconnecting from an attempt to link with a foreign game
+void SetCloseLinkCallbackHandleJP(void)
{
if (gWirelessCommType == TRUE)
{
- task_add_05_task_del_08FA224_when_no_RfuFunc();
+ Rfu_SetCloseLinkCallback();
}
else
{
if (gLinkCallback != NULL)
{
- gUnknown_02022B08++;
+ sReadyCloseLinkAttempts++;
}
else
{
- gLinkCallback = sub_800AD5C;
- gUnknown_030030E4 = FALSE;
- gUnknown_030030F4 = 0;
+ gLinkCallback = LinkCB_ReadyCloseLinkWithJP;
+ gLinkDummy1 = FALSE;
+ gReadyCloseLinkType = 0;
}
}
}
-static void sub_800AD5C(void)
+static void LinkCB_ReadyCloseLinkWithJP(void)
{
if (gLastRecvQueueCount == 0)
{
- BuildSendCmd(LINKCMD_0x5FFF);
- gLinkCallback = sub_800AD88;
+ BuildSendCmd(LINKCMD_READY_CLOSE_LINK);
+ gLinkCallback = LinkCB_WaitCloseLinkWithJP;
}
}
-static void sub_800AD88(void)
+static void LinkCB_WaitCloseLinkWithJP(void)
{
int i;
unsigned count;
@@ -1533,71 +1536,70 @@ static void sub_800AD88(void)
linkPlayerCount = GetLinkPlayerCount();
count = 0;
+
+ // Wait for all non-foreign players to be ready
for (i = 0; i < linkPlayerCount; i++)
{
+ // Rather than communicate with the foreign game
+ // just assume they're ready to disconnect
if (gLinkPlayers[i].language == LANGUAGE_JAPANESE)
- {
count++;
- }
- else if (gUnknown_030030F0[i])
- {
+ else if (gReadyToCloseLink[i])
count++;
- }
}
+
if (count == linkPlayerCount)
{
+ // All ready, close link
gBattleTypeFlags &= ~BATTLE_TYPE_20;
gLinkVSyncDisabled = TRUE;
CloseLink();
gLinkCallback = NULL;
- gUnknown_030030E4 = TRUE;
+ gLinkDummy1 = TRUE;
}
}
-void sub_800ADF8(void)
+void SetLinkStandbyCallback(void)
{
if (gWirelessCommType == TRUE)
{
- sub_8010434();
+ Rfu_SetLinkStandbyCallback();
}
else
{
if (gLinkCallback == NULL)
{
- gLinkCallback = sub_800AE30;
+ gLinkCallback = LinkCB_Standby;
}
- gUnknown_030030E4 = FALSE;
+ gLinkDummy1 = FALSE;
}
}
-static void sub_800AE30(void)
+static void LinkCB_Standby(void)
{
if (gLastRecvQueueCount == 0)
{
- BuildSendCmd(LINKCMD_0x2FFE);
- gLinkCallback = sub_800AE5C;
+ BuildSendCmd(LINKCMD_READY_EXIT_STANDBY);
+ gLinkCallback = LinkCB_StandbyForAll;
}
}
-static void sub_800AE5C(void)
+static void LinkCB_StandbyForAll(void)
{
u8 i;
- u8 linkPlayerCount;
-
- linkPlayerCount = GetLinkPlayerCount();
+ u8 linkPlayerCount = GetLinkPlayerCount();
for (i = 0; i < linkPlayerCount; i++)
{
- if (!gUnknown_030030EC[i])
- {
+ if (!gReadyToExitStandby[i])
break;
- }
}
+
+ // If true, all players ready to exit standby
if (i == linkPlayerCount)
{
for (i = 0; i < MAX_LINK_PLAYERS; i++)
- {
- gUnknown_030030EC[i] = FALSE;
- }
+ gReadyToExitStandby[i] = FALSE;
+
gLinkCallback = NULL;
}
}
@@ -1618,7 +1620,7 @@ static void CheckErrorStatus(void)
}
}
-void sub_800AF18(u32 status, u8 lastSendQueueCount, u8 lastRecvQueueCount, u8 unk_06)
+void BufferLinkErrorInfo(u32 status, u8 lastSendQueueCount, u8 lastRecvQueueCount, bool8 unk_06)
{
sLinkErrorBuffer.status = status;
sLinkErrorBuffer.lastSendQueueCount = lastSendQueueCount;
@@ -1647,17 +1649,17 @@ void CB2_LinkError(void)
{
gWirelessCommType = 3;
}
- sub_800E604();
+ ResetLinkRfuGFLayer();
}
- SetVBlankCallback(sub_80096BC);
+ SetVBlankCallback(VBlankCB_LinkError);
ResetBgsAndClearDma3BusyFlags(0);
- InitBgsFromTemplates(0, gUnknown_082ED1FC, 2);
- gUnknown_02022B0C = tilemapBuffer = malloc(0x800);
+ InitBgsFromTemplates(0, sLinkErrorBgTemplates, ARRAY_COUNT(sLinkErrorBgTemplates));
+ sLinkErrorBgTilemapBuffer = tilemapBuffer = malloc(0x800);
SetBgTilemapBuffer(1, tilemapBuffer);
- if (InitWindows(gUnknown_082ED204))
+ if (InitWindows(sLinkErrorWindowTemplates))
{
DeactivateAllTextPrinters();
- reset_temp_tile_data_buffers();
+ ResetTempTileDataBuffers();
SetGpuReg(REG_OFFSET_BLDCNT, 0);
SetGpuReg(REG_OFFSET_BLDALPHA, 0);
SetGpuReg(REG_OFFSET_BG0HOFS, 0);
@@ -1680,11 +1682,11 @@ void CB2_LinkError(void)
static void sub_800B080(void)
{
- LoadBgTiles(0, g2BlankTilesGfx, 0x20, 0);
- DecompressAndLoadBgGfxUsingHeap(1, gWirelessLinkDisplayGfx, FALSE, 0, 0);
- CopyToBgTilemapBuffer(1, gWirelessLinkDisplayTilemap, 0, 0);
+ LoadBgTiles(0, s2BlankTilesGfx, 0x20, 0);
+ DecompressAndLoadBgGfxUsingHeap(1, sWirelessLinkDisplayGfx, FALSE, 0, 0);
+ CopyToBgTilemapBuffer(1, sWirelessLinkDisplayTilemap, 0, 0);
CopyBgTilemapBufferToVram(1);
- LoadPalette(gWirelessLinkDisplayPal, 0, 0x20);
+ LoadPalette(sWirelessLinkDisplayPal, 0, 0x20);
FillWindowPixelBuffer(0, PIXEL_FILL(0));
FillWindowPixelBuffer(2, PIXEL_FILL(0));
AddTextPrinterParameterized3(0, 3, 2, 6, sTextColors, 0, gText_CommErrorEllipsis);
@@ -1697,7 +1699,7 @@ static void sub_800B080(void)
static void sub_800B138(void)
{
- LoadBgTiles(0, g2BlankTilesGfx, 0x20, 0);
+ LoadBgTiles(0, s2BlankTilesGfx, 0x20, 0);
FillWindowPixelBuffer(1, PIXEL_FILL(0));
FillWindowPixelBuffer(2, PIXEL_FILL(0));
AddTextPrinterParameterized3(1, 3, 2, 0, sTextColors, 0, gText_CommErrorCheckConnections);
@@ -1810,12 +1812,12 @@ void sub_800B348(void)
InitLocalLinkPlayer();
block = &gLocalLinkPlayerBlock;
block->linkPlayer = gLocalLinkPlayer;
- memcpy(block->magic1, gASCIIGameFreakInc, sizeof(block->magic1) - 1);
- memcpy(block->magic2, gASCIIGameFreakInc, sizeof(block->magic2) - 1);
+ memcpy(block->magic1, sASCIIGameFreakInc, sizeof(block->magic1) - 1);
+ memcpy(block->magic2, sASCIIGameFreakInc, sizeof(block->magic2) - 1);
memcpy(gBlockSendBuffer, block, sizeof(*block));
}
-void sub_800B3A4(u32 who)
+void LinkPlayerFromBlock(u32 who)
{
u8 who_ = who;
struct LinkPlayerBlock *block;
@@ -1825,7 +1827,7 @@ void sub_800B3A4(u32 who)
player = &gLinkPlayers[who_];
*player = block->linkPlayer;
sub_800B524(player);
- if (strcmp(block->magic1, gASCIIGameFreakInc) != 0 || strcmp(block->magic2, gASCIIGameFreakInc) != 0)
+ if (strcmp(block->magic1, sASCIIGameFreakInc) != 0 || strcmp(block->magic2, sASCIIGameFreakInc) != 0)
{
SetMainCallback2(CB2_LinkError);
}
@@ -1860,7 +1862,7 @@ bool8 HandleLinkConnection(void)
return FALSE;
}
-void sub_800B488(void)
+void SetWirelessCommType1(void)
{
if (gReceivedRemoteLinkPlayers == 0)
{
@@ -1868,7 +1870,7 @@ void sub_800B488(void)
}
}
-static void sub_800B4A4(void)
+static void SetWirelessCommType0_Internal(void)
{
if (gReceivedRemoteLinkPlayers == 0)
{
@@ -1876,7 +1878,7 @@ static void sub_800B4A4(void)
}
}
-void sub_800B4C0(void)
+void SetWirelessCommType0(void)
{
if (gReceivedRemoteLinkPlayers == 0)
{
diff --git a/src/link_rfu_2.c b/src/link_rfu_2.c
index 3ee193ec6..1ea6f4fce 100644
--- a/src/link_rfu_2.c
+++ b/src/link_rfu_2.c
@@ -19,34 +19,91 @@
#include "save.h"
#include "mystery_gift.h"
-extern u16 gHeldKeyCodeToSend;
-
-u32 gf_rfu_REQ_api[RFU_API_BUFF_SIZE_RAM / 4];
-struct UnkRfuStruct_2 Rfu;
-
-BSS_DATA u8 gUnknown_03000D78[8];
-BSS_DATA u8 gUnknown_03000D80[16];
-BSS_DATA u16 gUnknown_03000D90[8];
-
-EWRAM_DATA struct GFtgtGname gUnknown_02022B14 = {};
-EWRAM_DATA ALIGNED(2) u8 gUnknown_02022B22[RFU_USER_NAME_LENGTH] = {};
-EWRAM_DATA INIT_PARAM gUnknown_02022B2C = {};
-EWRAM_DATA struct UnkLinkRfuStruct_02022B44 gUnknown_02022B44 = {};
-
-// Static ROM declarations
+struct SioInfo
+{
+ char magic[15]; // PokemonSioInfo
+ u8 playerCount;
+ u8 linkPlayerIdx[RFU_CHILD_MAX];
+ struct LinkPlayer linkPlayers[MAX_RFU_PLAYERS];
+ u8 filler[92];
+};
-// .rodata
+struct RfuDebug
+{
+ u8 filler0[6];
+ u16 unk_06;
+ u8 filler1[6];
+ vu8 unk_0e;
+ u8 unk_0f;
+ u8 filler2[84];
+ u16 unk_64;
+ u8 filler3[29];
+ u8 unk_83;
+ u8 filler4[88];
+};
-const INIT_PARAM gUnknown_082ED608 = {
- 0x04, 0x20, 0x00, 0x00, 0x02,
- (u8 *)&gUnknown_02022B14,
- gUnknown_02022B22,
- 0x01, 0x00, 0x258, 0x12c
+u32 gf_rfu_REQ_api[RFU_API_BUFF_SIZE_RAM / 4];
+struct GFRfuManager Rfu;
+
+static u8 sHeldKeyCount;
+static u8 sResendBlock8[16];
+static u16 sResendBlock16[8];
+
+EWRAM_DATA struct GFtgtGname gHostRFUtgtGnameBuffer = {};
+EWRAM_DATA u8 gHostRFUtgtUnameBuffer[PLAYER_NAME_LENGTH + 1] = {};
+static EWRAM_DATA INIT_PARAM sRfuReqConfig = {};
+static EWRAM_DATA struct RfuDebug sRfuDebug = {};
+
+static void ResetSendDataManager(struct RfuBlockSend *);
+static void sub_800EAB4(void);
+static void sub_800EAFC(void);
+static void sub_800ED34(u16);
+static void sub_800EDBC(u16);
+static void UpdateBackupQueue(void);
+static void Task_ExchangeLinkPlayers(u8);
+static void RfuHandleReceiveCommand(u8);
+static void CallRfuFunc(void);
+static void RfuPrepareSendBuffer(u16);
+static void HandleBlockSend(void);
+static void SendNextBlock(void);
+static void SendLastBlock(void);
+static u8 GetPartnerIndexByNameAndTrainerID(const u8 *, u16);
+static void UpdateChildStatuses(void);
+static s32 sub_80107A0(void);
+static void sub_801084C(u8);
+static void ClearSelectedLinkPlayerIds(u16);
+static void ValidateAndReceivePokemonSioInfo(void *);
+static void sub_8010D0C(u8);
+static void sub_80115EC(s32);
+static void sub_8011BF8(void);
+static void RfuReqDisconnectSlot(u32);
+static void sub_8011E94(u32, u32);
+static void sub_801209C(u8);
+static void Debug_PrintEmpty(void);
+static void Task_Idle(u8);
+
+static const INIT_PARAM sRfuReqConfigTemplate = {
+ .maxMFrame = 4,
+ .MC_TimerCount = 32,
+ .availSlot_flag = 0,
+ .mboot_flag = 0,
+ .serialNo = 2,
+ .gameName = (void *)&gHostRFUtgtGnameBuffer,
+ .userName = gHostRFUtgtUnameBuffer,
+ .fastSearchParent_flag = TRUE,
+ .linkRecovery_enable = FALSE,
+ .linkRecovery_period = 600,
+ .NI_failCounter_limit = 0x12c
};
-const u8 gUnknown_082ED620[] = {
- 0, 3, 2, 1, 0
+
+static const u8 sAvailSlots[] = {
+ [1] = AVAIL_SLOT1,
+ [2] = AVAIL_SLOT2,
+ [3] = AVAIL_SLOT3,
+ [4] = AVAIL_SLOT4
};
-const u32 gUnknown_082ED628[] = {
+
+static const u32 sAllBlocksReceived[] = {
0x000000,
0x000001,
0x000003,
@@ -73,35 +130,40 @@ const u32 gUnknown_082ED628[] = {
0x7fffff,
0xffffff
};
-const u8 gUnknown_082ED68C[] = {
+
+static const u8 sUnknown_082ED68C[] = {
0, 0, 1,
1, 2, 2,
2, 2, 3
};
-const u8 gUnknown_082ED695[] = {
+
+static const u8 sUnknown_082ED695[] = {
0, 1, 1, 2,
1, 2, 2, 3,
1, 2, 2, 3,
2, 3, 3, 4
};
-const u8 gUnknown_082ED6A5[] = {
+
+static const u8 sUnknown_082ED6A5[] = {
0, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0
};
-const struct {
- u8 *buffer;
- u32 size;
-} gUnknown_082ED6B8[] = {
+
+static const struct BlockRequest sBlockRequests[] = {
{ gBlockSendBuffer, 200 },
{ gBlockSendBuffer, 200 },
{ gBlockSendBuffer, 100 },
{ gBlockSendBuffer, 220 },
{ gBlockSendBuffer, 40 }
};
-const u16 gUnknown_082ED6E0[] = {
- 0x0002, 0x7f7d, 0x0000, 0xFFFF
+
+static const u16 sAcceptedSerialNos[] = {
+ 0x0002,
+ RFU_SERIAL_7F7D,
+ 0x0000,
+ 0xFFFF
};
-const char sUnref_082ED6E8[][15] = {
+static const char sASCII_RfuCmds[][15] = {
"RFU WAIT",
"RFU BOOT",
"RFU ERROR",
@@ -114,79 +176,83 @@ const char sUnref_082ED6E8[][15] = {
"RFU SEND ERR",
"RFU CP POLL"
};
-const char sUnref_082ED6E9[][16] = {
+
+static const char sASCII_RecoverCmds[][16] = {
" ",
"RECOVER START ",
"DISSCONECT ",
"RECOVER SUUSES",
"RECOVER FAILED"
};
-const TaskFunc gUnknown_082ED7E0[] = {
+
+static const TaskFunc sUnknown_082ED7E0[] = {
sub_801084C,
- sub_8010AAC,
+ Task_ExchangeLinkPlayers,
sub_8010D0C
};
-const char gUnknown_082ED7EC[] = "PokemonSioInfo";
-const char gUnknown_082ED7FC[] = "LINK LOSS DISCONNECT!";
-const char gUnknown_082ED814[] = "LINK LOSS RECOVERY NOW";
-
-ALIGNED(4) const char gUnknown_082ED82C[31] = {' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',0x00};
-const char gUnknown_082ED84B[16] = {' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',0x00};
-const char gUnknown_082ED85B[9] = {' ',' ',' ',' ',' ',' ',' ',' ',0x00};
-ALIGNED(4) const char gUnknown_082ED864[2] = {' ',0x00};
-const char gUnknown_082ED866[2] = {'*',0x00};
-const char gUnknown_082ED868[8] = "NOWSLOT";
-const char gUnknown_082ED870[12] = " ";
-const char gUnknown_082ED87C[12] = "CLOCK DRIFT";
-const char gUnknown_082ED888[12] = "BUSY SEND ";
-const char gUnknown_082ED894[12] = "CMD REJECT ";
-const char gUnknown_082ED8A0[12] = "CLOCK SLAVE";
-const char gUnknown_082ED8A8[3][8] = {
+
+static const char sASCII_PokemonSioInfo[] = "PokemonSioInfo";
+static const char sASCII_LinkLossDisconnect[] = "LINK LOSS DISCONNECT!";
+static const char sASCII_LinkLossRecoveryNow[] = "LINK LOSS RECOVERY NOW";
+ALIGNED(4) static const char sASCII_30Commas[31] = {' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','\0'};
+static const char sASCII_15Commas[16] = {' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','\0'};
+static const char sASCII_8Commas[9] = {' ',' ',' ',' ',' ',' ',' ',' ','\0'};
+ALIGNED(4) static const char sASCII_Space[2] = {' ','\0'};
+static const char sASCII_Asterisk[2] = {'*','\0'};
+static const char sASCII_NowSlot[8] = "NOWSLOT";
+
+static const char sASCII_ClockCmds[][12] = {
+ " ",
+ "CLOCK DRIFT",
+ "BUSY SEND ",
+ "CMD REJECT ",
+ "CLOCK SLAVE"
+};
+
+static const char sASCII_ChildParentSearch[3][8] = {
"CHILD ",
"PARENT",
"SEARCH"
};
-// .text
-
-void nullsub_5(const void *unused_0, u8 unused_1, u8 unused_2)
+static void Debug_PrintString(const void *str, u8 x, u8 y)
{
- // debug?
+
}
-void nullsub_13(u16 unused_0, u8 unused_1, u8 unused_2, u8 unused_3)
+static void Debug_PrintNum(u16 num, u8 x, u8 y, u8 numDigits)
{
}
-void sub_800E604(void)
+void ResetLinkRfuGFLayer(void)
{
s32 i;
- u8 unk_ee_bak = Rfu.unk_ee;
+ u8 errorState = Rfu.errorState;
CpuFill16(0, &Rfu, sizeof Rfu);
- Rfu.unk_ee = unk_ee_bak;
- Rfu.unk_0c = 0xFF;
- if (Rfu.unk_ee != 4)
+ Rfu.errorState = errorState;
+ Rfu.parentChild = 0xFF;
+ if (Rfu.errorState != 4)
{
- Rfu.unk_ee = 0;
+ Rfu.errorState = 0;
}
- for (i = 0; i < 5; i++)
+ for (i = 0; i < MAX_RFU_PLAYERS; i++)
{
- sub_800FCC4(Rfu.unk_80 + i);
+ ResetSendDataManager(&Rfu.recvBlock[i]);
}
- sub_800FCC4(&Rfu.unk_6c);
- sub_800D6C8(&Rfu.unk_124);
- sub_800D724(&Rfu.unk_9e8);
+ ResetSendDataManager(&Rfu.sendBlock);
+ RfuRecvQueue_Reset(&Rfu.recvQueue);
+ RfuSendQueue_Reset(&Rfu.sendQueue);
CpuFill16(0, gSendCmd, sizeof gSendCmd);
CpuFill16(0, gRecvCmds, sizeof gRecvCmds);
CpuFill16(0, gLinkPlayers, sizeof gLinkPlayers);
}
-void sub_800E6D0(void)
+void InitRFU(void)
{
IntrFunc serialIntr = gIntrTable[1];
IntrFunc timerIntr = gIntrTable[2];
- sub_800E700();
+ InitRFUAPI();
rfu_REQ_stopMode();
rfu_waitREQComplete();
REG_IME = 0;
@@ -195,59 +261,59 @@ void sub_800E6D0(void)
REG_IME = INTR_FLAG_VBLANK;
}
-void sub_800E700(void)
+void InitRFUAPI(void)
{
if (!rfu_initializeAPI((void *)gf_rfu_REQ_api, sizeof gf_rfu_REQ_api, gIntrTable + 1, TRUE))
{
gLinkType = 0;
- sub_800AAF4();
- sub_80111B0(0);
- sub_800E604();
+ ClearSavedLinkPlayers();
+ sub_80111B0(FALSE);
+ ResetLinkRfuGFLayer();
rfu_setTimerInterrupt(3, gIntrTable + 2);
}
}
-void sub_800E748(u8 taskId)
+static void Task_LinkLeaderSearchForChildren(u8 taskId)
{
- sub_8010750();
- switch (Rfu.unk_04)
+ UpdateChildStatuses();
+ switch (Rfu.state)
{
- case 0:
- rfu_LMAN_initializeRFU(&gUnknown_02022B2C);
- Rfu.unk_04 = 1;
- gTasks[taskId].data[1] = 1;
- break;
- case 1:
- break;
- case 2:
- rfu_LMAN_establishConnection(Rfu.unk_0c, 0, 240, (u16 *)gUnknown_082ED6E0);
- Rfu.unk_04 = 3;
- gTasks[taskId].data[1] = 6;
- break;
- case 3:
- break;
- case 4:
- rfu_LMAN_stopManager(FALSE);
- Rfu.unk_04 = 5;
- break;
- case 5:
- break;
- case 18:
- Rfu.unk_cdb = 0;
- rfu_LMAN_setMSCCallback(sub_800EDBC);
- sub_800EAB4();
- sub_800EAFC();
- Rfu.unk_04 = 20;
- gTasks[taskId].data[1] = 8;
- CreateTask(sub_801084C, 5);
- DestroyTask(taskId);
- break;
+ case 0:
+ rfu_LMAN_initializeRFU(&sRfuReqConfig);
+ Rfu.state = 1;
+ gTasks[taskId].data[1] = 1;
+ break;
+ case 1:
+ break;
+ case 2:
+ rfu_LMAN_establishConnection(Rfu.parentChild, 0, 240, (u16 *)sAcceptedSerialNos);
+ Rfu.state = 3;
+ gTasks[taskId].data[1] = 6;
+ break;
+ case 3:
+ break;
+ case 4:
+ rfu_LMAN_stopManager(FALSE);
+ Rfu.state = 5;
+ break;
+ case 5:
+ break;
+ case 18:
+ Rfu.unk_cdb = FALSE;
+ rfu_LMAN_setMSCCallback(sub_800EDBC);
+ sub_800EAB4();
+ sub_800EAFC();
+ Rfu.state = 20;
+ gTasks[taskId].data[1] = 8;
+ CreateTask(sub_801084C, 5);
+ DestroyTask(taskId);
+ break;
}
}
s32 sub_800E87C(u8 idx)
{
- return gUnknown_082ED6A5[idx];
+ return sUnknown_082ED6A5[idx];
}
void sub_800E88C(s32 r2, s32 r5)
@@ -258,287 +324,287 @@ void sub_800E88C(s32 r2, s32 r5)
s32 r6 = 0;
if (r5 == -1)
{
- for (i = 0; i < 4; r2 >>= 1, i++)
+ for (i = 0; i < RFU_CHILD_MAX; r2 >>= 1, i++)
{
if (r2 & 1)
{
- Rfu.unk_cde[i] = r4;
+ Rfu.linkPlayerIdx[i] = r4;
r4++;
}
}
}
else
{
- for (i = 0; i < 4; r1 >>= 1, i++)
+ for (i = 0; i < RFU_CHILD_MAX; r1 >>= 1, i++)
{
if (!(r1 & 1))
{
- Rfu.unk_cde[i] = 0;
+ Rfu.linkPlayerIdx[i] = 0;
}
}
- for (r4 = 4; r4 != 0; r4--)
+ for (r4 = RFU_CHILD_MAX; r4 != 0; r4--)
{
- for (i = 0; i < 4 && Rfu.unk_cde[i] != r4; i++);
- if (i == 4)
+ for (i = 0; i < RFU_CHILD_MAX && Rfu.linkPlayerIdx[i] != r4; i++);
+ if (i == RFU_CHILD_MAX)
{
r6 = r4;
}
}
- for (r5 &= ~r2, i = 0; i < 4; r5 >>= 1, i++)
+ for (r5 &= ~r2, i = 0; i < RFU_CHILD_MAX; r5 >>= 1, i++)
{
if (r5 & 1)
{
- Rfu.unk_cde[i] = r6++;
+ Rfu.linkPlayerIdx[i] = r6++;
}
}
}
}
-void sub_800E94C(u8 taskId)
+static void Task_JoinGroupSearchForParent(u8 taskId)
{
- switch (Rfu.unk_04)
+ switch (Rfu.state)
{
- case 0:
- rfu_LMAN_initializeRFU((INIT_PARAM *)&gUnknown_082ED608);
- Rfu.unk_04 = 1;
- gTasks[taskId].data[1] = 1;
- break;
- case 1:
- break;
- case 6:
- rfu_LMAN_establishConnection(Rfu.unk_0c, 0, 0xf0, (u16 *)gUnknown_082ED6E0);
- Rfu.unk_04 = 7;
- gTasks[taskId].data[1] = 7;
- break;
- case 7:
- break;
- case 9:
- gTasks[taskId].data[1] = 10;
- break;
- case 11:
- switch (sub_80107A0())
- {
- case 5:
- Rfu.unk_04 = 12;
- break;
- case 6:
- case 9:
- rfu_LMAN_requestChangeAgbClockMaster();
- Rfu.unk_ce4 = 2;
- DestroyTask(taskId);
- break;
- }
- break;
- case 12:
+ case 0:
+ rfu_LMAN_initializeRFU((INIT_PARAM *)&sRfuReqConfigTemplate);
+ Rfu.state = 1;
+ gTasks[taskId].data[1] = 1;
+ break;
+ case 1:
+ break;
+ case 6:
+ rfu_LMAN_establishConnection(Rfu.parentChild, 0, 240, (u16 *)sAcceptedSerialNos);
+ Rfu.state = 7;
+ gTasks[taskId].data[1] = 7;
+ break;
+ case 7:
+ break;
+ case 9:
+ gTasks[taskId].data[1] = 10;
+ break;
+ case 11:
+ switch (sub_80107A0())
{
- u8 r5 = 1 << Rfu.unk_c3e;
- rfu_clearSlot(12, Rfu.unk_c3e);
- rfu_setRecvBuffer(16, Rfu.unk_c3e, Rfu.unk_c3f, 70);
- rfu_UNI_setSendData(r5, Rfu.unk_4c, 14);
- gTasks[taskId].data[1] = 8;
+ case RFU_STATUS_JOIN_GROUP_OK:
+ Rfu.state = 12;
+ break;
+ case RFU_STATUS_JOIN_GROUP_NO:
+ case RFU_STATUS_LEAVE_GROUP:
+ rfu_LMAN_requestChangeAgbClockMaster();
+ Rfu.unk_ce4 = 2;
DestroyTask(taskId);
- if (gUnknown_02022B44.unk_0f == 0)
- {
- sub_801227C();
- gUnknown_02022B44.unk_0f++;
- }
- CreateTask(sub_801084C, 5);
break;
}
+ break;
+ case 12:
+ {
+ u8 bmChildSlot = 1 << Rfu.childSlot;
+ rfu_clearSlot(TYPE_NI_SEND | TYPE_NI_RECV, Rfu.childSlot);
+ rfu_setRecvBuffer(TYPE_UNI, Rfu.childSlot, Rfu.unk_c3f, 70);
+ rfu_UNI_setSendData(bmChildSlot, Rfu.unk_4c, sizeof(Rfu.unk_4c));
+ gTasks[taskId].data[1] = 8;
+ DestroyTask(taskId);
+ if (sRfuDebug.unk_0f == 0)
+ {
+ Debug_PrintEmpty();
+ sRfuDebug.unk_0f++;
+ }
+ CreateTask(sub_801084C, 5);
+ break;
+ }
}
}
-void sub_800EAB4(void)
+static void sub_800EAB4(void)
{
u8 i;
- u8 r5 = lman.acceptSlot_flag;
- for (i = 0; i < 4; i++)
+ u8 acceptSlot = lman.acceptSlot_flag;
+ for (i = 0; i < RFU_CHILD_MAX; i++)
{
- if (r5 & 1)
+ if (acceptSlot & 1)
{
- rfu_setRecvBuffer(16, i, Rfu.unk_14[i], 14);
- rfu_clearSlot(3, i);
+ rfu_setRecvBuffer(TYPE_UNI, i, Rfu.unk_14[i], 14);
+ rfu_clearSlot(TYPE_UNI_SEND | TYPE_UNI_RECV, i);
}
- r5 >>= 1;
+ acceptSlot >>= 1;
}
}
-void sub_800EAFC(void)
+static void sub_800EAFC(void)
{
- u8 r5 = lman.acceptSlot_flag;
- rfu_UNI_setSendData(r5, Rfu.unk_c87, 70);
- Rfu.unk_cda = sub_800E87C(r5);
- Rfu.unk_ce2 = r5;
- sub_800E88C(r5, -1);
- Rfu.unk_0c = 1;
+ u8 acceptSlot = lman.acceptSlot_flag;
+ rfu_UNI_setSendData(acceptSlot, Rfu.recvCmds, 70);
+ Rfu.unk_cda = sub_800E87C(acceptSlot);
+ Rfu.unk_ce2 = acceptSlot;
+ sub_800E88C(acceptSlot, -1);
+ Rfu.parentChild = MODE_PARENT;
}
-void sub_800EB44(u8 taskId)
+static void Task_LinkRfu_UnionRoomListen(u8 taskId)
{
- if (sub_800F7DC()->activity == 0x54 && sub_8011A74() == 4)
+ if (GetHostRFUtgtGname()->activity == (ACTIVITY_PLYRTALK | IN_UNION_ROOM) && RfuGetStatus() == RFU_STATUS_NEW_CHILD_DETECTED)
{
rfu_REQ_disconnect(lman.acceptSlot_flag);
rfu_waitREQComplete();
- sub_8011A64(0, 0);
+ RfuSetStatus(RFU_STATUS_OK, 0);
}
- switch (Rfu.unk_04)
+ switch (Rfu.state)
{
- case 0:
- rfu_LMAN_initializeRFU(&gUnknown_02022B2C);
- Rfu.unk_04 = 1;
- gTasks[taskId].data[1] = 1;
- break;
- case 1:
- break;
- case 17:
- rfu_LMAN_establishConnection(2, 0, 240, (u16 *)gUnknown_082ED6E0);
- rfu_LMAN_setMSCCallback(sub_800ED34);
- Rfu.unk_04 = 18;
- break;
- case 18:
- break;
- case 13:
- if (rfu_UNI_setSendData(1 << Rfu.unk_c3e, Rfu.unk_4c, 14) == 0)
+ case 0:
+ rfu_LMAN_initializeRFU(&sRfuReqConfig);
+ Rfu.state = 1;
+ gTasks[taskId].data[1] = 1;
+ break;
+ case 1:
+ break;
+ case 17:
+ rfu_LMAN_establishConnection(2, 0, 240, (u16 *)sAcceptedSerialNos);
+ rfu_LMAN_setMSCCallback(sub_800ED34);
+ Rfu.state = 18;
+ break;
+ case 18:
+ break;
+ case 13:
+ if (rfu_UNI_setSendData(1 << Rfu.childSlot, Rfu.unk_4c, sizeof(Rfu.unk_4c)) == 0)
+ {
+ Rfu.parentChild = MODE_CHILD;
+ DestroyTask(taskId);
+ if (gTasks[taskId].data[7])
{
- Rfu.unk_0c = 0;
- DestroyTask(taskId);
- if (gTasks[taskId].data[7])
- {
- CreateTask(sub_8010D0C, 1);
- }
- else
- {
- CreateTask(sub_801084C, 5);
- }
+ CreateTask(sub_8010D0C, 1);
}
- break;
- case 14:
- rfu_LMAN_stopManager(0);
- Rfu.unk_04 = 15;
- break;
- case 15:
- break;
- case 16:
- Rfu.unk_cdb = 0;
- rfu_LMAN_setMSCCallback(sub_800EDBC);
- sub_8011068(1);
- sub_800EAB4();
- sub_800EAFC();
- Rfu.unk_04 = 20;
- gTasks[taskId].data[1] = 8;
- Rfu.unk_0c = 1;
- CreateTask(sub_801084C, 5);
- Rfu.unk_ce8 = 1;
- DestroyTask(taskId);
- break;
+ else
+ {
+ CreateTask(sub_801084C, 5);
+ }
+ }
+ break;
+ case 14:
+ rfu_LMAN_stopManager(0);
+ Rfu.state = 15;
+ break;
+ case 15:
+ break;
+ case 16:
+ Rfu.unk_cdb = FALSE;
+ rfu_LMAN_setMSCCallback(sub_800EDBC);
+ UpdateGameData_GroupLockedIn(TRUE);
+ sub_800EAB4();
+ sub_800EAFC();
+ Rfu.state = 20;
+ gTasks[taskId].data[1] = 8;
+ Rfu.parentChild = MODE_PARENT;
+ CreateTask(sub_801084C, 5);
+ Rfu.unk_ce8 = TRUE;
+ DestroyTask(taskId);
+ break;
}
}
-void sub_800ED10(void)
+void LinkRfu_CreateConnectionAsParent(void)
{
- rfu_LMAN_establishConnection(1, 0, 240, (u16 *)gUnknown_082ED6E0);
+ rfu_LMAN_establishConnection(MODE_PARENT, 0, 240, (u16 *)sAcceptedSerialNos);
}
-void sub_800ED28(void)
+void LinkRfu_StopManagerBeforeEnteringChat(void)
{
rfu_LMAN_stopManager(FALSE);
}
-void sub_800ED34(u16 unused)
+static void sub_800ED34(u16 unused)
{
s32 i;
- for (i = 0; i < 14; i++)
+ for (i = 0; i < (int)ARRAY_COUNT(Rfu.unk_4c); i++)
{
Rfu.unk_4c[i] = 0;
}
rfu_REQ_recvData();
rfu_waitREQComplete();
- if (gRfuSlotStatusUNI[Rfu.unk_c3e]->recv.newDataFlag)
+ if (gRfuSlotStatusUNI[Rfu.childSlot]->recv.newDataFlag)
{
Rfu.unk_cd0++;
- sub_800D7D8(&Rfu.unk_124, Rfu.unk_c3f);
- gUnknown_02022B44.unk_06++;
- sub_800F048();
- rfu_UNI_readySendData(Rfu.unk_c3e);
- rfu_UNI_clearRecvNewDataFlag(Rfu.unk_c3e);
+ RfuRecvQueue_Enqueue(&Rfu.recvQueue, Rfu.unk_c3f);
+ sRfuDebug.unk_06++;
+ UpdateBackupQueue();
+ rfu_UNI_readySendData(Rfu.childSlot);
+ rfu_UNI_clearRecvNewDataFlag(Rfu.childSlot);
}
- rfu_LMAN_REQ_sendData(1);
+ rfu_LMAN_REQ_sendData(TRUE);
}
-void sub_800EDBC(u16 unused)
+static void sub_800EDBC(u16 unused)
{
- Rfu.unk_cdb = 1;
+ Rfu.unk_cdb = TRUE;
}
-void sub_800EDD4(void)
+void LinkRfu_Shutdown(void)
{
u8 i;
rfu_LMAN_powerDownRFU();
- if (Rfu.unk_0c == 1)
+ if (Rfu.parentChild == MODE_PARENT)
{
- if (FuncIsActiveTask(sub_800E748) == TRUE)
+ if (FuncIsActiveTask(Task_LinkLeaderSearchForChildren) == TRUE)
{
- DestroyTask(Rfu.unk_67);
- sub_800E604();
+ DestroyTask(Rfu.searchTaskId);
+ ResetLinkRfuGFLayer();
}
}
- else if (Rfu.unk_0c == 0)
+ else if (Rfu.parentChild == MODE_CHILD)
{
- if (FuncIsActiveTask(sub_800E94C) == TRUE)
+ if (FuncIsActiveTask(Task_JoinGroupSearchForParent) == TRUE)
{
- DestroyTask(Rfu.unk_67);
- sub_800E604();
+ DestroyTask(Rfu.searchTaskId);
+ ResetLinkRfuGFLayer();
}
}
- else if (Rfu.unk_0c == 2)
+ else if (Rfu.parentChild == 2)
{
- if (FuncIsActiveTask(sub_800EB44) == TRUE)
+ if (FuncIsActiveTask(Task_LinkRfu_UnionRoomListen) == TRUE)
{
- DestroyTask(Rfu.unk_67);
- sub_800E604();
+ DestroyTask(Rfu.searchTaskId);
+ ResetLinkRfuGFLayer();
}
}
- for (i = 0; i < 3; i++)
+ for (i = 0; i < ARRAY_COUNT(sUnknown_082ED7E0); i++)
{
- if (FuncIsActiveTask(gUnknown_082ED7E0[i]) == TRUE)
+ if (FuncIsActiveTask(sUnknown_082ED7E0[i]) == TRUE)
{
- DestroyTask(FindTaskIdByFunc(gUnknown_082ED7E0[i]));
+ DestroyTask(FindTaskIdByFunc(sUnknown_082ED7E0[i]));
}
}
}
-void sub_800EE78(void)
+static void CreateTask_LinkLeaderSearchForChildren(void)
{
- Rfu.unk_67 = CreateTask(sub_800E748, 1);
+ Rfu.searchTaskId = CreateTask(Task_LinkLeaderSearchForChildren, 1);
}
-bool8 sub_800EE94(void)
+static bool8 sub_800EE94(void)
{
- if (Rfu.unk_04 == 7 && Rfu.unk_ccd)
+ if (Rfu.state == 7 && Rfu.parentId)
{
return TRUE;
}
return FALSE;
}
-bool32 sub_800EEBC(void)
+static bool32 IsParentSuccessfullyReconnected(void)
{
- if (Rfu.unk_04 == 7 && !rfu_LMAN_CHILD_connectParent(gRfuLinkStatus->partner[Rfu.unk_c3d].id, 240))
+ if (Rfu.state == 7 && !rfu_LMAN_CHILD_connectParent(gRfuLinkStatus->partner[Rfu.unk_c3d].id, 240))
{
- Rfu.unk_04 = 9;
+ Rfu.state = 9;
return TRUE;
}
return FALSE;
}
-void sub_800EF00(void)
+static void CreateTask_JoinGroupSearchForParent(void)
{
- Rfu.unk_67 = CreateTask(sub_800E94C, 1);
+ Rfu.searchTaskId = CreateTask(Task_JoinGroupSearchForParent, 1);
}
-bool8 sub_800EF1C(void)
+bool8 LmanAcceptSlotFlagIsNotZero(void)
{
if (lman.acceptSlot_flag)
{
@@ -547,17 +613,17 @@ bool8 sub_800EF1C(void)
return FALSE;
}
-void sub_800EF38(void)
+void LinkRfu_StopManagerAndFinalizeSlots(void)
{
- Rfu.unk_04 = 4;
- Rfu.unk_ce7 = lman.acceptSlot_flag;
+ Rfu.state = 4;
+ Rfu.acceptSlot_flag = lman.acceptSlot_flag;
}
-bool32 sub_800EF58(bool32 a0)
+bool32 WaitRfuState(bool32 force)
{
- if (Rfu.unk_04 == 17 || a0)
+ if (Rfu.state == 17 || force)
{
- Rfu.unk_04 = 18;
+ Rfu.state = 18;
return TRUE;
}
return FALSE;
@@ -565,14 +631,14 @@ bool32 sub_800EF58(bool32 a0)
void sub_800EF7C(void)
{
- Rfu.unk_04 = 14;
+ Rfu.state = 14;
}
-void sub_800EF88(u8 a0)
+static void sub_800EF88(u8 a0)
{
u8 i;
- for (i = 0; i < 4; i++)
+ for (i = 0; i < RFU_CHILD_MAX; i++)
{
if (a0 & 1)
{
@@ -583,53 +649,51 @@ void sub_800EF88(u8 a0)
}
}
-void sub_800EFB0(void)
+static void sub_800EFB0(void)
{
s32 i, j;
for (i = 0; i < 5; i++)
{
- struct UnkRfuStruct_2 *ptr = &Rfu;
+ struct GFRfuManager *ptr = &Rfu;
for (j = 0; j < 7; j++)
{
- ptr->unk_c87[i][j][1] = gRecvCmds[i][j] >> 8;
- ptr->unk_c87[i][j][0] = gRecvCmds[i][j];
+ ptr->recvCmds[i][j][1] = gRecvCmds[i][j] >> 8;
+ ptr->recvCmds[i][j][0] = gRecvCmds[i][j];
}
}
CpuFill16(0, gRecvCmds, sizeof gRecvCmds);
}
-void sub_800F014(void)
+static void sub_800F014(void)
{
s32 i;
- for (i = 0; i < 7; i++)
+ for (i = 0; i < CMD_LENGTH - 1; i++)
{
gRecvCmds[0][i] = gSendCmd[i];
}
- for (i = 0; i < 7; i++)
+ for (i = 0; i < CMD_LENGTH - 1; i++)
{
gSendCmd[i] = 0;
}
}
-void sub_800F048(void)
+static void UpdateBackupQueue(void)
{
- if (Rfu.unk_c3c)
+ if (Rfu.linkRecovered)
{
- u8 r2 = sub_800DAC8(&Rfu.unk_c1c, Rfu.unk_4c);
- if (Rfu.unk_c1c.unk_1e == 0)
- {
- Rfu.unk_c3c = 0;
- }
- if (r2)
- {
+ bool8 backupEmpty = RfuBackupQueue_Dequeue(&Rfu.backupQueue, Rfu.unk_4c);
+
+ if (Rfu.backupQueue.count == 0)
+ Rfu.linkRecovered = FALSE;
+
+ if (backupEmpty)
return;
- }
}
- if (Rfu.unk_c3c == 0)
+ if (!Rfu.linkRecovered)
{
- sub_800D9DC(&Rfu.unk_9e8, Rfu.unk_4c);
- sub_800DA68(&Rfu.unk_c1c, Rfu.unk_4c);
+ RfuSendQueue_Dequeue(&Rfu.sendQueue, Rfu.unk_4c);
+ RfuBackupQueue_Enqueue(&Rfu.backupQueue, Rfu.unk_4c);
}
}
@@ -642,9 +706,9 @@ bool32 IsRfuRecvQueueEmpty(void)
{
return FALSE;
}
- for (i = 0; i < 5; i++)
+ for (i = 0; i < MAX_RFU_PLAYERS; i++)
{
- for (j = 0; j < 7; j++)
+ for (j = 0; j < CMD_LENGTH - 1; j++)
{
if (gRecvCmds[i][j] != 0)
{
@@ -655,53 +719,53 @@ bool32 IsRfuRecvQueueEmpty(void)
return TRUE;
}
-bool32 sub_800F0F8(void)
+static bool32 sub_800F0F8(void)
{
- if (Rfu.unk_04 < 20)
+ if (Rfu.state < 20)
{
rfu_REQ_recvData();
rfu_waitREQComplete();
- rfu_LMAN_REQ_sendData(0);
+ rfu_LMAN_REQ_sendData(FALSE);
}
else
{
- Rfu.unk_cdb = 0;
+ Rfu.unk_cdb = FALSE;
if ((Rfu.unk_ce2 & gRfuLinkStatus->connSlotFlag) == Rfu.unk_ce2 && (Rfu.unk_ce2 & gRfuLinkStatus->connSlotFlag))
{
if (!Rfu.unk_cdc)
{
if (Rfu.unk_ce3)
{
- sub_8011D6C(Rfu.unk_ce3);
+ RfuReqDisconnectSlot(Rfu.unk_ce3);
Rfu.unk_ce3 = 0;
if (Rfu.unk_ce4 == 1)
{
- sub_8011A64(2, 0x8000);
- sub_8011170(0x8000);
+ RfuSetStatus(RFU_STATUS_CONNECTION_ERROR, 0x8000);
+ GetLinkmanErrorParams(0x8000);
return FALSE;
}
if (!lman.acceptSlot_flag)
{
- sub_800EDD4();
+ LinkRfu_Shutdown();
gReceivedRemoteLinkPlayers = 0;
return FALSE;
}
}
sub_800EFB0();
rfu_UNI_readySendData(Rfu.unk_cda);
- rfu_LMAN_REQ_sendData(1);
+ rfu_LMAN_REQ_sendData(TRUE);
}
else
{
rfu_REQ_PARENT_resumeRetransmitAndChange();
}
- Rfu.unk_0e = 1;
+ Rfu.unk_0e = TRUE;
}
}
return FALSE;
}
-bool32 sub_800F1E0(void)
+static bool32 sub_800F1E0(void)
{
u16 i;
u16 flags;
@@ -709,12 +773,12 @@ bool32 sub_800F1E0(void)
u16 j;
u8 retval;
- if (Rfu.unk_04 >= 20 && Rfu.unk_0e == 1)
+ if (Rfu.state >= 20 && Rfu.unk_0e == TRUE)
{
rfu_waitREQComplete();
- while (Rfu.unk_cdb == 0)
+ while (Rfu.unk_cdb == FALSE)
{
- if (Rfu.unk_ee != 0)
+ if (Rfu.errorState != 0)
{
return FALSE;
}
@@ -723,10 +787,10 @@ bool32 sub_800F1E0(void)
rfu_waitREQComplete();
if ((lman.parentAck_flag & Rfu.unk_ce2) == Rfu.unk_ce2)
{
- Rfu.unk_cdc = 0;
- gUnknown_02022B44.unk_06++;
+ Rfu.unk_cdc = FALSE;
+ sRfuDebug.unk_06++;
flags = lman.acceptSlot_flag;
- for (i = 0; i < 4; i++)
+ for (i = 0; i < RFU_CHILD_MAX; i++)
{
if (flags & 1)
{
@@ -735,14 +799,14 @@ bool32 sub_800F1E0(void)
if (Rfu.unk_cee[i] != 0xFF && (Rfu.unk_14[i][0] >> 5) != ((Rfu.unk_cee[i] + 1) & 7))
{
if (++Rfu.unk_cea[i] > 4)
- sub_8011170(0x8100);
+ GetLinkmanErrorParams(0x8100);
}
else
{
Rfu.unk_cee[i] = Rfu.unk_14[i][0] / 32;
Rfu.unk_cea[i] = 0;
Rfu.unk_14[i][0] &= 0x1f;
- r0 = Rfu.unk_cde[i];
+ r0 = Rfu.linkPlayerIdx[i];
for (j = 0; j < 7; j++)
{
gRecvCmds[r0][j] = (Rfu.unk_14[i][(j << 1) + 1] << 8) | Rfu.unk_14[i][(j << 1) + 0];
@@ -756,40 +820,40 @@ bool32 sub_800F1E0(void)
flags >>= 1;
}
sub_800F014();
- sub_800F86C(0);
- sub_8010528();
+ RfuHandleReceiveCommand(0);
+ CallRfuFunc();
if (Rfu.unk_ce5 && !Rfu.unk_cd9)
{
- gUnknown_02022B44.unk_0e = 0;
- rfu_clearSlot(3, Rfu.unk_cda);
- for (i = 0; i < 4; i++)
+ sRfuDebug.unk_0e = FALSE;
+ rfu_clearSlot(TYPE_UNI_SEND | TYPE_UNI_RECV, Rfu.unk_cda);
+ for (i = 0; i < RFU_CHILD_MAX; i++)
{
if ((Rfu.unk_ce5 >> i) & 1)
{
- rfu_setRecvBuffer(0x10, i, Rfu.unk_14[i], 14);
+ rfu_setRecvBuffer(TYPE_UNI, i, Rfu.unk_14[i], 14);
}
}
sub_800E88C(Rfu.unk_ce2, Rfu.unk_ce2 | Rfu.unk_ce5);
Rfu.unk_ce9 = Rfu.unk_ce5;
Rfu.unk_ce2 |= Rfu.unk_ce5;
Rfu.unk_ce5 = 0;
- rfu_UNI_setSendData(Rfu.unk_ce2, Rfu.unk_c87, 70);
+ rfu_UNI_setSendData(Rfu.unk_ce2, Rfu.recvCmds, 70);
Rfu.unk_cda = sub_800E87C(Rfu.unk_ce2);
- CreateTask(sub_8010AAC, 0);
+ CreateTask(Task_ExchangeLinkPlayers, 0);
}
}
else
{
- Rfu.unk_cdc = 1;
- Rfu.unk_0e = 0;
+ Rfu.unk_cdc = TRUE;
+ Rfu.unk_0e = FALSE;
}
- Rfu.unk_0e = 0;
+ Rfu.unk_0e = FALSE;
}
retval = Rfu.unk_cdc;
return gRfuLinkStatus->sendSlotUNIFlag ? retval & 1 : FALSE;
}
-void sub_800F498(u16 *a0, u8 *a1)
+static void sub_800F498(u16 *a0, u8 *a1)
{
s32 i;
@@ -810,15 +874,14 @@ void sub_800F498(u16 *a0, u8 *a1)
}
}
-bool32 sub_800F4F0(void)
+static bool32 RfuProcessEnqueuedRecvBlock(void)
{
- u8 i;
- u8 j;
+ u8 i, j;
u8 sp00[MAX_RFU_PLAYERS * (2 * (CMD_LENGTH - 1))];
u8 sp48[2 * (CMD_LENGTH - 1)];
- u8 switchval;
+ u8 status;
- sub_800D934(&Rfu.unk_124, sp00);
+ RfuRecvQueue_Dequeue(&Rfu.recvQueue, sp00);
for (i = 0; i < MAX_RFU_PLAYERS; i++)
{
for (j = 0; j < CMD_LENGTH - 1; j++)
@@ -826,21 +889,21 @@ bool32 sub_800F4F0(void)
gRecvCmds[i][j] = (sp00[i * 14 + (j << 1) + 1] << 8) | sp00[i * 14 + (j << 1) + 0];
}
}
- sub_800F86C(0);
+ RfuHandleReceiveCommand(0);
if (lman.childClockSlave_flag == 0 && Rfu.unk_ce4)
{
rfu_REQ_disconnect(gRfuLinkStatus->connSlotFlag | gRfuLinkStatus->linkLossSlotFlag);
rfu_waitREQComplete();
- switchval = sub_8011A74();
- if (switchval != 1 && switchval != 6 && switchval != 9)
- sub_8011A64(2, 0x9000);
+ status = RfuGetStatus();
+ if (status != RFU_STATUS_FATAL_ERROR && status != RFU_STATUS_JOIN_GROUP_NO && status != RFU_STATUS_LEAVE_GROUP)
+ RfuSetStatus(RFU_STATUS_CONNECTION_ERROR, 0x9000);
rfu_clearAllSlot();
gReceivedRemoteLinkPlayers = FALSE;
- Rfu.linkRfuCallback = NULL;
+ Rfu.callback = NULL;
if (Rfu.unk_ce4 == 1)
{
- sub_8011A64(2, 0x9000);
- sub_8011170(0x9000);
+ RfuSetStatus(RFU_STATUS_CONNECTION_ERROR, 0x9000);
+ GetLinkmanErrorParams(0x9000);
}
lman.state = lman.next_state = 0;
Rfu.unk_ce4 = 0;
@@ -848,177 +911,177 @@ bool32 sub_800F4F0(void)
if (Rfu.unk_cd0)
{
Rfu.unk_cd0--;
- sub_8010528();
+ CallRfuFunc();
sub_800F498(gSendCmd, sp48);
- sub_800D888(&Rfu.unk_9e8, sp48);
+ RfuSendQueue_Enqueue(&Rfu.sendQueue, sp48);
for (i = 0; i < CMD_LENGTH - 1; i++)
gSendCmd[i] = 0;
}
return IsRfuRecvQueueEmpty();
}
-void sub_800F638(u8 unused, u32 flags)
+static void HandleSendFailure(u8 unused, u32 flags)
{
- s32 i, j;
+ s32 i, j, temp;
- const u8 *r10 = Rfu.unk_6c.unk_04;
- for (i = 0; i < Rfu.unk_6c.unk_02; i++)
+ const u8 *r10 = Rfu.sendBlock.payload;
+ for (i = 0; i < Rfu.sendBlock.count; i++)
{
if (!(flags & 1))
{
- gUnknown_03000D90[0] = (~0x76ff) | i;
+ sResendBlock16[0] = RFUCMD_0x8900 | i;
for (j = 0; j < 7; j++)
{
- gUnknown_03000D90[j + 1] = (r10[12 * i + (j << 1) + 1] << 8) | r10[12 * i + (j << 1) + 0];
+ temp = j << 1;
+ sResendBlock16[j + 1] = (r10[i * 12 + temp + 1] << 8) | r10[i * 12 + temp];
}
+
for (j = 0; j < 7; j++)
{
- gUnknown_03000D80[2 * j + 1] = gUnknown_03000D90[j] >> 8;
- gUnknown_03000D80[2 * j + 0] = gUnknown_03000D90[j];
-
- j++;j--; // Needed to match;
+ temp = j << 1;
+ sResendBlock8[temp + 1] = sResendBlock16[j] >> 8;
+ sResendBlock8[temp + 0] = sResendBlock16[j] & 0xff;
}
- sub_800D888(&Rfu.unk_9e8, gUnknown_03000D80);
- Rfu.unk_6c.unk_0c |= (1 << i);
+ RfuSendQueue_Enqueue(&Rfu.sendQueue, sResendBlock8);
+ Rfu.sendBlock.failedFlags |= (1 << i);
}
flags >>= 1;
}
}
-void sub_800F6FC(u8 a0)
+void Rfu_SetBlockReceivedFlag(u8 linkPlayerId)
{
- if (Rfu.unk_0c == 1 && a0)
- Rfu.unk_61[a0] = 1;
+ if (Rfu.parentChild == MODE_PARENT && linkPlayerId)
+ Rfu.numBlocksReceived[linkPlayerId] = 1;
else
- Rfu.unk_5c[a0] = 1;
+ Rfu.blockReceived[linkPlayerId] = TRUE;
}
-void sub_800F728(u8 a0)
+void Rfu_ResetBlockReceivedFlag(u8 linkPlayerId)
{
- Rfu.unk_5c[a0] = 0;
- Rfu.unk_80[a0].unk_12 = 0;
+ Rfu.blockReceived[linkPlayerId] = FALSE;
+ Rfu.recvBlock[linkPlayerId].receiving = 0;
}
-u8 sub_800F74C(const u8 *a0)
+static u8 sub_800F74C(const u8 *a0)
{
u8 i;
- if (Rfu.unk_0c == 1)
+ if (Rfu.parentChild == MODE_PARENT)
return FALSE;
- for (i = 0; i < 4; i++)
+ for (i = 0; i < RFU_CHILD_MAX; i++)
{
- Rfu.unk_cde[i] = a0[i];
+ Rfu.linkPlayerIdx[i] = a0[i];
}
- return a0[Rfu.unk_c3e];
+ return a0[Rfu.childSlot];
}
-void rfu_func_080F97B8(void)
+static void RfuFunc_SendKeysToRfu(void)
{
if (gReceivedRemoteLinkPlayers
&& gHeldKeyCodeToSend != LINK_KEY_CODE_NULL
&& gLinkTransferringData != TRUE)
{
- gUnknown_03000D78[0]++;
- gHeldKeyCodeToSend |= (gUnknown_03000D78[0] << 8);
- sub_800FD14(0xbe00);
+ sHeldKeyCount++;
+ gHeldKeyCodeToSend |= (sHeldKeyCount << 8);
+ RfuPrepareSendBuffer(RFUCMD_SEND_HELD_KEYS);
}
}
-struct GFtgtGname *sub_800F7DC(void)
+struct GFtgtGname *GetHostRFUtgtGname(void)
{
- return &gUnknown_02022B14;
+ return &gHostRFUtgtGnameBuffer;
}
bool32 IsSendingKeysToRfu(void)
{
- return Rfu.linkRfuCallback == rfu_func_080F97B8;
+ return Rfu.callback == RfuFunc_SendKeysToRfu;
}
-void sub_800F804(void)
+void StartSendingKeysToRfu(void)
{
- Rfu.linkRfuCallback = rfu_func_080F97B8;
+ Rfu.callback = RfuFunc_SendKeysToRfu;
}
void ClearLinkRfuCallback(void)
{
- Rfu.linkRfuCallback = NULL;
+ Rfu.callback = NULL;
}
-void sub_800F820(void)
+static void Rfu_BerryBlenderSendHeldKeys(void)
{
- sub_800FD14(0x4400);
+ RfuPrepareSendBuffer(RFUCMD_BLENDER_SEND_KEYS);
if (GetMultiplayerId() == 0)
- gSendCmd[6] = GetBlenderArrowPosition();
- gUnknown_020223C0++;
+ gSendCmd[BLENDER_COMM_ARROW_POS] = GetBlenderArrowPosition();
+ gBerryBlenderKeySendAttempts++;
}
-void sub_800F850(void)
+void Rfu_SetBerryBlenderLinkCallback(void)
{
- if (Rfu.linkRfuCallback == NULL)
- Rfu.linkRfuCallback = sub_800F820;
+ if (Rfu.callback == NULL)
+ Rfu.callback = Rfu_BerryBlenderSendHeldKeys;
}
-void sub_800F86C(u8 unused)
+static void RfuHandleReceiveCommand(u8 unused)
{
- u16 i;
- u16 j;
+ u16 i, j;
for (i = 0; i < MAX_RFU_PLAYERS; i++)
{
switch (gRecvCmds[i][0] & 0xff00)
{
- case 0x7800:
- if (Rfu.unk_0c == 0 && gReceivedRemoteLinkPlayers != 0)
+ case RFUCMD_0x7800:
+ if (Rfu.parentChild == MODE_CHILD && gReceivedRemoteLinkPlayers)
return;
// fallthrough
- case 0x7700:
- if (gRfuLinkStatus->parentChild == 0)
+ case RFUCMD_0x7700:
+ if (gRfuLinkStatus->parentChild == MODE_CHILD)
{
Rfu.playerCount = gRecvCmds[i][1];
- Rfu.unk_cce = sub_800F74C((u8 *)(gRecvCmds[i] + 2));
+ Rfu.multiplayerId = sub_800F74C((u8 *)(&gRecvCmds[i][2]));
}
break;
- case 0x8800:
- if (Rfu.unk_80[i].unk_12 == 0)
+ case RFUCMD_0x8800:
+ if (Rfu.recvBlock[i].receiving == 0)
{
- Rfu.unk_80[i].unk_00 = 0;
- Rfu.unk_80[i].unk_02 = gRecvCmds[i][1];
- Rfu.unk_80[i].unk_11 = gRecvCmds[i][2];
- Rfu.unk_80[i].unk_08 = 0;
- Rfu.unk_80[i].unk_12 = 1;
- Rfu.unk_5c[i] = 0;
+ Rfu.recvBlock[i].next = 0;
+ Rfu.recvBlock[i].count = gRecvCmds[i][1];
+ Rfu.recvBlock[i].owner = gRecvCmds[i][2];
+ Rfu.recvBlock[i].receivedFlags = 0;
+ Rfu.recvBlock[i].receiving = 1;
+ Rfu.blockReceived[i] = FALSE;
}
break;
- case 0x8900:
- if (Rfu.unk_80[i].unk_12 == 1)
+ case RFUCMD_0x8900:
+ if (Rfu.recvBlock[i].receiving == 1)
{
- Rfu.unk_80[i].unk_00 = gRecvCmds[i][0] & 0xff;
- Rfu.unk_80[i].unk_08 |= (1 << Rfu.unk_80[i].unk_00);
+ Rfu.recvBlock[i].next = gRecvCmds[i][0] & 0xff;
+ Rfu.recvBlock[i].receivedFlags |= (1 << Rfu.recvBlock[i].next);
for (j = 0; j < 6; j++)
- gBlockRecvBuffer[i][Rfu.unk_80[i].unk_00 * 6 + j] = gRecvCmds[i][j + 1];
- if (Rfu.unk_80[i].unk_08 == gUnknown_082ED628[Rfu.unk_80[i].unk_02])
+ gBlockRecvBuffer[i][Rfu.recvBlock[i].next * 6 + j] = gRecvCmds[i][j + 1];
+ if (Rfu.recvBlock[i].receivedFlags == sAllBlocksReceived[Rfu.recvBlock[i].count])
{
- Rfu.unk_80[i].unk_12 = 2;
- sub_800F6FC(i);
- if (sub_800F7DC()->activity == 0x45 && gReceivedRemoteLinkPlayers != 0 && Rfu.unk_0c == 0)
- sub_8010A70(gBlockRecvBuffer);
+ Rfu.recvBlock[i].receiving = 2;
+ Rfu_SetBlockReceivedFlag(i);
+ if (GetHostRFUtgtGname()->activity == (ACTIVITY_CHAT | IN_UNION_ROOM) && gReceivedRemoteLinkPlayers != 0 && Rfu.parentChild == MODE_CHILD)
+ ValidateAndReceivePokemonSioInfo(gBlockRecvBuffer);
}
}
break;
- case 0xa100:
- sub_800FE84(gUnknown_082ED6B8[gRecvCmds[i][1]].buffer, (u16)gUnknown_082ED6B8[gRecvCmds[i][1]].size);
+ case RFUCMD_SEND_BLOCK_REQ:
+ Rfu_InitBlockSend(sBlockRequests[gRecvCmds[i][1]].address, (u16)sBlockRequests[gRecvCmds[i][1]].size);
break;
- case 0x5f00:
- Rfu.unk_e4[i] = 1;
+ case RFUCMD_READY_CLOSE_LINK:
+ Rfu.readyCloseLink[i] = TRUE;
break;
- case 0x6600:
+ case RFUCMD_READY_EXIT_STANDBY:
if (Rfu.unk_100 == gRecvCmds[i][1])
- Rfu.unk_e9[i] = 1;
+ Rfu.readyExitStandby[i] = TRUE;
break;
- case 0xed00:
- if (Rfu.unk_0c == 0)
+ case RFUCMD_0xED00:
+ if (Rfu.parentChild == MODE_CHILD)
{
- if (gReceivedRemoteLinkPlayers != 0)
+ if (gReceivedRemoteLinkPlayers)
{
if (gRecvCmds[i][1] & gRfuLinkStatus->connSlotFlag)
{
@@ -1027,86 +1090,86 @@ void sub_800F86C(u8 unused)
Rfu.unk_ce4 = gRecvCmds[i][2];
}
Rfu.playerCount = gRecvCmds[i][3];
- sub_80109E8(gRecvCmds[i][1]);
+ ClearSelectedLinkPlayerIds(gRecvCmds[i][1]);
}
}
else
{
- sub_800FD14(0xee00);
+ RfuPrepareSendBuffer(RFUCMD_0xEE00);
gSendCmd[1] = gRecvCmds[i][1];
gSendCmd[2] = gRecvCmds[i][2];
gSendCmd[3] = gRecvCmds[i][3];
}
break;
- case 0xee00:
- if (Rfu.unk_0c == 1)
+ case RFUCMD_0xEE00:
+ if (Rfu.parentChild == MODE_PARENT)
{
Rfu.unk_ce3 |= gRecvCmds[i][1];
Rfu.unk_ce4 = gRecvCmds[i][2];
- sub_80109E8(gRecvCmds[i][1]);
+ ClearSelectedLinkPlayerIds(gRecvCmds[i][1]);
}
break;
- case 0x4400:
- case 0xbe00:
+ case RFUCMD_BLENDER_SEND_KEYS:
+ case RFUCMD_SEND_HELD_KEYS:
gLinkPartnersHeldKeys[i] = gRecvCmds[i][1];
break;
}
- if (Rfu.unk_0c == 1 && Rfu.unk_61[i])
+ if (Rfu.parentChild == MODE_PARENT && Rfu.numBlocksReceived[i])
{
- if (Rfu.unk_61[i] == 4)
+ if (Rfu.numBlocksReceived[i] == 4)
{
- Rfu.unk_5c[i] = 1;
- Rfu.unk_61[i] = 0;
+ Rfu.blockReceived[i] = TRUE;
+ Rfu.numBlocksReceived[i] = 0;
}
else
- Rfu.unk_61[i]++;
+ Rfu.numBlocksReceived[i]++;
}
}
}
-bool8 sub_800FC60(void)
+static bool8 AreNoPlayersReceiving(void)
{
s32 i;
- for (i = 0; i < 5; i++)
+ for (i = 0; i < MAX_RFU_PLAYERS; i++)
{
- if (Rfu.unk_80[i].unk_12)
+ if (Rfu.recvBlock[i].receiving)
return FALSE;
}
return TRUE;
}
-bool8 sub_800FC88(void)
+static bool8 sub_800FC88(void)
{
s32 i;
for (i = 0; i < Rfu.playerCount; i++)
{
- if (Rfu.unk_80[i].unk_12 != 2 || Rfu.unk_5c[i] != 1)
+ if (Rfu.recvBlock[i].receiving != 2 || Rfu.blockReceived[i] != TRUE)
return FALSE;
}
return TRUE;
}
-void sub_800FCC4(struct UnkRfuStruct_2_Sub_6c *data)
+static void ResetSendDataManager(struct RfuBlockSend *data)
{
- data->unk_00 = 0;
- data->unk_02 = 0;
- data->unk_04 = NULL;
- data->unk_08 = 0;
- data->unk_10 = 0;
- data->unk_11 = 0;
- data->unk_12 = 0;
+ data->next = 0;
+ data->count = 0;
+ data->payload = NULL;
+ data->receivedFlags = 0;
+ data->sending = FALSE;
+ data->owner = 0;
+ data->receiving = 0;
}
-u8 sub_800FCD8(void)
+u8 Rfu_GetBlockReceivedStatus(void)
{
u8 flags = 0;
s32 i;
- for (i = 0; i < 5; i++)
+ for (i = 0; i < MAX_RFU_PLAYERS; i++)
{
- if (Rfu.unk_80[i].unk_12 == 2 && Rfu.unk_5c[i] == 1)
+ if (Rfu.recvBlock[i].receiving == 2 && Rfu.blockReceived[i] == TRUE)
{
flags |= (1 << i);
}
@@ -1114,7 +1177,7 @@ u8 sub_800FCD8(void)
return flags;
}
-void sub_800FD14(u16 command)
+static void RfuPrepareSendBuffer(u16 command)
{
u8 i;
u8 *buff;
@@ -1123,175 +1186,174 @@ void sub_800FD14(u16 command)
gSendCmd[0] = command;
switch (command)
{
- case 0x8800:
- gSendCmd[1] = Rfu.unk_6c.unk_02;
- gSendCmd[2] = Rfu.unk_6c.unk_11 + 0x80;
+ case RFUCMD_0x8800:
+ gSendCmd[1] = Rfu.sendBlock.count;
+ gSendCmd[2] = Rfu.sendBlock.owner + 0x80;
break;
- case 0xa100:
- if (sub_800FC60())
- gSendCmd[1] = Rfu.unk_5a;
+ case RFUCMD_SEND_BLOCK_REQ:
+ if (AreNoPlayersReceiving())
+ gSendCmd[1] = Rfu.blockRequestType;
break;
- case 0x7700:
- case 0x7800:
+ case RFUCMD_0x7700:
+ case RFUCMD_0x7800:
tmp = Rfu.unk_ce2 ^ Rfu.unk_ce3;
- Rfu.playerCount = gUnknown_082ED695[tmp] + 1;
+ Rfu.playerCount = sUnknown_082ED695[tmp] + 1;
gSendCmd[1] = Rfu.playerCount;
buff = (u8 *)(gSendCmd + 2);
- for (i = 0; i < 4; i++)
- buff[i] = Rfu.unk_cde[i];
+ for (i = 0; i < RFU_CHILD_MAX; i++)
+ buff[i] = Rfu.linkPlayerIdx[i];
break;
- case 0x6600:
- case 0x5f00:
+ case RFUCMD_READY_EXIT_STANDBY:
+ case RFUCMD_READY_CLOSE_LINK:
gSendCmd[1] = Rfu.unk_100;
break;
- case 0x4400:
+ case RFUCMD_BLENDER_SEND_KEYS:
gSendCmd[0] = command;
gSendCmd[1] = gMain.heldKeys;
break;
- case 0x2f00:
- for (i = 0; i < 6; i++)
- gSendCmd[1 + i] = Rfu.unk_f2[i];
+ case RFUCMD_SEND_PACKET:
+ for (i = 0; i < RFU_PACKET_SIZE; i++)
+ gSendCmd[1 + i] = Rfu.packet[i];
break;
- case 0xbe00:
+ case RFUCMD_SEND_HELD_KEYS:
gSendCmd[1] = gHeldKeyCodeToSend;
break;
- case 0xee00:
+ case RFUCMD_0xEE00:
break;
- case 0xed00:
+ case RFUCMD_0xED00:
break;
}
}
-void sub_800FE50(void *a0)
+void Rfu_SendPacket(void *data)
{
- if (gSendCmd[0] == 0 && !sub_8011A80())
+ if (gSendCmd[0] == 0 && !RfuHasErrored())
{
- memcpy(Rfu.unk_f2, a0, sizeof(Rfu.unk_f2));
- sub_800FD14(0x2f00);
+ memcpy(Rfu.packet, data, sizeof(Rfu.packet));
+ RfuPrepareSendBuffer(RFUCMD_SEND_PACKET);
}
}
-bool32 sub_800FE84(const u8 *src, size_t size)
+bool32 Rfu_InitBlockSend(const u8 *src, size_t size)
{
bool8 r4;
- if (Rfu.linkRfuCallback != NULL)
- return FALSE;
- if (gSendCmd[0] != 0)
+ if (Rfu.callback != NULL || gSendCmd[0] != 0)
return FALSE;
- if (Rfu.unk_6c.unk_10 != 0)
+
+ if (Rfu.sendBlock.sending)
{
- gUnknown_02022B44.unk_83++;
+ sRfuDebug.unk_83++;
return FALSE;
}
r4 = (size % 12) != 0;
- Rfu.unk_6c.unk_11 = GetMultiplayerId();
- Rfu.unk_6c.unk_10 = 1;
- Rfu.unk_6c.unk_02 = (size / 12) + r4;
- Rfu.unk_6c.unk_00 = 0;
+ Rfu.sendBlock.owner = GetMultiplayerId();
+ Rfu.sendBlock.sending = TRUE;
+ Rfu.sendBlock.count = (size / 12) + r4;
+ Rfu.sendBlock.next = 0;
if (size > 0x100)
- Rfu.unk_6c.unk_04 = src;
+ Rfu.sendBlock.payload = src;
else
{
if (src != gBlockSendBuffer)
memcpy(gBlockSendBuffer, src, size);
- Rfu.unk_6c.unk_04 = gBlockSendBuffer;
+ Rfu.sendBlock.payload = gBlockSendBuffer;
}
- sub_800FD14(0x8800);
- Rfu.linkRfuCallback = rfufunc_80F9F44;
+ RfuPrepareSendBuffer(RFUCMD_0x8800);
+ Rfu.callback = HandleBlockSend;
Rfu.unk_5b = 0;
return TRUE;
}
-void rfufunc_80F9F44(void)
+static void HandleBlockSend(void)
{
if (gSendCmd[0] == 0)
{
- sub_800FD14(0x8800);
- if (Rfu.unk_0c == 1)
+ RfuPrepareSendBuffer(RFUCMD_0x8800);
+ if (Rfu.parentChild == MODE_PARENT)
{
if (++Rfu.unk_5b > 2)
- Rfu.linkRfuCallback = sub_800FFB0;
+ Rfu.callback = SendNextBlock;
}
else
{
- if ((gRecvCmds[GetMultiplayerId()][0] & 0xff00) == 0x8800)
- Rfu.linkRfuCallback = sub_800FFB0;
+ if ((gRecvCmds[GetMultiplayerId()][0] & 0xff00) == RFUCMD_0x8800)
+ Rfu.callback = SendNextBlock;
}
}
}
-void sub_800FFB0(void)
+static void SendNextBlock(void)
{
s32 i;
- const u8 *src = Rfu.unk_6c.unk_04;
- gSendCmd[0] = 0x8900 | Rfu.unk_6c.unk_00;
- for (i = 0; i < 7; i++)
- gSendCmd[i + 1] = (src[(i << 1) + Rfu.unk_6c.unk_00 * 12 + 1] << 8) | src[(i << 1) + Rfu.unk_6c.unk_00 * 12 + 0];
- Rfu.unk_6c.unk_00++;
- if (Rfu.unk_6c.unk_02 <= Rfu.unk_6c.unk_00)
+ const u8 *src = Rfu.sendBlock.payload;
+ gSendCmd[0] = RFUCMD_0x8900 | Rfu.sendBlock.next;
+ for (i = 0; i < CMD_LENGTH - 1; i++)
+ gSendCmd[i + 1] = (src[(i << 1) + Rfu.sendBlock.next * 12 + 1] << 8) | src[(i << 1) + Rfu.sendBlock.next * 12 + 0];
+ Rfu.sendBlock.next++;
+ if (Rfu.sendBlock.count <= Rfu.sendBlock.next)
{
- Rfu.unk_6c.unk_10 = 0;
- Rfu.linkRfuCallback = rfufunc_80FA020;
+ Rfu.sendBlock.sending = FALSE;
+ Rfu.callback = SendLastBlock;
}
}
-void rfufunc_80FA020(void)
+static void SendLastBlock(void)
{
- const u8 *src = Rfu.unk_6c.unk_04;
+ const u8 *src = Rfu.sendBlock.payload;
u8 mpId = GetMultiplayerId();
s32 i;
- if (Rfu.unk_0c == 0)
+ if (Rfu.parentChild == MODE_CHILD)
{
- gSendCmd[0] = (~0x76ff) | (Rfu.unk_6c.unk_02 - 1);
- for (i = 0; i < 7; i++)
- gSendCmd[i + 1] = (src[(i << 1) + (Rfu.unk_6c.unk_02 - 1) * 12 + 1] << 8) | src[(i << 1) + (Rfu.unk_6c.unk_02 - 1) * 12 + 0];
- if ((u8)gRecvCmds[mpId][0] == Rfu.unk_6c.unk_02 - 1)
+ gSendCmd[0] = RFUCMD_0x8900 | (Rfu.sendBlock.count - 1);
+ for (i = 0; i < CMD_LENGTH - 1; i++)
+ gSendCmd[i + 1] = (src[(i << 1) + (Rfu.sendBlock.count - 1) * 12 + 1] << 8) | src[(i << 1) + (Rfu.sendBlock.count - 1) * 12 + 0];
+ if ((u8)gRecvCmds[mpId][0] == Rfu.sendBlock.count - 1)
{
- if (Rfu.unk_80[mpId].unk_08 != gUnknown_082ED628[Rfu.unk_80[mpId].unk_02])
+ if (Rfu.recvBlock[mpId].receivedFlags != sAllBlocksReceived[Rfu.recvBlock[mpId].count])
{
- sub_800F638(mpId, Rfu.unk_80[mpId].unk_08);
- gUnknown_02022B44.unk_64++;
+ HandleSendFailure(mpId, Rfu.recvBlock[mpId].receivedFlags);
+ sRfuDebug.unk_64++;
}
else
- Rfu.linkRfuCallback = NULL;
+ Rfu.callback = NULL;
}
}
else
- Rfu.linkRfuCallback = NULL;
+ Rfu.callback = NULL;
}
-bool8 sub_8010100(u8 a0)
+bool8 Rfu_SendBlockRequest(u8 type)
{
- Rfu.unk_5a = a0;
- sub_800FD14(0xa100);
+ Rfu.blockRequestType = type;
+ RfuPrepareSendBuffer(RFUCMD_SEND_BLOCK_REQ);
return TRUE;
}
-void sub_801011C(void)
+static void sub_801011C(void)
{
rfu_clearAllSlot();
rfu_LMAN_powerDownRFU();
gReceivedRemoteLinkPlayers = 0;
- Rfu.unk_ef = 1;
- Rfu.linkRfuCallback = NULL;
+ Rfu.isShuttingDown = TRUE;
+ Rfu.callback = NULL;
}
-void sub_8010148(void)
+static void DisconnectRfu(void)
{
rfu_REQ_disconnect(gRfuLinkStatus->connSlotFlag | gRfuLinkStatus->linkLossSlotFlag);
rfu_waitREQComplete();
sub_801011C();
}
-void sub_8010168(void)
+static void TryDisconnectRfu(void)
{
- if (Rfu.unk_0c == 0)
+ if (Rfu.parentChild == MODE_CHILD)
{
rfu_LMAN_requestChangeAgbClockMaster();
Rfu.unk_ce4 = 2;
}
else
- Rfu.linkRfuCallback = sub_8010148;
+ Rfu.callback = DisconnectRfu;
}
void LinkRfu_FatalError(void)
@@ -1301,141 +1363,141 @@ void LinkRfu_FatalError(void)
Rfu.unk_ce3 = gRfuLinkStatus->connSlotFlag | gRfuLinkStatus->linkLossSlotFlag;
}
-void sub_80101CC(void)
+// RFU equivalent of LinkCB_WaitCloseLink
+static void WaitAllReadyToCloseLink(void)
{
s32 i;
u8 playerCount = Rfu.playerCount;
s32 count = 0;
+ // Wait for all players to be ready
for (i = 0; i < MAX_RFU_PLAYERS; i++)
{
- if (Rfu.unk_e4[i])
+ if (Rfu.readyCloseLink[i])
count++;
}
if (count == playerCount)
{
+ // All ready, close link
gBattleTypeFlags &= ~BATTLE_TYPE_20;
- if (Rfu.unk_0c == 0)
+ if (Rfu.parentChild == MODE_CHILD)
{
- Rfu.unk_ee = 3;
- sub_8010168();
+ Rfu.errorState = 3;
+ TryDisconnectRfu();
}
else
- Rfu.linkRfuCallback = sub_8010168;
+ Rfu.callback = TryDisconnectRfu;
}
}
-void sub_801022C(void)
+static void SendReadyCloseLink(void)
{
if (gSendCmd[0] == 0 && Rfu.unk_ce8 == 0)
{
- sub_800FD14(0x5f00);
- Rfu.linkRfuCallback = sub_80101CC;
+ RfuPrepareSendBuffer(RFUCMD_READY_CLOSE_LINK);
+ Rfu.callback = WaitAllReadyToCloseLink;
}
}
-void sub_8010264(u8 taskId)
+static void Task_TryReadyCloseLink(u8 taskId)
{
- if (Rfu.linkRfuCallback == NULL)
+ if (Rfu.callback == NULL)
{
Rfu.unk_cd9 = 1;
- Rfu.linkRfuCallback = sub_801022C;
+ Rfu.callback = SendReadyCloseLink;
DestroyTask(taskId);
}
}
-void task_add_05_task_del_08FA224_when_no_RfuFunc(void)
+void Rfu_SetCloseLinkCallback(void)
{
- if (!FuncIsActiveTask(sub_8010264))
- CreateTask(sub_8010264, 5);
+ if (!FuncIsActiveTask(Task_TryReadyCloseLink))
+ CreateTask(Task_TryReadyCloseLink, 5);
}
-void sub_80102B8(void)
+static void SendReadyExitStandbyUntilAllReady(void)
{
- u8 playerCount;
- u8 i;
+ u8 i, playerCount;
- if (GetMultiplayerId() != 0)
+ if (GetMultiplayerId() != 0 && Rfu.recvQueue.count == 0 && Rfu.resendExitStandbyTimer > 60)
{
- u8 r4 = Rfu.unk_124.unk_8c2;
- if (r4 == 0 && Rfu.unk_fe > 0x3c)
- {
- sub_800FD14(0x6600);
- Rfu.unk_fe = r4;
- }
+ RfuPrepareSendBuffer(RFUCMD_READY_EXIT_STANDBY);
+ Rfu.resendExitStandbyTimer = 0;
}
playerCount = GetLinkPlayerCount();
for (i = 0; i < playerCount; i++)
{
- if (Rfu.unk_e9[i] == 0)
+ if (!Rfu.readyExitStandby[i])
break;
}
if (i == playerCount)
{
for (i = 0; i < MAX_RFU_PLAYERS; i++)
- Rfu.unk_e9[i] = 0;
+ Rfu.readyExitStandby[i] = FALSE;
Rfu.unk_100++;
- Rfu.linkRfuCallback = NULL;
+ Rfu.callback = NULL;
}
- Rfu.unk_fe++;
+ Rfu.resendExitStandbyTimer++;
}
-void sub_8010358(void)
+static void LinkLeaderReadyToExitStandby(void)
{
- if (Rfu.unk_124.unk_8c2 == 0 && gSendCmd[0] == 0)
+ if (Rfu.recvQueue.count == 0 && gSendCmd[0] == 0)
{
- sub_800FD14(0x6600);
- Rfu.linkRfuCallback = sub_80102B8;
+ RfuPrepareSendBuffer(RFUCMD_READY_EXIT_STANDBY);
+ Rfu.callback = SendReadyExitStandbyUntilAllReady;
}
}
-void sub_8010390(void)
+// RFU equivalent of LinkCB_Standby and LinkCB_StandbyForAll
+static void Rfu_LinkStandby(void)
{
- u8 i;
- u8 playerCount;
+ u8 i, playerCount;
if (GetMultiplayerId() != 0)
{
- if (Rfu.unk_124.unk_8c2 == 0 && gSendCmd[0] == 0)
+ // Not link leader, send exit standby when ready
+ if (Rfu.recvQueue.count == 0 && gSendCmd[0] == 0)
{
- sub_800FD14(0x6600);
- Rfu.linkRfuCallback = sub_80102B8;
+ RfuPrepareSendBuffer(RFUCMD_READY_EXIT_STANDBY);
+ Rfu.callback = SendReadyExitStandbyUntilAllReady;
}
}
else
{
+ // Link leader, wait for all members to send exit ready
playerCount = GetLinkPlayerCount();
for (i = 1; i < playerCount; i++)
{
- if (Rfu.unk_e9[i] == 0)
+ if (!Rfu.readyExitStandby[i])
break;
}
if (i == playerCount)
{
- if (Rfu.unk_124.unk_8c2 == 0 && gSendCmd[0] == 0)
+ if (Rfu.recvQueue.count == 0 && gSendCmd[0] == 0)
{
- sub_800FD14(0x6600);
- Rfu.linkRfuCallback = sub_8010358;
+ RfuPrepareSendBuffer(RFUCMD_READY_EXIT_STANDBY);
+ Rfu.callback = LinkLeaderReadyToExitStandby;
}
}
}
}
-void sub_8010434(void)
+void Rfu_SetLinkStandbyCallback(void)
{
- if (Rfu.linkRfuCallback == NULL)
+ if (Rfu.callback == NULL)
{
- Rfu.linkRfuCallback = sub_8010390;
- Rfu.unk_fe = 0;
+ Rfu.callback = Rfu_LinkStandby;
+ Rfu.resendExitStandbyTimer = 0;
}
}
-bool32 sub_8010454(u32 a0)
+bool32 IsRfuSerialNumberValid(u32 serialNo)
{
s32 i;
- for (i = 0; gUnknown_082ED6E0[i] != a0; i++)
+ for (i = 0; sAcceptedSerialNos[i] != serialNo; i++)
{
- if (gUnknown_082ED6E0[i] == 0xFFFF)
+ if (sAcceptedSerialNos[i] == 0xFFFF)
return FALSE;
}
return TRUE;
@@ -1445,7 +1507,7 @@ u8 sub_801048C(bool32 a0)
{
if (a0 == FALSE)
return rfu_LMAN_setLinkRecovery(0, 0);
- rfu_LMAN_setLinkRecovery(1, 0x258);
+ rfu_LMAN_setLinkRecovery(1, 600);
return 0;
}
@@ -1455,71 +1517,73 @@ void sub_80104B0(void)
rfu_LMAN_stopManager(FALSE);
}
-u8 rfu_get_multiplayer_id(void)
+u8 Rfu_GetMultiplayerId(void)
{
- if (Rfu.unk_0c == 1)
+ if (Rfu.parentChild == MODE_PARENT)
return 0;
- return Rfu.unk_cce;
+ return Rfu.multiplayerId;
}
-u8 sub_80104F4(void)
+u8 Rfu_GetLinkPlayerCount(void)
{
return Rfu.playerCount;
}
bool8 IsLinkRfuTaskFinished(void)
{
- if (Rfu.unk_f1 == 2)
+ if (Rfu.status == RFU_STATUS_CONNECTION_ERROR)
return FALSE;
- return Rfu.linkRfuCallback ? FALSE : TRUE;
+ return Rfu.callback ? FALSE : TRUE;
}
-void sub_8010528(void)
+static void CallRfuFunc(void)
{
- if (Rfu.linkRfuCallback)
- Rfu.linkRfuCallback();
+ if (Rfu.callback)
+ Rfu.callback();
}
-bool8 sub_8010540(void)
+static bool8 CheckForLeavingGroupMembers(void)
{
s32 i;
- bool8 retval = FALSE;
- for (i = 0; i < 4; i++)
+ bool8 memberLeft = FALSE;
+ for (i = 0; i < RFU_CHILD_MAX; i++)
{
- if (Rfu.unk_cd1[i] < 5 || Rfu.unk_cd1[i] > 6)
+ if (Rfu.partnerSendStatuses[i] == RFU_STATUS_JOIN_GROUP_OK
+ || Rfu.partnerSendStatuses[i] == RFU_STATUS_JOIN_GROUP_NO)
{
- if (gRfuSlotStatusNI[i]->recv.state == 0x46 || gRfuSlotStatusNI[i]->recv.state == 0x48)
- {
- if (Rfu.unk_cd5[i] == 8)
- {
- Rfu.unk_cd1[i] = 9;
- Rfu.unk_cd5[i] = 10;
- rfu_clearSlot(8, i);
- rfu_NI_setSendData(1 << i, 8, Rfu.unk_cd1 + i, 1);
- retval = TRUE;
- }
+ continue;
+ }
- }
- else if (gRfuSlotStatusNI[Rfu.unk_c3e]->recv.state == 0x47)
- rfu_clearSlot(8, i);
+ if (gRfuSlotStatusNI[i]->recv.state == SLOT_STATE_RECV_SUCCESS
+ || gRfuSlotStatusNI[i]->recv.state == SLOT_STATE_RECV_SUCCESS_AND_SENDSIDE_UNKNOWN)
+ {
+ if (Rfu.partnerRecvStatuses[i] == RFU_STATUS_LEAVE_GROUP_NOTICE)
{
-
+ Rfu.partnerSendStatuses[i] = RFU_STATUS_LEAVE_GROUP;
+ Rfu.partnerRecvStatuses[i] = RFU_STATUS_10;
+ rfu_clearSlot(TYPE_NI_RECV, i);
+ rfu_NI_setSendData(1 << i, 8, &Rfu.partnerSendStatuses[i], 1);
+ memberLeft = TRUE;
}
}
+ else if (gRfuSlotStatusNI[Rfu.childSlot]->recv.state == SLOT_STATE_RECV_FAILED)
+ {
+ rfu_clearSlot(TYPE_NI_RECV, i);
+ }
}
- return retval;
+ return memberLeft;
}
bool32 sub_80105EC(void)
{
u8 flags = 0;
s32 i;
- for (i = 0; i < 4; i++)
+ for (i = 0; i < RFU_CHILD_MAX; i++)
{
- if (Rfu.unk_cd5[i] == 11)
+ if (Rfu.partnerRecvStatuses[i] == RFU_STATUS_11)
{
flags |= (1 << i);
- Rfu.unk_cd5[i] = 0;
+ Rfu.partnerRecvStatuses[i] = RFU_STATUS_OK;
}
}
if (flags)
@@ -1527,335 +1591,339 @@ bool32 sub_80105EC(void)
rfu_REQ_disconnect(flags);
rfu_waitREQComplete();
}
- for (i = 0; i < 4; i++)
+ for (i = 0; i < RFU_CHILD_MAX; i++)
{
- if (Rfu.unk_cd5[i] == 10 || Rfu.unk_cd5[i] == 11)
+ if (Rfu.partnerRecvStatuses[i] == RFU_STATUS_10
+ || Rfu.partnerRecvStatuses[i] == RFU_STATUS_11)
return TRUE;
}
return FALSE;
}
-bool32 sub_801064C(u16 a0, const u8 *a1)
+bool32 HasTrainerLeftPartnersList(u16 trainerId, const u8 *name)
{
- u8 r1 = sub_8011CE4(a1, a0);
- if (r1 == 0xFF)
+ u8 idx = GetPartnerIndexByNameAndTrainerID(name, trainerId);
+ if (idx == 0xFF)
return TRUE;
- if (Rfu.unk_cd1[r1] == 9)
+ if (Rfu.partnerSendStatuses[idx] == RFU_STATUS_LEAVE_GROUP)
return TRUE;
return FALSE;
}
-void sub_8010688(u8 a0, u16 a1, const u8 *a2)
+void SendRfuStatusToPartner(u8 status, u16 trainerId, const u8 *name)
{
- u8 r4 = sub_8011CE4(a2, a1);
- Rfu.unk_cd1[r4] = a0;
- rfu_clearSlot(4, r4);
- rfu_NI_setSendData(1 << r4, 8, Rfu.unk_cd1 + r4, 1);
+ u8 idx = GetPartnerIndexByNameAndTrainerID(name, trainerId);
+ Rfu.partnerSendStatuses[idx] = status;
+ rfu_clearSlot(TYPE_NI_SEND, idx);
+ rfu_NI_setSendData(1 << idx, 8, &Rfu.partnerSendStatuses[idx], 1);
}
-void sub_80106D4(void)
+void SendLeaveGroupNotice(void)
{
- Rfu.unk_c85 = 8;
- rfu_clearSlot(4, Rfu.unk_c3e);
- rfu_NI_setSendData(1 << Rfu.unk_c3e, 8, &Rfu.unk_c85, 1);
+ Rfu.unk_c85 = RFU_STATUS_LEAVE_GROUP_NOTICE;
+ rfu_clearSlot(TYPE_NI_SEND, Rfu.childSlot);
+ rfu_NI_setSendData(1 << Rfu.childSlot, 8, &Rfu.unk_c85, 1);
}
-u32 sub_8010714(u16 a0, const u8 *a1)
+u32 WaitSendRfuStatusToPartner(u16 trainerId, const u8 *name)
{
- u8 r0 = sub_8011CE4(a1, a0);
- if (r0 == 0xFF)
+ u8 idx = GetPartnerIndexByNameAndTrainerID(name, trainerId);
+ if (idx == 0xFF)
return 2;
- if (gRfuSlotStatusNI[r0]->send.state == 0)
+ if (gRfuSlotStatusNI[idx]->send.state == 0)
return 1;
return 0;
}
-void sub_8010750(void)
+static void UpdateChildStatuses(void)
{
s32 i;
- sub_8010540();
- for (i = 0; i < 4; i++)
+ CheckForLeavingGroupMembers();
+ for (i = 0; i < RFU_CHILD_MAX; i++)
{
- if (gRfuSlotStatusNI[i]->send.state == 0x26 || gRfuSlotStatusNI[i]->send.state == 0x27)
+ if (gRfuSlotStatusNI[i]->send.state == SLOT_STATE_SEND_SUCCESS
+ || gRfuSlotStatusNI[i]->send.state == SLOT_STATE_SEND_FAILED)
{
- if (Rfu.unk_cd5[i] == 10)
- Rfu.unk_cd5[i] = 11;
- rfu_clearSlot(4, i);
+ if (Rfu.partnerRecvStatuses[i] == RFU_STATUS_10)
+ Rfu.partnerRecvStatuses[i] = RFU_STATUS_11;
+ rfu_clearSlot(TYPE_NI_SEND, i);
}
}
}
-s32 sub_80107A0(void)
+static s32 sub_80107A0(void)
{
- s32 retval = 0;
+ s32 status = RFU_STATUS_OK;
if (Rfu.unk_c85 == 8)
{
- if (gRfuSlotStatusNI[Rfu.unk_c3e]->send.state == 0x26 || gRfuSlotStatusNI[Rfu.unk_c3e]->send.state == 0x27)
- rfu_clearSlot(4, Rfu.unk_c3e);
+ if (gRfuSlotStatusNI[Rfu.childSlot]->send.state == SLOT_STATE_SEND_SUCCESS
+ || gRfuSlotStatusNI[Rfu.childSlot]->send.state == SLOT_STATE_SEND_FAILED)
+ rfu_clearSlot(TYPE_NI_SEND, Rfu.childSlot);
}
- if (gRfuSlotStatusNI[Rfu.unk_c3e]->recv.state == 0x46 || gRfuSlotStatusNI[Rfu.unk_c3e]->recv.state == 0x48)
+ if (gRfuSlotStatusNI[Rfu.childSlot]->recv.state == SLOT_STATE_RECV_SUCCESS
+ || gRfuSlotStatusNI[Rfu.childSlot]->recv.state == SLOT_STATE_RECV_SUCCESS_AND_SENDSIDE_UNKNOWN)
{
- rfu_clearSlot(8, Rfu.unk_c3e);
- sub_8011A64(Rfu.unk_c86, 0);
- retval = Rfu.unk_c86;
+ rfu_clearSlot(TYPE_NI_RECV, Rfu.childSlot);
+ RfuSetStatus(Rfu.recvStatus, 0);
+ status = Rfu.recvStatus;
}
- else if (gRfuSlotStatusNI[Rfu.unk_c3e]->recv.state == 0x47)
+ else if (gRfuSlotStatusNI[Rfu.childSlot]->recv.state == SLOT_STATE_RECV_FAILED)
{
- rfu_clearSlot(8, Rfu.unk_c3e);
- retval = 6;
+ rfu_clearSlot(TYPE_NI_RECV, Rfu.childSlot);
+ status = RFU_STATUS_JOIN_GROUP_NO;
}
- return retval;
+ return status;
}
-void sub_801084C(u8 taskId)
+static void sub_801084C(u8 taskId)
{
s32 i;
- if (Rfu.unk_f1 == 1 || Rfu.unk_f1 == 2)
+ if (Rfu.status == RFU_STATUS_FATAL_ERROR || Rfu.status == RFU_STATUS_CONNECTION_ERROR)
{
Rfu.unk_ce8 = 0;
DestroyTask(taskId);
}
switch (gTasks[taskId].data[0])
{
- case 0:
- if (sub_800FC60())
- {
- ResetBlockReceivedFlags();
- sub_800B348();
- gTasks[taskId].data[0]++;
- }
- break;
- case 1:
- if (Rfu.unk_0c == 1)
- {
- if (gReceivedRemoteLinkPlayers)
- sub_800FD14(0x7800);
- else
- sub_800FD14(0x7700);
- gTasks[taskId].data[0] = 101;
- }
+ case 0:
+ if (AreNoPlayersReceiving())
+ {
+ ResetBlockReceivedFlags();
+ sub_800B348();
+ gTasks[taskId].data[0]++;
+ }
+ break;
+ case 1:
+ if (Rfu.parentChild == MODE_PARENT)
+ {
+ if (gReceivedRemoteLinkPlayers)
+ RfuPrepareSendBuffer(RFUCMD_0x7800);
else
- gTasks[taskId].data[0] = 2;
- break;
- case 101:
- if (gSendCmd[0] == 0)
- gTasks[taskId].data[0] = 2;
- break;
- case 2:
- if (Rfu.playerCount)
- gTasks[taskId].data[0]++;
- break;
- case 3:
- if (Rfu.unk_0c == 1)
+ RfuPrepareSendBuffer(RFUCMD_0x7700);
+ gTasks[taskId].data[0] = 101;
+ }
+ else
+ gTasks[taskId].data[0] = 2;
+ break;
+ case 101:
+ if (gSendCmd[0] == 0)
+ gTasks[taskId].data[0] = 2;
+ break;
+ case 2:
+ if (Rfu.playerCount)
+ gTasks[taskId].data[0]++;
+ break;
+ case 3:
+ if (Rfu.parentChild == MODE_PARENT)
+ {
+ if (AreNoPlayersReceiving())
{
- if (sub_800FC60())
- {
- Rfu.unk_5a = 0;
- sub_800FD14(0xa100);
- gTasks[taskId].data[0]++;
- }
- }
- else
- gTasks[taskId].data[0]++;
- break;
- case 4:
- if (sub_800FC88())
+ Rfu.blockRequestType = 0;
+ RfuPrepareSendBuffer(RFUCMD_SEND_BLOCK_REQ);
gTasks[taskId].data[0]++;
- break;
- case 5:
- for (i = 0; i < Rfu.playerCount; i++)
- {
- sub_800B3A4(i);
- sub_800F728(i);
}
+ }
+ else
gTasks[taskId].data[0]++;
- break;
- case 6:
- DestroyTask(taskId);
- gReceivedRemoteLinkPlayers = 1;
- Rfu.unk_ce8 = 0;
- rfu_LMAN_setLinkRecovery(1, 0x258);
- if (Rfu.unk_ce6)
+ break;
+ case 4:
+ if (sub_800FC88())
+ gTasks[taskId].data[0]++;
+ break;
+ case 5:
+ for (i = 0; i < Rfu.playerCount; i++)
+ {
+ LinkPlayerFromBlock(i);
+ Rfu_ResetBlockReceivedFlag(i);
+ }
+ gTasks[taskId].data[0]++;
+ break;
+ case 6:
+ DestroyTask(taskId);
+ gReceivedRemoteLinkPlayers = TRUE;
+ Rfu.unk_ce8 = FALSE;
+ rfu_LMAN_setLinkRecovery(1, 600);
+ if (Rfu.unk_ce6)
+ {
+ for (i = 0; i < RFU_CHILD_MAX; i++)
{
- for (i = 0; i < 4; i++)
+ if ((Rfu.unk_ce6 >> i) & 1)
{
- if ((Rfu.unk_ce6 >> i) & 1)
- {
- Rfu.unk_ce5 = 1 << i;
- Rfu.unk_ce6 ^= (1 << i);
- }
+ Rfu.unk_ce5 = 1 << i;
+ Rfu.unk_ce6 ^= (1 << i);
}
}
- break;
+ }
+ break;
}
}
-void sub_80109E8(u16 a0)
+static void ClearSelectedLinkPlayerIds(u16 selected)
{
s32 i;
- for (i = 0; i < 4; i++)
+ for (i = 0; i < RFU_CHILD_MAX; i++)
{
- if ((a0 >> i) & 1)
- Rfu.unk_cde[i] = 0;
+ if ((selected >> i) & 1)
+ Rfu.linkPlayerIdx[i] = 0;
}
}
-void sub_8010A14(const struct UnkRfuStruct_8010A14 *a0)
+static void ReceiveRfuLinkPlayers(const struct SioInfo *sioInfo)
{
s32 i;
- Rfu.playerCount = a0->unk_0f;
- for (i = 0; i < 4; i++)
- Rfu.unk_cde[i] = a0->unk_10[i];
+ Rfu.playerCount = sioInfo->playerCount;
+ for (i = 0; i < RFU_CHILD_MAX; i++)
+ Rfu.linkPlayerIdx[i] = sioInfo->linkPlayerIdx[i];
for (i = 0; i < MAX_RFU_PLAYERS; i++)
{
- gLinkPlayers[i] = a0->unk_14[i];
+ gLinkPlayers[i] = sioInfo->linkPlayers[i];
sub_800B524(gLinkPlayers + i);
}
}
-void sub_8010A70(void *a0)
+static void ValidateAndReceivePokemonSioInfo(void *recvBuffer)
{
- if (strcmp(gUnknown_082ED7EC, a0) == 0)
+ if (strcmp(sASCII_PokemonSioInfo, recvBuffer) == 0)
{
- sub_8010A14(a0);
- CpuFill16(0, a0, sizeof(struct UnkRfuStruct_8010A14));
+ ReceiveRfuLinkPlayers(recvBuffer);
+ CpuFill16(0, recvBuffer, sizeof(struct SioInfo));
ResetBlockReceivedFlag(0);
}
}
-void sub_8010AAC(u8 taskId)
+static void Task_ExchangeLinkPlayers(u8 taskId)
{
s32 i;
struct LinkPlayerBlock *r2;
- struct UnkRfuStruct_8010A14 *r5;
- u8 r4 = Rfu.unk_cde[gUnknown_082ED68C[Rfu.unk_ce9]];
- if (Rfu.unk_f1 == 1 || Rfu.unk_f1 == 2)
+ struct SioInfo *r5;
+ u8 r4 = Rfu.linkPlayerIdx[sUnknown_082ED68C[Rfu.unk_ce9]];
+ if (Rfu.status == RFU_STATUS_FATAL_ERROR || Rfu.status == RFU_STATUS_CONNECTION_ERROR)
{
Rfu.unk_ce8 = 0;
DestroyTask(taskId);
}
switch (gTasks[taskId].data[0])
{
- case 0:
- if (gSendCmd[0] == 0)
- {
- ResetBlockReceivedFlag(r4);
- sub_800FD14(0x7800);
- gTasks[taskId].data[0]++;
- }
- break;
- case 1:
- if (gSendCmd[0] == 0)
- gTasks[taskId].data[0]++;
- break;
- case 2:
- if ((GetBlockReceivedStatus() >> r4) & 1)
- {
- ResetBlockReceivedFlag(r4);
- r2 = (struct LinkPlayerBlock *)gBlockRecvBuffer[r4];
- gLinkPlayers[r4] = r2->linkPlayer;
- sub_800B524(gLinkPlayers + r4);
- gTasks[taskId].data[0]++;
- }
- break;
- case 3:
- r5 = (struct UnkRfuStruct_8010A14 *)gBlockSendBuffer;
- memcpy(r5->unk_00, gUnknown_082ED7EC, sizeof gUnknown_082ED7EC);
- r5->unk_0f = Rfu.playerCount;
- for (i = 0; i < 4; i++)
- r5->unk_10[i] = Rfu.unk_cde[i];
- memcpy(r5->unk_14, gLinkPlayers, sizeof gLinkPlayers);
+ case 0:
+ if (gSendCmd[0] == 0)
+ {
+ ResetBlockReceivedFlag(r4);
+ RfuPrepareSendBuffer(RFUCMD_0x7800);
gTasks[taskId].data[0]++;
- // fallthrough
- case 4:
- r5 = (struct UnkRfuStruct_8010A14 *)gBlockSendBuffer;
- r5->unk_0f = Rfu.playerCount;
- for (i = 0; i < 4; i++)
- r5->unk_10[i] = Rfu.unk_cde[i];
- memcpy(r5->unk_14, gLinkPlayers, sizeof gLinkPlayers);
- if (SendBlock(0, gBlockSendBuffer, 0xa0))
- gTasks[taskId].data[0]++;
- break;
- case 5:
- if (IsLinkTaskFinished() && GetBlockReceivedStatus() & 1)
+ }
+ break;
+ case 1:
+ if (gSendCmd[0] == 0)
+ gTasks[taskId].data[0]++;
+ break;
+ case 2:
+ if ((GetBlockReceivedStatus() >> r4) & 1)
+ {
+ ResetBlockReceivedFlag(r4);
+ r2 = (struct LinkPlayerBlock *)gBlockRecvBuffer[r4];
+ gLinkPlayers[r4] = r2->linkPlayer;
+ sub_800B524(gLinkPlayers + r4);
+ gTasks[taskId].data[0]++;
+ }
+ break;
+ case 3:
+ r5 = (struct SioInfo *)gBlockSendBuffer;
+ memcpy(r5->magic, sASCII_PokemonSioInfo, sizeof sASCII_PokemonSioInfo);
+ r5->playerCount = Rfu.playerCount;
+ for (i = 0; i < RFU_CHILD_MAX; i++)
+ r5->linkPlayerIdx[i] = Rfu.linkPlayerIdx[i];
+ memcpy(r5->linkPlayers, gLinkPlayers, sizeof gLinkPlayers);
+ gTasks[taskId].data[0]++;
+ // fallthrough
+ case 4:
+ r5 = (struct SioInfo *)gBlockSendBuffer;
+ r5->playerCount = Rfu.playerCount;
+ for (i = 0; i < RFU_CHILD_MAX; i++)
+ r5->linkPlayerIdx[i] = Rfu.linkPlayerIdx[i];
+ memcpy(r5->linkPlayers, gLinkPlayers, sizeof gLinkPlayers);
+ if (SendBlock(0, gBlockSendBuffer, 0xa0))
+ gTasks[taskId].data[0]++;
+ break;
+ case 5:
+ if (IsLinkTaskFinished() && GetBlockReceivedStatus() & 1)
+ {
+ CpuFill16(0, gBlockRecvBuffer, sizeof(struct SioInfo));
+ ResetBlockReceivedFlag(0);
+ Rfu.unk_ce8 = 0;
+ if (Rfu.unk_ce6)
{
- CpuFill16(0, gBlockRecvBuffer, sizeof(struct UnkRfuStruct_8010A14));
- ResetBlockReceivedFlag(0);
- Rfu.unk_ce8 = 0;
- if (Rfu.unk_ce6)
+ for (i = 0; i < 4; i++)
{
- for (i = 0; i < 4; i++)
+ if ((Rfu.unk_ce6 >> i) & 1)
{
- if ((Rfu.unk_ce6 >> i) & 1)
- {
- Rfu.unk_ce5 = 1 << i;
- Rfu.unk_ce6 ^= (1 << i);
- Rfu.unk_ce8 = 1;
- break;
- }
+ Rfu.unk_ce5 = 1 << i;
+ Rfu.unk_ce6 ^= (1 << i);
+ Rfu.unk_ce8 = 1;
+ break;
}
}
- DestroyTask(taskId);
}
- break;
+ DestroyTask(taskId);
+ }
+ break;
}
}
-void sub_8010D0C(u8 taskId)
+static void sub_8010D0C(u8 taskId)
{
- if (Rfu.unk_f1 == 1 || Rfu.unk_f1 == 2)
+ if (Rfu.status == RFU_STATUS_FATAL_ERROR || Rfu.status == RFU_STATUS_CONNECTION_ERROR)
DestroyTask(taskId);
switch (gTasks[taskId].data[0])
{
- case 0:
- if (Rfu.playerCount)
- {
- sub_800B348();
- SendBlock(0, gBlockSendBuffer, sizeof(struct LinkPlayerBlock));
- gTasks[taskId].data[0]++;
- }
- break;
- case 1:
- if (IsLinkTaskFinished())
- gTasks[taskId].data[0]++;
- break;
- case 2:
- if (GetBlockReceivedStatus() & 1)
- {
- sub_8010A14((const struct UnkRfuStruct_8010A14 *)gBlockRecvBuffer);
- ResetBlockReceivedFlag(0);
- gReceivedRemoteLinkPlayers = 1;
- DestroyTask(taskId);
- }
- break;
+ case 0:
+ if (Rfu.playerCount)
+ {
+ sub_800B348();
+ SendBlock(0, gBlockSendBuffer, sizeof(struct LinkPlayerBlock));
+ gTasks[taskId].data[0]++;
+ }
+ break;
+ case 1:
+ if (IsLinkTaskFinished())
+ gTasks[taskId].data[0]++;
+ break;
+ case 2:
+ if (GetBlockReceivedStatus() & 1)
+ {
+ ReceiveRfuLinkPlayers((const struct SioInfo *)gBlockRecvBuffer);
+ ResetBlockReceivedFlag(0);
+ gReceivedRemoteLinkPlayers = 1;
+ DestroyTask(taskId);
+ }
+ break;
}
}
-void sub_8010DB4(void)
+static void RfuCheckErrorStatus(void)
{
- if (Rfu.unk_ee == 1 && lman.childClockSlave_flag == 0)
+ if (Rfu.errorState == 1 && lman.childClockSlave_flag == 0)
{
if (gMain.callback2 == c2_mystery_gift_e_reader_run || lman.init_param->mboot_flag)
gWirelessCommType = 2;
SetMainCallback2(CB2_LinkError);
gMain.savedCallback = CB2_LinkError;
- sub_800AF18((Rfu.unk_0a << 16) | (Rfu.unk_10 << 8) | Rfu.unk_12, Rfu.unk_124.unk_8c2, Rfu.unk_9e8.unk_232, sub_8011A74() == 2);
- Rfu.unk_ee = 2;
+ BufferLinkErrorInfo((Rfu.linkmanMsg << 16) | (Rfu.unk_10 << 8) | Rfu.unk_12, Rfu.recvQueue.count, Rfu.sendQueue.count, RfuGetStatus() == RFU_STATUS_CONNECTION_ERROR);
+ Rfu.errorState = 2;
CloseLink();
}
- else if (Rfu.unk_9e8.unk_233 == 1 || Rfu.unk_124.unk_8c3 == 1)
+ else if (Rfu.sendQueue.full == TRUE || Rfu.recvQueue.full == TRUE)
{
if (lman.childClockSlave_flag)
rfu_LMAN_requestChangeAgbClockMaster();
- sub_8011A64(1, 0x7000);
- sub_8011170(0x7000);
+ RfuSetStatus(RFU_STATUS_FATAL_ERROR, 0x7000);
+ GetLinkmanErrorParams(0x7000);
}
}
-void rfu_REQ_recvData_then_sendData(void)
+static void rfu_REQ_recvData_then_sendData(void)
{
if (lman.parent_child == 1)
{
@@ -1868,21 +1936,21 @@ void rfu_REQ_recvData_then_sendData(void)
bool32 sub_8010EC0(void)
{
bool32 retval = FALSE;
- Rfu.unk_ccd = 0;
+ Rfu.parentId = 0;
rfu_LMAN_manager_entity(Random2());
- if (Rfu.unk_ef == 0)
+ if (!Rfu.isShuttingDown)
{
- switch (Rfu.unk_0c)
+ switch (Rfu.parentChild)
{
- case 1:
- sub_800F0F8();
- break;
- case 0:
- retval = sub_800F4F0();
- break;
- case 2:
- rfu_REQ_recvData_then_sendData();
- break;
+ case MODE_PARENT:
+ sub_800F0F8();
+ break;
+ case MODE_CHILD:
+ retval = RfuProcessEnqueuedRecvBlock();
+ break;
+ case 2:
+ rfu_REQ_recvData_then_sendData();
+ break;
}
}
return retval;
@@ -1891,42 +1959,42 @@ bool32 sub_8010EC0(void)
bool32 sub_8010F1C(void)
{
bool32 retval = FALSE;
- if (Rfu.unk_ef == 0)
+ if (!Rfu.isShuttingDown)
{
- if (Rfu.unk_0c == 1)
+ if (Rfu.parentChild == MODE_PARENT)
retval = sub_800F1E0();
- sub_8010DB4();
+ RfuCheckErrorStatus();
}
return retval;
}
-void sub_8010F48(void)
+static void CopyPlayerNameToUnameBuffer(void)
{
- StringCopy(gUnknown_02022B22, gSaveBlock2Ptr->playerName);
+ StringCopy(gHostRFUtgtUnameBuffer, gSaveBlock2Ptr->playerName);
}
-void sub_8010F60(void)
+void ClearAndInitHostRFUtgtGname(void)
{
- memset(&gUnknown_02022B14, 0, 0xD);
- sub_800DD94(&gUnknown_02022B14, 0, 0, 0);
+ memset(&gHostRFUtgtGnameBuffer, 0, RFU_GAME_NAME_LENGTH);
+ InitHostRFUtgtGname(&gHostRFUtgtGnameBuffer, ACTIVITY_NONE, FALSE, 0);
}
-void sub_8010F84(u8 a0, u32 a1, u32 a2)
+void SetHostRFUtgtGname(u8 activity, u32 child_sprite_genders, bool32 started)
{
- sub_800DD94(&gUnknown_02022B14, a0, a2, a1);
+ InitHostRFUtgtGname(&gHostRFUtgtGnameBuffer, activity, started, child_sprite_genders);
}
-void sub_8010FA0(bool32 a0, bool32 a1)
+void SetGnameBufferWonderFlags(bool32 hasNews, bool32 hasCard)
{
- gUnknown_02022B14.unk_00.hasNews = a0;
- gUnknown_02022B14.unk_00.hasCard = a1;
+ gHostRFUtgtGnameBuffer.unk_00.hasNews = hasNews;
+ gHostRFUtgtGnameBuffer.unk_00.hasCard = hasCard;
}
-void sub_8010FCC(u32 type, u32 species, u32 level)
+void SetTradeBoardRegisteredMonInfo(u32 type, u32 species, u32 level)
{
- gUnknown_02022B14.type = type;
- gUnknown_02022B14.species = species;
- gUnknown_02022B14.level = level;
+ gHostRFUtgtGnameBuffer.type = type;
+ gHostRFUtgtGnameBuffer.species = species;
+ gHostRFUtgtGnameBuffer.level = level;
}
u8 sub_801100C(s32 a0)
@@ -1939,244 +2007,251 @@ u8 sub_801100C(s32 a0)
void sub_801103C(void)
{
- struct GFtgtGname *r5 = &gUnknown_02022B14;
+ struct GFtgtGname *r5 = &gHostRFUtgtGnameBuffer;
s32 i;
for (i = 1; i < GetLinkPlayerCount(); i++)
r5->child_sprite_gender[i - 1] = sub_801100C(i);
}
-void sub_8011068(u8 a0)
+void UpdateGameData_GroupLockedIn(bool8 started)
{
- gUnknown_02022B14.started = a0;
- rfu_REQ_configGameData(0, 2, (const u8 *)&gUnknown_02022B14, gUnknown_02022B22);
+ gHostRFUtgtGnameBuffer.started = started;
+ rfu_REQ_configGameData(0, 2, (void *)&gHostRFUtgtGnameBuffer, gHostRFUtgtUnameBuffer);
}
-void sub_8011090(u8 a0, u32 a1, u32 a2)
+void UpdateGameData_SetActivity(u8 activity, u32 flags, bool32 started)
{
- if (a0)
- sub_8010F84(a0, a1, a2);
- rfu_REQ_configGameData(0, 2, (const u8 *)&gUnknown_02022B14, gUnknown_02022B22);
+ if (activity != ACTIVITY_NONE)
+ SetHostRFUtgtGname(activity, flags, started);
+ rfu_REQ_configGameData(0, 2, (void *)&gHostRFUtgtGnameBuffer, gHostRFUtgtUnameBuffer);
}
void sub_80110B8(u32 a0)
{
s32 i;
- u32 r5;
- u32 r7;
+ u32 numConnectedChildren;
+ u32 child_sprite_genders;
s32 r8;
- if (sub_800F7DC()->activity == 0x45)
+ if (GetHostRFUtgtGname()->activity == (ACTIVITY_CHAT | IN_UNION_ROOM))
{
- r5 = 0;
- r7 = 0;
+ numConnectedChildren = 0;
+ child_sprite_genders = 0;
r8 = Rfu.unk_ce2 ^ Rfu.unk_ce3;
for (i = 0; i < 4; i++)
{
if ((r8 >> i) & 1)
{
- r7 |= ((0x80 | ((gLinkPlayers[Rfu.unk_cde[i]].gender & 1) << 3) | (gLinkPlayers[Rfu.unk_cde[i]].trainerId & 7)) << (r5 << 3));
- r5++;
- if (r5 == a0 - 1)
+ child_sprite_genders |= ((0x80 | ((gLinkPlayers[Rfu.linkPlayerIdx[i]].gender & 1) << 3) | (gLinkPlayers[Rfu.linkPlayerIdx[i]].trainerId & 7)) << (numConnectedChildren << 3));
+ numConnectedChildren++;
+ if (numConnectedChildren == a0 - 1)
break;
}
}
- sub_8011090(0x45, r7, 0);
+ UpdateGameData_SetActivity((ACTIVITY_CHAT | IN_UNION_ROOM), child_sprite_genders, FALSE);
}
}
-void sub_8011170(u32 a0)
+void GetLinkmanErrorParams(u32 msg)
{
- if (Rfu.unk_ee == 0)
+ if (Rfu.errorState == 0)
{
Rfu.unk_10 = lman.param[0];
Rfu.unk_12 = lman.param[1];
- Rfu.unk_0a = a0;
- Rfu.unk_ee = 1;
+ Rfu.linkmanMsg = msg;
+ Rfu.errorState = 1;
}
}
-void sub_80111A0(void)
+static void ResetErrorState(void)
{
- Rfu.unk_ee = 0;
+ Rfu.errorState = 0;
}
void sub_80111B0(bool32 a0)
{
if (!a0)
- Rfu.unk_ee = 0;
+ Rfu.errorState = 0;
else
- Rfu.unk_ee = 4;
+ Rfu.errorState = 4;
}
-void sub_80111DC(void)
+static void sub_80111DC(void)
{
sub_8011E94(lman.acceptSlot_flag, 1);
- Rfu.linkRfuCallback = NULL;
+ Rfu.callback = NULL;
}
-void sub_80111FC(void)
+static void sub_80111FC(void)
{
- Rfu.linkRfuCallback = sub_80111DC;
+ Rfu.callback = sub_80111DC;
}
-void sub_801120C(u8 a0, u8 unused1)
+static void sub_801120C(u8 msg, u8 paramCount)
{
- u8 i;
- u8 r6 = 0;
- switch (a0)
+ u8 i, disconnectFlag = 0;
+ switch (msg)
{
- case 0x00:
- Rfu.unk_04 = 2;
+ case LMAN_MSG_INITIALIZE_COMPLETED:
+ Rfu.state = 2;
break;
- case 0x10:
+ case LMAN_MSG_NEW_CHILD_CONNECT_DETECTED:
break;
- case 0x11:
+ case LMAN_MSG_NEW_CHILD_CONNECT_ACCEPTED:
sub_80115EC(lman.param[0]);
- for (i = 0; i < 4; i++)
+ for (i = 0; i < RFU_CHILD_MAX; i++)
{
if ((lman.param[0] >> i) & 1)
{
struct GFtgtGname *structPtr = (void *)gRfuLinkStatus->partner[i].gname;
- if (structPtr->activity == sub_800F7DC()->activity)
+ if (structPtr->activity == GetHostRFUtgtGname()->activity)
{
- Rfu.unk_cd1[i] = 0;
- Rfu.unk_cd5[i] = 0;
- rfu_setRecvBuffer(0x20, i, Rfu.unk_cd5 + i, 1);
+ Rfu.partnerSendStatuses[i] = RFU_STATUS_OK;
+ Rfu.partnerRecvStatuses[i] = RFU_STATUS_OK;
+ rfu_setRecvBuffer(TYPE_NI, i, &Rfu.partnerRecvStatuses[i], 1);
}
else
{
- r6 |= (1 << i);
+ disconnectFlag |= (1 << i);
}
}
}
- if (r6)
+ if (disconnectFlag)
{
- rfu_REQ_disconnect(r6);
+ rfu_REQ_disconnect(disconnectFlag);
rfu_waitREQComplete();
}
break;
- case 0x12:
+ case LMAN_MSG_NEW_CHILD_CONNECT_REJECTED:
break;
- case 0x13:
+ case LMAN_MSG_SEARCH_CHILD_PERIOD_EXPIRED:
break;
- case 0x14:
- if (Rfu.unk_ce7 != lman.acceptSlot_flag)
+ case LMAN_MSG_END_WAIT_CHILD_NAME:
+ if (Rfu.acceptSlot_flag != lman.acceptSlot_flag)
{
- rfu_REQ_disconnect(Rfu.unk_ce7 ^ lman.acceptSlot_flag);
+ rfu_REQ_disconnect(Rfu.acceptSlot_flag ^ lman.acceptSlot_flag);
rfu_waitREQComplete();
}
- Rfu.unk_04 = 0x11;
+ Rfu.state = 17;
break;
- case 0x31:
- Rfu.unk_f0 = 1;
+ case LMAN_MSG_LINK_LOSS_DETECTED_AND_START_RECOVERY:
+ Rfu.linkLossRecoveryState = 1;
break;
- case 0x32:
- Rfu.unk_f0 = 3;
+ case LMAN_MSG_LINK_RECOVERY_SUCCESSED:
+ Rfu.linkLossRecoveryState = 3;
break;
- case 0x30:
- case 0x33:
- Rfu.unk_f0 = 4;
+ case LMAN_MSG_LINK_LOSS_DETECTED_AND_DISCONNECTED:
+ case LMAN_MSG_LINK_RECOVERY_FAILED_AND_DISCONNECTED:
+ Rfu.linkLossRecoveryState = 4;
Rfu.unk_ce2 &= ~lman.param[0];
if (gReceivedRemoteLinkPlayers == 1)
{
if (Rfu.unk_ce2 == 0)
- sub_8011170(a0);
+ GetLinkmanErrorParams(msg);
else
sub_80111FC();
}
- sub_8011A64(2, a0);
+ RfuSetStatus(RFU_STATUS_CONNECTION_ERROR, msg);
break;
case 0x34:
break;
- case 0x42 ... 0x44:
+ case LMAN_MSG_RFU_POWER_DOWN:
+ case LMAN_MSG_MANAGER_STOPPED:
+ case LMAN_MSG_MANAGER_FORCED_STOPPED_AND_RFU_RESET:
break;
- case 0xf3:
- sub_8011A64(1, a0);
- sub_8011170(a0);
- Rfu.unk_ef = 1;
+ case LMAN_MSG_LMAN_API_ERROR_RETURN:
+ RfuSetStatus(RFU_STATUS_FATAL_ERROR, msg);
+ GetLinkmanErrorParams(msg);
+ Rfu.isShuttingDown = TRUE;
break;
- case 0xf0 ... 0xf2:
- case 0xff:
- sub_8011170(a0);
- sub_8011A64(1, a0);
- Rfu.unk_cdb = 1;
+ case LMAN_MSG_REQ_API_ERROR:
+ case LMAN_MSG_WATCH_DOG_TIMER_ERROR:
+ case LMAN_MSG_CLOCK_SLAVE_MS_CHANGE_ERROR_BY_DMA:
+ case LMAN_MSG_RFU_FATAL_ERROR:
+ GetLinkmanErrorParams(msg);
+ RfuSetStatus(RFU_STATUS_FATAL_ERROR, msg);
+ Rfu.unk_cdb = TRUE;
break;
}
}
-void sub_8011404(u8 a0, u8 unused1)
+void sub_8011404(u8 msg, u8 unused1)
{
- switch (a0)
+ switch (msg)
{
- case 0x00:
- Rfu.unk_04 = 6;
+ case LMAN_MSG_INITIALIZE_COMPLETED:
+ Rfu.state = 6;
break;
- case 0x20:
- Rfu.unk_ccd = lman.param[0];
+ case LMAN_MSG_PARENT_FOUND:
+ Rfu.parentId = lman.param[0];
break;
- case 0x21:
+ case LMAN_MSG_SEARCH_PARENT_PERIOD_EXPIRED:
break;
- case 0x22:
- Rfu.unk_c3e = lman.param[0];
+ case LMAN_MSG_CONNECT_PARENT_SUCCESSED:
+ Rfu.childSlot = lman.param[0];
break;
- case 0x23:
- sub_8011A64(2, a0);
+ case LMAN_MSG_CONNECT_PARENT_FAILED:
+ RfuSetStatus(RFU_STATUS_CONNECTION_ERROR, msg);
break;
- case 0x24:
- Rfu.unk_04 = 11;
+ case LMAN_MSG_CHILD_NAME_SEND_COMPLETED:
+ Rfu.state = 11;
Rfu.unk_c85 = 0;
- Rfu.unk_c86 = 0;
- rfu_setRecvBuffer(0x20, Rfu.unk_c3e, &Rfu.unk_c86, 1);
- rfu_setRecvBuffer(0x10, Rfu.unk_c3e, Rfu.unk_c3f, 70);
+ Rfu.recvStatus = RFU_STATUS_OK;
+ rfu_setRecvBuffer(TYPE_NI, Rfu.childSlot, &Rfu.recvStatus, 1);
+ rfu_setRecvBuffer(TYPE_UNI, Rfu.childSlot, Rfu.unk_c3f, 70);
break;
- case 0x25:
- sub_8011A64(2, 0x25);
+ case LMAN_MSG_CHILD_NAME_SEND_FAILED_AND_DISCONNECTED:
+ RfuSetStatus(RFU_STATUS_CONNECTION_ERROR, msg);
break;
- case 0x30:
- Rfu.unk_f0 = 2;
- if (Rfu.unk_c86 == 6)
+ case LMAN_MSG_LINK_LOSS_DETECTED_AND_DISCONNECTED:
+ Rfu.linkLossRecoveryState = 2;
+ if (Rfu.recvStatus == RFU_STATUS_JOIN_GROUP_NO)
break;
- case 0x33:
- if (Rfu.unk_f0 != 2)
- Rfu.unk_f0 = 4;
- if (Rfu.unk_c86 != 9)
- sub_8011A64(2, a0);
- nullsub_5(gUnknown_082ED7FC, 5, 5);
+ case LMAN_MSG_LINK_RECOVERY_FAILED_AND_DISCONNECTED:
+ if (Rfu.linkLossRecoveryState != 2)
+ Rfu.linkLossRecoveryState = 4;
+ if (Rfu.recvStatus != RFU_STATUS_LEAVE_GROUP)
+ RfuSetStatus(RFU_STATUS_CONNECTION_ERROR, msg);
+ Debug_PrintString(sASCII_LinkLossDisconnect, 5, 5);
if (gReceivedRemoteLinkPlayers == 1)
- sub_8011170(a0);
+ GetLinkmanErrorParams(msg);
break;
- case 0x31:
- Rfu.unk_f0 = 1;
- nullsub_5(gUnknown_082ED814, 5, 5);
+ case LMAN_MSG_LINK_LOSS_DETECTED_AND_START_RECOVERY:
+ Rfu.linkLossRecoveryState = 1;
+ Debug_PrintString(sASCII_LinkLossRecoveryNow, 5, 5);
break;
- case 0x32:
- Rfu.unk_f0 = 3;
- Rfu.unk_c3c = 1;
+ case LMAN_MSG_LINK_RECOVERY_SUCCESSED:
+ Rfu.linkLossRecoveryState = 3;
+ Rfu.linkRecovered = TRUE;
break;
case 0x34:
break;
- case 0x42 ... 0x44:
+ case LMAN_MSG_RFU_POWER_DOWN:
+ case LMAN_MSG_MANAGER_STOPPED:
+ case LMAN_MSG_MANAGER_FORCED_STOPPED_AND_RFU_RESET:
break;
- case 0xF3:
- sub_8011A64(1, a0);
- sub_8011170(a0);
- Rfu.unk_ef = 1;
+ case LMAN_MSG_LMAN_API_ERROR_RETURN:
+ RfuSetStatus(RFU_STATUS_FATAL_ERROR, msg);
+ GetLinkmanErrorParams(msg);
+ Rfu.isShuttingDown = TRUE;
break;
- case 0xF0 ... 0xF2:
- case 0xFF:
- sub_8011A64(1, a0);
- sub_8011170(a0);
- Rfu.unk_cdb = 1;
+ case LMAN_MSG_REQ_API_ERROR:
+ case LMAN_MSG_WATCH_DOG_TIMER_ERROR:
+ case LMAN_MSG_CLOCK_SLAVE_MS_CHANGE_ERROR_BY_DMA:
+ case LMAN_MSG_RFU_FATAL_ERROR:
+ RfuSetStatus(RFU_STATUS_FATAL_ERROR, msg);
+ GetLinkmanErrorParams(msg);
+ Rfu.unk_cdb = TRUE;
break;
}
}
-void sub_80115EC(s32 a0)
+static void sub_80115EC(s32 a0)
{
s32 i;
- for (i = 0; i < 4; i++)
+ for (i = 0; i < RFU_CHILD_MAX; i++)
{
if ((a0 >> i) & 1)
{
@@ -2186,17 +2261,17 @@ void sub_80115EC(s32 a0)
}
}
-u8 sub_8011628(s32 a0)
+static u8 GetNewChildrenInUnionRoomChat(s32 a0)
{
u8 ret = 0;
u8 i;
- for (i = 0; i < 4; i++)
+ for (i = 0; i < RFU_CHILD_MAX; i++)
{
if ((a0 >> i) & 1)
{
struct GFtgtGname *structPtr = (void *)gRfuLinkStatus->partner[i].gname;
- if (structPtr->activity == 0x45)
+ if (structPtr->activity == (ACTIVITY_CHAT | IN_UNION_ROOM))
ret |= (1 << i);
}
}
@@ -2204,22 +2279,22 @@ u8 sub_8011628(s32 a0)
return ret;
}
-void sub_8011674(u8 a0, u8 unused1)
+static void sub_8011674(u8 msg, u8 paramCount)
{
u8 r1;
- switch (a0)
+ switch (msg)
{
- case 0x00:
- Rfu.unk_04 = 0x11;
+ case LMAN_MSG_INITIALIZE_COMPLETED:
+ Rfu.state = 17;
break;
- case 0x10:
- sub_8011A64(4, 0);
+ case LMAN_MSG_NEW_CHILD_CONNECT_DETECTED:
+ RfuSetStatus(RFU_STATUS_NEW_CHILD_DETECTED, 0);
break;
- case 0x11:
- if (sub_800F7DC()->activity == 0x45 && Rfu.unk_cd9 == 0)
+ case LMAN_MSG_NEW_CHILD_CONNECT_ACCEPTED:
+ if (GetHostRFUtgtGname()->activity == (ACTIVITY_CHAT | IN_UNION_ROOM) && Rfu.unk_cd9 == 0)
{
- u8 idx = sub_8011628(lman.param[0]);
+ u8 idx = GetNewChildrenInUnionRoomChat(lman.param[0]);
if (idx != 0)
{
r1 = 1 << sub_800E87C(idx);
@@ -2227,7 +2302,7 @@ void sub_8011674(u8 a0, u8 unused1)
{
Rfu.unk_ce5 = r1;
Rfu.unk_ce6 |= (r1 ^ idx);
- Rfu.unk_ce8 = 1;
+ Rfu.unk_ce8 = TRUE;
}
else
{
@@ -2240,38 +2315,38 @@ void sub_8011674(u8 a0, u8 unused1)
Rfu.unk_ce4 = 2;
}
}
- else if (sub_800F7DC()->activity == 0x54)
+ else if (GetHostRFUtgtGname()->activity == (ACTIVITY_PLYRTALK | IN_UNION_ROOM))
{
rfu_REQ_disconnect(lman.acceptSlot_flag);
rfu_waitREQComplete();
}
sub_80115EC(lman.param[0]);
break;
- case 0x12:
+ case LMAN_MSG_NEW_CHILD_CONNECT_REJECTED:
break;
- case 0x13:
+ case LMAN_MSG_SEARCH_CHILD_PERIOD_EXPIRED:
break;
- case 0x14:
- if (sub_800F7DC()->activity != 0x45 && lman.acceptCount > 1)
+ case LMAN_MSG_END_WAIT_CHILD_NAME:
+ if (GetHostRFUtgtGname()->activity != (ACTIVITY_CHAT | IN_UNION_ROOM) && lman.acceptCount > 1)
{
r1 = 1 << sub_800E87C(lman.param[0]);
rfu_REQ_disconnect(lman.acceptSlot_flag ^ r1);
rfu_waitREQComplete();
}
- if (Rfu.unk_04 == 0xF)
- Rfu.unk_04 = 0x10;
+ if (Rfu.state == 15)
+ Rfu.state = 16;
break;
break;
- case 0x20:
- Rfu.unk_ccd = lman.param[0];
+ case LMAN_MSG_PARENT_FOUND:
+ Rfu.parentId = lman.param[0];
break;
- case 0x21:
+ case LMAN_MSG_SEARCH_PARENT_PERIOD_EXPIRED:
break;
- case 0x22:
- Rfu.unk_c3e = lman.param[0];
+ case LMAN_MSG_CONNECT_PARENT_SUCCESSED:
+ Rfu.childSlot = lman.param[0];
break;
- case 0x23:
- Rfu.unk_04 = 0x12;
+ case LMAN_MSG_CONNECT_PARENT_FAILED:
+ Rfu.state = 18;
if (Rfu.unk_ccf < 2)
{
Rfu.unk_ccf++;
@@ -2279,68 +2354,72 @@ void sub_8011674(u8 a0, u8 unused1)
}
else
{
- sub_8011A64(2, a0);
+ RfuSetStatus(RFU_STATUS_CONNECTION_ERROR, msg);
}
break;
- case 0x24:
- Rfu.unk_04 = 0xD;
- sub_8011A64(3, 0);
- rfu_setRecvBuffer(0x10, Rfu.unk_c3e, Rfu.unk_c3f, 70);
+ case LMAN_MSG_CHILD_NAME_SEND_COMPLETED:
+ Rfu.state = 13;
+ RfuSetStatus(RFU_STATUS_CHILD_SEND_COMPLETE, 0);
+ rfu_setRecvBuffer(TYPE_UNI, Rfu.childSlot, Rfu.unk_c3f, 70);
break;
- case 0x25:
- sub_8011A64(2, a0);
+ case LMAN_MSG_CHILD_NAME_SEND_FAILED_AND_DISCONNECTED:
+ RfuSetStatus(RFU_STATUS_CONNECTION_ERROR, msg);
break;
- case 0x31:
+ case LMAN_MSG_LINK_LOSS_DETECTED_AND_START_RECOVERY:
if (lman.acceptSlot_flag & lman.param[0])
- Rfu.unk_f0 = 1;
+ Rfu.linkLossRecoveryState = 1;
break;
- case 0x32:
- Rfu.unk_f0 = 3;
- if (gRfuLinkStatus->parentChild == 0)
- Rfu.unk_c3c = 1;
+ case LMAN_MSG_LINK_RECOVERY_SUCCESSED:
+ Rfu.linkLossRecoveryState = 3;
+ if (gRfuLinkStatus->parentChild == MODE_CHILD)
+ Rfu.linkRecovered = TRUE;
break;
- case 0x30:
- Rfu.unk_f0 = 2;
- case 0x33:
- if (Rfu.unk_f0 != 2)
- Rfu.unk_f0 = 4;
- if (Rfu.unk_0c == 1)
+ case LMAN_MSG_LINK_LOSS_DETECTED_AND_DISCONNECTED:
+ Rfu.linkLossRecoveryState = 2;
+ case LMAN_MSG_LINK_RECOVERY_FAILED_AND_DISCONNECTED:
+ if (Rfu.linkLossRecoveryState != 2)
+ Rfu.linkLossRecoveryState = 4;
+ if (Rfu.parentChild == MODE_PARENT)
{
if (gReceivedRemoteLinkPlayers == 1)
{
Rfu.unk_ce2 &= ~(lman.param[0]);
if (Rfu.unk_ce2 == 0)
- sub_8011170(a0);
+ GetLinkmanErrorParams(msg);
else
sub_80111FC();
}
}
else if (Rfu.unk_ce4 != 2 && gReceivedRemoteLinkPlayers == 1)
{
- sub_8011170(a0);
+ GetLinkmanErrorParams(msg);
rfu_LMAN_stopManager(0);
}
- if (gRfuLinkStatus->parentChild == 0xFF && lman.pcswitch_flag == 0 && FuncIsActiveTask(sub_800EB44) == TRUE)
- Rfu.unk_04 = 0x11;
+ if (gRfuLinkStatus->parentChild == MODE_NEUTRAL && lman.pcswitch_flag == 0 && FuncIsActiveTask(Task_LinkRfu_UnionRoomListen) == TRUE)
+ Rfu.state = 17;
- sub_8011A64(2, a0);
+ RfuSetStatus(RFU_STATUS_CONNECTION_ERROR, msg);
break;
- case 0x40:
+ case LMAN_MSG_LINK_DISCONNECTED_BY_USER:
Rfu.unk_ce3 = 0;
break;
- case 0x42 ... 0x44:
+ case LMAN_MSG_RFU_POWER_DOWN:
+ case LMAN_MSG_MANAGER_STOPPED:
+ case LMAN_MSG_MANAGER_FORCED_STOPPED_AND_RFU_RESET:
break;
- case 0xF3:
- sub_8011A64(1, a0);
- sub_8011170(a0);
- Rfu.unk_ef = 1;
+ case LMAN_MSG_LMAN_API_ERROR_RETURN:
+ RfuSetStatus(RFU_STATUS_FATAL_ERROR, msg);
+ GetLinkmanErrorParams(msg);
+ Rfu.isShuttingDown = TRUE;
break;
- case 0xF0 ... 0xF2:
- case 0xFF:
- sub_8011170(a0);
- sub_8011A64(1, a0);
- Rfu.unk_cdb = 0;
+ case LMAN_MSG_REQ_API_ERROR:
+ case LMAN_MSG_WATCH_DOG_TIMER_ERROR:
+ case LMAN_MSG_CLOCK_SLAVE_MS_CHANGE_ERROR_BY_DMA:
+ case LMAN_MSG_RFU_FATAL_ERROR:
+ GetLinkmanErrorParams(msg);
+ RfuSetStatus(RFU_STATUS_FATAL_ERROR, msg);
+ Rfu.unk_cdb = FALSE;
break;
}
}
@@ -2350,21 +2429,22 @@ void sub_8011A50(void)
Rfu.unk_ce4 = 2;
}
-void sub_8011A64(u8 a0, u16 a1)
+void RfuSetStatus(u8 status, u16 msg)
{
- Rfu.unk_f1 = a0;
- Rfu.unk_0a = a1;
+ Rfu.status = status;
+ Rfu.linkmanMsg = msg;
}
-u8 sub_8011A74(void)
+u8 RfuGetStatus(void)
{
- return Rfu.unk_f1;
+ return Rfu.status;
}
-bool32 sub_8011A80(void)
+bool32 RfuHasErrored(void)
{
- u32 var = sub_8011A74() - 1;
- if (var < 2)
+ // RFU_STATUS_OK will underflow here intentionally
+ u32 var = RfuGetStatus() - 1;
+ if (var < RFU_STATUS_CONNECTION_ERROR)
return TRUE;
else
return FALSE;
@@ -2377,7 +2457,7 @@ bool32 sub_8011A9C(void)
bool8 Rfu_IsMaster(void)
{
- return Rfu.unk_0c;
+ return Rfu.parentChild;
}
void RfuVSync(void)
@@ -2390,14 +2470,14 @@ void sub_8011AC8(void)
CpuFill32(0, gRecvCmds, sizeof(gRecvCmds));
}
-void sub_8011AE8(void)
+static void sub_8011AE8(void)
{
LoadOam();
ProcessSpriteCopyRequests();
TransferPlttBuffer();
}
-void sub_8011AFC(void)
+static void sub_8011AFC(void)
{
s32 i;
@@ -2408,8 +2488,8 @@ void sub_8011AFC(void)
SetVBlankCallback(sub_8011AE8);
if (IsWirelessAdapterConnected())
{
- gLinkType = LINKTYPE_0x1111;
- sub_800B488();
+ gLinkType = LINKTYPE_TRADE;
+ SetWirelessCommType1();
OpenLink();
SeedRng(gMain.vblankCounter2);
for (i = 0; i < 4; i++)
@@ -2420,29 +2500,29 @@ void sub_8011AFC(void)
AnimateSprites();
BuildOamBuffer();
UpdatePaletteFade();
- sub_8011BA4();
+ CreateTask_RfuIdle();
SetMainCallback2(sub_8011BF8);
}
}
-bool32 sub_8011B90(void)
+bool32 IsUnionRoomListenTaskActive(void)
{
- return FuncIsActiveTask(sub_800EB44);
+ return FuncIsActiveTask(Task_LinkRfu_UnionRoomListen);
}
-void sub_8011BA4(void)
+void CreateTask_RfuIdle(void)
{
- if (!FuncIsActiveTask(nullsub_89))
- Rfu.unk_66 = CreateTask(nullsub_89, 0);
+ if (!FuncIsActiveTask(Task_Idle))
+ Rfu.idleTaskId = CreateTask(Task_Idle, 0);
}
-void sub_8011BD0(void)
+void DestroyTask_RfuIdle(void)
{
- if (FuncIsActiveTask(nullsub_89) == TRUE)
- DestroyTask(Rfu.unk_66);
+ if (FuncIsActiveTask(Task_Idle) == TRUE)
+ DestroyTask(Rfu.idleTaskId);
}
-void sub_8011BF8(void)
+static void sub_8011BF8(void)
{
RunTasks();
AnimateSprites();
@@ -2450,77 +2530,77 @@ void sub_8011BF8(void)
UpdatePaletteFade();
}
-void sub_8011C10(u32 a0)
+void InitializeRfuLinkManager_LinkLeader(u32 a0)
{
- Rfu.unk_0c = 1;
- sub_8010F48();
+ Rfu.parentChild = MODE_PARENT;
+ CopyPlayerNameToUnameBuffer();
rfu_LMAN_initializeManager(sub_801120C, NULL);
- gUnknown_02022B2C = gUnknown_082ED608;
- gUnknown_02022B2C.availSlot_flag = gUnknown_082ED620[a0 - 1];
- sub_800EE78();
+ sRfuReqConfig = sRfuReqConfigTemplate;
+ sRfuReqConfig.availSlot_flag = sAvailSlots[a0 - 1];
+ CreateTask_LinkLeaderSearchForChildren();
}
-void sub_8011C5C(void)
+void InitializeRfuLinkManager_JoinGroup(void)
{
- Rfu.unk_0c = 0;
- sub_8010F48();
+ Rfu.parentChild = MODE_CHILD;
+ CopyPlayerNameToUnameBuffer();
rfu_LMAN_initializeManager(sub_8011404, sub_800ED34);
- sub_800EF00();
+ CreateTask_JoinGroupSearchForParent();
}
-void sub_8011C84(void)
+void InitializeRfuLinkManager_EnterUnionRoom(void)
{
- Rfu.unk_0c = 2;
- sub_8010F48();
+ Rfu.parentChild = 2;
+ CopyPlayerNameToUnameBuffer();
rfu_LMAN_initializeManager(sub_8011674, NULL);
- gUnknown_02022B2C = gUnknown_082ED608;
- gUnknown_02022B2C.linkRecovery_enable = 0;
- gUnknown_02022B2C.linkRecovery_period = 0x258;
- Rfu.unk_67 = CreateTask(sub_800EB44, 1);
+ sRfuReqConfig = sRfuReqConfigTemplate;
+ sRfuReqConfig.linkRecovery_enable = 0;
+ sRfuReqConfig.linkRecovery_period = 600;
+ Rfu.searchTaskId = CreateTask(Task_LinkRfu_UnionRoomListen, 1);
}
-u16 ReadU16(const void *ptr)
+static u16 ReadU16(const void *ptr)
{
const u8 *ptr_ = ptr;
return (ptr_[1] << 8) | (ptr_[0]);
}
-u8 sub_8011CE4(const u8 *a0, u16 a1)
+static u8 GetPartnerIndexByNameAndTrainerID(const u8 *name, u16 id)
{
u8 i;
- u8 ret = 0xFF;
+ u8 idx = 0xFF;
- for (i = 0; i < 4; i++)
+ for (i = 0; i < RFU_CHILD_MAX; i++)
{
u16 trainerId = ReadU16(gRfuLinkStatus->partner[i].gname + 2);
- if (sub_8010454(gRfuLinkStatus->partner[i].serialNo)
- && !StringCompare(a0, gRfuLinkStatus->partner[i].uname)
- && a1 == trainerId)
+ if (IsRfuSerialNumberValid(gRfuLinkStatus->partner[i].serialNo)
+ && !StringCompare(name, gRfuLinkStatus->partner[i].uname)
+ && id == trainerId)
{
- ret = i;
+ idx = i;
if (gRfuLinkStatus->partner[i].slot != 0xFF)
break;
}
}
- return ret;
+ return idx;
}
-void sub_8011D6C(u32 a0)
+static void RfuReqDisconnectSlot(u32 slot)
{
- rfu_REQ_disconnect(a0);
+ rfu_REQ_disconnect(slot);
rfu_waitREQComplete();
- Rfu.unk_ce2 &= ~(a0);
+ Rfu.unk_ce2 &= ~(slot);
rfu_clearSlot(1, Rfu.unk_cda);
- rfu_UNI_setSendData(Rfu.unk_ce2, Rfu.unk_c87, 70);
+ rfu_UNI_setSendData(Rfu.unk_ce2, Rfu.recvCmds, 70);
Rfu.unk_cda = sub_800E87C(Rfu.unk_ce2);
}
-void sub_8011DC0(const u8 *ptr, u16 a1)
+void RequestDisconnectSlotByTrainerNameAndId(const u8 *name, u16 id)
{
- u8 var = sub_8011CE4(ptr, a1);
+ u8 var = GetPartnerIndexByNameAndTrainerID(name, id);
if (var != 0xFF)
- sub_8011D6C(1 << var);
+ RfuReqDisconnectSlot(1 << var);
}
void sub_8011DE0(u32 a0)
@@ -2530,9 +2610,9 @@ void sub_8011DE0(u32 a0)
s32 i;
u8 var = 0;
- for (i = 0; i < 4; i++)
+ for (i = 0; i < RFU_CHILD_MAX; i++)
{
- if (Rfu.unk_cde[i] == a0 && (Rfu.unk_ce2 >> i) & 1)
+ if (Rfu.linkPlayerIdx[i] == a0 && (Rfu.unk_ce2 >> i) & 1)
var |= 1 << i;
}
if (var)
@@ -2540,20 +2620,20 @@ void sub_8011DE0(u32 a0)
}
}
-void sub_8011E2C(u8 taskId)
+static void sub_8011E2C(u8 taskId)
{
if (gSendCmd[0] == 0 && Rfu.unk_ce8 == 0)
{
- sub_800FD14(0xED00);
+ RfuPrepareSendBuffer(RFUCMD_0xED00);
gSendCmd[1] = gTasks[taskId].data[0];
gSendCmd[2] = gTasks[taskId].data[1];
- Rfu.playerCount -= gUnknown_082ED695[gTasks[taskId].data[0]];
+ Rfu.playerCount -= sUnknown_082ED695[gTasks[taskId].data[0]];
gSendCmd[3] = Rfu.playerCount;
DestroyTask(taskId);
}
}
-void sub_8011E94(u32 a0, u32 a1)
+static void sub_8011E94(u32 a0, u32 a1)
{
u8 taskId = FindTaskIdByFunc(sub_8011E2C);
if (taskId == 0xFF)
@@ -2569,28 +2649,29 @@ void sub_8011E94(u32 a0, u32 a1)
gTasks[taskId].data[1] = a1;
}
-void sub_8011EF4(u8 taskId)
+static void Task_RfuReconnectWithParent(u8 taskId)
{
s16 *data = gTasks[taskId].data;
if (sub_800EE94())
{
- u8 id = sub_8011CE4((u8*)data, ReadU16(&data[8]));
+ u8 id = GetPartnerIndexByNameAndTrainerID((u8*)data, ReadU16(&data[8]));
if (id != 0xFF)
{
if (gRfuLinkStatus->partner[id].slot != 0xFF)
{
Rfu.unk_c3d = id;
- if (sub_800EEBC())
+ if (IsParentSuccessfullyReconnected())
DestroyTask(taskId);
}
- else if (sub_800F7DC()->activity == 0x15 || sub_800F7DC()->activity == 0x16)
+ else if (GetHostRFUtgtGname()->activity == ACTIVITY_WONDER_CARD2
+ || GetHostRFUtgtGname()->activity == ACTIVITY_WONDER_NEWS2)
{
data[15]++;
}
else
{
- sub_8011A64(2, 0x7000);
+ RfuSetStatus(RFU_STATUS_CONNECTION_ERROR, 0x7000);
DestroyTask(taskId);
}
}
@@ -2607,47 +2688,47 @@ void sub_8011EF4(u8 taskId)
if (data[15] > 240)
{
- sub_8011A64(2, 0x7000);
+ RfuSetStatus(RFU_STATUS_CONNECTION_ERROR, 0x7000);
DestroyTask(taskId);
}
}
-void sub_8011FC8(const u8 *src, u16 trainerId)
+void CreateTask_RfuReconnectWithParent(const u8 *name, u16 trainerId)
{
u8 taskId;
s16 *data;
- Rfu.unk_f1 = 0;
- taskId = CreateTask(sub_8011EF4, 3);
+ Rfu.status = RFU_STATUS_OK;
+ taskId = CreateTask(Task_RfuReconnectWithParent, 3);
data = gTasks[taskId].data;
- StringCopy((u8*)(data), src);
+ StringCopy((u8*)(data), name);
data[8] = trainerId;
}
-bool32 sub_801200C(s16 a1, struct GFtgtGname *structPtr)
+static bool32 ShouldRejectPartnerConnectionBasedOnActivity(s16 activity, struct GFtgtGname *partnerGname)
{
- if (sub_800F7DC()->activity == 0x45)
+ if (GetHostRFUtgtGname()->activity == (ACTIVITY_CHAT | IN_UNION_ROOM))
{
- if (structPtr->activity != 0x45)
+ if (partnerGname->activity != (ACTIVITY_CHAT | IN_UNION_ROOM))
return TRUE;
}
- else if (structPtr->activity != 0x40)
+ else if (partnerGname->activity != IN_UNION_ROOM)
{
return TRUE;
}
- else if (a1 == 0x44)
+ else if (activity == (ACTIVITY_TRADE | IN_UNION_ROOM))
{
- struct GFtgtGname *structPtr2 = &Rfu.unk_10A;
- if (structPtr2->species == SPECIES_EGG)
+ struct GFtgtGname *tradeGname = &Rfu.unk_10A;
+ if (tradeGname->species == SPECIES_EGG)
{
- if (structPtr->species == structPtr2->species)
+ if (partnerGname->species == tradeGname->species)
return FALSE;
else
return TRUE;
}
- else if (structPtr->species != structPtr2->species
- || structPtr->level != structPtr2->level
- || structPtr->type != structPtr2->type)
+ else if (partnerGname->species != tradeGname->species
+ || partnerGname->level != tradeGname->level
+ || partnerGname->type != tradeGname->type)
{
return TRUE;
}
@@ -2656,53 +2737,53 @@ bool32 sub_801200C(s16 a1, struct GFtgtGname *structPtr)
return FALSE;
}
-void sub_801209C(u8 taskId)
+static void sub_801209C(u8 taskId)
{
- if (Rfu.unk_f1 == 4)
+ if (Rfu.status == RFU_STATUS_NEW_CHILD_DETECTED)
DestroyTask(taskId);
if (++gTasks[taskId].data[0] > 300)
{
- sub_8011A64(2, 0x7000);
+ RfuSetStatus(RFU_STATUS_CONNECTION_ERROR, 0x7000);
DestroyTask(taskId);
}
- if (Rfu.unk_ccd != 0 && lman.parent_child == 0)
+ if (Rfu.parentId != 0 && lman.parent_child == 0)
{
u16 trainerId = ReadU16(Rfu.unk_10A.unk_00.playerTrainerId);
- u8 id = sub_8011CE4(Rfu.playerName, trainerId);
+ u8 id = GetPartnerIndexByNameAndTrainerID(Rfu.playerName, trainerId);
if (id != 0xFF)
{
- if (!sub_801200C(gTasks[taskId].data[1], (void *)gRfuLinkStatus->partner[id].gname))
+ if (!ShouldRejectPartnerConnectionBasedOnActivity(gTasks[taskId].data[1], (void *)gRfuLinkStatus->partner[id].gname))
{
if (gRfuLinkStatus->partner[id].slot != 0xFF && !rfu_LMAN_CHILD_connectParent(gRfuLinkStatus->partner[id].id, 0x5A))
{
- Rfu.unk_04 = 0xA;
+ Rfu.state = 0xA;
DestroyTask(taskId);
}
}
else
{
- sub_8011A64(2, 0x7000);
+ RfuSetStatus(RFU_STATUS_CONNECTION_ERROR, 0x7000);
DestroyTask(taskId);
}
}
}
}
-void sub_8012188(const u8 *name, struct GFtgtGname *structPtr, u8 a2)
+void sub_8012188(const u8 *name, struct GFtgtGname *structPtr, u8 activity)
{
u8 taskId, taskId2;
Rfu.unk_ccf = 0;
- Rfu.unk_f1 = 0;
+ Rfu.status = RFU_STATUS_OK;
StringCopy(Rfu.playerName, name);
- memcpy(&Rfu.unk_10A, structPtr, 0xD);
+ memcpy(&Rfu.unk_10A, structPtr, RFU_GAME_NAME_LENGTH);
rfu_LMAN_forceChangeSP();
taskId = CreateTask(sub_801209C, 2);
- gTasks[taskId].data[1] = a2;
- taskId2 = FindTaskIdByFunc(sub_800EB44);
- if (a2 == 0x45)
+ gTasks[taskId].data[1] = activity;
+ taskId2 = FindTaskIdByFunc(Task_LinkRfu_UnionRoomListen);
+ if (activity == (ACTIVITY_CHAT | IN_UNION_ROOM))
{
if (taskId2 != 0xFF)
gTasks[taskId2].data[7] = 1;
@@ -2714,9 +2795,9 @@ void sub_8012188(const u8 *name, struct GFtgtGname *structPtr, u8 a2)
}
}
-bool8 sub_8012224(void)
+bool8 IsRfuRecoveringFromLinkLoss(void)
{
- if (Rfu.unk_f0 == 1)
+ if (Rfu.linkLossRecoveryState == 1)
return TRUE;
else
return FALSE;
@@ -2726,61 +2807,61 @@ bool32 sub_8012240(void)
{
s32 i;
- for (i = 0; i < 4; i++)
+ for (i = 0; i < RFU_CHILD_MAX; i++)
{
- if ((lman.acceptSlot_flag >> i) & 1 && Rfu.unk_cd1[i] == 0)
+ if ((lman.acceptSlot_flag >> i) & 1 && Rfu.partnerSendStatuses[i] == RFU_STATUS_OK)
return FALSE;
}
return TRUE;
}
-void sub_801227C(void)
+static void Debug_PrintEmpty(void)
{
s32 i;
for (i = 0; i < 20; i++)
- nullsub_5(gUnknown_082ED82C, 0, i);
+ Debug_PrintString(sASCII_30Commas, 0, i);
}
-void sub_801229C(void)
+static void Debug_PrintStatus(void)
{
s32 i, j;
- nullsub_13(GetBlockReceivedStatus(), 0x1C, 0x13, 2);
- nullsub_13(gRfuLinkStatus->connSlotFlag, 0x14, 1, 1);
- nullsub_13(gRfuLinkStatus->linkLossSlotFlag, 0x17, 1, 1);
- if (Rfu.unk_0c == 1)
+ Debug_PrintNum(GetBlockReceivedStatus(), 0x1C, 0x13, 2);
+ Debug_PrintNum(gRfuLinkStatus->connSlotFlag, 0x14, 1, 1);
+ Debug_PrintNum(gRfuLinkStatus->linkLossSlotFlag, 0x17, 1, 1);
+ if (Rfu.parentChild == MODE_PARENT)
{
- for (i = 0; i < 4; i++)
+ for (i = 0; i < RFU_CHILD_MAX; i++)
{
if ((gRfuLinkStatus->getNameFlag >> i) & 1)
{
- nullsub_13(gRfuLinkStatus->partner[i].serialNo, 1, i + 3, 4);
- nullsub_5((void*)gRfuLinkStatus->partner[i].gname, 6, i + 3);
- nullsub_5(gRfuLinkStatus->partner[i].uname, 0x16, i + 3);
+ Debug_PrintNum(gRfuLinkStatus->partner[i].serialNo, 1, i + 3, 4);
+ Debug_PrintString((void*)gRfuLinkStatus->partner[i].gname, 6, i + 3);
+ Debug_PrintString(gRfuLinkStatus->partner[i].uname, 0x16, i + 3);
}
}
- for (i = 0; i < 4; i++)
+ for (i = 0; i < RFU_CHILD_MAX; i++)
{
- for (j = 0; j < 14; j++)
+ for (j = 0; j < (int)ARRAY_COUNT(Rfu.unk_14[0]); j++)
{
- nullsub_13(Rfu.unk_14[i][j], j * 2, i + 11, 2);
+ Debug_PrintNum(Rfu.unk_14[i][j], j * 2, i + 11, 2);
}
}
- nullsub_5(gUnknown_082ED868, 1, 0xF);
+ Debug_PrintString(sASCII_NowSlot, 1, 0xF);
}
else if (gRfuLinkStatus->connSlotFlag != 0 && gRfuLinkStatus->getNameFlag != 0)
{
- for (i = 0; i < 4; i++)
+ for (i = 0; i < RFU_CHILD_MAX; i++)
{
- nullsub_13(0, 1, i + 3, 4);
- nullsub_5(gUnknown_082ED84B, 6, i + 3);
- nullsub_5(gUnknown_082ED85B, 0x16, i + 3);
+ Debug_PrintNum(0, 1, i + 3, 4);
+ Debug_PrintString(sASCII_15Commas, 6, i + 3);
+ Debug_PrintString(sASCII_8Commas, 0x16, i + 3);
}
- nullsub_13(gRfuLinkStatus->partner[Rfu.unk_c3e].serialNo, 1, 3, 4);
- nullsub_5((void*)gRfuLinkStatus->partner[Rfu.unk_c3e].gname, 6, 3);
- nullsub_5(gRfuLinkStatus->partner[Rfu.unk_c3e].uname, 0x16, 3);
+ Debug_PrintNum(gRfuLinkStatus->partner[Rfu.childSlot].serialNo, 1, 3, 4);
+ Debug_PrintString((void*)gRfuLinkStatus->partner[Rfu.childSlot].gname, 6, 3);
+ Debug_PrintString(gRfuLinkStatus->partner[Rfu.childSlot].uname, 0x16, 3);
}
else
{
@@ -2788,31 +2869,31 @@ void sub_801229C(void)
{
if (gRfuLinkStatus->partner[i].slot != 0xFF)
{
- nullsub_13(gRfuLinkStatus->partner[i].serialNo, 1, i + 3, 4);
- nullsub_13(gRfuLinkStatus->partner[i].id, 6, i + 3, 4);
- nullsub_5(gRfuLinkStatus->partner[i].uname, 0x16, i + 3);
+ Debug_PrintNum(gRfuLinkStatus->partner[i].serialNo, 1, i + 3, 4);
+ Debug_PrintNum(gRfuLinkStatus->partner[i].id, 6, i + 3, 4);
+ Debug_PrintString(gRfuLinkStatus->partner[i].uname, 0x16, i + 3);
}
}
- for (; i < 4; i++)
+ for (; i < RFU_CHILD_MAX; i++)
{
- nullsub_13(0, 1, i + 3, 4);
- nullsub_5(gUnknown_082ED84B, 6, i + 3);
- nullsub_5(gUnknown_082ED85B, 0x16, i + 3);
+ Debug_PrintNum(0, 1, i + 3, 4);
+ Debug_PrintString(sASCII_15Commas, 6, i + 3);
+ Debug_PrintString(sASCII_8Commas, 0x16, i + 3);
}
}
}
-u32 sub_80124C0(void)
+static u32 GetRfuSendQueueLength(void)
{
- return Rfu.unk_9e8.unk_232;
+ return Rfu.sendQueue.count;
}
u32 GetRfuRecvQueueLength(void)
{
- return Rfu.unk_124.unk_8c2;
+ return Rfu.recvQueue.count;
}
-void nullsub_89(u8 taskId)
+static void Task_Idle(u8 taskId)
{
}
diff --git a/src/link_rfu_3.c b/src/link_rfu_3.c
index 535deeca6..c4c000a6e 100644
--- a/src/link_rfu_3.c
+++ b/src/link_rfu_3.c
@@ -7,30 +7,112 @@
#include "text.h"
#include "event_data.h"
+enum {
+ WIRELESS_STATUS_ANIM_3_BARS,
+ WIRELESS_STATUS_ANIM_2_BARS,
+ WIRELESS_STATUS_ANIM_1_BAR,
+ WIRELESS_STATUS_ANIM_SEARCHING,
+ WIRELESS_STATUS_ANIM_ERROR,
+};
+
+#define UNUSED_QUEUE_NUM_SLOTS 2
+#define UNUSED_QUEUE_SLOT_LENGTH 256
+
+struct RfuUnusedQueue
+{
+ u8 slots[UNUSED_QUEUE_NUM_SLOTS][UNUSED_QUEUE_SLOT_LENGTH];
+ vu8 recvSlot;
+ vu8 sendSlot;
+ vu8 count;
+ vu8 full;
+};
+
EWRAM_DATA u8 gWirelessStatusIndicatorSpriteId = 0;
-static u8 gUnknown_03000D74;
+static u8 sUnknown_03000D74;
-const u16 gWirelessLinkIconPalette[] = INCBIN_U16("graphics/interface/wireless_link_icon.gbapal");
-const u32 gWirelessLinkIconPic[] = INCBIN_U32("graphics/interface/wireless_link_icon.4bpp.lz");
+static const u16 sWirelessLinkIconPalette[] = INCBIN_U16("graphics/interface/wireless_link_icon.gbapal");
+static const u32 sWirelessLinkIconPic[] = INCBIN_U32("graphics/interface/wireless_link_icon.4bpp.lz");
-const u8 sWireless_ASCIItoRSETable[] = {
- 0xff, 0x95, 0x96, 0x97, 0x98, 0x99, 0x9a, 0x37,
+// Most of the below two tables won't make sense with ASCII encoding.
+static const u8 sWireless_ASCIItoRSETable[256] = {
+ EOS,
+ 0x95, 0x96, 0x97, 0x98, 0x99, 0x9a, 0x37,
0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f,
0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47,
0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f,
- 0x00, 0xab, 0xb5, 0xb6, 0xb1, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0xb2, 0xf1, 0x00, 0xae, 0xad, 0xba,
- 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, 0xa8,
- 0xa9, 0xaa, 0x00, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f,
- 0x00, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf, 0xc0, 0xc1,
- 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, 0xc8, 0xc9,
- 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, 0xd0, 0xd1,
- 0xd2, 0xd3, 0xd4, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6,
- 0x00, 0xd5, 0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xdb,
- 0xdc, 0xdd, 0xde, 0xdf, 0xe0, 0xe1, 0xe2, 0xe3,
- 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xeb,
- 0xec, 0xed, 0xee, 0x2d, 0x2f, 0x30, 0x31, 0x32,
+ [' '] = CHAR_SPACE,
+ ['!'] = CHAR_EXCL_MARK,
+ 0xb5, 0xb6, 0xb1, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0xb2, 0xf1, 0x00,
+ ['-'] = CHAR_HYPHEN,
+ ['.'] = CHAR_PERIOD,
+ ['/'] = CHAR_SLASH,
+ ['0'] = CHAR_0,
+ ['1'] = CHAR_1,
+ ['2'] = CHAR_2,
+ ['3'] = CHAR_3,
+ ['4'] = CHAR_4,
+ ['5'] = CHAR_5,
+ ['6'] = CHAR_6,
+ ['7'] = CHAR_7,
+ ['8'] = CHAR_8,
+ ['9'] = CHAR_9,
+ 0x00, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f, 0x00,
+ ['A'] = CHAR_A,
+ ['B'] = CHAR_B,
+ ['C'] = CHAR_C,
+ ['D'] = CHAR_D,
+ ['E'] = CHAR_E,
+ ['F'] = CHAR_F,
+ ['G'] = CHAR_G,
+ ['H'] = CHAR_H,
+ ['I'] = CHAR_I,
+ ['J'] = CHAR_J,
+ ['K'] = CHAR_K,
+ ['L'] = CHAR_L,
+ ['M'] = CHAR_M,
+ ['N'] = CHAR_N,
+ ['O'] = CHAR_O,
+ ['P'] = CHAR_P,
+ ['Q'] = CHAR_Q,
+ ['R'] = CHAR_R,
+ ['S'] = CHAR_S,
+ ['T'] = CHAR_T,
+ ['U'] = CHAR_U,
+ ['V'] = CHAR_V,
+ ['W'] = CHAR_W,
+ ['X'] = CHAR_X,
+ ['Y'] = CHAR_Y,
+ ['Z'] = CHAR_Z,
+ 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0x00,
+ ['a'] = CHAR_a,
+ ['b'] = CHAR_b,
+ ['c'] = CHAR_c,
+ ['d'] = CHAR_d,
+ ['e'] = CHAR_e,
+ ['f'] = CHAR_f,
+ ['g'] = CHAR_g,
+ ['h'] = CHAR_h,
+ ['i'] = CHAR_i,
+ ['j'] = CHAR_j,
+ ['k'] = CHAR_k,
+ ['l'] = CHAR_l,
+ ['m'] = CHAR_m,
+ ['n'] = CHAR_n,
+ ['o'] = CHAR_o,
+ ['p'] = CHAR_p,
+ ['q'] = CHAR_q,
+ ['r'] = CHAR_r,
+ ['s'] = CHAR_s,
+ ['t'] = CHAR_t,
+ ['u'] = CHAR_u,
+ ['v'] = CHAR_v,
+ ['w'] = CHAR_w,
+ ['x'] = CHAR_x,
+ ['y'] = CHAR_y,
+ ['z'] = CHAR_z,
+ 0x2d, 0x2f, 0x30, 0x31, 0x32,
0x33, 0x34, 0x35, 0x36, 0x50, 0x00, 0x01, 0x02,
0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a,
0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12,
@@ -49,42 +131,107 @@ const u8 sWireless_ASCIItoRSETable[] = {
0x8d, 0x8e, 0x8f, 0x90, 0x91, 0x92, 0x93, 0x94
};
-const u8 sWireless_RSEtoASCIITable[] = {
- 0x20, 0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8c,
- 0x8d, 0x8e, 0x8f, 0x90, 0x91, 0x92, 0x93, 0x94,
- 0x95, 0x96, 0x97, 0x98, 0x99, 0x9a, 0x9b, 0x9c,
- 0x9d, 0x9e, 0x9f, 0xa0, 0xe0, 0xe1, 0xe2, 0xe3,
- 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xeb,
- 0xec, 0xed, 0xee, 0xef, 0xf0, 0x7b, 0xf1, 0x7c,
- 0x7d, 0x7e, 0x7f, 0x80, 0x81, 0x82, 0x83, 0x07,
- 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
- 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
- 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f,
- 0x84, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7,
- 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf,
- 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7,
- 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf,
- 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7,
- 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xa6, 0xdd, 0xa7,
- 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xf2,
- 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8, 0xf9, 0xfa,
- 0xfb, 0xfc, 0xfd, 0xfe, 0xff, 0x01, 0x02, 0x03,
- 0x04, 0x05, 0x06, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f,
- 0xaf, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36,
- 0x37, 0x38, 0x39, 0x21, 0xdf, 0xa1, 0xb0, 0xa5,
- 0xde, 0x24, 0x2a, 0xa2, 0xa3, 0x22, 0x23, 0x20,
- 0xa4, 0x20, 0x2f, 0x41, 0x42, 0x43, 0x44, 0x45,
- 0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d,
- 0x4e, 0x4f, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55,
- 0x56, 0x57, 0x58, 0x59, 0x5a, 0x61, 0x62, 0x63,
- 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b,
- 0x6c, 0x6d, 0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73,
- 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7a, 0x20,
- 0x20, 0x2b, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, 0x20,
- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x00
+static const u8 sWireless_RSEtoASCIITable[256] = {
+ [CHAR_SPACE] = ' ',
+ 0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d,
+ 0x8e, 0x8f, 0x90, 0x91, 0x92, 0x93, 0x94, 0x95,
+ 0x96, 0x97, 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d,
+ 0x9e, 0x9f, 0xa0, 0xe0, 0xe1, 0xe2, 0xe3, 0xe4,
+ 0xe5, 0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xeb, 0xec,
+ 0xed, 0xee, 0xef, 0xf0, 0x7b, 0xf1, 0x7c, 0x7d,
+ 0x7e, 0x7f, 0x80, 0x81, 0x82, 0x83, 0x07, 0x08,
+ 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10,
+ 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18,
+ 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x84,
+ 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, 0xb8,
+ 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf, 0xc0,
+ 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, 0xc8,
+ 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, 0xd0,
+ 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, 0xd8,
+ 0xd9, 0xda, 0xdb, 0xdc, 0xa6, 0xdd, 0xa7, 0xa8,
+ 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xf2, 0xf3,
+ 0xf4, 0xf5, 0xf6, 0xf7, 0xf8, 0xf9, 0xfa, 0xfb,
+ 0xfc, 0xfd, 0xfe, 0xff, 0x01, 0x02, 0x03, 0x04,
+ 0x05, 0x06, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, 0xaf,
+ [CHAR_0] = '0',
+ [CHAR_1] = '1',
+ [CHAR_2] = '2',
+ [CHAR_3] = '3',
+ [CHAR_4] = '4',
+ [CHAR_5] = '5',
+ [CHAR_6] = '6',
+ [CHAR_7] = '7',
+ [CHAR_8] = '8',
+ [CHAR_9] = '9',
+ [CHAR_EXCL_MARK] = '!',
+ 0xdf, 0xa1, 0xb0, 0xa5, 0xde, 0x24, 0x2a,
+ 0xa2, 0xa3, 0x22, 0x23, 0x20, 0xa4, 0x20,
+ [CHAR_SLASH] = '/',
+ [CHAR_A] = 'A',
+ [CHAR_B] = 'B',
+ [CHAR_C] = 'C',
+ [CHAR_D] = 'D',
+ [CHAR_E] = 'E',
+ [CHAR_F] = 'F',
+ [CHAR_G] = 'G',
+ [CHAR_H] = 'H',
+ [CHAR_I] = 'I',
+ [CHAR_J] = 'J',
+ [CHAR_K] = 'K',
+ [CHAR_L] = 'L',
+ [CHAR_M] = 'M',
+ [CHAR_N] = 'N',
+ [CHAR_O] = 'O',
+ [CHAR_P] = 'P',
+ [CHAR_Q] = 'Q',
+ [CHAR_R] = 'R',
+ [CHAR_S] = 'S',
+ [CHAR_T] = 'T',
+ [CHAR_U] = 'U',
+ [CHAR_V] = 'V',
+ [CHAR_W] = 'W',
+ [CHAR_X] = 'X',
+ [CHAR_Y] = 'Y',
+ [CHAR_Z] = 'Z',
+ [CHAR_a] = 'a',
+ [CHAR_b] = 'b',
+ [CHAR_c] = 'c',
+ [CHAR_d] = 'd',
+ [CHAR_e] = 'e',
+ [CHAR_f] = 'f',
+ [CHAR_g] = 'g',
+ [CHAR_h] = 'h',
+ [CHAR_i] = 'i',
+ [CHAR_j] = 'j',
+ [CHAR_k] = 'k',
+ [CHAR_l] = 'l',
+ [CHAR_m] = 'm',
+ [CHAR_n] = 'n',
+ [CHAR_o] = 'o',
+ [CHAR_p] = 'p',
+ [CHAR_q] = 'q',
+ [CHAR_r] = 'r',
+ [CHAR_s] = 's',
+ [CHAR_t] = 't',
+ [CHAR_u] = 'u',
+ [CHAR_v] = 'v',
+ [CHAR_w] = 'w',
+ [CHAR_x] = 'x',
+ [CHAR_y] = 'y',
+ [CHAR_z] = 'z',
+ 0x20, 0x20, 0x2b, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f,
+ [CHAR_DYNAMIC] = ' ',
+ [CHAR_KEYPAD_ICON] = ' ',
+ [CHAR_EXTRA_SYMBOL] = ' ',
+ [CHAR_PROMPT_SCROLL] = ' ',
+ [CHAR_PROMPT_CLEAR] = ' ',
+ [EXT_CTRL_CODE_BEGIN] = ' ',
+ [PLACEHOLDER_BEGIN] = ' ',
+ [CHAR_NEWLINE] = ' ',
+ [EOS] = 0
};
-const struct OamData sWirelessStatusIndicatorOamData =
+static const struct OamData sWirelessStatusIndicatorOamData =
{
.y = 0,
.affineMode = ST_OAM_AFFINE_OFF,
@@ -98,8 +245,7 @@ const struct OamData sWirelessStatusIndicatorOamData =
.paletteNum = 0,
};
-const union AnimCmd sWirelessStatusIndicatorAnim0[] = {
- // 3 bars
+static const union AnimCmd sWirelessStatusIndicator_3Bars[] = {
ANIMCMD_FRAME( 4, 5),
ANIMCMD_FRAME( 8, 5),
ANIMCMD_FRAME(12, 5),
@@ -109,8 +255,7 @@ const union AnimCmd sWirelessStatusIndicatorAnim0[] = {
ANIMCMD_JUMP(0)
};
-const union AnimCmd sWirelessStatusIndicatorAnim1[] = {
- // 2 bars
+static const union AnimCmd sWirelessStatusIndicator_2Bars[] = {
ANIMCMD_FRAME( 4, 5),
ANIMCMD_FRAME( 8, 5),
ANIMCMD_FRAME(12, 10),
@@ -118,321 +263,299 @@ const union AnimCmd sWirelessStatusIndicatorAnim1[] = {
ANIMCMD_JUMP(0)
};
-const union AnimCmd sWirelessStatusIndicatorAnim2[] = {
- // 1 bar
+static const union AnimCmd sWirelessStatusIndicator_1Bar[] = {
ANIMCMD_FRAME(4, 5),
ANIMCMD_FRAME(8, 5),
ANIMCMD_JUMP(0)
};
-const union AnimCmd sWirelessStatusIndicatorAnim3[] = {
- // searching
+static const union AnimCmd sWirelessStatusIndicator_Searching[] = {
ANIMCMD_FRAME( 4, 10),
ANIMCMD_FRAME(20, 10),
ANIMCMD_JUMP(0)
};
-const union AnimCmd sWirelessStatusIndicatorAnim4[] = {
- // error
+static const union AnimCmd sWirelessStatusIndicator_Error[] = {
ANIMCMD_FRAME(24, 10),
ANIMCMD_FRAME( 4, 10),
ANIMCMD_JUMP(0)
};
-const union AnimCmd *const sWirelessStatusIndicatorAnims[] = {
- sWirelessStatusIndicatorAnim0,
- sWirelessStatusIndicatorAnim1,
- sWirelessStatusIndicatorAnim2,
- sWirelessStatusIndicatorAnim3,
- sWirelessStatusIndicatorAnim4
+static const union AnimCmd *const sWirelessStatusIndicatorAnims[] = {
+ [WIRELESS_STATUS_ANIM_3_BARS] = sWirelessStatusIndicator_3Bars,
+ [WIRELESS_STATUS_ANIM_2_BARS] = sWirelessStatusIndicator_2Bars,
+ [WIRELESS_STATUS_ANIM_1_BAR] = sWirelessStatusIndicator_1Bar,
+ [WIRELESS_STATUS_ANIM_SEARCHING] = sWirelessStatusIndicator_Searching,
+ [WIRELESS_STATUS_ANIM_ERROR] = sWirelessStatusIndicator_Error
};
-const struct CompressedSpriteSheet sWirelessStatusIndicatorSpriteSheet = {
- gWirelessLinkIconPic, 0x0380, 0xD431
+static const struct CompressedSpriteSheet sWirelessStatusIndicatorSpriteSheet = {
+ sWirelessLinkIconPic, 0x0380, 0xD431
};
-const struct SpritePalette sWirelessStatusIndicatorSpritePalette = {
- gWirelessLinkIconPalette, 0xD432
+static const struct SpritePalette sWirelessStatusIndicatorSpritePalette = {
+ sWirelessLinkIconPalette, 0xD432
};
-const struct SpriteTemplate sWirelessStatusIndicatorSpriteTemplate = {
- 0xD431,
- 0xD432,
- &sWirelessStatusIndicatorOamData,
- sWirelessStatusIndicatorAnims,
- NULL,
- gDummySpriteAffineAnimTable,
- SpriteCallbackDummy
+static const struct SpriteTemplate sWirelessStatusIndicatorSpriteTemplate = {
+ .tileTag = 0xD431,
+ .paletteTag = 0xD432,
+ .oam = &sWirelessStatusIndicatorOamData,
+ .anims = sWirelessStatusIndicatorAnims,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = SpriteCallbackDummy
};
-void sub_800D6C8(struct UnkRfuStruct_2_Sub_124 *ptr)
+void RfuRecvQueue_Reset(struct RfuRecvQueue *queue)
{
s32 i;
s32 j;
- for (i = 0; i < 32; i++)
+ for (i = 0; i < RECV_QUEUE_NUM_SLOTS; i++)
{
- for (j = 0; j < 70; j++)
+ for (j = 0; j < RECV_QUEUE_SLOT_LENGTH; j++)
{
- ptr->unk_00[i][j] = 0;
+ queue->slots[i][j] = 0;
}
}
- ptr->unk_8c1 = 0;
- ptr->unk_8c0 = 0;
- ptr->unk_8c2 = 0;
- ptr->unk_8c3 = 0;
+ queue->sendSlot = 0;
+ queue->recvSlot = 0;
+ queue->count = 0;
+ queue->full = FALSE;
}
-void sub_800D724(struct UnkRfuStruct_2_Sub_9e8 *ptr)
+void RfuSendQueue_Reset(struct RfuSendQueue *queue)
{
s32 i;
s32 j;
- for (i = 0; i < 40; i++)
+ for (i = 0; i < SEND_QUEUE_NUM_SLOTS; i++)
{
- for (j = 0; j < 14; j++)
+ for (j = 0; j < SEND_QUEUE_SLOT_LENGTH; j++)
{
- ptr->unk_00[i][j] = 0;
+ queue->slots[i][j] = 0;
}
}
- ptr->unk_231 = 0;
- ptr->unk_230 = 0;
- ptr->unk_232 = 0;
- ptr->unk_233 = 0;
+ queue->sendSlot = 0;
+ queue->recvSlot = 0;
+ queue->count = 0;
+ queue->full = FALSE;
}
-void sub_800D780(struct UnkRfuStruct_Sub_Unused *ptr)
+static void RfuUnusedQueue_Reset(struct RfuUnusedQueue *queue)
{
s32 i;
s32 j;
- for (i = 0; i < 2; i++)
+ for (i = 0; i < UNUSED_QUEUE_NUM_SLOTS; i++)
{
- for (j = 0; j < 256; j++)
+ for (j = 0; j < UNUSED_QUEUE_SLOT_LENGTH; j++)
{
- ptr->unk_00[i][j] = 0;
+ queue->slots[i][j] = 0;
}
}
- ptr->unk_201 = 0;
- ptr->unk_200 = 0;
- ptr->unk_202 = 0;
- ptr->unk_203 = 0;
+ queue->sendSlot = 0;
+ queue->recvSlot = 0;
+ queue->count = 0;
+ queue->full = FALSE;
}
-void sub_800D7D8(struct UnkRfuStruct_2_Sub_124 *q1, u8 *q2)
+void RfuRecvQueue_Enqueue(struct RfuRecvQueue *queue, u8 *data)
{
s32 i;
u16 imeBak;
u8 count;
- if (q1->unk_8c2 < 32)
+ if (queue->count < RECV_QUEUE_NUM_SLOTS)
{
imeBak = REG_IME;
REG_IME = 0;
count = 0;
- for (i = 0; i < 70; i += 14)
+ for (i = 0; i < RECV_QUEUE_SLOT_LENGTH; i += RECV_QUEUE_SLOT_LENGTH / MAX_RFU_PLAYERS)
{
- if (q2[i] == 0 && q2[i + 1] == 0)
- {
+ if (data[i] == 0 && data[i + 1] == 0)
count++;
- }
}
- if (count != 5)
+ if (count != MAX_RFU_PLAYERS)
{
- for (i = 0; i < 70; i++)
- {
- q1->unk_00[q1->unk_8c0][i] = q2[i];
- }
- q1->unk_8c0++;
- q1->unk_8c0 %= 32;
- q1->unk_8c2++;
- for (i = 0; i < 70; i++)
- {
- q2[i] = 0;
- }
+ for (i = 0; i < RECV_QUEUE_SLOT_LENGTH; i++)
+ queue->slots[queue->recvSlot][i] = data[i];
+
+ queue->recvSlot++;
+ queue->recvSlot %= RECV_QUEUE_NUM_SLOTS;
+ queue->count++;
+
+ for (i = 0; i < RECV_QUEUE_SLOT_LENGTH; i++)
+ data[i] = 0;
}
REG_IME = imeBak;
}
else
{
- q1->unk_8c3 = 1;
+ queue->full = TRUE;
}
}
-void sub_800D888(struct UnkRfuStruct_2_Sub_9e8 *q1, u8 *q2)
+void RfuSendQueue_Enqueue(struct RfuSendQueue *queue, u8 *data)
{
s32 i;
u16 imeBak;
- if (q1->unk_232 < 40)
+ if (queue->count < SEND_QUEUE_NUM_SLOTS)
{
imeBak = REG_IME;
REG_IME = 0;
- for (i = 0; i < 14; i++)
+ for (i = 0; i < SEND_QUEUE_SLOT_LENGTH; i++)
{
- if (q2[i] != 0)
- {
+ if (data[i] != 0)
break;
- }
}
- if (i != 14)
+ if (i != SEND_QUEUE_SLOT_LENGTH)
{
- for (i = 0; i < 14; i++)
- {
- q1->unk_00[q1->unk_230][i] = q2[i];
- }
- q1->unk_230++;
- q1->unk_230 %= 40;
- q1->unk_232++;
- for (i = 0; i < 14; i++)
+ for (i = 0; i < SEND_QUEUE_SLOT_LENGTH; i++)
{
- q2[i] = 0;
+ queue->slots[queue->recvSlot][i] = data[i];
}
+ queue->recvSlot++;
+ queue->recvSlot %= SEND_QUEUE_NUM_SLOTS;
+ queue->count++;
+
+ for (i = 0; i < SEND_QUEUE_SLOT_LENGTH; i++)
+ data[i] = 0;
}
REG_IME = imeBak;
}
else
{
- q1->unk_233 = 1;
+ queue->full = TRUE;
}
}
-bool8 sub_800D934(struct UnkRfuStruct_2_Sub_124 *q1, u8 *q2)
+bool8 RfuRecvQueue_Dequeue(struct RfuRecvQueue *queue, u8 *src)
{
u16 imeBak;
s32 i;
imeBak = REG_IME;
REG_IME = 0;
- if (q1->unk_8c0 == q1->unk_8c1 || q1->unk_8c3 != 0)
+ if (queue->recvSlot == queue->sendSlot || queue->full)
{
- for (i = 0; i < 70; i++)
- {
- q2[i] = 0;
- }
+ for (i = 0; i < RECV_QUEUE_SLOT_LENGTH; i++)
+ src[i] = 0;
+
REG_IME = imeBak;
return FALSE;
}
- for (i = 0; i < 70; i++)
+ for (i = 0; i < RECV_QUEUE_SLOT_LENGTH; i++)
{
- q2[i] = q1->unk_00[q1->unk_8c1][i];
+ src[i] = queue->slots[queue->sendSlot][i];
}
- q1->unk_8c1++;
- q1->unk_8c1 %= 32;
- q1->unk_8c2--;
+ queue->sendSlot++;
+ queue->sendSlot %= RECV_QUEUE_NUM_SLOTS;
+ queue->count--;
REG_IME = imeBak;
return TRUE;
}
-bool8 sub_800D9DC(struct UnkRfuStruct_2_Sub_9e8 *q1, u8 *q2)
+bool8 RfuSendQueue_Dequeue(struct RfuSendQueue *queue, u8 *src)
{
s32 i;
u16 imeBak;
- if (q1->unk_230 == q1->unk_231 || q1->unk_233 != 0)
- {
+ if (queue->recvSlot == queue->sendSlot || queue->full)
return FALSE;
- }
+
imeBak = REG_IME;
REG_IME = 0;
- for (i = 0; i < 14; i++)
- {
- q2[i] = q1->unk_00[q1->unk_231][i];
- }
- q1->unk_231++;
- q1->unk_231 %= 40;
- q1->unk_232--;
+ for (i = 0; i < SEND_QUEUE_SLOT_LENGTH; i++)
+ src[i] = queue->slots[queue->sendSlot][i];
+
+ queue->sendSlot++;
+ queue->sendSlot %= SEND_QUEUE_NUM_SLOTS;
+ queue->count--;
REG_IME = imeBak;
return TRUE;
}
-void sub_800DA68(struct UnkRfuStruct_2_Sub_c1c *q1, const u8 *q2)
+void RfuBackupQueue_Enqueue(struct RfuBackupQueue *queue, const u8 *data)
{
s32 i;
- if (q2[1] == 0)
+ if (data[1] == 0)
{
- sub_800DAC8(q1, NULL);
+ RfuBackupQueue_Dequeue(queue, NULL);
}
else
{
- for (i = 0; i < 14; i++)
- {
- q1->unk_00[q1->unk_1c][i] = q2[i];
- }
- q1->unk_1c++;
- q1->unk_1c %= 2;
- if (q1->unk_1e < 2)
- {
- q1->unk_1e++;
- }
+ for (i = 0; i < BACKUP_QUEUE_SLOT_LENGTH; i++)
+ queue->slots[queue->recvSlot][i] = data[i];
+
+ queue->recvSlot++;
+ queue->recvSlot %= BACKUP_QUEUE_NUM_SLOTS;
+
+ if (queue->count < BACKUP_QUEUE_NUM_SLOTS)
+ queue->count++;
else
- {
- q1->unk_1d = q1->unk_1c;
- }
+ queue->sendSlot = queue->recvSlot;
}
}
-bool8 sub_800DAC8(struct UnkRfuStruct_2_Sub_c1c *q1, u8 *q2)
+bool8 RfuBackupQueue_Dequeue(struct RfuBackupQueue *queue, u8 *src)
{
s32 i;
- if (q1->unk_1e == 0)
- {
+ if (queue->count == 0)
return FALSE;
- }
- if (q2 != NULL)
+
+ if (src != NULL)
{
- for (i = 0; i < 14; i++)
- {
- q2[i] = q1->unk_00[q1->unk_1d][i];
- }
+ for (i = 0; i < BACKUP_QUEUE_SLOT_LENGTH; i++)
+ src[i] = queue->slots[queue->sendSlot][i];
}
- q1->unk_1d++;
- q1->unk_1d %= 2;
- q1->unk_1e--;
+ queue->sendSlot++;
+ queue->sendSlot %= BACKUP_QUEUE_NUM_SLOTS;
+ queue->count--;
return TRUE;
}
-void sub_800DB18(struct UnkRfuStruct_Sub_Unused *q1, u8 *q2)
+static void RfuUnusedQueue_Enqueue(struct RfuUnusedQueue *queue, u8 *data)
{
s32 i;
- if (q1->unk_202 < 2)
+ if (queue->count < UNUSED_QUEUE_NUM_SLOTS)
{
- for (i = 0; i < 256; i++)
- {
- q1->unk_00[q1->unk_200][i] = q2[i];
- }
- q1->unk_200++;
- q1->unk_200 %= 2;
- q1->unk_202++;
+ for (i = 0; i < UNUSED_QUEUE_SLOT_LENGTH; i++)
+ queue->slots[queue->recvSlot][i] = data[i];
+
+ queue->recvSlot++;
+ queue->recvSlot %= UNUSED_QUEUE_NUM_SLOTS;
+ queue->count++;
}
else
{
- q1->unk_203 = 1;
+ queue->full = TRUE;
}
}
-bool8 sub_800DB84(struct UnkRfuStruct_Sub_Unused *q1, u8 *q2)
+static bool8 RfuUnusedQueue_Dequeue(struct RfuUnusedQueue *queue, u8 *dest)
{
s32 i;
- if (q1->unk_200 == q1->unk_201 || q1->unk_203)
- {
+ if (queue->recvSlot == queue->sendSlot || queue->full)
return FALSE;
- }
- for (i = 0; i < 256; i++)
- {
- q2[i] = q1->unk_00[q1->unk_201][i];
- }
- q1->unk_201++;
- q1->unk_201 %= 2;
- q1->unk_202--;
+
+ for (i = 0; i < UNUSED_QUEUE_SLOT_LENGTH; i++)
+ dest[i] = queue->slots[queue->sendSlot][i];
+
+ queue->sendSlot++;
+ queue->sendSlot %= UNUSED_QUEUE_NUM_SLOTS;
+ queue->count--;
return TRUE;
}
-void sub_800DBF8(u8 *q1, u8 mode)
+// Unused
+static void sub_800DBF8(u8 *q1, u8 mode)
{
s32 i;
u8 rval;
@@ -467,139 +590,74 @@ void sub_800DBF8(u8 *q1, u8 mode)
case 3:
for (i = 0; i < 200; i++)
{
- q1[i] = i + 1 + gUnknown_03000D74;
- r5 += (i + 1 + gUnknown_03000D74) & 0xFF;
+ q1[i] = i + 1 + sUnknown_03000D74;
+ r5 += (i + 1 + sUnknown_03000D74) & 0xFF;
}
*((u16 *)(q1 + i)) = r5;
- gUnknown_03000D74++;
+ sUnknown_03000D74++;
break;
}
}
// File boundary here maybe?
-void PkmnStrToASCII(u8 *q1, const u8 *q2)
+static void PkmnStrToASCII(u8 *asciiStr, const u8 *pkmnStr)
{
s32 i;
- for (i = 0; q2[i] != EOS; i++)
+ for (i = 0; pkmnStr[i] != EOS; i++)
{
- q1[i] = sWireless_RSEtoASCIITable[q2[i]];
+ asciiStr[i] = sWireless_RSEtoASCIITable[pkmnStr[i]];
}
- q1[i] = 0;
+ asciiStr[i] = 0;
}
-void ASCIIToPkmnStr(u8 *q1, const u8 *q2)
+static void ASCIIToPkmnStr(u8 *pkmnStr, const u8 *asciiStr)
{
s32 i;
- for (i = 0; q2[i] != 0; i++)
+ for (i = 0; asciiStr[i] != 0; i++)
{
- q1[i] = sWireless_ASCIItoRSETable[q2[i]];
+ pkmnStr[i] = sWireless_ASCIItoRSETable[asciiStr[i]];
}
- q1[i] = EOS;
+ pkmnStr[i] = EOS;
}
-#ifdef NONMATCHING
-u8 sub_800DD1C(u8 maxFlags)
+static u8 GetConnectedChildStrength(u8 maxFlags)
{
u8 flagCount = 0;
- u32 flags = gRfuLinkStatus->connSlotFlag;
+ u8 flags = gRfuLinkStatus->connSlotFlag;
u8 i;
- if (gRfuLinkStatus->parentChild == 1)
+ if (gRfuLinkStatus->parentChild == MODE_PARENT)
{
- for (i = 0; i < 4; flags >>= 1, i++)
+ for (i = 0; i < 4; i++)
{
if (flags & 1)
{
if (maxFlags == flagCount + 1)
+ {
return gRfuLinkStatus->strength[i];
+ break; // This break is needed to match
+ }
flagCount++;
}
+ flags >>= 1;
}
}
else
{
- for (i = 0; i < 4; flags >>= 1, i++)
+ for (i = 0; i < 4; i++)
{
if (flags & 1)
return gRfuLinkStatus->strength[i];
+ flags >>= 1;
}
}
return 0;
}
-#else
-NAKED u8 sub_800DD1C(u8 maxFlags)
-{
- asm_unified("\tpush {r4-r7,lr}\n"
- "\tlsls r0, 24\n"
- "\tlsrs r5, r0, 24\n"
- "\tmovs r6, 0\n"
- "\tldr r0, =gRfuLinkStatus\n"
- "\tldr r4, [r0]\n"
- "\tldrb r2, [r4, 0x2]\n"
- "\tldrb r1, [r4]\n"
- "\tadds r7, r0, 0\n"
- "\tcmp r1, 0x1\n"
- "\tbne _0800DD72\n"
- "\tmovs r3, 0\n"
- "\tands r1, r2\n"
- "\tcmp r1, 0\n"
- "\tbeq _0800DD4E\n"
- "\tcmp r5, 0x1\n"
- "\tbne _0800DD48\n"
- "\tldrb r0, [r4, 0xA]\n"
- "\tb _0800DD8C\n"
- "\t.pool\n"
- "_0800DD48:\n"
- "\tadds r0, r6, 0x1\n"
- "\tlsls r0, 24\n"
- "\tlsrs r6, r0, 24\n"
- "_0800DD4E:\n"
- "\tlsrs r2, 1\n"
- "\tadds r0, r3, 0x1\n"
- "\tlsls r0, 24\n"
- "\tlsrs r3, r0, 24\n"
- "\tcmp r3, 0x3\n"
- "\tbhi _0800DD8A\n"
- "\tmovs r0, 0x1\n"
- "\tands r0, r2\n"
- "\tcmp r0, 0\n"
- "\tbeq _0800DD4E\n"
- "\tadds r0, r6, 0x1\n"
- "\tcmp r5, r0\n"
- "\tbne _0800DD48\n"
- "_0800DD68:\n"
- "\tldr r0, [r7]\n"
- "\tadds r0, 0xA\n"
- "\tadds r0, r3\n"
- "\tldrb r0, [r0]\n"
- "\tb _0800DD8C\n"
- "_0800DD72:\n"
- "\tmovs r3, 0\n"
- "\tmovs r1, 0x1\n"
- "_0800DD76:\n"
- "\tadds r0, r2, 0\n"
- "\tands r0, r1\n"
- "\tcmp r0, 0\n"
- "\tbne _0800DD68\n"
- "\tlsrs r2, 1\n"
- "\tadds r0, r3, 0x1\n"
- "\tlsls r0, 24\n"
- "\tlsrs r3, r0, 24\n"
- "\tcmp r3, 0x3\n"
- "\tbls _0800DD76\n"
- "_0800DD8A:\n"
- "\tmovs r0, 0\n"
- "_0800DD8C:\n"
- "\tpop {r4-r7}\n"
- "\tpop {r1}\n"
- "\tbx r1");
-}
-#endif
-void sub_800DD94(struct GFtgtGname *data, u8 r9, bool32 r2, s32 r3)
+void InitHostRFUtgtGname(struct GFtgtGname *data, u8 activity, bool32 started, s32 child_sprite_genders)
{
s32 i;
@@ -607,82 +665,91 @@ void sub_800DD94(struct GFtgtGname *data, u8 r9, bool32 r2, s32 r3)
{
data->unk_00.playerTrainerId[i] = gSaveBlock2Ptr->playerTrainerId[i];
}
- for (i = 0; i < 4; i++)
+ for (i = 0; i < RFU_CHILD_MAX; i++)
{
- data->child_sprite_gender[i] = r3;
- r3 >>= 8;
+ data->child_sprite_gender[i] = child_sprite_genders;
+ child_sprite_genders >>= 8;
}
data->playerGender = gSaveBlock2Ptr->playerGender;
- data->activity = r9;
- data->started = r2;
+ data->activity = activity;
+ data->started = started;
data->unk_00.language = GAME_LANGUAGE;
data->unk_00.version = GAME_VERSION;
- data->unk_00.hasNews = 0;
- data->unk_00.hasCard = 0;
- data->unk_00.unk_00_6 = 0;
+ data->unk_00.hasNews = FALSE;
+ data->unk_00.hasCard = FALSE;
+ data->unk_00.unknown = FALSE;
data->unk_00.isChampion = FlagGet(FLAG_IS_CHAMPION);
data->unk_00.hasNationalDex = IsNationalPokedexEnabled();
data->unk_00.gameClear = FlagGet(FLAG_SYS_GAME_CLEAR);
}
-bool8 sub_800DE7C(struct GFtgtGname *buff1, u8 *buff2, u8 idx)
+bool8 LinkRfu_GetNameIfCompatible(struct GFtgtGname *buff1, u8 *buff2, u8 idx)
{
bool8 retVal;
- if (lman.parent_child == 1)
+ if (lman.parent_child == MODE_PARENT)
{
retVal = TRUE;
- if (sub_8010454(gRfuLinkStatus->partner[idx].serialNo) && ((gRfuLinkStatus->getNameFlag >> idx) & 1))
+ if (IsRfuSerialNumberValid(gRfuLinkStatus->partner[idx].serialNo) && ((gRfuLinkStatus->getNameFlag >> idx) & 1))
{
- memcpy(buff1, gRfuLinkStatus->partner[idx].gname, 0xD);
+ memcpy(buff1, gRfuLinkStatus->partner[idx].gname, RFU_GAME_NAME_LENGTH);
memcpy(buff2, gRfuLinkStatus->partner[idx].uname, PLAYER_NAME_LENGTH + 1);
}
else
{
- memset(buff1, 0, 0xD);
+ memset(buff1, 0, RFU_GAME_NAME_LENGTH);
memset(buff2, 0, PLAYER_NAME_LENGTH + 1);
}
}
else
{
retVal = FALSE;
- if (sub_8010454(gRfuLinkStatus->partner[idx].serialNo))
+ if (IsRfuSerialNumberValid(gRfuLinkStatus->partner[idx].serialNo))
{
- memcpy(buff1, gRfuLinkStatus->partner[idx].gname, 0xD);
+ memcpy(buff1, gRfuLinkStatus->partner[idx].gname, RFU_GAME_NAME_LENGTH);
memcpy(buff2, gRfuLinkStatus->partner[idx].uname, PLAYER_NAME_LENGTH + 1);
}
else
{
- memset(buff1, 0, 0xD);
+ memset(buff1, 0, RFU_GAME_NAME_LENGTH);
memset(buff2, 0, PLAYER_NAME_LENGTH + 1);
}
}
return retVal;
}
-bool8 sub_800DF34(struct GFtgtGname *buff1, u8 *buff2, u8 idx)
+bool8 LinkRfu_GetNameIfSerial7F7D(struct GFtgtGname *buff1, u8 *buff2, u8 idx)
{
bool8 retVal = FALSE;
- if (gRfuLinkStatus->partner[idx].serialNo == 0x7F7D)
+ if (gRfuLinkStatus->partner[idx].serialNo == RFU_SERIAL_7F7D)
{
- memcpy(buff1, gRfuLinkStatus->partner[idx].gname, 0xD);
- memcpy(buff2, gRfuLinkStatus->partner[idx].uname, 8);
+ memcpy(buff1, gRfuLinkStatus->partner[idx].gname, RFU_GAME_NAME_LENGTH);
+ memcpy(buff2, gRfuLinkStatus->partner[idx].uname, PLAYER_NAME_LENGTH + 1);
retVal = TRUE;
}
else
{
- memset(buff1, 0, 0xD);
- memset(buff2, 0, 8);
+ memset(buff1, 0, RFU_GAME_NAME_LENGTH);
+ memset(buff2, 0, PLAYER_NAME_LENGTH + 1);
}
return retVal;
}
-void sub_800DF90(struct GFtgtGname *buff1, u8 *buff2)
+void LinkRfu3_SetGnameUnameFromStaticBuffers(struct GFtgtGname *buff1, u8 *buff2)
{
- memcpy(buff1, &gUnknown_02022B14, 0xD);
- memcpy(buff2, gUnknown_02022B22, 8);
+ memcpy(buff1, &gHostRFUtgtGnameBuffer, RFU_GAME_NAME_LENGTH);
+ memcpy(buff2, gHostRFUtgtUnameBuffer, PLAYER_NAME_LENGTH + 1);
}
+#define sNextAnimNum data[0]
+#define sSavedAnimNum data[1]
+#define sCurrAnimNum data[2]
+#define sFrameDelay data[3]
+#define sFrameIdx data[4]
+#define sTileStart data[6]
+#define sValidator data[7]
+#define STATUS_INDICATOR_ACTIVE 0x1234 // Used to validate active indicator
+
void CreateWirelessStatusIndicatorSprite(u8 x, u8 y)
{
u8 sprId;
@@ -692,28 +759,28 @@ void CreateWirelessStatusIndicatorSprite(u8 x, u8 y)
x = 0xE7;
y = 0x08;
}
- if (gRfuLinkStatus->parentChild == 1)
+ if (gRfuLinkStatus->parentChild == MODE_PARENT)
{
sprId = CreateSprite(&sWirelessStatusIndicatorSpriteTemplate, x, y, 0);
- gSprites[sprId].data[7] = 0x1234;
- gSprites[sprId].data[6] = GetSpriteTileStartByTag(sWirelessStatusIndicatorSpriteSheet.tag);
+ gSprites[sprId].sValidator = STATUS_INDICATOR_ACTIVE;
+ gSprites[sprId].sTileStart = GetSpriteTileStartByTag(sWirelessStatusIndicatorSpriteSheet.tag);
gSprites[sprId].invisible = TRUE;
gWirelessStatusIndicatorSpriteId = sprId;
}
else
{
gWirelessStatusIndicatorSpriteId = CreateSprite(&sWirelessStatusIndicatorSpriteTemplate, x, y, 0);
- gSprites[gWirelessStatusIndicatorSpriteId].data[7] = 0x1234;
- gSprites[gWirelessStatusIndicatorSpriteId].data[6] = GetSpriteTileStartByTag(sWirelessStatusIndicatorSpriteSheet.tag);
+ gSprites[gWirelessStatusIndicatorSpriteId].sValidator = STATUS_INDICATOR_ACTIVE;
+ gSprites[gWirelessStatusIndicatorSpriteId].sTileStart = GetSpriteTileStartByTag(sWirelessStatusIndicatorSpriteSheet.tag);
gSprites[gWirelessStatusIndicatorSpriteId].invisible = TRUE;
}
}
void DestroyWirelessStatusIndicatorSprite(void)
{
- if (gSprites[gWirelessStatusIndicatorSpriteId].data[7] == 0x1234)
+ if (gSprites[gWirelessStatusIndicatorSpriteId].sValidator == STATUS_INDICATOR_ACTIVE)
{
- gSprites[gWirelessStatusIndicatorSpriteId].data[7] = 0;
+ gSprites[gWirelessStatusIndicatorSpriteId].sValidator = 0;
DestroySprite(&gSprites[gWirelessStatusIndicatorSpriteId]);
gMain.oamBuffer[125] = gDummyOamData;
CpuCopy16(&gDummyOamData, (struct OamData *)OAM + 125, sizeof(struct OamData));
@@ -730,11 +797,11 @@ void LoadWirelessStatusIndicatorSpriteGfx(void)
gWirelessStatusIndicatorSpriteId = 0xFF;
}
-u8 sub_800E124(void)
+static u8 GetParentSignalStrength(void)
{
u8 i;
u8 flags = gRfuLinkStatus->connSlotFlag;
- for (i = 0; i < 4; i++)
+ for (i = 0; i < RFU_CHILD_MAX; i++)
{
if (flags & 1)
{
@@ -745,104 +812,110 @@ u8 sub_800E124(void)
return 0;
}
-void sub_800E15C(struct Sprite *sprite, s32 signalStrengthAnimNum)
+static void SetWirelessStatusIndicatorAnim(struct Sprite *sprite, s32 animNum)
{
- if (sprite->data[2] != signalStrengthAnimNum)
+ if (sprite->sCurrAnimNum != animNum)
{
- sprite->data[2] = signalStrengthAnimNum;
- sprite->data[3] = 0;
- sprite->data[4] = 0;
+ sprite->sCurrAnimNum = animNum;
+ sprite->sFrameDelay = 0;
+ sprite->sFrameIdx = 0;
}
}
-void sub_800E174(void)
+void UpdateWirelessStatusIndicatorSprite(void)
{
- if (gWirelessStatusIndicatorSpriteId != 0xFF && gSprites[gWirelessStatusIndicatorSpriteId].data[7] == 0x1234)
+ if (gWirelessStatusIndicatorSpriteId != 0xFF && gSprites[gWirelessStatusIndicatorSpriteId].sValidator == STATUS_INDICATOR_ACTIVE)
{
struct Sprite *sprite = &gSprites[gWirelessStatusIndicatorSpriteId];
- u8 signalStrength = 255;
+ u8 signalStrength = RFU_LINK_ICON_LEVEL4_MAX;
u8 i = 0;
- if (gRfuLinkStatus->parentChild == 1)
+ if (gRfuLinkStatus->parentChild == MODE_PARENT)
{
for (i = 0; i < GetLinkPlayerCount() - 1; i++)
{
- if (signalStrength >= sub_800DD1C(i + 1))
+ if (signalStrength >= GetConnectedChildStrength(i + 1))
{
- signalStrength = sub_800DD1C(i + 1);
+ signalStrength = GetConnectedChildStrength(i + 1);
}
}
}
else
{
- signalStrength = sub_800E124();
+ signalStrength = GetParentSignalStrength();
}
- if (sub_8012224() == TRUE)
+ if (IsRfuRecoveringFromLinkLoss() == TRUE)
{
- sprite->data[0] = 4;
+ sprite->sNextAnimNum = WIRELESS_STATUS_ANIM_ERROR;
}
- else if (signalStrength < 25)
+ else if (signalStrength <= RFU_LINK_ICON_LEVEL1_MAX)
{
- sprite->data[0] = 3;
+ sprite->sNextAnimNum = WIRELESS_STATUS_ANIM_SEARCHING;
}
- else if (signalStrength >= 25 && signalStrength < 127)
+ else if (signalStrength >= RFU_LINK_ICON_LEVEL2_MIN && signalStrength <= RFU_LINK_ICON_LEVEL2_MAX)
{
- sprite->data[0] = 2;
+ sprite->sNextAnimNum = WIRELESS_STATUS_ANIM_1_BAR;
}
- else if (signalStrength >= 127 && signalStrength < 229)
+ else if (signalStrength >= RFU_LINK_ICON_LEVEL3_MIN && signalStrength <= RFU_LINK_ICON_LEVEL3_MAX)
{
- sprite->data[0] = 1;
+ sprite->sNextAnimNum = WIRELESS_STATUS_ANIM_2_BARS;
}
- else if (signalStrength >= 229)
+ else if (signalStrength >= RFU_LINK_ICON_LEVEL4_MIN)
{
- sprite->data[0] = 0;
+ sprite->sNextAnimNum = WIRELESS_STATUS_ANIM_3_BARS;
}
- if (sprite->data[0] != sprite->data[1])
+ if (sprite->sNextAnimNum != sprite->sSavedAnimNum)
{
- sub_800E15C(sprite, sprite->data[0]);
- sprite->data[1] = sprite->data[0];
+ SetWirelessStatusIndicatorAnim(sprite, sprite->sNextAnimNum);
+ sprite->sSavedAnimNum = sprite->sNextAnimNum;
}
- if (sprite->anims[sprite->data[2]][sprite->data[4]].frame.duration < sprite->data[3])
+ if (sprite->anims[sprite->sCurrAnimNum][sprite->sFrameIdx].frame.duration < sprite->sFrameDelay)
{
- sprite->data[4]++;
- sprite->data[3] = 0;
- if (sprite->anims[sprite->data[2]][sprite->data[4]].type == -2)
+ sprite->sFrameIdx++;
+ sprite->sFrameDelay = 0;
+ if (sprite->anims[sprite->sCurrAnimNum][sprite->sFrameIdx].type == -2)
{
- sprite->data[4] = 0;
+ sprite->sFrameIdx = 0;
}
}
else
{
- sprite->data[3]++;
+ sprite->sFrameDelay++;
}
gMain.oamBuffer[125] = sWirelessStatusIndicatorOamData;
gMain.oamBuffer[125].x = sprite->pos1.x + sprite->centerToCornerVecX;
gMain.oamBuffer[125].y = sprite->pos1.y + sprite->centerToCornerVecY;
gMain.oamBuffer[125].paletteNum = sprite->oam.paletteNum;
- gMain.oamBuffer[125].tileNum = sprite->data[6] + sprite->anims[sprite->data[2]][sprite->data[4]].frame.imageValue;
+ gMain.oamBuffer[125].tileNum = sprite->sTileStart + sprite->anims[sprite->sCurrAnimNum][sprite->sFrameIdx].frame.imageValue;
CpuCopy16(gMain.oamBuffer + 125, (struct OamData *)OAM + 125, sizeof(struct OamData));
- if (sub_8011A74() == 1)
+ if (RfuGetStatus() == RFU_STATUS_FATAL_ERROR)
{
DestroyWirelessStatusIndicatorSprite();
}
}
}
-void CopyTrainerRecord(struct TrainerNameRecord *dest, u32 trainerId, const u8 *name)
+#undef sNextAnimNum
+#undef sSavedAnimNum
+#undef sCurrAnimNum
+#undef sFrameDelay
+#undef sFrameIdx
+#undef sTileStart
+#undef sValidator
+
+static void CopyTrainerRecord(struct TrainerNameRecord *dest, u32 trainerId, const u8 *name)
{
dest->trainerId = trainerId;
StringCopy(dest->trainerName, name);
}
-bool32 NameIsNotEmpty(const u8 *name)
+static bool32 NameIsNotEmpty(const u8 *name)
{
s32 i;
for (i = 0; i < PLAYER_NAME_LENGTH + 1; i++)
{
if (name[i] != 0)
- {
return TRUE;
- }
}
return FALSE;
}
@@ -856,13 +929,13 @@ void RecordMixTrainerNames(void)
s32 j;
s32 nextSpace;
s32 connectedTrainerRecordIndices[5];
- struct TrainerNameRecord *newRecords = calloc(20, sizeof(struct TrainerNameRecord));
+ struct TrainerNameRecord *newRecords = calloc(ARRAY_COUNT(gSaveBlock1Ptr->trainerNameRecords), sizeof(struct TrainerNameRecord));
// Check if we already have a record saved for connected trainers.
for (i = 0; i < GetLinkPlayerCount(); i++)
{
connectedTrainerRecordIndices[i] = -1;
- for (j = 0; j < 20; j++)
+ for (j = 0; j < (int)ARRAY_COUNT(gSaveBlock1Ptr->trainerNameRecords); j++)
{
if ((u16)gLinkPlayers[i].trainerId == gSaveBlock1Ptr->trainerNameRecords[j].trainerId && StringCompare(gLinkPlayers[i].name, gSaveBlock1Ptr->trainerNameRecords[j].trainerName) == 0)
{
@@ -890,12 +963,12 @@ void RecordMixTrainerNames(void)
// Copy all non-empty records to the new list, in the order they appear on the old list. If the list is full,
// the last (oldest) records will be dropped.
- for (i = 0; i < 20; i++)
+ for (i = 0; i < (int)ARRAY_COUNT(gSaveBlock1Ptr->trainerNameRecords); i++)
{
if (NameIsNotEmpty(gSaveBlock1Ptr->trainerNameRecords[i].trainerName))
{
CopyTrainerRecord(&newRecords[nextSpace], gSaveBlock1Ptr->trainerNameRecords[i].trainerId, gSaveBlock1Ptr->trainerNameRecords[i].trainerName);
- if (++nextSpace >= 20)
+ if (++nextSpace >= (int)ARRAY_COUNT(gSaveBlock1Ptr->trainerNameRecords))
{
break;
}
@@ -903,25 +976,22 @@ void RecordMixTrainerNames(void)
}
// Finalize the new list, and clean up.
- memcpy(gSaveBlock1Ptr->trainerNameRecords, newRecords, 20 * sizeof(struct TrainerNameRecord));
+ memcpy(gSaveBlock1Ptr->trainerNameRecords, newRecords, sizeof(gSaveBlock1Ptr->trainerNameRecords));
free(newRecords);
}
}
-bool32 sub_800E540(u16 id, u8 *name)
+bool32 PlayerHasMetTrainerBefore(u16 id, u8 *name)
{
s32 i;
- for (i = 0; i < 20; i++)
+ for (i = 0; i < (int)ARRAY_COUNT(gSaveBlock1Ptr->trainerNameRecords); i++)
{
if (StringCompare(gSaveBlock1Ptr->trainerNameRecords[i].trainerName, name) == 0 && gSaveBlock1Ptr->trainerNameRecords[i].trainerId == id)
- {
return TRUE;
- }
+
if (!NameIsNotEmpty(gSaveBlock1Ptr->trainerNameRecords[i].trainerName))
- {
return FALSE;
- }
}
return FALSE;
}
@@ -930,7 +1000,7 @@ void WipeTrainerNameRecords(void)
{
s32 i;
- for (i = 0; i < 20; i++)
+ for (i = 0; i < (int)ARRAY_COUNT(gSaveBlock1Ptr->trainerNameRecords); i++)
{
gSaveBlock1Ptr->trainerNameRecords[i].trainerId = 0;
CpuFill16(0, gSaveBlock1Ptr->trainerNameRecords[i].trainerName, 8);
diff --git a/src/list_menu.c b/src/list_menu.c
index ddcad0fe9..1e549a34a 100644
--- a/src/list_menu.c
+++ b/src/list_menu.c
@@ -312,7 +312,7 @@ static void ListMenuDummyTask(u8 taskId)
}
-s32 DoMysteryGiftListMenu(const struct WindowTemplate *windowTemplate, const struct ListMenuTemplate *listMenuTemplate, u8 arg2, u16 tileNum, u16 palNum)
+u32 DoMysteryGiftListMenu(const struct WindowTemplate *windowTemplate, const struct ListMenuTemplate *listMenuTemplate, u8 arg2, u16 tileNum, u16 palNum)
{
switch (sMysteryGiftLinkMenu.state)
{
@@ -1257,17 +1257,17 @@ void ListMenuSetUpRedOutlineCursorSpriteOamTable(u16 rowWidth, u16 rowHeight, st
s32 i, j, id = 0;
subsprites[id] = sSubsprite_RedOutline1;
- subsprites[id].x = 136;
- subsprites[id].y = 136;
+ subsprites[id].x = -120;
+ subsprites[id].y = -120;
id++;
subsprites[id] = sSubsprite_RedOutline2;
subsprites[id].x = rowWidth + 128;
- subsprites[id].y = 136;
+ subsprites[id].y = -120;
id++;
subsprites[id] = sSubsprite_RedOutline7;
- subsprites[id].x = 136;
+ subsprites[id].x = -120;
subsprites[id].y = rowHeight + 128;
id++;
@@ -1282,7 +1282,7 @@ void ListMenuSetUpRedOutlineCursorSpriteOamTable(u16 rowWidth, u16 rowHeight, st
{
subsprites[id] = sSubsprite_RedOutline3;
subsprites[id].x = i - 120;
- subsprites[id].y = 136;
+ subsprites[id].y = -120;
id++;
subsprites[id] = sSubsprite_RedOutline6;
@@ -1297,7 +1297,7 @@ void ListMenuSetUpRedOutlineCursorSpriteOamTable(u16 rowWidth, u16 rowHeight, st
for (j = 8; j < rowHeight - 8; j += 8)
{
subsprites[id] = sSubsprite_RedOutline4;
- subsprites[id].x = 136;
+ subsprites[id].x = -120;
subsprites[id].y = j - 120;
id++;
diff --git a/src/m4a.c b/src/m4a.c
index 267a72657..b8f9e21c1 100644
--- a/src/m4a.c
+++ b/src/m4a.c
@@ -22,8 +22,7 @@ u8 gMPlayMemAccArea[0x10];
u32 MidiKeyToFreq(struct WaveData *wav, u8 key, u8 fineAdjust)
{
- u32 val1;
- u32 val2;
+ u32 val1, val2;
u32 fineAdjustShifted = fineAdjust << 24;
if (key > 178)
@@ -315,7 +314,7 @@ void MPlayExtender(struct CgbChannel *cgbChans)
void MusicPlayerJumpTableCopy(void)
{
- asm("swi 0x2A");
+ asm("svc 0x2A");
}
void ClearChain(void *x)
@@ -352,25 +351,25 @@ void SoundInit(struct SoundInfo *soundInfo)
| SOUND_ALL_MIX_FULL;
REG_SOUNDBIAS_H = (REG_SOUNDBIAS_H & 0x3F) | 0x40;
- REG_DMA1SAD = (s32)soundInfo->pcmBuffer;
- REG_DMA1DAD = (s32)&REG_FIFO_A;
- REG_DMA2SAD = (s32)soundInfo->pcmBuffer + PCM_DMA_BUF_SIZE;
- REG_DMA2DAD = (s32)&REG_FIFO_B;
+ REG_DMA1SAD = (u32)soundInfo->pcmBuffer;
+ REG_DMA1DAD = (u32)&REG_FIFO_A;
+ REG_DMA2SAD = (u32)soundInfo->pcmBuffer + PCM_DMA_BUF_SIZE;
+ REG_DMA2DAD = (u32)&REG_FIFO_B;
SOUND_INFO_PTR = soundInfo;
CpuFill32(0, soundInfo, sizeof(struct SoundInfo));
soundInfo->maxChans = 8;
soundInfo->masterVolume = 15;
- soundInfo->plynote = (u32)ply_note;
+ soundInfo->plynote = ply_note;
soundInfo->CgbSound = DummyFunc;
soundInfo->CgbOscOff = (void (*)(u8))DummyFunc;
soundInfo->MidiKeyToCgbFreq = (u32 (*)(u8, u8, u8))DummyFunc;
- soundInfo->ExtVolPit = (u32)DummyFunc;
+ soundInfo->ExtVolPit = (void (*)(struct MusicPlayerInfo *, struct MusicPlayerTrack *))DummyFunc;
MPlayJumpTableCopy(gMPlayJumpTable);
- soundInfo->MPlayJumpTable = (u32)gMPlayJumpTable;
+ soundInfo->MPlayJumpTable = (void (**)())gMPlayJumpTable;
SampleFreqSet(SOUND_MODE_FREQ_13379);
@@ -381,7 +380,7 @@ void SampleFreqSet(u32 freq)
{
struct SoundInfo *soundInfo = SOUND_INFO_PTR;
- freq = (freq & 0xF0000) >> 16;
+ freq = (freq & SOUND_MODE_FREQ) >> SOUND_MODE_FREQ_SHIFT;
soundInfo->freq = freq;
soundInfo->pcmSamplesPerVBlank = gPcmSamplesPerVBlankTable[freq - 1];
soundInfo->pcmDmaPeriod = PCM_DMA_BUF_SIZE / soundInfo->pcmSamplesPerVBlank;
@@ -432,14 +431,9 @@ void m4aSoundMode(u32 mode)
soundInfo->maxChans = temp >> SOUND_MODE_MAXCHN_SHIFT;
- temp = MAX_DIRECTSOUND_CHANNELS;
- chan = &soundInfo->chans[0];
-
- while (temp != 0)
+ for (temp = MAX_DIRECTSOUND_CHANNELS, chan = soundInfo->chans; temp != 0; temp--,chan++)
{
chan->status = 0;
- temp--;
- chan++;
}
}
@@ -469,37 +463,28 @@ void m4aSoundMode(u32 mode)
void SoundClear(void)
{
- struct SoundInfo *soundInfo = SOUND_INFO_PTR;
s32 i;
- void *chan;
+ struct SoundInfo *soundInfo = SOUND_INFO_PTR;
+ struct SoundChannel *chan;
if (soundInfo->ident != ID_NUMBER)
return;
soundInfo->ident++;
- i = MAX_DIRECTSOUND_CHANNELS;
- chan = &soundInfo->chans[0];
-
- while (i > 0)
+ for (i = MAX_DIRECTSOUND_CHANNELS, chan = soundInfo->chans; i > 0; i--,chan++)
{
- ((struct SoundChannel *)chan)->status = 0;
- i--;
- chan = (void *)((s32)chan + sizeof(struct SoundChannel));
+ chan->status = 0;
}
- chan = soundInfo->cgbChans;
+ chan = (struct SoundChannel *)soundInfo->cgbChans;
if (chan)
{
- i = 1;
-
- while (i <= 4)
+ for (i=1; i<=4; i++,chan++)
{
soundInfo->CgbOscOff(i);
- ((struct CgbChannel *)chan)->sf = 0;
- i++;
- chan = (void *)((s32)chan + sizeof(struct CgbChannel));
+ chan->status = 0;
}
}
@@ -510,21 +495,20 @@ void m4aSoundVSyncOff(void)
{
struct SoundInfo *soundInfo = SOUND_INFO_PTR;
- if (soundInfo->ident >= ID_NUMBER && soundInfo->ident <= ID_NUMBER + 1)
- {
- soundInfo->ident += 10;
+ if (soundInfo->ident < ID_NUMBER || soundInfo->ident > ID_NUMBER + 1)
+ return;
+ soundInfo->ident += 10;
- if (REG_DMA1CNT & (DMA_REPEAT << 16))
- REG_DMA1CNT = ((DMA_ENABLE | DMA_START_NOW | DMA_32BIT | DMA_SRC_INC | DMA_DEST_FIXED) << 16) | 4;
+ if (REG_DMA1CNT & (DMA_REPEAT << 16))
+ REG_DMA1CNT = ((DMA_ENABLE | DMA_START_NOW | DMA_32BIT | DMA_SRC_INC | DMA_DEST_FIXED) << 16) | 4;
- if (REG_DMA2CNT & (DMA_REPEAT << 16))
- REG_DMA2CNT = ((DMA_ENABLE | DMA_START_NOW | DMA_32BIT | DMA_SRC_INC | DMA_DEST_FIXED) << 16) | 4;
+ if (REG_DMA2CNT & (DMA_REPEAT << 16))
+ REG_DMA2CNT = ((DMA_ENABLE | DMA_START_NOW | DMA_32BIT | DMA_SRC_INC | DMA_DEST_FIXED) << 16) | 4;
- REG_DMA1CNT_H = DMA_32BIT;
- REG_DMA2CNT_H = DMA_32BIT;
+ REG_DMA1CNT_H = DMA_32BIT;
+ REG_DMA2CNT_H = DMA_32BIT;
- CpuFill32(0, soundInfo->pcmBuffer, sizeof(soundInfo->pcmBuffer));
- }
+ CpuFill32(0, soundInfo->pcmBuffer, sizeof(soundInfo->pcmBuffer));
}
void m4aSoundVSyncOn(void)
@@ -580,7 +564,7 @@ void MPlayOpen(struct MusicPlayerInfo *mplayInfo, struct MusicPlayerTrack *track
}
soundInfo->intp = (u32)mplayInfo;
- soundInfo->func = (u32)MPlayMain;
+ soundInfo->func = MPlayMain;
soundInfo->ident = ID_NUMBER;
mplayInfo->ident = ID_NUMBER;
}
@@ -614,28 +598,21 @@ void MPlayStart(struct MusicPlayerInfo *mplayInfo, struct SongHeader *songHeader
mplayInfo->tempoC = 0;
mplayInfo->fadeOI = 0;
- i = 0;
- track = mplayInfo->tracks;
-
- while (i < songHeader->trackCount && i < mplayInfo->trackCount)
+ for (i = 0, track = mplayInfo->tracks; i < songHeader->trackCount && i < mplayInfo->trackCount; i++, track++)
{
TrackStop(mplayInfo, track);
track->flags = MPT_FLG_EXIST | MPT_FLG_START;
track->chan = 0;
track->cmdPtr = songHeader->part[i];
- i++;
- track++;
}
- while (i < mplayInfo->trackCount)
+ for (; i < mplayInfo->trackCount; i++, track++)
{
TrackStop(mplayInfo, track);
track->flags = 0;
- i++;
- track++;
}
- if (songHeader->reverb & 0x80)
+ if (songHeader->reverb & SOUND_MODE_REVERB_SET)
m4aSoundMode(songHeader->reverb);
mplayInfo->ident = ID_NUMBER;
@@ -653,14 +630,9 @@ void m4aMPlayStop(struct MusicPlayerInfo *mplayInfo)
mplayInfo->ident++;
mplayInfo->status |= MUSICPLAYER_STATUS_PAUSE;
- i = mplayInfo->trackCount;
- track = mplayInfo->tracks;
-
- while (i > 0)
+ for (i = mplayInfo->trackCount, track = mplayInfo->tracks; i > 0; i--, track++)
{
TrackStop(mplayInfo, track);
- i--;
- track++;
}
mplayInfo->ident = ID_NUMBER;
@@ -704,10 +676,8 @@ void FadeOutBody(struct MusicPlayerInfo *mplayInfo)
if ((s16)(mplayInfo->fadeOV & mask) <= 0)
{
- i = mplayInfo->trackCount;
- track = mplayInfo->tracks;
- while (i > 0)
+ for (i = mplayInfo->trackCount, track = mplayInfo->tracks; i > 0; i--, track++)
{
u32 val;
@@ -719,9 +689,6 @@ void FadeOutBody(struct MusicPlayerInfo *mplayInfo)
if (!val)
track->flags = 0;
-
- i--;
- track++;
}
if (mplayInfo->fadeOV & TEMPORARY_FADE)
@@ -734,10 +701,7 @@ void FadeOutBody(struct MusicPlayerInfo *mplayInfo)
}
}
- i = mplayInfo->trackCount;
- track = mplayInfo->tracks;
-
- while (i > 0)
+ for (i = mplayInfo->trackCount, track = mplayInfo->tracks; i > 0; i--, track++)
{
if (track->flags & MPT_FLG_EXIST)
{
@@ -746,9 +710,6 @@ void FadeOutBody(struct MusicPlayerInfo *mplayInfo)
track->volX = (fadeOV >> FADE_VOL_SHIFT);
track->flags |= MPT_FLG_VOLCHG;
}
-
- i--;
- track++;
}
}
@@ -756,7 +717,7 @@ void TrkVolPitSet(struct MusicPlayerInfo *mplayInfo, struct MusicPlayerTrack *tr
{
if (track->flags & MPT_FLG_VOLSET)
{
- s32 x;
+ u32 x;
s32 y;
x = (u32)(track->vol * track->volX) >> 5;
@@ -904,7 +865,9 @@ void CgbModVol(struct CgbChannel *chan)
// Force chan->rightVolume and chan->leftVolume to be read from memory again,
// even though there is no reason to do so.
// The command line option "-fno-gcse" achieves the same result as this.
- asm("" : : : "memory");
+ #ifndef NONMATCHING
+ asm("" : : : "memory");
+ #endif
chan->eg = (u32)(chan->rightVolume + chan->leftVolume) >> 4;
if (chan->eg > 15)
diff --git a/src/m4a_1.s b/src/m4a_1.s
index cab4ed174..eace09b05 100644
--- a/src/m4a_1.s
+++ b/src/m4a_1.s
@@ -22,13 +22,13 @@ SoundMain:
ldr r0, lt_SOUND_INFO_PTR
ldr r0, [r0]
ldr r2, lt_ID_NUMBER
- ldr r3, [r0, o_SoundInfo_ident]
+ ldr r3, [r0, #o_SoundInfo_ident]
cmp r2, r3
beq SoundMain_1
bx lr @ Exit the function if ident doesn't match ID_NUMBER.
SoundMain_1:
adds r3, 1
- str r3, [r0, o_SoundInfo_ident]
+ str r3, [r0, #o_SoundInfo_ident]
push {r4-r7,lr}
mov r1, r8
mov r2, r9
@@ -36,7 +36,7 @@ SoundMain_1:
mov r4, r11
push {r0-r4}
sub sp, 0x18
- ldrb r1, [r0, o_SoundInfo_maxLines]
+ ldrb r1, [r0, #o_SoundInfo_maxLines]
cmp r1, 0 @ if maxLines is 0, there is no maximum
beq SoundMain_3
ldr r2, lt_REG_VCOUNT
@@ -48,24 +48,24 @@ SoundMain_2:
adds r1, r2
SoundMain_3:
str r1, [sp, 0x14]
- ldr r3, [r0, o_SoundInfo_func]
+ ldr r3, [r0, #o_SoundInfo_func]
cmp r3, 0
beq SoundMain_4
- ldr r0, [r0, o_SoundInfo_intp]
+ ldr r0, [r0, #o_SoundInfo_intp]
bl _081DD25E
ldr r0, [sp, 0x18]
SoundMain_4:
- ldr r3, [r0, o_SoundInfo_CgbSound]
+ ldr r3, [r0, #o_SoundInfo_CgbSound]
bl _081DD25E
ldr r0, [sp, 0x18]
- ldr r3, [r0, o_SoundInfo_pcmSamplesPerVBlank]
+ ldr r3, [r0, #o_SoundInfo_pcmSamplesPerVBlank]
mov r8, r3
ldr r5, lt_o_SoundInfo_pcmBuffer
adds r5, r0
- ldrb r4, [r0, o_SoundInfo_pcmDmaCounter]
+ ldrb r4, [r0, #o_SoundInfo_pcmDmaCounter]
subs r7, r4, 1
bls SoundMain_5
- ldrb r1, [r0, o_SoundInfo_pcmDmaPeriod]
+ ldrb r1, [r0, #o_SoundInfo_pcmDmaPeriod]
subs r1, r7
mov r2, r8
muls r2, r1
@@ -87,7 +87,7 @@ lt_PCM_DMA_BUF_SIZE: .word PCM_DMA_BUF_SIZE
thumb_func_start SoundMainRAM
SoundMainRAM:
- ldrb r3, [r0, o_SoundInfo_reverb]
+ ldrb r3, [r0, #o_SoundInfo_reverb]
cmp r3, 0
beq SoundMainRAM_NoReverb
adr r1, SoundMainRAM_Reverb
@@ -95,7 +95,7 @@ SoundMainRAM:
.arm
SoundMainRAM_Reverb:
cmp r4, 0x2
- addeq r7, r0, o_SoundInfo_pcmBuffer
+ addeq r7, r0, #o_SoundInfo_pcmBuffer
addne r7, r5, r8
mov r4, r8
_081DCEC4:
@@ -145,14 +145,14 @@ SoundMainRAM_NoReverb_Loop:
bgt SoundMainRAM_NoReverb_Loop
_081DCF36:
ldr r4, [sp, 0x18]
- ldr r0, [r4, o_SoundInfo_divFreq]
+ ldr r0, [r4, #o_SoundInfo_divFreq]
mov r12, r0
- ldrb r0, [r4, o_SoundInfo_maxChans]
- adds r4, o_SoundInfo_chans
+ ldrb r0, [r4, #o_SoundInfo_maxChans]
+ adds r4, #o_SoundInfo_chans
SoundMainRAM_ChanLoop:
str r0, [sp, 0x4]
- ldr r3, [r4, o_SoundChannel_wav]
+ ldr r3, [r4, #o_SoundChannel_wav]
ldr r0, [sp, 0x14]
cmp r0, 0
beq _081DCF60
@@ -169,7 +169,7 @@ _081DCF54:
.pool
_081DCF60:
- ldrb r6, [r4, o_SoundChannel_status]
+ ldrb r6, [r4, #o_SoundChannel_status]
movs r0, 0xC7
tst r0, r6
bne _081DCF6A
@@ -182,99 +182,99 @@ _081DCF6A:
tst r0, r6
bne _081DCFB0
movs r6, 0x3
- strb r6, [r4, o_SoundChannel_status]
+ strb r6, [r4, #o_SoundChannel_status]
adds r0, r3, 0
adds r0, 0x10
- ldr r1, [r4, o_SoundChannel_ct]
+ ldr r1, [r4, #o_SoundChannel_ct]
adds r0, r1
- str r0, [r4, o_SoundChannel_cp]
+ str r0, [r4, #o_SoundChannel_cp]
ldr r0, [r3, 0xC]
subs r0, r1
- str r0, [r4, o_SoundChannel_ct]
+ str r0, [r4, #o_SoundChannel_ct]
movs r5, 0
- strb r5, [r4, o_SoundChannel_ev]
- str r5, [r4, o_SoundChannel_fw]
+ strb r5, [r4, #o_SoundChannel_ev]
+ str r5, [r4, #o_SoundChannel_fw]
ldrb r2, [r3, 0x3]
movs r0, 0xC0
tst r0, r2
beq _081DCFF8
movs r0, 0x10
orrs r6, r0
- strb r6, [r4, o_SoundChannel_status]
+ strb r6, [r4, #o_SoundChannel_status]
b _081DCFF8
_081DCFA0:
- ldrb r5, [r4, o_SoundChannel_ev]
+ ldrb r5, [r4, #o_SoundChannel_ev]
movs r0, 0x4
tst r0, r6
beq _081DCFB6
- ldrb r0, [r4, o_SoundChannel_iel]
+ ldrb r0, [r4, #o_SoundChannel_iel]
subs r0, 1
- strb r0, [r4, o_SoundChannel_iel]
+ strb r0, [r4, #o_SoundChannel_iel]
bhi _081DD006
_081DCFB0:
movs r0, 0
- strb r0, [r4, o_SoundChannel_status]
+ strb r0, [r4, #o_SoundChannel_status]
b _081DD240
_081DCFB6:
movs r0, 0x40
tst r0, r6
beq _081DCFD6
- ldrb r0, [r4, o_SoundChannel_release]
+ ldrb r0, [r4, #o_SoundChannel_release]
muls r5, r0
lsrs r5, 8
- ldrb r0, [r4, o_SoundChannel_iev]
+ ldrb r0, [r4, #o_SoundChannel_iev]
cmp r5, r0
bhi _081DD006
_081DCFC8:
- ldrb r5, [r4, o_SoundChannel_iev]
+ ldrb r5, [r4, #o_SoundChannel_iev]
cmp r5, 0
beq _081DCFB0
movs r0, 0x4
orrs r6, r0
- strb r6, [r4, o_SoundChannel_status]
+ strb r6, [r4, #o_SoundChannel_status]
b _081DD006
_081DCFD6:
movs r2, 0x3
ands r2, r6
cmp r2, 0x2
bne _081DCFF4
- ldrb r0, [r4, o_SoundChannel_decay]
+ ldrb r0, [r4, #o_SoundChannel_decay]
muls r5, r0
lsrs r5, 8
- ldrb r0, [r4, o_SoundChannel_sustain]
+ ldrb r0, [r4, #o_SoundChannel_sustain]
cmp r5, r0
bhi _081DD006
adds r5, r0, 0
beq _081DCFC8
subs r6, 0x1
- strb r6, [r4, o_SoundChannel_status]
+ strb r6, [r4, #o_SoundChannel_status]
b _081DD006
_081DCFF4:
cmp r2, 0x3
bne _081DD006
_081DCFF8:
- ldrb r0, [r4, o_SoundChannel_attack]
+ ldrb r0, [r4, #o_SoundChannel_attack]
adds r5, r0
cmp r5, 0xFF
bcc _081DD006
movs r5, 0xFF
subs r6, 0x1
- strb r6, [r4, o_SoundChannel_status]
+ strb r6, [r4, #o_SoundChannel_status]
_081DD006:
- strb r5, [r4, o_SoundChannel_ev]
+ strb r5, [r4, #o_SoundChannel_ev]
ldr r0, [sp, 0x18]
- ldrb r0, [r0, o_SoundChannel_release]
+ ldrb r0, [r0, #o_SoundChannel_release]
adds r0, 0x1
muls r0, r5
lsrs r5, r0, 4
- ldrb r0, [r4, o_SoundChannel_rightVolume]
+ ldrb r0, [r4, #o_SoundChannel_rightVolume]
muls r0, r5
lsrs r0, 8
- strb r0, [r4, o_SoundChannel_er]
- ldrb r0, [r4, o_SoundChannel_leftVolume]
+ strb r0, [r4, #o_SoundChannel_er]
+ ldrb r0, [r4, #o_SoundChannel_leftVolume]
muls r0, r5
lsrs r0, 8
- strb r0, [r4, o_SoundChannel_el]
+ strb r0, [r4, #o_SoundChannel_el]
movs r0, 0x10
ands r0, r6
str r0, [sp, 0x10]
@@ -289,17 +289,17 @@ _081DD006:
str r0, [sp, 0x10]
_081DD03A:
ldr r5, [sp, 0x8]
- ldr r2, [r4, o_SoundChannel_ct]
- ldr r3, [r4, o_SoundChannel_cp]
+ ldr r2, [r4, #o_SoundChannel_ct]
+ ldr r3, [r4, #o_SoundChannel_cp]
adr r0, _081DD044
bx r0
.arm
_081DD044:
str r8, [sp]
- ldr r9, [r4, o_SoundChannel_fw]
- ldrb r10, [r4, o_SoundChannel_er]
- ldrb r11, [r4, o_SoundChannel_el]
- ldrb r0, [r4, o_SoundChannel_type]
+ ldr r9, [r4, #o_SoundChannel_fw]
+ ldrb r10, [r4, #o_SoundChannel_er]
+ ldrb r11, [r4, #o_SoundChannel_el]
+ ldrb r0, [r4, #o_SoundChannel_type]
tst r0, 0x30
beq _081DD068
bl sub_82DF49C
@@ -307,7 +307,7 @@ _081DD044:
_081DD068:
mov r10, r10, lsl 16
mov r11, r11, lsl 16
- ldrb r0, [r4, o_SoundChannel_type]
+ ldrb r0, [r4, #o_SoundChannel_type]
tst r0, 0x8
beq _081DD19C
_081DD07C:
@@ -383,7 +383,7 @@ _081DD164:
ldrne r3, [sp, 0xC]
bne _081DD118
_081DD174:
- strb r2, [r4, o_SoundChannel_status]
+ strb r2, [r4, #o_SoundChannel_status]
mov r0, r5, lsr 30
bic r5, r5, 0xC0000000
rsb r0, r0, 0x3
@@ -395,7 +395,7 @@ _081DD174:
b _081DD234
_081DD19C:
push {r4,r12}
- ldr r1, [r4, o_SoundChannel_freq]
+ ldr r1, [r4, #o_SoundChannel_freq]
mul r4, r12, r1
ldrsb r0, [r3]
ldrsb r1, [r3, 0x1]!
@@ -434,10 +434,10 @@ _081DD208:
sub r3, r3, 0x1
pop {r4,r12}
_081DD228:
- str r9, [r4, o_SoundChannel_fw]
+ str r9, [r4, #o_SoundChannel_fw]
_081DD22C:
- str r2, [r4, o_SoundChannel_ct]
- str r3, [r4, o_SoundChannel_cp]
+ str r2, [r4, #o_SoundChannel_ct]
+ str r3, [r4, #o_SoundChannel_cp]
_081DD234:
ldr r8, [sp]
add r0, pc, 0x1
@@ -467,33 +467,33 @@ _081DD25E:
arm_func_start sub_82DF49C
sub_82DF49C:
- ldr r6, [r4, o_SoundChannel_wav]
- ldrb r0, [r4, o_SoundChannel_status]
+ ldr r6, [r4, #o_SoundChannel_wav]
+ ldrb r0, [r4, #o_SoundChannel_status]
tst r0, 0x20
bne _081DD2B4
orr r0, r0, 0x20
- strb r0, [r4, o_SoundChannel_status]
- ldrb r0, [r4, o_SoundChannel_type]
+ strb r0, [r4, #o_SoundChannel_status]
+ ldrb r0, [r4, #o_SoundChannel_type]
tst r0, 0x10
beq _081DD29C
ldr r1, [r6, 0xC]
add r1, r1, r6, lsl 1
add r1, r1, 0x20
sub r3, r1, r3
- str r3, [r4, o_SoundChannel_cp]
+ str r3, [r4, #o_SoundChannel_cp]
_081DD29C:
ldrh r0, [r6]
cmp r0, 0
beq _081DD2B4
sub r3, r3, r6
sub r3, r3, 0x10
- str r3, [r4, o_SoundChannel_cp]
+ str r3, [r4, #o_SoundChannel_cp]
_081DD2B4:
push {r8,r12,lr}
mov r10, r10, lsl 16
mov r11, r11, lsl 16
- ldr r1, [r4, o_SoundChannel_freq]
- ldrb r0, [r4, o_SoundChannel_type]
+ ldr r1, [r4, #o_SoundChannel_freq]
+ ldrb r0, [r4, #o_SoundChannel_type]
tst r0, 0x8
movne r8, 0x800000
muleq r8, r12, r1
@@ -501,8 +501,8 @@ _081DD2B4:
cmp r0, 0
beq _081DD468
mov r0, 0xFF000000
- str r0, [r4, o_SoundChannel_xpi]
- ldrb r0, [r4, o_SoundChannel_type]
+ str r0, [r4, #o_SoundChannel_xpi]
+ ldrb r0, [r4, #o_SoundChannel_type]
tst r0, 0x10
bne _081DD3C0
bl sub_82DF758
@@ -555,7 +555,7 @@ _081DD398:
ldr r0, [sp, 0x1C]
cmp r0, 0
beq _081DD4F4
- ldr r3, [r4, o_SoundChannel_wav]
+ ldr r3, [r4, #o_SoundChannel_wav]
ldr r3, [r3, 0x8]
rsb lr, r2, 0
_081DD3B0:
@@ -612,7 +612,7 @@ _081DD440:
add r3, r3, 0x2
b _081DD4F0
_081DD468:
- ldrb r0, [r4, o_SoundChannel_type]
+ ldrb r0, [r4, #o_SoundChannel_type]
tst r0, 0x10
beq _081DD4F0
ldrsb r0, [r3, -0x1]!
@@ -653,7 +653,7 @@ _081DD4F0:
pop {r8,r12,pc}
_081DD4F4:
mov r2, 0
- strb r2, [r4, o_SoundChannel_status]
+ strb r2, [r4, #o_SoundChannel_status]
mov r0, r5, lsr 30
bic r5, r5, 0xC0000000
rsb r0, r0, 0x3
@@ -669,13 +669,13 @@ _081DD4F4:
sub_82DF758:
push {r0,r2,r5-r7,lr}
mov r0, r3, lsr 6
- ldr r1, [r4, o_SoundChannel_xpi]
+ ldr r1, [r4, #o_SoundChannel_xpi]
cmp r0, r1
beq _081DD594
- str r0, [r4, o_SoundChannel_xpi]
+ str r0, [r4, #o_SoundChannel_xpi]
mov r1, 0x21
mul r2, r1, r0
- ldr r1, [r4, o_SoundChannel_wav]
+ ldr r1, [r4, #o_SoundChannel_wav]
add r2, r2, r1
add r2, r2, 0x10
ldr r5, =gUnknown_03001300
@@ -749,7 +749,7 @@ _081DD5E2:
ply_fine:
push {r4,r5,lr}
adds r5, r1, 0
- ldr r4, [r5, o_MusicPlayerTrack_chan]
+ ldr r4, [r5, #o_MusicPlayerTrack_chan]
cmp r4, 0
beq ply_fine_done
ply_fine_loop:
@@ -830,7 +830,7 @@ _081DD64A:
ply_goto:
push {lr}
ply_goto_1:
- ldr r2, [r1, o_MusicPlayerTrack_cmdPtr]
+ ldr r2, [r1, #o_MusicPlayerTrack_cmdPtr]
ldrb r0, [r2, 0x3]
lsls r0, 8
ldrb r3, [r2, 0x2]
@@ -841,24 +841,24 @@ ply_goto_1:
lsls r0, 8
bl ldrb_r3_r2
orrs r0, r3
- str r0, [r1, o_MusicPlayerTrack_cmdPtr]
+ str r0, [r1, #o_MusicPlayerTrack_cmdPtr]
pop {r0}
bx r0
thumb_func_end ply_goto
thumb_func_start ply_patt
ply_patt:
- ldrb r2, [r1, o_MusicPlayerTrack_patternLevel]
+ ldrb r2, [r1, #o_MusicPlayerTrack_patternLevel]
cmp r2, 3
bhs ply_patt_done
lsls r2, 2
adds r3, r1, r2
- ldr r2, [r1, o_MusicPlayerTrack_cmdPtr]
+ ldr r2, [r1, #o_MusicPlayerTrack_cmdPtr]
adds r2, 0x4
- str r2, [r3, o_MusicPlayerTrack_patternStack]
- ldrb r2, [r1, o_MusicPlayerTrack_patternLevel]
+ str r2, [r3, #o_MusicPlayerTrack_patternStack]
+ ldrb r2, [r1, #o_MusicPlayerTrack_patternLevel]
adds r2, 1
- strb r2, [r1, o_MusicPlayerTrack_patternLevel]
+ strb r2, [r1, #o_MusicPlayerTrack_patternLevel]
b ply_goto
ply_patt_done:
b ply_fine
@@ -866,15 +866,15 @@ ply_patt_done:
thumb_func_start ply_pend
ply_pend:
- ldrb r2, [r1, o_MusicPlayerTrack_patternLevel]
+ ldrb r2, [r1, #o_MusicPlayerTrack_patternLevel]
cmp r2, 0
beq ply_pend_done
subs r2, 1
- strb r2, [r1, o_MusicPlayerTrack_patternLevel]
+ strb r2, [r1, #o_MusicPlayerTrack_patternLevel]
lsls r2, 2
adds r3, r1, r2
- ldr r2, [r3, o_MusicPlayerTrack_patternStack]
- str r2, [r1, o_MusicPlayerTrack_cmdPtr]
+ ldr r2, [r3, #o_MusicPlayerTrack_patternStack]
+ str r2, [r1, #o_MusicPlayerTrack_cmdPtr]
ply_pend_done:
bx lr
thumb_func_end ply_pend
@@ -882,17 +882,17 @@ ply_pend_done:
thumb_func_start ply_rept
ply_rept:
push {lr}
- ldr r2, [r1, o_MusicPlayerTrack_cmdPtr]
+ ldr r2, [r1, #o_MusicPlayerTrack_cmdPtr]
ldrb r3, [r2]
cmp r3, 0
bne ply_rept_1
adds r2, 1
- str r2, [r1, o_MusicPlayerTrack_cmdPtr]
+ str r2, [r1, #o_MusicPlayerTrack_cmdPtr]
b ply_goto_1
ply_rept_1:
- ldrb r3, [r1, o_MusicPlayerTrack_repN]
+ ldrb r3, [r1, #o_MusicPlayerTrack_repN]
adds r3, 1
- strb r3, [r1, o_MusicPlayerTrack_repN]
+ strb r3, [r1, #o_MusicPlayerTrack_repN]
mov r12, r3
bl ld_r3_tp_adr_i
cmp r12, r3
@@ -900,9 +900,9 @@ ply_rept_1:
b ply_goto_1
ply_rept_2:
movs r3, 0
- strb r3, [r1, o_MusicPlayerTrack_repN]
+ strb r3, [r1, #o_MusicPlayerTrack_repN]
adds r2, 5
- str r2, [r1, o_MusicPlayerTrack_cmdPtr]
+ str r2, [r1, #o_MusicPlayerTrack_cmdPtr]
pop {r0}
bx r0
thumb_func_end ply_rept
@@ -911,7 +911,7 @@ ply_rept_2:
ply_prio:
mov r12, lr
bl ld_r3_tp_adr_i
- strb r3, [r1, o_MusicPlayerTrack_priority]
+ strb r3, [r1, #o_MusicPlayerTrack_priority]
bx r12
thumb_func_end ply_prio
@@ -920,11 +920,11 @@ ply_tempo:
mov r12, lr
bl ld_r3_tp_adr_i
lsls r3, 1
- strh r3, [r0, o_MusicPlayerInfo_tempoD]
- ldrh r2, [r0, o_MusicPlayerInfo_tempoU]
+ strh r3, [r0, #o_MusicPlayerInfo_tempoD]
+ ldrh r2, [r0, #o_MusicPlayerInfo_tempoU]
muls r3, r2
lsrs r3, 8
- strh r3, [r0, o_MusicPlayerInfo_tempoI]
+ strh r3, [r0, #o_MusicPlayerInfo_tempoI]
bx r12
thumb_func_end ply_tempo
@@ -932,35 +932,35 @@ ply_tempo:
ply_keysh:
mov r12, lr
bl ld_r3_tp_adr_i
- strb r3, [r1, o_MusicPlayerTrack_keyShift]
- ldrb r3, [r1, o_MusicPlayerTrack_flags]
+ strb r3, [r1, #o_MusicPlayerTrack_keyShift]
+ ldrb r3, [r1, #o_MusicPlayerTrack_flags]
movs r2, 0xC
orrs r3, r2
- strb r3, [r1, o_MusicPlayerTrack_flags]
+ strb r3, [r1, #o_MusicPlayerTrack_flags]
bx r12
thumb_func_end ply_keysh
thumb_func_start ply_voice
ply_voice:
mov r12, lr
- ldr r2, [r1, o_MusicPlayerTrack_cmdPtr]
+ ldr r2, [r1, #o_MusicPlayerTrack_cmdPtr]
ldrb r3, [r2]
adds r2, 1
- str r2, [r1, o_MusicPlayerTrack_cmdPtr]
+ str r2, [r1, #o_MusicPlayerTrack_cmdPtr]
lsls r2, r3, 1
adds r2, r3
lsls r2, 2
- ldr r3, [r0, o_MusicPlayerInfo_tone]
+ ldr r3, [r0, #o_MusicPlayerInfo_tone]
adds r2, r3
ldr r3, [r2]
bl chk_adr_r2
- str r3, [r1, o_MusicPlayerTrack_ToneData_type]
+ str r3, [r1, #o_MusicPlayerTrack_ToneData_type]
ldr r3, [r2, 0x4]
bl chk_adr_r2
- str r3, [r1, o_MusicPlayerTrack_ToneData_wav]
+ str r3, [r1, #o_MusicPlayerTrack_ToneData_wav]
ldr r3, [r2, 0x8]
bl chk_adr_r2
- str r3, [r1, o_MusicPlayerTrack_ToneData_attack]
+ str r3, [r1, #o_MusicPlayerTrack_ToneData_attack]
bx r12
thumb_func_end ply_voice
@@ -968,11 +968,11 @@ ply_voice:
ply_vol:
mov r12, lr
bl ld_r3_tp_adr_i
- strb r3, [r1, o_MusicPlayerTrack_vol]
- ldrb r3, [r1, o_MusicPlayerTrack_flags]
+ strb r3, [r1, #o_MusicPlayerTrack_vol]
+ ldrb r3, [r1, #o_MusicPlayerTrack_flags]
movs r2, 0x3
orrs r3, r2
- strb r3, [r1, o_MusicPlayerTrack_flags]
+ strb r3, [r1, #o_MusicPlayerTrack_flags]
bx r12
thumb_func_end ply_vol
@@ -981,11 +981,11 @@ ply_pan:
mov r12, lr
bl ld_r3_tp_adr_i
subs r3, 0x40
- strb r3, [r1, o_MusicPlayerTrack_pan]
- ldrb r3, [r1, o_MusicPlayerTrack_flags]
+ strb r3, [r1, #o_MusicPlayerTrack_pan]
+ ldrb r3, [r1, #o_MusicPlayerTrack_flags]
movs r2, 0x3
orrs r3, r2
- strb r3, [r1, o_MusicPlayerTrack_flags]
+ strb r3, [r1, #o_MusicPlayerTrack_flags]
bx r12
thumb_func_end ply_pan
@@ -994,11 +994,11 @@ ply_bend:
mov r12, lr
bl ld_r3_tp_adr_i
subs r3, 0x40
- strb r3, [r1, o_MusicPlayerTrack_bend]
- ldrb r3, [r1, o_MusicPlayerTrack_flags]
+ strb r3, [r1, #o_MusicPlayerTrack_bend]
+ ldrb r3, [r1, #o_MusicPlayerTrack_flags]
movs r2, 0xC
orrs r3, r2
- strb r3, [r1, o_MusicPlayerTrack_flags]
+ strb r3, [r1, #o_MusicPlayerTrack_flags]
bx r12
thumb_func_end ply_bend
@@ -1006,11 +1006,11 @@ ply_bend:
ply_bendr:
mov r12, lr
bl ld_r3_tp_adr_i
- strb r3, [r1, o_MusicPlayerTrack_bendRange]
- ldrb r3, [r1, o_MusicPlayerTrack_flags]
+ strb r3, [r1, #o_MusicPlayerTrack_bendRange]
+ ldrb r3, [r1, #o_MusicPlayerTrack_flags]
movs r2, 0xC
orrs r3, r2
- strb r3, [r1, o_MusicPlayerTrack_flags]
+ strb r3, [r1, #o_MusicPlayerTrack_flags]
bx r12
thumb_func_end ply_bendr
@@ -1018,7 +1018,7 @@ ply_bendr:
ply_lfodl:
mov r12, lr
bl ld_r3_tp_adr_i
- strb r3, [r1, o_MusicPlayerTrack_lfoDelay]
+ strb r3, [r1, #o_MusicPlayerTrack_lfoDelay]
bx r12
thumb_func_end ply_lfodl
@@ -1026,14 +1026,14 @@ ply_lfodl:
ply_modt:
mov r12, lr
bl ld_r3_tp_adr_i
- ldrb r0, [r1, o_MusicPlayerTrack_modT]
+ ldrb r0, [r1, #o_MusicPlayerTrack_modT]
cmp r0, r3
beq _081DD7AA
- strb r3, [r1, o_MusicPlayerTrack_modT]
- ldrb r3, [r1, o_MusicPlayerTrack_flags]
+ strb r3, [r1, #o_MusicPlayerTrack_modT]
+ ldrb r3, [r1, #o_MusicPlayerTrack_flags]
movs r2, 0xF
orrs r3, r2
- strb r3, [r1, o_MusicPlayerTrack_flags]
+ strb r3, [r1, #o_MusicPlayerTrack_flags]
_081DD7AA:
bx r12
thumb_func_end ply_modt
@@ -1043,18 +1043,18 @@ ply_tune:
mov r12, lr
bl ld_r3_tp_adr_i
subs r3, 0x40
- strb r3, [r1, o_MusicPlayerTrack_tune]
- ldrb r3, [r1, o_MusicPlayerTrack_flags]
+ strb r3, [r1, #o_MusicPlayerTrack_tune]
+ ldrb r3, [r1, #o_MusicPlayerTrack_flags]
movs r2, 0xC
orrs r3, r2
- strb r3, [r1, o_MusicPlayerTrack_flags]
+ strb r3, [r1, #o_MusicPlayerTrack_flags]
bx r12
thumb_func_end ply_tune
thumb_func_start ply_port
ply_port:
mov r12, lr
- ldr r2, [r1, o_MusicPlayerTrack_cmdPtr]
+ ldr r2, [r1, #o_MusicPlayerTrack_cmdPtr]
ldrb r3, [r2]
adds r2, 1
ldr r0, =REG_SOUND1CNT_L @ sound register base address
@@ -1072,20 +1072,20 @@ m4aSoundVSync:
@ Exit the function if ident is not ID_NUMBER or ID_NUMBER+1.
ldr r2, lt2_ID_NUMBER
- ldr r3, [r0, o_SoundInfo_ident]
+ ldr r3, [r0, #o_SoundInfo_ident]
subs r3, r2
cmp r3, 1
bhi m4aSoundVSync_Done
@ Decrement the PCM DMA counter. If it reaches 0, we need to do a DMA.
- ldrb r1, [r0, o_SoundInfo_pcmDmaCounter]
+ ldrb r1, [r0, #o_SoundInfo_pcmDmaCounter]
subs r1, 1
- strb r1, [r0, o_SoundInfo_pcmDmaCounter]
+ strb r1, [r0, #o_SoundInfo_pcmDmaCounter]
bgt m4aSoundVSync_Done
@ Reload the PCM DMA counter.
- ldrb r1, [r0, o_SoundInfo_pcmDmaPeriod]
- strb r1, [r0, o_SoundInfo_pcmDmaCounter]
+ ldrb r1, [r0, #o_SoundInfo_pcmDmaPeriod]
+ strb r1, [r0, #o_SoundInfo_pcmDmaCounter]
ldr r2, =REG_DMA1
@@ -1127,18 +1127,18 @@ m4aSoundVSync_Done:
thumb_func_start MPlayMain
MPlayMain:
ldr r2, lt2_ID_NUMBER
- ldr r3, [r0, o_MusicPlayerInfo_ident]
+ ldr r3, [r0, #o_MusicPlayerInfo_ident]
cmp r2, r3
beq _081DD82E
bx lr
_081DD82E:
adds r3, 0x1
- str r3, [r0, o_MusicPlayerInfo_ident]
+ str r3, [r0, #o_MusicPlayerInfo_ident]
push {r0,lr}
- ldr r3, [r0, o_MusicPlayerInfo_func]
+ ldr r3, [r0, #o_MusicPlayerInfo_func]
cmp r3, 0
beq _081DD840
- ldr r0, [r0, o_MusicPlayerInfo_intp]
+ ldr r0, [r0, #o_MusicPlayerInfo_intp]
bl call_r3
_081DD840:
pop {r0}
@@ -1149,7 +1149,7 @@ _081DD840:
mov r7, r11
push {r4-r7}
adds r7, r0, 0
- ldr r0, [r7, o_MusicPlayerInfo_status]
+ ldr r0, [r7, #o_MusicPlayerInfo_status]
cmp r0, 0
bge _081DD858
b _081DDA6C
@@ -1159,18 +1159,18 @@ _081DD858:
mov r8, r0
adds r0, r7, 0
bl FadeOutBody
- ldr r0, [r7, o_MusicPlayerInfo_status]
+ ldr r0, [r7, #o_MusicPlayerInfo_status]
cmp r0, 0
bge _081DD86C
b _081DDA6C
_081DD86C:
- ldrh r0, [r7, o_MusicPlayerInfo_tempoC]
- ldrh r1, [r7, o_MusicPlayerInfo_tempoI]
+ ldrh r0, [r7, #o_MusicPlayerInfo_tempoC]
+ ldrh r1, [r7, #o_MusicPlayerInfo_tempoI]
adds r0, r1
b _081DD9BC
_081DD874:
- ldrb r6, [r7, o_MusicPlayerInfo_trackCount]
- ldr r5, [r7, o_MusicPlayerInfo_tracks]
+ ldrb r6, [r7, #o_MusicPlayerInfo_trackCount]
+ ldr r5, [r7, #o_MusicPlayerInfo_tracks]
movs r3, 0x1
movs r4, 0
_081DD87C:
@@ -1183,7 +1183,7 @@ _081DD886:
mov r10, r3
orrs r4, r3
mov r11, r4
- ldr r4, [r5, o_MusicPlayerTrack_chan]
+ ldr r4, [r5, #o_MusicPlayerTrack_chan]
cmp r4, 0
beq _081DD8BA
_081DD892:
@@ -1209,7 +1209,7 @@ _081DD8B4:
cmp r4, 0
bne _081DD892
_081DD8BA:
- ldrb r3, [r5, o_MusicPlayerTrack_flags]
+ ldrb r3, [r5, #o_MusicPlayerTrack_flags]
movs r0, 0x40
tst r0, r3
beq _081DD938
@@ -1218,33 +1218,33 @@ _081DD8BA:
movs r0, 0x80
strb r0, [r5]
movs r0, 0x2
- strb r0, [r5, o_MusicPlayerTrack_bendRange]
+ strb r0, [r5, #o_MusicPlayerTrack_bendRange]
movs r0, 0x40
- strb r0, [r5, o_MusicPlayerTrack_volX]
+ strb r0, [r5, #o_MusicPlayerTrack_volX]
movs r0, 0x16
- strb r0, [r5, o_MusicPlayerTrack_lfoSpeed]
+ strb r0, [r5, #o_MusicPlayerTrack_lfoSpeed]
movs r0, 0x1
adds r1, r5, 0x6
- strb r0, [r1, o_MusicPlayerTrack_ToneData_type - 0x6]
+ strb r0, [r1, #o_MusicPlayerTrack_ToneData_type - 0x6]
b _081DD938
_081DD8E0:
- ldr r2, [r5, o_MusicPlayerTrack_cmdPtr]
+ ldr r2, [r5, #o_MusicPlayerTrack_cmdPtr]
ldrb r1, [r2]
cmp r1, 0x80
bhs _081DD8EC
- ldrb r1, [r5, o_MusicPlayerTrack_runningStatus]
+ ldrb r1, [r5, #o_MusicPlayerTrack_runningStatus]
b _081DD8F6
_081DD8EC:
adds r2, 0x1
- str r2, [r5, o_MusicPlayerTrack_cmdPtr]
+ str r2, [r5, #o_MusicPlayerTrack_cmdPtr]
cmp r1, 0xBD
bcc _081DD8F6
- strb r1, [r5, o_MusicPlayerTrack_runningStatus]
+ strb r1, [r5, #o_MusicPlayerTrack_runningStatus]
_081DD8F6:
cmp r1, 0xCF
bcc _081DD90C
mov r0, r8
- ldr r3, [r0, o_SoundInfo_plynote]
+ ldr r3, [r0, #o_SoundInfo_plynote]
adds r0, r1, 0
subs r0, 0xCF
adds r1, r7, 0
@@ -1256,15 +1256,15 @@ _081DD90C:
bls _081DD92E
adds r0, r1, 0
subs r0, 0xB1
- strb r0, [r7, o_MusicPlayerInfo_cmd]
+ strb r0, [r7, #o_MusicPlayerInfo_cmd]
mov r3, r8
- ldr r3, [r3, o_SoundInfo_MPlayJumpTable]
+ ldr r3, [r3, #o_SoundInfo_MPlayJumpTable]
lsls r0, 2
ldr r3, [r3, r0]
adds r0, r7, 0
adds r1, r5, 0
bl call_r3
- ldrb r0, [r5, o_MusicPlayerTrack_flags]
+ ldrb r0, [r5, #o_MusicPlayerTrack_flags]
cmp r0, 0
beq _081DD994
b _081DD938
@@ -1273,29 +1273,29 @@ _081DD92E:
subs r1, 0x80
adds r1, r0
ldrb r0, [r1]
- strb r0, [r5, o_MusicPlayerTrack_wait]
+ strb r0, [r5, #o_MusicPlayerTrack_wait]
_081DD938:
- ldrb r0, [r5, o_MusicPlayerTrack_wait]
+ ldrb r0, [r5, #o_MusicPlayerTrack_wait]
cmp r0, 0
beq _081DD8E0
subs r0, 0x1
- strb r0, [r5, o_MusicPlayerTrack_wait]
- ldrb r1, [r5, o_MusicPlayerTrack_lfoSpeed]
+ strb r0, [r5, #o_MusicPlayerTrack_wait]
+ ldrb r1, [r5, #o_MusicPlayerTrack_lfoSpeed]
cmp r1, 0
beq _081DD994
- ldrb r0, [r5, o_MusicPlayerTrack_mod]
+ ldrb r0, [r5, #o_MusicPlayerTrack_mod]
cmp r0, 0
beq _081DD994
- ldrb r0, [r5, o_MusicPlayerTrack_lfoDelayC]
+ ldrb r0, [r5, #o_MusicPlayerTrack_lfoDelayC]
cmp r0, 0
beq _081DD95A
subs r0, 0x1
- strb r0, [r5, o_MusicPlayerTrack_lfoDelayC]
+ strb r0, [r5, #o_MusicPlayerTrack_lfoDelayC]
b _081DD994
_081DD95A:
- ldrb r0, [r5, o_MusicPlayerTrack_lfoSpeedC]
+ ldrb r0, [r5, #o_MusicPlayerTrack_lfoSpeedC]
adds r0, r1
- strb r0, [r5, o_MusicPlayerTrack_lfoSpeedC]
+ strb r0, [r5, #o_MusicPlayerTrack_lfoSpeedC]
adds r1, r0, 0
subs r0, 0x40
lsls r0, 24
@@ -1307,16 +1307,16 @@ _081DD96E:
movs r0, 0x80
subs r2, r0, r1
_081DD972:
- ldrb r0, [r5, o_MusicPlayerTrack_mod]
+ ldrb r0, [r5, #o_MusicPlayerTrack_mod]
muls r0, r2
asrs r2, r0, 6
- ldrb r0, [r5, o_MusicPlayerTrack_modM]
+ ldrb r0, [r5, #o_MusicPlayerTrack_modM]
eors r0, r2
lsls r0, 24
beq _081DD994
- strb r2, [r5, o_MusicPlayerTrack_modM]
+ strb r2, [r5, #o_MusicPlayerTrack_modM]
ldrb r0, [r5]
- ldrb r1, [r5, o_MusicPlayerTrack_modT]
+ ldrb r1, [r5, #o_MusicPlayerTrack_modT]
cmp r1, 0
bne _081DD98E
movs r1, 0xC
@@ -1325,7 +1325,7 @@ _081DD98E:
movs r1, 0x3
_081DD990:
orrs r0, r1
- strb r0, [r5, o_MusicPlayerTrack_flags]
+ strb r0, [r5, #o_MusicPlayerTrack_flags]
_081DD994:
mov r3, r10
mov r4, r11
@@ -1337,29 +1337,29 @@ _081DD998:
lsls r3, 1
b _081DD87C
_081DD9A4:
- ldr r0, [r7, o_MusicPlayerInfo_clock]
+ ldr r0, [r7, #o_MusicPlayerInfo_clock]
adds r0, 0x1
- str r0, [r7, o_MusicPlayerInfo_clock]
+ str r0, [r7, #o_MusicPlayerInfo_clock]
cmp r4, 0
bne _081DD9B6
movs r0, 0x80
lsls r0, 24
- str r0, [r7, o_MusicPlayerInfo_status]
+ str r0, [r7, #o_MusicPlayerInfo_status]
b _081DDA6C
_081DD9B6:
- str r4, [r7, o_MusicPlayerInfo_status]
- ldrh r0, [r7, o_MusicPlayerInfo_tempoC]
+ str r4, [r7, #o_MusicPlayerInfo_status]
+ ldrh r0, [r7, #o_MusicPlayerInfo_tempoC]
subs r0, 0x96
_081DD9BC:
- strh r0, [r7, o_MusicPlayerInfo_tempoC]
+ strh r0, [r7, #o_MusicPlayerInfo_tempoC]
cmp r0, 0x96
bcc _081DD9C4
b _081DD874
_081DD9C4:
- ldrb r2, [r7, o_MusicPlayerInfo_trackCount]
- ldr r5, [r7, o_MusicPlayerInfo_tracks]
+ ldrb r2, [r7, #o_MusicPlayerInfo_trackCount]
+ ldr r5, [r7, #o_MusicPlayerInfo_tracks]
_081DD9C8:
- ldrb r0, [r5, o_MusicPlayerTrack_flags]
+ ldrb r0, [r5, #o_MusicPlayerTrack_flags]
movs r1, 0x80
tst r1, r0
beq _081DDA62
@@ -1370,11 +1370,11 @@ _081DD9C8:
adds r0, r7, 0
adds r1, r5, 0
bl TrkVolPitSet
- ldr r4, [r5, o_MusicPlayerTrack_chan]
+ ldr r4, [r5, #o_MusicPlayerTrack_chan]
cmp r4, 0
beq _081DDA58
_081DD9E6:
- ldrb r1, [r4, o_SoundChannel_status]
+ ldrb r1, [r4, #o_SoundChannel_status]
movs r0, 0xC7
tst r0, r1
bne _081DD9F6
@@ -1382,10 +1382,10 @@ _081DD9E6:
bl ClearChain
b _081DDA52
_081DD9F6:
- ldrb r0, [r4, o_SoundChannel_type]
+ ldrb r0, [r4, #o_SoundChannel_type]
movs r6, 0x7
ands r6, r0
- ldrb r3, [r5, o_MusicPlayerTrack_flags]
+ ldrb r3, [r5, #o_MusicPlayerTrack_flags]
movs r0, 0x3
tst r0, r3
beq _081DDA14
@@ -1397,11 +1397,11 @@ _081DD9F6:
orrs r0, r1
strb r0, [r4, o_CgbChannel_mo]
_081DDA14:
- ldrb r3, [r5, o_MusicPlayerTrack_flags]
+ ldrb r3, [r5, #o_MusicPlayerTrack_flags]
movs r0, 0xC
tst r0, r3
beq _081DDA52
- ldrb r1, [r4, o_SoundChannel_ky]
+ ldrb r1, [r4, #o_SoundChannel_ky]
movs r0, 0x8
ldrsb r0, [r5, r0]
adds r2, r1, r0
@@ -1411,9 +1411,9 @@ _081DDA28:
cmp r6, 0
beq _081DDA46
mov r0, r8
- ldr r3, [r0, o_SoundInfo_MidiKeyToCgbFreq]
+ ldr r3, [r0, #o_SoundInfo_MidiKeyToCgbFreq]
adds r1, r2, 0
- ldrb r2, [r5, o_MusicPlayerTrack_pitM]
+ ldrb r2, [r5, #o_MusicPlayerTrack_pitM]
adds r0, r6, 0
bl call_r3
str r0, [r4, o_CgbChannel_fr]
@@ -1424,19 +1424,19 @@ _081DDA28:
b _081DDA52
_081DDA46:
adds r1, r2, 0
- ldrb r2, [r5, o_MusicPlayerTrack_pitM]
- ldr r0, [r4, o_SoundChannel_wav]
+ ldrb r2, [r5, #o_MusicPlayerTrack_pitM]
+ ldr r0, [r4, #o_SoundChannel_wav]
bl MidiKeyToFreq
- str r0, [r4, o_SoundChannel_freq]
+ str r0, [r4, #o_SoundChannel_freq]
_081DDA52:
- ldr r4, [r4, o_SoundChannel_np]
+ ldr r4, [r4, #o_SoundChannel_np]
cmp r4, 0
bne _081DD9E6
_081DDA58:
- ldrb r0, [r5, o_MusicPlayerTrack_flags]
+ ldrb r0, [r5, #o_MusicPlayerTrack_flags]
movs r1, 0xF0
ands r0, r1
- strb r0, [r5, o_MusicPlayerTrack_flags]
+ strb r0, [r5, #o_MusicPlayerTrack_flags]
mov r2, r9
_081DDA62:
subs r2, 0x1
@@ -1446,7 +1446,7 @@ _081DDA62:
bgt _081DD9C8
_081DDA6C:
ldr r0, lt2_ID_NUMBER
- str r0, [r7, o_MusicPlayerInfo_ident]
+ str r0, [r7, #o_MusicPlayerInfo_ident]
pop {r0-r7}
mov r8, r0
mov r9, r1
@@ -1467,35 +1467,35 @@ lt2_ID_NUMBER: .word ID_NUMBER
TrackStop:
push {r4-r6,lr}
adds r5, r1, 0
- ldrb r1, [r5, o_MusicPlayerTrack_flags]
+ ldrb r1, [r5, #o_MusicPlayerTrack_flags]
movs r0, 0x80
tst r0, r1
beq TrackStop_Done
- ldr r4, [r5, o_MusicPlayerTrack_chan]
+ ldr r4, [r5, #o_MusicPlayerTrack_chan]
cmp r4, 0
beq TrackStop_3
movs r6, 0
TrackStop_Loop:
- ldrb r0, [r4, o_SoundChannel_status]
+ ldrb r0, [r4, #o_SoundChannel_status]
cmp r0, 0
beq TrackStop_2
- ldrb r0, [r4, o_SoundChannel_type]
+ ldrb r0, [r4, #o_SoundChannel_type]
movs r3, 0x7
ands r0, r3
beq TrackStop_1
ldr r3, =SOUND_INFO_PTR
ldr r3, [r3]
- ldr r3, [r3, o_SoundInfo_CgbOscOff]
+ ldr r3, [r3, #o_SoundInfo_CgbOscOff]
bl call_r3
TrackStop_1:
- strb r6, [r4, o_SoundChannel_status]
+ strb r6, [r4, #o_SoundChannel_status]
TrackStop_2:
- str r6, [r4, o_SoundChannel_track]
- ldr r4, [r4, o_SoundChannel_np]
+ str r6, [r4, #o_SoundChannel_track]
+ ldr r4, [r4, #o_SoundChannel_np]
cmp r4, 0
bne TrackStop_Loop
TrackStop_3:
- str r4, [r5, o_MusicPlayerTrack_chan]
+ str r4, [r5, #o_MusicPlayerTrack_chan]
TrackStop_Done:
pop {r4-r6}
pop {r0}
@@ -1550,41 +1550,41 @@ ply_note:
ldr r1, =gClockTable
adds r0, r1
ldrb r0, [r0]
- strb r0, [r5, o_MusicPlayerTrack_gateTime]
- ldr r3, [r5, o_MusicPlayerTrack_cmdPtr]
+ strb r0, [r5, #o_MusicPlayerTrack_gateTime]
+ ldr r3, [r5, #o_MusicPlayerTrack_cmdPtr]
ldrb r0, [r3]
cmp r0, 0x80
bhs _081DDB46
- strb r0, [r5, o_MusicPlayerTrack_key]
+ strb r0, [r5, #o_MusicPlayerTrack_key]
adds r3, 0x1
ldrb r0, [r3]
cmp r0, 0x80
bhs _081DDB44
- strb r0, [r5, o_MusicPlayerTrack_velocity]
+ strb r0, [r5, #o_MusicPlayerTrack_velocity]
adds r3, 0x1
ldrb r0, [r3]
cmp r0, 0x80
bhs _081DDB44
- ldrb r1, [r5, o_MusicPlayerTrack_gateTime]
+ ldrb r1, [r5, #o_MusicPlayerTrack_gateTime]
adds r1, r0
- strb r1, [r5, o_MusicPlayerTrack_gateTime]
+ strb r1, [r5, #o_MusicPlayerTrack_gateTime]
adds r3, 0x1
_081DDB44:
- str r3, [r5, o_MusicPlayerTrack_cmdPtr]
+ str r3, [r5, #o_MusicPlayerTrack_cmdPtr]
_081DDB46:
movs r0, 0
str r0, [sp, 0x14]
adds r4, r5, 0
- adds r4, o_MusicPlayerTrack_ToneData_type
+ adds r4, #o_MusicPlayerTrack_ToneData_type
ldrb r2, [r4]
movs r0, TONEDATA_TYPE_RHY | TONEDATA_TYPE_SPL
tst r0, r2
beq _081DDB98
- ldrb r3, [r5, o_MusicPlayerTrack_key]
+ ldrb r3, [r5, #o_MusicPlayerTrack_key]
movs r0, TONEDATA_TYPE_SPL
tst r0, r2
beq _081DDB66
- ldr r1, [r5, o_MusicPlayerTrack_ToneData_keySplitTable]
+ ldr r1, [r5, #o_MusicPlayerTrack_ToneData_keySplitTable]
adds r1, r3
ldrb r0, [r1]
b _081DDB68
@@ -1594,7 +1594,7 @@ _081DDB68:
lsls r1, r0, 1
adds r1, r0
lsls r1, 2
- ldr r0, [r5, o_MusicPlayerTrack_ToneData_wav]
+ ldr r0, [r5, #o_MusicPlayerTrack_ToneData_wav]
adds r1, r0
mov r9, r1
mov r6, r9
@@ -1787,7 +1787,7 @@ _081DDCBC:
bl call_r3
b _081DDCDC
_081DDCCE:
- ldr r0, [r5, o_MusicPlayerTrack_unk_3C]
+ ldr r0, [r5, #o_MusicPlayerTrack_unk_3C]
str r0, [r4, 0x18]
ldrb r2, [r5, 0x9]
adds r1, r3, 0
@@ -1816,37 +1816,37 @@ _081DDCEA:
thumb_func_start ply_endtie
ply_endtie:
push {r4,r5}
- ldr r2, [r1, o_MusicPlayerTrack_cmdPtr]
+ ldr r2, [r1, #o_MusicPlayerTrack_cmdPtr]
ldrb r3, [r2]
cmp r3, 0x80
bhs _081DDD16
- strb r3, [r1, o_MusicPlayerTrack_key]
+ strb r3, [r1, #o_MusicPlayerTrack_key]
adds r2, 0x1
- str r2, [r1, o_MusicPlayerTrack_cmdPtr]
+ str r2, [r1, #o_MusicPlayerTrack_cmdPtr]
b _081DDD18
_081DDD16:
- ldrb r3, [r1, o_MusicPlayerTrack_key]
+ ldrb r3, [r1, #o_MusicPlayerTrack_key]
_081DDD18:
- ldr r1, [r1, o_MusicPlayerTrack_chan]
+ ldr r1, [r1, #o_MusicPlayerTrack_chan]
cmp r1, 0
beq _081DDD40
movs r4, 0x83
movs r5, 0x40
_081DDD22:
- ldrb r2, [r1, o_SoundChannel_status]
+ ldrb r2, [r1, #o_SoundChannel_status]
tst r2, r4
beq _081DDD3A
tst r2, r5
bne _081DDD3A
- ldrb r0, [r1, o_SoundChannel_mk]
+ ldrb r0, [r1, #o_SoundChannel_mk]
cmp r0, r3
bne _081DDD3A
movs r0, 0x40
orrs r2, r0
- strb r2, [r1, o_SoundChannel_status]
+ strb r2, [r1, #o_SoundChannel_status]
b _081DDD40
_081DDD3A:
- ldr r1, [r1, o_SoundChannel_np]
+ ldr r1, [r1, #o_SoundChannel_np]
cmp r1, 0
bne _081DDD22
_081DDD40:
@@ -1857,9 +1857,9 @@ _081DDD40:
thumb_func_start clear_modM
clear_modM:
movs r2, 0
- strb r2, [r1, o_MusicPlayerTrack_modM]
- strb r2, [r1, o_MusicPlayerTrack_lfoSpeedC]
- ldrb r2, [r1, o_MusicPlayerTrack_modT]
+ strb r2, [r1, #o_MusicPlayerTrack_modM]
+ strb r2, [r1, #o_MusicPlayerTrack_lfoSpeedC]
+ ldrb r2, [r1, #o_MusicPlayerTrack_modT]
cmp r2, 0
bne _081DDD54
movs r2, 0xC
@@ -1867,17 +1867,17 @@ clear_modM:
_081DDD54:
movs r2, 0x3
_081DDD56:
- ldrb r3, [r1, o_MusicPlayerTrack_flags]
+ ldrb r3, [r1, #o_MusicPlayerTrack_flags]
orrs r3, r2
- strb r3, [r1, o_MusicPlayerTrack_flags]
+ strb r3, [r1, #o_MusicPlayerTrack_flags]
bx lr
thumb_func_end clear_modM
thumb_func_start ld_r3_tp_adr_i
ld_r3_tp_adr_i_unchecked:
- ldr r2, [r1, o_MusicPlayerTrack_cmdPtr]
+ ldr r2, [r1, #o_MusicPlayerTrack_cmdPtr]
adds r3, r2, 1
- str r3, [r1, o_MusicPlayerTrack_cmdPtr]
+ str r3, [r1, #o_MusicPlayerTrack_cmdPtr]
ldrb r3, [r2]
bx lr
thumb_func_end ld_r3_tp_adr_i
@@ -1886,7 +1886,7 @@ ld_r3_tp_adr_i_unchecked:
ply_lfos:
mov r12, lr
bl ld_r3_tp_adr_i_unchecked
- strb r3, [r1, o_MusicPlayerTrack_lfoSpeed]
+ strb r3, [r1, #o_MusicPlayerTrack_lfoSpeed]
cmp r3, 0
bne _081DDD7C
bl clear_modM
@@ -1898,7 +1898,7 @@ _081DDD7C:
ply_mod:
mov r12, lr
bl ld_r3_tp_adr_i_unchecked
- strb r3, [r1, o_MusicPlayerTrack_mod]
+ strb r3, [r1, #o_MusicPlayerTrack_mod]
cmp r3, 0
bne _081DDD90
bl clear_modM
diff --git a/src/mail.c b/src/mail.c
index f6f96b012..0fc62678a 100644
--- a/src/mail.c
+++ b/src/mail.c
@@ -323,7 +323,7 @@ static bool8 MailReadBuildGraphics(void)
break;
case 5:
FreeAllSpritePalettes();
- reset_temp_tile_data_buffers();
+ ResetTempTileDataBuffers();
SetGpuReg(REG_OFFSET_BG0HOFS, 0);
SetGpuReg(REG_OFFSET_BG0VOFS, 0);
SetGpuReg(REG_OFFSET_BG1HOFS, 0);
@@ -346,10 +346,10 @@ static bool8 MailReadBuildGraphics(void)
DeactivateAllTextPrinters();
break;
case 8:
- decompress_and_copy_tile_data_to_vram(1, sUnknown_0859F2B8[sMailRead->mailType].tiles, 0, 0, 0);
+ DecompressAndCopyTileDataToVram(1, sUnknown_0859F2B8[sMailRead->mailType].tiles, 0, 0, 0);
break;
case 9:
- if (free_temp_tile_data_buffers_if_possible())
+ if (FreeTempTileDataBuffersIfPossible())
{
return FALSE;
}
@@ -438,7 +438,7 @@ static void CB2_InitMailRead(void)
SetMainCallback2(CB2_MailRead);
break;
}
- } while (sub_81221AC() != TRUE);
+ } while (MenuHelpers_LinkSomething() != TRUE);
}
static void sub_8121A1C(void)
diff --git a/src/main.c b/src/main.c
index cf19f39b3..454fefc5c 100644
--- a/src/main.c
+++ b/src/main.c
@@ -113,7 +113,7 @@ void AgbMain()
InitIntrHandlers();
m4aSoundInit();
EnableVCountIntrAtLine150();
- sub_800E6D0();
+ InitRFU();
RtcInit();
CheckForFlashMemory();
InitMainCallbacks();
@@ -280,7 +280,7 @@ static void ReadKeys(void)
gMain.heldKeys = gMain.heldKeysRaw;
// Remap L to A if the L=A option is enabled.
- if (gSaveBlock2Ptr->optionsButtonMode == 2)
+ if (gSaveBlock2Ptr->optionsButtonMode == OPTIONS_BUTTON_MODE_L_EQUALS_A)
{
if (gMain.newKeys & L_BUTTON)
gMain.newKeys |= A_BUTTON;
@@ -367,7 +367,7 @@ static void VBlankIntr(void)
if (!gMain.inBattle || !(gBattleTypeFlags & (BATTLE_TYPE_LINK | BATTLE_TYPE_FRONTIER | BATTLE_TYPE_RECORDED)))
Random();
- sub_800E174();
+ UpdateWirelessStatusIndicatorSprite();
INTR_CHECK |= INTR_FLAG_VBLANK;
gMain.intrCheck |= INTR_FLAG_VBLANK;
diff --git a/src/main_menu.c b/src/main_menu.c
index 91931e581..f4bf37ce1 100644
--- a/src/main_menu.c
+++ b/src/main_menu.c
@@ -1,7 +1,6 @@
#include "global.h"
#include "trainer_pokemon_sprites.h"
#include "bg.h"
-#include "constants/flags.h"
#include "constants/rgb.h"
#include "constants/songs.h"
#include "constants/species.h"
@@ -1293,7 +1292,7 @@ static void Task_NewGameBirchSpeech_Init(u8 taskId)
gTasks[taskId].tPlayerSpriteId = 0xFF;
gTasks[taskId].data[3] = 0xFF;
gTasks[taskId].tTimer = 0xD8;
- PlayBGM(MUS_DOORO_X4);
+ PlayBGM(MUS_ROUTE122);
ShowBg(0);
ShowBg(1);
}
@@ -1610,7 +1609,7 @@ static void Task_NewGameBirchSpeech_StartNamingScreen(u8 taskId)
FreeAndDestroyMonPicSprite(gTasks[taskId].tLotadSpriteId);
NewGameBirchSpeech_SetDefaultPlayerName(Random() % 20);
DestroyTask(taskId);
- DoNamingScreen(0, gSaveBlock2Ptr->playerName, gSaveBlock2Ptr->playerGender, 0, 0, CB2_NewGameBirchSpeech_ReturnFromNamingScreen);
+ DoNamingScreen(NAMING_SCREEN_PLAYER, gSaveBlock2Ptr->playerName, gSaveBlock2Ptr->playerGender, 0, 0, CB2_NewGameBirchSpeech_ReturnFromNamingScreen);
}
}
diff --git a/src/map_name_popup.c b/src/map_name_popup.c
index 32da4d0b4..8939edd90 100644
--- a/src/map_name_popup.c
+++ b/src/map_name_popup.c
@@ -121,9 +121,9 @@ static const u8 gRegionMapSectionId_To_PopUpThemeIdMapping[] =
[MAPSEC_ROUTE_133] = MAPPOPUP_THEME_UNDERWATER,
[MAPSEC_ROUTE_134] = MAPPOPUP_THEME_UNDERWATER,
[MAPSEC_UNDERWATER_124] = MAPPOPUP_THEME_STONE2,
- [MAPSEC_UNDERWATER_125] = MAPPOPUP_THEME_STONE2,
[MAPSEC_UNDERWATER_126] = MAPPOPUP_THEME_STONE2,
[MAPSEC_UNDERWATER_127] = MAPPOPUP_THEME_STONE2,
+ [MAPSEC_UNDERWATER_128] = MAPPOPUP_THEME_STONE2,
[MAPSEC_UNDERWATER_SOOTOPOLIS] = MAPPOPUP_THEME_STONE2,
[MAPSEC_GRANITE_CAVE] = MAPPOPUP_THEME_STONE,
[MAPSEC_MT_CHIMNEY] = MAPPOPUP_THEME_STONE,
@@ -139,7 +139,7 @@ static const u8 gRegionMapSectionId_To_PopUpThemeIdMapping[] =
[MAPSEC_AQUA_HIDEOUT_OLD] = MAPPOPUP_THEME_STONE,
[MAPSEC_SHOAL_CAVE] = MAPPOPUP_THEME_STONE,
[MAPSEC_SEAFLOOR_CAVERN] = MAPPOPUP_THEME_STONE,
- [MAPSEC_UNDERWATER_128] = MAPPOPUP_THEME_STONE2,
+ [MAPSEC_UNDERWATER_SEAFLOOR_CAVERN] = MAPPOPUP_THEME_STONE2,
[MAPSEC_VICTORY_ROAD] = MAPPOPUP_THEME_STONE,
[MAPSEC_MIRAGE_ISLAND] = MAPPOPUP_THEME_WOOD,
[MAPSEC_CAVE_OF_ORIGIN] = MAPPOPUP_THEME_STONE,
@@ -167,8 +167,8 @@ static const u8 gRegionMapSectionId_To_PopUpThemeIdMapping[] =
[MAPSEC_MARINE_CAVE - KANTO_MAPSEC_COUNT] = MAPPOPUP_THEME_STONE,
[MAPSEC_UNDERWATER_MARINE_CAVE - KANTO_MAPSEC_COUNT] = MAPPOPUP_THEME_STONE2,
[MAPSEC_TERRA_CAVE - KANTO_MAPSEC_COUNT] = MAPPOPUP_THEME_STONE,
- [MAPSEC_UNDERWATER_TERRA_CAVE - KANTO_MAPSEC_COUNT] = MAPPOPUP_THEME_STONE2,
- [MAPSEC_UNDERWATER_UNK1 - KANTO_MAPSEC_COUNT] = MAPPOPUP_THEME_STONE2,
+ [MAPSEC_UNDERWATER_105 - KANTO_MAPSEC_COUNT] = MAPPOPUP_THEME_STONE2,
+ [MAPSEC_UNDERWATER_125 - KANTO_MAPSEC_COUNT] = MAPPOPUP_THEME_STONE2,
[MAPSEC_UNDERWATER_129 - KANTO_MAPSEC_COUNT] = MAPPOPUP_THEME_STONE2,
[MAPSEC_DESERT_UNDERPASS - KANTO_MAPSEC_COUNT] = MAPPOPUP_THEME_STONE,
[MAPSEC_ALTERING_CAVE - KANTO_MAPSEC_COUNT] = MAPPOPUP_THEME_STONE,
diff --git a/src/match_call.c b/src/match_call.c
index 9d8523576..aaf6f29d2 100644
--- a/src/match_call.c
+++ b/src/match_call.c
@@ -1098,7 +1098,7 @@ bool32 TryStartMatchCall(void)
return FALSE;
}
-void StartMatchCallFromScript(u8 *message)
+void StartMatchCallFromScript(const u8 *message)
{
gMatchCallState.triggeredFromScript = 1;
StartMatchCall();
@@ -1119,7 +1119,7 @@ static void StartMatchCall(void)
sub_808BCF4();
}
- PlaySE(SE_TOREEYE);
+ PlaySE(SE_POKENAV_CALL);
CreateTask(ExecuteMatchCall, 1);
}
@@ -1182,7 +1182,7 @@ static bool32 LoadMatchCallWindowGfx(u8 taskId)
return FALSE;
}
- if (!decompress_and_copy_tile_data_to_vram(0, sPokeNavIconGfx, 0, 0x279, 0))
+ if (!DecompressAndCopyTileDataToVram(0, sPokeNavIconGfx, 0, 0x279, 0))
{
RemoveWindow(taskData[2]);
DestroyTask(taskId);
@@ -1199,7 +1199,7 @@ static bool32 LoadMatchCallWindowGfx(u8 taskId)
static bool32 MoveMatchCallWindowToVram(u8 taskId)
{
s16 *taskData = gTasks[taskId].data;
- if (free_temp_tile_data_buffers_if_possible())
+ if (FreeTempTileDataBuffersIfPossible())
return FALSE;
PutWindowTilemap(taskData[2]);
@@ -1257,7 +1257,7 @@ static bool32 sub_8196330(u8 taskId)
{
FillWindowPixelBuffer(taskData[2], PIXEL_FILL(8));
CopyWindowToVram(taskData[2], 2);
- PlaySE(SE_TOREOFF);
+ PlaySE(SE_POKENAV_HANG_UP);
return TRUE;
}
@@ -1335,7 +1335,7 @@ static void InitMatchCallTextPrinter(int windowId, const u8 *str)
printerTemplate.currentY = 1;
printerTemplate.letterSpacing = 0;
printerTemplate.lineSpacing = 0;
- printerTemplate.unk = 0;
+ printerTemplate.style = 0;
printerTemplate.fgColor = 10;
printerTemplate.bgColor = 8;
printerTemplate.shadowColor = 14;
diff --git a/src/math_util.c b/src/math_util.c
index 83935454a..f77c82608 100644
--- a/src/math_util.c
+++ b/src/math_util.c
@@ -1,6 +1,6 @@
#include "global.h"
-s16 sub_8151534(s16 x, s16 y)
+s16 MathUtil_Mul16(s16 x, s16 y)
{
s32 result;
@@ -10,7 +10,7 @@ s16 sub_8151534(s16 x, s16 y)
return result;
}
-s16 sub_8151550(u8 s, s16 x, s16 y)
+s16 MathUtil_Mul16Shift(u8 s, s16 x, s16 y)
{
s32 result;
@@ -20,7 +20,7 @@ s16 sub_8151550(u8 s, s16 x, s16 y)
return result;
}
-s32 sub_8151574(s32 x, s32 y)
+s32 MathUtil_Mul32(s32 x, s32 y)
{
s64 result;
@@ -30,7 +30,7 @@ s32 sub_8151574(s32 x, s32 y)
return result;
}
-s16 sub_81515B0(s16 x, s16 y)
+s16 MathUtil_Div16(s16 x, s16 y)
{
if (y == 0)
{
@@ -39,7 +39,7 @@ s16 sub_81515B0(s16 x, s16 y)
return (x << 8) / y;
}
-s16 sub_81515D4(u8 s, s16 x, s16 y)
+s16 MathUtil_Div16Shift(u8 s, s16 x, s16 y)
{
if (y == 0)
{
@@ -48,7 +48,7 @@ s16 sub_81515D4(u8 s, s16 x, s16 y)
return (x << s) / y;
}
-s32 sub_81515FC(s32 x, s32 y)
+s32 MathUtil_Div32(s32 x, s32 y)
{
s64 _x;
@@ -61,7 +61,7 @@ s32 sub_81515FC(s32 x, s32 y)
return _x / y;
}
-s16 sub_8151624(s16 y)
+s16 MathUtil_Inv16(s16 y)
{
s32 x;
@@ -69,7 +69,7 @@ s16 sub_8151624(s16 y)
return x / y;
}
-s16 sub_815163C(u8 s, s16 y)
+s16 MathUtil_Inv16Shift(u8 s, s16 y)
{
s32 x;
@@ -77,7 +77,7 @@ s16 sub_815163C(u8 s, s16 y)
return x / y;
}
-s32 sub_815165C(s32 y)
+s32 MathUtil_Inv32(s32 y)
{
s64 x;
diff --git a/src/mauville_old_man.c b/src/mauville_old_man.c
index dc5a0b335..af68c6116 100644
--- a/src/mauville_old_man.c
+++ b/src/mauville_old_man.c
@@ -3,7 +3,6 @@
#include "constants/songs.h"
#include "constants/easy_chat.h"
#include "constants/event_objects.h"
-#include "constants/vars.h"
#include "mauville_old_man.h"
#include "event_data.h"
#include "string_util.h"
@@ -221,7 +220,7 @@ static void PrepareSongText(void)
if (lineNum == 0)
{
*(wordEnd++) = EXT_CTRL_CODE_BEGIN;
- *(wordEnd++) = 15;
+ *(wordEnd++) = EXT_CTRL_CODE_FILL_WINDOW;
}
}
}
diff --git a/src/menu.c b/src/menu.c
index 62387c323..85275b6bc 100644
--- a/src/menu.c
+++ b/src/menu.c
@@ -18,7 +18,6 @@
#include "task.h"
#include "text_window.h"
#include "window.h"
-#include "constants/flags.h"
#include "constants/songs.h"
#define DLG_WINDOW_PALETTE_NUM 15
@@ -57,9 +56,9 @@ static EWRAM_DATA u8 sPaletteNum = 0;
static EWRAM_DATA u8 sYesNoWindowId = 0;
static EWRAM_DATA u8 sWindowId = 0;
static EWRAM_DATA u16 sFiller = 0; // needed to align
-static EWRAM_DATA bool8 gUnknown_0203CDA4[4] = {FALSE};
-static EWRAM_DATA u16 gUnknown_0203CDA8 = 0;
-static EWRAM_DATA void *gUnknown_0203CDAC[0x20] = {NULL};
+static EWRAM_DATA bool8 sScheduledBgCopiesToVram[4] = {FALSE};
+static EWRAM_DATA u16 sTempTileDataBufferIdx = 0;
+static EWRAM_DATA void *sTempTileDataBuffer[0x20] = {NULL};
const u16 gUnknown_0860F074[] = INCBIN_U16("graphics/interface/860F074.gbapal");
@@ -154,7 +153,7 @@ void FreeAllOverworldWindowBuffers(void)
FreeAllWindowBuffers();
}
-void sub_8197200(void)
+void InitTextBoxGfxAndPrinters(void)
{
ChangeBgX(0, 0, 0);
ChangeBgY(0, 0, 0);
@@ -181,7 +180,7 @@ u16 AddTextPrinterParameterized2(u8 windowId, u8 fontId, const u8 *str, u8 speed
printer.currentY = 1;
printer.letterSpacing = 0;
printer.lineSpacing = 0;
- printer.unk = 0;
+ printer.style = 0;
printer.fgColor = fgColor;
printer.bgColor = bgColor;
printer.shadowColor = shadowColor;
@@ -1076,17 +1075,17 @@ s8 Menu_ProcessInputNoWrapAround_other(void)
PlaySE(SE_SELECT);
return sMenu.cursorPos;
}
- else if (gMain.newKeys & B_BUTTON)
+ if (gMain.newKeys & B_BUTTON)
{
return MENU_B_PRESSED;
}
- else if ((gMain.newAndRepeatedKeys & DPAD_ANY) == DPAD_UP)
+ if ((gMain.newAndRepeatedKeys & DPAD_ANY) == DPAD_UP)
{
if (oldPos != Menu_MoveCursorNoWrapAround(-1))
PlaySE(SE_SELECT);
return MENU_NOTHING_CHOSEN;
}
- else if ((gMain.newAndRepeatedKeys & DPAD_ANY) == DPAD_DOWN)
+ if ((gMain.newAndRepeatedKeys & DPAD_ANY) == DPAD_DOWN)
{
if (oldPos != Menu_MoveCursorNoWrapAround(1))
PlaySE(SE_SELECT);
@@ -1131,7 +1130,7 @@ void AddItemMenuActionTextPrinters(u8 windowId, u8 fontId, u8 left, u8 top, u8 l
printer.fgColor = GetFontAttribute(fontId, FONTATTR_COLOR_FOREGROUND);
printer.bgColor = GetFontAttribute(fontId, FONTATTR_COLOR_BACKGROUND);
printer.shadowColor = GetFontAttribute(fontId, FONTATTR_COLOR_SHADOW);
- printer.unk = GetFontAttribute(fontId, FONTATTR_UNKNOWN);
+ printer.style = GetFontAttribute(fontId, FONTATTR_STYLE);
printer.letterSpacing = letterSpacing;
printer.lineSpacing = GetFontAttribute(fontId, FONTATTR_LINE_SPACING);
printer.x = left;
@@ -1195,7 +1194,7 @@ void sub_8198AF8(const struct WindowTemplate *window, u8 fontId, u8 left, u8 top
printer.fgColor = GetFontAttribute(fontId, FONTATTR_COLOR_FOREGROUND);
printer.bgColor = GetFontAttribute(fontId, FONTATTR_COLOR_BACKGROUND);
printer.shadowColor = GetFontAttribute(fontId, FONTATTR_COLOR_SHADOW);
- printer.unk = GetFontAttribute(fontId, FONTATTR_UNKNOWN);
+ printer.style = GetFontAttribute(fontId, FONTATTR_STYLE);
printer.letterSpacing = GetFontAttribute(fontId, FONTATTR_LETTER_SPACING);
printer.lineSpacing = GetFontAttribute(fontId, FONTATTR_LINE_SPACING);
@@ -1253,7 +1252,7 @@ void sub_8198DBC(u8 windowId, u8 fontId, u8 left, u8 top, u8 a4, u8 itemCount, u
printer.fgColor = GetFontAttribute(fontId, FONTATTR_COLOR_FOREGROUND);
printer.bgColor = GetFontAttribute(fontId, FONTATTR_COLOR_BACKGROUND);
printer.shadowColor = GetFontAttribute(fontId, FONTATTR_COLOR_SHADOW);
- printer.unk = GetFontAttribute(fontId, FONTATTR_UNKNOWN);
+ printer.style = GetFontAttribute(fontId, FONTATTR_STYLE);
printer.letterSpacing = GetFontAttribute(fontId, FONTATTR_LETTER_SPACING);
printer.lineSpacing = GetFontAttribute(fontId, FONTATTR_LINE_SPACING);
@@ -1300,10 +1299,12 @@ u8 sub_8198F58(u8 windowId, u8 fontId, u8 left, u8 top, u8 a4, u8 cursorHeight,
else
sMenu.cursorPos = pos;
- sub_8199134(0, 0);
+ // Why call this when it's not gonna move?
+ ChangeListMenuCursorPosition(MENU_CURSOR_DELTA_NONE, MENU_CURSOR_DELTA_NONE);
return sMenu.cursorPos;
}
+// Unused
u8 sub_8198FD4(u8 windowId, u8 fontId, u8 left, u8 top, u8 a4, u8 a5, u8 a6, u8 a7)
{
u8 cursorHeight = GetMenuCursorDimensionByFont(fontId, 1);
@@ -1334,40 +1335,28 @@ void sub_8199060(u8 oldCursorPos, u8 newCursorPos)
0);
}
-u8 sub_8199134(s8 deltaX, s8 deltaY)
+u8 ChangeListMenuCursorPosition(s8 deltaX, s8 deltaY)
{
u8 oldPos = sMenu.cursorPos;
if (deltaX != 0)
{
if ((sMenu.cursorPos % sMenu.columns) + deltaX < 0)
- {
sMenu.cursorPos += sMenu.columns - 1;
- }
else if ((sMenu.cursorPos % sMenu.columns) + deltaX >= sMenu.columns)
- {
sMenu.cursorPos = (sMenu.cursorPos / sMenu.columns) * sMenu.columns;
- }
else
- {
sMenu.cursorPos += deltaX;
- }
}
if (deltaY != 0)
{
if ((sMenu.cursorPos / sMenu.columns) + deltaY < 0)
- {
sMenu.cursorPos += sMenu.columns * (sMenu.rows - 1);
- }
else if ((sMenu.cursorPos / sMenu.columns) + deltaY >= sMenu.rows)
- {
sMenu.cursorPos -= sMenu.columns * (sMenu.rows - 1);
- }
else
- {
sMenu.cursorPos += (sMenu.columns * deltaY);
- }
}
if (sMenu.cursorPos > sMenu.maxCursorPos)
@@ -1382,7 +1371,7 @@ u8 sub_8199134(s8 deltaX, s8 deltaY)
}
}
-u8 sub_81991F8(s8 deltaX, s8 deltaY)
+u8 ChangeGridMenuCursorPosition(s8 deltaX, s8 deltaY)
{
u8 oldPos = sMenu.cursorPos;
@@ -1430,25 +1419,25 @@ s8 sub_8199284(void)
else if (gMain.newKeys & DPAD_UP)
{
PlaySE(SE_SELECT);
- sub_8199134(0, -1);
+ ChangeListMenuCursorPosition(MENU_CURSOR_DELTA_NONE, MENU_CURSOR_DELTA_UP);
return MENU_NOTHING_CHOSEN;
}
else if (gMain.newKeys & DPAD_DOWN)
{
PlaySE(SE_SELECT);
- sub_8199134(0, 1);
+ ChangeListMenuCursorPosition(MENU_CURSOR_DELTA_NONE, MENU_CURSOR_DELTA_DOWN);
return MENU_NOTHING_CHOSEN;
}
else if (gMain.newKeys & DPAD_LEFT || GetLRKeysPressed() == MENU_L_PRESSED)
{
PlaySE(SE_SELECT);
- sub_8199134(-1, 0);
+ ChangeListMenuCursorPosition(MENU_CURSOR_DELTA_LEFT, MENU_CURSOR_DELTA_NONE);
return MENU_NOTHING_CHOSEN;
}
else if (gMain.newKeys & DPAD_RIGHT || GetLRKeysPressed() == MENU_R_PRESSED)
{
PlaySE(SE_SELECT);
- sub_8199134(1, 0);
+ ChangeListMenuCursorPosition(MENU_CURSOR_DELTA_RIGHT, MENU_CURSOR_DELTA_NONE);
return MENU_NOTHING_CHOSEN;
}
@@ -1470,25 +1459,25 @@ s8 Menu_ProcessInputGridLayout(void)
}
else if (gMain.newKeys & DPAD_UP)
{
- if (oldPos != sub_81991F8(0, -1))
+ if (oldPos != ChangeGridMenuCursorPosition(0, -1))
PlaySE(SE_SELECT);
return MENU_NOTHING_CHOSEN;
}
else if (gMain.newKeys & DPAD_DOWN)
{
- if (oldPos != sub_81991F8(0, 1))
+ if (oldPos != ChangeGridMenuCursorPosition(0, 1))
PlaySE(SE_SELECT);
return MENU_NOTHING_CHOSEN;
}
else if (gMain.newKeys & DPAD_LEFT || GetLRKeysPressed() == MENU_L_PRESSED)
{
- if (oldPos != sub_81991F8(-1, 0))
+ if (oldPos != ChangeGridMenuCursorPosition(-1, 0))
PlaySE(SE_SELECT);
return MENU_NOTHING_CHOSEN;
}
else if (gMain.newKeys & DPAD_RIGHT || GetLRKeysPressed() == MENU_R_PRESSED)
{
- if (oldPos != sub_81991F8(1, 0))
+ if (oldPos != ChangeGridMenuCursorPosition(1, 0))
PlaySE(SE_SELECT);
return MENU_NOTHING_CHOSEN;
}
@@ -1510,31 +1499,32 @@ s8 sub_81993D8(void)
else if ((gMain.newAndRepeatedKeys & DPAD_ANY) == DPAD_UP)
{
PlaySE(SE_SELECT);
- sub_8199134(0, -1);
+ ChangeListMenuCursorPosition(MENU_CURSOR_DELTA_NONE, MENU_CURSOR_DELTA_UP);
return MENU_NOTHING_CHOSEN;
}
else if ((gMain.newAndRepeatedKeys & DPAD_ANY) == DPAD_DOWN)
{
PlaySE(SE_SELECT);
- sub_8199134(0, 1);
+ ChangeListMenuCursorPosition(MENU_CURSOR_DELTA_NONE, MENU_CURSOR_DELTA_DOWN);
return MENU_NOTHING_CHOSEN;
}
else if ((gMain.newAndRepeatedKeys & DPAD_ANY) == DPAD_LEFT || GetLRKeysPressedAndHeld() == MENU_L_PRESSED)
{
PlaySE(SE_SELECT);
- sub_8199134(-1, 0);
+ ChangeListMenuCursorPosition(MENU_CURSOR_DELTA_LEFT, MENU_CURSOR_DELTA_NONE);
return MENU_NOTHING_CHOSEN;
}
else if ((gMain.newAndRepeatedKeys & DPAD_ANY) == DPAD_RIGHT || GetLRKeysPressedAndHeld() == MENU_R_PRESSED)
{
PlaySE(SE_SELECT);
- sub_8199134(1, 0);
+ ChangeListMenuCursorPosition(MENU_CURSOR_DELTA_RIGHT, MENU_CURSOR_DELTA_NONE);
return MENU_NOTHING_CHOSEN;
}
return MENU_NOTHING_CHOSEN;
}
+//Unused
s8 sub_8199484(void)
{
u8 oldPos = sMenu.cursorPos;
@@ -1550,25 +1540,25 @@ s8 sub_8199484(void)
}
else if ((gMain.newAndRepeatedKeys & DPAD_ANY) == DPAD_UP)
{
- if (oldPos != sub_81991F8(0, -1))
+ if (oldPos != ChangeGridMenuCursorPosition(0, -1))
PlaySE(SE_SELECT);
return MENU_NOTHING_CHOSEN;
}
else if ((gMain.newAndRepeatedKeys & DPAD_ANY) == DPAD_DOWN)
{
- if (oldPos != sub_81991F8(0, 1))
+ if (oldPos != ChangeGridMenuCursorPosition(0, 1))
PlaySE(SE_SELECT);
return MENU_NOTHING_CHOSEN;
}
else if ((gMain.newAndRepeatedKeys & DPAD_ANY) == DPAD_LEFT || GetLRKeysPressedAndHeld() == MENU_L_PRESSED)
{
- if (oldPos != sub_81991F8(-1, 0))
+ if (oldPos != ChangeGridMenuCursorPosition(-1, 0))
PlaySE(SE_SELECT);
return MENU_NOTHING_CHOSEN;
}
else if ((gMain.newAndRepeatedKeys & DPAD_ANY) == DPAD_RIGHT || GetLRKeysPressedAndHeld() == MENU_R_PRESSED)
{
- if (oldPos != sub_81991F8(1, 0))
+ if (oldPos != ChangeGridMenuCursorPosition(1, 0))
PlaySE(SE_SELECT);
return MENU_NOTHING_CHOSEN;
}
@@ -1626,7 +1616,7 @@ void sub_81995E4(u8 windowId, u8 itemCount, const struct MenuAction *strs, const
printer.fgColor = GetFontAttribute(1, FONTATTR_COLOR_FOREGROUND);
printer.bgColor = GetFontAttribute(1, FONTATTR_COLOR_BACKGROUND);
printer.shadowColor = GetFontAttribute(1, FONTATTR_COLOR_SHADOW);
- printer.unk = GetFontAttribute(1, FONTATTR_UNKNOWN);
+ printer.style = GetFontAttribute(1, FONTATTR_STYLE);
printer.letterSpacing = 0;
printer.lineSpacing = 0;
printer.x = 8;
@@ -1660,7 +1650,7 @@ void CreateYesNoMenu(const struct WindowTemplate *window, u16 baseTileNum, u8 pa
printer.fgColor = GetFontAttribute(1, FONTATTR_COLOR_FOREGROUND);
printer.bgColor = GetFontAttribute(1, FONTATTR_COLOR_BACKGROUND);
printer.shadowColor = GetFontAttribute(1, FONTATTR_COLOR_SHADOW);
- printer.unk = GetFontAttribute(1, FONTATTR_UNKNOWN);
+ printer.style = GetFontAttribute(1, FONTATTR_STYLE);
printer.letterSpacing = 0;
printer.lineSpacing = 0;
@@ -1691,7 +1681,7 @@ void sub_819983C(u8 windowId, u8 a4, u8 itemCount, u8 itemCount2, const struct M
printer.fgColor = GetFontAttribute(1, FONTATTR_COLOR_FOREGROUND);
printer.bgColor = GetFontAttribute(1, FONTATTR_COLOR_BACKGROUND);
printer.shadowColor = GetFontAttribute(1, FONTATTR_COLOR_SHADOW);
- printer.unk = GetFontAttribute(1, FONTATTR_UNKNOWN);
+ printer.style = GetFontAttribute(1, FONTATTR_STYLE);
printer.letterSpacing = 0;
printer.lineSpacing = 0;
@@ -1733,67 +1723,68 @@ u8 sub_8199944(u8 windowId, u8 optionWidth, u8 columns, u8 rows, u8 initialCurso
else
sMenu.cursorPos = pos;
- sub_8199134(0, 0);
+ // Why call this when it's not gonna move?
+ ChangeListMenuCursorPosition(MENU_CURSOR_DELTA_NONE, MENU_CURSOR_DELTA_NONE);
return sMenu.cursorPos;
}
-void clear_scheduled_bg_copies_to_vram(void)
+void ClearScheduledBgCopiesToVram(void)
{
- memset(gUnknown_0203CDA4, 0, sizeof(gUnknown_0203CDA4));
+ memset(sScheduledBgCopiesToVram, 0, sizeof(sScheduledBgCopiesToVram));
}
-void schedule_bg_copy_tilemap_to_vram(u8 bgId)
+void ScheduleBgCopyTilemapToVram(u8 bgId)
{
- gUnknown_0203CDA4[bgId] = TRUE;
+ sScheduledBgCopiesToVram[bgId] = TRUE;
}
-void do_scheduled_bg_tilemap_copies_to_vram(void)
+void DoScheduledBgTilemapCopiesToVram(void)
{
- if (gUnknown_0203CDA4[0] == TRUE)
+ if (sScheduledBgCopiesToVram[0] == TRUE)
{
CopyBgTilemapBufferToVram(0);
- gUnknown_0203CDA4[0] = FALSE;
+ sScheduledBgCopiesToVram[0] = FALSE;
}
- if (gUnknown_0203CDA4[1] == TRUE)
+ if (sScheduledBgCopiesToVram[1] == TRUE)
{
CopyBgTilemapBufferToVram(1);
- gUnknown_0203CDA4[1] = FALSE;
+ sScheduledBgCopiesToVram[1] = FALSE;
}
- if (gUnknown_0203CDA4[2] == TRUE)
+ if (sScheduledBgCopiesToVram[2] == TRUE)
{
CopyBgTilemapBufferToVram(2);
- gUnknown_0203CDA4[2] = FALSE;
+ sScheduledBgCopiesToVram[2] = FALSE;
}
- if (gUnknown_0203CDA4[3] == TRUE)
+ if (sScheduledBgCopiesToVram[3] == TRUE)
{
CopyBgTilemapBufferToVram(3);
- gUnknown_0203CDA4[3] = FALSE;
+ sScheduledBgCopiesToVram[3] = FALSE;
}
}
-void reset_temp_tile_data_buffers(void)
+void ResetTempTileDataBuffers(void)
{
int i;
- for (i = 0; i < (s32)ARRAY_COUNT(gUnknown_0203CDAC); i++)
+ for (i = 0; i < (int)ARRAY_COUNT(sTempTileDataBuffer); i++)
{
- gUnknown_0203CDAC[i] = NULL;
+ sTempTileDataBuffer[i] = NULL;
}
- gUnknown_0203CDA8 = 0;
+ sTempTileDataBufferIdx = 0;
}
-bool8 free_temp_tile_data_buffers_if_possible(void)
+bool8 FreeTempTileDataBuffersIfPossible(void)
{
int i;
if (!IsDma3ManagerBusyWithBgCopy())
{
- if (gUnknown_0203CDA8)
+ if (sTempTileDataBufferIdx)
{
- for (i = 0; i < gUnknown_0203CDA8; i++)
+ for (i = 0; i < sTempTileDataBufferIdx; i++)
{
- FREE_AND_SET_NULL(gUnknown_0203CDAC[i]);
+ FREE_AND_SET_NULL(sTempTileDataBuffer[i]);
}
- gUnknown_0203CDA8 = 0;
+ sTempTileDataBufferIdx = 0;
}
return FALSE;
}
@@ -1803,10 +1794,10 @@ bool8 free_temp_tile_data_buffers_if_possible(void)
}
}
-void *decompress_and_copy_tile_data_to_vram(u8 bgId, const void *src, u32 size, u16 offset, u8 mode)
+void *DecompressAndCopyTileDataToVram(u8 bgId, const void *src, u32 size, u16 offset, u8 mode)
{
u32 sizeOut;
- if (gUnknown_0203CDA8 < ARRAY_COUNT(gUnknown_0203CDAC))
+ if (sTempTileDataBufferIdx < ARRAY_COUNT(sTempTileDataBuffer))
{
void *ptr = malloc_and_decompress(src, &sizeOut);
if (!size)
@@ -1814,7 +1805,7 @@ void *decompress_and_copy_tile_data_to_vram(u8 bgId, const void *src, u32 size,
if (ptr)
{
copy_decompressed_tile_data_to_vram(bgId, ptr, size, offset, mode);
- gUnknown_0203CDAC[gUnknown_0203CDA8++] = ptr;
+ sTempTileDataBuffer[sTempTileDataBufferIdx++] = ptr;
}
return ptr;
}
@@ -1958,7 +1949,7 @@ void AddTextPrinterParameterized3(u8 windowId, u8 fontId, u8 left, u8 top, const
printer.currentY = printer.y;
printer.letterSpacing = GetFontAttribute(fontId, 2);
printer.lineSpacing = GetFontAttribute(fontId, 3);
- printer.unk = 0;
+ printer.style = 0;
printer.fgColor = color[1];
printer.bgColor = color[0];
printer.shadowColor = color[2];
@@ -1979,7 +1970,7 @@ void AddTextPrinterParameterized4(u8 windowId, u8 fontId, u8 left, u8 top, u8 le
printer.currentY = printer.y;
printer.letterSpacing = letterSpacing;
printer.lineSpacing = lineSpacing;
- printer.unk = 0;
+ printer.style = 0;
printer.fgColor = color[1];
printer.bgColor = color[0];
printer.shadowColor = color[2];
@@ -2000,7 +1991,7 @@ void AddTextPrinterParameterized5(u8 windowId, u8 fontId, const u8 *str, u8 left
printer.currentY = top;
printer.letterSpacing = letterSpacing;
printer.lineSpacing = lineSpacing;
- printer.unk = 0;
+ printer.style = 0;
printer.fgColor = GetFontAttribute(fontId, 5);
printer.bgColor = GetFontAttribute(fontId, 6);
@@ -2107,7 +2098,7 @@ void sub_819A27C(u8 windowId, u16 speciesId, u32 personality, u16 x, u16 y)
BlitBitmapToWindow(windowId, GetMonIconPtr(speciesId, personality, 1), x, y, 32, 32);
}
-void sub_819A2BC(u8 palOffset, u8 palId)
+void ListMenuLoadStdPalAt(u8 palOffset, u8 palId)
{
const u16 *palette;
diff --git a/src/menu_helpers.c b/src/menu_helpers.c
index 5b68828c8..69443d309 100644
--- a/src/menu_helpers.c
+++ b/src/menu_helpers.c
@@ -299,7 +299,7 @@ bool8 itemid_80BF6D8_mail_related(u16 itemId)
return FALSE;
}
-bool8 sub_81221AC(void)
+bool8 MenuHelpers_LinkSomething(void)
{
if (IsUpdateLinkStateCBActive() == TRUE || gReceivedRemoteLinkPlayers == 1)
return TRUE;
@@ -309,13 +309,13 @@ bool8 sub_81221AC(void)
static bool8 sub_81221D0(void)
{
- if (!sub_81221AC())
+ if (!MenuHelpers_LinkSomething())
return FALSE;
else
return sub_8087598();
}
-bool8 sub_81221EC(void)
+bool8 MenuHelpers_CallLinkSomething(void)
{
if (sub_81221D0() == TRUE)
return TRUE;
diff --git a/src/menu_specialized.c b/src/menu_specialized.c
index d1b00f883..d402ecb51 100644
--- a/src/menu_specialized.c
+++ b/src/menu_specialized.c
@@ -23,6 +23,7 @@
#include "text_window.h"
#include "trig.h"
#include "window.h"
+#include "constants/berry.h"
#include "constants/songs.h"
#include "constants/species.h"
#include "gba/io_reg.h"
@@ -33,13 +34,13 @@ EWRAM_DATA static u8 sUnknown_0203CF48[3] = {0};
EWRAM_DATA static struct ListMenuItem *sUnknown_0203CF4C = NULL;
static void sub_81D1E7C(s32 itemIndex, bool8 onInit, struct ListMenu *list);
-static void sub_81D24A4(struct UnknownStruct_81D1ED4 *a0);
-static void sub_81D2634(struct UnknownStruct_81D1ED4 *a0);
+static void sub_81D24A4(struct ConditionGraph *a0);
+static void sub_81D2634(struct ConditionGraph *a0);
static void MoveRelearnerCursorCallback(s32 itemIndex, bool8 onInit, struct ListMenu *list);
static void nullsub_79(void);
-static void sub_81D3408(struct Sprite *sprite);
-static void sub_81D3564(struct Sprite *sprite);
-static void sub_81D35E8(struct Sprite *sprite);
+static void SetNextConditionSparkle(struct Sprite *sprite);
+static void SpriteCB_ConditionSparkle(struct Sprite *sprite);
+static void ShowAllConditionSparkles(struct Sprite *sprite);
static const struct WindowTemplate sUnknown_086253E8[] =
{
@@ -79,7 +80,7 @@ static const u8 sPlayerNameTextColors[] =
static const u8 sEmptyItemName[] = _("");
-static const struct ScanlineEffectParams sUnknown_08625404 =
+static const struct ScanlineEffectParams sConditionGraphScanline =
{
.dmaDest = (void*)REG_ADDR_WIN0H,
.dmaControl = SCANLINE_EFFECT_DMACNT_32BIT,
@@ -319,11 +320,11 @@ void sub_81D1EC0(void)
Free(sUnknown_0203CF4C);
}
-void sub_81D1ED4(struct UnknownStruct_81D1ED4 *a0)
+void sub_81D1ED4(struct ConditionGraph *a0)
{
u8 i, j;
- for (j = 0; j < 5; j++)
+ for (j = 0; j < FLAVOR_COUNT; j++)
{
for (i = 0; i < 10; i++)
{
@@ -345,7 +346,7 @@ void sub_81D1ED4(struct UnknownStruct_81D1ED4 *a0)
a0->unk352 = 0;
}
-void sub_81D1F84(struct UnknownStruct_81D1ED4 *arg0, struct UnknownSubStruct_81D1ED4 *arg1, struct UnknownSubStruct_81D1ED4 *arg2)
+void sub_81D1F84(struct ConditionGraph *graph, struct UnknownSubStruct_81D1ED4 *arg1, struct UnknownSubStruct_81D1ED4 *arg2)
{
u16 i, j;
s32 r5, r6;
@@ -356,30 +357,30 @@ void sub_81D1F84(struct UnknownStruct_81D1ED4 *arg0, struct UnknownSubStruct_81D
r6 = ((arg2[i].unk0 - arg1[i].unk0) << 8) / 10;
for (j = 0; j < 9; j++)
{
- arg0->unk64[j][i].unk0 = (r5 >> 8) + ((r5 >> 7) & 1);
+ graph->unk64[j][i].unk0 = (r5 >> 8) + ((r5 >> 7) & 1);
r5 += r6;
}
- arg0->unk64[j][i].unk0 = arg2[i].unk0;
+ graph->unk64[j][i].unk0 = arg2[i].unk0;
r5 = arg1[i].unk2 << 8;
r6 = ((arg2[i].unk2 - arg1[i].unk2) << 8) / 10;
for (j = 0; j < 9; j++)
{
- arg0->unk64[j][i].unk2 = (r5 >> 8) + ((r5 >> 7) & 1);
+ graph->unk64[j][i].unk2 = (r5 >> 8) + ((r5 >> 7) & 1);
r5 += r6;
}
- arg0->unk64[j][i].unk2 = arg2[i].unk2;
+ graph->unk64[j][i].unk2 = arg2[i].unk2;
}
- arg0->unk352 = 0;
+ graph->unk352 = 0;
}
-bool32 sub_81D2074(struct UnknownStruct_81D1ED4 *a0)
+bool32 TransitionConditionGraph(struct ConditionGraph *graph)
{
- if (a0->unk352 < 10)
+ if (graph->unk352 < 10)
{
- sub_81D2230(a0);
- return (++a0->unk352 != 10);
+ sub_81D2230(graph);
+ return (++graph->unk352 != 10);
}
else
{
@@ -387,48 +388,48 @@ bool32 sub_81D2074(struct UnknownStruct_81D1ED4 *a0)
}
}
-void sub_81D20AC(struct UnknownStruct_81D1ED4 *a0)
+void sub_81D20AC(struct ConditionGraph *a0)
{
a0->unk355 = 0;
}
-bool8 sub_81D20BC(struct UnknownStruct_81D1ED4 *arg0)
+bool8 sub_81D20BC(struct ConditionGraph *graph)
{
struct ScanlineEffectParams params;
- switch (arg0->unk355)
+ switch (graph->unk355)
{
case 0:
ScanlineEffect_Clear();
- arg0->unk355++;
+ graph->unk355++;
return TRUE;
case 1:
- params = sUnknown_08625404;
+ params = sConditionGraphScanline;
ScanlineEffect_SetParams(params);
- arg0->unk355++;
+ graph->unk355++;
return FALSE;
default:
return FALSE;
}
}
-void sub_81D2108(struct UnknownStruct_81D1ED4 *arg0)
+void sub_81D2108(struct ConditionGraph *graph)
{
u16 i;
- if (arg0->unk354 == 0)
+ if (graph->unk354 == 0)
return;
- sub_81D24A4(arg0);
- sub_81D2634(arg0);
+ sub_81D24A4(graph);
+ sub_81D2634(graph);
for (i = 0; i < 66; i++)
{
- gScanlineEffectRegBuffers[1][(i + 55) * 2] = gScanlineEffectRegBuffers[0][(i + 55) * 2] = (arg0->unk140[i][0] << 8) | (arg0->unk140[i][1]);
- gScanlineEffectRegBuffers[1][(i + 55) * 2 + 1] = gScanlineEffectRegBuffers[0][(i + 55) * 2 + 1] = (arg0->unk248[i][0] << 8) | (arg0->unk248[i][1]);
+ gScanlineEffectRegBuffers[1][(i + 55) * 2] = gScanlineEffectRegBuffers[0][(i + 55) * 2] = (graph->unk140[i][0] << 8) | (graph->unk140[i][1]);
+ gScanlineEffectRegBuffers[1][(i + 55) * 2 + 1] = gScanlineEffectRegBuffers[0][(i + 55) * 2 + 1] = (graph->unk248[i][0] << 8) | (graph->unk248[i][1]);
}
- arg0->unk354 = 0;
+ graph->unk354 = 0;
}
void sub_81D21DC(u8 bg)
@@ -441,24 +442,24 @@ void sub_81D21DC(u8 bg)
// Unset the WINOUT flag for the bg.
flags = (WINOUT_WIN01_BG_ALL | WINOUT_WIN01_OBJ) & ~(1 << bg);
- SetGpuReg(REG_OFFSET_WIN0H, WIN_RANGE(0, 0xF0));
- SetGpuReg(REG_OFFSET_WIN1H, WIN_RANGE(0, 0x9B));
- SetGpuReg(REG_OFFSET_WIN0V, WIN_RANGE(0x38, 0x79));
- SetGpuReg(REG_OFFSET_WIN1V, WIN_RANGE(0x38, 0x79));
+ SetGpuReg(REG_OFFSET_WIN0H, WIN_RANGE( 0, DISPLAY_WIDTH));
+ SetGpuReg(REG_OFFSET_WIN1H, WIN_RANGE( 0, 155));
+ SetGpuReg(REG_OFFSET_WIN0V, WIN_RANGE(56, 121));
+ SetGpuReg(REG_OFFSET_WIN1V, WIN_RANGE(56, 121));
SetGpuReg(REG_OFFSET_WININ, WININ_WIN0_BG_ALL | WININ_WIN0_OBJ | WININ_WIN0_CLR | WININ_WIN1_BG_ALL | WININ_WIN1_OBJ | WININ_WIN1_CLR);
SetGpuReg(REG_OFFSET_WINOUT, flags);
}
-void sub_81D2230(struct UnknownStruct_81D1ED4 *arg0)
+void sub_81D2230(struct ConditionGraph *graph)
{
u16 i;
- for (i = 0; i < 5; i++)
- arg0->unk12C[i] = arg0->unk64[arg0->unk352][i];
+ for (i = 0; i < FLAVOR_COUNT; i++)
+ graph->unk12C[i] = graph->unk64[graph->unk352][i];
- arg0->unk354 = 1;
+ graph->unk354 = 1;
}
-static void sub_81D2278(struct UnknownStruct_81D1ED4 *arg0, u16 *arg1, struct UnknownSubStruct_81D1ED4 *arg2, struct UnknownSubStruct_81D1ED4 *arg3, u8 arg4, u16 *arg5)
+static void sub_81D2278(struct ConditionGraph *graph, u16 *arg1, struct UnknownSubStruct_81D1ED4 *arg2, struct UnknownSubStruct_81D1ED4 *arg3, u8 arg4, u16 *arg5)
{
u16 i, r8, r10, r0, var_30;
u16 *ptr;
@@ -509,8 +510,8 @@ static void sub_81D2278(struct UnknownStruct_81D1ED4 *arg0, u16 *arg1, struct Un
break;
}
- arg0->unk350 = r10 + i;
- arg1 += (arg0->unk350 - 56) * 2;
+ graph->unk350 = r10 + i;
+ arg1 += (graph->unk350 - 56) * 2;
for (; i < r8; i++)
{
arg1[arg4] = (r4 >> 10) + ((r4 >> 9) & 1) + arg4;
@@ -535,8 +536,8 @@ static void sub_81D2278(struct UnknownStruct_81D1ED4 *arg0, u16 *arg1, struct Un
arg1 += 2;
}
- arg0->unk350 = r10 + i;
- arg5 += (arg0->unk350 - 56) * 2;
+ graph->unk350 = r10 + i;
+ arg5 += (graph->unk350 - 56) * 2;
for (; i < r8; i++)
{
arg5[arg4] = (r4 >> 10) + ((r4 >> 9) & 1) + arg4;
@@ -548,7 +549,7 @@ static void sub_81D2278(struct UnknownStruct_81D1ED4 *arg0, u16 *arg1, struct Un
}
else
{
- arg0->unk350 = r10;
+ graph->unk350 = r10;
arg1 += (r10 - 56) * 2;
arg5 += (r10 - 56) * 2;
arg1[1] = arg2->unk0 + 1;
@@ -560,87 +561,87 @@ static void sub_81D2278(struct UnknownStruct_81D1ED4 *arg0, u16 *arg1, struct Un
ptr[arg4] = arg4 + var_30;
}
-static void sub_81D24A4(struct UnknownStruct_81D1ED4 *arg0)
+static void sub_81D24A4(struct ConditionGraph *graph)
{
u16 i, r6, varMax;
- if (arg0->unk12C[0].unk2 < arg0->unk12C[1].unk2)
+ if (graph->unk12C[0].unk2 < graph->unk12C[1].unk2)
{
- r6 = arg0->unk12C[0].unk2;
- sub_81D2278(arg0, arg0->unk140[0], &arg0->unk12C[0], &arg0->unk12C[1], 1, NULL);
+ r6 = graph->unk12C[0].unk2;
+ sub_81D2278(graph, graph->unk140[0], &graph->unk12C[0], &graph->unk12C[1], 1, NULL);
}
else
{
- r6 = arg0->unk12C[1].unk2;
- sub_81D2278(arg0, arg0->unk140[0], &arg0->unk12C[1], &arg0->unk12C[0], 0, NULL);
+ r6 = graph->unk12C[1].unk2;
+ sub_81D2278(graph, graph->unk140[0], &graph->unk12C[1], &graph->unk12C[0], 0, NULL);
}
- sub_81D2278(arg0, arg0->unk140[0], &arg0->unk12C[1], &arg0->unk12C[2], 1, NULL);
+ sub_81D2278(graph, graph->unk140[0], &graph->unk12C[1], &graph->unk12C[2], 1, NULL);
- i = (arg0->unk12C[2].unk2 <= arg0->unk12C[3].unk2);
- sub_81D2278(arg0, arg0->unk140[0], &arg0->unk12C[2], &arg0->unk12C[3], i, arg0->unk248[0]);
+ i = (graph->unk12C[2].unk2 <= graph->unk12C[3].unk2);
+ sub_81D2278(graph, graph->unk140[0], &graph->unk12C[2], &graph->unk12C[3], i, graph->unk248[0]);
for (i = 56; i < r6; i++)
{
- arg0->unk140[i - 56][0] = 0;
- arg0->unk140[i - 56][1] = 0;
+ graph->unk140[i - 56][0] = 0;
+ graph->unk140[i - 56][1] = 0;
}
- for (i = arg0->unk12C[0].unk2; i <= arg0->unk350; i++)
- arg0->unk140[i - 56][0] = 155;
+ for (i = graph->unk12C[0].unk2; i <= graph->unk350; i++)
+ graph->unk140[i - 56][0] = 155;
- varMax = max(arg0->unk350, arg0->unk12C[2].unk2);
+ varMax = max(graph->unk350, graph->unk12C[2].unk2);
for (i = varMax + 1; i < 122; i++)
{
- arg0->unk140[i - 56][0] = 0;
- arg0->unk140[i - 56][1] = 0;
+ graph->unk140[i - 56][0] = 0;
+ graph->unk140[i - 56][1] = 0;
}
for (i = 56; i < 122; i++)
{
- if (arg0->unk140[i - 56][0] == 0 && arg0->unk140[i - 56][1] != 0)
- arg0->unk140[i - 56][0] = 155;
+ if (graph->unk140[i - 56][0] == 0 && graph->unk140[i - 56][1] != 0)
+ graph->unk140[i - 56][0] = 155;
}
}
-static void sub_81D2634(struct UnknownStruct_81D1ED4 *arg0)
+static void sub_81D2634(struct ConditionGraph *graph)
{
s32 i, r6, varMax;
- if (arg0->unk12C[0].unk2 < arg0->unk12C[4].unk2)
+ if (graph->unk12C[0].unk2 < graph->unk12C[4].unk2)
{
- r6 = arg0->unk12C[0].unk2;
- sub_81D2278(arg0, arg0->unk248[0], &arg0->unk12C[0], &arg0->unk12C[4], 0, NULL);
+ r6 = graph->unk12C[0].unk2;
+ sub_81D2278(graph, graph->unk248[0], &graph->unk12C[0], &graph->unk12C[4], 0, NULL);
}
else
{
- r6 = arg0->unk12C[4].unk2;
- sub_81D2278(arg0, arg0->unk248[0], &arg0->unk12C[4], &arg0->unk12C[0], 1, NULL);
+ r6 = graph->unk12C[4].unk2;
+ sub_81D2278(graph, graph->unk248[0], &graph->unk12C[4], &graph->unk12C[0], 1, NULL);
}
- sub_81D2278(arg0, arg0->unk248[0], &arg0->unk12C[4], &arg0->unk12C[3], 0, NULL);
+ sub_81D2278(graph, graph->unk248[0], &graph->unk12C[4], &graph->unk12C[3], 0, NULL);
for (i = 56; i < r6; i++)
{
- arg0->unk140[i + 10][0] = 0;
- arg0->unk140[i + 10][1] = 0;
+ graph->unk140[i + 10][0] = 0;
+ graph->unk140[i + 10][1] = 0;
}
- for (i = arg0->unk12C[0].unk2; i <= arg0->unk350; i++)
- arg0->unk140[i + 10][1] = 155;
+ for (i = graph->unk12C[0].unk2; i <= graph->unk350; i++)
+ graph->unk140[i + 10][1] = 155;
- varMax = max(arg0->unk350, arg0->unk12C[3].unk2 + 1);
+ varMax = max(graph->unk350, graph->unk12C[3].unk2 + 1);
for (i = varMax; i < 122; i++)
{
- arg0->unk140[i + 10][0] = 0;
- arg0->unk140[i + 10][1] = 0;
+ graph->unk140[i + 10][0] = 0;
+ graph->unk140[i + 10][1] = 0;
}
for (i = 0; i < 66; i++)
{
- if (arg0->unk248[i][0] >= arg0->unk248[i][1])
+ if (graph->unk248[i][0] >= graph->unk248[i][1])
{
- arg0->unk248[i][1] = 0;
- arg0->unk248[i][0] = 0;
+ graph->unk248[i][1] = 0;
+ graph->unk248[i][0] = 0;
}
}
}
@@ -704,7 +705,7 @@ void InitMoveRelearnerWindows(bool8 useContextWindow)
DrawStdFrameWithCustomTileAndPalette(2, 0, 1, 0xE);
DrawStdFrameWithCustomTileAndPalette(3, 0, 1, 0xE);
nullsub_79();
- schedule_bg_copy_tilemap_to_vram(1);
+ ScheduleBgCopyTilemapToVram(1);
}
static void nullsub_79(void)
@@ -877,94 +878,93 @@ s32 GetBoxOrPartyMonData(u16 boxId, u16 monId, s32 request, u8 *dst)
return ret;
}
-static u8 *sub_81D2CD0(u8 *dst, u16 boxId, u16 monId)
+// Gets the name/gender/level string for the condition menu
+static u8 *GetConditionMenuMonString(u8 *dst, u16 boxId, u16 monId)
{
u16 species, level, gender;
struct BoxPokemon *boxMon;
u8 *str;
*(dst++) = EXT_CTRL_CODE_BEGIN;
- *(dst++) = 4;
- *(dst++) = 8;
- *(dst++) = 0;
- *(dst++) = 9;
+ *(dst++) = EXT_CTRL_CODE_COLOR_HIGHLIGHT_SHADOW;
+ *(dst++) = TEXT_COLOR_BLUE;
+ *(dst++) = TEXT_COLOR_TRANSPARENT;
+ *(dst++) = TEXT_COLOR_LIGHT_BLUE;
if (GetBoxOrPartyMonData(boxId, monId, MON_DATA_IS_EGG, NULL))
{
return StringCopyPadded(dst, gText_EggNickname, 0, 12);
}
+ GetBoxOrPartyMonData(boxId, monId, MON_DATA_NICKNAME, dst);
+ StringGetEnd10(dst);
+ species = GetBoxOrPartyMonData(boxId, monId, MON_DATA_SPECIES, NULL);
+ if (boxId == TOTAL_BOXES_COUNT) // Party mon.
+ {
+ level = GetMonData(&gPlayerParty[monId], MON_DATA_LEVEL);
+ gender = GetMonGender(&gPlayerParty[monId]);
+ }
else
{
- GetBoxOrPartyMonData(boxId, monId, MON_DATA_NICKNAME, dst);
- StringGetEnd10(dst);
- species = GetBoxOrPartyMonData(boxId, monId, MON_DATA_SPECIES, NULL);
- if (boxId == TOTAL_BOXES_COUNT) // Party mon.
- {
- level = GetMonData(&gPlayerParty[monId], MON_DATA_LEVEL);
- gender = GetMonGender(&gPlayerParty[monId]);
- }
- else
- {
- // Needed to match, feel free to remove.
- boxId++;boxId--;
- monId++;monId--;
+ // Needed to match, feel free to remove.
+ boxId++, boxId--;
+ monId++, monId--;
- boxMon = GetBoxedMonPtr(boxId, monId);
- gender = GetBoxMonGender(boxMon);
- level = GetLevelFromBoxMonExp(boxMon);
- }
+ boxMon = GetBoxedMonPtr(boxId, monId);
+ gender = GetBoxMonGender(boxMon);
+ level = GetLevelFromBoxMonExp(boxMon);
+ }
- if ((species == SPECIES_NIDORAN_F || species == SPECIES_NIDORAN_M) && !StringCompare(dst, gSpeciesNames[species]))
- gender = MON_GENDERLESS;
+ if ((species == SPECIES_NIDORAN_F || species == SPECIES_NIDORAN_M) && !StringCompare(dst, gSpeciesNames[species]))
+ gender = MON_GENDERLESS;
- for (str = dst; *str != EOS; str++)
- ;
+ for (str = dst; *str != EOS; str++)
+ ;
- *(str++) = EXT_CTRL_CODE_BEGIN;
- *(str++) = 0x12;
- *(str++) = 0x3C;
+ *(str++) = EXT_CTRL_CODE_BEGIN;
+ *(str++) = EXT_CTRL_CODE_SKIP;
+ *(str++) = 60;
- switch (gender)
- {
- default:
- *(str++) = CHAR_SPACE;
- break;
- case MON_MALE:
- *(str++) = EXT_CTRL_CODE_BEGIN;
- *(str++) = EXT_CTRL_CODE_COLOR;
- *(str++) = 4;
- *(str++) = EXT_CTRL_CODE_BEGIN;
- *(str++) = 3;
- *(str++) = 5;
- *(str++) = CHAR_MALE;
- break;
- case MON_FEMALE:
- *(str++) = EXT_CTRL_CODE_BEGIN;
- *(str++) = EXT_CTRL_CODE_COLOR;
- *(str++) = 6;
- *(str++) = EXT_CTRL_CODE_BEGIN;
- *(str++) = 3;
- *(str++) = 7;
- *(str++) = CHAR_FEMALE;
- break;
- }
-
- *(str++) = EXT_CTRL_CODE_BEGIN;
- *(str++) = 4;
- *(str++) = 8;
- *(str++) = 0;
- *(str++) = 9;
- *(str++) = CHAR_SLASH;
- *(str++) = CHAR_SPECIAL_F9;
- *(str++) = CHAR_LV_2;
- str = ConvertIntToDecimalStringN(str, level, STR_CONV_MODE_LEFT_ALIGN, 3);
+ switch (gender)
+ {
+ default:
*(str++) = CHAR_SPACE;
- *str = EOS;
-
- return str;
+ break;
+ case MON_MALE:
+ *(str++) = EXT_CTRL_CODE_BEGIN;
+ *(str++) = EXT_CTRL_CODE_COLOR;
+ *(str++) = TEXT_COLOR_RED;
+ *(str++) = EXT_CTRL_CODE_BEGIN;
+ *(str++) = EXT_CTRL_CODE_SHADOW;
+ *(str++) = TEXT_COLOR_LIGHT_RED;
+ *(str++) = CHAR_MALE;
+ break;
+ case MON_FEMALE:
+ *(str++) = EXT_CTRL_CODE_BEGIN;
+ *(str++) = EXT_CTRL_CODE_COLOR;
+ *(str++) = TEXT_COLOR_GREEN;
+ *(str++) = EXT_CTRL_CODE_BEGIN;
+ *(str++) = EXT_CTRL_CODE_SHADOW;
+ *(str++) = TEXT_COLOR_LIGHT_GREEN;
+ *(str++) = CHAR_FEMALE;
+ break;
}
+
+ *(str++) = EXT_CTRL_CODE_BEGIN;
+ *(str++) = EXT_CTRL_CODE_COLOR_HIGHLIGHT_SHADOW;
+ *(str++) = TEXT_COLOR_BLUE;
+ *(str++) = TEXT_COLOR_TRANSPARENT;
+ *(str++) = TEXT_COLOR_LIGHT_BLUE;
+ *(str++) = CHAR_SLASH;
+ *(str++) = CHAR_EXTRA_SYMBOL;
+ *(str++) = CHAR_LV_2;
+ str = ConvertIntToDecimalStringN(str, level, STR_CONV_MODE_LEFT_ALIGN, 3);
+ *(str++) = CHAR_SPACE;
+ *str = EOS;
+
+ return str;
}
-static u8 *sub_81D2E7C(u8 *dst, const u8 *src, s16 n)
+// Buffers the string in src to dest up to n chars. If src is less than n chars, fill with spaces
+static u8 *BufferConditionMenuSpacedStringN(u8 *dst, const u8 *src, s16 n)
{
while (*src != EOS)
{
@@ -978,80 +978,83 @@ static u8 *sub_81D2E7C(u8 *dst, const u8 *src, s16 n)
return dst;
}
-void sub_81D2ED4(u8 *dst, u8 *nameDst, u16 boxId, u16 monId, u16 arg5, u16 arg6, bool8 arg7)
+void GetConditionMenuMonNameAndLocString(u8 *locationDst, u8 *nameDst, u16 boxId, u16 monId, u16 partyId, u16 numMons, bool8 excludesCancel)
{
u16 i;
- if (!arg7)
- arg6--;
+ // In this and the below 2 functions, numMons is passed as the number of menu selections (which includes Cancel)
+ // To indicate that the Cancel needs to be subtracted they pass an additional bool
+ // Unclear why they didn't just subtract 1 when it gets passed instead
+ if (!excludesCancel)
+ numMons--;
- if (arg5 != arg6)
+ if (partyId != numMons)
{
- sub_81D2CD0(nameDst, boxId, monId);
- dst[0] = EXT_CTRL_CODE_BEGIN;
- dst[1] = 4;
- dst[2] = 8;
- dst[3] = 0;
- dst[4] = 9;
+ GetConditionMenuMonString(nameDst, boxId, monId);
+ locationDst[0] = EXT_CTRL_CODE_BEGIN;
+ locationDst[1] = EXT_CTRL_CODE_COLOR_HIGHLIGHT_SHADOW;
+ locationDst[2] = TEXT_COLOR_BLUE;
+ locationDst[3] = TEXT_COLOR_TRANSPARENT;
+ locationDst[4] = TEXT_COLOR_LIGHT_BLUE;
if (boxId == TOTAL_BOXES_COUNT) // Party mon.
{
- sub_81D2E7C(dst + 5, gText_InParty, 8);
+ BufferConditionMenuSpacedStringN(&locationDst[5], gText_InParty, 8);
}
else
{
boxId++;boxId--; // Again...Someone fix this maybe?
- sub_81D2E7C(dst + 5, GetBoxNamePtr(boxId), 8);
+ BufferConditionMenuSpacedStringN(&locationDst[5], GetBoxNamePtr(boxId), 8);
}
}
else
{
- for (i = 0; i < 12; i++)
+ for (i = 0; i < POKEMON_NAME_LENGTH + 2; i++)
nameDst[i] = CHAR_SPACE;
nameDst[i] = EOS;
for (i = 0; i < 8; i++)
- dst[i] = CHAR_SPACE;
- dst[i] = EOS;
+ locationDst[i] = CHAR_SPACE;
+ locationDst[i] = EOS;
}
}
-void sub_81D2F78(struct UnknownStruct_81D1ED4 *arg0, u8 *sheen, u16 boxId, u16 monId, u16 arg5, u16 id, u16 arg7, bool8 arg8)
+void GetConditionMenuMonConditions(struct ConditionGraph *graph, u8 *sheen, u16 boxId, u16 monId, u16 partyId, u16 id, u16 numMons, bool8 excludesCancel)
{
u16 i;
- if (!arg8)
- arg7--;
+ if (!excludesCancel)
+ numMons--;
- if (arg5 != arg7)
+ if (partyId != numMons)
{
- arg0->unk0[id][0] = GetBoxOrPartyMonData(boxId, monId, MON_DATA_COOL, NULL);
- arg0->unk0[id][1] = GetBoxOrPartyMonData(boxId, monId, MON_DATA_TOUGH, NULL);
- arg0->unk0[id][2] = GetBoxOrPartyMonData(boxId, monId, MON_DATA_SMART, NULL);
- arg0->unk0[id][3] = GetBoxOrPartyMonData(boxId, monId, MON_DATA_CUTE, NULL);
- arg0->unk0[id][4] = GetBoxOrPartyMonData(boxId, monId, MON_DATA_BEAUTY, NULL);
+ graph->unk0[id][0] = GetBoxOrPartyMonData(boxId, monId, MON_DATA_COOL, NULL);
+ graph->unk0[id][1] = GetBoxOrPartyMonData(boxId, monId, MON_DATA_TOUGH, NULL);
+ graph->unk0[id][2] = GetBoxOrPartyMonData(boxId, monId, MON_DATA_SMART, NULL);
+ graph->unk0[id][3] = GetBoxOrPartyMonData(boxId, monId, MON_DATA_CUTE, NULL);
+ graph->unk0[id][4] = GetBoxOrPartyMonData(boxId, monId, MON_DATA_BEAUTY, NULL);
sheen[id] = (GetBoxOrPartyMonData(boxId, monId, MON_DATA_SHEEN, NULL) != 0xFF)
? GetBoxOrPartyMonData(boxId, monId, MON_DATA_SHEEN, NULL) / 29u
: 9;
- sub_81D2754(arg0->unk0[id], arg0->unk14[id]);
+ sub_81D2754(graph->unk0[id], graph->unk14[id]);
}
else
{
- for (i = 0; i < 5; i++)
+ for (i = 0; i < FLAVOR_COUNT; i++)
{
- arg0->unk0[id][i] = 0;
- arg0->unk14[id][i].unk0 = 155;
- arg0->unk14[id][i].unk2 = 91;
+ graph->unk0[id][i] = 0;
+ graph->unk14[id][i].unk0 = 155;
+ graph->unk14[id][i].unk2 = 91;
}
}
}
-void sub_81D3094(void *tilesDst, void *palDst, u16 boxId, u16 monId, u16 arg5, u16 arg6, bool8 arg7)
+void GetConditionMenuMonGfx(void *tilesDst, void *palDst, u16 boxId, u16 monId, u16 partyId, u16 numMons, bool8 excludesCancel)
{
- if (!arg7)
- arg6--;
+ if (!excludesCancel)
+ numMons--;
- if (arg5 != arg6)
+ if (partyId != numMons)
{
u16 species = GetBoxOrPartyMonData(boxId, monId, MON_DATA_SPECIES2, NULL);
u32 trainerId = GetBoxOrPartyMonData(boxId, monId, MON_DATA_OT_ID, NULL);
@@ -1062,46 +1065,46 @@ void sub_81D3094(void *tilesDst, void *palDst, u16 boxId, u16 monId, u16 arg5, u
}
}
-bool8 sub_81D312C(s16 *var)
+bool8 MoveConditionMonOnscreen(s16 *x)
{
- *var += 24;
- if (*var > 0)
- *var = 0;
+ *x += 24;
+ if (*x > 0)
+ *x = 0;
- return (*var != 0);
+ return (*x != 0);
}
-bool8 sub_81D3150(s16 *var)
+bool8 MoveConditionMonOffscreen(s16 *x)
{
- *var -= 24;
- if (*var < -80)
- *var = -80;
+ *x -= 24;
+ if (*x < -80)
+ *x = -80;
- return (*var != -80);
+ return (*x != -80);
}
-bool8 sub_81D3178(struct UnknownStruct_81D1ED4 *arg0, s16 *arg1)
+bool8 TryUpdateConditionMonTransitionOn(struct ConditionGraph *graph, s16 *x)
{
- bool8 var1 = sub_81D2074(arg0);
- bool8 var2 = sub_81D312C(arg1);
+ bool8 graphUpdating = TransitionConditionGraph(graph);
+ bool8 monUpdating = MoveConditionMonOnscreen(x);
- return ((var1 != 0) || (var2 != 0));
+ return (graphUpdating || monUpdating);
}
-bool8 sub_81D31A4(struct UnknownStruct_81D1ED4 *arg0, s16 *arg1)
+bool8 TryUpdateConditionMonTransitionOff(struct ConditionGraph *graph, s16 *x)
{
- bool8 var1 = sub_81D2074(arg0);
- bool8 var2 = sub_81D3150(arg1);
+ bool8 graphUpdating = TransitionConditionGraph(graph);
+ bool8 monUpdating = MoveConditionMonOffscreen(x);
- return ((var1 != 0) || (var2 != 0));
+ return (graphUpdating || monUpdating);
}
-static const u32 gUnknown_08625560[] = INCBIN_U32("graphics/pokenav/pokeball.4bpp");
-static const u32 gUnknown_08625660[] = INCBIN_U32("graphics/pokenav/pokeball_placeholder.4bpp");
-static const u16 gUnknown_08625680[] = INCBIN_U16("graphics/pokenav/sparkle.gbapal");
-static const u32 gUnknown_086256A0[] = INCBIN_U32("graphics/pokenav/sparkle.4bpp");
+static const u32 sConditionPokeball_Gfx[] = INCBIN_U32("graphics/pokenav/condition/pokeball.4bpp");
+static const u32 sConditionPokeballPlaceholder_Gfx[] = INCBIN_U32("graphics/pokenav/condition/pokeball_placeholder.4bpp");
+static const u16 sConditionSparkle_Gfx[] = INCBIN_U16("graphics/pokenav/condition/sparkle.gbapal");
+static const u32 sConditionSparkle_Pal[] = INCBIN_U32("graphics/pokenav/condition/sparkle.4bpp");
-static const struct OamData sOamData_8625A20 =
+static const struct OamData sOam_ConditionMonPic =
{
.y = 0,
.affineMode = ST_OAM_AFFINE_OFF,
@@ -1118,7 +1121,7 @@ static const struct OamData sOamData_8625A20 =
.affineParam = 0
};
-static const struct OamData sOamData_8625A28 =
+static const struct OamData sOam_ConditionSelectionIcon =
{
.y = 0,
.affineMode = ST_OAM_AFFINE_OFF,
@@ -1135,71 +1138,73 @@ static const struct OamData sOamData_8625A28 =
.affineParam = 0
};
-static const union AnimCmd sSpriteAnim_8625A30[] =
+static const union AnimCmd sAnim_ConditionSelectionIcon_Selected[] =
{
ANIMCMD_FRAME(0, 5),
ANIMCMD_END
};
-static const union AnimCmd sSpriteAnim_8625A38[] =
+static const union AnimCmd sAnim_ConditionSelectionIcon_Unselected[] =
{
ANIMCMD_FRAME(4, 5),
ANIMCMD_END
};
-static const union AnimCmd *const sSpriteAnimTable_8625A40[] =
+static const union AnimCmd *const sAnims_ConditionSelectionIcon[] =
{
- sSpriteAnim_8625A30,
- sSpriteAnim_8625A38
+ sAnim_ConditionSelectionIcon_Selected,
+ sAnim_ConditionSelectionIcon_Unselected
};
-void sub_81D31D0(struct SpriteSheet *sheet, struct SpriteTemplate *template, struct SpritePalette *pal)
+// Just loads the generic data, up to the caller to load the actual sheet/pal for the specific mon
+void LoadConditionMonPicTemplate(struct SpriteSheet *sheet, struct SpriteTemplate *template, struct SpritePalette *pal)
{
- struct SpriteSheet dataSheet = {NULL, 0x800, 100};
+ struct SpriteSheet dataSheet = {NULL, 0x800, TAG_CONDITION_MON};
struct SpriteTemplate dataTemplate =
{
- .tileTag = 100,
- .paletteTag = 100,
- .oam = &sOamData_8625A20,
+ .tileTag = TAG_CONDITION_MON,
+ .paletteTag = TAG_CONDITION_MON,
+ .oam = &sOam_ConditionMonPic,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = SpriteCallbackDummy,
};
- struct SpritePalette dataPal = {NULL, 100};
+ struct SpritePalette dataPal = {NULL, TAG_CONDITION_MON};
*sheet = dataSheet;
*template = dataTemplate;
*pal = dataPal;
}
-void sub_81D321C(struct SpriteSheet *sheets, struct SpriteTemplate * template, struct SpritePalette *pals)
+void LoadConditionSelectionIcons(struct SpriteSheet *sheets, struct SpriteTemplate * template, struct SpritePalette *pals)
{
u8 i;
struct SpriteSheet dataSheets[] =
{
- {gUnknown_08625560, 0x100, 101},
- {gUnknown_08625660, 0x20, 103},
- {gPokenavConditionCancel_Gfx, 0x100, 102},
+ {sConditionPokeball_Gfx, 0x100, TAG_CONDITION_BALL},
+ {sConditionPokeballPlaceholder_Gfx, 0x20, TAG_CONDITION_BALL_PLACEHOLDER},
+ {gPokenavConditionCancel_Gfx, 0x100, TAG_CONDITION_CANCEL},
{},
};
struct SpritePalette dataPals[] =
{
- {gPokenavConditionCancel_Pal, 101},
- {gPokenavConditionCancel_Pal + 16, 102},
+ {gPokenavConditionCancel_Pal, TAG_CONDITION_BALL},
+ {gPokenavConditionCancel_Pal + 16, TAG_CONDITION_CANCEL},
{},
};
+ // Tag is overwritten for the other selection icons
struct SpriteTemplate dataTemplate =
{
- .tileTag = 101,
- .paletteTag = 101,
- .oam = &sOamData_8625A28,
- .anims = sSpriteAnimTable_8625A40,
+ .tileTag = TAG_CONDITION_BALL,
+ .paletteTag = TAG_CONDITION_BALL,
+ .oam = &sOam_ConditionSelectionIcon,
+ .anims = sAnims_ConditionSelectionIcon,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = SpriteCallbackDummy,
@@ -1214,34 +1219,41 @@ void sub_81D321C(struct SpriteSheet *sheets, struct SpriteTemplate * template, s
*(pals++) = dataPals[i];
}
-void sub_81D32B0(struct SpriteSheet *sheet, struct SpritePalette *pal)
+#define sSparkleId data[0]
+#define sDelayTimer data[1]
+#define sNumExtraSparkles data[2]
+#define sCurSparkleId data[3]
+#define sMonSpriteId data[4]
+#define sNextSparkleSpriteId data[5]
+
+void LoadConditionSparkle(struct SpriteSheet *sheet, struct SpritePalette *pal)
{
- struct SpriteSheet dataSheet = {gUnknown_086256A0, 0x380, 104};
- struct SpritePalette dataPal = {gUnknown_08625680, 104};
+ struct SpriteSheet dataSheet = {sConditionSparkle_Pal, 0x380, TAG_CONDITION_SPARKLE};
+ struct SpritePalette dataPal = {sConditionSparkle_Gfx, TAG_CONDITION_SPARKLE};
*sheet = dataSheet;
*pal = dataPal;
}
-static void sub_81D32D4(struct Sprite *sprite)
+static void SpriteCB_ConditionSparkle_DoNextAfterDelay(struct Sprite *sprite)
{
- if (++sprite->data[1] > 60)
+ if (++sprite->sDelayTimer > 60)
{
- sprite->data[1] = 0;
- sub_81D3408(sprite);
+ sprite->sDelayTimer = 0;
+ SetNextConditionSparkle(sprite);
}
}
-static void sub_81D32F4(struct Sprite *sprite)
+static void SpriteCB_ConditionSparkle_WaitForAllAnim(struct Sprite *sprite)
{
if (sprite->animEnded)
{
- sprite->data[1] = 0;
- sprite->callback = sub_81D32D4;
+ sprite->sDelayTimer = 0;
+ sprite->callback = SpriteCB_ConditionSparkle_DoNextAfterDelay;
}
}
-static const struct OamData sOamData_8625AD0 =
+static const struct OamData sOam_ConditionSparkle =
{
.y = 0,
.affineMode = ST_OAM_AFFINE_OFF,
@@ -1253,7 +1265,7 @@ static const struct OamData sOamData_8625AD0 =
.priority = 0,
};
-static const union AnimCmd sSpriteAnim_8625AD8[] =
+static const union AnimCmd sAnim_ConditionSparkle[] =
{
ANIMCMD_FRAME(0, 5),
ANIMCMD_FRAME(4, 5),
@@ -1265,133 +1277,120 @@ static const union AnimCmd sSpriteAnim_8625AD8[] =
ANIMCMD_END
};
-static const union AnimCmd *const sSpriteAnimTable_8625AF8[] =
+static const union AnimCmd *const sAnims_ConditionSparkle[] =
{
- sSpriteAnim_8625AD8,
- sSpriteAnim_8625AD8 + 2,
+ &sAnim_ConditionSparkle[0], // Only this entry is used
+ &sAnim_ConditionSparkle[2],
+ &sAnim_ConditionSparkle[4],
+ &sAnim_ConditionSparkle[6],
+ &sAnim_ConditionSparkle[8], // Here below OOB, will crash if used
+ &sAnim_ConditionSparkle[10],
+ &sAnim_ConditionSparkle[12],
};
-// unused
-static const union AnimCmd *const sSpriteAnimTable_8625B00[] =
+static const struct SpriteTemplate sSpriteTemplate_ConditionSparkle =
{
- sSpriteAnim_8625AD8 + 4,
- sSpriteAnim_8625AD8 + 6,
-};
-
-// unused
-static const union AnimCmd *const sSpriteAnimTable_8625B08[] =
-{
- sSpriteAnim_8625AD8 + 8,
- sSpriteAnim_8625AD8 + 10,
-};
-
-// unused
-static const union AnimCmd *const *const sUnknown_08625B10 = sSpriteAnimTable_8625B08;
-
-const struct SpriteTemplate gUnknown_08625B14 =
-{
- .tileTag = 104,
- .paletteTag = 104,
- .oam = &sOamData_8625AD0,
- .anims = sSpriteAnimTable_8625AF8,
+ .tileTag = TAG_CONDITION_SPARKLE,
+ .paletteTag = TAG_CONDITION_SPARKLE,
+ .oam = &sOam_ConditionSparkle,
+ .anims = sAnims_ConditionSparkle,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_81D3564,
+ .callback = SpriteCB_ConditionSparkle,
};
-static const s16 gUnknown_08625B2C[][2] =
-{
- {0, -35},
- {20, -28},
- {33, -10},
- {33, 10},
- {20, 28},
- {0, 35},
- {-20, 28},
- {-33, 10},
- {-33, -10},
- {-20, -28},
+static const s16 sConditionSparkleCoords[MAX_CONDITION_SPARKLES][2] =
+{
+ { 0, -35},
+ { 20, -28},
+ { 33, -10},
+ { 33, 10},
+ { 20, 28},
+ { 0, 35},
+ {-20, 28},
+ {-33, 10},
+ {-33, -10},
+ {-20, -28},
};
-void sub_81D3314(struct Sprite *sprite)
+static void SetConditionSparklePosition(struct Sprite *sprite)
{
- struct Sprite *sprite2 = &gSprites[sprite->data[4]];
+ struct Sprite *mon = &gSprites[sprite->sMonSpriteId];
- if (sprite2 != NULL)
+ if (mon != NULL)
{
- sprite->pos1.x = sprite2->pos1.x + sprite2->pos2.x + gUnknown_08625B2C[sprite->data[0]][0];
- sprite->pos1.y = sprite2->pos1.y + sprite2->pos2.y + gUnknown_08625B2C[sprite->data[0]][1];
+ sprite->pos1.x = mon->pos1.x + mon->pos2.x + sConditionSparkleCoords[sprite->sSparkleId][0];
+ sprite->pos1.y = mon->pos1.y + mon->pos2.y + sConditionSparkleCoords[sprite->sSparkleId][1];
}
else
{
- sprite->pos1.x = gUnknown_08625B2C[sprite->data[0]][0] + 40;
- sprite->pos1.y = gUnknown_08625B2C[sprite->data[0]][1] + 104;
+ sprite->pos1.x = sConditionSparkleCoords[sprite->sSparkleId][0] + 40;
+ sprite->pos1.y = sConditionSparkleCoords[sprite->sSparkleId][1] + 104;
}
}
-void sub_81D338C(u8 arg0, u8 arg1, struct Sprite **sprites)
+static void InitConditionSparkles(u8 count, bool8 allowFirstShowAll, struct Sprite **sprites)
{
u16 i;
- for (i = 0; i < 10; i++)
+ for (i = 0; i < MAX_CONDITION_SPARKLES; i++)
{
if (sprites[i] != NULL)
{
- sprites[i]->data[0] = i;
- sprites[i]->data[1] = (i * 16) + 1;
- sprites[i]->data[2] = arg0;
- sprites[i]->data[3] = i;
- if (arg1 == 0 || arg0 != 9)
+ sprites[i]->sSparkleId = i;
+ sprites[i]->sDelayTimer = (i * 16) + 1;
+ sprites[i]->sNumExtraSparkles = count;
+ sprites[i]->sCurSparkleId = i;
+ if (!allowFirstShowAll || count != MAX_CONDITION_SPARKLES - 1)
{
- sprites[i]->callback = sub_81D3564;
+ sprites[i]->callback = SpriteCB_ConditionSparkle;
}
else
{
- sub_81D3314(sprites[i]);
- sub_81D35E8(sprites[i]);
- sprites[i]->callback = sub_81D32F4;
+ SetConditionSparklePosition(sprites[i]);
+ ShowAllConditionSparkles(sprites[i]);
+ sprites[i]->callback = SpriteCB_ConditionSparkle_WaitForAllAnim;
sprites[i]->invisible = FALSE;
}
}
}
}
-static void sub_81D3408(struct Sprite *sprite)
+static void SetNextConditionSparkle(struct Sprite *sprite)
{
u16 i;
- u8 id = sprite->data[5];
-
- for (i = 0; i < sprite->data[2] + 1; i++)
+ u8 id = sprite->sNextSparkleSpriteId;
+ for (i = 0; i < sprite->sNumExtraSparkles + 1; i++)
{
- gSprites[id].data[1] = (gSprites[id].data[0] * 16) + 1;
- gSprites[id].callback = sub_81D3564;
- id = gSprites[id].data[5];
+ gSprites[id].sDelayTimer = (gSprites[id].sSparkleId * 16) + 1;
+ gSprites[id].callback = SpriteCB_ConditionSparkle;
+ id = gSprites[id].sNextSparkleSpriteId;
}
}
-void sub_81D3464(struct Sprite **sprites)
+void ResetConditionSparkleSprites(struct Sprite **sprites)
{
u8 i;
- for (i = 0; i < 10; i++)
+ for (i = 0; i < MAX_CONDITION_SPARKLES; i++)
sprites[i] = NULL;
}
-void sub_81D3480(struct Sprite **sprites, u8 arg1, u8 arg2)
+void CreateConditionSparkleSprites(struct Sprite **sprites, u8 monSpriteId, u8 _count)
{
u16 i, spriteId, firstSpriteId = 0;
- u8 count = arg2;
+ u8 count = _count;
for (i = 0; i < count + 1; i++)
{
- spriteId = CreateSprite(&gUnknown_08625B14, 0, 0, 0);
+ spriteId = CreateSprite(&sSpriteTemplate_ConditionSparkle, 0, 0, 0);
if (spriteId != MAX_SPRITES)
{
sprites[i] = &gSprites[spriteId];
sprites[i]->invisible = TRUE;
- sprites[i]->data[4] = arg1;
+ sprites[i]->sMonSpriteId = monSpriteId;
if (i != 0)
- sprites[i - 1]->data[5] = spriteId;
+ sprites[i - 1]->sNextSparkleSpriteId = spriteId;
else
firstSpriteId = spriteId;
}
@@ -1401,15 +1400,15 @@ void sub_81D3480(struct Sprite **sprites, u8 arg1, u8 arg2)
}
}
- sprites[count]->data[5] = firstSpriteId;
- sub_81D338C(count, 1, sprites);
+ sprites[count]->sNextSparkleSpriteId = firstSpriteId;
+ InitConditionSparkles(count, TRUE, sprites);
}
-void sub_81D3520(struct Sprite **sprites)
+void DestroyConditionSparkleSprites(struct Sprite **sprites)
{
u16 i;
- for (i = 0; i < 10; i++)
+ for (i = 0; i < MAX_CONDITION_SPARKLES; i++)
{
if (sprites[i] != NULL)
{
@@ -1423,38 +1422,41 @@ void sub_81D3520(struct Sprite **sprites)
}
}
-void sub_81D354C(struct Sprite **sprites)
+void FreeConditionSparkles(struct Sprite **sprites)
{
- sub_81D3520(sprites);
- FreeSpriteTilesByTag(104);
- FreeSpritePaletteByTag(104);
+ DestroyConditionSparkleSprites(sprites);
+ FreeSpriteTilesByTag(TAG_CONDITION_SPARKLE);
+ FreeSpritePaletteByTag(TAG_CONDITION_SPARKLE);
}
-static void sub_81D3564(struct Sprite *sprite)
+static void SpriteCB_ConditionSparkle(struct Sprite *sprite)
{
- if (sprite->data[1] != 0)
+ // Delay, then do sparkle anim
+ if (sprite->sDelayTimer != 0)
{
- if (--sprite->data[1] != 0)
+ if (--sprite->sDelayTimer != 0)
return;
SeekSpriteAnim(sprite, 0);
sprite->invisible = FALSE;
}
- sub_81D3314(sprite);
+ SetConditionSparklePosition(sprite);
+
+ // Set up next sparkle
if (sprite->animEnded)
{
sprite->invisible = TRUE;
- if (sprite->data[3] == sprite->data[2])
+ if (sprite->sCurSparkleId == sprite->sNumExtraSparkles)
{
- if (sprite->data[3] == 9)
+ if (sprite->sCurSparkleId == MAX_CONDITION_SPARKLES - 1)
{
- sub_81D35E8(sprite);
- sprite->callback = sub_81D32F4;
+ ShowAllConditionSparkles(sprite);
+ sprite->callback = SpriteCB_ConditionSparkle_WaitForAllAnim;
}
else
{
- sprite->callback = sub_81D32D4;
+ sprite->callback = SpriteCB_ConditionSparkle_DoNextAfterDelay;
}
}
else
@@ -1464,18 +1466,25 @@ static void sub_81D3564(struct Sprite *sprite)
}
}
-static void sub_81D35E8(struct Sprite *sprite)
+static void ShowAllConditionSparkles(struct Sprite *sprite)
{
- u8 i, id = sprite->data[5];
+ u8 i, id = sprite->sNextSparkleSpriteId;
- for (i = 0; i < sprite->data[2] + 1; i++)
+ for (i = 0; i < sprite->sNumExtraSparkles + 1; i++)
{
SeekSpriteAnim(&gSprites[id], 0);
gSprites[id].invisible = FALSE;
- id = gSprites[id].data[5];
+ id = gSprites[id].sNextSparkleSpriteId;
}
}
+#undef sSparkleId
+#undef sDelayTimer
+#undef sNumExtraSparkles
+#undef sCurSparkleId
+#undef sMonSpriteId
+#undef sNextSparkleSpriteId
+
static const u8 *const sLvlUpStatStrings[NUM_STATS] =
{
gText_MaxHP,
diff --git a/src/mevent2.c b/src/mevent2.c
index 2991ac27c..7a2edc7f5 100755
--- a/src/mevent2.c
+++ b/src/mevent2.c
@@ -548,12 +548,12 @@ u16 mevent_081445C0(u32 command)
return 0;
}
-void sub_801B940(void)
+void ResetReceivedWonderCardFlag(void)
{
gUnknown_02022C70 = FALSE;
}
-bool32 sub_801B94C(u16 a0)
+bool32 MEventHandleReceivedWonderCard(u16 a0)
{
gUnknown_02022C70 = FALSE;
if (a0 == 0)
@@ -569,7 +569,7 @@ bool32 sub_801B94C(u16 a0)
return TRUE;
}
-void sub_801B990(u32 a0, u32 a1)
+void RecordIdOfWonderCardSenderByEventType(u32 a0, u32 a1)
{
if (gUnknown_02022C70)
{
diff --git a/src/mevent_801BAAC.c b/src/mevent_801BAAC.c
index 8596b43cd..847449c45 100644
--- a/src/mevent_801BAAC.c
+++ b/src/mevent_801BAAC.c
@@ -200,15 +200,15 @@ s32 FadeToWonderCardMenu(void)
CopyBgTilemapBufferToVram(0);
CopyBgTilemapBufferToVram(1);
CopyBgTilemapBufferToVram(2);
- decompress_and_copy_tile_data_to_vram(2, sWonderCardData->unk_0170->tiles, 0, 0x008, 0);
+ DecompressAndCopyTileDataToVram(2, sWonderCardData->unk_0170->tiles, 0, 0x008, 0);
sWonderCardData->unk_0176[0] = AddWindow(&gUnknown_082F0E1C[0]);
sWonderCardData->unk_0176[1] = AddWindow(&gUnknown_082F0E1C[1]);
sWonderCardData->unk_0176[2] = AddWindow(&gUnknown_082F0E1C[2]);
break;
case 3:
- if (free_temp_tile_data_buffers_if_possible())
+ if (FreeTempTileDataBuffersIfPossible())
return 0;
- LoadPalette(stdpal_get(1), 0x20, 0x20);
+ LoadPalette(GetTextWindowPalette(1), 0x20, 0x20);
gPaletteFade.bufferTransferDisabled = TRUE;
LoadPalette(sWonderCardData->unk_0170->pal, 0x10, 0x20);
LZ77UnCompWram(sWonderCardData->unk_0170->map, sWonderCardData->buffer_045C);
@@ -600,14 +600,14 @@ s32 FadeToWonderNewsMenu(void)
CopyBgTilemapBufferToVram(1);
CopyBgTilemapBufferToVram(2);
CopyBgTilemapBufferToVram(3);
- decompress_and_copy_tile_data_to_vram(3, sWonderNewsData->unk_01BC->tiles, 0, 8, 0);
+ DecompressAndCopyTileDataToVram(3, sWonderNewsData->unk_01BC->tiles, 0, 8, 0);
sWonderNewsData->unk_01C8[0] = AddWindow(&gUnknown_082F1DE8[0]);
sWonderNewsData->unk_01C8[1] = AddWindow(&gUnknown_082F1DE8[1]);
break;
case 3:
- if (free_temp_tile_data_buffers_if_possible())
+ if (FreeTempTileDataBuffersIfPossible())
return 0;
- LoadPalette(stdpal_get(1), 0x20, 0x20);
+ LoadPalette(GetTextWindowPalette(1), 0x20, 0x20);
gPaletteFade.bufferTransferDisabled = TRUE;
LoadPalette(sWonderNewsData->unk_01BC->pal, 0x10, 0x20);
LZ77UnCompWram(sWonderNewsData->unk_01BC->map, sWonderNewsData->buffer_03A4);
diff --git a/src/minigame_countdown.c b/src/minigame_countdown.c
index be1c42e29..cd5710d44 100644
--- a/src/minigame_countdown.c
+++ b/src/minigame_countdown.c
@@ -227,7 +227,7 @@ static void sub_802E938(struct Sprite *sprite)
sprite->invisible = FALSE;
case 1:
case 2:
- PlaySE(SE_KON);
+ PlaySE(SE_BALL_BOUNCE_1);
StartSpriteAnim(sprite, sprite->data[2]);
break;
case 3:
@@ -249,7 +249,7 @@ static void sub_802E938(struct Sprite *sprite)
static void sub_802EA50(u8 taskId)
{
s16 *data = gTasks[taskId].data;
- PlaySE(SE_KON);
+ PlaySE(SE_BALL_BOUNCE_1);
gSprites[data[13]].callback = sub_802E938;
gSprites[data[13]].invisible = FALSE;
gTasks[taskId].data[0] = 3;
@@ -262,15 +262,15 @@ static void sub_802EAB0(u8 taskId)
if (gReceivedRemoteLinkPlayers != 0)
{
- if (gRecvCmds[0][1] == 0x7FFF)
+ if (gRecvCmds[0][1] == LINKCMD_0x7FFF)
data[11] = gRecvCmds[0][2];
if (GetMultiplayerId() == 0)
{
data[12]++;
memset(packet, 0, sizeof(packet));
- packet[0] = 0x7FFF;
+ packet[0] = LINKCMD_0x7FFF;
packet[1] = data[12];
- sub_800FE50(packet);
+ Rfu_SendPacket(packet);
}
}
else
@@ -350,7 +350,7 @@ static bool32 RunMinigameCountdownDigitsAnim(u8 spriteId)
// fallthrough
case 1:
if (sprite->data[2] == 0)
- PlaySE(SE_KON2);
+ PlaySE(SE_BALL_BOUNCE_2);
if (++sprite->data[2] >= 20)
{
sprite->data[2] = 0;
@@ -443,7 +443,7 @@ static void SpriteCB_Start(struct Sprite *sprite)
sprite->pos2.y = data[5] >> 4;
if (sprite->pos2.y >= 0)
{
- PlaySE(SE_KON2);
+ PlaySE(SE_BALL_BOUNCE_2);
sprite->pos2.y = 0;
data[0]++;
}
@@ -452,7 +452,7 @@ static void SpriteCB_Start(struct Sprite *sprite)
data[1] += 12;
if (data[1] >= 128)
{
- PlaySE(SE_KON2);
+ PlaySE(SE_BALL_BOUNCE_2);
data[1] = 0;
data[0]++;
}
@@ -463,7 +463,7 @@ static void SpriteCB_Start(struct Sprite *sprite)
data[1] += 16;
if (data[1] >= 128)
{
- PlaySE(SE_KON2);
+ PlaySE(SE_BALL_BOUNCE_2);
data[1] = 0;
data[0]++;
}
diff --git a/src/mirage_tower.c b/src/mirage_tower.c
index 2a6d6d6c4..c980d76df 100644
--- a/src/mirage_tower.c
+++ b/src/mirage_tower.c
@@ -8,13 +8,12 @@
#include "gpu_regs.h"
#include "menu.h"
#include "random.h"
-#include "roulette_util.h"
+#include "palette_util.h"
#include "script.h"
#include "sound.h"
#include "sprite.h"
#include "task.h"
#include "window.h"
-#include "constants/flags.h"
#include "constants/maps.h"
#include "constants/rgb.h"
#include "constants/songs.h"
@@ -110,24 +109,24 @@ const struct SpriteSheet gMirageTowerCeilingCrumbleSpriteSheets[] =
static const struct MetatileCoords sInvisibleMirageTowerMetatiles[] =
{
- {18, 53, METATILE_ID(Mauville, DeepSand_Center)},
- {19, 53, METATILE_ID(Mauville, DeepSand_Center)},
- {20, 53, METATILE_ID(Mauville, DeepSand_Center)},
- {18, 54, METATILE_ID(Mauville, DeepSand_Center)},
- {19, 54, METATILE_ID(Mauville, DeepSand_Center)},
- {20, 54, METATILE_ID(Mauville, DeepSand_Center)},
- {18, 55, METATILE_ID(Mauville, DeepSand_Center)},
- {19, 55, METATILE_ID(Mauville, DeepSand_Center)},
- {20, 55, METATILE_ID(Mauville, DeepSand_Center)},
- {18, 56, METATILE_ID(Mauville, DeepSand_Center)},
- {19, 56, METATILE_ID(Mauville, DeepSand_Center)},
- {20, 56, METATILE_ID(Mauville, DeepSand_Center)},
- {18, 57, METATILE_ID(Mauville, DeepSand_BottomMid)},
- {19, 57, METATILE_ID(Mauville, DeepSand_BottomMid)},
- {20, 57, METATILE_ID(Mauville, DeepSand_BottomMid)},
- {18, 58, METATILE_ID(General, SandPit_Center)},
- {19, 58, METATILE_ID(General, SandPit_Center)},
- {20, 58, METATILE_ID(General, SandPit_Center)},
+ {18, 53, METATILE_Mauville_DeepSand_Center},
+ {19, 53, METATILE_Mauville_DeepSand_Center},
+ {20, 53, METATILE_Mauville_DeepSand_Center},
+ {18, 54, METATILE_Mauville_DeepSand_Center},
+ {19, 54, METATILE_Mauville_DeepSand_Center},
+ {20, 54, METATILE_Mauville_DeepSand_Center},
+ {18, 55, METATILE_Mauville_DeepSand_Center},
+ {19, 55, METATILE_Mauville_DeepSand_Center},
+ {20, 55, METATILE_Mauville_DeepSand_Center},
+ {18, 56, METATILE_Mauville_DeepSand_Center},
+ {19, 56, METATILE_Mauville_DeepSand_Center},
+ {20, 56, METATILE_Mauville_DeepSand_Center},
+ {18, 57, METATILE_Mauville_DeepSand_BottomMid},
+ {19, 57, METATILE_Mauville_DeepSand_BottomMid},
+ {20, 57, METATILE_Mauville_DeepSand_BottomMid},
+ {18, 58, METATILE_General_SandPit_Center},
+ {19, 58, METATILE_General_SandPit_Center},
+ {20, 58, METATILE_General_SandPit_Center},
};
static const union AnimCmd gSpriteAnim_8617DEC[] =
@@ -169,7 +168,7 @@ const struct PulseBlendSettings gMirageTowerPulseBlendSettings = {
.numColors = 15,
.delay = 5,
.numFadeCycles = -1,
- .maxBlendCoeff = 11,
+ .maxBlendCoeff = -5,
.fadeType = 1,
.restorePaletteOnUnload = FALSE,
.unk7_7 = 1,
@@ -371,7 +370,7 @@ static void StartScreenShake(u8 yShakeOffset, u8 xShakeOffset, u8 numShakes, u8
gTasks[taskId].data[3] = shakeDelay;
gTasks[taskId].data[4] = yShakeOffset;
SetCameraPanningCallback(NULL);
- PlaySE(SE_W070);
+ PlaySE(SE_M_STRENGTH);
}
static void DoScreenShake(u8 taskId)
@@ -413,10 +412,9 @@ void DoMirageTowerCeilingCrumble(void)
static void WaitCeilingCrumble(u8 taskId)
{
- u16 *data = gTasks[taskId].data;
- data[1]++;
+ u16 *data = (u16 *)gTasks[taskId].data;
// Either wait 1000 frames, or until all 16 crumble sprites and the one screen-shake task are completed.
- if (data[1] == 1000 || data[0] == 17)
+ if (++data[1] == 1000 || data[0] == 17)
gTasks[taskId].func = FinishCeilingCrumbleTask;
}
@@ -692,7 +690,7 @@ static void DoFossilFallAndSink(u8 taskId)
if (gSprites[sUnknown_0203CF0C->spriteId].callback != SpriteCallbackDummy)
return;
DestroySprite(&gSprites[sUnknown_0203CF0C->spriteId]);
- FREE_AND_SET_NULL(sUnknown_0203CF0C->unkC);;
+ FREE_AND_SET_NULL(sUnknown_0203CF0C->unkC);
FREE_AND_SET_NULL(sUnknown_0203CF0C->frameImage);
FREE_AND_SET_NULL(sUnknown_0203CF0C->frameImageTiles);
FREE_AND_SET_NULL(sUnknown_0203CF0C);
@@ -764,8 +762,8 @@ static void sub_81BF2B8(u8* a, u16 b, u8 c, u8 d, u8 e)
NAKED
static void sub_81BF2B8(u8* a, u16 b, u8 c, u8 d, u8 e)
{
- asm_unified("\n\
- push {r4-r7,lr}\n\
+ asm_unified(
+ "push {r4-r7,lr}\n\
mov r7, r10\n\
mov r6, r9\n\
mov r5, r8\n\
@@ -863,7 +861,6 @@ static void sub_81BF2B8(u8* a, u16 b, u8 c, u8 d, u8 e)
pop {r4-r7}\n\
pop {r0}\n\
bx r0\n\
- .pool\n\
- ");
+ .pool");
}
#endif // NONMATCHING
diff --git a/src/move_relearner.c b/src/move_relearner.c
index cbeb3a1df..3e7caf133 100644
--- a/src/move_relearner.c
+++ b/src/move_relearner.c
@@ -150,20 +150,22 @@
#define JAM_HEART_EMPTY 2
#define JAM_HEART_FULL 3
+#define MAX_RELEARNER_MOVES (MAX_LEVEL_UP_MOVES > 25 ? MAX_LEVEL_UP_MOVES : 25)
+
static EWRAM_DATA struct
{
u8 state;
- u8 heartSpriteIds[16]; /*0x001*/
- u16 movesToLearn[25]; /*0x01A*/
- u8 partyMon; /*0x044*/
- u8 moveSlot; /*0x045*/
- struct ListMenuItem menuItems[25]; /*0x0E8*/
- u8 numMenuChoices; /*0x110*/
- u8 numToShowAtOnce; /*0x111*/
- u8 moveListMenuTask; /*0x112*/
- u8 moveListScrollArrowTask; /*0x113*/
- u8 moveDisplayArrowTask; /*0x114*/
- u16 scrollOffset; /*0x116*/
+ u8 heartSpriteIds[16]; /*0x001*/
+ u16 movesToLearn[MAX_RELEARNER_MOVES]; /*0x01A*/
+ u8 partyMon; /*0x044*/
+ u8 moveSlot; /*0x045*/
+ struct ListMenuItem menuItems[MAX_RELEARNER_MOVES]; /*0x0E8*/
+ u8 numMenuChoices; /*0x110*/
+ u8 numToShowAtOnce; /*0x111*/
+ u8 moveListMenuTask; /*0x112*/
+ u8 moveListScrollArrowTask; /*0x113*/
+ u8 moveDisplayArrowTask; /*0x114*/
+ u16 scrollOffset; /*0x116*/
} *sMoveRelearnerStruct = {0};
static EWRAM_DATA struct {
@@ -384,7 +386,7 @@ static void CB2_InitLearnMove(void)
ResetSpriteData();
FreeAllSpritePalettes();
ResetTasks();
- clear_scheduled_bg_copies_to_vram();
+ ClearScheduledBgCopiesToVram();
sMoveRelearnerStruct = AllocZeroed(sizeof(*sMoveRelearnerStruct));
sMoveRelearnerStruct->partyMon = gSpecialVar_0x8004;
SetVBlankCallback(VBlankCB_MoveRelearner);
@@ -412,7 +414,7 @@ static void CB2_InitLearnMoveReturnFromSelectMove(void)
ResetSpriteData();
FreeAllSpritePalettes();
ResetTasks();
- clear_scheduled_bg_copies_to_vram();
+ ClearScheduledBgCopiesToVram();
sMoveRelearnerStruct = AllocZeroed(sizeof(*sMoveRelearnerStruct));
sMoveRelearnerStruct->state = MENU_STATE_FADE_FROM_SUMMARY_SCREEN;
sMoveRelearnerStruct->partyMon = gSpecialVar_0x8004;
@@ -452,7 +454,7 @@ static void CB2_MoveRelearnerMain(void)
RunTasks();
AnimateSprites();
BuildOamBuffer();
- do_scheduled_bg_tilemap_copies_to_vram();
+ DoScheduledBgTilemapCopiesToVram();
UpdatePaletteFade();
}
@@ -713,13 +715,13 @@ static void DoMoveRelearnerMain(void)
{
FormatAndPrintText(gText_MoveRelearnerPkmnForgotMoveAndLearnedNew);
sMoveRelearnerStruct->state = MENU_STATE_PRINT_TEXT_THEN_FANFARE;
- PlayFanfare(MUS_FANFA1);
+ PlayFanfare(MUS_LEVEL_UP);
}
break;
case MENU_STATE_PRINT_TEXT_THEN_FANFARE:
if (!MoveRelearnerRunTextPrinters())
{
- PlayFanfare(MUS_FANFA1);
+ PlayFanfare(MUS_LEVEL_UP);
sMoveRelearnerStruct->state = MENU_STATE_WAIT_FOR_FANFARE;
}
break;
@@ -796,7 +798,7 @@ static void HandleInput(bool8 showContest)
sMoveRelearnerMenuSate.showContestInfo = FALSE;
}
- schedule_bg_copy_tilemap_to_vram(1);
+ ScheduleBgCopyTilemapToVram(1);
MoveRelearnerShowHideHearts(GetCurrentSelectedMove());
break;
case LIST_CANCEL:
diff --git a/src/mystery_event_menu.c b/src/mystery_event_menu.c
index 14c00fd96..032cc3340 100644
--- a/src/mystery_event_menu.c
+++ b/src/mystery_event_menu.c
@@ -152,7 +152,7 @@ static void CB2_MysteryEventMenu(void)
if (!IsTextPrinterActive(0))
{
gMain.state++;
- gLinkType = LINKTYPE_0x5501;
+ gLinkType = LINKTYPE_MYSTERY_EVENT;
OpenLink();
}
break;
@@ -206,9 +206,9 @@ static void CB2_MysteryEventMenu(void)
{
if (gReceivedRemoteLinkPlayers != 0)
{
- if (GetLinkPlayerDataExchangeStatusTimed(2, 2) == 3)
+ if (GetLinkPlayerDataExchangeStatusTimed(2, 2) == EXCHANGE_DIFF_SELECTIONS)
{
- sub_800AC34();
+ SetCloseLinkCallback();
GetEventLoadMessage(gStringVar4, 1);
PrintMysteryMenuText(0, gStringVar4, 1, 2, 1);
gMain.state = 13;
@@ -249,7 +249,7 @@ static void CB2_MysteryEventMenu(void)
gMain.state++;
break;
case 10:
- sub_800AC34();
+ SetCloseLinkCallback();
gMain.state++;
break;
case 11:
diff --git a/src/mystery_gift.c b/src/mystery_gift.c
index 06427d2dd..ca5ab1baf 100644
--- a/src/mystery_gift.c
+++ b/src/mystery_gift.c
@@ -30,6 +30,7 @@
#include "link_rfu.h"
#include "mevent_news.h"
#include "mevent_server.h"
+#include "constants/cable_club.h"
void bgid_upload_textbox_1(u8 bgId);
void task_add_00_mystery_gift(void);
@@ -409,7 +410,7 @@ bool32 HandleMysteryGiftOrEReaderSetup(s32 mg_or_ereader)
break;
case 1:
LoadPalette(gUnkTextboxBorderPal, 0, 0x20);
- LoadPalette(stdpal_get(2), 0xd0, 0x20);
+ LoadPalette(GetTextWindowPalette(2), 0xd0, 0x20);
Menu_LoadStdPalAt(0xC0);
LoadUserWindowBorderGfx(0, 0xA, 0xE0);
LoadUserWindowBorderGfx_(0, 0x1, 0xF0);
@@ -430,7 +431,7 @@ bool32 HandleMysteryGiftOrEReaderSetup(s32 mg_or_ereader)
case 3:
ShowBg(0);
ShowBg(3);
- PlayBGM(MUS_RG_OKURIMONO);
+ PlayBGM(MUS_RG_MYSTERY_GIFT);
SetVBlankCallback(vblankcb_mystery_gift_e_reader_run);
EnableInterrupts(INTR_FLAG_VBLANK | INTR_FLAG_VCOUNT | INTR_FLAG_TIMER3 | INTR_FLAG_SERIAL);
return TRUE;
@@ -1022,7 +1023,7 @@ static bool32 PrintMGSuccessMessage(u8 * state, const u8 * arg1, u16 * arg2)
{
AddTextPrinterToWindow1(arg1);
}
- PlayFanfare(MUS_FANFA4);
+ PlayFanfare(MUS_OBTAIN_ITEM);
*arg2 = 0;
(*state)++;
break;
@@ -1242,21 +1243,21 @@ void task00_mystery_gift(u8 taskId)
case 0:
if (data->source == 1)
{
- MEvent_CreateTask_CardOrNewsWithFriend(0x15);
+ MEvent_CreateTask_CardOrNewsWithFriend(ACTIVITY_WONDER_CARD2);
}
else if (data->source == 0)
{
- MEvent_CreateTask_CardOrNewsOverWireless(0x15);
+ MEvent_CreateTask_CardOrNewsOverWireless(ACTIVITY_WONDER_CARD2);
}
break;
case 1:
if (data->source == 1)
{
- MEvent_CreateTask_CardOrNewsWithFriend(0x16);
+ MEvent_CreateTask_CardOrNewsWithFriend(ACTIVITY_WONDER_NEWS2);
}
else if (data->source == 0)
{
- MEvent_CreateTask_CardOrNewsOverWireless(0x16);
+ MEvent_CreateTask_CardOrNewsOverWireless(ACTIVITY_WONDER_NEWS2);
}
break;
}
@@ -1269,7 +1270,7 @@ void task00_mystery_gift(u8 taskId)
data->state = 7;
mevent_client_do_init(data->IsCardOrNews);
}
- else if (gSpecialVar_Result == 5)
+ else if (gSpecialVar_Result == LINKUP_FAILED)
{
ClearScreenInBg0(TRUE);
data->state = 3;
@@ -1283,7 +1284,7 @@ void task00_mystery_gift(u8 taskId)
switch (mevent_client_do_exec(&data->curPromptWindowId))
{
case 6:
- task_add_05_task_del_08FA224_when_no_RfuFunc();
+ Rfu_SetCloseLinkCallback();
data->prevPromptWindowId = data->curPromptWindowId;
data->state = 13;
break;
@@ -1599,10 +1600,10 @@ void task00_mystery_gift(u8 taskId)
switch (data->IsCardOrNews)
{
case 0:
- MEvent_CreateTask_Leader(21);
+ MEvent_CreateTask_Leader(ACTIVITY_WONDER_CARD2);
break;
case 1:
- MEvent_CreateTask_Leader(22);
+ MEvent_CreateTask_Leader(ACTIVITY_WONDER_NEWS2);
break;
}
data->source = 1;
@@ -1615,7 +1616,7 @@ void task00_mystery_gift(u8 taskId)
ClearScreenInBg0(1);
data->state = 31;
}
- else if (gSpecialVar_Result == 5)
+ else if (gSpecialVar_Result == LINKUP_FAILED)
{
ClearScreenInBg0(1);
data->state = 18;
@@ -1646,7 +1647,7 @@ void task00_mystery_gift(u8 taskId)
}
break;
case 33:
- task_add_05_task_del_08FA224_when_no_RfuFunc();
+ Rfu_SetCloseLinkCallback();
StringCopy(gStringVar1, gLinkPlayers[1].name);
data->state = 34;
break;
diff --git a/src/naming_screen.c b/src/naming_screen.c
index 161d4a7e0..be921078e 100644
--- a/src/naming_screen.c
+++ b/src/naming_screen.c
@@ -13,7 +13,6 @@
#include "field_player_avatar.h"
#include "event_object_movement.h"
#include "event_data.h"
-#include "constants/vars.h"
#include "constants/songs.h"
#include "pokemon_storage_system.h"
#include "graphics.h"
@@ -29,7 +28,157 @@
#include "constants/event_objects.h"
#include "constants/rgb.h"
-EWRAM_DATA static struct NamingScreenData *gNamingScreenData = NULL;
+enum {
+ INPUT_NONE,
+ INPUT_DPAD_UP,
+ INPUT_DPAD_DOWN,
+ INPUT_DPAD_LEFT,
+ INPUT_DPAD_RIGHT,
+ INPUT_A_BUTTON,
+ INPUT_B_BUTTON,
+ INPUT_LR_BUTTON,
+ INPUT_SELECT,
+ INPUT_START,
+};
+
+#define KBROW_COUNT 4
+#define KBCOL_COUNT 8
+
+enum {
+ GFXTAG_BACK_BUTTON,
+ GFXTAG_OK_BUTTON,
+ GFXTAG_PAGE_SWAP_FRAME,
+ GFXTAG_PAGE_SWAP_BUTTON,
+ GFXTAG_PAGE_SWAP_UPPER,
+ GFXTAG_PAGE_SWAP_LOWER,
+ GFXTAG_PAGE_SWAP_OTHERS,
+ GFXTAG_CURSOR,
+ GFXTAG_CURSOR_SQUISHED,
+ GFXTAG_CURSOR_FILLED,
+ GFXTAG_INPUT_ARROW,
+ GFXTAG_UNDERSCORE,
+};
+
+enum {
+ PALTAG_PC_ICON,
+ PALTAG_PAGE_SWAP_UPPER,
+ PALTAG_PAGE_SWAP_LOWER,
+ PALTAG_PAGE_SWAP_OTHERS,
+ PALTAG_PAGE_SWAP,
+ PALTAG_CURSOR,
+ PALTAG_BACK_BUTTON,
+ PALTAG_OK_BUTTON,
+};
+
+enum {
+ WIN_KB_PAGE_1, // Which of these two windows is in front is cycled as the player swaps
+ WIN_KB_PAGE_2, // Initially WIN_KB_PAGE_1 is in front, with WIN_KB_PAGE_2 on deck
+ WIN_TEXT_ENTRY,
+ WIN_TEXT_ENTRY_BOX,
+ WIN_BANNER,
+ WIN_COUNT,
+};
+
+// The constants for the pages are needlessly complicated because GF didn't keep the indexing order consistent
+// This set is used for sNamingScreen->currentPage. It uses the order that the pages are cycled in
+enum {
+ KBPAGE_SYMBOLS,
+ KBPAGE_LETTERS_UPPER,
+ KBPAGE_LETTERS_LOWER,
+ KBPAGE_COUNT,
+};
+
+// This set is used for initializing a page's keyboard text and getting its number of columns
+enum {
+ KEYBOARD_LETTERS_LOWER,
+ KEYBOARD_LETTERS_UPPER,
+ KEYBOARD_SYMBOLS,
+};
+
+// This set is used for getting the gfx/pal tags of the page's swap button
+enum {
+ PAGE_SWAP_UPPER,
+ PAGE_SWAP_OTHERS,
+ PAGE_SWAP_LOWER,
+};
+
+enum {
+ KEY_ROLE_CHAR,
+ KEY_ROLE_PAGE,
+ KEY_ROLE_BACKSPACE,
+ KEY_ROLE_OK,
+};
+
+enum {
+ BUTTON_PAGE,
+ BUTTON_BACK,
+ BUTTON_OK,
+ BUTTON_COUNT,
+};
+
+// states for Task_NamingScreen
+enum {
+ STATE_FADE_IN,
+ STATE_WAIT_FADE_IN,
+ STATE_HANDLE_INPUT,
+ STATE_MOVE_TO_OK_BUTTON,
+ STATE_START_PAGE_SWAP,
+ STATE_WAIT_PAGE_SWAP,
+ STATE_PRESSED_OK,
+ STATE_WAIT_SENT_TO_PC_MESSAGE,
+ STATE_FADE_OUT,
+ STATE_EXIT,
+};
+
+// sates for Task_HandleInput
+enum
+{
+ INPUT_STATE_DISABLED,
+ INPUT_STATE_ENABLED,
+ INPUT_STATE_OVERRIDE,
+};
+
+struct NamingScreenTemplate
+{
+ u8 copyExistingString;
+ u8 maxChars;
+ u8 iconFunction;
+ u8 addGenderIcon;
+ u8 initialPage;
+ u8 unused;
+ const u8 *title;
+};
+
+struct NamingScreenData
+{
+ u8 tilemapBuffer1[0x800];
+ u8 tilemapBuffer2[0x800];
+ u8 tilemapBuffer3[0x800];
+ u8 textBuffer[16];
+ u8 tileBuffer[0x600];
+ u8 state;
+ u8 windows[WIN_COUNT];
+ u16 inputCharBaseXPos;
+ u16 bg1vOffset;
+ u16 bg2vOffset;
+ u16 bg1Priority;
+ u16 bg2Priority;
+ u8 bgToReveal;
+ u8 bgToHide;
+ u8 currentPage;
+ u8 cursorSpriteId;
+ u8 swapBtnFrameSpriteId;
+ u8 keyRepeatStartDelayCopy;
+ const struct NamingScreenTemplate *template;
+ u8 templateNum;
+ u8 *destBuffer;
+ u16 monSpecies;
+ u16 monGender;
+ u32 monPersonality;
+ MainCallback returnCallback;
+};
+
+EWRAM_DATA static struct NamingScreenData *sNamingScreen = NULL;
extern u16 gKeyRepeatStartDelay;
// extern text
@@ -41,10 +190,10 @@ extern const u8 gText_TellHimTheWords[];
// start of .rodata
-static const u8 gSpriteImage_858BBF8[] = INCBIN_U8("graphics/naming_screen/pc_icon/0.4bpp");
-static const u8 gSpriteImage_858BCB8[] = INCBIN_U8("graphics/naming_screen/pc_icon/1.4bpp");
-static const u16 gUnknown_0858BD78[] = INCBIN_U16("graphics/naming_screen/0.gbapal");
-static const u16 gUnknown_0858BD98[] = INCBIN_U16("graphics/naming_screen/1.gbapal");
+static const u8 sPCIconOff_Gfx[] = INCBIN_U8("graphics/naming_screen/pc_icon/off.4bpp");
+static const u8 sPCIconOn_Gfx[] = INCBIN_U8("graphics/naming_screen/pc_icon/on.4bpp");
+static const u16 sKeyboard_Pal[] = INCBIN_U16("graphics/naming_screen/keyboard.gbapal");
+static const u16 sUnused_Pal[] = INCBIN_U16("graphics/naming_screen/unused.gbapal");
static const u8 *const sTransferredToPCMessages[] =
{
@@ -56,7 +205,7 @@ static const u8 *const sTransferredToPCMessages[] =
static const u8 sText_AlphabetUpperLower[] = _("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz!");
-static const struct BgTemplate gUnknown_0858BE00[] =
+static const struct BgTemplate sBgTemplates[] =
{
{
.bg = 0,
@@ -84,9 +233,9 @@ static const struct BgTemplate gUnknown_0858BE00[] =
}
};
-static const struct WindowTemplate gUnknown_0858BE10[] =
+static const struct WindowTemplate sWindowTemplates[WIN_COUNT + 1] =
{
- {
+ [WIN_KB_PAGE_1] = {
.bg = 1,
.tilemapLeft = 3,
.tilemapTop = 10,
@@ -95,7 +244,7 @@ static const struct WindowTemplate gUnknown_0858BE10[] =
.paletteNum = 10,
.baseBlock = 0x030
},
- {
+ [WIN_KB_PAGE_2] = {
.bg = 2,
.tilemapLeft = 3,
.tilemapTop = 10,
@@ -104,7 +253,7 @@ static const struct WindowTemplate gUnknown_0858BE10[] =
.paletteNum = 10,
.baseBlock = 0x0C8
},
- {
+ [WIN_TEXT_ENTRY] = {
.bg = 3,
.tilemapLeft = 8,
.tilemapTop = 6,
@@ -113,7 +262,7 @@ static const struct WindowTemplate gUnknown_0858BE10[] =
.paletteNum = 10,
.baseBlock = 0x030
},
- {
+ [WIN_TEXT_ENTRY_BOX] = {
.bg = 3,
.tilemapLeft = 8,
.tilemapTop = 4,
@@ -122,7 +271,7 @@ static const struct WindowTemplate gUnknown_0858BE10[] =
.paletteNum = 10,
.baseBlock = 0x052
},
- {
+ [WIN_BANNER] = {
.bg = 0,
.tilemapLeft = 0,
.tilemapTop = 0,
@@ -134,124 +283,146 @@ static const struct WindowTemplate gUnknown_0858BE10[] =
DUMMY_WIN_TEMPLATE
};
-static const u8 gUnknown_0858BE40[] = __("abcdef .ghijkl ,mnopqrs tuvwxyz ABCDEF .GHIJKL ,MNOPQRS TUVWXYZ 01234 56789 !?♂♀/- …“”‘' ");
-
-static const u8 gUnknown_0858BEA0[] = { 8, 8, 6 };
-static const u8 gUnknown_0858BEA3[] = { 0, 12, 24, 56, 68, 80, 92, 123, 0, 12, 24, 56, 68, 80, 92, 123, 0, 22, 44, 66, 88, 110, 0, 0 };
+// This handles what characters get inserted when a key is pressed
+// The keys shown on the keyboard are handled separately by sNamingScreenKeyboardText
+static const u8 sKeyboardChars[KBPAGE_COUNT * KBROW_COUNT * KBCOL_COUNT] = __(
+ "abcdef ."
+ "ghijkl ,"
+ "mnopqrs "
+ "tuvwxyz "
+ "ABCDEF ."
+ "GHIJKL ,"
+ "MNOPQRS "
+ "TUVWXYZ "
+ "01234 "
+ "56789 "
+ "!?♂♀/- "
+ "…“”‘' ");
+
+static const u8 sPageColumnCounts[KBPAGE_COUNT] = {
+ [KEYBOARD_LETTERS_LOWER] = KBCOL_COUNT,
+ [KEYBOARD_LETTERS_UPPER] = KBCOL_COUNT,
+ [KEYBOARD_SYMBOLS] = 6
+};
+static const u8 sPageColumnXPos[KBPAGE_COUNT * KBCOL_COUNT] = {
+ 0, 12, 24, 56, 68, 80, 92, 123, // KEYBOARD_LETTERS_LOWER
+ 0, 12, 24, 56, 68, 80, 92, 123, // KEYBOARD_LETTERS_UPPER
+ 0, 22, 44, 66, 88, 110 // KEYBOARD_SYMBOLS
+};
// forward declarations
static const struct NamingScreenTemplate *const sNamingScreenTemplates[];
-static const struct SubspriteTable gUnknown_0858C050[];
-static const struct SubspriteTable gUnknown_0858C058[];
-static const struct SubspriteTable gUnknown_0858C070[];
-static const struct SubspriteTable gUnknown_0858C078[];
-static const struct SpriteTemplate gUnknown_0858C0C0;
-static const struct SpriteTemplate gUnknown_0858C0D8;
-static const struct SpriteTemplate gUnknown_0858C0F0;
-static const struct SpriteTemplate gUnknown_0858C108;
-static const struct SpriteTemplate gUnknown_0858C120;
-static const struct SpriteTemplate gUnknown_0858C138;
+static const struct SubspriteTable sSubspriteTable_PageSwapFrame[];
+static const struct SubspriteTable sSubspriteTable_PageSwapText[];
+static const struct SubspriteTable sSubspriteTable_Button[];
+static const struct SubspriteTable sSubspriteTable_PCIcon[];
+static const struct SpriteTemplate sSpriteTemplate_PageSwapFrame;
+static const struct SpriteTemplate sSpriteTemplate_PageSwapButton;
+static const struct SpriteTemplate sSpriteTemplate_PageSwapText;
+static const struct SpriteTemplate sSpriteTemplate_BackButton;
+static const struct SpriteTemplate sSpriteTemplate_OkButton;
+static const struct SpriteTemplate sSpriteTemplate_Cursor;
static const struct SpriteTemplate sSpriteTemplate_InputArrow;
static const struct SpriteTemplate sSpriteTemplate_Underscore;
-static const struct SpriteTemplate gUnknown_0858C180;
+static const struct SpriteTemplate sSpriteTemplate_PCIcon;
static const u8* const sNamingScreenKeyboardText[KBPAGE_COUNT][KBROW_COUNT];
-static const struct SpriteSheet gUnknown_0858C1C8[];
-static const struct SpritePalette gUnknown_0858C230[];
+static const struct SpriteSheet sSpriteSheets[];
+static const struct SpritePalette sSpritePalettes[];
-static void C2_NamingScreen(void);
+static void CB2_LoadNamingScreen(void);
static void NamingScreen_Init(void);
static void NamingScreen_InitBGs(void);
-static void sub_80E3194(void);
-static void sub_80E31B0(u8 taskId);
-static bool8 MainState_BeginFadeIn(void);
+static void CreateNamingScreenTask(void);
+static void Task_NamingScreen(u8 taskId);
+static bool8 MainState_FadeIn(void);
static bool8 MainState_WaitFadeIn(void);
static bool8 MainState_HandleInput(void);
static bool8 MainState_MoveToOKButton(void);
-static bool8 MainState_6(void);
-static bool8 MainState_BeginFadeInOut(void);
-static bool8 MainState_WaitFadeOutAndExit(void);
+static bool8 MainState_PressedOKButton(void);
+static bool8 MainState_FadeOut(void);
+static bool8 MainState_Exit(void);
static void DisplaySentToPCMessage(void);
-static bool8 sub_80E3604(void);
+static bool8 MainState_WaitSentToPCMessage(void);
static bool8 MainState_StartPageSwap(void);
static bool8 MainState_WaitPageSwap(void);
static void StartPageSwapAnim(void);
static void Task_HandlePageSwapAnim(u8);
static bool8 IsPageSwapAnimNotInProgress(void);
-static void sub_80E3948(u8, u8, u8);
-static void Task_80E39BC(u8);
-static u16 sub_80E3A74(u8);
-static void sub_80E3AE8(u8);
-static void sub_80E3B10(struct Task *, u8, u8);
-static void sub_80E3CC8(void);
-static void CursorInit(void);
+static void TryStartButtonFlash(u8, bool8, bool8);
+static void Task_UpdateButtonFlash(u8);
+static u16 GetButtonPalOffset(u8);
+static void RestoreButtonColor(u8);
+static void StartButtonFlash(struct Task *, u8, bool8);
+static void CreateSprites(void);
+static void CreateCursorSprite(void);
static void SetCursorPos(s16, s16);
static void GetCursorPos(s16 *x, s16 *y);
static void MoveCursorToOKButton(void);
-static void sub_80E3E3C(u8);
-static void sub_80E3E94(u8);
+static void SetCursorInvisibility(u8);
+static void SetCursorFlashing(bool8);
static u8 IsCursorAnimFinished(void);
static u8 GetCurrentPageColumnCount(void);
-static void CreatePageSwitcherSprites(void);
-static void sub_80E4050(void);
-static void sub_80E41B8(u8, struct Sprite *, struct Sprite *);
+static void CreatePageSwapButtonSprites(void);
+static void StartPageSwapButtonAnim(void);
+static void SetPageSwapButtonGfx(u8, struct Sprite *, struct Sprite *);
static void CreateBackOkSprites(void);
-static void CreateUnderscoreSprites(void);
+static void CreateTextEntrySprites(void);
static void CreateInputTargetIcon(void);
static u8 HandleKeyboardEvent(void);
-static u8 sub_80E45E0(void);
+static u8 SwapKeyboardPage(void);
static u8 GetInputEvent(void);
static void SetInputState(u8);
-static void sub_80E4964(void);
-static u8 GetTextCaretPosition(void);
+static void DrawTextEntryBox(void);
+static u8 GetTextEntryPosition(void);
static void DeleteTextCharacter(void);
-static bool8 sub_80E4B54(void);
-static void AddTextCharacter(u8);
-static void sub_80E4BE4(void);
-static void choose_name_or_words_screen_load_bg_tile_patterns(void);
-static void sub_80E4CB8(void);
-static void choose_name_or_words_screen_apply_bg_pals(void);
-static void sub_80E4CF8(u8, const void *);
-static void nullsub_10(u8, u8);
-static void sub_80E4D10(void);
-static void sub_80E4DE4(u8, u8);
-static void sub_80E4E5C(void);
-static void sub_80E4EF0(void);
-static void sub_80E4F58(void);
-static void NamingScreen_TurnOffScreen(void);
-static void NamingScreen_InitDisplayMode(void);
+static bool8 AddTextCharacter(void);
+static void BufferCharacter(u8);
+static void SaveInputText(void);
+static void LoadGfx(void);
+static void CreateHelperTasks(void);
+static void LoadPalettes(void);
+static void DrawBgTilemap(u8, const void *);
+static void NamingScreen_Dummy(u8, u8);
+static void DrawTextEntry(void);
+static void PrintKeyboardKeys(u8, u8);
+static void DrawKeyboardPageOnDeck(void);
+static void PrintControls(void);
+static void CB2_NamingScreen(void);
+static void ResetVHBlank(void);
+static void SetVBlank(void);
static void VBlankCB_NamingScreen(void);
-static void sub_80E501C(void);
-static bool8 IsLetter(u8);
+static void NamingScreen_ShowBgs(void);
+static bool8 IsWideLetter(u8);
void DoNamingScreen(u8 templateNum, u8 *destBuffer, u16 monSpecies, u16 monGender, u32 monPersonality, MainCallback returnCallback)
{
- gNamingScreenData = Alloc(sizeof(struct NamingScreenData));
- if (!gNamingScreenData)
+ sNamingScreen = Alloc(sizeof(struct NamingScreenData));
+ if (!sNamingScreen)
{
SetMainCallback2(returnCallback);
}
else
{
- gNamingScreenData->templateNum = templateNum;
- gNamingScreenData->monSpecies = monSpecies;
- gNamingScreenData->monGender = monGender;
- gNamingScreenData->monPersonality = monPersonality;
- gNamingScreenData->destBuffer = destBuffer;
- gNamingScreenData->returnCallback = returnCallback;
+ sNamingScreen->templateNum = templateNum;
+ sNamingScreen->monSpecies = monSpecies;
+ sNamingScreen->monGender = monGender;
+ sNamingScreen->monPersonality = monPersonality;
+ sNamingScreen->destBuffer = destBuffer;
+ sNamingScreen->returnCallback = returnCallback;
- if (templateNum == 0)
+ if (templateNum == NAMING_SCREEN_PLAYER)
StartTimer1();
- SetMainCallback2(C2_NamingScreen);
+ SetMainCallback2(CB2_LoadNamingScreen);
}
}
-static void C2_NamingScreen(void)
+static void CB2_LoadNamingScreen(void)
{
switch (gMain.state)
{
case 0:
- NamingScreen_TurnOffScreen();
+ ResetVHBlank();
NamingScreen_Init();
gMain.state++;
break;
@@ -273,48 +444,48 @@ static void C2_NamingScreen(void)
gMain.state++;
break;
case 5:
- choose_name_or_words_screen_apply_bg_pals();
+ LoadPalettes();
gMain.state++;
break;
case 6:
- choose_name_or_words_screen_load_bg_tile_patterns();
+ LoadGfx();
gMain.state++;
break;
case 7:
- sub_80E3CC8();
+ CreateSprites();
UpdatePaletteFade();
- sub_80E501C();
+ NamingScreen_ShowBgs();
gMain.state++;
break;
default:
- sub_80E4CB8();
- sub_80E3194();
+ CreateHelperTasks();
+ CreateNamingScreenTask();
break;
}
}
static void NamingScreen_Init(void)
{
- gNamingScreenData->state = 0;
- gNamingScreenData->bg1vOffset = 0;
- gNamingScreenData->bg2vOffset = 0;
- gNamingScreenData->bg1Priority = BGCNT_PRIORITY(1);
- gNamingScreenData->bg2Priority = BGCNT_PRIORITY(2);
- gNamingScreenData->bgToReveal = 0;
- gNamingScreenData->bgToHide = 1;
- gNamingScreenData->template = sNamingScreenTemplates[gNamingScreenData->templateNum];
- gNamingScreenData->currentPage = gNamingScreenData->template->initialPage;
- gNamingScreenData->inputCharBaseXPos = (240 - gNamingScreenData->template->maxChars * 8) / 2 + 6;
- if (gNamingScreenData->templateNum == 4)
- gNamingScreenData->inputCharBaseXPos += 11;
- gNamingScreenData->keyRepeatStartDelayCopy = gKeyRepeatStartDelay;
- memset(gNamingScreenData->textBuffer, 0xFF, sizeof(gNamingScreenData->textBuffer));
- if (gNamingScreenData->template->copyExistingString != 0)
- StringCopy(gNamingScreenData->textBuffer, gNamingScreenData->destBuffer);
+ sNamingScreen->state = STATE_FADE_IN;
+ sNamingScreen->bg1vOffset = 0;
+ sNamingScreen->bg2vOffset = 0;
+ sNamingScreen->bg1Priority = BGCNT_PRIORITY(1);
+ sNamingScreen->bg2Priority = BGCNT_PRIORITY(2);
+ sNamingScreen->bgToReveal = 0;
+ sNamingScreen->bgToHide = 1;
+ sNamingScreen->template = sNamingScreenTemplates[sNamingScreen->templateNum];
+ sNamingScreen->currentPage = sNamingScreen->template->initialPage;
+ sNamingScreen->inputCharBaseXPos = (240 - sNamingScreen->template->maxChars * 8) / 2 + 6;
+ if (sNamingScreen->templateNum == NAMING_SCREEN_WALDA)
+ sNamingScreen->inputCharBaseXPos += 11;
+ sNamingScreen->keyRepeatStartDelayCopy = gKeyRepeatStartDelay;
+ memset(sNamingScreen->textBuffer, EOS, sizeof(sNamingScreen->textBuffer));
+ if (sNamingScreen->template->copyExistingString)
+ StringCopy(sNamingScreen->textBuffer, sNamingScreen->destBuffer);
gKeyRepeatStartDelay = 16;
}
-static void sub_80E2FA4(void)
+static void SetSpritesVisible(void)
{
u8 i;
for (i = 0; i < MAX_SPRITES; i++)
@@ -322,7 +493,7 @@ static void sub_80E2FA4(void)
if (gSprites[i].inUse)
gSprites[i].invisible = FALSE;
}
- sub_80E3E3C(0);
+ SetCursorInvisibility(FALSE);
}
static void NamingScreen_InitBGs(void)
@@ -335,7 +506,7 @@ static void NamingScreen_InitBGs(void)
SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_0);
ResetBgsAndClearDma3BusyFlags(0);
- InitBgsFromTemplates(0, gUnknown_0858BE00, 4);
+ InitBgsFromTemplates(0, sBgTemplates, ARRAY_COUNT(sBgTemplates));
ChangeBgX(0, 0, 0);
ChangeBgY(0, 0, 0);
@@ -347,125 +518,126 @@ static void NamingScreen_InitBGs(void)
ChangeBgY(3, 0, 0);
InitStandardTextBoxWindows();
- sub_8197200();
+ InitTextBoxGfxAndPrinters();
- for (i = 0; i < 5; i++)
- gNamingScreenData->windows[i] = AddWindow(&gUnknown_0858BE10[i]);
+ for (i = 0; i < WIN_COUNT; i++)
+ sNamingScreen->windows[i] = AddWindow(&sWindowTemplates[i]);
SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_OBJ_1D_MAP | DISPCNT_OBJ_ON);
SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_EFFECT_BLEND | BLDCNT_TGT2_BG1 | BLDCNT_TGT2_BG2);
- SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(0xC, 0x8));
+ SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(12, 8));
- SetBgTilemapBuffer(1, gNamingScreenData->tilemapBuffer1);
- SetBgTilemapBuffer(2, gNamingScreenData->tilemapBuffer2);
- SetBgTilemapBuffer(3, gNamingScreenData->tilemapBuffer3);
+ SetBgTilemapBuffer(1, sNamingScreen->tilemapBuffer1);
+ SetBgTilemapBuffer(2, sNamingScreen->tilemapBuffer2);
+ SetBgTilemapBuffer(3, sNamingScreen->tilemapBuffer3);
FillBgTilemapBufferRect_Palette0(1, 0, 0, 0, 0x20, 0x20);
FillBgTilemapBufferRect_Palette0(2, 0, 0, 0, 0x20, 0x20);
FillBgTilemapBufferRect_Palette0(3, 0, 0, 0, 0x20, 0x20);
}
-static void sub_80E3194(void)
+static void CreateNamingScreenTask(void)
{
- CreateTask(sub_80E31B0, 2);
- SetMainCallback2(sub_80E4F58);
+ CreateTask(Task_NamingScreen, 2);
+ SetMainCallback2(CB2_NamingScreen);
}
-static void sub_80E31B0(u8 taskId)
+static void Task_NamingScreen(u8 taskId)
{
- switch (gNamingScreenData->state)
+ switch (sNamingScreen->state)
{
- case 0:
- MainState_BeginFadeIn();
- sub_80E2FA4();
- NamingScreen_InitDisplayMode();
+ case STATE_FADE_IN:
+ MainState_FadeIn();
+ SetSpritesVisible();
+ SetVBlank();
break;
- case 1:
+ case STATE_WAIT_FADE_IN:
MainState_WaitFadeIn();
break;
- case 2:
+ case STATE_HANDLE_INPUT:
MainState_HandleInput();
break;
- case 3:
+ case STATE_MOVE_TO_OK_BUTTON:
MainState_MoveToOKButton();
MainState_HandleInput();
break;
- case 4:
+ case STATE_START_PAGE_SWAP:
MainState_StartPageSwap();
break;
- case 5:
+ case STATE_WAIT_PAGE_SWAP:
MainState_WaitPageSwap();
break;
- case 6:
- MainState_6();
+ case STATE_PRESSED_OK:
+ MainState_PressedOKButton();
break;
- case 7:
- sub_80E3604();
+ case STATE_WAIT_SENT_TO_PC_MESSAGE:
+ MainState_WaitSentToPCMessage();
break;
- case 8:
- MainState_BeginFadeInOut();
+ case STATE_FADE_OUT:
+ MainState_FadeOut();
break;
- case 9:
- MainState_WaitFadeOutAndExit();
+ case STATE_EXIT:
+ MainState_Exit();
break;
}
}
-static const u8 sPageOrderLowerFirst[] =
+// Which gfx/pal to load for the swap page button
+static const u8 sPageToNextGfxId[KBPAGE_COUNT] =
{
- KBPAGE_LETTERS_LOWER,
- KBPAGE_SYMBOLS,
- KBPAGE_LETTERS_UPPER
+ [KBPAGE_SYMBOLS] = PAGE_SWAP_UPPER,
+ [KBPAGE_LETTERS_UPPER] = PAGE_SWAP_LOWER,
+ [KBPAGE_LETTERS_LOWER] = PAGE_SWAP_OTHERS
};
-static const u8 sPageOrderUpperFirst[] =
+static const u8 sPageToNextKeyboardId[KBPAGE_COUNT] =
{
- KBPAGE_LETTERS_UPPER,
- KBPAGE_LETTERS_LOWER,
- KBPAGE_SYMBOLS
+ [KBPAGE_SYMBOLS] = KEYBOARD_LETTERS_UPPER,
+ [KBPAGE_LETTERS_UPPER] = KEYBOARD_LETTERS_LOWER,
+ [KBPAGE_LETTERS_LOWER] = KEYBOARD_SYMBOLS
};
-static const u8 sPageOrderSymbolsFirst[] =
+static const u8 sPageToKeyboardId[KBPAGE_COUNT] =
{
- KBPAGE_SYMBOLS,
- KBPAGE_LETTERS_UPPER,
- KBPAGE_LETTERS_LOWER
+ [KBPAGE_SYMBOLS] = KEYBOARD_SYMBOLS,
+ [KBPAGE_LETTERS_UPPER] = KEYBOARD_LETTERS_UPPER,
+ [KBPAGE_LETTERS_LOWER] = KEYBOARD_LETTERS_LOWER
};
-static u8 sub_80E3244(u8 a1)
+static u8 PageToNextGfxId(u8 page)
{
- return sPageOrderLowerFirst[a1];
+ return sPageToNextGfxId[page];
}
-static u8 sub_80E3254(void)
+static u8 CurrentPageToNextKeyboardId(void)
{
- return sPageOrderUpperFirst[gNamingScreenData->currentPage];
+ return sPageToNextKeyboardId[sNamingScreen->currentPage];
}
-static u8 sub_80E3274(void)
+static u8 CurrentPageToKeyboardId(void)
{
- return sPageOrderSymbolsFirst[gNamingScreenData->currentPage];
+ return sPageToKeyboardId[sNamingScreen->currentPage];
}
-static bool8 MainState_BeginFadeIn(void)
+static bool8 MainState_FadeIn(void)
{
- sub_80E4CF8(3, gUnknown_08DD4544);
- gNamingScreenData->currentPage = KBPAGE_LETTERS_UPPER;
- sub_80E4CF8(2, gUnknown_08DD46E0);
- sub_80E4CF8(1, gUnknown_08DD4620);
- sub_80E4DE4(gNamingScreenData->windows[1], KBPAGE_LETTERS_LOWER);
- sub_80E4DE4(gNamingScreenData->windows[0], KBPAGE_LETTERS_UPPER);
- nullsub_10(2, KBPAGE_LETTERS_LOWER);
- nullsub_10(1, KBPAGE_LETTERS_UPPER);
- sub_80E4D10();
- sub_80E4964();
- sub_80E4EF0();
+ DrawBgTilemap(3, gNamingScreenBackground_Tilemap);
+ sNamingScreen->currentPage = KBPAGE_LETTERS_UPPER;
+ DrawBgTilemap(2, gNamingScreenKeyboardLower_Tilemap);
+ DrawBgTilemap(1, gNamingScreenKeyboardUpper_Tilemap);
+ PrintKeyboardKeys(sNamingScreen->windows[WIN_KB_PAGE_2], KEYBOARD_LETTERS_LOWER);
+ PrintKeyboardKeys(sNamingScreen->windows[WIN_KB_PAGE_1], KEYBOARD_LETTERS_UPPER);
+ NamingScreen_Dummy(2, KEYBOARD_LETTERS_LOWER);
+ NamingScreen_Dummy(1, KEYBOARD_LETTERS_UPPER);
+ DrawTextEntry();
+ DrawTextEntryBox();
+ PrintControls();
CopyBgTilemapBufferToVram(1);
CopyBgTilemapBufferToVram(2);
CopyBgTilemapBufferToVram(3);
BlendPalettes(-1, 16, 0);
BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, RGB_BLACK);
- gNamingScreenData->state++;
+ sNamingScreen->state++;
return FALSE;
}
@@ -474,8 +646,8 @@ static bool8 MainState_WaitFadeIn(void)
if (!gPaletteFade.active)
{
SetInputState(INPUT_STATE_ENABLED);
- sub_80E3E94(1);
- gNamingScreenData->state++;
+ SetCursorFlashing(TRUE);
+ sNamingScreen->state++;
}
return FALSE;
}
@@ -491,48 +663,48 @@ static bool8 MainState_MoveToOKButton(void)
{
SetInputState(INPUT_STATE_ENABLED);
MoveCursorToOKButton();
- gNamingScreenData->state = MAIN_STATE_HANDLE_INPUT;
+ sNamingScreen->state = STATE_HANDLE_INPUT;
}
return FALSE;
}
-static bool8 MainState_6(void)
+static bool8 MainState_PressedOKButton(void)
{
- sub_80E4BE4();
+ SaveInputText();
SetInputState(INPUT_STATE_DISABLED);
- sub_80E3E94(0);
- sub_80E3948(3, 0, 1);
- if (gNamingScreenData->templateNum == NAMING_SCREEN_CAUGHT_MON &&
- CalculatePlayerPartyCount() >= 6)
+ SetCursorFlashing(FALSE);
+ TryStartButtonFlash(BUTTON_COUNT, FALSE, TRUE);
+ if (sNamingScreen->templateNum == NAMING_SCREEN_CAUGHT_MON
+ && CalculatePlayerPartyCount() >= PARTY_SIZE)
{
DisplaySentToPCMessage();
- gNamingScreenData->state = MAIN_STATE_UPDATE_SENT_TO_PC_MESSAGE;
+ sNamingScreen->state = STATE_WAIT_SENT_TO_PC_MESSAGE;
return FALSE;
}
else
{
- gNamingScreenData->state = MAIN_STATE_BEGIN_FADE_OUT;
- return TRUE; //Exit the naming screen
+ sNamingScreen->state = STATE_FADE_OUT;
+ return TRUE;
}
}
-static bool8 MainState_BeginFadeInOut(void)
+static bool8 MainState_FadeOut(void)
{
BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK);
- gNamingScreenData->state++;
+ sNamingScreen->state++;
return FALSE;
}
-static bool8 MainState_WaitFadeOutAndExit(void)
+static bool8 MainState_Exit(void)
{
if (!gPaletteFade.active)
{
- if (gNamingScreenData->templateNum == NAMING_SCREEN_PLAYER)
+ if (sNamingScreen->templateNum == NAMING_SCREEN_PLAYER)
SeedRngAndSetTrainerId();
- SetMainCallback2(gNamingScreenData->returnCallback);
- DestroyTask(FindTaskIdByFunc(sub_80E31B0));
+ SetMainCallback2(sNamingScreen->returnCallback);
+ DestroyTask(FindTaskIdByFunc(Task_NamingScreen));
FreeAllWindowBuffers();
- FREE_AND_SET_NULL(gNamingScreenData);
+ FREE_AND_SET_NULL(sNamingScreen);
}
return FALSE;
}
@@ -544,12 +716,12 @@ static void DisplaySentToPCMessage(void)
if (!IsDestinationBoxFull())
{
StringCopy(gStringVar1, GetBoxNamePtr(VarGet(VAR_PC_BOX_TO_SEND_MON)));
- StringCopy(gStringVar2, gNamingScreenData->destBuffer);
+ StringCopy(gStringVar2, sNamingScreen->destBuffer);
}
else
{
StringCopy(gStringVar1, GetBoxNamePtr(VarGet(VAR_PC_BOX_TO_SEND_MON)));
- StringCopy(gStringVar2, gNamingScreenData->destBuffer);
+ StringCopy(gStringVar2, sNamingScreen->destBuffer);
StringCopy(gStringVar3, GetBoxNamePtr(GetPCBoxToSendMon()));
stringToDisplay = 2;
}
@@ -564,12 +736,11 @@ static void DisplaySentToPCMessage(void)
CopyWindowToVram(0, 3);
}
-static bool8 sub_80E3604(void)
+static bool8 MainState_WaitSentToPCMessage(void)
{
RunTextPrinters();
-
- if (!IsTextPrinterActive(0) && (gMain.newKeys & A_BUTTON))
- gNamingScreenData->state = MAIN_STATE_BEGIN_FADE_OUT;
+ if (!IsTextPrinterActive(0) && JOY_NEW(A_BUTTON))
+ sNamingScreen->state = STATE_FADE_OUT;
return FALSE;
}
@@ -577,12 +748,12 @@ static bool8 sub_80E3604(void)
static bool8 MainState_StartPageSwap(void)
{
SetInputState(INPUT_STATE_DISABLED);
- sub_80E4050();
+ StartPageSwapButtonAnim();
StartPageSwapAnim();
- sub_80E3E3C(1);
- sub_80E3948(0, 0, 1);
+ SetCursorInvisibility(TRUE);
+ TryStartButtonFlash(BUTTON_PAGE, FALSE, TRUE);
PlaySE(SE_WIN_OPEN);
- gNamingScreenData->state = MAIN_STATE_WAIT_PAGE_SWAP;
+ sNamingScreen->state = STATE_WAIT_PAGE_SWAP;
return FALSE;
}
@@ -590,19 +761,19 @@ static bool8 MainState_WaitPageSwap(void)
{
s16 cursorX;
s16 cursorY;
- bool32 var3;
+ bool32 onLastColumn;
if (IsPageSwapAnimNotInProgress())
{
GetCursorPos(&cursorX, &cursorY);
- var3 = (cursorX == GetCurrentPageColumnCount());
+ onLastColumn = (cursorX == GetCurrentPageColumnCount());
- gNamingScreenData->state = MAIN_STATE_HANDLE_INPUT;
- gNamingScreenData->currentPage++;
- gNamingScreenData->currentPage %= 3;
+ sNamingScreen->state = STATE_HANDLE_INPUT;
+ sNamingScreen->currentPage++;
+ sNamingScreen->currentPage %= KBPAGE_COUNT;
- if (var3)
+ if (onLastColumn)
{
cursorX = GetCurrentPageColumnCount();
}
@@ -613,9 +784,9 @@ static bool8 MainState_WaitPageSwap(void)
}
SetCursorPos(cursorX, cursorY);
- sub_80E4E5C();
+ DrawKeyboardPageOnDeck();
SetInputState(INPUT_STATE_ENABLED);
- sub_80E3E3C(0);
+ SetCursorInvisibility(FALSE);
}
return FALSE;
}
@@ -663,29 +834,29 @@ static bool8 IsPageSwapAnimNotInProgress(void)
static bool8 PageSwapAnimState_Init(struct Task *task)
{
- gNamingScreenData->bg1vOffset = 0;
- gNamingScreenData->bg2vOffset = 0;
+ sNamingScreen->bg1vOffset = 0;
+ sNamingScreen->bg2vOffset = 0;
task->tState++;
return 0;
}
static bool8 PageSwapAnimState_1(struct Task *task)
{
- u16 *const arr[] =
+ u16 *const vOffsets[] =
{
- &gNamingScreenData->bg2vOffset,
- &gNamingScreenData->bg1vOffset
+ &sNamingScreen->bg2vOffset,
+ &sNamingScreen->bg1vOffset
};
task->tFrameCount += 4;
- *arr[gNamingScreenData->bgToReveal] = Sin(task->tFrameCount, 40);
- *arr[gNamingScreenData->bgToHide] = Sin((task->tFrameCount + 128) & 0xFF, 40);
+ *vOffsets[sNamingScreen->bgToReveal] = Sin(task->tFrameCount, 40);
+ *vOffsets[sNamingScreen->bgToHide] = Sin((task->tFrameCount + 128) & 0xFF, 40);
if (task->tFrameCount >= 64)
{
- u8 temp = gNamingScreenData->bg1Priority; //Why u8 and not u16?
+ u8 temp = sNamingScreen->bg1Priority; //Why u8 and not u16?
- gNamingScreenData->bg1Priority = gNamingScreenData->bg2Priority;
- gNamingScreenData->bg2Priority = temp;
+ sNamingScreen->bg1Priority = sNamingScreen->bg2Priority;
+ sNamingScreen->bg2Priority = temp;
task->tState++;
}
return 0;
@@ -693,21 +864,21 @@ static bool8 PageSwapAnimState_1(struct Task *task)
static bool8 PageSwapAnimState_2(struct Task *task)
{
- u16 *const arr[] =
+ u16 *const vOffsets[] =
{
- &gNamingScreenData->bg2vOffset,
- &gNamingScreenData->bg1vOffset
+ &sNamingScreen->bg2vOffset,
+ &sNamingScreen->bg1vOffset
};
task->tFrameCount += 4;
- *arr[gNamingScreenData->bgToReveal] = Sin(task->tFrameCount, 40);
- *arr[gNamingScreenData->bgToHide] = Sin((task->tFrameCount + 128) & 0xFF, 40);
+ *vOffsets[sNamingScreen->bgToReveal] = Sin(task->tFrameCount, 40);
+ *vOffsets[sNamingScreen->bgToHide] = Sin((task->tFrameCount + 128) & 0xFF, 40);
if (task->tFrameCount >= 128)
{
- u8 temp = gNamingScreenData->bgToReveal;
+ u8 temp = sNamingScreen->bgToReveal;
- gNamingScreenData->bgToReveal = gNamingScreenData->bgToHide;
- gNamingScreenData->bgToHide = temp;
+ sNamingScreen->bgToReveal = sNamingScreen->bgToHide;
+ sNamingScreen->bgToHide = temp;
task->tState++;
}
return 0;
@@ -726,221 +897,260 @@ static bool8 PageSwapAnimState_Done(struct Task *task)
//
//--------------------------------------------------
-static void sub_80E3920(void)
+#define tButtonId data[0]
+#define tKeepFlashing data[1]
+#define tAllowFlash data[2]
+#define tColor data[3]
+#define tColorIncr data[4]
+#define tColorDelay data[5]
+#define tColorDelta data[6]
+
+static void CreateButtonFlashTask(void)
{
u8 taskId;
- taskId = CreateTask(Task_80E39BC, 3);
- gTasks[taskId].data[0] = 3;
+ taskId = CreateTask(Task_UpdateButtonFlash, 3);
+ gTasks[taskId].tButtonId = BUTTON_COUNT;
}
-static void sub_80E3948(u8 a, u8 b, u8 c)
+static void TryStartButtonFlash(u8 button, bool8 keepFlashing, bool8 interruptCurFlash)
{
- struct Task *task = &gTasks[FindTaskIdByFunc(Task_80E39BC)];
+ struct Task *task = &gTasks[FindTaskIdByFunc(Task_UpdateButtonFlash)];
- if (a == task->data[0] && c == 0)
+ if (button == task->tButtonId && !interruptCurFlash)
{
- task->data[1] = b;
- task->data[2] = 1;
+ task->tKeepFlashing = keepFlashing;
+ task->tAllowFlash = TRUE;
return;
}
- if (a == 3 && task->data[1] == 0 && c == 0)
+ if (button == BUTTON_COUNT && !task->tKeepFlashing && !interruptCurFlash)
return;
- if (task->data[0] != 3)
- sub_80E3AE8(task->data[0]);
- sub_80E3B10(task, a, b);
+
+ if (task->tButtonId != BUTTON_COUNT)
+ RestoreButtonColor(task->tButtonId);
+
+ StartButtonFlash(task, button, keepFlashing);
}
-static void Task_80E39BC(u8 taskId)
+static void Task_UpdateButtonFlash(u8 taskId)
{
struct Task *task = &gTasks[taskId];
- if (task->data[0] == 3 || task->data[2] == 0)
+ if (task->tButtonId == BUTTON_COUNT || !task->tAllowFlash)
return;
- MultiplyInvertedPaletteRGBComponents(sub_80E3A74(task->data[0]), task->data[3], task->data[3], task->data[3]);
- if (task->data[5] != 0)
- {
- task->data[5]--;
- if (task->data[5] != 0)
- return;
- }
- task->data[5] = 2;
- if (task->data[4] >= 0)
+
+ MultiplyInvertedPaletteRGBComponents(GetButtonPalOffset(task->tButtonId), task->tColor, task->tColor, task->tColor);
+
+ if (task->tColorDelay && --task->tColorDelay)
+ return;
+
+ task->tColorDelay = 2;
+ if (task->tColorIncr >= 0)
{
- if (task->data[3] < 14)
+ if (task->tColor < 14)
{
- task->data[3] += task->data[4];
- task->data[6] += task->data[4];
+ task->tColor += task->tColorIncr;
+ task->tColorDelta += task->tColorIncr;
}
else
{
- task->data[3] = 16;
- task->data[6]++;
+ task->tColor = 16;
+ task->tColorDelta++;
}
}
else
{
- task->data[3] += task->data[4];
- task->data[6] += task->data[4];
+ task->tColor += task->tColorIncr;
+ task->tColorDelta += task->tColorIncr;
}
- if (task->data[3] == 16 && task->data[6] == 22)
+ if (task->tColor == 16 && task->tColorDelta == 22)
{
- task->data[4] = -4;
+ task->tColorIncr = -4;
}
- else if (task->data[3] == 0)
+ else if (task->tColor == 0)
{
- task->data[2] = task->data[1];
- task->data[4] = 2;
- task->data[6] = 0;
+ task->tAllowFlash = task->tKeepFlashing;
+ task->tColorIncr = 2;
+ task->tColorDelta = 0;
}
}
-static u16 sub_80E3A74(u8 a)
+static u16 GetButtonPalOffset(u8 button)
{
- const u16 arr[] =
+ const u16 palOffsets[BUTTON_COUNT + 1] =
{
- IndexOfSpritePaletteTag(4) * 16 + 0x10E,
- IndexOfSpritePaletteTag(6) * 16 + 0x10E,
- IndexOfSpritePaletteTag(7) * 16 + 0x10E,
- IndexOfSpritePaletteTag(7) * 16 + 0x101,
+ [BUTTON_PAGE] = IndexOfSpritePaletteTag(PALTAG_PAGE_SWAP) * 16 + 0x10E,
+ [BUTTON_BACK] = IndexOfSpritePaletteTag(PALTAG_BACK_BUTTON) * 16 + 0x10E,
+ [BUTTON_OK] = IndexOfSpritePaletteTag(PALTAG_OK_BUTTON) * 16 + 0x10E,
+ [BUTTON_COUNT] = IndexOfSpritePaletteTag(PALTAG_OK_BUTTON) * 16 + 0x101,
};
- return arr[a];
+ return palOffsets[button];
}
-static void sub_80E3AE8(u8 a)
+static void RestoreButtonColor(u8 button)
{
- u16 index = sub_80E3A74(a);
-
+ u16 index = GetButtonPalOffset(button);
gPlttBufferFaded[index] = gPlttBufferUnfaded[index];
}
-static void sub_80E3B10(struct Task *task, u8 b, u8 c)
+static void StartButtonFlash(struct Task *task, u8 button, bool8 keepFlashing)
{
- task->data[0] = b;
- task->data[1] = c;
- task->data[2] = 1;
- task->data[3] = 4;
- task->data[4] = 2;
- task->data[5] = 0;
- task->data[6] = 4;
+ task->tButtonId = button;
+ task->tKeepFlashing = keepFlashing;
+ task->tAllowFlash = TRUE;
+ task->tColor = 4;
+ task->tColorIncr = 2;
+ task->tColorDelay = 0;
+ task->tColorDelta = 4;
}
-static void sub_80E3B30(struct Sprite *sprite)
+#undef tButtonId
+#undef tColor
+
+// Sprite data for the the cursor
+#define sX data[0]
+#define sY data[1]
+#define sPrevX data[2]
+#define sPrevY data[3]
+#define sInvisible data[4] & 0x00FF
+#define sFlashing data[4] & 0xFF00
+#define sColor data[5]
+#define sColorIncr data[6]
+#define sColorDelay data[7]
+
+static void SpriteCB_Cursor(struct Sprite *sprite)
{
if (sprite->animEnded)
StartSpriteAnim(sprite, 0);
- sprite->invisible = (sprite->data[4] & 0xFF);
- if (sprite->data[0] == GetCurrentPageColumnCount())
+
+ // Hide cursor when on button column
+ sprite->invisible = sprite->sInvisible;
+ if (sprite->sX == GetCurrentPageColumnCount())
sprite->invisible = TRUE;
- if (sprite->invisible || (sprite->data[4] & 0xFF00) == 0
- || sprite->data[0] != sprite->data[2] || sprite->data[1] != sprite->data[3])
+
+ if (sprite->invisible
+ || !(sprite->sFlashing)
+ || sprite->sX != sprite->sPrevX
+ || sprite->sY != sprite->sPrevY)
{
- sprite->data[5] = 0;
- sprite->data[6] = 2;
- sprite->data[7] = 2;
+ sprite->sColor = 0;
+ sprite->sColorIncr = 2;
+ sprite->sColorDelay = 2;
}
- sprite->data[7]--;
- if (sprite->data[7] == 0)
+
+ sprite->sColorDelay--;
+ if (sprite->sColorDelay == 0)
{
- sprite->data[5] += sprite->data[6];
- if (sprite->data[5] == 16 || sprite->data[5] == 0)
- sprite->data[6] = -sprite->data[6];
- sprite->data[7] = 2;
+ sprite->sColor += sprite->sColorIncr;
+ if (sprite->sColor == 16 || sprite->sColor == 0)
+ sprite->sColorIncr = -sprite->sColorIncr;
+ sprite->sColorDelay = 2;
}
- if ((sprite->data[4] & 0xFF00) != 0)
+
+ if (sprite->sFlashing)
{
- s8 gb = sprite->data[5];
- s8 r = sprite->data[5] >> 1;
- u16 index = IndexOfSpritePaletteTag(5) * 16 + 0x0101;
+ s8 gb = sprite->sColor;
+ s8 r = sprite->sColor >> 1;
+ u16 index = IndexOfSpritePaletteTag(PALTAG_CURSOR) * 16 + 0x0101;
MultiplyInvertedPaletteRGBComponents(index, r, gb, gb);
}
}
-static void sub_80E3C20(struct Sprite *sprite)
+#define sDelay data[0]
+#define sXPosId data[1]
+
+static void SpriteCB_InputArrow(struct Sprite *sprite)
{
- const s16 arr[] = {0, -4, -2, -1};
+ const s16 x[] = {0, -4, -2, -1};
- if (sprite->data[0] == 0 || --sprite->data[0] == 0)
+ if (sprite->sDelay == 0 || --sprite->sDelay == 0)
{
- sprite->data[0] = 8;
- sprite->data[1] = (sprite->data[1] + 1) & 3;
+ sprite->sDelay = 8;
+ sprite->sXPosId = (sprite->sXPosId + 1) & (ARRAY_COUNT(x) - 1);
}
- sprite->pos2.x = arr[sprite->data[1]];
+ sprite->pos2.x = x[sprite->sXPosId];
}
-static void sub_80E3C6C(struct Sprite *sprite)
+#undef sDelay
+#undef sXPosId
+
+#define sId data[0] // set in CreateTextEntrySprites
+#define sYPosId data[1]
+#define sDelay data[2]
+
+static void SpriteCB_Underscore(struct Sprite *sprite)
{
- const s16 arr[] = {2, 3, 2, 1};
- u8 var;
+ const s16 y[] = {2, 3, 2, 1};
+ u8 pos;
- var = GetTextCaretPosition();
- if (var != (u8)sprite->data[0])
+ pos = GetTextEntryPosition();
+ if (pos != (u8)sprite->sId)
{
sprite->pos2.y = 0;
- sprite->data[1] = 0;
- sprite->data[2] = 0;
+ sprite->sYPosId = 0;
+ sprite->sDelay = 0;
}
else
{
- sprite->pos2.y = arr[sprite->data[1]];
- sprite->data[2]++;
- if (sprite->data[2] > 8)
+ sprite->pos2.y = y[sprite->sYPosId];
+ sprite->sDelay++;
+ if (sprite->sDelay > 8)
{
- sprite->data[1] = (sprite->data[1] + 1) & 3;
- sprite->data[2] = 0;
+ sprite->sYPosId = (sprite->sYPosId + 1) & (ARRAY_COUNT(y) - 1);
+ sprite->sDelay = 0;
}
}
}
-//--------------------------------------------------
-// Cursor
-//--------------------------------------------------
+#undef sId
+#undef sYPosId
+#undef sDelay
-static void sub_80E3CC8(void)
+static void CreateSprites(void)
{
- CursorInit();
- CreatePageSwitcherSprites();
+ CreateCursorSprite();
+ CreatePageSwapButtonSprites();
CreateBackOkSprites();
- CreateUnderscoreSprites();
+ CreateTextEntrySprites();
CreateInputTargetIcon();
}
-static void CursorInit(void)
+static void CreateCursorSprite(void)
{
- gNamingScreenData->cursorSpriteId = CreateSprite(&gUnknown_0858C138, 38, 88, 1);
- sub_80E3E3C(1);
- gSprites[gNamingScreenData->cursorSpriteId].oam.priority = 1;
- gSprites[gNamingScreenData->cursorSpriteId].oam.objMode = ST_OAM_OBJ_BLEND;
- gSprites[gNamingScreenData->cursorSpriteId].data[6] = 1;
- gSprites[gNamingScreenData->cursorSpriteId].data[6] = 2;
+ sNamingScreen->cursorSpriteId = CreateSprite(&sSpriteTemplate_Cursor, 38, 88, 1);
+ SetCursorInvisibility(TRUE);
+ gSprites[sNamingScreen->cursorSpriteId].oam.priority = 1;
+ gSprites[sNamingScreen->cursorSpriteId].oam.objMode = ST_OAM_OBJ_BLEND;
+ gSprites[sNamingScreen->cursorSpriteId].sColorIncr = 1; // ? immediately overwritten
+ gSprites[sNamingScreen->cursorSpriteId].sColorIncr = 2;
SetCursorPos(0, 0);
}
static void SetCursorPos(s16 x, s16 y)
{
- struct Sprite *cursorSprite = &gSprites[gNamingScreenData->cursorSpriteId];
+ struct Sprite *cursorSprite = &gSprites[sNamingScreen->cursorSpriteId];
- if (x < gUnknown_0858BEA0[sub_80E3274()])
- cursorSprite->pos1.x = gUnknown_0858BEA3[x + sub_80E3274() * 8] + 38;
+ if (x < sPageColumnCounts[CurrentPageToKeyboardId()])
+ cursorSprite->pos1.x = sPageColumnXPos[x + CurrentPageToKeyboardId() * KBCOL_COUNT] + 38;
else
cursorSprite->pos1.x = 0;
cursorSprite->pos1.y = y * 16 + 88;
- cursorSprite->data[2] = cursorSprite->data[0];
- cursorSprite->data[3] = cursorSprite->data[1];
- cursorSprite->data[0] = x;
- cursorSprite->data[1] = y;
+ cursorSprite->sPrevX = cursorSprite->sX;
+ cursorSprite->sPrevY = cursorSprite->sY;
+ cursorSprite->sX = x;
+ cursorSprite->sY = y;
}
static void GetCursorPos(s16 *x, s16 *y)
{
- struct Sprite *cursorSprite = &gSprites[gNamingScreenData->cursorSpriteId];
+ struct Sprite *cursorSprite = &gSprites[sNamingScreen->cursorSpriteId];
- *x = cursorSprite->data[0];
- *y = cursorSprite->data[1];
+ *x = cursorSprite->sX;
+ *y = cursorSprite->sY;
}
static void MoveCursorToOKButton(void)
@@ -948,38 +1158,30 @@ static void MoveCursorToOKButton(void)
SetCursorPos(GetCurrentPageColumnCount(), 2);
}
-static void sub_80E3E3C(u8 a)
+static void SetCursorInvisibility(bool8 invisible)
{
- gSprites[gNamingScreenData->cursorSpriteId].data[4] &= -256;
- gSprites[gNamingScreenData->cursorSpriteId].data[4] |= a;
- StartSpriteAnim(&gSprites[gNamingScreenData->cursorSpriteId], 0);
+ gSprites[sNamingScreen->cursorSpriteId].data[4] &= 0xFF00;
+ gSprites[sNamingScreen->cursorSpriteId].data[4] |= invisible; // sInvisible
+ StartSpriteAnim(&gSprites[sNamingScreen->cursorSpriteId], 0);
}
-static void sub_80E3E94(u8 a)
+static void SetCursorFlashing(bool8 flashing)
{
- gSprites[gNamingScreenData->cursorSpriteId].data[4] &= 0xFF;
- gSprites[gNamingScreenData->cursorSpriteId].data[4] |= a << 8;
+ gSprites[sNamingScreen->cursorSpriteId].data[4] &= 0xFF;
+ gSprites[sNamingScreen->cursorSpriteId].data[4] |= flashing << 8; // sFlashing
}
-static void sub_80E3ED8(void)
+static void SquishCursor(void)
{
- StartSpriteAnim(&gSprites[gNamingScreenData->cursorSpriteId], 1);
+ StartSpriteAnim(&gSprites[sNamingScreen->cursorSpriteId], 1);
}
static bool8 IsCursorAnimFinished(void)
{
- return gSprites[gNamingScreenData->cursorSpriteId].animEnded;
+ return gSprites[sNamingScreen->cursorSpriteId].animEnded;
}
-enum
-{
- KEY_ROLE_CHAR,
- KEY_ROLE_PAGE,
- KEY_ROLE_BACKSPACE,
- KEY_ROLE_OK,
-};
-
-static const u8 sKeyRoles[] = {KEY_ROLE_PAGE, KEY_ROLE_BACKSPACE, KEY_ROLE_OK};
+static const u8 sButtonKeyRoles[] = {KEY_ROLE_PAGE, KEY_ROLE_BACKSPACE, KEY_ROLE_OK};
static u8 GetKeyRoleAtCursorPos(void)
{
@@ -990,146 +1192,174 @@ static u8 GetKeyRoleAtCursorPos(void)
if (cursorX < GetCurrentPageColumnCount())
return KEY_ROLE_CHAR;
else
- return sKeyRoles[cursorY];
+ return sButtonKeyRoles[cursorY];
}
+// If the cursor's x is equal to the column count, cursor is in the button column
static u8 GetCurrentPageColumnCount(void)
{
- return gUnknown_0858BEA0[sub_80E3274()];
+ return sPageColumnCounts[CurrentPageToKeyboardId()];
}
-static void CreatePageSwitcherSprites(void)
+#undef sX
+#undef sY
+#undef sPrevX
+#undef sPrevY
+#undef sInvisible
+#undef sFlashing
+#undef sColor
+#undef sColorIncr
+#undef sColorDelay
+
+static bool8 PageSwapSprite_Init(struct Sprite *);
+static bool8 PageSwapSprite_Idle(struct Sprite *);
+static bool8 PageSwapSprite_SlideOff(struct Sprite *);
+static bool8 PageSwapSprite_SlideOn(struct Sprite *);
+
+#define sState data[0]
+#define sPage data[1]
+#define sTextSpriteId data[6]
+#define sButtonSpriteId data[7]
+
+static void CreatePageSwapButtonSprites(void)
{
- u8 spriteId1;
- u8 spriteId2;
- u8 spriteId3;
+ u8 frameSpriteId;
+ u8 textSpriteId;
+ u8 buttonSpriteId;
- spriteId1 = CreateSprite(&gUnknown_0858C0C0, 0xCC, 0x58, 0);
- gNamingScreenData->selectBtnFrameSpriteId = spriteId1;
- SetSubspriteTables(&gSprites[spriteId1], gUnknown_0858C050);
- gSprites[spriteId1].invisible = TRUE;
+ frameSpriteId = CreateSprite(&sSpriteTemplate_PageSwapFrame, 204, 88, 0);
+ sNamingScreen->swapBtnFrameSpriteId = frameSpriteId;
+ SetSubspriteTables(&gSprites[frameSpriteId], sSubspriteTable_PageSwapFrame);
+ gSprites[frameSpriteId].invisible = TRUE;
- spriteId2 = CreateSprite(&gUnknown_0858C0F0, 0xCC, 0x54, 1);
- gSprites[spriteId1].data[6] = spriteId2;
- SetSubspriteTables(&gSprites[spriteId2], gUnknown_0858C058);
- gSprites[spriteId2].invisible = TRUE;
+ textSpriteId = CreateSprite(&sSpriteTemplate_PageSwapText, 204, 84, 1);
+ gSprites[frameSpriteId].sTextSpriteId = textSpriteId;
+ SetSubspriteTables(&gSprites[textSpriteId], sSubspriteTable_PageSwapText);
+ gSprites[textSpriteId].invisible = TRUE;
- spriteId3 = CreateSprite(&gUnknown_0858C0D8, 0xCC, 0x53, 2);
- gSprites[spriteId3].oam.priority = 1;
- gSprites[spriteId1].data[7] = spriteId3;
- gSprites[spriteId3].invisible = TRUE;
+ buttonSpriteId = CreateSprite(&sSpriteTemplate_PageSwapButton, 204, 83, 2);
+ gSprites[buttonSpriteId].oam.priority = 1;
+ gSprites[frameSpriteId].sButtonSpriteId = buttonSpriteId;
+ gSprites[buttonSpriteId].invisible = TRUE;
}
-static void sub_80E4050(void)
+static void StartPageSwapButtonAnim(void)
{
- struct Sprite *sprite = &gSprites[gNamingScreenData->selectBtnFrameSpriteId];
+ struct Sprite *sprite = &gSprites[sNamingScreen->swapBtnFrameSpriteId];
- sprite->data[0] = 2;
- sprite->data[1] = gNamingScreenData->currentPage;
+ sprite->sState = 2; // go to PageSwapSprite_SlideOff
+ sprite->sPage = sNamingScreen->currentPage;
}
-static u8 sub_80E40AC(struct Sprite *);
-static u8 sub_80E4100(struct Sprite *);
-static u8 sub_80E4104(struct Sprite *);
-static u8 sub_80E4178(struct Sprite *);
-
-static u8 (*const gUnknown_0858BEE8[])(struct Sprite *) =
+static u8 (*const sPageSwapSpriteFuncs[])(struct Sprite *) =
{
- sub_80E40AC,
- sub_80E4100,
- sub_80E4104,
- sub_80E4178,
+ PageSwapSprite_Init,
+ PageSwapSprite_Idle,
+ PageSwapSprite_SlideOff,
+ PageSwapSprite_SlideOn,
};
-static void sub_80E4084(struct Sprite *sprite)
+static void SpriteCB_PageSwap(struct Sprite *sprite)
{
- while (gUnknown_0858BEE8[sprite->data[0]](sprite) != 0);
+ while (sPageSwapSpriteFuncs[sprite->sState](sprite));
}
-static u8 sub_80E40AC(struct Sprite *sprite)
+static bool8 PageSwapSprite_Init(struct Sprite *sprite)
{
- struct Sprite *sprite1 = &gSprites[sprite->data[6]];
- struct Sprite *sprite2 = &gSprites[sprite->data[7]];
+ struct Sprite *text = &gSprites[sprite->sTextSpriteId];
+ struct Sprite *button = &gSprites[sprite->sButtonSpriteId];
- sub_80E41B8(sub_80E3244(gNamingScreenData->currentPage), sprite1, sprite2);
- sprite->data[0]++;
- return 0;
+ SetPageSwapButtonGfx(PageToNextGfxId(sNamingScreen->currentPage), text, button);
+ sprite->sState++;
+ return FALSE;
}
-static u8 sub_80E4100(struct Sprite *sprite)
+static bool8 PageSwapSprite_Idle(struct Sprite *sprite)
{
- return 0;
+ return FALSE;
}
-static u8 sub_80E4104(struct Sprite *sprite)
+static bool8 PageSwapSprite_SlideOff(struct Sprite *sprite)
{
- struct Sprite *r4 = &gSprites[sprite->data[6]];
- struct Sprite *r5 = &gSprites[sprite->data[7]];
+ struct Sprite *text = &gSprites[sprite->sTextSpriteId];
+ struct Sprite *button = &gSprites[sprite->sButtonSpriteId];
- r4->pos2.y++;
- if (r4->pos2.y > 7)
+ text->pos2.y++;
+ if (text->pos2.y > 7)
{
- sprite->data[0]++;
- r4->pos2.y = -4;
- r4->invisible = TRUE;
- sub_80E41B8(sub_80E3244(((u8)sprite->data[1] + 1) % 3), r4, r5);
+ sprite->sState++;
+ text->pos2.y = -4;
+ text->invisible = TRUE;
+ SetPageSwapButtonGfx(PageToNextGfxId(((u8)sprite->sPage + 1) % KBPAGE_COUNT), text, button);
}
- return 0;
+ return FALSE;
}
-static u8 sub_80E4178(struct Sprite *sprite)
+static bool8 PageSwapSprite_SlideOn(struct Sprite *sprite)
{
- struct Sprite *r2 = &gSprites[sprite->data[6]];
+ struct Sprite *text = &gSprites[sprite->sTextSpriteId];
- r2->invisible = FALSE;
- r2->pos2.y++;
- if (r2->pos2.y >= 0)
+ text->invisible = FALSE;
+ text->pos2.y++;
+ if (text->pos2.y >= 0)
{
- r2->pos2.y = 0;
- sprite->data[0] = 1;
+ text->pos2.y = 0;
+ sprite->sState = 1; // go to PageSwapSprite_Idle
}
- return 0;
+ return FALSE;
}
-static const u16 gUnknown_0858BEF8[] = {1, 3, 2};
-static const u16 gUnknown_0858BEFE[] = {4, 6, 5};
+static const u16 sPageSwapPalTags[] = {
+ [PAGE_SWAP_UPPER] = PALTAG_PAGE_SWAP_UPPER,
+ [PAGE_SWAP_OTHERS] = PALTAG_PAGE_SWAP_OTHERS,
+ [PAGE_SWAP_LOWER] = PALTAG_PAGE_SWAP_LOWER
+};
+
+static const u16 sPageSwapGfxTags[] = {
+ [PAGE_SWAP_UPPER] = GFXTAG_PAGE_SWAP_UPPER,
+ [PAGE_SWAP_OTHERS] = GFXTAG_PAGE_SWAP_OTHERS,
+ [PAGE_SWAP_LOWER] = GFXTAG_PAGE_SWAP_LOWER
+};
-static void sub_80E41B8(u8 a, struct Sprite *b, struct Sprite *c)
+static void SetPageSwapButtonGfx(u8 page, struct Sprite *text, struct Sprite *button)
{
- c->oam.paletteNum = IndexOfSpritePaletteTag(gUnknown_0858BEF8[a]);
- b->sheetTileStart = GetSpriteTileStartByTag(gUnknown_0858BEFE[a]);
- b->subspriteTableNum = a;
+ button->oam.paletteNum = IndexOfSpritePaletteTag(sPageSwapPalTags[page]);
+ text->sheetTileStart = GetSpriteTileStartByTag(sPageSwapGfxTags[page]);
+ text->subspriteTableNum = page;
}
-//
+#undef sState
+#undef sPage
+#undef sTextSpriteId
+#undef sButtonSpriteId
static void CreateBackOkSprites(void)
{
u8 spriteId;
- spriteId = CreateSprite(&gUnknown_0858C108, 0xCC, 0x74, 0);
- SetSubspriteTables(&gSprites[spriteId], gUnknown_0858C070);
+ spriteId = CreateSprite(&sSpriteTemplate_BackButton, 204, 116, 0);
+ SetSubspriteTables(&gSprites[spriteId], sSubspriteTable_Button);
gSprites[spriteId].invisible = TRUE;
- spriteId = CreateSprite(&gUnknown_0858C120, 0xCC, 0x8C, 0);
- SetSubspriteTables(&gSprites[spriteId], gUnknown_0858C070);
+ spriteId = CreateSprite(&sSpriteTemplate_OkButton, 204, 140, 0);
+ SetSubspriteTables(&gSprites[spriteId], sSubspriteTable_Button);
gSprites[spriteId].invisible = TRUE;
}
-static void CreateUnderscoreSprites(void)
+static void CreateTextEntrySprites(void)
{
u8 spriteId;
s16 xPos;
u8 i;
- xPos = gNamingScreenData->inputCharBaseXPos - 5;
- spriteId = CreateSprite(&sSpriteTemplate_InputArrow, xPos, 0x38, 0);
+ xPos = sNamingScreen->inputCharBaseXPos - 5;
+ spriteId = CreateSprite(&sSpriteTemplate_InputArrow, xPos, 56, 0);
gSprites[spriteId].oam.priority = 3;
gSprites[spriteId].invisible = TRUE;
- xPos = gNamingScreenData->inputCharBaseXPos;
- for (i = 0; i < gNamingScreenData->template->maxChars; i++, xPos += 8)
+ xPos = sNamingScreen->inputCharBaseXPos;
+ for (i = 0; i < sNamingScreen->template->maxChars; i++, xPos += 8)
{
- spriteId = CreateSprite(&sSpriteTemplate_Underscore, xPos + 3, 0x3C, 0);
+ spriteId = CreateSprite(&sSpriteTemplate_Underscore, xPos + 3, 60, 0);
gSprites[spriteId].oam.priority = 3;
gSprites[spriteId].data[0] = i;
gSprites[spriteId].invisible = TRUE;
@@ -1140,27 +1370,27 @@ static void CreateUnderscoreSprites(void)
// Icon creation (the thing you're naming or giving input to)
//--------------------------------------------------
-static void TaskDummy2(void);
+static void NamingScreen_NoIcon(void);
static void NamingScreen_CreatePlayerIcon(void);
static void NamingScreen_CreatePCIcon(void);
static void NamingScreen_CreateMonIcon(void);
-static void NamingScreen_CreateWandaDadIcon(void);
+static void NamingScreen_CreateWaldaDadIcon(void);
static void (*const sIconFunctions[])(void) =
{
- TaskDummy2,
+ NamingScreen_NoIcon,
NamingScreen_CreatePlayerIcon,
NamingScreen_CreatePCIcon,
NamingScreen_CreateMonIcon,
- NamingScreen_CreateWandaDadIcon,
+ NamingScreen_CreateWaldaDadIcon,
};
static void CreateInputTargetIcon(void)
{
- sIconFunctions[gNamingScreenData->template->iconFunction]();
+ sIconFunctions[sNamingScreen->template->iconFunction]();
}
-static void TaskDummy2(void)
+static void NamingScreen_NoIcon(void)
{
}
@@ -1170,8 +1400,8 @@ static void NamingScreen_CreatePlayerIcon(void)
u8 rivalGfxId;
u8 spriteId;
- rivalGfxId = GetRivalAvatarGraphicsIdByStateIdAndGender(0, gNamingScreenData->monSpecies);
- spriteId = AddPseudoObjectEvent(rivalGfxId, SpriteCallbackDummy, 0x38, 0x25, 0);
+ rivalGfxId = GetRivalAvatarGraphicsIdByStateIdAndGender(0, sNamingScreen->monSpecies);
+ spriteId = AddPseudoObjectEvent(rivalGfxId, SpriteCallbackDummy, 56, 37, 0);
gSprites[spriteId].oam.priority = 3;
StartSpriteAnim(&gSprites[spriteId], 4);
}
@@ -1180,8 +1410,8 @@ static void NamingScreen_CreatePCIcon(void)
{
u8 spriteId;
- spriteId = CreateSprite(&gUnknown_0858C180, 0x38, 0x29, 0);
- SetSubspriteTables(&gSprites[spriteId], gUnknown_0858C078);
+ spriteId = CreateSprite(&sSpriteTemplate_PCIcon, 56, 41, 0);
+ SetSubspriteTables(&gSprites[spriteId], sSubspriteTable_PCIcon);
gSprites[spriteId].oam.priority = 3;
}
@@ -1190,15 +1420,15 @@ static void NamingScreen_CreateMonIcon(void)
u8 spriteId;
LoadMonIconPalettes();
- spriteId = CreateMonIcon(gNamingScreenData->monSpecies, SpriteCallbackDummy, 0x38, 0x28, 0, gNamingScreenData->monPersonality, 1);
+ spriteId = CreateMonIcon(sNamingScreen->monSpecies, SpriteCallbackDummy, 56, 40, 0, sNamingScreen->monPersonality, 1);
gSprites[spriteId].oam.priority = 3;
}
-static void NamingScreen_CreateWandaDadIcon(void)
+static void NamingScreen_CreateWaldaDadIcon(void)
{
u8 spriteId;
- spriteId = AddPseudoObjectEvent(OBJ_EVENT_GFX_MAN_1, SpriteCallbackDummy, 0x38, 0x25, 0);
+ spriteId = AddPseudoObjectEvent(OBJ_EVENT_GFX_MAN_1, SpriteCallbackDummy, 56, 37, 0);
gSprites[spriteId].oam.priority = 3;
StartSpriteAnim(&gSprites[spriteId], 4);
}
@@ -1214,87 +1444,87 @@ static bool8 KeyboardKeyHandler_OK(u8);
static bool8 (*const sKeyboardKeyHandlers[])(u8) =
{
- KeyboardKeyHandler_Character,
- KeyboardKeyHandler_Page,
- KeyboardKeyHandler_Backspace,
- KeyboardKeyHandler_OK,
+ [KEY_ROLE_CHAR] = KeyboardKeyHandler_Character,
+ [KEY_ROLE_PAGE] = KeyboardKeyHandler_Page,
+ [KEY_ROLE_BACKSPACE] = KeyboardKeyHandler_Backspace,
+ [KEY_ROLE_OK] = KeyboardKeyHandler_OK,
};
static bool8 HandleKeyboardEvent(void)
{
- u8 event = GetInputEvent();
+ u8 input = GetInputEvent();
u8 keyRole = GetKeyRoleAtCursorPos();
- if (event == KBEVENT_PRESSED_SELECT)
+ if (input == INPUT_SELECT)
{
- return sub_80E45E0();
+ return SwapKeyboardPage();
}
- else if (event == KBEVENT_PRESSED_B)
+ else if (input == INPUT_B_BUTTON)
{
DeleteTextCharacter();
return FALSE;
}
- else if (event == KBEVENT_PRESSED_START)
+ else if (input == INPUT_START)
{
MoveCursorToOKButton();
return FALSE;
}
else
{
- return sKeyboardKeyHandlers[keyRole](event);
+ return sKeyboardKeyHandlers[keyRole](input);
}
}
-static bool8 KeyboardKeyHandler_Character(u8 event)
+static bool8 KeyboardKeyHandler_Character(u8 input)
{
- sub_80E3948(3, 0, 0);
- if (event == KBEVENT_PRESSED_A)
+ TryStartButtonFlash(BUTTON_COUNT, FALSE, FALSE);
+ if (input == INPUT_A_BUTTON)
{
- bool8 var = sub_80E4B54();
+ bool8 textFull = AddTextCharacter();
- sub_80E3ED8();
- if (var)
+ SquishCursor();
+ if (textFull)
{
- SetInputState(INPUT_STATE_2);
- gNamingScreenData->state = MAIN_STATE_MOVE_TO_OK_BUTTON;
+ SetInputState(INPUT_STATE_OVERRIDE);
+ sNamingScreen->state = STATE_MOVE_TO_OK_BUTTON;
}
}
return FALSE;
}
-static bool8 KeyboardKeyHandler_Page(u8 event)
+static bool8 KeyboardKeyHandler_Page(u8 input)
{
- sub_80E3948(0, 1, 0);
- if (event == KBEVENT_PRESSED_A)
- return sub_80E45E0();
+ TryStartButtonFlash(BUTTON_PAGE, TRUE, FALSE);
+ if (input == INPUT_A_BUTTON)
+ return SwapKeyboardPage();
else
return FALSE;
}
-static bool8 KeyboardKeyHandler_Backspace(u8 event)
+static bool8 KeyboardKeyHandler_Backspace(u8 input)
{
- sub_80E3948(1, 1, 0);
- if (event == KBEVENT_PRESSED_A)
+ TryStartButtonFlash(BUTTON_BACK, TRUE, FALSE);
+ if (input == INPUT_A_BUTTON)
DeleteTextCharacter();
return FALSE;
}
-static bool8 KeyboardKeyHandler_OK(u8 event)
+static bool8 KeyboardKeyHandler_OK(u8 input)
{
- sub_80E3948(2, 1, 0);
- if (event == KBEVENT_PRESSED_A)
+ TryStartButtonFlash(BUTTON_OK, TRUE, FALSE);
+ if (input == INPUT_A_BUTTON)
{
PlaySE(SE_SELECT);
- gNamingScreenData->state = MAIN_STATE_6;
+ sNamingScreen->state = STATE_PRESSED_OK;
return TRUE;
}
else
return FALSE;
}
-static bool8 sub_80E45E0(void)
+static bool8 SwapKeyboardPage(void)
{
- gNamingScreenData->state = MAIN_STATE_START_PAGE_SWAP;
+ sNamingScreen->state = STATE_START_PAGE_SWAP;
return TRUE;
}
@@ -1302,33 +1532,26 @@ static bool8 sub_80E45E0(void)
// Input handling
//--------------------------------------------------
-enum
-{
- FNKEY_CASE,
- FNKEY_BACK,
- FNKEY_OK,
-};
-
#define tState data[0]
#define tKeyboardEvent data[1]
-#define tKbFunctionKey data[2]
+#define tButtonId data[2]
-static void InputState_Disabled(struct Task *);
-static void InputState_Enabled(struct Task *);
-static void InputState_2(struct Task *);
+static void Input_Disabled(struct Task *);
+static void Input_Enabled(struct Task *);
+static void Input_Override(struct Task *);
-static void (*const sInputStateFuncs[])(struct Task *) =
+static void (*const sInputFuncs[])(struct Task *) =
{
- InputState_Disabled,
- InputState_Enabled,
- InputState_2,
+ [INPUT_STATE_DISABLED] = Input_Disabled,
+ [INPUT_STATE_ENABLED] = Input_Enabled,
+ [INPUT_STATE_OVERRIDE] = Input_Override,
};
static void Task_HandleInput(u8);
static void HandleDpadMovement(struct Task *);
-static void InputInit(void)
+static void CreateInputHandlerTask(void)
{
CreateTask(Task_HandleInput, 1);
}
@@ -1349,121 +1572,128 @@ static void SetInputState(u8 state)
static void Task_HandleInput(u8 taskId)
{
- sInputStateFuncs[gTasks[taskId].tState](&gTasks[taskId]);
+ sInputFuncs[gTasks[taskId].tState](&gTasks[taskId]);
}
-static void InputState_Disabled(struct Task *task)
+static void Input_Disabled(struct Task *task)
{
- task->tKeyboardEvent = 0;
+ task->tKeyboardEvent = INPUT_NONE;
}
-static void InputState_Enabled(struct Task *task)
+static void Input_Enabled(struct Task *task)
{
- task->tKeyboardEvent = 0;
+ task->tKeyboardEvent = INPUT_NONE;
- if (gMain.newKeys & A_BUTTON)
- task->tKeyboardEvent = KBEVENT_PRESSED_A;
- else if (gMain.newKeys & B_BUTTON)
- task->tKeyboardEvent = KBEVENT_PRESSED_B;
- else if (gMain.newKeys & SELECT_BUTTON)
- task->tKeyboardEvent = KBEVENT_PRESSED_SELECT;
- else if (gMain.newKeys & START_BUTTON)
- task->tKeyboardEvent = KBEVENT_PRESSED_START;
+ if (JOY_NEW(A_BUTTON))
+ task->tKeyboardEvent = INPUT_A_BUTTON;
+ else if (JOY_NEW(B_BUTTON))
+ task->tKeyboardEvent = INPUT_B_BUTTON;
+ else if (JOY_NEW(SELECT_BUTTON))
+ task->tKeyboardEvent = INPUT_SELECT;
+ else if (JOY_NEW(START_BUTTON))
+ task->tKeyboardEvent = INPUT_START;
else
HandleDpadMovement(task);
}
-static void InputState_2(struct Task *task)
+static void Input_Override(struct Task *task)
{
- task->tKeyboardEvent = 0;
+ task->tKeyboardEvent = INPUT_NONE;
}
static void HandleDpadMovement(struct Task *task)
{
const s16 sDpadDeltaX[] =
{
- 0, //none
- 0, //up
- 0, //down
- -1, //left
- 1 //right
+ [INPUT_NONE] = 0,
+ [INPUT_DPAD_UP] = 0,
+ [INPUT_DPAD_DOWN] = 0,
+ [INPUT_DPAD_LEFT] = -1,
+ [INPUT_DPAD_RIGHT] = 1
};
const s16 sDpadDeltaY[] =
{
- 0, //none
- -1, //up
- 1, //down
- 0, //left
- 0 //right
+ [INPUT_NONE] = 0,
+ [INPUT_DPAD_UP] = -1,
+ [INPUT_DPAD_DOWN] = 1,
+ [INPUT_DPAD_LEFT] = 0,
+ [INPUT_DPAD_RIGHT] = 0
};
- const s16 s4RowTo3RowTableY[] = {0, 1, 1, 2};
- const s16 gUnknown_0858BF50[] = {0, 0, 3};
+ const s16 sKeyRowToButtonRow[KBROW_COUNT] = {0, 1, 1, 2};
+ const s16 sButtonRowToKeyRow[BUTTON_COUNT] = {0, 0, 3};
s16 cursorX;
s16 cursorY;
- u16 dpadDir;
+ u16 input;
s16 prevCursorX;
GetCursorPos(&cursorX, &cursorY);
- dpadDir = 0;
- if (gMain.newAndRepeatedKeys & DPAD_UP)
- dpadDir = 1;
- if (gMain.newAndRepeatedKeys & DPAD_DOWN)
- dpadDir = 2;
- if (gMain.newAndRepeatedKeys & DPAD_LEFT)
- dpadDir = 3;
- if (gMain.newAndRepeatedKeys & DPAD_RIGHT)
- dpadDir = 4;
-
- //Get new cursor position
+ input = INPUT_NONE;
+ if (JOY_REPEAT(DPAD_UP))
+ input = INPUT_DPAD_UP;
+ if (JOY_REPEAT(DPAD_DOWN))
+ input = INPUT_DPAD_DOWN;
+ if (JOY_REPEAT(DPAD_LEFT))
+ input = INPUT_DPAD_LEFT;
+ if (JOY_REPEAT(DPAD_RIGHT))
+ input = INPUT_DPAD_RIGHT;
+
+ // Get new cursor position
prevCursorX = cursorX;
- cursorX += sDpadDeltaX[dpadDir];
- cursorY += sDpadDeltaY[dpadDir];
+ cursorX += sDpadDeltaX[input];
+ cursorY += sDpadDeltaY[input];
- //Wrap cursor position in the X direction
+ // Wrap cursor position in the X direction
if (cursorX < 0)
cursorX = GetCurrentPageColumnCount();
if (cursorX > GetCurrentPageColumnCount())
cursorX = 0;
- //Handle cursor movement in X direction
- if (sDpadDeltaX[dpadDir] != 0)
+
+ // Handle moving on/off the button column
+ if (sDpadDeltaX[input] != 0)
{
if (cursorX == GetCurrentPageColumnCount())
{
- //We are now on the last column
- task->tKbFunctionKey = cursorY;
- cursorY = s4RowTo3RowTableY[cursorY];
+ // Moved onto button column
+ // Save cursor pos in tButtonId for moving back onto keys
+ task->tButtonId = cursorY;
+ cursorY = sKeyRowToButtonRow[cursorY];
}
else if (prevCursorX == GetCurrentPageColumnCount())
{
- if (cursorY == 1)
- cursorY = task->tKbFunctionKey;
+ // Moved off button column
+ // If you're on the middle button, go to the row that
+ // the cursor was on previously (saved in tButtonId above)
+ if (cursorY == BUTTON_COUNT / 2)
+ cursorY = task->tButtonId;
else
- cursorY = gUnknown_0858BF50[cursorY];
+ cursorY = sButtonRowToKeyRow[cursorY];
}
}
+ // Wrap cursor position in the y direction
if (cursorX == GetCurrentPageColumnCount())
{
- //There are only 3 keys on the last column, unlike the others,
- //so wrap Y accordingly
+ // There are only 3 keys in the button column
+ // so wrap Y accordingly
if (cursorY < 0)
- cursorY = 2;
- if (cursorY > 2)
+ cursorY = BUTTON_COUNT - 1;
+ if (cursorY >= BUTTON_COUNT)
cursorY = 0;
+
if (cursorY == 0)
- task->tKbFunctionKey = FNKEY_BACK;
- else if (cursorY == 2)
- task->tKbFunctionKey = FNKEY_OK;
+ task->tButtonId = BUTTON_BACK;
+ else if (cursorY == BUTTON_COUNT - 1)
+ task->tButtonId = BUTTON_OK;
}
else
{
if (cursorY < 0)
- cursorY = 3;
- if (cursorY > 3)
+ cursorY = KBROW_COUNT - 1;
+ if (cursorY > KBROW_COUNT - 1)
cursorY = 0;
}
SetCursorPos(cursorX, cursorY);
@@ -1471,55 +1701,55 @@ static void HandleDpadMovement(struct Task *task)
#undef tState
#undef tKeyboardEvent
-#undef tKbFunctionKey
+#undef tButtonId
-static void sub_80E4894(void)
+static void DrawNormalTextEntryBox(void)
{
- FillWindowPixelBuffer(gNamingScreenData->windows[3], PIXEL_FILL(1));
- AddTextPrinterParameterized(gNamingScreenData->windows[3], 1, gNamingScreenData->template->title, 8, 1, 0, 0);
- PutWindowTilemap(gNamingScreenData->windows[3]);
+ FillWindowPixelBuffer(sNamingScreen->windows[WIN_TEXT_ENTRY_BOX], PIXEL_FILL(1));
+ AddTextPrinterParameterized(sNamingScreen->windows[WIN_TEXT_ENTRY_BOX], 1, sNamingScreen->template->title, 8, 1, 0, 0);
+ PutWindowTilemap(sNamingScreen->windows[WIN_TEXT_ENTRY_BOX]);
}
-static void sub_80E48E8(void)
+static void DrawMonTextEntryBox(void)
{
- u8 buffer[0x20];
+ u8 buffer[32];
- StringCopy(buffer, gSpeciesNames[gNamingScreenData->monSpecies]);
- StringAppendN(buffer, gNamingScreenData->template->title, 15);
- FillWindowPixelBuffer(gNamingScreenData->windows[3], PIXEL_FILL(1));
- AddTextPrinterParameterized(gNamingScreenData->windows[3], 1, buffer, 8, 1, 0, 0);
- PutWindowTilemap(gNamingScreenData->windows[3]);
+ StringCopy(buffer, gSpeciesNames[sNamingScreen->monSpecies]);
+ StringAppendN(buffer, sNamingScreen->template->title, 15);
+ FillWindowPixelBuffer(sNamingScreen->windows[WIN_TEXT_ENTRY_BOX], PIXEL_FILL(1));
+ AddTextPrinterParameterized(sNamingScreen->windows[WIN_TEXT_ENTRY_BOX], 1, buffer, 8, 1, 0, 0);
+ PutWindowTilemap(sNamingScreen->windows[WIN_TEXT_ENTRY_BOX]);
}
-static void (*const gUnknown_0858BF58[])(void) =
+static void (*const sDrawTextEntryBoxFuncs[])(void) =
{
- sub_80E4894,
- sub_80E4894,
- sub_80E48E8,
- sub_80E48E8,
- sub_80E4894,
+ [NAMING_SCREEN_PLAYER] = DrawNormalTextEntryBox,
+ [NAMING_SCREEN_BOX] = DrawNormalTextEntryBox,
+ [NAMING_SCREEN_CAUGHT_MON] = DrawMonTextEntryBox,
+ [NAMING_SCREEN_NICKNAME] = DrawMonTextEntryBox,
+ [NAMING_SCREEN_WALDA] = DrawNormalTextEntryBox,
};
-static void sub_80E4964(void)
+static void DrawTextEntryBox(void)
{
- gUnknown_0858BF58[gNamingScreenData->templateNum]();
+ sDrawTextEntryBoxFuncs[sNamingScreen->templateNum]();
}
-static void TaskDummy3(void);
-static void sub_80E49BC(void);
+static void DummyGenderIcon(void);
+static void DrawGenderIcon(void);
-static void (*const gUnknown_0858BF6C[])(void) =
+static void (*const sDrawGenderIconFuncs[])(void) =
{
- TaskDummy3,
- sub_80E49BC,
+ [FALSE] = DummyGenderIcon,
+ [TRUE] = DrawGenderIcon,
};
-static void sub_80E498C(void)
+static void TryDrawGenderIcon(void)
{
- gUnknown_0858BF6C[gNamingScreenData->template->addGenderIcon]();
+ sDrawGenderIconFuncs[sNamingScreen->template->addGenderIcon]();
}
-static void TaskDummy3(void)
+static void DummyGenderIcon(void)
{
}
@@ -1530,49 +1760,48 @@ static const u8 sGenderColors[2][3] =
{TEXT_COLOR_TRANSPARENT, TEXT_COLOR_LIGHT_RED, TEXT_COLOR_RED}
};
-static void sub_80E49BC(void)
+static void DrawGenderIcon(void)
{
- u8 genderSymbol[2];
+ u8 text[2];
bool8 isFemale = FALSE;
- StringCopy(genderSymbol, gText_MaleSymbol);
-
- if (gNamingScreenData->monGender != MON_GENDERLESS)
+ StringCopy(text, gText_MaleSymbol);
+ if (sNamingScreen->monGender != MON_GENDERLESS)
{
- if (gNamingScreenData->monGender == MON_FEMALE)
+ if (sNamingScreen->monGender == MON_FEMALE)
{
- StringCopy(genderSymbol, gText_FemaleSymbol);
+ StringCopy(text, gText_FemaleSymbol);
isFemale = TRUE;
}
- AddTextPrinterParameterized3(gNamingScreenData->windows[2], 1, 0x68, 1, sGenderColors[isFemale], -1, genderSymbol);
+ AddTextPrinterParameterized3(sNamingScreen->windows[WIN_TEXT_ENTRY], 1, 0x68, 1, sGenderColors[isFemale], -1, text);
}
}
-static u8 GetCharAtKeyboardPos(s16 a, s16 b)
+static u8 GetCharAtKeyboardPos(s16 x, s16 y)
{
- return gUnknown_0858BE40[a + b * 8 + sub_80E3274() * 32];
+ return sKeyboardChars[x + y * KBCOL_COUNT + CurrentPageToKeyboardId() * KBCOL_COUNT * KBROW_COUNT];
}
-static u8 GetTextCaretPosition(void)
+static u8 GetTextEntryPosition(void)
{
u8 i;
- for (i = 0; i < gNamingScreenData->template->maxChars; i++)
+ for (i = 0; i < sNamingScreen->template->maxChars; i++)
{
- if (gNamingScreenData->textBuffer[i] == EOS)
+ if (sNamingScreen->textBuffer[i] == EOS)
return i;
}
- return gNamingScreenData->template->maxChars - 1;
+ return sNamingScreen->template->maxChars - 1;
}
static u8 GetPreviousTextCaretPosition(void)
{
s8 i;
- for (i = gNamingScreenData->template->maxChars - 1; i > 0; i--)
+ for (i = sNamingScreen->template->maxChars - 1; i > 0; i--)
{
- if (gNamingScreenData->textBuffer[i] != EOS)
+ if (sNamingScreen->textBuffer[i] != EOS)
return i;
}
return 0;
@@ -1581,112 +1810,115 @@ static u8 GetPreviousTextCaretPosition(void)
static void DeleteTextCharacter(void)
{
u8 index;
- u8 var2;
+ u8 keyRole;
index = GetPreviousTextCaretPosition();
- gNamingScreenData->textBuffer[index] = 0;
- sub_80E4D10();
+ sNamingScreen->textBuffer[index] = 0;
+ DrawTextEntry();
CopyBgTilemapBufferToVram(3);
- gNamingScreenData->textBuffer[index] = EOS;
- var2 = GetKeyRoleAtCursorPos();
- if (var2 == 0 || var2 == 2)
- sub_80E3948(1, 0, 1);
- PlaySE(SE_BOWA);
+ sNamingScreen->textBuffer[index] = EOS;
+ keyRole = GetKeyRoleAtCursorPos();
+
+ // The below flashes the Back key once on delete
+ // It incorrectly leaves the Back key 1 shade lighter than its default
+ if (keyRole == KEY_ROLE_CHAR || keyRole == KEY_ROLE_BACKSPACE)
+ TryStartButtonFlash(BUTTON_BACK, FALSE, TRUE);
+ PlaySE(SE_BALL);
}
-static bool8 sub_80E4B54(void)
+// Returns TRUE if the text entry is now full
+static bool8 AddTextCharacter(void)
{
s16 x;
s16 y;
GetCursorPos(&x, &y);
- AddTextCharacter(GetCharAtKeyboardPos(x, y));
- sub_80E4D10();
+ BufferCharacter(GetCharAtKeyboardPos(x, y));
+ DrawTextEntry();
CopyBgTilemapBufferToVram(3);
PlaySE(SE_SELECT);
- if (GetPreviousTextCaretPosition() != gNamingScreenData->template->maxChars - 1)
+ if (GetPreviousTextCaretPosition() != sNamingScreen->template->maxChars - 1)
return FALSE;
else
return TRUE;
}
-static void AddTextCharacter(u8 ch)
+static void BufferCharacter(u8 ch)
{
- u8 index = GetTextCaretPosition();
-
- gNamingScreenData->textBuffer[index] = ch;
+ u8 index = GetTextEntryPosition();
+ sNamingScreen->textBuffer[index] = ch;
}
-static void sub_80E4BE4(void)
+static void SaveInputText(void)
{
u8 i;
- for (i = 0; i < gNamingScreenData->template->maxChars; i++)
+ for (i = 0; i < sNamingScreen->template->maxChars; i++)
{
- if (gNamingScreenData->textBuffer[i] != CHAR_SPACE && gNamingScreenData->textBuffer[i] != EOS)
+ if (sNamingScreen->textBuffer[i] != CHAR_SPACE && sNamingScreen->textBuffer[i] != EOS)
{
- StringCopyN(gNamingScreenData->destBuffer, gNamingScreenData->textBuffer, gNamingScreenData->template->maxChars + 1);
+ StringCopyN(sNamingScreen->destBuffer, sNamingScreen->textBuffer, sNamingScreen->template->maxChars + 1);
break;
}
}
}
-static void choose_name_or_words_screen_load_bg_tile_patterns(void)
+static void LoadGfx(void)
{
- LZ77UnCompWram(gNamingScreenMenu_Gfx, gNamingScreenData->tileBuffer);
- LoadBgTiles(1, gNamingScreenData->tileBuffer, 0x600, 0);
- LoadBgTiles(2, gNamingScreenData->tileBuffer, 0x600, 0);
- LoadBgTiles(3, gNamingScreenData->tileBuffer, 0x600, 0);
- LoadSpriteSheets(gUnknown_0858C1C8);
- LoadSpritePalettes(gUnknown_0858C230);
+ LZ77UnCompWram(gNamingScreenMenu_Gfx, sNamingScreen->tileBuffer);
+ LoadBgTiles(1, sNamingScreen->tileBuffer, sizeof(sNamingScreen->tileBuffer), 0);
+ LoadBgTiles(2, sNamingScreen->tileBuffer, sizeof(sNamingScreen->tileBuffer), 0);
+ LoadBgTiles(3, sNamingScreen->tileBuffer, sizeof(sNamingScreen->tileBuffer), 0);
+ LoadSpriteSheets(sSpriteSheets);
+ LoadSpritePalettes(sSpritePalettes);
}
-static void sub_80E4CB8(void)
+static void CreateHelperTasks(void)
{
- InputInit();
- sub_80E3920();
+ CreateInputHandlerTask();
+ CreateButtonFlashTask();
}
-static void choose_name_or_words_screen_apply_bg_pals(void)
+static void LoadPalettes(void)
{
LoadPalette(gNamingScreenMenu_Pal, 0, 0xC0);
- LoadPalette(gUnknown_0858BD78, 0xA0, sizeof(gUnknown_0858BD78));
- LoadPalette(stdpal_get(2), 0xB0, 0x20);
+ LoadPalette(sKeyboard_Pal, 0xA0, sizeof(sKeyboard_Pal));
+ LoadPalette(GetTextWindowPalette(2), 0xB0, 0x20);
}
-static void sub_80E4CF8(u8 bg, const void *src)
+static void DrawBgTilemap(u8 bg, const void *src)
{
CopyToBgTilemapBuffer(bg, src, 0, 0);
}
-static void nullsub_10(u8 a1, u8 page)
+static void NamingScreen_Dummy(u8 bg, u8 page)
{
}
-static void sub_80E4D10(void)
+static void DrawTextEntry(void)
{
u8 i;
u8 temp[2];
- u16 unk2;
- u8 maxChars = gNamingScreenData->template->maxChars;
- u16 unk = gNamingScreenData->inputCharBaseXPos - 0x40;
+ u16 extraWidth;
+ u8 maxChars = sNamingScreen->template->maxChars;
+ u16 x = sNamingScreen->inputCharBaseXPos - 0x40;
- FillWindowPixelBuffer(gNamingScreenData->windows[2], PIXEL_FILL(1));
+ FillWindowPixelBuffer(sNamingScreen->windows[WIN_TEXT_ENTRY], PIXEL_FILL(1));
for (i = 0; i < maxChars; i++)
{
- temp[0] = gNamingScreenData->textBuffer[i];
+ temp[0] = sNamingScreen->textBuffer[i];
temp[1] = gText_ExpandedPlaceholder_Empty[0];
- unk2 = (IsLetter(temp[0]) == TRUE) ? 2 : 0;
+ extraWidth = (IsWideLetter(temp[0]) == TRUE) ? 2 : 0;
- AddTextPrinterParameterized(gNamingScreenData->windows[2], 1, temp, i * 8 + unk + unk2, 1, 0xFF, NULL);
+ AddTextPrinterParameterized(sNamingScreen->windows[WIN_TEXT_ENTRY], 1, temp, i * 8 + x + extraWidth, 1, 0xFF, NULL);
}
- sub_80E498C();
- CopyWindowToVram(gNamingScreenData->windows[2], 2);
- PutWindowTilemap(gNamingScreenData->windows[2]);
+ TryDrawGenderIcon();
+ CopyWindowToVram(sNamingScreen->windows[WIN_TEXT_ENTRY], 2);
+ PutWindowTilemap(sNamingScreen->windows[WIN_TEXT_ENTRY]);
}
struct TextColor // Needed because of alignment
@@ -1705,77 +1937,77 @@ static const struct TextColor sTextColorStruct =
static const u8 sFillValues[KBPAGE_COUNT] =
{
- [KBPAGE_LETTERS_LOWER] = PIXEL_FILL(0xE),
- [KBPAGE_LETTERS_UPPER] = PIXEL_FILL(0xD),
- [KBPAGE_SYMBOLS] = PIXEL_FILL(0xF)
+ [KEYBOARD_LETTERS_LOWER] = PIXEL_FILL(14),
+ [KEYBOARD_LETTERS_UPPER] = PIXEL_FILL(13),
+ [KEYBOARD_SYMBOLS] = PIXEL_FILL(15)
};
static const u8 *const sKeyboardTextColors[KBPAGE_COUNT] =
{
- [KBPAGE_LETTERS_LOWER] = sTextColorStruct.colors[1],
- [KBPAGE_LETTERS_UPPER] = sTextColorStruct.colors[0],
- [KBPAGE_SYMBOLS] = sTextColorStruct.colors[2]
+ [KEYBOARD_LETTERS_LOWER] = sTextColorStruct.colors[1],
+ [KEYBOARD_LETTERS_UPPER] = sTextColorStruct.colors[0],
+ [KEYBOARD_SYMBOLS] = sTextColorStruct.colors[2]
};
-static void sub_80E4DE4(u8 window, u8 page)
+static void PrintKeyboardKeys(u8 window, u8 page)
{
u8 i;
FillWindowPixelBuffer(window, sFillValues[page]);
for (i = 0; i < KBROW_COUNT; i++)
- {
AddTextPrinterParameterized3(window, 1, 0, i * 16 + 1, sKeyboardTextColors[page], 0, sNamingScreenKeyboardText[page][i]);
- }
PutWindowTilemap(window);
}
-static const u8 *const gUnknown_0858BF98[] =
+static const u8 *const sNextKeyboardPageTilemaps[] =
{
- gUnknown_08DD4620,
- gUnknown_08DD46E0,
- gUnknown_08DD47A0
+ [KBPAGE_SYMBOLS] = gNamingScreenKeyboardUpper_Tilemap,
+ [KBPAGE_LETTERS_UPPER] = gNamingScreenKeyboardLower_Tilemap, // lower
+ [KBPAGE_LETTERS_LOWER] = gNamingScreenKeyboardSymbols_Tilemap // symbols
};
-static void sub_80E4E5C(void)
+// There are always 2 keyboard pages drawn, the current page and the one that will shown next if the player swaps
+// When the page swap is complete this function invisibly replaces the old page with the new next one
+static void DrawKeyboardPageOnDeck(void)
{
- u8 unk1;
- u8 unk2;
- u8 unk3;
+ u8 bg;
+ u8 bg_;
+ u8 windowId;
u8 bg1Priority = GetGpuReg(REG_OFFSET_BG1CNT) & 3;
u8 bg2Priority = GetGpuReg(REG_OFFSET_BG2CNT) & 3;
if (bg1Priority > bg2Priority)
{
- unk1 = 1;
- unk2 = 1;
- unk3 = gNamingScreenData->windows[0];
+ bg = 1;
+ bg_ = 1;
+ windowId = sNamingScreen->windows[WIN_KB_PAGE_1];
}
else
{
- unk1 = 2;
- unk2 = 2;
- unk3 = gNamingScreenData->windows[1];
+ bg = 2;
+ bg_ = 2;
+ windowId = sNamingScreen->windows[WIN_KB_PAGE_2];
}
- sub_80E4CF8(unk1, gUnknown_0858BF98[gNamingScreenData->currentPage]);
- sub_80E4DE4(unk3, sub_80E3254());
- nullsub_10(unk1, sub_80E3254());
- CopyBgTilemapBufferToVram(unk2);
+ DrawBgTilemap(bg, sNextKeyboardPageTilemaps[sNamingScreen->currentPage]);
+ PrintKeyboardKeys(windowId, CurrentPageToNextKeyboardId());
+ NamingScreen_Dummy(bg, CurrentPageToNextKeyboardId());
+ CopyBgTilemapBufferToVram(bg_);
}
-static void sub_80E4EF0(void)
+static void PrintControls(void)
{
const u8 color[3] = { TEXT_DYNAMIC_COLOR_6, TEXT_COLOR_WHITE, TEXT_COLOR_DARK_GREY };
- FillWindowPixelBuffer(gNamingScreenData->windows[4], PIXEL_FILL(15));
- AddTextPrinterParameterized3(gNamingScreenData->windows[4], 0, 2, 1, color, 0, gText_MoveOkBack);
- PutWindowTilemap(gNamingScreenData->windows[4]);
- CopyWindowToVram(gNamingScreenData->windows[4], 3);
+ FillWindowPixelBuffer(sNamingScreen->windows[WIN_BANNER], PIXEL_FILL(15));
+ AddTextPrinterParameterized3(sNamingScreen->windows[WIN_BANNER], 0, 2, 1, color, 0, gText_MoveOkBack);
+ PutWindowTilemap(sNamingScreen->windows[WIN_BANNER]);
+ CopyWindowToVram(sNamingScreen->windows[WIN_BANNER], 3);
}
-static void sub_80E4F58(void)
+static void CB2_NamingScreen(void)
{
RunTasks();
AnimateSprites();
@@ -1783,13 +2015,13 @@ static void sub_80E4F58(void)
UpdatePaletteFade();
}
-static void NamingScreen_TurnOffScreen(void)
+static void ResetVHBlank(void)
{
SetVBlankCallback(NULL);
SetHBlankCallback(NULL);
}
-static void NamingScreen_InitDisplayMode(void)
+static void SetVBlank(void)
{
SetVBlankCallback(VBlankCB_NamingScreen);
}
@@ -1799,15 +2031,15 @@ static void VBlankCB_NamingScreen(void)
LoadOam();
ProcessSpriteCopyRequests();
TransferPlttBuffer();
- SetGpuReg(REG_OFFSET_BG1VOFS, gNamingScreenData->bg1vOffset);
- SetGpuReg(REG_OFFSET_BG2VOFS, gNamingScreenData->bg2vOffset);
+ SetGpuReg(REG_OFFSET_BG1VOFS, sNamingScreen->bg1vOffset);
+ SetGpuReg(REG_OFFSET_BG2VOFS, sNamingScreen->bg2vOffset);
SetGpuReg(REG_OFFSET_BG1CNT, GetGpuReg(REG_OFFSET_BG1CNT) & 0xFFFC);
- SetGpuRegBits(REG_OFFSET_BG1CNT, gNamingScreenData->bg1Priority);
+ SetGpuRegBits(REG_OFFSET_BG1CNT, sNamingScreen->bg1Priority);
SetGpuReg(REG_OFFSET_BG2CNT, GetGpuReg(REG_OFFSET_BG2CNT) & 0xFFFC);
- SetGpuRegBits(REG_OFFSET_BG2CNT, gNamingScreenData->bg2Priority);
+ SetGpuRegBits(REG_OFFSET_BG2CNT, sNamingScreen->bg2Priority);
}
-static void sub_80E501C(void)
+static void NamingScreen_ShowBgs(void)
{
ShowBg(0);
ShowBg(1);
@@ -1815,7 +2047,8 @@ static void sub_80E501C(void)
ShowBg(3);
}
-static bool8 IsLetter(u8 character)
+// Always false (presumably for non-latin languages)
+static bool8 IsWideLetter(u8 character)
{
u8 i;
@@ -1827,69 +2060,71 @@ static bool8 IsLetter(u8 character)
return FALSE;
}
-static void sub_80E5074(void)
+// Debug? Unused, and arguments aren't sensible for non-player screens.
+static void Debug_NamingScreenPlayer(void)
{
- DoNamingScreen(0, gSaveBlock2Ptr->playerName, gSaveBlock2Ptr->playerGender, 0, 0, CB2_ReturnToFieldWithOpenMenu);
+ DoNamingScreen(NAMING_SCREEN_PLAYER, gSaveBlock2Ptr->playerName, gSaveBlock2Ptr->playerGender, 0, 0, CB2_ReturnToFieldWithOpenMenu);
}
-static void sub_80E509C(void)
+static void Debug_NamingScreenBox(void)
{
- DoNamingScreen(1, gSaveBlock2Ptr->playerName, gSaveBlock2Ptr->playerGender, 0, 0, CB2_ReturnToFieldWithOpenMenu);
+ DoNamingScreen(NAMING_SCREEN_BOX, gSaveBlock2Ptr->playerName, gSaveBlock2Ptr->playerGender, 0, 0, CB2_ReturnToFieldWithOpenMenu);
}
-static void sub_80E50C4(void)
+static void Debug_NamingScreenCaughtMon(void)
{
- DoNamingScreen(2, gSaveBlock2Ptr->playerName, gSaveBlock2Ptr->playerGender, 0, 0, CB2_ReturnToFieldWithOpenMenu);
+ DoNamingScreen(NAMING_SCREEN_CAUGHT_MON, gSaveBlock2Ptr->playerName, gSaveBlock2Ptr->playerGender, 0, 0, CB2_ReturnToFieldWithOpenMenu);
}
-static void sub_80E50EC(void)
+static void Debug_NamingScreenNickname(void)
{
- DoNamingScreen(3, gSaveBlock2Ptr->playerName, gSaveBlock2Ptr->playerGender, 0, 0, CB2_ReturnToFieldWithOpenMenu);
+ DoNamingScreen(NAMING_SCREEN_NICKNAME, gSaveBlock2Ptr->playerName, gSaveBlock2Ptr->playerGender, 0, 0, CB2_ReturnToFieldWithOpenMenu);
}
//--------------------------------------------------
// Forward-declared variables
//--------------------------------------------------
-static const struct NamingScreenTemplate playerNamingScreenTemplate =
+// Initial pages below are pointless, they're overwritten with KBPAGE_LETTERS_UPPER in MainState_FadeIn()
+static const struct NamingScreenTemplate sPlayerNamingScreenTemplate =
{
- .copyExistingString = 0,
+ .copyExistingString = FALSE,
.maxChars = 7,
.iconFunction = 1,
- .addGenderIcon = 0,
+ .addGenderIcon = FALSE,
.initialPage = KBPAGE_LETTERS_UPPER,
.unused = 35,
.title = gText_YourName,
};
-static const struct NamingScreenTemplate pcBoxNamingTemplate =
+static const struct NamingScreenTemplate sPCBoxNamingTemplate =
{
- .copyExistingString = 0,
+ .copyExistingString = FALSE,
.maxChars = 8,
.iconFunction = 2,
- .addGenderIcon = 0,
+ .addGenderIcon = FALSE,
.initialPage = KBPAGE_LETTERS_UPPER,
.unused = 19,
.title = gText_BoxName,
};
-static const struct NamingScreenTemplate monNamingScreenTemplate =
+static const struct NamingScreenTemplate sMonNamingScreenTemplate =
{
- .copyExistingString = 0,
+ .copyExistingString = FALSE,
.maxChars = 10,
.iconFunction = 3,
- .addGenderIcon = 1,
+ .addGenderIcon = TRUE,
.initialPage = KBPAGE_LETTERS_UPPER,
.unused = 35,
.title = gText_PkmnsNickname,
};
-static const struct NamingScreenTemplate wandaWordsScreenTemplate =
+static const struct NamingScreenTemplate sWaldaWordsScreenTemplate =
{
- .copyExistingString = 1,
+ .copyExistingString = TRUE,
.maxChars = 15,
.iconFunction = 4,
- .addGenderIcon = 0,
+ .addGenderIcon = FALSE,
.initialPage = KBPAGE_LETTERS_UPPER,
.unused = 11,
.title = gText_TellHimTheWords,
@@ -1897,14 +2132,14 @@ static const struct NamingScreenTemplate wandaWordsScreenTemplate =
static const struct NamingScreenTemplate *const sNamingScreenTemplates[] =
{
- &playerNamingScreenTemplate,
- &pcBoxNamingTemplate,
- &monNamingScreenTemplate,
- &monNamingScreenTemplate,
- &wandaWordsScreenTemplate,
+ [NAMING_SCREEN_PLAYER] = &sPlayerNamingScreenTemplate,
+ [NAMING_SCREEN_BOX] = &sPCBoxNamingTemplate,
+ [NAMING_SCREEN_CAUGHT_MON] = &sMonNamingScreenTemplate,
+ [NAMING_SCREEN_NICKNAME] = &sMonNamingScreenTemplate,
+ [NAMING_SCREEN_WALDA] = &sWaldaWordsScreenTemplate,
};
-const struct OamData gOamData_858BFEC =
+static const struct OamData sOam_8x8 =
{
.y = 0,
.affineMode = ST_OAM_AFFINE_OFF,
@@ -1918,7 +2153,7 @@ const struct OamData gOamData_858BFEC =
.paletteNum = 0,
};
-const struct OamData gOamData_858BFF4 =
+static const struct OamData sOam_16x16 =
{
.y = 0,
.affineMode = ST_OAM_AFFINE_OFF,
@@ -1932,7 +2167,7 @@ const struct OamData gOamData_858BFF4 =
.paletteNum = 0,
};
-const struct OamData gOamData_858BFFC =
+static const struct OamData sOam_32x16 =
{
.y = 0,
.affineMode = ST_OAM_AFFINE_OFF,
@@ -1946,7 +2181,7 @@ const struct OamData gOamData_858BFFC =
.paletteNum = 0,
};
-static const struct Subsprite gUnknown_0858C004[] =
+static const struct Subsprite sSubsprites_PageSwapFrame[] =
{
{
.x = -20,
@@ -2014,7 +2249,7 @@ static const struct Subsprite gUnknown_0858C004[] =
}
};
-static const struct Subsprite gUnknown_0858C024[] =
+static const struct Subsprite sSubsprites_PageSwapText[] =
{
{
.x = -12,
@@ -2034,7 +2269,7 @@ static const struct Subsprite gUnknown_0858C024[] =
}
};
-static const struct Subsprite gUnknown_0858C02C[] =
+static const struct Subsprite sSubsprites_Button[] =
{
{
.x = -20,
@@ -2086,7 +2321,7 @@ static const struct Subsprite gUnknown_0858C02C[] =
}
};
-static const struct Subsprite gUnknown_0858C044[] =
+static const struct Subsprite sSubsprites_PCIcon[] =
{
{
.x = -8,
@@ -2114,186 +2349,186 @@ static const struct Subsprite gUnknown_0858C044[] =
}
};
-static const struct SubspriteTable gUnknown_0858C050[] =
+static const struct SubspriteTable sSubspriteTable_PageSwapFrame[] =
{
- {ARRAY_COUNT(gUnknown_0858C004), gUnknown_0858C004}
+ {ARRAY_COUNT(sSubsprites_PageSwapFrame), sSubsprites_PageSwapFrame}
};
-static const struct SubspriteTable gUnknown_0858C058[] =
+static const struct SubspriteTable sSubspriteTable_PageSwapText[] =
{
- {ARRAY_COUNT(gUnknown_0858C024), gUnknown_0858C024},
- {ARRAY_COUNT(gUnknown_0858C024), gUnknown_0858C024},
- {ARRAY_COUNT(gUnknown_0858C024), gUnknown_0858C024}
+ {ARRAY_COUNT(sSubsprites_PageSwapText), sSubsprites_PageSwapText},
+ {ARRAY_COUNT(sSubsprites_PageSwapText), sSubsprites_PageSwapText},
+ {ARRAY_COUNT(sSubsprites_PageSwapText), sSubsprites_PageSwapText}
};
-static const struct SubspriteTable gUnknown_0858C070[] =
+static const struct SubspriteTable sSubspriteTable_Button[] =
{
- {ARRAY_COUNT(gUnknown_0858C02C), gUnknown_0858C02C}
+ {ARRAY_COUNT(sSubsprites_Button), sSubsprites_Button}
};
-static const struct SubspriteTable gUnknown_0858C078[] =
+static const struct SubspriteTable sSubspriteTable_PCIcon[] =
{
- {ARRAY_COUNT(gUnknown_0858C044), gUnknown_0858C044}
+ {ARRAY_COUNT(sSubsprites_PCIcon), sSubsprites_PCIcon}
};
-static const struct SpriteFrameImage gUnknown_0858C080[] =
+static const struct SpriteFrameImage sImageTable_PCIcon[] =
{
- {gSpriteImage_858BBF8, sizeof(gSpriteImage_858BBF8)},
- {gSpriteImage_858BCB8, sizeof(gSpriteImage_858BCB8)},
+ {sPCIconOff_Gfx, sizeof(sPCIconOff_Gfx)},
+ {sPCIconOn_Gfx, sizeof(sPCIconOn_Gfx)},
};
-static const union AnimCmd gSpriteAnim_858C090[] =
+static const union AnimCmd sAnim_Loop[] =
{
ANIMCMD_FRAME(0, 1),
ANIMCMD_JUMP(0)
};
-static const union AnimCmd gSpriteAnim_858C098[] =
+static const union AnimCmd sAnim_CursorSquish[] =
{
ANIMCMD_FRAME(4, 8),
ANIMCMD_FRAME(8, 8),
ANIMCMD_END
};
-static const union AnimCmd gSpriteAnim_858C0A4[] =
+static const union AnimCmd sAnim_PCIcon[] =
{
ANIMCMD_FRAME(0, 2),
ANIMCMD_FRAME(1, 2),
ANIMCMD_JUMP(0)
};
-static const union AnimCmd *const gSpriteAnimTable_858C0B0[] =
+static const union AnimCmd *const sAnims_Loop[] =
{
- gSpriteAnim_858C090
+ sAnim_Loop
};
-static const union AnimCmd *const gSpriteAnimTable_858C0B4[] =
+static const union AnimCmd *const sAnims_Cursor[] =
{
- gSpriteAnim_858C090,
- gSpriteAnim_858C098
+ sAnim_Loop,
+ sAnim_CursorSquish
};
-static const union AnimCmd *const gSpriteAnimTable_858C0BC[] =
+static const union AnimCmd *const sAnims_PCIcon[] =
{
- gSpriteAnim_858C0A4
+ sAnim_PCIcon
};
-static const struct SpriteTemplate gUnknown_0858C0C0 =
+static const struct SpriteTemplate sSpriteTemplate_PageSwapFrame =
{
- .tileTag = 0x0002,
- .paletteTag = 0x0004,
- .oam = &gOamData_858BFEC,
- .anims = gSpriteAnimTable_858C0B0,
+ .tileTag = GFXTAG_PAGE_SWAP_FRAME,
+ .paletteTag = PALTAG_PAGE_SWAP,
+ .oam = &sOam_8x8,
+ .anims = sAnims_Loop,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_80E4084
+ .callback = SpriteCB_PageSwap
};
-static const struct SpriteTemplate gUnknown_0858C0D8 =
+static const struct SpriteTemplate sSpriteTemplate_PageSwapButton =
{
- .tileTag = 0x0003,
- .paletteTag = 0x0001,
- .oam = &gOamData_858BFFC,
- .anims = gSpriteAnimTable_858C0B0,
+ .tileTag = GFXTAG_PAGE_SWAP_BUTTON,
+ .paletteTag = PALTAG_PAGE_SWAP_UPPER,
+ .oam = &sOam_32x16,
+ .anims = sAnims_Loop,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = SpriteCallbackDummy
};
-static const struct SpriteTemplate gUnknown_0858C0F0 =
+static const struct SpriteTemplate sSpriteTemplate_PageSwapText =
{
- .tileTag = 0x0004,
- .paletteTag = 0x0004,
- .oam = &gOamData_858BFEC,
- .anims = gSpriteAnimTable_858C0B0,
+ .tileTag = GFXTAG_PAGE_SWAP_UPPER,
+ .paletteTag = PALTAG_PAGE_SWAP,
+ .oam = &sOam_8x8,
+ .anims = sAnims_Loop,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = SpriteCallbackDummy
};
-static const struct SpriteTemplate gUnknown_0858C108 =
+static const struct SpriteTemplate sSpriteTemplate_BackButton =
{
- .tileTag = 0x0000,
- .paletteTag = 0x0006,
- .oam = &gOamData_858BFEC,
- .anims = gSpriteAnimTable_858C0B0,
+ .tileTag = GFXTAG_BACK_BUTTON,
+ .paletteTag = PALTAG_BACK_BUTTON,
+ .oam = &sOam_8x8,
+ .anims = sAnims_Loop,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = SpriteCallbackDummy
};
-static const struct SpriteTemplate gUnknown_0858C120 =
+static const struct SpriteTemplate sSpriteTemplate_OkButton =
{
- .tileTag = 0x0001,
- .paletteTag = 0x0007,
- .oam = &gOamData_858BFEC,
- .anims = gSpriteAnimTable_858C0B0,
+ .tileTag = GFXTAG_OK_BUTTON,
+ .paletteTag = PALTAG_OK_BUTTON,
+ .oam = &sOam_8x8,
+ .anims = sAnims_Loop,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = SpriteCallbackDummy
};
-static const struct SpriteTemplate gUnknown_0858C138 =
+static const struct SpriteTemplate sSpriteTemplate_Cursor =
{
- .tileTag = 0x0007,
- .paletteTag = 0x0005,
- .oam = &gOamData_858BFF4,
- .anims = gSpriteAnimTable_858C0B4,
+ .tileTag = GFXTAG_CURSOR,
+ .paletteTag = PALTAG_CURSOR,
+ .oam = &sOam_16x16,
+ .anims = sAnims_Cursor,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_80E3B30
+ .callback = SpriteCB_Cursor
};
static const struct SpriteTemplate sSpriteTemplate_InputArrow =
{
- .tileTag = 0x000A,
- .paletteTag = 0x0003,
- .oam = &gOamData_858BFEC,
- .anims = gSpriteAnimTable_858C0B0,
+ .tileTag = GFXTAG_INPUT_ARROW,
+ .paletteTag = PALTAG_PAGE_SWAP_OTHERS,
+ .oam = &sOam_8x8,
+ .anims = sAnims_Loop,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_80E3C20
+ .callback = SpriteCB_InputArrow
};
static const struct SpriteTemplate sSpriteTemplate_Underscore =
{
- .tileTag = 0x000B,
- .paletteTag = 0x0003,
- .oam = &gOamData_858BFEC,
- .anims = gSpriteAnimTable_858C0B0,
+ .tileTag = GFXTAG_UNDERSCORE,
+ .paletteTag = PALTAG_PAGE_SWAP_OTHERS,
+ .oam = &sOam_8x8,
+ .anims = sAnims_Loop,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_80E3C6C
+ .callback = SpriteCB_Underscore
};
-static const struct SpriteTemplate gUnknown_0858C180 =
+static const struct SpriteTemplate sSpriteTemplate_PCIcon =
{
.tileTag = 0xFFFF,
- .paletteTag = 0x0000,
- .oam = &gOamData_858BFEC,
- .anims = gSpriteAnimTable_858C0BC,
- .images = gUnknown_0858C080,
+ .paletteTag = PALTAG_PC_ICON,
+ .oam = &sOam_8x8,
+ .anims = sAnims_PCIcon,
+ .images = sImageTable_PCIcon,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = SpriteCallbackDummy
};
static const u8* const sNamingScreenKeyboardText[KBPAGE_COUNT][KBROW_COUNT] =
{
- [KBPAGE_LETTERS_LOWER] =
+ [KEYBOARD_LETTERS_LOWER] =
{
gText_NamingScreenKeyboard_abcdef,
gText_NamingScreenKeyboard_ghijkl,
gText_NamingScreenKeyboard_mnopqrs,
gText_NamingScreenKeyboard_tuvwxyz
},
- [KBPAGE_LETTERS_UPPER] =
+ [KEYBOARD_LETTERS_UPPER] =
{
gText_NamingScreenKeyboard_ABCDEF,
gText_NamingScreenKeyboard_GHIJKL,
gText_NamingScreenKeyboard_MNOPQRS,
gText_NamingScreenKeyboard_TUVWXYZ
},
- [KBPAGE_SYMBOLS] =
+ [KEYBOARD_SYMBOLS] =
{
gText_NamingScreenKeyboard_01234,
gText_NamingScreenKeyboard_56789,
@@ -2302,34 +2537,34 @@ static const u8* const sNamingScreenKeyboardText[KBPAGE_COUNT][KBROW_COUNT] =
},
};
-static const struct SpriteSheet gUnknown_0858C1C8[] =
-{
- {gNamingScreenRWindow_Gfx + 0x280, 0x1E0, 0x0000},
- {gNamingScreenRWindow_Gfx + 0x460, 0x1E0, 0x0001},
- {gNamingScreenRWindow_Gfx, 0x280, 0x0002},
- {gNamingScreenKeyboardButton_Gfx + 0x20, 0x100, 0x0003},
- {gNamingScreenROptions_Gfx, 0x060, 0x0004},
- {gNamingScreenROptions_Gfx + 0xA0, 0x060, 0x0005},
- {gNamingScreenROptions_Gfx + 0x140, 0x060, 0x0006},
- {gNamingScreenCursor_Gfx, 0x080, 0x0007},
- {gNamingScreenCursor_Gfx + 0xA0, 0x080, 0x0008},
- {gNamingScreenCursor_Gfx + 0x140, 0x080, 0x0009},
- {gNamingScreenRightPointingTriangleTiles, 0x020, 0x000A},
- {gNamingScreenUnderscoreTiles, 0x020, 0x000B},
- {NULL}
-};
-
-static const struct SpritePalette gUnknown_0858C230[] =
-{
- {gNamingScreenMenu_Pal, 0x0000},
- {gNamingScreenMenu_Pal + 0x10, 0x0001},
- {gNamingScreenMenu_Pal + 0x20, 0x0002},
- {gNamingScreenMenu_Pal + 0x30, 0x0003},
- {gNamingScreenMenu_Pal + 0x40, 0x0004},
- {gNamingScreenMenu_Pal + 0x50, 0x0005},
- {gNamingScreenMenu_Pal + 0x40, 0x0006},
- {gNamingScreenMenu_Pal + 0x40, 0x0007},
- {NULL}
+static const struct SpriteSheet sSpriteSheets[] =
+{
+ {gNamingScreenRWindow_Gfx + 0x280, 0x1E0, GFXTAG_BACK_BUTTON},
+ {gNamingScreenRWindow_Gfx + 0x460, 0x1E0, GFXTAG_OK_BUTTON},
+ {gNamingScreenRWindow_Gfx, 0x280, GFXTAG_PAGE_SWAP_FRAME},
+ {gNamingScreenPageButton_Gfx + 0x20, 0x100, GFXTAG_PAGE_SWAP_BUTTON},
+ {gNamingScreenROptions_Gfx, 0x060, GFXTAG_PAGE_SWAP_UPPER},
+ {gNamingScreenROptions_Gfx + 0xA0, 0x060, GFXTAG_PAGE_SWAP_LOWER},
+ {gNamingScreenROptions_Gfx + 0x140, 0x060, GFXTAG_PAGE_SWAP_OTHERS},
+ {gNamingScreenCursor_Gfx, 0x080, GFXTAG_CURSOR},
+ {gNamingScreenCursor_Gfx + 0xA0, 0x080, GFXTAG_CURSOR_SQUISHED},
+ {gNamingScreenCursor_Gfx + 0x140, 0x080, GFXTAG_CURSOR_FILLED},
+ {gNamingScreenInputArrow_Gfx, 0x020, GFXTAG_INPUT_ARROW},
+ {gNamingScreenUnderscore_Gfx, 0x020, GFXTAG_UNDERSCORE},
+ {}
+};
+
+static const struct SpritePalette sSpritePalettes[] =
+{
+ {gNamingScreenMenu_Pal, PALTAG_PC_ICON},
+ {gNamingScreenMenu_Pal + 0x10, PALTAG_PAGE_SWAP_UPPER},
+ {gNamingScreenMenu_Pal + 0x20, PALTAG_PAGE_SWAP_LOWER},
+ {gNamingScreenMenu_Pal + 0x30, PALTAG_PAGE_SWAP_OTHERS},
+ {gNamingScreenMenu_Pal + 0x40, PALTAG_PAGE_SWAP},
+ {gNamingScreenMenu_Pal + 0x50, PALTAG_CURSOR},
+ {gNamingScreenMenu_Pal + 0x40, PALTAG_BACK_BUTTON},
+ {gNamingScreenMenu_Pal + 0x40, PALTAG_OK_BUTTON},
+ {}
};
diff --git a/src/new_game.c b/src/new_game.c
index 290c0c2bb..55a568132 100644
--- a/src/new_game.c
+++ b/src/new_game.c
@@ -197,7 +197,7 @@ void NewGameInitData(void)
WarpToTruck();
ScriptContext2_RunNewScript(EventScript_ResetAllMapFlags);
ResetMiniGamesResults();
- copy_strings_to_sav1();
+ InitUnionRoomChatRegisteredTexts();
InitLilycoveLady();
ResetAllApprenticeData();
ClearRankingHallRecords();
diff --git a/src/option_menu.c b/src/option_menu.c
index e0473b5c3..1cf0bad2e 100644
--- a/src/option_menu.c
+++ b/src/option_menu.c
@@ -77,11 +77,9 @@ static void DrawTextOption(void);
static void DrawOptionMenuTexts(void);
static void sub_80BB154(void);
-// EWRAM vars
EWRAM_DATA static bool8 sArrowPressed = FALSE;
-// const rom data
-static const u16 sUnknown_0855C604[] = INCBIN_U16("graphics/misc/option_menu_text.gbapal");
+static const u16 sOptionMenuText_Pal[] = INCBIN_U16("graphics/misc/option_menu_text.gbapal");
// note: this is only used in the Japanese release
static const u8 sEqualSignGfx[] = INCBIN_U8("graphics/misc/option_menu_equals_sign.4bpp");
@@ -141,7 +139,7 @@ static const struct BgTemplate sOptionMenuBgTemplates[] =
}
};
-static const u16 sUnknown_0855C6A0[] = {0x7E51};
+static const u16 sOptionMenuBg_Pal[] = {RGB(17, 18, 31)};
// code
static void MainCB2(void)
@@ -209,12 +207,12 @@ void CB2_InitOptionMenu(void)
gMain.state++;
break;
case 4:
- LoadPalette(sUnknown_0855C6A0, 0, sizeof(sUnknown_0855C6A0));
+ LoadPalette(sOptionMenuBg_Pal, 0, sizeof(sOptionMenuBg_Pal));
LoadPalette(GetWindowFrameTilesPal(gSaveBlock2Ptr->optionsWindowFrameType)->pal, 0x70, 0x20);
gMain.state++;
break;
case 5:
- LoadPalette(sUnknown_0855C604, 0x10, sizeof(sUnknown_0855C604));
+ LoadPalette(sOptionMenuText_Pal, 16, sizeof(sOptionMenuText_Pal));
gMain.state++;
break;
case 6:
diff --git a/src/overworld.c b/src/overworld.c
index 72bc38693..d18e3d3bc 100644
--- a/src/overworld.c
+++ b/src/overworld.c
@@ -7,10 +7,11 @@
#include "cable_club.h"
#include "clock.h"
#include "event_data.h"
+#include "event_object_movement.h"
+#include "event_scripts.h"
#include "field_camera.h"
#include "field_control_avatar.h"
#include "field_effect.h"
-#include "event_object_movement.h"
#include "field_message_box.h"
#include "field_player_avatar.h"
#include "field_screen_effect.h"
@@ -22,6 +23,7 @@
#include "fldeff.h"
#include "gpu_regs.h"
#include "heal_location.h"
+#include "io_reg.h"
#include "link.h"
#include "link_rfu.h"
#include "load_save.h"
@@ -44,7 +46,7 @@
#include "save.h"
#include "save_location.h"
#include "script.h"
-#include "script_pokemon_util_80F87D8.h"
+#include "script_pokemon_util.h"
#include "secret_base.h"
#include "sound.h"
#include "start_menu.h"
@@ -82,58 +84,36 @@
#define FACING_FORCED_LEFT 9
#define FACING_FORCED_RIGHT 10
-// event scripts
-extern const u8 EventScript_WhiteOut[];
-extern const u8 EventScript_ResetMrBriney[];
-extern const u8 EventScript_DoLinkRoomExit[];
-extern const u8 CableClub_EventScript_TooBusyToNotice[];
-extern const u8 CableClub_EventScript_ReadTrainerCard[];
-extern const u8 CableClub_EventScript_ReadTrainerCardColored[];
-extern const u8 EventScript_BattleColosseum_4P_PlayerSpot0[];
-extern const u8 EventScript_BattleColosseum_4P_PlayerSpot1[];
-extern const u8 EventScript_BattleColosseum_4P_PlayerSpot2[];
-extern const u8 EventScript_BattleColosseum_4P_PlayerSpot3[];
-extern const u8 EventScript_RecordCenter_Spot0[];
-extern const u8 EventScript_RecordCenter_Spot1[];
-extern const u8 EventScript_RecordCenter_Spot2[];
-extern const u8 EventScript_RecordCenter_Spot3[];
-extern const u8 EventScript_BattleColosseum_2P_PlayerSpot0[];
-extern const u8 EventScript_BattleColosseum_2P_PlayerSpot1[];
-extern const u8 EventScript_TradeCenter_Chair1[];
-extern const u8 EventScript_TradeCenter_Chair0[];
-extern const u8 EventScript_ConfirmLeaveTradeRoom[];
-extern const u8 EventScript_TerminateLink[];
-
extern const struct MapLayout *const gMapLayouts[];
extern const struct MapHeader *const *const gMapGroups[];
-extern const int gMaxFlashLevel;
-extern const u16 gOverworldBackgroundLayerFlags[];
static void Overworld_ResetStateAfterWhiteOut(void);
-static void c2_80567AC(void);
+static void CB2_ReturnToFieldLocal(void);
+static void CB2_ReturnToFieldLink(void);
+static void CB2_LoadMapOnReturnToFieldCableClub(void);
static void CB2_LoadMap2(void);
static void VBlankCB_Field(void);
static void SpriteCB_LinkPlayer(struct Sprite *sprite);
static void ChooseAmbientCrySpecies(void);
-static void do_load_map_stuff_loop(u8 *state);
-static bool32 map_loading_iteration_3(u8 *state);
-static bool32 sub_8086638(u8 *state);
-static bool32 load_map_stuff(u8 *state, u32);
-static bool32 map_loading_iteration_2_link(u8 *state);
-static void mli4_mapscripts_and_other(void);
+static void DoMapLoadLoop(u8 *state);
+static bool32 LoadMapInStepsLocal(u8 *state, bool32);
+static bool32 LoadMapInStepsLink(u8 *state);
+static bool32 ReturnToFieldLocal(u8 *state);
+static bool32 ReturnToFieldLink(u8 *state);
+static void InitObjectEventsLink(void);
+static void InitObjectEventsLocal(void);
static void InitOverworldGraphicsRegisters(void);
static u8 GetSpriteForLinkedPlayer(u8);
static u16 KeyInterCB_SendNothing(u32 a1);
-static void sub_80867C8(void);
+static void ResetMirageTowerAndSaveBlockPtrs(void);
static void sub_80867D8(void);
-static void sub_8086AE4(void);
-static void sub_80869DC(void);
-static void sub_8086B14(void);
+static void OffsetCameraFocusByLinkPlayerId(void);
+static void SpawnLinkPlayers(void);
static void SetCameraToTrackGuestPlayer(void);
-static void sub_8086988(bool32 arg0);
-static void sub_8086A80(void);
+static void ResumeMap(bool32 arg0);
+static void SetCameraToTrackPlayer(void);
static void sub_8086A68(void);
-static void sub_8086860(void);
+static void InitViewGraphics(void);
static void SetCameraToTrackGuestPlayer_2(void);
static void CreateLinkPlayerSprites(void);
static void ClearAllPlayerKeys(void);
@@ -155,7 +135,7 @@ static void InitLinkPlayerObjectEventPos(struct ObjectEvent *objEvent, s16 x, s1
static void sub_80877DC(u8 linkPlayerId, u8 a2);
static void sub_808780C(u8 linkPlayerId);
static u8 GetSpriteForLinkedPlayer(u8 linkPlayerId);
-static void sub_8087584(void);
+static void RunTerminateLinkScript(void);
static u32 GetLinkSendQueueLength(void);
static void ZeroLinkPlayerObjectEvent(struct LinkPlayerObjectEvent *linkPlayerObjEvent);
static const u8 *TryInteractWithPlayer(struct TradeRoomPlayer *a1);
@@ -181,14 +161,14 @@ static void CB1_UpdateLinkState(void);
static void SetKeyInterceptCallback(u16 (*func)(u32));
static void SetFieldVBlankCallback(void);
static void FieldClearVBlankHBlankCallbacks(void);
-static void sub_8085810(void);
+static void TransitionMapMusic(void);
static u8 GetAdjustedInitialTransitionFlags(struct InitialPlayerAvatarState *playerStruct, u16 a2, u8 a3);
static u8 GetAdjustedInitialDirection(struct InitialPlayerAvatarState *playerStruct, u8 a2, u16 a3, u8 a4);
static u16 GetCenterScreenMetatileBehavior(void);
// IWRAM bss vars
static void *sUnusedOverworldCallback;
-static u8 sPlayerTradingStates[4];
+static u8 sPlayerTradingStates[MAX_LINK_PLAYERS];
// This callback is called with a player's key code. It then returns an
// adjusted key code, effectively intercepting the input before anything
// can process it.
@@ -208,13 +188,13 @@ u8 gLocalLinkPlayerId; // This is our player id in a multiplayer mode.
u8 gFieldLinkPlayerCount;
// EWRAM vars
-EWRAM_DATA static u8 sUnknown_020322D8 = 0;
+EWRAM_DATA static u8 sObjectEventLoadFlag = 0;
EWRAM_DATA struct WarpData gLastUsedWarp = {0};
EWRAM_DATA static struct WarpData sWarpDestination = {0}; // new warp position
-EWRAM_DATA static struct WarpData gFixedDiveWarp = {0};
-EWRAM_DATA static struct WarpData gFixedHoleWarp = {0};
+EWRAM_DATA static struct WarpData sFixedDiveWarp = {0};
+EWRAM_DATA static struct WarpData sFixedHoleWarp = {0};
EWRAM_DATA static u16 sLastMapSectionId = 0;
-EWRAM_DATA static struct InitialPlayerAvatarState gInitialPlayerAvatarState = {0};
+EWRAM_DATA static struct InitialPlayerAvatarState sInitialPlayerAvatarState = {0};
EWRAM_DATA static u16 sAmbientCrySpecies = 0;
EWRAM_DATA static bool8 sIsAmbientCryWaterMon = FALSE;
EWRAM_DATA struct LinkPlayerObjectEvent gLinkPlayerObjectEvents[4] = {0};
@@ -229,16 +209,9 @@ static const struct WarpData sDummyWarpData =
.y = -1,
};
-static const u8 sUnusedData[] =
+static const u32 sUnusedData[] =
{
- 0xB0, 0x04, 0x00, 0x00,
- 0x10, 0x0E, 0x00, 0x00,
- 0xB0, 0x04, 0x00, 0x00,
- 0x60, 0x09, 0x00, 0x00,
- 0x32, 0x00, 0x00, 0x00,
- 0x50, 0x00, 0x00, 0x00,
- 0xD4, 0xFF, 0xFF, 0xFF,
- 0x2C, 0x00, 0x00, 0x00,
+ 1200, 3600, 1200, 2400, 50, 80, -44, 44
};
const struct UCoords32 gDirectionToVectors[] =
@@ -547,11 +520,11 @@ void Overworld_SetObjEventTemplateMovementType(u8 localId, u8 movementType)
}
}
-static void mapdata_load_assets_to_gpu_and_full_redraw(void)
+static void InitMapView(void)
{
- move_tilemap_camera_to_upper_left_corner();
- copy_map_tileset1_tileset2_to_vram(gMapHeader.mapLayout);
- apply_map_tileset1_tileset2_palette(gMapHeader.mapLayout);
+ ResetFieldCamera();
+ CopyMapTilesetsToVram(gMapHeader.mapLayout);
+ LoadMapTilesetPalettes(gMapHeader.mapLayout);
DrawWholeMapView();
InitTilesetAnimations();
}
@@ -568,14 +541,14 @@ void ApplyCurrentWarp(void)
{
gLastUsedWarp = gSaveBlock1Ptr->location;
gSaveBlock1Ptr->location = sWarpDestination;
- gFixedDiveWarp = sDummyWarpData;
- gFixedHoleWarp = sDummyWarpData;
+ sFixedDiveWarp = sDummyWarpData;
+ sFixedHoleWarp = sDummyWarpData;
}
static void ClearDiveAndHoleWarps(void)
{
- gFixedDiveWarp = sDummyWarpData;
- gFixedHoleWarp = sDummyWarpData;
+ sFixedDiveWarp = sDummyWarpData;
+ sFixedHoleWarp = sDummyWarpData;
}
static void SetWarpData(struct WarpData *warp, s8 mapGroup, s8 mapNum, s8 warpId, s8 x, s8 y)
@@ -717,25 +690,25 @@ void SetWarpDestinationToEscapeWarp(void)
void SetFixedDiveWarp(s8 mapGroup, s8 mapNum, s8 warpId, s8 x, s8 y)
{
- SetWarpData(&gFixedDiveWarp, mapGroup, mapNum, warpId, x, y);
+ SetWarpData(&sFixedDiveWarp, mapGroup, mapNum, warpId, x, y);
}
static void SetWarpDestinationToDiveWarp(void)
{
- sWarpDestination = gFixedDiveWarp;
+ sWarpDestination = sFixedDiveWarp;
}
void SetFixedHoleWarp(s8 mapGroup, s8 mapNum, s8 warpId, s8 x, s8 y)
{
- SetWarpData(&gFixedHoleWarp, mapGroup, mapNum, warpId, x, y);
+ SetWarpData(&sFixedHoleWarp, mapGroup, mapNum, warpId, x, y);
}
void SetWarpDestinationToFixedHoleWarp(s16 x, s16 y)
{
- if (IsDummyWarp(&gFixedHoleWarp) == TRUE)
+ if (IsDummyWarp(&sFixedHoleWarp) == TRUE)
sWarpDestination = gLastUsedWarp;
else
- SetWarpDestination(gFixedHoleWarp.mapGroup, gFixedHoleWarp.mapNum, -1, x, y);
+ SetWarpDestination(sFixedHoleWarp.mapGroup, sFixedHoleWarp.mapNum, -1, x, y);
}
static void SetWarpDestinationToContinueGameWarp(void)
@@ -787,7 +760,7 @@ static bool8 SetDiveWarp(u8 dir, u16 x, u16 y)
else
{
RunOnDiveWarpMapScript();
- if (IsDummyWarp(&gFixedDiveWarp))
+ if (IsDummyWarp(&sFixedDiveWarp))
return FALSE;
SetWarpDestinationToDiveWarp();
}
@@ -809,8 +782,10 @@ void LoadMapFromCameraTransition(u8 mapGroup, u8 mapNum)
s32 paletteIndex;
SetWarpDestination(mapGroup, mapNum, -1, -1, -1);
- if (gMapHeader.regionMapSectionId != 0x3A)
- sub_8085810();
+
+ // Dont transition map music between BF Outside West/East
+ if (gMapHeader.regionMapSectionId != MAPSEC_BATTLE_FRONTIER)
+ TransitionMapMusic();
ApplyCurrentWarp();
LoadCurrentMapData();
@@ -827,8 +802,8 @@ void LoadMapFromCameraTransition(u8 mapGroup, u8 mapNum)
Overworld_ClearSavedMusic();
RunOnTransitionMapScript();
InitMap();
- copy_map_tileset2_to_vram_2(gMapHeader.mapLayout);
- apply_map_tileset2_palette(gMapHeader.mapLayout);
+ CopySecondaryTilesetToVramUsingHeap(gMapHeader.mapLayout);
+ LoadSecondaryTilesetPalette(gMapHeader.mapLayout);
for (paletteIndex = 6; paletteIndex < 13; paletteIndex++)
ApplyWeatherGammaShiftToPal(paletteIndex);
@@ -840,17 +815,18 @@ void LoadMapFromCameraTransition(u8 mapGroup, u8 mapNum)
ResetFieldTasksArgs();
RunOnResumeMapScript();
- if (gMapHeader.regionMapSectionId != MAPSEC_BATTLE_FRONTIER || gMapHeader.regionMapSectionId != sLastMapSectionId)
+ if (gMapHeader.regionMapSectionId != MAPSEC_BATTLE_FRONTIER
+ || gMapHeader.regionMapSectionId != sLastMapSectionId)
ShowMapNamePopup();
}
-static void mli0_load_map(u32 a1)
+static void LoadMapFromWarp(bool32 a1)
{
bool8 isOutdoors;
bool8 isIndoors;
LoadCurrentMapData();
- if (!(sUnknown_020322D8 & 1))
+ if (!(sObjectEventLoadFlag & SKIP_OBJECT_EVENT_LOAD))
{
if (gMapHeader.mapLayoutId == LAYOUT_BATTLE_FRONTIER_BATTLE_PYRAMID_FLOOR)
LoadBattlePyramidObjectEventTemplates();
@@ -869,7 +845,7 @@ static void mli0_load_map(u32 a1)
ResetCyclingRoadChallengeData();
RestartWildEncounterImmunitySteps();
TryUpdateRandomTrainerRematches(gSaveBlock1Ptr->location.mapGroup, gSaveBlock1Ptr->location.mapNum);
- if (a1 != 1)
+ if (a1 != TRUE)
DoTimeBasedEvents();
SetSav1WeatherFromCurrMapHeader();
ChooseAmbientCrySpecies();
@@ -887,7 +863,7 @@ static void mli0_load_map(u32 a1)
else
InitMap();
- if (a1 != 1 && isIndoors)
+ if (a1 != TRUE && isIndoors)
{
UpdateTVScreensOnMap(gBackupMapLayout.width, gBackupMapLayout.height);
InitSecretBaseAppearance(TRUE);
@@ -896,24 +872,24 @@ static void mli0_load_map(u32 a1)
void ResetInitialPlayerAvatarState(void)
{
- gInitialPlayerAvatarState.direction = DIR_SOUTH;
- gInitialPlayerAvatarState.transitionFlags = PLAYER_AVATAR_FLAG_ON_FOOT;
+ sInitialPlayerAvatarState.direction = DIR_SOUTH;
+ sInitialPlayerAvatarState.transitionFlags = PLAYER_AVATAR_FLAG_ON_FOOT;
}
void StoreInitialPlayerAvatarState(void)
{
- gInitialPlayerAvatarState.direction = GetPlayerFacingDirection();
+ sInitialPlayerAvatarState.direction = GetPlayerFacingDirection();
if (TestPlayerAvatarFlags(PLAYER_AVATAR_FLAG_MACH_BIKE))
- gInitialPlayerAvatarState.transitionFlags = PLAYER_AVATAR_FLAG_MACH_BIKE;
+ sInitialPlayerAvatarState.transitionFlags = PLAYER_AVATAR_FLAG_MACH_BIKE;
else if (TestPlayerAvatarFlags(PLAYER_AVATAR_FLAG_ACRO_BIKE))
- gInitialPlayerAvatarState.transitionFlags = PLAYER_AVATAR_FLAG_ACRO_BIKE;
+ sInitialPlayerAvatarState.transitionFlags = PLAYER_AVATAR_FLAG_ACRO_BIKE;
else if (TestPlayerAvatarFlags(PLAYER_AVATAR_FLAG_SURFING))
- gInitialPlayerAvatarState.transitionFlags = PLAYER_AVATAR_FLAG_SURFING;
+ sInitialPlayerAvatarState.transitionFlags = PLAYER_AVATAR_FLAG_SURFING;
else if (TestPlayerAvatarFlags(PLAYER_AVATAR_FLAG_UNDERWATER))
- gInitialPlayerAvatarState.transitionFlags = PLAYER_AVATAR_FLAG_UNDERWATER;
+ sInitialPlayerAvatarState.transitionFlags = PLAYER_AVATAR_FLAG_UNDERWATER;
else
- gInitialPlayerAvatarState.transitionFlags = PLAYER_AVATAR_FLAG_ON_FOOT;
+ sInitialPlayerAvatarState.transitionFlags = PLAYER_AVATAR_FLAG_ON_FOOT;
}
static struct InitialPlayerAvatarState *GetInitialPlayerAvatarState(void)
@@ -921,11 +897,11 @@ static struct InitialPlayerAvatarState *GetInitialPlayerAvatarState(void)
struct InitialPlayerAvatarState playerStruct;
u8 mapType = GetCurrentMapType();
u16 metatileBehavior = GetCenterScreenMetatileBehavior();
- u8 transitionFlags = GetAdjustedInitialTransitionFlags(&gInitialPlayerAvatarState, metatileBehavior, mapType);
+ u8 transitionFlags = GetAdjustedInitialTransitionFlags(&sInitialPlayerAvatarState, metatileBehavior, mapType);
playerStruct.transitionFlags = transitionFlags;
- playerStruct.direction = GetAdjustedInitialDirection(&gInitialPlayerAvatarState, transitionFlags, metatileBehavior, mapType);
- gInitialPlayerAvatarState = playerStruct;
- return &gInitialPlayerAvatarState;
+ playerStruct.direction = GetAdjustedInitialDirection(&sInitialPlayerAvatarState, transitionFlags, metatileBehavior, mapType);
+ sInitialPlayerAvatarState = playerStruct;
+ return &sInitialPlayerAvatarState;
}
static u8 GetAdjustedInitialTransitionFlags(struct InitialPlayerAvatarState *playerStruct, u16 metatileBehavior, u8 mapType)
@@ -963,7 +939,7 @@ static u8 GetAdjustedInitialDirection(struct InitialPlayerAvatarState *playerStr
else if (MetatileBehavior_IsEastArrowWarp(metatileBehavior) == TRUE)
return DIR_WEST;
else if ((playerStruct->transitionFlags == PLAYER_AVATAR_FLAG_UNDERWATER && transitionFlags == PLAYER_AVATAR_FLAG_SURFING)
- || (playerStruct->transitionFlags == PLAYER_AVATAR_FLAG_SURFING && transitionFlags == PLAYER_AVATAR_FLAG_UNDERWATER ))
+ || (playerStruct->transitionFlags == PLAYER_AVATAR_FLAG_SURFING && transitionFlags == PLAYER_AVATAR_FLAG_UNDERWATER))
return playerStruct->direction;
else if (MetatileBehavior_IsLadder(metatileBehavior) == TRUE)
return playerStruct->direction;
@@ -1012,14 +988,15 @@ void SetCurrentMapLayout(u16 mapLayoutId)
gMapHeader.mapLayout = GetMapLayout();
}
-void sub_8085540(u8 var)
+void SetObjectEventLoadFlag(u8 flag)
{
- sUnknown_020322D8 = var;
+ sObjectEventLoadFlag = flag;
}
-u8 sub_808554C(void)
+// Unused, sObjectEventLoadFlag is read directly
+static u8 GetObjectEventLoadFlag(void)
{
- return sUnknown_020322D8;
+ return sObjectEventLoadFlag;
}
static bool16 ShouldLegendaryMusicPlayAtLocation(struct WarpData *warp)
@@ -1099,11 +1076,11 @@ u16 GetLocationMusic(struct WarpData *warp)
if (NoMusicInSotopolisWithLegendaries(warp) == TRUE)
return 0xFFFF;
else if (ShouldLegendaryMusicPlayAtLocation(warp) == TRUE)
- return MUS_OOAME;
+ return MUS_ABNORMAL_WEATHER;
else if (IsInflitratedSpaceCenter(warp) == TRUE)
- return MUS_MGM0;
+ return MUS_ENCOUNTER_MAGMA;
else if (IsInfiltratedWeatherInstitute(warp) == TRUE)
- return MUS_TOZAN;
+ return MUS_MT_CHIMNEY;
else
return Overworld_GetMapHeaderByGroupAndId(warp->mapGroup, warp->mapNum)->music;
}
@@ -1116,26 +1093,26 @@ u16 GetCurrLocationDefaultMusic(void)
if (gSaveBlock1Ptr->location.mapGroup == MAP_GROUP(ROUTE111)
&& gSaveBlock1Ptr->location.mapNum == MAP_NUM(ROUTE111)
&& GetSav1Weather() == WEATHER_SANDSTORM)
- return MUS_ASHROAD;
+ return MUS_ROUTE111;
music = GetLocationMusic(&gSaveBlock1Ptr->location);
- if (music != MUS_ROUTE_118)
+ if (music != MUS_ROUTE118)
{
return music;
}
else
{
if (gSaveBlock1Ptr->pos.x < 24)
- return MUS_DOORO_X1;
+ return MUS_ROUTE110;
else
- return MUS_GRANROAD;
+ return MUS_ROUTE119;
}
}
u16 GetWarpDestinationMusic(void)
{
u16 music = GetLocationMusic(&sWarpDestination);
- if (music != MUS_ROUTE_118)
+ if (music != MUS_ROUTE118)
{
return music;
}
@@ -1143,9 +1120,9 @@ u16 GetWarpDestinationMusic(void)
{
if (gSaveBlock1Ptr->location.mapGroup == MAP_GROUP(MAUVILLE_CITY)
&& gSaveBlock1Ptr->location.mapNum == MAP_NUM(MAUVILLE_CITY))
- return MUS_DOORO_X1;
+ return MUS_ROUTE110;
else
- return MUS_GRANROAD;
+ return MUS_ROUTE119;
}
}
@@ -1158,14 +1135,14 @@ void Overworld_PlaySpecialMapMusic(void)
{
u16 music = GetCurrLocationDefaultMusic();
- if (music != MUS_OOAME && music != 0xFFFF)
+ if (music != MUS_ABNORMAL_WEATHER && music != 0xFFFF)
{
if (gSaveBlock1Ptr->savedMusic)
music = gSaveBlock1Ptr->savedMusic;
else if (GetCurrentMapType() == MAP_TYPE_UNDERWATER)
- music = MUS_DEEPDEEP;
+ music = MUS_UNDERWATER;
else if (TestPlayerAvatarFlags(PLAYER_AVATAR_FLAG_SURFING))
- music = MUS_NAMINORI;
+ music = MUS_SURF;
}
if (music != GetCurrentMapMusic())
@@ -1179,21 +1156,21 @@ void Overworld_SetSavedMusic(u16 songNum)
void Overworld_ClearSavedMusic(void)
{
- gSaveBlock1Ptr->savedMusic = 0;
+ gSaveBlock1Ptr->savedMusic = MUS_DUMMY;
}
-static void sub_8085810(void)
+static void TransitionMapMusic(void)
{
if (FlagGet(FLAG_DONT_TRANSITION_MUSIC) != TRUE)
{
u16 newMusic = GetWarpDestinationMusic();
u16 currentMusic = GetCurrentMapMusic();
- if (newMusic != MUS_OOAME && newMusic != 0xFFFF)
+ if (newMusic != MUS_ABNORMAL_WEATHER && newMusic != 0xFFFF)
{
- if (currentMusic == MUS_DEEPDEEP || currentMusic == MUS_NAMINORI)
+ if (currentMusic == MUS_UNDERWATER || currentMusic == MUS_SURF)
return;
if (TestPlayerAvatarFlags(PLAYER_AVATAR_FLAG_SURFING))
- newMusic = MUS_NAMINORI;
+ newMusic = MUS_SURF;
}
if (newMusic != currentMusic)
{
@@ -1215,7 +1192,7 @@ void Overworld_ChangeMusicToDefault(void)
void Overworld_ChangeMusicTo(u16 newMusic)
{
u16 currentMusic = GetCurrentMapMusic();
- if (currentMusic != newMusic && currentMusic != MUS_OOAME)
+ if (currentMusic != newMusic && currentMusic != MUS_ABNORMAL_WEATHER)
FadeOutAndPlayNewMapMusic(newMusic, 8);
}
@@ -1234,7 +1211,7 @@ void TryFadeOutOldMapMusic(void)
u16 warpMusic = GetWarpDestinationMusic();
if (FlagGet(FLAG_DONT_TRANSITION_MUSIC) != TRUE && warpMusic != GetCurrentMapMusic())
{
- if (currentMusic == MUS_NAMINORI
+ if (currentMusic == MUS_SURF
&& VarGet(VAR_SKY_PILLAR_STATE) == 2
&& gSaveBlock1Ptr->location.mapGroup == MAP_GROUP(SOOTOPOLIS_CITY)
&& gSaveBlock1Ptr->location.mapNum == MAP_NUM(SOOTOPOLIS_CITY)
@@ -1444,7 +1421,7 @@ static void DoCB1_Overworld(u16 newKeys, u16 heldKeys)
{
struct FieldInput inputStruct;
- sub_808B578();
+ UpdatePlayerAvatarTransitionState();
FieldClearPlayerInput(&inputStruct);
FieldGetPlayerInput(&inputStruct, newKeys, heldKeys);
if (!ScriptContext2_IsEnabled())
@@ -1456,7 +1433,7 @@ static void DoCB1_Overworld(u16 newKeys, u16 heldKeys)
}
else
{
- player_step(inputStruct.dpadDirection, newKeys, heldKeys);
+ PlayerStep(inputStruct.dpadDirection, newKeys, heldKeys);
}
}
}
@@ -1477,7 +1454,7 @@ static void OverworldBasic(void)
BuildOamBuffer();
UpdatePaletteFade();
UpdateTilesetAnimations();
- do_scheduled_bg_tilemap_copies_to_vram();
+ DoScheduledBgTilemapCopiesToVram();
}
// This CB2 is used when starting
@@ -1507,7 +1484,7 @@ void SetUnusedCallback(void *func)
sUnusedOverworldCallback = func;
}
-static bool8 map_post_load_hook_exec(void)
+static bool8 RunFieldCallback(void)
{
if (gFieldCallback2)
{
@@ -1546,7 +1523,7 @@ void CB2_NewGame(void)
ScriptContext2_Disable();
gFieldCallback = ExecuteTruckSequence;
gFieldCallback2 = NULL;
- do_load_map_stuff_loop(&gMain.state);
+ DoMapLoadLoop(&gMain.state);
SetFieldVBlankCallback();
SetMainCallback1(CB1_Overworld);
SetMainCallback2(CB2_Overworld);
@@ -1554,7 +1531,7 @@ void CB2_NewGame(void)
void CB2_WhiteOut(void)
{
- u8 val;
+ u8 state;
if (++gMain.state >= 120)
{
@@ -1566,8 +1543,8 @@ void CB2_WhiteOut(void)
ScriptContext1_Init();
ScriptContext2_Disable();
gFieldCallback = FieldCB_WarpExitFadeFromBlack;
- val = 0;
- do_load_map_stuff_loop(&val);
+ state = 0;
+ DoMapLoadLoop(&state);
SetFieldVBlankCallback();
SetMainCallback1(CB1_Overworld);
SetMainCallback2(CB2_Overworld);
@@ -1586,13 +1563,13 @@ void CB2_LoadMap(void)
static void CB2_LoadMap2(void)
{
- do_load_map_stuff_loop(&gMain.state);
+ DoMapLoadLoop(&gMain.state);
SetFieldVBlankCallback();
SetMainCallback1(CB1_Overworld);
SetMainCallback2(CB2_Overworld);
}
-void sub_8086024(void)
+void CB2_ReturnToFieldContestHall(void)
{
if (!gMain.state)
{
@@ -1601,7 +1578,7 @@ void sub_8086024(void)
ScriptContext2_Disable();
SetMainCallback1(NULL);
}
- if (load_map_stuff(&gMain.state, 1))
+ if (LoadMapInStepsLocal(&gMain.state, TRUE))
{
SetFieldVBlankCallback();
SetMainCallback1(CB1_Overworld);
@@ -1613,12 +1590,12 @@ void CB2_ReturnToFieldCableClub(void)
{
FieldClearVBlankHBlankCallbacks();
gFieldCallback = FieldCB_ReturnToFieldWirelessLink;
- SetMainCallback2(c2_80567AC);
+ SetMainCallback2(CB2_LoadMapOnReturnToFieldCableClub);
}
-static void c2_80567AC(void)
+static void CB2_LoadMapOnReturnToFieldCableClub(void)
{
- if (map_loading_iteration_3(&gMain.state))
+ if (LoadMapInStepsLink(&gMain.state))
{
SetFieldVBlankCallback();
SetMainCallback1(CB1_UpdateLinkState);
@@ -1640,18 +1617,18 @@ void CB2_ReturnToField(void)
}
}
-void CB2_ReturnToFieldLocal(void)
+static void CB2_ReturnToFieldLocal(void)
{
- if (sub_8086638(&gMain.state))
+ if (ReturnToFieldLocal(&gMain.state))
{
SetFieldVBlankCallback();
SetMainCallback2(CB2_Overworld);
}
}
-void CB2_ReturnToFieldLink(void)
+static void CB2_ReturnToFieldLink(void)
{
- if (!sub_8087598() && map_loading_iteration_2_link(&gMain.state))
+ if (!sub_8087598() && ReturnToFieldLink(&gMain.state))
SetMainCallback2(CB2_Overworld);
}
@@ -1746,12 +1723,12 @@ void CB2_ContinueSavedGame(void)
ClearContinueGameWarpStatus();
SetWarpDestinationToContinueGameWarp();
WarpIntoMap();
- sub_80EDB44();
+ TryPutTodaysRivalTrainerOnAir();
SetMainCallback2(CB2_LoadMap);
}
else
{
- sub_80EDB44();
+ TryPutTodaysRivalTrainerOnAir();
gFieldCallback = sub_8086204;
SetMainCallback1(CB1_Overworld);
CB2_ReturnToField();
@@ -1812,7 +1789,7 @@ static void InitCurrentFlashLevelScanlineEffect(void)
}
}
-static bool32 map_loading_iteration_3(u8 *state)
+static bool32 LoadMapInStepsLink(u8 *state)
{
switch (*state)
{
@@ -1820,47 +1797,47 @@ static bool32 map_loading_iteration_3(u8 *state)
InitOverworldBgs();
ScriptContext1_Init();
ScriptContext2_Disable();
- sub_80867C8();
+ ResetMirageTowerAndSaveBlockPtrs();
sub_80867D8();
(*state)++;
break;
case 1:
- mli0_load_map(1);
+ LoadMapFromWarp(TRUE);
(*state)++;
break;
case 2:
- sub_8086988(TRUE);
+ ResumeMap(TRUE);
(*state)++;
break;
case 3:
- sub_8086AE4();
- sub_80869DC();
- sub_8086B14();
+ OffsetCameraFocusByLinkPlayerId();
+ InitObjectEventsLink();
+ SpawnLinkPlayers();
SetCameraToTrackGuestPlayer();
(*state)++;
break;
case 4:
InitCurrentFlashLevelScanlineEffect();
InitOverworldGraphicsRegisters();
- sub_8197200();
+ InitTextBoxGfxAndPrinters();
(*state)++;
break;
case 5:
- move_tilemap_camera_to_upper_left_corner();
+ ResetFieldCamera();
(*state)++;
break;
case 6:
- copy_map_tileset1_to_vram(gMapHeader.mapLayout);
+ CopyPrimaryTilesetToVram(gMapHeader.mapLayout);
(*state)++;
break;
case 7:
- copy_map_tileset2_to_vram(gMapHeader.mapLayout);
+ CopySecondaryTilesetToVram(gMapHeader.mapLayout);
(*state)++;
break;
case 8:
- if (free_temp_tile_data_buffers_if_possible() != TRUE)
+ if (FreeTempTileDataBuffersIfPossible() != TRUE)
{
- apply_map_tileset1_tileset2_palette(gMapHeader.mapLayout);
+ LoadMapTilesetPalettes(gMapHeader.mapLayout);
(*state)++;
}
break;
@@ -1881,7 +1858,7 @@ static bool32 map_loading_iteration_3(u8 *state)
(*state)++;
break;
case 12:
- if (map_post_load_hook_exec())
+ if (RunFieldCallback())
(*state)++;
break;
case 13:
@@ -1891,51 +1868,51 @@ static bool32 map_loading_iteration_3(u8 *state)
return FALSE;
}
-static bool32 load_map_stuff(u8 *state, u32 a2)
+static bool32 LoadMapInStepsLocal(u8 *state, bool32 a2)
{
switch (*state)
{
case 0:
FieldClearVBlankHBlankCallbacks();
- mli0_load_map(a2);
+ LoadMapFromWarp(a2);
(*state)++;
break;
case 1:
- sub_80867C8();
+ ResetMirageTowerAndSaveBlockPtrs();
sub_80867D8();
(*state)++;
break;
case 2:
- sub_8086988(a2);
+ ResumeMap(a2);
(*state)++;
break;
case 3:
- mli4_mapscripts_and_other();
- sub_8086A80();
+ InitObjectEventsLocal();
+ SetCameraToTrackPlayer();
(*state)++;
break;
case 4:
InitCurrentFlashLevelScanlineEffect();
InitOverworldGraphicsRegisters();
- sub_8197200();
+ InitTextBoxGfxAndPrinters();
(*state)++;
break;
case 5:
- move_tilemap_camera_to_upper_left_corner();
+ ResetFieldCamera();
(*state)++;
break;
case 6:
- copy_map_tileset1_to_vram(gMapHeader.mapLayout);
+ CopyPrimaryTilesetToVram(gMapHeader.mapLayout);
(*state)++;
break;
case 7:
- copy_map_tileset2_to_vram(gMapHeader.mapLayout);
+ CopySecondaryTilesetToVram(gMapHeader.mapLayout);
(*state)++;
break;
case 8:
- if (free_temp_tile_data_buffers_if_possible() != TRUE)
+ if (FreeTempTileDataBuffersIfPossible() != TRUE)
{
- apply_map_tileset1_tileset2_palette(gMapHeader.mapLayout);
+ LoadMapTilesetPalettes(gMapHeader.mapLayout);
(*state)++;
}
break;
@@ -1953,7 +1930,7 @@ static bool32 load_map_stuff(u8 *state, u32 a2)
(*state)++;
break;
case 12:
- if (map_post_load_hook_exec())
+ if (RunFieldCallback())
(*state)++;
break;
case 13:
@@ -1963,25 +1940,25 @@ static bool32 load_map_stuff(u8 *state, u32 a2)
return FALSE;
}
-static bool32 sub_8086638(u8 *state)
+static bool32 ReturnToFieldLocal(u8 *state)
{
switch (*state)
{
case 0:
- sub_80867C8();
+ ResetMirageTowerAndSaveBlockPtrs();
sub_80867D8();
- sub_8086988(0);
+ ResumeMap(FALSE);
sub_8086A68();
- sub_8086A80();
+ SetCameraToTrackPlayer();
(*state)++;
break;
case 1:
- sub_8086860();
- sub_81D64C0();
+ InitViewGraphics();
+ TryLoadTrainerHillEReaderPalette();
(*state)++;
break;
case 2:
- if (map_post_load_hook_exec())
+ if (RunFieldCallback())
(*state)++;
break;
case 3:
@@ -1991,18 +1968,18 @@ static bool32 sub_8086638(u8 *state)
return FALSE;
}
-static bool32 map_loading_iteration_2_link(u8 *state)
+static bool32 ReturnToFieldLink(u8 *state)
{
switch (*state)
{
case 0:
FieldClearVBlankHBlankCallbacks();
- sub_80867C8();
+ ResetMirageTowerAndSaveBlockPtrs();
sub_80867D8();
(*state)++;
break;
case 1:
- sub_8086988(1);
+ ResumeMap(TRUE);
(*state)++;
break;
case 2:
@@ -2014,25 +1991,25 @@ static bool32 map_loading_iteration_2_link(u8 *state)
case 3:
InitCurrentFlashLevelScanlineEffect();
InitOverworldGraphicsRegisters();
- sub_8197200();
+ InitTextBoxGfxAndPrinters();
(*state)++;
break;
case 4:
- move_tilemap_camera_to_upper_left_corner();
+ ResetFieldCamera();
(*state)++;
break;
case 5:
- copy_map_tileset1_to_vram(gMapHeader.mapLayout);
+ CopyPrimaryTilesetToVram(gMapHeader.mapLayout);
(*state)++;
break;
case 6:
- copy_map_tileset2_to_vram(gMapHeader.mapLayout);
+ CopySecondaryTilesetToVram(gMapHeader.mapLayout);
(*state)++;
break;
case 7:
- if (free_temp_tile_data_buffers_if_possible() != TRUE)
+ if (FreeTempTileDataBuffersIfPossible() != TRUE)
{
- apply_map_tileset1_tileset2_palette(gMapHeader.mapLayout);
+ LoadMapTilesetPalettes(gMapHeader.mapLayout);
(*state)++;
}
break;
@@ -2053,7 +2030,7 @@ static bool32 map_loading_iteration_2_link(u8 *state)
(*state)++;
break;
case 12:
- if (map_post_load_hook_exec())
+ if (RunFieldCallback())
(*state)++;
break;
case 10:
@@ -2068,12 +2045,12 @@ static bool32 map_loading_iteration_2_link(u8 *state)
return FALSE;
}
-static void do_load_map_stuff_loop(u8 *state)
+static void DoMapLoadLoop(u8 *state)
{
- while (!load_map_stuff(state, 0));
+ while (!LoadMapInStepsLocal(state, FALSE));
}
-static void sub_80867C8(void)
+static void ResetMirageTowerAndSaveBlockPtrs(void)
{
ClearMirageTowerPulseBlend();
MoveSaveBlocks_ResetHeap();
@@ -2090,18 +2067,18 @@ static void sub_80867D8(void)
LoadOam();
}
-static void sub_8086860(void)
+static void InitViewGraphics(void)
{
InitCurrentFlashLevelScanlineEffect();
InitOverworldGraphicsRegisters();
- sub_8197200();
- mapdata_load_assets_to_gpu_and_full_redraw();
+ InitTextBoxGfxAndPrinters();
+ InitMapView();
}
static void InitOverworldGraphicsRegisters(void)
{
- clear_scheduled_bg_copies_to_vram();
- reset_temp_tile_data_buffers();
+ ClearScheduledBgCopiesToVram();
+ ResetTempTileDataBuffers();
SetGpuReg(REG_OFFSET_MOSAIC, 0);
SetGpuReg(REG_OFFSET_WININ, WININ_WIN0_BG_ALL | WININ_WIN0_OBJ | WININ_WIN1_BG_ALL | WININ_WIN1_OBJ);
SetGpuReg(REG_OFFSET_WINOUT, WINOUT_WIN01_BG0 | WINOUT_WINOBJ_BG0);
@@ -2113,9 +2090,9 @@ static void InitOverworldGraphicsRegisters(void)
| BLDCNT_TGT2_OBJ | BLDCNT_EFFECT_BLEND);
SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(13, 7));
InitOverworldBgs();
- schedule_bg_copy_tilemap_to_vram(1);
- schedule_bg_copy_tilemap_to_vram(2);
- schedule_bg_copy_tilemap_to_vram(3);
+ ScheduleBgCopyTilemapToVram(1);
+ ScheduleBgCopyTilemapToVram(2);
+ ScheduleBgCopyTilemapToVram(3);
ChangeBgX(0, 0, 0);
ChangeBgY(0, 0, 0);
ChangeBgX(1, 0, 0);
@@ -2133,7 +2110,7 @@ static void InitOverworldGraphicsRegisters(void)
InitFieldMessageBox();
}
-static void sub_8086988(u32 a1)
+static void ResumeMap(bool32 a1)
{
ResetTasks();
ResetSpriteData();
@@ -2156,7 +2133,7 @@ static void sub_8086988(u32 a1)
TryStartMirageTowerPulseBlendEffect();
}
-static void sub_80869DC(void)
+static void InitObjectEventsLink(void)
{
gTotalCameraPixelOffsetX = 0;
gTotalCameraPixelOffsetY = 0;
@@ -2165,7 +2142,7 @@ static void sub_80869DC(void)
TryRunOnWarpIntoMapScript();
}
-static void mli4_mapscripts_and_other(void)
+static void InitObjectEventsLocal(void)
{
s16 x, y;
struct InitialPlayerAvatarState *player;
@@ -2189,9 +2166,9 @@ static void sub_8086A68(void)
RunOnReturnToFieldMapScript();
}
-static void sub_8086A80(void)
+static void SetCameraToTrackPlayer(void)
{
- gObjectEvents[gPlayerAvatar.objectEventId].trackedByCamera = 1;
+ gObjectEvents[gPlayerAvatar.objectEventId].trackedByCamera = TRUE;
InitCameraUpdateCallback(gPlayerAvatar.spriteId);
}
@@ -2206,17 +2183,17 @@ static void SetCameraToTrackGuestPlayer_2(void)
InitCameraUpdateCallback(GetSpriteForLinkedPlayer(gLocalLinkPlayerId));
}
-static void sub_8086AE4(void)
+static void OffsetCameraFocusByLinkPlayerId(void)
{
u16 x, y;
GetCameraFocusCoords(&x, &y);
- // This is a hack of some kind; it's undone in sub_8086B14, which is called
+ // This is a hack of some kind; it's undone in SpawnLinkPlayers, which is called
// soon after this function.
- sub_8088B3C(x + gLocalLinkPlayerId, y);
+ SetCameraFocusCoords(x + gLocalLinkPlayerId, y);
}
-static void sub_8086B14(void)
+static void SpawnLinkPlayers(void)
{
u16 i;
u16 x, y;
@@ -2294,7 +2271,7 @@ static void CheckRfuKeepAliveTimer(void)
static void ResetAllTradingStates(void)
{
s32 i;
- for (i = 0; i < 4; i++)
+ for (i = 0; i < MAX_LINK_PLAYERS; i++)
sPlayerTradingStates[i] = PLAYER_TRADING_STATE_IDLE;
}
@@ -2345,7 +2322,7 @@ static void HandleLinkPlayerKeyInput(u32 playerId, u16 key, struct TradeRoomPlay
if (trainer->isLocalPlayer)
{
SetKeyInterceptCallback(KeyInterCB_DeferToEventScript);
- sub_8087584();
+ RunTerminateLinkScript();
}
return;
}
@@ -2763,7 +2740,7 @@ static const u8 *TryInteractWithPlayer(struct TradeRoomPlayer *player)
otherPlayerPos.height = 0;
linkPlayerId = GetLinkPlayerIdAt(otherPlayerPos.x, otherPlayerPos.y);
- if (linkPlayerId != 4)
+ if (linkPlayerId != MAX_LINK_PLAYERS)
{
if (!player->isLocalPlayer)
return CableClub_EventScript_TooBusyToNotice;
@@ -2843,7 +2820,7 @@ static void InitMenuBasedScript(const u8 *script)
ScriptContext2_Enable();
}
-static void sub_8087584(void)
+static void RunTerminateLinkScript(void)
{
ScriptContext1_SetupScript(EventScript_TerminateLink);
ScriptContext2_Enable();
@@ -2913,7 +2890,7 @@ bool32 sub_808766C(void)
static u32 GetLinkSendQueueLength(void)
{
if (gWirelessCommType != 0)
- return Rfu.unk_9e8.unk_232;
+ return Rfu.sendQueue.count;
else
return gLink.sendQueue.count;
}
@@ -3212,7 +3189,7 @@ static void SpriteCB_LinkPlayer(struct Sprite *sprite)
SetObjectSubpriorityByZCoord(objEvent->previousElevation, sprite, 1);
sprite->oam.priority = ZCoordToPriority(objEvent->previousElevation);
- if (!linkPlayerObjEvent->movementMode != MOVEMENT_MODE_FREE)
+ if (linkPlayerObjEvent->movementMode == MOVEMENT_MODE_FREE)
StartSpriteAnim(sprite, GetFaceDirectionAnimNum(objEvent->range.as_byte));
else
StartSpriteAnimIfDifferent(sprite, GetMoveDirectionAnimNum(objEvent->range.as_byte));
diff --git a/src/palette.c b/src/palette.c
index eb49ce4c6..320e11ecc 100644
--- a/src/palette.c
+++ b/src/palette.c
@@ -52,7 +52,7 @@ static u8 UpdateFastPaletteFade(void);
static u8 UpdateHardwarePaletteFade(void);
static void UpdateBlendRegisters(void);
static bool8 IsSoftwarePaletteFadeFinishing(void);
-static void sub_80A2D54(u8 taskId);
+static void Task_BlendPalettesGradually(u8 taskId);
// palette buffers require alignment with agbcc because
// unaligned word reads are issued in BlendPalette otherwise
@@ -940,91 +940,105 @@ void TintPalette_CustomTone(u16 *palette, u16 count, u16 rTone, u16 gTone, u16 b
}
}
-void sub_80A2C44(u32 a1, s8 a2, u8 a3, u8 a4, u16 a5, u8 a6, u8 a7)
+#define tCoeff data[0]
+#define tCoeffTarget data[1]
+#define tCoeffDelta data[2]
+#define tDelay data[3]
+#define tDelayTimer data[4]
+#define tPalettes 5 // data[5] and data[6], set/get via Set/GetWordTaskArg
+#define tColor data[7]
+#define tId data[8]
+
+// Blend the selected palettes in a series of steps toward or away from the color.
+// Only used by the Groudon/Kyogre fight scene to flash the screen for lightning
+// One call is used to fade the bg from white, while another fades the duo from black
+void BlendPalettesGradually(u32 selectedPalettes, s8 delay, u8 coeff, u8 coeffTarget, u16 color, u8 priority, u8 id)
{
u8 taskId;
- taskId = CreateTask((void *)sub_80A2D54, a6);
- gTasks[taskId].data[0] = a3;
- gTasks[taskId].data[1] = a4;
+ taskId = CreateTask((void *)Task_BlendPalettesGradually, priority);
+ gTasks[taskId].tCoeff = coeff;
+ gTasks[taskId].tCoeffTarget = coeffTarget;
- if (a2 >= 0)
+ if (delay >= 0)
{
- gTasks[taskId].data[3] = a2;
- gTasks[taskId].data[2] = 1;
+ gTasks[taskId].tDelay = delay;
+ gTasks[taskId].tCoeffDelta = 1;
}
else
{
- gTasks[taskId].data[3] = 0;
- gTasks[taskId].data[2] = -a2 + 1;
+ gTasks[taskId].tDelay = 0;
+ gTasks[taskId].tCoeffDelta = -delay + 1;
}
- if (a4 < a3)
- gTasks[taskId].data[2] *= -1;
+ if (coeffTarget < coeff)
+ gTasks[taskId].tCoeffDelta *= -1;
- SetWordTaskArg(taskId, 5, a1);
- gTasks[taskId].data[7] = a5;
- gTasks[taskId].data[8] = a7;
+ SetWordTaskArg(taskId, tPalettes, selectedPalettes);
+ gTasks[taskId].tColor = color;
+ gTasks[taskId].tId = id;
gTasks[taskId].func(taskId);
}
-bool32 sub_80A2CF8(u8 var)
+// Unused
+static bool32 IsBlendPalettesGraduallyTaskActive(u8 id)
{
int i;
- for (i = 0; i < NUM_TASKS; i++) // check all the tasks.
- if ((gTasks[i].isActive == TRUE) && (gTasks[i].func == sub_80A2D54) && (gTasks[i].data[8] == var))
+ for (i = 0; i < NUM_TASKS; i++)
+ if ((gTasks[i].isActive == TRUE)
+ && (gTasks[i].func == Task_BlendPalettesGradually)
+ && (gTasks[i].tId == id))
return TRUE;
return FALSE;
}
-void sub_80A2D34(void)
+// Unused
+static void DestroyBlendPalettesGraduallyTask(void)
{
u8 taskId;
while (1)
{
- taskId = FindTaskIdByFunc(sub_80A2D54);
+ taskId = FindTaskIdByFunc(Task_BlendPalettesGradually);
if (taskId == 0xFF)
break;
DestroyTask(taskId);
}
}
-void sub_80A2D54(u8 taskId)
+static void Task_BlendPalettesGradually(u8 taskId)
{
- u32 wordVar;
+ u32 palettes;
s16 *data;
- s16 temp;
+ s16 target;
data = gTasks[taskId].data;
- wordVar = GetWordTaskArg(taskId, 5);
+ palettes = GetWordTaskArg(taskId, tPalettes);
- if (++data[4] > data[3])
+ if (++tDelayTimer > tDelay)
{
- data[4] = 0;
- BlendPalettes(wordVar, data[0], data[7]);
- temp = data[1];
- if (data[0] == temp)
+ tDelayTimer = 0;
+ BlendPalettes(palettes, tCoeff, tColor);
+ target = tCoeffTarget;
+ if (tCoeff == target)
{
DestroyTask(taskId);
}
else
{
- data[0] += data[2];
- if (data[2] >= 0)
+ tCoeff += tCoeffDelta;
+ if (tCoeffDelta >= 0)
{
- if (data[0] < temp)
- {
+ if (tCoeff < target)
return;
- }
}
- else if (data[0] > temp)
+ else if (tCoeff > target)
{
return;
}
- data[0] = temp;
+ tCoeff = target;
}
}
}
diff --git a/src/roulette_util.c b/src/palette_util.c
index f1f04a73a..5364ff6d9 100755
--- a/src/roulette_util.c
+++ b/src/palette_util.c
@@ -1,208 +1,217 @@
#include "global.h"
#include "palette.h"
-#include "roulette.h"
-#include "roulette_util.h"
+#include "palette_util.h"
#include "util.h"
-void sub_8151678(struct UnkStruct0 *r0)
+// "RouletteFlash" is more accurately a general flashing/fading util
+// this file handles fading the palettes for the color/icon selections on the Roulette wheel
+// but it also handles the "pulse blend" effect of Mirage Tower
+
+void RouletteFlash_Reset(struct RouletteFlashUtil *flash)
{
- r0->var00 = 0;
- r0->var02 = 0;
- memset(&r0->var04, 0, sizeof(r0->var04));
+ flash->enabled = 0;
+ flash->flags = 0;
+ memset(&flash->palettes, 0, sizeof(flash->palettes));
}
-u8 sub_815168C(struct UnkStruct0 *r0, u8 r1, const struct UnkStruct1 *r2)
+u8 RouletteFlash_Add(struct RouletteFlashUtil *flash, u8 id, const struct RouletteFlashSettings *settings)
{
- if (!(r1 < 16) || (r0->var04[r1].var00_7))
+ if (id >= ARRAY_COUNT(flash->palettes) || flash->palettes[id].available)
return 0xFF;
- r0->var04[r1].var04.var00 = r2->var00;
- r0->var04[r1].var04.var02 = r2->var02;
- r0->var04[r1].var04.var04 = r2->var04;
- r0->var04[r1].var04.var05 = r2->var05;
- r0->var04[r1].var04.var06 = r2->var06;
- r0->var04[r1].var04.var07_0 = r2->var07_0;
- r0->var04[r1].var04.var07_5 = r2->var07_5;
- r0->var04[r1].var04.var07_7 = r2->var07_7;
- r0->var04[r1].var00_0 = 0;
- r0->var04[r1].var00_7 = 1;
- r0->var04[r1].var02 = 0;
- r0->var04[r1].var01 = 0;
- if (r0->var04[r1].var04.var07_7 < 0)
- r0->var04[r1].var03 = 0xFF;
+ flash->palettes[id].settings.color = settings->color;
+ flash->palettes[id].settings.paletteOffset = settings->paletteOffset;
+ flash->palettes[id].settings.numColors = settings->numColors;
+ flash->palettes[id].settings.delay = settings->delay;
+ flash->palettes[id].settings.unk6 = settings->unk6;
+ flash->palettes[id].settings.numFadeCycles = settings->numFadeCycles;
+ flash->palettes[id].settings.unk7_5 = settings->unk7_5;
+ flash->palettes[id].settings.colorDeltaDir = settings->colorDeltaDir;
+ flash->palettes[id].state = 0;
+ flash->palettes[id].available = TRUE;
+ flash->palettes[id].fadeCycleCounter = 0;
+ flash->palettes[id].delayCounter = 0;
+ if (flash->palettes[id].settings.colorDeltaDir < 0)
+ flash->palettes[id].colorDelta = -1;
else
- r0->var04[r1].var03 = 1;
+ flash->palettes[id].colorDelta = 1;
- return r1;
+ return id;
}
-u8 sub_8151710(struct UnkStruct0 *r0, u8 r1)
+// Unused
+static u8 RouletteFlash_Remove(struct RouletteFlashUtil *flash, u8 id)
{
- if (r1 >= 16)
+ if (id >= ARRAY_COUNT(flash->palettes))
return 0xFF;
- if (!r0->var04[r1].var00_7)
+ if (!flash->palettes[id].available)
return 0xFF;
- memset(&r0->var04[r1], 0, sizeof(r0->var04[r1]));
- return r1;
+ memset(&flash->palettes[id], 0, sizeof(flash->palettes[id]));
+ return id;
}
-u8 sub_8151744(struct UnkStruct3 *r0)
+static u8 RouletteFlash_FadePalette(struct RouletteFlashPalette *pal)
{
u8 i;
u8 returnval;
- for (i = 0; i < r0->var04.var04; i++)
+ for (i = 0; i < pal->settings.numColors; i++)
{
- struct PlttData *faded = (struct PlttData *)&gPlttBufferFaded[r0->var04.var02 + i];
- struct PlttData *unfaded = (struct PlttData *)&gPlttBufferUnfaded[r0->var04.var02 + i];
+ struct PlttData *faded = (struct PlttData *)&gPlttBufferFaded[pal->settings.paletteOffset + i];
+ struct PlttData *unfaded = (struct PlttData *)&gPlttBufferUnfaded[pal->settings.paletteOffset + i];
- switch (r0->var00_0)
+ switch (pal->state)
{
case 1:
- if (faded->r + r0->var03 >= 0 && faded->r + r0->var03 < 32)
- faded->r += r0->var03;
- if (faded->g + r0->var03 >= 0 && faded->g + r0->var03 < 32)
- faded->g += r0->var03;
- if (faded->b + r0->var03 >= 0 && faded->b + r0->var03 < 32)
- faded->b += r0->var03;
+ // Fade color
+ if (faded->r + pal->colorDelta >= 0 && faded->r + pal->colorDelta < 32)
+ faded->r += pal->colorDelta;
+ if (faded->g + pal->colorDelta >= 0 && faded->g + pal->colorDelta < 32)
+ faded->g += pal->colorDelta;
+ if (faded->b + pal->colorDelta >= 0 && faded->b + pal->colorDelta < 32)
+ faded->b += pal->colorDelta;
break;
case 2:
- if (r0->var03 < 0)
+ // Fade back to original color
+ if (pal->colorDelta < 0)
{
- if (faded->r + r0->var03 >= unfaded->r)
- faded->r += r0->var03;
- if (faded->g + r0->var03 >= unfaded->g)
- faded->g += r0->var03;
- if (faded->b + r0->var03 >= unfaded->b)
- faded->b += r0->var03;
+ if (faded->r + pal->colorDelta >= unfaded->r)
+ faded->r += pal->colorDelta;
+ if (faded->g + pal->colorDelta >= unfaded->g)
+ faded->g += pal->colorDelta;
+ if (faded->b + pal->colorDelta >= unfaded->b)
+ faded->b += pal->colorDelta;
}
else
{
- if (faded->r + r0->var03 <= unfaded->r)
- faded->r += r0->var03;
- if (faded->g + r0->var03 <= unfaded->g)
- faded->g += r0->var03;
- if (faded->b + r0->var03 <= unfaded->b)
- faded->b += r0->var03;
+ if (faded->r + pal->colorDelta <= unfaded->r)
+ faded->r += pal->colorDelta;
+ if (faded->g + pal->colorDelta <= unfaded->g)
+ faded->g += pal->colorDelta;
+ if (faded->b + pal->colorDelta <= unfaded->b)
+ faded->b += pal->colorDelta;
}
break;
}
}
- if ((u32)r0->var02++ != r0->var04.var07_0)
+ if ((u32)pal->fadeCycleCounter++ != pal->settings.numFadeCycles)
{
returnval = 0;
}
else
{
- r0->var02 = 0;
- r0->var03 *= -1;
- if (r0->var00_0 == 1)
- r0->var00_0++;
+ pal->fadeCycleCounter = 0;
+ pal->colorDelta *= -1;
+ if (pal->state == 1)
+ pal->state++;
else
- r0->var00_0--;
+ pal->state--;
returnval = 1;
}
return returnval;
}
-u8 sub_815194C(struct UnkStruct3 *r0)
+static u8 RouletteFlash_FlashPalette(struct RouletteFlashPalette *pal)
{
- u8 rg2 = 0;
-
- switch (r0->var00_0)
+ u8 i = 0;
+ switch (pal->state)
{
case 1:
- for (rg2 = 0; rg2 < r0->var04.var04; rg2++)
- gPlttBufferFaded[r0->var04.var02 + rg2] = r0->var04.var00;
- r0->var00_0++;
+ // Flash to color
+ for (; i < pal->settings.numColors; i++)
+ gPlttBufferFaded[pal->settings.paletteOffset + i] = pal->settings.color;
+ pal->state++;
break;
case 2:
- for (rg2 = 0; rg2 < r0->var04.var04; rg2++)
- gPlttBufferFaded[r0->var04.var02 + rg2] = gPlttBufferUnfaded[r0->var04.var02 + rg2];
- r0->var00_0--;
+ // Restore to original color
+ for (; i < pal->settings.numColors; i++)
+ gPlttBufferFaded[pal->settings.paletteOffset + i] = gPlttBufferUnfaded[pal->settings.paletteOffset + i];
+ pal->state--;
break;
}
return 1;
}
-void task_tutorial_controls_fadein(struct UnkStruct0 *r0)
+void RouletteFlash_Run(struct RouletteFlashUtil *flash)
{
u8 i = 0;
- if (r0->var00)
+ if (flash->enabled)
{
- for (i = 0; i < 16; i++)
+ for (i = 0; i < ARRAY_COUNT(flash->palettes); i++)
{
- if ((r0->var02 >> i) & 1)
+ if ((flash->flags >> i) & 1)
{
- if (--r0->var04[i].var01 == 0xFF) // if underflow ?
+ if (--flash->palettes[i].delayCounter == (u8)-1)
{
- if (r0->var04[i].var04.var00 & 0x8000) // PlttData->unused_15 ?
- sub_8151744(&r0->var04[i]);
+ if (flash->palettes[i].settings.color & FLASHUTIL_USE_EXISTING_COLOR)
+ RouletteFlash_FadePalette(&flash->palettes[i]);
else
- sub_815194C(&r0->var04[i]);
+ RouletteFlash_FlashPalette(&flash->palettes[i]);
- r0->var04[i].var01 = r0->var04[i].var04.var05;
+ flash->palettes[i].delayCounter = flash->palettes[i].settings.delay;
}
}
}
}
}
-void sub_8151A48(struct UnkStruct0 *r0, u16 r1)
+void RouletteFlash_Enable(struct RouletteFlashUtil *flash, u16 flags)
{
u8 i = 0;
- r0->var00++;
- for (i = 0; i < 16; i++)
+ flash->enabled++;
+ for (i = 0; i < ARRAY_COUNT(flash->palettes); i++)
{
- if ((r1 >> i) & 1)
+ if ((flags >> i) & 1)
{
- if (r0->var04[i].var00_7)
+ if (flash->palettes[i].available)
{
- r0->var02 |= 1 << i;
- r0->var04[i].var00_0 = 1;
+ flash->flags |= 1 << i;
+ flash->palettes[i].state = 1;
}
}
}
}
-void sub_8151A9C(struct UnkStruct0 *r0, u16 r1)
+void RouletteFlash_Stop(struct RouletteFlashUtil *flash, u16 flags)
{
u8 i;
- for (i = 0; i < 16; i++)
+ for (i = 0; i < ARRAY_COUNT(flash->palettes); i++)
{
- if ((r0->var02 >> i) & 1)
+ if ((flash->flags >> i) & 1)
{
- if (r0->var04[i].var00_7)
+ if (flash->palettes[i].available)
{
- if ((r1 >> i) & 1)
+ if ((flags >> i) & 1)
{
- u32 offset = r0->var04[i].var04.var02;
+ u32 offset = flash->palettes[i].settings.paletteOffset;
u16 *faded = &gPlttBufferFaded[offset];
u16 *unfaded = &gPlttBufferUnfaded[offset];
- memcpy(faded, unfaded, r0->var04[i].var04.var04 * 2);
- r0->var04[i].var00_0 = 0;
- r0->var04[i].var02 = 0;
- r0->var04[i].var01 = 0;
- if (r0->var04[i].var04.var07_7 < 0)
- r0->var04[i].var03 = 0xFF;
+ memcpy(faded, unfaded, flash->palettes[i].settings.numColors * 2);
+ flash->palettes[i].state = 0;
+ flash->palettes[i].fadeCycleCounter = 0;
+ flash->palettes[i].delayCounter = 0;
+ if (flash->palettes[i].settings.colorDeltaDir < 0)
+ flash->palettes[i].colorDelta = -1;
else
- r0->var04[i].var03 = 0x1;
+ flash->palettes[i].colorDelta = 1;
}
}
}
}
- if (r1 == 0xFFFF)
+
+ if (flags == 0xFFFF)
{
- r0->var00 = 0;
- r0->var02 = 0;
+ // Stopped all
+ flash->enabled = 0;
+ flash->flags = 0;
}
else
{
- r0->var02 = r0->var02 & ~r1;
+ flash->flags &= ~flags;
}
}
@@ -429,7 +438,8 @@ void UpdatePulseBlend(struct PulseBlend *pulseBlend)
}
}
-void sub_8152008(u16 *dest, u16 src, u8 left, u8 top, u8 width, u8 height)
+// Below used for the Roulette grid
+void ClearTilemapRect(u16 *dest, u16 src, u8 left, u8 top, u8 width, u8 height)
{
u16 *_dest;
u8 i;
@@ -446,7 +456,7 @@ void sub_8152008(u16 *dest, u16 src, u8 left, u8 top, u8 width, u8 height)
}
}
-void sub_8152058(u16 *dest, u16 *src, u8 left, u8 top, u8 width, u8 height)
+void SetTilemapRect(u16 *dest, u16 *src, u8 left, u8 top, u8 width, u8 height)
{
u16 *_dest;
u16 *_src = src;
diff --git a/src/party_menu.c b/src/party_menu.c
index 4ed7ab1b2..7514cf545 100755
--- a/src/party_menu.c
+++ b/src/party_menu.c
@@ -67,7 +67,6 @@
#include "constants/battle_frontier.h"
#include "constants/easy_chat.h"
#include "constants/field_effects.h"
-#include "constants/flags.h"
#include "constants/item_effects.h"
#include "constants/items.h"
#include "constants/maps.h"
@@ -76,7 +75,6 @@
#include "constants/rgb.h"
#include "constants/songs.h"
#include "constants/species.h"
-#include "constants/vars.h"
#define PARTY_PAL_SELECTED (1 << 0)
#define PARTY_PAL_FAINTED (1 << 1)
@@ -464,7 +462,7 @@ static void CB2_UpdatePartyMenu(void)
RunTasks();
AnimateSprites();
BuildOamBuffer();
- do_scheduled_bg_tilemap_copies_to_vram();
+ DoScheduledBgTilemapCopiesToVram();
UpdatePaletteFade();
}
@@ -479,7 +477,7 @@ static void CB2_InitPartyMenu(void)
{
while (TRUE)
{
- if (sub_81221EC() == TRUE || ShowPartyMenu() == TRUE || sub_81221AC() == TRUE)
+ if (MenuHelpers_CallLinkSomething() == TRUE || ShowPartyMenu() == TRUE || MenuHelpers_LinkSomething() == TRUE)
break;
}
}
@@ -491,7 +489,7 @@ static bool8 ShowPartyMenu(void)
case 0:
SetVBlankHBlankCallbacksToNull();
ResetVramOamAndBgCntRegs();
- clear_scheduled_bg_copies_to_vram();
+ ClearScheduledBgCopiesToVram();
gMain.state++;
break;
case 1:
@@ -512,7 +510,7 @@ static bool8 ShowPartyMenu(void)
gMain.state++;
break;
case 5:
- if (!sub_81221AC())
+ if (!MenuHelpers_LinkSomething())
ResetTasks();
gMain.state++;
break;
@@ -645,7 +643,7 @@ static bool8 AllocPartyMenuBg(void)
InitBgsFromTemplates(0, sPartyMenuBgTemplates, ARRAY_COUNT(sPartyMenuBgTemplates));
SetBgTilemapBuffer(1, sPartyBgTilemapBuffer);
ResetAllBgsCoordinates();
- schedule_bg_copy_tilemap_to_vram(1);
+ ScheduleBgCopyTilemapToVram(1);
SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_OBJ_ON | DISPCNT_OBJ_1D_MAP);
SetGpuReg(REG_OFFSET_BLDCNT, 0);
ShowBg(0);
@@ -759,7 +757,7 @@ static void RenderPartyMenuBox(u8 slot)
LoadPartyBoxPalette(&sPartyMenuBoxes[slot], PARTY_PAL_MULTI_ALT);
CopyWindowToVram(sPartyMenuBoxes[slot].windowId, 2);
PutWindowTilemap(sPartyMenuBoxes[slot].windowId);
- schedule_bg_copy_tilemap_to_vram(2);
+ ScheduleBgCopyTilemapToVram(2);
}
else
{
@@ -792,7 +790,7 @@ static void RenderPartyMenuBox(u8 slot)
AnimatePartySlot(slot, 0);
}
PutWindowTilemap(sPartyMenuBoxes[slot].windowId);
- schedule_bg_copy_tilemap_to_vram(0);
+ ScheduleBgCopyTilemapToVram(0);
}
}
@@ -1086,7 +1084,7 @@ void AnimatePartySlot(u8 slot, u8 animNum)
break;
}
PartyMenuStartSpriteAnim(spriteId, animNum);
- schedule_bg_copy_tilemap_to_vram(1);
+ ScheduleBgCopyTilemapToVram(1);
}
static u8 GetPartyBoxPaletteFlags(u8 slot, u8 animNum)
@@ -1127,7 +1125,7 @@ static void DrawCancelConfirmButtons(void)
{
CopyToBgTilemapBufferRect_ChangePalette(1, sConfirmButton_Tilemap, 23, 16, 7, 2, 17);
CopyToBgTilemapBufferRect_ChangePalette(1, sCancelButton_Tilemap, 23, 18, 7, 2, 17);
- schedule_bg_copy_tilemap_to_vram(1);
+ ScheduleBgCopyTilemapToVram(1);
}
bool8 IsMultiBattle(void)
@@ -1185,7 +1183,7 @@ u8 GetPartyMenuType(void)
void Task_HandleChooseMonInput(u8 taskId)
{
- if (!gPaletteFade.active && sub_81221EC() != TRUE)
+ if (!gPaletteFade.active && MenuHelpers_CallLinkSomething() != TRUE)
{
s8 *slotPtr = GetCurrentPartySlotPtr();
@@ -1296,7 +1294,7 @@ static bool8 IsSelectedMonNotEgg(u8 *slotPtr)
{
if (GetMonData(&gPlayerParty[*slotPtr], MON_DATA_IS_EGG) == TRUE)
{
- PlaySE(SE_HAZURE);
+ PlaySE(SE_FAILURE);
return FALSE;
}
return TRUE;
@@ -1307,7 +1305,7 @@ static void HandleChooseMonCancel(u8 taskId, s8 *slotPtr)
switch (gPartyMenu.action)
{
case PARTY_ACTION_SEND_OUT:
- PlaySE(SE_HAZURE);
+ PlaySE(SE_FAILURE);
break;
case PARTY_ACTION_SWITCH:
case PARTY_ACTION_SOFTBOILED:
@@ -1322,7 +1320,7 @@ static void HandleChooseMonCancel(u8 taskId, s8 *slotPtr)
PlaySE(SE_SELECT);
if (DisplayCancelChooseMonYesNo(taskId) != TRUE)
{
- if (!sub_81221AC())
+ if (!MenuHelpers_LinkSomething())
gSpecialVar_0x8004 = PARTY_SIZE + 1;
gPartyMenuUseExitCallback = FALSE;
*slotPtr = PARTY_SIZE + 1;
@@ -1662,7 +1660,7 @@ bool8 IsPartyMenuTextPrinterActive(void)
static void Task_WaitForLinkAndReturnToChooseMon(u8 taskId)
{
- if (sub_81221EC() != TRUE)
+ if (MenuHelpers_CallLinkSomething() != TRUE)
{
DisplayPartyMenuStdMessage(PARTY_MSG_CHOOSE_MON);
gTasks[taskId].func = Task_HandleChooseMonInput;
@@ -1675,7 +1673,7 @@ static void Task_ReturnToChooseMonAfterText(u8 taskId)
{
ClearStdWindowAndFrameToTransparent(6, 0);
ClearWindowTilemap(6);
- if (sub_81221AC() == TRUE)
+ if (MenuHelpers_LinkSomething() == TRUE)
{
gTasks[taskId].func = Task_WaitForLinkAndReturnToChooseMon;
}
@@ -1693,7 +1691,7 @@ static void DisplayGaveHeldItemMessage(struct Pokemon *mon, u16 item, bool8 keep
CopyItemName(item, gStringVar2);
StringExpandPlaceholders(gStringVar4, gText_PkmnWasGivenItem);
DisplayPartyMenuMessage(gStringVar4, keepOpen);
- schedule_bg_copy_tilemap_to_vram(2);
+ ScheduleBgCopyTilemapToVram(2);
}
static void DisplayTookHeldItemMessage(struct Pokemon *mon, u16 item, bool8 keepOpen)
@@ -1702,7 +1700,7 @@ static void DisplayTookHeldItemMessage(struct Pokemon *mon, u16 item, bool8 keep
CopyItemName(item, gStringVar2);
StringExpandPlaceholders(gStringVar4, gText_ReceivedItemFromPkmn);
DisplayPartyMenuMessage(gStringVar4, keepOpen);
- schedule_bg_copy_tilemap_to_vram(2);
+ ScheduleBgCopyTilemapToVram(2);
}
static void DisplayAlreadyHoldingItemSwitchMessage(struct Pokemon *mon, u16 item, bool8 keepOpen)
@@ -1711,7 +1709,7 @@ static void DisplayAlreadyHoldingItemSwitchMessage(struct Pokemon *mon, u16 item
CopyItemName(item, gStringVar2);
StringExpandPlaceholders(gStringVar4, gText_PkmnAlreadyHoldingItemSwitch);
DisplayPartyMenuMessage(gStringVar4, keepOpen);
- schedule_bg_copy_tilemap_to_vram(2);
+ ScheduleBgCopyTilemapToVram(2);
}
static void DisplaySwitchedHeldItemMessage(u16 item, u16 item2, bool8 keepOpen)
@@ -1720,7 +1718,7 @@ static void DisplaySwitchedHeldItemMessage(u16 item, u16 item2, bool8 keepOpen)
CopyItemName(item2, gStringVar2);
StringExpandPlaceholders(gStringVar4, gText_SwitchedPkmnItem);
DisplayPartyMenuMessage(gStringVar4, keepOpen);
- schedule_bg_copy_tilemap_to_vram(2);
+ ScheduleBgCopyTilemapToVram(2);
}
static void GiveItemToMon(struct Pokemon *mon, u16 item)
@@ -1864,7 +1862,7 @@ u8 GetMonAilment(struct Pokemon *mon)
static void SetPartyMonsAllowedInMinigame(void)
{
- u16 *ptr;
+ s16 *ptr;
if (gPartyMenu.menuType == PARTY_MENU_TYPE_MINIGAME)
{
@@ -1917,9 +1915,9 @@ static void TryEnterMonForMinigame(u8 taskId, u8 slot)
}
else
{
- PlaySE(SE_HAZURE);
+ PlaySE(SE_FAILURE);
DisplayPartyMenuMessage(gText_PkmnCantParticipate, FALSE);
- schedule_bg_copy_tilemap_to_vram(2);
+ ScheduleBgCopyTilemapToVram(2);
gTasks[taskId].func = Task_ReturnToChooseMonAfterText;
}
}
@@ -1927,7 +1925,7 @@ static void TryEnterMonForMinigame(u8 taskId, u8 slot)
static void CancelParticipationPrompt(u8 taskId)
{
DisplayPartyMenuMessage(gText_CancelParticipation, TRUE);
- schedule_bg_copy_tilemap_to_vram(2);
+ ScheduleBgCopyTilemapToVram(2);
gTasks[taskId].func = Task_CancelParticipationYesNo;
}
@@ -2067,7 +2065,7 @@ static void CreateCancelConfirmWindows(bool8 chooseHalf)
}
PutWindowTilemap(cancelWindowId);
CopyWindowToVram(cancelWindowId, 2);
- schedule_bg_copy_tilemap_to_vram(0);
+ ScheduleBgCopyTilemapToVram(0);
}
}
@@ -2381,7 +2379,7 @@ static void PartyMenuRemoveWindow(u8 *ptr)
ClearStdWindowAndFrameToTransparent(*ptr, 0);
RemoveWindow(*ptr);
*ptr = 0xFF;
- schedule_bg_copy_tilemap_to_vram(2);
+ ScheduleBgCopyTilemapToVram(2);
}
}
@@ -2427,7 +2425,7 @@ void DisplayPartyMenuStdMessage(u32 stringId)
DrawStdFrameWithCustomTileAndPalette(*windowPtr, FALSE, 0x4F, 0xD);
StringExpandPlaceholders(gStringVar4, sActionStringTable[stringId]);
AddTextPrinterParameterized(*windowPtr, 1, gStringVar4, 0, 1, 0, 0);
- schedule_bg_copy_tilemap_to_vram(2);
+ ScheduleBgCopyTilemapToVram(2);
}
}
@@ -2487,7 +2485,7 @@ static u8 DisplaySelectionWindow(u8 windowType)
}
InitMenuInUpperLeftCorner(sPartyMenuInternal->windowId[0], sPartyMenuInternal->numActions, 0, 1);
- schedule_bg_copy_tilemap_to_vram(2);
+ ScheduleBgCopyTilemapToVram(2);
return sPartyMenuInternal->windowId[0];
}
@@ -2649,7 +2647,7 @@ static bool8 CreateSelectionWindow(u8 taskId)
{
StringExpandPlaceholders(gStringVar4, gText_PkmnNotHolding);
DisplayPartyMenuMessage(gStringVar4, TRUE);
- schedule_bg_copy_tilemap_to_vram(2);
+ ScheduleBgCopyTilemapToVram(2);
gTasks[taskId].func = Task_UpdateHeldItemSprite;
return FALSE;
}
@@ -2668,7 +2666,7 @@ static void Task_TryCreateSelectionWindow(u8 taskId)
static void Task_HandleSelectionMenuInput(u8 taskId)
{
- if (!gPaletteFade.active && sub_81221EC() != TRUE)
+ if (!gPaletteFade.active && MenuHelpers_CallLinkSomething() != TRUE)
{
s8 input;
s16 *data = gTasks[taskId].data;
@@ -2860,7 +2858,7 @@ static void SlidePartyMenuBoxOneStep(u8 taskId)
MoveAndBufferPartySlot(sSlot1TilemapBuffer, tSlot1Left + tSlot1Offset, tSlot1Top, tSlot1Width, tSlot1Height, tSlot1SlideDir);
if (tSlot2SlideDir != 0)
MoveAndBufferPartySlot(sSlot2TilemapBuffer, tSlot2Left + tSlot2Offset, tSlot2Top, tSlot2Width, tSlot2Height, tSlot2SlideDir);
- schedule_bg_copy_tilemap_to_vram(0);
+ ScheduleBgCopyTilemapToVram(0);
}
static void Task_SlideSelectedSlotsOffscreen(u8 taskId)
@@ -2905,7 +2903,7 @@ static void Task_SlideSelectedSlotsOnscreen(u8 taskId)
{
PutWindowTilemap(sPartyMenuBoxes[gPartyMenu.slotId].windowId);
PutWindowTilemap(sPartyMenuBoxes[gPartyMenu.slotId2].windowId);
- schedule_bg_copy_tilemap_to_vram(0);
+ ScheduleBgCopyTilemapToVram(0);
Free(sSlot1TilemapBuffer);
Free(sSlot2TilemapBuffer);
FinishTwoMonAction(taskId);
@@ -3023,7 +3021,7 @@ static void CursorCb_Give(u8 taskId)
static void CB2_SelectBagItemToGive(void)
{
if (InBattlePyramid() == FALSE)
- GoToBagMenu(RETURN_LOCATION_POKEMON_LIST, POCKETS_COUNT, CB2_GiveHoldItem);
+ GoToBagMenu(ITEMMENULOCATION_PARTY, POCKETS_COUNT, CB2_GiveHoldItem);
else
GoToBattlePyramidBagMenu(2, CB2_GiveHoldItem);
}
@@ -3223,7 +3221,7 @@ static void CursorCb_TakeItem(u8 taskId)
DisplayTookHeldItemMessage(mon, item, TRUE);
break;
}
- schedule_bg_copy_tilemap_to_vram(2);
+ ScheduleBgCopyTilemapToVram(2);
gTasks[taskId].func = Task_UpdateHeldItemSprite;
}
@@ -3473,7 +3471,7 @@ static void CursorCb_Enter(u8 taskId)
}
ConvertIntToDecimalStringN(gStringVar1, maxBattlers, STR_CONV_MODE_LEFT_ALIGN, 1);
StringExpandPlaceholders(gStringVar4, gText_NoMoreThanVar1Pkmn);
- PlaySE(SE_HAZURE);
+ PlaySE(SE_FAILURE);
DisplayPartyMenuMessage(gStringVar4, TRUE);
gTasks[taskId].func = Task_ReturnToChooseMonAfterText;
}
@@ -3527,7 +3525,7 @@ static void CursorCb_Register(u8 taskId)
u16 species = GetMonData(&gPlayerParty[gPartyMenu.slotId], MON_DATA_SPECIES);
u8 obedience = GetMonData(&gPlayerParty[gPartyMenu.slotId], MON_DATA_OBEDIENCE);
- switch (CanRegisterMonForTradingBoard(*(struct GFtgtGnameSub *)sub_800F7DC(), species2, species, obedience))
+ switch (CanRegisterMonForTradingBoard(*(struct GFtgtGnameSub *)GetHostRFUtgtGname(), species2, species, obedience))
{
case CANT_REGISTER_MON:
StringExpandPlaceholders(gStringVar4, gText_PkmnCantBeTradedNow);
@@ -3540,7 +3538,7 @@ static void CursorCb_Register(u8 taskId)
Task_ClosePartyMenu(taskId);
return;
}
- PlaySE(SE_HAZURE);
+ PlaySE(SE_FAILURE);
PartyMenuRemoveWindow(&sPartyMenuInternal->windowId[0]);
PartyMenuRemoveWindow(&sPartyMenuInternal->windowId[1]);
StringAppend(gStringVar4, gText_PauseUntilPress);
@@ -3553,12 +3551,12 @@ static void CursorCb_Trade1(u8 taskId)
u16 species2 = GetMonData(&gPlayerParty[gPartyMenu.slotId], MON_DATA_SPECIES2);
u16 species = GetMonData(&gPlayerParty[gPartyMenu.slotId], MON_DATA_SPECIES);
u8 obedience = GetMonData(&gPlayerParty[gPartyMenu.slotId], MON_DATA_OBEDIENCE);
- u32 stringId = GetUnionRoomTradeMessageId(*(struct GFtgtGnameSub *)sub_800F7DC(), gUnknown_02022C38, species2, gUnionRoomOfferedSpecies, gUnionRoomRequestedMonType, species, obedience);
+ u32 stringId = GetUnionRoomTradeMessageId(*(struct GFtgtGnameSub *)GetHostRFUtgtGname(), gPartnerTgtGnameSub, species2, gUnionRoomOfferedSpecies, gUnionRoomRequestedMonType, species, obedience);
if (stringId != UR_TRADE_MSG_NONE)
{
StringExpandPlaceholders(gStringVar4, sUnionRoomTradeMessages[stringId - 1]);
- PlaySE(SE_HAZURE);
+ PlaySE(SE_FAILURE);
PartyMenuRemoveWindow(&sPartyMenuInternal->windowId[0]);
PartyMenuRemoveWindow(&sPartyMenuInternal->windowId[1]);
StringAppend(gStringVar4, gText_PauseUntilPress);
@@ -3597,7 +3595,7 @@ static void CursorCb_Trade2(u8 taskId)
gTasks[taskId].func = Task_SpinTradeYesNo;
return;
}
- PlaySE(SE_HAZURE);
+ PlaySE(SE_FAILURE);
StringAppend(gStringVar4, gText_PauseUntilPress);
DisplayPartyMenuMessage(gStringVar4, TRUE);
gTasks[taskId].func = Task_ReturnToChooseMonAfterText;
@@ -3640,7 +3638,7 @@ static void CursorCb_FieldMove(u8 taskId)
PartyMenuRemoveWindow(&sPartyMenuInternal->windowId[0]);
PartyMenuRemoveWindow(&sPartyMenuInternal->windowId[1]);
- if (sub_81221AC() == TRUE || InUnionRoom() == TRUE)
+ if (MenuHelpers_LinkSomething() == TRUE || InUnionRoom() == TRUE)
{
if (fieldMove == FIELD_MOVE_MILK_DRINK || fieldMove == FIELD_MOVE_SOFT_BOILED)
DisplayPartyMenuStdMessage(PARTY_MSG_CANT_USE_HERE);
@@ -4206,7 +4204,7 @@ void CB2_ShowPartyMenuForItemUse(void)
static void CB2_ReturnToBagMenu(void)
{
if (InBattlePyramid() == FALSE)
- GoToBagMenu(RETURN_LOCATION_UNCHANGED, POCKETS_COUNT, NULL);
+ GoToBagMenu(ITEMMENULOCATION_LAST, POCKETS_COUNT, NULL);
else
GoToBattlePyramidBagMenu(4, gPyramidBagCursorData.callback);
}
@@ -4345,7 +4343,7 @@ void ItemUseCB_Medicine(u8 taskId, TaskFunc task)
gPartyMenuUseExitCallback = FALSE;
PlaySE(SE_SELECT);
DisplayPartyMenuMessage(gText_WontHaveEffect, TRUE);
- schedule_bg_copy_tilemap_to_vram(2);
+ ScheduleBgCopyTilemapToVram(2);
gTasks[taskId].func = task;
return;
}
@@ -4357,13 +4355,13 @@ void ItemUseCB_Medicine(u8 taskId, TaskFunc task)
gPartyMenuUseExitCallback = TRUE;
if (!IsItemFlute(item))
{
- PlaySE(SE_KAIFUKU);
+ PlaySE(SE_USE_ITEM);
if (gPartyMenu.action != PARTY_ACTION_REUSABLE_ITEM)
RemoveBagItem(item, 1);
}
else
{
- PlaySE(SE_BIDORO);
+ PlaySE(SE_GLASS_FLUTE);
}
SetPartyMonAilmentGfx(mon, &sPartyMenuBoxes[gPartyMenu.slotId]);
if (gSprites[sPartyMenuBoxes[gPartyMenu.slotId].statusSpriteId].invisible)
@@ -4381,7 +4379,7 @@ void ItemUseCB_Medicine(u8 taskId, TaskFunc task)
GetMonNickname(mon, gStringVar1);
GetMedicineItemEffectMessage(item);
DisplayPartyMenuMessage(gStringVar4, TRUE);
- schedule_bg_copy_tilemap_to_vram(2);
+ ScheduleBgCopyTilemapToVram(2);
gTasks[taskId].func = task;
}
}
@@ -4391,7 +4389,7 @@ static void Task_DisplayHPRestoredMessage(u8 taskId)
GetMonNickname(&gPlayerParty[gPartyMenu.slotId], gStringVar1);
StringExpandPlaceholders(gStringVar4, gText_PkmnHPRestoredByVar2);
DisplayPartyMenuMessage(gStringVar4, FALSE);
- schedule_bg_copy_tilemap_to_vram(2);
+ ScheduleBgCopyTilemapToVram(2);
HandleBattleLowHpMusicChange();
gTasks[taskId].func = Task_ClosePartyMenuAfterText;
}
@@ -4422,13 +4420,13 @@ void ItemUseCB_ReduceEV(u8 taskId, TaskFunc task)
gPartyMenuUseExitCallback = FALSE;
PlaySE(SE_SELECT);
DisplayPartyMenuMessage(gText_WontHaveEffect, TRUE);
- schedule_bg_copy_tilemap_to_vram(2);
+ ScheduleBgCopyTilemapToVram(2);
gTasks[taskId].func = task;
}
else
{
gPartyMenuUseExitCallback = TRUE;
- PlaySE(SE_KAIFUKU);
+ PlaySE(SE_USE_ITEM);
RemoveBagItem(item, 1);
GetMonNickname(mon, gStringVar1);
ItemEffectToStatString(effectType, gStringVar2);
@@ -4444,7 +4442,7 @@ void ItemUseCB_ReduceEV(u8 taskId, TaskFunc task)
StringExpandPlaceholders(gStringVar4, gText_PkmnAdoresBaseVar2Fell);
}
DisplayPartyMenuMessage(gStringVar4, TRUE);
- schedule_bg_copy_tilemap_to_vram(2);
+ ScheduleBgCopyTilemapToVram(2);
gTasks[taskId].func = task;
}
}
@@ -4512,7 +4510,7 @@ static void ShowMoveSelectWindow(u8 slot)
moveCount++;
}
InitMenuInUpperLeftCornerPlaySoundWhenAPressed(windowId, moveCount, 0);
- schedule_bg_copy_tilemap_to_vram(2);
+ ScheduleBgCopyTilemapToVram(2);
}
static void Task_HandleWhichMoveInput(u8 taskId)
@@ -4586,20 +4584,20 @@ static void TryUsePPItem(u8 taskId)
gPartyMenuUseExitCallback = FALSE;
PlaySE(SE_SELECT);
DisplayPartyMenuMessage(gText_WontHaveEffect, TRUE);
- schedule_bg_copy_tilemap_to_vram(2);
+ ScheduleBgCopyTilemapToVram(2);
gTasks[taskId].func = Task_ClosePartyMenuAfterText;
}
else
{
gPartyMenuUseExitCallback = TRUE;
mon = &gPlayerParty[ptr->slotId];
- PlaySE(SE_KAIFUKU);
+ PlaySE(SE_USE_ITEM);
RemoveBagItem(item, 1);
move = GetMonData(mon, MON_DATA_MOVE1 + *moveSlot);
StringCopy(gStringVar1, gMoveNames[move]);
GetMedicineItemEffectMessage(item);
DisplayPartyMenuMessage(gStringVar4, TRUE);
- schedule_bg_copy_tilemap_to_vram(2);
+ ScheduleBgCopyTilemapToVram(2);
gTasks[taskId].func = Task_ClosePartyMenuAfterText;
}
}
@@ -4646,7 +4644,7 @@ static void DisplayLearnMoveMessage(const u8 *str)
{
StringExpandPlaceholders(gStringVar4, str);
DisplayPartyMenuMessage(gStringVar4, TRUE);
- schedule_bg_copy_tilemap_to_vram(2);
+ ScheduleBgCopyTilemapToVram(2);
}
static void DisplayLearnMoveMessageAndClose(u8 taskId, const u8 *str)
@@ -4709,7 +4707,7 @@ static void Task_LearnedMove(u8 taskId)
StringCopy(gStringVar2, gMoveNames[move[0]]);
StringExpandPlaceholders(gStringVar4, gText_PkmnLearnedMove3);
DisplayPartyMenuMessage(gStringVar4, TRUE);
- schedule_bg_copy_tilemap_to_vram(2);
+ ScheduleBgCopyTilemapToVram(2);
gTasks[taskId].func = Task_DoLearnedMoveFanfareAfterText;
}
@@ -4717,7 +4715,7 @@ static void Task_DoLearnedMoveFanfareAfterText(u8 taskId)
{
if (IsPartyMenuTextPrinterActive() != TRUE)
{
- PlayFanfare(MUS_FANFA1);
+ PlayFanfare(MUS_LEVEL_UP);
gTasks[taskId].func = Task_LearnNextMoveOrClosePartyMenu;
}
}
@@ -4824,7 +4822,7 @@ static void StopLearningMovePrompt(u8 taskId)
StringCopy(gStringVar2, gMoveNames[gPartyMenu.data1]);
StringExpandPlaceholders(gStringVar4, gText_StopLearningMove2);
DisplayPartyMenuMessage(gStringVar4, TRUE);
- schedule_bg_copy_tilemap_to_vram(2);
+ ScheduleBgCopyTilemapToVram(2);
gTasks[taskId].func = Task_StopLearningMoveYesNo;
}
@@ -4900,7 +4898,7 @@ void ItemUseCB_RareCandy(u8 taskId, TaskFunc task)
{
gPartyMenuUseExitCallback = FALSE;
DisplayPartyMenuMessage(gText_WontHaveEffect, TRUE);
- schedule_bg_copy_tilemap_to_vram(2);
+ ScheduleBgCopyTilemapToVram(2);
gTasks[taskId].func = task;
}
else
@@ -4913,7 +4911,7 @@ void ItemUseCB_RareCandy(u8 taskId, TaskFunc task)
ConvertIntToDecimalStringN(gStringVar2, GetMonData(mon, MON_DATA_LEVEL), STR_CONV_MODE_LEFT_ALIGN, 3);
StringExpandPlaceholders(gStringVar4, gText_PkmnElevatedToLvVar2);
DisplayPartyMenuMessage(gStringVar4, TRUE);
- schedule_bg_copy_tilemap_to_vram(2);
+ ScheduleBgCopyTilemapToVram(2);
gTasks[taskId].func = Task_DisplayLevelUpStatsPg1;
}
}
@@ -4928,7 +4926,7 @@ static void UpdateMonDisplayInfoAfterRareCandy(u8 slot, struct Pokemon *mon)
DisplayPartyPokemonHPBarCheck(mon, &sPartyMenuBoxes[slot]);
UpdatePartyMonHPBar(sPartyMenuBoxes[slot].monSpriteId, mon);
AnimatePartySlot(slot, 1);
- schedule_bg_copy_tilemap_to_vram(0);
+ ScheduleBgCopyTilemapToVram(0);
}
static void Task_DisplayLevelUpStatsPg1(u8 taskId)
@@ -4953,21 +4951,21 @@ static void Task_DisplayLevelUpStatsPg2(u8 taskId)
static void DisplayLevelUpStatsPg1(u8 taskId)
{
- s16 *arrayPtr = sPartyMenuInternal->data;
+ u16 *arrayPtr = (u16*)sPartyMenuInternal->data;
- arrayPtr[12] = CreateLevelUpStatsWindow();
+ arrayPtr[12] = (u16)CreateLevelUpStatsWindow();
DrawLevelUpWindowPg1(arrayPtr[12], arrayPtr, &arrayPtr[6], TEXT_COLOR_WHITE, TEXT_COLOR_DARK_GREY, TEXT_COLOR_LIGHT_GREY);
CopyWindowToVram(arrayPtr[12], 2);
- schedule_bg_copy_tilemap_to_vram(2);
+ ScheduleBgCopyTilemapToVram(2);
}
static void DisplayLevelUpStatsPg2(u8 taskId)
{
- s16 *arrayPtr = sPartyMenuInternal->data;
+ u16 *arrayPtr = (u16 *)sPartyMenuInternal->data;
DrawLevelUpWindowPg2(arrayPtr[12], &arrayPtr[6], TEXT_COLOR_WHITE, TEXT_COLOR_DARK_GREY, TEXT_COLOR_LIGHT_GREY);
CopyWindowToVram(arrayPtr[12], 2);
- schedule_bg_copy_tilemap_to_vram(2);
+ ScheduleBgCopyTilemapToVram(2);
}
static void Task_TryLearnNewMoves(u8 taskId)
@@ -5041,7 +5039,7 @@ static void DisplayMonNeedsToReplaceMove(u8 taskId)
StringCopy(gStringVar2, gMoveNames[gMoveToLearn]);
StringExpandPlaceholders(gStringVar4, gText_PkmnNeedsToReplaceMove);
DisplayPartyMenuMessage(gStringVar4, TRUE);
- schedule_bg_copy_tilemap_to_vram(2);
+ ScheduleBgCopyTilemapToVram(2);
gPartyMenu.data1 = gMoveToLearn;
gTasks[taskId].func = Task_ReplaceMoveYesNo;
}
@@ -5052,7 +5050,7 @@ static void DisplayMonLearnedMove(u8 taskId, u16 move)
StringCopy(gStringVar2, gMoveNames[move]);
StringExpandPlaceholders(gStringVar4, gText_PkmnLearnedMove3);
DisplayPartyMenuMessage(gStringVar4, TRUE);
- schedule_bg_copy_tilemap_to_vram(2);
+ ScheduleBgCopyTilemapToVram(2);
gPartyMenu.data1 = move;
gTasks[taskId].func = Task_DoLearnedMoveFanfareAfterText;
}
@@ -5097,7 +5095,7 @@ static void UseSacredAsh(u8 taskId)
return;
}
- PlaySE(SE_KAIFUKU);
+ PlaySE(SE_USE_ITEM);
SetPartyMonAilmentGfx(mon, &sPartyMenuBoxes[gPartyMenu.slotId]);
if (gSprites[sPartyMenuBoxes[gPartyMenu.slotId].statusSpriteId].invisible)
DisplayPartyPokemonLevelCheck(mon, &sPartyMenuBoxes[gPartyMenu.slotId], 1);
@@ -5124,7 +5122,7 @@ static void Task_SacredAshLoop(u8 taskId)
{
gPartyMenuUseExitCallback = FALSE;
DisplayPartyMenuMessage(gText_WontHaveEffect, TRUE);
- schedule_bg_copy_tilemap_to_vram(2);
+ ScheduleBgCopyTilemapToVram(2);
}
else
{
@@ -5146,7 +5144,7 @@ static void Task_SacredAshDisplayHPRestored(u8 taskId)
GetMonNickname(&gPlayerParty[gPartyMenu.slotId], gStringVar1);
StringExpandPlaceholders(gStringVar4, gText_PkmnHPRestoredByVar2);
DisplayPartyMenuMessage(gStringVar4, FALSE);
- schedule_bg_copy_tilemap_to_vram(2);
+ ScheduleBgCopyTilemapToVram(2);
gTasks[taskId].func = Task_SacredAshLoop;
}
@@ -5162,7 +5160,7 @@ void ItemUseCB_EvolutionStone(u8 taskId, TaskFunc task)
{
gPartyMenuUseExitCallback = FALSE;
DisplayPartyMenuMessage(gText_WontHaveEffect, TRUE);
- schedule_bg_copy_tilemap_to_vram(2);
+ ScheduleBgCopyTilemapToVram(2);
gTasks[taskId].func = task;
}
else
@@ -5440,7 +5438,7 @@ static void Task_HandleSwitchItemsFromBagYesNoInput(u8 taskId)
static void DisplayItemMustBeRemovedFirstMessage(u8 taskId)
{
DisplayPartyMenuMessage(gText_RemoveMailBeforeItem, TRUE);
- schedule_bg_copy_tilemap_to_vram(2);
+ ScheduleBgCopyTilemapToVram(2);
gTasks[taskId].func = Task_UpdateHeldItemSpriteAndClosePartyMenu;
}
@@ -5484,7 +5482,7 @@ static void TryGiveMailToSelectedMon(u8 taskId)
ClearMailStruct(mail);
DisplayPartyMenuMessage(gText_MailTransferredFromMailbox, TRUE);
}
- schedule_bg_copy_tilemap_to_vram(2);
+ ScheduleBgCopyTilemapToVram(2);
gTasks[taskId].func = Task_UpdateHeldItemSpriteAndClosePartyMenu;
}
@@ -5598,7 +5596,7 @@ static void Task_ValidateChosenHalfParty(u8 taskId)
if (msgId != 0xFF)
{
- PlaySE(SE_HAZURE);
+ PlaySE(SE_FAILURE);
DisplayPartyMenuStdMessage(msgId);
gTasks[taskId].func = Task_ContinueChoosingHalfParty;
}
@@ -6079,7 +6077,7 @@ static void Task_MultiPartnerPartySlideIn(u8 taskId)
if (gMultiPartnerParty[i - MULTI_PARTY_SIZE].species != SPECIES_NONE)
AnimateSelectedPartyIcon(sPartyMenuBoxes[i].monSpriteId, 0);
}
- PlaySE(SE_W231); // The Harden SE plays once the partners party mons have slid on screen
+ PlaySE(SE_M_HARDEN); // The Harden SE plays once the partners party mons have slid on screen
gTasks[taskId].func = Task_WaitAfterMultiPartnerPartySlideIn;
}
}
diff --git a/src/play_time.c b/src/play_time.c
index 27a57f28b..97f4ac22f 100644
--- a/src/play_time.c
+++ b/src/play_time.c
@@ -35,31 +35,31 @@ void PlayTimeCounter_Stop(void)
void PlayTimeCounter_Update(void)
{
- if (sPlayTimeCounterState == RUNNING)
- {
- gSaveBlock2Ptr->playTimeVBlanks++;
-
- if (gSaveBlock2Ptr->playTimeVBlanks > 59)
- {
- gSaveBlock2Ptr->playTimeVBlanks = 0;
- gSaveBlock2Ptr->playTimeSeconds++;
-
- if (gSaveBlock2Ptr->playTimeSeconds > 59)
- {
- gSaveBlock2Ptr->playTimeSeconds = 0;
- gSaveBlock2Ptr->playTimeMinutes++;
-
- if (gSaveBlock2Ptr->playTimeMinutes > 59)
- {
- gSaveBlock2Ptr->playTimeMinutes = 0;
- gSaveBlock2Ptr->playTimeHours++;
-
- if (gSaveBlock2Ptr->playTimeHours > 999)
- PlayTimeCounter_SetToMax();
- }
- }
- }
- }
+ if (sPlayTimeCounterState != RUNNING)
+ return;
+
+ gSaveBlock2Ptr->playTimeVBlanks++;
+
+ if (gSaveBlock2Ptr->playTimeVBlanks < 60)
+ return;
+
+ gSaveBlock2Ptr->playTimeVBlanks = 0;
+ gSaveBlock2Ptr->playTimeSeconds++;
+
+ if (gSaveBlock2Ptr->playTimeSeconds < 60)
+ return;
+
+ gSaveBlock2Ptr->playTimeSeconds = 0;
+ gSaveBlock2Ptr->playTimeMinutes++;
+
+ if (gSaveBlock2Ptr->playTimeMinutes < 60)
+ return;
+
+ gSaveBlock2Ptr->playTimeMinutes = 0;
+ gSaveBlock2Ptr->playTimeHours++;
+
+ if (gSaveBlock2Ptr->playTimeHours > 999)
+ PlayTimeCounter_SetToMax();
}
void PlayTimeCounter_SetToMax(void)
diff --git a/src/player_pc.c b/src/player_pc.c
index bb2361779..2010d84f8 100644
--- a/src/player_pc.c
+++ b/src/player_pc.c
@@ -327,7 +327,7 @@ void PlayerPC(void)
static void InitPlayerPCMenu(u8 taskId)
{
- u16 *data;
+ s16 *data;
struct WindowTemplate windowTemplate;
data = gTasks[taskId].data;
@@ -340,13 +340,13 @@ static void InitPlayerPCMenu(u8 taskId)
SetStandardWindowBorderStyle(data[4], 0);
sub_81995E4(data[4], gPcItemMenuOptionsNum, sPlayerPCMenuActions, gPcItemMenuOptionOrder);
InitMenuInUpperLeftCornerPlaySoundWhenAPressed(data[4], gPcItemMenuOptionsNum, 0);
- schedule_bg_copy_tilemap_to_vram(0);
+ ScheduleBgCopyTilemapToVram(0);
gTasks[taskId].func = PlayerPCProcessMenuInput;
}
static void PlayerPCProcessMenuInput(u8 taskId)
{
- u16 *data;
+ s16 *data;
s8 inputOptionId;
data = gTasks[taskId].data;
@@ -364,14 +364,14 @@ static void PlayerPCProcessMenuInput(u8 taskId)
ClearStdWindowAndFrameToTransparent(data[4], FALSE);
ClearWindowTilemap(data[4]);
RemoveWindow(data[4]);
- schedule_bg_copy_tilemap_to_vram(0);
+ ScheduleBgCopyTilemapToVram(0);
gTasks[taskId].func = PlayerPC_TurnOff;
break;
default:
ClearStdWindowAndFrameToTransparent(data[4], FALSE);
ClearWindowTilemap(data[4]);
RemoveWindow(data[4]);
- schedule_bg_copy_tilemap_to_vram(0);
+ ScheduleBgCopyTilemapToVram(0);
gTasks[taskId].func = sPlayerPCMenuActions[gPcItemMenuOptionOrder[inputOptionId]].func.void_u8;
break;
}
@@ -435,7 +435,7 @@ static void PlayerPC_TurnOff(u8 taskId)
static void InitItemStorageMenu(u8 taskId, u8 var)
{
- u16 *data;
+ s16 *data;
struct WindowTemplate windowTemplate;
data = gTasks[taskId].data;
@@ -445,7 +445,7 @@ static void InitItemStorageMenu(u8 taskId, u8 var)
SetStandardWindowBorderStyle(data[4], 0);
PrintMenuTable(data[4], 4, gPCText_ItemPCOptionsText);
InitMenuInUpperLeftCornerPlaySoundWhenAPressed(data[4], 4, var);
- schedule_bg_copy_tilemap_to_vram(0);
+ ScheduleBgCopyTilemapToVram(0);
ItemStorageMenuPrint(gPCText_OptionDescList[var]);
}
@@ -492,7 +492,7 @@ static void Task_ItemStorage_Deposit(u8 taskId)
if (!gPaletteFade.active)
{
CleanupOverworldWindowsAndTilemaps();
- sub_81AAC14();
+ CB2_GoToItemDepositMenu();
DestroyTask(taskId);
}
}
@@ -548,7 +548,7 @@ static void ItemStorage_Toss(u8 taskId)
static void ItemStorage_WithdrawToss_Helper(u8 taskId, bool8 toss)
{
- u16 *data = gTasks[taskId].data;
+ s16 *data = gTasks[taskId].data;
data[3] = toss;
sub_816B4DC(taskId);
@@ -581,12 +581,12 @@ static void ItemStorage_SetItemAndMailCount(u8 taskId)
static void sub_816B4DC(u8 taskId)
{
- u16 *data = gTasks[taskId].data;
+ u16 *data = (u16 *)gTasks[taskId].data;
- ClearStdWindowAndFrameToTransparent(data[4], FALSE);
+ ClearStdWindowAndFrameToTransparent((u8)data[4], FALSE);
ClearWindowTilemap(data[4]);
RemoveWindow(data[4]);
- schedule_bg_copy_tilemap_to_vram(0);
+ ScheduleBgCopyTilemapToVram(0);
}
static u8 GetMailboxMailCount(void)
@@ -626,7 +626,7 @@ static void Mailbox_DrawMailboxMenu(u8 taskId)
windowId = sub_81D1C84(0);
sub_81D1C84(1);
AddTextPrinterParameterized(windowId, 1, gText_Mailbox, GetStringCenterAlignXOffset(1, gText_Mailbox, 0x40), 1, 0, NULL);
- schedule_bg_copy_tilemap_to_vram(0);
+ ScheduleBgCopyTilemapToVram(0);
gTasks[taskId].data[5] = sub_81D1DC0(&playerPCItemPageInfo);
sub_81D1E90(&playerPCItemPageInfo);
}
@@ -655,7 +655,7 @@ static void Mailbox_ProcessInput(u8 taskId)
sub_81D1D04(0);
sub_81D1D04(1);
DestroyListMenuTask(data[5], &(playerPCItemPageInfo.itemsAbove), &(playerPCItemPageInfo.cursorPos));
- schedule_bg_copy_tilemap_to_vram(0);
+ ScheduleBgCopyTilemapToVram(0);
RemoveScrollIndicatorArrowPair(playerPCItemPageInfo.scrollIndicatorId);
gTasks[taskId].func = Mailbox_PrintWhatToDoWithPlayerMailText;
break;
@@ -678,7 +678,7 @@ static void Mailbox_ReturnToPlayerPC(u8 taskId)
sub_81D1D04(0);
sub_81D1D04(1);
DestroyListMenuTask(data[5], NULL, NULL);
- schedule_bg_copy_tilemap_to_vram(0);
+ ScheduleBgCopyTilemapToVram(0);
sub_81D1EC0();
ReshowPlayerPC(taskId);
}
@@ -688,7 +688,7 @@ static void Mailbox_PrintMailOptions(u8 taskId)
u8 r4 = sub_81D1C84(2);
PrintMenuTable(r4, 4, gMailboxMailOptions);
InitMenuInUpperLeftCornerPlaySoundWhenAPressed(r4, 4, 0);
- schedule_bg_copy_tilemap_to_vram(0);
+ ScheduleBgCopyTilemapToVram(0);
gTasks[taskId].func = Mailbox_MailOptionsProcessInput;
}
@@ -865,7 +865,7 @@ static void Mailbox_Cancel(u8 taskId)
sub_81D1D04(2);
ClearDialogWindowAndFrame(0, 0);
Mailbox_DrawMailboxMenu(taskId);
- schedule_bg_copy_tilemap_to_vram(0);
+ ScheduleBgCopyTilemapToVram(0);
gTasks[taskId].func = Mailbox_ProcessInput;
}
@@ -893,7 +893,7 @@ static u8 sub_816BC7C(u8 a)
{
*windowIdLoc = AddWindow(&gUnknown_085DFF5C[a]);
DrawStdFrameWithCustomTileAndPalette(*windowIdLoc, FALSE, 0x214, 0xE);
- schedule_bg_copy_tilemap_to_vram(0);
+ ScheduleBgCopyTilemapToVram(0);
}
return *windowIdLoc;
}
@@ -905,7 +905,7 @@ static void sub_816BCC4(u8 a)
{
ClearStdWindowAndFrameToTransparent(*windowIdLoc, FALSE);
ClearWindowTilemap(*windowIdLoc);
- schedule_bg_copy_tilemap_to_vram(0);
+ ScheduleBgCopyTilemapToVram(0);
RemoveWindow(*windowIdLoc);
*windowIdLoc = 0xFF;
}
@@ -1076,7 +1076,7 @@ static void ItemStorage_ProcessWithdrawTossInput(u8 taskId)
ItemStorage_RefreshListMenu();
data[5] = ListMenuInit(&gMultiuseListMenuTemplate, playerPCItemPageInfo.itemsAbove, playerPCItemPageInfo.cursorPos);
ItemStorage_StartScrollIndicator();
- schedule_bg_copy_tilemap_to_vram(0);
+ ScheduleBgCopyTilemapToVram(0);
gTasks[taskId].func = ItemStorage_ProcessInput;
}
@@ -1272,7 +1272,7 @@ static void ItemStorage_DoItemSwap(u8 taskId, bool8 a)
sub_81223FC(gUnknown_0203BCC4->spriteIds, 7, 1);
gUnknown_0203BCC4->unk666 = 0xFF;
data[5] = ListMenuInit(&gMultiuseListMenuTemplate, playerPCItemPageInfo.itemsAbove, playerPCItemPageInfo.cursorPos);
- schedule_bg_copy_tilemap_to_vram(0);
+ ScheduleBgCopyTilemapToVram(0);
gTasks[taskId].func = ItemStorage_ProcessInput;
}
@@ -1380,7 +1380,7 @@ static void ItemStorage_DoItemToss(u8 taskId)
data = gTasks[taskId].data;
b = (playerPCItemPageInfo.cursorPos + playerPCItemPageInfo.itemsAbove);
- if (!ItemId_GetImportance(gSaveBlock1Ptr->pcItems[b].itemId))
+ if (ItemId_GetImportance(gSaveBlock1Ptr->pcItems[b].itemId) == 0)
{
CopyItemName(gSaveBlock1Ptr->pcItems[b].itemId, gStringVar1);
ConvertIntToDecimalStringN(gStringVar2, data[2], STR_CONV_MODE_LEFT_ALIGN, 3);
diff --git a/src/pokeball.c b/src/pokeball.c
index d473f9ba0..b176677bd 100644
--- a/src/pokeball.c
+++ b/src/pokeball.c
@@ -166,43 +166,43 @@ static const union AnimCmd *const sBallAnimSequences[] =
sBallAnimSeq6,
};
-static const union AffineAnimCmd sBallAffineAnimSeq0[] =
+static const union AffineAnimCmd sAffineAnim_BallRotate_0[] =
{
AFFINEANIMCMD_FRAME(0, 0, 0, 1),
AFFINEANIMCMD_JUMP(0),
};
-static const union AffineAnimCmd sBallAffineAnimSeq1[] =
+static const union AffineAnimCmd sAffineAnim_BallRotate_Right[] =
{
AFFINEANIMCMD_FRAME(0, 0, -3, 1),
AFFINEANIMCMD_JUMP(0),
};
-static const union AffineAnimCmd sBallAffineAnimSeq2[] =
+static const union AffineAnimCmd sAffineAnim_BallRotate_Left[] =
{
AFFINEANIMCMD_FRAME(0, 0, 3, 1),
AFFINEANIMCMD_JUMP(0),
};
-static const union AffineAnimCmd sBallAffineAnimSeq3[] =
+static const union AffineAnimCmd sAffineAnim_BallRotate_3[] =
{
AFFINEANIMCMD_FRAME(256, 256, 0, 0),
AFFINEANIMCMD_END,
};
-static const union AffineAnimCmd sBallAffineAnimSeq4[] =
+static const union AffineAnimCmd sAffineAnim_BallRotate_4[] =
{
AFFINEANIMCMD_FRAME(0, 0, 25, 1),
AFFINEANIMCMD_JUMP(0),
};
-static const union AffineAnimCmd *const sBallAffineAnimSequences[] =
+static const union AffineAnimCmd *const sAffineAnim_BallRotate[] =
{
- sBallAffineAnimSeq0,
- sBallAffineAnimSeq1,
- sBallAffineAnimSeq2,
- sBallAffineAnimSeq3,
- sBallAffineAnimSeq4,
+ [BALL_AFFINE_ANIM_0] = sAffineAnim_BallRotate_0,
+ [BALL_ROTATE_RIGHT] = sAffineAnim_BallRotate_Right,
+ [BALL_ROTATE_LEFT] = sAffineAnim_BallRotate_Left,
+ [BALL_AFFINE_ANIM_3] = sAffineAnim_BallRotate_3,
+ [BALL_AFFINE_ANIM_4] = sAffineAnim_BallRotate_4,
};
const struct SpriteTemplate gBallSpriteTemplates[POKEBALL_COUNT] =
@@ -213,7 +213,7 @@ const struct SpriteTemplate gBallSpriteTemplates[POKEBALL_COUNT] =
.oam = &sBallOamData,
.anims = sBallAnimSequences,
.images = NULL,
- .affineAnims = sBallAffineAnimSequences,
+ .affineAnims = sAffineAnim_BallRotate,
.callback = SpriteCB_TestBallThrow,
},
{
@@ -222,7 +222,7 @@ const struct SpriteTemplate gBallSpriteTemplates[POKEBALL_COUNT] =
.oam = &sBallOamData,
.anims = sBallAnimSequences,
.images = NULL,
- .affineAnims = sBallAffineAnimSequences,
+ .affineAnims = sAffineAnim_BallRotate,
.callback = SpriteCB_TestBallThrow,
},
{
@@ -231,7 +231,7 @@ const struct SpriteTemplate gBallSpriteTemplates[POKEBALL_COUNT] =
.oam = &sBallOamData,
.anims = sBallAnimSequences,
.images = NULL,
- .affineAnims = sBallAffineAnimSequences,
+ .affineAnims = sAffineAnim_BallRotate,
.callback = SpriteCB_TestBallThrow,
},
{
@@ -240,7 +240,7 @@ const struct SpriteTemplate gBallSpriteTemplates[POKEBALL_COUNT] =
.oam = &sBallOamData,
.anims = sBallAnimSequences,
.images = NULL,
- .affineAnims = sBallAffineAnimSequences,
+ .affineAnims = sAffineAnim_BallRotate,
.callback = SpriteCB_TestBallThrow,
},
{
@@ -249,7 +249,7 @@ const struct SpriteTemplate gBallSpriteTemplates[POKEBALL_COUNT] =
.oam = &sBallOamData,
.anims = sBallAnimSequences,
.images = NULL,
- .affineAnims = sBallAffineAnimSequences,
+ .affineAnims = sAffineAnim_BallRotate,
.callback = SpriteCB_TestBallThrow,
},
{
@@ -258,7 +258,7 @@ const struct SpriteTemplate gBallSpriteTemplates[POKEBALL_COUNT] =
.oam = &sBallOamData,
.anims = sBallAnimSequences,
.images = NULL,
- .affineAnims = sBallAffineAnimSequences,
+ .affineAnims = sAffineAnim_BallRotate,
.callback = SpriteCB_TestBallThrow,
},
{
@@ -267,7 +267,7 @@ const struct SpriteTemplate gBallSpriteTemplates[POKEBALL_COUNT] =
.oam = &sBallOamData,
.anims = sBallAnimSequences,
.images = NULL,
- .affineAnims = sBallAffineAnimSequences,
+ .affineAnims = sAffineAnim_BallRotate,
.callback = SpriteCB_TestBallThrow,
},
{
@@ -276,7 +276,7 @@ const struct SpriteTemplate gBallSpriteTemplates[POKEBALL_COUNT] =
.oam = &sBallOamData,
.anims = sBallAnimSequences,
.images = NULL,
- .affineAnims = sBallAffineAnimSequences,
+ .affineAnims = sAffineAnim_BallRotate,
.callback = SpriteCB_TestBallThrow,
},
{
@@ -285,7 +285,7 @@ const struct SpriteTemplate gBallSpriteTemplates[POKEBALL_COUNT] =
.oam = &sBallOamData,
.anims = sBallAnimSequences,
.images = NULL,
- .affineAnims = sBallAffineAnimSequences,
+ .affineAnims = sAffineAnim_BallRotate,
.callback = SpriteCB_TestBallThrow,
},
{
@@ -294,7 +294,7 @@ const struct SpriteTemplate gBallSpriteTemplates[POKEBALL_COUNT] =
.oam = &sBallOamData,
.anims = sBallAnimSequences,
.images = NULL,
- .affineAnims = sBallAffineAnimSequences,
+ .affineAnims = sAffineAnim_BallRotate,
.callback = SpriteCB_TestBallThrow,
},
{
@@ -303,7 +303,7 @@ const struct SpriteTemplate gBallSpriteTemplates[POKEBALL_COUNT] =
.oam = &sBallOamData,
.anims = sBallAnimSequences,
.images = NULL,
- .affineAnims = sBallAffineAnimSequences,
+ .affineAnims = sAffineAnim_BallRotate,
.callback = SpriteCB_TestBallThrow,
},
{
@@ -312,7 +312,7 @@ const struct SpriteTemplate gBallSpriteTemplates[POKEBALL_COUNT] =
.oam = &sBallOamData,
.anims = sBallAnimSequences,
.images = NULL,
- .affineAnims = sBallAffineAnimSequences,
+ .affineAnims = sAffineAnim_BallRotate,
.callback = SpriteCB_TestBallThrow,
},
};
@@ -406,7 +406,7 @@ static void Task_DoPokeballSendOutAnim(u8 taskId)
gSprites[ballSpriteId].oam.affineParam = taskId;
gTasks[taskId].tOpponentBattler = gBattlerTarget;
gTasks[taskId].func = TaskDummy;
- PlaySE(SE_NAGERU);
+ PlaySE(SE_BALL_THROW);
}
static void SpriteCB_TestBallThrow(struct Sprite *sprite)
@@ -446,6 +446,7 @@ static void sub_80756D4(struct Sprite *sprite)
sprite->callback = sub_80756E0;
}
+// Start something for battler
static void sub_80756E0(struct Sprite *sprite)
{
if (++sprite->data[5] == 10)
@@ -458,11 +459,12 @@ static void sub_80756E0(struct Sprite *sprite)
}
}
+// Shrink player
static void sub_807574C(struct Sprite *sprite)
{
sprite->data[5]++;
if (sprite->data[5] == 11)
- PlaySE(SE_SUIKOMU);
+ PlaySE(SE_BALL_TRADE);
if (gSprites[gBattlerSpriteIds[sprite->sBattler]].affineAnimEnded)
{
StartSpriteAnim(sprite, 2);
@@ -512,16 +514,16 @@ static void sub_8075838(struct Sprite *sprite)
switch (sprite->data[3] >> 8)
{
case 1:
- PlaySE(SE_KON);
+ PlaySE(SE_BALL_BOUNCE_1);
break;
case 2:
- PlaySE(SE_KON2);
+ PlaySE(SE_BALL_BOUNCE_2);
break;
case 3:
- PlaySE(SE_KON3);
+ PlaySE(SE_BALL_BOUNCE_3);
break;
default:
- PlaySE(SE_KON4);
+ PlaySE(SE_BALL_BOUNCE_4);
break;
}
}
@@ -563,7 +565,7 @@ static void sub_8075930(struct Sprite *sprite)
sprite->affineAnimPaused = TRUE;
StartSpriteAffineAnim(sprite, 1);
sprite->callback = sub_8075970;
- PlaySE(SE_BOWA);
+ PlaySE(SE_BALL);
}
}
@@ -632,7 +634,7 @@ static void sub_8075970(struct Sprite *sprite)
StartSpriteAffineAnim(sprite, 2);
else
StartSpriteAffineAnim(sprite, 1);
- PlaySE(SE_BOWA);
+ PlaySE(SE_BALL);
}
break;
}
@@ -738,7 +740,7 @@ static void SpriteCB_ReleaseMonFromBall(struct Sprite *sprite)
StartSpriteAnim(sprite, 1);
ballId = ItemIdToBallId(GetBattlerPokeballItemId(battlerId));
AnimateBallOpenParticles(sprite->pos1.x, sprite->pos1.y - 5, 1, 0x1C, ballId);
- sprite->data[0] = LaunchBallFadeMonTask(1, sprite->sBattler, 14, ballId);
+ sprite->data[0] = LaunchBallFadeMonTask(TRUE, sprite->sBattler, 14, ballId);
sprite->callback = HandleBallAnimEnd;
if (gMain.inBattle)
@@ -798,9 +800,9 @@ static void SpriteCB_ReleaseMonFromBall(struct Sprite *sprite)
StartSpriteAffineAnim(&gSprites[gBattlerSpriteIds[sprite->sBattler]], 1);
if (GetBattlerSide(sprite->sBattler) == B_SIDE_OPPONENT)
- gSprites[gBattlerSpriteIds[sprite->sBattler]].callback = sub_8039B58;
+ gSprites[gBattlerSpriteIds[sprite->sBattler]].callback = SpriteCb_OpponentMonFromBall;
else
- gSprites[gBattlerSpriteIds[sprite->sBattler]].callback = sub_8039E44;
+ gSprites[gBattlerSpriteIds[sprite->sBattler]].callback = SpriteCb_PlayerMonFromBall;
AnimateSprite(&gSprites[gBattlerSpriteIds[sprite->sBattler]]);
gSprites[gBattlerSpriteIds[sprite->sBattler]].data[1] = 0x1000;
@@ -879,7 +881,7 @@ static void sub_80760F8(struct Sprite *sprite)
{
gDoingBattleAnim = FALSE;
m4aMPlayAllStop();
- PlaySE(MUS_FANFA5);
+ PlaySE(MUS_EVOLVED);
}
else if (sprite->data[4] == 315)
{
@@ -1148,7 +1150,7 @@ static void sub_807687C(struct Sprite *sprite)
sprite->data[5]++;
if (sprite->data[5] == 11)
- PlaySE(SE_SUIKOMU);
+ PlaySE(SE_BALL_TRADE);
r1 = sprite->data[0];
if (gSprites[r1].affineAnimEnded)
{
diff --git a/src/pokeblock.c b/src/pokeblock.c
index b9031e173..fc5451b0a 100644
--- a/src/pokeblock.c
+++ b/src/pokeblock.c
@@ -117,7 +117,7 @@ EWRAM_DATA static struct PokeblockSavedData sSavedPokeblockData = {0};
EWRAM_DATA static struct PokeblockMenuStruct *sPokeblockMenu = NULL;
// const rom data
-const s8 gPokeblockFlavorCompatibilityTable[] =
+const s8 gPokeblockFlavorCompatibilityTable[NUM_NATURES * FLAVOR_COUNT] =
{
// Cool, Beauty, Cute, Smart, Tough
0, 0, 0, 0, 0, // Hardy
@@ -180,21 +180,21 @@ static const struct BgTemplate sBgTemplatesForPokeblockMenu[] =
const u8 *const gPokeblockNames[] =
{
- NULL,
- gText_RedPokeblock,
- gText_BluePokeblock,
- gText_PinkPokeblock,
- gText_GreenPokeblock,
- gText_YellowPokeblock,
- gText_PurplePokeblock,
- gText_IndigoPokeblock,
- gText_BrownPokeblock,
- gText_LiteBluePokeblock,
- gText_OlivePokeblock,
- gText_GrayPokeblock,
- gText_BlackPokeblock,
- gText_WhitePokeblock,
- gText_GoldPokeblock
+ [PBLOCK_CLR_NONE] = NULL,
+ [PBLOCK_CLR_RED] = gText_RedPokeblock,
+ [PBLOCK_CLR_BLUE] = gText_BluePokeblock,
+ [PBLOCK_CLR_PINK] = gText_PinkPokeblock,
+ [PBLOCK_CLR_GREEN] = gText_GreenPokeblock,
+ [PBLOCK_CLR_YELLOW] = gText_YellowPokeblock,
+ [PBLOCK_CLR_PURPLE] = gText_PurplePokeblock,
+ [PBLOCK_CLR_INDIGO] = gText_IndigoPokeblock,
+ [PBLOCK_CLR_BROWN] = gText_BrownPokeblock,
+ [PBLOCK_CLR_LITE_BLUE] = gText_LiteBluePokeblock,
+ [PBLOCK_CLR_OLIVE] = gText_OlivePokeblock,
+ [PBLOCK_CLR_GRAY] = gText_GrayPokeblock,
+ [PBLOCK_CLR_BLACK] = gText_BlackPokeblock,
+ [PBLOCK_CLR_WHITE] = gText_WhitePokeblock,
+ [PBLOCK_CLR_GOLD] = gText_GoldPokeblock
};
static const struct MenuAction sPokeblockMenuActions[] =
@@ -430,7 +430,7 @@ static const struct ListMenuTemplate sPokeblockListMenuTemplate =
// code
void OpenPokeblockCase(u8 caseId, void (*callback)(void))
{
- sPokeblockMenu = Alloc(sizeof(*sPokeblockMenu));
+ sPokeblockMenu = Alloc(sizeof(struct PokeblockMenuStruct));
sPokeblockMenu->caseId = caseId;
sPokeblockMenu->callbackOnUse = NULL;
sPokeblockMenu->unkTaskId = 0xFF;
@@ -475,7 +475,7 @@ static void CB2_PokeblockMenu(void)
RunTasks();
AnimateSprites();
BuildOamBuffer();
- do_scheduled_bg_tilemap_copies_to_vram();
+ DoScheduledBgTilemapCopiesToVram();
UpdatePaletteFade();
}
@@ -490,11 +490,11 @@ static void CB2_InitPokeblockMenu(void)
{
while (1)
{
- if (sub_81221EC() == TRUE)
+ if (MenuHelpers_CallLinkSomething() == TRUE)
break;
if (InitPokeblockMenu() == TRUE)
break;
- if (sub_81221AC() == TRUE)
+ if (MenuHelpers_LinkSomething() == TRUE)
break;
}
}
@@ -507,7 +507,7 @@ static bool8 InitPokeblockMenu(void)
{
case 0:
SetVBlankHBlankCallbacksToNull();
- clear_scheduled_bg_copies_to_vram();
+ ClearScheduledBgCopiesToVram();
gMain.state++;
break;
case 1:
@@ -606,7 +606,7 @@ static void HandleInitBackgrounds(void)
InitBgsFromTemplates(0, sBgTemplatesForPokeblockMenu, ARRAY_COUNT(sBgTemplatesForPokeblockMenu));
SetBgTilemapBuffer(2, sPokeblockMenu->tilemap);
ResetAllBgsCoordinates();
- schedule_bg_copy_tilemap_to_vram(2);
+ ScheduleBgCopyTilemapToVram(2);
SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_OBJ_ON | DISPCNT_OBJ_1D_MAP);
@@ -622,12 +622,12 @@ static bool8 LoadPokeblockMenuGfx(void)
switch (sPokeblockMenu->gfxState)
{
case 0:
- reset_temp_tile_data_buffers();
- decompress_and_copy_tile_data_to_vram(2, gMenuPokeblock_Gfx, 0, 0, 0);
+ ResetTempTileDataBuffers();
+ DecompressAndCopyTileDataToVram(2, gMenuPokeblock_Gfx, 0, 0, 0);
sPokeblockMenu->gfxState++;
break;
case 1:
- if (free_temp_tile_data_buffers_if_possible() != TRUE)
+ if (FreeTempTileDataBuffersIfPossible() != TRUE)
{
LZDecompressWram(gMenuPokeblock_Tilemap, sPokeblockMenu->tilemap);
sPokeblockMenu->gfxState++;
@@ -669,8 +669,8 @@ static void HandleInitWindows(void)
FillWindowPixelBuffer(i, PIXEL_FILL(0));
}
- schedule_bg_copy_tilemap_to_vram(0);
- schedule_bg_copy_tilemap_to_vram(1);
+ ScheduleBgCopyTilemapToVram(0);
+ ScheduleBgCopyTilemapToVram(1);
}
static void PrintOnPokeblockWindow(u8 windowId, const u8 *string, s32 x)
@@ -725,8 +725,8 @@ static void PutPokeblockListMenuString(u8 *dst, u16 pkblId)
u8 *txtPtr = StringCopy(dst, gPokeblockNames[pkblock->color]);
*(txtPtr++) = EXT_CTRL_CODE_BEGIN;
- *(txtPtr++) = 0x12;
- *(txtPtr++) = 0x57;
+ *(txtPtr++) = EXT_CTRL_CODE_SKIP;
+ *(txtPtr++) = CHAR_BLOCK_1;
ConvertIntToDecimalStringN(gStringVar1, GetHighestPokeblocksFlavorLevel(pkblock), STR_CONV_MODE_LEFT_ALIGN, 3);
StringExpandPlaceholders(txtPtr, gText_LvVar1);
@@ -786,14 +786,14 @@ static void sub_8135FCC(s32 pkblId)
CopyWindowToVram(7, 2);
}
- schedule_bg_copy_tilemap_to_vram(0);
- schedule_bg_copy_tilemap_to_vram(2);
+ ScheduleBgCopyTilemapToVram(0);
+ ScheduleBgCopyTilemapToVram(2);
}
static void HandlePokeblockMenuCursor(u16 cursorPos, u16 arg1)
{
FillBgTilemapBufferRect_Palette0(2, arg1, 0xF, (cursorPos * 2) + 1, 0xE, 2);
- schedule_bg_copy_tilemap_to_vram(2);
+ ScheduleBgCopyTilemapToVram(2);
}
static void CompactPokeblockSlots(void)
@@ -804,7 +804,7 @@ static void CompactPokeblockSlots(void)
{
for (j = i + 1; j < POKEBLOCKS_COUNT; j++)
{
- if (gSaveBlock1Ptr->pokeblocks[i].color == 0)
+ if (gSaveBlock1Ptr->pokeblocks[i].color == PBLOCK_CLR_NONE)
{
struct Pokeblock temp = gSaveBlock1Ptr->pokeblocks[i];
gSaveBlock1Ptr->pokeblocks[i] = gSaveBlock1Ptr->pokeblocks[j];
@@ -856,7 +856,7 @@ static void SetMenuItemsCountAndMaxShowed(void)
for (sPokeblockMenu->itemsNo = 0, i = 0; i < POKEBLOCKS_COUNT; i++)
{
- if (gSaveBlock1Ptr->pokeblocks[i].color != 0)
+ if (gSaveBlock1Ptr->pokeblocks[i].color != PBLOCK_CLR_NONE)
sPokeblockMenu->itemsNo++;
}
@@ -982,7 +982,7 @@ static void Task_HandlePokeblockMenuInput(u8 taskId)
{
s16 *data = gTasks[taskId].data;
- if (!gPaletteFade.active && sub_81221EC() != TRUE)
+ if (!gPaletteFade.active && MenuHelpers_CallLinkSomething() != TRUE)
{
if (gMain.newKeys & SELECT_BUTTON)
{
@@ -1032,7 +1032,7 @@ static void Task_HandlePokeblocksSwapInput(u8 taskId)
{
s16 *data = gTasks[taskId].data;
- if (sub_81221EC() == TRUE)
+ if (MenuHelpers_CallLinkSomething() == TRUE)
return;
if (gMain.newKeys & SELECT_BUTTON)
@@ -1101,7 +1101,7 @@ static void HandlePokeblocksSwap(u8 taskId, bool8 noSwap)
sSavedPokeblockData.lastItemPos--;
data[0] = ListMenuInit(&gMultiuseListMenuTemplate, sSavedPokeblockData.lastItemPage, sSavedPokeblockData.lastItemPos);
- schedule_bg_copy_tilemap_to_vram(0);
+ ScheduleBgCopyTilemapToVram(0);
sub_81223FC(sPokeblockMenu->field_E75, FIELD_E75_COUNT, 1);
for (i = 0; i < 9; i++)
@@ -1125,7 +1125,7 @@ static void PutPokeblockOptionsWindow(u8 taskId)
sub_81995E4(data[1], sPokeblockMenu->optionsNo, sPokeblockMenuActions, sPokeblockMenu->pokeblockOptionsIds);
InitMenuInUpperLeftCornerPlaySoundWhenAPressed(data[1], sPokeblockMenu->optionsNo, 0);
PutWindowTilemap(data[1]);
- schedule_bg_copy_tilemap_to_vram(1);
+ ScheduleBgCopyTilemapToVram(1);
gTasks[taskId].func = Task_HandlePokeblockOptionsInput;
}
@@ -1134,7 +1134,7 @@ static void Task_HandlePokeblockOptionsInput(u8 taskId)
{
s8 itemId;
- if (sub_81221EC() == TRUE)
+ if (MenuHelpers_CallLinkSomething() == TRUE)
return;
itemId = Menu_ProcessInputNoWrap();
@@ -1212,8 +1212,8 @@ static void HandleErasePokeblock(u8 taskId)
HandlePokeblockListMenuItems();
data[0] = ListMenuInit(&gMultiuseListMenuTemplate, *lastPage, *lastPos);
HandlePokeblockMenuCursor(*lastPos, 0x1005);
- schedule_bg_copy_tilemap_to_vram(0);
- schedule_bg_copy_tilemap_to_vram(1);
+ ScheduleBgCopyTilemapToVram(0);
+ ScheduleBgCopyTilemapToVram(1);
TossPokeblockChoice_No(taskId);
}
}
@@ -1221,7 +1221,7 @@ static void HandleErasePokeblock(u8 taskId)
static void TossPokeblockChoice_No(u8 taskId)
{
ClearDialogWindowAndFrameToTransparent(10, FALSE);
- schedule_bg_copy_tilemap_to_vram(1);
+ ScheduleBgCopyTilemapToVram(1);
sub_81363BC();
gTasks[taskId].func = Task_HandlePokeblockMenuInput;
}
@@ -1268,7 +1268,7 @@ static void PokeblockAction_Cancel(u8 taskId)
s16 *data = gTasks[taskId].data;
ClearStdWindowAndFrameToTransparent(data[1], FALSE);
- schedule_bg_copy_tilemap_to_vram(1);
+ ScheduleBgCopyTilemapToVram(1);
sub_81363BC();
gTasks[taskId].func = Task_HandlePokeblockMenuInput;
}
@@ -1322,7 +1322,7 @@ s8 GetFirstFreePokeblockSlot(void)
for (i = 0; i < POKEBLOCKS_COUNT; i++)
{
- if (gSaveBlock1Ptr->pokeblocks[i].color == 0)
+ if (gSaveBlock1Ptr->pokeblocks[i].color == PBLOCK_CLR_NONE)
return i;
}
@@ -1346,7 +1346,7 @@ bool32 AddPokeblock(const struct Pokeblock *pokeblock)
bool32 TryClearPokeblock(u8 pkblId)
{
- if (gSaveBlock1Ptr->pokeblocks[pkblId].color == 0)
+ if (gSaveBlock1Ptr->pokeblocks[pkblId].color == PBLOCK_CLR_NONE)
{
return FALSE;
}
@@ -1386,7 +1386,7 @@ s16 PokeblockGetGain(u8 nature, const struct Pokeblock *pokeblock)
{
curGain = GetPokeblockData(pokeblock, flavor + PBLOCK_SPICY);
if (curGain > 0)
- totalGain += curGain * gPokeblockFlavorCompatibilityTable[5 * nature + flavor];
+ totalGain += curGain * gPokeblockFlavorCompatibilityTable[FLAVOR_COUNT * nature + flavor];
}
return totalGain;
diff --git a/src/pokeblock_feed.c b/src/pokeblock_feed.c
index 5edf14309..797771f80 100644
--- a/src/pokeblock_feed.c
+++ b/src/pokeblock_feed.c
@@ -84,7 +84,7 @@ EWRAM_DATA static struct PokeblockFeedStruct *sPokeblockFeed = NULL;
EWRAM_DATA static struct CompressedSpritePalette sPokeblockSpritePal = {0};
// const rom data
-static const u8 sNatureToMonPokeblockAnim[][2] =
+static const u8 sNatureToMonPokeblockAnim[NUM_NATURES][2] =
{
[NATURE_HARDY] = { 0, 0 },
[NATURE_LONELY] = { 3, 0 },
@@ -382,22 +382,23 @@ static const struct WindowTemplate sWindowTemplates[] =
DUMMY_WIN_TEMPLATE
};
+// - 1 excludes PBLOCK_CLR_NONE
static const u32* const sPokeblocksPals[] =
{
- gPokeblockRed_Pal,
- gPokeblockBlue_Pal,
- gPokeblockPink_Pal,
- gPokeblockGreen_Pal,
- gPokeblockYellow_Pal,
- gPokeblockPurple_Pal,
- gPokeblockIndigo_Pal,
- gPokeblockBrown_Pal,
- gPokeblockLiteBlue_Pal,
- gPokeblockOlive_Pal,
- gPokeblockGray_Pal,
- gPokeblockBlack_Pal,
- gPokeblockWhite_Pal,
- gPokeblockGold_Pal
+ [PBLOCK_CLR_RED - 1] = gPokeblockRed_Pal,
+ [PBLOCK_CLR_BLUE - 1] = gPokeblockBlue_Pal,
+ [PBLOCK_CLR_PINK - 1] = gPokeblockPink_Pal,
+ [PBLOCK_CLR_GREEN - 1] = gPokeblockGreen_Pal,
+ [PBLOCK_CLR_YELLOW - 1] = gPokeblockYellow_Pal,
+ [PBLOCK_CLR_PURPLE - 1] = gPokeblockPurple_Pal,
+ [PBLOCK_CLR_INDIGO - 1] = gPokeblockIndigo_Pal,
+ [PBLOCK_CLR_BROWN - 1] = gPokeblockBrown_Pal,
+ [PBLOCK_CLR_LITE_BLUE - 1] = gPokeblockLiteBlue_Pal,
+ [PBLOCK_CLR_OLIVE - 1] = gPokeblockOlive_Pal,
+ [PBLOCK_CLR_GRAY - 1] = gPokeblockGray_Pal,
+ [PBLOCK_CLR_BLACK - 1] = gPokeblockBlack_Pal,
+ [PBLOCK_CLR_WHITE - 1] = gPokeblockWhite_Pal,
+ [PBLOCK_CLR_GOLD - 1] = gPokeblockGold_Pal
};
static const union AffineAnimCmd sSpriteAffineAnim_84120DC[] =
@@ -518,7 +519,7 @@ static void CB2_PokeblockFeed(void)
RunTasks();
AnimateSprites();
BuildOamBuffer();
- do_scheduled_bg_tilemap_copies_to_vram();
+ DoScheduledBgTilemapCopiesToVram();
UpdatePaletteFade();
}
@@ -536,7 +537,7 @@ static bool8 TransitionToPokeblockFeedScene(void)
case 0:
sPokeblockFeed = AllocZeroed(sizeof(*sPokeblockFeed));
SetVBlankHBlankCallbacksToNull();
- clear_scheduled_bg_copies_to_vram();
+ ClearScheduledBgCopiesToVram();
gMain.state++;
break;
case 1:
@@ -607,11 +608,11 @@ void CB2_PreparePokeblockFeedScene(void)
{
while (1)
{
- if (sub_81221EC() == TRUE)
+ if (MenuHelpers_CallLinkSomething() == TRUE)
break;
if (TransitionToPokeblockFeedScene() == TRUE)
break;
- if (sub_81221AC() == TRUE)
+ if (MenuHelpers_LinkSomething() == TRUE)
break;
}
}
@@ -624,7 +625,7 @@ static void HandleInitBackgrounds(void)
InitBgsFromTemplates(0, sBackgroundTemplates, ARRAY_COUNT(sBackgroundTemplates));
SetBgTilemapBuffer(1, sPokeblockFeed->tilemapBuffer);
ResetAllBgsCoordinates();
- schedule_bg_copy_tilemap_to_vram(1);
+ ScheduleBgCopyTilemapToVram(1);
SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_OBJ_ON | DISPCNT_OBJ_1D_MAP);
@@ -676,12 +677,12 @@ static bool8 LoadMonAndSceneGfx(struct Pokemon *mon)
sPokeblockFeed->loadGfxState++;
break;
case 6:
- reset_temp_tile_data_buffers();
- decompress_and_copy_tile_data_to_vram(1, gBattleTerrainTiles_Building, 0, 0, 0);
+ ResetTempTileDataBuffers();
+ DecompressAndCopyTileDataToVram(1, gBattleTerrainTiles_Building, 0, 0, 0);
sPokeblockFeed->loadGfxState++;
break;
case 7:
- if (free_temp_tile_data_buffers_if_possible() != TRUE)
+ if (FreeTempTileDataBuffersIfPossible() != TRUE)
{
LZDecompressWram(gUnknown_08D9BA44, sPokeblockFeed->tilemapBuffer);
sPokeblockFeed->loadGfxState++;
@@ -704,7 +705,7 @@ static void HandleInitWindows(void)
LoadPalette(gUnknown_0860F074, 0xF0, 0x20);
FillWindowPixelBuffer(0, PIXEL_FILL(0));
PutWindowTilemap(0);
- schedule_bg_copy_tilemap_to_vram(0);
+ ScheduleBgCopyTilemapToVram(0);
}
static void SetPokeblockSpritePal(u8 pokeblockCaseId)
diff --git a/src/pokedex.c b/src/pokedex.c
index c3d38681c..4f41c5557 100644
--- a/src/pokedex.c
+++ b/src/pokedex.c
@@ -172,16 +172,16 @@ struct PokedexView
u16 ownCount;
u16 monSpriteIds[MAX_MONS_ON_SCREEN];
u16 selectedMonSpriteId;
- u16 pokeBallRotationStep;
- u16 pokeBallRotationBackup;
+ s16 pokeBallRotationStep;
+ s16 pokeBallRotationBackup;
u8 pokeBallRotation;
u8 initialVOffset;
u8 scrollTimer;
u8 scrollDirection;
s16 listVOffset;
s16 listMovingVOffset;
- u16 scrollMonIncrement;
- u16 maxScrollTimer;
+ s16 scrollMonIncrement;
+ s16 maxScrollTimer;
u16 scrollSpeed;
u16 unkArr1[4]; // Cleared, never read
u8 filler[8];
@@ -1959,7 +1959,7 @@ static void Task_HandleSearchResultsStartMenuInput(u8 taskId)
case 3: //BACK TO POKEDEX
BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 0x10, RGB_BLACK);
gTasks[taskId].func = Task_ReturnToPokedexFromSearchResults;
- PlaySE(SE_TRACK_DOOR);
+ PlaySE(SE_TRUCK_DOOR);
break;
case 4: //CLOSE POKEDEX
BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 0x10, RGB_BLACK);
@@ -2060,10 +2060,10 @@ static bool8 LoadPokedexListPage(u8 page)
SetGpuReg(REG_OFFSET_BG2VOFS, sPokedexView->initialVOffset);
ResetBgsAndClearDma3BusyFlags(0);
InitBgsFromTemplates(0, sPokedex_BgTemplate, ARRAY_COUNT(sPokedex_BgTemplate));
- SetBgTilemapBuffer(3, AllocZeroed(0x800));
- SetBgTilemapBuffer(2, AllocZeroed(0x800));
- SetBgTilemapBuffer(1, AllocZeroed(0x800));
- SetBgTilemapBuffer(0, AllocZeroed(0x800));
+ SetBgTilemapBuffer(3, AllocZeroed(BG_SCREEN_SIZE));
+ SetBgTilemapBuffer(2, AllocZeroed(BG_SCREEN_SIZE));
+ SetBgTilemapBuffer(1, AllocZeroed(BG_SCREEN_SIZE));
+ SetBgTilemapBuffer(0, AllocZeroed(BG_SCREEN_SIZE));
DecompressAndLoadBgGfxUsingHeap(3, gPokedexMenu_Gfx, 0x2000, 0, 0);
CopyToBgTilemapBuffer(1, gPokedexList_Tilemap, 0, 0);
CopyToBgTilemapBuffer(3, gPokedexListUnderlay_Tilemap, 0, 0);
@@ -2218,18 +2218,14 @@ static void CreatePokedexList(u8 dexMode, u8 order)
}
else
{
- bool32 r10;
- s16 r5;
-
- r10 = r5 = i = 0;
- for (i = 0; i < temp_dexCount; i++)
+ s16 r5, r10;
+ for (i = 0, r5 = 0, r10 = 0; i < temp_dexCount; i++)
{
temp_dexNum = i + 1;
if (GetSetPokedexFlag(temp_dexNum, FLAG_GET_SEEN))
r10 = 1;
if (r10)
{
- asm(""); //Needed to match for some reason
sPokedexView->pokedexList[r5].dexNum = temp_dexNum;
sPokedexView->pokedexList[r5].seen = GetSetPokedexFlag(temp_dexNum, FLAG_GET_SEEN);
sPokedexView->pokedexList[r5].owned = GetSetPokedexFlag(temp_dexNum, FLAG_GET_CAUGHT);
@@ -2600,7 +2596,7 @@ static u16 TryDoPokedexScroll(u16 selectedMon, u16 ignored)
selectedMon = GetNextPosition(1, selectedMon, 0, sPokedexView->pokemonListCount - 1);
CreateScrollingPokemonSprite(1, selectedMon);
CreateMonListEntry(1, selectedMon, ignored);
- PlaySE(SE_Z_SCROLL);
+ PlaySE(SE_DEX_SCROLL);
}
else if ((gMain.heldKeys & DPAD_DOWN) && (selectedMon < sPokedexView->pokemonListCount - 1))
{
@@ -2608,7 +2604,7 @@ static u16 TryDoPokedexScroll(u16 selectedMon, u16 ignored)
selectedMon = GetNextPosition(0, selectedMon, 0, sPokedexView->pokemonListCount - 1);
CreateScrollingPokemonSprite(2, selectedMon);
CreateMonListEntry(2, selectedMon, ignored);
- PlaySE(SE_Z_SCROLL);
+ PlaySE(SE_DEX_SCROLL);
}
else if ((gMain.newKeys & DPAD_LEFT) && (selectedMon > 0))
{
@@ -2619,7 +2615,7 @@ static u16 TryDoPokedexScroll(u16 selectedMon, u16 ignored)
sPokedexView->pokeBallRotation += 16 * (selectedMon - startingPos);
ClearMonSprites();
CreateMonSpritesAtPos(selectedMon, 0xE);
- PlaySE(SE_Z_PAGE);
+ PlaySE(SE_DEX_PAGE);
}
else if ((gMain.newKeys & DPAD_RIGHT) && (selectedMon < sPokedexView->pokemonListCount - 1))
{
@@ -2629,7 +2625,7 @@ static u16 TryDoPokedexScroll(u16 selectedMon, u16 ignored)
sPokedexView->pokeBallRotation += 16 * (selectedMon - startingPos);
ClearMonSprites();
CreateMonSpritesAtPos(selectedMon, 0xE);
- PlaySE(SE_Z_PAGE);
+ PlaySE(SE_DEX_PAGE);
}
if (scrollDir == 0)
@@ -3190,10 +3186,10 @@ static u8 LoadInfoScreen(struct PokedexListItem* item, u8 monSpriteId)
gTasks[taskId].data[5] = 255;
ResetBgsAndClearDma3BusyFlags(0);
InitBgsFromTemplates(0, sInfoScreen_BgTemplate, ARRAY_COUNT(sInfoScreen_BgTemplate));
- SetBgTilemapBuffer(3, AllocZeroed(0x800));
- SetBgTilemapBuffer(2, AllocZeroed(0x800));
- SetBgTilemapBuffer(1, AllocZeroed(0x800));
- SetBgTilemapBuffer(0, AllocZeroed(0x800));
+ SetBgTilemapBuffer(3, AllocZeroed(BG_SCREEN_SIZE));
+ SetBgTilemapBuffer(2, AllocZeroed(BG_SCREEN_SIZE));
+ SetBgTilemapBuffer(1, AllocZeroed(BG_SCREEN_SIZE));
+ SetBgTilemapBuffer(0, AllocZeroed(BG_SCREEN_SIZE));
InitWindows(sInfoScreen_WindowTemplates);
DeactivateAllTextPrinters();
@@ -3357,7 +3353,7 @@ static void Task_HandleInfoScreenInput(u8 taskId)
// Scroll up/down
BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK);
gTasks[taskId].func = Task_LoadInfoScreenWaitForFade;
- PlaySE(SE_Z_SCROLL);
+ PlaySE(SE_DEX_SCROLL);
return;
}
if (gMain.newKeys & B_BUTTON)
@@ -3386,7 +3382,7 @@ static void Task_HandleInfoScreenInput(u8 taskId)
case SIZE_SCREEN:
if (!sPokedexListItem->owned)
{
- PlaySE(SE_HAZURE);
+ PlaySE(SE_FAILURE);
}
else
{
@@ -3410,7 +3406,7 @@ static void Task_HandleInfoScreenInput(u8 taskId)
{
sPokedexView->selectedScreen--;
HighlightScreenSelectBarItem(sPokedexView->selectedScreen, 0xD);
- PlaySE(SE_Z_PAGE);
+ PlaySE(SE_DEX_PAGE);
return;
}
if (((gMain.newKeys & DPAD_RIGHT)
@@ -3419,7 +3415,7 @@ static void Task_HandleInfoScreenInput(u8 taskId)
{
sPokedexView->selectedScreen++;
HighlightScreenSelectBarItem(sPokedexView->selectedScreen, 0xD);
- PlaySE(SE_Z_PAGE);
+ PlaySE(SE_DEX_PAGE);
return;
}
}
@@ -3658,7 +3654,7 @@ static void Task_HandleCryScreenInput(u8 taskId)
m4aMPlayContinue(&gMPlayInfo_BGM);
sPokedexView->screenSwitchState = 2;
gTasks[taskId].func = Task_SwitchScreensFromCryScreen;
- PlaySE(SE_Z_PAGE);
+ PlaySE(SE_DEX_PAGE);
return;
}
if ((gMain.newKeys & DPAD_RIGHT)
@@ -3666,7 +3662,7 @@ static void Task_HandleCryScreenInput(u8 taskId)
{
if (!sPokedexListItem->owned)
{
- PlaySE(SE_HAZURE);
+ PlaySE(SE_FAILURE);
}
else
{
@@ -3674,7 +3670,7 @@ static void Task_HandleCryScreenInput(u8 taskId)
m4aMPlayContinue(&gMPlayInfo_BGM);
sPokedexView->screenSwitchState = 3;
gTasks[taskId].func = Task_SwitchScreensFromCryScreen;
- PlaySE(SE_Z_PAGE);
+ PlaySE(SE_DEX_PAGE);
}
return;
}
@@ -3827,7 +3823,7 @@ static void Task_HandleSizeScreenInput(u8 taskId)
BeginNormalPaletteFade(0xFFFFFFEB, 0, 0, 0x10, RGB_BLACK);
sPokedexView->screenSwitchState = 2;
gTasks[taskId].func = Task_SwitchScreensFromSizeScreen;
- PlaySE(SE_Z_PAGE);
+ PlaySE(SE_DEX_PAGE);
}
}
@@ -3955,8 +3951,8 @@ static void Task_DisplayCaughtMonDexPage(u8 taskId)
ResetOtherVideoRegisters(DISPCNT_BG0_ON);
ResetBgsAndClearDma3BusyFlags(0);
InitBgsFromTemplates(0, sNewEntryInfoScreen_BgTemplate, ARRAY_COUNT(sNewEntryInfoScreen_BgTemplate));
- SetBgTilemapBuffer(3, AllocZeroed(0x800));
- SetBgTilemapBuffer(2, AllocZeroed(0x800));
+ SetBgTilemapBuffer(3, AllocZeroed(BG_SCREEN_SIZE));
+ SetBgTilemapBuffer(2, AllocZeroed(BG_SCREEN_SIZE));
InitWindows(sNewEntryInfoScreen_WindowTemplates);
DeactivateAllTextPrinters();
gTasks[taskId].tState = 1;
@@ -4149,7 +4145,7 @@ static void PrintMonHeight(u16 height, u8 left, u8 top)
inches = (inches - (feet * 120)) / 10;
buffer[i++] = EXT_CTRL_CODE_BEGIN;
- buffer[i++] = 0x13;
+ buffer[i++] = EXT_CTRL_CODE_CLEAR_TO;
if (feet / 10 == 0)
{
buffer[i++] = 18;
@@ -4525,7 +4521,11 @@ static void UnusedPrintMonName(u8 windowId, const u8* name, u8 left, u8 top)
;
for (i = 0; i < nameLength; i++)
str[ARRAY_COUNT(str) - nameLength + i] = name[i];
+#ifdef UBFIX
+ str[ARRAY_COUNT(str) - 1] = EOS;
+#else
str[ARRAY_COUNT(str)] = EOS;
+#endif
PrintInfoSubMenuText(windowId, str, left, top);
}
@@ -4820,10 +4820,10 @@ static void Task_LoadSearchMenu(u8 taskId)
ResetOtherVideoRegisters(0);
ResetBgsAndClearDma3BusyFlags(0);
InitBgsFromTemplates(0, sSearchMenu_BgTemplate, ARRAY_COUNT(sSearchMenu_BgTemplate));
- SetBgTilemapBuffer(3, AllocZeroed(0x800));
- SetBgTilemapBuffer(2, AllocZeroed(0x800));
- SetBgTilemapBuffer(1, AllocZeroed(0x800));
- SetBgTilemapBuffer(0, AllocZeroed(0x800));
+ SetBgTilemapBuffer(3, AllocZeroed(BG_SCREEN_SIZE));
+ SetBgTilemapBuffer(2, AllocZeroed(BG_SCREEN_SIZE));
+ SetBgTilemapBuffer(1, AllocZeroed(BG_SCREEN_SIZE));
+ SetBgTilemapBuffer(0, AllocZeroed(BG_SCREEN_SIZE));
InitWindows(sSearchMenu_WindowTemplate);
DeactivateAllTextPrinters();
PutWindowTilemap(0);
@@ -4936,7 +4936,7 @@ static void Task_HandleSearchTopBarInput(u8 taskId)
}
if ((gMain.newKeys & DPAD_LEFT) && gTasks[taskId].tTopBarItem > SEARCH_TOPBAR_SEARCH)
{
- PlaySE(SE_Z_PAGE);
+ PlaySE(SE_DEX_PAGE);
gTasks[taskId].tTopBarItem--;
HighlightSelectedSearchTopBarItem(gTasks[taskId].tTopBarItem);
CopyWindowToVram(0, 2);
@@ -4944,7 +4944,7 @@ static void Task_HandleSearchTopBarInput(u8 taskId)
}
if ((gMain.newKeys & DPAD_RIGHT) && gTasks[taskId].tTopBarItem < SEARCH_TOPBAR_CANCEL)
{
- PlaySE(SE_Z_PAGE);
+ PlaySE(SE_DEX_PAGE);
gTasks[taskId].tTopBarItem++;
HighlightSelectedSearchTopBarItem(gTasks[taskId].tTopBarItem);
CopyWindowToVram(0, 2);
@@ -4983,7 +4983,7 @@ static void Task_HandleSearchMenuInput(u8 taskId)
if (gMain.newKeys & B_BUTTON)
{
- PlaySE(SE_BOWA);
+ PlaySE(SE_BALL);
SetDefaultSearchModeAndOrder(taskId);
gTasks[taskId].func = Task_SwitchToSearchMenuTopBar;
return;
@@ -5011,7 +5011,7 @@ static void Task_HandleSearchMenuInput(u8 taskId)
{
EraseAndPrintSearchTextBox(gText_SearchingPleaseWait);
gTasks[taskId].func = Task_StartPokedexSearch;
- PlaySE(SE_Z_SEARCH);
+ PlaySE(SE_DEX_SEARCH);
CopyWindowToVram(0, 2);
}
}
@@ -5076,12 +5076,12 @@ static void Task_WaitAndCompleteSearch(u8 taskId)
{
if (sPokedexView->pokemonListCount != 0)
{
- PlaySE(SE_SEIKAI);
+ PlaySE(SE_SUCCESS);
EraseAndPrintSearchTextBox(gText_SearchCompleted);
}
else
{
- PlaySE(SE_HAZURE);
+ PlaySE(SE_FAILURE);
EraseAndPrintSearchTextBox(gText_NoMatchingPkmnWereFound);
}
gTasks[taskId].func = Task_SearchCompleteWaitForInput;
@@ -5105,7 +5105,7 @@ static void Task_SearchCompleteWaitForInput(u8 taskId)
else
{
gTasks[taskId].func = Task_SwitchToSearchMenu;
- PlaySE(SE_BOWA);
+ PlaySE(SE_BALL);
}
}
}
@@ -5117,9 +5117,9 @@ static void Task_SelectSearchMenuItem(u8 taskId)
u16 *scrollOffset;
DrawOrEraseSearchParameterBox(FALSE);
- menuItem = gTasks[taskId].tMenuItem;
- cursorPos = &gTasks[taskId].data[sSearchOptions[menuItem].taskDataCursorPos];
- scrollOffset = &gTasks[taskId].data[sSearchOptions[menuItem].taskDataScrollOffset];
+ menuItem = (u16)gTasks[taskId].tMenuItem;
+ cursorPos = (u16*)&gTasks[taskId].data[sSearchOptions[menuItem].taskDataCursorPos];
+ scrollOffset = (u16*)&gTasks[taskId].data[sSearchOptions[menuItem].taskDataScrollOffset];
gTasks[taskId].tCursorPos = *cursorPos;
gTasks[taskId].tScrollOffset = *scrollOffset;
PrintSearchParameterText(taskId);
@@ -5156,7 +5156,7 @@ static void Task_HandleSearchParameterInput(u8 taskId)
}
if (gMain.newKeys & B_BUTTON)
{
- PlaySE(SE_BOWA);
+ PlaySE(SE_BALL);
ClearSearchParameterBoxText();
DrawOrEraseSearchParameterBox(TRUE);
*cursorPos = gTasks[taskId].tCursorPos;
@@ -5258,11 +5258,11 @@ void SetSearchRectHighlight(u8 flags, u8 x, u8 y, u8 width)
}
}
#else
-__attribute__((naked))
+NAKED
void SetSearchRectHighlight(u8 flags, u8 x, u8 y, u8 width)
{
- asm(".syntax unified\n\
- push {r4-r7,lr}\n\
+ asm_unified(
+ "push {r4-r7,lr}\n\
mov r7, r8\n\
push {r7}\n\
adds r4, r3, 0\n\
@@ -5310,8 +5310,7 @@ _080C1DEC:\n\
pop {r4-r7}\n\
pop {r0}\n\
bx r0\n\
- .pool\n\
- .syntax divided\n");
+ .pool");
}
#endif
diff --git a/src/pokedex_area_region_map.c b/src/pokedex_area_region_map.c
index dfea9ea44..82d5e50e5 100644
--- a/src/pokedex_area_region_map.c
+++ b/src/pokedex_area_region_map.c
@@ -23,15 +23,15 @@ void LoadPokedexAreaMapGfx(const struct PokedexAreaMapTemplate *template)
if (mode == 0)
{
SetBgAttribute(template->bg, BG_ATTR_METRIC, 0);
- decompress_and_copy_tile_data_to_vram(template->bg, sPokedexAreaMap_Gfx, 0, template->offset, 0);
- sub_8199D3C(decompress_and_copy_tile_data_to_vram(template->bg, sPokedexAreaMap_Tilemap, 0, 0, 1), template->offset, 32, 32, FALSE);
+ DecompressAndCopyTileDataToVram(template->bg, sPokedexAreaMap_Gfx, 0, template->offset, 0);
+ sub_8199D3C(DecompressAndCopyTileDataToVram(template->bg, sPokedexAreaMap_Tilemap, 0, 0, 1), template->offset, 32, 32, FALSE);
}
else
{
SetBgAttribute(template->bg, BG_ATTR_METRIC, 2);
SetBgAttribute(template->bg, BG_ATTR_TYPE, 1);
- decompress_and_copy_tile_data_to_vram(template->bg, sPokedexAreaMapAffine_Gfx, 0, template->offset, 0);
- sub_8199D3C(decompress_and_copy_tile_data_to_vram(template->bg, sPokedexAreaMapAffine_Tilemap, 0, 0, 1), template->offset, 64, 64, TRUE);
+ DecompressAndCopyTileDataToVram(template->bg, sPokedexAreaMapAffine_Gfx, 0, template->offset, 0);
+ sub_8199D3C(DecompressAndCopyTileDataToVram(template->bg, sPokedexAreaMapAffine_Tilemap, 0, 0, 1), template->offset, 64, 64, TRUE);
}
ChangeBgX(template->bg, 0, 0);
@@ -43,7 +43,7 @@ void LoadPokedexAreaMapGfx(const struct PokedexAreaMapTemplate *template)
bool32 sub_81C4E90(void)
{
- if (!free_temp_tile_data_buffers_if_possible())
+ if (!FreeTempTileDataBuffersIfPossible())
{
ShowBg(*sPokedexAreaMapBgNum);
return FALSE;
diff --git a/src/pokedex_area_screen.c b/src/pokedex_area_screen.c
index ed692d6e3..8450f8530 100755
--- a/src/pokedex_area_screen.c
+++ b/src/pokedex_area_screen.c
@@ -21,7 +21,6 @@
#include "constants/rgb.h"
#include "constants/songs.h"
#include "constants/species.h"
-#include "constants/vars.h"
#define AREA_SCREEN_WIDTH 32
#define AREA_SCREEN_HEIGHT 20
@@ -310,11 +309,11 @@ static bool8 DrawAreaGlow(void)
BuildAreaGlowTilemap();
break;
case 2:
- decompress_and_copy_tile_data_to_vram(2, sAreaGlow_Gfx, 0, 0, 0);
+ DecompressAndCopyTileDataToVram(2, sAreaGlow_Gfx, 0, 0, 0);
LoadBgTilemap(2, sPokedexAreaScreen->areaGlowTilemap, 0x500, 0);
break;
case 3:
- if (!free_temp_tile_data_buffers_if_possible())
+ if (!FreeTempTileDataBuffersIfPossible())
{
CpuCopy32(sAreaGlow_Pal, gPlttBufferUnfaded + 0xA0, 0x20);
sPokedexAreaScreen->drawAreaGlowState++;
@@ -733,7 +732,7 @@ static void Task_HandlePokedexAreaScreenInput(u8 taskId)
else if (gMain.newKeys & DPAD_RIGHT || (gMain.newKeys & R_BUTTON && gSaveBlock2Ptr->optionsButtonMode == OPTIONS_BUTTON_MODE_LR))
{
gTasks[taskId].data[1] = 2;
- PlaySE(SE_Z_PAGE);
+ PlaySE(SE_DEX_PAGE);
}
else
return;
diff --git a/src/pokemon.c b/src/pokemon.c
index 87ea2551f..188624d6a 100644
--- a/src/pokemon.c
+++ b/src/pokemon.c
@@ -1349,7 +1349,7 @@ const struct SpindaSpot gSpindaSpotGraphics[] =
#include "data/pokemon/item_effects.h"
-const s8 gNatureStatTable[][NUM_EV_STATS] =
+const s8 gNatureStatTable[NUM_NATURES][NUM_NATURE_STATS] =
{
// Atk Def Spd Sp.Atk Sp.Def
{ 0, 0, 0, 0, 0}, // Hardy
@@ -1868,21 +1868,21 @@ const u8 gPPUpGetMask[] = {0x03, 0x0c, 0x30, 0xc0}; // Masks for getting PP Up c
const u8 gPPUpSetMask[] = {0xfc, 0xf3, 0xcf, 0x3f}; // Masks for setting PP Up count
const u8 gPPUpAddMask[] = {0x01, 0x04, 0x10, 0x40}; // Values added to PP Up count
-const u8 gStatStageRatios[][2] =
+const u8 gStatStageRatios[MAX_STAT_STAGE + 1][2] =
{
- {10, 40}, // -6
+ {10, 40}, // -6, MIN_STAT_STAGE
{10, 35}, // -5
{10, 30}, // -4
{10, 25}, // -3
{10, 20}, // -2
{10, 15}, // -1
- {10, 10}, // 0
+ {10, 10}, // 0, DEFAULT_STAT_STAGE
{15, 10}, // +1
{20, 10}, // +2
{25, 10}, // +3
{30, 10}, // +4
{35, 10}, // +5
- {40, 10}, // +6
+ {40, 10}, // +6, MAX_STAT_STAGE
};
static const u16 sDeoxysBaseStats[] =
@@ -1898,22 +1898,22 @@ static const u16 sDeoxysBaseStats[] =
const u16 gLinkPlayerFacilityClasses[NUM_MALE_LINK_FACILITY_CLASSES + NUM_FEMALE_LINK_FACILITY_CLASSES] =
{
// Male classes
- FACILITY_CLASS_COOLTRAINER_M,
- FACILITY_CLASS_BLACK_BELT,
+ FACILITY_CLASS_COOLTRAINER_M,
+ FACILITY_CLASS_BLACK_BELT,
FACILITY_CLASS_CAMPER,
- FACILITY_CLASS_YOUNGSTER,
- FACILITY_CLASS_PSYCHIC_M,
+ FACILITY_CLASS_YOUNGSTER,
+ FACILITY_CLASS_PSYCHIC_M,
FACILITY_CLASS_BUG_CATCHER,
- FACILITY_CLASS_PKMN_BREEDER_M,
+ FACILITY_CLASS_PKMN_BREEDER_M,
FACILITY_CLASS_GUITARIST,
// Female Classes
- FACILITY_CLASS_COOLTRAINER_F,
- FACILITY_CLASS_HEX_MANIAC,
+ FACILITY_CLASS_COOLTRAINER_F,
+ FACILITY_CLASS_HEX_MANIAC,
FACILITY_CLASS_PICNICKER,
- FACILITY_CLASS_LASS,
- FACILITY_CLASS_PSYCHIC_F,
+ FACILITY_CLASS_LASS,
+ FACILITY_CLASS_PSYCHIC_F,
FACILITY_CLASS_BATTLE_GIRL,
- FACILITY_CLASS_PKMN_BREEDER_F,
+ FACILITY_CLASS_PKMN_BREEDER_F,
FACILITY_CLASS_BEAUTY
};
@@ -2725,7 +2725,7 @@ void SetDeoxysStats(void)
}
}
-u16 sub_8068B48(void)
+u16 GetUnionRoomTrainerPic(void)
{
u8 linkId;
u32 arrId;
@@ -2740,7 +2740,7 @@ u16 sub_8068B48(void)
return FacilityClassToPicIndex(gLinkPlayerFacilityClasses[arrId]);
}
-u16 sub_8068BB0(void)
+u16 GetUnionRoomTrainerClass(void)
{
u8 linkId;
u32 arrId;
@@ -3199,7 +3199,7 @@ s32 CalculateBaseDamage(struct BattlePokemon *attacker, struct BattlePokemon *de
{
if (gCritMultiplier == 2)
{
- if (attacker->statStages[STAT_ATK] > 6)
+ if (attacker->statStages[STAT_ATK] > DEFAULT_STAT_STAGE)
APPLY_STAT_MOD(damage, attacker, attack, STAT_ATK)
else
damage = attack;
@@ -3212,7 +3212,7 @@ s32 CalculateBaseDamage(struct BattlePokemon *attacker, struct BattlePokemon *de
if (gCritMultiplier == 2)
{
- if (defender->statStages[STAT_DEF] < 6)
+ if (defender->statStages[STAT_DEF] < DEFAULT_STAT_STAGE)
APPLY_STAT_MOD(damageHelper, defender, defense, STAT_DEF)
else
damageHelper = defense;
@@ -3234,7 +3234,7 @@ s32 CalculateBaseDamage(struct BattlePokemon *attacker, struct BattlePokemon *de
damage /= 2;
}
- if ((gBattleTypeFlags & BATTLE_TYPE_DOUBLE) && gBattleMoves[move].target == 8 && CountAliveMonsInBattle(BATTLE_ALIVE_DEF_SIDE) == 2)
+ if ((gBattleTypeFlags & BATTLE_TYPE_DOUBLE) && gBattleMoves[move].target == MOVE_TARGET_BOTH && CountAliveMonsInBattle(BATTLE_ALIVE_DEF_SIDE) == 2)
damage /= 2;
// moves always do at least 1 damage.
@@ -3249,7 +3249,7 @@ s32 CalculateBaseDamage(struct BattlePokemon *attacker, struct BattlePokemon *de
{
if (gCritMultiplier == 2)
{
- if (attacker->statStages[STAT_SPATK] > 6)
+ if (attacker->statStages[STAT_SPATK] > DEFAULT_STAT_STAGE)
APPLY_STAT_MOD(damage, attacker, spAttack, STAT_SPATK)
else
damage = spAttack;
@@ -3262,7 +3262,7 @@ s32 CalculateBaseDamage(struct BattlePokemon *attacker, struct BattlePokemon *de
if (gCritMultiplier == 2)
{
- if (defender->statStages[STAT_SPDEF] < 6)
+ if (defender->statStages[STAT_SPDEF] < DEFAULT_STAT_STAGE)
APPLY_STAT_MOD(damageHelper, defender, spDefense, STAT_SPDEF)
else
damageHelper = spDefense;
@@ -3281,7 +3281,7 @@ s32 CalculateBaseDamage(struct BattlePokemon *attacker, struct BattlePokemon *de
damage /= 2;
}
- if ((gBattleTypeFlags & BATTLE_TYPE_DOUBLE) && gBattleMoves[move].target == 8 && CountAliveMonsInBattle(BATTLE_ALIVE_DEF_SIDE) == 2)
+ if ((gBattleTypeFlags & BATTLE_TYPE_DOUBLE) && gBattleMoves[move].target == MOVE_TARGET_BOTH && CountAliveMonsInBattle(BATTLE_ALIVE_DEF_SIDE) == 2)
damage /= 2;
// are effects of weather negated with cloud nine or air lock
@@ -4499,8 +4499,8 @@ void CreateSecretBaseEnemyParty(struct SecretBase *secretBaseRecord)
for (j = 0; j < MAX_MON_MOVES; j++)
{
- SetMonData(&gEnemyParty[i], MON_DATA_MOVE1 + j, &gBattleResources->secretBase->party.moves[i * 4 + j]);
- SetMonData(&gEnemyParty[i], MON_DATA_PP1 + j, &gBattleMoves[gBattleResources->secretBase->party.moves[i * 4 + j]].pp);
+ SetMonData(&gEnemyParty[i], MON_DATA_MOVE1 + j, &gBattleResources->secretBase->party.moves[i * MAX_MON_MOVES + j]);
+ SetMonData(&gEnemyParty[i], MON_DATA_PP1 + j, &gBattleMoves[gBattleResources->secretBase->party.moves[i * MAX_MON_MOVES + j]].pp);
}
}
}
@@ -4624,11 +4624,11 @@ void CopyPlayerPartyMonToBattleData(u8 battlerId, u8 partyIndex)
hpSwitchout = &gBattleStruct->hpOnSwitchout[GetBattlerSide(battlerId)];
*hpSwitchout = gBattleMons[battlerId].hp;
- for (i = 0; i < 8; i++)
- gBattleMons[battlerId].statStages[i] = 6;
+ for (i = 0; i < NUM_BATTLE_STATS; i++)
+ gBattleMons[battlerId].statStages[i] = DEFAULT_STAT_STAGE;
gBattleMons[battlerId].status2 = 0;
- sub_803FA70(battlerId);
+ UpdateSentPokesToOpponentValue(battlerId);
ClearTemporarySpeciesSpriteData(battlerId, FALSE);
}
@@ -4728,49 +4728,49 @@ bool8 PokemonUseItemEffects(struct Pokemon *mon, u16 item, u8 partyIndex, u8 mov
retVal = FALSE;
}
if ((itemEffect[cmdIndex] & ITEM0_X_ATTACK)
- && gBattleMons[gActiveBattler].statStages[STAT_ATK] < 12)
+ && gBattleMons[gActiveBattler].statStages[STAT_ATK] < MAX_STAT_STAGE)
{
gBattleMons[gActiveBattler].statStages[STAT_ATK] += itemEffect[cmdIndex] & ITEM0_X_ATTACK;
- if (gBattleMons[gActiveBattler].statStages[STAT_ATK] > 12)
- gBattleMons[gActiveBattler].statStages[STAT_ATK] = 12;
+ if (gBattleMons[gActiveBattler].statStages[STAT_ATK] > MAX_STAT_STAGE)
+ gBattleMons[gActiveBattler].statStages[STAT_ATK] = MAX_STAT_STAGE;
retVal = FALSE;
}
break;
// in-battle stat boosting effects
case 1:
if ((itemEffect[cmdIndex] & ITEM1_X_DEFEND)
- && gBattleMons[gActiveBattler].statStages[STAT_DEF] < 12)
+ && gBattleMons[gActiveBattler].statStages[STAT_DEF] < MAX_STAT_STAGE)
{
gBattleMons[gActiveBattler].statStages[STAT_DEF] += (itemEffect[cmdIndex] & ITEM1_X_DEFEND) >> 4;
- if (gBattleMons[gActiveBattler].statStages[STAT_DEF] > 12)
- gBattleMons[gActiveBattler].statStages[STAT_DEF] = 12;
+ if (gBattleMons[gActiveBattler].statStages[STAT_DEF] > MAX_STAT_STAGE)
+ gBattleMons[gActiveBattler].statStages[STAT_DEF] = MAX_STAT_STAGE;
retVal = FALSE;
}
if ((itemEffect[cmdIndex] & ITEM1_X_SPEED)
- && gBattleMons[gActiveBattler].statStages[STAT_SPEED] < 12)
+ && gBattleMons[gActiveBattler].statStages[STAT_SPEED] < MAX_STAT_STAGE)
{
gBattleMons[gActiveBattler].statStages[STAT_SPEED] += itemEffect[cmdIndex] & ITEM1_X_SPEED;
- if (gBattleMons[gActiveBattler].statStages[STAT_SPEED] > 12)
- gBattleMons[gActiveBattler].statStages[STAT_SPEED] = 12;
+ if (gBattleMons[gActiveBattler].statStages[STAT_SPEED] > MAX_STAT_STAGE)
+ gBattleMons[gActiveBattler].statStages[STAT_SPEED] = MAX_STAT_STAGE;
retVal = FALSE;
}
break;
// more stat boosting effects
case 2:
if ((itemEffect[cmdIndex] & ITEM2_X_ACCURACY)
- && gBattleMons[gActiveBattler].statStages[STAT_ACC] < 12)
+ && gBattleMons[gActiveBattler].statStages[STAT_ACC] < MAX_STAT_STAGE)
{
gBattleMons[gActiveBattler].statStages[STAT_ACC] += (itemEffect[cmdIndex] & ITEM2_X_ACCURACY) >> 4;
- if (gBattleMons[gActiveBattler].statStages[STAT_ACC] > 12)
- gBattleMons[gActiveBattler].statStages[STAT_ACC] = 12;
+ if (gBattleMons[gActiveBattler].statStages[STAT_ACC] > MAX_STAT_STAGE)
+ gBattleMons[gActiveBattler].statStages[STAT_ACC] = MAX_STAT_STAGE;
retVal = FALSE;
}
if ((itemEffect[cmdIndex] & ITEM2_X_SPATK)
- && gBattleMons[gActiveBattler].statStages[STAT_SPATK] < 12)
+ && gBattleMons[gActiveBattler].statStages[STAT_SPATK] < MAX_STAT_STAGE)
{
gBattleMons[gActiveBattler].statStages[STAT_SPATK] += itemEffect[cmdIndex] & ITEM2_X_SPATK;
- if (gBattleMons[gActiveBattler].statStages[STAT_SPATK] > 12)
- gBattleMons[gActiveBattler].statStages[STAT_SPATK] = 12;
+ if (gBattleMons[gActiveBattler].statStages[STAT_SPATK] > MAX_STAT_STAGE)
+ gBattleMons[gActiveBattler].statStages[STAT_SPATK] = MAX_STAT_STAGE;
retVal = FALSE;
}
break;
@@ -5372,12 +5372,12 @@ u8 *UseStatIncreaseItem(u16 itemId)
u8 GetNature(struct Pokemon *mon)
{
- return GetMonData(mon, MON_DATA_PERSONALITY, 0) % 25;
+ return GetMonData(mon, MON_DATA_PERSONALITY, 0) % NUM_NATURES;
}
u8 GetNatureFromPersonality(u32 personality)
{
- return personality % 25;
+ return personality % NUM_NATURES;
}
u16 GetEvolutionTargetSpecies(struct Pokemon *mon, u8 type, u16 evolutionItem)
@@ -5747,7 +5747,7 @@ u8 GetTrainerEncounterMusicId(u16 trainerOpponentId)
u16 ModifyStatByNature(u8 nature, u16 n, u8 statIndex)
{
// Dont modify HP, Accuracy, or Evasion by nature
- if (statIndex <= STAT_HP || statIndex > NUM_EV_STATS)
+ if (statIndex <= STAT_HP || statIndex > NUM_NATURE_STATS)
{
// Should just be "return n", but it wouldn't match without this.
u16 retVal = n;
@@ -5806,7 +5806,7 @@ void AdjustFriendship(struct Pokemon *mon, u8 event)
if (friendship > 199)
friendshipLevel++;
- if ((event != FRIENDSHIP_EVENT_WALKING || !(Random() & 1))
+ if ((event != FRIENDSHIP_EVENT_WALKING || !(Random() & 1))
&& (event != FRIENDSHIP_EVENT_LEAGUE_BATTLE || IS_LEAGUE_BATTLE))
{
s8 mod = sFriendshipEventModifiers[event][friendshipLevel];
@@ -5836,7 +5836,7 @@ void MonGainEVs(struct Pokemon *mon, u16 defeatedSpecies)
u16 totalEVs = 0;
u16 heldItem;
u8 holdEffect;
- int i;
+ int i, multiplier;
for (i = 0; i < NUM_STATS; i++)
{
@@ -5846,43 +5846,37 @@ void MonGainEVs(struct Pokemon *mon, u16 defeatedSpecies)
for (i = 0; i < NUM_STATS; i++)
{
- u8 hasHadPokerus;
- int multiplier;
-
if (totalEVs >= MAX_TOTAL_EVS)
break;
- hasHadPokerus = CheckPartyHasHadPokerus(mon, 0);
-
- if (hasHadPokerus)
+ if (CheckPartyHasHadPokerus(mon, 0))
multiplier = 2;
else
multiplier = 1;
switch (i)
{
- case 0:
+ case STAT_HP:
evIncrease = gBaseStats[defeatedSpecies].evYield_HP * multiplier;
break;
- case 1:
+ case STAT_ATK:
evIncrease = gBaseStats[defeatedSpecies].evYield_Attack * multiplier;
break;
- case 2:
+ case STAT_DEF:
evIncrease = gBaseStats[defeatedSpecies].evYield_Defense * multiplier;
break;
- case 3:
+ case STAT_SPEED:
evIncrease = gBaseStats[defeatedSpecies].evYield_Speed * multiplier;
break;
- case 4:
+ case STAT_SPATK:
evIncrease = gBaseStats[defeatedSpecies].evYield_SpAttack * multiplier;
break;
- case 5:
+ case STAT_SPDEF:
evIncrease = gBaseStats[defeatedSpecies].evYield_SpDefense * multiplier;
break;
}
heldItem = GetMonData(mon, MON_DATA_HELD_ITEM, 0);
-
if (heldItem == ITEM_ENIGMA_BERRY)
{
if (gMain.inBattle)
@@ -5901,9 +5895,9 @@ void MonGainEVs(struct Pokemon *mon, u16 defeatedSpecies)
if (totalEVs + (s16)evIncrease > MAX_TOTAL_EVS)
evIncrease = ((s16)evIncrease + MAX_TOTAL_EVS) - (totalEVs + evIncrease);
- if (evs[i] + (s16)evIncrease > 255)
+ if (evs[i] + (s16)evIncrease > MAX_PER_STAT_EVS)
{
- int val1 = (s16)evIncrease + 255;
+ int val1 = (s16)evIncrease + MAX_PER_STAT_EVS;
int val2 = evs[i] + evIncrease;
evIncrease = val1 - val2;
}
@@ -6144,7 +6138,7 @@ u8 GetMoveRelearnerMoves(struct Pokemon *mon, u16 *moves)
for (i = 0; i < MAX_MON_MOVES; i++)
learnedMoves[i] = GetMonData(mon, MON_DATA_MOVE1 + i, 0);
- for (i = 0; i < 20; i++)
+ for (i = 0; i < MAX_LEVEL_UP_MOVES; i++)
{
u16 moveLevel;
@@ -6177,7 +6171,7 @@ u8 GetLevelUpMovesBySpecies(u16 species, u16 *moves)
u8 numMoves = 0;
int i;
- for (i = 0; i < 20 && gLevelUpLearnsets[species][i] != LEVEL_UP_END; i++)
+ for (i = 0; i < MAX_LEVEL_UP_MOVES && gLevelUpLearnsets[species][i] != LEVEL_UP_END; i++)
moves[numMoves++] = gLevelUpLearnsets[species][i] & LEVEL_UP_MOVE_ID;
return numMoves;
@@ -6186,7 +6180,7 @@ u8 GetLevelUpMovesBySpecies(u16 species, u16 *moves)
u8 GetNumberOfRelearnableMoves(struct Pokemon *mon)
{
u16 learnedMoves[MAX_MON_MOVES];
- u16 moves[20];
+ u16 moves[MAX_LEVEL_UP_MOVES];
u8 numMoves = 0;
u16 species = GetMonData(mon, MON_DATA_SPECIES2, 0);
u8 level = GetMonData(mon, MON_DATA_LEVEL, 0);
@@ -6198,7 +6192,7 @@ u8 GetNumberOfRelearnableMoves(struct Pokemon *mon)
for (i = 0; i < MAX_MON_MOVES; i++)
learnedMoves[i] = GetMonData(mon, MON_DATA_MOVE1 + i, 0);
- for (i = 0; i < 20; i++)
+ for (i = 0; i < MAX_LEVEL_UP_MOVES; i++)
{
u16 moveLevel;
@@ -6259,11 +6253,11 @@ void ClearBattleMonForms(void)
u16 GetBattleBGM(void)
{
if (gBattleTypeFlags & BATTLE_TYPE_KYOGRE_GROUDON)
- return MUS_BATTLE34;
+ return MUS_VS_KYOGRE_GROUDON;
else if (gBattleTypeFlags & BATTLE_TYPE_REGI)
- return MUS_BATTLE36;
+ return MUS_VS_REGI;
else if (gBattleTypeFlags & (BATTLE_TYPE_LINK | BATTLE_TYPE_x2000000))
- return MUS_BATTLE20;
+ return MUS_VS_TRAINER;
else if (gBattleTypeFlags & BATTLE_TYPE_TRAINER)
{
u8 trainerClass;
@@ -6279,24 +6273,24 @@ u16 GetBattleBGM(void)
{
case TRAINER_CLASS_AQUA_LEADER:
case TRAINER_CLASS_MAGMA_LEADER:
- return MUS_BATTLE30;
+ return MUS_VS_AQUA_MAGMA_LEADER;
case TRAINER_CLASS_TEAM_AQUA:
case TRAINER_CLASS_TEAM_MAGMA:
case TRAINER_CLASS_AQUA_ADMIN:
case TRAINER_CLASS_MAGMA_ADMIN:
- return MUS_BATTLE31;
+ return MUS_VS_AQUA_MAGMA;
case TRAINER_CLASS_LEADER:
- return MUS_BATTLE32;
+ return MUS_VS_GYM_LEADER;
case TRAINER_CLASS_CHAMPION:
- return MUS_BATTLE33;
+ return MUS_VS_CHAMPION;
case TRAINER_CLASS_PKMN_TRAINER_3:
if (gBattleTypeFlags & BATTLE_TYPE_FRONTIER)
- return MUS_BATTLE35;
+ return MUS_VS_RIVAL;
if (!StringCompare(gTrainers[gTrainerBattleOpponent_A].trainerName, gText_BattleWallyName))
- return MUS_BATTLE20;
- return MUS_BATTLE35;
+ return MUS_VS_TRAINER;
+ return MUS_VS_RIVAL;
case TRAINER_CLASS_ELITE_FOUR:
- return MUS_BATTLE38;
+ return MUS_VS_ELITE_FOUR;
case TRAINER_CLASS_SALON_MAIDEN:
case TRAINER_CLASS_DOME_ACE:
case TRAINER_CLASS_PALACE_MAVEN:
@@ -6304,13 +6298,13 @@ u16 GetBattleBGM(void)
case TRAINER_CLASS_FACTORY_HEAD:
case TRAINER_CLASS_PIKE_QUEEN:
case TRAINER_CLASS_PYRAMID_KING:
- return MUS_VS_FRONT;
+ return MUS_VS_FRONTIER_BRAIN;
default:
- return MUS_BATTLE20;
+ return MUS_VS_TRAINER;
}
}
else
- return MUS_BATTLE27;
+ return MUS_VS_WILD;
}
void PlayBattleBGM(void)
@@ -6410,13 +6404,13 @@ bool8 IsMonSpriteNotFlipped(u16 species)
s8 GetMonFlavorRelation(struct Pokemon *mon, u8 flavor)
{
u8 nature = GetNature(mon);
- return gPokeblockFlavorCompatibilityTable[nature * 5 + flavor];
+ return gPokeblockFlavorCompatibilityTable[nature * FLAVOR_COUNT + flavor];
}
s8 GetFlavorRelationByPersonality(u32 personality, u8 flavor)
{
u8 nature = GetNatureFromPersonality(personality);
- return gPokeblockFlavorCompatibilityTable[nature * 5 + flavor];
+ return gPokeblockFlavorCompatibilityTable[nature * FLAVOR_COUNT + flavor];
}
bool8 IsTradedMon(struct Pokemon *mon)
@@ -6820,7 +6814,9 @@ static void sub_806F160(struct Unknown_806F160_Struct* structPtr)
structPtr->templates[i] = gUnknown_08329D98[i];
for (j = 0; j < structPtr->field_1; j++)
{
- asm("");
+ #ifndef NONMATCHING
+ asm("");
+ #endif
structPtr->frameImages[i * structPtr->field_1 + j].data = &structPtr->byteArrays[i][j * 0x800];
}
structPtr->templates[i].images = &structPtr->frameImages[i * structPtr->field_1];
diff --git a/src/pokemon_animation.c b/src/pokemon_animation.c
index 622e1d584..37abb90e9 100644
--- a/src/pokemon_animation.c
+++ b/src/pokemon_animation.c
@@ -783,7 +783,7 @@ static const u8 sBackAnimationIds[] =
0x94, 0x95, 0x96, // 0x19
};
-static const u8 sBackAnimNatureModTable[] =
+static const u8 sBackAnimNatureModTable[NUM_NATURES] =
{
[NATURE_HARDY] = 0x00,
[NATURE_LONELY] = 0x02,
@@ -1138,11 +1138,9 @@ static void pokemonanimfunc_04(struct Sprite *sprite)
sprite->callback = sub_817F978;
}
-#ifdef NONMATCHING
static void sub_817F9F4(struct Sprite *sprite)
{
s32 counter = sprite->data[2];
-
if (counter > 384)
{
sprite->callback = SpriteCB_SetDummyOnAnimEnd;
@@ -1151,8 +1149,7 @@ static void sub_817F9F4(struct Sprite *sprite)
}
else
{
- s32 divCounter = counter / 128;
-
+ s16 divCounter = counter / 128;
switch (divCounter)
{
case 0:
@@ -1161,7 +1158,8 @@ static void sub_817F9F4(struct Sprite *sprite)
break;
case 2:
case 3:
- sprite->pos2.y = -(Sin(counter - 256, sprite->data[0] * 3));
+ counter -= 256;
+ sprite->pos2.y = -(Sin(counter, sprite->data[0] * 3));
break;
}
}
@@ -1169,77 +1167,6 @@ static void sub_817F9F4(struct Sprite *sprite)
sprite->data[2] += 12;
}
-#else
-NAKED
-static void sub_817F9F4(struct Sprite *sprite)
-{
- asm(".syntax unified\n\
- push {r4,lr}\n\
- adds r4, r0, 0\n\
- movs r0, 0x32\n\
- ldrsh r1, [r4, r0]\n\
- movs r0, 0xC0\n\
- lsls r0, 1\n\
- cmp r1, r0\n\
- ble _0817FA14\n\
- ldr r0, =SpriteCB_SetDummyOnAnimEnd\n\
- str r0, [r4, 0x1C]\n\
- movs r0, 0\n\
- strh r0, [r4, 0x24]\n\
- b _0817FA5E\n\
- .pool\n\
-_0817FA14:\n\
- adds r0, r1, 0\n\
- cmp r1, 0\n\
- bge _0817FA1C\n\
- adds r0, 0x7F\n\
-_0817FA1C:\n\
- asrs r2, r0, 7\n\
- lsls r0, r2, 16\n\
- asrs r0, 16\n\
- cmp r0, 0\n\
- blt _0817FA60\n\
- cmp r0, 0x1\n\
- ble _0817FA48\n\
- cmp r0, 0x3\n\
- bgt _0817FA60\n\
- ldr r2, =0xffffff00\n\
- adds r1, r2\n\
- lsls r0, r1, 16\n\
- asrs r0, 16\n\
- movs r1, 0x2E\n\
- ldrsh r2, [r4, r1]\n\
- lsls r1, r2, 1\n\
- adds r1, r2\n\
- lsls r1, 16\n\
- b _0817FA56\n\
- .pool\n\
-_0817FA48:\n\
- lsls r0, r2, 7\n\
- subs r0, r1, r0\n\
- lsls r0, 16\n\
- asrs r0, 16\n\
- movs r2, 0x2E\n\
- ldrsh r1, [r4, r2]\n\
- lsls r1, 17\n\
-_0817FA56:\n\
- asrs r1, 16\n\
- bl Sin\n\
- negs r0, r0\n\
-_0817FA5E:\n\
- strh r0, [r4, 0x26]\n\
-_0817FA60:\n\
- ldrh r0, [r4, 0x32]\n\
- adds r0, 0xC\n\
- strh r0, [r4, 0x32]\n\
- pop {r4}\n\
- pop {r0}\n\
- bx r0\n\
- .syntax divided");
-}
-
-#endif // NONMATCHING
-
static void pokemonanimfunc_1E(struct Sprite *sprite)
{
sprite->data[0] = 4;
@@ -2957,7 +2884,11 @@ static void sub_8181C2C(struct Sprite *sprite)
}
else
{
- register s32 var asm("r4") = sUnknown_03001240[sprite->data[0]].field_8;
+ #ifndef NONMATCHING
+ register s32 var asm("r4") = sUnknown_03001240[sprite->data[0]].field_8;
+ #else
+ s32 var = sUnknown_03001240[sprite->data[0]].field_8;
+ #endif
sprite->pos2.x = (var << 3) * (counter % 128) / 128 - (sUnknown_03001240[sprite->data[0]].field_8 * 8);
sprite->pos2.y = -(Sin(counter % 128, 8));
diff --git a/src/pokemon_jump.c b/src/pokemon_jump.c
index f2f416c35..07f6bc54b 100755
--- a/src/pokemon_jump.c
+++ b/src/pokemon_jump.c
@@ -216,7 +216,7 @@ static bool32 sub_802C618(void);
static bool32 sub_802C650(void);
static void sub_802C688(int);
static int sub_802C6B0(void);
-static bool32 sub_802C70C(void);
+static bool32 AreLinkQueuesEmpty(void);
static int sub_802C73C(u8 *);
static void sub_802C780(void);
static int sub_802C790(int);
@@ -400,13 +400,13 @@ static const struct PokemonJumpMons gPkmnJumpSpecies[] =
{ .species = SPECIES_BAGON, .unk2 = 1, },
};
-void sub_802A9A8(u16 partyIndex, MainCallback callback)
+void StartPokemonJump(u16 partyIndex, MainCallback callback)
{
u8 taskId;
if (gReceivedRemoteLinkPlayers)
{
- gUnknown_02022CFC = Alloc(sizeof(*gUnknown_02022CFC));
+ gUnknown_02022CFC = Alloc(sizeof(struct PokemonJump1));
if (gUnknown_02022CFC)
{
ResetTasks();
@@ -576,7 +576,7 @@ static void sub_802ACA0(u8 taskId)
case 2:
if (!sub_802D0F0() && IsNotWaitingForBGMStop() == TRUE)
{
- FadeOutAndPlayNewMapMusic(MUS_RG_JUMP, 8);
+ FadeOutAndPlayNewMapMusic(MUS_RG_POKE_JUMP, 8);
gUnknown_02022CFC->unk8++;
}
break;
@@ -876,7 +876,7 @@ static bool32 sub_802B31C(void)
gUnknown_02022CFC->unk8++;
// fall through
case 1:
- if (sub_802C70C())
+ if (AreLinkQueuesEmpty())
return FALSE;
break;
}
@@ -1146,14 +1146,14 @@ static bool32 sub_802B720(void)
}
break;
case 2:
- if (sub_802C70C())
+ if (AreLinkQueuesEmpty())
{
- CreateTask(sub_8153688, 6);
+ CreateTask(Task_LinkSave, 6);
gUnknown_02022CFC->unk8++;
}
break;
case 3:
- if (!FuncIsActiveTask(sub_8153688))
+ if (!FuncIsActiveTask(Task_LinkSave))
{
sub_802DA14();
gUnknown_02022CFC->unk8++;
@@ -1463,7 +1463,7 @@ static bool32 sub_802BC60(void)
case 4:
if (!gPaletteFade.active)
{
- sub_800AC34();
+ SetCloseLinkCallback();
gUnknown_02022CFC->unkA++;
}
break;
@@ -1721,7 +1721,7 @@ static void sub_802C1BC(void)
gUnknown_02022CFC->unk83AC->unk10 = 0;
}
-static const u16 gUnknown_082FB654[] = {SE_REGI, SE_REAPOKE, SE_W234, SE_RG_EXCELLENT};
+static const u16 gUnknown_082FB654[] = {SE_SHOP, SE_SHINY, SE_M_MORNING_SUN, SE_RG_POKE_JUMP_SUCCESS};
static void sub_802C1DC(void)
{
@@ -1798,9 +1798,9 @@ static void sub_802C280(void)
}
if (whichSound & 0x2)
- PlaySE(SE_RG_NAWAMISS);
+ PlaySE(SE_RG_POKE_JUMP_FAILURE);
else if (whichSound & 0x1)
- PlaySE(SE_DANSA);
+ PlaySE(SE_LEDGE);
}
static const s8 gUnknown_082FB65C[][48] =
@@ -2025,9 +2025,9 @@ static int sub_802C6B0(void)
return count;
}
-static bool32 sub_802C70C(void)
+static bool32 AreLinkQueuesEmpty(void)
{
- return !Rfu.unk_124.unk_8c2 && !Rfu.unk_9e8.unk_232;
+ return !Rfu.recvQueue.count && !Rfu.sendQueue.count;
}
static int sub_802C73C(u8 *arg0)
@@ -2702,7 +2702,7 @@ static void sub_802CDD4(struct Sprite *sprite)
switch (sprite->data[0])
{
case 0:
- PlaySE(SE_JITE_PYOKO);
+ PlaySE(SE_BIKE_HOP);
sprite->data[1] = 0;
sprite->data[0]++;
// fall through
@@ -2966,18 +2966,18 @@ static void sub_802D150(void)
ResetBgsAndClearDma3BusyFlags(0);
InitBgsFromTemplates(0, gUnknown_082FE164, ARRAY_COUNT(gUnknown_082FE164));
InitWindows(gUnknown_082FE174);
- reset_temp_tile_data_buffers();
+ ResetTempTileDataBuffers();
sub_802C974(gUnknown_02022D00);
sub_802DD08();
LoadPalette(gPkmnJumpBgPal, 0, 0x20);
- decompress_and_copy_tile_data_to_vram(3, gPkmnJumpBgGfx, 0, 0, 0);
- decompress_and_copy_tile_data_to_vram(3, gPkmnJumpBgTilemap, 0, 0, 1);
+ DecompressAndCopyTileDataToVram(3, gPkmnJumpBgGfx, 0, 0, 0);
+ DecompressAndCopyTileDataToVram(3, gPkmnJumpBgTilemap, 0, 0, 1);
LoadPalette(gPkmnJumpVenusaurPal, 0x30, 0x20);
- decompress_and_copy_tile_data_to_vram(2, gPkmnJumpVenusaurGfx, 0, 0, 0);
- decompress_and_copy_tile_data_to_vram(2, gPkmnJumpVenusaurTilemap, 0, 0, 1);
+ DecompressAndCopyTileDataToVram(2, gPkmnJumpVenusaurGfx, 0, 0, 0);
+ DecompressAndCopyTileDataToVram(2, gPkmnJumpVenusaurTilemap, 0, 0, 1);
LoadPalette(gPkmnJumpResultsPal, 0x10, 0x20);
- decompress_and_copy_tile_data_to_vram(1, gPkmnJumpResultsGfx, 0, 0, 0);
- decompress_and_copy_tile_data_to_vram(1, gPkmnJumpResultsTilemap, 0, 0, 1);
+ DecompressAndCopyTileDataToVram(1, gPkmnJumpResultsGfx, 0, 0, 0);
+ DecompressAndCopyTileDataToVram(1, gPkmnJumpResultsTilemap, 0, 0, 1);
LoadPalette(gPkmnJumpPal3, 0x20, 0x20);
SetBgTilemapBuffer(0, gUnknown_02022D00->tilemapBuffer);
FillBgTilemapBufferRect_Palette0(0, 0, 0, 0, 0x20, 0x20);
@@ -2991,7 +2991,7 @@ static void sub_802D150(void)
gUnknown_02022D00->unk4++;
break;
case 1:
- if (!free_temp_tile_data_buffers_if_possible())
+ if (!FreeTempTileDataBuffersIfPossible())
{
sub_802DBF8();
sub_802CE9C(gUnknown_02022D00);
@@ -3275,7 +3275,7 @@ static void sub_802D7E8(u16 itemId, u16 quantity)
gUnknown_02022D00->unk12 = sub_802DA9C(4, 8, 22, 4);
AddTextPrinterParameterized(gUnknown_02022D00->unk12, 1, gUnknown_02022D00->strBuff, 0, 1, TEXT_SPEED_FF, NULL);
CopyWindowToVram(gUnknown_02022D00->unk12, 2);
- gUnknown_02022D00->unk14 = MUS_FANFA1;
+ gUnknown_02022D00->unk14 = MUS_LEVEL_UP;
gUnknown_02022D00->unkD = 0;
}
@@ -3684,14 +3684,14 @@ static void sub_802E0AC(struct PokemonJump1_MonInfo *arg0)
packet.species = arg0->species,
packet.otId = arg0->otId,
packet.personality = arg0->personality,
- sub_800FE50(&packet);
+ Rfu_SendPacket(&packet);
}
static bool32 sub_802E0D0(int multiplayerId, struct PokemonJump1_MonInfo *arg0)
{
struct MonInfoPacket packet;
- if ((gRecvCmds[multiplayerId][0] & 0xFF00) != 0x2F00)
+ if ((gRecvCmds[multiplayerId][0] & 0xFF00) != RFUCMD_SEND_PACKET)
return FALSE;
memcpy(&packet, &gRecvCmds[multiplayerId][1], sizeof(packet));
@@ -3718,7 +3718,7 @@ static void sub_802E120(u32 arg0)
struct UnkPacket2 packet;
packet.id = 2;
packet.unk4 = arg0;
- sub_800FE50(&packet);
+ Rfu_SendPacket(&packet);
}
struct UnkPacket3
@@ -3746,14 +3746,14 @@ static void sub_802E138(struct PokemonJump1_82E4 *arg0, struct PokemonJump1Sub *
packet.unk2 = arg0->unk10;
packet.unk3_1 = arg0->unk14;
packet.unk4 = arg0->unkE;
- sub_800FE50(&packet);
+ Rfu_SendPacket(&packet);
}
static bool32 sub_802E1BC(struct PokemonJump1_82E4 *arg0, struct PokemonJump1Sub *arg1)
{
struct UnkPacket3 packet;
- if ((gRecvCmds[0][0] & 0xFF00) != 0x2F00)
+ if ((gRecvCmds[0][0] & 0xFF00) != RFUCMD_SEND_PACKET)
return FALSE;
memcpy(&packet, &gRecvCmds[0][1], sizeof(packet));
@@ -3792,14 +3792,14 @@ static void sub_802E234(struct PokemonJump1_82E4 *arg0, u8 arg1, u16 arg2)
packet.unk4 = arg0->unkE;
packet.unk6 = arg1;
packet.unk8 = arg2;
- sub_800FE50(&packet);
+ Rfu_SendPacket(&packet);
}
static bool32 sub_802E264(struct PokemonJump1_82E4 *arg0, int multiplayerId, u8 *arg2, u16 *arg3)
{
struct UnkPacket4 packet;
- if ((gRecvCmds[multiplayerId][0] & 0xFF00) != 0x2F00)
+ if ((gRecvCmds[multiplayerId][0] & 0xFF00) != RFUCMD_SEND_PACKET)
return FALSE;
memcpy(&packet, &gRecvCmds[multiplayerId][1], sizeof(packet));
@@ -3819,7 +3819,7 @@ static bool32 sub_802E2D0(struct PokemonJump1_82E4 *arg0, int multiplayerId)
{
struct UnkPacket4 packet;
- if ((gRecvCmds[multiplayerId][0] & 0xFF00) != 0x2F00)
+ if ((gRecvCmds[multiplayerId][0] & 0xFF00) != RFUCMD_SEND_PACKET)
return FALSE;
memcpy(&packet, &gRecvCmds[multiplayerId][1], sizeof(packet));
diff --git a/src/pokemon_storage_system.c b/src/pokemon_storage_system.c
index 1660316de..fcca744c2 100644
--- a/src/pokemon_storage_system.c
+++ b/src/pokemon_storage_system.c
@@ -128,7 +128,7 @@ struct PokemonStorageSystemData
u16 field_B0[528 / 2];
u16 field_2C0;
u16 field_2C2;
- u8 field_2C4;
+ u8 field_2C4; // Unused
u8 field_2C5;
u8 showPartyMenuState;
u8 unk_02C7;
@@ -136,21 +136,21 @@ struct PokemonStorageSystemData
bool8 unk_02C9;
s16 newCurrBoxId;
u16 bg2_X;
- s16 field_2CE;
+ s16 wallpaperScrollSpeed;
u16 field_2D0;
u8 field_2D2;
- u8 field_2D3;
- u8 field_2D4;
- u16 field_2D6;
- s16 field_2D8;
- u16 field_2DA;
- u16 field_2DC;
- u16 field_2DE;
- u16 field_2E0;
+ u8 field_2D3; // Written to, but never read.
+ u8 field_2D4; // Written to, but never read.
+ u16 field_2D6; // Written to, but never read.
+ s16 field_2D8; // Written to, but never read.
+ u16 field_2DA; // Written to, but never read.
+ u16 field_2DC; // Written to, but never read.
+ u16 field_2DE; // Written to, but never read.
+ u16 field_2E0; // Written to, but never read.
u8 filler[22];
u8 field_2F8[1024];
u8 field_6F8;
- u8 field_6F9;
+ u8 field_6F9; // Written to, but never read.
u8 field_6FA;
s8 field_6FB;
u16 field_6FC[16];
@@ -160,14 +160,14 @@ struct PokemonStorageSystemData
struct Sprite *field_728[2];
struct Sprite *field_730[2];
u32 field_738;
- u8 field_73C[80];
- u16 field_78C;
+ u8 field_73C[80]; // Unused
+ u16 field_78C; // Written to, but never read.
s16 wallpaperSetId;
s16 wallpaperId;
u16 field_792[360];
u8 wallpaperChangeState;
u8 field_A63;
- u8 field_A64;
+ u8 boxScrollDestination;
s8 field_A65;
u8 *wallpaperTiles;
struct Sprite *movingMonSprite;
@@ -189,12 +189,12 @@ struct PokemonStorageSystemData
u8 field_C68;
s8 field_C69;
u8 field_C6A;
- u8 field_C6B;
+ u8 field_C6B; // Written to, but never read.
struct WindowTemplate menuWindow;
struct StorageMenu menuItems[7];
u8 menuItemsCount;
u8 menuWidth;
- u8 field_CAE;
+ u8 field_CAE; // Written to, but never read.
u16 field_CB0;
struct Sprite *field_CB4;
struct Sprite *field_CB8;
@@ -247,7 +247,7 @@ struct PokemonStorageSystemData
u16 field_2176[8];
u8 field_2186;
u8 field_2187;
- u8 field_2188;
+ u8 pokemonSummaryScreenMode;
union
{
struct Pokemon *mon;
@@ -262,13 +262,13 @@ struct PokemonStorageSystemData
struct UnkStorageStruct field_2204[3];
u16 movingItem;
u16 field_2236;
- u8 field_2238;
+ u8 field_2238; // Unused
u16 field_223A;
u16 *field_223C;
struct Sprite *cursorMonSprite;
u16 field_2244[0x40];
u8 field_22C4[0x800];
- u8 field_2AC4[0x1800];
+ u8 field_2AC4[0x1800]; // Unused
u8 field_42C4[0x800];
u8 field_4AC4[0x1000];
u8 field_5AC4[0x800];
@@ -658,7 +658,7 @@ static void SetBoxSpeciesAndPersonalities(u8 boxId);
static void sub_80CB9D0(struct Sprite *sprite, u16 partyId);
static void sub_80CC370(u8 taskId);
static void sub_80CCB50(u8 boxId);
-static s8 sub_80CC644(u8 boxId);
+static s8 DetermineBoxScrollDirection(u8 boxId);
static void sub_80CCA3C(const void *tilemap, s8 direction, u8 arg2);
static s16 sub_80CD00C(const u8 *string);
static bool8 MonPlaceChange_Shift(void);
@@ -2146,7 +2146,7 @@ static void VblankCb_PSS(void)
static void Cb2_PSS(void)
{
RunTasks();
- do_scheduled_bg_tilemap_copies_to_vram();
+ DoScheduledBgTilemapCopiesToVram();
ScrollBackground();
sub_80CAA14();
AnimateSprites();
@@ -2157,7 +2157,7 @@ static void Cb2_EnterPSS(u8 boxOption)
{
ResetTasks();
sCurrentBoxOption = boxOption;
- sPSSData = Alloc(sizeof(*sPSSData));
+ sPSSData = Alloc(sizeof(struct PokemonStorageSystemData));
if (sPSSData == NULL)
{
SetMainCallback2(Cb2_ExitPSS);
@@ -2177,7 +2177,7 @@ static void Cb2_EnterPSS(u8 boxOption)
static void Cb2_ReturnToPSS(void)
{
ResetTasks();
- sPSSData = Alloc(sizeof(*sPSSData));
+ sPSSData = Alloc(sizeof(struct PokemonStorageSystemData));
if (sPSSData == NULL)
{
SetMainCallback2(Cb2_ExitPSS);
@@ -2214,7 +2214,7 @@ static void sub_80C7E98(void)
gReservedSpriteTileCount = 0x280;
sub_80D2A90(&sPSSData->unk_0020, sPSSData->unk_0028, 8);
gKeyRepeatStartDelay = 20;
- clear_scheduled_bg_copies_to_vram();
+ ClearScheduledBgCopiesToVram();
sub_80D259C(3);
sub_80D2644(0, 1, gUnknown_0857239C, 8, 4);
sub_80D2770(0, 1, 0);
@@ -2360,11 +2360,11 @@ static void Cb_ShowPSS(u8 taskId)
{
case 0:
PlaySE(SE_PC_LOGIN);
- sub_80F9BCC(0x14, 0, 1);
+ ComputerScreenOpenEffect(20, 0, 1);
sPSSData->state++;
break;
case 1:
- if (!sub_80F9C1C())
+ if (!IsComputerScreenOpenEffectActive())
SetPSSCallback(Cb_MainPSS);
break;
}
@@ -2576,7 +2576,7 @@ static void Cb_MainPSS(u8 taskId)
sPSSData->state = 7;
break;
case 24:
- PlaySE(SE_HAZURE);
+ PlaySE(SE_FAILURE);
break;
}
break;
@@ -2622,12 +2622,12 @@ static void Cb_MainPSS(u8 taskId)
}
break;
case 4:
- PlaySE(SE_HAZURE);
+ PlaySE(SE_FAILURE);
PrintStorageActionText(PC_TEXT_LAST_POKE);
sPSSData->state = 6;
break;
case 5:
- PlaySE(SE_HAZURE);
+ PlaySE(SE_FAILURE);
PrintStorageActionText(PC_TEXT_PLEASE_REMOVE_MAIL);
sPSSData->state = 6;
break;
@@ -2843,17 +2843,17 @@ static void Cb_OnSelectedMon(u8 taskId)
}
break;
case 3:
- PlaySE(SE_HAZURE);
+ PlaySE(SE_FAILURE);
PrintStorageActionText(PC_TEXT_LAST_POKE);
sPSSData->state = 6;
break;
case 5:
- PlaySE(SE_HAZURE);
+ PlaySE(SE_FAILURE);
PrintStorageActionText(PC_TEXT_CANT_RELEASE_EGG);
sPSSData->state = 6;
break;
case 4:
- PlaySE(SE_HAZURE);
+ PlaySE(SE_FAILURE);
PrintStorageActionText(PC_TEXT_PLEASE_REMOVE_MAIL);
sPSSData->state = 6;
break;
@@ -3277,7 +3277,7 @@ static void Cb_ItemToBag(u8 taskId)
case 0:
if (!AddBagItem(sPSSData->cursorMonItem, 1))
{
- PlaySE(SE_HAZURE);
+ PlaySE(SE_FAILURE);
PrintStorageActionText(PC_TEXT_BAG_FULL);
sPSSData->state = 3;
}
@@ -3742,7 +3742,7 @@ static void Cb_OnCloseBoxPressed(u8 taskId)
case 0:
if (IsMonBeingMoved())
{
- PlaySE(SE_HAZURE);
+ PlaySE(SE_FAILURE);
PrintStorageActionText(PC_TEXT_HOLDING_POKE);
sPSSData->state = 1;
}
@@ -3781,11 +3781,11 @@ static void Cb_OnCloseBoxPressed(u8 taskId)
}
break;
case 3:
- sub_80F9BF4(0x14, 0, 1);
+ ComputerScreenCloseEffect(20, 0, 1);
sPSSData->state++;
break;
case 4:
- if (!sub_80F9C30())
+ if (!IsComputerScreenCloseEffectActive())
{
sub_80CABE0();
gPlayerPartyCount = CalculatePlayerPartyCount();
@@ -3803,7 +3803,7 @@ static void Cb_OnBPressed(u8 taskId)
case 0:
if (IsMonBeingMoved())
{
- PlaySE(SE_HAZURE);
+ PlaySE(SE_FAILURE);
PrintStorageActionText(PC_TEXT_HOLDING_POKE);
sPSSData->state = 1;
}
@@ -3842,11 +3842,11 @@ static void Cb_OnBPressed(u8 taskId)
}
break;
case 3:
- sub_80F9BF4(0x14, 0, 0);
+ ComputerScreenCloseEffect(20, 0, 0);
sPSSData->state++;
break;
case 4:
- if (!sub_80F9C30())
+ if (!IsComputerScreenCloseEffectActive())
{
sub_80CABE0();
gPlayerPartyCount = CalculatePlayerPartyCount();
@@ -3879,7 +3879,7 @@ static void Cb_ChangeScreen(u8 taskId)
boxMons = sPSSData->field_218C.box;
monIndex = sPSSData->field_2187;
maxMonIndex = sPSSData->field_2186;
- mode = sPSSData->field_2188;
+ mode = sPSSData->pokemonSummaryScreenMode;
FreePSSData();
if (mode == PSS_MODE_NORMAL && boxMons == &gUnknown_02039D14.box)
ShowPokemonSummaryScreenSet40EF(mode, boxMons, monIndex, maxMonIndex, Cb2_ReturnToPSS);
@@ -3892,7 +3892,7 @@ static void Cb_ChangeScreen(u8 taskId)
break;
case SCREEN_CHANGE_ITEM_FROM_BAG:
FreePSSData();
- GoToBagMenu(11, 0, Cb2_ReturnToPSS);
+ GoToBagMenu(ITEMMENULOCATION_PCBOX, 0, Cb2_ReturnToPSS);
break;
}
@@ -3944,7 +3944,7 @@ static void LoadPSSMenuGfx(void)
LZ77UnCompWram(gUnknown_085722A0, sPSSData->field_5AC4);
SetBgTilemapBuffer(1, sPSSData->field_5AC4);
ShowBg(1);
- schedule_bg_copy_tilemap_to_vram(1);
+ ScheduleBgCopyTilemapToVram(1);
}
static bool8 InitPSSWindows(void)
@@ -4010,7 +4010,7 @@ static void RefreshCursorMonData(void)
LoadCursorMonGfx(sPSSData->cursorMonSpecies, sPSSData->cursorMonPersonality);
PrintCursorMonInfo();
sub_80CA65C();
- schedule_bg_copy_tilemap_to_vram(0);
+ ScheduleBgCopyTilemapToVram(0);
}
static void BoxSetMosaic(void)
@@ -4154,7 +4154,7 @@ static void sub_80CA65C(void)
}
sub_80D2918(0);
- schedule_bg_copy_tilemap_to_vram(1);
+ ScheduleBgCopyTilemapToVram(1);
}
static void sub_80CA704(void)
@@ -4181,7 +4181,7 @@ static void sub_80CA704(void)
sub_80D2918(2);
}
- schedule_bg_copy_tilemap_to_vram(1);
+ ScheduleBgCopyTilemapToVram(1);
sPSSData->unk_02C7 = 0;
}
@@ -4202,7 +4202,7 @@ static bool8 ShowPartyMenu(void)
sPSSData->field_2C2++;
sub_80D27F4(1, 3, 1);
sub_80D2918(1);
- schedule_bg_copy_tilemap_to_vram(1);
+ ScheduleBgCopyTilemapToVram(1);
sub_80CBAF0(8);
if (++sPSSData->field_2C5 == 20)
{
@@ -4236,7 +4236,7 @@ static bool8 HidePartyMenu(void)
sub_80CBAF0(-8);
if (++sPSSData->field_2C5 != 20)
{
- schedule_bg_copy_tilemap_to_vram(1);
+ ScheduleBgCopyTilemapToVram(1);
return TRUE;
}
else
@@ -4246,7 +4246,7 @@ static bool8 HidePartyMenu(void)
CompactPartySlots();
sub_80D27AC(2, 0, 0, 9, 2);
sub_80D2918(2);
- schedule_bg_copy_tilemap_to_vram(1);
+ ScheduleBgCopyTilemapToVram(1);
return FALSE;
}
}
@@ -4262,7 +4262,7 @@ static void sub_80CA984(bool8 arg0)
sub_80D27AC(2, 0, 2, 9, 2);
sub_80D2918(2);
- schedule_bg_copy_tilemap_to_vram(1);
+ ScheduleBgCopyTilemapToVram(1);
}
static void sub_80CA9C0(void)
@@ -4331,7 +4331,7 @@ static void sub_80CAB20(void)
sub_80CAA74();
sub_80D27AC(1, 0, 0, 12, 22);
sub_80D2918(1);
- schedule_bg_copy_tilemap_to_vram(1);
+ ScheduleBgCopyTilemapToVram(1);
}
static void SetUpDoShowPartyMenu(void)
@@ -4422,7 +4422,7 @@ static void PrintStorageActionText(u8 id)
DrawTextBorderOuter(1, 2, 14);
PutWindowTilemap(1);
CopyWindowToVram(1, 2);
- schedule_bg_copy_tilemap_to_vram(0);
+ ScheduleBgCopyTilemapToVram(0);
}
static void ShowYesNoWindow(s8 cursorPos)
@@ -4434,7 +4434,7 @@ static void ShowYesNoWindow(s8 cursorPos)
static void ClearBottomWindow(void)
{
ClearStdWindowAndFrameToTransparent(1, FALSE);
- schedule_bg_copy_tilemap_to_vram(0);
+ ScheduleBgCopyTilemapToVram(0);
}
static void AddWallpaperSetsMenu(void)
@@ -5276,9 +5276,9 @@ static void sub_80CC370(u8 taskId)
static void SetUpScrollToBox(u8 boxId)
{
- s8 direction = sub_80CC644(boxId);
+ s8 direction = DetermineBoxScrollDirection(boxId);
- sPSSData->field_2CE = (direction > 0) ? 6 : -6;
+ sPSSData->wallpaperScrollSpeed = (direction > 0) ? 6 : -6;
sPSSData->field_2D3 = (direction > 0) ? 1 : 2;
sPSSData->field_2D0 = 32;
sPSSData->field_2D4 = boxId;
@@ -5288,7 +5288,7 @@ static void SetUpScrollToBox(u8 boxId)
sPSSData->field_2DC = (direction <= 0) ? 5 : 0;
sPSSData->field_2DE = 0;
sPSSData->field_2E0 = 2;
- sPSSData->field_A64 = boxId;
+ sPSSData->boxScrollDestination = boxId;
sPSSData->field_A65 = direction;
sPSSData->field_A63 = 0;
}
@@ -5300,21 +5300,21 @@ static bool8 ScrollToBox(void)
switch (sPSSData->field_A63)
{
case 0:
- LoadWallpaperGfx(sPSSData->field_A64, sPSSData->field_A65);
+ LoadWallpaperGfx(sPSSData->boxScrollDestination, sPSSData->field_A65);
sPSSData->field_A63++;
case 1:
if (!WaitForWallpaperGfxLoad())
return TRUE;
- sub_80CB4CC(sPSSData->field_A64, sPSSData->field_A65);
- sub_80CCCFC(sPSSData->field_A64, sPSSData->field_A65);
+ sub_80CB4CC(sPSSData->boxScrollDestination, sPSSData->field_A65);
+ sub_80CCCFC(sPSSData->boxScrollDestination, sPSSData->field_A65);
sub_80CD0B8(sPSSData->field_A65);
break;
case 2:
var = sub_80CB584();
if (sPSSData->field_2D0 != 0)
{
- sPSSData->bg2_X += sPSSData->field_2CE;
+ sPSSData->bg2_X += sPSSData->wallpaperScrollSpeed;
if (--sPSSData->field_2D0 != 0)
return TRUE;
sub_80CCEE0();
@@ -5327,7 +5327,7 @@ static bool8 ScrollToBox(void)
return TRUE;
}
-static s8 sub_80CC644(u8 boxId)
+static s8 DetermineBoxScrollDirection(u8 boxId)
{
u8 i;
u8 currentBox = StorageGetCurrentBox();
@@ -5735,7 +5735,7 @@ static void sub_80CD210(struct Sprite *sprite)
sprite->data[0] = 3;
break;
case 3:
- sprite->pos1.x -= sPSSData->field_2CE;
+ sprite->pos1.x -= sPSSData->wallpaperScrollSpeed;
if (sprite->pos1.x < 73 || sprite->pos1.x > 247)
sprite->invisible = TRUE;
if (--sprite->data[1] == 0)
@@ -5746,7 +5746,7 @@ static void sub_80CD210(struct Sprite *sprite)
}
break;
case 4:
- sprite->pos1.x -= sPSSData->field_2CE;
+ sprite->pos1.x -= sPSSData->wallpaperScrollSpeed;
break;
}
}
@@ -6632,21 +6632,21 @@ static void sub_80CE7E8(void)
sPSSData->field_218C.mon = &gUnknown_02039D14;
sPSSData->field_2187 = 0;
sPSSData->field_2186 = 0;
- sPSSData->field_2188 = 0;
+ sPSSData->pokemonSummaryScreenMode = PSS_MODE_NORMAL;
}
else if (sBoxCursorArea == CURSOR_AREA_IN_PARTY)
{
sPSSData->field_218C.mon = gPlayerParty;
sPSSData->field_2187 = sBoxCursorPosition;
sPSSData->field_2186 = CountPartyMons() - 1;
- sPSSData->field_2188 = 0;
+ sPSSData->pokemonSummaryScreenMode = PSS_MODE_NORMAL;
}
else
{
sPSSData->field_218C.box = GetBoxedMonPtr(StorageGetCurrentBox(), 0);
sPSSData->field_2187 = sBoxCursorPosition;
sPSSData->field_2186 = IN_BOX_COUNT - 1;
- sPSSData->field_2188 = 2;
+ sPSSData->pokemonSummaryScreenMode = PSS_MODE_BOX;
}
}
@@ -6869,36 +6869,36 @@ static void SetCursorMonData(void *pokemon, u8 mode)
txtPtr = sPSSData->cursorMonGenderLvlText;
*(txtPtr)++ = EXT_CTRL_CODE_BEGIN;
- *(txtPtr)++ = 4;
+ *(txtPtr)++ = EXT_CTRL_CODE_COLOR_HIGHLIGHT_SHADOW;
switch (gender)
{
case MON_MALE:
- *(txtPtr)++ = 4;
- *(txtPtr)++ = 1;
- *(txtPtr)++ = 5;
+ *(txtPtr)++ = TEXT_COLOR_RED;
+ *(txtPtr)++ = TEXT_COLOR_WHITE;
+ *(txtPtr)++ = TEXT_COLOR_LIGHT_RED;
*(txtPtr)++ = CHAR_MALE;
break;
case MON_FEMALE:
- *(txtPtr)++ = 6;
- *(txtPtr)++ = 1;
- *(txtPtr)++ = 7;
+ *(txtPtr)++ = TEXT_COLOR_GREEN;
+ *(txtPtr)++ = TEXT_COLOR_WHITE;
+ *(txtPtr)++ = TEXT_COLOR_LIGHT_GREEN;
*(txtPtr)++ = CHAR_FEMALE;
break;
default:
- *(txtPtr)++ = 2;
- *(txtPtr)++ = 1;
- *(txtPtr)++ = 3;
- *(txtPtr)++ = 0x77;
+ *(txtPtr)++ = TEXT_COLOR_DARK_GREY;
+ *(txtPtr)++ = TEXT_COLOR_WHITE;
+ *(txtPtr)++ = TEXT_COLOR_LIGHT_GREY;
+ *(txtPtr)++ = CHAR_UNK_SPACER;
break;
}
*(txtPtr++) = EXT_CTRL_CODE_BEGIN;
- *(txtPtr++) = 4;
- *(txtPtr++) = 2;
- *(txtPtr++) = 1;
- *(txtPtr++) = 3;
- *(txtPtr++) = 0;
- *(txtPtr++) = CHAR_SPECIAL_F9;
+ *(txtPtr++) = EXT_CTRL_CODE_COLOR_HIGHLIGHT_SHADOW;
+ *(txtPtr++) = TEXT_COLOR_DARK_GREY;
+ *(txtPtr++) = TEXT_COLOR_WHITE;
+ *(txtPtr++) = TEXT_COLOR_LIGHT_GREY;
+ *(txtPtr++) = CHAR_SPACE;
+ *(txtPtr++) = CHAR_EXTRA_SYMBOL;
*(txtPtr++) = CHAR_LV_2;
txtPtr = ConvertIntToDecimalStringN(txtPtr, sPSSData->cursorMonLevel, STR_CONV_MODE_LEFT_ALIGN, 3);
@@ -6926,21 +6926,20 @@ static u8 HandleInput_InBox(void)
}
}
-// This group of four functions handling input simply CANNOT be matched.
-// GF must have written them in a really weird way, a way not a sane person could dream to reproduce.
-#ifdef NONMATCHING
static u8 InBoxInput_Normal(void)
{
u8 retVal;
- s8 cursorArea = sBoxCursorArea;
- s8 cursorPosition = sBoxCursorPosition;
-
- sPSSData->field_CD2 = 0;
- sPSSData->field_CD3 = 0;
- sPSSData->field_CD7 = 0;
+ s8 cursorArea;
+ s8 cursorPosition;
do
{
+ cursorArea = sBoxCursorArea;
+ cursorPosition = sBoxCursorPosition;
+ sPSSData->field_CD2 = 0;
+ sPSSData->field_CD3 = 0;
+ sPSSData->field_CD7 = 0;
+
if (gMain.newAndRepeatedKeys & DPAD_UP)
{
retVal = TRUE;
@@ -7065,310 +7064,6 @@ static u8 InBoxInput_Normal(void)
return retVal;
}
-#else
-NAKED
-static u8 InBoxInput_Normal(void)
-{
- asm_unified("\n\
- push {r4-r7,lr}\n\
- mov r7, r10\n\
- mov r6, r9\n\
- mov r5, r8\n\
- push {r5-r7}\n\
- ldr r0, =sBoxCursorArea\n\
- ldrb r0, [r0]\n\
- mov r8, r0\n\
- ldr r2, =sBoxCursorPosition\n\
- ldrb r4, [r2]\n\
- ldr r5, =sPSSData\n\
- ldr r0, [r5]\n\
- ldr r1, =0x00000cd2\n\
- mov r10, r1\n\
- add r0, r10\n\
- movs r1, 0\n\
- strb r1, [r0]\n\
- ldr r0, [r5]\n\
- ldr r7, =0x00000cd3\n\
- adds r0, r7\n\
- strb r1, [r0]\n\
- ldr r0, [r5]\n\
- ldr r3, =0x00000cd7\n\
- mov r9, r3\n\
- add r0, r9\n\
- strb r1, [r0]\n\
- ldr r6, =gMain\n\
- ldrh r1, [r6, 0x30]\n\
- movs r0, 0x40\n\
- ands r0, r1\n\
- adds r3, r2, 0\n\
- cmp r0, 0\n\
- beq _080CF14C\n\
- b _080CF33C\n\
-_080CF14C:\n\
- movs r0, 0x80\n\
- ands r0, r1\n\
- cmp r0, 0\n\
- beq _080CF1A8\n\
- movs r6, 0x1\n\
- lsls r0, r4, 24\n\
- movs r1, 0xC0\n\
- lsls r1, 19\n\
- adds r0, r1\n\
- lsrs r4, r0, 24\n\
- asrs r0, 24\n\
- cmp r0, 0x1D\n\
- bgt _080CF168\n\
- b _080CF358\n\
-_080CF168:\n\
- movs r2, 0x3\n\
- mov r8, r2\n\
- subs r0, 0x1E\n\
- lsls r0, 24\n\
- asrs r0, 24\n\
- movs r1, 0x3\n\
- bl __divsi3\n\
- lsls r0, 24\n\
- lsrs r4, r0, 24\n\
- ldr r0, [r5]\n\
- add r0, r10\n\
- strb r6, [r0]\n\
- ldr r0, [r5]\n\
- add r0, r9\n\
- strb r6, [r0]\n\
- b _080CF358\n\
- .pool\n\
-_080CF1A8:\n\
- movs r0, 0x20\n\
- ands r0, r1\n\
- cmp r0, 0\n\
- beq _080CF1DE\n\
- movs r6, 0x1\n\
- movs r0, 0\n\
- ldrsb r0, [r3, r0]\n\
- movs r1, 0x6\n\
- bl __modsi3\n\
- lsls r0, 24\n\
- cmp r0, 0\n\
- beq _080CF1CA\n\
- lsls r0, r4, 24\n\
- movs r3, 0xFF\n\
- lsls r3, 24\n\
- b _080CF34C\n\
-_080CF1CA:\n\
- ldr r0, [r5]\n\
- adds r0, r7\n\
- movs r1, 0xFF\n\
- strb r1, [r0]\n\
- lsls r0, r4, 24\n\
- movs r1, 0xA0\n\
- lsls r1, 19\n\
- adds r0, r1\n\
- lsrs r4, r0, 24\n\
- b _080CF358\n\
-_080CF1DE:\n\
- movs r0, 0x10\n\
- ands r0, r1\n\
- cmp r0, 0\n\
- beq _080CF212\n\
- movs r6, 0x1\n\
- movs r0, 0\n\
- ldrsb r0, [r3, r0]\n\
- adds r0, 0x1\n\
- movs r1, 0x6\n\
- bl __modsi3\n\
- cmp r0, 0\n\
- beq _080CF204\n\
- lsls r0, r4, 24\n\
- movs r2, 0x80\n\
- lsls r2, 17\n\
- adds r0, r2\n\
- lsrs r4, r0, 24\n\
- b _080CF358\n\
-_080CF204:\n\
- ldr r0, [r5]\n\
- adds r0, r7\n\
- strb r6, [r0]\n\
- lsls r0, r4, 24\n\
- movs r3, 0xFB\n\
- lsls r3, 24\n\
- b _080CF34C\n\
-_080CF212:\n\
- ldrh r1, [r6, 0x2E]\n\
- movs r0, 0x8\n\
- ands r0, r1\n\
- cmp r0, 0\n\
- beq _080CF220\n\
- movs r6, 0x1\n\
- b _080CF352\n\
-_080CF220:\n\
- movs r4, 0x1\n\
- movs r0, 0x1\n\
- ands r0, r1\n\
- cmp r0, 0\n\
- beq _080CF2E4\n\
- bl sub_80CFA5C\n\
- lsls r0, 24\n\
- cmp r0, 0\n\
- beq _080CF2E4\n\
- ldr r0, =sCanOnlyMove\n\
- ldrb r0, [r0]\n\
- cmp r0, 0\n\
- bne _080CF244\n\
- movs r0, 0x8\n\
- b _080CF366\n\
- .pool\n\
-_080CF244:\n\
- ldr r1, [r5]\n\
- ldrb r0, [r1, 0x1]\n\
- cmp r0, 0x2\n\
- bne _080CF254\n\
- ldr r0, =sIsMonBeingMoved\n\
- ldrb r0, [r0]\n\
- cmp r0, 0x1\n\
- bne _080CF2D4\n\
-_080CF254:\n\
- movs r0, 0\n\
- bl sub_80CFF98\n\
- subs r0, 0x1\n\
- lsls r0, 24\n\
- asrs r0, 24\n\
- cmp r0, 0xE\n\
- bhi _080CF2E4\n\
- lsls r0, 2\n\
- ldr r1, =_080CF278\n\
- adds r0, r1\n\
- ldr r0, [r0]\n\
- mov pc, r0\n\
- .pool\n\
- .align 2, 0\n\
-_080CF278:\n\
- .4byte _080CF2B4\n\
- .4byte _080CF2B8\n\
- .4byte _080CF2BC\n\
- .4byte _080CF2C0\n\
- .4byte _080CF2C4\n\
- .4byte _080CF2E4\n\
- .4byte _080CF2E4\n\
- .4byte _080CF2E4\n\
- .4byte _080CF2E4\n\
- .4byte _080CF2E4\n\
- .4byte _080CF2E4\n\
- .4byte _080CF2C8\n\
- .4byte _080CF2CC\n\
- .4byte _080CF2E4\n\
- .4byte _080CF2D0\n\
-_080CF2B4:\n\
- movs r0, 0xB\n\
- b _080CF366\n\
-_080CF2B8:\n\
- movs r0, 0xC\n\
- b _080CF366\n\
-_080CF2BC:\n\
- movs r0, 0xD\n\
- b _080CF366\n\
-_080CF2C0:\n\
- movs r0, 0xE\n\
- b _080CF366\n\
-_080CF2C4:\n\
- movs r0, 0xF\n\
- b _080CF366\n\
-_080CF2C8:\n\
- movs r0, 0x10\n\
- b _080CF366\n\
-_080CF2CC:\n\
- movs r0, 0x11\n\
- b _080CF366\n\
-_080CF2D0:\n\
- movs r0, 0x12\n\
- b _080CF366\n\
-_080CF2D4:\n\
- ldr r2, =0x000021ff\n\
- adds r0, r1, r2\n\
- strb r4, [r0]\n\
- movs r0, 0x14\n\
- b _080CF366\n\
- .pool\n\
-_080CF2E4:\n\
- ldr r2, =gMain\n\
- ldrh r1, [r2, 0x2E]\n\
- movs r0, 0x2\n\
- ands r0, r1\n\
- cmp r0, 0\n\
- beq _080CF2F8\n\
- movs r0, 0x13\n\
- b _080CF366\n\
- .pool\n\
-_080CF2F8:\n\
- ldr r0, =gSaveBlock2Ptr\n\
- ldr r0, [r0]\n\
- ldrb r0, [r0, 0x13]\n\
- cmp r0, 0x1\n\
- bne _080CF326\n\
- ldrh r1, [r2, 0x2C]\n\
- movs r0, 0x80\n\
- lsls r0, 2\n\
- ands r0, r1\n\
- cmp r0, 0\n\
- beq _080CF318\n\
- movs r0, 0xA\n\
- b _080CF366\n\
- .pool\n\
-_080CF318:\n\
- movs r0, 0x80\n\
- lsls r0, 1\n\
- ands r0, r1\n\
- cmp r0, 0\n\
- beq _080CF326\n\
- movs r0, 0x9\n\
- b _080CF366\n\
-_080CF326:\n\
- ldrh r1, [r2, 0x2E]\n\
- movs r0, 0x4\n\
- ands r0, r1\n\
- cmp r0, 0\n\
- beq _080CF338\n\
- bl sub_80CFDC4\n\
- movs r0, 0\n\
- b _080CF366\n\
-_080CF338:\n\
- movs r6, 0\n\
- b _080CF364\n\
-_080CF33C:\n\
- movs r6, 0x1\n\
- movs r0, 0\n\
- ldrsb r0, [r2, r0]\n\
- cmp r0, 0x5\n\
- ble _080CF352\n\
- lsls r0, r4, 24\n\
- movs r3, 0xFA\n\
- lsls r3, 24\n\
-_080CF34C:\n\
- adds r0, r3\n\
- lsrs r4, r0, 24\n\
- b _080CF358\n\
-_080CF352:\n\
- movs r0, 0x2\n\
- mov r8, r0\n\
- movs r4, 0\n\
-_080CF358:\n\
- cmp r6, 0\n\
- beq _080CF364\n\
- mov r0, r8\n\
- adds r1, r4, 0\n\
- bl sub_80CD894\n\
-_080CF364:\n\
- adds r0, r6, 0\n\
-_080CF366:\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\
- ");
-}
-#endif
static u8 InBoxInput_GrabbingMultiple(void)
{
@@ -7526,22 +7221,23 @@ static u8 InBoxInput_MovingMultiple(void)
}
}
-#ifdef NONMATCHING
static u8 HandleInput_InParty(void)
{
u8 retVal;
bool8 gotoBox;
- s8 cursorArea = sBoxCursorArea;
- s8 cursorPosition = sBoxCursorPosition;
-
- sPSSData->field_CD3 = 0;
- sPSSData->field_CD2 = 0;
- sPSSData->field_CD7 = 0;
- gotoBox = FALSE;
- retVal = 0;
+ s8 cursorArea;
+ s8 cursorPosition;
do
{
+ cursorArea = sBoxCursorArea;
+ cursorPosition = sBoxCursorPosition;
+ sPSSData->field_CD3 = 0;
+ sPSSData->field_CD2 = 0;
+ sPSSData->field_CD7 = 0;
+ gotoBox = FALSE;
+ retVal = 0;
+
if (gMain.newAndRepeatedKeys & DPAD_UP)
{
if (--cursorPosition < 0)
@@ -7647,290 +7343,19 @@ static u8 HandleInput_InParty(void)
return retVal;
}
-#else
-NAKED
-static u8 HandleInput_InParty(void)
-{
- asm_unified("\n\
- push {r4-r7,lr}\n\
- mov r7, r9\n\
- mov r6, r8\n\
- push {r6,r7}\n\
- ldr r0, =sBoxCursorArea\n\
- ldrb r0, [r0]\n\
- mov r9, r0\n\
- ldr r6, =sBoxCursorPosition\n\
- ldrb r4, [r6]\n\
- ldr r2, =sPSSData\n\
- ldr r0, [r2]\n\
- ldr r1, =0x00000cd3\n\
- adds r0, r1\n\
- movs r1, 0\n\
- strb r1, [r0]\n\
- ldr r0, [r2]\n\
- ldr r3, =0x00000cd2\n\
- adds r0, r3\n\
- strb r1, [r0]\n\
- ldr r0, [r2]\n\
- adds r3, 0x5\n\
- adds r0, r3\n\
- strb r1, [r0]\n\
- mov r8, r1\n\
- movs r7, 0\n\
- ldr r1, =gMain\n\
- ldrh r3, [r1, 0x30]\n\
- movs r0, 0x40\n\
- ands r0, r3\n\
- adds r5, r6, 0\n\
- mov r12, r1\n\
- cmp r0, 0\n\
- beq _080CF608\n\
- b _080CF7A8\n\
-_080CF608:\n\
- movs r0, 0x80\n\
- ands r0, r3\n\
- cmp r0, 0\n\
- beq _080CF64C\n\
- lsls r0, r4, 24\n\
- movs r1, 0x80\n\
- lsls r1, 17\n\
- adds r0, r1\n\
- lsrs r4, r0, 24\n\
- asrs r0, 24\n\
- cmp r0, 0x6\n\
- ble _080CF622\n\
- movs r4, 0\n\
-_080CF622:\n\
- lsls r0, r4, 24\n\
- asrs r0, 24\n\
- movs r1, 0\n\
- ldrsb r1, [r5, r1]\n\
- cmp r0, r1\n\
- bne _080CF630\n\
- b _080CF7C6\n\
-_080CF630:\n\
- movs r7, 0x1\n\
- b _080CF7CA\n\
- .pool\n\
-_080CF64C:\n\
- movs r0, 0x20\n\
- ands r0, r3\n\
- cmp r0, 0\n\
- beq _080CF670\n\
- ldrb r1, [r5]\n\
- movs r0, 0\n\
- ldrsb r0, [r5, r0]\n\
- cmp r0, 0\n\
- beq _080CF670\n\
- movs r7, 0x1\n\
- ldr r0, [r2]\n\
- ldr r2, =0x00000cd6\n\
- adds r0, r2\n\
- strb r1, [r0]\n\
- movs r4, 0\n\
- b _080CF7C6\n\
- .pool\n\
-_080CF670:\n\
- mov r3, r12\n\
- ldrh r1, [r3, 0x30]\n\
- movs r0, 0x10\n\
- ands r0, r1\n\
- cmp r0, 0\n\
- beq _080CF69E\n\
- movs r0, 0\n\
- ldrsb r0, [r5, r0]\n\
- cmp r0, 0\n\
- bne _080CF694\n\
- movs r7, 0x1\n\
- ldr r0, [r2]\n\
- ldr r1, =0x00000cd6\n\
- adds r0, r1\n\
- ldrb r4, [r0]\n\
- b _080CF7C6\n\
- .pool\n\
-_080CF694:\n\
- movs r7, 0x6\n\
- movs r2, 0\n\
- mov r9, r2\n\
- movs r4, 0\n\
- b _080CF7C6\n\
-_080CF69E:\n\
- mov r3, r12\n\
- ldrh r1, [r3, 0x2E]\n\
- movs r0, 0x1\n\
- ands r0, r1\n\
- cmp r0, 0\n\
- beq _080CF75C\n\
- movs r0, 0\n\
- ldrsb r0, [r5, r0]\n\
- cmp r0, 0x6\n\
- bne _080CF6C4\n\
- ldr r0, [r2]\n\
- ldrb r0, [r0, 0x1]\n\
- cmp r0, 0x1\n\
- bne _080CF6BE\n\
- movs r0, 0x4\n\
- b _080CF7D8\n\
-_080CF6BE:\n\
- movs r0, 0x1\n\
- mov r8, r0\n\
- b _080CF75C\n\
-_080CF6C4:\n\
- bl sub_80CFA5C\n\
- lsls r0, 24\n\
- cmp r0, 0\n\
- beq _080CF75C\n\
- ldr r0, =sCanOnlyMove\n\
- ldrb r0, [r0]\n\
- cmp r0, 0\n\
- bne _080CF6E0\n\
- movs r0, 0x8\n\
- b _080CF7D8\n\
- .pool\n\
-_080CF6E0:\n\
- movs r0, 0\n\
- bl sub_80CFF98\n\
- subs r0, 0x1\n\
- lsls r0, 24\n\
- asrs r0, 24\n\
- cmp r0, 0xE\n\
- bhi _080CF75C\n\
- lsls r0, 2\n\
- ldr r1, =_080CF700\n\
- adds r0, r1\n\
- ldr r0, [r0]\n\
- mov pc, r0\n\
- .pool\n\
- .align 2, 0\n\
-_080CF700:\n\
- .4byte _080CF73C\n\
- .4byte _080CF740\n\
- .4byte _080CF744\n\
- .4byte _080CF748\n\
- .4byte _080CF74C\n\
- .4byte _080CF75C\n\
- .4byte _080CF75C\n\
- .4byte _080CF75C\n\
- .4byte _080CF75C\n\
- .4byte _080CF75C\n\
- .4byte _080CF75C\n\
- .4byte _080CF750\n\
- .4byte _080CF754\n\
- .4byte _080CF75C\n\
- .4byte _080CF758\n\
-_080CF73C:\n\
- movs r0, 0xB\n\
- b _080CF7D8\n\
-_080CF740:\n\
- movs r0, 0xC\n\
- b _080CF7D8\n\
-_080CF744:\n\
- movs r0, 0xD\n\
- b _080CF7D8\n\
-_080CF748:\n\
- movs r0, 0xE\n\
- b _080CF7D8\n\
-_080CF74C:\n\
- movs r0, 0xF\n\
- b _080CF7D8\n\
-_080CF750:\n\
- movs r0, 0x10\n\
- b _080CF7D8\n\
-_080CF754:\n\
- movs r0, 0x11\n\
- b _080CF7D8\n\
-_080CF758:\n\
- movs r0, 0x12\n\
- b _080CF7D8\n\
-_080CF75C:\n\
- ldr r2, =gMain\n\
- ldrh r1, [r2, 0x2E]\n\
- movs r0, 0x2\n\
- ands r0, r1\n\
- mov r12, r2\n\
- cmp r0, 0\n\
- beq _080CF784\n\
- ldr r0, =sPSSData\n\
- ldr r0, [r0]\n\
- ldrb r0, [r0, 0x1]\n\
- cmp r0, 0x1\n\
- bne _080CF780\n\
- movs r0, 0x13\n\
- b _080CF7D8\n\
- .pool\n\
-_080CF780:\n\
- movs r1, 0x1\n\
- mov r8, r1\n\
-_080CF784:\n\
- mov r2, r8\n\
- cmp r2, 0\n\
- beq _080CF794\n\
- movs r7, 0x6\n\
- movs r3, 0\n\
- mov r9, r3\n\
- movs r4, 0\n\
- b _080CF7C6\n\
-_080CF794:\n\
- mov r0, r12\n\
- ldrh r1, [r0, 0x2E]\n\
- movs r0, 0x4\n\
- ands r0, r1\n\
- cmp r0, 0\n\
- beq _080CF7C6\n\
- bl sub_80CFDC4\n\
- movs r0, 0\n\
- b _080CF7D8\n\
-_080CF7A8:\n\
- lsls r0, r4, 24\n\
- movs r1, 0xFF\n\
- lsls r1, 24\n\
- adds r0, r1\n\
- lsrs r4, r0, 24\n\
- cmp r0, 0\n\
- bge _080CF7B8\n\
- movs r4, 0x6\n\
-_080CF7B8:\n\
- lsls r0, r4, 24\n\
- asrs r0, 24\n\
- movs r1, 0\n\
- ldrsb r1, [r6, r1]\n\
- cmp r0, r1\n\
- beq _080CF7C6\n\
- movs r7, 0x1\n\
-_080CF7C6:\n\
- cmp r7, 0\n\
- beq _080CF7D6\n\
-_080CF7CA:\n\
- cmp r7, 0x6\n\
- beq _080CF7D6\n\
- mov r0, r9\n\
- adds r1, r4, 0\n\
- bl sub_80CD894\n\
-_080CF7D6:\n\
- adds r0, r7, 0\n\
-_080CF7D8:\n\
- pop {r3,r4}\n\
- mov r8, r3\n\
- mov r9, r4\n\
- pop {r4-r7}\n\
- pop {r1}\n\
- bx r1");
-}
-#endif
-
-#ifdef NONMATCHING
+
static u8 HandleInput_OnBox(void)
{
u8 retVal;
s8 cursorArea;
s8 cursorPosition;
- sPSSData->field_CD3 = 0;
- sPSSData->field_CD2 = 0;
- sPSSData->field_CD7 = 0;
-
do
{
+ sPSSData->field_CD3 = 0;
+ sPSSData->field_CD2 = 0;
+ sPSSData->field_CD7 = 0;
+
if (gMain.newAndRepeatedKeys & DPAD_UP)
{
retVal = 1;
@@ -7989,152 +7414,30 @@ static u8 HandleInput_OnBox(void)
return retVal;
}
-#else
-NAKED
-static u8 HandleInput_OnBox(void)
-{
- asm_unified("\n\
- push {r4-r6,lr}\n\
- ldr r3, =sPSSData\n\
- ldr r0, [r3]\n\
- ldr r1, =0x00000cd3\n\
- adds r0, r1\n\
- movs r1, 0\n\
- strb r1, [r0]\n\
- ldr r0, [r3]\n\
- ldr r2, =0x00000cd2\n\
- adds r0, r2\n\
- strb r1, [r0]\n\
- ldr r0, [r3]\n\
- ldr r5, =0x00000cd7\n\
- adds r0, r5\n\
- strb r1, [r0]\n\
- ldr r1, =gMain\n\
- ldrh r2, [r1, 0x30]\n\
- movs r0, 0x40\n\
- ands r0, r2\n\
- cmp r0, 0\n\
- bne _080CF8AA\n\
- movs r0, 0x80\n\
- ands r0, r2\n\
- cmp r0, 0\n\
- beq _080CF834\n\
- movs r4, 0x1\n\
- movs r1, 0\n\
- movs r6, 0x2\n\
- b _080CF8B6\n\
- .pool\n\
-_080CF834:\n\
- ldrh r2, [r1, 0x2C]\n\
- movs r0, 0x20\n\
- ands r0, r2\n\
- cmp r0, 0\n\
- bne _080CF85A\n\
- movs r0, 0x10\n\
- ands r0, r2\n\
- cmp r0, 0\n\
- bne _080CF86E\n\
- ldr r0, =gSaveBlock2Ptr\n\
- ldr r0, [r0]\n\
- ldrb r0, [r0, 0x13]\n\
- cmp r0, 0x1\n\
- bne _080CF872\n\
- movs r0, 0x80\n\
- lsls r0, 2\n\
- ands r0, r2\n\
- cmp r0, 0\n\
- beq _080CF864\n\
-_080CF85A:\n\
- movs r0, 0xA\n\
- b _080CF8D2\n\
- .pool\n\
-_080CF864:\n\
- movs r0, 0x80\n\
- lsls r0, 1\n\
- ands r0, r2\n\
- cmp r0, 0\n\
- beq _080CF872\n\
-_080CF86E:\n\
- movs r0, 0x9\n\
- b _080CF8D2\n\
-_080CF872:\n\
- ldrh r1, [r1, 0x2E]\n\
- movs r0, 0x1\n\
- ands r0, r1\n\
- cmp r0, 0\n\
- beq _080CF88A\n\
- movs r0, 0\n\
- bl sub_80CD1A8\n\
- bl AddBoxMenu\n\
- movs r0, 0x7\n\
- b _080CF8D2\n\
-_080CF88A:\n\
- movs r0, 0x2\n\
- ands r0, r1\n\
- cmp r0, 0\n\
- beq _080CF896\n\
- movs r0, 0x13\n\
- b _080CF8D2\n\
-_080CF896:\n\
- movs r0, 0x4\n\
- ands r0, r1\n\
- cmp r0, 0\n\
- beq _080CF8A6\n\
- bl sub_80CFDC4\n\
- movs r0, 0\n\
- b _080CF8D2\n\
-_080CF8A6:\n\
- movs r4, 0\n\
- b _080CF8D0\n\
-_080CF8AA:\n\
- movs r4, 0x1\n\
- movs r1, 0x3\n\
- movs r6, 0\n\
- ldr r0, [r3]\n\
- adds r0, r5\n\
- strb r4, [r0]\n\
-_080CF8B6:\n\
- cmp r4, 0\n\
- beq _080CF8D0\n\
- lsls r5, r1, 24\n\
- cmp r1, 0x2\n\
- beq _080CF8C6\n\
- movs r0, 0\n\
- bl sub_80CD1A8\n\
-_080CF8C6:\n\
- lsrs r0, r5, 24\n\
- lsls r1, r6, 24\n\
- lsrs r1, 24\n\
- bl sub_80CD894\n\
-_080CF8D0:\n\
- adds r0, r4, 0\n\
-_080CF8D2:\n\
- pop {r4-r6}\n\
- pop {r1}\n\
- bx r1\n\
- ");
-}
-#endif
-
-#ifdef NONMATCHING
+
static u8 HandleInput_OnButtons(void)
{
u8 retVal;
- s8 cursorArea = sBoxCursorArea;
- s8 cursorPosition = sBoxCursorPosition;
-
- sPSSData->field_CD3 = 0;
- sPSSData->field_CD2 = 0;
- sPSSData->field_CD7 = 0;
+ s8 cursorArea;
+ s8 cursorPosition;
do
{
+ cursorArea = sBoxCursorArea;
+ cursorPosition = sBoxCursorPosition;
+ sPSSData->field_CD3 = 0;
+ sPSSData->field_CD2 = 0;
+ sPSSData->field_CD7 = 0;
+
if (gMain.newAndRepeatedKeys & DPAD_UP)
{
retVal = 1;
cursorArea = CURSOR_AREA_IN_BOX;
sPSSData->field_CD2 = -1;
- cursorPosition = (sBoxCursorPosition == 0) ? IN_BOX_COUNT - 1 - 5 : IN_BOX_COUNT - 1;
+ if (sBoxCursorPosition == 0)
+ cursorPosition = IN_BOX_COUNT - 1 - 5;
+ else
+ cursorPosition = IN_BOX_COUNT - 1;
sPSSData->field_CD7 = 1;
break;
}
@@ -8181,148 +7484,6 @@ static u8 HandleInput_OnButtons(void)
return retVal;
}
-#else
-NAKED
-static u8 HandleInput_OnButtons(void)
-{
- asm_unified("\n\
- push {r4-r7,lr}\n\
- mov r7, r8\n\
- push {r7}\n\
- ldr r0, =sBoxCursorArea\n\
- ldrb r0, [r0]\n\
- mov r8, r0\n\
- ldr r0, =sBoxCursorPosition\n\
- mov r12, r0\n\
- ldrb r2, [r0]\n\
- ldr r3, =sPSSData\n\
- ldr r0, [r3]\n\
- ldr r1, =0x00000cd3\n\
- adds r0, r1\n\
- movs r1, 0\n\
- strb r1, [r0]\n\
- ldr r0, [r3]\n\
- ldr r6, =0x00000cd2\n\
- adds r0, r6\n\
- strb r1, [r0]\n\
- ldr r0, [r3]\n\
- ldr r5, =0x00000cd7\n\
- adds r0, r5\n\
- strb r1, [r0]\n\
- ldr r7, =gMain\n\
- ldrh r1, [r7, 0x30]\n\
- movs r0, 0x40\n\
- ands r0, r1\n\
- adds r4, r3, 0\n\
- cmp r0, 0\n\
- bne _080CF9B2\n\
- movs r0, 0x88\n\
- ands r0, r1\n\
- cmp r0, 0\n\
- beq _080CF944\n\
- movs r7, 0x1\n\
- movs r0, 0x2\n\
- mov r8, r0\n\
- movs r2, 0\n\
- ldr r0, [r4]\n\
- b _080CF9D0\n\
- .pool\n\
-_080CF944:\n\
- movs r0, 0x20\n\
- ands r0, r1\n\
- cmp r0, 0\n\
- beq _080CF960\n\
- movs r7, 0x1\n\
- lsls r0, r2, 24\n\
- movs r1, 0xFF\n\
- lsls r1, 24\n\
- adds r0, r1\n\
- lsrs r2, r0, 24\n\
- cmp r0, 0\n\
- bge _080CF9D4\n\
- movs r2, 0x1\n\
- b _080CF9D4\n\
-_080CF960:\n\
- movs r0, 0x10\n\
- ands r0, r1\n\
- cmp r0, 0\n\
- beq _080CF97E\n\
- movs r7, 0x1\n\
- lsls r0, r2, 24\n\
- movs r1, 0x80\n\
- lsls r1, 17\n\
- adds r0, r1\n\
- lsrs r2, r0, 24\n\
- asrs r0, 24\n\
- cmp r0, 0x1\n\
- ble _080CF9D4\n\
- movs r2, 0\n\
- b _080CF9D4\n\
-_080CF97E:\n\
- ldrh r1, [r7, 0x2E]\n\
- movs r0, 0x1\n\
- ands r0, r1\n\
- cmp r0, 0\n\
- beq _080CF992\n\
- movs r0, 0x4\n\
- cmp r2, 0\n\
- bne _080CF9E2\n\
- movs r0, 0x5\n\
- b _080CF9E2\n\
-_080CF992:\n\
- movs r0, 0x2\n\
- ands r0, r1\n\
- cmp r0, 0\n\
- beq _080CF99E\n\
- movs r0, 0x13\n\
- b _080CF9E2\n\
-_080CF99E:\n\
- movs r0, 0x4\n\
- ands r0, r1\n\
- cmp r0, 0\n\
- beq _080CF9AE\n\
- bl sub_80CFDC4\n\
- movs r0, 0\n\
- b _080CF9E2\n\
-_080CF9AE:\n\
- movs r7, 0\n\
- b _080CF9E0\n\
-_080CF9B2:\n\
- movs r7, 0x1\n\
- movs r0, 0\n\
- mov r8, r0\n\
- ldr r0, [r3]\n\
- adds r0, r6\n\
- movs r1, 0xFF\n\
- strb r1, [r0]\n\
- mov r1, r12\n\
- movs r0, 0\n\
- ldrsb r0, [r1, r0]\n\
- movs r2, 0x1D\n\
- cmp r0, 0\n\
- bne _080CF9CE\n\
- movs r2, 0x18\n\
-_080CF9CE:\n\
- ldr r0, [r3]\n\
-_080CF9D0:\n\
- adds r0, r5\n\
- strb r7, [r0]\n\
-_080CF9D4:\n\
- cmp r7, 0\n\
- beq _080CF9E0\n\
- mov r0, r8\n\
- adds r1, r2, 0\n\
- bl sub_80CD894\n\
-_080CF9E0:\n\
- adds r0, r7, 0\n\
-_080CF9E2:\n\
- pop {r3}\n\
- mov r8, r3\n\
- pop {r4-r7}\n\
- pop {r1}\n\
- bx r1");
-}
-#endif
static u8 HandleInput(void)
{
@@ -8743,7 +7904,7 @@ static void AddMenu(void)
DrawStdFrameWithCustomTileAndPalette(sPSSData->field_CB0, FALSE, 11, 14);
PrintMenuTable(sPSSData->field_CB0, sPSSData->menuItemsCount, (void*)sPSSData->menuItems);
InitMenuInUpperLeftCornerPlaySoundWhenAPressed(sPSSData->field_CB0, sPSSData->menuItemsCount, 0);
- schedule_bg_copy_tilemap_to_vram(0);
+ ScheduleBgCopyTilemapToVram(0);
sPSSData->field_CAE = 0;
}
@@ -8936,7 +8097,7 @@ static bool8 sub_80D0344(void)
if (!IsDma3ManagerBusyWithBgCopy())
{
sub_80CFE84();
- LoadPalette(stdpal_get(3), 0xD0, 0x20);
+ LoadPalette(GetTextWindowPalette(3), 0xD0, 0x20);
ShowBg(0);
return FALSE;
}
@@ -9042,7 +8203,7 @@ static bool8 sub_80D04C8(void)
case 3:
if (!IsDma3ManagerBusyWithBgCopy())
{
- LoadPalette(stdpal_get(3), 0xD0, 0x20);
+ LoadPalette(GetTextWindowPalette(3), 0xD0, 0x20);
sub_80CFE84();
ShowBg(0);
return FALSE;
@@ -9966,7 +9127,7 @@ static bool8 sub_80D18E4(void)
sub_80D19B4(var);
FillBgTilemapBufferRect(0, 0, var + 1, 12, 1, 9, 0x11);
- schedule_bg_copy_tilemap_to_vram(0);
+ ScheduleBgCopyTilemapToVram(0);
return TRUE;
}
@@ -9980,7 +9141,7 @@ static void sub_80D19B4(u32 arg0)
FillBgTilemapBufferRect(0, 0x13B, arg0, 0xD, 1, 7, 0xFu);
FillBgTilemapBufferRect(0, 0x13C, arg0, 0xC, 1, 1, 0xFu);
FillBgTilemapBufferRect(0, 0x13D, arg0, 0x14, 1, 1, 0xFu);
- schedule_bg_copy_tilemap_to_vram(0);
+ ScheduleBgCopyTilemapToVram(0);
}
static void sub_80D1A48(struct Sprite *sprite)
diff --git a/src/pokemon_summary_screen.c b/src/pokemon_summary_screen.c
index 1cdaf3422..d016c455c 100644
--- a/src/pokemon_summary_screen.c
+++ b/src/pokemon_summary_screen.c
@@ -296,7 +296,7 @@ static void CreateMoveSelectorSprites(u8 idArrayStart);
static void SpriteCb_MoveSelector(struct Sprite *sprite);
static void DestroyMoveSelectorSprites(u8 firstArrayId);
static void SetMainMoveSelectorColor(u8 whichColor);
-static void MakeMoveSelectorVisible(u8 a);
+static void KeepMoveSelectorVisible(u8 firstSpriteId);
// const rom data
#include "data/text/move_descriptions.h"
@@ -709,9 +709,9 @@ static void (*const sTextPrinterTasks[])(u8 taskId) =
static const u8 sMemoNatureTextColor[] = _("{COLOR LIGHT_RED}{SHADOW GREEN}");
static const u8 sMemoMiscTextColor[] = _("{COLOR WHITE}{SHADOW DARK_GREY}"); // This is also affected by palettes, apparently
-static const u8 sStatsLeftColumnLayout[] = _("{SPECIAL_F7 0x00}/{SPECIAL_F7 0x01}\n{SPECIAL_F7 0x02}\n{SPECIAL_F7 0x03}");
-static const u8 sStatsRightColumnLayout[] = _("{SPECIAL_F7 0x00}\n{SPECIAL_F7 0x01}\n{SPECIAL_F7 0x02}");
-static const u8 sMovesPPLayout[] = _("{PP}{SPECIAL_F7 0x00}/{SPECIAL_F7 0x01}");
+static const u8 sStatsLeftColumnLayout[] = _("{DYNAMIC 0}/{DYNAMIC 1}\n{DYNAMIC 2}\n{DYNAMIC 3}");
+static const u8 sStatsRightColumnLayout[] = _("{DYNAMIC 0}\n{DYNAMIC 1}\n{DYNAMIC 2}");
+static const u8 sMovesPPLayout[] = _("{PP}{DYNAMIC 0}/{DYNAMIC 1}");
#define TAG_MOVE_SELECTOR 30000
#define TAG_MON_STATUS 30001
@@ -1095,7 +1095,7 @@ void ShowPokemonSummaryScreen(u8 mode, void *mons, u8 monIndex, u8 maxMonIndex,
}
sMonSummaryScreen->currPageIndex = sMonSummaryScreen->minPageIndex;
- SummaryScreen_SetUnknownTaskId(-1);
+ SummaryScreen_SetUnknownTaskId(0xFF);
if (gMonSpritesGfxPtr == NULL)
sub_806F2AC(0, 0);
@@ -1120,7 +1120,7 @@ static void MainCB2(void)
RunTasks();
AnimateSprites();
BuildOamBuffer();
- do_scheduled_bg_tilemap_copies_to_vram();
+ DoScheduledBgTilemapCopiesToVram();
UpdatePaletteFade();
}
@@ -1133,7 +1133,7 @@ static void VBlank(void)
static void CB2_InitSummaryScreen(void)
{
- while (sub_81221EC() != TRUE && LoadGraphics() != TRUE && sub_81221AC() != TRUE);
+ while (MenuHelpers_CallLinkSomething() != TRUE && LoadGraphics() != TRUE && MenuHelpers_LinkSomething() != TRUE);
}
static bool8 LoadGraphics(void)
@@ -1143,7 +1143,7 @@ static bool8 LoadGraphics(void)
case 0:
SetVBlankHBlankCallbacksToNull();
ResetVramOamAndBgCntRegs();
- clear_scheduled_bg_copies_to_vram();
+ ClearScheduledBgCopiesToVram();
gMain.state++;
break;
case 1:
@@ -1271,9 +1271,9 @@ static void InitBGs(void)
SetBgTilemapBuffer(2, sMonSummaryScreen->bgTilemapBuffers[PSS_PAGE_SKILLS][0]);
SetBgTilemapBuffer(3, sMonSummaryScreen->bgTilemapBuffers[PSS_PAGE_INFO][0]);
ResetAllBgsCoordinates();
- schedule_bg_copy_tilemap_to_vram(1);
- schedule_bg_copy_tilemap_to_vram(2);
- schedule_bg_copy_tilemap_to_vram(3);
+ ScheduleBgCopyTilemapToVram(1);
+ ScheduleBgCopyTilemapToVram(2);
+ ScheduleBgCopyTilemapToVram(3);
SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_OBJ_ON | DISPCNT_OBJ_1D_MAP);
SetGpuReg(REG_OFFSET_BLDCNT, 0);
ShowBg(0);
@@ -1287,12 +1287,12 @@ static bool8 DecompressGraphics(void)
switch (sMonSummaryScreen->switchCounter)
{
case 0:
- reset_temp_tile_data_buffers();
- decompress_and_copy_tile_data_to_vram(1, &gStatusScreenBitmap, 0, 0, 0);
+ ResetTempTileDataBuffers();
+ DecompressAndCopyTileDataToVram(1, &gStatusScreenBitmap, 0, 0, 0);
sMonSummaryScreen->switchCounter++;
break;
case 1:
- if (free_temp_tile_data_buffers_if_possible() != 1)
+ if (FreeTempTileDataBuffersIfPossible() != 1)
{
LZDecompressWram(gPageInfoTilemap, sMonSummaryScreen->bgTilemapBuffers[PSS_PAGE_INFO][0]);
sMonSummaryScreen->switchCounter++;
@@ -1477,7 +1477,7 @@ static void BeginCloseSummaryScreen(u8 taskId)
static void CloseSummaryScreen(u8 taskId)
{
- if (sub_81221EC() != TRUE && !gPaletteFade.active)
+ if (MenuHelpers_CallLinkSomething() != TRUE && !gPaletteFade.active)
{
SetMainCallback2(sMonSummaryScreen->callback);
gLastViewedMonIndex = sMonSummaryScreen->curMonIndex;
@@ -1495,7 +1495,7 @@ static void CloseSummaryScreen(u8 taskId)
static void Task_HandleInput(u8 taskId)
{
- if (sub_81221EC() != TRUE && !gPaletteFade.active)
+ if (MenuHelpers_CallLinkSomething() != TRUE && !gPaletteFade.active)
{
if (gMain.newKeys & DPAD_UP)
{
@@ -1579,7 +1579,7 @@ static void ChangeSummaryPokemon(u8 taskId, s8 delta)
{
SetSpriteInvisibility(SPRITE_ARR_ID_STATUS, TRUE);
ClearWindowTilemap(PSS_LABEL_WINDOW_POKEMON_SKILLS_STATUS);
- schedule_bg_copy_tilemap_to_vram(0);
+ ScheduleBgCopyTilemapToVram(0);
HandleStatusTilemap(0, 2);
}
sMonSummaryScreen->curMonIndex = monId;
@@ -1647,7 +1647,7 @@ static void Task_ChangeSummaryMon(u8 taskId)
gSprites[sMonSummaryScreen->spriteIds[SPRITE_ARR_ID_MON]].data[2] = 0;
break;
default:
- if (sub_81221EC() == 0 && FuncIsActiveTask(Task_ShowStatusWindow) == 0)
+ if (MenuHelpers_CallLinkSomething() == 0 && FuncIsActiveTask(Task_ShowStatusWindow) == 0)
{
data[0] = 0;
gTasks[taskId].func = Task_HandleInput;
@@ -1756,14 +1756,14 @@ static void PssScrollRight(u8 taskId) // Scroll right
data[1] = 1;
SetBgAttribute(1, BG_ATTR_PRIORITY, 1);
SetBgAttribute(2, BG_ATTR_PRIORITY, 2);
- schedule_bg_copy_tilemap_to_vram(1);
+ ScheduleBgCopyTilemapToVram(1);
}
else
{
data[1] = 2;
SetBgAttribute(2, BG_ATTR_PRIORITY, 1);
SetBgAttribute(1, BG_ATTR_PRIORITY, 2);
- schedule_bg_copy_tilemap_to_vram(2);
+ ScheduleBgCopyTilemapToVram(2);
}
ChangeBgX(data[1], 0, 0);
SetBgTilemapBuffer(data[1], sMonSummaryScreen->bgTilemapBuffers[sMonSummaryScreen->currPageIndex][0]);
@@ -1813,13 +1813,13 @@ static void PssScrollLeftEnd(u8 taskId) // display left
{
SetBgAttribute(1, BG_ATTR_PRIORITY, 1);
SetBgAttribute(2, BG_ATTR_PRIORITY, 2);
- schedule_bg_copy_tilemap_to_vram(2);
+ ScheduleBgCopyTilemapToVram(2);
}
else
{
SetBgAttribute(2, BG_ATTR_PRIORITY, 1);
SetBgAttribute(1, BG_ATTR_PRIORITY, 2);
- schedule_bg_copy_tilemap_to_vram(1);
+ ScheduleBgCopyTilemapToVram(1);
}
if (sMonSummaryScreen->currPageIndex > 1)
{
@@ -1865,9 +1865,9 @@ static void SwitchToMoveSelection(u8 taskId)
PrintMoveDetails(move);
PrintNewMoveDetailsOrCancelText();
SetNewMoveTypeIcon();
- schedule_bg_copy_tilemap_to_vram(0);
- schedule_bg_copy_tilemap_to_vram(1);
- schedule_bg_copy_tilemap_to_vram(2);
+ ScheduleBgCopyTilemapToVram(0);
+ ScheduleBgCopyTilemapToVram(1);
+ ScheduleBgCopyTilemapToVram(2);
CreateMoveSelectorSprites(SPRITE_ARR_ID_MOVE_SELECTOR1);
gTasks[taskId].func = Task_HandleInput_MoveSelect;
}
@@ -1876,7 +1876,7 @@ static void Task_HandleInput_MoveSelect(u8 taskId)
{
s16 *data = gTasks[taskId].data;
- if (sub_81221EC() != 1)
+ if (MenuHelpers_CallLinkSomething() != 1)
{
if (gMain.newKeys & DPAD_UP)
{
@@ -1903,7 +1903,7 @@ static void Task_HandleInput_MoveSelect(u8 taskId)
}
else
{
- PlaySE(SE_HAZURE);
+ PlaySE(SE_FAILURE);
}
}
else if (gMain.newKeys & B_BUTTON)
@@ -1950,8 +1950,8 @@ static void ChangeSelectedMove(s16 *taskData, s8 direction, u8 *moveIndexPtr)
break;
}
DrawContestMoveHearts(move);
- schedule_bg_copy_tilemap_to_vram(1);
- schedule_bg_copy_tilemap_to_vram(2);
+ ScheduleBgCopyTilemapToVram(1);
+ ScheduleBgCopyTilemapToVram(2);
PrintMoveDetails(move);
if ((*moveIndexPtr == MAX_MON_MOVES && sMonSummaryScreen->newMove == MOVE_NONE)
|| taskData[1] == 1)
@@ -1959,7 +1959,7 @@ static void ChangeSelectedMove(s16 *taskData, s8 direction, u8 *moveIndexPtr)
ClearWindowTilemap(PSS_LABEL_WINDOW_PORTRAIT_SPECIES);
if (!gSprites[sMonSummaryScreen->spriteIds[SPRITE_ARR_ID_STATUS]].invisible)
ClearWindowTilemap(PSS_LABEL_WINDOW_POKEMON_SKILLS_STATUS);
- schedule_bg_copy_tilemap_to_vram(0);
+ ScheduleBgCopyTilemapToVram(0);
HandlePowerAccTilemap(9, -3);
HandleAppealJamTilemap(9, -3, move);
}
@@ -1969,22 +1969,22 @@ static void ChangeSelectedMove(s16 *taskData, s8 direction, u8 *moveIndexPtr)
{
ClearWindowTilemap(PSS_LABEL_WINDOW_MOVES_POWER_ACC);
ClearWindowTilemap(PSS_LABEL_WINDOW_MOVES_APPEAL_JAM);
- schedule_bg_copy_tilemap_to_vram(0);
+ ScheduleBgCopyTilemapToVram(0);
HandlePowerAccTilemap(0, 3);
HandleAppealJamTilemap(0, 3, 0);
}
*moveIndexPtr = newMoveIndex;
- // Not sure what the purpose of this function is, seems to have no effect whatsoever.
+ // Get rid of the 'flicker' effect(while idle) when scrolling.
if (moveIndexPtr == &sMonSummaryScreen->firstMoveIndex)
- MakeMoveSelectorVisible(SPRITE_ARR_ID_MOVE_SELECTOR1);
+ KeepMoveSelectorVisible(SPRITE_ARR_ID_MOVE_SELECTOR1);
else
- MakeMoveSelectorVisible(SPRITE_ARR_ID_MOVE_SELECTOR2);
+ KeepMoveSelectorVisible(SPRITE_ARR_ID_MOVE_SELECTOR2);
}
static void CloseMoveSelectMode(u8 taskId)
{
- DestroyMoveSelectorSprites(8);
+ DestroyMoveSelectorSprites(SPRITE_ARR_ID_MOVE_SELECTOR1);
ClearWindowTilemap(PSS_LABEL_WINDOW_PROMPT_SWITCH);
PutWindowTilemap(PSS_LABEL_WINDOW_PROMPT_INFO);
PrintMoveDetails(0);
@@ -1998,9 +1998,9 @@ static void CloseMoveSelectMode(u8 taskId)
HandlePowerAccTilemap(0, 3);
HandleAppealJamTilemap(0, 3, 0);
}
- schedule_bg_copy_tilemap_to_vram(0);
- schedule_bg_copy_tilemap_to_vram(1);
- schedule_bg_copy_tilemap_to_vram(2);
+ ScheduleBgCopyTilemapToVram(0);
+ ScheduleBgCopyTilemapToVram(1);
+ ScheduleBgCopyTilemapToVram(2);
gTasks[taskId].func = Task_HandleInput;
}
@@ -2016,7 +2016,7 @@ static void Task_HandleInput_MovePositionSwitch(u8 taskId)
{
s16* data = gTasks[taskId].data;
- if (sub_81221EC() != TRUE)
+ if (MenuHelpers_CallLinkSomething() != TRUE)
{
if (gMain.newKeys & DPAD_UP)
{
@@ -2071,8 +2071,8 @@ static void ExitMovePositionSwitchMode(u8 taskId, bool8 swapMoves)
move = sMonSummaryScreen->summary.moves[sMonSummaryScreen->firstMoveIndex];
PrintMoveDetails(move);
DrawContestMoveHearts(move);
- schedule_bg_copy_tilemap_to_vram(1);
- schedule_bg_copy_tilemap_to_vram(2);
+ ScheduleBgCopyTilemapToVram(1);
+ ScheduleBgCopyTilemapToVram(2);
gTasks[taskId].func = Task_HandleInput_MoveSelect;
}
@@ -2157,7 +2157,7 @@ static void Task_HandleReplaceMoveInput(u8 taskId)
{
s16* data = gTasks[taskId].data;
- if (sub_81221EC() != TRUE)
+ if (MenuHelpers_CallLinkSomething() != TRUE)
{
if (gPaletteFade.active != TRUE)
{
@@ -2191,7 +2191,7 @@ static void Task_HandleReplaceMoveInput(u8 taskId)
}
else
{
- PlaySE(SE_HAZURE);
+ PlaySE(SE_FAILURE);
ShowCantForgetHMsWindow(taskId);
}
}
@@ -2221,7 +2221,7 @@ static void ShowCantForgetHMsWindow(u8 taskId)
{
ClearWindowTilemap(PSS_LABEL_WINDOW_MOVES_POWER_ACC);
ClearWindowTilemap(PSS_LABEL_WINDOW_MOVES_APPEAL_JAM);
- schedule_bg_copy_tilemap_to_vram(0);
+ ScheduleBgCopyTilemapToVram(0);
HandlePowerAccTilemap(0, 3);
HandleAppealJamTilemap(0, 3, 0);
PrintHMMovesCantBeForgotten();
@@ -2286,7 +2286,7 @@ static void Task_HandleInputCantForgetHMsMoves(u8 taskId)
ClearWindowTilemap(PSS_LABEL_WINDOW_POKEMON_SKILLS_STATUS);
move = sMonSummaryScreen->summary.moves[sMonSummaryScreen->firstMoveIndex];
PrintMoveDetails(move);
- schedule_bg_copy_tilemap_to_vram(0);
+ ScheduleBgCopyTilemapToVram(0);
HandlePowerAccTilemap(9, -3);
HandleAppealJamTilemap(9, -3, move);
gTasks[taskId].func = Task_HandleReplaceMoveInput;
@@ -2362,7 +2362,7 @@ static void DrawPagination(void) // Updates the pagination dots at the top of th
}
}
CopyToBgTilemapBufferRect_ChangePalette(3, alloced, 11, 0, 8, 2, 16);
- schedule_bg_copy_tilemap_to_vram(3);
+ ScheduleBgCopyTilemapToVram(3);
Free(alloced);
}
@@ -2435,11 +2435,11 @@ static void Task_ShowPowerAccWindow(u8 taskId)
PutWindowTilemap(PSS_LABEL_WINDOW_POKEMON_SKILLS_STATUS);
PutWindowTilemap(PSS_LABEL_WINDOW_PORTRAIT_SPECIES);
}
- schedule_bg_copy_tilemap_to_vram(0);
+ ScheduleBgCopyTilemapToVram(0);
DestroyTask(taskId);
}
- schedule_bg_copy_tilemap_to_vram(1);
- schedule_bg_copy_tilemap_to_vram(2);
+ ScheduleBgCopyTilemapToVram(1);
+ ScheduleBgCopyTilemapToVram(2);
}
static void HandleAppealJamTilemap(u16 a, s16 b, u16 move)
@@ -2491,11 +2491,11 @@ static void Task_ShowAppealJamWindow(u8 taskId)
}
PutWindowTilemap(PSS_LABEL_WINDOW_PORTRAIT_SPECIES);
}
- schedule_bg_copy_tilemap_to_vram(0);
+ ScheduleBgCopyTilemapToVram(0);
DestroyTask(taskId);
}
- schedule_bg_copy_tilemap_to_vram(1);
- schedule_bg_copy_tilemap_to_vram(2);
+ ScheduleBgCopyTilemapToVram(1);
+ ScheduleBgCopyTilemapToVram(2);
}
static void HandleStatusTilemap(u16 a, s16 b)
@@ -2525,14 +2525,14 @@ static void Task_ShowStatusWindow(u8 taskId)
data[1] = sStatusTilemapCtrl1.field_6;
ChangeTilemap(&sStatusTilemapCtrl1, sMonSummaryScreen->bgTilemapBuffers[PSS_PAGE_INFO][0], data[1], FALSE);
ChangeTilemap(&sStatusTilemapCtrl2, sMonSummaryScreen->bgTilemapBuffers[PSS_PAGE_INFO][0], data[1], FALSE);
- schedule_bg_copy_tilemap_to_vram(3);
+ ScheduleBgCopyTilemapToVram(3);
if (data[1] <= 0 || data[1] >= sStatusTilemapCtrl1.field_6)
{
if (data[0] < 0)
{
CreateSetStatusSprite();
PutWindowTilemap(PSS_LABEL_WINDOW_POKEMON_SKILLS_STATUS);
- schedule_bg_copy_tilemap_to_vram(0);
+ ScheduleBgCopyTilemapToVram(0);
}
DestroyTask(taskId);
}
@@ -2576,7 +2576,7 @@ static void DrawPokerusCuredSymbol(struct Pokemon *mon) // This checks if the mo
sMonSummaryScreen->bgTilemapBuffers[PSS_PAGE_INFO][0][0x223] = 0x81A;
sMonSummaryScreen->bgTilemapBuffers[PSS_PAGE_INFO][1][0x223] = 0x81A;
}
- schedule_bg_copy_tilemap_to_vram(3);
+ ScheduleBgCopyTilemapToVram(3);
}
static void SetDexNumberColor(bool8 isMonShiny)
@@ -2585,7 +2585,7 @@ static void SetDexNumberColor(bool8 isMonShiny)
SetBgTilemapPalette(3, 1, 4, 8, 8, 0);
else
SetBgTilemapPalette(3, 1, 4, 8, 8, 5);
- schedule_bg_copy_tilemap_to_vram(3);
+ ScheduleBgCopyTilemapToVram(3);
}
static void DrawExperienceProgressBar(struct Pokemon *unused)
@@ -2625,9 +2625,9 @@ static void DrawExperienceProgressBar(struct Pokemon *unused)
}
if (GetBgTilemapBuffer(1) == sMonSummaryScreen->bgTilemapBuffers[PSS_PAGE_SKILLS][0])
- schedule_bg_copy_tilemap_to_vram(1);
+ ScheduleBgCopyTilemapToVram(1);
else
- schedule_bg_copy_tilemap_to_vram(2);
+ ScheduleBgCopyTilemapToVram(2);
}
static void DrawContestMoveHearts(u16 move)
@@ -2678,14 +2678,10 @@ static void ResetWindows(void)
InitWindows(sSummaryTemplate);
DeactivateAllTextPrinters();
- for (i = 0; i < 20; i++)
- {
+ for (i = 0; i < PSS_LABEL_WINDOW_END; i++)
FillWindowPixelBuffer(i, PIXEL_FILL(0));
- }
for (i = 0; i < ARRAY_COUNT(sMonSummaryScreen->windowIds); i++)
- {
sMonSummaryScreen->windowIds[i] = 0xFF;
- }
}
static void PrintTextOnWindow(u8 windowId, const u8 *string, u8 x, u8 y, u8 lineSpacing, u8 colorId)
@@ -2702,7 +2698,7 @@ static void PrintMonInfo(void)
PrintNotEggInfo();
else
PrintEggInfo();
- schedule_bg_copy_tilemap_to_vram(0);
+ ScheduleBgCopyTilemapToVram(0);
}
static void PrintNotEggInfo(void)
@@ -2890,7 +2886,7 @@ static void PutPageWindowTilemaps(u8 page)
for (i = 0; i < ARRAY_COUNT(sMonSummaryScreen->windowIds); i++)
PutWindowTilemap(sMonSummaryScreen->windowIds[i]);
- schedule_bg_copy_tilemap_to_vram(0);
+ ScheduleBgCopyTilemapToVram(0);
}
static void ClearPageWindowTilemaps(u8 page)
@@ -2937,7 +2933,7 @@ static void ClearPageWindowTilemaps(u8 page)
for (i = 0; i < ARRAY_COUNT(sMonSummaryScreen->windowIds); i++)
RemoveWindowByIndex(i);
- schedule_bg_copy_tilemap_to_vram(0);
+ ScheduleBgCopyTilemapToVram(0);
}
static u8 AddWindowFromTemplateList(const struct WindowTemplate *template, u8 templateId)
@@ -3299,7 +3295,7 @@ static void Task_PrintSkillsPage(u8 taskId)
static void PrintHeldItemName(void)
{
const u8 *text;
- int offset;
+ int x;
if (sMonSummaryScreen->summary.item == ITEM_ENIGMA_BERRY
&& IsMultiBattle() == TRUE
@@ -3317,14 +3313,14 @@ static void PrintHeldItemName(void)
text = gStringVar1;
}
- offset = GetStringCenterAlignXOffset(1, text, 72) + 6;
- PrintTextOnWindow(AddWindowFromTemplateList(sPageSkillsTemplate, PSS_DATA_WINDOW_SKILLS_HELD_ITEM), text, offset, 1, 0, 0);
+ x = GetStringCenterAlignXOffset(1, text, 72) + 6;
+ PrintTextOnWindow(AddWindowFromTemplateList(sPageSkillsTemplate, PSS_DATA_WINDOW_SKILLS_HELD_ITEM), text, x, 1, 0, 0);
}
static void PrintRibbonCount(void)
{
const u8 *text;
- int offset;
+ int x;
if (sMonSummaryScreen->summary.ribbonCount == 0)
{
@@ -3337,8 +3333,8 @@ static void PrintRibbonCount(void)
text = gStringVar4;
}
- offset = GetStringCenterAlignXOffset(1, text, 70) + 6;
- PrintTextOnWindow(AddWindowFromTemplateList(sPageSkillsTemplate, PSS_DATA_WINDOW_SKILLS_RIBBON_COUNT), text, offset, 1, 0, 0);
+ x = GetStringCenterAlignXOffset(1, text, 70) + 6;
+ PrintTextOnWindow(AddWindowFromTemplateList(sPageSkillsTemplate, PSS_DATA_WINDOW_SKILLS_RIBBON_COUNT), text, x, 1, 0, 0);
}
static void BufferLeftColumnStats(void)
@@ -3633,7 +3629,7 @@ static void PrintMoveDetails(u16 move)
ClearWindowTilemap(windowId);
}
- schedule_bg_copy_tilemap_to_vram(0);
+ ScheduleBgCopyTilemapToVram(0);
}
static void PrintNewMoveDetailsOrCancelText(void)
@@ -3716,7 +3712,7 @@ static void SetSpriteInvisibility(u8 spriteArrayId, bool8 invisible)
static void HidePageSpecificSprites(void)
{
- // Keeps Pokmon, caught ball and status sprites visible.
+ // Keeps Pok�mon, caught ball and status sprites visible.
u8 i;
for (i = SPRITE_ARR_ID_TYPE; i < ARRAY_COUNT(sMonSummaryScreen->spriteIds); i++)
@@ -3799,7 +3795,7 @@ static void SetMoveTypeIcons(void)
if (summary->moves[i] != MOVE_NONE)
SetTypeSpritePosAndPal(gBattleMoves[summary->moves[i]].type, 85, 32 + (i * 16), i + SPRITE_ARR_ID_TYPE);
else
- SetSpriteInvisibility(i + 3, TRUE);
+ SetSpriteInvisibility(i + SPRITE_ARR_ID_TYPE, TRUE);
}
}
@@ -3812,7 +3808,7 @@ static void SetContestMoveTypeIcons(void)
if (summary->moves[i] != MOVE_NONE)
SetTypeSpritePosAndPal(NUMBER_OF_MON_TYPES + gContestMoves[summary->moves[i]].contestCategory, 85, 32 + (i * 16), i + SPRITE_ARR_ID_TYPE);
else
- SetSpriteInvisibility(i + 3, TRUE);
+ SetSpriteInvisibility(i + SPRITE_ARR_ID_TYPE, TRUE);
}
}
@@ -3938,9 +3934,9 @@ static void SpriteCB_Pokemon(struct Sprite *sprite)
}
}
-void SummaryScreen_SetUnknownTaskId(u8 a0)
+void SummaryScreen_SetUnknownTaskId(u8 taskId)
{
- sUnknownTaskId = a0;
+ sUnknownTaskId = taskId;
}
void SummaryScreen_DestroyUnknownTask(void)
@@ -4041,7 +4037,7 @@ static void CreateMoveSelectorSprites(u8 idArrayStart)
if (idArrayStart == SPRITE_ARR_ID_MOVE_SELECTOR1)
subpriority = 1;
- for (i = 0; i < 10; i++)
+ for (i = 0; i < MOVE_SELECTOR_SPRITES_COUNT; i++)
{
spriteIds[i] = CreateSprite(&sMoveSelectorSpriteTemplate, i * 16 + 89, 40, subpriority);
if (i == 0)
@@ -4104,7 +4100,7 @@ static void SetMainMoveSelectorColor(u8 which)
}
}
-static void MakeMoveSelectorVisible(u8 firstSpriteId)
+static void KeepMoveSelectorVisible(u8 firstSpriteId)
{
u8 i;
u8 *spriteIds = &sMonSummaryScreen->spriteIds[firstSpriteId];
diff --git a/src/pokenav.c b/src/pokenav.c
index 8ea33575a..30dc001c3 100644
--- a/src/pokenav.c
+++ b/src/pokenav.c
@@ -317,7 +317,7 @@ static void Task_RunLoopedTask_LinkMode(u8 taskId)
void CB2_InitPokeNav(void)
{
- gPokenavResources = Alloc(sizeof(*gPokenavResources));
+ gPokenavResources = Alloc(sizeof(struct PokenavResources));
if (gPokenavResources == NULL)
{
SetMainCallback2(CB2_ReturnToFieldWithOpenMenu);
@@ -345,7 +345,7 @@ static void CB2_InitPokenavForTutorial(void)
if (gPaletteFade.active)
return;
- gPokenavResources = Alloc(sizeof(*gPokenavResources));
+ gPokenavResources = Alloc(sizeof(struct PokenavResources));
if (gPokenavResources == NULL)
{
SetMainCallback2(CB2_ReturnToFieldContinueScriptPlayMapMusic);
diff --git a/src/pokenav_conditions_1.c b/src/pokenav_conditions_1.c
index 84e2a9682..1c7573a44 100644
--- a/src/pokenav_conditions_1.c
+++ b/src/pokenav_conditions_1.c
@@ -25,7 +25,7 @@ struct PokenavSub11
u8 fill2[0x6320 - 0x6308];
u8 unk6320[3][24];
u8 unk6368[3][64];
- struct UnknownStruct_81D1ED4 unk6428;
+ struct ConditionGraph unk6428;
u8 unk6780[3];
u8 unk6783[3];
s8 unk6786;
@@ -337,10 +337,10 @@ u8 *sub_81CD624(u8 *str, u16 id, bool8 arg3)
boxId = unkPtr->unk4[id].boxId;
monId = unkPtr->unk4[id].monId;
*(str++) = EXT_CTRL_CODE_BEGIN;
- *(str++) = 4;
- *(str++) = 8;
- *(str++) = 0;
- *(str++) = 9;
+ *(str++) = EXT_CTRL_CODE_COLOR_HIGHLIGHT_SHADOW;
+ *(str++) = TEXT_COLOR_BLUE;
+ *(str++) = TEXT_COLOR_TRANSPARENT;
+ *(str++) = TEXT_COLOR_LIGHT_BLUE;
if (GetBoxOrPartyMonData(boxId, monId, MON_DATA_IS_EGG, NULL))
return StringCopyPadded(str, gText_EggNickname, CHAR_SPACE, 12);
@@ -368,40 +368,40 @@ u8 *sub_81CD624(u8 *str, u16 id, bool8 arg3)
(str_++);
*(str_++) = EXT_CTRL_CODE_BEGIN;
- *(str_++) = 0x12;
- *(str_++) = 0x3C;
+ *(str_++) = EXT_CTRL_CODE_SKIP;
+ *(str_++) = 60;
switch (gender)
{
default:
- *(str_++) = 0x77;
+ *(str_++) = CHAR_UNK_SPACER;
break;
case MON_MALE:
*(str_++) = EXT_CTRL_CODE_BEGIN;
*(str_++) = EXT_CTRL_CODE_COLOR;
- *(str_++) = 4;
+ *(str_++) = TEXT_COLOR_RED;
*(str_++) = EXT_CTRL_CODE_BEGIN;
- *(str_++) = 3;
- *(str_++) = 5;
+ *(str_++) = EXT_CTRL_CODE_SHADOW;
+ *(str_++) = TEXT_COLOR_LIGHT_RED;
*(str_++) = CHAR_MALE;
break;
case MON_FEMALE:
*(str_++) = EXT_CTRL_CODE_BEGIN;
*(str_++) = EXT_CTRL_CODE_COLOR;
- *(str_++) = 6;
+ *(str_++) = TEXT_COLOR_GREEN;
*(str_++) = EXT_CTRL_CODE_BEGIN;
- *(str_++) = 3;
- *(str_++) = 7;
+ *(str_++) = EXT_CTRL_CODE_SHADOW;
+ *(str_++) = TEXT_COLOR_LIGHT_GREEN;
*(str_++) = CHAR_FEMALE;
break;
}
*(str_++) = EXT_CTRL_CODE_BEGIN;
- *(str_++) = 4;
- *(str_++) = 8;
- *(str_++) = 0;
- *(str_++) = 9;
+ *(str_++) = EXT_CTRL_CODE_COLOR_HIGHLIGHT_SHADOW;
+ *(str_++) = TEXT_COLOR_BLUE;
+ *(str_++) = TEXT_COLOR_TRANSPARENT;
+ *(str_++) = TEXT_COLOR_LIGHT_BLUE;
*(str_++) = CHAR_SLASH;
- *(str_++) = CHAR_SPECIAL_F9;
+ *(str_++) = CHAR_EXTRA_SYMBOL;
*(str_++) = CHAR_LV_2;
txtPtr = str_;
str_ = ConvertIntToDecimalStringN(str_, level, STR_CONV_MODE_LEFT_ALIGN, 3);
@@ -429,10 +429,10 @@ void sub_81CD824(s16 arg0, u8 arg1)
sub_81CD624(structPtr->unk6368[arg1], arg0, FALSE);
boxId = unkPtr->unk4[arg0].boxId;
structPtr->unk6320[arg1][0] = EXT_CTRL_CODE_BEGIN;
- structPtr->unk6320[arg1][1] = 4;
- structPtr->unk6320[arg1][2] = 8;
- structPtr->unk6320[arg1][3] = 0;
- structPtr->unk6320[arg1][4] = 9;
+ structPtr->unk6320[arg1][1] = EXT_CTRL_CODE_COLOR_HIGHLIGHT_SHADOW;
+ structPtr->unk6320[arg1][2] = TEXT_COLOR_BLUE;
+ structPtr->unk6320[arg1][3] = TEXT_COLOR_TRANSPARENT;
+ structPtr->unk6320[arg1][4] = TEXT_COLOR_LIGHT_BLUE;
if (boxId == TOTAL_BOXES_COUNT)
sub_81CD5CC(&structPtr->unk6320[arg1][5], gText_InParty, 8);
else
@@ -546,7 +546,7 @@ u16 sub_81CDC60(void)
return unkPtr->unk2;
}
-struct UnknownStruct_81D1ED4 *sub_81CDC70(void)
+struct ConditionGraph *sub_81CDC70(void)
{
struct PokenavSub11 *structPtr = GetSubstructPtr(11);
return &structPtr->unk6428;
diff --git a/src/pokenav_conditions_2.c b/src/pokenav_conditions_2.c
index ed253f90f..7c536cd6a 100644
--- a/src/pokenav_conditions_2.c
+++ b/src/pokenav_conditions_2.c
@@ -24,8 +24,8 @@ u32 sub_81CE700(s32);
BSS_DATA u8 gUnknown_030012BC;
-const u16 gUnknown_086231E8[] = INCBIN_U16("graphics/pokenav/86231E8.gbapal");
-const u16 gUnknown_08623208[] = INCBIN_U16("graphics/pokenav/8623208.gbapal");
+const u16 gConditionGraphData_Pal[] = INCBIN_U16("graphics/pokenav/condition/graph_data.gbapal");
+const u16 gConditionText_Pal[] = INCBIN_U16("graphics/pokenav/condition/text.gbapal");
const u32 gUnknown_08623228[] = INCBIN_U32("graphics/pokenav/8623228.4bpp.lz");
const u32 gUnknown_0862323C[] = INCBIN_U32("graphics/pokenav/862323C.bin.lz");
const u16 gUnknown_08623338[] = INCBIN_U16("graphics/pokenav/8623338.gbapal");
@@ -134,7 +134,7 @@ struct Pokenav7Struct
u8 unk1823;
struct PokemonMarkMenu monMarks;
struct Sprite *unk28dc;
- struct Sprite *unk28e0[10];
+ struct Sprite *unk28e0[MAX_CONDITION_SPARKLES];
u8 unk2908;
u8 filler2[0x38ac - 0x2909];
};
@@ -208,15 +208,15 @@ u32 sub_81CDE94(s32 state)
SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_WIN0_ON | DISPCNT_WIN1_ON | DISPCNT_OBJ_ON | DISPCNT_OBJ_1D_MAP | DISPCNT_BG0_ON | DISPCNT_BG3_ON);
SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT1_BG2 | BLDCNT_EFFECT_BLEND | BLDCNT_TGT2_BG3);
SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(11, 4));
- decompress_and_copy_tile_data_to_vram(3, gPokenavCondition_Gfx, 0, 0, 0);
+ DecompressAndCopyTileDataToVram(3, gPokenavCondition_Gfx, 0, 0, 0);
return LT_INC_AND_PAUSE;
case 2:
- if (free_temp_tile_data_buffers_if_possible())
+ if (FreeTempTileDataBuffersIfPossible())
return LT_PAUSE;
- decompress_and_copy_tile_data_to_vram(2, gUnknown_08623228, 0, 0, 0);
+ DecompressAndCopyTileDataToVram(2, gUnknown_08623228, 0, 0, 0);
return LT_INC_AND_PAUSE;
case 3:
- if (free_temp_tile_data_buffers_if_possible())
+ if (FreeTempTileDataBuffersIfPossible())
return LT_PAUSE;
LZ77UnCompVram(gPokenavCondition_Tilemap, structPtr->tilemapBuffers[0]);
@@ -226,17 +226,17 @@ u32 sub_81CDE94(s32 state)
CopyBgTilemapBufferToVram(3);
CopyPaletteIntoBufferUnfaded(gPokenavCondition_Pal, 0x10, 0x20);
- CopyPaletteIntoBufferUnfaded(gUnknown_08623208, 0xF0, 0x20);
+ CopyPaletteIntoBufferUnfaded(gConditionText_Pal, 0xF0, 0x20);
structPtr->unk1814 = -80;
return LT_INC_AND_PAUSE;
case 4:
- if (free_temp_tile_data_buffers_if_possible())
+ if (FreeTempTileDataBuffersIfPossible())
return LT_PAUSE;
LZ77UnCompVram(gUnknown_0862323C, structPtr->tilemapBuffers[2]);
SetBgTilemapBuffer(2, structPtr->tilemapBuffers[2]);
CopyBgTilemapBufferToVram(2);
- CopyPaletteIntoBufferUnfaded(gUnknown_086231E8, 0x30, 0x20);
+ CopyPaletteIntoBufferUnfaded(gConditionGraphData_Pal, 0x30, 0x20);
sub_81D21DC(2);
return LT_INC_AND_PAUSE;
case 5:
@@ -246,7 +246,7 @@ u32 sub_81CDE94(s32 state)
SetBgTilemapBuffer(1, structPtr->tilemapBuffers[1]);
return LT_INC_AND_PAUSE;
case 6:
- if (free_temp_tile_data_buffers_if_possible())
+ if (FreeTempTileDataBuffersIfPossible())
return LT_PAUSE;
structPtr->unk1820 = AddWindow(&gUnknown_08623364);
@@ -323,11 +323,11 @@ u32 sub_81CDE94(s32 state)
sub_81CEE74(TRUE);
return LT_INC_AND_PAUSE;
case 20:
- if (!sub_81D3178(sub_81CDC70(), &structPtr->unk1814))
+ if (!TryUpdateConditionMonTransitionOn(sub_81CDC70(), &structPtr->unk1814))
{
- sub_81D3464(structPtr->unk28e0);
+ ResetConditionSparkleSprites(structPtr->unk28e0);
if (sub_81CDD5C() == TRUE || sub_81CDC60() != sub_81CDC50())
- sub_81D3480(structPtr->unk28e0, structPtr->unk1816, sub_81CDDB0());
+ CreateConditionSparkleSprites(structPtr->unk28e0, structPtr->unk1816, sub_81CDDB0());
return LT_FINISH;
}
@@ -345,10 +345,10 @@ u32 sub_81CE2D0(s32 state)
{
case 0:
sub_81CEEC8();
- sub_81D3520(structPtr->unk28e0);
+ DestroyConditionSparkleSprites(structPtr->unk28e0);
return 1;
case 1:
- if (sub_81D31A4(sub_81CDC70(), &structPtr->unk1814))
+ if (TryUpdateConditionMonTransitionOff(sub_81CDC70(), &structPtr->unk1814))
return 2;
sub_81CEE74(FALSE);
return 1;
@@ -360,7 +360,7 @@ u32 sub_81CE2D0(s32 state)
case 3:
if (IsPaletteFadeActive() || MainMenuLoopedTaskIsBusy())
return 2;
- sub_81D354C(structPtr->unk28e0);
+ FreeConditionSparkles(structPtr->unk28e0);
HideBg(1);
HideBg(2);
HideBg(3);
@@ -373,7 +373,7 @@ u32 sub_81CE2D0(s32 state)
u32 sub_81CE37C(s32 state)
{
struct Pokenav7Struct *structPtr = GetSubstructPtr(0xC);
- struct UnknownStruct_81D1ED4 *unkPtr = sub_81CDC70();
+ struct ConditionGraph *unkPtr = sub_81CDC70();
switch (state)
{
@@ -385,13 +385,13 @@ u32 sub_81CE37C(s32 state)
return 1;
case 2:
sub_81CD548(2);
- sub_81D3520(structPtr->unk28e0);
+ DestroyConditionSparkleSprites(structPtr->unk28e0);
return 1;
case 3:
- sub_81D2074(unkPtr);
+ TransitionConditionGraph(unkPtr);
return 1;
case 4:
- if (!sub_81D3150(&structPtr->unk1814))
+ if (!MoveConditionMonOffscreen(&structPtr->unk1814))
{
sub_81CED30(sub_81CDC84());
return 1;
@@ -412,13 +412,13 @@ u32 sub_81CE37C(s32 state)
return 2;
case 9:
unkPtr = sub_81CDC70();
- if (!sub_81D3178(unkPtr, &structPtr->unk1814))
+ if (!TryUpdateConditionMonTransitionOn(unkPtr, &structPtr->unk1814))
{
- sub_81D3464(structPtr->unk28e0);
+ ResetConditionSparkleSprites(structPtr->unk28e0);
if (sub_81CDD5C() != TRUE && sub_81CDC60() == sub_81CDC50())
return 1;
- sub_81D3480(structPtr->unk28e0, structPtr->unk1816, sub_81CDDB0());
+ CreateConditionSparkleSprites(structPtr->unk28e0, structPtr->unk1816, sub_81CDDB0());
return 1;
}
return 2;
@@ -459,10 +459,10 @@ u32 sub_81CE4D8(s32 state)
return 1;
return 2;
case 8:
- if (!sub_81D3178(sub_81CDC70(), &structPtr->unk1814))
+ if (!TryUpdateConditionMonTransitionOn(sub_81CDC70(), &structPtr->unk1814))
{
- sub_81D3464(structPtr->unk28e0);
- sub_81D3480(structPtr->unk28e0, structPtr->unk1816, sub_81CDDB0());
+ ResetConditionSparkleSprites(structPtr->unk28e0);
+ CreateConditionSparkleSprites(structPtr->unk28e0, structPtr->unk1816, sub_81CDDB0());
return 1;
}
return 2;
@@ -485,10 +485,10 @@ u32 sub_81CE5E4(s32 state)
return 1;
case 2:
sub_81CD548(2);
- sub_81D3520(structPtr->unk28e0);
+ DestroyConditionSparkleSprites(structPtr->unk28e0);
return 1;
case 3:
- if (!sub_81D31A4(sub_81CDC70(), &structPtr->unk1814))
+ if (!TryUpdateConditionMonTransitionOff(sub_81CDC70(), &structPtr->unk1814))
return 1;
return 2;
case 4:
@@ -581,10 +581,10 @@ bool32 sub_81CE754(u8 a0, u16 a1, bool8 a2)
str = sub_81CDD24(a1);
AddTextPrinterParameterized(structPtr->unk1820, 1, str, 0, 17, 0, NULL);
text[0] = EXT_CTRL_CODE_BEGIN;
- text[1] = 4;
- text[2] = 8;
- text[3] = 0;
- text[4] = 9;
+ text[1] = EXT_CTRL_CODE_COLOR_HIGHLIGHT_SHADOW;
+ text[2] = TEXT_COLOR_BLUE;
+ text[3] = TEXT_COLOR_TRANSPARENT;
+ text[4] = TEXT_COLOR_LIGHT_BLUE;
StringCopy(text + 5, gText_Number2);
AddTextPrinterParameterized(structPtr->unk1821, 1, text, 4, 1, 0, NULL);
ConvertIntToDecimalStringN(text + 5, sub_81CDD48(), STR_CONV_MODE_RIGHT_ALIGN, 4);
@@ -663,7 +663,7 @@ void sub_81CE9E4(void)
u16 i, spriteId;
struct Pokenav7Struct *structPtr = GetSubstructPtr(0xC);
- sub_81D321C(sprSheets, &sprTemplate, sprPals);
+ LoadConditionSelectionIcons(sprSheets, &sprTemplate, sprPals);
if (sub_81CDD5C() == TRUE)
{
structPtr->monMarks.baseTileTag = 0x6A;
@@ -728,7 +728,7 @@ void sub_81CE9E4(void)
}
}
- sub_81D32B0(&sprSheet, &sprPals[0]);
+ LoadConditionSparkle(&sprSheet, &sprPals[0]);
LoadSpriteSheet(&sprSheet);
sprPals[1].data = NULL;
Pokenav_AllocAndLoadPalettes(sprPals);
@@ -804,7 +804,7 @@ void sub_81CED30(u8 var)
if (structPtr->unk1816 == 0xFF)
{
- sub_81D31D0(&sprSheet, &sprTemplate, &sprPal);
+ LoadConditionMonPicTemplate(&sprSheet, &sprTemplate, &sprPal);
sprSheet.data = sub_81CDCB4(var);
sprPal.data = sub_81CDCD4(var);
structPtr->unk1818 = LoadSpritePalette(&sprPal);
@@ -834,7 +834,7 @@ void sub_81CED30(u8 var)
void sub_81CEE44(void)
{
- struct UnknownStruct_81D1ED4 *unk = sub_81CDC70();
+ struct ConditionGraph *unk = sub_81CDC70();
LoadOam();
ProcessSpriteCopyRequests();
TransferPlttBuffer();
@@ -857,17 +857,17 @@ void sub_81CEE74(bool8 showBg)
void sub_81CEE90(void)
{
- struct UnknownStruct_81D1ED4 *unk = sub_81CDC70();
+ struct ConditionGraph *unk = sub_81CDC70();
u8 id = sub_81CDC84();
gUnknown_030012BC = id;
sub_81D1F84(unk, unk->unk14[3], unk->unk14[id]);
- sub_81D2074(unk);
+ TransitionConditionGraph(unk);
}
void sub_81CEEC8(void)
{
- struct UnknownStruct_81D1ED4 *unk = sub_81CDC70();
+ struct ConditionGraph *unk = sub_81CDC70();
if (sub_81CDD5C() || sub_81CDC60() != sub_81CDC50() - 1)
sub_81D1F84(unk, unk->unk14[sub_81CDC84()], unk->unk14[3]);
diff --git a/src/pokenav_conditions_3.c b/src/pokenav_conditions_3.c
index 74bc3cc9d..eea4aa397 100644
--- a/src/pokenav_conditions_3.c
+++ b/src/pokenav_conditions_3.c
@@ -408,7 +408,7 @@ static u32 sub_81CF418(s32 state)
{
case 0:
InitBgTemplates(gUnknown_08623590, NELEMS(gUnknown_08623590));
- decompress_and_copy_tile_data_to_vram(1, gUnknown_086233E4, 0, 0, 0);
+ DecompressAndCopyTileDataToVram(1, gUnknown_086233E4, 0, 0, 0);
SetBgTilemapBuffer(1, unk->buff);
CopyToBgTilemapBuffer(1, gUnknown_086234AC, 0, 0);
CopyBgTilemapBufferToVram(1);
@@ -416,13 +416,13 @@ static u32 sub_81CF418(s32 state)
CopyBgTilemapBufferToVram(1);
return LT_INC_AND_PAUSE;
case 1:
- if (free_temp_tile_data_buffers_if_possible())
+ if (FreeTempTileDataBuffersIfPossible())
return LT_PAUSE;
if (!sub_81CF0C0())
return LT_PAUSE;
return LT_INC_AND_PAUSE;
case 2:
- if (free_temp_tile_data_buffers_if_possible())
+ if (FreeTempTileDataBuffersIfPossible())
return LT_PAUSE;
CopyPaletteIntoBufferUnfaded(gUnknown_08623570, 0x20, 0x20);
sub_81CF88C();
@@ -434,7 +434,7 @@ static u32 sub_81CF418(s32 state)
PrintHelpBarText(HELPBAR_CONDITION_MON_LIST);
return LT_INC_AND_PAUSE;
case 4:
- if (free_temp_tile_data_buffers_if_possible())
+ if (FreeTempTileDataBuffersIfPossible())
return LT_PAUSE;
ChangeBgX(1, 0, 0);
ChangeBgY(1, 0, 0);
@@ -707,7 +707,7 @@ static void sub_81CF8E4(struct PokenavMonList * item, u8 * dest)
}
s = StringCopy(gStringVar1, genderStr);
*s++ = CHAR_SLASH;
- *s++ = CHAR_SPECIAL_F9;
+ *s++ = CHAR_EXTRA_SYMBOL;
*s++ = CHAR_LV_2;
ConvertIntToDecimalStringN(s, level, STR_CONV_MODE_LEFT_ALIGN, 3);
sub_81DB494(dest, 1, gStringVar1, 40);
diff --git a/src/pokenav_main_menu.c b/src/pokenav_main_menu.c
index fdd27b087..0e2425d4e 100644
--- a/src/pokenav_main_menu.c
+++ b/src/pokenav_main_menu.c
@@ -293,7 +293,7 @@ static const struct SpriteTemplate sUnknown_0861FB44 =
bool32 InitPokenavMainMenu(void)
{
struct PokenavMainMenuResources *structPtr;
-
+
structPtr = AllocSubstruct(0, sizeof(struct PokenavMainMenuResources));
if (structPtr == NULL)
return FALSE;
@@ -312,7 +312,7 @@ u32 PokenavMainMenuLoopedTaskIsActive(void)
void ShutdownPokenav(void)
{
- PlaySE(SE_PN_OFF);
+ PlaySE(SE_POKENAV_OFF);
sub_81CAADC();
BeginNormalPaletteFade(0xFFFFFFFF, -1, 0, 16, RGB_BLACK);
}
@@ -342,18 +342,18 @@ static u32 LoopedTask_InitPokenavMenu(s32 a0)
ResetBgsAndClearDma3BusyFlags(0);
InitBgsFromTemplates(0, gPokenavMainMenuBgTemplates, ARRAY_COUNT(gPokenavMainMenuBgTemplates));
ResetBgPositions();
- reset_temp_tile_data_buffers();
+ ResetTempTileDataBuffers();
return LT_INC_AND_CONTINUE;
case 1:
structPtr = GetSubstructPtr(0);
- decompress_and_copy_tile_data_to_vram(0, &gPokenavHeader_Gfx, 0, 0, 0);
+ DecompressAndCopyTileDataToVram(0, &gPokenavHeader_Gfx, 0, 0, 0);
SetBgTilemapBuffer(0, structPtr->tilemapBuffer);
CopyToBgTilemapBuffer(0, &gPokenavHeader_Tilemap, 0, 0);
CopyPaletteIntoBufferUnfaded(gPokenavHeader_Pal, 0, 0x20);
CopyBgTilemapBufferToVram(0);
return LT_INC_AND_PAUSE;
case 2:
- if (free_temp_tile_data_buffers_if_possible())
+ if (FreeTempTileDataBuffersIfPossible())
return LT_PAUSE;
InitHelpBar();
@@ -474,8 +474,8 @@ void sub_81C7990(u32 a0, u16 a1)
NAKED
void sub_81C79BC(const u16 *a0, const u16 *a1, u32 a2, u32 a3, u32 a4, u16 *a5)
{
- asm(".syntax unified\n\
- push {r4-r7,lr}\n\
+ asm_unified(
+ "push {r4-r7,lr}\n\
mov r7, r10\n\
mov r6, r9\n\
mov r5, r8\n\
@@ -603,8 +603,7 @@ _081C7AAE:\n\
mov r10, r5\n\
pop {r4-r7}\n\
pop {r0}\n\
- bx r0\n\
- .syntax divided");
+ bx r0");
}
void PokenavFadeScreen(s32 fadeType)
diff --git a/src/pokenav_match_call_1.c b/src/pokenav_match_call_1.c
index ef1d5343f..265259394 100755
--- a/src/pokenav_match_call_1.c
+++ b/src/pokenav_match_call_1.c
@@ -12,7 +12,6 @@
#include "sound.h"
#include "string_util.h"
#include "strings.h"
-#include "constants/flags.h"
#include "constants/songs.h"
struct Pokenav3Struct
@@ -119,7 +118,7 @@ static u32 CB2_HandleMatchCallInput(struct Pokenav3Struct *state)
else
{
// Cant exit Match Call menu before calling Mr Stone during tutorial
- PlaySE(SE_HAZURE);
+ PlaySE(SE_FAILURE);
}
}
diff --git a/src/pokenav_match_call_2.c b/src/pokenav_match_call_2.c
index aa69c592f..60091577e 100755
--- a/src/pokenav_match_call_2.c
+++ b/src/pokenav_match_call_2.c
@@ -325,7 +325,7 @@ static u32 LoopedTask_OpenMatchCall(s32 taskState)
InitBgTemplates(gUnknown_0862278C, ARRAY_COUNT(gUnknown_0862278C));
ChangeBgX(2, 0, 0);
ChangeBgY(2, 0, 0);
- decompress_and_copy_tile_data_to_vram(2, sMatchCallUI_Gfx, 0, 0, 0);
+ DecompressAndCopyTileDataToVram(2, sMatchCallUI_Gfx, 0, 0, 0);
SetBgTilemapBuffer(2, state->unk1024);
CopyToBgTilemapBuffer(2, sMatchCallUI_Tilemap, 0, 0);
CopyBgTilemapBufferToVram(2);
@@ -333,7 +333,7 @@ static u32 LoopedTask_OpenMatchCall(s32 taskState)
CopyBgTilemapBufferToVram(2);
return LT_INC_AND_PAUSE;
case 1:
- if (free_temp_tile_data_buffers_if_possible())
+ if (FreeTempTileDataBuffersIfPossible())
return LT_PAUSE;
sub_8199DF0(1, 0, 0, 1);
@@ -343,16 +343,16 @@ static u32 LoopedTask_OpenMatchCall(s32 taskState)
CopyBgTilemapBufferToVram(1);
return LT_INC_AND_PAUSE;
case 2:
- if (free_temp_tile_data_buffers_if_possible())
+ if (FreeTempTileDataBuffersIfPossible())
return LT_PAUSE;
sub_81CC034(state);
- decompress_and_copy_tile_data_to_vram(3, gUnknown_08622760, 0, 0, 0);
+ DecompressAndCopyTileDataToVram(3, gUnknown_08622760, 0, 0, 0);
CopyPaletteIntoBufferUnfaded(gUnknown_08622700, 0x30, 0x20);
CopyPaletteIntoBufferUnfaded(gUnknown_08622720, 0x50, 0x20);
return LT_INC_AND_PAUSE;
case 3:
- if (free_temp_tile_data_buffers_if_possible() || !sub_81CAE28())
+ if (FreeTempTileDataBuffersIfPossible() || !sub_81CAE28())
return LT_PAUSE;
sub_81CBBB8();
@@ -601,7 +601,7 @@ u32 DoMatchCallMessage(s32 taskState)
return LT_PAUSE;
PrintCallingDots(state);
- PlaySE(SE_TOREEYE);
+ PlaySE(SE_POKENAV_CALL);
state->unkE = 0;
return LT_INC_AND_PAUSE;
case 2:
@@ -654,7 +654,7 @@ u32 sub_81CB888(s32 taskState)
{
case 0:
if (!state->unkE)
- PlaySE(SE_TOREOFF);
+ PlaySE(SE_POKENAV_HANG_UP);
PlaySE(SE_SELECT);
break;
diff --git a/src/pokenav_menu_handler_1.c b/src/pokenav_menu_handler_1.c
index bd33a21af..d8d8e1509 100644
--- a/src/pokenav_menu_handler_1.c
+++ b/src/pokenav_menu_handler_1.c
@@ -273,14 +273,14 @@ static u32 HandleMainMenuInputTutorial(struct Pokenav1Struct *state)
}
else
{
- PlaySE(SE_HAZURE);
+ PlaySE(SE_FAILURE);
return POKENAV_MENU_FUNC_NONE;
}
}
if (gMain.newKeys & B_BUTTON)
{
- PlaySE(SE_HAZURE);
+ PlaySE(SE_FAILURE);
return POKENAV_MENU_FUNC_NONE;
}
@@ -298,7 +298,7 @@ static u32 HandleMainMenuInputEndTutorial(struct Pokenav1Struct *state)
u32 menuItem = sMenuItems[state->menuType][state->cursorPos];
if (menuItem != POKENAV_MENUITEM_MATCH_CALL && menuItem != POKENAV_MENUITEM_SWITCH_OFF)
{
- PlaySE(SE_HAZURE);
+ PlaySE(SE_FAILURE);
return POKENAV_MENU_FUNC_NONE;
}
else if (menuItem == POKENAV_MENUITEM_MATCH_CALL)
diff --git a/src/pokenav_menu_handler_2.c b/src/pokenav_menu_handler_2.c
index 1dfbf3417..2be92013f 100644
--- a/src/pokenav_menu_handler_2.c
+++ b/src/pokenav_menu_handler_2.c
@@ -410,7 +410,7 @@ static u32 LoopedTask_OpenMenu(s32 state)
{
case 0:
InitBgTemplates(gUnknown_08620194, ARRAY_COUNT(gUnknown_08620194));
- decompress_and_copy_tile_data_to_vram(1, gPokenavMessageBox_Gfx, 0, 0, 0);
+ DecompressAndCopyTileDataToVram(1, gPokenavMessageBox_Gfx, 0, 0, 0);
SetBgTilemapBuffer(1, unk->bg1TilemapBuffer);
CopyToBgTilemapBuffer(1, gPokenavMessageBox_Tilemap, 0, 0);
CopyBgTilemapBufferToVram(1);
@@ -423,23 +423,23 @@ static u32 LoopedTask_OpenMenu(s32 state)
ChangeBgY(3, 0, 0);
return LT_INC_AND_PAUSE;
case 1:
- if (free_temp_tile_data_buffers_if_possible())
+ if (FreeTempTileDataBuffersIfPossible())
return LT_PAUSE;
- decompress_and_copy_tile_data_to_vram(2, gUnknown_0861FD6C, 0, 0, 0);
- decompress_and_copy_tile_data_to_vram(2, gUnknown_0861FFF4, 0, 0, 1);
+ DecompressAndCopyTileDataToVram(2, gUnknown_0861FD6C, 0, 0, 0);
+ DecompressAndCopyTileDataToVram(2, gUnknown_0861FFF4, 0, 0, 1);
CopyPaletteIntoBufferUnfaded(gUnknown_0861FD4C, 0x20, 0x20);
return LT_INC_AND_PAUSE;
case 2:
- if (free_temp_tile_data_buffers_if_possible())
+ if (FreeTempTileDataBuffersIfPossible())
return LT_PAUSE;
- decompress_and_copy_tile_data_to_vram(3, gUnknown_0861FC98, 0, 0, 0);
- decompress_and_copy_tile_data_to_vram(3, gUnknown_0861FCAC, 0, 0, 1);
+ DecompressAndCopyTileDataToVram(3, gUnknown_0861FC98, 0, 0, 0);
+ DecompressAndCopyTileDataToVram(3, gUnknown_0861FCAC, 0, 0, 1);
CopyPaletteIntoBufferUnfaded(gUnknown_0861FC78, 0x30, 0x20);
if (GetPokenavMenuType() == POKENAV_MENU_TYPE_CONDITION || GetPokenavMenuType() == POKENAV_MENU_TYPE_CONDITION_SEARCH)
sub_81CA850();
return LT_INC_AND_PAUSE;
case 3:
- if (free_temp_tile_data_buffers_if_possible())
+ if (FreeTempTileDataBuffersIfPossible())
return LT_PAUSE;
AddOptionDescriptionWindow();
sub_81CA7D4();
@@ -465,7 +465,7 @@ static u32 LoopedTask_OpenMenu(s32 state)
PokenavFadeScreen(1);
else
{
- PlaySE(SE_PN_ON);
+ PlaySE(SE_POKENAV_ON);
PokenavFadeScreen(3);
}
switch (GetPokenavMenuType())
@@ -675,7 +675,7 @@ static u32 LoopedTask_SelectRibbonsNoWinners(s32 state)
switch (state)
{
case 0:
- PlaySE(SE_HAZURE);
+ PlaySE(SE_FAILURE);
PrintNoRibbonWinners();
return LT_INC_AND_PAUSE;
case 1:
diff --git a/src/pokenav_region_map.c b/src/pokenav_region_map.c
index dff6b8c6c..e858fad4a 100755
--- a/src/pokenav_region_map.c
+++ b/src/pokenav_region_map.c
@@ -506,7 +506,7 @@ static void LoadPokenavRegionMapGfx(struct Pokenav5Struct_2 *state)
state->infoWindowId = AddWindow(&sMapSecInfoWindowTemplate);
LoadUserWindowBorderGfx_(state->infoWindowId, 0x42, 0x40);
DrawTextBorderOuter(state->infoWindowId, 0x42, 4);
- decompress_and_copy_tile_data_to_vram(1, sRegionMapCityZoomTiles_Gfx, 0, 0, 0);
+ DecompressAndCopyTileDataToVram(1, sRegionMapCityZoomTiles_Gfx, 0, 0, 0);
FillWindowPixelBuffer(state->infoWindowId, PIXEL_FILL(1));
PutWindowTilemap(state->infoWindowId);
CopyWindowToVram(state->infoWindowId, 3);
@@ -522,7 +522,7 @@ static void LoadPokenavRegionMapGfx(struct Pokenav5Struct_2 *state)
static bool32 TryFreeTempTileDataBuffers(void)
{
- return free_temp_tile_data_buffers_if_possible();
+ return FreeTempTileDataBuffersIfPossible();
}
static void UpdateMapSecInfoWindow(struct Pokenav5Struct_2 *state)
diff --git a/src/pokenav_ribbons_1.c b/src/pokenav_ribbons_1.c
index db3b7f08e..aad0053a8 100644
--- a/src/pokenav_ribbons_1.c
+++ b/src/pokenav_ribbons_1.c
@@ -414,14 +414,14 @@ static u32 sub_81CFEB8(s32 state)
{
case 0:
InitBgTemplates(gUnknown_086237B0, NELEMS(gUnknown_086237B0));
- decompress_and_copy_tile_data_to_vram(1, gUnknown_08623604, 0, 0, 0);
+ DecompressAndCopyTileDataToVram(1, gUnknown_08623604, 0, 0, 0);
SetBgTilemapBuffer(1, unk->buff);
CopyToBgTilemapBuffer(1, gUnknown_086236CC, 0, 0);
CopyPaletteIntoBufferUnfaded(gUnknown_086235E4, 0x10, 0x20);
CopyBgTilemapBufferToVram(1);
return LT_INC_AND_PAUSE;
case 1:
- if (free_temp_tile_data_buffers_if_possible())
+ if (FreeTempTileDataBuffersIfPossible())
return LT_PAUSE;
if (!sub_81CFB18())
return LT_PAUSE;
@@ -430,7 +430,7 @@ static u32 sub_81CFEB8(s32 state)
ShowBg(1);
return LT_INC_AND_PAUSE;
case 2:
- if (free_temp_tile_data_buffers_if_possible())
+ if (FreeTempTileDataBuffersIfPossible())
return LT_PAUSE;
CopyPaletteIntoBufferUnfaded(gUnknown_08623790, 0x20, 0x20);
sub_81D0304();
@@ -441,7 +441,7 @@ static u32 sub_81CFEB8(s32 state)
sub_81D024C(unk);
return LT_INC_AND_PAUSE;
case 4:
- if (free_temp_tile_data_buffers_if_possible())
+ if (FreeTempTileDataBuffersIfPossible())
return LT_PAUSE;
ShowBg(2);
HideBg(3);
@@ -724,7 +724,7 @@ static void BufferRibbonMonInfoText(struct PokenavMonList * item0, u8 * dest)
s = StringCopy(gStringVar1, genderStr);
*s++ = CHAR_SLASH;
- *s++ = CHAR_SPECIAL_F9;
+ *s++ = CHAR_EXTRA_SYMBOL;
*s++ = CHAR_LV_2;
ConvertIntToDecimalStringN(s, level, STR_CONV_MODE_LEFT_ALIGN, 3);
dest = sub_81DB494(dest, 1, gStringVar1, 54);
diff --git a/src/pokenav_ribbons_2.c b/src/pokenav_ribbons_2.c
index f27b664ea..e5a89acad 100644
--- a/src/pokenav_ribbons_2.c
+++ b/src/pokenav_ribbons_2.c
@@ -517,17 +517,17 @@ u32 sub_81D0A6C(s32 state)
{
case 0:
InitBgTemplates(gUnknown_08624B98, ARRAY_COUNT(gUnknown_08624B98));
- decompress_and_copy_tile_data_to_vram(2, gUnknown_08DDE030, 0, 0, 0);
+ DecompressAndCopyTileDataToVram(2, gUnknown_08DDE030, 0, 0, 0);
SetBgTilemapBuffer(2, structPtr->tilemapBuffers[0]);
CopyToBgTilemapBuffer(2, gUnknown_08DDE12C, 0, 0);
CopyPaletteIntoBufferUnfaded(gUnknown_08DDE010, 0x10, 0x20);
CopyBgTilemapBufferToVram(2);
return LT_INC_AND_PAUSE;
case 1:
- if (!free_temp_tile_data_buffers_if_possible())
+ if (!FreeTempTileDataBuffersIfPossible())
{
sub_8199DF0(1, 0, 0, 1);
- decompress_and_copy_tile_data_to_vram(1, sRibbonIconsSmall_Gfx, 0, 1, 0);
+ DecompressAndCopyTileDataToVram(1, sRibbonIconsSmall_Gfx, 0, 1, 0);
SetBgTilemapBuffer(1, structPtr->tilemapBuffers[1]);
FillBgTilemapBufferRect_Palette0(1, 0, 0, 0, 32, 20);
CopyPaletteIntoBufferUnfaded(gUnknown_08623FF8, 0x20, 0xA0);
@@ -537,21 +537,21 @@ u32 sub_81D0A6C(s32 state)
}
return LT_PAUSE;
case 2:
- if (!free_temp_tile_data_buffers_if_possible())
+ if (!FreeTempTileDataBuffersIfPossible())
{
sub_81D0E60(structPtr);
return LT_INC_AND_PAUSE;
}
return LT_PAUSE;
case 3:
- if (!free_temp_tile_data_buffers_if_possible())
+ if (!FreeTempTileDataBuffersIfPossible())
{
sub_81D0FCC(structPtr);
return LT_INC_AND_PAUSE;
}
return LT_PAUSE;
case 4:
- if (!free_temp_tile_data_buffers_if_possible())
+ if (!FreeTempTileDataBuffersIfPossible())
{
sub_81D10A4(structPtr);
return LT_INC_AND_PAUSE;
@@ -836,7 +836,7 @@ void sub_81D0FF0(struct PokenavSub14 *structPtr)
txtPtr = StringCopy(gStringVar1, genderTxt);
*(txtPtr++) = CHAR_SLASH;
- *(txtPtr++) = CHAR_SPECIAL_F9;
+ *(txtPtr++) = CHAR_EXTRA_SYMBOL;
*(txtPtr++) = CHAR_LV_2;
ConvertIntToDecimalStringN(txtPtr, level, STR_CONV_MODE_LEFT_ALIGN, 3);
AddTextPrinterParameterized(windowId, 1, gStringVar1, 60, 1, TEXT_SPEED_FF, NULL);
diff --git a/src/post_battle_event_funcs.c b/src/post_battle_event_funcs.c
index 4fa5d1b21..78ebe02e4 100644
--- a/src/post_battle_event_funcs.c
+++ b/src/post_battle_event_funcs.c
@@ -5,10 +5,9 @@
#include "hall_of_fame.h"
#include "load_save.h"
#include "overworld.h"
-#include "script_pokemon_util_80F87D8.h"
+#include "script_pokemon_util.h"
#include "tv.h"
#include "constants/heal_locations.h"
-#include "constants/flags.h"
#include "constants/tv.h"
int GameClear(void)
diff --git a/src/rayquaza_scene.c b/src/rayquaza_scene.c
index cef7f4cdd..063e6f324 100644
--- a/src/rayquaza_scene.c
+++ b/src/rayquaza_scene.c
@@ -18,87 +18,139 @@
#include "constants/rgb.h"
#include "random.h"
-struct RaySceneStruct
-{
- MainCallback callback;
- u8 tilemapBuffers[4][0x800];
- u16 field_2004; // set but unused
+/*
+ This file handles the cutscene showing Rayquaza arriving to settle the Groudon/Kyogre fight
+ It consists of 5 separate scenes:
+ - Groudon and Kyogre facing one another in a thunderstorm (RAY_ANIM_DUO_FIGHT)
+ - Over-the-shoulder of Rayquaza flying (RAY_ANIM_TAKES_FLIGHT)
+ - Rayquaza emerging from a spotlight down through the clouds (RAY_ANIM_DESCENDS)
+ - A close-up of Rayquaza flying down (RAY_ANIM_CHARGES)
+ - Rayquaza floating above Groudon/Kyogre as they back away offscreen (RAY_ANIM_CHASES_AWAY)
+
+ A shortened version of the first scene is used when the player first arrives
+ in Sootopolis during the Groudon/Kyogre conflict, before awakening Rayquaza (RAY_ANIM_DUO_FIGHT_PRE)
+ This is indicated with the first two arguments to DoRayquazaScene
+*/
+
+enum
+{
+ RAY_ANIM_DUO_FIGHT_PRE,
+ RAY_ANIM_DUO_FIGHT,
+ RAY_ANIM_TAKES_FLIGHT,
+ RAY_ANIM_DESCENDS,
+ RAY_ANIM_CHARGES,
+ RAY_ANIM_CHASES_AWAY,
+ RAY_ANIM_END
+};
+
+#define TAG_DUOFIGHT_GROUDON 30505
+#define TAG_DUOFIGHT_GROUDON_SHOULDER 30506
+#define TAG_DUOFIGHT_GROUDON_CLAW 30507
+#define TAG_DUOFIGHT_KYOGRE 30508
+#define TAG_DUOFIGHT_KYOGRE_PECTORAL_FIN 30509
+#define TAG_DUOFIGHT_KYOGRE_DORSAL_FIN 30510
+#define TAG_FLIGHT_SMOKE 30555
+#define TAG_DESCENDS_RAYQUAZA 30556
+#define TAG_DESCENDS_RAYQUAZA_TAIL 30557
+#define TAG_CHASE_GROUDON 30565
+#define TAG_CHASE_GROUDON_TAIL 30566
+#define TAG_CHASE_KYOGRE 30568
+#define TAG_CHASE_RAYQUAZA 30569
+#define TAG_CHASE_RAYQUAZA_TAIL 30570
+#define TAG_CHASE_SPLASH 30571
+
+#define MAX_SMOKE 10
+
+struct RayquazaScene
+{
+ MainCallback exitCallback;
+ u8 tilemapBuffers[4][BG_SCREEN_SIZE];
+ u16 unk; // never read
u8 animId;
- bool8 onlyOneAnim;
- s16 field_2008;
- s16 field_200A;
- u8 unusedFields[12]; // completely unused
-};
-
-// EWRAM vars
-static EWRAM_DATA struct RaySceneStruct *sRayScene = NULL;
-
-// this file's functions
-static void Task_DuoFightAnim(u8 taskId);
-static void Task_RayTakesFlightAnim(u8 taskId);
-static void Task_RayDescendsAnim(u8 taskId);
-static void Task_RayChargesAnim(u8 taskId);
-static void Task_RayChasesAwayAnim(u8 taskId);
-static void Task_HandleRayDescends(u8 taskId);
-static void Task_RayDescendsEnd(u8 taskId);
-static void Task_HandleRayCharges(u8 taskId);
-static void sub_81D8AD8(u8 taskId);
-static void sub_81D8B2C(u8 taskId);
-static void Task_RayChargesEnd(u8 taskId);
-static void Task_HandleRayChasesAway(u8 taskId);
-static void sub_81D8FB0(u8 taskId);
-static void sub_81D7228(u8 taskId);
-static void Task_HandleDuoFight(u8 taskId);
-static void sub_81D752C(u8 taskId);
-static void Task_DuoFightEnd(u8 taskId);
-static void Task_HandleRayTakesFlight(u8 taskId);
-static void sub_81D81A4(u8 taskId);
-static void Task_RayTakesFlightEnd(u8 taskId);
-static void sub_81D94D4(u8 taskId);
-static void sub_81D93D8(u8 taskId);
-static void Task_RayChasesAwayEnd(u8 taskId);
-static void sub_81D90A8(u8 taskId);
-static void sub_81D98B4(u8 taskId);
-static void Task_EndAfterFadeScreen(u8 taskId);
+ bool8 endEarly;
+ s16 revealedLightLine;
+ s16 revealedLightTimer;
+ u8 unused[12];
+};
+
+static EWRAM_DATA struct RayquazaScene *sRayScene = NULL;
+
static void CB2_InitRayquazaScene(void);
static void CB2_RayquazaScene(void);
-static void sub_81D750C(void);
-static void sub_81D7438(void);
-static void sub_81D7480(void);
-static void sub_81D74C8(void);
-static void sub_81D8BB4(void);
-static void sub_81D6A20(struct Sprite *sprite);
-static void sub_81D6D20(struct Sprite *sprite);
-static void sub_81D7860(struct Sprite *sprite);
-static void sub_81D7D14(struct Sprite *sprite);
-static void sub_81D7700(struct Sprite *sprite);
-static void sub_81D7A60(struct Sprite *sprite);
-static void sub_81D874C(struct Sprite *sprite);
-static void sub_81D9338(struct Sprite *sprite);
-static void sub_81D9420(struct Sprite *sprite);
-static void sub_81D8260(struct Sprite *sprite);
-static void sub_81D961C(struct Sprite *sprite);
-static void sub_81D97E0(struct Sprite *sprite);
-static void sub_81D9528(struct Sprite *sprite);
-static u8 sub_81D7664(void);
-static u8 sub_81D78BC(void);
-static u8 sub_81D86CC(void);
-static void DuoFightEnd(u8 taskId, s8 palDelay);
-static void sub_81D9868(struct Sprite *sprite, u8 animNum, s16 x, s16 y);
-
-// const rom data
+static void Task_EndAfterFadeScreen(u8);
+
+// RAY_ANIM_DUO_FIGHT_PRE / RAY_ANIM_DUO_FIGHT
+static void Task_DuoFightAnim(u8);
+static void Task_HandleDuoFight(u8);
+static void Task_DuoFightEnd(u8);
+static void DuoFightEnd(u8, s8);
+static void Task_DuoFight_AnimateClouds(u8);
+static void DuoFight_PanOffScene(u8);
+static void DuoFight_AnimateRain(void);
+static void DuoFight_Lightning1(void);
+static void DuoFight_Lightning2(void);
+static void DuoFight_LightningLong(void);
+static u8 DuoFightPre_CreateGroudonSprites(void);
+static u8 DuoFightPre_CreateKyogreSprites(void);
+static u8 DuoFight_CreateGroudonSprites(void);
+static u8 DuoFight_CreateKyogreSprites(void);
+static void SpriteCB_DuoFightPre_Groudon(struct Sprite *);
+static void SpriteCB_DuoFightPre_Kyogre(struct Sprite *);
+static void SpriteCB_DuoFight_Groudon(struct Sprite *);
+static void SpriteCB_DuoFight_Kyogre(struct Sprite *);
+static void DuoFight_SlideGroudonDown(struct Sprite *);
+static void DuoFight_SlideKyogreDown(struct Sprite *);
+
+// RAY_ANIM_TAKES_FLIGHT
+static void Task_RayTakesFlightAnim(u8);
+static void Task_HandleRayTakesFlight(u8);
+static void Task_RayTakesFlightEnd(u8);
+static void Task_TakesFlight_CreateSmoke(u8);
+static void SpriteCB_TakesFlight_Smoke(struct Sprite *);
+
+// RAY_ANIM_DESCENDS
+static void Task_RayDescendsAnim(u8);
+static void Task_HandleRayDescends(u8);
+static void Task_RayDescendsEnd(u8);
+static u8 CreateDescendsRayquazaSprite(void);
+static void SpriteCB_Descends_Rayquaza(struct Sprite *);
+
+// RAY_ANIM_CHARGES
+static void Task_RayChargesAnim(u8);
+static void Task_HandleRayCharges(u8);
+static void Task_RayChargesEnd(u8);
+static void Task_RayCharges_ShakeRayquaza(u8);
+static void Task_RayCharges_FlyOffscreen(u8);
+static void RayCharges_AnimateBg(void);
+
+// RAY_ANIM_CHASES_AWAY
+static void Task_RayChasesAwayAnim(u8);
+static void Task_HandleRayChasesAway(u8);
+static void Task_RayChasesAwayEnd(u8);
+static void Task_ChasesAway_AnimateBg(u8);
+static void ChasesAway_KyogreStartLeave(u8);
+static void ChasesAway_GroudonStartLeave(u8);
+static void ChasesAway_CreateTrioSprites(u8);
+static void Task_ChasesAway_AnimateRing(u8);
+static void SpriteCB_ChasesAway_GroudonLeave(struct Sprite *);
+static void SpriteCB_ChasesAway_KyogreLeave(struct Sprite *);
+static void SpriteCB_ChasesAway_RayquazaFloat(struct Sprite *);
+static void SpriteCB_ChasesAway_Rayquaza(struct Sprite *);
+static void SpriteCB_ChasesAway_DuoRingPush(struct Sprite *);
+static void ChasesAway_SetRayquazaAnim(struct Sprite *, u8, s16, s16);
+
static const TaskFunc sTasksForAnimations[] =
{
[RAY_ANIM_DUO_FIGHT_PRE] = Task_DuoFightAnim,
- [RAY_ANIM_DUO_FIGHT] = Task_DuoFightAnim,
- [RAY_ANIM_TAKES_FLIGHT] = Task_RayTakesFlightAnim,
- [RAY_ANIM_DESCENDS] = Task_RayDescendsAnim,
- [RAY_ANIM_CHARGES] = Task_RayChargesAnim,
- [RAY_ANIM_CHACES_AWAY] = Task_RayChasesAwayAnim,
- [RAY_ANIM_END] = Task_EndAfterFadeScreen,
+ [RAY_ANIM_DUO_FIGHT] = Task_DuoFightAnim,
+ [RAY_ANIM_TAKES_FLIGHT] = Task_RayTakesFlightAnim,
+ [RAY_ANIM_DESCENDS] = Task_RayDescendsAnim,
+ [RAY_ANIM_CHARGES] = Task_RayChargesAnim,
+ [RAY_ANIM_CHASES_AWAY] = Task_RayChasesAwayAnim,
+ [RAY_ANIM_END] = Task_EndAfterFadeScreen,
};
-static const struct OamData sOamData_862A6BC =
+static const struct OamData sOam_64x64 =
{
.y = 0,
.affineMode = ST_OAM_AFFINE_OFF,
@@ -115,7 +167,7 @@ static const struct OamData sOamData_862A6BC =
.affineParam = 0
};
-static const struct OamData sOamData_862A6C4 =
+static const struct OamData sOam_32x32 =
{
.y = 0,
.affineMode = ST_OAM_AFFINE_OFF,
@@ -132,7 +184,7 @@ static const struct OamData sOamData_862A6C4 =
.affineParam = 0
};
-static const struct OamData sOamData_862A6CC =
+static const struct OamData sOam_64x32 =
{
.y = 0,
.affineMode = ST_OAM_AFFINE_OFF,
@@ -149,7 +201,7 @@ static const struct OamData sOamData_862A6CC =
.affineParam = 0
};
-static const struct OamData sOamData_862A6D4 =
+static const struct OamData sOam_32x16 =
{
.y = 0,
.affineMode = ST_OAM_AFFINE_OFF,
@@ -166,7 +218,7 @@ static const struct OamData sOamData_862A6D4 =
.affineParam = 0
};
-static const struct OamData sOamData_862A6DC =
+static const struct OamData sOam_16x8 =
{
.y = 0,
.affineMode = ST_OAM_AFFINE_OFF,
@@ -183,7 +235,7 @@ static const struct OamData sOamData_862A6DC =
.affineParam = 0
};
-static const struct OamData sOamData_862A6E4 =
+static const struct OamData sOam_16x32 =
{
.y = 0,
.affineMode = ST_OAM_AFFINE_OFF,
@@ -200,7 +252,7 @@ static const struct OamData sOamData_862A6E4 =
.affineParam = 0
};
-static const struct OamData sOamData_862A6EC =
+static const struct OamData sOam_16x16 =
{
.y = 0,
.affineMode = ST_OAM_AFFINE_OFF,
@@ -217,7 +269,7 @@ static const struct OamData sOamData_862A6EC =
.affineParam = 0
};
-static const struct OamData sOamData_862A6F4 =
+static const struct OamData sOam_32x8 =
{
.y = 0,
.affineMode = ST_OAM_AFFINE_OFF,
@@ -234,7 +286,7 @@ static const struct OamData sOamData_862A6F4 =
.affineParam = 0
};
-static const union AnimCmd sSpriteAnim_862A6FC[] =
+static const union AnimCmd sAnim_DuoFightPre_Groudon_Head[] =
{
ANIMCMD_FRAME(0, 30),
ANIMCMD_FRAME(64, 30),
@@ -243,7 +295,7 @@ static const union AnimCmd sSpriteAnim_862A6FC[] =
ANIMCMD_JUMP(0),
};
-static const union AnimCmd sSpriteAnim_862A710[] =
+static const union AnimCmd sAnim_DuoFightPre_Groudon_Body[] =
{
ANIMCMD_FRAME(192, 30),
ANIMCMD_FRAME(256, 30),
@@ -252,104 +304,104 @@ static const union AnimCmd sSpriteAnim_862A710[] =
ANIMCMD_JUMP(0),
};
-static const union AnimCmd *const sSpriteAnimTable_862A724[] =
+static const union AnimCmd *const sAnims_DuoFightPre_Groudon[] =
{
- sSpriteAnim_862A6FC,
- sSpriteAnim_862A710
+ sAnim_DuoFightPre_Groudon_Head,
+ sAnim_DuoFightPre_Groudon_Body
};
-static const struct SpriteTemplate sUnknown_0862A72C =
+static const struct SpriteTemplate sSpriteTemplate_DuoFightPre_Groudon =
{
- .tileTag = 30505,
- .paletteTag = 30505,
- .oam = &sOamData_862A6BC,
- .anims = sSpriteAnimTable_862A724,
+ .tileTag = TAG_DUOFIGHT_GROUDON,
+ .paletteTag = TAG_DUOFIGHT_GROUDON,
+ .oam = &sOam_64x64,
+ .anims = sAnims_DuoFightPre_Groudon,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = SpriteCallbackDummy,
};
-static const union AnimCmd sSpriteAnim_862A744[] =
+static const union AnimCmd sAnim_DuoFightPre_GroudonShoulderKyogreDorsalFin[] =
{
ANIMCMD_FRAME(0, 1),
ANIMCMD_END
};
-static const union AnimCmd *const sSpriteAnimTable_862A74C[] =
+static const union AnimCmd *const sAnims_DuoFightPre_GroudonShoulderKyogreDorsalFin[] =
{
- sSpriteAnim_862A744
+ sAnim_DuoFightPre_GroudonShoulderKyogreDorsalFin
};
-static const struct SpriteTemplate sUnknown_0862A750 =
+static const struct SpriteTemplate sSpriteTemplate_DuoFightPre_GroudonShoulder =
{
- .tileTag = 30506,
- .paletteTag = 30505,
- .oam = &sOamData_862A6C4,
- .anims = sSpriteAnimTable_862A74C,
+ .tileTag = TAG_DUOFIGHT_GROUDON_SHOULDER,
+ .paletteTag = TAG_DUOFIGHT_GROUDON,
+ .oam = &sOam_32x32,
+ .anims = sAnims_DuoFightPre_GroudonShoulderKyogreDorsalFin,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = SpriteCallbackDummy,
};
-static const union AnimCmd sSpriteAnim_862A768[] =
+static const union AnimCmd sAnim_DuoFightPre_GroudonClaw[] =
{
ANIMCMD_FRAME(0, 1),
ANIMCMD_END
};
-static const union AnimCmd *const sSpriteAnimTable_862A770[] =
+static const union AnimCmd *const sAnims_DuoFightPre_GroudonClaw[] =
{
- sSpriteAnim_862A768
+ sAnim_DuoFightPre_GroudonClaw
};
-static const struct SpriteTemplate sUnknown_0862A774 =
+static const struct SpriteTemplate sSpriteTemplate_DuoFightPre_GroudonClaw =
{
- .tileTag = 30507,
- .paletteTag = 30505,
- .oam = &sOamData_862A6CC,
- .anims = sSpriteAnimTable_862A770,
+ .tileTag = TAG_DUOFIGHT_GROUDON_CLAW,
+ .paletteTag = TAG_DUOFIGHT_GROUDON,
+ .oam = &sOam_64x32,
+ .anims = sAnims_DuoFightPre_GroudonClaw,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = SpriteCallbackDummy,
};
-static const union AnimCmd sSpriteAnim_862A78C[] =
+static const union AnimCmd sAnim_DuoFightPre_Kyogre_TopLeft[] =
{
ANIMCMD_FRAME(0, 1),
ANIMCMD_END
};
-static const union AnimCmd sSpriteAnim_862A794[] =
+static const union AnimCmd sAnim_DuoFightPre_Kyogre_TopRight[] =
{
ANIMCMD_FRAME(8, 1),
ANIMCMD_END
};
-static const union AnimCmd sSpriteAnim_862A79C[] =
+static const union AnimCmd sAnim_DuoFightPre_Kyogre_FaceLeft[] =
{
ANIMCMD_FRAME(16, 1),
ANIMCMD_END
};
-static const union AnimCmd sSpriteAnim_862A7A4[] =
+static const union AnimCmd sAnim_DuoFightPre_Kyogre_FaceRight[] =
{
ANIMCMD_FRAME(24, 1),
ANIMCMD_END
};
-static const union AnimCmd sSpriteAnim_862A7AC[] =
+static const union AnimCmd sAnim_DuoFightPre_Kyogre_ChinLeft[] =
{
ANIMCMD_FRAME(32, 1),
ANIMCMD_END
};
-static const union AnimCmd sSpriteAnim_862A7B4[] =
+static const union AnimCmd sAnim_DuoFightPre_Kyogre_ChinRight[] =
{
ANIMCMD_FRAME(40, 1),
ANIMCMD_END
};
-static const union AnimCmd sSpriteAnim_862A7BC[] =
+static const union AnimCmd sAnim_DuoFightPre_Kyogre_LeftPectoralFin[] =
{
ANIMCMD_FRAME(48, 36),
ANIMCMD_FRAME(64, 36),
@@ -358,7 +410,7 @@ static const union AnimCmd sSpriteAnim_862A7BC[] =
ANIMCMD_JUMP(0),
};
-static const union AnimCmd sSpriteAnim_862A7D0[] =
+static const union AnimCmd sAnim_DuoFightPre_Kyogre_LeftShoulder[] =
{
ANIMCMD_FRAME(56, 36),
ANIMCMD_FRAME(72, 36),
@@ -367,7 +419,7 @@ static const union AnimCmd sSpriteAnim_862A7D0[] =
ANIMCMD_JUMP(0),
};
-static const union AnimCmd sSpriteAnim_862A7E4[] =
+static const union AnimCmd sAnim_DuoFightPre_Kyogre_RightShoulder[] =
{
ANIMCMD_FRAME(96, 36),
ANIMCMD_FRAME(104, 36),
@@ -376,31 +428,32 @@ static const union AnimCmd sSpriteAnim_862A7E4[] =
ANIMCMD_JUMP(0),
};
-static const union AnimCmd *const sSpriteAnimTable_862A7F8[] =
+// Edge of the right pectoral fin is its own sprite (see KyogrePectoralFin)
+static const union AnimCmd *const sAnims_DuoFightPre_Kyogre[] =
{
- sSpriteAnim_862A78C,
- sSpriteAnim_862A794,
- sSpriteAnim_862A79C,
- sSpriteAnim_862A7A4,
- sSpriteAnim_862A7AC,
- sSpriteAnim_862A7B4,
- sSpriteAnim_862A7BC,
- sSpriteAnim_862A7D0,
- sSpriteAnim_862A7E4
+ sAnim_DuoFightPre_Kyogre_TopLeft,
+ sAnim_DuoFightPre_Kyogre_TopRight,
+ sAnim_DuoFightPre_Kyogre_FaceLeft,
+ sAnim_DuoFightPre_Kyogre_FaceRight,
+ sAnim_DuoFightPre_Kyogre_ChinLeft,
+ sAnim_DuoFightPre_Kyogre_ChinRight,
+ sAnim_DuoFightPre_Kyogre_LeftPectoralFin,
+ sAnim_DuoFightPre_Kyogre_LeftShoulder,
+ sAnim_DuoFightPre_Kyogre_RightShoulder
};
-static const struct SpriteTemplate sUnknown_0862A81C =
+static const struct SpriteTemplate sSpriteTemplate_DuoFightPre_Kyogre =
{
- .tileTag = 30508,
- .paletteTag = 30508,
- .oam = &sOamData_862A6D4,
- .anims = sSpriteAnimTable_862A7F8,
+ .tileTag = TAG_DUOFIGHT_KYOGRE,
+ .paletteTag = TAG_DUOFIGHT_KYOGRE,
+ .oam = &sOam_32x16,
+ .anims = sAnims_DuoFightPre_Kyogre,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = SpriteCallbackDummy,
};
-static const union AnimCmd sSpriteAnim_862A834[] =
+static const union AnimCmd sAnim_DuoFightPre_KyogrePectoralFin[] =
{
ANIMCMD_FRAME(0, 36),
ANIMCMD_FRAME(2, 36),
@@ -409,41 +462,41 @@ static const union AnimCmd sSpriteAnim_862A834[] =
ANIMCMD_JUMP(0),
};
-static const union AnimCmd *const sSpriteAnimTable_862A848[] =
+static const union AnimCmd *const sAnims_DuoFightPre_KyogrePectoralFin[] =
{
- sSpriteAnim_862A834
+ sAnim_DuoFightPre_KyogrePectoralFin
};
-static const struct SpriteTemplate sUnknown_0862A84C =
+static const struct SpriteTemplate sSpriteTemplate_DuoFightPre_KyogrePectoralFin =
{
- .tileTag = 30509,
- .paletteTag = 30508,
- .oam = &sOamData_862A6DC,
- .anims = sSpriteAnimTable_862A848,
+ .tileTag = TAG_DUOFIGHT_KYOGRE_PECTORAL_FIN,
+ .paletteTag = TAG_DUOFIGHT_KYOGRE,
+ .oam = &sOam_16x8,
+ .anims = sAnims_DuoFightPre_KyogrePectoralFin,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = SpriteCallbackDummy,
};
-static const struct SpriteTemplate sUnknown_0862A864 =
+static const struct SpriteTemplate sSpriteTemplate_DuoFightPre_KyogreDorsalFin =
{
- .tileTag = 30510,
- .paletteTag = 30508,
- .oam = &sOamData_862A6C4,
- .anims = sSpriteAnimTable_862A74C,
+ .tileTag = TAG_DUOFIGHT_KYOGRE_DORSAL_FIN,
+ .paletteTag = TAG_DUOFIGHT_KYOGRE,
+ .oam = &sOam_32x32,
+ .anims = sAnims_DuoFightPre_GroudonShoulderKyogreDorsalFin,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = SpriteCallbackDummy,
};
-static const struct ScanlineEffectParams sUnknown_0862A87C =
+static const struct ScanlineEffectParams sScanlineParams_DuoFight_Clouds =
{
.dmaDest = (vu16 *)REG_ADDR_BG1HOFS,
- .dmaControl = 0xA2600001,
+ .dmaControl = SCANLINE_EFFECT_DMACNT_16BIT,
.initState = 1
};
-static const struct BgTemplate sUnknown_0862A888[] =
+static const struct BgTemplate sBgTemplates_DuoFight[] =
{
{
.bg = 0,
@@ -474,7 +527,7 @@ static const struct BgTemplate sUnknown_0862A888[] =
},
};
-static const union AnimCmd sSpriteAnim_862A894[] =
+static const union AnimCmd sAnim_DuoFight_Groudon_Head[] =
{
ANIMCMD_FRAME(0, 20),
ANIMCMD_FRAME(64, 20),
@@ -483,7 +536,7 @@ static const union AnimCmd sSpriteAnim_862A894[] =
ANIMCMD_JUMP(0),
};
-static const union AnimCmd sSpriteAnim_862A8A8[] =
+static const union AnimCmd sAnim_DuoFight_Groudon_Body[] =
{
ANIMCMD_FRAME(192, 20),
ANIMCMD_FRAME(256, 20),
@@ -492,124 +545,124 @@ static const union AnimCmd sSpriteAnim_862A8A8[] =
ANIMCMD_JUMP(0),
};
-static const union AnimCmd *const sSpriteAnimTable_862A8BC[] =
+static const union AnimCmd *const sAnims_DuoFight_Groudon[] =
{
- sSpriteAnim_862A894,
- sSpriteAnim_862A8A8
+ sAnim_DuoFight_Groudon_Head,
+ sAnim_DuoFight_Groudon_Body
};
-static const struct CompressedSpriteSheet sUnknown_0862A8C4 =
+static const struct CompressedSpriteSheet sSpriteSheet_DuoFight_Groudon =
{
- gRaySceneGroudon_Gfx, 0x3000, 30505
+ gRaySceneDuoFight_Groudon_Gfx, 0x3000, TAG_DUOFIGHT_GROUDON
};
-static const struct CompressedSpritePalette sUnknown_0862A8CC =
+static const struct CompressedSpritePalette sSpritePal_DuoFight_Groudon =
{
- gRaySceneGroudon_Pal, 30505
+ gRaySceneDuoFight_Groudon_Pal, TAG_DUOFIGHT_GROUDON
};
-static const struct SpriteTemplate sUnknown_0862A8D4 =
+static const struct SpriteTemplate sSpriteTemplate_DuoFight_Groudon =
{
- .tileTag = 30505,
- .paletteTag = 30505,
- .oam = &sOamData_862A6BC,
- .anims = sSpriteAnimTable_862A8BC,
+ .tileTag = TAG_DUOFIGHT_GROUDON,
+ .paletteTag = TAG_DUOFIGHT_GROUDON,
+ .oam = &sOam_64x64,
+ .anims = sAnims_DuoFight_Groudon,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = SpriteCallbackDummy,
};
-static const union AnimCmd sSpriteAnim_862A8EC[] =
+static const union AnimCmd sAnim_DuoFight_GroudonShoulderKyogreDorsalFin[] =
{
ANIMCMD_FRAME(0, 1),
ANIMCMD_END
};
-static const union AnimCmd *const sSpriteAnimTable_862A8F4[] =
+static const union AnimCmd *const sAnims_DuoFight_GroudonShoulderKyogreDorsalFin[] =
{
- sSpriteAnim_862A8EC
+ sAnim_DuoFight_GroudonShoulderKyogreDorsalFin
};
-static const struct CompressedSpriteSheet sUnknown_0862A8F8 =
+static const struct CompressedSpriteSheet sSpriteSheet_DuoFight_GroudonShoulder =
{
- gRaySceneGroudon2_Gfx, 0x200, 30506
+ gRaySceneDuoFight_GroudonShoulder_Gfx, 0x200, TAG_DUOFIGHT_GROUDON_SHOULDER
};
-static const struct SpriteTemplate sUnknown_0862A900 =
+static const struct SpriteTemplate sSpriteTemplate_DuoFight_GroudonShoulder =
{
- .tileTag = 30506,
- .paletteTag = 30505,
- .oam = &sOamData_862A6C4,
- .anims = sSpriteAnimTable_862A8F4,
+ .tileTag = TAG_DUOFIGHT_GROUDON_SHOULDER,
+ .paletteTag = TAG_DUOFIGHT_GROUDON,
+ .oam = &sOam_32x32,
+ .anims = sAnims_DuoFight_GroudonShoulderKyogreDorsalFin,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = SpriteCallbackDummy,
};
-static const union AnimCmd sSpriteAnim_862A918[] =
+static const union AnimCmd sAnim_DuoFight_GroudonClaw[] =
{
ANIMCMD_FRAME(0, 1),
ANIMCMD_END
};
-static const union AnimCmd *const sSpriteAnimTable_862A920[] =
+static const union AnimCmd *const sAnims_DuoFight_GroudonClaw[] =
{
- sSpriteAnim_862A918
+ sAnim_DuoFight_GroudonClaw
};
-static const struct CompressedSpriteSheet sUnknown_0862A924 =
+static const struct CompressedSpriteSheet sSpriteSheet_DuoFight_GroudonClaw =
{
- gRaySceneGroudon3_Gfx, 0x400, 30507
+ gRaySceneDuoFight_GroudonClaw_Gfx, 0x400, TAG_DUOFIGHT_GROUDON_CLAW
};
-static const struct SpriteTemplate sUnknown_0862A92C =
+static const struct SpriteTemplate sSpriteTemplate_DuoFight_GroudonClaw =
{
- .tileTag = 30507,
- .paletteTag = 30505,
- .oam = &sOamData_862A6CC,
- .anims = sSpriteAnimTable_862A920,
+ .tileTag = TAG_DUOFIGHT_GROUDON_CLAW,
+ .paletteTag = TAG_DUOFIGHT_GROUDON,
+ .oam = &sOam_64x32,
+ .anims = sAnims_DuoFight_GroudonClaw,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = SpriteCallbackDummy,
};
-static const union AnimCmd sSpriteAnim_862A944[] =
+static const union AnimCmd sAnim_DuoFight_Kyogre_TopLeft[] =
{
ANIMCMD_FRAME(0, 1),
ANIMCMD_END
};
-static const union AnimCmd sSpriteAnim_862A94C[] =
+static const union AnimCmd sAnim_DuoFight_Kyogre_TopRight[] =
{
ANIMCMD_FRAME(8, 1),
ANIMCMD_END
};
-static const union AnimCmd sSpriteAnim_862A954[] =
+static const union AnimCmd sAnim_DuoFight_Kyogre_FaceLeft[] =
{
ANIMCMD_FRAME(16, 1),
ANIMCMD_END
};
-static const union AnimCmd sSpriteAnim_862A95C[] =
+static const union AnimCmd sAnim_DuoFight_Kyogre_FaceRight[] =
{
ANIMCMD_FRAME(24, 1),
ANIMCMD_END
};
-static const union AnimCmd sSpriteAnim_862A964[] =
+static const union AnimCmd sAnim_DuoFight_Kyogre_ChinLeft[] =
{
ANIMCMD_FRAME(32, 1),
ANIMCMD_END
};
-static const union AnimCmd sSpriteAnim_862A96C[] =
+static const union AnimCmd sAnim_DuoFight_Kyogre_ChinRight[] =
{
ANIMCMD_FRAME(40, 1),
ANIMCMD_END
};
-static const union AnimCmd sSpriteAnim_862A974[] =
+static const union AnimCmd sAnim_DuoFight_Kyogre_LeftPectoralFin[] =
{
ANIMCMD_FRAME(48, 24),
ANIMCMD_FRAME(64, 24),
@@ -618,7 +671,7 @@ static const union AnimCmd sSpriteAnim_862A974[] =
ANIMCMD_JUMP(0),
};
-static const union AnimCmd sSpriteAnim_862A988[] =
+static const union AnimCmd sAnim_DuoFight_Kyogre_LeftShoulder[] =
{
ANIMCMD_FRAME(56, 24),
ANIMCMD_FRAME(72, 24),
@@ -627,7 +680,7 @@ static const union AnimCmd sSpriteAnim_862A988[] =
ANIMCMD_JUMP(0),
};
-static const union AnimCmd sSpriteAnim_862A99C[] =
+static const union AnimCmd sAnim_DuoFight_Kyogre_RightShoulder[] =
{
ANIMCMD_FRAME(96, 24),
ANIMCMD_FRAME(104, 24),
@@ -636,41 +689,41 @@ static const union AnimCmd sSpriteAnim_862A99C[] =
ANIMCMD_JUMP(0),
};
-static const union AnimCmd *const sSpriteAnimTable_862A9B0[] =
+static const union AnimCmd *const sAnims_DuoFight_Kyogre[] =
{
- sSpriteAnim_862A944,
- sSpriteAnim_862A94C,
- sSpriteAnim_862A954,
- sSpriteAnim_862A95C,
- sSpriteAnim_862A964,
- sSpriteAnim_862A96C,
- sSpriteAnim_862A974,
- sSpriteAnim_862A988,
- sSpriteAnim_862A99C
+ sAnim_DuoFight_Kyogre_TopLeft,
+ sAnim_DuoFight_Kyogre_TopRight,
+ sAnim_DuoFight_Kyogre_FaceLeft,
+ sAnim_DuoFight_Kyogre_FaceRight,
+ sAnim_DuoFight_Kyogre_ChinLeft,
+ sAnim_DuoFight_Kyogre_ChinRight,
+ sAnim_DuoFight_Kyogre_LeftPectoralFin,
+ sAnim_DuoFight_Kyogre_LeftShoulder,
+ sAnim_DuoFight_Kyogre_RightShoulder
};
-static const struct CompressedSpriteSheet sUnknown_0862A9D4 =
+static const struct CompressedSpriteSheet sSpriteSheet_DuoFight_Kyogre =
{
- gRaySceneKyogre_Gfx, 0xF00, 30508
+ gRaySceneDuoFight_Kyogre_Gfx, 0xF00, TAG_DUOFIGHT_KYOGRE
};
-static const struct CompressedSpritePalette sUnknown_0862A9DC =
+static const struct CompressedSpritePalette sSpritePal_DuoFight_Kyogre =
{
- gRaySceneKyogre_Pal, 30508
+ gRaySceneDuoFight_Kyogre_Pal, TAG_DUOFIGHT_KYOGRE
};
-static const struct SpriteTemplate sUnknown_0862A9E4 =
+static const struct SpriteTemplate sSpriteTemplate_DuoFight_Kyogre =
{
- .tileTag = 30508,
- .paletteTag = 30508,
- .oam = &sOamData_862A6D4,
- .anims = sSpriteAnimTable_862A9B0,
+ .tileTag = TAG_DUOFIGHT_KYOGRE,
+ .paletteTag = TAG_DUOFIGHT_KYOGRE,
+ .oam = &sOam_32x16,
+ .anims = sAnims_DuoFight_Kyogre,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = SpriteCallbackDummy,
};
-static const union AnimCmd sSpriteAnim_862A9FC[] =
+static const union AnimCmd sAnim_DuoFight_KyogrePectoralFin[] =
{
ANIMCMD_FRAME(0, 24),
ANIMCMD_FRAME(2, 24),
@@ -679,44 +732,44 @@ static const union AnimCmd sSpriteAnim_862A9FC[] =
ANIMCMD_JUMP(0),
};
-static const union AnimCmd *const sSpriteAnimTable_862AA10[] =
+static const union AnimCmd *const sAnims_DuoFight_KyogrePectoralFin[] =
{
- sSpriteAnim_862A9FC
+ sAnim_DuoFight_KyogrePectoralFin
};
-static const struct CompressedSpriteSheet sUnknown_0862AA14 =
+static const struct CompressedSpriteSheet sSpriteSheet_DuoFight_KyogrePectoralFin =
{
- gRaySceneKyogre2_Gfx, 0xC0, 30509
+ gRaySceneDuoFight_KyogrePectoralFin_Gfx, 0xC0, TAG_DUOFIGHT_KYOGRE_PECTORAL_FIN
};
-static const struct SpriteTemplate sUnknown_0862AA1C =
+static const struct SpriteTemplate sSpriteTemplate_DuoFight_KyogrePectoralFin =
{
- .tileTag = 30509,
- .paletteTag = 30508,
- .oam = &sOamData_862A6DC,
- .anims = sSpriteAnimTable_862AA10,
+ .tileTag = TAG_DUOFIGHT_KYOGRE_PECTORAL_FIN,
+ .paletteTag = TAG_DUOFIGHT_KYOGRE,
+ .oam = &sOam_16x8,
+ .anims = sAnims_DuoFight_KyogrePectoralFin,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = SpriteCallbackDummy,
};
-static const struct CompressedSpriteSheet sUnknown_0862AA34 =
+static const struct CompressedSpriteSheet sSpriteSheet_DuoFight_KyogreDorsalFin =
{
- gRaySceneKyogre3_Gfx, 0x200, 30510
+ gRaySceneDuoFight_KyogreDorsalFin_Gfx, 0x200, TAG_DUOFIGHT_KYOGRE_DORSAL_FIN
};
-static const struct SpriteTemplate sUnknown_0862AA3C =
+static const struct SpriteTemplate sSpriteTemplate_DuoFight_KyogreDorsalFin =
{
- .tileTag = 30510,
- .paletteTag = 30508,
- .oam = &sOamData_862A6C4,
- .anims = sSpriteAnimTable_862A8F4,
+ .tileTag = TAG_DUOFIGHT_KYOGRE_DORSAL_FIN,
+ .paletteTag = TAG_DUOFIGHT_KYOGRE,
+ .oam = &sOam_32x32,
+ .anims = sAnims_DuoFight_GroudonShoulderKyogreDorsalFin,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = SpriteCallbackDummy,
};
-static const struct BgTemplate sUnknown_0862AA54[] =
+static const struct BgTemplate sBgTemplates_TakesFlight[] =
{
{
.bg = 0,
@@ -747,18 +800,18 @@ static const struct BgTemplate sUnknown_0862AA54[] =
}
};
-static const union AnimCmd sSpriteAnim_862AA60[] =
+static const union AnimCmd sAnim_TakesFlight_Smoke[] =
{
ANIMCMD_FRAME(0, 1),
ANIMCMD_END
};
-static const union AnimCmd *const sSpriteAnimTable_862AA68[] =
+static const union AnimCmd *const sAnims_TakesFlight_Smoke[] =
{
- sSpriteAnim_862AA60
+ sAnim_TakesFlight_Smoke
};
-static const union AffineAnimCmd sSpriteAffineAnim_862AA6C[] =
+static const union AffineAnimCmd sAffineAnim_TakesFlight_Smoke[] =
{
AFFINEANIMCMD_FRAME(-64, -64, 0, 1),
AFFINEANIMCMD_FRAME(32, 32, 0, 14),
@@ -766,47 +819,47 @@ static const union AffineAnimCmd sSpriteAffineAnim_862AA6C[] =
AFFINEANIMCMD_JUMP(0)
};
-static const union AffineAnimCmd *const sSpriteAffineAnimTable_862AA8C[] =
+static const union AffineAnimCmd *const sAffineAnims_TakesFlight_Smoke[] =
{
- sSpriteAffineAnim_862AA6C
+ sAffineAnim_TakesFlight_Smoke
};
-static const struct CompressedSpriteSheet sUnknown_0862AA90 =
+static const struct CompressedSpriteSheet sSpriteSheet_TakesFlight_Smoke =
{
- gRaySceneSmoke_Gfx, 0x100, 30555
+ gRaySceneTakesFlight_Smoke_Gfx, 0x100, TAG_FLIGHT_SMOKE
};
-static const struct CompressedSpritePalette sUnknown_0862AA98 =
+static const struct CompressedSpritePalette sSpritePal_TakesFlight_Smoke =
{
- gRaySceneSmoke_Pal, 30555
+ gRaySceneTakesFlight_Smoke_Pal, TAG_FLIGHT_SMOKE
};
-static const struct SpriteTemplate sUnknown_0862AAA0 =
+static const struct SpriteTemplate sSpriteTemplate_TakesFlight_Smoke =
{
- .tileTag = 30555,
- .paletteTag = 30555,
- .oam = &sOamData_862A6D4,
- .anims = sSpriteAnimTable_862AA68,
+ .tileTag = TAG_FLIGHT_SMOKE,
+ .paletteTag = TAG_FLIGHT_SMOKE,
+ .oam = &sOam_32x16,
+ .anims = sAnims_TakesFlight_Smoke,
.images = NULL,
- .affineAnims = sSpriteAffineAnimTable_862AA8C,
- .callback = sub_81D8260,
+ .affineAnims = sAffineAnims_TakesFlight_Smoke,
+ .callback = SpriteCB_TakesFlight_Smoke,
};
-static const s8 sUnknown_0862AAB8[][2] =
+static const s8 sTakesFlight_SmokeCoords[MAX_SMOKE][2] =
{
- {-1, 5},
- {-3, -4},
- {5, -3},
- {-7, 2},
- {-9, -1},
- {1, -5},
- {3, 4},
- {-5, 3},
- {7, -2},
- {9, 1}
+ {-1, 5},
+ {-3, -4},
+ { 5, -3},
+ {-7, 2},
+ {-9, -1},
+ { 1, -5},
+ { 3, 4},
+ {-5, 3},
+ { 7, -2},
+ { 9, 1}
};
-static const struct BgTemplate sUnknown_0862AACC[] =
+static const struct BgTemplate sBgTemplates_Descends[] =
{
{
.bg = 0,
@@ -846,68 +899,68 @@ static const struct BgTemplate sUnknown_0862AACC[] =
}
};
-static const union AnimCmd sSpriteAnim_862AADC[] =
+static const union AnimCmd sAnim_Descends_Rayquaza[] =
{
ANIMCMD_FRAME(0, 32),
ANIMCMD_FRAME(64, 32),
ANIMCMD_JUMP(0),
};
-static const union AnimCmd *const sSpriteAnimTable_862AAE8[] =
+static const union AnimCmd *const sAnims_Descends_Rayquaza[] =
{
- sSpriteAnim_862AADC
+ sAnim_Descends_Rayquaza
};
-static const union AnimCmd sSpriteAnim_862AAEC[] =
+static const union AnimCmd sAnim_Descends_RayquazaTail[] =
{
ANIMCMD_FRAME(0, 32),
ANIMCMD_FRAME(8, 32),
ANIMCMD_JUMP(0),
};
-static const union AnimCmd *const sSpriteAnimTable_862AAF8[] =
+static const union AnimCmd *const sAnims_Descends_RayquazaTail[] =
{
- sSpriteAnim_862AAEC
+ sAnim_Descends_RayquazaTail
};
-static const struct CompressedSpriteSheet sUnknown_0862AAFC =
+static const struct CompressedSpriteSheet sSpriteSheet_Descends_Rayquaza =
{
- gRaySceneRayquazaFly1_Gfx, 0x1000, 30556
+ gRaySceneDescends_Rayquaza_Gfx, 0x1000, TAG_DESCENDS_RAYQUAZA
};
-static const struct CompressedSpriteSheet sUnknown_0862AB04 =
+static const struct CompressedSpriteSheet sSpriteSheet_Descends_RayquazaTail =
{
- gRaySceneRayquazaTail_Gfx, 0x200, 30557
+ gRaySceneDescends_RayquazaTail_Gfx, 0x200, TAG_DESCENDS_RAYQUAZA_TAIL
};
-static const struct CompressedSpritePalette sUnknown_0862AB0C =
+static const struct CompressedSpritePalette sSpritePal_Descends_Rayquaza =
{
- gRaySceneRayquaza_Pal, 30556
+ gRaySceneTakesFlight_Rayquaza_Pal, TAG_DESCENDS_RAYQUAZA // "Takes flight" palette re-used here
};
-static const struct SpriteTemplate sUnknown_0862AB14 =
+static const struct SpriteTemplate sSpriteTemplate_Descends_Rayquaza =
{
- .tileTag = 30556,
- .paletteTag = 30556,
- .oam = &sOamData_862A6BC,
- .anims = sSpriteAnimTable_862AAE8,
+ .tileTag = TAG_DESCENDS_RAYQUAZA,
+ .paletteTag = TAG_DESCENDS_RAYQUAZA,
+ .oam = &sOam_64x64,
+ .anims = sAnims_Descends_Rayquaza,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = SpriteCallbackDummy,
};
-static const struct SpriteTemplate sUnknown_0862AB2C =
+static const struct SpriteTemplate sSpriteTemplate_Descends_RayquazaTail =
{
- .tileTag = 30557,
- .paletteTag = 30556,
- .oam = &sOamData_862A6E4,
- .anims = sSpriteAnimTable_862AAF8,
+ .tileTag = TAG_DESCENDS_RAYQUAZA_TAIL,
+ .paletteTag = TAG_DESCENDS_RAYQUAZA,
+ .oam = &sOam_16x32,
+ .anims = sAnims_Descends_RayquazaTail,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = SpriteCallbackDummy,
};
-static const struct BgTemplate sUnknown_0862AB44[] =
+static const struct BgTemplate sBgTemplates_Charges[] =
{
{
.bg = 0,
@@ -947,13 +1000,13 @@ static const struct BgTemplate sUnknown_0862AB44[] =
}
};
-static const union AnimCmd sSpriteAnim_862AB54[] =
+static const union AnimCmd sAnim_ChasesAway_Groudon_Still[] =
{
ANIMCMD_FRAME(0, 1),
ANIMCMD_END
};
-static const union AnimCmd sSpriteAnim_862AB5C[] =
+static const union AnimCmd sAnim_ChasesAway_Groudon_Moving[] =
{
ANIMCMD_FRAME(0, 48),
ANIMCMD_FRAME(64, 32),
@@ -962,113 +1015,113 @@ static const union AnimCmd sSpriteAnim_862AB5C[] =
ANIMCMD_JUMP(0)
};
-static const union AnimCmd *const sSpriteAnimTable_862AB70[] =
+static const union AnimCmd *const sAnims_ChasesAway_Groudon[] =
{
- sSpriteAnim_862AB54,
- sSpriteAnim_862AB5C
+ sAnim_ChasesAway_Groudon_Still,
+ sAnim_ChasesAway_Groudon_Moving
};
-static const union AnimCmd sSpriteAnim_862AB78[] =
+static const union AnimCmd sAnim_ChasesAway_GroudonTail[] =
{
ANIMCMD_FRAME(0, 1),
ANIMCMD_END
};
-static const union AnimCmd *const sSpriteAnimTable_862AB80[] =
+static const union AnimCmd *const sAnims_ChasesAway_GroudonTail[] =
{
- sSpriteAnim_862AB78,
+ sAnim_ChasesAway_GroudonTail,
};
-static const union AnimCmd sSpriteAnim_862AB84[] =
+static const union AnimCmd sAnim_ChasesAway_Kyogre_Front[] =
{
ANIMCMD_FRAME(0, 1),
ANIMCMD_END
};
-static const union AnimCmd sSpriteAnim_862AB8C[] =
+static const union AnimCmd sAnim_ChasesAway_Kyogre_Back[] =
{
ANIMCMD_FRAME(16, 1),
ANIMCMD_END
};
-static const union AnimCmd sSpriteAnim_862AB94[] =
+static const union AnimCmd sAnim_ChasesAway_Kyogre_Tail[] =
{
ANIMCMD_FRAME(32, 1),
ANIMCMD_END
};
-static const union AnimCmd *const sSpriteAnimTable_862AB9C[] =
+static const union AnimCmd *const sAnims_ChasesAway_Kyogre[] =
{
- sSpriteAnim_862AB84,
- sSpriteAnim_862AB8C,
- sSpriteAnim_862AB94
+ sAnim_ChasesAway_Kyogre_Front,
+ sAnim_ChasesAway_Kyogre_Back,
+ sAnim_ChasesAway_Kyogre_Tail
};
-static const union AnimCmd sSpriteAnim_862ABA8[] =
+static const union AnimCmd sAnim_ChasesAway_Rayquaza_FlyingDown[] =
{
ANIMCMD_FRAME(0, 1),
ANIMCMD_END
};
-static const union AnimCmd sSpriteAnim_862ABB0[] =
+static const union AnimCmd sAnim_ChasesAway_Rayquaza_Arriving[] =
{
ANIMCMD_FRAME(64, 1),
ANIMCMD_END
};
-static const union AnimCmd sSpriteAnim_862ABB8[] =
+static const union AnimCmd sAnim_ChasesAway_Rayquaza_Floating[] =
{
ANIMCMD_FRAME(128, 1),
ANIMCMD_END
};
-static const union AnimCmd sSpriteAnim_862ABC0[] =
+static const union AnimCmd sAnim_ChasesAway_Rayquaza_Shouting[] =
{
ANIMCMD_FRAME(192, 1),
ANIMCMD_END
};
-static const union AnimCmd *const sSpriteAnimTable_862ABC8[] =
+static const union AnimCmd *const sAnims_ChasesAway_Rayquaza[] =
{
- sSpriteAnim_862ABA8,
- sSpriteAnim_862ABB0,
- sSpriteAnim_862ABB8,
- sSpriteAnim_862ABC0
+ sAnim_ChasesAway_Rayquaza_FlyingDown,
+ sAnim_ChasesAway_Rayquaza_Arriving,
+ sAnim_ChasesAway_Rayquaza_Floating,
+ sAnim_ChasesAway_Rayquaza_Shouting
};
-static const union AnimCmd sSpriteAnim_862ABD8[] =
+static const union AnimCmd sAnim_ChasesAway_RayquazaTail_FlyingDown[] =
{
ANIMCMD_FRAME(0, 1),
ANIMCMD_END
};
-static const union AnimCmd sSpriteAnim_862ABE0[] =
+static const union AnimCmd sAnim_ChasesAway_RayquazaTail_Arriving[] =
{
ANIMCMD_FRAME(16, 1),
ANIMCMD_END
};
-static const union AnimCmd sSpriteAnim_862ABE8[] =
+static const union AnimCmd sAnim_ChasesAway_RayquazaTail_Floating[] =
{
ANIMCMD_FRAME(32, 1),
ANIMCMD_END
};
-static const union AnimCmd sSpriteAnim_862ABF0[] =
+static const union AnimCmd sAnim_ChasesAway_RayquazaTail_Shouting[] =
{
ANIMCMD_FRAME(48, 1),
ANIMCMD_END
};
-static const union AnimCmd *const sSpriteAnimTable_862ABF8[] =
+static const union AnimCmd *const sAnims_ChasesAway_RayquazaTail[] =
{
- sSpriteAnim_862ABD8,
- sSpriteAnim_862ABE0,
- sSpriteAnim_862ABE8,
- sSpriteAnim_862ABF0
+ sAnim_ChasesAway_RayquazaTail_FlyingDown,
+ sAnim_ChasesAway_RayquazaTail_Arriving,
+ sAnim_ChasesAway_RayquazaTail_Floating,
+ sAnim_ChasesAway_RayquazaTail_Shouting
};
-static const union AnimCmd sSpriteAnim_862AC08[] =
+static const union AnimCmd sAnim_ChasesAway_KyogreSplash[] =
{
ANIMCMD_FRAME(0, 8),
ANIMCMD_FRAME(4, 8),
@@ -1079,128 +1132,128 @@ static const union AnimCmd sSpriteAnim_862AC08[] =
ANIMCMD_JUMP(0)
};
-static const union AnimCmd *const sSpriteAnimTable_862AC24[] =
+static const union AnimCmd *const sAnims_ChasesAway_KyogreSplash[] =
{
- sSpriteAnim_862AC08
+ sAnim_ChasesAway_KyogreSplash
};
-static const struct CompressedSpriteSheet sUnknown_0862AC28 =
+static const struct CompressedSpriteSheet sSpriteSheet_ChasesAway_Groudon =
{
- gRaySceneGroudonLeft_Gfx, 0x1800, 30565
+ gRaySceneChasesAway_Groudon_Gfx, 0x1800, TAG_CHASE_GROUDON
};
-static const struct CompressedSpriteSheet sUnknown_0862AC30 =
+static const struct CompressedSpriteSheet sSpriteSheet_ChasesAway_GroudonTail =
{
- gRaySceneGroudonTail_Gfx, 0x80, 30566
+ gRaySceneChasesAway_GroudonTail_Gfx, 0x80, TAG_CHASE_GROUDON_TAIL
};
-static const struct CompressedSpriteSheet sUnknown_0862AC38 =
+static const struct CompressedSpriteSheet sSpriteSheet_ChasesAway_Kyogre =
{
- gRaySceneKyogreRight_Gfx, 0x600, 30568
+ gRaySceneChasesAway_Kyogre_Gfx, 0x600, TAG_CHASE_KYOGRE
};
-static const struct CompressedSpriteSheet sUnknown_0862AC40 =
+static const struct CompressedSpriteSheet sSpriteSheet_ChasesAway_Rayquaza =
{
- gRaySceneRayquazaHover_Gfx, 0x2000, 30569
+ gRaySceneChasesAway_Rayquaza_Gfx, 0x2000, TAG_CHASE_RAYQUAZA
};
-static const struct CompressedSpriteSheet sUnknown_0862AC48 =
+static const struct CompressedSpriteSheet sSpriteSheet_ChasesAway_RayquazaTail =
{
- gRaySceneRayquazaFlyIn_Gfx, 0x800, 30570
+ gRaySceneChasesAway_RayquazaTail_Gfx, 0x800, TAG_CHASE_RAYQUAZA_TAIL
};
-static const struct CompressedSpriteSheet sUnknown_0862AC50 =
+static const struct CompressedSpriteSheet sSpriteSheet_ChasesAway_KyogreSplash =
{
- gRaySceneSplash_Gfx, 0x300, 30571
+ gRaySceneChasesAway_KyogreSplash_Gfx, 0x300, TAG_CHASE_SPLASH
};
-static const struct CompressedSpritePalette sUnknown_0862AC58 =
+static const struct CompressedSpritePalette sSpritePal_ChasesAway_Groudon =
{
- gRaySceneGroudonLeft_Pal, 30565
+ gRaySceneChasesAway_Groudon_Pal, TAG_CHASE_GROUDON
};
-static const struct CompressedSpritePalette sUnknown_0862AC60 =
+static const struct CompressedSpritePalette sSpritePal_ChasesAway_Kyogre =
{
- gRaySceneKyogreRight_Pal, 30568
+ gRaySceneChasesAway_Kyogre_Pal, TAG_CHASE_KYOGRE
};
-static const struct CompressedSpritePalette sUnknown_0862AC68 =
+static const struct CompressedSpritePalette sSpritePal_ChasesAway_Rayquaza =
{
- gRaySceneRayquazaHover_Pal, 30569
+ gRaySceneChasesAway_Rayquaza_Pal, TAG_CHASE_RAYQUAZA
};
-static const struct CompressedSpritePalette sUnknown_0862AC70 =
+static const struct CompressedSpritePalette sSpritePal_ChasesAway_KyogreSplash =
{
- gRaySceneSplash_Pal, 30571
+ gRaySceneChasesAway_KyogreSplash_Pal, TAG_CHASE_SPLASH
};
-static const struct SpriteTemplate sUnknown_0862AC78 =
+static const struct SpriteTemplate sSpriteTemplate_ChasesAway_Groudon =
{
- .tileTag = 30565,
- .paletteTag = 30565,
- .oam = &sOamData_862A6BC,
- .anims = sSpriteAnimTable_862AB70,
+ .tileTag = TAG_CHASE_GROUDON,
+ .paletteTag = TAG_CHASE_GROUDON,
+ .oam = &sOam_64x64,
+ .anims = sAnims_ChasesAway_Groudon,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = SpriteCallbackDummy,
};
-static const struct SpriteTemplate sUnknown_0862AC90 =
+static const struct SpriteTemplate sSpriteTemplate_ChasesAway_GroudonTail =
{
- .tileTag = 30566,
- .paletteTag = 30565,
- .oam = &sOamData_862A6EC,
- .anims = sSpriteAnimTable_862AB80,
+ .tileTag = TAG_CHASE_GROUDON_TAIL,
+ .paletteTag = TAG_CHASE_GROUDON,
+ .oam = &sOam_16x16,
+ .anims = sAnims_ChasesAway_GroudonTail,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = SpriteCallbackDummy,
};
-static const struct SpriteTemplate sUnknown_0862ACA8 =
+static const struct SpriteTemplate sSpriteTemplate_ChasesAway_Kyogre =
{
- .tileTag = 30568,
- .paletteTag = 30568,
- .oam = &sOamData_862A6C4,
- .anims = sSpriteAnimTable_862AB9C,
+ .tileTag = TAG_CHASE_KYOGRE,
+ .paletteTag = TAG_CHASE_KYOGRE,
+ .oam = &sOam_32x32,
+ .anims = sAnims_ChasesAway_Kyogre,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = SpriteCallbackDummy,
};
-static const struct SpriteTemplate sUnknown_0862ACC0 =
+static const struct SpriteTemplate sSpriteTemplate_ChasesAway_Rayquaza =
{
- .tileTag = 30569,
- .paletteTag = 30569,
- .oam = &sOamData_862A6BC,
- .anims = sSpriteAnimTable_862ABC8,
+ .tileTag = TAG_CHASE_RAYQUAZA,
+ .paletteTag = TAG_CHASE_RAYQUAZA,
+ .oam = &sOam_64x64,
+ .anims = sAnims_ChasesAway_Rayquaza,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_81D961C,
+ .callback = SpriteCB_ChasesAway_Rayquaza,
};
-static const struct SpriteTemplate sUnknown_0862ACD8 =
+static const struct SpriteTemplate sSpriteTemplate_ChasesAway_RayquazaTail =
{
- .tileTag = 30570,
- .paletteTag = 30569,
- .oam = &sOamData_862A6C4,
- .anims = sSpriteAnimTable_862ABF8,
+ .tileTag = TAG_CHASE_RAYQUAZA_TAIL,
+ .paletteTag = TAG_CHASE_RAYQUAZA,
+ .oam = &sOam_32x32,
+ .anims = sAnims_ChasesAway_RayquazaTail,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = SpriteCallbackDummy,
};
-static const struct SpriteTemplate sUnknown_0862ACF0 =
+static const struct SpriteTemplate sSpriteTemplate_ChasesAway_KyogreSplash =
{
- .tileTag = 30571,
- .paletteTag = 30571,
- .oam = &sOamData_862A6F4,
- .anims = sSpriteAnimTable_862AC24,
+ .tileTag = TAG_CHASE_SPLASH,
+ .paletteTag = TAG_CHASE_SPLASH,
+ .oam = &sOam_32x8,
+ .anims = sAnims_ChasesAway_KyogreSplash,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = SpriteCallbackDummy,
};
-static const struct BgTemplate sUnknown_0862AD08[] =
+static const struct BgTemplate sBgTemplates_ChasesAway[] =
{
{
.bg = 0,
@@ -1231,26 +1284,25 @@ static const struct BgTemplate sUnknown_0862AD08[] =
}
};
-// code
-void DoRayquazaScene(u8 animId, bool8 onlyOneAnim, void (*callback)(void))
+void DoRayquazaScene(u8 animId, bool8 endEarly, void (*exitCallback)(void))
{
sRayScene = AllocZeroed(sizeof(*sRayScene));
sRayScene->animId = animId;
- sRayScene->callback = callback;
- sRayScene->onlyOneAnim = onlyOneAnim;
+ sRayScene->exitCallback = exitCallback;
+ sRayScene->endEarly = endEarly;
SetMainCallback2(CB2_InitRayquazaScene);
}
static void CB2_InitRayquazaScene(void)
{
SetVBlankHBlankCallbacksToNull();
- clear_scheduled_bg_copies_to_vram();
+ ClearScheduledBgCopiesToVram();
ScanlineEffect_Stop();
FreeAllSpritePalettes();
ResetPaletteFade();
ResetSpriteData();
ResetTasks();
- FillPalette(0, 0xF0, 0x20);
+ FillPalette(RGB_BLACK, 0xF0, 32);
CreateTask(sTasksForAnimations[sRayScene->animId], 0);
SetMainCallback2(CB2_RayquazaScene);
}
@@ -1260,7 +1312,7 @@ static void CB2_RayquazaScene(void)
RunTasks();
AnimateSprites();
BuildOamBuffer();
- do_scheduled_bg_tilemap_copies_to_vram();
+ DoScheduledBgTilemapCopiesToVram();
UpdatePaletteFade();
}
@@ -1277,7 +1329,7 @@ static void Task_EndAfterFadeScreen(u8 taskId)
{
ResetSpriteData();
FreeAllSpritePalettes();
- SetMainCallback2(sRayScene->callback);
+ SetMainCallback2(sRayScene->exitCallback);
Free(sRayScene);
DestroyTask(taskId);
}
@@ -1287,83 +1339,97 @@ static void Task_SetNextAnim(u8 taskId)
{
if (!gPaletteFade.active)
{
- if (sRayScene->onlyOneAnim == TRUE)
+ if (sRayScene->endEarly == TRUE)
{
gTasks[taskId].func = Task_EndAfterFadeScreen;
}
else
{
sRayScene->animId++;
- sRayScene->field_2004 = 0;
+ sRayScene->unk = 0;
gTasks[taskId].func = sTasksForAnimations[sRayScene->animId];
}
}
}
-static void sub_81D68C8(void)
+// The cutscene window is cropped to a narrower view, with black borders on each vertical edge
+// This function is used in scenes where sprites in these borders need to be hidden
+static void SetWindowsHideVertBorders(void)
{
- SetGpuReg(REG_OFFSET_WININ, 0x3F);
+ SetGpuReg(REG_OFFSET_WININ, WININ_WIN0_ALL);
SetGpuReg(REG_OFFSET_WINOUT, 0);
- SetGpuReg(REG_OFFSET_WIN0H, 0xF0);
- SetGpuReg(REG_OFFSET_WIN0V, 0x1888);
+ SetGpuReg(REG_OFFSET_WIN0H, WIN_RANGE(0, DISPLAY_WIDTH));
+ SetGpuReg(REG_OFFSET_WIN0V, WIN_RANGE(24, DISPLAY_HEIGHT - 24));
gPlttBufferUnfaded[0] = 0;
gPlttBufferFaded[0] = 0;
}
-static void sub_81D6904(void)
+static void ResetWindowDimensions(void)
{
- SetGpuReg(REG_OFFSET_WININ, 0x3F);
- SetGpuReg(REG_OFFSET_WINOUT, 0x3F);
+ SetGpuReg(REG_OFFSET_WININ, WININ_WIN0_ALL);
+ SetGpuReg(REG_OFFSET_WINOUT, WINOUT_WIN01_ALL);
}
+
+// RAY_ANIM_DUO_FIGHT / RAY_ANIM_DUO_FIGHT_PRE
+
+#define tTimer data[0]
+#define tHelperTaskId data[1]
+#define tGroudonSpriteId data[2]
+#define tKyogreSpriteId data[3]
+
+#define sGroudonBodySpriteId data[0]
+#define sGroudonShoulderSpriteId data[1]
+#define sGroudonClawSpriteId data[2]
+
static void Task_HandleDuoFightPre(u8 taskId)
{
s16 *data = gTasks[taskId].data;
- sub_81D750C();
+ DuoFight_AnimateRain();
if (!gPaletteFade.active)
{
- s16 counter = data[0];
- if (counter == 64)
+ s16 frame = tTimer;
+ if (frame == 64)
{
- sub_81D7438();
+ DuoFight_Lightning1();
}
- else if (counter == 144)
+ else if (frame == 144)
{
- sub_81D7480();
+ DuoFight_Lightning2();
}
else
{
- switch (counter)
+ switch (frame)
{
case 328:
DuoFightEnd(taskId, 0);
return;
case 148:
- sub_81D74C8();
+ DuoFight_LightningLong();
break;
}
}
- data[0]++;
+ tTimer++;
}
}
-static u8 sub_81D6984(void)
+static u8 DuoFightPre_CreateGroudonSprites(void)
{
u8 spriteId;
s16 *data;
- spriteId = CreateSprite(&sUnknown_0862A72C, 88, 72, 3);
- gSprites[spriteId].callback = sub_81D6A20;
+ spriteId = CreateSprite(&sSpriteTemplate_DuoFightPre_Groudon, 88, 72, 3);
+ gSprites[spriteId].callback = SpriteCB_DuoFightPre_Groudon;
data = gSprites[spriteId].data;
- data[0] = CreateSprite(&sUnknown_0862A72C, 56, 104, 3);
- data[1] = CreateSprite(&sUnknown_0862A750, 75, 101, 0);
- data[2] = CreateSprite(&sUnknown_0862A774, 109, 114, 1);
- StartSpriteAnim(&gSprites[data[0]], 1);
+ sGroudonBodySpriteId = CreateSprite(&sSpriteTemplate_DuoFightPre_Groudon, 56, 104, 3);
+ sGroudonShoulderSpriteId = CreateSprite(&sSpriteTemplate_DuoFightPre_GroudonShoulder, 75, 101, 0);
+ sGroudonClawSpriteId = CreateSprite(&sSpriteTemplate_DuoFightPre_GroudonClaw, 109, 114, 1);
+ StartSpriteAnim(&gSprites[sGroudonBodySpriteId], 1);
return spriteId;
}
-static void sub_81D6A20(struct Sprite *sprite)
+static void SpriteCB_DuoFightPre_Groudon(struct Sprite *sprite)
{
s16 *data = sprite->data;
data[5]++;
@@ -1371,54 +1437,54 @@ static void sub_81D6A20(struct Sprite *sprite)
if (data[5] == 0 && sprite->pos1.x != 72)
{
sprite->pos1.x--;
- gSprites[sprite->data[0]].pos1.x--;
- gSprites[data[1]].pos1.x--;
- gSprites[data[2]].pos1.x--;
+ gSprites[sprite->sGroudonBodySpriteId].pos1.x--;
+ gSprites[sGroudonShoulderSpriteId].pos1.x--;
+ gSprites[sGroudonClawSpriteId].pos1.x--;
}
switch (sprite->animCmdIndex)
{
case 0:
- gSprites[data[1]].pos2.x = 0;
- gSprites[data[1]].pos2.y = 0;
- gSprites[data[2]].pos2.x = 0;
- gSprites[data[2]].pos2.y = 0;
+ gSprites[sGroudonShoulderSpriteId].pos2.x = 0;
+ gSprites[sGroudonShoulderSpriteId].pos2.y = 0;
+ gSprites[sGroudonClawSpriteId].pos2.x = 0;
+ gSprites[sGroudonClawSpriteId].pos2.y = 0;
break;
case 1:
case 3:
- gSprites[data[1]].pos2.x = -1;
- gSprites[data[1]].pos2.y = 0;
- gSprites[data[2]].pos2.x = -1;
- gSprites[data[2]].pos2.y = 0;
+ gSprites[sGroudonShoulderSpriteId].pos2.x = -1;
+ gSprites[sGroudonShoulderSpriteId].pos2.y = 0;
+ gSprites[sGroudonClawSpriteId].pos2.x = -1;
+ gSprites[sGroudonClawSpriteId].pos2.y = 0;
break;
case 2:
- gSprites[data[1]].pos2.x = -1;
- gSprites[data[1]].pos2.y = 1;
- gSprites[data[2]].pos2.x = -2;
- gSprites[data[2]].pos2.y = 1;
+ gSprites[sGroudonShoulderSpriteId].pos2.x = -1;
+ gSprites[sGroudonShoulderSpriteId].pos2.y = 1;
+ gSprites[sGroudonClawSpriteId].pos2.x = -2;
+ gSprites[sGroudonClawSpriteId].pos2.y = 1;
break;
}
}
-static u8 sub_81D6B7C(void)
+static u8 DuoFightPre_CreateKyogreSprites(void)
{
u8 spriteId;
s16 *data;
- spriteId = CreateSprite(&sUnknown_0862A81C, 136, 96, 1);
- gSprites[spriteId].callback = sub_81D6D20;
+ spriteId = CreateSprite(&sSpriteTemplate_DuoFightPre_Kyogre, 136, 96, 1);
+ gSprites[spriteId].callback = SpriteCB_DuoFightPre_Kyogre;
data = gSprites[spriteId].data;
- data[0] = CreateSprite(&sUnknown_0862A81C, 168, 96, 1) << 8;
- data[0] |= CreateSprite(&sUnknown_0862A81C, 136, 112, 1);
- data[1] = CreateSprite(&sUnknown_0862A81C, 168, 112, 1) << 8;
- data[1] |= CreateSprite(&sUnknown_0862A81C, 136, 128, 1);
- data[2] = CreateSprite(&sUnknown_0862A81C, 168, 128, 1) << 8;
- data[2] |= CreateSprite(&sUnknown_0862A81C, 104, 128, 2);
- data[3] = CreateSprite(&sUnknown_0862A81C, 136, 128, 2) << 8;
- data[3] |= CreateSprite(&sUnknown_0862A81C, 184, 128, 0);
- data[4] = CreateSprite(&sUnknown_0862A84C, 208, 132, 0) << 8;
- data[4] |= CreateSprite(&sUnknown_0862A864, 200, 120, 1);
+ data[0] = CreateSprite(&sSpriteTemplate_DuoFightPre_Kyogre, 168, 96, 1) << 8;
+ data[0] |= CreateSprite(&sSpriteTemplate_DuoFightPre_Kyogre, 136, 112, 1);
+ data[1] = CreateSprite(&sSpriteTemplate_DuoFightPre_Kyogre, 168, 112, 1) << 8;
+ data[1] |= CreateSprite(&sSpriteTemplate_DuoFightPre_Kyogre, 136, 128, 1);
+ data[2] = CreateSprite(&sSpriteTemplate_DuoFightPre_Kyogre, 168, 128, 1) << 8;
+ data[2] |= CreateSprite(&sSpriteTemplate_DuoFightPre_Kyogre, 104, 128, 2);
+ data[3] = CreateSprite(&sSpriteTemplate_DuoFightPre_Kyogre, 136, 128, 2) << 8;
+ data[3] |= CreateSprite(&sSpriteTemplate_DuoFightPre_Kyogre, 184, 128, 0);
+ data[4] = CreateSprite(&sSpriteTemplate_DuoFightPre_KyogrePectoralFin, 208, 132, 0) << 8;
+ data[4] |= CreateSprite(&sSpriteTemplate_DuoFightPre_KyogreDorsalFin, 200, 120, 1);
StartSpriteAnim(&gSprites[data[0] >> 8], 1);
StartSpriteAnim(&gSprites[data[0] & 0xFF], 2);
@@ -1432,7 +1498,7 @@ static u8 sub_81D6B7C(void)
return spriteId;
}
-static void sub_81D6D20(struct Sprite *sprite)
+static void SpriteCB_DuoFightPre_Kyogre(struct Sprite *sprite)
{
s16 *data = sprite->data;
data[5]++;
@@ -1499,18 +1565,18 @@ static void VBlankCB_DuoFight(void)
ScanlineEffect_InitHBlankDmaTransfer();
}
-static void sub_81D6FE0(void)
+static void InitDuoFightSceneBgs(void)
{
ResetVramOamAndBgCntRegs();
ResetBgsAndClearDma3BusyFlags(0);
- InitBgsFromTemplates(0, sUnknown_0862A888, ARRAY_COUNT(sUnknown_0862A888));
+ InitBgsFromTemplates(0, sBgTemplates_DuoFight, ARRAY_COUNT(sBgTemplates_DuoFight));
SetBgTilemapBuffer(0, sRayScene->tilemapBuffers[0]);
SetBgTilemapBuffer(1, sRayScene->tilemapBuffers[1]);
SetBgTilemapBuffer(2, sRayScene->tilemapBuffers[2]);
ResetAllBgsCoordinates();
- schedule_bg_copy_tilemap_to_vram(0);
- schedule_bg_copy_tilemap_to_vram(1);
- schedule_bg_copy_tilemap_to_vram(2);
+ ScheduleBgCopyTilemapToVram(0);
+ ScheduleBgCopyTilemapToVram(1);
+ ScheduleBgCopyTilemapToVram(2);
SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_OBJ_ON | DISPCNT_OBJ_1D_MAP);
ShowBg(0);
ShowBg(1);
@@ -1518,46 +1584,46 @@ static void sub_81D6FE0(void)
SetGpuReg(REG_OFFSET_BLDCNT, 0);
}
-static void sub_81D706C(void)
+static void LoadDuoFightSceneGfx(void)
{
- reset_temp_tile_data_buffers();
- decompress_and_copy_tile_data_to_vram(0, gRaySceneClouds_Gfx, 0, 0, 0);
- while (free_temp_tile_data_buffers_if_possible());
-
- LZDecompressWram(gRaySceneClouds2_Tilemap, sRayScene->tilemapBuffers[0]);
- LZDecompressWram(gRaySceneClouds1_Tilemap, sRayScene->tilemapBuffers[1]);
- LZDecompressWram(gRaySceneClouds3_Tilemap, sRayScene->tilemapBuffers[2]);
- LoadCompressedPalette(gRaySceneClouds_Pal, 0, 0x40);
- LoadCompressedSpriteSheet(&sUnknown_0862A8C4);
- LoadCompressedSpriteSheet(&sUnknown_0862A8F8);
- LoadCompressedSpriteSheet(&sUnknown_0862A924);
- LoadCompressedSpriteSheet(&sUnknown_0862A9D4);
- LoadCompressedSpriteSheet(&sUnknown_0862AA14);
- LoadCompressedSpriteSheet(&sUnknown_0862AA34);
- LoadCompressedSpritePalette(&sUnknown_0862A8CC);
- LoadCompressedSpritePalette(&sUnknown_0862A9DC);
+ ResetTempTileDataBuffers();
+ DecompressAndCopyTileDataToVram(0, gRaySceneDuoFight_Clouds_Gfx, 0, 0, 0);
+ while (FreeTempTileDataBuffersIfPossible())
+ ;
+ LZDecompressWram(gRaySceneDuoFight_Clouds2_Tilemap, sRayScene->tilemapBuffers[0]);
+ LZDecompressWram(gRaySceneDuoFight_Clouds1_Tilemap, sRayScene->tilemapBuffers[1]);
+ LZDecompressWram(gRaySceneDuoFight_Clouds3_Tilemap, sRayScene->tilemapBuffers[2]);
+ LoadCompressedPalette(gRaySceneDuoFight_Clouds_Pal, 0, 0x40);
+ LoadCompressedSpriteSheet(&sSpriteSheet_DuoFight_Groudon);
+ LoadCompressedSpriteSheet(&sSpriteSheet_DuoFight_GroudonShoulder);
+ LoadCompressedSpriteSheet(&sSpriteSheet_DuoFight_GroudonClaw);
+ LoadCompressedSpriteSheet(&sSpriteSheet_DuoFight_Kyogre);
+ LoadCompressedSpriteSheet(&sSpriteSheet_DuoFight_KyogrePectoralFin);
+ LoadCompressedSpriteSheet(&sSpriteSheet_DuoFight_KyogreDorsalFin);
+ LoadCompressedSpritePalette(&sSpritePal_DuoFight_Groudon);
+ LoadCompressedSpritePalette(&sSpritePal_DuoFight_Kyogre);
}
static void Task_DuoFightAnim(u8 taskId)
{
s16 *data = gTasks[taskId].data;
ScanlineEffect_Clear();
- sub_81D6FE0();
- sub_81D706C();
+ InitDuoFightSceneBgs();
+ LoadDuoFightSceneGfx();
CpuFastFill16(0, gScanlineEffectRegBuffers, sizeof(gScanlineEffectRegBuffers));
- ScanlineEffect_SetParams(sUnknown_0862A87C);
- data[0] = 0;
- data[1] = CreateTask(sub_81D7228, 0);
+ ScanlineEffect_SetParams(sScanlineParams_DuoFight_Clouds);
+ tTimer = 0;
+ tHelperTaskId = CreateTask(Task_DuoFight_AnimateClouds, 0);
if (sRayScene->animId == RAY_ANIM_DUO_FIGHT_PRE)
{
- data[2] = sub_81D6984();
- data[3] = sub_81D6B7C();
+ tGroudonSpriteId = DuoFightPre_CreateGroudonSprites();
+ tKyogreSpriteId = DuoFightPre_CreateKyogreSprites();
gTasks[taskId].func = Task_HandleDuoFightPre;
}
else
{
- data[2] = sub_81D7664();
- data[3] = sub_81D78BC();
+ tGroudonSpriteId = DuoFight_CreateGroudonSprites();
+ tKyogreSpriteId = DuoFight_CreateKyogreSprites();
gTasks[taskId].func = Task_HandleDuoFight;
StopMapMusic();
}
@@ -1565,10 +1631,10 @@ static void Task_DuoFightAnim(u8 taskId)
BlendPalettes(-1, 0x10, 0);
BeginNormalPaletteFade(0xFFFFFFFF, 0, 0x10, 0, RGB_BLACK);
SetVBlankCallback(VBlankCB_DuoFight);
- PlaySE(SE_T_OOAME);
+ PlaySE(SE_DOWNPOUR);
}
-static void sub_81D7228(u8 taskId)
+static void Task_DuoFight_AnimateClouds(u8 taskId)
{
s16 i;
u16 *data = gTasks[taskId].data;
@@ -1630,91 +1696,95 @@ static void sub_81D7228(u8 taskId)
static void Task_HandleDuoFight(u8 taskId)
{
s16 *data = gTasks[taskId].data;
- sub_81D750C();
+ DuoFight_AnimateRain();
if (!gPaletteFade.active)
{
- s16 counter = data[0];
- if (counter == 32 || counter == 112)
+ s16 frame = tTimer;
+ if (frame == 32 || frame == 112)
{
- sub_81D7438();
+ DuoFight_Lightning1();
}
- else if (counter == 216)
+ else if (frame == 216)
{
- sub_81D7480();
+ DuoFight_Lightning2();
}
- else if (counter == 220)
+ else if (frame == 220)
{
- sub_81D74C8();
+ DuoFight_LightningLong();
}
else
{
- switch (counter)
+ switch (frame)
{
case 412:
DuoFightEnd(taskId, 2);
return;
case 380:
SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT1_BG2 | BLDCNT_TGT2_BG1 | BLDCNT_EFFECT_BLEND);
- gTasks[data[1]].func = sub_81D752C;
- gTasks[data[1]].data[0] = 0;
- gTasks[data[1]].data[2] = data[2];
- gTasks[data[1]].data[3] = data[3];
+ gTasks[tHelperTaskId].func = DuoFight_PanOffScene;
+ gTasks[tHelperTaskId].data[0] = 0;
+ gTasks[tHelperTaskId].data[2] = data[2];
+ gTasks[tHelperTaskId].data[3] = data[3];
ScanlineEffect_Stop();
break;
}
}
- data[0]++;
+ tTimer++;
}
}
-static void sub_81D7438(void)
+// In the below functions, BlendPalettesGradually flashes the bg white and the duo black
+// and gradually fades them back to original color to simulate lightning
+static void DuoFight_Lightning1(void)
{
- PlaySE(SE_T_KAMI);
- sub_80A2C44(0x7FFF, 0, 0x10, 0, -1, 0, 0);
- sub_80A2C44(0xFFFF0000, 0, 0x10, 0, 0, 0, 1);
+ PlaySE(SE_THUNDER);
+ BlendPalettesGradually(0x00007FFF, 0, 16, 0, RGB_WHITEALPHA, 0, 0);
+ BlendPalettesGradually(0xFFFF0000, 0, 16, 0, RGB_BLACK, 0, 1);
}
-static void sub_81D7480(void)
+static void DuoFight_Lightning2(void)
{
- PlaySE(SE_T_KAMI);
- sub_80A2C44(0x7FFF, 0, 0x10, 0x10, -1, 0, 0);
- sub_80A2C44(0xFFFF0000, 0, 0x10, 0x10, 0, 0, 1);
+ PlaySE(SE_THUNDER);
+ BlendPalettesGradually(0x00007FFF, 0, 16, 16, RGB_WHITEALPHA, 0, 0);
+ BlendPalettesGradually(0xFFFF0000, 0, 16, 16, RGB_BLACK, 0, 1);
}
-static void sub_81D74C8(void)
+static void DuoFight_LightningLong(void)
{
- sub_80A2C44(0x7FFF, 4, 0x10, 0, -1, 0, 0);
- sub_80A2C44(0xFFFF0000, 4, 0x10, 0, 0, 0, 1);
+ BlendPalettesGradually(0x00007FFF, 4, 16, 0, RGB_WHITEALPHA, 0, 0);
+ BlendPalettesGradually(0xFFFF0000, 4, 16, 0, RGB_BLACK, 0, 1);
}
-static void sub_81D750C(void)
+static void DuoFight_AnimateRain(void)
{
ChangeBgX(2, 0x400, 1);
ChangeBgY(2, 0x800, 2);
}
-static void sub_81D752C(u8 taskId)
+// Only used by the full version, which pans up at the end (so scene objects move down)
+// DuoFightPre just fades to black with no pan
+static void DuoFight_PanOffScene(u8 taskId)
{
u16 bgY;
s16 *data = gTasks[taskId].data;
- sub_81D7860(&gSprites[data[2]]);
- sub_81D7D14(&gSprites[data[3]]);
+ DuoFight_SlideGroudonDown(&gSprites[tGroudonSpriteId]);
+ DuoFight_SlideKyogreDown(&gSprites[tKyogreSpriteId]);
bgY = GetBgY(1);
if (GetBgY(1) == 0 || bgY > 0x8000)
ChangeBgY(1, 0x400, 2);
- if (data[0] != 16)
+ if (tTimer != 16)
{
- data[0]++;
- SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(16 - data[0], data[0]));
+ tTimer++;
+ SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(16 - tTimer, tTimer));
}
}
static void DuoFightEnd(u8 taskId, s8 palDelay)
{
- PlaySE(SE_T_OOAME_E);
+ PlaySE(SE_DOWNPOUR_STOP);
BeginNormalPaletteFade(0xFFFFFFFF, palDelay, 0, 0x10, RGB_BLACK);
gTasks[taskId].func = Task_DuoFightEnd;
}
@@ -1722,36 +1792,36 @@ static void DuoFightEnd(u8 taskId, s8 palDelay)
static void Task_DuoFightEnd(u8 taskId)
{
s16 *data = gTasks[taskId].data;
- sub_81D750C();
+ DuoFight_AnimateRain();
if (!gPaletteFade.active)
{
- DestroyTask(data[1]);
+ DestroyTask(tHelperTaskId);
ChangeBgY(1, 0, 0);
SetVBlankCallback(NULL);
ScanlineEffect_Stop();
ResetSpriteData();
FreeAllSpritePalettes();
- data[0] = 0;
+ tTimer = 0;
gTasks[taskId].func = Task_SetNextAnim;
}
}
-static u8 sub_81D7664(void)
+static u8 DuoFight_CreateGroudonSprites(void)
{
u8 spriteId;
s16 *data;
- spriteId = CreateSprite(&sUnknown_0862A8D4, 98, 72, 3);
- gSprites[spriteId].callback = sub_81D7700;
+ spriteId = CreateSprite(&sSpriteTemplate_DuoFight_Groudon, 98, 72, 3);
+ gSprites[spriteId].callback = SpriteCB_DuoFight_Groudon;
data = gSprites[spriteId].data;
- data[0] = CreateSprite(&sUnknown_0862A8D4, 66, 104, 3);
- data[1] = CreateSprite(&sUnknown_0862A900, 85, 101, 0);
- data[2] = CreateSprite(&sUnknown_0862A92C, 119, 114, 1);
- StartSpriteAnim(&gSprites[data[0]], 1);
+ sGroudonBodySpriteId = CreateSprite(&sSpriteTemplate_DuoFight_Groudon, 66, 104, 3);
+ sGroudonShoulderSpriteId = CreateSprite(&sSpriteTemplate_DuoFight_GroudonShoulder, 85, 101, 0);
+ sGroudonClawSpriteId = CreateSprite(&sSpriteTemplate_DuoFight_GroudonClaw, 119, 114, 1);
+ StartSpriteAnim(&gSprites[sGroudonBodySpriteId], 1);
return spriteId;
}
-static void sub_81D7700(struct Sprite *sprite)
+static void SpriteCB_DuoFight_Groudon(struct Sprite *sprite)
{
s16 *data = sprite->data;
data[5]++;
@@ -1759,66 +1829,66 @@ static void sub_81D7700(struct Sprite *sprite)
if (!(data[5] & 7) && sprite->pos1.x != 72)
{
sprite->pos1.x--;
- gSprites[sprite->data[0]].pos1.x--;
- gSprites[data[1]].pos1.x--;
- gSprites[data[2]].pos1.x--;
+ gSprites[sprite->sGroudonBodySpriteId].pos1.x--;
+ gSprites[sGroudonShoulderSpriteId].pos1.x--;
+ gSprites[sGroudonClawSpriteId].pos1.x--;
}
switch (sprite->animCmdIndex)
{
case 0:
- gSprites[data[1]].pos2.x = 0;
- gSprites[data[1]].pos2.y = 0;
- gSprites[data[2]].pos2.x = 0;
- gSprites[data[2]].pos2.y = 0;
+ gSprites[sGroudonShoulderSpriteId].pos2.x = 0;
+ gSprites[sGroudonShoulderSpriteId].pos2.y = 0;
+ gSprites[sGroudonClawSpriteId].pos2.x = 0;
+ gSprites[sGroudonClawSpriteId].pos2.y = 0;
break;
case 1:
case 3:
- gSprites[data[1]].pos2.x = -1;
- gSprites[data[1]].pos2.y = 0;
- gSprites[data[2]].pos2.x = -1;
- gSprites[data[2]].pos2.y = 0;
+ gSprites[sGroudonShoulderSpriteId].pos2.x = -1;
+ gSprites[sGroudonShoulderSpriteId].pos2.y = 0;
+ gSprites[sGroudonClawSpriteId].pos2.x = -1;
+ gSprites[sGroudonClawSpriteId].pos2.y = 0;
break;
case 2:
- gSprites[data[1]].pos2.x = -1;
- gSprites[data[1]].pos2.y = 1;
- gSprites[data[2]].pos2.x = -2;
- gSprites[data[2]].pos2.y = 1;
+ gSprites[sGroudonShoulderSpriteId].pos2.x = -1;
+ gSprites[sGroudonShoulderSpriteId].pos2.y = 1;
+ gSprites[sGroudonClawSpriteId].pos2.x = -2;
+ gSprites[sGroudonClawSpriteId].pos2.y = 1;
break;
}
}
-static void sub_81D7860(struct Sprite *sprite)
+static void DuoFight_SlideGroudonDown(struct Sprite *sprite)
{
s16 *data = sprite->data;
if (sprite->pos1.y <= 160)
{
sprite->pos1.y += 8;
- gSprites[sprite->data[0]].pos1.y += 8;
- gSprites[data[1]].pos1.y += 8;
- gSprites[data[2]].pos1.y += 8;
+ gSprites[sprite->sGroudonBodySpriteId].pos1.y += 8;
+ gSprites[sGroudonShoulderSpriteId].pos1.y += 8;
+ gSprites[sGroudonClawSpriteId].pos1.y += 8;
}
}
-static u8 sub_81D78BC(void)
+static u8 DuoFight_CreateKyogreSprites(void)
{
u8 spriteId;
s16 *data;
- spriteId = CreateSprite(&sUnknown_0862A9E4, 126, 96, 1);
- gSprites[spriteId].callback = sub_81D7A60;
+ spriteId = CreateSprite(&sSpriteTemplate_DuoFight_Kyogre, 126, 96, 1);
+ gSprites[spriteId].callback = SpriteCB_DuoFight_Kyogre;
data = gSprites[spriteId].data;
- data[0] = CreateSprite(&sUnknown_0862A9E4, 158, 96, 1) << 8;
- data[0] |= CreateSprite(&sUnknown_0862A9E4, 126, 112, 1);
- data[1] = CreateSprite(&sUnknown_0862A9E4, 158, 112, 1) << 8;
- data[1] |= CreateSprite(&sUnknown_0862A9E4, 126, 128, 1);
- data[2] = CreateSprite(&sUnknown_0862A9E4, 158, 128, 1) << 8;
- data[2] |= CreateSprite(&sUnknown_0862A9E4, 94, 128, 2);
- data[3] = CreateSprite(&sUnknown_0862A9E4, 126, 128, 2) << 8;
- data[3] |= CreateSprite(&sUnknown_0862A9E4, 174, 128, 0);
- data[4] = CreateSprite(&sUnknown_0862AA1C, 198, 132, 0) << 8;
- data[4] |= CreateSprite(&sUnknown_0862AA3C, 190, 120, 1);
+ data[0] = CreateSprite(&sSpriteTemplate_DuoFight_Kyogre, 158, 96, 1) << 8;
+ data[0] |= CreateSprite(&sSpriteTemplate_DuoFight_Kyogre, 126, 112, 1);
+ data[1] = CreateSprite(&sSpriteTemplate_DuoFight_Kyogre, 158, 112, 1) << 8;
+ data[1] |= CreateSprite(&sSpriteTemplate_DuoFight_Kyogre, 126, 128, 1);
+ data[2] = CreateSprite(&sSpriteTemplate_DuoFight_Kyogre, 158, 128, 1) << 8;
+ data[2] |= CreateSprite(&sSpriteTemplate_DuoFight_Kyogre, 94, 128, 2);
+ data[3] = CreateSprite(&sSpriteTemplate_DuoFight_Kyogre, 126, 128, 2) << 8;
+ data[3] |= CreateSprite(&sSpriteTemplate_DuoFight_Kyogre, 174, 128, 0);
+ data[4] = CreateSprite(&sSpriteTemplate_DuoFight_KyogrePectoralFin, 198, 132, 0) << 8;
+ data[4] |= CreateSprite(&sSpriteTemplate_DuoFight_KyogreDorsalFin, 190, 120, 1);
StartSpriteAnim(&gSprites[data[0] >> 8], 1);
StartSpriteAnim(&gSprites[data[0] & 0xFF], 2);
@@ -1832,7 +1902,7 @@ static u8 sub_81D78BC(void)
return spriteId;
}
-static void sub_81D7A60(struct Sprite *sprite)
+static void SpriteCB_DuoFight_Kyogre(struct Sprite *sprite)
{
s16 *data = sprite->data;
data[5]++;
@@ -1893,7 +1963,7 @@ static void sub_81D7A60(struct Sprite *sprite)
}
}
-static void sub_81D7D14(struct Sprite *sprite)
+static void DuoFight_SlideKyogreDown(struct Sprite *sprite)
{
s16 *data = sprite->data;
if (sprite->pos1.y <= 160)
@@ -1912,18 +1982,39 @@ static void sub_81D7D14(struct Sprite *sprite)
}
}
-static void sub_81D7E10(void)
+#undef tTimer
+#undef tHelperTaskId
+#undef tGroudonSpriteId
+#undef tKyogreSpriteId
+
+#undef sGroudonBodySpriteId
+#undef sGroudonShoulderSpriteId
+#undef sGroudonClawSpriteId
+
+
+// RAY_ANIM_TAKES_FLIGHT
+
+#define tState data[0]
+#define tTimer data[1]
+#define tScale data[2]
+#define tScaleSpeed data[3]
+#define tYCoord data[4]
+#define tYSpeed data[5]
+#define tYOffset data[6]
+#define tYOffsetDir data[7]
+
+static void InitTakesFlightSceneBgs(void)
{
ResetVramOamAndBgCntRegs();
ResetBgsAndClearDma3BusyFlags(0);
- InitBgsFromTemplates(1, sUnknown_0862AA54, ARRAY_COUNT(sUnknown_0862AA54));
+ InitBgsFromTemplates(1, sBgTemplates_TakesFlight, ARRAY_COUNT(sBgTemplates_TakesFlight));
SetBgTilemapBuffer(0, sRayScene->tilemapBuffers[0]);
SetBgTilemapBuffer(1, sRayScene->tilemapBuffers[1]);
SetBgTilemapBuffer(2, sRayScene->tilemapBuffers[2]);
ResetAllBgsCoordinates();
- schedule_bg_copy_tilemap_to_vram(0);
- schedule_bg_copy_tilemap_to_vram(1);
- schedule_bg_copy_tilemap_to_vram(2);
+ ScheduleBgCopyTilemapToVram(0);
+ ScheduleBgCopyTilemapToVram(1);
+ ScheduleBgCopyTilemapToVram(2);
SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_OBJ_ON | DISPCNT_OBJ_1D_MAP);
ShowBg(0);
ShowBg(1);
@@ -1931,99 +2022,117 @@ static void sub_81D7E10(void)
SetGpuReg(REG_OFFSET_BLDCNT, 0);
}
-static void sub_81D7E9C(void)
+static void LoadTakesFlightSceneGfx(void)
{
- reset_temp_tile_data_buffers();
- decompress_and_copy_tile_data_to_vram(0, gRaySceneClouds_Gfx, 0, 0, 0);
- decompress_and_copy_tile_data_to_vram(1, gRaySceneOvercast_Gfx, 0, 0, 0);
- decompress_and_copy_tile_data_to_vram(2, gRaySceneRayquaza_Gfx, 0, 0, 0);
- while (free_temp_tile_data_buffers_if_possible());
-
- LZDecompressWram(gRaySceneClouds2_Tilemap, sRayScene->tilemapBuffers[0]);
- LZDecompressWram(gRaySceneOvercast_Tilemap, sRayScene->tilemapBuffers[1]);
- LZDecompressWram(gRaySceneRayquaza_Tilemap, sRayScene->tilemapBuffers[2]);
- LoadCompressedPalette(gRaySceneRayquaza_Pal, 0, 0x40);
- LoadCompressedSpriteSheet(&sUnknown_0862AA90);
- LoadCompressedSpritePalette(&sUnknown_0862AA98);
+ ResetTempTileDataBuffers();
+ DecompressAndCopyTileDataToVram(0, gRaySceneDuoFight_Clouds_Gfx, 0, 0, 0); // Re-uses clouds from previous scene
+ DecompressAndCopyTileDataToVram(1, gRaySceneTakesFlight_Bg_Gfx, 0, 0, 0);
+ DecompressAndCopyTileDataToVram(2, gRaySceneTakesFlight_Rayquaza_Gfx, 0, 0, 0);
+ while (FreeTempTileDataBuffersIfPossible())
+ ;
+ LZDecompressWram(gRaySceneDuoFight_Clouds2_Tilemap, sRayScene->tilemapBuffers[0]);
+ LZDecompressWram(gRaySceneTakesFlight_Bg_Tilemap, sRayScene->tilemapBuffers[1]);
+ LZDecompressWram(gRaySceneTakesFlight_Rayquaza_Tilemap, sRayScene->tilemapBuffers[2]);
+ LoadCompressedPalette(gRaySceneTakesFlight_Rayquaza_Pal, 0, 64);
+ LoadCompressedSpriteSheet(&sSpriteSheet_TakesFlight_Smoke);
+ LoadCompressedSpritePalette(&sSpritePal_TakesFlight_Smoke);
}
static void Task_RayTakesFlightAnim(u8 taskId)
{
s16 *data = gTasks[taskId].data;
- PlayNewMapMusic(MUS_REKKUU_KOURIN);
- sub_81D7E10();
- sub_81D7E9C();
+ PlayNewMapMusic(MUS_RAYQUAZA_APPEARS);
+ InitTakesFlightSceneBgs();
+ LoadTakesFlightSceneGfx();
SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT1_OBJ | BLDCNT_TGT2_BG1 | BLDCNT_EFFECT_BLEND);
SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(8, 8));
- BlendPalettes(-1, 0x10, 0);
+ BlendPalettes(-1, 16, 0);
SetVBlankCallback(VBlankCB_RayquazaScene);
- CreateTask(sub_81D81A4, 0);
- data[0] = 0;
- data[1] = 0;
+ CreateTask(Task_TakesFlight_CreateSmoke, 0);
+ tState = 0;
+ tTimer = 0;
gTasks[taskId].func = Task_HandleRayTakesFlight;
}
+// Animate Rayquaza (flying up and down, and changing size as it gets further from the screen)
+// In this scene Rayquaza is a bg tilemap on bg 2, not a sprite
static void Task_HandleRayTakesFlight(u8 taskId)
{
s16 *data = gTasks[taskId].data;
- switch (data[0])
+ switch (tState)
{
case 0:
- if (data[1] == 8)
+ // Delay, then fade in
+ if (tTimer == 8)
{
BeginNormalPaletteFade(0xFFFFFFFF, 0, 0x10, 0, RGB_BLACK);
- data[2] = 0;
- data[3] = 30;
- data[4] = 0;
- data[5] = 7;
- data[1] = 0;
- data[0]++;
+ tScale = 0;
+ tScaleSpeed = 30;
+ tYCoord = 0;
+ tYSpeed = 7;
+ tTimer = 0;
+ tState++;
}
else
{
- data[1]++;
+ tTimer++;
}
break;
case 1:
- data[2] += data[3];
- data[4] += data[5];
- if (data[3] > 3)
- data[3] -= 3;
- if (data[5] != 0)
- data[5]--;
- if (data[2] > 255)
+ // Fly in
+ tScale += tScaleSpeed;
+ tYCoord += tYSpeed;
+
+ if (tScaleSpeed > 3)
+ tScaleSpeed -= 3;
+
+ if (tYSpeed != 0)
+ tYSpeed--;
+
+ if (tScale > 255)
{
- data[2] = 256;
- data[3] = 0;
- data[6] = 12;
- data[7] = -1;
- data[1] = 0;
- data[0]++;
+ tScale = 256;
+ tScaleSpeed = 0;
+ tYOffset = 12;
+ tYOffsetDir = -1;
+ tTimer = 0;
+ tState++;
}
- SetBgAffine(2, 0x7800, 0x1800, 0x78, data[4] + 32, data[2], data[2], 0);
+ SetBgAffine(2, 0x7800, 0x1800, 120, tYCoord + 32, tScale, tScale, 0);
break;
case 2:
- data[1]++;
- SetBgAffine(2, 0x7800, 0x1800, 0x78, data[4] + 32 + (data[6] >> 2), data[2], data[2], 0);
- data[6] += data[7];
- if (data[6] == 12 || data[6] == -12)
+ // Float up and down
+ tTimer++;
+ SetBgAffine(2, 0x7800, 0x1800, 120, tYCoord + 32 + (tYOffset >> 2), tScale, tScale, 0);
+ tYOffset += tYOffsetDir;
+ if (tYOffset == 12 || tYOffset == -12)
{
- data[7] *= -1;
- if (data[1] > 295)
+ tYOffsetDir *= -1;
+ if (tTimer > 295)
{
- data[0]++;
+ tState++;
BeginNormalPaletteFade(0xFFFFFFFF, 6, 0, 0x10, RGB_BLACK);
}
}
break;
case 3:
- data[2] += 16;
- SetBgAffine(2, 0x7800, 0x1800, 0x78, data[4] + 32, data[2], data[2], 0);
+ // Fly away, fade out
+ tScale += 16;
+ SetBgAffine(2, 0x7800, 0x1800, 120, tYCoord + 32, tScale, tScale, 0);
Task_RayTakesFlightEnd(taskId);
break;
}
}
+#undef tState
+#undef tTimer
+#undef tScale
+#undef tScaleSpeed
+#undef tYCoord
+#undef tYSpeed
+#undef tYOffset
+#undef tYOffsetDir
+
static void Task_RayTakesFlightEnd(u8 taskId)
{
if (!gPaletteFade.active)
@@ -2035,65 +2144,80 @@ static void Task_RayTakesFlightEnd(u8 taskId)
}
}
-static void sub_81D81A4(u8 taskId)
+#define tSmokeId data[0]
+#define tTimer data[1]
+
+#define sSmokeId data[0]
+#define sTimer data[1]
+
+static void Task_TakesFlight_CreateSmoke(u8 taskId)
{
s16 *data = gTasks[taskId].data;
- if ((data[1] & 3) == 0)
+ if ((tTimer & 3) == 0)
{
- u8 spriteId = CreateSprite(&sUnknown_0862AAA0,
- (sUnknown_0862AAB8[data[0]][0] * 4) + 120,
- (sUnknown_0862AAB8[data[0]][1] * 4) + 80,
+ u8 spriteId = CreateSprite(&sSpriteTemplate_TakesFlight_Smoke,
+ (sTakesFlight_SmokeCoords[tSmokeId][0] * 4) + 120,
+ (sTakesFlight_SmokeCoords[tSmokeId][1] * 4) + 80,
0);
- gSprites[spriteId].data[0] = (s8)(data[0]);
+ gSprites[spriteId].sSmokeId = (s8)(tSmokeId);
gSprites[spriteId].oam.objMode = ST_OAM_OBJ_BLEND;
gSprites[spriteId].oam.affineMode = ST_OAM_AFFINE_DOUBLE;
gSprites[spriteId].oam.priority = 2;
InitSpriteAffineAnim(&gSprites[spriteId]);
- if (data[0] == 9)
+ if (tSmokeId == MAX_SMOKE - 1)
{
DestroyTask(taskId);
return;
}
else
{
- data[0]++;
+ tSmokeId++;
}
}
- data[1]++;
+ tTimer++;
}
-static void sub_81D8260(struct Sprite *sprite)
+#undef tSmokeId
+#undef tTimer
+
+static void SpriteCB_TakesFlight_Smoke(struct Sprite *sprite)
{
- if (sprite->data[1] == 0)
+ if (sprite->sTimer == 0)
{
sprite->pos2.x = 0;
sprite->pos2.y = 0;
}
else
{
- sprite->pos2.x += sUnknown_0862AAB8[sprite->data[0]][0];
- sprite->pos2.y += sUnknown_0862AAB8[sprite->data[0]][1];
+ sprite->pos2.x += sTakesFlight_SmokeCoords[sprite->sSmokeId][0];
+ sprite->pos2.y += sTakesFlight_SmokeCoords[sprite->sSmokeId][1];
}
- sprite->data[1]++;
- sprite->data[1] &= 0xF;
+ sprite->sTimer++;
+ sprite->sTimer &= 0xF;
}
-static void sub_81D82B0(void)
+#undef sSmokeId
+#undef sTimer
+
+
+// RAY_ANIM_DESCENDS
+
+static void InitDescendsSceneBgs(void)
{
ResetVramOamAndBgCntRegs();
ResetBgsAndClearDma3BusyFlags(0);
- InitBgsFromTemplates(0, sUnknown_0862AACC, ARRAY_COUNT(sUnknown_0862AACC));
+ InitBgsFromTemplates(0, sBgTemplates_Descends, ARRAY_COUNT(sBgTemplates_Descends));
SetBgTilemapBuffer(0, sRayScene->tilemapBuffers[0]);
SetBgTilemapBuffer(1, sRayScene->tilemapBuffers[1]);
SetBgTilemapBuffer(2, sRayScene->tilemapBuffers[2]);
SetBgTilemapBuffer(3, sRayScene->tilemapBuffers[3]);
ResetAllBgsCoordinates();
- schedule_bg_copy_tilemap_to_vram(0);
- schedule_bg_copy_tilemap_to_vram(1);
- schedule_bg_copy_tilemap_to_vram(2);
- schedule_bg_copy_tilemap_to_vram(3);
+ ScheduleBgCopyTilemapToVram(0);
+ ScheduleBgCopyTilemapToVram(1);
+ ScheduleBgCopyTilemapToVram(2);
+ ScheduleBgCopyTilemapToVram(3);
SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_OBJ_ON | DISPCNT_OBJ_1D_MAP);
ShowBg(0);
ShowBg(1);
@@ -2102,65 +2226,72 @@ static void sub_81D82B0(void)
SetGpuReg(REG_OFFSET_BLDCNT, 0);
}
-static void sub_81D8358(void)
+static void LoadDescendsSceneGfx(void)
{
- reset_temp_tile_data_buffers();
- decompress_and_copy_tile_data_to_vram(0, gRaySceneRayquazaLight_Gfx, 0, 0, 0);
- decompress_and_copy_tile_data_to_vram(1, gRaySceneOvercast2_Gfx, 0, 0, 0);
- while (free_temp_tile_data_buffers_if_possible());
-
- LZDecompressWram(gRaySceneRayquazaLight_Tilemap, sRayScene->tilemapBuffers[0]);
- LZDecompressWram(gRaySceneOvercast2_Tilemap, sRayScene->tilemapBuffers[3]);
- CpuFastFill16(0, sRayScene->tilemapBuffers[2], 0x800);
- CpuFastCopy(sRayScene->tilemapBuffers[3], sRayScene->tilemapBuffers[1], 0x800);
+ ResetTempTileDataBuffers();
+ DecompressAndCopyTileDataToVram(0, gRaySceneDescends_Light_Gfx, 0, 0, 0);
+ DecompressAndCopyTileDataToVram(1, gRaySceneDescends_Bg_Gfx, 0, 0, 0);
+ while (FreeTempTileDataBuffersIfPossible())
+ ;
+ LZDecompressWram(gRaySceneDescends_Light_Tilemap, sRayScene->tilemapBuffers[0]);
+ LZDecompressWram(gRaySceneDescends_Bg_Tilemap, sRayScene->tilemapBuffers[3]);
+ CpuFastFill16(0, sRayScene->tilemapBuffers[2], BG_SCREEN_SIZE);
+ CpuFastCopy(sRayScene->tilemapBuffers[3], sRayScene->tilemapBuffers[1], BG_SCREEN_SIZE);
CpuFastFill16(0, &sRayScene->tilemapBuffers[1][0x100], 0x340);
- LoadCompressedPalette(gRaySceneOvercast2_Pal, 0, 0x40);
+ LoadCompressedPalette(gRaySceneDescends_Bg_Pal, 0, 0x40);
gPlttBufferUnfaded[0] = RGB_WHITE;
gPlttBufferFaded[0] = RGB_WHITE;
- LoadCompressedSpriteSheet(&sUnknown_0862AAFC);
- LoadCompressedSpriteSheet(&sUnknown_0862AB04);
- LoadCompressedSpritePalette(&sUnknown_0862AB0C);
+ LoadCompressedSpriteSheet(&sSpriteSheet_Descends_Rayquaza);
+ LoadCompressedSpriteSheet(&sSpriteSheet_Descends_RayquazaTail);
+ LoadCompressedSpritePalette(&sSpritePal_Descends_Rayquaza);
}
-static void sub_81D844C(void)
+// Draw ray of light emerging from the clouds
+static void HBlankCB_RayDescends(void)
{
- u16 VCOUNT = GetGpuReg(REG_OFFSET_VCOUNT);
- if (VCOUNT >= 24 && VCOUNT <= 135 && VCOUNT - 24 <= sRayScene->field_2008)
- REG_BLDALPHA = 0xD08;
+ u16 vcount = GetGpuReg(REG_OFFSET_VCOUNT);
+ if (vcount >= 24 && vcount <= 135 && vcount - 24 <= sRayScene->revealedLightLine)
+ REG_BLDALPHA = 0xD08; // This line is above where light has been revealed, draw it
else
- REG_BLDALPHA = 0x1000;
+ REG_BLDALPHA = 0x1000; // Below where light has been revealed, hide it
- if (VCOUNT == 0)
+ if (vcount == 0)
{
- if (sRayScene->field_2008 <= 0x1FFF)
+ if (sRayScene->revealedLightLine <= 0x1FFF)
{
- if (sRayScene->field_2008 <= 39)
- sRayScene->field_2008 += 4;
- else if (sRayScene->field_2008 <= 79)
- sRayScene->field_2008 += 2;
+ // Increase the number of pixel rows of the light that have been revealed
+ // Gradually slows as it reaches the bottom
+ if (sRayScene->revealedLightLine <= 39)
+ sRayScene->revealedLightLine += 4;
+ else if (sRayScene->revealedLightLine <= 79)
+ sRayScene->revealedLightLine += 2;
else
- sRayScene->field_2008 += 1;
+ sRayScene->revealedLightLine += 1;
}
- sRayScene->field_200A++;
+ // Pointless
+ sRayScene->revealedLightTimer++;
}
}
+#define tState data[0]
+#define tTimer data[1]
+
static void Task_RayDescendsAnim(u8 taskId)
{
s16 *data = gTasks[taskId].data;
- sub_81D82B0();
- sub_81D8358();
+ InitDescendsSceneBgs();
+ LoadDescendsSceneGfx();
SetGpuRegBits(REG_OFFSET_BLDCNT, BLDCNT_TGT1_BG0 | BLDCNT_TGT2_BG1 | BLDCNT_TGT2_BG2 | BLDCNT_TGT2_BG3 | BLDCNT_TGT2_OBJ | BLDCNT_EFFECT_BLEND);
SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(0, 16));
BlendPalettes(-1, 0x10, 0);
SetVBlankCallback(VBlankCB_RayquazaScene);
- sRayScene->field_2008 = 0;
- sRayScene->field_200A = 0;
- data[0] = 0;
- data[1] = 0;
- data[2] = 0;
+ sRayScene->revealedLightLine = 0;
+ sRayScene->revealedLightTimer = 0;
+ tState = 0;
+ tTimer = 0;
+ data[2] = 0; // Below data assignments do nothing
data[3] = 0;
data[4] = 0x1000;
gTasks[taskId].func = Task_HandleRayDescends;
@@ -2169,56 +2300,61 @@ static void Task_RayDescendsAnim(u8 taskId)
static void Task_HandleRayDescends(u8 taskId)
{
s16 *data = gTasks[taskId].data;
- switch (data[0])
+ switch (tState)
{
case 0:
- if (data[1] == 8)
+ // Delay, then fade in
+ if (tTimer == 8)
{
BeginNormalPaletteFade(0xFFFFFFFF, 0, 0x10, 0, RGB_BLACK);
- data[1] = 0;
- data[0]++;
+ tTimer = 0;
+ tState++;
}
else
{
- data[1]++;
+ tTimer++;
}
break;
case 1:
if (!gPaletteFade.active)
{
- if (data[1] == 10)
+ // Delay, then start ray of light
+ if (tTimer == 10)
{
- data[1] = 0;
- data[0]++;
- SetHBlankCallback(sub_81D844C);
+ tTimer = 0;
+ tState++;
+ SetHBlankCallback(HBlankCB_RayDescends);
EnableInterrupts(INTR_FLAG_HBLANK | INTR_FLAG_VBLANK);
}
else
{
- data[1]++;
+ tTimer++;
}
}
break;
case 2:
- if (data[1] == 80)
+ // Delay, then start Rayquaza emerging from clouds
+ if (tTimer == 80)
{
- data[1] = 0;
- data[0]++;
- sub_81D86CC();
+ tTimer = 0;
+ tState++;
+ CreateDescendsRayquazaSprite();
}
else
{
- data[1]++;
+ tTimer++;
}
break;
case 3:
- if (++data[1] == 368)
+ // Wait while Rayquaza descends
+ if (++tTimer == 368)
{
- data[1] = 0;
- data[0]++;
+ tTimer = 0;
+ tState++;
}
break;
case 4:
+ // Fade out
BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 0x10, RGB_BLACK);
gTasks[taskId].func = Task_RayDescendsEnd;
break;
@@ -2237,85 +2373,101 @@ static void Task_RayDescendsEnd(u8 taskId)
}
}
-static u8 sub_81D86CC(void)
+#define sTailSpriteId data[0]
+#define sTimer data[2]
+#define sXMovePeriod data[3]
+#define sYMovePeriod data[4]
+
+static u8 CreateDescendsRayquazaSprite(void)
{
- u8 spriteId = CreateSprite(&sUnknown_0862AB14, 160, 0, 0);
+ u8 spriteId = CreateSprite(&sSpriteTemplate_Descends_Rayquaza, 160, 0, 0);
s16 *data = gSprites[spriteId].data;
- data[0] = CreateSprite(&sUnknown_0862AB2C, 184, -48, 0);
- gSprites[spriteId].callback = sub_81D874C;
+ sTailSpriteId = CreateSprite(&sSpriteTemplate_Descends_RayquazaTail, 184, -48, 0);
+ gSprites[spriteId].callback = SpriteCB_Descends_Rayquaza;
gSprites[spriteId].oam.priority = 3;
- gSprites[data[0]].oam.priority = 3;
+ gSprites[sTailSpriteId].oam.priority = 3;
return spriteId;
}
-static void sub_81D874C(struct Sprite *sprite)
+static void SpriteCB_Descends_Rayquaza(struct Sprite *sprite)
{
s16 *data = sprite->data;
- s16 counter = data[2];
- if (counter == 0)
+ s16 frame = sTimer;
+
+ // Updates to Rayquaza's coords occur more frequently
+ // as time goes on (it accelerates as it emerges)
+ if (frame == 0)
{
- data[3] = 12;
- data[4] = 8;
+ sXMovePeriod = 12;
+ sYMovePeriod = 8;
}
- else if (counter == 256)
+ else if (frame == 256)
{
- data[3] = 9;
- data[4] = 7;
+ sXMovePeriod = 9;
+ sYMovePeriod = 7;
}
- else if (counter == 268)
+ else if (frame == 268)
{
- data[3] = 8;
- data[4] = 6;
+ sXMovePeriod = 8;
+ sYMovePeriod = 6;
}
- else if (counter == 280)
+ else if (frame == 280)
{
- data[3] = 7;
- data[4] = 5;
+ sXMovePeriod = 7;
+ sYMovePeriod = 5;
}
- else if (counter == 292)
+ else if (frame == 292)
{
- data[3] = 6;
- data[4] = 4;
+ sXMovePeriod = 6;
+ sYMovePeriod = 4;
}
- else if (counter == 304)
+ else if (frame == 304)
{
- data[3] = 5;
- data[4] = 3;
+ sXMovePeriod = 5;
+ sYMovePeriod = 3;
}
- else if (counter == 320)
+ else if (frame == 320)
{
- data[3] = 4;
- data[4] = 2;
+ sXMovePeriod = 4;
+ sYMovePeriod = 2;
}
- if (data[2] % data[3] == 0)
+ if (sTimer % sXMovePeriod == 0)
{
sprite->pos2.x--;
- gSprites[data[0]].pos2.x--;
+ gSprites[sTailSpriteId].pos2.x--;
}
- if (data[2] % data[4] == 0)
+ if (sTimer % sYMovePeriod == 0)
{
sprite->pos2.y++;
- gSprites[data[0]].pos2.y++;
+ gSprites[sTailSpriteId].pos2.y++;
}
- data[2]++;
+ sTimer++;
}
-static void sub_81D8828(void)
+#undef sTailSpriteId
+#undef sTimer
+#undef sXMovePeriod
+#undef sYMovePeriod
+
+
+// RAY_ANIM_CHARGES
+
+static void InitChargesSceneBgs(void)
{
ResetVramOamAndBgCntRegs();
ResetBgsAndClearDma3BusyFlags(0);
- InitBgsFromTemplates(0, sUnknown_0862AB44, ARRAY_COUNT(sUnknown_0862AB44));
+ InitBgsFromTemplates(0, sBgTemplates_Charges, ARRAY_COUNT(sBgTemplates_Charges));
SetBgTilemapBuffer(0, sRayScene->tilemapBuffers[0]);
SetBgTilemapBuffer(1, sRayScene->tilemapBuffers[1]);
SetBgTilemapBuffer(2, sRayScene->tilemapBuffers[2]);
SetBgTilemapBuffer(3, sRayScene->tilemapBuffers[3]);
ResetAllBgsCoordinates();
- schedule_bg_copy_tilemap_to_vram(0);
- schedule_bg_copy_tilemap_to_vram(1);
- schedule_bg_copy_tilemap_to_vram(2);
- schedule_bg_copy_tilemap_to_vram(3);
+ ScheduleBgCopyTilemapToVram(0);
+ ScheduleBgCopyTilemapToVram(1);
+ ScheduleBgCopyTilemapToVram(2);
+ ScheduleBgCopyTilemapToVram(3);
SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_OBJ_ON | DISPCNT_OBJ_1D_MAP | DISPCNT_WIN0_ON);
ShowBg(0);
ShowBg(1);
@@ -2324,124 +2476,151 @@ static void sub_81D8828(void)
SetGpuReg(REG_OFFSET_BLDCNT, 0);
}
-static void sub_81D88D0(void)
+static void LoadChargesSceneGfx(void)
{
- reset_temp_tile_data_buffers();
- decompress_and_copy_tile_data_to_vram(1, gRaySceneRayquazaChase_Gfx, 0, 0, 0);
- decompress_and_copy_tile_data_to_vram(2, gRaySceneChaseStreaks_Gfx, 0, 0, 0);
- decompress_and_copy_tile_data_to_vram(3, gRaySceneChaseBg_Gfx, 0, 0, 0);
- while (free_temp_tile_data_buffers_if_possible());
-
- LZDecompressWram(gRayChaseRayquazaChase2_Tilemap, sRayScene->tilemapBuffers[0]);
- LZDecompressWram(gRayChaseRayquazaChase_Tilemap, sRayScene->tilemapBuffers[1]);
- LZDecompressWram(gRaySceneChaseStreaks_Tilemap, sRayScene->tilemapBuffers[2]);
- LZDecompressWram(gRaySceneChaseBg_Tilemap, sRayScene->tilemapBuffers[3]);
- LoadCompressedPalette(gRaySceneChase_Pal, 0, 0x80);
+ ResetTempTileDataBuffers();
+ DecompressAndCopyTileDataToVram(1, gRaySceneCharges_Rayquaza_Gfx, 0, 0, 0);
+ DecompressAndCopyTileDataToVram(2, gRaySceneCharges_Streaks_Gfx, 0, 0, 0);
+ DecompressAndCopyTileDataToVram(3, gRaySceneCharges_Bg_Gfx, 0, 0, 0);
+ while (FreeTempTileDataBuffersIfPossible())
+ ;
+ LZDecompressWram(gRaySceneCharges_Orbs_Tilemap, sRayScene->tilemapBuffers[0]);
+ LZDecompressWram(gRaySceneCharges_Rayquaza_Tilemap, sRayScene->tilemapBuffers[1]);
+ LZDecompressWram(gRaySceneCharges_Streaks_Tilemap, sRayScene->tilemapBuffers[2]);
+ LZDecompressWram(gRaySceneCharges_Bg_Tilemap, sRayScene->tilemapBuffers[3]);
+ LoadCompressedPalette(gRaySceneCharges_Bg_Pal, 0, 0x80);
}
+#define tState data[0]
+#define tTimer data[1]
+#define tRayquazaTaskId data[2]
+#define tSoundTimer data[3]
+
static void Task_RayChargesAnim(u8 taskId)
{
s16 *data = gTasks[taskId].data;
- sub_81D8828();
- sub_81D88D0();
- sub_81D68C8();
+ InitChargesSceneBgs();
+ LoadChargesSceneGfx();
+ SetWindowsHideVertBorders();
BlendPalettes(-1, 0x10, 0);
SetVBlankCallback(VBlankCB_RayquazaScene);
- data[0] = 0;
- data[1] = 0;
- data[2] = CreateTask(sub_81D8AD8, 0);
+ tState = 0;
+ tTimer = 0;
+ tRayquazaTaskId = CreateTask(Task_RayCharges_ShakeRayquaza, 0);
gTasks[taskId].func = Task_HandleRayCharges;
}
static void Task_HandleRayCharges(u8 taskId)
{
s16 *data = gTasks[taskId].data;
- sub_81D8BB4();
- if ((data[3] & 7) == 0 && data[0] <= 1 && data[1] <= 89)
- PlaySE(SE_OP_BASYU);
+ RayCharges_AnimateBg();
+ if ((tSoundTimer & 7) == 0 && tState <= 1 && tTimer <= 89)
+ PlaySE(SE_INTRO_BLAST);
- data[3]++;
- switch (data[0])
+ tSoundTimer++;
+ switch (tState)
{
case 0:
- if (data[1] == 8)
+ // Delay, then fade in
+ if (tTimer == 8)
{
BeginNormalPaletteFade(0xFFFFFFFF, 0, 0x10, 0, RGB_BLACK);
- data[1] = 0;
- data[0]++;
+ tTimer = 0;
+ tState++;
}
else
{
- data[1]++;
+ tTimer++;
}
break;
case 1:
- if (data[1] == 127)
+ // Delay while Rayquaza shakes, then start Rayquaza moving offscreen
+ if (tTimer == 127)
{
- data[1] = 0;
- data[0]++;
- gTasks[data[2]].func = sub_81D8B2C;
+ tTimer = 0;
+ tState++;
+ gTasks[tRayquazaTaskId].func = Task_RayCharges_FlyOffscreen;
}
else
{
- data[1]++;
+ tTimer++;
}
break;
case 2:
- if (data[1] == 12)
+ // Delay for Rayquaza's flying animation
+ if (tTimer == 12)
{
- data[1] = 0;
- data[0]++;
+ tTimer = 0;
+ tState++;
}
else
{
- data[1]++;
+ tTimer++;
}
break;
case 3:
+ // Fade out
BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 0x10, RGB_BLACK);
gTasks[taskId].func = Task_RayChargesEnd;
break;
}
}
-static void sub_81D8AD8(u8 taskId)
+#undef tState
+#undef tTimer
+#undef tSoundTimer
+
+#define tState data[0]
+#define tOffset data[1]
+#define tShakeDir data[2]
+#define tTimer data[15]
+
+static void Task_RayCharges_ShakeRayquaza(u8 taskId)
{
s16 *data = gTasks[taskId].data;
- if ((data[15] & 3) == 0)
+ if ((tTimer & 3) == 0)
{
ChangeBgX(1, (Random() % 8 - 4) << 8, 0);
ChangeBgY(1, (Random() % 8 - 4) << 8, 0);
}
- data[15]++;
+ tTimer++;
}
-static void sub_81D8B2C(u8 taskId)
+// Rayquaza backs up then launches forward
+static void Task_RayCharges_FlyOffscreen(u8 taskId)
{
s16 *data = gTasks[taskId].data;
- if (data[0] == 0)
+ if (tState == 0)
{
ChangeBgX(1, 0, 0);
ChangeBgY(1, 0, 0);
- data[0]++;
- data[1] = 10;
- data[2] = -1;
+ tState++;
+ tOffset = 10;
+ tShakeDir = -1;
}
- else if (data[0] == 1)
+ else if (tState == 1)
{
- ChangeBgX(1, data[1] << 8, 2);
- ChangeBgY(1, data[1] << 8, 1);
- data[1] += data[2];
- if (data[1] == -10)
- data[2] *= -1;
+ ChangeBgX(1, tOffset << 8, 2);
+ ChangeBgY(1, tOffset << 8, 1);
+ tOffset += tShakeDir;
+ if (tOffset == -10)
+ tShakeDir *= -1;
}
}
-static void sub_81D8BB4(void)
+#undef tState
+#undef tOffset
+#undef tShakeDir
+#undef tTimer
+
+static void RayCharges_AnimateBg(void)
{
+ // Update yellow orbs
ChangeBgX(2, 0x400, 2);
ChangeBgY(2, 0x400, 1);
+
+ // Update blue streaks
ChangeBgX(0, 0x800, 2);
ChangeBgY(0, 0x800, 1);
}
@@ -2449,28 +2628,33 @@ static void sub_81D8BB4(void)
static void Task_RayChargesEnd(u8 taskId)
{
s16 *data = gTasks[taskId].data;
- sub_81D8BB4();
+ RayCharges_AnimateBg();
if (!gPaletteFade.active)
{
SetVBlankCallback(NULL);
- sub_81D6904();
- DestroyTask(data[2]);
+ ResetWindowDimensions();
+ DestroyTask(tRayquazaTaskId);
gTasks[taskId].func = Task_SetNextAnim;
}
}
-static void sub_81D8C38(void)
+#undef tRayquazaTaskId
+
+
+// RAY_ANIM_CHASES_AWAY
+
+static void InitChasesAwaySceneBgs(void)
{
ResetVramOamAndBgCntRegs();
ResetBgsAndClearDma3BusyFlags(0);
- InitBgsFromTemplates(1, sUnknown_0862AD08, ARRAY_COUNT(sUnknown_0862AD08));
+ InitBgsFromTemplates(1, sBgTemplates_ChasesAway, ARRAY_COUNT(sBgTemplates_ChasesAway));
SetBgTilemapBuffer(0, sRayScene->tilemapBuffers[0]);
SetBgTilemapBuffer(1, sRayScene->tilemapBuffers[1]);
SetBgTilemapBuffer(2, sRayScene->tilemapBuffers[2]);
ResetAllBgsCoordinates();
- schedule_bg_copy_tilemap_to_vram(0);
- schedule_bg_copy_tilemap_to_vram(1);
- schedule_bg_copy_tilemap_to_vram(2);
+ ScheduleBgCopyTilemapToVram(0);
+ ScheduleBgCopyTilemapToVram(1);
+ ScheduleBgCopyTilemapToVram(2);
SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_OBJ_ON | DISPCNT_OBJ_1D_MAP | DISPCNT_WIN0_ON);
ShowBg(0);
ShowBg(1);
@@ -2478,237 +2662,287 @@ static void sub_81D8C38(void)
SetGpuReg(REG_OFFSET_BLDCNT, 0);
}
-static void sub_81D8CC4(void)
-{
- reset_temp_tile_data_buffers();
- decompress_and_copy_tile_data_to_vram(2, gRaySceneHushRing_Gfx, 0, 0, 0);
- decompress_and_copy_tile_data_to_vram(0, gRaySceneHushBg_Gfx, 0, 0, 0);
- while (free_temp_tile_data_buffers_if_possible());
-
- LZDecompressWram(gRaySceneHushRing_Tilemap, sRayScene->tilemapBuffers[1]);
- LZDecompressWram(gRaySceneHushBg_Tilemap, sRayScene->tilemapBuffers[0]);
- LZDecompressWram(gRaySceneHushRing_Map, sRayScene->tilemapBuffers[2]);
- LoadCompressedPalette(gRaySceneHushBg_Pal, 0, 0x60);
- LoadCompressedSpriteSheet(&sUnknown_0862AC28);
- LoadCompressedSpriteSheet(&sUnknown_0862AC30);
- LoadCompressedSpriteSheet(&sUnknown_0862AC38);
- LoadCompressedSpriteSheet(&sUnknown_0862AC40);
- LoadCompressedSpriteSheet(&sUnknown_0862AC48);
- LoadCompressedSpriteSheet(&sUnknown_0862AC50);
- LoadCompressedSpritePalette(&sUnknown_0862AC58);
- LoadCompressedSpritePalette(&sUnknown_0862AC60);
- LoadCompressedSpritePalette(&sUnknown_0862AC68);
- LoadCompressedSpritePalette(&sUnknown_0862AC70);
-}
+static void LoadChasesAwaySceneGfx(void)
+{
+ ResetTempTileDataBuffers();
+ DecompressAndCopyTileDataToVram(2, gRaySceneChasesAway_Ring_Gfx, 0, 0, 0);
+ DecompressAndCopyTileDataToVram(0, gRaySceneChasesAway_Light_Gfx, 0, 0, 0);
+ while (FreeTempTileDataBuffersIfPossible())
+ ;
+ LZDecompressWram(gRaySceneChasesAway_Bg_Tilemap, sRayScene->tilemapBuffers[1]);
+ LZDecompressWram(gRaySceneChasesAway_Light_Tilemap, sRayScene->tilemapBuffers[0]);
+ LZDecompressWram(gRaySceneChasesAway_Ring_Tilemap, sRayScene->tilemapBuffers[2]);
+ LoadCompressedPalette(gRaySceneChasesAway_Bg_Pal, 0, 0x60);
+ LoadCompressedSpriteSheet(&sSpriteSheet_ChasesAway_Groudon);
+ LoadCompressedSpriteSheet(&sSpriteSheet_ChasesAway_GroudonTail);
+ LoadCompressedSpriteSheet(&sSpriteSheet_ChasesAway_Kyogre);
+ LoadCompressedSpriteSheet(&sSpriteSheet_ChasesAway_Rayquaza);
+ LoadCompressedSpriteSheet(&sSpriteSheet_ChasesAway_RayquazaTail);
+ LoadCompressedSpriteSheet(&sSpriteSheet_ChasesAway_KyogreSplash);
+ LoadCompressedSpritePalette(&sSpritePal_ChasesAway_Groudon);
+ LoadCompressedSpritePalette(&sSpritePal_ChasesAway_Kyogre);
+ LoadCompressedSpritePalette(&sSpritePal_ChasesAway_Rayquaza);
+ LoadCompressedSpritePalette(&sSpritePal_ChasesAway_KyogreSplash);
+}
+
+#define tState data[0]
+#define tTimer data[1]
+#define tBgTaskId data[2]
static void Task_RayChasesAwayAnim(u8 taskId)
{
s16 *data = gTasks[taskId].data;
- sub_81D8C38();
- sub_81D8CC4();
- sub_81D68C8();
+ InitChasesAwaySceneBgs();
+ LoadChasesAwaySceneGfx();
+ SetWindowsHideVertBorders();
ClearGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_BG2_ON);
SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT1_BG0 | BLDCNT_TGT2_BG1 | BLDCNT_EFFECT_BLEND);
SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(9, 14));
BlendPalettes(-1, 0x10, 0);
SetVBlankCallback(VBlankCB_RayquazaScene);
- data[0] = 0;
- data[1] = 0;
+ tState = 0;
+ tTimer = 0;
gTasks[taskId].func = Task_HandleRayChasesAway;
- data[2] = CreateTask(sub_81D8FB0, 0);
- gTasks[data[2]].data[0] = 0;
- gTasks[data[2]].data[1] = 0;
- gTasks[data[2]].data[2] = 0;
- gTasks[data[2]].data[3] = 1;
- gTasks[data[2]].data[4] = 1;
+ tBgTaskId = CreateTask(Task_ChasesAway_AnimateBg, 0);
+ gTasks[tBgTaskId].data[0] = 0;
+ gTasks[tBgTaskId].data[1] = 0;
+ gTasks[tBgTaskId].data[2] = 0;
+ gTasks[tBgTaskId].data[3] = 1;
+ gTasks[tBgTaskId].data[4] = 1;
}
static void Task_HandleRayChasesAway(u8 taskId)
{
s16 *data = gTasks[taskId].data;
- switch (data[0])
+ switch (tState)
{
case 0:
- if (data[1] == 8)
+ // Delay, then fade in
+ if (tTimer == 8)
{
- sub_81D90A8(taskId);
+ ChasesAway_CreateTrioSprites(taskId);
BeginNormalPaletteFade(0xFFFFFFFF, 0, 0x10, 0, RGB_BLACK);
- data[1] = 0;
- data[0]++;
+ tTimer = 0;
+ tState++;
}
else
{
- data[1]++;
+ tTimer++;
}
break;
case 1:
- if (gSprites[data[5]].callback == sub_81D97E0)
+ // Wait for Rayquaza to enter and finish shout anim
+ if (gSprites[data[5]].callback == SpriteCB_ChasesAway_RayquazaFloat)
{
- if (data[1] == 64)
+ // Delay, then start Groudon/Kyogre leaving
+ if (tTimer == 64)
{
- sub_81D94D4(taskId);
- sub_81D93D8(taskId);
- data[1] = 0;
- data[0]++;
+ ChasesAway_KyogreStartLeave(taskId);
+ ChasesAway_GroudonStartLeave(taskId);
+ tTimer = 0;
+ tState++;
}
else
{
- data[1]++;
+ tTimer++;
}
}
break;
case 2:
- if (data[1] == 448)
+ // Wait for Groudon/Kyogre to leave
+ if (tTimer == 448)
{
- data[1] = 0;
- data[0]++;
+ tTimer = 0;
+ tState++;
}
else
{
- data[1]++;
- if (data[1] % 144 == 0)
+ // Flash bg white and trio black a few times
+ tTimer++;
+ if (tTimer % 144 == 0)
{
- sub_80A2C44(0xFFFE, 0, 0x10, 0, -1, 0, 0);
- sub_80A2C44(0xFFFF0000, 0, 0x10, 0, 0, 0, 1);
+ BlendPalettesGradually(0x0000FFFE, 0, 16, 0, RGB_WHITEALPHA, 0, 0);
+ BlendPalettesGradually(0xFFFF0000, 0, 16, 0, RGB_BLACK, 0, 1);
}
}
break;
case 3:
+ // Fade out
BeginNormalPaletteFade(0xFFFFFFFF, 4, 0, 0x10, RGB_BLACK);
gTasks[taskId].func = Task_RayChasesAwayEnd;
break;
}
}
-static void sub_81D8FB0(u8 taskId)
+#undef tState
+#undef tTimer
+
+#define tTimer data[0]
+#define tBlendHi data[1]
+#define tBlendLo data[2]
+#define tBlendHiDir data[3]
+#define tBlendLoDir data[4]
+
+// Flickers the ray of light behind Rayquaza
+static void Task_ChasesAway_AnimateBg(u8 taskId)
{
s16 *data = gTasks[taskId].data;
- if ((data[0] & 0xF) == 0)
+ if ((tTimer & 0xF) == 0)
{
- SetGpuReg(REG_OFFSET_BLDALPHA, ((data[1] + 14) << 8 & 0x1F00) | ((data[2] + 9) & 0xF));
- data[1] -= data[3];
- data[2] += data[4];
- if (data[1] == -3 || data[1] == 0)
- data[3] *= -1;
- if (data[2] == 3 || data[2] == 0)
- data[4] *= -1;
+ SetGpuReg(REG_OFFSET_BLDALPHA, ((tBlendHi + 14) << 8 & 0x1F00) | ((tBlendLo + 9) & 0xF));
+ tBlendHi -= tBlendHiDir;
+ tBlendLo += tBlendLoDir;
+ if (tBlendHi == -3 || tBlendHi == 0)
+ tBlendHiDir *= -1;
+ if (tBlendLo == 3 || tBlendLo == 0)
+ tBlendLoDir *= -1;
}
- data[0]++;
+ tTimer++;
}
+#undef tTimer
+#undef tBlendHi
+#undef tBlendLo
+#undef tBlendHiDir
+#undef tBlendLoDir
+
+#define tTimer data[1]
+
static void Task_RayChasesAwayEnd(u8 taskId)
{
s16 *data = gTasks[taskId].data;
if (!gPaletteFade.active)
{
StopMapMusic();
- if (data[1] == 0)
+ if (tTimer == 0)
{
SetVBlankCallback(NULL);
- sub_81D6904();
+ ResetWindowDimensions();
ResetSpriteData();
FreeAllSpritePalettes();
- DestroyTask(data[2]);
+ DestroyTask(tBgTaskId);
}
- if (data[1] == 32)
+ if (tTimer == 32)
{
- data[1] = 0;
+ tTimer = 0;
gTasks[taskId].func = Task_SetNextAnim;
}
else
{
- data[1]++;
+ tTimer++;
}
}
}
-static void sub_81D90A8(u8 taskId)
+#undef tTimer
+#undef tBgTaskId
+
+#define tGroudonSpriteId taskData[3]
+#define tKyogreSpriteId taskData[4]
+#define tRayquazaSpriteId taskData[5]
+
+static void ChasesAway_CreateTrioSprites(u8 taskId)
{
s16 *taskData, *spriteData;
taskData = gTasks[taskId].data;
- taskData[3] = CreateSprite(&sUnknown_0862AC78, 64, 120, 0);
- spriteData = gSprites[taskData[3]].data;
- spriteData[0] = CreateSprite(&sUnknown_0862AC90, 16, 130, 0);
- gSprites[taskData[3]].oam.priority = 1;
+ tGroudonSpriteId = CreateSprite(&sSpriteTemplate_ChasesAway_Groudon, 64, 120, 0);
+ spriteData = gSprites[tGroudonSpriteId].data;
+ spriteData[0] = CreateSprite(&sSpriteTemplate_ChasesAway_GroudonTail, 16, 130, 0);
+ gSprites[tGroudonSpriteId].oam.priority = 1;
gSprites[spriteData[0]].oam.priority = 1;
- taskData[4] = CreateSprite(&sUnknown_0862ACA8, 160, 128, 1);
- spriteData = gSprites[taskData[4]].data;
- spriteData[0] = CreateSprite(&sUnknown_0862ACA8, 192, 128, 1);
- spriteData[1] = CreateSprite(&sUnknown_0862ACA8, 224, 128, 1);
- gSprites[taskData[4]].oam.priority = 1;
+ tKyogreSpriteId = CreateSprite(&sSpriteTemplate_ChasesAway_Kyogre, 160, 128, 1);
+ spriteData = gSprites[tKyogreSpriteId].data;
+ spriteData[0] = CreateSprite(&sSpriteTemplate_ChasesAway_Kyogre, 192, 128, 1);
+ spriteData[1] = CreateSprite(&sSpriteTemplate_ChasesAway_Kyogre, 224, 128, 1);
+ gSprites[tKyogreSpriteId].oam.priority = 1;
gSprites[spriteData[0]].oam.priority = 1;
gSprites[spriteData[1]].oam.priority = 1;
StartSpriteAnim(&gSprites[spriteData[0]], 1);
StartSpriteAnim(&gSprites[spriteData[1]], 2);
- taskData[5] = CreateSprite(&sUnknown_0862ACC0, 120, -65, 0);
- spriteData = gSprites[taskData[5]].data;
- spriteData[0] = CreateSprite(&sUnknown_0862ACD8, 120, -113, 0);
- gSprites[taskData[5]].oam.priority = 1;
+ tRayquazaSpriteId = CreateSprite(&sSpriteTemplate_ChasesAway_Rayquaza, 120, -65, 0);
+ spriteData = gSprites[tRayquazaSpriteId].data;
+ spriteData[0] = CreateSprite(&sSpriteTemplate_ChasesAway_RayquazaTail, 120, -113, 0);
+ gSprites[tRayquazaSpriteId].oam.priority = 1;
gSprites[spriteData[0]].oam.priority = 1;
}
-static void sub_81D9274(u8 taskId)
+#define sBodyPartSpriteId1 data[0]
+#define sBodyPartSpriteId2 data[1]
+#define sTimer data[4]
+#define sDecel data[5]
+#define sSpeed data[6]
+#define sIsKyogre data[7]
+
+static void ChasesAway_PushDuoBack(u8 taskId)
{
s16 *taskData = gTasks[taskId].data;
- gSprites[taskData[3]].callback = sub_81D9338;
- gSprites[taskData[3]].data[4] = 0;
- gSprites[taskData[3]].data[5] = 0;
- gSprites[taskData[3]].data[6] = 4;
- gSprites[taskData[3]].data[7] = 0;
+ gSprites[tGroudonSpriteId].callback = SpriteCB_ChasesAway_DuoRingPush;
+ gSprites[tGroudonSpriteId].sTimer = 0;
+ gSprites[tGroudonSpriteId].sDecel = 0;
+ gSprites[tGroudonSpriteId].sSpeed = 4;
+ gSprites[tGroudonSpriteId].sIsKyogre = FALSE;
- gSprites[taskData[4]].callback = sub_81D9338;
- gSprites[taskData[4]].data[4] = 0;
- gSprites[taskData[4]].data[5] = 0;
- gSprites[taskData[4]].data[6] = 4;
- gSprites[taskData[4]].data[7] = 1;
+ gSprites[tKyogreSpriteId].callback = SpriteCB_ChasesAway_DuoRingPush;
+ gSprites[tKyogreSpriteId].sTimer = 0;
+ gSprites[tKyogreSpriteId].sDecel = 0;
+ gSprites[tKyogreSpriteId].sSpeed = 4;
+ gSprites[tKyogreSpriteId].sIsKyogre = TRUE;
}
-static void sub_81D9338(struct Sprite *sprite)
+// Pushes Groudon/Kyogre back slightly, for when Rayquaza's hyper voice ring comes out
+static void SpriteCB_ChasesAway_DuoRingPush(struct Sprite *sprite)
{
- if ((sprite->data[4] & 7) == 0)
+ if ((sprite->sTimer & 7) == 0)
{
- if (sprite->data[7] == 0)
+ if (!sprite->sIsKyogre)
{
- sprite->pos1.x -= sprite->data[6];
- gSprites[sprite->data[0]].pos1.x -= sprite->data[6];
+ sprite->pos1.x -= sprite->sSpeed;
+ gSprites[sprite->sBodyPartSpriteId1].pos1.x -= sprite->sSpeed;
}
else
{
- sprite->pos1.x += sprite->data[6];
- gSprites[sprite->data[0]].pos1.x += sprite->data[6];
- gSprites[sprite->data[1]].pos1.x += sprite->data[6];
+ sprite->pos1.x += sprite->sSpeed;
+ gSprites[sprite->sBodyPartSpriteId1].pos1.x += sprite->sSpeed;
+ gSprites[sprite->sBodyPartSpriteId2].pos1.x += sprite->sSpeed;
}
- sprite->data[5]++;
- sprite->data[6] -= sprite->data[5];
- if (sprite->data[5] == 3)
+ sprite->sDecel++;
+ sprite->sSpeed -= sprite->sDecel;
+ if (sprite->sDecel == 3)
{
- sprite->data[4] = 0;
- sprite->data[5] = 0;
- sprite->data[6] = 0;
+ sprite->sTimer = 0;
+ sprite->sDecel = 0;
+ sprite->sSpeed = 0;
sprite->callback = SpriteCallbackDummy;
return;
}
}
- sprite->data[4]++;
+ sprite->sTimer++;
}
-static void sub_81D93D8(u8 taskId)
+#undef sBodyPartSpriteId1
+#undef sBodyPartSpriteId2
+#undef sTimer
+#undef sDecel
+#undef sSpeed
+#undef sIsKyogre
+
+static void ChasesAway_GroudonStartLeave(u8 taskId)
{
s16 *taskData = gTasks[taskId].data;
- gSprites[taskData[3]].callback = sub_81D9420;
- StartSpriteAnim(&gSprites[taskData[3]], 1);
+ gSprites[tGroudonSpriteId].callback = SpriteCB_ChasesAway_GroudonLeave;
+ StartSpriteAnim(&gSprites[tGroudonSpriteId], 1);
}
-static void sub_81D9420(struct Sprite *sprite)
+static void SpriteCB_ChasesAway_GroudonLeave(struct Sprite *sprite)
{
switch (sprite->animCmdIndex)
{
@@ -2733,19 +2967,19 @@ static void sub_81D9420(struct Sprite *sprite)
}
}
-static void sub_81D94D4(u8 taskId)
+static void ChasesAway_KyogreStartLeave(u8 taskId)
{
s16 *taskData, *spriteData;
taskData = gTasks[taskId].data;
- spriteData = gSprites[taskData[4]].data;
+ spriteData = gSprites[tKyogreSpriteId].data;
- gSprites[taskData[4]].callback = sub_81D9528;
- gSprites[spriteData[0]].callback = sub_81D9528;
- gSprites[spriteData[1]].callback = sub_81D9528;
+ gSprites[tKyogreSpriteId].callback = SpriteCB_ChasesAway_KyogreLeave;
+ gSprites[spriteData[0]].callback = SpriteCB_ChasesAway_KyogreLeave;
+ gSprites[spriteData[1]].callback = SpriteCB_ChasesAway_KyogreLeave;
}
-static void sub_81D9528(struct Sprite *sprite)
+static void SpriteCB_ChasesAway_KyogreLeave(struct Sprite *sprite)
{
if ((sprite->data[4] & 3) == 0)
{
@@ -2756,9 +2990,9 @@ static void sub_81D9528(struct Sprite *sprite)
}
if (sprite->data[5] == 128)
{
- sprite->data[7] = CreateSprite(&sUnknown_0862ACF0, 152, 132, 0);
+ sprite->data[7] = CreateSprite(&sSpriteTemplate_ChasesAway_KyogreSplash, 152, 132, 0);
gSprites[sprite->data[7]].oam.priority = 1;
- sprite->data[7] = CreateSprite(&sUnknown_0862ACF0, 224, 132, 0);
+ sprite->data[7] = CreateSprite(&sSpriteTemplate_ChasesAway_KyogreSplash, 224, 132, 0);
gSprites[sprite->data[7]].oam.priority = 1;
gSprites[sprite->data[7]].hFlip = 1;
sprite->data[5]++;
@@ -2777,150 +3011,174 @@ static void sub_81D9528(struct Sprite *sprite)
}
if (sprite->data[4] % 64 == 0)
- PlaySE(SE_W250);
+ PlaySE(SE_M_WHIRLPOOL);
sprite->data[4]++;
}
-static void sub_81D961C(struct Sprite *sprite)
+#define sTailSpriteId data[0]
+#define sYOffset data[4]
+#define sYOffsetDir data[5]
+#define sFloatTimer data[6]
+#define sTimer data[7]
+
+#define sTailFloatDelay data[4]
+#define sTailFloatPeak data[5]
+
+static void SpriteCB_ChasesAway_Rayquaza(struct Sprite *sprite)
{
- s16 counter = sprite->data[7];
- if (counter <= 64)
+ s16 frame = sprite->sTimer;
+ if (frame <= 64)
{
sprite->pos2.y += 2;
- gSprites[sprite->data[0]].pos2.y += 2;
- if (sprite->data[7] == 64)
+ gSprites[sprite->sTailSpriteId].pos2.y += 2;
+ if (sprite->sTimer == 64)
{
- sub_81D9868(sprite, 1, 0, -48);
- sprite->data[4] = 5;
- sprite->data[5] = -1;
- gSprites[sprite->data[0]].data[4] = 3;
- gSprites[sprite->data[0]].data[5] = 5;
+ ChasesAway_SetRayquazaAnim(sprite, 1, 0, -48);
+ sprite->sYOffset = 5;
+ sprite->sYOffsetDir = -1;
+ gSprites[sprite->sTailSpriteId].sTailFloatDelay = 3;
+ gSprites[sprite->sTailSpriteId].sTailFloatPeak = 5;
}
}
- else if (counter <= 111)
+ else if (frame <= 111)
{
- sub_81D97E0(sprite);
- if (sprite->data[4] == 0)
- PlaySE(SE_BT_START);
- if (sprite->data[4] == -3)
- sub_81D9868(sprite, 2, 48, 16);
+ SpriteCB_ChasesAway_RayquazaFloat(sprite);
+ if (sprite->sYOffset == 0)
+ PlaySE(SE_MUGSHOT);
+ if (sprite->sYOffset == -3)
+ ChasesAway_SetRayquazaAnim(sprite, 2, 48, 16);
}
- else if (counter == 112)
+ else if (frame == 112)
{
- gSprites[sprite->data[0]].data[4] = 7;
- gSprites[sprite->data[0]].data[5] = 3;
- sub_81D97E0(sprite);
+ gSprites[sprite->sTailSpriteId].sTailFloatDelay = 7;
+ gSprites[sprite->sTailSpriteId].sTailFloatPeak = 3;
+ SpriteCB_ChasesAway_RayquazaFloat(sprite);
}
- else if (counter <= 327)
+ else if (frame <= 327)
{
- sub_81D97E0(sprite);
+ SpriteCB_ChasesAway_RayquazaFloat(sprite);
}
- else if (counter == 328)
+ else if (frame == 328)
{
- sub_81D97E0(sprite);
- sub_81D9868(sprite, 3, 48, 16);
+ SpriteCB_ChasesAway_RayquazaFloat(sprite);
+ ChasesAway_SetRayquazaAnim(sprite, 3, 48, 16);
sprite->pos2.x = 1;
- gSprites[sprite->data[0]].pos2.x = 1;
+ gSprites[sprite->sTailSpriteId].pos2.x = 1;
PlayCry1(SPECIES_RAYQUAZA, 0);
- CreateTask(sub_81D98B4, 0);
+ CreateTask(Task_ChasesAway_AnimateRing, 0);
}
else
{
- switch (counter)
+ switch (frame)
{
case 376:
sprite->pos2.x = 0;
- gSprites[sprite->data[0]].pos2.x = 0;
- sub_81D97E0(sprite);
- sub_81D9868(sprite, 2, 48, 16);
- sprite->callback = sub_81D97E0;
+ gSprites[sprite->sTailSpriteId].pos2.x = 0;
+ SpriteCB_ChasesAway_RayquazaFloat(sprite);
+ ChasesAway_SetRayquazaAnim(sprite, 2, 48, 16);
+ sprite->callback = SpriteCB_ChasesAway_RayquazaFloat;
return;
case 352:
- sub_81D9274(FindTaskIdByFunc(Task_HandleRayChasesAway));
+ ChasesAway_PushDuoBack(FindTaskIdByFunc(Task_HandleRayChasesAway));
break;
}
}
- if (sprite->data[7] > 328 && (sprite->data[7] & 1) == 0)
+ if (sprite->sTimer > 328 && (sprite->sTimer & 1) == 0)
{
sprite->pos2.x *= -1;
- gSprites[sprite->data[0]].pos2.x = sprite->pos2.x;
+ gSprites[sprite->sTailSpriteId].pos2.x = sprite->pos2.x;
}
- sprite->data[7]++;
+ sprite->sTimer++;
}
-static void sub_81D97E0(struct Sprite *sprite)
+static void SpriteCB_ChasesAway_RayquazaFloat(struct Sprite *body)
{
- struct Sprite *sprite2 = &gSprites[sprite->data[0]];
- if (!(sprite->data[6] & sprite2->data[4]))
+ struct Sprite *tail = &gSprites[body->sTailSpriteId];
+ if (!(body->sFloatTimer & tail->sTailFloatDelay))
{
- sprite->pos2.y += sprite->data[4];
- gSprites[sprite->data[0]].pos2.y += sprite->data[4];
- sprite->data[4] += sprite->data[5];
- if (sprite->data[4] >= sprite2->data[5] || sprite->data[4] <= -sprite2->data[5])
+ body->pos2.y += body->sYOffset;
+ gSprites[body->sTailSpriteId].pos2.y += body->sYOffset; // why access gSprites again? tail->pos2.y would be sufficient
+ body->sYOffset += body->sYOffsetDir;
+ if (body->sYOffset >= tail->sTailFloatPeak || body->sYOffset <= -tail->sTailFloatPeak)
{
- if (sprite->data[4] > sprite2->data[5])
- sprite->data[4] = sprite2->data[5];
- else if (sprite->data[4] < -sprite2->data[5])
- sprite->data[4] = -sprite2->data[5];
+ if (body->sYOffset > tail->sTailFloatPeak)
+ body->sYOffset = tail->sTailFloatPeak;
+ else if (body->sYOffset < -tail->sTailFloatPeak)
+ body->sYOffset = -tail->sTailFloatPeak;
- sprite->data[5] *= -1;
+ body->sYOffsetDir *= -1;
}
}
- sprite->data[6]++;
+ body->sFloatTimer++;
}
-static void sub_81D9868(struct Sprite *sprite, u8 animNum, s16 x, s16 y)
+static void ChasesAway_SetRayquazaAnim(struct Sprite *body, u8 animNum, s16 x, s16 y)
{
- struct Sprite *sprite2 = &gSprites[sprite->data[0]];
+ struct Sprite *tail = &gSprites[body->sTailSpriteId];
- sprite2->pos1.x = sprite->pos1.x + x;
- sprite2->pos1.y = sprite->pos1.y + y;
+ tail->pos1.x = body->pos1.x + x;
+ tail->pos1.y = body->pos1.y + y;
- sprite2->pos2.x = sprite->pos2.x;
- sprite2->pos2.y = sprite->pos2.y;
+ tail->pos2.x = body->pos2.x;
+ tail->pos2.y = body->pos2.y;
- StartSpriteAnim(sprite, animNum);
- StartSpriteAnim(sprite2, animNum);
+ StartSpriteAnim(body, animNum);
+ StartSpriteAnim(tail, animNum);
}
-static void sub_81D98B4(u8 taskId)
+#undef sTailSpriteId
+#undef sYOffset
+#undef sYOffsetDir
+#undef sFloatTimer
+#undef sTimer
+#undef sTailFloatDelay
+#undef sTailFloatPeak
+
+#define tState data[0]
+#define tScale data[1]
+#define tNumRings data[2]
+#define tScaleTimer data[3]
+#define tScaleSpeed data[4]
+#define tSoundTimer data[5]
+
+static void Task_ChasesAway_AnimateRing(u8 taskId)
{
s16 *data = gTasks[taskId].data;
- switch (data[0])
+ switch (tState)
{
case 0:
- SetBgAffine(2, 0x4000, 0x4000, 0x78, 0x40, 0x100, 0x100, 0);
+ SetBgAffine(2, 0x4000, 0x4000, 120, 64, 256, 256, 0);
SetGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_BG2_ON);
- data[4] = 16;
- data[0]++;
+ tScaleSpeed = 16;
+ tState++;
break;
case 1:
- if (data[5] == 8)
- PlaySE(SE_JIDO_DOA);
- if (data[2] == 2)
+ if (tSoundTimer == 8)
+ PlaySE(SE_SLIDING_DOOR);
+ if (tNumRings == 2)
{
- data[0]++;
+ tState++;
}
else
{
- data[1] += data[4];
- data[5]++;
- if (data[3] % 3 == 0 && data[4] != 4)
- data[4] -= 2;
-
- data[3]++;
- SetBgAffine(2, 0x4000, 0x4000, 0x78, 0x40, 0x100 - data[1], 0x100 - data[1], 0);
- if (data[1] > 255)
+ tScale += tScaleSpeed;
+ tSoundTimer++;
+ if (tScaleTimer % 3 == 0 && tScaleSpeed != 4)
+ tScaleSpeed -= 2;
+
+ tScaleTimer++;
+ SetBgAffine(2, 0x4000, 0x4000, 120, 64, 256 - tScale, 256 - tScale, 0);
+ if (tScale > 255)
{
- data[1] = 0;
- data[3] = 0;
- data[5] = 0;
- data[4] = 16;
- data[2]++;
+ tScale = 0;
+ tScaleTimer = 0;
+ tSoundTimer = 0;
+ tScaleSpeed = 16;
+ tNumRings++;
}
}
break;
diff --git a/src/record_mixing.c b/src/record_mixing.c
index 3a93d72f8..6c0a02d8c 100644
--- a/src/record_mixing.c
+++ b/src/record_mixing.c
@@ -169,10 +169,9 @@ static const u8 gUnknown_0858CFBE[3][4] =
#define BUFFER_CHUNK_SIZE 200
-// Note: VAR_0x8005 contains the spotId.
void RecordMixingPlayerSpotTriggered(void)
{
- sub_80B37D4(Task_RecordMixing_Main);
+ CreateTask_EnterCableClubSeat(Task_RecordMixing_Main);
}
// these variables were const in R/S, but had to become changeable because of saveblocks changing RAM position
@@ -232,7 +231,7 @@ static void PrepareExchangePacket(void)
if (Link_AnyPartnersPlayingRubyOrSapphire())
{
- if (sub_800A03C() == 0)
+ if (LinkDummy_Return2() == 0)
PrepareUnknownExchangePacket(&sSentRecord->ruby);
else
PrepareExchangePacketForRubySapphire(&sSentRecord->ruby);
@@ -303,7 +302,7 @@ static void Task_RecordMixing_SoundEffect(u8 taskId)
{
if (++gTasks[taskId].tCounter == 50)
{
- PlaySE(SE_W213);
+ PlaySE(SE_M_ATTRACT);
gTasks[taskId].tCounter = 0;
}
}
@@ -327,7 +326,7 @@ static void Task_RecordMixing_Main(u8 taskId)
VarSet(VAR_TEMP_0, 1);
gUnknown_03001130 = FALSE;
PrepareExchangePacket();
- CreateRecordMixingSprite();
+ CreateRecordMixingLights();
tState = 1;
data[10] = CreateTask(Task_MixingRecordsRecv, 80);
tSndEffTaskId = CreateTask(Task_RecordMixing_SoundEffect, 81);
@@ -337,21 +336,21 @@ static void Task_RecordMixing_Main(u8 taskId)
{
tState = 2;
FlagSet(FLAG_SYS_MIX_RECORD);
- DestroyRecordMixingSprite();
+ DestroyRecordMixingLights();
DestroyTask(tSndEffTaskId);
}
break;
case 2:
data[10] = CreateTask(Task_DoRecordMixing, 10);
tState = 3;
- PlaySE(SE_W226);
+ PlaySE(SE_M_BATON_PASS);
break;
case 3: // wait for Task_DoRecordMixing
if (!gTasks[data[10]].isActive)
{
tState = 4;
if (gWirelessCommType == 0)
- data[10] = sub_80B3050();
+ data[10] = CreateTask_ReestablishCableClubLink();
PrintTextOnRecordMixing(gText_RecordMixingComplete);
data[8] = 0;
@@ -502,7 +501,7 @@ static void Task_SendPacket(u8 taskId)
break;
case 1:
if (GetMultiplayerId() == 0)
- sub_800A4D8(1);
+ SendBlockRequest(1);
task->data[0]++;
break;
case 2:
@@ -527,7 +526,7 @@ static void Task_CopyReceiveBuffer(u8 taskId)
u8 status = GetBlockReceivedStatus();
u8 handledPlayers = 0;
- if (status == sub_800A9D8())
+ if (status == GetLinkPlayerCountAsBitFlags())
{
u8 i;
@@ -873,8 +872,12 @@ static void ReceiveDaycareMailData(struct RecordMixingDayCareMail *src, size_t r
var2 = sub_80E7A9C(&_src->mail[1]);
if (!var1 && var2)
{
- register u8 one asm("r0") = 1; // boo, a fakematch
- sp24[j][1] = one;
+ #ifndef NONMATCHING
+ register u8 one asm("r0") = 1; // boo, a fakematch
+ sp24[j][1] = one;
+ #else
+ sp24[j][1] = 1;
+ #endif
}
else if ((var1 && var2) || (!var1 && !var2))
{
@@ -974,7 +977,7 @@ static void Task_DoRecordMixing(u8 taskId)
case 4: // Wait 10 frames
if (++task->data[1] > 10)
{
- sub_800AC34();
+ SetCloseLinkCallback();
task->data[0] ++;
}
break;
@@ -987,12 +990,12 @@ static void Task_DoRecordMixing(u8 taskId)
case 6:
if (!sub_801048C(FALSE))
{
- CreateTask(sub_8153688, 5);
+ CreateTask(Task_LinkSave, 5);
task->data[0] ++;
}
break;
- case 7: // wait for sub_8153688 to finish.
- if (!FuncIsActiveTask(sub_8153688))
+ case 7: // wait for Task_LinkSave to finish.
+ if (!FuncIsActiveTask(Task_LinkSave))
{
if (gWirelessCommType)
{
@@ -1006,7 +1009,7 @@ static void Task_DoRecordMixing(u8 taskId)
}
break;
case 8:
- sub_800ADF8();
+ SetLinkStandbyCallback();
task->data[0] ++;
break;
case 9:
diff --git a/src/region_map.c b/src/region_map.c
index 0ee30527f..3438ea3ed 100644
--- a/src/region_map.c
+++ b/src/region_map.c
@@ -9,7 +9,6 @@
#include "trig.h"
#include "constants/maps.h"
#include "overworld.h"
-#include "constants/flags.h"
#include "event_data.h"
#include "secret_base.h"
#include "string_util.h"
@@ -130,30 +129,30 @@ static const u8 sRegionMap_MapSectionLayout[] = INCBIN_U8("graphics/pokenav/regi
static const u16 sRegionMap_SpecialPlaceLocations[][2] =
{
- {MAPSEC_UNDERWATER_TERRA_CAVE, MAPSEC_ROUTE_105},
- {MAPSEC_UNDERWATER_124, MAPSEC_ROUTE_124},
- {MAPSEC_UNDERWATER_UNK1, MAPSEC_ROUTE_129},
- {MAPSEC_UNDERWATER_125, MAPSEC_ROUTE_126},
- {MAPSEC_UNDERWATER_126, MAPSEC_ROUTE_127},
- {MAPSEC_UNDERWATER_127, MAPSEC_ROUTE_128},
- {MAPSEC_UNDERWATER_129, MAPSEC_ROUTE_129},
- {MAPSEC_UNDERWATER_SOOTOPOLIS, MAPSEC_SOOTOPOLIS_CITY},
- {MAPSEC_UNDERWATER_128, MAPSEC_ROUTE_128},
- {MAPSEC_AQUA_HIDEOUT, MAPSEC_LILYCOVE_CITY},
- {MAPSEC_AQUA_HIDEOUT_OLD, MAPSEC_LILYCOVE_CITY},
- {MAPSEC_MAGMA_HIDEOUT, MAPSEC_ROUTE_112},
- {MAPSEC_UNDERWATER_SEALED_CHAMBER, MAPSEC_ROUTE_134},
- {MAPSEC_PETALBURG_WOODS, MAPSEC_ROUTE_104},
- {MAPSEC_JAGGED_PASS, MAPSEC_ROUTE_112},
- {MAPSEC_MT_PYRE, MAPSEC_ROUTE_122},
- {MAPSEC_SKY_PILLAR, MAPSEC_ROUTE_131},
- {MAPSEC_MIRAGE_TOWER, MAPSEC_ROUTE_111},
- {MAPSEC_TRAINER_HILL, MAPSEC_ROUTE_111},
- {MAPSEC_DESERT_UNDERPASS, MAPSEC_ROUTE_114},
- {MAPSEC_ALTERING_CAVE, MAPSEC_ROUTE_103},
- {MAPSEC_ARTISAN_CAVE, MAPSEC_ROUTE_103},
- {MAPSEC_ABANDONED_SHIP, MAPSEC_ROUTE_108},
- {MAPSEC_NONE, MAPSEC_NONE}
+ {MAPSEC_UNDERWATER_105, MAPSEC_ROUTE_105},
+ {MAPSEC_UNDERWATER_124, MAPSEC_ROUTE_124},
+ {MAPSEC_UNDERWATER_125, MAPSEC_ROUTE_129}, // BUG: Map will incorrectly display the name of Route 129 when diving on Route 125 (for Marine Cave only)
+ {MAPSEC_UNDERWATER_126, MAPSEC_ROUTE_126},
+ {MAPSEC_UNDERWATER_127, MAPSEC_ROUTE_127},
+ {MAPSEC_UNDERWATER_128, MAPSEC_ROUTE_128},
+ {MAPSEC_UNDERWATER_129, MAPSEC_ROUTE_129},
+ {MAPSEC_UNDERWATER_SOOTOPOLIS, MAPSEC_SOOTOPOLIS_CITY},
+ {MAPSEC_UNDERWATER_SEAFLOOR_CAVERN, MAPSEC_ROUTE_128},
+ {MAPSEC_AQUA_HIDEOUT, MAPSEC_LILYCOVE_CITY},
+ {MAPSEC_AQUA_HIDEOUT_OLD, MAPSEC_LILYCOVE_CITY},
+ {MAPSEC_MAGMA_HIDEOUT, MAPSEC_ROUTE_112},
+ {MAPSEC_UNDERWATER_SEALED_CHAMBER, MAPSEC_ROUTE_134},
+ {MAPSEC_PETALBURG_WOODS, MAPSEC_ROUTE_104},
+ {MAPSEC_JAGGED_PASS, MAPSEC_ROUTE_112},
+ {MAPSEC_MT_PYRE, MAPSEC_ROUTE_122},
+ {MAPSEC_SKY_PILLAR, MAPSEC_ROUTE_131},
+ {MAPSEC_MIRAGE_TOWER, MAPSEC_ROUTE_111},
+ {MAPSEC_TRAINER_HILL, MAPSEC_ROUTE_111},
+ {MAPSEC_DESERT_UNDERPASS, MAPSEC_ROUTE_114},
+ {MAPSEC_ALTERING_CAVE, MAPSEC_ROUTE_103},
+ {MAPSEC_ARTISAN_CAVE, MAPSEC_ROUTE_103},
+ {MAPSEC_ABANDONED_SHIP, MAPSEC_ROUTE_108},
+ {MAPSEC_NONE, MAPSEC_NONE}
};
static const u16 sMarineCaveMapSecIds[] =
@@ -547,15 +546,15 @@ bool8 LoadRegionMapGfx(void)
{
case 0:
if (gRegionMap->bgManaged)
- decompress_and_copy_tile_data_to_vram(gRegionMap->bgNum, sRegionMapBg_GfxLZ, 0, 0, 0);
+ DecompressAndCopyTileDataToVram(gRegionMap->bgNum, sRegionMapBg_GfxLZ, 0, 0, 0);
else
LZ77UnCompVram(sRegionMapBg_GfxLZ, (u16 *)BG_CHAR_ADDR(2));
break;
case 1:
if (gRegionMap->bgManaged)
{
- if (!free_temp_tile_data_buffers_if_possible())
- decompress_and_copy_tile_data_to_vram(gRegionMap->bgNum, sRegionMapBg_TilemapLZ, 0, 0, 1);
+ if (!FreeTempTileDataBuffersIfPossible())
+ DecompressAndCopyTileDataToVram(gRegionMap->bgNum, sRegionMapBg_TilemapLZ, 0, 0, 1);
}
else
{
@@ -563,7 +562,7 @@ bool8 LoadRegionMapGfx(void)
}
break;
case 2:
- if (!free_temp_tile_data_buffers_if_possible())
+ if (!FreeTempTileDataBuffersIfPossible())
LoadPalette(sRegionMapBg_Pal, 0x70, 0x60);
break;
case 3:
@@ -999,7 +998,7 @@ static void InitMapBasedOnPlayerLocation(void)
mapHeight = gMapHeader.mapLayout->height;
x = gSaveBlock1Ptr->pos.x;
y = gSaveBlock1Ptr->pos.y;
- if (gRegionMap->mapSecId == MAPSEC_UNDERWATER_128 || gRegionMap->mapSecId == MAPSEC_UNDERWATER_MARINE_CAVE)
+ if (gRegionMap->mapSecId == MAPSEC_UNDERWATER_SEAFLOOR_CAVERN || gRegionMap->mapSecId == MAPSEC_UNDERWATER_MARINE_CAVE)
gRegionMap->playerIsInCave = TRUE;
break;
case MAP_TYPE_UNDERGROUND:
@@ -1090,7 +1089,7 @@ static void InitMapBasedOnPlayerLocation(void)
x = 0;
break;
case MAPSEC_ROUTE_126:
- case MAPSEC_UNDERWATER_125:
+ case MAPSEC_UNDERWATER_126:
x = 0;
if (gSaveBlock1Ptr->pos.x > 32)
x++;
@@ -1684,7 +1683,7 @@ void CB2_OpenFlyMap(void)
break;
case 3:
LoadUserWindowBorderGfx(0, 0x65, 0xd0);
- clear_scheduled_bg_copies_to_vram();
+ ClearScheduledBgCopiesToVram();
gMain.state++;
break;
case 4:
@@ -1710,7 +1709,7 @@ void CB2_OpenFlyMap(void)
PutWindowTilemap(2);
FillWindowPixelBuffer(2, PIXEL_FILL(0));
AddTextPrinterParameterized(2, 1, gText_FlyToWhere, 0, 1, 0, NULL);
- schedule_bg_copy_tilemap_to_vram(0);
+ ScheduleBgCopyTilemapToVram(0);
gMain.state++;
break;
case 8:
@@ -1747,7 +1746,7 @@ static void CB2_FlyMap(void)
sFlyMap->callback();
AnimateSprites();
BuildOamBuffer();
- do_scheduled_bg_tilemap_copies_to_vram();
+ DoScheduledBgTilemapCopiesToVram();
}
static void SetFlyMapCallback(void callback(void))
@@ -1778,7 +1777,7 @@ static void DrawFlyDestTextWindow(void)
AddTextPrinterParameterized(1, 1, sFlyMap->regionMap.mapSecName, 0, 1, 0, NULL);
name = sMultiNameFlyDestinations[i].name[sFlyMap->regionMap.posWithinMapSec];
AddTextPrinterParameterized(1, 1, name, GetStringRightAlignXOffset(1, name, 96), 17, 0, NULL);
- schedule_bg_copy_tilemap_to_vram(0);
+ ScheduleBgCopyTilemapToVram(0);
gUnknown_03001180 = TRUE;
}
break;
@@ -1796,7 +1795,7 @@ static void DrawFlyDestTextWindow(void)
FillWindowPixelBuffer(0, PIXEL_FILL(1));
}
AddTextPrinterParameterized(0, 1, sFlyMap->regionMap.mapSecName, 0, 1, 0, NULL);
- schedule_bg_copy_tilemap_to_vram(0);
+ ScheduleBgCopyTilemapToVram(0);
gUnknown_03001180 = FALSE;
}
}
@@ -1809,7 +1808,7 @@ static void DrawFlyDestTextWindow(void)
}
FillWindowPixelBuffer(0, PIXEL_FILL(1));
CopyWindowToVram(0, 2);
- schedule_bg_copy_tilemap_to_vram(0);
+ ScheduleBgCopyTilemapToVram(0);
gUnknown_03001180 = FALSE;
}
}
diff --git a/src/reset_rtc_screen.c b/src/reset_rtc_screen.c
index 07e96f3bd..204eb6733 100644
--- a/src/reset_rtc_screen.c
+++ b/src/reset_rtc_screen.c
@@ -293,7 +293,7 @@ static void HideChooseTimeWindow(u8 windowId)
{
ClearStdWindowAndFrameToTransparent(windowId, FALSE);
RemoveWindow(windowId);
- schedule_bg_copy_tilemap_to_vram(0);
+ ScheduleBgCopyTilemapToVram(0);
}
static void PrintTime(u8 windowId, u8 x, u8 y, u16 days, u8 hours, u8 minutes, u8 seconds)
@@ -323,7 +323,7 @@ static void ShowChooseTimeWindow(u8 windowId, u16 days, u8 hours, u8 minutes, u8
DrawStdFrameWithCustomTileAndPalette(windowId, FALSE, 0x214, 0xE);
PrintTime(windowId, 0, 1, days, hours, minutes, seconds);
AddTextPrinterParameterized(windowId, 1, gText_Confirm2, 126, 1, 0, NULL);
- schedule_bg_copy_tilemap_to_vram(0);
+ ScheduleBgCopyTilemapToVram(0);
}
static bool32 MoveTimeUpDown(s16 *val, int minVal, int maxVal, u16 keys)
@@ -467,10 +467,10 @@ void CB2_InitResetRtcScreen(void)
static void sub_809F048(void)
{
- clear_scheduled_bg_copies_to_vram();
+ ClearScheduledBgCopiesToVram();
ResetBgsAndClearDma3BusyFlags(0);
InitBgsFromTemplates(0, sBackgroundTemplates, ARRAY_COUNT(sBackgroundTemplates));
- schedule_bg_copy_tilemap_to_vram(0);
+ ScheduleBgCopyTilemapToVram(0);
SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_OBJ_ON | DISPCNT_OBJ_1D_MAP);
ShowBg(0);
InitWindows(sUnknown_08510408);
@@ -483,7 +483,7 @@ static void CB2_ResetRtcScreen(void)
RunTasks();
AnimateSprites();
BuildOamBuffer();
- do_scheduled_bg_tilemap_copies_to_vram();
+ DoScheduledBgTilemapCopiesToVram();
UpdatePaletteFade();
}
@@ -498,7 +498,7 @@ static void ShowMessage(const u8 *str)
{
DrawDialogFrameWithCustomTileAndPalette(1, FALSE, 0x200, 0xF);
AddTextPrinterParameterized(1, 1, str, 0, 1, 0, NULL);
- schedule_bg_copy_tilemap_to_vram(0);
+ ScheduleBgCopyTilemapToVram(0);
}
static void Task_ShowResetRtcPrompt(u8 taskId)
@@ -529,7 +529,7 @@ static void Task_ShowResetRtcPrompt(u8 taskId)
gSaveBlock2Ptr->lastBerryTreeUpdate.seconds);
ShowMessage(gText_ResetRTCConfirmCancel);
CopyWindowToVram(0, 2);
- schedule_bg_copy_tilemap_to_vram(0);
+ ScheduleBgCopyTilemapToVram(0);
data[0]++;
case 1:
if (gMain.newKeys & B_BUTTON)
@@ -611,7 +611,7 @@ static void Task_ResetRtcScreen(u8 taskId)
if (TrySavingData(SAVE_NORMAL) == SAVE_STATUS_OK)
{
ShowMessage(gText_SaveCompleted);
- PlaySE(SE_PINPON);
+ PlaySE(SE_DING_DONG);
}
else
{
diff --git a/src/rom_81520A8.c b/src/rom_81520A8.c
deleted file mode 100644
index 8b10d44d0..000000000
--- a/src/rom_81520A8.c
+++ /dev/null
@@ -1,218 +0,0 @@
-#include "global.h"
-#include "rom_81520A8.h"
-#include "malloc.h"
-#include "main.h"
-#include "digit_obj_util.h"
-
-static EWRAM_DATA struct
-{
- u8 count;
- struct UnkStruct_81520A8 *unk4;
-} *sUnknown_0203ABB8 = NULL;
-
-void sub_81520A8(void *dest, u16 value, u8 left, u8 top, u8 width, u8 height) // Unused.
-{
- u8 i;
- u8 j;
- u8 x;
- u8 y;
-
- for (i = 0, y = top; i < height; i++)
- {
- for (x = left, j = 0; j < width; j++)
- {
- *(u16 *)((dest) + (y * 64 + x * 2)) = value;
- x = (x + 1) % 32;
- }
- y = (y + 1) % 32;
- }
-}
-
-void sub_8152134(void *dest, const u16 *src, u8 left, u8 top, u8 width, u8 height) // Unused.
-{
- u8 i;
- u8 j;
- u8 x;
- u8 y;
- const u16 *_src;
-
- for (i = 0, _src = src, y = top; i < height; i++)
- {
- for (x = left, j = 0; j < width; j++)
- {
- *(u16 *)((dest) + (y * 64 + x * 2)) = *(_src++);
- x = (x + 1) % 32;
- }
- y = (y + 1) % 32;
- }
-}
-
-bool32 sub_81521C0(u8 count)
-{
- u8 i = 0;
-
- if (count == 0)
- return FALSE;
- if (count > 64)
- count = 64;
-
- sUnknown_0203ABB8 = AllocZeroed(sizeof(*sUnknown_0203ABB8));
- if (sUnknown_0203ABB8 == NULL)
- return FALSE;
- sUnknown_0203ABB8->unk4 = AllocZeroed(count * sizeof(struct UnkStruct_81520A8));
- if (sUnknown_0203ABB8->unk4 == NULL)
- {
- FREE_AND_SET_NULL(sUnknown_0203ABB8);
- return FALSE;
- }
-
- sUnknown_0203ABB8->count = count;
- for (i = 0; i < count; i++)
- {
- memcpy(&sUnknown_0203ABB8->unk4[i].oam, &gDummyOamData, sizeof(struct OamData));
- sUnknown_0203ABB8->unk4[i].unk19_2 = TRUE;
- }
-
- return TRUE;
-}
-
-bool32 sub_8152254(void)
-{
- u8 i = 0;
-
- if (sUnknown_0203ABB8 == NULL)
- return FALSE;
-
- for (i = 0; i < sUnknown_0203ABB8->count; i++)
- memcpy(&gMain.oamBuffer[i + 64], &gDummyOamData, sizeof(struct OamData));
-
- memset(sUnknown_0203ABB8->unk4, 0, sUnknown_0203ABB8->count * sizeof(struct UnkStruct_81520A8));
- FREE_AND_SET_NULL(sUnknown_0203ABB8->unk4);
- memset(sUnknown_0203ABB8, 0, sizeof(*sUnknown_0203ABB8));
- FREE_AND_SET_NULL(sUnknown_0203ABB8);
-
- return TRUE;
-}
-
-bool32 sub_81522D4(void)
-{
- u8 i = 0;
-
- if (sUnknown_0203ABB8 == NULL || sUnknown_0203ABB8->unk4 == NULL)
- return FALSE;
-
- for (i = 0; i < sUnknown_0203ABB8->count; i++)
- {
- if (sUnknown_0203ABB8->unk4[i].unk19_0 && sUnknown_0203ABB8->unk4[i].unk19_1)
- {
- if (sUnknown_0203ABB8->unk4[i].callback != NULL)
- sUnknown_0203ABB8->unk4[i].callback(&sUnknown_0203ABB8->unk4[i]);
-
- if (sUnknown_0203ABB8->unk4[i].unk19_2)
- {
- memcpy(&gMain.oamBuffer[i + 64], &gDummyOamData, sizeof(struct OamData));
- }
- else
- {
- sUnknown_0203ABB8->unk4[i].oam.y = sUnknown_0203ABB8->unk4[i].y + sUnknown_0203ABB8->unk4[i].yDelta;
- sUnknown_0203ABB8->unk4[i].oam.x = sUnknown_0203ABB8->unk4[i].x + sUnknown_0203ABB8->unk4[i].xDelta;
- sUnknown_0203ABB8->unk4[i].oam.priority = sUnknown_0203ABB8->unk4[i].priority;
- sUnknown_0203ABB8->unk4[i].oam.tileNum = sUnknown_0203ABB8->unk4[i].tileNum;
- memcpy(&gMain.oamBuffer[i + 64], &sUnknown_0203ABB8->unk4[i], sizeof(struct OamData));
- }
- }
- }
-
- return TRUE;
-}
-
-static bool32 sub_81523F4(struct UnkStruct_81520A8 *structPtr, u8 arg1)
-{
- u16 tileStart;
-
- if (structPtr == NULL)
- return FALSE;
-
- tileStart = GetSpriteTileStartByTag(structPtr->tileTag);
- if (tileStart == 0xFFFF)
- return FALSE;
-
- structPtr->unk18 = arg1;
- structPtr->tileNum = (GetTilesPerImage(structPtr->oam.shape, structPtr->oam.size) * arg1) + tileStart;
- return TRUE;
-}
-
-u8 sub_8152438(u8 id, void (*func)(struct UnkStruct_81520A8 *))
-{
- if (sUnknown_0203ABB8 == NULL || id >= sUnknown_0203ABB8->count)
- return 0xFF;
- else if (!sUnknown_0203ABB8->unk4[id].unk19_0)
- return 0xFF;
-
- sUnknown_0203ABB8->unk4[id].callback = func;
- return id;
-}
-
-u8 sub_8152474(u8 id, u8 dataArrayId, s16 dataValue)
-{
- if (sUnknown_0203ABB8 == NULL || id >= sUnknown_0203ABB8->count)
- return 0xFF;
- else if (!sUnknown_0203ABB8->unk4[id].unk19_0 || dataArrayId >= ARRAY_COUNT(sUnknown_0203ABB8->unk4[id].data))
- return 0xFF;
-
- sUnknown_0203ABB8->unk4[id].data[dataArrayId] = dataValue;
- return id;
-}
-
-u8 sub_81524C4(const struct OamData *oam, u16 tileTag, u16 palTag, s16 x, s16 y, u8 arg5, u8 priority)
-{
- struct UnkStruct_81520A8 *structPtr = NULL;
- u8 i;
-
- if (sUnknown_0203ABB8 == NULL || oam == NULL)
- return 0xFF;
-
- for (i = 0; i < sUnknown_0203ABB8->count; i++)
- {
- if (!sUnknown_0203ABB8->unk4[i].unk19_0)
- {
- structPtr = &sUnknown_0203ABB8->unk4[i];
- memset(structPtr, 0, sizeof(*structPtr));
- structPtr->id = i;
- structPtr->unk19_0 = TRUE;
- structPtr->unk19_1 = TRUE;
- break;
- }
- }
-
- if (structPtr == NULL)
- return 0xFF;
-
- memcpy(&structPtr->oam, oam, sizeof(*oam));
- structPtr->tileTag = tileTag;
- structPtr->palTag = palTag;
- structPtr->x = x;
- structPtr->y = y;
- structPtr->oam.paletteNum = IndexOfSpritePaletteTag(palTag);
- if (priority < 4)
- {
- structPtr->priority = priority;
- structPtr->oam.priority = priority;
- }
- sub_81523F4(structPtr, arg5);
-
- return structPtr->id;
-}
-
-u8 sub_81525D0(u8 id)
-{
- if (sUnknown_0203ABB8 == NULL || !sUnknown_0203ABB8->unk4[id].unk19_0)
- return 0xFF;
-
- memset(&sUnknown_0203ABB8->unk4[id], 0, sizeof(struct UnkStruct_81520A8));
- sUnknown_0203ABB8->unk4[id].oam.y = 160;
- sUnknown_0203ABB8->unk4[id].oam.x = 240;
- sUnknown_0203ABB8->unk4[id].unk19_2 = TRUE;
- memcpy(&gMain.oamBuffer[id + 64], &gDummyOamData, sizeof(struct OamData));
- return id;
-}
diff --git a/src/rotating_gate.c b/src/rotating_gate.c
index 340fc58dd..162eb3e6d 100644
--- a/src/rotating_gate.c
+++ b/src/rotating_gate.c
@@ -776,7 +776,7 @@ static void SpriteCallback_RotatingGate(struct Sprite *sprite)
if (GetPlayerSpeed() != 1)
affineAnimation += 8;
- PlaySE(SE_HI_TURUN);
+ PlaySE(SE_ROTATING_GATE);
StartSpriteAffineAnim(sprite, affineAnimation);
}
else if (rotationDirection == ROTATE_CLOCKWISE)
@@ -786,7 +786,7 @@ static void SpriteCallback_RotatingGate(struct Sprite *sprite)
if (GetPlayerSpeed() != 1)
affineAnimation += 8;
- PlaySE(SE_HI_TURUN);
+ PlaySE(SE_ROTATING_GATE);
StartSpriteAffineAnim(sprite, affineAnimation);
}
diff --git a/src/roulette.c b/src/roulette.c
index e38da31d0..a0d1a7dc0 100644
--- a/src/roulette.c
+++ b/src/roulette.c
@@ -13,199 +13,416 @@
#include "menu_helpers.h"
#include "overworld.h"
#include "palette.h"
+#include "palette_util.h"
#include "random.h"
#include "roulette.h"
-#include "roulette_util.h"
#include "rtc.h"
#include "scanline_effect.h"
#include "script.h"
#include "sound.h"
#include "sprite.h"
#include "string_util.h"
+#include "strings.h"
#include "task.h"
#include "trig.h"
#include "tv.h"
#include "window.h"
+#include "constants/coins.h"
#include "constants/rgb.h"
+#include "constants/roulette.h"
#include "constants/species.h"
#include "constants/songs.h"
-struct StructgUnknown_083F8DF4
-{
- u8 var00;
- u8 var01;
- u8 var02;
- u8 var03;
- u8 var04;
- u8 filler_05[3];
- u16 var08;
- u16 var0A;
- u16 var0C;
- u8 filler_0E[2];
- u16 var10;
- u16 var12;
- u16 var14;
- u8 filler_16[2];
- u16 var18;
- u16 var1A;
+#define BALLS_PER_ROUND 6
+
+// "Board" is used in this file to refer to both the wheel and the bet selection grid
+#define NUM_BOARD_COLORS 3 // Rows on grid
+#define NUM_BOARD_POKES 4 // Columns on grid
+#define NUM_ROULETTE_SLOTS (NUM_BOARD_COLORS * NUM_BOARD_POKES)
+
+// The degree change between each slot on the roulette wheel
+#define DEGREES_PER_SLOT (360 / NUM_ROULETTE_SLOTS)
+
+// Where in the slot the ball will drop when landing
+#define SLOT_MIDPOINT (DEGREES_PER_SLOT / 2 - 1)
+
+// IDs for grid selections when betting
+#define SELECTION_NONE 0
+#define COL_WYNAUT 1
+#define COL_AZURILL 2
+#define COL_SKITTY 3
+#define COL_MAKUHITA 4
+#define ROW_ORANGE (COL_MAKUHITA + 1)
+#define SQU_ORANGE_WYNAUT (ROW_ORANGE + COL_WYNAUT)
+#define SQU_ORANGE_AZURILL (ROW_ORANGE + COL_AZURILL)
+#define SQU_ORANGE_SKITTY (ROW_ORANGE + COL_SKITTY)
+#define SQU_ORANGE_MAKUHITA (ROW_ORANGE + COL_MAKUHITA)
+#define ROW_GREEN (SQU_ORANGE_MAKUHITA + 1)
+#define SQU_GREEN_WYNAUT (ROW_GREEN + COL_WYNAUT)
+#define SQU_GREEN_AZURILL (ROW_GREEN + COL_AZURILL)
+#define SQU_GREEN_SKITTY (ROW_GREEN + COL_SKITTY)
+#define SQU_GREEN_MAKUHITA (ROW_GREEN + COL_MAKUHITA)
+#define ROW_PURPLE (SQU_GREEN_MAKUHITA + 1)
+#define SQU_PURPLE_WYNAUT (ROW_PURPLE + COL_WYNAUT)
+#define SQU_PURPLE_AZURILL (ROW_PURPLE + COL_AZURILL)
+#define SQU_PURPLE_SKITTY (ROW_PURPLE + COL_SKITTY)
+#define SQU_PURPLE_MAKUHITA (ROW_PURPLE + COL_MAKUHITA)
+#define NUM_GRID_SELECTIONS SQU_PURPLE_MAKUHITA
+
+// Get the id of the col/row from the selection ID
+// e.g. GET_ROW(SQU_PURPLE_SKITTY) is ROW_PURPLE
+#define GET_COL(selectionId)((selectionId) % (NUM_BOARD_POKES + 1))
+#define GET_ROW(selectionId)((selectionId) / (NUM_BOARD_POKES + 1) * (NUM_BOARD_POKES + 1))
+
+// Get the col/row index from the selection ID
+// e.g. GET_ROW_IDX(SQU_PURPLE_SKITTY) is 2 (purple being the 3rd row)
+#define GET_COL_IDX(selectionId)(selectionId - 1)
+#define GET_ROW_IDX(selectionId)(selectionId / 5 - 1)
+
+// Flags for the above selections, used to set which spaces have been hit or bet on
+#define F_WYNAUT_COL (1 << COL_WYNAUT)
+#define F_AZURILL_COL (1 << COL_AZURILL)
+#define F_SKITTY_COL (1 << COL_SKITTY)
+#define F_MAKUHITA_COL (1 << COL_MAKUHITA)
+#define F_ORANGE_ROW (1 << ROW_ORANGE)
+#define F_ORANGE_WYNAUT (1 << SQU_ORANGE_WYNAUT)
+#define F_ORANGE_AZURILL (1 << SQU_ORANGE_AZURILL)
+#define F_ORANGE_SKITTY (1 << SQU_ORANGE_SKITTY)
+#define F_ORANGE_MAKUHITA (1 << SQU_ORANGE_MAKUHITA)
+#define F_GREEN_ROW (1 << ROW_GREEN)
+#define F_GREEN_WYNAUT (1 << SQU_GREEN_WYNAUT)
+#define F_GREEN_AZURILL (1 << SQU_GREEN_AZURILL)
+#define F_GREEN_SKITTY (1 << SQU_GREEN_SKITTY)
+#define F_GREEN_MAKUHITA (1 << SQU_GREEN_MAKUHITA)
+#define F_PURPLE_ROW (1 << ROW_PURPLE)
+#define F_PURPLE_WYNAUT (1 << SQU_PURPLE_WYNAUT)
+#define F_PURPLE_AZURILL (1 << SQU_PURPLE_AZURILL)
+#define F_PURPLE_SKITTY (1 << SQU_PURPLE_SKITTY)
+#define F_PURPLE_MAKUHITA (1 << SQU_PURPLE_MAKUHITA)
+
+// Flags for flashing selections on the roulette wheel
+#define F_FLASH_COLOR_O_WYNAUT (1 << 0)
+#define F_FLASH_COLOR_G_AZURILL (1 << 1)
+#define F_FLASH_COLOR_P_SKITTY (1 << 2)
+#define F_FLASH_COLOR_O_MAKUHITA (1 << 3)
+#define F_FLASH_COLOR_G_WYNAUT (1 << 4)
+#define F_FLASH_COLOR_P_AZURILL (1 << 5)
+#define F_FLASH_COLOR_O_SKITTY (1 << 6)
+#define F_FLASH_COLOR_G_MAKUHITA (1 << 7)
+#define F_FLASH_COLOR_P_WYNAUT (1 << 8)
+#define F_FLASH_COLOR_O_AZURILL (1 << 9)
+#define F_FLASH_COLOR_G_SKITTY (1 << 10)
+#define F_FLASH_COLOR_P_MAKUHITA (1 << 11)
+#define F_FLASH_OUTER_EDGES (1 << 12) // when the player wins
+#define FLASH_ICON (NUM_ROULETTE_SLOTS + 1)
+#define FLASH_ICON_2 (FLASH_ICON + 1)
+#define FLASH_ICON_3 (FLASH_ICON + 2)
+#define F_FLASH_ICON (1 << FLASH_ICON)
+#define F_FLASH_COLUMN (1 << FLASH_ICON | 1 << FLASH_ICON_2 | 1 << FLASH_ICON_3)
+
+#define MAX_MULTIPLIER 12
+
+#define PALTAG_SHADOW 1
+#define PALTAG_BALL 2
+#define PALTAG_BALL_COUNTER 3
+#define PALTAG_CURSOR 4
+#define PALTAG_INTERFACE 5
+#define PALTAG_SHROOMISH 6
+#define PALTAG_TAILLOW 7
+#define PALTAG_GRID_ICONS 8
+#define PALTAG_WYNAUT 9
+#define PALTAG_AZURILL 10
+#define PALTAG_SKITTY 11
+#define PALTAG_MAKUHITA 12
+
+#define GFXTAG_WHEEL_ICONS 0
+#define GFXTAG_HEADERS 4
+#define GFXTAG_GRID_ICONS 5
+#define GFXTAG_WHEEL_CENTER 6
+#define GFXTAG_CREDIT 7
+#define GFXTAG_CREDIT_DIGIT 8
+#define GFXTAG_MULTIPLIER 9
+#define GFXTAG_BALL_COUNTER 10
+#define GFXTAG_CURSOR 11
+#define GFXTAG_BALL 12
+#define GFXTAG_SHROOMISH_TAILLOW 13
+#define GFXTAG_SHADOW 14
+
+// 2 different Roulette tables with 2 different rates (normal vs service day special)
+// & 1 gets which table, >> 7 gets if ROULETTE_SPECIAL_RATE is set
+#define GET_MIN_BET_ID(var)(((var) & 1) + (((var) >> 7) * 2))
+
+// Having Shroomish or Taillow in the party can make rolls more consistent in length
+// It also increases the likelihood that, if they appear to unstick a ball, they'll move it to a slot the player bet on
+#define HAS_SHROOMISH (1 << 0)
+#define HAS_TAILLOW (1 << 1)
+
+#define NO_DELAY 0xFFFF
+
+enum {
+ BALL_STATE_ROLLING,
+ BALL_STATE_STUCK,
+ BALL_STATE_LANDED = 0xFF,
+};
+
+enum {
+ SELECT_STATE_WAIT,
+ SELECT_STATE_DRAW,
+ SELECT_STATE_UPDATE,
+ SELECT_STATE_ERASE = 0xFF,
+};
+
+// Roulette uses a large amount of sprites, and stores ids for these in a single array
+// Many are looped over rather than referenced directly
+enum {
+ SPR_WHEEL_BALL_1,
+ SPR_WHEEL_BALL_2,
+ SPR_WHEEL_BALL_3,
+ SPR_WHEEL_BALL_4,
+ SPR_WHEEL_BALL_5,
+ SPR_WHEEL_BALL_6,
+ SPR_WHEEL_CENTER,
+ SPR_WHEEL_ICON_ORANGE_WYNAUT,
+ SPR_WHEEL_ICON_GREEN_AZURILL,
+ SPR_WHEEL_ICON_PURPLE_SKITTY,
+ SPR_WHEEL_ICON_ORANGE_MAKUHITA,
+ SPR_WHEEL_ICON_GREEN_WYNAUT,
+ SPR_WHEEL_ICON_PURPLE_AZURILL,
+ SPR_WHEEL_ICON_ORANGE_SKITTY,
+ SPR_WHEEL_ICON_GREEN_MAKUHITA,
+ SPR_WHEEL_ICON_PURPLE_WYNAUT,
+ SPR_WHEEL_ICON_ORANGE_AZURILL,
+ SPR_WHEEL_ICON_GREEN_SKITTY,
+ SPR_WHEEL_ICON_PURPLE_MAKUHITA,
+ SPR_19, // Unused
+ SPR_CREDIT,
+ SPR_CREDIT_DIG_1,
+ SPR_CREDIT_DIG_10,
+ SPR_CREDIT_DIG_100,
+ SPR_CREDIT_DIG_1000,
+ SPR_MULTIPLIER,
+ SPR_BALL_COUNTER_1,
+ SPR_BALL_COUNTER_2,
+ SPR_BALL_COUNTER_3,
+ SPR_GRID_ICON_ORANGE_WYNAUT,
+ SPR_GRID_ICON_GREEN_AZURILL,
+ SPR_GRID_ICON_PURPLE_SKITTY,
+ SPR_GRID_ICON_ORANGE_MAKUHITA,
+ SPR_GRID_ICON_GREEN_WYNAUT,
+ SPR_GRID_ICON_PURPLE_AZURILL,
+ SPR_GRID_ICON_ORANGE_SKITTY,
+ SPR_GRID_ICON_GREEN_MAKUHITA,
+ SPR_GRID_ICON_PURPLE_WYNAUT,
+ SPR_GRID_ICON_ORANGE_AZURILL,
+ SPR_GRID_ICON_GREEN_SKITTY,
+ SPR_GRID_ICON_PURPLE_MAKUHITA,
+ SPR_POKE_HEADER_1,
+ SPR_POKE_HEADER_2,
+ SPR_POKE_HEADER_3,
+ SPR_POKE_HEADER_4,
+ SPR_COLOR_HEADER_1,
+ SPR_COLOR_HEADER_2,
+ SPR_COLOR_HEADER_3,
+ SPR_WIN_SLOT_CURSOR,
+ SPR_GRID_BALL_1,
+ SPR_GRID_BALL_2,
+ SPR_GRID_BALL_3,
+ SPR_GRID_BALL_4,
+ SPR_GRID_BALL_5,
+ SPR_GRID_BALL_6,
+ SPR_CLEAR_MON, // Shroomish/Taillow
+ SPR_CLEAR_MON_SHADOW_1,
+ SPR_CLEAR_MON_SHADOW_2,
+ SPR_58, // Here below unused
+ SPR_59,
+ SPR_60,
+ SPR_61,
+ SPR_62,
+ SPR_63,
+};
+
+// Start points for sprite IDs that are looped over
+#define SPR_WHEEL_BALLS SPR_WHEEL_BALL_1
+#define SPR_WHEEL_ICONS SPR_WHEEL_ICON_ORANGE_WYNAUT
+#define SPR_BALL_COUNTER SPR_BALL_COUNTER_1
+#define SPR_CREDIT_DIGITS SPR_CREDIT_DIG_1
+#define SPR_GRID_ICONS SPR_GRID_ICON_ORANGE_WYNAUT
+#define SPR_POKE_HEADERS SPR_POKE_HEADER_1
+#define SPR_COLOR_HEADERS SPR_COLOR_HEADER_1
+#define SPR_GRID_BALLS SPR_GRID_BALL_1
+
+struct Shroomish
+{
+ u16 startAngle;
+ u16 dropAngle;
+ u16 fallSlowdown;
+};
+
+struct Taillow
+{
+ u16 baseDropDelay;
+ u16 rightStartAngle;
+ u16 leftStartAngle;
+};
+
+struct RouletteTable
+{
+ u8 minBet; // Never read
+ u8 randDistanceHigh;
+ u8 randDistanceLow;
+ u8 wheelSpeed;
+ u8 wheelDelay;
+ struct Shroomish shroomish;
+ struct Taillow taillow;
+ u16 ballSpeed;
+ u16 baseTravelDist;
float var1C;
};
-struct StructgUnknown_085B6154
-{
- u8 var00;
- u8 var01_0:4;
- u8 var01_4:4;
- u8 var02;
- u8 var03;
- u8 var04;
- u8 var05;
- u8 var06;
- u32 var08;
- u32 var0C;
- u16 var10;
+struct GridSelection
+{
+ u8 spriteIdOffset;
+ u8 baseMultiplier:4;
+ u8 column:4; // Never read
+ u8 row; // Never read
+ u8 x;
+ u8 y;
+ u8 var05; // Never read
+ u8 tilemapOffset;
+ u32 flag;
+ u32 inSelectionFlags;
+ u16 flashFlags;
};
-struct StructgUnknown_083F8D90
+struct RouletteSlot
{
- u8 var00;
- u8 var01;
- u8 var02;
- u32 var04;
+ u8 id1; // Never read
+ u8 id2; // Never read
+ u8 gridSquare;
+ u32 flag;
};
-EWRAM_DATA struct Roulette
-{
- u8 var00;
- u8 var01;
- u8 var02;
- u8 var03_0:5;
- u8 var03_5:1;
- u8 var03_6:1;
- u8 var03_7:1;
- u8 var04_0:2;
- u8 var04_2:5;
- u8 var04_7:1;
- u32 var08;
- u8 var0C[6];
- u8 var12[4];
- u8 var16[3];
- u8 var19;
- u8 var1A_0:4;
- u8 var1A_4:4;
- u8 var1B[6];
- u8 var21;
- u8 var22;
- u8 var23;
- s16 var24;
- s16 var26;
- s16 var28;
- s16 var2A;
- struct OamMatrix var2C;
- u16 var34;
- struct Sprite *var38;
- u8 var3C[MAX_SPRITES]; // Sprite IDs
- u8 var7C;
- u8 var7D;
- u8 var7E;
- u8 var7F;
- s16 var80;
- s16 var82;
- u16 var84;
- u16 var86;
- float var88;
- float var8C;
- float var90;
- float var94;
- float var98;
- float var9C;
+static EWRAM_DATA struct Roulette
+{
+ u8 unk0; // Never read
+ u8 shroomishShadowTimer;
+ u8 partySpeciesFlags;
+ bool8 useTaillow:5;
+ bool8 ballStuck:1;
+ bool8 ballUnstuck:1;
+ bool8 ballRolling:1; // Never read
+ u8 tableId:2;
+ u8 unused:5;
+ bool8 isSpecialRate:1;
+ u32 hitFlags;
+ u8 hitSquares[BALLS_PER_ROUND];
+ u8 pokeHits[NUM_BOARD_POKES];
+ u8 colorHits[NUM_BOARD_COLORS];
+ u8 minBet;
+ u8 curBallNum:4; // Never actually gets incremented, tracked with tBallNum instead
+ u8 unk1:4; // Never read
+ u8 betSelection[BALLS_PER_ROUND]; // Because curBallNum is used as the only index, only the first element is ever used (prev bet selections are never needed)
+ u8 wheelDelayTimer;
+ u8 wheelSpeed;
+ u8 wheelDelay;
+ s16 wheelAngle;
+ s16 gridX;
+ s16 selectionRectDrawState;
+ s16 updateGridHighlight;
+ struct OamMatrix wheelRotation;
+ u16 shroomishShadowAlpha;
+ struct Sprite *ball;
+ u8 spriteIds[MAX_SPRITES];
+ u8 curBallSpriteId;
+ u8 ballState;
+ u8 hitSlot;
+ u8 stuckHitSlot;
+ s16 ballTravelDist; // Never read
+ s16 ballTravelDistFast;
+ u16 ballTravelDistMed;
+ u16 ballTravelDistSlow;
+ float ballAngle;
+ float ballAngleSpeed;
+ float ballAngleAccel;
+ float ballDistToCenter;
+ float ballFallSpeed;
+ float ballFallAccel;
float varA0;
- u8 varA4;
- u8 varA5;
- u8 v51[2];
- u16 varA8;
- u16 varAA;
- TaskFunc varAC;
- u8 v46[4];
- TaskFunc varB4;
- struct UnkStruct0 varB8;
+ u8 playTaskId;
+ u8 spinTaskId;
+ u8 filler_1[2];
+ u16 taskWaitDelay;
+ u16 taskWaitKey;
+ TaskFunc nextTask;
+ u8 filler_2[4];
+ TaskFunc prevTask;
+ struct RouletteFlashUtil flashUtil;
u16 tilemapBuffers[7][0x400];
- u16 *unk_397C;
-} *gUnknown_0203AB88 = NULL;
-EWRAM_DATA u8 gUnknown_0203AB8C = 0;
-
-static void sub_8140814(u8);
-static void sub_81408A8(u8);
-static void sub_8140968(u8);
-static void sub_8140994(u8);
-static void sub_8140BD0(u8);
-static void sub_8141040(u8);
-static void sub_81410FC(u8);
-static void sub_8141344(u8);
-static void sub_814155C(u8);
-static void sub_81415D4(u8);
-static void sub_81416D4(u8);
-static void sub_8141778(u8);
-static void sub_814189C(u8);
-static void sub_8141A18(u8);
-static void sub_8141AC0(u8);
-static void sub_8141B58(u8);
-static void dp01t_12_3_battle_menu(u8);
-static void sub_8141DE4(u8);
-static void sub_8141E7C(u8);
-static void sub_8141F7C(u8 taskId, TaskFunc r1, u16 r2, u16 r3);
-static void sub_8141FF4(u8);
-static void sub_8142070(void);
-static void sub_8142918(u8);
-static void sub_814297C(u8);
-static u8 sub_81420D0(u8, u8);
-static bool8 sub_81421E8(u8, u8);
-static void sub_8142284(u8);
-static void sub_81424FC(u8);
-static u8 sub_8142758(u8);
-static void sub_8142814(void);
-static void sub_8142C0C(u8);
-static void sub_8142CD0(void);
-static void sub_8142E70(u8, u8);
-static void sub_8142F7C(void);
-static void sub_8143038(u8, u8);
-static void sub_8143150(u8);
-static void sub_81431E4(void);
-static void sub_8143280(struct Sprite *);
-static void sub_8143314(void);
-static void sub_8143514(u16);
-static void sub_81436D0(u8);
-static void sub_814372C(u8);
-static void sub_814390C(struct Sprite *);
-static void sub_814391C(void);
-static void sub_814399C(struct Sprite *);
-static void sub_81439C8(void);
-static void sub_8143A40(void);
-static void sub_81446AC(struct Sprite *);
-static void sub_81446DC(struct Sprite *);
-static void sub_81448B8(struct Sprite *);
-static void sub_8144A24(struct Sprite *);
-static void sub_8144E60(struct Sprite *);
-static void sub_8145294(struct Sprite *);
-
-extern const u8 Roulette_Text_ControlsInstruction[];
-extern const u8 Roulette_Text_KeepPlaying[];
-extern const u8 Roulette_Text_Jackpot[];
-extern const u8 Roulette_Text_ItsAHit[];
-extern const u8 Roulette_Text_NothingDoing[];
-extern const u8 Roulette_Text_YouveWonXCoins[];
-extern const u8 Roulette_Text_BoardWillBeCleared[];
-extern const u8 Roulette_Text_CoinCaseIsFull[];
-extern const u8 Roulette_Text_NoCoinsLeft[];
-extern const u8 Roulette_Text_PlayMinimumWagerIsX[];
-extern const u8 Roulette_Text_SpecialRateTable[];
-extern const u8 Roulette_Text_NotEnoughCoins[];
-
-static const u16 gUnknown_085B5BFC[] = INCBIN_U16("graphics/roulette/85B5BFC.gbapal");
-static const u32 gUnknown_085B5DFC[] = INCBIN_U32("graphics/roulette/85B5DFC.bin.lz");
-static const u32 gUnknown_085B5FA0[] = INCBIN_U32("graphics/roulette/wheel_map.bin.lz");
-static const struct BgTemplate gUnknown_085B6140[] =
-{
+ u16 *gridTilemap;
+} *sRoulette = NULL;
+
+static EWRAM_DATA u8 sTextWindowId = 0;
+
+static void Task_SpinWheel(u8);
+static void Task_StartPlaying(u8);
+static void Task_ContinuePlaying(u8);
+static void Task_StopPlaying(u8);
+static void Task_SelectFirstEmptySquare(u8);
+static void Task_HandleBetGridInput(u8);
+static void Task_SlideGridOffscreen(u8);
+static void Task_InitBallRoll(u8);
+static void Task_RollBall(u8);
+static void Task_RecordBallHit(u8);
+static void Task_SlideGridOnscreen(u8);
+static void Task_FlashBallOnWinningSquare(u8);
+static void Task_PrintSpinResult(u8);
+static void Task_PrintPayout(u8);
+static void Task_EndTurn(u8);
+static void Task_TryPrintEndTurnMsg(u8);
+static void Task_ClearBoard(u8);
+static void ExitRoulette(u8);
+static void Task_ExitRoulette(u8);
+static void StartTaskAfterDelayOrInput(u8, TaskFunc, u16, u16);
+static void ResetBallDataForNewSpin(u8);
+static void ResetHits(void);
+static void Task_AcceptMinBet(u8);
+static void Task_DeclineMinBet(u8);
+static u8 RecordHit(u8, u8);
+static bool8 IsHitInBetSelection(u8, u8);
+static void FlashSelectionOnWheel(u8);
+static void DrawGridBackground(u8);
+static u8 GetMultiplier(u8);
+static void UpdateWheelPosition(void);
+static void LoadOrFreeMiscSpritePalettesAndSheets(u8);
+static void CreateGridSprites(void);
+static void ShowHideGridIcons(bool8, u8);
+static void CreateGridBallSprites(void);
+static void ShowHideGridBalls(bool8, u8);
+static void ShowHideWinSlotCursor(u8);
+static void CreateWheelIconSprites(void);
+static void SpriteCB_WheelIcon(struct Sprite *);
+static void CreateInterfaceSprites(void);
+static void SetCreditDigits(u16);
+static void SetMultiplierSprite(u8);
+static void SetBallCounterNumLeft(u8);
+static void SpriteCB_GridSquare(struct Sprite *);
+static void CreateWheelCenterSprite(void);
+static void SpriteCB_WheelCenter(struct Sprite *);
+static void CreateWheelBallSprites(void);
+static void HideWheelBalls(void);
+static void SpriteCB_RollBall_Start(struct Sprite *);
+static void CreateShroomishSprite(struct Sprite *);
+static void CreateTaillowSprite(struct Sprite *);
+static void SetBallStuck(struct Sprite *);
+static void SpriteCB_Shroomish(struct Sprite *);
+static void SpriteCB_Taillow(struct Sprite *);
+
+static const u16 sWheel_Pal[] = INCBIN_U16("graphics/roulette/wheel.gbapal"); // also palette for grid
+static const u32 sGrid_Tilemap[] = INCBIN_U32("graphics/roulette/grid.bin.lz");
+static const u32 sWheel_Tilemap[] = INCBIN_U32("graphics/roulette/wheel.bin.lz");
+static const struct BgTemplate sBgTemplates[] =
+{
+ // Text box
{
.bg = 0,
.charBaseIndex = 2,
@@ -215,6 +432,7 @@ static const struct BgTemplate gUnknown_085B6140[] =
.priority = 0,
.baseTile = 0
},
+ // Selection grid
{
.bg = 1,
.charBaseIndex = 0,
@@ -224,6 +442,7 @@ static const struct BgTemplate gUnknown_085B6140[] =
.priority = 1,
.baseTile = 0
},
+ // Wheel
{
.bg = 2,
.charBaseIndex = 1,
@@ -234,7 +453,7 @@ static const struct BgTemplate gUnknown_085B6140[] =
.baseTile = 0
}
};
-static const struct WindowTemplate gUnknown_085B614C[] =
+static const struct WindowTemplate sWindowTemplates[] =
{
{
.bg = 0,
@@ -248,659 +467,679 @@ static const struct WindowTemplate gUnknown_085B614C[] =
// BUG: Array not terminated properly
//DUMMY_WIN_TEMPLATE
};
-static const struct StructgUnknown_085B6154 gUnknown_085B6154[] =
+
+static const struct GridSelection sGridSelections[NUM_GRID_SELECTIONS + 1] =
{
- {
- .var00 = 0xFF,
- .var01_0 = 0,
- .var01_4 = 0,
- .var02 = 0,
- .var03 = 7,
- .var04 = 7,
+ [SELECTION_NONE] = {
+ .spriteIdOffset = 0xFF,
+ .baseMultiplier = 0,
+ .column = 0,
+ .row = 0,
+ .x = 7,
+ .y = 7,
.var05 = 0,
- .var06 = 0,
- .var08 = 0x0,
- .var0C = 0x0,
- .var10 = 0x0,
+ .tilemapOffset = 0,
+ .flag = 0,
+ .inSelectionFlags = 0,
+ .flashFlags = 0,
},
- {
- .var00 = 12,
- .var01_0 = 4,
- .var01_4 = 1,
- .var02 = 0,
- .var03 = 17,
- .var04 = 7,
+ [COL_WYNAUT] = {
+ .spriteIdOffset = 12,
+ .baseMultiplier = NUM_BOARD_POKES,
+ .column = 1,
+ .row = 0,
+ .x = 17,
+ .y = 7,
.var05 = 0,
- .var06 = 0,
- .var08 = 0x2,
- .var0C = 0x10842,
- .var10 = 0xE000,
+ .tilemapOffset = 0,
+ .flag = F_WYNAUT_COL,
+ .inSelectionFlags = F_WYNAUT_COL | F_ORANGE_WYNAUT | F_GREEN_WYNAUT | F_PURPLE_WYNAUT,
+ .flashFlags = F_FLASH_COLUMN,
},
- {
- .var00 = 13,
- .var01_0 = 4,
- .var01_4 = 2,
- .var02 = 0,
- .var03 = 20,
- .var04 = 7,
+ [COL_AZURILL] = {
+ .spriteIdOffset = 13,
+ .baseMultiplier = NUM_BOARD_POKES,
+ .column = 2,
+ .row = 0,
+ .x = 20,
+ .y = 7,
.var05 = 0,
- .var06 = 0,
- .var08 = 0x4,
- .var0C = 0x21084,
- .var10 = 0xE000,
+ .tilemapOffset = 0,
+ .flag = F_AZURILL_COL,
+ .inSelectionFlags = F_AZURILL_COL | F_ORANGE_AZURILL | F_GREEN_AZURILL | F_PURPLE_AZURILL,
+ .flashFlags = F_FLASH_COLUMN,
},
- {
- .var00 = 14,
- .var01_0 = 4,
- .var01_4 = 3,
- .var02 = 0,
- .var03 = 23,
- .var04 = 7,
+ [COL_SKITTY] = {
+ .spriteIdOffset = 14,
+ .baseMultiplier = NUM_BOARD_POKES,
+ .column = 3,
+ .row = 0,
+ .x = 23,
+ .y = 7,
.var05 = 0,
- .var06 = 0,
- .var08 = 0x8,
- .var0C = 0x42108,
- .var10 = 0xE000,
+ .tilemapOffset = 0,
+ .flag = F_SKITTY_COL,
+ .inSelectionFlags = F_SKITTY_COL | F_ORANGE_SKITTY | F_GREEN_SKITTY | F_PURPLE_SKITTY,
+ .flashFlags = F_FLASH_COLUMN,
},
- {
- .var00 = 15,
- .var01_0 = 4,
- .var01_4 = 4,
- .var02 = 0,
- .var03 = 26,
- .var04 = 7,
+ [COL_MAKUHITA] = {
+ .spriteIdOffset = 15,
+ .baseMultiplier = NUM_BOARD_POKES,
+ .column = 4,
+ .row = 0,
+ .x = 26,
+ .y = 7,
.var05 = 0,
- .var06 = 0,
- .var08 = 0x10,
- .var0C = 0x84210,
- .var10 = 0xE000,
+ .tilemapOffset = 0,
+ .flag = F_MAKUHITA_COL,
+ .inSelectionFlags = F_MAKUHITA_COL | F_ORANGE_MAKUHITA | F_GREEN_MAKUHITA | F_PURPLE_MAKUHITA,
+ .flashFlags = F_FLASH_COLUMN,
},
- {
- .var00 = 16,
- .var01_0 = 3,
- .var01_4 = 0,
- .var02 = 1,
- .var03 = 14,
- .var04 = 10,
+ [ROW_ORANGE] = {
+ .spriteIdOffset = 16,
+ .baseMultiplier = NUM_BOARD_COLORS,
+ .column = 0,
+ .row = 1,
+ .x = 14,
+ .y = 10,
.var05 = 0,
- .var06 = 12,
- .var08 = 0x20,
- .var0C = 0x3E0,
- .var10 = 0x249,
+ .tilemapOffset = 12,
+ .flag = F_ORANGE_ROW,
+ .inSelectionFlags = F_ORANGE_ROW | F_ORANGE_WYNAUT | F_ORANGE_AZURILL | F_ORANGE_SKITTY | F_ORANGE_MAKUHITA,
+ .flashFlags = F_FLASH_COLOR_O_WYNAUT | F_FLASH_COLOR_O_AZURILL | F_FLASH_COLOR_O_SKITTY | F_FLASH_COLOR_O_MAKUHITA,
},
- {
- .var00 = 0,
- .var01_0 = 12,
- .var01_4 = 1,
- .var02 = 1,
- .var03 = 17,
- .var04 = 10,
+ [SQU_ORANGE_WYNAUT] = {
+ .spriteIdOffset = 0,
+ .baseMultiplier = NUM_ROULETTE_SLOTS,
+ .column = 1,
+ .row = 1,
+ .x = 17,
+ .y = 10,
.var05 = 3,
- .var06 = 3,
- .var08 = 0x40,
- .var0C = 0x40,
- .var10 = 0x2001,
+ .tilemapOffset = 3,
+ .flag = F_ORANGE_WYNAUT,
+ .inSelectionFlags = F_ORANGE_WYNAUT,
+ .flashFlags = F_FLASH_ICON | F_FLASH_COLOR_O_WYNAUT,
},
- {
- .var00 = 9,
- .var01_0 = 12,
- .var01_4 = 2,
- .var02 = 1,
- .var03 = 20,
- .var04 = 10,
+ [SQU_ORANGE_AZURILL] = {
+ .spriteIdOffset = 9,
+ .baseMultiplier = NUM_ROULETTE_SLOTS,
+ .column = 2,
+ .row = 1,
+ .x = 20,
+ .y = 10,
.var05 = 3,
- .var06 = 3,
- .var08 = 0x80,
- .var0C = 0x80,
- .var10 = 0x2200,
+ .tilemapOffset = 3,
+ .flag = F_ORANGE_AZURILL,
+ .inSelectionFlags = F_ORANGE_AZURILL,
+ .flashFlags = F_FLASH_ICON | F_FLASH_COLOR_O_AZURILL,
},
- {
- .var00 = 6,
- .var01_0 = 12,
- .var01_4 = 3,
- .var02 = 1,
- .var03 = 23,
- .var04 = 10,
+ [SQU_ORANGE_SKITTY] = {
+ .spriteIdOffset = 6,
+ .baseMultiplier = NUM_ROULETTE_SLOTS,
+ .column = 3,
+ .row = 1,
+ .x = 23,
+ .y = 10,
.var05 = 3,
- .var06 = 3,
- .var08 = 0x100,
- .var0C = 0x100,
- .var10 = 0x2040,
+ .tilemapOffset = 3,
+ .flag = F_ORANGE_SKITTY,
+ .inSelectionFlags = F_ORANGE_SKITTY,
+ .flashFlags = F_FLASH_ICON | F_FLASH_COLOR_O_SKITTY,
},
- {
- .var00 = 3,
- .var01_0 = 12,
- .var01_4 = 4,
- .var02 = 1,
- .var03 = 26,
- .var04 = 10,
+ [SQU_ORANGE_MAKUHITA] = {
+ .spriteIdOffset = 3,
+ .baseMultiplier = NUM_ROULETTE_SLOTS,
+ .column = 4,
+ .row = 1,
+ .x = 26,
+ .y = 10,
.var05 = 3,
- .var06 = 3,
- .var08 = 0x200,
- .var0C = 0x200,
- .var10 = 0x2008,
+ .tilemapOffset = 3,
+ .flag = F_ORANGE_MAKUHITA,
+ .inSelectionFlags = F_ORANGE_MAKUHITA,
+ .flashFlags = F_FLASH_ICON | F_FLASH_COLOR_O_MAKUHITA,
},
- {
- .var00 = 17,
- .var01_0 = 3,
- .var01_4 = 0,
- .var02 = 2,
- .var03 = 14,
- .var04 = 13,
+ [ROW_GREEN] = {
+ .spriteIdOffset = 17,
+ .baseMultiplier = NUM_BOARD_COLORS,
+ .column = 0,
+ .row = 2,
+ .x = 14,
+ .y = 13,
.var05 = 3,
- .var06 = 15,
- .var08 = 0x400,
- .var0C = 0x7C00,
- .var10 = 0x492,
+ .tilemapOffset = 15,
+ .flag = F_GREEN_ROW,
+ .inSelectionFlags = F_GREEN_ROW | F_GREEN_WYNAUT | F_GREEN_AZURILL | F_GREEN_SKITTY | F_GREEN_MAKUHITA,
+ .flashFlags = F_FLASH_COLOR_G_WYNAUT | F_FLASH_COLOR_G_AZURILL | F_FLASH_COLOR_G_SKITTY | F_FLASH_COLOR_G_MAKUHITA,
},
- {
- .var00 = 4,
- .var01_0 = 12,
- .var01_4 = 1,
- .var02 = 2,
- .var03 = 17,
- .var04 = 13,
+ [SQU_GREEN_WYNAUT] = {
+ .spriteIdOffset = 4,
+ .baseMultiplier = NUM_ROULETTE_SLOTS,
+ .column = 1,
+ .row = 2,
+ .x = 17,
+ .y = 13,
.var05 = 6,
- .var06 = 6,
- .var08 = 0x800,
- .var0C = 0x800,
- .var10 = 0x2010,
+ .tilemapOffset = 6,
+ .flag = F_GREEN_WYNAUT,
+ .inSelectionFlags = F_GREEN_WYNAUT,
+ .flashFlags = F_FLASH_ICON | F_FLASH_COLOR_G_WYNAUT,
},
- {
- .var00 = 1,
- .var01_0 = 12,
- .var01_4 = 2,
- .var02 = 2,
- .var03 = 20,
- .var04 = 13,
+ [SQU_GREEN_AZURILL] = {
+ .spriteIdOffset = 1,
+ .baseMultiplier = NUM_ROULETTE_SLOTS,
+ .column = 2,
+ .row = 2,
+ .x = 20,
+ .y = 13,
.var05 = 6,
- .var06 = 6,
- .var08 = 0x1000,
- .var0C = 0x1000,
- .var10 = 0x2002,
+ .tilemapOffset = 6,
+ .flag = F_GREEN_AZURILL,
+ .inSelectionFlags = F_GREEN_AZURILL,
+ .flashFlags = F_FLASH_ICON | F_FLASH_COLOR_G_AZURILL,
},
- {
- .var00 = 10,
- .var01_0 = 12,
- .var01_4 = 3,
- .var02 = 2,
- .var03 = 23,
- .var04 = 13,
+ [SQU_GREEN_SKITTY] = {
+ .spriteIdOffset = 10,
+ .baseMultiplier = NUM_ROULETTE_SLOTS,
+ .column = 3,
+ .row = 2,
+ .x = 23,
+ .y = 13,
.var05 = 6,
- .var06 = 6,
- .var08 = 0x2000,
- .var0C = 0x2000,
- .var10 = 0x2400,
+ .tilemapOffset = 6,
+ .flag = F_GREEN_SKITTY,
+ .inSelectionFlags = F_GREEN_SKITTY,
+ .flashFlags = F_FLASH_ICON | F_FLASH_COLOR_G_SKITTY,
},
- {
- .var00 = 7,
- .var01_0 = 12,
- .var01_4 = 4,
- .var02 = 2,
- .var03 = 26,
- .var04 = 13,
+ [SQU_GREEN_MAKUHITA] = {
+ .spriteIdOffset = 7,
+ .baseMultiplier = NUM_ROULETTE_SLOTS,
+ .column = 4,
+ .row = 2,
+ .x = 26,
+ .y = 13,
.var05 = 6,
- .var06 = 6,
- .var08 = 0x4000,
- .var0C = 0x4000,
- .var10 = 0x2080,
+ .tilemapOffset = 6,
+ .flag = F_GREEN_MAKUHITA,
+ .inSelectionFlags = F_GREEN_MAKUHITA,
+ .flashFlags = F_FLASH_ICON | F_FLASH_COLOR_G_MAKUHITA,
},
- {
- .var00 = 18,
- .var01_0 = 3,
- .var01_4 = 0,
- .var02 = 3,
- .var03 = 14,
- .var04 = 16,
+ [ROW_PURPLE] = {
+ .spriteIdOffset = 18,
+ .baseMultiplier = NUM_BOARD_COLORS,
+ .column = 0,
+ .row = 3,
+ .x = 14,
+ .y = 16,
.var05 = 6,
- .var06 = 18,
- .var08 = 0x8000,
- .var0C = 0xF8000,
- .var10 = 0x924,
+ .tilemapOffset = 18,
+ .flag = F_PURPLE_ROW,
+ .inSelectionFlags = F_PURPLE_ROW | F_PURPLE_WYNAUT | F_PURPLE_AZURILL | F_PURPLE_SKITTY | F_PURPLE_MAKUHITA,
+ .flashFlags = F_FLASH_COLOR_P_WYNAUT | F_FLASH_COLOR_P_AZURILL | F_FLASH_COLOR_P_SKITTY | F_FLASH_COLOR_P_MAKUHITA,
},
- {
- .var00 = 8,
- .var01_0 = 12,
- .var01_4 = 1,
- .var02 = 3,
- .var03 = 17,
- .var04 = 16,
+ [SQU_PURPLE_WYNAUT] = {
+ .spriteIdOffset = 8,
+ .baseMultiplier = NUM_ROULETTE_SLOTS,
+ .column = 1,
+ .row = 3,
+ .x = 17,
+ .y = 16,
.var05 = 9,
- .var06 = 9,
- .var08 = 0x10000,
- .var0C = 0x10000,
- .var10 = 0x2100,
+ .tilemapOffset = 9,
+ .flag = F_PURPLE_WYNAUT,
+ .inSelectionFlags = F_PURPLE_WYNAUT,
+ .flashFlags = F_FLASH_ICON | F_FLASH_COLOR_P_WYNAUT,
},
- {
- .var00 = 5,
- .var01_0 = 12,
- .var01_4 = 2,
- .var02 = 3,
- .var03 = 20,
- .var04 = 16,
+ [SQU_PURPLE_AZURILL] = {
+ .spriteIdOffset = 5,
+ .baseMultiplier = NUM_ROULETTE_SLOTS,
+ .column = 2,
+ .row = 3,
+ .x = 20,
+ .y = 16,
.var05 = 9,
- .var06 = 9,
- .var08 = 0x20000,
- .var0C = 0x20000,
- .var10 = 0x2020,
+ .tilemapOffset = 9,
+ .flag = F_PURPLE_AZURILL,
+ .inSelectionFlags = F_PURPLE_AZURILL,
+ .flashFlags = F_FLASH_ICON | F_FLASH_COLOR_P_AZURILL,
},
- {
- .var00 = 2,
- .var01_0 = 12,
- .var01_4 = 3,
- .var02 = 3,
- .var03 = 23,
- .var04 = 16,
+ [SQU_PURPLE_SKITTY] = {
+ .spriteIdOffset = 2,
+ .baseMultiplier = NUM_ROULETTE_SLOTS,
+ .column = 3,
+ .row = 3,
+ .x = 23,
+ .y = 16,
.var05 = 9,
- .var06 = 9,
- .var08 = 0x40000,
- .var0C = 0x40000,
- .var10 = 0x2004,
+ .tilemapOffset = 9,
+ .flag = F_PURPLE_SKITTY,
+ .inSelectionFlags = F_PURPLE_SKITTY,
+ .flashFlags = F_FLASH_ICON | F_FLASH_COLOR_P_SKITTY,
},
- {
- .var00 = 11,
- .var01_0 = 12,
- .var01_4 = 4,
- .var02 = 3,
- .var03 = 26,
- .var04 = 16,
+ [SQU_PURPLE_MAKUHITA] = {
+ .spriteIdOffset = 11,
+ .baseMultiplier = NUM_ROULETTE_SLOTS,
+ .column = 4,
+ .row = 3,
+ .x = 26,
+ .y = 16,
.var05 = 9,
- .var06 = 9,
- .var08 = 0x80000,
- .var0C = 0x80000,
- .var10 = 0x2800,
+ .tilemapOffset = 9,
+ .flag = F_PURPLE_MAKUHITA,
+ .inSelectionFlags = F_PURPLE_MAKUHITA,
+ .flashFlags = F_FLASH_ICON | F_FLASH_COLOR_P_MAKUHITA,
},
};
-static const struct StructgUnknown_083F8D90 gUnknown_085B62E4[] =
+static const struct RouletteSlot sRouletteSlots[] =
{
{
- .var00 = 0,
- .var01 = 1,
- .var02 = 6,
- .var04 = 0x40,
+ .id1 = 0,
+ .id2 = 1,
+ .gridSquare = SQU_ORANGE_WYNAUT,
+ .flag = F_ORANGE_WYNAUT,
},
{
- .var00 = 1,
- .var01 = 3,
- .var02 = 12,
- .var04 = 0x1000,
+ .id1 = 1,
+ .id2 = 3,
+ .gridSquare = SQU_GREEN_AZURILL,
+ .flag = F_GREEN_AZURILL,
},
{
- .var00 = 2,
- .var01 = 5,
- .var02 = 18,
- .var04 = 0x40000,
+ .id1 = 2,
+ .id2 = 5,
+ .gridSquare = SQU_PURPLE_SKITTY,
+ .flag = F_PURPLE_SKITTY,
},
{
- .var00 = 3,
- .var01 = 7,
- .var02 = 9,
- .var04 = 0x200,
+ .id1 = 3,
+ .id2 = 7,
+ .gridSquare = SQU_ORANGE_MAKUHITA,
+ .flag = F_ORANGE_MAKUHITA,
},
{
- .var00 = 4,
- .var01 = 9,
- .var02 = 11,
- .var04 = 0x800,
+ .id1 = 4,
+ .id2 = 9,
+ .gridSquare = SQU_GREEN_WYNAUT,
+ .flag = F_GREEN_WYNAUT,
},
{
- .var00 = 5,
- .var01 = 11,
- .var02 = 17,
- .var04 = 0x20000,
+ .id1 = 5,
+ .id2 = 11,
+ .gridSquare = SQU_PURPLE_AZURILL,
+ .flag = F_PURPLE_AZURILL,
},
{
- .var00 = 6,
- .var01 = 13,
- .var02 = 8,
- .var04 = 0x100,
+ .id1 = 6,
+ .id2 = 13,
+ .gridSquare = SQU_ORANGE_SKITTY,
+ .flag = F_ORANGE_SKITTY,
},
{
- .var00 = 7,
- .var01 = 15,
- .var02 = 14,
- .var04 = 0x4000,
+ .id1 = 7,
+ .id2 = 15,
+ .gridSquare = SQU_GREEN_MAKUHITA,
+ .flag = F_GREEN_MAKUHITA,
},
{
- .var00 = 8,
- .var01 = 17,
- .var02 = 16,
- .var04 = 0x10000,
+ .id1 = 8,
+ .id2 = 17,
+ .gridSquare = SQU_PURPLE_WYNAUT,
+ .flag = F_PURPLE_WYNAUT,
},
{
- .var00 = 9,
- .var01 = 19,
- .var02 = 7,
- .var04 = 0x80,
+ .id1 = 9,
+ .id2 = 19,
+ .gridSquare = SQU_ORANGE_AZURILL,
+ .flag = F_ORANGE_AZURILL,
},
{
- .var00 = 10,
- .var01 = 21,
- .var02 = 13,
- .var04 = 0x2000,
+ .id1 = 10,
+ .id2 = 21,
+ .gridSquare = SQU_GREEN_SKITTY,
+ .flag = F_GREEN_SKITTY,
},
{
- .var00 = 11,
- .var01 = 23,
- .var02 = 19,
- .var04 = 0x80000,
+ .id1 = 11,
+ .id2 = 23,
+ .gridSquare = SQU_PURPLE_MAKUHITA,
+ .flag = F_PURPLE_MAKUHITA,
},
};
-static const u8 gUnknown_085B6344[] = {1, 3, 1, 6};
-static const struct StructgUnknown_083F8DF4 gUnknown_085B6348[] =
-{
- {
- .var00 = 1,
- .var01 = 60,
- .var02 = 30,
- .var03 = 1,
- .var04 = 1,
- .var08 = 45,
- .var0A = 30,
- .var0C = 1,
- .var10 = 75,
- .var12 = 27,
- .var14 = 24,
- .var18 = 10,
- .var1A = 360,
+static const u8 sTableMinBets[] = {1, 3, 1, 6};
+
+static const struct RouletteTable sRouletteTables[] =
+{
+ // Left table
+ {
+ .minBet = 1,
+ .randDistanceHigh = DEGREES_PER_SLOT * 2,
+ .randDistanceLow = DEGREES_PER_SLOT,
+ .wheelSpeed = 1,
+ .wheelDelay = 1,
+ .shroomish = {
+ .startAngle = 45,
+ .dropAngle = 30,
+ .fallSlowdown = 1,
+ },
+ .taillow = {
+ .baseDropDelay = 75,
+ .rightStartAngle = 27,
+ .leftStartAngle = 24,
+ },
+ .ballSpeed = 10,
+ .baseTravelDist = 360,
.var1C = -0.5f
},
- {
- .var00 = 3,
- .var01 = 30,
- .var02 = 15,
- .var03 = 1,
- .var04 = 0,
- .var08 = 75,
- .var0A = 60,
- .var0C = 2,
- .var10 = 0,
- .var12 = 54,
- .var14 = 48,
- .var18 = 10,
- .var1A = 270,
+ // Right table
+ {
+ .minBet = 3,
+ .randDistanceHigh = DEGREES_PER_SLOT,
+ .randDistanceLow = DEGREES_PER_SLOT / 2,
+ .wheelSpeed = 1,
+ .wheelDelay = 0,
+ .shroomish = {
+ .startAngle = 75,
+ .dropAngle = 60,
+ .fallSlowdown = 2,
+ },
+ .taillow = {
+ .baseDropDelay = 0,
+ .rightStartAngle = 54,
+ .leftStartAngle = 48,
+ },
+ .ballSpeed = 10,
+ .baseTravelDist = 270,
.var1C = -1.0f
}
};
-static const struct UnkStruct1 gUnknown_085B6388[] =
-{
- {
- .var00 = 0x8000,
- .var02 = 0x0005,
- .var04 = 1,
- .var05 = 1,
- .var06 = 0xFF,
- .var07_0 = 8,
- .var07_5 = 2,
- .var07_7 = 0
+// Data to flash the color indicator for each slot on the roulette wheel
+static const struct RouletteFlashSettings sFlashData_Colors[NUM_ROULETTE_SLOTS + 1] =
+{
+ { // F_FLASH_COLOR_O_WYNAUT
+ .color = FLASHUTIL_USE_EXISTING_COLOR,
+ .paletteOffset = 0x5,
+ .numColors = 1,
+ .delay = 1,
+ .unk6 = -1,
+ .numFadeCycles = 8,
+ .unk7_5 = -2,
+ .colorDeltaDir = 0,
},
- {
- .var00 = 0x8000,
- .var02 = 0x000A,
- .var04 = 1,
- .var05 = 1,
- .var06 = 0xFF,
- .var07_0 = 8,
- .var07_5 = 2,
- .var07_7 = 0
+ { // F_FLASH_COLOR_G_AZURILL
+ .color = FLASHUTIL_USE_EXISTING_COLOR,
+ .paletteOffset = 0xA,
+ .numColors = 1,
+ .delay = 1,
+ .unk6 = -1,
+ .numFadeCycles = 8,
+ .unk7_5 = -2,
+ .colorDeltaDir = 0,
},
- {
- .var00 = 0x8000,
- .var02 = 0x0015,
- .var04 = 1,
- .var05 = 1,
- .var06 = 0xFF,
- .var07_0 = 8,
- .var07_5 = 2,
- .var07_7 = 0
+ { // F_FLASH_COLOR_P_SKITTY
+ .color = FLASHUTIL_USE_EXISTING_COLOR,
+ .paletteOffset = 0x15,
+ .numColors = 1,
+ .delay = 1,
+ .unk6 = -1,
+ .numFadeCycles = 8,
+ .unk7_5 = -2,
+ .colorDeltaDir = 0,
},
- {
- .var00 = 0x8000,
- .var02 = 0x0055,
- .var04 = 1,
- .var05 = 1,
- .var06 = 0xFF,
- .var07_0 = 8,
- .var07_5 = 2,
- .var07_7 = 0
+ { // F_FLASH_COLOR_O_MAKUHITA
+ .color = FLASHUTIL_USE_EXISTING_COLOR,
+ .paletteOffset = 0x55,
+ .numColors = 1,
+ .delay = 1,
+ .unk6 = -1,
+ .numFadeCycles = 8,
+ .unk7_5 = -2,
+ .colorDeltaDir = 0,
},
- {
- .var00 = 0x8000,
- .var02 = 0x005A,
- .var04 = 1,
- .var05 = 1,
- .var06 = 0xFF,
- .var07_0 = 8,
- .var07_5 = 2,
- .var07_7 = 0
+ { // F_FLASH_COLOR_G_WYNAUT
+ .color = FLASHUTIL_USE_EXISTING_COLOR,
+ .paletteOffset = 0x5A,
+ .numColors = 1,
+ .delay = 1,
+ .unk6 = -1,
+ .numFadeCycles = 8,
+ .unk7_5 = -2,
+ .colorDeltaDir = 0,
},
- {
- .var00 = 0x8000,
- .var02 = 0x0065,
- .var04 = 1,
- .var05 = 1,
- .var06 = 0xFF,
- .var07_0 = 8,
- .var07_5 = 2,
- .var07_7 = 0
+ { // F_FLASH_COLOR_P_AZURILL
+ .color = FLASHUTIL_USE_EXISTING_COLOR,
+ .paletteOffset = 0x65,
+ .numColors = 1,
+ .delay = 1,
+ .unk6 = -1,
+ .numFadeCycles = 8,
+ .unk7_5 = -2,
+ .colorDeltaDir = 0,
},
- {
- .var00 = 0x8000,
- .var02 = 0x0075,
- .var04 = 1,
- .var05 = 1,
- .var06 = 0xFF,
- .var07_0 = 8,
- .var07_5 = 2,
- .var07_7 = 0
+ { // F_FLASH_COLOR_O_SKITTY
+ .color = FLASHUTIL_USE_EXISTING_COLOR,
+ .paletteOffset = 0x75,
+ .numColors = 1,
+ .delay = 1,
+ .unk6 = -1,
+ .numFadeCycles = 8,
+ .unk7_5 = -2,
+ .colorDeltaDir = 0,
},
- {
- .var00 = 0x8000,
- .var02 = 0x007A,
- .var04 = 1,
- .var05 = 1,
- .var06 = 0xFF,
- .var07_0 = 8,
- .var07_5 = 2,
- .var07_7 = 0
+ { // F_FLASH_COLOR_G_MAKUHITA
+ .color = FLASHUTIL_USE_EXISTING_COLOR,
+ .paletteOffset = 0x7A,
+ .numColors = 1,
+ .delay = 1,
+ .unk6 = -1,
+ .numFadeCycles = 8,
+ .unk7_5 = -2,
+ .colorDeltaDir = 0,
},
- {
- .var00 = 0x8000,
- .var02 = 0x0085,
- .var04 = 1,
- .var05 = 1,
- .var06 = 0xFF,
- .var07_0 = 8,
- .var07_5 = 2,
- .var07_7 = 0
+ { // F_FLASH_COLOR_P_WYNAUT
+ .color = FLASHUTIL_USE_EXISTING_COLOR,
+ .paletteOffset = 0x85,
+ .numColors = 1,
+ .delay = 1,
+ .unk6 = -1,
+ .numFadeCycles = 8,
+ .unk7_5 = -2,
+ .colorDeltaDir = 0,
},
- {
- .var00 = 0x8000,
- .var02 = 0x0095,
- .var04 = 1,
- .var05 = 1,
- .var06 = 0xFF,
- .var07_0 = 8,
- .var07_5 = 2,
- .var07_7 = 0
+ { // F_FLASH_COLOR_O_AZURILL
+ .color = FLASHUTIL_USE_EXISTING_COLOR,
+ .paletteOffset = 0x95,
+ .numColors = 1,
+ .delay = 1,
+ .unk6 = -1,
+ .numFadeCycles = 8,
+ .unk7_5 = -2,
+ .colorDeltaDir = 0,
},
- {
- .var00 = 0x8000,
- .var02 = 0x009A,
- .var04 = 1,
- .var05 = 1,
- .var06 = 0xFF,
- .var07_0 = 8,
- .var07_5 = 2,
- .var07_7 = 0
+ { // F_FLASH_COLOR_G_SKITTY
+ .color = FLASHUTIL_USE_EXISTING_COLOR,
+ .paletteOffset = 0x9A,
+ .numColors = 1,
+ .delay = 1,
+ .unk6 = -1,
+ .numFadeCycles = 8,
+ .unk7_5 = -2,
+ .colorDeltaDir = 0,
},
- {
- .var00 = 0x8000,
- .var02 = 0x00A5,
- .var04 = 1,
- .var05 = 1,
- .var06 = 0xFF,
- .var07_0 = 8,
- .var07_5 = 2,
- .var07_7 = 0
+ { // F_FLASH_COLOR_P_MAKUHITA
+ .color = FLASHUTIL_USE_EXISTING_COLOR,
+ .paletteOffset = 0xA5,
+ .numColors = 1,
+ .delay = 1,
+ .unk6 = -1,
+ .numFadeCycles = 8,
+ .unk7_5 = -2,
+ .colorDeltaDir = 0,
},
- {
- .var00 = 0x77D6,
- .var02 = 0x0028,
- .var04 = 2,
- .var05 = 10,
- .var06 = 0xFF,
- .var07_0 = 14,
- .var07_5 = 2,
- .var07_7 = 0
+ { // F_FLASH_OUTER_EDGES
+ .color = RGB(22, 30, 29),
+ .paletteOffset = 0x28,
+ .numColors = 2,
+ .delay = 10,
+ .unk6 = -1,
+ .numFadeCycles = 14,
+ .unk7_5 = -2,
+ .colorDeltaDir = 0,
},
};
-static const struct UnkStruct1 gUnknown_085B63F0[] =
-{
- {
- .var00 = 0x53FF,
- .var02 = 0x0101,
- .var04 = 5,
- .var05 = 30,
- .var06 = 0xFF,
- .var07_0 = 14,
- .var07_5 = 2,
- .var07_7 = 0
+// Data to flash any pokemon icon (F_FLASH_ICON) on the roulette wheel. One entry for each color row
+// Each poke icon flashes with the tint of the row color it belongs to, so the pokemon itself is irrelevant
+static const struct RouletteFlashSettings sFlashData_PokeIcons[NUM_BOARD_COLORS] =
+{
+ [GET_ROW_IDX(ROW_ORANGE)] = {
+ .color = RGB(31, 31, 20),
+ .paletteOffset = 0x101,
+ .numColors = 5,
+ .delay = 30,
+ .unk6 = -1,
+ .numFadeCycles = 14,
+ .unk7_5 = -2,
+ .colorDeltaDir = 0,
},
- {
- .var00 = 0x7FFB,
- .var02 = 0x0106,
- .var04 = 5,
- .var05 = 30,
- .var06 = 0xFF,
- .var07_0 = 14,
- .var07_5 = 2,
- .var07_7 = 0
+ [GET_ROW_IDX(ROW_GREEN)] = {
+ .color = RGB(27, 31, 31),
+ .paletteOffset = 0x106,
+ .numColors = 5,
+ .delay = 30,
+ .unk6 = -1,
+ .numFadeCycles = 14,
+ .unk7_5 = -2,
+ .colorDeltaDir = 0,
},
- {
- .var00 = 0x7F7F,
- .var02 = 0x010B,
- .var04 = 5,
- .var05 = 30,
- .var06 = 0xFF,
- .var07_0 = 14,
- .var07_5 = 2,
- .var07_7 = 0
+ [GET_ROW_IDX(ROW_PURPLE)] = {
+ .color = RGB(31, 27, 31),
+ .paletteOffset = 0x10B,
+ .numColors = 5,
+ .delay = 30,
+ .unk6 = -1,
+ .numFadeCycles = 14,
+ .unk7_5 = -2,
+ .colorDeltaDir = 0,
}
};
-static const struct YesNoFuncTable gUnknown_085B6408 =
+static const struct YesNoFuncTable sYesNoTable_AcceptMinBet =
{
- sub_8142918,
- sub_814297C
+ Task_AcceptMinBet,
+ Task_DeclineMinBet
};
-static const struct YesNoFuncTable gUnknown_085B6410 =
+static const struct YesNoFuncTable sYesNoTable_KeepPlaying =
{
- sub_8140968,
- sub_8140994
+ Task_ContinuePlaying,
+ Task_StopPlaying
};
-static void sub_8140238(void)
+static void CB2_Roulette(void)
{
RunTasks();
AnimateSprites();
BuildOamBuffer();
- if (gUnknown_0203AB88->varB8.var00)
- task_tutorial_controls_fadein(&gUnknown_0203AB88->varB8);
+ if (sRoulette->flashUtil.enabled)
+ RouletteFlash_Run(&sRoulette->flashUtil);
}
-static void sub_8140264(void)
+static void VBlankCB_Roulette(void)
{
LoadOam();
ProcessSpriteCopyRequests();
TransferPlttBuffer();
- sub_8142814();
- SetGpuReg(REG_OFFSET_BG1HOFS, 0x200 - gUnknown_0203AB88->var26);
- if (gUnknown_0203AB88->var01)
- SetGpuReg(REG_OFFSET_BLDALPHA, gUnknown_0203AB88->var34);
- if (gUnknown_0203AB88->var2A != 0)
- {
- DmaCopy16(3, &gUnknown_0203AB88->tilemapBuffers[2][0xE0], (void *)BG_SCREEN_ADDR(4) + 0x1C0, 0x340);
- gUnknown_0203AB88->var2A = 0;
+ UpdateWheelPosition();
+ SetGpuReg(REG_OFFSET_BG1HOFS, 0x200 - sRoulette->gridX);
+
+ if (sRoulette->shroomishShadowTimer)
+ SetGpuReg(REG_OFFSET_BLDALPHA, sRoulette->shroomishShadowAlpha);
+
+ if (sRoulette->updateGridHighlight)
+ {
+ DmaCopy16(3, &sRoulette->tilemapBuffers[2][0xE0], (void *)BG_SCREEN_ADDR(4) + 0x1C0, 0x340);
+ sRoulette->updateGridHighlight = FALSE;
}
- switch (gUnknown_0203AB88->var28)
+ switch (sRoulette->selectionRectDrawState)
{
- case 1:
+ case SELECT_STATE_DRAW:
SetBgAttribute(0, BG_ATTR_CHARBASEINDEX, 0);
ShowBg(0);
- DmaCopy16(3, &gUnknown_0203AB88->tilemapBuffers[0][0xE0], (void *)BG_SCREEN_ADDR(31) + 0x1C0, 0x340);
- gUnknown_0203AB88->var28 = 2;
+ DmaCopy16(3, &sRoulette->tilemapBuffers[0][0xE0], (void *)BG_SCREEN_ADDR(31) + 0x1C0, 0x340);
+ sRoulette->selectionRectDrawState = SELECT_STATE_UPDATE;
break;
- case 2:
- DmaCopy16(3, &gUnknown_0203AB88->tilemapBuffers[0][0xE0], (void *)BG_SCREEN_ADDR(31) + 0x1C0, 0x340);
+ case SELECT_STATE_UPDATE:
+ DmaCopy16(3, &sRoulette->tilemapBuffers[0][0xE0], (void *)BG_SCREEN_ADDR(31) + 0x1C0, 0x340);
break;
- case 0xFF:
+ case SELECT_STATE_ERASE:
SetBgAttribute(0, BG_ATTR_CHARBASEINDEX, 2);
ShowBg(0);
DmaFill16(3, 0, (void *)BG_SCREEN_ADDR(31) + 0x1C0, 0x340);
- gUnknown_0203AB88->var28 = 0;
- case 0:
+ sRoulette->selectionRectDrawState = SELECT_STATE_WAIT;
+ case SELECT_STATE_WAIT:
break;
}
}
-static void sub_8140388(void)
+static void InitRouletteBgAndWindows(void)
{
u32 size = 0;
- gUnknown_0203AB88 = AllocZeroed(sizeof(*gUnknown_0203AB88));
+ sRoulette = AllocZeroed(sizeof(*sRoulette));
ResetBgsAndClearDma3BusyFlags(0);
- InitBgsFromTemplates(1, gUnknown_085B6140, ARRAY_COUNT(gUnknown_085B6140));
- SetBgTilemapBuffer(0, gUnknown_0203AB88->tilemapBuffers[0]);
- SetBgTilemapBuffer(1, gUnknown_0203AB88->tilemapBuffers[2]);
- SetBgTilemapBuffer(2, gUnknown_0203AB88->tilemapBuffers[6]);
- InitWindows(gUnknown_085B614C);
- sub_8197200();
- gUnknown_0203AB8C = 0;
- gUnknown_0203AB88->unk_397C = malloc_and_decompress(gUnknown_085B5DFC, &size);
+ InitBgsFromTemplates(1, sBgTemplates, ARRAY_COUNT(sBgTemplates));
+ SetBgTilemapBuffer(0, sRoulette->tilemapBuffers[0]);
+ SetBgTilemapBuffer(1, sRoulette->tilemapBuffers[2]);
+ SetBgTilemapBuffer(2, sRoulette->tilemapBuffers[6]);
+ InitWindows(sWindowTemplates);
+ InitTextBoxGfxAndPrinters();
+ sTextWindowId = 0;
+ sRoulette->gridTilemap = malloc_and_decompress(sGrid_Tilemap, &size);
}
-static void sub_8140418(void)
+static void FreeRoulette(void)
{
- FREE_AND_SET_NULL(gUnknown_0203AB88->unk_397C);
+ FREE_AND_SET_NULL(sRoulette->gridTilemap);
FreeAllWindowBuffers();
UnsetBgTilemapBuffer(0);
UnsetBgTilemapBuffer(1);
UnsetBgTilemapBuffer(2);
ResetBgsAndClearDma3BusyFlags(0);
- memset(gUnknown_0203AB88, 0, sizeof(*gUnknown_0203AB88));
- FREE_AND_SET_NULL(gUnknown_0203AB88);
+ memset(sRoulette, 0, sizeof(*sRoulette));
+ FREE_AND_SET_NULL(sRoulette);
}
-static void sub_8140470(void)
+static void InitRouletteTableData(void)
{
u8 i;
- u16 arr[3] = {RGB(24, 4, 10), RGB(10, 19, 6), RGB(24, 4, 10)}; // the third is never used ?
+ u16 bgColors[3] = {RGB(24, 4, 10), RGB(10, 19, 6), RGB(24, 4, 10)}; // 3rd is never used, same as 1st
- gUnknown_0203AB88->var04_0 = (gSpecialVar_0x8004 & 1);
+ sRoulette->tableId = (gSpecialVar_0x8004 & 1);
- if (gSpecialVar_0x8004 & 0x80)
- gUnknown_0203AB88->var04_7 = 1;
+ if (gSpecialVar_0x8004 & ROULETTE_SPECIAL_RATE)
+ sRoulette->isSpecialRate = TRUE;
- gUnknown_0203AB88->var22 = gUnknown_085B6348[gUnknown_0203AB88->var04_0].var03;
- gUnknown_0203AB88->var23 = gUnknown_085B6348[gUnknown_0203AB88->var04_0].var04;
- gUnknown_0203AB88->var19 = gUnknown_085B6344[gUnknown_0203AB88->var04_0 + gUnknown_0203AB88->var04_7 * 2];
- gUnknown_0203AB88->var1A_4 = 1;
+ sRoulette->wheelSpeed = sRouletteTables[sRoulette->tableId].wheelSpeed;
+ sRoulette->wheelDelay = sRouletteTables[sRoulette->tableId].wheelDelay;
+ sRoulette->minBet = sTableMinBets[sRoulette->tableId + sRoulette->isSpecialRate * 2];
+ sRoulette->unk1 = 1;
- if (gUnknown_0203AB88->var19 == 1)
- gPlttBufferUnfaded[0] = gPlttBufferUnfaded[0x51] = gPlttBufferFaded[0] = gPlttBufferFaded[0x51] = arr[0];
+ // Left table (with min bet of 1) has red background, other table has green
+ if (sRoulette->minBet == 1)
+ gPlttBufferUnfaded[0] = gPlttBufferUnfaded[0x51] = gPlttBufferFaded[0] = gPlttBufferFaded[0x51] = bgColors[0];
else
- gPlttBufferUnfaded[0] = gPlttBufferUnfaded[0x51] = gPlttBufferFaded[0] = gPlttBufferFaded[0x51] = arr[1];
+ gPlttBufferUnfaded[0] = gPlttBufferUnfaded[0x51] = gPlttBufferFaded[0] = gPlttBufferFaded[0x51] = bgColors[1];
- sub_8151678(&gUnknown_0203AB88->varB8);
+ RouletteFlash_Reset(&sRoulette->flashUtil);
- for (i = 0; i < 13; i++)
+ // Init flash util for flashing the selected colors on the wheel
+ // + 1 for the additional entry to flash the outer edges on a win
+ for (i = 0; i < NUM_ROULETTE_SLOTS + 1; i++)
{
- sub_815168C(&gUnknown_0203AB88->varB8, i, &gUnknown_085B6388[i]);
+ RouletteFlash_Add(&sRoulette->flashUtil, i, &sFlashData_Colors[i]);
}
for (i = 0; i < PARTY_SIZE; i++)
@@ -908,17 +1147,27 @@ static void sub_8140470(void)
switch (GetMonData(&gPlayerParty[i], MON_DATA_SPECIES2))
{
case SPECIES_SHROOMISH:
- gUnknown_0203AB88->var02 |= 0x1;
+ sRoulette->partySpeciesFlags |= HAS_SHROOMISH;
break;
case SPECIES_TAILLOW:
- gUnknown_0203AB88->var02 |= 0x2;
+ sRoulette->partySpeciesFlags |= HAS_TAILLOW;
break;
}
}
RtcCalcLocalTime();
}
-static void sub_81405CC(void)
+// Task data for the roulette game tasks, starting with Task_StartPlaying
+#define tMultiplier data[2]
+#define tSelectionId data[4]
+#define tWonBet data[5]
+#define tBallNum data[6]
+#define tTotalBallNum data[8] // Same as tBallNum but isn't cleared every 6 balls
+#define tConsecutiveWins data[11]
+#define tWinningSquare data[12]
+#define tCoins data[13]
+
+static void CB2_LoadRoulette(void)
{
u8 taskId;
@@ -932,7 +1181,7 @@ static void sub_81405CC(void)
ResetAllBgsCoordinates();
break;
case 1:
- sub_8140388();
+ InitRouletteBgAndWindows();
DeactivateAllTextPrinters();
SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_EFFECT_NONE |
BLDCNT_TGT2_BG2 |
@@ -943,39 +1192,39 @@ static void sub_81405CC(void)
ResetPaletteFade();
ResetSpriteData();
ResetTasks();
- reset_temp_tile_data_buffers();
+ ResetTempTileDataBuffers();
break;
case 3:
- LoadPalette(&gUnknown_085B5BFC, 0, 0x1C0);
- decompress_and_copy_tile_data_to_vram(1, gRouletteMenuTiles, 0, 0, 0);
- decompress_and_copy_tile_data_to_vram(2, gRouletteWheelTiles, 0, 0, 0);
+ LoadPalette(&sWheel_Pal, 0, 0x1C0);
+ DecompressAndCopyTileDataToVram(1, gRouletteMenu_Gfx, 0, 0, 0);
+ DecompressAndCopyTileDataToVram(2, gRouletteWheel_Gfx, 0, 0, 0);
break;
case 4:
- if (free_temp_tile_data_buffers_if_possible())
+ if (FreeTempTileDataBuffersIfPossible())
return;
- sub_8140470();
- CopyToBgTilemapBuffer(2, gUnknown_085B5FA0, 0, 0);
+ InitRouletteTableData();
+ CopyToBgTilemapBuffer(2, sWheel_Tilemap, 0, 0);
break;
case 5:
- sub_8142C0C(0);
- sub_81439C8();
- sub_814391C();
- sub_8143314();
- sub_8142CD0();
- sub_8142F7C();
- sub_81431E4();
+ LoadOrFreeMiscSpritePalettesAndSheets(FALSE);
+ CreateWheelBallSprites();
+ CreateWheelCenterSprite();
+ CreateInterfaceSprites();
+ CreateGridSprites();
+ CreateGridBallSprites();
+ CreateWheelIconSprites();
break;
case 6:
AnimateSprites();
BuildOamBuffer();
- sub_8143514(GetCoins());
- sub_814372C(6);
- sub_81436D0(0);
- sub_81424FC(0);
- DrawStdWindowFrame(gUnknown_0203AB8C, FALSE);
- AddTextPrinterParameterized(gUnknown_0203AB8C, 1, Roulette_Text_ControlsInstruction, 0, 1, TEXT_SPEED_FF, NULL);
- CopyWindowToVram(gUnknown_0203AB8C, 3);
+ SetCreditDigits(GetCoins());
+ SetBallCounterNumLeft(BALLS_PER_ROUND);
+ SetMultiplierSprite(SELECTION_NONE);
+ DrawGridBackground(SELECTION_NONE);
+ DrawStdWindowFrame(sTextWindowId, FALSE);
+ AddTextPrinterParameterized(sTextWindowId, 1, Roulette_Text_ControlsInstruction, 0, 1, TEXT_SPEED_FF, NULL);
+ CopyWindowToVram(sTextWindowId, 3);
gSpriteCoordOffsetX = -60;
gSpriteCoordOffsetY = 0;
break;
@@ -991,39 +1240,39 @@ static void sub_81405CC(void)
break;
case 8:
EnableInterrupts(INTR_FLAG_VBLANK);
- SetVBlankCallback(sub_8140264);
+ SetVBlankCallback(VBlankCB_Roulette);
BeginHardwarePaletteFade(0xFF, 0, 16, 0, 1);
- taskId = gUnknown_0203AB88->varA4 = CreateTask(sub_81408A8, 0);
- gTasks[taskId].data[6] = 6;
- gTasks[taskId].data[13] = GetCoins();
+ taskId = sRoulette->playTaskId = CreateTask(Task_StartPlaying, 0);
+ gTasks[taskId].tBallNum = BALLS_PER_ROUND;
+ gTasks[taskId].tCoins = GetCoins();
AlertTVThatPlayerPlayedRoulette(GetCoins());
- gUnknown_0203AB88->varA5 = CreateTask(sub_8140814, 1);
- SetMainCallback2(sub_8140238);
+ sRoulette->spinTaskId = CreateTask(Task_SpinWheel, 1);
+ SetMainCallback2(CB2_Roulette);
return;
}
gMain.state++;
}
-static void sub_8140814(u8 unused)
+static void Task_SpinWheel(u8 taskId)
{
s16 sin;
s16 cos;
- if (gUnknown_0203AB88->var21++ == gUnknown_0203AB88->var23)
+ if (sRoulette->wheelDelayTimer++ == sRoulette->wheelDelay)
{
- gUnknown_0203AB88->var21 = 0;
- if ((gUnknown_0203AB88->var24 -= gUnknown_0203AB88->var22) < 0)
- gUnknown_0203AB88->var24 = 360 - gUnknown_0203AB88->var22;
+ sRoulette->wheelDelayTimer = 0;
+ if ((sRoulette->wheelAngle -= sRoulette->wheelSpeed) < 0)
+ sRoulette->wheelAngle = 360 - sRoulette->wheelSpeed;
}
- sin = Sin2(gUnknown_0203AB88->var24);
- cos = Cos2(gUnknown_0203AB88->var24);
+ sin = Sin2(sRoulette->wheelAngle);
+ cos = Cos2(sRoulette->wheelAngle);
sin = sin / 16;
- gUnknown_0203AB88->var2C.a = gUnknown_0203AB88->var2C.d = cos / 16;
- gUnknown_0203AB88->var2C.b = sin;
- gUnknown_0203AB88->var2C.c = -sin;
+ sRoulette->wheelRotation.a = sRoulette->wheelRotation.d = cos / 16;
+ sRoulette->wheelRotation.b = sin;
+ sRoulette->wheelRotation.c = -sin;
}
-static void sub_81408A8(u8 taskId)
+static void Task_StartPlaying(u8 taskId)
{
if (UpdatePaletteFade() == 0)
{
@@ -1031,222 +1280,230 @@ static void sub_81408A8(u8 taskId)
BLDCNT_TGT2_BG2 |
BLDCNT_TGT2_BD);
SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(8, 8));
- gTasks[taskId].data[6] = 0;
- sub_8141FF4(taskId);
- sub_8142070();
- sub_8143A40();
- sub_81424FC(0);
- sub_814372C(6);
- sub_8141F7C(taskId, sub_8140968, 0xFFFF, 0x3);
+ gTasks[taskId].tBallNum = 0;
+ ResetBallDataForNewSpin(taskId);
+ ResetHits();
+ HideWheelBalls();
+ DrawGridBackground(SELECTION_NONE);
+ SetBallCounterNumLeft(BALLS_PER_ROUND);
+ StartTaskAfterDelayOrInput(taskId, Task_ContinuePlaying, NO_DELAY, A_BUTTON | B_BUTTON);
}
}
-static void sub_8140914(u8 taskId)
+static void Task_AskKeepPlaying(u8 taskId)
{
DisplayYesNoMenuDefaultYes();
- DrawStdWindowFrame(gUnknown_0203AB8C, 0);
- AddTextPrinterParameterized(gUnknown_0203AB8C, 1, Roulette_Text_KeepPlaying, 0, 1, TEXT_SPEED_FF, 0);
- CopyWindowToVram(gUnknown_0203AB8C, 3);
- DoYesNoFuncWithChoice(taskId, &gUnknown_085B6410);
+ DrawStdWindowFrame(sTextWindowId, 0);
+ AddTextPrinterParameterized(sTextWindowId, 1, Roulette_Text_KeepPlaying, 0, 1, TEXT_SPEED_FF, 0);
+ CopyWindowToVram(sTextWindowId, 3);
+ DoYesNoFuncWithChoice(taskId, &sYesNoTable_KeepPlaying);
}
-static void sub_8140968(u8 taskId)
+static void Task_ContinuePlaying(u8 taskId)
{
ClearStdWindowAndFrame(0, TRUE);
- gTasks[taskId].func = sub_8140BD0;
+ gTasks[taskId].func = Task_SelectFirstEmptySquare;
}
-static void sub_8140994(u8 taskId)
+static void Task_StopPlaying(u8 taskId)
{
- DestroyTask(gUnknown_0203AB88->varA5);
- sub_8141DE4(taskId);
+ DestroyTask(sRoulette->spinTaskId);
+ ExitRoulette(taskId);
}
-static void sub_81409B8(u8 r0)
+static void UpdateGridSelectionRect(u8 selectionId)
{
u8 temp0, temp1;
- switch (r0)
+ switch (selectionId)
{
- case 0:
- sub_8152008(&gUnknown_0203AB88->tilemapBuffers[0][0], 0, 14, 7, 16, 13);
+ case SELECTION_NONE:
+ ClearTilemapRect(&sRoulette->tilemapBuffers[0][0], 0, 14, 7, 16, 13);
break;
- case 1:
- case 2:
- case 3:
- case 4:
- temp0 = (r0 * 3 + 14);
- sub_8152008(&gUnknown_0203AB88->tilemapBuffers[0][0], 0, 14, 7, 16, 13);
- sub_8152058(&gUnknown_0203AB88->tilemapBuffers[0][0], &gUnknown_0203AB88->unk_397C[281], temp0, 7, 3, 13);
+ case COL_WYNAUT:
+ case COL_AZURILL:
+ case COL_SKITTY:
+ case COL_MAKUHITA:
+ temp0 = (selectionId * 3 + 14);
+ ClearTilemapRect(&sRoulette->tilemapBuffers[0][0], 0, 14, 7, 16, 13);
+ SetTilemapRect(&sRoulette->tilemapBuffers[0][0], &sRoulette->gridTilemap[281], temp0, 7, 3, 13);
break;
- case 0x5:
- case 0xA:
- case 0xF:
- temp1 = ((r0 - 1) / 5 * 3 + 10);
- sub_8152008(&gUnknown_0203AB88->tilemapBuffers[0][0], 0, 14, 7, 16, 13);
- sub_8152058(&gUnknown_0203AB88->tilemapBuffers[0][0], &gUnknown_0203AB88->unk_397C[320], 14, temp1, 16, 3);
+ case ROW_ORANGE:
+ case ROW_GREEN:
+ case ROW_PURPLE:
+ temp1 = ((selectionId - 1) / 5 * 3 + 10);
+ ClearTilemapRect(&sRoulette->tilemapBuffers[0][0], 0, 14, 7, 16, 13);
+ SetTilemapRect(&sRoulette->tilemapBuffers[0][0], &sRoulette->gridTilemap[320], 14, temp1, 16, 3);
break;
+ // Individual square
default:
- temp0 = ((r0 % 5) * 3 + 14);
- temp1 = ((r0 - 1) / 5 * 3 + 7);
- sub_8152008(&gUnknown_0203AB88->tilemapBuffers[0][0], 0, 14, 7, 16, 13);
- sub_8152058(&gUnknown_0203AB88->tilemapBuffers[0][0], &gUnknown_0203AB88->unk_397C[272], temp0, temp1, 3, 3);
+ temp0 = GET_COL(selectionId) * 3 + 14;
+ temp1 = ((selectionId - 1) / 5 * 3 + 7);
+ ClearTilemapRect(&sRoulette->tilemapBuffers[0][0], 0, 14, 7, 16, 13);
+ SetTilemapRect(&sRoulette->tilemapBuffers[0][0], &sRoulette->gridTilemap[272], temp0, temp1, 3, 3);
break;
}
}
-static void sub_8140B64(u8 taskId)
+static void UpdateGridSelection(u8 taskId)
{
- sub_81436D0(gTasks[taskId].data[4]);
- sub_81409B8(gTasks[taskId].data[4]);
+ SetMultiplierSprite(gTasks[taskId].tSelectionId);
+ UpdateGridSelectionRect(gTasks[taskId].tSelectionId);
}
-static void sub_8140B8C(u8 taskId)
+static void Task_StartHandleBetGridInput(u8 taskId)
{
- gUnknown_0203AB88->var28 = 1;
- sub_81409B8(gTasks[taskId].data[4]);
- gUnknown_0203AB88->var23 = 2;
- gUnknown_0203AB88->var21 = 0;
- gTasks[taskId].func = sub_8141040;
+ sRoulette->selectionRectDrawState = SELECT_STATE_DRAW;
+ UpdateGridSelectionRect(gTasks[taskId].tSelectionId);
+ sRoulette->wheelDelay = 2;
+ sRoulette->wheelDelayTimer = 0;
+ gTasks[taskId].func = Task_HandleBetGridInput;
}
-static void sub_8140BD0(u8 taskId)
+static void Task_SelectFirstEmptySquare(u8 taskId)
{
s16 i;
- if (gUnknown_0203AB88->var08 & 0x20)
+ if (sRoulette->hitFlags & F_ORANGE_ROW)
{
- for (i = 11; i < 14; i++)
+ // If the whole orange row is filled, get first in green row
+ for (i = SQU_GREEN_WYNAUT; i < SQU_GREEN_MAKUHITA; i++)
{
- if ((gUnknown_0203AB88->var08 & gUnknown_085B6154[i].var08) == 0)
+ if (!(sRoulette->hitFlags & sGridSelections[i].flag))
break;
}
}
else
{
- for (i = 6; i < 10; i++)
+ // Otherwise get first in orange row
+ // With only 6 balls both rows can't be filled, no need to check purple row
+ for (i = SQU_ORANGE_WYNAUT; i <= SQU_ORANGE_MAKUHITA; i++) // <= is accidental, but it will never get that far
{
- if ((gUnknown_0203AB88->var08 & gUnknown_085B6154[i].var08) == 0)
+ if (!(sRoulette->hitFlags & sGridSelections[i].flag))
break;
}
}
- gTasks[taskId].data[4] = i;
- sub_8141FF4(taskId);
- sub_81424FC(gTasks[taskId].data[4]);
- sub_81436D0(gTasks[taskId].data[4]);
- sub_8142284(gTasks[taskId].data[4]);
+ gTasks[taskId].tSelectionId = i;
+ ResetBallDataForNewSpin(taskId);
+ DrawGridBackground(gTasks[taskId].tSelectionId);
+ SetMultiplierSprite(gTasks[taskId].tSelectionId);
+ FlashSelectionOnWheel(gTasks[taskId].tSelectionId);
gTasks[taskId].data[1] = 0;
- gTasks[taskId].func = sub_8140B8C;
+ gTasks[taskId].func = Task_StartHandleBetGridInput;
}
-static u8 sub_8140CA8(s16 *r0, u8 r1)
+static bool8 CanMoveSelectionInDir(s16 *selectionId, u8 dir)
{
s8 temp1 = 0;
s8 temp = 0;
- s8 arr[4] = {-5, 5, -1, 1};
- s8 t = *r0;
+ s8 moveOffsets[4] = {-5, 5, -1, 1};
+ s8 originalSelection = *selectionId;
- switch (r1)
+ switch (dir)
{
- case 0:
- case 1:
- temp1 = (*r0 % 5);
- temp = temp1 + 15;
- if (temp1 == 0)
+ case 0: // UP
+ case 1: // DOWN
+ temp1 = GET_COL(*selectionId);
+ temp = temp1 + ROW_PURPLE;
+ if (temp1 == SELECTION_NONE)
temp1 = 5;
break;
- case 2:
- case 3:
- temp1 = (*r0 / 5) * 5;
- temp = temp1 + 4;
- if (temp1 == 0)
+ case 2: // LEFT
+ case 3: // RIGHT
+ temp1 = GET_ROW(*selectionId);
+ temp = temp1 + COL_MAKUHITA;
+ if (temp1 == SELECTION_NONE)
temp1 = 1;
break;
}
- *r0 += arr[r1];
+ *selectionId += moveOffsets[dir];
- if (*r0 < temp1)
- *r0 = temp;
+ if (*selectionId < temp1)
+ *selectionId = temp;
- if (*r0 > temp)
- *r0 = temp1;
+ if (*selectionId > temp)
+ *selectionId = temp1;
- if (*r0 != t)
+ if (*selectionId != originalSelection)
return TRUE;
return FALSE;
}
-static void sub_8140D6C(u8 r0)
-{
- u8 z = 0;
- bool8 var0 = FALSE;
- if (!(gMain.newKeys & DPAD_UP) || ((var0 = TRUE), sub_8140CA8(&gTasks[r0].data[4], 0)))
- if (!(gMain.newKeys & DPAD_DOWN) || ((var0 = TRUE), sub_8140CA8(&gTasks[r0].data[4], 1)))
- if (!(gMain.newKeys & DPAD_LEFT) || ((var0 = TRUE), sub_8140CA8(&gTasks[r0].data[4], 2)))
- if (!(gMain.newKeys & DPAD_RIGHT) || ((var0 = TRUE), sub_8140CA8(&gTasks[r0].data[4], 3)))
- if (var0)
- {
- u8 i;
- sub_81424FC(gTasks[r0].data[4]);
- sub_8140B64(r0);
- gTasks[r0].data[1] = z;
- PlaySE(SE_SELECT);
- sub_8151A9C(&gUnknown_0203AB88->varB8, 0xFFFF);
- gUnknown_0203AB88->varB8.var04[13].var00_7 = gUnknown_0203AB88->varB8.var04[14].var00_7 = gUnknown_0203AB88->varB8.var04[15].var00_7 = 0;
- sub_8142284(gTasks[r0].data[4]);
- for (i = 0; i < 4; i++)
- {
- gSprites[gUnknown_0203AB88->var3C[i + 41]].oam.tileNum =
- gSprites[gUnknown_0203AB88->var3C[i + 41]].sheetTileStart
- + (*gSprites[gUnknown_0203AB88->var3C[i + 41]].anims)->type;
- }
- if ((u16)(gTasks[r0].data[4] - 1) < 4 && !(gUnknown_0203AB88->var08 & gUnknown_085B6154[gTasks[r0].data[4]].var08) )
- {
- z = gTasks[r0].data[4] - 1;
- gSprites[gUnknown_0203AB88->var3C[z + 41]].oam.tileNum =
- gSprites[gUnknown_0203AB88->var3C[z + 41]].sheetTileStart
- + (*gSprites[gUnknown_0203AB88->var3C[z + 41]].anims + 1)->type;
- }
- }
+static void ProcessBetGridInput(u8 taskId)
+{
+ u8 headerOffset = 0;
+ bool8 dirPressed = FALSE;
+ if ((!(JOY_NEW(DPAD_UP)) || ((dirPressed = TRUE) && CanMoveSelectionInDir(&gTasks[taskId].tSelectionId, 0)))
+ && (!(JOY_NEW(DPAD_DOWN)) || ((dirPressed = TRUE) && CanMoveSelectionInDir(&gTasks[taskId].tSelectionId, 1)))
+ && (!(JOY_NEW(DPAD_LEFT)) || ((dirPressed = TRUE) && CanMoveSelectionInDir(&gTasks[taskId].tSelectionId, 2)))
+ && (!(JOY_NEW(DPAD_RIGHT)) || ((dirPressed = TRUE) && CanMoveSelectionInDir(&gTasks[taskId].tSelectionId, 3)))
+ && (dirPressed))
+ {
+ u8 i;
+ DrawGridBackground(gTasks[taskId].tSelectionId);
+ UpdateGridSelection(taskId);
+ gTasks[taskId].data[1] = 0;
+ PlaySE(SE_SELECT);
+ RouletteFlash_Stop(&sRoulette->flashUtil, 0xFFFF);
+ sRoulette->flashUtil.palettes[FLASH_ICON].available = sRoulette->flashUtil.palettes[FLASH_ICON_2].available = sRoulette->flashUtil.palettes[FLASH_ICON_3].available = FALSE;
+ FlashSelectionOnWheel(gTasks[taskId].tSelectionId);
+
+ // Switch all the poke (column) headers to gray outlines
+ for (i = 0; i < NUM_BOARD_POKES; i++)
+ {
+ gSprites[sRoulette->spriteIds[i + SPR_POKE_HEADERS]].oam.tileNum =
+ gSprites[sRoulette->spriteIds[i + SPR_POKE_HEADERS]].sheetTileStart
+ + (*gSprites[sRoulette->spriteIds[i + SPR_POKE_HEADERS]].anims)->type;
+ }
+ // If the current selection is a column with at least 1 unhit space, fill in the header
+ if ((u16)(gTasks[taskId].tSelectionId - 1) < COL_MAKUHITA && !(sRoulette->hitFlags & sGridSelections[gTasks[taskId].tSelectionId].flag))
+ {
+ headerOffset = gTasks[taskId].tSelectionId - 1;
+ gSprites[sRoulette->spriteIds[headerOffset + SPR_POKE_HEADERS]].oam.tileNum =
+ gSprites[sRoulette->spriteIds[headerOffset + SPR_POKE_HEADERS]].sheetTileStart
+ + (*gSprites[sRoulette->spriteIds[headerOffset + SPR_POKE_HEADERS]].anims + 1)->type;
+ }
+ }
}
-static void sub_8140F6C(u8 r0)
+static void Task_StartSpin(u8 taskId)
{
IncrementDailyRouletteUses();
- gUnknown_0203AB88->var28 = 0xFF;
- if (gUnknown_0203AB88->var19 == 1)
- gUnknown_0203AB88->var23 = 1;
+ sRoulette->selectionRectDrawState = SELECT_STATE_ERASE;
+ if (sRoulette->minBet == 1)
+ sRoulette->wheelDelay = 1;
else
- gUnknown_0203AB88->var23 = 0;
- gUnknown_0203AB88->var21 = 0;
- gTasks[r0].data[1] = 32;
- gTasks[r0].func = sub_81410FC;
+ sRoulette->wheelDelay = 0;
+ sRoulette->wheelDelayTimer = 0;
+ gTasks[taskId].data[1] = 32;
+ gTasks[taskId].func = Task_SlideGridOffscreen;
}
-static void sub_8140FC4(u8 taskId)
+static void Task_PlaceBet(u8 taskId)
{
- gUnknown_0203AB88->var1B[gUnknown_0203AB88->var1A_0] = gTasks[taskId].data[4];
- gTasks[taskId].data[2] = sub_8142758(gUnknown_0203AB88->var1B[gUnknown_0203AB88->var1A_0]);
- sub_81436D0(gUnknown_0203AB88->var1B[gUnknown_0203AB88->var1A_0]);
- if ((gTasks[taskId].data[13] -= gUnknown_0203AB88->var19) < 0)
- gTasks[taskId].data[13] = 0;
- sub_8143514(gTasks[taskId].data[13]);
- gTasks[taskId].func = sub_8140F6C;
+ sRoulette->betSelection[sRoulette->curBallNum] = gTasks[taskId].tSelectionId;
+ gTasks[taskId].tMultiplier = GetMultiplier(sRoulette->betSelection[sRoulette->curBallNum]);
+ SetMultiplierSprite(sRoulette->betSelection[sRoulette->curBallNum]);
+ if ((gTasks[taskId].tCoins -= sRoulette->minBet) < 0)
+ gTasks[taskId].tCoins = 0;
+ SetCreditDigits(gTasks[taskId].tCoins);
+ gTasks[taskId].func = Task_StartSpin;
}
-static void sub_8141040(u8 taskId)
+static void Task_HandleBetGridInput(u8 taskId)
{
- sub_8140D6C(taskId);
+ ProcessBetGridInput(taskId);
+ // Flash selection rect
switch (gTasks[taskId].data[1])
{
case 0:
- sub_81409B8(gTasks[taskId].data[4]);
+ UpdateGridSelectionRect(gTasks[taskId].tSelectionId);
gTasks[taskId].data[1]++;
break;
case 30:
- sub_81409B8(0);
+ UpdateGridSelectionRect(SELECTION_NONE);
gTasks[taskId].data[1]++;
break;
case 59:
@@ -1256,83 +1513,86 @@ static void sub_8141040(u8 taskId)
gTasks[taskId].data[1]++;
}
- if (gMain.newKeys & A_BUTTON)
+ if (JOY_NEW(A_BUTTON))
{
- if ((gUnknown_0203AB88->var08 & gUnknown_085B6154[gTasks[taskId].data[4]].var08))
+ if (sRoulette->hitFlags & sGridSelections[gTasks[taskId].tSelectionId].flag)
+ {
+ // Ball has already landed on this space
PlaySE(SE_BOO);
+ }
else
{
- m4aSongNumStart(SE_REGI);
- gTasks[taskId].func = sub_8140FC4;
+ m4aSongNumStart(SE_SHOP);
+ gTasks[taskId].func = Task_PlaceBet;
}
}
}
-static void sub_81410FC(u8 taskId)
+static void Task_SlideGridOffscreen(u8 taskId)
{
if (gTasks[taskId].data[1]-- > 0)
{
+ // Slide wheel over
if (gTasks[taskId].data[1] > 2)
gSpriteCoordOffsetX += 2;
- if ((gUnknown_0203AB88->var26 += 4) == 104)
- gSprites[gUnknown_0203AB88->var3C[25]].callback = &SpriteCallbackDummy;
+
+ // Slide grid over
+ if ((sRoulette->gridX += 4) == 104)
+ gSprites[sRoulette->spriteIds[SPR_MULTIPLIER]].callback = &SpriteCallbackDummy;
}
else
{
- sub_8142E70(1, -1);
- sub_8143038(1, -1);
- gTasks[taskId].func = sub_8141344;
+ ShowHideGridIcons(TRUE, -1);
+ ShowHideGridBalls(TRUE, -1);
+ gTasks[taskId].func = Task_InitBallRoll;
gTasks[taskId].data[1] = 0;
}
}
-static u8 sub_814118C(u16 r0, u16 r1)
+// Each table has a set base distance used to determine how far the ball will travel
+// Each roll a random value is generated to add onto this distance
+// Half the value returned by this function is the max distance that can be added on per roll
+// i.e. the lower this value is, the closer the roll will be to a consistent distance
+// Odds of a lower value increase as play continues, if the player has Shroomish and/or Taillow in the party, and dependent on the time
+static u8 GetRandomForBallTravelDistance(u16 ballNum, u16 rand)
{
- switch (gUnknown_0203AB88->var02)
+ switch (sRoulette->partySpeciesFlags)
{
- case 1: // SHROOMISH
- case 2: // TAILLOW
+ case HAS_SHROOMISH:
+ case HAS_TAILLOW:
// one of the two is in party
if (gLocalTime.hours > 3 && gLocalTime.hours < 10)
{
- if (r0 < 12 || (r1 & 1))
- {
- return gUnknown_085B6348[gUnknown_0203AB88->var04_0].var02 / 2;
- }
+ if (ballNum < BALLS_PER_ROUND * 2 || (rand & 1))
+ return sRouletteTables[sRoulette->tableId].randDistanceLow / 2;
else
- {
return 1;
- }
}
- else if (!(r1 & 0x3))
+ else if (!(rand & 3))
{
- return gUnknown_085B6348[gUnknown_0203AB88->var04_0].var02 / 2;
+ return sRouletteTables[sRoulette->tableId].randDistanceLow / 2;
}
- else
+ else
{
- return gUnknown_085B6348[gUnknown_0203AB88->var04_0].var02;
+ return sRouletteTables[sRoulette->tableId].randDistanceLow;
}
break;
- case 3:
+ case HAS_SHROOMISH | HAS_TAILLOW:
// both are in party
if (gLocalTime.hours > 3 && gLocalTime.hours < 11)
{
- if (r0 < 6 || (r1 & 1))
- {
- return gUnknown_085B6348[gUnknown_0203AB88->var04_0].var02 / 2;
- }
+ if (ballNum < BALLS_PER_ROUND || (rand & 1))
+ return sRouletteTables[sRoulette->tableId].randDistanceLow / 2;
else
- {
return 1;
- }
}
- else if ((r1 & 1) && r0 > 6)
+ else if ((rand & 1) && ballNum > BALLS_PER_ROUND)
{
- return gUnknown_085B6348[gUnknown_0203AB88->var04_0].var02 / 4;
+ return sRouletteTables[sRoulette->tableId].randDistanceLow / 4;
}
- else
+ else
{
- return gUnknown_085B6348[gUnknown_0203AB88->var04_0].var02 / 2;
+ return sRouletteTables[sRoulette->tableId].randDistanceLow / 2;
}
break;
case 0:
@@ -1340,257 +1600,252 @@ static u8 sub_814118C(u16 r0, u16 r1)
// neither is in party
if (gLocalTime.hours > 3 && gLocalTime.hours < 10)
{
- if (!(r1 & 3))
- {
+ if (!(rand & 3))
return 1;
- }
else
- {
- return gUnknown_085B6348[gUnknown_0203AB88->var04_0].var02 / 2;
- }
+ return sRouletteTables[sRoulette->tableId].randDistanceLow / 2;
}
- else if (!(r1 & 3))
+ else if (!(rand & 3))
{
- if (r0 > 12)
- {
- return gUnknown_085B6348[gUnknown_0203AB88->var04_0].var02 / 2;
- }
+ if (ballNum > BALLS_PER_ROUND * 2)
+ return sRouletteTables[sRoulette->tableId].randDistanceLow / 2;
else
- {
- return gUnknown_085B6348[gUnknown_0203AB88->var04_0].var02;
- }
+ return sRouletteTables[sRoulette->tableId].randDistanceLow;
}
- else if (r1 & 0x8000)
+ else if (rand & (1 << 15))
{
- if (r0 > 12)
- {
- return gUnknown_085B6348[gUnknown_0203AB88->var04_0].var02;
- }
+ if (ballNum > BALLS_PER_ROUND * 2)
+ return sRouletteTables[sRoulette->tableId].randDistanceLow;
else
- {
- return gUnknown_085B6348[gUnknown_0203AB88->var04_0].var01;
- }
+ return sRouletteTables[sRoulette->tableId].randDistanceHigh;
}
else
{
- return gUnknown_085B6348[gUnknown_0203AB88->var04_0].var01 * 2;
+ return sRouletteTables[sRoulette->tableId].randDistanceHigh * 2;
}
break;
}
}
-static void sub_8141344(u8 taskId)
+static void Task_InitBallRoll(u8 taskId)
{
- u8 randf;
- s8 randfinal;
- s8 r5;
- u16 g = 0;
+ u8 randTravelMod;
+ s8 randTravelDist;
+ s8 startAngleId;
+ u16 travelDist = 0;
u16 rand;
u16 randmod;
- u16 angles[4] = {0, 180, 90, 270}; // angles in 90 degree steps
+ u16 startAngles[4] = {0, 180, 90, 270}; // possible angles to start ball from
rand = Random();
randmod = rand % 100;
- gUnknown_0203AB88->var7C = gTasks[taskId].data[6];
- gUnknown_0203AB88->var7D = gUnknown_0203AB88->var7E = gUnknown_0203AB88->var7F = g;
- randf = sub_814118C(gTasks[taskId].data[8], rand);
- randfinal = (rand % randf) - (randf / 2);
+ sRoulette->curBallSpriteId = gTasks[taskId].tBallNum;
+ // BALL_STATE_ROLLING set below
+ sRoulette->ballState = sRoulette->hitSlot = sRoulette->stuckHitSlot = 0;
+ randTravelMod = GetRandomForBallTravelDistance(gTasks[taskId].tTotalBallNum, rand);
+ randTravelDist = (rand % randTravelMod) - (randTravelMod / 2);
if (gLocalTime.hours < 13)
- r5 = 0;
+ startAngleId = 0;
else
- r5 = 1;
+ startAngleId = 1;
if (randmod < 80)
- r5 *= 2;
+ startAngleId *= 2;
else
- r5 = (1 - r5) * 2;
-
- gUnknown_0203AB88->var80 = g = gUnknown_085B6348[gUnknown_0203AB88->var04_0].var1A + randfinal;
-
- g = S16TOPOSFLOAT(g) / 5.0f;
- gUnknown_0203AB88->var82 = g * 3;
- gUnknown_0203AB88->var86 = gUnknown_0203AB88->var84 = g;
-
- gUnknown_0203AB88->var88 = S16TOPOSFLOAT(angles[(rand & 1) + r5]);
- gUnknown_0203AB88->var8C = S16TOPOSFLOAT(gUnknown_085B6348[gUnknown_0203AB88->var04_0].var18);
- gUnknown_0203AB88->var90 = ((gUnknown_0203AB88->var8C * 0.5f) - gUnknown_0203AB88->var8C) / S16TOPOSFLOAT(gUnknown_0203AB88->var82);
- gUnknown_0203AB88->var94 = 68.0f;
- gUnknown_0203AB88->var9C = 0.0f;
- gUnknown_0203AB88->var98 = -(8.0f / S16TOPOSFLOAT(gUnknown_0203AB88->var82));
- gUnknown_0203AB88->varA0 = 36.0f;
- gTasks[taskId].func = sub_814155C;
+ startAngleId = (1 - startAngleId) * 2;
+
+ sRoulette->ballTravelDist = travelDist = sRouletteTables[sRoulette->tableId].baseTravelDist + randTravelDist;
+
+ travelDist = S16TOPOSFLOAT(travelDist) / 5.0f;
+ sRoulette->ballTravelDistFast = travelDist * 3;
+ sRoulette->ballTravelDistSlow = sRoulette->ballTravelDistMed = travelDist;
+
+ sRoulette->ballAngle = S16TOPOSFLOAT(startAngles[(rand & 1) + startAngleId]);
+ sRoulette->ballAngleSpeed = S16TOPOSFLOAT(sRouletteTables[sRoulette->tableId].ballSpeed);
+ sRoulette->ballAngleAccel = ((sRoulette->ballAngleSpeed * 0.5f) - sRoulette->ballAngleSpeed) / S16TOPOSFLOAT(sRoulette->ballTravelDistFast);
+ sRoulette->ballDistToCenter = 68.0f;
+ sRoulette->ballFallAccel = 0.0f;
+ sRoulette->ballFallSpeed = -(8.0f / S16TOPOSFLOAT(sRoulette->ballTravelDistFast));
+ sRoulette->varA0 = 36.0f;
+ gTasks[taskId].func = Task_RollBall;
}
-static void sub_814155C(u8 taskId)
-{
- u8 index;
- gUnknown_0203AB88->var03_7 = 1;
- index = gUnknown_0203AB88->var3C[gUnknown_0203AB88->var7C];
- gUnknown_0203AB88->var38 = &gSprites[index];
- gUnknown_0203AB88->var38->callback = sub_81446AC;
- gTasks[taskId].data[6]++;
- gTasks[taskId].data[0x8]++;
- sub_814372C(6 - gTasks[taskId].data[6]);
- m4aSongNumStart(SE_TAMAKORO);
- gTasks[taskId].func = sub_81415D4;
+static void Task_RollBall(u8 taskId)
+{
+ sRoulette->ballRolling = TRUE;
+ sRoulette->ball = &gSprites[sRoulette->spriteIds[sRoulette->curBallSpriteId]];
+ sRoulette->ball->callback = SpriteCB_RollBall_Start;
+ gTasks[taskId].tBallNum++;
+ gTasks[taskId].tTotalBallNum++;
+ SetBallCounterNumLeft(BALLS_PER_ROUND - gTasks[taskId].tBallNum);
+ m4aSongNumStart(SE_ROULETTE_BALL);
+ gTasks[taskId].func = Task_RecordBallHit;
}
-static void sub_81415D4(u8 taskId)
+static void Task_RecordBallHit(u8 taskId)
{
- if (gUnknown_0203AB88->var7D)
+ // Wait for ball to finish rolling
+ if (sRoulette->ballState != BALL_STATE_ROLLING)
{
- if (gUnknown_0203AB88->var03_5)
+ // If the ball got stuck, wait for it to be unstuck
+ if (sRoulette->ballStuck)
{
- if (gUnknown_0203AB88->var03_6)
+ if (sRoulette->ballUnstuck)
{
- gUnknown_0203AB88->var03_6 = FALSE;
- gUnknown_0203AB88->var03_5 = FALSE;
+ sRoulette->ballUnstuck = FALSE;
+ sRoulette->ballStuck = FALSE;
}
}
else
{
- if (!gTasks[taskId].data[1])
+ if (gTasks[taskId].data[1] == 0)
{
- bool8 temp = sub_81421E8(sub_81420D0(taskId, gUnknown_0203AB88->var7E), gUnknown_0203AB88->var1B[gUnknown_0203AB88->var1A_0]);
- gTasks[taskId].data[5] = temp;
- if (temp == TRUE)
- sub_8151A48(&gUnknown_0203AB88->varB8, 0x1000);
+ bool8 won = IsHitInBetSelection(RecordHit(taskId, sRoulette->hitSlot), sRoulette->betSelection[sRoulette->curBallNum]);
+ gTasks[taskId].tWonBet = won;
+ if (won == TRUE)
+ RouletteFlash_Enable(&sRoulette->flashUtil, F_FLASH_OUTER_EDGES);
}
if (gTasks[taskId].data[1] <= 60)
{
- if (gMain.newKeys & A_BUTTON)
+ if (JOY_NEW(A_BUTTON))
gTasks[taskId].data[1] = 60;
gTasks[taskId].data[1]++;
}
else
{
- sub_81424FC(gUnknown_0203AB88->var1B[gUnknown_0203AB88->var1A_0]);
- sub_8142E70(0, gTasks[taskId].data[12]);
- sub_8143038(0, gTasks[taskId].data[6] - 1);
+ DrawGridBackground(sRoulette->betSelection[sRoulette->curBallNum]);
+ ShowHideGridIcons(FALSE, gTasks[taskId].tWinningSquare);
+ ShowHideGridBalls(FALSE, gTasks[taskId].tBallNum - 1);
gTasks[taskId].data[1] = 32;
- gTasks[taskId].func = sub_81416D4;
+ gTasks[taskId].func = Task_SlideGridOnscreen;
}
}
}
}
-static void sub_81416D4(u8 taskId)
+static void Task_SlideGridOnscreen(u8 taskId)
{
if (gTasks[taskId].data[1]-- > 0)
{
+ // Slide wheel over
if (gTasks[taskId].data[1] > 2)
gSpriteCoordOffsetX -= 2;
- if ((gUnknown_0203AB88->var26 -= 4) == 104)
- gSprites[gUnknown_0203AB88->var3C[25]].callback = sub_814390C;
+
+ // Slide grid over
+ if ((sRoulette->gridX -= 4) == 104)
+ gSprites[sRoulette->spriteIds[SPR_MULTIPLIER]].callback = SpriteCB_GridSquare;
}
else
{
- sub_8143150(gTasks[taskId].data[12]);
- if (gTasks[taskId].data[5] == 1)
+ ShowHideWinSlotCursor(gTasks[taskId].tWinningSquare);
+ if (gTasks[taskId].tWonBet == TRUE)
gTasks[taskId].data[1] = 121;
else
gTasks[taskId].data[1] = 61;
- gTasks[taskId].func = sub_8141778;
+ gTasks[taskId].func = Task_FlashBallOnWinningSquare;
}
}
-static void sub_8141778(u8 taskId)
+static void Task_FlashBallOnWinningSquare(u8 taskId)
{
if (gTasks[taskId].data[1]-- > 1)
{
switch (gTasks[taskId].data[1] % 16)
{
case 8:
- sub_8142E70(0, -1);
- sub_8143038(0, -1);
+ // Winning square uncovered
+ ShowHideGridIcons(FALSE, -1);
+ ShowHideGridBalls(FALSE, -1);
break;
case 0:
- sub_8142E70(0, gTasks[taskId].data[12]);
- sub_8143038(0, gTasks[taskId].data[6] - 1);
+ // Winning square occluded by ball
+ ShowHideGridIcons(FALSE, gTasks[taskId].tWinningSquare);
+ ShowHideGridBalls(FALSE, gTasks[taskId].tBallNum - 1);
break;
}
}
else
{
- sub_8141F7C(taskId, sub_814189C, 30, 0);
+ StartTaskAfterDelayOrInput(taskId, Task_PrintSpinResult, 30, 0);
}
}
-static void sub_8141800(u8 taskId)
+static void Task_TryIncrementWins(u8 taskId)
{
- switch (gTasks[taskId].data[0x5])
+ switch (gTasks[taskId].tWonBet)
{
- case 1:
- case 2:
+ case TRUE:
+ case 2: // never happens
if (IsFanfareTaskInactive())
{
u32 wins = GetGameStat(GAME_STAT_CONSECUTIVE_ROULETTE_WINS);
- if (wins < ++gTasks[taskId].data[11])
- SetGameStat(GAME_STAT_CONSECUTIVE_ROULETTE_WINS, gTasks[taskId].data[11]);
- sub_8141F7C(taskId, sub_8141A18, 0xFFFF, 3);
+ if (wins < ++gTasks[taskId].tConsecutiveWins)
+ SetGameStat(GAME_STAT_CONSECUTIVE_ROULETTE_WINS, gTasks[taskId].tConsecutiveWins);
+ StartTaskAfterDelayOrInput(taskId, Task_PrintPayout, NO_DELAY, A_BUTTON | B_BUTTON);
}
break;
- case 0:
+ case FALSE:
default:
if (!IsSEPlaying())
{
- gTasks[taskId].data[11] = FALSE;
- sub_8141F7C(taskId, sub_8141AC0, 0xFFFF, 3);
+ gTasks[taskId].tConsecutiveWins = 0;
+ StartTaskAfterDelayOrInput(taskId, Task_EndTurn, NO_DELAY, A_BUTTON | B_BUTTON);
}
break;
}
}
-static void sub_814189C(u8 taskId)
+static void Task_PrintSpinResult(u8 taskId)
{
- switch (gTasks[taskId].data[5])
+ switch (gTasks[taskId].tWonBet)
{
- case 1:
- case 2:
- if (gTasks[taskId].data[2] == 12)
+ case TRUE:
+ case 2: // never happens
+ if (gTasks[taskId].tMultiplier == MAX_MULTIPLIER)
{
- PlayFanfare(MUS_ME_B_BIG);
- DrawStdWindowFrame(gUnknown_0203AB8C, FALSE);
- AddTextPrinterParameterized(gUnknown_0203AB8C, 1, Roulette_Text_Jackpot, 0, 1, TEXT_SPEED_FF, NULL);
- CopyWindowToVram(gUnknown_0203AB8C, 3);
+ PlayFanfare(MUS_SLOTS_JACKPOT);
+ DrawStdWindowFrame(sTextWindowId, FALSE);
+ AddTextPrinterParameterized(sTextWindowId, 1, Roulette_Text_Jackpot, 0, 1, TEXT_SPEED_FF, NULL);
+ CopyWindowToVram(sTextWindowId, 3);
}
else
{
- PlayFanfare(MUS_ME_B_SMALL);
- DrawStdWindowFrame(gUnknown_0203AB8C, FALSE);
- AddTextPrinterParameterized(gUnknown_0203AB8C, 1, Roulette_Text_ItsAHit, 0, 1, TEXT_SPEED_FF, NULL);
- CopyWindowToVram(gUnknown_0203AB8C, 3);
+ PlayFanfare(MUS_SLOTS_WIN);
+ DrawStdWindowFrame(sTextWindowId, FALSE);
+ AddTextPrinterParameterized(sTextWindowId, 1, Roulette_Text_ItsAHit, 0, 1, TEXT_SPEED_FF, NULL);
+ CopyWindowToVram(sTextWindowId, 3);
}
break;
- case 0:
+ case FALSE:
default:
- m4aSongNumStart(SE_HAZURE);
- DrawStdWindowFrame(gUnknown_0203AB8C, FALSE);
- AddTextPrinterParameterized(gUnknown_0203AB8C, 1, Roulette_Text_NothingDoing, 0, 1, TEXT_SPEED_FF, NULL);
- CopyWindowToVram(gUnknown_0203AB8C, 3);
+ m4aSongNumStart(SE_FAILURE);
+ DrawStdWindowFrame(sTextWindowId, FALSE);
+ AddTextPrinterParameterized(sTextWindowId, 1, Roulette_Text_NothingDoing, 0, 1, TEXT_SPEED_FF, NULL);
+ CopyWindowToVram(sTextWindowId, 3);
break;
}
gTasks[taskId].data[1] = 0;
- gTasks[taskId].func = sub_8141800;
+ gTasks[taskId].func = Task_TryIncrementWins;
}
-static void sub_8141984(u8 taskId)
+#define tPayout data[1]
+
+static void Task_GivePayout(u8 taskId)
{
- s32 r0 = gTasks[taskId].data[7];
- switch (r0)
+ switch (gTasks[taskId].data[7])
{
case 0:
- gTasks[taskId].data[13]++;
+ gTasks[taskId].tCoins++;
m4aSongNumStart(SE_PIN);
- sub_8143514(gTasks[taskId].data[13]);
- if (gTasks[taskId].data[13] >= 9999)
+ SetCreditDigits(gTasks[taskId].tCoins);
+ if (gTasks[taskId].tCoins >= MAX_COINS)
{
- gTasks[taskId].data[1] = r0;
+ gTasks[taskId].tPayout = 0;
}
else
{
- gTasks[taskId].data[1]--;
+ gTasks[taskId].tPayout--;
gTasks[taskId].data[7]++;
}
break;
@@ -1602,117 +1857,123 @@ static void sub_8141984(u8 taskId)
gTasks[taskId].data[7]++;
break;
}
- if (gTasks[taskId].data[1] == 0)
- sub_8141F7C(taskId, sub_8141AC0, 0xFFFF, 3);
+ if (gTasks[taskId].tPayout == 0)
+ StartTaskAfterDelayOrInput(taskId, Task_EndTurn, NO_DELAY, A_BUTTON | B_BUTTON);
}
-static void sub_8141A18(u8 taskId)
+static void Task_PrintPayout(u8 taskId)
{
- ConvertIntToDecimalStringN(gStringVar1, (gUnknown_0203AB88->var19 * gTasks[taskId].data[2]), STR_CONV_MODE_LEFT_ALIGN, 2);
+ ConvertIntToDecimalStringN(gStringVar1, (sRoulette->minBet * gTasks[taskId].tMultiplier), STR_CONV_MODE_LEFT_ALIGN, 2);
StringExpandPlaceholders(gStringVar4, Roulette_Text_YouveWonXCoins);
- DrawStdWindowFrame(gUnknown_0203AB8C, FALSE);
- AddTextPrinterParameterized(gUnknown_0203AB8C, 1, gStringVar4, 0, 1, TEXT_SPEED_FF, NULL);
- CopyWindowToVram(gUnknown_0203AB8C, 3);
- gTasks[taskId].data[1] = (gUnknown_0203AB88->var19 * gTasks[taskId].data[2]);
+ DrawStdWindowFrame(sTextWindowId, FALSE);
+ AddTextPrinterParameterized(sTextWindowId, 1, gStringVar4, 0, 1, TEXT_SPEED_FF, NULL);
+ CopyWindowToVram(sTextWindowId, 3);
+ gTasks[taskId].tPayout = (sRoulette->minBet * gTasks[taskId].tMultiplier);
gTasks[taskId].data[7] = 0;
- gTasks[taskId].func = sub_8141984;
+ gTasks[taskId].func = Task_GivePayout;
}
-static void sub_8141AC0(u8 taskId)
+#undef tPayout
+
+static void Task_EndTurn(u8 taskId)
{
- sub_8151A9C(&gUnknown_0203AB88->varB8, 0xFFFF);
- gUnknown_0203AB88->varB8.var04[13].var00_7 = gUnknown_0203AB88->varB8.var04[14].var00_7 = gUnknown_0203AB88->varB8.var04[15].var00_7 = 0;
- gSprites[gUnknown_0203AB88->var3C[7 + gUnknown_085B6154[gTasks[taskId].data[12]].var00]].invisible = TRUE;
- gTasks[taskId].func = sub_8141B58;
+ RouletteFlash_Stop(&sRoulette->flashUtil, 0xFFFF);
+ sRoulette->flashUtil.palettes[FLASH_ICON].available = sRoulette->flashUtil.palettes[FLASH_ICON_2].available = sRoulette->flashUtil.palettes[FLASH_ICON_3].available = FALSE;
+ gSprites[sRoulette->spriteIds[SPR_WHEEL_ICONS + sGridSelections[gTasks[taskId].tWinningSquare].spriteIdOffset]].invisible = TRUE;
+ gTasks[taskId].func = Task_TryPrintEndTurnMsg;
}
-static void sub_8141B58(u8 taskId)
+static void Task_TryPrintEndTurnMsg(u8 taskId)
{
u8 i = 0;
- gTasks[taskId].data[4] = i;
- gUnknown_0203AB88->var1B[gUnknown_0203AB88->var1A_0] = 0;
- sub_81424FC(0);
- gSprites[gUnknown_0203AB88->var3C[48]].invisible = TRUE;
- for (i = 0; i < 4; i++)
- {
- gSprites[gUnknown_0203AB88->var3C[i + 41]].oam.tileNum =
- gSprites[gUnknown_0203AB88->var3C[i + 41]].sheetTileStart
- + (*gSprites[gUnknown_0203AB88->var3C[i + 41]].anims)->type;
+ gTasks[taskId].tSelectionId = i;
+ sRoulette->betSelection[sRoulette->curBallNum] = SELECTION_NONE;
+ DrawGridBackground(SELECTION_NONE);
+ gSprites[sRoulette->spriteIds[SPR_WIN_SLOT_CURSOR]].invisible = TRUE;
+ for (i = 0; i < NUM_BOARD_POKES; i++)
+ {
+ gSprites[sRoulette->spriteIds[i + SPR_POKE_HEADERS]].oam.tileNum =
+ gSprites[sRoulette->spriteIds[i + SPR_POKE_HEADERS]].sheetTileStart
+ + (*gSprites[sRoulette->spriteIds[i + SPR_POKE_HEADERS]].anims)->type;
}
- if (gTasks[taskId].data[13] >= gUnknown_0203AB88->var19)
+ if (gTasks[taskId].tCoins >= sRoulette->minBet)
{
- if (gTasks[taskId].data[6] == 6)
+ if (gTasks[taskId].tBallNum == BALLS_PER_ROUND)
{
- DrawStdWindowFrame(gUnknown_0203AB8C, FALSE);
- AddTextPrinterParameterized(gUnknown_0203AB8C, 1, Roulette_Text_BoardWillBeCleared, 0, 1, TEXT_SPEED_FF, NULL);
- CopyWindowToVram(gUnknown_0203AB8C, 3);
- sub_8141F7C(taskId, dp01t_12_3_battle_menu, 0xFFFF, 3);
+ // Reached Ball 6, clear board
+ DrawStdWindowFrame(sTextWindowId, FALSE);
+ AddTextPrinterParameterized(sTextWindowId, 1, Roulette_Text_BoardWillBeCleared, 0, 1, TEXT_SPEED_FF, NULL);
+ CopyWindowToVram(sTextWindowId, 3);
+ StartTaskAfterDelayOrInput(taskId, Task_ClearBoard, NO_DELAY, A_BUTTON | B_BUTTON);
}
- else if (gTasks[taskId].data[13] == 9999)
+ else if (gTasks[taskId].tCoins == MAX_COINS)
{
- DrawStdWindowFrame(gUnknown_0203AB8C, FALSE);
- AddTextPrinterParameterized(gUnknown_0203AB8C, 1, Roulette_Text_CoinCaseIsFull, 0, 1, TEXT_SPEED_FF, NULL);
- CopyWindowToVram(gUnknown_0203AB8C, 3);
- sub_8141F7C(taskId, sub_8140914, 0xFFFF, 0x3);
+ // Player maxed out coins
+ DrawStdWindowFrame(sTextWindowId, FALSE);
+ AddTextPrinterParameterized(sTextWindowId, 1, Roulette_Text_CoinCaseIsFull, 0, 1, TEXT_SPEED_FF, NULL);
+ CopyWindowToVram(sTextWindowId, 3);
+ StartTaskAfterDelayOrInput(taskId, Task_AskKeepPlaying, NO_DELAY, A_BUTTON | B_BUTTON);
}
else
{
- gTasks[taskId].func = sub_8140914;
+ // No special msg, ask to continue
+ gTasks[taskId].func = Task_AskKeepPlaying;
}
}
else
{
- DrawStdWindowFrame(gUnknown_0203AB8C, FALSE);
- AddTextPrinterParameterized(gUnknown_0203AB8C, 1, Roulette_Text_NoCoinsLeft, 0, 1, TEXT_SPEED_FF, NULL);
- CopyWindowToVram(gUnknown_0203AB8C, 3);
- sub_8141F7C(taskId, sub_8140994, 0x3C, 0x3);
+ // Player out of coins
+ DrawStdWindowFrame(sTextWindowId, FALSE);
+ AddTextPrinterParameterized(sTextWindowId, 1, Roulette_Text_NoCoinsLeft, 0, 1, TEXT_SPEED_FF, NULL);
+ CopyWindowToVram(sTextWindowId, 3);
+ StartTaskAfterDelayOrInput(taskId, Task_StopPlaying, 60, A_BUTTON | B_BUTTON);
}
}
-static void dp01t_12_3_battle_menu(u8 taskId)
+static void Task_ClearBoard(u8 taskId)
{
u8 i = 0;
- gTasks[taskId].data[6] = 0;
- sub_8141FF4(taskId);
- sub_8142070();
- sub_8143A40();
- sub_81424FC(0);
- sub_814372C(6);
+ gTasks[taskId].tBallNum = 0;
+ ResetBallDataForNewSpin(taskId);
+ ResetHits();
+ HideWheelBalls();
+ DrawGridBackground(SELECTION_NONE);
+ SetBallCounterNumLeft(BALLS_PER_ROUND);
- for (i = 0; i < 12; i++)
+ for (i = 0; i < NUM_ROULETTE_SLOTS; i++)
{
- gSprites[gUnknown_0203AB88->var3C[i + 7]].invisible = FALSE;
+ gSprites[sRoulette->spriteIds[i + SPR_WHEEL_ICONS]].invisible = FALSE;
}
- if (gTasks[taskId].data[13] == 9999)
+ if (gTasks[taskId].tCoins == MAX_COINS)
{
- DrawStdWindowFrame(gUnknown_0203AB8C, FALSE);
- AddTextPrinterParameterized(gUnknown_0203AB8C, 1, Roulette_Text_CoinCaseIsFull, 0, 1, TEXT_SPEED_FF, NULL);
- CopyWindowToVram(gUnknown_0203AB8C, 3);
- sub_8141F7C(taskId, sub_8140914, 0xFFFF, 3);
+ DrawStdWindowFrame(sTextWindowId, FALSE);
+ AddTextPrinterParameterized(sTextWindowId, 1, Roulette_Text_CoinCaseIsFull, 0, 1, TEXT_SPEED_FF, NULL);
+ CopyWindowToVram(sTextWindowId, 3);
+ StartTaskAfterDelayOrInput(taskId, Task_AskKeepPlaying, NO_DELAY, A_BUTTON | B_BUTTON);
}
else
{
- gTasks[taskId].func = sub_8140914;
+ gTasks[taskId].func = Task_AskKeepPlaying;
}
}
-static void sub_8141DE4(u8 taskId)
+static void ExitRoulette(u8 taskId)
{
- sub_8151A9C(&gUnknown_0203AB88->varB8, 0xFFFF);
- sub_8151678(&gUnknown_0203AB88->varB8);
- SetCoins(gTasks[taskId].data[13]);
- if (GetCoins() < gUnknown_0203AB88->var19)
+ RouletteFlash_Stop(&sRoulette->flashUtil, 0xFFFF);
+ RouletteFlash_Reset(&sRoulette->flashUtil);
+ SetCoins(gTasks[taskId].tCoins);
+ if (GetCoins() < sRoulette->minBet)
gSpecialVar_0x8004 = TRUE;
else
gSpecialVar_0x8004 = FALSE;
AlertTVOfNewCoinTotal(GetCoins());
BeginHardwarePaletteFade(0xFF, 0, 0, 16, 0);
- gTasks[taskId].func = sub_8141E7C;
+ gTasks[taskId].func = Task_ExitRoulette;
}
-static void sub_8141E7C(u8 taskId) // end roulette ?
+static void Task_ExitRoulette(u8 taskId)
{
if (UpdatePaletteFade() == 0)
{
@@ -1726,350 +1987,384 @@ static void sub_8141E7C(u8 taskId) // end roulette ?
FreeAllSpritePalettes();
ResetPaletteFade();
ResetSpriteData();
- sub_8140418();
+ FreeRoulette();
gFieldCallback = FieldCB_ContinueScriptHandleMusic;
SetMainCallback2(CB2_ReturnToField);
DestroyTask(taskId);
}
}
-static void sub_8141EF8(u8 taskId)
+static void Task_WaitForNextTask(u8 taskId)
{
- if (gUnknown_0203AB88->varA8 == 0 || gMain.newKeys & gUnknown_0203AB88->varAA)
+ if (sRoulette->taskWaitDelay == 0 || JOY_NEW(sRoulette->taskWaitKey))
{
- gTasks[taskId].func = gUnknown_0203AB88->varAC;
- if (gUnknown_0203AB88->varAA > 0)
+ gTasks[taskId].func = sRoulette->nextTask;
+ if (sRoulette->taskWaitKey > 0)
PlaySE(SE_SELECT);
- gUnknown_0203AB88->varAC = NULL;
- gUnknown_0203AB88->varAA = 0;
- gUnknown_0203AB88->varA8 = 0;
+ sRoulette->nextTask = NULL;
+ sRoulette->taskWaitKey = 0;
+ sRoulette->taskWaitDelay = 0;
}
- if (gUnknown_0203AB88->varA8 != 0xFFFF)
- gUnknown_0203AB88->varA8--;
+ if (sRoulette->taskWaitDelay != NO_DELAY)
+ sRoulette->taskWaitDelay--;
}
-static void sub_8141F7C(u8 taskId, TaskFunc r1, u16 r2, u16 r3)
+static void StartTaskAfterDelayOrInput(u8 taskId, TaskFunc task, u16 delay, u16 key)
{
- gUnknown_0203AB88->varB4 = gTasks[taskId].func;
- if (r1 == NULL)
- r1 = gUnknown_0203AB88->varB4;
- gUnknown_0203AB88->varAC = r1;
- gUnknown_0203AB88->varA8 = r2;
- if (r2 == 0xFFFF && r3 == 0)
- gUnknown_0203AB88->varAA = 0xFFFF;
+ sRoulette->prevTask = gTasks[taskId].func;
+ if (task == NULL)
+ task = sRoulette->prevTask;
+ sRoulette->nextTask = task;
+ sRoulette->taskWaitDelay = delay;
+ if (delay == NO_DELAY && key == 0)
+ sRoulette->taskWaitKey = 0xFFFF;
else
- gUnknown_0203AB88->varAA = r3;
- gTasks[taskId].func = sub_8141EF8;
+ sRoulette->taskWaitKey = key;
+ gTasks[taskId].func = Task_WaitForNextTask;
}
-static void sub_8141FF4(u8 taskId)
+static void ResetBallDataForNewSpin(u8 taskId)
{
u8 i = 0;
- gUnknown_0203AB88->var00 = i;
- gUnknown_0203AB88->var03_7 = 0;
- gUnknown_0203AB88->var03_5 = 0;
- gUnknown_0203AB88->var03_6 = 0;
- gUnknown_0203AB88->var03_0 = 0;
- for (i = 0; i < 6; i++)
- {
- gUnknown_0203AB88->var1B[i] = 0;
- }
- gUnknown_0203AB88->var1A_0 = 0;
+ sRoulette->unk0 = FALSE;
+ sRoulette->ballRolling = FALSE;
+ sRoulette->ballStuck = FALSE;
+ sRoulette->ballUnstuck = FALSE;
+ sRoulette->useTaillow = FALSE;
+
+ for (i = 0; i < BALLS_PER_ROUND; i++)
+ sRoulette->betSelection[i] = SELECTION_NONE;
+
+ sRoulette->curBallNum = 0;
gTasks[taskId].data[1] = 0;
}
-static void sub_8142070(void)
+static void ResetHits(void)
{
u8 i;
- gUnknown_0203AB88->var08 = 0;
- for (i = 0; i < 6; i++)
- {
- gUnknown_0203AB88->var0C[i] = 0;
- }
- for (i = 0; i < 4; i++)
- {
- gUnknown_0203AB88->var12[i] = 0;
- }
- for (i = 0; i < 3; i++)
- {
- gUnknown_0203AB88->var16[i] = 0;
- }
- sub_8143038(1, -1);
+ sRoulette->hitFlags = 0;
+
+ for (i = 0; i < BALLS_PER_ROUND; i++)
+ sRoulette->hitSquares[i] = 0;
+
+ for (i = 0; i < NUM_BOARD_POKES; i++)
+ sRoulette->pokeHits[i] = 0;
+
+ for (i = 0; i < NUM_BOARD_COLORS; i++)
+ sRoulette->colorHits[i] = 0;
+
+ ShowHideGridBalls(TRUE, -1);
}
-static u8 sub_81420D0(u8 taskId, u8 r1)
+static u8 RecordHit(u8 taskId, u8 slotId)
{
- u8 i;
- u8 z;
- u32 t0[4] = {0x10842, 0x21084, 0x42108, 0x84210};
- u32 t1[3] = {0x3E0, 0x7C00, 0xF8000};
+ u8 i, j;
+ u32 columnFlags[NUM_BOARD_POKES] = {
+ F_WYNAUT_COL | F_ORANGE_WYNAUT | F_GREEN_WYNAUT | F_PURPLE_WYNAUT,
+ F_AZURILL_COL | F_ORANGE_AZURILL | F_GREEN_AZURILL | F_PURPLE_AZURILL,
+ F_SKITTY_COL | F_ORANGE_SKITTY | F_GREEN_SKITTY | F_PURPLE_SKITTY,
+ F_MAKUHITA_COL | F_ORANGE_MAKUHITA | F_GREEN_MAKUHITA | F_PURPLE_MAKUHITA
+ };
+ u32 rowFlags[NUM_BOARD_COLORS] = {
+ F_ORANGE_ROW | F_ORANGE_WYNAUT | F_ORANGE_AZURILL | F_ORANGE_SKITTY | F_ORANGE_MAKUHITA,
+ F_GREEN_ROW | F_GREEN_WYNAUT | F_GREEN_AZURILL | F_GREEN_SKITTY | F_GREEN_MAKUHITA,
+ F_PURPLE_ROW | F_PURPLE_WYNAUT | F_PURPLE_AZURILL | F_PURPLE_SKITTY | F_PURPLE_MAKUHITA
+ };
- if (r1 > 11)
+ if (slotId >= NUM_ROULETTE_SLOTS)
return 0;
- gUnknown_0203AB88->var0C[gTasks[taskId].data[6] - 1] = gUnknown_085B62E4[r1].var02;
- gTasks[taskId].data[12] = gUnknown_085B62E4[r1].var02;
- gUnknown_0203AB88->var08 |= gUnknown_085B62E4[r1].var04;
- for (i = 0; i < 4; i++)
+ sRoulette->hitSquares[gTasks[taskId].tBallNum - 1] = sRouletteSlots[slotId].gridSquare;
+ gTasks[taskId].tWinningSquare = sRouletteSlots[slotId].gridSquare;
+ sRoulette->hitFlags |= sRouletteSlots[slotId].flag;
+ for (i = 0; i < NUM_BOARD_POKES; i++)
{
- if (gUnknown_085B62E4[r1].var04 & t0[i])
- gUnknown_0203AB88->var12[i]++;
- if (gUnknown_0203AB88->var12[i] > 2)
- gUnknown_0203AB88->var08 |= t0[i];
+ if (sRouletteSlots[slotId].flag & columnFlags[i])
+ sRoulette->pokeHits[i]++;
+ // If hit every color of a poke, set column completed
+ if (sRoulette->pokeHits[i] >= NUM_BOARD_COLORS)
+ sRoulette->hitFlags |= columnFlags[i];
}
- for (z = 0; z < 3; z++)
+ for (j = 0; j < NUM_BOARD_COLORS; j++)
{
- if (gUnknown_085B62E4[r1].var04 & t1[z])
- gUnknown_0203AB88->var16[z]++;
- if (gUnknown_0203AB88->var16[z] > 3)
- gUnknown_0203AB88->var08 |= t1[z];
+ if (sRouletteSlots[slotId].flag & rowFlags[j])
+ sRoulette->colorHits[j]++;
+ // If hit every poke of a color, set row completed
+ if (sRoulette->colorHits[j] >= NUM_BOARD_POKES)
+ sRoulette->hitFlags |= rowFlags[j];
}
- return gUnknown_085B62E4[r1].var02;
+ return sRouletteSlots[slotId].gridSquare;
}
-static bool8 sub_81421E8(u8 r0, u8 r1)
+static bool8 IsHitInBetSelection(u8 gridSquare, u8 betSelection)
{
- u8 t = r0;
- if (--r0 < 19)
+ u8 hit = gridSquare;
+ if (--gridSquare < NUM_GRID_SELECTIONS)
{
- switch (r1)
+ switch (betSelection)
{
- case 0:
- return 3;
- case 1 ... 4:
- if (t == r1 + 5 || t == r1 + 10 || t == r1 + 15)
+ case SELECTION_NONE:
+ return 3; // should never happen, player must place bet
+ case COL_WYNAUT:
+ case COL_AZURILL:
+ case COL_SKITTY:
+ case COL_MAKUHITA:
+ if (hit == betSelection + ROW_ORANGE
+ || hit == betSelection + ROW_GREEN
+ || hit == betSelection + ROW_PURPLE)
return TRUE;
break;
- case 5:
- case 10:
- case 15:
- if (t >= (r1 + 1) && t <= (r1 + 4))
+ case ROW_ORANGE:
+ case ROW_GREEN:
+ case ROW_PURPLE:
+ if (hit >= (betSelection + COL_WYNAUT)
+ && hit <= (betSelection + COL_MAKUHITA))
return TRUE;
break;
+ // Individual square
default:
- if (t == r1)
+ if (hit == betSelection)
return TRUE;
}
}
return FALSE;
}
-static void sub_8142284(u8 r0)
+static void FlashSelectionOnWheel(u8 selectionId)
{
-
- u16 var0 = 0;
- u8 var2;
- u16 var3;
+ u16 flashFlags = 0;
+ u8 numSelected;
+ u16 palOffset;
u8 i;
- switch (r0)
+ switch (selectionId)
{
- case 5:
- case 10:
- case 15:
- for (i = (r0 + 1); i < (r0 + 5); i++)
+ case ROW_ORANGE:
+ case ROW_GREEN:
+ case ROW_PURPLE:
+ // Flash colors of row selection
+ for (i = (selectionId + 1); i < (selectionId + 5); i++)
{
- if (!(gUnknown_0203AB88->var08 & gUnknown_085B6154[i].var08))
- var0 |= gUnknown_085B6154[i].var10;
+ if (!(sRoulette->hitFlags & sGridSelections[i].flag))
+ flashFlags |= sGridSelections[i].flashFlags;
}
- sub_8151A48(&gUnknown_0203AB88->varB8, var0 &= 0xDFFF);
+ RouletteFlash_Enable(&sRoulette->flashUtil, flashFlags &= ~(F_FLASH_ICON));
break;
default:
{
- struct UnkStruct1 var1[3];
- memcpy(var1, gUnknown_085B63F0, sizeof(var1));
- if (r0 > 0 && r0 < 5)
- var2 = 3;
+ // Selection is either a column or individual square
+ struct RouletteFlashSettings iconFlash[NUM_BOARD_COLORS];
+ memcpy(iconFlash, sFlashData_PokeIcons, sizeof(iconFlash));
+
+ if (selectionId >= COL_WYNAUT && selectionId <= COL_MAKUHITA)
+ numSelected = NUM_BOARD_COLORS; // Selection is full column
else
- var2 = 1;
- var3 = r0 / 5 - 1;
- switch (r0 % 5)
+ numSelected = 1;
+
+ palOffset = GET_ROW_IDX(selectionId);
+ switch (GET_COL(selectionId))
{
- case 1:
- var3 = gSprites[gUnknown_0203AB88->var3C[7]].oam.paletteNum * 16;
- break;
- case 2:
- var3 = gSprites[gUnknown_0203AB88->var3C[8]].oam.paletteNum * 16;
- break;
- case 3:
- var3 = gSprites[gUnknown_0203AB88->var3C[9]].oam.paletteNum * 16;
- break;
- case 4:
- var3 = gSprites[gUnknown_0203AB88->var3C[10]].oam.paletteNum * 16;
- break;
+ // The specific color of the poke it references doesn't matter, because the icons of a poke share a palette
+ // So it just uses the first sprite ID of each
+ case COL_WYNAUT:
+ palOffset = gSprites[sRoulette->spriteIds[SPR_WHEEL_ICON_ORANGE_WYNAUT]].oam.paletteNum * 16;
+ break;
+ case COL_AZURILL:
+ palOffset = gSprites[sRoulette->spriteIds[SPR_WHEEL_ICON_GREEN_AZURILL]].oam.paletteNum * 16;
+ break;
+ case COL_SKITTY:
+ palOffset = gSprites[sRoulette->spriteIds[SPR_WHEEL_ICON_PURPLE_SKITTY]].oam.paletteNum * 16;
+ break;
+ case COL_MAKUHITA:
+ palOffset = gSprites[sRoulette->spriteIds[SPR_WHEEL_ICON_ORANGE_MAKUHITA]].oam.paletteNum * 16;
+ break;
}
- if (var2 == 1)
+ if (numSelected == 1)
{
- if (!(gUnknown_0203AB88->var08 & gUnknown_085B6154[r0].var08))
+ // Selection is individual square, add entry in flash util for its icon
+ if (!(sRoulette->hitFlags & sGridSelections[selectionId].flag))
{
- var1[r0 / 5 - 1].var02 += var3;
- sub_815168C(&gUnknown_0203AB88->varB8, 13, &var1[r0 / 5 - 1]);
+ iconFlash[GET_ROW_IDX(selectionId)].paletteOffset += palOffset;
+ RouletteFlash_Add(&sRoulette->flashUtil, NUM_ROULETTE_SLOTS + 1, &iconFlash[GET_ROW_IDX(selectionId)]);
}
else
{
+ // Square was already hit, don't flash it
break;
}
}
else
{
- for (i = 0; i < 3; i++)
+ // Selection is full column, add entry in flash util for each unhit space's icon
+ // If there is only 1 unhit space, also add its flags so its color will flash as well
+ for (i = 0; i < NUM_BOARD_COLORS; i++)
{
- u8 var4 = i * 5 + r0 + 5;
- if (!(gUnknown_0203AB88->var08 & gUnknown_085B6154[var4].var08))
+ u8 columnSlotId = i * 5 + selectionId + 5;
+ if (!(sRoulette->hitFlags & sGridSelections[columnSlotId].flag))
{
- var1[var4 / 5 - 1].var02 += var3;
- sub_815168C(&gUnknown_0203AB88->varB8, i + 13, &var1[var4 / 5 - 1]);
- if (var2 == 3)
- var0 = gUnknown_085B6154[var4].var10;
- var2--;
+ iconFlash[GET_ROW_IDX(columnSlotId)].paletteOffset += palOffset;
+ RouletteFlash_Add(&sRoulette->flashUtil, i + NUM_ROULETTE_SLOTS + 1, &iconFlash[GET_ROW_IDX(columnSlotId)]);
+ if (numSelected == 3)
+ flashFlags = sGridSelections[columnSlotId].flashFlags;
+ numSelected--;
}
}
- if (var2 != 2)
- var0 = 0;
+ // If there was more than 1 space in the column, reset flags; only icons will flash
+ if (numSelected != 2)
+ flashFlags = 0;
}
- sub_8151A48(&gUnknown_0203AB88->varB8, var0 |= gUnknown_085B6154[r0].var10);
+ // Do flash
+ RouletteFlash_Enable(&sRoulette->flashUtil, flashFlags |= sGridSelections[selectionId].flashFlags);
break;
}
}
}
-static void sub_81424FC(u8 r0)
+static void DrawGridBackground(u8 selectionId)
{
- vu8 i;
- vu8 z;
- vu16 var1;
- vu16 var2;
- vu8 var0;
- u8 v[5];
- u8 l;
- gUnknown_0203AB88->var2A = 1;
- sub_8142E70(0, 0);
- sub_8152058(gUnknown_0203AB88->tilemapBuffers[2], gUnknown_0203AB88->unk_397C, 14, 7, 16, 13);
- switch (r0)
+ vu8 i, j;
+ vu16 x, y;
+ vu8 tilemapOffset;
+ u8 selectionIds[NUM_BOARD_POKES >= NUM_BOARD_COLORS ? NUM_BOARD_POKES + 1 : NUM_BOARD_COLORS + 1];
+ u8 numSquares;
+ sRoulette->updateGridHighlight = TRUE;
+ ShowHideGridIcons(FALSE, 0);
+ SetTilemapRect(sRoulette->tilemapBuffers[2], sRoulette->gridTilemap, 14, 7, 16, 13);
+
+ // Highlight selected square
+ // (just buffers the highlight, it's actually drawn in VBlankCB_Roulette)
+ switch (selectionId)
{
- case 0:
+ case SELECTION_NONE:
return;
- case 1 ... 4:
- l = 4;
- for (i = 0; i < l; i++)
- {
- v[i] = i * 5 + r0;
- }
+ case COL_WYNAUT:
+ case COL_AZURILL:
+ case COL_SKITTY:
+ case COL_MAKUHITA:
+ numSquares = NUM_BOARD_COLORS + 1; // For each poke column, 3 colors and a header
+ for (i = 0; i < numSquares; i++)
+ selectionIds[i] = i * ROW_ORANGE + selectionId;
break;
- case 5:
- case 10:
- case 15:
- l = 5;
- for (i = 0; i < l; i++)
- {
- v[i] = i + r0;
- }
+ case ROW_ORANGE:
+ case ROW_GREEN:
+ case ROW_PURPLE:
+ numSquares = NUM_BOARD_POKES + 1; // For each color row, 4 pokes and a header
+ for (i = 0; i < numSquares; i++)
+ selectionIds[i] = i + selectionId;
break;
+ // Individual square
default:
- l = 1;
- v[0] = r0;
+ numSquares = 1;
+ selectionIds[0] = selectionId;
}
- for (i = 0; i < l; i++)
+ for (i = 0; i < numSquares; i++)
{
- var0 = gUnknown_085B6154[v[i]].var06;
- var1 = gUnknown_085B6154[v[i]].var03;
- for (z = 0; z < 3; z++)
+ tilemapOffset = sGridSelections[selectionIds[i]].tilemapOffset;
+ x = sGridSelections[selectionIds[i]].x;
+
+ // Grid square highlight is drawn in 9 segments, starting from the top left of the square
+ // Each iteration of this loop draws 3 segments to form a single horizontal segment
+ for (j = 0; j < 3; j++)
{
- var2 = (gUnknown_085B6154[v[i]].var04 + z) * 32;
- gUnknown_0203AB88->tilemapBuffers[2][var1 + var2 + 0] = gUnknown_0203AB88->unk_397C[(var0 + z) * 3 + 208];
- gUnknown_0203AB88->tilemapBuffers[2][var1 + var2 + 1] = gUnknown_0203AB88->unk_397C[(var0 + z) * 3 + 209];
- gUnknown_0203AB88->tilemapBuffers[2][var1 + var2 + 2] = gUnknown_0203AB88->unk_397C[(var0 + z) * 3 + 210];
+ y = (sGridSelections[selectionIds[i]].y + j) * 32;
+ sRoulette->tilemapBuffers[2][x + y + 0] = sRoulette->gridTilemap[(tilemapOffset + j) * 3 + 208 + 0];
+ sRoulette->tilemapBuffers[2][x + y + 1] = sRoulette->gridTilemap[(tilemapOffset + j) * 3 + 208 + 1];
+ sRoulette->tilemapBuffers[2][x + y + 2] = sRoulette->gridTilemap[(tilemapOffset + j) * 3 + 208 + 2];
}
}
}
-static u8 sub_8142758(u8 r0)
+static u8 GetMultiplier(u8 selectionId)
{
- u8 var0[5] = {0, 3, 4, 6, 12};
+ u8 multipliers[5] = {0, 3, 4, 6, MAX_MULTIPLIER};
- if (r0 > 19)
- r0 = 0;
- switch (gUnknown_085B6154[r0].var01_0)
+ if (selectionId > NUM_GRID_SELECTIONS)
+ selectionId = 0;
+
+ switch (sGridSelections[selectionId].baseMultiplier)
{
- case 3:
- r0 = r0 / 5 - 1;
- if (gUnknown_0203AB88->var16[r0] > 3)
+ case NUM_BOARD_COLORS:
+ selectionId = GET_ROW_IDX(selectionId);
+ // If already hit all pokes of this color, multiplier is 0
+ if (sRoulette->colorHits[selectionId] >= NUM_BOARD_POKES)
return 0;
- return var0[gUnknown_0203AB88->var16[r0] + 1];
- case 4:
- r0--;
- if (gUnknown_0203AB88->var12[r0] > 2)
+ return multipliers[sRoulette->colorHits[selectionId] + 1];
+ case NUM_BOARD_POKES:
+ selectionId = GET_COL_IDX(selectionId);
+ // If already hit all colors of this poke, multiplier is 0
+ if (sRoulette->pokeHits[selectionId] >= NUM_BOARD_COLORS)
return 0;
- return var0[gUnknown_0203AB88->var12[r0] + 2];
- case 12:
- if (gUnknown_0203AB88->var08 & gUnknown_085B6154[r0].var08)
+ return multipliers[sRoulette->pokeHits[selectionId] + 2];
+ case NUM_ROULETTE_SLOTS:
+ // If square has been hit already, multiplier is 0
+ if (sRoulette->hitFlags & sGridSelections[selectionId].flag)
return 0;
- return var0[4];
+ return multipliers[ARRAY_COUNT(multipliers) - 1];
}
return 0;
}
-static void sub_8142814(void)
-{
- s32 x1;
- s32 x2;
- SetGpuReg(REG_OFFSET_BG2PA, gUnknown_0203AB88->var2C.a);
- SetGpuReg(REG_OFFSET_BG2PB, gUnknown_0203AB88->var2C.b);
- SetGpuReg(REG_OFFSET_BG2PC, gUnknown_0203AB88->var2C.c);
- SetGpuReg(REG_OFFSET_BG2PD, gUnknown_0203AB88->var2C.d);
- x1 = 0x7400 - gUnknown_0203AB88->var2C.a * (gSpriteCoordOffsetX + 116)
- - gUnknown_0203AB88->var2C.b * (gSpriteCoordOffsetY + 80);
- x2 = 0x5400 - gUnknown_0203AB88->var2C.c * (gSpriteCoordOffsetX + 116)
- - gUnknown_0203AB88->var2C.d * (gSpriteCoordOffsetY + 80);
- SetGpuReg(REG_OFFSET_BG2X_L, x1);
- SetGpuReg(REG_OFFSET_BG2X_H, (x1 & 0x0fff0000) >> 16);
- SetGpuReg(REG_OFFSET_BG2Y_L, x2);
- SetGpuReg(REG_OFFSET_BG2Y_H, (x2 & 0x0fff0000) >> 16);
+static void UpdateWheelPosition(void)
+{
+ s32 bg2x;
+ s32 bg2y;
+ SetGpuReg(REG_OFFSET_BG2PA, sRoulette->wheelRotation.a);
+ SetGpuReg(REG_OFFSET_BG2PB, sRoulette->wheelRotation.b);
+ SetGpuReg(REG_OFFSET_BG2PC, sRoulette->wheelRotation.c);
+ SetGpuReg(REG_OFFSET_BG2PD, sRoulette->wheelRotation.d);
+ bg2x = 0x7400 - sRoulette->wheelRotation.a * (gSpriteCoordOffsetX + 116)
+ - sRoulette->wheelRotation.b * (gSpriteCoordOffsetY + 80);
+ bg2y = 0x5400 - sRoulette->wheelRotation.c * (gSpriteCoordOffsetX + 116)
+ - sRoulette->wheelRotation.d * (gSpriteCoordOffsetY + 80);
+ SetGpuReg(REG_OFFSET_BG2X_L, bg2x);
+ SetGpuReg(REG_OFFSET_BG2X_H, (bg2x & 0x0fff0000) >> 16);
+ SetGpuReg(REG_OFFSET_BG2Y_L, bg2y);
+ SetGpuReg(REG_OFFSET_BG2Y_H, (bg2y & 0x0fff0000) >> 16);
}
-static const u8 sFiller_085B644D[3] = {};
-static const u16 RouletteSpritePalette_01[] = INCBIN_U16("graphics/roulette/shadow.gbapal");
-static const u16 RouletteSpritePalette_02[] = INCBIN_U16("graphics/roulette/ball.gbapal");
-static const u16 RouletteSpritePalette_03[] = INCBIN_U16("graphics/roulette/ball_counter.gbapal");
-static const u16 RouletteSpritePalette_04[] = INCBIN_U16("graphics/roulette/cursor.gbapal");
-static const u16 RouletteSpritePalette_05[] = INCBIN_U16("graphics/roulette/credit.gbapal");
-static const u16 RouletteSpritePalette_06[] = INCBIN_U16("graphics/roulette/shroomish.gbapal");
-static const u16 RouletteSpritePalette_07[] = INCBIN_U16("graphics/roulette/tailow.gbapal");
-static const u16 RouletteSpritePalette_08[] = INCBIN_U16("graphics/roulette/poke_icons.gbapal");
-static const u16 RouletteSpritePalette_09[] = INCBIN_U16("graphics/roulette/wynaut.gbapal");
-static const u16 RouletteSpritePalette_10[] = INCBIN_U16("graphics/roulette/azurill.gbapal");
-static const u16 RouletteSpritePalette_11[] = INCBIN_U16("graphics/roulette/skitty.gbapal");
-static const u16 RouletteSpritePalette_12[] = INCBIN_U16("graphics/roulette/makuhita.gbapal");
-static const u16 RouletteSpritePalette_13[] = INCBIN_U16("graphics/roulette/85B65D0.gbapal");
-static const u16 RouletteSpritePalette_14[] = INCBIN_U16("graphics/roulette/85B65F0.gbapal");
-static const u16 RouletteSpritePalette_15[] = INCBIN_U16("graphics/roulette/85B6610.gbapal");
-static const u16 RouletteSpritePalette_16[] = INCBIN_U16("graphics/roulette/85B6630.gbapal");
-static const u32 gUnknown_085B6650[] = INCBIN_U32("graphics/roulette/ball.4bpp.lz");
-static const u32 RouletteBallCounterTiles[] = INCBIN_U32("graphics/roulette/ball_counter.4bpp.lz");
-static const u32 gUnknown_085B67FC[] = INCBIN_U32("graphics/roulette/roulette_tilt.4bpp.lz");
-static const u32 RoulettePokeIconsTiles[] = INCBIN_U32("graphics/roulette/poke_icons.4bpp.lz");
-static const u32 RoulettePokeIcons2Tiles[] = INCBIN_U32("graphics/roulette/poke_icons2.4bpp.lz");
-static const u32 gUnknown_085B7290[] = INCBIN_U32("graphics/roulette/shadow.4bpp.lz");
-static const u32 RouletteCursorTiles[] = INCBIN_U32("graphics/roulette/cursor.4bpp.lz");
-
-static const struct SpritePalette gUnknown_085B7384[] =
-{
- { .data = RouletteSpritePalette_01, .tag = 1 },
- { .data = RouletteSpritePalette_02, .tag = 2 },
- { .data = RouletteSpritePalette_03, .tag = 3 },
- { .data = RouletteSpritePalette_04, .tag = 4 },
- { .data = RouletteSpritePalette_05, .tag = 5 },
- { .data = RouletteSpritePalette_06, .tag = 6 },
- { .data = RouletteSpritePalette_07, .tag = 7 },
- { .data = RouletteSpritePalette_08, .tag = 8 },
- { .data = RouletteSpritePalette_09, .tag = 9 },
- { .data = RouletteSpritePalette_10, .tag = 10 },
- { .data = RouletteSpritePalette_11, .tag = 11 },
- { .data = RouletteSpritePalette_12, .tag = 12 },
+static const u8 sFiller[3] = {};
+static const u16 sShadow_Pal[] = INCBIN_U16("graphics/roulette/shadow.gbapal");
+static const u16 sBall_Pal[] = INCBIN_U16("graphics/roulette/ball.gbapal");
+static const u16 sBallCounter_Pal[] = INCBIN_U16("graphics/roulette/ball_counter.gbapal");
+static const u16 sCursor_Pal[] = INCBIN_U16("graphics/roulette/cursor.gbapal");
+static const u16 sCredit_Pal[] = INCBIN_U16("graphics/roulette/credit.gbapal");
+static const u16 sShroomish_Pal[] = INCBIN_U16("graphics/roulette/shroomish.gbapal");
+static const u16 sTaillow_Pal[] = INCBIN_U16("graphics/roulette/tailow.gbapal");
+static const u16 sGridIcons_Pal[] = INCBIN_U16("graphics/roulette/grid_icons.gbapal");
+static const u16 sWynaut_Pal[] = INCBIN_U16("graphics/roulette/wynaut.gbapal");
+static const u16 sAzurill_Pal[] = INCBIN_U16("graphics/roulette/azurill.gbapal");
+static const u16 sSkitty_Pal[] = INCBIN_U16("graphics/roulette/skitty.gbapal");
+static const u16 sMakuhita_Pal[] = INCBIN_U16("graphics/roulette/makuhita.gbapal");
+static const u16 sUnused1_Pal[] = INCBIN_U16("graphics/roulette/unused_1.gbapal");
+static const u16 sUnused2_Pal[] = INCBIN_U16("graphics/roulette/unused_2.gbapal");
+static const u16 sUnused3_Pal[] = INCBIN_U16("graphics/roulette/unused_3.gbapal");
+static const u16 sUnused4_Pal[] = INCBIN_U16("graphics/roulette/unused_4.gbapal");
+static const u32 sBall_Gfx[] = INCBIN_U32("graphics/roulette/ball.4bpp.lz");
+static const u32 sBallCounter_Gfx[] = INCBIN_U32("graphics/roulette/ball_counter.4bpp.lz");
+static const u32 sShroomishTaillow_Gfx[] = INCBIN_U32("graphics/roulette/roulette_tilt.4bpp.lz");
+static const u32 sGridIcons_Gfx[] = INCBIN_U32("graphics/roulette/grid_icons.4bpp.lz");
+static const u32 sWheelIcons_Gfx[] = INCBIN_U32("graphics/roulette/wheel_icons.4bpp.lz");
+static const u32 sShadow_Gfx[] = INCBIN_U32("graphics/roulette/shadow.4bpp.lz");
+static const u32 sCursor_Gfx[] = INCBIN_U32("graphics/roulette/cursor.4bpp.lz");
+
+static const struct SpritePalette sSpritePalettes[] =
+{
+ { .data = sShadow_Pal, .tag = PALTAG_SHADOW },
+ { .data = sBall_Pal, .tag = PALTAG_BALL },
+ { .data = sBallCounter_Pal, .tag = PALTAG_BALL_COUNTER },
+ { .data = sCursor_Pal, .tag = PALTAG_CURSOR },
+ { .data = sCredit_Pal, .tag = PALTAG_INTERFACE },
+ { .data = sShroomish_Pal, .tag = PALTAG_SHROOMISH },
+ { .data = sTaillow_Pal, .tag = PALTAG_TAILLOW },
+ { .data = sGridIcons_Pal, .tag = PALTAG_GRID_ICONS },
+ { .data = sWynaut_Pal, .tag = PALTAG_WYNAUT },
+ { .data = sAzurill_Pal, .tag = PALTAG_AZURILL },
+ { .data = sSkitty_Pal, .tag = PALTAG_SKITTY },
+ { .data = sMakuhita_Pal, .tag = PALTAG_MAKUHITA },
{}
};
-static const struct OamData gOamData_85B73EC =
+static const struct OamData sOam_GridHeader =
{
.affineMode = ST_OAM_AFFINE_OFF,
.objMode = ST_OAM_OBJ_NORMAL,
@@ -2078,7 +2373,7 @@ static const struct OamData gOamData_85B73EC =
.priority = 1,
};
-static const struct OamData gOamData_85B73F4 =
+static const struct OamData sOam_GridIcon =
{
.affineMode = ST_OAM_AFFINE_OFF,
.objMode = ST_OAM_OBJ_NORMAL,
@@ -2087,7 +2382,7 @@ static const struct OamData gOamData_85B73F4 =
.priority = 1,
};
-static const struct OamData gOamData_85B73FC =
+static const struct OamData sOam_WheelIcon =
{
.y = 60,
.affineMode = ST_OAM_AFFINE_DOUBLE,
@@ -2097,35 +2392,35 @@ static const struct OamData gOamData_85B73FC =
.priority = 2,
};
-static const union AnimCmd gSpriteAnim_85B7404[] =
+static const union AnimCmd sAffineAnim_Unused1[] =
{
ANIMCMD_FRAME(0, 0),
ANIMCMD_END
};
-static const union AnimCmd *const gSpriteAnimTable_85B740C[] =
+static const union AnimCmd *const sAffineAnims_Unused1[] =
{
- gSpriteAnim_85B7404
+ sAffineAnim_Unused1
};
-static const union AffineAnimCmd gSpriteAffineAnim_85B7410[] =
+static const union AffineAnimCmd sAffineAnim_Unused2[] =
{
AFFINEANIMCMD_END
};
-static const union AffineAnimCmd *const gSpriteAffineAnimTable_85B7418[] =
+static const union AffineAnimCmd *const sAffineAnims_Unused2[] =
{
- gSpriteAffineAnim_85B7410
+ sAffineAnim_Unused2
};
-static const struct CompressedSpriteSheet gUnknown_085B741C =
+static const struct CompressedSpriteSheet sSpriteSheet_WheelIcons =
{
- .data = RoulettePokeIcons2Tiles,
+ .data = sWheelIcons_Gfx,
.size = 0xC00,
- .tag = 0
+ .tag = GFXTAG_WHEEL_ICONS
};
-static const union AnimCmd gSpriteAnim_85B7420[] =
+static const union AnimCmd sAnim_WheelIcons[] =
{
ANIMCMD_FRAME(0, 0),
ANIMCMD_FRAME(32, 0),
@@ -2142,81 +2437,81 @@ static const union AnimCmd gSpriteAnim_85B7420[] =
ANIMCMD_END
};
-static const union AnimCmd *const gSpriteAnimTable_85B7458[] =
+static const union AnimCmd *const sAnim_WheelIcon_OrangeWynaut[] =
{
- &gSpriteAnim_85B7420[0]
+ &sAnim_WheelIcons[0]
};
-static const union AnimCmd *const gSpriteAnimTable_85B745C[] =
+static const union AnimCmd *const sAnim_WheelIcon_GreenAzurill[] =
{
- &gSpriteAnim_85B7420[1]
+ &sAnim_WheelIcons[1]
};
-static const union AnimCmd *const gSpriteAnimTable_85B7460[] =
+static const union AnimCmd *const sAnim_WheelIcon_PurpleSkitty[] =
{
- &gSpriteAnim_85B7420[2]
+ &sAnim_WheelIcons[2]
};
-static const union AnimCmd *const gSpriteAnimTable_85B7464[] =
+static const union AnimCmd *const sAnim_WheelIcon_OrangeMakuhita[] =
{
- &gSpriteAnim_85B7420[3]
+ &sAnim_WheelIcons[3]
};
-static const union AnimCmd *const gSpriteAnimTable_85B7468[] =
+static const union AnimCmd *const sAnim_WheelIcon_GreenWynaut[] =
{
- &gSpriteAnim_85B7420[4]
+ &sAnim_WheelIcons[4]
};
-static const union AnimCmd *const gSpriteAnimTable_85B746C[] =
+static const union AnimCmd *const sAnim_WheelIcon_PurpleAzurill[] =
{
- &gSpriteAnim_85B7420[5]
+ &sAnim_WheelIcons[5]
};
-static const union AnimCmd *const gSpriteAnimTable_85B7470[] =
+static const union AnimCmd *const sAnim_WheelIcon_OrangeSkitty[] =
{
- &gSpriteAnim_85B7420[6]
+ &sAnim_WheelIcons[6]
};
-static const union AnimCmd *const gSpriteAnimTable_85B7474[] =
+static const union AnimCmd *const sAnim_WheelIcon_GreenMakuhita[] =
{
- &gSpriteAnim_85B7420[7]
+ &sAnim_WheelIcons[7]
};
-static const union AnimCmd *const gSpriteAnimTable_85B7478[] =
+static const union AnimCmd *const sAnim_WheelIcon_PurpleWynaut[] =
{
- &gSpriteAnim_85B7420[8]
+ &sAnim_WheelIcons[8]
};
-static const union AnimCmd *const gSpriteAnimTable_85B747C[] =
+static const union AnimCmd *const sAnim_WheelIcon_OrangeAzurill[] =
{
- &gSpriteAnim_85B7420[9]
+ &sAnim_WheelIcons[9]
};
-static const union AnimCmd *const gSpriteAnimTable_85B7480[] =
+static const union AnimCmd *const sAnim_WheelIcon_GreenSkitty[] =
{
- &gSpriteAnim_85B7420[10]
+ &sAnim_WheelIcons[10]
};
-static const union AnimCmd *const gSpriteAnimTable_85B7484[] =
+static const union AnimCmd *const sAnim_WheelIcon_PurpleMakuhita[] =
{
- &gSpriteAnim_85B7420[11]
+ &sAnim_WheelIcons[11]
};
-static const struct CompressedSpriteSheet gUnknown_085B7488 =
+static const struct CompressedSpriteSheet sSpriteSheet_Headers =
{
- .data = gRouletteHeadersTiles,
+ .data = gRouletteHeaders_Gfx,
.size = 0x1600,
- .tag = 4
+ .tag = GFXTAG_HEADERS
};
-static const struct CompressedSpriteSheet gUnknown_085B7490 =
+static const struct CompressedSpriteSheet sSpriteSheet_GridIcons =
{
- .data = RoulettePokeIconsTiles,
+ .data = sGridIcons_Gfx,
.size = 0x400,
- .tag = 5
+ .tag = GFXTAG_GRID_ICONS
};
-static const union AnimCmd gSpriteAnim_85B7498[] =
+static const union AnimCmd sAnim_Headers[] =
{
ANIMCMD_FRAME(0, 0),
ANIMCMD_FRAME(16, 0),
@@ -2232,7 +2527,7 @@ static const union AnimCmd gSpriteAnim_85B7498[] =
ANIMCMD_END
};
-static const union AnimCmd gSpriteAnim_85B74C8[] =
+static const union AnimCmd sAnim_GridIcons[] =
{
ANIMCMD_FRAME(0, 0),
ANIMCMD_FRAME(4, 0),
@@ -2241,285 +2536,287 @@ static const union AnimCmd gSpriteAnim_85B74C8[] =
ANIMCMD_END
};
-static const union AnimCmd *const gSpriteAnimTable_85B74DC[] =
+static const union AnimCmd *const sAnim_WynautHeader[] =
{
- &gSpriteAnim_85B7498[0]
+ &sAnim_Headers[0]
};
-static const union AnimCmd *const gSpriteAnimTable_85B74E0[] =
+static const union AnimCmd *const sAnim_AzurillHeader[] =
{
- &gSpriteAnim_85B7498[2]
+ &sAnim_Headers[2]
};
-static const union AnimCmd *const gSpriteAnimTable_85B74E4[] =
+static const union AnimCmd *const sAnim_SkittyHeader[] =
{
- &gSpriteAnim_85B7498[4]
+ &sAnim_Headers[4]
};
-static const union AnimCmd *const gSpriteAnimTable_85B74E8[] =
+static const union AnimCmd *const sAnim_MakuhitaHeader[] =
{
- &gSpriteAnim_85B7498[6]
+ &sAnim_Headers[6]
};
-static const union AnimCmd *const gSpriteAnimTable_85B74EC[] =
+static const union AnimCmd *const sAnim_OrangeHeader[] =
{
- &gSpriteAnim_85B7498[8]
+ &sAnim_Headers[8]
};
-static const union AnimCmd *const gSpriteAnimTable_85B74F0[] =
+static const union AnimCmd *const sAnim_GreenHeader[] =
{
- &gSpriteAnim_85B7498[9]
+ &sAnim_Headers[9]
};
-static const union AnimCmd *const gSpriteAnimTable_85B74F4[] =
+static const union AnimCmd *const sAnim_PurpleHeader[] =
{
- &gSpriteAnim_85B7498[10]
+ &sAnim_Headers[10]
};
-static const union AnimCmd *const gSpriteAnimTable_85B74F8[] =
+static const union AnimCmd *const sAnim_GridIcon_Wynaut[] =
{
- &gSpriteAnim_85B74C8[0]
+ &sAnim_GridIcons[0]
};
-static const union AnimCmd *const gSpriteAnimTable_85B74FC[] =
+static const union AnimCmd *const sAnim_GridIcon_Azurill[] =
{
- &gSpriteAnim_85B74C8[1]
+ &sAnim_GridIcons[1]
};
-static const union AnimCmd *const gSpriteAnimTable_85B7500[] =
+static const union AnimCmd *const sAnim_GridIcon_Skitty[] =
{
- &gSpriteAnim_85B74C8[2]
+ &sAnim_GridIcons[2]
};
-static const union AnimCmd *const gSpriteAnimTable_85B7504[] =
+static const union AnimCmd *const sAnim_GridIcon_Makuhita[] =
{
- &gSpriteAnim_85B74C8[3]
+ &sAnim_GridIcons[3]
};
-static const struct SpriteTemplate gSpriteTemplate_85B7508[] =
+static const struct SpriteTemplate sSpriteTemplates_PokeHeaders[NUM_BOARD_POKES] =
{
{
- .tileTag = 4,
- .paletteTag = 8,
- .oam = &gOamData_85B73EC,
- .anims = gSpriteAnimTable_85B74DC,
+ .tileTag = GFXTAG_HEADERS,
+ .paletteTag = PALTAG_GRID_ICONS,
+ .oam = &sOam_GridHeader,
+ .anims = sAnim_WynautHeader,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_814390C
+ .callback = SpriteCB_GridSquare
},
{
- .tileTag = 4,
- .paletteTag = 8,
- .oam = &gOamData_85B73EC,
- .anims = gSpriteAnimTable_85B74E0,
+ .tileTag = GFXTAG_HEADERS,
+ .paletteTag = PALTAG_GRID_ICONS,
+ .oam = &sOam_GridHeader,
+ .anims = sAnim_AzurillHeader,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_814390C
+ .callback = SpriteCB_GridSquare
},
{
- .tileTag = 4,
- .paletteTag = 8,
- .oam = &gOamData_85B73EC,
- .anims = gSpriteAnimTable_85B74E4,
+ .tileTag = GFXTAG_HEADERS,
+ .paletteTag = PALTAG_GRID_ICONS,
+ .oam = &sOam_GridHeader,
+ .anims = sAnim_SkittyHeader,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_814390C
+ .callback = SpriteCB_GridSquare
},
{
- .tileTag = 4,
- .paletteTag = 8,
- .oam = &gOamData_85B73EC,
- .anims = gSpriteAnimTable_85B74E8,
+ .tileTag = GFXTAG_HEADERS,
+ .paletteTag = PALTAG_GRID_ICONS,
+ .oam = &sOam_GridHeader,
+ .anims = sAnim_MakuhitaHeader,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_814390C
+ .callback = SpriteCB_GridSquare
}
};
-static const struct SpriteTemplate gSpriteTemplate_85B7568[] =
+static const struct SpriteTemplate sSpriteTemplates_ColorHeaders[NUM_BOARD_COLORS] =
{
{
- .tileTag = 4,
- .paletteTag = 8,
- .oam = &gOamData_85B73EC,
- .anims = gSpriteAnimTable_85B74EC,
+ .tileTag = GFXTAG_HEADERS,
+ .paletteTag = PALTAG_GRID_ICONS,
+ .oam = &sOam_GridHeader,
+ .anims = sAnim_OrangeHeader,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_814390C
+ .callback = SpriteCB_GridSquare
},
{
- .tileTag = 4,
- .paletteTag = 8,
- .oam = &gOamData_85B73EC,
- .anims = gSpriteAnimTable_85B74F0,
+ .tileTag = GFXTAG_HEADERS,
+ .paletteTag = PALTAG_GRID_ICONS,
+ .oam = &sOam_GridHeader,
+ .anims = sAnim_GreenHeader,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_814390C
+ .callback = SpriteCB_GridSquare
},
{
- .tileTag = 4,
- .paletteTag = 8,
- .oam = &gOamData_85B73EC,
- .anims = gSpriteAnimTable_85B74F4,
+ .tileTag = GFXTAG_HEADERS,
+ .paletteTag = PALTAG_GRID_ICONS,
+ .oam = &sOam_GridHeader,
+ .anims = sAnim_PurpleHeader,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_814390C
+ .callback = SpriteCB_GridSquare
}
};
-static const struct SpriteTemplate gSpriteTemplate_85B75B0[] =
+static const struct SpriteTemplate sSpriteTemplate_GridIcons[NUM_BOARD_POKES] =
{
{
- .tileTag = 5,
- .paletteTag = 8,
- .oam = &gOamData_85B73F4,
- .anims = gSpriteAnimTable_85B74F8,
+ .tileTag = GFXTAG_GRID_ICONS,
+ .paletteTag = PALTAG_GRID_ICONS,
+ .oam = &sOam_GridIcon,
+ .anims = sAnim_GridIcon_Wynaut,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_814390C
+ .callback = SpriteCB_GridSquare
},
{
- .tileTag = 5,
- .paletteTag = 8,
- .oam = &gOamData_85B73F4,
- .anims = gSpriteAnimTable_85B74FC,
+ .tileTag = GFXTAG_GRID_ICONS,
+ .paletteTag = PALTAG_GRID_ICONS,
+ .oam = &sOam_GridIcon,
+ .anims = sAnim_GridIcon_Azurill,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_814390C
+ .callback = SpriteCB_GridSquare
},
{
- .tileTag = 5,
- .paletteTag = 8,
- .oam = &gOamData_85B73F4,
- .anims = gSpriteAnimTable_85B7500,
+ .tileTag = GFXTAG_GRID_ICONS,
+ .paletteTag = PALTAG_GRID_ICONS,
+ .oam = &sOam_GridIcon,
+ .anims = sAnim_GridIcon_Skitty,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_814390C
+ .callback = SpriteCB_GridSquare
},
{
- .tileTag = 5,
- .paletteTag = 8,
- .oam = &gOamData_85B73F4,
- .anims = gSpriteAnimTable_85B7504,
+ .tileTag = GFXTAG_GRID_ICONS,
+ .paletteTag = PALTAG_GRID_ICONS,
+ .oam = &sOam_GridIcon,
+ .anims = sAnim_GridIcon_Makuhita,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_814390C
+ .callback = SpriteCB_GridSquare
}
};
-static const struct SpriteTemplate gSpriteTemplate_85B7610[] =
+// Wheel icons are listed clockwise starting from 1 oclock on the roulette wheel (with pokeball upside right)
+// They go Wynaut -> Azurill -> Skitty -> Makuhita, and Orange -> Green -> Purple
+static const struct SpriteTemplate sSpriteTemplates_WheelIcons[NUM_ROULETTE_SLOTS] =
{
{
- .tileTag = 0,
- .paletteTag = 9,
- .oam = &gOamData_85B73FC,
- .anims = gSpriteAnimTable_85B7458,
+ .tileTag = GFXTAG_WHEEL_ICONS,
+ .paletteTag = PALTAG_WYNAUT,
+ .oam = &sOam_WheelIcon,
+ .anims = sAnim_WheelIcon_OrangeWynaut,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_8143280
+ .callback = SpriteCB_WheelIcon
},
{
- .tileTag = 0,
- .paletteTag = 10,
- .oam = &gOamData_85B73FC,
- .anims = gSpriteAnimTable_85B745C,
+ .tileTag = GFXTAG_WHEEL_ICONS,
+ .paletteTag = PALTAG_AZURILL,
+ .oam = &sOam_WheelIcon,
+ .anims = sAnim_WheelIcon_GreenAzurill,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_8143280
+ .callback = SpriteCB_WheelIcon
},
{
- .tileTag = 0,
- .paletteTag = 11,
- .oam = &gOamData_85B73FC,
- .anims = gSpriteAnimTable_85B7460,
+ .tileTag = GFXTAG_WHEEL_ICONS,
+ .paletteTag = PALTAG_SKITTY,
+ .oam = &sOam_WheelIcon,
+ .anims = sAnim_WheelIcon_PurpleSkitty,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_8143280
+ .callback = SpriteCB_WheelIcon
},
{
- .tileTag = 0,
- .paletteTag = 12,
- .oam = &gOamData_85B73FC,
- .anims = gSpriteAnimTable_85B7464,
+ .tileTag = GFXTAG_WHEEL_ICONS,
+ .paletteTag = PALTAG_MAKUHITA,
+ .oam = &sOam_WheelIcon,
+ .anims = sAnim_WheelIcon_OrangeMakuhita,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_8143280
+ .callback = SpriteCB_WheelIcon
},
{
- .tileTag = 0,
- .paletteTag = 9,
- .oam = &gOamData_85B73FC,
- .anims = gSpriteAnimTable_85B7468,
+ .tileTag = GFXTAG_WHEEL_ICONS,
+ .paletteTag = PALTAG_WYNAUT,
+ .oam = &sOam_WheelIcon,
+ .anims = sAnim_WheelIcon_GreenWynaut,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_8143280
+ .callback = SpriteCB_WheelIcon
},
{
- .tileTag = 0,
- .paletteTag = 10,
- .oam = &gOamData_85B73FC,
- .anims = gSpriteAnimTable_85B746C,
+ .tileTag = GFXTAG_WHEEL_ICONS,
+ .paletteTag = PALTAG_AZURILL,
+ .oam = &sOam_WheelIcon,
+ .anims = sAnim_WheelIcon_PurpleAzurill,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_8143280
+ .callback = SpriteCB_WheelIcon
},
{
- .tileTag = 0,
- .paletteTag = 11,
- .oam = &gOamData_85B73FC,
- .anims = gSpriteAnimTable_85B7470,
+ .tileTag = GFXTAG_WHEEL_ICONS,
+ .paletteTag = PALTAG_SKITTY,
+ .oam = &sOam_WheelIcon,
+ .anims = sAnim_WheelIcon_OrangeSkitty,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_8143280
+ .callback = SpriteCB_WheelIcon
},
{
- .tileTag = 0,
- .paletteTag = 12,
- .oam = &gOamData_85B73FC,
- .anims = gSpriteAnimTable_85B7474,
+ .tileTag = GFXTAG_WHEEL_ICONS,
+ .paletteTag = PALTAG_MAKUHITA,
+ .oam = &sOam_WheelIcon,
+ .anims = sAnim_WheelIcon_GreenMakuhita,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_8143280
+ .callback = SpriteCB_WheelIcon
},
{
- .tileTag = 0,
- .paletteTag = 9,
- .oam = &gOamData_85B73FC,
- .anims = gSpriteAnimTable_85B7478,
+ .tileTag = GFXTAG_WHEEL_ICONS,
+ .paletteTag = PALTAG_WYNAUT,
+ .oam = &sOam_WheelIcon,
+ .anims = sAnim_WheelIcon_PurpleWynaut,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_8143280
+ .callback = SpriteCB_WheelIcon
},
{
- .tileTag = 0,
- .paletteTag = 10,
- .oam = &gOamData_85B73FC,
- .anims = gSpriteAnimTable_85B747C,
+ .tileTag = GFXTAG_WHEEL_ICONS,
+ .paletteTag = PALTAG_AZURILL,
+ .oam = &sOam_WheelIcon,
+ .anims = sAnim_WheelIcon_OrangeAzurill,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_8143280
+ .callback = SpriteCB_WheelIcon
},
{
- .tileTag = 0,
- .paletteTag = 11,
- .oam = &gOamData_85B73FC,
- .anims = gSpriteAnimTable_85B7480,
+ .tileTag = GFXTAG_WHEEL_ICONS,
+ .paletteTag = PALTAG_SKITTY,
+ .oam = &sOam_WheelIcon,
+ .anims = sAnim_WheelIcon_GreenSkitty,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_8143280
+ .callback = SpriteCB_WheelIcon
},
{
- .tileTag = 0,
- .paletteTag = 12,
- .oam = &gOamData_85B73FC,
- .anims = gSpriteAnimTable_85B7484,
+ .tileTag = GFXTAG_WHEEL_ICONS,
+ .paletteTag = PALTAG_MAKUHITA,
+ .oam = &sOam_WheelIcon,
+ .anims = sAnim_WheelIcon_PurpleMakuhita,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_8143280
+ .callback = SpriteCB_WheelIcon
}
};
-static const struct OamData gOamData_85B7730 =
+static const struct OamData sOam_Credit =
{
.affineMode = ST_OAM_AFFINE_OFF,
.objMode = ST_OAM_OBJ_NORMAL,
@@ -2528,7 +2825,7 @@ static const struct OamData gOamData_85B7730 =
.priority = 1,
};
-static const struct OamData gOamData_85B7738 =
+static const struct OamData sOam_CreditDigit =
{
.affineMode = ST_OAM_AFFINE_OFF,
.objMode = ST_OAM_OBJ_NORMAL,
@@ -2537,7 +2834,7 @@ static const struct OamData gOamData_85B7738 =
.priority = 1,
};
-static const struct OamData gOamData_85B7740 =
+static const struct OamData sOam_Multiplier =
{
.affineMode = ST_OAM_AFFINE_OFF,
.objMode = ST_OAM_OBJ_NORMAL,
@@ -2546,7 +2843,7 @@ static const struct OamData gOamData_85B7740 =
.priority = 1,
};
-static const struct OamData gOamData_85B7748 =
+static const struct OamData sOam_BallCounter =
{
.affineMode = ST_OAM_AFFINE_OFF,
.objMode = ST_OAM_OBJ_NORMAL,
@@ -2555,58 +2852,59 @@ static const struct OamData gOamData_85B7748 =
.priority = 1,
};
-static const struct CompressedSpriteSheet gUnknown_085B7750[] =
+static const struct CompressedSpriteSheet sSpriteSheets_Interface[] =
{
{
- .data = gRouletteCreditTiles,
+ .data = gRouletteCredit_Gfx,
.size = 0x400,
- .tag = 7
+ .tag = GFXTAG_CREDIT
},
{
- .data = gRouletteNumbersTiles,
+ .data = gRouletteNumbers_Gfx,
.size = 0x280,
- .tag = 8
+ .tag = GFXTAG_CREDIT_DIGIT
},
{
- .data = gRouletteMultiplierTiles,
+ .data = gRouletteMultiplier_Gfx,
.size = 0x500,
- .tag = 9
+ .tag = GFXTAG_MULTIPLIER
},
{
- .data = RouletteBallCounterTiles,
+ .data = sBallCounter_Gfx,
.size = 0x140,
- .tag = 10
+ .tag = GFXTAG_BALL_COUNTER
},
{
- .data = RouletteCursorTiles,
+ .data = sCursor_Gfx,
.size = 0x200,
- .tag = 11
+ .tag = GFXTAG_CURSOR
},
{}
};
-static const union AnimCmd gSpriteAnim_85B7780[] =
-{
- ANIMCMD_FRAME(0, 0),
- ANIMCMD_FRAME(2, 0),
- ANIMCMD_FRAME(4, 0),
- ANIMCMD_FRAME(6, 0),
- ANIMCMD_FRAME(8, 0),
- ANIMCMD_FRAME(10, 0),
- ANIMCMD_FRAME(12, 0),
- ANIMCMD_FRAME(14, 0),
- ANIMCMD_FRAME(16, 0),
- ANIMCMD_FRAME(18, 0),
+static const union AnimCmd sAnim_CreditDigit[] =
+{
+ ANIMCMD_FRAME(0, 0), // 0
+ ANIMCMD_FRAME(2, 0), // 1
+ ANIMCMD_FRAME(4, 0), // 2
+ ANIMCMD_FRAME(6, 0), // 3
+ ANIMCMD_FRAME(8, 0), // 4
+ ANIMCMD_FRAME(10, 0), // 5
+ ANIMCMD_FRAME(12, 0), // 6
+ ANIMCMD_FRAME(14, 0), // 7
+ ANIMCMD_FRAME(16, 0), // 8
+ ANIMCMD_FRAME(18, 0), // 9
// BUG: Animation not terminated properly
+ // Doesn't matter in practice, the frames are set directly and not looped
//ANIMCMD_END
};
-static const union AnimCmd *const gSpriteAnimTable_85B77A8[] =
+static const union AnimCmd *const sAnims_CreditDigit[] =
{
- gSpriteAnim_85B7780
+ sAnim_CreditDigit
};
-static const union AnimCmd gSpriteAnim_85B77AC[] =
+static const union AnimCmd sAnim_Multiplier[] =
{
ANIMCMD_FRAME(0, 0),
ANIMCMD_FRAME(8, 0),
@@ -2616,12 +2914,12 @@ static const union AnimCmd gSpriteAnim_85B77AC[] =
ANIMCMD_END
};
-static const union AnimCmd *const gSpriteAnimTable_85B77C4[] =
+static const union AnimCmd *const sAnims_Multiplier[] =
{
- gSpriteAnim_85B77AC
+ sAnim_Multiplier
};
-static const union AnimCmd gSpriteAnim_85B77C8[] =
+static const union AnimCmd sAnim_BallCounter[] =
{
ANIMCMD_FRAME(0, 0),
ANIMCMD_FRAME(2, 0),
@@ -2631,67 +2929,68 @@ static const union AnimCmd gSpriteAnim_85B77C8[] =
ANIMCMD_END
};
-static const union AnimCmd *const gSpriteAnimTable_85B77E0[] =
+static const union AnimCmd *const sAnims_BallCounter[] =
{
- gSpriteAnim_85B77C8
+ sAnim_BallCounter
};
-static const struct SpriteTemplate gSpriteTemplate_85B77E4 =
+static const struct SpriteTemplate sSpriteTemplate_Credit =
{
- .tileTag = 7,
- .paletteTag = 5,
- .oam = &gOamData_85B7730,
+ .tileTag = GFXTAG_CREDIT,
+ .paletteTag = PALTAG_INTERFACE,
+ .oam = &sOam_Credit,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = SpriteCallbackDummy
};
-static const struct SpriteTemplate gUnknown_085B77FC =
+static const struct SpriteTemplate sSpriteTemplate_CreditDigit =
{
- .tileTag = 8,
- .paletteTag = 5,
- .oam = &gOamData_85B7738,
- .anims = gSpriteAnimTable_85B77A8,
+ .tileTag = GFXTAG_CREDIT_DIGIT,
+ .paletteTag = PALTAG_INTERFACE,
+ .oam = &sOam_CreditDigit,
+ .anims = sAnims_CreditDigit,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = SpriteCallbackDummy
};
-static const struct SpriteTemplate gUnknown_085B7814 =
+static const struct SpriteTemplate sSpriteTemplate_Multiplier =
{
- .tileTag = 9,
- .paletteTag = 5,
- .oam = &gOamData_85B7740,
- .anims = gSpriteAnimTable_85B77C4,
+ .tileTag = GFXTAG_MULTIPLIER,
+ .paletteTag = PALTAG_INTERFACE,
+ .oam = &sOam_Multiplier,
+ .anims = sAnims_Multiplier,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_814390C
+ .callback = SpriteCB_GridSquare
};
-static const struct SpriteTemplate gUnknown_085B782C =
+static const struct SpriteTemplate sSpriteTemplate_BallCounter =
{
- .tileTag = 10,
- .paletteTag = 3,
- .oam = &gOamData_85B7748,
- .anims = gSpriteAnimTable_85B77E0,
+ .tileTag = GFXTAG_BALL_COUNTER,
+ .paletteTag = PALTAG_BALL_COUNTER,
+ .oam = &sOam_BallCounter,
+ .anims = sAnims_BallCounter,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = SpriteCallbackDummy
};
-static const struct SpriteTemplate gUnknown_085B7844 =
+// NOTE: This cursor is only used to identify the winning square on the grid
+static const struct SpriteTemplate sSpriteTemplate_Cursor =
{
- .tileTag = 11,
- .paletteTag = 5,
- .oam = &gOamData_85B73EC,
+ .tileTag = GFXTAG_CURSOR,
+ .paletteTag = PALTAG_INTERFACE,
+ .oam = &sOam_GridHeader,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = SpriteCallbackDummy
};
-static const struct OamData gOamData_85B785C =
+static const struct OamData sOam_Ball =
{
.affineMode = ST_OAM_AFFINE_OFF,
.objMode = ST_OAM_OBJ_NORMAL,
@@ -2700,13 +2999,13 @@ static const struct OamData gOamData_85B785C =
.priority = 2,
};
-static const struct CompressedSpriteSheet gUnknown_085B7864 = {
- .data = gUnknown_085B6650,
+static const struct CompressedSpriteSheet sSpriteSheet_Ball = {
+ .data = sBall_Gfx,
.size = 0x200,
- .tag = 12
+ .tag = GFXTAG_BALL
};
-static const union AnimCmd gSpriteAnim_85B786C[] =
+static const union AnimCmd sAnim_Ball_RollFast[] =
{
ANIMCMD_FRAME(0, 5),
ANIMCMD_FRAME(4, 5),
@@ -2715,7 +3014,7 @@ static const union AnimCmd gSpriteAnim_85B786C[] =
ANIMCMD_JUMP(0)
};
-static const union AnimCmd gSpriteAnim_85B7880[] =
+static const union AnimCmd sAnim_Ball_RollMedium[] =
{
ANIMCMD_FRAME(0, 10),
ANIMCMD_FRAME(4, 10),
@@ -2724,7 +3023,7 @@ static const union AnimCmd gSpriteAnim_85B7880[] =
ANIMCMD_JUMP(0)
};
-static const union AnimCmd gSpriteAnim_85B7894[] =
+static const union AnimCmd sAnim_Ball_RollSlow[] =
{
ANIMCMD_FRAME(0, 15),
ANIMCMD_FRAME(4, 15),
@@ -2733,7 +3032,7 @@ static const union AnimCmd gSpriteAnim_85B7894[] =
ANIMCMD_JUMP(0)
};
-static const union AnimCmd gSpriteAnim_85B78A8[] =
+static const union AnimCmd sAnim_Ball_StopOnFrame1[] =
{
ANIMCMD_FRAME(4, 2),
ANIMCMD_FRAME(8, 5),
@@ -2742,7 +3041,7 @@ static const union AnimCmd gSpriteAnim_85B78A8[] =
ANIMCMD_END
};
-static const union AnimCmd gSpriteAnim_85B78BC[] =
+static const union AnimCmd sAnim_Ball_StopOnFrame3[] =
{
ANIMCMD_FRAME(4, 2),
ANIMCMD_FRAME(0, 4),
@@ -2752,7 +3051,7 @@ static const union AnimCmd gSpriteAnim_85B78BC[] =
ANIMCMD_END
};
-static const union AnimCmd gSpriteAnim_85B78D4[] =
+static const union AnimCmd sAnim_Ball_StopOnFrame4[] =
{
ANIMCMD_FRAME(0, 2),
ANIMCMD_FRAME(4, 5),
@@ -2761,13 +3060,13 @@ static const union AnimCmd gSpriteAnim_85B78D4[] =
ANIMCMD_END
};
-static const union AnimCmd gSpriteAnim_85B78E8[] =
+static const union AnimCmd sAnim_Ball_Still[] =
{
ANIMCMD_FRAME(12, 0),
ANIMCMD_END
};
-static const union AnimCmd gSpriteAnim_85B78F0[] =
+static const union AnimCmd sAnim_Ball_StopOnFrame2[] =
{
ANIMCMD_FRAME(8, 2),
ANIMCMD_FRAME(4, 5),
@@ -2776,31 +3075,31 @@ static const union AnimCmd gSpriteAnim_85B78F0[] =
ANIMCMD_END
};
-static const union AnimCmd *const gSpriteAnimTable_85B7904[] =
-{
- gSpriteAnim_85B786C,
- gSpriteAnim_85B7880,
- gSpriteAnim_85B7894,
- gSpriteAnim_85B78A8,
- gSpriteAnim_85B78F0,
- gSpriteAnim_85B78BC,
- gSpriteAnim_85B78D4,
- gSpriteAnim_85B78D4,
- gSpriteAnim_85B78E8
+static const union AnimCmd *const sAnims_Ball[] =
+{
+ sAnim_Ball_RollFast,
+ sAnim_Ball_RollMedium,
+ sAnim_Ball_RollSlow,
+ sAnim_Ball_StopOnFrame1,
+ sAnim_Ball_StopOnFrame2,
+ sAnim_Ball_StopOnFrame3,
+ sAnim_Ball_StopOnFrame4,
+ sAnim_Ball_StopOnFrame4,
+ sAnim_Ball_Still
};
-static const struct SpriteTemplate gSpriteTemplate_85B7928 =
+static const struct SpriteTemplate sSpriteTemplate_Ball =
{
- .tileTag = 12,
- .paletteTag = 2,
- .oam = &gOamData_85B785C,
- .anims = gSpriteAnimTable_85B7904,
+ .tileTag = GFXTAG_BALL,
+ .paletteTag = PALTAG_BALL,
+ .oam = &sOam_Ball,
+ .anims = sAnims_Ball,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = SpriteCallbackDummy
};
-static const struct OamData gOamData_85B7940 =
+static const struct OamData sOam_WheelCenter =
{
.y = 81,
.affineMode = ST_OAM_AFFINE_DOUBLE,
@@ -2810,25 +3109,25 @@ static const struct OamData gOamData_85B7940 =
.priority = 2,
};
-static const struct CompressedSpriteSheet gUnknown_085B7948 =
+static const struct CompressedSpriteSheet sSpriteSheet_WheelCenter =
{
.data = gRouletteCenter_Gfx,
.size = 0x800,
- .tag = 6
+ .tag = GFXTAG_WHEEL_CENTER
};
-static const struct SpriteTemplate gSpriteTemplate_85B7950 =
+static const struct SpriteTemplate sSpriteTemplate_WheelCenter =
{
- .tileTag = 6,
- .paletteTag = 2,
- .oam = &gOamData_85B7940,
+ .tileTag = GFXTAG_WHEEL_CENTER,
+ .paletteTag = PALTAG_BALL,
+ .oam = &sOam_WheelCenter,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_814399C
+ .callback = SpriteCB_WheelCenter
};
-static const struct OamData gOamData_85B7968 =
+static const struct OamData sOam_Shroomish =
{
.affineMode = ST_OAM_AFFINE_OFF,
.objMode = ST_OAM_OBJ_NORMAL,
@@ -2837,7 +3136,7 @@ static const struct OamData gOamData_85B7968 =
.priority = 2,
};
-static const struct OamData gOamData_85B7970 =
+static const struct OamData sOam_Taillow =
{
.affineMode = ST_OAM_AFFINE_OFF,
.objMode = ST_OAM_OBJ_NORMAL,
@@ -2846,14 +3145,14 @@ static const struct OamData gOamData_85B7970 =
.priority = 2,
};
-static const struct CompressedSpriteSheet gUnknown_085B7978 =
+static const struct CompressedSpriteSheet sSpriteSheet_ShroomishTaillow =
{
- .data = gUnknown_085B67FC,
+ .data = sShroomishTaillow_Gfx,
.size = 0xE00,
- .tag = 13
+ .tag = GFXTAG_SHROOMISH_TAILLOW
};
-static const union AnimCmd gSpriteAnim_85B7980[] =
+static const union AnimCmd sAnim_Shroomish[] =
{
ANIMCMD_FRAME(0, 6),
ANIMCMD_FRAME(16, 6),
@@ -2864,84 +3163,84 @@ static const union AnimCmd gSpriteAnim_85B7980[] =
ANIMCMD_JUMP(2)
};
-static const union AnimCmd gSpriteAnim_85B799C[] =
+static const union AnimCmd sAnim_Taillow_WingDown_Left[] =
{
ANIMCMD_FRAME(80, 10),
ANIMCMD_END
};
-static const union AnimCmd gSpriteAnim_85B79A4[] =
+static const union AnimCmd sAnim_Taillow_WingDown_Right[] =
{
ANIMCMD_FRAME(80, 10, .hFlip = TRUE),
ANIMCMD_END
};
-static const union AnimCmd gSpriteAnim_85B79AC[] =
+static const union AnimCmd sAnim_Taillow_FlapSlow_Left[] =
{
ANIMCMD_FRAME(80, 20),
ANIMCMD_FRAME(96, 20),
ANIMCMD_JUMP(0)
};
-static const union AnimCmd gSpriteAnim_85B79B8[] =
+static const union AnimCmd sAnim_Taillow_FlapSlow_Right[] =
{
ANIMCMD_FRAME(80, 20, .hFlip = TRUE),
ANIMCMD_FRAME(96, 20, .hFlip = TRUE),
ANIMCMD_JUMP(0)
};
-static const union AnimCmd gSpriteAnim_85B79C4[] =
+static const union AnimCmd sAnim_Taillow_FlapFast_Left[] =
{
ANIMCMD_FRAME(80, 10),
ANIMCMD_FRAME(96, 10),
ANIMCMD_JUMP(0)
};
-static const union AnimCmd gSpriteAnim_85B79D0[] =
+static const union AnimCmd sAnim_Taillow_FlapFast_Right[] =
{
ANIMCMD_FRAME(80, 10, .hFlip = TRUE),
ANIMCMD_FRAME(96, 10, .hFlip = TRUE),
ANIMCMD_JUMP(0)
};
-static const union AnimCmd *const gSpriteAnimTable_85B79DC[] =
+static const union AnimCmd *const sAnims_Shroomish[] =
{
- gSpriteAnim_85B7980
+ sAnim_Shroomish
};
-static const union AnimCmd *const gSpriteAnimTable_85B79E0[] =
+static const union AnimCmd *const sAnims_Taillow[] =
{
- gSpriteAnim_85B799C,
- gSpriteAnim_85B79A4,
- gSpriteAnim_85B79AC,
- gSpriteAnim_85B79B8,
- gSpriteAnim_85B79C4,
- gSpriteAnim_85B79D0
+ sAnim_Taillow_WingDown_Left, // While gliding in
+ sAnim_Taillow_WingDown_Right,
+ sAnim_Taillow_FlapSlow_Left, // While carrying ball
+ sAnim_Taillow_FlapSlow_Right,
+ sAnim_Taillow_FlapFast_Left, // While flying off
+ sAnim_Taillow_FlapFast_Right
};
-static const struct SpriteTemplate gSpriteTemplate_85B79F8 =
+static const struct SpriteTemplate sSpriteTemplate_Shroomish =
{
- .tileTag = 13,
- .paletteTag = 6,
- .oam = &gOamData_85B7968,
- .anims = gSpriteAnimTable_85B79DC,
+ .tileTag = GFXTAG_SHROOMISH_TAILLOW,
+ .paletteTag = PALTAG_SHROOMISH,
+ .oam = &sOam_Shroomish,
+ .anims = sAnims_Shroomish,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = SpriteCallbackDummy
};
-static const struct SpriteTemplate gSpriteTemplate_85B7A10 =
+static const struct SpriteTemplate sSpriteTemplate_Taillow =
{
- .tileTag = 13,
- .paletteTag = 7,
- .oam = &gOamData_85B7970,
- .anims = gSpriteAnimTable_85B79E0,
+ .tileTag = GFXTAG_SHROOMISH_TAILLOW,
+ .paletteTag = PALTAG_TAILLOW,
+ .oam = &sOam_Taillow,
+ .anims = sAnims_Taillow,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_8145294
+ .callback = SpriteCB_Taillow
};
-static const struct OamData gOamData_85B7A28 =
+static const struct OamData sOam_ShroomishBallShadow =
{
.affineMode = ST_OAM_AFFINE_OFF,
.objMode = ST_OAM_OBJ_NORMAL,
@@ -2950,7 +3249,7 @@ static const struct OamData gOamData_85B7A28 =
.priority = 2,
};
-static const struct OamData gOamData_85B7A30 =
+static const struct OamData sOam_ShroomishShadow =
{
.affineMode = ST_OAM_AFFINE_OFF,
.objMode = ST_OAM_OBJ_NORMAL,
@@ -2959,7 +3258,7 @@ static const struct OamData gOamData_85B7A30 =
.priority = 2,
};
-static const struct OamData gOamData_85B7A38 =
+static const struct OamData sOam_TaillowShadow =
{
.affineMode = ST_OAM_AFFINE_NORMAL,
.objMode = ST_OAM_OBJ_NORMAL,
@@ -2968,21 +3267,21 @@ static const struct OamData gOamData_85B7A38 =
.priority = 2,
};
-static const struct CompressedSpriteSheet gUnknown_085B7A40 =
+static const struct CompressedSpriteSheet sSpriteSheet_Shadow =
{
- .data = gUnknown_085B7290,
+ .data = sShadow_Gfx,
.size = 0x180,
- .tag = 14
+ .tag = GFXTAG_SHADOW
};
-static const union AffineAnimCmd gSpriteAffineAnim_85B7A48[] =
+static const union AffineAnimCmd sAffineAnim_Unused3[] =
{
AFFINEANIMCMD_FRAME(0x80, 0x80, 0, 0),
AFFINEANIMCMD_FRAME(2, 2, 0, 60),
AFFINEANIMCMD_END
};
-static const union AffineAnimCmd gSpriteAffineAnim_85B7A60[] =
+static const union AffineAnimCmd sAffineAnim_TaillowShadow[] =
{
AFFINEANIMCMD_FRAME(0x100, 0x100, 0, 0),
AFFINEANIMCMD_FRAME(-2, 0x0, 0, 15),
@@ -2991,99 +3290,101 @@ static const union AffineAnimCmd gSpriteAffineAnim_85B7A60[] =
AFFINEANIMCMD_END
};
-static const union AffineAnimCmd *const gSpriteAffineAnimTable_85B7A88[] =
+static const union AffineAnimCmd *const sAffineAnims_Unused3[] =
{
- gSpriteAffineAnim_85B7A48
+ sAffineAnim_Unused3
};
-static const union AffineAnimCmd *const gSpriteAffineAnimTable_85B7A8C[] =
+static const union AffineAnimCmd *const sAffineAnims_TaillowShadow[] =
{
- gSpriteAffineAnim_85B7A60
+ sAffineAnim_TaillowShadow
};
-static const union AffineAnimCmd gSpriteAffineAnim_85B7A90[] =
+static const union AffineAnimCmd sAffineAnim_Unused4[] =
{
AFFINEANIMCMD_FRAME(0x100, 0x100, 0, 0),
AFFINEANIMCMD_END
};
-static const union AffineAnimCmd *const gSpriteAffineAnimTable_85B7AA0[] =
+static const union AffineAnimCmd *const sAffineAnims_Unused4[] =
{
- gSpriteAffineAnim_85B7A90
+ sAffineAnim_Unused4
};
-static const union AnimCmd gSpriteAnim_85B7AA4[] =
+static const union AnimCmd sAnim_ShroomishBallShadow[] =
{
ANIMCMD_FRAME(0, 0),
ANIMCMD_END
};
-static const union AnimCmd gSpriteAnim_85B7AAC[] =
+static const union AnimCmd sAnim_UnstickMonShadow[] =
{
ANIMCMD_FRAME(4, 0),
ANIMCMD_END
};
-static const union AnimCmd *const gSpriteAnimTable_85B7AB4[] =
+static const union AnimCmd *const sAnims_ShroomishBallShadow[] =
{
- gSpriteAnim_85B7AA4
+ sAnim_ShroomishBallShadow
};
-static const union AnimCmd *const gSpriteAnimTable_85B7AB8[] =
+static const union AnimCmd *const sAnims_UnstickMonShadow[] =
{
- gSpriteAnim_85B7AAC
+ sAnim_UnstickMonShadow
};
-static const struct SpriteTemplate gSpriteTemplate_85B7ABC[] =
+static const struct SpriteTemplate sSpriteTemplate_ShroomishShadow[] =
{
+ // Ball's shadow as it flies up
{
- .tileTag = 14,
- .paletteTag = 1,
- .oam = &gOamData_85B7A28,
- .anims = gSpriteAnimTable_85B7AB4,
+ .tileTag = GFXTAG_SHADOW,
+ .paletteTag = PALTAG_SHADOW,
+ .oam = &sOam_ShroomishBallShadow,
+ .anims = sAnims_ShroomishBallShadow,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = SpriteCallbackDummy
},
+ // Shroomish's Shadow
{
- .tileTag = 14,
- .paletteTag = 1,
- .oam = &gOamData_85B7A30,
- .anims = gSpriteAnimTable_85B7AB8,
+ .tileTag = GFXTAG_SHADOW,
+ .paletteTag = PALTAG_SHADOW,
+ .oam = &sOam_ShroomishShadow,
+ .anims = sAnims_UnstickMonShadow,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_8144E60
+ .callback = SpriteCB_Shroomish
}
};
-static const struct SpriteTemplate gUnknown_085B7AEC =
+static const struct SpriteTemplate sSpriteTemplate_TaillowShadow =
{
- .tileTag = 14,
- .paletteTag = 1,
- .oam = &gOamData_85B7A38,
- .anims = gSpriteAnimTable_85B7AB8,
+ .tileTag = GFXTAG_SHADOW,
+ .paletteTag = PALTAG_SHADOW,
+ .oam = &sOam_TaillowShadow,
+ .anims = sAnims_UnstickMonShadow,
.images = NULL,
- .affineAnims = gSpriteAffineAnimTable_85B7A8C,
- .callback = sub_8145294
+ .affineAnims = sAffineAnims_TaillowShadow,
+ .callback = SpriteCB_Taillow
};
-static void sub_81428C4(u8 r0)
+static void Task_ShowMinBetYesNo(u8 taskId)
{
DisplayYesNoMenuDefaultYes();
- DoYesNoFuncWithChoice(r0, &gUnknown_085B6408);
+ DoYesNoFuncWithChoice(taskId, &sYesNoTable_AcceptMinBet);
}
-static void sub_81428E4(u8 taskId)
+static void Task_FadeToRouletteGame(u8 taskId)
{
if (!gPaletteFade.active)
{
SetVBlankCallback(NULL);
- SetMainCallback2(sub_81405CC);
+ SetMainCallback2(CB2_LoadRoulette);
DestroyTask(taskId);
}
}
-static void sub_8142918(u8 taskId)
+static void Task_AcceptMinBet(u8 taskId)
{
ClearStdWindowAndFrame(0, TRUE);
HideCoinsWindow();
@@ -3091,10 +3392,10 @@ static void sub_8142918(u8 taskId)
BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK);
gPaletteFade.delayCounter = gPaletteFade.multipurpose2;
UpdatePaletteFade();
- gTasks[taskId].func = sub_81428E4;
+ gTasks[taskId].func = Task_FadeToRouletteGame;
}
-static void sub_814297C(u8 taskId)
+static void Task_DeclineMinBet(u8 taskId)
{
ClearStdWindowAndFrame(0, FALSE);
HideCoinsWindow();
@@ -3102,10 +3403,10 @@ static void sub_814297C(u8 taskId)
DestroyTask(taskId);
}
-static void sub_81429A0(u8 taskId)
+static void Task_NotEnoughForMinBet(u8 taskId)
{
gTasks[taskId].data[0]++;
- if (gMain.newKeys & (A_BUTTON | B_BUTTON))
+ if (JOY_NEW(A_BUTTON | B_BUTTON))
{
gSpecialVar_0x8004 = 1;
HideCoinsWindow();
@@ -3115,52 +3416,56 @@ static void sub_81429A0(u8 taskId)
}
}
-static void sub_81429F0(u8 taskId)
+static void Task_PrintMinBet(u8 taskId)
{
- if (gMain.newKeys & (A_BUTTON | B_BUTTON))
+ if (JOY_NEW(A_BUTTON | B_BUTTON))
{
- u32 temp = gUnknown_085B6344[(gSpecialVar_0x8004 & 1) + (gSpecialVar_0x8004 >> 7 << 1)];
- ConvertIntToDecimalStringN(gStringVar1, temp, STR_CONV_MODE_LEADING_ZEROS, 1);
+ u32 minBet = sTableMinBets[GET_MIN_BET_ID(gSpecialVar_0x8004)];
+ ConvertIntToDecimalStringN(gStringVar1, minBet, STR_CONV_MODE_LEADING_ZEROS, 1);
StringExpandPlaceholders(gStringVar4, Roulette_Text_PlayMinimumWagerIsX);
DrawStdWindowFrame(0, FALSE);
AddTextPrinterParameterized(0, 1, gStringVar4, 0, 1, TEXT_SPEED_FF, NULL);
CopyWindowToVram(0, 3);
- gTasks[taskId].func = sub_81428C4;
+ gTasks[taskId].func = Task_ShowMinBetYesNo;
}
}
-static void Task_Roulette_0(u8 taskId)
+static void Task_PrintRouletteEntryMsg(u8 taskId)
{
- s32 temp;
- PrintCoinsString(gTasks[taskId].data[13]);
- temp = gUnknown_085B6344[(gSpecialVar_0x8004 & 1) + (gSpecialVar_0x8004 >> 7 << 1)];
- ConvertIntToDecimalStringN(gStringVar1, temp, STR_CONV_MODE_LEADING_ZEROS, 1);
- if (gTasks[taskId].data[13] >= temp)
+ s32 minBet;
+ PrintCoinsString(gTasks[taskId].tCoins);
+ minBet = sTableMinBets[GET_MIN_BET_ID(gSpecialVar_0x8004)];
+ ConvertIntToDecimalStringN(gStringVar1, minBet, STR_CONV_MODE_LEADING_ZEROS, 1);
+
+ if (gTasks[taskId].tCoins >= minBet)
{
- if ((gSpecialVar_0x8004 & 0x80) && (gSpecialVar_0x8004 & 1))
+ if ((gSpecialVar_0x8004 & ROULETTE_SPECIAL_RATE) && (gSpecialVar_0x8004 & 1))
{
+ // Special rate for Game Corner service day (only at second table)
DrawStdWindowFrame(0, FALSE);
AddTextPrinterParameterized(0, 1, Roulette_Text_SpecialRateTable, 0, 1, TEXT_SPEED_FF, NULL);
CopyWindowToVram(0, 3);
- gTasks[taskId].func = sub_81429F0;
+ gTasks[taskId].func = Task_PrintMinBet;
}
else
{
+ // Print minimum bet
StringExpandPlaceholders(gStringVar4, Roulette_Text_PlayMinimumWagerIsX);
DrawStdWindowFrame(0, FALSE);
AddTextPrinterParameterized(0, 1, gStringVar4, 0, 1, TEXT_SPEED_FF, NULL);
CopyWindowToVram(0, 3);
- gTasks[taskId].func = sub_81428C4;
+ gTasks[taskId].func = Task_ShowMinBetYesNo;
}
}
else
{
+ // Not enough for minimum bet
StringExpandPlaceholders(gStringVar4, Roulette_Text_NotEnoughCoins);
DrawStdWindowFrame(0, FALSE);
AddTextPrinterParameterized(0, 1, gStringVar4, 0, 1, TEXT_SPEED_FF, NULL);
CopyWindowToVram(0, 3);
- gTasks[taskId].func = sub_81429A0;
- gTasks[taskId].data[13] = 0;
+ gTasks[taskId].func = Task_NotEnoughForMinBet;
+ gTasks[taskId].tCoins = 0;
gTasks[taskId].data[0] = 0;
}
}
@@ -3168,212 +3473,215 @@ static void Task_Roulette_0(u8 taskId)
void PlayRoulette(void)
{
u8 taskId;
-
ScriptContext2_Enable();
ShowCoinsWindow(GetCoins(), 1, 1);
- taskId = CreateTask(Task_Roulette_0, 0);
- gTasks[taskId].data[13] = GetCoins();
+ taskId = CreateTask(Task_PrintRouletteEntryMsg, 0);
+ gTasks[taskId].tCoins = GetCoins();
}
-static void sub_8142C0C(u8 r0)
+static void LoadOrFreeMiscSpritePalettesAndSheets(bool8 free)
{
- if (!r0)
+ if (!free)
{
FreeAllSpritePalettes();
- LoadSpritePalettes(gUnknown_085B7384);
- LoadCompressedSpriteSheet(&gUnknown_085B7864);
- LoadCompressedSpriteSheet(&gUnknown_085B7978);
- LoadCompressedSpriteSheet(&gUnknown_085B7A40);
+ LoadSpritePalettes(sSpritePalettes);
+ LoadCompressedSpriteSheet(&sSpriteSheet_Ball);
+ LoadCompressedSpriteSheet(&sSpriteSheet_ShroomishTaillow);
+ LoadCompressedSpriteSheet(&sSpriteSheet_Shadow);
}
else
{
- FreeSpriteTilesByTag(14);
- FreeSpriteTilesByTag(13);
- FreeSpriteTilesByTag(12);
+ // Unused
+ FreeSpriteTilesByTag(GFXTAG_SHADOW);
+ FreeSpriteTilesByTag(GFXTAG_SHROOMISH_TAILLOW);
+ FreeSpriteTilesByTag(GFXTAG_BALL);
FreeAllSpritePalettes();
}
}
-static u8 sub_8142C60(const struct SpriteTemplate *r0, u8 r1, u16 *r2)
+static u8 CreateWheelIconSprite(const struct SpriteTemplate *template, u8 r1, u16 *angle)
{
u16 temp;
- u8 spriteId = CreateSprite(r0, 116, 80, r0->oam->y);
- gSprites[spriteId].data[0] = *r2;
- gSprites[spriteId].data[1] = r1;
+ u8 spriteId = CreateSprite(template, 116, 80, template->oam->y);
+ gSprites[spriteId].data[0] = *angle;
+ gSprites[spriteId].data[1] = r1;
gSprites[spriteId].coordOffsetEnabled = TRUE;
- gSprites[spriteId].animPaused = TRUE;
- gSprites[spriteId].affineAnimPaused = TRUE;
- temp = *r2;
- *r2 += 30;
- if (*r2 >= 360)
- *r2 = temp - 330;
+ gSprites[spriteId].animPaused = TRUE;
+ gSprites[spriteId].affineAnimPaused = TRUE;
+ temp = *angle;
+ *angle += DEGREES_PER_SLOT;
+ if (*angle >= 360)
+ *angle = temp - (360 - DEGREES_PER_SLOT);
return spriteId;
}
-static void sub_8142CD0(void)
+static void CreateGridSprites(void)
{
u8 i, j;
u8 spriteId;
struct SpriteSheet s;
- LZ77UnCompWram(gUnknown_085B7488.data, gDecompressionBuffer);
+ LZ77UnCompWram(sSpriteSheet_Headers.data, gDecompressionBuffer);
s.data = gDecompressionBuffer;
- s.size = gUnknown_085B7488.size;
- s.tag = gUnknown_085B7488.tag;
+ s.size = sSpriteSheet_Headers.size;
+ s.tag = sSpriteSheet_Headers.tag;
LoadSpriteSheet(&s);
- LZ77UnCompWram(gUnknown_085B7490.data, gDecompressionBuffer);
+ LZ77UnCompWram(sSpriteSheet_GridIcons.data, gDecompressionBuffer);
s.data = gDecompressionBuffer;
- s.size = gUnknown_085B7490.size;
- s.tag = gUnknown_085B7490.tag;
+ s.size = sSpriteSheet_GridIcons.size;
+ s.tag = sSpriteSheet_GridIcons.tag;
LoadSpriteSheet(&s);
- for (i = 0; i < 3; i++)
+ for (i = 0; i < NUM_BOARD_COLORS; i++)
{
- u8 o = i * 24;
- for (j = 0; j < 4; j++)
+ u8 y = i * 24;
+ for (j = 0; j < NUM_BOARD_POKES; j++)
{
- spriteId = gUnknown_0203AB88->var3C[(i * 4) + 29 + j] = CreateSprite(&gSpriteTemplate_85B75B0[j], (j * 24) + 148, o + 92, 30);
+ spriteId = sRoulette->spriteIds[(i * NUM_BOARD_POKES) + SPR_GRID_ICONS + j] = CreateSprite(&sSpriteTemplate_GridIcons[j], (j * 24) + 148, y + 92, 30);
gSprites[spriteId].animPaused = TRUE;
- o += 24;
- if (o >= 72)
- o = 0;
+ y += 24;
+ if (y >= 72)
+ y = 0;
}
}
- for (i = 0; i < 4; i++)
+ for (i = 0; i < ARRAY_COUNT(sSpriteTemplates_PokeHeaders); i++)
{
- spriteId = gUnknown_0203AB88->var3C[i + 41] = CreateSprite(&gSpriteTemplate_85B7508[i], (i * 24) + 148, 70, 30);
+ spriteId = sRoulette->spriteIds[i + SPR_POKE_HEADERS] = CreateSprite(&sSpriteTemplates_PokeHeaders[i], (i * 24) + 148, 70, 30);
gSprites[spriteId].animPaused = TRUE;
}
- for (i = 0; i < 3; i++)
+ for (i = 0; i < ARRAY_COUNT(sSpriteTemplates_ColorHeaders); i++)
{
- spriteId = gUnknown_0203AB88->var3C[i + 45] = CreateSprite(&gSpriteTemplate_85B7568[i], 126, (i * 24) + 92, 30);
+ spriteId = sRoulette->spriteIds[i + SPR_COLOR_HEADERS] = CreateSprite(&sSpriteTemplates_ColorHeaders[i], 126, (i * 24) + 92, 30);
gSprites[spriteId].animPaused = TRUE;
}
}
-static void unref_sub_8142E3C(void)
+// Unused
+static void DestroyGridSprites(void)
{
u8 i;
- for (i = 0; i < 12; i++)
+ for (i = 0; i < NUM_ROULETTE_SLOTS; i++)
{
- DestroySprite(&gSprites[gUnknown_0203AB88->var3C[i + 29]]);
+ DestroySprite(&gSprites[sRoulette->spriteIds[i + SPR_GRID_ICONS]]);
}
}
-static void sub_8142E70(u8 r0, u8 r1)
+static void ShowHideGridIcons(bool8 hideAll, u8 hideSquare)
{
u8 i;
- switch (r0)
+ switch (hideAll)
{
- case 1:
- for (i = 0; i < 19; i++)
+ case TRUE:
+ // Hide grid icons and headers
+ for (i = 0; i < NUM_GRID_SELECTIONS; i++)
{
- gSprites[gUnknown_0203AB88->var3C[i + 29]].invisible = TRUE;
+ gSprites[sRoulette->spriteIds[i + SPR_GRID_ICONS]].invisible = TRUE;
}
break;
- case 0:
- for (i = 0; i < 12; i++)
+ case FALSE:
+ for (i = 0; i < NUM_ROULETTE_SLOTS; i++)
{
- if (!(gUnknown_0203AB88->var08 & gUnknown_085B62E4[i].var04))
- gSprites[gUnknown_0203AB88->var3C[i + 29]].invisible = FALSE;
- else if (gUnknown_085B62E4[i].var02 != r1)
- gSprites[gUnknown_0203AB88->var3C[i + 29]].invisible = TRUE;
+ if (!(sRoulette->hitFlags & sRouletteSlots[i].flag))
+ gSprites[sRoulette->spriteIds[i + SPR_GRID_ICONS]].invisible = FALSE;
+ else if (sRouletteSlots[i].gridSquare != hideSquare)
+ gSprites[sRoulette->spriteIds[i + SPR_GRID_ICONS]].invisible = TRUE;
else
- gSprites[gUnknown_0203AB88->var3C[i + 29]].invisible = FALSE;
+ gSprites[sRoulette->spriteIds[i + SPR_GRID_ICONS]].invisible = FALSE;
}
- for (; i < 19; i++)
+ // Always show grid headers
+ for (; i < NUM_GRID_SELECTIONS; i++)
{
- gSprites[gUnknown_0203AB88->var3C[i + 29]].invisible = FALSE;
+ gSprites[sRoulette->spriteIds[i + SPR_GRID_ICONS]].invisible = FALSE;
}
break;
}
}
-static void sub_8142F7C(void)
+static void CreateGridBallSprites(void)
{
u8 i;
- for (i = 0; i < 6; i++)
- {
- gUnknown_0203AB88->var3C[i + 49] = CreateSprite(&gSpriteTemplate_85B7928, 116, 20, 10);
- gSprites[gUnknown_0203AB88->var3C[i + 49]].invisible = TRUE;
- gSprites[gUnknown_0203AB88->var3C[i + 49]].data[0] = 1;
- gSprites[gUnknown_0203AB88->var3C[i + 49]].callback = sub_814390C;
- gSprites[gUnknown_0203AB88->var3C[i + 49]].oam.priority = 1;
- StartSpriteAnim(&gSprites[gUnknown_0203AB88->var3C[i + 49]], 8);
+ for (i = 0; i < BALLS_PER_ROUND; i++)
+ {
+ sRoulette->spriteIds[i + SPR_GRID_BALLS] = CreateSprite(&sSpriteTemplate_Ball, 116, 20, 10);
+ gSprites[sRoulette->spriteIds[i + SPR_GRID_BALLS]].invisible = TRUE;
+ gSprites[sRoulette->spriteIds[i + SPR_GRID_BALLS]].data[0] = 1;
+ gSprites[sRoulette->spriteIds[i + SPR_GRID_BALLS]].callback = SpriteCB_GridSquare;
+ gSprites[sRoulette->spriteIds[i + SPR_GRID_BALLS]].oam.priority = 1;
+ StartSpriteAnim(&gSprites[sRoulette->spriteIds[i + SPR_GRID_BALLS]], 8);
}
}
-static void sub_8143038(u8 r0, u8 r1)
+static void ShowHideGridBalls(bool8 hideAll, u8 hideBallId)
{
u8 i = 0;
- if (r0)
+ if (hideAll)
{
- for ( ; i < 6; i++)
+ for (; i < BALLS_PER_ROUND; i++)
{
- gSprites[gUnknown_0203AB88->var3C[i + 49]].invisible = TRUE;
+ gSprites[sRoulette->spriteIds[i + SPR_GRID_BALLS]].invisible = TRUE;
}
}
else
{
- for ( ; i < 6; i++)
+ for (; i < BALLS_PER_ROUND; i++)
{
- if (!gUnknown_0203AB88->var0C[i] || i == r1)
+ if (!sRoulette->hitSquares[i] || i == hideBallId)
{
- gSprites[gUnknown_0203AB88->var3C[i + 49]].invisible = TRUE;
+ gSprites[sRoulette->spriteIds[i + SPR_GRID_BALLS]].invisible = TRUE;
}
else
{
- gSprites[gUnknown_0203AB88->var3C[i + 49]].invisible = FALSE;
- gSprites[gUnknown_0203AB88->var3C[i + 49]].pos1.x = (gUnknown_085B6154[gUnknown_0203AB88->var0C[i]].var03 + 1) * 8 + 4;
- gSprites[gUnknown_0203AB88->var3C[i + 49]].pos1.y = (gUnknown_085B6154[gUnknown_0203AB88->var0C[i]].var04 + 1) * 8 + 3;
+ gSprites[sRoulette->spriteIds[i + SPR_GRID_BALLS]].invisible = FALSE;
+ gSprites[sRoulette->spriteIds[i + SPR_GRID_BALLS]].pos1.x = (sGridSelections[sRoulette->hitSquares[i]].x + 1) * 8 + 4;
+ gSprites[sRoulette->spriteIds[i + SPR_GRID_BALLS]].pos1.y = (sGridSelections[sRoulette->hitSquares[i]].y + 1) * 8 + 3;
}
}
}
}
-static void sub_8143150(u8 r0)
+static void ShowHideWinSlotCursor(u8 selectionId)
{
- if (!r0)
+ if (selectionId == 0)
{
- gSprites[gUnknown_0203AB88->var3C[48]].invisible = TRUE;
+ gSprites[sRoulette->spriteIds[SPR_WIN_SLOT_CURSOR]].invisible = TRUE;
}
else
{
- gSprites[gUnknown_0203AB88->var3C[48]].invisible = FALSE;
- gSprites[gUnknown_0203AB88->var3C[48]].pos1.x = (gUnknown_085B6154[r0].var03 + 2) * 8;
- gSprites[gUnknown_0203AB88->var3C[48]].pos1.y = (gUnknown_085B6154[r0].var04 + 2) * 8;
+ gSprites[sRoulette->spriteIds[SPR_WIN_SLOT_CURSOR]].invisible = FALSE;
+ gSprites[sRoulette->spriteIds[SPR_WIN_SLOT_CURSOR]].pos1.x = (sGridSelections[selectionId].x + 2) * 8;
+ gSprites[sRoulette->spriteIds[SPR_WIN_SLOT_CURSOR]].pos1.y = (sGridSelections[selectionId].y + 2) * 8;
}
}
-static void sub_81431E4(void)
+static void CreateWheelIconSprites(void)
{
u8 i, j;
- u16 k;
+ u16 angle;
struct SpriteSheet s;
- LZ77UnCompWram(gUnknown_085B741C.data, gDecompressionBuffer);
+ LZ77UnCompWram(sSpriteSheet_WheelIcons.data, gDecompressionBuffer);
s.data = gDecompressionBuffer;
- s.size = gUnknown_085B741C.size;
- s.tag = gUnknown_085B741C.tag;
+ s.size = sSpriteSheet_WheelIcons.size;
+ s.tag = sSpriteSheet_WheelIcons.tag;
LoadSpriteSheet(&s);
- k = 15;
- for (i = 0; i < 3; i++)
+ angle = 15;
+ for (i = 0; i < NUM_BOARD_COLORS; i++)
{
- for (j = 0; j < 4; j++)
+ for (j = 0; j < NUM_BOARD_POKES; j++)
{
u8 spriteId;
- spriteId = gUnknown_0203AB88->var3C[(i * 4) + 7 + j] = sub_8142C60(&gSpriteTemplate_85B7610[i * 4 + j], 40, &k);
+ spriteId = sRoulette->spriteIds[(i * NUM_BOARD_POKES) + SPR_WHEEL_ICONS + j] = CreateWheelIconSprite(&sSpriteTemplates_WheelIcons[i * NUM_BOARD_POKES + j], 40, &angle);
gSprites[spriteId].animPaused = TRUE;
gSprites[spriteId].affineAnimPaused = TRUE;
}
}
}
-static void sub_8143280(struct Sprite *sprite)
+static void SpriteCB_WheelIcon(struct Sprite *sprite)
{
s16 cos;
s16 sin;
u32 matrixNum;
- s16 angle = gUnknown_0203AB88->var24 + sprite->data[0];
+ s16 angle = sRoulette->wheelAngle + sprite->data[0];
if (angle >= 360)
angle -= 360;
sin = Sin2(angle);
@@ -3388,275 +3696,305 @@ static void sub_8143280(struct Sprite *sprite)
gOamMatrices[matrixNum].c = -sin;
}
-static void sub_8143314(void)
+static void CreateInterfaceSprites(void)
{
u8 i;
- for (i = 0; i < 5; i++)
+ for (i = 0; i < ARRAY_COUNT(sSpriteSheets_Interface) - 1; i++)
{
struct SpriteSheet s;
- LZ77UnCompWram(gUnknown_085B7750[i].data, gDecompressionBuffer);
+ LZ77UnCompWram(sSpriteSheets_Interface[i].data, gDecompressionBuffer);
s.data = gDecompressionBuffer;
- s.size = gUnknown_085B7750[i].size;
- s.tag = gUnknown_085B7750[i].tag;
+ s.size = sSpriteSheets_Interface[i].size;
+ s.tag = sSpriteSheets_Interface[i].tag;
LoadSpriteSheet(&s);
}
- gUnknown_0203AB88->var3C[20] = CreateSprite(&gSpriteTemplate_85B77E4, 208, 16, 4);
- gSprites[gUnknown_0203AB88->var3C[20]].animPaused = TRUE;
- for (i = 0; i < 4; i++)
+ sRoulette->spriteIds[SPR_CREDIT] = CreateSprite(&sSpriteTemplate_Credit, 208, 16, 4);
+ gSprites[sRoulette->spriteIds[SPR_CREDIT]].animPaused = TRUE;
+ for (i = 0; i < MAX_COIN_DIGITS; i++)
{
- gUnknown_0203AB88->var3C[i + 21] = CreateSprite(&gUnknown_085B77FC, i * 8 + 196, 24, 0);
- gSprites[gUnknown_0203AB88->var3C[i + 21]].invisible = TRUE;
- gSprites[gUnknown_0203AB88->var3C[i + 21]].animPaused = TRUE;
+ sRoulette->spriteIds[i + SPR_CREDIT_DIGITS] = CreateSprite(&sSpriteTemplate_CreditDigit, i * 8 + 196, 24, 0);
+ gSprites[sRoulette->spriteIds[i + SPR_CREDIT_DIGITS]].invisible = TRUE;
+ gSprites[sRoulette->spriteIds[i + SPR_CREDIT_DIGITS]].animPaused = TRUE;
}
- gUnknown_0203AB88->var3C[25] = CreateSprite(&gUnknown_085B7814, 120, 68, 4);
- gSprites[gUnknown_0203AB88->var3C[25]].animPaused = TRUE;
- for (i = 0; i < 3; i++)
- {
- gUnknown_0203AB88->var3C[i + 26] = CreateSprite(&gUnknown_085B782C, i * 16 + 192, 36, 4);
- gSprites[gUnknown_0203AB88->var3C[i + 26]].invisible = TRUE;
- gSprites[gUnknown_0203AB88->var3C[i + 26]].animPaused = TRUE;
+ sRoulette->spriteIds[SPR_MULTIPLIER] = CreateSprite(&sSpriteTemplate_Multiplier, 120, 68, 4);
+ gSprites[sRoulette->spriteIds[SPR_MULTIPLIER]].animPaused = TRUE;
+ for (i = 0; i < BALLS_PER_ROUND / 2; i++)
+ {
+ // Each ball counter sprite has 2 balls
+ sRoulette->spriteIds[i + SPR_BALL_COUNTER] = CreateSprite(&sSpriteTemplate_BallCounter, i * 16 + 192, 36, 4);
+ gSprites[sRoulette->spriteIds[i + SPR_BALL_COUNTER]].invisible = TRUE;
+ gSprites[sRoulette->spriteIds[i + SPR_BALL_COUNTER]].animPaused = TRUE;
}
- gUnknown_0203AB88->var3C[48] = CreateSprite(&gUnknown_085B7844, 152, 96, 9);
- gSprites[gUnknown_0203AB88->var3C[48]].oam.priority = 1;
- gSprites[gUnknown_0203AB88->var3C[48]].animPaused = TRUE;
- gSprites[gUnknown_0203AB88->var3C[48]].invisible = TRUE;
+ sRoulette->spriteIds[SPR_WIN_SLOT_CURSOR] = CreateSprite(&sSpriteTemplate_Cursor, 152, 96, 9);
+ gSprites[sRoulette->spriteIds[SPR_WIN_SLOT_CURSOR]].oam.priority = 1;
+ gSprites[sRoulette->spriteIds[SPR_WIN_SLOT_CURSOR]].animPaused = TRUE;
+ gSprites[sRoulette->spriteIds[SPR_WIN_SLOT_CURSOR]].invisible = TRUE;
}
-static void sub_8143514(u16 r0)
+static void SetCreditDigits(u16 num)
{
u8 i;
u16 d = 1000;
- bool8 v = FALSE;
- for (i = 0; i < 4; i++)
+ bool8 printZero = FALSE;
+ for (i = 0; i < MAX_COIN_DIGITS; i++)
{
- u8 t = r0 / d;
- gSprites[gUnknown_0203AB88->var3C[i + 21]].invisible = TRUE;
- if (t > 0 || v || i == 3)
+ u8 digit = num / d;
+ gSprites[sRoulette->spriteIds[i + SPR_CREDIT_DIGITS]].invisible = TRUE;
+ if (digit > 0 || printZero || i == MAX_COIN_DIGITS - 1)
{
- gSprites[gUnknown_0203AB88->var3C[i + 21]].invisible = FALSE;
- gSprites[gUnknown_0203AB88->var3C[i + 21]].oam.tileNum =
- gSprites[gUnknown_0203AB88->var3C[i + 21]].sheetTileStart
- + (*gSprites[gUnknown_0203AB88->var3C[i + 21]].anims + t)->type;
- v = TRUE;
+ gSprites[sRoulette->spriteIds[i + SPR_CREDIT_DIGITS]].invisible = FALSE;
+ gSprites[sRoulette->spriteIds[i + SPR_CREDIT_DIGITS]].oam.tileNum =
+ gSprites[sRoulette->spriteIds[i + SPR_CREDIT_DIGITS]].sheetTileStart
+ + (*gSprites[sRoulette->spriteIds[i + SPR_CREDIT_DIGITS]].anims + digit)->type;
+ printZero = TRUE;
}
- r0 = r0 % d;
+ num = num % d;
d = d / 10;
}
}
-static u8 sub_8143614(u8 r0)
+// Identical to GetMultiplier but with different data array
+static u8 GetMultiplierAnimId(u8 selectionId)
{
- u8 t[5] = {0, 1, 2, 3, 4};
+ u8 animIds[5] = {0, 1, 2, 3, 4};
- if (r0 >= 20)
- r0 = 0;
- switch (gUnknown_085B6154[r0].var01_0)
+ if (selectionId > NUM_GRID_SELECTIONS)
+ selectionId = 0;
+
+ switch (sGridSelections[selectionId].baseMultiplier)
{
- case 3:
- r0 = r0 / 5 - 1;
- if (gUnknown_0203AB88->var16[r0] > 3)
+ case NUM_BOARD_COLORS:
+ selectionId = GET_ROW_IDX(selectionId);
+ if (sRoulette->colorHits[selectionId] > 3)
return 0;
- return t[gUnknown_0203AB88->var16[r0] + 1];
- case 4:
- r0--;
- if (gUnknown_0203AB88->var12[r0] > 2)
+ return animIds[sRoulette->colorHits[selectionId] + 1];
+ case NUM_BOARD_POKES:
+ selectionId = GET_COL_IDX(selectionId);
+ if (sRoulette->pokeHits[selectionId] > 2)
return 0;
- return t[gUnknown_0203AB88->var12[r0] + 2];
- case 12:
- if (gUnknown_0203AB88->var08 & gUnknown_085B6154[r0].var08)
+ return animIds[sRoulette->pokeHits[selectionId] + 2];
+ case NUM_ROULETTE_SLOTS:
+ if (sRoulette->hitFlags & sGridSelections[selectionId].flag)
return 0;
- return t[4];
+ return animIds[4];
}
return 0;
}
-static void sub_81436D0(u8 r0)
+static void SetMultiplierSprite(u8 selectionId)
{
- struct Sprite *s = &gSprites[gUnknown_0203AB88->var3C[25]];
- s->animCmdIndex = sub_8143614(r0);
- s->oam.tileNum = s->sheetTileStart + (*s->anims + s->animCmdIndex)->type;
+ struct Sprite *sprite = &gSprites[sRoulette->spriteIds[SPR_MULTIPLIER]];
+ sprite->animCmdIndex = GetMultiplierAnimId(selectionId);
+ sprite->oam.tileNum = sprite->sheetTileStart + (*sprite->anims + sprite->animCmdIndex)->type;
}
-static void sub_814372C(u8 r0)
+static void SetBallCounterNumLeft(u8 numBalls)
{
u8 i;
u8 t = 0;
- if (gUnknown_0203AB88->var19 == 1)
+ if (sRoulette->minBet == 1)
t = 2;
- switch (r0)
+ switch (numBalls)
{
case 6:
- for (i = 0; i < 3; i++)
+ for (i = 0; i < BALLS_PER_ROUND / 2; i++)
{
- gSprites[gUnknown_0203AB88->var3C[i + 26]].invisible = FALSE;
- gSprites[gUnknown_0203AB88->var3C[i + 26]].oam.tileNum =
- gSprites[gUnknown_0203AB88->var3C[i + 26]].sheetTileStart
- + (*gSprites[gUnknown_0203AB88->var3C[i + 26]].anims)->type;
+ gSprites[sRoulette->spriteIds[i + SPR_BALL_COUNTER]].invisible = FALSE;
+ gSprites[sRoulette->spriteIds[i + SPR_BALL_COUNTER]].oam.tileNum =
+ gSprites[sRoulette->spriteIds[i + SPR_BALL_COUNTER]].sheetTileStart
+ + (*gSprites[sRoulette->spriteIds[i + SPR_BALL_COUNTER]].anims)->type;
}
break;
case 5:
- gSprites[gUnknown_0203AB88->var3C[28]].oam.tileNum =
- gSprites[gUnknown_0203AB88->var3C[28]].sheetTileStart
- + (*gSprites[gUnknown_0203AB88->var3C[28]].anims + t + 1)->type;
+ gSprites[sRoulette->spriteIds[SPR_BALL_COUNTER_3]].oam.tileNum =
+ gSprites[sRoulette->spriteIds[SPR_BALL_COUNTER_3]].sheetTileStart
+ + (*gSprites[sRoulette->spriteIds[SPR_BALL_COUNTER_3]].anims + t + 1)->type;
break;
case 4:
- gSprites[gUnknown_0203AB88->var3C[28]].oam.tileNum =
- gSprites[gUnknown_0203AB88->var3C[28]].sheetTileStart
- + (*gSprites[gUnknown_0203AB88->var3C[28]].anims + t + 2)->type;
+ gSprites[sRoulette->spriteIds[SPR_BALL_COUNTER_3]].oam.tileNum =
+ gSprites[sRoulette->spriteIds[SPR_BALL_COUNTER_3]].sheetTileStart
+ + (*gSprites[sRoulette->spriteIds[SPR_BALL_COUNTER_3]].anims + t + 2)->type;
break;
case 3:
- gSprites[gUnknown_0203AB88->var3C[27]].oam.tileNum =
- gSprites[gUnknown_0203AB88->var3C[27]].sheetTileStart
- + (*gSprites[gUnknown_0203AB88->var3C[27]].anims + t + 1)->type;
+ gSprites[sRoulette->spriteIds[SPR_BALL_COUNTER_2]].oam.tileNum =
+ gSprites[sRoulette->spriteIds[SPR_BALL_COUNTER_2]].sheetTileStart
+ + (*gSprites[sRoulette->spriteIds[SPR_BALL_COUNTER_2]].anims + t + 1)->type;
break;
case 2:
- gSprites[gUnknown_0203AB88->var3C[27]].oam.tileNum =
- gSprites[gUnknown_0203AB88->var3C[27]].sheetTileStart
- + (*gSprites[gUnknown_0203AB88->var3C[27]].anims + t + 2)->type;
+ gSprites[sRoulette->spriteIds[SPR_BALL_COUNTER_2]].oam.tileNum =
+ gSprites[sRoulette->spriteIds[SPR_BALL_COUNTER_2]].sheetTileStart
+ + (*gSprites[sRoulette->spriteIds[SPR_BALL_COUNTER_2]].anims + t + 2)->type;
break;
case 1:
- gSprites[gUnknown_0203AB88->var3C[26]].oam.tileNum =
- gSprites[gUnknown_0203AB88->var3C[26]].sheetTileStart
- + (*gSprites[gUnknown_0203AB88->var3C[26]].anims + t + 1)->type;
+ gSprites[sRoulette->spriteIds[SPR_BALL_COUNTER_1]].oam.tileNum =
+ gSprites[sRoulette->spriteIds[SPR_BALL_COUNTER_1]].sheetTileStart
+ + (*gSprites[sRoulette->spriteIds[SPR_BALL_COUNTER_1]].anims + t + 1)->type;
break;
case 0:
default:
- for (i = 0; i < 3; i++)
+ for (i = 0; i < BALLS_PER_ROUND / 2; i++)
{
- gSprites[gUnknown_0203AB88->var3C[i + 26]].oam.tileNum =
- gSprites[gUnknown_0203AB88->var3C[i + 26]].sheetTileStart
- + (*gSprites[gUnknown_0203AB88->var3C[i + 26]].anims + t + 2)->type;
+ gSprites[sRoulette->spriteIds[i + SPR_BALL_COUNTER]].oam.tileNum =
+ gSprites[sRoulette->spriteIds[i + SPR_BALL_COUNTER]].sheetTileStart
+ + (*gSprites[sRoulette->spriteIds[i + SPR_BALL_COUNTER]].anims + t + 2)->type;
}
}
}
-static void sub_814390C(struct Sprite *sprite)
+static void SpriteCB_GridSquare(struct Sprite *sprite)
{
- sprite->pos2.x = gUnknown_0203AB88->var26;
+ sprite->pos2.x = sRoulette->gridX;
}
-static void sub_814391C(void)
+static void CreateWheelCenterSprite(void)
{
u8 spriteId;
struct SpriteSheet s;
- LZ77UnCompWram(gUnknown_085B7948.data, gDecompressionBuffer);
+ LZ77UnCompWram(sSpriteSheet_WheelCenter.data, gDecompressionBuffer);
s.data = gDecompressionBuffer;
- s.size = gUnknown_085B7948.size;
- s.tag = gUnknown_085B7948.tag;
+ s.size = sSpriteSheet_WheelCenter.size;
+ s.tag = sSpriteSheet_WheelCenter.tag;
LoadSpriteSheet(&s);
- spriteId = CreateSprite(&gSpriteTemplate_85B7950, 116, 80, 81);
- gSprites[spriteId].data[0] = gUnknown_0203AB88->var24;
+ // This sprite id isn't saved because it doesn't need to be referenced again
+ // but by virtue of creation order it's SPR_WHEEL_CENTER
+ spriteId = CreateSprite(&sSpriteTemplate_WheelCenter, 116, 80, 81);
+ gSprites[spriteId].data[0] = sRoulette->wheelAngle;
gSprites[spriteId].data[1] = 0;
gSprites[spriteId].animPaused = TRUE;
gSprites[spriteId].affineAnimPaused = TRUE;
gSprites[spriteId].coordOffsetEnabled = TRUE;
}
-static void sub_814399C(struct Sprite *sprite)
+static void SpriteCB_WheelCenter(struct Sprite *sprite)
{
- u32 t = sprite->oam.matrixNum;
- struct OamMatrix *m = &gOamMatrices[0];
- m[t].d = gUnknown_0203AB88->var2C.a;
- m[t].a = gUnknown_0203AB88->var2C.a;
- m[t].b = gUnknown_0203AB88->var2C.b;
- m[t].c = gUnknown_0203AB88->var2C.c;
+ u32 matrixNum = sprite->oam.matrixNum;
+ struct OamMatrix *matrix = &gOamMatrices[0];
+ matrix[matrixNum].d = sRoulette->wheelRotation.a;
+ matrix[matrixNum].a = sRoulette->wheelRotation.a;
+ matrix[matrixNum].b = sRoulette->wheelRotation.b;
+ matrix[matrixNum].c = sRoulette->wheelRotation.c;
}
-static void sub_81439C8(void)
+static void CreateWheelBallSprites(void)
{
u8 i;
- for (i = 0; i < 6; i++)
+ for (i = 0; i < BALLS_PER_ROUND; i++)
{
- gUnknown_0203AB88->var3C[i] = CreateSprite(&gSpriteTemplate_85B7928, 116, 80, 57 - i);
- if (gUnknown_0203AB88->var3C[i] != MAX_SPRITES)
+ sRoulette->spriteIds[i] = CreateSprite(&sSpriteTemplate_Ball, 116, 80, 57 - i);
+ if (sRoulette->spriteIds[i] != MAX_SPRITES)
{
- gSprites[gUnknown_0203AB88->var3C[i]].invisible = TRUE;
- gSprites[gUnknown_0203AB88->var3C[i]].coordOffsetEnabled = TRUE;
+ gSprites[sRoulette->spriteIds[i]].invisible = TRUE;
+ gSprites[sRoulette->spriteIds[i]].coordOffsetEnabled = TRUE;
}
}
}
-static void sub_8143A40(void)
+static void HideWheelBalls(void)
{
- u8 t = gUnknown_0203AB88->var3C[0];
+ u8 spriteId = sRoulette->spriteIds[SPR_WHEEL_BALLS];
u8 i;
- for (i = 0; i < 6; i++)
+ for (i = 0; i < BALLS_PER_ROUND; i++)
{
u8 j;
- gSprites[t].invisible = TRUE;
- gSprites[t].callback = &SpriteCallbackDummy;
- StartSpriteAnim(&gSprites[t], 0);
+ gSprites[spriteId].invisible = TRUE;
+ gSprites[spriteId].callback = &SpriteCallbackDummy;
+ StartSpriteAnim(&gSprites[spriteId], 0);
for (j = 0; j < 8; j++)
- {
- gSprites[t].data[j] = 0;
- }
- t++;
+ gSprites[spriteId].data[j] = 0;
+
+ spriteId++;
}
}
-static s16 sub_8143AC8(struct Sprite *sprite)
+// Sprite data for the roulette ball
+#define sStuckOnWheelLeft data[0] // if true, ball got stuck in left half of wheel, else got stuck in right half
+#define sState data[1]
+#define sSlotMidpointDist data[2]
+#define sBallAngle data[3]
+#define sBallDistToCenter data[4]
+#define sBallWheelAngle data[6]
+
+#define LandBall() \
+{ \
+ sRoulette->ballState = BALL_STATE_LANDED; \
+ sRoulette->ballRolling = FALSE; \
+ StartSpriteAnim(sprite, sprite->animCmdIndex + 3); \
+ UpdateSlotBelowBall(sprite); \
+ sprite->sBallDistToCenter = 30; \
+ UpdateBallRelativeWheelAngle(sprite); \
+ sprite->sBallWheelAngle = (sprite->sBallWheelAngle / DEGREES_PER_SLOT) * DEGREES_PER_SLOT + 15; \
+ sprite->callback = SpriteCB_BallLandInSlot; \
+ m4aSongNumStartOrChange(SE_BRIDGE_WALK); \
+}
+
+// "wheelAngle" and "sBallAngle" are relative to the screen (e.g. 180 degrees for either is always screen bottom)
+// "sBallWheelAngle" is the ball's angle relative to the wheel
+// e.g. if the ball is screen right (90), but wheel is upside down (180), sBallWheelAngle is 270 (because the ball is wheel left)
+static s16 UpdateBallRelativeWheelAngle(struct Sprite *sprite)
{
- if (gUnknown_0203AB88->var24 > sprite->data[3])
+ if (sRoulette->wheelAngle > sprite->sBallAngle)
{
- sprite->data[6] = 360 - gUnknown_0203AB88->var24 + sprite->data[3];
- if (sprite->data[6] >= 360)
- sprite->data[6] -= 360;
+ sprite->sBallWheelAngle = 360 - sRoulette->wheelAngle + sprite->sBallAngle;
+ if (sprite->sBallWheelAngle >= 360)
+ sprite->sBallWheelAngle -= 360;
}
else
{
- sprite->data[6] = sprite->data[3] - gUnknown_0203AB88->var24;
+ sprite->sBallWheelAngle = sprite->sBallAngle - sRoulette->wheelAngle;
}
- return sprite->data[6];
+ return sprite->sBallWheelAngle;
}
-static u8 sub_8143B14(struct Sprite *sprite)
+static u8 UpdateSlotBelowBall(struct Sprite *sprite)
{
- gUnknown_0203AB88->var7E = sub_8143AC8(sprite) / 30.0f;
- return gUnknown_0203AB88->var7E;
+ sRoulette->hitSlot = UpdateBallRelativeWheelAngle(sprite) / (float) DEGREES_PER_SLOT;
+ return sRoulette->hitSlot;
}
-static s16 sub_8143B48(struct Sprite *sprite)
+static s16 GetBallDistanceToSlotMidpoint(struct Sprite *sprite)
{
- s16 t = sub_8143AC8(sprite) % 30;
- u16 z;
- if (t == 14)
+ s16 angleIntoSlot = UpdateBallRelativeWheelAngle(sprite) % DEGREES_PER_SLOT;
+ u16 distanceToMidpoint;
+ if (angleIntoSlot == SLOT_MIDPOINT)
{
- z = 0;
- return sprite->data[2] = z;
+ // Ball is at midpoint, ok to drop into slot
+ distanceToMidpoint = 0;
+ return sprite->sSlotMidpointDist = distanceToMidpoint;
}
- else if (t > 13)
+ else if (angleIntoSlot >= SLOT_MIDPOINT)
{
- z = 43 - t;
- return sprite->data[2] = z;
+ // Ball has passed midpoint, travel to midpoint of next slot
+ distanceToMidpoint = (DEGREES_PER_SLOT - 1) + SLOT_MIDPOINT - angleIntoSlot;
+ return sprite->sSlotMidpointDist = distanceToMidpoint;
}
else
{
- z = 14 - t;
- return sprite->data[2] = z;
+ // Ball hasn't reached midpoint of this slot yet
+ distanceToMidpoint = SLOT_MIDPOINT - angleIntoSlot;
+ return sprite->sSlotMidpointDist = distanceToMidpoint;
}
}
-static void sub_8143B84(struct Sprite *sprite)
+static void UpdateBallPos(struct Sprite *sprite)
{
s16 sin, cos;
-
- gUnknown_0203AB88->var8C += gUnknown_0203AB88->var90;
- gUnknown_0203AB88->var88 += gUnknown_0203AB88->var8C;
-
- if (gUnknown_0203AB88->var88 >= 360)
- gUnknown_0203AB88->var88 -= 360.0f;
- else if (gUnknown_0203AB88->var88 < 0.0f)
- gUnknown_0203AB88->var88 += 360.0f;
-
- sprite->data[3] = gUnknown_0203AB88->var88;
- gUnknown_0203AB88->var98 += gUnknown_0203AB88->var9C;
- gUnknown_0203AB88->var94 += gUnknown_0203AB88->var98;
- sprite->data[4] = gUnknown_0203AB88->var94;
- sin = Sin2(sprite->data[3]);
- cos = Cos2(sprite->data[3]);
- sprite->pos2.x = sin * sprite->data[4] >> 12;
- sprite->pos2.y = -cos * sprite->data[4] >> 12;
+ sRoulette->ballAngleSpeed += sRoulette->ballAngleAccel;
+ sRoulette->ballAngle += sRoulette->ballAngleSpeed;
+
+ if (sRoulette->ballAngle >= 360)
+ sRoulette->ballAngle -= 360.0f;
+ else if (sRoulette->ballAngle < 0.0f)
+ sRoulette->ballAngle += 360.0f;
+
+ sprite->sBallAngle = sRoulette->ballAngle;
+ sRoulette->ballFallSpeed += sRoulette->ballFallAccel;
+ sRoulette->ballDistToCenter += sRoulette->ballFallSpeed;
+ sprite->sBallDistToCenter = sRoulette->ballDistToCenter;
+ sin = Sin2(sprite->sBallAngle);
+ cos = Cos2(sprite->sBallAngle);
+ sprite->pos2.x = sin * sprite->sBallDistToCenter >> 12;
+ sprite->pos2.y = -cos * sprite->sBallDistToCenter >> 12;
if (IsSEPlaying())
{
m4aMPlayPanpotControl(&gMPlayInfo_SE1, 0xFFFF, sprite->pos2.x);
@@ -3664,80 +4002,65 @@ static void sub_8143B84(struct Sprite *sprite)
}
}
-static void sub_8143C90(struct Sprite *sprite)
+// Snap to the bottom of the slot and continue to spin with the wheel
+static void SpriteCB_BallLandInSlot(struct Sprite *sprite)
{
s16 sin, cos;
- sprite->data[3] = gUnknown_0203AB88->var24 + sprite->data[6];
- if (sprite->data[3] >= 360)
- sprite->data[3] -= 360;
- sin = Sin2(sprite->data[3]);
- cos = Cos2(sprite->data[3]);
- sprite->pos2.x = sin * sprite->data[4] >> 12;
- sprite->pos2.y = -cos * sprite->data[4] >> 12;
+ sprite->sBallAngle = sRoulette->wheelAngle + sprite->sBallWheelAngle;
+ if (sprite->sBallAngle >= 360)
+ sprite->sBallAngle -= 360;
+ sin = Sin2(sprite->sBallAngle);
+ cos = Cos2(sprite->sBallAngle);
+ sprite->pos2.x = sin * sprite->sBallDistToCenter >> 12;
+ sprite->pos2.y = -cos * sprite->sBallDistToCenter >> 12;
sprite->pos2.y += gSpriteCoordOffsetY;
}
-static void sub_8143CFC(struct Sprite *sprite)
+static void SpriteCB_UnstickBall_ShroomishBallFall(struct Sprite *sprite)
{
- sub_8143B84(sprite);
+ UpdateBallPos(sprite);
sprite->data[2]++;
- if (sprite->data[4] < -132 || sprite->data[4] > 80)
+ if (sprite->sBallDistToCenter < -132 || sprite->sBallDistToCenter > 80)
sprite->invisible = TRUE;
else
sprite->invisible = FALSE;
- if (sprite->data[2] >= 30)
+ if (sprite->data[2] >= DEGREES_PER_SLOT)
{
- if (!sprite->data[0])
+ if (!sprite->sStuckOnWheelLeft)
{
- if (gUnknown_0203AB88->var94 <= gUnknown_0203AB88->varA0 - 2.0f)
+ if (sRoulette->ballDistToCenter <= sRoulette->varA0 - 2.0f)
{
- gUnknown_0203AB88->var7D = 0xFF;
- gUnknown_0203AB88->var03_7 = 0;
- StartSpriteAnim(sprite, sprite->animCmdIndex + 0x3);
- sub_8143B14(sprite);
- sprite->data[4] = 30;
- sub_8143AC8(sprite);
- sprite->data[6] = (sprite->data[6] / 30) * 30 + 15;
- sprite->callback = sub_8143C90;
- m4aSongNumStartOrChange(SE_HASHI);
- gUnknown_0203AB88->var9C = gUnknown_0203AB88->var98 = 0.0f;
- gUnknown_0203AB88->var8C = -1.0f;
+ LandBall()
+ sRoulette->ballFallAccel = sRoulette->ballFallSpeed = 0.0f;
+ sRoulette->ballAngleSpeed = -1.0f;
}
}
else
{
- if (gUnknown_0203AB88->var94 >= gUnknown_0203AB88->varA0 - 2.0f)
+ if (sRoulette->ballDistToCenter >= sRoulette->varA0 - 2.0f)
{
- gUnknown_0203AB88->var7D = 0xFF;
- gUnknown_0203AB88->var03_7 = 0;
- StartSpriteAnim(sprite, sprite->animCmdIndex + 3);
- sub_8143B14(sprite);
- sprite->data[4] = 30;
- sub_8143AC8(sprite);
- sprite->data[6] = (sprite->data[6] / 30) * 30 + 15;
- sprite->callback = sub_8143C90;
- m4aSongNumStartOrChange(SE_HASHI);
- gUnknown_0203AB88->var9C = gUnknown_0203AB88->var98 = 0.0f;
- gUnknown_0203AB88->var8C = -1.0f;
+ LandBall()
+ sRoulette->ballFallAccel = sRoulette->ballFallSpeed = 0.0f;
+ sRoulette->ballAngleSpeed = -1.0f;
}
}
}
}
-static void sub_8143E14(struct Sprite *sprite)
+static void SpriteCB_UnstickBall_Shroomish(struct Sprite *sprite)
{
- float f0, f1, f2;
- sub_8143B84(sprite);
+ float slotOffset, ballFallDist, ballFallSpeed;
+ UpdateBallPos(sprite);
- switch (sprite->data[3])
+ switch (sprite->sBallAngle)
{
case 0:
- if (sprite->data[0] != 1)
+ if (sprite->sStuckOnWheelLeft != TRUE)
{
- f0 = sprite->data[7];
- f1 = (f0 * gUnknown_085B6348[gUnknown_0203AB88->var04_0].var01 + (gUnknown_085B6348[gUnknown_0203AB88->var04_0].var02 - 1));
- f2 = (f0 / gUnknown_085B6348[gUnknown_0203AB88->var04_0].var0C);
+ slotOffset = sprite->data[7];
+ ballFallDist = (slotOffset * sRouletteTables[sRoulette->tableId].randDistanceHigh + (sRouletteTables[sRoulette->tableId].randDistanceLow - 1));
+ ballFallSpeed = (slotOffset / sRouletteTables[sRoulette->tableId].shroomish.fallSlowdown);
}
else
{
@@ -3745,11 +4068,11 @@ static void sub_8143E14(struct Sprite *sprite)
}
break;
case 180:
- if (sprite->data[0] != 0)
+ if (sprite->sStuckOnWheelLeft)
{
- f0 = sprite->data[7];
- f1 = (f0 * gUnknown_085B6348[gUnknown_0203AB88->var04_0].var01 + (gUnknown_085B6348[gUnknown_0203AB88->var04_0].var02 - 1));
- f2 = -(f0 / gUnknown_085B6348[gUnknown_0203AB88->var04_0].var0C);
+ slotOffset = sprite->data[7];
+ ballFallDist = (slotOffset * sRouletteTables[sRoulette->tableId].randDistanceHigh + (sRouletteTables[sRoulette->tableId].randDistanceLow - 1));
+ ballFallSpeed = -(slotOffset / sRouletteTables[sRoulette->tableId].shroomish.fallSlowdown);
}
else
{
@@ -3759,45 +4082,37 @@ static void sub_8143E14(struct Sprite *sprite)
default:
return;
}
- gUnknown_0203AB88->varA0 = gUnknown_0203AB88->var94;
- gUnknown_0203AB88->var98 = f2;
- gUnknown_0203AB88->var9C = -((f2 * 2.0f) / f1 + (2.0f / (f1 * f1)));
- gUnknown_0203AB88->var8C = 0.0f;
+ sRoulette->varA0 = sRoulette->ballDistToCenter;
+ sRoulette->ballFallSpeed = ballFallSpeed;
+ sRoulette->ballFallAccel = -((ballFallSpeed * 2.0f) / ballFallDist + (2.0f / (ballFallDist * ballFallDist)));
+ sRoulette->ballAngleSpeed = 0.0f;
sprite->animPaused = FALSE;
sprite->animNum = 0;
sprite->animBeginning = TRUE;
sprite->animEnded = FALSE;
- sprite->callback = sub_8143CFC;
+ sprite->callback = SpriteCB_UnstickBall_ShroomishBallFall;
sprite->data[2] = 0;
}
-static void sub_8143FA4(struct Sprite *sprite)
+static void SpriteCB_UnstickBall_TaillowDrop(struct Sprite *sprite)
{
sprite->pos2.y = (s16)(sprite->data[2] * 0.05f * sprite->data[2]) - 45;
sprite->data[2]++;
- if (sprite->data[2] > 29 && sprite->pos2.y >= 0)
- {
- gUnknown_0203AB88->var7D = 0xFF;
- gUnknown_0203AB88->var03_7 = FALSE;
- StartSpriteAnim(sprite, sprite->animCmdIndex + 3);
- sub_8143B14(sprite);
- sprite->data[4] = 30;
- sub_8143AC8(sprite);
- sprite->data[6] = (sprite->data[6] / 30) * 30 + 15;
- sprite->callback = sub_8143C90;
- m4aSongNumStartOrChange(SE_HASHI);
- gUnknown_0203AB88->var03_6 = TRUE;
+ if (sprite->data[2] >= DEGREES_PER_SLOT && sprite->pos2.y >= 0)
+ {
+ LandBall()
+ sRoulette->ballUnstuck = TRUE;
}
}
-static void sub_8144050(struct Sprite *sprite)
+static void SpriteCB_UnstickBall_TaillowPickUp(struct Sprite *sprite)
{
if (sprite->data[2]++ < 45)
{
sprite->pos2.y--;
if (sprite->data[2] == 45)
{
- if (gSprites[gUnknown_0203AB88->var3C[55]].animCmdIndex == 1)
+ if (gSprites[sRoulette->spriteIds[SPR_CLEAR_MON]].animCmdIndex == 1)
sprite->pos2.y++;
}
}
@@ -3805,9 +4120,9 @@ static void sub_8144050(struct Sprite *sprite)
{
if (sprite->data[2] < sprite->data[7])
{
- if (gSprites[gUnknown_0203AB88->var3C[55]].animDelayCounter == 0)
+ if (gSprites[sRoulette->spriteIds[SPR_CLEAR_MON]].animDelayCounter == 0)
{
- if (gSprites[gUnknown_0203AB88->var3C[55]].animCmdIndex == 1)
+ if (gSprites[sRoulette->spriteIds[SPR_CLEAR_MON]].animCmdIndex == 1)
sprite->pos2.y++;
else
sprite->pos2.y--;
@@ -3820,315 +4135,318 @@ static void sub_8144050(struct Sprite *sprite)
sprite->animBeginning = TRUE;
sprite->animEnded = FALSE;
sprite->data[2] = 0;
- sprite->callback = sub_8143FA4;
- m4aSongNumStart(SE_NAGERU);
+ sprite->callback = SpriteCB_UnstickBall_TaillowDrop;
+ m4aSongNumStart(SE_BALL_THROW);
}
}
}
-static void sub_8144128(struct Sprite *sprite)
+static void SpriteCB_UnstickBall_Taillow(struct Sprite *sprite)
{
- sub_8143B84(sprite);
- switch (sprite->data[3])
+ UpdateBallPos(sprite);
+
+ switch (sprite->sBallAngle)
{
case 90:
- if (sprite->data[0] != 1)
+ if (sprite->sStuckOnWheelLeft != TRUE)
{
- sprite->callback = &sub_8144050;
+ sprite->callback = &SpriteCB_UnstickBall_TaillowPickUp;
sprite->data[2] = 0;
}
break;
case 270:
- if (sprite->data[0] != 0)
+ if (sprite->sStuckOnWheelLeft)
{
- sprite->callback = &sub_8144050;
+ sprite->callback = &SpriteCB_UnstickBall_TaillowPickUp;
sprite->data[2] = 0;
}
break;
}
}
-static void sub_8144168(struct Sprite *sprite)
+// The below SpriteCB_UnstickBall_* callbacks handle the ball while its being cleared by Shroomish/Taillow
+// For what Shroomish/Taillow do during this sequence, see SpriteCB_Shroomish / SpriteCB_Taillow
+static void SpriteCB_UnstickBall(struct Sprite *sprite)
{
- sub_8143B84(sprite);
- switch (gUnknown_0203AB88->var03_0)
+ UpdateBallPos(sprite);
+ switch (sRoulette->useTaillow)
{
default:
- case 0:
- sub_81446DC(sprite);
- sprite->callback = sub_8143E14;
+ case FALSE:
+ CreateShroomishSprite(sprite);
+ sprite->callback = SpriteCB_UnstickBall_Shroomish;
break;
- case 1:
- sub_81448B8(sprite);
- sprite->callback = sub_8144128;
+ case TRUE:
+ CreateTaillowSprite(sprite);
+ sprite->callback = SpriteCB_UnstickBall_Taillow;
break;
}
}
-static void prev_quest_read_x24_hm_usage(struct Sprite *sprite)
+#define sStillStuck data[0]
+
+static void SpriteCB_RollBall_TryLandAdjacent(struct Sprite *sprite)
{
- sub_8143B84(sprite);
+ UpdateBallPos(sprite);
+
if (sprite->data[2]-- == 16)
- gUnknown_0203AB88->var98 *= -1.0f;
+ sRoulette->ballFallSpeed *= -1.0f;
+
if (sprite->data[2] == 0)
{
- if (!sprite->data[0])
+ if (!sprite->sStillStuck)
{
- gUnknown_0203AB88->var7D = 0xFF;
- gUnknown_0203AB88->var03_7 = 0;
- StartSpriteAnim(sprite, sprite->animCmdIndex + 3);
- sub_8143B14(sprite);
- sprite->data[4] = 30;
- sub_8143AC8(sprite);
- sprite->data[6] = (sprite->data[6] / 30) * 30 + 15;
- sprite->callback = sub_8143C90;
- m4aSongNumStartOrChange(SE_HASHI);
+ // Ball can successfully fall into adjacent space
+ LandBall()
}
else
{
+ // Ball is stuck, need Shroomish/Taillow to clear ball
sprite->animPaused = TRUE;
- m4aSongNumStart(SE_KON);
- sub_8144A24(sprite);
+ m4aSongNumStart(SE_BALL_BOUNCE_1);
+ SetBallStuck(sprite);
}
}
}
-static void sub_8144264(struct Sprite *sprite)
+static void SpriteCB_RollBall_TryLand(struct Sprite *sprite)
{
- sub_8143B84(sprite);
+ UpdateBallPos(sprite);
sprite->data[2] = 0;
- sub_8143B14(sprite);
- if (!(gUnknown_085B62E4[gUnknown_0203AB88->var7E].var04 & gUnknown_0203AB88->var08))
- {
- gUnknown_0203AB88->var7D = 0xFF;
- gUnknown_0203AB88->var03_7 = 0;
- StartSpriteAnim(sprite, sprite->animCmdIndex + 3);
- sub_8143B14(sprite);
- sprite->data[4] = 30;
- sub_8143AC8(sprite);
- sprite->data[6] = (sprite->data[6] / 30) * 30 + 15;
- sprite->callback = sub_8143C90;
- m4aSongNumStartOrChange(SE_HASHI);
+ UpdateSlotBelowBall(sprite);
+ if (!(sRouletteSlots[sRoulette->hitSlot].flag & sRoulette->hitFlags))
+ {
+ // Space is empty, land successfully
+ LandBall()
}
else
{
- u8 t;
- u32 z;
- m4aSongNumStart(SE_KON);
- z = Random() & 1;
- if (z)
+ // Space has already been landed on, try to fall into adjacent space
+ u8 slotId;
+ u32 fallRight;
+ m4aSongNumStart(SE_BALL_BOUNCE_1);
+ fallRight = Random() & 1;
+ if (fallRight)
{
- gUnknown_0203AB88->var8C = 0.0f;
- gUnknown_0203AB88->var7F = t = (gUnknown_0203AB88->var7E + 1) % 12;
+ sRoulette->ballAngleSpeed = 0.0f;
+ sRoulette->stuckHitSlot = slotId = (sRoulette->hitSlot + 1) % NUM_ROULETTE_SLOTS;
}
- else
+ else // fall left
{
float temp;
- gUnknown_0203AB88->var8C = (temp = gUnknown_085B6348[gUnknown_0203AB88->var04_0].var1C) * 2.0f;
- t = (gUnknown_0203AB88->var7E + 11) % 12;
- gUnknown_0203AB88->var7F = gUnknown_0203AB88->var7E;
+ sRoulette->ballAngleSpeed = (temp = sRouletteTables[sRoulette->tableId].var1C) * 2.0f;
+ slotId = (sRoulette->hitSlot + NUM_ROULETTE_SLOTS - 1) % NUM_ROULETTE_SLOTS;
+ sRoulette->stuckHitSlot = sRoulette->hitSlot;
}
- if (gUnknown_085B62E4[t].var04 & gUnknown_0203AB88->var08)
+ if (sRouletteSlots[slotId].flag & sRoulette->hitFlags)
{
- sprite->data[0] = 1;
- sprite->data[2] = gUnknown_085B6348[gUnknown_0203AB88->var04_0].var02;
+ // Attempted adjacent space has also been landed on
+ sprite->sStillStuck = TRUE;
+ sprite->data[2] = sRouletteTables[sRoulette->tableId].randDistanceLow;
}
else
{
- sprite->data[0] = gUnknown_085B62E4[t].var04 & gUnknown_0203AB88->var08;
- if (gUnknown_0203AB88->var04_0)
+ sprite->sStillStuck = FALSE;
+ if (sRoulette->tableId)
{
- sprite->data[2] = gUnknown_085B6348[gUnknown_0203AB88->var04_0].var01;
+ sprite->data[2] = sRouletteTables[sRoulette->tableId].randDistanceHigh;
}
else
{
- sprite->data[2] = gUnknown_085B6348[gUnknown_0203AB88->var04_0].var02;
- if (z)
- {
- gUnknown_0203AB88->var8C = 0.5f;
- }
+ sprite->data[2] = sRouletteTables[sRoulette->tableId].randDistanceLow;
+ if (fallRight)
+ sRoulette->ballAngleSpeed = 0.5f;
else
- {
- gUnknown_0203AB88->var8C = -1.5f;
- }
+ sRoulette->ballAngleSpeed = -1.5f;
}
}
- gUnknown_0203AB88->var98 = 0.085f;
- sprite->callback = prev_quest_read_x24_hm_usage;
- sprite->data[1] = 5;
+ sRoulette->ballFallSpeed = 0.085f;
+ sprite->callback = SpriteCB_RollBall_TryLandAdjacent;
+ sprite->sState = 5;
}
}
-static void sub_8144410(struct Sprite *sprite)
+#undef sStillStuck
+
+static void SpriteCB_RollBall_Slow(struct Sprite *sprite)
{
- sub_8143B84(sprite);
- if (gUnknown_0203AB88->var8C > 0.5f)
+ UpdateBallPos(sprite);
+ if (sRoulette->ballAngleSpeed > 0.5f)
return;
- sub_8143B14(sprite);
- if (!sub_8143B48(sprite))
+ UpdateSlotBelowBall(sprite);
+ if (GetBallDistanceToSlotMidpoint(sprite) == 0)
{
- gUnknown_0203AB88->var90 = 0.0f;
- gUnknown_0203AB88->var8C -= (float)(gUnknown_085B6348[gUnknown_0203AB88->var04_0].var03)
- / (gUnknown_085B6348[gUnknown_0203AB88->var04_0].var04 + 1);
- sprite->data[1] = 4;
- sprite->callback = sub_8144264;
+ // Reached slot to land in
+ sRoulette->ballAngleAccel = 0.0f;
+ sRoulette->ballAngleSpeed -= (float)(sRouletteTables[sRoulette->tableId].wheelSpeed)
+ / (sRouletteTables[sRoulette->tableId].wheelDelay + 1);
+ sprite->sState = 4;
+ sprite->callback = SpriteCB_RollBall_TryLand;
}
else
{
- if (gUnknown_0203AB88->var90 != 0.0f)
+ if (sRoulette->ballAngleAccel != 0.0f)
{
- if (gUnknown_0203AB88->var8C < 0.0f)
+ if (sRoulette->ballAngleSpeed < 0.0f)
{
- gUnknown_0203AB88->var90 = 0.0f;
- gUnknown_0203AB88->var8C = 0.0f;
- gUnknown_0203AB88->var98 /= 1.2;
+ sRoulette->ballAngleAccel = 0.0f;
+ sRoulette->ballAngleSpeed = 0.0f;
+ sRoulette->ballFallSpeed /= 1.2;
}
}
}
}
-static void sub_8144514(struct Sprite *sprite)
+static void SpriteCB_RollBall_Medium(struct Sprite *sprite)
{
- sub_8143B84(sprite);
- if (gUnknown_0203AB88->var94 > 40.f)
+ UpdateBallPos(sprite);
+ if (sRoulette->ballDistToCenter > 40.0f)
return;
- gUnknown_0203AB88->var98 = -(4.0f / (float)(gUnknown_0203AB88->var86));
- gUnknown_0203AB88->var90 = -(gUnknown_0203AB88->var8C / (float)(gUnknown_0203AB88->var86));
+ sRoulette->ballFallSpeed = -(4.0f / (float)(sRoulette->ballTravelDistSlow));
+ sRoulette->ballAngleAccel = -(sRoulette->ballAngleSpeed / (float)(sRoulette->ballTravelDistSlow));
sprite->animNum = 2;
sprite->animBeginning = TRUE;
sprite->animEnded = FALSE;
- sprite->data[1] = 3;
- sprite->callback = sub_8144410;
+ sprite->sState = 3;
+ sprite->callback = SpriteCB_RollBall_Slow;
}
-static void sub_81445D8(struct Sprite *sprite)
+static void SpriteCB_RollBall_Fast(struct Sprite *sprite)
{
- sub_8143B84(sprite);
- if (gUnknown_0203AB88->var94 > 60.0f)
+ UpdateBallPos(sprite);
+ if (sRoulette->ballDistToCenter > 60.0f)
return;
- m4aSongNumStartOrChange(SE_TAMAKORO_E);
- gUnknown_0203AB88->var98 = -(20.0f / (float)(gUnknown_0203AB88->var84));
- gUnknown_0203AB88->var90 = ((1.0f - gUnknown_0203AB88->var8C) / (float)(gUnknown_0203AB88->var84));
+ m4aSongNumStartOrChange(SE_ROULETTE_BALL2);
+ sRoulette->ballFallSpeed = -(20.0f / (float)(sRoulette->ballTravelDistMed));
+ sRoulette->ballAngleAccel = ((1.0f - sRoulette->ballAngleSpeed) / (float)(sRoulette->ballTravelDistMed));
sprite->animNum = 1;
sprite->animBeginning = TRUE;
sprite->animEnded = FALSE;
- sprite->data[1] = 2;
- sprite->callback = sub_8144514;
+ sprite->sState = 2;
+ sprite->callback = SpriteCB_RollBall_Medium;
}
-static void sub_81446AC(struct Sprite *sprite)
+static void SpriteCB_RollBall_Start(struct Sprite *sprite)
{
- sprite->data[1] = 1;
+ sprite->sState = 1;
sprite->data[2] = 0;
- sub_8143B84(sprite);
+ UpdateBallPos(sprite);
sprite->invisible = FALSE;
- sprite->callback = sub_81445D8;
+ sprite->callback = SpriteCB_RollBall_Fast;
}
-static void sub_81446DC(struct Sprite *sprite)
+// Sprite data for Shroomish / its shadows
+#define sMonSpriteId data[4]
+#define sBallShadowSpriteId data[5]
+#define sMonShadowSpriteId data[6]
+
+static void CreateShroomishSprite(struct Sprite *ball)
{
u16 t;
u8 i;
- s16 s[2][2] = {
+ s16 coords[2][2] = {
{116, 44},
{116, 112}
};
- struct Roulette *p;
-
- t = sprite->data[7] - 2;
- p = gUnknown_0203AB88; // why???
- gUnknown_0203AB88->var3C[55] = CreateSprite(&gSpriteTemplate_85B79F8, 36, -12, 50);
- gUnknown_0203AB88->var3C[56] = CreateSprite(&gSpriteTemplate_85B7ABC[0], s[sprite->data[0]][0], s[sprite->data[0]][1], 59);
- gUnknown_0203AB88->var3C[57] = CreateSprite(&gSpriteTemplate_85B7ABC[1], 36, 140, 51);
- gSprites[gUnknown_0203AB88->var3C[57]].oam.objMode = ST_OAM_OBJ_BLEND;
+ struct Roulette *roulette;
+
+ t = ball->data[7] - 2;
+ roulette = sRoulette; // Unnecessary, needed to match
+ sRoulette->spriteIds[SPR_CLEAR_MON] = CreateSprite(&sSpriteTemplate_Shroomish, 36, -12, 50);
+ sRoulette->spriteIds[SPR_CLEAR_MON_SHADOW_1] = CreateSprite(&sSpriteTemplate_ShroomishShadow[0], coords[ball->sStuckOnWheelLeft][0], coords[ball->sStuckOnWheelLeft][1], 59);
+ sRoulette->spriteIds[SPR_CLEAR_MON_SHADOW_2] = CreateSprite(&sSpriteTemplate_ShroomishShadow[1], 36, 140, 51);
+ gSprites[sRoulette->spriteIds[SPR_CLEAR_MON_SHADOW_2]].oam.objMode = ST_OAM_OBJ_BLEND;
for (i = 0; i < 3; i++)
{
- gSprites[gUnknown_0203AB88->var3C[i + 55]].coordOffsetEnabled = FALSE;
- gSprites[gUnknown_0203AB88->var3C[i + 55]].invisible = TRUE;
- gSprites[gUnknown_0203AB88->var3C[i + 55]].animPaused = TRUE;
- gSprites[gUnknown_0203AB88->var3C[i + 55]].affineAnimPaused = TRUE;
- gSprites[gUnknown_0203AB88->var3C[i + 55]].data[4] = gUnknown_0203AB88->var3C[55];
- gSprites[gUnknown_0203AB88->var3C[i + 55]].data[5] = gUnknown_0203AB88->var3C[56];
- gSprites[gUnknown_0203AB88->var3C[i + 55]].data[6] = gUnknown_0203AB88->var3C[57];
- gSprites[gUnknown_0203AB88->var3C[i + 55]].data[2] = t;
- gSprites[gUnknown_0203AB88->var3C[i + 55]].data[3] = (sprite->data[7] * gUnknown_085B6348[gUnknown_0203AB88->var04_0].var01) +
- (gUnknown_085B6348[gUnknown_0203AB88->var04_0].var02 + 0xFFFF);
+ gSprites[sRoulette->spriteIds[i + SPR_CLEAR_MON]].coordOffsetEnabled = FALSE;
+ gSprites[sRoulette->spriteIds[i + SPR_CLEAR_MON]].invisible = TRUE;
+ gSprites[sRoulette->spriteIds[i + SPR_CLEAR_MON]].animPaused = TRUE;
+ gSprites[sRoulette->spriteIds[i + SPR_CLEAR_MON]].affineAnimPaused = TRUE;
+ gSprites[sRoulette->spriteIds[i + SPR_CLEAR_MON]].sMonSpriteId = sRoulette->spriteIds[SPR_CLEAR_MON];
+ gSprites[sRoulette->spriteIds[i + SPR_CLEAR_MON]].sBallShadowSpriteId = sRoulette->spriteIds[SPR_CLEAR_MON_SHADOW_1];
+ gSprites[sRoulette->spriteIds[i + SPR_CLEAR_MON]].sMonShadowSpriteId = sRoulette->spriteIds[SPR_CLEAR_MON_SHADOW_2];
+ gSprites[sRoulette->spriteIds[i + SPR_CLEAR_MON]].data[2] = t;
+ gSprites[sRoulette->spriteIds[i + SPR_CLEAR_MON]].data[3] = (ball->data[7] * sRouletteTables[sRoulette->tableId].randDistanceHigh) +
+ (sRouletteTables[sRoulette->tableId].randDistanceLow + 0xFFFF);
}
- gSprites[gUnknown_0203AB88->var3C[56]].coordOffsetEnabled = TRUE;
- gUnknown_0203AB88->var38 = sprite;
+ gSprites[sRoulette->spriteIds[SPR_CLEAR_MON_SHADOW_1]].coordOffsetEnabled = TRUE;
+ sRoulette->ball = ball;
}
-static void sub_81448B8(struct Sprite *sprite)
+static void CreateTaillowSprite(struct Sprite *ball)
{
u8 i = 0;
s16 t;
- s16 s[2][2] = {
- {256, 84},
- {-16, 84}
+ s16 coords[2][2] = {
+ {256, 84}, // Right approach
+ {-16, 84} // Left approach
};
- t = sprite->data[7] - 2;
- gUnknown_0203AB88->var3C[55] = CreateSprite(&gSpriteTemplate_85B7A10, s[sprite->data[0]][0], s[sprite->data[0]][1], 50);
- StartSpriteAnim(&gSprites[gUnknown_0203AB88->var3C[55]], sprite->data[0]);
- gUnknown_0203AB88->var3C[56] = CreateSprite(&gUnknown_085B7AEC, s[sprite->data[0]][0], s[sprite->data[0]][1], 51);
- gSprites[gUnknown_0203AB88->var3C[56]].affineAnimPaused = TRUE;
- gSprites[gUnknown_0203AB88->var3C[56]].animPaused = TRUE;
- sprite->data[7] = (t * gUnknown_085B6348[gUnknown_0203AB88->var04_0].var01) + (gUnknown_085B6348[gUnknown_0203AB88->var04_0].var10 + 45);
+ t = ball->data[7] - 2;
+ sRoulette->spriteIds[SPR_CLEAR_MON] = CreateSprite(&sSpriteTemplate_Taillow, coords[ball->sStuckOnWheelLeft][0], coords[ball->sStuckOnWheelLeft][1], 50);
+ StartSpriteAnim(&gSprites[sRoulette->spriteIds[SPR_CLEAR_MON]], ball->sStuckOnWheelLeft);
+ sRoulette->spriteIds[SPR_CLEAR_MON_SHADOW_1] = CreateSprite(&sSpriteTemplate_TaillowShadow, coords[ball->sStuckOnWheelLeft][0], coords[ball->sStuckOnWheelLeft][1], 51);
+ gSprites[sRoulette->spriteIds[SPR_CLEAR_MON_SHADOW_1]].affineAnimPaused = TRUE;
+ gSprites[sRoulette->spriteIds[SPR_CLEAR_MON_SHADOW_1]].animPaused = TRUE;
+ ball->data[7] = (t * sRouletteTables[sRoulette->tableId].randDistanceHigh) + (sRouletteTables[sRoulette->tableId].taillow.baseDropDelay + 45);
for (; i < 2; i++)
{
- gSprites[gUnknown_0203AB88->var3C[55 + i]].data[4] = gUnknown_0203AB88->var3C[55];
- gSprites[gUnknown_0203AB88->var3C[55 + i]].data[5] = gUnknown_0203AB88->var3C[56];
- gSprites[gUnknown_0203AB88->var3C[55 + i]].data[6] = gUnknown_0203AB88->var3C[56];
- gSprites[gUnknown_0203AB88->var3C[55 + i]].data[2] = t;
- gSprites[gUnknown_0203AB88->var3C[55 + i]].data[3] = sprite->data[7] - 45;
+ gSprites[sRoulette->spriteIds[SPR_CLEAR_MON + i]].sMonSpriteId = sRoulette->spriteIds[SPR_CLEAR_MON];
+ gSprites[sRoulette->spriteIds[SPR_CLEAR_MON + i]].sBallShadowSpriteId = sRoulette->spriteIds[SPR_CLEAR_MON_SHADOW_1];
+ gSprites[sRoulette->spriteIds[SPR_CLEAR_MON + i]].sMonShadowSpriteId = sRoulette->spriteIds[SPR_CLEAR_MON_SHADOW_1];
+ gSprites[sRoulette->spriteIds[SPR_CLEAR_MON + i]].data[2] = t;
+ gSprites[sRoulette->spriteIds[SPR_CLEAR_MON + i]].data[3] = ball->data[7] - 45;
}
- gUnknown_0203AB88->var38 = sprite;
+ sRoulette->ball = ball;
}
-static void sub_8144A24(struct Sprite *sprite)
+static void SetBallStuck(struct Sprite *sprite)
{
- u8 z;
- u16 o;
- u8 h = 0;
- u8 j = 5;
- u8 p = 0;
+ u8 slotId;
+ u16 angle;
+ u8 numCandidates = 0;
+ u8 maxSlotToCheck = 5;
+ u8 betSlotId = 0;
u8 i = 0;
- u8 val;
- u8 s[10] = {};
+ u8 slotsToSkip;
+ u8 slotCandidates[NUM_ROULETTE_SLOTS - 2] = {}; // - 2 because we know at least 2 are already occupied
u16 rand = Random();
- gUnknown_0203AB88->var7D = 1;
- gUnknown_0203AB88->var03_5 = TRUE;
- gUnknown_0203AB88->var03_6 = FALSE;
- gUnknown_0203AB88->var7E = 0xFF;
- gUnknown_0203AB88->var88 = sprite->data[3];
- gUnknown_0203AB88->var98 = 0.0f;
- gUnknown_0203AB88->var8C = gUnknown_085B6348[gUnknown_0203AB88->var04_0].var1C;
+ sRoulette->ballState = BALL_STATE_STUCK;
+ sRoulette->ballStuck = TRUE;
+ sRoulette->ballUnstuck = FALSE;
+ sRoulette->hitSlot = 0xFF;
+ sRoulette->ballAngle = sprite->sBallAngle;
+ sRoulette->ballFallSpeed = 0.0f;
+ sRoulette->ballAngleSpeed = sRouletteTables[sRoulette->tableId].var1C;
+
+ angle = (sRoulette->tableId * DEGREES_PER_SLOT + 33) + (1 - sRoulette->useTaillow) * 15;
- o = (gUnknown_0203AB88->var04_0 * 30 + 33) + (0x1 - gUnknown_0203AB88->var03_0) * 15;
+ // Determine which quadrant the ball got stuck in
+ // Use either Shroomish or Taillow to clear the ball depending on where it's stuck
for (i = 0; i < 4; i++)
{
- if (o < sprite->data[3] && sprite->data[3] <= o + 90)
+ if (angle < sprite->sBallAngle && sprite->sBallAngle <= angle + 90)
{
- sprite->data[0] = i / 2;
- gUnknown_0203AB88->var03_0 = i % 2;
+ sprite->sStuckOnWheelLeft = i / 2;
+ sRoulette->useTaillow = i % 2;
break;
}
if (i == 3)
{
- sprite->data[0] = 1;
- gUnknown_0203AB88->var03_0 = 1;
+ sprite->sStuckOnWheelLeft = TRUE;
+ sRoulette->useTaillow = TRUE;
break;
}
- o += 90;
+ angle += 90;
}
- if (gUnknown_0203AB88->var03_0)
+ if (sRoulette->useTaillow)
{
- if (sprite->data[0])
+ if (sprite->sStuckOnWheelLeft)
PlayCry1(SPECIES_TAILLOW, -63);
else
PlayCry1(SPECIES_TAILLOW, 63);
@@ -4138,41 +4456,47 @@ static void sub_8144A24(struct Sprite *sprite)
PlayCry1(SPECIES_SHROOMISH, -63);
}
- val = 2;
- z = (gUnknown_0203AB88->var7F + 2) % 12;
+ slotsToSkip = 2;
+ slotId = (sRoulette->stuckHitSlot + 2) % NUM_ROULETTE_SLOTS;
- if (gUnknown_0203AB88->var03_0 == 1 && gUnknown_0203AB88->var04_0 == 1)
- j += 6;
+ if (sRoulette->useTaillow == TRUE && sRoulette->tableId == 1)
+ maxSlotToCheck += 6; // Check all remaining slots
else
- j += val;
+ maxSlotToCheck += slotsToSkip; // Check enough slots to guarantee an empty will be found
- for (i = val; i < j; i++)
+ // Identify open slots on the wheel that the stuck ball could be moved to
+ for (i = slotsToSkip; i < maxSlotToCheck; i++)
{
- if (!(gUnknown_0203AB88->var08 & gUnknown_085B62E4[z].var04))
+ if (!(sRoulette->hitFlags & sRouletteSlots[slotId].flag))
{
- s[h++] = i;
- if (p == 0 && (gUnknown_085B62E4[z].var04 & gUnknown_085B6154[gUnknown_0203AB88->var1B[gUnknown_0203AB88->var1A_0]].var0C))
- p = i;
+ slotCandidates[numCandidates++] = i;
+ if (betSlotId == 0 && (sRouletteSlots[slotId].flag & sGridSelections[sRoulette->betSelection[sRoulette->curBallNum]].inSelectionFlags))
+ betSlotId = i;
}
- z = (z + 1) % 0xC;
+ slotId = (slotId + 1) % NUM_ROULETTE_SLOTS;
}
- if ((gUnknown_0203AB88->var03_0 + 1) & gUnknown_0203AB88->var02)
+ // Determine which identified slot the ball should be moved to
+ // The below slot ids are relative to the slot the ball got stuck on
+ if ((sRoulette->useTaillow + 1) & sRoulette->partySpeciesFlags)
{
- if (p && (rand & 0xFF) < 0xc0)
- sprite->data[7] = p;
+ // If the player has the corresponding pokemon in their party (HAS_SHROOMISH or HAS_TAILLOW),
+ // there's a 75% chance that the ball will be moved to a spot they bet on
+ // assuming it was one of the slots identified as a candidate
+ if (betSlotId && (rand % 256) < 192)
+ sprite->data[7] = betSlotId;
else
- sprite->data[7] = s[rand % h];
+ sprite->data[7] = slotCandidates[rand % numCandidates];
}
else
{
- sprite->data[7] = s[rand % h];
+ sprite->data[7] = slotCandidates[rand % numCandidates];
}
- sprite->callback = sub_8144168;
+ sprite->callback = SpriteCB_UnstickBall;
}
-static const u16 gUnknown_085B7B1A[] = {
+static const u16 sShroomishShadowAlphas[] = {
0x907,
0x808,
0x709,
@@ -4185,26 +4509,28 @@ static const u16 gUnknown_085B7B1A[] = {
0x010,
};
-static void sub_8144C70(struct Sprite *sprite)
+static void SpriteCB_ShroomishExit(struct Sprite *sprite)
{
+ // Delay for screen shaking, then exit left
if (sprite->data[1]++ >= sprite->data[3])
{
sprite->pos1.x -= 2;
if (sprite->pos1.x < -16)
{
- if (!gUnknown_0203AB88->var03_6)
- gUnknown_0203AB88->var03_6 = TRUE;
+ if (!sRoulette->ballUnstuck)
+ sRoulette->ballUnstuck = TRUE;
DestroySprite(sprite);
- gUnknown_0203AB88->var01 = 0;
- gUnknown_0203AB88->var34 = gUnknown_085B7B1A[0];
+ sRoulette->shroomishShadowTimer = 0;
+ sRoulette->shroomishShadowAlpha = sShroomishShadowAlphas[0];
}
}
}
-static void sub_8144CD0(struct Sprite *sprite)
+// Handles both the screen shake and ball shadow effect for when Shroomish unsticks the ball
+static void SpriteCB_ShroomishShakeScreen(struct Sprite *sprite)
{
- int p;
- u16 t[][4] = {
+ int screenShakeIdx;
+ u16 screenShakeOffsets[][4] = {
{-1, 0, 1, 0},
{-2, 0, 2, 0},
{-3, 0, 3, 0},
@@ -4214,92 +4540,99 @@ static void sub_8144CD0(struct Sprite *sprite)
{
if (sprite->data[1] & 1)
{
- gSpriteCoordOffsetY = t[sprite->data[2] / 2][sprite->data[7]];
- p = sprite->data[7] + 1;
- sprite->data[7] = p - ((p / 4) * 4);
+ // Shake screen
+ gSpriteCoordOffsetY = screenShakeOffsets[sprite->data[2] / 2][sprite->data[7]];
+ screenShakeIdx = sprite->data[7] + 1;
+ sprite->data[7] = screenShakeIdx - ((screenShakeIdx / 4) * 4);
}
+ // Flicker shadow
sprite->invisible ^= 1;
}
else
{
gSpriteCoordOffsetY = 0;
- gSprites[gUnknown_0203AB88->var3C[55]].animPaused = FALSE;
+ gSprites[sRoulette->spriteIds[SPR_CLEAR_MON]].animPaused = FALSE;
DestroySprite(sprite);
}
}
-static void sub_8144D94(struct Sprite *sprite)
+static void SpriteCB_ShroomishFall(struct Sprite *sprite)
{
- float t;
+ float timer;
sprite->data[1]++;
- t = sprite->data[1];
- sprite->pos2.y = t * 0.039f * t;
- gUnknown_0203AB88->var34 = gUnknown_085B7B1A[(gUnknown_0203AB88->var01 - 1) / 2];
- if (gUnknown_0203AB88->var01 < 19)
- gUnknown_0203AB88->var01++;
+ timer = sprite->data[1];
+ sprite->pos2.y = timer * 0.039f * timer;
+ sRoulette->shroomishShadowAlpha = sShroomishShadowAlphas[(sRoulette->shroomishShadowTimer - 1) / 2];
+ if (sRoulette->shroomishShadowTimer < ARRAY_COUNT(sShroomishShadowAlphas) * 2 - 1)
+ sRoulette->shroomishShadowTimer++;
if (sprite->data[1] > 60)
{
sprite->data[1] = 0;
- sprite->callback = sub_8144C70;
- gSprites[sprite->data[6]].callback = sub_8144C70;
- gSprites[sprite->data[6]].data[1] = -2;
- gSprites[sprite->data[5]].invisible = FALSE;
- gSprites[sprite->data[5]].callback = sub_8144CD0;
- m4aSongNumStart(SE_W070);
+ sprite->callback = SpriteCB_ShroomishExit;
+ gSprites[sprite->sMonShadowSpriteId].callback = SpriteCB_ShroomishExit;
+ gSprites[sprite->sMonShadowSpriteId].data[1] = -2;
+ gSprites[sprite->sBallShadowSpriteId].invisible = FALSE;
+ gSprites[sprite->sBallShadowSpriteId].callback = SpriteCB_ShroomishShakeScreen;
+ m4aSongNumStart(SE_M_STRENGTH);
}
}
-static void sub_8144E60(struct Sprite *sprite)
+static void SpriteCB_Shroomish(struct Sprite *sprite)
{
if (sprite->data[7] == 0)
{
- if (gUnknown_0203AB88->var38->data[0] == 0)
+ // Wait for the ball to be a specific angle (or its 180 degree opposite) specified by the table
+ // Once it is, reveal the shadow for Shroomish falling in
+ if (!sRoulette->ball->sStuckOnWheelLeft)
{
- if (gUnknown_0203AB88->var38->data[3] != gUnknown_085B6348[gUnknown_0203AB88->var04_0].var08)
+ if (sRoulette->ball->sBallAngle != sRouletteTables[sRoulette->tableId].shroomish.startAngle)
return;
}
else
{
- if (gUnknown_0203AB88->var38->data[3] != gUnknown_085B6348[gUnknown_0203AB88->var04_0].var08 + 180)
+ if (sRoulette->ball->sBallAngle != sRouletteTables[sRoulette->tableId].shroomish.startAngle + 180)
return;
}
sprite->invisible = FALSE;
sprite->data[7]++;
- m4aSongNumStart(SE_RU_HYUU);
- gUnknown_0203AB88->var01 = 1;
- gUnknown_0203AB88->var34 = gUnknown_085B7B1A[0];
+ m4aSongNumStart(SE_FALL);
+ sRoulette->shroomishShadowTimer = 1;
+ sRoulette->shroomishShadowAlpha = sShroomishShadowAlphas[0];
}
else
{
- gUnknown_0203AB88->var34 = gUnknown_085B7B1A[(gUnknown_0203AB88->var01 - 1) / 2];
- if (gUnknown_0203AB88->var01 < 19)
- gUnknown_0203AB88->var01++;
+ sRoulette->shroomishShadowAlpha = sShroomishShadowAlphas[(sRoulette->shroomishShadowTimer - 1) / 2];
+ if (sRoulette->shroomishShadowTimer < 19)
+ sRoulette->shroomishShadowTimer++;
- if (gUnknown_0203AB88->var38->data[0] == 0)
+ // Wait for the ball to be a specific angle (or its 180 degree opposite) specified by the table
+ // Once it is, have Shroomish begin to fall in
+ // On both tables this angle is 15 degrees off the "start" angle
+ if (!sRoulette->ball->sStuckOnWheelLeft)
{
- if (gUnknown_0203AB88->var38->data[3] != gUnknown_085B6348[gUnknown_0203AB88->var04_0].var0A)
+ if (sRoulette->ball->sBallAngle != sRouletteTables[sRoulette->tableId].shroomish.dropAngle)
return;
}
else
{
- if (gUnknown_0203AB88->var38->data[3] != gUnknown_085B6348[gUnknown_0203AB88->var04_0].var0A + 180)
+ if (sRoulette->ball->sBallAngle != sRouletteTables[sRoulette->tableId].shroomish.dropAngle + 180)
return;
}
- gSprites[sprite->data[4]].callback = sub_8144D94;
- gSprites[sprite->data[4]].invisible = FALSE;
+ gSprites[sprite->sMonSpriteId].callback = SpriteCB_ShroomishFall;
+ gSprites[sprite->sMonSpriteId].invisible = FALSE;
sprite->callback = &SpriteCallbackDummy;
sprite->data[7] = 0;
}
}
-static void sub_8144F94(struct Sprite *sprite)
+static void SpriteCB_TaillowShadow_Flash(struct Sprite *sprite)
{
sprite->invisible ^= 1;
}
-static void sub_8144FB0(struct Sprite *sprite)
+static void SpriteCB_Taillow_FlyAway(struct Sprite *sprite)
{
if (sprite->pos1.y > -16)
{
@@ -4310,14 +4643,14 @@ static void sub_8144FB0(struct Sprite *sprite)
sprite->callback = SpriteCallbackDummy;
sprite->invisible = TRUE;
sprite->animPaused = TRUE;
- m4aSongNumStop(SE_BASABASA);
+ m4aSongNumStop(SE_TAILLOW_WING_FLAP);
DestroySprite(sprite);
- FreeOamMatrix(gSprites[gUnknown_0203AB88->var3C[56]].oam.matrixNum);
- DestroySprite(&gSprites[gUnknown_0203AB88->var3C[56]]);
+ FreeOamMatrix(gSprites[sRoulette->spriteIds[SPR_CLEAR_MON_SHADOW_1]].oam.matrixNum);
+ DestroySprite(&gSprites[sRoulette->spriteIds[SPR_CLEAR_MON_SHADOW_1]]);
}
}
-static void sub_8145030(struct Sprite *sprite)
+static void SpriteCB_Taillow_PickUpBall(struct Sprite *sprite)
{
if (sprite->data[1] >= 0)
{
@@ -4341,18 +4674,18 @@ static void sub_8145030(struct Sprite *sprite)
}
else
{
- m4aSongNumStart(SE_RU_HYUU);
- StartSpriteAnim(sprite, gUnknown_0203AB88->var38->data[0] + 4);
- sprite->callback = sub_8144FB0;
- gSprites[sprite->data[6]].affineAnimPaused = FALSE;
+ m4aSongNumStart(SE_FALL);
+ StartSpriteAnim(sprite, sRoulette->ball->sStuckOnWheelLeft + 4);
+ sprite->callback = SpriteCB_Taillow_FlyAway;
+ gSprites[sprite->sMonShadowSpriteId].affineAnimPaused = FALSE;
}
}
}
-static void sub_81450D8(struct Sprite *sprite)
+static void SpriteCB_Taillow_FlyIn(struct Sprite *sprite)
{
- s8 t[2] = {-1, 1};
- s8 z[][2] = {
+ s8 xMoveOffsets[2] = {-1, 1};
+ s8 yMoveOffsets[][2] = {
{2, 0},
{2, 0},
{2, -1},
@@ -4365,7 +4698,7 @@ static void sub_81450D8(struct Sprite *sprite)
if (sprite->data[1]-- > 7)
{
- sprite->pos1.x += t[gUnknown_0203AB88->var38->data[0]] * 2;
+ sprite->pos1.x += xMoveOffsets[sRoulette->ball->sStuckOnWheelLeft] * 2;
if (IsSEPlaying())
{
s8 pan = -((116 - sprite->pos1.x) / 2);
@@ -4377,46 +4710,46 @@ static void sub_81450D8(struct Sprite *sprite)
{
if (sprite->data[1] >= 0)
{
- sprite->pos1.x += t[gUnknown_0203AB88->var38->data[0]] * z[7 - sprite->data[1]][0];
- sprite->pos1.y += z[7 - sprite->data[1]][1];
+ sprite->pos1.x += xMoveOffsets[sRoulette->ball->sStuckOnWheelLeft] * yMoveOffsets[7 - sprite->data[1]][0];
+ sprite->pos1.y += yMoveOffsets[7 - sprite->data[1]][1];
}
else
{
- m4aSongNumStartOrChange(SE_BASABASA);
- if (gUnknown_0203AB88->var38->data[0] == 0)
+ m4aSongNumStartOrChange(SE_TAILLOW_WING_FLAP);
+ if (sRoulette->ball->sStuckOnWheelLeft == 0)
PlayCry1(SPECIES_TAILLOW, 63);
else
PlayCry1(SPECIES_TAILLOW, -63);
- StartSpriteAnim(sprite, gUnknown_0203AB88->var38->data[0] + 2);
+ StartSpriteAnim(sprite, sRoulette->ball->sStuckOnWheelLeft + 2);
sprite->data[1] = 45;
- sprite->callback = sub_8145030;
+ sprite->callback = SpriteCB_Taillow_PickUpBall;
}
}
}
-static void sub_8145218(struct Sprite *sprite)
+static void SpriteCB_TaillowShadow_FlyIn(struct Sprite *sprite)
{
- s8 t[2] = {-1, 1};
+ s8 moveDir[2] = {-1, 1};
if (sprite->data[1]-- >= 0)
{
- sprite->pos1.x += t[gUnknown_0203AB88->var38->data[0]] * 2;
- gSprites[sprite->data[6]].invisible ^= 1;
+ sprite->pos1.x += moveDir[sRoulette->ball->sStuckOnWheelLeft] * 2;
+ gSprites[sprite->sMonShadowSpriteId].invisible ^= 1;
}
else
{
- sprite->callback = sub_8144F94;
+ sprite->callback = SpriteCB_TaillowShadow_Flash;
}
}
-static void sub_8145294(struct Sprite *sprite)
+static void SpriteCB_Taillow(struct Sprite *sprite)
{
- if (gUnknown_0203AB88->var38->data[0] == 0)
+ if (sRoulette->ball->sStuckOnWheelLeft == FALSE)
{
- if (gUnknown_0203AB88->var38->data[3] == gUnknown_085B6348[gUnknown_0203AB88->var04_0].var12 + 90)
+ if (sRoulette->ball->sBallAngle == sRouletteTables[sRoulette->tableId].taillow.rightStartAngle + 90)
{
- gSprites[sprite->data[6]].data[1] = 52;
- gSprites[sprite->data[4]].data[1] = 52;
+ gSprites[sprite->sMonShadowSpriteId].data[1] = 52;
+ gSprites[sprite->sMonSpriteId].data[1] = 52;
}
else
{
@@ -4425,17 +4758,17 @@ static void sub_8145294(struct Sprite *sprite)
}
else
{
- if (gUnknown_0203AB88->var38->data[3] == gUnknown_085B6348[gUnknown_0203AB88->var04_0].var14 + 270)
+ if (sRoulette->ball->sBallAngle == sRouletteTables[sRoulette->tableId].taillow.leftStartAngle + 270)
{
- gSprites[sprite->data[6]].data[1] = 46;
- gSprites[sprite->data[4]].data[1] = 46;
+ gSprites[sprite->sMonShadowSpriteId].data[1] = 46;
+ gSprites[sprite->sMonSpriteId].data[1] = 46;
}
else
{
return;
}
}
- gSprites[sprite->data[6]].callback = sub_8145218;
- gSprites[sprite->data[4]].callback = sub_81450D8;
- m4aSongNumStart(SE_RU_HYUU);
+ gSprites[sprite->sMonShadowSpriteId].callback = SpriteCB_TaillowShadow_FlyIn;
+ gSprites[sprite->sMonSpriteId].callback = SpriteCB_Taillow_FlyIn;
+ m4aSongNumStart(SE_FALL);
}
diff --git a/src/save.c b/src/save.c
index c19aff4d8..3ae2f6fd5 100644
--- a/src/save.c
+++ b/src/save.c
@@ -897,74 +897,78 @@ u32 TryWriteSpecialSaveSection(u8 sector, u8* src)
return SAVE_STATUS_OK;
}
-void sub_8153688(u8 taskId)
+#define tState data[0]
+#define tTimer data[1]
+#define tPartialSave data[2]
+
+void Task_LinkSave(u8 taskId)
{
- s16* taskData = gTasks[taskId].data;
+ s16* data = gTasks[taskId].data;
- switch (taskData[0])
+ switch (tState)
{
case 0:
gSoftResetDisabled = TRUE;
- taskData[0] = 1;
+ tState = 1;
break;
case 1:
- sub_800ADF8();
- taskData[0] = 2;
+ SetLinkStandbyCallback();
+ tState = 2;
break;
case 2:
if (IsLinkTaskFinished())
{
- if (taskData[2] == 0)
+ if (!tPartialSave)
save_serialize_map();
- taskData[0] = 3;
+ tState = 3;
}
break;
case 3:
- if (taskData[2] == 0)
+ if (!tPartialSave)
SetContinueGameWarpStatusToDynamicWarp();
sub_8153380();
- taskData[0] = 4;
+ tState = 4;
break;
case 4:
- if (++taskData[1] == 5)
+ if (++tTimer == 5)
{
- taskData[1] = 0;
- taskData[0] = 5;
+ tTimer = 0;
+ tState = 5;
}
break;
case 5:
if (sub_81533AC())
- taskData[0] = 6;
+ tState = 6;
else
- taskData[0] = 4;
+ tState = 4;
break;
case 6:
sub_81533E0();
- taskData[0] = 7;
+ tState = 7;
break;
case 7:
- if (taskData[2] == 0)
+ if (!tPartialSave)
ClearContinueGameWarpStatus2();
- sub_800ADF8();
- taskData[0] = 8;
+ SetLinkStandbyCallback();
+ tState = 8;
break;
case 8:
if (IsLinkTaskFinished())
{
sub_8153408();
- taskData[0] = 9;
+ tState = 9;
}
break;
case 9:
- sub_800ADF8();
- taskData[0] = 10;
+ SetLinkStandbyCallback();
+ tState = 10;
break;
case 10:
if (IsLinkTaskFinished())
- taskData[0]++;
+ tState++;
break;
case 11:
- if (++taskData[1] > 5)
+ if (++tTimer > 5)
{
gSoftResetDisabled = FALSE;
DestroyTask(taskId);
@@ -972,3 +976,7 @@ void sub_8153688(u8 taskId)
break;
}
}
+
+#undef tState
+#undef tTimer
+#undef tPartialSave
diff --git a/src/save_failed_screen.c b/src/save_failed_screen.c
index a2a2acc8d..7c824e82d 100644
--- a/src/save_failed_screen.c
+++ b/src/save_failed_screen.c
@@ -349,7 +349,7 @@ static void VBlankCB_UpdateClockGraphics(void)
gMain.oamBuffer[0] = sClockOamData;
gMain.oamBuffer[0].x = 112;
- gMain.oamBuffer[0].y = (CLOCK_WIN_TOP + 1) * 8;;
+ gMain.oamBuffer[0].y = (CLOCK_WIN_TOP + 1) * 8;
if (gSaveFailedClockInfo[CLOCK_RUNNING] != FALSE)
{
diff --git a/src/scrcmd.c b/src/scrcmd.c
index ad01791a9..d2ebcbb85 100644
--- a/src/scrcmd.c
+++ b/src/scrcmd.c
@@ -5,7 +5,7 @@
#include "clock.h"
#include "coins.h"
#include "contest.h"
-#include "contest_link_80F57C4.h"
+#include "contest_util.h"
#include "contest_painting.h"
#include "data.h"
#include "decoration.h"
@@ -38,7 +38,7 @@
#include "script.h"
#include "script_menu.h"
#include "script_movement.h"
-#include "script_pokemon_80F8.h"
+#include "script_pokemon_util.h"
#include "shop.h"
#include "slot_machine.h"
#include "sound.h"
@@ -788,8 +788,8 @@ bool8 ScrCmd_warphole(struct ScriptContext *ctx)
{
u8 mapGroup = ScriptReadByte(ctx);
u8 mapNum = ScriptReadByte(ctx);
- u16 x;
- u16 y;
+ s16 x;
+ s16 y;
PlayerGetDestCoords(&x, &y);
if (mapGroup == 0xFF && mapNum == 0xFF)
@@ -801,6 +801,7 @@ bool8 ScrCmd_warphole(struct ScriptContext *ctx)
return TRUE;
}
+// RS mossdeep gym warp, unused in Emerald
bool8 ScrCmd_warpteleport(struct ScriptContext *ctx)
{
u8 mapGroup = ScriptReadByte(ctx);
@@ -810,7 +811,7 @@ bool8 ScrCmd_warpteleport(struct ScriptContext *ctx)
u16 y = VarGet(ScriptReadHalfword(ctx));
SetWarpDestination(mapGroup, mapNum, warpId, x, y);
- DoTeleportWarp();
+ DoTeleportTileWarp();
ResetInitialPlayerAvatarState();
return TRUE;
}
@@ -1185,22 +1186,22 @@ bool8 ScrCmd_setobjectmovementtype(struct ScriptContext *ctx)
bool8 ScrCmd_createvobject(struct ScriptContext *ctx)
{
u8 graphicsId = ScriptReadByte(ctx);
- u8 v2 = ScriptReadByte(ctx);
+ u8 objectEventId = ScriptReadByte(ctx);
u16 x = VarGet(ScriptReadHalfword(ctx));
u32 y = VarGet(ScriptReadHalfword(ctx));
u8 elevation = ScriptReadByte(ctx);
u8 direction = ScriptReadByte(ctx);
- sprite_new(graphicsId, v2, x, y, elevation, direction);
+ CreateObjectSprite(graphicsId, objectEventId, x, y, elevation, direction);
return FALSE;
}
bool8 ScrCmd_turnvobject(struct ScriptContext *ctx)
{
- u8 v1 = ScriptReadByte(ctx);
+ u8 objectEventId = ScriptReadByte(ctx);
u8 direction = ScriptReadByte(ctx);
- sub_8097B78(v1, direction);
+ TurnObjectEventSprite(objectEventId, direction);
return FALSE;
}
@@ -1282,7 +1283,7 @@ bool8 ScrCmd_pokenavcall(struct ScriptContext *ctx)
if (msg == NULL)
msg = (const u8 *)ctx->data[0];
- sub_8098238(msg);
+ ShowPokenavFieldMessage(msg);
return FALSE;
}
@@ -1469,10 +1470,12 @@ bool8 ScrCmd_hidemonpic(struct ScriptContext *ctx)
bool8 ScrCmd_showcontestwinner(struct ScriptContext *ctx)
{
u8 contestWinnerId = ScriptReadByte(ctx);
- if (contestWinnerId)
+
+ // Don't save artist's painting yet
+ if (contestWinnerId != CONTEST_WINNER_ARTIST)
SetContestWinnerForPainting(contestWinnerId);
- ShowContestWinner();
+ ShowContestWinnerPainting();
ScriptContext1_Stop();
return TRUE;
}
@@ -1953,14 +1956,14 @@ bool8 ScrCmd_startcontest(struct ScriptContext *ctx)
bool8 ScrCmd_showcontestresults(struct ScriptContext *ctx)
{
- sub_80F8484();
+ ShowContestResults();
ScriptContext1_Stop();
return TRUE;
}
bool8 ScrCmd_contestlinktransfer(struct ScriptContext *ctx)
{
- sub_80F84C4(gSpecialVar_ContestCategory);
+ ContestLinkTransfer(gSpecialVar_ContestCategory);
ScriptContext1_Stop();
return TRUE;
}
diff --git a/src/script.c b/src/script.c
index 9ba1a7429..889c25765 100644
--- a/src/script.c
+++ b/src/script.c
@@ -26,9 +26,9 @@ void InitScriptContext(struct ScriptContext *ctx, void *cmdTable, void *cmdTable
s32 i;
ctx->mode = 0;
- ctx->scriptPtr = 0;
+ ctx->scriptPtr = NULL;
ctx->stackDepth = 0;
- ctx->nativePtr = 0;
+ ctx->nativePtr = NULL;
ctx->cmdTable = cmdTable;
ctx->cmdTableEnd = cmdTableEnd;
@@ -55,7 +55,7 @@ void SetupNativeScript(struct ScriptContext *ctx, bool8 (*ptr)(void))
void StopScript(struct ScriptContext *ctx)
{
ctx->mode = 0;
- ctx->scriptPtr = 0;
+ ctx->scriptPtr = NULL;
}
bool8 RunScriptCommand(struct ScriptContext *ctx)
diff --git a/src/script_menu.c b/src/script_menu.c
index 9ff63e357..2b135e301 100644
--- a/src/script_menu.c
+++ b/src/script_menu.c
@@ -110,7 +110,7 @@ static void DrawMultichoiceMenu(u8 left, u8 top, u8 multichoiceId, bool8 ignoreB
SetStandardWindowBorderStyle(windowId, 0);
PrintMenuTable(windowId, count, actions);
InitMenuInUpperLeftCornerPlaySoundWhenAPressed(windowId, count, cursorPos);
- schedule_bg_copy_tilemap_to_vram(0);
+ ScheduleBgCopyTilemapToVram(0);
InitMultichoiceCheckWrap(ignoreBPress, count, windowId, multichoiceId);
}
@@ -595,7 +595,7 @@ bool8 ScriptMenu_ShowPokemonPic(u16 species, u8 x, u8 y)
gSprites[spriteId].callback = SpriteCallbackDummy;
gSprites[spriteId].oam.priority = 0;
SetStandardWindowBorderStyle(gTasks[taskId].tWindowId, 1);
- schedule_bg_copy_tilemap_to_vram(0);
+ ScheduleBgCopyTilemapToVram(0);
return TRUE;
}
}
diff --git a/src/script_pokemon_util.c b/src/script_pokemon_util.c
new file mode 100755
index 000000000..a7b5433f0
--- /dev/null
+++ b/src/script_pokemon_util.c
@@ -0,0 +1,224 @@
+#include "global.h"
+#include "battle.h"
+#include "battle_gfx_sfx_util.h"
+#include "berry.h"
+#include "data.h"
+#include "daycare.h"
+#include "decompress.h"
+#include "event_data.h"
+#include "international_string_util.h"
+#include "link.h"
+#include "link_rfu.h"
+#include "main.h"
+#include "menu.h"
+#include "overworld.h"
+#include "palette.h"
+#include "party_menu.h"
+#include "pokedex.h"
+#include "pokemon.h"
+#include "random.h"
+#include "script.h"
+#include "sprite.h"
+#include "string_util.h"
+#include "tv.h"
+#include "constants/items.h"
+#include "constants/species.h"
+#include "constants/tv.h"
+#include "constants/battle_frontier.h"
+
+static void CB2_ReturnFromChooseHalfParty(void);
+static void CB2_ReturnFromChooseBattleFrontierParty(void);
+
+void HealPlayerParty(void)
+{
+ u8 i, j;
+ u8 ppBonuses;
+ u8 arg[4];
+
+ // restore HP.
+ for(i = 0; i < gPlayerPartyCount; i++)
+ {
+ u16 maxHP = GetMonData(&gPlayerParty[i], MON_DATA_MAX_HP);
+ arg[0] = maxHP;
+ arg[1] = maxHP >> 8;
+ SetMonData(&gPlayerParty[i], MON_DATA_HP, arg);
+ ppBonuses = GetMonData(&gPlayerParty[i], MON_DATA_PP_BONUSES);
+
+ // restore PP.
+ for(j = 0; j < MAX_MON_MOVES; j++)
+ {
+ arg[0] = CalculatePPWithBonus(GetMonData(&gPlayerParty[i], MON_DATA_MOVE1 + j), ppBonuses, j);
+ SetMonData(&gPlayerParty[i], MON_DATA_PP1 + j, arg);
+ }
+
+ // since status is u32, the four 0 assignments here are probably for safety to prevent undefined data from reaching SetMonData.
+ arg[0] = 0;
+ arg[1] = 0;
+ arg[2] = 0;
+ arg[3] = 0;
+ SetMonData(&gPlayerParty[i], MON_DATA_STATUS, arg);
+ }
+}
+
+u8 ScriptGiveMon(u16 species, u8 level, u16 item, u32 unused1, u32 unused2, u8 unused3)
+{
+ u16 nationalDexNum;
+ int sentToPc;
+ u8 heldItem[2];
+ struct Pokemon mon;
+
+ CreateMon(&mon, species, level, 32, 0, 0, OT_ID_PLAYER_ID, 0);
+ heldItem[0] = item;
+ heldItem[1] = item >> 8;
+ SetMonData(&mon, MON_DATA_HELD_ITEM, heldItem);
+ sentToPc = GiveMonToPlayer(&mon);
+ nationalDexNum = SpeciesToNationalPokedexNum(species);
+
+ switch(sentToPc)
+ {
+ case 0:
+ case 1:
+ GetSetPokedexFlag(nationalDexNum, FLAG_SET_SEEN);
+ GetSetPokedexFlag(nationalDexNum, FLAG_SET_CAUGHT);
+ break;
+ }
+ return sentToPc;
+}
+
+u8 ScriptGiveEgg(u16 species)
+{
+ struct Pokemon mon;
+ u8 isEgg;
+
+ CreateEgg(&mon, species, TRUE);
+ isEgg = TRUE;
+ SetMonData(&mon, MON_DATA_IS_EGG, &isEgg);
+
+ return GiveMonToPlayer(&mon);
+}
+
+void HasEnoughMonsForDoubleBattle(void)
+{
+ switch (GetMonsStateToDoubles())
+ {
+ case PLAYER_HAS_TWO_USABLE_MONS:
+ gSpecialVar_Result = PLAYER_HAS_TWO_USABLE_MONS;
+ break;
+ case PLAYER_HAS_ONE_MON:
+ gSpecialVar_Result = PLAYER_HAS_ONE_MON;
+ break;
+ case PLAYER_HAS_ONE_USABLE_MON:
+ gSpecialVar_Result = PLAYER_HAS_ONE_USABLE_MON;
+ break;
+ }
+}
+
+static bool8 CheckPartyMonHasHeldItem(u16 item)
+{
+ int i;
+
+ for(i = 0; i < PARTY_SIZE; i++)
+ {
+ u16 species = GetMonData(&gPlayerParty[i], MON_DATA_SPECIES2);
+ if (species != SPECIES_NONE && species != SPECIES_EGG && GetMonData(&gPlayerParty[i], MON_DATA_HELD_ITEM) == item)
+ return TRUE;
+ }
+ return FALSE;
+}
+
+bool8 DoesPartyHaveEnigmaBerry(void)
+{
+ bool8 hasItem = CheckPartyMonHasHeldItem(ITEM_ENIGMA_BERRY);
+ if (hasItem == TRUE)
+ GetBerryNameByBerryType(ItemIdToBerryType(ITEM_ENIGMA_BERRY), gStringVar1);
+
+ return hasItem;
+}
+
+void CreateScriptedWildMon(u16 species, u8 level, u16 item)
+{
+ u8 heldItem[2];
+
+ ZeroEnemyPartyMons();
+ CreateMon(&gEnemyParty[0], species, level, 32, 0, 0, OT_ID_PLAYER_ID, 0);
+ if (item)
+ {
+ heldItem[0] = item;
+ heldItem[1] = item >> 8;
+ SetMonData(&gEnemyParty[0], MON_DATA_HELD_ITEM, heldItem);
+ }
+}
+
+void ScriptSetMonMoveSlot(u8 monIndex, u16 move, u8 slot)
+{
+ if (monIndex > PARTY_SIZE)
+ monIndex = gPlayerPartyCount - 1;
+
+ SetMonMoveSlot(&gPlayerParty[monIndex], move, slot);
+}
+
+// Note: When control returns to the event script, gSpecialVar_Result will be
+// TRUE if the party selection was successful.
+void ChooseHalfPartyForBattle(void)
+{
+ gMain.savedCallback = CB2_ReturnFromChooseHalfParty;
+ VarSet(VAR_FRONTIER_FACILITY, FACILITY_MULTI_OR_EREADER);
+ InitChooseHalfPartyForBattle(0);
+}
+
+static void CB2_ReturnFromChooseHalfParty(void)
+{
+ switch (gSelectedOrderFromParty[0])
+ {
+ case 0:
+ gSpecialVar_Result = FALSE;
+ break;
+ default:
+ gSpecialVar_Result = TRUE;
+ break;
+ }
+
+ SetMainCallback2(CB2_ReturnToFieldContinueScriptPlayMapMusic);
+}
+
+void ChoosePartyForBattleFrontier(void)
+{
+ gMain.savedCallback = CB2_ReturnFromChooseBattleFrontierParty;
+ InitChooseHalfPartyForBattle(gSpecialVar_0x8004 + 1);
+}
+
+static void CB2_ReturnFromChooseBattleFrontierParty(void)
+{
+ switch (gSelectedOrderFromParty[0])
+ {
+ case 0:
+ gSpecialVar_Result = FALSE;
+ break;
+ default:
+ gSpecialVar_Result = TRUE;
+ break;
+ }
+
+ SetMainCallback2(CB2_ReturnToFieldContinueScriptPlayMapMusic);
+}
+
+void ReducePlayerPartyToSelectedMons(void)
+{
+ struct Pokemon party[MAX_FRONTIER_PARTY_SIZE];
+ int i;
+
+ CpuFill32(0, party, sizeof party);
+
+ // copy the selected pokemon according to the order.
+ for (i = 0; i < MAX_FRONTIER_PARTY_SIZE; i++)
+ if (gSelectedOrderFromParty[i]) // as long as the order keeps going (did the player select 1 mon? 2? 3?), do not stop
+ party[i] = gPlayerParty[gSelectedOrderFromParty[i] - 1]; // index is 0 based, not literal
+
+ CpuFill32(0, gPlayerParty, sizeof gPlayerParty);
+
+ // overwrite the first 4 with the order copied to.
+ for (i = 0; i < MAX_FRONTIER_PARTY_SIZE; i++)
+ gPlayerParty[i] = party[i];
+
+ CalculatePlayerPartyCount();
+}
diff --git a/src/script_pokemon_util_80F87D8.c b/src/script_pokemon_util_80F87D8.c
deleted file mode 100755
index 134004fd0..000000000
--- a/src/script_pokemon_util_80F87D8.c
+++ /dev/null
@@ -1,726 +0,0 @@
-#include "global.h"
-#include "battle.h"
-#include "battle_gfx_sfx_util.h"
-#include "berry.h"
-#include "contest.h"
-#include "contest_link_80F57C4.h"
-#include "contest_painting.h"
-#include "data.h"
-#include "daycare.h"
-#include "decompress.h"
-#include "event_data.h"
-#include "event_object_movement.h"
-#include "international_string_util.h"
-#include "link.h"
-#include "link_rfu.h"
-#include "main.h"
-#include "menu.h"
-#include "overworld.h"
-#include "palette.h"
-#include "party_menu.h"
-#include "pokedex.h"
-#include "pokemon.h"
-#include "random.h"
-#include "script.h"
-#include "script_menu.h"
-#include "sprite.h"
-#include "string_util.h"
-#include "tv.h"
-#include "constants/event_objects.h"
-#include "constants/items.h"
-#include "constants/species.h"
-#include "constants/tv.h"
-#include "constants/vars.h"
-#include "constants/battle_frontier.h"
-
-extern const u16 gObjectEventPalette8[];
-extern const u16 gObjectEventPalette17[];
-extern const u16 gObjectEventPalette33[];
-extern const u16 gObjectEventPalette34[];
-
-static const u8 gUnknown_0858D8EC[] = { 3, 4, 5, 14 };
-
-static void Task_ShowContestEntryMonPic(u8 taskId);
-static void Task_LinkContestWaitForConnection(u8 taskId);
-static void CB2_ReturnFromChooseHalfParty(void);
-static void CB2_ReturnFromChooseBattleFrontierParty(void);
-
-void SetContestTrainerGfxIds(void)
-{
- gSaveBlock1Ptr->vars[VAR_OBJ_GFX_ID_0 - VARS_START] = gContestMons[0].trainerGfxId;
- gSaveBlock1Ptr->vars[VAR_OBJ_GFX_ID_1 - VARS_START] = gContestMons[1].trainerGfxId;
- gSaveBlock1Ptr->vars[VAR_OBJ_GFX_ID_2 - VARS_START] = gContestMons[2].trainerGfxId;
-}
-
-// Unused
-void sub_80F8814(void)
-{
- u16 var1;
- u8 var0 = gSpecialVar_0x8005;
- switch (var0)
- {
- case 0:
- var1 = 3;
- break;
- case 1:
- var1 = 4;
- break;
- case 2:
- var1 = 5;
- break;
- default:
- var1 = 100;
- break;
- }
-
- gSpecialVar_0x8004 = var1;
-}
-
-void BufferContestTrainerAndMonNames(void)
-{
- BufferContestantTrainerName();
- BufferContestantMonNickname();
- BufferContestantMonSpecies();
-}
-
-// Unused
-void DoesContestCategoryHaveWinner(void)
-{
- int contestWinner;
- switch (gSpecialVar_ContestCategory)
- {
- case CONTEST_CATEGORY_COOL:
- contestWinner = 8;
- break;
- case CONTEST_CATEGORY_BEAUTY:
- contestWinner = 9;
- break;
- case CONTEST_CATEGORY_CUTE:
- contestWinner = 10;
- break;
- case CONTEST_CATEGORY_SMART:
- contestWinner = 11;
- break;
- case CONTEST_CATEGORY_TOUGH:
- default:
- contestWinner = 12;
- break;
- }
-
- if (gSaveBlock1Ptr->contestWinners[contestWinner].species == SPECIES_NONE)
- gSpecialVar_0x8004 = FALSE;
- else
- gSpecialVar_0x8004 = TRUE;
-}
-
-void SaveMuseumContestPainting(void)
-{
- sub_80DEDA8(0xFF);
-}
-
-void ShouldReadyContestArtist(void)
-{
- if (gContestFinalStandings[gContestPlayerMonIndex] == 0
- && gSpecialVar_ContestRank == CONTEST_RANK_MASTER
- && gUnknown_02039F08[gContestPlayerMonIndex] >= 800)
- {
- gSpecialVar_0x8004 = TRUE;
- }
- else
- {
- gSpecialVar_0x8004 = FALSE;
- }
-}
-
-u8 CountPlayerContestPaintings(void)
-{
- int i;
- u8 count = 0;
-
- for (i = 0; i < 5; i++)
- {
- if (gSaveBlock1Ptr->contestWinners[8 + i].species)
- count++;
- }
-
- return count;
-}
-
-// Unused
-void sub_80F8970(void)
-{
- s16 conditions[CONTESTANT_COUNT];
- int i, j;
- s16 condition;
- s8 var0;
- u8 var2;
- u8 r8;
- u8 r7;
-
- for (i = 0; i < CONTESTANT_COUNT; i++)
- conditions[i] = gContestMonConditions[i];
-
- for (i = 0; i < CONTESTANT_COUNT - 1; i++)
- {
- for (j = CONTESTANT_COUNT - 1; j > i; j--)
- {
- if (conditions[j - 1] < conditions[j])
- {
- int temp;
- SWAP(conditions[j], conditions[j - 1], temp)
- }
- }
- }
-
- condition = conditions[gSpecialVar_0x8006];
- var0 = 0;
- r8 = 0;
- for (i = 0; i < CONTESTANT_COUNT; i++)
- {
- if (conditions[i] == condition)
- {
- var0++;
- if (i == gSpecialVar_0x8006)
- r8 = var0;
- }
- }
-
- for (i = 0; i < CONTESTANT_COUNT; i++)
- {
- if (conditions[i] == condition)
- break;
- }
-
- r7 = i;
- var2 = r8;
- for (i = 0; i < CONTESTANT_COUNT; i++)
- {
- if (condition == gContestMonConditions[i])
- {
- if (var2 == 1)
- break;
- var2--;
- }
- }
-
- StringCopy(gStringVar1, gContestMons[i].nickname);
- StringCopy(gStringVar2, gContestMons[i].trainerName);
- sub_81DB5AC(gStringVar2);
-
- if (var0 == 1)
- gSpecialVar_0x8006 = r7;
- else if (r8 == var0)
- gSpecialVar_0x8006 = r7;
- else
- gSpecialVar_0x8006 = r7 + 4;
-}
-
-static void ShowContestWinnerCleanup(void)
-{
- SetMainCallback2(CB2_ReturnToFieldContinueScriptPlayMapMusic);
-}
-
-void ShowContestWinner(void)
-{
- /*
- if(gUnknown_0203856C)
- {
- sub_80AAF30();
- gBattleStruct->unk15DDF = 1;
- gBattleStruct->unk15DDE = sub_80B2C4C(254, 0);
- Contest_SaveWinner(3);
- gUnknown_0203856C = 0;
- }
- */
-
- SetMainCallback2(CB2_ContestPainting);
- gMain.savedCallback = ShowContestWinnerCleanup;
-}
-
-void SetLinkContestPlayerGfx(void)
-{
- int i;
-
- if (gLinkContestFlags & LINK_CONTEST_FLAG_IS_LINK)
- {
- for (i = 0; i < gNumLinkContestPlayers; i++)
- {
- int version = (u8)gLinkPlayers[i].version;
- if (version == VERSION_RUBY || version == VERSION_SAPPHIRE)
- {
- if (gLinkPlayers[i].gender == MALE)
- gContestMons[i].trainerGfxId = OBJ_EVENT_GFX_LINK_RS_BRENDAN;
- else
- gContestMons[i].trainerGfxId = OBJ_EVENT_GFX_LINK_RS_MAY;
- }
- }
-
- VarSet(VAR_OBJ_GFX_ID_0, gContestMons[0].trainerGfxId);
- VarSet(VAR_OBJ_GFX_ID_1, gContestMons[1].trainerGfxId);
- VarSet(VAR_OBJ_GFX_ID_2, gContestMons[2].trainerGfxId);
- VarSet(VAR_OBJ_GFX_ID_3, gContestMons[3].trainerGfxId);
- }
-}
-
-void LoadLinkContestPlayerPalettes(void)
-{
- int i;
- u8 objectEventId;
- int version;
- struct Sprite *sprite;
-
- gReservedSpritePaletteCount = 12;
- if (gLinkContestFlags & LINK_CONTEST_FLAG_IS_LINK)
- {
- for (i = 0; i < gNumLinkContestPlayers; i++)
- {
- objectEventId = GetObjectEventIdByLocalIdAndMap(gUnknown_0858D8EC[i], gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup);
- sprite = &gSprites[gObjectEvents[objectEventId].spriteId];
- sprite->oam.paletteNum = 6 + i;
- version = (u8)gLinkPlayers[i].version;
- if (version == VERSION_RUBY || version == VERSION_SAPPHIRE)
- {
- if (gLinkPlayers[i].gender == MALE)
- LoadPalette(gObjectEventPalette33, 0x160 + i * 0x10, 0x20);
- else
- LoadPalette(gObjectEventPalette34, 0x160 + i * 0x10, 0x20);
- }
- else
- {
- if (gLinkPlayers[i].gender == MALE)
- LoadPalette(gObjectEventPalette8, 0x160 + i * 0x10, 0x20);
- else
- LoadPalette(gObjectEventPalette17, 0x160 + i * 0x10, 0x20);
- }
- }
- }
-}
-
-u8 GiveMonArtistRibbon(void)
-{
- u8 hasArtistRibbon;
-
- hasArtistRibbon = GetMonData(&gPlayerParty[gContestMonPartyIndex], MON_DATA_ARTIST_RIBBON);
- if (!hasArtistRibbon
- && gContestFinalStandings[gContestPlayerMonIndex] == 0
- && gSpecialVar_ContestRank == CONTEST_RANK_MASTER
- && gUnknown_02039F08[gContestPlayerMonIndex] >= 800)
- {
- hasArtistRibbon = 1;
- SetMonData(&gPlayerParty[gContestMonPartyIndex], MON_DATA_ARTIST_RIBBON, &hasArtistRibbon);
- if (GetRibbonCount(&gPlayerParty[gContestMonPartyIndex]) > NUM_CUTIES_RIBBONS)
- TryPutSpotTheCutiesOnAir(&gPlayerParty[gContestMonPartyIndex], MON_DATA_ARTIST_RIBBON);
-
- return 1;
- }
- else
- {
- return 0;
- }
-}
-
-bool8 IsContestDebugActive(void)
-{
- return FALSE; // gUnknown_0203856C in pokeruby
-}
-
-void ShowContestEntryMonPic(void)
-{
- const struct CompressedSpritePalette *palette;
- u32 personality, otId;
- u16 species;
- u8 spriteId;
- u8 taskId;
- u8 left, top;
-
- if (FindTaskIdByFunc(Task_ShowContestEntryMonPic) == 0xFF)
- {
- AllocateMonSpritesGfx();
- left = 10;
- top = 3;
- species = gContestMons[gSpecialVar_0x8006].species;
- personality = gContestMons[gSpecialVar_0x8006].personality;
- otId = gContestMons[gSpecialVar_0x8006].otId;
- taskId = CreateTask(Task_ShowContestEntryMonPic, 0x50);
- gTasks[taskId].data[0] = 0;
- gTasks[taskId].data[1] = species;
- if (gSpecialVar_0x8006 == gContestPlayerMonIndex)
- HandleLoadSpecialPokePic_2(&gMonFrontPicTable[species], gMonSpritesGfxPtr->sprites[1], species, personality);
- else
- HandleLoadSpecialPokePic_DontHandleDeoxys(&gMonFrontPicTable[species], gMonSpritesGfxPtr->sprites[1], species, personality);
-
- palette = GetMonSpritePalStructFromOtIdPersonality(species, otId, personality);
- LoadCompressedSpritePalette(palette);
- SetMultiuseSpriteTemplateToPokemon(species, 1);
- gMultiuseSpriteTemplate.paletteTag = palette->tag;
- spriteId = CreateSprite(&gMultiuseSpriteTemplate, (left + 1) * 8 + 32, (top * 8) + 40, 0);
-
- if (gLinkContestFlags & LINK_CONTEST_FLAG_IS_LINK)
- {
- if (!(gLinkContestFlags & LINK_CONTEST_FLAG_HAS_RS_PLAYER))
- DoMonFrontSpriteAnimation(&gSprites[spriteId], species, FALSE, 0);
- }
- else
- {
- DoMonFrontSpriteAnimation(&gSprites[spriteId], species, FALSE, 0);
- }
-
- gTasks[taskId].data[2] = spriteId;
- gTasks[taskId].data[3] = left;
- gTasks[taskId].data[4] = top;
- gSprites[spriteId].callback = SpriteCallbackDummy;
- gSprites[spriteId].oam.priority = 0;
- }
-}
-
-void HideContestEntryMonPic(void)
-{
- u8 taskId = FindTaskIdByFunc(Task_ShowContestEntryMonPic);
- if (taskId != 0xFF)
- {
- gTasks[taskId].data[0]++;
- FreeMonSpritesGfx();
- }
-}
-
-static void Task_ShowContestEntryMonPic(u8 taskId)
-{
- struct Task *task = &gTasks[taskId];
- struct Sprite *sprite;
-
- switch(task->data[0])
- {
- case 0:
- task->data[0]++;
- break;
- case 1:
- task->data[5] = CreateWindowFromRect(10, 3, 8, 8);
- SetStandardWindowBorderStyle(task->data[5], 1);
- task->data[0]++;
- break;
- case 2:
- break;
- case 3:
- sprite = &gSprites[task->data[2]];
- FreeSpritePaletteByTag(GetSpritePaletteTagByPaletteNum(sprite->oam.paletteNum));
-
- if(sprite->oam.affineMode)
- FreeOamMatrix(sprite->oam.matrixNum);
-
- DestroySprite(sprite);
- task->data[0]++;
- break;
- case 4:
- ClearToTransparentAndRemoveWindow(gTasks[taskId].data[5]);
- DestroyTask(taskId);
- break;
- }
-}
-
-void ScriptGetMultiplayerId(void)
-{
- if ((gLinkContestFlags & LINK_CONTEST_FLAG_IS_LINK)
- && gNumLinkContestPlayers == CONTESTANT_COUNT
- && !(gLinkContestFlags & LINK_CONTEST_FLAG_IS_WIRELESS))
- gSpecialVar_Result = GetMultiplayerId();
- else
- gSpecialVar_Result = MAX_LINK_PLAYERS;
-}
-
-void ScriptRandom(void)
-{
- u16 random;
- u16 *scriptPtr;
-
- if (gLinkContestFlags & LINK_CONTEST_FLAG_IS_LINK)
- {
- gContestRngValue = ISO_RANDOMIZE1(gContestRngValue);
- random = gContestRngValue >> 16;
- scriptPtr = &gSpecialVar_Result;
- }
- else
- {
- scriptPtr = &gSpecialVar_Result;
- random = Random();
- }
- *scriptPtr = random % *scriptPtr;
-}
-
-u16 GetContestRand(void)
-{
- gContestRngValue = ISO_RANDOMIZE1(gContestRngValue);
- return gContestRngValue >> 16;
-}
-
-bool8 LinkContestWaitForConnection(void)
-{
- if (gLinkContestFlags & LINK_CONTEST_FLAG_IS_WIRELESS)
- {
- CreateTask(Task_LinkContestWaitForConnection, 5);
- return TRUE;
- }
- else
- {
- return FALSE;
- }
-}
-
-static void Task_LinkContestWaitForConnection(u8 taskId)
-{
- switch (gTasks[taskId].data[0])
- {
- case 0:
- if (IsLinkTaskFinished())
- {
- sub_800ADF8();
- gTasks[taskId].data[0]++;
- }
- break;
- case 1:
- gTasks[taskId].data[0]++;
- break;
- default:
- if (IsLinkTaskFinished() == 1)
- {
- EnableBothScriptContexts();
- DestroyTask(taskId);
- }
- break;
- }
-}
-
-void LinkContestTryShowWirelessIndicator(void)
-{
- if (gLinkContestFlags & LINK_CONTEST_FLAG_IS_WIRELESS)
- {
- if (gReceivedRemoteLinkPlayers)
- {
- LoadWirelessStatusIndicatorSpriteGfx();
- CreateWirelessStatusIndicatorSprite(8, 8);
- }
- }
-}
-
-void LinkContestTryHideWirelessIndicator(void)
-{
- if (gLinkContestFlags & LINK_CONTEST_FLAG_IS_WIRELESS)
- {
- if (gReceivedRemoteLinkPlayers)
- DestroyWirelessStatusIndicatorSprite();
- }
-}
-
-bool8 IsContestWithRSPlayer(void)
-{
- if (gLinkContestFlags & LINK_CONTEST_FLAG_HAS_RS_PLAYER)
- return TRUE;
- else
- return FALSE;
-}
-
-void ClearLinkContestFlags(void)
-{
- gLinkContestFlags = 0;
-}
-
-bool8 IsWirelessContest(void)
-{
- if (gLinkContestFlags & LINK_CONTEST_FLAG_IS_WIRELESS)
- return TRUE;
- else
- return FALSE;
-}
-
-void HealPlayerParty(void)
-{
- u8 i, j;
- u8 ppBonuses;
- u8 arg[4];
-
- // restore HP.
- for(i = 0; i < gPlayerPartyCount; i++)
- {
- u16 maxHP = GetMonData(&gPlayerParty[i], MON_DATA_MAX_HP);
- arg[0] = maxHP;
- arg[1] = maxHP >> 8;
- SetMonData(&gPlayerParty[i], MON_DATA_HP, arg);
- ppBonuses = GetMonData(&gPlayerParty[i], MON_DATA_PP_BONUSES);
-
- // restore PP.
- for(j = 0; j < MAX_MON_MOVES; j++)
- {
- arg[0] = CalculatePPWithBonus(GetMonData(&gPlayerParty[i], MON_DATA_MOVE1 + j), ppBonuses, j);
- SetMonData(&gPlayerParty[i], MON_DATA_PP1 + j, arg);
- }
-
- // since status is u32, the four 0 assignments here are probably for safety to prevent undefined data from reaching SetMonData.
- arg[0] = 0;
- arg[1] = 0;
- arg[2] = 0;
- arg[3] = 0;
- SetMonData(&gPlayerParty[i], MON_DATA_STATUS, arg);
- }
-}
-
-u8 ScriptGiveMon(u16 species, u8 level, u16 item, u32 unused1, u32 unused2, u8 unused3)
-{
- u16 nationalDexNum;
- int sentToPc;
- u8 heldItem[2];
- struct Pokemon mon;
-
- CreateMon(&mon, species, level, 32, 0, 0, OT_ID_PLAYER_ID, 0);
- heldItem[0] = item;
- heldItem[1] = item >> 8;
- SetMonData(&mon, MON_DATA_HELD_ITEM, heldItem);
- sentToPc = GiveMonToPlayer(&mon);
- nationalDexNum = SpeciesToNationalPokedexNum(species);
-
- switch(sentToPc)
- {
- case 0:
- case 1:
- GetSetPokedexFlag(nationalDexNum, FLAG_SET_SEEN);
- GetSetPokedexFlag(nationalDexNum, FLAG_SET_CAUGHT);
- break;
- }
- return sentToPc;
-}
-
-u8 ScriptGiveEgg(u16 species)
-{
- struct Pokemon mon;
- u8 isEgg;
-
- CreateEgg(&mon, species, TRUE);
- isEgg = TRUE;
- SetMonData(&mon, MON_DATA_IS_EGG, &isEgg);
-
- return GiveMonToPlayer(&mon);
-}
-
-void HasEnoughMonsForDoubleBattle(void)
-{
- switch (GetMonsStateToDoubles())
- {
- case PLAYER_HAS_TWO_USABLE_MONS:
- gSpecialVar_Result = PLAYER_HAS_TWO_USABLE_MONS;
- break;
- case PLAYER_HAS_ONE_MON:
- gSpecialVar_Result = PLAYER_HAS_ONE_MON;
- break;
- case PLAYER_HAS_ONE_USABLE_MON:
- gSpecialVar_Result = PLAYER_HAS_ONE_USABLE_MON;
- break;
- }
-}
-
-static bool8 CheckPartyMonHasHeldItem(u16 item)
-{
- int i;
-
- for(i = 0; i < PARTY_SIZE; i++)
- {
- u16 species = GetMonData(&gPlayerParty[i], MON_DATA_SPECIES2);
- if (species != SPECIES_NONE && species != SPECIES_EGG && GetMonData(&gPlayerParty[i], MON_DATA_HELD_ITEM) == item)
- return TRUE;
- }
- return FALSE;
-}
-
-bool8 DoesPartyHaveEnigmaBerry(void)
-{
- bool8 hasItem = CheckPartyMonHasHeldItem(ITEM_ENIGMA_BERRY);
- if (hasItem == TRUE)
- GetBerryNameByBerryType(ItemIdToBerryType(ITEM_ENIGMA_BERRY), gStringVar1);
-
- return hasItem;
-}
-
-void CreateScriptedWildMon(u16 species, u8 level, u16 item)
-{
- u8 heldItem[2];
-
- ZeroEnemyPartyMons();
- CreateMon(&gEnemyParty[0], species, level, 32, 0, 0, OT_ID_PLAYER_ID, 0);
- if (item)
- {
- heldItem[0] = item;
- heldItem[1] = item >> 8;
- SetMonData(&gEnemyParty[0], MON_DATA_HELD_ITEM, heldItem);
- }
-}
-
-void ScriptSetMonMoveSlot(u8 monIndex, u16 move, u8 slot)
-{
- if (monIndex > PARTY_SIZE)
- monIndex = gPlayerPartyCount - 1;
-
- SetMonMoveSlot(&gPlayerParty[monIndex], move, slot);
-}
-
-// Note: When control returns to the event script, gSpecialVar_Result will be
-// TRUE if the party selection was successful.
-void ChooseHalfPartyForBattle(void)
-{
- gMain.savedCallback = CB2_ReturnFromChooseHalfParty;
- VarSet(VAR_FRONTIER_FACILITY, FACILITY_MULTI_OR_EREADER);
- InitChooseHalfPartyForBattle(0);
-}
-
-static void CB2_ReturnFromChooseHalfParty(void)
-{
- switch (gSelectedOrderFromParty[0])
- {
- case 0:
- gSpecialVar_Result = FALSE;
- break;
- default:
- gSpecialVar_Result = TRUE;
- break;
- }
-
- SetMainCallback2(CB2_ReturnToFieldContinueScriptPlayMapMusic);
-}
-
-void ChoosePartyForBattleFrontier(void)
-{
- gMain.savedCallback = CB2_ReturnFromChooseBattleFrontierParty;
- InitChooseHalfPartyForBattle(gSpecialVar_0x8004 + 1);
-}
-
-static void CB2_ReturnFromChooseBattleFrontierParty(void)
-{
- switch (gSelectedOrderFromParty[0])
- {
- case 0:
- gSpecialVar_Result = FALSE;
- break;
- default:
- gSpecialVar_Result = TRUE;
- break;
- }
-
- SetMainCallback2(CB2_ReturnToFieldContinueScriptPlayMapMusic);
-}
-
-void ReducePlayerPartyToSelectedMons(void)
-{
- struct Pokemon party[MAX_FRONTIER_PARTY_SIZE];
- int i;
-
- CpuFill32(0, party, sizeof party);
-
- // copy the selected pokemon according to the order.
- for (i = 0; i < MAX_FRONTIER_PARTY_SIZE; i++)
- if (gSelectedOrderFromParty[i]) // as long as the order keeps going (did the player select 1 mon? 2? 3?), do not stop
- party[i] = gPlayerParty[gSelectedOrderFromParty[i] - 1]; // index is 0 based, not literal
-
- CpuFill32(0, gPlayerParty, sizeof gPlayerParty);
-
- // overwrite the first 4 with the order copied to.
- for (i = 0; i < MAX_FRONTIER_PARTY_SIZE; i++)
- gPlayerParty[i] = party[i];
-
- CalculatePlayerPartyCount();
-}
diff --git a/src/secret_base.c b/src/secret_base.c
index 24644d0ec..3f69e0419 100644
--- a/src/secret_base.c
+++ b/src/secret_base.c
@@ -37,6 +37,7 @@
#include "constants/event_bg.h"
#include "constants/decorations.h"
#include "constants/event_objects.h"
+#include "constants/field_specials.h"
#include "constants/items.h"
#include "constants/maps.h"
#include "constants/map_types.h"
@@ -947,7 +948,7 @@ static void FinalizeRegistryMenu(u8 taskId)
SetStandardWindowBorderStyle(data[6], 0);
data[5] = ListMenuInit(&gMultiuseListMenuTemplate, data[2], data[1]);
AddRegistryMenuScrollArrows(taskId);
- schedule_bg_copy_tilemap_to_vram(0);
+ ScheduleBgCopyTilemapToVram(0);
}
static void AddRegistryMenuScrollArrows(u8 taskId)
@@ -963,7 +964,7 @@ static void HandleRegistryMenuInput(u8 taskId)
data = gTasks[taskId].data;
input = ListMenu_ProcessInput(data[5]);
- ListMenuGetScrollAndRow(data[5], &data[2], &data[1]);
+ ListMenuGetScrollAndRow(data[5], (u16 *)&data[2], (u16 *)&data[1]);
switch (input)
{
case LIST_NOTHING_CHOSEN:
@@ -975,7 +976,7 @@ static void HandleRegistryMenuInput(u8 taskId)
ClearStdWindowAndFrame(data[6], 0);
ClearWindowTilemap(data[6]);
RemoveWindow(data[6]);
- schedule_bg_copy_tilemap_to_vram(0);
+ ScheduleBgCopyTilemapToVram(0);
free(sRegistryMenu);
GoToSecretBasePCRegisterMenu(taskId);
break;
@@ -998,7 +999,7 @@ static void ShowRegistryMenuActions(u8 taskId)
SetStandardWindowBorderStyle(data[7], 0);
PrintMenuTable(data[7], 2, sRegistryMenuActions);
InitMenuInUpperLeftCornerPlaySoundWhenAPressed(data[7], 2, 0);
- schedule_bg_copy_tilemap_to_vram(0);
+ ScheduleBgCopyTilemapToVram(0);
gTasks[taskId].func = HandleRegistryMenuActionsInput;
}
@@ -1028,7 +1029,7 @@ static void ShowRegistryMenuDeleteConfirmation(u8 taskId)
ClearWindowTilemap(data[6]);
ClearWindowTilemap(data[7]);
RemoveWindow(data[7]);
- schedule_bg_copy_tilemap_to_vram(0);
+ ScheduleBgCopyTilemapToVram(0);
GetSecretBaseName(gStringVar1, data[4]);
StringExpandPlaceholders(gStringVar4, gText_OkayToDeleteFromRegistry);
DisplayItemMessageOnField(taskId, gStringVar4, ShowRegistryMenuDeleteYesNo);
@@ -1044,10 +1045,10 @@ void DeleteRegistry_Yes_Callback(u8 taskId)
{
s16 *data = gTasks[taskId].data;
ClearDialogWindowAndFrame(0, 0);
- DestroyListMenuTask(data[5], &data[2], &data[1]);
+ DestroyListMenuTask((u8)data[5], (u16 *)&data[2], (u16 *)&data[1]);
gSaveBlock1Ptr->secretBases[data[4]].registryStatus = 0;
BuildRegistryMenuItems(taskId);
- sub_812225C(&data[2], &data[1], data[3], data[0]);
+ sub_812225C((u16 *)&data[2], (u16 *)&data[1], (u16)data[3], (u16)data[0]);
FinalizeRegistryMenu(taskId);
gTasks[taskId].func = HandleRegistryMenuInput;
}
@@ -1061,7 +1062,7 @@ static void DeleteRegistry_No(u8 taskId)
{
s16 *data = gTasks[taskId].data;
ClearDialogWindowAndFrame(0, 0);
- DestroyListMenuTask(data[5], &data[2], &data[1]);
+ DestroyListMenuTask((u8)data[5], (u16 *)&data[2], (u16 *)&data[1]);
FinalizeRegistryMenu(taskId);
gTasks[taskId].func = HandleRegistryMenuInput;
}
@@ -1073,7 +1074,7 @@ static void ReturnToMainRegistryMenu(u8 taskId)
ClearStdWindowAndFrame(data[7], 0);
ClearWindowTilemap(data[7]);
RemoveWindow(data[7]);
- schedule_bg_copy_tilemap_to_vram(0);
+ ScheduleBgCopyTilemapToVram(0);
gTasks[taskId].func = HandleRegistryMenuInput;
}
@@ -1120,7 +1121,7 @@ const u8 *GetSecretBaseTrainerLoseText(void)
void PrepSecretBaseBattleFlags(void)
{
- TryGainNewFanFromCounter(1);
+ TryGainNewFanFromCounter(FANCOUNTER_BATTLED_AT_BASE);
gTrainerBattleOpponent_A = TRAINER_SECRET_BASE;
gBattleTypeFlags = BATTLE_TYPE_TRAINER | BATTLE_TYPE_SECRET_BASE;
}
diff --git a/src/shop.c b/src/shop.c
index a4d1939cb..5cba2767d 100755
--- a/src/shop.c
+++ b/src/shop.c
@@ -416,7 +416,7 @@ static void CB2_BuyMenu(void)
RunTasks();
AnimateSprites();
BuildOamBuffer();
- do_scheduled_bg_tilemap_copies_to_vram();
+ DoScheduledBgTilemapCopiesToVram();
UpdatePaletteFade();
}
@@ -441,12 +441,12 @@ static void CB2_InitBuyMenu(void)
SetVBlankHBlankCallbacksToNull();
CpuFastFill(0, (void *)OAM, OAM_SIZE);
ScanlineEffect_Stop();
- reset_temp_tile_data_buffers();
+ ResetTempTileDataBuffers();
FreeAllSpritePalettes();
ResetPaletteFade();
ResetSpriteData();
ResetTasks();
- clear_scheduled_bg_copies_to_vram();
+ ClearScheduledBgCopiesToVram();
gShopDataPtr = AllocZeroed(sizeof(struct ShopData));
gShopDataPtr->scrollIndicatorsTaskId = 0xFF;
gShopDataPtr->itemSpriteIds[0] = 0xFF;
@@ -462,7 +462,7 @@ static void CB2_InitBuyMenu(void)
gMain.state++;
break;
case 1:
- if (!free_temp_tile_data_buffers_if_possible())
+ if (!FreeTempTileDataBuffersIfPossible())
gMain.state++;
break;
default:
@@ -673,7 +673,7 @@ static void BuyMenuInitBgs(void)
static void BuyMenuDecompressBgGraphics(void)
{
- decompress_and_copy_tile_data_to_vram(1, gBuyMenuFrame_Gfx, 0x3A0, 0x3E3, 0);
+ DecompressAndCopyTileDataToVram(1, gBuyMenuFrame_Gfx, 0x3A0, 0x3E3, 0);
LZDecompressWram(gBuyMenuFrame_Tilemap, gShopDataPtr->tilemapBuffers[0]);
LoadCompressedPalette(gMenuMoneyPal, 0xC0, 0x20);
}
@@ -697,7 +697,7 @@ static void BuyMenuPrint(u8 windowId, const u8 *text, u8 x, u8 y, s8 speed, u8 c
static void BuyMenuDisplayMessage(u8 taskId, const u8 *text, TaskFunc callback)
{
DisplayMessageAndContinueTask(taskId, 5, 10, 14, 1, GetPlayerTextSpeedDelay(), text, callback);
- schedule_bg_copy_tilemap_to_vram(0);
+ ScheduleBgCopyTilemapToVram(0);
}
static void BuyMenuDrawGraphics(void)
@@ -706,10 +706,10 @@ static void BuyMenuDrawGraphics(void)
BuyMenuCopyMenuBgToBg1TilemapBuffer();
AddMoneyLabelObject(19, 11);
PrintMoneyAmountInMoneyBoxWithBorder(0, 1, 13, GetMoney(&gSaveBlock1Ptr->money));
- schedule_bg_copy_tilemap_to_vram(0);
- schedule_bg_copy_tilemap_to_vram(1);
- schedule_bg_copy_tilemap_to_vram(2);
- schedule_bg_copy_tilemap_to_vram(3);
+ ScheduleBgCopyTilemapToVram(0);
+ ScheduleBgCopyTilemapToVram(1);
+ ScheduleBgCopyTilemapToVram(2);
+ ScheduleBgCopyTilemapToVram(3);
}
static void BuyMenuDrawMapGraphics(void)
@@ -796,15 +796,15 @@ static void BuyMenuCollectObjectEventData(void)
u8 r8 = 0;
GetXYCoordsOneStepInFrontOfPlayer(&facingX, &facingY);
- for (y = 0; y < 16; y++)
- gShopDataPtr->viewportObjects[y][OBJ_EVENT_ID] = 16;
+ for (y = 0; y < OBJECT_EVENTS_COUNT; y++)
+ gShopDataPtr->viewportObjects[y][OBJ_EVENT_ID] = OBJECT_EVENTS_COUNT;
for (y = 0; y < 5; y++)
{
for (x = 0; x < 7; x++)
{
u8 objEventId = GetObjectEventIdByXY(facingX - 4 + x, facingY - 2 + y);
- if (objEventId != 16)
+ if (objEventId != OBJECT_EVENTS_COUNT)
{
gShopDataPtr->viewportObjects[r8][OBJ_EVENT_ID] = objEventId;
gShopDataPtr->viewportObjects[r8][X_COORD] = x;
@@ -839,9 +839,9 @@ static void BuyMenuDrawObjectEvents(void)
u8 spriteId;
const struct ObjectEventGraphicsInfo *graphicsInfo;
- for (i = 0; i < 16; i++) // max objects?
+ for (i = 0; i < OBJECT_EVENTS_COUNT; i++)
{
- if (gShopDataPtr->viewportObjects[i][OBJ_EVENT_ID] == 16)
+ if (gShopDataPtr->viewportObjects[i][OBJ_EVENT_ID] == OBJECT_EVENTS_COUNT)
continue;
graphicsInfo = GetObjectEventGraphicsInfo(gObjectEvents[gShopDataPtr->viewportObjects[i][OBJ_EVENT_ID]].graphicsId);
@@ -990,7 +990,7 @@ static void Task_BuyHowManyDialogueInit(u8 taskId)
tItemCount = 1;
DrawStdFrameWithCustomTileAndPalette(4, FALSE, 1, 13);
BuyMenuPrintItemQuantityAndPrice(taskId);
- schedule_bg_copy_tilemap_to_vram(0);
+ ScheduleBgCopyTilemapToVram(0);
maxQuantity = GetMoney(&gSaveBlock1Ptr->money) / gShopDataPtr->totalCost;
@@ -1089,7 +1089,7 @@ static void BuyMenuSubtractMoney(u8 taskId)
{
IncrementGameStat(GAME_STAT_SHOPPED);
RemoveMoney(&gSaveBlock1Ptr->money, gShopDataPtr->totalCost);
- PlaySE(SE_REGI);
+ PlaySE(SE_SHOP);
PrintMoneyAmountInMoneyBox(0, GetMoney(&gSaveBlock1Ptr->money), 0);
if (gMartInfo.martType == MART_TYPE_NORMAL)
@@ -1137,7 +1137,7 @@ static void BuyMenuReturnToItemList(u8 taskId)
BuyMenuPrintCursor(tListTaskId, 1);
PutWindowTilemap(1);
PutWindowTilemap(2);
- schedule_bg_copy_tilemap_to_vram(0);
+ ScheduleBgCopyTilemapToVram(0);
BuyMenuAddScrollIndicatorArrows();
gTasks[taskId].func = Task_BuyMenu;
}
diff --git a/src/slot_machine.c b/src/slot_machine.c
index 8f117431a..9d19fc9a7 100644
--- a/src/slot_machine.c
+++ b/src/slot_machine.c
@@ -1,5 +1,4 @@
#include "global.h"
-#include "constants/songs.h"
#include "overworld.h"
#include "field_effect.h"
#include "random.h"
@@ -18,47 +17,225 @@
#include "bg.h"
#include "gpu_regs.h"
#include "coins.h"
+#include "strings.h"
#include "tv.h"
#include "text_window.h"
-#include "constants/rgb.h"
#include "main_menu.h"
#include "bg.h"
#include "window.h"
#include "constants/coins.h"
+#include "constants/rgb.h"
+#include "constants/slot_machine.h"
+#include "constants/songs.h"
-// Text
-extern const u8 gText_YouDontHaveThreeCoins[];
-extern const u8 gText_QuitTheGame[];
-extern const u8 gText_YouveGot9999Coins[];
-extern const u8 gText_YouveRunOutOfCoins[];
-extern const u8 gText_ReelTimeHelp[];
-
-enum
-{
- SLOT_MACHINE_TAG_7_RED,
- SLOT_MACHINE_TAG_7_BLUE,
- SLOT_MACHINE_TAG_AZURILL,
- SLOT_MACHINE_TAG_LOTAD,
- SLOT_MACHINE_TAG_CHERRY,
- SLOT_MACHINE_TAG_POWER,
- SLOT_MACHINE_TAG_REPLAY
-};
-
-enum
-{
- SLOT_MACHINE_MATCHED_1CHERRY,
- SLOT_MACHINE_MATCHED_2CHERRY,
- SLOT_MACHINE_MATCHED_REPLAY,
- SLOT_MACHINE_MATCHED_LOTAD,
- SLOT_MACHINE_MATCHED_AZURILL,
- SLOT_MACHINE_MATCHED_POWER,
- SLOT_MACHINE_MATCHED_777_MIXED,
- SLOT_MACHINE_MATCHED_777_RED,
- SLOT_MACHINE_MATCHED_777_BLUE,
- SLOT_MACHINE_MATCHED_NONE
-};
-
-struct SlotMachineEwramStruct
+#define SLOTMACHINE_GFX_TILES 233
+#define MAX_BET 3
+
+#define SYMBOLS_PER_REEL 21
+#define REEL_SYMBOL_HEIGHT 24
+
+// Lucky Flags
+#define LUCKY_BIAS_REPLAY (1 << 0)
+#define LUCKY_BIAS_CHERRY (1 << 1)
+#define LUCKY_BIAS_LOTAD (1 << 2)
+#define LUCKY_BIAS_AZURILL (1 << 3)
+#define LUCKY_BIAS_POWER (1 << 4)
+#define LUCKY_BIAS_REELTIME (1 << 5)
+#define LUCKY_BIAS_MIXED_777 (1 << 6)
+#define LUCKY_BIAS_777 (1 << 7)
+
+enum {
+ GFXTAG_7_RED,
+ GFXTAG_7_BLUE,
+ GFXTAG_AZURILL,
+ GFXTAG_LOTAD,
+ GFXTAG_CHERRY,
+ GFXTAG_POWER,
+ GFXTAG_REPLAY,
+ GFXTAG_NUM_0,
+ GFXTAG_NUM_1,
+ GFXTAG_NUM_2,
+ GFXTAG_NUM_3,
+ GFXTAG_NUM_4,
+ GFXTAG_NUM_5,
+ GFXTAG_NUM_6,
+ GFXTAG_NUM_7,
+ GFXTAG_NUM_8,
+ GFXTAG_NUM_9,
+ GFXTAG_REEL_BG,
+ GFXTAG_STOP,
+ GFXTAG_BONUS,
+ GFXTAG_BIG,
+ GFXTAG_REG,
+};
+
+#define GFXTAG_SYMBOLS_START (GFXTAG_7_RED)
+#define GFXTAG_NUMBERS_START (GFXTAG_NUM_0)
+
+enum {
+ PALTAG_REEL,
+ PALTAG_REEL_TIME_PIKACHU,
+ PALTAG_REEL_TIME_MISC,
+ PALTAG_REEL_TIME_MACHINE,
+ PALTAG_MISC,
+ PALTAG_EXPLOSION,
+ PALTAG_DIG_DISPLAY,
+ PALTAG_PIKA_AURA,
+};
+
+enum {
+ MATCHED_1CHERRY,
+ MATCHED_2CHERRY,
+ MATCHED_REPLAY,
+ MATCHED_LOTAD,
+ MATCHED_AZURILL,
+ MATCHED_POWER,
+ MATCHED_777_MIXED,
+ MATCHED_777_RED,
+ MATCHED_777_BLUE,
+ MATCHED_NONE,
+};
+
+enum {
+ MATCH_MIDDLE_ROW,
+ MATCH_TOP_ROW,
+ MATCH_BOTTOM_ROW,
+ MATCH_NWSE_DIAG,
+ MATCH_NESW_DIAG,
+ NUM_MATCH_LINES,
+};
+
+enum {
+ LEFT_REEL,
+ MIDDLE_REEL,
+ RIGHT_REEL,
+ NUM_REELS,
+};
+
+enum {
+ SLOT_ACTION_UNFADE,
+ SLOT_ACTION_WAIT_FADE,
+ SLOT_ACTION_READY_NEW_SPIN,
+ SLOT_ACTION_READY_NEW_RT_SPIN,
+ SLOT_ACTION_ASK_INSERT_BET,
+ SLOT_ACTION_BET_INPUT,
+ SLOT_ACTION_MSG_NEED_3_COINS,
+ SLOT_ACTION_WAIT_MSG_NEED_3_COINS,
+ SLOT_ACTION_WAIT_INFO_BOX,
+ SLOT_ACTION_START_SPIN,
+ SLOT_ACTION_START_RT_SPIN,
+ SLOT_ACTION_SET_LUCKY_SPINS,
+ SLOT_ACTION_AWAIT_REEL_STOP,
+ SLOT_ACTION_AWAIT_ALL_REELS_STOP,
+ SLOT_ACTION_CHECK_MATCHES,
+ SLOT_ACTION_WAIT_PAYOUT,
+ SLOT_ACTION_END_PAYOUT,
+ SLOT_ACTION_MATCHED_POWER,
+ SLOT_ACTION_WAIT_RT_ANIM,
+ SLOT_ACTION_RESET_BET_TILES,
+ SLOT_ACTION_NO_MATCHES,
+ SLOT_ACTION_ASK_QUIT,
+ SLOT_ACTION_HANDLE_QUIT_INPUT,
+ SLOT_ACTION_MSG_MAX_COINS,
+ SLOT_ACTION_WAIT_MSG_MAX_COINS,
+ SLOT_ACTION_MSG_NO_MORE_COINS,
+ SLOT_ACTION_WAIT_MSG_NO_MORE_COINS,
+ SLOT_ACTION_END,
+ SLOT_ACTION_FREE,
+};
+
+enum {
+ REEL_ACTION_STILL,
+ REEL_ACTION_SPIN,
+ REEL_ACTION_STOP,
+ REEL_ACTION_STOP_MOVE,
+ REEL_ACTION_STOP_SHAKE,
+};
+
+#define DIG_SPRITE_DUMMY {255, 0, 0}
+
+// Sprite template IDs for the digital display in the right panel
+enum {
+ DIG_SPRITE_REEL,
+ DIG_SPRITE_TIME,
+ DIG_SPRITE_INSERT,
+ DIG_SPRITE_WIN,
+ DIG_SPRITE_LOSE,
+ DIG_SPRITE_A_BUTTON,
+ DIG_SPRITE_SMOKE,
+ DIG_SPRITE_NUMBER,
+ DIG_SPRITE_POKE_BALL,
+ DIG_SPRITE_D_PAD,
+ DIG_SPRITE_STOP_S,
+ DIG_SPRITE_STOP_T,
+ DIG_SPRITE_STOP_O,
+ DIG_SPRITE_STOP_P,
+ DIG_SPRITE_BONUS_B,
+ DIG_SPRITE_BONUS_O,
+ DIG_SPRITE_BONUS_N,
+ DIG_SPRITE_BONUS_U,
+ DIG_SPRITE_BONUS_S,
+ DIG_SPRITE_BIG_B,
+ DIG_SPRITE_BIG_I,
+ DIG_SPRITE_BIG_G,
+ DIG_SPRITE_REG_R,
+ DIG_SPRITE_REG_E,
+ DIG_SPRITE_REG_G,
+ DIG_SPRITE_EMPTY,
+ NUM_DIG_DISPLAY_SPRITES
+};
+
+// IDs used by the digital display to set coords and callbacks for its sprites
+enum {
+ DIG_DISPINFO_INSERT,
+ DIG_DISPINFO_STOP_S,
+ DIG_DISPINFO_STOP_T,
+ DIG_DISPINFO_STOP_O,
+ DIG_DISPINFO_STOP_P,
+ DIG_DISPINFO_A_BUTTON_STOP,
+ DIG_DISPINFO_POKE_BALL_ROCKING,
+ DIG_DISPINFO_WIN,
+ DIG_DISPINFO_LOSE,
+ DIG_DISPINFO_SMOKE_NW,
+ DIG_DISPINFO_SMOKE_NE,
+ DIG_DISPINFO_SMOKE_SW,
+ DIG_DISPINFO_SMOKE_SE,
+ DIG_DISPINFO_REEL,
+ DIG_DISPINFO_TIME,
+ DIG_DISPINFO_NUMBER,
+ DIG_DISPINFO_DPAD,
+ DIG_DISPINFO_POKE_BALL_SHINING,
+ DIG_DISPINFO_REG_R,
+ DIG_DISPINFO_REG_E,
+ DIG_DISPINFO_REG_G,
+ DIG_DISPINFO_REG_BONUS_B,
+ DIG_DISPINFO_REG_BONUS_O,
+ DIG_DISPINFO_REG_BONUS_N,
+ DIG_DISPINFO_REG_BONUS_U,
+ DIG_DISPINFO_REG_BONUS_S,
+ DIG_DISPINFO_BIG_B,
+ DIG_DISPINFO_BIG_I,
+ DIG_DISPINFO_BIG_G,
+ DIG_DISPINFO_BIG_BONUS_B,
+ DIG_DISPINFO_BIG_BONUS_O,
+ DIG_DISPINFO_BIG_BONUS_N,
+ DIG_DISPINFO_BIG_BONUS_U,
+ DIG_DISPINFO_BIG_BONUS_S,
+ DIG_DISPINFO_A_BUTTON_START
+};
+
+// IDs for digital display "scenes", i.e. each of the screens it can show made up of sprites
+enum {
+ DIG_DISPLAY_INSERT_BET,
+ DIG_DISPLAY_STOP_REEL,
+ DIG_DISPLAY_WIN,
+ DIG_DISPLAY_LOSE,
+ DIG_DISPLAY_REEL_TIME,
+ DIG_DISPLAY_BONUS_REG,
+ DIG_DISPLAY_BONUS_BIG
+};
+
+struct SlotMachine
{
/*0x00*/ u8 state;
/*0x01*/ u8 machineId;
@@ -66,11 +243,11 @@ struct SlotMachineEwramStruct
/*0x03*/ u8 luckyGame;
/*0x04*/ u8 luckyFlags;
/*0x05*/ u8 reelTimeDraw;
- /*0x06*/ u8 luckySpinsLeft; // tentative
+ /*0x06*/ u8 isLuckySpin;
/*0x07*/ u8 biasTag;
/*0x08*/ u16 matchedSymbols;
- /*0x0A*/ u8 fairRollsLeft; // only happens if you win reeltime
- /*0x0B*/ u8 fairRollsUsed;
+ /*0x0A*/ u8 reelTimeSpinsLeft;
+ /*0x0B*/ u8 reelTimeSpinsUsed;
/*0x0C*/ s16 coins;
/*0x0E*/ s16 payout;
/*0x10*/ s16 netCoinLoss; // coins lost to machine (but never goes below 0)
@@ -79,26 +256,26 @@ struct SlotMachineEwramStruct
/*0x16*/ s16 reeltimePosition;
/*0x18*/ s16 currReel;
/*0x1A*/ s16 reelIncrement; // speed of reel
- /*0x1C*/ s16 reelPixelOffsets[3];
- /*0x22*/ u16 reelPixelOffsetsWhileStopping[3];
- /*0x28*/ s16 reelTagOffsets[3];
- /*0x2E*/ s16 reelExtraTurns[3];
- /*0x34*/ s16 winnerRows[3];
- /*0x3A*/ u8 slotReelTasks[3];
- /*0x3D*/ u8 unkTaskPointer3D;
- /*0x3E*/ u8 unkTaskPointer3E;
- /*0x3F*/ u8 reelTimeSprite3F;
- /*0x40*/ u8 unk40;
- /*0x41*/ u8 unk41;
- /*0x42*/ u8 unk42;
- /*0x43*/ u8 unk43;
- /*0x44*/ u8 unk44[5];
- /*0x49*/ u8 unk49[2];
- /*0x49*/ u8 unk4B[3];
- /*0x4E*/ u8 unk4E[2];
- /*0x50*/ u8 reelTimeSprites1[2];
- /*0x52*/ u8 reelTimeSprites2[2];
- /*0x54*/ u8 unk54[4];
+ /*0x1C*/ s16 reelPixelOffsets[NUM_REELS];
+ /*0x22*/ u16 reelPixelOffsetsWhileStopping[NUM_REELS];
+ /*0x28*/ s16 reelPositions[NUM_REELS];
+ /*0x2E*/ s16 reelExtraTurns[NUM_REELS];
+ /*0x34*/ s16 winnerRows[NUM_REELS];
+ /*0x3A*/ u8 slotReelTasks[NUM_REELS];
+ /*0x3D*/ u8 digDisplayTaskId;
+ /*0x3E*/ u8 pikaPowerBoltTaskId;
+ /*0x3F*/ u8 reelTimePikachuSpriteId;
+ /*0x40*/ u8 reelTimeNumberGapSpriteId;
+ /*0x41*/ u8 reelTimeExplosionSpriteId;
+ /*0x42*/ u8 reelTimeBrokenMachineSpriteId;
+ /*0x43*/ u8 reelTimeSmokeSpriteId;
+ /*0x44*/ u8 flashMatchLineSpriteIds[NUM_MATCH_LINES];
+ /*0x49*/ u8 reelTimeMachineSpriteIds[2];
+ /*0x49*/ u8 reelTimeNumberSpriteIds[3];
+ /*0x4E*/ u8 reelTimeShadowSpriteIds[2];
+ /*0x50*/ u8 reelTimeBoltSpriteIds[2];
+ /*0x52*/ u8 reelTimePikachuAuraSpriteIds[2];
+ /*0x54*/ u8 reelTimeDuckSpriteIds[4];
/*0x58*/ u16 win0h;
/*0x5a*/ u16 win0v;
/*0x5c*/ u16 winIn;
@@ -107,66 +284,62 @@ struct SlotMachineEwramStruct
/*0x64*/ MainCallback prevMainCb;
};
-struct UnkStruct1
+struct DigitalDisplaySprite
{
- /*0x00*/ u8 unk00;
- /*0x01*/ u8 unk01;
- /*0x02*/ s16 unk02;
+ /*0x00*/ u8 spriteTemplateId;
+ /*0x01*/ u8 dispInfoId;
+ /*0x02*/ s16 spriteId;
};
-#define SLOTMACHINE_GFX_TILES 233
-
static void CB2_SlotMachineSetup(void);
-static void CB2_SlotMachineLoop(void);
-static void PlaySlotMachine_Internal(u8 slotMachineIndex, MainCallback cb);
-static void SlotMachineDummyTask(u8 taskId);
-static void SlotMachineSetup_0_0(void);
-static void SlotMachineSetup_6_2(void);
-static void SlotMachineSetup_1_0(void);
-static void SlotMachineSetup_2_0(void);
-static void SlotMachineSetup_2_1(void);
-static void SlotMachineSetup_0_1(void);
-static void SlotMachineSetup_3_0(void);
-static void SlotMachineSetup_4_0(void);
-static void SlotMachineSetup_5_0(void);
-static void SlotMachineSetup_6_0(void);
-static void SlotMachineSetup_6_1(void);
-static void SlotMachineSetup_8_0(void);
-static void SlotMachineSetup_9_0(void);
-static void SlotMachineSetup_10_0(void);
-static void SlotMachineSetupGameplayTasks(void);
-static void GameplayTasks_Slots(void);
-static void sub_8104DA4(void);
-static void RunSlotActions(u8 taskId);
-static bool8 SlotAction_UnfadeScreen(struct Task *task);
-static bool8 SlotAction_WaitForUnfade(struct Task *task);
-static bool8 SlotAction_SetSlotMachineVars(struct Task *task);
-static bool8 SlotAction3(struct Task *task);
-static bool8 SlotAction4(struct Task *task);
-static bool8 SlotAction_AwaitPlayerInput(struct Task *task);
-static bool8 SlotAction_PrintYouDontHaveThreeCoins(struct Task *task);
-static bool8 SlotAction_ExitYouDontHaveThreeCoinsMessage(struct Task *task);
-static bool8 SlotAction_GivingInformation(struct Task *task);
-static bool8 SlotAction9(struct Task *task);
-static bool8 SlotAction10(struct Task *task);
-static bool8 SlotAction_SetLuckySpins(struct Task *task);
-static bool8 SlotAction_AwaitReelStop(struct Task *task);
-static bool8 SlotAction_WaitForAllReelsToStop(struct Task *task);
-static bool8 SlotAction_CheckMatches(struct Task *task);
-static bool8 SlotAction_WaitForPayoutToBeAwarded(struct Task *task);
-static bool8 SlotAction_EndOfRoll(struct Task *task);
-static bool8 SlotAction_MatchedPower(struct Task *task);
-static bool8 SlotAction18(struct Task *task);
-static bool8 SlotAction_Loop(struct Task *task);
-static bool8 SlotAction_NoMatches(struct Task *task);
-static bool8 SlotAction_PrintQuitTheGame(struct Task *task);
-static bool8 SlotAction_SeeIfPlayerQuits(struct Task *task);
-static bool8 SlotAction_PrintMessage_9999Coins(struct Task *task);
-static bool8 SlotAction_ExitMessage_9999Coins(struct Task *task);
-static bool8 SlotAction_PrintMessage_NoMoreCoins(struct Task *task);
-static bool8 SlotAction_ExitMessage_NoMoreCoins(struct Task *task);
-static bool8 SlotAction_EndGame(struct Task *task);
-static bool8 SlotAction_FreeDataStructures(struct Task *task);
+static void CB2_SlotMachine(void);
+static void PlaySlotMachine_Internal(u8, MainCallback);
+static void SlotMachineDummyTask(u8);
+static void SlotMachineSetup_InitBgsWindows(void);
+static void SlotMachineSetup_InitVRAM(void);
+static void SlotMachineSetup_InitOAM(void);
+static void SlotMachineSetup_InitGpuRegs(void);
+static void SlotMachineSetup_InitSlotMachineStruct(void);
+static void SlotMachineSetup_InitPalsSpritesTasks(void);
+static void SlotMachineSetup_InitTilemaps(void);
+static void SlotMachineSetup_LoadGfxAndTilemaps(void);
+static void SlotMachineSetup_InitVBlank(void);
+static void AllocDigitalDisplayGfx(void);
+static void SetDigitalDisplayImagePtrs(void);
+static void CreateSlotMachineSprites(void);
+static void CreateGameplayTasks(void);
+static void CreateSlotMachineTask(void);
+static void DestroyDigitalDisplayScene(void);
+static void Task_SlotMachine(u8);
+static bool8 SlotAction_UnfadeScreen(struct Task *);
+static bool8 SlotAction_WaitForUnfade(struct Task *);
+static bool8 SlotAction_ReadyNewSpin(struct Task *);
+static bool8 SlotAction_ReadyNewReelTimeSpin(struct Task *);
+static bool8 SlotAction_AskInsertBet(struct Task *);
+static bool8 SlotAction_HandleBetInput(struct Task *);
+static bool8 SlotAction_PrintMsg_Need3Coins(struct Task *);
+static bool8 SlotAction_WaitMsg_Need3Coins(struct Task *);
+static bool8 SlotAction_WaitForInfoBox(struct Task *);
+static bool8 SlotAction_StartSpin(struct Task *);
+static bool8 SlotAction_StartReelTimeSpin(struct Task *);
+static bool8 SlotAction_SetLuckySpins(struct Task *);
+static bool8 SlotAction_AwaitReelStop(struct Task *);
+static bool8 SlotAction_WaitForAllReelsToStop(struct Task *);
+static bool8 SlotAction_CheckMatches(struct Task *);
+static bool8 SlotAction_WaitForPayoutToBeAwarded(struct Task *);
+static bool8 SlotAction_EndPayout(struct Task *);
+static bool8 SlotAction_MatchedPower(struct Task *);
+static bool8 SlotAction_WaitReelTimeAnim(struct Task *);
+static bool8 SlotAction_ResetBetTiles(struct Task *);
+static bool8 SlotAction_NoMatches(struct Task *);
+static bool8 SlotAction_AskQuit(struct Task *);
+static bool8 SlotAction_HandleQuitInput(struct Task *);
+static bool8 SlotAction_PrintMsg_9999Coins(struct Task *);
+static bool8 SlotAction_WaitMsg_9999Coins(struct Task *);
+static bool8 SlotAction_PrintMsg_NoMoreCoins(struct Task *);
+static bool8 SlotAction_WaitMsg_NoMoreCoins(struct Task *);
+static bool8 SlotAction_EndGame(struct Task *);
+static bool8 SlotAction_FreeDataStructures(struct Task *);
static void DrawLuckyFlags(void);
static void SetLuckySpins(void);
static bool8 IsThisRoundLucky(void);
@@ -177,33 +350,33 @@ static void CheckMatch(void);
static void CheckMatch_CenterRow(void);
static void CheckMatch_TopAndBottom(void);
static void CheckMatch_Diagonals(void);
-static u8 GetMatchFromSymbolsInRow(u8 c1, u8 c2, u8 c3);
+static u8 GetMatchFromSymbols(u8, u8, u8);
static void AwardPayout(void);
-static void RunAwardPayoutActions(u8 taskId);
+static void RunAwardPayoutActions(u8);
static bool8 IsFinalTask_RunAwardPayoutActions(void);
-static bool8 AwardPayoutAction0(struct Task *task);
-static bool8 AwardPayoutAction_GivePayoutToPlayer(struct Task *task);
-static bool8 AwardPayoutAction_FreeTask(struct Task *task);
-static u8 GetNearbyTag_Quantized(u8 x, s16 y);
-static void GameplayTask_StopSlotReel(void);
-static void ReelTasks_SetUnkTaskData(u8 a0);
-static void sub_8102E1C(u8 a0);
-static bool8 IsSlotReelMoving(u8 a0);
-static void RunSlotReelActions(u8 taskId);
-static bool8 SlotReelAction_StayStill(struct Task *task);
-static bool8 SlotReelAction_Spin(struct Task *task);
-static bool8 SlotReelAction_DecideWhereToStop(struct Task *task);
-static bool8 SlotReelAction_MoveToStop(struct Task *task);
-static bool8 SlotReelAction_OscillatingStop(struct Task *task);
+static bool8 AwardPayoutAction0(struct Task *);
+static bool8 AwardPayoutAction_GivePayoutToPlayer(struct Task *);
+static bool8 AwardPayoutAction_FreeTask(struct Task *);
+static u8 GetTagAtRest(u8, s16);
+static void CreateSlotReelTasks(void);
+static void SpinSlotReel(u8);
+static void StopSlotReel(u8);
+static bool8 IsSlotReelMoving(u8);
+static void Task_RunSlotReelActions(u8);
+static bool8 SlotReelAction_StayStill(struct Task *);
+static bool8 SlotReelAction_Spin(struct Task *);
+static bool8 SlotReelAction_DecideWhereToStop(struct Task *);
+static bool8 SlotReelAction_MoveToStop(struct Task *);
+static bool8 SlotReelAction_OscillatingStop(struct Task *);
static bool8 DecideReelTurns_BiasTag_Reel1(void);
-static bool8 DecideReelTurns_BiasTag_Reel1_Bet1(u8 a0, u8 a1);
-static bool8 DecideReelTurns_BiasTag_Reel1_Bet2or3(u8 a0, u8 a1);
+static bool8 DecideReelTurns_BiasTag_Reel1_Bet1(u8, u8);
+static bool8 DecideReelTurns_BiasTag_Reel1_Bet2or3(u8, u8);
static bool8 DecideReelTurns_BiasTag_Reel2(void);
static bool8 DecideReelTurns_BiasTag_Reel2_Bet1or2(void);
static bool8 DecideReelTurns_BiasTag_Reel2_Bet3(void);
static bool8 DecideReelTurns_BiasTag_Reel3(void);
-static bool8 DecideReelTurns_BiasTag_Reel3_Bet1or2(u8 a0);
-static bool8 DecideReelTurns_BiasTag_Reel3_Bet3(u8 a0);
+static bool8 DecideReelTurns_BiasTag_Reel3_Bet1or2(u8);
+static bool8 DecideReelTurns_BiasTag_Reel3_Bet3(u8);
static void DecideReelTurns_NoBiasTag_Reel1(void);
static void DecideReelTurns_NoBiasTag_Reel2(void);
static void DecideReelTurns_NoBiasTag_Reel2_Bet1(void);
@@ -213,243 +386,238 @@ static void DecideReelTurns_NoBiasTag_Reel3(void);
static void DecideReelTurns_NoBiasTag_Reel3_Bet1(void);
static void DecideReelTurns_NoBiasTag_Reel3_Bet2(void);
static void DecideReelTurns_NoBiasTag_Reel3_Bet3(void);
-static void sub_8103C14(u8 a0);
-static void sub_8103C48(u8 taskId);
-static void LoadBetTiles(u8 a0);
-static void sub_8103C78(struct Task *task, u8 taskId);
-static void sub_8103CAC(struct Task *task, u8 taskId);
-static void sub_8103CC8(struct Task *task, u8 taskId);
-static void sub_8103D8C(u8 a0);
-static void sub_8103DC8(void);
-static void sub_8103E04(u8 a0);
-static bool8 sub_8103E38(void);
-static bool8 sub_8103E7C(void);
-static bool8 sub_8103EAC(u8 spriteId);
-static void sub_8103EE4(struct Sprite *sprite);
-static void sub_8103F70(void);
-static bool8 sub_8103FA0(void);
-static void sub_8103FE8_(u8 taskId);
-static void GameplayTask_PikaPower(void);
-static void DisplayPikaPower(u8 pikaPower);
-static bool8 sub_81040C8(void);
-static void sub_81040E8(u8 taskId);
-static void nullsub_68(struct Task *task);
-static void sub_810411C(struct Task *task);
-static void sub_8104144(struct Task *task);
-static void sub_81041AC(struct Task *task);
-static void ClearTaskDataFields_2orHigher(struct Task *task);
-static void sub_810423C(u8 pikaPower);
-static void BeginReeltime(void);
-static bool8 IsFinalTask_RunReelTimeActions(void);
-static void RunReeltimeActions(u8 taskId);
-static void ReeltimeAction0(struct Task *task);
-static void ReeltimeAction1(struct Task *task);
-static void ReeltimeAction2(struct Task *task);
-static void ReeltimeAction3(struct Task *task);
-static void ReeltimeAction4(struct Task *task);
-static void ReeltimeAction5(struct Task *task);
-static void ReeltimeAction6(struct Task *task);
-static void ReelTimeAction_LandOnOutcome(struct Task *task);
-static void ReeltimeAction8(struct Task *task);
-static void ReeltimeAction9(struct Task *task);
-static void ReeltimeAction10(struct Task *task);
-static void ReeltimeAction11(struct Task *task);
-static void ReeltimeAction12(struct Task *task);
-static void ReeltimeAction13(struct Task *task);
-static void ReeltimeAction14(struct Task *task);
-static void ReeltimeAction15(struct Task *task);
-static void ReeltimeAction16(struct Task *task);
-static void ReeltimeAction17(struct Task *task);
-static void sub_8104A40(s16 a0, s16 a1);
-static void sub_8104A88(s16 a0);
-static void OpenInfoBox(u8 a0);
+static void PressStopReelButton(u8);
+static void Task_PressStopReelButton(u8);
+static void LightenBetTiles(u8);
+static void StopReelButton_Press(struct Task *, u8);
+static void StopReelButton_Wait(struct Task *, u8);
+static void StopReelButton_Unpress(struct Task *, u8);
+static void DarkenBetTiles(u8);
+static void CreateInvisibleFlashMatchLineSprites(void);
+static void FlashMatchLine(u8);
+static bool8 IsMatchLineDoneFlashingBeforePayout(void);
+static bool8 TryStopMatchLinesFlashing(void);
+static bool8 TryStopMatchLineFlashing(u8);
+static void SpriteCB_FlashMatchingLines(struct Sprite *);
+static void FlashSlotMachineLights(void);
+static bool8 TryStopSlotMachineLights(void);
+static void Task_FlashSlotMachineLights(u8);
+static void CreatePikaPowerBoltTask(void);
+static void AddPikaPowerBolt(u8);
+static bool8 IsPikaPowerBoltAnimating(void);
+static void Task_CreatePikaPowerBolt(u8);
+static void PikaPowerBolt_Idle(struct Task *);
+static void PikaPowerBolt_AddBolt(struct Task *);
+static void PikaPowerBolt_WaitAnim(struct Task *);
+static void PikaPowerBolt_ClearAll(struct Task *);
+static void ResetPikaPowerBoltTask(struct Task *);
+static void LoadPikaPowerMeter(u8 );
+static void BeginReelTime(void);
+static bool8 IsReelTimeTaskDone(void);
+static void Task_ReelTime(u8 );
+static void ReelTime_Init(struct Task *);
+static void ReelTime_WindowEnter(struct Task *);
+static void ReelTime_WaitStartPikachu(struct Task *);
+static void ReelTime_PikachuSpeedUp1(struct Task *);
+static void ReelTime_PikachuSpeedUp2(struct Task *);
+static void ReelTime_WaitReel(struct Task *);
+static void ReelTime_CheckExplode(struct Task *);
+static void ReelTime_LandOnOutcome(struct Task *);
+static void ReelTime_PikachuReact(struct Task *);
+static void ReelTime_WaitClearPikaPower(struct Task *);
+static void ReelTime_CloseWindow(struct Task *);
+static void ReelTime_DestroySprites(struct Task *);
+static void ReelTime_SetReelIncrement(struct Task *);
+static void ReelTime_EndSuccess(struct Task *);
+static void ReelTime_ExplodeMachine(struct Task *);
+static void ReelTime_WaitExplode(struct Task *);
+static void ReelTime_WaitSmoke(struct Task *);
+static void ReelTime_EndFailure(struct Task *);
+static void LoadReelTimeWindowTilemap(s16, s16);
+static void ClearReelTimeWindowTilemap(s16);
+static void OpenInfoBox(u8);
static bool8 IsInfoBoxClosed(void);
-static void RunInfoBoxActions(u8 taskId);
-static void InfoBox_FadeIn(struct Task *task);
-static void InfoBox_WaitForFade(struct Task *task);
-static void InfoBox_8104B80(struct Task *task);
-static void InfoBox_AwaitPlayerInput(struct Task *task);
-static void InfoBox_AddText(struct Task *task);
-static void InfoBox_8104BFC(struct Task *task);
-static void InfoBox_812DE14(struct Task *task);
-static void InfoBox_812DE30(struct Task *task);
-static void InfoBox_FreeTask(struct Task *task);
-static void sub_8104C5C(void);
-static void sub_8104CAC(u8 arg0);
-static bool8 sub_8104E18(void);
-static void nullsub_69(struct Task *task);
-static void sub_8104E74_(u8 taskId);
-static void sub_8104EA8(void);
-static void sub_8104F8C(void);
-static void sub_8104FF4(s16 x, s16 y, u8 a2, s16 a3);
-static void sub_81050C4(void);
-static void sub_8105100(void);
-static void sub_810514C(void);
-static void sub_81051C0(void);
-static void sub_8105284_(void);
-static void sub_81052EC(void);
-static void sub_81053A0(void);
-static void sub_810545C(void);
-static void sub_81054B8(void);
-static void sub_8105524(void);
-static void sub_8105554(void);
-static void CreateReelTimeSprites1(void);
-static void sub_8105688(s16 a0);
-static void sub_81056C0(void);
-static void CreateReelTimeSprite2(void);
-static void sub_81057E8(s16 a0);
-static void sub_8105804(void);
-static void sub_8105854(void);
-static void sub_81058A0(void);
-static void sub_81058C4(void);
-static void sub_81059B8(void);
-static void sub_81059E8(void);
-static bool8 sub_8105ACC(void);
-static void sub_8105AEC(void);
-static u8 sub_8105B1C(s16 x, s16 y);
-static void sub_8105B88(u8 spriteId);
-static u8 sub_8105BF8(u8 templateIdx, void (*callback)(struct Sprite*), s16 x, s16 y, s16 a4);
-static void sub_81063C0(void);
-static void sub_8106404(void);
-static void sub_8106448(void);
-static void sub_81064B8(void);
-static void sub_81065A8(s16 arg0, u16 arg1, u16 arg2, u16 arg3, u16 arg4);
-static void sub_81065DC(void);
-static void sub_812F958(void);
-static void sub_812F968(void);
-static void LoadSlotMachineWheelOverlay(void);
-static u8 sub_8105BB4(u8 templateIdx, u8 cbAndCoordsIdx, s16 a2);
-static void sub_8105C64(struct Sprite *sprite);
-static void sub_8105F54(struct Sprite *sprite);
-static void sub_8105F9C(struct Sprite *sprite);
-static void sub_8105EB4(struct Sprite *sprite);
-static void sub_8105C6C(struct Sprite *sprite);
-static void sub_8105CF0(struct Sprite *sprite);
-static void sub_8105D08(struct Sprite *sprite);
-static void sub_8105D20(struct Sprite *sprite);
-static void sub_8105D3C(struct Sprite *sprite);
-static void sub_8105DA4(struct Sprite *sprite);
-static void sub_8105E08(struct Sprite *sprite);
-static void sub_8106058(struct Sprite *sprite);
-static void sub_81060FC(struct Sprite *sprite);
-static void sub_81061C8(struct Sprite *sprite);
-static void sub_8106230(struct Sprite *sprite);
-static void sub_810639C(void);
-static void sub_8106364(void);
-static void sub_8106370(void);
-static void nullsub_70(void);
-static void sub_8104F18(struct Sprite *sprite);
-static void sub_810506C(struct Sprite *sprite);
-static void sub_8105170(struct Sprite *sprite);
-static void sub_810535C(struct Sprite *sprite);
-static void sub_810562C(struct Sprite *sprite);
-static void sub_8105784(struct Sprite *sprite);
-static void sub_8105894(struct Sprite *sprite);
-static void sub_810594C(struct Sprite *sprite);
-static void sub_8105A38(struct Sprite *sprite);
-static void sub_8105B70(struct Sprite *sprite);
+static void RunInfoBoxActions(u8 );
+static void InfoBox_FadeIn(struct Task *);
+static void InfoBox_WaitForFade(struct Task *);
+static void InfoBox_DrawWindow(struct Task *);
+static void InfoBox_AwaitPlayerInput(struct Task *);
+static void InfoBox_AddText(struct Task *);
+static void InfoBox_LoadPikaPowerMeter(struct Task *);
+static void InfoBox_LoadSlotMachineTilemap(struct Task *);
+static void InfoBox_CreateDigitalDisplay(struct Task *);
+static void InfoBox_FreeTask(struct Task *);
+static void CreateDigitalDisplayTask(void);
+static void CreateDigitalDisplayScene(u8 );
+static bool8 IsDigitalDisplayAnimFinished(void);
+static void DigitalDisplay_Idle(struct Task *);
+static void Task_DigitalDisplay(u8);
+static void CreateReelSymbolSprites(void);
+static void CreateCreditPayoutNumberSprites(void);
+static void CreateCoinNumberSprite(s16, s16, u8, s16);
+static void CreateReelBackgroundSprite(void);
+static void CreateReelTimePikachuSprite(void);
+static void DestroyReelTimePikachuSprite(void);
+static void CreateReelTimeMachineSprites(void);
+static void CreateBrokenReelTimeMachineSprite(void);
+static void CreateReelTimeNumberSprites(void);
+static void CreateReelTimeShadowSprites(void);
+static void CreateReelTimeNumberGapSprite(void);
+static void DestroyReelTimeMachineSprites(void);
+static void DestroyReelTimeShadowSprites(void);
+static void DestroyBrokenReelTimeMachineSprite(void);
+static void CreateReelTimeBoltSprites(void);
+static void SetReelTimeBoltDelay(s16);
+static void DestroyReelTimeBoltSprites(void);
+static void CreateReelTimePikachuAuraSprites(void);
+static void SetReelTimePikachuAuraFlashDelay(s16);
+static void DestroyReelTimePikachuAuraSprites(void);
+static void CreateReelTimeExplosionSprite(void);
+static void DestroyReelTimeExplosionSprite(void);
+static void CreateReelTimeDuckSprites(void);
+static void DestroyReelTimeDuckSprites(void);
+static void CreateReelTimeSmokeSprite(void);
+static bool8 IsReelTimeSmokeAnimFinished(void);
+static void DestroyReelTimeSmokeSprite(void);
+static u8 CreatePikaPowerBoltSprite(s16, s16);
+static void DestroyPikaPowerBoltSprite(u8);
+static u8 CreateDigitalDisplaySprite(u8, void (*callback)(struct Sprite*), s16, s16, s16);
+static void LoadSlotMachineGfx(void);
+static void LoadReelBackground(void);
+static void LoadMenuGfx(void);
+static void LoadMenuAndReelOverlayTilemaps(void);
+static void SetReelButtonTilemap(s16, u16, u16, u16, u16);
+static void LoadInfoBoxTilemap(void);
+static void LoadSlotMachineMenuTilemap(void);
+static void LoadSlotMachineReelOverlay(void);
+static u8 CreateStdDigitalDisplaySprite(u8, u8, s16);
+static void SpriteCB_DigitalDisplay_Static(struct Sprite *);
+static void SpriteCB_DigitalDisplay_Stop(struct Sprite *);
+static void SpriteCB_DigitalDisplay_AButtonStop(struct Sprite *);
+static void SpriteCB_DigitalDisplay_PokeballRocking(struct Sprite *);
+static void SpriteCB_DigitalDisplay_Smoke(struct Sprite *);
+static void SpriteCB_DigitalDisplay_SmokeNE(struct Sprite *);
+static void SpriteCB_DigitalDisplay_SmokeSW(struct Sprite *);
+static void SpriteCB_DigitalDisplay_SmokeSE(struct Sprite *);
+static void SpriteCB_DigitalDisplay_Reel(struct Sprite *);
+static void SpriteCB_DigitalDisplay_Time(struct Sprite *);
+static void SpriteCB_DigitalDisplay_ReelTimeNumber(struct Sprite *);
+static void SpriteCB_DigitalDisplay_PokeballShining(struct Sprite *);
+static void SpriteCB_DigitalDisplay_RegBonus(struct Sprite *);
+static void SpriteCB_DigitalDisplay_BigBonus(struct Sprite *);
+static void SpriteCB_DigitalDisplay_AButtonStart(struct Sprite *);
+static void EndDigitalDisplayScene_InsertBet(void);
+static void EndDigitalDisplayScene_StopReel(void);
+static void EndDigitalDisplayScene_Win(void);
+static void EndDigitalDisplayScene_Dummy(void);
+static void SpriteCB_ReelSymbol(struct Sprite *);
+static void SpriteCB_CoinNumber(struct Sprite *);
+static void SpriteCB_ReelTimePikachu(struct Sprite *);
+static void SpriteCB_ReelTimeNumbers(struct Sprite *);
+static void SpriteCB_ReelTimeBolt(struct Sprite *);
+static void SpriteCB_ReelTimePikachuAura(struct Sprite *);
+static void SpriteCB_ReelTimeExplosion(struct Sprite *);
+static void SpriteCB_ReelTimeDuck(struct Sprite *);
+static void SpriteCB_ReelTimeSmoke(struct Sprite *);
+static void SpriteCB_PikaPowerBolt(struct Sprite *);
// Ewram variables
-static EWRAM_DATA u16 *sUnknown_0203AAC8 = NULL;
+static EWRAM_DATA u16 *sMenuGfx = NULL;
static EWRAM_DATA u16 *sSelectedPikaPowerTile = NULL;
-static EWRAM_DATA u16 *sUnknown_0203AAD0 = NULL;
-static EWRAM_DATA u8 *sUnknown_0203AAD4 = NULL;
-static EWRAM_DATA u8 *sUnknown_0203AAD8 = NULL;
-static EWRAM_DATA u16 *sUnknown_0203AADC = NULL;
-static EWRAM_DATA u8 *sUnknown_0203AAE0 = NULL;
-static EWRAM_DATA struct SpriteFrameImage *sUnknown_0203AAE4 = NULL;
-static EWRAM_DATA struct SpriteFrameImage *sUnknown_0203AAE8 = NULL;
-static EWRAM_DATA struct SpriteFrameImage *sUnknown_0203AAEC = NULL;
-static EWRAM_DATA struct SpriteFrameImage *sUnknown_0203AAF0 = NULL;
-static EWRAM_DATA struct SpriteFrameImage *sUnknown_0203AAF4 = NULL;
-static EWRAM_DATA struct SpriteFrameImage *sUnknown_0203AAF8 = NULL;
-static EWRAM_DATA struct SpriteFrameImage *sUnknown_0203AAFC = NULL;
-static EWRAM_DATA struct SpriteFrameImage *sUnknown_0203AB00 = NULL;
-static EWRAM_DATA struct SpriteFrameImage *sUnknown_0203AB04 = NULL;
-static EWRAM_DATA struct SpriteFrameImage *sUnknown_0203AB08 = NULL;
-static EWRAM_DATA struct SpriteFrameImage *sUnknown_0203AB0C = NULL;
-static EWRAM_DATA struct SpriteFrameImage *sUnknown_0203AB10 = NULL;
-static EWRAM_DATA struct SpriteFrameImage *sUnknown_0203AB14 = NULL;
-static EWRAM_DATA struct SpriteFrameImage *sUnknown_0203AB18 = NULL;
-static EWRAM_DATA struct SpriteFrameImage *sUnknown_0203AB1C = NULL;
-static EWRAM_DATA struct SpriteFrameImage *sUnknown_0203AB20 = NULL;
-static EWRAM_DATA struct SpriteFrameImage *sUnknown_0203AB24 = NULL;
-static EWRAM_DATA struct SpriteFrameImage *sUnknown_0203AB28 = NULL;
-static EWRAM_DATA struct SpriteSheet *sUnknown_0203AB2C = NULL;
-static EWRAM_DATA struct SpriteSheet *sUnknown_0203AB30 = NULL;
-static EWRAM_DATA struct SlotMachineEwramStruct *sSlotMachine = NULL;
+static EWRAM_DATA u16 *sReelOverlay_Tilemap = NULL;
+static EWRAM_DATA u8 *sDigitalDisplayGfxPtr = NULL;
+static EWRAM_DATA u8 *sReelTimeGfxPtr = NULL;
+static EWRAM_DATA u16 *sReelButtonPress_Tilemap = NULL;
+static EWRAM_DATA u8 *sReelBackground_Gfx = NULL;
+static EWRAM_DATA struct SpriteFrameImage *sImageTable_ReelTimePikachu = NULL;
+static EWRAM_DATA struct SpriteFrameImage *sImageTable_ReelTimeMachineAntennae = NULL;
+static EWRAM_DATA struct SpriteFrameImage *sImageTable_ReelTimeMachine = NULL;
+static EWRAM_DATA struct SpriteFrameImage *sImageTable_BrokenReelTimeMachine = NULL;
+static EWRAM_DATA struct SpriteFrameImage *sImageTable_DigitalDisplay_Reel = NULL;
+static EWRAM_DATA struct SpriteFrameImage *sImageTable_DigitalDisplay_Time = NULL;
+static EWRAM_DATA struct SpriteFrameImage *sImageTable_DigitalDisplay_Insert = NULL;
+static EWRAM_DATA struct SpriteFrameImage *sImageTable_DigitalDisplay_Stop = NULL;
+static EWRAM_DATA struct SpriteFrameImage *sImageTable_DigitalDisplay_Win = NULL;
+static EWRAM_DATA struct SpriteFrameImage *sImageTable_DigitalDisplay_Lose = NULL;
+static EWRAM_DATA struct SpriteFrameImage *sImageTable_DigitalDisplay_Bonus = NULL;
+static EWRAM_DATA struct SpriteFrameImage *sImageTable_DigitalDisplay_Big = NULL;
+static EWRAM_DATA struct SpriteFrameImage *sImageTable_DigitalDisplay_Reg = NULL;
+static EWRAM_DATA struct SpriteFrameImage *sImageTable_DigitalDisplay_AButton = NULL;
+static EWRAM_DATA struct SpriteFrameImage *sImageTable_DigitalDisplay_Smoke = NULL;
+static EWRAM_DATA struct SpriteFrameImage *sImageTable_DigitalDisplay_Number = NULL;
+static EWRAM_DATA struct SpriteFrameImage *sImageTable_DigitalDisplay_Pokeball = NULL;
+static EWRAM_DATA struct SpriteFrameImage *sImageTable_DigitalDisplay_DPad = NULL;
+static EWRAM_DATA struct SpriteSheet *sReelBackgroundSpriteSheet = NULL;
+static EWRAM_DATA struct SpriteSheet *sSlotMachineSpritesheetsPtr = NULL;
+static EWRAM_DATA struct SlotMachine *sSlotMachine = NULL;
// IWRAM bss
-static struct SpriteFrameImage *gUnknown_03001188[26];
+static struct SpriteFrameImage *sImageTables_DigitalDisplay[NUM_DIG_DISPLAY_SPRITES];
// Const rom data.
-static const struct UnkStruct1 *const gUnknown_083ED048[];
-static const u16 gPalette_83EDE24[];
-static const u8 gLuckyRoundProbabilities[][3];
-static const u8 gBiasTags[];
-static const u16 gLuckyFlagSettings_Top3[];
-static const u16 gLuckyFlagSettings_NotTop3[];
-static const s16 gUnknown_083ECE7E[][2];
-static const SpriteCallback gUnknown_083ECF0C[];
-static const struct SpriteTemplate *const gUnknown_083EDB5C[];
-static const struct SubspriteTable *const gUnknown_083EDBC4[];
-static const struct SpriteTemplate gSpriteTemplate_83ED6CC;
-static const struct SpriteTemplate gSpriteTemplate_83ED564;
-static const struct SpriteTemplate gSpriteTemplate_83ED54C;
-static const struct SpriteTemplate gSpriteTemplate_83ED534;
-static const u8 gUnknown_083ECC58[2];
-static const struct SpriteTemplate gSpriteTemplate_83ED51C;
-static const u16 gProbabilityTable_SkipToReeltimeAction14[];
-static const u16 *const gUnknown_083EDE10[];
-static const u16 gReelIncrementTable[][2];
-static const u16 gReelTimeBonusIncrementTable[];
-static const u16 gSlotMatchFlags[];
-static const u16 gSlotPayouts[];
-static const u8 *const gUnknown_083EDCE4;
-static const u8 *const gUnknown_083EDCDC;
-static const u32 gReelTimeGfx[];
-static const struct SpriteSheet gSlotMachineSpriteSheets[];
-static const struct SpritePalette gSlotMachineSpritePalettes[];
-static const u16 *const gUnknown_083EDE20;
-static const s16 gInitialReelPositions[][2];
-static const struct BgTemplate gUnknown_085A7424[4];
-static const struct WindowTemplate gUnknown_085A7434[];
-static const u8 gLuckyFlagProbabilities_Top3[][6];
-static const u8 gLuckyFlagProbabilities_NotTop3[][6];
-static const u8 gReeltimeProbabilities_UnluckyGame[][17];
-static const u8 gReelTimeProbabilities_LuckyGame[][17];
-static const u8 gSym2Match[];
-static const u8 gReelTimeTags[];
-static const u8 gReelSymbols[][REEL_NUM_TAGS];
-static const u8 *const gUnknown_083EDD08[];
-static const u16 *const gUnknown_083EDD1C[];
-static const u8 gUnknown_083EDD30[];
-static const u8 gBettingTilesId[][2];
-static const u8 gNumberBettingTiles[];
-static const u16 *const gUnknown_083EDDA0[];
-static const u16 *const gUnknown_083EDDAC;
-static const u16 gReelTimeWindowTilemap[];
-static const u16 gUnknown_085A9898[];
-static void (*const gUnknown_083ED064[])(void);
-static const struct SpriteTemplate gSpriteTemplate_83ED504;
-static const struct SpriteTemplate gSpriteTemplate_83ED4EC;
-static const struct SpriteTemplate gSpriteTemplate_83ED4D4;
-static const struct SpriteTemplate gSpriteTemplate_83ED4BC;
-static const struct SpriteTemplate gSpriteTemplate_83ED4A4;
-static const struct SpriteTemplate gSpriteTemplate_83ED474;
-static const struct SpriteTemplate gSpriteTemplate_83ED48C;
-static const struct SpriteTemplate gSpriteTemplate_83ED444;
-static const struct SpriteTemplate gSpriteTemplate_83ED42C;
-static const struct SpriteTemplate gSpriteTemplate_83ED414;
-static const struct SpriteTemplate gSpriteTemplate_83ED45C;
-static const struct SubspriteTable gSubspriteTables_83ED7D4[];
-static const struct SubspriteTable gSubspriteTables_83ED7B4[];
-static const struct SubspriteTable gSubspriteTables_83ED78C[];
-static const struct SubspriteTable gSubspriteTables_83ED73C[];
-static const struct SubspriteTable gSubspriteTables_83ED75C[];
-static const struct SubspriteTable gSubspriteTables_83ED704[];
-
-static const struct BgTemplate gUnknown_085A7424[] =
+static const struct DigitalDisplaySprite *const sDigitalDisplayScenes[];
+static const u16 sUnkPalette[];
+static const u8 sLuckyRoundProbabilities[][3];
+static const u8 sBiasTags[];
+static const u16 sLuckyFlagSettings_Top3[];
+static const u16 sLuckyFlagSettings_NotTop3[];
+static const s16 sDigitalDisplay_SpriteCoords[][2];
+static const SpriteCallback sDigitalDisplay_SpriteCallbacks[];
+static const struct SpriteTemplate *const sSpriteTemplates_DigitalDisplay[NUM_DIG_DISPLAY_SPRITES];
+static const struct SubspriteTable *const sSubspriteTables_DigitalDisplay[NUM_DIG_DISPLAY_SPRITES];
+static const struct SpriteTemplate sSpriteTemplate_PikaPowerBolt;
+static const struct SpriteTemplate sSpriteTemplate_ReelTimeSmoke;
+static const struct SpriteTemplate sSpriteTemplate_ReelTimeDuck;
+static const struct SpriteTemplate sSpriteTemplate_ReelTimeExplosion;
+static const struct SpriteTemplate sSpriteTemplate_ReelTimePikachuAura;
+static const u16 sReelTimeExplodeProbability[];
+static const u16 *const sPokeballShiningPalTable[];
+static const u16 sReelIncrementTable[][2];
+static const u16 sReelTimeBonusIncrementTable[];
+static const u16 sSlotMatchFlags[];
+static const u16 sSlotPayouts[];
+static const u8 *const sReelBackground_Tilemap;
+static const u32 sReelTimeGfx[];
+static const struct SpriteSheet sSlotMachineSpriteSheets[22];
+static const struct SpritePalette sSlotMachineSpritePalettes[];
+static const u16 *const sDigitalDisplay_Pal;
+static const s16 sInitialReelPositions[NUM_REELS][2];
+static const u8 sLuckyFlagProbabilities_Top3[][6];
+static const u8 sLuckyFlagProbabilities_NotTop3[][6];
+static const u8 sReeltimeProbabilities_UnluckyGame[][17];
+static const u8 sReelTimeProbabilities_LuckyGame[][17];
+static const u8 sSymToMatch[];
+static const u8 sReelTimeTags[];
+static const u8 sReelSymbolTileTags[NUM_REELS][SYMBOLS_PER_REEL];
+static const u16 *const sLitMatchLinePalTable[NUM_MATCH_LINES];
+static const u16 *const sDarkMatchLinePalTable[NUM_MATCH_LINES];
+static const u8 sMatchLinePalOffsets[NUM_MATCH_LINES];
+static const u8 sBetToMatchLineIds[MAX_BET][2];
+static const u8 sMatchLinesPerBet[MAX_BET];
+static const u16 *const sFlashingLightsPalTable[];
+static const u16 *const sSlotMachineMenu_Pal;
+static const u16 sReelTimeWindow_Tilemap[];
+static const u16 sEmptyTilemap[];
+static void (*const sDigitalDisplaySceneExitCallbacks[])(void);
+static const struct SpriteTemplate sSpriteTemplate_ReelTimeBolt;
+static const struct SpriteTemplate sSpriteTemplate_ReelTimeNumberGap;
+static const struct SpriteTemplate sSpriteTemplate_ReelTimeShadow;
+static const struct SpriteTemplate sSpriteTemplate_ReelTimeNumbers;
+static const struct SpriteTemplate sSpriteTemplate_BrokenReelTimeMachine;
+static const struct SpriteTemplate sSpriteTemplate_ReelTimeMachineAntennae;
+static const struct SpriteTemplate sSpriteTemplate_ReelTimeMachine;
+static const struct SpriteTemplate sSpriteTemplate_ReelBackground;
+static const struct SpriteTemplate sSpriteTemplate_CoinNumber;
+static const struct SpriteTemplate sSpriteTemplate_ReelSymbol;
+static const struct SpriteTemplate sSpriteTemplate_ReelTimePikachu;
+static const struct SubspriteTable sSubspriteTable_ReelTimeNumberGap[];
+static const struct SubspriteTable sSubspriteTable_ReelTimeShadow[];
+static const struct SubspriteTable sSubspriteTable_BrokenReelTimeMachine[];
+static const struct SubspriteTable sSubspriteTable_ReelTimeMachineAntennae[];
+static const struct SubspriteTable sSubspriteTable_ReelTimeMachine[];
+static const struct SubspriteTable sSubspriteTable_ReelBackground[];
+
+static const struct BgTemplate sBgTemplates[] =
{
{
.bg = 0,
@@ -489,194 +657,212 @@ static const struct BgTemplate gUnknown_085A7424[] =
},
};
-static const struct WindowTemplate gUnknown_085A7434[] =
+static const struct WindowTemplate sWindowTemplates[] =
{
- {0, 2, 15, 0x1B, 4, 15, 0x194},
+ {
+ .bg = 0,
+ .tilemapLeft = 2,
+ .tilemapTop = 15,
+ .width = 27,
+ .height = 4,
+ .paletteNum = 15,
+ .baseBlock = 0x194
+ },
DUMMY_WIN_TEMPLATE
};
-static const struct WindowTemplate gUnknown_085A7444 =
+static const struct WindowTemplate sWindowTemplate_InfoBox =
{
- 0, 1, 3, 20, 13, 13, 1
+ .bg = 0,
+ .tilemapLeft = 1,
+ .tilemapTop = 3,
+ .width = 20,
+ .height = 13,
+ .paletteNum = 13,
+ .baseBlock = 1
};
static const u8 sColors_ReeltimeHelp[] = {TEXT_COLOR_LIGHT_GREY, TEXT_COLOR_WHITE, TEXT_COLOR_DARK_GREY};
-bool8 (*const SlotActions[])(struct Task *task) =
-{
- SlotAction_UnfadeScreen, // 0
- SlotAction_WaitForUnfade, // 1
- SlotAction_SetSlotMachineVars, // 2
- SlotAction3, // 3
- SlotAction4, // 4
- SlotAction_AwaitPlayerInput, // 5
- SlotAction_PrintYouDontHaveThreeCoins, // 6
- SlotAction_ExitYouDontHaveThreeCoinsMessage, // 7
- SlotAction_GivingInformation, // 8
- SlotAction9, // 9
- SlotAction10, // 10
- SlotAction_SetLuckySpins, // 11
- SlotAction_AwaitReelStop, // 12
- SlotAction_WaitForAllReelsToStop, // 13
- SlotAction_CheckMatches, // 14
- SlotAction_WaitForPayoutToBeAwarded, // 15
- SlotAction_EndOfRoll, // 16
- SlotAction_MatchedPower, // 17
- SlotAction18, // 18
- SlotAction_Loop, // 19
- SlotAction_NoMatches, // 20
- SlotAction_PrintQuitTheGame, // 21
- SlotAction_SeeIfPlayerQuits, // 22
- SlotAction_PrintMessage_9999Coins, // 23
- SlotAction_ExitMessage_9999Coins, // 24
- SlotAction_PrintMessage_NoMoreCoins, // 25
- SlotAction_ExitMessage_NoMoreCoins, // 26
- SlotAction_EndGame, // 27
- SlotAction_FreeDataStructures, // 28
-};
-
-bool8 (*const AwardPayoutActions[])(struct Task *task) =
+static bool8 (*const sSlotActions[])(struct Task *task) =
+{
+ [SLOT_ACTION_UNFADE] = SlotAction_UnfadeScreen,
+ [SLOT_ACTION_WAIT_FADE] = SlotAction_WaitForUnfade,
+ [SLOT_ACTION_READY_NEW_SPIN] = SlotAction_ReadyNewSpin,
+ [SLOT_ACTION_READY_NEW_RT_SPIN] = SlotAction_ReadyNewReelTimeSpin,
+ [SLOT_ACTION_ASK_INSERT_BET] = SlotAction_AskInsertBet,
+ [SLOT_ACTION_BET_INPUT] = SlotAction_HandleBetInput,
+ [SLOT_ACTION_MSG_NEED_3_COINS] = SlotAction_PrintMsg_Need3Coins,
+ [SLOT_ACTION_WAIT_MSG_NEED_3_COINS] = SlotAction_WaitMsg_Need3Coins,
+ [SLOT_ACTION_WAIT_INFO_BOX] = SlotAction_WaitForInfoBox,
+ [SLOT_ACTION_START_SPIN] = SlotAction_StartSpin,
+ [SLOT_ACTION_START_RT_SPIN] = SlotAction_StartReelTimeSpin,
+ [SLOT_ACTION_SET_LUCKY_SPINS] = SlotAction_SetLuckySpins,
+ [SLOT_ACTION_AWAIT_REEL_STOP] = SlotAction_AwaitReelStop,
+ [SLOT_ACTION_AWAIT_ALL_REELS_STOP] = SlotAction_WaitForAllReelsToStop,
+ [SLOT_ACTION_CHECK_MATCHES] = SlotAction_CheckMatches,
+ [SLOT_ACTION_WAIT_PAYOUT] = SlotAction_WaitForPayoutToBeAwarded,
+ [SLOT_ACTION_END_PAYOUT] = SlotAction_EndPayout,
+ [SLOT_ACTION_MATCHED_POWER] = SlotAction_MatchedPower,
+ [SLOT_ACTION_WAIT_RT_ANIM] = SlotAction_WaitReelTimeAnim,
+ [SLOT_ACTION_RESET_BET_TILES] = SlotAction_ResetBetTiles,
+ [SLOT_ACTION_NO_MATCHES] = SlotAction_NoMatches,
+ [SLOT_ACTION_ASK_QUIT] = SlotAction_AskQuit,
+ [SLOT_ACTION_HANDLE_QUIT_INPUT] = SlotAction_HandleQuitInput,
+ [SLOT_ACTION_MSG_MAX_COINS] = SlotAction_PrintMsg_9999Coins,
+ [SLOT_ACTION_WAIT_MSG_MAX_COINS] = SlotAction_WaitMsg_9999Coins,
+ [SLOT_ACTION_MSG_NO_MORE_COINS] = SlotAction_PrintMsg_NoMoreCoins,
+ [SLOT_ACTION_WAIT_MSG_NO_MORE_COINS] = SlotAction_WaitMsg_NoMoreCoins,
+ [SLOT_ACTION_END] = SlotAction_EndGame,
+ [SLOT_ACTION_FREE] = SlotAction_FreeDataStructures,
+};
+
+static bool8 (*const sAwardPayoutActions[])(struct Task *task) =
{
AwardPayoutAction0,
AwardPayoutAction_GivePayoutToPlayer,
AwardPayoutAction_FreeTask
};
-bool8 (*const SlotReelActions[])(struct Task *task) =
+static bool8 (*const sSlotReelActions[])(struct Task *task) =
{
- SlotReelAction_StayStill,
- SlotReelAction_Spin,
- SlotReelAction_DecideWhereToStop,
- SlotReelAction_MoveToStop,
- SlotReelAction_OscillatingStop
+ [REEL_ACTION_STILL] = SlotReelAction_StayStill,
+ [REEL_ACTION_SPIN] = SlotReelAction_Spin,
+ [REEL_ACTION_STOP] = SlotReelAction_DecideWhereToStop,
+ [REEL_ACTION_STOP_MOVE] = SlotReelAction_MoveToStop,
+ [REEL_ACTION_STOP_SHAKE] = SlotReelAction_OscillatingStop
};
// returns True if a match with the biasTag is possible in that reel
// also modifies data in sSlotMachine reel arrays to indicate how to get to the matching state
-bool8 (*const DecideReelTurns_BiasTag[])(void) =
+static bool8 (*const sDecideReelTurns_BiasTag[NUM_REELS])(void) =
{
DecideReelTurns_BiasTag_Reel1,
DecideReelTurns_BiasTag_Reel2,
DecideReelTurns_BiasTag_Reel3
};
-void (*const DecideReelTurns_NoBiasTag[])(void) =
+static void (*const sDecideReelTurns_NoBiasTag[NUM_REELS])(void) =
{
DecideReelTurns_NoBiasTag_Reel1,
DecideReelTurns_NoBiasTag_Reel2,
DecideReelTurns_NoBiasTag_Reel3
};
-const u16 ReelStopShocks[] = {2, 4, 4, 4, 8};
+static const u16 sReelStopShocks[] = {2, 4, 4, 4, 8};
-bool8 (*const DecideReelTurns_BiasTag_Reel1_Bets[])(u8 tag1, u8 tag2) =
+static bool8 (*const sDecideReelTurns_BiasTag_Reel1_Bets[MAX_BET])(u8 tag1, u8 tag2) =
{
DecideReelTurns_BiasTag_Reel1_Bet1,
DecideReelTurns_BiasTag_Reel1_Bet2or3,
DecideReelTurns_BiasTag_Reel1_Bet2or3
};
-bool8 (*const DecideReelTurns_BiasTag_Reel2_Bets[])(void) =
+static bool8 (*const sDecideReelTurns_BiasTag_Reel2_Bets[MAX_BET])(void) =
{
DecideReelTurns_BiasTag_Reel2_Bet1or2,
DecideReelTurns_BiasTag_Reel2_Bet1or2,
DecideReelTurns_BiasTag_Reel2_Bet3
};
-bool8 (*const DecideReelTurns_BiasTag_Reel3_Bets[])(u8 biasTag) =
+static bool8 (*const sDecideReelTurns_BiasTag_Reel3_Bets[MAX_BET])(u8 biasTag) =
{
DecideReelTurns_BiasTag_Reel3_Bet1or2,
DecideReelTurns_BiasTag_Reel3_Bet1or2,
DecideReelTurns_BiasTag_Reel3_Bet3
};
-void (*const DecideReelTurns_NoBiasTag_Reel2_Bets[])(void) =
+static void (*const sDecideReelTurns_NoBiasTag_Reel2_Bets[MAX_BET])(void) =
{
DecideReelTurns_NoBiasTag_Reel2_Bet1,
DecideReelTurns_NoBiasTag_Reel2_Bet2,
DecideReelTurns_NoBiasTag_Reel2_Bet3
};
-void (*const DecideReelTurns_NoBiasTag_Reel3_Bets[])(void) =
+static void (*const sDecideReelTurns_NoBiasTag_Reel3_Bets[MAX_BET])(void) =
{
DecideReelTurns_NoBiasTag_Reel3_Bet1,
DecideReelTurns_NoBiasTag_Reel3_Bet2,
DecideReelTurns_NoBiasTag_Reel3_Bet3
};
-void (*const gUnknown_083ECBA0[])(struct Task *task, u8 taskId) =
+static void (*const sReelStopButtonFuncs[])(struct Task *task, u8 taskId) =
{
- sub_8103C78,
- sub_8103CAC,
- sub_8103CC8
+ StopReelButton_Press,
+ StopReelButton_Wait,
+ StopReelButton_Unpress
};
-const s16 gUnknown_083ECBAC[] = {5, 10, 15};
+static const s16 sReelButtonOffsets[NUM_REELS] = {5, 10, 15};
-void (*const gUnknown_083ECBB4[])(struct Task *task) =
+static void (*const sPikaPowerBoltFuncs[])(struct Task *task) =
{
- nullsub_68,
- sub_810411C,
- sub_8104144,
- sub_81041AC
+ PikaPowerBolt_Idle,
+ PikaPowerBolt_AddBolt,
+ PikaPowerBolt_WaitAnim,
+ PikaPowerBolt_ClearAll
};
-const u16 pikaPowerTileTable[][2] =
+static const u16 sPikaPowerTileTable[][2] =
{
{0x9e, 0x6e},
{0x9f, 0x6f},
{0xaf, 0x7f},
};
-void (*const ReeltimeActions[])(struct Task *task) =
-{
- ReeltimeAction0,
- ReeltimeAction1,
- ReeltimeAction2,
- ReeltimeAction3,
- ReeltimeAction4,
- ReeltimeAction5,
- ReeltimeAction6,
- ReelTimeAction_LandOnOutcome,
- ReeltimeAction8,
- ReeltimeAction9,
- ReeltimeAction10,
- ReeltimeAction11,
- ReeltimeAction12,
- ReeltimeAction13,
- ReeltimeAction14,
- ReeltimeAction15,
- ReeltimeAction16,
- ReeltimeAction10,
- ReeltimeAction17
-};
-
-const u8 gUnknown_085A75C0[] = {1, 1, 2, 2};
-const s16 gUnknown_085A75C4[] = {0x40, 0x30, 0x18, 0x08};
-const s16 gUnknown_085A75CC[] = {10, 8, 6, 4};
-
-void (*const InfoBoxActions[])(struct Task *task) =
-{
+static void (*const sReelTimeActions[])(struct Task *task) =
+{
+ ReelTime_Init,
+ ReelTime_WindowEnter,
+ ReelTime_WaitStartPikachu,
+ ReelTime_PikachuSpeedUp1,
+ ReelTime_PikachuSpeedUp2,
+ ReelTime_WaitReel,
+ ReelTime_CheckExplode,
+ ReelTime_LandOnOutcome,
+ ReelTime_PikachuReact,
+ ReelTime_WaitClearPikaPower,
+ ReelTime_CloseWindow,
+ ReelTime_DestroySprites,
+ ReelTime_SetReelIncrement,
+ ReelTime_EndSuccess,
+ ReelTime_ExplodeMachine,
+ ReelTime_WaitExplode,
+ ReelTime_WaitSmoke,
+ ReelTime_CloseWindow,
+ ReelTime_EndFailure
+};
+
+static const u8 sReelTimePikachuAnimIds[] = {1, 1, 2, 2};
+static const s16 sReelTimeBoltDelays[] = {64, 48, 24, 8};
+static const s16 sPikachuAuraFlashDelays[] = {10, 8, 6, 4};
+
+static void (*const sInfoBoxActions[])(struct Task *task) =
+{
+ // Go to Info screen
InfoBox_FadeIn,
InfoBox_WaitForFade,
- InfoBox_8104B80,
+ InfoBox_DrawWindow,
InfoBox_WaitForFade,
InfoBox_AddText,
InfoBox_WaitForFade,
+ // On Info screen
InfoBox_AwaitPlayerInput,
+ // Exit Info screen
InfoBox_WaitForFade,
- InfoBox_812DE14,
+ InfoBox_LoadSlotMachineTilemap,
InfoBox_WaitForFade,
- InfoBox_812DE30,
+ InfoBox_CreateDigitalDisplay,
InfoBox_WaitForFade,
- InfoBox_8104BFC,
+ InfoBox_LoadPikaPowerMeter,
InfoBox_WaitForFade,
InfoBox_FreeTask,
};
-void (*const gUnknown_083ECC54[])(struct Task *task) =
+// Just idles, digital display is handled by CreateDigitalDisplayScene and sprite callbacks
+static void (*const sDigitalDisplayActions[])(struct Task *task) =
{
- nullsub_69,
+ DigitalDisplay_Idle,
};
@@ -703,12 +889,12 @@ static void Task_FadeToSlotMachine(u8 taskId)
}
}
-void PlaySlotMachine(u8 slotMachineIndex, MainCallback cb)
+void PlaySlotMachine(u8 slotMachineIndex, MainCallback exitCallback)
{
u8 taskId;
sSlotMachine = AllocZeroed(sizeof(*sSlotMachine));
- PlaySlotMachine_Internal(slotMachineIndex, cb);
+ PlaySlotMachine_Internal(slotMachineIndex, exitCallback);
taskId = CreateTask(Task_FadeToSlotMachine, 0);
gTasks[taskId].tState = 0;
}
@@ -720,33 +906,33 @@ static void CB2_SlotMachineSetup(void)
switch (gMain.state)
{
case 0:
- SlotMachineSetup_0_0();
- SlotMachineSetup_0_1();
+ SlotMachineSetup_InitBgsWindows();
+ SlotMachineSetup_InitSlotMachineStruct();
gMain.state++;
break;
case 1:
- SlotMachineSetup_1_0();
+ SlotMachineSetup_InitVRAM();
gMain.state++;
break;
case 2:
- SlotMachineSetup_2_0();
- SlotMachineSetup_2_1();
+ SlotMachineSetup_InitOAM();
+ SlotMachineSetup_InitGpuRegs();
gMain.state++;
break;
case 3:
- SlotMachineSetup_3_0();
+ SlotMachineSetup_InitPalsSpritesTasks();
gMain.state++;
break;
case 4:
- SlotMachineSetup_4_0();
+ SlotMachineSetup_InitTilemaps();
gMain.state++;
break;
case 5:
- SlotMachineSetup_5_0();
+ SlotMachineSetup_LoadGfxAndTilemaps();
gMain.state++;
break;
case 6:
- SlotMachineSetup_6_0();
+ SlotMachineSetup_InitVBlank();
gMain.state++;
break;
case 7:
@@ -758,25 +944,25 @@ static void CB2_SlotMachineSetup(void)
gMain.state++;
break;
case 8:
- SlotMachineSetup_8_0();
+ AllocDigitalDisplayGfx();
gMain.state++;
break;
case 9:
- SlotMachineSetup_9_0();
+ SetDigitalDisplayImagePtrs();
gMain.state++;
break;
case 10:
- SlotMachineSetup_10_0();
- SlotMachineSetupGameplayTasks();
+ CreateSlotMachineSprites();
+ CreateGameplayTasks();
gMain.state++;
break;
case 11:
- SetMainCallback2(CB2_SlotMachineLoop);
+ SetMainCallback2(CB2_SlotMachine);
break;
}
}
-static void CB2_SlotMachineLoop(void)
+static void CB2_SlotMachine(void)
{
RunTasks();
AnimateSprites();
@@ -784,7 +970,7 @@ static void CB2_SlotMachineLoop(void)
UpdatePaletteFade();
}
-static void SlotMachine_VBlankCallback(void)
+static void SlotMachine_VBlankCB(void)
{
LoadOam();
ProcessSpriteCopyRequests();
@@ -795,54 +981,54 @@ static void SlotMachine_VBlankCallback(void)
SetGpuReg(REG_OFFSET_WINOUT, sSlotMachine->winOut);
}
-static void PlaySlotMachine_Internal(u8 slotMachineIndex, MainCallback cb)
+static void PlaySlotMachine_Internal(u8 slotMachineIndex, MainCallback exitCallback)
{
struct Task *task = &gTasks[CreateTask(SlotMachineDummyTask, 0xFF)];
task->data[0] = slotMachineIndex;
- StoreWordInTwoHalfwords(task->data + 1, (intptr_t)cb);
+ StoreWordInTwoHalfwords((u16 *)&task->data[1], (intptr_t)exitCallback);
}
-static void sub_81019EC(void)
+static void SlotMachineInitDummyTask(void)
{
struct Task *task = &gTasks[FindTaskIdByFunc(SlotMachineDummyTask)];
sSlotMachine->machineId = task->data[0];
- LoadWordFromTwoHalfwords((u16 *)(task->data + 1), (u32 *)&sSlotMachine->prevMainCb);
+ LoadWordFromTwoHalfwords((u16 *)&task->data[1], (u32 *)&sSlotMachine->prevMainCb);
}
static void SlotMachineDummyTask(u8 taskId)
{
}
-static void SlotMachineSetup_0_0(void)
+static void SlotMachineSetup_InitBgsWindows(void)
{
SetVBlankCallback(NULL);
SetHBlankCallback(NULL);
CpuFill32(0, (void *)VRAM, VRAM_SIZE);
ResetBgsAndClearDma3BusyFlags(0);
- InitBgsFromTemplates(0, gUnknown_085A7424, ARRAY_COUNT(gUnknown_085A7424));
- InitWindows(gUnknown_085A7434);
+ InitBgsFromTemplates(0, sBgTemplates, ARRAY_COUNT(sBgTemplates));
+ InitWindows(sWindowTemplates);
DeactivateAllTextPrinters();
}
-static void SlotMachineSetup_6_0(void)
+static void SlotMachineSetup_InitVBlank(void)
{
- SetVBlankCallback(SlotMachine_VBlankCallback);
+ SetVBlankCallback(SlotMachine_VBlankCB);
EnableInterrupts(INTR_FLAG_VBLANK);
SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_OBJ_1D_MAP | DISPCNT_OBJ_ON | DISPCNT_WIN0_ON);
}
-static void SlotMachineSetup_1_0(void)
+static void SlotMachineSetup_InitVRAM(void)
{
DmaClearLarge16(3, (u16 *)(BG_VRAM), BG_VRAM_SIZE, 0x1000);
}
-static void SlotMachineSetup_2_0(void)
+static void SlotMachineSetup_InitOAM(void)
{
DmaClear16(3, (u16 *)OAM, OAM_SIZE);
}
-static void SlotMachineSetup_2_1(void)
+static void SlotMachineSetup_InitGpuRegs(void)
{
SetGpuReg(REG_OFFSET_BG0CNT, 0);
SetGpuReg(REG_OFFSET_BG1CNT, 0);
@@ -856,48 +1042,48 @@ static void SlotMachineSetup_2_1(void)
SetGpuReg(REG_OFFSET_BG2VOFS, 0);
SetGpuReg(REG_OFFSET_BG3HOFS, 0);
SetGpuReg(REG_OFFSET_BG3VOFS, 0);
- SetGpuReg(REG_OFFSET_WININ, WININ_WIN0_BG0 | WININ_WIN0_BG1 | WININ_WIN0_BG2 | WININ_WIN0_BG3 | WININ_WIN0_OBJ | WININ_WIN0_CLR);
- SetGpuReg(REG_OFFSET_WINOUT, WINOUT_WIN01_BG0 | WINOUT_WIN01_BG1 | WINOUT_WIN01_BG2 | WINOUT_WIN01_BG3 | WINOUT_WIN01_OBJ | WINOUT_WIN01_CLR);
+ SetGpuReg(REG_OFFSET_WININ, WININ_WIN0_BG_ALL | WININ_WIN0_OBJ | WININ_WIN0_CLR);
+ SetGpuReg(REG_OFFSET_WINOUT, WINOUT_WIN01_BG_ALL | WINOUT_WIN01_OBJ | WINOUT_WIN01_CLR);
SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT1_BG3 | BLDCNT_EFFECT_BLEND | BLDCNT_TGT2_OBJ);
SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(9, 8));
}
// set up initial state of slot machine
-static void SlotMachineSetup_0_1(void)
+static void SlotMachineSetup_InitSlotMachineStruct(void)
{
u8 i;
- sub_81019EC(); // assigns sSlotMachine->machineId, etc.
+ SlotMachineInitDummyTask(); // assigns sSlotMachine->machineId, etc.
sSlotMachine->state = 0;
sSlotMachine->pikaPower = 0;
sSlotMachine->luckyGame = Random() & 1;
sSlotMachine->luckyFlags = 0;
sSlotMachine->matchedSymbols = 0;
- sSlotMachine->fairRollsLeft = 0;
- sSlotMachine->fairRollsUsed = 0;
+ sSlotMachine->reelTimeSpinsLeft = 0;
+ sSlotMachine->reelTimeSpinsUsed = 0;
sSlotMachine->coins = GetCoins();
sSlotMachine->payout = 0;
sSlotMachine->netCoinLoss = 0;
sSlotMachine->bet = 0;
sSlotMachine->currReel = 0;
sSlotMachine->reelIncrement = 8;
- sSlotMachine->win0h = 0xf0;
- sSlotMachine->win0v = 0xa0;
- sSlotMachine->winIn = 0x3f;
- sSlotMachine->winOut = 0x3f;
+ sSlotMachine->win0h = DISPLAY_WIDTH;
+ sSlotMachine->win0v = DISPLAY_HEIGHT;
+ sSlotMachine->winIn = WININ_WIN0_BG_ALL | WININ_WIN0_OBJ | WININ_WIN0_CLR;
+ sSlotMachine->winOut = WINOUT_WIN01_BG_ALL | WINOUT_WIN01_OBJ | WINOUT_WIN01_CLR;
sSlotMachine->backupMapMusic = GetCurrentMapMusic();
for (i = 0; i < NUM_REELS; i++)
{
sSlotMachine->reelPixelOffsetsWhileStopping[i] = 0;
- sSlotMachine->reelTagOffsets[i] = gInitialReelPositions[i][sSlotMachine->luckyGame] % REEL_NUM_TAGS;
- sSlotMachine->reelPixelOffsets[i] = REEL_NUM_TAGS * REEL_TAG_HEIGHT - sSlotMachine->reelTagOffsets[i] * REEL_TAG_HEIGHT;
- sSlotMachine->reelPixelOffsets[i] %= REEL_NUM_TAGS * REEL_TAG_HEIGHT;
+ sSlotMachine->reelPositions[i] = sInitialReelPositions[i][sSlotMachine->luckyGame] % SYMBOLS_PER_REEL;
+ sSlotMachine->reelPixelOffsets[i] = SYMBOLS_PER_REEL * REEL_SYMBOL_HEIGHT - sSlotMachine->reelPositions[i] * REEL_SYMBOL_HEIGHT;
+ sSlotMachine->reelPixelOffsets[i] %= SYMBOLS_PER_REEL * REEL_SYMBOL_HEIGHT;
}
AlertTVThatPlayerPlayedSlotMachine(GetCoins());
}
-static void SlotMachineSetup_3_0(void)
+static void SlotMachineSetup_InitPalsSpritesTasks(void)
{
ResetPaletteFade();
ResetSpriteData();
@@ -906,69 +1092,70 @@ static void SlotMachineSetup_3_0(void)
ResetTasks();
}
-static void SlotMachineSetup_4_0(void)
+static void SlotMachineSetup_InitTilemaps(void)
{
sSelectedPikaPowerTile = Alloc(8);
- sUnknown_0203AAD0 = AllocZeroed(0xE);
- sUnknown_0203AADC = AllocZeroed(8);
+ sReelOverlay_Tilemap = AllocZeroed(14);
+ sReelButtonPress_Tilemap = AllocZeroed(8);
// several of these are 1 bit off from each other
- sUnknown_0203AAD0[0] = 0x2051;
- sUnknown_0203AAD0[1] = 0x2851;
- sUnknown_0203AAD0[2] = 0x2061;
- sUnknown_0203AAD0[3] = 0x2861;
- sUnknown_0203AAD0[4] = 0x20BE;
- sUnknown_0203AAD0[5] = 0x28BE;
- sUnknown_0203AAD0[6] = 0x20BF;
+ sReelOverlay_Tilemap[0] = 0x2051;
+ sReelOverlay_Tilemap[1] = 0x2851;
+ sReelOverlay_Tilemap[2] = 0x2061;
+ sReelOverlay_Tilemap[3] = 0x2861;
+ sReelOverlay_Tilemap[4] = 0x20BE;
+ sReelOverlay_Tilemap[5] = 0x28BE;
+ sReelOverlay_Tilemap[6] = 0x20BF;
}
-static void SlotMachineSetup_5_0(void)
+static void SlotMachineSetup_LoadGfxAndTilemaps(void)
{
- sub_8106448();
- sub_81064B8();
- sub_81063C0();
+ LoadMenuGfx();
+ LoadMenuAndReelOverlayTilemaps();
+ LoadSlotMachineGfx();
LoadMessageBoxGfx(0, 0x200, 0xF0);
LoadUserWindowBorderGfx(0, 0x214, 0xE0);
PutWindowTilemap(0);
}
-static void SlotMachineSetup_10_0(void)
+static void CreateSlotMachineSprites(void)
{
- sub_8104EA8();
- sub_8104F8C();
- sub_8103DC8();
- sub_81050C4();
+ CreateReelSymbolSprites();
+ CreateCreditPayoutNumberSprites();
+ CreateInvisibleFlashMatchLineSprites();
+ CreateReelBackgroundSprite();
}
-// create gameplay tasks
-static void SlotMachineSetupGameplayTasks(void)
+static void CreateGameplayTasks(void)
{
- GameplayTask_PikaPower();
- GameplayTask_StopSlotReel();
- sub_8104C5C();
- GameplayTasks_Slots();
+ CreatePikaPowerBoltTask();
+ CreateSlotReelTasks();
+ CreateDigitalDisplayTask();
+ CreateSlotMachineTask();
}
-static void GameplayTasks_Slots(void)
+static void CreateSlotMachineTask(void)
{
- RunSlotActions(CreateTask(RunSlotActions, 0));
+ Task_SlotMachine(CreateTask(Task_SlotMachine, 0));
}
// task->data[0] is a timer
-static void RunSlotActions(u8 taskId)
+static void Task_SlotMachine(u8 taskId)
{
- while (SlotActions[sSlotMachine->state](&gTasks[taskId]))
+ while (sSlotActions[sSlotMachine->state](&gTasks[taskId]))
;
}
+// SLOT_ACTION_UNFADE
static bool8 SlotAction_UnfadeScreen(struct Task *task)
{
BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, RGB(0, 0, 0));
- sub_810423C(sSlotMachine->pikaPower);
- sSlotMachine->state++;
+ LoadPikaPowerMeter(sSlotMachine->pikaPower);
+ sSlotMachine->state++; // SLOT_ACTION_WAIT_FADE
return FALSE;
}
+// SLOT_ACTION_WAIT_FADE
static bool8 SlotAction_WaitForUnfade(struct Task *task)
{
if (!gPaletteFade.active)
@@ -976,448 +1163,478 @@ static bool8 SlotAction_WaitForUnfade(struct Task *task)
return FALSE;
}
-static bool8 SlotAction_SetSlotMachineVars(struct Task *task)
+// SLOT_ACTION_READY_NEW_SPIN
+static bool8 SlotAction_ReadyNewSpin(struct Task *task)
{
sSlotMachine->payout = 0;
sSlotMachine->bet = 0;
sSlotMachine->currReel = 0;
sSlotMachine->luckyFlags &= (LUCKY_BIAS_777 | LUCKY_BIAS_MIXED_777);
- sSlotMachine->state = 4;
+ sSlotMachine->state = SLOT_ACTION_ASK_INSERT_BET;
if (sSlotMachine->coins <= 0)
{
- sSlotMachine->state = 25;
+ sSlotMachine->state = SLOT_ACTION_MSG_NO_MORE_COINS;
}
- else if (sSlotMachine->fairRollsLeft)
+ else if (sSlotMachine->reelTimeSpinsLeft)
{
- sSlotMachine->state = 3;
- sub_8104CAC(4);
+ sSlotMachine->state = SLOT_ACTION_READY_NEW_RT_SPIN;
+ CreateDigitalDisplayScene(DIG_DISPLAY_REEL_TIME);
}
return TRUE;
}
-static bool8 SlotAction3(struct Task *task)
+// SLOT_ACTION_READY_NEW_RT_SPIN
+static bool8 SlotAction_ReadyNewReelTimeSpin(struct Task *task)
{
- if (sub_8104E18())
- sSlotMachine->state = 4;
+ if (IsDigitalDisplayAnimFinished())
+ sSlotMachine->state = SLOT_ACTION_ASK_INSERT_BET;
return FALSE;
}
-static bool8 SlotAction4(struct Task *task)
+// SLOT_ACTION_ASK_INSERT_BET
+static bool8 SlotAction_AskInsertBet(struct Task *task)
{
- sub_8104CAC(0);
- sSlotMachine->state = 5;
+ CreateDigitalDisplayScene(DIG_DISPLAY_INSERT_BET);
+ sSlotMachine->state = SLOT_ACTION_BET_INPUT;
if (sSlotMachine->coins >= MAX_COINS)
- sSlotMachine->state = 23;
+ sSlotMachine->state = SLOT_ACTION_MSG_MAX_COINS;
return TRUE;
}
-static bool8 SlotAction_AwaitPlayerInput(struct Task *task)
+// SLOT_ACTION_BET_INPUT
+static bool8 SlotAction_HandleBetInput(struct Task *task)
{
s16 i;
- if (gMain.newKeys & SELECT_BUTTON)
+ if (JOY_NEW(SELECT_BUTTON))
{
- OpenInfoBox(0);
- sSlotMachine->state = 8;
+ OpenInfoBox(DIG_DISPLAY_INSERT_BET);
+ sSlotMachine->state = SLOT_ACTION_WAIT_INFO_BOX;
}
- else if (gMain.newKeys & R_BUTTON) // bet the max amount
+ else if (JOY_NEW(R_BUTTON)) // bet the max amount
{
- if (sSlotMachine->coins - (3 - sSlotMachine->bet) >= 0)
+ if (sSlotMachine->coins - (MAX_BET - sSlotMachine->bet) >= 0)
{
- for (i = sSlotMachine->bet; i < 3; i++)
- LoadBetTiles(i);
- sSlotMachine->coins -= (3 - sSlotMachine->bet);
- sSlotMachine->bet = 3;
- sSlotMachine->state = 9;
- PlaySE(SE_REGI);
+ for (i = sSlotMachine->bet; i < MAX_BET; i++)
+ LightenBetTiles(i);
+ sSlotMachine->coins -= (MAX_BET - sSlotMachine->bet);
+ sSlotMachine->bet = MAX_BET;
+ sSlotMachine->state = SLOT_ACTION_START_SPIN;
+ PlaySE(SE_SHOP);
}
else // you didn't have enough coins to bet the max
{
- sSlotMachine->state = 6;
+ sSlotMachine->state = SLOT_ACTION_MSG_NEED_3_COINS;
}
}
else
{
- if (gMain.newKeys & DPAD_DOWN && sSlotMachine->coins != 0)
+ // Increase bet
+ if (JOY_NEW(DPAD_DOWN) && sSlotMachine->coins != 0)
{
- PlaySE(SE_REGI);
- LoadBetTiles(sSlotMachine->bet);
+ PlaySE(SE_SHOP);
+ LightenBetTiles(sSlotMachine->bet);
sSlotMachine->coins--;
sSlotMachine->bet++;
}
- // player maxed out or finished betting
- if (sSlotMachine->bet >= 3 || (sSlotMachine->bet != 0 && gMain.newKeys & A_BUTTON))
- sSlotMachine->state = 9;
- // player wants to quit
- if (gMain.newKeys & B_BUTTON)
- sSlotMachine->state = 21;
+
+ // Maxed bet or finished betting
+ if (sSlotMachine->bet >= MAX_BET || (sSlotMachine->bet != 0 && JOY_NEW(A_BUTTON)))
+ sSlotMachine->state = SLOT_ACTION_START_SPIN;
+
+ // Quit prompt
+ if (JOY_NEW(B_BUTTON))
+ sSlotMachine->state = SLOT_ACTION_ASK_QUIT;
}
return FALSE;
}
-static bool8 SlotAction_PrintYouDontHaveThreeCoins(struct Task *task)
+// SLOT_ACTION_NEED_3_COINS
+static bool8 SlotAction_PrintMsg_Need3Coins(struct Task *task)
{
DrawDialogueFrame(0, 0);
AddTextPrinterParameterized(0, 1, gText_YouDontHaveThreeCoins, 0, 1, 0, 0);
CopyWindowToVram(0, 3);
- sSlotMachine->state = 7;
+ sSlotMachine->state = SLOT_ACTION_WAIT_MSG_NEED_3_COINS;
return FALSE;
}
-static bool8 SlotAction_ExitYouDontHaveThreeCoinsMessage(struct Task *task)
+// SLOT_ACTION_WAIT_MSG_NEED_3_COINS
+static bool8 SlotAction_WaitMsg_Need3Coins(struct Task *task)
{
- if (gMain.newKeys & (A_BUTTON | B_BUTTON))
+ if (JOY_NEW(A_BUTTON | B_BUTTON))
{
ClearDialogWindowAndFrame(0, TRUE);
- sSlotMachine->state = 5;
+ sSlotMachine->state = SLOT_ACTION_BET_INPUT;
}
return FALSE;
}
-static bool8 SlotAction_GivingInformation(struct Task *task)
+// SLOT_ACTION_WAIT_INFO_BOX
+static bool8 SlotAction_WaitForInfoBox(struct Task *task)
{
if (IsInfoBoxClosed())
- sSlotMachine->state = 5;
+ sSlotMachine->state = SLOT_ACTION_BET_INPUT;
return FALSE;
}
-// probably make all the slots roll
-static bool8 SlotAction9(struct Task *task)
+// SLOT_ACTION_START_SPIN
+static bool8 SlotAction_StartSpin(struct Task *task)
{
DrawLuckyFlags();
- sub_8104DA4();
+ DestroyDigitalDisplayScene();
- // for each reel...
- ReelTasks_SetUnkTaskData(0);
- ReelTasks_SetUnkTaskData(1);
- ReelTasks_SetUnkTaskData(2);
+ SpinSlotReel(LEFT_REEL);
+ SpinSlotReel(MIDDLE_REEL);
+ SpinSlotReel(RIGHT_REEL);
IncrementDailySlotsUses();
task->data[0] = 0;
if (sSlotMachine->luckyFlags & LUCKY_BIAS_REELTIME)
{
- BeginReeltime();
- sSlotMachine->state = 10;
+ BeginReelTime();
+ sSlotMachine->state = SLOT_ACTION_START_RT_SPIN;
}
else
{
- sub_8104CAC(1);
- sSlotMachine->state = 11;
+ CreateDigitalDisplayScene(DIG_DISPLAY_STOP_REEL);
+ sSlotMachine->state = SLOT_ACTION_SET_LUCKY_SPINS;
}
sSlotMachine->reelIncrement = 8;
- if (sSlotMachine->fairRollsLeft)
+ if (sSlotMachine->reelTimeSpinsLeft)
sSlotMachine->reelIncrement = SlowReelSpeed();
return FALSE;
}
-static bool8 SlotAction10(struct Task *task)
+// SLOT_ACTION_START_RT_SPIN
+static bool8 SlotAction_StartReelTimeSpin(struct Task *task)
{
- if (IsFinalTask_RunReelTimeActions())
+ if (IsReelTimeTaskDone())
{
- sub_8104CAC(1);
+ CreateDigitalDisplayScene(DIG_DISPLAY_STOP_REEL);
sSlotMachine->luckyFlags &= ~LUCKY_BIAS_REELTIME;
- sSlotMachine->state = 11;
+ sSlotMachine->state = SLOT_ACTION_SET_LUCKY_SPINS;
}
return FALSE;
}
+// SLOT_ACTION_SET_LUCKY_SPINS
static bool8 SlotAction_SetLuckySpins(struct Task *task)
{
if (++task->data[0] >= 30)
{
SetLuckySpins();
- sSlotMachine->state = 12;
+ sSlotMachine->state = SLOT_ACTION_AWAIT_REEL_STOP;
}
return FALSE;
}
+// SLOT_ACTION_AWAIT_REEL_STOP
static bool8 SlotAction_AwaitReelStop(struct Task *task)
{
- if (gMain.newKeys & A_BUTTON)
+ if (JOY_NEW(A_BUTTON))
{
- PlaySE(SE_JYUNI);
- sub_8102E1C(sSlotMachine->currReel);
- sub_8103C14(sSlotMachine->currReel);
- sSlotMachine->state = 13;
+ PlaySE(SE_CONTEST_PLACE);
+ StopSlotReel(sSlotMachine->currReel);
+ PressStopReelButton(sSlotMachine->currReel);
+ sSlotMachine->state = SLOT_ACTION_AWAIT_ALL_REELS_STOP;
}
return FALSE;
}
+// SLOT_ACTION_AWAIT_ALL_REELS_STOP
static bool8 SlotAction_WaitForAllReelsToStop(struct Task *task)
{
if (!IsSlotReelMoving(sSlotMachine->currReel))
{
sSlotMachine->currReel++;
- sSlotMachine->state = 12;
- if (sSlotMachine->currReel > 2)
+ sSlotMachine->state = SLOT_ACTION_AWAIT_REEL_STOP;
+ if (sSlotMachine->currReel >= NUM_REELS)
{
- sSlotMachine->state = 14;
+ sSlotMachine->state = SLOT_ACTION_CHECK_MATCHES;
}
return TRUE;
}
return FALSE;
}
-// once all reels have stopped
+// SLOT_ACTION_CHECK_MATCHES
static bool8 SlotAction_CheckMatches(struct Task *task)
{
sSlotMachine->luckyFlags &= (LUCKY_BIAS_777 | LUCKY_BIAS_MIXED_777);
CheckMatch();
- if (sSlotMachine->fairRollsLeft)
+ if (sSlotMachine->reelTimeSpinsLeft)
{
- sSlotMachine->fairRollsLeft--;
- sSlotMachine->fairRollsUsed++;
+ sSlotMachine->reelTimeSpinsLeft--;
+ sSlotMachine->reelTimeSpinsUsed++;
}
if (sSlotMachine->matchedSymbols)
{
- sSlotMachine->state = 15;
+ sSlotMachine->state = SLOT_ACTION_WAIT_PAYOUT;
AwardPayout();
- sub_8103F70();
+ FlashSlotMachineLights();
if ((sSlotMachine->netCoinLoss -= sSlotMachine->payout) < 0)
{
sSlotMachine->netCoinLoss = 0;
}
- if (sSlotMachine->matchedSymbols & ((1 << SLOT_MACHINE_MATCHED_777_BLUE) | (1 << SLOT_MACHINE_MATCHED_777_RED)))
+ if (sSlotMachine->matchedSymbols & ((1 << MATCHED_777_BLUE) | (1 << MATCHED_777_RED)))
{
- PlayFanfare(MUS_ME_B_BIG);
- sub_8104CAC(6);
+ PlayFanfare(MUS_SLOTS_JACKPOT);
+ CreateDigitalDisplayScene(DIG_DISPLAY_BONUS_BIG);
}
- else if (sSlotMachine->matchedSymbols & (1 << SLOT_MACHINE_MATCHED_777_MIXED))
+ else if (sSlotMachine->matchedSymbols & (1 << MATCHED_777_MIXED))
{
- PlayFanfare(MUS_ME_B_BIG);
- sub_8104CAC(5);
+ PlayFanfare(MUS_SLOTS_JACKPOT);
+ CreateDigitalDisplayScene(DIG_DISPLAY_BONUS_REG);
}
else
{
- PlayFanfare(MUS_ME_B_SMALL);
- sub_8104CAC(2);
+ PlayFanfare(MUS_SLOTS_WIN);
+ CreateDigitalDisplayScene(DIG_DISPLAY_WIN);
}
// if you matched 777...
- if (sSlotMachine->matchedSymbols & ((1 << SLOT_MACHINE_MATCHED_777_MIXED) | (1 << SLOT_MACHINE_MATCHED_777_BLUE) | (1 << SLOT_MACHINE_MATCHED_777_RED)))
+ if (sSlotMachine->matchedSymbols & ((1 << MATCHED_777_MIXED) | (1 << MATCHED_777_BLUE) | (1 << MATCHED_777_RED)))
{
sSlotMachine->luckyFlags &= ~(LUCKY_BIAS_777 | LUCKY_BIAS_MIXED_777);
- if (sSlotMachine->matchedSymbols & ((1 << SLOT_MACHINE_MATCHED_777_BLUE) | (1 << SLOT_MACHINE_MATCHED_777_RED)))
+ if (sSlotMachine->matchedSymbols & ((1 << MATCHED_777_BLUE) | (1 << MATCHED_777_RED)))
{
- sSlotMachine->fairRollsLeft = 0;
- sSlotMachine->fairRollsUsed = 0;
+ sSlotMachine->reelTimeSpinsLeft = 0;
+ sSlotMachine->reelTimeSpinsUsed = 0;
sSlotMachine->luckyGame = FALSE;
- if (sSlotMachine->matchedSymbols & (1 << SLOT_MACHINE_MATCHED_777_BLUE))
+ if (sSlotMachine->matchedSymbols & (1 << MATCHED_777_BLUE))
// this may be an error, but if you get blue 777, the game becomes lucky
sSlotMachine->luckyGame = TRUE;
}
}
- if (sSlotMachine->matchedSymbols & (1 << SLOT_MACHINE_MATCHED_POWER) && sSlotMachine->pikaPower < 16)
+ if (sSlotMachine->matchedSymbols & (1 << MATCHED_POWER) && sSlotMachine->pikaPower < 16)
{
sSlotMachine->pikaPower++;
- DisplayPikaPower(sSlotMachine->pikaPower);
+ AddPikaPowerBolt(sSlotMachine->pikaPower);
}
}
else
{
- sub_8104CAC(3);
- sSlotMachine->state = 20;
+ CreateDigitalDisplayScene(DIG_DISPLAY_LOSE);
+ sSlotMachine->state = SLOT_ACTION_NO_MATCHES;
if ((sSlotMachine->netCoinLoss += sSlotMachine->bet) > MAX_COINS)
sSlotMachine->netCoinLoss = MAX_COINS;
}
return FALSE;
}
+// SLOT_ACTION_WAIT_PAYOUT
static bool8 SlotAction_WaitForPayoutToBeAwarded(struct Task *task)
{
if (IsFinalTask_RunAwardPayoutActions())
- sSlotMachine->state = 16;
+ sSlotMachine->state = SLOT_ACTION_END_PAYOUT;
return FALSE;
}
-static bool8 SlotAction_EndOfRoll(struct Task *task)
+// SLOT_ACTION_END_PAYOUT
+static bool8 SlotAction_EndPayout(struct Task *task)
{
- if (sub_8103FA0())
+ if (TryStopSlotMachineLights())
{
- sSlotMachine->state = 19;
- if (sSlotMachine->matchedSymbols & ((1 << SLOT_MACHINE_MATCHED_777_RED) | (1 << SLOT_MACHINE_MATCHED_777_BLUE)))
+ sSlotMachine->state = SLOT_ACTION_RESET_BET_TILES;
+
+ if (sSlotMachine->matchedSymbols & ((1 << MATCHED_777_RED) | (1 << MATCHED_777_BLUE)))
IncrementGameStat(GAME_STAT_SLOT_JACKPOTS);
- if (sSlotMachine->matchedSymbols & (1 << SLOT_MACHINE_MATCHED_REPLAY))
+
+ if (sSlotMachine->matchedSymbols & (1 << MATCHED_REPLAY))
{
sSlotMachine->currReel = 0;
- sSlotMachine->state = 9;
+ sSlotMachine->state = SLOT_ACTION_START_SPIN;
}
- if (sSlotMachine->matchedSymbols & (1 << SLOT_MACHINE_MATCHED_POWER))
- sSlotMachine->state = 17;
- if (sSlotMachine->fairRollsLeft && sSlotMachine->matchedSymbols & (1 << SLOT_MACHINE_MATCHED_REPLAY))
+
+ if (sSlotMachine->matchedSymbols & (1 << MATCHED_POWER))
+ sSlotMachine->state = SLOT_ACTION_MATCHED_POWER;
+
+ if (sSlotMachine->reelTimeSpinsLeft && sSlotMachine->matchedSymbols & (1 << MATCHED_REPLAY))
{
- sub_8104CAC(4);
- sSlotMachine->state = 18;
+ CreateDigitalDisplayScene(DIG_DISPLAY_REEL_TIME);
+ sSlotMachine->state = SLOT_ACTION_WAIT_RT_ANIM;
}
}
return FALSE;
}
+// SLOT_ACTION_MATCHED_POWER
static bool8 SlotAction_MatchedPower(struct Task *task)
{
- if (!sub_81040C8())
+ if (!IsPikaPowerBoltAnimating())
{
- sSlotMachine->state = 19;
- if (sSlotMachine->matchedSymbols & (1 << SLOT_MACHINE_MATCHED_REPLAY))
+ sSlotMachine->state = SLOT_ACTION_RESET_BET_TILES;
+ if (sSlotMachine->matchedSymbols & (1 << MATCHED_REPLAY))
{
- sSlotMachine->state = 9;
- if (sSlotMachine->fairRollsLeft)
+ sSlotMachine->state = SLOT_ACTION_START_SPIN;
+ if (sSlotMachine->reelTimeSpinsLeft)
{
- sub_8104CAC(4);
- sSlotMachine->state = 18;
+ CreateDigitalDisplayScene(DIG_DISPLAY_REEL_TIME);
+ sSlotMachine->state = SLOT_ACTION_WAIT_RT_ANIM;
}
}
}
return FALSE;
}
-static bool8 SlotAction18(struct Task *task)
+// SLOT_ACTION_WAIT_RT_ANIM
+static bool8 SlotAction_WaitReelTimeAnim(struct Task *task)
{
- if (sub_8104E18())
+ if (IsDigitalDisplayAnimFinished())
{
- sSlotMachine->state = 19;
- if (sSlotMachine->matchedSymbols & (1 << SLOT_MACHINE_MATCHED_REPLAY))
+ sSlotMachine->state = SLOT_ACTION_RESET_BET_TILES;
+ if (sSlotMachine->matchedSymbols & (1 << MATCHED_REPLAY))
{
- sSlotMachine->state = 9;
+ sSlotMachine->state = SLOT_ACTION_START_SPIN;
}
}
return FALSE;
}
-static bool8 SlotAction_Loop(struct Task *task)
+// SLOT_ACTION_RESET_BET_TILES
+static bool8 SlotAction_ResetBetTiles(struct Task *task)
{
- sub_8103D8C(0);
- sub_8103D8C(1);
- sub_8103D8C(2);
- sSlotMachine->state = 2;
+ DarkenBetTiles(0);
+ DarkenBetTiles(1);
+ DarkenBetTiles(2);
+ sSlotMachine->state = SLOT_ACTION_READY_NEW_SPIN;
return FALSE;
}
+// SLOT_ACTION_NO_MATCHES
static bool8 SlotAction_NoMatches(struct Task *task)
{
if (++task->data[1] > 64)
{
task->data[1] = 0;
- sSlotMachine->state = 19;
+ sSlotMachine->state = SLOT_ACTION_RESET_BET_TILES;
}
return FALSE;
}
-static bool8 SlotAction_PrintQuitTheGame(struct Task *task)
+// SLOT_ACTION_ASK_QUIT
+static bool8 SlotAction_AskQuit(struct Task *task)
{
DrawDialogueFrame(0, 0);
AddTextPrinterParameterized(0, 1, gText_QuitTheGame, 0, 1, 0, 0);
CopyWindowToVram(0, 3);
CreateYesNoMenuParameterized(0x15, 7, 0x214, 0x180, 0xE, 0xF);
- sSlotMachine->state = 22;
+ sSlotMachine->state = SLOT_ACTION_HANDLE_QUIT_INPUT;
return FALSE;
}
-static bool8 SlotAction_SeeIfPlayerQuits(struct Task *task)
+// SLOT_ACTION_HANDLE_QUIT_INPUT
+static bool8 SlotAction_HandleQuitInput(struct Task *task)
{
s8 input = Menu_ProcessInputNoWrapClearOnChoose();
if (input == 0) // player chooses to quit
{
ClearDialogWindowAndFrame(0, TRUE);
- sub_8103D8C(0);
- sub_8103D8C(1);
- sub_8103D8C(2);
+ DarkenBetTiles(0);
+ DarkenBetTiles(1);
+ DarkenBetTiles(2);
sSlotMachine->coins += sSlotMachine->bet;
- sSlotMachine->state = 27;
+ sSlotMachine->state = SLOT_ACTION_END;
}
else if (input == 1 || input == -1) // player chooses not to quit
{
ClearDialogWindowAndFrame(0, TRUE);
- sSlotMachine->state = 5;
+ sSlotMachine->state = SLOT_ACTION_BET_INPUT;
}
return FALSE;
}
-static bool8 SlotAction_PrintMessage_9999Coins(struct Task *task)
+// SLOT_ACTION_MSG_MAX_COINS
+static bool8 SlotAction_PrintMsg_9999Coins(struct Task *task)
{
DrawDialogueFrame(0, 0);
AddTextPrinterParameterized(0, 1, gText_YouveGot9999Coins, 0, 1, 0, 0);
CopyWindowToVram(0, 3);
- sSlotMachine->state = 24;
+ sSlotMachine->state = SLOT_ACTION_WAIT_MSG_MAX_COINS;
return FALSE;
}
-static bool8 SlotAction_ExitMessage_9999Coins(struct Task *task)
+// SLOT_ACTION_WAIT_MSG_MAX_COINS
+static bool8 SlotAction_WaitMsg_9999Coins(struct Task *task)
{
- if (gMain.newKeys & (A_BUTTON | B_BUTTON))
+ if (JOY_NEW(A_BUTTON | B_BUTTON))
{
ClearDialogWindowAndFrame(0, TRUE);
- sSlotMachine->state = 5;
+ sSlotMachine->state = SLOT_ACTION_BET_INPUT;
}
return FALSE;
}
-static bool8 SlotAction_PrintMessage_NoMoreCoins(struct Task *task)
+// SLOT_ACTION_MSG_NO_MORE_COINS
+static bool8 SlotAction_PrintMsg_NoMoreCoins(struct Task *task)
{
DrawDialogueFrame(0, 0);
AddTextPrinterParameterized(0, 1, gText_YouveRunOutOfCoins, 0, 1, 0, 0);
CopyWindowToVram(0, 3);
- sSlotMachine->state = 26;
+ sSlotMachine->state = SLOT_ACTION_WAIT_MSG_NO_MORE_COINS;
return FALSE;
}
-static bool8 SlotAction_ExitMessage_NoMoreCoins(struct Task *task)
+// SLOT_ACTION_WAIT_MSG_NO_MORE_COINS
+static bool8 SlotAction_WaitMsg_NoMoreCoins(struct Task *task)
{
- if (gMain.newKeys & (A_BUTTON | B_BUTTON))
+ if (JOY_NEW(A_BUTTON | B_BUTTON))
{
ClearDialogWindowAndFrame(0, TRUE);
- sSlotMachine->state = 27;
+ sSlotMachine->state = SLOT_ACTION_END;
}
return FALSE;
}
+// SLOT_ACTION_END
static bool8 SlotAction_EndGame(struct Task *task)
{
SetCoins(sSlotMachine->coins);
AlertTVOfNewCoinTotal(GetCoins());
BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB(0, 0, 0));
- sSlotMachine->state++;
+ sSlotMachine->state++; // SLOT_ACTION_FREE
return FALSE;
}
+// SLOT_ACTION_FREE
static bool8 SlotAction_FreeDataStructures(struct Task *task)
{
if (!gPaletteFade.active)
{
SetMainCallback2(sSlotMachine->prevMainCb);
- FREE_AND_SET_NULL(sUnknown_0203AAF4);
- FREE_AND_SET_NULL(sUnknown_0203AAF8);
- FREE_AND_SET_NULL(sUnknown_0203AAFC);
- FREE_AND_SET_NULL(sUnknown_0203AB00);
- FREE_AND_SET_NULL(sUnknown_0203AB04);
- FREE_AND_SET_NULL(sUnknown_0203AB08);
- FREE_AND_SET_NULL(sUnknown_0203AB0C);
- FREE_AND_SET_NULL(sUnknown_0203AB10);
- FREE_AND_SET_NULL(sUnknown_0203AB14);
- FREE_AND_SET_NULL(sUnknown_0203AB18);
- FREE_AND_SET_NULL(sUnknown_0203AB1C);
- FREE_AND_SET_NULL(sUnknown_0203AB20);
- FREE_AND_SET_NULL(sUnknown_0203AB24);
- FREE_AND_SET_NULL(sUnknown_0203AB28);
- if (sUnknown_0203AAE4 != NULL)
- FREE_AND_SET_NULL(sUnknown_0203AAE4);
- if (sUnknown_0203AAE8 != NULL)
- FREE_AND_SET_NULL(sUnknown_0203AAE8);
- if (sUnknown_0203AAEC != NULL)
- FREE_AND_SET_NULL(sUnknown_0203AAEC);
- if (sUnknown_0203AAF0 != NULL)
- FREE_AND_SET_NULL(sUnknown_0203AAF0);
- FREE_AND_SET_NULL(sUnknown_0203AAC8);
+ FREE_AND_SET_NULL(sImageTable_DigitalDisplay_Reel);
+ FREE_AND_SET_NULL(sImageTable_DigitalDisplay_Time);
+ FREE_AND_SET_NULL(sImageTable_DigitalDisplay_Insert);
+ FREE_AND_SET_NULL(sImageTable_DigitalDisplay_Stop);
+ FREE_AND_SET_NULL(sImageTable_DigitalDisplay_Win);
+ FREE_AND_SET_NULL(sImageTable_DigitalDisplay_Lose);
+ FREE_AND_SET_NULL(sImageTable_DigitalDisplay_Bonus);
+ FREE_AND_SET_NULL(sImageTable_DigitalDisplay_Big);
+ FREE_AND_SET_NULL(sImageTable_DigitalDisplay_Reg);
+ FREE_AND_SET_NULL(sImageTable_DigitalDisplay_AButton);
+ FREE_AND_SET_NULL(sImageTable_DigitalDisplay_Smoke);
+ FREE_AND_SET_NULL(sImageTable_DigitalDisplay_Number);
+ FREE_AND_SET_NULL(sImageTable_DigitalDisplay_Pokeball);
+ FREE_AND_SET_NULL(sImageTable_DigitalDisplay_DPad);
+ if (sImageTable_ReelTimePikachu != NULL)
+ FREE_AND_SET_NULL(sImageTable_ReelTimePikachu);
+ if (sImageTable_ReelTimeMachineAntennae != NULL)
+ FREE_AND_SET_NULL(sImageTable_ReelTimeMachineAntennae);
+ if (sImageTable_ReelTimeMachine != NULL)
+ FREE_AND_SET_NULL(sImageTable_ReelTimeMachine);
+ if (sImageTable_BrokenReelTimeMachine != NULL)
+ FREE_AND_SET_NULL(sImageTable_BrokenReelTimeMachine);
+ FREE_AND_SET_NULL(sMenuGfx);
FREE_AND_SET_NULL(sSelectedPikaPowerTile);
- FREE_AND_SET_NULL(sUnknown_0203AAD0);
- FREE_AND_SET_NULL(sUnknown_0203AAD4);
- FREE_AND_SET_NULL(sUnknown_0203AAD8);
- FREE_AND_SET_NULL(sUnknown_0203AADC);
- FREE_AND_SET_NULL(sUnknown_0203AAE0);
- FREE_AND_SET_NULL(sUnknown_0203AB2C);
- FREE_AND_SET_NULL(sUnknown_0203AB30);
-
+ FREE_AND_SET_NULL(sReelOverlay_Tilemap);
+ FREE_AND_SET_NULL(sDigitalDisplayGfxPtr);
+ FREE_AND_SET_NULL(sReelTimeGfxPtr);
+ FREE_AND_SET_NULL(sReelButtonPress_Tilemap);
+ FREE_AND_SET_NULL(sReelBackground_Gfx);
+ FREE_AND_SET_NULL(sReelBackgroundSpriteSheet);
+ FREE_AND_SET_NULL(sSlotMachineSpritesheetsPtr);
FREE_AND_SET_NULL(sSlotMachine);
}
return FALSE;
@@ -1427,7 +1644,7 @@ static void DrawLuckyFlags(void)
{
u8 attempts;
- if (sSlotMachine->fairRollsLeft == 0)
+ if (sSlotMachine->reelTimeSpinsLeft == 0)
{
if (!(sSlotMachine->luckyFlags & (LUCKY_BIAS_777 | LUCKY_BIAS_MIXED_777)))
{
@@ -1437,7 +1654,7 @@ static void DrawLuckyFlags(void)
if (attempts != 3) // if you found a lucky number
{
// attempts == 1: reelTime flag set
- sSlotMachine->luckyFlags |= gLuckyFlagSettings_Top3[attempts];
+ sSlotMachine->luckyFlags |= sLuckyFlagSettings_Top3[attempts];
if (attempts != 1)
{
return;
@@ -1448,7 +1665,7 @@ static void DrawLuckyFlags(void)
attempts = AttemptsAtLuckyFlags_NotTop3();
if (attempts != 5) // if you found a lucky number
{
- sSlotMachine->luckyFlags |= gLuckyFlagSettings_NotTop3[attempts];
+ sSlotMachine->luckyFlags |= sLuckyFlagSettings_NotTop3[attempts];
}
}
}
@@ -1456,9 +1673,9 @@ static void DrawLuckyFlags(void)
static void SetLuckySpins(void)
{
- sSlotMachine->luckySpinsLeft = 0;
+ sSlotMachine->isLuckySpin = FALSE;
if (sSlotMachine->luckyFlags)
- sSlotMachine->luckySpinsLeft = 1;
+ sSlotMachine->isLuckySpin = TRUE;
}
static u8 GetBiasTag(u8 luckyFlags)
@@ -1468,7 +1685,7 @@ static u8 GetBiasTag(u8 luckyFlags)
for (i = 0; i < 8; i++)
{
if (luckyFlags & 1)
- return gBiasTags[i];
+ return sBiasTags[i];
luckyFlags >>= 1;
}
return 0;
@@ -1478,7 +1695,7 @@ static u8 GetBiasTag(u8 luckyFlags)
static bool8 IsThisRoundLucky(void)
{
u8 rval = Random();
- if (gLuckyRoundProbabilities[sSlotMachine->machineId][sSlotMachine->bet - 1] > rval)
+ if (sLuckyRoundProbabilities[sSlotMachine->machineId][sSlotMachine->bet - 1] > rval)
return TRUE;
return FALSE;
}
@@ -1490,7 +1707,7 @@ static u8 AttemptsAtLuckyFlags_Top3(void)
for (count = 0; count < 3; count++)
{
s16 rval = Random() & 0xff;
- s16 value = gLuckyFlagProbabilities_Top3[count][sSlotMachine->machineId];
+ s16 value = sLuckyFlagProbabilities_Top3[count][sSlotMachine->machineId];
if (value > rval)
break;
}
@@ -1504,7 +1721,7 @@ static u8 AttemptsAtLuckyFlags_NotTop3(void)
for (count = 0; count < 5; count++)
{
s16 rval = Random() & 0xff; // random byte
- s16 value = gLuckyFlagProbabilities_NotTop3[count][sSlotMachine->machineId];
+ s16 value = sLuckyFlagProbabilities_NotTop3[count][sSlotMachine->machineId];
// make first attempt easier if it's a lucky game
if (count == 0 && sSlotMachine->luckyGame == TRUE)
{
@@ -1528,9 +1745,9 @@ static u8 AttemptsAtLuckyFlags_NotTop3(void)
static u8 GetReelTimeProbability(u8 reelTimeDraw)
{
if (sSlotMachine->luckyGame == FALSE)
- return gReeltimeProbabilities_UnluckyGame[reelTimeDraw][sSlotMachine->pikaPower];
+ return sReeltimeProbabilities_UnluckyGame[reelTimeDraw][sSlotMachine->pikaPower];
else
- return gReelTimeProbabilities_LuckyGame[reelTimeDraw][sSlotMachine->pikaPower];
+ return sReelTimeProbabilities_LuckyGame[reelTimeDraw][sSlotMachine->pikaPower];
}
static void GetReeltimeDraw(void)
@@ -1551,10 +1768,10 @@ static void GetReeltimeDraw(void)
sSlotMachine->reelTimeDraw = reelTimeDraw;
}
-static bool8 SkipToReeltimeAction14(u16 i)
+static bool8 ShouldReelTimeMachineExplode(u16 i)
{
u16 rval = Random() & 0xff;
- if (rval < gProbabilityTable_SkipToReeltimeAction14[i])
+ if (rval < sReelTimeExplodeProbability[i])
return TRUE;
else
return FALSE;
@@ -1574,11 +1791,11 @@ static u16 SlowReelSpeed(void)
else if (sSlotMachine->netCoinLoss >= 150)
i = 1;
rval = Random() % 100;
- value = gReelIncrementTable[i][0];
+ value = sReelIncrementTable[i][0];
if (rval < value)
return 4;
rval = Random() % 100;
- value = gReelIncrementTable[i][1] + gReelTimeBonusIncrementTable[sSlotMachine->fairRollsUsed];
+ value = sReelIncrementTable[i][1] + sReelTimeBonusIncrementTable[sSlotMachine->reelTimeSpinsUsed];
if (rval < value)
return 2;
return 8;
@@ -1598,15 +1815,15 @@ static void CheckMatch_CenterRow(void)
{
u8 c1, c2, c3, match;
- c1 = GetNearbyTag_Quantized(0, 2);
- c2 = GetNearbyTag_Quantized(1, 2);
- c3 = GetNearbyTag_Quantized(2, 2);
- match = GetMatchFromSymbolsInRow(c1, c2, c3);
- if (match != SLOT_MACHINE_MATCHED_NONE)
+ c1 = GetTagAtRest(LEFT_REEL, 2);
+ c2 = GetTagAtRest(MIDDLE_REEL, 2);
+ c3 = GetTagAtRest(RIGHT_REEL, 2);
+ match = GetMatchFromSymbols(c1, c2, c3);
+ if (match != MATCHED_NONE)
{
- sSlotMachine->payout += gSlotPayouts[match];
- sSlotMachine->matchedSymbols |= gSlotMatchFlags[match];
- sub_8103E04(0);
+ sSlotMachine->payout += sSlotPayouts[match];
+ sSlotMachine->matchedSymbols |= sSlotMatchFlags[match];
+ FlashMatchLine(MATCH_MIDDLE_ROW);
}
}
@@ -1614,29 +1831,29 @@ static void CheckMatch_TopAndBottom(void)
{
u8 c1, c2, c3, match;
- c1 = GetNearbyTag_Quantized(0, 1);
- c2 = GetNearbyTag_Quantized(1, 1);
- c3 = GetNearbyTag_Quantized(2, 1);
- match = GetMatchFromSymbolsInRow(c1, c2, c3);
- if (match != SLOT_MACHINE_MATCHED_NONE)
+ c1 = GetTagAtRest(LEFT_REEL, 1);
+ c2 = GetTagAtRest(MIDDLE_REEL, 1);
+ c3 = GetTagAtRest(RIGHT_REEL, 1);
+ match = GetMatchFromSymbols(c1, c2, c3);
+ if (match != MATCHED_NONE)
{
- if (match == SLOT_MACHINE_MATCHED_1CHERRY)
- match = SLOT_MACHINE_MATCHED_2CHERRY;
- sSlotMachine->payout += gSlotPayouts[match];
- sSlotMachine->matchedSymbols |= gSlotMatchFlags[match];
- sub_8103E04(1);
+ if (match == MATCHED_1CHERRY)
+ match = MATCHED_2CHERRY;
+ sSlotMachine->payout += sSlotPayouts[match];
+ sSlotMachine->matchedSymbols |= sSlotMatchFlags[match];
+ FlashMatchLine(MATCH_TOP_ROW);
}
- c1 = GetNearbyTag_Quantized(0, 3);
- c2 = GetNearbyTag_Quantized(1, 3);
- c3 = GetNearbyTag_Quantized(2, 3);
- match = GetMatchFromSymbolsInRow(c1, c2, c3);
- if (match != SLOT_MACHINE_MATCHED_NONE)
+ c1 = GetTagAtRest(LEFT_REEL, 3);
+ c2 = GetTagAtRest(MIDDLE_REEL, 3);
+ c3 = GetTagAtRest(RIGHT_REEL, 3);
+ match = GetMatchFromSymbols(c1, c2, c3);
+ if (match != MATCHED_NONE)
{
- if (match == SLOT_MACHINE_MATCHED_1CHERRY)
- match = SLOT_MACHINE_MATCHED_2CHERRY;
- sSlotMachine->payout += gSlotPayouts[match];
- sSlotMachine->matchedSymbols |= gSlotMatchFlags[match];
- sub_8103E04(2);
+ if (match == MATCHED_1CHERRY)
+ match = MATCHED_2CHERRY;
+ sSlotMachine->payout += sSlotPayouts[match];
+ sSlotMachine->matchedSymbols |= sSlotMatchFlags[match];
+ FlashMatchLine(MATCH_BOTTOM_ROW);
}
}
@@ -1644,45 +1861,45 @@ static void CheckMatch_Diagonals(void)
{
u8 c1, c2, c3, match;
- c1 = GetNearbyTag_Quantized(0, 1);
- c2 = GetNearbyTag_Quantized(1, 2);
- c3 = GetNearbyTag_Quantized(2, 3);
- match = GetMatchFromSymbolsInRow(c1, c2, c3);
- if (match != SLOT_MACHINE_MATCHED_NONE)
+ c1 = GetTagAtRest(LEFT_REEL, 1);
+ c2 = GetTagAtRest(MIDDLE_REEL, 2);
+ c3 = GetTagAtRest(RIGHT_REEL, 3);
+ match = GetMatchFromSymbols(c1, c2, c3);
+ if (match != MATCHED_NONE)
{
- if (match != SLOT_MACHINE_MATCHED_1CHERRY)
+ if (match != MATCHED_1CHERRY)
{
- sSlotMachine->payout += gSlotPayouts[match];
- sSlotMachine->matchedSymbols |= gSlotMatchFlags[match];
+ sSlotMachine->payout += sSlotPayouts[match];
+ sSlotMachine->matchedSymbols |= sSlotMatchFlags[match];
}
- sub_8103E04(3);
+ FlashMatchLine(MATCH_NWSE_DIAG);
}
- c1 = GetNearbyTag_Quantized(0, 3);
- c2 = GetNearbyTag_Quantized(1, 2);
- c3 = GetNearbyTag_Quantized(2, 1);
- match = GetMatchFromSymbolsInRow(c1, c2, c3);
- if (match != SLOT_MACHINE_MATCHED_NONE)
+ c1 = GetTagAtRest(LEFT_REEL, 3);
+ c2 = GetTagAtRest(MIDDLE_REEL, 2);
+ c3 = GetTagAtRest(RIGHT_REEL, 1);
+ match = GetMatchFromSymbols(c1, c2, c3);
+ if (match != MATCHED_NONE)
{
- if (match != SLOT_MACHINE_MATCHED_1CHERRY)
+ if (match != MATCHED_1CHERRY)
{
- sSlotMachine->payout += gSlotPayouts[match];
- sSlotMachine->matchedSymbols |= gSlotMatchFlags[match];
+ sSlotMachine->payout += sSlotPayouts[match];
+ sSlotMachine->matchedSymbols |= sSlotMatchFlags[match];
}
- sub_8103E04(4);
+ FlashMatchLine(MATCH_NESW_DIAG);
}
}
-static u8 GetMatchFromSymbolsInRow(u8 c1, u8 c2, u8 c3)
+static u8 GetMatchFromSymbols(u8 c1, u8 c2, u8 c3)
{
if (c1 == c2 && c1 == c3)
- return gSym2Match[c1];
- if (c1 == SLOT_MACHINE_TAG_7_RED && c2 == SLOT_MACHINE_TAG_7_RED && c3 == SLOT_MACHINE_TAG_7_BLUE)
- return SLOT_MACHINE_MATCHED_777_MIXED;
- if (c1 == SLOT_MACHINE_TAG_7_BLUE && c2 == SLOT_MACHINE_TAG_7_BLUE && c3 == SLOT_MACHINE_TAG_7_RED)
- return SLOT_MACHINE_MATCHED_777_MIXED;
- if (c1 == SLOT_MACHINE_TAG_CHERRY)
- return SLOT_MACHINE_MATCHED_1CHERRY;
- return SLOT_MACHINE_MATCHED_NONE;
+ return sSymToMatch[c1];
+ if (c1 == GFXTAG_7_RED && c2 == GFXTAG_7_RED && c3 == GFXTAG_7_BLUE)
+ return MATCHED_777_MIXED;
+ if (c1 == GFXTAG_7_BLUE && c2 == GFXTAG_7_BLUE && c3 == GFXTAG_7_RED)
+ return MATCHED_777_MIXED;
+ if (c1 == GFXTAG_CHERRY)
+ return MATCHED_1CHERRY;
+ return MATCHED_NONE;
}
static void AwardPayout(void)
@@ -1700,13 +1917,13 @@ static bool8 IsFinalTask_RunAwardPayoutActions(void)
static void RunAwardPayoutActions(u8 taskId)
{
- while (AwardPayoutActions[gTasks[taskId].data[0]](&gTasks[taskId]))
+ while (sAwardPayoutActions[gTasks[taskId].data[0]](&gTasks[taskId]))
;
}
static bool8 AwardPayoutAction0(struct Task *task)
{
- if (sub_8103E38())
+ if (IsMatchLineDoneFlashingBeforePayout())
{
task->data[0]++;
if (sSlotMachine->payout == 0)
@@ -1731,7 +1948,7 @@ static bool8 AwardPayoutAction_GivePayoutToPlayer(struct Task *task)
if (gMain.heldKeys & A_BUTTON)
task->data[1] = 4;
}
- if (IsFanfareTaskInactive() && gMain.newKeys & START_BUTTON)
+ if (IsFanfareTaskInactive() && JOY_NEW(START_BUTTON))
{
PlaySE(SE_PIN);
sSlotMachine->coins += sSlotMachine->payout;
@@ -1746,30 +1963,39 @@ static bool8 AwardPayoutAction_GivePayoutToPlayer(struct Task *task)
static bool8 AwardPayoutAction_FreeTask(struct Task *task)
{
- if (sub_8103E7C())
+ if (TryStopMatchLinesFlashing())
DestroyTask(FindTaskIdByFunc(RunAwardPayoutActions));
return FALSE;
}
-
-// Returns the tag that is posOffset below the tag at the top of reelIndex's tape
-static u8 GetNearbyTag_Quantized(u8 reelIndex, s16 posOffset)
+// Get the tag at position `offset` below the top of the reel's tape. Note that
+// if `offset` is negative, it wraps around to the bottom of the tape.
+// .-----------------.
+// | [ ] | [ ] | [ ] | <- offset = 0
+// /-----|-----|-----\
+// screen -> | [ ] | [ ] | [ ] | <- offset = 1
+// | [ ] | [ ] | [ ] | <- offset = 2
+// | [ ] | [ ] | [ ] | <- offset = 3
+// \-----|-----|-----/
+// | ... | ... | ... |
+// | [ ] | [ ] | [ ] | <- offset = 20
+// .-----------------.
+static u8 GetTagAtRest(u8 reel, s16 offset)
{
- s16 tagIndex = (sSlotMachine->reelTagOffsets[reelIndex] + posOffset) % REEL_NUM_TAGS;
- if (tagIndex < 0)
- tagIndex += REEL_NUM_TAGS;
- return gReelSymbols[reelIndex][tagIndex];
+ s16 pos = (sSlotMachine->reelPositions[reel] + offset) % SYMBOLS_PER_REEL;
+ if (pos < 0)
+ pos += SYMBOLS_PER_REEL;
+ return sReelSymbolTileTags[reel][pos];
}
-
-// Calculates GetNearbyTag_Quantized as if the reel was snapped downwards into place
-static u8 GetNearbyTag(u8 reelIndex, s16 posOffset)
+// Calculates GetTagAtRest as if the reel were snapped downwards into place.
+static u8 GetTag(u8 reel, s16 offset)
{
- s16 tagOffset = 0;
- s16 result = sSlotMachine->reelPixelOffsets[reelIndex] % 24;
- if (result != 0)
- tagOffset = -1;
- return GetNearbyTag_Quantized(reelIndex, posOffset + tagOffset);
+ s16 inc = 0;
+ s16 pixelOffset = sSlotMachine->reelPixelOffsets[reel] % REEL_SYMBOL_HEIGHT;
+ if (pixelOffset != 0)
+ inc = -1;
+ return GetTagAtRest(reel, offset + inc);
}
static u8 GetNearbyReelTimeTag(s16 n)
@@ -1777,25 +2003,25 @@ static u8 GetNearbyReelTimeTag(s16 n)
s16 newPosition = (sSlotMachine->reeltimePosition + n) % 6;
if (newPosition < 0)
newPosition += 6;
- return gReelTimeTags[newPosition];
+ return sReelTimeTags[newPosition];
}
static void AdvanceSlotReel(u8 reelIndex, s16 value)
{
sSlotMachine->reelPixelOffsets[reelIndex] += value;
sSlotMachine->reelPixelOffsets[reelIndex] %= 504;
- sSlotMachine->reelTagOffsets[reelIndex] = REEL_NUM_TAGS - sSlotMachine->reelPixelOffsets[reelIndex] / 24;
+ sSlotMachine->reelPositions[reelIndex] = SYMBOLS_PER_REEL - sSlotMachine->reelPixelOffsets[reelIndex] / REEL_SYMBOL_HEIGHT;
}
s16 AdvanceSlotReelToNextTag(u8 reelIndex, s16 value)
{
- s16 offset = sSlotMachine->reelPixelOffsets[reelIndex] % 24;
+ s16 offset = sSlotMachine->reelPixelOffsets[reelIndex] % REEL_SYMBOL_HEIGHT;
if (offset != 0)
{
if (offset < value)
value = offset;
AdvanceSlotReel(reelIndex, value);
- offset = sSlotMachine->reelPixelOffsets[reelIndex] % 24;
+ offset = sSlotMachine->reelPixelOffsets[reelIndex] % REEL_SYMBOL_HEIGHT;
}
return offset;
}
@@ -1820,42 +2046,45 @@ s16 AdvanceReeltimeReelToNextTag(s16 value)
return offset;
}
-static void GameplayTask_StopSlotReel(void)
+#define tState data[0]
+#define tMoving data[14]
+#define tReelId data[15]
+
+static void CreateSlotReelTasks(void)
{
u8 i;
- for (i = 0; i < 3; i++)
+ for (i = 0; i < NUM_REELS; i++)
{
- u8 taskId = CreateTask(RunSlotReelActions, 2);
- gTasks[taskId].data[15] = i;
+ u8 taskId = CreateTask(Task_RunSlotReelActions, 2);
+ gTasks[taskId].tReelId = i;
sSlotMachine->slotReelTasks[i] = taskId;
- RunSlotReelActions(taskId);
+ Task_RunSlotReelActions(taskId);
}
}
-static void ReelTasks_SetUnkTaskData(u8 reelIndex)
+static void SpinSlotReel(u8 reelIndex)
{
- gTasks[sSlotMachine->slotReelTasks[reelIndex]].data[0] = 1;
- gTasks[sSlotMachine->slotReelTasks[reelIndex]].data[14] = 1;
+ gTasks[sSlotMachine->slotReelTasks[reelIndex]].tState = REEL_ACTION_SPIN;
+ gTasks[sSlotMachine->slotReelTasks[reelIndex]].tMoving = TRUE;
}
-static void sub_8102E1C(u8 reelIndex)
+static void StopSlotReel(u8 reelIndex)
{
- gTasks[sSlotMachine->slotReelTasks[reelIndex]].data[0] = 2;
+ gTasks[sSlotMachine->slotReelTasks[reelIndex]].tState = REEL_ACTION_STOP;
}
static bool8 IsSlotReelMoving(u8 reelIndex)
{
- return gTasks[sSlotMachine->slotReelTasks[reelIndex]].data[14];
+ return gTasks[sSlotMachine->slotReelTasks[reelIndex]].tMoving;
}
-static void RunSlotReelActions(u8 taskId)
+static void Task_RunSlotReelActions(u8 taskId)
{
- while (SlotReelActions[gTasks[taskId].data[0]](&gTasks[taskId]))
+ while (sSlotReelActions[gTasks[taskId].tState](&gTasks[taskId]))
;
}
// task->data[1] reel turns
-// task->data[15] reelIndex
static bool8 SlotReelAction_StayStill(struct Task *task)
{
return FALSE;
@@ -1863,46 +2092,46 @@ static bool8 SlotReelAction_StayStill(struct Task *task)
static bool8 SlotReelAction_Spin(struct Task *task)
{
- AdvanceSlotReel(task->data[15], sSlotMachine->reelIncrement);
+ AdvanceSlotReel(task->tReelId, sSlotMachine->reelIncrement);
return FALSE;
}
// As in previous generations, the slot machine often doesn't stop exactly when you press stop
static bool8 SlotReelAction_DecideWhereToStop(struct Task *task)
{
- task->data[0]++;
- // initialize data for that reel --> these will be changed if gBiasTags can be lined up
- sSlotMachine->winnerRows[task->data[15]] = 0;
- sSlotMachine->reelExtraTurns[task->data[15]] = 0;
+ task->tState++;
+ // initialize data for that reel --> these will be changed if sBiasTags can be lined up
+ sSlotMachine->winnerRows[task->tReelId] = 0;
+ sSlotMachine->reelExtraTurns[task->tReelId] = 0;
- if (sSlotMachine->fairRollsLeft == 0 && (sSlotMachine->luckyFlags == 0 || sSlotMachine->luckySpinsLeft == 0 || !DecideReelTurns_BiasTag[task->data[15]]()))
+ if (sSlotMachine->reelTimeSpinsLeft == 0 && (sSlotMachine->luckyFlags == 0 || !sSlotMachine->isLuckySpin || !sDecideReelTurns_BiasTag[task->tReelId]()))
{
- sSlotMachine->luckySpinsLeft = 0;
- DecideReelTurns_NoBiasTag[task->data[15]]();
+ sSlotMachine->isLuckySpin = FALSE;
+ sDecideReelTurns_NoBiasTag[task->tReelId]();
}
- task->data[1] = sSlotMachine->reelExtraTurns[task->data[15]];
+ task->data[1] = sSlotMachine->reelExtraTurns[task->tReelId];
return TRUE;
}
// go to next tag and then do any additional turns
static bool8 SlotReelAction_MoveToStop(struct Task *task)
{
- u16 reelStopShocks[ARRAY_COUNT(ReelStopShocks)];
+ u16 reelStopShocks[ARRAY_COUNT(sReelStopShocks)];
s16 reelPixelPos;
- memcpy(reelStopShocks, ReelStopShocks, sizeof(ReelStopShocks));
- reelPixelPos = sSlotMachine->reelPixelOffsets[task->data[15]] % 24;
+ memcpy(reelStopShocks, sReelStopShocks, sizeof(sReelStopShocks));
+ reelPixelPos = sSlotMachine->reelPixelOffsets[task->tReelId] % REEL_SYMBOL_HEIGHT;
if (reelPixelPos != 0)
- reelPixelPos = AdvanceSlotReelToNextTag(task->data[15], sSlotMachine->reelIncrement);
- else if (sSlotMachine->reelExtraTurns[task->data[15]])
+ reelPixelPos = AdvanceSlotReelToNextTag(task->tReelId, sSlotMachine->reelIncrement);
+ else if (sSlotMachine->reelExtraTurns[task->tReelId])
{
- sSlotMachine->reelExtraTurns[task->data[15]]--;
- AdvanceSlotReel(task->data[15], sSlotMachine->reelIncrement);
- reelPixelPos = sSlotMachine->reelPixelOffsets[task->data[15]] % 24;
+ sSlotMachine->reelExtraTurns[task->tReelId]--;
+ AdvanceSlotReel(task->tReelId, sSlotMachine->reelIncrement);
+ reelPixelPos = sSlotMachine->reelPixelOffsets[task->tReelId] % REEL_SYMBOL_HEIGHT;
}
- if (reelPixelPos == 0 && sSlotMachine->reelExtraTurns[task->data[15]] == 0)
+ if (reelPixelPos == 0 && sSlotMachine->reelExtraTurns[task->tReelId] == 0)
{
- task->data[0]++;
+ task->tState++;
task->data[1] = reelStopShocks[task->data[1]];
task->data[2] = 0;
}
@@ -1912,35 +2141,39 @@ static bool8 SlotReelAction_MoveToStop(struct Task *task)
// make selected tag oscillate before it becomes still
static bool8 SlotReelAction_OscillatingStop(struct Task *task)
{
- sSlotMachine->reelPixelOffsetsWhileStopping[task->data[15]] = task->data[1];
+ sSlotMachine->reelPixelOffsetsWhileStopping[task->tReelId] = task->data[1];
task->data[1] = -task->data[1];
task->data[2]++;
if ((task->data[2] & 0x3) == 0)
task->data[1] >>= 1;
if (task->data[1] == 0)
{
- task->data[0] = 0;
- task->data[14] = 0;
- sSlotMachine->reelPixelOffsetsWhileStopping[task->data[15]] = 0;
+ task->tState = 0;
+ task->tMoving = FALSE;
+ sSlotMachine->reelPixelOffsetsWhileStopping[task->tReelId] = 0;
}
return FALSE;
}
+#undef tState
+#undef tMoving
+#undef tReelId
+
static bool8 DecideReelTurns_BiasTag_Reel1(void)
{
u8 tag2 = GetBiasTag(sSlotMachine->luckyFlags);
u8 tag1 = tag2;
if (sSlotMachine->luckyFlags & (LUCKY_BIAS_777 | LUCKY_BIAS_MIXED_777))
{
- tag1 = SLOT_MACHINE_TAG_7_RED;
- tag2 = SLOT_MACHINE_TAG_7_BLUE;
+ tag1 = GFXTAG_7_RED;
+ tag2 = GFXTAG_7_BLUE;
}
- return DecideReelTurns_BiasTag_Reel1_Bets[sSlotMachine->bet - 1](tag1, tag2);
+ return sDecideReelTurns_BiasTag_Reel1_Bets[sSlotMachine->bet - 1](tag1, tag2);
}
static bool8 AreTagsAtPosition_Reel1(s16 pos, u8 tag1, u8 tag2)
{
- u8 tag = GetNearbyTag(0, pos);
+ u8 tag = GetTag(LEFT_REEL, pos);
if (tag == tag1 || tag == tag2)
{
sSlotMachine->biasTag = tag;
@@ -1951,7 +2184,9 @@ static bool8 AreTagsAtPosition_Reel1(s16 pos, u8 tag1, u8 tag2)
static bool8 AreCherriesOnScreen_Reel1(s16 offsetFromCenter)
{
- if (GetNearbyTag(0, 1 - offsetFromCenter) == SLOT_MACHINE_TAG_CHERRY || GetNearbyTag(0, 2 - offsetFromCenter) == SLOT_MACHINE_TAG_CHERRY || GetNearbyTag(0, 3 - offsetFromCenter) == SLOT_MACHINE_TAG_CHERRY)
+ if (GetTag(LEFT_REEL, 1 - offsetFromCenter) == GFXTAG_CHERRY
+ || GetTag(LEFT_REEL, 2 - offsetFromCenter) == GFXTAG_CHERRY
+ || GetTag(LEFT_REEL, 3 - offsetFromCenter) == GFXTAG_CHERRY)
return TRUE;
else
return FALSE;
@@ -1974,7 +2209,7 @@ static bool8 DecideReelTurns_BiasTag_Reel1_Bet1(u8 tag1, u8 tag2)
// if a lucky tag appears in the center row within 4 turns
if (AreTagsAtPosition_Reel1(2 - i, tag1, tag2))
{
- sSlotMachine->winnerRows[0] = 2;
+ sSlotMachine->winnerRows[LEFT_REEL] = 2;
sSlotMachine->reelExtraTurns[0] = i;
return TRUE;
}
@@ -2035,7 +2270,7 @@ static bool8 DecideReelTurns_BiasTag_Reel1_Bet2or3(u8 tag1, u8 tag2)
static bool8 DecideReelTurns_BiasTag_Reel2(void)
{
- return DecideReelTurns_BiasTag_Reel2_Bets[sSlotMachine->bet - 1]();
+ return sDecideReelTurns_BiasTag_Reel2_Bets[sSlotMachine->bet - 1]();
}
static bool8 DecideReelTurns_BiasTag_Reel2_Bet1or2(void)
@@ -2046,7 +2281,7 @@ static bool8 DecideReelTurns_BiasTag_Reel2_Bet1or2(void)
for (i = 0; i < 5; i++)
{
// if biasTag appears in the same row within 4 turns
- if (GetNearbyTag(1, biasTagLocation_Reel1 - i) == sSlotMachine->biasTag)
+ if (GetTag(MIDDLE_REEL, biasTagLocation_Reel1 - i) == sSlotMachine->biasTag)
{
sSlotMachine->winnerRows[1] = biasTagLocation_Reel1;
sSlotMachine->reelExtraTurns[1] = i;
@@ -2068,7 +2303,7 @@ static bool8 DecideReelTurns_BiasTag_Reel2_Bet3(void)
for (i = 0; i < 5; i++)
{
//...and if the bias tag will appear in the middle row within 4 turns
- if (GetNearbyTag(1, 2 - i) == sSlotMachine->biasTag)
+ if (GetTag(MIDDLE_REEL, 2 - i) == sSlotMachine->biasTag)
{
sSlotMachine->winnerRows[1] = 2;
sSlotMachine->reelExtraTurns[1] = i;
@@ -2084,7 +2319,7 @@ static bool8 DecideReelTurns_BiasTag_Reel2_Bet3(void)
for (i = 0; i < 5; i++)
{
//...and if the biasTag will appear in the center row of reel 2 within 4 turns
- if (GetNearbyTag(1, 2 - i) == sSlotMachine->biasTag)
+ if (GetTag(MIDDLE_REEL, 2 - i) == sSlotMachine->biasTag)
{
sSlotMachine->winnerRows[1] = 2;
sSlotMachine->reelExtraTurns[1] = i;
@@ -2100,13 +2335,13 @@ static bool8 DecideReelTurns_BiasTag_Reel3(void)
u8 biasTag = sSlotMachine->biasTag;
if (sSlotMachine->luckyFlags & LUCKY_BIAS_MIXED_777)
{
- biasTag = SLOT_MACHINE_TAG_7_RED;
- if (sSlotMachine->biasTag == SLOT_MACHINE_TAG_7_RED)
+ biasTag = GFXTAG_7_RED;
+ if (sSlotMachine->biasTag == GFXTAG_7_RED)
{
- biasTag = SLOT_MACHINE_TAG_7_BLUE;
+ biasTag = GFXTAG_7_BLUE;
}
}
- return DecideReelTurns_BiasTag_Reel3_Bets[sSlotMachine->bet - 1](biasTag);
+ return sDecideReelTurns_BiasTag_Reel3_Bets[sSlotMachine->bet - 1](biasTag);
}
static bool8 DecideReelTurns_BiasTag_Reel3_Bet1or2(u8 biasTag)
@@ -2117,7 +2352,7 @@ static bool8 DecideReelTurns_BiasTag_Reel3_Bet1or2(u8 biasTag)
for (i = 0; i < 5; i++)
{
// if the biasTag appears in the same row as in reel 2 within 4 turns
- if (GetNearbyTag(2, biasTagLocation_Reel2 - i) == biasTag)
+ if (GetTag(RIGHT_REEL, biasTagLocation_Reel2 - i) == biasTag)
{
sSlotMachine->winnerRows[2] = biasTagLocation_Reel2;
sSlotMachine->reelExtraTurns[2] = i;
@@ -2143,7 +2378,7 @@ static bool8 DecideReelTurns_BiasTag_Reel3_Bet3(u8 biasTag)
for (i = 0; i < 5; i++)
{
// if the biasTag lands in that position within 4 turns
- if (GetNearbyTag(2, biasTagFinalPos - i) == biasTag)
+ if (GetTag(RIGHT_REEL, biasTagFinalPos - i) == biasTag)
{
sSlotMachine->reelExtraTurns[2] = i;
sSlotMachine->winnerRows[2] = biasTagFinalPos;
@@ -2166,14 +2401,14 @@ static void DecideReelTurns_NoBiasTag_Reel1(void)
static bool8 IsBiasTag777_SwitchColor(u8 *biasTagPtr)
{
- if (*biasTagPtr == SLOT_MACHINE_TAG_7_RED)
+ if (*biasTagPtr == GFXTAG_7_RED)
{
- *biasTagPtr = SLOT_MACHINE_TAG_7_BLUE;
+ *biasTagPtr = GFXTAG_7_BLUE;
return TRUE;
}
- if (*biasTagPtr == SLOT_MACHINE_TAG_7_BLUE)
+ if (*biasTagPtr == GFXTAG_7_BLUE)
{
- *biasTagPtr = SLOT_MACHINE_TAG_7_RED;
+ *biasTagPtr = GFXTAG_7_RED;
return TRUE;
}
return FALSE;
@@ -2181,7 +2416,7 @@ static bool8 IsBiasTag777_SwitchColor(u8 *biasTagPtr)
static void DecideReelTurns_NoBiasTag_Reel2(void)
{
- DecideReelTurns_NoBiasTag_Reel2_Bets[sSlotMachine->bet - 1]();
+ sDecideReelTurns_NoBiasTag_Reel2_Bets[sSlotMachine->bet - 1]();
}
// only does stuff if the biasTag is one of the 7's, plus other conditions
@@ -2189,7 +2424,7 @@ static void DecideReelTurns_NoBiasTag_Reel2_Bet1(void)
{
if (sSlotMachine->winnerRows[0] != 0 && sSlotMachine->luckyFlags & LUCKY_BIAS_777)
{
- u8 biasTag = GetNearbyTag(0, 2 - sSlotMachine->reelExtraTurns[0]);
+ u8 biasTag = GetTag(LEFT_REEL, 2 - sSlotMachine->reelExtraTurns[0]);
//...and if biasTag is one of the 7's...
if (IsBiasTag777_SwitchColor(&biasTag))
//...swap color of biasTag...
@@ -2198,7 +2433,7 @@ static void DecideReelTurns_NoBiasTag_Reel2_Bet1(void)
for (i = 0; i < 5; i++)
{
//...and if the biasTag appears within 4 turns
- if (biasTag == GetNearbyTag(1, 2 - i))
+ if (biasTag == GetTag(MIDDLE_REEL, 2 - i))
{
sSlotMachine->winnerRows[1] = 2;
sSlotMachine->reelExtraTurns[1] = i;
@@ -2213,7 +2448,7 @@ static void DecideReelTurns_NoBiasTag_Reel2_Bet2(void)
{
if (sSlotMachine->winnerRows[0] != 0 && sSlotMachine->luckyFlags & LUCKY_BIAS_777)
{
- u8 biasTag = GetNearbyTag(0, sSlotMachine->winnerRows[0] - sSlotMachine->reelExtraTurns[0]);
+ u8 biasTag = GetTag(LEFT_REEL, sSlotMachine->winnerRows[0] - sSlotMachine->reelExtraTurns[0]);
//...and if biasTag is one of the 7's...
if (IsBiasTag777_SwitchColor(&biasTag))
//...swap color of biasTag...
@@ -2222,7 +2457,7 @@ static void DecideReelTurns_NoBiasTag_Reel2_Bet2(void)
for (i = 0; i < 5; i++)
{
//...and if the biasTag appears in same row in reel 2 within 4 turns
- if (biasTag == GetNearbyTag(1, sSlotMachine->winnerRows[0] - i))
+ if (biasTag == GetTag(MIDDLE_REEL, sSlotMachine->winnerRows[0] - i))
{
sSlotMachine->winnerRows[1] = sSlotMachine->winnerRows[0];
sSlotMachine->reelExtraTurns[1] = i;
@@ -2247,7 +2482,7 @@ static void DecideReelTurns_NoBiasTag_Reel2_Bet3(void)
}
else
{
- u8 biasTag = GetNearbyTag(0, sSlotMachine->winnerRows[0] - sSlotMachine->reelExtraTurns[0]);
+ u8 biasTag = GetTag(LEFT_REEL, sSlotMachine->winnerRows[0] - sSlotMachine->reelExtraTurns[0]);
//...and if biasTag is one of the 7's...
if (IsBiasTag777_SwitchColor(&biasTag))
//...swap the color of the 7...
@@ -2257,7 +2492,7 @@ static void DecideReelTurns_NoBiasTag_Reel2_Bet3(void)
j = 3;
for (i = 0; i < 2; i++, j--)
{
- if (biasTag == GetNearbyTag(1, j))
+ if (biasTag == GetTag(MIDDLE_REEL, j))
{
sSlotMachine->winnerRows[1] = j;
sSlotMachine->reelExtraTurns[1] = 0;
@@ -2266,7 +2501,7 @@ static void DecideReelTurns_NoBiasTag_Reel2_Bet3(void)
}
for (j = 1; j < 5; j++)
{
- if (biasTag == GetNearbyTag(1, sSlotMachine->winnerRows[0] - j))
+ if (biasTag == GetTag(MIDDLE_REEL, sSlotMachine->winnerRows[0] - j))
{
if (sSlotMachine->winnerRows[0] == 1)
{
@@ -2304,7 +2539,7 @@ static void DecideReelTurns_NoBiasTag_Reel2_Bet3(void)
static bool8 AreTagsMixed77(u8 tag1, u8 tag2)
{
- if ((tag1 == SLOT_MACHINE_TAG_7_RED && tag2 == SLOT_MACHINE_TAG_7_BLUE) || (tag1 == SLOT_MACHINE_TAG_7_BLUE && tag2 == SLOT_MACHINE_TAG_7_RED))
+ if ((tag1 == GFXTAG_7_RED && tag2 == GFXTAG_7_BLUE) || (tag1 == GFXTAG_7_BLUE && tag2 == GFXTAG_7_RED))
return TRUE;
else
return FALSE;
@@ -2312,8 +2547,8 @@ static bool8 AreTagsMixed77(u8 tag1, u8 tag2)
static bool8 AreTagsMixed777(u8 tag1, u8 tag2, u8 tag3)
{
- if ((tag1 == SLOT_MACHINE_TAG_7_RED && tag2 == SLOT_MACHINE_TAG_7_BLUE && tag3 == SLOT_MACHINE_TAG_7_RED) ||
- (tag1 == SLOT_MACHINE_TAG_7_BLUE && tag2 == SLOT_MACHINE_TAG_7_RED && tag3 == SLOT_MACHINE_TAG_7_BLUE))
+ if ((tag1 == GFXTAG_7_RED && tag2 == GFXTAG_7_BLUE && tag3 == GFXTAG_7_RED) ||
+ (tag1 == GFXTAG_7_BLUE && tag2 == GFXTAG_7_RED && tag3 == GFXTAG_7_BLUE))
return TRUE;
else
return FALSE;
@@ -2321,10 +2556,10 @@ static bool8 AreTagsMixed777(u8 tag1, u8 tag2, u8 tag3)
static bool8 TagsDontMatchOrHaveAny7s(u8 tag1, u8 tag2, u8 tag3)
{
- if ((tag1 == SLOT_MACHINE_TAG_7_RED && tag2 == SLOT_MACHINE_TAG_7_BLUE && tag3 == SLOT_MACHINE_TAG_7_RED) ||
- (tag1 == SLOT_MACHINE_TAG_7_BLUE && tag2 == SLOT_MACHINE_TAG_7_RED && tag3 == SLOT_MACHINE_TAG_7_BLUE) ||
- (tag1 == SLOT_MACHINE_TAG_7_RED && tag2 == SLOT_MACHINE_TAG_7_RED && tag3 == SLOT_MACHINE_TAG_7_BLUE) ||
- (tag1 == SLOT_MACHINE_TAG_7_BLUE && tag2 == SLOT_MACHINE_TAG_7_BLUE && tag3 == SLOT_MACHINE_TAG_7_RED) ||
+ if ((tag1 == GFXTAG_7_RED && tag2 == GFXTAG_7_BLUE && tag3 == GFXTAG_7_RED) ||
+ (tag1 == GFXTAG_7_BLUE && tag2 == GFXTAG_7_RED && tag3 == GFXTAG_7_BLUE) ||
+ (tag1 == GFXTAG_7_RED && tag2 == GFXTAG_7_RED && tag3 == GFXTAG_7_BLUE) ||
+ (tag1 == GFXTAG_7_BLUE && tag2 == GFXTAG_7_BLUE && tag3 == GFXTAG_7_RED) ||
(tag1 == tag2 && tag1 == tag3))
{
return FALSE;
@@ -2334,14 +2569,14 @@ static bool8 TagsDontMatchOrHaveAny7s(u8 tag1, u8 tag2, u8 tag3)
static void DecideReelTurns_NoBiasTag_Reel3(void)
{
- DecideReelTurns_NoBiasTag_Reel3_Bets[sSlotMachine->bet - 1]();
+ sDecideReelTurns_NoBiasTag_Reel3_Bets[sSlotMachine->bet - 1]();
}
static void DecideReelTurns_NoBiasTag_Reel3_Bet1(void)
{
s16 i = 0;
- u8 tag1 = GetNearbyTag(0, 2 - sSlotMachine->reelExtraTurns[0]);
- u8 tag2 = GetNearbyTag(1, 2 - sSlotMachine->reelExtraTurns[1]);
+ u8 tag1 = GetTag(LEFT_REEL, 2 - sSlotMachine->reelExtraTurns[0]);
+ u8 tag2 = GetTag(MIDDLE_REEL, 2 - sSlotMachine->reelExtraTurns[1]);
// if tags match in first 2 reels...
if (tag1 == tag2)
{
@@ -2349,7 +2584,7 @@ static void DecideReelTurns_NoBiasTag_Reel3_Bet1(void)
while (1)
{
u8 tag3;
- if (!(tag1 == (tag3 = GetNearbyTag(2, 2 - i)) || (tag1 == SLOT_MACHINE_TAG_7_RED && tag3 == SLOT_MACHINE_TAG_7_BLUE) || (tag1 == SLOT_MACHINE_TAG_7_BLUE && tag3 == SLOT_MACHINE_TAG_7_RED)))
+ if (!(tag1 == (tag3 = GetTag(RIGHT_REEL, 2 - i)) || (tag1 == GFXTAG_7_RED && tag3 == GFXTAG_7_BLUE) || (tag1 == GFXTAG_7_BLUE && tag3 == GFXTAG_7_RED)))
break;
i++;
}
@@ -2361,7 +2596,7 @@ static void DecideReelTurns_NoBiasTag_Reel3_Bet1(void)
//...see if you can match with reel 1 within 4 turns
for (i = 0; i < 5; i++)
{
- if (tag1 == GetNearbyTag(2, 2 - i))
+ if (tag1 == GetTag(RIGHT_REEL, 2 - i))
{
sSlotMachine->reelExtraTurns[2] = i;
return;
@@ -2372,7 +2607,7 @@ static void DecideReelTurns_NoBiasTag_Reel3_Bet1(void)
i = 0;
while (1)
{
- if (tag1 != GetNearbyTag(2, 2 - i))
+ if (tag1 != GetTag(RIGHT_REEL, 2 - i))
break;
i++;
}
@@ -2389,15 +2624,15 @@ static void DecideReelTurns_NoBiasTag_Reel3_Bet2(void)
u8 tag3;
if (sSlotMachine->winnerRows[1] != 0 && sSlotMachine->winnerRows[0] == sSlotMachine->winnerRows[1] && sSlotMachine->luckyFlags & LUCKY_BIAS_777)
{
- tag1 = GetNearbyTag(0, sSlotMachine->winnerRows[0] - sSlotMachine->reelExtraTurns[0]);
- tag2 = GetNearbyTag(1, sSlotMachine->winnerRows[1] - sSlotMachine->reelExtraTurns[1]);
+ tag1 = GetTag(LEFT_REEL, sSlotMachine->winnerRows[0] - sSlotMachine->reelExtraTurns[0]);
+ tag2 = GetTag(MIDDLE_REEL, sSlotMachine->winnerRows[1] - sSlotMachine->reelExtraTurns[1]);
//...and if tags are mixed 7s...
if (AreTagsMixed77(tag1, tag2))
{
//...try to match with reel 1 within 4 turns
for (i = 0; i < 5; i++)
{
- tag3 = GetNearbyTag(2, sSlotMachine->winnerRows[1] - i);
+ tag3 = GetTag(RIGHT_REEL, sSlotMachine->winnerRows[1] - i);
if (tag1 == tag3)
{
extraTurns = i;
@@ -2412,9 +2647,9 @@ static void DecideReelTurns_NoBiasTag_Reel3_Bet2(void)
s16 loopExit;
for (i = 1, loopExit = 0; i < 4; i++)
{
- tag1 = GetNearbyTag(0, i - sSlotMachine->reelExtraTurns[0]); // why does this update with i
- tag2 = GetNearbyTag(1, i - sSlotMachine->reelExtraTurns[1]);
- tag3 = GetNearbyTag(2, i - extraTurns);
+ tag1 = GetTag(LEFT_REEL, i - sSlotMachine->reelExtraTurns[0]); // why does this update with i
+ tag2 = GetTag(MIDDLE_REEL, i - sSlotMachine->reelExtraTurns[1]);
+ tag3 = GetTag(RIGHT_REEL, i - extraTurns);
// if bit 7 of luckyFlags is unset...
//...and if all 3 tags match and they're not mixed 7s
if (!TagsDontMatchOrHaveAny7s(tag1, tag2, tag3) && (!AreTagsMixed777(tag1, tag2, tag3) || !(sSlotMachine->luckyFlags & LUCKY_BIAS_777)))
@@ -2441,8 +2676,8 @@ static void DecideReelTurns_NoBiasTag_Reel3_Bet3(void)
DecideReelTurns_NoBiasTag_Reel3_Bet2();
if (sSlotMachine->winnerRows[1] != 0 && sSlotMachine->winnerRows[0] != sSlotMachine->winnerRows[1] && sSlotMachine->luckyFlags & LUCKY_BIAS_777)
{
- tag1 = GetNearbyTag(0, sSlotMachine->winnerRows[0] - sSlotMachine->reelExtraTurns[0]);
- tag2 = GetNearbyTag(1, sSlotMachine->winnerRows[1] - sSlotMachine->reelExtraTurns[1]);
+ tag1 = GetTag(LEFT_REEL, sSlotMachine->winnerRows[0] - sSlotMachine->reelExtraTurns[0]);
+ tag2 = GetTag(MIDDLE_REEL, sSlotMachine->winnerRows[1] - sSlotMachine->reelExtraTurns[1]);
//..and if tags are mixed 7s...
if (AreTagsMixed77(tag1, tag2))
{
@@ -2451,7 +2686,7 @@ static void DecideReelTurns_NoBiasTag_Reel3_Bet3(void)
j = 3;
for (i = 0; i < 5; i++)
{
- tag3 = GetNearbyTag(2, j - (sSlotMachine->reelExtraTurns[2] + i));
+ tag3 = GetTag(RIGHT_REEL, j - (sSlotMachine->reelExtraTurns[2] + i));
if (tag1 == tag3)
{
sSlotMachine->reelExtraTurns[2] += i;
@@ -2462,291 +2697,330 @@ static void DecideReelTurns_NoBiasTag_Reel3_Bet3(void)
}
while (1)
{
- tag1 = GetNearbyTag(0, 1 - sSlotMachine->reelExtraTurns[0]);
- tag2 = GetNearbyTag(1, 2 - sSlotMachine->reelExtraTurns[1]);
- tag3 = GetNearbyTag(2, 3 - sSlotMachine->reelExtraTurns[2]);
+ tag1 = GetTag(LEFT_REEL, 1 - sSlotMachine->reelExtraTurns[0]);
+ tag2 = GetTag(MIDDLE_REEL, 2 - sSlotMachine->reelExtraTurns[1]);
+ tag3 = GetTag(RIGHT_REEL, 3 - sSlotMachine->reelExtraTurns[2]);
if (TagsDontMatchOrHaveAny7s(tag1, tag2, tag3) || (AreTagsMixed777(tag1, tag2, tag3) && sSlotMachine->luckyFlags & LUCKY_BIAS_777))
break;
sSlotMachine->reelExtraTurns[2]++;
}
while (1)
{
- tag1 = GetNearbyTag(0, 3 - sSlotMachine->reelExtraTurns[0]);
- tag2 = GetNearbyTag(1, 2 - sSlotMachine->reelExtraTurns[1]);
- tag3 = GetNearbyTag(2, 1 - sSlotMachine->reelExtraTurns[2]);
+ tag1 = GetTag(LEFT_REEL, 3 - sSlotMachine->reelExtraTurns[0]);
+ tag2 = GetTag(MIDDLE_REEL, 2 - sSlotMachine->reelExtraTurns[1]);
+ tag3 = GetTag(RIGHT_REEL, 1 - sSlotMachine->reelExtraTurns[2]);
if (TagsDontMatchOrHaveAny7s(tag1, tag2, tag3) || (AreTagsMixed777(tag1, tag2, tag3) && sSlotMachine->luckyFlags & LUCKY_BIAS_777))
break;
sSlotMachine->reelExtraTurns[2]++;
}
}
-static void sub_8103C14(u8 a0)
+static void PressStopReelButton(u8 reelNum)
{
- u8 taskId = CreateTask(sub_8103C48, 5);
- gTasks[taskId].data[15] = a0;
- sub_8103C48(taskId);
+ u8 taskId = CreateTask(Task_PressStopReelButton, 5);
+ gTasks[taskId].data[15] = reelNum;
+ Task_PressStopReelButton(taskId);
}
-static void sub_8103C48(u8 taskId)
+static void Task_PressStopReelButton(u8 taskId)
{
- gUnknown_083ECBA0[gTasks[taskId].data[0]](&gTasks[taskId], taskId);
+ sReelStopButtonFuncs[gTasks[taskId].data[0]](&gTasks[taskId], taskId);
}
-static void sub_8103C78(struct Task *task, u8 taskId)
+static void StopReelButton_Press(struct Task *task, u8 taskId)
{
- sub_81065A8(gUnknown_083ECBAC[task->data[15]], 0x62, 0x63, 0x72, 0x73);
+ SetReelButtonTilemap(sReelButtonOffsets[task->data[15]], 0x62, 0x63, 0x72, 0x73);
task->data[0]++;
}
-static void sub_8103CAC(struct Task *task, u8 taskId)
+static void StopReelButton_Wait(struct Task *task, u8 taskId)
{
if (++task->data[1] > 11)
task->data[0]++;
}
-static void sub_8103CC8(struct Task *task, u8 taskId)
+static void StopReelButton_Unpress(struct Task *task, u8 taskId)
{
- sub_81065A8(gUnknown_083ECBAC[task->data[15]], 0x42, 0x43, 0x52, 0x53);
+ SetReelButtonTilemap(sReelButtonOffsets[task->data[15]], 0x42, 0x43, 0x52, 0x53);
DestroyTask(taskId);
}
-static void LoadLitTile(u8 tileId)
+static void LightenMatchLine(u8 matchLineId)
{
- LoadPalette(gUnknown_083EDD08[tileId], gUnknown_083EDD30[tileId], 2);
+ LoadPalette(sLitMatchLinePalTable[matchLineId], sMatchLinePalOffsets[matchLineId], 2);
}
-static void sub_8103D28(u8 a0)
+static void DarkenMatchLine(u8 matchLineId)
{
- LoadPalette(gUnknown_083EDD1C[a0], gUnknown_083EDD30[a0], 2);
+ LoadPalette(sDarkMatchLinePalTable[matchLineId], sMatchLinePalOffsets[matchLineId], 2);
}
-// light up the value bet by the player
-static void LoadBetTiles(u8 betVal)
+// light up the match line for each bet by the player
+static void LightenBetTiles(u8 betVal)
{
u8 i;
- for (i = 0; i < gNumberBettingTiles[betVal]; i++)
- LoadLitTile(gBettingTilesId[betVal][i]);
+ for (i = 0; i < sMatchLinesPerBet[betVal]; i++)
+ LightenMatchLine(sBetToMatchLineIds[betVal][i]);
}
-static void sub_8103D8C(u8 a0)
+static void DarkenBetTiles(u8 betVal)
{
u8 i;
- for (i = 0; i < gNumberBettingTiles[a0]; i++)
- sub_8103D28(gBettingTilesId[a0][i]);
+ for (i = 0; i < sMatchLinesPerBet[betVal]; i++)
+ DarkenMatchLine(sBetToMatchLineIds[betVal][i]);
}
-static void sub_8103DC8(void)
+#define sMatchLineId data[0]
+#define sFlashing data[1]
+#define sNumFullFlashes data[2]
+#define sDelayTimer data[3]
+#define sColor data[4]
+#define sColorIncr data[5]
+#define sAtOriginalColor data[7]
+
+// Creates invisible sprites that flash the bet lines/numbers where a match occurs
+// 5 are created, 1 for each possible match line (3 rows, 2 diagonals)
+static void CreateInvisibleFlashMatchLineSprites(void)
{
u8 i;
- for (i = 0; i < 5; i++)
+ for (i = 0; i < ARRAY_COUNT(sSlotMachine->flashMatchLineSpriteIds); i++)
{
- u8 spriteId = CreateInvisibleSprite(sub_8103EE4);
- gSprites[spriteId].data[0] = i;
- sSlotMachine->unk44[i] = spriteId;
+ u8 spriteId = CreateInvisibleSprite(SpriteCB_FlashMatchingLines);
+ gSprites[spriteId].sMatchLineId = i;
+ sSlotMachine->flashMatchLineSpriteIds[i] = spriteId;
}
}
-static void sub_8103E04(u8 a0)
+static void FlashMatchLine(u8 matchLineId)
{
- struct Sprite *sprite = gSprites + sSlotMachine->unk44[a0];
- sprite->data[1] = 1;
- sprite->data[2] = 4;
- sprite->data[3] = 0;
- sprite->data[4] = 0;
- sprite->data[5] = 2;
- sprite->data[7] = 0;
+ struct Sprite *sprite = &gSprites[sSlotMachine->flashMatchLineSpriteIds[matchLineId]];
+ sprite->sFlashing = TRUE;
+ sprite->sNumFullFlashes = 4;
+ sprite->sDelayTimer = 0;
+ sprite->sColor = 0;
+ sprite->sColorIncr = 2;
+ sprite->sAtOriginalColor = FALSE;
}
-// something with payout digits
-static bool8 sub_8103E38(void)
+// Match line flashes 4 times before the payout begins
+// After this it does half-brightness flashes until the payout finishes
+static bool8 IsMatchLineDoneFlashingBeforePayout(void)
{
u8 i;
- for (i = 0; i < 5; i++)
+ for (i = 0; i < ARRAY_COUNT(sSlotMachine->flashMatchLineSpriteIds); i++)
{
- struct Sprite *sprite = &gSprites[sSlotMachine->unk44[i]];
- if (sprite->data[1] && sprite->data[2])
+ struct Sprite *sprite = &gSprites[sSlotMachine->flashMatchLineSpriteIds[i]];
+ if (sprite->sFlashing && sprite->sNumFullFlashes)
return FALSE;
}
return TRUE;
}
-static bool8 sub_8103E7C(void)
+// When payout is finished, stop lines flashing (but not if they're in the middle of a flash)
+static bool8 TryStopMatchLinesFlashing(void)
{
u8 i;
- for (i = 0; i < 5; i++)
+ for (i = 0; i < ARRAY_COUNT(sSlotMachine->flashMatchLineSpriteIds); i++)
{
- if (!sub_8103EAC(sSlotMachine->unk44[i]))
+ if (!TryStopMatchLineFlashing(sSlotMachine->flashMatchLineSpriteIds[i]))
return FALSE;
}
return TRUE;
}
-static bool8 sub_8103EAC(u8 spriteId)
+static bool8 TryStopMatchLineFlashing(u8 spriteId)
{
- struct Sprite *sprite = gSprites + spriteId;
- if (!sprite->data[1])
+ struct Sprite *sprite = &gSprites[spriteId];
+ if (!sprite->sFlashing)
return TRUE;
- if (sprite->data[7])
- sprite->data[1] = 0;
- return sprite->data[7];
+ if (sprite->sAtOriginalColor)
+ sprite->sFlashing = FALSE;
+
+ return sprite->sAtOriginalColor;
}
-static void sub_8103EE4(struct Sprite *sprite)
+static void SpriteCB_FlashMatchingLines(struct Sprite *sprite)
{
- s16 r4;
- if (sprite->data[1])
+ s16 maxColorChange;
+ if (sprite->sFlashing)
{
- if (!sprite->data[3]--)
+ if (!sprite->sDelayTimer--)
{
- sprite->data[7] = 0;
- sprite->data[3] = 1;
- sprite->data[4] += sprite->data[5];
- r4 = 4;
- if (sprite->data[2])
- r4 = 8;
- if (sprite->data[4] <= 0)
+ sprite->sAtOriginalColor = FALSE;
+ sprite->sDelayTimer = 1;
+ sprite->sColor += sprite->sColorIncr;
+ maxColorChange = 4;
+ if (sprite->sNumFullFlashes)
+ maxColorChange = 8;
+ if (sprite->sColor <= 0)
{
- sprite->data[7] = 1;
- sprite->data[5] = -sprite->data[5];
- if (sprite->data[2])
- sprite->data[2]--;
+ // Returned to original color, reverse
+ sprite->sAtOriginalColor = TRUE;
+ sprite->sColorIncr = -sprite->sColorIncr;
+ if (sprite->sNumFullFlashes)
+ sprite->sNumFullFlashes--;
}
- else if (sprite->data[4] >= r4)
- sprite->data[5] = -sprite->data[5];
- if (sprite->data[2])
- sprite->data[3] <<= 1;
+ else if (sprite->sColor >= maxColorChange) {
+ // Reached peak darkness, reverse
+ sprite->sColorIncr = -sprite->sColorIncr;
+ }
+ if (sprite->sNumFullFlashes)
+ sprite->sDelayTimer <<= 1;
}
- MultiplyPaletteRGBComponents(gUnknown_083EDD30[sprite->data[0]], sprite->data[4], sprite->data[4], sprite->data[4]);
+ MultiplyPaletteRGBComponents(sMatchLinePalOffsets[sprite->sMatchLineId], sprite->sColor, sprite->sColor, sprite->sColor);
}
}
-static void sub_8103F70(void)
+#undef sMatchLineId
+#undef sFlashing
+#undef sNumFullFlashes
+#undef sDelayTimer
+#undef sColor
+#undef sColorIncr
+#undef sAtOriginalColor
+
+#define sDelayTimer data[1]
+#define sFlashState data[2]
+#define sFlashDir data[3]
+
+static void FlashSlotMachineLights(void)
{
- u8 taskId = CreateTask(sub_8103FE8_, 6);
- gTasks[taskId].data[3] = 1;
- sub_8103FE8_(taskId);
+ u8 taskId = CreateTask(Task_FlashSlotMachineLights, 6);
+ gTasks[taskId].sFlashDir = 1;
+ Task_FlashSlotMachineLights(taskId);
}
-static bool8 sub_8103FA0(void)
+static bool8 TryStopSlotMachineLights(void)
{
- u8 taskId = FindTaskIdByFunc(sub_8103FE8_);
- if (!gTasks[taskId].data[2])
+ u8 taskId = FindTaskIdByFunc(Task_FlashSlotMachineLights);
+ if (gTasks[taskId].sFlashState == 0)
{
DestroyTask(taskId);
- LoadPalette(gUnknown_083EDDAC, 0x10, 0x20);
+ LoadPalette(sSlotMachineMenu_Pal, 0x10, 0x20);
return TRUE;
}
return FALSE;
}
-static void sub_8103FE8_(u8 taskId)
+static void Task_FlashSlotMachineLights(u8 taskId)
{
struct Task *task = &gTasks[taskId];
- if (!task->data[1]--)
+ if (!task->sDelayTimer--)
{
- task->data[1] = 4;
- task->data[2] += task->data[3];
- if (task->data[2] == 0 || task->data[2] == 2)
- task->data[3] = -task->data[3];
+ task->sDelayTimer = 4;
+ task->sFlashState += task->sFlashDir;
+ if (task->sFlashState == 0 || task->sFlashState == 2)
+ task->sFlashDir = -task->sFlashDir;
}
- LoadPalette(gUnknown_083EDDA0[task->data[2]], 0x10, 0x20);
+ LoadPalette(sFlashingLightsPalTable[task->sFlashState], 0x10, 0x20);
}
-static void GameplayTask_PikaPower(void)
+#undef sDelayTimer
+#undef sFlashState
+#undef sFlashDir
+
+#define tState data[0]
+#define tNumBolts data[1]
+#define tSpriteId data[2]
+#define tTimer data[2] // re-used
+#define tAnimating data[15]
+
+static void CreatePikaPowerBoltTask(void)
{
- sSlotMachine->unkTaskPointer3E = CreateTask(sub_81040E8, 8);
+ sSlotMachine->pikaPowerBoltTaskId = CreateTask(Task_CreatePikaPowerBolt, 8);
}
-static void DisplayPikaPower(u8 pikaPower)
+static void AddPikaPowerBolt(u8 pikaPower)
{
- struct Task *task = &gTasks[sSlotMachine->unkTaskPointer3E];
- ClearTaskDataFields_2orHigher(task);
- task->data[0] = 1;
- task->data[1]++;
- task->data[15] = 1; // points to a reelIndex
+ struct Task *task = &gTasks[sSlotMachine->pikaPowerBoltTaskId];
+ ResetPikaPowerBoltTask(task);
+ task->tState = 1;
+ task->tNumBolts++;
+ task->tAnimating = TRUE;
}
-static void sub_8104098(void)
+static void ResetPikaPowerBolts(void)
{
- struct Task *task = &gTasks[sSlotMachine->unkTaskPointer3E];
- ClearTaskDataFields_2orHigher(task);
- task->data[0] = 3;
- task->data[15] = 1; // points to a reelIndex
+ struct Task *task = &gTasks[sSlotMachine->pikaPowerBoltTaskId];
+ ResetPikaPowerBoltTask(task);
+ task->tState = 3;
+ task->tAnimating = TRUE;
}
-static bool8 sub_81040C8(void)
+static bool8 IsPikaPowerBoltAnimating(void)
{
- return gTasks[sSlotMachine->unkTaskPointer3E].data[15];
+ return gTasks[sSlotMachine->pikaPowerBoltTaskId].tAnimating;
}
-static void sub_81040E8(u8 taskId)
+static void Task_CreatePikaPowerBolt(u8 taskId)
{
- gUnknown_083ECBB4[gTasks[taskId].data[0]](&gTasks[taskId]);
+ sPikaPowerBoltFuncs[gTasks[taskId].tState](&gTasks[taskId]);
}
-static void nullsub_68(struct Task *task)
+static void PikaPowerBolt_Idle(struct Task *task)
{
}
-static void sub_810411C(struct Task *task)
+static void PikaPowerBolt_AddBolt(struct Task *task)
{
- task->data[2] = sub_8105B1C((task->data[1] << 3) + 20, 20);
- task->data[0]++;
+ task->tSpriteId = CreatePikaPowerBoltSprite((task->tNumBolts << 3) + 20, 20);
+ task->tState++;
}
-static void sub_8104144(struct Task *task)
+// The bolt sprite spins around as it appears
+// Once the anim is done, destroy the sprite and set the bolt in the tilemap instead
+static void PikaPowerBolt_WaitAnim(struct Task *task)
{
- if (gSprites[task->data[2]].data[7])
+ if (gSprites[task->tSpriteId].data[7])
{
- s16 r5 = task->data[1] + 2;
+ s16 r5 = task->tNumBolts + 2;
s16 r3 = 0;
s16 r2 = 0;
- if (task->data[1] == 1)
+ if (task->tNumBolts == 1)
r3 = 1, r2 = 1;
- else if (task->data[1] == 16)
+ else if (task->tNumBolts == 16)
r3 = 2, r2 = 2;
- sSelectedPikaPowerTile[r2] = pikaPowerTileTable[r3][0];
+ sSelectedPikaPowerTile[r2] = sPikaPowerTileTable[r3][0];
LoadBgTilemap(2, &sSelectedPikaPowerTile[r2], 2, r5 + 0x40);
- sub_8105B88(task->data[2]);
- task->data[0] = 0;
- task->data[15] = 0; // points to a reelIndex
+ DestroyPikaPowerBoltSprite(task->tSpriteId);
+ task->tState = 0;
+ task->tAnimating = 0;
}
}
-static void sub_81041AC(struct Task *task)
+static void PikaPowerBolt_ClearAll(struct Task *task)
{
- s16 r5 = task->data[1] + 2;
+ s16 r5 = task->tNumBolts + 2;
s16 r3 = 0;
s16 r2 = 3;
- if (task->data[1] == 1)
+ if (task->tNumBolts == 1)
r3 = 1, r2 = 1;
- else if (task->data[1] == 16)
+ else if (task->tNumBolts == 16)
r3 = 2, r2 = 2;
- if (task->data[2] == 0)
+ if (task->tTimer == 0)
{
- sSelectedPikaPowerTile[r2] = pikaPowerTileTable[r3][1];
+ sSelectedPikaPowerTile[r2] = sPikaPowerTileTable[r3][1];
LoadBgTilemap(2, &sSelectedPikaPowerTile[r2], 2, r5 + 0x40);
- task->data[1]--;
+ task->tNumBolts--;
}
- if (++task->data[2] >= 20)
- task->data[2] = 0;
- if (task->data[1] == 0)
+ if (++task->tTimer >= 20)
+ task->tTimer = 0;
+ if (task->tNumBolts == 0)
{
- task->data[0] = 0;
- task->data[15] = 0;
+ task->tState = 0;
+ task->tAnimating = 0;
}
}
-static void ClearTaskDataFields_2orHigher(struct Task *task)
+static void ResetPikaPowerBoltTask(struct Task *task)
{
u8 i;
- for (i = 2; i < 16; i++)
+ for (i = 2; i < NUM_TASK_DATA; i++)
task->data[i] = 0;
}
-// possibly load tiles for pika power meter
-static void sub_810423C(u8 pikaPower)
+static void LoadPikaPowerMeter(u8 pikaPower)
{
s16 i;
s16 r3 = 0, r1 = 0;
@@ -2758,7 +3032,7 @@ static void sub_810423C(u8 pikaPower)
r3 = 1, r1 = 1;
else if (i == 15) // pikaPower meter is full
r3 = 2, r1 = 2;
- sSelectedPikaPowerTile[r1] = pikaPowerTileTable[r3][0];
+ sSelectedPikaPowerTile[r1] = sPikaPowerTileTable[r3][0];
LoadBgTilemap(2, &sSelectedPikaPowerTile[r1], 2, r4 + 0x40);
}
for (; i < 16; i++, r4++)
@@ -2768,40 +3042,47 @@ static void sub_810423C(u8 pikaPower)
r3 = 1, r1 = 1;
else if (i == 15)
r3 = 2, r1 = 2;
- sSelectedPikaPowerTile[r1] = pikaPowerTileTable[r3][1];
+ sSelectedPikaPowerTile[r1] = sPikaPowerTileTable[r3][1];
LoadBgTilemap(2, &sSelectedPikaPowerTile[r1], 2, r4 + 0x40);
}
- gTasks[sSlotMachine->unkTaskPointer3E].data[1] = pikaPower;
+ gTasks[sSlotMachine->pikaPowerBoltTaskId].data[1] = pikaPower;
}
-static void BeginReeltime(void)
+#undef tState
+#undef tNumBolts
+#undef tSpriteId
+#undef tTimer
+#undef tAnimating
+
+#define tState data[0]
+
+static void BeginReelTime(void)
{
- u8 taskId = CreateTask(RunReeltimeActions, 7);
- RunReeltimeActions(taskId);
+ u8 taskId = CreateTask(Task_ReelTime, 7);
+ Task_ReelTime(taskId);
}
-static bool8 IsFinalTask_RunReelTimeActions(void)
+static bool8 IsReelTimeTaskDone(void)
{
- if (FindTaskIdByFunc(RunReeltimeActions) == TAIL_SENTINEL)
+ if (FindTaskIdByFunc(Task_ReelTime) == TAIL_SENTINEL)
return TRUE;
return FALSE;
}
-static void RunReeltimeActions(u8 taskId)
+static void Task_ReelTime(u8 taskId)
{
- // task.data[0] points to which ReelTimeAction to do, and starts at 0
// task.data[1] has something to do with the threshold
// task.data[4] says how many pixels to advance the reel
// task.data[5] is a timer
- ReeltimeActions[gTasks[taskId].data[0]](&gTasks[taskId]);
+ sReelTimeActions[gTasks[taskId].tState](&gTasks[taskId]);
}
-static void ReeltimeAction0(struct Task *task)
+static void ReelTime_Init(struct Task *task)
{
- sSlotMachine->fairRollsLeft = 0;
+ sSlotMachine->reelTimeSpinsLeft = 0;
sSlotMachine->reeltimePixelOffset = 0;
sSlotMachine->reeltimePosition = 0;
- task->data[0]++;
+ task->tState++;
task->data[1] = 0;
task->data[2] = 30;
task->data[4] = 1280; // reel speed
@@ -2809,18 +3090,18 @@ static void ReeltimeAction0(struct Task *task)
gSpriteCoordOffsetY = 0;
SetGpuReg(REG_OFFSET_BG1HOFS, 0);
SetGpuReg(REG_OFFSET_BG1VOFS, 0);
- sub_8104A40(REG_OFFSET_BG3VOFS, 0);
- sub_81051C0();
- sub_8105100();
- sub_81052EC();
- sub_81053A0();
- sub_810545C();
+ LoadReelTimeWindowTilemap(REG_OFFSET_BG3VOFS, 0);
+ CreateReelTimeMachineSprites();
+ CreateReelTimePikachuSprite();
+ CreateReelTimeNumberSprites();
+ CreateReelTimeShadowSprites();
+ CreateReelTimeNumberGapSprite();
GetReeltimeDraw();
StopMapMusic();
- PlayNewMapMusic(MUS_BD_TIME);
+ PlayNewMapMusic(MUS_ROULETTE);
}
-static void ReeltimeAction1(struct Task *task)
+static void ReelTime_WindowEnter(struct Task *task)
{
s16 r3;
gSpriteCoordOffsetX -= 8;
@@ -2831,78 +3112,78 @@ static void ReeltimeAction1(struct Task *task)
{
task->data[2] = r3;
task->data[3] = task->data[1] >> 3;
- sub_8104A40(r3, task->data[3]);
+ LoadReelTimeWindowTilemap(r3, task->data[3]);
}
if (task->data[1] >= 200)
{
- task->data[0]++;
+ task->tState++;
task->data[3] = 0;
}
AdvanceReeltimeReel(task->data[4] >> 8);
}
-static void ReeltimeAction2(struct Task *task)
+static void ReelTime_WaitStartPikachu(struct Task *task)
{
AdvanceReeltimeReel(task->data[4] >> 8);
if (++task->data[5] >= 60)
{
- task->data[0]++;
- CreateReelTimeSprites1();
- CreateReelTimeSprite2();
+ task->tState++;
+ CreateReelTimeBoltSprites();
+ CreateReelTimePikachuAuraSprites();
}
}
-static void ReeltimeAction3(struct Task *task)
+static void ReelTime_PikachuSpeedUp1(struct Task *task)
{
- int r5;
- u8 sp0[ARRAY_COUNT(gUnknown_085A75C0)];
- s16 sp4[ARRAY_COUNT(gUnknown_085A75C4)];
- s16 spC[ARRAY_COUNT(gUnknown_085A75CC)];
+ int i;
+ u8 pikachuAnimIds[ARRAY_COUNT(sReelTimePikachuAnimIds)];
+ s16 reelTimeBoltDelays[ARRAY_COUNT(sReelTimeBoltDelays)];
+ s16 pikachuAuraFlashDelays[ARRAY_COUNT(sPikachuAuraFlashDelays)];
- memcpy(sp0, gUnknown_085A75C0, sizeof(gUnknown_085A75C0));
- memcpy(sp4, gUnknown_085A75C4, sizeof(gUnknown_085A75C4));
- memcpy(spC, gUnknown_085A75CC, sizeof(gUnknown_085A75CC));
+ memcpy(pikachuAnimIds, sReelTimePikachuAnimIds, sizeof(sReelTimePikachuAnimIds));
+ memcpy(reelTimeBoltDelays, sReelTimeBoltDelays, sizeof(sReelTimeBoltDelays));
+ memcpy(pikachuAuraFlashDelays, sPikachuAuraFlashDelays, sizeof(sPikachuAuraFlashDelays));
AdvanceReeltimeReel(task->data[4] >> 8);
// gradually slow down the reel
task->data[4] -= 4;
- r5 = 4 - (task->data[4] >> 8);
- sub_8105688(sp4[r5]);
- sub_81057E8(spC[r5]);
- StartSpriteAnimIfDifferent(gSprites + sSlotMachine->reelTimeSprite3F, sp0[r5]);
+ i = 4 - (task->data[4] >> 8);
+ SetReelTimeBoltDelay(reelTimeBoltDelays[i]);
+ SetReelTimePikachuAuraFlashDelay(pikachuAuraFlashDelays[i]);
+ StartSpriteAnimIfDifferent(&gSprites[sSlotMachine->reelTimePikachuSpriteId], pikachuAnimIds[i]);
// once speed goes below 256, go to next ReelTimeAction and keep the speed level
if (task->data[4] <= 0x100)
{
- task->data[0]++;
+ task->tState++;
task->data[4] = 0x100;
task->data[5] = 0;
}
}
-static void ReeltimeAction4(struct Task *task)
+static void ReelTime_PikachuSpeedUp2(struct Task *task)
{
AdvanceReeltimeReel(task->data[4] >> 8);
if (++task->data[5] >= 80)
{
- task->data[0]++;
+ task->tState++;
task->data[5] = 0;
- sub_81057E8(2);
- StartSpriteAnimIfDifferent(gSprites + sSlotMachine->reelTimeSprite3F, 3);
+ SetReelTimePikachuAuraFlashDelay(2);
+ StartSpriteAnimIfDifferent(&gSprites[sSlotMachine->reelTimePikachuSpriteId], 3);
}
}
-static void ReeltimeAction5(struct Task *task)
+static void ReelTime_WaitReel(struct Task *task)
{
AdvanceReeltimeReel(task->data[4] >> 8);
task->data[4] = (u8)task->data[4] + 0x80;
if (++task->data[5] >= 80)
{
- task->data[0]++;
+ task->tState++;
task->data[5] = 0;
}
}
-static void ReeltimeAction6(struct Task *task)
+static void ReelTime_CheckExplode(struct Task *task)
{
AdvanceReeltimeReel(task->data[4] >> 8);
task->data[4] = (u8)task->data[4] + 0x40;
@@ -2911,22 +3192,22 @@ static void ReeltimeAction6(struct Task *task)
task->data[5] = 0;
if (sSlotMachine->reelTimeDraw)
{
- if (sSlotMachine->fairRollsLeft <= task->data[6])
- task->data[0]++;
+ if (sSlotMachine->reelTimeSpinsLeft <= task->data[6])
+ task->tState++;
}
else if (task->data[6] > 3)
{
- task->data[0]++;
+ task->tState++;
}
- else if (SkipToReeltimeAction14(task->data[6]))
+ else if (ShouldReelTimeMachineExplode(task->data[6]))
{
- task->data[0] = 14;
+ task->tState = 14; // ReelTime_ExplodeMachine
}
task->data[6]++;
}
}
-static void ReelTimeAction_LandOnOutcome(struct Task *task)
+static void ReelTime_LandOnOutcome(struct Task *task)
{
s16 reeltimePixelOffset = sSlotMachine->reeltimePixelOffset % 20;
if (reeltimePixelOffset)
@@ -2943,46 +3224,46 @@ static void ReelTimeAction_LandOnOutcome(struct Task *task)
if (reeltimePixelOffset == 0 && GetNearbyReelTimeTag(1) == sSlotMachine->reelTimeDraw)
{
task->data[4] = 0; // stop moving
- task->data[0]++;
+ task->tState++;
}
}
-static void ReeltimeAction8(struct Task *task)
+static void ReelTime_PikachuReact(struct Task *task)
{
if (++task->data[4] >= 60)
{
StopMapMusic();
- sub_81056C0();
- sub_8105804();
- task->data[0]++;
+ DestroyReelTimeBoltSprites();
+ DestroyReelTimePikachuAuraSprites();
+ task->tState++;
if(sSlotMachine->reelTimeDraw == 0)
{
task->data[4] = 0xa0;
- StartSpriteAnimIfDifferent(gSprites + sSlotMachine->reelTimeSprite3F, 5);
- PlayFanfare(MUS_ME_ZANNEN);
+ StartSpriteAnimIfDifferent(&gSprites[sSlotMachine->reelTimePikachuSpriteId], 5);
+ PlayFanfare(MUS_TOO_BAD);
}
else
{
task->data[4] = 0xc0;
- StartSpriteAnimIfDifferent(gSprites + sSlotMachine->reelTimeSprite3F, 4);
- gSprites[sSlotMachine->reelTimeSprite3F].animCmdIndex = 0;
+ StartSpriteAnimIfDifferent(&gSprites[sSlotMachine->reelTimePikachuSpriteId], 4);
+ gSprites[sSlotMachine->reelTimePikachuSpriteId].animCmdIndex = 0;
if (sSlotMachine->pikaPower)
{
- sub_8104098();
+ ResetPikaPowerBolts();
sSlotMachine->pikaPower = 0;
}
- PlayFanfare(MUS_ME_B_SMALL);
+ PlayFanfare(MUS_SLOTS_WIN);
}
}
}
-static void ReeltimeAction9(struct Task *task)
+static void ReelTime_WaitClearPikaPower(struct Task *task)
{
- if ((task->data[4] == 0 || --task->data[4] == 0) && !sub_81040C8())
- task->data[0]++;
+ if ((task->data[4] == 0 || --task->data[4] == 0) && !IsPikaPowerBoltAnimating())
+ task->tState++;
}
-static void ReeltimeAction10(struct Task *task)
+static void ReelTime_CloseWindow(struct Task *task)
{
s16 r4;
gSpriteCoordOffsetX -= 8;
@@ -2991,67 +3272,67 @@ static void ReeltimeAction10(struct Task *task)
r4 = ((task->data[1] - 8) & 0xff) >> 3;
SetGpuReg(REG_OFFSET_BG1HOFS, task->data[1] & 0x1ff);
if (task->data[3] >> 3 <= 25)
- sub_8104A88(r4);
+ ClearReelTimeWindowTilemap(r4);
else
- task->data[0]++;
+ task->tState++;
}
-static void ReeltimeAction11(struct Task *task)
+static void ReelTime_DestroySprites(struct Task *task)
{
- sSlotMachine->fairRollsUsed = 0;
- sSlotMachine->fairRollsLeft = sSlotMachine->reelTimeDraw;
+ sSlotMachine->reelTimeSpinsUsed = 0;
+ sSlotMachine->reelTimeSpinsLeft = sSlotMachine->reelTimeDraw;
gSpriteCoordOffsetX = 0;
SetGpuReg(REG_OFFSET_BG1HOFS, 0);
sSlotMachine->reelIncrement = 8;
- sub_810514C();
- sub_81054B8();
- sub_8105524();
+ DestroyReelTimePikachuSprite();
+ DestroyReelTimeMachineSprites();
+ DestroyReelTimeShadowSprites();
PlayNewMapMusic(sSlotMachine->backupMapMusic);
- if (sSlotMachine->fairRollsLeft == 0)
+ if (sSlotMachine->reelTimeSpinsLeft == 0)
{
- DestroyTask(FindTaskIdByFunc(RunReeltimeActions));
+ DestroyTask(FindTaskIdByFunc(Task_ReelTime));
}
else
{
- sub_8104CAC(4);
+ CreateDigitalDisplayScene(DIG_DISPLAY_REEL_TIME);
task->data[1] = SlowReelSpeed();
task->data[2] = 0;
task->data[3] = 0;
- task->data[0]++;
+ task->tState++;
}
}
-static void ReeltimeAction12(struct Task *task)
+static void ReelTime_SetReelIncrement(struct Task *task)
{
if (sSlotMachine->reelIncrement == task->data[1])
- task->data[0]++;
- else if (sSlotMachine->reelPixelOffsets[0] % 24 == 0 && (++task->data[2]& 0x07) == 0)
+ task->tState++;
+ else if (sSlotMachine->reelPixelOffsets[0] % REEL_SYMBOL_HEIGHT == 0 && (++task->data[2]& 0x07) == 0)
sSlotMachine->reelIncrement >>= 1;
}
-static void ReeltimeAction13(struct Task *task)
+static void ReelTime_EndSuccess(struct Task *task)
{
- if (sub_8104E18())
- DestroyTask(FindTaskIdByFunc(RunReeltimeActions));
+ if (IsDigitalDisplayAnimFinished())
+ DestroyTask(FindTaskIdByFunc(Task_ReelTime));
}
-static void ReeltimeAction14(struct Task *task)
+static void ReelTime_ExplodeMachine(struct Task *task)
{
- sub_81054B8();
- sub_81056C0();
- sub_8105804();
- sub_8105854();
- gSprites[sSlotMachine->unk4E[0]].invisible = TRUE;
- StartSpriteAnimIfDifferent(gSprites + sSlotMachine->reelTimeSprite3F, 5);
- task->data[0]++;
+ DestroyReelTimeMachineSprites();
+ DestroyReelTimeBoltSprites();
+ DestroyReelTimePikachuAuraSprites();
+ CreateReelTimeExplosionSprite();
+ gSprites[sSlotMachine->reelTimeShadowSpriteIds[0]].invisible = TRUE;
+ StartSpriteAnimIfDifferent(&gSprites[sSlotMachine->reelTimePikachuSpriteId], 5);
+ task->tState++;
task->data[4] = 4;
task->data[5] = 0;
StopMapMusic();
- PlayFanfare(MUS_ME_ZANNEN);
- PlaySE(SE_W153);
+ PlayFanfare(MUS_TOO_BAD);
+ PlaySE(SE_M_EXPLOSION);
}
-static void ReeltimeAction15(struct Task *task)
+static void ReelTime_WaitExplode(struct Task *task)
{
gSpriteCoordOffsetY = task->data[4];
SetGpuReg(REG_OFFSET_BG1VOFS, task->data[4]);
@@ -3061,63 +3342,68 @@ static void ReeltimeAction15(struct Task *task)
task->data[4] >>= 1;
if (task->data[4] == 0)
{
- sub_81058A0();
- sub_81058C4();
- sub_8105284_();
- sub_81059E8();
- gSprites[sSlotMachine->unk4E[0]].invisible = FALSE;
- task->data[0]++;
+ DestroyReelTimeExplosionSprite();
+ CreateReelTimeDuckSprites();
+ CreateBrokenReelTimeMachineSprite();
+ CreateReelTimeSmokeSprite();
+ gSprites[sSlotMachine->reelTimeShadowSpriteIds[0]].invisible = FALSE;
+ task->tState++;
task->data[5] = 0;
}
}
-static void ReeltimeAction16(struct Task *task)
+static void ReelTime_WaitSmoke(struct Task *task)
{
gSpriteCoordOffsetY = 0;
SetGpuReg(REG_OFFSET_BG1VOFS, 0);
- if (sub_8105ACC())
+ if (IsReelTimeSmokeAnimFinished())
{
- task->data[0]++;
- sub_8105AEC();
+ task->tState++;
+ DestroyReelTimeSmokeSprite();
}
}
-static void ReeltimeAction17(struct Task *task)
+static void ReelTime_EndFailure(struct Task *task)
{
gSpriteCoordOffsetX = 0;
SetGpuReg(REG_OFFSET_BG1HOFS, 0);
PlayNewMapMusic(sSlotMachine->backupMapMusic);
- sub_810514C();
- sub_8105554();
- sub_8105524();
- sub_81059B8();
- DestroyTask(FindTaskIdByFunc(RunReeltimeActions));
+ DestroyReelTimePikachuSprite();
+ DestroyBrokenReelTimeMachineSprite();
+ DestroyReelTimeShadowSprites();
+ DestroyReelTimeDuckSprites();
+ DestroyTask(FindTaskIdByFunc(Task_ReelTime));
}
-static void sub_8104A40(s16 a0, s16 a1)
+static void LoadReelTimeWindowTilemap(s16 a0, s16 a1)
{
s16 i;
for (i = 4; i < 15; i++)
{
- LoadBgTilemap(1, &gReelTimeWindowTilemap[a1 + (i - 4) * 20], 2, 32 * i + a0);
+ LoadBgTilemap(1, &sReelTimeWindow_Tilemap[a1 + (i - 4) * 20], 2, 32 * i + a0);
}
}
-static void sub_8104A88(s16 a0)
+static void ClearReelTimeWindowTilemap(s16 a0)
{
u8 i;
for (i = 4; i < 15; i++)
{
- LoadBgTilemap(1, gUnknown_085A9898, 2, 32 * i + a0);
+ LoadBgTilemap(1, sEmptyTilemap, 2, 32 * i + a0);
}
}
-static void OpenInfoBox(u8 seemsUnused)
+#undef tState
+
+#define tState data[0]
+
+// Info Box is the screen shown when Select is pressed
+static void OpenInfoBox(u8 digDisplayId)
{
u8 taskId = CreateTask(RunInfoBoxActions, 1);
- gTasks[taskId].data[1] = seemsUnused;
+ gTasks[taskId].data[1] = digDisplayId;
RunInfoBoxActions(taskId);
}
@@ -3131,29 +3417,29 @@ static bool8 IsInfoBoxClosed(void)
static void RunInfoBoxActions(u8 taskId)
{
- InfoBoxActions[gTasks[taskId].data[0]](&gTasks[taskId]);
+ sInfoBoxActions[gTasks[taskId].tState](&gTasks[taskId]);
}
static void InfoBox_FadeIn(struct Task *task)
{
BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB(0, 0, 0));
- task->data[0]++;
+ task->tState++;
}
static void InfoBox_WaitForFade(struct Task *task)
{
if (!gPaletteFade.active)
- task->data[0]++;
+ task->tState++;
}
-static void InfoBox_8104B80(struct Task *task)
+static void InfoBox_DrawWindow(struct Task *task)
{
- sub_8104DA4();
- sub_81065DC();
- AddWindow(&gUnknown_085A7444);
+ DestroyDigitalDisplayScene();
+ LoadInfoBoxTilemap();
+ AddWindow(&sWindowTemplate_InfoBox);
PutWindowTilemap(1);
FillWindowPixelBuffer(1, PIXEL_FILL(0));
- task->data[0]++;
+ task->tState++;
}
static void InfoBox_AddText(struct Task *task)
@@ -3161,40 +3447,40 @@ static void InfoBox_AddText(struct Task *task)
AddTextPrinterParameterized3(1, 1, 2, 5, sColors_ReeltimeHelp, 0, gText_ReelTimeHelp);
CopyWindowToVram(1, 3);
BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, RGB(0, 0, 0));
- task->data[0]++;
+ task->tState++;
}
static void InfoBox_AwaitPlayerInput(struct Task *task)
{
- if (gMain.newKeys & (B_BUTTON | SELECT_BUTTON))
+ if (JOY_NEW(B_BUTTON | SELECT_BUTTON))
{
FillWindowPixelBuffer(1, PIXEL_FILL(0));
ClearWindowTilemap(1);
CopyWindowToVram(1, 1);
RemoveWindow(1);
BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB(0, 0, 0));
- task->data[0]++;
+ task->tState++;
}
}
-static void InfoBox_812DE14(struct Task *task)
+static void InfoBox_LoadSlotMachineTilemap(struct Task *task)
{
- sub_812F968();
+ LoadSlotMachineMenuTilemap();
ShowBg(3);
- task->data[0]++;
+ task->tState++;
}
-static void InfoBox_812DE30(struct Task *task)
+static void InfoBox_CreateDigitalDisplay(struct Task *task)
{
- sub_8104CAC(task->data[1]);
- task->data[0]++;
+ CreateDigitalDisplayScene(task->data[1]);
+ task->tState++;
}
-static void InfoBox_8104BFC(struct Task *task)
+static void InfoBox_LoadPikaPowerMeter(struct Task *task)
{
- sub_810423C(sSlotMachine->pikaPower);
+ LoadPikaPowerMeter(sSlotMachine->pikaPower);
BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, RGB(0, 0, 0));
- task->data[0]++;
+ task->tState++;
}
static void InfoBox_FreeTask(struct Task *task)
@@ -3202,62 +3488,68 @@ static void InfoBox_FreeTask(struct Task *task)
DestroyTask(FindTaskIdByFunc(RunInfoBoxActions));
}
-static void sub_8104C5C(void)
+#undef tState
+
+#define sWaitForAnim data[7]
+
+static void CreateDigitalDisplayTask(void)
{
u8 i;
struct Task *task;
- i = CreateTask(sub_8104E74_, 3);
- sSlotMachine->unkTaskPointer3D = i;
+ i = CreateTask(Task_DigitalDisplay, 3);
+ sSlotMachine->digDisplayTaskId = i;
task = &gTasks[i];
task->data[1] = -1;
- for (i = 4; i < 16; i++)
+ for (i = 4; i < NUM_TASK_DATA; i++)
task->data[i] = MAX_SPRITES;
}
-// possibly initialize each wheel
-static void sub_8104CAC(u8 arg0)
+// For the panel on the right side of the slot screen
+static void CreateDigitalDisplayScene(u8 id)
{
u8 i;
struct Task *task;
- sub_8104DA4();
+ DestroyDigitalDisplayScene();
- task = &gTasks[sSlotMachine->unkTaskPointer3D];
- task->data[1] = arg0;
+ task = &gTasks[sSlotMachine->digDisplayTaskId];
+ task->data[1] = id;
- for (i = 0; gUnknown_083ED048[arg0][i].unk00 != 0xFF; i++)
+ for (i = 0; sDigitalDisplayScenes[id][i].spriteTemplateId != 255; i++)
{
u8 spriteId;
- spriteId = sub_8105BB4(
- gUnknown_083ED048[arg0][i].unk00,
- gUnknown_083ED048[arg0][i].unk01,
- gUnknown_083ED048[arg0][i].unk02
+ spriteId = CreateStdDigitalDisplaySprite(
+ sDigitalDisplayScenes[id][i].spriteTemplateId,
+ sDigitalDisplayScenes[id][i].dispInfoId,
+ sDigitalDisplayScenes[id][i].spriteId
);
task->data[4 + i] = spriteId;
}
}
-static void sub_8104D30(u8 a0, SpriteCallback a1, s16 a2, s16 a3, s16 a4)
+static void AddDigitalDisplaySprite(u8 templateIdx, SpriteCallback callback, s16 x, s16 y, s16 spriteId)
{
u8 i;
- struct Task *task = &gTasks[sSlotMachine->unkTaskPointer3D];
- for (i = 4; i < 16; i++)
+ struct Task *task = &gTasks[sSlotMachine->digDisplayTaskId];
+ for (i = 4; i < NUM_TASK_DATA; i++)
{
if (task->data[i] == MAX_SPRITES)
{
- task->data[i] = sub_8105BF8(a0, a1, a2, a3, a4);
+ task->data[i] = CreateDigitalDisplaySprite(templateIdx, callback, x, y, spriteId);
break;
}
}
}
-static void sub_8104DA4(void)
+static void DestroyDigitalDisplayScene(void)
{
u8 i;
- struct Task *task = &gTasks[sSlotMachine->unkTaskPointer3D];
+ struct Task *task = &gTasks[sSlotMachine->digDisplayTaskId];
+
if ((u16)task->data[1] != 0xFFFF)
- gUnknown_083ED064[task->data[1]]();
- for (i = 4; i < 16; i++)
+ sDigitalDisplaySceneExitCallbacks[task->data[1]]();
+
+ for (i = 4; i < NUM_TASK_DATA; i++)
{
if (task->data[i] != MAX_SPRITES)
{
@@ -3267,31 +3559,31 @@ static void sub_8104DA4(void)
}
}
-static bool8 sub_8104E18(void)
+static bool8 IsDigitalDisplayAnimFinished(void)
{
u8 i;
- struct Task *task = &gTasks[sSlotMachine->unkTaskPointer3D];
- for (i = 4; i < 16; i++)
+ struct Task *task = &gTasks[sSlotMachine->digDisplayTaskId];
+ for (i = 4; i < NUM_TASK_DATA; i++)
{
if (task->data[i] != MAX_SPRITES)
{
- if (gSprites[task->data[i]].data[7])
+ if (gSprites[task->data[i]].sWaitForAnim)
return FALSE;
}
}
return TRUE;
}
-static void sub_8104E74_(u8 taskId)
+static void Task_DigitalDisplay(u8 taskId)
{
- gUnknown_083ECC54[gTasks[taskId].data[0]](&gTasks[taskId]);
+ sDigitalDisplayActions[gTasks[taskId].data[0]](&gTasks[taskId]);
}
-static void nullsub_69(struct Task *task)
+static void DigitalDisplay_Idle(struct Task *task)
{
}
-static void sub_8104EA8(void)
+static void CreateReelSymbolSprites(void)
{
s16 i;
s16 j;
@@ -3300,7 +3592,7 @@ static void sub_8104EA8(void)
{
for (j = 0; j < 120; j += 24)
{
- struct Sprite *sprite = gSprites + CreateSprite(&gSpriteTemplate_83ED414, x, 0, 14);
+ struct Sprite *sprite = gSprites + CreateSprite(&sSpriteTemplate_ReelSymbol, x, 0, 14);
sprite->oam.priority = 3;
sprite->data[0] = i;
sprite->data[1] = j;
@@ -3309,37 +3601,40 @@ static void sub_8104EA8(void)
}
}
-static void sub_8104F18(struct Sprite *sprite)
+static void SpriteCB_ReelSymbol(struct Sprite *sprite)
{
sprite->data[2] = sSlotMachine->reelPixelOffsets[sprite->data[0]] + sprite->data[1];
sprite->data[2] %= 120;
sprite->pos1.y = sSlotMachine->reelPixelOffsetsWhileStopping[sprite->data[0]] + 28 + sprite->data[2];
- sprite->sheetTileStart = GetSpriteTileStartByTag(GetNearbyTag_Quantized(sprite->data[0], sprite->data[2] / 24));
+ sprite->sheetTileStart = GetSpriteTileStartByTag(GetTagAtRest(sprite->data[0], sprite->data[2] / 24));
SetSpriteSheetFrameTileNum(sprite);
}
-static void sub_8104F8C(void)
+static void CreateCreditPayoutNumberSprites(void)
{
s16 i;
s16 x;
+ // Credit number sprite
for (x = 203, i = 1; i <= MAX_COINS; i *= 10, x -= 7)
- sub_8104FF4(x, 23, 0, i);
+ CreateCoinNumberSprite(x, 23, FALSE, i);
+
+ // Payout number sprite
for (x = 235, i = 1; i <= MAX_COINS; i *= 10, x -= 7)
- sub_8104FF4(x, 23, 1, i);
+ CreateCoinNumberSprite(x, 23, TRUE, i);
}
-static void sub_8104FF4(s16 x, s16 y, u8 a2, s16 a3)
+static void CreateCoinNumberSprite(s16 x, s16 y, bool8 isPayout, s16 a3)
{
- struct Sprite *sprite = gSprites + CreateSprite(&gSpriteTemplate_83ED42C, x, y, 13);
+ struct Sprite *sprite = &gSprites[CreateSprite(&sSpriteTemplate_CoinNumber, x, y, 13)];
sprite->oam.priority = 2;
- sprite->data[0] = a2;
+ sprite->data[0] = isPayout;
sprite->data[1] = a3;
sprite->data[2] = a3 * 10;
sprite->data[3] = -1;
}
-static void sub_810506C(struct Sprite *sprite)
+static void SpriteCB_CoinNumber(struct Sprite *sprite)
{
u16 tag = sSlotMachine->coins;
if (sprite->data[0])
@@ -3355,47 +3650,47 @@ static void sub_810506C(struct Sprite *sprite)
}
}
-static void sub_81050C4(void)
+static void CreateReelBackgroundSprite(void)
{
- u8 spriteId = CreateSprite(&gSpriteTemplate_83ED444, 0x58, 0x48, 15);
+ u8 spriteId = CreateSprite(&sSpriteTemplate_ReelBackground, 88, 72, 15);
gSprites[spriteId].oam.priority = 3;
- SetSubspriteTables(gSprites + spriteId, gSubspriteTables_83ED704);
+ SetSubspriteTables(&gSprites[spriteId], sSubspriteTable_ReelBackground);
}
-static void sub_8105100(void)
+static void CreateReelTimePikachuSprite(void)
{
struct SpriteTemplate spriteTemplate;
u8 spriteId;
- if (sUnknown_0203AAE4 == NULL)
- sUnknown_0203AAE4 = AllocZeroed(sizeof(struct SpriteFrameImage) * 5);
-
- sUnknown_0203AAE4[0].data = sUnknown_0203AAD8 + (0 * 0x800);
- sUnknown_0203AAE4[0].size = 0x800;
- sUnknown_0203AAE4[1].data = sUnknown_0203AAD8 + (1 * 0x800);
- sUnknown_0203AAE4[1].size = 0x800;
- sUnknown_0203AAE4[2].data = sUnknown_0203AAD8 + (2 * 0x800);
- sUnknown_0203AAE4[2].size = 0x800;
- sUnknown_0203AAE4[3].data = sUnknown_0203AAD8 + (3 * 0x800);
- sUnknown_0203AAE4[3].size = 0x800;
- sUnknown_0203AAE4[4].data = sUnknown_0203AAD8 + (4 * 0x800);
- sUnknown_0203AAE4[4].size = 0x800;
-
- spriteTemplate = gSpriteTemplate_83ED45C;
- spriteTemplate.images = sUnknown_0203AAE4;
+ if (sImageTable_ReelTimePikachu == NULL)
+ sImageTable_ReelTimePikachu = AllocZeroed(sizeof(struct SpriteFrameImage) * 5);
+
+ sImageTable_ReelTimePikachu[0].data = sReelTimeGfxPtr + (0 * 0x800);
+ sImageTable_ReelTimePikachu[0].size = 0x800;
+ sImageTable_ReelTimePikachu[1].data = sReelTimeGfxPtr + (1 * 0x800);
+ sImageTable_ReelTimePikachu[1].size = 0x800;
+ sImageTable_ReelTimePikachu[2].data = sReelTimeGfxPtr + (2 * 0x800);
+ sImageTable_ReelTimePikachu[2].size = 0x800;
+ sImageTable_ReelTimePikachu[3].data = sReelTimeGfxPtr + (3 * 0x800);
+ sImageTable_ReelTimePikachu[3].size = 0x800;
+ sImageTable_ReelTimePikachu[4].data = sReelTimeGfxPtr + (4 * 0x800);
+ sImageTable_ReelTimePikachu[4].size = 0x800;
+
+ spriteTemplate = sSpriteTemplate_ReelTimePikachu;
+ spriteTemplate.images = sImageTable_ReelTimePikachu;
spriteId = CreateSprite(&spriteTemplate, 280, 80, 1);
gSprites[spriteId].oam.priority = 1;
gSprites[spriteId].coordOffsetEnabled = TRUE;
- sSlotMachine->reelTimeSprite3F = spriteId;
+ sSlotMachine->reelTimePikachuSpriteId = spriteId;
}
-static void sub_810514C(void)
+static void DestroyReelTimePikachuSprite(void)
{
- DestroySprite(gSprites + sSlotMachine->reelTimeSprite3F);
- if (sUnknown_0203AAE4 != NULL)
- FREE_AND_SET_NULL(sUnknown_0203AAE4);
+ DestroySprite(&gSprites[sSlotMachine->reelTimePikachuSpriteId]);
+ if (sImageTable_ReelTimePikachu != NULL)
+ FREE_AND_SET_NULL(sImageTable_ReelTimePikachu);
}
-static void sub_8105170(struct Sprite *sprite)
+static void SpriteCB_ReelTimePikachu(struct Sprite *sprite)
{
sprite->pos2.y = sprite->pos2.x = 0;
if (sprite->animNum == 4)
@@ -3406,78 +3701,78 @@ static void sub_8105170(struct Sprite *sprite)
}
}
-static void sub_81051C0(void)
+static void CreateReelTimeMachineSprites(void)
{
struct SpriteTemplate spriteTemplate;
u8 spriteId;
struct Sprite *sprite;
- if (sUnknown_0203AAE8 == NULL)
- sUnknown_0203AAE8 = AllocZeroed(sizeof(struct SpriteFrameImage) * 1);
+ if (sImageTable_ReelTimeMachineAntennae == NULL)
+ sImageTable_ReelTimeMachineAntennae = AllocZeroed(sizeof(struct SpriteFrameImage) * 1);
- sUnknown_0203AAE8[0].data = sUnknown_0203AAD8 + 0x2800;
- sUnknown_0203AAE8[0].size = 0x300;
- spriteTemplate = gSpriteTemplate_83ED474;
- spriteTemplate.images = sUnknown_0203AAE8;
+ sImageTable_ReelTimeMachineAntennae[0].data = sReelTimeGfxPtr + 0x2800;
+ sImageTable_ReelTimeMachineAntennae[0].size = 0x300;
+ spriteTemplate = sSpriteTemplate_ReelTimeMachineAntennae;
+ spriteTemplate.images = sImageTable_ReelTimeMachineAntennae;
spriteId = CreateSprite(&spriteTemplate, 368, 52, 7);
sprite = &gSprites[spriteId];
sprite->oam.priority = 1;
sprite->coordOffsetEnabled = TRUE;
- SetSubspriteTables(sprite, gSubspriteTables_83ED73C);
- sSlotMachine->unk49[0] = spriteId;
+ SetSubspriteTables(sprite, sSubspriteTable_ReelTimeMachineAntennae);
+ sSlotMachine->reelTimeMachineSpriteIds[0] = spriteId;
- if (sUnknown_0203AAEC == NULL)
- sUnknown_0203AAEC = AllocZeroed(sizeof(struct SpriteFrameImage) * 1);
+ if (sImageTable_ReelTimeMachine == NULL)
+ sImageTable_ReelTimeMachine = AllocZeroed(sizeof(struct SpriteFrameImage) * 1);
- sUnknown_0203AAEC[0].data = sUnknown_0203AAD8 + 0x2800 + 0x300;
- sUnknown_0203AAEC[0].size = 0x500;
- spriteTemplate = gSpriteTemplate_83ED48C;
- spriteTemplate.images = sUnknown_0203AAEC;
+ sImageTable_ReelTimeMachine[0].data = sReelTimeGfxPtr + 0x2800 + 0x300;
+ sImageTable_ReelTimeMachine[0].size = 0x500;
+ spriteTemplate = sSpriteTemplate_ReelTimeMachine;
+ spriteTemplate.images = sImageTable_ReelTimeMachine;
spriteId = CreateSprite(&spriteTemplate, 368, 84, 7);
sprite = &gSprites[spriteId];
sprite->oam.priority = 1;
sprite->coordOffsetEnabled = TRUE;
- SetSubspriteTables(sprite, gSubspriteTables_83ED75C);
- sSlotMachine->unk49[1] = spriteId;
+ SetSubspriteTables(sprite, sSubspriteTable_ReelTimeMachine);
+ sSlotMachine->reelTimeMachineSpriteIds[1] = spriteId;
}
-static void sub_8105284_(void)
+static void CreateBrokenReelTimeMachineSprite(void)
{
struct SpriteTemplate spriteTemplate;
u8 spriteId;
struct Sprite *sprite;
- if (sUnknown_0203AAF0 == NULL)
- sUnknown_0203AAF0 = AllocZeroed(sizeof(struct SpriteFrameImage) * 1);
+ if (sImageTable_BrokenReelTimeMachine == NULL)
+ sImageTable_BrokenReelTimeMachine = AllocZeroed(sizeof(struct SpriteFrameImage) * 1);
- sUnknown_0203AAF0[0].data = sUnknown_0203AAD8 + 0x3000;
- sUnknown_0203AAF0[0].size = 0x600;
- spriteTemplate = gSpriteTemplate_83ED4A4;
- spriteTemplate.images = sUnknown_0203AAF0;
- spriteId = CreateSprite(&spriteTemplate, 0xa8 - gSpriteCoordOffsetX, 0x50, 7);
+ sImageTable_BrokenReelTimeMachine[0].data = sReelTimeGfxPtr + 0x3000;
+ sImageTable_BrokenReelTimeMachine[0].size = 0x600;
+ spriteTemplate = sSpriteTemplate_BrokenReelTimeMachine;
+ spriteTemplate.images = sImageTable_BrokenReelTimeMachine;
+ spriteId = CreateSprite(&spriteTemplate, 168 - gSpriteCoordOffsetX, 80, 7);
sprite = &gSprites[spriteId];
sprite->oam.priority = 1;
sprite->coordOffsetEnabled = TRUE;
- SetSubspriteTables(sprite, gSubspriteTables_83ED78C);
- sSlotMachine->unk42 = spriteId;
+ SetSubspriteTables(sprite, sSubspriteTable_BrokenReelTimeMachine);
+ sSlotMachine->reelTimeBrokenMachineSpriteId = spriteId;
}
-static void sub_81052EC(void)
+static void CreateReelTimeNumberSprites(void)
{
u8 i;
s16 r5;
- for (i = 0, r5 = 0; i < 3; i++, r5 += 20)
+ for (i = 0, r5 = 0; i < ARRAY_COUNT(sSlotMachine->reelTimeNumberSpriteIds); i++, r5 += 20)
{
- u8 spriteId = CreateSprite(&gSpriteTemplate_83ED4BC, 0x170, 0, 10);
+ u8 spriteId = CreateSprite(&sSpriteTemplate_ReelTimeNumbers, 368, 0, 10);
struct Sprite *sprite = &gSprites[spriteId];
sprite->oam.priority = 1;
sprite->coordOffsetEnabled = TRUE;
sprite->data[7] = r5;
- sSlotMachine->unk4B[i] = spriteId;
+ sSlotMachine->reelTimeNumberSpriteIds[i] = spriteId;
}
}
-static void sub_810535C(struct Sprite *sprite)
+static void SpriteCB_ReelTimeNumbers(struct Sprite *sprite)
{
s16 r0 = (u16)(sSlotMachine->reeltimePixelOffset + sprite->data[7]);
r0 %= 40;
@@ -3485,92 +3780,98 @@ static void sub_810535C(struct Sprite *sprite)
StartSpriteAnimIfDifferent(sprite, GetNearbyReelTimeTag(r0 / 20));
}
-static void sub_81053A0(void)
+static void CreateReelTimeShadowSprites(void)
{
- u8 spriteId = CreateSprite(&gSpriteTemplate_83ED4D4, 0x170, 0x64, 9);
+ u8 spriteId = CreateSprite(&sSpriteTemplate_ReelTimeShadow, 368, 100, 9);
struct Sprite *sprite = &gSprites[spriteId];
sprite->coordOffsetEnabled = TRUE;
sprite->oam.priority = 1;
- SetSubspriteTables(sprite, gSubspriteTables_83ED7B4);
- sSlotMachine->unk4E[0] = spriteId;
+ SetSubspriteTables(sprite, sSubspriteTable_ReelTimeShadow);
+ sSlotMachine->reelTimeShadowSpriteIds[0] = spriteId;
- spriteId = CreateSprite(&gSpriteTemplate_83ED4D4, 0x120, 0x68, 4);
+ spriteId = CreateSprite(&sSpriteTemplate_ReelTimeShadow, 288, 104, 4);
sprite = &gSprites[spriteId];
sprite->coordOffsetEnabled = TRUE;
sprite->oam.priority = 1;
- SetSubspriteTables(sprite, gSubspriteTables_83ED7B4);
- sSlotMachine->unk4E[1] = spriteId;
+ SetSubspriteTables(sprite, sSubspriteTable_ReelTimeShadow);
+ sSlotMachine->reelTimeShadowSpriteIds[1] = spriteId;
}
-static void sub_810545C(void)
+// Creates a small black bar on the Reel Time machine to fill the gap between the numbers
+static void CreateReelTimeNumberGapSprite(void)
{
- u8 spriteId = CreateSprite(&gSpriteTemplate_83ED4EC, 0x170, 0x4c, 11);
+ u8 spriteId = CreateSprite(&sSpriteTemplate_ReelTimeNumberGap, 368, 76, 11);
struct Sprite *sprite = &gSprites[spriteId];
sprite->coordOffsetEnabled = TRUE;
sprite->oam.priority = 1;
- SetSubspriteTables(sprite, gSubspriteTables_83ED7D4);
- sSlotMachine->unk40 = spriteId;
+ SetSubspriteTables(sprite, sSubspriteTable_ReelTimeNumberGap);
+ sSlotMachine->reelTimeNumberGapSpriteId = spriteId;
}
-static void sub_81054B8(void)
+static void DestroyReelTimeMachineSprites(void)
{
u8 i;
- DestroySprite(&gSprites[sSlotMachine->unk40]);
- for (i = 0; i < 2; i++)
- DestroySprite(&gSprites[sSlotMachine->unk49[i]]);
+ DestroySprite(&gSprites[sSlotMachine->reelTimeNumberGapSpriteId]);
+ for (i = 0; i < ARRAY_COUNT(sSlotMachine->reelTimeMachineSpriteIds); i++)
+ DestroySprite(&gSprites[sSlotMachine->reelTimeMachineSpriteIds[i]]);
- if (sUnknown_0203AAE8 != NULL)
- FREE_AND_SET_NULL(sUnknown_0203AAE8);
- if (sUnknown_0203AAEC != NULL)
- FREE_AND_SET_NULL(sUnknown_0203AAEC);
+ if (sImageTable_ReelTimeMachineAntennae != NULL)
+ FREE_AND_SET_NULL(sImageTable_ReelTimeMachineAntennae);
+ if (sImageTable_ReelTimeMachine != NULL)
+ FREE_AND_SET_NULL(sImageTable_ReelTimeMachine);
- for (i = 0; i < 3; i++)
- DestroySprite(&gSprites[sSlotMachine->unk4B[i]]);
+ for (i = 0; i < ARRAY_COUNT(sSlotMachine->reelTimeNumberSpriteIds); i++)
+ DestroySprite(&gSprites[sSlotMachine->reelTimeNumberSpriteIds[i]]);
}
-static void sub_8105524(void)
+static void DestroyReelTimeShadowSprites(void)
{
u8 i;
- for (i = 0; i < 2; i++)
- DestroySprite(&gSprites[sSlotMachine->unk4E[i]]);
+ for (i = 0; i < ARRAY_COUNT(sSlotMachine->reelTimeShadowSpriteIds); i++)
+ DestroySprite(&gSprites[sSlotMachine->reelTimeShadowSpriteIds[i]]);
}
-static void sub_8105554(void)
+static void DestroyBrokenReelTimeMachineSprite(void)
{
- DestroySprite(&gSprites[sSlotMachine->unk42]);
- if (sUnknown_0203AAF0 != NULL)
- FREE_AND_SET_NULL(sUnknown_0203AAF0);
+ DestroySprite(&gSprites[sSlotMachine->reelTimeBrokenMachineSpriteId]);
+ if (sImageTable_BrokenReelTimeMachine != NULL)
+ FREE_AND_SET_NULL(sImageTable_BrokenReelTimeMachine);
}
-// TODO: check if this is true
-static void CreateReelTimeSprites1(void)
+#define sDelayTimer data[0]
+#define sXDir data[1]
+#define sYDir data[2]
+#define sCounter data[3]
+#define sDelay data[7]
+
+static void CreateReelTimeBoltSprites(void)
{
- u8 spriteId = CreateSprite(&gSpriteTemplate_83ED504, 0x98, 0x20, 5);
+ u8 spriteId = CreateSprite(&sSpriteTemplate_ReelTimeBolt, 152, 32, 5);
struct Sprite *sprite = &gSprites[spriteId];
sprite->oam.priority = 1;
sprite->hFlip = TRUE;
- sSlotMachine->reelTimeSprites1[0] = spriteId;
- sprite->data[0] = 8;
- sprite->data[1] = -1;
- sprite->data[2] = -1;
- sprite->data[7] = 0x20;
+ sSlotMachine->reelTimeBoltSpriteIds[0] = spriteId;
+ sprite->sDelayTimer = 8;
+ sprite->sXDir = -1;
+ sprite->sYDir = -1;
+ sprite->sDelay = 32;
- spriteId = CreateSprite(&gSpriteTemplate_83ED504, 0xb8, 0x20, 5);
+ spriteId = CreateSprite(&sSpriteTemplate_ReelTimeBolt, 184, 32, 5);
sprite = &gSprites[spriteId];
sprite->oam.priority = 1;
- sSlotMachine->reelTimeSprites1[1] = spriteId;
- sprite->data[1] = 1;
- sprite->data[2] = -1;
- sprite->data[7] = 0x20;
+ sSlotMachine->reelTimeBoltSpriteIds[1] = spriteId;
+ sprite->sXDir = 1;
+ sprite->sYDir = -1;
+ sprite->sDelay = 32;
}
-static void sub_810562C(struct Sprite *sprite)
+static void SpriteCB_ReelTimeBolt(struct Sprite *sprite)
{
- if (sprite->data[0] != 0)
+ if (sprite->sDelayTimer != 0)
{
- sprite->data[0]--;
+ sprite->sDelayTimer--;
sprite->pos2.x = 0;
sprite->pos2.y = 0;
sprite->invisible = TRUE;
@@ -3578,104 +3879,123 @@ static void sub_810562C(struct Sprite *sprite)
else
{
sprite->invisible = FALSE;
- sprite->pos2.x += sprite->data[1];
- sprite->pos2.y += sprite->data[2];
- if (++sprite->data[3] >= 8)
+ sprite->pos2.x += sprite->sXDir;
+ sprite->pos2.y += sprite->sYDir;
+ if (++sprite->sCounter >= 8)
{
- sprite->data[0] = sprite->data[7];
- sprite->data[3] = 0;
+ sprite->sDelayTimer = sprite->sDelay;
+ sprite->sCounter = 0;
}
}
}
-static void sub_8105688(s16 a0)
+static void SetReelTimeBoltDelay(s16 delay)
{
- gSprites[sSlotMachine->reelTimeSprites1[0]].data[7] = a0;
- gSprites[sSlotMachine->reelTimeSprites1[1]].data[7] = a0;
+ gSprites[sSlotMachine->reelTimeBoltSpriteIds[0]].sDelay = delay;
+ gSprites[sSlotMachine->reelTimeBoltSpriteIds[1]].sDelay = delay;
}
-static void sub_81056C0(void)
+static void DestroyReelTimeBoltSprites(void)
{
u8 i;
- for (i = 0; i < 2; i++)
- DestroySprite(&gSprites[sSlotMachine->reelTimeSprites1[i]]);
+ for (i = 0; i < ARRAY_COUNT(sSlotMachine->reelTimeBoltSpriteIds); i++)
+ DestroySprite(&gSprites[sSlotMachine->reelTimeBoltSpriteIds[i]]);
}
-static void CreateReelTimeSprite2(void)
+#undef sDelayTimer
+#undef sXDir
+#undef sYDir
+#undef sCounter
+#undef sDelay
+
+#define sFlashPal data[0]
+#define sColorIdx data[5]
+#define sDelayTimer data[6]
+#define sDelay data[7]
+
+static void CreateReelTimePikachuAuraSprites(void)
{
- u8 spriteId = CreateSprite(&gSpriteTemplate_83ED51C, 0x48, 0x50, 3);
+ // Left half of electricity orb
+ u8 spriteId = CreateSprite(&sSpriteTemplate_ReelTimePikachuAura, 72, 80, 3);
gSprites[spriteId].oam.priority = 1;
- gSprites[spriteId].data[0] = 1;
- gSprites[spriteId].data[5] = 0;
- gSprites[spriteId].data[6] = 16;
- gSprites[spriteId].data[7] = 8;
- sSlotMachine->reelTimeSprites2[0] = spriteId;
-
- spriteId = CreateSprite(&gSpriteTemplate_83ED51C, 0x68, 0x50, 3);
+ gSprites[spriteId].sFlashPal = TRUE; // Only one of them needs to do the flashing, they share the palette
+ gSprites[spriteId].sColorIdx = 0;
+ gSprites[spriteId].sDelayTimer = 16;
+ gSprites[spriteId].sDelay = 8;
+ sSlotMachine->reelTimePikachuAuraSpriteIds[0] = spriteId;
+
+ // Right half
+ spriteId = CreateSprite(&sSpriteTemplate_ReelTimePikachuAura, 104, 80, 3);
gSprites[spriteId].oam.priority = 1;
gSprites[spriteId].hFlip = TRUE;
- sSlotMachine->reelTimeSprites2[1] = spriteId;
+ sSlotMachine->reelTimePikachuAuraSpriteIds[1] = spriteId;
}
-static void sub_8105784(struct Sprite *sprite)
+static void SpriteCB_ReelTimePikachuAura(struct Sprite *sprite)
{
- u8 sp[] = {16, 0};
- if (sprite->data[0] && --sprite->data[6] <= 0)
+ u8 colors[] = {16, 0};
+ if (sprite->sFlashPal && --sprite->sDelayTimer <= 0)
{
- MultiplyInvertedPaletteRGBComponents((IndexOfSpritePaletteTag(7) << 4) + 0x103, sp[sprite->data[5]], sp[sprite->data[5]], sp[sprite->data[5]]);
- ++sprite->data[5];
- sprite->data[5] &= 1;
- sprite->data[6] = sprite->data[7];
+ MultiplyInvertedPaletteRGBComponents((IndexOfSpritePaletteTag(PALTAG_PIKA_AURA) << 4) + 0x103, colors[sprite->sColorIdx], colors[sprite->sColorIdx], colors[sprite->sColorIdx]);
+ ++sprite->sColorIdx;
+ sprite->sColorIdx &= 1;
+ sprite->sDelayTimer = sprite->sDelay;
}
}
-static void sub_81057E8(s16 a0)
+static void SetReelTimePikachuAuraFlashDelay(s16 delay)
{
- gSprites[sSlotMachine->reelTimeSprites2[0]].data[7] = a0;
+ gSprites[sSlotMachine->reelTimePikachuAuraSpriteIds[0]].sDelay = delay;
}
-static void sub_8105804(void)
+static void DestroyReelTimePikachuAuraSprites(void)
{
u8 i;
- MultiplyInvertedPaletteRGBComponents((IndexOfSpritePaletteTag(7) << 4) + 0x103, 0, 0, 0);
- for (i = 0; i < 2; i++)
- DestroySprite(&gSprites[sSlotMachine->reelTimeSprites2[i]]);
+ MultiplyInvertedPaletteRGBComponents((IndexOfSpritePaletteTag(PALTAG_PIKA_AURA) << 4) + 0x103, 0, 0, 0);
+ for (i = 0; i < ARRAY_COUNT(sSlotMachine->reelTimePikachuAuraSpriteIds); i++)
+ DestroySprite(&gSprites[sSlotMachine->reelTimePikachuAuraSpriteIds[i]]);
}
-static void sub_8105854(void)
+#undef sFlashPal
+#undef sColorIdx
+#undef sDelayTimer
+#undef sDelay
+
+static void CreateReelTimeExplosionSprite(void)
{
- u8 spriteId = CreateSprite(&gSpriteTemplate_83ED534, 0xa8, 0x50, 6);
+ u8 spriteId = CreateSprite(&sSpriteTemplate_ReelTimeExplosion, 168, 80, 6);
gSprites[spriteId].oam.priority = 1;
- sSlotMachine->unk41 = spriteId;
+ sSlotMachine->reelTimeExplosionSpriteId = spriteId;
}
-static void sub_8105894(struct Sprite *sprite)
+static void SpriteCB_ReelTimeExplosion(struct Sprite *sprite)
{
sprite->pos2.y = gSpriteCoordOffsetY;
}
-static void sub_81058A0(void)
+static void DestroyReelTimeExplosionSprite(void)
{
- DestroySprite(&gSprites[sSlotMachine->unk41]);
+ DestroySprite(&gSprites[sSlotMachine->reelTimeExplosionSpriteId]);
}
-static void sub_81058C4(void)
+// The "confusion" ducks that circle Pikachu if the Reel Time machine explodes
+static void CreateReelTimeDuckSprites(void)
{
u8 i;
u16 sp[] = {0x0, 0x40, 0x80, 0xC0};
- for (i = 0; i < 4; i++)
+ for (i = 0; i < ARRAY_COUNT(sSlotMachine->reelTimeDuckSpriteIds); i++)
{
- u8 spriteId = CreateSprite(&gSpriteTemplate_83ED54C, 0x50 - gSpriteCoordOffsetX, 0x44, 0);
+ u8 spriteId = CreateSprite(&sSpriteTemplate_ReelTimeDuck, 80 - gSpriteCoordOffsetX, 68, 0);
struct Sprite *sprite = &gSprites[spriteId];
sprite->oam.priority = 1;
sprite->coordOffsetEnabled = TRUE;
sprite->data[0] = sp[i];
- sSlotMachine->unk54[i] = spriteId;
+ sSlotMachine->reelTimeDuckSpriteIds[i] = spriteId;
}
}
-static void sub_810594C(struct Sprite *sprite)
+static void SpriteCB_ReelTimeDuck(struct Sprite *sprite)
{
sprite->data[0] -= 2;
sprite->data[0] &= 0xff;
@@ -3693,67 +4013,77 @@ static void sub_810594C(struct Sprite *sprite)
}
}
-static void sub_81059B8(void)
+static void DestroyReelTimeDuckSprites(void)
{
u8 i;
- for (i = 0; i < 4; i++)
+ for (i = 0; i < ARRAY_COUNT(sSlotMachine->reelTimeDuckSpriteIds); i++)
{
- DestroySprite(&gSprites[sSlotMachine->unk54[i]]);
+ DestroySprite(&gSprites[sSlotMachine->reelTimeDuckSpriteIds[i]]);
}
}
-static void sub_81059E8(void)
+#define sState data[0]
+#define sMoveY data[1]
+#define sTimer data[2]
+#define sAnimFinished data[7]
+
+static void CreateReelTimeSmokeSprite(void)
{
- u8 spriteId = CreateSprite(&gSpriteTemplate_83ED564, 0xa8, 0x3c, 8);
+ u8 spriteId = CreateSprite(&sSpriteTemplate_ReelTimeSmoke, 168, 60, 8);
struct Sprite *sprite = &gSprites[spriteId];
sprite->oam.priority = 1;
sprite->oam.affineMode = ST_OAM_AFFINE_DOUBLE;
InitSpriteAffineAnim(sprite);
- sSlotMachine->unk43 = spriteId;
+ sSlotMachine->reelTimeSmokeSpriteId = spriteId;
}
-static void sub_8105A38(struct Sprite *sprite)
+static void SpriteCB_ReelTimeSmoke(struct Sprite *sprite)
{
- if (sprite->data[0] == 0)
+ if (sprite->sState == 0)
{
if (sprite->affineAnimEnded)
- sprite->data[0]++;
+ sprite->sState++;
}
- else if (sprite->data[0] == 1)
+ else if (sprite->sState == 1)
{
sprite->invisible ^= 1;
- if (++sprite->data[2] >= 24)
+ if (++sprite->sTimer >= 24)
{
- sprite->data[0]++;
- sprite->data[2] = 0;
+ sprite->sState++;
+ sprite->sTimer = 0;
}
}
else
{
sprite->invisible = TRUE;
- if (++sprite->data[2] >= 16)
- sprite->data[7] = 1;
+ if (++sprite->sTimer >= 16)
+ sprite->sAnimFinished = TRUE;
}
- sprite->data[1] &= 0xff;
- sprite->data[1] += 16;
- sprite->pos2.y -= (sprite->data[1] >> 8);
+ sprite->sMoveY &= 0xff;
+ sprite->sMoveY += 16;
+ sprite->pos2.y -= (sprite->sMoveY >> 8);
}
-static u8 sub_8105ACC(void)
+static u8 IsReelTimeSmokeAnimFinished(void)
{
- return gSprites[sSlotMachine->unk43].data[7];
+ return gSprites[sSlotMachine->reelTimeSmokeSpriteId].sAnimFinished;
}
-static void sub_8105AEC(void)
+static void DestroyReelTimeSmokeSprite(void)
{
- struct Sprite *sprite = &gSprites[sSlotMachine->unk43];
+ struct Sprite *sprite = &gSprites[sSlotMachine->reelTimeSmokeSpriteId];
FreeOamMatrix(sprite->oam.matrixNum);
DestroySprite(sprite);
}
-static u8 sub_8105B1C(s16 x, s16 y)
+#undef sState
+#undef sMoveY
+#undef sTimer
+#undef sAnimFinished
+
+static u8 CreatePikaPowerBoltSprite(s16 x, s16 y)
{
- u8 spriteId = CreateSprite(&gSpriteTemplate_83ED6CC, x, y, 12);
+ u8 spriteId = CreateSprite(&sSpriteTemplate_PikaPowerBolt, x, y, 12);
struct Sprite *sprite = &gSprites[spriteId];
sprite->oam.priority = 2;
sprite->oam.affineMode = ST_OAM_AFFINE_DOUBLE;
@@ -3761,153 +4091,159 @@ static u8 sub_8105B1C(s16 x, s16 y)
return spriteId;
}
-static void sub_8105B70(struct Sprite *sprite)
+static void SpriteCB_PikaPowerBolt(struct Sprite *sprite)
{
if (sprite->affineAnimEnded)
- sprite->data[7] = 1;
+ sprite->data[7] = TRUE;
}
-static void sub_8105B88(u8 spriteId)
+static void DestroyPikaPowerBoltSprite(u8 spriteId)
{
struct Sprite *sprite = &gSprites[spriteId];
FreeOamMatrix(sprite->oam.matrixNum);
DestroySprite(sprite);
}
-static u8 sub_8105BB4(u8 templateIdx, u8 cbAndCoordsIdx, s16 a2)
+static u8 CreateStdDigitalDisplaySprite(u8 templateIdx, u8 dispInfoId, s16 spriteId)
{
- return sub_8105BF8(templateIdx, gUnknown_083ECF0C[cbAndCoordsIdx], gUnknown_083ECE7E[cbAndCoordsIdx][0], gUnknown_083ECE7E[cbAndCoordsIdx][1], a2);
+ return CreateDigitalDisplaySprite(templateIdx, sDigitalDisplay_SpriteCallbacks[dispInfoId], sDigitalDisplay_SpriteCoords[dispInfoId][0], sDigitalDisplay_SpriteCoords[dispInfoId][1], spriteId);
}
-static u8 sub_8105BF8(u8 templateIdx, SpriteCallback callback, s16 x, s16 y, s16 a4)
+#define sState data[0]
+#define sCounter data[1]
+#define sSpriteId data[6]
+
+static u8 CreateDigitalDisplaySprite(u8 templateIdx, SpriteCallback callback, s16 x, s16 y, s16 internalSpriteId)
{
struct SpriteTemplate spriteTemplate;
u8 spriteId;
struct Sprite *sprite;
- spriteTemplate = *gUnknown_083EDB5C[templateIdx];
- spriteTemplate.images = gUnknown_03001188[templateIdx];
+ spriteTemplate = *sSpriteTemplates_DigitalDisplay[templateIdx];
+ spriteTemplate.images = sImageTables_DigitalDisplay[templateIdx];
spriteId = CreateSprite(&spriteTemplate, x, y, 16);
sprite = &gSprites[spriteId];
sprite->oam.priority = 3;
sprite->callback = callback;
- sprite->data[6] = a4;
- sprite->data[7] = 1;
- if (gUnknown_083EDBC4[templateIdx])
- SetSubspriteTables(sprite, gUnknown_083EDBC4[templateIdx]);
+ sprite->sSpriteId = internalSpriteId;
+ sprite->sWaitForAnim = TRUE;
+ if (sSubspriteTables_DigitalDisplay[templateIdx])
+ SetSubspriteTables(sprite, sSubspriteTables_DigitalDisplay[templateIdx]);
return spriteId;
}
-static void sub_8105C64(struct Sprite *sprite)
+static void SpriteCB_DigitalDisplay_Static(struct Sprite *sprite)
{
- sprite->data[7] = 0;
+ sprite->sWaitForAnim = FALSE;
}
-static void sub_8105C6C(struct Sprite *sprite)
+static void SpriteCB_DigitalDisplay_Smoke(struct Sprite *sprite)
{
- s16 sp0[] = {4, -4, 4, -4};
- s16 sp8[] = {4, 4, -4, -4};
+ s16 targetX[] = {4, -4, 4, -4};
+ s16 targetY[] = {4, 4, -4, -4};
- if (sprite->data[1]++ >= 16)
+ if (sprite->sCounter++ >= 16)
{
sprite->subspriteTableNum ^= 1;
- sprite->data[1] = 0;
+ sprite->sCounter = 0;
}
sprite->pos2.x = 0;
sprite->pos2.y = 0;
if (sprite->subspriteTableNum != 0)
{
- sprite->pos2.x = sp0[sprite->data[6]];
- sprite->pos2.y = sp8[sprite->data[6]];
+ sprite->pos2.x = targetX[sprite->sSpriteId];
+ sprite->pos2.y = targetY[sprite->sSpriteId];
}
}
-static void sub_8105CF0(struct Sprite *sprite)
+static void SpriteCB_DigitalDisplay_SmokeNE(struct Sprite *sprite)
{
sprite->hFlip = TRUE;
- sub_8105C6C(sprite);
+ SpriteCB_DigitalDisplay_Smoke(sprite);
}
-static void sub_8105D08(struct Sprite *sprite)
+static void SpriteCB_DigitalDisplay_SmokeSW(struct Sprite *sprite)
{
sprite->vFlip = TRUE;
- sub_8105C6C(sprite);
+ SpriteCB_DigitalDisplay_Smoke(sprite);
}
-static void sub_8105D20(struct Sprite *sprite)
+static void SpriteCB_DigitalDisplay_SmokeSE(struct Sprite *sprite)
{
sprite->hFlip = TRUE;
sprite->vFlip = TRUE;
- sub_8105C6C(sprite);
+ SpriteCB_DigitalDisplay_Smoke(sprite);
}
-static void sub_8105D3C(struct Sprite *sprite)
+// The word "Reel" in Reel Time
+static void SpriteCB_DigitalDisplay_Reel(struct Sprite *sprite)
{
- switch (sprite->data[0])
+ switch (sprite->sState)
{
case 0:
sprite->pos1.x += 4;
if (sprite->pos1.x >= 0xd0)
{
sprite->pos1.x = 0xd0;
- sprite->data[0]++;
+ sprite->sState++;
}
break;
case 1:
- if (++sprite->data[1] > 90)
- sprite->data[0]++;
+ if (++sprite->sCounter > 90)
+ sprite->sState++;
break;
case 2:
sprite->pos1.x += 4;
if (sprite->pos1.x >= 0x110)
- sprite->data[0]++;
+ sprite->sState++;
break;
case 3:
- sprite->data[7] = 0;
+ sprite->sWaitForAnim = FALSE;
break;
}
}
-static void sub_8105DA4(struct Sprite *sprite)
+// The word "Time" in Reel Time
+static void SpriteCB_DigitalDisplay_Time(struct Sprite *sprite)
{
- switch (sprite->data[0])
+ switch (sprite->sState)
{
case 0:
sprite->pos1.x -= 4;
if (sprite->pos1.x <= 0xd0)
{
sprite->pos1.x = 0xd0;
- sprite->data[0]++;
+ sprite->sState++;
}
break;
case 1:
- if (++sprite->data[1] > 90)
- sprite->data[0]++;
+ if (++sprite->sCounter > 90)
+ sprite->sState++;
break;
case 2:
sprite->pos1.x -= 4;
if (sprite->pos1.x <= 0x90)
- sprite->data[0]++;
+ sprite->sState++;
break;
case 3:
- sprite->data[7] = 0;
+ sprite->sWaitForAnim = FALSE;
break;
}
}
-static void sub_8105E08(struct Sprite *sprite)
+static void SpriteCB_DigitalDisplay_ReelTimeNumber(struct Sprite *sprite)
{
- switch (sprite->data[0])
+ switch (sprite->sState)
{
case 0:
- StartSpriteAnim(sprite, sSlotMachine->fairRollsLeft - 1);
- sprite->data[0]++;
+ StartSpriteAnim(sprite, sSlotMachine->reelTimeSpinsLeft - 1);
+ sprite->sState++;
// fallthrough
case 1:
- if (++sprite->data[1] >= 4)
+ if (++sprite->sCounter >= 4)
{
- sprite->data[0]++;
- sprite->data[1] = 0;
+ sprite->sState++;
+ sprite->sCounter = 0;
}
break;
case 2:
@@ -3915,54 +4251,54 @@ static void sub_8105E08(struct Sprite *sprite)
if (sprite->pos1.x >= 0xd0)
{
sprite->pos1.x = 0xd0;
- sprite->data[0]++;
+ sprite->sState++;
}
break;
case 3:
- if (++sprite->data[1] > 90)
- sprite->data[0]++;
+ if (++sprite->sCounter > 90)
+ sprite->sState++;
break;
case 4:
sprite->pos1.x += 4;
if (sprite->pos1.x >= 0xf8)
- sprite->data[0]++;
+ sprite->sState++;
break;
case 5:
- sprite->data[7] = 0;
+ sprite->sWaitForAnim = FALSE;
break;
}
}
-static void sub_8105EB4(struct Sprite *sprite)
+static void SpriteCB_DigitalDisplay_PokeballRocking(struct Sprite *sprite)
{
- switch (sprite->data[0])
+ switch (sprite->sState)
{
case 0:
sprite->animPaused = TRUE;
- sprite->data[0]++;
+ sprite->sState++;
// fallthrough
case 1:
sprite->pos1.y += 8;
if (sprite->pos1.y >= 0x70)
{
sprite->pos1.y = 0x70;
- sprite->data[1] = 16;
- sprite->data[0]++;
+ sprite->sCounter = 16;
+ sprite->sState++;
}
break;
case 2:
if (sprite->data[2] == 0)
{
- sprite->pos1.y -= sprite->data[1];
- sprite->data[1] = -sprite->data[1];
+ sprite->pos1.y -= sprite->sCounter;
+ sprite->sCounter = -sprite->sCounter;
if (++sprite->data[3] >= 2)
{
- sprite->data[1] >>= 2;
+ sprite->sCounter >>= 2;
sprite->data[3] = 0;
- if (sprite->data[1] == 0)
+ if (sprite->sCounter == 0)
{
- sprite->data[0]++;
- sprite->data[7] = 0;
+ sprite->sState++;
+ sprite->sWaitForAnim = FALSE;
sprite->animPaused = FALSE;
}
}
@@ -3973,53 +4309,53 @@ static void sub_8105EB4(struct Sprite *sprite)
}
}
-static void sub_8105F54(struct Sprite *sprite)
+static void SpriteCB_DigitalDisplay_Stop(struct Sprite *sprite)
{
- switch (sprite->data[0])
+ switch (sprite->sState)
{
case 0:
- if (++sprite->data[1] > 8)
- sprite->data[0]++;
+ if (++sprite->sCounter > 8)
+ sprite->sState++;
break;
case 1:
sprite->pos1.y += 2;
if (sprite->pos1.y >= 0x30)
{
sprite->pos1.y = 0x30;
- sprite->data[0]++;
- sprite->data[7] = 0;
+ sprite->sState++;
+ sprite->sWaitForAnim = FALSE;
}
break;
}
}
-static void sub_8105F9C(struct Sprite *sprite)
+static void SpriteCB_DigitalDisplay_AButtonStop(struct Sprite *sprite)
{
- switch (sprite->data[0])
+ switch (sprite->sState)
{
case 0:
sprite->invisible = TRUE;
- if (++sprite->data[1] > 0x20)
+ if (++sprite->sCounter > 0x20)
{
- sprite->data[0]++;
- sprite->data[1] = 5;
+ sprite->sState++;
+ sprite->sCounter = 5;
sprite->oam.mosaic = TRUE;
sprite->invisible = FALSE;
StartSpriteAnim(sprite, 1);
- SetGpuReg(REG_OFFSET_MOSAIC, ((sprite->data[1] << 4) | sprite->data[1]) << 8);
+ SetGpuReg(REG_OFFSET_MOSAIC, ((sprite->sCounter << 4) | sprite->sCounter) << 8);
}
break;
case 1:
- sprite->data[1] -= (sprite->data[2] >> 8);
- if (sprite->data[1] < 0)
- sprite->data[1] = 0;
- SetGpuReg(REG_OFFSET_MOSAIC, ((sprite->data[1] << 4) | sprite->data[1]) << 8);
+ sprite->sCounter -= (sprite->data[2] >> 8);
+ if (sprite->sCounter < 0)
+ sprite->sCounter = 0;
+ SetGpuReg(REG_OFFSET_MOSAIC, ((sprite->sCounter << 4) | sprite->sCounter) << 8);
sprite->data[2] &= 0xff;
sprite->data[2] += 0x80;
- if (sprite->data[1] == 0)
+ if (sprite->sCounter == 0)
{
- sprite->data[0]++;
- sprite->data[7] = 0;
+ sprite->sState++;
+ sprite->sWaitForAnim = FALSE;
sprite->oam.mosaic = FALSE;
StartSpriteAnim(sprite, 0);
}
@@ -4027,11 +4363,11 @@ static void sub_8105F9C(struct Sprite *sprite)
}
}
-static void sub_8106058(struct Sprite *sprite)
+static void SpriteCB_DigitalDisplay_PokeballShining(struct Sprite *sprite)
{
- if (sprite->data[1] < 3)
+ if (sprite->sCounter < 3)
{
- LoadPalette(gUnknown_083EDE10[sprite->data[1]], (IndexOfSpritePaletteTag(6) << 4) + 0x100, 0x20);
+ LoadPalette(sPokeballShiningPalTable[sprite->sCounter], (IndexOfSpritePaletteTag(PALTAG_DIG_DISPLAY) << 4) + 0x100, 32);
if (++sprite->data[2] >= 4)
{
sprite->data[1]++;
@@ -4040,34 +4376,35 @@ static void sub_8106058(struct Sprite *sprite)
}
else
{
- LoadPalette(gUnknown_083EDE10[sprite->data[1]], (IndexOfSpritePaletteTag(6) << 4) + 0x100, 0x20);
+ LoadPalette(sPokeballShiningPalTable[sprite->sCounter], (IndexOfSpritePaletteTag(PALTAG_DIG_DISPLAY) << 4) + 0x100, 32);
if (++sprite->data[2] >= 25)
{
- sprite->data[1] = 0;
+ sprite->sCounter = 0;
sprite->data[2] = 0;
}
}
StartSpriteAnimIfDifferent(sprite, 1);
- sprite->data[7] = 0;
+ sprite->sWaitForAnim = FALSE;
}
-static void sub_81060FC(struct Sprite *sprite)
+static void SpriteCB_DigitalDisplay_RegBonus(struct Sprite *sprite)
{
- s16 sp00[] = {0, -40, 0, 0, 48, 0, 24, 0};
- s16 sp10[] = {-32, 0, -32, -48, 0, -48, 0, -48};
- s16 sp20[] = {16, 12, 16, 0, 0, 4, 8, 8};
+ // Elements in array correspond to R E G B O N U S
+ s16 letterXOffset[] = { 0, -40, 0, 0, 48, 0, 24, 0};
+ s16 letterYOffset[] = {-32, 0, -32, -48, 0, -48, 0, -48};
+ s16 letterDelay[] = { 16, 12, 16, 0, 0, 4, 8, 8};
- switch (sprite->data[0])
+ switch (sprite->sState)
{
case 0:
- sprite->pos2.x = sp00[sprite->data[6]];
- sprite->pos2.y = sp10[sprite->data[6]];
- sprite->data[1] = sp20[sprite->data[6]];
- sprite->data[0]++;
+ sprite->pos2.x = letterXOffset[sprite->sSpriteId];
+ sprite->pos2.y = letterYOffset[sprite->sSpriteId];
+ sprite->sCounter = letterDelay[sprite->sSpriteId];
+ sprite->sState++;
// fallthrough
case 1:
- if (sprite->data[1]-- == 0)
- sprite->data[0]++;
+ if (sprite->sCounter-- == 0)
+ sprite->sState++;
break;
case 2:
if (sprite->pos2.x > 0)
@@ -4081,166 +4418,168 @@ static void sub_81060FC(struct Sprite *sprite)
sprite->pos2.y += 4;
if (sprite->pos2.x == 0 && sprite->pos2.y == 0)
- sprite->data[0]++;
+ sprite->sState++;
break;
}
}
-static void sub_81061C8(struct Sprite *sprite)
+static void SpriteCB_DigitalDisplay_BigBonus(struct Sprite *sprite)
{
s16 sp0[] = {160, 192, 224, 104, 80, 64, 48, 24};
- if (sprite->data[0] == 0)
+ if (sprite->sState == 0)
{
- sprite->data[0]++;
- sprite->data[1] = 12;
+ sprite->sState++;
+ sprite->sCounter = 12;
}
- sprite->pos2.x = Cos(sp0[sprite->data[6]], sprite->data[1]);
- sprite->pos2.y = Sin(sp0[sprite->data[6]], sprite->data[1]);
- if (sprite->data[1] != 0)
- sprite->data[1]--;
+ sprite->pos2.x = Cos(sp0[sprite->sSpriteId], sprite->sCounter);
+ sprite->pos2.y = Sin(sp0[sprite->sSpriteId], sprite->sCounter);
+ if (sprite->sCounter != 0)
+ sprite->sCounter--;
}
-static void sub_8106230(struct Sprite *sprite)
+// For the A Button prompt when inserting bet
+// Initially no sprite until after the first bet
+static void SpriteCB_DigitalDisplay_AButtonStart(struct Sprite *sprite)
{
- switch (sprite->data[0])
+ switch (sprite->sState)
{
case 0:
- sSlotMachine->winIn = 0x2f;
- sSlotMachine->winOut = 0x3f;
- sSlotMachine->win0v = 0x2088;
+ sSlotMachine->winIn = WININ_WIN0_BG_ALL | WININ_WIN0_CLR;
+ sSlotMachine->winOut = WINOUT_WIN01_BG_ALL | WINOUT_WIN01_OBJ | WINOUT_WIN01_CLR;
+ sSlotMachine->win0v = WIN_RANGE(32, 136);
sprite->invisible = TRUE;
- sprite->data[0]++;
+ sprite->sState++;
// fallthrough
case 1:
- sprite->data[1] += 2;
- sprite->data[2] = sprite->data[1] + 0xb0;
- sprite->data[3] = 0xf0 - sprite->data[1];
- if (sprite->data[2] > 0xd0)
- sprite->data[2] = 0xd0;
- if (sprite->data[3] < 0xd0)
- sprite->data[3] = 0xd0;
+ sprite->sCounter += 2;
+ sprite->data[2] = sprite->sCounter + 176;
+ sprite->data[3] = DISPLAY_WIDTH - sprite->sCounter;
+ if (sprite->data[2] > 208)
+ sprite->data[2] = 208;
+ if (sprite->data[3] < 208)
+ sprite->data[3] = 208;
sSlotMachine->win0h = (sprite->data[2] << 8) | sprite->data[3];
- if (sprite->data[1] > 0x33)
+ if (sprite->sCounter > 51)
{
- sprite->data[0]++;
- sSlotMachine->winIn = 0x3f;
+ sprite->sState++;
+ sSlotMachine->winIn = WININ_WIN0_BG_ALL | WININ_WIN0_OBJ | WININ_WIN0_CLR;
}
break;
case 2:
if (sSlotMachine->bet == 0)
break;
- sub_8104D30(5, SpriteCallbackDummy, 0xd0, 0x74, 0);
- sSlotMachine->win0h = 0xc0e0;
- sSlotMachine->win0v = 0x6880;
- sSlotMachine->winIn = 0x2f;
- sprite->data[0]++;
- sprite->data[1] = 0;
+ AddDigitalDisplaySprite(DIG_SPRITE_A_BUTTON, SpriteCallbackDummy, 208, 116, 0);
+ sSlotMachine->win0h = WIN_RANGE(192, 224);
+ sSlotMachine->win0v = WIN_RANGE(104, 128);
+ sSlotMachine->winIn = WININ_WIN0_BG_ALL | WININ_WIN0_CLR;
+ sprite->sState++;
+ sprite->sCounter = 0;
// fallthrough
case 3:
- sprite->data[1] += 2;
- sprite->data[2] = sprite->data[1] + 0xc0;
- sprite->data[3] = 0xe0 - sprite->data[1];
- if (sprite->data[2] > 0xd0)
- sprite->data[2] = 0xd0;
- if (sprite->data[3] < 0xd0)
- sprite->data[3] = 0xd0;
+ sprite->sCounter += 2;
+ sprite->data[2] = sprite->sCounter + 192;
+ sprite->data[3] = DISPLAY_WIDTH - 16 - sprite->sCounter;
+ if (sprite->data[2] > 208)
+ sprite->data[2] = 208;
+ if (sprite->data[3] < 208)
+ sprite->data[3] = 208;
sSlotMachine->win0h = (sprite->data[2] << 8) | sprite->data[3];
- if (sprite->data[1] > 0x0f)
+ if (sprite->sCounter > 15)
{
- sprite->data[0]++;
- sSlotMachine->winIn = 0x3f;
+ sprite->sState++;
+ sSlotMachine->winIn = WININ_WIN0_BG_ALL | WININ_WIN0_OBJ | WININ_WIN0_CLR;
}
break;
}
}
-static void nullsub_70(void)
+static void EndDigitalDisplayScene_Dummy(void)
{
}
-static void sub_8106364(void)
+static void EndDigitalDisplayScene_StopReel(void)
{
SetGpuReg(REG_OFFSET_MOSAIC, 0);
}
-static void sub_8106370(void)
+static void EndDigitalDisplayScene_Win(void)
{
- LoadPalette(gUnknown_083EDE20, (IndexOfSpritePaletteTag(6) << 4) + 0x100, 0x20);
+ LoadPalette(sDigitalDisplay_Pal, (IndexOfSpritePaletteTag(PALTAG_DIG_DISPLAY) << 4) + 0x100, 0x20);
}
-static void sub_810639C(void)
+static void EndDigitalDisplayScene_InsertBet(void)
{
- sSlotMachine->win0h = 0xf0;
- sSlotMachine->win0v = 0xa0;
- sSlotMachine->winIn = 0x3f;
- sSlotMachine->winOut = 0x3f;
+ sSlotMachine->win0h = DISPLAY_WIDTH;
+ sSlotMachine->win0v = DISPLAY_HEIGHT;
+ sSlotMachine->winIn = WININ_WIN0_BG_ALL | WININ_WIN0_OBJ | WININ_WIN0_CLR;
+ sSlotMachine->winOut = WINOUT_WIN01_BG_ALL | WINOUT_WIN01_OBJ | WINOUT_WIN01_CLR;
}
-static void sub_81063C0(void)
+static void LoadSlotMachineGfx(void)
{
u8 i;
- sub_8106404();
- sUnknown_0203AAD4 = Alloc(0x3200);
- LZDecompressWram(gSlotMachineReelTime_Gfx, sUnknown_0203AAD4);
- sUnknown_0203AAD8 = Alloc(0x3600);
- LZDecompressWram(gReelTimeGfx, sUnknown_0203AAD8);
- sUnknown_0203AB30 = AllocZeroed(sizeof(struct SpriteSheet) * 22);
- for (i = 0; i < 22; i++)
+ LoadReelBackground();
+ sDigitalDisplayGfxPtr = Alloc(0x3200);
+ LZDecompressWram(gSlotMachineDigitalDisplay_Gfx, sDigitalDisplayGfxPtr);
+ sReelTimeGfxPtr = Alloc(0x3600);
+ LZDecompressWram(sReelTimeGfx, sReelTimeGfxPtr);
+ sSlotMachineSpritesheetsPtr = AllocZeroed(sizeof(struct SpriteSheet) * ARRAY_COUNT(sSlotMachineSpriteSheets));
+ for (i = 0; i < ARRAY_COUNT(sSlotMachineSpriteSheets); i++)
{
- sUnknown_0203AB30[i].data = gSlotMachineSpriteSheets[i].data;
- sUnknown_0203AB30[i].size = gSlotMachineSpriteSheets[i].size;
- sUnknown_0203AB30[i].tag = gSlotMachineSpriteSheets[i].tag;
+ sSlotMachineSpritesheetsPtr[i].data = sSlotMachineSpriteSheets[i].data;
+ sSlotMachineSpritesheetsPtr[i].size = sSlotMachineSpriteSheets[i].size;
+ sSlotMachineSpritesheetsPtr[i].tag = sSlotMachineSpriteSheets[i].tag;
}
- sUnknown_0203AB30[17].data = sUnknown_0203AAD4 + 0xA00;
- sUnknown_0203AB30[18].data = sUnknown_0203AAD4 + 0x1400;
- sUnknown_0203AB30[19].data = sUnknown_0203AAD4 + 0x1600;
- sUnknown_0203AB30[20].data = sUnknown_0203AAD4 + 0x1900;
- LoadSpriteSheets(sUnknown_0203AB30);
- LoadSpritePalettes(gSlotMachineSpritePalettes);
+ sSlotMachineSpritesheetsPtr[GFXTAG_STOP - 1].data = sDigitalDisplayGfxPtr + 0xA00;
+ sSlotMachineSpritesheetsPtr[GFXTAG_BONUS - 1].data = sDigitalDisplayGfxPtr + 0x1400;
+ sSlotMachineSpritesheetsPtr[GFXTAG_BIG - 1].data = sDigitalDisplayGfxPtr + 0x1600;
+ sSlotMachineSpritesheetsPtr[GFXTAG_REG - 1].data = sDigitalDisplayGfxPtr + 0x1900;
+ LoadSpriteSheets(sSlotMachineSpritesheetsPtr);
+ LoadSpritePalettes(sSlotMachineSpritePalettes);
}
-static void sub_8106404(void)
+static void LoadReelBackground(void)
{
u8 *dest;
u8 i, j;
- sUnknown_0203AB2C = AllocZeroed(sizeof(struct SpriteSheet));
- sUnknown_0203AAE0 = AllocZeroed(0x2000);
- dest = sUnknown_0203AAE0;
+ sReelBackgroundSpriteSheet = AllocZeroed(sizeof(struct SpriteSheet));
+ sReelBackground_Gfx = AllocZeroed(0x2000); // Background is plain white
+ dest = sReelBackground_Gfx;
for (i = 0; i < 0x40; i++)
{
for (j = 0; j < 0x20; j++, dest++)
- *dest = gUnknown_083EDCDC[j];
+ *dest = sReelBackground_Tilemap[j];
}
- sUnknown_0203AB2C->data = sUnknown_0203AAE0;
- sUnknown_0203AB2C->size = 0x800;
- sUnknown_0203AB2C->tag = 0x11;
- LoadSpriteSheet(sUnknown_0203AB2C);
+ sReelBackgroundSpriteSheet->data = sReelBackground_Gfx;
+ sReelBackgroundSpriteSheet->size = 0x800;
+ sReelBackgroundSpriteSheet->tag = GFXTAG_REEL_BG;
+ LoadSpriteSheet(sReelBackgroundSpriteSheet);
}
-static void sub_8106448(void)
+static void LoadMenuGfx(void)
{
- sUnknown_0203AAC8 = Alloc(0x2200);
- LZDecompressWram(gSlotMachineMenu_Gfx, sUnknown_0203AAC8);
- LoadBgTiles(2, sUnknown_0203AAC8, 0x2200, 0);
+ sMenuGfx = Alloc(0x2200);
+ LZDecompressWram(gSlotMachineMenu_Gfx, sMenuGfx);
+ LoadBgTiles(2, sMenuGfx, 0x2200, 0);
LoadPalette(gSlotMachineMenu_Pal, 0, 160);
- LoadPalette(gPalette_83EDE24, 208, 32);
+ LoadPalette(sUnkPalette, 208, 32);
}
-static void sub_81064B8(void)
+static void LoadMenuAndReelOverlayTilemaps(void)
{
- sub_812F968();
- LoadSlotMachineWheelOverlay();
+ LoadSlotMachineMenuTilemap();
+ LoadSlotMachineReelOverlay();
}
-static void sub_812F968(void)
+static void LoadSlotMachineMenuTilemap(void)
{
LoadBgTilemap(2, gSlotMachineMenu_Tilemap, 0x500, 0);
}
-static void LoadSlotMachineWheelOverlay(void)
+static void LoadSlotMachineReelOverlay(void)
{
s16 x, y, dx;
@@ -4248,226 +4587,227 @@ static void LoadSlotMachineWheelOverlay(void)
{
for (dx = 0; dx < 4; dx++)
{
- LoadBgTilemap(3, sUnknown_0203AAD0, 2, x + dx + 5 * 32);
- LoadBgTilemap(3, sUnknown_0203AAD0 + 1, 2, x + dx + 13 * 32);
- LoadBgTilemap(3, sUnknown_0203AAD0 + 2, 2, x + dx + 6 * 32);
- LoadBgTilemap(3, sUnknown_0203AAD0 + 3, 2, x + dx + 12 * 32);
+ LoadBgTilemap(3, sReelOverlay_Tilemap, 2, x + dx + 5 * 32);
+ LoadBgTilemap(3, sReelOverlay_Tilemap + 1, 2, x + dx + 13 * 32);
+ LoadBgTilemap(3, sReelOverlay_Tilemap + 2, 2, x + dx + 6 * 32);
+ LoadBgTilemap(3, sReelOverlay_Tilemap + 3, 2, x + dx + 12 * 32);
}
- LoadBgTilemap(3, sUnknown_0203AAD0 + 4, 2, x + 6 * 32);
- LoadBgTilemap(3, sUnknown_0203AAD0 + 5, 2, x + 12 * 32);
+ LoadBgTilemap(3, sReelOverlay_Tilemap + 4, 2, x + 6 * 32);
+ LoadBgTilemap(3, sReelOverlay_Tilemap + 5, 2, x + 12 * 32);
for (y = 7; y <= 11; y++)
- LoadBgTilemap(3, sUnknown_0203AAD0 + 6, 2, x + y * 32);
+ LoadBgTilemap(3, sReelOverlay_Tilemap + 6, 2, x + y * 32);
}
}
-static void sub_81065A8(s16 arg0, u16 arg1, u16 arg2, u16 arg3, u16 arg4)
+// For (un)shading the gray button at the bottom of a reel when A is pressed. The button is colored in quadrants
+static void SetReelButtonTilemap(s16 offset, u16 topLeft, u16 topRight, u16 bottomLeft, u16 bottomRight)
{
- sUnknown_0203AADC[0] = arg1;
- sUnknown_0203AADC[1] = arg2;
- sUnknown_0203AADC[2] = arg3;
- sUnknown_0203AADC[3] = arg4;
+ sReelButtonPress_Tilemap[0] = topLeft;
+ sReelButtonPress_Tilemap[1] = topRight;
+ sReelButtonPress_Tilemap[2] = bottomLeft;
+ sReelButtonPress_Tilemap[3] = bottomRight;
- LoadBgTilemap(2, sUnknown_0203AADC, 2, 15 * 32 + arg0);
- LoadBgTilemap(2, sUnknown_0203AADC + 1, 2, 15 * 32 + 1 + arg0);
- LoadBgTilemap(2, sUnknown_0203AADC + 2, 2, 16 * 32 + arg0);
- LoadBgTilemap(2, sUnknown_0203AADC + 3, 2, 16 * 32 + 1 + arg0);
+ LoadBgTilemap(2, sReelButtonPress_Tilemap, 2, 15 * 32 + offset); // Top left
+ LoadBgTilemap(2, sReelButtonPress_Tilemap + 1, 2, 15 * 32 + 1 + offset); // Top right
+ LoadBgTilemap(2, sReelButtonPress_Tilemap + 2, 2, 16 * 32 + offset); // Bottom left
+ LoadBgTilemap(2, sReelButtonPress_Tilemap + 3, 2, 16 * 32 + 1 + offset); // Bottom Right
}
-static void sub_81065DC(void)
+static void LoadInfoBoxTilemap(void)
{
- LoadBgTilemap(2, gUnknown_08DCEC70, 0x500, 0);
+ LoadBgTilemap(2, gSlotMachineInfoBox_Tilemap, 0x500, 0);
HideBg(3);
}
-static void SlotMachineSetup_9_0(void)
-{
- gUnknown_03001188[0] = sUnknown_0203AAF4;
- gUnknown_03001188[1] = sUnknown_0203AAF8;
- gUnknown_03001188[2] = sUnknown_0203AAFC;
- gUnknown_03001188[3] = sUnknown_0203AB04;
- gUnknown_03001188[4] = sUnknown_0203AB08;
- gUnknown_03001188[5] = sUnknown_0203AB18;
- gUnknown_03001188[6] = sUnknown_0203AB1C;
- gUnknown_03001188[7] = sUnknown_0203AB20;
- gUnknown_03001188[8] = sUnknown_0203AB24;
- gUnknown_03001188[9] = sUnknown_0203AB28;
- gUnknown_03001188[10] = sUnknown_0203AB00;
- gUnknown_03001188[11] = sUnknown_0203AB00;
- gUnknown_03001188[12] = sUnknown_0203AB00;
- gUnknown_03001188[13] = sUnknown_0203AB00;
- gUnknown_03001188[14] = sUnknown_0203AB0C;
- gUnknown_03001188[15] = sUnknown_0203AB0C;
- gUnknown_03001188[16] = sUnknown_0203AB0C;
- gUnknown_03001188[17] = sUnknown_0203AB0C;
- gUnknown_03001188[18] = sUnknown_0203AB0C;
- gUnknown_03001188[19] = sUnknown_0203AB10;
- gUnknown_03001188[20] = sUnknown_0203AB10;
- gUnknown_03001188[21] = sUnknown_0203AB10;
- gUnknown_03001188[22] = sUnknown_0203AB14;
- gUnknown_03001188[23] = sUnknown_0203AB14;
- gUnknown_03001188[24] = sUnknown_0203AB14;
- gUnknown_03001188[25] = NULL;
-}
-
-static void SlotMachineSetup_8_0(void)
-{
- sUnknown_0203AAF4 = AllocZeroed(sizeof(struct SpriteFrameImage) * 1);
- sUnknown_0203AAF4[0].data = sUnknown_0203AAD4;
- sUnknown_0203AAF4[0].size = 0x600;
-
- sUnknown_0203AAF8 = AllocZeroed(sizeof(struct SpriteFrameImage) * 1);
- sUnknown_0203AAF8[0].data = sUnknown_0203AAD4 + 0x600;
- sUnknown_0203AAF8[0].size = 0x200;
-
- sUnknown_0203AAFC = AllocZeroed(sizeof(struct SpriteFrameImage) * 1);
- sUnknown_0203AAFC[0].data = sUnknown_0203AAD4 + 0x800;
- sUnknown_0203AAFC[0].size = 0x200;
-
- sUnknown_0203AB00 = AllocZeroed(sizeof(struct SpriteFrameImage) * 1);
- sUnknown_0203AB00[0].data = sUnknown_0203AAD4 + 0xA00;
- sUnknown_0203AB00[0].size = 0x200;
-
- sUnknown_0203AB04 = AllocZeroed(sizeof(struct SpriteFrameImage) * 1);
- sUnknown_0203AB04[0].data = sUnknown_0203AAD4 + 0xC00;
- sUnknown_0203AB04[0].size = 0x300;
-
- sUnknown_0203AB08 = AllocZeroed(sizeof(struct SpriteFrameImage) * 1);
- sUnknown_0203AB08[0].data = sUnknown_0203AAD4 + 0x1000;
- sUnknown_0203AB08[0].size = 0x400;
-
- sUnknown_0203AB0C = AllocZeroed(sizeof(struct SpriteFrameImage) * 1);
- sUnknown_0203AB0C[0].data = sUnknown_0203AAD4 + 0x1400;
- sUnknown_0203AB0C[0].size = 0x200;
-
- sUnknown_0203AB10 = AllocZeroed(sizeof(struct SpriteFrameImage) * 1);
- sUnknown_0203AB10[0].data = sUnknown_0203AAD4 + 0x1600;
- sUnknown_0203AB10[0].size = 0x300;
-
- sUnknown_0203AB14 = AllocZeroed(sizeof(struct SpriteFrameImage) * 1);
- sUnknown_0203AB14[0].data = sUnknown_0203AAD4 + 0x1900;
- sUnknown_0203AB14[0].size = 0x300;
-
- sUnknown_0203AB18 = AllocZeroed(sizeof(struct SpriteFrameImage) * 2);
- sUnknown_0203AB18[0].data = sUnknown_0203AAD4 + 0x1C00;
- sUnknown_0203AB18[0].size = 0x200;
- sUnknown_0203AB18[1].data = sUnknown_0203AAD4 + 0x1E00;
- sUnknown_0203AB18[1].size = 0x200;
-
- sUnknown_0203AB1C = AllocZeroed(sizeof(struct SpriteFrameImage) * 1);
- sUnknown_0203AB1C[0].data = sUnknown_0203AAD4 + 0x2000;
- sUnknown_0203AB1C[0].size = 640;
-
- sUnknown_0203AB20 = AllocZeroed(sizeof(struct SpriteFrameImage) * 5);
- sUnknown_0203AB20[0].data = sUnknown_0203AAD4 + 0x2280;
- sUnknown_0203AB20[0].size = 0x80;
- sUnknown_0203AB20[1].data = sUnknown_0203AAD4 + 0x2300;
- sUnknown_0203AB20[1].size = 0x80;
- sUnknown_0203AB20[2].data = sUnknown_0203AAD4 + 0x2380;
- sUnknown_0203AB20[2].size = 0x80;
- sUnknown_0203AB20[3].data = sUnknown_0203AAD4 + 0x2400;
- sUnknown_0203AB20[3].size = 0x80;
- sUnknown_0203AB20[4].data = sUnknown_0203AAD4 + 0x2480;
- sUnknown_0203AB20[4].size = 0x80;
-
- sUnknown_0203AB24 = AllocZeroed(sizeof(struct SpriteFrameImage) * 2);
- sUnknown_0203AB24[0].data = sUnknown_0203AAD4 + 0x2600;
- sUnknown_0203AB24[0].size = 0x480;
- sUnknown_0203AB24[1].data = sUnknown_0203AAD4 + 10880;
- sUnknown_0203AB24[1].size = 0x480;
-
- sUnknown_0203AB28 = AllocZeroed(sizeof(struct SpriteFrameImage) * 2);
- sUnknown_0203AB28[0].data = sUnknown_0203AAD4 + 0x2F00;
- sUnknown_0203AB28[0].size = 0x180;
- sUnknown_0203AB28[1].data = sUnknown_0203AAD4 + 0x3080;
- sUnknown_0203AB28[1].size = 0x180;
-}
-
-static const u8 gReelSymbols[][REEL_NUM_TAGS] =
-{
- {
- SLOT_MACHINE_TAG_7_RED,
- SLOT_MACHINE_TAG_CHERRY,
- SLOT_MACHINE_TAG_AZURILL,
- SLOT_MACHINE_TAG_REPLAY,
- SLOT_MACHINE_TAG_POWER,
- SLOT_MACHINE_TAG_LOTAD,
- SLOT_MACHINE_TAG_7_BLUE,
- SLOT_MACHINE_TAG_LOTAD,
- SLOT_MACHINE_TAG_CHERRY,
- SLOT_MACHINE_TAG_POWER,
- SLOT_MACHINE_TAG_REPLAY,
- SLOT_MACHINE_TAG_AZURILL,
- SLOT_MACHINE_TAG_7_RED,
- SLOT_MACHINE_TAG_POWER,
- SLOT_MACHINE_TAG_LOTAD,
- SLOT_MACHINE_TAG_REPLAY,
- SLOT_MACHINE_TAG_AZURILL,
- SLOT_MACHINE_TAG_7_BLUE,
- SLOT_MACHINE_TAG_POWER,
- SLOT_MACHINE_TAG_LOTAD,
- SLOT_MACHINE_TAG_REPLAY
+static void SetDigitalDisplayImagePtrs(void)
+{
+ sImageTables_DigitalDisplay[DIG_SPRITE_REEL] = sImageTable_DigitalDisplay_Reel;
+ sImageTables_DigitalDisplay[DIG_SPRITE_TIME] = sImageTable_DigitalDisplay_Time;
+ sImageTables_DigitalDisplay[DIG_SPRITE_INSERT] = sImageTable_DigitalDisplay_Insert;
+ sImageTables_DigitalDisplay[DIG_SPRITE_WIN] = sImageTable_DigitalDisplay_Win;
+ sImageTables_DigitalDisplay[DIG_SPRITE_LOSE] = sImageTable_DigitalDisplay_Lose;
+ sImageTables_DigitalDisplay[DIG_SPRITE_A_BUTTON] = sImageTable_DigitalDisplay_AButton;
+ sImageTables_DigitalDisplay[DIG_SPRITE_SMOKE] = sImageTable_DigitalDisplay_Smoke;
+ sImageTables_DigitalDisplay[DIG_SPRITE_NUMBER] = sImageTable_DigitalDisplay_Number;
+ sImageTables_DigitalDisplay[DIG_SPRITE_POKE_BALL] = sImageTable_DigitalDisplay_Pokeball;
+ sImageTables_DigitalDisplay[DIG_SPRITE_D_PAD] = sImageTable_DigitalDisplay_DPad;
+ sImageTables_DigitalDisplay[DIG_SPRITE_STOP_S] = sImageTable_DigitalDisplay_Stop;
+ sImageTables_DigitalDisplay[DIG_SPRITE_STOP_T] = sImageTable_DigitalDisplay_Stop;
+ sImageTables_DigitalDisplay[DIG_SPRITE_STOP_O] = sImageTable_DigitalDisplay_Stop;
+ sImageTables_DigitalDisplay[DIG_SPRITE_STOP_P] = sImageTable_DigitalDisplay_Stop;
+ sImageTables_DigitalDisplay[DIG_SPRITE_BONUS_B] = sImageTable_DigitalDisplay_Bonus;
+ sImageTables_DigitalDisplay[DIG_SPRITE_BONUS_O] = sImageTable_DigitalDisplay_Bonus;
+ sImageTables_DigitalDisplay[DIG_SPRITE_BONUS_N] = sImageTable_DigitalDisplay_Bonus;
+ sImageTables_DigitalDisplay[DIG_SPRITE_BONUS_U] = sImageTable_DigitalDisplay_Bonus;
+ sImageTables_DigitalDisplay[DIG_SPRITE_BONUS_S] = sImageTable_DigitalDisplay_Bonus;
+ sImageTables_DigitalDisplay[DIG_SPRITE_BIG_B] = sImageTable_DigitalDisplay_Big;
+ sImageTables_DigitalDisplay[DIG_SPRITE_BIG_I] = sImageTable_DigitalDisplay_Big;
+ sImageTables_DigitalDisplay[DIG_SPRITE_BIG_G] = sImageTable_DigitalDisplay_Big;
+ sImageTables_DigitalDisplay[DIG_SPRITE_REG_R] = sImageTable_DigitalDisplay_Reg;
+ sImageTables_DigitalDisplay[DIG_SPRITE_REG_E] = sImageTable_DigitalDisplay_Reg;
+ sImageTables_DigitalDisplay[DIG_SPRITE_REG_G] = sImageTable_DigitalDisplay_Reg;
+ sImageTables_DigitalDisplay[DIG_SPRITE_EMPTY] = NULL;
+}
+
+static void AllocDigitalDisplayGfx(void)
+{
+ sImageTable_DigitalDisplay_Reel = AllocZeroed(sizeof(struct SpriteFrameImage) * 1);
+ sImageTable_DigitalDisplay_Reel[0].data = sDigitalDisplayGfxPtr;
+ sImageTable_DigitalDisplay_Reel[0].size = 0x600;
+
+ sImageTable_DigitalDisplay_Time = AllocZeroed(sizeof(struct SpriteFrameImage) * 1);
+ sImageTable_DigitalDisplay_Time[0].data = sDigitalDisplayGfxPtr + 0x600;
+ sImageTable_DigitalDisplay_Time[0].size = 0x200;
+
+ sImageTable_DigitalDisplay_Insert = AllocZeroed(sizeof(struct SpriteFrameImage) * 1);
+ sImageTable_DigitalDisplay_Insert[0].data = sDigitalDisplayGfxPtr + 0x800;
+ sImageTable_DigitalDisplay_Insert[0].size = 0x200;
+
+ sImageTable_DigitalDisplay_Stop = AllocZeroed(sizeof(struct SpriteFrameImage) * 1);
+ sImageTable_DigitalDisplay_Stop[0].data = sDigitalDisplayGfxPtr + 0xA00;
+ sImageTable_DigitalDisplay_Stop[0].size = 0x200;
+
+ sImageTable_DigitalDisplay_Win = AllocZeroed(sizeof(struct SpriteFrameImage) * 1);
+ sImageTable_DigitalDisplay_Win[0].data = sDigitalDisplayGfxPtr + 0xC00;
+ sImageTable_DigitalDisplay_Win[0].size = 0x300;
+
+ sImageTable_DigitalDisplay_Lose = AllocZeroed(sizeof(struct SpriteFrameImage) * 1);
+ sImageTable_DigitalDisplay_Lose[0].data = sDigitalDisplayGfxPtr + 0x1000;
+ sImageTable_DigitalDisplay_Lose[0].size = 0x400;
+
+ sImageTable_DigitalDisplay_Bonus = AllocZeroed(sizeof(struct SpriteFrameImage) * 1);
+ sImageTable_DigitalDisplay_Bonus[0].data = sDigitalDisplayGfxPtr + 0x1400;
+ sImageTable_DigitalDisplay_Bonus[0].size = 0x200;
+
+ sImageTable_DigitalDisplay_Big = AllocZeroed(sizeof(struct SpriteFrameImage) * 1);
+ sImageTable_DigitalDisplay_Big[0].data = sDigitalDisplayGfxPtr + 0x1600;
+ sImageTable_DigitalDisplay_Big[0].size = 0x300;
+
+ sImageTable_DigitalDisplay_Reg = AllocZeroed(sizeof(struct SpriteFrameImage) * 1);
+ sImageTable_DigitalDisplay_Reg[0].data = sDigitalDisplayGfxPtr + 0x1900;
+ sImageTable_DigitalDisplay_Reg[0].size = 0x300;
+
+ sImageTable_DigitalDisplay_AButton = AllocZeroed(sizeof(struct SpriteFrameImage) * 2);
+ sImageTable_DigitalDisplay_AButton[0].data = sDigitalDisplayGfxPtr + 0x1C00;
+ sImageTable_DigitalDisplay_AButton[0].size = 0x200;
+ sImageTable_DigitalDisplay_AButton[1].data = sDigitalDisplayGfxPtr + 0x1E00;
+ sImageTable_DigitalDisplay_AButton[1].size = 0x200;
+
+ sImageTable_DigitalDisplay_Smoke = AllocZeroed(sizeof(struct SpriteFrameImage) * 1);
+ sImageTable_DigitalDisplay_Smoke[0].data = sDigitalDisplayGfxPtr + 0x2000;
+ sImageTable_DigitalDisplay_Smoke[0].size = 640;
+
+ sImageTable_DigitalDisplay_Number = AllocZeroed(sizeof(struct SpriteFrameImage) * 5);
+ sImageTable_DigitalDisplay_Number[0].data = sDigitalDisplayGfxPtr + 0x2280;
+ sImageTable_DigitalDisplay_Number[0].size = 0x80;
+ sImageTable_DigitalDisplay_Number[1].data = sDigitalDisplayGfxPtr + 0x2300;
+ sImageTable_DigitalDisplay_Number[1].size = 0x80;
+ sImageTable_DigitalDisplay_Number[2].data = sDigitalDisplayGfxPtr + 0x2380;
+ sImageTable_DigitalDisplay_Number[2].size = 0x80;
+ sImageTable_DigitalDisplay_Number[3].data = sDigitalDisplayGfxPtr + 0x2400;
+ sImageTable_DigitalDisplay_Number[3].size = 0x80;
+ sImageTable_DigitalDisplay_Number[4].data = sDigitalDisplayGfxPtr + 0x2480;
+ sImageTable_DigitalDisplay_Number[4].size = 0x80;
+
+ sImageTable_DigitalDisplay_Pokeball = AllocZeroed(sizeof(struct SpriteFrameImage) * 2);
+ sImageTable_DigitalDisplay_Pokeball[0].data = sDigitalDisplayGfxPtr + 0x2600;
+ sImageTable_DigitalDisplay_Pokeball[0].size = 0x480;
+ sImageTable_DigitalDisplay_Pokeball[1].data = sDigitalDisplayGfxPtr + 10880;
+ sImageTable_DigitalDisplay_Pokeball[1].size = 0x480;
+
+ sImageTable_DigitalDisplay_DPad = AllocZeroed(sizeof(struct SpriteFrameImage) * 2);
+ sImageTable_DigitalDisplay_DPad[0].data = sDigitalDisplayGfxPtr + 0x2F00;
+ sImageTable_DigitalDisplay_DPad[0].size = 0x180;
+ sImageTable_DigitalDisplay_DPad[1].data = sDigitalDisplayGfxPtr + 0x3080;
+ sImageTable_DigitalDisplay_DPad[1].size = 0x180;
+}
+
+static const u8 sReelSymbolTileTags[NUM_REELS][SYMBOLS_PER_REEL] =
+{
+ [LEFT_REEL] = {
+ GFXTAG_7_RED,
+ GFXTAG_CHERRY,
+ GFXTAG_AZURILL,
+ GFXTAG_REPLAY,
+ GFXTAG_POWER,
+ GFXTAG_LOTAD,
+ GFXTAG_7_BLUE,
+ GFXTAG_LOTAD,
+ GFXTAG_CHERRY,
+ GFXTAG_POWER,
+ GFXTAG_REPLAY,
+ GFXTAG_AZURILL,
+ GFXTAG_7_RED,
+ GFXTAG_POWER,
+ GFXTAG_LOTAD,
+ GFXTAG_REPLAY,
+ GFXTAG_AZURILL,
+ GFXTAG_7_BLUE,
+ GFXTAG_POWER,
+ GFXTAG_LOTAD,
+ GFXTAG_REPLAY
},
- {
- SLOT_MACHINE_TAG_7_RED,
- SLOT_MACHINE_TAG_CHERRY,
- SLOT_MACHINE_TAG_REPLAY,
- SLOT_MACHINE_TAG_LOTAD,
- SLOT_MACHINE_TAG_AZURILL,
- SLOT_MACHINE_TAG_CHERRY,
- SLOT_MACHINE_TAG_REPLAY,
- SLOT_MACHINE_TAG_POWER,
- SLOT_MACHINE_TAG_POWER,
- SLOT_MACHINE_TAG_LOTAD,
- SLOT_MACHINE_TAG_7_BLUE,
- SLOT_MACHINE_TAG_LOTAD,
- SLOT_MACHINE_TAG_REPLAY,
- SLOT_MACHINE_TAG_CHERRY,
- SLOT_MACHINE_TAG_AZURILL,
- SLOT_MACHINE_TAG_LOTAD,
- SLOT_MACHINE_TAG_REPLAY,
- SLOT_MACHINE_TAG_CHERRY,
- SLOT_MACHINE_TAG_LOTAD,
- SLOT_MACHINE_TAG_REPLAY,
- SLOT_MACHINE_TAG_CHERRY
+ [MIDDLE_REEL] = {
+ GFXTAG_7_RED,
+ GFXTAG_CHERRY,
+ GFXTAG_REPLAY,
+ GFXTAG_LOTAD,
+ GFXTAG_AZURILL,
+ GFXTAG_CHERRY,
+ GFXTAG_REPLAY,
+ GFXTAG_POWER,
+ GFXTAG_POWER,
+ GFXTAG_LOTAD,
+ GFXTAG_7_BLUE,
+ GFXTAG_LOTAD,
+ GFXTAG_REPLAY,
+ GFXTAG_CHERRY,
+ GFXTAG_AZURILL,
+ GFXTAG_LOTAD,
+ GFXTAG_REPLAY,
+ GFXTAG_CHERRY,
+ GFXTAG_LOTAD,
+ GFXTAG_REPLAY,
+ GFXTAG_CHERRY
},
- {
- SLOT_MACHINE_TAG_7_RED,
- SLOT_MACHINE_TAG_POWER,
- SLOT_MACHINE_TAG_7_BLUE,
- SLOT_MACHINE_TAG_REPLAY,
- SLOT_MACHINE_TAG_LOTAD,
- SLOT_MACHINE_TAG_AZURILL,
- SLOT_MACHINE_TAG_REPLAY,
- SLOT_MACHINE_TAG_LOTAD,
- SLOT_MACHINE_TAG_POWER,
- SLOT_MACHINE_TAG_AZURILL,
- SLOT_MACHINE_TAG_REPLAY,
- SLOT_MACHINE_TAG_LOTAD,
- SLOT_MACHINE_TAG_AZURILL,
- SLOT_MACHINE_TAG_POWER,
- SLOT_MACHINE_TAG_REPLAY,
- SLOT_MACHINE_TAG_LOTAD,
- SLOT_MACHINE_TAG_AZURILL,
- SLOT_MACHINE_TAG_POWER,
- SLOT_MACHINE_TAG_REPLAY,
- SLOT_MACHINE_TAG_LOTAD,
- SLOT_MACHINE_TAG_CHERRY
+ [RIGHT_REEL] = {
+ GFXTAG_7_RED,
+ GFXTAG_POWER,
+ GFXTAG_7_BLUE,
+ GFXTAG_REPLAY,
+ GFXTAG_LOTAD,
+ GFXTAG_AZURILL,
+ GFXTAG_REPLAY,
+ GFXTAG_LOTAD,
+ GFXTAG_POWER,
+ GFXTAG_AZURILL,
+ GFXTAG_REPLAY,
+ GFXTAG_LOTAD,
+ GFXTAG_AZURILL,
+ GFXTAG_POWER,
+ GFXTAG_REPLAY,
+ GFXTAG_LOTAD,
+ GFXTAG_AZURILL,
+ GFXTAG_POWER,
+ GFXTAG_REPLAY,
+ GFXTAG_LOTAD,
+ GFXTAG_CHERRY
},
};
-static const u8 gReelTimeTags[] = {
+static const u8 sReelTimeTags[] = {
1, 0, 5, 4, 3, 2
};
-static const s16 gInitialReelPositions[][2] = {
- {0, 6},
- {0, 10},
- {0, 2}
+static const s16 sInitialReelPositions[NUM_REELS][2] = {
+ [LEFT_REEL] = {0, 6},
+ [MIDDLE_REEL] = {0, 10},
+ [RIGHT_REEL] = {0, 2}
};
-static const u8 gLuckyRoundProbabilities[][3] = {
+static const u8 sLuckyRoundProbabilities[][3] = {
{1, 1, 12},
{1, 1, 14},
{2, 2, 14},
@@ -4476,13 +4816,13 @@ static const u8 gLuckyRoundProbabilities[][3] = {
{3, 3, 16}
};
-static const u8 gLuckyFlagProbabilities_Top3[][6] = {
+static const u8 sLuckyFlagProbabilities_Top3[][6] = {
{25, 25, 30, 40, 40, 50},
{25, 25, 30, 30, 35, 35},
{25, 25, 30, 25, 25, 30}
};
-static const u8 gLuckyFlagProbabilities_NotTop3[][6] = {
+static const u8 sLuckyFlagProbabilities_NotTop3[][6] = {
{20, 25, 25, 20, 25, 25},
{12, 15, 15, 18, 19, 22},
{25, 25, 25, 30, 30, 40},
@@ -4490,7 +4830,7 @@ static const u8 gLuckyFlagProbabilities_NotTop3[][6] = {
{40, 40, 35, 35, 40, 40}
};
-static const u8 gReeltimeProbabilities_UnluckyGame[][17] = {
+static const u8 sReeltimeProbabilities_UnluckyGame[][17] = {
{243, 243, 243, 80, 80, 80, 80, 40, 40, 40, 40, 40, 40, 5, 5, 5, 5},
{ 5, 5, 5, 150, 150, 150, 150, 130, 130, 130, 130, 130, 130, 100, 100, 100, 5},
{ 4, 4, 4, 20, 20, 20, 20, 80, 80, 80, 80, 80, 80, 100, 100, 100, 40},
@@ -4499,7 +4839,7 @@ static const u8 gReeltimeProbabilities_UnluckyGame[][17] = {
{ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 6}
};
-static const u8 gReelTimeProbabilities_LuckyGame[][17] = {
+static const u8 sReelTimeProbabilities_LuckyGame[][17] = {
{ 243, 243, 243, 200, 200, 200, 200, 160, 160, 160, 160, 160, 160, 70, 70, 70, 5},
{ 5, 5, 5, 25, 25, 25, 25, 5, 5, 5, 5, 5, 5, 2, 2, 2, 6},
{ 4, 4, 4, 25, 25, 25, 25, 30, 30, 30, 30, 30, 30, 40, 40, 40, 35},
@@ -4508,11 +4848,11 @@ static const u8 gReelTimeProbabilities_LuckyGame[][17] = {
{ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 4, 4, 60}
};
-static const u16 gProbabilityTable_SkipToReeltimeAction14[] = {
+static const u16 sReelTimeExplodeProbability[] = {
128, 175, 200, 225, 256
};
-static const u16 gReelIncrementTable[][2] = {
+static const u16 sReelIncrementTable[][2] = {
{10, 5},
{10, 10},
{10, 15},
@@ -4520,211 +4860,219 @@ static const u16 gReelIncrementTable[][2] = {
{10, 35}
};
-static const u16 gReelTimeBonusIncrementTable[] = {
+static const u16 sReelTimeBonusIncrementTable[] = {
0, 5, 10, 15, 20
};
// tentative name
-static const u8 gBiasTags[] = {
- SLOT_MACHINE_TAG_REPLAY, SLOT_MACHINE_TAG_CHERRY, SLOT_MACHINE_TAG_LOTAD, SLOT_MACHINE_TAG_AZURILL, SLOT_MACHINE_TAG_POWER, SLOT_MACHINE_TAG_7_RED, SLOT_MACHINE_TAG_7_RED, SLOT_MACHINE_TAG_7_RED
+static const u8 sBiasTags[] = {
+ GFXTAG_REPLAY, GFXTAG_CHERRY, GFXTAG_LOTAD, GFXTAG_AZURILL, GFXTAG_POWER, GFXTAG_7_RED, GFXTAG_7_RED, GFXTAG_7_RED
};
-static const u16 gLuckyFlagSettings_Top3[] = {
+static const u16 sLuckyFlagSettings_Top3[] = {
LUCKY_BIAS_777, LUCKY_BIAS_REELTIME, LUCKY_BIAS_MIXED_777
};
-static const u16 gLuckyFlagSettings_NotTop3[] = {
+static const u16 sLuckyFlagSettings_NotTop3[] = {
LUCKY_BIAS_POWER, LUCKY_BIAS_AZURILL, LUCKY_BIAS_LOTAD, LUCKY_BIAS_CHERRY, LUCKY_BIAS_REPLAY
};
-static const u8 gSym2Match[] = {
- SLOT_MACHINE_MATCHED_777_RED,
- SLOT_MACHINE_MATCHED_777_BLUE,
- SLOT_MACHINE_MATCHED_AZURILL,
- SLOT_MACHINE_MATCHED_LOTAD,
- SLOT_MACHINE_MATCHED_1CHERRY,
- SLOT_MACHINE_MATCHED_POWER,
- SLOT_MACHINE_MATCHED_REPLAY
-};
-
-static const u16 gSlotMatchFlags[] = {
- 1 << SLOT_MACHINE_MATCHED_1CHERRY,
- 1 << SLOT_MACHINE_MATCHED_2CHERRY,
- 1 << SLOT_MACHINE_MATCHED_REPLAY,
- 1 << SLOT_MACHINE_MATCHED_LOTAD,
- 1 << SLOT_MACHINE_MATCHED_AZURILL,
- 1 << SLOT_MACHINE_MATCHED_POWER,
- 1 << SLOT_MACHINE_MATCHED_777_MIXED,
- 1 << SLOT_MACHINE_MATCHED_777_RED,
- 1 << SLOT_MACHINE_MATCHED_777_BLUE
-};
-
-static const u16 gSlotPayouts[] = {
- 2, 4, 0, 6, 12, 3, 90, 300, 300
-};
-
-static const s16 gUnknown_083ECE7E[][2] = {
- { 0xd0, 0x38},
- { 0xb8, 0x00},
- { 0xc8, 0x08},
- { 0xd8, 0x10},
- { 0xe8, 0x18},
- { 0xd0, 0x48},
- { 0xd0, 0x08},
- { 0xd0, 0x40},
- { 0xd0, 0x38},
- { 0xc0, 0x58},
- { 0xe0, 0x58},
- { 0xc0, 0x78},
- { 0xe0, 0x78},
- { 0x90, 0x38},
- {0x110, 0x58},
- { 0xa8, 0x70},
- { 0xd0, 0x54},
- { 0xd0, 0x70},
- { 0xbc, 0x34},
- { 0xd0, 0x34},
- { 0xe4, 0x34},
- { 0xb8, 0x48},
- { 0xc4, 0x48},
- { 0xd0, 0x48},
- { 0xdc, 0x48},
- { 0xe8, 0x48},
- { 0xbc, 0x34},
- { 0xd0, 0x34},
- { 0xe4, 0x34},
- { 0xb8, 0x48},
- { 0xc4, 0x48},
- { 0xd0, 0x48},
- { 0xdc, 0x48},
- { 0xe8, 0x48},
- { 0x00, 0x00}
-};
-
-static const SpriteCallback gUnknown_083ECF0C[] = {
- sub_8105C64,
- sub_8105F54,
- sub_8105F54,
- sub_8105F54,
- sub_8105F54,
- sub_8105F9C,
- sub_8105EB4,
- sub_8105C64,
- sub_8105C64,
- sub_8105C6C,
- sub_8105CF0,
- sub_8105D08,
- sub_8105D20,
- sub_8105D3C,
- sub_8105DA4,
- sub_8105E08,
- sub_8105C64,
- sub_8106058,
- sub_81060FC,
- sub_81060FC,
- sub_81060FC,
- sub_81060FC,
- sub_81060FC,
- sub_81060FC,
- sub_81060FC,
- sub_81060FC,
- sub_81061C8,
- sub_81061C8,
- sub_81061C8,
- sub_81061C8,
- sub_81061C8,
- sub_81061C8,
- sub_81061C8,
- sub_81061C8,
- sub_8106230
-};
-
-static const struct UnkStruct1 Unknown_83ECF98[] = {
- {25, 34, 0},
- {2, 0, 0},
- {9, 16, 0},
- {255, 0, 0}
-};
-
-static const struct UnkStruct1 Unknown_83ECFA8[] = {
- {10, 1, 0},
- {11, 2, 0},
- {12, 3, 0},
- {13, 4, 0},
- {5, 5, 0},
- {8, 6, 0},
- {255, 0, 0}
-};
-
-static const struct UnkStruct1 Unknown_83ECFC4[] = {
- {3, 7, 0},
- {8, 17, 0},
- {255, 0, 0}
-};
-
-static const struct UnkStruct1 Unknown_83ECFD0[] = {
- {4, 8, 0},
- {6, 9, 0},
- {6, 10, 1},
- {6, 11, 2},
- {6, 12, 3},
- {255, 0, 0}
-};
-
-static const struct UnkStruct1 Unknown_83ECFE8[] = {
- {0, 13, 0},
- {1, 14, 0},
- {7, 15, 0},
- {255, 0, 0}
-};
-
-static const struct UnkStruct1 Unknown_83ECFF8[] = {
- {19, 26, 0},
- {20, 27, 1},
- {21, 28, 2},
- {14, 29, 3},
- {15, 30, 4},
- {16, 31, 5},
- {17, 32, 6},
- {18, 33, 7},
- {8, 17, 0},
- {255, 0, 0}
-};
-
-static const struct UnkStruct1 Unknown_83ED020[] = {
- {22, 18, 0},
- {23, 19, 1},
- {24, 20, 2},
- {14, 21, 3},
- {15, 22, 4},
- {16, 23, 5},
- {17, 24, 6},
- {18, 25, 7},
- {8, 17, 0},
- {255, 0, 0}
-};
-
-static const struct UnkStruct1 *const gUnknown_083ED048[] = {
- Unknown_83ECF98,
- Unknown_83ECFA8,
- Unknown_83ECFC4,
- Unknown_83ECFD0,
- Unknown_83ECFE8,
- Unknown_83ED020,
- Unknown_83ECFF8
-};
-
-static void (*const gUnknown_083ED064[])(void) = {
- sub_810639C,
- sub_8106364,
- sub_8106370,
- nullsub_70,
- nullsub_70,
- sub_8106370,
- sub_8106370
-};
-
-static const struct OamData gUnknown_085A7A3C =
+static const u8 sSymToMatch[] = {
+ [GFXTAG_7_RED] = MATCHED_777_RED,
+ [GFXTAG_7_BLUE] = MATCHED_777_BLUE,
+ [GFXTAG_AZURILL] = MATCHED_AZURILL,
+ [GFXTAG_LOTAD] = MATCHED_LOTAD,
+ [GFXTAG_CHERRY] = MATCHED_1CHERRY,
+ [GFXTAG_POWER] = MATCHED_POWER,
+ [GFXTAG_REPLAY] = MATCHED_REPLAY
+};
+
+static const u16 sSlotMatchFlags[] = {
+ [MATCHED_1CHERRY] = 1 << MATCHED_1CHERRY,
+ [MATCHED_2CHERRY] = 1 << MATCHED_2CHERRY,
+ [MATCHED_REPLAY] = 1 << MATCHED_REPLAY,
+ [MATCHED_LOTAD] = 1 << MATCHED_LOTAD,
+ [MATCHED_AZURILL] = 1 << MATCHED_AZURILL,
+ [MATCHED_POWER] = 1 << MATCHED_POWER,
+ [MATCHED_777_MIXED] = 1 << MATCHED_777_MIXED,
+ [MATCHED_777_RED] = 1 << MATCHED_777_RED,
+ [MATCHED_777_BLUE] = 1 << MATCHED_777_BLUE
+};
+
+static const u16 sSlotPayouts[] = {
+ [MATCHED_1CHERRY] = 2,
+ [MATCHED_2CHERRY] = 4,
+ [MATCHED_REPLAY] = 0,
+ [MATCHED_LOTAD] = 6,
+ [MATCHED_AZURILL] = 12,
+ [MATCHED_POWER] = 3,
+ [MATCHED_777_MIXED] = 90,
+ [MATCHED_777_RED] = 300,
+ [MATCHED_777_BLUE] = 300
+};
+
+static const s16 sDigitalDisplay_SpriteCoords[][2] = {
+ [DIG_DISPINFO_INSERT] = { 208, 56},
+ [DIG_DISPINFO_STOP_S] = { 184, 0},
+ [DIG_DISPINFO_STOP_T] = { 200, 8},
+ [DIG_DISPINFO_STOP_O] = { 216, 16},
+ [DIG_DISPINFO_STOP_P] = { 232, 24},
+ [DIG_DISPINFO_A_BUTTON_STOP] = { 208, 72},
+ [DIG_DISPINFO_POKE_BALL_ROCKING] = { 208, 8},
+ [DIG_DISPINFO_WIN] = { 208, 64},
+ [DIG_DISPINFO_LOSE] = { 208, 56},
+ [DIG_DISPINFO_SMOKE_NW] = { 192, 88},
+ [DIG_DISPINFO_SMOKE_NE] = { 224, 88},
+ [DIG_DISPINFO_SMOKE_SW] = { 192, 120},
+ [DIG_DISPINFO_SMOKE_SE] = { 224, 120},
+ [DIG_DISPINFO_REEL] = { 144, 56},
+ [DIG_DISPINFO_TIME] = { 272, 88},
+ [DIG_DISPINFO_NUMBER] = { 168, 112},
+ [DIG_DISPINFO_DPAD] = { 208, 84},
+ [DIG_DISPINFO_POKE_BALL_SHINING] = { 208, 112},
+ [DIG_DISPINFO_REG_R] = { 188, 52},
+ [DIG_DISPINFO_REG_E] = { 208, 52},
+ [DIG_DISPINFO_REG_G] = { 228, 52},
+ [DIG_DISPINFO_REG_BONUS_B] = { 184, 72},
+ [DIG_DISPINFO_REG_BONUS_O] = { 196, 72},
+ [DIG_DISPINFO_REG_BONUS_N] = { 208, 72},
+ [DIG_DISPINFO_REG_BONUS_U] = { 220, 72},
+ [DIG_DISPINFO_REG_BONUS_S] = { 232, 72},
+ [DIG_DISPINFO_BIG_B] = { 188, 52},
+ [DIG_DISPINFO_BIG_I] = { 208, 52},
+ [DIG_DISPINFO_BIG_G] = { 228, 52},
+ [DIG_DISPINFO_BIG_BONUS_B] = { 184, 72},
+ [DIG_DISPINFO_BIG_BONUS_O] = { 196, 72},
+ [DIG_DISPINFO_BIG_BONUS_N] = { 208, 72},
+ [DIG_DISPINFO_BIG_BONUS_U] = { 220, 72},
+ [DIG_DISPINFO_BIG_BONUS_S] = { 232, 72},
+ [DIG_DISPINFO_A_BUTTON_START] = { 0, 0} // Initially offscreen
+};
+
+static const SpriteCallback sDigitalDisplay_SpriteCallbacks[] = {
+ [DIG_DISPINFO_INSERT] = SpriteCB_DigitalDisplay_Static,
+ [DIG_DISPINFO_STOP_S] = SpriteCB_DigitalDisplay_Stop,
+ [DIG_DISPINFO_STOP_T] = SpriteCB_DigitalDisplay_Stop,
+ [DIG_DISPINFO_STOP_O] = SpriteCB_DigitalDisplay_Stop,
+ [DIG_DISPINFO_STOP_P] = SpriteCB_DigitalDisplay_Stop,
+ [DIG_DISPINFO_A_BUTTON_STOP] = SpriteCB_DigitalDisplay_AButtonStop,
+ [DIG_DISPINFO_POKE_BALL_ROCKING] = SpriteCB_DigitalDisplay_PokeballRocking,
+ [DIG_DISPINFO_WIN] = SpriteCB_DigitalDisplay_Static,
+ [DIG_DISPINFO_LOSE] = SpriteCB_DigitalDisplay_Static,
+ [DIG_DISPINFO_SMOKE_NW] = SpriteCB_DigitalDisplay_Smoke,
+ [DIG_DISPINFO_SMOKE_NE] = SpriteCB_DigitalDisplay_SmokeNE,
+ [DIG_DISPINFO_SMOKE_SW] = SpriteCB_DigitalDisplay_SmokeSW,
+ [DIG_DISPINFO_SMOKE_SE] = SpriteCB_DigitalDisplay_SmokeSE,
+ [DIG_DISPINFO_REEL] = SpriteCB_DigitalDisplay_Reel,
+ [DIG_DISPINFO_TIME] = SpriteCB_DigitalDisplay_Time,
+ [DIG_DISPINFO_NUMBER] = SpriteCB_DigitalDisplay_ReelTimeNumber,
+ [DIG_DISPINFO_DPAD] = SpriteCB_DigitalDisplay_Static,
+ [DIG_DISPINFO_POKE_BALL_SHINING] = SpriteCB_DigitalDisplay_PokeballShining,
+ [DIG_DISPINFO_REG_R] = SpriteCB_DigitalDisplay_RegBonus,
+ [DIG_DISPINFO_REG_E] = SpriteCB_DigitalDisplay_RegBonus,
+ [DIG_DISPINFO_REG_G] = SpriteCB_DigitalDisplay_RegBonus,
+ [DIG_DISPINFO_REG_BONUS_B] = SpriteCB_DigitalDisplay_RegBonus,
+ [DIG_DISPINFO_REG_BONUS_O] = SpriteCB_DigitalDisplay_RegBonus,
+ [DIG_DISPINFO_REG_BONUS_N] = SpriteCB_DigitalDisplay_RegBonus,
+ [DIG_DISPINFO_REG_BONUS_U] = SpriteCB_DigitalDisplay_RegBonus,
+ [DIG_DISPINFO_REG_BONUS_S] = SpriteCB_DigitalDisplay_RegBonus,
+ [DIG_DISPINFO_BIG_B] = SpriteCB_DigitalDisplay_BigBonus,
+ [DIG_DISPINFO_BIG_I] = SpriteCB_DigitalDisplay_BigBonus,
+ [DIG_DISPINFO_BIG_G] = SpriteCB_DigitalDisplay_BigBonus,
+ [DIG_DISPINFO_BIG_BONUS_B] = SpriteCB_DigitalDisplay_BigBonus,
+ [DIG_DISPINFO_BIG_BONUS_O] = SpriteCB_DigitalDisplay_BigBonus,
+ [DIG_DISPINFO_BIG_BONUS_N] = SpriteCB_DigitalDisplay_BigBonus,
+ [DIG_DISPINFO_BIG_BONUS_U] = SpriteCB_DigitalDisplay_BigBonus,
+ [DIG_DISPINFO_BIG_BONUS_S] = SpriteCB_DigitalDisplay_BigBonus,
+ [DIG_DISPINFO_A_BUTTON_START] = SpriteCB_DigitalDisplay_AButtonStart
+};
+
+static const struct DigitalDisplaySprite sDigitalDisplay_InsertBet[] = {
+ {DIG_SPRITE_EMPTY, DIG_DISPINFO_A_BUTTON_START, 0}, // Sprite replaced with DIG_SPRITE_A_BUTTON after first bet
+ {DIG_SPRITE_INSERT, DIG_DISPINFO_INSERT, 0},
+ {DIG_SPRITE_D_PAD, DIG_DISPINFO_DPAD, 0},
+ DIG_SPRITE_DUMMY
+};
+
+static const struct DigitalDisplaySprite sDigitalDisplay_StopReel[] = {
+ {DIG_SPRITE_STOP_S, DIG_DISPINFO_STOP_S, 0},
+ {DIG_SPRITE_STOP_T, DIG_DISPINFO_STOP_T, 0},
+ {DIG_SPRITE_STOP_O, DIG_DISPINFO_STOP_O, 0},
+ {DIG_SPRITE_STOP_P, DIG_DISPINFO_STOP_P, 0},
+ {DIG_SPRITE_A_BUTTON, DIG_DISPINFO_A_BUTTON_STOP, 0},
+ {DIG_SPRITE_POKE_BALL, DIG_DISPINFO_POKE_BALL_ROCKING, 0},
+ DIG_SPRITE_DUMMY
+};
+
+static const struct DigitalDisplaySprite sDigitalDisplay_Win[] = {
+ {DIG_SPRITE_WIN, DIG_DISPINFO_WIN, 0},
+ {DIG_SPRITE_POKE_BALL, DIG_DISPINFO_POKE_BALL_SHINING, 0},
+ DIG_SPRITE_DUMMY
+};
+
+static const struct DigitalDisplaySprite sDigitalDisplay_Lose[] = {
+ {DIG_SPRITE_LOSE, DIG_DISPINFO_LOSE, 0},
+ {DIG_SPRITE_SMOKE, DIG_DISPINFO_SMOKE_NW, 0},
+ {DIG_SPRITE_SMOKE, DIG_DISPINFO_SMOKE_NE, 1},
+ {DIG_SPRITE_SMOKE, DIG_DISPINFO_SMOKE_SW, 2},
+ {DIG_SPRITE_SMOKE, DIG_DISPINFO_SMOKE_SE, 3},
+ DIG_SPRITE_DUMMY
+};
+
+static const struct DigitalDisplaySprite sDigitalDisplay_ReelTime[] = {
+ {DIG_SPRITE_REEL, DIG_DISPINFO_REEL, 0},
+ {DIG_SPRITE_TIME, DIG_DISPINFO_TIME, 0},
+ {DIG_SPRITE_NUMBER, DIG_DISPINFO_NUMBER, 0}, // Number of reel time spins left
+ DIG_SPRITE_DUMMY
+};
+
+static const struct DigitalDisplaySprite sDigitalDisplay_BonusBig[] = {
+ {DIG_SPRITE_BIG_B, DIG_DISPINFO_BIG_B, 0},
+ {DIG_SPRITE_BIG_I, DIG_DISPINFO_BIG_I, 1},
+ {DIG_SPRITE_BIG_G, DIG_DISPINFO_BIG_G, 2},
+ {DIG_SPRITE_BONUS_B, DIG_DISPINFO_BIG_BONUS_B, 3},
+ {DIG_SPRITE_BONUS_O, DIG_DISPINFO_BIG_BONUS_O, 4},
+ {DIG_SPRITE_BONUS_N, DIG_DISPINFO_BIG_BONUS_N, 5},
+ {DIG_SPRITE_BONUS_U, DIG_DISPINFO_BIG_BONUS_U, 6},
+ {DIG_SPRITE_BONUS_S, DIG_DISPINFO_BIG_BONUS_S, 7},
+ {DIG_SPRITE_POKE_BALL, DIG_DISPINFO_POKE_BALL_SHINING, 0},
+ DIG_SPRITE_DUMMY
+};
+
+static const struct DigitalDisplaySprite sDigitalDisplay_BonusRegular[] = {
+ {DIG_SPRITE_REG_R, DIG_DISPINFO_REG_R, 0},
+ {DIG_SPRITE_REG_E, DIG_DISPINFO_REG_E, 1},
+ {DIG_SPRITE_REG_G, DIG_DISPINFO_REG_G, 2},
+ {DIG_SPRITE_BONUS_B, DIG_DISPINFO_REG_BONUS_B, 3},
+ {DIG_SPRITE_BONUS_O, DIG_DISPINFO_REG_BONUS_O, 4},
+ {DIG_SPRITE_BONUS_N, DIG_DISPINFO_REG_BONUS_N, 5},
+ {DIG_SPRITE_BONUS_U, DIG_DISPINFO_REG_BONUS_U, 6},
+ {DIG_SPRITE_BONUS_S, DIG_DISPINFO_REG_BONUS_S, 7},
+ {DIG_SPRITE_POKE_BALL, DIG_DISPINFO_POKE_BALL_SHINING, 0},
+ DIG_SPRITE_DUMMY
+};
+
+static const struct DigitalDisplaySprite *const sDigitalDisplayScenes[] = {
+ [DIG_DISPLAY_INSERT_BET] = sDigitalDisplay_InsertBet,
+ [DIG_DISPLAY_STOP_REEL] = sDigitalDisplay_StopReel,
+ [DIG_DISPLAY_WIN] = sDigitalDisplay_Win,
+ [DIG_DISPLAY_LOSE] = sDigitalDisplay_Lose,
+ [DIG_DISPLAY_REEL_TIME] = sDigitalDisplay_ReelTime,
+ [DIG_DISPLAY_BONUS_REG] = sDigitalDisplay_BonusRegular,
+ [DIG_DISPLAY_BONUS_BIG] = sDigitalDisplay_BonusBig
+};
+
+static void (*const sDigitalDisplaySceneExitCallbacks[])(void) = {
+ [DIG_DISPLAY_INSERT_BET] = EndDigitalDisplayScene_InsertBet,
+ [DIG_DISPLAY_STOP_REEL] = EndDigitalDisplayScene_StopReel,
+ [DIG_DISPLAY_WIN] = EndDigitalDisplayScene_Win,
+ [DIG_DISPLAY_LOSE] = EndDigitalDisplayScene_Dummy,
+ [DIG_DISPLAY_REEL_TIME] = EndDigitalDisplayScene_Dummy,
+ [DIG_DISPLAY_BONUS_REG] = EndDigitalDisplayScene_Win,
+ [DIG_DISPLAY_BONUS_BIG] = EndDigitalDisplayScene_Win
+};
+
+static const struct OamData sOam_8x8 =
{
.y = 0,
.affineMode = ST_OAM_AFFINE_OFF,
@@ -4741,7 +5089,7 @@ static const struct OamData gUnknown_085A7A3C =
.affineParam = 0,
};
-static const struct OamData gUnknown_085A7A44 =
+static const struct OamData sOam_8x16 =
{
.y = 0,
.affineMode = ST_OAM_AFFINE_OFF,
@@ -4758,7 +5106,7 @@ static const struct OamData gUnknown_085A7A44 =
.affineParam = 0,
};
-static const struct OamData gUnknown_085A7A4C =
+static const struct OamData sOam_16x16 =
{
.y = 0,
.affineMode = ST_OAM_AFFINE_OFF,
@@ -4775,7 +5123,7 @@ static const struct OamData gUnknown_085A7A4C =
.affineParam = 0,
};
-static const struct OamData gUnknown_085A7A54 =
+static const struct OamData sOam_16x32 =
{
.y = 0,
.affineMode = ST_OAM_AFFINE_OFF,
@@ -4792,7 +5140,7 @@ static const struct OamData gUnknown_085A7A54 =
.affineParam = 0,
};
-static const struct OamData gUnknown_085A7A5C =
+static const struct OamData sOam_32x32 =
{
.y = 0,
.affineMode = ST_OAM_AFFINE_OFF,
@@ -4809,7 +5157,7 @@ static const struct OamData gUnknown_085A7A5C =
.affineParam = 0,
};
-static const struct OamData gUnknown_085A7A64 =
+static const struct OamData sOam_32x64 =
{
.y = 0,
.affineMode = ST_OAM_AFFINE_OFF,
@@ -4826,7 +5174,7 @@ static const struct OamData gUnknown_085A7A64 =
.affineParam = 0,
};
-static const struct OamData gUnknown_085A7A6C =
+static const struct OamData sOam_64x32 =
{
.y = 0,
.affineMode = ST_OAM_AFFINE_OFF,
@@ -4843,7 +5191,7 @@ static const struct OamData gUnknown_085A7A6C =
.affineParam = 0,
};
-static const struct OamData gUnknown_085A7A74 =
+static const struct OamData sOam_64x64 =
{
.y = 0,
.affineMode = ST_OAM_AFFINE_OFF,
@@ -4860,7 +5208,7 @@ static const struct OamData gUnknown_085A7A74 =
.affineParam = 0,
};
-static const struct SpriteFrameImage gUnknown_085A7A7C[] =
+static const struct SpriteFrameImage sImageTable_ReelTimeNumbers[] =
{
{ gSlotMachineReelTimeNumber0, 0x80 },
{ gSlotMachineReelTimeNumber1, 0x80 },
@@ -4870,151 +5218,151 @@ static const struct SpriteFrameImage gUnknown_085A7A7C[] =
{ gSlotMachineReelTimeNumber5, 0x80 },
};
-static const struct SpriteFrameImage gUnknown_085A7AAC[] = { gSlotMachineReelTimeShadow, 0x200 };
-static const struct SpriteFrameImage gUnknown_085A7AB4[] = { gUnknown_08DD1A18, 0x40 };
+static const struct SpriteFrameImage sImageTable_ReelTimeShadow[] = { gSlotMachineReelTimeShadow, 0x200 };
+static const struct SpriteFrameImage sImageTable_ReelTimeNumberGap[] = { gSlotMachineReelTimeNumberGap_Gfx, 0x40 };
-static const struct SpriteFrameImage gUnknown_085A7ABC[] =
+static const struct SpriteFrameImage sImageTable_ReelTimeBolt[] =
{
- { gSlotMachineReelTimeLargeBolt0, 0x100 },
- { gSlotMachineReelTimeLargeBolt1, 0x100 },
+ { gSlotMachineReelTimeBolt0, 0x100 },
+ { gSlotMachineReelTimeBolt1, 0x100 },
};
-static const struct SpriteFrameImage gUnknown_085A7ACC[] = { gSlotMachineReelTimePikaAura, 0x400 };
+static const struct SpriteFrameImage sImageTable_ReelTimePikachuAura[] = { gSlotMachineReelTimePikaAura, 0x400 };
-static const struct SpriteFrameImage gUnknown_085A7AD4[] =
+static const struct SpriteFrameImage sImageTable_ReelTimeExplosion[] =
{
{ gSlotMachineReelTimeExplosion0, 0x200 },
{ gSlotMachineReelTimeExplosion1, 0x200 },
};
-static const struct SpriteFrameImage gUnknown_085A7AE4[] = { gSlotMachineReelTimeDuck, 0x20};
-static const struct SpriteFrameImage gUnknown_085A7AEC[] = { gSlotMachineReelTimeSmoke, 0x80};
-static const struct SpriteFrameImage gUnknown_085A7AF4[] = { gSlotMachineReelTimeBolt, 0x20};
+static const struct SpriteFrameImage sImageTable_ReelTimeDuck[] = { gSlotMachineReelTimeDuck, 0x20};
+static const struct SpriteFrameImage sImageTable_ReelTimeSmoke[] = { gSlotMachineReelTimeSmoke, 0x80};
+static const struct SpriteFrameImage sImageTable_PikaPowerBolt[] = { gSlotMachinePikaPowerBolt, 0x20};
-static const union AnimCmd gUnknown_085A7AFC[] =
+static const union AnimCmd sAnim_SingleFrame[] =
{
ANIMCMD_FRAME(0, 1),
ANIMCMD_END
};
-static const union AnimCmd gUnknown_085A7B04[] =
+static const union AnimCmd sAnim_ReelTimeDuck[] =
{
ANIMCMD_FRAME(0, 1),
ANIMCMD_JUMP(0)
};
-static const union AnimCmd gUnknown_085A7B0C[] =
+static const union AnimCmd sAnim_ReelTimePikachu_Still[] =
{
ANIMCMD_FRAME(0, 16),
ANIMCMD_END
};
-static const union AnimCmd gUnknown_085A7B14[] =
+static const union AnimCmd sAnim_ReelTimePikachu_ChargingSlow[] =
{
ANIMCMD_FRAME(1, 16),
ANIMCMD_FRAME(0, 16),
ANIMCMD_JUMP(0)
};
-static const union AnimCmd gUnknown_085A7B20[] =
+static const union AnimCmd sAnim_ReelTimePikachu_ChargingMedium[] =
{
ANIMCMD_FRAME(1, 8),
ANIMCMD_FRAME(0, 8),
ANIMCMD_JUMP(0)
};
-static const union AnimCmd gUnknown_085A7B2C[] =
+static const union AnimCmd sAnim_ReelTimePikachu_ChargingFast[] =
{
ANIMCMD_FRAME(1, 4),
ANIMCMD_FRAME(0, 4),
ANIMCMD_JUMP(0)
};
-static const union AnimCmd gUnknown_085A7B38[] =
+static const union AnimCmd sAnim_ReelTimePikachu_Cheering[] =
{
ANIMCMD_FRAME(2, 32),
ANIMCMD_FRAME(3, 32),
ANIMCMD_JUMP(0)
};
-static const union AnimCmd gUnknown_085A7B44[] =
+static const union AnimCmd sAnim_ReelTimePikachu_FellOver[] =
{
ANIMCMD_FRAME(4, 1),
ANIMCMD_END
};
-static const union AnimCmd gUnknown_085A7B4C[] =
+static const union AnimCmd sAnim_ReelTimeNumber_0[] =
{
ANIMCMD_FRAME(0, 1),
ANIMCMD_END
};
-static const union AnimCmd gUnknown_085A7B54[] =
+static const union AnimCmd sAnim_ReelTimeNumber_1[] =
{
ANIMCMD_FRAME(1, 1),
ANIMCMD_END
};
-static const union AnimCmd gUnknown_085A7B5C[] =
+static const union AnimCmd sAnim_ReelTimeNumber_2[] =
{
ANIMCMD_FRAME(2, 1),
ANIMCMD_END
};
-static const union AnimCmd gUnknown_085A7B64[] =
+static const union AnimCmd sAnim_ReelTimeNumber_3[] =
{
ANIMCMD_FRAME(3, 1),
ANIMCMD_END
};
-static const union AnimCmd gUnknown_085A7B6C[] =
+static const union AnimCmd sAnim_ReelTimeNumber_4[] =
{
ANIMCMD_FRAME(4, 1),
ANIMCMD_END
};
-static const union AnimCmd gUnknown_085A7B74[] =
+static const union AnimCmd sAnim_ReelTimeNumber_5[] =
{
ANIMCMD_FRAME(5, 1),
ANIMCMD_END
};
-static const union AnimCmd gUnknown_085A7B7C[] =
+static const union AnimCmd sAnim_ReelTimeBolt[] =
{
ANIMCMD_FRAME(0, 4),
ANIMCMD_FRAME(1, 4),
ANIMCMD_JUMP(0)
};
-static const union AnimCmd gUnknown_085A7B88[] =
+static const union AnimCmd sAnim_ReelTimeExplosion[] =
{
ANIMCMD_FRAME(0, 16),
ANIMCMD_FRAME(1, 16),
ANIMCMD_JUMP(0)
};
-static const union AnimCmd gUnknown_085A7B94[] =
+static const union AnimCmd sAnim_DigitalDisplay_AButton_Flashing[] =
{
ANIMCMD_FRAME(0, 30),
ANIMCMD_FRAME(1, 30),
ANIMCMD_JUMP(0)
};
-static const union AnimCmd gUnknown_085A7BA0[] =
+static const union AnimCmd sAnim_DigitalDisplay_AButton_Static[] =
{
ANIMCMD_FRAME(1, 1),
ANIMCMD_END
};
-static const union AnimCmd gUnknown_085A7BA8[] =
+static const union AnimCmd sAnim_DigitalDisplay_DPad_Flashing[] =
{
ANIMCMD_FRAME(0, 30),
ANIMCMD_FRAME(1, 30),
ANIMCMD_JUMP(0)
};
-static const union AnimCmd gUnknown_085A7BB4[] =
+static const union AnimCmd sAnim_DigitalDisplay_Pokeball_Rocking[] =
{
ANIMCMD_FRAME(0, 16),
ANIMCMD_FRAME(1, 16),
@@ -5023,110 +5371,110 @@ static const union AnimCmd gUnknown_085A7BB4[] =
ANIMCMD_JUMP(0)
};
-static const union AnimCmd gUnknown_085A7BC8[] =
+static const union AnimCmd sAnim_DigitalDisplay_Pokeball_Static[] =
{
ANIMCMD_FRAME(0, 1),
ANIMCMD_END
};
-static const union AnimCmd gUnknown_085A7BD0[] =
+static const union AnimCmd sAnim_DigitalDisplay_Number_1[] =
{
ANIMCMD_FRAME(0, 1),
ANIMCMD_END
};
-static const union AnimCmd gUnknown_085A7BD8[] =
+static const union AnimCmd sAnim_DigitalDisplay_Number_2[] =
{
ANIMCMD_FRAME(1, 1),
ANIMCMD_END
};
-static const union AnimCmd gUnknown_085A7BE0[] =
+static const union AnimCmd sAnim_DigitalDisplay_Number_3[] =
{
ANIMCMD_FRAME(2, 1),
ANIMCMD_END
};
-static const union AnimCmd gUnknown_085A7BE8[] =
+static const union AnimCmd sAnim_DigitalDisplay_Number_4[] =
{
ANIMCMD_FRAME(3, 1),
ANIMCMD_END
};
-static const union AnimCmd gUnknown_085A7BF0[] =
+static const union AnimCmd sAnim_DigitalDisplay_Number_5[] =
{
ANIMCMD_FRAME(4, 1),
ANIMCMD_END
};
-static const union AnimCmd *const gUnknown_085A7BF8[] =
+static const union AnimCmd *const sAnims_SingleFrame[] =
{
- gUnknown_085A7AFC
+ sAnim_SingleFrame
};
-static const union AnimCmd *const gUnknown_085A7BFC[] =
+static const union AnimCmd *const sAnims_ReelTimeDuck[] =
{
- gUnknown_085A7B04
+ sAnim_ReelTimeDuck
};
-static const union AnimCmd *const gUnknown_085A7C00[] =
+static const union AnimCmd *const sAnims_ReelTimePikachu[] =
{
- gUnknown_085A7B0C,
- gUnknown_085A7B14,
- gUnknown_085A7B20,
- gUnknown_085A7B2C,
- gUnknown_085A7B38,
- gUnknown_085A7B44
+ sAnim_ReelTimePikachu_Still,
+ sAnim_ReelTimePikachu_ChargingSlow,
+ sAnim_ReelTimePikachu_ChargingMedium,
+ sAnim_ReelTimePikachu_ChargingFast,
+ sAnim_ReelTimePikachu_Cheering,
+ sAnim_ReelTimePikachu_FellOver
};
-static const union AnimCmd *const gUnknown_085A7C18[] =
+static const union AnimCmd *const sAnims_ReelTimeNumbers[] =
{
- gUnknown_085A7B4C,
- gUnknown_085A7B54,
- gUnknown_085A7B5C,
- gUnknown_085A7B64,
- gUnknown_085A7B6C,
- gUnknown_085A7B74
+ sAnim_ReelTimeNumber_0,
+ sAnim_ReelTimeNumber_1,
+ sAnim_ReelTimeNumber_2,
+ sAnim_ReelTimeNumber_3,
+ sAnim_ReelTimeNumber_4,
+ sAnim_ReelTimeNumber_5
};
-static const union AnimCmd *const gUnknown_085A7C30[] =
+static const union AnimCmd *const sAnims_ReelTimeBolt[] =
{
- gUnknown_085A7B7C
+ sAnim_ReelTimeBolt
};
-static const union AnimCmd *const gUnknown_085A7C34[] =
+static const union AnimCmd *const sAnims_ReelTimeExplosion[] =
{
- gUnknown_085A7B88
+ sAnim_ReelTimeExplosion
};
-static const union AnimCmd *const gUnknown_085A7C38[] =
+static const union AnimCmd *const sAnims_DigitalDisplay_AButton[] =
{
- gUnknown_085A7B94,
- gUnknown_085A7BA0
+ sAnim_DigitalDisplay_AButton_Flashing,
+ sAnim_DigitalDisplay_AButton_Static
};
-static const union AnimCmd *const gUnknown_085A7C40[] =
+static const union AnimCmd *const sAnims_DigitalDisplay_DPad[] =
{
- gUnknown_085A7BA8
+ sAnim_DigitalDisplay_DPad_Flashing
};
-static const union AnimCmd *const gUnknown_085A7C44[] =
+static const union AnimCmd *const sAnims_DigitalDisplay_Pokeball[] =
{
- gUnknown_085A7BB4,
- gUnknown_085A7BC8
+ sAnim_DigitalDisplay_Pokeball_Rocking,
+ sAnim_DigitalDisplay_Pokeball_Static
};
-static const union AnimCmd *const gUnknown_085A7C4C[] =
+static const union AnimCmd *const sAnims_DigitalDisplay_Number[] =
{
- gUnknown_085A7BD0,
- gUnknown_085A7BD8,
- gUnknown_085A7BE0,
- gUnknown_085A7BE8,
- gUnknown_085A7BF0
+ sAnim_DigitalDisplay_Number_1,
+ sAnim_DigitalDisplay_Number_2,
+ sAnim_DigitalDisplay_Number_3,
+ sAnim_DigitalDisplay_Number_4,
+ sAnim_DigitalDisplay_Number_5
};
-static const union AffineAnimCmd gUnknown_085A7C60[] =
+static const union AffineAnimCmd sAffineAnim_ReelTimeSmoke[] =
{
AFFINEANIMCMD_FRAME(16, 16, 0, 0),
AFFINEANIMCMD_LOOP(0),
@@ -5135,12 +5483,13 @@ static const union AffineAnimCmd gUnknown_085A7C60[] =
AFFINEANIMCMD_END
};
-static const union AffineAnimCmd *const gUnknown_085A7C88[] =
+static const union AffineAnimCmd *const sAffineAnims_ReelTimeSmoke[] =
{
- gUnknown_085A7C60
+ sAffineAnim_ReelTimeSmoke
};
-static const union AffineAnimCmd gUnknown_085A7C8C[] =
+// Spin as it appears
+static const union AffineAnimCmd sAffineAnim_PikaPowerBolt[] =
{
AFFINEANIMCMD_FRAME(0, 0, 8, 32),
AFFINEANIMCMD_FRAME(0, 0, 6, 32),
@@ -5154,342 +5503,342 @@ static const union AffineAnimCmd gUnknown_085A7C8C[] =
AFFINEANIMCMD_END
};
-static const union AffineAnimCmd *const gUnknown_085A7CDC[] =
+static const union AffineAnimCmd *const sAffineAnims_PikaPowerBolt[] =
{
- gUnknown_085A7C8C
+ sAffineAnim_PikaPowerBolt
};
-static const struct SpriteTemplate gSpriteTemplate_83ED414 =
+static const struct SpriteTemplate sSpriteTemplate_ReelSymbol =
{
- .tileTag = 0,
- .paletteTag = 0,
- .oam = &gUnknown_085A7A5C,
- .anims = gUnknown_085A7BF8,
+ .tileTag = GFXTAG_SYMBOLS_START,
+ .paletteTag = PALTAG_REEL,
+ .oam = &sOam_32x32,
+ .anims = sAnims_SingleFrame,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_8104F18
+ .callback = SpriteCB_ReelSymbol
};
-static const struct SpriteTemplate gSpriteTemplate_83ED42C =
+static const struct SpriteTemplate sSpriteTemplate_CoinNumber =
{
- .tileTag = 7,
- .paletteTag = 4,
- .oam = &gUnknown_085A7A44,
- .anims = gUnknown_085A7BF8,
+ .tileTag = GFXTAG_NUMBERS_START,
+ .paletteTag = PALTAG_MISC,
+ .oam = &sOam_8x16,
+ .anims = sAnims_SingleFrame,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_810506C
+ .callback = SpriteCB_CoinNumber
};
-static const struct SpriteTemplate gSpriteTemplate_83ED444 =
+static const struct SpriteTemplate sSpriteTemplate_ReelBackground =
{
- .tileTag = 17,
- .paletteTag = 0,
- .oam = &gUnknown_085A7A74,
- .anims = gUnknown_085A7BF8,
+ .tileTag = GFXTAG_REEL_BG,
+ .paletteTag = PALTAG_REEL,
+ .oam = &sOam_64x64,
+ .anims = sAnims_SingleFrame,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = SpriteCallbackDummy
};
-static const struct SpriteTemplate gSpriteTemplate_83ED45C =
+static const struct SpriteTemplate sSpriteTemplate_ReelTimePikachu =
{
.tileTag = 0xFFFF,
- .paletteTag = 1,
- .oam = &gUnknown_085A7A74,
- .anims = gUnknown_085A7C00,
+ .paletteTag = PALTAG_REEL_TIME_PIKACHU,
+ .oam = &sOam_64x64,
+ .anims = sAnims_ReelTimePikachu,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_8105170
+ .callback = SpriteCB_ReelTimePikachu
};
-static const struct SpriteTemplate gSpriteTemplate_83ED474 =
+static const struct SpriteTemplate sSpriteTemplate_ReelTimeMachineAntennae =
{
.tileTag = 0xFFFF,
- .paletteTag = 2,
- .oam = &gUnknown_085A7A44,
- .anims = gUnknown_085A7BF8,
+ .paletteTag = PALTAG_REEL_TIME_MISC,
+ .oam = &sOam_8x16,
+ .anims = sAnims_SingleFrame,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = SpriteCallbackDummy
};
-static const struct SpriteTemplate gSpriteTemplate_83ED48C =
+static const struct SpriteTemplate sSpriteTemplate_ReelTimeMachine =
{
.tileTag = 0xFFFF,
- .paletteTag = 3,
- .oam = &gUnknown_085A7A44,
- .anims = gUnknown_085A7BF8,
+ .paletteTag = PALTAG_REEL_TIME_MACHINE,
+ .oam = &sOam_8x16,
+ .anims = sAnims_SingleFrame,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = SpriteCallbackDummy
};
-static const struct SpriteTemplate gSpriteTemplate_83ED4A4 =
+static const struct SpriteTemplate sSpriteTemplate_BrokenReelTimeMachine =
{
.tileTag = 0xFFFF,
- .paletteTag = 3,
- .oam = &gUnknown_085A7A44,
- .anims = gUnknown_085A7BF8,
+ .paletteTag = PALTAG_REEL_TIME_MACHINE,
+ .oam = &sOam_8x16,
+ .anims = sAnims_SingleFrame,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = SpriteCallbackDummy
};
-static const struct SpriteTemplate gSpriteTemplate_83ED4BC =
+static const struct SpriteTemplate sSpriteTemplate_ReelTimeNumbers =
{
.tileTag = 0xFFFF,
- .paletteTag = 4,
- .oam = &gUnknown_085A7A4C,
- .anims = gUnknown_085A7C18,
- .images = gUnknown_085A7A7C,
+ .paletteTag = PALTAG_MISC,
+ .oam = &sOam_16x16,
+ .anims = sAnims_ReelTimeNumbers,
+ .images = sImageTable_ReelTimeNumbers,
.affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_810535C
+ .callback = SpriteCB_ReelTimeNumbers
};
-static const struct SpriteTemplate gSpriteTemplate_83ED4D4 =
+static const struct SpriteTemplate sSpriteTemplate_ReelTimeShadow =
{
.tileTag = 0xFFFF,
- .paletteTag = 4,
- .oam = &gUnknown_085A7A4C,
- .anims = gUnknown_085A7BF8,
- .images = gUnknown_085A7AAC,
+ .paletteTag = PALTAG_MISC,
+ .oam = &sOam_16x16,
+ .anims = sAnims_SingleFrame,
+ .images = sImageTable_ReelTimeShadow,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = SpriteCallbackDummy
};
-static const struct SpriteTemplate gSpriteTemplate_83ED4EC =
+static const struct SpriteTemplate sSpriteTemplate_ReelTimeNumberGap =
{
.tileTag = 0xFFFF,
- .paletteTag = 4,
- .oam = &gUnknown_085A7A4C,
- .anims = gUnknown_085A7BF8,
- .images = gUnknown_085A7AB4,
+ .paletteTag = PALTAG_MISC,
+ .oam = &sOam_16x16,
+ .anims = sAnims_SingleFrame,
+ .images = sImageTable_ReelTimeNumberGap,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = SpriteCallbackDummy
};
-static const struct SpriteTemplate gSpriteTemplate_83ED504 =
+static const struct SpriteTemplate sSpriteTemplate_ReelTimeBolt =
{
.tileTag = 0xFFFF,
- .paletteTag = 4,
- .oam = &gUnknown_085A7A54,
- .anims = gUnknown_085A7C30,
- .images = gUnknown_085A7ABC,
+ .paletteTag = PALTAG_MISC,
+ .oam = &sOam_16x32,
+ .anims = sAnims_ReelTimeBolt,
+ .images = sImageTable_ReelTimeBolt,
.affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_810562C
+ .callback = SpriteCB_ReelTimeBolt
};
-static const struct SpriteTemplate gSpriteTemplate_83ED51C =
+static const struct SpriteTemplate sSpriteTemplate_ReelTimePikachuAura =
{
.tileTag = 0xFFFF,
- .paletteTag = 7,
- .oam = &gUnknown_085A7A64,
- .anims = gUnknown_085A7BF8,
- .images = gUnknown_085A7ACC,
+ .paletteTag = PALTAG_PIKA_AURA,
+ .oam = &sOam_32x64,
+ .anims = sAnims_SingleFrame,
+ .images = sImageTable_ReelTimePikachuAura,
.affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_8105784
+ .callback = SpriteCB_ReelTimePikachuAura
};
-static const struct SpriteTemplate gSpriteTemplate_83ED534 =
+static const struct SpriteTemplate sSpriteTemplate_ReelTimeExplosion =
{
.tileTag = 0xFFFF,
- .paletteTag = 5,
- .oam = &gUnknown_085A7A5C,
- .anims = gUnknown_085A7C34,
- .images = gUnknown_085A7AD4,
+ .paletteTag = PALTAG_EXPLOSION,
+ .oam = &sOam_32x32,
+ .anims = sAnims_ReelTimeExplosion,
+ .images = sImageTable_ReelTimeExplosion,
.affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_8105894
+ .callback = SpriteCB_ReelTimeExplosion
};
-static const struct SpriteTemplate gSpriteTemplate_83ED54C =
+static const struct SpriteTemplate sSpriteTemplate_ReelTimeDuck =
{
.tileTag = 0xFFFF,
- .paletteTag = 4,
- .oam = &gUnknown_085A7A3C,
- .anims = gUnknown_085A7BFC,
- .images = gUnknown_085A7AE4,
+ .paletteTag = PALTAG_MISC,
+ .oam = &sOam_8x8,
+ .anims = sAnims_ReelTimeDuck,
+ .images = sImageTable_ReelTimeDuck,
.affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_810594C
+ .callback = SpriteCB_ReelTimeDuck
};
-static const struct SpriteTemplate gSpriteTemplate_83ED564 =
+static const struct SpriteTemplate sSpriteTemplate_ReelTimeSmoke =
{
.tileTag = 0xFFFF,
- .paletteTag = 4,
- .oam = &gUnknown_085A7A4C,
- .anims = gUnknown_085A7BF8,
- .images = gUnknown_085A7AEC,
- .affineAnims = gUnknown_085A7C88,
- .callback = sub_8105A38
+ .paletteTag = PALTAG_MISC,
+ .oam = &sOam_16x16,
+ .anims = sAnims_SingleFrame,
+ .images = sImageTable_ReelTimeSmoke,
+ .affineAnims = sAffineAnims_ReelTimeSmoke,
+ .callback = SpriteCB_ReelTimeSmoke
};
-static const struct SpriteTemplate gUnknown_085A7E48 =
+static const struct SpriteTemplate sSpriteTemplate_DigitalDisplay_Reel =
{
.tileTag = 0xFFFF,
- .paletteTag = 6,
- .oam = &gUnknown_085A7A3C,
- .anims = gUnknown_085A7BF8,
+ .paletteTag = PALTAG_DIG_DISPLAY,
+ .oam = &sOam_8x8,
+ .anims = sAnims_SingleFrame,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = SpriteCallbackDummy
};
-static const struct SpriteTemplate gUnknown_085A7E60 =
+static const struct SpriteTemplate sSpriteTemplate_DigitalDisplay_Time =
{
.tileTag = 0xFFFF,
- .paletteTag = 6,
- .oam = &gUnknown_085A7A3C,
- .anims = gUnknown_085A7BF8,
+ .paletteTag = PALTAG_DIG_DISPLAY,
+ .oam = &sOam_8x8,
+ .anims = sAnims_SingleFrame,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = SpriteCallbackDummy
};
-static const struct SpriteTemplate gUnknown_085A7E78 =
+static const struct SpriteTemplate sSpriteTemplate_DigitalDisplay_Insert =
{
.tileTag = 0xFFFF,
- .paletteTag = 6,
- .oam = &gUnknown_085A7A3C,
- .anims = gUnknown_085A7BF8,
+ .paletteTag = PALTAG_DIG_DISPLAY,
+ .oam = &sOam_8x8,
+ .anims = sAnims_SingleFrame,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = SpriteCallbackDummy
};
-static const struct SpriteTemplate gUnknown_085A7E90 =
+static const struct SpriteTemplate sSpriteTemplate_DigitalDisplay_Stop =
{
.tileTag = 18,
- .paletteTag = 6,
- .oam = &gUnknown_085A7A3C,
- .anims = gUnknown_085A7BF8,
+ .paletteTag = PALTAG_DIG_DISPLAY,
+ .oam = &sOam_8x8,
+ .anims = sAnims_SingleFrame,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = SpriteCallbackDummy
};
-static const struct SpriteTemplate gUnknown_085A7EA8 =
+static const struct SpriteTemplate sSpriteTemplate_DigitalDisplay_Win =
{
.tileTag = 0xFFFF,
- .paletteTag = 6,
- .oam = &gUnknown_085A7A6C,
- .anims = gUnknown_085A7BF8,
+ .paletteTag = PALTAG_DIG_DISPLAY,
+ .oam = &sOam_64x32,
+ .anims = sAnims_SingleFrame,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = SpriteCallbackDummy
};
-static const struct SpriteTemplate gUnknown_085A7EC0 =
+static const struct SpriteTemplate sSpriteTemplate_DigitalDisplay_Lose =
{
.tileTag = 0xFFFF,
- .paletteTag = 6,
- .oam = &gUnknown_085A7A6C,
- .anims = gUnknown_085A7BF8,
+ .paletteTag = PALTAG_DIG_DISPLAY,
+ .oam = &sOam_64x32,
+ .anims = sAnims_SingleFrame,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = SpriteCallbackDummy
};
-static const struct SpriteTemplate gUnknown_085A7ED8 =
+static const struct SpriteTemplate sSpriteTemplate_DigitalDisplay_Bonus =
{
.tileTag = 19,
- .paletteTag = 6,
- .oam = &gUnknown_085A7A3C,
- .anims = gUnknown_085A7BF8,
+ .paletteTag = PALTAG_DIG_DISPLAY,
+ .oam = &sOam_8x8,
+ .anims = sAnims_SingleFrame,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = SpriteCallbackDummy
};
-static const struct SpriteTemplate gUnknown_085A7EF0 =
+static const struct SpriteTemplate sSpriteTemplate_DigitalDisplay_Big =
{
.tileTag = 20,
- .paletteTag = 6,
- .oam = &gUnknown_085A7A3C,
- .anims = gUnknown_085A7BF8,
+ .paletteTag = PALTAG_DIG_DISPLAY,
+ .oam = &sOam_8x8,
+ .anims = sAnims_SingleFrame,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = SpriteCallbackDummy
};
-static const struct SpriteTemplate gUnknown_085A7F08 =
+static const struct SpriteTemplate sSpriteTemplate_DigitalDisplay_Reg =
{
.tileTag = 21,
- .paletteTag = 6,
- .oam = &gUnknown_085A7A3C,
- .anims = gUnknown_085A7BF8,
+ .paletteTag = PALTAG_DIG_DISPLAY,
+ .oam = &sOam_8x8,
+ .anims = sAnims_SingleFrame,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = SpriteCallbackDummy
};
-static const struct SpriteTemplate gUnknown_085A7F20 =
+static const struct SpriteTemplate sSpriteTemplate_DigitalDisplay_AButton =
{
.tileTag = 0xFFFF,
- .paletteTag = 6,
- .oam = &gUnknown_085A7A5C,
- .anims = gUnknown_085A7C38,
+ .paletteTag = PALTAG_DIG_DISPLAY,
+ .oam = &sOam_32x32,
+ .anims = sAnims_DigitalDisplay_AButton,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = SpriteCallbackDummy
};
-static const struct SpriteTemplate gUnknown_085A7F38 =
+static const struct SpriteTemplate sSpriteTemplate_DigitalDisplay_Smoke =
{
.tileTag = 0xFFFF,
- .paletteTag = 6,
- .oam = &gUnknown_085A7A3C,
- .anims = gUnknown_085A7BF8,
+ .paletteTag = PALTAG_DIG_DISPLAY,
+ .oam = &sOam_8x8,
+ .anims = sAnims_SingleFrame,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = SpriteCallbackDummy
};
-static const struct SpriteTemplate gUnknown_085A7F50 =
+static const struct SpriteTemplate sSpriteTemplate_DigitalDisplay_Number =
{
.tileTag = 0xFFFF,
- .paletteTag = 6,
- .oam = &gUnknown_085A7A4C,
- .anims = gUnknown_085A7C4C,
+ .paletteTag = PALTAG_DIG_DISPLAY,
+ .oam = &sOam_16x16,
+ .anims = sAnims_DigitalDisplay_Number,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = SpriteCallbackDummy
};
-static const struct SpriteTemplate gUnknown_085A7F68 =
+static const struct SpriteTemplate sSpriteTemplate_DigitalDisplay_Pokeball =
{
.tileTag = 0xFFFF,
- .paletteTag = 6,
- .oam = &gUnknown_085A7A3C,
- .anims = gUnknown_085A7C44,
+ .paletteTag = PALTAG_DIG_DISPLAY,
+ .oam = &sOam_8x8,
+ .anims = sAnims_DigitalDisplay_Pokeball,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = SpriteCallbackDummy
};
-static const struct SpriteTemplate gUnknown_085A7F80 =
+static const struct SpriteTemplate sSpriteTemplate_DigitalDisplay_DPad =
{
.tileTag = 0xFFFF,
- .paletteTag = 6,
- .oam = &gUnknown_085A7A3C,
- .anims = gUnknown_085A7C40,
+ .paletteTag = PALTAG_DIG_DISPLAY,
+ .oam = &sOam_8x8,
+ .anims = sAnims_DigitalDisplay_DPad,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = SpriteCallbackDummy
};
-static const struct SpriteTemplate gSpriteTemplate_83ED6CC =
+static const struct SpriteTemplate sSpriteTemplate_PikaPowerBolt =
{
.tileTag = 0xFFFF,
- .paletteTag = 4,
- .oam = &gUnknown_085A7A3C,
- .anims = gUnknown_085A7BF8,
- .images = gUnknown_085A7AF4,
- .affineAnims = gUnknown_085A7CDC,
- .callback = sub_8105B70
+ .paletteTag = PALTAG_MISC,
+ .oam = &sOam_8x8,
+ .anims = sAnims_SingleFrame,
+ .images = sImageTable_PikaPowerBolt,
+ .affineAnims = sAffineAnims_PikaPowerBolt,
+ .callback = SpriteCB_PikaPowerBolt
};
-static const struct Subsprite gUnknown_085A7FB0[] =
+static const struct Subsprite sSubsprites_ReelBackground[] =
{
{
.x = -64,
@@ -5525,12 +5874,12 @@ static const struct Subsprite gUnknown_085A7FB0[] =
}
};
-static const struct SubspriteTable gSubspriteTables_83ED704[] =
+static const struct SubspriteTable sSubspriteTable_ReelBackground[] =
{
- ARRAY_COUNT(gUnknown_085A7FB0), gUnknown_085A7FB0
+ ARRAY_COUNT(sSubsprites_ReelBackground), sSubsprites_ReelBackground
};
-static const struct Subsprite gUnknown_085A7FC8[] =
+static const struct Subsprite sSubsprites_ReelTimeMachineAntennae[] =
{
{
.x = -32,
@@ -5582,12 +5931,12 @@ static const struct Subsprite gUnknown_085A7FC8[] =
}
};
-static const struct SubspriteTable gSubspriteTables_83ED73C[] =
+static const struct SubspriteTable sSubspriteTable_ReelTimeMachineAntennae[] =
{
- ARRAY_COUNT(gUnknown_085A7FC8), gUnknown_085A7FC8
+ ARRAY_COUNT(sSubsprites_ReelTimeMachineAntennae), sSubsprites_ReelTimeMachineAntennae
};
-static const struct Subsprite gUnknown_085A7FE8[] =
+static const struct Subsprite sSubsprites_ReelTimeMachine[] =
{
{
.x = -32,
@@ -5615,12 +5964,12 @@ static const struct Subsprite gUnknown_085A7FE8[] =
}
};
-static const struct SubspriteTable gSubspriteTables_83ED75C[] =
+static const struct SubspriteTable sSubspriteTable_ReelTimeMachine[] =
{
- ARRAY_COUNT(gUnknown_085A7FE8), gUnknown_085A7FE8
+ ARRAY_COUNT(sSubsprites_ReelTimeMachine), sSubsprites_ReelTimeMachine
};
-static const struct Subsprite gUnknown_085A7FFC[] =
+static const struct Subsprite sSubsprites_BrokenReelTimeMachine[] =
{
{
.x = -32,
@@ -5664,12 +6013,12 @@ static const struct Subsprite gUnknown_085A7FFC[] =
}
};
-static const struct SubspriteTable gSubspriteTables_83ED78C[] =
+static const struct SubspriteTable sSubspriteTable_BrokenReelTimeMachine[] =
{
- ARRAY_COUNT(gUnknown_085A7FFC), gUnknown_085A7FFC
+ ARRAY_COUNT(sSubsprites_BrokenReelTimeMachine), sSubsprites_BrokenReelTimeMachine
};
-static const struct Subsprite gUnknown_085A8018[] =
+static const struct Subsprite sSubsprites_ReelTimeShadow[] =
{
{
.x = -32,
@@ -5705,12 +6054,12 @@ static const struct Subsprite gUnknown_085A8018[] =
}
};
-static const struct SubspriteTable gSubspriteTables_83ED7B4[] =
+static const struct SubspriteTable sSubspriteTable_ReelTimeShadow[] =
{
- ARRAY_COUNT(gUnknown_085A8018), gUnknown_085A8018
+ ARRAY_COUNT(sSubsprites_ReelTimeShadow), sSubsprites_ReelTimeShadow
};
-static const struct Subsprite gUnknown_085A8030[] =
+static const struct Subsprite sSubsprites_ReelTimeNumberGap[] =
{
{
.x = -8,
@@ -5738,12 +6087,12 @@ static const struct Subsprite gUnknown_085A8030[] =
}
};
-static const struct SubspriteTable gSubspriteTables_83ED7D4[] =
+static const struct SubspriteTable sSubspriteTable_ReelTimeNumberGap[] =
{
- ARRAY_COUNT(gUnknown_085A8030), gUnknown_085A8030
+ ARRAY_COUNT(sSubsprites_ReelTimeNumberGap), sSubsprites_ReelTimeNumberGap
};
-static const struct Subsprite gUnknown_085A8044[] =
+static const struct Subsprite sSubsprites_DigitalDisplay_Reel[] =
{
{
.x = -32,
@@ -5787,12 +6136,12 @@ static const struct Subsprite gUnknown_085A8044[] =
}
};
-static const struct SubspriteTable gUnknown_085A8058[] =
+static const struct SubspriteTable sSubspriteTable_DigitalDisplay_Reel[] =
{
- ARRAY_COUNT(gUnknown_085A8044), gUnknown_085A8044
+ ARRAY_COUNT(sSubsprites_DigitalDisplay_Reel), sSubsprites_DigitalDisplay_Reel
};
-static const struct Subsprite gUnknown_085A8060[] =
+static const struct Subsprite sSubsprites_DigitalDisplay_Time[] =
{
{
.x = -32,
@@ -5828,12 +6177,12 @@ static const struct Subsprite gUnknown_085A8060[] =
}
};
-static const struct SubspriteTable gUnknown_085A8070[] =
+static const struct SubspriteTable sSubspriteTable_DigitalDisplay_Time[] =
{
- ARRAY_COUNT(gUnknown_085A8060), gUnknown_085A8060
+ ARRAY_COUNT(sSubsprites_DigitalDisplay_Time), sSubsprites_DigitalDisplay_Time
};
-static const struct Subsprite gUnknown_085A8078[] =
+static const struct Subsprite sSubsprites_DigitalDisplay_Insert[] =
{
{
.x = -32,
@@ -5869,12 +6218,12 @@ static const struct Subsprite gUnknown_085A8078[] =
}
};
-static const struct SubspriteTable gUnknown_085A8088[] =
+static const struct SubspriteTable sSubspriteTable_DigitalDisplay_Insert[] =
{
- ARRAY_COUNT(gUnknown_085A8078), gUnknown_085A8078
+ ARRAY_COUNT(sSubsprites_DigitalDisplay_Insert), sSubsprites_DigitalDisplay_Insert
};
-static const struct Subsprite gUnknown_085A8090[] =
+static const struct Subsprite sSubsprites_DigitalDisplay_Unused1[] =
{
{
.x = -32,
@@ -5910,12 +6259,12 @@ static const struct Subsprite gUnknown_085A8090[] =
}
};
-static const struct SubspriteTable gUnknown_085A80A0[] =
+static const struct SubspriteTable sSubspriteTable_DigitalDisplay_Unused1[] =
{
- ARRAY_COUNT(gUnknown_085A8090), gUnknown_085A8090
+ ARRAY_COUNT(sSubsprites_DigitalDisplay_Unused1), sSubsprites_DigitalDisplay_Unused1
};
-static const struct Subsprite gUnknown_085A80A8[] =
+static const struct Subsprite sSubsprites_DigitalDisplay_Win[] =
{
{
.x = -32,
@@ -5967,12 +6316,12 @@ static const struct Subsprite gUnknown_085A80A8[] =
}
};
-static const struct SubspriteTable gUnknown_085A80C0[] =
+static const struct SubspriteTable sSubspriteTable_DigitalDisplay_Win[] =
{
- ARRAY_COUNT(gUnknown_085A80A8), gUnknown_085A80A8
+ ARRAY_COUNT(sSubsprites_DigitalDisplay_Win), sSubsprites_DigitalDisplay_Win
};
-static const struct Subsprite gUnknown_085A80C8[] =
+static const struct Subsprite sSubsprites_DigitalDisplay_Smoke[] =
{
{
.x = -16,
@@ -5984,7 +6333,7 @@ static const struct Subsprite gUnknown_085A80C8[] =
}
};
-static const struct Subsprite gUnknown_085A80CC[] =
+static const struct Subsprite sSubsprites_DigitalDisplay_Unused2[] =
{
{
.x = -8,
@@ -5996,17 +6345,17 @@ static const struct Subsprite gUnknown_085A80CC[] =
}
};
-static const struct SubspriteTable gUnknown_085A80D0[] =
+static const struct SubspriteTable sSubspriteTable_DigitalDisplay_Smoke[] =
{
- ARRAY_COUNT(gUnknown_085A80C8), gUnknown_085A80C8
+ ARRAY_COUNT(sSubsprites_DigitalDisplay_Smoke), sSubsprites_DigitalDisplay_Smoke
};
-static const struct SubspriteTable gUnknown_085A80D8[] =
+static const struct SubspriteTable sSubspriteTable_DigitalDisplay_Unused2[] =
{
- ARRAY_COUNT(gUnknown_085A80CC), gUnknown_085A80CC
+ ARRAY_COUNT(sSubsprites_DigitalDisplay_Unused2), sSubsprites_DigitalDisplay_Unused2
};
-static const struct Subsprite gUnknown_085A80E0[] =
+static const struct Subsprite sSubsprites_DigitalDisplay_Pokeball[] =
{
{
.x = -24,
@@ -6106,12 +6455,12 @@ static const struct Subsprite gUnknown_085A80E0[] =
}
};
-static const struct SubspriteTable gUnknown_085A8110[] =
+static const struct SubspriteTable sSubspriteTable_DigitalDisplay_Pokeball[] =
{
- ARRAY_COUNT(gUnknown_085A80E0), gUnknown_085A80E0
+ ARRAY_COUNT(sSubsprites_DigitalDisplay_Pokeball), sSubsprites_DigitalDisplay_Pokeball
};
-static const struct Subsprite gUnknown_085A8118[] =
+static const struct Subsprite sSubsprites_DigitalDisplay_DPad[] =
{
{
.x = -16,
@@ -6139,12 +6488,12 @@ static const struct Subsprite gUnknown_085A8118[] =
}
};
-static const struct SubspriteTable gUnknown_085A8124[] =
+static const struct SubspriteTable sSubspriteTable_DigitalDisplay_DPad[] =
{
- ARRAY_COUNT(gUnknown_085A8118), gUnknown_085A8118
+ ARRAY_COUNT(sSubsprites_DigitalDisplay_DPad), sSubsprites_DigitalDisplay_DPad
};
-static const struct Subsprite gUnknown_085A812C[] =
+static const struct Subsprite sSubsprites_DigitalDisplay_StopS[] =
{
{
.x = -8,
@@ -6164,12 +6513,12 @@ static const struct Subsprite gUnknown_085A812C[] =
}
};
-static const struct SubspriteTable gUnknown_085A8134[] =
+static const struct SubspriteTable sSubspriteTable_DigitalDisplay_StopS[] =
{
- ARRAY_COUNT(gUnknown_085A812C), gUnknown_085A812C
+ ARRAY_COUNT(sSubsprites_DigitalDisplay_StopS), sSubsprites_DigitalDisplay_StopS
};
-static const struct Subsprite gUnknown_085A813C[] =
+static const struct Subsprite sSubsprites_DigitalDisplay_StopT[] =
{
{
.x = -8,
@@ -6189,12 +6538,12 @@ static const struct Subsprite gUnknown_085A813C[] =
}
};
-static const struct SubspriteTable gUnknown_085A8144[] =
+static const struct SubspriteTable sSubspriteTable_DigitalDisplay_StopT[] =
{
- ARRAY_COUNT(gUnknown_085A813C), gUnknown_085A813C
+ ARRAY_COUNT(sSubsprites_DigitalDisplay_StopT), sSubsprites_DigitalDisplay_StopT
};
-static const struct Subsprite gUnknown_085A814C[] =
+static const struct Subsprite sSubsprites_DigitalDisplay_StopO[] =
{
{
.x = -8,
@@ -6214,12 +6563,12 @@ static const struct Subsprite gUnknown_085A814C[] =
}
};
-static const struct SubspriteTable gUnknown_085A8154[] =
+static const struct SubspriteTable sSubspriteTable_DigitalDisplay_StopO[] =
{
- ARRAY_COUNT(gUnknown_085A814C), gUnknown_085A814C
+ ARRAY_COUNT(sSubsprites_DigitalDisplay_StopO), sSubsprites_DigitalDisplay_StopO
};
-static const struct Subsprite gUnknown_085A815C[] =
+static const struct Subsprite sSubsprites_DigitalDisplay_StopP[] =
{
{
.x = -8,
@@ -6239,12 +6588,12 @@ static const struct Subsprite gUnknown_085A815C[] =
}
};
-static const struct SubspriteTable gUnknown_085A8164[] =
+static const struct SubspriteTable sSubspriteTable_DigitalDisplay_StopP[] =
{
- ARRAY_COUNT(gUnknown_085A815C), gUnknown_085A815C
+ ARRAY_COUNT(sSubsprites_DigitalDisplay_StopP), sSubsprites_DigitalDisplay_StopP
};
-static const struct Subsprite gUnknown_085A816C[] =
+static const struct Subsprite sSubsprites_DigitalDisplay_BonusB[] =
{
{
.x = -8,
@@ -6264,12 +6613,12 @@ static const struct Subsprite gUnknown_085A816C[] =
}
};
-static const struct SubspriteTable gUnknown_085A8174[] =
+static const struct SubspriteTable sSubspriteTable_DigitalDisplay_BonusB[] =
{
- ARRAY_COUNT(gUnknown_085A816C), gUnknown_085A816C
+ ARRAY_COUNT(sSubsprites_DigitalDisplay_BonusB), sSubsprites_DigitalDisplay_BonusB
};
-static const struct Subsprite gUnknown_085A817C[] =
+static const struct Subsprite sSubsprites_DigitalDisplay_BonusO[] =
{
{
.x = -4,
@@ -6289,12 +6638,12 @@ static const struct Subsprite gUnknown_085A817C[] =
}
};
-static const struct SubspriteTable gUnknown_085A8184[] =
+static const struct SubspriteTable sSubspriteTable_DigitalDisplay_BonusO[] =
{
- ARRAY_COUNT(gUnknown_085A817C), gUnknown_085A817C
+ ARRAY_COUNT(sSubsprites_DigitalDisplay_BonusO), sSubsprites_DigitalDisplay_BonusO
};
-static const struct Subsprite gUnknown_085A818C[] =
+static const struct Subsprite sSubsprites_DigitalDisplay_BonusN[] =
{
{
.x = -8,
@@ -6314,12 +6663,12 @@ static const struct Subsprite gUnknown_085A818C[] =
}
};
-static const struct SubspriteTable gUnknown_085A8194[] =
+static const struct SubspriteTable sSubspriteTable_DigitalDisplay_BonusN[] =
{
- ARRAY_COUNT(gUnknown_085A818C), gUnknown_085A818C
+ ARRAY_COUNT(sSubsprites_DigitalDisplay_BonusN), sSubsprites_DigitalDisplay_BonusN
};
-static const struct Subsprite gUnknown_085A819C[] =
+static const struct Subsprite sSubsprites_DigitalDisplay_BonusU[] =
{
{
.x = -4,
@@ -6339,12 +6688,12 @@ static const struct Subsprite gUnknown_085A819C[] =
}
};
-static const struct SubspriteTable gUnknown_085A81A4[] =
+static const struct SubspriteTable sSubspriteTable_DigitalDisplay_BonusU[] =
{
- ARRAY_COUNT(gUnknown_085A819C), gUnknown_085A819C
+ ARRAY_COUNT(sSubsprites_DigitalDisplay_BonusU), sSubsprites_DigitalDisplay_BonusU
};
-static const struct Subsprite gUnknown_085A81AC[] =
+static const struct Subsprite sSubsprites_DigitalDisplay_BonusS[] =
{
{
.x = -8,
@@ -6364,12 +6713,12 @@ static const struct Subsprite gUnknown_085A81AC[] =
}
};
-static const struct SubspriteTable gUnknown_085A81B4[] =
+static const struct SubspriteTable sSubspriteTable_DigitalDisplay_BonusS[] =
{
- ARRAY_COUNT(gUnknown_085A81AC), gUnknown_085A81AC
+ ARRAY_COUNT(sSubsprites_DigitalDisplay_BonusS), sSubsprites_DigitalDisplay_BonusS
};
-static const struct Subsprite gUnknown_085A81BC[] =
+static const struct Subsprite sSubsprites_DigitalDisplay_BigB[] =
{
{
.x = -12,
@@ -6421,12 +6770,12 @@ static const struct Subsprite gUnknown_085A81BC[] =
}
};
-static const struct SubspriteTable gUnknown_085A81D4[] =
+static const struct SubspriteTable sSubspriteTable_DigitalDisplay_BigB[] =
{
- ARRAY_COUNT(gUnknown_085A81BC), gUnknown_085A81BC
+ ARRAY_COUNT(sSubsprites_DigitalDisplay_BigB), sSubsprites_DigitalDisplay_BigB
};
-static const struct Subsprite gUnknown_085A81DC[] =
+static const struct Subsprite sSubsprites_DigitalDisplay_BigI[] =
{
{
.x = -8,
@@ -6454,12 +6803,12 @@ static const struct Subsprite gUnknown_085A81DC[] =
}
};
-static const struct SubspriteTable gUnknown_085A81E8[] =
+static const struct SubspriteTable sSubspriteTable_DigitalDisplay_BigI[] =
{
- ARRAY_COUNT(gUnknown_085A81DC), gUnknown_085A81DC
+ ARRAY_COUNT(sSubsprites_DigitalDisplay_BigI), sSubsprites_DigitalDisplay_BigI
};
-static const struct Subsprite gUnknown_085A81F0[] =
+static const struct Subsprite sSubsprites_DigitalDisplay_BigG[] =
{
{
.x = -12,
@@ -6511,12 +6860,12 @@ static const struct Subsprite gUnknown_085A81F0[] =
}
};
-static const struct SubspriteTable gUnknown_085A8208[] =
+static const struct SubspriteTable sSubspriteTable_DigitalDisplay_BigG[] =
{
- ARRAY_COUNT(gUnknown_085A81F0), gUnknown_085A81F0
+ ARRAY_COUNT(sSubsprites_DigitalDisplay_BigG), sSubsprites_DigitalDisplay_BigG
};
-static const struct Subsprite gUnknown_085A8210[] =
+static const struct Subsprite sSubsprites_DigitalDisplay_RegR[] =
{
{
.x = -12,
@@ -6568,12 +6917,12 @@ static const struct Subsprite gUnknown_085A8210[] =
}
};
-static const struct SubspriteTable gUnknown_085A8228[] =
+static const struct SubspriteTable sSubspriteTable_DigitalDisplay_RegR[] =
{
- ARRAY_COUNT(gUnknown_085A8210), gUnknown_085A8210
+ ARRAY_COUNT(sSubsprites_DigitalDisplay_RegR), sSubsprites_DigitalDisplay_RegR
};
-static const struct Subsprite gUnknown_085A822C[] =
+static const struct Subsprite sSubsprites_DigitalDisplay_RegE[] =
{
{
.x = -8,
@@ -6601,12 +6950,12 @@ static const struct Subsprite gUnknown_085A822C[] =
}
};
-static const struct SubspriteTable gUnknown_085A823C[] =
+static const struct SubspriteTable sSubspriteTable_DigitalDisplay_RegE[] =
{
- ARRAY_COUNT(gUnknown_085A822C), gUnknown_085A822C
+ ARRAY_COUNT(sSubsprites_DigitalDisplay_RegE), sSubsprites_DigitalDisplay_RegE
};
-static const struct Subsprite gUnknown_085A8244[] =
+static const struct Subsprite sSubsprites_DigitalDisplay_RegG[] =
{
{
.x = -12,
@@ -6658,193 +7007,196 @@ static const struct Subsprite gUnknown_085A8244[] =
}
};
-static const struct SubspriteTable gUnknown_085A825C[] =
-{
- ARRAY_COUNT(gUnknown_085A8244), gUnknown_085A8244
-};
-
-static const struct SpriteTemplate *const gUnknown_083EDB5C[] =
-{
- &gUnknown_085A7E48,
- &gUnknown_085A7E60,
- &gUnknown_085A7E78,
- &gUnknown_085A7EA8,
- &gUnknown_085A7EC0,
- &gUnknown_085A7F20,
- &gUnknown_085A7F38,
- &gUnknown_085A7F50,
- &gUnknown_085A7F68,
- &gUnknown_085A7F80,
- &gUnknown_085A7E90,
- &gUnknown_085A7E90,
- &gUnknown_085A7E90,
- &gUnknown_085A7E90,
- &gUnknown_085A7ED8,
- &gUnknown_085A7ED8,
- &gUnknown_085A7ED8,
- &gUnknown_085A7ED8,
- &gUnknown_085A7ED8,
- &gUnknown_085A7EF0,
- &gUnknown_085A7EF0,
- &gUnknown_085A7EF0,
- &gUnknown_085A7F08,
- &gUnknown_085A7F08,
- &gUnknown_085A7F08,
- &gDummySpriteTemplate
-};
-
-static const struct SubspriteTable *const gUnknown_083EDBC4[] =
-{
- gUnknown_085A8058,
- gUnknown_085A8070,
- gUnknown_085A8088,
- gUnknown_085A80C0,
- NULL,
- NULL,
- gUnknown_085A80D0,
- NULL,
- gUnknown_085A8110,
- gUnknown_085A8124,
- gUnknown_085A8134,
- gUnknown_085A8144,
- gUnknown_085A8154,
- gUnknown_085A8164,
- gUnknown_085A8174,
- gUnknown_085A8184,
- gUnknown_085A8194,
- gUnknown_085A81A4,
- gUnknown_085A81B4,
- gUnknown_085A81D4,
- gUnknown_085A81E8,
- gUnknown_085A8208,
- gUnknown_085A8228,
- gUnknown_085A823C,
- gUnknown_085A825C,
- NULL
-};
-
-static const struct SpriteSheet gSlotMachineSpriteSheets[] =
-{
- { .data = gSlotMachineReelSymbol1Tiles, .size = 0x200, .tag = 0 },
- { .data = gSlotMachineReelSymbol2Tiles, .size = 0x200, .tag = 1 },
- { .data = gSlotMachineReelSymbol3Tiles, .size = 0x200, .tag = 2 },
- { .data = gSlotMachineReelSymbol4Tiles, .size = 0x200, .tag = 3 },
- { .data = gSlotMachineReelSymbol5Tiles, .size = 0x200, .tag = 4 },
- { .data = gSlotMachineReelSymbol6Tiles, .size = 0x200, .tag = 5 },
- { .data = gSlotMachineReelSymbol7Tiles, .size = 0x200, .tag = 6 },
- { .data = gSlotMachineNumber0Tiles, .size = 0x40, .tag = 7 },
- { .data = gSlotMachineNumber1Tiles, .size = 0x40, .tag = 8 },
- { .data = gSlotMachineNumber2Tiles, .size = 0x40, .tag = 9 },
- { .data = gSlotMachineNumber3Tiles, .size = 0x40, .tag = 10 },
- { .data = gSlotMachineNumber4Tiles, .size = 0x40, .tag = 11 },
- { .data = gSlotMachineNumber5Tiles, .size = 0x40, .tag = 12 },
- { .data = gSlotMachineNumber6Tiles, .size = 0x40, .tag = 13 },
- { .data = gSlotMachineNumber7Tiles, .size = 0x40, .tag = 14 },
- { .data = gSlotMachineNumber8Tiles, .size = 0x40, .tag = 15 },
- { .data = gSlotMachineNumber9Tiles, .size = 0x40, .tag = 16 },
-};
-
-static const u8 sUnused1[][8] =
-{
- {0, 0, 0, 0, 0, 2, 18},
- {0, 0, 0, 0, 0, 2, 19},
- {0, 0, 0, 0, 0, 3, 20},
- {0, 0, 0, 0, 0, 3, 21},
- {0, 0, 0, 0, 0, 0, 0}
-};
-
-static const u8 *const gUnknown_083EDCDC = gUnknown_08DD19F8;
-
-static const u8 sUnused2[][2] =
-{
- {0x7B, 0x6F},
- {0x68, 0x69},
- {0xAB, 0x36},
- {0xFF, 0x7F},
- {0x50, 0x57},
- {0xC0, 0x7E},
- {0xBA, 2},
- {0xBA, 2},
- {0xFD, 1},
- {0xFD, 1}
-};
-
-static const u8 gUnknown_085A83FC[] = {0x91, 0x7F};
-static const u8 gUnknown_085A83FE[] = {0xBF, 0x43};
-static const u8 gUnknown_085A8400[] = {0xBF, 0x43};
-static const u8 gUnknown_085A8402[] = {0xBF, 0x4A};
-static const u8 gUnknown_085A8404[] = {0xBF, 0x4A};
-
-static const u8 *const gUnknown_083EDD08[] =
-{
- gUnknown_085A83FC,
- gUnknown_085A83FE,
- gUnknown_085A8400,
- gUnknown_085A8402,
- gUnknown_085A8404,
-};
-
-static const u16 *const gUnknown_083EDD1C[] =
-{
- gSlotMachineMenu_Pal + 0x4A,
- gSlotMachineMenu_Pal + 0x4B,
- gSlotMachineMenu_Pal + 0x4C,
- gSlotMachineMenu_Pal + 0x4D,
- gSlotMachineMenu_Pal + 0x4E,
-};
-
-static const u8 gUnknown_083EDD30[] = {0x4A, 0x4B, 0x4C, 0x4E, 0x4D};
-
-static const u8 gBettingTilesId[][2] =
-{
- {0, 0},
- {1, 2},
- {3, 4},
-};
-
-static const u8 gNumberBettingTiles[] = { 1, 2, 2 };
-
-static const u16 gUnknown_085A843E[] = INCBIN_U16("graphics/slot_machine/85A843E.gbapal");
-static const u16 gUnknown_085A845E[] = INCBIN_U16("graphics/slot_machine/85A845E.gbapal");
-static const u16 gUnknown_085A847E[] = INCBIN_U16("graphics/slot_machine/85A847E.gbapal");
-
-static const u16 *const gUnknown_083EDDA0[] =
-{
- gUnknown_085A843E,
- gUnknown_085A845E,
- gUnknown_085A847E,
-};
-
-static const u16 *const gUnknown_083EDDAC = {gSlotMachineMenu_Pal + 0x10};
-
-static const u16 gUnknown_085A84B0[] = INCBIN_U16("graphics/slot_machine/85A84B0.gbapal");
-static const u16 gUnknown_085A84D0[] = INCBIN_U16("graphics/slot_machine/85A84D0.gbapal");
-static const u16 gUnknown_085A84F0[] = INCBIN_U16("graphics/slot_machine/85A84F0.gbapal");
-
-static const u16 *const gUnknown_083EDE10[] =
-{
- gUnknown_085A84B0,
- gUnknown_085A84D0,
- gUnknown_085A84F0,
- gUnknown_08DCF230,
-};
-
-static const u16 *const gUnknown_083EDE20 = gUnknown_08DCF230;
-static const u16 gPalette_83EDE24[] = INCBIN_U16("graphics/slot_machine/85A8524.bin");
+static const struct SubspriteTable sSubspriteTable_DigitalDisplay_RegG[] =
+{
+ ARRAY_COUNT(sSubsprites_DigitalDisplay_RegG), sSubsprites_DigitalDisplay_RegG
+};
+
+static const struct SpriteTemplate *const sSpriteTemplates_DigitalDisplay[NUM_DIG_DISPLAY_SPRITES] =
+{
+ [DIG_SPRITE_REEL] = &sSpriteTemplate_DigitalDisplay_Reel,
+ [DIG_SPRITE_TIME] = &sSpriteTemplate_DigitalDisplay_Time,
+ [DIG_SPRITE_INSERT] = &sSpriteTemplate_DigitalDisplay_Insert,
+ [DIG_SPRITE_WIN] = &sSpriteTemplate_DigitalDisplay_Win,
+ [DIG_SPRITE_LOSE] = &sSpriteTemplate_DigitalDisplay_Lose,
+ [DIG_SPRITE_A_BUTTON] = &sSpriteTemplate_DigitalDisplay_AButton,
+ [DIG_SPRITE_SMOKE] = &sSpriteTemplate_DigitalDisplay_Smoke,
+ [DIG_SPRITE_NUMBER] = &sSpriteTemplate_DigitalDisplay_Number,
+ [DIG_SPRITE_POKE_BALL] = &sSpriteTemplate_DigitalDisplay_Pokeball,
+ [DIG_SPRITE_D_PAD] = &sSpriteTemplate_DigitalDisplay_DPad,
+ [DIG_SPRITE_STOP_S] = &sSpriteTemplate_DigitalDisplay_Stop,
+ [DIG_SPRITE_STOP_T] = &sSpriteTemplate_DigitalDisplay_Stop,
+ [DIG_SPRITE_STOP_O] = &sSpriteTemplate_DigitalDisplay_Stop,
+ [DIG_SPRITE_STOP_P] = &sSpriteTemplate_DigitalDisplay_Stop,
+ [DIG_SPRITE_BONUS_B] = &sSpriteTemplate_DigitalDisplay_Bonus,
+ [DIG_SPRITE_BONUS_O] = &sSpriteTemplate_DigitalDisplay_Bonus,
+ [DIG_SPRITE_BONUS_N] = &sSpriteTemplate_DigitalDisplay_Bonus,
+ [DIG_SPRITE_BONUS_U] = &sSpriteTemplate_DigitalDisplay_Bonus,
+ [DIG_SPRITE_BONUS_S] = &sSpriteTemplate_DigitalDisplay_Bonus,
+ [DIG_SPRITE_BIG_B] = &sSpriteTemplate_DigitalDisplay_Big,
+ [DIG_SPRITE_BIG_I] = &sSpriteTemplate_DigitalDisplay_Big,
+ [DIG_SPRITE_BIG_G] = &sSpriteTemplate_DigitalDisplay_Big,
+ [DIG_SPRITE_REG_R] = &sSpriteTemplate_DigitalDisplay_Reg,
+ [DIG_SPRITE_REG_E] = &sSpriteTemplate_DigitalDisplay_Reg,
+ [DIG_SPRITE_REG_G] = &sSpriteTemplate_DigitalDisplay_Reg,
+ [DIG_SPRITE_EMPTY] = &gDummySpriteTemplate
+};
+
+static const struct SubspriteTable *const sSubspriteTables_DigitalDisplay[NUM_DIG_DISPLAY_SPRITES] =
+{
+ [DIG_SPRITE_REEL] = sSubspriteTable_DigitalDisplay_Reel,
+ [DIG_SPRITE_TIME] = sSubspriteTable_DigitalDisplay_Time,
+ [DIG_SPRITE_INSERT] = sSubspriteTable_DigitalDisplay_Insert,
+ [DIG_SPRITE_WIN] = sSubspriteTable_DigitalDisplay_Win,
+ [DIG_SPRITE_LOSE] = NULL,
+ [DIG_SPRITE_A_BUTTON] = NULL,
+ [DIG_SPRITE_SMOKE] = sSubspriteTable_DigitalDisplay_Smoke,
+ [DIG_SPRITE_NUMBER] = NULL,
+ [DIG_SPRITE_POKE_BALL] = sSubspriteTable_DigitalDisplay_Pokeball,
+ [DIG_SPRITE_D_PAD] = sSubspriteTable_DigitalDisplay_DPad,
+ [DIG_SPRITE_STOP_S] = sSubspriteTable_DigitalDisplay_StopS,
+ [DIG_SPRITE_STOP_T] = sSubspriteTable_DigitalDisplay_StopT,
+ [DIG_SPRITE_STOP_O] = sSubspriteTable_DigitalDisplay_StopO,
+ [DIG_SPRITE_STOP_P] = sSubspriteTable_DigitalDisplay_StopP,
+ [DIG_SPRITE_BONUS_B] = sSubspriteTable_DigitalDisplay_BonusB,
+ [DIG_SPRITE_BONUS_O] = sSubspriteTable_DigitalDisplay_BonusO,
+ [DIG_SPRITE_BONUS_N] = sSubspriteTable_DigitalDisplay_BonusN,
+ [DIG_SPRITE_BONUS_U] = sSubspriteTable_DigitalDisplay_BonusU,
+ [DIG_SPRITE_BONUS_S] = sSubspriteTable_DigitalDisplay_BonusS,
+ [DIG_SPRITE_BIG_B] = sSubspriteTable_DigitalDisplay_BigB,
+ [DIG_SPRITE_BIG_I] = sSubspriteTable_DigitalDisplay_BigI,
+ [DIG_SPRITE_BIG_G] = sSubspriteTable_DigitalDisplay_BigG,
+ [DIG_SPRITE_REG_R] = sSubspriteTable_DigitalDisplay_RegR,
+ [DIG_SPRITE_REG_E] = sSubspriteTable_DigitalDisplay_RegE,
+ [DIG_SPRITE_REG_G] = sSubspriteTable_DigitalDisplay_RegG,
+ [DIG_SPRITE_EMPTY] = NULL
+};
+
+static const struct SpriteSheet sSlotMachineSpriteSheets[22] =
+{
+ { .data = gSlotMachineReelSymbol1Tiles, .size = 0x200, .tag = GFXTAG_7_RED },
+ { .data = gSlotMachineReelSymbol2Tiles, .size = 0x200, .tag = GFXTAG_7_BLUE },
+ { .data = gSlotMachineReelSymbol3Tiles, .size = 0x200, .tag = GFXTAG_AZURILL },
+ { .data = gSlotMachineReelSymbol4Tiles, .size = 0x200, .tag = GFXTAG_LOTAD },
+ { .data = gSlotMachineReelSymbol5Tiles, .size = 0x200, .tag = GFXTAG_CHERRY },
+ { .data = gSlotMachineReelSymbol6Tiles, .size = 0x200, .tag = GFXTAG_POWER },
+ { .data = gSlotMachineReelSymbol7Tiles, .size = 0x200, .tag = GFXTAG_REPLAY },
+ { .data = gSlotMachineNumber0Tiles, .size = 0x40, .tag = GFXTAG_NUM_0 },
+ { .data = gSlotMachineNumber1Tiles, .size = 0x40, .tag = GFXTAG_NUM_1 },
+ { .data = gSlotMachineNumber2Tiles, .size = 0x40, .tag = GFXTAG_NUM_2 },
+ { .data = gSlotMachineNumber3Tiles, .size = 0x40, .tag = GFXTAG_NUM_3 },
+ { .data = gSlotMachineNumber4Tiles, .size = 0x40, .tag = GFXTAG_NUM_4 },
+ { .data = gSlotMachineNumber5Tiles, .size = 0x40, .tag = GFXTAG_NUM_5 },
+ { .data = gSlotMachineNumber6Tiles, .size = 0x40, .tag = GFXTAG_NUM_6 },
+ { .data = gSlotMachineNumber7Tiles, .size = 0x40, .tag = GFXTAG_NUM_7 },
+ { .data = gSlotMachineNumber8Tiles, .size = 0x40, .tag = GFXTAG_NUM_8 },
+ { .data = gSlotMachineNumber9Tiles, .size = 0x40, .tag = GFXTAG_NUM_9 },
+ // skips GFXTAG_REEL_BG, which has its own spritesheet
+ // the data for these sheets is determined at runtime
+ { .data = NULL, .size = 0x200, .tag = GFXTAG_STOP },
+ { .data = NULL, .size = 0x200, .tag = GFXTAG_BONUS },
+ { .data = NULL, .size = 0x300, .tag = GFXTAG_BIG },
+ { .data = NULL, .size = 0x300, .tag = GFXTAG_REG },
+ {},
+};
+
+static const u8 *const sReelBackground_Tilemap = gSlotMachineReelBackground_Tilemap;
+
+static const u16 sUnused[] =
+{
+ 0x6F7B,
+ 0x6968,
+ 0x36AB,
+ 0x7FFF,
+ 0x5750,
+ 0x7EC0,
+ 0x02BA,
+ 0x02BA,
+ 0x01FD,
+ 0x01FD,
+};
+
+// The Bet 2 and 3 match line palettes are duplicated unnecessarily
+static const u16 sMiddleRowLit_Pal[] = {RGB(17, 28, 31)};
+static const u16 sTopRowLit_Pal[] = {RGB(31, 29, 16)};
+static const u16 sBottomRowt_Pal[] = {RGB(31, 29, 16)};
+static const u16 sNWSEDiagLit_Pal[] = {RGB(31, 21, 18)};
+static const u16 sNESWDiagLit_Pal[] = {RGB(31, 21, 18)};
+static const u16 *const sLitMatchLinePalTable[NUM_MATCH_LINES] =
+{
+ [MATCH_MIDDLE_ROW] = sMiddleRowLit_Pal,
+ [MATCH_TOP_ROW] = sTopRowLit_Pal,
+ [MATCH_BOTTOM_ROW] = sBottomRowt_Pal,
+ [MATCH_NWSE_DIAG] = sNWSEDiagLit_Pal,
+ [MATCH_NESW_DIAG] = sNESWDiagLit_Pal,
+};
+
+static const u16 *const sDarkMatchLinePalTable[NUM_MATCH_LINES] =
+{
+ [MATCH_MIDDLE_ROW] = &gSlotMachineMenu_Pal[74],
+ [MATCH_TOP_ROW] = &gSlotMachineMenu_Pal[75],
+ [MATCH_BOTTOM_ROW] = &gSlotMachineMenu_Pal[76],
+ [MATCH_NWSE_DIAG] = &gSlotMachineMenu_Pal[77],
+ [MATCH_NESW_DIAG] = &gSlotMachineMenu_Pal[78],
+};
+
+static const u8 sMatchLinePalOffsets[NUM_MATCH_LINES] = {
+ [MATCH_MIDDLE_ROW] = 74,
+ [MATCH_TOP_ROW] = 75,
+ [MATCH_BOTTOM_ROW] = 76,
+ [MATCH_NWSE_DIAG] = 78, // Diag colors flipped for some reason
+ [MATCH_NESW_DIAG] = 77 // Doesn't matter as both are identical
+};
+
+static const u8 sBetToMatchLineIds[MAX_BET][2] =
+{
+ {MATCH_MIDDLE_ROW, MATCH_MIDDLE_ROW}, // Bet 1
+ {MATCH_TOP_ROW, MATCH_BOTTOM_ROW}, // Bet 2
+ {MATCH_NWSE_DIAG, MATCH_NESW_DIAG}, // Bet 3
+};
+
+static const u8 sMatchLinesPerBet[MAX_BET] = { 1, 2, 2 };
+
+// Flashing lights at top of slot machine, brightest point inside light goes from toward center of machine, to middle, to toward edges
+static const u16 sFlashingLightsInside_Pal[] = INCBIN_U16("graphics/slot_machine/flashing_lights_inside.gbapal");
+static const u16 sFlashingLightsMiddle_Pal[] = INCBIN_U16("graphics/slot_machine/flashing_lights_middle.gbapal");
+static const u16 sFlashingLightsOutside_Pal[] = INCBIN_U16("graphics/slot_machine/flashing_lights_outside.gbapal");
+static const u16 *const sFlashingLightsPalTable[] =
+{
+ sFlashingLightsInside_Pal,
+ sFlashingLightsMiddle_Pal,
+ sFlashingLightsOutside_Pal,
+};
+
+static const u16 *const sSlotMachineMenu_Pal = {gSlotMachineMenu_Pal + 16};
+
+static const u16 sPokeballShining0_Pal[] = INCBIN_U16("graphics/slot_machine/pokeball_shining_0.gbapal");
+static const u16 sPokeballShining1_Pal[] = INCBIN_U16("graphics/slot_machine/pokeball_shining_1.gbapal");
+static const u16 sPokeballShining2_Pal[] = INCBIN_U16("graphics/slot_machine/pokeball_shining_2.gbapal");
+static const u16 *const sPokeballShiningPalTable[] =
+{
+ sPokeballShining0_Pal, // Streak on left side of ball
+ sPokeballShining1_Pal, // Streak in middle of ball
+ sPokeballShining2_Pal, // Streak on right side of ball
+ gSlotMachineDigitalDisplay_Pal, // Back to normal
+};
+
+static const u16 *const sDigitalDisplay_Pal = gSlotMachineDigitalDisplay_Pal;
+static const u16 sUnkPalette[] = INCBIN_U16("graphics/slot_machine/85A8524.bin");
-static const struct SpritePalette gSlotMachineSpritePalettes[] =
+static const struct SpritePalette sSlotMachineSpritePalettes[] =
{
- { .data = gUnknown_08DCF170, .tag = 0},
- { .data = gUnknown_08DCF190, .tag = 1},
- { .data = gUnknown_08DCF1B0, .tag = 2},
- { .data = gSlotMachineReelTime_Pal, .tag = 3},
- { .data = gUnknown_08DCF1F0, .tag = 4},
- { .data = gUnknown_08DCF210, .tag = 5},
- { .data = gUnknown_08DCF230, .tag = 6},
- { .data = gUnknown_08DCF1F0, .tag = 7},
+ { .data = gSlotMachineReelSymbols_Pal, .tag = PALTAG_REEL},
+ { .data = gSlotMachineReelTimePikachu_Pal, .tag = PALTAG_REEL_TIME_PIKACHU},
+ { .data = gSlotMachineReelTimeMisc_Pal, .tag = PALTAG_REEL_TIME_MISC},
+ { .data = gSlotMachineReelTimeMachine_Pal, .tag = PALTAG_REEL_TIME_MACHINE},
+ { .data = gSlotMachineMisc_Pal, .tag = PALTAG_MISC},
+ { .data = gSlotMachineReelTimeExplosion_Pal, .tag = PALTAG_EXPLOSION},
+ { .data = gSlotMachineDigitalDisplay_Pal, .tag = PALTAG_DIG_DISPLAY},
+ { .data = gSlotMachineMisc_Pal, .tag = PALTAG_PIKA_AURA},
{}
};
-static const u32 gReelTimeGfx[] = INCBIN_U32("graphics/slot_machine/reel_time_gfx.4bpp.lz");
-static const u16 gReelTimeWindowTilemap[] = INCBIN_U16("graphics/slot_machine/85A96E0.bin");
-static const u16 gUnknown_085A9898[] = {0};
+static const u32 sReelTimeGfx[] = INCBIN_U32("graphics/slot_machine/reel_time_gfx.4bpp.lz"); // reel_time_machine and reel_time_pikachu
+static const u16 sReelTimeWindow_Tilemap[] = INCBIN_U16("graphics/slot_machine/reel_time_window.bin");
+static const u16 sEmptyTilemap[] = {0};
diff --git a/src/sound.c b/src/sound.c
index dba4354df..ee1753bb3 100644
--- a/src/sound.c
+++ b/src/sound.c
@@ -41,24 +41,24 @@ static void Task_DuckBGMForPokemonCry(u8 taskId);
static void RestoreBGMVolumeAfterPokemonCry(void);
static const struct Fanfare sFanfares[] = {
- { MUS_FANFA1, 80 },
- { MUS_FANFA4, 160 },
- { MUS_FANFA5, 220 },
- { MUS_ME_WAZA, 220 },
- { MUS_ME_ASA, 160 },
- { MUS_ME_BACHI, 340 },
- { MUS_ME_WASURE, 180 },
- { MUS_ME_KINOMI, 120 },
- { MUS_ME_TAMA, 710 },
- { MUS_ME_B_BIG, 250 },
- { MUS_ME_B_SMALL, 150 },
- { MUS_ME_ZANNEN, 160 },
- { MUS_RG_POKEFUE, 450 },
- { MUS_RG_FAN5, 170 },
- { MUS_RG_FAN2, 196 },
- { MUS_ME_POINTGET, 313 },
- { MUS_ME_SYMBOLGET, 318 },
- { MUS_ME_TORE_EYE, 135 },
+ { MUS_LEVEL_UP, 80 },
+ { MUS_OBTAIN_ITEM, 160 },
+ { MUS_EVOLVED, 220 },
+ { MUS_OBTAIN_TMHM, 220 },
+ { MUS_HEAL, 160 },
+ { MUS_OBTAIN_BADGE, 340 },
+ { MUS_MOVE_DELETED, 180 },
+ { MUS_OBTAIN_BERRY, 120 },
+ { MUS_AWAKEN_LEGEND, 710 },
+ { MUS_SLOTS_JACKPOT, 250 },
+ { MUS_SLOTS_WIN, 150 },
+ { MUS_TOO_BAD, 160 },
+ { MUS_RG_POKE_FLUTE, 450 },
+ { MUS_RG_OBTAIN_KEY_ITEM, 170 },
+ { MUS_RG_DEX_RATING, 196 },
+ { MUS_OBTAIN_B_POINTS, 313 },
+ { MUS_OBTAIN_SYMBOL, 318 },
+ { MUS_REGISTER_MATCH_CALL, 135 },
};
#define CRY_VOLUME 120 // was 125 in R/S
diff --git a/src/start_menu.c b/src/start_menu.c
index 4b6fce57b..f470a58b2 100644
--- a/src/start_menu.c
+++ b/src/start_menu.c
@@ -43,7 +43,6 @@
#include "trainer_card.h"
#include "window.h"
#include "constants/songs.h"
-#include "rom_8011DC0.h"
#include "union_room.h"
#include "constants/rgb.h"
@@ -133,8 +132,8 @@ static u8 BattlePyramidRetireInputCallback(void);
// Task callbacks
static void StartMenuTask(u8 taskId);
static void SaveGameTask(u8 taskId);
-static void sub_80A0550(u8 taskId);
-static void sub_80A08A4(u8 taskId);
+static void Task_SaveAfterLinkBattle(u8 taskId);
+static void Task_WaitForBattleTowerLinkSave(u8 taskId);
static bool8 FieldCB_ReturnToFieldStartMenu(void);
static const struct WindowTemplate sSafariBallsWindowTemplate = {0, 1, 1, 9, 4, 0xF, 8};
@@ -219,8 +218,8 @@ static bool8 SaveSuccesTimer(void);
static bool8 SaveErrorTimer(void);
static void InitBattlePyramidRetire(void);
static void sub_80A03D8(void);
-static bool32 sub_80A03E4(u8 *par1);
-static void sub_80A0540(void);
+static bool32 InitSaveWindowAfterLinkBattle(u8 *par1);
+static void CB2_SaveAfterLinkBattle(void);
static void ShowSaveInfoWindow(void);
static void RemoveSaveInfoWindow(void);
static void HideStartMenuWindow(void);
@@ -463,7 +462,7 @@ static bool32 InitStartMenuStep(void)
sInitStartMenuData[0]++;
break;
case 4:
- if (PrintStartMenuActions(&sInitStartMenuData[1], 2))
+ if (PrintStartMenuActions((s8 *)&sInitStartMenuData[1], 2))
sInitStartMenuData[0]++;
break;
case 5:
@@ -525,7 +524,7 @@ void Task_ShowStartMenu(u8 taskId)
{
case 0:
if (InUnionRoom() == TRUE)
- var_800D_set_xB();
+ SetUsingUnionRoomStartMenu();
gMenuCallback = HandleStartMenuInput;
task->data[0]++;
@@ -1159,9 +1158,9 @@ static void sub_80A03D8(void)
TransferPlttBuffer();
}
-static bool32 sub_80A03E4(u8 *par1)
+static bool32 InitSaveWindowAfterLinkBattle(u8 *state)
{
- switch (*par1)
+ switch (*state)
{
case 0:
SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_0);
@@ -1193,43 +1192,43 @@ static bool32 sub_80A03E4(u8 *par1)
return TRUE;
}
- (*par1)++;
+ (*state)++;
return FALSE;
}
-void sub_80A0514(void)
+void CB2_SetUpSaveAfterLinkBattle(void)
{
- if (sub_80A03E4(&gMain.state))
+ if (InitSaveWindowAfterLinkBattle(&gMain.state))
{
- CreateTask(sub_80A0550, 0x50);
- SetMainCallback2(sub_80A0540);
+ CreateTask(Task_SaveAfterLinkBattle, 0x50);
+ SetMainCallback2(CB2_SaveAfterLinkBattle);
}
}
-static void sub_80A0540(void)
+static void CB2_SaveAfterLinkBattle(void)
{
RunTasks();
UpdatePaletteFade();
}
-static void sub_80A0550(u8 taskId)
+static void Task_SaveAfterLinkBattle(u8 taskId)
{
- s16 *step = gTasks[taskId].data;
+ s16 *state = gTasks[taskId].data;
if (!gPaletteFade.active)
{
- switch (*step)
+ switch (*state)
{
case 0:
FillWindowPixelBuffer(0, PIXEL_FILL(1));
AddTextPrinterParameterized2(0,
1,
gText_SavingDontTurnOffPower,
- 255,
+ TEXT_SPEED_FF,
NULL,
- 2,
- 1,
- 3);
+ TEXT_COLOR_DARK_GREY,
+ TEXT_COLOR_WHITE,
+ TEXT_COLOR_LIGHT_GREY);
DrawTextBorderOuter(0, 8, 14);
PutWindowTilemap(0);
CopyWindowToVram(0, 3);
@@ -1237,37 +1236,37 @@ static void sub_80A0550(u8 taskId)
if (gWirelessCommType != 0 && InUnionRoom())
{
- if (sub_800A07C())
+ if (Link_AnyPartnersPlayingFRLG_JP())
{
- *step = 1;
+ *state = 1;
}
else
{
- *step = 5;
+ *state = 5;
}
}
else
{
gSoftResetDisabled = 1;
- *step = 1;
+ *state = 1;
}
break;
case 1:
SetContinueGameWarpStatusToDynamicWarp();
FullSaveGame();
- *step = 2;
+ *state = 2;
break;
case 2:
if (CheckSaveFile())
{
ClearContinueGameWarpStatus2();
- *step = 3;
+ *state = 3;
gSoftResetDisabled = 0;
}
break;
case 3:
BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK);
- *step = 4;
+ *state = 4;
break;
case 4:
FreeAllWindowBuffers();
@@ -1275,13 +1274,13 @@ static void sub_80A0550(u8 taskId)
DestroyTask(taskId);
break;
case 5:
- CreateTask(sub_8153688, 0x5);
- *step = 6;
+ CreateTask(Task_LinkSave, 5);
+ *state = 6;
break;
case 6:
- if (!FuncIsActiveTask(sub_8153688))
+ if (!FuncIsActiveTask(Task_LinkSave))
{
- *step = 3;
+ *state = 3;
}
break;
}
@@ -1357,22 +1356,26 @@ static void RemoveSaveInfoWindow(void)
RemoveWindow(sSaveInfoWindowId);
}
-static void sub_80A08A4(u8 taskId)
+static void Task_WaitForBattleTowerLinkSave(u8 taskId)
{
- if (!FuncIsActiveTask(sub_8153688))
+ if (!FuncIsActiveTask(Task_LinkSave))
{
DestroyTask(taskId);
EnableBothScriptContexts();
}
}
-void sub_80A08CC(void)
+#define tPartialSave data[2]
+
+void SaveForBattleTowerLink(void)
{
- u8 taskId = CreateTask(sub_8153688, 0x5);
- gTasks[taskId].data[2] = 1;
- gTasks[CreateTask(sub_80A08A4, 0x6)].data[1] = taskId;
+ u8 taskId = CreateTask(Task_LinkSave, 5);
+ gTasks[taskId].tPartialSave = TRUE;
+ gTasks[CreateTask(Task_WaitForBattleTowerLinkSave, 6)].data[1] = taskId;
}
+#undef tPartialSave
+
static void HideStartMenuWindow(void)
{
ClearStdWindowAndFrame(GetStartMenuWindowId(), TRUE);
diff --git a/src/starter_choose.c b/src/starter_choose.c
index 11b84a9e2..2585f3408 100644
--- a/src/starter_choose.c
+++ b/src/starter_choose.c
@@ -14,6 +14,7 @@
#include "sound.h"
#include "sprite.h"
#include "starter_choose.h"
+#include "strings.h"
#include "task.h"
#include "text.h"
#include "text_window.h"
@@ -27,54 +28,45 @@
#define STARTER_MON_COUNT 3
// Position of the sprite of the selected starter Pokemon
-#define STARTER_PKMN_POS_X 120
+#define STARTER_PKMN_POS_X (DISPLAY_WIDTH / 2)
#define STARTER_PKMN_POS_Y 64
-// text
-extern const u8 gText_BirchInTrouble[];
-extern const u8 gText_ConfirmStarterChoice[];
-
-// this file's functions
-static void MainCallback2_StarterChoose(void);
-static void sub_8134604(void);
-static void Task_StarterChoose1(u8 taskId);
-static void Task_StarterChoose2(u8 taskId);
-static void Task_StarterChoose3(u8 taskId);
-static void Task_StarterChoose4(u8 taskId);
-static void Task_StarterChoose5(u8 taskId);
-static void Task_StarterChoose6(u8 taskId);
+#define TAG_POKEBALL_SELECT 0x1000
+#define TAG_STARTER_CIRCLE 0x1001
+
+static void CB2_StarterChoose(void);
+static void ClearStarterLabel(void);
+static void Task_StarterChoose(u8 taskId);
+static void Task_HandleStarterChooseInput(u8 taskId);
+static void Task_WaitForStarterSprite(u8 taskId);
+static void Task_AskConfirmStarter(u8 taskId);
+static void Task_HandleConfirmStarterInput(u8 taskId);
+static void Task_DeclineStarter(u8 taskId);
static void Task_MoveStarterChooseCursor(u8 taskId);
-static void sub_8134668(u8 taskId);
+static void Task_CreateStarterLabel(u8 taskId);
static void CreateStarterPokemonLabel(u8 selection);
static u8 CreatePokemonFrontSprite(u16 species, u8 x, u8 y);
-void sub_81346DC(struct Sprite *sprite);
-void sub_813473C(struct Sprite *sprite);
-void StarterPokemonSpriteCallback(struct Sprite *sprite);
+static void SpriteCB_SelectionHand(struct Sprite *sprite);
+static void SpriteCB_Pokeball(struct Sprite *sprite);
+static void SpriteCB_StarterPokemon(struct Sprite *sprite);
-static u16 sStarterChooseWindowId;
+static u16 sStarterLabelWindowId;
-// .rodata
const u16 gBirchBagGrassPal[][16] =
{
INCBIN_U16("graphics/misc/birch_bag.gbapal"),
INCBIN_U16("graphics/misc/birch_grass.gbapal"),
};
-const u16 gBirchBallarrow_Pal[] = INCBIN_U16("graphics/misc/birch_ballarrow.gbapal");
-
-const u16 gBirchCircle_Pal[] = INCBIN_U16("graphics/misc/birch_circle.gbapal");
-
+static const u16 sPokeballSelection_Pal[] = INCBIN_U16("graphics/misc/pokeball_selection.gbapal");
+static const u16 sStarterCircle_Pal[] = INCBIN_U16("graphics/misc/starter_circle.gbapal");
const u32 gBirchBagTilemap[] = INCBIN_U32("graphics/misc/birch_bag_map.bin.lz");
-
const u32 gBirchGrassTilemap[] = INCBIN_U32("graphics/misc/birch_grass_map.bin.lz");
+const u32 gBirchHelpGfx[] = INCBIN_U32("graphics/misc/birch_help.4bpp.lz"); // Birch bag and grass combined
+const u32 gPokeballSelection_Gfx[] = INCBIN_U32("graphics/misc/pokeball_selection.4bpp.lz");
+static const u32 sStarterCircle_Gfx[] = INCBIN_U32("graphics/misc/starter_circle.4bpp.lz");
-const u32 gBirchHelpGfx[] = INCBIN_U32("graphics/misc/birch_help.4bpp.lz");
-
-const u32 gUnknown_085B18AC[] = INCBIN_U32("graphics/misc/birch_ballarrow.4bpp.lz");
-
-const u32 gUnknown_085B1BCC[] = INCBIN_U32("graphics/misc/birch_circle.4bpp.lz");
-
-static const struct WindowTemplate gUnknown_085B1DCC[] =
+static const struct WindowTemplate sWindowTemplates[] =
{
{
.bg = 0,
@@ -88,7 +80,7 @@ static const struct WindowTemplate gUnknown_085B1DCC[] =
DUMMY_WIN_TEMPLATE,
};
-static const struct WindowTemplate gUnknown_085B1DDC =
+static const struct WindowTemplate sWindowTemplate_ConfirmStarter =
{
.bg = 0,
.tilemapLeft = 24,
@@ -99,7 +91,7 @@ static const struct WindowTemplate gUnknown_085B1DDC =
.baseBlock = 0x0260
};
-static const struct WindowTemplate gUnknown_085B1DE4 =
+static const struct WindowTemplate sWindowTemplate_StarterLabel =
{
.bg = 0,
.tilemapLeft = 0,
@@ -117,7 +109,7 @@ static const u8 sPokeballCoords[STARTER_MON_COUNT][2] =
{180, 64},
};
-static const u8 sStarterLabelCoords[][2] =
+static const u8 sStarterLabelCoords[STARTER_MON_COUNT][2] =
{
{0, 9},
{16, 10},
@@ -131,7 +123,7 @@ static const u16 sStarterMon[STARTER_MON_COUNT] =
SPECIES_MUDKIP,
};
-static const struct BgTemplate gUnknown_085B1E00[3] =
+static const struct BgTemplate sBgTemplates[3] =
{
{
.bg = 0,
@@ -164,7 +156,7 @@ static const struct BgTemplate gUnknown_085B1E00[3] =
static const u8 sTextColors[] = {TEXT_COLOR_TRANSPARENT, TEXT_COLOR_WHITE, TEXT_COLOR_LIGHT_GREY};
-static const struct OamData gOamData_85B1E10 =
+static const struct OamData sOam_Hand =
{
.y = 160,
.affineMode = ST_OAM_AFFINE_OFF,
@@ -181,7 +173,7 @@ static const struct OamData gOamData_85B1E10 =
.affineParam = 0,
};
-static const struct OamData gOamData_85B1E18 =
+static const struct OamData sOam_Pokeball =
{
.y = 160,
.affineMode = ST_OAM_AFFINE_OFF,
@@ -198,7 +190,7 @@ static const struct OamData gOamData_85B1E18 =
.affineParam = 0,
};
-static const struct OamData gOamData_85B1E20 =
+static const struct OamData sOam_StarterCircle =
{
.y = 160,
.affineMode = ST_OAM_AFFINE_DOUBLE,
@@ -222,19 +214,19 @@ static const u8 sCursorCoords[][2] =
{180, 32},
};
-static const union AnimCmd gSpriteAnim_85B1E30[] =
+static const union AnimCmd sAnim_Hand[] =
{
ANIMCMD_FRAME(48, 30),
ANIMCMD_END,
};
-static const union AnimCmd gSpriteAnim_85B1E38[] =
+static const union AnimCmd sAnim_Pokeball_Still[] =
{
ANIMCMD_FRAME(0, 30),
ANIMCMD_END,
};
-static const union AnimCmd gSpriteAnim_85B1E40[] =
+static const union AnimCmd sAnim_Pokeball_Moving[] =
{
ANIMCMD_FRAME(16, 4),
ANIMCMD_FRAME(0, 4),
@@ -256,109 +248,109 @@ static const union AnimCmd gSpriteAnim_85B1E40[] =
ANIMCMD_JUMP(0),
};
-static const union AnimCmd gSpriteAnim_85B1E88[] =
+static const union AnimCmd sAnim_StarterCircle[] =
{
ANIMCMD_FRAME(0, 8),
ANIMCMD_END,
};
-static const union AnimCmd * const gSpriteAnimTable_85B1E90[] =
+static const union AnimCmd * const sAnims_Hand[] =
{
- gSpriteAnim_85B1E30,
+ sAnim_Hand,
};
-static const union AnimCmd * const gSpriteAnimTable_85B1E94[] =
+static const union AnimCmd * const sAnims_Pokeball[] =
{
- gSpriteAnim_85B1E38,
- gSpriteAnim_85B1E40,
+ sAnim_Pokeball_Still,
+ sAnim_Pokeball_Moving,
};
-static const union AnimCmd * const gSpriteAnimTable_85B1E9C[] =
+static const union AnimCmd * const sAnims_StarterCircle[] =
{
- gSpriteAnim_85B1E88,
+ sAnim_StarterCircle,
};
-static const union AffineAnimCmd gSpriteAffineAnim_85B1EA0[] =
+static const union AffineAnimCmd sAffineAnim_StarterPokemon[] =
{
AFFINEANIMCMD_FRAME(16, 16, 0, 0),
AFFINEANIMCMD_FRAME(16, 16, 0, 15),
AFFINEANIMCMD_END,
};
-static const union AffineAnimCmd gSpriteAffineAnim_85B1EB8[] =
+static const union AffineAnimCmd sAffineAnim_StarterCircle[] =
{
AFFINEANIMCMD_FRAME(20, 20, 0, 0),
AFFINEANIMCMD_FRAME(20, 20, 0, 15),
AFFINEANIMCMD_END,
};
-static const union AffineAnimCmd * const gUnknown_085B1ED0 = {gSpriteAffineAnim_85B1EA0};
-static const union AffineAnimCmd * const gSpriteAffineAnimTable_85B1ED4[] = {gSpriteAffineAnim_85B1EB8};
+static const union AffineAnimCmd * const sAffineAnims_StarterPokemon = {sAffineAnim_StarterPokemon};
+static const union AffineAnimCmd * const sAffineAnims_StarterCircle[] = {sAffineAnim_StarterCircle};
-static const struct CompressedSpriteSheet gUnknown_085B1ED8[] =
+static const struct CompressedSpriteSheet sSpriteSheet_PokeballSelect[] =
{
{
- .data = gUnknown_085B18AC,
+ .data = gPokeballSelection_Gfx,
.size = 0x0800,
- .tag = 0x1000
+ .tag = TAG_POKEBALL_SELECT
},
{}
};
-static const struct CompressedSpriteSheet gUnknown_085B1EE8[] =
+static const struct CompressedSpriteSheet sSpriteSheet_StarterCircle[] =
{
{
- .data = gUnknown_085B1BCC,
+ .data = sStarterCircle_Gfx,
.size = 0x0800,
- .tag = 0x1001
+ .tag = TAG_STARTER_CIRCLE
},
{}
};
-static const struct SpritePalette gUnknown_085B1EF8[] =
+static const struct SpritePalette sSpritePalettes_StarterChoose[] =
{
{
- .data = gBirchBallarrow_Pal,
- .tag = 0x1000
+ .data = sPokeballSelection_Pal,
+ .tag = TAG_POKEBALL_SELECT
},
{
- .data = gBirchCircle_Pal,
- .tag = 0x1001
+ .data = sStarterCircle_Pal,
+ .tag = TAG_STARTER_CIRCLE
},
{},
};
static const struct SpriteTemplate sSpriteTemplate_Hand =
{
- .tileTag = 0x1000,
- .paletteTag = 0x1000,
- .oam = &gOamData_85B1E10,
- .anims = gSpriteAnimTable_85B1E90,
+ .tileTag = TAG_POKEBALL_SELECT,
+ .paletteTag = TAG_POKEBALL_SELECT,
+ .oam = &sOam_Hand,
+ .anims = sAnims_Hand,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_81346DC
+ .callback = SpriteCB_SelectionHand
};
-static const struct SpriteTemplate sSpriteTemplate_PokeBall =
+static const struct SpriteTemplate sSpriteTemplate_Pokeball =
{
- .tileTag = 0x1000,
- .paletteTag = 0x1000,
- .oam = &gOamData_85B1E18,
- .anims = gSpriteAnimTable_85B1E94,
+ .tileTag = TAG_POKEBALL_SELECT,
+ .paletteTag = TAG_POKEBALL_SELECT,
+ .oam = &sOam_Pokeball,
+ .anims = sAnims_Pokeball,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_813473C
+ .callback = SpriteCB_Pokeball
};
-static const struct SpriteTemplate gUnknown_085B1F40 =
+static const struct SpriteTemplate sSpriteTemplate_StarterCircle =
{
- .tileTag = 0x1001,
- .paletteTag = 0x1001,
- .oam = &gOamData_85B1E20,
- .anims = gSpriteAnimTable_85B1E9C,
+ .tileTag = TAG_STARTER_CIRCLE,
+ .paletteTag = TAG_STARTER_CIRCLE,
+ .oam = &sOam_StarterCircle,
+ .anims = sAnims_StarterCircle,
.images = NULL,
- .affineAnims = gSpriteAffineAnimTable_85B1ED4,
- .callback = StarterPokemonSpriteCallback
+ .affineAnims = sAffineAnims_StarterCircle,
+ .callback = SpriteCB_StarterPokemon
};
// .text
@@ -376,10 +368,15 @@ static void VblankCB_StarterChoose(void)
TransferPlttBuffer();
}
+// Data for Task_StarterChoose
#define tStarterSelection data[0]
#define tPkmnSpriteId data[1]
#define tCircleSpriteId data[2]
+// Data for sSpriteTemplate_Pokeball
+#define sTaskId data[0]
+#define sBallId data[1]
+
void CB2_ChooseStarter(void)
{
u16 savedIme;
@@ -412,12 +409,12 @@ void CB2_ChooseStarter(void)
LZ77UnCompVram(gBirchGrassTilemap, (void *)(BG_SCREEN_ADDR(7)));
ResetBgsAndClearDma3BusyFlags(0);
- InitBgsFromTemplates(0, gUnknown_085B1E00, ARRAY_COUNT(gUnknown_085B1E00));
- InitWindows(gUnknown_085B1DCC);
+ InitBgsFromTemplates(0, sBgTemplates, ARRAY_COUNT(sBgTemplates));
+ InitWindows(sWindowTemplates);
DeactivateAllTextPrinters();
LoadUserWindowBorderGfx(0, 0x2A8, 0xD0);
- clear_scheduled_bg_copies_to_vram();
+ ClearScheduledBgCopiesToVram();
ScanlineEffect_Stop();
ResetTasks();
ResetSpriteData();
@@ -427,17 +424,17 @@ void CB2_ChooseStarter(void)
LoadPalette(GetOverworldTextboxPalettePtr(), 0xE0, 0x20);
LoadPalette(gBirchBagGrassPal, 0, 0x40);
- LoadCompressedSpriteSheet(&gUnknown_085B1ED8[0]);
- LoadCompressedSpriteSheet(&gUnknown_085B1EE8[0]);
- LoadSpritePalettes(gUnknown_085B1EF8);
+ LoadCompressedSpriteSheet(&sSpriteSheet_PokeballSelect[0]);
+ LoadCompressedSpriteSheet(&sSpriteSheet_StarterCircle[0]);
+ LoadSpritePalettes(sSpritePalettes_StarterChoose);
BeginNormalPaletteFade(0xFFFFFFFF, 0, 0x10, 0, RGB_BLACK);
EnableInterrupts(DISPSTAT_VBLANK);
SetVBlankCallback(VblankCB_StarterChoose);
- SetMainCallback2(MainCallback2_StarterChoose);
+ SetMainCallback2(CB2_StarterChoose);
- SetGpuReg(REG_OFFSET_WININ, 0x3F);
- SetGpuReg(REG_OFFSET_WINOUT, 0x1F);
+ SetGpuReg(REG_OFFSET_WININ, WININ_WIN0_BG_ALL | WININ_WIN0_OBJ | WININ_WIN0_CLR);
+ SetGpuReg(REG_OFFSET_WINOUT, WINOUT_WIN01_BG_ALL | WINOUT_WIN01_OBJ);
SetGpuReg(REG_OFFSET_WIN0H, 0);
SetGpuReg(REG_OFFSET_WIN0V, 0);
SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT1_BG1 | BLDCNT_TGT1_BG2 | BLDCNT_TGT1_BG3 | BLDCNT_TGT1_OBJ | BLDCNT_TGT1_BD | BLDCNT_EFFECT_DARKEN);
@@ -449,7 +446,7 @@ void CB2_ChooseStarter(void)
ShowBg(2);
ShowBg(3);
- taskId = CreateTask(Task_StarterChoose1, 0);
+ taskId = CreateTask(Task_StarterChoose, 0);
gTasks[taskId].tStarterSelection = 1;
// Create hand sprite
@@ -457,95 +454,95 @@ void CB2_ChooseStarter(void)
gSprites[spriteId].data[0] = taskId;
// Create three Pokeball sprites
- spriteId = CreateSprite(&sSpriteTemplate_PokeBall, sPokeballCoords[0][0], sPokeballCoords[0][1], 2);
- gSprites[spriteId].data[0] = taskId;
- gSprites[spriteId].data[1] = 0;
+ spriteId = CreateSprite(&sSpriteTemplate_Pokeball, sPokeballCoords[0][0], sPokeballCoords[0][1], 2);
+ gSprites[spriteId].sTaskId = taskId;
+ gSprites[spriteId].sBallId = 0;
- spriteId = CreateSprite(&sSpriteTemplate_PokeBall, sPokeballCoords[1][0], sPokeballCoords[1][1], 2);
- gSprites[spriteId].data[0] = taskId;
- gSprites[spriteId].data[1] = 1;
+ spriteId = CreateSprite(&sSpriteTemplate_Pokeball, sPokeballCoords[1][0], sPokeballCoords[1][1], 2);
+ gSprites[spriteId].sTaskId = taskId;
+ gSprites[spriteId].sBallId = 1;
- spriteId = CreateSprite(&sSpriteTemplate_PokeBall, sPokeballCoords[2][0], sPokeballCoords[2][1], 2);
- gSprites[spriteId].data[0] = taskId;
- gSprites[spriteId].data[1] = 2;
+ spriteId = CreateSprite(&sSpriteTemplate_Pokeball, sPokeballCoords[2][0], sPokeballCoords[2][1], 2);
+ gSprites[spriteId].sTaskId = taskId;
+ gSprites[spriteId].sBallId = 2;
- sStarterChooseWindowId = 0xFF;
+ sStarterLabelWindowId = 0xFF;
}
-static void MainCallback2_StarterChoose(void)
+static void CB2_StarterChoose(void)
{
RunTasks();
AnimateSprites();
BuildOamBuffer();
- do_scheduled_bg_tilemap_copies_to_vram();
+ DoScheduledBgTilemapCopiesToVram();
UpdatePaletteFade();
}
-static void Task_StarterChoose1(u8 taskId)
+static void Task_StarterChoose(u8 taskId)
{
CreateStarterPokemonLabel(gTasks[taskId].tStarterSelection);
DrawStdFrameWithCustomTileAndPalette(0, FALSE, 0x2A8, 0xD);
AddTextPrinterParameterized(0, 1, gText_BirchInTrouble, 0, 1, 0, NULL);
PutWindowTilemap(0);
- schedule_bg_copy_tilemap_to_vram(0);
- gTasks[taskId].func = Task_StarterChoose2;
+ ScheduleBgCopyTilemapToVram(0);
+ gTasks[taskId].func = Task_HandleStarterChooseInput;
}
-static void Task_StarterChoose2(u8 taskId)
+static void Task_HandleStarterChooseInput(u8 taskId)
{
u8 selection = gTasks[taskId].tStarterSelection;
- if (gMain.newKeys & A_BUTTON)
+ if (JOY_NEW(A_BUTTON))
{
u8 spriteId;
- sub_8134604();
+ ClearStarterLabel();
// Create white circle background
- spriteId = CreateSprite(&gUnknown_085B1F40, sPokeballCoords[selection][0], sPokeballCoords[selection][1], 1);
+ spriteId = CreateSprite(&sSpriteTemplate_StarterCircle, sPokeballCoords[selection][0], sPokeballCoords[selection][1], 1);
gTasks[taskId].tCircleSpriteId = spriteId;
// Create Pokemon sprite
spriteId = CreatePokemonFrontSprite(GetStarterPokemon(gTasks[taskId].tStarterSelection), sPokeballCoords[selection][0], sPokeballCoords[selection][1]);
- gSprites[spriteId].affineAnims = &gUnknown_085B1ED0;
- gSprites[spriteId].callback = StarterPokemonSpriteCallback;
+ gSprites[spriteId].affineAnims = &sAffineAnims_StarterPokemon;
+ gSprites[spriteId].callback = SpriteCB_StarterPokemon;
gTasks[taskId].tPkmnSpriteId = spriteId;
- gTasks[taskId].func = Task_StarterChoose3;
+ gTasks[taskId].func = Task_WaitForStarterSprite;
}
- else if ((gMain.newKeys & DPAD_LEFT) && selection > 0)
+ else if (JOY_NEW(DPAD_LEFT) && selection > 0)
{
gTasks[taskId].tStarterSelection--;
gTasks[taskId].func = Task_MoveStarterChooseCursor;
}
- else if ((gMain.newKeys & DPAD_RIGHT) && selection < (STARTER_MON_COUNT - 1))
+ else if (JOY_NEW(DPAD_RIGHT) && selection < STARTER_MON_COUNT - 1)
{
gTasks[taskId].tStarterSelection++;
gTasks[taskId].func = Task_MoveStarterChooseCursor;
}
}
-static void Task_StarterChoose3(u8 taskId)
+static void Task_WaitForStarterSprite(u8 taskId)
{
if (gSprites[gTasks[taskId].tCircleSpriteId].affineAnimEnded &&
- gSprites[gTasks[taskId].tCircleSpriteId].pos1.x == STARTER_PKMN_POS_X &&
- gSprites[gTasks[taskId].tCircleSpriteId].pos1.y == STARTER_PKMN_POS_Y)
+ gSprites[gTasks[taskId].tCircleSpriteId].pos1.x == STARTER_PKMN_POS_X &&
+ gSprites[gTasks[taskId].tCircleSpriteId].pos1.y == STARTER_PKMN_POS_Y)
{
- gTasks[taskId].func = Task_StarterChoose4;
+ gTasks[taskId].func = Task_AskConfirmStarter;
}
}
-static void Task_StarterChoose4(u8 taskId)
+static void Task_AskConfirmStarter(u8 taskId)
{
PlayCry1(GetStarterPokemon(gTasks[taskId].tStarterSelection), 0);
FillWindowPixelBuffer(0, PIXEL_FILL(1));
AddTextPrinterParameterized(0, 1, gText_ConfirmStarterChoice, 0, 1, 0, NULL);
- schedule_bg_copy_tilemap_to_vram(0);
- CreateYesNoMenu(&gUnknown_085B1DDC, 0x2A8, 0xD, 0);
- gTasks[taskId].func = Task_StarterChoose5;
+ ScheduleBgCopyTilemapToVram(0);
+ CreateYesNoMenu(&sWindowTemplate_ConfirmStarter, 0x2A8, 0xD, 0);
+ gTasks[taskId].func = Task_HandleConfirmStarterInput;
}
-static void Task_StarterChoose5(u8 taskId)
+static void Task_HandleConfirmStarterInput(u8 taskId)
{
u8 spriteId;
@@ -558,7 +555,7 @@ static void Task_StarterChoose5(u8 taskId)
SetMainCallback2(gMain.savedCallback);
break;
case 1: // NO
- case -1: // B button
+ case MENU_B_PRESSED:
PlaySE(SE_SELECT);
spriteId = gTasks[taskId].tPkmnSpriteId;
FreeOamMatrix(gSprites[spriteId].oam.matrixNum);
@@ -567,14 +564,14 @@ static void Task_StarterChoose5(u8 taskId)
spriteId = gTasks[taskId].tCircleSpriteId;
FreeOamMatrix(gSprites[spriteId].oam.matrixNum);
DestroySprite(&gSprites[spriteId]);
- gTasks[taskId].func = Task_StarterChoose6;
+ gTasks[taskId].func = Task_DeclineStarter;
break;
}
}
-static void Task_StarterChoose6(u8 taskId)
+static void Task_DeclineStarter(u8 taskId)
{
- gTasks[taskId].func = Task_StarterChoose1;
+ gTasks[taskId].func = Task_StarterChoose;
}
static void CreateStarterPokemonLabel(u8 selection)
@@ -589,21 +586,21 @@ static void CreateStarterPokemonLabel(u8 selection)
CopyMonCategoryText(SpeciesToNationalPokedexNum(species), categoryText);
speciesName = gSpeciesNames[species];
- winTemplate = gUnknown_085B1DE4;
+ winTemplate = sWindowTemplate_StarterLabel;
winTemplate.tilemapLeft = sStarterLabelCoords[selection][0];
winTemplate.tilemapTop = sStarterLabelCoords[selection][1];
- sStarterChooseWindowId = AddWindow(&winTemplate);
- FillWindowPixelBuffer(sStarterChooseWindowId, PIXEL_FILL(0));
+ sStarterLabelWindowId = AddWindow(&winTemplate);
+ FillWindowPixelBuffer(sStarterLabelWindowId, PIXEL_FILL(0));
width = GetStringCenterAlignXOffset(7, categoryText, 0x68);
- AddTextPrinterParameterized3(sStarterChooseWindowId, 7, width, 1, sTextColors, 0, categoryText);
+ AddTextPrinterParameterized3(sStarterLabelWindowId, 7, width, 1, sTextColors, 0, categoryText);
width = GetStringCenterAlignXOffset(1, speciesName, 0x68);
- AddTextPrinterParameterized3(sStarterChooseWindowId, 1, width, 0x11, sTextColors, 0, speciesName);
+ AddTextPrinterParameterized3(sStarterLabelWindowId, 1, width, 17, sTextColors, 0, speciesName);
- PutWindowTilemap(sStarterChooseWindowId);
- schedule_bg_copy_tilemap_to_vram(0);
+ PutWindowTilemap(sStarterLabelWindowId);
+ ScheduleBgCopyTilemapToVram(0);
labelLeft = sStarterLabelCoords[selection][0] * 8 - 4;
labelRight = (sStarterLabelCoords[selection][0] + 13) * 8 + 4;
@@ -613,27 +610,27 @@ static void CreateStarterPokemonLabel(u8 selection)
SetGpuReg(REG_OFFSET_WIN0V, WIN_RANGE(labelTop, labelBottom));
}
-static void sub_8134604(void)
+static void ClearStarterLabel(void)
{
- FillWindowPixelBuffer(sStarterChooseWindowId, PIXEL_FILL(0));
- ClearWindowTilemap(sStarterChooseWindowId);
- RemoveWindow(sStarterChooseWindowId);
- sStarterChooseWindowId = 0xFF;
+ FillWindowPixelBuffer(sStarterLabelWindowId, PIXEL_FILL(0));
+ ClearWindowTilemap(sStarterLabelWindowId);
+ RemoveWindow(sStarterLabelWindowId);
+ sStarterLabelWindowId = 0xFF;
SetGpuReg(REG_OFFSET_WIN0H, 0);
SetGpuReg(REG_OFFSET_WIN0V, 0);
- schedule_bg_copy_tilemap_to_vram(0);
+ ScheduleBgCopyTilemapToVram(0);
}
static void Task_MoveStarterChooseCursor(u8 taskId)
{
- sub_8134604();
- gTasks[taskId].func = sub_8134668;
+ ClearStarterLabel();
+ gTasks[taskId].func = Task_CreateStarterLabel;
}
-static void sub_8134668(u8 taskId)
+static void Task_CreateStarterLabel(u8 taskId)
{
CreateStarterPokemonLabel(gTasks[taskId].tStarterSelection);
- gTasks[taskId].func = Task_StarterChoose2;
+ gTasks[taskId].func = Task_HandleStarterChooseInput;
}
static u8 CreatePokemonFrontSprite(u16 species, u8 x, u8 y)
@@ -645,25 +642,27 @@ static u8 CreatePokemonFrontSprite(u16 species, u8 x, u8 y)
return spriteId;
}
-void sub_81346DC(struct Sprite *sprite)
+static void SpriteCB_SelectionHand(struct Sprite *sprite)
{
+ // Float up and down above selected pokeball
sprite->pos1.x = sCursorCoords[gTasks[sprite->data[0]].tStarterSelection][0];
sprite->pos1.y = sCursorCoords[gTasks[sprite->data[0]].tStarterSelection][1];
sprite->pos2.y = Sin(sprite->data[1], 8);
sprite->data[1] = (u8)(sprite->data[1]) + 4;
}
-void sub_813473C(struct Sprite *sprite)
+static void SpriteCB_Pokeball(struct Sprite *sprite)
{
- if (gTasks[sprite->data[0]].tStarterSelection == sprite->data[1])
+ // Animate pokeball if currently selected
+ if (gTasks[sprite->sTaskId].tStarterSelection == sprite->sBallId)
StartSpriteAnimIfDifferent(sprite, 1);
else
StartSpriteAnimIfDifferent(sprite, 0);
}
-void StarterPokemonSpriteCallback(struct Sprite *sprite)
+static void SpriteCB_StarterPokemon(struct Sprite *sprite)
{
- //Move sprite to upper center of screen
+ // Move sprite to upper center of screen
if (sprite->pos1.x > STARTER_PKMN_POS_X)
sprite->pos1.x -= 4;
if (sprite->pos1.x < STARTER_PKMN_POS_X)
diff --git a/src/strings.c b/src/strings.c
index 3ca7f693f..fe5051d71 100644
--- a/src/strings.c
+++ b/src/strings.c
@@ -402,7 +402,7 @@ const u8 gText_PkmnNeedsToReplaceMove[] = _("{STR_VAR_1} wants to learn the\nmov
const u8 gText_StopLearningMove2[] = _("Stop trying to teach\n{STR_VAR_2}?");
const u8 gText_MoveNotLearned[] = _("{STR_VAR_1} did not learn the\nmove {STR_VAR_2}.{PAUSE_UNTIL_PRESS}");
const u8 gText_WhichMoveToForget[] = _("Which move should be forgotten?{PAUSE_UNTIL_PRESS}");
-const u8 gText_12PoofForgotMove[] = _("1, {PAUSE 15}2, and{PAUSE 15}… {PAUSE 15}… {PAUSE 15}… {PAUSE 15}{PLAY_SE 0x0038}Poof!\p{STR_VAR_1} forgot how to\nuse {STR_VAR_2}.\pAnd…{PAUSE_UNTIL_PRESS}");
+const u8 gText_12PoofForgotMove[] = _("1, {PAUSE 15}2, and{PAUSE 15}… {PAUSE 15}… {PAUSE 15}… {PAUSE 15}{PLAY_SE SE_BALL_BOUNCE_1}Poof!\p{STR_VAR_1} forgot how to\nuse {STR_VAR_2}.\pAnd…{PAUSE_UNTIL_PRESS}");
const u8 gText_PkmnAlreadyKnows[] = _("{STR_VAR_1} already knows\n{STR_VAR_2}.{PAUSE_UNTIL_PRESS}");
const u8 gText_PkmnHPRestoredByVar2[] = _("{STR_VAR_1}'s HP was restored\nby {STR_VAR_2} point(s).{PAUSE_UNTIL_PRESS}");
const u8 gText_PkmnCuredOfPoison[] = _("{STR_VAR_1} was cured of its\npoisoning.{PAUSE_UNTIL_PRESS}");
@@ -512,14 +512,14 @@ const u8 gText_EggWillTakeSomeTime[] = _("What will hatch from this?\nIt will ta
const u8 gText_EggWillHatchSoon[] = _("It moves occasionally.\nIt should hatch soon.");
const u8 gText_EggAboutToHatch[] = _("It's making sounds.\nIt's about to hatch!");
const u8 gText_HMMovesCantBeForgotten2[] = _("HM moves can't be\nforgotten now.");
-const u8 gText_XNatureMetAtYZ[] = _("{SPECIAL_F7 0x00}{SPECIAL_F7 0x02}{SPECIAL_F7 0x01}{SPECIAL_F7 0x05} nature,\nmet at {LV_2}{SPECIAL_F7 0x00}{SPECIAL_F7 0x03}{SPECIAL_F7 0x01},\n{SPECIAL_F7 0x00}{SPECIAL_F7 0x04}{SPECIAL_F7 0x01}.");
-const u8 gText_XNatureHatchedAtYZ[] = _("{SPECIAL_F7 0x00}{SPECIAL_F7 0x02}{SPECIAL_F7 0x01}{SPECIAL_F7 0x05} nature,\nhatched at {LV_2}{SPECIAL_F7 0x00}{SPECIAL_F7 0x03}{SPECIAL_F7 0x01},\n{SPECIAL_F7 0x00}{SPECIAL_F7 0x04}{SPECIAL_F7 0x01}.");
-const u8 gText_XNatureObtainedInTrade[] = _("{SPECIAL_F7 0x00}{SPECIAL_F7 0x02}{SPECIAL_F7 0x01}{SPECIAL_F7 0x05} nature,\nobtained in a trade.");
-const u8 gText_XNatureFatefulEncounter[] = _("{SPECIAL_F7 0x00}{SPECIAL_F7 0x02}{SPECIAL_F7 0x01}{SPECIAL_F7 0x05} nature,\nobtained in a fateful\nencounter at {LV_2}{SPECIAL_F7 0x00}{SPECIAL_F7 0x03}{SPECIAL_F7 0x01}.");
-const u8 gText_XNatureProbablyMetAt[] = _("{SPECIAL_F7 0x00}{SPECIAL_F7 0x02}{SPECIAL_F7 0x01}{SPECIAL_F7 0x05} nature,\nprobably met at {LV_2}{SPECIAL_F7 0x00}{SPECIAL_F7 0x03}{SPECIAL_F7 0x01},\n{SPECIAL_F7 0x00}{SPECIAL_F7 0x04}{SPECIAL_F7 0x01}.");
-const u8 gText_XNature[] = _("{SPECIAL_F7 0x00}{SPECIAL_F7 0x02}{SPECIAL_F7 0x01}{SPECIAL_F7 0x05} nature");
-const u8 gText_XNatureMetSomewhereAt[] = _("{SPECIAL_F7 0x00}{SPECIAL_F7 0x02}{SPECIAL_F7 0x01}{SPECIAL_F7 0x05} nature,\nmet somewhere at {LV_2}{SPECIAL_F7 0x00}{SPECIAL_F7 0x03}{SPECIAL_F7 0x01}.");
-const u8 gText_XNatureHatchedSomewhereAt[] = _("{SPECIAL_F7 0x00}{SPECIAL_F7 0x02}{SPECIAL_F7 0x01}{SPECIAL_F7 0x05} nature,\nhatched somewhere at {LV_2}{SPECIAL_F7 0x00}{SPECIAL_F7 0x03}{SPECIAL_F7 0x01}.");
+const u8 gText_XNatureMetAtYZ[] = _("{DYNAMIC 0}{DYNAMIC 2}{DYNAMIC 1}{DYNAMIC 5} nature,\nmet at {LV_2}{DYNAMIC 0}{DYNAMIC 3}{DYNAMIC 1},\n{DYNAMIC 0}{DYNAMIC 4}{DYNAMIC 1}.");
+const u8 gText_XNatureHatchedAtYZ[] = _("{DYNAMIC 0}{DYNAMIC 2}{DYNAMIC 1}{DYNAMIC 5} nature,\nhatched at {LV_2}{DYNAMIC 0}{DYNAMIC 3}{DYNAMIC 1},\n{DYNAMIC 0}{DYNAMIC 4}{DYNAMIC 1}.");
+const u8 gText_XNatureObtainedInTrade[] = _("{DYNAMIC 0}{DYNAMIC 2}{DYNAMIC 1}{DYNAMIC 5} nature,\nobtained in a trade.");
+const u8 gText_XNatureFatefulEncounter[] = _("{DYNAMIC 0}{DYNAMIC 2}{DYNAMIC 1}{DYNAMIC 5} nature,\nobtained in a fateful\nencounter at {LV_2}{DYNAMIC 0}{DYNAMIC 3}{DYNAMIC 1}.");
+const u8 gText_XNatureProbablyMetAt[] = _("{DYNAMIC 0}{DYNAMIC 2}{DYNAMIC 1}{DYNAMIC 5} nature,\nprobably met at {LV_2}{DYNAMIC 0}{DYNAMIC 3}{DYNAMIC 1},\n{DYNAMIC 0}{DYNAMIC 4}{DYNAMIC 1}.");
+const u8 gText_XNature[] = _("{DYNAMIC 0}{DYNAMIC 2}{DYNAMIC 1}{DYNAMIC 5} nature");
+const u8 gText_XNatureMetSomewhereAt[] = _("{DYNAMIC 0}{DYNAMIC 2}{DYNAMIC 1}{DYNAMIC 5} nature,\nmet somewhere at {LV_2}{DYNAMIC 0}{DYNAMIC 3}{DYNAMIC 1}.");
+const u8 gText_XNatureHatchedSomewhereAt[] = _("{DYNAMIC 0}{DYNAMIC 2}{DYNAMIC 1}{DYNAMIC 5} nature,\nhatched somewhere at {LV_2}{DYNAMIC 0}{DYNAMIC 3}{DYNAMIC 1}.");
const u8 gText_OddEggFoundByCouple[] = _("An odd POKéMON EGG found\nby the DAY CARE couple.");
const u8 gText_PeculiarEggNicePlace[] = _("A peculiar POKéMON EGG\nobtained at the nice place.");
const u8 gText_PeculiarEggTrade[] = _("A peculiar POKéMON EGG\nobtained in a trade.");
@@ -861,14 +861,14 @@ const u8 gText_ExitFromBox[] = _("Exit from the BOX?");
const u8 gText_WhatDoYouWantToDo[] = _("What do you want to do?");
const u8 gText_PleasePickATheme[] = _("Please pick a theme.");
const u8 gText_PickTheWallpaper[] = _("Pick the wallpaper.");
-const u8 gText_PkmnIsSelected[] = _("{SPECIAL_F7 0x00} is selected.");
+const u8 gText_PkmnIsSelected[] = _("{DYNAMIC 0} is selected.");
const u8 gText_JumpToWhichBox[] = _("Jump to which BOX?");
const u8 gText_DepositInWhichBox[] = _("Deposit in which BOX?");
-const u8 gText_PkmnWasDeposited[] = _("{SPECIAL_F7 0x00} was deposited.");
+const u8 gText_PkmnWasDeposited[] = _("{DYNAMIC 0} was deposited.");
const u8 gText_BoxIsFull2[] = _("The BOX is full.");
const u8 gText_ReleaseThisPokemon[] = _("Release this POKéMON?");
-const u8 gText_PkmnWasReleased[] = _("{SPECIAL_F7 0x00} was released.");
-const u8 gText_ByeByePkmn[] = _("Bye-bye, {SPECIAL_F7 0x00}!");
+const u8 gText_PkmnWasReleased[] = _("{DYNAMIC 0} was released.");
+const u8 gText_ByeByePkmn[] = _("Bye-bye, {DYNAMIC 0}!");
const u8 gText_MarkYourPkmn[] = _("Mark your POKéMON.");
const u8 gText_ThatsYourLastPkmn[] = _("That's your last POKéMON!");
const u8 gText_YourPartysFull[] = _("Your party's full!");
@@ -876,7 +876,7 @@ const u8 gText_YoureHoldingAPkmn[] = _("You're holding a POKéMON!");
const u8 gText_WhichOneWillYouTake[] = _("Which one will you take?");
const u8 gText_YouCantReleaseAnEgg[] = _("You can't release an EGG.");
const u8 gText_ContinueBoxOperations[] = _("Continue BOX operations?");
-const u8 gText_PkmnCameBack[] = _("{SPECIAL_F7 0x00} came back!");
+const u8 gText_PkmnCameBack[] = _("{DYNAMIC 0} came back!");
const u8 gText_WasItWorriedAboutYou[] = _("Was it worried about you?");
const u8 gText_FourEllipsesExclamation[] = _("… … … … !");
const u8 gText_PleaseRemoveTheMail[] = _("Please remove the MAIL.");
@@ -884,8 +884,8 @@ const u8 gText_GiveToAPkmn[] = _("GIVE to a POKéMON?");
const u8 gText_PlacedItemInBag[] = _("Placed item in the BAG.");
const u8 gText_BagIsFull2[] = _("The BAG is full.");
const u8 gText_PutItemInBag[] = _("Put this item in the BAG?");
-const u8 gText_ItemIsNowHeld[] = _("{SPECIAL_F7 0x00} is now held.");
-const u8 gText_ChangedToNewItem[] = _("Changed to {SPECIAL_F7 0x00}.");
+const u8 gText_ItemIsNowHeld[] = _("{DYNAMIC 0} is now held.");
+const u8 gText_ChangedToNewItem[] = _("Changed to {DYNAMIC 0}.");
const u8 gText_MailCantBeStored[] = _("MAIL can't be stored!");
const u8 gPCText_Cancel[] = _("CANCEL");
const u8 gPCText_Store[] = _("STORE");
@@ -981,18 +981,18 @@ const u8 gText_TrainerCloseBy[] = _("That TRAINER is close by.\nTalk to the TRAI
const u8 gText_InParty[] = _("IN PARTY");
const u8 gText_Number2[] = _("No. ");
const u8 gText_Ribbons[] = _("RIBBONS"); // Unused
-const u8 gText_PokemonMaleLv[] = _("{SPECIAL_F7 0x00}{COLOR_HIGHLIGHT_SHADOW LIGHT_RED WHITE GREEN}♂{COLOR_HIGHLIGHT_SHADOW DARK_GREY WHITE LIGHT_GREY}/{LV}{SPECIAL_F7 0x01}"); // Unused
-const u8 gText_PokemonFemaleLv[] = _("{SPECIAL_F7 0x00}{COLOR_HIGHLIGHT_SHADOW LIGHT_GREEN WHITE BLUE}♀{COLOR_HIGHLIGHT_SHADOW DARK_GREY WHITE LIGHT_GREY}/{LV}{SPECIAL_F7 0x01}"); // Unused
-const u8 gText_PokemonNoGenderLv[] = _("{SPECIAL_F7 0x00}/{LV}{SPECIAL_F7 0x01}"); // Unused
+const u8 gText_PokemonMaleLv[] = _("{DYNAMIC 0}{COLOR_HIGHLIGHT_SHADOW LIGHT_RED WHITE GREEN}♂{COLOR_HIGHLIGHT_SHADOW DARK_GREY WHITE LIGHT_GREY}/{LV}{DYNAMIC 1}"); // Unused
+const u8 gText_PokemonFemaleLv[] = _("{DYNAMIC 0}{COLOR_HIGHLIGHT_SHADOW LIGHT_GREEN WHITE BLUE}♀{COLOR_HIGHLIGHT_SHADOW DARK_GREY WHITE LIGHT_GREY}/{LV}{DYNAMIC 1}"); // Unused
+const u8 gText_PokemonNoGenderLv[] = _("{DYNAMIC 0}/{LV}{DYNAMIC 1}"); // Unused
const u8 gText_Unknown[] = _("UNKNOWN");
const u8 gText_Call[] = _("CALL");
const u8 gText_Check[] = _("CHECK");
const u8 gText_Cancel6[] = _("CANCEL");
-const u8 gText_NumberF700[] = _("No. {SPECIAL_F7 0x00}");
-const u8 gText_RibbonsF700[] = _("RIBBONS {SPECIAL_F7 0x00}");
-const u8 gText_PokemonMaleLv2[] = _("{SPECIAL_F7 0x00}{COLOR_HIGHLIGHT_SHADOW LIGHT_RED WHITE GREEN}♂{COLOR_HIGHLIGHT_SHADOW DARK_GREY WHITE LIGHT_GREY}/{LV}{SPECIAL_F7 0x01}{SPECIAL_F7 0x02}"); // Unused
-const u8 gText_PokemonFemaleLv2[] = _("{SPECIAL_F7 0x00}{COLOR_HIGHLIGHT_SHADOW LIGHT_GREEN WHITE BLUE}♀{COLOR_HIGHLIGHT_SHADOW DARK_GREY WHITE LIGHT_GREY}/{LV}{SPECIAL_F7 0x01}{SPECIAL_F7 0x02}"); // Unused
-const u8 gText_PokemonNoGenderLv2[] = _("{SPECIAL_F7 0x00}/{LV}{SPECIAL_F7 0x01}{SPECIAL_F7 0x02}"); // Unused
+const u8 gText_NumberF700[] = _("No. {DYNAMIC 0}");
+const u8 gText_RibbonsF700[] = _("RIBBONS {DYNAMIC 0}");
+const u8 gText_PokemonMaleLv2[] = _("{DYNAMIC 0}{COLOR_HIGHLIGHT_SHADOW LIGHT_RED WHITE GREEN}♂{COLOR_HIGHLIGHT_SHADOW DARK_GREY WHITE LIGHT_GREY}/{LV}{DYNAMIC 1}{DYNAMIC 2}"); // Unused
+const u8 gText_PokemonFemaleLv2[] = _("{DYNAMIC 0}{COLOR_HIGHLIGHT_SHADOW LIGHT_GREEN WHITE BLUE}♀{COLOR_HIGHLIGHT_SHADOW DARK_GREY WHITE LIGHT_GREY}/{LV}{DYNAMIC 1}{DYNAMIC 2}"); // Unused
+const u8 gText_PokemonNoGenderLv2[] = _("{DYNAMIC 0}/{LV}{DYNAMIC 1}{DYNAMIC 2}"); // Unused
const u8 gText_CombineFourWordsOrPhrases[] = _("Combine four words or phrases");
const u8 gText_AndMakeYourProfile[] = _("and make your profile.");
const u8 gText_CombineSixWordsOrPhrases[] = _("Combine six words or phrases");
@@ -1063,7 +1063,7 @@ const u8 gText_ApprenticesPhrase[] = _("Apprentice's phrase");
const u8 gText_Questionnaire[] = _("QUESTIONNAIRE");
const u8 gText_YouCannotQuitHere[] = _("You cannot quit here.");
const u8 gText_SectionMustBeCompleted[] = _("This section must be completed.");
-const u8 gText_F700sQuiz[] = _("{SPECIAL_F7 0x00}'s quiz");
+const u8 gText_F700sQuiz[] = _("{DYNAMIC 0}'s quiz");
const u8 gText_Lady[] = _("Lady");
const u8 gText_AfterYouHaveReadTheQuiz[] = _("After you have read the quiz");
const u8 gText_QuestionPressTheAButton[] = _("question, press the A Button.");
@@ -1236,7 +1236,7 @@ const u8 gText_BDot[] = _("B.");
const u8 gText_AnnouncingResults[] = _("Announcing the results!");
const u8 gText_PreliminaryResults[] = _("The preliminary results!");
const u8 gText_Round2Results[] = _("Round 2 results!");
-const u8 gText_Var1sVar2Won[] = _("{STR_VAR_1}'s {STR_VAR_2} won!");
+const u8 gText_ContestantsMonWon[] = _("{STR_VAR_1}'s {STR_VAR_2} won!");
const u8 gText_CommunicationStandby[] = _("Communication standby…");
const u8 gText_ColorDarkGrey[] = _("{COLOR DARK_GREY}");
const u8 gText_ColorDynamic6WhiteDynamic5[] = _("{COLOR_HIGHLIGHT_SHADOW DYNAMIC_COLOR6 WHITE DYNAMIC_COLOR5}"); // Unused
@@ -1255,16 +1255,16 @@ const u8 gText_QuitChatting[] = _("Quit chatting?");
const u8 gText_RegisterTextWhere[] = _("Register text where?");
const u8 gText_RegisterTextHere[] = _("Register text here?");
const u8 gText_InputText[] = _("Input text.");
-const u8 gText_F700JoinedChat[] = _("{SPECIAL_F7 0x00} joined the chat!");
-const u8 gText_F700LeftChat[] = _("{SPECIAL_F7 0x00} left the chat.");
-const u8 gJPText_PlayersXPokemon[] = _("{SPECIAL_F7 0x00}の{SPECIAL_F7 0x01}ひきめ:"); // Unused
-const u8 gJPText_PlayersXPokmonDoesNotExist[] = _("{SPECIAL_F7 0x00}の{SPECIAL_F7 0x01}ひきめは いません"); // Unused
+const u8 gText_F700JoinedChat[] = _("{DYNAMIC 0} joined the chat!");
+const u8 gText_F700LeftChat[] = _("{DYNAMIC 0} left the chat.");
+const u8 gJPText_PlayersXPokemon[] = _("{DYNAMIC 0}の{DYNAMIC 1}ひきめ:"); // Unused
+const u8 gJPText_PlayersXPokmonDoesNotExist[] = _("{DYNAMIC 0}の{DYNAMIC 1}ひきめは いません"); // Unused
const u8 gText_ExitingChat[] = _("Exiting the chat…");
-const u8 gText_LeaderLeftEndingChat[] = _("The LEADER, {SPECIAL_F7 0x00}, has\nleft, ending the chat.");
-const u8 gText_RegisteredTextChanged[] = _("The registered text has been changed.\nIs it okay to save the game?");
-const u8 gText_AlreadySavedFile_Unused[] = _("There is already a saved file.\nIs it okay to overwrite it?");
-const u8 gText_SavingDontTurnOff_Unused[] = _("SAVING…\nDON'T TURN OFF THE POWER.");
-const u8 gText_PlayerSavedGame_Unused[] = _("{SPECIAL_F7 0x00} saved the game.");
+const u8 gText_LeaderLeftEndingChat[] = _("The LEADER, {DYNAMIC 0}, has\nleft, ending the chat.");
+const u8 gText_RegisteredTextChangedOKToSave[] = _("The registered text has been changed.\nIs it okay to save the game?");
+const u8 gText_AlreadySavedFile_Chat[] = _("There is already a saved file.\nIs it okay to overwrite it?");
+const u8 gText_SavingDontTurnOff_Chat[] = _("SAVING…\nDON'T TURN OFF THE POWER.");
+const u8 gText_PlayerSavedGame_Chat[] = _("{DYNAMIC 0} saved the game.");
const u8 gText_IfLeaderLeavesChatEnds[] = _("If the LEADER leaves, the chat\nwill end. Is that okay?");
const u8 gText_Hello[] = _("HELLO");
const u8 gText_Pokemon2[] = _("POKéMON");
@@ -1294,15 +1294,15 @@ const u8 gText_HatchedFromEgg[] = _("{STR_VAR_1} hatched from the EGG!");
const u8 gText_NicknameHatchPrompt[] = _("Would you like to nickname the newly\nhatched {STR_VAR_1}?");
ALIGNED(4) const u8 gText_ReadyToBerryCrush[] = _("Are you ready to BERRY-CRUSH?\nPlease pick a BERRY for use.\p");
ALIGNED(4) const u8 gText_WaitForAllChooseBerry[] = _("Please wait while each member\nchooses a BERRY.");
-ALIGNED(4) const u8 gText_EndedWithXUnitsPowder[] = _("{PAUSE_MUSIC}{PLAY_BGM MUS_FANFA1}You ended up with {STR_VAR_1} units of\nsilky-smooth BERRY POWDER.{RESUME_MUSIC}\pYour total amount of BERRY POWDER\nis {STR_VAR_2}.\p");
+ALIGNED(4) const u8 gText_EndedWithXUnitsPowder[] = _("{PAUSE_MUSIC}{PLAY_BGM MUS_LEVEL_UP}You ended up with {STR_VAR_1} units of\nsilky-smooth BERRY POWDER.{RESUME_MUSIC}\pYour total amount of BERRY POWDER\nis {STR_VAR_2}.\p");
ALIGNED(4) const u8 gText_RecordingGameResults[] = _("Recording your game results in the\nsave file.\lPlease wait.");
ALIGNED(4) const u8 gText_PlayBerryCrushAgain[] = _("Want to play BERRY CRUSH again?");
ALIGNED(4) const u8 gText_YouHaveNoBerries[] = _("You have no BERRIES.\nThe game will be canceled.");
ALIGNED(4) const u8 gText_MemberDroppedOut[] = _("A member dropped out.\nThe game will be canceled.");
ALIGNED(4) const u8 gText_TimesUpNoGoodPowder[] = _("Time's up.\pGood BERRY POWDER could not be\nmade…\p");
ALIGNED(4) const u8 gText_CommunicationStandby2[] = _("Communication standby…");
-ALIGNED(4) const u8 gText_1DotBlueF700[] = _("1. {COLOR BLUE}{SHADOW LIGHT_BLUE}{SPECIAL_F7 0x00}");
-ALIGNED(4) const u8 gText_1DotF700[] = _("1. {SPECIAL_F7 0x00}");
+ALIGNED(4) const u8 gText_1DotBlueF700[] = _("1. {COLOR BLUE}{SHADOW LIGHT_BLUE}{DYNAMIC 0}");
+ALIGNED(4) const u8 gText_1DotF700[] = _("1. {DYNAMIC 0}");
ALIGNED(4) const u8 gText_SpaceTimes2[] = _(" time(s)");
ALIGNED(4) const u8 gText_XDotY[] = _("{STR_VAR_1}.{STR_VAR_2}");
ALIGNED(4) const u8 gText_Var1Berry[] = _("{STR_VAR_1} BERRY");
@@ -1375,7 +1375,7 @@ const u8 gText_2Colon[] = _("2:");
const u8 gText_3Colon[] = _("3:");
const u8 gText_4Colon[] = _("4:");
const u8 gText_5Colon[] = _("5:");
-const u8 gText_FirstPlacePrize[] = _("The first-place winner gets\nthis {SPECIAL_F7 0x00}!");
+const u8 gText_FirstPlacePrize[] = _("The first-place winner gets\nthis {DYNAMIC 0}!");
const u8 gText_CantHoldAnyMore[] = _("You can't hold any more!");
const u8 gText_FilledStorageSpace[] = _("It filled its storage space.");
const u8 gText_WantToPlayAgain[] = _("Want to play again?");
@@ -1388,7 +1388,7 @@ const u8 gText_PkmnJumpRecords[] = _("POKéMON JUMP RECORDS");
const u8 gText_JumpsInARow[] = _("Jumps in a row:");
const u8 gText_BestScore2[] = _("Best score:");
const u8 gText_ExcellentsInARow[] = _("EXCELLENTS in a row:");
-const u8 gText_AwesomeWonF701F700[] = _("Awesome score! You've\nwon {SPECIAL_F7 0x01} {SPECIAL_F7 0x00}!");
+const u8 gText_AwesomeWonF701F700[] = _("Awesome score! You've\nwon {DYNAMIC 1} {DYNAMIC 0}!");
const u8 gText_FilledStorageSpace2[] = _("It filled its storage space.");
const u8 gText_CantHoldMore[] = _("You can't hold any more!");
const u8 gText_WantToPlayAgain2[] = _("Want to play again?");
@@ -1492,7 +1492,7 @@ const u8 gText_FrameTypeNumber[] = _("{COLOR GREEN}{SHADOW LIGHT_GREEN}");
const u8 gText_ButtonTypeNormal[] = _("{COLOR GREEN}{SHADOW LIGHT_GREEN}NORMAL");
const u8 gText_ButtonTypeLR[] = _("{COLOR GREEN}{SHADOW LIGHT_GREEN}LR");
const u8 gText_ButtonTypeLEqualsA[] = _("{COLOR GREEN}{SHADOW LIGHT_GREEN}L=A");
-const u8 gText_XPLink[] = _("{STR_VAR_1}P LINK");
+const u8 gText_NumPlayerLink[] = _("{STR_VAR_1}P LINK");
const u8 gText_BronzeCard[] = _("BRONZE");
const u8 gText_CopperCard[] = _("COPPER");
const u8 gText_SilverCard[] = _("SILVER");
@@ -1645,10 +1645,10 @@ const u8 gText_PeopleTrading[] = _("People trading:");
const u8 gText_PeopleBattling[] = _("People battling:");
const u8 gText_PeopleInUnionRoom[] = _("People in the UNION ROOM:");
const u8 gText_PeopleCommunicating[] = _("People communicating:");
-const u8 gText_F700Players[] = _("{SPECIAL_F7 0} players");
-const u8 gText_F701Players[] = _("{SPECIAL_F7 1} players");
-const u8 gText_F702Players[] = _("{SPECIAL_F7 2} players");
-const u8 gText_F703Players[] = _("{SPECIAL_F7 3} players");
+const u8 gText_F700Players[] = _("{DYNAMIC 0} players");
+const u8 gText_F701Players[] = _("{DYNAMIC 1} players");
+const u8 gText_F702Players[] = _("{DYNAMIC 2} players");
+const u8 gText_F703Players[] = _("{DYNAMIC 3} players");
const u8 *const gTextTable_Players[] = {
gText_F700Players,
@@ -1745,7 +1745,7 @@ const u8 gText_MoveRelearnerTeachMoveConfirm[] = _("Teach {STR_VAR_2}?");
const u8 gText_MoveRelearnerPkmnLearnedMove[] = _("{STR_VAR_1} learned\n{STR_VAR_2}!");
const u8 gText_MoveRelearnerPkmnTryingToLearnMove[] = _("{STR_VAR_1} is trying to learn\n{STR_VAR_2}.\pBut {STR_VAR_1} can't learn more\nthan four moves.\pDelete an older move to make\nroom for {STR_VAR_2}?");
const u8 gText_MoveRelearnerStopTryingToTeachMove[] = _("Stop trying to teach\n{STR_VAR_2}?");
-const u8 gText_MoveRelearnerAndPoof[] = _("{PAUSE 32}1, {PAUSE 15}2, and {PAUSE 15}… {PAUSE 15}… {PAUSE 15}… {PAUSE 15}{PLAY_SE 0x0038}Poof!\p");
+const u8 gText_MoveRelearnerAndPoof[] = _("{PAUSE 32}1, {PAUSE 15}2, and {PAUSE 15}… {PAUSE 15}… {PAUSE 15}… {PAUSE 15}{PLAY_SE SE_BALL_BOUNCE_1}Poof!\p");
const u8 gText_MoveRelearnerPkmnForgotMoveAndLearnedNew[] = _("{STR_VAR_1} forgot {STR_VAR_3}.\pAnd…\p{STR_VAR_1} learned {STR_VAR_2}.");
const u8 gText_MoveRelearnedPkmnDidNotLearnMove[] = _("{STR_VAR_1} did not learn the\nmove {STR_VAR_2}."); // Unused
const u8 gText_MoveRelearnerGiveUp[] = _("Give up trying to teach a new\nmove to {STR_VAR_1}?");
diff --git a/src/task.c b/src/task.c
index a2df66de8..a97496009 100644
--- a/src/task.c
+++ b/src/task.c
@@ -200,7 +200,7 @@ u8 GetTaskCount(void)
void SetWordTaskArg(u8 taskId, u8 dataElem, u32 value)
{
- if (dataElem <= 14)
+ if (dataElem < NUM_TASK_DATA - 1)
{
gTasks[taskId].data[dataElem] = value;
gTasks[taskId].data[dataElem + 1] = value >> 16;
@@ -209,7 +209,7 @@ void SetWordTaskArg(u8 taskId, u8 dataElem, u32 value)
u32 GetWordTaskArg(u8 taskId, u8 dataElem)
{
- if (dataElem <= 14)
+ if (dataElem < NUM_TASK_DATA - 1)
return (u16)gTasks[taskId].data[dataElem] | (gTasks[taskId].data[dataElem + 1] << 16);
else
return 0;
diff --git a/src/text_window.c b/src/text_window.c
index 98fc09e87..864bd0831 100644
--- a/src/text_window.c
+++ b/src/text_window.c
@@ -49,7 +49,7 @@ static const u16 sTextWindowFrame18_Pal[] = INCBIN_U16("graphics/text_window/18.
static const u16 sTextWindowFrame19_Pal[] = INCBIN_U16("graphics/text_window/19.gbapal");
static const u16 sTextWindowFrame20_Pal[] = INCBIN_U16("graphics/text_window/20.gbapal");
-static const u16 sUnknown_0851017C[][16] =
+static const u16 sTextWindowPalettes[][16] =
{
INCBIN_U16("graphics/text_window/message_box.gbapal"),
INCBIN_U16("graphics/text_window/text_pal1.gbapal"),
@@ -160,7 +160,7 @@ void rbox_fill_rectangle(u8 windowId)
FillBgTilemapBufferRect(bgLayer, 0, tilemapLeft - 1, tilemapTop - 1, width + 2, height + 2, 0x11);
}
-const u16 *stdpal_get(u8 id)
+const u16 *GetTextWindowPalette(u8 id)
{
switch (id)
{
@@ -182,7 +182,7 @@ const u16 *stdpal_get(u8 id)
break;
}
- return (const u16 *)(sUnknown_0851017C) + id;
+ return (const u16 *)(sTextWindowPalettes) + id;
}
const u16 *GetOverworldTextboxPalettePtr(void)
diff --git a/src/title_screen.c b/src/title_screen.c
index 600dd18c8..108601685 100644
--- a/src/title_screen.c
+++ b/src/title_screen.c
@@ -546,11 +546,14 @@ void CB2_InitTitleScreen(void)
gMain.state = 1;
break;
case 1:
- LZ77UnCompVram(gTitleScreenPokemonLogoGfx, (void *)VRAM);
+ // bg2
+ LZ77UnCompVram(gTitleScreenPokemonLogoGfx, (void *)(BG_CHAR_ADDR(0)));
LZ77UnCompVram(gUnknown_08DE0644, (void *)(BG_SCREEN_ADDR(9)));
LoadPalette(gTitleScreenBgPalettes, 0, 0x1E0);
+ // bg3
LZ77UnCompVram(sTitleScreenRayquazaGfx, (void *)(BG_CHAR_ADDR(2)));
LZ77UnCompVram(sTitleScreenRayquazaTilemap, (void *)(BG_SCREEN_ADDR(26)));
+ // bg1
LZ77UnCompVram(sTitleScreenCloudsGfx, (void *)(BG_CHAR_ADDR(3)));
LZ77UnCompVram(gUnknown_08DDE458, (void *)(BG_SCREEN_ADDR(27)));
ScanlineEffect_Stop();
@@ -606,7 +609,7 @@ void CB2_InitTitleScreen(void)
| DISPCNT_OBJ_ON
| DISPCNT_WIN0_ON
| DISPCNT_OBJWIN_ON);
- m4aSongNumStart(MUS_TITLE3);
+ m4aSongNumStart(MUS_TITLE);
gMain.state = 5;
break;
case 5:
diff --git a/src/trade.c b/src/trade.c
index e22180ae9..3072b8585 100644
--- a/src/trade.c
+++ b/src/trade.c
@@ -30,7 +30,6 @@
#include "pokemon_summary_screen.h"
#include "pokemon_storage_system.h"
#include "random.h"
-#include "rom_8011DC0.h"
#include "save.h"
#include "script.h"
#include "sound.h"
@@ -52,6 +51,7 @@
#include "constants/rgb.h"
#include "constants/species.h"
#include "constants/songs.h"
+#include "constants/union_room.h"
#define Trade_SendData(ptr) (SendBlock(bitmask_all_link_players_but_self(), ptr->linkData, 20))
@@ -234,7 +234,7 @@ static void CB2_SaveAndEndWirelessTrade(void);
static bool8 SendLinkData(const void *linkData, u32 size)
{
- if (gUnknown_02022C2C == 29)
+ if (gPlayerCurrActivity == ACTIVITY_29)
{
rfu_NI_setSendData(lman.acceptSlot_flag, 84, linkData, size);
return TRUE;
@@ -245,14 +245,14 @@ static bool8 SendLinkData(const void *linkData, u32 size)
}
}
-static void sub_80771AC(u8 a0)
+static void RequestLinkData(u8 type)
{
- sub_800A4D8(a0);
+ SendBlockRequest(type);
}
static bool32 sub_80771BC(void)
{
- if (gUnknown_02022C2C == 29)
+ if (gPlayerCurrActivity == ACTIVITY_29)
{
if (gRfuSlotStatusNI[sub_800E87C(lman.acceptSlot_flag)]->send.state == 0)
return TRUE;
@@ -288,15 +288,15 @@ static void TradeResetReceivedFlag(u32 who)
static bool32 IsWirelessTrade(void)
{
- if (gWirelessCommType && gUnknown_02022C2C == 29)
+ if (gWirelessCommType && gPlayerCurrActivity == ACTIVITY_29)
return TRUE;
else
return FALSE;
}
-static void sub_8077288(u8 unused)
+static void SetTradeLinkStandbyCallback(u8 unused)
{
- sub_800ADF8();
+ SetLinkStandbyCallback();
}
static bool32 _IsLinkTaskFinished(void)
@@ -388,20 +388,20 @@ static void CB2_CreateTradeMenu(void)
if (!gReceivedRemoteLinkPlayers)
{
- gLinkType = LINKTYPE_0x1122;
+ gLinkType = LINKTYPE_TRADE_CONNECTING;
sTradeMenuData->timer = 0;
if (gWirelessCommType)
{
- sub_800B488();
+ SetWirelessCommType1();
OpenLink();
- sub_8011BA4();
+ CreateTask_RfuIdle();
}
else
{
OpenLink();
gMain.state++;
- CreateTask(task00_08081A90, 1);
+ CreateTask(Task_WaitForLinkPlayerConnection, 1);
}
}
else
@@ -437,14 +437,14 @@ static void CB2_CreateTradeMenu(void)
case 4:
if (gReceivedRemoteLinkPlayers == TRUE && IsLinkPlayerDataExchangeComplete() == TRUE)
{
- sub_8011BD0();
+ DestroyTask_RfuIdle();
CalculatePlayerPartyCount();
gMain.state++;
sTradeMenuData->timer = 0;
if (gWirelessCommType)
{
sub_801048C(TRUE);
- sub_800ADF8();
+ SetLinkStandbyCallback();
}
}
break;
@@ -569,7 +569,7 @@ static void CB2_CreateTradeMenu(void)
sTradeMenuData->bg3hofs = 0;
SetTradePartyMonsVisible();
gMain.state++;
- PlayBGM(MUS_P_SCHOOL);
+ PlayBGM(MUS_SCHOOL);
break;
case 15:
SetTradePartyLiveStatuses(TRADE_PARTNER);
@@ -824,7 +824,7 @@ static void LinkTradeWaitForFade(void)
}
else
{
- sub_800ABF4(32);
+ SetCloseLinkCallbackAndType(32);
sTradeMenuData->tradeMenuFunc = TRADEMENUFUNC_START_LINK_TRADE;
}
}
@@ -982,7 +982,7 @@ static bool8 BufferTradeParties(void)
case 3:
if (id == 0)
{
- sub_80771AC(1);
+ RequestLinkData(1);
}
sTradeMenuData->bufferPartyState++;
break;
@@ -1001,7 +1001,7 @@ static bool8 BufferTradeParties(void)
case 7:
if (id == 0)
{
- sub_80771AC(1);
+ RequestLinkData(1);
}
sTradeMenuData->bufferPartyState++;
break;
@@ -1020,7 +1020,7 @@ static bool8 BufferTradeParties(void)
case 11:
if (id == 0)
{
- sub_80771AC(1);
+ RequestLinkData(1);
}
sTradeMenuData->bufferPartyState++;
break;
@@ -1039,7 +1039,7 @@ static bool8 BufferTradeParties(void)
case 15:
if (id == 0)
{
- sub_80771AC(3);
+ RequestLinkData(3);
}
sTradeMenuData->bufferPartyState++;
break;
@@ -1058,7 +1058,7 @@ static bool8 BufferTradeParties(void)
case 19:
if (id == 0)
{
- sub_80771AC(4);
+ RequestLinkData(4);
}
sTradeMenuData->bufferPartyState++;
break;
@@ -1651,11 +1651,11 @@ static void CancelTrade_1(void)
{
if (gWirelessCommType)
{
- sub_800ADF8();
+ SetLinkStandbyCallback();
}
else
{
- sub_800ABF4(12);
+ SetCloseLinkCallbackAndType(12);
}
sTradeMenuData->tradeMenuFunc = TRADEMENUFUNC_CANCEL_TRADE_2;
@@ -1691,7 +1691,7 @@ static void LinkTradeWaitForQueue(void)
{
if (!sub_801048C(FALSE) && GetNumQueuedActions() == 0)
{
- sub_800ADF8();
+ SetLinkStandbyCallback();
sTradeMenuData->tradeMenuFunc = TRADEMENUFUNC_START_LINK_TRADE;
}
}
@@ -2572,7 +2572,7 @@ static void sub_807AA28(struct Sprite *sprite)
{
if (++sprite->data[0] == 10)
{
- PlaySE(SE_BOWA);
+ PlaySE(SE_BALL);
sprite->data[0] = 0;
}
}
@@ -2581,7 +2581,7 @@ static void sub_807AA4C(struct Sprite *sprite)
{
if (!sprite->invisible && ++sprite->data[0] == 10)
{
- PlaySE(SE_W207B);
+ PlaySE(SE_M_SWAGGER2);
sprite->data[0] = 0;
}
}
@@ -2619,7 +2619,7 @@ static void sub_807AB04(struct Sprite *sprite)
{
if (++sprite->data[0] == 15)
{
- PlaySE(SE_W107);
+ PlaySE(SE_M_MINIMIZE);
sprite->data[0] = 0;
}
}
@@ -2749,7 +2749,7 @@ void CB2_LinkTrade(void)
case 0:
if (!gReceivedRemoteLinkPlayers)
{
- gLinkType = LINKTYPE_0x1144;
+ gLinkType = LINKTYPE_TRADE_DISCONNECTED;
CloseLink();
}
sTradeData = AllocZeroed(sizeof(*sTradeData));
@@ -3288,7 +3288,7 @@ static bool8 AnimateTradeSequenceCable(void)
gSprites[sTradeData->pokePicSpriteIdxs[TRADE_PLAYER]].pos2.y = gMonFrontPicCoords[sTradeData->monSpecies[TRADE_PLAYER]].y_offset;
sTradeData->state++;
sTradeData->cachedMapMusic = GetCurrentMapMusic();
- PlayNewMapMusic(MUS_SHINKA);
+ PlayNewMapMusic(MUS_EVOLUTION);
break;
case 1:
if (sTradeData->bg2hofs > 0)
@@ -3448,7 +3448,7 @@ static bool8 AnimateTradeSequenceCable(void)
case 32:
if (!gPaletteFade.active)
{
- PlaySE(SE_TK_WARPOUT);
+ PlaySE(SE_WARP_OUT);
sTradeData->state++;
}
gSprites[sTradeData->unk_90].pos2.y -= 3;
@@ -3502,7 +3502,7 @@ static bool8 AnimateTradeSequenceCable(void)
gSprites[sTradeData->pokePicSpriteIdxs[TRADE_PARTNER]].pos2.y += 3;
if (gSprites[sTradeData->pokePicSpriteIdxs[TRADE_PLAYER]].pos2.y < -160 && gSprites[sTradeData->pokePicSpriteIdxs[TRADE_PLAYER]].pos2.y >= -163)
{
- PlaySE(SE_TK_WARPIN);
+ PlaySE(SE_WARP_IN);
}
if (gSprites[sTradeData->pokePicSpriteIdxs[TRADE_PLAYER]].pos2.y < -222)
{
@@ -3599,7 +3599,7 @@ static bool8 AnimateTradeSequenceCable(void)
DestroySprite(&gSprites[sTradeData->unk_91]);
SetTradeSequenceBgGpuRegs(6);
sTradeData->state++;
- PlaySE(SE_W028);
+ PlaySE(SE_M_SAND_ATTACK);
}
break;
case 51:
@@ -3703,7 +3703,7 @@ static bool8 AnimateTradeSequenceCable(void)
case 68:
if (++sTradeData->timer == 10)
{
- PlayFanfare(MUS_FANFA5);
+ PlayFanfare(MUS_EVOLVED);
}
if (sTradeData->timer == 250)
{
@@ -3780,7 +3780,7 @@ static bool8 AnimateTradeSequenceWireless(void)
gSprites[sTradeData->pokePicSpriteIdxs[TRADE_PLAYER]].pos2.y = gMonFrontPicCoords[sTradeData->monSpecies[TRADE_PLAYER]].y_offset;
sTradeData->state++;
sTradeData->cachedMapMusic = GetCurrentMapMusic();
- PlayNewMapMusic(MUS_SHINKA);
+ PlayNewMapMusic(MUS_EVOLUTION);
break;
case 1:
if (sTradeData->bg2hofs > 0)
@@ -3945,7 +3945,7 @@ static bool8 AnimateTradeSequenceWireless(void)
case 32:
if (!gPaletteFade.active)
{
- PlaySE(SE_TK_WARPOUT);
+ PlaySE(SE_WARP_OUT);
sTradeData->state++;
}
gSprites[sTradeData->unk_90].pos2.y -= 3;
@@ -4000,7 +4000,7 @@ static bool8 AnimateTradeSequenceWireless(void)
gSprites[sTradeData->pokePicSpriteIdxs[TRADE_PARTNER]].pos2.y += 3;
if (gSprites[sTradeData->pokePicSpriteIdxs[TRADE_PLAYER]].pos2.y < -160 && gSprites[sTradeData->pokePicSpriteIdxs[TRADE_PLAYER]].pos2.y >= -163)
{
- PlaySE(SE_TK_WARPIN);
+ PlaySE(SE_WARP_IN);
}
if (gSprites[sTradeData->pokePicSpriteIdxs[TRADE_PLAYER]].pos2.y < -222)
{
@@ -4115,7 +4115,7 @@ static bool8 AnimateTradeSequenceWireless(void)
DestroySprite(&gSprites[sTradeData->unk_91]);
SetTradeSequenceBgGpuRegs(6);
sTradeData->state++;
- PlaySE(SE_W028);
+ PlaySE(SE_M_SAND_ATTACK);
}
break;
case 51:
@@ -4218,7 +4218,7 @@ static bool8 AnimateTradeSequenceWireless(void)
case 68:
if (++sTradeData->timer == 10)
{
- PlayFanfare(MUS_FANFA5);
+ PlayFanfare(MUS_EVOLVED);
}
if (sTradeData->timer == 250)
{
@@ -4360,10 +4360,10 @@ static void sub_807E5D8(struct Sprite *sprite)
{
sprite->pos2.y += sTradeBallVerticalVelocityTable[sprite->data[0]];
if (sprite->data[0] == 22)
- PlaySE(SE_KON);
+ PlaySE(SE_BALL_BOUNCE_1);
if (++ sprite->data[0] == 44)
{
- PlaySE(SE_W025);
+ PlaySE(SE_M_MEGA_KICK);
sprite->callback = sub_807E64C;
sprite->data[0] = 0;
BeginNormalPaletteFade(1 << (16 + sprite->oam.paletteNum), -1, 0, 16, RGB_WHITEALPHA);
@@ -4393,17 +4393,17 @@ static void sub_807E6AC(struct Sprite *sprite)
{
sprite->data[2] ++;
sprite->data[0] = 0x16;
- PlaySE(SE_KON);
+ PlaySE(SE_BALL_BOUNCE_1);
}
}
else
{
if (sprite->data[0] == 0x42)
- PlaySE(SE_KON2);
+ PlaySE(SE_BALL_BOUNCE_2);
if (sprite->data[0] == 0x5c)
- PlaySE(SE_KON3);
+ PlaySE(SE_BALL_BOUNCE_3);
if (sprite->data[0] == 0x6b)
- PlaySE(SE_KON4);
+ PlaySE(SE_BALL_BOUNCE_4);
sprite->pos2.y += sTradeBallVerticalVelocityTable[sprite->data[0]];
if (++sprite->data[0] == 0x6c)
sprite->callback = SpriteCallbackDummy;
@@ -4565,7 +4565,7 @@ static void CB2_SaveAndEndTrade(void)
DrawTextOnTradeWindow(0, gStringVar4, 0);
break;
case 1:
- sub_8077288(0);
+ SetTradeLinkStandbyCallback(0);
gMain.state = 100;
sTradeData->timer = 0;
break;
@@ -4596,7 +4596,7 @@ static void CB2_SaveAndEndTrade(void)
IncrementGameStat(GAME_STAT_POKEMON_TRADES);
if (gWirelessCommType)
{
- sub_801B990(2, gLinkPlayers[GetMultiplayerId() ^ 1].trainerId);
+ RecordIdOfWonderCardSenderByEventType(2, gLinkPlayers[GetMultiplayerId() ^ 1].trainerId);
}
SetContinueGameWarpStatusToDynamicWarp();
sub_8153380();
@@ -4643,7 +4643,7 @@ static void CB2_SaveAndEndTrade(void)
case 41:
if (sTradeData->timer == 0)
{
- sub_8077288(1);
+ SetTradeLinkStandbyCallback(1);
gMain.state = 42;
}
else
@@ -4662,7 +4662,7 @@ static void CB2_SaveAndEndTrade(void)
if (++sTradeData->timer > 60)
{
gMain.state++;
- sub_8077288(2);
+ SetTradeLinkStandbyCallback(2);
}
break;
case 6:
@@ -4684,11 +4684,11 @@ static void CB2_SaveAndEndTrade(void)
{
if (gWirelessCommType && gMain.savedCallback == CB2_StartCreateTradeMenu)
{
- sub_8077288(3);
+ SetTradeLinkStandbyCallback(3);
}
else
{
- sub_800AC34();
+ SetCloseLinkCallback();
}
gMain.state++;
}
@@ -4808,7 +4808,7 @@ static void Task_AnimateWirelessSignal(u8 taskId)
}
if (sWirelessSignalTiming[idx][0] == 0 && counter == 0)
- PlaySE(SE_W215);
+ PlaySE(SE_M_HEAL_BELL);
if (counter == sWirelessSignalTiming[idx][1])
{
@@ -4901,7 +4901,7 @@ static void CB2_SaveAndEndWirelessTrade(void)
DrawTextOnTradeWindow(0, gStringVar4, 0);
break;
case 1:
- sub_8077288(0);
+ SetTradeLinkStandbyCallback(0);
gMain.state = 2;
sTradeData->timer = 0;
break;
@@ -4949,7 +4949,7 @@ static void CB2_SaveAndEndWirelessTrade(void)
case 7:
if (sTradeData->timer == 0)
{
- sub_8077288(1);
+ SetTradeLinkStandbyCallback(1);
gMain.state = 8;
}
else
@@ -4968,7 +4968,7 @@ static void CB2_SaveAndEndWirelessTrade(void)
if (++sTradeData->timer > 60)
{
gMain.state++;
- sub_8077288(2);
+ SetTradeLinkStandbyCallback(2);
}
break;
case 10:
@@ -4982,7 +4982,7 @@ static void CB2_SaveAndEndWirelessTrade(void)
case 11:
if (!gPaletteFade.active && IsBGMStopped() == TRUE)
{
- sub_8077288(3);
+ SetTradeLinkStandbyCallback(3);
gMain.state = 12;
}
break;
diff --git a/src/trader.c b/src/trader.c
index ac6a30df0..f6d021dfe 100644
--- a/src/trader.c
+++ b/src/trader.c
@@ -83,7 +83,7 @@ void CreateAvailableDecorationsMenu(u8 taskId)
}
AddTextPrinterParameterized(data[3], 1, gText_Exit, 8, 16 * i + 1, 255, NULL);
InitMenuInUpperLeftCornerPlaySoundWhenAPressed(data[3], 5, 0);
- schedule_bg_copy_tilemap_to_vram(0);
+ ScheduleBgCopyTilemapToVram(0);
}
void Task_BufferDecorSelectionAndCloseWindow(u8 taskId, u8 decorationId)
@@ -101,7 +101,7 @@ void Task_BufferDecorSelectionAndCloseWindow(u8 taskId, u8 decorationId)
ClearStdWindowAndFrameToTransparent(data[3], FALSE);
ClearWindowTilemap(data[3]);
RemoveWindow(data[3]);
- schedule_bg_copy_tilemap_to_vram(0);
+ ScheduleBgCopyTilemapToVram(0);
DestroyTask(taskId);
EnableBothScriptContexts();
}
diff --git a/src/trainer_card.c b/src/trainer_card.c
index fb92dc336..9d6838176 100755
--- a/src/trainer_card.c
+++ b/src/trainer_card.c
@@ -25,9 +25,8 @@
#include "graphics.h"
#include "pokemon_icon.h"
#include "trainer_pokemon_sprites.h"
-#include "script_pokemon_util_80F87D8.h"
+#include "contest_util.h"
#include "constants/songs.h"
-#include "constants/flags.h"
#include "constants/game_stat.h"
#include "constants/battle_frontier.h"
#include "constants/rgb.h"
@@ -423,7 +422,7 @@ static void Task_TrainerCard(u8 taskId)
case 8:
if (!UpdatePaletteFade() && !IsDma3ManagerBusyWithBgCopy())
{
- PlaySE(SE_RG_CARD3);
+ PlaySE(SE_RG_CARD_OPEN);
sData->mainState = STATE_HANDLE_INPUT_FRONT;
}
break;
@@ -442,7 +441,7 @@ static void Task_TrainerCard(u8 taskId)
if (gMain.newKeys & A_BUTTON)
{
FlipTrainerCard();
- PlaySE(SE_RG_CARD1);
+ PlaySE(SE_RG_CARD_FLIP);
sData->mainState = STATE_WAIT_FLIP_TO_BACK;
}
else if (gMain.newKeys & B_BUTTON)
@@ -461,7 +460,7 @@ static void Task_TrainerCard(u8 taskId)
case STATE_WAIT_FLIP_TO_BACK:
if (IsCardFlipTaskActive() && sub_8087598() != TRUE)
{
- PlaySE(SE_RG_CARD3);
+ PlaySE(SE_RG_CARD_OPEN);
sData->mainState = STATE_HANDLE_INPUT_BACK;
}
break;
@@ -481,7 +480,7 @@ static void Task_TrainerCard(u8 taskId)
{
FlipTrainerCard();
sData->mainState = STATE_WAIT_FLIP_TO_FRONT;
- PlaySE(SE_RG_CARD1);
+ PlaySE(SE_RG_CARD_FLIP);
}
}
else if (gMain.newKeys & A_BUTTON)
@@ -498,7 +497,7 @@ static void Task_TrainerCard(u8 taskId)
}
break;
case STATE_WAIT_LINK_PARTNER:
- sub_800AC34();
+ SetCloseLinkCallback();
DrawDialogueFrame(0, 1);
AddTextPrinterParameterized(0, 1, gText_WaitingTrainerFinishReading, 0, 1, 255, 0);
CopyWindowToVram(0, 3);
@@ -519,7 +518,7 @@ static void Task_TrainerCard(u8 taskId)
if (IsCardFlipTaskActive() && sub_8087598() != TRUE)
{
sData->mainState = STATE_HANDLE_INPUT_FRONT;
- PlaySE(SE_RG_CARD3);
+ PlaySE(SE_RG_CARD_OPEN);
}
break;
}
@@ -1731,7 +1730,7 @@ static bool8 Task_SetCardFlipped(struct Task* task)
sData->onBack ^= 1;
task->tFlipState++;
sData->allowDMACopy = TRUE;
- PlaySE(SE_RG_CARD2);
+ PlaySE(SE_RG_CARD_FLIPPING);
return FALSE;
}
diff --git a/src/trainer_hill.c b/src/trainer_hill.c
index 87866b02e..bed8df2e0 100644
--- a/src/trainer_hill.c
+++ b/src/trainer_hill.c
@@ -64,7 +64,7 @@ static void TrainerHillSetPlayerLost(void);
static void TrainerHillGetChallengeStatus(void);
static void BufferChallengeTime(void);
static void GetAllFloorsUsed(void);
-static void ClearVarResult(void);
+static void GetInEReaderMode(void);
static void IsTrainerHillChallengeActive(void);
static void ShowTrainerHillPostBattleText(void);
static void SetAllTrainerFlags(void);
@@ -202,7 +202,7 @@ static const u16 *const *const sPrizeListSets[] =
sPrizeLists2
};
-static const u16 sUnknown_0862A5D4[] = INCBIN_U16("graphics/pokenav/862A5D4.gbapal");
+static const u16 sEReader_Pal[] = INCBIN_U16("graphics/misc/trainer_hill_ereader.gbapal");
static const u8 sRecordWinColors[] = {TEXT_COLOR_TRANSPARENT, TEXT_COLOR_DARK_GREY, TEXT_COLOR_LIGHT_GREY};
static const struct TrHillTag *const sDataPerTag[] =
@@ -233,7 +233,7 @@ static void (* const sHillFunctions[])(void) =
[TRAINER_HILL_FUNC_GET_CHALLENGE_STATUS] = TrainerHillGetChallengeStatus,
[TRAINER_HILL_FUNC_GET_CHALLENGE_TIME] = BufferChallengeTime,
[TRAINER_HILL_FUNC_GET_ALL_FLOORS_USED] = GetAllFloorsUsed,
- [TRAINER_HILL_FUNC_CLEAR_RESULT] = ClearVarResult,
+ [TRAINER_HILL_FUNC_GET_IN_EREADER_MODE] = GetInEReaderMode,
[TRAINER_HILL_FUNC_IN_CHALLENGE] = IsTrainerHillChallengeActive,
[TRAINER_HILL_FUNC_POST_BATTLE_TEXT] = ShowTrainerHillPostBattleText,
[TRAINER_HILL_FUNC_SET_ALL_TRAINER_FLAGS] = SetAllTrainerFlags,
@@ -356,7 +356,7 @@ static void SetUpDataStruct(void)
{
if (sHillData == NULL)
{
- sHillData = AllocZeroed(sizeof(*sHillData));
+ sHillData = AllocZeroed(sizeof(struct TrHillStruct2));
sHillData->floorId = gMapHeader.mapLayoutId - LAYOUT_TRAINER_HILL_1F;
CpuCopy32(sDataPerTag[gSaveBlock1Ptr->trainerHill.tag], &sHillData->tag, sizeof(sHillData->tag) + 4 * sizeof(struct TrHillFloor));
nullsub_2();
@@ -546,10 +546,11 @@ static void GetAllFloorsUsed(void)
}
// May have been dummied. Every time this is called a conditional for var result occurs afterwards
-static void ClearVarResult(void)
+// Relation to E-Reader is an assumption, most dummied Trainer Hill code seems to be JP E-Reader mode related
+static void GetInEReaderMode(void)
{
SetUpDataStruct();
- gSpecialVar_Result = 0;
+ gSpecialVar_Result = FALSE;
FreeDataStruct();
}
@@ -671,70 +672,23 @@ bool32 LoadTrainerHillFloorObjectEventScripts(void)
return TRUE;
}
-// Functionally equivalent.
-#ifdef NONMATCHING
static u32 sub_81D5F58(u8 floorId, u32 bit, u32 arg2, u32 arg3)
{
- u32 var0, var1, var2, var3;
+ u16 var0, var1;
+ #ifndef NONMATCHING
+ register u16 var2 asm("r3"); //compiler keeps wanting to "mov r3, 0x80" instead of "mov r2 0x80" and then later "add r3, r2, 0"
+ #else
+ u16 var2;
+ #endif
+ u16 var3;
- var0 = (sHillData->floors[floorId].display.unk3A0[arg2] >> (15 - bit)) & 1;
- var1 = sHillData->floors[floorId].display.data[arg2 * arg3 + bit];
- var3 = 0x200;
- var2 = 0x3000;
+ var0 = (sHillData->floors[floorId].display.unk3A0[arg2] >> (15 - bit) & 1);
+ var1 = sHillData->floors[floorId].display.data[arg3 * arg2 + bit];
+ var2 = 0x200;
+ var3 = 0x3000;
- return ((var0 << 10) | var2) | (var1 | var3);
-}
-#else
-NAKED
-static u32 sub_81D5F58(u8 floorId, u32 bit, u32 arg2, u32 arg3)
-{
- asm_unified("\n\
- push {r4,r5,lr}\n\
- lsls r0, 24\n\
- lsrs r0, 24\n\
- ldr r4, =sHillData\n\
- ldr r4, [r4]\n\
- mov r12, r4\n\
- lsls r4, r2, 1\n\
- lsls r5, r0, 4\n\
- subs r5, r0\n\
- lsls r5, 3\n\
- subs r5, r0\n\
- lsls r5, 3\n\
- adds r4, r5\n\
- movs r0, 0xE8\n\
- lsls r0, 2\n\
- add r0, r12\n\
- adds r0, r4\n\
- ldrh r0, [r0]\n\
- movs r4, 0xF\n\
- subs r4, r1\n\
- asrs r0, r4\n\
- movs r4, 0x1\n\
- ands r0, r4\n\
- muls r2, r3\n\
- adds r2, r1\n\
- adds r2, r5\n\
- movs r1, 0xA8\n\
- lsls r1, 2\n\
- add r1, r12\n\
- adds r1, r2\n\
- ldrb r1, [r1]\n\
- movs r2, 0x80\n\
- lsls r2, 2\n\
- adds r3, r2, 0\n\
- movs r2, 0xC0\n\
- lsls r2, 6\n\
- lsls r0, 10\n\
- orrs r0, r2\n\
- orrs r1, r3\n\
- orrs r0, r1\n\
- pop {r4,r5}\n\
- pop {r1}\n\
- bx r1\n\
- .pool");
+ return ((var0 << 10) | var3) | (var1 | var2);
}
-#endif // NONMATCHING
void GenerateTrainerHillFloorLayout(u16 *mapArg)
{
@@ -904,7 +858,7 @@ const u8 *GetTrainerHillTrainerScript(void)
static void ShowTrainerHillPostBattleText(void)
{
CopyTrainerHillTrainerText(TRAINER_HILL_TEXT_AFTER, gSpecialVar_LastTalked);
- sub_80982B8();
+ ShowFieldMessageFromBuffer();
}
static void CreateNPCTrainerHillParty(u16 trainerId, u8 firstMonId)
@@ -997,11 +951,11 @@ static void SetAllTrainerFlags(void)
gSaveBlock2Ptr->frontier.trainerFlags = 0xFF;
}
-// Palette never loaded, sub_81D6534 always FALSE
-void sub_81D64C0(void)
+// Palette never loaded, OnTrainerHillEReaderChallengeFloor always FALSE
+void TryLoadTrainerHillEReaderPalette(void)
{
- if (sub_81D6534() == TRUE)
- LoadPalette(sUnknown_0862A5D4, 0x70, 0x20);
+ if (OnTrainerHillEReaderChallengeFloor() == TRUE)
+ LoadPalette(sEReader_Pal, 0x70, 0x20);
}
static void GetGameSaved(void)
@@ -1020,13 +974,13 @@ static void ClearGameSaved(void)
}
// Always FALSE
-bool32 sub_81D6534(void)
+bool32 OnTrainerHillEReaderChallengeFloor(void)
{
if (!InTrainerHillChallenge() || GetCurrentTrainerHillMapId() == TRAINER_HILL_ENTRANCE)
return FALSE;
- ClearVarResult();
- if (gSpecialVar_Result == 0)
+ GetInEReaderMode();
+ if (gSpecialVar_Result == FALSE)
return FALSE;
else
return TRUE;
diff --git a/src/trainer_see.c b/src/trainer_see.c
index 68a16e208..c37f37262 100644
--- a/src/trainer_see.c
+++ b/src/trainer_see.c
@@ -559,7 +559,7 @@ static bool8 PopOutOfAshHiddenTrainer(u8 taskId, struct Task *task, struct Objec
gFieldEffectArguments[1] = trainerObj->currentCoords.y;
gFieldEffectArguments[2] = gSprites[trainerObj->spriteId].subpriority - 1;
gFieldEffectArguments[3] = 2;
- task->tOutOfAshSpriteId = FieldEffectStart(FLDEFF_POP_OUT_OF_ASH);
+ task->tOutOfAshSpriteId = FieldEffectStart(FLDEFF_ASH_PUFF);
task->tFuncId++;
}
return FALSE;
@@ -586,7 +586,7 @@ static bool8 JumpInPlaceHiddenTrainer(u8 taskId, struct Task *task, struct Objec
static bool8 WaitRevealHiddenTrainer(u8 taskId, struct Task *task, struct ObjectEvent *trainerObj)
{
- if (!FieldEffectActiveListContains(FLDEFF_POP_OUT_OF_ASH))
+ if (!FieldEffectActiveListContains(FLDEFF_ASH_PUFF))
task->tFuncId = 3;
return FALSE;
@@ -603,14 +603,14 @@ static void sub_80B44C8(u8 taskId)
struct ObjectEvent *objEvent;
// another objEvent loaded into by loadword?
- LoadWordFromTwoHalfwords(&task->data[1], (u32 *)&objEvent);
+ LoadWordFromTwoHalfwords((u16*)&task->data[1], (u32 *)&objEvent);
if (!task->data[7])
{
ObjectEventClearHeldMovement(objEvent);
task->data[7]++;
}
sTrainerSeeFuncList2[task->data[0]](taskId, task, objEvent);
- if (task->data[0] == 3 && !FieldEffectActiveListContains(FLDEFF_POP_OUT_OF_ASH))
+ if (task->data[0] == 3 && !FieldEffectActiveListContains(FLDEFF_ASH_PUFF))
{
SetTrainerMovementType(objEvent, GetTrainerFacingDirectionMovementType(objEvent->facingDirection));
TryOverrideTemplateCoordsForObjectEvent(objEvent, GetTrainerFacingDirectionMovementType(objEvent->facingDirection));
@@ -624,7 +624,7 @@ static void sub_80B44C8(u8 taskId)
void sub_80B4578(struct ObjectEvent *var)
{
- StoreWordInTwoHalfwords(&gTasks[CreateTask(sub_80B44C8, 0)].data[1], (u32)var);
+ StoreWordInTwoHalfwords((u16 *)&gTasks[CreateTask(sub_80B44C8, 0)].data[1], (u32)var);
}
void EndTrainerApproach(void)
diff --git a/src/tv.c b/src/tv.c
index 386fdb0c8..7732bb9b1 100644
--- a/src/tv.c
+++ b/src/tv.c
@@ -387,39 +387,39 @@ static const u8 *const sTVBravoTrainerBattleTowerTextGroup[] = {
};
static const u8 *const sTVContestLiveUpdatesTextGroup[] = {
- gTVContestLiveUpdatesText00,
- gTVContestLiveUpdatesText01,
- gTVContestLiveUpdatesText02,
- gTVContestLiveUpdatesText03,
- gTVContestLiveUpdatesText04,
- gTVContestLiveUpdatesText05,
- gTVContestLiveUpdatesText06,
- gTVContestLiveUpdatesText07,
- gTVContestLiveUpdatesText08,
- gTVContestLiveUpdatesText09,
- gTVContestLiveUpdatesText10,
- gTVContestLiveUpdatesText11,
- gTVContestLiveUpdatesText12,
- gTVContestLiveUpdatesText13,
- gTVContestLiveUpdatesText14,
- gTVContestLiveUpdatesText15,
- gTVContestLiveUpdatesText16,
- gTVContestLiveUpdatesText17,
- gTVContestLiveUpdatesText18,
- gTVContestLiveUpdatesText19,
- gTVContestLiveUpdatesText20,
- gTVContestLiveUpdatesText21,
- gTVContestLiveUpdatesText22,
- gTVContestLiveUpdatesText23,
- gTVContestLiveUpdatesText24,
- gTVContestLiveUpdatesText25,
- gTVContestLiveUpdatesText26,
- gTVContestLiveUpdatesText27,
- gTVContestLiveUpdatesText28,
- gTVContestLiveUpdatesText29,
- gTVContestLiveUpdatesText30,
- gTVContestLiveUpdatesText31,
- gTVContestLiveUpdatesText32
+ [CONTESTLIVE_STATE_INTRO] = ContestLiveUpdates_Text_Intro,
+ [CONTESTLIVE_STATE_WON_BOTH_ROUNDS] = ContestLiveUpdates_Text_WonBothRounds,
+ [CONTESTLIVE_STATE_BETTER_ROUND2] = ContestLiveUpdates_Text_BetterRound2,
+ [CONTESTLIVE_STATE_EQUAL_ROUNDS] = ContestLiveUpdates_Text_EqualRounds,
+ [CONTESTLIVE_STATE_BETTER_ROUND1] = ContestLiveUpdates_Text_BetterRound1,
+ [CONTESTLIVE_STATE_GOT_NERVOUS] = ContestLiveUpdates_Text_GotNervous,
+ [CONTESTLIVE_STATE_STARTLED_OTHER] = ContestLiveUpdates_Text_StartledFoes,
+ [CONTESTLIVE_STATE_USED_COMBO] = ContestLiveUpdates_Text_UsedCombo,
+ [CONTESTLIVE_STATE_EXCITING_APPEAL] = ContestLiveUpdates_Text_ExcitingAppeal,
+ [CONTESTLIVE_STATE_COOL] = ContestLiveUpdates_Text_WasCool,
+ [CONTESTLIVE_STATE_BEAUTIFUL] = ContestLiveUpdates_Text_WasBeautiful,
+ [CONTESTLIVE_STATE_CUTE] = ContestLiveUpdates_Text_WasCute,
+ [CONTESTLIVE_STATE_SMART] = ContestLiveUpdates_Text_WasSmart,
+ [CONTESTLIVE_STATE_TOUGH] = ContestLiveUpdates_Text_WasTough,
+ [CONTESTLIVE_STATE_VERY_EXCITING_APPEAL] = ContestLiveUpdates_Text_VeryExcitingAppeal,
+ [CONTESTLIVE_STATE_VERY_COOL] = ContestLiveUpdates_Text_VeryCool,
+ [CONTESTLIVE_STATE_VERY_BEAUTIFUL] = ContestLiveUpdates_Text_VeryBeautiful,
+ [CONTESTLIVE_STATE_VERY_CUTE] = ContestLiveUpdates_Text_VeryCute,
+ [CONTESTLIVE_STATE_VERY_SMART] = ContestLiveUpdates_Text_VerySmart,
+ [CONTESTLIVE_STATE_VERY_TOUGH] = ContestLiveUpdates_Text_VeryTough,
+ [CONTESTLIVE_STATE_TOOK_BREAK] = ContestLiveUpdates_Text_TookBreak,
+ [CONTESTLIVE_STATE_GOT_STARTLED] = ContestLiveUpdates_Text_GotStartled,
+ [CONTESTLIVE_STATE_USED_MOVE] = ContestLiveUpdates_Text_MoveWonderful,
+ [CONTESTLIVE_STATE_TALK_ABOUT_LOSER] = ContestLiveUpdates_Text_TalkAboutAnotherMon,
+ [CONTESTLIVE_STATE_NO_APPEALS] = ContestLiveUpdates_Text_FailedToAppeal,
+ [CONTESTLIVE_STATE_LAST_BOTH] = ContestLiveUpdates_Text_LastInBothRounds,
+ [CONTESTLIVE_STATE_NOT_EXCITING_ENOUGH] = ContestLiveUpdates_Text_NotExcitingEnough,
+ [CONTESTLIVE_STATE_LOST_AFTER_ROUND1_WIN] = ContestLiveUpdates_Text_LostAfterWinningRound1,
+ [CONTESTLIVE_STATE_NO_EXCITING_APPEALS] = ContestLiveUpdates_Text_NeverExciting,
+ [CONTESTLIVE_STATE_LOST_SMALL_MARGIN] = ContestLiveUpdates_Text_LostBySmallMargin,
+ [CONTESTLIVE_STATE_REPEATED_APPEALS] = ContestLiveUpdates_Text_RepeatedAppeals,
+ [CONTESTLIVE_STATE_LOST] = ContestLiveUpdates_Text_ValiantEffortButLost,
+ [CONTESTLIVE_STATE_OUTRO] = ContestLiveUpdates_Text_Outro
};
static const u8 *const sTVPokemonBattleUpdateTextGroup[] = {
@@ -529,7 +529,7 @@ static const u8 *const sTVFindThatGamerTextGroup[] = {
gTVFindThatGamerText03
};
-static const u8 *const sTVBreakinsNewsTextGroup[] = {
+static const u8 *const sTVBreakingNewsTextGroup[] = {
gTVBreakingNewsText00,
gTVBreakingNewsText01,
gTVBreakingNewsText02,
@@ -764,11 +764,11 @@ void ClearTVShowData(void)
for (i = 0; i < ARRAY_COUNT(gSaveBlock1Ptr->tvShows); i ++)
{
- gSaveBlock1Ptr->tvShows[i].common.kind = 0;
- gSaveBlock1Ptr->tvShows[i].common.active = 0;
- for (j = 0; j < sizeof(TVShow) - 2; j ++)
+ gSaveBlock1Ptr->tvShows[i].commonInit.kind = 0;
+ gSaveBlock1Ptr->tvShows[i].commonInit.active = 0;
+ for (j = 0; j < ARRAY_COUNT(gSaveBlock1Ptr->tvShows[i].commonInit.pad02); j ++)
{
- gSaveBlock1Ptr->tvShows[i].common.pad02[j] = 0;
+ gSaveBlock1Ptr->tvShows[i].commonInit.pad02[j] = 0;
}
}
ClearPokemonNews();
@@ -1268,19 +1268,19 @@ static void InterviewAfter_ContestLiveUpdates(void)
show2 = &gSaveBlock1Ptr->tvShows[sCurTVShowSlot];
show2->contestLiveUpdates.kind = TVSHOW_CONTEST_LIVE_UPDATES;
show2->contestLiveUpdates.active = TRUE;
- StringCopy(show2->contestLiveUpdates.playerName, gSaveBlock2Ptr->playerName);
+ StringCopy(show2->contestLiveUpdates.winningTrainerName, gSaveBlock2Ptr->playerName); // Show only begins running if player won, so always load players name
show2->contestLiveUpdates.category = gSpecialVar_ContestCategory;
- show2->contestLiveUpdates.species = GetMonData(&gPlayerParty[gContestMonPartyIndex], MON_DATA_SPECIES, NULL);
- show2->contestLiveUpdates.winningSpecies = show->contestLiveUpdates.winningSpecies;
- show2->contestLiveUpdates.appealFlags2 = show->contestLiveUpdates.appealFlags2;
- show2->contestLiveUpdates.round1Rank = show->contestLiveUpdates.round1Rank;
- show2->contestLiveUpdates.round2Rank = show->contestLiveUpdates.round2Rank;
+ show2->contestLiveUpdates.winningSpecies = GetMonData(&gPlayerParty[gContestMonPartyIndex], MON_DATA_SPECIES, NULL);
+ show2->contestLiveUpdates.losingSpecies = show->contestLiveUpdates.losingSpecies;
+ show2->contestLiveUpdates.loserAppealFlag = show->contestLiveUpdates.loserAppealFlag;
+ show2->contestLiveUpdates.round1Placing = show->contestLiveUpdates.round1Placing;
+ show2->contestLiveUpdates.round2Placing = show->contestLiveUpdates.round2Placing;
show2->contestLiveUpdates.move = show->contestLiveUpdates.move;
- show2->contestLiveUpdates.appealFlags1 = show->contestLiveUpdates.appealFlags1;
- StringCopy(show2->contestLiveUpdates.winningTrainerName, show->contestLiveUpdates.winningTrainerName);
+ show2->contestLiveUpdates.winnerAppealFlag = show->contestLiveUpdates.winnerAppealFlag;
+ StringCopy(show2->contestLiveUpdates.losingTrainerName, show->contestLiveUpdates.losingTrainerName);
tv_store_id_2x(show2);
- show2->contestLiveUpdates.language = gGameLanguage;
- show2->contestLiveUpdates.winningTrainerLanguage = show->contestLiveUpdates.winningTrainerLanguage;
+ show2->contestLiveUpdates.winningTrainerLanguage = gGameLanguage;
+ show2->contestLiveUpdates.losingTrainerLanguage = show->contestLiveUpdates.losingTrainerLanguage;
DeleteTVShowInArrayByIdx(gSaveBlock1Ptr->tvShows, LAST_TVSHOW_IDX);
}
}
@@ -1332,7 +1332,7 @@ void PutBattleUpdateOnTheAir(u8 opponentLinkPlayerId, u16 move, u16 speciesPlaye
}
}
-bool8 Put3CheersForPokeblocksOnTheAir(const u8 *partnersName, u8 flavor, u8 unused, u8 sheen, u8 language)
+bool8 Put3CheersForPokeblocksOnTheAir(const u8 *partnersName, u8 flavor, u8 color, u8 sheen, u8 language)
{
TVShow *show;
u8 name[32];
@@ -1355,7 +1355,7 @@ bool8 Put3CheersForPokeblocksOnTheAir(const u8 *partnersName, u8 flavor, u8 unus
StripExtCtrlCodes(name);
StringCopy(show->threeCheers.worstBlenderName, name);
show->threeCheers.flavor = flavor;
- show->threeCheers.unk_03_3 = unused;
+ show->threeCheers.color = color;
show->threeCheers.sheen = sheen;
tv_store_id_2x(show);
show->threeCheers.language = gGameLanguage;
@@ -1399,7 +1399,7 @@ void PutFanClubSpecialOnTheAir(void)
}
}
-void ContestLiveUpdates_BeforeInterview_1(u8 a0)
+void ContestLiveUpdates_Init(u8 round1Placing)
{
TVShow *show;
@@ -1408,12 +1408,12 @@ void ContestLiveUpdates_BeforeInterview_1(u8 a0)
if (sCurTVShowSlot != -1)
{
show = &gSaveBlock1Ptr->tvShows[LAST_TVSHOW_IDX];
- show->contestLiveUpdates.round1Rank = a0;
+ show->contestLiveUpdates.round1Placing = round1Placing;
show->contestLiveUpdates.kind = TVSHOW_CONTEST_LIVE_UPDATES;
}
}
-void ContestLiveUpdates_BeforeInterview_2(u8 a0)
+void ContestLiveUpdates_SetRound2Placing(u8 round2Placing)
{
TVShow *show;
@@ -1421,11 +1421,11 @@ void ContestLiveUpdates_BeforeInterview_2(u8 a0)
sCurTVShowSlot = FindEmptyTVSlotWithinFirstFiveShowsOfArray(gSaveBlock1Ptr->tvShows);
if (sCurTVShowSlot != -1)
{
- show->contestLiveUpdates.round2Rank = a0;
+ show->contestLiveUpdates.round2Placing = round2Placing;
}
}
-void ContestLiveUpdates_BeforeInterview_3(u8 a0)
+void ContestLiveUpdates_SetWinnerAppealFlag(u8 flag)
{
TVShow *show;
@@ -1433,11 +1433,11 @@ void ContestLiveUpdates_BeforeInterview_3(u8 a0)
sCurTVShowSlot = FindEmptyTVSlotWithinFirstFiveShowsOfArray(gSaveBlock1Ptr->tvShows);
if (sCurTVShowSlot != -1)
{
- show->contestLiveUpdates.appealFlags1 = a0;
+ show->contestLiveUpdates.winnerAppealFlag = flag;
}
}
-void ContestLiveUpdates_BeforeInterview_4(u16 a0)
+void ContestLiveUpdates_SetWinnerMoveUsed(u16 move)
{
TVShow *show;
@@ -1445,11 +1445,11 @@ void ContestLiveUpdates_BeforeInterview_4(u16 a0)
sCurTVShowSlot = FindEmptyTVSlotWithinFirstFiveShowsOfArray(gSaveBlock1Ptr->tvShows);
if (sCurTVShowSlot != -1)
{
- show->contestLiveUpdates.move = a0;
+ show->contestLiveUpdates.move = move;
}
}
-void ContestLiveUpdates_BeforeInterview_5(u8 a0, u8 a1)
+void ContestLiveUpdates_SetLoserData(u8 flag, u8 loser)
{
TVShow *show;
@@ -1457,21 +1457,21 @@ void ContestLiveUpdates_BeforeInterview_5(u8 a0, u8 a1)
sCurTVShowSlot = FindEmptyTVSlotWithinFirstFiveShowsOfArray(gSaveBlock1Ptr->tvShows);
if (sCurTVShowSlot != -1)
{
- show->contestLiveUpdates.winningSpecies = gContestMons[a1].species;
- StringCopy(show->contestLiveUpdates.winningTrainerName, gContestMons[a1].trainerName);
- StripExtCtrlCodes(show->contestLiveUpdates.winningTrainerName);
- show->contestLiveUpdates.appealFlags2 = a0;
- if (a1 + 1 > gNumLinkContestPlayers)
+ show->contestLiveUpdates.losingSpecies = gContestMons[loser].species;
+ StringCopy(show->contestLiveUpdates.losingTrainerName, gContestMons[loser].trainerName);
+ StripExtCtrlCodes(show->contestLiveUpdates.losingTrainerName);
+ show->contestLiveUpdates.loserAppealFlag = flag;
+ if (loser + 1 > gNumLinkContestPlayers)
{
- show->contestLiveUpdates.winningTrainerLanguage = gLinkPlayers[0].language;
+ show->contestLiveUpdates.losingTrainerLanguage = gLinkPlayers[0].language;
}
- else if (gGameLanguage == LANGUAGE_JAPANESE || gLinkPlayers[a1].language == LANGUAGE_JAPANESE)
+ else if (gGameLanguage == LANGUAGE_JAPANESE || gLinkPlayers[loser].language == LANGUAGE_JAPANESE)
{
- show->contestLiveUpdates.winningTrainerLanguage = LANGUAGE_JAPANESE;
+ show->contestLiveUpdates.losingTrainerLanguage = LANGUAGE_JAPANESE;
}
else
{
- show->contestLiveUpdates.winningTrainerLanguage = gLinkPlayers[a1].language;
+ show->contestLiveUpdates.losingTrainerLanguage = gLinkPlayers[loser].language;
}
}
}
@@ -1836,31 +1836,25 @@ static void TryEndMassOutbreak(u16 days)
gSaveBlock1Ptr->outbreakDaysLeft -= days;
}
-void sub_80ED950(bool8 flag)
+void RecordFishingAttemptForTV(bool8 caughtFish)
{
- if (flag)
+ if (caughtFish)
{
if (sPokemonAnglerAttemptCounters >> 8 > 4)
- {
PutFishingAdviceShowOnTheAir();
- }
+
sPokemonAnglerAttemptCounters &= 0xFF;
if (sPokemonAnglerAttemptCounters != 0xFF)
- {
sPokemonAnglerAttemptCounters += 0x01;
- }
}
else
{
if ((u8)sPokemonAnglerAttemptCounters > 4)
- {
PutFishingAdviceShowOnTheAir();
- }
+
sPokemonAnglerAttemptCounters &= 0xFF00;
if (sPokemonAnglerAttemptCounters >> 8 != 0xFF)
- {
sPokemonAnglerAttemptCounters += 0x0100;
- }
}
}
@@ -1930,7 +1924,7 @@ void sub_80EDA80(void)
}
}
-void sub_80EDB44(void)
+void TryPutTodaysRivalTrainerOnAir(void)
{
TVShow *show;
u32 i;
@@ -3167,11 +3161,11 @@ void DeleteTVShowInArrayByIdx(TVShow *shows, u8 idx)
{
u8 i;
- shows[idx].common.kind = TVSHOW_OFF_AIR;
- shows[idx].common.active = FALSE;
- for (i = 0; i < 34; i ++)
+ shows[idx].commonInit.kind = TVSHOW_OFF_AIR;
+ shows[idx].commonInit.active = FALSE;
+ for (i = 0; i < ARRAY_COUNT(shows[idx].commonInit.pad02); i++)
{
- shows[idx].common.pad02[i] = 0;
+ shows[idx].commonInit.pad02[i] = 0;
}
}
@@ -3448,7 +3442,7 @@ void ChangePokemonNickname(void)
GetMonData(&gPlayerParty[gSpecialVar_0x8004], MON_DATA_NICKNAME, gStringVar3);
GetMonData(&gPlayerParty[gSpecialVar_0x8004], MON_DATA_NICKNAME, gStringVar2);
- DoNamingScreen(3, gStringVar2, GetMonData(&gPlayerParty[gSpecialVar_0x8004], MON_DATA_SPECIES, NULL), GetMonGender(&gPlayerParty[gSpecialVar_0x8004]), GetMonData(&gPlayerParty[gSpecialVar_0x8004], MON_DATA_PERSONALITY, NULL), ChangePokemonNickname_CB);
+ DoNamingScreen(NAMING_SCREEN_NICKNAME, gStringVar2, GetMonData(&gPlayerParty[gSpecialVar_0x8004], MON_DATA_SPECIES, NULL), GetMonGender(&gPlayerParty[gSpecialVar_0x8004]), GetMonData(&gPlayerParty[gSpecialVar_0x8004], MON_DATA_PERSONALITY, NULL), ChangePokemonNickname_CB);
}
void ChangePokemonNickname_CB(void)
@@ -3464,7 +3458,7 @@ void ChangeBoxPokemonNickname(void)
boxMon = GetBoxedMonPtr(gSpecialVar_MonBoxId, gSpecialVar_MonBoxPos);
GetBoxMonData(boxMon, MON_DATA_NICKNAME, gStringVar3);
GetBoxMonData(boxMon, MON_DATA_NICKNAME, gStringVar2);
- DoNamingScreen(3, gStringVar2, GetBoxMonData(boxMon, MON_DATA_SPECIES, NULL), GetBoxMonGender(boxMon), GetBoxMonData(boxMon, MON_DATA_PERSONALITY, NULL), ChangeBoxPokemonNickname_CB);
+ DoNamingScreen(NAMING_SCREEN_NICKNAME, gStringVar2, GetBoxMonData(boxMon, MON_DATA_SPECIES, NULL), GetBoxMonGender(boxMon), GetBoxMonData(boxMon, MON_DATA_PERSONALITY, NULL), ChangeBoxPokemonNickname_CB);
}
void ChangeBoxPokemonNickname_CB(void)
@@ -3800,25 +3794,28 @@ static s8 sub_80F06D0(TVShow *tvShows)
return -1;
}
-#ifdef NONMATCHING
static void sub_80F0708(void) // FIXME: register allocation shenanigans
{
u16 i;
- TVShow *show;
+ u16 j;
for (i = 0; i < LAST_TVSHOW_IDX; i ++)
{
switch (gSaveBlock1Ptr->tvShows[i].common.kind)
{
case TVSHOW_CONTEST_LIVE_UPDATES:
- sub_80F0B24((&gSaveBlock1Ptr->tvShows[i])->contestLiveUpdates.species, i);
- sub_80F0B24((&gSaveBlock1Ptr->tvShows[i])->contestLiveUpdates.winningSpecies, i);
+ j = (&gSaveBlock1Ptr->tvShows[i])->contestLiveUpdates.winningSpecies;
+ sub_80F0B24(j, i);
+ j = (&gSaveBlock1Ptr->tvShows[i])->contestLiveUpdates.losingSpecies;
+ sub_80F0B24(j, i);
break;
case TVSHOW_3_CHEERS_FOR_POKEBLOCKS:
break;
case TVSHOW_BATTLE_UPDATE:
- sub_80F0B24((&gSaveBlock1Ptr->tvShows[i])->battleUpdate.speciesPlayer, i);
- sub_80F0B24((&gSaveBlock1Ptr->tvShows[i])->battleUpdate.speciesOpponent, i);
+ j = (&gSaveBlock1Ptr->tvShows[i])->battleUpdate.speciesPlayer;
+ sub_80F0B24(j, i);
+ j = (&gSaveBlock1Ptr->tvShows[i])->battleUpdate.speciesOpponent;
+ sub_80F0B24(j, i);
break;
case TVSHOW_FAN_CLUB_SPECIAL:
break;
@@ -3828,43 +3825,57 @@ static void sub_80F0708(void) // FIXME: register allocation shenanigans
case TVSHOW_OFF_AIR:
break;
case TVSHOW_FAN_CLUB_LETTER:
- sub_80F0B24((&gSaveBlock1Ptr->tvShows[i])->fanclubLetter.species, i);
+ j = (&gSaveBlock1Ptr->tvShows[i])->fanclubLetter.species;
+ sub_80F0B24(j, i);
break;
case TVSHOW_RECENT_HAPPENINGS:
break;
case TVSHOW_PKMN_FAN_CLUB_OPINIONS:
- sub_80F0B24((&gSaveBlock1Ptr->tvShows[i])->fanclubOpinions.species, i);
+ j = (&gSaveBlock1Ptr->tvShows[i])->fanclubOpinions.species;
+ sub_80F0B24(j, i);
break;
case TVSHOW_UNKN_SHOWTYPE_04:
- sub_80F0B24((&gSaveBlock1Ptr->tvShows[i])->unkShow04.var06, i);
+ j = (&gSaveBlock1Ptr->tvShows[i])->unkShow04.var06;
+ sub_80F0B24(j, i);
break;
case TVSHOW_NAME_RATER_SHOW:
- sub_80F0B24((&gSaveBlock1Ptr->tvShows[i])->nameRaterShow.species, i);
- sub_80F0B24((&gSaveBlock1Ptr->tvShows[i])->nameRaterShow.randomSpecies, i);
+ j = (&gSaveBlock1Ptr->tvShows[i])->nameRaterShow.species;
+ sub_80F0B24(j, i);
+ j = (&gSaveBlock1Ptr->tvShows[i])->nameRaterShow.randomSpecies;
+ sub_80F0B24(j, i);
break;
case TVSHOW_BRAVO_TRAINER_POKEMON_PROFILE:
- sub_80F0B24((&gSaveBlock1Ptr->tvShows[i])->bravoTrainer.species, i);
+ j = (&gSaveBlock1Ptr->tvShows[i])->bravoTrainer.species;
+ sub_80F0B24(j, i);
break;
case TVSHOW_BRAVO_TRAINER_BATTLE_TOWER_PROFILE:
- sub_80F0B24((&gSaveBlock1Ptr->tvShows[i])->bravoTrainerTower.species, i);
- sub_80F0B24((&gSaveBlock1Ptr->tvShows[i])->bravoTrainerTower.defeatedSpecies, i);
+ j = (&gSaveBlock1Ptr->tvShows[i])->bravoTrainerTower.species;
+ sub_80F0B24(j, i);
+ j = (&gSaveBlock1Ptr->tvShows[i])->bravoTrainerTower.defeatedSpecies;
+ sub_80F0B24(j, i);
break;
case TVSHOW_POKEMON_TODAY_CAUGHT:
- sub_80F0B24((&gSaveBlock1Ptr->tvShows[i])->pokemonToday.species, i);
+ j = (&gSaveBlock1Ptr->tvShows[i])->pokemonToday.species;
+ sub_80F0B24(j, i);
break;
case TVSHOW_SMART_SHOPPER:
break;
case TVSHOW_POKEMON_TODAY_FAILED:
- sub_80F0B24((&gSaveBlock1Ptr->tvShows[i])->pokemonTodayFailed.species, i);
- sub_80F0B24((&gSaveBlock1Ptr->tvShows[i])->pokemonTodayFailed.species2, i);
+ j = (&gSaveBlock1Ptr->tvShows[i])->pokemonTodayFailed.species;
+ sub_80F0B24(j, i);
+ j = (&gSaveBlock1Ptr->tvShows[i])->pokemonTodayFailed.species2;
+ sub_80F0B24(j, i);
break;
case TVSHOW_FISHING_ADVICE:
- sub_80F0B24((&gSaveBlock1Ptr->tvShows[i])->pokemonAngler.species, i);
+ j = (&gSaveBlock1Ptr->tvShows[i])->pokemonAngler.species;
+ sub_80F0B24(j, i);
break;
case TVSHOW_WORLD_OF_MASTERS:
- sub_80F0B24((&gSaveBlock1Ptr->tvShows[i])->worldOfMasters.species, i);
- sub_80F0B24((&gSaveBlock1Ptr->tvShows[i])->worldOfMasters.caughtPoke, i);
+ j = (&gSaveBlock1Ptr->tvShows[i])->worldOfMasters.species;
+ sub_80F0B24(j, i);
+ j = (&gSaveBlock1Ptr->tvShows[i])->worldOfMasters.caughtPoke;
+ sub_80F0B24(j, i);
break;
case TVSHOW_TODAYS_RIVAL_TRAINER:
@@ -3876,37 +3887,48 @@ static void sub_80F0708(void) // FIXME: register allocation shenanigans
case TVSHOW_FIND_THAT_GAMER:
break;
case TVSHOW_BREAKING_NEWS:
- sub_80F0B24((&gSaveBlock1Ptr->tvShows[i])->breakingNews.lastOpponentSpecies, i);
- sub_80F0B24((&gSaveBlock1Ptr->tvShows[i])->breakingNews.poke1Species, i);
+ j = (&gSaveBlock1Ptr->tvShows[i])->breakingNews.lastOpponentSpecies;
+ sub_80F0B24(j, i);
+ j = (&gSaveBlock1Ptr->tvShows[i])->breakingNews.poke1Species;
+ sub_80F0B24(j, i);
break;
case TVSHOW_SECRET_BASE_VISIT:
- sub_80F0B24((&gSaveBlock1Ptr->tvShows[i])->secretBaseVisit.species, i);
+ j = (&gSaveBlock1Ptr->tvShows[i])->secretBaseVisit.species;
+ sub_80F0B24(j, i);
break;
case TVSHOW_LOTTO_WINNER:
break;
case TVSHOW_BATTLE_SEMINAR:
- sub_80F0B24((&gSaveBlock1Ptr->tvShows[i])->battleSeminar.species, i);
- sub_80F0B24((&gSaveBlock1Ptr->tvShows[i])->battleSeminar.foeSpecies, i);
+ j = (&gSaveBlock1Ptr->tvShows[i])->battleSeminar.species;
+ sub_80F0B24(j, i);
+ j = (&gSaveBlock1Ptr->tvShows[i])->battleSeminar.foeSpecies;
+ sub_80F0B24(j, i);
break;
case TVSHOW_TRAINER_FAN_CLUB:
break;
case TVSHOW_CUTIES:
break;
case TVSHOW_FRONTIER:
- sub_80F0B24((&gSaveBlock1Ptr->tvShows[i])->frontier.species1, i);
- sub_80F0B24((&gSaveBlock1Ptr->tvShows[i])->frontier.species2, i);
- switch ((&gSaveBlock1Ptr->tvShows[i])->frontier.facility)
+ j = (&gSaveBlock1Ptr->tvShows[i])->frontier.species1;
+ sub_80F0B24(j, i);
+ j = (&gSaveBlock1Ptr->tvShows[i])->frontier.species2;
+ sub_80F0B24(j, i);
+ j = (&gSaveBlock1Ptr->tvShows[i])->frontier.facility;
+ switch (j)
{
case 3:
case 4:
break;
case 1:
case 5 ... 13:
- sub_80F0B24((&gSaveBlock1Ptr->tvShows[i])->frontier.species3, i);
+ j = (&gSaveBlock1Ptr->tvShows[i])->frontier.species3;
+ sub_80F0B24(j, i);
break;
case 2:
- sub_80F0B24((&gSaveBlock1Ptr->tvShows[i])->frontier.species3, i);
- sub_80F0B24((&gSaveBlock1Ptr->tvShows[i])->frontier.species4, i);
+ j = (&gSaveBlock1Ptr->tvShows[i])->frontier.species3;
+ sub_80F0B24(j, i);
+ j = (&gSaveBlock1Ptr->tvShows[i])->frontier.species4;
+ sub_80F0B24(j, i);
break;
}
break;
@@ -3926,444 +3948,6 @@ static void sub_80F0708(void) // FIXME: register allocation shenanigans
}
}
}
-#else
-NAKED static void sub_80F0708(void)
-{
- asm_unified("\tpush {r4-r7,lr}\n"
- "\tmov r7, r9\n"
- "\tmov r6, r8\n"
- "\tpush {r6,r7}\n"
- "\tsub sp, 0x8\n"
- "\tmovs r0, 0\n"
- "\tmov r9, r0\n"
- "_080F0716:\n"
- "\tldr r3, =gSaveBlock1Ptr\n"
- "\tldr r1, [r3]\n"
- "\tmov r4, r9\n"
- "\tlsls r2, r4, 3\n"
- "\tadds r0, r2, r4\n"
- "\tlsls r0, 2\n"
- "\tadds r1, r0\n"
- "\tldr r0, =0x000027cc\n"
- "\tadds r1, r0\n"
- "\tldrb r0, [r1]\n"
- "\tadds r7, r2, 0\n"
- "\tcmp r0, 0x29\n"
- "\tbls _080F0732\n"
- "\tb _080F0AD8\n"
- "_080F0732:\n"
- "\tlsls r0, 2\n"
- "\tldr r1, =_080F0748\n"
- "\tadds r0, r1\n"
- "\tldr r0, [r0]\n"
- "\tmov pc, r0\n"
- "\t.pool\n"
- "\t.align 2, 0\n"
- "_080F0748:\n"
- "\t.4byte _080F0AE2_break @ TVSHOW_OFF_AIR\n"
- "\t.4byte _080F0848 @ TVSHOW_FAN_CLUB_LETTER\n"
- "\t.4byte _080F0AE2_break @ TVSHOW_RECENT_HAPPENINGS\n"
- "\t.4byte _080F0860 @ TVSHOW_PKMN_FAN_CLUB_OPINIONS\n"
- "\t.4byte _080F0878 @ TVSHOW_UNKN_SHOWTYPE_04\n"
- "\t.4byte _080F0890 @ TVSHOW_NAME_RATER_SHOW\n"
- "\t.4byte _080F08BC @ TVSHOW_BRAVO_TRAINER_POKEMON_PROFILE\n"
- "\t.4byte _080F08D4 @ TVSHOW_BRAVO_TRAINER_BATTLE_TOWER_PROFILE\n"
- "\t.4byte _080F07F0 @ TVSHOW_CONTEST_LIVE_UPDATES\n"
- "\t.4byte _080F0AE2_break @ TVSHOW_3_CHEERS_FOR_POKEBLOCKS\n"
- "\t.4byte _080F081C @ TVSHOW_BATTLE_UPDATE\n"
- "\t.4byte _080F0AE2_break @ TVSHOW_FAN_CLUB_SPECIAL\n"
- "\t.4byte _080F0AE2_break @ TVSHOW_CONTEST_LIVE_UPDATES_2\n"
- "\t.4byte _080F0AD8 @ \n"
- "\t.4byte _080F0AD8 @ \n"
- "\t.4byte _080F0AD8 @ \n"
- "\t.4byte _080F0AD8 @ \n"
- "\t.4byte _080F0AD8 @ \n"
- "\t.4byte _080F0AD8 @ \n"
- "\t.4byte _080F0AD8 @ \n"
- "\t.4byte _080F0AD8 @ \n"
- "\t.4byte _080F0900 @ TVSHOW_POKEMON_TODAY_CAUGHT\n"
- "\t.4byte _080F0AE2_break @ TVSHOW_SMART_SHOPPER\n"
- "\t.4byte _080F0918 @ TVSHOW_POKEMON_TODAY_FAILED\n"
- "\t.4byte _080F0944 @ TVSHOW_FISHING_ADVICE\n"
- "\t.4byte _080F095C @ TVSHOW_WORLD_OF_MASTERS\n"
- "\t.4byte _080F0AE2_break @ TVSHOW_TODAYS_RIVAL_TRAINER\n"
- "\t.4byte _080F0AE2_break @ TVSHOW_TREND_WATCHER\n"
- "\t.4byte _080F0AE2_break @ TVSHOW_TREASURE_INVESTIGATORS\n"
- "\t.4byte _080F0AE2_break @ TVSHOW_FIND_THAT_GAMER\n"
- "\t.4byte _080F0974 @ TVSHOW_BREAKING_NEWS\n"
- "\t.4byte _080F09A0 @ TVSHOW_SECRET_BASE_VISIT\n"
- "\t.4byte _080F0AE2_break @ TVSHOW_LOTTO_WINNER\n"
- "\t.4byte _080F09C0 @ TVSHOW_BATTLE_SEMINAR\n"
- "\t.4byte _080F0AE2_break @ TVSHOW_TRAINER_FAN_CLUB\n"
- "\t.4byte _080F0AE2_break @ TVSHOW_CUTIES\n"
- "\t.4byte _080F09F4 @ TVSHOW_FRONTIER\n"
- "\t.4byte _080F0AE2_break @ TVSHOW_NUMBER_ONE\n"
- "\t.4byte _080F0AE2_break @ TVSHOW_SECRET_BASE_SECRETS\n"
- "\t.4byte _080F0AE2_break @ TVSHOW_SAFARI_FAN_CLUB\n"
- "\t.4byte _080F0AD8 @ \n"
- "\t.4byte _080F0AE2_break @ TVSHOW_MASS_OUTBREAK\n"
- "_080F07F0:\n"
- "\tldr r0, [r3]\n"
- "\tmov r1, r9\n"
- "\tadds r4, r7, r1\n"
- "\tlsls r4, 2\n"
- "\tadds r0, r4, r0\n"
- "\tldr r6, =0x000027cc\n"
- "\tadds r0, r6\n"
- "\tldrh r0, [r0, 0x12]\n"
- "\tlsls r5, r1, 24\n"
- "\tlsrs r5, 24\n"
- "\tadds r1, r5, 0\n"
- "\tstr r3, [sp, 0x4]\n"
- "\tbl sub_80F0B24\n"
- "\tldr r3, [sp, 0x4]\n"
- "\tldr r0, [r3]\n"
- "\tadds r4, r0\n"
- "\tadds r4, r6\n"
- "\tldrh r0, [r4, 0x2]\n"
- "\tb _080F09E6\n"
- "\t.pool\n"
- "_080F081C:\n"
- "\tldr r0, [r3]\n"
- "\tmov r2, r9\n"
- "\tadds r4, r7, r2\n"
- "\tlsls r4, 2\n"
- "\tadds r0, r4, r0\n"
- "\tldr r6, =0x000027cc\n"
- "\tadds r0, r6\n"
- "\tldrh r0, [r0, 0x16]\n"
- "\tlsls r5, r2, 24\n"
- "\tlsrs r5, 24\n"
- "\tadds r1, r5, 0\n"
- "\tstr r3, [sp, 0x4]\n"
- "\tbl sub_80F0B24\n"
- "\tldr r3, [sp, 0x4]\n"
- "\tldr r0, [r3]\n"
- "\tadds r4, r0\n"
- "\tadds r4, r6\n"
- "\tldrh r0, [r4, 0x2]\n"
- "\tb _080F09E6\n"
- "\t.pool\n"
- "_080F0848:\n"
- "\tldr r0, [r3]\n"
- "\tmov r4, r9\n"
- "\tadds r1, r7, r4\n"
- "\tlsls r1, 2\n"
- "\tadds r1, r0\n"
- "\tldr r0, =0x000027cc\n"
- "\tadds r1, r0\n"
- "\tldrh r0, [r1, 0x2]\n"
- "\tb _080F09B0\n"
- "\t.pool\n"
- "_080F0860:\n"
- "\tldr r0, [r3]\n"
- "\tmov r2, r9\n"
- "\tadds r1, r7, r2\n"
- "\tlsls r1, 2\n"
- "\tadds r1, r0\n"
- "\tldr r4, =0x000027cc\n"
- "\tadds r1, r4\n"
- "\tldrh r0, [r1, 0x2]\n"
- "\tlsls r1, r2, 24\n"
- "\tb _080F09B2\n"
- "\t.pool\n"
- "_080F0878:\n"
- "\tldr r0, [r3]\n"
- "\tmov r2, r9\n"
- "\tadds r1, r7, r2\n"
- "\tlsls r1, 2\n"
- "\tadds r1, r0\n"
- "\tldr r4, =0x000027cc\n"
- "\tadds r1, r4\n"
- "\tldrh r0, [r1, 0x6]\n"
- "\tlsls r1, r2, 24\n"
- "\tb _080F09B2\n"
- "\t.pool\n"
- "_080F0890:\n"
- "\tldr r0, [r3]\n"
- "\tmov r1, r9\n"
- "\tadds r4, r7, r1\n"
- "\tlsls r4, 2\n"
- "\tadds r0, r4, r0\n"
- "\tldr r6, =0x000027cc\n"
- "\tadds r0, r6\n"
- "\tldrh r0, [r0, 0x2]\n"
- "\tlsls r5, r1, 24\n"
- "\tlsrs r5, 24\n"
- "\tadds r1, r5, 0\n"
- "\tstr r3, [sp, 0x4]\n"
- "\tbl sub_80F0B24\n"
- "\tldr r3, [sp, 0x4]\n"
- "\tldr r0, [r3]\n"
- "\tadds r4, r0\n"
- "\tadds r4, r6\n"
- "\tldrh r0, [r4, 0x1C]\n"
- "\tb _080F09E6\n"
- "\t.pool\n"
- "_080F08BC:\n"
- "\tldr r0, [r3]\n"
- "\tmov r2, r9\n"
- "\tadds r1, r7, r2\n"
- "\tlsls r1, 2\n"
- "\tadds r1, r0\n"
- "\tldr r4, =0x000027cc\n"
- "\tadds r1, r4\n"
- "\tldrh r0, [r1, 0x2]\n"
- "\tlsls r1, r2, 24\n"
- "\tb _080F09B2\n"
- "\t.pool\n"
- "_080F08D4:\n"
- "\tldr r0, [r3]\n"
- "\tmov r1, r9\n"
- "\tadds r4, r7, r1\n"
- "\tlsls r4, 2\n"
- "\tadds r0, r4, r0\n"
- "\tldr r6, =0x000027cc\n"
- "\tadds r0, r6\n"
- "\tldrh r0, [r0, 0xA]\n"
- "\tlsls r5, r1, 24\n"
- "\tlsrs r5, 24\n"
- "\tadds r1, r5, 0\n"
- "\tstr r3, [sp, 0x4]\n"
- "\tbl sub_80F0B24\n"
- "\tldr r3, [sp, 0x4]\n"
- "\tldr r0, [r3]\n"
- "\tadds r4, r0\n"
- "\tadds r4, r6\n"
- "\tldrh r0, [r4, 0x14]\n"
- "\tb _080F09E6\n"
- "\t.pool\n"
- "_080F0900:\n"
- "\tldr r0, [r3]\n"
- "\tmov r2, r9\n"
- "\tadds r1, r7, r2\n"
- "\tlsls r1, 2\n"
- "\tadds r1, r0\n"
- "\tldr r4, =0x000027cc\n"
- "\tadds r1, r4\n"
- "\tldrh r0, [r1, 0x10]\n"
- "\tlsls r1, r2, 24\n"
- "\tb _080F09B2\n"
- "\t.pool\n"
- "_080F0918:\n"
- "\tldr r0, [r3]\n"
- "\tmov r1, r9\n"
- "\tadds r4, r7, r1\n"
- "\tlsls r4, 2\n"
- "\tadds r0, r4, r0\n"
- "\tldr r6, =0x000027cc\n"
- "\tadds r0, r6\n"
- "\tldrh r0, [r0, 0xC]\n"
- "\tlsls r5, r1, 24\n"
- "\tlsrs r5, 24\n"
- "\tadds r1, r5, 0\n"
- "\tstr r3, [sp, 0x4]\n"
- "\tbl sub_80F0B24\n"
- "\tldr r3, [sp, 0x4]\n"
- "\tldr r0, [r3]\n"
- "\tadds r4, r0\n"
- "\tadds r4, r6\n"
- "\tldrh r0, [r4, 0xE]\n"
- "\tb _080F09E6\n"
- "\t.pool\n"
- "_080F0944:\n"
- "\tldr r0, [r3]\n"
- "\tmov r2, r9\n"
- "\tadds r1, r7, r2\n"
- "\tlsls r1, 2\n"
- "\tadds r1, r0\n"
- "\tldr r4, =0x000027cc\n"
- "\tadds r1, r4\n"
- "\tldrh r0, [r1, 0x4]\n"
- "\tlsls r1, r2, 24\n"
- "\tb _080F09B2\n"
- "\t.pool\n"
- "_080F095C:\n"
- "\tldr r0, [r3]\n"
- "\tmov r1, r9\n"
- "\tadds r4, r7, r1\n"
- "\tlsls r4, 2\n"
- "\tadds r0, r4, r0\n"
- "\tldr r6, =0x000027cc\n"
- "\tadds r0, r6\n"
- "\tldrh r0, [r0, 0x8]\n"
- "\tb _080F09D0\n"
- "\t.pool\n"
- "_080F0974:\n"
- "\tldr r0, [r3]\n"
- "\tmov r2, r9\n"
- "\tadds r4, r7, r2\n"
- "\tlsls r4, 2\n"
- "\tadds r0, r4, r0\n"
- "\tldr r6, =0x000027cc\n"
- "\tadds r0, r6\n"
- "\tldrh r0, [r0, 0x2]\n"
- "\tlsls r5, r2, 24\n"
- "\tlsrs r5, 24\n"
- "\tadds r1, r5, 0\n"
- "\tstr r3, [sp, 0x4]\n"
- "\tbl sub_80F0B24\n"
- "\tldr r3, [sp, 0x4]\n"
- "\tldr r0, [r3]\n"
- "\tadds r4, r0\n"
- "\tadds r4, r6\n"
- "\tldrh r0, [r4, 0xA]\n"
- "\tb _080F09E6\n"
- "\t.pool\n"
- "_080F09A0:\n"
- "\tldr r0, [r3]\n"
- "\tmov r4, r9\n"
- "\tadds r1, r7, r4\n"
- "\tlsls r1, 2\n"
- "\tadds r1, r0\n"
- "\tldr r0, =0x000027cc\n"
- "\tadds r1, r0\n"
- "\tldrh r0, [r1, 0x8]\n"
- "_080F09B0:\n"
- "\tlsls r1, r4, 24\n"
- "_080F09B2:\n"
- "\tlsrs r1, 24\n"
- "\tbl sub_80F0B24\n"
- "\tb _080F0AE2_break\n"
- "\t.pool\n"
- "_080F09C0:\n"
- "\tldr r0, [r3]\n"
- "\tmov r1, r9\n"
- "\tadds r4, r7, r1\n"
- "\tlsls r4, 2\n"
- "\tadds r0, r4, r0\n"
- "\tldr r6, =0x000027cc\n"
- "\tadds r0, r6\n"
- "\tldrh r0, [r0, 0x6]\n"
- "_080F09D0:\n"
- "\tlsls r5, r1, 24\n"
- "\tlsrs r5, 24\n"
- "\tadds r1, r5, 0\n"
- "\tstr r3, [sp, 0x4]\n"
- "\tbl sub_80F0B24\n"
- "\tldr r3, [sp, 0x4]\n"
- "\tldr r0, [r3]\n"
- "\tadds r4, r0\n"
- "\tadds r4, r6\n"
- "\tldrh r0, [r4, 0x4]\n"
- "_080F09E6:\n"
- "\tadds r1, r5, 0\n"
- "\tbl sub_80F0B24\n"
- "\tb _080F0AE2_break\n"
- "\t.pool\n"
- "_080F09F4:\n"
- "\tldr r0, [r3]\n"
- "\tmov r2, r9\n"
- "\tadds r4, r7, r2\n"
- "\tlsls r4, 2\n"
- "\tadds r0, r4, r0\n"
- "\tldr r5, =0x000027cc\n"
- "\tadds r0, r5\n"
- "\tldrh r0, [r0, 0x4]\n"
- "\tlsls r2, 24\n"
- "\tmov r8, r2\n"
- "\tlsrs r6, r2, 24\n"
- "\tadds r1, r6, 0\n"
- "\tstr r3, [sp, 0x4]\n"
- "\tbl sub_80F0B24\n"
- "\tldr r3, [sp, 0x4]\n"
- "\tldr r0, [r3]\n"
- "\tadds r0, r4, r0\n"
- "\tadds r0, r5\n"
- "\tldrh r0, [r0, 0x6]\n"
- "\tadds r1, r6, 0\n"
- "\tbl sub_80F0B24\n"
- "\tldr r3, [sp, 0x4]\n"
- "\tldr r0, [r3]\n"
- "\tadds r4, r0\n"
- "\tadds r4, r5\n"
- "\tldrb r0, [r4, 0xD]\n"
- "\tsubs r0, 0x1\n"
- "\tmov r6, r8\n"
- "\tcmp r0, 0xC\n"
- "\tbhi _080F0AE2_break\n"
- "\tlsls r0, 2\n"
- "\tldr r1, =_080F0A48\n"
- "\tadds r0, r1\n"
- "\tldr r0, [r0]\n"
- "\tmov pc, r0\n"
- "\t.pool\n"
- "\t.align 2, 0\n"
- "_080F0A48:\n"
- "\t.4byte _080F0A7C\n"
- "\t.4byte _080F0AA0\n"
- "\t.4byte _080F0AE2_break\n"
- "\t.4byte _080F0AE2_break\n"
- "\t.4byte _080F0A7C\n"
- "\t.4byte _080F0A7C\n"
- "\t.4byte _080F0A7C\n"
- "\t.4byte _080F0A7C\n"
- "\t.4byte _080F0A7C\n"
- "\t.4byte _080F0A7C\n"
- "\t.4byte _080F0A7C\n"
- "\t.4byte _080F0A7C\n"
- "\t.4byte _080F0A7C\n"
- "_080F0A7C:\n"
- "\tldr r0, =gSaveBlock1Ptr\n"
- "\tldr r1, [r0]\n"
- "\tmov r4, r9\n"
- "\tadds r0, r7, r4\n"
- "\tlsls r0, 2\n"
- "\tadds r0, r1\n"
- "\tldr r1, =0x000027cc\n"
- "\tadds r0, r1\n"
- "\tldrh r0, [r0, 0x8]\n"
- "\tlsrs r1, r6, 24\n"
- "\tbl sub_80F0B24\n"
- "\tb _080F0AE2_break\n"
- "\t.pool\n"
- "_080F0AA0:\n"
- "\tldr r2, =gSaveBlock1Ptr\n"
- "\tldr r0, [r2]\n"
- "\tmov r1, r9\n"
- "\tadds r4, r7, r1\n"
- "\tlsls r4, 2\n"
- "\tadds r0, r4, r0\n"
- "\tldr r5, =0x000027cc\n"
- "\tadds r0, r5\n"
- "\tldrh r0, [r0, 0x8]\n"
- "\tlsrs r6, 24\n"
- "\tadds r1, r6, 0\n"
- "\tstr r2, [sp]\n"
- "\tbl sub_80F0B24\n"
- "\tldr r2, [sp]\n"
- "\tldr r0, [r2]\n"
- "\tadds r4, r0\n"
- "\tadds r4, r5\n"
- "\tldrh r0, [r4, 0xA]\n"
- "\tadds r1, r6, 0\n"
- "\tbl sub_80F0B24\n"
- "\tb _080F0AE2_break\n"
- "\t.pool\n"
- "_080F0AD8:\n"
- "\tmov r2, r9\n"
- "\tlsls r0, r2, 24\n"
- "\tlsrs r0, 24\n"
- "\tbl SetTvShowInactive\n"
- "_080F0AE2_break:\n"
- "\tmov r0, r9\n"
- "\tadds r0, 0x1\n"
- "\tlsls r0, 16\n"
- "\tlsrs r0, 16\n"
- "\tmov r9, r0\n"
- "\tcmp r0, 0x17\n"
- "\tbhi _080F0AF2\n"
- "\tb _080F0716\n"
- "_080F0AF2:\n"
- "\tadd sp, 0x8\n"
- "\tpop {r3,r4}\n"
- "\tmov r8, r3\n"
- "\tmov r9, r4\n"
- "\tpop {r4-r7}\n"
- "\tpop {r0}\n"
- "\tbx r0");
-}
-#endif
void SetTvShowInactive(u8 showIdx)
{
@@ -4717,8 +4301,8 @@ static void sub_80F12A4(TVShow *shows)
curShow->bravoTrainerTower.pokemonNameLanguage = TV_GetStringLanguage(curShow->bravoTrainerTower.pokemonName);
break;
case TVSHOW_CONTEST_LIVE_UPDATES:
- curShow->contestLiveUpdates.language = TV_GetStringLanguage(curShow->contestLiveUpdates.playerName);
curShow->contestLiveUpdates.winningTrainerLanguage = TV_GetStringLanguage(curShow->contestLiveUpdates.winningTrainerName);
+ curShow->contestLiveUpdates.losingTrainerLanguage = TV_GetStringLanguage(curShow->contestLiveUpdates.losingTrainerName);
break;
case TVSHOW_3_CHEERS_FOR_POKEBLOCKS:
curShow->threeCheers.language = TV_GetStringLanguage(curShow->threeCheers.playerName);
@@ -5583,6 +5167,12 @@ static void DoTVShowPokemonNewsMassOutbreak(void)
ShowFieldMessage(sTVMassOutbreakTextGroup[sTVShowState]);
}
+// TV Show that plays after a Link Contest.
+// First talks about the winner and something they did, then about a losing player and something they did
+// The show is only generated when the player wins, but can be record mixed to other games
+// Each state buffers any needed data for a message to print from sTVContestLiveUpdatesTextGroup
+// Many cases in this function are identical, and its size can be reduced a good deal by collapsing them
+// Can't get this to match while collapsing them though
static void DoTVShowPokemonContestLiveUpdates(void)
{
TVShow *show;
@@ -5593,339 +5183,338 @@ static void DoTVShowPokemonContestLiveUpdates(void)
state = sTVShowState;
switch (state)
{
- case 0:
- BufferContestName(gStringVar1, show->contestLiveUpdates.category);
- StringCopy(gStringVar2, gSpeciesNames[show->contestLiveUpdates.species]);
- TVShowConvertInternationalString(gStringVar3, show->contestLiveUpdates.playerName, show->contestLiveUpdates.language);
- if (show->contestLiveUpdates.round1Rank == show->contestLiveUpdates.round2Rank)
- {
- if (show->contestLiveUpdates.round1Rank == 0)
- {
- sTVShowState = 1;
- }
- else
- {
- sTVShowState = 3;
- }
- }
- else if (show->contestLiveUpdates.round1Rank > show->contestLiveUpdates.round2Rank)
+ case CONTESTLIVE_STATE_INTRO:
+ BufferContestName(gStringVar1, show->contestLiveUpdates.category);
+ StringCopy(gStringVar2, gSpeciesNames[show->contestLiveUpdates.winningSpecies]);
+ TVShowConvertInternationalString(gStringVar3, show->contestLiveUpdates.winningTrainerName, show->contestLiveUpdates.winningTrainerLanguage);
+ if (show->contestLiveUpdates.round1Placing == show->contestLiveUpdates.round2Placing)
+ {
+ if (show->contestLiveUpdates.round1Placing == 0)
{
- sTVShowState = 2;
+ sTVShowState = CONTESTLIVE_STATE_WON_BOTH_ROUNDS;
}
else
{
- sTVShowState = 4;
+ sTVShowState = CONTESTLIVE_STATE_EQUAL_ROUNDS;
}
+ }
+ else if (show->contestLiveUpdates.round1Placing > show->contestLiveUpdates.round2Placing)
+ {
+ sTVShowState = CONTESTLIVE_STATE_BETTER_ROUND2;
+ }
+ else
+ {
+ sTVShowState = CONTESTLIVE_STATE_BETTER_ROUND1;
+ }
+ break;
+ case CONTESTLIVE_STATE_WON_BOTH_ROUNDS:
+ StringCopy(gStringVar2, gSpeciesNames[show->contestLiveUpdates.winningSpecies]);
+ switch (show->contestLiveUpdates.winnerAppealFlag)
+ {
+ case CONTESTLIVE_FLAG_EXCITING_APPEAL:
+ sTVShowState = CONTESTLIVE_STATE_EXCITING_APPEAL;
break;
- case 1:
- StringCopy(gStringVar2, gSpeciesNames[show->contestLiveUpdates.species]);
- switch (show->contestLiveUpdates.appealFlags1)
- {
- case 0x01:
- sTVShowState = 8;
- break;
- case 0x02:
- sTVShowState = 5;
- break;
- case 0x04:
- sTVShowState = 14;
- break;
- case 0x08:
- sTVShowState = 7;
- break;
- case 0x10:
- sTVShowState = 6;
- break;
- case 0x20:
- sTVShowState = 20;
- break;
- case 0x40:
- sTVShowState = 21;
- break;
- case 0x80:
- sTVShowState = 22;
- break;
- }
+ case CONTESTLIVE_FLAG_GOT_NERVOUS:
+ sTVShowState = CONTESTLIVE_STATE_GOT_NERVOUS;
break;
- case 2:
- StringCopy(gStringVar2, gSpeciesNames[show->contestLiveUpdates.species]);
- switch (show->contestLiveUpdates.appealFlags1)
- {
- case 0x01:
- sTVShowState = 8;
- break;
- case 0x02:
- sTVShowState = 5;
- break;
- case 0x04:
- sTVShowState = 14;
- break;
- case 0x08:
- sTVShowState = 7;
- break;
- case 0x10:
- sTVShowState = 6;
- break;
- case 0x20:
- sTVShowState = 20;
- break;
- case 0x40:
- sTVShowState = 21;
- break;
- case 0x80:
- sTVShowState = 22;
- break;
- }
+ case CONTESTLIVE_FLAG_MAXED_EXCITEMENT:
+ sTVShowState = CONTESTLIVE_STATE_VERY_EXCITING_APPEAL;
break;
- case 3:
- StringCopy(gStringVar2, gSpeciesNames[show->contestLiveUpdates.species]);
- TVShowConvertInternationalString(gStringVar3, show->contestLiveUpdates.playerName, show->contestLiveUpdates.language);
- switch (show->contestLiveUpdates.appealFlags1)
- {
- case 0x01:
- sTVShowState = 8;
- break;
- case 0x02:
- sTVShowState = 5;
- break;
- case 0x04:
- sTVShowState = 14;
- break;
- case 0x08:
- sTVShowState = 7;
- break;
- case 0x10:
- sTVShowState = 6;
- break;
- case 0x20:
- sTVShowState = 20;
- break;
- case 0x40:
- sTVShowState = 21;
- break;
- case 0x80:
- sTVShowState = 22;
- break;
- }
+ case CONTESTLIVE_FLAG_USED_COMBO:
+ sTVShowState = CONTESTLIVE_STATE_USED_COMBO;
break;
- case 4:
- switch (show->contestLiveUpdates.category)
- {
- case 0:
- StringCopy(gStringVar1, gText_Cool);
- break;
- case 1:
- StringCopy(gStringVar1, gText_Beauty);
- break;
- case 2:
- StringCopy(gStringVar1, gText_Cute);
- break;
- case 3:
- StringCopy(gStringVar1, gText_Smart);
- break;
- case 4:
- StringCopy(gStringVar1, gText_Tough);
- break;
- }
- StringCopy(gStringVar2, gSpeciesNames[show->contestLiveUpdates.species]);
- switch (show->contestLiveUpdates.appealFlags1)
- {
- case 0x01:
- sTVShowState = 8;
- break;
- case 0x02:
- sTVShowState = 5;
- break;
- case 0x04:
- sTVShowState = 14;
- break;
- case 0x08:
- sTVShowState = 7;
- break;
- case 0x10:
- sTVShowState = 6;
- break;
- case 0x20:
- sTVShowState = 20;
- break;
- case 0x40:
- sTVShowState = 21;
- break;
- case 0x80:
- sTVShowState = 22;
- break;
- }
+ case CONTESTLIVE_FLAG_STARTLED_OTHER:
+ sTVShowState = CONTESTLIVE_STATE_STARTLED_OTHER;
break;
- case 5:
- StringCopy(gStringVar2, gSpeciesNames[show->contestLiveUpdates.species]);
- sTVShowState = 23;
+ case CONTESTLIVE_FLAG_SKIPPED_TURN:
+ sTVShowState = CONTESTLIVE_STATE_TOOK_BREAK;
break;
- case 6:
- StringCopy(gStringVar2, gSpeciesNames[show->contestLiveUpdates.species]);
- sTVShowState = 23;
+ case CONTESTLIVE_FLAG_GOT_STARTLED:
+ sTVShowState = CONTESTLIVE_STATE_GOT_STARTLED;
break;
- case 7:
- StringCopy(gStringVar2, gSpeciesNames[show->contestLiveUpdates.species]);
- sTVShowState = 23;
+ case CONTESTLIVE_FLAG_MADE_APPEAL:
+ sTVShowState = CONTESTLIVE_STATE_USED_MOVE;
break;
- case 8:
- StringCopy(gStringVar2, gSpeciesNames[show->contestLiveUpdates.species]);
- switch (show->contestLiveUpdates.category)
- {
- case 0:
- sTVShowState = 9;
- break;
- case 1:
- sTVShowState = 10;
- break;
- case 2:
- sTVShowState = 11;
- break;
- case 3:
- sTVShowState = 12;
- break;
- case 4:
- sTVShowState = 13;
- break;
- }
+ }
+ break;
+ case CONTESTLIVE_STATE_BETTER_ROUND2:
+ StringCopy(gStringVar2, gSpeciesNames[show->contestLiveUpdates.winningSpecies]);
+ switch (show->contestLiveUpdates.winnerAppealFlag)
+ {
+ case CONTESTLIVE_FLAG_EXCITING_APPEAL:
+ sTVShowState = CONTESTLIVE_STATE_EXCITING_APPEAL;
break;
- case 9:
- StringCopy(gStringVar2, gSpeciesNames[show->contestLiveUpdates.species]);
- sTVShowState = 23;
+ case CONTESTLIVE_FLAG_GOT_NERVOUS:
+ sTVShowState = CONTESTLIVE_STATE_GOT_NERVOUS;
break;
- case 10:
- StringCopy(gStringVar2, gSpeciesNames[show->contestLiveUpdates.species]);
- sTVShowState = 23;
+ case CONTESTLIVE_FLAG_MAXED_EXCITEMENT:
+ sTVShowState = CONTESTLIVE_STATE_VERY_EXCITING_APPEAL;
break;
- case 11:
- StringCopy(gStringVar2, gSpeciesNames[show->contestLiveUpdates.species]);
- sTVShowState = 23;
+ case CONTESTLIVE_FLAG_USED_COMBO:
+ sTVShowState = CONTESTLIVE_STATE_USED_COMBO;
break;
- case 12:
- StringCopy(gStringVar2, gSpeciesNames[show->contestLiveUpdates.species]);
- sTVShowState = 23;
+ case CONTESTLIVE_FLAG_STARTLED_OTHER:
+ sTVShowState = CONTESTLIVE_STATE_STARTLED_OTHER;
break;
- case 13:
- StringCopy(gStringVar2, gSpeciesNames[show->contestLiveUpdates.species]);
- sTVShowState = 23;
+ case CONTESTLIVE_FLAG_SKIPPED_TURN:
+ sTVShowState = CONTESTLIVE_STATE_TOOK_BREAK;
break;
- case 14:
- StringCopy(gStringVar2, gSpeciesNames[show->contestLiveUpdates.species]);
- switch (show->contestLiveUpdates.category)
- {
- case 0:
- sTVShowState = 15;
- break;
- case 1:
- sTVShowState = 16;
- break;
- case 2:
- sTVShowState = 17;
- break;
- case 3:
- sTVShowState = 18;
- break;
- case 4:
- sTVShowState = 19;
- break;
- }
+ case CONTESTLIVE_FLAG_GOT_STARTLED:
+ sTVShowState = CONTESTLIVE_STATE_GOT_STARTLED;
break;
- case 15:
- StringCopy(gStringVar2, gSpeciesNames[show->contestLiveUpdates.species]);
- sTVShowState = 23;
+ case CONTESTLIVE_FLAG_MADE_APPEAL:
+ sTVShowState = CONTESTLIVE_STATE_USED_MOVE;
break;
- case 16:
- StringCopy(gStringVar2, gSpeciesNames[show->contestLiveUpdates.species]);
- sTVShowState = 23;
+ }
+ break;
+ case CONTESTLIVE_STATE_EQUAL_ROUNDS:
+ StringCopy(gStringVar2, gSpeciesNames[show->contestLiveUpdates.winningSpecies]);
+ TVShowConvertInternationalString(gStringVar3, show->contestLiveUpdates.winningTrainerName, show->contestLiveUpdates.winningTrainerLanguage);
+ switch (show->contestLiveUpdates.winnerAppealFlag)
+ {
+ case CONTESTLIVE_FLAG_EXCITING_APPEAL:
+ sTVShowState = CONTESTLIVE_STATE_EXCITING_APPEAL;
break;
- case 17:
- StringCopy(gStringVar2, gSpeciesNames[show->contestLiveUpdates.species]);
- sTVShowState = 23;
+ case CONTESTLIVE_FLAG_GOT_NERVOUS:
+ sTVShowState = CONTESTLIVE_STATE_GOT_NERVOUS;
break;
- case 18:
- StringCopy(gStringVar2, gSpeciesNames[show->contestLiveUpdates.species]);
- sTVShowState = 23;
- break;
- case 19:
- StringCopy(gStringVar2, gSpeciesNames[show->contestLiveUpdates.species]);
- sTVShowState = 23;
- break;
- case 20:
- StringCopy(gStringVar2, gSpeciesNames[show->contestLiveUpdates.species]);
- sTVShowState = 23;
- break;
- case 21:
- StringCopy(gStringVar2, gSpeciesNames[show->contestLiveUpdates.species]);
- sTVShowState = 23;
- break;
- case 22:
- StringCopy(gStringVar2, gSpeciesNames[show->contestLiveUpdates.species]);
- StringCopy(gStringVar3, gMoveNames[show->contestLiveUpdates.move]);
- sTVShowState = 23;
- break;
- case 23:
- StringCopy(gStringVar1, gSpeciesNames[show->contestLiveUpdates.species]);
- TVShowConvertInternationalString(gStringVar2, show->contestLiveUpdates.winningTrainerName, show->contestLiveUpdates.winningTrainerLanguage);
- StringCopy(gStringVar3, gSpeciesNames[show->contestLiveUpdates.winningSpecies]);
- switch (show->contestLiveUpdates.appealFlags2)
- {
- case 0x01:
- sTVShowState = 31;
- break;
- case 0x02:
- sTVShowState = 30;
- break;
- case 0x04:
- sTVShowState = 29;
- break;
- case 0x08:
- sTVShowState = 28;
- break;
- case 0x10:
- sTVShowState = 27;
- break;
- case 0x20:
- sTVShowState = 26;
- break;
- case 0x40:
- sTVShowState = 25;
- break;
- case 0x80:
- sTVShowState = 24;
- break;
- }
+ case CONTESTLIVE_FLAG_MAXED_EXCITEMENT:
+ sTVShowState = CONTESTLIVE_STATE_VERY_EXCITING_APPEAL;
break;
- case 24:
- StringCopy(gStringVar1, gSpeciesNames[show->contestLiveUpdates.winningSpecies]);
- sTVShowState = 32;
+ case CONTESTLIVE_FLAG_USED_COMBO:
+ sTVShowState = CONTESTLIVE_STATE_USED_COMBO;
break;
- case 25:
- TVShowConvertInternationalString(gStringVar1, show->contestLiveUpdates.winningTrainerName, show->contestLiveUpdates.winningTrainerLanguage);
- StringCopy(gStringVar2, gSpeciesNames[show->contestLiveUpdates.winningSpecies]);
- sTVShowState = 32;
+ case CONTESTLIVE_FLAG_STARTLED_OTHER:
+ sTVShowState = CONTESTLIVE_STATE_STARTLED_OTHER;
break;
- case 28:
- sTVShowState = 32;
+ case CONTESTLIVE_FLAG_SKIPPED_TURN:
+ sTVShowState = CONTESTLIVE_STATE_TOOK_BREAK;
break;
- case 29:
- TVShowConvertInternationalString(gStringVar1, show->contestLiveUpdates.playerName, show->contestLiveUpdates.language);
- StringCopy(gStringVar2, gSpeciesNames[show->contestLiveUpdates.species]);
- TVShowConvertInternationalString(gStringVar3, show->contestLiveUpdates.winningTrainerName, show->contestLiveUpdates.winningTrainerLanguage);
- sTVShowState = 32;
+ case CONTESTLIVE_FLAG_GOT_STARTLED:
+ sTVShowState = CONTESTLIVE_STATE_GOT_STARTLED;
break;
- case 26:
- case 27:
- case 30:
- case 31:
- TVShowConvertInternationalString(gStringVar1, show->contestLiveUpdates.winningTrainerName, show->contestLiveUpdates.winningTrainerLanguage);
- sTVShowState = 32;
+ case CONTESTLIVE_FLAG_MADE_APPEAL:
+ sTVShowState = CONTESTLIVE_STATE_USED_MOVE;
break;
- case 32:
-
- TVShowConvertInternationalString(gStringVar1, show->contestLiveUpdates.playerName, show->contestLiveUpdates.language);
- StringCopy(gStringVar2, gSpeciesNames[show->contestLiveUpdates.species]);
- TVShowDone();
+ }
+ break;
+ case CONTESTLIVE_STATE_BETTER_ROUND1:
+ switch (show->contestLiveUpdates.category)
+ {
+ case CONTEST_CATEGORY_COOL:
+ StringCopy(gStringVar1, gText_Cool);
break;
+ case CONTEST_CATEGORY_BEAUTY:
+ StringCopy(gStringVar1, gText_Beauty);
+ break;
+ case CONTEST_CATEGORY_CUTE:
+ StringCopy(gStringVar1, gText_Cute);
+ break;
+ case CONTEST_CATEGORY_SMART:
+ StringCopy(gStringVar1, gText_Smart);
+ break;
+ case CONTEST_CATEGORY_TOUGH:
+ StringCopy(gStringVar1, gText_Tough);
+ break;
+ }
+ StringCopy(gStringVar2, gSpeciesNames[show->contestLiveUpdates.winningSpecies]);
+ switch (show->contestLiveUpdates.winnerAppealFlag)
+ {
+ case CONTESTLIVE_FLAG_EXCITING_APPEAL:
+ sTVShowState = CONTESTLIVE_STATE_EXCITING_APPEAL;
+ break;
+ case CONTESTLIVE_FLAG_GOT_NERVOUS:
+ sTVShowState = CONTESTLIVE_STATE_GOT_NERVOUS;
+ break;
+ case CONTESTLIVE_FLAG_MAXED_EXCITEMENT:
+ sTVShowState = CONTESTLIVE_STATE_VERY_EXCITING_APPEAL;
+ break;
+ case CONTESTLIVE_FLAG_USED_COMBO:
+ sTVShowState = CONTESTLIVE_STATE_USED_COMBO;
+ break;
+ case CONTESTLIVE_FLAG_STARTLED_OTHER:
+ sTVShowState = CONTESTLIVE_STATE_STARTLED_OTHER;
+ break;
+ case CONTESTLIVE_FLAG_SKIPPED_TURN:
+ sTVShowState = CONTESTLIVE_STATE_TOOK_BREAK;
+ break;
+ case CONTESTLIVE_FLAG_GOT_STARTLED:
+ sTVShowState = CONTESTLIVE_STATE_GOT_STARTLED;
+ break;
+ case CONTESTLIVE_FLAG_MADE_APPEAL:
+ sTVShowState = CONTESTLIVE_STATE_USED_MOVE;
+ break;
+ }
+ break;
+ case CONTESTLIVE_STATE_GOT_NERVOUS:
+ StringCopy(gStringVar2, gSpeciesNames[show->contestLiveUpdates.winningSpecies]);
+ sTVShowState = CONTESTLIVE_STATE_TALK_ABOUT_LOSER;
+ break;
+ case CONTESTLIVE_STATE_STARTLED_OTHER:
+ StringCopy(gStringVar2, gSpeciesNames[show->contestLiveUpdates.winningSpecies]);
+ sTVShowState = CONTESTLIVE_STATE_TALK_ABOUT_LOSER;
+ break;
+ case CONTESTLIVE_STATE_USED_COMBO:
+ StringCopy(gStringVar2, gSpeciesNames[show->contestLiveUpdates.winningSpecies]);
+ sTVShowState = CONTESTLIVE_STATE_TALK_ABOUT_LOSER;
+ break;
+ case CONTESTLIVE_STATE_EXCITING_APPEAL:
+ StringCopy(gStringVar2, gSpeciesNames[show->contestLiveUpdates.winningSpecies]);
+ switch (show->contestLiveUpdates.category)
+ {
+ case CONTEST_CATEGORY_COOL:
+ sTVShowState = CONTESTLIVE_STATE_COOL;
+ break;
+ case CONTEST_CATEGORY_BEAUTY:
+ sTVShowState = CONTESTLIVE_STATE_BEAUTIFUL;
+ break;
+ case CONTEST_CATEGORY_CUTE:
+ sTVShowState = CONTESTLIVE_STATE_CUTE;
+ break;
+ case CONTEST_CATEGORY_SMART:
+ sTVShowState = CONTESTLIVE_STATE_SMART;
+ break;
+ case CONTEST_CATEGORY_TOUGH:
+ sTVShowState = CONTESTLIVE_STATE_TOUGH;
+ break;
+ }
+ break;
+ case CONTESTLIVE_STATE_COOL:
+ StringCopy(gStringVar2, gSpeciesNames[show->contestLiveUpdates.winningSpecies]);
+ sTVShowState = CONTESTLIVE_STATE_TALK_ABOUT_LOSER;
+ break;
+ case CONTESTLIVE_STATE_BEAUTIFUL:
+ StringCopy(gStringVar2, gSpeciesNames[show->contestLiveUpdates.winningSpecies]);
+ sTVShowState = CONTESTLIVE_STATE_TALK_ABOUT_LOSER;
+ break;
+ case CONTESTLIVE_STATE_CUTE:
+ StringCopy(gStringVar2, gSpeciesNames[show->contestLiveUpdates.winningSpecies]);
+ sTVShowState = CONTESTLIVE_STATE_TALK_ABOUT_LOSER;
+ break;
+ case CONTESTLIVE_STATE_SMART:
+ StringCopy(gStringVar2, gSpeciesNames[show->contestLiveUpdates.winningSpecies]);
+ sTVShowState = CONTESTLIVE_STATE_TALK_ABOUT_LOSER;
+ break;
+ case CONTESTLIVE_STATE_TOUGH:
+ StringCopy(gStringVar2, gSpeciesNames[show->contestLiveUpdates.winningSpecies]);
+ sTVShowState = CONTESTLIVE_STATE_TALK_ABOUT_LOSER;
+ break;
+ case CONTESTLIVE_STATE_VERY_EXCITING_APPEAL:
+ StringCopy(gStringVar2, gSpeciesNames[show->contestLiveUpdates.winningSpecies]);
+ switch (show->contestLiveUpdates.category)
+ {
+ case CONTEST_CATEGORY_COOL:
+ sTVShowState = CONTESTLIVE_STATE_VERY_COOL;
+ break;
+ case CONTEST_CATEGORY_BEAUTY:
+ sTVShowState = CONTESTLIVE_STATE_VERY_BEAUTIFUL;
+ break;
+ case CONTEST_CATEGORY_CUTE:
+ sTVShowState = CONTESTLIVE_STATE_VERY_CUTE;
+ break;
+ case CONTEST_CATEGORY_SMART:
+ sTVShowState = CONTESTLIVE_STATE_VERY_SMART;
+ break;
+ case CONTEST_CATEGORY_TOUGH:
+ sTVShowState = CONTESTLIVE_STATE_VERY_TOUGH;
+ break;
+ }
+ break;
+ case CONTESTLIVE_STATE_VERY_COOL:
+ StringCopy(gStringVar2, gSpeciesNames[show->contestLiveUpdates.winningSpecies]);
+ sTVShowState = CONTESTLIVE_STATE_TALK_ABOUT_LOSER;
+ break;
+ case CONTESTLIVE_STATE_VERY_BEAUTIFUL:
+ StringCopy(gStringVar2, gSpeciesNames[show->contestLiveUpdates.winningSpecies]);
+ sTVShowState = CONTESTLIVE_STATE_TALK_ABOUT_LOSER;
+ break;
+ case CONTESTLIVE_STATE_VERY_CUTE:
+ StringCopy(gStringVar2, gSpeciesNames[show->contestLiveUpdates.winningSpecies]);
+ sTVShowState = CONTESTLIVE_STATE_TALK_ABOUT_LOSER;
+ break;
+ case CONTESTLIVE_STATE_VERY_SMART:
+ StringCopy(gStringVar2, gSpeciesNames[show->contestLiveUpdates.winningSpecies]);
+ sTVShowState = CONTESTLIVE_STATE_TALK_ABOUT_LOSER;
+ break;
+ case CONTESTLIVE_STATE_VERY_TOUGH:
+ StringCopy(gStringVar2, gSpeciesNames[show->contestLiveUpdates.winningSpecies]);
+ sTVShowState = CONTESTLIVE_STATE_TALK_ABOUT_LOSER;
+ break;
+ case CONTESTLIVE_STATE_TOOK_BREAK:
+ StringCopy(gStringVar2, gSpeciesNames[show->contestLiveUpdates.winningSpecies]);
+ sTVShowState = CONTESTLIVE_STATE_TALK_ABOUT_LOSER;
+ break;
+ case CONTESTLIVE_STATE_GOT_STARTLED:
+ StringCopy(gStringVar2, gSpeciesNames[show->contestLiveUpdates.winningSpecies]);
+ sTVShowState = CONTESTLIVE_STATE_TALK_ABOUT_LOSER;
+ break;
+ case CONTESTLIVE_STATE_USED_MOVE:
+ StringCopy(gStringVar2, gSpeciesNames[show->contestLiveUpdates.winningSpecies]);
+ StringCopy(gStringVar3, gMoveNames[show->contestLiveUpdates.move]);
+ sTVShowState = CONTESTLIVE_STATE_TALK_ABOUT_LOSER;
+ break;
+ case CONTESTLIVE_STATE_TALK_ABOUT_LOSER:
+ StringCopy(gStringVar1, gSpeciesNames[show->contestLiveUpdates.winningSpecies]);
+ TVShowConvertInternationalString(gStringVar2, show->contestLiveUpdates.losingTrainerName, show->contestLiveUpdates.losingTrainerLanguage);
+ StringCopy(gStringVar3, gSpeciesNames[show->contestLiveUpdates.losingSpecies]);
+ switch (show->contestLiveUpdates.loserAppealFlag)
+ {
+ case CONTESTLIVE_FLAG_LOST:
+ sTVShowState = CONTESTLIVE_STATE_LOST;
+ break;
+ case CONTESTLIVE_FLAG_REPEATED_MOVE:
+ sTVShowState = CONTESTLIVE_STATE_REPEATED_APPEALS;
+ break;
+ case CONTESTLIVE_FLAG_LOST_SMALL_MARGIN:
+ sTVShowState = CONTESTLIVE_STATE_LOST_SMALL_MARGIN;
+ break;
+ case CONTESTLIVE_FLAG_NO_EXCITEMENT:
+ sTVShowState = CONTESTLIVE_STATE_NO_EXCITING_APPEALS;
+ break;
+ case CONTESTLIVE_FLAG_BLEW_LEAD:
+ sTVShowState = CONTESTLIVE_STATE_LOST_AFTER_ROUND1_WIN;
+ break;
+ case CONTESTLIVE_FLAG_MISSED_EXCITEMENT:
+ sTVShowState = CONTESTLIVE_STATE_NOT_EXCITING_ENOUGH;
+ break;
+ case CONTESTLIVE_FLAG_LAST_BOTH_ROUNDS:
+ sTVShowState = CONTESTLIVE_STATE_LAST_BOTH;
+ break;
+ case CONTESTLIVE_FLAG_NO_APPEALS:
+ sTVShowState = CONTESTLIVE_STATE_NO_APPEALS;
+ break;
+ }
+ break;
+ case CONTESTLIVE_STATE_NO_APPEALS:
+ StringCopy(gStringVar1, gSpeciesNames[show->contestLiveUpdates.losingSpecies]);
+ sTVShowState = CONTESTLIVE_STATE_OUTRO;
+ break;
+ case CONTESTLIVE_STATE_LAST_BOTH:
+ TVShowConvertInternationalString(gStringVar1, show->contestLiveUpdates.losingTrainerName, show->contestLiveUpdates.losingTrainerLanguage);
+ StringCopy(gStringVar2, gSpeciesNames[show->contestLiveUpdates.losingSpecies]);
+ sTVShowState = CONTESTLIVE_STATE_OUTRO;
+ break;
+ case CONTESTLIVE_STATE_NO_EXCITING_APPEALS:
+ sTVShowState = CONTESTLIVE_STATE_OUTRO;
+ break;
+ case CONTESTLIVE_STATE_LOST_SMALL_MARGIN:
+ TVShowConvertInternationalString(gStringVar1, show->contestLiveUpdates.winningTrainerName, show->contestLiveUpdates.winningTrainerLanguage);
+ StringCopy(gStringVar2, gSpeciesNames[show->contestLiveUpdates.winningSpecies]);
+ TVShowConvertInternationalString(gStringVar3, show->contestLiveUpdates.losingTrainerName, show->contestLiveUpdates.losingTrainerLanguage);
+ sTVShowState = CONTESTLIVE_STATE_OUTRO;
+ break;
+ case CONTESTLIVE_STATE_NOT_EXCITING_ENOUGH:
+ case CONTESTLIVE_STATE_LOST_AFTER_ROUND1_WIN:
+ case CONTESTLIVE_STATE_REPEATED_APPEALS:
+ case CONTESTLIVE_STATE_LOST:
+ TVShowConvertInternationalString(gStringVar1, show->contestLiveUpdates.losingTrainerName, show->contestLiveUpdates.losingTrainerLanguage);
+ sTVShowState = CONTESTLIVE_STATE_OUTRO;
+ break;
+ case CONTESTLIVE_STATE_OUTRO:
+ TVShowConvertInternationalString(gStringVar1, show->contestLiveUpdates.winningTrainerName, show->contestLiveUpdates.winningTrainerLanguage);
+ StringCopy(gStringVar2, gSpeciesNames[show->contestLiveUpdates.winningSpecies]);
+ TVShowDone();
+ break;
}
ShowFieldMessage(sTVContestLiveUpdatesTextGroup[state]);
}
@@ -6664,7 +6253,7 @@ static void DoTVShowBreakingNewsTV(void)
TVShowDone();
break;
}
- ShowFieldMessage(sTVBreakinsNewsTextGroup[state]);
+ ShowFieldMessage(sTVBreakingNewsTextGroup[state]);
}
static void DoTVShowSecretBaseVisit(void)
diff --git a/src/union_room.c b/src/union_room.c
index cd45907f5..f886d0383 100644
--- a/src/union_room.c
+++ b/src/union_room.c
@@ -32,7 +32,7 @@
#include "random.h"
#include "save_location.h"
#include "script.h"
-#include "script_pokemon_util_80F87D8.h"
+#include "script_pokemon_util.h"
#include "sound.h"
#include "start_menu.h"
#include "string_util.h"
@@ -41,6 +41,7 @@
#include "trade.h"
#include "trainer_card.h"
#include "union_room.h"
+#include "union_room_battle.h"
#include "union_room_chat.h"
#include "union_room_player_avatar.h"
#include "window.h"
@@ -52,158 +53,293 @@
#include "constants/rgb.h"
#include "constants/songs.h"
#include "constants/species.h"
-#include "constants/union_room.h"
-
-EWRAM_DATA u8 sUnionRoomPlayerName[12] = {};
-EWRAM_DATA u8 gUnknown_02022C2C = 0;
-EWRAM_DATA u8 gUnknown_02022C2D = 0;
-EWRAM_DATA union UnkUnion_Main gUnknown_02022C30 = {};
-EWRAM_DATA u32 gFiller_02022C34 = 0;
-EWRAM_DATA struct GFtgtGnameSub gUnknown_02022C38 = {};
+
+// States for Task_RunUnionRoom
+enum {
+ UR_STATE_INIT,
+ UR_STATE_INIT_OBJECTS,
+ UR_STATE_INIT_LINK,
+ UR_STATE_CHECK_SELECTING_MON,
+ UR_STATE_MAIN,
+ UR_STATE_DO_SOMETHING_PROMPT,
+ UR_STATE_HANDLE_DO_SOMETHING_PROMPT_INPUT,
+ UR_STATE_DO_SOMETHING_PROMPT_2,
+ UR_STATE_PRINT_MSG,
+ UR_STATE_HANDLE_ACTIVITY_REQUEST,
+ UR_STATE_DECLINE_ACTIVITY_REQUEST,
+ UR_STATE_PLAYER_CONTACTED_YOU,
+ UR_STATE_RECV_CONTACT_DATA,
+ UR_STATE_PRINT_START_ACTIVITY_MSG,
+ UR_STATE_START_ACTIVITY_LINK,
+ UR_STATE_START_ACTIVITY_WAIT_FOR_LINK,
+ UR_STATE_START_ACTIVITY_FREE_UROOM,
+ UR_STATE_START_ACTIVITY_FADE,
+ UR_STATE_START_ACTIVITY,
+ UR_STATE_RECV_JOIN_CHAT_REQUEST,
+ UR_STATE_TRY_ACCEPT_CHAT_REQUEST_DELAY,
+ UR_STATE_TRY_ACCEPT_CHAT_REQUEST,
+ UR_STATE_ACCEPT_CHAT_REQUEST,
+ UR_STATE_WAIT_FOR_START_MENU,
+ UR_STATE_INTERACT_WITH_PLAYER,
+ UR_STATE_TRY_COMMUNICATING,
+ UR_STATE_PRINT_AND_EXIT,
+ UR_STATE_SEND_ACTIVITY_REQUEST,
+ UR_STATE_TRAINER_APPEARS_BUSY,
+ UR_STATE_WAIT_FOR_RESPONSE_TO_REQUEST,
+ UR_STATE_CANCEL_ACTIVITY_LINK_ERROR,
+ UR_STATE_SEND_TRADE_REQUST,
+ UR_STATE_REQUEST_DECLINED,
+ UR_STATE_PRINT_CONTACT_MSG,
+ UR_STATE_HANDLE_CONTACT_DATA,
+ UR_STATE_RECV_ACTIVITY_REQUEST,
+ UR_STATE_CANCEL_REQUEST_PRINT_MSG,
+ UR_STATE_CANCEL_REQUEST_RESTART_LINK,
+ UR_STATE_COMMUNICATING_WAIT_FOR_DATA,
+ UR_STATE_WAIT_FOR_CONTACT_DATA,
+ UR_STATE_PRINT_CARD_INFO,
+ UR_STATE_WAIT_FINISH_READING_CARD,
+ UR_STATE_INTERACT_WITH_ATTENDANT,
+ UR_STATE_REGISTER_PROMPT,
+ UR_STATE_CANCEL_REGISTRATION_PROMPT,
+ UR_STATE_CHECK_TRADING_BOARD,
+ UR_STATE_TRADING_BOARD_LOAD,
+ UR_STATE_REGISTER_PROMPT_HANDLE_INPUT,
+ UR_STATE_TRADING_BOARD_HANDLE_INPUT,
+ UR_STATE_TRADE_PROMPT,
+ UR_STATE_TRADE_SELECT_MON,
+ UR_STATE_TRADE_OFFER_MON,
+ UR_STATE_REGISTER_REQUEST_TYPE,
+ UR_STATE_REGISTER_SELECT_MON_FADE,
+ UR_STATE_REGISTER_SELECT_MON,
+ UR_STATE_REGISTER_COMPLETE,
+ UR_STATE_CANCEL_REGISTRATION,
+};
+
+// States for sUnionRoomTrade.state
+enum {
+ URTRADE_STATE_NONE,
+ URTRADE_STATE_REGISTERING,
+ URTRADE_STATE_OFFERING,
+};
+
+// States for Task_TryBecomeLinkLeader
+enum {
+ LL_STATE_INIT,
+ LL_STATE_INIT2 = 3,
+ LL_STATE_GET_AWAITING_PLAYERS_TEXT,
+ LL_STATE_PRINT_AWAITING_PLAYERS,
+ LL_STATE_AWAIT_PLAYERS,
+ LL_STATE_ACCEPT_NEW_MEMBER_PROMPT,
+ LL_STATE_9 = 9,
+ LL_STATE_MEMBER_LEFT,
+ LL_STATE_ACCEPT_NEW_MEMBER_PROMPT_HANDLE_INPUT,
+ LL_STATE_UPDATE_AFTER_JOIN_REQUEST,
+ LL_STATE_ACCEPTED_FINAL_MEMBER,
+ LL_STATE_WAIT_AND_CONFIRM_MEMBERS,
+ LL_STATE_MEMBERS_OK_PROMPT,
+ LL_STATE_MEMBERS_OK_PROMPT_HANDLE_INPUT,
+ LL_STATE_CONFIRMED_MEMBERS,
+ LL_STATE_FINAL_MEMBER_CHECK,
+ LL_STATE_CANCEL_PROMPT,
+ LL_STATE_CANCEL_PROMPT_HANDLE_INPUT,
+ LL_STATE_SHUTDOWN_AND_RETRY,
+ LL_STATE_RETRY,
+ LL_STATE_SHUTDOWN_AND_FAIL,
+ LL_STATE_FAILED,
+ LL_STATE_TRY_START_ACTIVITY = 26,
+ LL_STATE_MEMBER_DISCONNECTED = 29,
+ LL_STATE_CANCEL_WITH_MSG
+};
+
+// States for Task_TryJoinLinkGroup
+enum {
+ LG_STATE_INIT,
+ LG_STATE_CHOOSE_LEADER_MSG,
+ LG_STATE_INIT_WINDOWS,
+ LG_STATE_CHOOSE_LEADER_HANDLE_INPUT,
+ LG_STATE_ASK_JOIN_GROUP = 5,
+ LG_STATE_MAIN,
+ LG_STATE_ASK_LEAVE_GROUP,
+ LG_STATE_ASK_LEAVE_GROUP_HANDLE_INPUT,
+ LG_STATE_WAIT_LEAVE_GROUP,
+ LG_STATE_CANCEL_CHOOSE_LEADER,
+ LG_STATE_CANCELED,
+ LG_STATE_RFU_ERROR,
+ LG_STATE_RFU_ERROR_SHUTDOWN,
+ LG_STATE_DISCONNECTED,
+ LG_STATE_RETRY_CONNECTION,
+ LG_STATE_TRADE_NOT_READY = 18,
+ LG_STATE_TRADE_NOT_READY_RETRY,
+ LG_STATE_READY_START_ACTIVITY,
+ LG_STATE_START_ACTIVITY,
+ LG_STATE_SHUTDOWN = 23,
+};
+
+static EWRAM_DATA u8 sUnionRoomPlayerName[12] = {};
+EWRAM_DATA u8 gPlayerCurrActivity = 0;
+static EWRAM_DATA u8 sPlayerActivityGroupSize = 0;
+static EWRAM_DATA union WirelessLink_Main sWirelessLinkMain = {};
+static EWRAM_DATA u32 sUnused = 0;
+EWRAM_DATA struct GFtgtGnameSub gPartnerTgtGnameSub = {};
EWRAM_DATA u16 gUnionRoomOfferedSpecies = 0;
EWRAM_DATA u8 gUnionRoomRequestedMonType = 0;
static EWRAM_DATA struct UnionRoomTrade sUnionRoomTrade = {};
// IWRAM vars
-static struct UnkStruct_Leader *gUnknown_03000DA0;
-static struct UnkStruct_Group *gUnknown_03000DA4;
-static struct UnkStruct_URoom *gUnknown_03000DA8;
+static struct WirelessLink_Leader *sLeader;
+static struct WirelessLink_Group *sGroup;
+static struct WirelessLink_URoom *sURoom;
// this file's functions
-void sub_80173E0(u8 windowId, u8 arg1, const u8 *str, u8 arg3, u8 arg4, u8 arg5);
-u16 ReadAsU16(const u8 *ptr);
-void sub_8012780(u8 taskId);
-void sub_80134E8(u8 taskId);
-void sub_8013C7C(u8 taskId);
-void sub_8014A40(u8 taskId);
-void sub_8014F48(u8 taskId);
-void sub_80152F4(u8 taskId);
-void sub_80156E0(u8 taskId);
-void sub_80175EC(struct UnkStruct_Main4 *arg0, u8 count);
-void sub_8017580(struct UnkStruct_x20 *arg0, u8 count);
-u8 sub_8016FC0(struct UnkStruct_Main4 *arg0, u32 arg1);
-u8 sub_8016FF0(struct UnkStruct_Main4 *arg0, u32 arg1);
-bool8 PrintOnTextbox(u8 *textState, const u8 *str);
-bool8 sub_801320C(struct UnkStruct_Leader *data, u32 arg1, u32 arg2);
-u8 sub_8013398(struct UnkStruct_Main0 *arg0);
-s8 sub_80170B8(u8 *arg0, bool32 arg1);
-void sub_8018404(u8 *dest, struct UnkStruct_x20 *arg1);
-void sub_8012F64(struct UnkStruct_Leader *data);
-void sub_80149C4(void);
-u8 sub_80132D4(struct UnkStruct_Main0 *arg0);
-void sub_80178A0(u8 arg0, u8 arg1, u8 arg2, struct UnkStruct_x20 *arg3, u8 arg4, u8 id);
-u32 sub_80176E4(struct UnkStruct_x20 *arg0, struct UnkStruct_x1C *arg1);
-u8 sub_8017734(struct UnkStruct_x20 *arg0, struct UnkStruct_x1C *arg1, u8 arg2);
-u8 sub_8013E44(void);
-u32 sub_8013B8C(struct UnkStruct_Group *arg0, s32 id);
-void sub_8013BD8(struct UnkStruct_Group *arg0, s32 id);
-void sub_80173D4(void);
-void sub_80177B8(u8 arg0, u8 arg1, u8 arg2, struct UnkStruct_x20 *arg3, u8 arg4, u8 id);
-bool32 sub_8017678(struct UnkStruct_Shared *arg0, struct UnkStruct_Shared *arg1);
-static u32 GetPartyPositionOfRegisteredMon(struct UnionRoomTrade *arg0, u8 multiplayerId);
-static void ResetUnionRoomTrade(struct UnionRoomTrade *arg0);
-void sub_801AC54(void);
-void sub_80149D8(void);
-void MG_DrawTextBorder(u8 windowId);
-s8 mevent_message_print_and_prompt_yes_no(u8 *textState, u8 *arg1, u8 arg2, const u8 *str);
-bool32 sub_8016F1C(struct GFtgtGname *arg0, s16 arg1);
-u8 sub_8016DF0(struct UnkStruct_Main4 *arg0, struct UnkStruct_Main4 *arg1, u32 arg2);
-void sub_8019F2C(void);
-static bool32 RegisterTradeMonAndGetIsEgg(u32 monId, struct UnionRoomTrade *trade);
-static void RegisterTradeMon(u32 monId, struct UnionRoomTrade *arg1);
-void sub_80181CC(void);
-bool32 sub_8017940(void);
-u8 sub_8016B00(void);
-void sub_801A274(struct UnkStruct_URoom *arg0);
-bool32 sub_8017FD8(struct UnkStruct_URoom *arg0);
-void sub_801689C(struct UnkStruct_URoom *arg0);
-u8 sub_80181DC(struct UnkStruct_URoom *arg0);
-bool32 sub_80168DC(struct UnkStruct_URoom *arg0);
-bool32 sub_801704C(void);
-s32 sub_8017CF8(s32 arg1, struct UnkStruct_Main0 *arg0);
-s32 sub_80179D4(struct UnkStruct_Main0 *arg0, u8 arg1, u8 arg2, u32 playerGender);
-void sub_801818C(bool32 arg0);
-s32 sub_8017178(u8 *arg0, u8 *arg1, u8 *arg2, const struct WindowTemplate *winTemplate, const struct ListMenuTemplate *menuTemplate);
-s32 sub_80172A0(u8 *arg0, u8 *arg1, u8 *arg2, u8 *arg3, const struct WindowTemplate *winTemplate, const struct ListMenuTemplate *menuTemplate, struct UnkStruct_Main0 *arg6);
-s32 sub_8017CB0(struct UnkStruct_x20 * arg, s32 arg1);
-bool32 HasAtLeastTwoMonsOfLevel30OrLower(void);
-u32 sub_8017984(s32 arg0);
-void sub_8018220(u8 *unused, struct UnkStruct_URoom *arg1, bool8 arg2);
-void sub_8017D9C(u8 *dst, s32 arg1, u32 playerGender);
-u32 sub_80179AC(struct UnkStruct_x20 *arg0);
-void sub_8017E00(u8 *dst, u8 arg1);
-void sub_80173B0(void);
-s32 sub_8017D04(u32 type, u32 species);
-bool32 sub_8017020(const u8 *src);
-u8 sub_8019BA8(struct UnkStruct_8019BA8 * );
-s32 sub_8017EA0(u8 *dst, u32 gender, u16 *arg2, struct UnkStruct_URoom *arg3);
-void sub_801697C(u8 taskId);
-bool8 sub_8017630(struct UnkStruct_Shared* arg0, const struct UnkStruct_Shared* arg1);
-void sub_8013278(u8 windowId, s32 itemId, u8 y);
-void sub_8013DF4(u8 windowId, s32 itemId, u8 y);
-void sub_8017BE8(u8 windowId, s32 itemId, u8 y);
-void nullsub_14(u8 windowId, s32 itemId, u8 y);
+static void UR_AddTextPrinterParameterized(u8, u8, const u8 *, u8, u8, u8);
+static u16 ReadAsU16(const u8 *);
+static void Task_TryBecomeLinkLeader(u8);
+static void Task_TryJoinLinkGroup(u8);
+static void Task_ListenToWireless(u8);
+static void Task_MEvent_Leader(u8);
+static void Task_CardOrNewsWithFriend(u8);
+static void Task_CardOrNewsOverWireless(u8);
+static void Task_RunUnionRoom(u8);
+static void ClearUnkStruct_x1CArray(struct UnkStruct_Main4 *, u8);
+static void ClearUnkStruct_x20Array(struct UnkStruct_x20 *, u8);
+static u8 CreateTask_ListenForPartnersWithCompatibleSerialNos(struct UnkStruct_Main4 *, u32);
+static u8 CreateTask_ListenForPartnersWithSerial7F7D(struct UnkStruct_Main4 *, u32 );
+static bool8 PrintOnTextbox(u8 *, const u8 *);
+static bool8 Leader_SetStateIfMemberListChanged(struct WirelessLink_Leader *, u32, u32);
+static u8 sub_8013398(struct UnkStruct_Main0 *);
+static s8 UnionRoomHandleYesNo(u8 *, bool32);
+static void IntlConvPartnerUname7(u8 *, struct UnkStruct_x20 *);
+static void Leader_DestroyResources(struct WirelessLink_Leader *);
+static void CreateTask_RunScriptAndFadeToActivity(void);
+static u8 LeaderUpdateGroupMembership(struct UnkStruct_Main0 *);
+static void PrintGroupMemberCandidateOnWindowWithColor(u8, u8, u8, struct UnkStruct_x20 *, u8, u8 );
+static u32 Findx20Inx1CArray(struct UnkStruct_x20 *, struct UnkStruct_x1C *);
+static u8 Appendx1Ctox20(struct UnkStruct_x20 *, struct UnkStruct_x1C *, u8);
+static u8 GetNewLeaderCandidate(void);
+static u32 IsTryingToTradeAcrossVersionTooSoon(struct WirelessLink_Group *, s32);
+static void AskToJoinRfuGroup(struct WirelessLink_Group *, s32);
+static void JoinGroup_EnableScriptContexts(void);
+static void PrintUnionRoomGroupOnWindow(u8, u8, u8, struct UnkStruct_x20 *, u8, u8);
+static bool32 AreUnionRoomPlayerGnamesDifferent(struct WirelessGnameUnamePair *, struct WirelessGnameUnamePair *);
+static u32 GetPartyPositionOfRegisteredMon(struct UnionRoomTrade *, u8);
+static void ResetUnionRoomTrade(struct UnionRoomTrade *);
+static void CreateTask_StartActivity(void);
+static bool32 HasWonderCardOrNewsByLinkGroup(struct GFtgtGname *, s16);
+static u8 CreateTask_SearchForChildOrParent(struct UnkStruct_Main4 *, struct UnkStruct_Main4 *, u32);
+static bool32 RegisterTradeMonAndGetIsEgg(u32, struct UnionRoomTrade *);
+static void RegisterTradeMon(u32, struct UnionRoomTrade *);
+static void UR_EnableScriptContext2AndFreezeObjectEvents(void);
+static bool32 IsPlayerFacingTradingBoard(void);
+static u8 HandlePlayerListUpdate(void);
+static bool32 PollPartnerYesNoResponse(struct WirelessLink_URoom *);
+static void ReceiveUnionRoomActivityPacket(struct WirelessLink_URoom *);
+static u8 GetActivePartnerSpriteGenderParam(struct WirelessLink_URoom *);
+static bool32 UnionRoom_HandleContactFromOtherPlayer(struct WirelessLink_URoom *);
+static bool32 UR_RunTextPrinters_CheckPrinter0Active(void);
+static s32 GetUnionRoomPlayerGender(s32, struct UnkStruct_Main0 *);
+static s32 UnionRoomGetPlayerInteractionResponse(struct UnkStruct_Main0 *, u8, u8, u32);
+static void HandleCancelActivity(bool32);
+static s32 ListMenuHandler_AllItemsAvailable(u8 *, u8 *, u8 *, const struct WindowTemplate *, const struct ListMenuTemplate *);
+static s32 TradeBoardMenuHandler(u8 *, u8 *, u8 *, u8 *, const struct WindowTemplate *, const struct ListMenuTemplate *, struct UnkStruct_Main0 *);
+static s32 GetIndexOfNthTradeBoardOffer(struct UnkStruct_x20 *, s32);
+static bool32 HasAtLeastTwoMonsOfLevel30OrLower(void);
+static u32 GetResponseIdx_InviteToURoomActivity(s32);
+static void ViewURoomPartnerTrainerCard(u8 *, struct WirelessLink_URoom *, bool8);
+static void GetURoomActivityRejectMsg(u8 *, s32, u32);
+static u32 ConvPartnerUnameAndGetWhetherMetAlready(struct UnkStruct_x20 *);
+static void GetURoomActivityStartMsg(u8 *, u8);
+static void UR_ClearBg0(void);
+static s32 IsRequestedTypeOrEggInPlayerParty(u32, u32);
+static bool32 UR_PrintFieldMessage(const u8 *);
+static s32 GetChatLeaderActionRequestMessage(u8 *, u32, u16 *, struct WirelessLink_URoom *);
+static void Task_InitUnionRoom(u8 taskId);
+static bool8 AreGnameUnameDifferent(struct WirelessGnameUnamePair*, const struct WirelessGnameUnamePair*);
+static void ItemPrintFunc_PossibleGroupMembers(u8, s32, u8);
+static void ListMenuItemPrintFunc_UnionRoomGroups(u8, s32, u8);
+static void TradeBoardListMenuItemPrintFunc(u8, s32, u8);
+static void nullsub_14(u8, s32, u8);
#include "data/union_room.h"
// code
-void sub_80124EC(u8 windowId, u8 arg1, u8 stringId)
+static void PrintNumPlayersWaitingForMsg(u8 windowId, u8 capacityCode, u8 stringId)
{
FillWindowPixelBuffer(windowId, PIXEL_FILL(1));
- switch (arg1 << 8)
+ switch (capacityCode << 8)
{
- case 0x200:
- sub_80173E0(windowId, 1, sPlayersNeededOrModeTexts[0][stringId - 1], 0, 1, 0);
+ case LINK_GROUP_CAPACITY(0, 2):
+ UR_AddTextPrinterParameterized(windowId, 1, sPlayersNeededOrModeTexts[0][stringId - 1], 0, 1, UR_COLOR_DKE_WHT_LTE);
break;
- case 0x400:
- sub_80173E0(windowId, 1, sPlayersNeededOrModeTexts[1][stringId - 1], 0, 1, 0);
+ case LINK_GROUP_CAPACITY(0, 4):
+ UR_AddTextPrinterParameterized(windowId, 1, sPlayersNeededOrModeTexts[1][stringId - 1], 0, 1, UR_COLOR_DKE_WHT_LTE);
break;
- case 0x2500:
- sub_80173E0(windowId, 1, sPlayersNeededOrModeTexts[2][stringId - 1], 0, 1, 0);
+ case LINK_GROUP_CAPACITY(2, 5):
+ UR_AddTextPrinterParameterized(windowId, 1, sPlayersNeededOrModeTexts[2][stringId - 1], 0, 1, UR_COLOR_DKE_WHT_LTE);
break;
- case 0x3500:
- sub_80173E0(windowId, 1, sPlayersNeededOrModeTexts[3][stringId - 1], 0, 1, 0);
+ case LINK_GROUP_CAPACITY(3, 5):
+ UR_AddTextPrinterParameterized(windowId, 1, sPlayersNeededOrModeTexts[3][stringId - 1], 0, 1, UR_COLOR_DKE_WHT_LTE);
break;
- case 0x2400:
- sub_80173E0(windowId, 1, sPlayersNeededOrModeTexts[4][stringId - 1], 0, 1, 0);
+ case LINK_GROUP_CAPACITY(2, 4):
+ UR_AddTextPrinterParameterized(windowId, 1, sPlayersNeededOrModeTexts[4][stringId - 1], 0, 1, UR_COLOR_DKE_WHT_LTE);
break;
}
CopyWindowToVram(windowId, 2);
}
-void sub_80125BC(u8 windowId)
+static void PrintPlayerNameAndIdOnWindow(u8 windowId)
{
u8 text[30];
u8 *txtPtr;
- sub_80173E0(windowId, 1, gSaveBlock2Ptr->playerName, 0, 1, 0);
+ UR_AddTextPrinterParameterized(windowId, 1, gSaveBlock2Ptr->playerName, 0, 1, UR_COLOR_DKE_WHT_LTE);
txtPtr = StringCopy(text, sText_ID);
ConvertIntToDecimalStringN(txtPtr, ReadAsU16(gSaveBlock2Ptr->playerTrainerId), STR_CONV_MODE_LEADING_ZEROS, 5);
- sub_80173E0(windowId, 1, text, 0, 0x11, 0);
+ UR_AddTextPrinterParameterized(windowId, 1, text, 0, 0x11, UR_COLOR_DKE_WHT_LTE);
}
-void sub_801262C(u8 *dst, u8 caseId)
+static void StringExpandPlaceholders_AwaitingCommFromAnother(u8 *dst, u8 caseId)
{
switch (caseId)
{
- case 1 ... 4:
- case 9 ... 11:
- case 14 ... 16:
- case 21 ... 28:
+ case ACTIVITY_BATTLE_SINGLE:
+ case ACTIVITY_BATTLE_DOUBLE:
+ case ACTIVITY_BATTLE_MULTI:
+ case ACTIVITY_TRADE:
+ case ACTIVITY_POKEMON_JUMP:
+ case ACTIVITY_BERRY_CRUSH:
+ case ACTIVITY_BERRY_PICK:
+ case ACTIVITY_BATTLE_TOWER:
+ case ACTIVITY_BATTLE_TOWER_OPEN:
+ case ACTIVITY_RECORD_CORNER:
+ case ACTIVITY_BERRY_BLENDER:
+ case ACTIVITY_WONDER_CARD2:
+ case ACTIVITY_WONDER_NEWS2:
+ case ACTIVITY_CONTEST_COOL:
+ case ACTIVITY_CONTEST_BEAUTY:
+ case ACTIVITY_CONTEST_CUTE:
+ case ACTIVITY_CONTEST_SMART:
+ case ACTIVITY_CONTEST_TOUGH:
// UB: argument *dst isn't used, instead it always prints to gStringVar4
StringExpandPlaceholders(gStringVar4, sText_AwaitingCommunication);
break;
}
}
-bool32 sub_80126CC(u32 caseId)
+static bool32 IsActivityWithVariableGroupSize(u32 caseId)
{
switch (caseId)
{
- case 9 ... 11:
- case 15 ... 16:
- case 23 ... 27:
+ case ACTIVITY_POKEMON_JUMP:
+ case ACTIVITY_BERRY_CRUSH:
+ case ACTIVITY_BERRY_PICK:
+ case ACTIVITY_RECORD_CORNER:
+ case ACTIVITY_BERRY_BLENDER:
+ case ACTIVITY_CONTEST_COOL:
+ case ACTIVITY_CONTEST_BEAUTY:
+ case ACTIVITY_CONTEST_CUTE:
+ case ACTIVITY_CONTEST_SMART:
+ case ACTIVITY_CONTEST_TOUGH:
return TRUE;
default:
return FALSE;
@@ -213,331 +349,334 @@ bool32 sub_80126CC(u32 caseId)
void TryBecomeLinkLeader(void)
{
u8 taskId;
- struct UnkStruct_Leader *dataPtr;
+ struct WirelessLink_Leader *data;
- taskId = CreateTask(sub_8012780, 0);
- gUnknown_02022C30.leader = dataPtr = (void*)(gTasks[taskId].data);
- gUnknown_03000DA0 = dataPtr;
+ taskId = CreateTask(Task_TryBecomeLinkLeader, 0);
+ sWirelessLinkMain.leader = data = (void*)(gTasks[taskId].data);
+ sLeader = data;
- dataPtr->state = 0;
- dataPtr->textState = 0;
- gSpecialVar_Result = 0;
+ data->state = LL_STATE_INIT;
+ data->textState = 0;
+ gSpecialVar_Result = LINKUP_ONGOING;
}
-void sub_8012780(u8 taskId)
+static void Task_TryBecomeLinkLeader(u8 taskId)
{
u32 id, val;
- struct UnkStruct_Leader *data = gUnknown_02022C30.leader;
+ struct WirelessLink_Leader *data = sWirelessLinkMain.leader;
switch (data->state)
{
- case 0:
+ case LL_STATE_INIT:
if (gSpecialVar_0x8004 == LINK_GROUP_BATTLE_TOWER && gSaveBlock2Ptr->frontier.lvlMode == FRONTIER_LVL_OPEN)
gSpecialVar_0x8004++;
- gUnknown_02022C2C = gUnknown_082F00C4[gSpecialVar_0x8004];
- gUnknown_02022C2D = gUnknown_082F00C4[gSpecialVar_0x8004] >> 8;
- sub_8010F84(gUnknown_02022C2C, 0, 0);
- sub_800B488();
+ gPlayerCurrActivity = sLinkGroupToActivityAndCapacity[gSpecialVar_0x8004];
+ sPlayerActivityGroupSize = sLinkGroupToActivityAndCapacity[gSpecialVar_0x8004] >> 8;
+ SetHostRFUtgtGname(gPlayerCurrActivity, 0, 0);
+ SetWirelessCommType1();
OpenLink();
- sub_8011C10(gUnknown_02022C2D & 0xF);
- data->state = 3;
- break;
- case 3:
- data->field_4 = AllocZeroed(0x70);
- data->field_0 = AllocZeroed(0xA0);
- data->field_8 = AllocZeroed(0xA0);
- sub_80175EC(data->field_4, 4);
- sub_8017580(data->field_0->arr, 5);
- sub_800DF90(&data->field_0->arr[0].unk.field_0, data->field_0->arr[0].unk.playerName);
- data->field_0->arr[0].field_18 = 0;
- data->field_0->arr[0].field_1A_0 = 1;
- data->field_0->arr[0].field_1A_1 = 0;
+ InitializeRfuLinkManager_LinkLeader(GROUP_MAX(sPlayerActivityGroupSize));
+ data->state = LL_STATE_INIT2;
+ break;
+ case LL_STATE_INIT2:
+ data->field_4 = AllocZeroed(4 * sizeof(struct UnkStruct_x1C));
+ data->field_0 = AllocZeroed(5 * sizeof(struct UnkStruct_x20));
+ data->field_8 = AllocZeroed(5 * sizeof(struct UnkStruct_x20));
+ ClearUnkStruct_x1CArray(data->field_4, 4);
+ ClearUnkStruct_x20Array(data->field_0->arr, 5);
+ LinkRfu3_SetGnameUnameFromStaticBuffers(&data->field_0->arr[0].gname_uname.gname, data->field_0->arr[0].gname_uname.playerName);
+ data->field_0->arr[0].timeoutCounter = 0;
+ data->field_0->arr[0].groupScheduledAnim = UNION_ROOM_SPAWN_IN;
+ data->field_0->arr[0].useRedText = FALSE;
data->field_0->arr[0].field_1B = 0;
- data->field_17 = sub_8016FC0(data->field_4, 0xFF);
- data->field_10 = AddWindow(&gUnknown_082F00BC);
- switch (gUnknown_02022C2D & 0xF)
+ data->listenTaskId = CreateTask_ListenForPartnersWithCompatibleSerialNos(data->field_4, 0xFF);
+ data->bButtonCancelWindowId = AddWindow(&sWindowTemplate_BButtonCancel);
+ switch (GROUP_MAX(sPlayerActivityGroupSize))
{
case 2:
case 3:
case 4:
- data->listWindowId = AddWindow(&gUnknown_082F011C);
+ data->listWindowId = AddWindow(&sWindowTemplate_PlayerList);
break;
case 5:
- data->listWindowId = AddWindow(&gUnknown_082F0124);
+ data->listWindowId = AddWindow(&sWindowTemplate_5PlayerList);
break;
}
- data->field_11 = AddWindow(&gUnknown_082F012C);
+ data->nPlayerModeWindowId = AddWindow(&sWindowTemplate_NumPlayerMode);
- FillWindowPixelBuffer(data->field_10, PIXEL_FILL(2));
- sub_80173E0(data->field_10, 0, sText_BButtonCancel, 8, 1, 4);
- PutWindowTilemap(data->field_10);
- CopyWindowToVram(data->field_10, 2);
+ FillWindowPixelBuffer(data->bButtonCancelWindowId, PIXEL_FILL(2));
+ UR_AddTextPrinterParameterized(data->bButtonCancelWindowId, 0, sText_BButtonCancel, 8, 1, 4);
+ PutWindowTilemap(data->bButtonCancelWindowId);
+ CopyWindowToVram(data->bButtonCancelWindowId, 2);
DrawStdWindowFrame(data->listWindowId, FALSE);
- gMultiuseListMenuTemplate = gUnknown_082F015C;
+ gMultiuseListMenuTemplate = sListMenuTemplate_PossibleGroupMembers;
gMultiuseListMenuTemplate.windowId = data->listWindowId;
data->listTaskId = ListMenuInit(&gMultiuseListMenuTemplate, 0, 0);
- DrawStdWindowFrame(data->field_11, FALSE);
- PutWindowTilemap(data->field_11);
- CopyWindowToVram(data->field_11, 2);
+ DrawStdWindowFrame(data->nPlayerModeWindowId, FALSE);
+ PutWindowTilemap(data->nPlayerModeWindowId);
+ CopyWindowToVram(data->nPlayerModeWindowId, 2);
CopyBgTilemapBufferToVram(0);
- data->field_13 = 1;
- data->state = 4;
+ data->playerCount = 1;
+ data->state = LL_STATE_GET_AWAITING_PLAYERS_TEXT;
break;
- case 4:
- StringCopy(gStringVar1, sLinkGroupActivityTexts[gUnknown_02022C2C]);
- if ((gUnknown_02022C2D >> 4) != 0)
+ case LL_STATE_GET_AWAITING_PLAYERS_TEXT:
+ StringCopy(gStringVar1, sLinkGroupActivityNameTexts[gPlayerCurrActivity]);
+ if (GROUP_MIN(sPlayerActivityGroupSize) != 0)
{
- if (data->field_13 > (gUnknown_02022C2D >> 4) - 1 && (gUnknown_02022C2D & 0xF) != 0)
+ if (data->playerCount > GROUP_MIN(sPlayerActivityGroupSize) - 1 && GROUP_MAX(sPlayerActivityGroupSize) != 0)
StringExpandPlaceholders(gStringVar4, sText_AwaitingLinkPressStart);
else
StringExpandPlaceholders(gStringVar4, sText_AwaitingCommunication);
}
else
{
- sub_801262C(gStringVar4, gUnknown_02022C2C);
+ StringExpandPlaceholders_AwaitingCommFromAnother(gStringVar4, gPlayerCurrActivity);
}
- sub_80124EC(data->field_11, gUnknown_02022C2D, data->field_13);
- data->state = 5;
+ PrintNumPlayersWaitingForMsg(data->nPlayerModeWindowId, sPlayerActivityGroupSize, data->playerCount);
+ data->state = LL_STATE_PRINT_AWAITING_PLAYERS;
break;
- case 5:
+ case LL_STATE_PRINT_AWAITING_PLAYERS:
if (PrintOnTextbox(&data->textState, gStringVar4))
- data->state = 6;
+ data->state = LL_STATE_AWAIT_PLAYERS;
break;
- case 6:
- sub_801320C(data, 7, 10);
+ case LL_STATE_AWAIT_PLAYERS:
+ Leader_SetStateIfMemberListChanged(data, LL_STATE_ACCEPT_NEW_MEMBER_PROMPT, LL_STATE_MEMBER_LEFT);
if (gMain.newKeys & B_BUTTON)
{
- if (data->field_13 == 1)
- data->state = 23;
- else if ((gUnknown_02022C2D & 0xF0) != 0)
- data->state = 30;
+ if (data->playerCount == 1)
+ data->state = LL_STATE_SHUTDOWN_AND_FAIL;
+ else if (GROUP_MIN2(sPlayerActivityGroupSize) != 0)
+ data->state = LL_STATE_CANCEL_WITH_MSG;
else
- data->state = 19;
+ data->state = LL_STATE_CANCEL_PROMPT;
}
- if ((gUnknown_02022C2D >> 4) != 0
- && data->field_13 > (gUnknown_02022C2D >> 4) - 1
- && (gUnknown_02022C2D & 0xF) != 0
+ if (GROUP_MIN(sPlayerActivityGroupSize) != 0
+ && data->playerCount > GROUP_MIN(sPlayerActivityGroupSize) - 1
+ && GROUP_MAX(sPlayerActivityGroupSize) != 0
&& sub_8012240()
&& gMain.newKeys & START_BUTTON)
{
- data->state = 15;
- sub_800EF38();
+ data->state = LL_STATE_MEMBERS_OK_PROMPT;
+ LinkRfu_StopManagerAndFinalizeSlots();
}
- if (data->state == 6 && sub_80105EC())
+ if (data->state == LL_STATE_AWAIT_PLAYERS && sub_80105EC())
{
- data->state = 9;
+ data->state = LL_STATE_9;
}
break;
- case 9:
+ case LL_STATE_9:
if (!sub_80105EC())
{
- data->state = 6;
- data->field_13 = sub_8013398(data->field_0);
+ data->state = LL_STATE_AWAIT_PLAYERS;
+ data->playerCount = sub_8013398(data->field_0);
}
break;
- case 10:
- id = ((gUnknown_02022C2C & 0xF) == 2) ? 1 : 0;
+ case LL_STATE_MEMBER_LEFT:
+ // BUG: sPlayerActivityGroupSize was meant below, not gPlayerCurrActivity
+ // This will be false for all but ACTIVITY_BATTLE_DOUBLE and ACTIVITY_DECLINE
+ // All this changes is which of two texts gets printed
+ id = (GROUP_MAX(gPlayerCurrActivity) == 2) ? 1 : 0;
if (PrintOnTextbox(&data->textState, sPlayerUnavailableTexts[id]))
{
- data->field_13 = sub_8013398(data->field_0);
+ data->playerCount = sub_8013398(data->field_0);
RedrawListMenu(data->listTaskId);
- data->state = 4;
+ data->state = LL_STATE_GET_AWAITING_PLAYERS_TEXT;
}
break;
- case 29:
- id = ((gUnknown_02022C2D & 0xF) == 2) ? 0 : 1;
+ case LL_STATE_MEMBER_DISCONNECTED:
+ id = (GROUP_MAX(sPlayerActivityGroupSize) == 2) ? 0 : 1;
if (PrintOnTextbox(&data->textState, sPlayerUnavailableTexts[id]))
{
- data->state = 21;
+ data->state = LL_STATE_SHUTDOWN_AND_RETRY;
}
break;
- case 7:
+ case LL_STATE_ACCEPT_NEW_MEMBER_PROMPT:
if (PrintOnTextbox(&data->textState, gStringVar4))
{
- data->state = 11;
+ data->state = LL_STATE_ACCEPT_NEW_MEMBER_PROMPT_HANDLE_INPUT;
}
break;
- case 11:
- switch (sub_80170B8(&data->textState, sub_801064C(ReadAsU16(data->field_0->arr[data->field_13].unk.field_0.unk_00.playerTrainerId), data->field_0->arr[data->field_13].unk.playerName)))
+ case LL_STATE_ACCEPT_NEW_MEMBER_PROMPT_HANDLE_INPUT:
+ switch (UnionRoomHandleYesNo(&data->textState, HasTrainerLeftPartnersList(ReadAsU16(data->field_0->arr[data->playerCount].gname_uname.gname.unk_00.playerTrainerId), data->field_0->arr[data->playerCount].gname_uname.playerName)))
{
- case 0:
+ case 0: // YES
LoadWirelessStatusIndicatorSpriteGfx();
CreateWirelessStatusIndicatorSprite(0, 0);
- data->field_19 = 5;
- sub_8010688(5, ReadAsU16(data->field_0->arr[data->field_13].unk.field_0.unk_00.playerTrainerId), data->field_0->arr[data->field_13].unk.playerName);
- data->state = 12;
+ data->joinRequestAnswer = RFU_STATUS_JOIN_GROUP_OK;
+ SendRfuStatusToPartner(data->joinRequestAnswer, ReadAsU16(data->field_0->arr[data->playerCount].gname_uname.gname.unk_00.playerTrainerId), data->field_0->arr[data->playerCount].gname_uname.playerName);
+ data->state = LL_STATE_UPDATE_AFTER_JOIN_REQUEST;
break;
- case 1:
+ case 1: // NO
case -1:
- data->field_19 = 6;
- sub_8010688(6, ReadAsU16(data->field_0->arr[data->field_13].unk.field_0.unk_00.playerTrainerId), data->field_0->arr[data->field_13].unk.playerName);
- data->state = 12;
+ data->joinRequestAnswer = RFU_STATUS_JOIN_GROUP_NO;
+ SendRfuStatusToPartner(data->joinRequestAnswer, ReadAsU16(data->field_0->arr[data->playerCount].gname_uname.gname.unk_00.playerTrainerId), data->field_0->arr[data->playerCount].gname_uname.playerName);
+ data->state = LL_STATE_UPDATE_AFTER_JOIN_REQUEST;
break;
case -3:
- data->state = 9;
+ data->state = LL_STATE_9;
break;
}
break;
- case 12:
- val = sub_8010714(ReadAsU16(data->field_0->arr[data->field_13].unk.field_0.unk_00.playerTrainerId), data->field_0->arr[data->field_13].unk.playerName);
- if (val == 1)
+ case LL_STATE_UPDATE_AFTER_JOIN_REQUEST:
+ val = WaitSendRfuStatusToPartner(ReadAsU16(data->field_0->arr[data->playerCount].gname_uname.gname.unk_00.playerTrainerId), data->field_0->arr[data->playerCount].gname_uname.playerName);
+ if (val == 1) // Send complete
{
- if (data->field_19 == 5)
+ if (data->joinRequestAnswer == RFU_STATUS_JOIN_GROUP_OK)
{
- data->field_0->arr[data->field_13].field_1B = 0;
+ data->field_0->arr[data->playerCount].field_1B = 0;
RedrawListMenu(data->listTaskId);
- data->field_13++;
- if (data->field_13 == (gUnknown_02022C2D & 0xF))
+ data->playerCount++;
+ if (data->playerCount == GROUP_MAX(sPlayerActivityGroupSize))
{
- if ((gUnknown_02022C2D & 0xF0) != 0 || data->field_13 == 4)
+ if (GROUP_MIN2(sPlayerActivityGroupSize) != 0 || data->playerCount == 4)
{
- data->state = 15;
+ data->state = LL_STATE_MEMBERS_OK_PROMPT;
}
else
{
- sub_8018404(gStringVar1, &data->field_0->arr[data->field_13 - 1]);
+ IntlConvPartnerUname7(gStringVar1, &data->field_0->arr[data->playerCount - 1]);
StringExpandPlaceholders(gStringVar4, sText_AnOKWasSentToPlayer);
- data->state = 13;
+ data->state = LL_STATE_ACCEPTED_FINAL_MEMBER;
}
- sub_800EF38();
- sub_80124EC(data->field_11, gUnknown_02022C2D, data->field_13);
+ LinkRfu_StopManagerAndFinalizeSlots();
+ PrintNumPlayersWaitingForMsg(data->nPlayerModeWindowId, sPlayerActivityGroupSize, data->playerCount);
}
else
{
- data->state = 4;
+ data->state = LL_STATE_GET_AWAITING_PLAYERS_TEXT;
}
}
- else
+ else // Member disconnected
{
- sub_8011DC0(data->field_0->arr[data->field_13].unk.playerName, ReadAsU16(data->field_0->arr[data->field_13].unk.field_0.unk_00.playerTrainerId));
- data->field_0->arr[data->field_13].field_1A_0 = 0;
+ RequestDisconnectSlotByTrainerNameAndId(data->field_0->arr[data->playerCount].gname_uname.playerName, ReadAsU16(data->field_0->arr[data->playerCount].gname_uname.gname.unk_00.playerTrainerId));
+ data->field_0->arr[data->playerCount].groupScheduledAnim = UNION_ROOM_SPAWN_NONE;
sub_8013398(data->field_0);
RedrawListMenu(data->listTaskId);
- data->state = 4;
+ data->state = LL_STATE_GET_AWAITING_PLAYERS_TEXT;
}
- data->field_19 = 0;
+ data->joinRequestAnswer = 0;
}
else if (val == 2)
{
- sub_8011A64(0, 0);
- data->state = 4;
+ RfuSetStatus(RFU_STATUS_OK, 0);
+ data->state = LL_STATE_GET_AWAITING_PLAYERS_TEXT;
}
break;
- case 13:
+ case LL_STATE_ACCEPTED_FINAL_MEMBER:
if (PrintOnTextbox(&data->textState, gStringVar4))
- data->state = 14;
+ data->state = LL_STATE_WAIT_AND_CONFIRM_MEMBERS;
break;
- case 14:
- if (++data->field_E > 120)
- data->state = 17;
+ case LL_STATE_WAIT_AND_CONFIRM_MEMBERS:
+ if (++data->delayTimerAfterOk > 120)
+ data->state = LL_STATE_CONFIRMED_MEMBERS;
break;
- case 15:
+ case LL_STATE_MEMBERS_OK_PROMPT:
if (PrintOnTextbox(&data->textState, sText_AreTheseMembersOK))
- data->state = 16;
+ data->state = LL_STATE_MEMBERS_OK_PROMPT_HANDLE_INPUT;
break;
- case 16:
- switch (sub_80170B8(&data->textState, FALSE))
+ case LL_STATE_MEMBERS_OK_PROMPT_HANDLE_INPUT:
+ switch (UnionRoomHandleYesNo(&data->textState, FALSE))
{
- case 0:
- data->state = 17;
+ case 0: // YES
+ data->state = LL_STATE_CONFIRMED_MEMBERS;
break;
- case 1:
+ case 1: // NO
case -1:
- if ((gUnknown_02022C2D & 0xF0) != 0)
- data->state = 30;
+ if (GROUP_MIN2(sPlayerActivityGroupSize) != 0)
+ data->state = LL_STATE_CANCEL_WITH_MSG;
else
- data->state = 19;
+ data->state = LL_STATE_CANCEL_PROMPT;
break;
}
break;
- case 19:
+ case LL_STATE_CANCEL_PROMPT:
if (PrintOnTextbox(&data->textState, sText_CancelModeWithTheseMembers))
- data->state = 20;
+ data->state = LL_STATE_CANCEL_PROMPT_HANDLE_INPUT;
break;
- case 20:
- switch (sub_80170B8(&data->textState, FALSE))
+ case LL_STATE_CANCEL_PROMPT_HANDLE_INPUT:
+ switch (UnionRoomHandleYesNo(&data->textState, FALSE))
{
- case 0:
- data->state = 23;
+ case 0: // YES
+ data->state = LL_STATE_SHUTDOWN_AND_FAIL;
break;
- case 1:
+ case 1: // NO
case -1:
- if ((gUnknown_02022C2D & 0xF0) != 0)
- data->state = 15;
- else if (data->field_13 == (gUnknown_02022C2D & 0xF))
- data->state = 15;
+ if (GROUP_MIN2(sPlayerActivityGroupSize) != 0)
+ data->state = LL_STATE_MEMBERS_OK_PROMPT;
+ else if (data->playerCount == GROUP_MAX(sPlayerActivityGroupSize))
+ data->state = LL_STATE_MEMBERS_OK_PROMPT;
else
- data->state = 4;
+ data->state = LL_STATE_GET_AWAITING_PLAYERS_TEXT;
break;
}
break;
- case 17:
- if (!sub_801320C(data, 7, 29))
- data->state = 18;
+ case LL_STATE_CONFIRMED_MEMBERS:
+ if (!Leader_SetStateIfMemberListChanged(data, LL_STATE_ACCEPT_NEW_MEMBER_PROMPT, LL_STATE_MEMBER_DISCONNECTED))
+ data->state = LL_STATE_FINAL_MEMBER_CHECK;
break;
- case 18:
- if (sub_800EF1C())
+ case LL_STATE_FINAL_MEMBER_CHECK:
+ if (LmanAcceptSlotFlagIsNotZero())
{
- if (sub_800EF58(FALSE))
+ if (WaitRfuState(FALSE))
{
- data->state = 26;
+ data->state = LL_STATE_TRY_START_ACTIVITY;
}
else
{
- if (++data->field_1A > 300)
+ if (++data->memberConfirmTimeout > 300)
{
- data->state = 29;
+ data->state = LL_STATE_MEMBER_DISCONNECTED;
data->textState = 0;
}
}
}
else
{
- data->state = 29;
+ data->state = LL_STATE_MEMBER_DISCONNECTED;
data->textState = 0;
}
break;
- case 30:
+ case LL_STATE_CANCEL_WITH_MSG:
if (PrintOnTextbox(&data->textState, sText_ModeWithTheseMembersWillBeCanceled))
- data->state = 23;
+ data->state = LL_STATE_SHUTDOWN_AND_FAIL;
break;
- case 21:
- case 23:
+ case LL_STATE_SHUTDOWN_AND_RETRY:
+ case LL_STATE_SHUTDOWN_AND_FAIL:
DestroyWirelessStatusIndicatorSprite();
- sub_800EDD4();
- sub_8012F64(data);
- data->state++;
+ LinkRfu_Shutdown();
+ Leader_DestroyResources(data);
+ data->state++; // LL_STATE_RETRY or LL_STATE_FAILED
break;
- case 24:
+ case LL_STATE_FAILED:
EnableBothScriptContexts();
DestroyTask(taskId);
- gSpecialVar_Result = 5;
+ gSpecialVar_Result = LINKUP_FAILED;
break;
- case 22:
+ case LL_STATE_RETRY:
EnableBothScriptContexts();
DestroyTask(taskId);
- gSpecialVar_Result = 8;
+ gSpecialVar_Result = LINKUP_RETRY_ROLE_ASSIGN;
break;
- case 26:
- if (sub_8011A80())
+ case LL_STATE_TRY_START_ACTIVITY:
+ if (RfuHasErrored())
{
- data->state = 29;
+ data->state = LL_STATE_MEMBER_DISCONNECTED;
}
else
{
if (gReceivedRemoteLinkPlayers != 0)
{
- if (sub_80126CC(gUnknown_02022C2C))
+ if (IsActivityWithVariableGroupSize(gPlayerCurrActivity))
sub_801103C();
- sub_8011068(1);
- sub_80149C4();
- sub_8012F64(data);
+ UpdateGameData_GroupLockedIn(TRUE);
+ CreateTask_RunScriptAndFadeToActivity();
+ Leader_DestroyResources(data);
DestroyTask(taskId);
}
}
@@ -545,319 +684,319 @@ void sub_8012780(u8 taskId)
}
}
-void sub_8012F64(struct UnkStruct_Leader *data)
+static void Leader_DestroyResources(struct WirelessLink_Leader *data)
{
- ClearWindowTilemap(data->field_11);
- ClearStdWindowAndFrame(data->field_11, FALSE);
+ ClearWindowTilemap(data->nPlayerModeWindowId);
+ ClearStdWindowAndFrame(data->nPlayerModeWindowId, FALSE);
DestroyListMenuTask(data->listTaskId, 0, 0);
- ClearWindowTilemap(data->field_10);
+ ClearWindowTilemap(data->bButtonCancelWindowId);
ClearStdWindowAndFrame(data->listWindowId, FALSE);
CopyBgTilemapBufferToVram(0);
- RemoveWindow(data->field_11);
+ RemoveWindow(data->nPlayerModeWindowId);
RemoveWindow(data->listWindowId);
- RemoveWindow(data->field_10);
- DestroyTask(data->field_17);
+ RemoveWindow(data->bButtonCancelWindowId);
+ DestroyTask(data->listenTaskId);
Free(data->field_8);
Free(data->field_0);
Free(data->field_4);
}
-void sub_8012FC4(u8 *dst, u8 caseId)
+static void Leader_GetAcceptNewMemberPrompt(u8 *dst, u8 caseId)
{
switch (caseId)
{
- case 1:
- case 2:
- case 4:
- case 14:
- case 28:
+ case ACTIVITY_BATTLE_SINGLE:
+ case ACTIVITY_BATTLE_DOUBLE:
+ case ACTIVITY_TRADE:
+ case ACTIVITY_BATTLE_TOWER_OPEN:
+ case ACTIVITY_BATTLE_TOWER:
StringExpandPlaceholders(dst, sText_PlayerContactedYouForXAccept);
break;
- case 21:
- case 22:
+ case ACTIVITY_WONDER_CARD2:
+ case ACTIVITY_WONDER_NEWS2:
StringExpandPlaceholders(dst, sText_PlayerContactedYouShareX);
break;
- case 3:
- case 9:
- case 10:
- case 11:
- case 15:
- case 16:
- case 23:
- case 24:
- case 25:
- case 26:
- case 27:
+ case ACTIVITY_BATTLE_MULTI:
+ case ACTIVITY_POKEMON_JUMP:
+ case ACTIVITY_BERRY_CRUSH:
+ case ACTIVITY_BERRY_PICK:
+ case ACTIVITY_RECORD_CORNER:
+ case ACTIVITY_BERRY_BLENDER:
+ case ACTIVITY_CONTEST_COOL:
+ case ACTIVITY_CONTEST_BEAUTY:
+ case ACTIVITY_CONTEST_CUTE:
+ case ACTIVITY_CONTEST_SMART:
+ case ACTIVITY_CONTEST_TOUGH:
StringExpandPlaceholders(dst, sText_PlayerContactedYouAddToMembers);
break;
}
}
-void sub_8013078(u8 *dst, u8 caseId)
+static void GetYouDeclinedTheOfferMessage(u8 *dst, u8 caseId)
{
switch (caseId)
{
- case 65:
- case 68:
+ case ACTIVITY_BATTLE_SINGLE | IN_UNION_ROOM:
+ case ACTIVITY_TRADE | IN_UNION_ROOM:
StringExpandPlaceholders(dst, sText_OfferDeclined1);
break;
- case 69:
- case 72:
+ case ACTIVITY_CHAT | IN_UNION_ROOM:
+ case ACTIVITY_CARD | IN_UNION_ROOM:
StringExpandPlaceholders(dst, sText_OfferDeclined2);
break;
}
}
-void sub_80130B4(u8 *dst, u8 caseId)
+static void GetYouAskedToJoinGroupPleaseWaitMessage(u8 *dst, u8 caseId)
{
switch (caseId)
{
- case 1:
- case 2:
- case 4:
- case 14:
- case 21:
- case 22:
- case 28:
+ case ACTIVITY_BATTLE_SINGLE:
+ case ACTIVITY_BATTLE_DOUBLE:
+ case ACTIVITY_TRADE:
+ case ACTIVITY_BATTLE_TOWER:
+ case ACTIVITY_BATTLE_TOWER_OPEN:
+ case ACTIVITY_WONDER_CARD2:
+ case ACTIVITY_WONDER_NEWS2:
StringExpandPlaceholders(dst, sText_AwaitingPlayersResponse);
break;
- case 3:
- case 9:
- case 10:
- case 11:
- case 15:
- case 16:
- case 23:
- case 24:
- case 25:
- case 26:
- case 27:
+ case ACTIVITY_BATTLE_MULTI:
+ case ACTIVITY_POKEMON_JUMP:
+ case ACTIVITY_BERRY_CRUSH:
+ case ACTIVITY_BERRY_PICK:
+ case ACTIVITY_RECORD_CORNER:
+ case ACTIVITY_BERRY_BLENDER:
+ case ACTIVITY_CONTEST_COOL:
+ case ACTIVITY_CONTEST_BEAUTY:
+ case ACTIVITY_CONTEST_CUTE:
+ case ACTIVITY_CONTEST_SMART:
+ case ACTIVITY_CONTEST_TOUGH:
StringExpandPlaceholders(dst, sText_PlayerHasBeenAskedToRegisterYouPleaseWait);
break;
}
}
-void sub_8013160(u8 *dst, u8 caseId)
+static void GetGroupLeaderSentAnOKMessage(u8 *dst, u8 caseId)
{
switch (caseId)
{
- case 1:
- case 2:
- case 4:
- case 14:
- case 21:
- case 22:
- case 28:
+ case ACTIVITY_BATTLE_SINGLE:
+ case ACTIVITY_BATTLE_DOUBLE:
+ case ACTIVITY_TRADE:
+ case ACTIVITY_BATTLE_TOWER:
+ case ACTIVITY_BATTLE_TOWER_OPEN:
+ case ACTIVITY_WONDER_CARD2:
+ case ACTIVITY_WONDER_NEWS2:
StringExpandPlaceholders(dst, sText_PlayerSentBackOK);
break;
- case 3:
- case 9:
- case 10:
- case 11:
- case 15:
- case 16:
- case 23:
- case 24:
- case 25:
- case 26:
- case 27:
+ case ACTIVITY_BATTLE_MULTI:
+ case ACTIVITY_POKEMON_JUMP:
+ case ACTIVITY_BERRY_CRUSH:
+ case ACTIVITY_BERRY_PICK:
+ case ACTIVITY_RECORD_CORNER:
+ case ACTIVITY_BERRY_BLENDER:
+ case ACTIVITY_CONTEST_COOL:
+ case ACTIVITY_CONTEST_BEAUTY:
+ case ACTIVITY_CONTEST_CUTE:
+ case ACTIVITY_CONTEST_SMART:
+ case ACTIVITY_CONTEST_TOUGH:
StringExpandPlaceholders(dst, sText_PlayerOKdRegistration);
break;
}
}
-bool8 sub_801320C(struct UnkStruct_Leader *data, u32 arg1, u32 arg2)
+static bool8 Leader_SetStateIfMemberListChanged(struct WirelessLink_Leader *data, u32 joinedState, u32 droppedState)
{
- switch (sub_80132D4(data->field_0))
+ switch (LeaderUpdateGroupMembership(data->field_0))
{
- case 1:
+ case UNION_ROOM_SPAWN_IN:
PlaySE(SE_PC_LOGIN);
RedrawListMenu(data->listTaskId);
- sub_8018404(gStringVar2, &data->field_0->arr[data->field_13]);
- sub_8012FC4(gStringVar4, gUnknown_02022C2C);
- data->state = arg1;
+ IntlConvPartnerUname7(gStringVar2, &data->field_0->arr[data->playerCount]);
+ Leader_GetAcceptNewMemberPrompt(gStringVar4, gPlayerCurrActivity);
+ data->state = joinedState;
break;
- case 2:
- sub_8011A64(0, 0);
+ case UNION_ROOM_SPAWN_OUT:
+ RfuSetStatus(RFU_STATUS_OK, 0);
RedrawListMenu(data->listTaskId);
- data->state = arg2;
+ data->state = droppedState;
return TRUE;
}
return FALSE;
}
-void sub_8013278(u8 arg0, s32 id, u8 arg2)
+static void ItemPrintFunc_PossibleGroupMembers(u8 windowId, s32 id, u8 y)
{
- struct UnkStruct_Leader *data = gUnknown_02022C30.leader;
- u8 var = 0;
+ struct WirelessLink_Leader *data = sWirelessLinkMain.leader;
+ u8 colorIdx = UR_COLOR_DKE_WHT_LTE;
- switch (data->field_0->arr[id].field_1A_0)
+ switch (data->field_0->arr[id].groupScheduledAnim)
{
- case 1:
+ case UNION_ROOM_SPAWN_IN:
if (data->field_0->arr[id].field_1B != 0)
- var = 2;
+ colorIdx = UR_COLOR_GRN_WHT_LTG;
break;
- case 2:
- var = 1;
+ case UNION_ROOM_SPAWN_OUT:
+ colorIdx = UR_COLOR_RED_WHT_LTR;
break;
}
- sub_80178A0(arg0, 0, arg2, &data->field_0->arr[id], var, id);
+ PrintGroupMemberCandidateOnWindowWithColor(windowId, 0, y, &data->field_0->arr[id], colorIdx, id);
}
-u8 sub_80132D4(struct UnkStruct_Main0 *arg0)
+static u8 LeaderUpdateGroupMembership(struct UnkStruct_Main0 *arg0)
{
- struct UnkStruct_Leader *data = gUnknown_02022C30.leader;
- u8 ret = 0;
+ struct WirelessLink_Leader *data = sWirelessLinkMain.leader;
+ u8 ret = UNION_ROOM_SPAWN_NONE;
u8 i;
s32 id;
- for (i = 1; i < 5; i++)
+ for (i = 1; i < MAX_RFU_PLAYERS; i++)
{
- u16 var = data->field_0->arr[i].field_1A_0;
- if (var == 1)
+ u16 var = data->field_0->arr[i].groupScheduledAnim;
+ if (var == UNION_ROOM_SPAWN_IN)
{
- id = sub_80176E4(&data->field_0->arr[i], data->field_4->arr);
+ id = Findx20Inx1CArray(&data->field_0->arr[i], data->field_4->arr);
if (id != 0xFF)
{
- data->field_0->arr[i].unk = data->field_4->arr[id].unk0;
- data->field_0->arr[i].field_18 = var;
+ data->field_0->arr[i].gname_uname = data->field_4->arr[id].gname_uname;
+ data->field_0->arr[i].timeoutCounter = 1;
}
else
{
- data->field_0->arr[i].field_1A_0 = 2;
- ret = 2;
+ data->field_0->arr[i].groupScheduledAnim = UNION_ROOM_SPAWN_OUT;
+ ret = UNION_ROOM_SPAWN_OUT;
}
}
}
- for (id = 0; id < 4; id++)
- sub_8017734(data->field_0->arr, &data->field_4->arr[id], 5);
+ for (id = 0; id < RFU_CHILD_MAX; id++)
+ Appendx1Ctox20(data->field_0->arr, &data->field_4->arr[id], MAX_RFU_PLAYERS);
- if (ret != 2)
+ if (ret != UNION_ROOM_SPAWN_OUT)
{
- for (id = 0; id < 5; id++)
+ for (id = 0; id < MAX_RFU_PLAYERS; id++)
{
if (data->field_0->arr[id].field_1B != 0)
- ret = 1;
+ ret = UNION_ROOM_SPAWN_IN;
}
}
return ret;
}
-u8 sub_8013398(struct UnkStruct_Main0 *arg0)
+static u8 sub_8013398(struct UnkStruct_Main0 *arg0)
{
- struct UnkStruct_Leader *data = gUnknown_02022C30.leader;
+ struct WirelessLink_Leader *data = sWirelessLinkMain.leader;
u8 copiedCount;
s32 i;
- u8 ret;
+ u8 playerCount;
- for (i = 0; i < 5; i++)
+ for (i = 0; i < MAX_RFU_PLAYERS; i++)
data->field_8->arr[i] = data->field_0->arr[i];
copiedCount = 0;
- for (i = 0; i < 5; i++)
+ for (i = 0; i < MAX_RFU_PLAYERS; i++)
{
- if (data->field_8->arr[i].field_1A_0 == 1)
+ if (data->field_8->arr[i].groupScheduledAnim == UNION_ROOM_SPAWN_IN)
{
data->field_0->arr[copiedCount] = data->field_8->arr[i];
copiedCount++;
}
}
- ret = copiedCount;
- for (; copiedCount < 5; copiedCount++)
+ playerCount = copiedCount;
+ for (; copiedCount < MAX_RFU_PLAYERS; copiedCount++)
{
- data->field_0->arr[copiedCount].unk = gUnknown_082F045C;
- data->field_0->arr[copiedCount].field_18 = 0;
- data->field_0->arr[copiedCount].field_1A_0 = 0;
- data->field_0->arr[copiedCount].field_1A_1 = 0;
+ data->field_0->arr[copiedCount].gname_uname = sWirelessGnameUnamePair_Dummy;
+ data->field_0->arr[copiedCount].timeoutCounter = 0;
+ data->field_0->arr[copiedCount].groupScheduledAnim = UNION_ROOM_SPAWN_NONE;
+ data->field_0->arr[copiedCount].useRedText = FALSE;
data->field_0->arr[copiedCount].field_1B = 0;
}
- for (i = 0; i < 5; i++)
+ for (i = 0; i < MAX_RFU_PLAYERS; i++)
{
- if (data->field_0->arr[i].field_1A_0 != 1)
+ if (data->field_0->arr[i].groupScheduledAnim != UNION_ROOM_SPAWN_IN)
continue;
- if (data->field_0->arr[i].field_1B != 0x40)
+ if (data->field_0->arr[i].field_1B != 64)
continue;
- ret = i;
+ playerCount = i;
break;
}
- return ret;
+ return playerCount;
}
void TryJoinLinkGroup(void)
{
u8 taskId;
- struct UnkStruct_Group *dataPtr;
+ struct WirelessLink_Group *data;
- taskId = CreateTask(sub_80134E8, 0);
- gUnknown_02022C30.group = dataPtr = (void*)(gTasks[taskId].data);
- gUnknown_03000DA4 = dataPtr;
+ taskId = CreateTask(Task_TryJoinLinkGroup, 0);
+ sWirelessLinkMain.group = data = (void*)(gTasks[taskId].data);
+ sGroup = data;
- dataPtr->state = 0;
- dataPtr->textState = 0;
- gSpecialVar_Result = 0;
+ data->state = LG_STATE_INIT;
+ data->textState = 0;
+ gSpecialVar_Result = LINKUP_ONGOING;
}
-void sub_80134E8(u8 taskId)
+static void Task_TryJoinLinkGroup(u8 taskId)
{
s32 id;
- struct UnkStruct_Group *data = gUnknown_02022C30.group;
+ struct WirelessLink_Group *data = sWirelessLinkMain.group;
switch (data->state)
{
- case 0:
+ case LG_STATE_INIT:
if (gSpecialVar_0x8004 == LINK_GROUP_BATTLE_TOWER && gSaveBlock2Ptr->frontier.lvlMode == FRONTIER_LVL_OPEN)
gSpecialVar_0x8004++;
- gUnknown_02022C2C = gUnknown_082F0530[gSpecialVar_0x8004];
- sub_8010F84(gUnknown_02022C2C, 0, 0);
- sub_800B488();
+ gPlayerCurrActivity = sLinkGroupToURoomActivity[gSpecialVar_0x8004];
+ SetHostRFUtgtGname(gPlayerCurrActivity, 0, 0);
+ SetWirelessCommType1();
OpenLink();
- sub_8011C5C();
- data->field_4 = AllocZeroed(0x70);
- data->field_0 = AllocZeroed(0x200);
- data->state = 1;
+ InitializeRfuLinkManager_JoinGroup();
+ data->field_4 = AllocZeroed(4 * sizeof(struct UnkStruct_x1C));
+ data->field_0 = AllocZeroed(16 * sizeof(struct UnkStruct_x20));
+ data->state = LG_STATE_CHOOSE_LEADER_MSG;
break;
- case 1:
+ case LG_STATE_CHOOSE_LEADER_MSG:
if (PrintOnTextbox(&data->textState, sChooseTrainerTexts[gSpecialVar_0x8004]))
- data->state = 2;
+ data->state = LG_STATE_INIT_WINDOWS;
break;
- case 2:
- sub_80175EC(data->field_4, 4);
- sub_8017580(data->field_0->arr, 16);
- data->field_11 = sub_8016FC0(data->field_4, gSpecialVar_0x8004);
- data->field_C = AddWindow(&gUnknown_082F00BC);
+ case LG_STATE_INIT_WINDOWS:
+ ClearUnkStruct_x1CArray(data->field_4, 4);
+ ClearUnkStruct_x20Array(data->field_0->arr, 16);
+ data->listenTaskId = CreateTask_ListenForPartnersWithCompatibleSerialNos(data->field_4, gSpecialVar_0x8004);
+ data->bButtonCancelWindowId = AddWindow(&sWindowTemplate_BButtonCancel);
data->listWindowId = AddWindow(&gUnknown_082F0174);
- data->field_D = AddWindow(&gUnknown_082F017C);
+ data->playerNameAndIdWindowId = AddWindow(&gUnknown_082F017C);
- FillWindowPixelBuffer(data->field_C, PIXEL_FILL(2));
- sub_80173E0(data->field_C, 0, sText_ChooseJoinCancel, 8, 1, 4);
- PutWindowTilemap(data->field_C);
- CopyWindowToVram(data->field_C, 2);
+ FillWindowPixelBuffer(data->bButtonCancelWindowId, PIXEL_FILL(2));
+ UR_AddTextPrinterParameterized(data->bButtonCancelWindowId, 0, sText_ChooseJoinCancel, 8, 1, 4);
+ PutWindowTilemap(data->bButtonCancelWindowId);
+ CopyWindowToVram(data->bButtonCancelWindowId, 2);
DrawStdWindowFrame(data->listWindowId, FALSE);
- gMultiuseListMenuTemplate = gUnknown_082F0204;
+ gMultiuseListMenuTemplate = sListMenuTemplate_UnionRoomGroups;
gMultiuseListMenuTemplate.windowId = data->listWindowId;
data->listTaskId = ListMenuInit(&gMultiuseListMenuTemplate, 0, 0);
- DrawStdWindowFrame(data->field_D, FALSE);
- PutWindowTilemap(data->field_D);
- sub_80125BC(data->field_D);
- CopyWindowToVram(data->field_D, 2);
+ DrawStdWindowFrame(data->playerNameAndIdWindowId, FALSE);
+ PutWindowTilemap(data->playerNameAndIdWindowId);
+ PrintPlayerNameAndIdOnWindow(data->playerNameAndIdWindowId);
+ CopyWindowToVram(data->playerNameAndIdWindowId, 2);
CopyBgTilemapBufferToVram(0);
- data->field_F = 0;
- data->state = 3;
+ data->leaderId = 0;
+ data->state = LG_STATE_CHOOSE_LEADER_HANDLE_INPUT;
break;
- case 3:
- id = sub_8013E44();
+ case LG_STATE_CHOOSE_LEADER_HANDLE_INPUT:
+ id = GetNewLeaderCandidate();
switch (id)
{
case 1:
@@ -869,23 +1008,23 @@ void sub_80134E8(u8 taskId)
if (gMain.newKeys & A_BUTTON && id != -1)
{
// this unused variable along with the assignment is needed to match
- u32 unusedVar;
- unusedVar = data->field_0->arr[id].unk.field_0.activity;
+ u32 activity = data->field_0->arr[id].gname_uname.gname.activity;
- if (data->field_0->arr[id].field_1A_0 == 1 && !data->field_0->arr[id].unk.field_0.started)
+ if (data->field_0->arr[id].groupScheduledAnim == UNION_ROOM_SPAWN_IN && !data->field_0->arr[id].gname_uname.gname.started)
{
- u32 var = sub_8013B8C(data, id);
- if (var == 0)
+ u32 readyStatus = IsTryingToTradeAcrossVersionTooSoon(data, id);
+ if (readyStatus == UR_TRADE_READY)
{
- sub_8013BD8(data, id);
- data->state = 5;
- PlaySE(SE_PN_ON);
+ // Trading is allowed, or not trading at all
+ AskToJoinRfuGroup(data, id);
+ data->state = LG_STATE_ASK_JOIN_GROUP;
+ PlaySE(SE_POKENAV_ON);
}
else
{
- StringCopy(gStringVar4, sCantTransmitToTrainerTexts[var - 1]);
- data->state = 18;
- PlaySE(SE_PN_ON);
+ StringCopy(gStringVar4, sCantTransmitToTrainerTexts[readyStatus - 1]);
+ data->state = LG_STATE_TRADE_NOT_READY;
+ PlaySE(SE_POKENAV_ON);
}
}
else
@@ -895,7 +1034,7 @@ void sub_80134E8(u8 taskId)
}
else if (gMain.newKeys & B_BUTTON)
{
- data->state = 10;
+ data->state = LG_STATE_CANCEL_CHOOSE_LEADER;
}
break;
default:
@@ -903,273 +1042,292 @@ void sub_80134E8(u8 taskId)
break;
}
break;
- case 5:
- sub_80130B4(gStringVar4, gUnknown_02022C2C);
+ case LG_STATE_ASK_JOIN_GROUP:
+ GetYouAskedToJoinGroupPleaseWaitMessage(gStringVar4, gPlayerCurrActivity);
if (PrintOnTextbox(&data->textState, gStringVar4))
{
- sub_8018404(gStringVar1, &data->field_0->arr[data->field_F]);
- data->state = 6;
+ IntlConvPartnerUname7(gStringVar1, &data->field_0->arr[data->leaderId]);
+ data->state = LG_STATE_MAIN;
}
break;
- case 6:
- if (gReceivedRemoteLinkPlayers != 0)
+ case LG_STATE_MAIN:
+ if (gReceivedRemoteLinkPlayers)
{
- gUnknown_02022C2C = data->field_0->arr[data->field_F].unk.field_0.activity;
- sub_8011A64(0, 0);
- switch (gUnknown_02022C2C)
+ gPlayerCurrActivity = data->field_0->arr[data->leaderId].gname_uname.gname.activity;
+ RfuSetStatus(RFU_STATUS_OK, 0);
+ switch (gPlayerCurrActivity)
{
- case 1 ... 5:
- case 9 ... 11:
- case 13 ... 16:
- case 21 ... 28:
- data->state = 20;
+ case ACTIVITY_BATTLE_SINGLE:
+ case ACTIVITY_BATTLE_DOUBLE:
+ case ACTIVITY_BATTLE_MULTI:
+ case ACTIVITY_TRADE:
+ case ACTIVITY_CHAT:
+ case ACTIVITY_POKEMON_JUMP:
+ case ACTIVITY_BERRY_CRUSH:
+ case ACTIVITY_BERRY_PICK:
+ case ACTIVITY_SPIN_TRADE:
+ case ACTIVITY_BATTLE_TOWER:
+ case ACTIVITY_BATTLE_TOWER_OPEN:
+ case ACTIVITY_RECORD_CORNER:
+ case ACTIVITY_BERRY_BLENDER:
+ case ACTIVITY_WONDER_CARD2:
+ case ACTIVITY_WONDER_NEWS2:
+ case ACTIVITY_CONTEST_COOL:
+ case ACTIVITY_CONTEST_BEAUTY:
+ case ACTIVITY_CONTEST_CUTE:
+ case ACTIVITY_CONTEST_SMART:
+ case ACTIVITY_CONTEST_TOUGH:
+ data->state = LG_STATE_READY_START_ACTIVITY;
return;
}
}
- switch (sub_8011A74())
+ switch (RfuGetStatus())
{
- case 1:
- data->state = 12;
+ case RFU_STATUS_FATAL_ERROR:
+ data->state = LG_STATE_RFU_ERROR;
break;
- case 2:
- case 6:
- case 9:
- data->state = 14;
+ case RFU_STATUS_CONNECTION_ERROR:
+ case RFU_STATUS_JOIN_GROUP_NO:
+ case RFU_STATUS_LEAVE_GROUP:
+ data->state = LG_STATE_DISCONNECTED;
break;
- case 5:
- sub_8013160(gStringVar4, gUnknown_02022C2C);
+ case RFU_STATUS_JOIN_GROUP_OK:
+ GetGroupLeaderSentAnOKMessage(gStringVar4, gPlayerCurrActivity);
if (PrintOnTextbox(&data->textState, gStringVar4))
{
- if (gUnknown_02022C2C == 28 || gUnknown_02022C2C == 14)
+ if (gPlayerCurrActivity == ACTIVITY_BATTLE_TOWER || gPlayerCurrActivity == ACTIVITY_BATTLE_TOWER_OPEN)
{
- sub_8011A64(12, 0);
+ RfuSetStatus(RFU_STATUS_ACK_JOIN_GROUP, 0);
}
else
{
- sub_8011A64(7, 0);
- StringCopy(gStringVar1, sLinkGroupActivityTexts[gUnknown_02022C2C]);
+ RfuSetStatus(RFU_STATUS_WAIT_ACK_JOIN_GROUP, 0);
+ StringCopy(gStringVar1, sLinkGroupActivityNameTexts[gPlayerCurrActivity]);
StringExpandPlaceholders(gStringVar4, sText_AwaitingOtherMembers);
}
}
break;
- case 7:
- if (data->field_15 > 0xF0)
+ case RFU_STATUS_WAIT_ACK_JOIN_GROUP:
+ if (data->delayBeforePrint > 240)
{
if (PrintOnTextbox(&data->textState, gStringVar4))
{
- sub_8011A64(12, 0);
- data->field_15 = 0;
+ RfuSetStatus(RFU_STATUS_ACK_JOIN_GROUP, 0);
+ data->delayBeforePrint = 0;
}
}
else
{
- switch (gUnknown_02022C2C)
+ switch (gPlayerCurrActivity)
{
- case 1:
- case 2:
- case 4:
- case 14:
- case 28:
+ case ACTIVITY_BATTLE_SINGLE:
+ case ACTIVITY_BATTLE_DOUBLE:
+ case ACTIVITY_TRADE:
+ case ACTIVITY_BATTLE_TOWER:
+ case ACTIVITY_BATTLE_TOWER_OPEN:
break;
default:
- data->field_15++;
+ data->delayBeforePrint++;
break;
}
}
break;
}
- if (!sub_8011A74() && gMain.newKeys & B_BUTTON)
- data->state = 7;
+ if (RfuGetStatus() == RFU_STATUS_OK && gMain.newKeys & B_BUTTON)
+ data->state = LG_STATE_ASK_LEAVE_GROUP;
break;
- case 7:
+ case LG_STATE_ASK_LEAVE_GROUP:
if (PrintOnTextbox(&data->textState, sText_QuitBeingMember))
- data->state = 8;
+ data->state = LG_STATE_ASK_LEAVE_GROUP_HANDLE_INPUT;
break;
- case 8:
- switch (sub_80170B8(&data->textState, sub_8011A74()))
+ case LG_STATE_ASK_LEAVE_GROUP_HANDLE_INPUT:
+ switch (UnionRoomHandleYesNo(&data->textState, RfuGetStatus()))
{
- case 0:
- sub_80106D4();
- data->state = 9;
+ case 0: // YES
+ SendLeaveGroupNotice();
+ data->state = LG_STATE_WAIT_LEAVE_GROUP;
RedrawListMenu(data->listTaskId);
break;
- case 1:
+ case 1: // NO
case -1:
- data->state = 5;
+ data->state = LG_STATE_ASK_JOIN_GROUP;
RedrawListMenu(data->listTaskId);
break;
case -3:
- data->state = 6;
+ data->state = LG_STATE_MAIN;
RedrawListMenu(data->listTaskId);
break;
}
break;
- case 9:
- if (sub_8011A74())
- data->state = 6;
+ case LG_STATE_WAIT_LEAVE_GROUP:
+ if (RfuGetStatus())
+ data->state = LG_STATE_MAIN;
break;
- case 10:
- case 12:
- case 14:
- case 18:
- case 20:
- ClearWindowTilemap(data->field_D);
- ClearStdWindowAndFrame(data->field_D, FALSE);
+ case LG_STATE_CANCEL_CHOOSE_LEADER: // next: LG_STATE_CANCELED
+ case LG_STATE_RFU_ERROR: // next: LG_STATE_RFU_ERROR_SHUTDOWN
+ case LG_STATE_DISCONNECTED: // next: LG_STATE_RETRY_CONNECTION
+ case LG_STATE_TRADE_NOT_READY: // next: LG_STATE_TRADE_NOT_READY_RETRY
+ case LG_STATE_READY_START_ACTIVITY: // next: LG_STATE_START_ACTIVITY
+ ClearWindowTilemap(data->playerNameAndIdWindowId);
+ ClearStdWindowAndFrame(data->playerNameAndIdWindowId, FALSE);
DestroyListMenuTask(data->listTaskId, 0, 0);
- ClearWindowTilemap(data->field_C);
+ ClearWindowTilemap(data->bButtonCancelWindowId);
ClearStdWindowAndFrame(data->listWindowId, FALSE);
CopyBgTilemapBufferToVram(0);
- RemoveWindow(data->field_D);
+ RemoveWindow(data->playerNameAndIdWindowId);
RemoveWindow(data->listWindowId);
- RemoveWindow(data->field_C);
- DestroyTask(data->field_11);
+ RemoveWindow(data->bButtonCancelWindowId);
+ DestroyTask(data->listenTaskId);
Free(data->field_0);
Free(data->field_4);
data->state++;
break;
- case 13:
+ case LG_STATE_RFU_ERROR_SHUTDOWN:
DestroyWirelessStatusIndicatorSprite();
- if (PrintOnTextbox(&data->textState, sPlayerDisconnectedTexts[sub_8011A74()]))
+ if (PrintOnTextbox(&data->textState, sPlayerDisconnectedTexts[RfuGetStatus()]))
{
- gSpecialVar_Result = 6;
- data->state = 23;
+ gSpecialVar_Result = LINKUP_CONNECTION_ERROR;
+ data->state = LG_STATE_SHUTDOWN;
}
break;
- case 11:
+ case LG_STATE_CANCELED:
DestroyWirelessStatusIndicatorSprite();
- gSpecialVar_Result = 5;
- data->state = 23;
+ gSpecialVar_Result = LINKUP_FAILED;
+ data->state = LG_STATE_SHUTDOWN;
break;
- case 15:
+ case LG_STATE_RETRY_CONNECTION:
+ // Failure from disconnection
+ // Happens if player or required member(s) leave group
+ // or if player is rejected from joining group
DestroyWirelessStatusIndicatorSprite();
- if (PrintOnTextbox(&data->textState, sPlayerDisconnectedTexts[sub_8011A74()]))
+ if (PrintOnTextbox(&data->textState, sPlayerDisconnectedTexts[RfuGetStatus()]))
{
- gSpecialVar_Result = 8;
- data->state = 23;
+ gSpecialVar_Result = LINKUP_RETRY_ROLE_ASSIGN;
+ data->state = LG_STATE_SHUTDOWN;
}
break;
- case 19:
+ case LG_STATE_TRADE_NOT_READY_RETRY:
if (PrintOnTextbox(&data->textState, gStringVar4))
{
- gSpecialVar_Result = 8;
- data->state = 23;
+ gSpecialVar_Result = LINKUP_RETRY_ROLE_ASSIGN;
+ data->state = LG_STATE_SHUTDOWN;
}
break;
- case 23:
+ case LG_STATE_SHUTDOWN:
DestroyTask(taskId);
- sub_80173D4();
- sub_800EDD4();
+ JoinGroup_EnableScriptContexts();
+ LinkRfu_Shutdown();
break;
- case 21:
- sub_80149C4();
+ case LG_STATE_START_ACTIVITY:
+ CreateTask_RunScriptAndFadeToActivity();
DestroyTask(taskId);
break;
}
}
-u32 sub_8013B8C(struct UnkStruct_Group *arg0, s32 id)
+static u32 IsTryingToTradeAcrossVersionTooSoon(struct WirelessLink_Group *data, s32 id)
{
- struct UnkStruct_x20 *structPtr = &arg0->field_0->arr[id];
+ struct UnkStruct_x20 *structPtr = &data->field_0->arr[id];
- if (gUnknown_02022C2C == 4 && structPtr->unk.field_0.unk_00.version != VERSION_EMERALD)
+ if (gPlayerCurrActivity == ACTIVITY_TRADE && structPtr->gname_uname.gname.unk_00.version != VERSION_EMERALD)
{
if (!(gSaveBlock2Ptr->specialSaveWarpFlags & CHAMPION_SAVEWARP))
- return 1;
- else if (structPtr->unk.field_0.unk_00.isChampion)
- return 0;
+ return UR_TRADE_PLAYER_NOT_READY;
+ else if (structPtr->gname_uname.gname.unk_00.isChampion)
+ return UR_TRADE_READY;
}
else
{
- return 0;
+ return UR_TRADE_READY;
}
- return 2;
+ return UR_TRADE_PARTNER_NOT_READY;
}
-void sub_8013BD8(struct UnkStruct_Group *data, s32 id)
+static void AskToJoinRfuGroup(struct WirelessLink_Group *data, s32 id)
{
- data->field_F = id;
+ data->leaderId = id;
LoadWirelessStatusIndicatorSpriteGfx();
CreateWirelessStatusIndicatorSprite(0, 0);
RedrawListMenu(data->listTaskId);
- sub_8018404(gStringVar1, &data->field_0->arr[data->field_F]);
- sub_8011090(gUnknown_082F0530[gSpecialVar_0x8004], 0, 1);
- sub_8011FC8(data->field_0->arr[data->field_F].unk.playerName, ReadAsU16(data->field_0->arr[data->field_F].unk.field_0.unk_00.playerTrainerId));
+ IntlConvPartnerUname7(gStringVar1, &data->field_0->arr[data->leaderId]);
+ UpdateGameData_SetActivity(sLinkGroupToURoomActivity[gSpecialVar_0x8004], 0, TRUE);
+ CreateTask_RfuReconnectWithParent(data->field_0->arr[data->leaderId].gname_uname.playerName, ReadAsU16(data->field_0->arr[data->leaderId].gname_uname.gname.unk_00.playerTrainerId));
}
-u8 sub_8013C40(void)
+u8 CreateTask_ListenToWireless(void)
{
u8 taskId;
- struct UnkStruct_Group *dataPtr;
+ struct WirelessLink_Group *data;
- taskId = CreateTask(sub_8013C7C, 0);
- gUnknown_02022C30.group = dataPtr = (void*)(gTasks[taskId].data);
+ taskId = CreateTask(Task_ListenToWireless, 0);
+ sWirelessLinkMain.group = data = (void*)(gTasks[taskId].data);
- dataPtr->state = 0;
- dataPtr->textState = 0;
+ data->state = 0;
+ data->textState = 0;
- gUnknown_03000DA4 = dataPtr;
+ sGroup = data;
return taskId;
}
-void sub_8013C7C(u8 taskId)
+static void Task_ListenToWireless(u8 taskId)
{
- struct UnkStruct_Group *data = gUnknown_02022C30.group;
+ struct WirelessLink_Group *data = sWirelessLinkMain.group;
switch (data->state)
{
case 0:
- sub_8010F84(0, 0, 0);
- sub_800B488();
+ SetHostRFUtgtGname(0, 0, 0);
+ SetWirelessCommType1();
OpenLink();
- sub_8011C5C();
+ InitializeRfuLinkManager_JoinGroup();
sub_80111B0(TRUE);
- data->field_4 = AllocZeroed(0x70);
- data->field_0 = AllocZeroed(0x200);
+ data->field_4 = AllocZeroed(4 * sizeof(struct UnkStruct_x1C));
+ data->field_0 = AllocZeroed(16 * sizeof(struct UnkStruct_x20));
data->state = 2;
break;
case 2:
- sub_80175EC(data->field_4, 4);
- sub_8017580(data->field_0->arr, 16);
- data->field_11 = sub_8016FC0(data->field_4, 0xFF);
- data->field_F = 0;
+ ClearUnkStruct_x1CArray(data->field_4, 4);
+ ClearUnkStruct_x20Array(data->field_0->arr, 16);
+ data->listenTaskId = CreateTask_ListenForPartnersWithCompatibleSerialNos(data->field_4, 0xFF);
+ data->leaderId = 0;
data->state = 3;
break;
case 3:
- if (sub_8013E44() == 1)
+ if (GetNewLeaderCandidate() == 1)
PlaySE(SE_PC_LOGIN);
if (gTasks[taskId].data[15] == 0xFF)
data->state = 10;
break;
case 10:
- DestroyTask(data->field_11);
+ DestroyTask(data->listenTaskId);
Free(data->field_0);
Free(data->field_4);
- sub_800EDD4();
+ LinkRfu_Shutdown();
data->state++;
break;
case 11:
- sub_800EDD4();
+ LinkRfu_Shutdown();
DestroyTask(taskId);
break;
}
}
-bool32 sub_8013D88(u32 arg0, u32 id)
+static bool32 IsPartnerActivityAcceptable(u32 activity, u32 linkGroup)
{
- if (id == 0xFF)
+ if (linkGroup == 0xFF)
return TRUE;
- if (id <= ARRAY_COUNT(gUnknown_082F04D8)) // UB: <= may access data outside the array
+ if (linkGroup <= ARRAY_COUNT(sAcceptedActivityIds)) // UB: <= may access data outside the array
{
- const u8 *bytes = gUnknown_082F04D8[id];
+ const u8 *bytes = sAcceptedActivityIds[linkGroup];
while ((*(bytes) != 0xFF))
{
- if ((*bytes) == arg0)
+ if ((*bytes) == activity)
return TRUE;
bytes++;
}
@@ -1178,49 +1336,49 @@ bool32 sub_8013D88(u32 arg0, u32 id)
return FALSE;
}
-u8 sub_8013DBC(struct UnkStruct_Group *data, u32 id)
+static u8 URoomGroupListGetTextColor(struct WirelessLink_Group *data, u32 id)
{
- if (data->field_0->arr[id].field_1A_0 == 1)
+ if (data->field_0->arr[id].groupScheduledAnim == UNION_ROOM_SPAWN_IN)
{
- if (data->field_0->arr[id].unk.field_0.started)
- return 3;
- else if (data->field_0->arr[id].field_1A_1 != 0)
- return 1;
+ if (data->field_0->arr[id].gname_uname.gname.started)
+ return UR_COLOR_WHT_WHT_LTE;
+ else if (data->field_0->arr[id].useRedText)
+ return UR_COLOR_RED_WHT_LTR;
else if (data->field_0->arr[id].field_1B != 0)
- return 2;
+ return UR_COLOR_GRN_WHT_LTG;
}
- return 0;
+ return UR_COLOR_DKE_WHT_LTE;
}
-void sub_8013DF4(u8 arg0, s32 id, u8 arg2)
+static void ListMenuItemPrintFunc_UnionRoomGroups(u8 windowId, s32 id, u8 y)
{
- struct UnkStruct_Group *data = gUnknown_02022C30.group;
- u8 var = sub_8013DBC(data, id);
+ struct WirelessLink_Group *data = sWirelessLinkMain.group;
+ u8 colorId = URoomGroupListGetTextColor(data, id);
- sub_80177B8(arg0, 8, arg2, &data->field_0->arr[id], var, id);
+ PrintUnionRoomGroupOnWindow(windowId, 8, y, &data->field_0->arr[id], colorId, id);
}
-u8 sub_8013E44(void)
+static u8 GetNewLeaderCandidate(void)
{
- struct UnkStruct_Group *data = gUnknown_02022C30.group;
+ struct WirelessLink_Group *data = sWirelessLinkMain.group;
u8 ret = 0;
u8 i;
s32 id;
for (i = 0; i < 16; i++)
{
- if (data->field_0->arr[i].field_1A_0 != 0)
+ if (data->field_0->arr[i].groupScheduledAnim != UNION_ROOM_SPAWN_NONE)
{
- id = sub_80176E4(&data->field_0->arr[i], data->field_4->arr);
+ id = Findx20Inx1CArray(&data->field_0->arr[i], data->field_4->arr);
if (id != 0xFF)
{
- if (data->field_0->arr[i].field_1A_0 == 1)
+ if (data->field_0->arr[i].groupScheduledAnim == UNION_ROOM_SPAWN_IN)
{
- if (sub_8017678(&data->field_0->arr[i].unk, &data->field_4->arr[id].unk0))
+ if (AreUnionRoomPlayerGnamesDifferent(&data->field_0->arr[i].gname_uname, &data->field_4->arr[id].gname_uname))
{
- data->field_0->arr[i].unk = data->field_4->arr[id].unk0;
- data->field_0->arr[i].field_1B = 0x40;
+ data->field_0->arr[i].gname_uname = data->field_4->arr[id].gname_uname;
+ data->field_0->arr[i].field_1B = 64;
ret = 1;
}
else
@@ -1235,21 +1393,21 @@ u8 sub_8013E44(void)
}
else
{
- data->field_0->arr[i].field_1A_0 = 1;
- data->field_0->arr[i].field_1B = 0x40;
+ data->field_0->arr[i].groupScheduledAnim = UNION_ROOM_SPAWN_IN;
+ data->field_0->arr[i].field_1B = 64;
ret = 1;
}
- data->field_0->arr[i].field_18 = 0;
+ data->field_0->arr[i].timeoutCounter = 0;
}
else
{
- if (data->field_0->arr[i].field_1A_0 != 2)
+ if (data->field_0->arr[i].groupScheduledAnim != UNION_ROOM_SPAWN_OUT)
{
- data->field_0->arr[i].field_18++;
- if (data->field_0->arr[i].field_18 >= 300)
+ data->field_0->arr[i].timeoutCounter++;
+ if (data->field_0->arr[i].timeoutCounter >= 300)
{
- data->field_0->arr[i].field_1A_0 = 2;
+ data->field_0->arr[i].groupScheduledAnim = UNION_ROOM_SPAWN_OUT;
ret = 2;
}
}
@@ -1257,9 +1415,9 @@ u8 sub_8013E44(void)
}
}
- for (id = 0; id < 4; id++)
+ for (id = 0; id < RFU_CHILD_MAX; id++)
{
- if (sub_8017734(data->field_0->arr, &data->field_4->arr[id], 16) != 0xFF)
+ if (Appendx1Ctox20(data->field_0->arr, &data->field_4->arr[id], 16) != 0xFF)
ret = 1;
}
@@ -1272,14 +1430,14 @@ static void Task_CreateTradeMenu(u8 taskId)
DestroyTask(taskId);
}
-u8 sub_8013F78(void)
+u8 CreateTask_CreateTradeMenu(void)
{
u8 taskId = CreateTask(Task_CreateTradeMenu, 0);
return taskId;
}
-void sub_8013F90(u8 taskId)
+static void Task_StartUnionRoomTrade(u8 taskId)
{
u32 monId = GetPartyPositionOfRegisteredMon(&sUnionRoomTrade, GetMultiplayerId());
@@ -1319,17 +1477,17 @@ void sub_8013F90(u8 taskId)
}
}
-void sub_80140E0(u8 taskId)
+static void Task_ExchangeCards(u8 taskId)
{
switch (gTasks[taskId].data[0])
{
case 0:
if (GetMultiplayerId() == 0)
- sub_800A4D8(2);
+ SendBlockRequest(2);
gTasks[taskId].data[0]++;
break;
case 1:
- if (GetBlockReceivedStatus() == sub_800A9D8())
+ if (GetBlockReceivedStatus() == GetLinkPlayerCountAsBitFlags())
{
s32 i;
u16 *recvBuff;
@@ -1343,11 +1501,11 @@ void sub_80140E0(u8 taskId)
if (GetLinkPlayerCount() == 2)
{
recvBuff = gBlockRecvBuffer[GetMultiplayerId() ^ 1];
- sub_801B94C(recvBuff[48]);
+ MEventHandleReceivedWonderCard(recvBuff[48]);
}
else
{
- sub_801B940();
+ ResetReceivedWonderCardFlag();
}
ResetBlockReceivedFlags();
@@ -1357,16 +1515,16 @@ void sub_80140E0(u8 taskId)
}
}
-void sub_80141A4(void)
+static void CB2_ShowCard(void)
{
switch (gMain.state)
{
case 0:
- CreateTask(sub_80140E0, 5);
+ CreateTask(Task_ExchangeCards, 5);
gMain.state++;
break;
case 1:
- if (!FuncIsActiveTask(sub_80140E0))
+ if (!FuncIsActiveTask(Task_ExchangeCards))
ShowTrainerCardInLink(GetMultiplayerId() ^ 1, CB2_ReturnToField);
break;
}
@@ -1377,7 +1535,7 @@ void sub_80141A4(void)
BuildOamBuffer();
}
-void sub_8014210(u16 battleFlags)
+void StartUnionRoomBattle(u16 battleFlags)
{
HealPlayerParty();
SavePlayerParty();
@@ -1385,12 +1543,12 @@ void sub_8014210(u16 battleFlags)
gLinkPlayers[0].linkType = LINKTYPE_BATTLE;
gLinkPlayers[GetMultiplayerId()].id = GetMultiplayerId();
gLinkPlayers[GetMultiplayerId() ^ 1].id = GetMultiplayerId() ^ 1;
- gMain.savedCallback = sub_80B360C;
+ gMain.savedCallback = CB2_ReturnFromCableClubBattle;
gBattleTypeFlags = battleFlags;
PlayBattleBGM();
}
-static void sub_8014290(u16 linkService, u16 x, u16 y)
+static void WarpForWirelessMinigame(u16 linkService, u16 x, u16 y)
{
VarSet(VAR_CABLE_CLUB_STATE, linkService);
SetWarpDestination(gSaveBlock1Ptr->location.mapGroup, gSaveBlock1Ptr->location.mapNum, -1, x, y);
@@ -1398,7 +1556,7 @@ static void sub_8014290(u16 linkService, u16 x, u16 y)
WarpIntoMap();
}
-void sub_8014304(s8 mapGroup, s8 mapNum, s32 x, s32 y, u16 linkService)
+static void WarpForCableClubActivity(s8 mapGroup, s8 mapNum, s32 x, s32 y, u16 linkService)
{
gSpecialVar_0x8004 = linkService;
VarSet(VAR_CABLE_CLUB_STATE, linkService);
@@ -1409,16 +1567,16 @@ void sub_8014304(s8 mapGroup, s8 mapNum, s32 x, s32 y, u16 linkService)
WarpIntoMap();
}
-void sub_8014384(void)
+static void CB2_TransitionToCableClub(void)
{
switch (gMain.state)
{
case 0:
- CreateTask(sub_80140E0, 5);
+ CreateTask(Task_ExchangeCards, 5);
gMain.state++;
break;
case 1:
- if (!FuncIsActiveTask(sub_80140E0))
+ if (!FuncIsActiveTask(Task_ExchangeCards))
SetMainCallback2(CB2_ReturnToFieldCableClub);
break;
}
@@ -1429,120 +1587,125 @@ void sub_8014384(void)
BuildOamBuffer();
}
-void sub_80143E4(void *arg0, bool32 arg1)
+static void CreateTrainerCardInBuffer(void *dest, bool32 setWonderCard)
{
- u16 *argAsU16Ptr = arg0;
+ u16 *argAsU16Ptr = dest;
TrainerCard_GenerateCardForPlayer((struct TrainerCard *)argAsU16Ptr);
- if (arg1)
+ if (setWonderCard)
argAsU16Ptr[48] = GetWonderCardFlagID();
else
argAsU16Ptr[48] = 0;
}
-void sub_801440C(u8 taskId)
+static void Task_StartActivity(u8 taskId)
{
- sub_801B940();
- switch (gUnknown_02022C2C)
+ ResetReceivedWonderCardFlag();
+ switch (gPlayerCurrActivity)
{
- case 1 ... 4:
- case 9 ... 11:
- case 13:
- case 15:
+ case ACTIVITY_BATTLE_SINGLE:
+ case ACTIVITY_BATTLE_DOUBLE:
+ case ACTIVITY_BATTLE_MULTI:
+ case ACTIVITY_TRADE:
+ case ACTIVITY_POKEMON_JUMP:
+ case ACTIVITY_BERRY_CRUSH:
+ case ACTIVITY_BERRY_PICK:
+ case ACTIVITY_SPIN_TRADE:
+ case ACTIVITY_RECORD_CORNER:
RecordMixTrainerNames();
break;
}
- switch (gUnknown_02022C2C)
+ switch (gPlayerCurrActivity)
{
- case 65:
- case 81:
+ case ACTIVITY_BATTLE_SINGLE | IN_UNION_ROOM:
+ case ACTIVITY_ACCEPT | IN_UNION_ROOM:
CleanupOverworldWindowsAndTilemaps();
- gMain.savedCallback = sub_801AC54;
+ gMain.savedCallback = CB2_UnionRoomBattle;
InitChooseHalfPartyForBattle(3);
break;
- case 1:
+ case ACTIVITY_BATTLE_SINGLE:
CleanupOverworldWindowsAndTilemaps();
- sub_80143E4(gBlockSendBuffer, TRUE);
+ CreateTrainerCardInBuffer(gBlockSendBuffer, TRUE);
HealPlayerParty();
SavePlayerParty();
LoadPlayerBag();
- sub_8014304(MAP_GROUP(BATTLE_COLOSSEUM_2P), MAP_NUM(BATTLE_COLOSSEUM_2P), 6, 8, USING_SINGLE_BATTLE);
- SetMainCallback2(sub_8014384);
+ WarpForCableClubActivity(MAP_GROUP(BATTLE_COLOSSEUM_2P), MAP_NUM(BATTLE_COLOSSEUM_2P), 6, 8, USING_SINGLE_BATTLE);
+ SetMainCallback2(CB2_TransitionToCableClub);
break;
- case 2:
+ case ACTIVITY_BATTLE_DOUBLE:
CleanupOverworldWindowsAndTilemaps();
HealPlayerParty();
SavePlayerParty();
LoadPlayerBag();
- sub_80143E4(gBlockSendBuffer, TRUE);
- sub_8014304(MAP_GROUP(BATTLE_COLOSSEUM_2P), MAP_NUM(BATTLE_COLOSSEUM_2P), 6, 8, USING_DOUBLE_BATTLE);
- SetMainCallback2(sub_8014384);
+ CreateTrainerCardInBuffer(gBlockSendBuffer, TRUE);
+ WarpForCableClubActivity(MAP_GROUP(BATTLE_COLOSSEUM_2P), MAP_NUM(BATTLE_COLOSSEUM_2P), 6, 8, USING_DOUBLE_BATTLE);
+ SetMainCallback2(CB2_TransitionToCableClub);
break;
- case 3:
+ case ACTIVITY_BATTLE_MULTI:
CleanupOverworldWindowsAndTilemaps();
HealPlayerParty();
SavePlayerParty();
LoadPlayerBag();
- sub_80143E4(gBlockSendBuffer, TRUE);
- sub_8014304(MAP_GROUP(BATTLE_COLOSSEUM_4P), MAP_NUM(BATTLE_COLOSSEUM_4P), 5, 8, USING_MULTI_BATTLE);
- SetMainCallback2(sub_8014384);
+ CreateTrainerCardInBuffer(gBlockSendBuffer, TRUE);
+ WarpForCableClubActivity(MAP_GROUP(BATTLE_COLOSSEUM_4P), MAP_NUM(BATTLE_COLOSSEUM_4P), 5, 8, USING_MULTI_BATTLE);
+ SetMainCallback2(CB2_TransitionToCableClub);
break;
- case 4:
- sub_80143E4(gBlockSendBuffer, TRUE);
+ case ACTIVITY_TRADE:
+ CreateTrainerCardInBuffer(gBlockSendBuffer, TRUE);
CleanupOverworldWindowsAndTilemaps();
- sub_8014304(MAP_GROUP(TRADE_CENTER), MAP_NUM(TRADE_CENTER), 5, 8, USING_TRADE_CENTER);
- SetMainCallback2(sub_8014384);
+ WarpForCableClubActivity(MAP_GROUP(TRADE_CENTER), MAP_NUM(TRADE_CENTER), 5, 8, USING_TRADE_CENTER);
+ SetMainCallback2(CB2_TransitionToCableClub);
break;
- case 15:
- sub_80143E4(gBlockSendBuffer, TRUE);
+ case ACTIVITY_RECORD_CORNER:
+ CreateTrainerCardInBuffer(gBlockSendBuffer, TRUE);
CleanupOverworldWindowsAndTilemaps();
- sub_8014304(MAP_GROUP(RECORD_CORNER), MAP_NUM(RECORD_CORNER), 8, 9, USING_RECORD_CORNER);
- SetMainCallback2(sub_8014384);
+ WarpForCableClubActivity(MAP_GROUP(RECORD_CORNER), MAP_NUM(RECORD_CORNER), 8, 9, USING_RECORD_CORNER);
+ SetMainCallback2(CB2_TransitionToCableClub);
break;
- case 68:
+ case ACTIVITY_TRADE | IN_UNION_ROOM:
CleanupOverworldWindowsAndTilemaps();
- CreateTask(sub_8013F90, 0);
+ CreateTask(Task_StartUnionRoomTrade, 0);
break;
- case 5:
- case 69:
+ case ACTIVITY_CHAT:
+ case ACTIVITY_CHAT | IN_UNION_ROOM:
if (GetMultiplayerId() == 0)
{
- sub_800ED10();
+ LinkRfu_CreateConnectionAsParent();
}
else
{
- sub_800ED28();
- sub_8010F84(69, 0, 1);
+ LinkRfu_StopManagerBeforeEnteringChat();
+ SetHostRFUtgtGname(69, 0, 1);
}
- sub_801DD98();
+ EnterUnionRoomChat();
break;
- case 8:
- case 72:
- sub_80143E4(gBlockSendBuffer, FALSE);
- SetMainCallback2(sub_80141A4);
+ case ACTIVITY_CARD:
+ case ACTIVITY_CARD | IN_UNION_ROOM:
+ CreateTrainerCardInBuffer(gBlockSendBuffer, FALSE);
+ SetMainCallback2(CB2_ShowCard);
break;
- case 9:
- sub_8014290(USING_MINIGAME, 5, 1);
- sub_802A9A8(GetCursorSelectionMonId(), CB2_LoadMap);
+ case ACTIVITY_POKEMON_JUMP:
+ WarpForWirelessMinigame(USING_MINIGAME, 5, 1);
+ StartPokemonJump(GetCursorSelectionMonId(), CB2_LoadMap);
break;
- case 10:
- sub_8014290(USING_BERRY_CRUSH, 9, 1);
- sub_8020C70(CB2_LoadMap);
+ case ACTIVITY_BERRY_CRUSH:
+ WarpForWirelessMinigame(USING_BERRY_CRUSH, 9, 1);
+ StartBerryCrush(CB2_LoadMap);
break;
- case 11:
- sub_8014290(USING_MINIGAME, 5, 1);
- sub_802493C(GetCursorSelectionMonId(), CB2_LoadMap);
+ case ACTIVITY_BERRY_PICK:
+ WarpForWirelessMinigame(USING_MINIGAME, 5, 1);
+ StartDodrioBerryPicking(GetCursorSelectionMonId(), CB2_LoadMap);
break;
}
DestroyTask(taskId);
- gSpecialVar_Result = 1;
- if (gUnknown_02022C2C != 68)
+ gSpecialVar_Result = LINKUP_SUCCESS;
+ if (gPlayerCurrActivity != (ACTIVITY_TRADE | IN_UNION_ROOM))
ScriptContext2_Disable();
}
-void sub_8014790(u8 taskId)
+static void Task_RunScriptAndFadeToActivity(u8 taskId)
{
s16 *data = gTasks[taskId].data;
u16 *sendBuff = (u16*)(gBlockSendBuffer);
@@ -1550,11 +1713,11 @@ void sub_8014790(u8 taskId)
switch (data[0])
{
case 0:
- gSpecialVar_Result = 1;
- switch (gUnknown_02022C2C)
+ gSpecialVar_Result = LINKUP_SUCCESS;
+ switch (gPlayerCurrActivity)
{
- case 14:
- case 28:
+ case ACTIVITY_BATTLE_TOWER:
+ case ACTIVITY_BATTLE_TOWER_OPEN:
gLinkPlayers[0].linkType = LINKTYPE_BATTLE;
gLinkPlayers[0].id = 0;
gLinkPlayers[1].id = 2;
@@ -1565,8 +1728,12 @@ void sub_8014790(u8 taskId)
RecordMixTrainerNames();
ResetBlockReceivedFlags();
break;
- case 16:
- case 23 ... 27:
+ case ACTIVITY_BERRY_BLENDER:
+ case ACTIVITY_CONTEST_COOL:
+ case ACTIVITY_CONTEST_BEAUTY:
+ case ACTIVITY_CONTEST_CUTE:
+ case ACTIVITY_CONTEST_SMART:
+ case ACTIVITY_CONTEST_TOUGH:
RecordMixTrainerNames();
DestroyTask(taskId);
default:
@@ -1585,14 +1752,14 @@ void sub_8014790(u8 taskId)
case 2:
if (!gPaletteFade.active)
{
- if (gUnknown_02022C2C == 29)
+ if (gPlayerCurrActivity == ACTIVITY_29)
{
DestroyTask(taskId);
SetMainCallback2(CB2_StartCreateTradeMenu);
}
else
{
- sub_800ADF8();
+ SetLinkStandbyCallback();
data[0] = 3;
}
}
@@ -1601,7 +1768,7 @@ void sub_8014790(u8 taskId)
if (IsLinkTaskFinished())
{
DestroyTask(taskId);
- sub_80149D8();
+ CreateTask_StartActivity();
}
break;
case 4:
@@ -1612,9 +1779,9 @@ void sub_8014790(u8 taskId)
if (GetBlockReceivedStatus() == 3)
{
ResetBlockReceivedFlags();
- if (sub_80B2AF4(gBlockRecvBuffer[0], gBlockRecvBuffer[1]))
+ if (AreBattleTowerLinkSpeciesSame(gBlockRecvBuffer[0], gBlockRecvBuffer[1]))
{
- gSpecialVar_Result = 11;
+ gSpecialVar_Result = LINKUP_FAILED_BATTLE_TOWER;
data[0] = 7;
}
else
@@ -1628,7 +1795,7 @@ void sub_8014790(u8 taskId)
DestroyTask(taskId);
break;
case 7:
- sub_800AC34();
+ SetCloseLinkCallback();
data[0] = 8;
break;
case 8:
@@ -1642,78 +1809,78 @@ void sub_8014790(u8 taskId)
}
}
-void sub_80149C4(void)
+static void CreateTask_RunScriptAndFadeToActivity(void)
{
- CreateTask(sub_8014790, 0);
+ CreateTask(Task_RunScriptAndFadeToActivity, 0);
}
-void sub_80149D8(void)
+static void CreateTask_StartActivity(void)
{
- u8 taskId = CreateTask(sub_801440C, 0);
+ u8 taskId = CreateTask(Task_StartActivity, 0);
gTasks[taskId].data[0] = 0;
}
-void MEvent_CreateTask_Leader(u32 arg0)
+void MEvent_CreateTask_Leader(u32 activity)
{
u8 taskId;
- struct UnkStruct_Leader *dataPtr;
+ struct WirelessLink_Leader *data;
- taskId = CreateTask(sub_8014A40, 0);
- gUnknown_02022C30.leader = dataPtr = (void*)(gTasks[taskId].data);
+ taskId = CreateTask(Task_MEvent_Leader, 0);
+ sWirelessLinkMain.leader = data = (void*)(gTasks[taskId].data);
- dataPtr->state = 0;
- dataPtr->textState = 0;
- dataPtr->field_18 = arg0;
- gSpecialVar_Result = 0;
+ data->state = 0;
+ data->textState = 0;
+ data->activity = activity;
+ gSpecialVar_Result = LINKUP_ONGOING;
}
-void sub_8014A40(u8 taskId)
+static void Task_MEvent_Leader(u8 taskId)
{
- struct UnkStruct_Leader *data = gUnknown_02022C30.leader;
+ struct WirelessLink_Leader *data = sWirelessLinkMain.leader;
struct WindowTemplate winTemplate;
s32 val;
switch (data->state)
{
case 0:
- gUnknown_02022C2C = data->field_18;
- gUnknown_02022C2D = 2;
- sub_8010F84(data->field_18, 0, 0);
- sub_8010FA0(FALSE, FALSE);
- sub_800B488();
+ gPlayerCurrActivity = data->activity;
+ sPlayerActivityGroupSize = 2;
+ SetHostRFUtgtGname(data->activity, 0, 0);
+ SetGnameBufferWonderFlags(FALSE, FALSE);
+ SetWirelessCommType1();
OpenLink();
- sub_8011C10(2);
+ InitializeRfuLinkManager_LinkLeader(2);
data->state = 1;
break;
case 1:
- data->field_4 = AllocZeroed(0x70);
- data->field_0 = AllocZeroed(0xA0);
- data->field_8 = AllocZeroed(0xA0);
- sub_80175EC(data->field_4, 4);
- sub_8017580(data->field_0->arr, 5);
- sub_800DF90(&data->field_0->arr[0].unk.field_0, data->field_0->arr[0].unk.playerName);
- data->field_0->arr[0].field_18 = 0;
- data->field_0->arr[0].field_1A_0 = 1;
- data->field_0->arr[0].field_1A_1 = 0;
+ data->field_4 = AllocZeroed(4 * sizeof(struct UnkStruct_x1C));
+ data->field_0 = AllocZeroed(5 * sizeof(struct UnkStruct_x20));
+ data->field_8 = AllocZeroed(5 * sizeof(struct UnkStruct_x20));
+ ClearUnkStruct_x1CArray(data->field_4, 4);
+ ClearUnkStruct_x20Array(data->field_0->arr, 5);
+ LinkRfu3_SetGnameUnameFromStaticBuffers(&data->field_0->arr[0].gname_uname.gname, data->field_0->arr[0].gname_uname.playerName);
+ data->field_0->arr[0].timeoutCounter = 0;
+ data->field_0->arr[0].groupScheduledAnim = UNION_ROOM_SPAWN_IN;
+ data->field_0->arr[0].useRedText = FALSE;
data->field_0->arr[0].field_1B = 0;
- data->field_17 = sub_8016FC0(data->field_4, 0xFF);
+ data->listenTaskId = CreateTask_ListenForPartnersWithCompatibleSerialNos(data->field_4, 0xFF);
- winTemplate = gUnknown_082F011C;
+ winTemplate = sWindowTemplate_PlayerList;
winTemplate.baseBlock = GetMysteryGiftBaseBlock();
winTemplate.paletteNum = 0xC;
data->listWindowId = AddWindow(&winTemplate);
MG_DrawTextBorder(data->listWindowId);
- gMultiuseListMenuTemplate = gUnknown_082F015C;
+ gMultiuseListMenuTemplate = sListMenuTemplate_PossibleGroupMembers;
gMultiuseListMenuTemplate.windowId = data->listWindowId;
data->listTaskId = ListMenuInit(&gMultiuseListMenuTemplate, 0, 0);
CopyBgTilemapBufferToVram(0);
- data->field_13 = 1;
+ data->playerCount = 1;
data->state = 2;
break;
case 2:
- StringCopy(gStringVar1, sLinkGroupActivityTexts[gUnknown_02022C2C]);
- sub_801262C(gStringVar4, gUnknown_02022C2C);
+ StringCopy(gStringVar1, sLinkGroupActivityNameTexts[gPlayerCurrActivity]);
+ StringExpandPlaceholders_AwaitingCommFromAnother(gStringVar4, gPlayerCurrActivity);
data->state = 3;
break;
case 3:
@@ -1721,7 +1888,7 @@ void sub_8014A40(u8 taskId)
data->state = 4;
break;
case 4:
- sub_801320C(data, 5, 6);
+ Leader_SetStateIfMemberListChanged(data, 5, 6);
if (gMain.newKeys & B_BUTTON)
{
data->state = 13;
@@ -1731,7 +1898,7 @@ void sub_8014A40(u8 taskId)
case 6:
if (MG_PrintTextOnWindow1AndWaitButton(&data->textState, sText_LinkWithFriendDropped))
{
- data->field_13 = sub_8013398(data->field_0);
+ data->playerCount = sub_8013398(data->field_0);
RedrawListMenu(data->listTaskId);
data->state = 2;
}
@@ -1745,48 +1912,48 @@ void sub_8014A40(u8 taskId)
case 0:
LoadWirelessStatusIndicatorSpriteGfx();
CreateWirelessStatusIndicatorSprite(0, 0);
- data->field_0->arr[data->field_13].field_1B = 0;
+ data->field_0->arr[data->playerCount].field_1B = 0;
RedrawListMenu(data->listTaskId);
- data->field_19 = 5;
- sub_8010688(5, ReadAsU16(data->field_0->arr[data->field_13].unk.field_0.unk_00.playerTrainerId), data->field_0->arr[data->field_13].unk.playerName);
+ data->joinRequestAnswer = RFU_STATUS_JOIN_GROUP_OK;
+ SendRfuStatusToPartner(data->joinRequestAnswer, ReadAsU16(data->field_0->arr[data->playerCount].gname_uname.gname.unk_00.playerTrainerId), data->field_0->arr[data->playerCount].gname_uname.playerName);
data->state = 8;
break;
case 1:
case -1:
- data->field_19 = 6;
- sub_8010688(6, ReadAsU16(data->field_0->arr[data->field_13].unk.field_0.unk_00.playerTrainerId), data->field_0->arr[data->field_13].unk.playerName);
+ data->joinRequestAnswer = RFU_STATUS_JOIN_GROUP_NO;
+ SendRfuStatusToPartner(data->joinRequestAnswer, ReadAsU16(data->field_0->arr[data->playerCount].gname_uname.gname.unk_00.playerTrainerId), data->field_0->arr[data->playerCount].gname_uname.playerName);
data->state = 8;
break;
}
break;
case 8:
- val = sub_8010714(ReadAsU16(data->field_0->arr[data->field_13].unk.field_0.unk_00.playerTrainerId), data->field_0->arr[data->field_13].unk.playerName);
- if (val == 1)
+ val = WaitSendRfuStatusToPartner(ReadAsU16(data->field_0->arr[data->playerCount].gname_uname.gname.unk_00.playerTrainerId), data->field_0->arr[data->playerCount].gname_uname.playerName);
+ if (val == 1) // Send complete
{
- if (data->field_19 == 5)
+ if (data->joinRequestAnswer == RFU_STATUS_JOIN_GROUP_OK)
{
- data->field_0->arr[data->field_13].field_1B = 0;
+ data->field_0->arr[data->playerCount].field_1B = 0;
RedrawListMenu(data->listTaskId);
- data->field_13++;
- sub_8018404(gStringVar1, &data->field_0->arr[data->field_13 - 1]);
+ data->playerCount++;
+ IntlConvPartnerUname7(gStringVar1, &data->field_0->arr[data->playerCount - 1]);
StringExpandPlaceholders(gStringVar4, sText_AnOKWasSentToPlayer);
data->state = 9;
- sub_800EF38();
+ LinkRfu_StopManagerAndFinalizeSlots();
}
else
{
- sub_8011DC0(data->field_0->arr[data->field_13].unk.playerName, ReadAsU16(data->field_0->arr[data->field_13].unk.field_0.unk_00.playerTrainerId));
- data->field_0->arr[data->field_13].field_1A_0 = 0;
+ RequestDisconnectSlotByTrainerNameAndId(data->field_0->arr[data->playerCount].gname_uname.playerName, ReadAsU16(data->field_0->arr[data->playerCount].gname_uname.gname.unk_00.playerTrainerId));
+ data->field_0->arr[data->playerCount].groupScheduledAnim = UNION_ROOM_SPAWN_NONE;
sub_8013398(data->field_0);
RedrawListMenu(data->listTaskId);
data->state = 2;
}
- data->field_19 = 0;
+ data->joinRequestAnswer = 0;
}
- else if (val == 2)
+ else if (val == 2) // Member disconnected
{
- sub_8011A64(0, 0);
+ RfuSetStatus(RFU_STATUS_OK, 0);
data->state = 2;
}
break;
@@ -1795,17 +1962,17 @@ void sub_8014A40(u8 taskId)
data->state = 10;
break;
case 10:
- if (++data->field_E > 120)
+ if (++data->delayTimerAfterOk > 120)
data->state = 11;
break;
case 11:
- if (!sub_801320C(data, 5, 6))
+ if (!Leader_SetStateIfMemberListChanged(data, 5, 6))
data->state = 12;
break;
case 12:
- if (sub_800EF1C())
+ if (LmanAcceptSlotFlagIsNotZero())
{
- sub_800EF58(FALSE);
+ WaitRfuState(FALSE);
data->state = 15;
}
else
@@ -1815,11 +1982,11 @@ void sub_8014A40(u8 taskId)
break;
case 13:
DestroyWirelessStatusIndicatorSprite();
- sub_800EDD4();
+ LinkRfu_Shutdown();
DestroyListMenuTask(data->listTaskId, 0, 0);
CopyBgTilemapBufferToVram(0);
RemoveWindow(data->listWindowId);
- DestroyTask(data->field_17);
+ DestroyTask(data->listenTaskId);
Free(data->field_8);
Free(data->field_0);
Free(data->field_4);
@@ -1829,17 +1996,17 @@ void sub_8014A40(u8 taskId)
if (MG_PrintTextOnWindow1AndWaitButton(&data->textState, sText_PleaseStartOver))
{
DestroyTask(taskId);
- gSpecialVar_Result = 5;
+ gSpecialVar_Result = LINKUP_FAILED;
}
break;
case 15:
- if (sub_8011A74() == 1 || sub_8011A74() == 2)
+ if (RfuGetStatus() == RFU_STATUS_FATAL_ERROR || RfuGetStatus() == RFU_STATUS_CONNECTION_ERROR)
{
data->state = 13;
}
else if (gReceivedRemoteLinkPlayers != 0)
{
- sub_8011068(1);
+ UpdateGameData_GroupLockedIn(TRUE);
data->state++;
}
break;
@@ -1847,11 +2014,11 @@ void sub_8014A40(u8 taskId)
DestroyListMenuTask(data->listTaskId, 0, 0);
CopyBgTilemapBufferToVram(0);
RemoveWindow(data->listWindowId);
- DestroyTask(data->field_17);
+ DestroyTask(data->listenTaskId);
Free(data->field_8);
Free(data->field_0);
Free(data->field_4);
- sub_800ADF8();
+ SetLinkStandbyCallback();
data->state++;
break;
case 17:
@@ -1861,36 +2028,36 @@ void sub_8014A40(u8 taskId)
}
}
-void MEvent_CreateTask_CardOrNewsWithFriend(u32 arg0)
+void MEvent_CreateTask_CardOrNewsWithFriend(u32 activity)
{
u8 taskId;
- struct UnkStruct_Group *dataPtr;
+ struct WirelessLink_Group *data;
- taskId = CreateTask(sub_8014F48, 0);
- gUnknown_02022C30.group = dataPtr = (void*)(gTasks[taskId].data);
- gUnknown_03000DA4 = dataPtr;
+ taskId = CreateTask(Task_CardOrNewsWithFriend, 0);
+ sWirelessLinkMain.group = data = (void*)(gTasks[taskId].data);
+ sGroup = data;
- dataPtr->state = 0;
- dataPtr->textState = 0;
- dataPtr->field_12 = arg0 - 21;
- gSpecialVar_Result = 0;
+ data->state = 0;
+ data->textState = 0;
+ data->isWonderNews = activity - ACTIVITY_WONDER_CARD2;
+ gSpecialVar_Result = LINKUP_ONGOING;
}
-void sub_8014F48(u8 taskId)
+static void Task_CardOrNewsWithFriend(u8 taskId)
{
s32 id;
struct WindowTemplate winTemplate1, winTemplate2;
- struct UnkStruct_Group *data = gUnknown_02022C30.group;
+ struct WirelessLink_Group *data = sWirelessLinkMain.group;
switch (data->state)
{
case 0:
- sub_8010F84(data->field_12 + 21, 0, 0);
- sub_800B488();
+ SetHostRFUtgtGname(data->isWonderNews + ACTIVITY_WONDER_CARD2, 0, 0);
+ SetWirelessCommType1();
OpenLink();
- sub_8011C5C();
- data->field_4 = AllocZeroed(0x70);
- data->field_0 = AllocZeroed(0x200);
+ InitializeRfuLinkManager_JoinGroup();
+ data->field_4 = AllocZeroed(4 * sizeof(struct UnkStruct_x1C));
+ data->field_0 = AllocZeroed(16 * sizeof(struct UnkStruct_x20));
data->state = 1;
break;
case 1:
@@ -1898,9 +2065,9 @@ void sub_8014F48(u8 taskId)
data->state = 2;
break;
case 2:
- sub_80175EC(data->field_4, 4);
- sub_8017580(data->field_0->arr, 16);
- data->field_11 = sub_8016FC0(data->field_4, data->field_12 + 7);
+ ClearUnkStruct_x1CArray(data->field_4, 4);
+ ClearUnkStruct_x20Array(data->field_0->arr, 16);
+ data->listenTaskId = CreateTask_ListenForPartnersWithCompatibleSerialNos(data->field_4, data->isWonderNews + LINK_GROUP_WONDER_CARD);
winTemplate1 = gUnknown_082F0174;
winTemplate1.baseBlock = GetMysteryGiftBaseBlock();
@@ -1909,25 +2076,25 @@ void sub_8014F48(u8 taskId)
winTemplate2 = gUnknown_082F017C;
winTemplate2.paletteNum = 0xC;
- data->field_D = AddWindow(&winTemplate2);
+ data->playerNameAndIdWindowId = AddWindow(&winTemplate2);
MG_DrawTextBorder(data->listWindowId);
- gMultiuseListMenuTemplate = gUnknown_082F0204;
+ gMultiuseListMenuTemplate = sListMenuTemplate_UnionRoomGroups;
gMultiuseListMenuTemplate.windowId = data->listWindowId;
data->listTaskId = ListMenuInit(&gMultiuseListMenuTemplate, 0, 0);
- MG_DrawTextBorder(data->field_D);
- FillWindowPixelBuffer(data->field_D, PIXEL_FILL(1));
- PutWindowTilemap(data->field_D);
- sub_80125BC(data->field_D);
- CopyWindowToVram(data->field_D, 2);
+ MG_DrawTextBorder(data->playerNameAndIdWindowId);
+ FillWindowPixelBuffer(data->playerNameAndIdWindowId, PIXEL_FILL(1));
+ PutWindowTilemap(data->playerNameAndIdWindowId);
+ PrintPlayerNameAndIdOnWindow(data->playerNameAndIdWindowId);
+ CopyWindowToVram(data->playerNameAndIdWindowId, 2);
CopyBgTilemapBufferToVram(0);
- data->field_F = 0;
+ data->leaderId = 0;
data->state = 3;
break;
case 3:
- id = sub_8013E44();
+ id = GetNewLeaderCandidate();
switch (id)
{
case 1:
@@ -1941,17 +2108,17 @@ void sub_8014F48(u8 taskId)
{
// this unused variable along with the assignment is needed to match
u32 unusedVar;
- unusedVar = data->field_0->arr[id].unk.field_0.activity;
+ unusedVar = data->field_0->arr[id].gname_uname.gname.activity;
- if (data->field_0->arr[id].field_1A_0 == 1 && !data->field_0->arr[id].unk.field_0.started)
+ if (data->field_0->arr[id].groupScheduledAnim == UNION_ROOM_SPAWN_IN && !data->field_0->arr[id].gname_uname.gname.started)
{
- data->field_F = id;
+ data->leaderId = id;
LoadWirelessStatusIndicatorSpriteGfx();
CreateWirelessStatusIndicatorSprite(0, 0);
RedrawListMenu(data->listTaskId);
- sub_8018404(gStringVar1, &data->field_0->arr[data->field_F]);
- sub_8011FC8(data->field_0->arr[data->field_F].unk.playerName, ReadAsU16(data->field_0->arr[data->field_F].unk.field_0.unk_00.playerTrainerId));
- PlaySE(SE_PN_ON);
+ IntlConvPartnerUname7(gStringVar1, &data->field_0->arr[data->leaderId]);
+ CreateTask_RfuReconnectWithParent(data->field_0->arr[data->leaderId].gname_uname.playerName, ReadAsU16(data->field_0->arr[data->leaderId].gname_uname.gname.unk_00.playerTrainerId));
+ PlaySE(SE_POKENAV_ON);
data->state = 4;
}
else
@@ -1968,26 +2135,26 @@ void sub_8014F48(u8 taskId)
break;
case 4:
AddTextPrinterToWindow1(sText_AwaitingPlayersResponse);
- sub_8018404(gStringVar1, &data->field_0->arr[data->field_F]);
+ IntlConvPartnerUname7(gStringVar1, &data->field_0->arr[data->leaderId]);
data->state = 5;
break;
case 5:
- if (gReceivedRemoteLinkPlayers != 0)
+ if (gReceivedRemoteLinkPlayers)
{
- gUnknown_02022C2C = data->field_0->arr[data->field_F].unk.field_0.activity;
+ gPlayerCurrActivity = data->field_0->arr[data->leaderId].gname_uname.gname.activity;
data->state = 10;
}
- switch (sub_8011A74())
+ switch (RfuGetStatus())
{
- case 1:
- case 2:
- case 6:
+ case RFU_STATUS_FATAL_ERROR:
+ case RFU_STATUS_CONNECTION_ERROR:
+ case RFU_STATUS_JOIN_GROUP_NO:
data->state = 8;
break;
- case 5:
+ case RFU_STATUS_JOIN_GROUP_OK:
AddTextPrinterToWindow1(sText_PlayerSentBackOK);
- sub_8011A64(0, 0);
+ RfuSetStatus(RFU_STATUS_OK, 0);
break;
}
break;
@@ -1996,32 +2163,32 @@ void sub_8014F48(u8 taskId)
case 10:
DestroyListMenuTask(data->listTaskId, 0, 0);
CopyBgTilemapBufferToVram(0);
- RemoveWindow(data->field_D);
+ RemoveWindow(data->playerNameAndIdWindowId);
RemoveWindow(data->listWindowId);
- DestroyTask(data->field_11);
+ DestroyTask(data->listenTaskId);
Free(data->field_0);
Free(data->field_4);
data->state++;
break;
case 9:
- if (MG_PrintTextOnWindow1AndWaitButton(&data->textState, sLinkDroppedTexts[sub_8011A74()]))
+ if (MG_PrintTextOnWindow1AndWaitButton(&data->textState, sLinkDroppedTexts[RfuGetStatus()]))
{
DestroyWirelessStatusIndicatorSprite();
DestroyTask(taskId);
- sub_800EDD4();
- gSpecialVar_Result = 5;
+ LinkRfu_Shutdown();
+ gSpecialVar_Result = LINKUP_FAILED;
}
break;
case 7:
DestroyWirelessStatusIndicatorSprite();
AddTextPrinterToWindow1(sText_PleaseStartOver);
DestroyTask(taskId);
- sub_800EDD4();
- gSpecialVar_Result = 5;
+ LinkRfu_Shutdown();
+ gSpecialVar_Result = LINKUP_FAILED;
break;
case 11:
data->state++;
- sub_800ADF8();
+ SetLinkStandbyCallback();
break;
case 12:
if (IsLinkTaskFinished())
@@ -2030,36 +2197,36 @@ void sub_8014F48(u8 taskId)
}
}
-void MEvent_CreateTask_CardOrNewsOverWireless(u32 arg0)
+void MEvent_CreateTask_CardOrNewsOverWireless(u32 activity)
{
u8 taskId;
- struct UnkStruct_Group *dataPtr;
+ struct WirelessLink_Group *data;
- taskId = CreateTask(sub_80152F4, 0);
- gUnknown_02022C30.group = dataPtr = (void*)(gTasks[taskId].data);
- gUnknown_03000DA4 = dataPtr;
+ taskId = CreateTask(Task_CardOrNewsOverWireless, 0);
+ sWirelessLinkMain.group = data = (void*)(gTasks[taskId].data);
+ sGroup = data;
- dataPtr->state = 0;
- dataPtr->textState = 0;
- dataPtr->field_12 = arg0 - 21;
- gSpecialVar_Result = 0;
+ data->state = 0;
+ data->textState = 0;
+ data->isWonderNews = activity - ACTIVITY_WONDER_CARD2;
+ gSpecialVar_Result = LINKUP_ONGOING;
}
-void sub_80152F4(u8 taskId)
+static void Task_CardOrNewsOverWireless(u8 taskId)
{
s32 id;
struct WindowTemplate winTemplate;
- struct UnkStruct_Group *data = gUnknown_02022C30.group;
+ struct WirelessLink_Group *data = sWirelessLinkMain.group;
switch (data->state)
{
case 0:
- sub_8010F84(0, 0, 0);
- sub_800B488();
+ SetHostRFUtgtGname(0, 0, 0);
+ SetWirelessCommType1();
OpenLink();
- sub_8011C5C();
- data->field_4 = AllocZeroed(0x70);
- data->field_0 = AllocZeroed(0x200);
+ InitializeRfuLinkManager_JoinGroup();
+ data->field_4 = AllocZeroed(4 * sizeof(struct UnkStruct_x1C));
+ data->field_0 = AllocZeroed(16 * sizeof(struct UnkStruct_x20));
data->state = 1;
break;
case 1:
@@ -2067,9 +2234,9 @@ void sub_80152F4(u8 taskId)
data->state = 2;
break;
case 2:
- sub_80175EC(data->field_4, 4);
- sub_8017580(data->field_0->arr, 16);
- data->field_11 = sub_8016FF0(data->field_4, data->field_12 + 7);
+ ClearUnkStruct_x1CArray(data->field_4, 4);
+ ClearUnkStruct_x20Array(data->field_0->arr, 16);
+ data->listenTaskId = CreateTask_ListenForPartnersWithSerial7F7D(data->field_4, data->isWonderNews + LINK_GROUP_WONDER_CARD);
if (data->field_13 != 0)
{
@@ -2078,18 +2245,18 @@ void sub_80152F4(u8 taskId)
data->listWindowId = AddWindow(&winTemplate);
MG_DrawTextBorder(data->listWindowId);
- gMultiuseListMenuTemplate = gUnknown_082F0204;
+ gMultiuseListMenuTemplate = sListMenuTemplate_UnionRoomGroups;
gMultiuseListMenuTemplate.windowId = data->listWindowId;
data->listTaskId = ListMenuInit(&gMultiuseListMenuTemplate, 0, 0);
CopyBgTilemapBufferToVram(0);
}
- data->field_F = 0;
+ data->leaderId = 0;
data->state = 3;
break;
case 3:
- id = sub_8013E44();
+ id = GetNewLeaderCandidate();
switch (id)
{
case 1:
@@ -2101,18 +2268,18 @@ void sub_80152F4(u8 taskId)
case 0:
if (data->field_13 != 0)
id = ListMenu_ProcessInput(data->listTaskId);
- if (data->field_14 > 120)
+ if (data->refreshTimer > 120)
{
- if (data->field_0->arr[0].field_1A_0 == 1 && !data->field_0->arr[0].unk.field_0.started)
+ if (data->field_0->arr[0].groupScheduledAnim == UNION_ROOM_SPAWN_IN && !data->field_0->arr[0].gname_uname.gname.started)
{
- if (sub_8016F1C(&data->field_0->arr[0].unk.field_0, data->field_12 + 7))
+ if (HasWonderCardOrNewsByLinkGroup(&data->field_0->arr[0].gname_uname.gname, data->isWonderNews + LINK_GROUP_WONDER_CARD))
{
- data->field_F = 0;
- data->field_14 = 0;
+ data->leaderId = 0;
+ data->refreshTimer = 0;
LoadWirelessStatusIndicatorSpriteGfx();
CreateWirelessStatusIndicatorSprite(0, 0);
- sub_8011FC8(data->field_0->arr[0].unk.playerName, ReadAsU16(data->field_0->arr[0].unk.field_0.unk_00.playerTrainerId));
- PlaySE(SE_PN_ON);
+ CreateTask_RfuReconnectWithParent(data->field_0->arr[0].gname_uname.playerName, ReadAsU16(data->field_0->arr[0].gname_uname.gname.unk_00.playerTrainerId));
+ PlaySE(SE_POKENAV_ON);
data->state = 4;
}
else
@@ -2125,34 +2292,34 @@ void sub_80152F4(u8 taskId)
else if (gMain.newKeys & B_BUTTON)
{
data->state = 6;
- data->field_14 = 0;
+ data->refreshTimer = 0;
}
- data->field_14++;
+ data->refreshTimer++;
break;
}
break;
case 4:
AddTextPrinterToWindow1(sText_AwaitingResponseFromWirelessSystem);
- sub_8018404(gStringVar1, &data->field_0->arr[data->field_F]);
+ IntlConvPartnerUname7(gStringVar1, &data->field_0->arr[data->leaderId]);
data->state = 5;
break;
case 5:
- if (gReceivedRemoteLinkPlayers != 0)
+ if (gReceivedRemoteLinkPlayers)
{
- gUnknown_02022C2C = data->field_0->arr[data->field_F].unk.field_0.activity;
+ gPlayerCurrActivity = data->field_0->arr[data->leaderId].gname_uname.gname.activity;
data->state = 12;
}
- switch (sub_8011A74())
+ switch (RfuGetStatus())
{
- case 1:
- case 2:
- case 6:
+ case RFU_STATUS_FATAL_ERROR:
+ case RFU_STATUS_CONNECTION_ERROR:
+ case RFU_STATUS_JOIN_GROUP_NO:
data->state = 8;
break;
- case 5:
+ case RFU_STATUS_JOIN_GROUP_OK:
AddTextPrinterToWindow1(sText_WirelessLinkEstablished);
- sub_8011A64(0, 0);
+ RfuSetStatus(RFU_STATUS_OK, 0);
break;
}
break;
@@ -2166,7 +2333,7 @@ void sub_80152F4(u8 taskId)
CopyBgTilemapBufferToVram(0);
RemoveWindow(data->listWindowId);
}
- DestroyTask(data->field_11);
+ DestroyTask(data->listenTaskId);
Free(data->field_0);
Free(data->field_4);
data->state++;
@@ -2176,8 +2343,8 @@ void sub_80152F4(u8 taskId)
{
DestroyWirelessStatusIndicatorSprite();
DestroyTask(taskId);
- sub_800EDD4();
- gSpecialVar_Result = 5;
+ LinkRfu_Shutdown();
+ gSpecialVar_Result = LINKUP_FAILED;
}
break;
case 7:
@@ -2185,22 +2352,22 @@ void sub_80152F4(u8 taskId)
{
DestroyWirelessStatusIndicatorSprite();
DestroyTask(taskId);
- sub_800EDD4();
- gSpecialVar_Result = 5;
+ LinkRfu_Shutdown();
+ gSpecialVar_Result = LINKUP_FAILED;
}
break;
case 11:
- if (MG_PrintTextOnWindow1AndWaitButton(&data->textState, sNoWonderSharedTexts[data->field_12]))
+ if (MG_PrintTextOnWindow1AndWaitButton(&data->textState, sNoWonderSharedTexts[data->isWonderNews]))
{
DestroyWirelessStatusIndicatorSprite();
DestroyTask(taskId);
- sub_800EDD4();
- gSpecialVar_Result = 5;
+ LinkRfu_Shutdown();
+ gSpecialVar_Result = LINKUP_FAILED;
}
break;
case 13:
data->state++;
- sub_800ADF8();
+ SetLinkStandbyCallback();
break;
case 14:
if (IsLinkTaskFinished())
@@ -2209,172 +2376,172 @@ void sub_80152F4(u8 taskId)
}
}
-void UnionRoomSpecial(void)
+void RunUnionRoom(void)
{
- struct UnkStruct_URoom *dataPtr;
+ struct WirelessLink_URoom *uroom;
- sub_8010F60();
- CreateTask(sub_80156E0, 10);
+ ClearAndInitHostRFUtgtGname();
+ CreateTask(Task_RunUnionRoom, 10);
// dumb line needed to match
- gUnknown_02022C30.uRoom = gUnknown_02022C30.uRoom;
+ sWirelessLinkMain.uRoom = sWirelessLinkMain.uRoom;
- dataPtr = AllocZeroed(sizeof(*gUnknown_02022C30.uRoom));
- gUnknown_02022C30.uRoom = dataPtr;
- gUnknown_03000DA8 = dataPtr;
+ uroom = AllocZeroed(sizeof(*sWirelessLinkMain.uRoom));
+ sWirelessLinkMain.uRoom = uroom;
+ sURoom = uroom;
- dataPtr->state = 0;
- dataPtr->textState = 0;
- dataPtr->field_10 = 0;
- dataPtr->field_12 = 0;
+ uroom->state = UR_STATE_INIT;
+ uroom->textState = 0;
+ uroom->unknown = 0;
+ uroom->field_12 = 0;
gSpecialVar_Result = 0;
- sub_819A2BC(0xD0, 1);
+ ListMenuLoadStdPalAt(0xD0, 1);
}
-u16 ReadAsU16(const u8 *ptr)
+static u16 ReadAsU16(const u8 *ptr)
{
return (ptr[1] << 8) | (ptr[0]);
}
-void sub_8015664(u32 nextState, const u8 *src)
+static void ScheduleFieldMessageWithFollowupState(u32 nextState, const u8 *src)
{
- struct UnkStruct_URoom *data = gUnknown_02022C30.uRoom;
+ struct WirelessLink_URoom *uroom = sWirelessLinkMain.uRoom;
- data->state = 8;
- data->stateAfterPrint = nextState;
+ uroom->state = UR_STATE_PRINT_MSG;
+ uroom->stateAfterPrint = nextState;
if (src != gStringVar4)
StringExpandPlaceholders(gStringVar4, src);
}
-void sub_801568C(const u8 *src)
+static void ScheduleFieldMessageAndExit(const u8 *src)
{
- struct UnkStruct_URoom *data = gUnknown_02022C30.uRoom;
+ struct WirelessLink_URoom *uroom = sWirelessLinkMain.uRoom;
- data->state = 26;
+ uroom->state = UR_STATE_PRINT_AND_EXIT;
if (src != gStringVar4)
StringExpandPlaceholders(gStringVar4, src);
}
-void sub_80156B0(struct UnkStruct_URoom *data)
+static void sub_80156B0(struct WirelessLink_URoom *uroom)
{
- memcpy(&gDecompressionBuffer[0x3F00], data->field_0, 0x100);
+ memcpy(&gDecompressionBuffer[0x3F00], uroom->field_0, 0x100);
}
-void sub_80156C8(struct UnkStruct_URoom *data)
+static void sub_80156C8(struct WirelessLink_URoom *uroom)
{
- memcpy(data->field_0, &gDecompressionBuffer[0x3F00], 0x100);
+ memcpy(uroom->field_0, &gDecompressionBuffer[0x3F00], 0x100);
}
-void sub_80156E0(u8 taskId)
+static void Task_RunUnionRoom(u8 taskId)
{
u32 id = 0;
- s32 var5 = 0;
- s32 playerGender = 0;
- struct UnkStruct_URoom *data = gUnknown_02022C30.uRoom;
+ s32 input = 0;
+ s32 playerGender = MALE;
+ struct WirelessLink_URoom *uroom = sWirelessLinkMain.uRoom;
s16 *taskData = gTasks[taskId].data;
- switch (data->state)
+ switch (uroom->state)
{
- case 0:
- data->field_4 = AllocZeroed(0x70);
- data->field_C = AllocZeroed(0x70);
- data->field_0 = AllocZeroed(0x100);
- data->field_8 = AllocZeroed(0x20);
- sub_8017580(data->field_0->arr, 8);
- gUnknown_02022C2C = 0x40;
- data->field_20 = sub_8016DF0(data->field_C, data->field_4, 9);
- sub_8019BA8(data->field_A0);
- sub_8019F2C();
- data->state = 1;
- break;
- case 1:
- sub_8019E70(data->spriteIds, taskData[0]);
+ case UR_STATE_INIT:
+ uroom->field_4 = AllocZeroed(RFU_CHILD_MAX * sizeof(struct UnkStruct_x1C));
+ uroom->field_C = AllocZeroed(RFU_CHILD_MAX * sizeof(struct UnkStruct_x1C));
+ uroom->field_0 = AllocZeroed(8 * sizeof(struct UnkStruct_x20));
+ uroom->field_8 = AllocZeroed(sizeof(struct UnkStruct_x20));
+ ClearUnkStruct_x20Array(uroom->field_0->arr, ARRAY_COUNT(uroom->field_0->arr));
+ gPlayerCurrActivity = IN_UNION_ROOM;
+ uroom->searchTaskId = CreateTask_SearchForChildOrParent(uroom->field_C, uroom->field_4, LINK_GROUP_UNION_ROOM_RESUME);
+ InitUnionRoomPlayerObjects(uroom->objects);
+ SetTilesAroundUnionRoomPlayersPassable();
+ uroom->state = UR_STATE_INIT_OBJECTS;
+ break;
+ case UR_STATE_INIT_OBJECTS:
+ CreateGroupMemberSpritesInvisible(uroom->spriteIds, taskData[0]);
if (++taskData[0] == 8)
- data->state = 2;
+ uroom->state = UR_STATE_INIT_LINK;
break;
- case 2:
- sub_8010F84(0x40, 0, 0);
- sub_8010FCC(sUnionRoomTrade.type, sUnionRoomTrade.playerSpecies, sUnionRoomTrade.playerLevel);
- sub_800B488();
+ case UR_STATE_INIT_LINK:
+ SetHostRFUtgtGname(IN_UNION_ROOM, 0, 0);
+ SetTradeBoardRegisteredMonInfo(sUnionRoomTrade.type, sUnionRoomTrade.playerSpecies, sUnionRoomTrade.playerLevel);
+ SetWirelessCommType1();
OpenLink();
- sub_8011C84();
- sub_8017580(&data->field_8->arr[0], 1);
- sub_80175EC(data->field_4, 4);
- sub_80175EC(data->field_C, 4);
+ InitializeRfuLinkManager_EnterUnionRoom();
+ ClearUnkStruct_x20Array(&uroom->field_8->arr[0], 1);
+ ClearUnkStruct_x1CArray(uroom->field_4, 4);
+ ClearUnkStruct_x1CArray(uroom->field_C, 4);
gSpecialVar_Result = 0;
- data->state = 3;
+ uroom->state = UR_STATE_CHECK_SELECTING_MON;
break;
- case 3:
+ case UR_STATE_CHECK_SELECTING_MON:
if ((GetPartyMenuType() == PARTY_MENU_TYPE_UNION_ROOM_REGISTER
- || GetPartyMenuType() == PARTY_MENU_TYPE_UNION_ROOM_TRADE)
- && sUnionRoomTrade.field_0 != 0)
+ || GetPartyMenuType() == PARTY_MENU_TYPE_UNION_ROOM_TRADE)
+ && sUnionRoomTrade.state != URTRADE_STATE_NONE)
{
id = GetCursorSelectionMonId();
- switch (sUnionRoomTrade.field_0)
+ switch (sUnionRoomTrade.state)
{
- case 1:
- sub_8011090(0x54, 0, 1);
+ case URTRADE_STATE_REGISTERING:
+ UpdateGameData_SetActivity(ACTIVITY_PLYRTALK | IN_UNION_ROOM, 0, TRUE);
if (id >= PARTY_SIZE)
{
ResetUnionRoomTrade(&sUnionRoomTrade);
- sub_8010FCC(0, 0, 0);
- sub_801568C(sText_RegistrationCanceled);
+ SetTradeBoardRegisteredMonInfo(TYPE_NORMAL, SPECIES_NONE, 0);
+ ScheduleFieldMessageAndExit(sText_RegistrationCanceled);
}
else if (!RegisterTradeMonAndGetIsEgg(GetCursorSelectionMonId(), &sUnionRoomTrade))
{
- sub_8015664(0x34, sText_ChooseRequestedMonType);
+ ScheduleFieldMessageWithFollowupState(UR_STATE_REGISTER_REQUEST_TYPE, sText_ChooseRequestedMonType);
}
else
{
- data->state = 55;
+ uroom->state = UR_STATE_REGISTER_COMPLETE;
}
break;
- case 2:
- sub_80156C8(data);
- taskData[1] = sUnionRoomTrade.field_8;
+ case URTRADE_STATE_OFFERING:
+ sub_80156C8(uroom);
+ taskData[1] = sUnionRoomTrade.offerPlayerId;
if (id >= PARTY_SIZE)
{
- sub_801568C(sText_TradeCanceled);
+ ScheduleFieldMessageAndExit(sText_TradeCanceled);
}
else
{
- sub_8011090(0x54, 0, 1);
- gUnknown_02022C2C = 0x44;
+ UpdateGameData_SetActivity(ACTIVITY_PLYRTALK | IN_UNION_ROOM, 0, TRUE);
+ gPlayerCurrActivity = ACTIVITY_TRADE | IN_UNION_ROOM;
RegisterTradeMon(GetCursorSelectionMonId(), &sUnionRoomTrade);
- data->state = 51;
+ uroom->state = UR_STATE_TRADE_OFFER_MON;
}
break;
}
- sUnionRoomTrade.field_0 = 0;
+ sUnionRoomTrade.state = URTRADE_STATE_NONE;
}
else
{
- data->state = 4;
+ uroom->state = UR_STATE_MAIN;
}
break;
- case 4:
+ case UR_STATE_MAIN:
if (gSpecialVar_Result != 0)
{
- if (gSpecialVar_Result == 9)
+ if (gSpecialVar_Result == UR_INTERACT_ATTENDANT)
{
- sub_8011090(0x54, 0, 1);
+ UpdateGameData_SetActivity(ACTIVITY_PLYRTALK | IN_UNION_ROOM, 0, TRUE);
PlaySE(SE_PC_LOGIN);
StringCopy(gStringVar1, gSaveBlock2Ptr->playerName);
- data->state = 42;
+ uroom->state = UR_STATE_INTERACT_WITH_ATTENDANT;
gSpecialVar_Result = 0;
}
- else if (gSpecialVar_Result == 11)
+ else if (gSpecialVar_Result == UR_INTERACT_START_MENU)
{
- sub_8011090(0x54, 0, 1);
- data->state = 23;
+ UpdateGameData_SetActivity(ACTIVITY_PLYRTALK | IN_UNION_ROOM, 0, TRUE);
+ uroom->state = UR_STATE_WAIT_FOR_START_MENU;
gSpecialVar_Result = 0;
}
- else
+ else // UR_INTERACT_PLAYER_# (1-8)
{
taskData[0] = 0;
taskData[1] = gSpecialVar_Result - 1;
- data->state = 24;
+ uroom->state = UR_STATE_INTERACT_WITH_PLAYER;
gSpecialVar_Result = 0;
}
}
@@ -2382,677 +2549,689 @@ void sub_80156E0(u8 taskId)
{
if (gMain.newKeys & A_BUTTON)
{
- if (sub_801A2A8(data->field_0, &taskData[0], &taskData[1], data->spriteIds))
+ if (TryInteractWithUnionRoomMember(uroom->field_0, &taskData[0], &taskData[1], uroom->spriteIds))
{
PlaySE(SE_SELECT);
- sub_80181CC();
- data->state = 24;
+ UR_EnableScriptContext2AndFreezeObjectEvents();
+ uroom->state = UR_STATE_INTERACT_WITH_PLAYER;
break;
}
- else if (sub_8017940())
+ else if (IsPlayerFacingTradingBoard())
{
- sub_8011090(0x54, 0, 1);
+ UpdateGameData_SetActivity(ACTIVITY_PLYRTALK | IN_UNION_ROOM, 0, TRUE);
PlaySE(SE_PC_LOGIN);
- sub_80181CC();
+ UR_EnableScriptContext2AndFreezeObjectEvents();
StringCopy(gStringVar1, gSaveBlock2Ptr->playerName);
- data->state = 45;
+ uroom->state = UR_STATE_CHECK_TRADING_BOARD;
break;
}
}
- switch (sub_8016B00())
+ switch (HandlePlayerListUpdate())
{
case 1:
PlaySE(SE_PC_LOGIN);
case 2:
- sub_801A274(data);
+ ScheduleUnionRoomPlayerRefresh(uroom);
break;
case 4:
- data->state = 11;
- sub_80181CC();
- sub_8010FCC(0, 0, 0);
- sub_8011090(0x53, sub_80181DC(data), 0);
+ uroom->state = UR_STATE_PLAYER_CONTACTED_YOU;
+ UR_EnableScriptContext2AndFreezeObjectEvents();
+ SetTradeBoardRegisteredMonInfo(TYPE_NORMAL, SPECIES_NONE, 0);
+ UpdateGameData_SetActivity(ACTIVITY_NPCTALK | IN_UNION_ROOM, GetActivePartnerSpriteGenderParam(uroom), FALSE);
break;
}
- sub_801A284(data);
+ HandleUnionRoomPlayerRefresh(uroom);
}
break;
- case 23:
+ case UR_STATE_WAIT_FOR_START_MENU:
if (!FuncIsActiveTask(Task_ShowStartMenu))
{
- sub_8011090(0x40, 0, 0);
- data->state = 4;
+ UpdateGameData_SetActivity(ACTIVITY_NONE | IN_UNION_ROOM, 0, FALSE);
+ uroom->state = UR_STATE_MAIN;
}
break;
- case 24:
- sub_801704C();
- playerGender = sub_8017CF8(taskData[1], data->field_0);
- sub_8011090(0x54, 0, 1);
- switch (sub_80179D4(data->field_0, taskData[0], taskData[1], playerGender))
+ case UR_STATE_INTERACT_WITH_PLAYER:
+ UR_RunTextPrinters_CheckPrinter0Active();
+ playerGender = GetUnionRoomPlayerGender(taskData[1], uroom->field_0);
+ UpdateGameData_SetActivity(ACTIVITY_PLYRTALK | IN_UNION_ROOM, 0, TRUE);
+ switch (UnionRoomGetPlayerInteractionResponse(uroom->field_0, taskData[0], taskData[1], playerGender))
{
- case 0:
- data->state = 26;
+ case 0: // Player is or was just doing an activity
+ uroom->state = UR_STATE_PRINT_AND_EXIT;
break;
- case 1:
- sub_8012188(data->field_0->arr[taskData[1]].unk.playerName, &data->field_0->arr[taskData[1]].unk.field_0, gUnknown_02022C2C);
- data->field_12 = id; // Should be just 0, but won't match any other way.
- data->state = 25;
+ case 1: // Link communicating
+ sub_8012188(uroom->field_0->arr[taskData[1]].gname_uname.playerName, &uroom->field_0->arr[taskData[1]].gname_uname.gname, gPlayerCurrActivity);
+ uroom->field_12 = id; // Should be just 0, but won't match any other way.
+ uroom->state = UR_STATE_TRY_COMMUNICATING;
break;
- case 2:
- sub_8015664(0x13, gStringVar4);
+ case 2: // Ask to join chat
+ ScheduleFieldMessageWithFollowupState(UR_STATE_RECV_JOIN_CHAT_REQUEST, gStringVar4);
break;
}
break;
- case 25:
- sub_801704C();
- switch (sub_8011A74())
+ case UR_STATE_TRY_COMMUNICATING:
+ UR_RunTextPrinters_CheckPrinter0Active();
+ switch (RfuGetStatus())
{
- case 4:
- sub_801818C(TRUE);
- data->state = 4;
+ case RFU_STATUS_NEW_CHILD_DETECTED:
+ HandleCancelActivity(TRUE);
+ uroom->state = UR_STATE_MAIN;
break;
- case 1:
- case 2:
- if (sub_8011B90() == TRUE)
- sub_801568C(sText_TrainerAppearsBusy);
+ case RFU_STATUS_FATAL_ERROR:
+ case RFU_STATUS_CONNECTION_ERROR:
+ if (IsUnionRoomListenTaskActive() == TRUE)
+ ScheduleFieldMessageAndExit(sText_TrainerAppearsBusy);
else
- sub_8015664(30, sText_TrainerAppearsBusy);
+ ScheduleFieldMessageWithFollowupState(UR_STATE_CANCEL_ACTIVITY_LINK_ERROR, sText_TrainerAppearsBusy);
- gUnknown_02022C2C = 0x40;
+ gPlayerCurrActivity = IN_UNION_ROOM;
break;
}
- if (gReceivedRemoteLinkPlayers != 0)
+ if (gReceivedRemoteLinkPlayers)
{
- sub_80143E4(gBlockSendBuffer, TRUE);
- CreateTask(sub_80140E0, 5);
- data->state = 38;
+ CreateTrainerCardInBuffer(gBlockSendBuffer, TRUE);
+ CreateTask(Task_ExchangeCards, 5);
+ uroom->state = UR_STATE_COMMUNICATING_WAIT_FOR_DATA;
}
break;
- case 38:
- if (!FuncIsActiveTask(sub_80140E0))
+ case UR_STATE_COMMUNICATING_WAIT_FOR_DATA:
+ if (!FuncIsActiveTask(Task_ExchangeCards))
{
- if (gUnknown_02022C2C == 0x44)
- sub_8015664(31, sText_AwaitingPlayersResponseAboutTrade);
+ if (gPlayerCurrActivity == (ACTIVITY_TRADE | IN_UNION_ROOM))
+ ScheduleFieldMessageWithFollowupState(UR_STATE_SEND_TRADE_REQUST, sText_AwaitingPlayersResponseAboutTrade);
else
- data->state = 5;
+ uroom->state = UR_STATE_DO_SOMETHING_PROMPT;
}
break;
- case 30:
- if (gReceivedRemoteLinkPlayers == 0)
+ case UR_STATE_CANCEL_ACTIVITY_LINK_ERROR:
+ if (!gReceivedRemoteLinkPlayers)
{
- sub_801818C(FALSE);
- sub_801A3D0(taskData[0], taskData[1], data->field_0);
- data->state = 2;
+ HandleCancelActivity(FALSE);
+ UpdateUnionRoomMemberFacing(taskData[0], taskData[1], uroom->field_0);
+ uroom->state = UR_STATE_INIT_LINK;
}
break;
- case 5:
- id = sub_80179AC(&data->field_0->arr[taskData[1]]);
- playerGender = sub_8017CF8(taskData[1], data->field_0);
- sub_8015664(6, sHiDoSomethingTexts[id][playerGender]);
+ case UR_STATE_DO_SOMETHING_PROMPT:
+ id = ConvPartnerUnameAndGetWhetherMetAlready(&uroom->field_0->arr[taskData[1]]);
+ playerGender = GetUnionRoomPlayerGender(taskData[1], uroom->field_0);
+ ScheduleFieldMessageWithFollowupState(UR_STATE_HANDLE_DO_SOMETHING_PROMPT_INPUT, sHiDoSomethingTexts[id][playerGender]);
break;
- case 6:
- var5 = sub_8017178(&data->textState, &data->field_1B, &data->field_1C, &gUnknown_082F021C, &gUnknown_082F0244);
- if (var5 != -1)
+ case UR_STATE_HANDLE_DO_SOMETHING_PROMPT_INPUT:
+ input = ListMenuHandler_AllItemsAvailable(&uroom->textState,
+ &uroom->topListMenuWindowId,
+ &uroom->topListMenuId,
+ &sWindowTemplate_InviteToActivity,
+ &sListMenuTemplate_InviteToActivity);
+ if (input != -1)
{
- if (gReceivedRemoteLinkPlayers == 0)
+ if (!gReceivedRemoteLinkPlayers)
{
- data->state = 28;
+ uroom->state = UR_STATE_TRAINER_APPEARS_BUSY;
}
else
{
- data->field_98 = 0;
- playerGender = sub_8017CF8(taskData[1], data->field_0);
- if (var5 == -2 || var5 == 0x40)
+ uroom->partnerYesNoResponse = 0;
+ playerGender = GetUnionRoomPlayerGender(taskData[1], uroom->field_0);
+ if (input == -2 || input == IN_UNION_ROOM)
{
- data->field_4C[0] = 0x40;
- sub_800FE50(data->field_4C);
+ uroom->playerSendBuffer[0] = IN_UNION_ROOM;
+ Rfu_SendPacket(uroom->playerSendBuffer);
StringCopy(gStringVar4, sIfYouWantToDoSomethingTexts[gLinkPlayers[0].gender]);
- data->state = 32;
+ uroom->state = UR_STATE_REQUEST_DECLINED;
}
else
{
- gUnknown_02022C2C = var5;
- gUnknown_02022C2D = (u32)(var5) >> 8;
- if (gUnknown_02022C2C == 0x41 && !HasAtLeastTwoMonsOfLevel30OrLower())
+ gPlayerCurrActivity = input;
+ sPlayerActivityGroupSize = (u32)(input) >> 8;
+ if (gPlayerCurrActivity == (ACTIVITY_BATTLE_SINGLE | IN_UNION_ROOM) && !HasAtLeastTwoMonsOfLevel30OrLower())
{
- sub_8015664(5, sText_NeedTwoMonsOfLevel30OrLower1);
+ ScheduleFieldMessageWithFollowupState(UR_STATE_DO_SOMETHING_PROMPT, sText_NeedTwoMonsOfLevel30OrLower1);
}
else
{
- data->field_4C[0] = gUnknown_02022C2C | 0x40;
- sub_800FE50(data->field_4C);
- data->state = 27;
+ uroom->playerSendBuffer[0] = gPlayerCurrActivity | IN_UNION_ROOM;
+ Rfu_SendPacket(uroom->playerSendBuffer);
+ uroom->state = UR_STATE_SEND_ACTIVITY_REQUEST;
}
}
}
}
break;
- case 28:
+ case UR_STATE_TRAINER_APPEARS_BUSY:
StringCopy(gStringVar4, sText_TrainerBattleBusy);
- data->state = 36;
+ uroom->state = UR_STATE_CANCEL_REQUEST_PRINT_MSG;
break;
- case 27:
- sub_8017FD8(data);
- playerGender = sub_8017CF8(taskData[1], data->field_0);
- id = sub_8017984(data->field_4C[0] & 0x3F);
- if (PrintOnTextbox(&data->textState, sText_WaitOrShowCardTexts[playerGender][id]))
+ case UR_STATE_SEND_ACTIVITY_REQUEST:
+ PollPartnerYesNoResponse(uroom);
+ playerGender = GetUnionRoomPlayerGender(taskData[1], uroom->field_0);
+ id = GetResponseIdx_InviteToURoomActivity(uroom->playerSendBuffer[0] & 0x3F);
+ if (PrintOnTextbox(&uroom->textState, sText_WaitOrShowCardTexts[playerGender][id]))
{
taskData[3] = 0;
- data->state = 29;
+ uroom->state = UR_STATE_WAIT_FOR_RESPONSE_TO_REQUEST;
}
break;
- case 32:
- sub_800AC34();
- data->state = 36;
+ case UR_STATE_REQUEST_DECLINED:
+ SetCloseLinkCallback();
+ uroom->state = UR_STATE_CANCEL_REQUEST_PRINT_MSG;
break;
- case 31:
- data->field_4C[0] = 0x44;
- data->field_4C[1] = sUnionRoomTrade.species;
- data->field_4C[2] = sUnionRoomTrade.level;
- sub_800FE50(data->field_4C);
- data->state = 29;
+ case UR_STATE_SEND_TRADE_REQUST:
+ uroom->playerSendBuffer[0] = ACTIVITY_TRADE | IN_UNION_ROOM;
+ uroom->playerSendBuffer[1] = sUnionRoomTrade.species;
+ uroom->playerSendBuffer[2] = sUnionRoomTrade.level;
+ Rfu_SendPacket(uroom->playerSendBuffer);
+ uroom->state = UR_STATE_WAIT_FOR_RESPONSE_TO_REQUEST;
break;
- case 29:
- if (gReceivedRemoteLinkPlayers == 0)
+ case UR_STATE_WAIT_FOR_RESPONSE_TO_REQUEST:
+ if (!gReceivedRemoteLinkPlayers)
{
- StringCopy(gStringVar4, sText_TrainerBattleBusy);
- data->state = 28;
+ StringCopy(gStringVar4, sText_TrainerBattleBusy); // Redundant, will be copied again in next state
+ uroom->state = UR_STATE_TRAINER_APPEARS_BUSY;
}
else
{
- sub_8017FD8(data);
- if (data->field_98 == 0x51)
+ PollPartnerYesNoResponse(uroom);
+ if (uroom->partnerYesNoResponse == (ACTIVITY_ACCEPT | IN_UNION_ROOM))
{
- if (gUnknown_02022C2C == 8)
+ if (gPlayerCurrActivity == ACTIVITY_CARD)
{
- sub_8018220(gStringVar4, data, FALSE);
- data->state = 40;
+ ViewURoomPartnerTrainerCard(gStringVar4, uroom, FALSE);
+ uroom->state = UR_STATE_PRINT_CARD_INFO;
}
else
{
- data->state = 13;
+ uroom->state = UR_STATE_PRINT_START_ACTIVITY_MSG;
}
}
- else if (data->field_98 == 0x52)
+ else if (uroom->partnerYesNoResponse == (ACTIVITY_DECLINE | IN_UNION_ROOM))
{
- data->state = 32;
- sub_8017D9C(gStringVar4, gUnknown_02022C2C | 0x40, gLinkPlayers[0].gender);
- gUnknown_02022C2C = 0;
+ uroom->state = UR_STATE_REQUEST_DECLINED;
+ GetURoomActivityRejectMsg(gStringVar4, gPlayerCurrActivity | IN_UNION_ROOM, gLinkPlayers[0].gender);
+ gPlayerCurrActivity = ACTIVITY_NONE;
}
}
break;
- case 7:
- id = sub_80179AC(&data->field_0->arr[taskData[1]]);
- playerGender = sub_8017CF8(taskData[1], data->field_0);
- sub_8015664(6, sHiDoSomethingTexts[id][playerGender]);
+ case UR_STATE_DO_SOMETHING_PROMPT_2: // Identical to UR_STATE_DO_SOMETHING_PROMPT
+ id = ConvPartnerUnameAndGetWhetherMetAlready(&uroom->field_0->arr[taskData[1]]);
+ playerGender = GetUnionRoomPlayerGender(taskData[1], uroom->field_0);
+ ScheduleFieldMessageWithFollowupState(UR_STATE_HANDLE_DO_SOMETHING_PROMPT_INPUT, sHiDoSomethingTexts[id][playerGender]);
break;
- case 40:
- if (PrintOnTextbox(&data->textState, gStringVar4))
+ case UR_STATE_PRINT_CARD_INFO:
+ if (PrintOnTextbox(&uroom->textState, gStringVar4))
{
- data->state = 41;
- sub_800ADF8();
- data->field_98 = 0;
- data->field_9A[0] = 0;
+ uroom->state = UR_STATE_WAIT_FINISH_READING_CARD;
+ SetLinkStandbyCallback();
+ uroom->partnerYesNoResponse = 0;
+ uroom->recvActivityRequest[0] = 0;
}
break;
- case 41:
+ case UR_STATE_WAIT_FINISH_READING_CARD:
if (IsLinkTaskFinished())
{
if (GetMultiplayerId() == 0)
{
StringCopy(gStringVar1, gLinkPlayers[GetMultiplayerId() ^ 1].name);
- id = sub_800E540(gLinkPlayers[1].trainerId, gLinkPlayers[1].name);
+ id = PlayerHasMetTrainerBefore(gLinkPlayers[1].trainerId, gLinkPlayers[1].name);
StringExpandPlaceholders(gStringVar4, sAwaitingResponseTexts[id]);
- data->state = 33;
+ uroom->state = UR_STATE_PRINT_CONTACT_MSG;
}
else
{
- data->state = 7;
+ uroom->state = UR_STATE_DO_SOMETHING_PROMPT_2;
}
}
break;
- case 19:
- switch (sub_80170B8(&data->textState, FALSE))
+ case UR_STATE_RECV_JOIN_CHAT_REQUEST:
+ switch (UnionRoomHandleYesNo(&uroom->textState, FALSE))
{
- case 0:
+ case 0: // YES
CopyBgTilemapBufferToVram(0);
- gUnknown_02022C2C = 0x45;
- sub_8011090(0x45, 0, 1);
- sub_8012188(data->field_0->arr[taskData[1]].unk.playerName, &data->field_0->arr[taskData[1]].unk.field_0, gUnknown_02022C2C);
- data->field_12 = taskData[1];
- data->state = 20;
+ gPlayerCurrActivity = ACTIVITY_CHAT | IN_UNION_ROOM;
+ UpdateGameData_SetActivity(ACTIVITY_CHAT | IN_UNION_ROOM, 0, TRUE);
+ sub_8012188(uroom->field_0->arr[taskData[1]].gname_uname.playerName, &uroom->field_0->arr[taskData[1]].gname_uname.gname, gPlayerCurrActivity);
+ uroom->field_12 = taskData[1];
+ uroom->state = UR_STATE_TRY_ACCEPT_CHAT_REQUEST_DELAY;
taskData[3] = 0;
break;
- case 1:
+ case 1: // NO
case -1:
- playerGender = sub_8017CF8(taskData[1], data->field_0);
- sub_801568C(sDeclineBattleTexts[playerGender]);
+ playerGender = GetUnionRoomPlayerGender(taskData[1], uroom->field_0);
+ ScheduleFieldMessageAndExit(sDeclineChatTexts[playerGender]);
break;
}
break;
- case 20:
+ case UR_STATE_TRY_ACCEPT_CHAT_REQUEST_DELAY:
if (++taskData[2] > 60)
{
- data->state = 21;
+ uroom->state = UR_STATE_TRY_ACCEPT_CHAT_REQUEST;
taskData[2] = 0;
}
break;
- case 21:
- switch (sub_8011A74())
+ case UR_STATE_TRY_ACCEPT_CHAT_REQUEST:
+ switch (RfuGetStatus())
{
- case 4:
- sub_801818C(TRUE);
- data->state = 4;
+ case RFU_STATUS_NEW_CHILD_DETECTED:
+ HandleCancelActivity(TRUE);
+ uroom->state = UR_STATE_MAIN;
break;
- case 1:
- case 2:
- playerGender = sub_8017CF8(taskData[1], data->field_0);
- sub_8011090(0x54, 0, 1);
- if (sub_8011B90() == TRUE)
- sub_801568C(sChatDeclinedTexts[playerGender]);
+ case RFU_STATUS_FATAL_ERROR:
+ case RFU_STATUS_CONNECTION_ERROR:
+ playerGender = GetUnionRoomPlayerGender(taskData[1], uroom->field_0);
+ UpdateGameData_SetActivity(ACTIVITY_PLYRTALK | IN_UNION_ROOM, 0, TRUE);
+ if (IsUnionRoomListenTaskActive() == TRUE)
+ ScheduleFieldMessageAndExit(sChatDeclinedTexts[playerGender]);
else
- sub_8015664(30, sChatDeclinedTexts[playerGender]);
+ ScheduleFieldMessageWithFollowupState(UR_STATE_CANCEL_ACTIVITY_LINK_ERROR, sChatDeclinedTexts[playerGender]);
break;
- case 3:
- data->state = 22;
+ case RFU_STATUS_CHILD_SEND_COMPLETE:
+ uroom->state = UR_STATE_ACCEPT_CHAT_REQUEST;
break;
}
taskData[3]++;
break;
- case 22:
- if (sub_8011A80())
+ case UR_STATE_ACCEPT_CHAT_REQUEST:
+ if (RfuHasErrored())
{
- playerGender = sub_8017CF8(taskData[1], data->field_0);
- sub_8011090(0x54, 0, 1);
- if (sub_8011B90() == TRUE)
- sub_801568C(sChatDeclinedTexts[playerGender]);
+ playerGender = GetUnionRoomPlayerGender(taskData[1], uroom->field_0);
+ UpdateGameData_SetActivity(ACTIVITY_PLYRTALK | IN_UNION_ROOM, 0, TRUE);
+ if (IsUnionRoomListenTaskActive() == TRUE)
+ ScheduleFieldMessageAndExit(sChatDeclinedTexts[playerGender]);
else
- sub_8015664(30, sChatDeclinedTexts[playerGender]);
+ ScheduleFieldMessageWithFollowupState(UR_STATE_CANCEL_ACTIVITY_LINK_ERROR, sChatDeclinedTexts[playerGender]);
}
- if (gReceivedRemoteLinkPlayers != 0)
- data->state = 16;
+ if (gReceivedRemoteLinkPlayers)
+ uroom->state = UR_STATE_START_ACTIVITY_FREE_UROOM;
break;
- case 11:
- PlaySE(SE_PINPON);
+ case UR_STATE_PLAYER_CONTACTED_YOU:
+ PlaySE(SE_DING_DONG);
sub_800EF7C();
- data->state = 12;
- data->field_9A[0] = 0;
+ uroom->state = UR_STATE_RECV_CONTACT_DATA;
+ uroom->recvActivityRequest[0] = 0;
break;
- case 12:
- if (sub_8011A80())
+ case UR_STATE_RECV_CONTACT_DATA:
+ if (RfuHasErrored())
{
- sub_801818C(FALSE);
- data->state = 2;
+ HandleCancelActivity(FALSE);
+ uroom->state = UR_STATE_INIT_LINK;
}
- else if (gReceivedRemoteLinkPlayers != 0)
+ else if (gReceivedRemoteLinkPlayers)
{
- sub_80143E4(gBlockSendBuffer, TRUE);
- CreateTask(sub_80140E0, 5);
- data->state = 39;
+ CreateTrainerCardInBuffer(gBlockSendBuffer, TRUE);
+ CreateTask(Task_ExchangeCards, 5);
+ uroom->state = UR_STATE_WAIT_FOR_CONTACT_DATA;
}
break;
- case 39:
- sub_801689C(data);
- if (!FuncIsActiveTask(sub_80140E0))
+ case UR_STATE_WAIT_FOR_CONTACT_DATA:
+ ReceiveUnionRoomActivityPacket(uroom);
+ if (!FuncIsActiveTask(Task_ExchangeCards))
{
- data->state = 33;
+ uroom->state = UR_STATE_PRINT_CONTACT_MSG;
StringCopy(gStringVar1, gLinkPlayers[1].name);
- id = sub_800E540(gLinkPlayers[1].trainerId, gLinkPlayers[1].name);
+ id = PlayerHasMetTrainerBefore(gLinkPlayers[1].trainerId, gLinkPlayers[1].name);
StringExpandPlaceholders(gStringVar4, sPlayerContactedYouTexts[id]);
}
break;
- case 33:
- sub_801689C(data);
- if (PrintOnTextbox(&data->textState, gStringVar4))
- data->state = 34;
+ case UR_STATE_PRINT_CONTACT_MSG:
+ ReceiveUnionRoomActivityPacket(uroom);
+ if (PrintOnTextbox(&uroom->textState, gStringVar4))
+ uroom->state = UR_STATE_HANDLE_CONTACT_DATA;
break;
- case 34:
- sub_801689C(data);
- if (sub_80168DC(data) && gMain.newKeys & B_BUTTON)
+ case UR_STATE_HANDLE_CONTACT_DATA:
+ ReceiveUnionRoomActivityPacket(uroom);
+ if (UnionRoom_HandleContactFromOtherPlayer(uroom) && gMain.newKeys & B_BUTTON)
{
sub_8011DE0(1);
StringCopy(gStringVar4, sText_ChatEnded);
- data->state = 36;
+ uroom->state = UR_STATE_CANCEL_REQUEST_PRINT_MSG;
}
break;
- case 35:
- sub_8015664(9, gStringVar4);
+ case UR_STATE_RECV_ACTIVITY_REQUEST:
+ ScheduleFieldMessageWithFollowupState(UR_STATE_HANDLE_ACTIVITY_REQUEST, gStringVar4);
break;
- case 9:
- switch (sub_80170B8(&data->textState, FALSE))
+ case UR_STATE_HANDLE_ACTIVITY_REQUEST:
+ switch (UnionRoomHandleYesNo(&uroom->textState, FALSE))
{
- case 0:
- data->field_4C[0] = 0x51;
- if (gUnknown_02022C2C == 0x45)
- sub_8011090(gUnknown_02022C2C | 0x40, sub_801100C(1), 0);
+ case 0: // ACCEPT
+ uroom->playerSendBuffer[0] = ACTIVITY_ACCEPT | IN_UNION_ROOM;
+ if (gPlayerCurrActivity == (ACTIVITY_CHAT | IN_UNION_ROOM))
+ UpdateGameData_SetActivity(gPlayerCurrActivity | IN_UNION_ROOM, sub_801100C(1), FALSE);
else
- sub_8011090(gUnknown_02022C2C | 0x40, sub_801100C(1), 1);
+ UpdateGameData_SetActivity(gPlayerCurrActivity | IN_UNION_ROOM, sub_801100C(1), TRUE);
- data->field_8->arr[0].field_1B = 0;
+ uroom->field_8->arr[0].field_1B = 0;
taskData[3] = 0;
- if (gUnknown_02022C2C == 0x41)
+ if (gPlayerCurrActivity == (ACTIVITY_BATTLE_SINGLE | IN_UNION_ROOM))
{
if (!HasAtLeastTwoMonsOfLevel30OrLower())
{
- data->field_4C[0] = 0x52;
- sub_800FE50(data->field_4C);
- data->state = 10;
+ uroom->playerSendBuffer[0] = ACTIVITY_DECLINE | IN_UNION_ROOM;
+ Rfu_SendPacket(uroom->playerSendBuffer);
+ uroom->state = UR_STATE_DECLINE_ACTIVITY_REQUEST;
StringCopy(gStringVar4, sText_NeedTwoMonsOfLevel30OrLower2);
}
else
{
- sub_800FE50(data->field_4C);
- data->state = 13;
+ Rfu_SendPacket(uroom->playerSendBuffer);
+ uroom->state = UR_STATE_PRINT_START_ACTIVITY_MSG;
}
}
- else if (gUnknown_02022C2C == 0x48)
+ else if (gPlayerCurrActivity == (ACTIVITY_CARD | IN_UNION_ROOM))
{
- sub_800FE50(data->field_4C);
- sub_8018220(gStringVar4, data, 1);
- data->state = 40;
+ Rfu_SendPacket(uroom->playerSendBuffer);
+ ViewURoomPartnerTrainerCard(gStringVar4, uroom, TRUE);
+ uroom->state = UR_STATE_PRINT_CARD_INFO;
}
else
{
- sub_800FE50(data->field_4C);
- data->state = 13;
+ Rfu_SendPacket(uroom->playerSendBuffer);
+ uroom->state = UR_STATE_PRINT_START_ACTIVITY_MSG;
}
break;
- case 1:
+ case 1: // DECLINE
case -1:
- data->field_4C[0] = 0x52;
- sub_800FE50(data->field_4C);
- data->state = 10;
- sub_8013078(gStringVar4, gUnknown_02022C2C);
+ uroom->playerSendBuffer[0] = ACTIVITY_DECLINE | IN_UNION_ROOM;
+ Rfu_SendPacket(uroom->playerSendBuffer);
+ uroom->state = UR_STATE_DECLINE_ACTIVITY_REQUEST;
+ GetYouDeclinedTheOfferMessage(gStringVar4, gPlayerCurrActivity);
break;
}
break;
- case 10:
- sub_800AC34();
- data->state = 36;
+ case UR_STATE_DECLINE_ACTIVITY_REQUEST:
+ SetCloseLinkCallback();
+ uroom->state = UR_STATE_CANCEL_REQUEST_PRINT_MSG;
break;
- case 36:
- if (gReceivedRemoteLinkPlayers == 0)
+ case UR_STATE_CANCEL_REQUEST_PRINT_MSG:
+ if (!gReceivedRemoteLinkPlayers)
{
- gUnknown_02022C2C = 0x40;
- sub_8015664(0x25, gStringVar4);
- memset(data->field_4C, 0, sizeof(data->field_4C));
- data->field_9A[0] = 0;
- data->field_98 = 0;
+ gPlayerCurrActivity = IN_UNION_ROOM;
+ ScheduleFieldMessageWithFollowupState(UR_STATE_CANCEL_REQUEST_RESTART_LINK, gStringVar4);
+ memset(uroom->playerSendBuffer, 0, sizeof(uroom->playerSendBuffer));
+ uroom->recvActivityRequest[0] = 0;
+ uroom->partnerYesNoResponse = 0;
}
break;
- case 37:
- data->state = 2;
- sub_801818C(FALSE);
+ case UR_STATE_CANCEL_REQUEST_RESTART_LINK:
+ uroom->state = UR_STATE_INIT_LINK;
+ HandleCancelActivity(FALSE);
break;
- case 13:
- sub_8017E00(gStringVar4, gUnknown_02022C2C | 0x40);
- sub_8015664(14, gStringVar4);
+ case UR_STATE_PRINT_START_ACTIVITY_MSG:
+ GetURoomActivityStartMsg(gStringVar4, gPlayerCurrActivity | IN_UNION_ROOM);
+ ScheduleFieldMessageWithFollowupState(UR_STATE_START_ACTIVITY_LINK, gStringVar4);
break;
- case 14:
- sub_800ADF8();
- data->state = 15;
+ case UR_STATE_START_ACTIVITY_LINK:
+ SetLinkStandbyCallback();
+ uroom->state = UR_STATE_START_ACTIVITY_WAIT_FOR_LINK;
break;
- case 15:
+ case UR_STATE_START_ACTIVITY_WAIT_FOR_LINK:
if (IsLinkTaskFinished())
- data->state = 16;
- break;
- case 16:
- Free(data->field_8);
- Free(data->field_0);
- Free(data->field_C);
- Free(data->field_4);
- DestroyTask(data->field_20);
- sub_8019F04(data->spriteIds);
- data->state = 17;
- break;
- case 17:
+ uroom->state = UR_STATE_START_ACTIVITY_FREE_UROOM;
+ break;
+ case UR_STATE_START_ACTIVITY_FREE_UROOM:
+ Free(uroom->field_8);
+ Free(uroom->field_0);
+ Free(uroom->field_C);
+ Free(uroom->field_4);
+ DestroyTask(uroom->searchTaskId);
+ DestroyGroupMemberSprites(uroom->spriteIds);
+ uroom->state = UR_STATE_START_ACTIVITY_FADE;
+ break;
+ case UR_STATE_START_ACTIVITY_FADE:
BeginNormalPaletteFade(-1, 0, 0, 0x10, RGB_BLACK);
- data->state = 18;
+ uroom->state = UR_STATE_START_ACTIVITY;
break;
- case 18:
+ case UR_STATE_START_ACTIVITY:
if (!UpdatePaletteFade())
{
- sub_8019E3C();
+ DestroyUnionRoomPlayerObjects();
DestroyTask(taskId);
- Free(gUnknown_02022C30.uRoom);
- sub_80149D8();
+ Free(sWirelessLinkMain.uRoom);
+ CreateTask_StartActivity();
}
break;
- case 42:
- if (sub_800F7DC()->species == SPECIES_NONE)
+ case UR_STATE_INTERACT_WITH_ATTENDANT:
+ if (GetHostRFUtgtGname()->species == SPECIES_NONE)
{
- data->state = 43;
+ uroom->state = UR_STATE_REGISTER_PROMPT;
}
else
{
- if (sub_800F7DC()->species == SPECIES_EGG)
+ if (GetHostRFUtgtGname()->species == SPECIES_EGG)
{
StringCopy(gStringVar4, sText_CancelRegistrationOfEgg);
}
else
{
- StringCopy(gStringVar1, gSpeciesNames[sub_800F7DC()->species]);
- ConvertIntToDecimalStringN(gStringVar2, sub_800F7DC()->level, STR_CONV_MODE_LEFT_ALIGN, 3);
+ StringCopy(gStringVar1, gSpeciesNames[GetHostRFUtgtGname()->species]);
+ ConvertIntToDecimalStringN(gStringVar2, GetHostRFUtgtGname()->level, STR_CONV_MODE_LEFT_ALIGN, 3);
StringExpandPlaceholders(gStringVar4, sText_CancelRegistrationOfMon);
}
- sub_8015664(44, gStringVar4);
+ ScheduleFieldMessageWithFollowupState(UR_STATE_CANCEL_REGISTRATION_PROMPT, gStringVar4);
}
break;
- case 43:
- if (PrintOnTextbox(&data->textState, sText_RegisterMonAtTradingBoard))
- data->state = 47;
+ case UR_STATE_REGISTER_PROMPT:
+ if (PrintOnTextbox(&uroom->textState, sText_RegisterMonAtTradingBoard))
+ uroom->state = UR_STATE_REGISTER_PROMPT_HANDLE_INPUT;
break;
- case 47:
- var5 = sub_8017178(&data->textState, &data->field_1D, &data->field_1E, &gUnknown_082F025C, &gUnknown_082F027C);
- if (var5 != -1)
+ case UR_STATE_REGISTER_PROMPT_HANDLE_INPUT:
+ input = ListMenuHandler_AllItemsAvailable(&uroom->textState,
+ &uroom->tradeBoardSelectWindowId,
+ &uroom->tradeBoardDetailsWindowId,
+ &sWindowTemplate_RegisterForTrade,
+ &sListMenuTemplate_RegisterForTrade);
+ if (input != -1)
{
- if (var5 == -2 || var5 == 3)
+ if (input == -2 || input == 3)
{
- data->state = 4;
- sub_801818C(TRUE);
+ uroom->state = UR_STATE_MAIN;
+ HandleCancelActivity(TRUE);
}
else
{
- switch (var5)
+ switch (input)
{
case 1: // REGISTER
- sub_8015664(53, sText_WhichMonWillYouOffer);
+ ScheduleFieldMessageWithFollowupState(UR_STATE_REGISTER_SELECT_MON_FADE, sText_WhichMonWillYouOffer);
break;
case 2: // INFO
- sub_8015664(47, sText_TradingBoardInfo);
+ ScheduleFieldMessageWithFollowupState(UR_STATE_REGISTER_PROMPT_HANDLE_INPUT, sText_TradingBoardInfo);
break;
}
}
}
break;
- case 53:
+ case UR_STATE_REGISTER_SELECT_MON_FADE:
BeginNormalPaletteFade(-1, 0, 0, 0x10, RGB_BLACK);
- data->state = 54;
+ uroom->state = UR_STATE_REGISTER_SELECT_MON;
break;
- case 54:
+ case UR_STATE_REGISTER_SELECT_MON:
if (!gPaletteFade.active)
{
- sUnionRoomTrade.field_0 = 1;
+ sUnionRoomTrade.state = URTRADE_STATE_REGISTERING;
gFieldCallback = FieldCB_ContinueScriptUnionRoom;
ChooseMonForTradingBoard(PARTY_MENU_TYPE_UNION_ROOM_REGISTER, CB2_ReturnToField);
}
break;
- case 52:
- var5 = sub_8017178(&data->textState, &data->field_1D, &data->field_1E, &gUnknown_082F0294, &sMenuTemplate_TradingBoardRequestType);
- if (var5 != -1)
+ case UR_STATE_REGISTER_REQUEST_TYPE:
+ input = ListMenuHandler_AllItemsAvailable(&uroom->textState,
+ &uroom->tradeBoardSelectWindowId,
+ &uroom->tradeBoardDetailsWindowId,
+ &gUnknown_082F0294,
+ &sMenuTemplate_TradingBoardRequestType);
+ if (input != -1)
{
- switch (var5)
+ switch (input)
{
case -2:
- case 18:
+ case NUMBER_OF_MON_TYPES: // Exit
ResetUnionRoomTrade(&sUnionRoomTrade);
- sub_8010FCC(0, 0, 0);
- sub_801568C(sText_RegistrationCanceled);
+ SetTradeBoardRegisteredMonInfo(TYPE_NORMAL, SPECIES_NONE, 0);
+ ScheduleFieldMessageAndExit(sText_RegistrationCanceled);
break;
default:
- sUnionRoomTrade.type = var5;
- data->state = 55;
+ sUnionRoomTrade.type = input;
+ uroom->state = UR_STATE_REGISTER_COMPLETE;
break;
}
}
break;
- case 55:
- sub_8010FCC(sUnionRoomTrade.type, sUnionRoomTrade.playerSpecies, sUnionRoomTrade.playerLevel);
- sub_801568C(sText_RegistraionCompleted);
+ case UR_STATE_REGISTER_COMPLETE:
+ SetTradeBoardRegisteredMonInfo(sUnionRoomTrade.type, sUnionRoomTrade.playerSpecies, sUnionRoomTrade.playerLevel);
+ ScheduleFieldMessageAndExit(sText_RegistraionCompleted);
break;
- case 44:
- switch (sub_80170B8(&data->textState, FALSE))
+ case UR_STATE_CANCEL_REGISTRATION_PROMPT:
+ switch (UnionRoomHandleYesNo(&uroom->textState, FALSE))
{
- case 0:
- data->state = 56;
+ case 0: // YES
+ uroom->state = UR_STATE_CANCEL_REGISTRATION;
break;
- case 1:
+ case 1: // NO
case -1:
- sub_801818C(TRUE);
- data->state = 4;
+ HandleCancelActivity(TRUE);
+ uroom->state = UR_STATE_MAIN;
break;
}
break;
- case 56:
- if (PrintOnTextbox(&data->textState, sText_RegistrationCanceled2))
+ case UR_STATE_CANCEL_REGISTRATION:
+ if (PrintOnTextbox(&uroom->textState, sText_RegistrationCanceled2))
{
- sub_8010FCC(0, 0, 0);
+ SetTradeBoardRegisteredMonInfo(TYPE_NORMAL, SPECIES_NONE, 0);
ResetUnionRoomTrade(&sUnionRoomTrade);
- sub_801818C(TRUE);
- data->state = 4;
+ HandleCancelActivity(TRUE);
+ uroom->state = UR_STATE_MAIN;
}
break;
- case 45:
- if (PrintOnTextbox(&data->textState, sText_XCheckedTradingBoard))
- data->state = 46;
+ case UR_STATE_CHECK_TRADING_BOARD:
+ if (PrintOnTextbox(&uroom->textState, sText_XCheckedTradingBoard))
+ uroom->state = UR_STATE_TRADING_BOARD_LOAD;
break;
- case 46:
- sub_80173B0();
- data->state = 48;
+ case UR_STATE_TRADING_BOARD_LOAD:
+ UR_ClearBg0();
+ uroom->state = UR_STATE_TRADING_BOARD_HANDLE_INPUT;
break;
- case 48:
- var5 = sub_80172A0(&data->textState, &data->field_1D, &data->field_4A, &data->field_1E, &gUnknown_082F034C, &gUnknown_082F03A4, data->field_0);
- if (var5 != -1)
+ case UR_STATE_TRADING_BOARD_HANDLE_INPUT:
+ input = TradeBoardMenuHandler(&uroom->textState, &uroom->tradeBoardSelectWindowId, &uroom->tradeBoardListMenuId, &uroom->tradeBoardDetailsWindowId, &gUnknown_082F034C, &sTradeBoardListMenuTemplate, uroom->field_0);
+ if (input != -1)
{
- switch (var5)
+ switch (input)
{
case -2:
- case 8:
- sub_801818C(TRUE);
- data->state = 4;
+ case 8: // EXIT
+ HandleCancelActivity(TRUE);
+ uroom->state = UR_STATE_MAIN;
break;
default:
- sub_80173B0();
- switch (sub_8017D04(data->field_0->arr[var5].unk.field_0.type, data->field_0->arr[var5].unk.field_0.species))
+ UR_ClearBg0();
+ switch (IsRequestedTypeOrEggInPlayerParty(uroom->field_0->arr[input].gname_uname.gname.type, uroom->field_0->arr[input].gname_uname.gname.species))
{
- case 0:
- sub_8018404(gStringVar1, &data->field_0->arr[var5]);
- sub_8015664(49, sText_AskTrainerToMakeTrade);
- taskData[1] = var5;
+ case UR_TRADE_MATCH:
+ IntlConvPartnerUname7(gStringVar1, &uroom->field_0->arr[input]);
+ ScheduleFieldMessageWithFollowupState(UR_STATE_TRADE_PROMPT, sText_AskTrainerToMakeTrade);
+ taskData[1] = input;
break;
- case 1:
- sub_8018404(gStringVar1, &data->field_0->arr[var5]);
- StringCopy(gStringVar2, gTypeNames[data->field_0->arr[var5].unk.field_0.type]);
- sub_8015664(46, sText_DontHaveTypeTrainerWants);
+ case UR_TRADE_NOTYPE:
+ IntlConvPartnerUname7(gStringVar1, &uroom->field_0->arr[input]);
+ StringCopy(gStringVar2, gTypeNames[uroom->field_0->arr[input].gname_uname.gname.type]);
+ ScheduleFieldMessageWithFollowupState(UR_STATE_TRADING_BOARD_LOAD, sText_DontHaveTypeTrainerWants);
break;
- case 2:
- sub_8018404(gStringVar1, &data->field_0->arr[var5]);
- StringCopy(gStringVar2, gTypeNames[data->field_0->arr[var5].unk.field_0.type]);
- sub_8015664(46, sText_DontHaveEggTrainerWants);
+ case UR_TRADE_NOEGG:
+ IntlConvPartnerUname7(gStringVar1, &uroom->field_0->arr[input]);
+ StringCopy(gStringVar2, gTypeNames[uroom->field_0->arr[input].gname_uname.gname.type]);
+ ScheduleFieldMessageWithFollowupState(UR_STATE_TRADING_BOARD_LOAD, sText_DontHaveEggTrainerWants);
break;
}
break;
}
}
break;
- case 49:
- switch (sub_80170B8(&data->textState, FALSE))
+ case UR_STATE_TRADE_PROMPT:
+ switch (UnionRoomHandleYesNo(&uroom->textState, FALSE))
{
- case 0:
- data->state = 50;
+ case 0: // YES
+ uroom->state = UR_STATE_TRADE_SELECT_MON;
break;
- case -1:
+ case -1: // NO
case 1:
- sub_801818C(TRUE);
- data->state = 4;
+ HandleCancelActivity(TRUE);
+ uroom->state = UR_STATE_MAIN;
break;
}
break;
- case 50:
- if (PrintOnTextbox(&data->textState, sText_WhichMonWillYouOffer))
+ case UR_STATE_TRADE_SELECT_MON:
+ if (PrintOnTextbox(&uroom->textState, sText_WhichMonWillYouOffer))
{
- sUnionRoomTrade.field_0 = 2;
- memcpy(&gUnknown_02022C38, &data->field_0->arr[taskData[1]].unk.field_0.unk_00, sizeof(gUnknown_02022C38));
- gUnionRoomRequestedMonType = data->field_0->arr[taskData[1]].unk.field_0.type;
- gUnionRoomOfferedSpecies = data->field_0->arr[taskData[1]].unk.field_0.species;
+ sUnionRoomTrade.state = URTRADE_STATE_OFFERING;
+ memcpy(&gPartnerTgtGnameSub, &uroom->field_0->arr[taskData[1]].gname_uname.gname.unk_00, sizeof(gPartnerTgtGnameSub));
+ gUnionRoomRequestedMonType = uroom->field_0->arr[taskData[1]].gname_uname.gname.type;
+ gUnionRoomOfferedSpecies = uroom->field_0->arr[taskData[1]].gname_uname.gname.species;
gFieldCallback = FieldCB_ContinueScriptUnionRoom;
ChooseMonForTradingBoard(PARTY_MENU_TYPE_UNION_ROOM_TRADE, CB2_ReturnToField);
- sub_80156B0(data);
- sUnionRoomTrade.field_8 = taskData[1];
+ sub_80156B0(uroom);
+ sUnionRoomTrade.offerPlayerId = taskData[1];
}
break;
- case 51:
- gUnknown_02022C2C = 0x44;
- sub_8012188(data->field_0->arr[taskData[1]].unk.playerName, &data->field_0->arr[taskData[1]].unk.field_0, 0x44);
- sub_8018404(gStringVar1, &data->field_0->arr[taskData[1]]);
- sub_8017020(sCommunicatingWaitTexts[2]);
- data->state = 25;
+ case UR_STATE_TRADE_OFFER_MON:
+ gPlayerCurrActivity = ACTIVITY_TRADE | IN_UNION_ROOM;
+ sub_8012188(uroom->field_0->arr[taskData[1]].gname_uname.playerName, &uroom->field_0->arr[taskData[1]].gname_uname.gname, gPlayerCurrActivity);
+ IntlConvPartnerUname7(gStringVar1, &uroom->field_0->arr[taskData[1]]);
+ UR_PrintFieldMessage(sCommunicatingWaitTexts[2]);
+ uroom->state = UR_STATE_TRY_COMMUNICATING;
break;
- case 26:
- if (PrintOnTextbox(&data->textState, gStringVar4))
+ case UR_STATE_PRINT_AND_EXIT:
+ if (PrintOnTextbox(&uroom->textState, gStringVar4))
{
- sub_801818C(TRUE);
- sub_801A3D0(taskData[0], taskData[1], data->field_0);
- data->state = 4;
+ HandleCancelActivity(TRUE);
+ UpdateUnionRoomMemberFacing(taskData[0], taskData[1], uroom->field_0);
+ uroom->state = UR_STATE_MAIN;
}
break;
- case 8:
- if (PrintOnTextbox(&data->textState, gStringVar4))
- data->state = data->stateAfterPrint;
+ case UR_STATE_PRINT_MSG:
+ if (PrintOnTextbox(&uroom->textState, gStringVar4))
+ uroom->state = uroom->stateAfterPrint;
break;
}
}
-void var_800D_set_xB(void)
+void SetUsingUnionRoomStartMenu(void)
{
if (InUnionRoom() == TRUE)
- gSpecialVar_Result = 11;
+ gSpecialVar_Result = UR_INTERACT_START_MENU;
}
-void sub_801689C(struct UnkStruct_URoom *arg0)
+static void ReceiveUnionRoomActivityPacket(struct WirelessLink_URoom *data)
{
if (gRecvCmds[1][1] != 0 && (gRecvCmds[1][0] & 0xFF00) == 0x2F00)
{
- arg0->field_9A[0] = gRecvCmds[1][1];
- if (gRecvCmds[1][1] == 0x44)
+ data->recvActivityRequest[0] = gRecvCmds[1][1];
+ if (gRecvCmds[1][1] == (ACTIVITY_TRADE | IN_UNION_ROOM))
{
- arg0->field_9A[1] = gRecvCmds[1][2];
- arg0->field_9A[2] = gRecvCmds[1][3];
+ data->recvActivityRequest[1] = gRecvCmds[1][2];
+ data->recvActivityRequest[2] = gRecvCmds[1][3];
}
}
}
-bool32 sub_80168DC(struct UnkStruct_URoom *arg0)
+static bool32 UnionRoom_HandleContactFromOtherPlayer(struct WirelessLink_URoom *uroom)
{
- if (arg0->field_9A[0] != 0)
+ if (uroom->recvActivityRequest[0] != 0)
{
- s32 var = sub_8017EA0(gStringVar4, gLinkPlayers[1].gender, &arg0->field_9A[0], arg0);
- if (var == 0)
+ s32 id = GetChatLeaderActionRequestMessage(gStringVar4, gLinkPlayers[1].gender, &uroom->recvActivityRequest[0], uroom);
+ if (id == 0) // Error
{
return TRUE;
}
- else if (var == 1)
+ else if (id == 1) // Recieve activity request
{
- arg0->state = 35;
- gUnknown_02022C2C = arg0->field_9A[0];
+ uroom->state = UR_STATE_RECV_ACTIVITY_REQUEST;
+ gPlayerCurrActivity = uroom->recvActivityRequest[0];
return FALSE;
}
- else if (var == 2)
+ else if (id == 2) // No activity
{
- arg0->state = 36;
- sub_800AC34();
+ uroom->state = UR_STATE_CANCEL_REQUEST_PRINT_MSG;
+ SetCloseLinkCallback();
return FALSE;
}
}
@@ -3062,53 +3241,53 @@ bool32 sub_80168DC(struct UnkStruct_URoom *arg0)
void InitUnionRoom(void)
{
- struct UnkStruct_URoom *ptr;
+ struct WirelessLink_URoom *data;
sUnionRoomPlayerName[0] = EOS;
- CreateTask(sub_801697C, 0);
- gUnknown_02022C30.uRoom = gUnknown_02022C30.uRoom; // Needed to match.
- gUnknown_02022C30.uRoom = ptr = AllocZeroed(sizeof(struct UnkStruct_URoom));
- gUnknown_03000DA8 = gUnknown_02022C30.uRoom;
- ptr->state = 0;
- ptr->textState = 0;
- ptr->field_10 = 0;
- ptr->field_12 = 0;
+ CreateTask(Task_InitUnionRoom, 0);
+ sWirelessLinkMain.uRoom = sWirelessLinkMain.uRoom; // Needed to match.
+ sWirelessLinkMain.uRoom = data = AllocZeroed(sizeof(struct WirelessLink_URoom));
+ sURoom = sWirelessLinkMain.uRoom;
+ data->state = 0;
+ data->textState = 0;
+ data->unknown = 0;
+ data->field_12 = 0;
sUnionRoomPlayerName[0] = EOS;
}
-void sub_801697C(u8 taskId)
+static void Task_InitUnionRoom(u8 taskId)
{
s32 i;
u8 text[32];
- struct UnkStruct_URoom *structPtr = gUnknown_02022C30.uRoom;
+ struct WirelessLink_URoom *data = sWirelessLinkMain.uRoom;
- switch (structPtr->state)
+ switch (data->state)
{
case 0:
- structPtr->state = 1;
+ data->state = 1;
break;
case 1:
- sub_8010F84(0xC, 0, 0);
- sub_800B488();
+ SetHostRFUtgtGname(ACTIVITY_SEARCH, 0, 0);
+ SetWirelessCommType1();
OpenLink();
- sub_8011C84();
- sub_80111B0(1);
- structPtr->state = 2;
+ InitializeRfuLinkManager_EnterUnionRoom();
+ sub_80111B0(TRUE);
+ data->state = 2;
break;
case 2:
- structPtr->field_4 = AllocZeroed(0x70);
- sub_80175EC(structPtr->field_4, 4);
- structPtr->field_C = AllocZeroed(0x70);
- sub_80175EC(structPtr->field_C, 4);
- structPtr->field_0 = AllocZeroed(0x100);
- sub_8017580(structPtr->field_0->arr, 8);
- structPtr->field_8 = AllocZeroed(0x20);
- sub_8017580(&structPtr->field_8->arr[0], 1);
- structPtr->field_20 = sub_8016DF0(structPtr->field_C, structPtr->field_4, 10);
- structPtr->state = 3;
+ data->field_4 = AllocZeroed(4 * sizeof(struct UnkStruct_x1C));
+ ClearUnkStruct_x1CArray(data->field_4, 4);
+ data->field_C = AllocZeroed(4 * sizeof(struct UnkStruct_x1C));
+ ClearUnkStruct_x1CArray(data->field_C, 4);
+ data->field_0 = AllocZeroed(8 * sizeof(struct UnkStruct_x20));
+ ClearUnkStruct_x20Array(data->field_0->arr, 8);
+ data->field_8 = AllocZeroed(sizeof(struct UnkStruct_x20));
+ ClearUnkStruct_x20Array(&data->field_8->arr[0], 1);
+ data->searchTaskId = CreateTask_SearchForChildOrParent(data->field_C, data->field_4, 10);
+ data->state = 3;
break;
case 3:
- switch (sub_8016B00())
+ switch (HandlePlayerListUpdate())
{
case 1:
case 2:
@@ -3116,10 +3295,10 @@ void sub_801697C(u8 taskId)
{
for (i = 0; i < PLAYER_NAME_LENGTH + 1; i++)
{
- if (structPtr->field_0->arr[i].field_1A_0 == 1)
+ if (data->field_0->arr[i].groupScheduledAnim == UNION_ROOM_SPAWN_IN)
{
- sub_8018404(text, &structPtr->field_0->arr[i]);
- if (sub_800E540(ReadAsU16(structPtr->field_0->arr[i].unk.field_0.unk_00.playerTrainerId), text))
+ IntlConvPartnerUname7(text, &data->field_0->arr[i]);
+ if (PlayerHasMetTrainerBefore(ReadAsU16(data->field_0->arr[i].gname_uname.gname.unk_00.playerTrainerId), text))
{
StringCopy(sUnionRoomPlayerName, text);
break;
@@ -3133,13 +3312,13 @@ void sub_801697C(u8 taskId)
}
break;
case 4:
- free(structPtr->field_8);
- free(structPtr->field_0);
- free(structPtr->field_C);
- free(structPtr->field_4);
- DestroyTask(structPtr->field_20);
- free(gUnknown_02022C30.uRoom);
- sub_800EDD4();
+ free(data->field_8);
+ free(data->field_0);
+ free(data->field_C);
+ free(data->field_4);
+ DestroyTask(data->searchTaskId);
+ free(sWirelessLinkMain.uRoom);
+ LinkRfu_Shutdown();
DestroyTask(taskId);
break;
}
@@ -3159,176 +3338,168 @@ bool16 BufferUnionRoomPlayerName(void)
}
}
-u8 sub_8016B00(void)
+static u8 HandlePlayerListUpdate(void)
{
s32 i;
u8 j;
- struct UnkStruct_URoom *structPtr = gUnknown_02022C30.uRoom;
+ struct WirelessLink_URoom *data = sWirelessLinkMain.uRoom;
s32 r7 = 0;
- for (i = 0; i < 4; i++)
+ for (i = 0; i < RFU_CHILD_MAX; i++)
{
- if (sub_8017630(&structPtr->field_C->arr[i].unk0, &gUnknown_082F045C) == TRUE)
+ if (AreGnameUnameDifferent(&data->field_C->arr[i].gname_uname, &sWirelessGnameUnamePair_Dummy) == TRUE)
{
- structPtr->field_8->arr[0].unk = structPtr->field_C->arr[i].unk0;
- structPtr->field_8->arr[0].field_18 = 0;
- structPtr->field_8->arr[0].field_1A_0 = 1;
- structPtr->field_8->arr[0].field_1B = 1;
+ data->field_8->arr[0].gname_uname = data->field_C->arr[i].gname_uname;
+ data->field_8->arr[0].timeoutCounter = 0;
+ data->field_8->arr[0].groupScheduledAnim = UNION_ROOM_SPAWN_IN;
+ data->field_8->arr[0].field_1B = 1;
return 4;
}
}
- for (j = 0; j < 8; j++)
+ for (j = 0; j < ARRAY_COUNT(data->field_0->arr); j++)
{
- if (structPtr->field_0->arr[j].field_1A_0 != 0)
+ if (data->field_0->arr[j].groupScheduledAnim != UNION_ROOM_SPAWN_NONE)
{
- i = sub_80176E4(&structPtr->field_0->arr[j], &structPtr->field_4->arr[0]);
+ i = Findx20Inx1CArray(&data->field_0->arr[j], &data->field_4->arr[0]);
if (i != 0xFF)
{
- if (structPtr->field_0->arr[j].field_1A_0 == 1)
+ if (data->field_0->arr[j].groupScheduledAnim == UNION_ROOM_SPAWN_IN)
{
- if (sub_8017678(&structPtr->field_0->arr[j].unk, &structPtr->field_4->arr[i].unk0))
+ if (AreUnionRoomPlayerGnamesDifferent(&data->field_0->arr[j].gname_uname, &data->field_4->arr[i].gname_uname))
{
- structPtr->field_0->arr[j].unk = structPtr->field_4->arr[i].unk0;
- structPtr->field_0->arr[j].field_1B = 0x40;
+ data->field_0->arr[j].gname_uname = data->field_4->arr[i].gname_uname;
+ data->field_0->arr[j].field_1B = 64;
r7 = 1;
}
- else if (structPtr->field_0->arr[j].field_1B != 0)
+ else if (data->field_0->arr[j].field_1B != 0)
{
- structPtr->field_0->arr[j].field_1B--;
- if (structPtr->field_0->arr[j].field_1B == 0)
+ data->field_0->arr[j].field_1B--;
+ if (data->field_0->arr[j].field_1B == 0)
r7 = 2;
}
}
else
{
- structPtr->field_0->arr[j].field_1A_0 = 1;
- structPtr->field_0->arr[j].field_1B = 0;
+ data->field_0->arr[j].groupScheduledAnim = UNION_ROOM_SPAWN_IN;
+ data->field_0->arr[j].field_1B = 0;
r7 = 2;
}
- structPtr->field_0->arr[j].field_18 = 0;
+ data->field_0->arr[j].timeoutCounter = 0;
}
- else if (structPtr->field_0->arr[j].field_1A_0 != 2)
+ else if (data->field_0->arr[j].groupScheduledAnim != UNION_ROOM_SPAWN_OUT)
{
- structPtr->field_0->arr[j].field_18++;
- if (structPtr->field_0->arr[j].field_18 >= 600)
+ data->field_0->arr[j].timeoutCounter++;
+ if (data->field_0->arr[j].timeoutCounter >= 600)
{
- structPtr->field_0->arr[j].field_1A_0 = 2;
+ data->field_0->arr[j].groupScheduledAnim = UNION_ROOM_SPAWN_OUT;
r7 = 2;
}
}
- else if (structPtr->field_0->arr[j].field_1A_0 == 2)
+ else if (data->field_0->arr[j].groupScheduledAnim == UNION_ROOM_SPAWN_OUT)
{
- structPtr->field_0->arr[j].field_18++;
- if (structPtr->field_0->arr[j].field_18 >= 900)
+ data->field_0->arr[j].timeoutCounter++;
+ if (data->field_0->arr[j].timeoutCounter >= 900)
{
- sub_8017580(&structPtr->field_0->arr[j], 1);
+ ClearUnkStruct_x20Array(&data->field_0->arr[j], 1);
}
}
}
}
- for (i = 0; i < 4; i++)
+ for (i = 0; i < RFU_CHILD_MAX; i++)
{
- if (sub_8017734(&structPtr->field_0->arr[0], &structPtr->field_4->arr[i], 8) != 0xFF)
+ if (Appendx1Ctox20(&data->field_0->arr[0], &data->field_4->arr[i], MAX_UNION_ROOM_PLAYERS) != 0xFF)
r7 = 1;
}
return r7;
}
-void sub_8016CA0(u8 taskId)
+static void Task_SearchForChildOrParent(u8 taskId)
{
s32 i, j;
- struct UnkStruct_Shared sp0;
+ struct WirelessGnameUnamePair gname_uname;
struct UnkStruct_Main4 **ptr = (void*) gTasks[taskId].data;
- bool8 r4;
+ bool8 isParent;
- for (i = 0; i < 4; i++)
+ for (i = 0; i < RFU_CHILD_MAX; i++)
{
- r4 = sub_800DE7C(&sp0.field_0, sp0.playerName, i);
- if (!sub_8013D88(sp0.field_0.activity, gTasks[taskId].data[4]))
+ isParent = LinkRfu_GetNameIfCompatible(&gname_uname.gname, gname_uname.playerName, i);
+ if (!IsPartnerActivityAcceptable(gname_uname.gname.activity, gTasks[taskId].data[4]))
{
- sp0 = gUnknown_082F045C;
+ gname_uname = sWirelessGnameUnamePair_Dummy;
}
- if (sp0.field_0.unk_00.language == 1)
+ if (gname_uname.gname.unk_00.language == LANGUAGE_JAPANESE)
{
- sp0 = gUnknown_082F045C;
+ gname_uname = sWirelessGnameUnamePair_Dummy;
}
- if (!r4)
+ if (!isParent)
{
for (j = 0; j < i; j++)
{
- if (!sub_8017630(&ptr[1]->arr[j].unk0, &sp0))
+ if (!AreGnameUnameDifferent(&ptr[1]->arr[j].gname_uname, &gname_uname))
{
- sp0 = gUnknown_082F045C;
+ gname_uname = sWirelessGnameUnamePair_Dummy;
}
}
- ptr[1]->arr[i].unk0 = sp0;
- ptr[1]->arr[i].unk18 = sub_8017630(&ptr[1]->arr[i].unk0, &gUnknown_082F045C);
+ ptr[1]->arr[i].gname_uname = gname_uname;
+ ptr[1]->arr[i].active = AreGnameUnameDifferent(&ptr[1]->arr[i].gname_uname, &sWirelessGnameUnamePair_Dummy);
}
else
{
- ptr[0]->arr[i].unk0 = sp0;
- ptr[0]->arr[i].unk18 = sub_8017630(&ptr[0]->arr[i].unk0, &gUnknown_082F045C);
+ ptr[0]->arr[i].gname_uname = gname_uname;
+ ptr[0]->arr[i].active = AreGnameUnameDifferent(&ptr[0]->arr[i].gname_uname, &sWirelessGnameUnamePair_Dummy);
}
}
}
-u8 sub_8016DF0(struct UnkStruct_Main4 * a0, struct UnkStruct_Main4 * a1, u32 a2)
+static u8 CreateTask_SearchForChildOrParent(struct UnkStruct_Main4 * main4_parent, struct UnkStruct_Main4 * main4_child, u32 linkGroup)
{
- u8 taskId = CreateTask(sub_8016CA0, 0);
+ u8 taskId = CreateTask(Task_SearchForChildOrParent, 0);
struct UnkStruct_Main4 ** data = (void *)gTasks[taskId].data;
- data[0] = a0;
- data[1] = a1;
- gTasks[taskId].data[4] = a2;
+ data[0] = main4_parent;
+ data[1] = main4_child;
+ gTasks[taskId].data[4] = linkGroup;
return taskId;
}
-void sub_8016E24(u8 taskId)
+static void Task_ListenForPartnersWithCompatibleSerialNos(u8 taskId)
{
s32 i, j;
struct UnkStruct_Main4 **ptr = (void*) gTasks[taskId].data;
- for (i = 0; i < 4; i++)
+ for (i = 0; i < RFU_CHILD_MAX; i++)
{
- sub_800DE7C(&ptr[0]->arr[i].unk0.field_0, ptr[0]->arr[i].unk0.playerName, i);
- if (!sub_8013D88(ptr[0]->arr[i].unk0.field_0.activity, gTasks[taskId].data[2]))
+ LinkRfu_GetNameIfCompatible(&ptr[0]->arr[i].gname_uname.gname, ptr[0]->arr[i].gname_uname.playerName, i);
+ if (!IsPartnerActivityAcceptable(ptr[0]->arr[i].gname_uname.gname.activity, gTasks[taskId].data[2]))
{
- ptr[0]->arr[i].unk0 = gUnknown_082F045C;
+ ptr[0]->arr[i].gname_uname = sWirelessGnameUnamePair_Dummy;
}
for (j = 0; j < i; j++)
{
- if (!sub_8017630(&ptr[0]->arr[j].unk0, &ptr[0]->arr[i].unk0))
+ if (!AreGnameUnameDifferent(&ptr[0]->arr[j].gname_uname, &ptr[0]->arr[i].gname_uname))
{
- ptr[0]->arr[i].unk0 = gUnknown_082F045C;
+ ptr[0]->arr[i].gname_uname = sWirelessGnameUnamePair_Dummy;
}
}
- ptr[0]->arr[i].unk18 = sub_8017630(&ptr[0]->arr[i].unk0, &gUnknown_082F045C);
+ ptr[0]->arr[i].active = AreGnameUnameDifferent(&ptr[0]->arr[i].gname_uname, &sWirelessGnameUnamePair_Dummy);
}
}
-bool32 sub_8016F1C(struct GFtgtGname *arg0, s16 arg1)
+static bool32 HasWonderCardOrNewsByLinkGroup(struct GFtgtGname *gname, s16 linkGroup)
{
- if (arg1 == 7)
+ if (linkGroup == LINK_GROUP_WONDER_CARD)
{
- if (!arg0->unk_00.hasCard)
- {
+ if (!gname->unk_00.hasCard)
return FALSE;
- }
else
- {
return TRUE;
- }
}
- else if (arg1 == 8)
+ else if (linkGroup == LINK_GROUP_WONDER_NEWS)
{
- if (!arg0->unk_00.hasNews)
- {
+ if (!gname->unk_00.hasNews)
return FALSE;
- }
else
- {
return TRUE;
- }
}
else
{
@@ -3336,40 +3507,40 @@ bool32 sub_8016F1C(struct GFtgtGname *arg0, s16 arg1)
}
}
-void sub_8016F44(u8 taskId)
+static void Task_ListenForPartnersWithSerial7F7D(u8 taskId)
{
s32 i;
struct UnkStruct_Main4 **ptr = (void*) gTasks[taskId].data;
- for (i = 0; i < 4; i++)
+ for (i = 0; i < RFU_CHILD_MAX; i++)
{
- if (sub_800DF34(&ptr[0]->arr[i].unk0.field_0, ptr[0]->arr[i].unk0.playerName, i))
+ if (LinkRfu_GetNameIfSerial7F7D(&ptr[0]->arr[i].gname_uname.gname, ptr[0]->arr[i].gname_uname.playerName, i))
{
- sub_8016F1C(&ptr[0]->arr[i].unk0.field_0, gTasks[taskId].data[2]);
+ HasWonderCardOrNewsByLinkGroup(&ptr[0]->arr[i].gname_uname.gname, gTasks[taskId].data[2]);
}
- ptr[0]->arr[i].unk18 = sub_8017630(&ptr[0]->arr[i].unk0, &gUnknown_082F045C);
+ ptr[0]->arr[i].active = AreGnameUnameDifferent(&ptr[0]->arr[i].gname_uname, &sWirelessGnameUnamePair_Dummy);
}
}
-u8 sub_8016FC0(struct UnkStruct_Main4 * a0, u32 a1)
+static u8 CreateTask_ListenForPartnersWithCompatibleSerialNos(struct UnkStruct_Main4 * main4, u32 linkGroup)
{
- u8 taskId = CreateTask(sub_8016E24, 0);
+ u8 taskId = CreateTask(Task_ListenForPartnersWithCompatibleSerialNos, 0);
struct UnkStruct_Main4 **ptr = (void*) gTasks[taskId].data;
- ptr[0] = a0;
- gTasks[taskId].data[2] = a1;
+ ptr[0] = main4;
+ gTasks[taskId].data[2] = linkGroup;
return taskId;
}
-u8 sub_8016FF0(struct UnkStruct_Main4 * a0, u32 a1)
+static u8 CreateTask_ListenForPartnersWithSerial7F7D(struct UnkStruct_Main4 * main4, u32 linkGroup)
{
- u8 taskId = CreateTask(sub_8016F44, 0);
+ u8 taskId = CreateTask(Task_ListenForPartnersWithSerial7F7D, 0);
struct UnkStruct_Main4 **ptr = (void*) gTasks[taskId].data;
- ptr[0] = a0;
- gTasks[taskId].data[2] = a1;
+ ptr[0] = main4;
+ gTasks[taskId].data[2] = linkGroup;
return taskId;
}
-bool32 sub_8017020(const u8 *src)
+static bool32 UR_PrintFieldMessage(const u8 *src)
{
LoadMessageBoxAndBorderGfx();
DrawDialogueFrame(0, 1);
@@ -3378,19 +3549,15 @@ bool32 sub_8017020(const u8 *src)
return FALSE;
}
-bool32 sub_801704C(void)
+static bool32 UR_RunTextPrinters_CheckPrinter0Active(void)
{
if (!RunTextPrintersAndIsPrinter0Active())
- {
return TRUE;
- }
else
- {
return FALSE;
- }
}
-bool8 PrintOnTextbox(u8 *textState, const u8 *str)
+static bool8 PrintOnTextbox(u8 *textState, const u8 *str)
{
switch (*textState)
{
@@ -3412,96 +3579,96 @@ bool8 PrintOnTextbox(u8 *textState, const u8 *str)
return FALSE;
}
-s8 sub_80170B8(u8 *arg0, bool32 arg1)
+static s8 UnionRoomHandleYesNo(u8 *state, bool32 noDraw)
{
- s8 r1;
+ s8 input;
- switch (*arg0)
+ switch (*state)
{
case 0:
- if (arg1)
+ if (noDraw)
{
return -3;
}
DisplayYesNoMenuDefaultYes();
- (*arg0)++;
+ (*state)++;
break;
case 1:
- if (arg1)
+ if (noDraw)
{
sub_8198C78();
- *arg0 = 0;
+ *state = 0;
return -3;
}
- r1 = Menu_ProcessInputNoWrapClearOnChoose();
- if (r1 == -1 || r1 == 0 || r1 == 1)
+ input = Menu_ProcessInputNoWrapClearOnChoose();
+ if (input == -1 || input == 0 || input == 1)
{
- *arg0 = 0;
- return r1;
+ *state = 0;
+ return input;
}
break;
}
return -2;
}
-u8 sub_8017118(const struct WindowTemplate * template)
+static u8 CreateTradeBoardWindow(const struct WindowTemplate * template)
{
u8 windowId = AddWindow(template);
DrawStdWindowFrame(windowId, FALSE);
- FillWindowPixelBuffer(windowId, 0xFF);
- sub_80173E0(windowId, 1, sText_NameWantedOfferLv, 8, 1, 6);
+ FillWindowPixelBuffer(windowId, PIXEL_FILL(15));
+ UR_AddTextPrinterParameterized(windowId, 1, sText_NameWantedOfferLv, 8, 1, 6);
CopyWindowToVram(windowId, 2);
PutWindowTilemap(windowId);
return windowId;
}
-void sub_8017168(u8 windowId)
+static void DeleteTradeBoardWindow(u8 windowId)
{
RemoveWindow(windowId);
}
-s32 sub_8017178(u8 *arg0, u8 *arg1, u8 *arg2, const struct WindowTemplate *winTemplate, const struct ListMenuTemplate *menuTemplate)
+static s32 ListMenuHandler_AllItemsAvailable(u8 *state, u8 *windowId, u8 *listMenuId, const struct WindowTemplate *winTemplate, const struct ListMenuTemplate *menuTemplate)
{
- s32 r1, r8;
+ s32 maxWidth, input;
struct WindowTemplate winTemplateCopy;
- switch (*arg0)
+ switch (*state)
{
case 0:
winTemplateCopy = *winTemplate;
- r1 = Intl_GetListMenuWidth(menuTemplate);
- if (winTemplateCopy.width > r1)
+ maxWidth = Intl_GetListMenuWidth(menuTemplate);
+ if (winTemplateCopy.width > maxWidth)
{
- winTemplateCopy.width = r1;
+ winTemplateCopy.width = maxWidth;
}
if (winTemplateCopy.tilemapLeft + winTemplateCopy.width > 29)
{
winTemplateCopy.tilemapLeft = max(29 - winTemplateCopy.width, 0);
}
- *arg1 = AddWindow(&winTemplateCopy);
- DrawStdWindowFrame(*arg1, FALSE);
+ *windowId = AddWindow(&winTemplateCopy);
+ DrawStdWindowFrame(*windowId, FALSE);
gMultiuseListMenuTemplate = *menuTemplate;
- gMultiuseListMenuTemplate.windowId = *arg1;
- *arg2 = ListMenuInit(&gMultiuseListMenuTemplate, 0, 0);
- CopyWindowToVram(*arg1, TRUE);
- (*arg0)++;
+ gMultiuseListMenuTemplate.windowId = *windowId;
+ *listMenuId = ListMenuInit(&gMultiuseListMenuTemplate, 0, 0);
+ CopyWindowToVram(*windowId, TRUE);
+ (*state)++;
break;
case 1:
- r8 = ListMenu_ProcessInput(*arg2);
- if (({gMain.newKeys & A_BUTTON;}))
+ input = ListMenu_ProcessInput(*listMenuId);
+ if (JOY_NEW(A_BUTTON))
{
- DestroyListMenuTask(*arg2, NULL, NULL);
- ClearStdWindowAndFrame(*arg1, TRUE);
- RemoveWindow(*arg1);
- *arg0 = 0;
- return r8;
+ DestroyListMenuTask(*listMenuId, NULL, NULL);
+ ClearStdWindowAndFrame(*windowId, TRUE);
+ RemoveWindow(*windowId);
+ *state = 0;
+ return input;
}
- else if (({gMain.newKeys & B_BUTTON;}))
+ else if (JOY_NEW(B_BUTTON))
{
- DestroyListMenuTask(*arg2, NULL, NULL);
- ClearStdWindowAndFrame(*arg1, TRUE);
- RemoveWindow(*arg1);
- *arg0 = 0;
+ DestroyListMenuTask(*listMenuId, NULL, NULL);
+ ClearStdWindowAndFrame(*windowId, TRUE);
+ RemoveWindow(*windowId);
+ *state = 0;
return -2;
}
break;
@@ -3510,49 +3677,48 @@ s32 sub_8017178(u8 *arg0, u8 *arg1, u8 *arg2, const struct WindowTemplate *winTe
return -1;
}
-s32 sub_80172A0(u8 *arg0, u8 *arg1, u8 *arg2, u8 *arg3, const struct WindowTemplate *winTemplate, const struct ListMenuTemplate *menuTemplate, struct UnkStruct_Main0 *arg6)
+static s32 TradeBoardMenuHandler(u8 *state, u8 *windowId, u8 *listMenuId, u8 *tradeBoardWindowId, const struct WindowTemplate *winTemplate, const struct ListMenuTemplate *menuTemplate, struct UnkStruct_Main0 *traders)
{
s32 input;
- s32 r4;
+ s32 idx;
- switch (*arg0)
+ switch (*state)
{
case 0:
- *arg3 = sub_8017118(&gUnknown_082F0344);
- *arg1 = AddWindow(winTemplate);
- DrawStdWindowFrame(*arg1, FALSE);
+ *tradeBoardWindowId = CreateTradeBoardWindow(&sWindowTemplate_TradingBoard);
+ *windowId = AddWindow(winTemplate);
+ DrawStdWindowFrame(*windowId, FALSE);
gMultiuseListMenuTemplate = *menuTemplate;
- gMultiuseListMenuTemplate.windowId = *arg1;
- *arg2 = ListMenuInit(&gMultiuseListMenuTemplate, 0, 1);
- (*arg0)++;
+ gMultiuseListMenuTemplate.windowId = *windowId;
+ *listMenuId = ListMenuInit(&gMultiuseListMenuTemplate, 0, 1);
+ (*state)++;
break;
case 1:
- CopyWindowToVram(*arg1, TRUE);
- (*arg0)++;
+ CopyWindowToVram(*windowId, TRUE);
+ (*state)++;
break;
case 2:
- // Register swap r1 <---> r2
- input = ListMenu_ProcessInput(*arg2);
- if (({gMain.newKeys & (A_BUTTON | B_BUTTON);}))
+ input = ListMenu_ProcessInput(*listMenuId);
+ if (JOY_NEW(A_BUTTON | B_BUTTON))
{
- if (input == 8 || ({gMain.newKeys & B_BUTTON;}))
+ if (input == 8 || JOY_NEW(B_BUTTON))
{
- DestroyListMenuTask(*arg2, NULL, NULL);
- RemoveWindow(*arg1);
- sub_8017168(*arg3);
- *arg0 = 0;
+ DestroyListMenuTask(*listMenuId, NULL, NULL);
+ RemoveWindow(*windowId);
+ DeleteTradeBoardWindow(*tradeBoardWindowId);
+ *state = 0;
return -2;
}
else
{
- r4 = sub_8017CB0(arg6->arr, input);
- if (r4 >= 0)
+ idx = GetIndexOfNthTradeBoardOffer(traders->arr, input);
+ if (idx >= 0)
{
- DestroyListMenuTask(*arg2, NULL, NULL);
- RemoveWindow(*arg1);
- sub_8017168(*arg3);
- *arg0 = 0;
- return r4;
+ DestroyListMenuTask(*listMenuId, NULL, NULL);
+ RemoveWindow(*windowId);
+ DeleteTradeBoardWindow(*tradeBoardWindowId);
+ *state = 0;
+ return idx;
}
else
{
@@ -3565,127 +3731,128 @@ s32 sub_80172A0(u8 *arg0, u8 *arg1, u8 *arg2, u8 *arg3, const struct WindowTempl
return -1;
}
-void sub_80173B0(void)
+
+static void UR_ClearBg0(void)
{
FillBgTilemapBufferRect(0, 0, 0, 0, 32, 32, 0);
CopyBgTilemapBufferToVram(0);
}
-void sub_80173D4(void)
+static void JoinGroup_EnableScriptContexts(void)
{
EnableBothScriptContexts();
}
-void sub_80173E0(u8 windowId, u8 arg1, const u8 *str, u8 arg3, u8 arg4, u8 arg5)
+static void UR_AddTextPrinterParameterized(u8 windowId, u8 fontId, const u8 *str, u8 x, u8 y, u8 colorIdx)
{
- struct TextPrinterTemplate sp0;
+ struct TextPrinterTemplate printerTemplate;
- sp0.currentChar = str;
- sp0.windowId = windowId;
- sp0.fontId = arg1;
- sp0.x = arg3;
- sp0.y = arg4;
- sp0.currentX = arg3;
- sp0.currentY = arg4;
- sp0.unk = 0;
+ printerTemplate.currentChar = str;
+ printerTemplate.windowId = windowId;
+ printerTemplate.fontId = fontId;
+ printerTemplate.x = x;
+ printerTemplate.y = y;
+ printerTemplate.currentX = x;
+ printerTemplate.currentY = y;
+ printerTemplate.style = 0;
gTextFlags.useAlternateDownArrow = FALSE;
- switch (arg5)
+ switch (colorIdx)
{
- case 0:
- sp0.letterSpacing = 0;
- sp0.lineSpacing = 0;
- sp0.fgColor = 2;
- sp0.bgColor = 1;
- sp0.shadowColor = 3;
- break;
- case 1:
- sp0.letterSpacing = 0;
- sp0.lineSpacing = 0;
- sp0.fgColor = 4;
- sp0.bgColor = 1;
- sp0.shadowColor = 5;
- break;
- case 2:
- sp0.letterSpacing = 0;
- sp0.lineSpacing = 0;
- sp0.fgColor = 6;
- sp0.bgColor = 1;
- sp0.shadowColor = 7;
- break;
- case 3:
- sp0.letterSpacing = 0;
- sp0.lineSpacing = 0;
- sp0.fgColor = 1;
- sp0.bgColor = 1;
- sp0.shadowColor = 3;
- break;
- case 4:
- sp0.letterSpacing = 0;
- sp0.lineSpacing = 0;
- sp0.fgColor = 1;
- sp0.bgColor = 2;
- sp0.shadowColor = 3;
- break;
- case 5:
- sp0.letterSpacing = 0;
- sp0.lineSpacing = 0;
- sp0.fgColor = 7;
- sp0.bgColor = 15;
- sp0.shadowColor = 9;
- break;
- case 6:
- sp0.letterSpacing = 0;
- sp0.lineSpacing = 0;
- sp0.fgColor = 14;
- sp0.bgColor = 15;
- sp0.shadowColor = 9;
+ case UR_COLOR_DKE_WHT_LTE:
+ printerTemplate.letterSpacing = 0;
+ printerTemplate.lineSpacing = 0;
+ printerTemplate.fgColor = TEXT_COLOR_DARK_GREY;
+ printerTemplate.bgColor = TEXT_COLOR_WHITE;
+ printerTemplate.shadowColor = TEXT_COLOR_LIGHT_GREY;
+ break;
+ case UR_COLOR_RED_WHT_LTR:
+ printerTemplate.letterSpacing = 0;
+ printerTemplate.lineSpacing = 0;
+ printerTemplate.fgColor = TEXT_COLOR_RED;
+ printerTemplate.bgColor = TEXT_COLOR_WHITE;
+ printerTemplate.shadowColor = TEXT_COLOR_LIGHT_RED;
+ break;
+ case UR_COLOR_GRN_WHT_LTG:
+ printerTemplate.letterSpacing = 0;
+ printerTemplate.lineSpacing = 0;
+ printerTemplate.fgColor = TEXT_COLOR_GREEN;
+ printerTemplate.bgColor = TEXT_COLOR_WHITE;
+ printerTemplate.shadowColor = TEXT_COLOR_LIGHT_GREEN;
+ break;
+ case UR_COLOR_WHT_WHT_LTE:
+ printerTemplate.letterSpacing = 0;
+ printerTemplate.lineSpacing = 0;
+ printerTemplate.fgColor = TEXT_COLOR_WHITE;
+ printerTemplate.bgColor = TEXT_COLOR_WHITE;
+ printerTemplate.shadowColor = TEXT_COLOR_LIGHT_GREY;
+ break;
+ case UR_COLOR_WHT_DKE_LTE:
+ printerTemplate.letterSpacing = 0;
+ printerTemplate.lineSpacing = 0;
+ printerTemplate.fgColor = TEXT_COLOR_WHITE;
+ printerTemplate.bgColor = TEXT_COLOR_DARK_GREY;
+ printerTemplate.shadowColor = TEXT_COLOR_LIGHT_GREY;
+ break;
+ case UR_COLOR_GRN_DN6_LTB:
+ printerTemplate.letterSpacing = 0;
+ printerTemplate.lineSpacing = 0;
+ printerTemplate.fgColor = TEXT_COLOR_LIGHT_GREEN;
+ printerTemplate.bgColor = TEXT_DYNAMIC_COLOR_6;
+ printerTemplate.shadowColor = TEXT_COLOR_LIGHT_BLUE;
+ break;
+ case UR_COLOR_DN5_DN6_LTB:
+ printerTemplate.letterSpacing = 0;
+ printerTemplate.lineSpacing = 0;
+ printerTemplate.fgColor = TEXT_DYNAMIC_COLOR_5;
+ printerTemplate.bgColor = TEXT_DYNAMIC_COLOR_6;
+ printerTemplate.shadowColor = TEXT_COLOR_LIGHT_BLUE;
break;
}
- AddTextPrinter(&sp0, 0xFF, NULL);
+ AddTextPrinter(&printerTemplate, 0xFF, NULL);
}
-void sub_8017580(struct UnkStruct_x20 *arg0, u8 count)
+static void ClearUnkStruct_x20Array(struct UnkStruct_x20 *arr, u8 count)
{
s32 i;
for (i = 0; i < count; i++)
{
- arg0[i].unk = gUnknown_082F045C;
- arg0[i].field_18 = 0xFF;
- arg0[i].field_1A_0 = 0;
- arg0[i].field_1A_1 = 0;
- arg0[i].field_1B = 0;
+ arr[i].gname_uname = sWirelessGnameUnamePair_Dummy;
+ arr[i].timeoutCounter = 255;
+ arr[i].groupScheduledAnim = UNION_ROOM_SPAWN_NONE;
+ arr[i].useRedText = FALSE;
+ arr[i].field_1B = 0;
}
}
-void sub_80175EC(struct UnkStruct_Main4 *arg0, u8 count)
+static void ClearUnkStruct_x1CArray(struct UnkStruct_Main4 *main4, u8 count)
{
s32 i;
- for (i = 0; i < 4; i++)
+ for (i = 0; i < RFU_CHILD_MAX; i++)
{
- arg0->arr[i].unk0 = gUnknown_082F045C;
- arg0->arr[i].unk18 = 0;
+ main4->arr[i].gname_uname = sWirelessGnameUnamePair_Dummy;
+ main4->arr[i].active = FALSE;
}
}
-bool8 sub_8017630(struct UnkStruct_Shared* arg0, const struct UnkStruct_Shared* arg1)
+static bool8 AreGnameUnameDifferent(struct WirelessGnameUnamePair* pair1, const struct WirelessGnameUnamePair* pair2)
{
s32 i;
for (i = 0; i < 2; i++)
{
- if (arg0->field_0.unk_00.playerTrainerId[i] != arg1->field_0.unk_00.playerTrainerId[i])
+ if (pair1->gname.unk_00.playerTrainerId[i] != pair2->gname.unk_00.playerTrainerId[i])
{
return TRUE;
}
}
- for (i = 0; i < 8; i++)
+ for (i = 0; i < PLAYER_NAME_LENGTH + 1; i++)
{
- if (arg0->playerName[i] != arg1->playerName[i])
+ if (pair1->playerName[i] != pair2->playerName[i])
{
return TRUE;
}
@@ -3694,34 +3861,34 @@ bool8 sub_8017630(struct UnkStruct_Shared* arg0, const struct UnkStruct_Shared*
return FALSE;
}
-bool32 sub_8017678(struct UnkStruct_Shared *arg0, struct UnkStruct_Shared *arg1)
+static bool32 AreUnionRoomPlayerGnamesDifferent(struct WirelessGnameUnamePair *pair1, struct WirelessGnameUnamePair *pair2)
{
s32 i;
- if (arg0->field_0.activity != arg1->field_0.activity)
+ if (pair1->gname.activity != pair2->gname.activity)
{
return TRUE;
}
- if (arg0->field_0.started != arg1->field_0.started)
+ if (pair1->gname.started != pair2->gname.started)
{
return TRUE;
}
- for (i = 0; i < 4; i++)
+ for (i = 0; i < RFU_CHILD_MAX; i++)
{
- if (arg0->field_0.child_sprite_gender[i] != arg1->field_0.child_sprite_gender[i])
+ if (pair1->gname.child_sprite_gender[i] != pair2->gname.child_sprite_gender[i])
{
return TRUE;
}
}
- if (arg0->field_0.species != arg1->field_0.species)
+ if (pair1->gname.species != pair2->gname.species)
{
return TRUE;
}
- if (arg0->field_0.type != arg1->field_0.type)
+ if (pair1->gname.type != pair2->gname.type)
{
return TRUE;
}
@@ -3729,38 +3896,38 @@ bool32 sub_8017678(struct UnkStruct_Shared *arg0, struct UnkStruct_Shared *arg1)
return FALSE;
}
-u32 sub_80176E4(struct UnkStruct_x20 *arg0, struct UnkStruct_x1C *arg1)
+static u32 Findx20Inx1CArray(struct UnkStruct_x20 *arg0, struct UnkStruct_x1C *arg1)
{
u8 result = 0xFF;
s32 i;
- for (i = 0; i < 4; i++)
+ for (i = 0; i < RFU_CHILD_MAX; i++)
{
- if (arg1[i].unk18 && !sub_8017630(&arg0->unk, &arg1[i].unk0))
+ if (arg1[i].active && !AreGnameUnameDifferent(&arg0->gname_uname, &arg1[i].gname_uname))
{
result = i;
- arg1[i].unk18 = FALSE;
+ arg1[i].active = FALSE;
}
}
return result;
}
-u8 sub_8017734(struct UnkStruct_x20 *arg0, struct UnkStruct_x1C *arg1, u8 arg2)
+static u8 Appendx1Ctox20(struct UnkStruct_x20 *arg0, struct UnkStruct_x1C *arg1, u8 max)
{
s32 i;
- if (arg1->unk18)
+ if (arg1->active)
{
- for (i = 0; i < arg2; i++)
+ for (i = 0; i < max; i++)
{
- if (arg0[i].field_1A_0 == 0)
+ if (arg0[i].groupScheduledAnim == UNION_ROOM_SPAWN_NONE)
{
- arg0[i].unk = arg1->unk0;
- arg0[i].field_18 = 0;
- arg0[i].field_1A_0 = 1;
+ arg0[i].gname_uname = arg1->gname_uname;
+ arg0[i].timeoutCounter = 0;
+ arg0[i].groupScheduledAnim = UNION_ROOM_SPAWN_IN;
arg0[i].field_1B = 64;
- arg1->unk18 = FALSE;
+ arg1->active = FALSE;
return i;
}
}
@@ -3769,126 +3936,123 @@ u8 sub_8017734(struct UnkStruct_x20 *arg0, struct UnkStruct_x1C *arg1, u8 arg2)
return 0xFF;
}
-void sub_80177B8(u8 arg0, u8 arg1, u8 arg2, struct UnkStruct_x20 *arg3, u8 arg4, u8 id)
+static void PrintUnionRoomGroupOnWindow(u8 windowId, u8 x, u8 y, struct UnkStruct_x20 *group, u8 colorIdx, u8 id)
{
- u8 r2;
- u8 sp0[6];
+ u8 activity;
+ u8 trainerId[6];
ConvertIntToDecimalStringN(gStringVar4, id + 1, STR_CONV_MODE_LEADING_ZEROS, 2);
StringAppend(gStringVar4, sText_Colon);
- sub_80173E0(arg0, 1, gStringVar4, arg1, arg2, 0);
- arg1 += 18;
- r2 = arg3->unk.field_0.activity;
- if (arg3->field_1A_0 == 1 && !(r2 & 0x40))
+ UR_AddTextPrinterParameterized(windowId, 1, gStringVar4, x, y, 0);
+ x += 18;
+ activity = group->gname_uname.gname.activity;
+ if (group->groupScheduledAnim == UNION_ROOM_SPAWN_IN && !(activity & IN_UNION_ROOM))
{
- sub_8018404(gStringVar4, arg3);
- sub_80173E0(arg0, 1, gStringVar4, arg1, arg2, arg4);
- ConvertIntToDecimalStringN(sp0, arg3->unk.field_0.unk_00.playerTrainerId[0] | (arg3->unk.field_0.unk_00.playerTrainerId[1] << 8), STR_CONV_MODE_LEADING_ZEROS, 5);
+ IntlConvPartnerUname7(gStringVar4, group);
+ UR_AddTextPrinterParameterized(windowId, 1, gStringVar4, x, y, colorIdx);
+ ConvertIntToDecimalStringN(trainerId, group->gname_uname.gname.unk_00.playerTrainerId[0] | (group->gname_uname.gname.unk_00.playerTrainerId[1] << 8), STR_CONV_MODE_LEADING_ZEROS, 5);
StringCopy(gStringVar4, sText_ID);
- StringAppend(gStringVar4, sp0);
- sub_80173E0(arg0, 1, gStringVar4, GetStringRightAlignXOffset(1, gStringVar4, 0x88), arg2, arg4);
+ StringAppend(gStringVar4, trainerId);
+ UR_AddTextPrinterParameterized(windowId, 1, gStringVar4, GetStringRightAlignXOffset(1, gStringVar4, 0x88), y, colorIdx);
}
}
-void sub_80178A0(u8 arg0, u8 arg1, u8 arg2, struct UnkStruct_x20 *arg3, u8 arg4, u8 id)
+static void PrintGroupMemberCandidateOnWindowWithColor(u8 windowId, u8 x, u8 y, struct UnkStruct_x20 *group, u8 colorIdx, u8 id)
{
- u8 sp0[6];
+ u8 trainerId[6];
- if (arg3->field_1A_0 == 1)
+ if (group->groupScheduledAnim == UNION_ROOM_SPAWN_IN)
{
- sub_8018404(gStringVar4, arg3);
- sub_80173E0(arg0, 1, gStringVar4, arg1, arg2, arg4);
- ConvertIntToDecimalStringN(sp0, arg3->unk.field_0.unk_00.playerTrainerId[0] | (arg3->unk.field_0.unk_00.playerTrainerId[1] << 8), STR_CONV_MODE_LEADING_ZEROS, 5);
+ IntlConvPartnerUname7(gStringVar4, group);
+ UR_AddTextPrinterParameterized(windowId, 1, gStringVar4, x, y, colorIdx);
+ ConvertIntToDecimalStringN(trainerId, group->gname_uname.gname.unk_00.playerTrainerId[0] | (group->gname_uname.gname.unk_00.playerTrainerId[1] << 8), STR_CONV_MODE_LEADING_ZEROS, 5);
StringCopy(gStringVar4, sText_ID);
- StringAppend(gStringVar4, sp0);
- sub_80173E0(arg0, 1, gStringVar4, GetStringRightAlignXOffset(1, gStringVar4, 0x68), arg2, arg4);
+ StringAppend(gStringVar4, trainerId);
+ UR_AddTextPrinterParameterized(windowId, 1, gStringVar4, GetStringRightAlignXOffset(1, gStringVar4, 0x68), y, colorIdx);
}
}
-bool32 sub_8017940(void)
+static bool32 IsPlayerFacingTradingBoard(void)
{
s16 x, y;
GetXYCoordsOneStepInFrontOfPlayer(&x, &y);
- if (x != 9)
- {
+
+ if (x != 2 + 7)
return FALSE;
- }
- if (y != 8)
- {
+
+ if (y != 1 + 7)
return FALSE;
- }
- if (gPlayerAvatar.tileTransitionState == 2 || gPlayerAvatar.tileTransitionState == 0)
- {
+
+ if (gPlayerAvatar.tileTransitionState == T_TILE_CENTER || gPlayerAvatar.tileTransitionState == T_NOT_MOVING)
return TRUE;
- }
return FALSE;
}
-u32 sub_8017984(s32 arg0)
+static u32 GetResponseIdx_InviteToURoomActivity(s32 activity)
{
- switch (arg0)
+ switch (activity)
{
- case 5:
+ case ACTIVITY_CHAT:
return 1;
- case 4:
+ case ACTIVITY_TRADE:
return 2;
- case 8:
+ case ACTIVITY_CARD:
return 3;
- case 3:
+ case ACTIVITY_BATTLE_MULTI:
default:
return 0;
}
}
-u32 sub_80179AC(struct UnkStruct_x20 *arg0)
+static u32 ConvPartnerUnameAndGetWhetherMetAlready(struct UnkStruct_x20 *arg0)
{
- u8 sp0[30];
- sub_8018404(sp0, arg0);
- return sub_800E540(ReadAsU16(arg0->unk.field_0.unk_00.playerTrainerId), sp0);
+ u8 name[30];
+ IntlConvPartnerUname7(name, arg0);
+ return PlayerHasMetTrainerBefore(ReadAsU16(arg0->gname_uname.gname.unk_00.playerTrainerId), name);
}
-s32 sub_80179D4(struct UnkStruct_Main0 *arg0, u8 arg1, u8 arg2, u32 playerGender)
+static s32 UnionRoomGetPlayerInteractionResponse(struct UnkStruct_Main0 *main0, bool8 overrideGender, u8 playerIdx, u32 playerGender)
{
- bool32 r2;
+ bool32 metBefore;
- struct UnkStruct_x20 * r5 = &arg0->arr[arg2];
+ struct UnkStruct_x20 * r5 = &main0->arr[playerIdx];
- if (!r5->unk.field_0.started && arg1 == 0)
+ if (!r5->gname_uname.gname.started && !overrideGender)
{
- sub_8018404(gStringVar1, r5);
- r2 = sub_800E540(ReadAsU16(r5->unk.field_0.unk_00.playerTrainerId), gStringVar1);
- if (r5->unk.field_0.activity == 0x45)
+ IntlConvPartnerUname7(gStringVar1, r5);
+ metBefore = PlayerHasMetTrainerBefore(ReadAsU16(r5->gname_uname.gname.unk_00.playerTrainerId), gStringVar1);
+ if (r5->gname_uname.gname.activity == (ACTIVITY_CHAT | IN_UNION_ROOM))
{
- StringExpandPlaceholders(gStringVar4, sJoinChatTexts[r2][playerGender]);
+ StringExpandPlaceholders(gStringVar4, sJoinChatTexts[metBefore][playerGender]);
return 2;
}
else
{
- sub_8017020(sCommunicatingWaitTexts[r2]);
+ UR_PrintFieldMessage(sCommunicatingWaitTexts[metBefore]);
return 1;
}
}
else
{
- sub_8018404(gStringVar1, r5);
- if (arg1 != 0)
+ IntlConvPartnerUname7(gStringVar1, r5);
+ if (overrideGender)
{
- playerGender = (r5->unk.field_0.unk_00.playerTrainerId[arg1 + 1] >> 3) & 1;
+ playerGender = (r5->gname_uname.gname.unk_00.playerTrainerId[overrideGender + 1] >> 3) & 1;
}
- switch (r5->unk.field_0.activity & 0x3F)
+ switch (r5->gname_uname.gname.activity & 0x3F)
{
- case 1:
- StringExpandPlaceholders(gStringVar4, sBattleReactionTexts[playerGender][Random() % 4]);
+ case ACTIVITY_BATTLE_SINGLE:
+ StringExpandPlaceholders(gStringVar4, sBattleReactionTexts[playerGender][Random() % ARRAY_COUNT(sBattleReactionTexts[0])]);
break;
- case 4:
+ case ACTIVITY_TRADE:
StringExpandPlaceholders(gStringVar4, sTradeReactionTexts[playerGender][Random() % 2]);
break;
- case 5:
- StringExpandPlaceholders(gStringVar4, sChatReactionTexts[playerGender][Random() % 4]);
+ case ACTIVITY_CHAT:
+ StringExpandPlaceholders(gStringVar4, sChatReactionTexts[playerGender][Random() % ARRAY_COUNT(sChatReactionTexts[0])]);
break;
- case 8:
- StringExpandPlaceholders(gStringVar4, sTrainerCardReactionTexts[playerGender][Random() % 2]);
+ case ACTIVITY_CARD:
+ StringExpandPlaceholders(gStringVar4, sTrainerCardReactionTexts[playerGender][Random() % ARRAY_COUNT(sTrainerCardReactionTexts[0])]);
break;
default:
StringExpandPlaceholders(gStringVar4, sText_TrainerAppearsBusy);
@@ -3903,73 +4067,73 @@ void nullsub_14(u8 windowId, s32 itemId, u8 y)
}
-void sub_8017B3C(u8 arg0, u8 arg1, struct GFtgtGname * arg2, const u8 * str, u8 arg4)
+static void TradeBoardPrintItemInfo(u8 windowId, u8 y, struct GFtgtGname * gname, const u8 * uname, u8 colorIdx)
{
- u8 sp8[4];
- u16 r8 = arg2->species;
- u8 r7 = arg2->type;
- u8 r9 = arg2->level;
+ u8 levelStr[4];
+ u16 species = gname->species;
+ u8 type = gname->type;
+ u8 level = gname->level;
- sub_80173E0(arg0, 1, str, 8, arg1, arg4);
- if (r8 == SPECIES_EGG)
+ UR_AddTextPrinterParameterized(windowId, 1, uname, 8, y, colorIdx);
+ if (species == SPECIES_EGG)
{
- sub_80173E0(arg0, 1, sText_EggTrade, 0x44, arg1, arg4);
+ UR_AddTextPrinterParameterized(windowId, 1, sText_EggTrade, 0x44, y, colorIdx);
}
else
{
- blit_move_info_icon(arg0, r7 + 1, 0x44, arg1);
- sub_80173E0(arg0, 1, gSpeciesNames[r8], 0x76, arg1, arg4);
- ConvertIntToDecimalStringN(sp8, r9, STR_CONV_MODE_RIGHT_ALIGN, 3);
- sub_80173E0(arg0, 1, sp8, 0xC6, arg1, arg4);
+ blit_move_info_icon(windowId, type + 1, 0x44, y);
+ UR_AddTextPrinterParameterized(windowId, 1, gSpeciesNames[species], 0x76, y, colorIdx);
+ ConvertIntToDecimalStringN(levelStr, level, STR_CONV_MODE_RIGHT_ALIGN, 3);
+ UR_AddTextPrinterParameterized(windowId, 1, levelStr, 0xC6, y, colorIdx);
}
}
-void sub_8017BE8(u8 windowId, s32 itemId, u8 y)
+static void TradeBoardListMenuItemPrintFunc(u8 windowId, s32 itemId, u8 y)
{
- struct UnkStruct_Leader *leader = gUnknown_02022C30.leader;
+ struct WirelessLink_Leader *data = sWirelessLinkMain.leader;
struct GFtgtGname *rfu;
s32 i, j;
- u8 sp4[11];
+ u8 playerName[11];
- if (itemId == -3 && y == gUnknown_082F03A4.upText_Y)
+ if (itemId == -3 && y == sTradeBoardListMenuTemplate.upText_Y)
{
- rfu = sub_800F7DC();
+ rfu = GetHostRFUtgtGname();
if (rfu->species != SPECIES_NONE)
{
- sub_8017B3C(windowId, y, rfu, gSaveBlock2Ptr->playerName, 5);
+ TradeBoardPrintItemInfo(windowId, y, rfu, gSaveBlock2Ptr->playerName, 5);
}
}
else
{
j = 0;
- for (i = 0; i < 8; i++)
+ for (i = 0; i < (int)ARRAY_COUNT(data->field_0->arr); i++)
{
- if (leader->field_0->arr[i].field_1A_0 == 1 && leader->field_0->arr[i].unk.field_0.species != SPECIES_NONE)
+ if (data->field_0->arr[i].groupScheduledAnim == UNION_ROOM_SPAWN_IN && data->field_0->arr[i].gname_uname.gname.species != SPECIES_NONE)
{
j++;
}
if (j == itemId + 1)
{
- sub_8018404(sp4, &leader->field_0->arr[i]);
- sub_8017B3C(windowId, y, &leader->field_0->arr[i].unk.field_0, sp4, 6);
+ IntlConvPartnerUname7(playerName, &data->field_0->arr[i]);
+ TradeBoardPrintItemInfo(windowId, y, &data->field_0->arr[i].gname_uname.gname, playerName, 6);
break;
}
}
}
}
-s32 sub_8017CB0(struct UnkStruct_x20 * arg, s32 arg1)
+static s32 GetIndexOfNthTradeBoardOffer(struct UnkStruct_x20 * arg, s32 n)
{
s32 i;
s32 j = 0;
for (i = 0; i < 8; i++)
{
- if (arg[i].field_1A_0 == 1 && arg[i].unk.field_0.species != SPECIES_NONE)
+ if (arg[i].groupScheduledAnim == UNION_ROOM_SPAWN_IN && arg[i].gname_uname.gname.species != SPECIES_NONE)
{
j++;
}
- if (j == arg1 + 1)
+ if (j == n + 1)
{
return i;
}
@@ -3978,12 +4142,12 @@ s32 sub_8017CB0(struct UnkStruct_x20 * arg, s32 arg1)
return -1;
}
-s32 sub_8017CF8(s32 arg1, struct UnkStruct_Main0 *arg0)
+static s32 GetUnionRoomPlayerGender(s32 playerIdx, struct UnkStruct_Main0 *main0)
{
- return arg0->arr[arg1].unk.field_0.playerGender;
+ return main0->arr[playerIdx].gname_uname.gname.playerGender;
}
-s32 sub_8017D04(u32 type, u32 species)
+static s32 IsRequestedTypeOrEggInPlayerParty(u32 type, u32 species)
{
s32 i;
@@ -3994,10 +4158,10 @@ s32 sub_8017D04(u32 type, u32 species)
species = GetMonData(&gPlayerParty[i], MON_DATA_SPECIES2);
if (species == SPECIES_EGG)
{
- return 0;
+ return UR_TRADE_MATCH;
}
}
- return 2;
+ return UR_TRADE_NOEGG;
}
else
{
@@ -4006,77 +4170,77 @@ s32 sub_8017D04(u32 type, u32 species)
species = GetMonData(&gPlayerParty[i], MON_DATA_SPECIES2);
if (gBaseStats[species].type1 == type || gBaseStats[species].type2 == type)
{
- return 0;
+ return UR_TRADE_MATCH;
}
}
- return 1;
+ return UR_TRADE_NOTYPE;
}
}
-void sub_8017D9C(u8 *dst, s32 arg1, u32 playerGender)
+static void GetURoomActivityRejectMsg(u8 *dst, s32 acitivty, u32 playerGender)
{
- switch (arg1)
+ switch (acitivty)
{
- case 0x41:
+ case ACTIVITY_BATTLE_SINGLE | IN_UNION_ROOM:
StringExpandPlaceholders(dst, sBattleDeclinedTexts[playerGender]);
break;
- case 0x45:
+ case ACTIVITY_CHAT | IN_UNION_ROOM:
StringExpandPlaceholders(dst, sChatDeclinedTexts[playerGender]);
break;
- case 0x44:
+ case ACTIVITY_TRADE | IN_UNION_ROOM:
StringExpandPlaceholders(dst, sText_TradeOfferRejected);
break;
- case 0x48:
+ case ACTIVITY_CARD | IN_UNION_ROOM:
StringExpandPlaceholders(dst, sShowTrainerCardDeclinedTexts[playerGender]);
break;
}
}
-void sub_8017E00(u8 *dst, u8 arg1)
+static void GetURoomActivityStartMsg(u8 *dst, u8 acitivty)
{
u8 mpId = GetMultiplayerId();
u8 gender = gLinkPlayers[mpId ^ 1].gender;
- switch (arg1)
+ switch (acitivty)
{
- case 0x41:
+ case ACTIVITY_BATTLE_SINGLE | IN_UNION_ROOM:
StringCopy(dst, sStartActivityTexts[mpId][gender][0]);
break;
- case 0x44:
+ case ACTIVITY_TRADE | IN_UNION_ROOM:
StringCopy(dst, sStartActivityTexts[mpId][gender][2]);
break;
- case 0x45:
+ case ACTIVITY_CHAT | IN_UNION_ROOM:
StringCopy(dst, sStartActivityTexts[mpId][gender][1]);
break;
}
}
-s32 sub_8017EA0(u8 *dst, u32 gender, u16 *arg2, struct UnkStruct_URoom *arg3)
+static s32 GetChatLeaderActionRequestMessage(u8 *dst, u32 gender, u16 *activityData, struct WirelessLink_URoom *uroom)
{
s32 result = 0;
u16 species = SPECIES_NONE;
s32 i;
- switch (arg2[0])
+ switch (activityData[0])
{
- case 0x41:
+ case ACTIVITY_BATTLE_SINGLE | IN_UNION_ROOM:
StringExpandPlaceholders(dst, sText_BattleChallenge);
result = 1;
break;
- case 0x45:
+ case ACTIVITY_CHAT | IN_UNION_ROOM:
StringExpandPlaceholders(dst, sText_ChatInvitation);
result = 1;
break;
- case 0x44:
- ConvertIntToDecimalStringN(arg3->field_58 + 0x00, sUnionRoomTrade.playerLevel, STR_CONV_MODE_LEFT_ALIGN, 3);
- StringCopy(arg3->field_58 + 0x10, gSpeciesNames[sUnionRoomTrade.playerSpecies]);
- for (i = 0; i < 4; i++)
+ case ACTIVITY_TRADE | IN_UNION_ROOM:
+ ConvertIntToDecimalStringN(uroom->activityRequestStrbufs[0], sUnionRoomTrade.playerLevel, STR_CONV_MODE_LEFT_ALIGN, 3);
+ StringCopy(uroom->activityRequestStrbufs[1], gSpeciesNames[sUnionRoomTrade.playerSpecies]);
+ for (i = 0; i < RFU_CHILD_MAX; i++)
{
if (gRfuLinkStatus->partner[i].serialNo == 2)
{
- ConvertIntToDecimalStringN(arg3->field_58 + 0x20, arg2[2], STR_CONV_MODE_LEFT_ALIGN, 3);
- StringCopy(arg3->field_58 + 0x30, gSpeciesNames[arg2[1]]);
- species = arg2[1];
+ ConvertIntToDecimalStringN(uroom->activityRequestStrbufs[2], activityData[2], STR_CONV_MODE_LEFT_ALIGN, 3);
+ StringCopy(uroom->activityRequestStrbufs[3], gSpeciesNames[activityData[1]]);
+ species = activityData[1];
break;
}
}
@@ -4086,19 +4250,19 @@ s32 sub_8017EA0(u8 *dst, u32 gender, u16 *arg2, struct UnkStruct_URoom *arg3)
}
else
{
- for (i = 0; i < 4; i++)
+ for (i = 0; i < RFU_CHILD_MAX; i++)
{
- DynamicPlaceholderTextUtil_SetPlaceholderPtr(i, arg3->field_58 + 0x10 * i);
+ DynamicPlaceholderTextUtil_SetPlaceholderPtr(i, uroom->activityRequestStrbufs[i]);
}
DynamicPlaceholderTextUtil_ExpandPlaceholders(dst, sText_OfferToTradeMon);
}
result = 1;
break;
- case 0x48:
+ case ACTIVITY_CARD | IN_UNION_ROOM:
StringExpandPlaceholders(dst, sText_ShowTrainerCard);
result = 1;
break;
- case 0x40:
+ case ACTIVITY_NONE | IN_UNION_ROOM:
StringExpandPlaceholders(dst, sText_ChatDropped);
result = 2;
break;
@@ -4107,18 +4271,18 @@ s32 sub_8017EA0(u8 *dst, u32 gender, u16 *arg2, struct UnkStruct_URoom *arg3)
return result;
}
-bool32 sub_8017FD8(struct UnkStruct_URoom *arg0)
+static bool32 PollPartnerYesNoResponse(struct WirelessLink_URoom *data)
{
if (gRecvCmds[0][1] != 0)
{
- if (gRecvCmds[0][1] == 0x51)
+ if (gRecvCmds[0][1] == (ACTIVITY_ACCEPT | IN_UNION_ROOM))
{
- arg0->field_98 = 0x51;
+ data->partnerYesNoResponse = ACTIVITY_ACCEPT | IN_UNION_ROOM;
return TRUE;
}
- else if (gRecvCmds[0][1] == 0x52)
+ else if (gRecvCmds[0][1] == (ACTIVITY_DECLINE | IN_UNION_ROOM))
{
- arg0->field_98 = 0x52;
+ data->partnerYesNoResponse = ACTIVITY_DECLINE | IN_UNION_ROOM;
return TRUE;
}
}
@@ -4132,7 +4296,7 @@ bool32 InUnionRoom(void)
? TRUE : FALSE;
}
-bool32 HasAtLeastTwoMonsOfLevel30OrLower(void)
+static bool32 HasAtLeastTwoMonsOfLevel30OrLower(void)
{
s32 i;
s32 count = 0;
@@ -4152,16 +4316,16 @@ bool32 HasAtLeastTwoMonsOfLevel30OrLower(void)
return FALSE;
}
-static void ResetUnionRoomTrade(struct UnionRoomTrade *arg0)
+static void ResetUnionRoomTrade(struct UnionRoomTrade *uroomTrade)
{
- arg0->field_0 = 0;
- arg0->type = 0;
- arg0->playerPersonality = 0;
- arg0->playerSpecies = 0;
- arg0->playerLevel = 0;
- arg0->species = 0;
- arg0->level = 0;
- arg0->personality = 0;
+ uroomTrade->state = URTRADE_STATE_NONE;
+ uroomTrade->type = 0;
+ uroomTrade->playerPersonality = 0;
+ uroomTrade->playerSpecies = 0;
+ uroomTrade->playerLevel = 0;
+ uroomTrade->species = 0;
+ uroomTrade->level = 0;
+ uroomTrade->personality = 0;
}
void Script_ResetUnionRoomTrade(void)
@@ -4228,36 +4392,36 @@ static u32 GetPartyPositionOfRegisteredMon(struct UnionRoomTrade *trade, u8 mult
return response;
}
-void sub_801818C(bool32 arg0)
+static void HandleCancelActivity(bool32 setData)
{
- sub_80173B0();
+ UR_ClearBg0();
ScriptContext2_Disable();
- sub_8098524();
- gUnknown_02022C2C = 0;
- if (arg0)
+ UnionRoom_UnlockPlayerAndChatPartner();
+ gPlayerCurrActivity = ACTIVITY_NONE;
+ if (setData)
{
- sub_8010FCC(sUnionRoomTrade.type, sUnionRoomTrade.playerSpecies, sUnionRoomTrade.playerLevel);
- sub_8011090(0x40, 0, 0);
+ SetTradeBoardRegisteredMonInfo(sUnionRoomTrade.type, sUnionRoomTrade.playerSpecies, sUnionRoomTrade.playerLevel);
+ UpdateGameData_SetActivity(ACTIVITY_NONE | IN_UNION_ROOM, 0, FALSE);
}
}
-void sub_80181CC(void)
+static void UR_EnableScriptContext2AndFreezeObjectEvents(void)
{
ScriptContext2_Enable();
ScriptFreezeObjectEvents();
}
-u8 sub_80181DC(struct UnkStruct_URoom *arg0)
+static u8 GetActivePartnerSpriteGenderParam(struct WirelessLink_URoom *data)
{
u8 retVal = 0x80;
u8 i;
- for (i = 0; i < 4; i++)
+ for (i = 0; i < RFU_CHILD_MAX; i++)
{
- if (arg0->field_C->arr[i].unk18)
+ if (data->field_C->arr[i].active)
{
- retVal |= arg0->field_C->arr[i].unk0.field_0.playerGender << 3;
- retVal |= arg0->field_C->arr[i].unk0.field_0.unk_00.playerTrainerId[0] & 7;
+ retVal |= data->field_C->arr[i].gname_uname.gname.playerGender << 3;
+ retVal |= data->field_C->arr[i].gname_uname.gname.unk_00.playerTrainerId[0] & 7;
break;
}
}
@@ -4265,7 +4429,7 @@ u8 sub_80181DC(struct UnkStruct_URoom *arg0)
return retVal;
}
-void sub_8018220(u8 *unused, struct UnkStruct_URoom *arg1, bool8 arg2)
+static void ViewURoomPartnerTrainerCard(u8 *unused, struct WirelessLink_URoom *data, bool8 isParent)
{
struct TrainerCard *trainerCard = &gTrainerCards[GetMultiplayerId() ^ 1];
s32 i;
@@ -4273,67 +4437,67 @@ void sub_8018220(u8 *unused, struct UnkStruct_URoom *arg1, bool8 arg2)
DynamicPlaceholderTextUtil_Reset();
- StringCopy(arg1->field_C0[0], gTrainerClassNames[sub_8068BB0()]);
- DynamicPlaceholderTextUtil_SetPlaceholderPtr(0, arg1->field_C0[0]);
+ StringCopy(data->trainerCardStrBuffer[0], gTrainerClassNames[GetUnionRoomTrainerClass()]);
+ DynamicPlaceholderTextUtil_SetPlaceholderPtr(0, data->trainerCardStrBuffer[0]);
DynamicPlaceholderTextUtil_SetPlaceholderPtr(1, trainerCard->playerName);
- StringCopy(arg1->field_174, sCardColorTexts[trainerCard->stars]);
- DynamicPlaceholderTextUtil_SetPlaceholderPtr(2, arg1->field_174);
+ StringCopy(data->trainerCardColorStrBuffer, sCardColorTexts[trainerCard->stars]);
+ DynamicPlaceholderTextUtil_SetPlaceholderPtr(2, data->trainerCardColorStrBuffer);
- ConvertIntToDecimalStringN(arg1->field_C0[2], trainerCard->caughtMonsCount, STR_CONV_MODE_LEFT_ALIGN, 3);
- DynamicPlaceholderTextUtil_SetPlaceholderPtr(3, arg1->field_C0[2]);
+ ConvertIntToDecimalStringN(data->trainerCardStrBuffer[2], trainerCard->caughtMonsCount, STR_CONV_MODE_LEFT_ALIGN, 3);
+ DynamicPlaceholderTextUtil_SetPlaceholderPtr(3, data->trainerCardStrBuffer[2]);
- ConvertIntToDecimalStringN(arg1->field_C0[3], trainerCard->playTimeHours, STR_CONV_MODE_LEFT_ALIGN, 3);
- ConvertIntToDecimalStringN(arg1->field_C0[4], trainerCard->playTimeMinutes, STR_CONV_MODE_LEADING_ZEROS, 2);
- DynamicPlaceholderTextUtil_SetPlaceholderPtr(4, arg1->field_C0[3]);
- DynamicPlaceholderTextUtil_SetPlaceholderPtr(5, arg1->field_C0[4]);
+ ConvertIntToDecimalStringN(data->trainerCardStrBuffer[3], trainerCard->playTimeHours, STR_CONV_MODE_LEFT_ALIGN, 3);
+ ConvertIntToDecimalStringN(data->trainerCardStrBuffer[4], trainerCard->playTimeMinutes, STR_CONV_MODE_LEADING_ZEROS, 2);
+ DynamicPlaceholderTextUtil_SetPlaceholderPtr(4, data->trainerCardStrBuffer[3]);
+ DynamicPlaceholderTextUtil_SetPlaceholderPtr(5, data->trainerCardStrBuffer[4]);
- DynamicPlaceholderTextUtil_ExpandPlaceholders(arg1->field_1A4, sText_TrainerCardInfoPage1);
- StringCopy(gStringVar4, arg1->field_1A4);
+ DynamicPlaceholderTextUtil_ExpandPlaceholders(data->trainerCardMsgStrBuffer, sText_TrainerCardInfoPage1);
+ StringCopy(gStringVar4, data->trainerCardMsgStrBuffer);
n = trainerCard->linkBattleWins;
if (n > 9999)
{
n = 9999;
}
- ConvertIntToDecimalStringN(arg1->field_C0[0], n, STR_CONV_MODE_LEFT_ALIGN, 4);
- DynamicPlaceholderTextUtil_SetPlaceholderPtr(0, arg1->field_C0[0]);
+ ConvertIntToDecimalStringN(data->trainerCardStrBuffer[0], n, STR_CONV_MODE_LEFT_ALIGN, 4);
+ DynamicPlaceholderTextUtil_SetPlaceholderPtr(0, data->trainerCardStrBuffer[0]);
n = trainerCard->linkBattleLosses;
if (n > 9999)
{
n = 9999;
}
- ConvertIntToDecimalStringN(arg1->field_C0[1], n, STR_CONV_MODE_LEFT_ALIGN, 4);
- DynamicPlaceholderTextUtil_SetPlaceholderPtr(2, arg1->field_C0[1]);
+ ConvertIntToDecimalStringN(data->trainerCardStrBuffer[1], n, STR_CONV_MODE_LEFT_ALIGN, 4);
+ DynamicPlaceholderTextUtil_SetPlaceholderPtr(2, data->trainerCardStrBuffer[1]);
- ConvertIntToDecimalStringN(arg1->field_C0[2], trainerCard->pokemonTrades, STR_CONV_MODE_LEFT_ALIGN, 5);
- DynamicPlaceholderTextUtil_SetPlaceholderPtr(3, arg1->field_C0[2]);
+ ConvertIntToDecimalStringN(data->trainerCardStrBuffer[2], trainerCard->pokemonTrades, STR_CONV_MODE_LEFT_ALIGN, 5);
+ DynamicPlaceholderTextUtil_SetPlaceholderPtr(3, data->trainerCardStrBuffer[2]);
for (i = 0; i < TRAINER_CARD_PROFILE_LENGTH; i++)
{
- CopyEasyChatWord(arg1->field_C0[i + 3], trainerCard->easyChatProfile[i]);
- DynamicPlaceholderTextUtil_SetPlaceholderPtr(i + 4, arg1->field_C0[i + 3]);
+ CopyEasyChatWord(data->trainerCardStrBuffer[i + 3], trainerCard->easyChatProfile[i]);
+ DynamicPlaceholderTextUtil_SetPlaceholderPtr(i + 4, data->trainerCardStrBuffer[i + 3]);
}
- DynamicPlaceholderTextUtil_ExpandPlaceholders(arg1->field_1A4, sText_TrainerCardInfoPage2);
- StringAppend(gStringVar4, arg1->field_1A4);
+ DynamicPlaceholderTextUtil_ExpandPlaceholders(data->trainerCardMsgStrBuffer, sText_TrainerCardInfoPage2);
+ StringAppend(gStringVar4, data->trainerCardMsgStrBuffer);
- if (arg2 == TRUE)
+ if (isParent == TRUE)
{
- DynamicPlaceholderTextUtil_ExpandPlaceholders(arg1->field_1A4, sText_FinishedCheckingPlayersTrainerCard);
- StringAppend(gStringVar4, arg1->field_1A4);
+ DynamicPlaceholderTextUtil_ExpandPlaceholders(data->trainerCardMsgStrBuffer, sText_FinishedCheckingPlayersTrainerCard);
+ StringAppend(gStringVar4, data->trainerCardMsgStrBuffer);
}
- else if (arg2 == FALSE)
+ else if (isParent == FALSE)
{
- DynamicPlaceholderTextUtil_ExpandPlaceholders(arg1->field_1A4, sGladToMeetYouTexts[trainerCard->gender]);
- StringAppend(gStringVar4, arg1->field_1A4);
+ DynamicPlaceholderTextUtil_ExpandPlaceholders(data->trainerCardMsgStrBuffer, sGladToMeetYouTexts[trainerCard->gender]);
+ StringAppend(gStringVar4, data->trainerCardMsgStrBuffer);
}
}
-void sub_8018404(u8 *dest, struct UnkStruct_x20 *arg1)
+static void IntlConvPartnerUname7(u8 *dest, struct UnkStruct_x20 *arg1)
{
- StringCopy7(dest, arg1->unk.playerName);
- ConvertInternationalString(dest, arg1->unk.field_0.unk_00.language);
+ StringCopy7(dest, arg1->gname_uname.playerName);
+ ConvertInternationalString(dest, arg1->gname_uname.gname.unk_00.language);
}
diff --git a/src/union_room_battle.c b/src/union_room_battle.c
index 18dd7c320..b9ddd74a7 100644
--- a/src/union_room_battle.c
+++ b/src/union_room_battle.c
@@ -11,134 +11,24 @@
#include "window.h"
#include "text_window.h"
#include "scanline_effect.h"
-#include "m4a.h"
-#include "dynamic_placeholder_text_util.h"
#include "overworld.h"
#include "strings.h"
-#include "string_util.h"
-#include "international_string_util.h"
-#include "sound.h"
-#include "constants/songs.h"
#include "party_menu.h"
#include "battle_setup.h"
#include "link.h"
#include "union_room.h"
#include "union_room_battle.h"
+#include "constants/rgb.h"
+#include "constants/trainers.h"
-struct UnkStruct_3000DAC
+struct UnionRoomBattle
{
- /*0x00*/ u32 unk00[4];
- /*0x10*/ u32 unk10[4];
- /*0x20*/ u32 unk20[16];
- /*0x60*/ u8 taskId;
- /*0x61*/ u8 unk61;
- /*0x62*/ u8 filler_62[10];
+ s16 textState;
};
-struct UnkStruct_2022C6C
-{
- s16 a0;
-};
-
-static struct UnkStruct_3000DAC * gUnknown_03000DAC;
-
-EWRAM_DATA struct UnkStruct_2022C6C * gUnknown_02022C6C = NULL;
-
-void sub_801A43C(void);
-void sub_801A6C0(u8 taskId);
-static void sub_801A8B0(u8 windowId, u8 fontId, const u8 * str, u8 x, u8 y, u8 mode);
-bool32 sub_801AA30(u32 * a0, u32 * a1, u32 * a2, u8 taskId);
-
-const u16 gWirelessInfoScreenPal[] = INCBIN_U16("graphics/interface/wireless_info_screen.gbapal");
-const u32 gWirelessInfoScreenGfx[] = INCBIN_U32("graphics/interface/wireless_info_screen.4bpp.lz");
-const u32 gWirelessInfoScreenTilemap[] = INCBIN_U32("graphics/interface/wireless_info_screen.bin.lz");
-
-const struct BgTemplate gUnknown_082F0D34[] = {
- {
- .bg = 0,
- .charBaseIndex = 2,
- .mapBaseIndex = 0x1F,
- .priority = 0
- }, {
- .bg = 1,
- .charBaseIndex = 0,
- .mapBaseIndex = 0x08,
- .priority = 1
- }
-};
-
-const struct WindowTemplate gUnknown_082F0D3C[] = {
- {
- .bg = 0x00,
- .tilemapLeft = 0x03,
- .tilemapTop = 0x00,
- .width = 0x18,
- .height = 0x03,
- .paletteNum = 0x0f,
- .baseBlock = 0x0001
- }, {
- .bg = 0x00,
- .tilemapLeft = 0x03,
- .tilemapTop = 0x04,
- .width = 0x15,
- .height = 0x0f,
- .paletteNum = 0x0f,
- .baseBlock = 0x0049
- }, {
- .bg = 0x00,
- .tilemapLeft = 0x18,
- .tilemapTop = 0x04,
- .width = 0x03,
- .height = 0x0f,
- .paletteNum = 0x0f,
- .baseBlock = 0x0184
- },
- { 0xFF }
-};
+static EWRAM_DATA struct UnionRoomBattle * sBattle = NULL;
-const u8 *const gUnknown_082F0D5C[] = {
- gText_WirelessCommStatus,
- gText_PeopleTrading,
- gText_PeopleBattling,
- gText_PeopleInUnionRoom,
- gText_PeopleCommunicating
-};
-
-const u8 gUnknown_082F0D70[][3] = {
- {0x01, 0x01, 0x02},
- {0x02, 0x01, 0x02},
- {0x03, 0x01, 0x04},
- {0x04, 0x00, 0x02},
- {0x06, 0x03, 0x02},
- {0x07, 0x03, 0x02},
- {0x09, 0x03, 0x00},
- {0x0a, 0x03, 0x00},
- {0x0b, 0x03, 0x00},
- {0x0c, 0xff, 0x00},
- {0x0d, 0x00, 0x00},
- {0x10, 0x03, 0x00},
- {0x0f, 0x03, 0x00},
- {0x40, 0x02, 0x01},
- {0x41, 0x02, 0x02},
- {0x44, 0x02, 0x02},
- {0x45, 0x02, 0x00},
- {0x48, 0x02, 0x02},
- {0x54, 0x02, 0x01},
- {0x53, 0x02, 0x02},
- {0x51, 0x02, 0x01},
- {0x52, 0x02, 0x01},
- {0x15, 0x03, 0x02},
- {0x16, 0x03, 0x02},
- {0x17, 0x03, 0x00},
- {0x18, 0x03, 0x00},
- {0x19, 0x03, 0x00},
- {0x1a, 0x03, 0x00},
- {0x1b, 0x03, 0x00},
- {0x1c, 0x01, 0x02},
- {0x0e, 0x01, 0x02}
-};
-
-const struct BgTemplate gUnknown_082F0DD0[] = {
+static const struct BgTemplate sBgTemplates[] = {
{
.bg = 0,
.charBaseIndex = 3,
@@ -146,7 +36,7 @@ const struct BgTemplate gUnknown_082F0DD0[] = {
}
};
-const struct WindowTemplate gUnknown_082F0DD4[] = {
+static const struct WindowTemplate sWindowTemplates[] = {
{
.bg = 0,
.tilemapLeft = 3,
@@ -156,301 +46,15 @@ const struct WindowTemplate gUnknown_082F0DD4[] = {
.paletteNum = 0xE,
.baseBlock = 0x014
},
- { 0xFF }
+ DUMMY_WIN_TEMPLATE
};
-const u8 gUnknown_082F0DE4[] = { 1, 2, 3 };
-
-void sub_801A3F4(void)
-{
- if (!IsDma3ManagerBusyWithBgCopy())
- {
- RunTasks();
- RunTextPrinters();
- AnimateSprites();
- BuildOamBuffer();
- UpdatePaletteFade();
- }
-}
-
-void sub_801A418(void)
-{
- LoadOam();
- ProcessSpriteCopyRequests();
- TransferPlttBuffer();
-}
-
-void sub_801A42C(void)
-{
- SetMainCallback2(sub_801A43C);
-}
-
-void sub_801A43C(void)
-{
- SetGpuReg(REG_OFFSET_DISPCNT, 0x0000);
- gUnknown_03000DAC = AllocZeroed(sizeof(struct UnkStruct_3000DAC));
- SetVBlankCallback(NULL);
- ResetBgsAndClearDma3BusyFlags(0);
- InitBgsFromTemplates(0, gUnknown_082F0D34, ARRAY_COUNT(gUnknown_082F0D34));
- SetBgTilemapBuffer(1, Alloc(0x800));
- SetBgTilemapBuffer(0, Alloc(0x800));
- DecompressAndLoadBgGfxUsingHeap(1, gWirelessInfoScreenGfx, 0, 0, 0);
- CopyToBgTilemapBuffer(1, gWirelessInfoScreenTilemap, 0, 0);
- InitWindows(gUnknown_082F0D3C);
- DeactivateAllTextPrinters();
- ResetPaletteFade();
- ResetSpriteData();
- ResetTasks();
- ScanlineEffect_Stop();
- m4aSoundVSyncOn();
- SetVBlankCallback(sub_801A418);
- gUnknown_03000DAC->taskId = CreateTask(sub_801A6C0, 0);
- gUnknown_03000DAC->unk61 = sub_8013C40();
- gUnknown_03000DAC->unk10[3] = 1;
- ChangeBgX(0, 0, 0);
- ChangeBgY(0, 0, 0);
- ChangeBgX(1, 0, 0);
- ChangeBgY(1, 0, 0);
- LoadPalette(gWirelessInfoScreenPal, 0x00, 0x20);
- Menu_LoadStdPalAt(0xF0);
- DynamicPlaceholderTextUtil_Reset();
- FillBgTilemapBufferRect(0, 0, 0, 0, 32, 32, 0x0F);
- CopyBgTilemapBufferToVram(1);
- SetMainCallback2(sub_801A3F4);
- RunTasks();
- RunTextPrinters();
- AnimateSprites();
- BuildOamBuffer();
- UpdatePaletteFade();
-}
-
-void sub_801A584(void)
-{
- s32 i;
- FreeAllWindowBuffers();
- for (i = 0; i < 2; i++)
- {
- Free(GetBgTilemapBuffer(i));
- }
- Free(gUnknown_03000DAC);
- SetMainCallback2(CB2_ReturnToFieldContinueScriptPlayMapMusic);
-}
-
-void sub_801A5BC(s16 * a0, s16 * a1)
-{
- if (++(*a0) > 5)
- {
- if (++(*a1) == 14)
- {
- *a1 = 0;
- }
- *a0 = 0;
- }
- LoadPalette(gWirelessInfoScreenPal + 16 * (*a1 + 2), 0, 0x10);
-}
+static const u8 sTextColors[] = { TEXT_COLOR_WHITE, TEXT_COLOR_DARK_GREY, TEXT_COLOR_LIGHT_GREY };
-void sub_801A600(void)
+static void CB2_SetUpPartiesAndStartBattle(void)
{
s32 i;
- FillWindowPixelBuffer(0, 0);
- FillWindowPixelBuffer(1, 0);
- FillWindowPixelBuffer(2, 0);
- sub_801A8B0(0, 1, gUnknown_082F0D5C[0], GetStringCenterAlignXOffset(1, gUnknown_082F0D5C[0], 0xC0), 6, 3);
- for (i = 0; i < 3; i++)
- {
- sub_801A8B0(1, 1, gUnknown_082F0D5C[i + 1], 0, 30 * i + 8, 1);
- }
- sub_801A8B0(1, 1, gUnknown_082F0D5C[i + 1], 0, 30 * i + 8, 2);
- PutWindowTilemap(0);
- CopyWindowToVram(0, 2);
- PutWindowTilemap(1);
- CopyWindowToVram(1, 2);
-}
-
-void sub_801A6C0(u8 taskId)
-{
- s32 i;
- switch (gTasks[taskId].data[0])
- {
- case 0:
- sub_801A600();
- gTasks[taskId].data[0]++;
- break;
- case 1:
- BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, 0);
- ShowBg(1);
- CopyBgTilemapBufferToVram(0);
- ShowBg(0);
- gTasks[taskId].data[0]++;
- break;
- case 2:
- if (!gPaletteFade.active)
- {
- gTasks[taskId].data[0]++;
- }
- break;
- case 3:
- if (sub_801AA30(gUnknown_03000DAC->unk00, gUnknown_03000DAC->unk10, gUnknown_03000DAC->unk20, gUnknown_03000DAC->unk61))
- {
- FillWindowPixelBuffer(2, 0);
- for (i = 0; i < 4; i++)
- {
- ConvertIntToDecimalStringN(gStringVar4, gUnknown_03000DAC->unk00[i], STR_CONV_MODE_RIGHT_ALIGN, 2);
- if (i != 3)
- {
- sub_801A8B0(2, 1, gStringVar4, 12, 30 * i + 8, 1);
- }
- else
- {
- sub_801A8B0(2, 1, gStringVar4, 12, 98, 2);
- }
- }
- PutWindowTilemap(2);
- CopyWindowToVram(2, 3);
- }
- if (({gMain.newKeys & A_BUTTON;}) || ({gMain.newKeys & B_BUTTON;}))
- {
- PlaySE(SE_SELECT);
- gTasks[gUnknown_03000DAC->unk61].data[15] = 0xFF;
- gTasks[taskId].data[0]++;
- }
- sub_801A5BC(&gTasks[taskId].data[7], &gTasks[taskId].data[8]);
- break;
- case 4:
- BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, 0);
- gTasks[taskId].data[0]++;
- break;
- case 5:
- if (!gPaletteFade.active)
- {
- SetMainCallback2(sub_801A584);
- DestroyTask(taskId);
- }
- break;
- }
-}
-
-static void sub_801A8B0(u8 windowId, u8 fontId, const u8 * str, u8 x, u8 y, u8 mode)
-{
- u8 color[3];
-
- switch (mode)
- {
- case 0:
- color[0] = 0;
- color[1] = 2;
- color[2] = 3;
- break;
- case 1:
- color[0] = 0;
- color[1] = 1;
- color[2] = 3;
- break;
- case 2:
- color[0] = 0;
- color[1] = 4;
- color[2] = 5;
- break;
- case 3:
- color[0] = 0;
- color[1] = 7;
- color[2] = 6;
- break;
- case 4:
- color[0] = 0;
- color[1] = 1;
- color[2] = 2;
- break;
- }
-
- AddTextPrinterParameterized4(windowId, fontId, x, y, 0, 0, color, -1, str);
-}
-
-u32 sub_801A960(struct UnkStruct_x20 * a0, u32 * a1)
-{
- s32 i, j, r2;
- u32 result = a0->unk.field_0.activity;
-
- for (i = 0; i < (unsigned)ARRAY_COUNT(gUnknown_082F0D70); i++)
- {
- if (result != gUnknown_082F0D70[i][0])
- {
- continue;
- }
- if (a0->field_1A_0 != 1)
- {
- continue;
- }
- if (gUnknown_082F0D70[i][2] == 0)
- {
- r2 = 0;
- for (j = 0; j < 4; j++)
- {
- if (a0->unk.field_0.child_sprite_gender[j] != 0)
- {
- r2++;
- }
- }
- r2++;
- a1[gUnknown_082F0D70[i][1]] += r2;
- }
- else
- {
- a1[gUnknown_082F0D70[i][1]] += gUnknown_082F0D70[i][2];
- }
- }
- return result;
-}
-
-bool32 sub_801AA08(u32 * a0, u32 * a1)
-{
- s32 i;
- for (i = 0; i < 4; i++)
- {
- if (a0[i] != a1[i])
- {
- return TRUE;
- }
- }
- return FALSE;
-}
-
-bool32 sub_801AA30(u32 * a0, u32 * a1, u32 * a2, u8 taskId)
-{
- bool32 r8 = FALSE;
- u32 sp0[4] = {0, 0, 0, 0};
- struct UnkStruct_x20 ** data = (void *)gTasks[taskId].data;
- s32 i;
-
- for (i = 0; i < 16; i++)
- {
- u32 r1 = sub_801A960(&(*data)[i], sp0);
- if (r1 != a2[i])
- {
- a2[i] = r1;
- r8 = TRUE;
- }
- }
- if (sub_801AA08(sp0, a1) == 0)
- {
- if (r8 != TRUE)
- {
- return FALSE;
- }
- }
- else
- {
- memcpy(a0, sp0, sizeof(sp0));
- memcpy(a1, sp0, sizeof(sp0));
- a0[3] = a0[0] + a0[1] + a0[2] + a0[3];
- }
- return TRUE;
-}
-
-void sub_801AAD4(void)
-{
- s32 i;
- sub_8014210(10);
+ StartUnionRoomBattle(BATTLE_TYPE_LINK | BATTLE_TYPE_TRAINER);
for (i = 0; i < UNION_ROOM_PARTY_SIZE; i++)
{
gEnemyParty[i] = gPlayerParty[gSelectedOrderFromParty[i] - 1];
@@ -465,25 +69,25 @@ void sub_801AAD4(void)
}
IncrementGameStat(GAME_STAT_NUM_UNION_ROOM_BATTLES);
CalculatePlayerPartyCount();
- gTrainerBattleOpponent_A = 0xC00;
+ gTrainerBattleOpponent_A = TRAINER_UNION_ROOM;
SetMainCallback2(CB2_InitBattle);
}
-void sub_801AB68(u8 windowId, const u8 * str, u8 x, u8 y, s32 speed)
+static void AddTextPrinterForUnionRoomBattle(u8 windowId, const u8 * str, u8 x, u8 y, s32 speed)
{
s32 letterSpacing = 0;
s32 lineSpacing = 1;
- FillWindowPixelBuffer(windowId, (gUnknown_082F0DE4[0] << 4) | gUnknown_082F0DE4[0]);
- AddTextPrinterParameterized4(windowId, 1, x, y, letterSpacing, lineSpacing, gUnknown_082F0DE4, speed, str);
+ FillWindowPixelBuffer(windowId, (sTextColors[0] << 4) | sTextColors[0]);
+ AddTextPrinterParameterized4(windowId, 1, x, y, letterSpacing, lineSpacing, sTextColors, speed, str);
}
-bool32 sub_801ABDC(s16 * state, const u8 * str, s32 speed)
+static bool32 PrintUnionRoomBattleMessage(s16 * state, const u8 * str, s32 speed)
{
switch (*state)
{
case 0:
DrawTextBorderOuter(0, 0x001, 0xD);
- sub_801AB68(0, str, 0, 1, speed);
+ AddTextPrinterForUnionRoomBattle(0, str, 0, 1, speed);
PutWindowTilemap(0);
CopyWindowToVram(0, 3);
(*state)++;
@@ -499,49 +103,47 @@ bool32 sub_801ABDC(s16 * state, const u8 * str, s32 speed)
return FALSE;
}
-void sub_801AC40(void)
+static void VBlankCB_UnionRoomBattle(void)
{
LoadOam();
ProcessSpriteCopyRequests();
TransferPlttBuffer();
}
-void sub_801AC54(void)
+void CB2_UnionRoomBattle(void)
{
switch (gMain.state)
{
case 0:
SetGpuReg(REG_OFFSET_DISPCNT, 0x0000);
- gUnknown_02022C6C = AllocZeroed(4);
+ sBattle = AllocZeroed(sizeof(struct UnionRoomBattle));
ResetSpriteData();
FreeAllSpritePalettes();
ResetTasks();
ResetBgsAndClearDma3BusyFlags(0);
- InitBgsFromTemplates(0, gUnknown_082F0DD0, 1);
- reset_temp_tile_data_buffers();
- if (!InitWindows(gUnknown_082F0DD4))
- {
+ InitBgsFromTemplates(0, sBgTemplates, ARRAY_COUNT(sBgTemplates));
+ ResetTempTileDataBuffers();
+ if (!InitWindows(sWindowTemplates))
return;
- }
DeactivateAllTextPrinters();
ClearWindowTilemap(0);
- FillWindowPixelBuffer(0, 0x00);
- FillWindowPixelBuffer(0, 0x11);
+ FillWindowPixelBuffer(0, PIXEL_FILL(0));
+ FillWindowPixelBuffer(0, PIXEL_FILL(1));
FillBgTilemapBufferRect(0, 0, 0, 0, 30, 20, 0xF);
LoadUserWindowBorderGfx(0, 1, 0xD0);
LoadUserWindowBorderGfx_(0, 1, 0xD0);
sub_819789C();
- SetVBlankCallback(sub_801AC40);
+ SetVBlankCallback(VBlankCB_UnionRoomBattle);
gMain.state++;
break;
case 1:
- if (sub_801ABDC(&gUnknown_02022C6C->a0, gText_CommStandbyAwaitingOtherPlayer, 0))
+ if (PrintUnionRoomBattleMessage(&sBattle->textState, gText_CommStandbyAwaitingOtherPlayer, 0))
{
gMain.state++;
}
break;
case 2:
- BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, 0);
+ BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, RGB_BLACK);
ShowBg(0);
gMain.state++;
break;
@@ -551,11 +153,11 @@ void sub_801AC54(void)
memset(gBlockSendBuffer, 0, 0x20);
if (gSelectedOrderFromParty[0] == -gSelectedOrderFromParty[1])
{
- gBlockSendBuffer[0] = 0x52;
+ gBlockSendBuffer[0] = ACTIVITY_DECLINE | IN_UNION_ROOM;
}
else
{
- gBlockSendBuffer[0] = 0x51;
+ gBlockSendBuffer[0] = ACTIVITY_ACCEPT | IN_UNION_ROOM;
}
SendBlock(0, gBlockSendBuffer, 0x20);
gMain.state++;
@@ -564,15 +166,16 @@ void sub_801AC54(void)
case 4:
if (GetBlockReceivedStatus() == 3)
{
- if (gBlockRecvBuffer[0][0] == 0x51 && gBlockRecvBuffer[1][0] == 0x51)
+ if (gBlockRecvBuffer[0][0] == (ACTIVITY_ACCEPT | IN_UNION_ROOM)
+ && gBlockRecvBuffer[1][0] == (ACTIVITY_ACCEPT | IN_UNION_ROOM))
{
- BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, 0);
+ BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK);
gMain.state = 50;
}
else
{
- sub_800AC34();
- if (gBlockRecvBuffer[GetMultiplayerId()][0] == 0x52)
+ SetCloseLinkCallback();
+ if (gBlockRecvBuffer[GetMultiplayerId()][0] == (ACTIVITY_DECLINE | IN_UNION_ROOM))
{
gMain.state = 6;
}
@@ -587,36 +190,36 @@ void sub_801AC54(void)
case 50:
if (!UpdatePaletteFade())
{
- sub_800ADF8();
+ SetLinkStandbyCallback();
gMain.state++;
}
break;
case 51:
if (IsLinkTaskFinished())
{
- SetMainCallback2(sub_801AAD4);
+ SetMainCallback2(CB2_SetUpPartiesAndStartBattle);
}
break;
case 6:
- if (gReceivedRemoteLinkPlayers == 0)
+ if (!gReceivedRemoteLinkPlayers)
{
gMain.state++;
}
break;
case 7:
- if (sub_801ABDC(&gUnknown_02022C6C->a0, gText_RefusedBattle, 1))
+ if (PrintUnionRoomBattleMessage(&sBattle->textState, gText_RefusedBattle, 1))
{
SetMainCallback2(CB2_ReturnToField);
}
break;
case 8:
- if (gReceivedRemoteLinkPlayers == 0)
+ if (!gReceivedRemoteLinkPlayers)
{
gMain.state++;
}
break;
case 9:
- if (sub_801ABDC(&gUnknown_02022C6C->a0, gText_BattleWasRefused, 1))
+ if (PrintUnionRoomBattleMessage(&sBattle->textState, gText_BattleWasRefused, 1))
{
SetMainCallback2(CB2_ReturnToField);
}
diff --git a/src/union_room_chat.c b/src/union_room_chat.c
index f212c69a7..a7df14dd7 100755
--- a/src/union_room_chat.c
+++ b/src/union_room_chat.c
@@ -27,256 +27,446 @@
#include "constants/rgb.h"
#include "constants/songs.h"
+enum
+{
+ UNION_ROOM_KB_PAGE_UPPER,
+ UNION_ROOM_KB_PAGE_LOWER,
+ UNION_ROOM_KB_PAGE_EMOJI,
+ UNION_ROOM_KB_PAGE_REGISTER,
+ UNION_ROOM_KB_PAGE_COUNT,
+};
+
+#define MAX_MESSAGE_LENGTH 15
+
+enum {
+ CHAT_MESSAGE_NONE,
+ CHAT_MESSAGE_CHAT,
+ CHAT_MESSAGE_JOIN,
+ CHAT_MESSAGE_LEAVE,
+ CHAT_MESSAGE_DROP,
+ CHAT_MESSAGE_DISBAND,
+};
+
+enum {
+ STDMESSAGE_QUIT_CHATTING,
+ STDMESSAGE_REGISTER_WHERE,
+ STDMESSAGE_REGISTER_HERE,
+ STDMESSAGE_INPUT_TEXT,
+ STDMESSAGE_EXITING_CHAT,
+ STDMESSAGE_LEADER_LEFT,
+ STDMESSAGE_ASK_SAVE,
+ STDMESSAGE_ASK_OVERWRITE,
+ STDMESSAGE_SAVING_NO_OFF,
+ STDMESSAGE_SAVED_THE_GAME,
+ STDMESSAGE_WARN_LEADER_LEAVE,
+};
+
+enum {
+ CHAT_FUNC_JOIN,
+ CHAT_FUNC_HANDLE_INPUT,
+ CHAT_FUNC_SWITCH,
+ CHAT_FUNC_ASK_QUIT,
+ CHAT_FUNC_SEND,
+ CHAT_FUNC_REGISTER,
+ CHAT_FUNC_EXIT,
+ CHAT_FUNC_DROP,
+ CHAT_FUNC_DISBANDED,
+ CHAT_FUNC_SAVE_AND_EXIT,
+};
+
+enum {
+ CHATDISPLAY_FUNC_LOAD_GFX,
+ CHATDISPLAY_FUNC_MOVE_KB_CURSOR,
+ CHATDISPLAY_FUNC_CURSOR_BLINK,
+ CHATDISPLAY_FUNC_SHOW_KB_SWAP_MENU,
+ CHATDISPLAY_FUNC_HIDE_KB_SWAP_MENU,
+ CHATDISPLAY_FUNC_SWITCH_PAGES,
+ CHATDISPLAY_FUNC_ASK_QUIT_CHATTING,
+ CHATDISPLAY_FUNC_DESTROY_YESNO,
+ CHATDISPLAY_FUNC_UPDATE_MSG,
+ CHATDISPLAY_FUNC_ASK_REGISTER_TEXT,
+ CHATDISPLAY_FUNC_CANCEL_REGISTER,
+ CHATDISPLAY_FUNC_RETURN_TO_KB,
+ CHATDISPLAY_FUNC_SCROLL_CHAT,
+ CHATDISPLAY_FUNC_PRINT_INPUT_TEXT,
+ CHATDISPLAY_FUNC_ASK_SAVE,
+ CHATDISPLAY_FUNC_ASK_OVERWRITE_SAVE,
+ CHATDISPLAY_FUNC_PRINT_SAVING,
+ CHATDISPLAY_FUNC_PRINT_SAVED_GAME,
+ CHATDISPLAY_FUNC_PRINT_EXITING_CHAT,
+ CHATDISPLAY_FUNC_PRINT_LEADER_LEFT,
+ CHATDISPLAY_FUNC_ASK_CONFIRM_LEADER_LEAVE,
+};
+
+enum {
+ CHAT_EXIT_NONE,
+ CHAT_EXIT_ONLY_LEADER,
+ CHAT_EXIT_DROPPED,
+ CHAT_EXIT_DISBANDED,
+};
+
struct UnionRoomChat
{
- u8 filler0[0x4];
- u16 unk4;
- u16 unk6;
- u8 filler8[0x2];
- u16 unkA;
- u8 fillerC[0x1];
- u8 unkD;
- u8 unkE;
- u8 unkF;
+ u32 filler1;
+ u16 funcId;
+ u16 funcState;
+ u16 filler2;
+ u16 exitDelayTimer;
+ u8 filler3;
+ u8 linkPlayerCount;
+ u8 handleInputTask;
+ u8 receiveMessagesTask;
u8 currentPage;
- u8 unk11;
+ u8 currentCol;
u8 currentRow;
- u8 unk13;
- u8 unk14;
- u8 unk15;
- u8 unk16;
- u8 unk17;
- u8 unk18;
- u8 unk19;
- u8 unk1A[0x1F];
- u8 unk39[0x40];
- u8 unk79[0x40];
- u8 unkB9[UNION_ROOM_KB_ROW_COUNT][21];
- u8 filler18B[0x5];
- u8 unk190[0x28];
- u16 unk1B8;
+ u8 multiplayerId;
+ u8 lastBufferCursorPos;
+ u8 bufferCursorPos;
+ u8 receivedPlayerIndex;
+ u8 exitType;
+ bool8 changedRegisteredTexts;
+ u8 afterSaveTimer;
+ u8 messageEntryBuffer[2 * MAX_MESSAGE_LENGTH + 1];
+ u8 receivedMessage[64];
+ u8 hostName[64];
+ u8 registeredTexts[UNION_ROOM_KB_ROW_COUNT][21];
+ u8 filler4[5];
+ u8 sendMessageBuffer[40];
+ u16 tryQuitAgainTimer;
};
-struct UnionRoomChat2_Unk0
+struct UnionRoomChatDisplay_Subtask
{
- bool32 (* unk0)(u8 *);
- u8 unk4;
- u8 unk5;
+ bool32 (* callback)(u8 *);
+ bool8 active;
+ u8 state;
};
-struct UnionRoomChat2
-{
- struct UnionRoomChat2_Unk0 unk0[3];
- u16 unk18;
- u16 unk1A;
- u16 unk1C;
- u16 unk1E;
- s16 unk20;
- u8 unk22[0x106];
- u8 unk128[BG_SCREEN_SIZE];
- u8 unk928[BG_SCREEN_SIZE];
- u8 unk1128[BG_SCREEN_SIZE];
- u8 unk1928[BG_SCREEN_SIZE];
+struct UnionRoomChatDisplay
+{
+ struct UnionRoomChatDisplay_Subtask subtasks[3];
+ u16 yesNoMenuWindowId;
+ u16 currLine;
+ u16 scrollCount;
+ u16 messageWindowId;
+ s16 bg1hofs;
+ u8 expandedPlaceholdersBuffer[0x106];
+ u8 bg0Buffer[BG_SCREEN_SIZE];
+ u8 bg1Buffer[BG_SCREEN_SIZE];
+ u8 bg3Buffer[BG_SCREEN_SIZE];
+ u8 bg2Buffer[BG_SCREEN_SIZE];
u8 unk2128[0x20];
u8 unk2148[0x20];
};
-struct UnionRoomChat3
+struct UnionRoomChatSprites
{
- struct Sprite *unk0;
- struct Sprite *unk4;
- struct Sprite *unk8;
- struct Sprite *unkC;
- struct Sprite *unk10;
- u16 unk14;
+ struct Sprite *keyboardCursor;
+ struct Sprite *textEntryArrow;
+ struct Sprite *textEntryCursor;
+ struct Sprite *rButtonIcon;
+ struct Sprite *rButtonLabel;
+ u16 cursorBlinkTimer;
};
-struct Unk82F2C98
+struct SubtaskInfo
{
- u16 unk0;
- bool32 (* unk4)(u8 *);
+ u16 idx;
+ bool32 (* callback)(u8 *);
};
-struct Unk82F2D40
+struct MessageWindowInfo
{
- const u8 *unk0;
- u8 unk4;
- u8 unk5;
- u8 unk6;
- u8 unk7;
- u8 unk8;
- u8 unk9;
- u8 unkA;
+ const u8 *text;
+ u8 boxType;
+ u8 x;
+ u8 y;
+ u8 letterSpacing;
+ u8 lineSpacing;
+ bool8 hasPlaceholders;
+ bool8 useWiderBox;
};
-static void sub_801DDD0(struct UnionRoomChat *);
-static void c2_081284E0(void);
-static void sub_801DF20(void);
-static void sub_801DF38(void);
-static void sub_801DF54(u8 taskId);
-static void sub_801DFAC(void);
-static void sub_801E030(void);
-static void sub_801E120(void);
-static void sub_801E240(void);
-static void sub_801E460(void);
-static void sub_801E5C4(void);
-static void sub_801E668(void);
-static void sub_801E764(void);
-static void sub_801E838(void);
-static void sub_801E978(void);
-static void sub_801EBD4(u16);
-static bool32 sub_801EBE4(void);
-static void sub_801EC94(void);
-static void sub_801ED68(void);
-static void sub_801ED94(void);
-static bool32 sub_801EDC4(void);
-static void sub_801EDE0(void);
-static void sub_801EE10(void);
-static void sub_801EE2C(void);
-static u8 *sub_801EE84(void);
-static u8 *sub_801EEA8(void);
-static void sub_801EF1C(u8 *);
-static void sub_801EF24(u8 *);
-static void sub_801EF4C(u8 *);
-static void sub_801EF7C(u8 *);
-static void sub_801EFA8(u8 *);
-static void sub_801EFD0(u8 *);
-static u8 *sub_801F114(void);
-static void sub_801F2B4(u8 taskId);
-static bool8 sub_801F4D0(void);
-static bool32 sub_801F534(void);
-static void sub_801F544(void);
-static void sub_801F5B8(void);
-static void sub_801F5EC(u16, u8);
-static bool8 sub_801F644(u8);
-static s8 sub_801FF08(void);
-static bool32 sub_8020890(void);
-static void sub_8020770(void);
-static void sub_801F574(struct UnionRoomChat2 *);
-static void sub_801F580(void);
-static void sub_80208D0(void);
-static bool32 sub_801FDD8(u8 *);
-static void sub_8020480(void);
-static void sub_8020538(void);
-static void sub_8020584(void);
-static void sub_80205B4(void);
-static void sub_8020604(void);
+static void InitUnionRoomChat(struct UnionRoomChat *);
+static void CB2_LoadInterface(void);
+static void VBlankCB_UnionRoomChatMain(void);
+static void CB2_UnionRoomChatMain(void);
+static void Task_HandlePlayerInput(u8 taskId);
+static void Chat_Join(void);
+static void Chat_HandleInput(void);
+static void Chat_Switch(void);
+static void Chat_AskQuitChatting(void);
+static void Chat_Exit(void);
+static void Chat_Drop(void);
+static void Chat_Disbanded(void);
+static void Chat_SendMessage(void);
+static void Chat_Register(void);
+static void Chat_SaveAndExit(void);
+static void SetChatFunction(u16);
+static bool32 HandleDPadInput(void);
+static void AppendTextToMessage(void);
+static void DeleteLastMessageCharacter(void);
+static void SwitchCaseOfLastMessageCharacter(void);
+static bool32 ChatMessageIsNotEmpty(void);
+static void RegisterTextAtRow(void);
+static void ResetMessageEntryBuffer(void);
+static void SaveRegisteredTexts(void);
+static u8 *GetEndOfMessagePtr(void);
+static u8 *GetLastCharOfMessagePtr(void);
+static void PrepareSendBuffer_Null(u8 *);
+static void PrepareSendBuffer_Join(u8 *);
+static void PrepareSendBuffer_Chat(u8 *);
+static void PrepareSendBuffer_Leave(u8 *);
+static void PrepareSendBuffer_Drop(u8 *);
+static void PrepareSendBuffer_Disband(u8 *);
+static u8 *GetLimitedMessageStartPtr(void);
+static void Task_ReceiveChatMessage(u8 taskId);
+static bool8 TryAllocDisplay(void);
+static bool32 IsDisplaySubtask0Active(void);
+static void FreeDisplay(void);
+static void RunDisplaySubtasks(void);
+static void StartDisplaySubtask(u16, u8);
+static bool8 IsDisplaySubtaskActive(u8);
+static s8 ProcessMenuInput(void);
+static bool32 TryAllocSprites(void);
+static void InitScanlineEffect(void);
+static void InitDisplay(struct UnionRoomChatDisplay *);
+static void ResetDisplaySubtasks(void);
+static void FreeSprites(void);
+static void ResetGpuBgState(void);
+static void SetBgTilemapBuffers(void);
+static void ClearBg0(void);
+static void LoadChatWindowBorderGfx(void);
+static void LoadChatWindowGfx(void);
static void sub_8020680(void);
-static void sub_80206A4(void);
-static void sub_80206D0(void);
-static void sub_8020740(void);
-static void sub_80206E8(void);
-static void sub_80208E8(void);
-static void sub_8020A68(void);
-static void sub_8020B20(void);
-static void sub_80203B0(void);
-static void sub_802040C(void);
-static void sub_802091C(bool32);
+static void LoadChatMessagesWindow(void);
+static void LoadKeyboardWindow(void);
+static void LoadKeyboardSwapWindow(void);
+static void LoadTextEntryWindow(void);
+static void CreateKeyboardCursorSprite(void);
+static void CreateTextEntrySprites(void);
+static void CreateRButtonSprites(void);
+static void ShowKeyboardSwapMenu(void);
+static void HideKeyboardSwapMenu(void);
+static void SetKeyboardCursorInvisibility(bool32);
static bool32 sub_8020320(void);
-static void sub_80201A4(void);
+static void PrintCurrentKeyboardPage(void);
static bool32 sub_8020368(void);
-static void sub_802093C(void);
-static void sub_8020B80(void);
-static void sub_801FF18(int, u16);
-static void sub_801FDDC(u8, u8, u8);
-static void sub_8020094(void);
-static void sub_801FEBC(void);
-static void sub_80200C8(void);
-static void sub_801FEE4(void);
-static void sub_80200EC(u16, u16, u8);
-static void sub_8020118(u16, u8 *, u8, u8, u8);
-static void sub_80209AC(int);
-static void sub_8020420(u16, u8 *, u8);
-static void sub_80209E0(void);
-static bool32 sub_8020A1C(void);
+static void MoveKeyboardCursor(void);
+static void UpdateRButtonLabel(void);
+static void AddStdMessageWindow(int, u16);
+static void AddYesNoMenuAt(u8, u8, u8);
+static void HideStdMessageWindow(void);
+static void HideYesNoMenuWindow(void);
+static void DestroyStdMessageWindow(void);
+static void DestroyYesNoMenuWindow(void);
+static void FillTextEntryWindow(u16, u16, u8);
+static void DrawTextEntryMessage(u16, u8 *, u8, u8, u8);
+static void SetRegisteredTextPalette(bool32);
+static void PrintChatMessage(u16, u8 *, u8);
+static void StartKeyboardCursorAnim(void);
+static bool32 TryKeyboardCursorReopen(void);
static void sub_80207C0(s16);
static void sub_8020818(s16);
-static bool32 sub_801F658(u8 *state);
-static bool32 sub_801F6F8(u8 *state);
-static bool32 sub_801F730(u8 *state);
-static bool32 sub_801F768(u8 *state);
-static bool32 sub_801F7D4(u8 *state);
-static bool32 sub_801F7E0(u8 *state);
-static bool32 sub_801F82C(u8 *state);
-static bool32 sub_801F870(u8 *state);
-static bool32 sub_801F8DC(u8 *state);
-static bool32 sub_801F984(u8 *state);
-static bool32 sub_801FA2C(u8 *state);
-static bool32 sub_801FA68(u8 *state);
-static bool32 sub_801FB44(u8 *state);
-static bool32 sub_801FB70(u8 *state);
-static bool32 sub_801FBB4(u8 *state);
-static bool32 sub_801FBF8(u8 *state);
-static bool32 sub_801FC4C(u8 *state);
-static bool32 sub_801FC9C(u8 *state);
-static bool32 sub_801FCEC(u8 *state);
-static bool32 sub_801FD30(u8 *state);
-static bool32 sub_801FD88(u8 *state);
-static void sub_8020ABC(struct Sprite *sprite);
-static void sub_8020AF4(struct Sprite *sprite);
-
-EWRAM_DATA struct UnionRoomChat *gUnknown_02022C84 = NULL;
-EWRAM_DATA struct UnionRoomChat2 *gUnknown_02022C88 = NULL;
-EWRAM_DATA struct UnionRoomChat3 *gUnknown_02022C8C = NULL;
-
-void (*const gUnknown_082F2A7C[])(void) =
- {
- sub_801DFAC,
- sub_801E030,
- sub_801E120,
- sub_801E240,
- sub_801E764,
- sub_801E838,
- sub_801E460,
- sub_801E5C4,
- sub_801E668,
- sub_801E978,
- };
-
-static const u8 sKeyboardPageMaxRow[] =
-{
- [UNION_ROOM_KB_PAGE_UPPER] = 9,
- [UNION_ROOM_KB_PAGE_LOWER] = 9,
- [UNION_ROOM_KB_PAGE_EMOJI] = 9,
- 9
+static bool32 Display_Dummy(u8 *);
+static bool32 Display_LoadGfx(u8 *state);
+static bool32 Display_ShowKeyboardSwapMenu(u8 *state);
+static bool32 Display_HideKeyboardSwapMenu(u8 *state);
+static bool32 Display_SwitchPages(u8 *state);
+static bool32 Display_MoveKeyboardCursor(u8 *state);
+static bool32 Display_AskQuitChatting(u8 *state);
+static bool32 Display_DestroyYesNoDialog(u8 *state);
+static bool32 Display_UpdateMessageBuffer(u8 *state);
+static bool32 Display_AskRegisterText(u8 *state);
+static bool32 Display_CancelRegister(u8 *state);
+static bool32 Display_ReturnToKeyboard(u8 *state);
+static bool32 Display_ScrollChat(u8 *state);
+static bool32 Display_AnimateKeyboardCursor(u8 *state);
+static bool32 Display_PrintInputText(u8 *state);
+static bool32 Display_PrintExitingChat(u8 *state);
+static bool32 Display_PrintLeaderLeft(u8 *state);
+static bool32 Display_AskSave(u8 *state);
+static bool32 Display_AskOverwriteSave(u8 *state);
+static bool32 Display_PrintSavingDontTurnOff(u8 *state);
+static bool32 Display_PrintSavedTheGame(u8 *state);
+static bool32 Display_AskConfirmLeaderLeave(u8 *state);
+static void SpriteCB_TextEntryCursor(struct Sprite *sprite);
+static void SpriteCB_TextEntryArrow(struct Sprite *sprite);
+
+static EWRAM_DATA struct UnionRoomChat *sChat = NULL;
+static EWRAM_DATA struct UnionRoomChatDisplay *sDisplay = NULL;
+static EWRAM_DATA struct UnionRoomChatSprites *sSprites = NULL;
+
+static void (*const sChatMainFunctions[])(void) = {
+ [CHAT_FUNC_JOIN] = Chat_Join,
+ [CHAT_FUNC_HANDLE_INPUT] = Chat_HandleInput,
+ [CHAT_FUNC_SWITCH] = Chat_Switch,
+ [CHAT_FUNC_ASK_QUIT] = Chat_AskQuitChatting,
+ [CHAT_FUNC_SEND] = Chat_SendMessage,
+ [CHAT_FUNC_REGISTER] = Chat_Register,
+ [CHAT_FUNC_EXIT] = Chat_Exit,
+ [CHAT_FUNC_DROP] = Chat_Drop,
+ [CHAT_FUNC_DISBANDED] = Chat_Disbanded,
+ [CHAT_FUNC_SAVE_AND_EXIT] = Chat_SaveAndExit
+};
+
+static const u8 sKeyboardPageMaxRow[UNION_ROOM_KB_PAGE_COUNT] =
+{
+ [UNION_ROOM_KB_PAGE_UPPER] = 9,
+ [UNION_ROOM_KB_PAGE_LOWER] = 9,
+ [UNION_ROOM_KB_PAGE_EMOJI] = 9,
+ [UNION_ROOM_KB_PAGE_REGISTER] = 9
};
-static const u8 gUnknown_082F2AA8[] = {
- CHAR_SPACE, 0x16, 0x17, 0x68, 0x19, 0x1A, 0x1B, 0x1C,
- 0x1D, 0x1E, CHAR_SPACE, 0x20, 0x21, 0x22, 0x23, 0x24,
- 0x25, 0x26, 0x27, 0x28, 0x29, 0x15, 0x01, 0x02,
- CHAR_SPACE, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, CHAR_SPACE,
- 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, 0x10, 0x11, 0x12,
- 0x13, 0x14, 0x2A, 0x2B, 0x2C, 0x2D, CHAR_SPACE, CHAR_SPACE,
- CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, 0x35, 0x36, CHAR_SPACE,
- CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE,
- CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE,
- CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE,
- CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, 0x53, 0x54, 0x55, 0x56, CHAR_SPACE,
- CHAR_SPACE, CHAR_SPACE, 0x6F, 0x5B, 0x5C, 0x5D, CHAR_SPACE, CHAR_SPACE,
- CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE,
- 0x03, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, 0x5A,
- CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE,
- CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE,
- CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, 0x84, 0x85, 0x86, CHAR_SPACE,
- CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE,
- CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE,
- CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE,
- 0xA0, CHAR_0, CHAR_1, CHAR_2, CHAR_3, CHAR_4, CHAR_5, CHAR_6,
- CHAR_7, CHAR_8, CHAR_9, CHAR_EXCL_MARK, CHAR_QUESTION_MARK, CHAR_PERIOD, CHAR_HYPHEN, 0xAF,
- CHAR_ELLIPSIS, CHAR_DBL_QUOT_LEFT, CHAR_DBL_QUOT_RIGHT, CHAR_SGL_QUOT_LEFT, CHAR_SGL_QUOT_RIGHT, CHAR_MALE, CHAR_FEMALE, CHAR_CURRENCY,
- CHAR_COMMA, CHAR_MULT_SIGN, CHAR_SLASH, CHAR_a, CHAR_b, CHAR_c, CHAR_d, CHAR_e,
- CHAR_f, CHAR_g, CHAR_h, CHAR_i, CHAR_j, CHAR_k, CHAR_l, CHAR_m,
- CHAR_n, CHAR_o, CHAR_p, CHAR_q, CHAR_r, CHAR_s, CHAR_t, CHAR_u,
- CHAR_v, CHAR_w, CHAR_x, CHAR_y, CHAR_z, CHAR_A, CHAR_B, CHAR_C,
- CHAR_D, CHAR_E, CHAR_F, CHAR_G, CHAR_H, CHAR_I, CHAR_J, CHAR_K,
- CHAR_L, CHAR_M, CHAR_N, CHAR_O, CHAR_P, CHAR_Q, CHAR_R, CHAR_S,
- CHAR_T, CHAR_U, CHAR_V, CHAR_W, CHAR_X, CHAR_Y, CHAR_Z, 0xEF,
- CHAR_COLON, 0xF4, 0xF5, 0xF6, 0xF1, 0xF2, 0xF3, CHAR_SPACE,
- CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE
+static const u8 sCaseToggleTable[256] = {
+ [CHAR_A] = CHAR_a,
+ [CHAR_B] = CHAR_b,
+ [CHAR_C] = CHAR_c,
+ [CHAR_D] = CHAR_d,
+ [CHAR_E] = CHAR_e,
+ [CHAR_F] = CHAR_f,
+ [CHAR_G] = CHAR_g,
+ [CHAR_H] = CHAR_h,
+ [CHAR_I] = CHAR_i,
+ [CHAR_J] = CHAR_j,
+ [CHAR_K] = CHAR_k,
+ [CHAR_L] = CHAR_l,
+ [CHAR_M] = CHAR_m,
+ [CHAR_N] = CHAR_n,
+ [CHAR_O] = CHAR_o,
+ [CHAR_P] = CHAR_p,
+ [CHAR_Q] = CHAR_q,
+ [CHAR_R] = CHAR_r,
+ [CHAR_S] = CHAR_s,
+ [CHAR_T] = CHAR_t,
+ [CHAR_U] = CHAR_u,
+ [CHAR_V] = CHAR_v,
+ [CHAR_W] = CHAR_w,
+ [CHAR_X] = CHAR_x,
+ [CHAR_Y] = CHAR_y,
+ [CHAR_Z] = CHAR_z,
+ [CHAR_a] = CHAR_A,
+ [CHAR_b] = CHAR_B,
+ [CHAR_c] = CHAR_C,
+ [CHAR_d] = CHAR_D,
+ [CHAR_e] = CHAR_E,
+ [CHAR_f] = CHAR_F,
+ [CHAR_g] = CHAR_G,
+ [CHAR_h] = CHAR_H,
+ [CHAR_i] = CHAR_I,
+ [CHAR_j] = CHAR_J,
+ [CHAR_k] = CHAR_K,
+ [CHAR_l] = CHAR_L,
+ [CHAR_m] = CHAR_M,
+ [CHAR_n] = CHAR_N,
+ [CHAR_o] = CHAR_O,
+ [CHAR_p] = CHAR_P,
+ [CHAR_q] = CHAR_Q,
+ [CHAR_r] = CHAR_R,
+ [CHAR_s] = CHAR_S,
+ [CHAR_t] = CHAR_T,
+ [CHAR_u] = CHAR_U,
+ [CHAR_v] = CHAR_V,
+ [CHAR_w] = CHAR_W,
+ [CHAR_x] = CHAR_X,
+ [CHAR_y] = CHAR_Y,
+ [CHAR_z] = CHAR_Z,
+ [CHAR_A_GRAVE] = CHAR_a_GRAVE,
+ [CHAR_A_ACUTE] = CHAR_a_ACUTE,
+ [CHAR_A_CIRCUMFLEX] = CHAR_a_CIRCUMFLEX,
+ [CHAR_A_DIAERESIS] = CHAR_a_DIAERESIS,
+ [CHAR_C_CEDILLA] = CHAR_c_CEDILLA,
+ [CHAR_E_GRAVE] = CHAR_e_GRAVE,
+ [CHAR_E_ACUTE] = CHAR_e_ACUTE,
+ [CHAR_E_CIRCUMFLEX] = CHAR_e_CIRCUMFLEX,
+ [CHAR_E_DIAERESIS] = CHAR_e_DIAERESIS,
+ [CHAR_I_GRAVE] = CHAR_i_GRAVE,
+ [CHAR_I_ACUTE] = CHAR_i_ACUTE,
+ [CHAR_I_CIRCUMFLEX] = CHAR_i_CIRCUMFLEX,
+ [CHAR_I_DIAERESIS] = CHAR_i_DIAERESIS,
+ [CHAR_O_GRAVE] = CHAR_o_GRAVE,
+ [CHAR_O_ACUTE] = CHAR_o_ACUTE,
+ [CHAR_O_CIRCUMFLEX] = CHAR_o_CIRCUMFLEX,
+ [CHAR_O_DIAERESIS] = CHAR_o_DIAERESIS,
+ [CHAR_OE] = CHAR_oe,
+ [CHAR_U_GRAVE] = CHAR_u_GRAVE,
+ [CHAR_U_ACUTE] = CHAR_u_ACUTE,
+ [CHAR_U_CIRCUMFLEX] = CHAR_u_CIRCUMFLEX,
+ [CHAR_U_DIAERESIS] = CHAR_u_DIAERESIS,
+ [CHAR_N_TILDE] = CHAR_n_TILDE,
+ [CHAR_ESZETT] = CHAR_ESZETT,
+ [CHAR_a_GRAVE] = CHAR_A_GRAVE,
+ [CHAR_a_ACUTE] = CHAR_A_ACUTE,
+ [CHAR_a_CIRCUMFLEX] = CHAR_A_CIRCUMFLEX,
+ [CHAR_a_DIAERESIS] = CHAR_A_DIAERESIS,
+ [CHAR_c_CEDILLA] = CHAR_C_CEDILLA,
+ [CHAR_e_GRAVE] = CHAR_E_GRAVE,
+ [CHAR_e_ACUTE] = CHAR_E_ACUTE,
+ [CHAR_e_CIRCUMFLEX] = CHAR_E_CIRCUMFLEX,
+ [CHAR_e_DIAERESIS] = CHAR_E_DIAERESIS,
+ [CHAR_i_GRAVE] = CHAR_I_GRAVE,
+ [CHAR_i_ACUTE] = CHAR_I_ACUTE,
+ [CHAR_i_CIRCUMFLEX] = CHAR_I_CIRCUMFLEX,
+ [CHAR_i_DIAERESIS] = CHAR_I_DIAERESIS,
+ [CHAR_o_GRAVE] = CHAR_O_GRAVE,
+ [CHAR_o_ACUTE] = CHAR_O_ACUTE,
+ [CHAR_o_CIRCUMFLEX] = CHAR_O_CIRCUMFLEX,
+ [CHAR_o_DIAERESIS] = CHAR_O_DIAERESIS,
+ [CHAR_oe] = CHAR_OE,
+ [CHAR_u_GRAVE] = CHAR_U_GRAVE,
+ [CHAR_u_ACUTE] = CHAR_U_ACUTE,
+ [CHAR_u_CIRCUMFLEX] = CHAR_U_CIRCUMFLEX,
+ [CHAR_u_DIAERESIS] = CHAR_U_DIAERESIS,
+ [CHAR_n_TILDE] = CHAR_N_TILDE,
+ [CHAR_0] = CHAR_0,
+ [CHAR_1] = CHAR_1,
+ [CHAR_2] = CHAR_2,
+ [CHAR_3] = CHAR_3,
+ [CHAR_4] = CHAR_4,
+ [CHAR_5] = CHAR_5,
+ [CHAR_6] = CHAR_6,
+ [CHAR_7] = CHAR_7,
+ [CHAR_8] = CHAR_8,
+ [CHAR_9] = CHAR_9,
+ [CHAR_PK] = CHAR_PK,
+ [CHAR_MN] = CHAR_MN,
+ [CHAR_PO] = CHAR_PO,
+ [CHAR_KE] = CHAR_KE,
+ [CHAR_SUPER_E] = CHAR_SUPER_E,
+ [CHAR_SUPER_ER] = CHAR_SUPER_ER,
+ [CHAR_SUPER_RE] = CHAR_SUPER_RE,
+ [CHAR_PERIOD] = CHAR_PERIOD,
+ [CHAR_COMMA] = CHAR_COMMA,
+ [CHAR_COLON] = CHAR_COLON,
+ [CHAR_SEMICOLON] = CHAR_SEMICOLON,
+ [CHAR_EXCL_MARK] = CHAR_EXCL_MARK,
+ [CHAR_QUESTION_MARK] = CHAR_QUESTION_MARK,
+ [CHAR_HYPHEN] = CHAR_HYPHEN,
+ [CHAR_SLASH] = CHAR_SLASH,
+ [CHAR_ELLIPSIS] = CHAR_ELLIPSIS,
+ [CHAR_LEFT_PAREN] = CHAR_LEFT_PAREN,
+ [CHAR_RIGHT_PAREN] = CHAR_RIGHT_PAREN,
+ [CHAR_AMPERSAND] = CHAR_AMPERSAND,
+ [CHAR_DBL_QUOT_LEFT] = CHAR_DBL_QUOT_LEFT,
+ [CHAR_DBL_QUOT_RIGHT] = CHAR_DBL_QUOT_RIGHT,
+ [CHAR_SGL_QUOT_LEFT] = CHAR_SGL_QUOT_LEFT,
+ [CHAR_SGL_QUOT_RIGHT] = CHAR_SGL_QUOT_RIGHT,
+ [CHAR_MASCULINE_ORDINAL] = CHAR_MASCULINE_ORDINAL,
+ [CHAR_FEMININE_ORDINAL] = CHAR_FEMININE_ORDINAL,
+ [CHAR_BULLET] = CHAR_BULLET,
+ [CHAR_EQUALS] = CHAR_EQUALS,
+ [CHAR_MULT_SIGN] = CHAR_MULT_SIGN,
+ [CHAR_PERCENT] = CHAR_PERCENT,
+ [CHAR_LESS_THAN] = CHAR_LESS_THAN,
+ [CHAR_GREATER_THAN] = CHAR_GREATER_THAN,
+ [CHAR_MALE] = CHAR_MALE,
+ [CHAR_FEMALE] = CHAR_FEMALE,
+ [CHAR_CURRENCY] = CHAR_CURRENCY,
+ [CHAR_BLACK_TRIANGLE] = CHAR_BLACK_TRIANGLE,
};
-static const u8 *const sUnionRoomKeyboardText[UNION_ROOM_KB_PAGE_COUNT][UNION_ROOM_KB_ROW_COUNT] =
+// Excludes UNION_ROOM_KB_PAGE_REGISTER, the text for which is chosen by the player
+static const u8 *const sUnionRoomKeyboardText[UNION_ROOM_KB_PAGE_COUNT - 1][UNION_ROOM_KB_ROW_COUNT] =
{
[UNION_ROOM_KB_PAGE_UPPER] =
{
@@ -319,10 +509,10 @@ static const u8 *const sUnionRoomKeyboardText[UNION_ROOM_KB_PAGE_COUNT][UNION_RO
}
};
-const u16 gUnknown_082F2C20[] = INCBIN_U16("graphics/interface/unk_palette1.gbapal");
-const u16 gUnknown_082F2C40[] = INCBIN_U16("graphics/interface/unk_palette2.gbapal");
+static const u16 sUnk_Palette1[] = INCBIN_U16("graphics/union_room_chat/unk_palette1.gbapal");
+static const u16 sUnk_Palette2[] = INCBIN_U16("graphics/union_room_chat/unk_palette2.gbapal");
-const struct BgTemplate gUnknown_082F2C60[] = {
+static const struct BgTemplate sBgTemplates[] = {
{
.bg = 0,
.charBaseIndex = 0,
@@ -358,7 +548,7 @@ const struct BgTemplate gUnknown_082F2C60[] = {
}
};
-const struct WindowTemplate gUnknown_082F2C70[] = {
+static const struct WindowTemplate sWinTemplates[] = {
{
.bg = 0x03,
.tilemapLeft = 0x08,
@@ -391,242 +581,341 @@ const struct WindowTemplate gUnknown_082F2C70[] = {
.height = 0x09,
.paletteNum = 0x0e,
.baseBlock = 0x0013,
- }, { 0xFF }
+ }, DUMMY_WIN_TEMPLATE
};
-const struct Unk82F2C98 gUnknown_082F2C98[] = {
- {0x00000000, sub_801F658},
- {0x00000003, sub_801F6F8},
- {0x00000004, sub_801F730},
- {0x00000005, sub_801F768},
- {0x00000001, sub_801F7D4},
- {0x00000006, sub_801F7E0},
- {0x00000007, sub_801F82C},
- {0x00000008, sub_801F870},
- {0x00000009, sub_801F8DC},
- {0x0000000a, sub_801F984},
- {0x0000000b, sub_801FA2C},
- {0x0000000c, sub_801FA68},
- {0x00000002, sub_801FB44},
- {0x0000000d, sub_801FB70},
- {0x00000012, sub_801FBB4},
- {0x00000013, sub_801FBF8},
- {0x0000000e, sub_801FC4C},
- {0x0000000f, sub_801FC9C},
- {0x00000010, sub_801FCEC},
- {0x00000011, sub_801FD30},
- {0x00000014, sub_801FD88}
+static const struct SubtaskInfo sDisplaySubtasks[] = {
+ {CHATDISPLAY_FUNC_LOAD_GFX, Display_LoadGfx},
+ {CHATDISPLAY_FUNC_SHOW_KB_SWAP_MENU, Display_ShowKeyboardSwapMenu},
+ {CHATDISPLAY_FUNC_HIDE_KB_SWAP_MENU, Display_HideKeyboardSwapMenu},
+ {CHATDISPLAY_FUNC_SWITCH_PAGES, Display_SwitchPages},
+ {CHATDISPLAY_FUNC_MOVE_KB_CURSOR, Display_MoveKeyboardCursor},
+ {CHATDISPLAY_FUNC_ASK_QUIT_CHATTING, Display_AskQuitChatting},
+ {CHATDISPLAY_FUNC_DESTROY_YESNO, Display_DestroyYesNoDialog},
+ {CHATDISPLAY_FUNC_UPDATE_MSG, Display_UpdateMessageBuffer},
+ {CHATDISPLAY_FUNC_ASK_REGISTER_TEXT, Display_AskRegisterText},
+ {CHATDISPLAY_FUNC_CANCEL_REGISTER, Display_CancelRegister},
+ {CHATDISPLAY_FUNC_RETURN_TO_KB, Display_ReturnToKeyboard},
+ {CHATDISPLAY_FUNC_SCROLL_CHAT, Display_ScrollChat},
+ {CHATDISPLAY_FUNC_CURSOR_BLINK, Display_AnimateKeyboardCursor},
+ {CHATDISPLAY_FUNC_PRINT_INPUT_TEXT, Display_PrintInputText},
+ {CHATDISPLAY_FUNC_PRINT_EXITING_CHAT, Display_PrintExitingChat},
+ {CHATDISPLAY_FUNC_PRINT_LEADER_LEFT, Display_PrintLeaderLeft},
+ {CHATDISPLAY_FUNC_ASK_SAVE, Display_AskSave},
+ {CHATDISPLAY_FUNC_ASK_OVERWRITE_SAVE, Display_AskOverwriteSave},
+ {CHATDISPLAY_FUNC_PRINT_SAVING, Display_PrintSavingDontTurnOff},
+ {CHATDISPLAY_FUNC_PRINT_SAVED_GAME, Display_PrintSavedTheGame},
+ {CHATDISPLAY_FUNC_ASK_CONFIRM_LEADER_LEAVE, Display_AskConfirmLeaderLeave}
};
-const struct Unk82F2D40 gUnknown_082F2D40[] = {
- {gText_QuitChatting, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00},
- {gText_RegisterTextWhere, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00},
- {gText_RegisterTextHere, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00},
- {gText_InputText, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00},
- {gText_ExitingChat, 0x02, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00},
- {gText_LeaderLeftEndingChat, 0x02, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00},
- {gText_RegisteredTextChanged, 0x02, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01},
- {gText_AlreadySavedFile_Unused, 0x02, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01},
- {gText_SavingDontTurnOff_Unused, 0x02, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01},
- {gText_PlayerSavedGame_Unused, 0x02, 0x00, 0x01, 0x00, 0x00, 0x01, 0x01},
- {gText_IfLeaderLeavesChatEnds, 0x02, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01}
+static const struct MessageWindowInfo sDisplayStdMessages[] = {
+ [STDMESSAGE_QUIT_CHATTING] = {
+ .text = gText_QuitChatting,
+ .boxType = 1,
+ .x = 0,
+ .y = 1,
+ .letterSpacing = 0,
+ .lineSpacing = 0,
+ .hasPlaceholders = FALSE,
+ .useWiderBox = FALSE
+ },
+ [STDMESSAGE_REGISTER_WHERE] = {
+ .text = gText_RegisterTextWhere,
+ .boxType = 1,
+ .x = 0,
+ .y = 1,
+ .letterSpacing = 0,
+ .lineSpacing = 0,
+ .hasPlaceholders = FALSE,
+ .useWiderBox = FALSE
+ },
+ [STDMESSAGE_REGISTER_HERE] = {
+ .text = gText_RegisterTextHere,
+ .boxType = 1,
+ .x = 0,
+ .y = 1,
+ .letterSpacing = 0,
+ .lineSpacing = 0,
+ .hasPlaceholders = FALSE,
+ .useWiderBox = FALSE
+ },
+ [STDMESSAGE_INPUT_TEXT] = {
+ .text = gText_InputText,
+ .boxType = 1,
+ .x = 0,
+ .y = 1,
+ .letterSpacing = 0,
+ .lineSpacing = 0,
+ .hasPlaceholders = FALSE,
+ .useWiderBox = FALSE
+ },
+ [STDMESSAGE_EXITING_CHAT] = {
+ .text = gText_ExitingChat,
+ .boxType = 2,
+ .x = 0,
+ .y = 1,
+ .letterSpacing = 0,
+ .lineSpacing = 0,
+ .hasPlaceholders = FALSE,
+ .useWiderBox = FALSE
+ },
+ [STDMESSAGE_LEADER_LEFT] = {
+ .text = gText_LeaderLeftEndingChat,
+ .boxType = 2,
+ .x = 0,
+ .y = 1,
+ .letterSpacing = 0,
+ .lineSpacing = 0,
+ .hasPlaceholders = TRUE,
+ .useWiderBox = FALSE
+ },
+ [STDMESSAGE_ASK_SAVE] = {
+ .text = gText_RegisteredTextChangedOKToSave,
+ .boxType = 2,
+ .x = 0,
+ .y = 1,
+ .letterSpacing = 0,
+ .lineSpacing = 0,
+ .hasPlaceholders = FALSE,
+ .useWiderBox = TRUE
+ },
+ [STDMESSAGE_ASK_OVERWRITE] = {
+ .text = gText_AlreadySavedFile_Chat,
+ .boxType = 2,
+ .x = 0,
+ .y = 1,
+ .letterSpacing = 0,
+ .lineSpacing = 0,
+ .hasPlaceholders = FALSE,
+ .useWiderBox = TRUE
+ },
+ [STDMESSAGE_SAVING_NO_OFF] = {
+ .text = gText_SavingDontTurnOff_Chat,
+ .boxType = 2,
+ .x = 0,
+ .y = 1,
+ .letterSpacing = 0,
+ .lineSpacing = 0,
+ .hasPlaceholders = FALSE,
+ .useWiderBox = TRUE
+ },
+ [STDMESSAGE_SAVED_THE_GAME] = {
+ .text = gText_PlayerSavedGame_Chat,
+ .boxType = 2,
+ .x = 0,
+ .y = 1,
+ .letterSpacing = 0,
+ .lineSpacing = 0,
+ .hasPlaceholders = TRUE,
+ .useWiderBox = TRUE
+ },
+ [STDMESSAGE_WARN_LEADER_LEAVE] = {
+ .text = gText_IfLeaderLeavesChatEnds,
+ .boxType = 2,
+ .x = 0,
+ .y = 1,
+ .letterSpacing = 0,
+ .lineSpacing = 0,
+ .hasPlaceholders = FALSE,
+ .useWiderBox = TRUE
+ }
};
-const u8 gText_Ellipsis[] = _("…");
+static const u8 sText_Ellipsis[] = _("…");
-const struct MenuAction gUnknown_082F2DC8[] = {
- {gText_Upper, NULL},
- {gText_Lower, NULL},
- {gText_Symbols, NULL},
- {gText_Register2, NULL},
- {gText_Exit2, NULL},
+static const struct MenuAction sKeyboardPageTitleTexts[UNION_ROOM_KB_PAGE_COUNT + 1] = {
+ [UNION_ROOM_KB_PAGE_UPPER] = {gText_Upper, NULL},
+ [UNION_ROOM_KB_PAGE_LOWER] = {gText_Lower, NULL},
+ [UNION_ROOM_KB_PAGE_EMOJI] = {gText_Symbols, NULL},
+ [UNION_ROOM_KB_PAGE_REGISTER] = {gText_Register2, NULL},
+ [UNION_ROOM_KB_PAGE_COUNT] = {gText_Exit2, NULL},
};
-const u16 gUnknown_082F2DF0[] = INCBIN_U16("graphics/interface/unk_palette3.gbapal");
-const u32 gUnknown_082F2E10[] = INCBIN_U32("graphics/interface/unk_cursor.4bpp.lz");
-const u32 gUnknown_082F3094[] = INCBIN_U32("graphics/interface/unk_dash.4bpp.lz");
-const u32 gUnknown_082F30B4[] = INCBIN_U32("graphics/interface/unk_cursor_arrow.4bpp.lz");
-const u32 gUnknown_082F30E0[] = INCBIN_U32("graphics/interface/unk_rbutton.4bpp.lz");
-
-const struct CompressedSpriteSheet gUnknown_082F3134[] = {
- {gUnknown_082F2E10, 0x1000, 0x0000},
- {gUnknown_082F30B4, 0x0040, 0x0001},
- {gUnknown_082F3094, 0x0040, 0x0002},
- {gUnknown_082F30E0, 0x0080, 0x0003},
- {gUnknown_08DD4CF8, 0x0400, 0x0004}
+static const u16 sUnionRoomChatInterfacePal[] = INCBIN_U16("graphics/union_room_chat/interface.gbapal");
+static const u32 sKeyboardCursorTiles[] = INCBIN_U32("graphics/union_room_chat/keyboard_cursor.4bpp.lz");
+static const u32 sTextEntryCursorTiles[] = INCBIN_U32("graphics/union_room_chat/text_entry_cursor.4bpp.lz");
+static const u32 sTextEntryArrowTiles[] = INCBIN_U32("graphics/union_room_chat/text_entry_arrow.4bpp.lz");
+static const u32 sRButtonGfxTiles[] = INCBIN_U32("graphics/union_room_chat/r_button.4bpp.lz");
+
+static const struct CompressedSpriteSheet sSpriteSheets[] = {
+ {sKeyboardCursorTiles, 0x1000, 0},
+ {sTextEntryArrowTiles, 0x0040, 1},
+ {sTextEntryCursorTiles, 0x0040, 2},
+ {sRButtonGfxTiles, 0x0080, 3},
+ {gUnionRoomChat_RButtonLabels, 0x0400, 4}
};
-const struct SpritePalette gUnknown_082F315C = {
- gUnknown_082F2DF0, 0x0000
+static const struct SpritePalette sSpritePalette = {
+ sUnionRoomChatInterfacePal, 0
};
-const struct OamData gUnknown_082F3164 = {
+static const struct OamData sOam_KeyboardCursor = {
.shape = SPRITE_SHAPE(64x32),
.size = SPRITE_SIZE(64x32),
.priority = 1
};
-const union AnimCmd gUnknown_082F316C[] = {
+static const union AnimCmd sAnim_KeyboardCursor_Open[] = {
ANIMCMD_FRAME(0x00, 30),
ANIMCMD_END
};
-const union AnimCmd gUnknown_082F3174[] = {
+static const union AnimCmd sAnim_KeyboardCursor_Closed[] = {
ANIMCMD_FRAME(0x20, 30),
ANIMCMD_END
};
-const union AnimCmd gUnknown_082F317C[] = {
+static const union AnimCmd sAnim_KeyboardCursorWide_Open[] = {
ANIMCMD_FRAME(0x40, 30),
ANIMCMD_END
};
-const union AnimCmd gUnknown_082F3184[] = {
+static const union AnimCmd sAnim_KeyboardCursorWide_Closed[] = {
ANIMCMD_FRAME(0x60, 30),
ANIMCMD_END
};
-const union AnimCmd *const gUnknown_082F318C[] = {
- gUnknown_082F316C,
- gUnknown_082F3174,
- gUnknown_082F317C,
- gUnknown_082F3184
+static const union AnimCmd *const sAnims_KeyboardCursor[] = {
+ sAnim_KeyboardCursor_Open,
+ sAnim_KeyboardCursor_Closed,
+ sAnim_KeyboardCursorWide_Open,
+ sAnim_KeyboardCursorWide_Closed
};
-const struct SpriteTemplate gUnknown_082F319C = {
+static const struct SpriteTemplate sSpriteTemplate_KeyboardCursor = {
.tileTag = 0x0000,
.paletteTag = 0x0000,
- .oam = &gUnknown_082F3164,
- .anims = gUnknown_082F318C,
+ .oam = &sOam_KeyboardCursor,
+ .anims = sAnims_KeyboardCursor,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = SpriteCallbackDummy
};
-const struct OamData gUnknown_082F31B4 = {
+static const struct OamData sOam_TextEntrySprite = {
.shape = SPRITE_SHAPE(8x16),
.size = SPRITE_SIZE(8x16),
.priority = 2
};
-const struct SpriteTemplate gUnknown_082F31BC = {
+static const struct SpriteTemplate sSpriteTemplate_TextEntryCursor = {
.tileTag = 0x0002,
.paletteTag = 0x0000,
- .oam = &gUnknown_082F31B4,
+ .oam = &sOam_TextEntrySprite,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_8020ABC
+ .callback = SpriteCB_TextEntryCursor
};
-const struct SpriteTemplate gUnknown_082F31D4 = {
+static const struct SpriteTemplate sSpriteTemplate_TextEntryArrow = {
.tileTag = 0x0001,
.paletteTag = 0x0000,
- .oam = &gUnknown_082F31B4,
+ .oam = &sOam_TextEntrySprite,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_8020AF4
+ .callback = SpriteCB_TextEntryArrow
};
-const struct OamData gUnknown_082F31EC = {
+static const struct OamData sOam_RButtonIcon = {
.shape = SPRITE_SHAPE(16x16),
.size = SPRITE_SIZE(16x16),
.priority = 2
};
-const struct OamData gUnknown_082F31F4 = {
+static const struct OamData sOam_RButtonLabel = {
.shape = SPRITE_SHAPE(32x16),
.size = SPRITE_SIZE(32x16),
.priority = 2
};
-const union AnimCmd gUnknown_082F31FC[] = {
+static const union AnimCmd sAnim_ToggleCaseIcon[] = {
ANIMCMD_FRAME(0x00, 2),
ANIMCMD_END
};
-const union AnimCmd gUnknown_082F3204[] = {
+static const union AnimCmd sAnim_ToggleCaseIcon_Duplicate1[] = {
ANIMCMD_FRAME(0x08, 2),
ANIMCMD_END
};
-const union AnimCmd gUnknown_082F320C[] = {
+static const union AnimCmd sAnim_ToggleCaseIcon_Duplicate2[] = {
ANIMCMD_FRAME(0x10, 2),
ANIMCMD_END
};
-const union AnimCmd gUnknown_082F3214[] = {
+static const union AnimCmd sAnim_RegisterIcon[] = {
ANIMCMD_FRAME(0x18, 2),
ANIMCMD_END
};
-const union AnimCmd *const gUnknown_082F321C[] = {
- gUnknown_082F31FC,
- gUnknown_082F3204,
- gUnknown_082F320C,
- gUnknown_082F3214
+static const union AnimCmd *const sAnims_RButtonLabels[] = {
+ sAnim_ToggleCaseIcon,
+ sAnim_ToggleCaseIcon_Duplicate1,
+ sAnim_ToggleCaseIcon_Duplicate2,
+ sAnim_RegisterIcon
};
-const struct SpriteTemplate gUnknown_082F322C = {
+static const struct SpriteTemplate sSpriteTemplate_RButtonIcon = {
.tileTag = 0x0003,
.paletteTag = 0x0000,
- .oam = &gUnknown_082F31EC,
+ .oam = &sOam_RButtonIcon,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = SpriteCallbackDummy
};
-const struct SpriteTemplate gUnknown_082F3244 = {
+static const struct SpriteTemplate sSpriteTemplate_RButtonLabels = {
.tileTag = 0x0004,
.paletteTag = 0x0000,
- .oam = &gUnknown_082F31F4,
- .anims = gUnknown_082F321C,
+ .oam = &sOam_RButtonLabel,
+ .anims = sAnims_RButtonLabels,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = SpriteCallbackDummy
};
-void sub_801DD98(void)
+void EnterUnionRoomChat(void)
{
- gUnknown_02022C84 = Alloc(sizeof(*gUnknown_02022C84));
- sub_801DDD0(gUnknown_02022C84);
+ sChat = Alloc(sizeof(struct UnionRoomChat));
+ InitUnionRoomChat(sChat);
gKeyRepeatStartDelay = 20;
SetVBlankCallback(NULL);
- SetMainCallback2(c2_081284E0);
+ SetMainCallback2(CB2_LoadInterface);
}
-static void sub_801DDD0(struct UnionRoomChat *unionRoomChat)
+static void InitUnionRoomChat(struct UnionRoomChat *chat)
{
int i;
- unionRoomChat->unk4 = 0;
- unionRoomChat->unk6 = 0;
- unionRoomChat->currentPage = 0;
- unionRoomChat->unk11 = 0;
- unionRoomChat->currentRow = 0;
- unionRoomChat->unk14 = 0;
- unionRoomChat->unk15 = 0;
- unionRoomChat->unk16 = 0;
- unionRoomChat->unk1A[0] = EOS;
- unionRoomChat->unkD = GetLinkPlayerCount();
- unionRoomChat->unk13 = GetMultiplayerId();
- unionRoomChat->unk17 = 0;
- unionRoomChat->unk18 = 0;
- sub_801EF1C(unionRoomChat->unk190);
+ chat->funcId = 0;
+ chat->funcState = 0;
+ chat->currentPage = 0;
+ chat->currentCol = 0;
+ chat->currentRow = 0;
+ chat->lastBufferCursorPos = 0;
+ chat->bufferCursorPos = 0;
+ chat->receivedPlayerIndex = 0;
+ chat->messageEntryBuffer[0] = EOS;
+ chat->linkPlayerCount = GetLinkPlayerCount();
+ chat->multiplayerId = GetMultiplayerId();
+ chat->exitType = 0;
+ chat->changedRegisteredTexts = FALSE;
+ PrepareSendBuffer_Null(chat->sendMessageBuffer);
for (i = 0; i < UNION_ROOM_KB_ROW_COUNT; i++)
- StringCopy(unionRoomChat->unkB9[i], gSaveBlock1Ptr->unk3C88[i]);
+ StringCopy(chat->registeredTexts[i], gSaveBlock1Ptr->registeredTexts[i]);
}
-void sub_801DE30(void)
+static void FreeUnionRoomChat(void)
{
- DestroyTask(gUnknown_02022C84->unkE);
- DestroyTask(gUnknown_02022C84->unkF);
- Free(gUnknown_02022C84);
+ DestroyTask(sChat->handleInputTask);
+ DestroyTask(sChat->receiveMessagesTask);
+ Free(sChat);
}
-static void c2_081284E0(void)
+static void CB2_LoadInterface(void)
{
switch (gMain.state)
{
@@ -634,16 +923,16 @@ static void c2_081284E0(void)
ResetTasks();
ResetSpriteData();
FreeAllSpritePalettes();
- sub_801F4D0();
+ TryAllocDisplay();
gMain.state++;
break;
case 1:
- sub_801F5B8();
- if (!sub_801F534())
+ RunDisplaySubtasks();
+ if (!IsDisplaySubtask0Active())
{
BlendPalettes(0xFFFFFFFF, 16, RGB_BLACK);
BeginNormalPaletteFade(0xFFFFFFFF, -1, 16, 0, RGB_BLACK);
- SetVBlankCallback(sub_801DF20);
+ SetVBlankCallback(VBlankCB_UnionRoomChatMain);
gMain.state++;
}
break;
@@ -651,9 +940,9 @@ static void c2_081284E0(void)
UpdatePaletteFade();
if (!gPaletteFade.active)
{
- SetMainCallback2(sub_801DF38);
- gUnknown_02022C84->unkE = CreateTask(sub_801DF54, 8);
- gUnknown_02022C84->unkF = CreateTask(sub_801F2B4, 7);
+ SetMainCallback2(CB2_UnionRoomChatMain);
+ sChat->handleInputTask = CreateTask(Task_HandlePlayerInput, 8);
+ sChat->receiveMessagesTask = CreateTask(Task_ReceiveChatMessage, 7);
LoadWirelessStatusIndicatorSpriteGfx();
CreateWirelessStatusIndicatorSprite(232, 150);
}
@@ -661,7 +950,7 @@ static void c2_081284E0(void)
}
}
-static void sub_801DF20(void)
+static void VBlankCB_UnionRoomChatMain(void)
{
TransferPlttBuffer();
LoadOam();
@@ -669,146 +958,146 @@ static void sub_801DF20(void)
ScanlineEffect_InitHBlankDmaTransfer();
}
-static void sub_801DF38(void)
+static void CB2_UnionRoomChatMain(void)
{
RunTasks();
- sub_801F5B8();
+ RunDisplaySubtasks();
AnimateSprites();
BuildOamBuffer();
UpdatePaletteFade();
}
-static void sub_801DF54(u8 taskId)
+static void Task_HandlePlayerInput(u8 taskId)
{
- switch (gUnknown_02022C84->unk17)
+ switch (sChat->exitType)
{
- case 1:
- sub_801EBD4(6);
- gUnknown_02022C84->unk17 = 0;
+ case CHAT_EXIT_ONLY_LEADER:
+ SetChatFunction(CHAT_FUNC_EXIT);
+ sChat->exitType = CHAT_EXIT_NONE;
break;
- case 2:
- sub_801EBD4(7);
- gUnknown_02022C84->unk17 = 0;
+ case CHAT_EXIT_DROPPED:
+ SetChatFunction(CHAT_FUNC_DROP);
+ sChat->exitType = CHAT_EXIT_NONE;
break;
- case 3:
- sub_801EBD4(8);
- gUnknown_02022C84->unk17 = 0;
+ case CHAT_EXIT_DISBANDED:
+ SetChatFunction(CHAT_FUNC_DISBANDED);
+ sChat->exitType = CHAT_EXIT_NONE;
break;
}
- gUnknown_082F2A7C[gUnknown_02022C84->unk4]();
+ sChatMainFunctions[sChat->funcId]();
}
-static void sub_801DFAC(void)
+static void Chat_Join(void)
{
- switch (gUnknown_02022C84->unk6)
+ switch (sChat->funcState)
{
case 0:
- sub_801EF24(gUnknown_02022C84->unk190);
- gUnknown_02022C84->unk6++;
+ PrepareSendBuffer_Join(sChat->sendMessageBuffer);
+ sChat->funcState++;
// fall through
case 1:
if (IsLinkTaskFinished() && !sub_8011A9C())
{
- if (SendBlock(0, gUnknown_02022C84->unk190, sizeof(gUnknown_02022C84->unk190)))
- gUnknown_02022C84->unk6++;
+ if (SendBlock(0, sChat->sendMessageBuffer, sizeof(sChat->sendMessageBuffer)))
+ sChat->funcState++;
}
break;
case 2:
if (IsLinkTaskFinished())
- sub_801EBD4(1);
+ SetChatFunction(CHAT_FUNC_HANDLE_INPUT);
break;
}
}
-static void sub_801E030(void)
+static void Chat_HandleInput(void)
{
- bool8 var0, var1;
+ bool8 updateMsgActive, cursorBlinkActive;
- switch (gUnknown_02022C84->unk6)
+ switch (sChat->funcState)
{
case 0:
if (gMain.newKeys & START_BUTTON)
{
- if (gUnknown_02022C84->unk15)
- sub_801EBD4(4);
+ if (sChat->bufferCursorPos)
+ SetChatFunction(CHAT_FUNC_SEND);
}
else if (gMain.newKeys & SELECT_BUTTON)
{
- sub_801EBD4(2);
+ SetChatFunction(CHAT_FUNC_SWITCH);
}
else if (gMain.newAndRepeatedKeys & B_BUTTON)
{
- if (gUnknown_02022C84->unk15)
+ if (sChat->bufferCursorPos)
{
- sub_801ED68();
- sub_801F5EC(8, 0);
- gUnknown_02022C84->unk6 = 1;
+ DeleteLastMessageCharacter();
+ StartDisplaySubtask(CHATDISPLAY_FUNC_UPDATE_MSG, 0);
+ sChat->funcState = 1;
}
else
{
- sub_801EBD4(3);
+ SetChatFunction(CHAT_FUNC_ASK_QUIT);
}
}
else if (gMain.newKeys & A_BUTTON)
{
- sub_801EC94();
- sub_801F5EC(8, 0);
- sub_801F5EC(2, 1);
- gUnknown_02022C84->unk6 = 1;
+ AppendTextToMessage();
+ StartDisplaySubtask(CHATDISPLAY_FUNC_UPDATE_MSG, 0);
+ StartDisplaySubtask(CHATDISPLAY_FUNC_CURSOR_BLINK, 1);
+ sChat->funcState = 1;
}
else if (gMain.newKeys & R_BUTTON)
{
- if (gUnknown_02022C84->currentPage != UNION_ROOM_KB_PAGE_COUNT)
+ if (sChat->currentPage != UNION_ROOM_KB_PAGE_REGISTER)
{
- sub_801ED94();
- sub_801F5EC(8, 0);
- gUnknown_02022C84->unk6 = 1;
+ SwitchCaseOfLastMessageCharacter();
+ StartDisplaySubtask(CHATDISPLAY_FUNC_UPDATE_MSG, 0);
+ sChat->funcState = 1;
}
else
{
- sub_801EBD4(5);
+ SetChatFunction(5);
}
}
- else if (sub_801EBE4())
+ else if (HandleDPadInput())
{
- sub_801F5EC(1, 0);
- gUnknown_02022C84->unk6 = 1;
+ StartDisplaySubtask(CHATDISPLAY_FUNC_MOVE_KB_CURSOR, 0);
+ sChat->funcState = 1;
}
break;
case 1:
- var0 = sub_801F644(0);
- var1 = sub_801F644(1);
- if (!var0 && !var1)
- gUnknown_02022C84->unk6 = 0;
+ updateMsgActive = IsDisplaySubtaskActive(0);
+ cursorBlinkActive = IsDisplaySubtaskActive(1);
+ if (!updateMsgActive && !cursorBlinkActive)
+ sChat->funcState = 0;
break;
}
}
-static void sub_801E120(void)
+static void Chat_Switch(void)
{
s16 input;
- int var0;
+ bool32 shouldSwitchPages;
- switch (gUnknown_02022C84->unk6)
+ switch (sChat->funcState)
{
case 0:
- sub_801F5EC(3, 0);
- gUnknown_02022C84->unk6++;
+ StartDisplaySubtask(CHATDISPLAY_FUNC_SHOW_KB_SWAP_MENU, 0);
+ sChat->funcState++;
break;
case 1:
- if (!sub_801F644(0))
- gUnknown_02022C84->unk6++;
+ if (!IsDisplaySubtaskActive(0))
+ sChat->funcState++;
break;
case 2:
input = Menu_ProcessInput();
switch (input)
{
default:
- sub_801F5EC(4, 0);
- var0 = 1;
- if (gUnknown_02022C84->currentPage == input || input > UNION_ROOM_KB_PAGE_COUNT)
- var0 = 0;
+ StartDisplaySubtask(CHATDISPLAY_FUNC_HIDE_KB_SWAP_MENU, 0);
+ shouldSwitchPages = TRUE;
+ if (sChat->currentPage == input || input > UNION_ROOM_KB_PAGE_REGISTER)
+ shouldSwitchPages = FALSE;
break;
case MENU_NOTHING_CHOSEN:
if (gMain.newKeys & SELECT_BUTTON)
@@ -818,538 +1107,532 @@ static void sub_801E120(void)
}
return;
case MENU_B_PRESSED:
- sub_801F5EC(4, 0);
- gUnknown_02022C84->unk6 = 3;
+ StartDisplaySubtask(CHATDISPLAY_FUNC_HIDE_KB_SWAP_MENU, 0);
+ sChat->funcState = 3;
return;
}
- if (!var0)
+ if (!shouldSwitchPages)
{
- gUnknown_02022C84->unk6 = 3;
+ sChat->funcState = 3;
return;
}
- gUnknown_02022C84->unk11 = 0;
- gUnknown_02022C84->currentRow = 0;
- sub_801F5EC(5, 1);
- gUnknown_02022C84->currentPage = input;
- gUnknown_02022C84->unk6 = 4;
+ sChat->currentCol = 0;
+ sChat->currentRow = 0;
+ StartDisplaySubtask(CHATDISPLAY_FUNC_SWITCH_PAGES, 1);
+ sChat->currentPage = input;
+ sChat->funcState = 4;
break;
case 3:
- if (!sub_801F644(0))
- sub_801EBD4(1);
+ if (!IsDisplaySubtaskActive(0))
+ SetChatFunction(CHAT_FUNC_HANDLE_INPUT);
break;
case 4:
- if (!sub_801F644(0) && !sub_801F644(1))
- sub_801EBD4(1);
+ if (!IsDisplaySubtaskActive(0) && !IsDisplaySubtaskActive(1))
+ SetChatFunction(CHAT_FUNC_HANDLE_INPUT);
break;
}
}
-static void sub_801E240(void)
+static void Chat_AskQuitChatting(void)
{
s8 input;
- switch (gUnknown_02022C84->unk6)
+ switch (sChat->funcState)
{
case 0:
- sub_801F5EC(6, 0);
- gUnknown_02022C84->unk6 = 1;
+ StartDisplaySubtask(CHATDISPLAY_FUNC_ASK_QUIT_CHATTING, 0);
+ sChat->funcState = 1;
break;
case 1:
- if (!sub_801F644(0))
- gUnknown_02022C84->unk6 = 2;
+ if (!IsDisplaySubtaskActive(0))
+ sChat->funcState = 2;
break;
case 2:
- input = sub_801FF08();
+ input = ProcessMenuInput();
switch (input)
{
case -1:
case 1:
- sub_801F5EC(7, 0);
- gUnknown_02022C84->unk6 = 3;
+ StartDisplaySubtask(CHATDISPLAY_FUNC_DESTROY_YESNO, 0);
+ sChat->funcState = 3;
break;
case 0:
- if (gUnknown_02022C84->unk13 == 0)
+ if (sChat->multiplayerId == 0)
{
- sub_801EFD0(gUnknown_02022C84->unk190);
- sub_801F5EC(7, 0);
- gUnknown_02022C84->unk6 = 9;
+ PrepareSendBuffer_Disband(sChat->sendMessageBuffer);
+ StartDisplaySubtask(CHATDISPLAY_FUNC_DESTROY_YESNO, 0);
+ sChat->funcState = 9;
}
else
{
- sub_801EF7C(gUnknown_02022C84->unk190);
- gUnknown_02022C84->unk6 = 4;
+ PrepareSendBuffer_Leave(sChat->sendMessageBuffer);
+ sChat->funcState = 4;
}
break;
}
break;
case 3:
- if (!sub_801F644(0))
- sub_801EBD4(1);
+ if (!IsDisplaySubtaskActive(0))
+ SetChatFunction(CHAT_FUNC_HANDLE_INPUT);
break;
case 9:
- if (!sub_801F644(0))
+ if (!IsDisplaySubtaskActive(0))
{
- sub_801F5EC(20, 0);
- gUnknown_02022C84->unk6 = 10;
+ StartDisplaySubtask(CHATDISPLAY_FUNC_ASK_CONFIRM_LEADER_LEAVE, 0);
+ sChat->funcState = 10;
}
break;
case 10:
- if (!sub_801F644(0))
- gUnknown_02022C84->unk6 = 8;
+ if (!IsDisplaySubtaskActive(0))
+ sChat->funcState = 8;
break;
case 8:
- input = sub_801FF08();
+ input = ProcessMenuInput();
switch (input)
{
case -1:
case 1:
- sub_801F5EC(7, 0);
- gUnknown_02022C84->unk6 = 3;
+ StartDisplaySubtask(CHATDISPLAY_FUNC_DESTROY_YESNO, 0);
+ sChat->funcState = 3;
break;
case 0:
sub_80104B0();
- sub_801EFD0(gUnknown_02022C84->unk190);
- gUnknown_02022C84->unk6 = 4;
- gUnknown_02022C84->unk1B8 = 0;
+ PrepareSendBuffer_Disband(sChat->sendMessageBuffer);
+ sChat->funcState = 4;
+ sChat->tryQuitAgainTimer = 0;
break;
}
break;
case 4:
- if (IsLinkTaskFinished() && !sub_8011A9C() && SendBlock(0, gUnknown_02022C84->unk190, sizeof(gUnknown_02022C84->unk190)))
+ if (IsLinkTaskFinished() && !sub_8011A9C() && SendBlock(0, sChat->sendMessageBuffer, sizeof(sChat->sendMessageBuffer)))
{
- if (!gUnknown_02022C84->unk13)
- gUnknown_02022C84->unk6 = 6;
+ if (!sChat->multiplayerId)
+ sChat->funcState = 6;
else
- gUnknown_02022C84->unk6 = 5;
+ sChat->funcState = 5;
}
if (!gReceivedRemoteLinkPlayers)
- sub_801EBD4(9);
+ SetChatFunction(CHAT_FUNC_SAVE_AND_EXIT);
break;
case 5:
if (!gReceivedRemoteLinkPlayers)
{
- sub_801EBD4(9);
+ SetChatFunction(CHAT_FUNC_SAVE_AND_EXIT);
}
- else if (++gUnknown_02022C84->unk1B8 > 300)
+ else if (++sChat->tryQuitAgainTimer > 300)
{
- gUnknown_02022C84->unk1B8 = 0;
- gUnknown_02022C84->unk6 = 4;
+ sChat->tryQuitAgainTimer = 0;
+ sChat->funcState = 4;
}
break;
}
}
-static void sub_801E460(void)
+static void Chat_Exit(void)
{
- switch (gUnknown_02022C84->unk6)
+ switch (sChat->funcState)
{
case 0:
- if (!FuncIsActiveTask(sub_801F2B4))
+ if (!FuncIsActiveTask(Task_ReceiveChatMessage))
{
- sub_801F5EC(7, 0);
- gUnknown_02022C84->unk6++;
+ StartDisplaySubtask(CHATDISPLAY_FUNC_DESTROY_YESNO, 0);
+ sChat->funcState++;
}
break;
case 1:
- if (!sub_801F644(0))
+ if (!IsDisplaySubtaskActive(0))
{
- sub_801F5EC(18, 0);
- gUnknown_02022C84->unk6++;
+ StartDisplaySubtask(CHATDISPLAY_FUNC_PRINT_EXITING_CHAT, 0);
+ sChat->funcState++;
}
break;
case 2:
- if (!sub_801F644(0))
+ if (!IsDisplaySubtaskActive(0))
{
- sub_801EFA8(gUnknown_02022C84->unk190);
- gUnknown_02022C84->unk6++;
+ PrepareSendBuffer_Drop(sChat->sendMessageBuffer);
+ sChat->funcState++;
}
break;
case 3:
- if (IsLinkTaskFinished() && !sub_8011A9C() && SendBlock(0, gUnknown_02022C84->unk190, sizeof(gUnknown_02022C84->unk190)))
- gUnknown_02022C84->unk6++;
+ if (IsLinkTaskFinished() && !sub_8011A9C() && SendBlock(0, sChat->sendMessageBuffer, sizeof(sChat->sendMessageBuffer)))
+ sChat->funcState++;
break;
case 4:
if ((GetBlockReceivedStatus() & 1) && !sub_8011A9C())
- gUnknown_02022C84->unk6++;
+ sChat->funcState++;
break;
case 5:
if (IsLinkTaskFinished() && !sub_8011A9C())
{
- sub_800AC34();
- gUnknown_02022C84->unkA = 0;
- gUnknown_02022C84->unk6++;
+ SetCloseLinkCallback();
+ sChat->exitDelayTimer = 0;
+ sChat->funcState++;
}
break;
case 6:
- if (gUnknown_02022C84->unkA < 150)
- gUnknown_02022C84->unkA++;
+ if (sChat->exitDelayTimer < 150)
+ sChat->exitDelayTimer++;
if (!gReceivedRemoteLinkPlayers)
- gUnknown_02022C84->unk6++;
+ sChat->funcState++;
break;
case 7:
- if (gUnknown_02022C84->unkA >= 150)
- sub_801EBD4(9);
+ if (sChat->exitDelayTimer >= 150)
+ SetChatFunction(CHAT_FUNC_SAVE_AND_EXIT);
else
- gUnknown_02022C84->unkA++;
+ sChat->exitDelayTimer++;
break;
}
}
-static void sub_801E5C4(void)
+static void Chat_Drop(void)
{
- switch (gUnknown_02022C84->unk6)
+ switch (sChat->funcState)
{
case 0:
- if (!FuncIsActiveTask(sub_801F2B4))
+ if (!FuncIsActiveTask(Task_ReceiveChatMessage))
{
- sub_801F5EC(7, 0);
- gUnknown_02022C84->unk6++;
+ StartDisplaySubtask(CHATDISPLAY_FUNC_DESTROY_YESNO, 0);
+ sChat->funcState++;
}
break;
case 1:
- if (!sub_801F644(0) && IsLinkTaskFinished() && !sub_8011A9C())
+ if (!IsDisplaySubtaskActive(0) && IsLinkTaskFinished() && !sub_8011A9C())
{
- sub_800AC34();
- gUnknown_02022C84->unkA = 0;
- gUnknown_02022C84->unk6++;
+ SetCloseLinkCallback();
+ sChat->exitDelayTimer = 0;
+ sChat->funcState++;
}
break;
case 2:
- if (gUnknown_02022C84->unkA < 150)
- gUnknown_02022C84->unkA++;
+ if (sChat->exitDelayTimer < 150)
+ sChat->exitDelayTimer++;
if (!gReceivedRemoteLinkPlayers)
- gUnknown_02022C84->unk6++;
+ sChat->funcState++;
break;
case 3:
- if (gUnknown_02022C84->unkA >= 150)
- sub_801EBD4(9);
+ if (sChat->exitDelayTimer >= 150)
+ SetChatFunction(CHAT_FUNC_SAVE_AND_EXIT);
else
- gUnknown_02022C84->unkA++;
+ sChat->exitDelayTimer++;
break;
}
}
-static void sub_801E668(void)
+static void Chat_Disbanded(void)
{
- switch (gUnknown_02022C84->unk6)
+ switch (sChat->funcState)
{
case 0:
- if (!FuncIsActiveTask(sub_801F2B4))
+ if (!FuncIsActiveTask(Task_ReceiveChatMessage))
{
- if (gUnknown_02022C84->unk13)
- sub_801F5EC(7, 0);
+ if (sChat->multiplayerId)
+ StartDisplaySubtask(CHATDISPLAY_FUNC_DESTROY_YESNO, 0);
- gUnknown_02022C84->unk6++;
+ sChat->funcState++;
}
break;
case 1:
- if (!sub_801F644(0))
+ if (!IsDisplaySubtaskActive(0))
{
- if (gUnknown_02022C84->unk13)
- sub_801F5EC(19, 0);
+ if (sChat->multiplayerId)
+ StartDisplaySubtask(CHATDISPLAY_FUNC_PRINT_LEADER_LEFT, 0);
- gUnknown_02022C84->unk6++;
+ sChat->funcState++;
}
break;
case 2:
- if (sub_801F644(0) != TRUE && IsLinkTaskFinished() && !sub_8011A9C())
+ if (IsDisplaySubtaskActive(0) != TRUE && IsLinkTaskFinished() && !sub_8011A9C())
{
- sub_800AC34();
- gUnknown_02022C84->unkA = 0;
- gUnknown_02022C84->unk6++;
+ SetCloseLinkCallback();
+ sChat->exitDelayTimer = 0;
+ sChat->funcState++;
}
break;
case 3:
- if (gUnknown_02022C84->unkA < 150)
- gUnknown_02022C84->unkA++;
+ if (sChat->exitDelayTimer < 150)
+ sChat->exitDelayTimer++;
if (!gReceivedRemoteLinkPlayers)
- gUnknown_02022C84->unk6++;
+ sChat->funcState++;
break;
case 4:
- if (gUnknown_02022C84->unkA >= 150)
- sub_801EBD4(9);
+ if (sChat->exitDelayTimer >= 150)
+ SetChatFunction(CHAT_FUNC_SAVE_AND_EXIT);
else
- gUnknown_02022C84->unkA++;
+ sChat->exitDelayTimer++;
break;
}
}
-static void sub_801E764(void)
+static void Chat_SendMessage(void)
{
- switch (gUnknown_02022C84->unk6)
+ switch (sChat->funcState)
{
case 0:
if (!gReceivedRemoteLinkPlayers)
{
- sub_801EBD4(1);
+ SetChatFunction(CHAT_FUNC_HANDLE_INPUT);
break;
}
- sub_801EF4C(gUnknown_02022C84->unk190);
- gUnknown_02022C84->unk6++;
+ PrepareSendBuffer_Chat(sChat->sendMessageBuffer);
+ sChat->funcState++;
// fall through
case 1:
- if (IsLinkTaskFinished() == TRUE && !sub_8011A9C() && SendBlock(0, gUnknown_02022C84->unk190, sizeof(gUnknown_02022C84->unk190)))
- gUnknown_02022C84->unk6++;
+ if (IsLinkTaskFinished() == TRUE && !sub_8011A9C() && SendBlock(0, sChat->sendMessageBuffer, sizeof(sChat->sendMessageBuffer)))
+ sChat->funcState++;
break;
case 2:
- sub_801EE10();
- sub_801F5EC(8, 0);
- gUnknown_02022C84->unk6++;
+ ResetMessageEntryBuffer();
+ StartDisplaySubtask(CHATDISPLAY_FUNC_UPDATE_MSG, 0);
+ sChat->funcState++;
break;
case 3:
- if (!sub_801F644(0))
- gUnknown_02022C84->unk6++;
+ if (!IsDisplaySubtaskActive(0))
+ sChat->funcState++;
break;
case 4:
if (IsLinkTaskFinished())
- sub_801EBD4(1);
+ SetChatFunction(CHAT_FUNC_HANDLE_INPUT);
break;
}
}
-static void sub_801E838(void)
+static void Chat_Register(void)
{
- switch (gUnknown_02022C84->unk6)
+ switch (sChat->funcState)
{
case 0:
- if (sub_801EDC4())
+ if (ChatMessageIsNotEmpty())
{
- sub_801F5EC(9, 0);
- gUnknown_02022C84->unk6 = 2;
+ StartDisplaySubtask(CHATDISPLAY_FUNC_ASK_REGISTER_TEXT, 0);
+ sChat->funcState = 2;
}
else
{
- sub_801F5EC(13, 0);
- gUnknown_02022C84->unk6 = 5;
+ StartDisplaySubtask(CHATDISPLAY_FUNC_PRINT_INPUT_TEXT, 0);
+ sChat->funcState = 5;
}
break;
case 1:
if (gMain.newKeys & A_BUTTON)
{
- sub_801EDE0();
- sub_801F5EC(11, 0);
- gUnknown_02022C84->unk6 = 3;
+ RegisterTextAtRow();
+ StartDisplaySubtask(CHATDISPLAY_FUNC_RETURN_TO_KB, 0);
+ sChat->funcState = 3;
}
else if (gMain.newKeys & B_BUTTON)
{
- sub_801F5EC(10, 0);
- gUnknown_02022C84->unk6 = 4;
+ StartDisplaySubtask(CHATDISPLAY_FUNC_CANCEL_REGISTER, 0);
+ sChat->funcState = 4;
}
- else if (sub_801EBE4())
+ else if (HandleDPadInput())
{
- sub_801F5EC(1, 0);
- gUnknown_02022C84->unk6 = 2;
+ StartDisplaySubtask(CHATDISPLAY_FUNC_MOVE_KB_CURSOR, 0);
+ sChat->funcState = 2;
}
break;
case 2:
- if (!sub_801F644(0))
- gUnknown_02022C84->unk6 = 1;
+ if (!IsDisplaySubtaskActive(0))
+ sChat->funcState = 1;
break;
case 3:
- if (!sub_801F644(0))
+ if (!IsDisplaySubtaskActive(0))
{
- sub_801F5EC(10, 0);
- gUnknown_02022C84->unk6 = 4;
+ StartDisplaySubtask(CHATDISPLAY_FUNC_CANCEL_REGISTER, 0);
+ sChat->funcState = 4;
}
break;
case 4:
- if (!sub_801F644(0))
- sub_801EBD4(1);
+ if (!IsDisplaySubtaskActive(0))
+ SetChatFunction(CHAT_FUNC_HANDLE_INPUT);
break;
case 5:
- if (!sub_801F644(0))
- gUnknown_02022C84->unk6 = 6;
+ if (!IsDisplaySubtaskActive(0))
+ sChat->funcState = 6;
break;
case 6:
if (gMain.newKeys & (A_BUTTON | B_BUTTON))
{
- sub_801F5EC(7, 0);
- gUnknown_02022C84->unk6 = 4;
+ StartDisplaySubtask(CHATDISPLAY_FUNC_DESTROY_YESNO, 0);
+ sChat->funcState = 4;
}
break;
}
}
-static void sub_801E978(void)
+static void Chat_SaveAndExit(void)
{
s8 input;
- switch (gUnknown_02022C84->unk6)
+ switch (sChat->funcState)
{
case 0:
- if (!gUnknown_02022C84->unk18)
+ if (!sChat->changedRegisteredTexts)
{
- gUnknown_02022C84->unk6 = 12;
+ sChat->funcState = 12;
}
else
{
- sub_801F5EC(7, 0);
- gUnknown_02022C84->unk6 = 1;
+ StartDisplaySubtask(CHATDISPLAY_FUNC_DESTROY_YESNO, 0);
+ sChat->funcState = 1;
}
break;
case 1:
- if (!sub_801F644(0))
+ if (!IsDisplaySubtaskActive(0))
{
- sub_801F5EC(14, 0);
- gUnknown_02022C84->unk6 = 2;
+ StartDisplaySubtask(CHATDISPLAY_FUNC_ASK_SAVE, 0);
+ sChat->funcState = 2;
}
break;
case 2:
- input = sub_801FF08();
+ input = ProcessMenuInput();
switch (input)
{
case -1:
case 1:
- gUnknown_02022C84->unk6 = 12;
+ sChat->funcState = 12;
break;
case 0:
- sub_801F5EC(7, 0);
- gUnknown_02022C84->unk6 = 3;
+ StartDisplaySubtask(CHATDISPLAY_FUNC_DESTROY_YESNO, 0);
+ sChat->funcState = 3;
break;
}
break;
case 3:
- if (!sub_801F644(0))
+ if (!IsDisplaySubtaskActive(0))
{
- sub_801F5EC(15, 0);
- gUnknown_02022C84->unk6 = 4;
+ StartDisplaySubtask(CHATDISPLAY_FUNC_ASK_OVERWRITE_SAVE, 0);
+ sChat->funcState = 4;
}
break;
case 4:
- if (!sub_801F644(0))
- gUnknown_02022C84->unk6 = 5;
+ if (!IsDisplaySubtaskActive(0))
+ sChat->funcState = 5;
break;
case 5:
- input = sub_801FF08();
+ input = ProcessMenuInput();
switch (input)
{
case -1:
case 1:
- gUnknown_02022C84->unk6 = 12;
+ sChat->funcState = 12;
break;
case 0:
- sub_801F5EC(7, 0);
- gUnknown_02022C84->unk6 = 6;
+ StartDisplaySubtask(CHATDISPLAY_FUNC_DESTROY_YESNO, 0);
+ sChat->funcState = 6;
break;
}
break;
case 6:
- if (!sub_801F644(0))
+ if (!IsDisplaySubtaskActive(0))
{
- sub_801F5EC(16, 0);
- sub_801EE2C();
- gUnknown_02022C84->unk6 = 7;
+ StartDisplaySubtask(CHATDISPLAY_FUNC_PRINT_SAVING, 0);
+ SaveRegisteredTexts();
+ sChat->funcState = 7;
}
break;
case 7:
- if (!sub_801F644(0))
+ if (!IsDisplaySubtaskActive(0))
{
SetContinueGameWarpStatusToDynamicWarp();
TrySavingData(SAVE_NORMAL);
- gUnknown_02022C84->unk6 = 8;
+ sChat->funcState = 8;
}
break;
case 8:
- sub_801F5EC(17, 0);
- gUnknown_02022C84->unk6 = 9;
+ StartDisplaySubtask(CHATDISPLAY_FUNC_PRINT_SAVED_GAME, 0);
+ sChat->funcState = 9;
break;
case 9:
- if (!sub_801F644(0))
+ if (!IsDisplaySubtaskActive(0))
{
PlaySE(SE_SAVE);
ClearContinueGameWarpStatus2();
- gUnknown_02022C84->unk6 = 10;
+ sChat->funcState = 10;
}
break;
case 10:
- gUnknown_02022C84->unk19 = 0;
- gUnknown_02022C84->unk6 = 11;
+ sChat->afterSaveTimer = 0;
+ sChat->funcState = 11;
break;
case 11:
- gUnknown_02022C84->unk19++;
- if (gUnknown_02022C84->unk19 > 120)
- gUnknown_02022C84->unk6 = 12;
+ sChat->afterSaveTimer++;
+ if (sChat->afterSaveTimer > 120)
+ sChat->funcState = 12;
break;
case 12:
BeginNormalPaletteFade(0xFFFFFFFF, -1, 0, 16, RGB_BLACK);
- gUnknown_02022C84->unk6 = 13;
+ sChat->funcState = 13;
break;
case 13:
if (!gPaletteFade.active)
{
- sub_801F544();
- sub_801DE30();
+ FreeDisplay();
+ FreeUnionRoomChat();
SetMainCallback2(CB2_ReturnToField);
}
break;
}
}
-static void sub_801EBD4(u16 arg0)
+static void SetChatFunction(u16 funcId)
{
- gUnknown_02022C84->unk4 = arg0;
- gUnknown_02022C84->unk6 = 0;
+ sChat->funcId = funcId;
+ sChat->funcState = 0;
}
-static bool32 sub_801EBE4(void)
+static bool32 HandleDPadInput(void)
{
- if (!(gMain.newAndRepeatedKeys & DPAD_UP))
+ do
{
+ if (gMain.newAndRepeatedKeys & DPAD_UP)
+ {
+ if (sChat->currentRow > 0)
+ sChat->currentRow--;
+ else
+ sChat->currentRow = sKeyboardPageMaxRow[sChat->currentPage];
+ break;
+ }
if (gMain.newAndRepeatedKeys & DPAD_DOWN)
{
- if (gUnknown_02022C84->currentRow < sKeyboardPageMaxRow[gUnknown_02022C84->currentPage])
- gUnknown_02022C84->currentRow++;
+ if (sChat->currentRow < sKeyboardPageMaxRow[sChat->currentPage])
+ sChat->currentRow++;
else
- gUnknown_02022C84->currentRow = 0;
-
- return TRUE;
+ sChat->currentRow = 0;
+ break;
}
-
- if (gUnknown_02022C84->currentPage != UNION_ROOM_KB_PAGE_COUNT)
+ if (sChat->currentPage != UNION_ROOM_KB_PAGE_REGISTER)
{
if (gMain.newAndRepeatedKeys & DPAD_LEFT)
{
- if (gUnknown_02022C84->unk11)
- gUnknown_02022C84->unk11--;
+ if (sChat->currentCol > 0)
+ sChat->currentCol--;
else
- gUnknown_02022C84->unk11 = 4;
+ sChat->currentCol = 4;
+ break;
}
else if (gMain.newAndRepeatedKeys & DPAD_RIGHT)
{
- if (gUnknown_02022C84->unk11 > 3)
- gUnknown_02022C84->unk11 = 0;
+ if (sChat->currentCol < 4)
+ sChat->currentCol++;
else
- gUnknown_02022C84->unk11++;
+ sChat->currentCol = 0;
+ break;
}
- else
- {
- return FALSE;
- }
-
- return TRUE;
}
-
return FALSE;
- }
- else
- {
- if (gUnknown_02022C84->currentRow)
- gUnknown_02022C84->currentRow--;
- else
- gUnknown_02022C84->currentRow = sKeyboardPageMaxRow[gUnknown_02022C84->currentPage];
+ } while (0);
- return TRUE;
- }
+ return TRUE;
}
-static void sub_801EC94(void)
+static void AppendTextToMessage(void)
{
int i;
const u8 *charsStr;
@@ -1357,12 +1640,13 @@ static void sub_801EC94(void)
u8 *str;
u8 buffer[21];
- if (gUnknown_02022C84->currentPage != UNION_ROOM_KB_PAGE_COUNT)
+ if (sChat->currentPage != UNION_ROOM_KB_PAGE_REGISTER)
{
- charsStr = sUnionRoomKeyboardText[gUnknown_02022C84->currentPage][gUnknown_02022C84->currentRow];
- for (i = 0; i < gUnknown_02022C84->unk11; i++)
+ // Going to append a single character
+ charsStr = sUnionRoomKeyboardText[sChat->currentPage][sChat->currentRow];
+ for (i = 0; i < sChat->currentCol; i++)
{
- if (*charsStr == CHAR_SPECIAL_F9)
+ if (*charsStr == CHAR_EXTRA_SYMBOL)
charsStr++;
charsStr++;
}
@@ -1371,21 +1655,22 @@ static void sub_801EC94(void)
}
else
{
- u8 *tempStr = StringCopy(buffer, gUnknown_02022C84->unkB9[gUnknown_02022C84->currentRow]);
+ // Going to append registered text string
+ u8 *tempStr = StringCopy(buffer, sChat->registeredTexts[sChat->currentRow]);
tempStr[0] = CHAR_SPACE;
tempStr[1] = EOS;
charsStr = buffer;
strLength = StringLength_Multibyte(buffer);
}
- gUnknown_02022C84->unk14 = gUnknown_02022C84->unk15;
+ sChat->lastBufferCursorPos = sChat->bufferCursorPos;
if (!charsStr)
return;
- str = sub_801EE84();
- while (--strLength != -1 && gUnknown_02022C84->unk15 < 15)
+ str = GetEndOfMessagePtr();
+ while (--strLength != -1 && sChat->bufferCursorPos < MAX_MESSAGE_LENGTH)
{
- if (*charsStr == CHAR_SPECIAL_F9)
+ if (*charsStr == CHAR_EXTRA_SYMBOL)
{
*str = *charsStr;
charsStr++;
@@ -1396,110 +1681,110 @@ static void sub_801EC94(void)
charsStr++;
str++;
- gUnknown_02022C84->unk15++;
+ sChat->bufferCursorPos++;
}
*str = EOS;
}
-static void sub_801ED68(void)
+static void DeleteLastMessageCharacter(void)
{
- gUnknown_02022C84->unk14 = gUnknown_02022C84->unk15;
- if (gUnknown_02022C84->unk15)
+ sChat->lastBufferCursorPos = sChat->bufferCursorPos;
+ if (sChat->bufferCursorPos)
{
- u8 *str = sub_801EEA8();
+ u8 *str = GetLastCharOfMessagePtr();
*str = EOS;
- gUnknown_02022C84->unk15--;
+ sChat->bufferCursorPos--;
}
}
-static void sub_801ED94(void)
+static void SwitchCaseOfLastMessageCharacter(void)
{
u8 *str;
u8 character;
- gUnknown_02022C84->unk14 = gUnknown_02022C84->unk15 - 1;
- str = sub_801EEA8();
- if (*str != CHAR_SPECIAL_F9)
+ sChat->lastBufferCursorPos = sChat->bufferCursorPos - 1;
+ str = GetLastCharOfMessagePtr();
+ if (*str != CHAR_EXTRA_SYMBOL)
{
- character = gUnknown_082F2AA8[*str];
+ character = sCaseToggleTable[*str];
if (character)
*str = character;
}
}
-static bool32 sub_801EDC4(void)
+static bool32 ChatMessageIsNotEmpty(void)
{
- if (gUnknown_02022C84->unk15)
+ if (sChat->bufferCursorPos)
return TRUE;
else
return FALSE;
}
-static void sub_801EDE0(void)
+static void RegisterTextAtRow(void)
{
- u8 *src = sub_801F114();
- StringCopy(gUnknown_02022C84->unkB9[gUnknown_02022C84->currentRow], src);
- gUnknown_02022C84->unk18 = 1;
+ u8 *src = GetLimitedMessageStartPtr();
+ StringCopy(sChat->registeredTexts[sChat->currentRow], src);
+ sChat->changedRegisteredTexts = TRUE;
}
-static void sub_801EE10(void)
+static void ResetMessageEntryBuffer(void)
{
- gUnknown_02022C84->unk1A[0] = EOS;
- gUnknown_02022C84->unk14 = 15;
- gUnknown_02022C84->unk15 = 0;
+ sChat->messageEntryBuffer[0] = EOS;
+ sChat->lastBufferCursorPos = 15;
+ sChat->bufferCursorPos = 0;
}
-static void sub_801EE2C(void)
+static void SaveRegisteredTexts(void)
{
int i;
for (i = 0; i < UNION_ROOM_KB_ROW_COUNT; i++)
- StringCopy(gSaveBlock1Ptr->unk3C88[i], gUnknown_02022C84->unkB9[i]);
+ StringCopy(gSaveBlock1Ptr->registeredTexts[i], sChat->registeredTexts[i]);
}
-static u8 *sub_801EE6C(int arg0)
+static u8 *GetRegisteredTextByRow(int row)
{
- return gUnknown_02022C84->unkB9[arg0];
+ return sChat->registeredTexts[row];
}
-static u8 *sub_801EE84(void)
+static u8 *GetEndOfMessagePtr(void)
{
- u8 *str = gUnknown_02022C84->unk1A;
+ u8 *str = sChat->messageEntryBuffer;
while (*str != EOS)
str++;
return str;
}
-static u8 *sub_801EEA8(void)
+static u8 *GetLastCharOfMessagePtr(void)
{
- u8 *str = gUnknown_02022C84->unk1A;
- u8 *str2 = str;
- while (*str != EOS)
+ u8 *currChar = sChat->messageEntryBuffer;
+ u8 *lastChar = currChar;
+ while (*currChar != EOS)
{
- str2 = str;
- if (*str == CHAR_SPECIAL_F9)
- str++;
- str++;
+ lastChar = currChar;
+ if (*currChar == CHAR_EXTRA_SYMBOL)
+ currChar++;
+ currChar++;
}
- return str2;
+ return lastChar;
}
-static u16 sub_801EED8(void)
+static u16 GetNumOverflowCharsInMessage(void)
{
u8 *str;
u32 i, numChars, strLength;
- strLength = StringLength_Multibyte(gUnknown_02022C84->unk1A);
- str = gUnknown_02022C84->unk1A;
+ strLength = StringLength_Multibyte(sChat->messageEntryBuffer);
+ str = sChat->messageEntryBuffer;
numChars = 0;
if (strLength > 10)
{
strLength -= 10;
for (i = 0; i < strLength; i++)
{
- if (*str == CHAR_SPECIAL_F9)
+ if (*str == CHAR_EXTRA_SYMBOL)
str++;
str++;
@@ -1510,83 +1795,83 @@ static u16 sub_801EED8(void)
return numChars;
}
-static void sub_801EF1C(u8 *arg0)
+static void PrepareSendBuffer_Null(u8 *buffer)
{
- arg0[0] = CHAR_SPACE;
+ buffer[0] = CHAT_MESSAGE_NONE;
}
-static void sub_801EF24(u8 *arg0)
+static void PrepareSendBuffer_Join(u8 *buffer)
{
- arg0[0] = 2;
- StringCopy(&arg0[1], gSaveBlock2Ptr->playerName);
- arg0[1 + (PLAYER_NAME_LENGTH + 1)] = gUnknown_02022C84->unk13;
+ buffer[0] = CHAT_MESSAGE_JOIN;
+ StringCopy(&buffer[1], gSaveBlock2Ptr->playerName);
+ buffer[1 + (PLAYER_NAME_LENGTH + 1)] = sChat->multiplayerId;
}
-static void sub_801EF4C(u8 *arg0)
+static void PrepareSendBuffer_Chat(u8 *buffer)
{
- arg0[0] = 1;
- StringCopy(&arg0[1], gSaveBlock2Ptr->playerName);
- StringCopy(&arg0[1 + (PLAYER_NAME_LENGTH + 1)], gUnknown_02022C84->unk1A);
+ buffer[0] = CHAT_MESSAGE_CHAT;
+ StringCopy(&buffer[1], gSaveBlock2Ptr->playerName);
+ StringCopy(&buffer[1 + (PLAYER_NAME_LENGTH + 1)], sChat->messageEntryBuffer);
}
-static void sub_801EF7C(u8 *arg0)
+static void PrepareSendBuffer_Leave(u8 *buffer)
{
- arg0[0] = 3;
- StringCopy(&arg0[1], gSaveBlock2Ptr->playerName);
- arg0[1 + (PLAYER_NAME_LENGTH + 1)] = gUnknown_02022C84->unk13;
+ buffer[0] = CHAT_MESSAGE_LEAVE;
+ StringCopy(&buffer[1], gSaveBlock2Ptr->playerName);
+ buffer[1 + (PLAYER_NAME_LENGTH + 1)] = sChat->multiplayerId;
sub_8011A50();
}
-static void sub_801EFA8(u8 *arg0)
+static void PrepareSendBuffer_Drop(u8 *buffer)
{
- arg0[0] = 4;
- StringCopy(&arg0[1], gSaveBlock2Ptr->playerName);
- arg0[1 + (PLAYER_NAME_LENGTH + 1)] = gUnknown_02022C84->unk13;
+ buffer[0] = CHAT_MESSAGE_DROP;
+ StringCopy(&buffer[1], gSaveBlock2Ptr->playerName);
+ buffer[1 + (PLAYER_NAME_LENGTH + 1)] = sChat->multiplayerId;
}
-static void sub_801EFD0(u8 *arg0)
+static void PrepareSendBuffer_Disband(u8 *buffer)
{
- arg0[0] = 5;
- StringCopy(&arg0[1], gSaveBlock2Ptr->playerName);
- arg0[1 + (PLAYER_NAME_LENGTH + 1)] = gUnknown_02022C84->unk13;
+ buffer[0] = CHAT_MESSAGE_DISBAND;
+ StringCopy(&buffer[1], gSaveBlock2Ptr->playerName);
+ buffer[1 + (PLAYER_NAME_LENGTH + 1)] = sChat->multiplayerId;
}
-static bool32 sub_801EFF8(u8 *arg0, u8 *arg1)
+static bool32 ProcessReceivedChatMessage(u8 *dest, u8 *recvMessage)
{
u8 *tempStr;
- u8 var0 = *arg1;
- u8 *str = arg1 + 1;
- arg1 = str;
- arg1 += 8;
+ u8 cmd = *recvMessage;
+ u8 *name = recvMessage + 1;
+ recvMessage = name;
+ recvMessage += PLAYER_NAME_LENGTH + 1;
- switch (var0)
+ switch (cmd)
{
- case 2:
- if (gUnknown_02022C84->unk13 != str[8])
+ case CHAT_MESSAGE_JOIN:
+ if (sChat->multiplayerId != name[PLAYER_NAME_LENGTH + 1])
{
DynamicPlaceholderTextUtil_Reset();
- DynamicPlaceholderTextUtil_SetPlaceholderPtr(0, str);
- DynamicPlaceholderTextUtil_ExpandPlaceholders(arg0, gText_F700JoinedChat);
+ DynamicPlaceholderTextUtil_SetPlaceholderPtr(0, name);
+ DynamicPlaceholderTextUtil_ExpandPlaceholders(dest, gText_F700JoinedChat);
return TRUE;
}
break;
- case 1:
- tempStr = StringCopy(arg0, str);
+ case CHAT_MESSAGE_CHAT:
+ tempStr = StringCopy(dest, name);
*(tempStr++) = EXT_CTRL_CODE_BEGIN;
*(tempStr++) = EXT_CTRL_CODE_CLEAR_TO;
*(tempStr++) = 42;
*(tempStr++) = CHAR_COLON;
- StringCopy(tempStr, arg1);
+ StringCopy(tempStr, recvMessage);
return TRUE;
- case 5:
- StringCopy(gUnknown_02022C84->unk79, str);
+ case CHAT_MESSAGE_DISBAND:
+ StringCopy(sChat->hostName, name);
// fall through
- case 3:
- if (gUnknown_02022C84->unk13 != *arg1)
+ case CHAT_MESSAGE_LEAVE:
+ if (sChat->multiplayerId != *recvMessage)
{
DynamicPlaceholderTextUtil_Reset();
- DynamicPlaceholderTextUtil_SetPlaceholderPtr(0, str);
- DynamicPlaceholderTextUtil_ExpandPlaceholders(arg0, gText_F700LeftChat);
+ DynamicPlaceholderTextUtil_SetPlaceholderPtr(0, name);
+ DynamicPlaceholderTextUtil_ExpandPlaceholders(dest, gText_F700LeftChat);
return TRUE;
}
break;
@@ -1597,50 +1882,50 @@ static bool32 sub_801EFF8(u8 *arg0, u8 *arg1)
static u8 GetCurrentKeyboardPage(void)
{
- return gUnknown_02022C84->currentPage;
+ return sChat->currentPage;
}
-static void sub_801F0BC(u8 *arg0, u8 *arg1)
+static void GetCurrentKeyboardColAndRow(u8 *col, u8 *row)
{
- *arg0 = gUnknown_02022C84->unk11;
- *arg1 = gUnknown_02022C84->currentRow;
+ *col = sChat->currentCol;
+ *row = sChat->currentRow;
}
-static u8 *sub_801F0D0(void)
+static u8 *GetMessageEntryBuffer(void)
{
- return gUnknown_02022C84->unk1A;
+ return sChat->messageEntryBuffer;
}
-static int sub_801F0DC(void)
+static int GetLengthOfMessageEntry(void)
{
- u8 *str = sub_801F0D0();
+ u8 *str = GetMessageEntryBuffer();
return StringLength_Multibyte(str);
}
-static void sub_801F0EC(u32 *arg0, u32 *arg1)
+static void GetBufferSelectionRegion(u32 *x, u32 *width)
{
- int diff = gUnknown_02022C84->unk15 - gUnknown_02022C84->unk14;
+ int diff = sChat->bufferCursorPos - sChat->lastBufferCursorPos;
if (diff < 0)
{
diff *= -1;
- *arg0 = gUnknown_02022C84->unk15;
+ *x = sChat->bufferCursorPos;
}
else
{
- *arg0 = gUnknown_02022C84->unk14;
+ *x = sChat->lastBufferCursorPos;
}
- *arg1 = diff;
+ *width = diff;
}
-static u8 *sub_801F114(void)
+static u8 *GetLimitedMessageStartPtr(void)
{
int i;
- u16 numChars = sub_801EED8();
- u8 *str = gUnknown_02022C84->unk1A;
+ u16 numChars = GetNumOverflowCharsInMessage();
+ u8 *str = sChat->messageEntryBuffer;
for (i = 0; i < numChars; i++)
{
- if (*str == CHAR_SPECIAL_F9)
+ if (*str == CHAR_EXTRA_SYMBOL)
*str++;
str++;
@@ -1649,15 +1934,15 @@ static u8 *sub_801F114(void)
return str;
}
-static u16 sub_801F144(void)
+static u16 GetLimitedMessageStartPos(void)
{
u16 count;
u32 i;
- u16 numChars = sub_801EED8();
- u8 *str = gUnknown_02022C84->unk1A;
+ u16 numChars = GetNumOverflowCharsInMessage();
+ u8 *str = sChat->messageEntryBuffer;
for (count = 0, i = 0; i < numChars; count++, i++)
{
- if (*str == CHAR_SPECIAL_F9)
+ if (*str == CHAR_EXTRA_SYMBOL)
str++;
str++;
@@ -1666,56 +1951,63 @@ static u16 sub_801F144(void)
return count;
}
-static u8 *sub_801F180(void)
+static u8 *GetLastReceivedMessage(void)
{
- return gUnknown_02022C84->unk39;
+ return sChat->receivedMessage;
}
-static u8 sub_801F18C(void)
+static u8 GetReceivedPlayerIndex(void)
{
- return gUnknown_02022C84->unk16;
+ return sChat->receivedPlayerIndex;
}
-static int sub_801F198(void)
+static int GetTextEntryCursorPosition(void)
{
- return gUnknown_02022C84->unk15;
+ return sChat->bufferCursorPos;
}
-static int sub_801F1A4(void)
+static int GetShouldShowCaseToggleIcon(void)
{
- u8 *str = sub_801EEA8();
+ u8 *str = GetLastCharOfMessagePtr();
u32 character = *str;
- if (character > 0xFF || gUnknown_082F2AA8[character] == character || gUnknown_082F2AA8[character] == 0)
+ if (character > 0xFF || sCaseToggleTable[character] == character || sCaseToggleTable[character] == 0)
return 3;
else
return 0;
}
-static u8 *sub_801F1D0(void)
+static u8 *GetChatHostName(void)
{
- return gUnknown_02022C84->unk79;
+ return sChat->hostName;
}
-void copy_strings_to_sav1(void)
+void InitUnionRoomChatRegisteredTexts(void)
{
- StringCopy(gSaveBlock1Ptr->unk3C88[0], gText_Hello);
- StringCopy(gSaveBlock1Ptr->unk3C88[1], gText_Pokemon2);
- StringCopy(gSaveBlock1Ptr->unk3C88[2], gText_Trade);
- StringCopy(gSaveBlock1Ptr->unk3C88[3], gText_Battle);
- StringCopy(gSaveBlock1Ptr->unk3C88[4], gText_Lets);
- StringCopy(gSaveBlock1Ptr->unk3C88[5], gText_Ok);
- StringCopy(gSaveBlock1Ptr->unk3C88[6], gText_Sorry);
- StringCopy(gSaveBlock1Ptr->unk3C88[7], gText_YaySmileEmoji);
- StringCopy(gSaveBlock1Ptr->unk3C88[8], gText_ThankYou);
- StringCopy(gSaveBlock1Ptr->unk3C88[9], gText_ByeBye);
+ StringCopy(gSaveBlock1Ptr->registeredTexts[0], gText_Hello);
+ StringCopy(gSaveBlock1Ptr->registeredTexts[1], gText_Pokemon2);
+ StringCopy(gSaveBlock1Ptr->registeredTexts[2], gText_Trade);
+ StringCopy(gSaveBlock1Ptr->registeredTexts[3], gText_Battle);
+ StringCopy(gSaveBlock1Ptr->registeredTexts[4], gText_Lets);
+ StringCopy(gSaveBlock1Ptr->registeredTexts[5], gText_Ok);
+ StringCopy(gSaveBlock1Ptr->registeredTexts[6], gText_Sorry);
+ StringCopy(gSaveBlock1Ptr->registeredTexts[7], gText_YaySmileEmoji);
+ StringCopy(gSaveBlock1Ptr->registeredTexts[8], gText_ThankYou);
+ StringCopy(gSaveBlock1Ptr->registeredTexts[9], gText_ByeBye);
}
-static void sub_801F2B4(u8 taskId)
+#define tState data[0]
+#define tI data[1]
+#define tCurrLinkPlayer data[2]
+#define tBlockReceivedStatus data[3]
+#define tLinkPlayerCount data[4]
+#define tNextState data[5]
+
+static void Task_ReceiveChatMessage(u8 taskId)
{
u8 *buffer;
s16 *data = gTasks[taskId].data;
- switch (data[0])
+ switch (tState)
{
case 0:
if (!gReceivedRemoteLinkPlayers)
@@ -1724,115 +2016,122 @@ static void sub_801F2B4(u8 taskId)
return;
}
- data[0] = 1;
+ tState = 1;
// fall through
case 1:
- data[4] = GetLinkPlayerCount();
- if (gUnknown_02022C84->unkD != data[4])
+ tLinkPlayerCount = GetLinkPlayerCount();
+ if (sChat->linkPlayerCount != tLinkPlayerCount)
{
- data[0] = 2;
- gUnknown_02022C84->unkD = data[4];
+ tState = 2;
+ sChat->linkPlayerCount = tLinkPlayerCount;
return;
}
- data[3] = GetBlockReceivedStatus();
- if (!data[3] && sub_8011A9C())
+ tBlockReceivedStatus = GetBlockReceivedStatus();
+ if (!tBlockReceivedStatus && sub_8011A9C())
return;
- data[1] = 0;
- data[0] = 3;
+ tI = 0;
+ tState = 3;
// fall through
case 3:
- for (; data[1] < 5 && ((data[3] >> data[1]) & 1) == 0; data[1]++)
+ for (; tI < 5 && ((tBlockReceivedStatus >> tI) & 1) == 0; tI++)
;
- if (data[1] == 5)
+ if (tI == 5)
{
- data[0] = 1;
+ tState = 1;
return;
}
- data[2] = data[1];
- ResetBlockReceivedFlag(data[2]);
- buffer = (u8 *)gBlockRecvBuffer[data[1]];
+ tCurrLinkPlayer = tI;
+ ResetBlockReceivedFlag(tCurrLinkPlayer);
+ buffer = (u8 *)gBlockRecvBuffer[tI];
switch (buffer[0])
{
default:
- case 1: data[5] = 3; break;
- case 2: data[5] = 3; break;
- case 3: data[5] = 4; break;
- case 4: data[5] = 5; break;
- case 5: data[5] = 6; break;
+ case CHAT_MESSAGE_CHAT: tNextState = 3; break;
+ case CHAT_MESSAGE_JOIN: tNextState = 3; break;
+ case CHAT_MESSAGE_LEAVE: tNextState = 4; break;
+ case CHAT_MESSAGE_DROP: tNextState = 5; break;
+ case CHAT_MESSAGE_DISBAND: tNextState = 6; break;
}
- if (sub_801EFF8(gUnknown_02022C84->unk39, (u8 *)gBlockRecvBuffer[data[1]]))
+ if (ProcessReceivedChatMessage(sChat->receivedMessage, (u8 *)gBlockRecvBuffer[tI]))
{
- gUnknown_02022C84->unk16 = data[1];
- sub_801F5EC(12, 2);
- data[0] = 7;
+ sChat->receivedPlayerIndex = tI;
+ StartDisplaySubtask(CHATDISPLAY_FUNC_SCROLL_CHAT, 2);
+ tState = 7;
}
else
{
- data[0] = data[5];
+ tState = tNextState;
}
- data[1]++;
+ tI++;
break;
case 7:
- if (!sub_801F644(2))
- data[0] = data[5];
+ if (!IsDisplaySubtaskActive(2))
+ tState = tNextState;
break;
case 4:
- if (!gUnknown_02022C84->unk13 && data[2])
+ if (!sChat->multiplayerId && tCurrLinkPlayer)
{
if (GetLinkPlayerCount() == 2)
{
sub_80104B0();
- gUnknown_02022C84->unk17 = 1;
+ sChat->exitType = 1;
DestroyTask(taskId);
return;
}
- sub_8011DE0(data[2]);
+ sub_8011DE0(tCurrLinkPlayer);
}
- data[0] = 3;
+ tState = 3;
break;
case 5:
- if (gUnknown_02022C84->unk13)
- gUnknown_02022C84->unk17 = 2;
+ if (sChat->multiplayerId)
+ sChat->exitType = 2;
DestroyTask(taskId);
break;
case 6:
- gUnknown_02022C84->unk17 = 3;
+ sChat->exitType = 3;
DestroyTask(taskId);
break;
case 2:
if (!sub_8011A9C())
{
- if (!gUnknown_02022C84->unk13)
- sub_80110B8(gUnknown_02022C84->unkD);
+ if (!sChat->multiplayerId)
+ sub_80110B8(sChat->linkPlayerCount);
- data[0] = 1;
+ tState = 1;
}
break;
}
}
-static bool8 sub_801F4D0(void)
+#undef tNextState
+#undef tLinkPlayerCount
+#undef tBlockReceivedStatus
+#undef tCurrLinkPlayer
+#undef tI
+#undef tState
+
+static bool8 TryAllocDisplay(void)
{
- gUnknown_02022C88 = Alloc(sizeof(*gUnknown_02022C88));
- if (gUnknown_02022C88 && sub_8020890())
+ sDisplay = Alloc(sizeof(struct UnionRoomChatDisplay));
+ if (sDisplay && TryAllocSprites())
{
ResetBgsAndClearDma3BusyFlags(0);
- InitBgsFromTemplates(0, gUnknown_082F2C60, ARRAY_COUNT(gUnknown_082F2C60));
- InitWindows(gUnknown_082F2C70);
- reset_temp_tile_data_buffers();
- sub_8020770();
- sub_801F574(gUnknown_02022C88);
- sub_801F580();
- sub_801F5EC(0, 0);
+ InitBgsFromTemplates(0, sBgTemplates, ARRAY_COUNT(sBgTemplates));
+ InitWindows(sWinTemplates);
+ ResetTempTileDataBuffers();
+ InitScanlineEffect();
+ InitDisplay(sDisplay);
+ ResetDisplaySubtasks();
+ StartDisplaySubtask(CHATDISPLAY_FUNC_LOAD_GFX, 0);
return TRUE;
}
else
@@ -1841,114 +2140,114 @@ static bool8 sub_801F4D0(void)
}
}
-static bool32 sub_801F534(void)
+static bool32 IsDisplaySubtask0Active(void)
{
- return sub_801F644(0);
+ return IsDisplaySubtaskActive(0);
}
-static void sub_801F544(void)
+static void FreeDisplay(void)
{
- sub_80208D0();
- if (gUnknown_02022C88)
- FREE_AND_SET_NULL(gUnknown_02022C88);
+ FreeSprites();
+ if (sDisplay)
+ FREE_AND_SET_NULL(sDisplay);
FreeAllWindowBuffers();
gScanlineEffect.state = 3;
}
-static void sub_801F574(struct UnionRoomChat2 *arg0)
+static void InitDisplay(struct UnionRoomChatDisplay *display)
{
- arg0->unk18 = 0xFF;
- arg0->unk1E = 0xFF;
- arg0->unk1A = 0;
+ display->yesNoMenuWindowId = 0xFF;
+ display->messageWindowId = 0xFF;
+ display->currLine = 0;
}
-static void sub_801F580(void)
+static void ResetDisplaySubtasks(void)
{
int i;
- if (!gUnknown_02022C88)
+ if (!sDisplay)
return;
- for (i = 0; i < 3; i++)
+ for (i = 0; i < (int)ARRAY_COUNT(sDisplay->subtasks); i++)
{
- gUnknown_02022C88->unk0[i].unk0 = sub_801FDD8;
- gUnknown_02022C88->unk0[i].unk4 = 0;
- gUnknown_02022C88->unk0[i].unk5 = 0;
+ sDisplay->subtasks[i].callback = Display_Dummy;
+ sDisplay->subtasks[i].active = FALSE;
+ sDisplay->subtasks[i].state = 0;
}
}
-static void sub_801F5B8(void)
+static void RunDisplaySubtasks(void)
{
int i;
- if (!gUnknown_02022C88)
+ if (!sDisplay)
return;
- for (i = 0; i < 3; i++)
+ for (i = 0; i < (int)ARRAY_COUNT(sDisplay->subtasks); i++)
{
- gUnknown_02022C88->unk0[i].unk4 =
- gUnknown_02022C88->unk0[i].unk0(&gUnknown_02022C88->unk0[i].unk5);
+ sDisplay->subtasks[i].active =
+ sDisplay->subtasks[i].callback(&sDisplay->subtasks[i].state);
}
}
-static void sub_801F5EC(u16 arg0, u8 arg1)
+static void StartDisplaySubtask(u16 subtaskId, u8 assignId)
{
u32 i;
- gUnknown_02022C88->unk0[arg1].unk0 = sub_801FDD8;
- for (i = 0; i < 21; i++)
+ sDisplay->subtasks[assignId].callback = Display_Dummy;
+ for (i = 0; i < ARRAY_COUNT(sDisplaySubtasks); i++)
{
- if (gUnknown_082F2C98[i].unk0 == arg0)
+ if (sDisplaySubtasks[i].idx == subtaskId)
{
- gUnknown_02022C88->unk0[arg1].unk0 = gUnknown_082F2C98[i].unk4;
- gUnknown_02022C88->unk0[arg1].unk4 = 1;
- gUnknown_02022C88->unk0[arg1].unk5 = 0;
+ sDisplay->subtasks[assignId].callback = sDisplaySubtasks[i].callback;
+ sDisplay->subtasks[assignId].active = TRUE;
+ sDisplay->subtasks[assignId].state = 0;
break;
}
}
}
-static bool8 sub_801F644(u8 arg0)
+static bool8 IsDisplaySubtaskActive(u8 id)
{
- return gUnknown_02022C88->unk0[arg0].unk4;
+ return sDisplay->subtasks[id].active;
}
-bool32 sub_801F658(u8 *state)
+static bool32 Display_LoadGfx(u8 *state)
{
- if (free_temp_tile_data_buffers_if_possible() == TRUE)
+ if (FreeTempTileDataBuffersIfPossible() == TRUE)
return TRUE;
switch (*state)
{
case 0:
- sub_8020480();
- sub_8020538();
+ ResetGpuBgState();
+ SetBgTilemapBuffers();
break;
case 1:
- sub_8020584();
+ ClearBg0();
break;
case 2:
- sub_80205B4();
+ LoadChatWindowBorderGfx();
break;
case 3:
- sub_8020604();
+ LoadChatWindowGfx();
break;
case 4:
sub_8020680();
break;
case 5:
- sub_80206A4();
- sub_80206D0();
- sub_8020740();
- sub_80206E8();
+ LoadChatMessagesWindow();
+ LoadKeyboardWindow();
+ LoadKeyboardSwapWindow();
+ LoadTextEntryWindow();
break;
case 6:
if (!IsDma3ManagerBusyWithBgCopy())
{
- sub_80208E8();
- sub_8020A68();
- sub_8020B20();
+ CreateKeyboardCursorSprite();
+ CreateTextEntrySprites();
+ CreateRButtonSprites();
}
break;
default:
@@ -1959,12 +2258,12 @@ bool32 sub_801F658(u8 *state)
return TRUE;
}
-bool32 sub_801F6F8(u8 *state)
+static bool32 Display_ShowKeyboardSwapMenu(u8 *state)
{
switch (*state)
{
case 0:
- sub_80203B0();
+ ShowKeyboardSwapMenu();
CopyWindowToVram(3, 3);
break;
case 1:
@@ -1975,12 +2274,12 @@ bool32 sub_801F6F8(u8 *state)
return TRUE;
}
-bool32 sub_801F730(u8 *state)
+static bool32 Display_HideKeyboardSwapMenu(u8 *state)
{
switch (*state)
{
case 0:
- sub_802040C();
+ HideKeyboardSwapMenu();
CopyWindowToVram(3, 3);
break;
case 1:
@@ -1991,16 +2290,16 @@ bool32 sub_801F730(u8 *state)
return TRUE;
}
-bool32 sub_801F768(u8 *state)
+static bool32 Display_SwitchPages(u8 *state)
{
switch (*state)
{
case 0:
- sub_802091C(TRUE);
+ SetKeyboardCursorInvisibility(TRUE);
if (sub_8020320())
return TRUE;
- sub_80201A4();
+ PrintCurrentKeyboardPage();
CopyWindowToVram(2, 2);
break;
case 1:
@@ -2011,9 +2310,9 @@ bool32 sub_801F768(u8 *state)
if (sub_8020368())
return TRUE;
- sub_802093C();
- sub_802091C(FALSE);
- sub_8020B80();
+ MoveKeyboardCursor();
+ SetKeyboardCursorInvisibility(FALSE);
+ UpdateRButtonLabel();
return FALSE;
}
@@ -2021,20 +2320,20 @@ bool32 sub_801F768(u8 *state)
return TRUE;
}
-bool32 sub_801F7D4(u8 *state)
+static bool32 Display_MoveKeyboardCursor(u8 *state)
{
- sub_802093C();
+ MoveKeyboardCursor();
return FALSE;
}
-bool32 sub_801F7E0(u8 *state)
+static bool32 Display_AskQuitChatting(u8 *state)
{
switch (*state)
{
case 0:
- sub_801FF18(0, 0);
- sub_801FDDC(23, 11, 1);
- CopyWindowToVram(gUnknown_02022C88->unk1E, 3);
+ AddStdMessageWindow(STDMESSAGE_QUIT_CHATTING, 0);
+ AddYesNoMenuAt(23, 11, 1);
+ CopyWindowToVram(sDisplay->messageWindowId, 3);
break;
case 1:
return IsDma3ManagerBusyWithBgCopy();
@@ -2044,21 +2343,21 @@ bool32 sub_801F7E0(u8 *state)
return TRUE;
}
-bool32 sub_801F82C(u8 *state)
+static bool32 Display_DestroyYesNoDialog(u8 *state)
{
switch (*state)
{
case 0:
- sub_8020094();
- sub_801FEBC();
+ HideStdMessageWindow();
+ HideYesNoMenuWindow();
CopyBgTilemapBufferToVram(0);
break;
case 1:
if (IsDma3ManagerBusyWithBgCopy())
return TRUE;
- sub_80200C8();
- sub_801FEE4();
+ DestroyStdMessageWindow();
+ DestroyYesNoMenuWindow();
return FALSE;
}
@@ -2066,24 +2365,24 @@ bool32 sub_801F82C(u8 *state)
return TRUE;
}
-bool32 sub_801F870(u8 *state)
+static bool32 Display_UpdateMessageBuffer(u8 *state)
{
- u32 var0, var1;
+ u32 x, width;
u8 *str;
switch (*state)
{
case 0:
- sub_801F0EC(&var0, &var1);
- sub_80200EC(var0, var1, 0);
- str = sub_801F0D0();
- sub_8020118(0, str, 3, 1, 2);
+ GetBufferSelectionRegion(&x, &width);
+ FillTextEntryWindow(x, width, 0);
+ str = GetMessageEntryBuffer();
+ DrawTextEntryMessage(0, str, 3, 1, 2);
CopyWindowToVram(1, 2);
break;
case 1:
if (!IsDma3ManagerBusyWithBgCopy())
{
- sub_8020B80();
+ UpdateRButtonLabel();
return FALSE;
}
return TRUE;
@@ -2093,27 +2392,27 @@ bool32 sub_801F870(u8 *state)
return TRUE;
}
-bool32 sub_801F8DC(u8 *state)
+static bool32 Display_AskRegisterText(u8 *state)
{
- u16 var0;
+ u16 x;
u8 *str;
u16 length;
switch (*state)
{
case 0:
- var0 = sub_801F144();
- str = sub_801F114();
+ x = GetLimitedMessageStartPos();
+ str = GetLimitedMessageStartPtr();
length = StringLength_Multibyte(str);
- sub_80200EC(var0, length, PIXEL_FILL(6));
- sub_8020118(var0, str, 0, 4, 5);
+ FillTextEntryWindow(x, length, PIXEL_FILL(6));
+ DrawTextEntryMessage(x, str, 0, 4, 5);
CopyWindowToVram(1, 2);
break;
case 1:
if (!IsDma3ManagerBusyWithBgCopy())
{
- sub_801FF18(1, 16);
- CopyWindowToVram(gUnknown_02022C88->unk1E, 3);
+ AddStdMessageWindow(STDMESSAGE_REGISTER_WHERE, 16);
+ CopyWindowToVram(sDisplay->messageWindowId, 3);
}
else
{
@@ -2122,7 +2421,7 @@ bool32 sub_801F8DC(u8 *state)
break;
case 2:
if (!IsDma3ManagerBusyWithBgCopy())
- sub_80209AC(1);
+ SetRegisteredTextPalette(TRUE);
else
return TRUE;
break;
@@ -2134,27 +2433,27 @@ bool32 sub_801F8DC(u8 *state)
return TRUE;
}
-bool32 sub_801F984(u8 *state)
+static bool32 Display_CancelRegister(u8 *state)
{
- u16 var0;
+ u16 x;
u8 *str;
u16 length;
switch (*state)
{
case 0:
- var0 = sub_801F144();
- str = sub_801F114();
+ x = GetLimitedMessageStartPos();
+ str = GetLimitedMessageStartPtr();
length = StringLength_Multibyte(str);
- sub_80200EC(var0, length, PIXEL_FILL(0));
- sub_8020118(var0, str, 3, 1, 2);
+ FillTextEntryWindow(x, length, PIXEL_FILL(0));
+ DrawTextEntryMessage(x, str, 3, 1, 2);
CopyWindowToVram(1, 2);
break;
case 1:
if (!IsDma3ManagerBusyWithBgCopy())
{
- sub_8020094();
- CopyWindowToVram(gUnknown_02022C88->unk1E, 3);
+ HideStdMessageWindow();
+ CopyWindowToVram(sDisplay->messageWindowId, 3);
}
else
{
@@ -2164,8 +2463,8 @@ bool32 sub_801F984(u8 *state)
case 2:
if (!IsDma3ManagerBusyWithBgCopy())
{
- sub_80209AC(0);
- sub_80200C8();
+ SetRegisteredTextPalette(FALSE);
+ DestroyStdMessageWindow();
}
else
{
@@ -2180,12 +2479,12 @@ bool32 sub_801F984(u8 *state)
return TRUE;
}
-bool32 sub_801FA2C(u8 *state)
+static bool32 Display_ReturnToKeyboard(u8 *state)
{
switch (*state)
{
case 0:
- sub_80201A4();
+ PrintCurrentKeyboardPage();
CopyWindowToVram(2, 2);
(*state)++;
break;
@@ -2199,48 +2498,48 @@ bool32 sub_801FA2C(u8 *state)
return TRUE;
}
-bool32 sub_801FA68(u8 *state)
+static bool32 Display_ScrollChat(u8 *state)
{
- u16 var0;
+ u16 row;
u8 *str;
- u8 var1;
+ u8 colorIdx;
switch (*state)
{
case 0:
- var0 = gUnknown_02022C88->unk1A;
- str = sub_801F180();
- var1 = sub_801F18C();
- sub_8020420(var0, str, var1);
+ row = sDisplay->currLine;
+ str = GetLastReceivedMessage();
+ colorIdx = GetReceivedPlayerIndex();
+ PrintChatMessage(row, str, colorIdx);
CopyWindowToVram(0, 2);
break;
case 1:
if (IsDma3ManagerBusyWithBgCopy())
return TRUE;
- if (gUnknown_02022C88->unk1A < 9)
+ if (sDisplay->currLine < 9)
{
- gUnknown_02022C88->unk1A++;
+ sDisplay->currLine++;
*state = 4;
return FALSE;
}
else
{
- gUnknown_02022C88->unk1C = 0;
+ sDisplay->scrollCount = 0;
(*state)++;
}
// fall through
case 2:
ScrollWindow(0, 0, 5, PIXEL_FILL(1));
CopyWindowToVram(0, 2);
- gUnknown_02022C88->unk1C++;
+ sDisplay->scrollCount++;
(*state)++;
// fall through
case 3:
if (IsDma3ManagerBusyWithBgCopy())
return TRUE;
- if (gUnknown_02022C88->unk1C < 3)
+ if (sDisplay->scrollCount < 3)
{
(*state)--;
return TRUE;
@@ -2256,28 +2555,28 @@ bool32 sub_801FA68(u8 *state)
return TRUE;
}
-bool32 sub_801FB44(u8 *state)
+static bool32 Display_AnimateKeyboardCursor(u8 *state)
{
switch (*state)
{
case 0:
- sub_80209E0();
+ StartKeyboardCursorAnim();
(*state)++;
break;
case 1:
- return sub_8020A1C();
+ return TryKeyboardCursorReopen();
}
return TRUE;
}
-bool32 sub_801FB70(u8 *state)
+static bool32 Display_PrintInputText(u8 *state)
{
switch (*state)
{
case 0:
- sub_801FF18(3, 16);
- CopyWindowToVram(gUnknown_02022C88->unk1E, 3);
+ AddStdMessageWindow(STDMESSAGE_INPUT_TEXT, 16);
+ CopyWindowToVram(sDisplay->messageWindowId, 3);
(*state)++;
break;
case 1:
@@ -2287,13 +2586,13 @@ bool32 sub_801FB70(u8 *state)
return TRUE;
}
-bool32 sub_801FBB4(u8 *state)
+static bool32 Display_PrintExitingChat(u8 *state)
{
switch (*state)
{
case 0:
- sub_801FF18(4, 0);
- CopyWindowToVram(gUnknown_02022C88->unk1E, 3);
+ AddStdMessageWindow(STDMESSAGE_EXITING_CHAT, 0);
+ CopyWindowToVram(sDisplay->messageWindowId, 3);
(*state)++;
break;
case 1:
@@ -2303,7 +2602,7 @@ bool32 sub_801FBB4(u8 *state)
return TRUE;
}
-bool32 sub_801FBF8(u8 *state)
+static bool32 Display_PrintLeaderLeft(u8 *state)
{
u8 *str;
@@ -2311,10 +2610,10 @@ bool32 sub_801FBF8(u8 *state)
{
case 0:
DynamicPlaceholderTextUtil_Reset();
- str = sub_801F1D0();
+ str = GetChatHostName();
DynamicPlaceholderTextUtil_SetPlaceholderPtr(0, str);
- sub_801FF18(5, 0);
- CopyWindowToVram(gUnknown_02022C88->unk1E, 3);
+ AddStdMessageWindow(STDMESSAGE_LEADER_LEFT, 0);
+ CopyWindowToVram(sDisplay->messageWindowId, 3);
(*state)++;
break;
case 1:
@@ -2324,14 +2623,14 @@ bool32 sub_801FBF8(u8 *state)
return TRUE;
}
-bool32 sub_801FC4C(u8 *state)
+static bool32 Display_AskSave(u8 *state)
{
switch (*state)
{
case 0:
- sub_801FF18(6, 0);
- sub_801FDDC(23, 10, 1);
- CopyWindowToVram(gUnknown_02022C88->unk1E, 3);
+ AddStdMessageWindow(STDMESSAGE_ASK_SAVE, 0);
+ AddYesNoMenuAt(23, 10, 1);
+ CopyWindowToVram(sDisplay->messageWindowId, 3);
(*state)++;
break;
case 1:
@@ -2341,14 +2640,14 @@ bool32 sub_801FC4C(u8 *state)
return TRUE;
}
-bool32 sub_801FC9C(u8 *state)
+static bool32 Display_AskOverwriteSave(u8 *state)
{
switch (*state)
{
case 0:
- sub_801FF18(7, 0);
- sub_801FDDC(23, 10, 1);
- CopyWindowToVram(gUnknown_02022C88->unk1E, 3);
+ AddStdMessageWindow(STDMESSAGE_ASK_OVERWRITE, 0);
+ AddYesNoMenuAt(23, 10, 1);
+ CopyWindowToVram(sDisplay->messageWindowId, 3);
(*state)++;
break;
case 1:
@@ -2358,13 +2657,13 @@ bool32 sub_801FC9C(u8 *state)
return TRUE;
}
-bool32 sub_801FCEC(u8 *state)
+static bool32 Display_PrintSavingDontTurnOff(u8 *state)
{
switch (*state)
{
case 0:
- sub_801FF18(8, 0);
- CopyWindowToVram(gUnknown_02022C88->unk1E, 3);
+ AddStdMessageWindow(STDMESSAGE_SAVING_NO_OFF, 0);
+ CopyWindowToVram(sDisplay->messageWindowId, 3);
(*state)++;
break;
case 1:
@@ -2374,15 +2673,15 @@ bool32 sub_801FCEC(u8 *state)
return TRUE;
}
-bool32 sub_801FD30(u8 *state)
+static bool32 Display_PrintSavedTheGame(u8 *state)
{
switch (*state)
{
case 0:
DynamicPlaceholderTextUtil_Reset();
DynamicPlaceholderTextUtil_SetPlaceholderPtr(0, gSaveBlock2Ptr->playerName);
- sub_801FF18(9, 0);
- CopyWindowToVram(gUnknown_02022C88->unk1E, 3);
+ AddStdMessageWindow(STDMESSAGE_SAVED_THE_GAME, 0);
+ CopyWindowToVram(sDisplay->messageWindowId, 3);
(*state)++;
break;
case 1:
@@ -2392,14 +2691,14 @@ bool32 sub_801FD30(u8 *state)
return TRUE;
}
-bool32 sub_801FD88(u8 *state)
+static bool32 Display_AskConfirmLeaderLeave(u8 *state)
{
switch (*state)
{
case 0:
- sub_801FF18(10, 0);
- sub_801FDDC(23, 10, 1);
- CopyWindowToVram(gUnknown_02022C88->unk1E, 3);
+ AddStdMessageWindow(STDMESSAGE_WARN_LEADER_LEAVE, 0);
+ AddYesNoMenuAt(23, 10, 1);
+ CopyWindowToVram(sDisplay->messageWindowId, 3);
(*state)++;
break;
case 1:
@@ -2409,12 +2708,12 @@ bool32 sub_801FD88(u8 *state)
return TRUE;
}
-static bool32 sub_801FDD8(u8 *arg0)
+static bool32 Display_Dummy(u8 *state)
{
return FALSE;
}
-static void sub_801FDDC(u8 left, u8 top, u8 initialCursorPos)
+static void AddYesNoMenuAt(u8 left, u8 top, u8 initialCursorPos)
{
struct WindowTemplate template;
template.bg = 0;
@@ -2424,42 +2723,42 @@ static void sub_801FDDC(u8 left, u8 top, u8 initialCursorPos)
template.height = 4;
template.paletteNum = 14;
template.baseBlock = 0x52;
- gUnknown_02022C88->unk18 = AddWindow(&template);
- if (gUnknown_02022C88->unk18 != 0xFF)
+ sDisplay->yesNoMenuWindowId = AddWindow(&template);
+ if (sDisplay->yesNoMenuWindowId != 0xFF)
{
- FillWindowPixelBuffer(gUnknown_02022C88->unk18, PIXEL_FILL(1));
- PutWindowTilemap(gUnknown_02022C88->unk18);
- AddTextPrinterParameterized(gUnknown_02022C88->unk18, 1, gText_Yes, 8, 1, TEXT_SPEED_FF, NULL);
- AddTextPrinterParameterized(gUnknown_02022C88->unk18, 1, gText_No, 8, 17, TEXT_SPEED_FF, NULL);
- DrawTextBorderOuter(gUnknown_02022C88->unk18, 1, 13);
- InitMenuInUpperLeftCornerPlaySoundWhenAPressed(gUnknown_02022C88->unk18, 2, initialCursorPos);
+ FillWindowPixelBuffer(sDisplay->yesNoMenuWindowId, PIXEL_FILL(1));
+ PutWindowTilemap(sDisplay->yesNoMenuWindowId);
+ AddTextPrinterParameterized(sDisplay->yesNoMenuWindowId, 1, gText_Yes, 8, 1, TEXT_SPEED_FF, NULL);
+ AddTextPrinterParameterized(sDisplay->yesNoMenuWindowId, 1, gText_No, 8, 17, TEXT_SPEED_FF, NULL);
+ DrawTextBorderOuter(sDisplay->yesNoMenuWindowId, 1, 13);
+ InitMenuInUpperLeftCornerPlaySoundWhenAPressed(sDisplay->yesNoMenuWindowId, 2, initialCursorPos);
}
}
-static void sub_801FEBC(void)
+static void HideYesNoMenuWindow(void)
{
- if (gUnknown_02022C88->unk18 != 0xFF)
+ if (sDisplay->yesNoMenuWindowId != 0xFF)
{
- ClearStdWindowAndFrameToTransparent(gUnknown_02022C88->unk18, FALSE);
- ClearWindowTilemap(gUnknown_02022C88->unk18);
+ ClearStdWindowAndFrameToTransparent(sDisplay->yesNoMenuWindowId, FALSE);
+ ClearWindowTilemap(sDisplay->yesNoMenuWindowId);
}
}
-static void sub_801FEE4(void)
+static void DestroyYesNoMenuWindow(void)
{
- if (gUnknown_02022C88->unk18 != 0xFF)
+ if (sDisplay->yesNoMenuWindowId != 0xFF)
{
- RemoveWindow(gUnknown_02022C88->unk18);
- gUnknown_02022C88->unk18 = 0xFF;
+ RemoveWindow(sDisplay->yesNoMenuWindowId);
+ sDisplay->yesNoMenuWindowId = 0xFF;
}
}
-static s8 sub_801FF08(void)
+static s8 ProcessMenuInput(void)
{
return Menu_ProcessInput();
}
-static void sub_801FF18(int arg0, u16 arg1)
+static void AddStdMessageWindow(int msgId, u16 bg0vofs)
{
const u8 *str;
int windowId;
@@ -2471,43 +2770,43 @@ static void sub_801FF18(int arg0, u16 arg1)
template.height = 4;
template.paletteNum = 14;
template.baseBlock = 0x6A;
- if (gUnknown_082F2D40[arg0].unkA)
+ if (sDisplayStdMessages[msgId].useWiderBox)
{
template.tilemapLeft -= 7;
template.width += 7;
}
- gUnknown_02022C88->unk1E = AddWindow(&template);
- windowId = gUnknown_02022C88->unk1E;
- if (gUnknown_02022C88->unk1E == 0xFF)
+ sDisplay->messageWindowId = AddWindow(&template);
+ windowId = sDisplay->messageWindowId;
+ if (sDisplay->messageWindowId == 0xFF)
return;
- if (gUnknown_082F2D40[arg0].unk9)
+ if (sDisplayStdMessages[msgId].hasPlaceholders)
{
- DynamicPlaceholderTextUtil_ExpandPlaceholders(gUnknown_02022C88->unk22, gUnknown_082F2D40[arg0].unk0);
- str = gUnknown_02022C88->unk22;
+ DynamicPlaceholderTextUtil_ExpandPlaceholders(sDisplay->expandedPlaceholdersBuffer, sDisplayStdMessages[msgId].text);
+ str = sDisplay->expandedPlaceholdersBuffer;
}
else
{
- str = gUnknown_082F2D40[arg0].unk0;
+ str = sDisplayStdMessages[msgId].text;
}
- ChangeBgY(0, arg1 * 256, 0);
+ ChangeBgY(0, bg0vofs * 256, 0);
FillWindowPixelBuffer(windowId, PIXEL_FILL(1));
PutWindowTilemap(windowId);
- if (gUnknown_082F2D40[arg0].unk4 == 1)
+ if (sDisplayStdMessages[msgId].boxType == 1)
{
DrawTextBorderInner(windowId, 0xA, 2);
AddTextPrinterParameterized5(
windowId,
1,
str,
- gUnknown_082F2D40[arg0].unk5 + 8,
- gUnknown_082F2D40[arg0].unk6 + 8,
+ sDisplayStdMessages[msgId].x + 8,
+ sDisplayStdMessages[msgId].y + 8,
TEXT_SPEED_FF,
NULL,
- gUnknown_082F2D40[arg0].unk7,
- gUnknown_082F2D40[arg0].unk8);
+ sDisplayStdMessages[msgId].letterSpacing,
+ sDisplayStdMessages[msgId].lineSpacing);
}
else
{
@@ -2516,105 +2815,103 @@ static void sub_801FF18(int arg0, u16 arg1)
windowId,
1,
str,
- gUnknown_082F2D40[arg0].unk5,
- gUnknown_082F2D40[arg0].unk6,
+ sDisplayStdMessages[msgId].x,
+ sDisplayStdMessages[msgId].y,
TEXT_SPEED_FF,
NULL,
- gUnknown_082F2D40[arg0].unk7,
- gUnknown_082F2D40[arg0].unk8);
+ sDisplayStdMessages[msgId].letterSpacing,
+ sDisplayStdMessages[msgId].lineSpacing);
}
- gUnknown_02022C88->unk1E = windowId;
+ sDisplay->messageWindowId = windowId;
}
-static void sub_8020094(void)
+static void HideStdMessageWindow(void)
{
- if (gUnknown_02022C88->unk1E != 0xFF)
+ if (sDisplay->messageWindowId != 0xFF)
{
- ClearStdWindowAndFrameToTransparent(gUnknown_02022C88->unk1E, FALSE);
- ClearWindowTilemap(gUnknown_02022C88->unk1E);
+ ClearStdWindowAndFrameToTransparent(sDisplay->messageWindowId, FALSE);
+ ClearWindowTilemap(sDisplay->messageWindowId);
}
ChangeBgY(0, 0, 0);
}
-static void sub_80200C8(void)
+static void DestroyStdMessageWindow(void)
{
- if (gUnknown_02022C88->unk1E != 0xFF)
+ if (sDisplay->messageWindowId != 0xFF)
{
- RemoveWindow(gUnknown_02022C88->unk1E);
- gUnknown_02022C88->unk1E = 0xFF;
+ RemoveWindow(sDisplay->messageWindowId);
+ sDisplay->messageWindowId = 0xFF;
}
}
-static void sub_80200EC(u16 x, u16 width, u8 fillValue)
+static void FillTextEntryWindow(u16 x, u16 width, u8 fillValue)
{
FillWindowPixelRect(1, fillValue, x * 8, 1, width * 8, 14);
}
-static void sub_8020118(u16 x, u8 *str, u8 fillValue, u8 arg3, u8 arg4)
+static void DrawTextEntryMessage(u16 x, u8 *str, u8 bgColor, u8 fgColor, u8 shadowColor)
{
- u8 *str2;
- u8 sp[38];
- if (fillValue)
- sub_80200EC(x, sub_801F198() - x, fillValue);
+ u8 color[3];
+ u8 strBuffer[35];
+ if (bgColor != TEXT_COLOR_TRANSPARENT)
+ FillTextEntryWindow(x, GetTextEntryCursorPosition() - x, bgColor);
- sp[0] = fillValue;
- sp[1] = arg3;
- sp[2] = arg4;
- str2 = &sp[4];
- str2[0] = EXT_CTRL_CODE_BEGIN;
- str2[1] = EXT_CTRL_CODE_MIN_LETTER_SPACING;
- str2[2] = 8;
- StringCopy(&str2[3], str);
- AddTextPrinterParameterized3(1, 2, x * 8, 1, sp, TEXT_SPEED_FF, str2);
+ color[0] = bgColor;
+ color[1] = fgColor;
+ color[2] = shadowColor;
+ strBuffer[0] = EXT_CTRL_CODE_BEGIN;
+ strBuffer[1] = EXT_CTRL_CODE_MIN_LETTER_SPACING;
+ strBuffer[2] = 8;
+ StringCopy(&strBuffer[3], str);
+ AddTextPrinterParameterized3(1, 2, x * 8, 1, color, TEXT_SPEED_FF, strBuffer);
}
-static void sub_80201A4(void)
+static void PrintCurrentKeyboardPage(void)
{
u8 page;
int i;
- int var1;
u16 left;
u16 top;
- u8 sp[52];
- u8 *str;
+ u8 color[3];
+ u8 str[45];
u8 *str2;
FillWindowPixelBuffer(2, PIXEL_FILL(15));
page = GetCurrentKeyboardPage();
- sp[0] = TEXT_COLOR_TRANSPARENT;
- sp[1] = TEXT_DYNAMIC_COLOR_5;
- sp[2] = TEXT_DYNAMIC_COLOR_4;
- if (page != UNION_ROOM_KB_PAGE_COUNT)
+ color[0] = TEXT_COLOR_TRANSPARENT;
+ color[1] = TEXT_DYNAMIC_COLOR_5;
+ color[2] = TEXT_DYNAMIC_COLOR_4;
+ if (page != UNION_ROOM_KB_PAGE_REGISTER)
{
- str = &sp[4];
str[0] = EXT_CTRL_CODE_BEGIN;
str[1] = EXT_CTRL_CODE_MIN_LETTER_SPACING;
- var1 = 8;
- str[2] = var1;
- left = var1;
+ str[2] = 8;
+
if (page == UNION_ROOM_KB_PAGE_EMOJI)
left = 6;
+ else
+ left = 8;
for (i = 0, top = 0; i < UNION_ROOM_KB_ROW_COUNT; i++, top += 12)
{
if (!sUnionRoomKeyboardText[page][i])
return;
- StringCopy(&sp[7], sUnionRoomKeyboardText[page][i]);
- AddTextPrinterParameterized3(2, 0, left, top, sp, TEXT_SPEED_FF, &sp[4]);
+ StringCopy(&str[3], sUnionRoomKeyboardText[page][i]);
+ AddTextPrinterParameterized3(2, 0, left, top, color, TEXT_SPEED_FF, str);
}
}
else
{
left = 4;
- for (i = 0, top = 0; i < 10; i++, top += 12)
+ for (i = 0, top = 0; i < UNION_ROOM_KB_ROW_COUNT; i++, top += 12)
{
- str2 = sub_801EE6C(i);
+ str2 = GetRegisteredTextByRow(i);
if (GetStringWidth(0, str2, 0) <= 40)
{
- AddTextPrinterParameterized3(2, 0, left, top, sp, TEXT_SPEED_FF, str2);
+ AddTextPrinterParameterized3(2, 0, left, top, color, TEXT_SPEED_FF, str2);
}
else
{
@@ -2622,11 +2919,11 @@ static void sub_80201A4(void)
do
{
length--;
- StringCopyN_Multibyte(&sp[4], str2, length);
- } while (GetStringWidth(0, &sp[4], 0) > 35);
+ StringCopyN_Multibyte(str, str2, length);
+ } while (GetStringWidth(0, str, 0) > 35);
- AddTextPrinterParameterized3(2, 0, left, top, sp, TEXT_SPEED_FF, &sp[4]);
- AddTextPrinterParameterized3(2, 0, left + 35, top, sp, TEXT_SPEED_FF, gText_Ellipsis);
+ AddTextPrinterParameterized3(2, 0, left, top, color, TEXT_SPEED_FF, str);
+ AddTextPrinterParameterized3(2, 0, left + 35, top, color, TEXT_SPEED_FF, sText_Ellipsis);
}
}
}
@@ -2634,68 +2931,69 @@ static void sub_80201A4(void)
static bool32 sub_8020320(void)
{
- if (gUnknown_02022C88->unk20 < 56)
+ if (sDisplay->bg1hofs < 56)
{
- gUnknown_02022C88->unk20 += 12;
- if (gUnknown_02022C88->unk20 >= 56)
- gUnknown_02022C88->unk20 = 56;
+ sDisplay->bg1hofs += 12;
+ if (sDisplay->bg1hofs >= 56)
+ sDisplay->bg1hofs = 56;
- if (gUnknown_02022C88->unk20 < 56)
+ if (sDisplay->bg1hofs < 56)
{
- sub_80207C0(gUnknown_02022C88->unk20);
+ sub_80207C0(sDisplay->bg1hofs);
return TRUE;
}
}
- sub_8020818(gUnknown_02022C88->unk20);
+ sub_8020818(sDisplay->bg1hofs);
return FALSE;
}
static bool32 sub_8020368(void)
{
- if (gUnknown_02022C88->unk20 > 0)
+ if (sDisplay->bg1hofs > 0)
{
- gUnknown_02022C88->unk20 -= 12;
- if (gUnknown_02022C88->unk20 <= 0)
- gUnknown_02022C88->unk20 = 0;
+ sDisplay->bg1hofs -= 12;
+ if (sDisplay->bg1hofs <= 0)
+ sDisplay->bg1hofs = 0;
- if (gUnknown_02022C88->unk20 > 0)
+ if (sDisplay->bg1hofs > 0)
{
- sub_80207C0(gUnknown_02022C88->unk20);
+ sub_80207C0(sDisplay->bg1hofs);
return TRUE;
}
}
- sub_8020818(gUnknown_02022C88->unk20);
+ sub_8020818(sDisplay->bg1hofs);
return FALSE;
}
-static void sub_80203B0(void)
+static void ShowKeyboardSwapMenu(void)
{
FillWindowPixelBuffer(3, PIXEL_FILL(1));
DrawTextBorderOuter(3, 1, 13);
- PrintTextArray(3, 2, 8, 1, 14, 5, gUnknown_082F2DC8);
+ PrintTextArray(3, 2, 8, 1, 14, 5, sKeyboardPageTitleTexts);
sub_81983AC(3, 2, 0, 1, 14, 5, GetCurrentKeyboardPage());
PutWindowTilemap(3);
}
-static void sub_802040C(void)
+static void HideKeyboardSwapMenu(void)
{
ClearStdWindowAndFrameToTransparent(3, FALSE);
ClearWindowTilemap(3);
}
-static void sub_8020420(u16 row, u8 *str, u8 arg2)
+static void PrintChatMessage(u16 row, u8 *str, u8 colorIdx)
{
+ // colorIdx: 0 = grey, 1 = red, 2 = green, 3 = blue
u8 color[3];
color[0] = TEXT_COLOR_WHITE;
- color[1] = arg2 * 2 + 2;
- color[2] = arg2 * 2 + 3;
+ color[1] = colorIdx * 2 + 2;
+ color[2] = colorIdx * 2 + 3;
FillWindowPixelRect(0, PIXEL_FILL(1), 0, row * 15, 168, 15);
AddTextPrinterParameterized3(0, 2, 0, row * 15 + 1, color, TEXT_SPEED_FF, str);
}
-static void sub_8020480(void)
+static void ResetGpuBgState(void)
{
ChangeBgX(0, 0, 0);
ChangeBgY(0, 0, 0);
@@ -2720,83 +3018,83 @@ static void sub_8020480(void)
SetGpuReg(REG_OFFSET_WINOUT, WINOUT_WIN01_BG_ALL | WINOUT_WIN01_OBJ | WINOUT_WIN01_CLR);
}
-static void sub_8020538(void)
+static void SetBgTilemapBuffers(void)
{
- SetBgTilemapBuffer(0, gUnknown_02022C88->unk128);
- SetBgTilemapBuffer(1, gUnknown_02022C88->unk928);
- SetBgTilemapBuffer(3, gUnknown_02022C88->unk1128);
- SetBgTilemapBuffer(2, gUnknown_02022C88->unk1928);
+ SetBgTilemapBuffer(0, sDisplay->bg0Buffer);
+ SetBgTilemapBuffer(1, sDisplay->bg1Buffer);
+ SetBgTilemapBuffer(3, sDisplay->bg3Buffer);
+ SetBgTilemapBuffer(2, sDisplay->bg2Buffer);
}
-static void sub_8020584(void)
+static void ClearBg0(void)
{
RequestDma3Fill(0, (void *)BG_CHAR_ADDR(0), 0x20, 1);
FillBgTilemapBufferRect_Palette0(0, 0, 0, 0, 32, 32);
CopyBgTilemapBufferToVram(0);
}
-static void sub_80205B4(void)
+static void LoadChatWindowBorderGfx(void)
{
- LoadPalette(gUnknown_08DD4BD0, 0x70, 0x20);
- LoadPalette(gUnknown_08DD4BB0, 0xC0, 0x20);
- decompress_and_copy_tile_data_to_vram(1, gUnknown_08DD4BF0, 0, 0, 0);
- CopyToBgTilemapBuffer(1, gUnknown_08DD4C4C, 0, 0);
+ LoadPalette(gUnionRoomChat_Window_Pal2, 0x70, 0x20);
+ LoadPalette(gUnionRoomChat_Window_Pal1, 0xC0, 0x20);
+ DecompressAndCopyTileDataToVram(1, gUnionRoomChat_Border_Gfx, 0, 0, 0);
+ CopyToBgTilemapBuffer(1, gUnionRoomChat_Border_Tilemap, 0, 0);
CopyBgTilemapBufferToVram(1);
}
-static void sub_8020604(void)
+static void LoadChatWindowGfx(void)
{
u8 *ptr;
- LoadPalette(gLinkMiscMenu_Pal, 0, 0x20);
- ptr = decompress_and_copy_tile_data_to_vram(2, gLinkMiscMenu_Gfx, 0, 0, 0);
+ LoadPalette(gUnionRoomChat_Background_Pal, 0, 0x20);
+ ptr = DecompressAndCopyTileDataToVram(2, gUnionRoomChat_Background_Gfx, 0, 0, 0);
if (ptr)
{
- CpuFastCopy(&ptr[0x220], gUnknown_02022C88->unk2128, 0x20);
- CpuFastCopy(&ptr[0x420], gUnknown_02022C88->unk2148, 0x20);
+ CpuFastCopy(&ptr[0x220], sDisplay->unk2128, 0x20);
+ CpuFastCopy(&ptr[0x420], sDisplay->unk2148, 0x20);
}
- CopyToBgTilemapBuffer(2, gLinkMiscMenu_Tilemap, 0, 0);
+ CopyToBgTilemapBuffer(2, gUnionRoomChat_Background_Tilemap, 0, 0);
CopyBgTilemapBufferToVram(2);
}
static void sub_8020680(void)
{
- LoadPalette(gUnknown_082F2C20, 0x80, 0x20);
+ LoadPalette(sUnk_Palette1, 0x80, 0x20);
RequestDma3Fill(0, (void *)BG_CHAR_ADDR(1) + 0x20, 0x20, 1);
}
-static void sub_80206A4(void)
+static void LoadChatMessagesWindow(void)
{
- LoadPalette(gUnknown_082F2C40, 0xF0, 0x20);
+ LoadPalette(sUnk_Palette2, 0xF0, 0x20);
PutWindowTilemap(0);
FillWindowPixelBuffer(0, PIXEL_FILL(1));
CopyWindowToVram(0, 3);
}
-static void sub_80206D0(void)
+static void LoadKeyboardWindow(void)
{
PutWindowTilemap(2);
- sub_80201A4();
+ PrintCurrentKeyboardPage();
CopyWindowToVram(2, 3);
}
-static void sub_80206E8(void)
+static void LoadTextEntryWindow(void)
{
int i;
- u8 var0[2];
- var0[0] = 0;
- var0[1] = 0xFF;
+ u8 unused[2];
+ unused[0] = 0;
+ unused[1] = 0xFF;
- for (i = 0; i < 15; i++)
- BlitBitmapToWindow(1, gUnknown_02022C88->unk2128, i * 8, 0, 8, 16);
+ for (i = 0; i < MAX_MESSAGE_LENGTH; i++)
+ BlitBitmapToWindow(1, sDisplay->unk2128, i * 8, 0, 8, 16);
FillWindowPixelBuffer(1, PIXEL_FILL(0));
PutWindowTilemap(1);
CopyWindowToVram(1, 3);
}
-static void sub_8020740(void)
+static void LoadKeyboardSwapWindow(void)
{
FillWindowPixelBuffer(3, PIXEL_FILL(1));
LoadUserWindowBorderGfx(3, 1, 0xD0);
@@ -2804,110 +3102,110 @@ static void sub_8020740(void)
LoadPalette(gUnknown_0860F074, 0xE0, 0x20);
}
-static void sub_8020770(void)
+static void InitScanlineEffect(void)
{
struct ScanlineEffectParams params;
params.dmaControl = SCANLINE_EFFECT_DMACNT_16BIT;
params.dmaDest = &REG_BG1HOFS;
params.initState = 1;
params.unused9 = 0;
- gUnknown_02022C88->unk20 = 0;
+ sDisplay->bg1hofs = 0;
CpuFastFill(0, gScanlineEffectRegBuffers, sizeof(gScanlineEffectRegBuffers));
ScanlineEffect_SetParams(params);
}
-static void sub_80207C0(s16 arg0)
+static void sub_80207C0(s16 bg1hofs)
{
- CpuFill16(arg0, gScanlineEffectRegBuffers[gScanlineEffect.srcBuffer], 0x120);
- CpuFill16(0, gScanlineEffectRegBuffers[gScanlineEffect.srcBuffer] + 0x90, 0x20);
+ CpuFill16(bg1hofs, gScanlineEffectRegBuffers[gScanlineEffect.srcBuffer], 0x120);
+ CpuFill16(0, gScanlineEffectRegBuffers[gScanlineEffect.srcBuffer] + 0x90, 0x20);
}
-static void sub_8020818(s16 arg0)
+static void sub_8020818(s16 bg1hofs)
{
- CpuFill16(arg0, gScanlineEffectRegBuffers[0], 0x120);
- CpuFill16(0, gScanlineEffectRegBuffers[0] + 0x90, 0x20);
- CpuFill16(arg0, gScanlineEffectRegBuffers[0] + 0x3C0, 0x120);
- CpuFill16(0, gScanlineEffectRegBuffers[0] + 0x450, 0x20);
+ CpuFill16(bg1hofs, gScanlineEffectRegBuffers[0], 0x120);
+ CpuFill16(0, gScanlineEffectRegBuffers[0] + 0x90, 0x20);
+ CpuFill16(bg1hofs, gScanlineEffectRegBuffers[0] + 0x3C0, 0x120);
+ CpuFill16(0, gScanlineEffectRegBuffers[0] + 0x450, 0x20);
}
-static bool32 sub_8020890(void)
+static bool32 TryAllocSprites(void)
{
u32 i;
- for (i = 0; i < 5; i++)
- LoadCompressedSpriteSheet(&gUnknown_082F3134[i]);
+ for (i = 0; i < ARRAY_COUNT(sSpriteSheets); i++)
+ LoadCompressedSpriteSheet(&sSpriteSheets[i]);
- LoadSpritePalette(&gUnknown_082F315C);
- gUnknown_02022C8C = Alloc(0x18);
- if (!gUnknown_02022C8C)
+ LoadSpritePalette(&sSpritePalette);
+ sSprites = Alloc(sizeof(struct UnionRoomChatSprites));
+ if (!sSprites)
return FALSE;
return TRUE;
}
-static void sub_80208D0(void)
+static void FreeSprites(void)
{
- if (gUnknown_02022C8C)
- Free(gUnknown_02022C8C);
+ if (sSprites)
+ Free(sSprites);
}
-static void sub_80208E8(void)
+static void CreateKeyboardCursorSprite(void)
{
- u8 spriteId = CreateSprite(&gUnknown_082F319C, 10, 24, 0);
- gUnknown_02022C8C->unk0 = &gSprites[spriteId];
+ u8 spriteId = CreateSprite(&sSpriteTemplate_KeyboardCursor, 10, 24, 0);
+ sSprites->keyboardCursor = &gSprites[spriteId];
}
-static void sub_802091C(bool32 invisible)
+static void SetKeyboardCursorInvisibility(bool32 invisible)
{
- gUnknown_02022C8C->unk0->invisible = invisible;
+ sSprites->keyboardCursor->invisible = invisible;
}
-static void sub_802093C(void)
+static void MoveKeyboardCursor(void)
{
u8 x, y;
u8 page = GetCurrentKeyboardPage();
- sub_801F0BC(&x, &y);
- if (page != UNION_ROOM_KB_PAGE_COUNT)
+ GetCurrentKeyboardColAndRow(&x, &y);
+ if (page != UNION_ROOM_KB_PAGE_REGISTER)
{
- StartSpriteAnim(gUnknown_02022C8C->unk0, 0);
- gUnknown_02022C8C->unk0->pos1.x = x * 8 + 10;
- gUnknown_02022C8C->unk0->pos1.y = y * 12 + 24;
+ StartSpriteAnim(sSprites->keyboardCursor, 0);
+ sSprites->keyboardCursor->pos1.x = x * 8 + 10;
+ sSprites->keyboardCursor->pos1.y = y * 12 + 24;
}
else
{
- StartSpriteAnim(gUnknown_02022C8C->unk0, 2);
- gUnknown_02022C8C->unk0->pos1.x = 24;
- gUnknown_02022C8C->unk0->pos1.y = y * 12 + 24;
+ StartSpriteAnim(sSprites->keyboardCursor, 2);
+ sSprites->keyboardCursor->pos1.x = 24;
+ sSprites->keyboardCursor->pos1.y = y * 12 + 24;
}
}
-static void sub_80209AC(int arg0)
+static void SetRegisteredTextPalette(bool32 registering)
{
- const u16 *palette = &gUnknown_082F2DF0[arg0 * 2 + 1];
+ const u16 *palette = &sUnionRoomChatInterfacePal[registering * 2 + 1];
u8 index = IndexOfSpritePaletteTag(0);
LoadPalette(palette, index * 16 + 0x101, 4);
}
-static void sub_80209E0(void)
+static void StartKeyboardCursorAnim(void)
{
- if (GetCurrentKeyboardPage() != UNION_ROOM_KB_PAGE_COUNT)
- StartSpriteAnim(gUnknown_02022C8C->unk0, 1);
+ if (GetCurrentKeyboardPage() != UNION_ROOM_KB_PAGE_REGISTER)
+ StartSpriteAnim(sSprites->keyboardCursor, 1);
else
- StartSpriteAnim(gUnknown_02022C8C->unk0, 3);
+ StartSpriteAnim(sSprites->keyboardCursor, 3);
- gUnknown_02022C8C->unk14 = 0;
+ sSprites->cursorBlinkTimer = 0;
}
-static bool32 sub_8020A1C(void)
+static bool32 TryKeyboardCursorReopen(void)
{
- if (gUnknown_02022C8C->unk14 > 3)
+ if (sSprites->cursorBlinkTimer > 3)
return FALSE;
- if (++gUnknown_02022C8C->unk14 > 3)
+ if (++sSprites->cursorBlinkTimer > 3)
{
- if (GetCurrentKeyboardPage() != UNION_ROOM_KB_PAGE_COUNT)
- StartSpriteAnim(gUnknown_02022C8C->unk0, 0);
+ if (GetCurrentKeyboardPage() != UNION_ROOM_KB_PAGE_REGISTER)
+ StartSpriteAnim(sSprites->keyboardCursor, 0);
else
- StartSpriteAnim(gUnknown_02022C8C->unk0, 2);
+ StartSpriteAnim(sSprites->keyboardCursor, 2);
return FALSE;
}
@@ -2915,29 +3213,29 @@ static bool32 sub_8020A1C(void)
return TRUE;
}
-static void sub_8020A68(void)
+static void CreateTextEntrySprites(void)
{
- u8 spriteId = CreateSprite(&gUnknown_082F31BC, 76, 152, 2);
- gUnknown_02022C8C->unk8 = &gSprites[spriteId];
- spriteId = CreateSprite(&gUnknown_082F31D4, 64, 152, 1);
- gUnknown_02022C8C->unk4 = &gSprites[spriteId];
+ u8 spriteId = CreateSprite(&sSpriteTemplate_TextEntryCursor, 76, 152, 2);
+ sSprites->textEntryCursor = &gSprites[spriteId];
+ spriteId = CreateSprite(&sSpriteTemplate_TextEntryArrow, 64, 152, 1);
+ sSprites->textEntryArrow = &gSprites[spriteId];
}
-static void sub_8020ABC(struct Sprite *sprite)
+static void SpriteCB_TextEntryCursor(struct Sprite *sprite)
{
- int var0 = sub_801F198();
- if (var0 == 15)
+ int pos = GetTextEntryCursorPosition();
+ if (pos == MAX_MESSAGE_LENGTH)
{
- sprite->invisible = 1;
+ sprite->invisible = TRUE;
}
else
{
- sprite->invisible = 0;
- sprite->pos1.x = var0 * 8 + 76;
+ sprite->invisible = FALSE;
+ sprite->pos1.x = pos * 8 + 76;
}
}
-static void sub_8020AF4(struct Sprite *sprite)
+static void SpriteCB_TextEntryArrow(struct Sprite *sprite)
{
if (++sprite->data[0] > 4)
{
@@ -2947,40 +3245,42 @@ static void sub_8020AF4(struct Sprite *sprite)
}
}
-static void sub_8020B20(void)
+static void CreateRButtonSprites(void)
{
- u8 spriteId = CreateSprite(&gUnknown_082F322C, 8, 152, 3);
- gUnknown_02022C8C->unkC = &gSprites[spriteId];
- spriteId = CreateSprite(&gUnknown_082F3244, 32, 152, 4);
- gUnknown_02022C8C->unk10 = &gSprites[spriteId];
- gUnknown_02022C8C->unk10->invisible = 1;
+ u8 spriteId = CreateSprite(&sSpriteTemplate_RButtonIcon, 8, 152, 3);
+ sSprites->rButtonIcon = &gSprites[spriteId];
+ spriteId = CreateSprite(&sSpriteTemplate_RButtonLabels, 32, 152, 4);
+ sSprites->rButtonLabel = &gSprites[spriteId];
+ sSprites->rButtonLabel->invisible = TRUE;
}
-static void sub_8020B80(void)
+static void UpdateRButtonLabel(void)
{
- if (GetCurrentKeyboardPage() == UNION_ROOM_KB_PAGE_COUNT)
+ if (GetCurrentKeyboardPage() == UNION_ROOM_KB_PAGE_REGISTER)
{
- if (sub_801F0DC() != 0)
+ if (GetLengthOfMessageEntry() != 0)
{
- gUnknown_02022C8C->unk10->invisible = 0;
- StartSpriteAnim(gUnknown_02022C8C->unk10, 3);
+ // REGISTER
+ sSprites->rButtonLabel->invisible = FALSE;
+ StartSpriteAnim(sSprites->rButtonLabel, 3);
}
else
{
- gUnknown_02022C8C->unk10->invisible = 1;
+ sSprites->rButtonLabel->invisible = TRUE;
}
}
else
{
- int anim = sub_801F1A4();
+ int anim = GetShouldShowCaseToggleIcon();
if (anim == 3)
{
- gUnknown_02022C8C->unk10->invisible = 1;
+ sSprites->rButtonLabel->invisible = TRUE;
}
else
{
- gUnknown_02022C8C->unk10->invisible = 0;
- StartSpriteAnim(gUnknown_02022C8C->unk10, anim);
+ // A <--> a (toggle case)
+ sSprites->rButtonLabel->invisible = FALSE;
+ StartSpriteAnim(sSprites->rButtonLabel, anim);
}
}
diff --git a/src/union_room_player_avatar.c b/src/union_room_player_avatar.c
index 8a09306c0..c012fd84d 100644
--- a/src/union_room_player_avatar.c
+++ b/src/union_room_player_avatar.c
@@ -8,100 +8,125 @@
#include "union_room.h"
#include "constants/event_objects.h"
#include "constants/event_object_movement.h"
-#include "constants/flags.h"
-EWRAM_DATA struct UnkStruct_8019BA8 * gUnknown_02022C64 = NULL;
-EWRAM_DATA u32 gUnknown_02022C68 = 0;
-
-static u8 sub_8019DF4(void);
-static u32 sub_8019F8C(u32 playerIdx, u32 arg1);
-static void sub_801A3B0(s32 arg0, s32 arg1, u8 arg2);
-
-ALIGNED(4) const u8 gUnknown_082F072C[][10] = {
- {0x21, 0x2c, 0x1f, 0x23, 0x25, 0x24, 0x41, 0x42},
- {0x22, 0x28, 0x20, 0x2f, 0x2f, 0x0e, 0x14, 0x2d}
+#define UR_SPRITE_START_ID (MAX_SPRITES - MAX_UNION_ROOM_PLAYERS)
+#define UR_PLAYER_SPRITE_ID(playerIdx, facingDir)(5 * playerIdx + facingDir)
+
+static EWRAM_DATA struct UnionRoomObject * sUnionObjWork = NULL;
+static EWRAM_DATA u32 sUnionObjRefreshTimer = 0;
+
+static u8 CreateTask_AnimateUnionRoomPlayers(void);
+static u32 IsUnionRoomPlayerInvisible(u32, u32);
+static void SetUnionRoomObjectFacingDirection(s32, s32, u8);
+
+static const u8 sUnionRoomObjGfxIds[GENDER_COUNT][MAX_UNION_ROOM_PLAYERS + 2] = {
+ [MALE] = {
+ OBJ_EVENT_GFX_MAN_3,
+ OBJ_EVENT_GFX_BLACK_BELT,
+ OBJ_EVENT_GFX_CAMPER,
+ OBJ_EVENT_GFX_YOUNGSTER,
+ OBJ_EVENT_GFX_PSYCHIC_M,
+ OBJ_EVENT_GFX_BUG_CATCHER,
+ OBJ_EVENT_GFX_MAN_4,
+ OBJ_EVENT_GFX_MAN_5
+ },
+ [FEMALE] = {
+ OBJ_EVENT_GFX_WOMAN_5,
+ OBJ_EVENT_GFX_HEX_MANIAC,
+ OBJ_EVENT_GFX_PICNICKER,
+ OBJ_EVENT_GFX_LASS,
+ OBJ_EVENT_GFX_LASS,
+ OBJ_EVENT_GFX_GIRL_3,
+ OBJ_EVENT_GFX_WOMAN_2,
+ OBJ_EVENT_GFX_BEAUTY
+ }
};
-static const s16 gUnknown_082F0740[][2] = {
- {0x4, 0x6},
- {0xd, 0x8},
- {0xa, 0x6},
- {0x1, 0x8},
- {0xd, 0x4},
- {0x7, 0x4},
- {0x1, 0x4},
- {0x7, 0x8}
+static const s16 sUnionRoomPlayerCoords[MAX_UNION_ROOM_PLAYERS][2] = {
+ { 4, 6},
+ {13, 8},
+ {10, 6},
+ { 1, 8},
+ {13, 4},
+ { 7, 4},
+ { 1, 4},
+ { 7, 8}
};
-static const s8 gUnknown_082F0760[][2] = {
- { 0, 0},
- { 1, 0},
- { 0, -1},
- {-1, 0},
- { 0, 1}
+static const s8 sFacingDirectionOffsets[][2] = {
+ [DIR_NONE] = { 0, 0},
+ [DIR_SOUTH] = { 1, 0},
+ [DIR_NORTH] = { 0, -1},
+ [DIR_WEST] = {-1, 0},
+ [DIR_EAST] = { 0, 1}
};
-static const u8 gUnknown_082F076A[] = {
- 0x00, 0x02, 0x01, 0x04, 0x03
+static const u8 sOppositeFacingDirection[] = {
+ [DIR_NONE] = DIR_NONE,
+ [DIR_SOUTH] = DIR_NORTH,
+ [DIR_NORTH] = DIR_SOUTH,
+ [DIR_WEST] = DIR_EAST,
+ [DIR_EAST] = DIR_WEST
};
-static const u8 gUnknown_082F076F[] = {
- 0x01, 0x03, 0x01, 0x04, 0x02
+static const u8 sNextFacingDirection[] = {
+ [DIR_NONE] = DIR_SOUTH,
+ [DIR_SOUTH] = DIR_WEST,
+ [DIR_NORTH] = DIR_SOUTH,
+ [DIR_WEST] = DIR_EAST,
+ [DIR_EAST] = DIR_NORTH
};
-static const u8 gUnknown_082F0774[] = {
- 0x09, 0x08, 0x07, 0x02, 0x06, 0x05, 0x04, 0x03,
- 0xbf, 0x02, 0xc0, 0x02, 0xc1, 0x02, 0xc2, 0x02,
- 0xc3, 0x02, 0xc4, 0x02, 0xc5, 0x02, 0xc6, 0x02
+// Local id 1 is the Nurse/Attendant, 2-9 are link players
+static const u8 sUnionRoomLocalIds[] = { 9, 8, 7, 2, 6, 5, 4, 3 };
+
+static const u16 sUnknown[] = {
+ 0x2BF,
+ 0x2C0,
+ 0x2C1,
+ 0x2C2,
+ 0x2C3,
+ 0x2C4,
+ 0x2C5,
+ 0x2C6
};
-static const u8 gUnknown_082F078C[2] = {
+static const u8 sMovement_UnionPlayerExit[2] = {
MOVEMENT_ACTION_FLY_UP,
MOVEMENT_ACTION_STEP_END
};
-static const u8 gUnknown_082F078E[2] = {
+static const u8 sMovement_UnionPlayerEnter[2] = {
MOVEMENT_ACTION_FLY_DOWN,
MOVEMENT_ACTION_STEP_END
};
-static bool32 is_walking_or_running(void)
+static bool32 IsPlayerStandingStill(void)
{
- if (gPlayerAvatar.tileTransitionState == 2 || gPlayerAvatar.tileTransitionState == 0)
- {
+ if (gPlayerAvatar.tileTransitionState == T_TILE_CENTER || gPlayerAvatar.tileTransitionState == T_NOT_MOVING)
return TRUE;
- }
else
- {
return FALSE;
- }
}
-static u8 sub_8019978(u32 a0, u32 a1)
+static u8 GetUnionRoomPlayerGraphicsId(u32 gender, u32 id)
{
- return gUnknown_082F072C[a0][a1 % 8];
+ return sUnionRoomObjGfxIds[gender][id % MAX_UNION_ROOM_PLAYERS];
}
-static void sub_8019990(u32 a0, u32 a1, s32 * a2, s32 * a3)
+static void GetUnionRoomPlayerFacingCoords(u32 playerIdx, u32 direction, s32 * x, s32 * y)
{
- *a2 = gUnknown_082F0740[a0][0] + gUnknown_082F0760[a1][0] + 7;
- *a3 = gUnknown_082F0740[a0][1] + gUnknown_082F0760[a1][1] + 7;
+ *x = sUnionRoomPlayerCoords[playerIdx][0] + sFacingDirectionOffsets[direction][0] + 7;
+ *y = sUnionRoomPlayerCoords[playerIdx][1] + sFacingDirectionOffsets[direction][1] + 7;
}
-static bool32 sub_80199E0(u32 a0, u32 a1, s32 a2, s32 a3)
+static bool32 IsUnionRoomPlayerFacingTileAt(u32 playerIdx, u32 direction, s32 x, s32 y)
{
- if (gUnknown_082F0740[a0][0] + gUnknown_082F0760[a1][0] + 7 != a2)
- {
- return FALSE;
- }
- else if (gUnknown_082F0740[a0][1] + gUnknown_082F0760[a1][1] + 7 != a3)
- {
- return FALSE;
- }
- else
- {
+ if ((sUnionRoomPlayerCoords[playerIdx][0] + sFacingDirectionOffsets[direction][0] + 7 == x)
+ && (sUnionRoomPlayerCoords[playerIdx][1] + sFacingDirectionOffsets[direction][1] + 7 == y))
return TRUE;
- }
+ else
+ return FALSE;
}
static bool32 IsUnionRoomPlayerHidden(u32 player_idx)
@@ -126,19 +151,19 @@ static void SetUnionRoomPlayerGfx(u32 playerIdx, u32 gfxId)
static void CreateUnionRoomPlayerObjectEvent(u32 playerIdx)
{
- TrySpawnObjectEvent(gUnknown_082F0774[playerIdx], gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup);
+ TrySpawnObjectEvent(sUnionRoomLocalIds[playerIdx], gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup);
}
static void RemoveUnionRoomPlayerObjectEvent(u32 playerIdx)
{
- RemoveObjectEventByLocalIdAndMap(gUnknown_082F0774[playerIdx], gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup);
+ RemoveObjectEventByLocalIdAndMap(sUnionRoomLocalIds[playerIdx], gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup);
}
static bool32 SetUnionRoomPlayerEnterExitMovement(u32 playerIdx, const u8 * movement)
{
u8 objectId;
struct ObjectEvent * object;
- if (TryGetObjectEventIdByLocalIdAndMap(gUnknown_082F0774[playerIdx], gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, &objectId))
+ if (TryGetObjectEventIdByLocalIdAndMap(sUnionRoomLocalIds[playerIdx], gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, &objectId))
{
return FALSE;
}
@@ -154,11 +179,11 @@ static bool32 SetUnionRoomPlayerEnterExitMovement(u32 playerIdx, const u8 * move
return TRUE;
}
-static bool32 sub_8019B3C(u32 playerIdx)
+static bool32 TryReleaseUnionRoomPlayerObjectEvent(u32 playerIdx)
{
u8 objectId;
struct ObjectEvent * object;
- if (TryGetObjectEventIdByLocalIdAndMap(gUnknown_082F0774[playerIdx], gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, &objectId))
+ if (TryGetObjectEventIdByLocalIdAndMap(sUnionRoomLocalIds[playerIdx], gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, &objectId))
{
return TRUE;
}
@@ -178,39 +203,39 @@ static bool32 sub_8019B3C(u32 playerIdx)
return TRUE;
}
-u8 sub_8019BA8(struct UnkStruct_8019BA8 * ptr)
+u8 InitUnionRoomPlayerObjects(struct UnionRoomObject * players)
{
s32 i;
- gUnknown_02022C68 = 0;
- gUnknown_02022C64 = ptr;
- for (i = 0; i < 8; i++)
+ sUnionObjRefreshTimer = 0;
+ sUnionObjWork = players;
+ for (i = 0; i < MAX_UNION_ROOM_PLAYERS; i++)
{
- ptr[i].field_0 = 0;
- ptr[i].field_1 = 0;
- ptr[i].field_2 = 0;
- ptr[i].field_3 = 0;
+ players[i].state = 0;
+ players[i].gfxId = 0;
+ players[i].animState = 0;
+ players[i].schedAnim = UNION_ROOM_SPAWN_NONE;
}
- return sub_8019DF4();
+ return CreateTask_AnimateUnionRoomPlayers();
}
-static bool32 sub_8019BDC(s8 * a0, u32 playerIdx, struct UnkStruct_8019BA8 * ptr)
+static bool32 AnimateUnionRoomPlayerDespawn(s8 * state, u32 playerIdx, struct UnionRoomObject * ptr)
{
- switch (*a0)
+ switch (*state)
{
case 0:
- if (SetUnionRoomPlayerEnterExitMovement(playerIdx, gUnknown_082F078C) == TRUE)
+ if (SetUnionRoomPlayerEnterExitMovement(playerIdx, sMovement_UnionPlayerExit) == TRUE)
{
HideUnionRoomPlayer(playerIdx);
- (*a0)++;
+ (*state)++;
}
break;
case 1:
- if (sub_8019B3C(playerIdx))
+ if (TryReleaseUnionRoomPlayerObjectEvent(playerIdx))
{
RemoveUnionRoomPlayerObjectEvent(playerIdx);
HideUnionRoomPlayer(playerIdx);
- *a0 = 0;
+ *state = 0;
return TRUE;
}
break;
@@ -218,42 +243,42 @@ static bool32 sub_8019BDC(s8 * a0, u32 playerIdx, struct UnkStruct_8019BA8 * ptr
return FALSE;
}
-static bool32 sub_8019C38(s8 * a0, u32 playerIdx, struct UnkStruct_8019BA8 * ptr)
+static bool32 AnimateUnionRoomPlayerSpawn(s8 * state, u32 playerIdx, struct UnionRoomObject * ptr)
{
s16 x, y;
- switch (*a0)
+ switch (*state)
{
case 0:
- if (!is_walking_or_running())
+ if (!IsPlayerStandingStill())
{
break;
}
PlayerGetDestCoords(&x, &y);
- if (sub_80199E0(playerIdx, 0, x, y) == 1)
+ if (IsUnionRoomPlayerFacingTileAt(playerIdx, 0, x, y) == TRUE)
{
break;
}
player_get_pos_including_state_based_drift(&x, &y);
- if (sub_80199E0(playerIdx, 0, x, y) == 1)
+ if (IsUnionRoomPlayerFacingTileAt(playerIdx, 0, x, y) == TRUE)
{
break;
}
- SetUnionRoomPlayerGfx(playerIdx, ptr->field_1);
+ SetUnionRoomPlayerGfx(playerIdx, ptr->gfxId);
CreateUnionRoomPlayerObjectEvent(playerIdx);
ShowUnionRoomPlayer(playerIdx);
- (*a0)++;
+ (*state)++;
// fallthrough
case 3: // incorrect?
- if (SetUnionRoomPlayerEnterExitMovement(playerIdx, gUnknown_082F078E) == 1)
+ if (SetUnionRoomPlayerEnterExitMovement(playerIdx, sMovement_UnionPlayerEnter) == TRUE)
{
- (*a0)++;
+ (*state)++;
}
break;
case 2:
- if (sub_8019B3C(playerIdx))
+ if (TryReleaseUnionRoomPlayerObjectEvent(playerIdx))
{
- *a0 = 0;
+ *state = 0;
return TRUE;
}
break;
@@ -261,44 +286,38 @@ static bool32 sub_8019C38(s8 * a0, u32 playerIdx, struct UnkStruct_8019BA8 * ptr
return FALSE;
}
-static bool32 sub_8019CF0(u32 playerIdx, u32 a1, u32 a2)
+static bool32 SpawnGroupLeader(u32 playerIdx, u32 gender, u32 id)
{
- struct UnkStruct_8019BA8 * ptr = &gUnknown_02022C64[playerIdx];
- ptr->field_3 = 1;
- ptr->field_1 = sub_8019978(a1, a2);
- if (ptr->field_0 == 0)
- {
+ struct UnionRoomObject * ptr = &sUnionObjWork[playerIdx];
+ ptr->schedAnim = UNION_ROOM_SPAWN_IN;
+ ptr->gfxId = GetUnionRoomPlayerGraphicsId(gender, id);
+
+ if (ptr->state == 0)
return TRUE;
- }
else
- {
return FALSE;
- }
}
-static bool32 sub_8019D20(u32 playerIdx)
+static bool32 DespawnGroupLeader(u32 playerIdx)
{
- struct UnkStruct_8019BA8 * ptr = &gUnknown_02022C64[playerIdx];
- ptr->field_3 = 2;
- if (ptr->field_0 == 1)
- {
+ struct UnionRoomObject * ptr = &sUnionObjWork[playerIdx];
+ ptr->schedAnim = UNION_ROOM_SPAWN_OUT;
+
+ if (ptr->state == 1)
return TRUE;
- }
else
- {
return FALSE;
- }
}
-static void sub_8019D44(u32 playerIdx, struct UnkStruct_8019BA8 * ptr)
+static void AnimateUnionRoomPlayer(u32 playerIdx, struct UnionRoomObject * ptr)
{
- switch (ptr->field_0)
+ switch (ptr->state)
{
case 0:
- if (ptr->field_3 == 1)
+ if (ptr->schedAnim == UNION_ROOM_SPAWN_IN)
{
- ptr->field_0 = 2;
- ptr->field_2 = 0;
+ ptr->state = 2;
+ ptr->animState = 0;
}
else
{
@@ -306,23 +325,23 @@ static void sub_8019D44(u32 playerIdx, struct UnkStruct_8019BA8 * ptr)
}
// fallthrough
case 2:
- if (!sub_8019F8C(playerIdx, 0) && ptr->field_3 == 2)
+ if (!IsUnionRoomPlayerInvisible(playerIdx, 0) && ptr->schedAnim == UNION_ROOM_SPAWN_OUT)
{
- ptr->field_0 = 0;
- ptr->field_2 = 0;
+ ptr->state = 0;
+ ptr->animState = 0;
RemoveUnionRoomPlayerObjectEvent(playerIdx);
HideUnionRoomPlayer(playerIdx);
}
- else if (sub_8019C38(&ptr->field_2, playerIdx, ptr) == 1)
+ else if (AnimateUnionRoomPlayerSpawn(&ptr->animState, playerIdx, ptr) == TRUE)
{
- ptr->field_0 = 1;
+ ptr->state = 1;
}
break;
case 1:
- if (ptr->field_3 == 2)
+ if (ptr->schedAnim == UNION_ROOM_SPAWN_OUT)
{
- ptr->field_0 = 3;
- ptr->field_2 = 0;
+ ptr->state = 3;
+ ptr->animState = 0;
}
else
{
@@ -330,49 +349,43 @@ static void sub_8019D44(u32 playerIdx, struct UnkStruct_8019BA8 * ptr)
}
// fallthrough
case 3:
- if (sub_8019BDC(&ptr->field_2, playerIdx, ptr) == 1)
+ if (AnimateUnionRoomPlayerDespawn(&ptr->animState, playerIdx, ptr) == 1)
{
- ptr->field_0 = 0;
+ ptr->state = 0;
}
break;
}
- ptr->field_3 = 0;
+ ptr->schedAnim = UNION_ROOM_SPAWN_NONE;
}
-static void sub_8019DD0(u8 taskId)
+static void Task_AnimateUnionRoomPlayers(u8 taskId)
{
s32 i;
- for (i = 0; i < 8; i++)
- {
- sub_8019D44(i, &gUnknown_02022C64[i]);
- }
+ for (i = 0; i < MAX_UNION_ROOM_PLAYERS; i++)
+ AnimateUnionRoomPlayer(i, &sUnionObjWork[i]);
}
-static u8 sub_8019DF4(void)
+static u8 CreateTask_AnimateUnionRoomPlayers(void)
{
- if (FuncIsActiveTask(sub_8019DD0) == 1)
- {
+ if (FuncIsActiveTask(Task_AnimateUnionRoomPlayers) == TRUE)
return NUM_TASKS;
- }
else
- {
- return CreateTask(sub_8019DD0, 5);
- }
+ return CreateTask(Task_AnimateUnionRoomPlayers, 5);
}
-static void sub_8019E20(void)
+static void DestroyTask_AnimateUnionRoomPlayers(void)
{
- u8 taskId = FindTaskIdByFunc(sub_8019DD0);
+ u8 taskId = FindTaskIdByFunc(Task_AnimateUnionRoomPlayers);
if (taskId < NUM_TASKS)
{
DestroyTask(taskId);
}
}
-void sub_8019E3C(void)
+void DestroyUnionRoomPlayerObjects(void)
{
s32 i;
- for (i = 0; i < 8; i++)
+ for (i = 0; i < MAX_UNION_ROOM_PLAYERS; i++)
{
if (!IsUnionRoomPlayerHidden(i))
{
@@ -380,233 +393,232 @@ void sub_8019E3C(void)
HideUnionRoomPlayer(i);
}
}
- gUnknown_02022C64 = NULL;
- sub_8019E20();
+ sUnionObjWork = NULL;
+ DestroyTask_AnimateUnionRoomPlayers();
}
-void sub_8019E70(u8 * sp8, s32 r9)
+void CreateGroupMemberSpritesInvisible(u8 * spriteIds, s32 playerIdx)
{
- s32 r7;
+ s32 direction;
- for (r7 = 0; r7 < 5; r7++)
+ for (direction = DIR_NONE; direction <= DIR_EAST; direction++)
{
- s32 r5 = 5 * r9 + r7;
- sp8[r5] = sprite_new(OBJ_EVENT_GFX_MAN_4, r5 - 0x38, gUnknown_082F0740[r9][0] + gUnknown_082F0760[r7][0], gUnknown_082F0740[r9][1] + gUnknown_082F0760[r7][1], 3, 1);
- sub_8097C44(r5 - 0x38, TRUE);
+ s32 id = UR_PLAYER_SPRITE_ID(playerIdx, direction);
+ spriteIds[id] = CreateObjectSprite(OBJ_EVENT_GFX_MAN_4,
+ id - UR_SPRITE_START_ID,
+ sUnionRoomPlayerCoords[playerIdx][0] + sFacingDirectionOffsets[direction][0],
+ sUnionRoomPlayerCoords[playerIdx][1] + sFacingDirectionOffsets[direction][1],
+ 3, 1);
+ SetObjectEventSpriteInvisibility(id - UR_SPRITE_START_ID, TRUE);
}
}
-void sub_8019F04(u8 * r5)
+void DestroyGroupMemberSprites(u8 * spriteIds)
{
s32 i;
- for (i = 0; i < 40; i++)
- {
- DestroySprite(&gSprites[r5[i]]);
- }
+ for (i = 0; i < UR_PLAYER_SPRITE_ID(MAX_UNION_ROOM_PLAYERS, 0); i++)
+ DestroySprite(&gSprites[spriteIds[i]]);
}
-void sub_8019F2C(void)
+void SetTilesAroundUnionRoomPlayersPassable(void)
{
- s32 i, j, x, y;
- for (i = 0; i < 8; i++)
+ s32 i, direction, x, y;
+ for (i = 0; i < MAX_UNION_ROOM_PLAYERS; i++)
{
- for (j = 0; j < 5; j++)
+ for (direction = DIR_NONE; direction <= DIR_EAST; direction++)
{
- sub_8019990(i, j, &x, &y);
- sub_8088B94(x, y, 0);
+ GetUnionRoomPlayerFacingCoords(i, direction, &x, &y);
+ MapGridSetMetatileImpassabilityAt(x, y, FALSE);
}
}
}
-static u8 sub_8019F64(u32 r1, u32 unused, struct GFtgtGname * r2)
+static u8 GetNewFacingDirectionForUnionRoomPlayer(u32 direction, u32 playerIdx, struct GFtgtGname * gname)
{
- if (r1 != 0)
- {
- return gUnknown_082F076F[r1];
- }
- else if (r2->activity == 0x45)
- {
- return 1;
- }
+ if (direction != DIR_NONE)
+ return sNextFacingDirection[direction];
+ else if (gname->activity == (ACTIVITY_CHAT | IN_UNION_ROOM))
+ return DIR_SOUTH;
else
- {
- return 4;
- }
+ return DIR_EAST;
}
-static u32 sub_8019F8C(u32 a0, u32 a1)
+static bool32 IsUnionRoomPlayerInvisible(u32 playerIdx, u32 direction)
{
- return sub_8097C8C(5 * a0 + a1 - 0x38);
+ return IsObjectEventSpriteInvisible(UR_PLAYER_SPRITE_ID(playerIdx, direction) - UR_SPRITE_START_ID);
}
-static void sub_8019FA4(u32 r5, u32 r6, u8 r8, struct GFtgtGname * r9)
+static void SpawnGroupMember(u32 playerIdx, u32 direction, u8 graphicsId, struct GFtgtGname * gname)
{
s32 x, y;
- s32 r7 = 5 * r5 + r6;
- if (sub_8019F8C(r5, r6) == 1)
+ s32 id = UR_PLAYER_SPRITE_ID(playerIdx, direction);
+ if (IsUnionRoomPlayerInvisible(playerIdx, direction) == TRUE)
{
- sub_8097C44(r7 - 0x38, FALSE);
- sub_8097CC4(r7 - 0x38, 1);
+ SetObjectEventSpriteInvisibility(id - UR_SPRITE_START_ID, FALSE);
+ SetObjectEventSpriteAnim(id - UR_SPRITE_START_ID, UNION_ROOM_SPAWN_IN);
}
- sub_8097BB4(r7 - 0x38, r8);
- sub_801A3B0(r6, r5, sub_8019F64(r6, r5, r9));
- sub_8019990(r5, r6, &x, &y);
- sub_8088B94(x, y, 1);
+ SetObjectEventSpriteGraphics(id - UR_SPRITE_START_ID, graphicsId);
+ SetUnionRoomObjectFacingDirection(direction, playerIdx, GetNewFacingDirectionForUnionRoomPlayer(direction, playerIdx, gname));
+ GetUnionRoomPlayerFacingCoords(playerIdx, direction, &x, &y);
+ MapGridSetMetatileImpassabilityAt(x, y, TRUE);
}
-static void sub_801A02C(u32 a0, u32 a1)
+static void DespawnGroupMember(u32 playerIdx, u32 direction)
{
s32 x, y;
- sub_8097CC4(5 * a0 + a1 - 0x38, 2);
- sub_8019990(a0, a1, &x, &y);
- sub_8088B94(x, y, 0);
+ SetObjectEventSpriteAnim(UR_PLAYER_SPRITE_ID(playerIdx, direction) - UR_SPRITE_START_ID, UNION_ROOM_SPAWN_OUT);
+ GetUnionRoomPlayerFacingCoords(playerIdx, direction, &x, &y);
+ MapGridSetMetatileImpassabilityAt(x, y, FALSE);
}
-static void sub_801A064(u32 r7, struct GFtgtGname * r8)
+static void AssembleGroup(u32 playerIdx, struct GFtgtGname * gname)
{
s16 x, y, x2, y2;
s32 i;
PlayerGetDestCoords(&x, &y);
player_get_pos_including_state_based_drift(&x2, &y2);
- if (sub_8097C8C(5 * r7 - 0x38) == 1)
+ if (IsObjectEventSpriteInvisible(UR_PLAYER_SPRITE_ID(playerIdx, 0) - UR_SPRITE_START_ID) == TRUE)
{
- if (sub_80199E0(r7, 0, x, y) == 1 || sub_80199E0(r7, 0, x2, y2) == 1)
+ if (IsUnionRoomPlayerFacingTileAt(playerIdx, 0, x, y) == TRUE || IsUnionRoomPlayerFacingTileAt(playerIdx, 0, x2, y2) == TRUE)
{
return;
}
- sub_8019FA4(r7, 0, sub_8019978(r8->playerGender, r8->unk_00.playerTrainerId[0]), r8);
+ SpawnGroupMember(playerIdx, 0, GetUnionRoomPlayerGraphicsId(gname->playerGender, gname->unk_00.playerTrainerId[0]), gname);
}
for (i = 1; i < 5; i++)
{
- if (r8->child_sprite_gender[i - 1] == 0)
+ if (gname->child_sprite_gender[i - 1] == 0)
{
- sub_801A02C(r7, i);
+ DespawnGroupMember(playerIdx, i);
}
- else if (sub_80199E0(r7, i, x, y) == 0 && sub_80199E0(r7, i, x2, y2) == 0)
+ else if (IsUnionRoomPlayerFacingTileAt(playerIdx, i, x, y) == FALSE && IsUnionRoomPlayerFacingTileAt(playerIdx, i, x2, y2) == FALSE)
{
- sub_8019FA4(r7, i, sub_8019978((r8->child_sprite_gender[i - 1] >> 3) & 1, r8->child_sprite_gender[i - 1] & 7), r8);
+ SpawnGroupMember(playerIdx, i, GetUnionRoomPlayerGraphicsId((gname->child_sprite_gender[i - 1] >> 3) & 1, gname->child_sprite_gender[i - 1] & 7), gname);
}
}
}
-static void sub_801A16C(u32 r5, struct GFtgtGname * r4)
+static void SpawnGroupLeaderAndMembers(u32 playerIdx, struct GFtgtGname * gname)
{
u32 i;
- switch (r4->activity)
+ switch (gname->activity)
{
- case 0x40:
- case 0x54:
- sub_8019CF0(r5, r4->playerGender, r4->unk_00.playerTrainerId[0]);
+ case ACTIVITY_NONE | IN_UNION_ROOM:
+ case ACTIVITY_PLYRTALK | IN_UNION_ROOM:
+ SpawnGroupLeader(playerIdx, gname->playerGender, gname->unk_00.playerTrainerId[0]);
for (i = 0; i < 5; i++)
{
- sub_801A02C(r5, i);
+ DespawnGroupMember(playerIdx, i);
}
break;
- case 0x41:
- case 0x44:
- case 0x45:
- case 0x48:
- case 0x51:
- case 0x52:
- case 0x53:
- sub_8019D20(r5);
- sub_801A064(r5, r4);
+ case ACTIVITY_BATTLE_SINGLE | IN_UNION_ROOM:
+ case ACTIVITY_TRADE | IN_UNION_ROOM:
+ case ACTIVITY_CHAT | IN_UNION_ROOM:
+ case ACTIVITY_CARD | IN_UNION_ROOM:
+ case ACTIVITY_ACCEPT | IN_UNION_ROOM:
+ case ACTIVITY_DECLINE | IN_UNION_ROOM:
+ case ACTIVITY_NPCTALK | IN_UNION_ROOM:
+ DespawnGroupLeader(playerIdx);
+ AssembleGroup(playerIdx, gname);
break;
}
}
-static void sub_801A214(u32 r5, struct GFtgtGname * unused)
+static void DespawnGroupLeaderAndMembers(u32 r5, struct GFtgtGname *gname)
{
s32 i;
- sub_8019D20(r5);
+ DespawnGroupLeader(r5);
for (i = 0; i < 5; i++)
{
- sub_801A02C(r5, i);
+ DespawnGroupMember(r5, i);
}
}
-static void sub_801A234(struct UnkStruct_URoom *r0)
+static void UpdateUnionRoomPlayerSprites(struct WirelessLink_URoom *uroom)
{
s32 i;
struct UnkStruct_x20 * r4;
- gUnknown_02022C68 = 0;
- for (i = 0, r4 = r0->field_0->arr; i < 8; i++)
+ sUnionObjRefreshTimer = 0;
+ for (i = 0, r4 = uroom->field_0->arr; i < MAX_UNION_ROOM_PLAYERS; i++)
{
- if (r4[i].field_1A_0 == 1)
+ if (r4[i].groupScheduledAnim == UNION_ROOM_SPAWN_IN)
{
- sub_801A16C(i, &r4[i].unk.field_0);
+ SpawnGroupLeaderAndMembers(i, &r4[i].gname_uname.gname);
}
- else if (r4[i].field_1A_0 == 2)
+ else if (r4[i].groupScheduledAnim == UNION_ROOM_SPAWN_OUT)
{
- sub_801A214(i, &r4[i].unk.field_0);
+ DespawnGroupLeaderAndMembers(i, &r4[i].gname_uname.gname);
}
}
}
-void sub_801A274(struct UnkStruct_URoom *unused)
+void ScheduleUnionRoomPlayerRefresh(struct WirelessLink_URoom *uroom)
{
- gUnknown_02022C68 = 300;
+ sUnionObjRefreshTimer = 300;
}
-void sub_801A284(struct UnkStruct_URoom *r2)
+void HandleUnionRoomPlayerRefresh(struct WirelessLink_URoom *uroom)
{
- if (++gUnknown_02022C68 > 300)
+ if (++sUnionObjRefreshTimer > 300)
{
- sub_801A234(r2);
+ UpdateUnionRoomPlayerSprites(uroom);
}
}
-bool32 sub_801A2A8(struct UnkStruct_Main0 *arg0, s16 *arg1, s16 *arg2, u8 *arg3)
+bool32 TryInteractWithUnionRoomMember(struct UnkStruct_Main0 *main0, s16 *directionPtr, s16 *playerIdxPtr, u8 *spriteIds)
{
s16 x, y;
- s32 i, j;
+ s32 i, direction;
struct UnkStruct_x20 * r4;
- if (!is_walking_or_running())
+ if (!IsPlayerStandingStill())
{
return FALSE;
}
GetXYCoordsOneStepInFrontOfPlayer(&x, &y);
- for (i = 0, r4 = arg0->arr; i < 8; i++)
+ for (i = 0, r4 = main0->arr; i < MAX_UNION_ROOM_PLAYERS; i++)
{
- for (j = 0; j < 5; j++)
+ for (direction = DIR_NONE; direction <= DIR_EAST; direction++)
{
- s32 r3 = 5 * i + j;
- if (x != gUnknown_082F0740[i][0] + gUnknown_082F0760[j][0] + 7)
+ s32 id = UR_PLAYER_SPRITE_ID(i, direction);
+ if (x != sUnionRoomPlayerCoords[i][0] + sFacingDirectionOffsets[direction][0] + 7)
{
continue;
}
- if (y != gUnknown_082F0740[i][1] + gUnknown_082F0760[j][1] + 7)
+ if (y != sUnionRoomPlayerCoords[i][1] + sFacingDirectionOffsets[direction][1] + 7)
{
continue;
}
- if (sub_8097C8C(r3 - 0x38) != 0)
+ if (IsObjectEventSpriteInvisible(id - UR_SPRITE_START_ID))
{
continue;
}
- if (sub_8097D9C(r3 - 0x38) != 0)
+ if (IsObjectEventSpriteAnimating(id - UR_SPRITE_START_ID))
{
continue;
}
- if (r4[i].field_1A_0 != 1)
+ if (r4[i].groupScheduledAnim != UNION_ROOM_SPAWN_IN)
{
continue;
}
- sub_801A3B0(j, i, gUnknown_082F076A[GetPlayerFacingDirection()]);
- *arg1 = j;
- *arg2 = i;
+ // Face player
+ SetUnionRoomObjectFacingDirection(direction, i, sOppositeFacingDirection[GetPlayerFacingDirection()]);
+ *directionPtr = direction;
+ *playerIdxPtr = i;
return TRUE;
}
}
return FALSE;
}
-static void sub_801A3B0(s32 arg0, s32 arg1, u8 arg2)
+static void SetUnionRoomObjectFacingDirection(s32 currDirection, s32 playerIdx, u8 newDirection)
{
- sub_8097B78(5 * arg1 - 0x38 + arg0, arg2);
+ TurnObjectEventSprite(5 * playerIdx - UR_SPRITE_START_ID + currDirection, newDirection);
+ // should be line below, but order is swapped here
+ // TurnObjectEventSprite(UR_PLAYER_SPRITE_ID(playerIdx, currDirection) - UR_SPRITE_START_ID, newDirection);
}
-void sub_801A3D0(u32 arg0, u32 arg1, struct UnkStruct_Main0 *arg2)
+void UpdateUnionRoomMemberFacing(u32 currDirection, u32 playerIdx, struct UnkStruct_Main0 *main0)
{
- return sub_801A3B0(arg0, arg1, sub_8019F64(arg0, arg1, &arg2->arr[arg1].unk.field_0));
+ return SetUnionRoomObjectFacingDirection(currDirection, playerIdx, GetNewFacingDirectionForUnionRoomPlayer(currDirection, playerIdx, &main0->arr[playerIdx].gname_uname.gname));
}
diff --git a/src/unk_text_util_2.c b/src/unk_text_util_2.c
index a0b1281a4..2ff8c6507 100644
--- a/src/unk_text_util_2.c
+++ b/src/unk_text_util_2.c
@@ -57,19 +57,19 @@ u16 Font6Func(struct TextPrinter *textPrinter)
char_ = *textPrinter->printerTemplate.currentChar++;
switch (char_)
{
- case 1:
+ case EXT_CTRL_CODE_COLOR:
textPrinter->printerTemplate.fgColor = *textPrinter->printerTemplate.currentChar++;
GenerateFontHalfRowLookupTable(textPrinter->printerTemplate.fgColor, textPrinter->printerTemplate.bgColor, textPrinter->printerTemplate.shadowColor);
return 2;
- case 2:
+ case EXT_CTRL_CODE_HIGHLIGHT:
textPrinter->printerTemplate.bgColor = *textPrinter->printerTemplate.currentChar++;
GenerateFontHalfRowLookupTable(textPrinter->printerTemplate.fgColor, textPrinter->printerTemplate.bgColor, textPrinter->printerTemplate.shadowColor);
return 2;
- case 3:
+ case EXT_CTRL_CODE_SHADOW:
textPrinter->printerTemplate.shadowColor = *textPrinter->printerTemplate.currentChar++;
GenerateFontHalfRowLookupTable(textPrinter->printerTemplate.fgColor, textPrinter->printerTemplate.bgColor, textPrinter->printerTemplate.shadowColor);
return 2;
- case 4:
+ case EXT_CTRL_CODE_COLOR_HIGHLIGHT_SHADOW:
textPrinter->printerTemplate.fgColor = *textPrinter->printerTemplate.currentChar;
textPrinter->printerTemplate.bgColor = *++textPrinter->printerTemplate.currentChar;
textPrinter->printerTemplate.shadowColor = *++textPrinter->printerTemplate.currentChar;
@@ -77,43 +77,43 @@ u16 Font6Func(struct TextPrinter *textPrinter)
GenerateFontHalfRowLookupTable(textPrinter->printerTemplate.fgColor, textPrinter->printerTemplate.bgColor, textPrinter->printerTemplate.shadowColor);
return 2;
- case 5:
+ case EXT_CTRL_CODE_PALETTE:
textPrinter->printerTemplate.currentChar++;
return 2;
- case 6:
+ case EXT_CTRL_CODE_SIZE:
subStruct->glyphId = *textPrinter->printerTemplate.currentChar;
textPrinter->printerTemplate.currentChar++;
return 2;
- case 7:
+ case EXT_CTRL_CODE_RESET_SIZE:
return 2;
- case 8:
+ case EXT_CTRL_CODE_PAUSE:
textPrinter->delayCounter = *textPrinter->printerTemplate.currentChar++;
textPrinter->state = 6;
return 2;
- case 9:
+ case EXT_CTRL_CODE_PAUSE_UNTIL_PRESS:
textPrinter->state = 1;
if (gTextFlags.autoScroll)
{
subStruct->autoScrollDelay = 0;
}
return 3;
- case 10:
+ case EXT_CTRL_CODE_WAIT_SE:
textPrinter->state = 5;
return 3;
- case 11:
- case 16:
+ case EXT_CTRL_CODE_PLAY_BGM:
+ case EXT_CTRL_CODE_PLAY_SE:
textPrinter->printerTemplate.currentChar += 2;
return 2;
- case 12:
+ case EXT_CTRL_CODE_ESCAPE:
char_ = *++textPrinter->printerTemplate.currentChar;
break;
- case 13:
+ case EXT_CTRL_CODE_SHIFT_TEXT:
textPrinter->printerTemplate.currentX = textPrinter->printerTemplate.x + *textPrinter->printerTemplate.currentChar++;
return 2;
- case 14:
+ case EXT_CTRL_CODE_SHIFT_DOWN:
textPrinter->printerTemplate.currentY = textPrinter->printerTemplate.y + *textPrinter->printerTemplate.currentChar++;
return 2;
- case 15:
+ case EXT_CTRL_CODE_FILL_WINDOW:
FillWindowPixelBuffer(textPrinter->printerTemplate.windowId, PIXEL_FILL(textPrinter->printerTemplate.bgColor));
return 2;
}
@@ -126,10 +126,10 @@ u16 Font6Func(struct TextPrinter *textPrinter)
textPrinter->state = 3;
TextPrinterInitDownArrowCounters(textPrinter);
return 3;
- case 0xF9:
+ case CHAR_EXTRA_SYMBOL:
char_ = *textPrinter->printerTemplate.currentChar++| 0x100;
break;
- case 0xF8:
+ case CHAR_KEYPAD_ICON:
textPrinter->printerTemplate.currentChar++;
return 0;
}
diff --git a/src/unk_transition.c b/src/unk_transition.c
deleted file mode 100644
index 09e194be3..000000000
--- a/src/unk_transition.c
+++ /dev/null
@@ -1,639 +0,0 @@
-#include "global.h"
-#include "sprite.h"
-#include "decompress.h"
-#include "unk_transition.h"
-#include "battle_transition.h"
-#include "task.h"
-#include "palette.h"
-#include "trig.h"
-#include "bg.h"
-#include "gpu_regs.h"
-#include "constants/rgb.h"
-
-typedef bool8 (*TransitionStateFunc)(struct Task *task);
-
-// this file's functions
-static void sub_81DA848(struct Sprite *sprite);
-static void sub_81DA9BC(struct Sprite *sprite);
-static bool8 sub_81DAACC(struct Task *task);
-static bool8 sub_81DAC14(struct Task *task);
-static bool8 sub_81DABBC(struct Task *task);
-static bool8 sub_81DAB4C(struct Task *task);
-static bool8 sub_81DAC80(struct Task *task);
-static bool8 sub_81DACEC(struct Task *task);
-static bool8 sub_81DAD58(struct Task *task);
-static bool8 sub_81DADC4(struct Task *task);
-static bool8 sub_81DAE44(struct Task *task);
-static bool8 sub_81DAEB0(struct Task *task);
-static bool8 sub_81DAF34(struct Task *task);
-static bool8 sub_81DAFA0(struct Task *task);
-static bool8 sub_81DB02C(struct Task *task);
-static bool8 sub_81DB098(struct Task *task);
-static bool8 sub_81DB124(struct Task *task);
-static bool8 sub_81DB190(struct Task *task);
-static bool8 sub_81DB224(struct Task *task);
-static bool8 sub_81DB290(struct Task *task);
-static bool8 sub_81DB328(struct Task *task);
-
-// const rom data
-static const u32 gUnknown_0862AD54[] = INCBIN_U32("graphics/battle_transitions/frontier_transition.4bpp.lz");
-static const u32 gUnknown_0862AF30[] = INCBIN_U32("graphics/battle_transitions/frontier_transition.bin");
-static const u32 gUnknown_0862B0DC[] = INCBIN_U32("graphics/battle_transitions/frontier_transition_circles.4bpp.lz");
-static const u16 gUnknown_0862B53C[] = INCBIN_U16("graphics/battle_transitions/frontier_transition.gbapal");
-
-// Unused Empty data.
-static const u8 sFiller[0x1C0] = {0};
-
-static const struct OamData sOamData_862B71C =
-{
- .y = 0,
- .affineMode = ST_OAM_AFFINE_OFF,
- .objMode = ST_OAM_OBJ_NORMAL,
- .mosaic = 0,
- .bpp = ST_OAM_4BPP,
- .shape = SPRITE_SHAPE(64x64),
- .x = 0,
- .matrixNum = 0,
- .size = SPRITE_SIZE(64x64),
- .tileNum = 0,
- .priority = 1,
- .paletteNum = 0,
- .affineParam = 0
-};
-
-static const struct CompressedSpriteSheet sUnknown_0862B724 =
-{
- .data = gUnknown_0862B0DC,
- .size = 0x1800,
- .tag = 11920
-};
-
-static const struct SpritePalette sUnknown_0862B72C =
-{
- .data = gUnknown_0862B53C,
- .tag = 11920
-};
-
-static const union AnimCmd sSpriteAnim_862B734[] =
-{
- ANIMCMD_FRAME(0, 1),
- ANIMCMD_END
-};
-
-static const union AnimCmd sSpriteAnim_862B73C[] =
-{
- ANIMCMD_FRAME(64, 1),
- ANIMCMD_END
-};
-
-static const union AnimCmd sSpriteAnim_862B744[] =
-{
- ANIMCMD_FRAME(128, 1),
- ANIMCMD_END
-};
-
-static const union AnimCmd *const sSpriteAnimTable_862B74C[] =
-{
- sSpriteAnim_862B734,
- sSpriteAnim_862B73C,
- sSpriteAnim_862B744
-};
-
-static const struct SpriteTemplate sUnknown_0862B758 =
-{
- .tileTag = 11920,
- .paletteTag = 11920,
- .oam = &sOamData_862B71C,
- .anims = sSpriteAnimTable_862B74C,
- .images = NULL,
- .affineAnims = gDummySpriteAffineAnimTable,
- .callback = SpriteCallbackDummy,
-};
-
-static const TransitionStateFunc sPhase2_34_Funcs[] =
-{
- sub_81DAACC,
- sub_81DAC14,
- sub_81DABBC,
- sub_81DAB4C,
- sub_81DAC80
-};
-
-static const TransitionStateFunc sPhase2_35_Funcs[] =
-{
- sub_81DAACC,
- sub_81DACEC,
- sub_81DABBC,
- sub_81DAB4C,
- sub_81DAD58
-};
-
-static const TransitionStateFunc sPhase2_36_Funcs[] =
-{
- sub_81DAACC,
- sub_81DADC4,
- sub_81DABBC,
- sub_81DAB4C,
- sub_81DAE44
-};
-
-static const TransitionStateFunc sPhase2_37_Funcs[] =
-{
- sub_81DAACC,
- sub_81DAEB0,
- sub_81DABBC,
- sub_81DAB4C,
- sub_81DAF34
-};
-
-static const TransitionStateFunc sPhase2_38_Funcs[] =
-{
- sub_81DAACC,
- sub_81DAFA0,
- sub_81DABBC,
- sub_81DAB4C,
- sub_81DB02C
-};
-
-static const TransitionStateFunc sPhase2_39_Funcs[] =
-{
- sub_81DAACC,
- sub_81DB098,
- sub_81DABBC,
- sub_81DAB4C,
- sub_81DB124
-};
-
-static const TransitionStateFunc sPhase2_40_Funcs[] =
-{
- sub_81DAACC,
- sub_81DB190,
- sub_81DABBC,
- sub_81DAB4C,
- sub_81DB224
-};
-
-static const TransitionStateFunc sPhase2_41_Funcs[] =
-{
- sub_81DAACC,
- sub_81DB290,
- sub_81DABBC,
- sub_81DAB4C,
- sub_81DB328
-};
-
-// code
-static void sub_81DA700(void)
-{
- u16 *dst1, *dst2;
-
- sub_8149F58(&dst1, &dst2);
- LZ77UnCompVram(gUnknown_0862AD54, dst2);
- LZ77UnCompVram(gUnknown_0862AF30, dst1);
- LoadPalette(gUnknown_0862B53C, 0xF0, 0x20);
- LoadCompressedSpriteSheet(&sUnknown_0862B724);
- LoadSpritePalette(&sUnknown_0862B72C);
-}
-
-static u8 sub_81DA74C(s16 x, s16 y, u8 arg2, u8 arg3, s8 arg4, s8 arg5, u8 spriteAnimNum)
-{
- u8 spriteId = CreateSprite(&sUnknown_0862B758, x, y, 0);
-
- switch (spriteAnimNum)
- {
- case 0:
- gSprites[spriteId].data[0] = 120;
- gSprites[spriteId].data[1] = 45;
- break;
- case 1:
- gSprites[spriteId].data[0] = 89;
- gSprites[spriteId].data[1] = 97;
- break;
- case 2:
- gSprites[spriteId].data[0] = 151;
- gSprites[spriteId].data[1] = 97;
- break;
- }
-
- gSprites[spriteId].data[2] = arg4;
- gSprites[spriteId].data[3] = arg5;
- gSprites[spriteId].data[6] = arg2;
- gSprites[spriteId].data[7] = arg3;
- gSprites[spriteId].data[4] = 0;
- gSprites[spriteId].data[5] = 0;
-
- StartSpriteAnim(&gSprites[spriteId], spriteAnimNum);
- gSprites[spriteId].callback = sub_81DA848;
-
- return spriteId;
-}
-
-static void sub_81DA848(struct Sprite *sprite)
-{
- s16 *data = sprite->data;
-
- if (sprite->pos1.x == data[0] && sprite->pos1.y == data[1])
- {
- sprite->callback = SpriteCallbackDummy;
- }
- else
- {
- if (data[4] == data[6])
- {
- sprite->pos1.x += data[2];
- data[4] = 0;
- }
- else
- {
- data[4]++;
- }
-
- if (data[5] == data[7])
- {
- sprite->pos1.y += data[3];
- data[5] = 0;
- }
- else
- {
- data[5]++;
- }
- }
-}
-
-static u8 sub_81DA8BC(s16 x, s16 y, s16 arg2, s16 arg3, s16 arg4, s16 arg5, s16 arg6, u8 spriteAnimNum)
-{
- u8 spriteId = CreateSprite(&sUnknown_0862B758, x, y, 0);
-
- switch (spriteAnimNum)
- {
- case 0:
- gSprites[spriteId].data[0] = 120;
- gSprites[spriteId].data[1] = 45;
- break;
- case 1:
- gSprites[spriteId].data[0] = 89;
- gSprites[spriteId].data[1] = 97;
- break;
- case 2:
- gSprites[spriteId].data[0] = 151;
- gSprites[spriteId].data[1] = 97;
- break;
- }
-
- gSprites[spriteId].data[2] = arg2;
- gSprites[spriteId].data[3] = arg3;
- gSprites[spriteId].data[4] = arg4;
- gSprites[spriteId].data[5] = arg5;
- gSprites[spriteId].data[6] = arg6;
-
- StartSpriteAnim(&gSprites[spriteId], spriteAnimNum);
- gSprites[spriteId].callback = sub_81DA9BC;
-
- return spriteId;
-}
-
-static void sub_81DA9BC(struct Sprite *sprite)
-{
- sprite->pos2.x = (Sin2(sprite->data[2]) * sprite->data[4]) >> 12; // div by 4096
- sprite->pos2.y = (Cos2(sprite->data[2]) * sprite->data[4]) >> 12; // div by 4096
-
- sprite->data[2] = (sprite->data[2] + sprite->data[3]) % 360;
-
- if (sprite->data[4] != sprite->data[5])
- sprite->data[4] += sprite->data[6];
- else
- sprite->callback = SpriteCallbackDummy;
-}
-
-#define tState data[0]
-
-static void sub_81DAA20(struct Task *task)
-{
- FreeSpriteTilesByTag(11920);
- FreeSpritePaletteByTag(11920);
-
- DestroySprite(&gSprites[task->data[4]]);
- DestroySprite(&gSprites[task->data[5]]);
- DestroySprite(&gSprites[task->data[6]]);
-}
-
-static bool8 sub_81DAA74(struct Task *task)
-{
- if (gSprites[task->data[4]].callback == SpriteCallbackDummy
- && gSprites[task->data[5]].callback == SpriteCallbackDummy
- && gSprites[task->data[6]].callback == SpriteCallbackDummy)
- return TRUE;
- else
- return FALSE;
-}
-
-static bool8 sub_81DAACC(struct Task *task)
-{
- if (task->data[1] == 0)
- {
- ClearGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_WIN0_ON);
- ClearGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_WIN1_ON);
- ClearGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_BG0_ON);
-
- task->data[1]++;
- return FALSE;
- }
- else
- {
- sub_81DA700();
- SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT1_BG0 | BLDCNT_EFFECT_BLEND | BLDCNT_TGT2_ALL);
- SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(0, 16));
- ChangeBgX(0, 0, 0);
- ChangeBgY(0, 0, 0);
- ChangeBgY(0, 0x500, 2);
-
- task->data[1] = 0;
- task->tState++;
- return TRUE;
- }
-}
-
-static bool8 sub_81DAB4C(struct Task *task)
-{
- if (task->data[2] == 0)
- SetGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_BG0_ON);
-
- if (task->data[2] == 16)
- {
- if (task->data[3] == 31)
- {
- BeginNormalPaletteFade(0xFFFFFFFF, -1, 0, 0x10, RGB_BLACK);
- task->tState++;
- }
- else
- {
- task->data[3]++;
- }
- }
- else
- {
- u16 blnd;
-
- task->data[2]++;
- blnd = task->data[2];
- SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(blnd, 16 - blnd));
- }
-
- return FALSE;
-}
-
-static bool8 sub_81DABBC(struct Task *task)
-{
- if (sub_81DAA74(task) == TRUE)
- task->tState++;
-
- return FALSE;
-}
-
-void Phase2Task_34(u8 taskId)
-{
- while (sPhase2_34_Funcs[gTasks[taskId].tState](&gTasks[taskId]));
-}
-
-static bool8 sub_81DAC14(struct Task *task)
-{
- task->data[4] = sub_81DA74C(120, -51, 0, 0, 0, 2, 0);
- task->data[5] = sub_81DA74C(-7, 193, 0, 0, 2, -2, 1);
- task->data[6] = sub_81DA74C(247, 193, 0, 0, -2, -2, 2);
-
- task->tState++;
- return FALSE;
-}
-
-static bool8 sub_81DAC80(struct Task *task)
-{
- if (!gPaletteFade.active)
- {
- sub_81DAA20(task);
- DestroyTask(FindTaskIdByFunc(Phase2Task_34));
- }
-
- return FALSE;
-}
-
-void Phase2Task_35(u8 taskId)
-{
- while (sPhase2_35_Funcs[gTasks[taskId].tState](&gTasks[taskId]));
-}
-
-static bool8 sub_81DACEC(struct Task *task)
-{
- task->data[4] = sub_81DA74C(120, 197, 0, 0, 0, -4, 0);
- task->data[5] = sub_81DA74C(241, 59, 0, 1, -4, 2, 1);
- task->data[6] = sub_81DA74C(-1, 59, 0, 1, 4, 2, 2);
-
- task->tState++;
- return FALSE;
-}
-
-static bool8 sub_81DAD58(struct Task *task)
-{
- if (!gPaletteFade.active)
- {
- sub_81DAA20(task);
- DestroyTask(FindTaskIdByFunc(Phase2Task_35));
- }
-
- return FALSE;
-}
-
-void Phase2Task_36(u8 taskId)
-{
- while (sPhase2_36_Funcs[gTasks[taskId].tState](&gTasks[taskId]));
-}
-
-static bool8 sub_81DADC4(struct Task *task)
-{
- task->data[4] = sub_81DA8BC(120, 45, 12, 4, 128, 0, -4, 0);
- task->data[5] = sub_81DA8BC(89, 97, 252, 4, 128, 0, -4, 1);
- task->data[6] = sub_81DA8BC(151, 97, 132, 4, 128, 0, -4, 2);
-
- task->tState++;
- return FALSE;
-}
-
-static bool8 sub_81DAE44(struct Task *task)
-{
- if (!gPaletteFade.active)
- {
- sub_81DAA20(task);
- DestroyTask(FindTaskIdByFunc(Phase2Task_36));
- }
-
- return FALSE;
-}
-
-void Phase2Task_37(u8 taskId)
-{
- while (sPhase2_37_Funcs[gTasks[taskId].tState](&gTasks[taskId]));
-}
-
-static bool8 sub_81DAEB0(struct Task *task)
-{
- task->data[4] = sub_81DA8BC(120, 80, 284, 8, 131, 35, -3, 0);
- task->data[5] = sub_81DA8BC(120, 80, 44, 8, 131, 35, -3, 1);
- task->data[6] = sub_81DA8BC(121, 80, 164, 8, 131, 35, -3, 2);
-
- task->tState++;
- return FALSE;
-}
-
-static bool8 sub_81DAF34(struct Task *task)
-{
- if (!gPaletteFade.active)
- {
- sub_81DAA20(task);
- DestroyTask(FindTaskIdByFunc(Phase2Task_37));
- }
-
- return FALSE;
-}
-
-void Phase2Task_38(u8 taskId)
-{
- while (sPhase2_38_Funcs[gTasks[taskId].tState](&gTasks[taskId]));
-}
-
-static bool8 sub_81DAFA0(struct Task *task)
-{
- if (task->data[1] == 0)
- {
- task->data[4] = sub_81DA74C(120, -51, 0, 0, 0, 4, 0);
- }
- else if (task->data[1] == 16)
- {
- task->data[5] = sub_81DA74C(-7, 193, 0, 0, 4, -4, 1);
- }
- else if (task->data[1] == 32)
- {
- task->data[6] = sub_81DA74C(247, 193, 0, 0, -4, -4, 2);
- task->tState++;
- }
-
- task->data[1]++;
- return FALSE;
-}
-
-static bool8 sub_81DB02C(struct Task *task)
-{
- if (!gPaletteFade.active)
- {
- sub_81DAA20(task);
- DestroyTask(FindTaskIdByFunc(Phase2Task_38));
- }
-
- return FALSE;
-}
-
-void Phase2Task_39(u8 taskId)
-{
- while (sPhase2_39_Funcs[gTasks[taskId].tState](&gTasks[taskId]));
-}
-
-static bool8 sub_81DB098(struct Task *task)
-{
- if (task->data[1] == 0)
- {
- task->data[4] = sub_81DA74C(120, 197, 0, 0, 0, -8, 0);
- }
- else if (task->data[1] == 16)
- {
- task->data[5] = sub_81DA74C(241, 78, 0, 0, -8, 1, 1);
- }
- else if (task->data[1] == 32)
- {
- task->data[6] = sub_81DA74C(-1, 78, 0, 0, 8, 1, 2);
- task->tState++;
- }
-
- task->data[1]++;
- return FALSE;
-}
-
-static bool8 sub_81DB124(struct Task *task)
-{
- if (!gPaletteFade.active)
- {
- sub_81DAA20(task);
- DestroyTask(FindTaskIdByFunc(Phase2Task_39));
- }
-
- return FALSE;
-}
-
-void Phase2Task_40(u8 taskId)
-{
- while (sPhase2_40_Funcs[gTasks[taskId].tState](&gTasks[taskId]));
-}
-
-static bool8 sub_81DB190(struct Task *task)
-{
- if (task->data[1] == 0)
- {
- task->data[4] = sub_81DA8BC(120, 45, 12, 4, 128, 0, -4, 0);
- }
- else if (task->data[1] == 16)
- {
- task->data[5] = sub_81DA8BC(89, 97, 252, 4, 128, 0, -4, 1);
- }
- else if (task->data[1] == 32)
- {
- task->data[6] = sub_81DA8BC(151, 97, 132, 4, 128, 0, -4, 2);
- task->tState++;
- }
-
- task->data[1]++;
- return FALSE;
-}
-
-static bool8 sub_81DB224(struct Task *task)
-{
- if (!gPaletteFade.active)
- {
- sub_81DAA20(task);
- DestroyTask(FindTaskIdByFunc(Phase2Task_40));
- }
-
- return FALSE;
-}
-
-void Phase2Task_41(u8 taskId)
-{
- while (sPhase2_41_Funcs[gTasks[taskId].tState](&gTasks[taskId]));
-}
-
-static bool8 sub_81DB290(struct Task *task)
-{
- if (task->data[1] == 0)
- {
- task->data[4] = sub_81DA8BC(120, 80, 284, 8, 131, 35, -3, 0);
- }
- else if (task->data[1] == 16)
- {
- task->data[5] = sub_81DA8BC(120, 80, 44, 8, 131, 35, -3, 1);
- }
- else if (task->data[1] == 32)
- {
- task->data[6] = sub_81DA8BC(121, 80, 164, 8, 131, 35, -3, 2);
- task->tState++;
- }
-
- task->data[1]++;
- return FALSE;
-}
-
-static bool8 sub_81DB328(struct Task *task)
-{
- if (!gPaletteFade.active)
- {
- sub_81DAA20(task);
- DestroyTask(FindTaskIdByFunc(Phase2Task_41));
- }
-
- return FALSE;
-}
diff --git a/src/use_pokeblock.c b/src/use_pokeblock.c
index 5079edb37..ebb237d54 100644
--- a/src/use_pokeblock.c
+++ b/src/use_pokeblock.c
@@ -24,143 +24,160 @@
#include "pokemon_summary_screen.h"
#include "item_menu.h"
-struct UsePokeblockSubStruct
-{
- /*0x00*/ void (*field_0)(void);
- /*0x04*/ void (*callback)(void);
- /*0x08*/ struct Pokeblock *pokeblock;
- /*0x0C*/ struct Pokemon *mon;
- /*0x10*/ u8 stringBuffer[0x40];
- /*0x50*/ u8 field_50;
- /*0x51*/ u8 field_51;
- /*0x52*/ u8 field_52;
- /*0x53*/ u8 field_53;
- /*0x54*/ u8 field_54;
- /*0x55*/ u8 field_55;
- /*0x56*/ u8 field_56;
- /*0x57*/ u8 field_57[5];
- /*0x5C*/ u8 field_5c[5];
- /*0x61*/ u8 field_61[5];
- /*0x66*/ s16 field_66[5];
- /*0x70*/ u8 field_70;
- /*0x71*/ u8 field_71;
- /*0x74*/ u8 (*unk74)(void);
- /*0x78*/ u8 unk78;
- /*0x79*/ u8 filler79[0x1];
- /*0x7A*/ u8 field_7A[0x22];
+/*
+ This file handles the screen where the player chooses
+ which pokemon to give a pokeblock to. The subsequent scene
+ of feeding the pokeblock to the pokemon is handled by
+ pokeblock_feed.c, and the rest of the pokeblock menu (and
+ other pokeblock-related functions) are in pokeblock.c
+*/
+
+enum {
+ WIN_NAME,
+ WIN_NATURE,
+ WIN_TEXT,
+ WIN_COUNT
};
-struct Unk7FB8
+#define TAG_UP_DOWN 0
+#define TAG_CONDITION 1
+
+// At any one time, the currently selected mon and its two adjacent neighbors can be loaded
+// IDs to refer to one of these 3 are called "load id" in this file
+#define NUM_SELECTIONS_LOADED 3
+
+struct UsePokeblockSession
+{
+ void (*callback)(void);
+ void (*exitCallback)(void);
+ struct Pokeblock *pokeblock;
+ struct Pokemon *mon;
+ u8 stringBuffer[64];
+ u8 mainState;
+ u8 unused1;
+ u8 timer;
+ u8 statId;
+ u8 numEnhancements;
+ u8 unused2;
+ bool8 monInTopHalf;
+ u8 conditionsBeforeBlock[FLAVOR_COUNT];
+ u8 conditionsAfterBlock[FLAVOR_COUNT];
+ u8 enhancements[FLAVOR_COUNT];
+ s16 pokeblockStatBoosts[FLAVOR_COUNT];
+ u8 numSelections; // num in party + 1 (for Cancel)
+ u8 curSelection;
+ bool8 (*loadNewSelection)(void);
+ u8 helperState;
+ u8 unused3;
+ u8 natureText[34];
+};
+
+// This struct is identical to PokenavMonList, the struct used for managing lists of pokemon in the pokenav
+// Given that this screen is essentially duplicated in the poknav, this struct was probably the same one with
+// a more general name/purpose
+// TODO: Once the pokenav conditions screens are documented, resolve the above
+struct UsePokeblockMenuPokemon
{
- u8 unk0;
- u8 unk1;
- u16 unk2;
+ u8 boxId; // Because this screen is never used for the PC this is always set to TOTAL_BOXES_COUNT to refer to party
+ u8 monId;
+ u16 data; // never read
};
-struct UsePokeblockStruct
-{
- /*0x0000*/ u8 filler0[4];
- /*0x0000*/ u16 field_4[6][0x40];
- /*0x0304*/ u8 field_304[3][0x2000];
- /*0x6304*/ u8 filler_6304[0x1000];
- /*0x7304*/ u8 tilemapBuffer[BG_SCREEN_SIZE + 2];
- /*0x7B06*/ u8 field_7B06[7];
- /*0x7B0E*/ s16 field_7B0E;
- /*0x7B10*/ u8 field_7B10;
- /*0x7B12*/ u16 field_7B12;
- /*0x7B12*/ u16 field_7B14;
- /*0x7B12*/ u8 *field_7B18;
- /*0x7B1C*/ struct Sprite *field_7B1C[10];
- /*0x7B44*/ struct Sprite *field_7B44[2];
- /*0x7B4C*/ u8 field_7B4C;
- /*0x7B4D*/ u8 field_7B4D[3][24];
- /*0x7B95*/ u8 field_7B95[3][64];
- /*0x7C58*/ struct UnknownStruct_81D1ED4 field_7C58;
- /*0x7FB0*/ u8 unk7FB0[3];
- /*0x7FB3*/ s8 field_7FB3;
- /*0x7FB4*/ s8 field_7FB4;
- /*0x7FB5*/ s8 field_7FB5;
- /*0x7FB6*/ s8 field_7FB6;
- /*0x7FB8*/ struct Unk7FB8 field_7FB8[6];
- /*0x7FD0*/ struct UsePokeblockSubStruct info;
+struct UsePokeblockMenu
+{
+ u32 unused;
+ u16 partyPalettes[PARTY_SIZE][0x40];
+ u8 partySheets[NUM_SELECTIONS_LOADED][0x2000];
+ u8 unusedBuffer[0x1000];
+ u8 tilemapBuffer[BG_SCREEN_SIZE + 2];
+ u8 selectionIconSpriteIds[PARTY_SIZE + 1];
+ s16 curMonXOffset;
+ u8 curMonSpriteId;
+ u16 curMonPalette;
+ u16 curMonSheet;
+ u8 *curMonTileStart;
+ struct Sprite *sparkles[MAX_CONDITION_SPARKLES];
+ struct Sprite *condition[2];
+ u8 toLoadSelection;
+ u8 locationStrings[NUM_SELECTIONS_LOADED][24]; // Gets an "in party" or "in box #" string that never gets printed
+ u8 monNameStrings[NUM_SELECTIONS_LOADED][64];
+ struct ConditionGraph graph;
+ u8 numSparkles[NUM_SELECTIONS_LOADED];
+ s8 curLoadId;
+ s8 nextLoadId;
+ s8 prevLoadId;
+ s8 toLoadId;
+ struct UsePokeblockMenuPokemon party[PARTY_SIZE];
+ struct UsePokeblockSession info;
};
-#define TAG_TILE_CONDITION_UP_DOWN 0
-#define TAG_PAL_CONDITION_UP_DOWN 0
-#define TAG_PAL_POKEBLOCK_CONDITION 1
-
-extern void sub_81D21DC(u8);
-
-// this file's functions
-void sub_816636C(void (*func)(void));
-void sub_8166380(void);
-void sub_816631C(void);
-void sub_81662C0(void);
-void sub_8166564(void);
-void sub_8166304(void);
-void sub_81668F8(void);
-void sub_8167420(void);
-void sub_8167760(void);
-u8 sub_81672E4(u8 arg0);
-static bool8 sub_8168328(void);
-bool8 sub_8167930(void);
-void sub_8167608(u8 arg0);
-void sub_8167BA0(u16 arg0, u8 copyToVramMode);
-void sub_8166634(void);
-static void sub_8167CA0(bool8);
-void sub_8166BEC(void);
-void sub_8166D44(void);
-s8 sub_8166DE4(void);
-bool8 IsSheenMaxed(void);
-void sub_8166F50(void);
-void sub_816681C(void);
-void sub_8166F94(void);
-u8 sub_81672A4(u8 a0);
-void sub_8166A34(void);
-void sub_8167104(void);
-void sub_8167338(void);
-void sub_81681F4(u8);
-void sub_8166E24(void);
-bool8 sub_8166EDC(void);
-void Pokeblock_BufferEnhancedStatText(u8 *dest, u8 statId, s16 a2);
-void Pokeblock_MenuWindowTextPrint(const u8 *message);
-void sub_8167184(struct Pokeblock *, struct Pokemon *);
-void sub_81673DC(struct Sprite *sprite);
-void sub_81674BC(void);
-void sub_816753C(s16, u8);
-static u8 sub_8167EA4(void);
-static u8 sub_8167FA4(void);
-static u8 sub_8168048(void);
-void sub_8168180(struct Sprite *sprite);
-void sub_81681B4(struct Sprite *sprite);
-void sub_8168168(struct Sprite *sprite);
-void sub_8168374(struct Sprite *sprite);
-
-extern const u16 gUnknown_086231E8[];
-extern const u16 gUnknown_08623208[];
-extern const struct SpritePalette gSpritePalette_085DFDB8;
-extern const struct SpriteTemplate gSpriteTemplate_085DFDA0;
-
-// ram variables
-EWRAM_DATA struct UsePokeblockSubStruct *gUnknown_0203BC90 = NULL;
-EWRAM_DATA void (*gUnknown_0203BC94)(void) = NULL;
-EWRAM_DATA struct Pokeblock *gUnknown_0203BC98 = NULL;
+static void SetUsePokeblockCallback(void (*func)(void));
+static void LoadUsePokeblockMenu(void);
+static void CB2_UsePokeblockMenu(void);
+static void CB2_ReturnToUsePokeblockMenu(void);
+static void ShowUsePokeblockMenu(void);
+static void CB2_ShowUsePokeblockMenuForResults(void);
+static void ShowUsePokeblockMenuForResults(void);
+static void LoadPartyInfo(void);
+static void LoadAndCreateSelectionIcons(void);
+static u8 GetSelectionIdFromPartyId(u8);
+static bool8 LoadConditionTitle(void);
+static bool8 LoadUsePokeblockMenuGfx(void);
+static void UpdateMonPic(u8);
+static void UpdateMonInfoText(u16, bool8);
+static void UsePokeblockMenu(void);
+static void UpdateSelection(bool8);
+static void CloseUsePokeblockMenu(void);
+static void AskUsePokeblock(void);
+static s8 HandleAskUsePokeblockInput(void);
+static bool8 IsSheenMaxed(void);
+static void PrintWontEatAnymore(void);
+static void FeedPokeblockToMon(void);
+static void EraseMenuWindow(void);
+static u8 GetPartyIdFromSelectionId(u8);
+static void ShowPokeblockResults(void);
+static void CalculateConditionEnhancements(void);
+static void LoadAndCreateUpDownSprites(void);
+static void CalculateNumAdditionalSparkles(u8);
+static void PrintFirstEnhancement(void);
+static bool8 TryPrintNextEnhancement(void);
+static void BufferEnhancedStatText(u8 *, u8, s16);
+static void PrintMenuWindowText(const u8 *);
+static void CalculatePokeblockEffectiveness(struct Pokeblock *, struct Pokemon *);
+static void SpriteCB_UpDown(struct Sprite *);
+static void LoadInitialMonInfo(void);
+static void LoadMonInfo(s16, u8);
+static bool8 LoadNewSelection_CancelToMon(void);
+static bool8 LoadNewSelection_MonToCancel(void);
+static bool8 LoadNewSelection_MonToMon(void);
+static void SpriteCB_SelectionIconPokeball(struct Sprite *);
+static void SpriteCB_SelectionIconCancel(struct Sprite *);
+static void SpriteCB_MonPic(struct Sprite *);
+static void SpriteCB_Condition(struct Sprite *);
+
+extern const u16 gConditionGraphData_Pal[];
+extern const u16 gConditionText_Pal[];
+
+// The below 3 are saved for returning to the screen after feeding a pokeblock to a mon
+// so that the rest of the data can be freed
+static EWRAM_DATA struct UsePokeblockSession *sInfo = NULL;
+static EWRAM_DATA void (*sExitCallback)(void) = NULL;
+static EWRAM_DATA struct Pokeblock *sPokeblock = NULL;
EWRAM_DATA u8 gPokeblockMonId = 0;
EWRAM_DATA s16 gPokeblockGain = 0;
-EWRAM_DATA u8 *gUnknown_0203BCA0 = NULL;
-EWRAM_DATA u8 *gUnknown_0203BCA4 = NULL;
-EWRAM_DATA u8 *gUnknown_0203BCA8 = NULL;
-EWRAM_DATA struct UsePokeblockStruct *gUnknown_0203BCAC = NULL;
+static EWRAM_DATA u8 *sGraph_Tilemap = NULL;
+static EWRAM_DATA u8 *sGraph_Gfx = NULL;
+static EWRAM_DATA u8 *sMonFrame_TilemapPtr = NULL;
+static EWRAM_DATA struct UsePokeblockMenu *sMenu = NULL;
-// const rom data
-// todo: make it static once the file is decompiled
+static const u32 sMonFrame_Pal[] = INCBIN_U32("graphics/pokeblock/use_screen/mon_frame_pal.bin");
+static const u32 sMonFrame_Gfx[] = INCBIN_U32("graphics/pokeblock/use_screen/mon_frame.4bpp");
+static const u32 sMonFrame_Tilemap[] = INCBIN_U32("graphics/pokeblock/use_screen/mon_frame.bin");
+static const u32 sGraphData_Tilemap[] = INCBIN_U32("graphics/pokeblock/use_screen/graph_data.bin");
-const u32 gUnknown_085DFA60[] = INCBIN_U32("graphics/interface/85DFA60.bin");
-const u32 gUnknown_085DFA80[] = INCBIN_U32("graphics/interface/85DFA80.4bpp");
-const u32 gUnknown_085DFB60[] = INCBIN_U32("graphics/interface/85DFB60.bin");
-const u32 gUnknown_085DFC0C[] = INCBIN_U32("graphics/interface/85DFC0C.bin");
-
-const u32 gUnknown_085DFCB0[] =
+// The condition/flavors aren't listed in their normal order in this file, they're listed as shown on the graph going counter-clockwise
+// Normally they would go Cool/Spicy, Beauty/Dry, Cute/Sweet, Smart/Bitter, Tough/Sour (also graph order, but clockwise)
+static const u32 sMonDataConditions[FLAVOR_COUNT] =
{
MON_DATA_COOL,
MON_DATA_TOUGH,
@@ -169,13 +186,13 @@ const u32 gUnknown_085DFCB0[] =
MON_DATA_BEAUTY
};
-const u8 gUnknown_085DFCC4[] =
+static const u8 sFlavors[FLAVOR_COUNT] =
{
- 0, // Spicy/Cool
- 4, // Dry/Beauty
- 3, // Sweet/Cute
- 2, // Bitter/Smart
- 1 // Sour/Tough
+ FLAVOR_SPICY,
+ FLAVOR_SOUR,
+ FLAVOR_BITTER,
+ FLAVOR_SWEET,
+ FLAVOR_DRY
};
static const u8 sNatureTextColors[] =
@@ -185,7 +202,7 @@ static const u8 sNatureTextColors[] =
TEXT_COLOR_WHITE
};
-const struct BgTemplate gUnknown_085DFCCC[4] =
+static const struct BgTemplate sBgTemplates[4] =
{
{
.bg = 0,
@@ -225,50 +242,50 @@ const struct BgTemplate gUnknown_085DFCCC[4] =
}
};
-const struct WindowTemplate gUnknown_085DFCDC[] =
+static const struct WindowTemplate sWindowTemplates[WIN_COUNT + 1] =
{
- {
+ [WIN_NAME] = {
.bg = 0,
- .tilemapLeft = 0xD,
+ .tilemapLeft = 13,
.tilemapTop = 1,
- .width = 0xD,
+ .width = 13,
.height = 4,
- .paletteNum = 0xF,
+ .paletteNum = 15,
.baseBlock = 1
},
- {
+ [WIN_NATURE] = {
.bg = 0,
.tilemapLeft = 0,
- .tilemapTop = 0xE,
- .width = 0xB,
+ .tilemapTop = 14,
+ .width = 11,
.height = 2,
- .paletteNum = 0xF,
+ .paletteNum = 15,
.baseBlock = 0x35
},
- {
+ [WIN_TEXT] = {
.bg = 0,
.tilemapLeft = 1,
- .tilemapTop = 0x11,
- .width = 0x1C,
+ .tilemapTop = 17,
+ .width = 28,
.height = 2,
- .paletteNum = 0xF,
+ .paletteNum = 15,
.baseBlock = 0x4B
},
DUMMY_WIN_TEMPLATE
};
-const struct WindowTemplate sUsePokeblockYesNoWinTemplate =
+static const struct WindowTemplate sUsePokeblockYesNoWinTemplate =
{
.bg = 0,
- .tilemapLeft = 0x18,
- .tilemapTop = 0xB,
+ .tilemapLeft = 24,
+ .tilemapTop = 11,
.width = 5,
.height = 4,
- .paletteNum = 0xF,
+ .paletteNum = 15,
.baseBlock = 0x83
};
-const u8 *const sContestStatNames[] =
+static const u8 *const sContestStatNames[] =
{
gText_Coolness,
gText_Toughness,
@@ -277,26 +294,26 @@ const u8 *const sContestStatNames[] =
gText_Beauty3
};
-const struct SpriteSheet gSpriteSheet_ConditionUpDown =
+static const struct SpriteSheet sSpriteSheet_UpDown =
{
- gUsePokeblockUpDown_Gfx, 0x200, TAG_TILE_CONDITION_UP_DOWN
+ gUsePokeblockUpDown_Gfx, 0x200, TAG_UP_DOWN
};
-const struct SpritePalette gSpritePalette_ConditionUpDown =
+static const struct SpritePalette sSpritePalette_UpDown =
{
- gUsePokeblockUpDown_Pal, TAG_PAL_CONDITION_UP_DOWN
+ gUsePokeblockUpDown_Pal, TAG_UP_DOWN
};
-const s16 gUnknown_085DFD28[][2] =
+static const s16 sUpDownCoordsOnGraph[FLAVOR_COUNT][2] =
{
- {0x9C, 0x24},
- {0x75, 0x3B},
- {0x75, 0x76},
- {0xC5, 0x76},
- {0xC5, 0x3B}
+ {156, 36},
+ {117, 59},
+ {117, 118},
+ {197, 118},
+ {197, 59}
};
-const struct OamData gOamData_085DFD3C =
+static const struct OamData sOam_UpDown =
{
.y = 0,
.affineMode = ST_OAM_AFFINE_OFF,
@@ -310,36 +327,36 @@ const struct OamData gOamData_085DFD3C =
.paletteNum = 0,
};
-const union AnimCmd gSpriteAnim_085DFD44[] =
+static const union AnimCmd sAnim_Up[] =
{
ANIMCMD_FRAME(0, 5),
ANIMCMD_END
};
-const union AnimCmd gSpriteAnim_085DFD4C[] =
+static const union AnimCmd sAnim_Down[] =
{
ANIMCMD_FRAME(8, 5),
ANIMCMD_END
};
-const union AnimCmd *const gSpriteAnimTable_085DFD54[] =
+static const union AnimCmd *const sAnims_UpDown[] =
{
- gSpriteAnim_085DFD44,
- gSpriteAnim_085DFD4C
+ sAnim_Up,
+ sAnim_Down
};
-const struct SpriteTemplate gSpriteTemplate_085DFD5C =
+static const struct SpriteTemplate sSpriteTemplate_UpDown =
{
- .tileTag = 0,
- .paletteTag = 0,
- .oam = &gOamData_085DFD3C,
- .anims = gSpriteAnimTable_085DFD54,
+ .tileTag = TAG_UP_DOWN,
+ .paletteTag = TAG_UP_DOWN,
+ .oam = &sOam_UpDown,
+ .anims = sAnims_UpDown,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = SpriteCallbackDummy,
};
-const struct OamData gOamData_085DFD74 =
+static const struct OamData sOam_Condition =
{
.y = 0,
.affineMode = ST_OAM_AFFINE_OFF,
@@ -353,327 +370,341 @@ const struct OamData gOamData_085DFD74 =
.paletteNum = 0,
};
-const union AnimCmd gSpriteAnim_085DFD7C[] =
+static const union AnimCmd sAnim_Condition_0[] =
{
ANIMCMD_FRAME(0, 5),
ANIMCMD_END
};
-const union AnimCmd gSpriteAnim_085DFD84[] =
+static const union AnimCmd sAnim_Condition_1[] =
{
ANIMCMD_FRAME(32, 5),
ANIMCMD_END
};
-const union AnimCmd gSpriteAnim_085DFD8C[] =
+static const union AnimCmd sAnim_Condition_2[] =
{
ANIMCMD_FRAME(64, 5),
ANIMCMD_END
};
-const union AnimCmd *const gSpriteAnimTable_085DFD94[] =
+static const union AnimCmd *const sAnims_Condition[] =
{
- gSpriteAnim_085DFD7C,
- gSpriteAnim_085DFD84,
- gSpriteAnim_085DFD8C
+ sAnim_Condition_0,
+ sAnim_Condition_1,
+ sAnim_Condition_2
};
-const struct SpriteTemplate gSpriteTemplate_085DFDA0 =
+static const struct SpriteTemplate sSpriteTemplate_Condition =
{
- .tileTag = 1,
- .paletteTag = 1,
- .oam = &gOamData_085DFD74,
- .anims = gSpriteAnimTable_085DFD94,
+ .tileTag = TAG_CONDITION,
+ .paletteTag = TAG_CONDITION,
+ .oam = &sOam_Condition,
+ .anims = sAnims_Condition,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_8168374,
+ .callback = SpriteCB_Condition,
};
-const struct SpritePalette gSpritePalette_085DFDB8 =
+static const struct SpritePalette sSpritePalette_Condition =
{
- gUsePokeblockCondition_Pal, TAG_PAL_POKEBLOCK_CONDITION
+ gUsePokeblockCondition_Pal, TAG_CONDITION
};
-// code
+// When first opening the selection screen
void ChooseMonToGivePokeblock(struct Pokeblock *pokeblock, void (*callback)(void))
{
- gUnknown_0203BCAC = AllocZeroed(sizeof(*gUnknown_0203BCAC));
- gUnknown_0203BC90 = &gUnknown_0203BCAC->info;
- gUnknown_0203BC90->pokeblock = pokeblock;
- gUnknown_0203BC90->callback = callback;
- sub_816636C(sub_8166380);
- SetMainCallback2(sub_816631C);
+ sMenu = AllocZeroed(sizeof(*sMenu));
+ sInfo = &sMenu->info;
+ sInfo->pokeblock = pokeblock;
+ sInfo->exitCallback = callback;
+ SetUsePokeblockCallback(LoadUsePokeblockMenu);
+ SetMainCallback2(CB2_UsePokeblockMenu);
}
-void CB2_ReturnAndChooseMonToGivePokeblock(void)
-{
- gUnknown_0203BCAC = AllocZeroed(sizeof(*gUnknown_0203BCAC));
- gUnknown_0203BC90 = &gUnknown_0203BCAC->info;
- gUnknown_0203BC90->pokeblock = gUnknown_0203BC98;
- gUnknown_0203BC90->callback = gUnknown_0203BC94;
- gPokeblockMonId = sub_81672E4(gPokeblockMonId);
- gUnknown_0203BC90->field_56 = gPokeblockMonId < 4 ? 0 : 1;
- sub_816636C(sub_8166380);
- SetMainCallback2(sub_81662C0);
+// When returning to the selection screen after feeding a pokeblock to a mon
+static void CB2_ReturnAndChooseMonToGivePokeblock(void)
+{
+ sMenu = AllocZeroed(sizeof(*sMenu));
+ sInfo = &sMenu->info;
+ sInfo->pokeblock = sPokeblock;
+ sInfo->exitCallback = sExitCallback;
+ gPokeblockMonId = GetSelectionIdFromPartyId(gPokeblockMonId);
+ sInfo->monInTopHalf = (gPokeblockMonId <= PARTY_SIZE / 2) ? FALSE : TRUE;
+ SetUsePokeblockCallback(LoadUsePokeblockMenu);
+ SetMainCallback2(CB2_ReturnToUsePokeblockMenu);
}
-void sub_81662C0(void)
+static void CB2_ReturnToUsePokeblockMenu(void)
{
- gUnknown_0203BC90->field_0();
+ sInfo->callback();
AnimateSprites();
BuildOamBuffer();
UpdatePaletteFade();
- if (gUnknown_0203BC90->field_0 == sub_8166564)
+ if (sInfo->callback == ShowUsePokeblockMenu)
{
- gUnknown_0203BC90->field_50 = 0;
- SetMainCallback2(sub_8166304);
+ sInfo->mainState = 0;
+ SetMainCallback2(CB2_ShowUsePokeblockMenuForResults);
}
}
-void sub_8166304(void)
+static void CB2_ShowUsePokeblockMenuForResults(void)
{
- sub_81668F8();
+ ShowUsePokeblockMenuForResults();
AnimateSprites();
BuildOamBuffer();
UpdatePaletteFade();
}
-void sub_816631C(void)
+static void CB2_UsePokeblockMenu(void)
{
- gUnknown_0203BC90->field_0();
+ sInfo->callback();
AnimateSprites();
BuildOamBuffer();
RunTextPrinters();
UpdatePaletteFade();
}
-void sub_8166340(void)
+static void VBlankCB_UsePokeblockMenu(void)
{
LoadOam();
ProcessSpriteCopyRequests();
TransferPlttBuffer();
- sub_81D2108(&gUnknown_0203BCAC->field_7C58);
+ sub_81D2108(&sMenu->graph);
ScanlineEffect_InitHBlankDmaTransfer();
}
-void sub_816636C(void (*func)(void))
+static void SetUsePokeblockCallback(void (*func)(void))
{
- gUnknown_0203BC90->field_0 = func;
- gUnknown_0203BC90->field_50 = 0;
+ sInfo->callback = func;
+ sInfo->mainState = 0;
}
-void sub_8166380(void)
+static void LoadUsePokeblockMenu(void)
{
- switch (gUnknown_0203BC90->field_50)
+ switch (sInfo->mainState)
{
case 0:
- gUnknown_0203BCAC->field_7B10 = 0xFF;
- sub_81D1ED4(&gUnknown_0203BCAC->field_7C58);
- gUnknown_0203BC90->field_50++;
+ sMenu->curMonSpriteId = 0xFF;
+ sub_81D1ED4(&sMenu->graph);
+ sInfo->mainState++;
break;
case 1:
ResetSpriteData();
FreeAllSpritePalettes();
- gUnknown_0203BC90->field_50++;
+ sInfo->mainState++;
break;
case 2:
SetVBlankCallback(NULL);
CpuFill32(0, (void*)(VRAM), VRAM_SIZE);
- gUnknown_0203BC90->field_50++;
+ sInfo->mainState++;
break;
case 3:
ResetBgsAndClearDma3BusyFlags(0);
- InitBgsFromTemplates(0, gUnknown_085DFCCC, ARRAY_COUNT(gUnknown_085DFCCC));
- InitWindows(gUnknown_085DFCDC);
+ InitBgsFromTemplates(0, sBgTemplates, ARRAY_COUNT(sBgTemplates));
+ InitWindows(sWindowTemplates);
DeactivateAllTextPrinters();
LoadUserWindowBorderGfx(0, 0x97, 0xE0);
- gUnknown_0203BC90->field_50++;
+ sInfo->mainState++;
break;
case 4:
- gUnknown_0203BC90->field_50++;
+ sInfo->mainState++;
break;
case 5:
- if (!sub_8168328())
- gUnknown_0203BC90->field_50++;
+ if (!LoadConditionTitle())
+ sInfo->mainState++;
break;
case 6:
gKeyRepeatStartDelay = 20;
- sub_8167420();
- gUnknown_0203BC90->field_50++;
+ LoadPartyInfo();
+ sInfo->mainState++;
break;
case 7:
- if (!sub_8167930())
- gUnknown_0203BC90->field_50++;
+ if (!LoadUsePokeblockMenuGfx())
+ sInfo->mainState++;
break;
case 8:
- sub_8167608(0);
- sub_8167760();
- gUnknown_0203BC90->field_50++;
+ UpdateMonPic(0);
+ LoadAndCreateSelectionIcons();
+ sInfo->mainState++;
break;
case 9:
- if (!sub_81D312C(&gUnknown_0203BCAC->field_7B0E))
- gUnknown_0203BC90->field_50++;
+ if (!MoveConditionMonOnscreen(&sMenu->curMonXOffset))
+ sInfo->mainState++;
break;
case 10:
- gUnknown_0203BC90->field_50++;
+ sInfo->mainState++;
break;
case 11:
- sub_81D2754(gUnknown_0203BCAC->field_7C58.unk0[0], gUnknown_0203BCAC->field_7C58.unk14[0]);
- sub_81D20AC(&gUnknown_0203BCAC->field_7C58);
- gUnknown_0203BC90->field_50++;
+ sub_81D2754(sMenu->graph.unk0[0], sMenu->graph.unk14[0]);
+ sub_81D20AC(&sMenu->graph);
+ sInfo->mainState++;
break;
case 12:
- if (!sub_81D20BC(&gUnknown_0203BCAC->field_7C58))
+ if (!sub_81D20BC(&sMenu->graph))
{
- sub_81D1F84(&gUnknown_0203BCAC->field_7C58, gUnknown_0203BCAC->field_7C58.unk14[0], gUnknown_0203BCAC->field_7C58.unk14[0]);
- gUnknown_0203BC90->field_50++;
+ sub_81D1F84(&sMenu->graph, sMenu->graph.unk14[0], sMenu->graph.unk14[0]);
+ sInfo->mainState++;
}
break;
case 13:
- sub_81D2230(&gUnknown_0203BCAC->field_7C58);
- gUnknown_0203BC90->field_50++;
+ sub_81D2230(&sMenu->graph);
+ sInfo->mainState++;
break;
case 14:
- PutWindowTilemap(0);
- PutWindowTilemap(1);
- sub_8167BA0(0, 1);
- gUnknown_0203BC90->field_50++;
+ PutWindowTilemap(WIN_NAME);
+ PutWindowTilemap(WIN_NATURE);
+ UpdateMonInfoText(0, TRUE);
+ sInfo->mainState++;
break;
case 15:
- sub_816636C(sub_8166564);
+ SetUsePokeblockCallback(ShowUsePokeblockMenu);
break;
}
}
-void sub_8166564(void)
+static void ShowUsePokeblockMenu(void)
{
- switch (gUnknown_0203BC90->field_50)
+ switch (sInfo->mainState)
{
case 0:
BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, RGB_BLACK);
- SetVBlankCallback(sub_8166340);
+ SetVBlankCallback(VBlankCB_UsePokeblockMenu);
ShowBg(0);
ShowBg(1);
ShowBg(3);
ShowBg(2);
- gUnknown_0203BC90->field_50++;
+ sInfo->mainState++;
break;
case 1:
if (!gPaletteFade.active)
{
- sub_81D3464(gUnknown_0203BCAC->field_7B1C);
- if (gUnknown_0203BCAC->info.field_71 != gUnknown_0203BCAC->info.field_70 - 1)
+ ResetConditionSparkleSprites(sMenu->sparkles);
+ if (sMenu->info.curSelection != sMenu->info.numSelections - 1)
{
- u8 var0 = gUnknown_0203BCAC->unk7FB0[gUnknown_0203BCAC->field_7FB3];
- sub_81D3480(gUnknown_0203BCAC->field_7B1C, gUnknown_0203BCAC->field_7B10, var0);
+ u8 numSparkles = sMenu->numSparkles[sMenu->curLoadId];
+ CreateConditionSparkleSprites(sMenu->sparkles, sMenu->curMonSpriteId, numSparkles);
}
- sub_816636C(sub_8166634);
+ SetUsePokeblockCallback(UsePokeblockMenu);
}
break;
}
}
-void sub_8166634(void)
+enum {
+ STATE_HANDLE_INPUT,
+ STATE_UPDATE_SELECTION,
+ STATE_2, // unused state
+ STATE_CLOSE,
+ STATE_4, // unused state
+ STATE_CONFIRM_SELECTION,
+ STATE_HANDLE_CONFIRMATION,
+ STATE_WAIT_MSG,
+};
+
+static void UsePokeblockMenu(void)
{
- u8 var;
+ bool8 loading;
- switch (gUnknown_0203BC90->field_50)
+ switch (sInfo->mainState)
{
- case 0:
- if (gMain.heldKeys & DPAD_UP)
+ case STATE_HANDLE_INPUT:
+ if (JOY_HELD(DPAD_UP))
{
PlaySE(SE_SELECT);
- sub_8167CA0(TRUE);
- sub_81D3520(gUnknown_0203BCAC->field_7B1C);
- gUnknown_0203BC90->field_50 = 1;
+ UpdateSelection(TRUE);
+ DestroyConditionSparkleSprites(sMenu->sparkles);
+ sInfo->mainState = STATE_UPDATE_SELECTION;
}
- else if (gMain.heldKeys & DPAD_DOWN)
+ else if (JOY_HELD(DPAD_DOWN))
{
PlaySE(SE_SELECT);
- sub_8167CA0(FALSE);
- sub_81D3520(gUnknown_0203BCAC->field_7B1C);
- gUnknown_0203BC90->field_50 = 1;
+ UpdateSelection(FALSE);
+ DestroyConditionSparkleSprites(sMenu->sparkles);
+ sInfo->mainState = STATE_UPDATE_SELECTION;
}
- else if (gMain.newKeys & B_BUTTON)
+ else if (JOY_NEW(B_BUTTON))
{
PlaySE(SE_SELECT);
- gUnknown_0203BC90->field_50 = 3;
+ sInfo->mainState = STATE_CLOSE;
}
- else if (gMain.newKeys & A_BUTTON)
+ else if (JOY_NEW(A_BUTTON))
{
PlaySE(SE_SELECT);
- if (gUnknown_0203BCAC->info.field_71 == gUnknown_0203BCAC->info.field_70 - 1)
- gUnknown_0203BC90->field_50 = 3;
+
+ // If last item, selected Cancel. Otherwise selected mon
+ if (sMenu->info.curSelection == sMenu->info.numSelections - 1)
+ sInfo->mainState = STATE_CLOSE;
else
- gUnknown_0203BC90->field_50 = 5;
+ sInfo->mainState = STATE_CONFIRM_SELECTION;
}
break;
- case 1:
- var = gUnknown_0203BCAC->info.unk74();
- if (!var)
- gUnknown_0203BC90->field_50 = var;
+ case STATE_UPDATE_SELECTION:
+ loading = sMenu->info.loadNewSelection();
+ if (!loading)
+ sInfo->mainState = STATE_HANDLE_INPUT;
break;
- case 2:
+ case STATE_2:
break;
- case 3:
- sub_816636C(sub_8166BEC);
+ case STATE_CLOSE:
+ SetUsePokeblockCallback(CloseUsePokeblockMenu);
break;
- case 4:
+ case STATE_4:
break;
- case 5:
- sub_8166D44();
- gUnknown_0203BC90->field_50++;
+ case STATE_CONFIRM_SELECTION:
+ AskUsePokeblock();
+ sInfo->mainState++;
break;
- case 6:
- switch (sub_8166DE4())
+ case STATE_HANDLE_CONFIRMATION:
+ switch (HandleAskUsePokeblockInput())
{
- case 1:
- case -1:
- gUnknown_0203BC90->field_50 = 0;
+ case 1: // NO
+ case MENU_B_PRESSED:
+ sInfo->mainState = STATE_HANDLE_INPUT;
break;
- case 0:
+ case 0: // YES
if (IsSheenMaxed())
{
- sub_8166F50();
- gUnknown_0203BC90->field_50 = 7;
+ PrintWontEatAnymore();
+ sInfo->mainState = STATE_WAIT_MSG;
}
else
{
- sub_816636C(sub_816681C);
+ SetUsePokeblockCallback(FeedPokeblockToMon);
}
break;
}
break;
- case 7:
- if (gMain.newKeys & (A_BUTTON | B_BUTTON))
+ case STATE_WAIT_MSG:
+ if (JOY_NEW(A_BUTTON | B_BUTTON))
{
- sub_8166F94();
- gUnknown_0203BC90->field_50 = 0;
+ EraseMenuWindow();
+ sInfo->mainState = STATE_HANDLE_INPUT;
}
break;
}
}
-void sub_816681C(void)
+static void FeedPokeblockToMon(void)
{
- switch (gUnknown_0203BC90->field_50)
+ switch (sInfo->mainState)
{
case 0:
- gPokeblockMonId = sub_81672A4(gUnknown_0203BCAC->info.field_71);
- gUnknown_0203BC94 = gUnknown_0203BC90->callback;
- gUnknown_0203BC98 = gUnknown_0203BC90->pokeblock;
+ gPokeblockMonId = GetPartyIdFromSelectionId(sMenu->info.curSelection);
+ sExitCallback = sInfo->exitCallback;
+ sPokeblock = sInfo->pokeblock;
BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK);
- gUnknown_0203BC90->field_50++;
+ sInfo->mainState++;
break;
case 1:
if (!gPaletteFade.active)
{
SetVBlankCallback(NULL);
- FREE_AND_SET_NULL(gUnknown_0203BCA0);
- FREE_AND_SET_NULL(gUnknown_0203BCA4);
- FREE_AND_SET_NULL(gUnknown_0203BCA8);
- FREE_AND_SET_NULL(gUnknown_0203BCAC);
+ FREE_AND_SET_NULL(sGraph_Tilemap);
+ FREE_AND_SET_NULL(sGraph_Gfx);
+ FREE_AND_SET_NULL(sMonFrame_TilemapPtr);
+ FREE_AND_SET_NULL(sMenu);
FreeAllWindowBuffers();
gMain.savedCallback = CB2_ReturnAndChooseMonToGivePokeblock;
CB2_PreparePokeblockFeedScene();
@@ -682,184 +713,184 @@ void sub_816681C(void)
}
}
-void sub_81668F8(void)
+static void ShowUsePokeblockMenuForResults(void)
{
- u16 var;
+ bool8 loading;
- switch (gUnknown_0203BC90->field_50)
+ switch (sInfo->mainState)
{
case 0:
- if (gUnknown_0203BCAC->info.field_71 != gPokeblockMonId)
+ if (sMenu->info.curSelection != gPokeblockMonId)
{
- sub_8167CA0(gUnknown_0203BC90->field_56);
- gUnknown_0203BC90->field_50++;
+ UpdateSelection(sInfo->monInTopHalf);
+ sInfo->mainState++;
}
else
{
- gUnknown_0203BC90->field_50 = 3;
+ sInfo->mainState = 3;
}
break;
case 1:
- var = gUnknown_0203BCAC->info.unk74();
- if (!var)
- gUnknown_0203BC90->field_50 = var;
+ loading = sMenu->info.loadNewSelection();
+ if (!loading)
+ sInfo->mainState = 0;
break;
case 2:
break;
case 3:
BlendPalettes(0xFFFFFFFF, 16, RGB_BLACK);
- gUnknown_0203BC90->field_50++;
+ sInfo->mainState++;
break;
case 4:
ShowBg(0);
ShowBg(1);
ShowBg(3);
ShowBg(2);
- gUnknown_0203BC90->field_50++;
+ sInfo->mainState++;
break;
case 5:
- SetVBlankCallback(sub_8166340);
+ SetVBlankCallback(VBlankCB_UsePokeblockMenu);
BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, RGB_BLACK);
- gUnknown_0203BC90->field_50++;
+ sInfo->mainState++;
break;
case 6:
if (!gPaletteFade.active)
{
- sub_81D3464(gUnknown_0203BCAC->field_7B1C);
- sub_816636C(sub_8166A34);
- SetMainCallback2(sub_816631C);
+ ResetConditionSparkleSprites(sMenu->sparkles);
+ SetUsePokeblockCallback(ShowPokeblockResults);
+ SetMainCallback2(CB2_UsePokeblockMenu);
}
break;
}
}
-void sub_8166A34(void)
+static void ShowPokeblockResults(void)
{
u8 var;
- switch (gUnknown_0203BC90->field_50)
+ switch (sInfo->mainState)
{
case 0:
- gUnknown_0203BC90->mon = gPlayerParty;
- gUnknown_0203BC90->mon += gUnknown_0203BCAC->field_7FB8[gUnknown_0203BCAC->info.field_71].unk1;
- sub_81D3520(gUnknown_0203BCAC->field_7B1C);
- gUnknown_0203BC90->field_50++;
+ sInfo->mon = gPlayerParty;
+ sInfo->mon += sMenu->party[sMenu->info.curSelection].monId;
+ DestroyConditionSparkleSprites(sMenu->sparkles);
+ sInfo->mainState++;
break;
case 1:
- if (gMain.newKeys & (A_BUTTON | B_BUTTON))
- gUnknown_0203BC90->field_50++;
+ if (JOY_NEW(A_BUTTON | B_BUTTON))
+ sInfo->mainState++;
break;
case 2:
- sub_8167104();
- sub_81D2754(gUnknown_0203BC90->field_5c, gUnknown_0203BCAC->field_7C58.unk14[3]);
- sub_81D1F84(&gUnknown_0203BCAC->field_7C58, gUnknown_0203BCAC->field_7C58.unk14[gUnknown_0203BCAC->field_7FB3], gUnknown_0203BCAC->field_7C58.unk14[3]);
- sub_8167338();
- gUnknown_0203BC90->field_50++;
+ CalculateConditionEnhancements();
+ sub_81D2754(sInfo->conditionsAfterBlock, sMenu->graph.unk14[3]);
+ sub_81D1F84(&sMenu->graph, sMenu->graph.unk14[sMenu->curLoadId], sMenu->graph.unk14[3]);
+ LoadAndCreateUpDownSprites();
+ sInfo->mainState++;
break;
case 3:
- var = sub_81D2074(&gUnknown_0203BCAC->field_7C58);
+ var = TransitionConditionGraph(&sMenu->graph);
if (!var)
{
- sub_81681F4(sub_81672A4(gUnknown_0203BCAC->info.field_71));
- if (gUnknown_0203BCAC->info.field_71 != gUnknown_0203BCAC->info.field_70 - 1)
+ CalculateNumAdditionalSparkles(GetPartyIdFromSelectionId(sMenu->info.curSelection));
+ if (sMenu->info.curSelection != sMenu->info.numSelections - 1)
{
- u8 var0 = gUnknown_0203BCAC->unk7FB0[gUnknown_0203BCAC->field_7FB3];
- sub_81D3480(gUnknown_0203BCAC->field_7B1C, gUnknown_0203BCAC->field_7B10, var0);
+ u8 numSparkles = sMenu->numSparkles[sMenu->curLoadId];
+ CreateConditionSparkleSprites(sMenu->sparkles, sMenu->curMonSpriteId, numSparkles);
}
- gUnknown_0203BC90->field_52 = 0;
- gUnknown_0203BC90->field_50++;
+ sInfo->timer = 0;
+ sInfo->mainState++;
}
break;
case 4:
- if (++gUnknown_0203BC90->field_52 > 16)
+ if (++sInfo->timer > 16)
{
- sub_8166E24();
- gUnknown_0203BC90->field_50++;
+ PrintFirstEnhancement();
+ sInfo->mainState++;
}
break;
case 5:
- if (gMain.newKeys & (A_BUTTON | B_BUTTON) && !sub_8166EDC())
+ if (JOY_NEW(A_BUTTON | B_BUTTON) && !TryPrintNextEnhancement())
{
TryClearPokeblock((u8)gSpecialVar_ItemId);
- sub_816636C(sub_8166BEC);
+ SetUsePokeblockCallback(CloseUsePokeblockMenu);
}
break;
}
}
-void sub_8166BEC(void)
+static void CloseUsePokeblockMenu(void)
{
- u8 i, var;
+ u8 i;
- switch (gUnknown_0203BC90->field_50)
+ switch (sInfo->mainState)
{
case 0:
BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK);
- gUnknown_0203BC90->field_50++;
+ sInfo->mainState++;
break;
case 1:
if (!gPaletteFade.active)
- gUnknown_0203BC90->field_50 = 2;
+ sInfo->mainState = 2;
break;
case 2:
gScanlineEffect.state = 3;
ScanlineEffect_InitHBlankDmaTransfer();
- gUnknown_0203BC90->field_50++;
+ sInfo->mainState++;
break;
case 3:
- SetMainCallback2(gUnknown_0203BC90->callback);
- sub_81D354C(gUnknown_0203BCAC->field_7B1C);
- for (i = 0; i < 7; i++)
- DestroySprite(&gSprites[gUnknown_0203BCAC->field_7B06[i]]);
+ SetMainCallback2(sInfo->exitCallback);
+ FreeConditionSparkles(sMenu->sparkles);
+ for (i = 0; i < ARRAY_COUNT(sMenu->selectionIconSpriteIds); i++)
+ DestroySprite(&gSprites[sMenu->selectionIconSpriteIds[i]]);
- FreeSpriteTilesByTag(0);
- FreeSpriteTilesByTag(1);
- FreeSpritePaletteByTag(0);
- FreeSpritePaletteByTag(1);
+ FreeSpriteTilesByTag(TAG_UP_DOWN);
+ FreeSpriteTilesByTag(TAG_CONDITION);
+ FreeSpritePaletteByTag(TAG_UP_DOWN);
+ FreeSpritePaletteByTag(TAG_CONDITION);
- for (i = 0; i < 2; i++)
- DestroySprite(gUnknown_0203BCAC->field_7B44[i]);
+ for (i = 0; i < ARRAY_COUNT(sMenu->condition); i++)
+ DestroySprite(sMenu->condition[i]);
- if (gUnknown_0203BCAC->field_7B10 != 0xFF)
- DestroySprite(&gSprites[gUnknown_0203BCAC->field_7B10]);
+ if (sMenu->curMonSpriteId != 0xFF)
+ DestroySprite(&gSprites[sMenu->curMonSpriteId]);
SetVBlankCallback(NULL);
- FREE_AND_SET_NULL(gUnknown_0203BCA0);
- FREE_AND_SET_NULL(gUnknown_0203BCA4);
- FREE_AND_SET_NULL(gUnknown_0203BCA8);
- FREE_AND_SET_NULL(gUnknown_0203BCAC);
+ FREE_AND_SET_NULL(sGraph_Tilemap);
+ FREE_AND_SET_NULL(sGraph_Gfx);
+ FREE_AND_SET_NULL(sMonFrame_TilemapPtr);
+ FREE_AND_SET_NULL(sMenu);
FreeAllWindowBuffers();
break;
}
}
-void sub_8166D44(void)
+static void AskUsePokeblock(void)
{
u8 stringBuffer[0x40];
- GetMonData(&gPlayerParty[sub_81672A4(gUnknown_0203BCAC->info.field_71)], MON_DATA_NICKNAME, stringBuffer);
+ GetMonData(&gPlayerParty[GetPartyIdFromSelectionId(sMenu->info.curSelection)], MON_DATA_NICKNAME, stringBuffer);
StringGetEnd10(stringBuffer);
StringAppend(stringBuffer, gText_GetsAPokeBlockQuestion);
StringCopy(gStringVar4, stringBuffer);
- FillWindowPixelBuffer(2, 17);
- DrawTextBorderOuter(2, 151, 14);
- AddTextPrinterParameterized(2, 1, gStringVar4, 0, 1, 0, NULL);
- PutWindowTilemap(2);
- CopyWindowToVram(2, 3);
+ FillWindowPixelBuffer(WIN_TEXT, 17);
+ DrawTextBorderOuter(WIN_TEXT, 151, 14);
+ AddTextPrinterParameterized(WIN_TEXT, 1, gStringVar4, 0, 1, 0, NULL);
+ PutWindowTilemap(WIN_TEXT);
+ CopyWindowToVram(WIN_TEXT, 3);
CreateYesNoMenu(&sUsePokeblockYesNoWinTemplate, 151, 14, 0);
}
-s8 sub_8166DE4(void)
+static s8 HandleAskUsePokeblockInput(void)
{
s8 menuItem = Menu_ProcessInputNoWrapClearOnChoose();
switch (menuItem)
{
- case 0:
+ case 0: // YES
break;
case MENU_B_PRESSED:
- case 1:
+ case 1: // NO
PlaySE(SE_SELECT);
rbox_fill_rectangle(2);
ClearWindowTilemap(2);
@@ -869,84 +900,84 @@ s8 sub_8166DE4(void)
return menuItem;
}
-void sub_8166E24(void)
+static void PrintFirstEnhancement(void)
{
- DrawTextBorderOuter(2, 151, 14);
- FillWindowPixelBuffer(2, 17);
+ DrawTextBorderOuter(WIN_TEXT, 151, 14);
+ FillWindowPixelBuffer(WIN_TEXT, 17);
- for (gUnknown_0203BC90->field_53 = 0; gUnknown_0203BC90->field_53 < 5; gUnknown_0203BC90->field_53++)
+ for (sInfo->statId = 0; sInfo->statId < FLAVOR_COUNT; sInfo->statId++)
{
- if (gUnknown_0203BC90->field_61[gUnknown_0203BC90->field_53] != 0)
+ if (sInfo->enhancements[sInfo->statId] != 0)
break;
}
- if (gUnknown_0203BC90->field_53 < 5)
- Pokeblock_BufferEnhancedStatText(gStringVar4, gUnknown_0203BC90->field_53, gUnknown_0203BC90->field_61[gUnknown_0203BC90->field_53]);
+ if (sInfo->statId < FLAVOR_COUNT)
+ BufferEnhancedStatText(gStringVar4, sInfo->statId, sInfo->enhancements[sInfo->statId]);
else
- Pokeblock_BufferEnhancedStatText(gStringVar4, gUnknown_0203BC90->field_53, 0);
+ BufferEnhancedStatText(gStringVar4, sInfo->statId, 0);
- Pokeblock_MenuWindowTextPrint(gStringVar4);
- PutWindowTilemap(2);
- CopyWindowToVram(2, 3);
+ PrintMenuWindowText(gStringVar4);
+ PutWindowTilemap(WIN_TEXT);
+ CopyWindowToVram(WIN_TEXT, 3);
}
-bool8 sub_8166EDC(void)
+static bool8 TryPrintNextEnhancement(void)
{
- FillWindowPixelBuffer(2, 17);
+ FillWindowPixelBuffer(WIN_TEXT, 17);
while (1)
{
- gUnknown_0203BC90->field_53++;
- if (gUnknown_0203BC90->field_53 < 5)
+ sInfo->statId++;
+ if (sInfo->statId < FLAVOR_COUNT)
{
- if (gUnknown_0203BC90->field_61[gUnknown_0203BC90->field_53] != 0)
+ if (sInfo->enhancements[sInfo->statId] != 0)
break;
}
else
{
- gUnknown_0203BC90->field_53 = 5;
+ sInfo->statId = FLAVOR_COUNT;
return FALSE;
}
}
- Pokeblock_BufferEnhancedStatText(gStringVar4, gUnknown_0203BC90->field_53, gUnknown_0203BC90->field_61[gUnknown_0203BC90->field_53]);
- Pokeblock_MenuWindowTextPrint(gStringVar4);
- CopyWindowToVram(2, 2);
+ BufferEnhancedStatText(gStringVar4, sInfo->statId, sInfo->enhancements[sInfo->statId]);
+ PrintMenuWindowText(gStringVar4);
+ CopyWindowToVram(WIN_TEXT, 2);
return TRUE;
}
-void sub_8166F50(void)
+static void PrintWontEatAnymore(void)
{
- FillWindowPixelBuffer(2, 17);
- DrawTextBorderOuter(2, 151, 14);
- AddTextPrinterParameterized(2, 1, gText_WontEatAnymore, 0, 1, 0, NULL);
- PutWindowTilemap(2);
- CopyWindowToVram(2, 3);
+ FillWindowPixelBuffer(WIN_TEXT, 17);
+ DrawTextBorderOuter(WIN_TEXT, 151, 14);
+ AddTextPrinterParameterized(WIN_TEXT, 1, gText_WontEatAnymore, 0, 1, 0, NULL);
+ PutWindowTilemap(WIN_TEXT);
+ CopyWindowToVram(WIN_TEXT, 3);
}
-void sub_8166F94(void)
+static void EraseMenuWindow(void)
{
- rbox_fill_rectangle(2);
- ClearWindowTilemap(2);
- CopyWindowToVram(2, 3);
+ rbox_fill_rectangle(WIN_TEXT);
+ ClearWindowTilemap(WIN_TEXT);
+ CopyWindowToVram(WIN_TEXT, 3);
}
-void Pokeblock_MenuWindowTextPrint(const u8 *message)
+static void PrintMenuWindowText(const u8 *message)
{
- AddTextPrinterParameterized(2, 1, gStringVar4, 0, 1, 0, NULL);
+ AddTextPrinterParameterized(WIN_TEXT, 1, gStringVar4, 0, 1, 0, NULL);
}
-void Pokeblock_BufferEnhancedStatText(u8 *dest, u8 statId, s16 a2)
+static void BufferEnhancedStatText(u8 *dest, u8 statId, s16 enhancement)
{
- switch (a2)
+ switch (enhancement)
{
- case 1 ... 32767:
- a2 = 0;
+ case 1 ... 32767: // if > 0
+ enhancement = 0;
// fallthrough
- case -32768 ... -1:
- if (a2)
- dest[(u16)a2] += 0; // something you can't imagine
+ case -32768 ... -1: // if < 0
+ if (enhancement)
+ dest[(u16)enhancement] += 0; // something you can't imagine
StringCopy(dest, sContestStatNames[statId]);
StringAppend(dest, gText_WasEnhanced);
break;
@@ -956,15 +987,15 @@ void Pokeblock_BufferEnhancedStatText(u8 *dest, u8 statId, s16 a2)
}
}
-void Pokeblock_GetMonContestStats(struct Pokemon *mon, u8 *data)
+static void GetMonConditions(struct Pokemon *mon, u8 *data)
{
u16 i;
- for (i = 0; i < 5; i++)
- data[i] = GetMonData(mon, gUnknown_085DFCB0[i]);
+ for (i = 0; i < FLAVOR_COUNT; i++)
+ data[i] = GetMonData(mon, sMonDataConditions[i]);
}
-void sub_8167054(struct Pokeblock *pokeblock, struct Pokemon *mon)
+static void AddPokeblockToConditions(struct Pokeblock *pokeblock, struct Pokemon *mon)
{
u16 i;
s16 cstat;
@@ -972,17 +1003,17 @@ void sub_8167054(struct Pokeblock *pokeblock, struct Pokemon *mon)
if (GetMonData(mon, MON_DATA_SHEEN) != 255)
{
- sub_8167184(pokeblock, mon);
- for (i = 0; i < 5; i++)
+ CalculatePokeblockEffectiveness(pokeblock, mon);
+ for (i = 0; i < FLAVOR_COUNT; i++)
{
- data = GetMonData(mon, gUnknown_085DFCB0[i]);
- cstat = data + gUnknown_0203BC90->field_66[i];
+ data = GetMonData(mon, sMonDataConditions[i]);
+ cstat = data + sInfo->pokeblockStatBoosts[i];
if (cstat < 0)
cstat = 0;
if (cstat > 255)
cstat = 255;
data = cstat;
- SetMonData(mon, gUnknown_085DFCB0[i], &data);
+ SetMonData(mon, sMonDataConditions[i], &data);
}
cstat = (u8)(GetMonData(mon, MON_DATA_SHEEN)) + pokeblock->feel;
@@ -994,28 +1025,28 @@ void sub_8167054(struct Pokeblock *pokeblock, struct Pokemon *mon)
}
}
-void sub_8167104(void)
+static void CalculateConditionEnhancements(void)
{
u16 i;
struct Pokemon *mon = gPlayerParty;
- mon += gUnknown_0203BCAC->unk7FB0[gUnknown_0203BCAC->info.field_71 * 4 + 9];
+ mon += sMenu->party[sMenu->info.curSelection].monId;
- Pokeblock_GetMonContestStats(mon, gUnknown_0203BC90->field_57);
- sub_8167054(gUnknown_0203BC90->pokeblock, mon);
- Pokeblock_GetMonContestStats(mon, gUnknown_0203BC90->field_5c);
- for (i = 0; i < 5; i++)
- gUnknown_0203BC90->field_61[i] = gUnknown_0203BC90->field_5c[i] - gUnknown_0203BC90->field_57[i];
+ GetMonConditions(mon, sInfo->conditionsBeforeBlock);
+ AddPokeblockToConditions(sInfo->pokeblock, mon);
+ GetMonConditions(mon, sInfo->conditionsAfterBlock);
+ for (i = 0; i < FLAVOR_COUNT; i++)
+ sInfo->enhancements[i] = sInfo->conditionsAfterBlock[i] - sInfo->conditionsBeforeBlock[i];
}
-void sub_8167184(struct Pokeblock *pokeblock, struct Pokemon *mon)
+static void CalculatePokeblockEffectiveness(struct Pokeblock *pokeblock, struct Pokemon *mon)
{
s8 i, direction, taste;
- gUnknown_0203BC90->field_66[0] = pokeblock->spicy;
- gUnknown_0203BC90->field_66[1] = pokeblock->sour;
- gUnknown_0203BC90->field_66[2] = pokeblock->bitter;
- gUnknown_0203BC90->field_66[3] = pokeblock->sweet;
- gUnknown_0203BC90->field_66[4] = pokeblock->dry;
+ sInfo->pokeblockStatBoosts[0] = pokeblock->spicy;
+ sInfo->pokeblockStatBoosts[1] = pokeblock->sour;
+ sInfo->pokeblockStatBoosts[2] = pokeblock->bitter;
+ sInfo->pokeblockStatBoosts[3] = pokeblock->sweet;
+ sInfo->pokeblockStatBoosts[4] = pokeblock->dry;
if (gPokeblockGain > 0)
direction = 1;
@@ -1024,24 +1055,24 @@ void sub_8167184(struct Pokeblock *pokeblock, struct Pokemon *mon)
else
return;
- for (i = 0; i < 5; i++)
+ for (i = 0; i < FLAVOR_COUNT; i++)
{
- s16 amount = gUnknown_0203BC90->field_66[i];
+ s16 amount = sInfo->pokeblockStatBoosts[i];
s8 boost = amount / 10;
if (amount % 10 >= 5) // round to the nearest
boost++;
- taste = GetMonFlavorRelation(mon, gUnknown_085DFCC4[i]);
+ taste = GetMonFlavorRelation(mon, sFlavors[i]);
if (taste == direction)
- gUnknown_0203BC90->field_66[i] += boost * taste;
+ sInfo->pokeblockStatBoosts[i] += boost * taste;
}
}
-bool8 IsSheenMaxed(void)
+static bool8 IsSheenMaxed(void)
{
- if (GetBoxOrPartyMonData(gUnknown_0203BCAC->field_7FB8[gUnknown_0203BCAC->info.field_71].unk0,
- gUnknown_0203BCAC->field_7FB8[gUnknown_0203BCAC->info.field_71].unk1,
+ if (GetBoxOrPartyMonData(sMenu->party[sMenu->info.curSelection].boxId,
+ sMenu->party[sMenu->info.curSelection].monId,
MON_DATA_SHEEN,
NULL) == 255)
return TRUE;
@@ -1049,7 +1080,7 @@ bool8 IsSheenMaxed(void)
return FALSE;
}
-u8 sub_81672A4(u8 a0)
+static u8 GetPartyIdFromSelectionId(u8 selectionId)
{
u8 i;
@@ -1057,58 +1088,58 @@ u8 sub_81672A4(u8 a0)
{
if (!GetMonData(&gPlayerParty[i], MON_DATA_IS_EGG))
{
- if (a0 == 0)
+ if (selectionId == 0)
return i;
- a0--;
+ selectionId--;
}
}
return 0;
}
-u8 sub_81672E4(u8 partyCount)
+// Eggs are not viewable on the condition screen, so count how many are skipped over to reach the party id
+static u8 GetSelectionIdFromPartyId(u8 partyId)
{
u8 i, numEggs;
-
- for (i = 0, numEggs = 0; i < partyCount; i++)
+ for (i = 0, numEggs = 0; i < partyId; i++)
{
if (GetMonData(&gPlayerParty[i], MON_DATA_IS_EGG))
numEggs++;
}
- return partyCount - numEggs;
+ return partyId - numEggs;
}
-u8 sub_8167324(u8 a0)
+// Unused
+static u8 GetPartyIdFromSelectionId_(u8 selectionId)
{
- return sub_81672A4(a0);
+ return GetPartyIdFromSelectionId(selectionId);
}
-void sub_8167338(void)
+static void LoadAndCreateUpDownSprites(void)
{
u16 i, spriteId;
- LoadSpriteSheet(&gSpriteSheet_ConditionUpDown);
- LoadSpritePalette(&gSpritePalette_ConditionUpDown);
- gUnknown_0203BC90->field_54 = 0;
+ LoadSpriteSheet(&sSpriteSheet_UpDown);
+ LoadSpritePalette(&sSpritePalette_UpDown);
+ sInfo->numEnhancements = 0;
- for (i = 0; i < 5; i++)
+ for (i = 0; i < FLAVOR_COUNT; i++)
{
- if (gUnknown_0203BC90->field_61[i] != 0)
+ if (sInfo->enhancements[i] != 0)
{
- spriteId = CreateSprite(&gSpriteTemplate_085DFD5C, gUnknown_085DFD28[i][0], gUnknown_085DFD28[i][1], 0);
+ spriteId = CreateSprite(&sSpriteTemplate_UpDown, sUpDownCoordsOnGraph[i][0], sUpDownCoordsOnGraph[i][1], 0);
if (spriteId != MAX_SPRITES)
{
- if (gUnknown_0203BC90->field_61[i] != 0)
- gSprites[spriteId].callback = sub_81673DC;
-
- gUnknown_0203BC90->field_54++;
+ if (sInfo->enhancements[i] != 0) // Always true here
+ gSprites[spriteId].callback = SpriteCB_UpDown;
+ sInfo->numEnhancements++;
}
}
}
}
-void sub_81673DC(struct Sprite *sprite)
+static void SpriteCB_UpDown(struct Sprite *sprite)
{
if (sprite->data[0] < 6)
sprite->pos2.y -= 2;
@@ -1118,11 +1149,11 @@ void sub_81673DC(struct Sprite *sprite)
if (++sprite->data[0] > 60)
{
DestroySprite(sprite);
- gUnknown_0203BC90->field_54--;
+ sInfo->numEnhancements--;
}
}
-void sub_8167420(void)
+static void LoadPartyInfo(void)
{
u16 i;
u16 numMons;
@@ -1131,91 +1162,91 @@ void sub_8167420(void)
{
if (!GetMonData(&gPlayerParty[i], MON_DATA_IS_EGG))
{
- gUnknown_0203BCAC->field_7FB8[numMons].unk0 = 14;
- gUnknown_0203BCAC->field_7FB8[numMons].unk1 = i;
- gUnknown_0203BCAC->field_7FB8[numMons].unk2 = 0;
+ sMenu->party[numMons].boxId = TOTAL_BOXES_COUNT;
+ sMenu->party[numMons].monId = i;
+ sMenu->party[numMons].data = 0;
numMons++;
}
}
- gUnknown_0203BCAC->info.field_71 = 0;
- gUnknown_0203BCAC->info.field_70 = numMons + 1;
- sub_81674BC();
+ sMenu->info.curSelection = 0;
+ sMenu->info.numSelections = numMons + 1;
+ LoadInitialMonInfo();
}
-void sub_81674BC(void)
+static void LoadInitialMonInfo(void)
{
- s16 var, var2;
+ s16 nextSelection, prevSelection;
- sub_816753C(gUnknown_0203BCAC->info.field_71, 0);
- gUnknown_0203BCAC->field_7FB3 = 0;
- gUnknown_0203BCAC->field_7FB4 = 1;
- gUnknown_0203BCAC->field_7FB5 = 2;
+ LoadMonInfo(sMenu->info.curSelection, 0);
+ sMenu->curLoadId = 0;
+ sMenu->nextLoadId = 1;
+ sMenu->prevLoadId = 2;
- var = gUnknown_0203BCAC->info.field_71 + 1;
- if (var >= gUnknown_0203BCAC->info.field_70)
- var = 0;
+ nextSelection = sMenu->info.curSelection + 1;
+ if (nextSelection >= sMenu->info.numSelections)
+ nextSelection = 0;
- var2 = gUnknown_0203BCAC->info.field_71 - 1;
- if (var2 < 0)
- var2 = gUnknown_0203BCAC->info.field_70 - 1;
+ prevSelection = sMenu->info.curSelection - 1;
+ if (prevSelection < 0)
+ prevSelection = sMenu->info.numSelections - 1;
- sub_816753C(var, 1);
- sub_816753C(var2, 2);
+ LoadMonInfo(nextSelection, 1);
+ LoadMonInfo(prevSelection, 2);
}
-void sub_816753C(s16 id1, u8 id2)
+static void LoadMonInfo(s16 partyId, u8 loadId)
{
- u8 boxId = gUnknown_0203BCAC->field_7FB8[id1].unk0;
- u8 monId = gUnknown_0203BCAC->field_7FB8[id1].unk1;
- u8 r6 = gUnknown_0203BCAC->info.field_70;
- bool8 r8 = FALSE;
+ u8 boxId = sMenu->party[partyId].boxId;
+ u8 monId = sMenu->party[partyId].monId;
+ u8 numSelections = sMenu->info.numSelections;
+ bool8 excludesCancel = FALSE; // whether or not numSelections excludes Cancel from the count
- sub_81D2ED4(gUnknown_0203BCAC->field_7B4D[id2], gUnknown_0203BCAC->field_7B95[id2], boxId, monId, id1, r6, r8);
- sub_81D2F78(&gUnknown_0203BCAC->field_7C58, gUnknown_0203BCAC->unk7FB0, boxId, monId, id1, id2, r6, r8);
- sub_81D3094(gUnknown_0203BCAC->field_304[id2], gUnknown_0203BCAC->field_4[id2], boxId, monId, id1, r6, r8);
+ GetConditionMenuMonNameAndLocString(sMenu->locationStrings[loadId], sMenu->monNameStrings[loadId], boxId, monId, partyId, numSelections, excludesCancel);
+ GetConditionMenuMonConditions(&sMenu->graph, sMenu->numSparkles, boxId, monId, partyId, loadId, numSelections, excludesCancel);
+ GetConditionMenuMonGfx(sMenu->partySheets[loadId], sMenu->partyPalettes[loadId], boxId, monId, partyId, numSelections, excludesCancel);
}
-void sub_8167608(u8 arg0)
+static void UpdateMonPic(u8 loadId)
{
u8 spriteId;
struct SpriteTemplate spriteTemplate;
struct SpriteSheet spriteSheet;
struct SpritePalette spritePal;
- if (gUnknown_0203BCAC->field_7B10 == 0xFF)
+ if (sMenu->curMonSpriteId == 0xFF)
{
- sub_81D31D0(&spriteSheet, &spriteTemplate, &spritePal);
- spriteSheet.data = gUnknown_0203BCAC->field_304[arg0];
- spritePal.data = gUnknown_0203BCAC->field_4[arg0];
- gUnknown_0203BCAC->field_7B12 = LoadSpritePalette(&spritePal);
- gUnknown_0203BCAC->field_7B14 = LoadSpriteSheet(&spriteSheet);
+ LoadConditionMonPicTemplate(&spriteSheet, &spriteTemplate, &spritePal);
+ spriteSheet.data = sMenu->partySheets[loadId];
+ spritePal.data = sMenu->partyPalettes[loadId];
+ sMenu->curMonPalette = LoadSpritePalette(&spritePal);
+ sMenu->curMonSheet = LoadSpriteSheet(&spriteSheet);
spriteId = CreateSprite(&spriteTemplate, 38, 104, 0);
- gUnknown_0203BCAC->field_7B10 = spriteId;
+ sMenu->curMonSpriteId = spriteId;
if (spriteId == MAX_SPRITES)
{
- FreeSpriteTilesByTag(100);
- FreeSpritePaletteByTag(100);
- gUnknown_0203BCAC->field_7B10 = 0xFF;
+ FreeSpriteTilesByTag(TAG_CONDITION_MON);
+ FreeSpritePaletteByTag(TAG_CONDITION_MON);
+ sMenu->curMonSpriteId = 0xFF;
}
else
{
- gUnknown_0203BCAC->field_7B10 = spriteId;
- gSprites[gUnknown_0203BCAC->field_7B10].callback = sub_8168168;
- gSprites[gUnknown_0203BCAC->field_7B10].pos2.y -= 34;
- gUnknown_0203BCAC->field_7B18 = (void*)(OBJ_VRAM0 + (gUnknown_0203BCAC->field_7B14 * 32));
- gUnknown_0203BCAC->field_7B12 = (gUnknown_0203BCAC->field_7B12 * 16) + 0x100;
+ sMenu->curMonSpriteId = spriteId;
+ gSprites[sMenu->curMonSpriteId].callback = SpriteCB_MonPic;
+ gSprites[sMenu->curMonSpriteId].pos2.y -= 34;
+ sMenu->curMonTileStart = (void*)(OBJ_VRAM0 + (sMenu->curMonSheet * 32));
+ sMenu->curMonPalette = (sMenu->curMonPalette * 16) + 0x100;
}
}
else
{
- do {} while(0); // Surprised to see something like this? It's a very neat trick for generating the same assembly. It has no practical purpose, feel free to remove it.
- DmaCopy16Defvars(3, gUnknown_0203BCAC->field_304[arg0], gUnknown_0203BCAC->field_7B18, 0x800);
- LoadPalette(gUnknown_0203BCAC->field_4[arg0], gUnknown_0203BCAC->field_7B12, 32);
+ do {} while(0); // Only needed to match, feel free to remove.
+ DmaCopy16Defvars(3, sMenu->partySheets[loadId], sMenu->curMonTileStart, 0x800);
+ LoadPalette(sMenu->partyPalettes[loadId], sMenu->curMonPalette, 32);
}
}
-void sub_8167760(void)
+static void LoadAndCreateSelectionIcons(void)
{
u16 i, spriteId;
struct SpriteSheet spriteSheets[4];
@@ -1224,62 +1255,65 @@ void sub_8167760(void)
struct SpriteSheet spriteSheet2;
struct SpritePalette spritePal2;
- sub_81D321C(spriteSheets, &spriteTemplate, spritePals);
+ LoadConditionSelectionIcons(spriteSheets, &spriteTemplate, spritePals);
LoadSpriteSheets(spriteSheets);
LoadSpritePalettes(spritePals);
- for (i = 0; i < gUnknown_0203BCAC->info.field_70 - 1; i++)
+ // Fill pokeball selection icons up to number in party
+ for (i = 0; i < sMenu->info.numSelections - 1; i++)
{
spriteId = CreateSprite(&spriteTemplate, 226, (i * 20) + 8, 0);
if (spriteId != MAX_SPRITES)
{
- gUnknown_0203BCAC->field_7B06[i] = spriteId;
+ sMenu->selectionIconSpriteIds[i] = spriteId;
gSprites[spriteId].data[0] = i;
- gSprites[spriteId].callback = sub_8168180;
+ gSprites[spriteId].callback = SpriteCB_SelectionIconPokeball;
}
else
{
- gUnknown_0203BCAC->field_7B06[i] = -1;
+ sMenu->selectionIconSpriteIds[i] = -1;
}
}
- spriteTemplate.tileTag = 103;
- for (; i < 6; i++)
+ // Fill placeholder icons for remaining (empty) party slots
+ spriteTemplate.tileTag = TAG_CONDITION_BALL_PLACEHOLDER;
+ for (; i < PARTY_SIZE; i++)
{
spriteId = CreateSprite(&spriteTemplate, 230, (i * 20) + 8, 0);
if (spriteId != MAX_SPRITES)
{
- gUnknown_0203BCAC->field_7B06[i] = spriteId;
+ sMenu->selectionIconSpriteIds[i] = spriteId;
gSprites[spriteId].oam.size = 0;
}
else
{
- gUnknown_0203BCAC->field_7B06[i] = -1;
+ sMenu->selectionIconSpriteIds[i] = -1;
}
}
- spriteTemplate.tileTag = 102;
- spriteTemplate.callback = sub_81681B4;
+ // Add cancel selection icon at bottom
+ spriteTemplate.tileTag = TAG_CONDITION_CANCEL;
+ spriteTemplate.callback = SpriteCB_SelectionIconCancel;
spriteId = CreateSprite(&spriteTemplate, 222, (i * 20) + 8, 0);
if (spriteId != MAX_SPRITES)
{
- gUnknown_0203BCAC->field_7B06[i] = spriteId;
+ sMenu->selectionIconSpriteIds[i] = spriteId;
gSprites[spriteId].oam.shape = SPRITE_SHAPE(32x16);
gSprites[spriteId].oam.size = SPRITE_SIZE(32x16);
}
else
{
- gUnknown_0203BCAC->field_7B06[i] = -1;
+ sMenu->selectionIconSpriteIds[i] = -1;
}
- sub_81D32B0(&spriteSheet2, &spritePal2);
+ LoadConditionSparkle(&spriteSheet2, &spritePal2);
LoadSpriteSheet(&spriteSheet2);
LoadSpritePalette(&spritePal2);
}
-bool8 sub_8167930(void)
+static bool8 LoadUsePokeblockMenuGfx(void)
{
- switch (gUnknown_0203BCAC->info.unk78)
+ switch (sMenu->info.helperState)
{
case 0:
ChangeBgX(0, 0, 0);
@@ -1290,296 +1324,308 @@ bool8 sub_8167930(void)
ChangeBgY(2, 0, 0);
ChangeBgX(3, 0, 0);
ChangeBgY(3, 136 << 6, 0);
- SetGpuReg(REG_OFFSET_DISPCNT, 28736);
- SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT1_BG2|BLDCNT_EFFECT_BLEND|BLDCNT_TGT2_BG1);
+ SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_OBJ_1D_MAP | DISPCNT_OBJ_ON | DISPCNT_WIN0_ON | DISPCNT_WIN1_ON);
+ SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT1_BG2 | BLDCNT_EFFECT_BLEND | BLDCNT_TGT2_BG1);
SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(11, 4));
break;
case 1:
- gUnknown_0203BCA4 = Alloc(6656);
- gUnknown_0203BCA0 = Alloc(1280);
- gUnknown_0203BCA8 = Alloc(1280);
+ sGraph_Gfx = Alloc(6656);
+ sGraph_Tilemap = Alloc(1280);
+ sMonFrame_TilemapPtr = Alloc(1280);
break;
case 2:
- LZ77UnCompVram(gUnknown_085DFB60, gUnknown_0203BCA8);
+ LZ77UnCompVram(sMonFrame_Tilemap, sMonFrame_TilemapPtr);
break;
case 3:
- LoadBgTiles(3, gUnknown_085DFA80, 224, 0);
+ LoadBgTiles(3, sMonFrame_Gfx, 224, 0);
break;
case 4:
- LoadBgTilemap(3, gUnknown_0203BCA8, 1280, 0);
+ LoadBgTilemap(3, sMonFrame_TilemapPtr, 1280, 0);
break;
case 5:
- LoadPalette(gUnknown_085DFA60, 208, 32);
- gUnknown_0203BCAC->field_7B0E = 0xFFB0;
+ LoadPalette(sMonFrame_Pal, 208, 32);
+ sMenu->curMonXOffset = -80;
break;
case 6:
- LZ77UnCompVram(gUsePokeblockGraph_Gfx, gUnknown_0203BCA4);
+ LZ77UnCompVram(gUsePokeblockGraph_Gfx, sGraph_Gfx);
break;
case 7:
- LZ77UnCompVram(gUsePokeblockGraph_Tilemap, gUnknown_0203BCA0);
+ LZ77UnCompVram(gUsePokeblockGraph_Tilemap, sGraph_Tilemap);
LoadPalette(gUsePokeblockGraph_Pal, 32, 32);
break;
case 8:
- LoadBgTiles(1, gUnknown_0203BCA4, 6656, 160 << 2);
+ LoadBgTiles(1, sGraph_Gfx, 6656, 160 << 2);
break;
case 9:
- SetBgTilemapBuffer(1, gUnknown_0203BCA0);
+ SetBgTilemapBuffer(1, sGraph_Tilemap);
CopyToBgTilemapBufferRect(1, gUsePokeblockNatureWin_Pal, 0, 13, 12, 4);
CopyBgTilemapBufferToVram(1);
break;
case 10:
- LZ77UnCompVram(gUnknown_085DFC0C, gUnknown_0203BCAC->tilemapBuffer);
+ LZ77UnCompVram(sGraphData_Tilemap, sMenu->tilemapBuffer);
break;
case 11:
- LoadBgTilemap(2, gUnknown_0203BCAC->tilemapBuffer, 1280, 0);
- LoadPalette(gUnknown_086231E8, 48, 32);
- LoadPalette(gUnknown_08623208, 240, 32);
+ LoadBgTilemap(2, sMenu->tilemapBuffer, 1280, 0);
+ LoadPalette(gConditionGraphData_Pal, 48, 32);
+ LoadPalette(gConditionText_Pal, 240, 32);
sub_81D21DC(2);
break;
default:
- gUnknown_0203BCAC->info.unk78 = 0;
+ sMenu->info.helperState = 0;
return FALSE;
}
- gUnknown_0203BCAC->info.unk78++;
+ sMenu->info.helperState++;
return TRUE;
}
-void sub_8167BA0(u16 arg0, u8 copyToVramMode)
+static void UpdateMonInfoText(u16 loadId, bool8 firstPrint)
{
u8 partyIndex;
u8 nature;
u8 *str;
- FillWindowPixelBuffer(0, PIXEL_FILL(0));
- FillWindowPixelBuffer(1, PIXEL_FILL(0));
- if (gUnknown_0203BCAC->info.field_71 != gUnknown_0203BCAC->info.field_70 - 1)
+ FillWindowPixelBuffer(WIN_NAME, PIXEL_FILL(0));
+ FillWindowPixelBuffer(WIN_NATURE, PIXEL_FILL(0));
+ if (sMenu->info.curSelection != sMenu->info.numSelections - 1)
{
- AddTextPrinterParameterized(0, 1, gUnknown_0203BCAC->field_7B95[arg0], 0, 1, 0, NULL);
- partyIndex = sub_81672A4(gUnknown_0203BCAC->info.field_71);
+ AddTextPrinterParameterized(WIN_NAME, 1, sMenu->monNameStrings[loadId], 0, 1, 0, NULL);
+ partyIndex = GetPartyIdFromSelectionId(sMenu->info.curSelection);
nature = GetNature(&gPlayerParty[partyIndex]);
- str = StringCopy(gUnknown_0203BCAC->info.field_7A, gText_NatureSlash);
+ str = StringCopy(sMenu->info.natureText, gText_NatureSlash);
str = StringCopy(str, gNatureNamePointers[nature]);
- AddTextPrinterParameterized3(1, 1, 2, 1, sNatureTextColors, 0, gUnknown_0203BCAC->info.field_7A);
+ AddTextPrinterParameterized3(WIN_NATURE, 1, 2, 1, sNatureTextColors, 0, sMenu->info.natureText);
}
- if (copyToVramMode)
+ if (firstPrint)
{
- CopyWindowToVram(0, 3);
- CopyWindowToVram(1, 3);
+ CopyWindowToVram(WIN_NAME, 3);
+ CopyWindowToVram(WIN_NATURE, 3);
}
else
{
- CopyWindowToVram(0, 2);
- CopyWindowToVram(1, 2);
+ CopyWindowToVram(WIN_NAME, 2);
+ CopyWindowToVram(WIN_NATURE, 2);
}
}
-static void sub_8167CA0(bool8 arg0)
+static void UpdateSelection(bool8 up)
{
- u16 var0;
- bool32 r8, r4;
+ u16 newLoadId;
+ bool32 startedOnMon, endedOnMon;
- if (arg0)
- var0 = gUnknown_0203BCAC->field_7FB5;
+ if (up)
+ newLoadId = sMenu->prevLoadId;
else
- var0 = gUnknown_0203BCAC->field_7FB4;
+ newLoadId = sMenu->nextLoadId;
- sub_81D1F84(
- &gUnknown_0203BCAC->field_7C58,
- gUnknown_0203BCAC->field_7C58.unk14[gUnknown_0203BCAC->field_7FB3],
- gUnknown_0203BCAC->field_7C58.unk14[var0]);
+ sub_81D1F84(&sMenu->graph, sMenu->graph.unk14[sMenu->curLoadId], sMenu->graph.unk14[newLoadId]);
+
+ if (sMenu->info.curSelection == sMenu->info.numSelections - 1)
+ startedOnMon = FALSE; // moving off of Cancel
+ else
+ startedOnMon = TRUE;
- r8 = (gUnknown_0203BCAC->info.field_71 ^ (gUnknown_0203BCAC->info.field_70 - 1)) ? 1 : 0;
- if (arg0)
+ if (up)
{
- gUnknown_0203BCAC->field_7FB5 = gUnknown_0203BCAC->field_7FB4;
- gUnknown_0203BCAC->field_7FB4 = gUnknown_0203BCAC->field_7FB3;
- gUnknown_0203BCAC->field_7FB3 = var0;
- gUnknown_0203BCAC->field_7FB6 = gUnknown_0203BCAC->field_7FB5;
-
- gUnknown_0203BCAC->info.field_71 = (gUnknown_0203BCAC->info.field_71 == 0)
- ? gUnknown_0203BCAC->info.field_70 - 1
- : gUnknown_0203BCAC->info.field_71 - 1;
-
- gUnknown_0203BCAC->field_7B4C = (gUnknown_0203BCAC->info.field_71 == 0)
- ? gUnknown_0203BCAC->info.field_70 - 1
- : gUnknown_0203BCAC->info.field_71 - 1;
+ sMenu->prevLoadId = sMenu->nextLoadId; // temporarily store nextLoadId, prevLoadId no longer needed
+ sMenu->nextLoadId = sMenu->curLoadId;
+ sMenu->curLoadId = newLoadId;
+ sMenu->toLoadId = sMenu->prevLoadId; // next load will be the mon that's one up from new selection
+
+ // Check for wrap to bottom of list
+ sMenu->info.curSelection = (sMenu->info.curSelection == 0)
+ ? sMenu->info.numSelections - 1
+ : sMenu->info.curSelection - 1;
+
+ sMenu->toLoadSelection = (sMenu->info.curSelection == 0)
+ ? sMenu->info.numSelections - 1
+ : sMenu->info.curSelection - 1;
}
else
{
- gUnknown_0203BCAC->field_7FB4 = gUnknown_0203BCAC->field_7FB5;
- gUnknown_0203BCAC->field_7FB5 = gUnknown_0203BCAC->field_7FB3;
- gUnknown_0203BCAC->field_7FB3 = var0;
- gUnknown_0203BCAC->field_7FB6 = gUnknown_0203BCAC->field_7FB4;
-
- gUnknown_0203BCAC->info.field_71 = (gUnknown_0203BCAC->info.field_71 < gUnknown_0203BCAC->info.field_70 - 1)
- ? gUnknown_0203BCAC->info.field_71 + 1
+ sMenu->nextLoadId = sMenu->prevLoadId; // temporarily store prevLoadId, nextLoadId no longer needed
+ sMenu->prevLoadId = sMenu->curLoadId;
+ sMenu->curLoadId = newLoadId;
+ sMenu->toLoadId = sMenu->nextLoadId; // next load will be the mon that's one down from new selection
+
+ // Check for wrap to top of list
+ sMenu->info.curSelection = (sMenu->info.curSelection < sMenu->info.numSelections - 1)
+ ? sMenu->info.curSelection + 1
: 0;
- gUnknown_0203BCAC->field_7B4C = (gUnknown_0203BCAC->info.field_71 < gUnknown_0203BCAC->info.field_70 - 1)
- ? gUnknown_0203BCAC->info.field_71 + 1
+ sMenu->toLoadSelection = (sMenu->info.curSelection < sMenu->info.numSelections - 1)
+ ? sMenu->info.curSelection + 1
: 0;
}
- r4 = (gUnknown_0203BCAC->info.field_71 ^ (gUnknown_0203BCAC->info.field_70 - 1)) ? 1 : 0;
- sub_81D3520(gUnknown_0203BCAC->field_7B1C);
+ if (sMenu->info.curSelection == sMenu->info.numSelections - 1)
+ endedOnMon = FALSE; // moving onto Cancel
+ else
+ endedOnMon = TRUE;
+
+ DestroyConditionSparkleSprites(sMenu->sparkles);
- if (!r8)
- gUnknown_0203BCAC->info.unk74 = sub_8167EA4;
- else if (!r4)
- gUnknown_0203BCAC->info.unk74 = sub_8167FA4;
+ if (!startedOnMon)
+ sMenu->info.loadNewSelection = LoadNewSelection_CancelToMon;
+ else if (!endedOnMon)
+ sMenu->info.loadNewSelection = LoadNewSelection_MonToCancel;
else
- gUnknown_0203BCAC->info.unk74 = sub_8168048;
+ sMenu->info.loadNewSelection = LoadNewSelection_MonToMon;
}
-static u8 sub_8167EA4(void)
+static bool8 LoadNewSelection_CancelToMon(void)
{
- switch (gUnknown_0203BCAC->info.unk78)
+ switch (sMenu->info.helperState)
{
case 0:
- sub_8167608(gUnknown_0203BCAC->field_7FB3);
- gUnknown_0203BCAC->info.unk78++;
+ UpdateMonPic(sMenu->curLoadId);
+ sMenu->info.helperState++;
break;
case 1:
- sub_8167BA0(gUnknown_0203BCAC->field_7FB3, 0);
- gUnknown_0203BCAC->info.unk78++;
+ UpdateMonInfoText(sMenu->curLoadId, FALSE);
+ sMenu->info.helperState++;
break;
case 2:
- if (!sub_81D3178(&gUnknown_0203BCAC->field_7C58, &gUnknown_0203BCAC->field_7B0E))
+ if (!TryUpdateConditionMonTransitionOn(&sMenu->graph, &sMenu->curMonXOffset))
{
- sub_816753C(gUnknown_0203BCAC->field_7B4C, gUnknown_0203BCAC->field_7FB6);
- gUnknown_0203BCAC->info.unk78++;
+ // Load the new adjacent pokemon (not the one being shown)
+ LoadMonInfo(sMenu->toLoadSelection, sMenu->toLoadId);
+ sMenu->info.helperState++;
}
break;
case 3:
- sub_81D3464(gUnknown_0203BCAC->field_7B1C);
- if (gUnknown_0203BCAC->info.field_71 != gUnknown_0203BCAC->info.field_70 - 1)
+ ResetConditionSparkleSprites(sMenu->sparkles);
+ if (sMenu->info.curSelection != sMenu->info.numSelections - 1)
{
- u8 var0 = gUnknown_0203BCAC->unk7FB0[gUnknown_0203BCAC->field_7FB3];
- sub_81D3480(gUnknown_0203BCAC->field_7B1C, gUnknown_0203BCAC->field_7B10, var0);
+ u8 numSparkles = sMenu->numSparkles[sMenu->curLoadId];
+ CreateConditionSparkleSprites(sMenu->sparkles, sMenu->curMonSpriteId, numSparkles);
}
- gUnknown_0203BCAC->info.unk78 = 0;
+ sMenu->info.helperState = 0;
return FALSE;
}
return TRUE;
}
-static u8 sub_8167FA4(void)
+static bool8 LoadNewSelection_MonToCancel(void)
{
- switch (gUnknown_0203BCAC->info.unk78)
+ switch (sMenu->info.helperState)
{
case 0:
- if (!sub_81D31A4(&gUnknown_0203BCAC->field_7C58, &gUnknown_0203BCAC->field_7B0E))
- gUnknown_0203BCAC->info.unk78++;
+ if (!TryUpdateConditionMonTransitionOff(&sMenu->graph, &sMenu->curMonXOffset))
+ sMenu->info.helperState++;
break;
case 1:
- sub_8167BA0(gUnknown_0203BCAC->field_7FB3, 0);
- gUnknown_0203BCAC->info.unk78++;
+ UpdateMonInfoText(sMenu->curLoadId, FALSE);
+ sMenu->info.helperState++;
break;
case 2:
- sub_816753C(gUnknown_0203BCAC->field_7B4C, gUnknown_0203BCAC->field_7FB6);
- gUnknown_0203BCAC->info.unk78++;
+ LoadMonInfo(sMenu->toLoadSelection, sMenu->toLoadId);
+ sMenu->info.helperState++;
break;
case 3:
- gUnknown_0203BCAC->info.unk78 = 0;
+ sMenu->info.helperState = 0;
return FALSE;
}
return TRUE;
}
-static u8 sub_8168048(void)
+static bool8 LoadNewSelection_MonToMon(void)
{
- switch (gUnknown_0203BCAC->info.unk78)
+ switch (sMenu->info.helperState)
{
case 0:
- sub_81D2074(&gUnknown_0203BCAC->field_7C58);
- if (!sub_81D3150(&gUnknown_0203BCAC->field_7B0E))
+ TransitionConditionGraph(&sMenu->graph);
+ if (!MoveConditionMonOffscreen(&sMenu->curMonXOffset))
{
- sub_8167608(gUnknown_0203BCAC->field_7FB3);
- gUnknown_0203BCAC->info.unk78++;
+ UpdateMonPic(sMenu->curLoadId);
+ sMenu->info.helperState++;
}
break;
case 1:
- sub_8167BA0(gUnknown_0203BCAC->field_7FB3, 0);
- gUnknown_0203BCAC->info.unk78++;
+ UpdateMonInfoText(sMenu->curLoadId, FALSE);
+ sMenu->info.helperState++;
break;
case 2:
- if (!sub_81D3178(&gUnknown_0203BCAC->field_7C58, &gUnknown_0203BCAC->field_7B0E))
+ if (!TryUpdateConditionMonTransitionOn(&sMenu->graph, &sMenu->curMonXOffset))
{
- sub_816753C(gUnknown_0203BCAC->field_7B4C, gUnknown_0203BCAC->field_7FB6);
- gUnknown_0203BCAC->info.unk78++;
+ // Load the new adjacent pokemon (not the one being shown)
+ LoadMonInfo(sMenu->toLoadSelection, sMenu->toLoadId);
+ sMenu->info.helperState++;
}
break;
case 3:
- sub_81D3464(gUnknown_0203BCAC->field_7B1C);
- if (gUnknown_0203BCAC->info.field_71 != gUnknown_0203BCAC->info.field_70 - 1)
+ ResetConditionSparkleSprites(sMenu->sparkles);
+ if (sMenu->info.curSelection != sMenu->info.numSelections - 1)
{
- u8 var0 = gUnknown_0203BCAC->unk7FB0[gUnknown_0203BCAC->field_7FB3];
- sub_81D3480(gUnknown_0203BCAC->field_7B1C, gUnknown_0203BCAC->field_7B10, var0);
+ u8 numSparkles = sMenu->numSparkles[sMenu->curLoadId];
+ CreateConditionSparkleSprites(sMenu->sparkles, sMenu->curMonSpriteId, numSparkles);
}
- gUnknown_0203BCAC->info.unk78 = 0;
+ sMenu->info.helperState = 0;
return FALSE;
}
return TRUE;
}
-void sub_8168168(struct Sprite *sprite)
+static void SpriteCB_MonPic(struct Sprite *sprite)
{
- sprite->pos1.x = gUnknown_0203BCAC->field_7B0E + 38;
+ sprite->pos1.x = sMenu->curMonXOffset + 38;
}
-void sub_8168180(struct Sprite *sprite)
+static void SpriteCB_SelectionIconPokeball(struct Sprite *sprite)
{
- if (sprite->data[0] == gUnknown_0203BCAC->info.field_71)
+ if (sprite->data[0] == sMenu->info.curSelection)
StartSpriteAnim(sprite, 0);
else
StartSpriteAnim(sprite, 1);
}
-void sub_81681B4(struct Sprite *sprite)
+static void SpriteCB_SelectionIconCancel(struct Sprite *sprite)
{
- if (gUnknown_0203BCAC->info.field_71 == gUnknown_0203BCAC->info.field_70 - 1)
- sprite->oam.paletteNum = IndexOfSpritePaletteTag(101);
+ if (sMenu->info.curSelection == sMenu->info.numSelections - 1)
+ sprite->oam.paletteNum = IndexOfSpritePaletteTag(TAG_CONDITION_BALL);
else
- sprite->oam.paletteNum = IndexOfSpritePaletteTag(102);
+ sprite->oam.paletteNum = IndexOfSpritePaletteTag(TAG_CONDITION_CANCEL);
}
-void sub_81681F4(u8 monIndex)
+// Calculate the max id for sparkles/stars that appear around the pokemon on the condition screen
+// All pokemon start with 1 sparkle (added by CreateConditionSparkleSprites), so the number here +1
+// is the total number of sparkles that appear
+static void CalculateNumAdditionalSparkles(u8 monIndex)
{
u8 sheen = GetMonData(&gPlayerParty[monIndex], MON_DATA_SHEEN);
- gUnknown_0203BCAC->unk7FB0[gUnknown_0203BCAC->field_7FB3] = (sheen != 255)
- ? sheen / 29
- : 9;
+ sMenu->numSparkles[sMenu->curLoadId] = (sheen != 255)
+ ? sheen / (255 / (MAX_CONDITION_SPARKLES - 1) + 1)
+ : MAX_CONDITION_SPARKLES - 1;
}
-static void sub_8168248(void)
+static void LoadConditionGfx(void)
{
struct CompressedSpriteSheet spriteSheet;
struct SpritePalette spritePalette;
- spritePalette = gSpritePalette_085DFDB8;
+ spritePalette = sSpritePalette_Condition;
spriteSheet.data = gUsePokeblockCondition_Gfx;
spriteSheet.size = 0x800;
- spriteSheet.tag = 1;
+ spriteSheet.tag = TAG_CONDITION;
LoadCompressedSpriteSheet(&spriteSheet);
LoadSpritePalette(&spritePalette);
}
-static void sub_8168294(void)
+static void CreateConditionSprite(void)
{
u16 i;
s16 xDiff, xStart;
int yStart = 17;
int var = 8;
- struct Sprite **sprites = gUnknown_0203BCAC->field_7B44;
- const struct SpriteTemplate *template = &gSpriteTemplate_085DFDA0;
+ struct Sprite **sprites = sMenu->condition;
+ const struct SpriteTemplate *template = &sSpriteTemplate_Condition;
for (i = 0, xDiff = 64, xStart = -96; i < 2; i++)
{
@@ -1595,24 +1641,25 @@ static void sub_8168294(void)
}
}
-static bool8 sub_8168328(void)
+static bool8 LoadConditionTitle(void)
{
- switch (gUnknown_0203BCAC->info.unk78)
+ switch (sMenu->info.helperState)
{
case 0:
- sub_8168248();
- gUnknown_0203BCAC->info.unk78++;
+ LoadConditionGfx();
+ sMenu->info.helperState++;
return TRUE;
case 1:
- sub_8168294();
- gUnknown_0203BCAC->info.unk78 = 0;
+ CreateConditionSprite();
+ sMenu->info.helperState = 0;
return FALSE;
}
return FALSE;
}
-void sub_8168374(struct Sprite *sprite)
+// Literally the word "Condition", the title block that appears over the mon icon
+static void SpriteCB_Condition(struct Sprite *sprite)
{
s16 prevX = sprite->pos1.x;
diff --git a/src/wallclock.c b/src/wallclock.c
index 01900dc8e..bed04928e 100644
--- a/src/wallclock.c
+++ b/src/wallclock.c
@@ -21,38 +21,37 @@
#include "constants/rgb.h"
#include "constants/songs.h"
-// static declarations
-
-static void WallClockMainCallback(void);
-static void Task_SetClock1(u8 taskId);
-static void Task_SetClock2(u8 taskId);
-static void Task_SetClock3(u8 taskId);
-static void Task_SetClock4(u8 taskId);
-static void Task_SetClock5(u8 taskId);
-static void Task_SetClock6(u8 taskId);
-static void Task_ViewClock1(u8 taskId);
-static void Task_ViewClock2(u8 taskId);
-static void Task_ViewClock3(u8 taskId);
-static void Task_ViewClock4(u8 taskId);
+static void CB2_WallClock(void);
+static void Task_SetClock_WaitFadeIn(u8 taskId);
+static void Task_SetClock_HandleInput(u8 taskId);
+static void Task_SetClock_AskConfirm(u8 taskId);
+static void Task_SetClock_HandleConfirmInput(u8 taskId);
+static void Task_SetClock_Confirmed(u8 taskId);
+static void Task_SetClock_Exit(u8 taskId);
+static void Task_ViewClock_WaitFadeIn(u8 taskId);
+static void Task_ViewClock_HandleInput(u8 taskId);
+static void Task_ViewClock_FadeOut(u8 taskId);
+static void Task_ViewClock_Exit(u8 taskId);
static u16 CalcNewMinHandAngle(u16 angle, u8 direction, u8 speed);
static bool32 AdvanceClock(u8 taskId, u8 direction);
static void UpdateClockPeriod(u8 taskId, u8 direction);
static void InitClockWithRtc(u8 taskId);
static void SpriteCB_MinuteHand(struct Sprite *sprite);
static void SpriteCB_HourHand(struct Sprite *sprite);
-static void SpriteCB_AMIndicator(struct Sprite *sprite);
static void SpriteCB_PMIndicator(struct Sprite *sprite);
+static void SpriteCB_AMIndicator(struct Sprite *sprite);
#define tMinuteHandAngle data[0]
#define tHourHandAngle data[1]
#define tHours data[2]
#define tMinutes data[3]
-#define tMvmtDir data[4]
+#define tMoveDir data[4]
#define tPeriod data[5]
-#define tMvmtSpeed data[6]
+#define tMoveSpeed data[6]
-#define TAG_GFX_WALL_CLOCK_HAND 0x1000
-#define TAG_PAL_WALL_CLOCK_HAND 0x1000
+#define GFXTAG_WALL_CLOCK_HAND 0x1000
+#define PALTAG_WALL_CLOCK_MALE 0x1000
+#define PALTAG_WALL_CLOCK_FEMALE 0x1001
enum
{
@@ -62,17 +61,15 @@ enum
enum
{
- MVMT_NONE,
- MVMT_BACKWARD,
- MVMT_FORWARD,
+ MOVE_NONE,
+ MOVE_BACKWARD,
+ MOVE_FORWARD,
};
-// rodata
+static const u32 sHand_Gfx[] = INCBIN_U32("graphics/wallclock/hand.4bpp.lz");
+static const u16 sTextPrompt_Pal[] = INCBIN_U16("graphics/wallclock/text_prompt.gbapal"); // for "Cancel" or "Confirm"
-static const u32 sUnknown_085B1F58[] = INCBIN_U32("graphics/wallclock/graphics_85b1f58.4bpp.lz");
-static const u16 sUnknown_085B21D4[] = INCBIN_U16("graphics/wallclock/palette_85b21d4.gbapal");
-
-static const struct WindowTemplate gUnknown_085B21DC[] =
+static const struct WindowTemplate sWindowTemplates[] =
{
{
.bg = 0,
@@ -95,7 +92,7 @@ static const struct WindowTemplate gUnknown_085B21DC[] =
DUMMY_WIN_TEMPLATE
};
-static const struct WindowTemplate gUnknown_085B21F4 =
+static const struct WindowTemplate sWindowTemplate_ConfirmYesNo =
{
.bg = 0,
.tilemapLeft = 24,
@@ -106,7 +103,7 @@ static const struct WindowTemplate gUnknown_085B21F4 =
.baseBlock = 572
};
-static const struct BgTemplate gUnknown_085B21FC[] =
+static const struct BgTemplate sBgTemplates[] =
{
{
.bg = 0,
@@ -128,27 +125,27 @@ static const struct BgTemplate gUnknown_085B21FC[] =
}
};
-static const struct CompressedSpriteSheet gUnknown_085B2208 =
+static const struct CompressedSpriteSheet sSpriteSheet_ClockHand =
{
- sUnknown_085B1F58, 0x2000, TAG_GFX_WALL_CLOCK_HAND
+ sHand_Gfx, 0x2000, GFXTAG_WALL_CLOCK_HAND
};
-static const u8 filler_85B2210[8] = {0};
+static const u8 sUnused[8] = {0};
-static const struct SpritePalette gUnknown_085B2218[] =
+static const struct SpritePalette sSpritePalettes_Clock[] =
{
{
- .data = gWallclockMale_Pal,
- .tag = TAG_PAL_WALL_CLOCK_HAND
+ .data = gWallClockMale_Pal,
+ .tag = PALTAG_WALL_CLOCK_MALE
},
{
- .data = gWallclockFemale_Pal,
- .tag = 0x1001
+ .data = gWallClockFemale_Pal,
+ .tag = PALTAG_WALL_CLOCK_FEMALE
},
{}
};
-static const struct OamData Unknown_085B2230 =
+static const struct OamData sOam_ClockHand =
{
.y = 160,
.shape = SPRITE_SHAPE(64x64),
@@ -156,51 +153,51 @@ static const struct OamData Unknown_085B2230 =
.priority = 1,
};
-static const union AnimCmd Unknown_085B2238[] =
+static const union AnimCmd sAnim_MinuteHand[] =
{
ANIMCMD_FRAME(0, 30),
ANIMCMD_END,
};
-static const union AnimCmd Unknown_085B2240[] =
+static const union AnimCmd sAnim_HourHand[] =
{
ANIMCMD_FRAME(64, 30),
ANIMCMD_END,
};
-static const union AnimCmd *const gUnknown_085B2248[] =
+static const union AnimCmd *const sAnims_MinuteHand[] =
{
- Unknown_085B2238
+ sAnim_MinuteHand
};
-static const union AnimCmd *const gUnknown_085B224C[] =
+static const union AnimCmd *const sAnims_HourHand[] =
{
- Unknown_085B2240
+ sAnim_HourHand
};
-static const struct SpriteTemplate gUnknown_085B2250 =
+static const struct SpriteTemplate sSpriteTemplate_MinuteHand =
{
- .tileTag = TAG_GFX_WALL_CLOCK_HAND,
- .paletteTag = TAG_PAL_WALL_CLOCK_HAND,
- .oam = &Unknown_085B2230,
- .anims = gUnknown_085B2248,
+ .tileTag = GFXTAG_WALL_CLOCK_HAND,
+ .paletteTag = PALTAG_WALL_CLOCK_MALE,
+ .oam = &sOam_ClockHand,
+ .anims = sAnims_MinuteHand,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = SpriteCB_MinuteHand,
};
-static const struct SpriteTemplate gUnknown_085B2268 =
+static const struct SpriteTemplate sSpriteTemplate_HourHand =
{
- .tileTag = TAG_GFX_WALL_CLOCK_HAND,
- .paletteTag = TAG_PAL_WALL_CLOCK_HAND,
- .oam = &Unknown_085B2230,
- .anims = gUnknown_085B224C,
+ .tileTag = GFXTAG_WALL_CLOCK_HAND,
+ .paletteTag = PALTAG_WALL_CLOCK_MALE,
+ .oam = &sOam_ClockHand,
+ .anims = sAnims_HourHand,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = SpriteCB_HourHand,
};
-static const struct OamData Unknown_085B2280 =
+static const struct OamData sOam_PeriodIndicator =
{
.y = 160,
.shape = SPRITE_SHAPE(16x16),
@@ -208,48 +205,48 @@ static const struct OamData Unknown_085B2280 =
.priority = 3,
};
-static const union AnimCmd Unknown_085B2288[] =
+static const union AnimCmd sAnim_PM[] =
{
ANIMCMD_FRAME(132, 30),
ANIMCMD_END,
};
-static const union AnimCmd Unknown_085B2290[] =
+static const union AnimCmd sAnim_AM[] =
{
ANIMCMD_FRAME(128, 30),
ANIMCMD_END,
};
-static const union AnimCmd *const gUnknown_085B2298[] =
+static const union AnimCmd *const sAnims_PM[] =
{
- Unknown_085B2288
+ sAnim_PM
};
-static const union AnimCmd *const gUnknown_085B229C[] =
+static const union AnimCmd *const sAnims_AM[] =
{
- Unknown_085B2290
+ sAnim_AM
};
-static const struct SpriteTemplate gUnknown_085B22A0 =
+static const struct SpriteTemplate sSpriteTemplate_PM =
{
- .tileTag = TAG_GFX_WALL_CLOCK_HAND,
- .paletteTag = TAG_PAL_WALL_CLOCK_HAND,
- .oam = &Unknown_085B2280,
- .anims = gUnknown_085B2298,
+ .tileTag = GFXTAG_WALL_CLOCK_HAND,
+ .paletteTag = PALTAG_WALL_CLOCK_MALE,
+ .oam = &sOam_PeriodIndicator,
+ .anims = sAnims_PM,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
- .callback = SpriteCB_AMIndicator
+ .callback = SpriteCB_PMIndicator
};
-static const struct SpriteTemplate gUnknown_085B22B8 =
+static const struct SpriteTemplate sSpriteTemplate_AM =
{
- .tileTag = TAG_GFX_WALL_CLOCK_HAND,
- .paletteTag = TAG_PAL_WALL_CLOCK_HAND,
- .oam = &Unknown_085B2280,
- .anims = gUnknown_085B229C,
+ .tileTag = GFXTAG_WALL_CLOCK_HAND,
+ .paletteTag = PALTAG_WALL_CLOCK_MALE,
+ .oam = &sOam_PeriodIndicator,
+ .anims = sAnims_AM,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
- .callback = SpriteCB_PMIndicator
+ .callback = SpriteCB_AMIndicator
};
static const s8 sClockHandCoords[][2] =
@@ -616,9 +613,7 @@ static const s8 sClockHandCoords[][2] =
{ 0x00, -0x19}
};
-// text
-
-static void WallClockVblankCallback(void)
+static void VBlankCB_WallClock(void)
{
LoadOam();
ProcessSpriteCopyRequests();
@@ -644,38 +639,36 @@ static void LoadWallClockGraphics(void)
DmaFillLarge16(3, 0, (void *)VRAM, VRAM_SIZE, 0x1000);
DmaClear32(3, (void *)OAM, OAM_SIZE);
DmaClear16(3, (void *)PLTT, PLTT_SIZE);
- LZ77UnCompVram(gWallclock_Gfx, (void *)VRAM);
- if (gSpecialVar_0x8004 == 0)
- {
- LoadPalette(gWallclockMale_Pal, 0x00, 0x20);
- }
+ LZ77UnCompVram(gWallClock_Gfx, (void *)VRAM);
+
+ if (gSpecialVar_0x8004 == MALE)
+ LoadPalette(gWallClockMale_Pal, 0, 32);
else
- {
- LoadPalette(gWallclockFemale_Pal, 0x00, 0x20);
- }
- LoadPalette(GetOverworldTextboxPalettePtr(), 0xe0, 0x20);
- LoadPalette(sUnknown_085B21D4, 0xc0, 0x08);
+ LoadPalette(gWallClockFemale_Pal, 0, 32);
+
+ LoadPalette(GetOverworldTextboxPalettePtr(), 0xe0, 32);
+ LoadPalette(sTextPrompt_Pal, 0xc0, 8);
ResetBgsAndClearDma3BusyFlags(0);
- InitBgsFromTemplates(0, gUnknown_085B21FC, 3);
- InitWindows(gUnknown_085B21DC);
+ InitBgsFromTemplates(0, sBgTemplates, ARRAY_COUNT(sBgTemplates));
+ InitWindows(sWindowTemplates);
DeactivateAllTextPrinters();
LoadUserWindowBorderGfx(0, 0x250, 0xd0);
- clear_scheduled_bg_copies_to_vram();
+ ClearScheduledBgCopiesToVram();
ScanlineEffect_Stop();
ResetTasks();
ResetSpriteData();
ResetPaletteFade();
FreeAllSpritePalettes();
- LoadCompressedSpriteSheet(&gUnknown_085B2208);
- LoadSpritePalettes(gUnknown_085B2218);
+ LoadCompressedSpriteSheet(&sSpriteSheet_ClockHand);
+ LoadSpritePalettes(sSpritePalettes_Clock);
}
static void WallClockInit(void)
{
BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, RGB_BLACK);
EnableInterrupts(INTR_FLAG_VBLANK);
- SetVBlankCallback(WallClockVblankCallback);
- SetMainCallback2(WallClockMainCallback);
+ SetVBlankCallback(VBlankCB_WallClock);
+ SetMainCallback2(CB2_WallClock);
SetGpuReg(REG_OFFSET_BLDCNT, 0);
SetGpuReg(REG_OFFSET_BLDALPHA, 0);
SetGpuReg(REG_OFFSET_BLDY, 0);
@@ -691,32 +684,32 @@ void CB2_StartWallClock(void)
u8 spriteId;
LoadWallClockGraphics();
- LZ77UnCompVram(gUnknown_08DCC648, (u16 *)BG_SCREEN_ADDR(7));
+ LZ77UnCompVram(gWallClockStart_Tilemap, (u16 *)BG_SCREEN_ADDR(7));
- taskId = CreateTask(Task_SetClock1, 0);
+ taskId = CreateTask(Task_SetClock_WaitFadeIn, 0);
gTasks[taskId].tHours = 10;
gTasks[taskId].tMinutes = 0;
- gTasks[taskId].tMvmtDir = 0;
+ gTasks[taskId].tMoveDir = 0;
gTasks[taskId].tPeriod = 0;
- gTasks[taskId].tMvmtSpeed = 0;
+ gTasks[taskId].tMoveSpeed = 0;
gTasks[taskId].tMinuteHandAngle = 0;
gTasks[taskId].tHourHandAngle = 300;
- spriteId = CreateSprite(&gUnknown_085B2250, 120, 80, 1);
+ spriteId = CreateSprite(&sSpriteTemplate_MinuteHand, 120, 80, 1);
gSprites[spriteId].data[0] = taskId;
gSprites[spriteId].oam.affineMode = ST_OAM_AFFINE_NORMAL;
gSprites[spriteId].oam.matrixNum = 0;
- spriteId = CreateSprite(&gUnknown_085B2268, 120, 80, 0);
+ spriteId = CreateSprite(&sSpriteTemplate_HourHand, 120, 80, 0);
gSprites[spriteId].data[0] = taskId;
gSprites[spriteId].oam.affineMode = ST_OAM_AFFINE_NORMAL;
gSprites[spriteId].oam.matrixNum = 1;
- spriteId = CreateSprite(&gUnknown_085B22A0, 120, 80, 2);
+ spriteId = CreateSprite(&sSpriteTemplate_PM, 120, 80, 2);
gSprites[spriteId].data[0] = taskId;
gSprites[spriteId].data[1] = 45;
- spriteId = CreateSprite(&gUnknown_085B22B8, 120, 80, 2);
+ spriteId = CreateSprite(&sSpriteTemplate_AM, 120, 80, 2);
gSprites[spriteId].data[0] = taskId;
gSprites[spriteId].data[1] = 90;
@@ -724,7 +717,7 @@ void CB2_StartWallClock(void)
AddTextPrinterParameterized(1, 1, gText_Confirm3, 0, 1, 0, NULL);
PutWindowTilemap(1);
- schedule_bg_copy_tilemap_to_vram(2);
+ ScheduleBgCopyTilemapToVram(2);
}
void CB2_ViewWallClock(void)
@@ -735,11 +728,11 @@ void CB2_ViewWallClock(void)
u8 angle2;
LoadWallClockGraphics();
- LZ77UnCompVram(gUnknown_08DCC908, (u16 *)BG_SCREEN_ADDR(7));
+ LZ77UnCompVram(gWallClockView_Tilemap, (u16 *)BG_SCREEN_ADDR(7));
- taskId = CreateTask(Task_ViewClock1, 0);
+ taskId = CreateTask(Task_ViewClock_WaitFadeIn, 0);
InitClockWithRtc(taskId);
- if (gTasks[taskId].tPeriod == 0)
+ if (gTasks[taskId].tPeriod == PERIOD_AM)
{
angle1 = 45;
angle2 = 90;
@@ -750,21 +743,21 @@ void CB2_ViewWallClock(void)
angle2 = 135;
}
- spriteId = CreateSprite(&gUnknown_085B2250, 120, 80, 1);
+ spriteId = CreateSprite(&sSpriteTemplate_MinuteHand, 120, 80, 1);
gSprites[spriteId].data[0] = taskId;
gSprites[spriteId].oam.affineMode = ST_OAM_AFFINE_NORMAL;
gSprites[spriteId].oam.matrixNum = 0;
- spriteId = CreateSprite(&gUnknown_085B2268, 120, 80, 0);
+ spriteId = CreateSprite(&sSpriteTemplate_HourHand, 120, 80, 0);
gSprites[spriteId].data[0] = taskId;
gSprites[spriteId].oam.affineMode = ST_OAM_AFFINE_NORMAL;
gSprites[spriteId].oam.matrixNum = 1;
- spriteId = CreateSprite(&gUnknown_085B22A0, 120, 80, 2);
+ spriteId = CreateSprite(&sSpriteTemplate_PM, 120, 80, 2);
gSprites[spriteId].data[0] = taskId;
gSprites[spriteId].data[1] = angle1;
- spriteId = CreateSprite(&gUnknown_085B22B8, 120, 80, 2);
+ spriteId = CreateSprite(&sSpriteTemplate_AM, 120, 80, 2);
gSprites[spriteId].data[0] = taskId;
gSprites[spriteId].data[1] = angle2;
@@ -772,31 +765,31 @@ void CB2_ViewWallClock(void)
AddTextPrinterParameterized(1, 1, gText_Cancel4, 0, 1, 0, NULL);
PutWindowTilemap(1);
- schedule_bg_copy_tilemap_to_vram(2);
+ ScheduleBgCopyTilemapToVram(2);
}
-static void WallClockMainCallback(void)
+static void CB2_WallClock(void)
{
RunTasks();
AnimateSprites();
BuildOamBuffer();
- do_scheduled_bg_tilemap_copies_to_vram();
+ DoScheduledBgTilemapCopiesToVram();
UpdatePaletteFade();
}
-static void Task_SetClock1(u8 taskId)
+static void Task_SetClock_WaitFadeIn(u8 taskId)
{
if (!gPaletteFade.active)
{
- gTasks[taskId].func = Task_SetClock2;
+ gTasks[taskId].func = Task_SetClock_HandleInput;
}
}
-static void Task_SetClock2(u8 taskId)
+static void Task_SetClock_HandleInput(u8 taskId)
{
if (gTasks[taskId].tMinuteHandAngle % 6)
{
- gTasks[taskId].tMinuteHandAngle = CalcNewMinHandAngle(gTasks[taskId].tMinuteHandAngle, gTasks[taskId].tMvmtDir, gTasks[taskId].tMvmtSpeed);
+ gTasks[taskId].tMinuteHandAngle = CalcNewMinHandAngle(gTasks[taskId].tMinuteHandAngle, gTasks[taskId].tMoveDir, gTasks[taskId].tMoveSpeed);
}
else
{
@@ -804,72 +797,70 @@ static void Task_SetClock2(u8 taskId)
gTasks[taskId].tHourHandAngle = (gTasks[taskId].tHours % 12) * 30 + (gTasks[taskId].tMinutes / 10) * 5;
if (gMain.newKeys & A_BUTTON)
{
- gTasks[taskId].func = Task_SetClock3;
+ gTasks[taskId].func = Task_SetClock_AskConfirm;
}
else
{
- gTasks[taskId].tMvmtDir = 0;
+ gTasks[taskId].tMoveDir = MOVE_NONE;
+
if (gMain.heldKeys & DPAD_LEFT)
- {
- gTasks[taskId].tMvmtDir = MVMT_BACKWARD;
- }
+ gTasks[taskId].tMoveDir = MOVE_BACKWARD;
+
if (gMain.heldKeys & DPAD_RIGHT)
+ gTasks[taskId].tMoveDir = MOVE_FORWARD;
+
+ if (gTasks[taskId].tMoveDir != MOVE_NONE)
{
- gTasks[taskId].tMvmtDir = MVMT_FORWARD;
- }
- if (gTasks[taskId].tMvmtDir != 0)
- {
- if (gTasks[taskId].tMvmtSpeed < 0xFF)
- {
- gTasks[taskId].tMvmtSpeed++;
- }
- gTasks[taskId].tMinuteHandAngle = CalcNewMinHandAngle(gTasks[taskId].tMinuteHandAngle, gTasks[taskId].tMvmtDir, gTasks[taskId].tMvmtSpeed);
- AdvanceClock(taskId, gTasks[taskId].tMvmtDir);
+ if (gTasks[taskId].tMoveSpeed < 0xFF)
+ gTasks[taskId].tMoveSpeed++;
+
+ gTasks[taskId].tMinuteHandAngle = CalcNewMinHandAngle(gTasks[taskId].tMinuteHandAngle, gTasks[taskId].tMoveDir, gTasks[taskId].tMoveSpeed);
+ AdvanceClock(taskId, gTasks[taskId].tMoveDir);
}
else
{
- gTasks[taskId].tMvmtSpeed = 0;
+ gTasks[taskId].tMoveSpeed = 0;
}
}
}
}
-static void Task_SetClock3(u8 taskId)
+static void Task_SetClock_AskConfirm(u8 taskId)
{
DrawStdFrameWithCustomTileAndPalette(0, FALSE, 0x250, 0x0d);
AddTextPrinterParameterized(0, 1, gText_IsThisTheCorrectTime, 0, 1, 0, NULL);
PutWindowTilemap(0);
- schedule_bg_copy_tilemap_to_vram(0);
- CreateYesNoMenu(&gUnknown_085B21F4, 0x250, 0x0d, 1);
- gTasks[taskId].func = Task_SetClock4;
+ ScheduleBgCopyTilemapToVram(0);
+ CreateYesNoMenu(&sWindowTemplate_ConfirmYesNo, 0x250, 0x0d, 1);
+ gTasks[taskId].func = Task_SetClock_HandleConfirmInput;
}
-static void Task_SetClock4(u8 taskId)
+static void Task_SetClock_HandleConfirmInput(u8 taskId)
{
switch (Menu_ProcessInputNoWrapClearOnChoose())
{
- case 0: //YES
- PlaySE(SE_SELECT);
- gTasks[taskId].func = Task_SetClock5;
- break;
- case 1: //B button
- case -1: //NO
- PlaySE(SE_SELECT);
- ClearStdWindowAndFrameToTransparent(0, FALSE);
- ClearWindowTilemap(0);
- gTasks[taskId].func = Task_SetClock2;
- break;
+ case 0: // YES
+ PlaySE(SE_SELECT);
+ gTasks[taskId].func = Task_SetClock_Confirmed;
+ break;
+ case 1: // NO
+ case MENU_B_PRESSED:
+ PlaySE(SE_SELECT);
+ ClearStdWindowAndFrameToTransparent(0, FALSE);
+ ClearWindowTilemap(0);
+ gTasks[taskId].func = Task_SetClock_HandleInput;
+ break;
}
}
-static void Task_SetClock5(u8 taskId)
+static void Task_SetClock_Confirmed(u8 taskId)
{
RtcInitLocalTimeOffset(gTasks[taskId].tHours, gTasks[taskId].tMinutes);
BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK);
- gTasks[taskId].func = Task_SetClock6;
+ gTasks[taskId].func = Task_SetClock_Exit;
}
-static void Task_SetClock6(u8 taskId)
+static void Task_SetClock_Exit(u8 taskId)
{
if (!gPaletteFade.active)
{
@@ -878,51 +869,40 @@ static void Task_SetClock6(u8 taskId)
}
}
-static void Task_ViewClock1(u8 taskId)
+static void Task_ViewClock_WaitFadeIn(u8 taskId)
{
if (!gPaletteFade.active)
- {
- gTasks[taskId].func = Task_ViewClock2;
- }
+ gTasks[taskId].func = Task_ViewClock_HandleInput;
}
-static void Task_ViewClock2(u8 taskId)
+static void Task_ViewClock_HandleInput(u8 taskId)
{
InitClockWithRtc(taskId);
if (gMain.newKeys & (A_BUTTON | B_BUTTON))
- {
- gTasks[taskId].func = Task_ViewClock3;
- }
+ gTasks[taskId].func = Task_ViewClock_FadeOut;
}
-static void Task_ViewClock3(u8 taskId)
+static void Task_ViewClock_FadeOut(u8 taskId)
{
BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK);
- gTasks[taskId].func = Task_ViewClock4;
+ gTasks[taskId].func = Task_ViewClock_Exit;
}
-static void Task_ViewClock4(u8 taskId)
+static void Task_ViewClock_Exit(u8 taskId)
{
if (!gPaletteFade.active)
- {
SetMainCallback2(gMain.savedCallback);
- }
}
static u8 CalcMinHandDelta(u16 speed)
{
if (speed > 60)
- {
return 6;
- }
if (speed > 30)
- {
return 3;
- }
if (speed > 10)
- {
return 2;
- }
+
return 1;
}
@@ -931,18 +911,18 @@ static u16 CalcNewMinHandAngle(u16 angle, u8 direction, u8 speed)
u8 delta = CalcMinHandDelta(speed);
switch (direction)
{
- case MVMT_BACKWARD:
- if (angle)
- angle -= delta;
- else
- angle = 360 - delta;
- break;
- case MVMT_FORWARD:
- if (angle < 360 - delta)
- angle += delta;
- else
- angle = 0;
- break;
+ case MOVE_BACKWARD:
+ if (angle)
+ angle -= delta;
+ else
+ angle = 360 - delta;
+ break;
+ case MOVE_FORWARD:
+ if (angle < 360 - delta)
+ angle += delta;
+ else
+ angle = 0;
+ break;
}
return angle;
}
@@ -951,44 +931,40 @@ static bool32 AdvanceClock(u8 taskId, u8 direction)
{
switch (direction)
{
- case MVMT_BACKWARD:
- if (gTasks[taskId].tMinutes > 0)
- {
- gTasks[taskId].tMinutes--;
- }
+ case MOVE_BACKWARD:
+ if (gTasks[taskId].tMinutes > 0)
+ {
+ gTasks[taskId].tMinutes--;
+ }
+ else
+ {
+ gTasks[taskId].tMinutes = 59;
+
+ if (gTasks[taskId].tHours > 0)
+ gTasks[taskId].tHours--;
else
- {
- gTasks[taskId].tMinutes = 59;
- if (gTasks[taskId].tHours > 0)
- {
- gTasks[taskId].tHours--;
- }
- else
- {
- gTasks[taskId].tHours = 23;
- }
- UpdateClockPeriod(taskId, direction);
- }
- break;
- case MVMT_FORWARD:
- if (gTasks[taskId].tMinutes < 59)
- {
- gTasks[taskId].tMinutes++;
- }
+ gTasks[taskId].tHours = 23;
+
+ UpdateClockPeriod(taskId, direction);
+ }
+ break;
+ case MOVE_FORWARD:
+ if (gTasks[taskId].tMinutes < 59)
+ {
+ gTasks[taskId].tMinutes++;
+ }
+ else
+ {
+ gTasks[taskId].tMinutes = 0;
+
+ if (gTasks[taskId].tHours < 23)
+ gTasks[taskId].tHours++;
else
- {
- gTasks[taskId].tMinutes = 0;
- if (gTasks[taskId].tHours < 23)
- {
- gTasks[taskId].tHours++;
- }
- else
- {
- gTasks[taskId].tHours = 0;
- }
- UpdateClockPeriod(taskId, direction);
- }
- break;
+ gTasks[taskId].tHours = 0;
+
+ UpdateClockPeriod(taskId, direction);
+ }
+ break;
}
return FALSE;
}
@@ -998,28 +974,28 @@ static void UpdateClockPeriod(u8 taskId, u8 direction)
u8 hours = gTasks[taskId].tHours;
switch (direction)
{
- case MVMT_BACKWARD:
- switch (hours)
- {
- case 11:
- gTasks[taskId].tPeriod = PERIOD_AM;
- break;
- case 23:
- gTasks[taskId].tPeriod = PERIOD_PM;
- break;
- }
+ case MOVE_BACKWARD:
+ switch (hours)
+ {
+ case 11:
+ gTasks[taskId].tPeriod = PERIOD_AM;
break;
- case MVMT_FORWARD:
- switch (hours)
- {
- case 0:
- gTasks[taskId].tPeriod = PERIOD_AM;
- break;
- case 12:
- gTasks[taskId].tPeriod = PERIOD_PM;
- break;
- }
+ case 23:
+ gTasks[taskId].tPeriod = PERIOD_PM;
+ break;
+ }
+ break;
+ case MOVE_FORWARD:
+ switch (hours)
+ {
+ case 0:
+ gTasks[taskId].tPeriod = PERIOD_AM;
+ break;
+ case 12:
+ gTasks[taskId].tPeriod = PERIOD_PM;
break;
+ }
+ break;
}
}
@@ -1030,14 +1006,11 @@ static void InitClockWithRtc(u8 taskId)
gTasks[taskId].tMinutes = gLocalTime.minutes;
gTasks[taskId].tMinuteHandAngle = gTasks[taskId].tMinutes * 6;
gTasks[taskId].tHourHandAngle = (gTasks[taskId].tHours % 12) * 30 + (gTasks[taskId].tMinutes / 10) * 5;
+
if (gLocalTime.hours < 12)
- {
gTasks[taskId].tPeriod = PERIOD_AM;
- }
else
- {
gTasks[taskId].tPeriod = PERIOD_PM;
- }
}
static void SpriteCB_MinuteHand(struct Sprite *sprite)
@@ -1045,22 +1018,19 @@ static void SpriteCB_MinuteHand(struct Sprite *sprite)
u16 angle = gTasks[sprite->data[0]].tMinuteHandAngle;
s16 sin = Sin2(angle) / 16;
s16 cos = Cos2(angle) / 16;
- u16 xhat, yhat;
+ u16 x, y;
SetOamMatrix(0, cos, sin, -sin, cos);
- xhat = sClockHandCoords[angle][0];
- yhat = sClockHandCoords[angle][1];
+ x = sClockHandCoords[angle][0];
+ y = sClockHandCoords[angle][1];
- if (xhat > 0x80)
- {
- xhat |= 0xff00;
- }
- if (yhat > 0x80)
- {
- yhat |= 0xff00;
- }
- sprite->pos2.x = xhat;
- sprite->pos2.y = yhat;
+ if (x > 128)
+ x |= 0xff00;
+ if (y > 128)
+ y |= 0xff00;
+
+ sprite->pos2.x = x;
+ sprite->pos2.y = y;
}
static void SpriteCB_HourHand(struct Sprite *sprite)
@@ -1068,26 +1038,24 @@ static void SpriteCB_HourHand(struct Sprite *sprite)
u16 angle = gTasks[sprite->data[0]].tHourHandAngle;
s16 sin = Sin2(angle) / 16;
s16 cos = Cos2(angle) / 16;
- u16 xhat, yhat;
+ u16 x, y;
SetOamMatrix(1, cos, sin, -sin, cos);
- xhat = sClockHandCoords[angle][0];
- yhat = sClockHandCoords[angle][1];
- if (xhat > 0x80)
- {
- xhat |= 0xff00;
- }
- if (yhat > 0x80)
- {
- yhat |= 0xff00;
- }
- sprite->pos2.x = xhat;
- sprite->pos2.y = yhat;
+ x = sClockHandCoords[angle][0];
+ y = sClockHandCoords[angle][1];
+
+ if (x > 128)
+ x |= 0xff00;
+ if (y > 128)
+ y |= 0xff00;
+
+ sprite->pos2.x = x;
+ sprite->pos2.y = y;
}
-static void SpriteCB_AMIndicator(struct Sprite *sprite)
+static void SpriteCB_PMIndicator(struct Sprite *sprite)
{
- if (gTasks[sprite->data[0]].tPeriod)
+ if (gTasks[sprite->data[0]].tPeriod != PERIOD_AM)
{
if (sprite->data[1] >= 60 && sprite->data[1] < 90)
{
@@ -1113,9 +1081,9 @@ static void SpriteCB_AMIndicator(struct Sprite *sprite)
sprite->pos2.y = Sin2(sprite->data[1]) * 30 / 0x1000;
}
-static void SpriteCB_PMIndicator(struct Sprite *sprite)
+static void SpriteCB_AMIndicator(struct Sprite *sprite)
{
- if (gTasks[sprite->data[0]].tPeriod)
+ if (gTasks[sprite->data[0]].tPeriod != PERIOD_AM)
{
if (sprite->data[1] >= 105 && sprite->data[1] < 135)
{
diff --git a/src/wild_encounter.c b/src/wild_encounter.c
index 7d20b2476..492a10101 100644
--- a/src/wild_encounter.c
+++ b/src/wild_encounter.c
@@ -185,13 +185,6 @@ static u8 ChooseWildMonIndex_WaterRock(void)
return 4;
}
-enum
-{
- OLD_ROD,
- GOOD_ROD,
- SUPER_ROD
-};
-
static u8 ChooseWildMonIndex_Fishing(u8 rod)
{
u8 wildMonIndex = 0;
@@ -303,29 +296,27 @@ static u8 PickWildMonNature(void)
u8 i;
u8 j;
struct Pokeblock *safariPokeblock;
- u8 natures[25];
+ u8 natures[NUM_NATURES];
if (GetSafariZoneFlag() == TRUE && Random() % 100 < 80)
{
safariPokeblock = SafariZoneGetActivePokeblock();
if (safariPokeblock != NULL)
{
- for (i = 0; i < 25; i++)
+ for (i = 0; i < NUM_NATURES; i++)
natures[i] = i;
- for (i = 0; i < 24; i++)
+ for (i = 0; i < NUM_NATURES - 1; i++)
{
- for (j = i + 1; j < 25; j++)
+ for (j = i + 1; j < NUM_NATURES; j++)
{
if (Random() & 1)
{
- u8 temp = natures[i];
-
- natures[i] = natures[j];
- natures[j] = temp;
+ u8 temp;
+ SWAP(natures[i], natures[j], temp);
}
}
}
- for (i = 0; i < 25; i++)
+ for (i = 0; i < NUM_NATURES; i++)
{
if (PokeblockGetGain(natures[i], safariPokeblock) > 0)
return natures[i];
@@ -337,11 +328,11 @@ static u8 PickWildMonNature(void)
&& GetMonAbility(&gPlayerParty[0]) == ABILITY_SYNCHRONIZE
&& Random() % 2 == 0)
{
- return GetMonData(&gPlayerParty[0], MON_DATA_PERSONALITY) % 25;
+ return GetMonData(&gPlayerParty[0], MON_DATA_PERSONALITY) % NUM_NATURES;
}
// random nature
- return Random() % 25;
+ return Random() % NUM_NATURES;
}
static void CreateWildMon(u16 species, u8 level)
diff --git a/src/wireless_communication_status_screen.c b/src/wireless_communication_status_screen.c
new file mode 100644
index 000000000..81fa16720
--- /dev/null
+++ b/src/wireless_communication_status_screen.c
@@ -0,0 +1,432 @@
+#include "global.h"
+#include "task.h"
+#include "bg.h"
+#include "palette.h"
+#include "gpu_regs.h"
+#include "malloc.h"
+#include "scanline_effect.h"
+#include "m4a.h"
+#include "dynamic_placeholder_text_util.h"
+#include "overworld.h"
+#include "strings.h"
+#include "string_util.h"
+#include "international_string_util.h"
+#include "sound.h"
+#include "menu.h"
+#include "librfu.h"
+#include "link_rfu.h"
+#include "union_room.h"
+#include "constants/songs.h"
+#include "constants/union_room.h"
+
+enum {
+ COLORMODE_NORMAL,
+ COLORMODE_WHITE_LGRAY,
+ COLORMODE_RED,
+ COLORMODE_GREEN,
+ COLORMODE_WHITE_DGRAY,
+};
+
+#define GROUPTYPE_TRADE 0
+#define GROUPTYPE_BATTLE 1
+#define GROUPTYPE_UNION 2
+#define GROUPTYPE_TOTAL 3
+#define GROUPTYPE_NONE -1
+#define NUM_GROUPTYPES 4
+
+struct WirelessCommunicationStatusScreen
+{
+ u32 groupCounts[NUM_GROUPTYPES];
+ u32 prevGroupCounts[NUM_GROUPTYPES];
+ u32 activities[NUM_TASK_DATA];
+ u8 taskId;
+ u8 rfuTaskId;
+ u8 filler[10];
+};
+
+static struct WirelessCommunicationStatusScreen * sStatusScreen;
+
+static void CB2_InitWirelessCommunicationScreen(void);
+static void Task_WirelessCommunicationScreen(u8);
+static void WCSS_AddTextPrinterParameterized(u8, u8, const u8 *, u8, u8, u8);
+static bool32 UpdateCommunicationCounts(u32 *, u32 *, u32 *, u8);
+
+static const u16 sBgTiles_Pal[] = INCBIN_U16("graphics/interface/wireless_info_screen.gbapal");
+static const u32 sBgTiles_Gfx[] = INCBIN_U32("graphics/interface/wireless_info_screen.4bpp.lz");
+static const u32 sBgTiles_Tilemap[] = INCBIN_U32("graphics/interface/wireless_info_screen.bin.lz");
+
+static const struct BgTemplate sBgTemplates[] = {
+ {
+ .bg = 0,
+ .charBaseIndex = 2,
+ .mapBaseIndex = 31,
+ .priority = 0
+ }, {
+ .bg = 1,
+ .charBaseIndex = 0,
+ .mapBaseIndex = 8,
+ .priority = 1
+ }
+};
+
+static const struct WindowTemplate sWindowTemplates[] = {
+ {
+ .bg = 0,
+ .tilemapLeft = 3,
+ .tilemapTop = 0,
+ .width = 24,
+ .height = 3,
+ .paletteNum = 15,
+ .baseBlock = 0x0001
+ }, {
+ .bg = 0,
+ .tilemapLeft = 3,
+ .tilemapTop = 4,
+ .width = 21,
+ .height = 15,
+ .paletteNum = 15,
+ .baseBlock = 0x0049
+ }, {
+ .bg = 0,
+ .tilemapLeft = 24,
+ .tilemapTop = 4,
+ .width = 3,
+ .height = 15,
+ .paletteNum = 15,
+ .baseBlock = 0x0184
+ }, DUMMY_WIN_TEMPLATE
+};
+
+static const u8 *const sHeaderTexts[NUM_GROUPTYPES + 1] = {
+ [0] = gText_WirelessCommStatus,
+ [GROUPTYPE_TRADE + 1] = gText_PeopleTrading,
+ [GROUPTYPE_BATTLE + 1] = gText_PeopleBattling,
+ [GROUPTYPE_UNION + 1] = gText_PeopleInUnionRoom,
+ [GROUPTYPE_TOTAL + 1] = gText_PeopleCommunicating
+};
+
+// Activity, group type, number of players
+// 0 players means the number of players can change and should be counted dynamically
+// GROUPTYPE_TOTAL have no unique group and are simply counted in the total of "people communicating"
+// UB: GROUPTYPE_NONE (-1) can potentially be used as an index into a u8[4] in CountPlayersInGroupAndGetActivity
+static const u8 sActivityGroupInfo[][3] = {
+ {ACTIVITY_BATTLE_SINGLE, GROUPTYPE_BATTLE, 2},
+ {ACTIVITY_BATTLE_DOUBLE, GROUPTYPE_BATTLE, 2},
+ {ACTIVITY_BATTLE_MULTI, GROUPTYPE_BATTLE, 4},
+ {ACTIVITY_TRADE, GROUPTYPE_TRADE, 2},
+ {ACTIVITY_WONDER_CARD, GROUPTYPE_TOTAL, 2},
+ {ACTIVITY_WONDER_NEWS, GROUPTYPE_TOTAL, 2},
+ {ACTIVITY_POKEMON_JUMP, GROUPTYPE_TOTAL, 0},
+ {ACTIVITY_BERRY_CRUSH, GROUPTYPE_TOTAL, 0},
+ {ACTIVITY_BERRY_PICK, GROUPTYPE_TOTAL, 0},
+ {ACTIVITY_SEARCH, GROUPTYPE_NONE, 0},
+ {ACTIVITY_SPIN_TRADE, GROUPTYPE_TRADE, 0},
+ {ACTIVITY_BERRY_BLENDER, GROUPTYPE_TOTAL, 0},
+ {ACTIVITY_RECORD_CORNER, GROUPTYPE_TOTAL, 0},
+ {ACTIVITY_NONE | IN_UNION_ROOM, GROUPTYPE_UNION, 1},
+ {ACTIVITY_BATTLE_SINGLE | IN_UNION_ROOM, GROUPTYPE_UNION, 2},
+ {ACTIVITY_TRADE | IN_UNION_ROOM, GROUPTYPE_UNION, 2},
+ {ACTIVITY_CHAT | IN_UNION_ROOM, GROUPTYPE_UNION, 0},
+ {ACTIVITY_CARD | IN_UNION_ROOM, GROUPTYPE_UNION, 2},
+ {ACTIVITY_PLYRTALK | IN_UNION_ROOM, GROUPTYPE_UNION, 1},
+ {ACTIVITY_NPCTALK | IN_UNION_ROOM, GROUPTYPE_UNION, 2},
+ {ACTIVITY_ACCEPT | IN_UNION_ROOM, GROUPTYPE_UNION, 1},
+ {ACTIVITY_DECLINE | IN_UNION_ROOM, GROUPTYPE_UNION, 1},
+ {ACTIVITY_WONDER_CARD2, GROUPTYPE_TOTAL, 2},
+ {ACTIVITY_WONDER_NEWS2, GROUPTYPE_TOTAL, 2},
+ {ACTIVITY_CONTEST_COOL, GROUPTYPE_TOTAL, 0},
+ {ACTIVITY_CONTEST_BEAUTY, GROUPTYPE_TOTAL, 0},
+ {ACTIVITY_CONTEST_CUTE, GROUPTYPE_TOTAL, 0},
+ {ACTIVITY_CONTEST_SMART, GROUPTYPE_TOTAL, 0},
+ {ACTIVITY_CONTEST_TOUGH, GROUPTYPE_TOTAL, 0},
+ {ACTIVITY_BATTLE_TOWER, GROUPTYPE_BATTLE, 2},
+ {ACTIVITY_BATTLE_TOWER_OPEN, GROUPTYPE_BATTLE, 2}
+};
+
+static void CB2_RunWirelessCommunicationScreen(void)
+{
+ if (!IsDma3ManagerBusyWithBgCopy())
+ {
+ RunTasks();
+ RunTextPrinters();
+ AnimateSprites();
+ BuildOamBuffer();
+ UpdatePaletteFade();
+ }
+}
+
+static void VBlankCB_WirelessCommunicationScreen(void)
+{
+ LoadOam();
+ ProcessSpriteCopyRequests();
+ TransferPlttBuffer();
+}
+
+void ShowWirelessCommunicationScreen(void)
+{
+ SetMainCallback2(CB2_InitWirelessCommunicationScreen);
+}
+
+static void CB2_InitWirelessCommunicationScreen(void)
+{
+ SetGpuReg(REG_OFFSET_DISPCNT, 0);
+ sStatusScreen = AllocZeroed(sizeof(struct WirelessCommunicationStatusScreen));
+ SetVBlankCallback(NULL);
+ ResetBgsAndClearDma3BusyFlags(0);
+ InitBgsFromTemplates(0, sBgTemplates, ARRAY_COUNT(sBgTemplates));
+ SetBgTilemapBuffer(1, Alloc(0x800));
+ SetBgTilemapBuffer(0, Alloc(0x800));
+ DecompressAndLoadBgGfxUsingHeap(1, sBgTiles_Gfx, 0, 0, 0);
+ CopyToBgTilemapBuffer(1, sBgTiles_Tilemap, 0, 0);
+ InitWindows(sWindowTemplates);
+ DeactivateAllTextPrinters();
+ ResetPaletteFade();
+ ResetSpriteData();
+ ResetTasks();
+ ScanlineEffect_Stop();
+ m4aSoundVSyncOn();
+ SetVBlankCallback(VBlankCB_WirelessCommunicationScreen);
+ sStatusScreen->taskId = CreateTask(Task_WirelessCommunicationScreen, 0);
+ sStatusScreen->rfuTaskId = CreateTask_ListenToWireless();
+ sStatusScreen->prevGroupCounts[GROUPTYPE_TOTAL] = 1;
+ ChangeBgX(0, 0, 0);
+ ChangeBgY(0, 0, 0);
+ ChangeBgX(1, 0, 0);
+ ChangeBgY(1, 0, 0);
+ LoadPalette(sBgTiles_Pal, 0x00, 0x20);
+ Menu_LoadStdPalAt(0xF0);
+ DynamicPlaceholderTextUtil_Reset();
+ FillBgTilemapBufferRect(0, 0, 0, 0, 32, 32, 0x0F);
+ CopyBgTilemapBufferToVram(1);
+ SetMainCallback2(CB2_RunWirelessCommunicationScreen);
+ RunTasks();
+ RunTextPrinters();
+ AnimateSprites();
+ BuildOamBuffer();
+ UpdatePaletteFade();
+}
+
+static void CB2_ExitWirelessCommunicationStatusScreen(void)
+{
+ s32 i;
+ FreeAllWindowBuffers();
+ for (i = 0; i < (int)ARRAY_COUNT(sBgTemplates); i++)
+ {
+ Free(GetBgTilemapBuffer(i));
+ }
+ Free(sStatusScreen);
+ SetMainCallback2(CB2_ReturnToFieldContinueScriptPlayMapMusic);
+}
+
+static void WCSS_CyclePalette(s16 * counter, s16 * palIdx)
+{
+ if (++(*counter) > 5)
+ {
+ if (++(*palIdx) == 14)
+ *palIdx = 0;
+
+ *counter = 0;
+ }
+ LoadPalette(sBgTiles_Pal + 16 * (*palIdx + 2), 0, 0x10);
+}
+
+static void PrintHeaderTexts(void)
+{
+ s32 i;
+ FillWindowPixelBuffer(0, PIXEL_FILL(0));
+ FillWindowPixelBuffer(1, PIXEL_FILL(0));
+ FillWindowPixelBuffer(2, PIXEL_FILL(0));
+ WCSS_AddTextPrinterParameterized(0, 1, sHeaderTexts[0], GetStringCenterAlignXOffset(1, sHeaderTexts[0], 0xC0), 6, COLORMODE_GREEN);
+ for (i = 0; i < (int)ARRAY_COUNT(sHeaderTexts[0]) - 1; i++)
+ {
+ WCSS_AddTextPrinterParameterized(1, 1, sHeaderTexts[i + 1], 0, 30 * i + 8, COLORMODE_WHITE_LGRAY);
+ }
+ WCSS_AddTextPrinterParameterized(1, 1, sHeaderTexts[i + 1], 0, 30 * i + 8, COLORMODE_RED);
+ PutWindowTilemap(0);
+ CopyWindowToVram(0, 2);
+ PutWindowTilemap(1);
+ CopyWindowToVram(1, 2);
+}
+
+#define tState data[0]
+
+static void Task_WirelessCommunicationScreen(u8 taskId)
+{
+ s32 i;
+ switch (gTasks[taskId].tState)
+ {
+ case 0:
+ PrintHeaderTexts();
+ gTasks[taskId].tState++;
+ break;
+ case 1:
+ BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, 0);
+ ShowBg(1);
+ CopyBgTilemapBufferToVram(0);
+ ShowBg(0);
+ gTasks[taskId].tState++;
+ break;
+ case 2:
+ if (!gPaletteFade.active)
+ {
+ gTasks[taskId].tState++;
+ }
+ break;
+ case 3:
+ if (UpdateCommunicationCounts(sStatusScreen->groupCounts, sStatusScreen->prevGroupCounts, sStatusScreen->activities, sStatusScreen->rfuTaskId))
+ {
+ FillWindowPixelBuffer(2, PIXEL_FILL(0));
+ for (i = 0; i < NUM_GROUPTYPES; i++)
+ {
+ ConvertIntToDecimalStringN(gStringVar4, sStatusScreen->groupCounts[i], STR_CONV_MODE_RIGHT_ALIGN, 2);
+ if (i != GROUPTYPE_TOTAL)
+ WCSS_AddTextPrinterParameterized(2, 1, gStringVar4, 12, 30 * i + 8, COLORMODE_WHITE_LGRAY);
+ else
+ WCSS_AddTextPrinterParameterized(2, 1, gStringVar4, 12, 98, COLORMODE_RED);
+ }
+ PutWindowTilemap(2);
+ CopyWindowToVram(2, 3);
+ }
+ if (JOY_NEW(A_BUTTON) || JOY_NEW(B_BUTTON))
+ {
+ PlaySE(SE_SELECT);
+ gTasks[sStatusScreen->rfuTaskId].data[15] = 0xFF;
+ gTasks[taskId].tState++;
+ }
+ WCSS_CyclePalette(&gTasks[taskId].data[7], &gTasks[taskId].data[8]);
+ break;
+ case 4:
+ BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, 0);
+ gTasks[taskId].tState++;
+ break;
+ case 5:
+ if (!gPaletteFade.active)
+ {
+ SetMainCallback2(CB2_ExitWirelessCommunicationStatusScreen);
+ DestroyTask(taskId);
+ }
+ break;
+ }
+}
+
+#undef tState
+
+static void WCSS_AddTextPrinterParameterized(u8 windowId, u8 fontId, const u8 * str, u8 x, u8 y, u8 mode)
+{
+ u8 color[3];
+
+ switch (mode)
+ {
+ case COLORMODE_NORMAL:
+ color[0] = TEXT_COLOR_TRANSPARENT;
+ color[1] = TEXT_COLOR_DARK_GREY;
+ color[2] = TEXT_COLOR_LIGHT_GREY;
+ break;
+ case COLORMODE_WHITE_LGRAY:
+ color[0] = TEXT_COLOR_TRANSPARENT;
+ color[1] = TEXT_COLOR_WHITE;
+ color[2] = TEXT_COLOR_LIGHT_GREY;
+ break;
+ case COLORMODE_RED:
+ color[0] = TEXT_COLOR_TRANSPARENT;
+ color[1] = TEXT_COLOR_RED;
+ color[2] = TEXT_COLOR_LIGHT_RED;
+ break;
+ case COLORMODE_GREEN:
+ color[0] = TEXT_COLOR_TRANSPARENT;
+ color[1] = TEXT_COLOR_LIGHT_GREEN;
+ color[2] = TEXT_COLOR_GREEN;
+ break;
+ case COLORMODE_WHITE_DGRAY:
+ color[0] = TEXT_COLOR_TRANSPARENT;
+ color[1] = TEXT_COLOR_WHITE;
+ color[2] = TEXT_COLOR_DARK_GREY;
+ break;
+ }
+
+ AddTextPrinterParameterized4(windowId, fontId, x, y, 0, 0, color, -1, str);
+}
+
+static u32 CountPlayersInGroupAndGetActivity(struct UnkStruct_x20 * unk20, u32 * groupCounts)
+{
+ int i, j, k;
+ u32 activity = unk20->gname_uname.gname.activity;
+
+ #define group_activity(i) (sActivityGroupInfo[(i)][0])
+ #define group_type(i) (sActivityGroupInfo[(i)][1])
+ #define group_players(i) (sActivityGroupInfo[(i)][2])
+
+ for (i = 0; i < ARRAY_COUNT(sActivityGroupInfo); i++)
+ {
+ if (activity == group_activity(i) && unk20->groupScheduledAnim == UNION_ROOM_SPAWN_IN)
+ {
+ if (group_players(i) == 0)
+ {
+ k = 0; //Should just be 1 without the increment after the loop ends but that doesn't match.
+ for (j = 0; j < RFU_CHILD_MAX; j++)
+ {
+ if (unk20->gname_uname.gname.child_sprite_gender[j] != 0) k++;
+ }
+ k++; //See above comment.
+ groupCounts[group_type(i)] += k;
+ }
+ else
+ {
+ groupCounts[group_type(i)] += group_players(i);
+ }
+ }
+ }
+ return activity;
+
+ #undef group_activity
+ #undef group_type
+ #undef group_players
+}
+
+static bool32 HaveCountsChanged(u32 * currCounts, u32 * prevCounts)
+{
+ s32 i;
+ for (i = 0; i < NUM_GROUPTYPES; i++)
+ {
+ if (currCounts[i] != prevCounts[i])
+ return TRUE;
+ }
+ return FALSE;
+}
+
+static bool32 UpdateCommunicationCounts(u32 * groupCounts, u32 * prevGroupCounts, u32 * activities, u8 taskId)
+{
+ bool32 activitiesChanged = FALSE;
+ u32 groupCountBuffer[NUM_GROUPTYPES] = {0, 0, 0, 0};
+ struct UnkStruct_x20 ** data = (void *)gTasks[taskId].data;
+ s32 i;
+
+ for (i = 0; i < NUM_TASK_DATA; i++)
+ {
+ u32 activity = CountPlayersInGroupAndGetActivity(&(*data)[i], groupCountBuffer);
+ if (activity != activities[i])
+ {
+ activities[i] = activity;
+ activitiesChanged = TRUE;
+ }
+ }
+
+ if (!HaveCountsChanged(groupCountBuffer, prevGroupCounts))
+ {
+ if (activitiesChanged == TRUE)
+ return TRUE;
+ else
+ return FALSE;
+ }
+ else
+ {
+ memcpy(groupCounts, groupCountBuffer, sizeof(groupCountBuffer));
+ memcpy(prevGroupCounts, groupCountBuffer, sizeof(groupCountBuffer));
+
+ groupCounts[GROUPTYPE_TOTAL] = groupCounts[GROUPTYPE_TRADE]
+ + groupCounts[GROUPTYPE_BATTLE]
+ + groupCounts[GROUPTYPE_UNION]
+ + groupCounts[GROUPTYPE_TOTAL];
+ return TRUE;
+ }
+}