summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/AgbRfu_LinkManager.c2
-rw-r--r--src/agb_flash.c26
-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.c6
-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.c30
-rwxr-xr-xsrc/battle_anim_pokeball.c24
-rw-r--r--src/battle_anim_psychic.c4
-rw-r--r--src/battle_anim_rock.c4
-rw-r--r--src/battle_anim_sound_tasks.c6
-rw-r--r--src/battle_anim_utility_funcs.c12
-rw-r--r--src/battle_anim_water.c680
-rw-r--r--src/battle_arena.c8
-rw-r--r--src/battle_bg.c2
-rw-r--r--src/battle_controller_link_opponent.c2
-rw-r--r--src/battle_controller_link_partner.c2
-rw-r--r--src/battle_controller_opponent.c2
-rw-r--r--src/battle_controller_player.c24
-rw-r--r--src/battle_controller_player_partner.c2
-rw-r--r--src/battle_controller_recorded_opponent.c2
-rw-r--r--src/battle_controller_recorded_player.c2
-rw-r--r--src/battle_dome.c2
-rw-r--r--src/battle_gfx_sfx_util.c29
-rw-r--r--src/battle_interface.c6
-rw-r--r--src/battle_main.c109
-rw-r--r--src/battle_message.c157
-rw-r--r--src/battle_pyramid_bag.c12
-rw-r--r--src/battle_records.c2
-rw-r--r--src/battle_script_commands.c390
-rw-r--r--src/battle_setup.c46
-rw-r--r--src/battle_tent.c6
-rw-r--r--src/battle_tower.c12
-rw-r--r--src/battle_transition.c32
-rw-r--r--src/battle_tv.c4
-rw-r--r--src/battle_util.c44
-rw-r--r--src/berry.c2
-rw-r--r--src/berry_blender.c48
-rwxr-xr-xsrc/berry_crush.c52
-rw-r--r--src/berry_tag_screen.c4
-rw-r--r--src/bike.c10
-rw-r--r--src/braille_puzzles.c50
-rw-r--r--src/cable_car.c2
-rw-r--r--src/cable_club.c38
-rw-r--r--src/coins.c2
-rw-r--r--src/contest.c3429
-rw-r--r--src/contest_ai.c843
-rw-r--r--src/contest_effect.c479
-rw-r--r--src/contest_link.c331
-rw-r--r--src/contest_link_util.c199
-rw-r--r--src/contest_painting.c116
-rw-r--r--src/contest_util.c630
-rw-r--r--src/credits.c2
-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/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/union_room.h12
-rw-r--r--src/decoration.c2
-rw-r--r--src/dewford_trend.c4
-rw-r--r--src/digit_obj_util.c2
-rw-r--r--src/dodrio_berry_picking.c50
-rw-r--r--src/dynamic_placeholder_text_util.c2
-rw-r--r--src/easy_chat.c22
-rw-r--r--src/egg_hatch.c18
-rwxr-xr-xsrc/ereader_screen.c8
-rw-r--r--src/event_object_movement.c219
-rw-r--r--src/evolution_graphics.c10
-rw-r--r--src/evolution_scene.c20
-rwxr-xr-xsrc/faraway_island.c9
-rw-r--r--src/field_camera.c40
-rw-r--r--src/field_control_avatar.c10
-rw-r--r--src/field_door.c4
-rw-r--r--src/field_effect.c2568
-rwxr-xr-xsrc/field_effect_helpers.c281
-rw-r--r--src/field_player_avatar.c232
-rw-r--r--src/field_region_map.c4
-rw-r--r--src/field_screen_effect.c78
-rw-r--r--src/field_special_scene.c44
-rw-r--r--src/field_specials.c256
-rw-r--r--src/field_tasks.c70
-rw-r--r--src/field_weather.c12
-rw-r--r--src/field_weather_effect.c10
-rw-r--r--src/fieldmap.c55
-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.c578
-rw-r--r--src/fldeff_rocksmash.c71
-rw-r--r--src/fldeff_softboiled.c4
-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.c14
-rw-r--r--src/frontier_util.c2
-rw-r--r--src/graphics.c74
-rw-r--r--src/hall_of_fame.c16
-rw-r--r--src/international_string_util.c2
-rw-r--r--src/intro.c6
-rwxr-xr-xsrc/item_menu.c164
-rwxr-xr-xsrc/item_use.c12
-rw-r--r--src/librfu_intr.c6
-rw-r--r--src/link.c156
-rw-r--r--src/link_rfu_2.c181
-rw-r--r--src/link_rfu_3.c88
-rw-r--r--src/list_menu.c12
-rw-r--r--src/m4a.c4
-rw-r--r--src/main_menu.c4
-rw-r--r--src/match_call.c4
-rw-r--r--src/mauville_old_man.c2
-rw-r--r--src/menu.c106
-rw-r--r--src/menu_specialized.c665
-rw-r--r--src/mevent_801BAAC.c4
-rw-r--r--src/minigame_countdown.c12
-rw-r--r--src/mirage_tower.c49
-rw-r--r--src/move_relearner.c34
-rw-r--r--src/mystery_event_menu.c4
-rw-r--r--src/mystery_gift.c10
-rw-r--r--src/naming_screen.c1866
-rw-r--r--src/overworld.c373
-rwxr-xr-xsrc/palette_util.c (renamed from src/roulette_util.c)218
-rwxr-xr-xsrc/party_menu.c42
-rw-r--r--src/player_pc.c14
-rw-r--r--src/pokeball.c20
-rw-r--r--src/pokeblock.c8
-rw-r--r--src/pokeblock_feed.c4
-rw-r--r--src/pokedex.c50
-rwxr-xr-xsrc/pokedex_area_screen.c2
-rw-r--r--src/pokemon.c124
-rw-r--r--src/pokemon_animation.c6
-rwxr-xr-xsrc/pokemon_jump.c14
-rw-r--r--src/pokemon_storage_system.c72
-rw-r--r--src/pokemon_summary_screen.c14
-rw-r--r--src/pokenav_conditions_1.c48
-rw-r--r--src/pokenav_conditions_2.c68
-rw-r--r--src/pokenav_conditions_3.c2
-rw-r--r--src/pokenav_main_menu.c2
-rwxr-xr-xsrc/pokenav_match_call_1.c2
-rwxr-xr-xsrc/pokenav_match_call_2.c4
-rw-r--r--src/pokenav_menu_handler_1.c6
-rw-r--r--src/pokenav_menu_handler_2.c4
-rw-r--r--src/pokenav_ribbons_1.c2
-rw-r--r--src/pokenav_ribbons_2.c2
-rw-r--r--src/post_battle_event_funcs.c2
-rw-r--r--src/rayquaza_scene.c22
-rw-r--r--src/record_mixing.c22
-rw-r--r--src/region_map.c4
-rw-r--r--src/reset_rtc_screen.c6
-rw-r--r--src/rotating_gate.c4
-rw-r--r--src/roulette.c4855
-rw-r--r--src/save.c6
-rw-r--r--src/save_failed_screen.c2
-rw-r--r--src/scrcmd.c11
-rw-r--r--src/script.c6
-rwxr-xr-xsrc/script_pokemon_util.c224
-rwxr-xr-xsrc/script_pokemon_util_80F87D8.c725
-rw-r--r--src/secret_base.c8
-rwxr-xr-xsrc/shop.c6
-rw-r--r--src/slot_machine.c5056
-rw-r--r--src/sound.c36
-rw-r--r--src/start_menu.c2
-rw-r--r--src/starter_choose.c4
-rw-r--r--src/strings.c82
-rw-r--r--src/text_window.c6
-rw-r--r--src/title_screen.c2
-rw-r--r--src/trade.c88
-rwxr-xr-xsrc/trainer_card.c16
-rw-r--r--src/trainer_hill.c98
-rw-r--r--src/trainer_see.c10
-rw-r--r--src/tv.c759
-rw-r--r--src/union_room.c34
-rw-r--r--src/union_room_battle.c4
-rwxr-xr-xsrc/union_room_chat.c20
-rw-r--r--src/unk_text_util_2.c36
-rw-r--r--src/use_pokeblock.c1411
-rw-r--r--src/wallclock.c4
-rw-r--r--src/wild_encounter.c7
189 files changed, 16957 insertions, 16341 deletions
diff --git a/src/AgbRfu_LinkManager.c b/src/AgbRfu_LinkManager.c
index e4127ee09..f6ebcc726 100644
--- a/src/AgbRfu_LinkManager.c
+++ b/src/AgbRfu_LinkManager.c
@@ -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 1ad9e47ec..15ab0932d 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)
{
@@ -154,10 +154,10 @@ void ReadFlash(u16 sectorNum, u32 offset, u8 *dest, u32 size)
}
funcSrc = (u16 *)ReadFlash_Core;
- funcSrc = (u16 *)((s32)funcSrc ^ 1);
+ funcSrc = (u16 *)((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)
{
@@ -165,7 +165,7 @@ void ReadFlash(u16 sectorNum, u32 offset, u8 *dest, u32 size)
i--;
}
- readFlash_Core = (void (*)(vu8 *, 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;
@@ -202,10 +202,10 @@ u32 VerifyFlashSector(u16 sectorNum, u8 *src)
}
funcSrc = (u16 *)VerifyFlashSector_Core;
- funcSrc = (u16 *)((s32)funcSrc ^ 1);
+ funcSrc = (u16 *)((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)
{
@@ -213,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;
@@ -239,10 +239,10 @@ 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 = (u16 *)((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)
{
@@ -250,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_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 f7d1eea10..d891a4d01 100755
--- a/src/battle_anim_effects_2.c
+++ b/src/battle_anim_effects_2.c
@@ -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;
}
@@ -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 e5a866999..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
{
@@ -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_pokeball.c b/src/battle_anim_pokeball.c
index 32081b7d5..7049931d3 100755
--- a/src/battle_anim_pokeball.c
+++ b/src/battle_anim_pokeball.c
@@ -816,7 +816,7 @@ static void AnimTask_ThrowBall_StandingTrainer_Step(u8 taskId)
{
if (gSprites[gBattlerSpriteIds[GetBattlerAtPosition(B_POSITION_PLAYER_LEFT)]].animCmdIndex == 1)
{
- PlaySE12WithPanning(SE_NAGERU, 0);
+ PlaySE12WithPanning(SE_BALL_THROW, 0);
gSprites[gTasks[taskId].tSpriteId].callback = SpriteCB_Ball_Throw;
CreateTask(Task_PlayerThrow_Wait, 10);
gTasks[taskId].func = AnimTask_ThrowBall_Step;
@@ -935,7 +935,7 @@ static void SpriteCB_Ball_MonShrink_Step(struct Sprite *sprite)
taskId = sprite->sTaskId;
if (++gTasks[taskId].sTimer == 11)
- PlaySE(SE_SUIKOMU);
+ PlaySE(SE_BALL_TRADE);
switch (gTasks[taskId].tState)
{
@@ -1042,16 +1042,16 @@ static void SpriteCB_Ball_Bounce_Step(struct Sprite *sprite)
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;
}
}
@@ -1111,7 +1111,7 @@ static void SpriteCB_Ball_Wobble(struct Sprite *sprite)
StartSpriteAffineAnim(sprite, BALL_ROTATE_RIGHT);
gBattleSpritesDataPtr->animationData->ballSubpx = 0;
sprite->callback = SpriteCB_Ball_Wobble_Step;
- PlaySE(SE_BOWA);
+ PlaySE(SE_BALL);
}
}
@@ -1258,7 +1258,7 @@ static void SpriteCB_Ball_Wobble_Step(struct Sprite *sprite)
else
StartSpriteAffineAnim(sprite, BALL_ROTATE_RIGHT);
- PlaySE(SE_BOWA);
+ PlaySE(SE_BALL);
}
break;
}
@@ -1303,7 +1303,7 @@ static void SpriteCB_Ball_Capture_Step(struct Sprite *sprite)
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));
MakeCaptureStars(sprite);
}
@@ -1316,7 +1316,7 @@ static void SpriteCB_Ball_Capture_Step(struct Sprite *sprite)
gDoingBattleAnim = FALSE;
UpdateOamPriorityInAllHealthboxes(1);
m4aMPlayAllStop();
- PlaySE(MUS_RG_FAN6);
+ PlaySE(MUS_RG_CAUGHT_INTRO);
}
else if (sprite->sTimer == 315)
{
@@ -1570,7 +1570,7 @@ u8 AnimateBallOpenParticles(u8 x, u8 y, u8 priority, u8 subpriority, u8 ballId)
gTasks[taskId].data[3] = priority;
gTasks[taskId].data[4] = subpriority;
gTasks[taskId].data[15] = ballId;
- PlaySE(SE_BOWA2);
+ PlaySE(SE_BALL_OPEN);
return taskId;
}
@@ -2309,7 +2309,7 @@ static void Task_ShinyStars(u8 taskId)
else
pan = 63;
- PlaySE12WithPanning(SE_REAPOKE, pan);
+ PlaySE12WithPanning(SE_SHINY, pan);
}
}
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 436ac60a3..29ba49346 100644
--- a/src/battle_anim_rock.c
+++ b/src/battle_anim_rock.c
@@ -631,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)
@@ -661,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_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_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 88af2cdec..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");
@@ -794,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
- SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT1_BG1 | BLDCNT_EFFECT_BLEND | BLDCNT_TGT2_ALL);
- SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(0, 16));
+ x = &gBattle_BG1_X;
+ y = &gBattle_BG1_Y;
+
+ 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);
@@ -833,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;
@@ -870,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];
@@ -1116,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))
@@ -1147,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)
{
@@ -1931,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 f9b0409e5..3461e9754 100644
--- a/src/battle_controller_link_opponent.c
+++ b/src/battle_controller_link_opponent.c
@@ -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 536eb6da7..63aa6eaea 100644
--- a/src/battle_controller_link_partner.c
+++ b/src/battle_controller_link_partner.c
@@ -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 7b67aaba4..858201b4b 100644
--- a/src/battle_controller_opponent.c
+++ b/src/battle_controller_opponent.c
@@ -1394,7 +1394,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 459e4566a..c9a3bc2e0 100644
--- a/src/battle_controller_player.c
+++ b/src/battle_controller_player.c
@@ -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);
@@ -1468,8 +1468,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 +1480,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 +2392,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 5efb6ffe1..7796bef09 100644
--- a/src/battle_controller_player_partner.c
+++ b/src/battle_controller_player_partner.c
@@ -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 a343246c5..76e84da41 100644
--- a/src/battle_controller_recorded_opponent.c
+++ b/src/battle_controller_recorded_opponent.c
@@ -1284,7 +1284,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 f77cb3e11..387586f88 100644
--- a/src/battle_controller_recorded_player.c
+++ b/src/battle_controller_recorded_player.c
@@ -1286,7 +1286,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_dome.c b/src/battle_dome.c
index 151bfc927..3654d2ccf 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"
diff --git a/src/battle_gfx_sfx_util.c b/src/battle_gfx_sfx_util.c
index 54fc88f24..b1bb61aaf 100644
--- a/src/battle_gfx_sfx_util.c
+++ b/src/battle_gfx_sfx_util.c
@@ -916,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
{
@@ -1014,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);
}
}
@@ -1058,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;
}
}
@@ -1067,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;
}
}
@@ -1086,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 1d8aeab53..935a53ffe 100644
--- a/src/battle_main.c
+++ b/src/battle_main.c
@@ -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]++;
@@ -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)
@@ -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;
@@ -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;
}
@@ -4851,40 +4851,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 +4960,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 +4984,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 +5010,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 +5023,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 +5031,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 +5270,7 @@ static void ReturnFromBattleToOverworld(void)
SetRoamerInactive();
}
- m4aSongNumStop(SE_HINSI);
+ m4aSongNumStop(SE_LOW_HEALTH);
SetMainCallback2(gMain.savedCallback);
}
@@ -5826,7 +5817,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 2a0ba4ded..59ad0cee4 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
{
@@ -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 SE_KON}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 SE_NIGERU}Got away safely!\p");
-static const u8 sText_PkmnFledUsingIts[] = _("{PLAY_SE SE_NIGERU}{B_ATK_NAME_WITH_PREFIX} fled\nusing its {B_LAST_ITEM}!\p");
-static const u8 sText_PkmnFledUsing[] = _("{PLAY_SE SE_NIGERU}{B_ATK_NAME_WITH_PREFIX} fled\nusing {B_ATK_ABILITY}!\p");
-static const u8 sText_WildPkmnFled[] = _("{PLAY_SE SE_NIGERU}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 SE_NIGERU}{B_LINK_OPPONENT1_NAME} fled!");
-static const u8 sText_TwoWildFled[] = _("{PLAY_SE SE_NIGERU}{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 SE_PINPON}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!{WAIT_SE}{PLAY_BGM MUS_KACHI22}\p");
-static const u8 sText_GotchaPkmnCaught2[] = _("Gotcha!\n{B_OPPONENT_MON1_NAME} was caught!{WAIT_SE}{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,7 +1180,13 @@ 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!");
@@ -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");
@@ -1305,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 SE_NIGERU}{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?");
@@ -2715,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++;
}
}
diff --git a/src/battle_pyramid_bag.c b/src/battle_pyramid_bag.c
index 5626dd7bc..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();
}
@@ -424,7 +424,7 @@ static bool8 sub_81C5078(void)
{
case 0:
SetVBlankHBlankCallbacksToNull();
- clear_scheduled_bg_copies_to_vram();
+ ClearScheduledBgCopiesToVram();
gMain.state++;
break;
case 1:
@@ -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)
diff --git a/src/battle_records.c b/src/battle_records.c
index ccd16e219..c6363a6ed 100644
--- a/src/battle_records.c
+++ b/src/battle_records.c
@@ -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 a70288015..8f7013e45 100644
--- a/src/battle_script_commands.c
+++ b/src/battle_script_commands.c
@@ -1128,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
@@ -1977,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:
@@ -1994,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;
@@ -3320,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++;
}
@@ -3489,7 +3489,6 @@ static void Cmd_getexp(void)
}
}
-#ifdef NONMATCHING
static void Cmd_unknown_24(void)
{
u16 HP_count = 0;
@@ -3500,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);
@@ -3521,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])))
@@ -3535,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_FAINTED2(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_FAINTED2(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;
}
@@ -3571,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)
{
@@ -4385,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++;
@@ -4397,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++;
@@ -4425,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++;
@@ -4495,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();
@@ -5471,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;
@@ -5831,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)
{
@@ -6340,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)
{
@@ -6726,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;
}
@@ -7288,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);
@@ -7315,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;
@@ -7350,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++;
@@ -8750,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;
@@ -8957,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;
@@ -9234,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);
diff --git a/src/battle_setup.c b/src/battle_setup.c
index 36fce2081..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"
@@ -518,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);
@@ -553,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);
@@ -588,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);
@@ -1454,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 8fcea1123..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
}
}
@@ -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 176be8e16..559279e74 100644
--- a/src/battle_transition.c
+++ b/src/battle_transition.c
@@ -749,7 +749,7 @@ static const union AffineAnimCmd *const sSpriteAffineAnimTable_Pokeball[] =
static const struct SpriteTemplate sSpriteTemplate_Pokeball =
{
.tileTag = 0xFFFF,
- .paletteTag = 4105,
+ .paletteTag = FLDEFF_PAL_TAG_POKEBALL,
.oam = &gObjectEventBaseOam_32x32,
.anims = sSpriteAnimTable_Pokeball,
.images = sSpriteImage_Pokeball,
@@ -798,7 +798,7 @@ static const union AnimCmd *const sSpriteAnimTable_UnusedBrendanLass[] =
static const struct SpriteTemplate sSpriteTemplate_UnusedBrendan =
{
.tileTag = 0xFFFF,
- .paletteTag = 4106,
+ .paletteTag = 0x100A,
.oam = &sOam_UnusedBrendanLass,
.anims = sSpriteAnimTable_UnusedBrendanLass,
.images = sImageTable_UnusedBrendan,
@@ -809,7 +809,7 @@ static const struct SpriteTemplate sSpriteTemplate_UnusedBrendan =
static const struct SpriteTemplate sSpriteTemplate_UnusedLass =
{
.tileTag = 0xFFFF,
- .paletteTag = 4106,
+ .paletteTag = 0x100A,
.oam = &sOam_UnusedBrendanLass,
.anims = sSpriteAnimTable_UnusedBrendanLass,
.images = sImageTable_UnusedLass,
@@ -817,12 +817,9 @@ static const struct SpriteTemplate sSpriteTemplate_UnusedLass =
.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");
@@ -848,10 +845,7 @@ static const u16 *const sPlayerMugshotsPals[GENDER_COUNT] =
};
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");
@@ -1323,7 +1317,7 @@ static bool8 Phase2_BigPokeball_Func1(struct Task *task)
GetBg0TilesDst(&tilemap, &tileset);
CpuFill16(0, tilemap, 0x800);
CpuCopy16(sBigPokeball_Tileset, tileset, 0x580);
- LoadPalette(gFieldEffectObjectPalette10, 0xF0, 0x20);
+ LoadPalette(sFieldEffectPal_Pokeball, 0xF0, 0x20);
task->tState++;
return FALSE;
@@ -1629,7 +1623,7 @@ static bool8 Phase2_PokeballsTrail_Func1(struct Task *task)
GetBg0TilesDst(&tilemap, &tileset);
CpuSet(sPokeballTrail_Tileset, tileset, 0x20);
CpuFill32(0, tilemap, 0x800);
- LoadPalette(gFieldEffectObjectPalette10, 0xF0, 0x20);
+ LoadPalette(sFieldEffectPal_Pokeball, 0xF0, 0x20);
task->tState++;
return FALSE;
@@ -2233,7 +2227,7 @@ static bool8 Phase2_Mugshot_Func4(struct Task *task)
SetTrainerPicSlideTable(task->tPlayerSpriteId, 1);
IncrementTrainerPicState(task->tOpponentSpriteId);
- PlaySE(SE_BT_START);
+ PlaySE(SE_MUGSHOT);
sTransitionStructPtr->VBlank_DMA++;
return FALSE;
@@ -2919,7 +2913,7 @@ static bool8 Phase2_RectangularSpiral_Func1(struct Task *task)
CpuCopy16(sShrinkingBoxTileset, tileset, 0x20);
CpuCopy16(sShrinkingBoxTileset + 0x70, tileset + 0x20, 0x20);
CpuFill16(0xF000, tilemap, 0x800);
- LoadPalette(gFieldEffectObjectPalette10, 0xF0, 0x20);
+ LoadPalette(sFieldEffectPal_Pokeball, 0xF0, 0x20);
task->tData3 = 1;
task->tState++;
@@ -3428,7 +3422,7 @@ static bool8 Phase2_GridSquares_Func1(struct Task *task)
GetBg0TilesDst(&tilemap, &tileset);
CpuSet(sShrinkingBoxTileset, tileset, 0x10);
CpuFill16(0xF000, tilemap, 0x800);
- LoadPalette(gFieldEffectObjectPalette10, 0xF0, 0x20);
+ LoadPalette(sFieldEffectPal_Pokeball, 0xF0, 0x20);
task->tState++;
return FALSE;
@@ -3980,7 +3974,9 @@ static bool8 Phase2_FrontierLogoWave_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);
}
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 9cc2252b6..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
{
@@ -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
@@ -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 98264f37b..d70e8c353 100644
--- a/src/berry.c
+++ b/src/berry.c
@@ -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 a2a96c089..399a9e7b8 100644
--- a/src/berry_blender.c
+++ b/src/berry_blender.c
@@ -116,8 +116,8 @@ struct BerryBlenderData
u16 field_116;
u16 field_118;
u16 field_11A;
- u16 bg_X;
- u16 bg_Y;
+ s16 bg_X;
+ s16 bg_Y;
u8 field_120[3];
u8 field_123;
u16 scores[BLENDER_MAX_PLAYERS][BLENDER_SCORES_NO];
@@ -1058,7 +1058,7 @@ static void sub_807FD08(struct Sprite* sprite)
if (++sprite->data[5] > 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];
@@ -1230,7 +1230,7 @@ static void sub_8080018(void)
sBerryBlenderData->field_114 = 0;
Blender_CopyBerryData(&sBerryBlenderData->blendedBerries[0], gSpecialVar_ItemId);
memcpy(gBlockSendBuffer, &sBerryBlenderData->blendedBerries[0], sizeof(struct BlenderBerry));
- sub_800ADF8();
+ SetLinkStandbyCallback();
sBerryBlenderData->framesToWait = 0;
break;
case 9:
@@ -1238,7 +1238,7 @@ static void sub_8080018(void)
{
ResetBlockReceivedFlags();
if (GetMultiplayerId() == 0)
- sub_800A4D8(4);
+ SendBlockRequest(4);
sBerryBlenderData->mainState++;
}
break;
@@ -1295,7 +1295,7 @@ static void sub_8080018(void)
{
sBerryBlenderData->mainState++;
sub_8082CB4(&sBerryBlenderData->bgAffineSrc);
- PlaySE(SE_RU_HYUU);
+ PlaySE(SE_FALL);
ShowBg(2);
}
break;
@@ -1310,7 +1310,7 @@ static void sub_8080018(void)
sBerryBlenderData->field_11A = 0x100;
sBerryBlenderData->arrowPos = sUnknown_083399DC[sUnknown_083399E4[sBerryBlenderData->playersNo - 2]];
sBerryBlenderData->framesToWait = 0;
- PlaySE(SE_TRACK_DOOR);
+ PlaySE(SE_TRUCK_DOOR);
sub_808074C();
Blender_PrintPlayerNames();
}
@@ -1332,7 +1332,7 @@ static void sub_8080018(void)
sBerryBlenderData->mainState++;
break;
case 19:
- sub_800ADF8();
+ SetLinkStandbyCallback();
sBerryBlenderData->mainState++;
break;
case 20:
@@ -1582,7 +1582,7 @@ static void sub_80808D4(void)
case 13:
sBerryBlenderData->mainState++;
sub_808074C();
- PlaySE(SE_RU_HYUU);
+ PlaySE(SE_FALL);
sub_8082CB4(&sBerryBlenderData->bgAffineSrc);
ShowBg(2);
break;
@@ -1597,7 +1597,7 @@ static void sub_80808D4(void)
sBerryBlenderData->arrowPos = sUnknown_083399DC[sUnknown_083399E4[sBerryBlenderData->playersNo - 2]];
SetGpuRegBits(REG_OFFSET_BG2CNT, 2);
sBerryBlenderData->framesToWait = 0;
- PlaySE(SE_TRACK_DOOR);
+ PlaySE(SE_TRUCK_DOOR);
Blender_PrintPlayerNames();
}
sub_8082CB4(&sBerryBlenderData->bgAffineSrc);
@@ -1648,7 +1648,7 @@ static void sub_80808D4(void)
sBerryBlenderData->field_154 = GetCurrentMapMusic();
PlayBGM(MUS_CYCLING);
- PlaySE(SE_MOTER);
+ PlaySE(SE_BERRY_BLENDER);
Blender_ControlHitPitch();
break;
}
@@ -1873,17 +1873,17 @@ static void sub_8081288(u16 a0, u8 a1)
{
StartSpriteAnim(&gSprites[spriteId], 2);
gSprites[spriteId].callback = sub_8082F9C;
- PlaySE(SE_RU_GASHIN);
+ PlaySE(SE_ICE_STAIRS);
}
else if (a0 == 0x5432)
{
StartSpriteAnim(&gSprites[spriteId], 0);
- PlaySE(SE_SEIKAI);
+ PlaySE(SE_SUCCESS);
}
else if (a0 == 0x2345)
{
StartSpriteAnim(&gSprites[spriteId], 1);
- PlaySE(SE_HAZURE);
+ PlaySE(SE_FAILURE);
}
sub_8082E84();
}
@@ -2587,7 +2587,7 @@ static bool8 LinkPlayAgainHandleSaving(void)
switch (sBerryBlenderData->field_1A0)
{
case 0:
- sub_800ADF8();
+ SetLinkStandbyCallback();
sBerryBlenderData->field_1A0 = 1;
sBerryBlenderData->framesToWait = 0;
break;
@@ -2606,7 +2606,7 @@ static bool8 LinkPlayAgainHandleSaving(void)
case 3:
if (++sBerryBlenderData->framesToWait == 10)
{
- sub_800ADF8();
+ SetLinkStandbyCallback();
sBerryBlenderData->field_1A0++;
}
break;
@@ -2682,7 +2682,7 @@ static void CB2_HandlePlayerLinkPlayAgainChoice(void)
break;
case 5:
Blender_PrintText(&sBerryBlenderData->textState, gText_SavingDontTurnOff2, 0);
- sub_800ADF8();
+ SetLinkStandbyCallback();
sBerryBlenderData->gameEndState++;
break;
case 6:
@@ -2702,7 +2702,7 @@ static void CB2_HandlePlayerLinkPlayAgainChoice(void)
break;
case 8:
sBerryBlenderData->gameEndState++;
- sub_800ADF8();
+ SetLinkStandbyCallback();
break;
case 9:
if (IsLinkTaskFinished())
@@ -2732,7 +2732,7 @@ static void CB2_HandlePlayerLinkPlayAgainChoice(void)
case 11:
if (++sBerryBlenderData->framesToWait > 30)
{
- sub_800AC34();
+ SetCloseLinkCallback();
sBerryBlenderData->gameEndState++;
}
break;
@@ -3025,7 +3025,7 @@ static void sub_8083010(struct Sprite* sprite)
{
sprite->data[1] = 88;
sprite->data[0]++;
- PlaySE(SE_KON);
+ PlaySE(SE_BALL_BOUNCE_1);
}
break;
case 1:
@@ -3166,13 +3166,13 @@ static void sub_80832E8(s16* a0)
static void sub_808330C(void)
{
- sub_80832E8(&sBerryBlenderData->bg_X);
- sub_80832E8(&sBerryBlenderData->bg_Y);
+ sub_80832E8((s16 *)&sBerryBlenderData->bg_X);
+ sub_80832E8((s16 *)&sBerryBlenderData->bg_Y);
}
static void sub_8083334(s16* a0, u16 a1)
{
- s32 var;
+ u8 var;
if (a1 < 10)
var = 16;
@@ -3567,7 +3567,7 @@ static void sub_8083F3C(u8 taskId)
{
if (gTasks[taskId].data[0] == 0)
{
- PlayFanfare(MUS_FANFA1);
+ PlayFanfare(MUS_LEVEL_UP);
gTasks[taskId].data[0]++;
}
if (IsFanfareTaskInactive())
diff --git a/src/berry_crush.c b/src/berry_crush.c
index 90a299a74..6269f0ad9 100755
--- a/src/berry_crush.c
+++ b/src/berry_crush.c
@@ -825,7 +825,7 @@ u32 sub_8020C0C(MainCallback callback)
if (callback == CB2_ReturnToField)
{
gTextFlags.autoScroll = TRUE;
- PlayNewMapMusic(MUS_POKECEN);
+ PlayNewMapMusic(MUS_POKE_CENTER);
SetMainCallback1(CB1_Overworld);
}
@@ -1076,7 +1076,7 @@ int sub_802104C(void)
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())
@@ -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;
}
@@ -2027,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:
@@ -2110,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;
@@ -2167,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())
@@ -2213,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())
@@ -2226,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())
@@ -2247,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;
@@ -2274,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];
@@ -2295,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())
@@ -2323,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())
@@ -2667,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;
@@ -2703,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:
@@ -2724,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;
@@ -2737,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);
@@ -3005,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())
@@ -3084,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())
@@ -3184,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)
@@ -3271,7 +3271,7 @@ static void BerryCrush_SetPaletteFadeParams(u8 *params, bool8 communicateAfter,
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 38c2832ee..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();
}
@@ -217,7 +217,7 @@ static bool8 InitBerryTagScreen(void)
case 0:
SetVBlankHBlankCallbacksToNull();
ResetVramOamAndBgCntRegs();
- clear_scheduled_bg_copies_to_vram();
+ ClearScheduledBgCopiesToVram();
gMain.state++;
break;
case 1:
diff --git a/src/bike.c b/src/bike.c
index 3685ebfad..c4964b627 100644
--- a/src/bike.c
+++ b/src/bike.c
@@ -659,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);
}
@@ -835,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;
}
@@ -846,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;
}
@@ -1000,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 f9f06823a..a1ea44e26 100644
--- a/src/braille_puzzles.c
+++ b/src/braille_puzzles.c
@@ -86,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();
}
@@ -140,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();
}
@@ -164,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;
@@ -186,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();
}
@@ -279,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();
}
@@ -318,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();
}
@@ -410,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 94d9d0c66..fc161284f 100644
--- a/src/cable_car.c
+++ b/src/cable_car.c
@@ -343,7 +343,7 @@ static void CableCarMainCallback_Setup(void)
break;
case 8:
BeginNormalPaletteFade(0xFFFFFFFF, 3, 16, 0, RGB(0, 0, 0));
- FadeInNewBGM(MUS_ROPEWAY, 1);
+ FadeInNewBGM(MUS_CABLE_CAR, 1);
sub_8150B6C(1);
gMain.state++;
break;
diff --git a/src/cable_club.c b/src/cable_club.c
index 15e468390..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"
@@ -203,7 +203,7 @@ static void sub_80B2600(u8 taskId)
gTasks[taskId].data[0]++;
if (gTasks[taskId].data[0] == 10)
{
- sub_800A4D8(2);
+ SendBlockRequest(2);
DestroyTask(taskId);
}
}
@@ -357,7 +357,7 @@ static void Task_LinkupExchangeDataWithLeader(u8 taskId)
if (gSpecialVar_Result == LINKUP_DIFF_SELECTIONS
|| gSpecialVar_Result == LINKUP_WRONG_NUM_PLAYERS)
{
- sub_800AC34();
+ SetCloseLinkCallback();
HideFieldMessageBox();
gTasks[taskId].func = Task_StopLinkup;
}
@@ -392,7 +392,7 @@ static void Task_LinkupCheckStatusAfterConfirm(u8 taskId)
{
if (!Link_AnyPartnersPlayingRubyOrSapphire())
{
- sub_800AC34();
+ SetCloseLinkCallback();
HideFieldMessageBox();
gTasks[taskId].func = Task_StopLinkup;
}
@@ -405,7 +405,7 @@ static void Task_LinkupCheckStatusAfterConfirm(u8 taskId)
}
else if (gSpecialVar_Result == LINKUP_DIFF_SELECTIONS)
{
- sub_800AC34();
+ SetCloseLinkCallback();
HideFieldMessageBox();
gTasks[taskId].func = Task_StopLinkup;
}
@@ -426,7 +426,7 @@ static void Task_LinkupCheckStatusAfterConfirm(u8 taskId)
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 = Task_LinkupAwaitTrainerCardData;
- sub_800A4D8(2);
+ SendBlockRequest(2);
}
}
@@ -481,7 +481,7 @@ static void FinishLinkup(u16 *linkupStatus, u32 taskId)
{
// Unsuccessful battle tower linkup
*linkupStatus = LINKUP_FAILED_BATTLE_TOWER;
- sub_800AC34();
+ SetCloseLinkCallback();
gTasks[taskId].func = Task_StopLinkup;
}
else
@@ -503,7 +503,7 @@ static void FinishLinkup(u16 *linkupStatus, u32 taskId)
else
{
// Unsuccessful linkup
- sub_800AC34();
+ SetCloseLinkCallback();
gTasks[taskId].func = Task_StopLinkup;
}
}
@@ -686,7 +686,7 @@ static void Task_ValidateMixingGameLanguage(u8 taskId)
if (mixingForeignGames)
{
gSpecialVar_Result = LINKUP_FOREIGN_GAME;
- sub_800AD10();
+ SetCloseLinkCallbackHandleJP();
gTasks[taskId].tState = 1;
return;
}
@@ -856,7 +856,7 @@ static void Task_StartWiredCableClubBattle(u8 taskId)
task->tState++;
break;
case 3:
- sub_800AC34();
+ SetCloseLinkCallback();
task->tState++;
break;
case 4:
@@ -865,9 +865,9 @@ static void Task_StartWiredCableClubBattle(u8 taskId)
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();
@@ -919,7 +919,7 @@ static void Task_StartWirelessCableClubBattle(u8 taskId)
tState = 5;
break;
case 5:
- sub_800ADF8();
+ SetLinkStandbyCallback();
tState = 6;
break;
case 6:
@@ -930,9 +930,9 @@ static void Task_StartWirelessCableClubBattle(u8 taskId)
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);
@@ -974,7 +974,7 @@ static void CB2_ReturnFromUnionRoomBattle(void)
}
else
{
- sub_800AC34();
+ SetCloseLinkCallback();
gMain.state = 1;
}
break;
@@ -1113,7 +1113,7 @@ static void Task_StartWiredTrade(u8 taskId)
gSelectedTradeMonPositions[TRADE_PLAYER] = 0;
gSelectedTradeMonPositions[TRADE_PARTNER] = 0;
m4aMPlayAllStop();
- sub_800AC34();
+ SetCloseLinkCallback();
task->tState++;
break;
case 3:
@@ -1146,7 +1146,7 @@ static void Task_StartWirelessTrade(u8 taskId)
gSelectedTradeMonPositions[TRADE_PLAYER] = 0;
gSelectedTradeMonPositions[TRADE_PARTNER] = 0;
m4aMPlayAllStop();
- sub_800ADF8();
+ SetLinkStandbyCallback();
tState++;
break;
case 3:
@@ -1264,7 +1264,7 @@ static void sub_80B3AAC(u8 taskId)
// Unused
static void sub_80B3AD0(u8 taskId)
{
- sub_800AC34();
+ SetCloseLinkCallback();
gTasks[taskId].func = sub_80B3AAC;
}
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/contest.c b/src/contest.c
index 0b56569cb..fbd42a007 100644
--- a/src/contest.c
+++ b/src/contest.c
@@ -2,14 +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 "battle.h"
#include "battle_anim.h"
#include "contest.h"
+#include "contest_link.h"
#include "data.h"
#include "decompress.h"
#include "graphics.h"
@@ -38,95 +34,73 @@
#include "strings.h"
#include "contest_effect.h"
#include "contest_link.h"
-#include "script_pokemon_util_80F87D8.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);
@@ -134,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 CalculateFinalScores(void);
-static void sub_80DD080(u8);
-static void sub_80DE9DC(u8);
-static void sub_80DCBE8(u8, u8);
-static u8 sub_80DC9EC(u8);
+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 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 gContestMonTotalPoints[CONTESTANT_COUNT] = {0};
-EWRAM_DATA s16 gUnknown_02039F10[CONTESTANT_COUNT] = {0};
-EWRAM_DATA s16 gContestMonRound2Points[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;
@@ -230,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;
@@ -249,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,
@@ -283,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,
@@ -368,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,
@@ -408,7 +522,7 @@ static const struct SpriteTemplate gSpriteTemplate_8587B18[] =
}
};
-const struct Subsprite gSubspriteTable_8587B78[] =
+static const struct Subsprite sSubsprites_NextTurn[] =
{
{
.x = -28,
@@ -428,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,
@@ -457,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,
@@ -495,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,
@@ -520,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,
@@ -562,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"
@@ -608,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,
@@ -617,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,
@@ -626,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,
@@ -635,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,
@@ -644,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,
@@ -653,7 +769,7 @@ static const struct WindowTemplate sContestWindowTemplates[] =
.paletteNum = 0xF,
.baseBlock = 0x260
},
- [CONTEST_WINDOW_MOVE0] = {
+ [WIN_MOVE0] = {
.bg = 0,
.tilemapLeft = 1,
.tilemapTop = 31,
@@ -662,7 +778,7 @@ static const struct WindowTemplate sContestWindowTemplates[] =
.paletteNum = 0xF,
.baseBlock = 0x2A4
},
- [CONTEST_WINDOW_MOVE1] = {
+ [WIN_MOVE1] = {
.bg = 0,
.tilemapLeft = 1,
.tilemapTop = 33,
@@ -671,7 +787,7 @@ static const struct WindowTemplate sContestWindowTemplates[] =
.paletteNum = 0xF,
.baseBlock = 0x2B6
},
- [CONTEST_WINDOW_MOVE2] = {
+ [WIN_MOVE2] = {
.bg = 0,
.tilemapLeft = 1,
.tilemapTop = 35,
@@ -680,7 +796,7 @@ static const struct WindowTemplate sContestWindowTemplates[] =
.paletteNum = 0xF,
.baseBlock = 0x2C8
},
- [CONTEST_WINDOW_MOVE3] = {
+ [WIN_MOVE3] = {
.bg = 0,
.tilemapLeft = 1,
.tilemapTop = 37,
@@ -689,7 +805,7 @@ static const struct WindowTemplate sContestWindowTemplates[] =
.paletteNum = 0xF,
.baseBlock = 0x2DA
},
- [CONTEST_WINDOW_SLASH] = {
+ [WIN_SLASH] = {
.bg = 0,
.tilemapLeft = 16,
.tilemapTop = 31,
@@ -698,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,
@@ -712,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,
@@ -772,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),
@@ -787,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)
@@ -853,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);
@@ -886,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])));
}
}
@@ -922,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);
@@ -940,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++)
{
@@ -952,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);
@@ -968,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)
@@ -976,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];
@@ -998,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;
@@ -1054,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)
{
@@ -1071,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)
{
@@ -1095,7 +1241,7 @@ static void sub_80D7CB4(u8 taskId)
case 1:
if (IsLinkTaskFinished())
{
- sub_800ADF8();
+ SetLinkStandbyCallback();
gTasks[taskId].data[0]++;
}
return;
@@ -1112,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;
}
}
@@ -1164,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);
@@ -1179,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);
@@ -1221,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])
{
@@ -1240,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:
@@ -1250,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:
@@ -1261,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;
}
@@ -1271,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;
}
}
@@ -1293,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);
@@ -1313,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)
{
@@ -1321,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
@@ -1336,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;
@@ -1410,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
@@ -1429,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);
@@ -1460,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)
{
@@ -1479,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);
@@ -1519,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;
@@ -1557,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
{
@@ -2059,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:
@@ -2089,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:
@@ -2129,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)
@@ -2213,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)
{
@@ -2290,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)
@@ -2300,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])
{
@@ -2309,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)
{
@@ -2369,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;
}
@@ -2388,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)
{
@@ -2418,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);
@@ -2463,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;
+ 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();
@@ -2578,7 +2748,7 @@ static void sub_80DA830(u8 taskId)
}
}
-static void sub_80DA874(void)
+static void FieldCB_ContestReturnToField(void)
{
ScriptContext2_Disable();
EnableBothScriptContexts();
@@ -2587,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;
@@ -2610,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);
@@ -2674,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)
@@ -2718,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;
@@ -2729,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)
@@ -2764,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--;
@@ -2870,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;
@@ -2908,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);
@@ -2986,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)
@@ -3053,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];
@@ -3229,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);
}
}
}
@@ -3278,7 +3454,7 @@ static void RankContestants(void)
ApplyNextTurnOrder();
}
-static void sub_80DBA18(void)
+static void SetAttentionLevels(void)
{
s32 i;
@@ -3288,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;
@@ -3307,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--;
@@ -3331,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)
@@ -3343,33 +3518,32 @@ 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 CalculateTotalPointsForContestant(u8 contestant)
{
gContestMonRound2Points[contestant] = GetContestantRound2Points(contestant);
- gContestMonTotalPoints[contestant] = gContestMonConditions[contestant] + gContestMonRound2Points[contestant];
+ gContestMonTotalPoints[contestant] = gContestMonRound1Points[contestant] + gContestMonRound2Points[contestant];
}
static void CalculateFinalScores(void)
@@ -3383,24 +3557,23 @@ static void CalculateFinalScores(void)
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;
@@ -3408,42 +3581,47 @@ static void DetermineFinalStandings(void)
}
}
+ // Init data for ranking contestants
for (i = 0; i < CONTESTANT_COUNT; i++)
{
- sp8[i].unk0 = gContestMonTotalPoints[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)
@@ -3457,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;
@@ -3489,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)
@@ -3691,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;
}
}
@@ -3749,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);
@@ -3945,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];
@@ -3954,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.
@@ -4038,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.
@@ -4062,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);
@@ -4114,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;
@@ -4198,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;
@@ -4224,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)
@@ -4318,7 +4528,7 @@ static void sub_80DD080(u8 contestant)
rnd--;
}
}
- eContestantStatus[contestant].unk1B = i;
+ eContestantStatus[contestant].contestantAnimTarget = i;
}
void SetContestantEffectStringID(u8 a, u8 b)
@@ -4345,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);
@@ -4441,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)
@@ -4536,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;
}
@@ -4570,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];
@@ -4594,7 +4804,7 @@ static void Task_MoveApplauseMeterOnscreen(u8 taskId)
}
}
-static void TryMoveApplauseMeterOffscreen(void)
+static void SlideApplauseMeterOut(void)
{
if (gSprites[eContest.applauseMeterSpriteId].invisible == TRUE)
{
@@ -4602,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];
@@ -4638,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:
@@ -4660,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
+
+#define tBlendColor data[0]
+#define tBlendCoeff data[1]
+#define tBlendDir data[2]
+#define tTargetBlendCoeff data[3]
+#define tBlendDelay data[10]
-static void sub_80DDED0(s8 a, s8 b)
+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;
}
}
}
@@ -4797,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;
@@ -4858,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;
@@ -4886,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;
@@ -4908,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;
@@ -4922,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:
@@ -4934,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)
{
@@ -4988,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
{
@@ -4998,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)
{
@@ -5007,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)
@@ -5065,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;
@@ -5086,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;
@@ -5101,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
@@ -5112,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;
@@ -5185,7 +5417,7 @@ static void Contest_PrintTextToBg0WindowStd(u32 a, const u8 *b)
printerTemplate.shadowColor = 8;
AddTextPrinter(&printerTemplate, 0, 0);
- PutWindowTilemap(a);
+ PutWindowTilemap(windowId);
Contest_SetBgCopyFlags(0);
}
@@ -5276,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;
}
@@ -5380,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 && gContestMonTotalPoints[var_38] - gContestMonTotalPoints[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 (gContestMonRound1Points[i] > gContestMonRound1Points[j])
+ notLastInRound1 = TRUE;
if (gContestMonRound2Points[i] > gContestMonRound2Points[j])
- r8 = TRUE;
+ 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 (gContestMonRound2Points[r7] < gContestMonRound2Points[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
{
@@ -5693,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);
@@ -5720,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.
{
@@ -5744,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)
{
@@ -5785,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];
@@ -5793,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;
@@ -5811,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
index 692c58603..ae6975268 100644
--- a/src/contest_link.c
+++ b/src/contest_link.c
@@ -8,10 +8,18 @@
#include "task.h"
#include "contest_link.h"
-static void sub_80FC5C0(u8);
-static void sub_80FC5DC(u8);
-
-bool32 sub_80FC4F4(void *src, u16 size)
+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))
@@ -20,21 +28,21 @@ bool32 sub_80FC4F4(void *src, u16 size)
return FALSE;
}
-bool8 sub_80FC530(u8 arg0)
+bool8 LinkContest_GetBlockReceived(u8 flag)
{
- u8 mask = (1 << arg0);
+ u8 mask = (1 << flag);
if (!(GetBlockReceivedStatus() & mask))
{
return FALSE;
}
else
{
- ResetBlockReceivedFlag(arg0);
+ ResetBlockReceivedFlag(flag);
return TRUE;
}
}
-bool8 sub_80FC55C(void)
+bool8 LinkContest_GetBlockReceivedFromAllPlayers(void)
{
if (GetBlockReceivedStatus() == GetLinkPlayerCountAsBitFlags())
{
@@ -47,23 +55,23 @@ bool8 sub_80FC55C(void)
}
}
-void sub_80FC580(u8 taskId)
+void Task_LinkContest_Init(u8 taskId)
{
u8 i;
- for (i = 0; i < 4; i++)
+ for (i = 0; i < CONTESTANT_COUNT; i++)
gBlockRecvBuffer[i][0] = 0xFF;
- gTasks[taskId].data[0] = 0;
- gTasks[taskId].func = sub_80FC5C0;
+ gTasks[taskId].tState = 0;
+ gTasks[taskId].func = Task_LinkContest_StartInitFlags;
}
-static void sub_80FC5C0(u8 taskId)
+static void Task_LinkContest_StartInitFlags(u8 taskId)
{
- gTasks[taskId].func = sub_80FC5DC;
+ gTasks[taskId].func = Task_LinkContest_InitFlags;
}
-static void sub_80FC5DC(u8 taskId)
+static void Task_LinkContest_InitFlags(u8 taskId)
{
int i;
@@ -76,6 +84,7 @@ static void sub_80FC5DC(u8 taskId)
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++)
;
@@ -85,22 +94,23 @@ static void sub_80FC5DC(u8 taskId)
SwitchTaskToFollowupFunc(taskId);
}
-bool32 sub_80FC670(s16 *arg0)
+bool32 LinkContest_TryLinkStandby(s16 *state)
{
+ // Skip standby for RS cabled links
if (gLinkContestFlags & LINK_CONTEST_FLAG_HAS_RS_PLAYER)
return TRUE;
- switch (*arg0)
+ switch (*state)
{
case 0:
if (IsLinkTaskFinished())
{
- sub_800ADF8();
- (*arg0)++;
+ SetLinkStandbyCallback();
+ (*state)++;
}
return FALSE;
case 1:
- (*arg0)++;
+ (*state)++;
return FALSE;
default:
if (IsLinkTaskFinished() != TRUE)
@@ -110,438 +120,443 @@ bool32 sub_80FC670(s16 *arg0)
}
}
-void sub_80FC6BC(u8 taskId)
+void Task_LinkContest_CommunicateMonsRS(u8 taskId)
{
int i;
- if (!sub_80FC670(&gTasks[taskId].data[12]))
+ if (!LinkContest_TryLinkStandby(&gTasks[taskId].tStandbyState))
return;
- switch (gTasks[taskId].data[0])
+ switch (gTasks[taskId].tState)
{
case 0:
+ // Send players mon
if (GetMultiplayerId() == 0)
{
if (IsLinkTaskFinished())
{
memcpy(gBlockSendBuffer, &gContestMons[gContestPlayerMonIndex], sizeof(struct ContestPokemon));
- gTasks[taskId].data[0] = 10;
+ gTasks[taskId].tState = 10;
}
}
else
{
memcpy(gBlockSendBuffer, &gContestMons[gContestPlayerMonIndex], sizeof(struct ContestPokemon));
- gTasks[taskId].data[0] = 1;
+ gTasks[taskId].tState = 1;
}
break;
case 1:
- if (sub_80FC55C())
+ // Wait for other players data
+ if (LinkContest_GetBlockReceivedFromAllPlayers())
{
for (i = 0; i < gNumLinkContestPlayers; i++)
{
memcpy(&gContestMons[i], gBlockRecvBuffer[i], sizeof(struct ContestPokemon));
- sub_80DFA08(&gContestMons[i], gLinkPlayers[i].language);
+ StripPlayerAndMonNamesForLinkContest(&gContestMons[i], gLinkPlayers[i].language);
}
- gTasks[taskId].data[0]++;
+ gTasks[taskId].tState++;
}
break;
case 10:
- if (++gTasks[taskId].data[11] > 300)
+ // Only if leader. Request other players data
+ if (++gTasks[taskId].tTimer > 300)
{
- sub_800A4D8(2);
- gTasks[taskId].data[0] = 1;
+ SendBlockRequest(2);
+ gTasks[taskId].tState = 1;
}
break;
default:
- gTasks[taskId].data[0] = 0;
- gTasks[taskId].data[11] = 0;
- gTasks[taskId].data[12] = 0;
+ gTasks[taskId].tState = 0;
+ gTasks[taskId].tTimer = 0;
+ gTasks[taskId].tStandbyState = 0;
SwitchTaskToFollowupFunc(taskId);
break;
}
}
-void sub_80FC804(u8 taskId)
+void Task_LinkContest_CommunicateRngRS(u8 taskId)
{
- switch (gTasks[taskId].data[0])
+ switch (gTasks[taskId].tState)
{
case 0:
if (GetMultiplayerId() == 0)
{
- if (IsLinkTaskFinished() && sub_80FC4F4(&gRngValue, sizeof(gRngValue)) == TRUE)
- gTasks[taskId].data[0]++;
+ if (IsLinkTaskFinished() && LinkContest_SendBlock(&gRngValue, sizeof(gRngValue)) == TRUE)
+ gTasks[taskId].tState++;
}
else
{
- gTasks[taskId].data[0]++;
+ gTasks[taskId].tState++;
}
break;
case 1:
- if (sub_80FC530(0))
+ if (LinkContest_GetBlockReceived(0))
{
memcpy(&gRngValue, gBlockRecvBuffer[0], sizeof(gRngValue));
memcpy(&gContestRngValue, gBlockRecvBuffer[0], sizeof(gContestRngValue));
- gTasks[taskId].data[0]++;
+ gTasks[taskId].tState++;
}
break;
default:
- gTasks[taskId].data[0] = 0;
+ gTasks[taskId].tState = 0;
SwitchTaskToFollowupFunc(taskId);
break;
}
}
-void sub_80FC894(u8 taskId)
+void Task_LinkContest_CommunicateCategoryRS(u8 taskId)
{
int i;
- if (!sub_80FC670(&gTasks[taskId].data[12]))
+ if (!LinkContest_TryLinkStandby(&gTasks[taskId].tStandbyState))
return;
- switch (gTasks[taskId].data[0])
+ switch (gTasks[taskId].tState)
{
case 0:
- gBlockSendBuffer[0] = gTasks[taskId].data[9];
+ gBlockSendBuffer[0] = gTasks[taskId].tCategory;
if (GetMultiplayerId() == 0)
{
if (IsLinkTaskFinished())
- gTasks[taskId].data[0] = 10;
+ gTasks[taskId].tState = 10;
}
else
{
- gTasks[taskId].data[0]++;
+ gTasks[taskId].tState++;
}
break;
case 1:
- if (sub_80FC55C())
+ if (LinkContest_GetBlockReceivedFromAllPlayers())
{
for (i = 0; i < gNumLinkContestPlayers; i++)
- gTasks[taskId].data[i + 1] = gBlockRecvBuffer[i][0];
+ gTasks[taskId].tCategories(i) = gBlockRecvBuffer[i][0];
- gTasks[taskId].data[0]++;
+ gTasks[taskId].tState++;
}
break;
case 10:
- if (++gTasks[taskId].data[11] > 10)
+ if (++gTasks[taskId].tTimer > 10)
{
- sub_800A4D8(2);
- gTasks[taskId].data[0] = 1;
+ SendBlockRequest(2);
+ gTasks[taskId].tState = 1;
}
break;
default:
- gTasks[taskId].data[0] = 0;
- gTasks[taskId].data[11] = 0;
- gTasks[taskId].data[12] = 0;
+ gTasks[taskId].tState = 0;
+ gTasks[taskId].tTimer = 0;
+ gTasks[taskId].tStandbyState = 0;
SwitchTaskToFollowupFunc(taskId);
break;
}
}
-void sub_80FC998(u8 taskId)
+void Task_LinkContest_CommunicateMonIdxs(u8 taskId)
{
- switch (gTasks[taskId].data[0])
+ switch (gTasks[taskId].tState)
{
case 0:
if (IsLinkTaskFinished())
{
- if (sub_80FC4F4(&gContestPlayerMonIndex, sizeof(gContestPlayerMonIndex)) == TRUE)
- gTasks[taskId].data[0]++;
+ if (LinkContest_SendBlock(&gContestPlayerMonIndex, sizeof(gContestPlayerMonIndex)) == TRUE)
+ gTasks[taskId].tState++;
}
break;
case 1:
- if (sub_80FC55C())
- gTasks[taskId].data[0]++;
+ if (LinkContest_GetBlockReceivedFromAllPlayers())
+ gTasks[taskId].tState++;
break;
default:
- gTasks[taskId].data[0] = 0;
+ gTasks[taskId].tState = 0;
SwitchTaskToFollowupFunc(taskId);
break;
}
}
-void sub_80FC9F8(u8 taskId)
+void Task_LinkContest_CommunicateMoveSelections(u8 taskId)
{
int i;
- switch (gTasks[taskId].data[0])
+ switch (gTasks[taskId].tState)
{
case 0:
if (IsLinkTaskFinished())
{
- if (sub_80FC4F4(&eContestantStatus[gContestPlayerMonIndex].currMove, sizeof(eContestantStatus[gContestPlayerMonIndex].currMove)) == TRUE)
- gTasks[taskId].data[0]++;
+ // Send player's move selection
+ if (LinkContest_SendBlock(&eContestantStatus[gContestPlayerMonIndex].currMove, sizeof(eContestantStatus[gContestPlayerMonIndex].currMove)) == TRUE)
+ gTasks[taskId].tState++;
}
break;
case 1:
- if (sub_80FC55C())
+ if (LinkContest_GetBlockReceivedFromAllPlayers())
{
+ // Receive partners' move selections
for (i = 0; i < gNumLinkContestPlayers; i++)
eContestantStatus[i].currMove = gBlockRecvBuffer[i][0];
- gTasks[taskId].data[0]++;
+ gTasks[taskId].tState++;
}
break;
default:
- gTasks[taskId].data[0] = 0;
+ gTasks[taskId].tState = 0;
SwitchTaskToFollowupFunc(taskId);
break;
}
}
-void sub_80FCACC(u8 taskId)
+void Task_LinkContest_CommunicateFinalStandings(u8 taskId)
{
- switch (gTasks[taskId].data[0])
+ switch (gTasks[taskId].tState)
{
case 0:
if (IsLinkTaskFinished())
{
- if (sub_80FC4F4(gContestMonTotalPoints, sizeof(gContestMonTotalPoints)) == 1)
- gTasks[taskId].data[0]++;
+ if (LinkContest_SendBlock(gContestMonTotalPoints, sizeof(gContestMonTotalPoints)) == 1)
+ gTasks[taskId].tState++;
}
break;
case 1:
- if (sub_80FC55C())
+ if (LinkContest_GetBlockReceivedFromAllPlayers())
{
- memcpy(gContestMonTotalPoints, gBlockRecvBuffer[gUnknown_02039F2B], sizeof(gContestMonTotalPoints));
- gTasks[taskId].data[0]++;
+ memcpy(gContestMonTotalPoints, gBlockRecvBuffer[gContestLinkLeaderIndex], sizeof(gContestMonTotalPoints));
+ gTasks[taskId].tState++;
}
break;
case 2:
case 5:
case 8:
case 11:
- if (gTasks[taskId].data[1]++ > 10)
+ if (gTasks[taskId].tDelayTimer++ > 10)
{
- gTasks[taskId].data[1] = 0;
- gTasks[taskId].data[0]++;
+ gTasks[taskId].tDelayTimer = 0;
+ gTasks[taskId].tState++;
}
break;
case 3:
if (IsLinkTaskFinished())
{
- if (sub_80FC4F4(gUnknown_02039F10, sizeof(gUnknown_02039F10)) == 1)
- gTasks[taskId].data[0]++;
+ if (LinkContest_SendBlock(gContestMonAppealPointTotals, sizeof(gContestMonAppealPointTotals)) == 1)
+ gTasks[taskId].tState++;
}
break;
case 4:
- if (sub_80FC55C())
+ if (LinkContest_GetBlockReceivedFromAllPlayers())
{
- memcpy(gUnknown_02039F10, gBlockRecvBuffer[gUnknown_02039F2B], sizeof(gUnknown_02039F10));
- gTasks[taskId].data[0]++;
+ memcpy(gContestMonAppealPointTotals, gBlockRecvBuffer[gContestLinkLeaderIndex], sizeof(gContestMonAppealPointTotals));
+ gTasks[taskId].tState++;
}
break;
case 6:
if (IsLinkTaskFinished())
{
- if (sub_80FC4F4(gContestMonRound2Points, sizeof(gContestMonRound2Points)) == 1)
- gTasks[taskId].data[0]++;
+ if (LinkContest_SendBlock(gContestMonRound2Points, sizeof(gContestMonRound2Points)) == 1)
+ gTasks[taskId].tState++;
}
break;
case 7:
- if (sub_80FC55C())
+ if (LinkContest_GetBlockReceivedFromAllPlayers())
{
- memcpy(gContestMonRound2Points, gBlockRecvBuffer[gUnknown_02039F2B], sizeof(gContestMonRound2Points));
- gTasks[taskId].data[0]++;
+ memcpy(gContestMonRound2Points, gBlockRecvBuffer[gContestLinkLeaderIndex], sizeof(gContestMonRound2Points));
+ gTasks[taskId].tState++;
}
break;
case 9:
if (IsLinkTaskFinished())
{
- if (sub_80FC4F4(gContestFinalStandings, sizeof(gContestFinalStandings)) == 1)
- gTasks[taskId].data[0]++;
+ if (LinkContest_SendBlock(gContestFinalStandings, sizeof(gContestFinalStandings)) == 1)
+ gTasks[taskId].tState++;
}
break;
case 10:
- if (sub_80FC55C())
+ if (LinkContest_GetBlockReceivedFromAllPlayers())
{
- memcpy(gContestFinalStandings, gBlockRecvBuffer[gUnknown_02039F2B], sizeof(gContestFinalStandings));
- gTasks[taskId].data[0]++;
+ memcpy(gContestFinalStandings, gBlockRecvBuffer[gContestLinkLeaderIndex], sizeof(gContestFinalStandings));
+ gTasks[taskId].tState++;
}
break;
default:
- gTasks[taskId].data[0] = 0;
+ gTasks[taskId].tState = 0;
SwitchTaskToFollowupFunc(taskId);
break;
}
}
-void sub_80FCC88(u8 taskId)
+void Task_LinkContest_CommunicateAppealsState(u8 taskId)
{
- switch (gTasks[taskId].data[0])
+ switch (gTasks[taskId].tState)
{
case 0:
if (IsLinkTaskFinished())
{
- if (sub_80FC4F4(eContestantStatus, 4 * sizeof(struct ContestantStatus)) == 1)
- gTasks[taskId].data[0]++;
+ if (LinkContest_SendBlock(eContestantStatus, CONTESTANT_COUNT * sizeof(struct ContestantStatus)) == 1)
+ gTasks[taskId].tState++;
}
break;
case 1:
- if (sub_80FC55C())
+ if (LinkContest_GetBlockReceivedFromAllPlayers())
{
- memcpy(eContestantStatus, gBlockRecvBuffer[gUnknown_02039F2B], 4 * sizeof(struct ContestantStatus));
- gTasks[taskId].data[0]++;
+ memcpy(eContestantStatus, gBlockRecvBuffer[gContestLinkLeaderIndex], CONTESTANT_COUNT * sizeof(struct ContestantStatus));
+ gTasks[taskId].tState++;
}
break;
case 2:
case 5:
case 8:
case 11:
- if (gTasks[taskId].data[1]++ > 10)
+ if (gTasks[taskId].tDelayTimer++ > 10)
{
- gTasks[taskId].data[1] = 0;
- gTasks[taskId].data[0]++;
+ gTasks[taskId].tDelayTimer = 0;
+ gTasks[taskId].tState++;
}
break;
case 3:
if (IsLinkTaskFinished())
{
- if (sub_80FC4F4(gContestResources->field_8, sizeof(struct UnknownContestStruct7)) == 1)
- gTasks[taskId].data[0]++;
+ if (LinkContest_SendBlock(gContestResources->appealResults, sizeof(struct ContestAppealMoveResults)) == 1)
+ gTasks[taskId].tState++;
}
break;
case 4:
- if (sub_80FC55C())
+ if (LinkContest_GetBlockReceivedFromAllPlayers())
{
- memcpy(gContestResources->field_8, gBlockRecvBuffer[gUnknown_02039F2B], sizeof(struct UnknownContestStruct7));
- gTasks[taskId].data[0]++;
+ memcpy(gContestResources->appealResults, gBlockRecvBuffer[gContestLinkLeaderIndex], sizeof(struct ContestAppealMoveResults));
+ gTasks[taskId].tState++;
}
break;
case 6:
if (IsLinkTaskFinished())
{
- if (sub_80FC4F4(gContestResources->field_10, sizeof(struct UnknownContestStruct5)) == 1)
- gTasks[taskId].data[0]++;
+ if (LinkContest_SendBlock(gContestResources->excitement, sizeof(struct ContestExcitement)) == 1)
+ gTasks[taskId].tState++;
}
break;
case 7:
- if (sub_80FC55C())
+ if (LinkContest_GetBlockReceivedFromAllPlayers())
{
- memcpy(gContestResources->field_10, gBlockRecvBuffer[gUnknown_02039F2B], sizeof(struct UnknownContestStruct5));
- gTasks[taskId].data[0]++;
+ memcpy(gContestResources->excitement, gBlockRecvBuffer[gContestLinkLeaderIndex], sizeof(struct ContestExcitement));
+ gTasks[taskId].tState++;
}
break;
case 9:
if (IsLinkTaskFinished())
{
- if (sub_80FC4F4(gContestantTurnOrder, sizeof(gContestantTurnOrder)) == 1)
- gTasks[taskId].data[0]++;
+ if (LinkContest_SendBlock(gContestantTurnOrder, sizeof(gContestantTurnOrder)) == 1)
+ gTasks[taskId].tState++;
}
break;
case 10:
- if (sub_80FC55C())
+ if (LinkContest_GetBlockReceivedFromAllPlayers())
{
- memcpy(gContestantTurnOrder, gBlockRecvBuffer[gUnknown_02039F2B], sizeof(gContestantTurnOrder));
- gTasks[taskId].data[0]++;
+ memcpy(gContestantTurnOrder, gBlockRecvBuffer[gContestLinkLeaderIndex], sizeof(gContestantTurnOrder));
+ gTasks[taskId].tState++;
}
break;
default:
- gTasks[taskId].data[0] = 0;
+ gTasks[taskId].tState = 0;
SwitchTaskToFollowupFunc(taskId);
break;
}
}
-void sub_80FCE48(u8 taskId)
+void Task_LinkContest_CommunicateLeaderIdsRS(u8 taskId)
{
int i;
- if (!sub_80FC670(&gTasks[taskId].data[12]))
+ if (!LinkContest_TryLinkStandby(&gTasks[taskId].tStandbyState))
return;
- switch (gTasks[taskId].data[0])
+ switch (gTasks[taskId].tState)
{
case 0:
gBlockSendBuffer[0] = 0x6E;
if (GetMultiplayerId() == 0)
{
if (IsLinkTaskFinished())
- gTasks[taskId].data[0] = 10;
+ gTasks[taskId].tState = 10;
}
else
{
- gTasks[taskId].data[0]++;
+ gTasks[taskId].tState++;
}
break;
case 1:
- if (sub_80FC55C())
+ if (LinkContest_GetBlockReceivedFromAllPlayers())
{
- for (i = 0; i < 4; i++)
- gTasks[taskId].data[i + 5] = gBlockRecvBuffer[i][0];
+ for (i = 0; i < CONTESTANT_COUNT; i++)
+ gTasks[taskId].tLeaderIds(i) = gBlockRecvBuffer[i][0];
- gTasks[taskId].data[0]++;
+ gTasks[taskId].tState++;
}
break;
case 10:
- if (++gTasks[taskId].data[11] > 10)
+ if (++gTasks[taskId].tTimer > 10)
{
- sub_800A4D8(2);
- gTasks[taskId].data[0] = 1;
+ SendBlockRequest(2);
+ gTasks[taskId].tState = 1;
}
break;
default:
- gTasks[taskId].data[0] = 0;
- gTasks[taskId].data[11] = 0;
- gTasks[taskId].data[12] = 0;
+ gTasks[taskId].tState = 0;
+ gTasks[taskId].tTimer = 0;
+ gTasks[taskId].tStandbyState = 0;
SwitchTaskToFollowupFunc(taskId);
break;
}
}
-void sub_80FCF40(u8 taskId)
+void Task_LinkContest_CommunicateRound1Points(u8 taskId)
{
- if (!sub_80FC670(&gTasks[taskId].data[12]))
+ if (!LinkContest_TryLinkStandby(&gTasks[taskId].tStandbyState))
return;
- switch (gTasks[taskId].data[0])
+ switch (gTasks[taskId].tState)
{
case 0:
if (IsLinkTaskFinished())
{
- if (sub_80FC4F4(gContestMonConditions, sizeof(gContestMonConditions)) == 1)
- gTasks[taskId].data[0]++;
+ if (LinkContest_SendBlock(gContestMonRound1Points, sizeof(gContestMonRound1Points)) == 1)
+ gTasks[taskId].tState++;
}
break;
case 1:
- if (sub_80FC55C())
+ if (LinkContest_GetBlockReceivedFromAllPlayers())
{
- memcpy(gContestMonConditions, gBlockRecvBuffer[gUnknown_02039F2B], sizeof(gContestMonConditions));
- gTasks[taskId].data[0]++;
+ memcpy(gContestMonRound1Points, gBlockRecvBuffer[gContestLinkLeaderIndex], sizeof(gContestMonRound1Points));
+ gTasks[taskId].tState++;
}
break;
default:
- gTasks[taskId].data[0] = 0;
- gTasks[taskId].data[12] = 0;
+ gTasks[taskId].tState = 0;
+ gTasks[taskId].tStandbyState = 0;
SwitchTaskToFollowupFunc(taskId);
break;
}
}
-void sub_80FCFD0(u8 taskId)
+void Task_LinkContest_CommunicateTurnOrder(u8 taskId)
{
- if (!sub_80FC670(&gTasks[taskId].data[12]))
+ if (!LinkContest_TryLinkStandby(&gTasks[taskId].tStandbyState))
return;
- switch (gTasks[taskId].data[0])
+ switch (gTasks[taskId].tState)
{
case 0:
if (IsLinkTaskFinished())
{
- if (sub_80FC4F4(gContestantTurnOrder, sizeof(gContestantTurnOrder)) == 1)
- gTasks[taskId].data[0]++;
+ if (LinkContest_SendBlock(gContestantTurnOrder, sizeof(gContestantTurnOrder)) == 1)
+ gTasks[taskId].tState++;
}
break;
case 1:
- if (sub_80FC55C())
+ if (LinkContest_GetBlockReceivedFromAllPlayers())
{
- memcpy(gContestantTurnOrder, gBlockRecvBuffer[gUnknown_02039F2B], sizeof(gContestantTurnOrder));
- gTasks[taskId].data[0]++;
+ memcpy(gContestantTurnOrder, gBlockRecvBuffer[gContestLinkLeaderIndex], sizeof(gContestantTurnOrder));
+ gTasks[taskId].tState++;
}
break;
default:
- gTasks[taskId].data[0] = 0;
- gTasks[taskId].data[12] = 0;
+ gTasks[taskId].tState = 0;
+ gTasks[taskId].tStandbyState = 0;
SwitchTaskToFollowupFunc(taskId);
break;
}
diff --git a/src/contest_link_util.c b/src/contest_link_util.c
index 8060b6cdc..31ffb5fdb 100644
--- a/src/contest_link_util.c
+++ b/src/contest_link_util.c
@@ -1,148 +1,158 @@
#include "global.h"
#include "contest.h"
+#include "contest_link.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)
+/*
+ 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].data[9])
+ switch (gTasks[taskId].tCategory)
{
- case 0:
+ case CONTEST_CATEGORY_COOL:
gHighestRibbonRank = GetMonData(&gPlayerParty[gContestMonPartyIndex], MON_DATA_COOL_RIBBON);
break;
- case 1:
+ case CONTEST_CATEGORY_BEAUTY:
gHighestRibbonRank = GetMonData(&gPlayerParty[gContestMonPartyIndex], MON_DATA_BEAUTY_RIBBON);
break;
- case 2:
+ case CONTEST_CATEGORY_CUTE:
gHighestRibbonRank = GetMonData(&gPlayerParty[gContestMonPartyIndex], MON_DATA_CUTE_RIBBON);
break;
- case 3:
+ case CONTEST_CATEGORY_SMART:
gHighestRibbonRank = GetMonData(&gPlayerParty[gContestMonPartyIndex], MON_DATA_SMART_RIBBON);
break;
- case 4:
+ case CONTEST_CATEGORY_TOUGH:
default:
gHighestRibbonRank = GetMonData(&gPlayerParty[gContestMonPartyIndex], MON_DATA_TOUGH_RIBBON);
break;
}
- gContestMons[gContestPlayerMonIndex].unk2C[0] = gHighestRibbonRank;
+ gContestMons[gContestPlayerMonIndex].highestRank = gHighestRibbonRank;
gameCleared = FlagGet(FLAG_SYS_GAME_CLEAR) > 0;
- gContestMons[gContestPlayerMonIndex].unk2C[1] = gameCleared;
- SetTaskFuncWithFollowupFunc(taskId, sub_81DA160, sub_81D9F14);
+ gContestMons[gContestPlayerMonIndex].gameCleared = gameCleared;
+ SetTaskFuncWithFollowupFunc(taskId, Task_LinkContest_CommunicateMonsEm, Task_LinkContest_StartCommunicateRngEm);
}
-static void sub_81D9F14(u8 taskId)
+static void Task_LinkContest_StartCommunicateRngEm(u8 taskId)
{
- SetTaskFuncWithFollowupFunc(taskId, sub_81DA244, sub_81D9F30);
+ SetTaskFuncWithFollowupFunc(taskId, Task_LinkContest_CommunicateRngEm, Task_LinkContest_StartCommunicateLeaderIdsEm);
}
-static void sub_81D9F30(u8 taskId)
+static void Task_LinkContest_StartCommunicateLeaderIdsEm(u8 taskId)
{
- SetTaskFuncWithFollowupFunc(taskId, sub_81DA2E8, sub_81D9F4C);
+ SetTaskFuncWithFollowupFunc(taskId, Task_LinkContest_CommunicateLeaderIdsEm, Task_LinkContest_StartCommunicateCategoryEm);
}
-static void sub_81D9F4C(u8 taskId)
+static void Task_LinkContest_StartCommunicateCategoryEm(u8 taskId)
{
- SetTaskFuncWithFollowupFunc(taskId, sub_81DA3B8, sub_81D9F68);
+ SetTaskFuncWithFollowupFunc(taskId, Task_LinkContest_CommunicateCategoryEm, Task_LinkContest_SetUpContestEm);
}
-static void sub_81D9F68(u8 taskId)
+static void Task_LinkContest_SetUpContestEm(u8 taskId)
{
u8 i;
u8 rank;
int gameCleared;
- u8 data1[4];
- u8 data2[4];
+ u8 categories[CONTESTANT_COUNT];
+ u8 leaderIds[CONTESTANT_COUNT];
- memset(data1, 0, sizeof(data1));
- memset(data2, 0, sizeof(data2));
+ memset(categories, 0, sizeof(categories));
+ memset(leaderIds, 0, sizeof(leaderIds));
for (i = 0; i < gNumLinkContestPlayers; i++)
- data1[i] = gTasks[taskId].data[i + 1];
+ categories[i] = gTasks[taskId].data[i + 1];
- i = 0;
- if (i < gNumLinkContestPlayers)
- {
- while (++i < gNumLinkContestPlayers)
- {
- if (data1[0] != data1[i])
- break;
- }
- }
+ // Ensure all players are doing the same category
+ for (i = 0; i < gNumLinkContestPlayers && categories[0] == categories[i]; i++)
+ ;
if (i == gNumLinkContestPlayers)
- gSpecialVar_0x8004 = 0;
+ gSpecialVar_0x8004 = FALSE; // Category choices the same
else
- gSpecialVar_0x8004 = 1;
+ gSpecialVar_0x8004 = TRUE; // Category choices differ
for (i = 0; i < gNumLinkContestPlayers; i++)
- data2[i] = gTasks[taskId].data[i + 5];
+ leaderIds[i] = gTasks[taskId].data[i + 5];
- if (gNumLinkContestPlayers != 4 && GetMultiplayerId() == 0)
+ // 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].unk2C[0];
+ rank = gContestMons[0].highestRank;
for (i = 1; i < gNumLinkContestPlayers; i++)
{
- if (rank < gContestMons[i].unk2C[0])
- rank = gContestMons[i].unk2C[0];
+ if (rank < gContestMons[i].highestRank)
+ rank = gContestMons[i].highestRank;
}
if (rank)
rank--;
- gameCleared = 1;
+ gameCleared = TRUE;
for (i = 0; i < gNumLinkContestPlayers; i++)
{
- if (!gContestMons[i].unk2C[1])
+ if (!gContestMons[i].gameCleared)
{
- gameCleared = 0;
+ gameCleared = FALSE;
break;
}
}
- sub_80DACBC(data1[0], rank, gameCleared);
+ SetLinkAIContestants(categories[0], rank, gameCleared);
}
- gUnknown_02039F2B = sub_80F86E0(data2);
- if (gNumLinkContestPlayers < 4)
- SetTaskFuncWithFollowupFunc(taskId, sub_81DA488, sub_81DA10C);
+ // 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 = sub_81DA10C;
+ gTasks[taskId].func = Task_LinkContest_CalculateRound1Em;
}
-static void sub_81DA10C(u8 taskId)
+static void Task_LinkContest_CalculateRound1Em(u8 taskId)
{
- sub_80DB09C(gSpecialVar_ContestCategory);
- SetTaskFuncWithFollowupFunc(taskId, sub_80FCF40, sub_81DA138);
+ CalculateRound1Points(gSpecialVar_ContestCategory);
+ SetTaskFuncWithFollowupFunc(taskId, Task_LinkContest_CommunicateRound1Points, Task_LinkContest_CalculateTurnOrderEm);
}
-static void sub_81DA138(u8 taskId)
+static void Task_LinkContest_CalculateTurnOrderEm(u8 taskId)
{
SortContestants(FALSE);
- SetTaskFuncWithFollowupFunc(taskId, sub_80FCFD0, sub_80F8714);
+ SetTaskFuncWithFollowupFunc(taskId, Task_LinkContest_CommunicateTurnOrder, Task_LinkContest_FinalizeConnection);
}
-static void sub_81DA160(u8 taskId)
+static void Task_LinkContest_CommunicateMonsEm(u8 taskId)
{
int i;
- if (!sub_80FC670(&gTasks[taskId].data[12]))
+ if (!LinkContest_TryLinkStandby(&gTasks[taskId].data[12]))
return;
switch (gTasks[taskId].data[0])
@@ -155,17 +165,17 @@ static void sub_81DA160(u8 taskId)
case 0:
if (IsLinkTaskFinished())
{
- if (sub_80FC4F4(&gContestMons[gContestPlayerMonIndex], sizeof(struct ContestPokemon)) == 1)
+ if (LinkContest_SendBlock(&gContestMons[gContestPlayerMonIndex], sizeof(struct ContestPokemon)) == 1)
gTasks[taskId].data[0]++;
}
break;
case 1:
- if (sub_80FC55C())
+ if (LinkContest_GetBlockReceivedFromAllPlayers())
{
for (i = 0; i < gNumLinkContestPlayers; i++)
{
memcpy(&gContestMons[i], gBlockRecvBuffer[i], sizeof(struct ContestPokemon));
- sub_80DFA08(&gContestMons[i], gLinkPlayers[i].language);
+ StripPlayerAndMonNamesForLinkContest(&gContestMons[i], gLinkPlayers[i].language);
}
gTasks[taskId].data[0]++;
@@ -174,9 +184,9 @@ static void sub_81DA160(u8 taskId)
}
}
-static void sub_81DA244(u8 taskId)
+static void Task_LinkContest_CommunicateRngEm(u8 taskId)
{
- if (!sub_80FC670(&gTasks[taskId].data[12]))
+ if (!LinkContest_TryLinkStandby(&gTasks[taskId].data[12]))
return;
switch (gTasks[taskId].data[0])
@@ -189,19 +199,22 @@ static void sub_81DA244(u8 taskId)
case 0:
if (GetMultiplayerId() == 0)
{
+ // Only the leader sends the RNG seed
if (!IsLinkTaskFinished())
return;
- if (sub_80FC4F4(&gRngValue, sizeof(gRngValue)) == 1)
+ 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:
- if (sub_80FC530(0))
+ // Wait to receive RNG data
+ if (LinkContest_GetBlockReceived(0))
{
memcpy(&gRngValue, gBlockRecvBuffer[0], sizeof(gRngValue));
memcpy(&gContestRngValue, gBlockRecvBuffer[0], sizeof(gContestRngValue));
@@ -211,13 +224,13 @@ static void sub_81DA244(u8 taskId)
}
}
-static void sub_81DA2E8(u8 taskId)
+static void Task_LinkContest_CommunicateLeaderIdsEm(u8 taskId)
{
int i;
- u16 data[4];
- u16 var0;
+ u16 data[CONTESTANT_COUNT];
+ u16 leaderId;
- if (!sub_80FC670(&gTasks[taskId].data[12]))
+ if (!LinkContest_TryLinkStandby(&gTasks[taskId].data[12]))
return;
switch (gTasks[taskId].data[0])
@@ -230,13 +243,13 @@ static void sub_81DA2E8(u8 taskId)
case 0:
if (IsLinkTaskFinished())
{
- var0 = 0x6E;
- if (sub_80FC4F4(&var0, sizeof(var0)) == 1)
+ leaderId = 0x6E;
+ if (LinkContest_SendBlock(&leaderId, sizeof(leaderId)) == 1)
gTasks[taskId].data[0]++;
}
break;
case 1:
- if (sub_80FC55C())
+ if (LinkContest_GetBlockReceivedFromAllPlayers())
{
for (i = 0; i < gNumLinkContestPlayers; i++)
{
@@ -250,13 +263,13 @@ static void sub_81DA2E8(u8 taskId)
}
}
-static void sub_81DA3B8(u8 taskId)
+static void Task_LinkContest_CommunicateCategoryEm(u8 taskId)
{
int i;
- u16 data[4];
- u16 var0;
+ u16 data[CONTESTANT_COUNT];
+ u16 category;
- if (!sub_80FC670(&gTasks[taskId].data[12]))
+ if (!LinkContest_TryLinkStandby(&gTasks[taskId].data[12]))
return;
switch (gTasks[taskId].data[0])
@@ -269,13 +282,13 @@ static void sub_81DA3B8(u8 taskId)
case 0:
if (IsLinkTaskFinished())
{
- var0 = gTasks[taskId].data[9];
- if (sub_80FC4F4(&var0, sizeof(var0)) == 1)
+ category = gTasks[taskId].tCategory;
+ if (LinkContest_SendBlock(&category, sizeof(category)) == 1)
gTasks[taskId].data[0]++;
}
break;
case 1:
- if (sub_80FC55C())
+ if (LinkContest_GetBlockReceivedFromAllPlayers())
{
for (i = 0; i < gNumLinkContestPlayers; i++)
{
@@ -289,11 +302,11 @@ static void sub_81DA3B8(u8 taskId)
}
}
-static void sub_81DA488(u8 taskId)
+static void Task_LinkContest_CommunicateAIMonsEm(u8 taskId)
{
int i;
- if (!sub_80FC670(&gTasks[taskId].data[12]))
+ if (!LinkContest_TryLinkStandby(&gTasks[taskId].data[12]))
return;
switch (gTasks[taskId].data[0])
@@ -309,7 +322,7 @@ static void sub_81DA488(u8 taskId)
if (!IsLinkTaskFinished())
return;
- if (sub_80FC4F4(&gContestMons[gNumLinkContestPlayers], (4 - gNumLinkContestPlayers) * sizeof(struct ContestPokemon)) == 1)
+ if (LinkContest_SendBlock(&gContestMons[gNumLinkContestPlayers], (CONTESTANT_COUNT - gNumLinkContestPlayers) * sizeof(struct ContestPokemon)) == 1)
gTasks[taskId].data[0]++;
}
else
@@ -318,11 +331,11 @@ static void sub_81DA488(u8 taskId)
}
break;
case 1:
- if (sub_80FC530(0))
+ if (LinkContest_GetBlockReceived(0))
{
- memcpy(&gContestMons[gNumLinkContestPlayers], gBlockRecvBuffer[0], (4 - gNumLinkContestPlayers) * sizeof(struct ContestPokemon));
- for (i = gNumLinkContestPlayers; i < 4; i++)
- sub_80DFA08(&gContestMons[i], gLinkPlayers[0].language);
+ 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]++;
}
diff --git a/src/contest_painting.c b/src/contest_painting.c
index 5dd4a70a5..a0c39dfc7 100644
--- a/src/contest_painting.c
+++ b/src/contest_painting.c
@@ -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,125 +397,21 @@ 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
#define VRAM_PICTURE_DATA(x, y) (((u16 *)(BG_SCREEN_ADDR(12)))[(y) * 32 + (x)])
diff --git a/src/contest_util.c b/src/contest_util.c
index e82560a6e..c60e885f2 100644
--- a/src/contest_util.c
+++ b/src/contest_util.c
@@ -6,10 +6,12 @@
#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"
@@ -27,6 +29,7 @@
#include "save.h"
#include "scanline_effect.h"
#include "script.h"
+#include "script_menu.h"
#include "sound.h"
#include "string_util.h"
#include "strings.h"
@@ -36,6 +39,7 @@
#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"
@@ -117,8 +121,8 @@ static void CB2_ShowContestResults(void);
static void VBlankCB_ShowContestResults(void);
static void Task_SlideContestResultsBg(u8);
static void Task_WaitForLinkPartnersBeforeResults(u8);
-static void sub_80F5F14(u8);
-static void sub_80F5F30(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);
@@ -150,15 +154,22 @@ 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 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 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");
@@ -522,7 +533,7 @@ static void CB2_StartShowContestResults(void)
if (gLinkContestFlags & LINK_CONTEST_FLAG_IS_WIRELESS)
gPaletteFade.bufferTransferDisabled = TRUE;
else
- PlayBGM(MUS_CON_K);
+ PlayBGM(MUS_CONTEST_RESULTS);
SetVBlankCallback(VBlankCB_ShowContestResults);
}
@@ -601,14 +612,14 @@ static void Task_ShowContestResults(u8 taskId)
case 2:
if (IsLinkTaskFinished())
{
- sub_800ADF8();
+ SetLinkStandbyCallback();
gTasks[taskId].tState++;
}
return;
case 3:
if (IsLinkTaskFinished() == TRUE)
{
- PlayBGM(MUS_CON_K);
+ PlayBGM(MUS_CONTEST_RESULTS);
gPaletteFade.bufferTransferDisabled = FALSE;
gTasks[taskId].tState++;
break;
@@ -645,17 +656,17 @@ static void Task_WaitForLinkPartnersBeforeResults(u8 taskId)
{
if (gReceivedRemoteLinkPlayers)
{
- CreateTask(sub_80F5F14, 0);
+ CreateTask(Task_CommunicateMonIdxsForResults, 0);
gTasks[taskId].func = TaskDummy;
}
}
-static void sub_80F5F14(u8 taskId)
+static void Task_CommunicateMonIdxsForResults(u8 taskId)
{
- SetTaskFuncWithFollowupFunc(taskId, sub_80FC998, sub_80F5F30);
+ SetTaskFuncWithFollowupFunc(taskId, Task_LinkContest_CommunicateMonIdxs, Task_WaitForLinkPartnerMonIdxs);
}
-static void sub_80F5F30(u8 taskId)
+static void Task_WaitForLinkPartnerMonIdxs(u8 taskId)
{
if (IsLinkTaskFinished())
{
@@ -974,7 +985,7 @@ static void Task_TryDisconnectLinkPartners(u8 taskId)
if (!gTasks[taskId].data[10])
{
ShowLinkResultsTextBox(gText_CommunicationStandby);
- sub_800AC34();
+ SetCloseLinkCallback();
gTasks[taskId].func = Task_WaitForLinkPartnersDisconnect;
}
}
@@ -1717,7 +1728,7 @@ static void LoadContestResultsTilemaps(void)
// Represented on results board as stars
static u8 GetNumPreliminaryPoints(u8 monIndex, bool8 capPoints)
{
- u32 condition = gContestMonConditions[monIndex] << 16;
+ u32 condition = gContestMonRound1Points[monIndex] << 16;
u32 numStars = condition / 0x3F;
if (numStars & 0xFFFF)
@@ -1785,7 +1796,7 @@ static void Task_DrawFinalStandingNumber(u8 taskId)
WriteSequenceToBgTilemapBuffer(2, firstTileNum + 0x10, 1, gTasks[taskId].tMonIndex * 3 + 6, 2, 1, 17, 1);
sContestResults->data->numStandingsPrinted++;
DestroyTask(taskId);
- PlaySE(SE_JYUNI);
+ PlaySE(SE_CONTEST_PLACE);
}
}
}
@@ -1965,7 +1976,7 @@ static void CalculateContestantsResultData(void)
for (i = 0; i < CONTESTANT_COUNT; i++)
{
- relativePoints = (gContestMonConditions[i] * 1000) / abs(highestPoints);
+ relativePoints = (gContestMonRound1Points[i] * 1000) / abs(highestPoints);
if (relativePoints % 10 > 4)
relativePoints += 10;
(*sContestResults->monResults)[i].relativePreliminaryPoints = relativePoints / 10;
@@ -2205,8 +2216,8 @@ void TryEnterContestMon(void)
// 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);
+ SetContestants(gSpecialVar_ContestCategory, gSpecialVar_ContestRank);
+ CalculateRound1Points(gSpecialVar_ContestCategory);
}
gSpecialVar_Result = eligibility;
@@ -2323,7 +2334,7 @@ void GetContestMonConditionRanking(void)
for (i = 0, rank = 0; i < CONTESTANT_COUNT; i++)
{
- if (gContestMonConditions[gSpecialVar_0x8006] < gContestMonConditions[i])
+ if (gContestMonRound1Points[gSpecialVar_0x8006] < gContestMonRound1Points[i])
rank++;
}
@@ -2332,7 +2343,7 @@ void GetContestMonConditionRanking(void)
void GetContestMonCondition(void)
{
- gSpecialVar_0x8004 = gContestMonConditions[gSpecialVar_0x8006];
+ gSpecialVar_0x8004 = gContestMonRound1Points[gSpecialVar_0x8006];
}
void GetContestWinnerId(void)
@@ -2404,107 +2415,106 @@ void GetContestPlayerId(void)
gSpecialVar_0x8004 = gContestPlayerMonIndex;
}
-void ContestLinkTransfer(u8 taskId)
+void ContestLinkTransfer(u8 category)
{
u8 newTaskId;
ScriptContext2_Enable();
- newTaskId = CreateTask(sub_80FC580, 0);
- SetTaskFuncWithFollowupFunc(newTaskId, sub_80FC580, sub_80F8508);
- gTasks[newTaskId].data[9] = taskId;
+ newTaskId = CreateTask(Task_LinkContest_Init, 0);
+ SetTaskFuncWithFollowupFunc(newTaskId, Task_LinkContest_Init, Task_StartCommunication);
+ gTasks[newTaskId].data[9] = category;
}
-static void sub_80F8508(u8 taskId)
+static void Task_StartCommunication(u8 taskId)
{
if (gLinkContestFlags & LINK_CONTEST_FLAG_HAS_RS_PLAYER)
{
- sub_80DA8C8(gContestMonPartyIndex);
- SetTaskFuncWithFollowupFunc(taskId, sub_80FC6BC, sub_80F8568);
+ CreateContestMonFromParty(gContestMonPartyIndex);
+ SetTaskFuncWithFollowupFunc(taskId, Task_LinkContest_CommunicateMonsRS, Task_StartCommunicateRngRS);
}
else
{
- sub_80DA8C8(gContestMonPartyIndex);
- gTasks[taskId].func = sub_81D9DE4;
+ CreateContestMonFromParty(gContestMonPartyIndex);
+ gTasks[taskId].func = Task_LinkContest_StartCommunicationEm;
}
}
-static void sub_80F8568(u8 taskId)
+static void Task_StartCommunicateRngRS(u8 taskId)
{
- SetTaskFuncWithFollowupFunc(taskId, sub_80FC804, sub_80F8584);
+ SetTaskFuncWithFollowupFunc(taskId, Task_LinkContest_CommunicateRngRS, Task_StartCommunicateLeaderIdsRS);
}
-static void sub_80F8584(u8 taskId)
+static void Task_StartCommunicateLeaderIdsRS(u8 taskId)
{
- SetTaskFuncWithFollowupFunc(taskId, sub_80FCE48, sub_80F85A0);
+ SetTaskFuncWithFollowupFunc(taskId, Task_LinkContest_CommunicateLeaderIdsRS, Task_StartCommunicateCategoryRS);
}
-static void sub_80F85A0(u8 taskId)
+static void Task_StartCommunicateCategoryRS(u8 taskId)
{
- SetTaskFuncWithFollowupFunc(taskId, sub_80FC894, sub_80F85BC);
+ SetTaskFuncWithFollowupFunc(taskId, Task_LinkContest_CommunicateCategoryRS, Task_LinkContest_SetUpContestRS);
}
-static void sub_80F85BC(u8 taskId)
+static void Task_LinkContest_SetUpContestRS(u8 taskId)
{
u8 i;
- u8 sp0[4];
- u8 sp4[4];
+ u8 categories[CONTESTANT_COUNT];
+ u8 leaderIds[CONTESTANT_COUNT];
- memset(sp0, 0, sizeof(sp0));
- memset(sp4, 0, sizeof(sp4));
+ memset(categories, 0, sizeof(categories));
+ memset(leaderIds, 0, sizeof(leaderIds));
for (i = 0; i < gNumLinkContestPlayers; i++)
- sp0[i] = gTasks[taskId].data[i + 1];
+ categories[i] = gTasks[taskId].data[i + 1];
- for (i = 0; i < gNumLinkContestPlayers;)
- {
- i++;
- if (i >= gNumLinkContestPlayers || sp0[0] != sp0[i])
- break;
- }
+ // Ensure all players are doing the same category
+ for (i = 0; i < gNumLinkContestPlayers && categories[0] == categories[i]; i++)
+ ;
if (i == gNumLinkContestPlayers)
- gSpecialVar_0x8004 = 0;
+ gSpecialVar_0x8004 = FALSE; // Category choices the same
else
- gSpecialVar_0x8004 = 1;
+ gSpecialVar_0x8004 = TRUE; // Category choices differ
for (i = 0; i < gNumLinkContestPlayers; i++)
- sp4[i] = gTasks[taskId].data[i + 5];
+ leaderIds[i] = gTasks[taskId].data[i + 5];
- gUnknown_02039F2B = sub_80F86E0(sp4);
- sub_80DB09C(gSpecialVar_ContestCategory);
- SetTaskFuncWithFollowupFunc(taskId, sub_80FCF40, sub_80F86B8);
+ gContestLinkLeaderIndex = LinkContest_GetLeaderIndex(leaderIds);
+ CalculateRound1Points(gSpecialVar_ContestCategory);
+ SetTaskFuncWithFollowupFunc(taskId, Task_LinkContest_CommunicateRound1Points, Task_LinkContest_CalculateTurnOrderRS);
}
-static void sub_80F86B8(u8 taskId)
+static void Task_LinkContest_CalculateTurnOrderRS(u8 taskId)
{
SortContestants(FALSE);
- SetTaskFuncWithFollowupFunc(taskId, sub_80FCFD0, sub_80F8714);
+ SetTaskFuncWithFollowupFunc(taskId, Task_LinkContest_CommunicateTurnOrder, Task_LinkContest_FinalizeConnection);
}
-u8 sub_80F86E0(u8 *arg0)
+u8 LinkContest_GetLeaderIndex(u8 *ids)
{
int i;
- u8 result = 0;
+ u8 leaderIdx = 0;
for (i = 1; i < gNumLinkContestPlayers; i++)
{
- if (arg0[result] < arg0[i])
- result = i;
+ if (ids[leaderIdx] < ids[i])
+ leaderIdx = i;
}
- return result;
+ return leaderIdx;
}
-void sub_80F8714(u8 taskId)
+void Task_LinkContest_FinalizeConnection(u8 taskId)
{
int i;
- if (gSpecialVar_0x8004 == 1)
+ if (gSpecialVar_0x8004 == TRUE)
{
+ // Link partner data doesn't agree, disconnect
if (IsLinkTaskFinished())
- gTasks[taskId].func = sub_80F878C;
+ gTasks[taskId].func = Task_LinkContest_Disconnect;
}
else
{
+ // Succesfully connected
for (i = 0; i < CONTESTANT_COUNT; i++)
StringGetEnd10(gContestMons[i].nickname);
@@ -2515,13 +2525,13 @@ void sub_80F8714(u8 taskId)
}
}
-static void sub_80F878C(u8 taskId)
+static void Task_LinkContest_Disconnect(u8 taskId)
{
- sub_800AC34();
- gTasks[taskId].func = sub_80F87B4;
+ SetCloseLinkCallback();
+ gTasks[taskId].func = Task_LinkContest_WaitDisconnect;
}
-static void sub_80F87B4(u8 taskId)
+static void Task_LinkContest_WaitDisconnect(u8 taskId)
{
if (!gReceivedRemoteLinkPlayers)
{
@@ -2530,3 +2540,479 @@ static void sub_80F87B4(u8 taskId)
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 8fc8a1f88..020221f30 100644
--- a/src/credits.c
+++ b/src/credits.c
@@ -1239,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/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/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/union_room.h b/src/data/union_room.h
index 704978766..be7bfae71 100644
--- a/src/data/union_room.h
+++ b/src/data/union_room.h
@@ -222,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");
@@ -567,17 +567,17 @@ 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}");
+ALIGNED(4) const u8 sText_FinishedCheckingPlayersTrainerCard[] = _("Finished checking {DYNAMIC 1}'s\nTRAINER CARD.{PAUSE 60}");
static const u8 *const sLinkGroupActivityNameTexts[] = {
[ACTIVITY_NONE] = sText_EmptyString,
diff --git a/src/decoration.c b/src/decoration.c
index f566cc7c9..40cccbe5e 100644
--- a/src/decoration.c
+++ b/src/decoration.c
@@ -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/dodrio_berry_picking.c b/src/dodrio_berry_picking.c
index 3ca7a1cf7..f44ecb31c 100644
--- a/src/dodrio_berry_picking.c
+++ b/src/dodrio_berry_picking.c
@@ -467,7 +467,7 @@ void StartDodrioBerryPicking(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;
@@ -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
{
@@ -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:
@@ -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]);
@@ -4657,7 +4657,7 @@ static bool32 sub_802A8E8(void)
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 44a7b90c1..8e1044591 100644
--- a/src/easy_chat.c
+++ b/src/easy_chat.c
@@ -2023,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
@@ -2038,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
@@ -2537,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;
@@ -4529,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)
diff --git a/src/egg_hatch.c b/src/egg_hatch.c
index db25dbbb8..87f0a13fd 100644
--- a/src/egg_hatch.c
+++ b/src/egg_hatch.c
@@ -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;
diff --git a/src/ereader_screen.c b/src/ereader_screen.c
index 26f7eb679..b4a9164b3 100755
--- a/src/ereader_screen.c
+++ b/src/ereader_screen.c
@@ -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:
@@ -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_movement.c b/src/event_object_movement.c
index de5536240..72de880c8 100644
--- a/src/event_object_movement.c
+++ b/src/event_object_movement.c
@@ -130,6 +130,9 @@ static struct ObjectEventTemplate *FindObjectEventTemplateByLocalId(u8 localId,
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};
@@ -1122,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);
@@ -1220,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;
@@ -1233,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)
@@ -1949,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;
@@ -2340,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)
@@ -6868,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;
@@ -6888,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;
@@ -8098,26 +8104,26 @@ 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)
@@ -8210,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)
@@ -8391,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,
@@ -8407,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,
@@ -8419,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
};
@@ -8503,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]);
@@ -8540,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]);
@@ -8584,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)
@@ -8603,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)
@@ -8783,14 +8759,14 @@ static void UpdateObjectEventSpritePosition(struct Sprite *sprite)
{
switch(sprite->tAnimNum)
{
+ case 0:
+ break;
case UNION_ROOM_SPAWN_IN:
MoveUnionRoomObjectDown(sprite);
break;
case UNION_ROOM_SPAWN_OUT:
MoveUnionRoomObjectUp(sprite);
break;
- case 0:
- break;
default:
sprite->tAnimNum = 0;
break;
@@ -8871,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++)
{
@@ -8950,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;
}
@@ -8961,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))
@@ -8978,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 57d31057f..e3d8444c9 100755
--- a/src/faraway_island.c
+++ b/src/faraway_island.c
@@ -6,6 +6,7 @@
#include "metatile_behavior.h"
#include "sprite.h"
#include "constants/event_objects.h"
+#include "constants/field_effects.h"
#include "constants/maps.h"
#include "constants/metatile_behaviors.h"
@@ -23,7 +24,7 @@ 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] =
@@ -392,13 +393,13 @@ void SetMewAboveGrass(void)
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;
SetSpritePosToOffsetMapCoords(&x, &y, 8, 8);
- sGrassSpriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[15], x, y, gSprites[mew->spriteId].subpriority - 1);
+ sGrassSpriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[FLDEFFOBJ_LONG_GRASS], x, y, gSprites[mew->spriteId].subpriority - 1);
if (sGrassSpriteId != MAX_SPRITES)
{
struct Sprite *sprite = &gSprites[sGrassSpriteId];
diff --git a/src/field_camera.c b/src/field_camera.c
index 038b6932e..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)
@@ -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 e81c3dc4b..4dcb07cca 100644
--- a/src/field_door.c
+++ b/src/field_door.c
@@ -526,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 07579f55d..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;
SetSpritePosToOffsetMapCoords((s16 *)&gFieldEffectArguments[0], (s16 *)&gFieldEffectArguments[1], 8, 8);
- spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[33], gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2]);
+ 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;
SetSpritePosToOffsetMapCoords((s16 *)&gFieldEffectArguments[0], (s16 *)&gFieldEffectArguments[1], 8, 8);
- spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[32], gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2]);
+ 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 e02de959b..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;
@@ -275,7 +275,7 @@ u32 FldEff_TallGrass(void)
x = gFieldEffectArguments[0];
y = gFieldEffectArguments[1];
SetSpritePosToOffsetMapCoords(&x, &y, 8, 8);
- spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[4], x, y, 0);
+ spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[FLDEFFOBJ_TALL_GRASS], x, y, 0);
if (spriteId != MAX_SPRITES)
{
sprite = &gSprites[spriteId];
@@ -341,14 +341,14 @@ u32 FldEff_JumpTallGrass(void)
struct Sprite *sprite;
SetSpritePosToOffsetMapCoords((s16 *)&gFieldEffectArguments[0], (s16 *)&gFieldEffectArguments[1], 8, 12);
- spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[10], gFieldEffectArguments[0], gFieldEffectArguments[1], 0);
+ 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;
}
@@ -381,7 +381,7 @@ u32 FldEff_LongGrass(void)
x = gFieldEffectArguments[0];
y = gFieldEffectArguments[1];
SetSpritePosToOffsetMapCoords(&x, &y, 8, 8);
- spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[15], x, y, 0);
+ spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[FLDEFFOBJ_LONG_GRASS], x, y, 0);
if (spriteId != MAX_SPRITES)
{
sprite = &gSprites[spriteId];
@@ -444,14 +444,14 @@ u32 FldEff_JumpLongGrass(void)
struct Sprite *sprite;
SetSpritePosToOffsetMapCoords((s16 *)&gFieldEffectArguments[0], (s16 *)&gFieldEffectArguments[1], 8, 8);
- spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[16], gFieldEffectArguments[0], gFieldEffectArguments[1], 0);
+ 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]);
@@ -522,7 +522,7 @@ u32 FldEff_SandFootprints(void)
struct Sprite *sprite;
SetSpritePosToOffsetMapCoords((s16 *)&gFieldEffectArguments[0], (s16 *)&gFieldEffectArguments[1], 8, 8);
- spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[11], gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2]);
+ spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[FLDEFFOBJ_SAND_FOOTPRINTS], gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2]);
if (spriteId != MAX_SPRITES)
{
sprite = &gSprites[spriteId];
@@ -540,7 +540,7 @@ u32 FldEff_DeepSandFootprints(void)
struct Sprite *sprite;
SetSpritePosToOffsetMapCoords((s16 *)&gFieldEffectArguments[0], (s16 *)&gFieldEffectArguments[1], 8, 8);
- spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[23], gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2]);
+ spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[FLDEFFOBJ_DEEP_SAND_FOOTPRINTS], gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2]);
if (spriteId != MAX_SPRITES)
{
sprite = &gSprites[spriteId];
@@ -558,7 +558,7 @@ u32 FldEff_BikeTireTracks(void)
struct Sprite *sprite;
SetSpritePosToOffsetMapCoords((s16 *)&gFieldEffectArguments[0], (s16 *)&gFieldEffectArguments[1], 8, 8);
- spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[27], gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2]);
+ 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;
}
@@ -650,7 +650,7 @@ u32 FldEff_JumpSmallSplash(void)
struct Sprite *sprite;
SetSpritePosToOffsetMapCoords((s16 *)&gFieldEffectArguments[0], (s16 *)&gFieldEffectArguments[1], 8, 12);
- spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[14], gFieldEffectArguments[0], gFieldEffectArguments[1], 0);
+ spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[FLDEFFOBJ_JUMP_SMALL_SPLASH], gFieldEffectArguments[0], gFieldEffectArguments[1], 0);
if (spriteId != MAX_SPRITES)
{
sprite = &gSprites[spriteId];
@@ -668,7 +668,7 @@ u32 FldEff_JumpBigSplash(void)
struct Sprite *sprite;
SetSpritePosToOffsetMapCoords((s16 *)&gFieldEffectArguments[0], (s16 *)&gFieldEffectArguments[1], 8, 8);
- spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[12], gFieldEffectArguments[0], gFieldEffectArguments[1], 0);
+ 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;
SetSpritePosToOffsetMapCoords((s16 *)&gFieldEffectArguments[0], (s16 *)&gFieldEffectArguments[1], 8, 8);
- spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[17], gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2]);
+ 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;
SetSpritePosToOffsetMapCoords((s16 *)&gFieldEffectArguments[0], (s16 *)&gFieldEffectArguments[1], 8, 8);
- spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[18], gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2]);
+ 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;
SetSpritePosToOffsetMapCoords((s16 *)&gFieldEffectArguments[0], (s16 *)&gFieldEffectArguments[1], 8, 8);
- spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[19], gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2]);
+ 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;
SetSpritePosToOffsetMapCoords((s16 *)&gFieldEffectArguments[0], (s16 *)&gFieldEffectArguments[1], 8, 8);
- spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[20], gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2]);
+ 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;
}
@@ -889,7 +889,7 @@ u32 FldEff_Ash(void)
x = gFieldEffectArguments[0];
y = gFieldEffectArguments[1];
SetSpritePosToOffsetMapCoords(&x, &y, 8, 8);
- spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[6], x, y, gFieldEffectArguments[2]);
+ spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[FLDEFFOBJ_ASH], x, y, gFieldEffectArguments[2]);
if (spriteId != MAX_SPRITES)
{
sprite = &gSprites[spriteId];
@@ -945,7 +945,7 @@ u32 FldEff_SurfBlob(void)
struct Sprite *sprite;
SetSpritePosToOffsetMapCoords((s16 *)&gFieldEffectArguments[0], (s16 *)&gFieldEffectArguments[1], 8, 8);
- spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[7], gFieldEffectArguments[0], gFieldEffectArguments[1], 0x96);
+ 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;
@@ -1107,14 +1108,14 @@ u32 FldEff_Dust(void)
struct Sprite *sprite;
SetSpritePosToOffsetMapCoords((s16 *)&gFieldEffectArguments[0], (s16 *)&gFieldEffectArguments[1], 8, 12);
- spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[9], gFieldEffectArguments[0], gFieldEffectArguments[1], 0);
+ 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);
@@ -1183,7 +1184,7 @@ u32 FldEff_Bubbles(void)
struct Sprite *sprite;
SetSpritePosToOffsetMapCoords((s16 *)&gFieldEffectArguments[0], (s16 *)&gFieldEffectArguments[1], 8, 0);
- spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[34], gFieldEffectArguments[0], gFieldEffectArguments[1], 0x52);
+ spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[FLDEFFOBJ_BUBBLES], gFieldEffectArguments[0], gFieldEffectArguments[1], 0x52);
if (spriteId != MAX_SPRITES)
{
sprite = &gSprites[spriteId];
@@ -1211,7 +1212,7 @@ u32 FldEff_BerryTreeGrowthSparkle(void)
struct Sprite *sprite;
SetSpritePosToOffsetMapCoords((s16 *)&gFieldEffectArguments[0], (s16 *)&gFieldEffectArguments[1], 8, 4);
- spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[22], gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2]);
+ 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];
@@ -1331,7 +1332,7 @@ u32 FldEff_Sparkle(void)
gFieldEffectArguments[0] += 7;
gFieldEffectArguments[1] += 7;
SetSpritePosToOffsetMapCoords((s16 *)&gFieldEffectArguments[0], (s16 *)&gFieldEffectArguments[1], 8, 8);
- spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[35], gFieldEffectArguments[0], gFieldEffectArguments[1], 0x52);
+ 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_player_avatar.c b/src/field_player_avatar.c
index f5f6e99f7..5fab2489b 100644
--- a/src/field_player_avatar.c
+++ b/src/field_player_avatar.c
@@ -25,6 +25,7 @@
#include "constants/event_objects.h"
#include "constants/event_object_movement.h"
#include "constants/field_effects.h"
+#include "constants/items.h"
#include "constants/maps.h"
#include "constants/moves.h"
#include "constants/songs.h"
@@ -100,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);
@@ -120,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);
@@ -319,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];
@@ -378,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;
}
@@ -423,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;
}
@@ -440,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();
@@ -452,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;
}
@@ -469,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);
}
@@ -518,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);
}
@@ -566,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
{
@@ -868,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)
@@ -884,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())
@@ -1020,7 +1021,7 @@ void PlayerTurnInPlace(u8 direction)
void PlayerJumpLedge(u8 direction)
{
- PlaySE(SE_DANSA);
+ PlaySE(SE_LEDGE);
PlayerSetAnimId(GetJump2MovementAction(direction), 8);
}
@@ -1054,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);
}
@@ -1327,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;
}
@@ -1403,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));
@@ -1422,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));
@@ -1500,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;
@@ -1539,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)
@@ -1573,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;
}
@@ -1649,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;
}
@@ -1669,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]
@@ -1698,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
@@ -1705,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);
@@ -1719,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;
@@ -1727,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();
@@ -1755,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;
@@ -1773,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[] = _("·");
@@ -1809,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;
@@ -1830,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);
@@ -1867,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++;
@@ -1881,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();
@@ -1901,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));
@@ -1917,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();
@@ -1933,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);
@@ -1947,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()));
@@ -1964,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()));
@@ -1975,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)
@@ -1993,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++;
@@ -2001,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))
@@ -2010,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;
@@ -2052,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 b442675f3..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)
diff --git a/src/field_screen_effect.c b/src/field_screen_effect.c
index 53057fc31..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);
@@ -197,7 +194,7 @@ static void Task_ReturnToFieldWirelessLink(u8 taskId)
switch (task->data[0])
{
case 0:
- sub_800ADF8();
+ SetLinkStandbyCallback();
task->data[0]++;
break;
case 1:
@@ -230,7 +227,7 @@ void Task_ReturnToFieldRecordMixing(u8 taskId)
switch (task->data[0])
{
case 0:
- sub_800ADF8();
+ SetLinkStandbyCallback();
task->data[0]++;
break;
case 1:
@@ -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)
diff --git a/src/field_special_scene.c b/src/field_special_scene.c
index 3a3367957..bd6c833af 100644
--- a/src/field_special_scene.c
+++ b/src/field_special_scene.c
@@ -73,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.
@@ -116,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);
}
}
@@ -147,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);
}
}
@@ -171,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:
@@ -191,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:
@@ -206,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;
}
@@ -215,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();
}
@@ -229,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);
@@ -242,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 86b929491..c1fc92dbe 100644
--- a/src/field_specials.c
+++ b/src/field_specials.c
@@ -655,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);
}
}
@@ -672,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;
}
}
@@ -762,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++)
@@ -771,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;
}
}
@@ -816,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);
}
@@ -1095,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);
@@ -1152,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();
@@ -1195,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;
@@ -1215,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();
}
@@ -1509,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)
@@ -1750,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
},
};
@@ -1880,7 +1880,7 @@ void MoveElevator(void)
SetCameraPanningCallback(NULL);
MoveElevatorWindowLights(floorDelta, data[6]);
- PlaySE(SE_ELEBETA);
+ PlaySE(SE_ELEVATOR);
}
static void Task_MoveElevator(u8 taskId)
@@ -1897,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();
@@ -3438,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;
@@ -3864,7 +3864,7 @@ static void Task_LinkRetireStatusWithBattleTowerPartner(u8 taskId)
case 7:
if (IsLinkTaskFinished() == 1)
{
- sub_800ADF8();
+ SetLinkStandbyCallback();
gTasks[taskId].data[0]++;
}
break;
@@ -3877,7 +3877,7 @@ static void Task_LinkRetireStatusWithBattleTowerPartner(u8 taskId)
case 9:
if (gWirelessCommType == 0)
{
- sub_800AC34();
+ SetCloseLinkCallback();
}
gBattleTypeFlags = sBattleTowerMultiBattleTypeFlags;
EnableBothScriptContexts();
@@ -3904,7 +3904,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)
@@ -3916,7 +3916,7 @@ static void Task_LoopWingFlapSE(u8 taskId)
{
playCount++;
delay = 0;
- PlaySE(SE_W017);
+ PlaySE(SE_M_WING_ATTACK);
}
if (playCount == gSpecialVar_0x8004 - 1)
diff --git a/src/field_tasks.c b/src/field_tasks.c
index 901535677..91b4558d5 100644
--- a/src/field_tasks.c
+++ b/src/field_tasks.c
@@ -51,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.
@@ -105,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)
@@ -357,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:
@@ -380,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;
}
}
@@ -397,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;
}
}
@@ -443,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)
{
@@ -529,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);
}
}
}
@@ -583,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;
@@ -599,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;
}
@@ -620,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))
{
@@ -692,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 cfc7018bd..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)
{
@@ -741,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:
@@ -812,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:
@@ -853,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:
@@ -900,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;
@@ -912,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;
@@ -945,12 +946,12 @@ 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)
{
@@ -961,7 +962,7 @@ void copy_tileset_patterns_to_vram(struct Tileset const *tileset, u16 numTiles,
}
}
-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)
{
@@ -982,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;
@@ -1007,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 410af9fdd..7eae8cfd1 100644
--- a/src/fldeff_misc.c
+++ b/src/fldeff_misc.c
@@ -27,68 +27,54 @@
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,
@@ -100,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),
@@ -110,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),
@@ -120,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),
@@ -130,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),
@@ -140,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),
@@ -150,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),
@@ -160,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,
@@ -253,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),
@@ -261,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),
@@ -309,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:
@@ -485,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);
@@ -496,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])
{
@@ -589,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;
@@ -606,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)
{
@@ -631,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();
@@ -649,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;
@@ -675,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);
@@ -686,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]++;
@@ -705,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();
@@ -723,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;
@@ -741,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);
@@ -749,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)
{
@@ -769,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;
@@ -787,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;
}
@@ -798,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;
@@ -877,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);
@@ -948,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;
}
@@ -995,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);
@@ -1009,7 +1020,7 @@ void DoSecretBaseGlitterMatSparkle(void)
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;
@@ -1033,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);
@@ -1041,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);
@@ -1049,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);
@@ -1057,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);
@@ -1068,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);
@@ -1082,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)
{
@@ -1096,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();
@@ -1166,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;
@@ -1214,7 +1226,7 @@ static void Task_FieldPoisonEffect(u8 taskId)
void FldEffPoison_Start(void)
{
- PlaySE(SE_DOKU);
+ PlaySE(SE_FIELD_POISON);
CreateTask(Task_FieldPoisonEffect, 80);
}
@@ -1223,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];
@@ -1249,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);
@@ -1266,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)
{
@@ -1292,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 bfa20cdbc..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);
}
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 757205656..702f6c098 100644
--- a/src/frontier_pass.c
+++ b/src/frontier_pass.c
@@ -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();
@@ -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;
}
@@ -1378,7 +1380,7 @@ static bool32 InitFrontierMap(void)
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..c741a64fe 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"
diff --git a/src/graphics.c b/src/graphics.c
index b774c5ad2..9a8d9f845 100644
--- a/src/graphics.c
+++ b/src/graphics.c
@@ -461,12 +461,12 @@ 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");
@@ -987,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
@@ -1227,13 +1226,14 @@ 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"
@@ -1312,10 +1312,9 @@ const u16 gContestResults_Tilemap[] = INCBIN_U16("graphics/contest/results_scree
// 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");
@@ -1346,11 +1345,11 @@ 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");
@@ -1362,17 +1361,17 @@ const u8 gBerryBlenderMarubatsuTiles[] = INCBIN_U8("graphics/berry_blender/marub
const u8 gBerryBlenderParticlesTiles[] = INCBIN_U8("graphics/berry_blender/particles.4bpp");
-asm(".space 0x120");
+static const u8 sEmpty0[0x120] = {0};
const u8 gBerryBlenderCountdownNumbersTiles[] = INCBIN_U8("graphics/berry_blender/countdown_numbers.4bpp");
const u8 gBerryBlenderStartTiles[] = INCBIN_U8("graphics/berry_blender/start.4bpp");
-asm(".space 0x200");
+static const u8 sEmpty1[0x200] = {0};
const u8 gBerryBlenderArrowTiles[] = INCBIN_U8("graphics/berry_blender/arrow.4bpp");
-asm(".space 0x2C0");
+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");
@@ -1435,15 +1434,13 @@ 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");
+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");
@@ -1483,8 +1480,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"
@@ -1566,10 +1562,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/hall_of_fame.c b/src/hall_of_fame.c
index bf9850dec..2b548dea2 100644
--- a/src/hall_of_fame.c
+++ b/src/hall_of_fame.c
@@ -396,7 +396,7 @@ static bool8 InitHallOfFameScreen(void)
if (!gPaletteFade.active)
{
SetMainCallback2(CB2_HallOfFame);
- PlayBGM(MUS_DENDOU);
+ PlayBGM(MUS_HALL_OF_FAME);
return FALSE;
}
break;
@@ -648,7 +648,7 @@ static void Task_Hof_PaletteFadeAndPrintWelcomeText(u8 taskId)
}
HallOfFame_PrintWelcomeText(0, 15);
- PlaySE(SE_DENDOU);
+ PlaySE(SE_APPLAUSE);
gTasks[taskId].tFrameCount = 400;
gTasks[taskId].func = Task_Hof_DoConfetti;
}
@@ -702,7 +702,7 @@ static void Task_Hof_DisplayPlayer(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;
}
@@ -824,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++;
}
@@ -834,7 +834,7 @@ void CB2_DoHallOfFamePC(void)
AnimateSprites();
BuildOamBuffer();
UpdatePaletteFade();
- if (!sub_80F9C1C())
+ if (!IsComputerScreenOpenEffectActive())
gMain.state++;
break;
case 5:
@@ -1048,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;
@@ -1324,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);
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_menu.c b/src/item_menu.c
index 591ebe018..f2c7b25d8 100755
--- a/src/item_menu.c
+++ b/src/item_menu.c
@@ -52,6 +52,13 @@
#include "battle_pike.h"
#include "constants/rgb.h"
+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);
@@ -62,7 +69,7 @@ void AllocateBagItemListBuffers(void);
void LoadBagItemListBuffers(u8);
void BagMenu_PrintPocketNames(const u8*, const u8*);
void BagMenu_CopyPocketNameToWindow(u32);
-void BagMenu_DrawPocketIndicatorSquare(u8, u8);
+static void DrawPocketIndicatorSquare(u8 x, bool8 isCurrentPocket);
void CreatePocketScrollArrowPair(void);
void CreatePocketSwitchArrowPair(void);
void BagMenu_PrepareTMHMMoveWindow(void);
@@ -80,16 +87,16 @@ u16 BagGetQuantityByPocketPosition(u8, u16);
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,19 +113,18 @@ 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);
@@ -600,7 +606,7 @@ void CB2_BagMenuRun(void)
RunTasks();
AnimateSprites();
BuildOamBuffer();
- do_scheduled_bg_tilemap_copies_to_vram();
+ DoScheduledBgTilemapCopiesToVram();
UpdatePaletteFade();
}
@@ -627,7 +633,7 @@ bool8 SetupBagMenu(void)
{
case 0:
SetVBlankHBlankCallbacksToNull();
- clear_scheduled_bg_copies_to_vram();
+ ClearScheduledBgCopiesToVram();
gMain.state++;
break;
case 1:
@@ -686,7 +692,7 @@ 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:
@@ -1109,7 +1115,7 @@ 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);
@@ -1152,16 +1158,16 @@ void Task_BagMenu_HandleInput(u8 taskId)
{
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;
default:
if (gMain.newKeys & SELECT_BUTTON)
{
- if (sub_81AC2C0() == 1)
+ if (CanSwapItems() == TRUE)
{
ListMenuGetScrollAndRow(data[0], scrollPos, cursorPos);
if ((*scrollPos + *cursorPos) != gBagMenu->numItemStacks[gBagPositionStruct.pocket] - 1)
@@ -1184,7 +1190,7 @@ void Task_BagMenu_HandleInput(u8 taskId)
case LIST_CANCEL:
if (gBagPositionStruct.location == ITEMMENULOCATION_BERRY_BLENDER_CRUSH)
{
- PlaySE(SE_HAZURE);
+ PlaySE(SE_FAILURE);
break;
}
PlaySE(SE_SELECT);
@@ -1215,26 +1221,26 @@ void set_callback3_to_bag(u8 taskId)
gTasks[taskId].func = Task_BagMenu_HandleInput;
}
-u8 GetSwitchBagPocketDirection(void)
+static u8 GetSwitchBagPocketDirection(void)
{
u8 LRKeys;
if (gBagMenu->pocketSwitchDisabled)
- return 0;
+ 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;
@@ -1244,7 +1250,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;
@@ -1263,7 +1269,7 @@ void SwitchBagPocket(u8 taskId, s16 deltaBagPocketId, u16 a3)
}
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);
@@ -1273,8 +1279,8 @@ 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);
ScheduleBgCopyTilemapToVram(2);
SetBagVisualPocketId(pocketId, 1);
@@ -1291,15 +1297,15 @@ void sub_81AC10C(u8 taskId)
{
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;
}
}
@@ -1336,16 +1342,16 @@ void sub_81AC23C(u8 a)
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);
ScheduleBgCopyTilemapToVram(2);
}
-bool8 sub_81AC2C0(void)
+static bool8 CanSwapItems(void)
{
if (gBagPositionStruct.location <= ITEMMENULOCATION_BATTLE)
{
@@ -1370,10 +1376,10 @@ void BagMenu_SwapItems(u8 taskId)
sub_80D4FEC(data[1]);
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;
@@ -1642,7 +1648,7 @@ 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)
@@ -1650,7 +1656,7 @@ void Task_HandleOutOfBattleItemMenuInput(u8 taskId)
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)
@@ -1658,7 +1664,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)
@@ -1666,7 +1672,7 @@ 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)
@@ -1869,7 +1875,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);
@@ -2010,7 +2016,7 @@ void Task_ItemContext_Sell(u8 taskId)
}
}
-void DisplaySellItemPriceAndConfirm(u8 taskId)
+static void DisplaySellItemPriceAndConfirm(u8 taskId)
{
s16* data = gTasks[taskId].data;
@@ -2028,8 +2034,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);
}
@@ -2041,10 +2047,10 @@ 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;
@@ -2062,9 +2068,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);
}
}
@@ -2076,16 +2082,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);
@@ -2095,15 +2101,15 @@ void sub_81AD8C8(u8 taskId)
data[0] = ListMenuInit(&gMultiuseListMenuTemplate, *scrollPos, *cursorPos);
BagMenu_PrintCursor_(data[0], 2);
PrintMoneyAmountInMoneyBox(gBagMenu->windowPointers[9], GetMoney(&gSaveBlock1Ptr->money), 0);
- gTasks[taskId].func = sub_81AD9C0;
+ 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);
}
}
@@ -2115,7 +2121,7 @@ void Task_ItemContext_Deposit(u8 taskId)
tItemCount = 1;
if (data[2] == 1)
{
- sub_81ADB14(taskId);
+ BagMenu_TryDepositItem(taskId);
}
else
{
@@ -2124,11 +2130,11 @@ void Task_ItemContext_Deposit(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;
@@ -2140,7 +2146,7 @@ void sub_81ADA7C(u8 taskId)
{
PlaySE(SE_SELECT);
BagMenu_RemoveWindow(7);
- sub_81ADB14(taskId);
+ BagMenu_TryDepositItem(taskId);
}
else if (gMain.newKeys & B_BUTTON)
{
@@ -2152,7 +2158,7 @@ void sub_81ADA7C(u8 taskId)
}
}
-void sub_81ADB14(u8 taskId)
+static void BagMenu_TryDepositItem(u8 taskId)
{
s16* data = gTasks[taskId].data;
@@ -2160,7 +2166,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)
{
@@ -2173,11 +2179,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;
@@ -2248,7 +2254,7 @@ 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:
@@ -2414,7 +2420,7 @@ u8 AddItemMessageWindow(u8 which)
return *ptr;
}
-void bag_menu_RemoveBagItem_message_window(u8 which)
+void BagMenu_RemoveBagItemMessageindow(u8 which)
{
u8 *ptr = &gBagMenu->windowPointers[which];
if (*ptr != 0xFF)
@@ -2433,14 +2439,14 @@ void BagMenu_YesNo(u8 a, u8 b, const struct YesNoFuncTable *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_use.c b/src/item_use.c
index 0aae441c8..a9132ae5e 100755
--- a/src/item_use.c
+++ b/src/item_use.c
@@ -328,7 +328,7 @@ static void Task_UseItemfinder(u8 taskId)
}
return;
}
- PlaySE(SE_DAUGI);
+ PlaySE(SE_ITEMFINDER);
tItemfinderBeeps++;
}
tCounter = (tCounter + 1) & 0x1F;
@@ -397,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)
{
@@ -721,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);
@@ -845,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;
}
}
@@ -867,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
@@ -969,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);
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/link.c b/src/link.c
index e04e5e29d..62a9e4151 100644
--- a/src/link.c
+++ b/src/link.c
@@ -75,9 +75,9 @@ u16 gRecvCmds[MAX_RFU_PLAYERS][CMD_LENGTH];
u32 gLinkStatus;
bool8 gLinkDummy1; // Never read
bool8 gLinkDummy2; // Never read
-bool8 gUnknown_030030EC[MAX_LINK_PLAYERS];
-bool8 gUnknown_030030F0[MAX_LINK_PLAYERS];
-u16 gUnknown_030030F4;
+bool8 gReadyToExitStandby[MAX_LINK_PLAYERS];
+bool8 gReadyToCloseLink[MAX_LINK_PLAYERS];
+u16 gReadyCloseLinkType; // Never read
u8 gSuppressLinkErrorMessage;
bool8 gWirelessCommType;
bool8 gSavedLinkPlayerCount;
@@ -114,7 +114,7 @@ EWRAM_DATA struct {
u8 lastSendQueueCount;
u8 unk_06;
} sLinkErrorBuffer = {};
-static EWRAM_DATA u16 sUnknown_02022B08 = 0;
+static EWRAM_DATA u16 sReadyCloseLinkAttempts = 0; // never read
static EWRAM_DATA void *sLinkErrorBgTilemapBuffer = NULL;
// Static ROM declarations
@@ -135,12 +135,12 @@ 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);
@@ -379,7 +379,7 @@ void OpenLink(void)
sDummy1 = FALSE;
gLinkDummy2 = FALSE;
gLinkDummy1 = FALSE;
- gUnknown_030030F4 = 0;
+ gReadyCloseLinkType = 0;
CreateTask(Task_TriggerHandshake, 2);
}
else
@@ -390,8 +390,8 @@ void OpenLink(void)
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;
}
}
@@ -467,7 +467,7 @@ static void LinkTestProcessKeyInput(void)
}
if (gMain.newKeys & SELECT_BUTTON)
{
- sub_800AC34();
+ SetCloseLinkCallback();
}
if (gLinkTestDebugValuesEnabled)
{
@@ -630,16 +630,16 @@ 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();
break;
- case LINKCMD_0xCCCC:
+ case LINKCMD_SEND_BLOCK_REQ:
SendBlock(0, sBlockRequests[gRecvCmds[i][1]].address, sBlockRequests[gRecvCmds[i][1]].size);
break;
case LINKCMD_SEND_HELD_KEYS_2:
@@ -657,8 +657,8 @@ 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;
@@ -694,13 +694,13 @@ static void BuildSendCmd(u16 command)
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;
@@ -1065,16 +1065,16 @@ bool8 SendBlock(u8 unused, const void *src, u16 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;
@@ -1423,70 +1423,70 @@ static u8 GetDummy2(void)
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;
+ gLinkCallback = LinkCB_ReadyCloseLink;
gLinkDummy1 = FALSE;
- gUnknown_030030F4 = a0;
+ 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)
{
- sUnknown_02022B08++;
+ sReadyCloseLinkAttempts++;
}
else
{
- gLinkCallback = sub_800AC80;
+ gLinkCallback = LinkCB_ReadyCloseLink;
gLinkDummy1 = FALSE;
- gUnknown_030030F4 = 0;
+ 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();
@@ -1495,37 +1495,38 @@ static void sub_800ACAC(void)
}
}
-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)
{
- sUnknown_02022B08++;
+ sReadyCloseLinkAttempts++;
}
else
{
- gLinkCallback = sub_800AD5C;
+ gLinkCallback = LinkCB_ReadyCloseLinkWithJP;
gLinkDummy1 = FALSE;
- gUnknown_030030F4 = 0;
+ 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,19 +1534,21 @@ 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();
@@ -1554,50 +1557,47 @@ static void sub_800AD88(void)
}
}
-void sub_800ADF8(void)
+void SetLinkStandbyCallback(void)
{
if (gWirelessCommType == TRUE)
{
- sub_8010434();
+ Rfu_SetLinkStandbyCallback();
}
else
{
if (gLinkCallback == NULL)
{
- gLinkCallback = sub_800AE30;
+ gLinkCallback = LinkCB_Standby;
}
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;
}
}
diff --git a/src/link_rfu_2.c b/src/link_rfu_2.c
index 34e9f719b..a8ead95d6 100644
--- a/src/link_rfu_2.c
+++ b/src/link_rfu_2.c
@@ -148,10 +148,7 @@ static const u8 sUnknown_082ED6A5[] = {
0, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0
};
-static const struct {
- u8 *buffer;
- u32 size;
-} sUnknown_082ED6B8[] = {
+static const struct BlockRequest sBlockRequests[] = {
{ gBlockSendBuffer, 200 },
{ gBlockSendBuffer, 200 },
{ gBlockSendBuffer, 100 },
@@ -879,8 +876,7 @@ static void sub_800F498(u16 *a0, u8 *a1)
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 status;
@@ -926,7 +922,7 @@ static bool32 RfuProcessEnqueuedRecvBlock(void)
static void HandleSendFailure(u8 unused, u32 flags)
{
- s32 i, j;
+ s32 i, j, temp;
const u8 *r10 = Rfu.sendBlock.payload;
for (i = 0; i < Rfu.sendBlock.count; i++)
@@ -936,14 +932,15 @@ static void HandleSendFailure(u8 unused, u32 flags)
sResendBlock16[0] = RFU_COMMAND_0x8900 | i;
for (j = 0; j < 7; j++)
{
- sResendBlock16[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++)
{
- sResendBlock8[2 * j + 1] = sResendBlock16[j] >> 8;
- sResendBlock8[2 * j + 0] = sResendBlock16[j];
-
- j++;j--; // Needed to match;
+ temp = j << 1;
+ sResendBlock8[temp + 1] = sResendBlock16[j] >> 8;
+ sResendBlock8[temp + 0] = sResendBlock16[j] & 0xff;
}
RfuSendQueue_Enqueue(&Rfu.sendQueue, sResendBlock8);
Rfu.sendBlock.failedFlags |= (1 << i);
@@ -1027,8 +1024,7 @@ void sub_800F850(void)
static void RfuHandleReceiveCommand(u8 unused)
{
- u16 i;
- u16 j;
+ u16 i, j;
for (i = 0; i < MAX_RFU_PLAYERS; i++)
{
@@ -1042,7 +1038,7 @@ static void RfuHandleReceiveCommand(u8 unused)
if (gRfuLinkStatus->parentChild == MODE_CHILD)
{
Rfu.playerCount = gRecvCmds[i][1];
- Rfu.multiplayerId = sub_800F74C((u8 *)(gRecvCmds[i] + 2));
+ Rfu.multiplayerId = sub_800F74C((u8 *)(&gRecvCmds[i][2]));
}
break;
case RFU_COMMAND_0x8800:
@@ -1072,15 +1068,15 @@ static void RfuHandleReceiveCommand(u8 unused)
}
}
break;
- case RFU_COMMAND_0xA100:
- Rfu_InitBlockSend(sUnknown_082ED6B8[gRecvCmds[i][1]].buffer, (u16)sUnknown_082ED6B8[gRecvCmds[i][1]].size);
+ case RFU_COMMAND_SEND_BLOCK_REQ:
+ Rfu_InitBlockSend(sBlockRequests[gRecvCmds[i][1]].address, (u16)sBlockRequests[gRecvCmds[i][1]].size);
break;
- case RFU_COMMAND_0x5F00:
- Rfu.unk_e4[i] = 1;
+ case RFU_COMMAND_READY_CLOSE_LINK:
+ Rfu.readyCloseLink[i] = TRUE;
break;
- case RFU_COMMAND_0x6600:
+ case RFU_COMMAND_READY_EXIT_STANDBY:
if (Rfu.unk_100 == gRecvCmds[i][1])
- Rfu.unk_e9[i] = 1;
+ Rfu.readyExitStandby[i] = TRUE;
break;
case RFU_COMMAND_0xED00:
if (Rfu.parentChild == MODE_CHILD)
@@ -1194,9 +1190,9 @@ static void RfuPrepareSendBuffer(u16 command)
gSendCmd[1] = Rfu.sendBlock.count;
gSendCmd[2] = Rfu.sendBlock.owner + 0x80;
break;
- case RFU_COMMAND_0xA100:
+ case RFU_COMMAND_SEND_BLOCK_REQ:
if (AreNoPlayersReceiving())
- gSendCmd[1] = Rfu.unk_5a;
+ gSendCmd[1] = Rfu.blockRequestType;
break;
case RFU_COMMAND_0x7700:
case RFU_COMMAND_0x7800:
@@ -1207,8 +1203,8 @@ static void RfuPrepareSendBuffer(u16 command)
for (i = 0; i < RFU_CHILD_MAX; i++)
buff[i] = Rfu.linkPlayerIdx[i];
break;
- case RFU_COMMAND_0x6600:
- case RFU_COMMAND_0x5F00:
+ case RFU_COMMAND_READY_EXIT_STANDBY:
+ case RFU_COMMAND_READY_CLOSE_LINK:
gSendCmd[1] = Rfu.unk_100;
break;
case RFU_COMMAND_0x4400:
@@ -1241,10 +1237,9 @@ void sub_800FE50(void *a0)
bool32 Rfu_InitBlockSend(const u8 *src, size_t size)
{
bool8 r4;
- if (Rfu.callback != NULL)
- return FALSE;
- if (gSendCmd[0] != 0)
+ if (Rfu.callback != NULL || gSendCmd[0] != 0)
return FALSE;
+
if (Rfu.sendBlock.sending)
{
sRfuDebug.unk_83++;
@@ -1327,10 +1322,10 @@ static void SendLastBlock(void)
Rfu.callback = NULL;
}
-bool8 sub_8010100(u8 blockRequestType)
+bool8 Rfu_SendBlockRequest(u8 type)
{
- Rfu.unk_5a = blockRequestType;
- RfuPrepareSendBuffer(RFU_COMMAND_0xA100);
+ Rfu.blockRequestType = type;
+ RfuPrepareSendBuffer(RFU_COMMAND_SEND_BLOCK_REQ);
return TRUE;
}
@@ -1343,14 +1338,14 @@ static void sub_801011C(void)
Rfu.callback = NULL;
}
-static void sub_8010148(void)
+static void DisconnectRfu(void)
{
rfu_REQ_disconnect(gRfuLinkStatus->connSlotFlag | gRfuLinkStatus->linkLossSlotFlag);
rfu_waitREQComplete();
sub_801011C();
}
-static void sub_8010168(void)
+static void TryDisconnectRfu(void)
{
if (Rfu.parentChild == MODE_CHILD)
{
@@ -1358,7 +1353,7 @@ static void sub_8010168(void)
Rfu.unk_ce4 = 2;
}
else
- Rfu.callback = sub_8010148;
+ Rfu.callback = DisconnectRfu;
}
void LinkRfu_FatalError(void)
@@ -1368,131 +1363,132 @@ void LinkRfu_FatalError(void)
Rfu.unk_ce3 = gRfuLinkStatus->connSlotFlag | gRfuLinkStatus->linkLossSlotFlag;
}
-static 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.parentChild == MODE_CHILD)
{
Rfu.errorState = 3;
- sub_8010168();
+ TryDisconnectRfu();
}
else
- Rfu.callback = sub_8010168;
+ Rfu.callback = TryDisconnectRfu;
}
}
-static void sub_801022C(void)
+static void SendReadyCloseLink(void)
{
if (gSendCmd[0] == 0 && Rfu.unk_ce8 == 0)
{
- RfuPrepareSendBuffer(RFU_COMMAND_0x5F00);
- Rfu.callback = sub_80101CC;
+ RfuPrepareSendBuffer(RFU_COMMAND_READY_CLOSE_LINK);
+ Rfu.callback = WaitAllReadyToCloseLink;
}
}
-static void sub_8010264(u8 taskId)
+static void Task_TryReadyCloseLink(u8 taskId)
{
if (Rfu.callback == NULL)
{
Rfu.unk_cd9 = 1;
- Rfu.callback = 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);
}
-static 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)
{
- if (Rfu.recvQueue.count == 0 && Rfu.unk_fe > 60)
- {
- RfuPrepareSendBuffer(RFU_COMMAND_0x6600);
- Rfu.unk_fe = 0;
- }
+ RfuPrepareSendBuffer(RFU_COMMAND_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.callback = NULL;
}
- Rfu.unk_fe++;
+ Rfu.resendExitStandbyTimer++;
}
-static void sub_8010358(void)
+static void LinkLeaderReadyToExitStandby(void)
{
if (Rfu.recvQueue.count == 0 && gSendCmd[0] == 0)
{
- RfuPrepareSendBuffer(RFU_COMMAND_0x6600);
- Rfu.callback = sub_80102B8;
+ RfuPrepareSendBuffer(RFU_COMMAND_READY_EXIT_STANDBY);
+ Rfu.callback = SendReadyExitStandbyUntilAllReady;
}
}
-static 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)
{
+ // Not link leader, send exit standby when ready
if (Rfu.recvQueue.count == 0 && gSendCmd[0] == 0)
{
- RfuPrepareSendBuffer(RFU_COMMAND_0x6600);
- Rfu.callback = sub_80102B8;
+ RfuPrepareSendBuffer(RFU_COMMAND_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.recvQueue.count == 0 && gSendCmd[0] == 0)
{
- RfuPrepareSendBuffer(RFU_COMMAND_0x6600);
- Rfu.callback = sub_8010358;
+ RfuPrepareSendBuffer(RFU_COMMAND_READY_EXIT_STANDBY);
+ Rfu.callback = LinkLeaderReadyToExitStandby;
}
}
}
}
-void sub_8010434(void)
+void Rfu_SetLinkStandbyCallback(void)
{
if (Rfu.callback == NULL)
{
- Rfu.callback = sub_8010390;
- Rfu.unk_fe = 0;
+ Rfu.callback = Rfu_LinkStandby;
+ Rfu.resendExitStandbyTimer = 0;
}
}
@@ -1552,28 +1548,28 @@ static bool8 CheckForLeavingGroupMembers(void)
bool8 memberLeft = FALSE;
for (i = 0; i < RFU_CHILD_MAX; i++)
{
- if (Rfu.partnerSendStatuses[i] < RFU_STATUS_JOIN_GROUP_OK
- || Rfu.partnerSendStatuses[i] > RFU_STATUS_JOIN_GROUP_NO)
+ if (Rfu.partnerSendStatuses[i] == RFU_STATUS_JOIN_GROUP_OK
+ || Rfu.partnerSendStatuses[i] == RFU_STATUS_JOIN_GROUP_NO)
{
- 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;
- }
+ continue;
+ }
- }
- else if (gRfuSlotStatusNI[Rfu.childSlot]->recv.state == SLOT_STATE_RECV_FAILED)
- rfu_clearSlot(TYPE_NI_RECV, 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 memberLeft;
}
@@ -1724,8 +1720,8 @@ static void sub_801084C(u8 taskId)
{
if (AreNoPlayersReceiving())
{
- Rfu.unk_5a = 0;
- RfuPrepareSendBuffer(RFU_COMMAND_0xA100);
+ Rfu.blockRequestType = 0;
+ RfuPrepareSendBuffer(RFU_COMMAND_SEND_BLOCK_REQ);
gTasks[taskId].data[0]++;
}
}
@@ -2094,8 +2090,7 @@ static void sub_80111FC(void)
static void sub_801120C(u8 msg, u8 paramCount)
{
- u8 i;
- u8 disconnectFlag = 0;
+ u8 i, disconnectFlag = 0;
switch (msg)
{
case LMAN_MSG_INITIALIZE_COMPLETED:
diff --git a/src/link_rfu_3.c b/src/link_rfu_3.c
index c53e1c59e..c4c000a6e 100644
--- a/src/link_rfu_3.c
+++ b/src/link_rfu_3.c
@@ -220,9 +220,9 @@ static const u8 sWireless_RSEtoASCIITable[256] = {
[CHAR_y] = 'y',
[CHAR_z] = 'z',
0x20, 0x20, 0x2b, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f,
- [CHAR_SPECIAL_F7] = ' ',
- [CHAR_SPECIAL_F8] = ' ',
- [CHAR_SPECIAL_F9] = ' ',
+ [CHAR_DYNAMIC] = ' ',
+ [CHAR_KEYPAD_ICON] = ' ',
+ [CHAR_EXTRA_SYMBOL] = ' ',
[CHAR_PROMPT_SCROLL] = ' ',
[CHAR_PROMPT_CLEAR] = ' ',
[EXT_CTRL_CODE_BEGIN] = ' ',
@@ -623,105 +623,39 @@ static void ASCIIToPkmnStr(u8 *pkmnStr, const u8 *asciiStr)
pkmnStr[i] = EOS;
}
-#ifdef NONMATCHING
static u8 GetConnectedChildStrength(u8 maxFlags)
{
u8 flagCount = 0;
- u32 flags = gRfuLinkStatus->connSlotFlag;
+ u8 flags = gRfuLinkStatus->connSlotFlag;
u8 i;
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
-static u8 GetConnectedChildStrength(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 InitHostRFUtgtGname(struct GFtgtGname *data, u8 activity, bool32 started, s32 child_sprite_genders)
{
diff --git a/src/list_menu.c b/src/list_menu.c
index ddcad0fe9..ef55f5872 100644
--- a/src/list_menu.c
+++ b/src/list_menu.c
@@ -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..11a4525ea 100644
--- a/src/m4a.c
+++ b/src/m4a.c
@@ -904,7 +904,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/main_menu.c b/src/main_menu.c
index 781d7f85c..f4bf37ce1 100644
--- a/src/main_menu.c
+++ b/src/main_menu.c
@@ -1292,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);
}
@@ -1609,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/match_call.c b/src/match_call.c
index 307b84413..2b3f6df8d 100644
--- a/src/match_call.c
+++ b/src/match_call.c
@@ -1119,7 +1119,7 @@ static void StartMatchCall(void)
sub_808BCF4();
}
- PlaySE(SE_TOREEYE);
+ PlaySE(SE_POKENAV_CALL);
CreateTask(ExecuteMatchCall, 1);
}
@@ -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;
}
diff --git a/src/mauville_old_man.c b/src/mauville_old_man.c
index bbf0f8972..af68c6116 100644
--- a/src/mauville_old_man.c
+++ b/src/mauville_old_man.c
@@ -220,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 7c90c4d93..f3334919c 100644
--- a/src/menu.c
+++ b/src/menu.c
@@ -56,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");
@@ -153,7 +153,7 @@ void FreeAllOverworldWindowBuffers(void)
FreeAllWindowBuffers();
}
-void sub_8197200(void)
+void InitTextBoxGfxAndPrinters(void)
{
ChangeBgX(0, 0, 0);
ChangeBgY(0, 0, 0);
@@ -1299,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);
@@ -1333,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)
@@ -1381,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;
@@ -1429,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;
}
@@ -1469,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;
}
@@ -1509,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;
@@ -1549,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;
}
@@ -1732,52 +1723,53 @@ 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 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 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 FreeTempTileDataBuffersIfPossible(void)
@@ -1786,13 +1778,13 @@ bool8 FreeTempTileDataBuffersIfPossible(void)
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;
}
@@ -1805,7 +1797,7 @@ bool8 FreeTempTileDataBuffersIfPossible(void)
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)
@@ -1813,7 +1805,7 @@ void *DecompressAndCopyTileDataToVram(u8 bgId, const void *src, u32 size, u16 of
if (ptr)
{
copy_decompressed_tile_data_to_vram(bgId, ptr, size, offset, mode);
- gUnknown_0203CDAC[gUnknown_0203CDA8++] = ptr;
+ sTempTileDataBuffer[sTempTileDataBufferIdx++] = ptr;
}
return ptr;
}
diff --git a/src/menu_specialized.c b/src/menu_specialized.c
index b7dd1f33a..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;
}
}
}
@@ -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/mevent_801BAAC.c b/src/mevent_801BAAC.c
index 1bfac23d1..847449c45 100644
--- a/src/mevent_801BAAC.c
+++ b/src/mevent_801BAAC.c
@@ -208,7 +208,7 @@ s32 FadeToWonderCardMenu(void)
case 3:
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);
@@ -607,7 +607,7 @@ s32 FadeToWonderNewsMenu(void)
case 3:
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..f5ef09cac 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;
@@ -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 e2f5cefb7..fb3a0a374 100644
--- a/src/mirage_tower.c
+++ b/src/mirage_tower.c
@@ -8,7 +8,7 @@
#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"
@@ -109,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[] =
@@ -168,7 +168,7 @@ const struct PulseBlendSettings gMirageTowerPulseBlendSettings = {
.numColors = 15,
.delay = 5,
.numFadeCycles = -1,
- .maxBlendCoeff = 11,
+ .maxBlendCoeff = -5,
.fadeType = 1,
.restorePaletteOnUnload = FALSE,
.unk7_7 = 1,
@@ -370,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)
@@ -412,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;
}
@@ -691,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);
diff --git a/src/move_relearner.c b/src/move_relearner.c
index 8c4cf7b2e..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;
diff --git a/src/mystery_event_menu.c b/src/mystery_event_menu.c
index 04902dee8..032cc3340 100644
--- a/src/mystery_event_menu.c
+++ b/src/mystery_event_menu.c
@@ -208,7 +208,7 @@ static void CB2_MysteryEventMenu(void)
{
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 9672fe0ec..ca5ab1baf 100644
--- a/src/mystery_gift.c
+++ b/src/mystery_gift.c
@@ -410,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);
@@ -431,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;
@@ -1023,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;
@@ -1284,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;
@@ -1647,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 84b540e99..be921078e 100644
--- a/src/naming_screen.c
+++ b/src/naming_screen.c
@@ -28,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
@@ -40,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[] =
{
@@ -55,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,
@@ -83,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,
@@ -94,7 +244,7 @@ static const struct WindowTemplate gUnknown_0858BE10[] =
.paletteNum = 10,
.baseBlock = 0x030
},
- {
+ [WIN_KB_PAGE_2] = {
.bg = 2,
.tilemapLeft = 3,
.tilemapTop = 10,
@@ -103,7 +253,7 @@ static const struct WindowTemplate gUnknown_0858BE10[] =
.paletteNum = 10,
.baseBlock = 0x0C8
},
- {
+ [WIN_TEXT_ENTRY] = {
.bg = 3,
.tilemapLeft = 8,
.tilemapTop = 6,
@@ -112,7 +262,7 @@ static const struct WindowTemplate gUnknown_0858BE10[] =
.paletteNum = 10,
.baseBlock = 0x030
},
- {
+ [WIN_TEXT_ENTRY_BOX] = {
.bg = 3,
.tilemapLeft = 8,
.tilemapTop = 4,
@@ -121,7 +271,7 @@ static const struct WindowTemplate gUnknown_0858BE10[] =
.paletteNum = 10,
.baseBlock = 0x052
},
- {
+ [WIN_BANNER] = {
.bg = 0,
.tilemapLeft = 0,
.tilemapTop = 0,
@@ -133,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;
@@ -272,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++)
@@ -321,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)
@@ -334,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);
@@ -346,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;
}
@@ -473,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;
}
@@ -490,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;
}
@@ -543,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;
}
@@ -563,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;
}
@@ -576,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;
}
@@ -589,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();
}
@@ -612,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;
}
@@ -662,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;
@@ -692,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;
@@ -725,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)
@@ -947,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)
{
@@ -989,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;
@@ -1139,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)
{
}
@@ -1169,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);
}
@@ -1179,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;
}
@@ -1189,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);
}
@@ -1213,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;
}
@@ -1301,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);
}
@@ -1348,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);
@@ -1470,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)
{
}
@@ -1529,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;
@@ -1580,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
@@ -1704,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();
@@ -1782,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);
}
@@ -1798,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);
@@ -1814,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;
@@ -1826,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,
@@ -1896,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,
@@ -1917,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,
@@ -1931,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,
@@ -1945,7 +2181,7 @@ const struct OamData gOamData_858BFFC =
.paletteNum = 0,
};
-static const struct Subsprite gUnknown_0858C004[] =
+static const struct Subsprite sSubsprites_PageSwapFrame[] =
{
{
.x = -20,
@@ -2013,7 +2249,7 @@ static const struct Subsprite gUnknown_0858C004[] =
}
};
-static const struct Subsprite gUnknown_0858C024[] =
+static const struct Subsprite sSubsprites_PageSwapText[] =
{
{
.x = -12,
@@ -2033,7 +2269,7 @@ static const struct Subsprite gUnknown_0858C024[] =
}
};
-static const struct Subsprite gUnknown_0858C02C[] =
+static const struct Subsprite sSubsprites_Button[] =
{
{
.x = -20,
@@ -2085,7 +2321,7 @@ static const struct Subsprite gUnknown_0858C02C[] =
}
};
-static const struct Subsprite gUnknown_0858C044[] =
+static const struct Subsprite sSubsprites_PCIcon[] =
{
{
.x = -8,
@@ -2113,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,
@@ -2301,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/overworld.c b/src/overworld.c
index ea0d633bc..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 (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 (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 (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,17 +2067,17 @@ 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();
+ 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);
@@ -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();
@@ -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/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 d5bc6dfb6..7514cf545 100755
--- a/src/party_menu.c
+++ b/src/party_menu.c
@@ -462,7 +462,7 @@ static void CB2_UpdatePartyMenu(void)
RunTasks();
AnimateSprites();
BuildOamBuffer();
- do_scheduled_bg_tilemap_copies_to_vram();
+ DoScheduledBgTilemapCopiesToVram();
UpdatePaletteFade();
}
@@ -489,7 +489,7 @@ static bool8 ShowPartyMenu(void)
case 0:
SetVBlankHBlankCallbacksToNull();
ResetVramOamAndBgCntRegs();
- clear_scheduled_bg_copies_to_vram();
+ ClearScheduledBgCopiesToVram();
gMain.state++;
break;
case 1:
@@ -1294,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;
@@ -1305,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:
@@ -1862,7 +1862,7 @@ u8 GetMonAilment(struct Pokemon *mon)
static void SetPartyMonsAllowedInMinigame(void)
{
- u16 *ptr;
+ s16 *ptr;
if (gPartyMenu.menuType == PARTY_MENU_TYPE_MINIGAME)
{
@@ -1915,7 +1915,7 @@ static void TryEnterMonForMinigame(u8 taskId, u8 slot)
}
else
{
- PlaySE(SE_HAZURE);
+ PlaySE(SE_FAILURE);
DisplayPartyMenuMessage(gText_PkmnCantParticipate, FALSE);
ScheduleBgCopyTilemapToVram(2);
gTasks[taskId].func = Task_ReturnToChooseMonAfterText;
@@ -3471,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;
}
@@ -3538,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);
@@ -3556,7 +3556,7 @@ static void CursorCb_Trade1(u8 taskId)
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);
@@ -3595,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;
@@ -4355,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)
@@ -4426,7 +4426,7 @@ void ItemUseCB_ReduceEV(u8 taskId, TaskFunc task)
else
{
gPartyMenuUseExitCallback = TRUE;
- PlaySE(SE_KAIFUKU);
+ PlaySE(SE_USE_ITEM);
RemoveBagItem(item, 1);
GetMonNickname(mon, gStringVar1);
ItemEffectToStatString(effectType, gStringVar2);
@@ -4591,7 +4591,7 @@ static void TryUsePPItem(u8 taskId)
{
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]);
@@ -4715,7 +4715,7 @@ static void Task_DoLearnedMoveFanfareAfterText(u8 taskId)
{
if (IsPartyMenuTextPrinterActive() != TRUE)
{
- PlayFanfare(MUS_FANFA1);
+ PlayFanfare(MUS_LEVEL_UP);
gTasks[taskId].func = Task_LearnNextMoveOrClosePartyMenu;
}
}
@@ -4951,9 +4951,9 @@ 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);
ScheduleBgCopyTilemapToVram(2);
@@ -4961,7 +4961,7 @@ static void DisplayLevelUpStatsPg1(u8 taskId)
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);
@@ -5095,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);
@@ -5596,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;
}
@@ -6077,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/player_pc.c b/src/player_pc.c
index fc0bd9f4c..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;
@@ -346,7 +346,7 @@ static void InitPlayerPCMenu(u8 taskId)
static void PlayerPCProcessMenuInput(u8 taskId)
{
- u16 *data;
+ s16 *data;
s8 inputOptionId;
data = gTasks[taskId].data;
@@ -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;
@@ -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,9 +581,9 @@ 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]);
ScheduleBgCopyTilemapToVram(0);
@@ -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 a065be3f0..b176677bd 100644
--- a/src/pokeball.c
+++ b/src/pokeball.c
@@ -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)
@@ -464,7 +464,7 @@ 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);
@@ -514,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;
}
}
@@ -565,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);
}
}
@@ -634,7 +634,7 @@ static void sub_8075970(struct Sprite *sprite)
StartSpriteAffineAnim(sprite, 2);
else
StartSpriteAffineAnim(sprite, 1);
- PlaySE(SE_BOWA);
+ PlaySE(SE_BALL);
}
break;
}
@@ -881,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)
{
@@ -1150,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 506c5e4c4..025adf875 100644
--- a/src/pokeblock.c
+++ b/src/pokeblock.c
@@ -475,7 +475,7 @@ static void CB2_PokeblockMenu(void)
RunTasks();
AnimateSprites();
BuildOamBuffer();
- do_scheduled_bg_tilemap_copies_to_vram();
+ DoScheduledBgTilemapCopiesToVram();
UpdatePaletteFade();
}
@@ -507,7 +507,7 @@ static bool8 InitPokeblockMenu(void)
{
case 0:
SetVBlankHBlankCallbacksToNull();
- clear_scheduled_bg_copies_to_vram();
+ ClearScheduledBgCopiesToVram();
gMain.state++;
break;
case 1:
@@ -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++) = 87;
ConvertIntToDecimalStringN(gStringVar1, GetHighestPokeblocksFlavorLevel(pkblock), STR_CONV_MODE_LEFT_ALIGN, 3);
StringExpandPlaceholders(txtPtr, gText_LvVar1);
diff --git a/src/pokeblock_feed.c b/src/pokeblock_feed.c
index fa29ca981..e15a005e6 100644
--- a/src/pokeblock_feed.c
+++ b/src/pokeblock_feed.c
@@ -518,7 +518,7 @@ static void CB2_PokeblockFeed(void)
RunTasks();
AnimateSprites();
BuildOamBuffer();
- do_scheduled_bg_tilemap_copies_to_vram();
+ DoScheduledBgTilemapCopiesToVram();
UpdatePaletteFade();
}
@@ -536,7 +536,7 @@ static bool8 TransitionToPokeblockFeedScene(void)
case 0:
sPokeblockFeed = AllocZeroed(sizeof(*sPokeblockFeed));
SetVBlankHBlankCallbacksToNull();
- clear_scheduled_bg_copies_to_vram();
+ ClearScheduledBgCopiesToVram();
gMain.state++;
break;
case 1:
diff --git a/src/pokedex.c b/src/pokedex.c
index 0541f3f2e..a86c22153 100644
--- a/src/pokedex.c
+++ b/src/pokedex.c
@@ -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);
@@ -2596,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))
{
@@ -2604,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))
{
@@ -2615,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))
{
@@ -2625,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)
@@ -3353,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)
@@ -3382,7 +3382,7 @@ static void Task_HandleInfoScreenInput(u8 taskId)
case SIZE_SCREEN:
if (!sPokedexListItem->owned)
{
- PlaySE(SE_HAZURE);
+ PlaySE(SE_FAILURE);
}
else
{
@@ -3406,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)
@@ -3415,7 +3415,7 @@ static void Task_HandleInfoScreenInput(u8 taskId)
{
sPokedexView->selectedScreen++;
HighlightScreenSelectBarItem(sPokedexView->selectedScreen, 0xD);
- PlaySE(SE_Z_PAGE);
+ PlaySE(SE_DEX_PAGE);
return;
}
}
@@ -3654,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)
@@ -3662,7 +3662,7 @@ static void Task_HandleCryScreenInput(u8 taskId)
{
if (!sPokedexListItem->owned)
{
- PlaySE(SE_HAZURE);
+ PlaySE(SE_FAILURE);
}
else
{
@@ -3670,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;
}
@@ -3823,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);
}
}
@@ -4145,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;
@@ -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;
diff --git a/src/pokedex_area_screen.c b/src/pokedex_area_screen.c
index 0232d4fc4..8450f8530 100755
--- a/src/pokedex_area_screen.c
+++ b/src/pokedex_area_screen.c
@@ -732,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 80e93c568..188624d6a 100644
--- a/src/pokemon.c
+++ b/src/pokemon.c
@@ -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
};
@@ -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;
@@ -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;
@@ -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;
@@ -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];
@@ -5848,7 +5848,7 @@ void MonGainEVs(struct Pokemon *mon, u16 defeatedSpecies)
{
if (totalEVs >= MAX_TOTAL_EVS)
break;
-
+
if (CheckPartyHasHadPokerus(mon, 0))
multiplier = 2;
else
@@ -5895,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;
}
@@ -6138,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;
@@ -6171,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;
@@ -6180,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);
@@ -6192,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;
@@ -6253,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;
@@ -6273,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:
@@ -6298,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)
@@ -6814,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 a388be39a..37abb90e9 100644
--- a/src/pokemon_animation.c
+++ b/src/pokemon_animation.c
@@ -2884,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 33ddee1b5..96774c0bb 100755
--- a/src/pokemon_jump.c
+++ b/src/pokemon_jump.c
@@ -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;
@@ -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] =
@@ -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
@@ -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;
}
diff --git a/src/pokemon_storage_system.c b/src/pokemon_storage_system.c
index 703371ba9..546f50dce 100644
--- a/src/pokemon_storage_system.c
+++ b/src/pokemon_storage_system.c
@@ -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();
@@ -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();
@@ -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);
@@ -8097,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;
}
@@ -8203,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;
diff --git a/src/pokemon_summary_screen.c b/src/pokemon_summary_screen.c
index e8b30f773..d016c455c 100644
--- a/src/pokemon_summary_screen.c
+++ b/src/pokemon_summary_screen.c
@@ -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
@@ -1120,7 +1120,7 @@ static void MainCB2(void)
RunTasks();
AnimateSprites();
BuildOamBuffer();
- do_scheduled_bg_tilemap_copies_to_vram();
+ DoScheduledBgTilemapCopiesToVram();
UpdatePaletteFade();
}
@@ -1143,7 +1143,7 @@ static bool8 LoadGraphics(void)
case 0:
SetVBlankHBlankCallbacksToNull();
ResetVramOamAndBgCntRegs();
- clear_scheduled_bg_copies_to_vram();
+ ClearScheduledBgCopiesToVram();
gMain.state++;
break;
case 1:
@@ -1903,7 +1903,7 @@ static void Task_HandleInput_MoveSelect(u8 taskId)
}
else
{
- PlaySE(SE_HAZURE);
+ PlaySE(SE_FAILURE);
}
}
else if (gMain.newKeys & B_BUTTON)
@@ -2191,7 +2191,7 @@ static void Task_HandleReplaceMoveInput(u8 taskId)
}
else
{
- PlaySE(SE_HAZURE);
+ PlaySE(SE_FAILURE);
ShowCantForgetHMsWindow(taskId);
}
}
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 65a85aa7e..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];
};
@@ -226,7 +226,7 @@ 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:
@@ -236,7 +236,7 @@ u32 sub_81CDE94(s32 state)
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:
@@ -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 7a48b9234..eea4aa397 100644
--- a/src/pokenav_conditions_3.c
+++ b/src/pokenav_conditions_3.c
@@ -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 d9aae7e4e..155e30939 100644
--- a/src/pokenav_main_menu.c
+++ b/src/pokenav_main_menu.c
@@ -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);
}
diff --git a/src/pokenav_match_call_1.c b/src/pokenav_match_call_1.c
index 1e4239bbc..265259394 100755
--- a/src/pokenav_match_call_1.c
+++ b/src/pokenav_match_call_1.c
@@ -118,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 d03bad88b..60091577e 100755
--- a/src/pokenav_match_call_2.c
+++ b/src/pokenav_match_call_2.c
@@ -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 86ad8c744..2be92013f 100644
--- a/src/pokenav_menu_handler_2.c
+++ b/src/pokenav_menu_handler_2.c
@@ -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_ribbons_1.c b/src/pokenav_ribbons_1.c
index ffc049c47..aad0053a8 100644
--- a/src/pokenav_ribbons_1.c
+++ b/src/pokenav_ribbons_1.c
@@ -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 bb6116472..e5a89acad 100644
--- a/src/pokenav_ribbons_2.c
+++ b/src/pokenav_ribbons_2.c
@@ -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 07690960f..78ebe02e4 100644
--- a/src/post_battle_event_funcs.c
+++ b/src/post_battle_event_funcs.c
@@ -5,7 +5,7 @@
#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/tv.h"
diff --git a/src/rayquaza_scene.c b/src/rayquaza_scene.c
index d902b7319..f47ab5e89 100644
--- a/src/rayquaza_scene.c
+++ b/src/rayquaza_scene.c
@@ -1244,7 +1244,7 @@ void DoRayquazaScene(u8 animId, bool8 onlyOneAnim, void (*callback)(void))
static void CB2_InitRayquazaScene(void)
{
SetVBlankHBlankCallbacksToNull();
- clear_scheduled_bg_copies_to_vram();
+ ClearScheduledBgCopiesToVram();
ScanlineEffect_Stop();
FreeAllSpritePalettes();
ResetPaletteFade();
@@ -1260,7 +1260,7 @@ static void CB2_RayquazaScene(void)
RunTasks();
AnimateSprites();
BuildOamBuffer();
- do_scheduled_bg_tilemap_copies_to_vram();
+ DoScheduledBgTilemapCopiesToVram();
UpdatePaletteFade();
}
@@ -1565,7 +1565,7 @@ 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)
@@ -1670,14 +1670,14 @@ static void Task_HandleDuoFight(u8 taskId)
static void sub_81D7438(void)
{
- PlaySE(SE_T_KAMI);
+ PlaySE(SE_THUNDER);
sub_80A2C44(0x7FFF, 0, 0x10, 0, -1, 0, 0);
sub_80A2C44(0xFFFF0000, 0, 0x10, 0, 0, 0, 1);
}
static void sub_81D7480(void)
{
- PlaySE(SE_T_KAMI);
+ PlaySE(SE_THUNDER);
sub_80A2C44(0x7FFF, 0, 0x10, 0x10, -1, 0, 0);
sub_80A2C44(0xFFFF0000, 0, 0x10, 0x10, 0, 0, 1);
}
@@ -1714,7 +1714,7 @@ static void sub_81D752C(u8 taskId)
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;
}
@@ -1950,7 +1950,7 @@ static void sub_81D7E9C(void)
static void Task_RayTakesFlightAnim(u8 taskId)
{
s16 *data = gTasks[taskId].data;
- PlayNewMapMusic(MUS_REKKUU_KOURIN);
+ PlayNewMapMusic(MUS_RAYQUAZA_APPEARS);
sub_81D7E10();
sub_81D7E9C();
SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT1_OBJ | BLDCNT_TGT2_BG1 | BLDCNT_EFFECT_BLEND);
@@ -2358,7 +2358,7 @@ 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);
+ PlaySE(SE_INTRO_BLAST);
data[3]++;
switch (data[0])
@@ -2777,7 +2777,7 @@ static void sub_81D9528(struct Sprite *sprite)
}
if (sprite->data[4] % 64 == 0)
- PlaySE(SE_W250);
+ PlaySE(SE_M_WHIRLPOOL);
sprite->data[4]++;
}
@@ -2802,7 +2802,7 @@ static void sub_81D961C(struct Sprite *sprite)
{
sub_81D97E0(sprite);
if (sprite->data[4] == 0)
- PlaySE(SE_BT_START);
+ PlaySE(SE_MUGSHOT);
if (sprite->data[4] == -3)
sub_81D9868(sprite, 2, 48, 16);
}
@@ -2900,7 +2900,7 @@ static void sub_81D98B4(u8 taskId)
break;
case 1:
if (data[5] == 8)
- PlaySE(SE_JIDO_DOA);
+ PlaySE(SE_SLIDING_DOOR);
if (data[2] == 2)
{
data[0]++;
diff --git a/src/record_mixing.c b/src/record_mixing.c
index 075bc6aee..6c0a02d8c 100644
--- a/src/record_mixing.c
+++ b/src/record_mixing.c
@@ -302,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;
}
}
@@ -326,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);
@@ -336,14 +336,14 @@ 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)
@@ -501,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:
@@ -872,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))
{
@@ -973,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;
@@ -1005,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 b8e07c835..de3b04cb2 100644
--- a/src/region_map.c
+++ b/src/region_map.c
@@ -1683,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:
@@ -1746,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))
diff --git a/src/reset_rtc_screen.c b/src/reset_rtc_screen.c
index 2756aa861..204eb6733 100644
--- a/src/reset_rtc_screen.c
+++ b/src/reset_rtc_screen.c
@@ -467,7 +467,7 @@ void CB2_InitResetRtcScreen(void)
static void sub_809F048(void)
{
- clear_scheduled_bg_copies_to_vram();
+ ClearScheduledBgCopiesToVram();
ResetBgsAndClearDma3BusyFlags(0);
InitBgsFromTemplates(0, sBackgroundTemplates, ARRAY_COUNT(sBackgroundTemplates));
ScheduleBgCopyTilemapToVram(0);
@@ -483,7 +483,7 @@ static void CB2_ResetRtcScreen(void)
RunTasks();
AnimateSprites();
BuildOamBuffer();
- do_scheduled_bg_tilemap_copies_to_vram();
+ DoScheduledBgTilemapCopiesToVram();
UpdatePaletteFade();
}
@@ -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/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 58e120cb5..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 |
@@ -946,36 +1195,36 @@ static void sub_81405CC(void)
ResetTempTileDataBuffers();
break;
case 3:
- LoadPalette(&gUnknown_085B5BFC, 0, 0x1C0);
- DecompressAndCopyTileDataToVram(1, gRouletteMenuTiles, 0, 0, 0);
- DecompressAndCopyTileDataToVram(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 (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 09e1b7aae..3ae2f6fd5 100644
--- a/src/save.c
+++ b/src/save.c
@@ -912,7 +912,7 @@ void Task_LinkSave(u8 taskId)
tState = 1;
break;
case 1:
- sub_800ADF8();
+ SetLinkStandbyCallback();
tState = 2;
break;
case 2:
@@ -949,7 +949,7 @@ void Task_LinkSave(u8 taskId)
case 7:
if (!tPartialSave)
ClearContinueGameWarpStatus2();
- sub_800ADF8();
+ SetLinkStandbyCallback();
tState = 8;
break;
case 8:
@@ -960,7 +960,7 @@ void Task_LinkSave(u8 taskId)
}
break;
case 9:
- sub_800ADF8();
+ SetLinkStandbyCallback();
tState = 10;
break;
case 10:
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 4a7f4ea73..d2ebcbb85 100644
--- a/src/scrcmd.c
+++ b/src/scrcmd.c
@@ -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;
}
@@ -1474,7 +1475,7 @@ bool8 ScrCmd_showcontestwinner(struct ScriptContext *ctx)
if (contestWinnerId != CONTEST_WINNER_ARTIST)
SetContestWinnerForPainting(contestWinnerId);
- ShowContestWinner();
+ ShowContestWinnerPainting();
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_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 70f68b879..000000000
--- a/src/script_pokemon_util_80F87D8.c
+++ /dev/null
@@ -1,725 +0,0 @@
-#include "global.h"
-#include "battle.h"
-#include "battle_gfx_sfx_util.h"
-#include "berry.h"
-#include "contest.h"
-#include "contest_util.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/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
- && 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] = 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
- && 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 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 83626710f..3f69e0419 100644
--- a/src/secret_base.c
+++ b/src/secret_base.c
@@ -964,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:
@@ -1045,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;
}
@@ -1062,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;
}
diff --git a/src/shop.c b/src/shop.c
index 837ba1bca..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();
}
@@ -446,7 +446,7 @@ static void CB2_InitBuyMenu(void)
ResetPaletteFade();
ResetSpriteData();
ResetTasks();
- clear_scheduled_bg_copies_to_vram();
+ ClearScheduledBgCopiesToVram();
gShopDataPtr = AllocZeroed(sizeof(struct ShopData));
gShopDataPtr->scrollIndicatorsTaskId = 0xFF;
gShopDataPtr->itemSpriteIds[0] = 0xFF;
@@ -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)
diff --git a/src/slot_machine.c b/src/slot_machine.c
index d1cb05b18..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,23 +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[];
-
-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;
@@ -42,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)
@@ -55,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 reelPositions[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;
@@ -83,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);
@@ -153,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 GetTagAtRest(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);
@@ -189,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[22];
-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,
@@ -465,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,
};
@@ -679,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;
}
@@ -696,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:
@@ -734,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();
@@ -760,7 +970,7 @@ static void CB2_SlotMachineLoop(void)
UpdatePaletteFade();
}
-static void SlotMachine_VBlankCallback(void)
+static void SlotMachine_VBlankCB(void)
{
LoadOam();
ProcessSpriteCopyRequests();
@@ -771,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);
@@ -832,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->reelPositions[i] = gInitialReelPositions[i][sSlotMachine->luckyGame] % REEL_NUM_TAGS;
- sSlotMachine->reelPixelOffsets[i] = REEL_NUM_TAGS * REEL_TAG_HEIGHT - sSlotMachine->reelPositions[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();
@@ -882,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)
@@ -952,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;
@@ -1403,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)))
{
@@ -1413,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;
@@ -1424,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];
}
}
}
@@ -1432,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)
@@ -1444,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;
@@ -1454,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;
}
@@ -1466,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;
}
@@ -1480,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)
{
@@ -1504,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)
@@ -1527,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;
@@ -1550,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;
@@ -1577,12 +1818,12 @@ static void CheckMatch_CenterRow(void)
c1 = GetTagAtRest(LEFT_REEL, 2);
c2 = GetTagAtRest(MIDDLE_REEL, 2);
c3 = GetTagAtRest(RIGHT_REEL, 2);
- match = GetMatchFromSymbolsInRow(c1, c2, c3);
- if (match != SLOT_MACHINE_MATCHED_NONE)
+ 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);
}
}
@@ -1593,26 +1834,26 @@ static void CheckMatch_TopAndBottom(void)
c1 = GetTagAtRest(LEFT_REEL, 1);
c2 = GetTagAtRest(MIDDLE_REEL, 1);
c3 = GetTagAtRest(RIGHT_REEL, 1);
- match = GetMatchFromSymbolsInRow(c1, c2, c3);
- if (match != SLOT_MACHINE_MATCHED_NONE)
+ 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 = GetTagAtRest(LEFT_REEL, 3);
c2 = GetTagAtRest(MIDDLE_REEL, 3);
c3 = GetTagAtRest(RIGHT_REEL, 3);
- match = GetMatchFromSymbolsInRow(c1, c2, c3);
- if (match != SLOT_MACHINE_MATCHED_NONE)
+ 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);
}
}
@@ -1623,42 +1864,42 @@ static void CheckMatch_Diagonals(void)
c1 = GetTagAtRest(LEFT_REEL, 1);
c2 = GetTagAtRest(MIDDLE_REEL, 2);
c3 = GetTagAtRest(RIGHT_REEL, 3);
- match = GetMatchFromSymbolsInRow(c1, c2, c3);
- if (match != SLOT_MACHINE_MATCHED_NONE)
+ 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 = GetTagAtRest(LEFT_REEL, 3);
c2 = GetTagAtRest(MIDDLE_REEL, 2);
c3 = GetTagAtRest(RIGHT_REEL, 1);
- match = GetMatchFromSymbolsInRow(c1, c2, c3);
- if (match != SLOT_MACHINE_MATCHED_NONE)
+ 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)
@@ -1676,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)
@@ -1707,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;
@@ -1722,7 +1963,7 @@ static bool8 AwardPayoutAction_GivePayoutToPlayer(struct Task *task)
static bool8 AwardPayoutAction_FreeTask(struct Task *task)
{
- if (sub_8103E7C())
+ if (TryStopMatchLinesFlashing())
DestroyTask(FindTaskIdByFunc(RunAwardPayoutActions));
return FALSE;
}
@@ -1741,17 +1982,17 @@ static bool8 AwardPayoutAction_FreeTask(struct Task *task)
// .-----------------.
static u8 GetTagAtRest(u8 reel, s16 offset)
{
- s16 pos = (sSlotMachine->reelPositions[reel] + offset) % REEL_NUM_TAGS;
+ s16 pos = (sSlotMachine->reelPositions[reel] + offset) % SYMBOLS_PER_REEL;
if (pos < 0)
- pos += REEL_NUM_TAGS;
- return gReelSymbols[reel][pos];
+ pos += SYMBOLS_PER_REEL;
+ return sReelSymbolTileTags[reel][pos];
}
// Calculates GetTagAtRest as if the reel were snapped downwards into place.
static u8 GetTag(u8 reel, s16 offset)
{
s16 inc = 0;
- s16 pixelOffset = sSlotMachine->reelPixelOffsets[reel] % REEL_TAG_HEIGHT;
+ s16 pixelOffset = sSlotMachine->reelPixelOffsets[reel] % REEL_SYMBOL_HEIGHT;
if (pixelOffset != 0)
inc = -1;
return GetTagAtRest(reel, offset + inc);
@@ -1762,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->reelPositions[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;
}
@@ -1805,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;
@@ -1848,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;
}
@@ -1897,30 +2141,34 @@ 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)
@@ -1936,7 +2184,9 @@ static bool8 AreTagsAtPosition_Reel1(s16 pos, u8 tag1, u8 tag2)
static bool8 AreCherriesOnScreen_Reel1(s16 offsetFromCenter)
{
- if (GetTag(LEFT_REEL, 1 - offsetFromCenter) == SLOT_MACHINE_TAG_CHERRY || GetTag(LEFT_REEL, 2 - offsetFromCenter) == SLOT_MACHINE_TAG_CHERRY || GetTag(LEFT_REEL, 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;
@@ -1959,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;
}
@@ -2020,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)
@@ -2085,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)
@@ -2151,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;
@@ -2166,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
@@ -2289,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;
@@ -2297,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;
@@ -2306,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;
@@ -2319,7 +2569,7 @@ 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)
@@ -2334,7 +2584,7 @@ static void DecideReelTurns_NoBiasTag_Reel3_Bet1(void)
while (1)
{
u8 tag3;
- if (!(tag1 == (tag3 = GetTag(RIGHT_REEL, 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++;
}
@@ -2465,273 +2715,312 @@ static void DecideReelTurns_NoBiasTag_Reel3_Bet3(void)
}
}
-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->sColor >= maxColorChange) {
+ // Reached peak darkness, reverse
+ sprite->sColorIncr = -sprite->sColorIncr;
}
- else if (sprite->data[4] >= r4)
- sprite->data[5] = -sprite->data[5];
- if (sprite->data[2])
- sprite->data[3] <<= 1;
+ 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;
@@ -2743,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++)
@@ -2753,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
@@ -2794,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;
@@ -2816,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;
@@ -2896,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)
@@ -2928,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;
@@ -2976,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]);
@@ -3046,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);
}
@@ -3116,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)
@@ -3146,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)
@@ -3187,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)
{
@@ -3252,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;
@@ -3285,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;
@@ -3294,7 +3601,7 @@ 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;
@@ -3303,28 +3610,31 @@ static void sub_8104F18(struct Sprite *sprite)
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])
@@ -3340,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)
@@ -3391,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;
@@ -3470,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;
@@ -3563,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;
@@ -3678,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;
@@ -3746,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:
@@ -3900,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;
}
}
@@ -3958,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);
}
@@ -4012,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]++;
@@ -4025,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)
@@ -4066,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) * ARRAY_COUNT(gSlotMachineSpriteSheets));
- for (i = 0; i < ARRAY_COUNT(gSlotMachineSpriteSheets); 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;
@@ -4233,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},
@@ -4461,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},
@@ -4475,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},
@@ -4484,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},
@@ -4493,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},
@@ -4505,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,
@@ -4726,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,
@@ -4743,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,
@@ -4760,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,
@@ -4777,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,
@@ -4794,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,
@@ -4811,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,
@@ -4828,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,
@@ -4845,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 },
@@ -4855,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),
@@ -5008,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),
@@ -5120,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),
@@ -5139,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,
@@ -5510,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,
@@ -5567,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,
@@ -5600,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,
@@ -5649,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,
@@ -5690,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,
@@ -5723,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,
@@ -5772,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,
@@ -5813,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,
@@ -5854,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,
@@ -5895,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,
@@ -5952,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,
@@ -5969,7 +6333,7 @@ static const struct Subsprite gUnknown_085A80C8[] =
}
};
-static const struct Subsprite gUnknown_085A80CC[] =
+static const struct Subsprite sSubsprites_DigitalDisplay_Unused2[] =
{
{
.x = -8,
@@ -5981,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,
@@ -6091,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,
@@ -6124,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,
@@ -6149,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,
@@ -6174,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,
@@ -6199,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,
@@ -6224,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,
@@ -6249,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,
@@ -6274,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,
@@ -6299,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,
@@ -6324,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,
@@ -6349,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,
@@ -6406,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,
@@ -6439,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,
@@ -6496,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,
@@ -6553,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,
@@ -6586,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,
@@ -6643,190 +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[22] =
-{
- { .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 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 = 18 },
- { .data = NULL, .size = 0x200, .tag = 19 },
- { .data = NULL, .size = 0x300, .tag = 20 },
- { .data = NULL, .size = 0x300, .tag = 21 },
+ { .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 gUnknown_083EDCDC = gUnknown_08DD19F8;
+static const u8 *const sReelBackground_Tilemap = gSlotMachineReelBackground_Tilemap;
-static const u8 sUnused2[][2] =
+static const u16 sUnused[] =
{
- {0x7B, 0x6F},
- {0x68, 0x69},
- {0xAB, 0x36},
- {0xFF, 0x7F},
- {0x50, 0x57},
- {0xC0, 0x7E},
- {0xBA, 2},
- {0xBA, 2},
- {0xFD, 1},
- {0xFD, 1}
+ 0x6F7B,
+ 0x6968,
+ 0x36AB,
+ 0x7FFF,
+ 0x5750,
+ 0x7EC0,
+ 0x02BA,
+ 0x02BA,
+ 0x01FD,
+ 0x01FD,
};
-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[] =
+// 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] =
{
- gUnknown_085A83FC,
- gUnknown_085A83FE,
- gUnknown_085A8400,
- gUnknown_085A8402,
- gUnknown_085A8404,
+ [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 gUnknown_083EDD1C[] =
+static const u16 *const sDarkMatchLinePalTable[NUM_MATCH_LINES] =
{
- gSlotMachineMenu_Pal + 0x4A,
- gSlotMachineMenu_Pal + 0x4B,
- gSlotMachineMenu_Pal + 0x4C,
- gSlotMachineMenu_Pal + 0x4D,
- gSlotMachineMenu_Pal + 0x4E,
+ [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 gUnknown_083EDD30[] = {0x4A, 0x4B, 0x4C, 0x4E, 0x4D};
+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 gBettingTilesId[][2] =
+static const u8 sBetToMatchLineIds[MAX_BET][2] =
{
- {0, 0},
- {1, 2},
- {3, 4},
+ {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 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 u8 sMatchLinesPerBet[MAX_BET] = { 1, 2, 2 };
-static const u16 *const gUnknown_083EDDA0[] =
+// 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[] =
{
- gUnknown_085A843E,
- gUnknown_085A845E,
- gUnknown_085A847E,
+ sFlashingLightsInside_Pal,
+ sFlashingLightsMiddle_Pal,
+ sFlashingLightsOutside_Pal,
};
-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 sSlotMachineMenu_Pal = {gSlotMachineMenu_Pal + 16};
-static const u16 *const gUnknown_083EDE10[] =
+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[] =
{
- gUnknown_085A84B0,
- gUnknown_085A84D0,
- gUnknown_085A84F0,
- gUnknown_08DCF230,
+ 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 gUnknown_083EDE20 = gUnknown_08DCF230;
-static const u16 gPalette_83EDE24[] = INCBIN_U16("graphics/slot_machine/85A8524.bin");
+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..361624b44 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 88ad364c7..68a316185 100644
--- a/src/start_menu.c
+++ b/src/start_menu.c
@@ -463,7 +463,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:
diff --git a/src/starter_choose.c b/src/starter_choose.c
index 6295e33ca..2585f3408 100644
--- a/src/starter_choose.c
+++ b/src/starter_choose.c
@@ -414,7 +414,7 @@ void CB2_ChooseStarter(void)
DeactivateAllTextPrinters();
LoadUserWindowBorderGfx(0, 0x2A8, 0xD0);
- clear_scheduled_bg_copies_to_vram();
+ ClearScheduledBgCopiesToVram();
ScanlineEffect_Stop();
ResetTasks();
ResetSpriteData();
@@ -474,7 +474,7 @@ static void CB2_StarterChoose(void)
RunTasks();
AnimateSprites();
BuildOamBuffer();
- do_scheduled_bg_tilemap_copies_to_vram();
+ DoScheduledBgTilemapCopiesToVram();
UpdatePaletteFade();
}
diff --git a/src/strings.c b/src/strings.c
index 2ea06c1ad..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 SE_KON}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.");
@@ -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_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[] = _("{SPECIAL_F7 0x00} saved the game.");
+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?");
@@ -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 SE_KON}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/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 aa91351df..108601685 100644
--- a/src/title_screen.c
+++ b/src/title_screen.c
@@ -609,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 3a0f07ac6..6480f3594 100644
--- a/src/trade.c
+++ b/src/trade.c
@@ -246,9 +246,9 @@ 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)
@@ -295,9 +295,9 @@ static bool32 IsWirelessTrade(void)
return FALSE;
}
-static void sub_8077288(u8 unused)
+static void SetTradeLinkStandbyCallback(u8 unused)
{
- sub_800ADF8();
+ SetLinkStandbyCallback();
}
static bool32 _IsLinkTaskFinished(void)
@@ -445,7 +445,7 @@ static void CB2_CreateTradeMenu(void)
if (gWirelessCommType)
{
sub_801048C(TRUE);
- sub_800ADF8();
+ SetLinkStandbyCallback();
}
}
break;
@@ -570,7 +570,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);
@@ -825,7 +825,7 @@ static void LinkTradeWaitForFade(void)
}
else
{
- sub_800ABF4(32);
+ SetCloseLinkCallbackAndType(32);
sTradeMenuData->tradeMenuFunc = TRADEMENUFUNC_START_LINK_TRADE;
}
}
@@ -983,7 +983,7 @@ static bool8 BufferTradeParties(void)
case 3:
if (id == 0)
{
- sub_80771AC(1);
+ RequestLinkData(1);
}
sTradeMenuData->bufferPartyState++;
break;
@@ -1002,7 +1002,7 @@ static bool8 BufferTradeParties(void)
case 7:
if (id == 0)
{
- sub_80771AC(1);
+ RequestLinkData(1);
}
sTradeMenuData->bufferPartyState++;
break;
@@ -1021,7 +1021,7 @@ static bool8 BufferTradeParties(void)
case 11:
if (id == 0)
{
- sub_80771AC(1);
+ RequestLinkData(1);
}
sTradeMenuData->bufferPartyState++;
break;
@@ -1040,7 +1040,7 @@ static bool8 BufferTradeParties(void)
case 15:
if (id == 0)
{
- sub_80771AC(3);
+ RequestLinkData(3);
}
sTradeMenuData->bufferPartyState++;
break;
@@ -1059,7 +1059,7 @@ static bool8 BufferTradeParties(void)
case 19:
if (id == 0)
{
- sub_80771AC(4);
+ RequestLinkData(4);
}
sTradeMenuData->bufferPartyState++;
break;
@@ -1652,11 +1652,11 @@ static void CancelTrade_1(void)
{
if (gWirelessCommType)
{
- sub_800ADF8();
+ SetLinkStandbyCallback();
}
else
{
- sub_800ABF4(12);
+ SetCloseLinkCallbackAndType(12);
}
sTradeMenuData->tradeMenuFunc = TRADEMENUFUNC_CANCEL_TRADE_2;
@@ -1692,7 +1692,7 @@ static void LinkTradeWaitForQueue(void)
{
if (!sub_801048C(FALSE) && GetNumQueuedActions() == 0)
{
- sub_800ADF8();
+ SetLinkStandbyCallback();
sTradeMenuData->tradeMenuFunc = TRADEMENUFUNC_START_LINK_TRADE;
}
}
@@ -2573,7 +2573,7 @@ static void sub_807AA28(struct Sprite *sprite)
{
if (++sprite->data[0] == 10)
{
- PlaySE(SE_BOWA);
+ PlaySE(SE_BALL);
sprite->data[0] = 0;
}
}
@@ -2582,7 +2582,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;
}
}
@@ -2620,7 +2620,7 @@ static void sub_807AB04(struct Sprite *sprite)
{
if (++sprite->data[0] == 15)
{
- PlaySE(SE_W107);
+ PlaySE(SE_M_MINIMIZE);
sprite->data[0] = 0;
}
}
@@ -3289,7 +3289,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)
@@ -3449,7 +3449,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;
@@ -3503,7 +3503,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)
{
@@ -3600,7 +3600,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:
@@ -3704,7 +3704,7 @@ static bool8 AnimateTradeSequenceCable(void)
case 68:
if (++sTradeData->timer == 10)
{
- PlayFanfare(MUS_FANFA5);
+ PlayFanfare(MUS_EVOLVED);
}
if (sTradeData->timer == 250)
{
@@ -3781,7 +3781,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)
@@ -3946,7 +3946,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;
@@ -4001,7 +4001,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)
{
@@ -4116,7 +4116,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:
@@ -4219,7 +4219,7 @@ static bool8 AnimateTradeSequenceWireless(void)
case 68:
if (++sTradeData->timer == 10)
{
- PlayFanfare(MUS_FANFA5);
+ PlayFanfare(MUS_EVOLVED);
}
if (sTradeData->timer == 250)
{
@@ -4361,10 +4361,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);
@@ -4394,17 +4394,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;
@@ -4566,7 +4566,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;
@@ -4644,7 +4644,7 @@ static void CB2_SaveAndEndTrade(void)
case 41:
if (sTradeData->timer == 0)
{
- sub_8077288(1);
+ SetTradeLinkStandbyCallback(1);
gMain.state = 42;
}
else
@@ -4663,7 +4663,7 @@ static void CB2_SaveAndEndTrade(void)
if (++sTradeData->timer > 60)
{
gMain.state++;
- sub_8077288(2);
+ SetTradeLinkStandbyCallback(2);
}
break;
case 6:
@@ -4685,11 +4685,11 @@ static void CB2_SaveAndEndTrade(void)
{
if (gWirelessCommType && gMain.savedCallback == CB2_StartCreateTradeMenu)
{
- sub_8077288(3);
+ SetTradeLinkStandbyCallback(3);
}
else
{
- sub_800AC34();
+ SetCloseLinkCallback();
}
gMain.state++;
}
@@ -4809,7 +4809,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])
{
@@ -4902,7 +4902,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;
@@ -4950,7 +4950,7 @@ static void CB2_SaveAndEndWirelessTrade(void)
case 7:
if (sTradeData->timer == 0)
{
- sub_8077288(1);
+ SetTradeLinkStandbyCallback(1);
gMain.state = 8;
}
else
@@ -4969,7 +4969,7 @@ static void CB2_SaveAndEndWirelessTrade(void)
if (++sTradeData->timer > 60)
{
gMain.state++;
- sub_8077288(2);
+ SetTradeLinkStandbyCallback(2);
}
break;
case 10:
@@ -4983,7 +4983,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/trainer_card.c b/src/trainer_card.c
index d625bc13e..9d6838176 100755
--- a/src/trainer_card.c
+++ b/src/trainer_card.c
@@ -25,7 +25,7 @@
#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/game_stat.h"
#include "constants/battle_frontier.h"
@@ -422,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;
@@ -441,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)
@@ -460,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;
@@ -480,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)
@@ -497,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);
@@ -518,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;
}
@@ -1730,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 d6cb49837..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)
{
@@ -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 b3722e87a..37c29ed2e 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[] = {
@@ -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);
}
}
@@ -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;
@@ -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)
@@ -3810,10 +3804,10 @@ static void sub_80F0708(void) // FIXME: register allocation shenanigans
switch (gSaveBlock1Ptr->tvShows[i].common.kind)
{
case TVSHOW_CONTEST_LIVE_UPDATES:
- j = (&gSaveBlock1Ptr->tvShows[i])->contestLiveUpdates.species;
- sub_80F0B24(j, 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;
@@ -4307,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);
@@ -5173,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;
@@ -5183,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]);
}
diff --git a/src/union_room.c b/src/union_room.c
index 1ef8cd4cb..f79dd9cc4 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"
@@ -1018,13 +1018,13 @@ static void Task_TryJoinLinkGroup(u8 taskId)
// Trading is allowed, or not trading at all
AskToJoinRfuGroup(data, id);
data->state = LG_STATE_ASK_JOIN_GROUP;
- PlaySE(SE_PN_ON);
+ PlaySE(SE_POKENAV_ON);
}
else
{
StringCopy(gStringVar4, sCantTransmitToTrainerTexts[readyStatus - 1]);
data->state = LG_STATE_TRADE_NOT_READY;
- PlaySE(SE_PN_ON);
+ PlaySE(SE_POKENAV_ON);
}
}
else
@@ -1483,7 +1483,7 @@ static void Task_ExchangeCards(u8 taskId)
{
case 0:
if (GetMultiplayerId() == 0)
- sub_800A4D8(2);
+ SendBlockRequest(2);
gTasks[taskId].data[0]++;
break;
case 1:
@@ -1759,7 +1759,7 @@ static void Task_RunScriptAndFadeToActivity(u8 taskId)
}
else
{
- sub_800ADF8();
+ SetLinkStandbyCallback();
data[0] = 3;
}
}
@@ -1795,7 +1795,7 @@ static void Task_RunScriptAndFadeToActivity(u8 taskId)
DestroyTask(taskId);
break;
case 7:
- sub_800AC34();
+ SetCloseLinkCallback();
data[0] = 8;
break;
case 8:
@@ -2018,7 +2018,7 @@ static void Task_MEvent_Leader(u8 taskId)
Free(data->field_8);
Free(data->field_0);
Free(data->field_4);
- sub_800ADF8();
+ SetLinkStandbyCallback();
data->state++;
break;
case 17:
@@ -2118,7 +2118,7 @@ static void Task_CardOrNewsWithFriend(u8 taskId)
RedrawListMenu(data->listTaskId);
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_PN_ON);
+ PlaySE(SE_POKENAV_ON);
data->state = 4;
}
else
@@ -2188,7 +2188,7 @@ static void Task_CardOrNewsWithFriend(u8 taskId)
break;
case 11:
data->state++;
- sub_800ADF8();
+ SetLinkStandbyCallback();
break;
case 12:
if (IsLinkTaskFinished())
@@ -2279,7 +2279,7 @@ static void Task_CardOrNewsOverWireless(u8 taskId)
LoadWirelessStatusIndicatorSpriteGfx();
CreateWirelessStatusIndicatorSprite(0, 0);
CreateTask_RfuReconnectWithParent(data->field_0->arr[0].gname_uname.playerName, ReadAsU16(data->field_0->arr[0].gname_uname.gname.unk_00.playerTrainerId));
- PlaySE(SE_PN_ON);
+ PlaySE(SE_POKENAV_ON);
data->state = 4;
}
else
@@ -2367,7 +2367,7 @@ static void Task_CardOrNewsOverWireless(u8 taskId)
break;
case 13:
data->state++;
- sub_800ADF8();
+ SetLinkStandbyCallback();
break;
case 14:
if (IsLinkTaskFinished())
@@ -2714,7 +2714,7 @@ static void Task_RunUnionRoom(u8 taskId)
}
break;
case UR_STATE_REQUEST_DECLINED:
- sub_800AC34();
+ SetCloseLinkCallback();
uroom->state = UR_STATE_CANCEL_REQUEST_PRINT_MSG;
break;
case UR_STATE_SEND_TRADE_REQUST:
@@ -2763,7 +2763,7 @@ static void Task_RunUnionRoom(u8 taskId)
if (PrintOnTextbox(&uroom->textState, gStringVar4))
{
uroom->state = UR_STATE_WAIT_FINISH_READING_CARD;
- sub_800ADF8();
+ SetLinkStandbyCallback();
uroom->partnerYesNoResponse = 0;
uroom->recvActivityRequest[0] = 0;
}
@@ -2846,7 +2846,7 @@ static void Task_RunUnionRoom(u8 taskId)
uroom->state = UR_STATE_START_ACTIVITY_FREE_UROOM;
break;
case UR_STATE_PLAYER_CONTACTED_YOU:
- PlaySE(SE_PINPON);
+ PlaySE(SE_DING_DONG);
sub_800EF7C();
uroom->state = UR_STATE_RECV_CONTACT_DATA;
uroom->recvActivityRequest[0] = 0;
@@ -2940,7 +2940,7 @@ static void Task_RunUnionRoom(u8 taskId)
}
break;
case UR_STATE_DECLINE_ACTIVITY_REQUEST:
- sub_800AC34();
+ SetCloseLinkCallback();
uroom->state = UR_STATE_CANCEL_REQUEST_PRINT_MSG;
break;
case UR_STATE_CANCEL_REQUEST_PRINT_MSG:
@@ -2962,7 +2962,7 @@ static void Task_RunUnionRoom(u8 taskId)
ScheduleFieldMessageWithFollowupState(UR_STATE_START_ACTIVITY_LINK, gStringVar4);
break;
case UR_STATE_START_ACTIVITY_LINK:
- sub_800ADF8();
+ SetLinkStandbyCallback();
uroom->state = UR_STATE_START_ACTIVITY_WAIT_FOR_LINK;
break;
case UR_STATE_START_ACTIVITY_WAIT_FOR_LINK:
@@ -3231,7 +3231,7 @@ static bool32 UnionRoom_HandleContactFromOtherPlayer(struct WirelessLink_URoom *
else if (id == 2) // No activity
{
uroom->state = UR_STATE_CANCEL_REQUEST_PRINT_MSG;
- sub_800AC34();
+ SetCloseLinkCallback();
return FALSE;
}
}
diff --git a/src/union_room_battle.c b/src/union_room_battle.c
index 4b2aa0bb1..b9ddd74a7 100644
--- a/src/union_room_battle.c
+++ b/src/union_room_battle.c
@@ -174,7 +174,7 @@ void CB2_UnionRoomBattle(void)
}
else
{
- sub_800AC34();
+ SetCloseLinkCallback();
if (gBlockRecvBuffer[GetMultiplayerId()][0] == (ACTIVITY_DECLINE | IN_UNION_ROOM))
{
gMain.state = 6;
@@ -190,7 +190,7 @@ void CB2_UnionRoomBattle(void)
case 50:
if (!UpdatePaletteFade())
{
- sub_800ADF8();
+ SetLinkStandbyCallback();
gMain.state++;
}
break;
diff --git a/src/union_room_chat.c b/src/union_room_chat.c
index fefb285a8..fd2a95791 100755
--- a/src/union_room_chat.c
+++ b/src/union_room_chat.c
@@ -1267,7 +1267,7 @@ static void Chat_Exit(void)
case 5:
if (IsLinkTaskFinished() && !sub_8011A9C())
{
- sub_800AC34();
+ SetCloseLinkCallback();
sChat->exitDelayTimer = 0;
sChat->funcState++;
}
@@ -1302,7 +1302,7 @@ static void Chat_Drop(void)
case 1:
if (!IsDisplaySubtaskActive(0) && IsLinkTaskFinished() && !sub_8011A9C())
{
- sub_800AC34();
+ SetCloseLinkCallback();
sChat->exitDelayTimer = 0;
sChat->funcState++;
}
@@ -1348,7 +1348,7 @@ static void Chat_Disbanded(void)
case 2:
if (IsDisplaySubtaskActive(0) != TRUE && IsLinkTaskFinished() && !sub_8011A9C())
{
- sub_800AC34();
+ SetCloseLinkCallback();
sChat->exitDelayTimer = 0;
sChat->funcState++;
}
@@ -1646,7 +1646,7 @@ static void AppendTextToMessage(void)
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++;
}
@@ -1670,7 +1670,7 @@ static void AppendTextToMessage(void)
str = GetEndOfMessagePtr();
while (--strLength != -1 && sChat->bufferCursorPos < MAX_MESSAGE_LENGTH)
{
- if (*charsStr == CHAR_SPECIAL_F9)
+ if (*charsStr == CHAR_EXTRA_SYMBOL)
{
*str = *charsStr;
charsStr++;
@@ -1705,7 +1705,7 @@ static void SwitchCaseOfLastMessageCharacter(void)
sChat->lastBufferCursorPos = sChat->bufferCursorPos - 1;
str = GetLastCharOfMessagePtr();
- if (*str != CHAR_SPECIAL_F9)
+ if (*str != CHAR_EXTRA_SYMBOL)
{
character = sCaseToggleTable[*str];
if (character)
@@ -1763,7 +1763,7 @@ static u8 *GetLastCharOfMessagePtr(void)
while (*currChar != EOS)
{
lastChar = currChar;
- if (*currChar == CHAR_SPECIAL_F9)
+ if (*currChar == CHAR_EXTRA_SYMBOL)
currChar++;
currChar++;
}
@@ -1784,7 +1784,7 @@ static u16 GetNumOverflowCharsInMessage(void)
strLength -= 10;
for (i = 0; i < strLength; i++)
{
- if (*str == CHAR_SPECIAL_F9)
+ if (*str == CHAR_EXTRA_SYMBOL)
str++;
str++;
@@ -1925,7 +1925,7 @@ static u8 *GetLimitedMessageStartPtr(void)
u8 *str = sChat->messageEntryBuffer;
for (i = 0; i < numChars; i++)
{
- if (*str == CHAR_SPECIAL_F9)
+ if (*str == CHAR_EXTRA_SYMBOL)
*str++;
str++;
@@ -1942,7 +1942,7 @@ static u16 GetLimitedMessageStartPos(void)
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++;
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/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 00ab65817..aa2bd8019 100644
--- a/src/wallclock.c
+++ b/src/wallclock.c
@@ -660,7 +660,7 @@ static void LoadWallClockGraphics(void)
InitWindows(gUnknown_085B21DC);
DeactivateAllTextPrinters();
LoadUserWindowBorderGfx(0, 0x250, 0xd0);
- clear_scheduled_bg_copies_to_vram();
+ ClearScheduledBgCopiesToVram();
ScanlineEffect_Stop();
ResetTasks();
ResetSpriteData();
@@ -780,7 +780,7 @@ static void WallClockMainCallback(void)
RunTasks();
AnimateSprites();
BuildOamBuffer();
- do_scheduled_bg_tilemap_copies_to_vram();
+ DoScheduledBgTilemapCopiesToVram();
UpdatePaletteFade();
}
diff --git a/src/wild_encounter.c b/src/wild_encounter.c
index 1c4fd24fd..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;