summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorTetrable <atifhuss386@gmail.com>2019-01-02 21:25:14 +0000
committerTetrable <atifhuss386@gmail.com>2019-01-02 21:25:14 +0000
commita3ebca4d814adcf245212cb549f72812f2cf39c6 (patch)
tree88fddcd03a5f19cf84b6199863f95fd06f1954bf /src
parent1e3da62d24ad91e4d69ac6974476fd5ea47cae9b (diff)
parenta0ff38d0be4f618822d96cc7833e7c331ee78b5f (diff)
Fix merge conflicts
Diffstat (limited to 'src')
-rw-r--r--src/battle_anim.c2
-rw-r--r--src/battle_anim_80A5C6C.c60
-rwxr-xr-xsrc/battle_anim_8170478.c8
-rw-r--r--src/battle_anim_effects_1.c12
-rwxr-xr-xsrc/battle_anim_effects_2.c10
-rwxr-xr-xsrc/battle_anim_effects_3.c1290
-rw-r--r--src/battle_anim_utility_funcs.c7
-rw-r--r--src/battle_arena.c6
-rw-r--r--src/battle_bg.c6
-rw-r--r--src/battle_controller_player.c4
-rw-r--r--src/battle_controllers.c2
-rw-r--r--src/battle_dome.c2
-rw-r--r--src/battle_factory.c2
-rw-r--r--src/battle_interface.c4
-rw-r--r--src/battle_intro.c20
-rw-r--r--src/battle_main.c48
-rw-r--r--src/battle_palace.c2
-rw-r--r--src/battle_pyramid.c12
-rw-r--r--src/battle_pyramid_bag.c2
-rw-r--r--src/battle_script_commands.c14
-rw-r--r--src/battle_setup.c2
-rw-r--r--src/battle_tent.c6
-rw-r--r--src/battle_tower.c6
-rw-r--r--src/berry.c18
-rw-r--r--src/berry_blender.c16
-rw-r--r--src/berry_fix_program.c18
-rw-r--r--src/bg.c166
-rw-r--r--src/cable_club.c10
-rw-r--r--src/clock.c8
-rw-r--r--src/contest.c7
-rw-r--r--src/contest_painting_effects.c771
-rw-r--r--src/credits.c4
-rw-r--r--src/dark.c20
-rw-r--r--src/data/region_map/region_map_entries.h429
-rw-r--r--src/decompress.c12
-rw-r--r--src/decoration.c2
-rw-r--r--src/dragon.c4
-rw-r--r--src/easy_chat.c4
-rw-r--r--src/egg_hatch.c12
-rw-r--r--src/event_obj_lock.c11
-rw-r--r--src/event_object_movement.c4
-rw-r--r--src/evolution_scene.c63
-rw-r--r--src/field_control_avatar.c78
-rw-r--r--src/field_effect.c14
-rwxr-xr-xsrc/field_message_box.c56
-rw-r--r--src/field_player_avatar.c11
-rw-r--r--src/field_screen_effect.c18
-rw-r--r--src/field_special_scene.c32
-rw-r--r--src/field_specials.c137
-rw-r--r--src/field_tasks.c256
-rw-r--r--src/fieldmap.c271
-rw-r--r--src/fight.c4
-rw-r--r--src/fldeff_cut.c4
-rw-r--r--src/fldeff_flash.c2
-rw-r--r--src/fldeff_misc.c14
-rw-r--r--src/frontier_util.c4
-rw-r--r--src/ghost.c6
-rw-r--r--src/graphics.c6
-rw-r--r--src/hall_of_fame.c10
-rw-r--r--src/ice.c16
-rwxr-xr-xsrc/item_use.c15
-rw-r--r--src/link.c2
-rw-r--r--src/link_rfu.c4
-rw-r--r--src/load_save.c31
-rw-r--r--src/mail.c46
-rw-r--r--src/menu.c54
-rw-r--r--src/mirage_tower.c6
-rw-r--r--src/mossdeep_gym.c3
-rw-r--r--src/naming_screen.c2
-rw-r--r--src/new_game.c5
-rw-r--r--src/overworld.c187
-rw-r--r--src/palette.c2
-rwxr-xr-xsrc/party_menu.c14
-rw-r--r--src/player_pc.c6
-rw-r--r--src/pokeball.c2
-rwxr-xr-xsrc/pokedex_area_screen.c6
-rw-r--r--src/pokemon.c12
-rw-r--r--src/pokemon_icon.c14
-rw-r--r--src/pokemon_storage_system.c22
-rw-r--r--src/pokemon_summary_screen.c82
-rw-r--r--src/post_battle_event_funcs.c6
-rw-r--r--src/psychic.c40
-rw-r--r--src/rayquaza_scene.c8
-rw-r--r--src/record_mixing.c771
-rw-r--r--src/region_map.c204
-rw-r--r--src/reshow_battle_screen.c4
-rw-r--r--src/rock.c2
-rw-r--r--src/rom_8011DC0.c34
-rw-r--r--src/save.c12
-rw-r--r--src/save_location.c19
-rw-r--r--src/scrcmd.c52
-rwxr-xr-xsrc/script_pokemon_util_80F87D8.c4
-rw-r--r--src/secret_base.c12
-rw-r--r--src/start_menu.c20
-rw-r--r--src/starter_choose.c2
-rw-r--r--src/title_screen.c10
-rw-r--r--src/trade.c6389
-rw-r--r--src/tv.c4
-rw-r--r--src/unk_pokedex_area_screen_helper.c8
-rw-r--r--src/unk_transition.c10
-rw-r--r--src/wallclock.c16
-rw-r--r--src/window.c12
102 files changed, 9678 insertions, 2521 deletions
diff --git a/src/battle_anim.c b/src/battle_anim.c
index d1550f31e..7dd1526dd 100644
--- a/src/battle_anim.c
+++ b/src/battle_anim.c
@@ -2283,7 +2283,7 @@ static void ScriptCmd_setalpha(void)
sBattleAnimScriptPtr++;
half1 = *(sBattleAnimScriptPtr++);
half2 = *(sBattleAnimScriptPtr++) << 8;
- SetGpuReg(REG_OFFSET_BLDCNT, 0x3F40);
+ SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_EFFECT_BLEND | BLDCNT_TGT2_ALL);
SetGpuReg(REG_OFFSET_BLDALPHA, half1 | half2);
}
diff --git a/src/battle_anim_80A5C6C.c b/src/battle_anim_80A5C6C.c
index 7b9e975c4..0800e67a0 100644
--- a/src/battle_anim_80A5C6C.c
+++ b/src/battle_anim_80A5C6C.c
@@ -703,7 +703,7 @@ void sub_80A67F4(struct Sprite *sprite)
DestroyAnimSprite(sprite);
}
-void sub_80A6814(u8 taskId)
+void DestroyAnimVisualTaskAndDisableBlend(u8 taskId)
{
SetGpuReg(REG_OFFSET_BLDCNT, 0);
SetGpuReg(REG_OFFSET_BLDALPHA, 0);
@@ -948,7 +948,7 @@ void sub_80A6C68(u32 bgId)
CopyBgTilemapBufferToVram(unkStruct.bgId);
}
-void sub_80A6CC0(u32 bgId, const void *src, u32 tilesOffset)
+void sub_80A6CC0(u32 bgId, const u32 *src, u32 tilesOffset)
{
CpuFill32(0, gUnknown_0202305C, 0x2000);
LZDecompressWram(src, gUnknown_0202305C);
@@ -2092,17 +2092,17 @@ u8 sub_80A8394(u16 species, bool8 isBackpic, u8 a3, s16 x, s16 y, u8 subpriority
return spriteId;
}
-void sub_80A8610(struct Sprite *sprite)
+void DestroySpriteAndFreeResources_(struct Sprite *sprite)
{
DestroySpriteAndFreeResources(sprite);
}
-s16 sub_80A861C(u8 battlerId, u8 a2)
+s16 GetBattlerSpriteCoordAttr(u8 battlerId, u8 attr)
{
u16 species;
u32 personality;
u16 letter;
- u16 var;
+ u16 unownSpecies;
int ret;
const struct MonCoords *coords;
struct BattleSpriteInfo *spriteInfo;
@@ -2123,10 +2123,10 @@ s16 sub_80A861C(u8 battlerId, u8 a2)
{
letter = GET_UNOWN_LETTER(personality);
if (!letter)
- var = SPECIES_UNOWN;
+ unownSpecies = SPECIES_UNOWN;
else
- var = letter + SPECIES_UNOWN_B - 1;
- coords = &gMonBackPicCoords[var];
+ unownSpecies = letter + SPECIES_UNOWN_B - 1;
+ coords = &gMonBackPicCoords[unownSpecies];
}
else if (species == SPECIES_CASTFORM)
{
@@ -2156,16 +2156,17 @@ s16 sub_80A861C(u8 battlerId, u8 a2)
species = spriteInfo[battlerId].transformSpecies;
personality = gTransformedPersonalities[battlerId];
}
+
if (species == SPECIES_UNOWN)
{
letter = GET_UNOWN_LETTER(personality);
if (!letter)
- var = SPECIES_UNOWN;
+ unownSpecies = SPECIES_UNOWN;
else
- var = letter + SPECIES_UNOWN_B - 1;
- coords = &gMonBackPicCoords[var];
+ unownSpecies = letter + SPECIES_UNOWN_B - 1;
+ coords = &gMonBackPicCoords[unownSpecies];
}
- else if (species > SPECIES_EGG)
+ else if (species > NUM_SPECIES)
{
coords = &gMonBackPicCoords[0];
}
@@ -2187,20 +2188,21 @@ s16 sub_80A861C(u8 battlerId, u8 a2)
species = spriteInfo[battlerId].transformSpecies;
personality = gTransformedPersonalities[battlerId];
}
+
if (species == SPECIES_UNOWN)
{
letter = GET_UNOWN_LETTER(personality);
if (!letter)
- var = SPECIES_UNOWN;
+ unownSpecies = SPECIES_UNOWN;
else
- var = letter + SPECIES_UNOWN_B - 1;
- coords = &gMonFrontPicCoords[var];
+ unownSpecies = letter + SPECIES_UNOWN_B - 1;
+ coords = &gMonFrontPicCoords[unownSpecies];
}
else if (species == SPECIES_CASTFORM)
{
coords = &gCastformFrontSpriteCoords[gBattleMonForms[battlerId]];
}
- else if (species > SPECIES_EGG)
+ else if (species > NUM_SPECIES)
{
coords = &gMonFrontPicCoords[0];
}
@@ -2211,22 +2213,22 @@ s16 sub_80A861C(u8 battlerId, u8 a2)
}
}
- switch (a2)
+ switch (attr)
{
- case 0:
+ case BATTLER_COORD_ATTR_HEIGHT:
return (coords->coords & 0xf) * 8;
- case 1:
+ case BATTLER_COORD_ATTR_WIDTH:
return (coords->coords >> 4) * 8;
- case 4:
- return GetBattlerSpriteCoord(battlerId, 2) - ((coords->coords >> 4) * 4);
- case 5:
- return GetBattlerSpriteCoord(battlerId, 2) + ((coords->coords >> 4) * 4);
- case 2:
- return GetBattlerSpriteCoord(battlerId, 3) - ((coords->coords & 0xf) * 4);
- case 3:
- return GetBattlerSpriteCoord(battlerId, 3) + ((coords->coords & 0xf) * 4);
- case 6:
- ret = GetBattlerSpriteCoord(battlerId, 1) + 0x1f;
+ case BATTLER_COORD_ATTR_LEFT:
+ return GetBattlerSpriteCoord(battlerId, BATTLER_COORD_X_2) - ((coords->coords >> 4) * 4);
+ case BATTLER_COORD_ATTR_RIGHT:
+ return GetBattlerSpriteCoord(battlerId, BATTLER_COORD_X_2) + ((coords->coords >> 4) * 4);
+ case BATTLER_COORD_ATTR_TOP:
+ return GetBattlerSpriteCoord(battlerId, BATTLER_COORD_Y_PIC_OFFSET) - ((coords->coords & 0xf) * 4);
+ case BATTLER_COORD_ATTR_BOTTOM:
+ return GetBattlerSpriteCoord(battlerId, BATTLER_COORD_Y_PIC_OFFSET) + ((coords->coords & 0xf) * 4);
+ case BATTLER_COORD_ATTR_RAW_BOTTOM:
+ ret = GetBattlerSpriteCoord(battlerId, BATTLER_COORD_Y) + 31;
return ret - coords->y_offset;
default:
return 0;
diff --git a/src/battle_anim_8170478.c b/src/battle_anim_8170478.c
index 502c4cdbb..7d899fb09 100755
--- a/src/battle_anim_8170478.c
+++ b/src/battle_anim_8170478.c
@@ -388,7 +388,7 @@ const struct SpriteTemplate gBattleAnimSpriteTemplate_085E535C =
};
extern const struct SpriteTemplate gUnknown_085CE388;
-extern const struct SpriteTemplate gUnknown_085CE3A0;
+extern const struct SpriteTemplate gMiniTwinklingStarSpriteTemplate;
void unref_sub_8170478(u8 taskId)
{
@@ -428,7 +428,7 @@ void unref_sub_8170478(u8 taskId)
sub_80A6B30(&unknownStruct);
sub_80A6D48(unknownStruct.bgId, gUnknown_08C2EA9C);
sub_80A6CC0(unknownStruct.bgId, gUnknown_08C2EA50, unknownStruct.tilesOffset);
- LoadCompressedPalette(gUnknown_08C2DDA4, unknownStruct.unk8 << 4, 32);
+ LoadCompressedPalette(gCureBubblesPal, unknownStruct.unk8 << 4, 32);
gBattle_BG1_X = -gSprites[spriteId3].pos1.x + 32;
gBattle_BG1_Y = -gSprites[spriteId3].pos1.y - 32;
@@ -2081,12 +2081,12 @@ static void sub_8172FEC(u8 taskId)
}
else if (state >= 0 && gTasks[taskId].data[11] < 4)
{
- spriteId = CreateSprite(&gUnknown_085CE3A0, x, y, 5);
+ spriteId = CreateSprite(&gMiniTwinklingStarSpriteTemplate, x, y, 5);
gSprites[spriteId].oam.tileNum += 4;
}
else
{
- spriteId = CreateSprite(&gUnknown_085CE3A0, x, y, 5);
+ spriteId = CreateSprite(&gMiniTwinklingStarSpriteTemplate, x, y, 5);
gSprites[spriteId].oam.tileNum += 5;
}
diff --git a/src/battle_anim_effects_1.c b/src/battle_anim_effects_1.c
index e37d2b5b8..25eb14637 100644
--- a/src/battle_anim_effects_1.c
+++ b/src/battle_anim_effects_1.c
@@ -3297,8 +3297,8 @@ void sub_80FFFC0(u8 taskId)
task->data[4] = GetBattlerSpriteSubpriority(gBattleAnimTarget) - 1;
task->data[6] = GetBattlerSpriteCoord(gBattleAnimTarget, 2);
task->data[7] = GetBattlerSpriteCoord(gBattleAnimTarget, 3);
- task->data[10] = sub_80A861C(gBattleAnimTarget, 1);
- task->data[11] = sub_80A861C(gBattleAnimTarget, 0);
+ task->data[10] = GetBattlerSpriteCoordAttr(gBattleAnimTarget, BATTLER_COORD_ATTR_WIDTH);
+ task->data[11] = GetBattlerSpriteCoordAttr(gBattleAnimTarget, BATTLER_COORD_ATTR_HEIGHT);
task->data[5] = (GetBattlerSide(gBattleAnimTarget) == B_SIDE_OPPONENT) ? 1 : -1;
task->data[9] = 56 - (task->data[5] * 64);
task->data[8] = task->data[7] - task->data[9] + task->data[6];
@@ -5452,11 +5452,11 @@ static void sub_81030B0(struct Sprite* sprite)
void sub_810310C(u8 battler, struct Sprite* sprite)
{
if (GetBattlerSide(battler) == B_SIDE_PLAYER)
- sprite->pos1.x = sub_80A861C(battler, 5) + 8;
+ sprite->pos1.x = GetBattlerSpriteCoordAttr(battler, BATTLER_COORD_ATTR_RIGHT) + 8;
else
- sprite->pos1.x = sub_80A861C(battler, 4) - 8;
+ sprite->pos1.x = GetBattlerSpriteCoordAttr(battler, BATTLER_COORD_ATTR_LEFT) - 8;
- sprite->pos1.y = GetBattlerSpriteCoord(battler, 3) - (s16)sub_80A861C(battler, 0) / 4;
+ sprite->pos1.y = GetBattlerSpriteCoord(battler, 3) - (s16)GetBattlerSpriteCoordAttr(battler, BATTLER_COORD_ATTR_HEIGHT) / 4;
}
void sub_8103164(struct Sprite* sprite)
@@ -5520,7 +5520,7 @@ void sub_8103284(struct Sprite* sprite)
battler = gBattleAnimTarget;
sprite->pos1.x = GetBattlerSpriteCoord(battler, 0);
- sprite->pos1.y = sub_80A861C(battler, 2);
+ sprite->pos1.y = GetBattlerSpriteCoordAttr(battler, BATTLER_COORD_ATTR_TOP);
if (sprite->pos1.y <= 9)
sprite->pos1.y = 10;
diff --git a/src/battle_anim_effects_2.c b/src/battle_anim_effects_2.c
index 8acbf62d4..8306ada1c 100755
--- a/src/battle_anim_effects_2.c
+++ b/src/battle_anim_effects_2.c
@@ -2446,7 +2446,7 @@ void sub_8104E74(u8 taskId)
task->data[3] = 0;
task->data[4] = 0;
task->data[5] = 0;
- task->data[15] = sub_80A861C(gBattleAnimTarget, 0);
+ task->data[15] = GetBattlerSpriteCoordAttr(gBattleAnimTarget, BATTLER_COORD_ATTR_HEIGHT);
if (GetBattlerSpriteBGPriorityRank(gBattleAnimTarget) == 1)
{
@@ -2531,7 +2531,7 @@ void sub_810501C(struct Sprite *sprite)
sprite->data[2] = 0;
sprite->data[3] = 16;
sprite->data[4] = 0;
- sprite->data[5] = sub_80A861C(gBattleAnimTarget, 0) + 2;
+ sprite->data[5] = GetBattlerSpriteCoordAttr(gBattleAnimTarget, BATTLER_COORD_ATTR_HEIGHT) + 2;
sprite->data[6] = BattleAnimAdjustPanning(63);
sprite->callback = sub_8105078;
}
@@ -3134,7 +3134,7 @@ void sub_8105EB0(u8 taskId)
SetGpuReg(REG_OFFSET_WIN0V, gBattle_WIN0V);
SetGpuReg(REG_OFFSET_WININ, 0x3F1F);
SetGpuReg(REG_OFFSET_WINOUT, 0x3F3F);
- SetGpuReg(REG_OFFSET_BLDCNT, 0xC8);
+ SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT1_BG3 | BLDCNT_EFFECT_DARKEN);
SetGpuReg(REG_OFFSET_BLDY, 0x10);
gTasks[taskId].data[0] = win0v;
gTasks[taskId].data[1] = win0h;
@@ -3390,8 +3390,8 @@ void sub_81064F8(u8 taskId)
else
sub_80A6D60(&unknownStruct, &gBattleAnimBackgroundTilemap_ScaryFaceOpponent, 0);
- sub_80A6CC0(unknownStruct.bgId, &gUnknown_08C249F8, unknownStruct.tilesOffset);
- LoadCompressedPalette(&gUnknown_08C249D0, unknownStruct.unk8 << 4, 32);
+ sub_80A6CC0(unknownStruct.bgId, gUnknown_08C249F8, unknownStruct.tilesOffset);
+ LoadCompressedPalette(gUnknown_08C249D0, unknownStruct.unk8 << 4, 32);
gTasks[taskId].func = sub_81065EC;
}
diff --git a/src/battle_anim_effects_3.c b/src/battle_anim_effects_3.c
index f6858c093..a8b7d6d6a 100755
--- a/src/battle_anim_effects_3.c
+++ b/src/battle_anim_effects_3.c
@@ -22,6 +22,7 @@
#include "constants/rgb.h"
#include "constants/songs.h"
#include "constants/species.h"
+#include "constants/weather.h"
extern u8 sub_807521C(s16 x, s16 y, u8 a3);
extern void sub_810E2C8(struct Sprite *);
@@ -45,31 +46,31 @@ void sub_815ACD0(struct Sprite *);
void sub_815B27C(struct Sprite *);
void sub_815B394(struct Sprite *);
void sub_815B49C(struct Sprite *);
-void sub_815B570(struct Sprite *);
+void AnimMiniTwinklingStar(struct Sprite *);
void sub_815B70C(struct Sprite *);
void sub_815BE04(struct Sprite *);
-void sub_815C400(struct Sprite *);
-void sub_815C6B0(struct Sprite *);
-void sub_815C95C(struct Sprite *);
-void sub_815CB88(struct Sprite *);
-void sub_815CC94(struct Sprite *);
-void sub_815CDB4(struct Sprite *);
-void sub_815D7B4(struct Sprite *);
-void sub_815D870(struct Sprite *);
+void AnimWeakFrustrationAngerMark(struct Sprite *);
+void AnimSweetScentPetal(struct Sprite *);
+void AnimPainSplitProjectile(struct Sprite *);
+void AnimFlatterConfetti(struct Sprite *);
+void AnimFlatterSpotlight(struct Sprite *);
+void AnimReversalOrb(struct Sprite *);
+void AnimYawnCloud(struct Sprite *);
+void AnimSmokeBallEscapeCloud(struct Sprite *);
void sub_815DEBC(struct Sprite *);
-void sub_815E01C(struct Sprite *);
-void sub_815E404(struct Sprite *);
-void sub_815E444(struct Sprite *);
-void sub_815E6D8(struct Sprite *);
-void sub_815E954(struct Sprite *);
-void sub_815EA14(struct Sprite *);
-void sub_815EE84(struct Sprite *);
-void sub_815F18C(struct Sprite *);
-void sub_815F48C(struct Sprite *);
+void AnimRoarNoiseLine(struct Sprite *);
+void AnimGlareEyeDot(struct Sprite *);
+void AnimAssistPawprint(struct Sprite *);
+void AnimSmellingSaltsHand(struct Sprite *);
+void AnimSmellingSaltExclamation(struct Sprite *);
+void AnimHelpingHandClap(struct Sprite *);
+void AnimForesightMagnifyingGlass(struct Sprite *);
+void AnimMeteorMashStar(struct Sprite *);
+void AnimBlockX(struct Sprite *);
void sub_815FE80(struct Sprite *);
void sub_81061C4(struct Sprite *);
-void sub_8160338(struct Sprite *);
-void sub_81603A8(struct Sprite *);
+void AnimKnockOffStrike(struct Sprite *);
+void AnimRecycle(struct Sprite *);
static void sub_815A114(struct Sprite *);
static void sub_815A1F4(struct Sprite *);
static void sub_815A234(struct Sprite *);
@@ -93,33 +94,37 @@ static void sub_815B5D0(struct Sprite *);
static void sub_815BF44(struct Sprite *);
static void sub_815BFF4(struct Sprite *);
static void sub_815C050(struct Sprite *);
-static void sub_815C548(u8);
-static void sub_815C700(struct Sprite *);
-static void sub_815C7C4(u8);
-static void sub_815CC34(struct Sprite *);
-static void sub_815CD0C(struct Sprite *);
-static void sub_815CDFC(struct Sprite *);
-static void sub_815D1BC(u8);
-static void sub_815D398(u8);
-static void sub_815D694(u8);
-static void sub_815D804(struct Sprite *);
-static void sub_815DD48(u8);
-static void sub_815DDE0(u8, bool8);
-static void sub_815DF64(u8);
-static void sub_815E0DC(struct Sprite *);
-static void sub_815E20C(u8);
-static void sub_815E34C(s16, s16, s16, s16, u8, u8, s16 *, s16 *);
-static void sub_815E5CC(u8);
+static void AnimTask_RockMonBackAndForthStep(u8);
+static void AnimSweetScentPetalStep(struct Sprite *);
+static void AnimTask_FlailMovementStep(u8);
+static void AnimFlatterConfettiStep(struct Sprite *);
+static void AnimFlatterSpotlightStep(struct Sprite *);
+static void AnimReversalOrbStep(struct Sprite *);
+static void AnimTask_RolePlaySilhouetteStep1(u8);
+static void AnimTask_RolePlaySilhouetteStep2(u8);
+static void AnimTask_AcidArmorStep(u8);
+static void AnimTask_DeepInhaleStep(u8);
+static void AnimYawnCloudStep(struct Sprite *);
+static void AnimTask_SquishAndSweatDropletsStep(u8);
+static void CreateSweatDroplets(u8, bool8);
+static void AnimTask_FacadeColorBlendStep(u8);
+static void AnimRoarNoiseLineStep(struct Sprite *);
+static void AnimTask_GlareEyeDotsStep(u8);
+static void GetGlareEyeDotCoords(s16, s16, s16, s16, u8, u8, s16 *, s16 *);
+static void AnimTask_BarrageBallStep(u8);
static void sub_815E784(struct Sprite *);
-static void sub_815E898(u8);
-static void sub_815E9BC(struct Sprite *);
-static void sub_815EA60(struct Sprite *);
-static void sub_815ECE4(u8);
-static void sub_815EF08(struct Sprite *);
-static void sub_815F330(u8);
-static void sub_815F4F0(struct Sprite *);
-static void sub_815F79C(u8);
-static void sub_815F7C4(struct Sprite *);
+static void AnimTask_SmellingSaltsSquishStep(u8);
+static void AnimSmellingSaltExclamationStep(struct Sprite *);
+static void AnimHelpingHandClapStep(struct Sprite *);
+static void AnimTask_HelpingHandAttackerMovementStep(u8);
+static void AnimForesightMagnifyingGlassStep(struct Sprite *);
+static void AnimTask_MonToSubstituteDoll(u8);
+static void AnimBlockXStep(struct Sprite *);
+static void AnimTask_OdorSleuthMovementWaitFinish(u8);
+static void MoveOdorSleuthClone(struct Sprite *);
+static void AnimTask_TeeterDanceMovementStep(u8);
+static void AnimRecycleStep(struct Sprite *);
+static void AnimTask_SlackOffSquishStep(u8);
const union AnimCmd gUnknown_085CE004[] =
{
@@ -535,7 +540,7 @@ const struct SpriteTemplate gUnknown_085CE388 =
.callback = sub_815B49C,
};
-const struct SpriteTemplate gUnknown_085CE3A0 =
+const struct SpriteTemplate gMiniTwinklingStarSpriteTemplate =
{
.tileTag = ANIM_TAG_GOLD_STARS,
.paletteTag = ANIM_TAG_GOLD_STARS,
@@ -543,7 +548,7 @@ const struct SpriteTemplate gUnknown_085CE3A0 =
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_815B570,
+ .callback = AnimMiniTwinklingStar,
};
const union AffineAnimCmd gUnknown_085CE3B8[] =
@@ -649,7 +654,7 @@ const u8 gUnknown_085CE4A8[] =
50,
};
-const union AffineAnimCmd gUnknown_085CE4B0[] =
+const union AffineAnimCmd gStrongFrustrationAffineAnimCmds[] =
{
AFFINEANIMCMD_FRAME(0, -15, 0, 7),
AFFINEANIMCMD_FRAME(0, 15, 0, 7),
@@ -657,7 +662,7 @@ const union AffineAnimCmd gUnknown_085CE4B0[] =
AFFINEANIMCMD_END,
};
-const struct SpriteTemplate gUnknown_085CE4D0 =
+const struct SpriteTemplate gWeakFrustrationAngerMarkSpriteTemplate =
{
.tileTag = ANIM_TAG_ANGER,
.paletteTag = ANIM_TAG_ANGER,
@@ -665,10 +670,10 @@ const struct SpriteTemplate gUnknown_085CE4D0 =
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_815C400,
+ .callback = AnimWeakFrustrationAngerMark,
};
-const union AnimCmd gUnknown_085CE4E8[] =
+const union AnimCmd gSweetScentPetalAnimCmds1[] =
{
ANIMCMD_FRAME(0, 8),
ANIMCMD_FRAME(1, 8),
@@ -681,7 +686,7 @@ const union AnimCmd gUnknown_085CE4E8[] =
ANIMCMD_JUMP(0),
};
-const union AnimCmd gUnknown_085CE50C[] =
+const union AnimCmd gSweetScentPetalAnimCmds2[] =
{
ANIMCMD_FRAME(0, 8, .hFlip = TRUE),
ANIMCMD_FRAME(1, 8, .hFlip = TRUE),
@@ -694,33 +699,33 @@ const union AnimCmd gUnknown_085CE50C[] =
ANIMCMD_JUMP(0),
};
-const union AnimCmd gUnknown_085CE530[] =
+const union AnimCmd gSweetScentPetalAnimCmds3[] =
{
ANIMCMD_FRAME(0, 8),
ANIMCMD_END,
};
-const union AnimCmd *const gUnknown_085CE538[] =
+const union AnimCmd *const gSweetScentPetalAnimCmdTable[] =
{
- gUnknown_085CE4E8,
- gUnknown_085CE50C,
- gUnknown_085CE530,
+ gSweetScentPetalAnimCmds1,
+ gSweetScentPetalAnimCmds2,
+ gSweetScentPetalAnimCmds3,
};
-const struct SpriteTemplate gUnknown_085CE544 =
+const struct SpriteTemplate gSweetScentPetalSpriteTemplate =
{
.tileTag = ANIM_TAG_PINK_PETAL,
.paletteTag = ANIM_TAG_PINK_PETAL,
.oam = &gUnknown_08524904,
- .anims = gUnknown_085CE538,
+ .anims = gSweetScentPetalAnimCmdTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_815C6B0,
+ .callback = AnimSweetScentPetal,
};
const u16 gUnknown_085CE55C[] = INCBIN_U16("graphics/unknown/unknown_85CE55C.gbapal");
-const union AnimCmd gUnknown_085CE57C[] =
+const union AnimCmd gPainSplitAnimCmds[] =
{
ANIMCMD_FRAME(0, 5),
ANIMCMD_FRAME(4, 9),
@@ -728,23 +733,23 @@ const union AnimCmd gUnknown_085CE57C[] =
ANIMCMD_END,
};
-const union AnimCmd *const gUnknown_085CE58C[] =
+const union AnimCmd *const gPainSplitAnimCmdTable[] =
{
- gUnknown_085CE57C,
+ gPainSplitAnimCmds,
};
-const struct SpriteTemplate gUnknown_085CE590 =
+const struct SpriteTemplate gPainSplitProjectileSpriteTemplate =
{
.tileTag = ANIM_TAG_PAIN_SPLIT,
.paletteTag = ANIM_TAG_PAIN_SPLIT,
.oam = &gUnknown_0852490C,
- .anims = gUnknown_085CE58C,
+ .anims = gPainSplitAnimCmdTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_815C95C,
+ .callback = AnimPainSplitProjectile,
};
-const struct SpriteTemplate gUnknown_085CE5A8 =
+const struct SpriteTemplate gFlatterConfettiSpriteTemplate =
{
.tileTag = ANIM_TAG_CONFETTI,
.paletteTag = ANIM_TAG_CONFETTI,
@@ -752,10 +757,10 @@ const struct SpriteTemplate gUnknown_085CE5A8 =
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_815CB88,
+ .callback = AnimFlatterConfetti,
};
-const struct SpriteTemplate gUnknown_085CE5C0 =
+const struct SpriteTemplate gFlatterSpotlightSpriteTemplate =
{
.tileTag = ANIM_TAG_SPOTLIGHT,
.paletteTag = ANIM_TAG_SPOTLIGHT,
@@ -763,10 +768,10 @@ const struct SpriteTemplate gUnknown_085CE5C0 =
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gUnknown_085CE224,
- .callback = sub_815CC94,
+ .callback = AnimFlatterSpotlight,
};
-const struct SpriteTemplate gBattleAnimSpriteTemplate_85CE5D8 =
+const struct SpriteTemplate gReversalOrbSpriteTemplate =
{
.tileTag = ANIM_TAG_BLUE_ORB,
.paletteTag = ANIM_TAG_BLUE_ORB,
@@ -774,10 +779,10 @@ const struct SpriteTemplate gBattleAnimSpriteTemplate_85CE5D8 =
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_815CDB4,
+ .callback = AnimReversalOrb,
};
-const union AffineAnimCmd gUnknown_085CE5F0[] =
+const union AffineAnimCmd gDeepInhaleAffineAnimCmds[] =
{
AFFINEANIMCMD_FRAME(16, 0, 0, 4),
AFFINEANIMCMD_FRAME(0, -3, 0, 16),
@@ -787,7 +792,7 @@ const union AffineAnimCmd gUnknown_085CE5F0[] =
AFFINEANIMCMD_END,
};
-const union AffineAnimCmd gUnknown_085CE620[] =
+const union AffineAnimCmd gYawnCloudAffineAnimCmds1[] =
{
AFFINEANIMCMD_FRAME(0x80, 0x80, 0, 0),
AFFINEANIMCMD_FRAME(-8, -8, 0, 8),
@@ -795,7 +800,7 @@ const union AffineAnimCmd gUnknown_085CE620[] =
AFFINEANIMCMD_JUMP(0),
};
-const union AffineAnimCmd gUnknown_085CE640[] =
+const union AffineAnimCmd gYawnCloudAffineAnimCmds2[] =
{
AFFINEANIMCMD_FRAME(0xC0, 0xC0, 0, 0),
AFFINEANIMCMD_FRAME(8, 8, 0, 8),
@@ -803,7 +808,7 @@ const union AffineAnimCmd gUnknown_085CE640[] =
AFFINEANIMCMD_JUMP(0),
};
-const union AffineAnimCmd gUnknown_085CE660[] =
+const union AffineAnimCmd gYawnCloudAffineAnimCmds3[] =
{
AFFINEANIMCMD_FRAME(0x100, 0x100, 0, 0),
AFFINEANIMCMD_FRAME(8, 8, 0, 8),
@@ -811,25 +816,25 @@ const union AffineAnimCmd gUnknown_085CE660[] =
AFFINEANIMCMD_JUMP(0),
};
-const union AffineAnimCmd *const gUnknown_085CE680[] =
+const union AffineAnimCmd *const gYawnCloudAffineAnimTable[] =
{
- gUnknown_085CE620,
- gUnknown_085CE640,
- gUnknown_085CE660,
+ gYawnCloudAffineAnimCmds1,
+ gYawnCloudAffineAnimCmds2,
+ gYawnCloudAffineAnimCmds3,
};
-const struct SpriteTemplate gUnknown_085CE68C =
+const struct SpriteTemplate gYawnCloudSpriteTemplate =
{
.tileTag = ANIM_TAG_PINK_CLOUD,
.paletteTag = ANIM_TAG_PINK_CLOUD,
.oam = &gUnknown_08524974,
.anims = gDummySpriteAnimTable,
.images = NULL,
- .affineAnims = gUnknown_085CE680,
- .callback = sub_815D7B4,
+ .affineAnims = gYawnCloudAffineAnimTable,
+ .callback = AnimYawnCloud,
};
-const union AffineAnimCmd gUnknown_085CE6A4[] =
+const union AffineAnimCmd gSmokeBallEscapeCloudAffineAnimCmds1[] =
{
AFFINEANIMCMD_FRAME(0x80, 0x80, 0, 0),
AFFINEANIMCMD_FRAME(-4, -6, 0, 16),
@@ -837,7 +842,7 @@ const union AffineAnimCmd gUnknown_085CE6A4[] =
AFFINEANIMCMD_JUMP(0),
};
-const union AffineAnimCmd gUnknown_085CE6C4[] =
+const union AffineAnimCmd gSmokeBallEscapeCloudAffineAnimCmds2[] =
{
AFFINEANIMCMD_FRAME(0xC0, 0xC0, 0, 0),
AFFINEANIMCMD_FRAME(4, 6, 0, 16),
@@ -845,7 +850,7 @@ const union AffineAnimCmd gUnknown_085CE6C4[] =
AFFINEANIMCMD_JUMP(0),
};
-const union AffineAnimCmd gUnknown_085CE6E4[] =
+const union AffineAnimCmd gSmokeBallEscapeCloudAffineAnimCmds3[] =
{
AFFINEANIMCMD_FRAME(0x100, 0x100, 0, 0),
AFFINEANIMCMD_FRAME(4, 6, 0, 16),
@@ -853,7 +858,7 @@ const union AffineAnimCmd gUnknown_085CE6E4[] =
AFFINEANIMCMD_JUMP(0),
};
-const union AffineAnimCmd gUnknown_085CE704[] =
+const union AffineAnimCmd gSmokeBallEscapeCloudAffineAnimCmds4[] =
{
AFFINEANIMCMD_FRAME(0x100, 0x100, 0, 0),
AFFINEANIMCMD_FRAME(8, 10, 0, 30),
@@ -861,26 +866,26 @@ const union AffineAnimCmd gUnknown_085CE704[] =
AFFINEANIMCMD_JUMP(0),
};
-const union AffineAnimCmd *const gUnknown_085CE724[] =
+const union AffineAnimCmd *const gSmokeBallEscapeCloudAffineAnimTable[] =
{
- gUnknown_085CE6A4,
- gUnknown_085CE6C4,
- gUnknown_085CE6E4,
- gUnknown_085CE704,
+ gSmokeBallEscapeCloudAffineAnimCmds1,
+ gSmokeBallEscapeCloudAffineAnimCmds2,
+ gSmokeBallEscapeCloudAffineAnimCmds3,
+ gSmokeBallEscapeCloudAffineAnimCmds4,
};
-const struct SpriteTemplate gUnknown_085CE734 =
+const struct SpriteTemplate gSmokeBallEscapeCloudSpriteTemplate =
{
.tileTag = ANIM_TAG_PINK_CLOUD,
.paletteTag = ANIM_TAG_PINK_CLOUD,
.oam = &gUnknown_085249D4,
.anims = gDummySpriteAnimTable,
.images = NULL,
- .affineAnims = gUnknown_085CE724,
- .callback = sub_815D870,
+ .affineAnims = gSmokeBallEscapeCloudAffineAnimTable,
+ .callback = AnimSmokeBallEscapeCloud,
};
-const union AffineAnimCmd gUnknown_085CE74C[] =
+const union AffineAnimCmd gFacadeSquishAffineAnimCmds[] =
{
AFFINEANIMCMD_FRAME(-16, 16, 0, 6),
AFFINEANIMCMD_FRAME(16, -16, 0, 12),
@@ -888,7 +893,7 @@ const union AffineAnimCmd gUnknown_085CE74C[] =
AFFINEANIMCMD_END,
};
-const struct SpriteTemplate gUnknown_085CE76C =
+const struct SpriteTemplate gFacadeSweatDrop =
{
.tileTag = ANIM_TAG_SWEAT_DROP,
.paletteTag = ANIM_TAG_SWEAT_DROP,
@@ -899,40 +904,65 @@ const struct SpriteTemplate gUnknown_085CE76C =
.callback = sub_815DEBC,
};
-const u16 gUnknown_085CE784[] = INCBIN_U16("graphics/battle_anims/sprites/effect.gbapal");
+const u16 gFacadeBlendColors[] = {
+ RGB(28, 25, 1),
+ RGB(28, 21, 5),
+ RGB(27, 18, 8),
+ RGB(27, 14, 11),
+ RGB(26, 10, 15),
+ RGB(26, 7, 18),
+ RGB(25, 3, 21),
+ RGB(25, 0, 25),
+ RGB(25, 0, 23),
+ RGB(25, 0, 20),
+ RGB(25, 0, 16),
+ RGB(25, 0, 13),
+ RGB(26, 0, 10),
+ RGB(26, 0, 6),
+ RGB(26, 0, 3),
+ RGB(27, 0, 0),
+ RGB(27, 1, 0),
+ RGB(27, 5, 0),
+ RGB(27, 9, 0),
+ RGB(27, 12, 0),
+ RGB(28, 16, 0),
+ RGB(28, 19, 0),
+ RGB(28, 23, 0),
+ RGB(29, 27, 0),
+};
-const union AnimCmd gUnknown_085CE7B4[] =
+const union AnimCmd gRoarNoiseLineAnimCmds1[] =
{
ANIMCMD_FRAME(0, 3),
ANIMCMD_FRAME(16, 3),
ANIMCMD_JUMP(0),
};
-const union AnimCmd gUnknown_085CE7C0[] =
+const union AnimCmd gRoarNoiseLineAnimCmds2[] =
{
ANIMCMD_FRAME(32, 3),
ANIMCMD_FRAME(48, 3),
ANIMCMD_JUMP(0),
};
-const union AnimCmd *const gUnknown_085CE7CC[] =
+const union AnimCmd *const gRoarNoiseLineAnimTable[] =
{
- gUnknown_085CE7B4,
- gUnknown_085CE7C0,
+ gRoarNoiseLineAnimCmds1,
+ gRoarNoiseLineAnimCmds2,
};
-const struct SpriteTemplate gUnknown_085CE7D4 =
+const struct SpriteTemplate gRoarNoiseLineSpriteTemplate =
{
.tileTag = ANIM_TAG_NOISE_LINE,
.paletteTag = ANIM_TAG_NOISE_LINE,
.oam = &gUnknown_08524914,
- .anims = gUnknown_085CE7CC,
+ .anims = gRoarNoiseLineAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_815E01C,
+ .callback = AnimRoarNoiseLine,
};
-const struct SpriteTemplate gUnknown_085CE7EC =
+const struct SpriteTemplate gGlareEyeDotSpriteTemplate =
{
.tileTag = ANIM_TAG_SMALL_RED_EYE,
.paletteTag = ANIM_TAG_SMALL_RED_EYE,
@@ -940,10 +970,10 @@ const struct SpriteTemplate gUnknown_085CE7EC =
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_815E404,
+ .callback = AnimGlareEyeDot,
};
-const struct SpriteTemplate gUnknown_085CE804 =
+const struct SpriteTemplate gAssistPawprintSpriteTemplate =
{
.tileTag = ANIM_TAG_PAW_PRINT,
.paletteTag = ANIM_TAG_PAW_PRINT,
@@ -951,40 +981,40 @@ const struct SpriteTemplate gUnknown_085CE804 =
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_815E444,
+ .callback = AnimAssistPawprint,
};
-const union AffineAnimCmd gUnknown_085CE81C[] =
+const union AffineAnimCmd gBarrageBallAffineAnimCmds1[] =
{
AFFINEANIMCMD_FRAME(0, 0, -4, 24),
AFFINEANIMCMD_END,
};
-const union AffineAnimCmd gUnknown_085CE82C[] =
+const union AffineAnimCmd gBarrageBallAffineAnimCmds2[] =
{
AFFINEANIMCMD_FRAME(0x100, 0x100, -64, 0),
AFFINEANIMCMD_FRAME(0, 0, 4, 24),
AFFINEANIMCMD_END,
};
-const union AffineAnimCmd *const gUnknown_085CE844[] =
+const union AffineAnimCmd *const gBarrageBallAffineAnimTable[] =
{
- gUnknown_085CE81C,
- gUnknown_085CE82C,
+ gBarrageBallAffineAnimCmds1,
+ gBarrageBallAffineAnimCmds2,
};
-const struct SpriteTemplate gUnknown_085CE84C =
+const struct SpriteTemplate gBarrageBallSpriteTemplate =
{
.tileTag = ANIM_TAG_RED_BALL,
.paletteTag = ANIM_TAG_RED_BALL,
.oam = &gUnknown_08524974,
.anims = gDummySpriteAnimTable,
.images = NULL,
- .affineAnims = gUnknown_085CE844,
+ .affineAnims = gBarrageBallAffineAnimTable,
.callback = SpriteCallbackDummy,
};
-const struct SpriteTemplate gUnknown_085CE864 =
+const struct SpriteTemplate gSmellingSaltsHandSpriteTemplate =
{
.tileTag = ANIM_TAG_TAG_HAND,
.paletteTag = ANIM_TAG_TAG_HAND,
@@ -992,17 +1022,17 @@ const struct SpriteTemplate gUnknown_085CE864 =
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_815E6D8,
+ .callback = AnimSmellingSaltsHand,
};
-const union AffineAnimCmd gUnknown_085CE87C[] =
+const union AffineAnimCmd gSmellingSaltsSquishAffineAnimCmds[] =
{
AFFINEANIMCMD_FRAME(0, -16, 0, 6),
AFFINEANIMCMD_FRAME(0, 16, 0, 6),
AFFINEANIMCMD_END,
};
-const struct SpriteTemplate gUnknown_085CE894 =
+const struct SpriteTemplate gSmellingSaltExclamationSpriteTemplate =
{
.tileTag = ANIM_TAG_SMELLINGSALT_EFFECT,
.paletteTag = ANIM_TAG_SMELLINGSALT_EFFECT,
@@ -1010,10 +1040,10 @@ const struct SpriteTemplate gUnknown_085CE894 =
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_815E954,
+ .callback = AnimSmellingSaltExclamation,
};
-const struct SpriteTemplate gUnknown_085CE8AC =
+const struct SpriteTemplate gHelpingHandClapSpriteTemplate =
{
.tileTag = ANIM_TAG_TAG_HAND,
.paletteTag = ANIM_TAG_TAG_HAND,
@@ -1021,10 +1051,10 @@ const struct SpriteTemplate gUnknown_085CE8AC =
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_815EA14,
+ .callback = AnimHelpingHandClap,
};
-const struct SpriteTemplate gUnknown_085CE8C4 =
+const struct SpriteTemplate gForesightMagnifyingGlassSpriteTemplate =
{
.tileTag = ANIM_TAG_MAGNIFYING_GLASS,
.paletteTag = ANIM_TAG_MAGNIFYING_GLASS,
@@ -1032,10 +1062,10 @@ const struct SpriteTemplate gUnknown_085CE8C4 =
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_815EE84,
+ .callback = AnimForesightMagnifyingGlass,
};
-const struct SpriteTemplate gUnknown_085CE8DC =
+const struct SpriteTemplate gMeteorMashStarSpriteTemplate =
{
.tileTag = ANIM_TAG_GOLD_STARS,
.paletteTag = ANIM_TAG_GOLD_STARS,
@@ -1043,7 +1073,7 @@ const struct SpriteTemplate gUnknown_085CE8DC =
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_815F18C,
+ .callback = AnimMeteorMashStar,
};
const struct SpriteTemplate gUnknown_085CE8F4 =
@@ -1057,7 +1087,7 @@ const struct SpriteTemplate gUnknown_085CE8F4 =
.callback = sub_81061C4,
};
-const struct SpriteTemplate gUnknown_085CE90C =
+const struct SpriteTemplate gBlockXSpriteTemplate =
{
.tileTag = ANIM_TAG_X_SIGN,
.paletteTag = ANIM_TAG_X_SIGN,
@@ -1065,7 +1095,7 @@ const struct SpriteTemplate gUnknown_085CE90C =
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_815F48C,
+ .callback = AnimBlockX,
};
const struct SpriteTemplate gUnknown_085CE924 =
@@ -1079,72 +1109,72 @@ const struct SpriteTemplate gUnknown_085CE924 =
.callback = sub_815FE80,
};
-const union AnimCmd gUnknown_085CE93C[] =
+const union AnimCmd gKnockOffStrikeAnimCmds[] =
{
ANIMCMD_FRAME(0, 4),
ANIMCMD_FRAME(64, 4),
ANIMCMD_END,
};
-const union AnimCmd *const gUnknown_085CE948[] =
+const union AnimCmd *const gKnockOffStrikeAnimTable[] =
{
- gUnknown_085CE93C,
+ gKnockOffStrikeAnimCmds,
};
-const union AffineAnimCmd gUnknown_085CE94C[] =
+const union AffineAnimCmd gKnockOffStrikeAffineanimCmds1[] =
{
AFFINEANIMCMD_FRAME(0x100, 0x100, 0, 0),
AFFINEANIMCMD_FRAME(0, 0, -4, 8),
AFFINEANIMCMD_END,
};
-const union AffineAnimCmd gUnknown_085CE964[] =
+const union AffineAnimCmd gKnockOffStrikeAffineanimCmds2[] =
{
AFFINEANIMCMD_FRAME(-0x100, 0x100, 0, 0),
AFFINEANIMCMD_FRAME(0, 0, 4, 8),
AFFINEANIMCMD_END,
};
-const union AffineAnimCmd *const gUnknown_085CE97C[] =
+const union AffineAnimCmd *const gKnockOffStrikeAffineAnimTable[] =
{
- gUnknown_085CE94C,
- gUnknown_085CE964,
+ gKnockOffStrikeAffineanimCmds1,
+ gKnockOffStrikeAffineanimCmds2,
};
-const struct SpriteTemplate gUnknown_085CE984 =
+const struct SpriteTemplate gKnockOffStrikeSpriteTemplate =
{
.tileTag = ANIM_TAG_SLAM_HIT_2,
.paletteTag = ANIM_TAG_SLAM_HIT_2,
.oam = &gUnknown_0852497C,
- .anims = gUnknown_085CE948,
+ .anims = gKnockOffStrikeAnimTable,
.images = NULL,
- .affineAnims = gUnknown_085CE97C,
- .callback = sub_8160338,
+ .affineAnims = gKnockOffStrikeAffineAnimTable,
+ .callback = AnimKnockOffStrike,
};
-const union AffineAnimCmd gUnknown_085CE99C[] =
+const union AffineAnimCmd gRecycleSpriteAffineAnimCmds[] =
{
AFFINEANIMCMD_FRAME(0, 0, -4, 64),
AFFINEANIMCMD_JUMP(0),
};
-const union AffineAnimCmd *const gUnknown_085CE9AC[] =
+const union AffineAnimCmd *const gRecycleSpriteAffineAnimTable[] =
{
- gUnknown_085CE99C,
+ gRecycleSpriteAffineAnimCmds,
};
-const struct SpriteTemplate gUnknown_085CE9B0 =
+const struct SpriteTemplate gRecycleSpriteTemplate =
{
.tileTag = ANIM_TAG_RECYCLE,
.paletteTag = ANIM_TAG_RECYCLE,
.oam = &gUnknown_08524A9C,
.anims = gDummySpriteAnimTable,
.images = NULL,
- .affineAnims = gUnknown_085CE9AC,
- .callback = sub_81603A8,
+ .affineAnims = gRecycleSpriteAffineAnimTable,
+ .callback = AnimRecycle,
};
-const union AffineAnimCmd gUnknown_085CE9C8[] =
+const union AffineAnimCmd gSlackOffSquishAffineAnimCmds[] =
{
AFFINEANIMCMD_FRAME(0, 16, 0, 4),
AFFINEANIMCMD_FRAME(-2, 0, 0, 8),
@@ -1450,11 +1480,9 @@ void sub_815A7B0(struct Sprite *sprite)
StoreSpriteCallbackInData6(sprite, DestroyAnimSprite);
}
-// This is likely fakematching due to some strange type casting behavior.
void sub_815A7EC(struct Sprite *sprite)
{
int var0;
- int var1;
if (sprite->data[0] == 0)
{
SetSpriteCoordsToAnimAttackerCoords(sprite);
@@ -1468,16 +1496,13 @@ void sub_815A7EC(struct Sprite *sprite)
}
else
{
- var1 = -gBattleAnimArgs[2];
- sprite->data[1] = var1;
- var1 = -gBattleAnimArgs[3];
- sprite->data[2] = var1;
+ sprite->data[1] = -1 * gBattleAnimArgs[2];
+ sprite->data[2] = -1 * gBattleAnimArgs[3];
}
}
else
{
- var1 = -gBattleAnimArgs[2];
- sprite->data[1] = var1;
+ sprite->data[1] = -1 * gBattleAnimArgs[2];
sprite->data[2] = gBattleAnimArgs[3];
}
}
@@ -1486,8 +1511,8 @@ void sub_815A7EC(struct Sprite *sprite)
var0 = (sprite->data[0] * 20) & 0xFF;
sprite->data[3] += sprite->data[1];
sprite->data[4] += sprite->data[2];
- sprite->pos2.x = (sprite->data[3] + (s32)((u32)sprite->data[3] >> 31)) >> 1;
- sprite->pos2.y = Sin(var0 & 0xFF, 5) + ((s32)(sprite->data[4] + ((u32)sprite->data[4] >> 31)) >> 1);
+ sprite->pos2.x = sprite->data[3] / 2;
+ sprite->pos2.y = Sin(var0 & 0xFF, 5) + (sprite->data[4] / 2);
if ((u16)(sprite->pos1.x + sprite->pos2.x) > 240)
DestroyAnimSprite(sprite);
@@ -1688,7 +1713,6 @@ void sub_815AC8C(u8 taskId)
void sub_815ACD0(struct Sprite *sprite)
{
- int var0;
if (gBattleAnimArgs[0] == 0)
{
sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimAttacker, 0) + gBattleAnimArgs[1];
@@ -1701,11 +1725,8 @@ void sub_815ACD0(struct Sprite *sprite)
}
sprite->pos2.y = gBattleAnimArgs[2];
- var0 = 0;
- if (sprite->pos2.y > gBattleAnimArgs[3])
- var0 = 1;
- sprite->data[0] = var0;
+ sprite->data[0] = (sprite->pos2.y > gBattleAnimArgs[3]);
sprite->data[1] = 0;
sprite->data[2] = gBattleAnimArgs[4];
sprite->data[3] = gBattleAnimArgs[5];
@@ -2113,7 +2134,7 @@ static void sub_815B4D4(struct Sprite *sprite)
if (++sprite->data[2] % 3 == 0)
{
CreateSpriteAndAnimate(
- &gUnknown_085CE3A0,
+ &gMiniTwinklingStarSpriteTemplate,
sprite->pos1.x + sprite->pos2.x,
sprite->pos1.y + sprite->pos2.y,
sprite->subpriority + 1);
@@ -2124,7 +2145,7 @@ static void sub_815B4D4(struct Sprite *sprite)
DestroyAnimSprite(sprite);
}
-void sub_815B570(struct Sprite *sprite)
+void AnimMiniTwinklingStar(struct Sprite *sprite)
{
u8 rand;
s8 y;
@@ -2388,8 +2409,8 @@ void sub_815BB84(u8 taskId)
gBattle_BG1_Y = 0;
}
- sub_80A6CC0(unknownStruct.bgId, &gUnknown_08C2A634, unknownStruct.tilesOffset);
- LoadCompressedPalette(&gUnknown_08C2A6D4, unknownStruct.unk8 << 4, 32);
+ sub_80A6CC0(unknownStruct.bgId, gUnknown_08C2A634, unknownStruct.tilesOffset);
+ LoadCompressedPalette(gUnknown_08C2A6D4, unknownStruct.unk8 << 4, 32);
gTasks[taskId].data[10] = gBattle_BG1_X;
gTasks[taskId].data[11] = gBattle_BG1_Y;
@@ -2594,8 +2615,8 @@ void sub_815C0A4(u8 taskId)
gBattle_BG1_Y = 0;
}
- sub_80A6CC0(unknownStruct.bgId, &gUnknown_08C2A634, unknownStruct.tilesOffset);
- LoadCompressedPalette(&gUnknown_08C2A6D4, unknownStruct.unk8 << 4, 32);
+ sub_80A6CC0(unknownStruct.bgId, gUnknown_08C2A634, unknownStruct.tilesOffset);
+ LoadCompressedPalette(gUnknown_08C2A6D4, unknownStruct.unk8 << 4, 32);
gTasks[taskId].data[10] = gBattle_BG1_X;
gTasks[taskId].data[11] = gBattle_BG1_Y;
gTasks[taskId].data[0]++;
@@ -2648,11 +2669,13 @@ void sub_815C0A4(u8 taskId)
}
}
-void sub_815C3A8(u8 taskId)
+// Briefly vertically grows and shrinks the attacking mon's sprite.
+// No args.
+void AnimTask_StrongFrustrationGrowAndShrink(u8 taskId)
{
if (gTasks[taskId].data[0] == 0)
{
- PrepareAffineAnimInTaskData(&gTasks[taskId], GetAnimBattlerSpriteId(0), gUnknown_085CE4B0);
+ PrepareAffineAnimInTaskData(&gTasks[taskId], GetAnimBattlerSpriteId(ANIM_ATTACKER), gStrongFrustrationAffineAnimCmds);
gTasks[taskId].data[0]++;
}
else
@@ -2662,7 +2685,10 @@ void sub_815C3A8(u8 taskId)
}
}
-void sub_815C400(struct Sprite *sprite)
+// Animates an anger mark near the mon's head.
+// arg 0: initial x pixel offset
+// arg 1: initial y pixel offset
+void AnimWeakFrustrationAngerMark(struct Sprite *sprite)
{
if (sprite->data[0] == 0)
{
@@ -2685,7 +2711,11 @@ void sub_815C400(struct Sprite *sprite)
}
}
-void sub_815C478(u8 taskId)
+// Rocks the mon back and forth. This is done on a pivot so it is done via rotation.
+// arg 0: which battler
+// arg 1: number of rocks
+// arg 2: rotation speed increase
+void AnimTask_RockMonBackAndForth(u8 taskId)
{
u8 side;
struct Task *task = &gTasks[taskId];
@@ -2710,7 +2740,7 @@ void sub_815C478(u8 taskId)
task->data[6] = gBattleAnimArgs[1] - 1;
task->data[15] = GetAnimBattlerSpriteId(gBattleAnimArgs[0]);
- if (!gBattleAnimArgs[0])
+ if (gBattleAnimArgs[0] == ANIM_ATTACKER)
side = GetBattlerSide(gBattleAnimAttacker);
else
side = GetBattlerSide(gBattleAnimTarget);
@@ -2722,10 +2752,10 @@ void sub_815C478(u8 taskId)
}
PrepareBattlerSpriteForRotScale(task->data[15], ST_OAM_OBJ_NORMAL);
- task->func = sub_815C548;
+ task->func = AnimTask_RockMonBackAndForthStep;
}
-static void sub_815C548(u8 taskId)
+static void AnimTask_RockMonBackAndForthStep(u8 taskId)
{
struct Task *task = &gTasks[taskId];
@@ -2779,7 +2809,11 @@ static void sub_815C548(u8 taskId)
}
}
-void sub_815C6B0(struct Sprite *sprite)
+// Floats a petal across the screen towards the target mon's side.
+// arg 0: initial y pixel offset
+// arg 1: sprite anim num
+// arg 2: unused
+void AnimSweetScentPetal(struct Sprite *sprite)
{
if (GetBattlerSide(gBattleAnimAttacker) == B_SIDE_PLAYER)
{
@@ -2794,10 +2828,10 @@ void sub_815C6B0(struct Sprite *sprite)
sprite->data[2] = gBattleAnimArgs[2];
StartSpriteAnim(sprite, gBattleAnimArgs[1]);
- sprite->callback = sub_815C700;
+ sprite->callback = AnimSweetScentPetalStep;
}
-static void sub_815C700(struct Sprite *sprite)
+static void AnimSweetScentPetalStep(struct Sprite *sprite)
{
sprite->data[0] += 3;
if (GetBattlerSide(gBattleAnimAttacker) == B_SIDE_PLAYER)
@@ -2822,7 +2856,9 @@ static void sub_815C700(struct Sprite *sprite)
}
}
-void sub_815C770(u8 taskId)
+// Moves the mon sprite in a flailing back-and-forth motion.
+// arg 0: which battler
+void AnimTask_FlailMovement(u8 taskId)
{
struct Task *task = &gTasks[taskId];
@@ -2836,10 +2872,10 @@ void sub_815C770(u8 taskId)
task->data[15] = GetAnimBattlerSpriteId(gBattleAnimArgs[0]);
PrepareBattlerSpriteForRotScale(task->data[15], ST_OAM_OBJ_NORMAL);
- task->func = sub_815C7C4;
+ task->func = AnimTask_FlailMovementStep;
}
-static void sub_815C7C4(u8 taskId)
+static void AnimTask_FlailMovementStep(u8 taskId)
{
int temp;
struct Task *task = &gTasks[taskId];
@@ -2910,14 +2946,18 @@ static void sub_815C7C4(u8 taskId)
}
}
-void sub_815C95C(struct Sprite *sprite)
+// Makes a spark-like projectile fall on top of the mon.
+// arg 0: initial x pixel offset
+// arg 1: initial y pixel offset
+// arg 2: which battler
+void AnimPainSplitProjectile(struct Sprite *sprite)
{
if (!sprite->data[0])
{
- if (!gBattleAnimArgs[2])
+ if (gBattleAnimArgs[2] == ANIM_ATTACKER)
{
- sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimAttacker, 2);
- sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimAttacker, 3);
+ sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2);
+ sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET);
}
sprite->pos1.x += gBattleAnimArgs[0];
@@ -2944,13 +2984,16 @@ void sub_815C95C(struct Sprite *sprite)
}
}
-void sub_815CA20(u8 taskId)
+// Performs one of several affine transformations on the mon sprite.
+// arg 0: which battler
+// arg 1: which transformation
+void AnimTask_PainSplitMovement(u8 taskId)
{
u8 spriteId;
if (gTasks[taskId].data[0] == 0)
{
- if (gBattleAnimArgs[0] == 0)
+ if (gBattleAnimArgs[0] == ANIM_ATTACKER)
gTasks[taskId].data[11] = gBattleAnimAttacker;
else
gTasks[taskId].data[11] = gBattleAnimTarget;
@@ -3001,7 +3044,9 @@ void sub_815CA20(u8 taskId)
}
}
-void sub_815CB88(struct Sprite *sprite)
+// Move a piece of confetti in a slightly-random speed across the screen.
+// arg 0: which battler the confetti starts from
+void AnimFlatterConfetti(struct Sprite *sprite)
{
u8 tileOffset;
int rand1;
@@ -3023,16 +3068,16 @@ void sub_815CB88(struct Sprite *sprite)
sprite->data[1] = 0x480 - rand2;
sprite->data[2] = gBattleAnimArgs[0];
- if (sprite->data[2] == 0)
+ if (sprite->data[2] == ANIM_ATTACKER)
sprite->pos1.x = -8;
else
sprite->pos1.x = 248;
sprite->pos1.y = 104;
- sprite->callback = sub_815CC34;
+ sprite->callback = AnimFlatterConfettiStep;
}
-static void sub_815CC34(struct Sprite *sprite)
+static void AnimFlatterConfettiStep(struct Sprite *sprite)
{
if (sprite->data[2] == 0)
{
@@ -3054,7 +3099,11 @@ static void sub_815CC34(struct Sprite *sprite)
DestroyAnimSprite(sprite);
}
-void sub_815CC94(struct Sprite *sprite)
+// Uses a spotlight sprite as a light mask to illuminate the target mon. The spotlight grows and shrinks.
+// arg 0: initial x pixel offset
+// arg 1: initial y pixel offset
+// arg 2: duration of fully-opened spotlight
+void AnimFlatterSpotlight(struct Sprite *sprite)
{
SetGpuReg(REG_OFFSET_WINOUT, WINOUT_WIN01_BG_ALL | WINOUT_WIN01_OBJ | WINOUT_WIN01_CLR | WINOUT_WINOBJ_BG_ALL | WINOUT_WINOBJ_OBJ);
SetGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_OBJWIN_ON);
@@ -3067,10 +3116,10 @@ void sub_815CC94(struct Sprite *sprite)
InitSpritePosToAnimTarget(sprite, FALSE);
sprite->oam.objMode = ST_OAM_OBJ_WINDOW;
sprite->invisible = 1;
- sprite->callback = sub_815CD0C;
+ sprite->callback = AnimFlatterSpotlightStep;
}
-static void sub_815CD0C(struct Sprite *sprite)
+static void AnimFlatterSpotlightStep(struct Sprite *sprite)
{
switch (sprite->data[1])
{
@@ -3095,23 +3144,26 @@ static void sub_815CD0C(struct Sprite *sprite)
break;
case 3:
SetGpuReg(REG_OFFSET_WINOUT, WINOUT_WIN01_BG_ALL | WINOUT_WIN01_OBJ | WINOUT_WIN01_CLR | WINOUT_WINOBJ_BG_ALL | WINOUT_WINOBJ_OBJ | WINOUT_WINOBJ_CLR);
- SetGpuReg(REG_OFFSET_DISPCNT, GetGpuReg(REG_OFFSET_DISPCNT) ^ DISPCNT_OBJWIN_ON);
+ SetGpuReg(REG_OFFSET_DISPCNT, GetGpuReg(REG_OFFSET_DISPCNT) ^ DISPCNT_OBJWIN_ON);
DestroyAnimSprite(sprite);
break;
}
}
-void sub_815CDB4(struct Sprite *sprite)
+// Spins an orb around the attacking mon, while its path radius grows and shrinks.
+// arg 0: duration
+// arg 1: initial wave offset
+void AnimReversalOrb(struct Sprite *sprite)
{
- sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimAttacker, 2);
- sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimAttacker, 3);
+ sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2);
+ sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET);
sprite->data[0] = gBattleAnimArgs[0];
sprite->data[1] = gBattleAnimArgs[1];
- sprite->callback = sub_815CDFC;
+ sprite->callback = AnimReversalOrbStep;
sprite->callback(sprite);
}
-static void sub_815CDFC(struct Sprite *sprite)
+static void AnimReversalOrbStep(struct Sprite *sprite)
{
sprite->pos2.x = Sin(sprite->data[1], sprite->data[2] >> 8);
sprite->pos2.y = Cos(sprite->data[1], sprite->data[3] >> 8);
@@ -3143,11 +3195,8 @@ static void sub_815CDFC(struct Sprite *sprite)
}
}
-
-
-extern void sub_815D160(u8);
-
-void sub_815CED8(u8 taskId)
+// Copies the target mon's sprite, and makes a white silhouette that shrinks away.
+void AnimTask_RolePlaySilhouette(u8 taskId)
{
u8 isBackPic;
u32 personality;
@@ -3218,16 +3267,16 @@ void sub_815CED8(u8 taskId)
gSprites[spriteId].oam.priority = priority;
gSprites[spriteId].oam.objMode = ST_OAM_OBJ_BLEND;
- FillPalette(RGB(31, 31, 31), (gSprites[spriteId].oam.paletteNum << 4) + 0x100, 32);
+ FillPalette(RGB_WHITE, (gSprites[spriteId].oam.paletteNum << 4) + 0x100, 32);
gSprites[spriteId].oam.priority = priority;
- SetGpuReg(REG_OFFSET_BLDCNT, 0x3F40);
+ SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_EFFECT_BLEND | BLDCNT_TGT2_ALL);
SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(gTasks[taskId].data[1], 16 - gTasks[taskId].data[1]));
gTasks[taskId].data[0] = spriteId;
- gTasks[taskId].func = sub_815D160;
+ gTasks[taskId].func = AnimTask_RolePlaySilhouetteStep1;
}
-void sub_815D160(u8 taskId)
+static void AnimTask_RolePlaySilhouetteStep1(u8 taskId)
{
if (gTasks[taskId].data[10]++ > 1)
{
@@ -3238,12 +3287,12 @@ void sub_815D160(u8 taskId)
{
gTasks[taskId].data[10] = 256;
gTasks[taskId].data[11] = 256;
- gTasks[taskId].func = sub_815D1BC;
+ gTasks[taskId].func = AnimTask_RolePlaySilhouetteStep2;
}
}
}
-static void sub_815D1BC(u8 taskId)
+static void AnimTask_RolePlaySilhouetteStep2(u8 taskId)
{
u8 spriteId = gTasks[taskId].data[0];
gTasks[taskId].data[10] -= 16;
@@ -3253,12 +3302,14 @@ static void sub_815D1BC(u8 taskId)
if (++gTasks[taskId].data[12] == 9)
{
sub_80A749C(&gSprites[spriteId]);
- sub_80A8610(&gSprites[spriteId]);
- gTasks[taskId].func = sub_80A6814;
+ DestroySpriteAndFreeResources_(&gSprites[spriteId]);
+ gTasks[taskId].func = DestroyAnimVisualTaskAndDisableBlend;
}
}
-void sub_815D240(u8 taskId)
+// Performs a wavy transformation on the mon's sprite, and fades out.
+// arg 0: which battler
+void AnimTask_AcidArmor(u8 taskId)
{
u8 battler;
u16 bgX, bgY;
@@ -3266,7 +3317,7 @@ void sub_815D240(u8 taskId)
struct ScanlineEffectParams scanlineParams;
struct Task *task = &gTasks[taskId];
- if (gBattleAnimArgs[0] == 0)
+ if (gBattleAnimArgs[0] == ANIM_ATTACKER)
battler = gBattleAnimAttacker;
else
battler = gBattleAnimTarget;
@@ -3317,10 +3368,10 @@ void sub_815D240(u8 taskId)
scanlineParams.initState = 1;
scanlineParams.unused9 = 0;
ScanlineEffect_SetParams(scanlineParams);
- task->func = sub_815D398;
+ task->func = AnimTask_AcidArmorStep;
}
-static void sub_815D398(u8 taskId)
+static void AnimTask_AcidArmorStep(u8 taskId)
{
struct Task *task;
s16 var1;
@@ -3434,16 +3485,18 @@ static void sub_815D398(u8 taskId)
}
}
-void sub_815D64C(u8 taskId)
+// Runs an affine animation that makes it look like the mon is inhaling deeply.
+// arg 0: which battler
+void AnimTask_DeepInhale(u8 taskId)
{
struct Task *task = &gTasks[taskId];
task->data[0] = 0;
task->data[15] = GetAnimBattlerSpriteId(gBattleAnimArgs[0]);
- PrepareAffineAnimInTaskData(&gTasks[taskId], task->data[15], gUnknown_085CE5F0);
- task->func = sub_815D694;
+ PrepareAffineAnimInTaskData(&gTasks[taskId], task->data[15], gDeepInhaleAffineAnimCmds);
+ task->func = AnimTask_DeepInhaleStep;
}
-static void sub_815D694(u8 taskId)
+static void AnimTask_DeepInhaleStep(u8 taskId)
{
u16 var0;
@@ -3472,17 +3525,17 @@ static void sub_815D694(u8 taskId)
DestroyAnimVisualTask(taskId);
}
-void sub_815D72C(struct Sprite *sprite, s16 b, s16 c, s16 d, s16 e, u16 f)
+static void InitYawnCloudPosition(struct Sprite *sprite, s16 startX, s16 startY, s16 destX, s16 destY, u16 duration)
{
- sprite->pos1.x = b;
- sprite->pos1.y = c;
- sprite->data[4] = b << 4;
- sprite->data[5] = c << 4;
- sprite->data[6] = ((d - b) << 4) / f;
- sprite->data[7] = ((e - c) << 4) / f;
+ sprite->pos1.x = startX;
+ sprite->pos1.y = startY;
+ sprite->data[4] = startX << 4;
+ sprite->data[5] = startY << 4;
+ sprite->data[6] = ((destX - startX) << 4) / duration;
+ sprite->data[7] = ((destY - startY) << 4) / duration;
}
-void sub_815D794(struct Sprite *sprite)
+static void UpdateYawnCloudPosition(struct Sprite *sprite)
{
sprite->data[4] += sprite->data[6];
sprite->data[5] += sprite->data[7];
@@ -3490,25 +3543,27 @@ void sub_815D794(struct Sprite *sprite)
sprite->pos1.y = sprite->data[5] >> 4;
}
-void sub_815D7B4(struct Sprite *sprite)
+// Drifts a cloud in a wavy path towards the target mon.
+// arg 0: which affine anim
+void AnimYawnCloud(struct Sprite *sprite)
{
- s16 x = sprite->pos1.x;
- s16 y = sprite->pos1.y;
+ s16 destX = sprite->pos1.x;
+ s16 destY = sprite->pos1.y;
SetSpriteCoordsToAnimAttackerCoords(sprite);
StartSpriteAffineAnim(sprite, gBattleAnimArgs[0]);
- sub_815D72C(sprite, sprite->pos1.x, sprite->pos1.y, x, y, 64);
+ InitYawnCloudPosition(sprite, sprite->pos1.x, sprite->pos1.y, destX, destY, 64);
sprite->data[0] = 0;
- sprite->callback = sub_815D804;
+ sprite->callback = AnimYawnCloudStep;
}
-static void sub_815D804(struct Sprite *sprite)
+static void AnimYawnCloudStep(struct Sprite *sprite)
{
int index;
sprite->data[0]++;
index = (sprite->data[0] * 8) & 0xFF;
- sub_815D794(sprite);
+ UpdateYawnCloudPosition(sprite);
sprite->pos2.y = Sin(index, 8);
if (sprite->data[0] > 58)
{
@@ -3523,15 +3578,20 @@ static void sub_815D804(struct Sprite *sprite)
}
}
-void sub_815D870(struct Sprite *sprite)
+// Animates a cloud coming from the smoke ball.
+// arg 0: ?
+// arg 1: initial x pixel offset
+// arg 2: initial y pixel offset
+// arg 3: ?
+void AnimSmokeBallEscapeCloud(struct Sprite *sprite)
{
sprite->data[0] = gBattleAnimArgs[3];
StartSpriteAffineAnim(sprite, gBattleAnimArgs[0]);
if (GetBattlerSide(gBattleAnimTarget) != B_SIDE_PLAYER)
gBattleAnimArgs[1] = -gBattleAnimArgs[1];
- sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimAttacker, 2) + gBattleAnimArgs[1];
- sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimAttacker, 3) + gBattleAnimArgs[2];
+ sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2) + gBattleAnimArgs[1];
+ sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET) + gBattleAnimArgs[2];
sprite->callback = sub_810E2C8;
}
@@ -3672,7 +3732,10 @@ void sub_815DB90(u8 taskId)
gTasks[taskId].func = sub_815DA20;
}
-void sub_815DCA4(u8 taskId)
+// Squishes the mon vertically and emits sweat droplets a few times.
+// arg 0: battler
+// arg 1: num squishes
+void AnimTask_SquishAndSweatDroplets(u8 taskId)
{
u8 battler;
struct Task *task = &gTasks[taskId];
@@ -3684,31 +3747,32 @@ void sub_815DCA4(u8 taskId)
task->data[1] = 0;
task->data[2] = 0;
task->data[3] = gBattleAnimArgs[1];
- if (gBattleAnimArgs[0] == 0)
+ if (gBattleAnimArgs[0] == ANIM_ATTACKER)
battler = gBattleAnimAttacker;
else
battler = gBattleAnimTarget;
- task->data[4] = GetBattlerSpriteCoord(battler, 0);
- task->data[5] = GetBattlerSpriteCoord(battler, 1);
+ task->data[4] = GetBattlerSpriteCoord(battler, BATTLER_COORD_X);
+ task->data[5] = GetBattlerSpriteCoord(battler, BATTLER_COORD_Y);
task->data[6] = GetBattlerSpriteSubpriority(battler);
task->data[15] = GetAnimBattlerSpriteId(gBattleAnimArgs[0]);
- PrepareAffineAnimInTaskData(task, task->data[15], gUnknown_085CE74C);
- task->func = sub_815DD48;
+ PrepareAffineAnimInTaskData(task, task->data[15], gFacadeSquishAffineAnimCmds);
+ task->func = AnimTask_SquishAndSweatDropletsStep;
}
-static void sub_815DD48(u8 taskId)
+static void AnimTask_SquishAndSweatDropletsStep(u8 taskId)
{
struct Task *task = &gTasks[taskId];
switch (task->data[0])
{
case 0:
- if (++task->data[1] == 6)
- sub_815DDE0(taskId, TRUE);
+ task->data[1]++;
+ if (task->data[1] == 6)
+ CreateSweatDroplets(taskId, TRUE);
if (task->data[1] == 18)
- sub_815DDE0(taskId, FALSE);
+ CreateSweatDroplets(taskId, FALSE);
if (!RunAffineAnimFromTaskData(task))
{
@@ -3719,7 +3783,7 @@ static void sub_815DD48(u8 taskId)
else
{
task->data[1] = 0;
- PrepareAffineAnimInTaskData(task, task->data[15], gUnknown_085CE74C);
+ PrepareAffineAnimInTaskData(task, task->data[15], gFacadeSquishAffineAnimCmds);
}
}
break;
@@ -3730,7 +3794,7 @@ static void sub_815DD48(u8 taskId)
}
}
-static void sub_815DDE0(u8 taskId, bool8 arg1)
+static void CreateSweatDroplets(u8 taskId, bool8 arg1)
{
u8 i;
s8 xOffset, yOffset;
@@ -3759,7 +3823,7 @@ static void sub_815DDE0(u8 taskId, bool8 arg1)
for (i = 0; i < 4; i++)
{
- u8 spriteId = CreateSprite(&gUnknown_085CE76C, xCoords[i], yCoords[i & 1], task->data[6] - 5);
+ u8 spriteId = CreateSprite(&gFacadeSweatDrop, xCoords[i], yCoords[i & 1], task->data[6] - 5);
if (spriteId != MAX_SPRITES)
{
gSprites[spriteId].data[0] = 0;
@@ -3783,7 +3847,10 @@ void sub_815DEBC(struct Sprite *sprite)
}
}
-void sub_815DF0C(u8 taskId)
+// Blends the mon sprite's color with a rotating set of colors.
+// arg 0: battler
+// arg 1: duration
+void AnimTask_FacadeColorBlend(u8 taskId)
{
u8 spriteId;
@@ -3791,14 +3858,14 @@ void sub_815DF0C(u8 taskId)
gTasks[taskId].data[1] = gBattleAnimArgs[1];
spriteId = GetAnimBattlerSpriteId(gBattleAnimArgs[0]);
gTasks[taskId].data[2] = 0x100 + gSprites[spriteId].oam.paletteNum * 16;
- gTasks[taskId].func = sub_815DF64;
+ gTasks[taskId].func = AnimTask_FacadeColorBlendStep;
}
-static void sub_815DF64(u8 taskId)
+static void AnimTask_FacadeColorBlendStep(u8 taskId)
{
if (gTasks[taskId].data[1])
{
- BlendPalette(gTasks[taskId].data[2], 16, 8, gUnknown_085CE784[gTasks[taskId].data[0]]);
+ BlendPalette(gTasks[taskId].data[2], 16, 8, gFacadeBlendColors[gTasks[taskId].data[0]]);
if (++gTasks[taskId].data[0] > 23)
gTasks[taskId].data[0] = 0;
@@ -3822,33 +3889,37 @@ void sub_815DFCC(u8 taskId)
10,
2,
30,
- gUnknown_08C2DC68,
- gUnknown_08C2DDC4,
- gUnknown_08C2DDA4);
+ gCureBubblesGfx,
+ gCureBubblesTilemap,
+ gCureBubblesPal);
}
-void sub_815E01C(struct Sprite *sprite)
+// Moves a noise line from the mon.
+// arg 0: initial x pixel offset
+// arg 1: initial y pixel offset
+// arg 2: which direction (0 = upward, 1 = downward, 2 = horizontal)
+void AnimRoarNoiseLine(struct Sprite *sprite)
{
if (GetBattlerSide(gBattleAnimAttacker) == B_SIDE_OPPONENT)
gBattleAnimArgs[0] = -gBattleAnimArgs[0];
- sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimAttacker, 0) + gBattleAnimArgs[0];
- sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimAttacker, 1) + gBattleAnimArgs[1];
+ sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X) + gBattleAnimArgs[0];
+ sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y) + gBattleAnimArgs[1];
if (gBattleAnimArgs[2] == 0)
{
- sprite->data[0] = 640;
- sprite->data[1] = -640;
+ sprite->data[0] = 0x280;
+ sprite->data[1] = -0x280;
}
else if (gBattleAnimArgs[2] == 1)
{
sprite->vFlip = 1;
- sprite->data[0] = 640;
- sprite->data[1] = 640;
+ sprite->data[0] = 0x280;
+ sprite->data[1] = 0x280;
}
else
{
StartSpriteAnim(sprite, 1);
- sprite->data[0] = 640;
+ sprite->data[0] = 0x280;
}
if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER)
@@ -3857,10 +3928,10 @@ void sub_815E01C(struct Sprite *sprite)
sprite->hFlip = 1;
}
- sprite->callback = sub_815E0DC;
+ sprite->callback = AnimRoarNoiseLineStep;
}
-static void sub_815E0DC(struct Sprite *sprite)
+static void AnimRoarNoiseLineStep(struct Sprite *sprite)
{
sprite->data[6] += sprite->data[0];
sprite->data[7] += sprite->data[1];
@@ -3870,7 +3941,9 @@ static void sub_815E0DC(struct Sprite *sprite)
DestroyAnimSprite(sprite);
}
-void sub_815E114(u8 taskId)
+// Makes a series of dots in a trail from the attacker to the target.
+// arg 0: unused
+void AnimTask_GlareEyeDots(u8 taskId)
{
struct Task *task = &gTasks[taskId];
@@ -3888,17 +3961,17 @@ void sub_815E114(u8 taskId)
}
if (GetBattlerSide(gBattleAnimAttacker) == B_SIDE_PLAYER)
- task->data[11] = GetBattlerSpriteCoord(gBattleAnimAttacker, 2) + sub_80A861C(gBattleAnimAttacker, 0) / 4;
+ task->data[11] = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2) + GetBattlerSpriteCoordAttr(gBattleAnimAttacker, BATTLER_COORD_ATTR_HEIGHT) / 4;
else
- task->data[11] = GetBattlerSpriteCoord(gBattleAnimAttacker, 2) - sub_80A861C(gBattleAnimAttacker, 0) / 4;
+ task->data[11] = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2) - GetBattlerSpriteCoordAttr(gBattleAnimAttacker, BATTLER_COORD_ATTR_HEIGHT) / 4;
- task->data[12] = GetBattlerSpriteCoord(gBattleAnimAttacker, 3) - sub_80A861C(gBattleAnimAttacker, 0) / 4;
- task->data[13] = GetBattlerSpriteCoord(gBattleAnimTarget, 2);
- task->data[14] = GetBattlerSpriteCoord(gBattleAnimTarget, 3);
- task->func = sub_815E20C;
+ task->data[12] = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET) - GetBattlerSpriteCoordAttr(gBattleAnimAttacker, BATTLER_COORD_ATTR_HEIGHT) / 4;
+ task->data[13] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2);
+ task->data[14] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET);
+ task->func = AnimTask_GlareEyeDotsStep;
}
-static void sub_815E20C(u8 taskId)
+static void AnimTask_GlareEyeDotsStep(u8 taskId)
{
u8 i;
s16 x, y;
@@ -3910,7 +3983,7 @@ static void sub_815E20C(u8 taskId)
if (++task->data[1] > 3)
{
task->data[1] = 0;
- sub_815E34C(
+ GetGlareEyeDotCoords(
task->data[11],
task->data[12],
task->data[13],
@@ -3922,7 +3995,7 @@ static void sub_815E20C(u8 taskId)
for (i = 0; i < 2; i++)
{
- u8 spriteId = CreateSprite(&gUnknown_085CE7EC, x, y, 35);
+ u8 spriteId = CreateSprite(&gGlareEyeDotSpriteTemplate, x, y, 35);
if (spriteId != MAX_SPRITES)
{
if (task->data[7] == 0)
@@ -3966,7 +4039,7 @@ static void sub_815E20C(u8 taskId)
}
}
-static void sub_815E34C(s16 arg0, s16 arg1, s16 arg2, s16 arg3, u8 arg4, u8 arg5, s16 *x, s16 *y)
+static void GetGlareEyeDotCoords(s16 arg0, s16 arg1, s16 arg2, s16 arg3, u8 arg4, u8 arg5, s16 *x, s16 *y)
{
int x2;
int y2;
@@ -3992,7 +4065,7 @@ static void sub_815E34C(s16 arg0, s16 arg1, s16 arg2, s16 arg3, u8 arg4, u8 arg5
*y = y2 >> 8;
}
-void sub_815E404(struct Sprite *sprite)
+void AnimGlareEyeDot(struct Sprite *sprite)
{
if (++sprite->data[0] > 36)
{
@@ -4001,7 +4074,13 @@ void sub_815E404(struct Sprite *sprite)
}
}
-void sub_815E444(struct Sprite *sprite)
+// Moves a pawprint in a straight line.
+// arg 0: initial x position
+// arg 1: initial y position
+// arg 2: destination x position
+// arg 3: destination y position
+// arg 4: duration
+void AnimAssistPawprint(struct Sprite *sprite)
{
sprite->pos1.x = gBattleAnimArgs[0];
sprite->pos1.y = gBattleAnimArgs[1];
@@ -4012,15 +4091,17 @@ void sub_815E444(struct Sprite *sprite)
sprite->callback = InitAndRunAnimFastLinearTranslation;
}
-void sub_815E47C(u8 taskId)
+// Moves a ball in an arc twoards the target, and rotates the ball while arcing.
+// No args.
+void AnimTask_BarrageBall(u8 taskId)
{
struct Task *task = &gTasks[taskId];
- task->data[11] = GetBattlerSpriteCoord(gBattleAnimAttacker, 2);
- task->data[12] = GetBattlerSpriteCoord(gBattleAnimAttacker, 3);
- task->data[13] = GetBattlerSpriteCoord(gBattleAnimTarget, 2);
- task->data[14] = GetBattlerSpriteCoord(gBattleAnimTarget, 3) + sub_80A861C(gBattleAnimTarget, 0) / 4;
- task->data[15] = CreateSprite(&gUnknown_085CE84C, task->data[11], task->data[12], GetBattlerSpriteSubpriority(gBattleAnimTarget) - 5);
+ task->data[11] = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2);
+ task->data[12] = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET);
+ task->data[13] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2);
+ task->data[14] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET) + GetBattlerSpriteCoordAttr(gBattleAnimTarget, BATTLER_COORD_ATTR_HEIGHT) / 4;
+ task->data[15] = CreateSprite(&gBarrageBallSpriteTemplate, task->data[11], task->data[12], GetBattlerSpriteSubpriority(gBattleAnimTarget) - 5);
if (task->data[15] != MAX_SPRITES)
{
gSprites[task->data[15]].data[0] = 16;
@@ -4031,7 +4112,7 @@ void sub_815E47C(u8 taskId)
if (GetBattlerSide(gBattleAnimAttacker) == B_SIDE_OPPONENT)
StartSpriteAffineAnim(&gSprites[task->data[15]], 1);
- task->func = sub_815E5CC;
+ task->func = AnimTask_BarrageBallStep;
}
else
{
@@ -4039,7 +4120,7 @@ void sub_815E47C(u8 taskId)
}
}
-static void sub_815E5CC(u8 taskId)
+static void AnimTask_BarrageBallStep(u8 taskId)
{
struct Task *task = &gTasks[taskId];
@@ -4082,11 +4163,15 @@ static void sub_815E5CC(u8 taskId)
}
}
-void sub_815E6D8(struct Sprite *sprite)
+// Moves a hand back and forth in a squishing motion.
+// arg 0: which battler
+// arg 1: horizontal flip
+// arg 2: num squishes
+void AnimSmellingSaltsHand(struct Sprite *sprite)
{
u8 battler;
- if (gBattleAnimArgs[0] == 0)
+ if (gBattleAnimArgs[0] == ANIM_ATTACKER)
battler = gBattleAnimAttacker;
else
battler = gBattleAnimTarget;
@@ -4098,11 +4183,11 @@ void sub_815E6D8(struct Sprite *sprite)
if (gBattleAnimArgs[1] == 0)
{
sprite->oam.matrixNum |= 0x8;
- sprite->pos1.x = sub_80A861C(battler, 4) - 8;
+ sprite->pos1.x = GetBattlerSpriteCoordAttr(battler, BATTLER_COORD_ATTR_LEFT) - 8;
}
else
{
- sprite->pos1.x = sub_80A861C(battler, 5) + 8;
+ sprite->pos1.x = GetBattlerSpriteCoordAttr(battler, BATTLER_COORD_ATTR_RIGHT) + 8;
}
sprite->callback = sub_815E784;
@@ -4154,9 +4239,12 @@ static void sub_815E784(struct Sprite *sprite)
}
}
-void sub_815E840(u8 taskId)
+// Squishes the mon horizontally a few times.
+// arg 0: which mon
+// arg 1: number of squishes
+void AnimTask_SmellingSaltsSquish(u8 taskId)
{
- if (gBattleAnimArgs[0] == 0)
+ if (gBattleAnimArgs[0] == ANIM_ATTACKER)
{
DestroyAnimVisualTask(taskId);
}
@@ -4164,12 +4252,12 @@ void sub_815E840(u8 taskId)
{
gTasks[taskId].data[0] = gBattleAnimArgs[1];
gTasks[taskId].data[15] = GetAnimBattlerSpriteId(gBattleAnimArgs[0]);
- PrepareAffineAnimInTaskData(&gTasks[taskId], gTasks[taskId].data[15], gUnknown_085CE87C);
- gTasks[taskId].func = sub_815E898;
+ PrepareAffineAnimInTaskData(&gTasks[taskId], gTasks[taskId].data[15], gSmellingSaltsSquishAffineAnimCmds);
+ gTasks[taskId].func = AnimTask_SmellingSaltsSquishStep;
}
}
-static void sub_815E898(u8 taskId)
+static void AnimTask_SmellingSaltsSquishStep(u8 taskId)
{
struct Task *task = &gTasks[taskId];
@@ -4187,7 +4275,7 @@ static void sub_815E898(u8 taskId)
gSprites[task->data[15]].pos2.x = 0;
if (--task->data[0])
{
- PrepareAffineAnimInTaskData(&gTasks[taskId], gTasks[taskId].data[15], gUnknown_085CE87C);
+ PrepareAffineAnimInTaskData(&gTasks[taskId], gTasks[taskId].data[15], gSmellingSaltsSquishAffineAnimCmds);
task->data[1] = 0;
task->data[2] = 0;
}
@@ -4198,17 +4286,21 @@ static void sub_815E898(u8 taskId)
}
}
-void sub_815E954(struct Sprite *sprite)
+// Blinks an exclamation image over the mon a few times.
+// arg 0: which mon
+// arg 1: blink delay
+// arg 2: number of blinks
+void AnimSmellingSaltExclamation(struct Sprite *sprite)
{
- if (gBattleAnimArgs[0] == 0)
+ if (gBattleAnimArgs[0] == ANIM_ATTACKER)
{
sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimAttacker, 2);
- sprite->pos1.y = sub_80A861C(gBattleAnimAttacker, 2);
+ sprite->pos1.y = GetBattlerSpriteCoordAttr(gBattleAnimAttacker, BATTLER_COORD_ATTR_TOP);
}
else
{
sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimTarget, 2);
- sprite->pos1.y = sub_80A861C(gBattleAnimTarget, 2);
+ sprite->pos1.y = GetBattlerSpriteCoordAttr(gBattleAnimTarget, BATTLER_COORD_ATTR_TOP);
}
if (sprite->pos1.y < 8)
@@ -4218,10 +4310,10 @@ void sub_815E954(struct Sprite *sprite)
sprite->data[1] = gBattleAnimArgs[1];
sprite->data[2] = 0;
sprite->data[3] = gBattleAnimArgs[2];
- sprite->callback = sub_815E9BC;
+ sprite->callback = AnimSmellingSaltExclamationStep;
}
-static void sub_815E9BC(struct Sprite *sprite)
+static void AnimSmellingSaltExclamationStep(struct Sprite *sprite)
{
if (++sprite->data[0] >= sprite->data[1])
{
@@ -4233,11 +4325,14 @@ static void sub_815E9BC(struct Sprite *sprite)
}
}
-void sub_815EA14(struct Sprite *sprite)
+// Claps a hand several times.
+// arg 0: which hand
+// arg 1:
+void AnimHelpingHandClap(struct Sprite *sprite)
{
if (gBattleAnimArgs[0] == 0)
{
- sprite->oam.matrixNum |= 0x8;
+ sprite->oam.matrixNum |= 0x8; // horizontal flip
sprite->pos1.x = 100;
sprite->data[7] = 1;
}
@@ -4248,10 +4343,10 @@ void sub_815EA14(struct Sprite *sprite)
}
sprite->pos1.y = 56;
- sprite->callback = sub_815EA60;
+ sprite->callback = AnimHelpingHandClapStep;
}
-static void sub_815EA60(struct Sprite *sprite)
+static void AnimHelpingHandClapStep(struct Sprite *sprite)
{
switch (sprite->data[0])
{
@@ -4334,7 +4429,9 @@ static void sub_815EA60(struct Sprite *sprite)
}
}
-void sub_815EC48(u8 taskId)
+// Repeatedly moves the attacking mon in a horizontal lunging motion.
+// No args.
+void AnimTask_HelpingHandAttackerMovement(u8 taskId)
{
struct Task *task = &gTasks[taskId];
@@ -4363,10 +4460,10 @@ void sub_815EC48(u8 taskId)
task->data[14] = 1;
}
- task->func = sub_815ECE4;
+ task->func = AnimTask_HelpingHandAttackerMovementStep;
}
-static void sub_815ECE4(u8 taskId)
+static void AnimTask_HelpingHandAttackerMovementStep(u8 taskId)
{
struct Task *task = &gTasks[taskId];
@@ -4448,9 +4545,11 @@ static void sub_815ECE4(u8 taskId)
}
}
-void sub_815EE84(struct Sprite *sprite)
+// Moves a magnifying glass around in straight lines.
+// arg 0: magnifying glass target mon
+void AnimForesightMagnifyingGlass(struct Sprite *sprite)
{
- if (gBattleAnimArgs[0] == 0)
+ if (gBattleAnimArgs[0] == ANIM_ATTACKER)
{
InitSpritePosToAnimAttacker(sprite, TRUE);
sprite->data[7] = gBattleAnimAttacker;
@@ -4461,14 +4560,14 @@ void sub_815EE84(struct Sprite *sprite)
}
if (GetBattlerSide(sprite->data[7]) == B_SIDE_OPPONENT)
- sprite->oam.matrixNum = 8;
+ sprite->oam.matrixNum = 8; // horizontal flip
sprite->oam.priority = GetBattlerSpriteBGPriority(sprite->data[7]);
sprite->oam.objMode = ST_OAM_OBJ_BLEND;
- sprite->callback = sub_815EF08;
+ sprite->callback = AnimForesightMagnifyingGlassStep;
}
-static void sub_815EF08(struct Sprite *sprite)
+static void AnimForesightMagnifyingGlassStep(struct Sprite *sprite)
{
u16 x, y;
@@ -4481,20 +4580,20 @@ static void sub_815EF08(struct Sprite *sprite)
sprite->data[6] = 0;
case 0:
case 4:
- x = sub_80A861C(sprite->data[7], 5) - 4;
- y = sub_80A861C(sprite->data[7], 3) - 4;
+ x = GetBattlerSpriteCoordAttr(sprite->data[7], 5) - 4;
+ y = GetBattlerSpriteCoordAttr(sprite->data[7], 3) - 4;
break;
case 1:
- x = sub_80A861C(sprite->data[7], 5) - 4;
- y = sub_80A861C(sprite->data[7], 2) + 4;
+ x = GetBattlerSpriteCoordAttr(sprite->data[7], 5) - 4;
+ y = GetBattlerSpriteCoordAttr(sprite->data[7], 2) + 4;
break;
case 2:
- x = sub_80A861C(sprite->data[7], 4) + 4;
- y = sub_80A861C(sprite->data[7], 3) - 4;
+ x = GetBattlerSpriteCoordAttr(sprite->data[7], 4) + 4;
+ y = GetBattlerSpriteCoordAttr(sprite->data[7], 3) - 4;
break;
case 3:
- x = sub_80A861C(sprite->data[7], 4) + 4;
- y = sub_80A861C(sprite->data[7], 2) - 4;
+ x = GetBattlerSpriteCoordAttr(sprite->data[7], 4) + 4;
+ y = GetBattlerSpriteCoordAttr(sprite->data[7], 2) - 4;
break;
case 5:
x = GetBattlerSpriteCoord(sprite->data[7], 2);
@@ -4570,14 +4669,14 @@ static void sub_815EF08(struct Sprite *sprite)
}
}
-static void sub_815F10C(struct Sprite *sprite)
+static void AnimMeteorMashStarStep(struct Sprite *sprite)
{
sprite->pos2.x = ((sprite->data[2] - sprite->data[0]) * sprite->data[5]) / sprite->data[4];
sprite->pos2.y = ((sprite->data[3] - sprite->data[1]) * sprite->data[5]) / sprite->data[4];
if (!(sprite->data[5] & 1))
{
CreateSprite(
- &gUnknown_085CE3A0,
+ &gMiniTwinklingStarSpriteTemplate,
sprite->pos1.x + sprite->pos2.x,
sprite->pos1.y + sprite->pos2.y, 5);
}
@@ -4588,10 +4687,16 @@ static void sub_815F10C(struct Sprite *sprite)
sprite->data[5]++;
}
-void sub_815F18C(struct Sprite *sprite)
+// Moves a shooting star across the screen that leaves little twinkling stars behind its path.
+// arg 0: initial x pixel offset
+// arg 1: initial y pixel offset
+// arg 2: destination x pixel offset
+// arg 3: destination y pixel offset
+// arg 4: duration
+void AnimMeteorMashStar(struct Sprite *sprite)
{
- GetBattlerSpriteCoord(gBattleAnimTarget, 2); // unused local variable
- GetBattlerSpriteCoord(gBattleAnimTarget, 3); // unused local variable
+ s16 y = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2); // unused local variable
+ s16 x = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET); // unused local variable
if (GetBattlerSide(gBattleAnimTarget) == B_SIDE_PLAYER || IsContest())
{
@@ -4609,13 +4714,13 @@ void sub_815F18C(struct Sprite *sprite)
sprite->data[4] = gBattleAnimArgs[4];
sprite->pos1.x = sprite->data[0];
sprite->pos1.y = sprite->data[1];
- sprite->callback = sub_815F10C;
+ sprite->callback = AnimMeteorMashStarStep;
}
void AnimTask_MonToSubstitute(u8 taskId)
{
int i;
- u8 spriteId = GetAnimBattlerSpriteId(0);
+ u8 spriteId = GetAnimBattlerSpriteId(ANIM_ATTACKER);
if (gTasks[taskId].data[0] == 0)
{
@@ -4649,11 +4754,11 @@ void AnimTask_MonToSubstitute(u8 taskId)
for (i = 0; i < 16; i++)
gTasks[taskId].data[i] = 0;
- gTasks[taskId].func = sub_815F330;
+ gTasks[taskId].func = AnimTask_MonToSubstituteDoll;
}
}
-static void sub_815F330(u8 taskId)
+static void AnimTask_MonToSubstituteDoll(u8 taskId)
{
u8 spriteId = GetAnimBattlerSpriteId(ANIM_ATTACKER);
@@ -4706,27 +4811,29 @@ static void sub_815F330(u8 taskId)
}
}
-void sub_815F48C(struct Sprite *sprite)
+// Moves down an X that flickers and disappears.
+// No args.
+void AnimBlockX(struct Sprite *sprite)
{
- s16 y2;
+ s16 y;
if (GetBattlerSide(gBattleAnimTarget) == B_SIDE_PLAYER)
{
sprite->subpriority = GetBattlerSpriteSubpriority(gBattleAnimTarget) - 2;
- y2 = -144;
+ y = -144;
}
else
{
sprite->subpriority = GetBattlerSpriteSubpriority(gBattleAnimTarget) + 2;
- y2 = -96;
+ y = -96;
}
sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimTarget, 3);
- sprite->pos2.y = y2;
- sprite->callback = sub_815F4F0;
+ sprite->pos2.y = y;
+ sprite->callback = AnimBlockXStep;
}
-static void sub_815F4F0(struct Sprite *sprite)
+static void AnimBlockXStep(struct Sprite *sprite)
{
switch (sprite->data[0])
{
@@ -4742,7 +4849,7 @@ static void sub_815F4F0(struct Sprite *sprite)
case 1:
sprite->data[1] += 4;
sprite->pos2.y = -(gSineTable[sprite->data[1]] >> 3);
- if (sprite->data[1] > 127)
+ if (sprite->data[1] > 0x7F)
{
PlaySE12WithPanning(SE_W166, BattleAnimAdjustPanning(63));
sprite->data[1] = 0;
@@ -4753,7 +4860,7 @@ static void sub_815F4F0(struct Sprite *sprite)
case 2:
sprite->data[1] += 6;
sprite->pos2.y = -(gSineTable[sprite->data[1]] >> 4);
- if (sprite->data[1] > 127)
+ if (sprite->data[1] > 0x7F)
{
sprite->data[1] = 0;
sprite->pos2.y = 0;
@@ -4781,7 +4888,9 @@ static void sub_815F4F0(struct Sprite *sprite)
}
}
-void sub_815F620(u8 taskId)
+// Quickly moves two clones of the target mon back and forth.
+// No args.
+void AnimTask_OdorSleuthMovement(u8 taskId)
{
s16 spriteId1, spriteId2;
@@ -4837,21 +4946,20 @@ void sub_815F620(u8 taskId)
gSprites[spriteId1].invisible = 1;
}
-
gSprites[spriteId2].oam.objMode = ST_OAM_OBJ_NORMAL;
gSprites[spriteId1].oam.objMode = ST_OAM_OBJ_NORMAL;
- gSprites[spriteId2].callback = sub_815F7C4;
- gSprites[spriteId1].callback = sub_815F7C4;
- gTasks[taskId].func = sub_815F79C;
+ gSprites[spriteId2].callback = MoveOdorSleuthClone;
+ gSprites[spriteId1].callback = MoveOdorSleuthClone;
+ gTasks[taskId].func = AnimTask_OdorSleuthMovementWaitFinish;
}
-static void sub_815F79C(u8 taskId)
+static void AnimTask_OdorSleuthMovementWaitFinish(u8 taskId)
{
if (gTasks[taskId].data[0] == 0)
DestroyAnimVisualTask(taskId);
}
-static void sub_815F7C4(struct Sprite *sprite)
+static void MoveOdorSleuthClone(struct Sprite *sprite)
{
int zero = 0;
if (++sprite->data[1] > 1)
@@ -4902,3 +5010,477 @@ void AnimTask_GetReturnPowerLevel(u8 taskId)
DestroyAnimVisualTask(taskId);
}
+
+// Makes the mon run out of screen, run past the opposing mon, and return to its original position.
+// No args.
+void AnimTask_SnatchOpposingMonMove(u8 taskId)
+{
+ u8 spriteId, spriteId2;
+ int personality;
+ int otId;
+ u16 species;
+ u8 subpriority;
+ u8 isBackPic;
+ s16 x;
+
+ switch (gTasks[taskId].data[0])
+ {
+ case 0:
+ spriteId = GetAnimBattlerSpriteId(ANIM_ATTACKER);
+ gTasks[taskId].data[1] += 0x800;
+ if (GetBattlerSide(gBattleAnimAttacker) == B_SIDE_PLAYER)
+ gSprites[spriteId].pos2.x += (gTasks[taskId].data[1] >> 8);
+ else
+ gSprites[spriteId].pos2.x -= (gTasks[taskId].data[1] >> 8);
+
+ gTasks[taskId].data[1] &= 0xFF;
+ x = gSprites[spriteId].pos1.x + gSprites[spriteId].pos2.x;
+ if ((u16)(x + 32) > 304)
+ {
+ gTasks[taskId].data[1] = 0;
+ gTasks[taskId].data[0]++;
+ }
+ break;
+ case 1:
+ if (IsContest())
+ {
+ personality = gContestResources->field_18->unk8;
+ otId = gContestResources->field_18->unkC;
+ species = gContestResources->field_18->species;
+ subpriority = GetBattlerSpriteSubpriority(gBattleAnimAttacker);
+ isBackPic = 0;
+ x = -32;
+ }
+ else
+ {
+ if (GetBattlerSide(gBattleAnimAttacker) == B_SIDE_PLAYER)
+ {
+ personality = GetMonData(&gPlayerParty[gBattlerPartyIndexes[gBattleAnimAttacker]], MON_DATA_PERSONALITY);
+ otId = GetMonData(&gPlayerParty[gBattlerPartyIndexes[gBattleAnimAttacker]], MON_DATA_OT_ID);
+ if (gBattleSpritesDataPtr->battlerData[gBattleAnimAttacker].transformSpecies == SPECIES_NONE)
+ species = GetMonData(&gPlayerParty[gBattlerPartyIndexes[gBattleAnimAttacker]], MON_DATA_SPECIES);
+ else
+ species = gBattleSpritesDataPtr->battlerData[gBattleAnimAttacker].transformSpecies;
+
+ subpriority = gSprites[GetAnimBattlerSpriteId(ANIM_TARGET)].subpriority + 1;
+ isBackPic = 0;
+ x = 272;
+ }
+ else
+ {
+ personality = GetMonData(&gEnemyParty[gBattlerPartyIndexes[gBattleAnimAttacker]], MON_DATA_PERSONALITY);
+ otId = GetMonData(&gEnemyParty[gBattlerPartyIndexes[gBattleAnimAttacker]], MON_DATA_OT_ID);
+ if (gBattleSpritesDataPtr->battlerData[gBattleAnimAttacker].transformSpecies == SPECIES_NONE)
+ species = GetMonData(&gEnemyParty[gBattlerPartyIndexes[gBattleAnimAttacker]], MON_DATA_SPECIES);
+ else
+ species = gBattleSpritesDataPtr->battlerData[gBattleAnimAttacker].transformSpecies;
+
+ subpriority = gSprites[GetAnimBattlerSpriteId(ANIM_TARGET)].subpriority - 1;
+ isBackPic = 1;
+ x = -32;
+ }
+ }
+
+ spriteId2 = sub_80A8394(species, isBackPic, 0, x, GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y), subpriority, personality, otId, gBattleAnimAttacker, 0);
+ if (gBattleSpritesDataPtr->battlerData[gBattleAnimAttacker].transformSpecies != SPECIES_NONE)
+ BlendPalette((gSprites[spriteId2].oam.paletteNum * 16) | 0x100, 16, 6, RGB_WHITE);
+
+ gTasks[taskId].data[15] = spriteId2;
+ gTasks[taskId].data[0]++;
+ break;
+ case 2:
+ spriteId2 = gTasks[taskId].data[15];
+ gTasks[taskId].data[1] += 0x800;
+ if (GetBattlerSide(gBattleAnimAttacker) == B_SIDE_PLAYER)
+ gSprites[spriteId2].pos2.x -= (gTasks[taskId].data[1] >> 8);
+ else
+ gSprites[spriteId2].pos2.x += (gTasks[taskId].data[1] >> 8);
+
+ gTasks[taskId].data[1] &= 0xFF;
+ x = gSprites[spriteId2].pos1.x + gSprites[spriteId2].pos2.x;
+ if (gTasks[taskId].data[14] == 0)
+ {
+ if (GetBattlerSide(gBattleAnimAttacker) == B_SIDE_PLAYER)
+ {
+ if (x < GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X))
+ {
+ gTasks[taskId].data[14]++;
+ gBattleAnimArgs[7] = 0xFFFF;
+ }
+ }
+ else
+ {
+ if (x > GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X))
+ {
+ gTasks[taskId].data[14]++;
+ gBattleAnimArgs[7] = 0xFFFF;
+ }
+ }
+ }
+
+ if ((u16)(x + 32) > 304)
+ {
+ gTasks[taskId].data[1] = 0;
+ gTasks[taskId].data[0]++;
+ }
+ break;
+ case 3:
+ spriteId = GetAnimBattlerSpriteId(ANIM_ATTACKER);
+ spriteId2 = gTasks[taskId].data[15];
+ DestroySpriteAndFreeResources_(&gSprites[spriteId2]);
+ if (GetBattlerSide(gBattleAnimAttacker) == B_SIDE_PLAYER)
+ gSprites[spriteId].pos2.x = -gSprites[spriteId].pos1.x - 32;
+ else
+ gSprites[spriteId].pos2.x = 272 - gSprites[spriteId].pos1.x;
+
+ gTasks[taskId].data[0]++;
+ break;
+ case 4:
+ spriteId = GetAnimBattlerSpriteId(ANIM_ATTACKER);
+ gTasks[taskId].data[1] += 0x800;
+ if (GetBattlerSide(gBattleAnimAttacker) == B_SIDE_PLAYER)
+ {
+ gSprites[spriteId].pos2.x += (gTasks[taskId].data[1] >> 8);
+ if (gSprites[spriteId].pos2.x + gSprites[spriteId].pos1.x >= GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X))
+ gSprites[spriteId].pos2.x = 0;
+ }
+ else
+ {
+ gSprites[spriteId].pos2.x -= (gTasks[taskId].data[1] >> 8);
+ if (gSprites[spriteId].pos2.x + gSprites[spriteId].pos1.x <= GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X))
+ gSprites[spriteId].pos2.x = 0;
+ }
+
+ gTasks[taskId].data[1] = (u8)gTasks[taskId].data[1];
+ if (gSprites[spriteId].pos2.x == 0)
+ DestroyAnimVisualTask(taskId);
+ break;
+ }
+}
+
+void sub_815FE80(struct Sprite *sprite)
+{
+ switch (sprite->data[7])
+ {
+ case 0:
+ if (gBattleAnimArgs[7] == -1)
+ {
+ PlaySE12WithPanning(SE_W233, BattleAnimAdjustPanning(63));
+ sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y) + 16;
+ sprite->data[0] = -32;
+ sprite->data[7]++;
+ sprite->invisible = 0;
+ if (GetBattlerSide(gBattleAnimAttacker) == B_SIDE_OPPONENT && !IsContest())
+ sprite->subpriority = gSprites[GetAnimBattlerSpriteId(ANIM_TARGET)].subpriority - 1;
+ }
+ else
+ {
+ sprite->invisible = 1;
+ }
+ break;
+ case 1:
+ sprite->pos2.y = Sin(sprite->data[1], sprite->data[0]);
+ sprite->data[1] += 5;
+ if (sprite->data[1] > 0x7F)
+ {
+ sprite->data[0] = sprite->data[0] / 2;
+ sprite->data[3]++;
+ sprite->data[1] -= 0x7F;
+ }
+
+ sprite->data[2] += 0x100;
+ if (GetBattlerSide(gBattleAnimAttacker) == B_SIDE_PLAYER)
+ sprite->pos2.x -= (sprite->data[2] >> 8);
+ else
+ sprite->pos2.x += (sprite->data[2] >> 8);
+
+ sprite->data[2] &= 0xFF;
+ if (sprite->data[3] == 2)
+ DestroyAnimSprite(sprite);
+ break;
+ }
+}
+
+// Quickly moves the mon towards its partner and back.
+// No args.
+void AnimTask_SnatchPartnerMove(u8 taskId)
+{
+ s16 attackerX, targetX;
+ u8 spriteId;
+
+ switch (gTasks[taskId].data[15])
+ {
+ case 0:
+ attackerX = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X);
+ targetX = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X);
+ gTasks[taskId].data[0] = 6;
+ if (attackerX > targetX)
+ gTasks[taskId].data[0] *= -1;
+
+ gTasks[taskId].data[1] = attackerX;
+ gTasks[taskId].data[2] = targetX;
+ gTasks[taskId].data[15]++;
+ break;
+ case 1:
+ spriteId = gBattlerSpriteIds[gBattleAnimAttacker];
+ gSprites[spriteId].pos2.x += gTasks[taskId].data[0];
+ if (gTasks[taskId].data[0] > 0)
+ {
+ if (gSprites[spriteId].pos1.x + gSprites[spriteId].pos2.x >= gTasks[taskId].data[2])
+ gTasks[taskId].data[15]++;
+ }
+ else
+ {
+ if (gSprites[spriteId].pos1.x + gSprites[spriteId].pos2.x <= gTasks[taskId].data[2])
+ gTasks[taskId].data[15]++;
+ }
+ break;
+ case 2:
+ gTasks[taskId].data[0] *= -1;
+ gTasks[taskId].data[15]++;
+ break;
+ case 3:
+ spriteId = gBattlerSpriteIds[gBattleAnimAttacker];
+ gSprites[spriteId].pos2.x += gTasks[taskId].data[0];
+ if (gTasks[taskId].data[0] < 0)
+ {
+ if (gSprites[spriteId].pos1.x + gSprites[spriteId].pos2.x <= gTasks[taskId].data[1])
+ gTasks[taskId].data[15]++;
+ }
+ else
+ {
+ if (gSprites[spriteId].pos1.x + gSprites[spriteId].pos2.x >= gTasks[taskId].data[1])
+ gTasks[taskId].data[15]++;
+ }
+ break;
+ case 4:
+ default:
+ spriteId = gBattlerSpriteIds[gBattleAnimAttacker];
+ gSprites[spriteId].pos2.x = 0;
+ DestroyAnimVisualTask(taskId);
+ break;
+ }
+}
+
+// Moves the mon's sprite back and forth in an unpredictable swaying motion.
+// No args.
+void AnimTask_TeeterDanceMovement(u8 taskId)
+{
+ struct Task *task = &gTasks[taskId];
+ task->data[3] = GetAnimBattlerSpriteId(ANIM_ATTACKER);
+ task->data[4] = GetBattlerSide(gBattleAnimAttacker) == B_SIDE_PLAYER ? 1 : -1;
+ task->data[6] = gSprites[task->data[3]].pos1.y;
+ task->data[5] = gSprites[task->data[3]].pos1.x;
+ task->data[9] = 0;
+ task->data[11] = 0;
+ task->data[10] = 1;
+ task->data[12] = 0;
+ task->func = AnimTask_TeeterDanceMovementStep;
+}
+
+static void AnimTask_TeeterDanceMovementStep(u8 taskId)
+{
+ struct Task *task = &gTasks[taskId];
+ switch (task->data[0])
+ {
+ case 0:
+ task->data[11] += 8;
+ task->data[11] &= 0xFF;
+ gSprites[task->data[3]].pos2.x = gSineTable[task->data[11]] >> 5;
+ task->data[9] += 2;
+ task->data[9] &= 0xFF;
+ gSprites[task->data[3]].pos1.x = (gSineTable[task->data[9]] >> 3) * task->data[4] + task->data[5];
+ if (task->data[9] == 0)
+ {
+ gSprites[task->data[3]].pos1.x = task->data[5];
+ task->data[0]++;
+ }
+ break;
+ case 1:
+ task->data[11] += 8;
+ task->data[11] &= 0xFF;
+ gSprites[task->data[3]].pos2.x = gSineTable[task->data[11]] >> 5;
+ if (task->data[11] == 0)
+ {
+ gSprites[task->data[3]].pos2.x = 0;
+ task->data[0]++;
+ }
+ break;
+ case 2:
+ DestroyAnimVisualTask(taskId);
+ break;
+ }
+}
+
+static void AnimKnockOffStrikeStep(struct Sprite *sprite)
+{
+ // These two cases are identical.
+ if (GetBattlerSide(gBattleAnimTarget) == B_SIDE_PLAYER)
+ {
+ sprite->data[1] += sprite->data[0];
+ sprite->data[1] &= 0xFF;
+ }
+ else
+ {
+ sprite->data[1] += sprite->data[0];
+ sprite->data[1] &= 0xFF;
+ }
+
+ sprite->pos2.x = Cos(sprite->data[1], 20);
+ sprite->pos2.y = Sin(sprite->data[1], 20);
+ if (sprite->animEnded)
+ DestroyAnimSprite(sprite);
+
+ sprite->data[2]++;
+}
+
+// Animates a strike that swipes downard at the target mon.
+// arg 0: initial x pixel offset
+// arg 1: initial y pixel offset
+void AnimKnockOffStrike(struct Sprite *sprite)
+{
+ if (GetBattlerSide(gBattleAnimTarget) == B_SIDE_PLAYER)
+ {
+ sprite->pos1.x -= gBattleAnimArgs[0];
+ sprite->pos1.y += gBattleAnimArgs[1];
+ sprite->data[0] = -11;
+ sprite->data[1] = 192;
+ StartSpriteAffineAnim(sprite, 1);
+ }
+ else
+ {
+ sprite->data[0] = 11;
+ sprite->data[1] = 192;
+ sprite->pos1.x += gBattleAnimArgs[0];
+ sprite->pos1.y += gBattleAnimArgs[1];
+ }
+
+ sprite->callback = AnimKnockOffStrikeStep;
+}
+
+// Gradually fades a rotating recyle arrow sprite in and back out.
+// No args.
+void AnimRecycle(struct Sprite *sprite)
+{
+ sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2);
+ sprite->pos1.y = GetBattlerSpriteCoordAttr(gBattleAnimAttacker, BATTLER_COORD_ATTR_TOP);
+ if (sprite->pos1.y < 16)
+ sprite->pos1.y = 16;
+
+ sprite->data[6] = 0;
+ sprite->data[7] = 16;
+ sprite->callback = AnimRecycleStep;
+ SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(sprite->data[6], sprite->data[7]));
+}
+
+static void AnimRecycleStep(struct Sprite *sprite)
+{
+ switch (sprite->data[2])
+ {
+ case 0:
+ if (++sprite->data[0] > 1)
+ {
+ sprite->data[0] = 0;
+ if (!(sprite->data[1] & 1))
+ {
+ if (sprite->data[6] < 16)
+ sprite->data[6]++;
+ }
+ else
+ {
+ if (sprite->data[7] != 0)
+ sprite->data[7]--;
+ }
+
+ sprite->data[1]++;
+ SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(sprite->data[6], sprite->data[7]));
+ if (sprite->data[7] == 0)
+ sprite->data[2]++;
+ }
+ break;
+ case 1:
+ if (++sprite->data[0] == 10)
+ {
+ sprite->data[0] = 0;
+ sprite->data[1] = 0;
+ sprite->data[2]++;
+ }
+ break;
+ case 2:
+ if (++sprite->data[0] > 1)
+ {
+ sprite->data[0] = 0;
+ if (!(sprite->data[1] & 1))
+ {
+ if (sprite->data[6] != 0)
+ sprite->data[6]--;
+ }
+ else
+ {
+ if (sprite->data[7] < 16)
+ sprite->data[7]++;
+ }
+
+ sprite->data[1]++;
+ SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(sprite->data[6], sprite->data[7]));
+ if (sprite->data[7] == 16)
+ sprite->data[2]++;
+ }
+ break;
+ case 3:
+ DestroySpriteAndMatrix(sprite);
+ break;
+ }
+}
+
+void AnimTask_GetWeather(u8 taskId)
+{
+ gBattleAnimArgs[7] = ANIM_WEATHER_NONE;
+ if (gWeatherMoveAnim & WEATHER_SUN_ANY)
+ gBattleAnimArgs[7] = ANIM_WEATHER_SUN;
+ else if (gWeatherMoveAnim & WEATHER_RAIN_ANY)
+ gBattleAnimArgs[7] = ANIM_WEATHER_RAIN;
+ else if (gWeatherMoveAnim & WEATHER_SANDSTORM_ANY)
+ gBattleAnimArgs[7] = ANIM_WEATHER_SANDSTORM;
+ else if (gWeatherMoveAnim & WEATHER_HAIL_ANY)
+ gBattleAnimArgs[7] = ANIM_WEATHER_HAIL;
+
+ DestroyAnimVisualTask(taskId);
+}
+
+// Squishes the mon sprite vertically, and shakes it back and forth.
+// arg 0: which battler
+void AnimTask_SlackOffSquish(u8 taskId)
+{
+ struct Task *task = &gTasks[taskId];
+ task->data[0] = 0;
+ task->data[15] = GetAnimBattlerSpriteId(gBattleAnimArgs[0]);
+ PrepareAffineAnimInTaskData(task, task->data[15], gSlackOffSquishAffineAnimCmds);
+ task->func = AnimTask_SlackOffSquishStep;
+}
+
+static void AnimTask_SlackOffSquishStep(u8 taskId)
+{
+ struct Task *task = &gTasks[taskId];
+
+ gTasks[taskId].data[0]++;
+ if (gTasks[taskId].data[0] > 16 && gTasks[taskId].data[0] < 40)
+ {
+ if (++task->data[1] > 2)
+ {
+ task->data[1] = 0;
+ task->data[2]++;
+ if (!(task->data[2] & 1))
+ gSprites[task->data[15]].pos2.x = -1;
+ else
+ gSprites[task->data[15]].pos2.x = 1;
+ }
+ }
+ else
+ {
+ gSprites[task->data[15]].pos2.x = 0;
+ }
+
+ if (!RunAffineAnimFromTaskData(&gTasks[taskId]))
+ DestroyAnimVisualTask(taskId);
+}
diff --git a/src/battle_anim_utility_funcs.c b/src/battle_anim_utility_funcs.c
index f99b1aeac..ba7cbd3aa 100644
--- a/src/battle_anim_utility_funcs.c
+++ b/src/battle_anim_utility_funcs.c
@@ -767,7 +767,8 @@ void sub_81177E4(u8 taskId)
DestroyAnimVisualTask(taskId);
}
-void sub_8117854(u8 taskId, int unused, u16 arg2, u8 battler1, u8 arg4, u8 arg5, u8 arg6, u8 arg7, const u8 *arg8, const u8 *arg9, const u16 *palette)
+
+void sub_8117854(u8 taskId, int unused, u16 arg2, u8 battler1, u8 arg4, u8 arg5, u8 arg6, u8 arg7, const u32 *gfx, const u32 *tilemap, const u32 *palette)
{
u16 species;
u8 spriteId, spriteId2;
@@ -818,8 +819,8 @@ void sub_8117854(u8 taskId, int unused, u16 arg2, u8 battler1, u8 arg4, u8 arg5,
spriteId2 = sub_80A89C8(battler2, gBattlerSpriteIds[battler2], species);
sub_80A6B30(&unknownStruct);
- sub_80A6D60(&unknownStruct, arg9, 0);
- sub_80A6CC0(unknownStruct.bgId, arg8, unknownStruct.tilesOffset);
+ sub_80A6D60(&unknownStruct, tilemap, 0);
+ sub_80A6CC0(unknownStruct.bgId, gfx, unknownStruct.tilesOffset);
LoadCompressedPalette(palette, unknownStruct.unk8 << 4, 32);
gBattle_BG1_X = 0;
diff --git a/src/battle_arena.c b/src/battle_arena.c
index 14f86c882..cfcb10a0d 100644
--- a/src/battle_arena.c
+++ b/src/battle_arena.c
@@ -8,6 +8,7 @@
#include "decompress.h"
#include "event_data.h"
#include "frontier_util.h"
+#include "graphics.h"
#include "gpu_regs.h"
#include "item.h"
#include "m4a.h"
@@ -23,9 +24,6 @@
#include "constants/battle_frontier.h"
#include "constants/moves.h"
-extern const u32 gUnknown_08D854E8[];
-extern const u16 gUnknown_08D855E8[];
-
// This file's functions.
static void sub_81A58B4(void);
static void sub_81A5964(void);
@@ -784,7 +782,7 @@ static void sub_81A58B4(void)
if (!isCurrent)
gSaveBlock2Ptr->frontier.arenaWinStreaks[lvlMode] = 0;
- saved_warp2_set(0, gSaveBlock1Ptr->location.mapGroup, gSaveBlock1Ptr->location.mapNum, -1);
+ SetDynamicWarp(0, gSaveBlock1Ptr->location.mapGroup, gSaveBlock1Ptr->location.mapNum, -1);
gTrainerBattleOpponent_A = 0;
}
diff --git a/src/battle_bg.c b/src/battle_bg.c
index a6919be1d..a072a2cda 100644
--- a/src/battle_bg.c
+++ b/src/battle_bg.c
@@ -1092,7 +1092,7 @@ void DrawBattleEntryBackground(void)
LZDecompressVram(gUnknown_08D778F0, (void*)(VRAM + 0x4000));
LZDecompressVram(gUnknown_08D77B0C, (void*)(VRAM + 0x10000));
LoadCompressedPalette(gUnknown_08D77AE4, 0x60, 0x20);
- SetBgAttribute(1, BG_CTRL_ATTR_MAPBASEINDEX, 1);
+ SetBgAttribute(1, BG_ATTR_SCREENSIZE, 1);
SetGpuReg(REG_OFFSET_BG1CNT, 0x5C04);
CopyToBgTilemapBuffer(1, gUnknown_08D779D8, 0, 0);
CopyToBgTilemapBuffer(2, gUnknown_08D779D8, 0, 0);
@@ -1113,8 +1113,8 @@ void DrawBattleEntryBackground(void)
}
else
{
- SetBgAttribute(1, BG_CTRL_ATTR_VISIBLE, 2);
- SetBgAttribute(2, BG_CTRL_ATTR_VISIBLE, 2);
+ SetBgAttribute(1, BG_ATTR_CHARBASEINDEX, 2);
+ SetBgAttribute(2, BG_ATTR_CHARBASEINDEX, 2);
CopyToBgTilemapBuffer(1, gUnknown_08D857A8, 0, 0);
CopyToBgTilemapBuffer(2, gUnknown_08D85A1C, 0, 0);
CopyBgTilemapBufferToVram(1);
diff --git a/src/battle_controller_player.c b/src/battle_controller_player.c
index 6ccae2e95..12ffca381 100644
--- a/src/battle_controller_player.c
+++ b/src/battle_controller_player.c
@@ -869,7 +869,7 @@ static void sub_80586F8(void)
}
else
{
- if (sub_800A520())
+ if (IsLinkTaskFinished())
{
m4aSongNumStop(SE_HINSI);
gMain.inBattle = 0;
@@ -888,7 +888,7 @@ void sub_80587B0(void)
{
if (gBattleTypeFlags & BATTLE_TYPE_LINK)
{
- if (sub_800A520())
+ if (IsLinkTaskFinished())
{
if (gWirelessCommType == 0)
sub_800AC34();
diff --git a/src/battle_controllers.c b/src/battle_controllers.c
index 06d856d28..70a53f332 100644
--- a/src/battle_controllers.c
+++ b/src/battle_controllers.c
@@ -800,7 +800,7 @@ static void Task_HandleSendLinkBuffersData(u8 taskId)
}
break;
case 4:
- if (sub_800A520())
+ if (IsLinkTaskFinished())
{
blockSize = gLinkBattleSendBuffer[gTasks[taskId].data[15] + LINK_BUFF_SIZE_LO] | (gLinkBattleSendBuffer[gTasks[taskId].data[15] + LINK_BUFF_SIZE_HI] << 8);
gTasks[taskId].data[13] = 1;
diff --git a/src/battle_dome.c b/src/battle_dome.c
index 8645eb76b..00ae84d09 100644
--- a/src/battle_dome.c
+++ b/src/battle_dome.c
@@ -2388,7 +2388,7 @@ static void sub_818E9CC(void)
if (!(gSaveBlock2Ptr->frontier.field_CDC & gUnknown_0860D0EC[battleMode][lvlMode]))
gSaveBlock2Ptr->frontier.domeWinStreaks[battleMode][lvlMode] = 0;
- saved_warp2_set(0, gSaveBlock1Ptr->location.mapGroup, gSaveBlock1Ptr->location.mapNum, -1);
+ SetDynamicWarp(0, gSaveBlock1Ptr->location.mapGroup, gSaveBlock1Ptr->location.mapNum, -1);
gTrainerBattleOpponent_A = 0;
}
diff --git a/src/battle_factory.c b/src/battle_factory.c
index 419408695..0445d5dea 100644
--- a/src/battle_factory.c
+++ b/src/battle_factory.c
@@ -202,7 +202,7 @@ static void sub_81A5E94(void)
for (i = 0; i < 3; i++)
gUnknown_03006298[i] |= 0xFFFF;
- saved_warp2_set(0, gSaveBlock1Ptr->location.mapGroup, gSaveBlock1Ptr->location.mapNum, -1);
+ SetDynamicWarp(0, gSaveBlock1Ptr->location.mapGroup, gSaveBlock1Ptr->location.mapNum, -1);
gTrainerBattleOpponent_A = 0;
}
diff --git a/src/battle_interface.c b/src/battle_interface.c
index 4a8422091..0eb494db4 100644
--- a/src/battle_interface.c
+++ b/src/battle_interface.c
@@ -1753,7 +1753,7 @@ static void sub_8073E08(u8 taskId)
if (--gTasks[taskId].tData15 < 0)
return;
- SetGpuReg(REG_OFFSET_BLDALPHA, (gTasks[taskId].data[15]) | ((16 - gTasks[taskId].data[15]) << 8));
+ SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(gTasks[taskId].data[15], 16 - gTasks[taskId].data[15]));
}
if (gTasks[taskId].tData15 == 0)
gTasks[taskId].func = sub_8073E64;
@@ -1806,7 +1806,7 @@ static void sub_8073F98(u8 taskId)
if (--gTasks[taskId].tData15 >= 0)
{
- SetGpuReg(REG_OFFSET_BLDALPHA, (gTasks[taskId].tData15) | ((16 - gTasks[taskId].tData15) << 8));
+ SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(gTasks[taskId].data[15], 16 - gTasks[taskId].data[15]));
}
else if (gTasks[taskId].tData15 == -1)
{
diff --git a/src/battle_intro.c b/src/battle_intro.c
index 736e35a87..21e83ed29 100644
--- a/src/battle_intro.c
+++ b/src/battle_intro.c
@@ -221,8 +221,8 @@ static void BattleIntroSlide1(u8 taskId)
gScanlineEffect.state = 3;
gTasks[taskId].data[0]++;
CpuFill32(0, (void *)BG_SCREEN_ADDR(28), BG_SCREEN_SIZE);
- SetBgAttribute(1, BG_CTRL_ATTR_VISIBLE, 0);
- SetBgAttribute(2, BG_CTRL_ATTR_VISIBLE, 0);
+ SetBgAttribute(1, BG_ATTR_CHARBASEINDEX, 0);
+ SetBgAttribute(2, BG_ATTR_CHARBASEINDEX, 0);
SetGpuReg(REG_OFFSET_BG1CNT, BGCNT_PRIORITY(0) | BGCNT_CHARBASE(0) | BGCNT_16COLOR | BGCNT_SCREENBASE(28) | BGCNT_TXT256x512);
SetGpuReg(REG_OFFSET_BG2CNT, BGCNT_PRIORITY(0) | BGCNT_CHARBASE(0) | BGCNT_16COLOR | BGCNT_SCREENBASE(30) | BGCNT_TXT512x256);
}
@@ -330,8 +330,8 @@ static void BattleIntroSlide2(u8 taskId)
gScanlineEffect.state = 3;
gTasks[taskId].data[0]++;
CpuFill32(0, (void *)BG_SCREEN_ADDR(28), BG_SCREEN_SIZE);
- SetBgAttribute(1, BG_CTRL_ATTR_VISIBLE, 0);
- SetBgAttribute(2, BG_CTRL_ATTR_VISIBLE, 0);
+ SetBgAttribute(1, BG_ATTR_CHARBASEINDEX, 0);
+ SetBgAttribute(2, BG_ATTR_CHARBASEINDEX, 0);
SetGpuReg(REG_OFFSET_BG1CNT, BGCNT_PRIORITY(0) | BGCNT_CHARBASE(0) | BGCNT_16COLOR | BGCNT_SCREENBASE(28) | BGCNT_TXT256x512);
SetGpuReg(REG_OFFSET_BG2CNT, BGCNT_PRIORITY(0) | BGCNT_CHARBASE(0) | BGCNT_16COLOR | BGCNT_SCREENBASE(30) | BGCNT_TXT512x256);
}
@@ -418,8 +418,8 @@ static void BattleIntroSlide3(u8 taskId)
gScanlineEffect.state = 3;
gTasks[taskId].data[0]++;
CpuFill32(0, (void *)BG_SCREEN_ADDR(28), BG_SCREEN_SIZE);
- SetBgAttribute(1, BG_CTRL_ATTR_VISIBLE, 0);
- SetBgAttribute(2, BG_CTRL_ATTR_VISIBLE, 0);
+ SetBgAttribute(1, BG_ATTR_CHARBASEINDEX, 0);
+ SetBgAttribute(2, BG_ATTR_CHARBASEINDEX, 0);
SetGpuReg(REG_OFFSET_BG1CNT, BGCNT_PRIORITY(0) | BGCNT_CHARBASE(0) | BGCNT_16COLOR | BGCNT_SCREENBASE(28) | BGCNT_TXT256x512);
SetGpuReg(REG_OFFSET_BG2CNT, BGCNT_PRIORITY(0) | BGCNT_CHARBASE(0) | BGCNT_16COLOR | BGCNT_SCREENBASE(30) | BGCNT_TXT512x256);
}
@@ -499,8 +499,8 @@ static void BattleIntroSlideLink(u8 taskId)
{
gScanlineEffect.state = 3;
gTasks[taskId].data[0]++;
- SetBgAttribute(1, BG_CTRL_ATTR_VISIBLE, 0);
- SetBgAttribute(2, BG_CTRL_ATTR_VISIBLE, 0);
+ SetBgAttribute(1, BG_ATTR_CHARBASEINDEX, 0);
+ SetBgAttribute(2, BG_ATTR_CHARBASEINDEX, 0);
SetGpuReg(REG_OFFSET_BG1CNT, BGCNT_PRIORITY(0) | BGCNT_CHARBASE(0) | BGCNT_16COLOR | BGCNT_SCREENBASE(28) | BGCNT_TXT256x512);
SetGpuReg(REG_OFFSET_BG2CNT, BGCNT_PRIORITY(0) | BGCNT_CHARBASE(0) | BGCNT_16COLOR | BGCNT_SCREENBASE(30) | BGCNT_TXT512x256);
}
@@ -567,8 +567,8 @@ static void BattleIntroSlidePartner(u8 taskId)
{
CpuFill32(0, (void *)BG_SCREEN_ADDR(28), BG_SCREEN_SIZE * 4);
SetGpuReg(REG_OFFSET_DISPCNT, GetGpuReg(REG_OFFSET_DISPCNT) & ~DISPCNT_WIN1_ON);
- SetBgAttribute(1, BG_CTRL_ATTR_VISIBLE, 0);
- SetBgAttribute(2, BG_CTRL_ATTR_VISIBLE, 0);
+ SetBgAttribute(1, BG_ATTR_CHARBASEINDEX, 0);
+ SetBgAttribute(2, BG_ATTR_CHARBASEINDEX, 0);
SetGpuReg(REG_OFFSET_BG1CNT, BGCNT_PRIORITY(0) | BGCNT_CHARBASE(0) | BGCNT_16COLOR | BGCNT_SCREENBASE(28) | BGCNT_TXT256x512);
SetGpuReg(REG_OFFSET_BG2CNT, BGCNT_PRIORITY(0) | BGCNT_CHARBASE(0) | BGCNT_16COLOR | BGCNT_SCREENBASE(30) | BGCNT_TXT512x256);
gScanlineEffect.state = 3;
diff --git a/src/battle_main.c b/src/battle_main.c
index 0080c09f3..df1828d18 100644
--- a/src/battle_main.c
+++ b/src/battle_main.c
@@ -17,6 +17,7 @@
#include "dma3.h"
#include "event_data.h"
#include "evolution_scene.h"
+#include "graphics.h"
#include "gpu_regs.h"
#include "international_string_util.h"
#include "item.h"
@@ -60,7 +61,6 @@
extern struct MusicPlayerInfo gMPlayInfo_SE1;
extern struct MusicPlayerInfo gMPlayInfo_SE2;
-extern const u16 gBattleTextboxPalette[];
extern const struct BgTemplate gBattleBgTemplates[];
extern const struct WindowTemplate *const gBattleWindowTemplates[];
extern const u8 *const gBattleScriptsForMoveEffects[];
@@ -986,7 +986,7 @@ static void CB2_HandleStartBattle(void)
{
if (gReceivedRemoteLinkPlayers != 0)
{
- if (sub_800A520())
+ if (IsLinkTaskFinished())
{
*(&gBattleStruct->field_180) = 0;
*(&gBattleStruct->field_181) = 3;
@@ -1035,7 +1035,7 @@ static void CB2_HandleStartBattle(void)
}
break;
case 3:
- if (sub_800A520())
+ if (IsLinkTaskFinished())
{
SendBlock(bitmask_all_link_players_but_self(), gPlayerParty, sizeof(struct Pokemon) * 2);
gBattleCommunication[MULTIUSE_STATE]++;
@@ -1050,7 +1050,7 @@ static void CB2_HandleStartBattle(void)
}
break;
case 7:
- if (sub_800A520())
+ if (IsLinkTaskFinished())
{
SendBlock(bitmask_all_link_players_but_self(), gPlayerParty + 2, sizeof(struct Pokemon) * 2);
gBattleCommunication[MULTIUSE_STATE]++;
@@ -1065,7 +1065,7 @@ static void CB2_HandleStartBattle(void)
}
break;
case 11:
- if (sub_800A520())
+ if (IsLinkTaskFinished())
{
SendBlock(bitmask_all_link_players_but_self(), gPlayerParty + 4, sizeof(struct Pokemon) * 2);
gBattleCommunication[MULTIUSE_STATE]++;
@@ -1107,7 +1107,7 @@ static void CB2_HandleStartBattle(void)
}
break;
case 16:
- if (sub_800A520())
+ if (IsLinkTaskFinished())
{
SendBlock(bitmask_all_link_players_but_self(), &gRecordedBattleRngSeed, sizeof(gRecordedBattleRngSeed));
gBattleCommunication[MULTIUSE_STATE]++;
@@ -1194,7 +1194,7 @@ static void CB2_HandleStartMultiPartnerBattle(void)
GetBattleTowerTrainerLanguage(&language, gTrainerBattleOpponent_B);
gLinkPlayers[3].language = language;
- if (sub_800A520())
+ if (IsLinkTaskFinished())
{
*(&gBattleStruct->field_180) = 0;
*(&gBattleStruct->field_181) = 3;
@@ -1234,7 +1234,7 @@ static void CB2_HandleStartMultiPartnerBattle(void)
}
break;
case 3:
- if (sub_800A520())
+ if (IsLinkTaskFinished())
{
SendBlock(bitmask_all_link_players_but_self(), gPlayerParty, sizeof(struct Pokemon) * 2);
gBattleCommunication[MULTIUSE_STATE]++;
@@ -1258,7 +1258,7 @@ static void CB2_HandleStartMultiPartnerBattle(void)
}
break;
case 5:
- if (sub_800A520())
+ if (IsLinkTaskFinished())
{
SendBlock(bitmask_all_link_players_but_self(), gPlayerParty + 2, sizeof(struct Pokemon));
gBattleCommunication[MULTIUSE_STATE]++;
@@ -1282,7 +1282,7 @@ static void CB2_HandleStartMultiPartnerBattle(void)
}
break;
case 7:
- if (sub_800A520())
+ if (IsLinkTaskFinished())
{
SendBlock(bitmask_all_link_players_but_self(), gEnemyParty, sizeof(struct Pokemon) * 2);
gBattleCommunication[MULTIUSE_STATE]++;
@@ -1300,7 +1300,7 @@ static void CB2_HandleStartMultiPartnerBattle(void)
}
break;
case 9:
- if (sub_800A520())
+ if (IsLinkTaskFinished())
{
SendBlock(bitmask_all_link_players_but_self(), gEnemyParty + 2, sizeof(struct Pokemon) * 2);
gBattleCommunication[MULTIUSE_STATE]++;
@@ -1318,7 +1318,7 @@ static void CB2_HandleStartMultiPartnerBattle(void)
}
break;
case 11:
- if (sub_800A520())
+ if (IsLinkTaskFinished())
{
SendBlock(bitmask_all_link_players_but_self(), gEnemyParty + 4, sizeof(struct Pokemon) * 2);
gBattleCommunication[MULTIUSE_STATE]++;
@@ -1360,7 +1360,7 @@ static void CB2_HandleStartMultiPartnerBattle(void)
}
break;
case 14:
- if (sub_800A520())
+ if (IsLinkTaskFinished())
{
SendBlock(bitmask_all_link_players_but_self(), &gRecordedBattleRngSeed, sizeof(gRecordedBattleRngSeed));
gBattleCommunication[MULTIUSE_STATE]++;
@@ -1440,7 +1440,7 @@ static void CB2_PreInitMultiBattle(void)
switch (gBattleCommunication[MULTIUSE_STATE])
{
case 0:
- if (gReceivedRemoteLinkPlayers != 0 && sub_800A520())
+ if (gReceivedRemoteLinkPlayers != 0 && IsLinkTaskFinished())
{
gUnknown_02023058 = Alloc(sizeof(struct UnknownPokemonStruct4) * 3);
sub_80379F8(0);
@@ -1478,7 +1478,7 @@ static void CB2_PreInitMultiBattle(void)
}
break;
case 2:
- if (sub_800A520() && !gPaletteFade.active)
+ if (IsLinkTaskFinished() && !gPaletteFade.active)
{
gBattleCommunication[MULTIUSE_STATE]++;
if (gWirelessCommType)
@@ -1581,7 +1581,7 @@ static void CB2_HandleStartMultiBattle(void)
{
if (gReceivedRemoteLinkPlayers != 0)
{
- if (sub_800A520())
+ if (IsLinkTaskFinished())
{
*(&gBattleStruct->field_180) = 0;
*(&gBattleStruct->field_181) = 3;
@@ -1643,7 +1643,7 @@ static void CB2_HandleStartMultiBattle(void)
break;
// fall through
case 3:
- if (sub_800A520())
+ if (IsLinkTaskFinished())
{
SendBlock(bitmask_all_link_players_but_self(), gPlayerParty, sizeof(struct Pokemon) * 2);
gBattleCommunication[MULTIUSE_STATE]++;
@@ -1706,7 +1706,7 @@ static void CB2_HandleStartMultiBattle(void)
}
break;
case 5:
- if (sub_800A520())
+ if (IsLinkTaskFinished())
{
SendBlock(bitmask_all_link_players_but_self(), gPlayerParty + 2, sizeof(struct Pokemon));
gBattleCommunication[MULTIUSE_STATE]++;
@@ -1802,7 +1802,7 @@ static void CB2_HandleStartMultiBattle(void)
}
break;
case 8:
- if (sub_800A520())
+ if (IsLinkTaskFinished())
{
u32* ptr = (u32*)(&gBattleStruct->field_180);
ptr[0] = gBattleTypeFlags;
@@ -2361,7 +2361,7 @@ static void sub_8038F34(void)
gBattleCommunication[MULTIUSE_STATE]++;
break;
case 6:
- if (sub_800A520() == TRUE)
+ if (IsLinkTaskFinished() == TRUE)
{
sub_800ADF8();
BattlePutTextOnWindow(gText_LinkStandby3, 0);
@@ -2371,7 +2371,7 @@ static void sub_8038F34(void)
case 7:
if (!IsTextPrinterActive(0))
{
- if (sub_800A520() == TRUE)
+ if (IsLinkTaskFinished() == TRUE)
gBattleCommunication[MULTIUSE_STATE]++;
}
break;
@@ -2546,7 +2546,7 @@ static void sub_803939C(void)
}
break;
case 6:
- if (sub_800A520() == TRUE)
+ if (IsLinkTaskFinished() == TRUE)
{
HandleBattleWindow(0x18, 8, 0x1D, 0xD, WINDOW_CLEAR);
if (gMain.field_439_x4)
@@ -2596,7 +2596,7 @@ static void sub_803939C(void)
}
break;
case 11:
- if (sub_800A520() == TRUE && !IsTextPrinterActive(0) && --gBattleCommunication[1] == 0)
+ if (IsLinkTaskFinished() == TRUE && !IsTextPrinterActive(0) && --gBattleCommunication[1] == 0)
{
if (gMain.field_439_x4)
{
@@ -2612,7 +2612,7 @@ static void sub_803939C(void)
{
if (gMain.field_439_x4)
{
- if (sub_800A520() == TRUE)
+ if (IsLinkTaskFinished() == TRUE)
{
BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 0x10, RGB_BLACK);
gBattleCommunication[1] = 0x20;
diff --git a/src/battle_palace.c b/src/battle_palace.c
index 4033712b6..fb8cc0729 100644
--- a/src/battle_palace.c
+++ b/src/battle_palace.c
@@ -69,7 +69,7 @@ static void sub_8195980(void)
if (!(gSaveBlock2Ptr->frontier.field_CDC & gUnknown_0860DE98[battleMode][lvlMode]))
gSaveBlock2Ptr->frontier.palaceWinStreaks[battleMode][lvlMode] = 0;
- saved_warp2_set(0, gSaveBlock1Ptr->location.mapGroup, gSaveBlock1Ptr->location.mapNum, -1);
+ SetDynamicWarp(0, gSaveBlock1Ptr->location.mapGroup, gSaveBlock1Ptr->location.mapNum, -1);
gTrainerBattleOpponent_A = 0;
}
diff --git a/src/battle_pyramid.c b/src/battle_pyramid.c
index c9d904287..2f0d35feb 100644
--- a/src/battle_pyramid.c
+++ b/src/battle_pyramid.c
@@ -1202,8 +1202,8 @@ static u8 sub_81A9998(s32 *arg0, u8 arg1, u8 arg2)
{
s32 i, j;
u8 ret = 0;
- u16 *map = gUnknown_03005DC0.map;
- map += gUnknown_03005DC0.width * 7 + 7;
+ u16 *map = gBackupMapLayout.map;
+ map += gBackupMapLayout.width * 7 + 7;
for (i = 0; i < 32; map += 47, i++)
{
@@ -1493,11 +1493,11 @@ void sub_81AA078(u16 *mapArg, u8 arg1)
const struct MapLayout *mapLayout = gMapLayouts[allocated[i] + 0x169];
const u16 *layoutMap = mapLayout->map;
- gUnknown_03005DC0.map = mapArg;
- gUnknown_03005DC0.width = mapLayout->width * 4 + 15;
- gUnknown_03005DC0.height = mapLayout->height * 4 + 14;
+ gBackupMapLayout.map = mapArg;
+ gBackupMapLayout.width = mapLayout->width * 4 + 15;
+ gBackupMapLayout.height = mapLayout->height * 4 + 14;
map = mapArg;
- heightAdd = (((i / 4 * mapLayout->height) + 7) * (gUnknown_03005DC0.width));
+ heightAdd = (((i / 4 * mapLayout->height) + 7) * (gBackupMapLayout.width));
widthAdd = ((i % 4 * mapLayout->width) + 7);
map += heightAdd + widthAdd;
for (j = 0; j < mapLayout->height; j++)
diff --git a/src/battle_pyramid_bag.c b/src/battle_pyramid_bag.c
index 12f631155..50baf48fd 100644
--- a/src/battle_pyramid_bag.c
+++ b/src/battle_pyramid_bag.c
@@ -365,7 +365,7 @@ static void sub_81C4F44(u8 taskId)
{
if (!gPaletteFade.active)
{
- overworld_free_bg_tilemaps();
+ CleanupOverworldWindowsAndTilemaps();
gFieldCallback2 = hm_add_c3_without_phase_2;
sub_81C4F98(3, CB2_ReturnToField);
DestroyTask(taskId);
diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c
index 9e1aa6be7..2490d6e13 100644
--- a/src/battle_script_commands.c
+++ b/src/battle_script_commands.c
@@ -6237,7 +6237,7 @@ static void atk6C_drawlvlupbox(void)
{
case 1:
gBattle_BG2_Y = 0x60;
- SetBgAttribute(2, BG_CTRL_ATTR_MOSAIC, 0);
+ SetBgAttribute(2, BG_ATTR_PRIORITY, 0);
ShowBg(2);
sub_804F17C();
gBattleScripting.atk6C_state = 2;
@@ -6249,8 +6249,8 @@ static void atk6C_drawlvlupbox(void)
case 3:
gBattle_BG1_X = 0;
gBattle_BG1_Y = 0x100;
- SetBgAttribute(0, BG_CTRL_ATTR_MOSAIC, 1);
- SetBgAttribute(1, BG_CTRL_ATTR_MOSAIC, 0);
+ SetBgAttribute(0, BG_ATTR_PRIORITY, 1);
+ SetBgAttribute(1, BG_ATTR_PRIORITY, 0);
ShowBg(0);
ShowBg(1);
HandleBattleWindow(0x12, 7, 0x1D, 0x13, WINDOW_x80);
@@ -6296,7 +6296,7 @@ static void atk6C_drawlvlupbox(void)
ClearWindowTilemap(13);
CopyWindowToVram(13, 1);
- SetBgAttribute(2, BG_CTRL_ATTR_MOSAIC, 2);
+ SetBgAttribute(2, BG_ATTR_PRIORITY, 2);
ShowBg(2);
gBattleScripting.atk6C_state = 10;
@@ -6305,8 +6305,8 @@ static void atk6C_drawlvlupbox(void)
case 10:
if (!IsDma3ManagerBusyWithBgCopy())
{
- SetBgAttribute(0, BG_CTRL_ATTR_MOSAIC, 0);
- SetBgAttribute(1, BG_CTRL_ATTR_MOSAIC, 1);
+ SetBgAttribute(0, BG_ATTR_PRIORITY, 0);
+ SetBgAttribute(1, BG_ATTR_PRIORITY, 1);
ShowBg(0);
ShowBg(1);
gBattlescriptCurrInstr++;
@@ -10138,7 +10138,7 @@ static void atkEF_handleballthrow(void)
ballMultiplier = 10;
break;
case ITEM_DIVE_BALL:
- if (Overworld_GetMapTypeOfSaveblockLocation() == MAP_TYPE_UNDERWATER)
+ if (GetCurrentMapType() == MAP_TYPE_UNDERWATER)
ballMultiplier = 35;
else
ballMultiplier = 10;
diff --git a/src/battle_setup.c b/src/battle_setup.c
index 4994acac2..195af0c28 100644
--- a/src/battle_setup.c
+++ b/src/battle_setup.c
@@ -349,7 +349,7 @@ static void Task_BattleStart(u8 taskId)
case 1:
if (IsBattleTransitionDone() == TRUE)
{
- overworld_free_bg_tilemaps();
+ CleanupOverworldWindowsAndTilemaps();
SetMainCallback2(CB2_InitBattle);
RestartWildEncounterImmunitySteps();
ClearPoisonStepCounter();
diff --git a/src/battle_tent.c b/src/battle_tent.c
index c358deaa5..de4d9d374 100644
--- a/src/battle_tent.c
+++ b/src/battle_tent.c
@@ -100,7 +100,7 @@ static void sub_81B99D4(void)
gSaveBlock2Ptr->frontier.field_CA8 = 0;
gSaveBlock2Ptr->frontier.curChallengeBattleNum = 0;
gSaveBlock2Ptr->frontier.field_CA9_a = FALSE;
- saved_warp2_set(0, gSaveBlock1Ptr->location.mapGroup, gSaveBlock1Ptr->location.mapNum, -1);
+ SetDynamicWarp(0, gSaveBlock1Ptr->location.mapGroup, gSaveBlock1Ptr->location.mapNum, -1);
}
static void sub_81B9A28(void)
@@ -162,7 +162,7 @@ static void sub_81B9BA0(void)
gSaveBlock2Ptr->frontier.field_CA8 = 0;
gSaveBlock2Ptr->frontier.curChallengeBattleNum = 0;
gSaveBlock2Ptr->frontier.field_CA9_a = FALSE;
- saved_warp2_set(0, gSaveBlock1Ptr->location.mapGroup, gSaveBlock1Ptr->location.mapNum, -1);
+ SetDynamicWarp(0, gSaveBlock1Ptr->location.mapGroup, gSaveBlock1Ptr->location.mapNum, -1);
}
static void sub_81B9BF4(void)
@@ -217,7 +217,7 @@ static void sub_81B9D28(void)
gSaveBlock2Ptr->frontier.field_CA8 = 0;
gSaveBlock2Ptr->frontier.curChallengeBattleNum = 0;
gSaveBlock2Ptr->frontier.field_CA9_a = FALSE;
- saved_warp2_set(0, gSaveBlock1Ptr->location.mapGroup, gSaveBlock1Ptr->location.mapNum, -1);
+ SetDynamicWarp(0, gSaveBlock1Ptr->location.mapGroup, gSaveBlock1Ptr->location.mapNum, -1);
}
static void sub_81B9D7C(void)
diff --git a/src/battle_tower.c b/src/battle_tower.c
index 34efac72b..deb5acb2e 100644
--- a/src/battle_tower.c
+++ b/src/battle_tower.c
@@ -1163,7 +1163,7 @@ static void sub_8161F94(void)
gSaveBlock2Ptr->frontier.towerWinStreaks[battleMode][lvlMode] = 0;
ValidateBattleTowerRecordChecksums();
- saved_warp2_set(0, gSaveBlock1Ptr->location.mapGroup, gSaveBlock1Ptr->location.mapNum, -1);
+ SetDynamicWarp(0, gSaveBlock1Ptr->location.mapGroup, gSaveBlock1Ptr->location.mapNum, -1);
gTrainerBattleOpponent_A = 0;
}
@@ -2799,7 +2799,7 @@ static void sub_8164B74(void)
if (battleMode == FRONTIER_MODE_LINK_MULTIS)
{
challengeNum = gSaveBlock2Ptr->frontier.towerWinStreaks[battleMode][lvlMode] / 7;
- if (sub_800A520())
+ if (IsLinkTaskFinished())
{
SendBlock(bitmask_all_link_players_but_self(), &challengeNum, sizeof(challengeNum));
gSpecialVar_Result = 1;
@@ -2836,7 +2836,7 @@ static void sub_8164B74(void)
}
break;
case 2:
- if (sub_800A520())
+ if (IsLinkTaskFinished())
{
SendBlock(bitmask_all_link_players_but_self(), &gSaveBlock2Ptr->frontier.field_CB4, sizeof(gSaveBlock2Ptr->frontier.field_CB4));
gSpecialVar_Result = 3;
diff --git a/src/berry.c b/src/berry.c
index 24ed370c3..bd596db7f 100644
--- a/src/berry.c
+++ b/src/berry.c
@@ -857,11 +857,10 @@ const struct UnkStruct_0858AB24 gUnknown_0858AB24[] = {
const struct BerryTree gBlankBerryTree = {};
-//.text
// unused
void ClearEnigmaBerries(void)
{
- CpuFill16(0, &gSaveBlock1Ptr->enigmaBerry, 52);
+ CpuFill16(0, &gSaveBlock1Ptr->enigmaBerry, sizeof(gSaveBlock1Ptr->enigmaBerry));
}
void SetEnigmaBerry(u8 *src)
@@ -869,7 +868,7 @@ void SetEnigmaBerry(u8 *src)
u32 i;
u8 *dest = (u8*)&gSaveBlock1Ptr->enigmaBerry;
- for (i = 0; i < 52; i++)
+ for (i = 0; i < sizeof(gSaveBlock1Ptr->enigmaBerry); i++)
dest[i] = src[i];
}
@@ -881,10 +880,8 @@ static u32 GetEnigmaBerryChecksum(struct EnigmaBerry *enigmaBerry)
dest = (u8*)enigmaBerry;
checksum = 0;
- for (i = 0; i < 52 - sizeof(gSaveBlock1Ptr->enigmaBerry.checksum); i++)
- {
+ for (i = 0; i < sizeof(gSaveBlock1Ptr->enigmaBerry) - sizeof(gSaveBlock1Ptr->enigmaBerry.checksum); i++)
checksum += dest[i];
- }
return checksum;
}
@@ -941,10 +938,10 @@ bool32 EventObjectInteractionWaterBerryTree(void)
return TRUE;
}
-bool8 IsPlayerFacingPlantedBerryTree(void)
+bool8 IsPlayerFacingEmptyBerryTreePatch(void)
{
if (GetEventObjectScriptPointerPlayerFacing() == BerryTreeScript
- && GetStageByBerryTreeId(EventObjectGetBerryTreeId(gSelectedEventObject)) == 0)
+ && GetStageByBerryTreeId(EventObjectGetBerryTreeId(gSelectedEventObject)) == BERRY_STAGE_NO_BERRY)
return TRUE;
else
return FALSE;
@@ -1046,10 +1043,9 @@ void PlantBerryTree(u8 id, u8 berry, u8 stage, bool8 sparkle)
tree->berryYield = CalcBerryYield(tree);
tree->minutesUntilNextStage *= 4;
}
+
if (!sparkle)
- {
tree->growthSparkle = TRUE;
- }
}
void RemoveBerryTree(u8 id)
@@ -1072,7 +1068,7 @@ u8 ItemIdToBerryType(u16 item)
u16 berry = item - FIRST_BERRY_INDEX;
if (berry > LAST_BERRY_INDEX - FIRST_BERRY_INDEX)
- return 1;
+ return ITEM_TO_BERRY(FIRST_BERRY_INDEX);
else
return ITEM_TO_BERRY(item);
}
diff --git a/src/berry_blender.c b/src/berry_blender.c
index 1ffdb1c38..ea9c6c4ff 100644
--- a/src/berry_blender.c
+++ b/src/berry_blender.c
@@ -1240,7 +1240,7 @@ static void sub_8080018(void)
sBerryBlenderData->framesToWait = 0;
break;
case 9:
- if (sub_800A520())
+ if (IsLinkTaskFinished())
{
ResetBlockReceivedFlags();
if (GetMultiplayerId() == 0)
@@ -1297,7 +1297,7 @@ static void sub_8080018(void)
}
break;
case 13:
- if (sub_800A520())
+ if (IsLinkTaskFinished())
{
sBerryBlenderData->mainState++;
sub_8082CB4(&sBerryBlenderData->bgAffineSrc);
@@ -1342,7 +1342,7 @@ static void sub_8080018(void)
sBerryBlenderData->mainState++;
break;
case 20:
- if (sub_800A520())
+ if (IsLinkTaskFinished())
{
sub_800A418();
sBerryBlenderData->mainState++;
@@ -2412,7 +2412,7 @@ static void CB2_HandleBlenderEndGame(void)
{
sBerryBlenderData->gameEndState++;
}
- else if (sub_800A520())
+ else if (IsLinkTaskFinished())
{
if (gReceivedRemoteLinkPlayers != 0 && gWirelessCommType)
{
@@ -2593,7 +2593,7 @@ static bool8 LinkPlayAgainHandleSaving(void)
sBerryBlenderData->framesToWait = 0;
break;
case 1:
- if (sub_800A520())
+ if (IsLinkTaskFinished())
{
sBerryBlenderData->field_1A0++;
gSoftResetDisabled = TRUE;
@@ -2612,7 +2612,7 @@ static bool8 LinkPlayAgainHandleSaving(void)
}
break;
case 4:
- if (sub_800A520())
+ if (IsLinkTaskFinished())
{
if (sub_8153474())
{
@@ -2687,7 +2687,7 @@ static void CB2_HandlePlayerLinkPlayAgainChoice(void)
sBerryBlenderData->gameEndState++;
break;
case 6:
- if (sub_800A520())
+ if (IsLinkTaskFinished())
{
sBerryBlenderData->framesToWait = 0;
sBerryBlenderData->gameEndState++;
@@ -2706,7 +2706,7 @@ static void CB2_HandlePlayerLinkPlayAgainChoice(void)
sub_800ADF8();
break;
case 9:
- if (sub_800A520())
+ if (IsLinkTaskFinished())
{
BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 0x10, 0);
sBerryBlenderData->gameEndState++;
diff --git a/src/berry_fix_program.c b/src/berry_fix_program.c
index d87509e10..3631c083a 100644
--- a/src/berry_fix_program.c
+++ b/src/berry_fix_program.c
@@ -67,7 +67,7 @@ static const u16 sUnknown_08618138[] = {
0x7fff, 0x7fff, 0x318c, 0x675a,
0x043c, 0x3aff, 0x0664, 0x4bd2,
0x6546, 0x7b14, 0x7fff, 0x318c,
- 0x675a, 0x0000, 0x0000, 0x0000
+ 0x675a, 0, 0, 0
};
static const u8 sUnknown_08618158[] = {10, 11, 12};
@@ -124,7 +124,7 @@ void CB2_InitBerryFixProgram(void)
ResetSpriteData();
ResetTasks();
ScanlineEffect_Stop();
- SetGpuReg(REG_OFFSET_DISPCNT, 0x0000);
+ SetGpuReg(REG_OFFSET_DISPCNT, 0);
berry_fix_mb_manager = AllocZeroed(0x50);
berry_fix_mb_manager->state = 0;
berry_fix_mb_manager->unk1 = 6;
@@ -203,13 +203,13 @@ static void berry_fix_gpu_set(void)
{
s32 width, left;
- SetGpuReg(REG_OFFSET_BG0CNT, 0x0000);
- SetGpuReg(REG_OFFSET_BG1CNT, 0x0000);
- SetGpuReg(REG_OFFSET_BG0HOFS, 0x0000);
- SetGpuReg(REG_OFFSET_BG0VOFS, 0x0000);
- SetGpuReg(REG_OFFSET_BG1HOFS, 0x0000);
- SetGpuReg(REG_OFFSET_BG1VOFS, 0x0000);
- SetGpuReg(REG_OFFSET_BLDCNT, 0x0000);
+ SetGpuReg(REG_OFFSET_BG0CNT, 0);
+ SetGpuReg(REG_OFFSET_BG1CNT, 0);
+ SetGpuReg(REG_OFFSET_BG0HOFS, 0);
+ SetGpuReg(REG_OFFSET_BG0VOFS, 0);
+ SetGpuReg(REG_OFFSET_BG1HOFS, 0);
+ SetGpuReg(REG_OFFSET_BG1VOFS, 0);
+ SetGpuReg(REG_OFFSET_BLDCNT, 0);
DmaFill32(3, 0, VRAM, VRAM_SIZE);
DmaFill32(3, 0, OAM, OAM_SIZE);
diff --git a/src/bg.c b/src/bg.c
index 21624e4a0..54ec3b347 100644
--- a/src/bg.c
+++ b/src/bg.c
@@ -77,15 +77,27 @@ void ResetBgControlStructs(void)
void Unused_ResetBgControlStruct(u8 bg)
{
- if (IsInvalidBg(bg) == FALSE)
+ if (!IsInvalidBg(bg))
{
sGpuBgConfigs.configs[bg] = sZeroedBgControlStruct;
}
}
-void SetBgControlAttributes(u8 bg, u8 charBaseIndex, u8 mapBaseIndex, u8 screenSize, u8 paletteMode, u8 priority, u8 mosaic, u8 wraparound)
+enum
{
- if (IsInvalidBg(bg) == FALSE)
+ BG_CTRL_ATTR_VISIBLE = 1,
+ BG_CTRL_ATTR_CHARBASEINDEX = 2,
+ BG_CTRL_ATTR_MAPBASEINDEX = 3,
+ BG_CTRL_ATTR_SCREENSIZE = 4,
+ BG_CTRL_ATTR_PALETTEMODE = 5,
+ BG_CTRL_ATTR_PRIORITY = 6,
+ BG_CTRL_ATTR_MOSAIC = 7,
+ BG_CTRL_ATTR_WRAPAROUND = 8,
+};
+
+static void SetBgControlAttributes(u8 bg, u8 charBaseIndex, u8 mapBaseIndex, u8 screenSize, u8 paletteMode, u8 priority, u8 mosaic, u8 wraparound)
+{
+ if (!IsInvalidBg(bg))
{
if (charBaseIndex != 0xFF)
{
@@ -129,9 +141,9 @@ void SetBgControlAttributes(u8 bg, u8 charBaseIndex, u8 mapBaseIndex, u8 screenS
}
}
-u16 GetBgControlAttribute(u8 bg, u8 attributeId)
+static u16 GetBgControlAttribute(u8 bg, u8 attributeId)
{
- if (IsInvalidBg(bg) == FALSE && sGpuBgConfigs.configs[bg].visible != FALSE)
+ if (!IsInvalidBg(bg) && sGpuBgConfigs.configs[bg].visible)
{
switch (attributeId)
{
@@ -162,7 +174,7 @@ u8 LoadBgVram(u8 bg, const void *src, u16 size, u16 destOffset, u8 mode)
u16 offset;
s8 cursor;
- if (IsInvalidBg(bg) == FALSE && sGpuBgConfigs.configs[bg].visible != FALSE)
+ if (!IsInvalidBg(bg) && sGpuBgConfigs.configs[bg].visible)
{
switch (mode)
{
@@ -198,7 +210,7 @@ end:
static void ShowBgInternal(u8 bg)
{
u16 value;
- if (IsInvalidBg(bg) == FALSE && sGpuBgConfigs.configs[bg].visible != FALSE)
+ if (!IsInvalidBg(bg) && sGpuBgConfigs.configs[bg].visible)
{
value = sGpuBgConfigs.configs[bg].priority |
(sGpuBgConfigs.configs[bg].charBaseIndex << 2) |
@@ -217,7 +229,7 @@ static void ShowBgInternal(u8 bg)
static void HideBgInternal(u8 bg)
{
- if (IsInvalidBg(bg) == FALSE)
+ if (!IsInvalidBg(bg))
{
sGpuBgConfigs.bgVisibilityAndMode &= ~(1 << (bg + 8));
sGpuBgConfigs.bgVisibilityAndMode &= DISPCNT_ALL_BG_AND_MODE_BITS;
@@ -226,12 +238,12 @@ static void HideBgInternal(u8 bg)
static void SyncBgVisibilityAndMode(void)
{
- SetGpuReg(0, (GetGpuReg(0) & ~DISPCNT_ALL_BG_AND_MODE_BITS) | sGpuBgConfigs.bgVisibilityAndMode);
+ SetGpuReg(REG_OFFSET_DISPCNT, (GetGpuReg(REG_OFFSET_DISPCNT) & ~DISPCNT_ALL_BG_AND_MODE_BITS) | sGpuBgConfigs.bgVisibilityAndMode);
}
void SetTextModeAndHideBgs(void)
{
- SetGpuReg(0, GetGpuReg(0) & ~DISPCNT_ALL_BG_AND_MODE_BITS);
+ SetGpuReg(REG_OFFSET_DISPCNT, GetGpuReg(REG_OFFSET_DISPCNT) & ~DISPCNT_ALL_BG_AND_MODE_BITS);
}
static void SetBgAffineInternal(u8 bg, u32 srcCenterX, u32 srcCenterY, s16 dispCenterX, s16 dispCenterY, s16 scaleX, s16 scaleY, u16 rotationAngle)
@@ -312,7 +324,8 @@ void InitBgsFromTemplates(u8 bgMode, const struct BgTemplate *templates, u8 numT
for (i = 0; i < numTemplates; i++)
{
bg = templates[i].bg;
- if (bg < 4) {
+ if (bg < 4)
+ {
SetBgControlAttributes(bg,
templates[i].charBaseIndex,
templates[i].mapBaseIndex,
@@ -396,9 +409,7 @@ u16 LoadBgTiles(u8 bg, const void* src, u16 size, u16 destOffset)
u16 LoadBgTilemap(u8 bg, const void *src, u16 size, u16 destOffset)
{
- u8 cursor;
-
- cursor = LoadBgVram(bg, src, size, destOffset * 2, DISPCNT_MODE_2);
+ u8 cursor = LoadBgVram(bg, src, size, destOffset * 2, DISPCNT_MODE_2);
if (cursor == 0xFF)
{
@@ -412,12 +423,11 @@ u16 LoadBgTilemap(u8 bg, const void *src, u16 size, u16 destOffset)
u16 Unused_LoadBgPalette(u8 bg, const void *src, u16 size, u16 destOffset)
{
- u16 paletteOffset;
s8 cursor;
- if (IsInvalidBg32(bg) == FALSE)
+ if (!IsInvalidBg32(bg))
{
- paletteOffset = (sGpuBgConfigs2[bg].basePalette * 0x20) + (destOffset * 2);
+ u16 paletteOffset = (sGpuBgConfigs2[bg].basePalette * 0x20) + (destOffset * 2);
cursor = RequestDma3Copy(src, (void*)(paletteOffset + BG_PLTT), size, 0);
if (cursor == -1)
@@ -437,20 +447,16 @@ u16 Unused_LoadBgPalette(u8 bg, const void *src, u16 size, u16 destOffset)
bool8 IsDma3ManagerBusyWithBgCopy(void)
{
- u8 mod;
- u8 div;
- s8 reqSpace;
-
int i;
for (i = 0; i < 0x80; i++)
{
- div = i / 0x20;
- mod = i % 0x20;
+ u8 div = i / 0x20;
+ u8 mod = i % 0x20;
- if ((sDmaBusyBitfield[div] & (1 << mod)) != FALSE)
+ if ((sDmaBusyBitfield[div] & (1 << mod)))
{
- reqSpace = CheckForSpaceForDma3Request(i);
+ s8 reqSpace = CheckForSpaceForDma3Request(i);
if (reqSpace == -1)
{
return TRUE;
@@ -479,25 +485,25 @@ void SetBgAttribute(u8 bg, u8 attributeId, u8 value)
{
switch (attributeId)
{
- case 1:
+ case BG_ATTR_CHARBASEINDEX:
SetBgControlAttributes(bg, value, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF);
break;
- case 2:
+ case BG_ATTR_MAPBASEINDEX:
SetBgControlAttributes(bg, 0xFF, value, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF);
break;
- case 3:
+ case BG_ATTR_SCREENSIZE:
SetBgControlAttributes(bg, 0xFF, 0xFF, value, 0xFF, 0xFF, 0xFF, 0xFF);
break;
- case 4:
+ case BG_ATTR_PALETTEMODE:
SetBgControlAttributes(bg, 0xFF, 0xFF, 0xFF, value, 0xFF, 0xFF, 0xFF);
break;
- case 7:
+ case BG_ATTR_PRIORITY:
SetBgControlAttributes(bg, 0xFF, 0xFF, 0xFF, 0xFF, value, 0xFF, 0xFF);
break;
- case 5:
+ case BG_ATTR_MOSAIC:
SetBgControlAttributes(bg, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, value, 0xFF);
break;
- case 6:
+ case BG_ATTR_WRAPAROUND:
SetBgControlAttributes(bg, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, value);
break;
}
@@ -507,21 +513,21 @@ u16 GetBgAttribute(u8 bg, u8 attributeId)
{
switch (attributeId)
{
- case 1:
+ case BG_ATTR_CHARBASEINDEX:
return GetBgControlAttribute(bg, BG_CTRL_ATTR_CHARBASEINDEX);
- case 2:
+ case BG_ATTR_MAPBASEINDEX:
return GetBgControlAttribute(bg, BG_CTRL_ATTR_MAPBASEINDEX);
- case 3:
+ case BG_ATTR_SCREENSIZE:
return GetBgControlAttribute(bg, BG_CTRL_ATTR_SCREENSIZE);
- case 4:
+ case BG_ATTR_PALETTEMODE:
return GetBgControlAttribute(bg, BG_CTRL_ATTR_PALETTEMODE);
- case 7:
+ case BG_ATTR_PRIORITY:
return GetBgControlAttribute(bg, BG_CTRL_ATTR_PRIORITY);
- case 5:
+ case BG_ATTR_MOSAIC:
return GetBgControlAttribute(bg, BG_CTRL_ATTR_MOSAIC);
- case 6:
+ case BG_ATTR_WRAPAROUND:
return GetBgControlAttribute(bg, BG_CTRL_ATTR_WRAPAROUND);
- case 8:
+ case BG_ATTR_METRIC:
switch (GetBgType(bg))
{
case 0:
@@ -531,9 +537,9 @@ u16 GetBgAttribute(u8 bg, u8 attributeId)
default:
return 0;
}
- case 9:
+ case BG_ATTR_TYPE:
return GetBgType(bg);
- case 10:
+ case BG_ATTR_BASETILE:
return sGpuBgConfigs2[bg].baseTile;
default:
return -1;
@@ -546,7 +552,7 @@ s32 ChangeBgX(u8 bg, s32 value, u8 op)
u16 temp1;
u16 temp2;
- if (IsInvalidBg32(bg) != FALSE || GetBgControlAttribute(bg, BG_CTRL_ATTR_VISIBLE) == 0)
+ if (IsInvalidBg32(bg) || !GetBgControlAttribute(bg, BG_CTRL_ATTR_VISIBLE))
{
return -1;
}
@@ -612,9 +618,9 @@ s32 ChangeBgX(u8 bg, s32 value, u8 op)
s32 GetBgX(u8 bg)
{
- if (IsInvalidBg32(bg) != FALSE)
+ if (IsInvalidBg32(bg))
return -1;
- else if (GetBgControlAttribute(bg, BG_CTRL_ATTR_VISIBLE) == 0)
+ else if (!GetBgControlAttribute(bg, BG_CTRL_ATTR_VISIBLE))
return -1;
else
return sGpuBgConfigs2[bg].bg_x;
@@ -626,7 +632,7 @@ s32 ChangeBgY(u8 bg, s32 value, u8 op)
u16 temp1;
u16 temp2;
- if (IsInvalidBg32(bg) != FALSE || GetBgControlAttribute(bg, BG_CTRL_ATTR_VISIBLE) == 0)
+ if (IsInvalidBg32(bg) || !GetBgControlAttribute(bg, BG_CTRL_ATTR_VISIBLE))
{
return -1;
}
@@ -696,7 +702,7 @@ s32 ChangeBgY_ScreenOff(u8 bg, u32 value, u8 op)
u16 temp1;
u16 temp2;
- if (IsInvalidBg32(bg) != FALSE || GetBgControlAttribute(bg, BG_CTRL_ATTR_VISIBLE) == 0)
+ if (IsInvalidBg32(bg) || !GetBgControlAttribute(bg, BG_CTRL_ATTR_VISIBLE))
{
return -1;
}
@@ -763,9 +769,9 @@ s32 ChangeBgY_ScreenOff(u8 bg, u32 value, u8 op)
s32 GetBgY(u8 bg)
{
- if (IsInvalidBg32(bg) != FALSE)
+ if (IsInvalidBg32(bg))
return -1;
- else if (GetBgControlAttribute(bg, BG_CTRL_ATTR_VISIBLE) == 0)
+ else if (!GetBgControlAttribute(bg, BG_CTRL_ATTR_VISIBLE))
return -1;
else
return sGpuBgConfigs2[bg].bg_y;
@@ -849,7 +855,7 @@ u8 Unused_AdjustBgMosaic(u8 a1, u8 a2)
void SetBgTilemapBuffer(u8 bg, void *tilemap)
{
- if (IsInvalidBg32(bg) == FALSE && GetBgControlAttribute(bg, BG_CTRL_ATTR_VISIBLE) != 0x0)
+ if (!IsInvalidBg32(bg) && GetBgControlAttribute(bg, BG_CTRL_ATTR_VISIBLE))
{
sGpuBgConfigs2[bg].tilemap = tilemap;
}
@@ -857,7 +863,7 @@ void SetBgTilemapBuffer(u8 bg, void *tilemap)
void UnsetBgTilemapBuffer(u8 bg)
{
- if (IsInvalidBg32(bg) == FALSE && GetBgControlAttribute(bg, BG_CTRL_ATTR_VISIBLE) != 0x0)
+ if (!IsInvalidBg32(bg) && GetBgControlAttribute(bg, BG_CTRL_ATTR_VISIBLE))
{
sGpuBgConfigs2[bg].tilemap = NULL;
}
@@ -865,9 +871,9 @@ void UnsetBgTilemapBuffer(u8 bg)
void* GetBgTilemapBuffer(u8 bg)
{
- if (IsInvalidBg32(bg) != FALSE)
+ if (IsInvalidBg32(bg))
return NULL;
- else if (GetBgControlAttribute(bg, BG_CTRL_ATTR_VISIBLE) == 0)
+ else if (!GetBgControlAttribute(bg, BG_CTRL_ATTR_VISIBLE))
return NULL;
else
return sGpuBgConfigs2[bg].tilemap;
@@ -875,7 +881,7 @@ void* GetBgTilemapBuffer(u8 bg)
void CopyToBgTilemapBuffer(u8 bg, const void *src, u16 mode, u16 destOffset)
{
- if (IsInvalidBg32(bg) == FALSE && IsTileMapOutsideWram(bg) == FALSE)
+ if (!IsInvalidBg32(bg) && !IsTileMapOutsideWram(bg))
{
if (mode != 0)
CpuCopy16(src, (void *)(sGpuBgConfigs2[bg].tilemap + (destOffset * 2)), mode);
@@ -888,7 +894,7 @@ void CopyBgTilemapBufferToVram(u8 bg)
{
u16 sizeToLoad;
- if (IsInvalidBg32(bg) == FALSE && IsTileMapOutsideWram(bg) == FALSE)
+ if (!IsInvalidBg32(bg) && !IsTileMapOutsideWram(bg))
{
switch (GetBgType(bg))
{
@@ -908,12 +914,12 @@ void CopyBgTilemapBufferToVram(u8 bg)
void CopyToBgTilemapBufferRect(u8 bg, const void* src, u8 destX, u8 destY, u8 width, u8 height)
{
- const void* srcCopy;
+ const void *srcCopy;
u16 destX16;
u16 destY16;
u16 mode;
- if (IsInvalidBg32(bg) == FALSE && IsTileMapOutsideWram(bg) == FALSE)
+ if (!IsInvalidBg32(bg) && !IsTileMapOutsideWram(bg))
{
switch (GetBgType(bg))
{
@@ -997,29 +1003,29 @@ void FillBgTilemapBufferRect_Palette0(u8 bg, u16 tileNum, u8 x, u8 y, u8 width,
u16 y16;
u16 mode;
- if (IsInvalidBg32(bg) == FALSE && IsTileMapOutsideWram(bg) == FALSE)
+ if (!IsInvalidBg32(bg) && !IsTileMapOutsideWram(bg))
{
switch (GetBgType(bg))
{
- case 0:
- for (y16 = y; y16 < (y + height); y16++)
+ case 0:
+ for (y16 = y; y16 < (y + height); y16++)
+ {
+ for (x16 = x; x16 < (x + width); x16++)
{
- for (x16 = x; x16 < (x + width); x16++)
- {
- ((u16*)sGpuBgConfigs2[bg].tilemap)[((y16 * 0x20) + x16)] = tileNum;
- }
+ ((u16*)sGpuBgConfigs2[bg].tilemap)[((y16 * 0x20) + x16)] = tileNum;
}
- break;
- case 1:
- mode = GetBgMetricAffineMode(bg, 0x1);
- for (y16 = y; y16 < (y + height); y16++)
+ }
+ break;
+ case 1:
+ mode = GetBgMetricAffineMode(bg, 0x1);
+ for (y16 = y; y16 < (y + height); y16++)
+ {
+ for (x16 = x; x16 < (x + width); x16++)
{
- for (x16 = x; x16 < (x + width); x16++)
- {
- ((u8*)sGpuBgConfigs2[bg].tilemap)[((y16 * mode) + x16)] = tileNum;
- }
+ ((u8*)sGpuBgConfigs2[bg].tilemap)[((y16 * mode) + x16)] = tileNum;
}
- break;
+ }
+ break;
}
}
}
@@ -1071,12 +1077,12 @@ void WriteSequenceToBgTilemapBuffer(u8 bg, u16 firstTileNum, u8 x, u8 y, u8 widt
u16 GetBgMetricTextMode(u8 bg, u8 whichMetric)
{
- u8 attribute = GetBgControlAttribute(bg, BG_CTRL_ATTR_SCREENSIZE);
+ u8 screenSize = GetBgControlAttribute(bg, BG_CTRL_ATTR_SCREENSIZE);
switch (whichMetric)
{
case 0:
- switch (attribute)
+ switch (screenSize)
{
case 0:
return 1;
@@ -1088,7 +1094,7 @@ u16 GetBgMetricTextMode(u8 bg, u8 whichMetric)
}
break;
case 1:
- switch (attribute)
+ switch (screenSize)
{
case 0:
return 1;
@@ -1101,7 +1107,7 @@ u16 GetBgMetricTextMode(u8 bg, u8 whichMetric)
}
break;
case 2:
- switch (attribute)
+ switch (screenSize)
{
case 0:
case 1:
@@ -1117,12 +1123,12 @@ u16 GetBgMetricTextMode(u8 bg, u8 whichMetric)
u32 GetBgMetricAffineMode(u8 bg, u8 whichMetric)
{
- u8 attribute = GetBgControlAttribute(bg, BG_CTRL_ATTR_SCREENSIZE);
+ u8 screenSize = GetBgControlAttribute(bg, BG_CTRL_ATTR_SCREENSIZE);
switch (whichMetric)
{
case 0:
- switch (attribute)
+ switch (screenSize)
{
case 0:
return 0x1;
@@ -1136,7 +1142,7 @@ u32 GetBgMetricAffineMode(u8 bg, u8 whichMetric)
break;
case 1:
case 2:
- return 0x10 << attribute;
+ return 0x10 << screenSize;
}
return 0;
}
diff --git a/src/cable_club.c b/src/cable_club.c
index 56154d5bf..784426d53 100644
--- a/src/cable_club.c
+++ b/src/cable_club.c
@@ -845,7 +845,7 @@ static void sub_80B32B4(u8 taskId)
PlayMapChosenOrBattleBGM(MUS_BATTLE20);
sub_80B3260(gSpecialVar_0x8004);
- overworld_free_bg_tilemaps();
+ CleanupOverworldWindowsAndTilemaps();
gTrainerBattleOpponent_A = 0x800;
SetMainCallback2(CB2_InitBattle);
gMain.savedCallback = sub_80B360C;
@@ -898,7 +898,7 @@ static void sub_80B33BC(u8 taskId)
data[0] = 6;
break;
case 6:
- if (sub_800A520())
+ if (IsLinkTaskFinished())
{
data[0] = 7;
}
@@ -911,7 +911,7 @@ static void sub_80B33BC(u8 taskId)
gLinkPlayers[0].linkType = 0x2211;
sub_80B3260(gSpecialVar_0x8004);
- overworld_free_bg_tilemaps();
+ CleanupOverworldWindowsAndTilemaps();
gTrainerBattleOpponent_A = 0x800;
SetMainCallback2(CB2_InitBattle);
gMain.savedCallback = sub_80B360C;
@@ -1008,7 +1008,7 @@ void sub_80B36EC(void)
LoadPlayerParty();
SavePlayerBag();
}
- copy_saved_warp2_bank_and_enter_x_to_warp1(0x7F);
+ SetWarpDestinationToDynamicWarp(0x7F);
}
void sub_80B371C(void)
@@ -1123,7 +1123,7 @@ static void sub_80B3894(u8 taskId)
data[0]++;
break;
case 3:
- if (sub_800A520())
+ if (IsLinkTaskFinished())
{
sub_8013F78();
DestroyTask(taskId);
diff --git a/src/clock.c b/src/clock.c
index 2d4da92ab..d52fde22e 100644
--- a/src/clock.c
+++ b/src/clock.c
@@ -12,17 +12,9 @@
#include "overworld.h"
#include "wallclock.h"
-// static types
-
-// static declarations
-
static void UpdatePerDay(struct Time *localTime);
static void UpdatePerMinute(struct Time *localTime);
-// rodata
-
-// text
-
static void InitTimeBasedEvents(void)
{
FlagSet(FLAG_SYS_CLOCK_SET);
diff --git a/src/contest.c b/src/contest.c
index c3ce9c9aa..949be7941 100644
--- a/src/contest.c
+++ b/src/contest.c
@@ -217,7 +217,6 @@ extern const u8 gText_0827D597[];
extern const struct ContestPokemon gContestOpponents[96];
extern const u8 gUnknown_085898A4[96];
extern const struct CompressedSpriteSheet gUnknown_08587C00;
-extern const u8 gContest2Pal[];
extern const struct SpriteTemplate gSpriteTemplate_8587BE8;
extern const struct CompressedSpriteSheet gUnknown_08587C08;
extern const struct CompressedSpritePalette gUnknown_08587C10;
@@ -285,7 +284,7 @@ void sub_80D779C(void)
ResetBgsAndClearDma3BusyFlags(0);
InitBgsFromTemplates(0, gUnknown_08587F34, ARRAY_COUNT(gUnknown_08587F34));
- SetBgAttribute(3, BG_CTRL_ATTR_PRIORITY, 1);
+ SetBgAttribute(3, BG_ATTR_WRAPAROUND, 1);
for (i = 0; i < 4; i++)
{
SetBgTilemapBuffer(i, gContestResources->field_24[i]);
@@ -474,14 +473,14 @@ void sub_80D7CB4(u8 taskId)
gTasks[taskId].data[0]++;
// fallthrough
case 1:
- if (sub_800A520())
+ if (IsLinkTaskFinished())
{
sub_800ADF8();
gTasks[taskId].data[0]++;
}
return;
case 2:
- if (sub_800A520() != TRUE)
+ if (IsLinkTaskFinished() != TRUE)
return;
gTasks[taskId].data[0]++;
break;
diff --git a/src/contest_painting_effects.c b/src/contest_painting_effects.c
new file mode 100644
index 000000000..187a0f196
--- /dev/null
+++ b/src/contest_painting_effects.c
@@ -0,0 +1,771 @@
+#include "global.h"
+#include "contest_painting_effects.h"
+#include "contest_painting.h"
+#include "constants/rgb.h"
+
+extern u8 gUnknown_03006164;
+extern u16 (*gUnknown_03006168)[][32];
+extern u8 gUnknown_0300616C;
+extern u8 gUnknown_03006170;
+extern u8 gUnknown_03006174;
+extern u8 gUnknown_03006178;
+extern u8 gUnknown_0300617C;
+extern u8 gUnknown_03006180;
+
+// this file's functions
+void sub_8125230(void);
+void sub_81252E8(void);
+void sub_81254E0(void);
+void sub_8125630(void);
+void sub_8125448(void);
+void sub_81257F8(void);
+void sub_81258A0(void);
+void sub_81256C8(void);
+void sub_8125250(void);
+void sub_81253A4(u8);
+void sub_81250B8(u8);
+void sub_8125170(u8);
+void sub_8125954(u16);
+u16 ConvertColorToGrayscale(u16*);
+u16 sub_8125E18(u16*, u16*, u16*);
+u16 ConvertCoolColor(u16*, u8);
+u16 ConvertToBlackOrWhite(u16*);
+u16 sub_8125C98(u16*, u16*);
+u16 InvertColor(u16*);
+u16 sub_8125F38(u16*, u16*, u16*);
+u16 sub_8125CF4(u16*, u16*);
+u16 GetCoolColorFromPersonality(u8);
+
+void sub_8124F2C(struct Unk030061A0 *info)
+{
+ gUnknown_03006168 = info->var_4;
+ gUnknown_0300617C = info->var_1F;
+ gUnknown_03006164 = info->var_19;
+ gUnknown_03006178 = info->var_1A;
+ gUnknown_03006174 = info->var_1B;
+ gUnknown_0300616C = info->var_1C;
+ gUnknown_03006180 = info->var_1D;
+ gUnknown_03006170 = info->var_1E;
+ switch (info->var_0)
+ {
+ case 2:
+ sub_8125230();
+ break;
+ case 8:
+ sub_81252E8();
+ break;
+ case 9:
+ sub_81254E0();
+ sub_81253A4(gUnknown_0300617C);
+ break;
+ case 10:
+ sub_81254E0();
+ sub_8125630();
+ sub_8125448();
+ case 31:
+ sub_8125630();
+ break;
+ case 11:
+ sub_81254E0();
+ sub_81257F8();
+ sub_81257F8();
+ sub_81258A0();
+ sub_8125448();
+ break;
+ case 13:
+ sub_81256C8();
+ break;
+ case 30:
+ sub_81254E0();
+ break;
+ case 32:
+ sub_81257F8();
+ break;
+ case 33:
+ sub_81258A0();
+ break;
+ case 6:
+ sub_8125250();
+ sub_81250B8(3);
+ break;
+ case 36:
+ sub_81254E0();
+ sub_81257F8();
+ sub_81258A0();
+ sub_8125448();
+ sub_81252E8();
+ sub_81252E8();
+ sub_81250B8(2);
+ sub_8125170(4);
+ break;
+ }
+}
+
+void sub_81250B8(u8 a0) // it changes palette someway somehow... .__.
+{
+ u8 i, j;
+
+ for (i = 0; i < gUnknown_0300616C; i++)
+ {
+ u16* var2 = &(*gUnknown_03006168)[0][(gUnknown_03006178 + i) * gUnknown_03006180];
+ u16* pal = &var2[gUnknown_03006164];
+ for (j = 0; j < gUnknown_03006174; j++, pal++)
+ {
+ if (!(0x8000 & *pal))
+ {
+ u8 val = (31 & *pal);
+ val += a0;
+ if (val > 31)
+ val = 31;
+
+ *pal = RGB2(val, val, val);
+ }
+ }
+ }
+}
+
+void sub_8125170(u8 a0)
+{
+ u8 i, j;
+
+ for (i = 0; i < gUnknown_0300616C; i++)
+ {
+ u16* var2 = &(*gUnknown_03006168)[0][(gUnknown_03006178 + i) * gUnknown_03006180];
+ u16* pal = &var2[gUnknown_03006164];
+ for (j = 0; j < gUnknown_03006174; j++, pal++)
+ {
+ if (!(0x8000 & *pal))
+ {
+ u8 val = (31 & *pal);
+ if (val > 31 - a0)
+ val = 31 - (a0 >> 1);
+
+ *pal = RGB2(val, val, val);
+ }
+ }
+ }
+}
+
+void sub_8125230(void)
+{
+ u32 i;
+ for (i = 0; i < 3200; i++)
+ sub_8125954(i);
+}
+
+void sub_8125250(void)
+{
+ u8 i, j;
+
+ for (i = 0; i < gUnknown_0300616C; i++)
+ {
+ u16* var2 = &(*gUnknown_03006168)[0][(gUnknown_03006178 + i) * gUnknown_03006180];
+ u16* color = &var2[gUnknown_03006164];
+ for (j = 0; j < gUnknown_03006174; j++, color++)
+ {
+ if (!(0x8000 & *color))
+ {
+ *color = ConvertColorToGrayscale(color);
+ }
+ }
+ }
+}
+
+void sub_81252E8(void)
+{
+ u8 i, j;
+
+ for (i = 0; i < gUnknown_03006174; i++)
+ {
+ u16* var0 = &(*gUnknown_03006168)[0][gUnknown_03006178 * gUnknown_03006180];
+ u16* palette = &var0[gUnknown_03006164 + i];
+ u16 color = *palette;
+
+ j = 1;
+ palette += gUnknown_03006180;
+ while (j < gUnknown_0300616C - 1)
+ {
+ if (!(0x8000 & *palette))
+ {
+ *palette = sub_8125E18(&color, palette, palette + gUnknown_03006180);
+ color = *palette;
+ }
+
+ j++;
+ palette += gUnknown_03006180;
+ }
+ }
+}
+
+void sub_81253A4(u8 arg0)
+{
+ u8 i, j;
+
+ for (i = 0; i < gUnknown_0300616C; i++)
+ {
+ u16* var0 = &(*gUnknown_03006168)[0][(gUnknown_03006178 + i) * gUnknown_03006180];
+ u16* color = &var0[gUnknown_03006164];
+ for (j = 0; j < gUnknown_03006174; j++, color++)
+ {
+ if (!(0x8000 & *color))
+ {
+ *color = ConvertCoolColor(color, arg0);
+ }
+ }
+ }
+}
+
+void sub_8125448(void)
+{
+ u8 i, j;
+
+ for (i = 0; i < gUnknown_0300616C; i++)
+ {
+ u16* var0 = &(*gUnknown_03006168)[0][(gUnknown_03006178 + i) * gUnknown_03006180];
+ u16* color = &var0[gUnknown_03006164];
+ for (j = 0; j < gUnknown_03006174; j++, color++)
+ {
+ if (!(0x8000 & *color))
+ {
+ *color = ConvertToBlackOrWhite(color);
+ }
+ }
+ }
+}
+
+void sub_81254E0(void)
+{
+ u8 i, j;
+ u16 *palette;
+
+ for (i = 0; i < gUnknown_0300616C; i++)
+ {
+ u16 *var0 = &(*gUnknown_03006168)[0][(gUnknown_03006178 + i) * gUnknown_03006180];
+ palette = &var0[gUnknown_03006164];
+ *palette = sub_8125C98(palette, palette + 1);
+ for (j = 1, palette = palette + 1; j < gUnknown_03006174 - 1; j++, palette++)
+ {
+ *palette = sub_8125C98(palette, palette + 1);
+ *palette = sub_8125C98(palette, palette - 1);
+ }
+
+ *palette = sub_8125C98(palette, palette - 1);
+ }
+
+ for (j = 0; j < gUnknown_03006174; j++)
+ {
+ u16 *var0 = &(*gUnknown_03006168)[0][gUnknown_03006178 * gUnknown_03006180];
+ palette = &var0[gUnknown_03006164 + j];
+ *palette = sub_8125C98(palette, palette + gUnknown_03006180);
+ for (i = 1, palette = palette + gUnknown_03006180; i < gUnknown_0300616C - 1; i++, palette += gUnknown_03006180)
+ {
+ *palette = sub_8125C98(palette, palette + gUnknown_03006180);
+ *palette = sub_8125C98(palette, palette - gUnknown_03006180);
+ }
+
+ *palette = sub_8125C98(palette, palette - gUnknown_03006180);
+ }
+}
+
+void sub_8125630(void)
+{
+ u8 i, j;
+
+ for (i = 0; i < gUnknown_0300616C; i++)
+ {
+ u16 *var0 = &(*gUnknown_03006168)[0][(gUnknown_03006178 + i) * gUnknown_03006180];
+ u16 *color = &var0[gUnknown_03006164];
+ for (j = 0; j < gUnknown_03006174; j++, color++)
+ {
+ if (!(0x8000 & *color))
+ {
+ *color = InvertColor(color);
+ }
+ }
+ }
+}
+
+void sub_81256C8(void)
+{
+ u8 i, j;
+ u16 *palette;
+ u16 color;
+
+ palette = (*gUnknown_03006168)[0];
+ for (i = 0; i < 64; i++)
+ {
+ for (j = 0; j < 64; j++, palette++)
+ {
+ if (!(0x8000 & *palette))
+ {
+ *palette = InvertColor(palette);
+ }
+ }
+ }
+
+ for (j = 0; j < 64; j++)
+ {
+ palette = &(*gUnknown_03006168)[0][j];
+ color = *palette;
+ *palette = 0x8000;
+ for (i = 1, palette += 64; i < 63; i++, palette += 64)
+ {
+ if (!(0x8000 & *palette))
+ {
+ *palette = sub_8125F38(&color, palette, palette + 64);
+ color = *palette;
+ }
+ }
+
+ *palette = 0x8000;
+ palette = &(*gUnknown_03006168)[0][j];
+ color = *palette;
+ *palette = 0x8000;
+ for (i = 1, palette += 64; i < 63; i++, palette += 64)
+ {
+ if (!(0x8000 & *palette))
+ {
+ *palette = sub_8125F38(&color, palette, palette + 64);
+ color = *palette;
+ }
+ }
+
+ *palette = 0x8000;
+ }
+
+ palette = (*gUnknown_03006168)[0];
+ for (i = 0; i < 64; i++)
+ {
+ for (j = 0; j < 64; j++, palette++)
+ {
+ if (!(0x8000 & *palette))
+ {
+ *palette = InvertColor(palette);
+ }
+ }
+ }
+}
+
+void sub_81257F8(void)
+{
+ u8 i, j;
+
+ for (i = 0; i < gUnknown_0300616C; i++)
+ {
+ u16 *var0 = &(*gUnknown_03006168)[0][(gUnknown_03006178 + i) * gUnknown_03006180];
+ u16 *palette = &var0[gUnknown_03006164];
+ u16 color = *palette;
+ for (j = 1, palette++; j < gUnknown_03006174 - 1; j++, palette++)
+ {
+ if (!(0x8000 & *palette))
+ {
+ *palette = sub_8125CF4(&color, palette);
+ color = *palette;
+ }
+ }
+ }
+}
+
+void sub_81258A0(void)
+{
+ u8 i, j;
+
+ for (i = 0; i < gUnknown_03006174; i++)
+ {
+ u16* var0 = &(*gUnknown_03006168)[0][gUnknown_03006178 * gUnknown_03006180];
+ u16* palette = &var0[gUnknown_03006164 + i];
+ u16 color = *palette;
+ for (j = 1, palette += gUnknown_03006180; j < gUnknown_0300616C - 1; j++, palette += gUnknown_03006180)
+ {
+ if (!(0x8000 & *palette))
+ {
+ *palette = sub_8125CF4(&color, palette);
+ color = *palette;
+ }
+ }
+ }
+}
+
+struct Unk8125954
+{
+ u8 unk0;
+ u8 unk1;
+ u16 unk2;
+};
+
+extern const u8 gUnknown_085A1F94[][3];
+
+void sub_8125954(u16 arg0)
+{
+ u8 i;
+ u8 r5, r9;
+ struct Unk8125954 unkStruct[6];
+
+ unkStruct[0].unk0 = gUnknown_085A1F94[arg0][0];
+ unkStruct[0].unk1 = gUnknown_085A1F94[arg0][1];
+ unkStruct[0].unk2 = (gUnknown_085A1F94[arg0][2] >> 3) & 7;
+
+ r9 = (gUnknown_085A1F94[arg0][2] >> 1) & 3;
+ r5 = gUnknown_085A1F94[arg0][2] & 1;
+ for (i = 1; i < unkStruct[0].unk2; i++)
+ {
+ if (!r5)
+ {
+ unkStruct[i].unk0 = unkStruct[0].unk0 - i;
+ unkStruct[i].unk1 = unkStruct[0].unk1 + i;
+ }
+ else
+ {
+ unkStruct[i].unk0 = unkStruct[0].unk0 + 1;
+ unkStruct[i].unk1 = unkStruct[0].unk1 - 1;
+ }
+
+ if (unkStruct[i].unk0 > 63 || unkStruct[i].unk1 > 63)
+ {
+ unkStruct[0].unk2 = i - 1;
+ break;
+ }
+
+ unkStruct[i].unk2 = unkStruct[0].unk2 - i;
+ }
+
+ for (i = 0; i < unkStruct[0].unk2; i++)
+ {
+ u16 *pal = &(*gUnknown_03006168)[unkStruct[i].unk1 * 2][unkStruct[i].unk0];
+
+ if (!(0x8000 & *pal))
+ {
+ u16 r = (*pal) & 0x1F;
+ u16 g = (*pal >> 5) & 0x1F;
+ u16 b = (*pal >> 10) & 0x1F;
+
+ switch (r9)
+ {
+ case 0:
+ case 1:
+ switch (((gUnknown_085A1F94[arg0][2] >> 3) & 7) % 3)
+ {
+ case 0:
+ if (r >= unkStruct[i].unk2)
+ r -= unkStruct[i].unk2;
+ else
+ r = 0;
+ break;
+ case 1:
+ if (g >= unkStruct[i].unk2)
+ g -= unkStruct[i].unk2;
+ else
+ g = 0;
+ break;
+ case 2:
+ if (b >= unkStruct[i].unk2)
+ b -= unkStruct[i].unk2;
+ else
+ b = 0;
+ break;
+ }
+ break;
+ case 2:
+ case 3:
+ r += unkStruct[i].unk2;
+ g += unkStruct[i].unk2;
+ b += unkStruct[i].unk2;
+ if (r > 31)
+ r = 31;
+ if (g > 31)
+ g = 31;
+ if (b > 31)
+ b = 31;
+ break;
+ }
+
+ *pal = RGB2(r, g, b);
+ }
+ }
+}
+
+u16 ConvertColorToGrayscale(u16 *color)
+{
+ s32 clr = *color;
+ s32 r = clr & 0x1F;
+ s32 g = (clr >> 5) & 0x1F;
+ s32 b = (clr >> 10) & 0x1F;
+ s32 gray = (r * Q_8_8(0.3) + g * Q_8_8(0.59) + b * Q_8_8(0.1133)) >> 8;
+ return RGB2(gray, gray, gray);
+}
+
+// The dark colors are the colored edges of the Cool painting effect.
+// Everything else is white.
+u16 ConvertCoolColor(u16 *color, u8 personality)
+{
+ u16 red = *color & 0x1F;
+ u16 green = (*color >> 5) & 0x1F;
+ u16 blue = (*color >> 10) & 0x1F;
+
+ if (red < 17 && green < 17 && blue < 17)
+ return GetCoolColorFromPersonality(personality);
+ else
+ return RGB_WHITE;
+}
+
+// Based on the given value, which comes from the first 8 bits of
+// the mon's personality value, return a color.
+u16 GetCoolColorFromPersonality(u8 personality)
+{
+ u16 red = 0;
+ u16 green = 0;
+ u16 blue = 0;
+ u8 strength = (personality / 6) % 3;
+ u8 colorType = personality % 6;
+
+ switch (colorType)
+ {
+ case 0:
+ // Teal color
+ green = 21 - strength;
+ blue = green;
+ red = 0;
+ break;
+ case 1:
+ // Yellow color
+ blue = 0;
+ red = 21 - strength;
+ green = red;
+ break;
+ case 2:
+ // Purple color
+ blue = 21 - strength;
+ green = 0;
+ red = blue;
+ break;
+ case 3:
+ // Red color
+ blue = 0;
+ green = 0;
+ red = 23 - strength;
+ break;
+ case 4:
+ // Blue color
+ blue = 23 - strength;
+ green = 0;
+ red = 0;
+ break;
+ case 5:
+ // Green color
+ blue = 0;
+ green = 23 - strength;
+ red = 0;
+ break;
+ }
+
+ return RGB2(red, green, blue);
+}
+
+u16 ConvertToBlackOrWhite(u16 *color)
+{
+ u16 red = *color & 0x1F;
+ u16 green = (*color >> 5) & 0x1F;
+ u16 blue = (*color >> 10) & 0x1F;
+
+ if (red < 17 && green < 17 && blue < 17)
+ return RGB_BLACK;
+ else
+ return RGB_WHITE;
+}
+
+u16 sub_8125C98(u16 *colorA, u16 *colorB)
+{
+ if (*colorA)
+ {
+ if (*colorA & 0x8000)
+ return 0x8000;
+ if (*colorB & 0x8000)
+ return RGB_BLACK;
+
+ return *colorA;
+ }
+
+ return RGB_BLACK;
+}
+
+u16 InvertColor(u16 *color)
+{
+ u16 red = *color & 0x1F;
+ u16 green = (*color >> 5) & 0x1F;
+ u16 blue = (*color >> 10) & 0x1F;
+
+ red = 31 - red;
+ green = 31 - green;
+ blue = 31 - blue;
+
+ return RGB2(red, green, blue);
+}
+
+u16 sub_8125CF4(u16 *a0, u16 *a1)
+{
+ u16 sp0[2][3];
+ u16 spC[3];
+ u8 r4;
+ u16 r2;
+ u16 r, g, b;
+
+ if (*a0 == *a1)
+ return *a1;
+
+ sp0[0][0] = (*a0 >> 0) & 0x1F;
+ sp0[0][1] = (*a0 >> 5) & 0x1F;
+ sp0[0][2] = (*a0 >> 10) & 0x1F;
+ sp0[1][0] = (*a1 >> 0) & 0x1F;
+ sp0[1][1] = (*a1 >> 5) & 0x1F;
+ sp0[1][2] = (*a1 >> 10) & 0x1F;
+
+ if (sp0[0][0] > 25 && sp0[0][1] > 25 && sp0[0][2] > 25)
+ return *a1;
+ if (sp0[1][0] > 25 && sp0[1][1] > 25 && sp0[1][2] > 25)
+ return *a1;
+
+ for (r4 = 0; r4 < 3; r4++)
+ {
+ if (sp0[0][r4] > sp0[1][r4])
+ spC[r4] = sp0[0][r4] - sp0[1][r4];
+ else
+ spC[r4] = sp0[1][r4] - sp0[0][r4];
+ }
+
+ if (spC[0] >= spC[1])
+ {
+ if (spC[0] >= spC[2])
+ r2 = spC[0];
+ else if (spC[1] >= spC[2])
+ r2 = spC[1];
+ else
+ r2 = spC[2];
+ }
+ else
+ {
+ if (spC[1] >= spC[2])
+ r2 = spC[1];
+ else if (spC[2] >= spC[0])
+ r2 = spC[2];
+ else
+ r2 = spC[0];
+ }
+
+ r = (sp0[1][0] * (31 - r2 / 2)) / 31;
+ g = (sp0[1][1] * (31 - r2 / 2)) / 31;
+ b = (sp0[1][2] * (31 - r2 / 2)) / 31;
+ return RGB2(r, g, b);
+}
+
+u16 sub_8125E18(u16 * a0, u16 * a1, u16 * a2)
+{
+ u16 red, green, blue;
+ u16 avg0, avg1, avg2;
+ u16 diff1, diff2;
+ u32 minimum;
+ u16 factor;
+
+ if (*a0 == *a1 && *a2 == *a1)
+ return *a1;
+
+ red = (*a1 >> 0) & 0x1F;
+ green = (*a1 >> 5) & 0x1F;
+ blue = (*a1 >> 10) & 0x1F;
+
+ avg0 = (((*a0 >> 0) & 0x1F) + ((*a0 >> 5) & 0x1F) + ((*a0 >> 10) & 0x1F)) / 3;
+ avg1 = (((*a1 >> 0) & 0x1F) + ((*a1 >> 5) & 0x1F) + ((*a1 >> 10) & 0x1F)) / 3;
+ avg2 = (((*a2 >> 0) & 0x1F) + ((*a2 >> 5) & 0x1F) + ((*a2 >> 10) & 0x1F)) / 3;
+
+ if (avg0 == avg1 && avg2 == avg1)
+ return *a1;
+
+ if (avg0 > avg1)
+ diff1 = avg0 - avg1;
+ else
+ diff1 = avg1 - avg0;
+
+ if (avg2 > avg1)
+ diff2 = avg2 - avg1;
+ else
+ diff2 = avg1 - avg2;
+
+ if (diff1 >= diff2)
+ minimum = diff1;
+ else
+ minimum = diff2;
+
+ factor = 31 - minimum / 2;
+ red = red * factor / 31;
+ green = green * factor / 31;
+ blue = blue * factor / 31;
+ return RGB2(red, green, blue);
+}
+
+u16 sub_8125F38(u16 *a0, u16 *a1, u16 *a2)
+{
+ u16 red, green, blue;
+ u16 avg0, avg1, avg2;
+ u16 diff1, diff2;
+ u32 minimum;
+ u16 factor;
+
+ if (*a0 == *a1 && *a2 == *a1)
+ return *a1;
+
+ red = (*a1 >> 0) & 0x1F;
+ green = (*a1 >> 5) & 0x1F;
+ blue = (*a1 >> 10) & 0x1F;
+
+ avg0 = (((*a0 >> 0) & 0x1F) + ((*a0 >> 5) & 0x1F) + ((*a0 >> 10) & 0x1F)) / 3;
+ avg1 = (((*a1 >> 0) & 0x1F) + ((*a1 >> 5) & 0x1F) + ((*a1 >> 10) & 0x1F)) / 3;
+ avg2 = (((*a2 >> 0) & 0x1F) + ((*a2 >> 5) & 0x1F) + ((*a2 >> 10) & 0x1F)) / 3;
+
+ if (avg0 == avg1 && avg2 == avg1)
+ return *a1;
+
+ if (avg0 > avg1)
+ diff1 = avg0 - avg1;
+ else
+ diff1 = avg1 - avg0;
+
+ if (avg2 > avg1)
+ diff2 = avg2 - avg1;
+ else
+ diff2 = avg1 - avg2;
+
+ if (diff1 >= diff2)
+ minimum = diff1;
+ else
+ minimum = diff2;
+
+ factor = 31 - minimum;
+ red = red * factor / 31;
+ green = green * factor / 31;
+ blue = blue * factor / 31;
+ return RGB2(red, green, blue);
+}
+
+/*
+void sub_8126058(struct Unk030061A0 *arg0)
+{
+ u16 i, j, k;
+ u8 r5 = arg0->var_1D >> 3;
+ u8 var_24 = arg0->var_1E >> 3;
+ u16 (*var_2C)[][32] = arg0->var_4;
+ u32 var_28 = arg0->var_10;
+
+ if (arg0->var_16 == 2)
+ {
+ for (i = 0; i < var_24; i++)
+ {
+ for (j = 0; j < r5; j++)
+ {
+ for (k = 0; k < 8; k++)
+ {
+ (*var_2C)[][];
+ }
+ }
+ }
+ }
+}
+*/
diff --git a/src/credits.c b/src/credits.c
index 5e52e5fb7..3639d36e4 100644
--- a/src/credits.c
+++ b/src/credits.c
@@ -2219,8 +2219,8 @@ static void sub_8177050(struct Sprite *sprite)
}
else
{
- SetGpuReg(REG_OFFSET_BLDCNT, 0xF40);
- SetGpuReg(REG_OFFSET_BLDALPHA, 0x10);
+ SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_EFFECT_BLEND | BLDCNT_TGT2_BG0 | BLDCNT_TGT2_BG1 | BLDCNT_TGT2_BG2 | BLDCNT_TGT2_BG3);
+ SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(16, 0));
sprite->oam.objMode = 1;
sprite->data[3] = 16;
sprite->data[0] += 1;
diff --git a/src/dark.c b/src/dark.c
index efa6e9498..ecd466da8 100644
--- a/src/dark.c
+++ b/src/dark.c
@@ -357,22 +357,22 @@ void sub_8113A90(struct Sprite *sprite)
switch (gBattleAnimArgs[1])
{
case 0:
- sprite->pos1.x = sub_80A861C(battler, 5) - 8;
- sprite->pos1.y = sub_80A861C(battler, 2) + 8;
+ sprite->pos1.x = GetBattlerSpriteCoordAttr(battler, BATTLER_COORD_ATTR_RIGHT) - 8;
+ sprite->pos1.y = GetBattlerSpriteCoordAttr(battler, BATTLER_COORD_ATTR_TOP) + 8;
break;
case 1:
- sprite->pos1.x = sub_80A861C(battler, 5) - 14;
- sprite->pos1.y = sub_80A861C(battler, 2) + 16;
+ sprite->pos1.x = GetBattlerSpriteCoordAttr(battler, BATTLER_COORD_ATTR_RIGHT) - 14;
+ sprite->pos1.y = GetBattlerSpriteCoordAttr(battler, BATTLER_COORD_ATTR_TOP) + 16;
break;
case 2:
- sprite->pos1.x = sub_80A861C(battler, 4) + 8;
- sprite->pos1.y = sub_80A861C(battler, 2) + 8;
+ sprite->pos1.x = GetBattlerSpriteCoordAttr(battler, BATTLER_COORD_ATTR_LEFT) + 8;
+ sprite->pos1.y = GetBattlerSpriteCoordAttr(battler, BATTLER_COORD_ATTR_TOP) + 8;
StartSpriteAffineAnim(sprite, 1);
xOffset = -20;
break;
case 3:
- sprite->pos1.x = sub_80A861C(battler, 4) + 14;
- sprite->pos1.y = sub_80A861C(battler, 2) + 16;
+ sprite->pos1.x = GetBattlerSpriteCoordAttr(battler, BATTLER_COORD_ATTR_LEFT) + 14;
+ sprite->pos1.y = GetBattlerSpriteCoordAttr(battler, BATTLER_COORD_ATTR_TOP) + 16;
StartSpriteAffineAnim(sprite, 1);
xOffset = -20;
break;
@@ -403,7 +403,7 @@ void sub_8113BAC(u8 taskId)
struct Task *task = &gTasks[taskId];
task->data[7] = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y) + 31;
- task->data[6] = sub_80A861C(gBattleAnimAttacker, 2) - 7;
+ task->data[6] = GetBattlerSpriteCoordAttr(gBattleAnimAttacker, BATTLER_COORD_ATTR_TOP) - 7;
task->data[5] = task->data[7];
task->data[4] = task->data[6];
task->data[13] = (task->data[7] - task->data[6]) << 8;
@@ -576,7 +576,7 @@ void sub_8113E78(u8 taskId)
break;
case 2:
task->data[7] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y) + 31;
- task->data[6] = sub_80A861C(gBattleAnimTarget, 2) - 7;
+ task->data[6] = GetBattlerSpriteCoordAttr(gBattleAnimTarget, BATTLER_COORD_ATTR_TOP) - 7;
task->data[13] = (task->data[7] - task->data[6]) << 8;
x = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X);
task->data[14] = x - 4;
diff --git a/src/data/region_map/region_map_entries.h b/src/data/region_map/region_map_entries.h
index 0c79c04ac..b2d625c84 100644
--- a/src/data/region_map/region_map_entries.h
+++ b/src/data/region_map/region_map_entries.h
@@ -62,9 +62,6 @@ static const u8 sMapName_AbandonedShip[] = _("ABANDONED SHIP");
static const u8 sMapName_NewMauville[] = _("NEW MAUVILLE");
static const u8 sMapName_MeteorFalls[] = _("METEOR FALLS");
static const u8 sMapName_MtPyre[] = _("MT. PYRE");
-// This was the Aqua or Magma hideout in Ruby/Sapphire, but each team has a
-// hideout in Emerald with their own new region map entries, and this name
-// doesn't seem to be used anymore.
static const u8 sMapName_AquaHideoutOld[] = _("{AQUA} HIDEOUT");
static const u8 sMapName_ShoalCave[] = _("SHOAL CAVE");
static const u8 sMapName_SeafloorCavern[] = _("SEAFLOOR CAVERN");
@@ -203,219 +200,219 @@ static const u8 sMapName_DesertUnderpass[] = _("DESERT UNDERPASS");
static const u8 sMapName_TrainerHill[] = _("TRAINER HILL");
const struct RegionMapLocation gRegionMapEntries[] = {
- { 4, 11, 1, 1, sMapName_LittlerootTown},
- { 4, 9, 1, 1, sMapName_OldaleTown},
- { 2, 14, 1, 1, sMapName_DewfordTown},
- { 5, 3, 1, 1, sMapName_LavaridgeTown},
- { 3, 0, 1, 1, sMapName_FallarborTown},
- { 4, 6, 1, 1, sMapName_VerdanturfTown},
- {17, 10, 1, 1, sMapName_PacifidlogTown},
- { 1, 9, 1, 1, sMapName_PetalburgCity},
- { 8, 10, 1, 2, sMapName_SlateportCity},
- { 8, 6, 2, 1, sMapName_MauvilleCity},
- { 0, 5, 1, 2, sMapName_RustboroCity},
- {12, 0, 1, 1, sMapName_FortreeCity},
- {18, 3, 2, 1, sMapName_LilycoveCity},
- {24, 5, 2, 1, sMapName_MossdeepCity},
- {21, 7, 1, 1, sMapName_SootopolisCity},
- {27, 8, 1, 2, sMapName_EverGrandeCity},
- { 4, 10, 1, 1, sMapName_Route101},
- { 2, 9, 2, 1, sMapName_Route102},
- { 4, 8, 4, 1, sMapName_Route103},
- { 0, 7, 1, 3, sMapName_Route104},
- { 0, 10, 1, 3, sMapName_Route105},
- { 0, 13, 2, 1, sMapName_Route106},
- { 3, 14, 3, 1, sMapName_Route107},
- { 6, 14, 2, 1, sMapName_Route108},
- { 8, 12, 1, 3, sMapName_Route109},
- { 8, 7, 1, 3, sMapName_Route110},
- { 8, 0, 1, 6, sMapName_Route111},
- { 6, 3, 2, 1, sMapName_Route112},
- { 4, 0, 4, 1, sMapName_Route113},
- { 1, 0, 2, 3, sMapName_Route114},
- { 0, 2, 1, 3, sMapName_Route115},
- { 1, 5, 4, 1, sMapName_Route116},
- { 5, 6, 3, 1, sMapName_Route117},
- {10, 6, 2, 1, sMapName_Route118},
- {11, 0, 1, 6, sMapName_Route119},
- {13, 0, 1, 4, sMapName_Route120},
- {14, 3, 4, 1, sMapName_Route121},
- {16, 4, 1, 2, sMapName_Route122},
- {12, 6, 5, 1, sMapName_Route123},
- {20, 3, 4, 3, sMapName_Route124},
- {24, 3, 2, 2, sMapName_Route125},
- {20, 6, 3, 3, sMapName_Route126},
- {23, 6, 3, 3, sMapName_Route127},
- {23, 9, 4, 1, sMapName_Route128},
- {24, 10, 2, 1, sMapName_Route129},
- {21, 10, 3, 1, sMapName_Route130},
- {18, 10, 3, 1, sMapName_Route131},
- {15, 10, 2, 1, sMapName_Route132},
- {12, 10, 3, 1, sMapName_Route133},
- { 9, 10, 3, 1, sMapName_Route134},
- {20, 3, 4, 3, sMapName_Underwater},
- {20, 6, 3, 3, sMapName_Underwater},
- {23, 6, 3, 3, sMapName_Underwater},
- {23, 9, 4, 1, sMapName_Underwater},
- {21, 7, 1, 1, sMapName_Underwater},
- { 1, 13, 1, 1, sMapName_GraniteCave},
- { 6, 2, 1, 1, sMapName_MtChimney},
- {16, 2, 1, 1, sMapName_SafariZone},
- {22, 12, 1, 1, sMapName_BattleFrontier},
- { 0, 8, 1, 1, sMapName_PetalburgWoods},
- { 2, 5, 1, 1, sMapName_RusturfTunnel},
- { 6, 14, 1, 1, sMapName_AbandonedShip},
- { 8, 7, 1, 1, sMapName_NewMauville},
- { 0, 3, 1, 1, sMapName_MeteorFalls},
- { 1, 2, 1, 1, sMapName_MeteorFalls},
- {16, 4, 1, 1, sMapName_MtPyre},
- {19, 3, 1, 1, sMapName_AquaHideoutOld},
- {24, 4, 1, 1, sMapName_ShoalCave},
- {24, 9, 1, 1, sMapName_SeafloorCavern},
- {24, 9, 1, 1, sMapName_Underwater},
- {27, 9, 1, 1, sMapName_VictoryRoad},
- {17, 10, 1, 1, sMapName_MirageIsland},
- {21, 7, 1, 1, sMapName_CaveOfOrigin},
- {12, 14, 1, 1, sMapName_SouthernIsland},
- { 6, 3, 1, 1, sMapName_FieryPath},
- { 7, 3, 1, 1, sMapName_FieryPath},
- { 6, 3, 1, 1, sMapName_JaggedPass},
- { 7, 2, 1, 1, sMapName_JaggedPass},
- {11, 10, 1, 1, sMapName_SealedChamber},
- {11, 10, 1, 1, sMapName_Underwater},
- {13, 0, 1, 1, sMapName_ScorchedSlab},
- { 0, 10, 1, 1, sMapName_IslandCave},
- { 8, 3, 1, 1, sMapName_DesertRuins},
- {13, 2, 1, 1, sMapName_AncientTomb},
- { 0, 0, 1, 1, sMapName_InsideOfTruck},
- {19, 10, 1, 1, sMapName_SkyPillar},
- { 0, 0, 1, 1, sMapName_SecretBase},
- { 0, 0, 1, 1, sMapName_None},
- { 0, 0, 1, 1, sMapName_PalletTown},
- { 0, 0, 1, 1, sMapName_ViridianCity},
- { 0, 0, 1, 1, sMapName_PewterCity},
- { 0, 0, 1, 1, sMapName_CeruleanCity},
- { 0, 0, 1, 1, sMapName_LavenderTown},
- { 0, 0, 1, 1, sMapName_VermilionCity},
- { 0, 0, 1, 1, sMapName_CeladonCity},
- { 0, 0, 1, 1, sMapName_FuchsiaCity},
- { 0, 0, 1, 1, sMapName_CinnabarIsland},
- { 0, 0, 1, 1, sMapName_IndigoPlateau},
- { 0, 0, 1, 1, sMapName_SaffronCity},
- { 0, 0, 1, 1, sMapName_Route4},
- { 0, 0, 1, 1, sMapName_Route10},
- { 0, 0, 1, 1, sMapName_Route1},
- { 0, 0, 1, 1, sMapName_Route2},
- { 0, 0, 1, 1, sMapName_Route3},
- { 0, 0, 1, 1, sMapName_Route4_2},
- { 0, 0, 1, 1, sMapName_Route5},
- { 0, 0, 1, 1, sMapName_Route6},
- { 0, 0, 1, 1, sMapName_Route7},
- { 0, 0, 1, 1, sMapName_Route8},
- { 0, 0, 1, 1, sMapName_Route9},
- { 0, 0, 1, 1, sMapName_Route10_2},
- { 0, 0, 1, 1, sMapName_Route11},
- { 0, 0, 1, 1, sMapName_Route12},
- { 0, 0, 1, 1, sMapName_Route13},
- { 0, 0, 1, 1, sMapName_Route14},
- { 0, 0, 1, 1, sMapName_Route15},
- { 0, 0, 1, 1, sMapName_Route16},
- { 0, 0, 1, 1, sMapName_Route17},
- { 0, 0, 1, 1, sMapName_Route18},
- { 0, 0, 1, 1, sMapName_Route19},
- { 0, 0, 1, 1, sMapName_Route20},
- { 0, 0, 1, 1, sMapName_Route21},
- { 0, 0, 1, 1, sMapName_Route22},
- { 0, 0, 1, 1, sMapName_Route23},
- { 0, 0, 1, 1, sMapName_Route24},
- { 0, 0, 1, 1, sMapName_Route25},
- { 0, 0, 1, 1, sMapName_ViridianForest},
- { 0, 0, 1, 1, sMapName_MtMoon},
- { 0, 0, 1, 1, sMapName_SSAnne},
- { 0, 0, 1, 1, sMapName_UndergroundPath},
- { 0, 0, 1, 1, sMapName_UndergroundPath2},
- { 0, 0, 1, 1, sMapName_DiglettsCave},
- { 0, 0, 1, 1, sMapName_KantoVictoryRoad},
- { 0, 0, 1, 1, sMapName_RocketHideout},
- { 0, 0, 1, 1, sMapName_SilphCo},
- { 0, 0, 1, 1, sMapName_PokemonMansion},
- { 0, 0, 1, 1, sMapName_KantoSafariZone},
- { 0, 0, 1, 1, sMapName_PokemonLeague},
- { 0, 0, 1, 1, sMapName_RockTunnel},
- { 0, 0, 1, 1, sMapName_SeafoamIslands},
- { 0, 0, 1, 1, sMapName_PokemonTower},
- { 0, 0, 1, 1, sMapName_CeruleanCave},
- { 0, 0, 1, 1, sMapName_PowerPlant},
- { 0, 0, 1, 1, sMapName_OneIsland},
- { 0, 0, 1, 1, sMapName_TwoIsland},
- { 0, 0, 1, 1, sMapName_ThreeIsland},
- { 0, 0, 1, 1, sMapName_FourIsland},
- { 0, 0, 1, 1, sMapName_FiveIsland},
- { 0, 0, 1, 1, sMapName_SevenIsland},
- { 0, 0, 1, 1, sMapName_SixIsland},
- { 0, 0, 1, 1, sMapName_KindleRoad},
- { 0, 0, 1, 1, sMapName_TreasureBeach},
- { 0, 0, 1, 1, sMapName_CapeBrink},
- { 0, 0, 1, 1, sMapName_BondBridge},
- { 0, 0, 1, 1, sMapName_ThreeIslePort},
- { 0, 0, 1, 1, sMapName_SeviiIsle6},
- { 0, 0, 1, 1, sMapName_SeviiIsle7},
- { 0, 0, 1, 1, sMapName_SeviiIsle8},
- { 0, 0, 1, 1, sMapName_SeviiIsle9},
- { 0, 0, 1, 1, sMapName_ResortGorgeous},
- { 0, 0, 1, 1, sMapName_WaterLabyrinth},
- { 0, 0, 1, 1, sMapName_FiveIsleMeadow},
- { 0, 0, 1, 1, sMapName_MemorialPillar},
- { 0, 0, 1, 1, sMapName_OutcastIsland},
- { 0, 0, 1, 1, sMapName_GreenPath},
- { 0, 0, 1, 1, sMapName_WaterPath},
- { 0, 0, 1, 1, sMapName_RuinValley},
- { 0, 0, 1, 1, sMapName_TrainerTower},
- { 0, 0, 1, 1, sMapName_CanyonEntrance},
- { 0, 0, 1, 1, sMapName_SevaultCanyon},
- { 0, 0, 1, 1, sMapName_TanobyRuins},
- { 0, 0, 1, 1, sMapName_SeviiIsle22},
- { 0, 0, 1, 1, sMapName_SeviiIsle23},
- { 0, 0, 1, 1, sMapName_SeviiIsle24},
- { 0, 0, 1, 1, sMapName_NavelRock},
- { 0, 0, 1, 1, sMapName_MtEmber},
- { 0, 0, 1, 1, sMapName_BerryForest},
- { 0, 0, 1, 1, sMapName_IcefallCave},
- { 0, 0, 1, 1, sMapName_RocketWarehouse},
- { 0, 0, 1, 1, sMapName_TrainerTower2},
- { 0, 0, 1, 1, sMapName_DottedHole},
- { 0, 0, 1, 1, sMapName_LostCave},
- { 0, 0, 1, 1, sMapName_PatternBush},
- { 0, 0, 1, 1, sMapName_AlteringCave},
- { 0, 0, 1, 1, sMapName_TanobyChambers},
- { 0, 0, 1, 1, sMapName_ThreeIslePath},
- { 0, 0, 1, 1, sMapName_TanobyKey},
- { 0, 0, 1, 1, sMapName_BirthIsland},
- { 0, 0, 1, 1, sMapName_MoneanChamber},
- { 0, 0, 1, 1, sMapName_LiptooChamber},
- { 0, 0, 1, 1, sMapName_WeepthChamber},
- { 0, 0, 1, 1, sMapName_DilfordChamber},
- { 0, 0, 1, 1, sMapName_ScufibChamber},
- { 0, 0, 1, 1, sMapName_RixyChamber},
- { 0, 0, 1, 1, sMapName_ViapoisChamber},
- { 0, 0, 1, 1, sMapName_EmberSpa},
- { 0, 0, 1, 1, sMapName_SpecialArea},
- {19, 3, 1, 1, sMapName_AquaHideout},
- { 6, 3, 1, 1, sMapName_MagmaHideout},
- { 8, 2, 1, 1, sMapName_MirageTower},
- { 0, 0, 1, 1, sMapName_BirthIsland},
- { 0, 0, 1, 1, sMapName_FarawayIsland},
- {22, 12, 1, 1, sMapName_ArtisanCave},
- { 0, 0, 1, 1, sMapName_MarineCave},
- { 0, 0, 1, 1, sMapName_Underwater},
- { 0, 0, 1, 1, sMapName_TerraCave},
- { 0, 10, 1, 3, sMapName_Underwater},
- {24, 3, 2, 2, sMapName_Underwater},
- {24, 10, 2, 1, sMapName_Underwater},
- { 2, 0, 1, 1, sMapName_DesertUnderpass},
- { 6, 8, 1, 1, sMapName_AlteringCave},
- { 0, 0, 1, 1, sMapName_NavelRock},
- { 8, 4, 1, 1, sMapName_TrainerHill}
+ [MAPSEC_LITTLEROOT_TOWN] = { 4, 11, 1, 1, sMapName_LittlerootTown},
+ [MAPSEC_OLDALE_TOWN] = { 4, 9, 1, 1, sMapName_OldaleTown},
+ [MAPSEC_DEWFORD_TOWN] = { 2, 14, 1, 1, sMapName_DewfordTown},
+ [MAPSEC_LAVARIDGE_TOWN] = { 5, 3, 1, 1, sMapName_LavaridgeTown},
+ [MAPSEC_FALLARBOR_TOWN] = { 3, 0, 1, 1, sMapName_FallarborTown},
+ [MAPSEC_VERDANTURF_TOWN] = { 4, 6, 1, 1, sMapName_VerdanturfTown},
+ [MAPSEC_PACIFIDLOG_TOWN] = {17, 10, 1, 1, sMapName_PacifidlogTown},
+ [MAPSEC_PETALBURG_CITY] = { 1, 9, 1, 1, sMapName_PetalburgCity},
+ [MAPSEC_SLATEPORT_CITY] = { 8, 10, 1, 2, sMapName_SlateportCity},
+ [MAPSEC_MAUVILLE_CITY] = { 8, 6, 2, 1, sMapName_MauvilleCity},
+ [MAPSEC_RUSTBORO_CITY] = { 0, 5, 1, 2, sMapName_RustboroCity},
+ [MAPSEC_FORTREE_CITY] = {12, 0, 1, 1, sMapName_FortreeCity},
+ [MAPSEC_LILYCOVE_CITY] = {18, 3, 2, 1, sMapName_LilycoveCity},
+ [MAPSEC_MOSSDEEP_CITY] = {24, 5, 2, 1, sMapName_MossdeepCity},
+ [MAPSEC_SOOTOPOLIS_CITY] = {21, 7, 1, 1, sMapName_SootopolisCity},
+ [MAPSEC_EVER_GRANDE_CITY] = {27, 8, 1, 2, sMapName_EverGrandeCity},
+ [MAPSEC_ROUTE_101] = { 4, 10, 1, 1, sMapName_Route101},
+ [MAPSEC_ROUTE_102] = { 2, 9, 2, 1, sMapName_Route102},
+ [MAPSEC_ROUTE_103] = { 4, 8, 4, 1, sMapName_Route103},
+ [MAPSEC_ROUTE_104] = { 0, 7, 1, 3, sMapName_Route104},
+ [MAPSEC_ROUTE_105] = { 0, 10, 1, 3, sMapName_Route105},
+ [MAPSEC_ROUTE_106] = { 0, 13, 2, 1, sMapName_Route106},
+ [MAPSEC_ROUTE_107] = { 3, 14, 3, 1, sMapName_Route107},
+ [MAPSEC_ROUTE_108] = { 6, 14, 2, 1, sMapName_Route108},
+ [MAPSEC_ROUTE_109] = { 8, 12, 1, 3, sMapName_Route109},
+ [MAPSEC_ROUTE_110] = { 8, 7, 1, 3, sMapName_Route110},
+ [MAPSEC_ROUTE_111] = { 8, 0, 1, 6, sMapName_Route111},
+ [MAPSEC_ROUTE_112] = { 6, 3, 2, 1, sMapName_Route112},
+ [MAPSEC_ROUTE_113] = { 4, 0, 4, 1, sMapName_Route113},
+ [MAPSEC_ROUTE_114] = { 1, 0, 2, 3, sMapName_Route114},
+ [MAPSEC_ROUTE_115] = { 0, 2, 1, 3, sMapName_Route115},
+ [MAPSEC_ROUTE_116] = { 1, 5, 4, 1, sMapName_Route116},
+ [MAPSEC_ROUTE_117] = { 5, 6, 3, 1, sMapName_Route117},
+ [MAPSEC_ROUTE_118] = {10, 6, 2, 1, sMapName_Route118},
+ [MAPSEC_ROUTE_119] = {11, 0, 1, 6, sMapName_Route119},
+ [MAPSEC_ROUTE_120] = {13, 0, 1, 4, sMapName_Route120},
+ [MAPSEC_ROUTE_121] = {14, 3, 4, 1, sMapName_Route121},
+ [MAPSEC_ROUTE_122] = {16, 4, 1, 2, sMapName_Route122},
+ [MAPSEC_ROUTE_123] = {12, 6, 5, 1, sMapName_Route123},
+ [MAPSEC_ROUTE_124] = {20, 3, 4, 3, sMapName_Route124},
+ [MAPSEC_ROUTE_125] = {24, 3, 2, 2, sMapName_Route125},
+ [MAPSEC_ROUTE_126] = {20, 6, 3, 3, sMapName_Route126},
+ [MAPSEC_ROUTE_127] = {23, 6, 3, 3, sMapName_Route127},
+ [MAPSEC_ROUTE_128] = {23, 9, 4, 1, sMapName_Route128},
+ [MAPSEC_ROUTE_129] = {24, 10, 2, 1, sMapName_Route129},
+ [MAPSEC_ROUTE_130] = {21, 10, 3, 1, sMapName_Route130},
+ [MAPSEC_ROUTE_131] = {18, 10, 3, 1, sMapName_Route131},
+ [MAPSEC_ROUTE_132] = {15, 10, 2, 1, sMapName_Route132},
+ [MAPSEC_ROUTE_133] = {12, 10, 3, 1, sMapName_Route133},
+ [MAPSEC_ROUTE_134] = { 9, 10, 3, 1, sMapName_Route134},
+ [MAPSEC_UNDERWATER_124] = {20, 3, 4, 3, sMapName_Underwater},
+ [MAPSEC_UNDERWATER_125] = {20, 6, 3, 3, sMapName_Underwater},
+ [MAPSEC_UNDERWATER_126] = {23, 6, 3, 3, sMapName_Underwater},
+ [MAPSEC_UNDERWATER_127] = {23, 9, 4, 1, sMapName_Underwater},
+ [MAPSEC_UNDERWATER_SOOTOPOLIS] = {21, 7, 1, 1, sMapName_Underwater},
+ [MAPSEC_GRANITE_CAVE] = { 1, 13, 1, 1, sMapName_GraniteCave},
+ [MAPSEC_MT_CHIMNEY] = { 6, 2, 1, 1, sMapName_MtChimney},
+ [MAPSEC_SAFARI_ZONE] = {16, 2, 1, 1, sMapName_SafariZone},
+ [MAPSEC_BATTLE_FRONTIER] = {22, 12, 1, 1, sMapName_BattleFrontier},
+ [MAPSEC_PETALBURG_WOODS] = { 0, 8, 1, 1, sMapName_PetalburgWoods},
+ [MAPSEC_RUSTURF_TUNNEL] = { 2, 5, 1, 1, sMapName_RusturfTunnel},
+ [MAPSEC_ABANDONED_SHIP] = { 6, 14, 1, 1, sMapName_AbandonedShip},
+ [MAPSEC_NEW_MAUVILLE] = { 8, 7, 1, 1, sMapName_NewMauville},
+ [MAPSEC_METEOR_FALLS] = { 0, 3, 1, 1, sMapName_MeteorFalls},
+ [MAPSEC_METEOR_FALLS2] = { 1, 2, 1, 1, sMapName_MeteorFalls},
+ [MAPSEC_MT_PYRE] = {16, 4, 1, 1, sMapName_MtPyre},
+ [MAPSEC_AQUA_HIDEOUT_OLD] = {19, 3, 1, 1, sMapName_AquaHideoutOld},
+ [MAPSEC_SHOAL_CAVE] = {24, 4, 1, 1, sMapName_ShoalCave},
+ [MAPSEC_SEAFLOOR_CAVERN] = {24, 9, 1, 1, sMapName_SeafloorCavern},
+ [MAPSEC_UNDERWATER_128] = {24, 9, 1, 1, sMapName_Underwater},
+ [MAPSEC_VICTORY_ROAD] = {27, 9, 1, 1, sMapName_VictoryRoad},
+ [MAPSEC_MIRAGE_ISLAND] = {17, 10, 1, 1, sMapName_MirageIsland},
+ [MAPSEC_CAVE_OF_ORIGIN] = {21, 7, 1, 1, sMapName_CaveOfOrigin},
+ [MAPSEC_SOUTHERN_ISLAND] = {12, 14, 1, 1, sMapName_SouthernIsland},
+ [MAPSEC_FIERY_PATH] = { 6, 3, 1, 1, sMapName_FieryPath},
+ [MAPSEC_FIERY_PATH2] = { 7, 3, 1, 1, sMapName_FieryPath},
+ [MAPSEC_JAGGED_PASS] = { 6, 3, 1, 1, sMapName_JaggedPass},
+ [MAPSEC_JAGGED_PASS2] = { 7, 2, 1, 1, sMapName_JaggedPass},
+ [MAPSEC_SEALED_CHAMBER] = {11, 10, 1, 1, sMapName_SealedChamber},
+ [MAPSEC_UNDERWATER_SEALED_CHAMBER] = {11, 10, 1, 1, sMapName_Underwater},
+ [MAPSEC_SCORCHED_SLAB] = {13, 0, 1, 1, sMapName_ScorchedSlab},
+ [MAPSEC_ISLAND_CAVE] = { 0, 10, 1, 1, sMapName_IslandCave},
+ [MAPSEC_DESERT_RUINS] = { 8, 3, 1, 1, sMapName_DesertRuins},
+ [MAPSEC_ANCIENT_TOMB] = {13, 2, 1, 1, sMapName_AncientTomb},
+ [MAPSEC_INSIDE_OF_TRUCK] = { 0, 0, 1, 1, sMapName_InsideOfTruck},
+ [MAPSEC_SKY_PILLAR] = {19, 10, 1, 1, sMapName_SkyPillar},
+ [MAPSEC_SECRET_BASE] = { 0, 0, 1, 1, sMapName_SecretBase},
+ [MAPSEC_DYNAMIC] = { 0, 0, 1, 1, sMapName_None},
+ [MAPSEC_PALLET_TOWN] = { 0, 0, 1, 1, sMapName_PalletTown},
+ [MAPSEC_VIRIDIAN_CITY] = { 0, 0, 1, 1, sMapName_ViridianCity},
+ [MAPSEC_PEWTER_CITY] = { 0, 0, 1, 1, sMapName_PewterCity},
+ [MAPSEC_CERULEAN_CITY] = { 0, 0, 1, 1, sMapName_CeruleanCity},
+ [MAPSEC_LAVENDER_TOWN] = { 0, 0, 1, 1, sMapName_LavenderTown},
+ [MAPSEC_VERMILION_CITY] = { 0, 0, 1, 1, sMapName_VermilionCity},
+ [MAPSEC_CELADON_CITY] = { 0, 0, 1, 1, sMapName_CeladonCity},
+ [MAPSEC_FUCHSIA_CITY] = { 0, 0, 1, 1, sMapName_FuchsiaCity},
+ [MAPSEC_CINNABAR_ISLAND] = { 0, 0, 1, 1, sMapName_CinnabarIsland},
+ [MAPSEC_INDIGO_PLATEAU] = { 0, 0, 1, 1, sMapName_IndigoPlateau},
+ [MAPSEC_SAFFRON_CITY] = { 0, 0, 1, 1, sMapName_SaffronCity},
+ [MAPSEC_ROUTE_4_FLYDUP] = { 0, 0, 1, 1, sMapName_Route4},
+ [MAPSEC_ROUTE_10_FLYDUP] = { 0, 0, 1, 1, sMapName_Route10},
+ [MAPSEC_ROUTE_1] = { 0, 0, 1, 1, sMapName_Route1},
+ [MAPSEC_ROUTE_2] = { 0, 0, 1, 1, sMapName_Route2},
+ [MAPSEC_ROUTE_3] = { 0, 0, 1, 1, sMapName_Route3},
+ [MAPSEC_ROUTE_4] = { 0, 0, 1, 1, sMapName_Route4_2},
+ [MAPSEC_ROUTE_5] = { 0, 0, 1, 1, sMapName_Route5},
+ [MAPSEC_ROUTE_6] = { 0, 0, 1, 1, sMapName_Route6},
+ [MAPSEC_ROUTE_7] = { 0, 0, 1, 1, sMapName_Route7},
+ [MAPSEC_ROUTE_8] = { 0, 0, 1, 1, sMapName_Route8},
+ [MAPSEC_ROUTE_9] = { 0, 0, 1, 1, sMapName_Route9},
+ [MAPSEC_ROUTE_10] = { 0, 0, 1, 1, sMapName_Route10_2},
+ [MAPSEC_ROUTE_11] = { 0, 0, 1, 1, sMapName_Route11},
+ [MAPSEC_ROUTE_12] = { 0, 0, 1, 1, sMapName_Route12},
+ [MAPSEC_ROUTE_13] = { 0, 0, 1, 1, sMapName_Route13},
+ [MAPSEC_ROUTE_14] = { 0, 0, 1, 1, sMapName_Route14},
+ [MAPSEC_ROUTE_15] = { 0, 0, 1, 1, sMapName_Route15},
+ [MAPSEC_ROUTE_16] = { 0, 0, 1, 1, sMapName_Route16},
+ [MAPSEC_ROUTE_17] = { 0, 0, 1, 1, sMapName_Route17},
+ [MAPSEC_ROUTE_18] = { 0, 0, 1, 1, sMapName_Route18},
+ [MAPSEC_ROUTE_19] = { 0, 0, 1, 1, sMapName_Route19},
+ [MAPSEC_ROUTE_20] = { 0, 0, 1, 1, sMapName_Route20},
+ [MAPSEC_ROUTE_21] = { 0, 0, 1, 1, sMapName_Route21},
+ [MAPSEC_ROUTE_22] = { 0, 0, 1, 1, sMapName_Route22},
+ [MAPSEC_ROUTE_23] = { 0, 0, 1, 1, sMapName_Route23},
+ [MAPSEC_ROUTE_24] = { 0, 0, 1, 1, sMapName_Route24},
+ [MAPSEC_ROUTE_25] = { 0, 0, 1, 1, sMapName_Route25},
+ [MAPSEC_VIRIDIAN_FOREST] = { 0, 0, 1, 1, sMapName_ViridianForest},
+ [MAPSEC_MT_MOON] = { 0, 0, 1, 1, sMapName_MtMoon},
+ [MAPSEC_S_S_ANNE] = { 0, 0, 1, 1, sMapName_SSAnne},
+ [MAPSEC_UNDERGROUND_PATH] = { 0, 0, 1, 1, sMapName_UndergroundPath},
+ [MAPSEC_UNDERGROUND_PATH_2] = { 0, 0, 1, 1, sMapName_UndergroundPath2},
+ [MAPSEC_DIGLETTS_CAVE] = { 0, 0, 1, 1, sMapName_DiglettsCave},
+ [MAPSEC_KANTO_VICTORY_ROAD] = { 0, 0, 1, 1, sMapName_KantoVictoryRoad},
+ [MAPSEC_ROCKET_HIDEOUT] = { 0, 0, 1, 1, sMapName_RocketHideout},
+ [MAPSEC_SILPH_CO] = { 0, 0, 1, 1, sMapName_SilphCo},
+ [MAPSEC_POKEMON_MANSION] = { 0, 0, 1, 1, sMapName_PokemonMansion},
+ [MAPSEC_KANTO_SAFARI_ZONE] = { 0, 0, 1, 1, sMapName_KantoSafariZone},
+ [MAPSEC_POKEMON_LEAGUE] = { 0, 0, 1, 1, sMapName_PokemonLeague},
+ [MAPSEC_ROCK_TUNNEL] = { 0, 0, 1, 1, sMapName_RockTunnel},
+ [MAPSEC_SEAFOAM_ISLANDS] = { 0, 0, 1, 1, sMapName_SeafoamIslands},
+ [MAPSEC_POKEMON_TOWER] = { 0, 0, 1, 1, sMapName_PokemonTower},
+ [MAPSEC_CERULEAN_CAVE] = { 0, 0, 1, 1, sMapName_CeruleanCave},
+ [MAPSEC_POWER_PLANT] = { 0, 0, 1, 1, sMapName_PowerPlant},
+ [MAPSEC_ONE_ISLAND] = { 0, 0, 1, 1, sMapName_OneIsland},
+ [MAPSEC_TWO_ISLAND] = { 0, 0, 1, 1, sMapName_TwoIsland},
+ [MAPSEC_THREE_ISLAND] = { 0, 0, 1, 1, sMapName_ThreeIsland},
+ [MAPSEC_FOUR_ISLAND] = { 0, 0, 1, 1, sMapName_FourIsland},
+ [MAPSEC_FIVE_ISLAND] = { 0, 0, 1, 1, sMapName_FiveIsland},
+ [MAPSEC_SEVEN_ISLAND] = { 0, 0, 1, 1, sMapName_SevenIsland},
+ [MAPSEC_SIX_ISLAND] = { 0, 0, 1, 1, sMapName_SixIsland},
+ [MAPSEC_KINDLE_ROAD] = { 0, 0, 1, 1, sMapName_KindleRoad},
+ [MAPSEC_TREASURE_BEACH] = { 0, 0, 1, 1, sMapName_TreasureBeach},
+ [MAPSEC_CAPE_BRINK] = { 0, 0, 1, 1, sMapName_CapeBrink},
+ [MAPSEC_BOND_BRIDGE] = { 0, 0, 1, 1, sMapName_BondBridge},
+ [MAPSEC_THREE_ISLE_PORT] = { 0, 0, 1, 1, sMapName_ThreeIslePort},
+ [MAPSEC_SEVII_ISLE_6] = { 0, 0, 1, 1, sMapName_SeviiIsle6},
+ [MAPSEC_SEVII_ISLE_7] = { 0, 0, 1, 1, sMapName_SeviiIsle7},
+ [MAPSEC_SEVII_ISLE_8] = { 0, 0, 1, 1, sMapName_SeviiIsle8},
+ [MAPSEC_SEVII_ISLE_9] = { 0, 0, 1, 1, sMapName_SeviiIsle9},
+ [MAPSEC_RESORT_GORGEOUS] = { 0, 0, 1, 1, sMapName_ResortGorgeous},
+ [MAPSEC_WATER_LABYRINTH] = { 0, 0, 1, 1, sMapName_WaterLabyrinth},
+ [MAPSEC_FIVE_ISLE_MEADOW] = { 0, 0, 1, 1, sMapName_FiveIsleMeadow},
+ [MAPSEC_MEMORIAL_PILLAR] = { 0, 0, 1, 1, sMapName_MemorialPillar},
+ [MAPSEC_OUTCAST_ISLAND] = { 0, 0, 1, 1, sMapName_OutcastIsland},
+ [MAPSEC_GREEN_PATH] = { 0, 0, 1, 1, sMapName_GreenPath},
+ [MAPSEC_WATER_PATH] = { 0, 0, 1, 1, sMapName_WaterPath},
+ [MAPSEC_RUIN_VALLEY] = { 0, 0, 1, 1, sMapName_RuinValley},
+ [MAPSEC_TRAINER_TOWER] = { 0, 0, 1, 1, sMapName_TrainerTower},
+ [MAPSEC_CANYON_ENTRANCE] = { 0, 0, 1, 1, sMapName_CanyonEntrance},
+ [MAPSEC_SEVAULT_CANYON] = { 0, 0, 1, 1, sMapName_SevaultCanyon},
+ [MAPSEC_TANOBY_RUINS] = { 0, 0, 1, 1, sMapName_TanobyRuins},
+ [MAPSEC_SEVII_ISLE_22] = { 0, 0, 1, 1, sMapName_SeviiIsle22},
+ [MAPSEC_SEVII_ISLE_23] = { 0, 0, 1, 1, sMapName_SeviiIsle23},
+ [MAPSEC_SEVII_ISLE_24] = { 0, 0, 1, 1, sMapName_SeviiIsle24},
+ [MAPSEC_NAVEL_ROCK] = { 0, 0, 1, 1, sMapName_NavelRock},
+ [MAPSEC_MT_EMBER] = { 0, 0, 1, 1, sMapName_MtEmber},
+ [MAPSEC_BERRY_FOREST] = { 0, 0, 1, 1, sMapName_BerryForest},
+ [MAPSEC_ICEFALL_CAVE] = { 0, 0, 1, 1, sMapName_IcefallCave},
+ [MAPSEC_ROCKET_WAREHOUSE] = { 0, 0, 1, 1, sMapName_RocketWarehouse},
+ [MAPSEC_TRAINER_TOWER_2] = { 0, 0, 1, 1, sMapName_TrainerTower2},
+ [MAPSEC_DOTTED_HOLE] = { 0, 0, 1, 1, sMapName_DottedHole},
+ [MAPSEC_LOST_CAVE] = { 0, 0, 1, 1, sMapName_LostCave},
+ [MAPSEC_PATTERN_BUSH] = { 0, 0, 1, 1, sMapName_PatternBush},
+ [MAPSEC_ALTERING_CAVE] = { 0, 0, 1, 1, sMapName_AlteringCave},
+ [MAPSEC_TANOBY_CHAMBERS] = { 0, 0, 1, 1, sMapName_TanobyChambers},
+ [MAPSEC_THREE_ISLE_PATH] = { 0, 0, 1, 1, sMapName_ThreeIslePath},
+ [MAPSEC_TANOBY_KEY] = { 0, 0, 1, 1, sMapName_TanobyKey},
+ [MAPSEC_BIRTH_ISLAND] = { 0, 0, 1, 1, sMapName_BirthIsland},
+ [MAPSEC_MONEAN_CHAMBER] = { 0, 0, 1, 1, sMapName_MoneanChamber},
+ [MAPSEC_LIPTOO_CHAMBER] = { 0, 0, 1, 1, sMapName_LiptooChamber},
+ [MAPSEC_WEEPTH_CHAMBER] = { 0, 0, 1, 1, sMapName_WeepthChamber},
+ [MAPSEC_DILFORD_CHAMBER] = { 0, 0, 1, 1, sMapName_DilfordChamber},
+ [MAPSEC_SCUFIB_CHAMBER] = { 0, 0, 1, 1, sMapName_ScufibChamber},
+ [MAPSEC_RIXY_CHAMBER] = { 0, 0, 1, 1, sMapName_RixyChamber},
+ [MAPSEC_VIAPOIS_CHAMBER] = { 0, 0, 1, 1, sMapName_ViapoisChamber},
+ [MAPSEC_EMBER_SPA] = { 0, 0, 1, 1, sMapName_EmberSpa},
+ [MAPSEC_SPECIAL_AREA] = { 0, 0, 1, 1, sMapName_SpecialArea},
+ [MAPSEC_AQUA_HIDEOUT] = {19, 3, 1, 1, sMapName_AquaHideout},
+ [MAPSEC_MAGMA_HIDEOUT] = { 6, 3, 1, 1, sMapName_MagmaHideout},
+ [MAPSEC_MIRAGE_TOWER] = { 8, 2, 1, 1, sMapName_MirageTower},
+ [MAPSEC_BIRTH_ISLAND_2] = { 0, 0, 1, 1, sMapName_BirthIsland},
+ [MAPSEC_FARAWAY_ISLAND] = { 0, 0, 1, 1, sMapName_FarawayIsland},
+ [MAPSEC_ARTISAN_CAVE] = {22, 12, 1, 1, sMapName_ArtisanCave},
+ [MAPSEC_MARINE_CAVE] = { 0, 0, 1, 1, sMapName_MarineCave},
+ [MAPSEC_UNDERWATER_MARINE_CAVE] = { 0, 0, 1, 1, sMapName_Underwater},
+ [MAPSEC_TERRA_CAVE] = { 0, 0, 1, 1, sMapName_TerraCave},
+ [MAPSEC_UNDERWATER_TERRA_CAVE] = { 0, 10, 1, 3, sMapName_Underwater},
+ [MAPSEC_UNDERWATER_UNK1] = {24, 3, 2, 2, sMapName_Underwater},
+ [MAPSEC_UNDERWATER_129] = {24, 10, 2, 1, sMapName_Underwater},
+ [MAPSEC_DESERT_UNDERPASS] = { 2, 0, 1, 1, sMapName_DesertUnderpass},
+ [MAPSEC_ALTERING_CAVE_2] = { 6, 8, 1, 1, sMapName_AlteringCave},
+ [MAPSEC_NAVEL_ROCK2] = { 0, 0, 1, 1, sMapName_NavelRock},
+ [MAPSEC_TRAINER_HILL] = { 8, 4, 1, 1, sMapName_TrainerHill}
};
#endif //GUARD_DATA_REGION_MAP_REGION_MAP_ENTRIES_H
diff --git a/src/decompress.c b/src/decompress.c
index ed2f7a0bb..949b96990 100644
--- a/src/decompress.c
+++ b/src/decompress.c
@@ -66,7 +66,7 @@ void LoadCompressedSpritePaletteOverrideBuffer(const struct CompressedSpritePale
void DecompressPicFromTable(const struct CompressedSpriteSheet *src, void* buffer, s32 species)
{
- if (species > SPECIES_EGG)
+ if (species > NUM_SPECIES)
LZ77UnCompWram(gMonFrontPicTable[0].data, buffer);
else
LZ77UnCompWram(src->data, buffer);
@@ -102,7 +102,7 @@ void LoadSpecialPokePic(const struct CompressedSpriteSheet *src, void *dest, s32
else
LZ77UnCompWram(gMonFrontPicTable[i].data, dest);
}
- else if (species > SPECIES_EGG) // is species unknown? draw the ? icon
+ else if (species > NUM_SPECIES) // is species unknown? draw the ? icon
LZ77UnCompWram(gMonFrontPicTable[0].data, dest);
else
LZ77UnCompWram(src->data, dest);
@@ -499,7 +499,7 @@ bool8 LoadCompressedSpritePaletteUsingHeap(const struct CompressedSpritePalette
void DecompressPicFromTable_2(const struct CompressedSpriteSheet *src, void* buffer, s32 species) // a copy of DecompressPicFromTable
{
- if (species > SPECIES_EGG)
+ if (species > NUM_SPECIES)
LZ77UnCompWram(gMonFrontPicTable[0].data, buffer);
else
LZ77UnCompWram(src->data, buffer);
@@ -523,7 +523,7 @@ void LoadSpecialPokePic_2(const struct CompressedSpriteSheet *src, void *dest, s
else
LZ77UnCompWram(gMonFrontPicTable[i].data, dest);
}
- else if (species > SPECIES_EGG) // is species unknown? draw the ? icon
+ else if (species > NUM_SPECIES) // is species unknown? draw the ? icon
LZ77UnCompWram(gMonFrontPicTable[0].data, dest);
else
LZ77UnCompWram(src->data, dest);
@@ -546,7 +546,7 @@ void HandleLoadSpecialPokePic_2(const struct CompressedSpriteSheet *src, void *d
void DecompressPicFromTable_DontHandleDeoxys(const struct CompressedSpriteSheet *src, void* buffer, s32 species)
{
- if (species > SPECIES_EGG)
+ if (species > NUM_SPECIES)
LZ77UnCompWram(gMonFrontPicTable[0].data, buffer);
else
LZ77UnCompWram(src->data, buffer);
@@ -581,7 +581,7 @@ void LoadSpecialPokePic_DontHandleDeoxys(const struct CompressedSpriteSheet *src
else
LZ77UnCompWram(gMonFrontPicTable[i].data, dest);
}
- else if (species > SPECIES_EGG) // is species unknown? draw the ? icon
+ else if (species > NUM_SPECIES) // is species unknown? draw the ? icon
LZ77UnCompWram(gMonFrontPicTable[0].data, dest);
else
LZ77UnCompWram(src->data, dest);
diff --git a/src/decoration.c b/src/decoration.c
index addca6954..438f2cbd1 100644
--- a/src/decoration.c
+++ b/src/decoration.c
@@ -1131,7 +1131,7 @@ void sub_8127ACC(u8 taskId)
void sub_8127B04(u8 taskId)
{
DrawWholeMapView();
- Overworld_SetWarpDestination(gSaveBlock1Ptr->location.mapGroup, gSaveBlock1Ptr->location.mapNum, -1, gTasks[taskId].data[3], gTasks[taskId].data[4]);
+ SetWarpDestination(gSaveBlock1Ptr->location.mapGroup, gSaveBlock1Ptr->location.mapNum, -1, gTasks[taskId].data[3], gTasks[taskId].data[4]);
WarpIntoMap();
}
diff --git a/src/dragon.c b/src/dragon.c
index 68577988e..4a2ac1c51 100644
--- a/src/dragon.c
+++ b/src/dragon.c
@@ -274,8 +274,8 @@ void sub_8113250(struct Sprite *sprite)
sprite->data[4] = 0;
sprite->data[5] = 1;
sprite->data[6] = gBattleAnimArgs[0];
- r5 = sub_80A861C(gBattlerAttacker, 0);
- r0 = sub_80A861C(gBattlerAttacker, 1);
+ r5 = GetBattlerSpriteCoordAttr(gBattlerAttacker, BATTLER_COORD_ATTR_HEIGHT);
+ r0 = GetBattlerSpriteCoordAttr(gBattlerAttacker, BATTLER_COORD_ATTR_WIDTH);
if (r5 > r0)
sprite->data[7] = r5 / 2;
else
diff --git a/src/easy_chat.c b/src/easy_chat.c
index c4bc02e42..c84895df5 100644
--- a/src/easy_chat.c
+++ b/src/easy_chat.c
@@ -364,7 +364,7 @@ void easy_chat_input_maybe(void)
default:
return;
}
- overworld_free_bg_tilemaps();
+ CleanupOverworldWindowsAndTilemaps();
sub_811A20C(gSpecialVar_0x8004, words, CB2_ReturnToFieldContinueScript, sizeParam);
}
@@ -383,7 +383,7 @@ static void sub_811A7E4(void)
{
lilycoveLady = &gSaveBlock1Ptr->lilycoveLady;
lilycoveLady->quiz.unk_016 = -1;
- overworld_free_bg_tilemaps();
+ CleanupOverworldWindowsAndTilemaps();
sub_811A8F0();
}
return;
diff --git a/src/egg_hatch.c b/src/egg_hatch.c
index 360dd2466..e1d94889a 100644
--- a/src/egg_hatch.c
+++ b/src/egg_hatch.c
@@ -23,6 +23,7 @@
#include "bg.h"
#include "m4a.h"
#include "window.h"
+#include "graphics.h"
#include "constants/abilities.h"
#include "daycare.h"
#include "overworld.h"
@@ -52,11 +53,6 @@ struct EggHatchData
};
extern const struct CompressedSpriteSheet gMonFrontPicTable[];
-extern const u8 gBattleTextboxTiles[];
-extern const u8 gBattleTextboxTilemap[];
-extern const u8 gBattleTextboxPalette[];
-extern const u16 gTradeGba2_Pal[]; // palette, gameboy advance
-extern const u32 gTradeGba_Gfx[]; // tileset gameboy advance
extern const u32 gUnknown_08331F60[]; // tilemap gameboy circle
extern const u8 gText_HatchedFromEgg[];
extern const u8 gText_NickHatchPrompt[];
@@ -379,7 +375,7 @@ static void AddHatchedMonToParty(u8 id)
caughtLvl = 0;
SetMonData(mon, MON_DATA_MET_LEVEL, &caughtLvl);
- mapNameID = sav1_map_get_name();
+ mapNameID = GetCurrentRegionMapSectionId();
SetMonData(mon, MON_DATA_MET_LOCATION, &mapNameID);
MonRestorePP(mon);
@@ -471,7 +467,7 @@ static void Task_EggHatch(u8 taskID)
{
if (!gPaletteFade.active)
{
- overworld_free_bg_tilemaps();
+ CleanupOverworldWindowsAndTilemaps();
SetMainCallback2(CB2_EggHatch_0);
gFieldCallback = sub_80AF168;
DestroyTask(taskID);
@@ -502,7 +498,7 @@ static void CB2_EggHatch_0(void)
ChangeBgX(0, 0, 0);
ChangeBgY(0, 0, 0);
- SetBgAttribute(1, BG_CTRL_ATTR_MOSAIC, 2);
+ SetBgAttribute(1, BG_ATTR_PRIORITY, 2);
SetBgTilemapBuffer(1, Alloc(0x1000));
SetBgTilemapBuffer(0, Alloc(0x2000));
diff --git a/src/event_obj_lock.c b/src/event_obj_lock.c
index 8c324ea82..566b4931d 100644
--- a/src/event_obj_lock.c
+++ b/src/event_obj_lock.c
@@ -6,6 +6,7 @@
#include "script_movement.h"
#include "task.h"
#include "trainer_see.h"
+#include "constants/event_objects.h"
bool8 walkrun_is_standing_still(void)
{
@@ -89,20 +90,20 @@ void LockSelectedEventObject(void)
void ScriptUnfreezeEventObjects(void)
{
- u8 objectId = GetEventObjectIdByLocalIdAndMap(0xFF, 0, 0);
- EventObjectClearHeldMovementIfFinished(&gEventObjects[objectId]);
+ u8 playerObjectId = GetEventObjectIdByLocalIdAndMap(EVENT_OBJ_ID_PLAYER, 0, 0);
+ EventObjectClearHeldMovementIfFinished(&gEventObjects[playerObjectId]);
sub_80D338C();
UnfreezeEventObjects();
}
void sub_8098524(void)
{
- u8 objectId;
+ u8 playerObjectId;
if (gEventObjects[gSelectedEventObject].active)
EventObjectClearHeldMovementIfFinished(&gEventObjects[gSelectedEventObject]);
- objectId = GetEventObjectIdByLocalIdAndMap(0xFF, 0, 0);
- EventObjectClearHeldMovementIfFinished(&gEventObjects[objectId]);
+ playerObjectId = GetEventObjectIdByLocalIdAndMap(EVENT_OBJ_ID_PLAYER, 0, 0);
+ EventObjectClearHeldMovementIfFinished(&gEventObjects[playerObjectId]);
sub_80D338C();
UnfreezeEventObjects();
}
diff --git a/src/event_object_movement.c b/src/event_object_movement.c
index ffa8f53c9..7cee717bf 100644
--- a/src/event_object_movement.c
+++ b/src/event_object_movement.c
@@ -6420,7 +6420,7 @@ bool8 MovementAction_FacePlayer_Step0(struct EventObject *eventObject, struct Sp
{
u8 playerObjectId;
- if (!TryGetEventObjectIdByLocalIdAndMap(0xFF, 0, 0, &playerObjectId))
+ if (!TryGetEventObjectIdByLocalIdAndMap(EVENT_OBJ_ID_PLAYER, 0, 0, &playerObjectId))
{
FaceDirection(eventObject, sprite, GetDirectionToFace(eventObject->currentCoords.x, eventObject->currentCoords.y, gEventObjects[playerObjectId].currentCoords.x, gEventObjects[playerObjectId].currentCoords.y));
}
@@ -6432,7 +6432,7 @@ bool8 MovementAction_FaceAwayPlayer_Step0(struct EventObject *eventObject, struc
{
u8 playerObjectId;
- if (!TryGetEventObjectIdByLocalIdAndMap(0xFF, 0, 0, &playerObjectId))
+ if (!TryGetEventObjectIdByLocalIdAndMap(EVENT_OBJ_ID_PLAYER, 0, 0, &playerObjectId))
{
FaceDirection(eventObject, sprite, GetOppositeDirection(GetDirectionToFace(eventObject->currentCoords.x, eventObject->currentCoords.y, gEventObjects[playerObjectId].currentCoords.x, gEventObjects[playerObjectId].currentCoords.y)));
}
diff --git a/src/evolution_scene.c b/src/evolution_scene.c
index 1070c69e9..c97e2d10f 100644
--- a/src/evolution_scene.c
+++ b/src/evolution_scene.c
@@ -1,33 +1,34 @@
#include "global.h"
-#include "evolution_scene.h"
-#include "evolution_graphics.h"
-#include "sprite.h"
#include "alloc.h"
-#include "task.h"
-#include "palette.h"
-#include "main.h"
-#include "text.h"
-#include "text_window.h"
-#include "pokemon.h"
-#include "string_util.h"
#include "battle.h"
-#include "scanline_effect.h"
+#include "battle_message.h"
+#include "bg.h"
+#include "data2.h"
#include "decompress.h"
+#include "evolution_scene.h"
+#include "evolution_graphics.h"
+#include "gpu_regs.h"
+#include "link.h"
#include "m4a.h"
+#include "main.h"
#include "menu.h"
+#include "overworld.h"
+#include "palette.h"
#include "pokedex.h"
-#include "constants/species.h"
+#include "pokemon.h"
+#include "scanline_effect.h"
#include "sound.h"
-#include "constants/songs.h"
-#include "overworld.h"
-#include "battle_message.h"
-#include "constants/battle_string_ids.h"
-#include "gpu_regs.h"
-#include "bg.h"
-#include "link.h"
-#include "util.h"
+#include "sprite.h"
+#include "string_util.h"
+#include "task.h"
+#include "text.h"
+#include "text_window.h"
#include "trig.h"
-#include "data2.h"
+#include "trade.h"
+#include "util.h"
+#include "constants/battle_string_ids.h"
+#include "constants/species.h"
+#include "constants/songs.h"
struct EvoInfo
{
@@ -50,12 +51,8 @@ extern const struct CompressedSpriteSheet gMonFrontPicTable[];
// strings
extern const u8 gText_CommunicationStandby5[];
-extern void sub_807B154(void);
-extern void sub_807F19C(void);
-extern void sub_807B140(void);
extern void ShowSelectMovePokemonSummaryScreen(struct Pokemon *party, u8 monId, u8 partyCount, void *CB2_ptr, u16 move);
extern u8 sub_81C1B94(void);
-extern void sub_807F1A8(u8 arg0, const u8 *arg1, u8 arg2);
extern void sub_800E084(void);
// this file's functions
@@ -1479,20 +1476,20 @@ static void InitMovingBackgroundTask(bool8 isLink)
if (!isLink)
{
- SetGpuReg(REG_OFFSET_BLDCNT, 0x442);
- SetGpuReg(REG_OFFSET_BLDALPHA, 0x808);
+ SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT1_BG1 | BLDCNT_EFFECT_BLEND | BLDCNT_TGT2_BG2);
+ SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(8, 8));
SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_OBJ_ON | DISPCNT_BG2_ON | DISPCNT_BG1_ON | DISPCNT_BG0_ON | DISPCNT_OBJ_1D_MAP);
- SetBgAttribute(innerBgId, BG_CTRL_ATTR_MOSAIC, 2);
- SetBgAttribute(outerBgId, BG_CTRL_ATTR_MOSAIC, 2);
+ SetBgAttribute(innerBgId, BG_ATTR_PRIORITY, 2);
+ SetBgAttribute(outerBgId, BG_ATTR_PRIORITY, 2);
ShowBg(1);
ShowBg(2);
}
else
{
- SetGpuReg(REG_OFFSET_BLDCNT, 0x842);
- SetGpuReg(REG_OFFSET_BLDALPHA, 0x808);
+ SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT1_BG1 | BLDCNT_EFFECT_BLEND | BLDCNT_TGT2_BG3);
+ SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(8, 8));
SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_OBJ_ON | DISPCNT_BG3_ON | DISPCNT_BG1_ON | DISPCNT_BG0_ON | DISPCNT_OBJ_1D_MAP);
}
@@ -1529,8 +1526,8 @@ static void sub_8140174(void)
gBattle_BG1_X = 0;
gBattle_BG1_Y = 0;
gBattle_BG2_X = 0;
- SetBgAttribute(1, BG_CTRL_ATTR_MOSAIC, sub_80391E0(1, 5));
- SetBgAttribute(2, BG_CTRL_ATTR_MOSAIC, sub_80391E0(2, 5));
+ SetBgAttribute(1, BG_ATTR_PRIORITY, sub_80391E0(1, 5));
+ SetBgAttribute(2, BG_ATTR_PRIORITY, sub_80391E0(2, 5));
SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_OBJ_ON | DISPCNT_BG3_ON | DISPCNT_BG0_ON | DISPCNT_OBJ_1D_MAP);
Free(sEvoMovingBgPtr);
}
diff --git a/src/field_control_avatar.c b/src/field_control_avatar.c
index 3774ef2b3..e6a859c84 100644
--- a/src/field_control_avatar.c
+++ b/src/field_control_avatar.c
@@ -27,7 +27,9 @@
#include "trainer_see.h"
#include "wild_encounter.h"
#include "constants/bg_event_constants.h"
+#include "constants/event_objects.h"
#include "constants/map_types.h"
+#include "constants/maps.h"
#include "constants/songs.h"
extern bool32 sub_8196034(void);
@@ -50,12 +52,12 @@ static bool32 TrySetupDiveDownScript(void);
static bool32 TrySetupDiveEmergeScript(void);
static bool8 TryStartStepBasedScript(struct MapPosition *, u16, u16);
static bool8 CheckStandardWildEncounter(u16);
-static bool8 mapheader_run_first_tag2_script_list_match_conditionally(struct MapPosition *, u16, u8);
+static bool8 TryArrowWarp(struct MapPosition *, u16, u8);
static bool8 IsWarpMetatileBehavior(u16);
static bool8 IsArrowWarpMetatileBehavior(u16, u8);
static s8 GetWarpEventAtMapPosition(struct MapHeader *, struct MapPosition *);
-static void sub_809CEB0(struct MapHeader *, s8, struct MapPosition *);
-static bool8 map_warp_consider_2_to_inside(struct MapPosition *, u16, u8);
+static void SetupWarp(struct MapHeader *, s8, struct MapPosition *);
+static bool8 TryDoorWarp(struct MapPosition *, u16, u8);
static s8 GetWarpEventAtPosition(struct MapHeader *, u16, u16, u8);
static u8 *GetCoordEventScriptAtPosition(struct MapHeader *, u16, u16, u8);
static struct BgEvent *GetBackgroundEventAtPosition(struct MapHeader *, u16, u16, u8);
@@ -72,8 +74,8 @@ void FieldClearPlayerInput(struct FieldInput *input)
input->checkStandardWildEncounter = FALSE;
input->pressedStartButton = FALSE;
input->pressedSelectButton = FALSE;
- input->input_field_0_4 = FALSE;
- input->input_field_0_5 = FALSE;
+ input->heldDirection = FALSE;
+ input->heldDirection2 = FALSE;
input->tookStep = FALSE;
input->pressedBButton = FALSE;
input->input_field_1_0 = FALSE;
@@ -105,8 +107,8 @@ void FieldGetPlayerInput(struct FieldInput *input, u16 newKeys, u16 heldKeys)
if (heldKeys & (DPAD_UP | DPAD_DOWN | DPAD_LEFT | DPAD_RIGHT))
{
- input->input_field_0_4 = TRUE;
- input->input_field_0_5 = TRUE;
+ input->heldDirection = TRUE;
+ input->heldDirection2 = TRUE;
}
}
@@ -152,15 +154,15 @@ int ProcessPlayerFieldInput(struct FieldInput *input)
if (input->tookStep)
{
IncrementGameStat(GAME_STAT_STEPS);
- increment_var_x4026_on_birth_island_modulo_100();
+ IncrementBirthIslandRockStepCount();
if (TryStartStepBasedScript(&position, metatileBehavior, playerDirection) == TRUE)
return TRUE;
}
if (input->checkStandardWildEncounter && CheckStandardWildEncounter(metatileBehavior) == TRUE)
return TRUE;
- if (input->input_field_0_4 && input->dpadDirection == playerDirection)
+ if (input->heldDirection && input->dpadDirection == playerDirection)
{
- if (mapheader_run_first_tag2_script_list_match_conditionally(&position, metatileBehavior, playerDirection) == TRUE)
+ if (TryArrowWarp(&position, metatileBehavior, playerDirection) == TRUE)
return TRUE;
}
@@ -169,9 +171,9 @@ int ProcessPlayerFieldInput(struct FieldInput *input)
if (input->pressedAButton && TryStartInteractionScript(&position, metatileBehavior, playerDirection) == TRUE)
return TRUE;
- if (input->input_field_0_5 && input->dpadDirection == playerDirection)
+ if (input->heldDirection2 && input->dpadDirection == playerDirection)
{
- if (map_warp_consider_2_to_inside(&position, metatileBehavior, playerDirection) == TRUE)
+ if (TryDoorWarp(&position, metatileBehavior, playerDirection) == TRUE)
return TRUE;
}
if (input->pressedAButton && TrySetupDiveDownScript() == TRUE)
@@ -265,7 +267,7 @@ const u8 *GetInteractedLinkPlayerScript(struct MapPosition *position, u8 metatil
else
eventObjectId = GetEventObjectIdByXYZ(position->x + gDirectionToVectors[direction].x, position->y + gDirectionToVectors[direction].y, position->height);
- if (eventObjectId == 16 || gEventObjects[eventObjectId].localId == 0xFF)
+ if (eventObjectId == EVENT_OBJECTS_COUNT || gEventObjects[eventObjectId].localId == EVENT_OBJ_ID_PLAYER)
return NULL;
for (i = 0; i < 4; i++)
@@ -286,14 +288,14 @@ static const u8 *GetInteractedEventObjectScript(struct MapPosition *position, u8
const u8 *script;
eventObjectId = GetEventObjectIdByXYZ(position->x, position->y, position->height);
- if (eventObjectId == 16 || gEventObjects[eventObjectId].localId == 0xFF)
+ if (eventObjectId == EVENT_OBJECTS_COUNT || gEventObjects[eventObjectId].localId == EVENT_OBJ_ID_PLAYER)
{
if (MetatileBehavior_IsCounter(metatileBehavior) != TRUE)
return NULL;
// Look for an event object on the other side of the counter.
eventObjectId = GetEventObjectIdByXYZ(position->x + gDirectionToVectors[direction].x, position->y + gDirectionToVectors[direction].y, position->height);
- if (eventObjectId == 16 || gEventObjects[eventObjectId].localId == 0xFF)
+ if (eventObjectId == EVENT_OBJECTS_COUNT || gEventObjects[eventObjectId].localId == EVENT_OBJ_ID_PLAYER)
return NULL;
}
@@ -302,13 +304,10 @@ static const u8 *GetInteractedEventObjectScript(struct MapPosition *position, u8
gSpecialVar_Facing = direction;
if (InTrainerHill() == TRUE)
- {
script = sub_81D62AC();
- }
else
- {
script = GetEventObjectScriptPointerByEventObjectId(eventObjectId);
- }
+
script = GetRamScript(gSpecialVar_LastTalked, script);
return script;
}
@@ -379,7 +378,7 @@ static const u8 *GetInteractedMetatileScript(struct MapPosition *position, u8 me
if (MetatileBehavior_IsCableBoxResults1(metatileBehavior) == TRUE)
return EventScript_CableBoxResults;
if (MetatileBehavior_IsPokeblockFeeder(metatileBehavior) == TRUE)
- return EventScript_2A4BAC;
+ return EventScript_PokeBlockFeeder;
if (MetatileBehavior_IsTrickHousePuzzleDoor(metatileBehavior) == TRUE)
return Route110_TrickHouseEntrance_EventScript_26A22A;
if (MetatileBehavior_IsRegionMap(metatileBehavior) == TRUE)
@@ -685,15 +684,15 @@ static bool8 CheckStandardWildEncounter(u16 metatileBehavior)
return FALSE;
}
-static bool8 mapheader_run_first_tag2_script_list_match_conditionally(struct MapPosition *position, u16 metatileBehavior, u8 direction)
+static bool8 TryArrowWarp(struct MapPosition *position, u16 metatileBehavior, u8 direction)
{
s8 warpEventId = GetWarpEventAtMapPosition(&gMapHeader, position);
if (IsArrowWarpMetatileBehavior(metatileBehavior, direction) == TRUE && warpEventId != -1)
{
StoreInitialPlayerAvatarState();
- sub_809CEB0(&gMapHeader, warpEventId, position);
- sub_80AF734();
+ SetupWarp(&gMapHeader, warpEventId, position);
+ DoWarp();
return TRUE;
}
return FALSE;
@@ -706,7 +705,7 @@ static bool8 TryStartWarpEventScript(struct MapPosition *position, u16 metatileB
if (warpEventId != -1 && IsWarpMetatileBehavior(metatileBehavior) == TRUE)
{
StoreInitialPlayerAvatarState();
- sub_809CEB0(&gMapHeader, warpEventId, position);
+ SetupWarp(&gMapHeader, warpEventId, position);
if (MetatileBehavior_IsEscalator(metatileBehavior) == TRUE)
{
sub_80AF80C(metatileBehavior);
@@ -742,7 +741,7 @@ static bool8 TryStartWarpEventScript(struct MapPosition *position, u16 metatileB
sub_80AF87C();
return TRUE;
}
- sub_80AF734();
+ DoWarp();
return TRUE;
}
return FALSE;
@@ -785,7 +784,7 @@ static s8 GetWarpEventAtMapPosition(struct MapHeader *mapHeader, struct MapPosit
return GetWarpEventAtPosition(mapHeader, position->x - 7, position->y - 7, position->height);
}
-static void sub_809CEB0(struct MapHeader *unused, s8 warpEventId, struct MapPosition *position)
+static void SetupWarp(struct MapHeader *unused, s8 warpEventId, struct MapPosition *position)
{
const struct WarpEvent *warpEvent;
@@ -818,23 +817,23 @@ static void sub_809CEB0(struct MapHeader *unused, s8 warpEventId, struct MapPosi
warpEvent = &gMapHeader.events->warps[warpEventId];
}
- if (warpEvent->mapNum == 0x7F)
+ if (warpEvent->mapNum == MAP_NUM(NONE))
{
- copy_saved_warp2_bank_and_enter_x_to_warp1(warpEvent->warpId);
+ SetWarpDestinationToDynamicWarp(warpEvent->warpId);
}
else
{
const struct MapHeader *mapHeader;
- warp1_set_2(warpEvent->mapGroup, warpEvent->mapNum, warpEvent->warpId);
- sub_8084D5C(position->x, position->y);
+ SetWarpDestinationToMapWarp(warpEvent->mapGroup, warpEvent->mapNum, warpEvent->warpId);
+ UpdateEscapeWarp(position->x, position->y);
mapHeader = Overworld_GetMapHeaderByGroupAndId(warpEvent->mapGroup, warpEvent->mapNum);
- if (mapHeader->events->warps[warpEvent->warpId].mapNum == 0x7F)
- saved_warp2_set(mapHeader->events->warps[warpEventId].warpId, gSaveBlock1Ptr->location.mapGroup, gSaveBlock1Ptr->location.mapNum, warpEventId);
+ if (mapHeader->events->warps[warpEvent->warpId].mapNum == MAP_NUM(NONE))
+ SetDynamicWarp(mapHeader->events->warps[warpEventId].warpId, gSaveBlock1Ptr->location.mapGroup, gSaveBlock1Ptr->location.mapNum, warpEventId);
}
}
-static bool8 map_warp_consider_2_to_inside(struct MapPosition *position, u16 metatileBehavior, u8 direction)
+static bool8 TryDoorWarp(struct MapPosition *position, u16 metatileBehavior, u8 direction)
{
s8 warpEventId;
@@ -842,17 +841,18 @@ static bool8 map_warp_consider_2_to_inside(struct MapPosition *position, u16 met
{
if (MetatileBehavior_IsOpenSecretBaseDoor(metatileBehavior) == TRUE)
{
- sub_80E9668(position, gMapHeader.events);
+ WarpIntoSecretBase(position, gMapHeader.events);
return TRUE;
}
+
if (MetatileBehavior_IsWarpDoor(metatileBehavior) == TRUE)
{
warpEventId = GetWarpEventAtMapPosition(&gMapHeader, position);
if (warpEventId != -1 && IsWarpMetatileBehavior(metatileBehavior) == TRUE)
{
StoreInitialPlayerAvatarState();
- sub_809CEB0(&gMapHeader, warpEventId, position);
- sub_80AF7D0();
+ SetupWarp(&gMapHeader, warpEventId, position);
+ DoDoorWarp();
return TRUE;
}
}
@@ -947,7 +947,7 @@ bool8 dive_warp(struct MapPosition *position, u16 metatileBehavior)
if (SetDiveWarpEmerge(position->x - 7, position->y - 7))
{
StoreInitialPlayerAvatarState();
- sp13E_warp_to_last_warp();
+ DoDiveWarp();
PlaySE(SE_W291);
return TRUE;
}
@@ -957,7 +957,7 @@ bool8 dive_warp(struct MapPosition *position, u16 metatileBehavior)
if (SetDiveWarpDive(position->x - 7, position->y - 7))
{
StoreInitialPlayerAvatarState();
- sp13E_warp_to_last_warp();
+ DoDiveWarp();
PlaySE(SE_W291);
return TRUE;
}
@@ -1002,6 +1002,6 @@ int SetCableClubWarp(void)
GetPlayerMovementDirection(); //unnecessary
GetPlayerPosition(&position);
MapGridGetMetatileBehaviorAt(position.x, position.y); //unnecessary
- sub_809CEB0(&gMapHeader, GetWarpEventAtMapPosition(&gMapHeader, &position), &position);
+ SetupWarp(&gMapHeader, GetWarpEventAtMapPosition(&gMapHeader, &position), &position);
return 0;
}
diff --git a/src/field_effect.c b/src/field_effect.c
index 9a65a444b..badf57b16 100644
--- a/src/field_effect.c
+++ b/src/field_effect.c
@@ -230,7 +230,7 @@ static void sub_80B9A60(struct Task *);
static void sub_80B9BE8(u8 taskId);
static void sub_80B9DB8(struct Sprite* sprite);
-static void sub_80B9EDC(u8 taskId);
+static void Fldeff_MoveDeoxysRock_Step(u8 taskId);
// Static RAM declarations
@@ -2171,7 +2171,7 @@ static void EscapeRopeFieldEffect_Step1(struct Task *task)
if (task->data[14] == 0 && !gPaletteFade.active && BGMusicStopped() == TRUE)
{
SetEventObjectDirection(eventObject, task->data[15]);
- sub_8084E14();
+ SetWarpDestinationToEscapeWarp();
WarpIntoMap();
gFieldCallback = mapldr_080859D4;
SetMainCallback2(CB2_LoadMap);
@@ -2332,7 +2332,7 @@ static void TeleportFieldEffectTask4(struct Task *task)
if (BGMusicStopped() == TRUE)
{
- Overworld_SetWarpDestToLastHealLoc();
+ SetWarpDestinationToLastHealLocation();
WarpIntoMap();
SetMainCallback2(CB2_LoadMap);
gFieldCallback = mapldr_08085D88;
@@ -2443,7 +2443,7 @@ static void sub_80B8410(struct Task *task)
bool8 FldEff_FieldMoveShowMon(void)
{
u8 taskId;
- if (is_map_type_1_2_3_5_or_6(Overworld_GetMapTypeOfSaveblockLocation()) == TRUE)
+ if (is_map_type_1_2_3_5_or_6(GetCurrentMapType()) == TRUE)
{
taskId = CreateTask(sub_80B8554, 0xff);
} else
@@ -3644,7 +3644,7 @@ static void sub_80B9DB8(struct Sprite* sprite)
DestroySprite(sprite);
}
-bool8 sub_80B9E28(struct Sprite* sprite)
+bool8 Fldeff_MoveDeoxysRock(struct Sprite* sprite)
{
u8 eventObjectIdBuffer;
if (!TryGetEventObjectIdByLocalIdAndMap(gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2], &eventObjectIdBuffer))
@@ -3658,7 +3658,7 @@ bool8 sub_80B9E28(struct Sprite* sprite)
xPos = (gFieldEffectArguments[3] - xPos) * 16;
yPos = (gFieldEffectArguments[4] - yPos) * 16;
ShiftEventObjectCoords(object, gFieldEffectArguments[3] + 7, gFieldEffectArguments[4] + 7);
- taskId = CreateTask(sub_80B9EDC, 0x50);
+ taskId = CreateTask(Fldeff_MoveDeoxysRock_Step, 0x50);
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;
@@ -3668,7 +3668,7 @@ bool8 sub_80B9E28(struct Sprite* sprite)
return FALSE;
}
-static void sub_80B9EDC(u8 taskId)
+static void Fldeff_MoveDeoxysRock_Step(u8 taskId)
{
// BUG: Possible divide by zero
s16 *data = gTasks[taskId].data;
diff --git a/src/field_message_box.c b/src/field_message_box.c
index 46da9e9e5..5e23b5f6b 100755
--- a/src/field_message_box.c
+++ b/src/field_message_box.c
@@ -8,21 +8,21 @@
extern bool32 sub_8196094(void);
extern void sub_8196080(u8*);
-EWRAM_DATA u8 gUnknown_020375BC = 0;
+static EWRAM_DATA u8 sFieldMessageBoxMode = 0;
-void textbox_fdecode_auto_and_task_add(u8*, int);
-void textbox_auto_and_task_add(void);
+static void textbox_fdecode_auto_and_task_add(u8*, bool32);
+static void textbox_auto_and_task_add(void);
-void sub_8098128(void)
+void InitFieldMessageBox(void)
{
- gUnknown_020375BC = 0;
+ sFieldMessageBoxMode = 0;
gTextFlags.canABSpeedUpPrint = 0;
gTextFlags.useAlternateDownArrow = 0;
gTextFlags.autoScroll = 0;
gTextFlags.forceMidTextSpeed = 0;
}
-void sub_8098154(u8 taskId)
+static void sub_8098154(u8 taskId)
{
struct Task *task = &gTasks[taskId];
@@ -39,18 +39,18 @@ void sub_8098154(u8 taskId)
case 2:
if (RunTextPrintersAndIsPrinter0Active() != 1)
{
- gUnknown_020375BC = 0;
+ sFieldMessageBoxMode = 0;
DestroyTask(taskId);
}
}
}
-void task_add_textbox(void)
+static void task_add_textbox(void)
{
CreateTask(sub_8098154, 0x50);
}
-void task_del_textbox(void)
+static void task_del_textbox(void)
{
u8 taskId = FindTaskIdByFunc(sub_8098154);
if (taskId != 0xFF)
@@ -59,10 +59,10 @@ void task_del_textbox(void)
bool8 ShowFieldMessage(u8 *str)
{
- if (gUnknown_020375BC != 0)
+ if (sFieldMessageBoxMode != 0)
return FALSE;
textbox_fdecode_auto_and_task_add(str, 1);
- gUnknown_020375BC = 2;
+ sFieldMessageBoxMode = 2;
return TRUE;
}
@@ -70,57 +70,57 @@ void sub_8098214(u8 taskId)
{
if (!sub_8196094())
{
- gUnknown_020375BC = 0;
+ sFieldMessageBoxMode = 0;
DestroyTask(taskId);
}
}
bool8 sub_8098238(u8 *str)
{
- if (gUnknown_020375BC != 0)
+ if (sFieldMessageBoxMode != 0)
return FALSE;
StringExpandPlaceholders(gStringVar4, str);
CreateTask(sub_8098214, 0);
sub_8196080(str);
- gUnknown_020375BC = 2;
+ sFieldMessageBoxMode = 2;
return TRUE;
}
bool8 ShowFieldAutoScrollMessage(u8 *str)
{
- if (gUnknown_020375BC != 0)
+ if (sFieldMessageBoxMode != 0)
return FALSE;
- gUnknown_020375BC = 3;
+ sFieldMessageBoxMode = 3;
textbox_fdecode_auto_and_task_add(str, 0);
return TRUE;
}
bool8 sub_80982A0(u8 *str)
{
- gUnknown_020375BC = 3;
+ sFieldMessageBoxMode = 3;
textbox_fdecode_auto_and_task_add(str, 1);
return TRUE;
}
bool8 sub_80982B8(void)
{
- if (gUnknown_020375BC != 0)
+ if (sFieldMessageBoxMode != 0)
return FALSE;
- gUnknown_020375BC = 2;
+ sFieldMessageBoxMode = 2;
textbox_auto_and_task_add();
return TRUE;
}
-void textbox_fdecode_auto_and_task_add(u8* str, int a)
+static void textbox_fdecode_auto_and_task_add(u8* str, bool32 allowSkippingDelayWithButtonPress)
{
StringExpandPlaceholders(gStringVar4, str);
- AddTextPrinterForMessage(a);
+ AddTextPrinterForMessage(allowSkippingDelayWithButtonPress);
task_add_textbox();
}
-void textbox_auto_and_task_add(void)
+static void textbox_auto_and_task_add(void)
{
- AddTextPrinterForMessage(1);
+ AddTextPrinterForMessage(TRUE);
task_add_textbox();
}
@@ -128,17 +128,17 @@ void HideFieldMessageBox(void)
{
task_del_textbox();
sub_8197434(0, 1);
- gUnknown_020375BC = 0;
+ sFieldMessageBoxMode = 0;
}
u8 GetFieldMessageBoxMode(void)
{
- return gUnknown_020375BC;
+ return sFieldMessageBoxMode;
}
bool8 IsFieldMessageBoxHidden(void)
{
- if (gUnknown_020375BC == 0)
+ if (sFieldMessageBoxMode == 0)
return TRUE;
return FALSE;
}
@@ -147,11 +147,11 @@ void sub_8098358(void)
{
task_del_textbox();
NewMenuHelpers_DrawStdWindowFrame(0, 1);
- gUnknown_020375BC = 0;
+ sFieldMessageBoxMode = 0;
}
void sub_8098374(void)
{
task_del_textbox();
- gUnknown_020375BC = 0;
+ sFieldMessageBoxMode = 0;
}
diff --git a/src/field_player_avatar.c b/src/field_player_avatar.c
index f14ac8329..7423216a4 100644
--- a/src/field_player_avatar.c
+++ b/src/field_player_avatar.c
@@ -723,7 +723,7 @@ static bool8 sub_808B1BC(s16 x, s16 y, u8 direction)
{
if ((gPlayerAvatar.flags & PLAYER_AVATAR_FLAG_SURFING)
&& MapGridGetZCoordAt(x, y) == 3
- && GetEventObjectIdByXYZ(x, y, 3) == 16)
+ && GetEventObjectIdByXYZ(x, y, 3) == EVENT_OBJECTS_COUNT)
{
sub_808C750(direction);
return TRUE;
@@ -791,12 +791,9 @@ bool8 IsPlayerCollidingWithFarawayIslandMew(u8 direction)
playerY = object->currentCoords.y;
MoveCoords(direction, &playerX, &playerY);
- mewObjectId = GetEventObjectIdByLocalIdAndMap(1, 0x39, 0x1A);
-
- if (mewObjectId == 16)
- {
+ mewObjectId = GetEventObjectIdByLocalIdAndMap(1, MAP_NUM(FARAWAY_ISLAND_INTERIOR), MAP_GROUP(FARAWAY_ISLAND_INTERIOR));
+ if (mewObjectId == EVENT_OBJECTS_COUNT)
return FALSE;
- }
object = &gEventObjects[mewObjectId];
mewPrevX = object->previousCoords.x;
@@ -1389,7 +1386,7 @@ void InitPlayerAvatar(s16 x, s16 y, u8 direction, u8 gender)
u8 eventObjectId;
struct EventObject *eventObject;
- playerEventObjTemplate.localId = 0xFF;
+ playerEventObjTemplate.localId = EVENT_OBJ_ID_PLAYER;
playerEventObjTemplate.graphicsId = GetPlayerAvatarGraphicsIdByStateIdAndGender(PLAYER_AVATAR_STATE_NORMAL, gender);
playerEventObjTemplate.x = x - 7;
playerEventObjTemplate.y = y - 7;
diff --git a/src/field_screen_effect.c b/src/field_screen_effect.c
index a6b7e7c24..b9e9272d4 100644
--- a/src/field_screen_effect.c
+++ b/src/field_screen_effect.c
@@ -89,7 +89,7 @@ static void palette_bg_faded_fill_black(void)
void pal_fill_for_maplights(void)
{
u8 previousMapType = GetLastUsedWarpMapType();
- switch (GetMapPairFadeFromType(previousMapType, Overworld_GetMapTypeOfSaveblockLocation()))
+ switch (GetMapPairFadeFromType(previousMapType, GetCurrentMapType()))
{
case 0:
palette_bg_faded_fill_black();
@@ -115,7 +115,7 @@ void pal_fill_black(void)
void WarpFadeScreen(void)
{
- u8 currentMapType = Overworld_GetMapTypeOfSaveblockLocation();
+ u8 currentMapType = GetCurrentMapType();
switch (GetMapPairFadeToType(currentMapType, GetDestinationWarpMapHeader()->mapType))
{
case 0:
@@ -215,7 +215,7 @@ static void sub_80AF234(u8 taskId)
task->data[0]++;
break;
case 1:
- if (!sub_800A520())
+ if (!IsLinkTaskFinished())
{
if (++task->data[1] > 1800)
sub_8011170(0x6000);
@@ -248,7 +248,7 @@ void sub_80AF2B4(u8 taskId)
task->data[0]++;
break;
case 1:
- if (sub_800A520())
+ if (IsLinkTaskFinished())
{
task->data[0]++;
}
@@ -498,7 +498,7 @@ static bool32 sub_80AF71C(void)
return FALSE;
}
-void sub_80AF734(void)
+void DoWarp(void)
{
ScriptContext2_Enable();
TryFadeOutOldMapMusic();
@@ -509,7 +509,7 @@ void sub_80AF734(void)
CreateTask(sub_80AFA0C, 10);
}
-void sp13E_warp_to_last_warp(void)
+void DoDiveWarp(void)
{
ScriptContext2_Enable();
TryFadeOutOldMapMusic();
@@ -529,16 +529,16 @@ void sub_80AF79C(void)
CreateTask(sub_80AFA0C, 10);
}
-void sub_80AF7D0(void)
+void DoDoorWarp(void)
{
ScriptContext2_Enable();
gFieldCallback = mapldr_default;
CreateTask(sub_80AFA88, 10);
}
-void sp13F_fall_to_last_warp(void)
+void DoFallWarp(void)
{
- sp13E_warp_to_last_warp();
+ DoDiveWarp();
gFieldCallback = sub_80B6B68;
}
diff --git a/src/field_special_scene.c b/src/field_special_scene.c
index 1cabf63d6..579188f36 100644
--- a/src/field_special_scene.c
+++ b/src/field_special_scene.c
@@ -1,7 +1,12 @@
#include "global.h"
#include "event_data.h"
#include "event_object_movement.h"
+#include "field_camera.h"
+#include "field_screen_effect.h"
+#include "field_specials.h"
+#include "fieldmap.h"
#include "main.h"
+#include "overworld.h"
#include "palette.h"
#include "script.h"
#include "script_movement.h"
@@ -13,14 +18,6 @@
#define SECONDS(value) ((signed) (60.0 * value + 0.5))
-extern u8 GetSSTidalLocation(s8 *, s8 *, s16 *, s16 *); // should be in field_specials.h
-extern void Overworld_SetWarpDestination(s8 mapGroup, s8 mapNum, s8 warpId, s8 x, s8 y);
-extern bool32 CountSSTidalStep(u16);
-extern void copy_saved_warp2_bank_and_enter_x_to_warp1(u8 unused);
-extern void sp13E_warp_to_last_warp(void);
-extern void saved_warp2_set(int unused, s8 mapGroup, s8 mapNum, s8 warpId);
-extern void sub_80AF8B8(void);
-
// porthole states
enum
{
@@ -30,20 +27,13 @@ enum
EXIT_PORTHOLE,
};
-extern void SetCameraPanning(s16 x, s16 y);
-extern void SetCameraPanningCallback(void ( *callback)());
-extern void InstallCameraPanAheadCallback();
-extern void pal_fill_black(void);
-extern void MapGridSetMetatileIdAt(s32 x, s32 y, u16 metatileId);
-extern void DrawWholeMapView();
-
//. rodata
static const s8 gTruckCamera_HorizontalTable[] = {0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 2, 2, 2, 2, 2, -1, -1, -1, 0};
const u8 gUnknown_0858E8AB[] = {0x18, 0xFE};
const u8 gUnknown_0858E8AD[] = {0x17, 0xFE};
// .text
-void Task_Truck3(u8);
+static void Task_Truck3(u8);
s16 GetTruckCameraBobbingY(int a1)
{
@@ -121,7 +111,7 @@ void Task_Truck2(u8 taskId)
}
}
-void Task_Truck3(u8 taskId)
+static void Task_Truck3(u8 taskId)
{
s16 *data = gTasks[taskId].data;
s16 cameraXpan;
@@ -256,7 +246,7 @@ bool8 sub_80FB59C(void)
}
else
{
- Overworld_SetWarpDestination(mapGroup, mapNum, -1, x, y);
+ SetWarpDestination(mapGroup, mapNum, -1, x, y);
return TRUE;
}
}
@@ -312,8 +302,8 @@ void Task_HandlePorthole(u8 taskId)
case EXIT_PORTHOLE: // exit porthole.
FlagClear(0x4001);
FlagClear(0x4000);
- copy_saved_warp2_bank_and_enter_x_to_warp1(0);
- sp13E_warp_to_last_warp();
+ SetWarpDestinationToDynamicWarp(0);
+ DoDiveWarp();
DestroyTask(taskId);
break;
}
@@ -349,7 +339,7 @@ void sub_80FB7A4(void)
FlagSet(FLAG_SYS_CRUISE_MODE);
FlagSet(0x4001);
FlagSet(0x4000);
- saved_warp2_set(0, gSaveBlock1Ptr->location.mapGroup, gSaveBlock1Ptr->location.mapNum, -1);
+ SetDynamicWarp(0, gSaveBlock1Ptr->location.mapGroup, gSaveBlock1Ptr->location.mapNum, -1);
sub_80FB59C();
sub_80AF8B8();
}
diff --git a/src/field_specials.c b/src/field_specials.c
index e77a5e883..0dc1bf18b 100644
--- a/src/field_specials.c
+++ b/src/field_specials.c
@@ -47,6 +47,7 @@
#include "constants/event_objects.h"
#include "constants/field_effects.h"
#include "constants/items.h"
+#include "constants/map_types.h"
#include "constants/maps.h"
#include "constants/songs.h"
#include "constants/species.h"
@@ -115,9 +116,9 @@ static void sub_813A738(u8 taskId);
static void sub_813A600(u8 taskId);
static void sub_813A664(u8 taskId);
static void sub_813ABD4(u16 a0);
-static void task_deoxys_sound(u8 taskId);
-static void sub_813B0B4(u8 a0);
-static void sub_813B160(u8 taskId);
+static void Task_DeoxysRockInteraction(u8 taskId);
+static void ChangeDeoxysRockLevel(u8 a0);
+static void WaitForDeoxysRockMovement(u8 taskId);
static void sub_813B57C(u8 taskId);
static void sub_813B824(u8 taskId);
static void _fwalk(u8 taskId);
@@ -391,11 +392,11 @@ bool32 sub_8138120(void)
{
switch (gMapHeader.mapType)
{
- case 1:
- case 2:
- case 3:
- case 6:
- if (++(*GetVarPointer(VAR_0x40F3)) < 0xA)
+ case MAP_TYPE_TOWN:
+ case MAP_TYPE_CITY:
+ case MAP_TYPE_ROUTE:
+ case MAP_TYPE_6:
+ if (++(*GetVarPointer(VAR_0x40F3)) < 10)
{
return FALSE;
}
@@ -945,11 +946,11 @@ void CableCarWarp(void)
{
if (gSpecialVar_0x8004 != 0)
{
- Overworld_SetWarpDestination(MAP_GROUP(ROUTE112_CABLE_CAR_STATION), MAP_NUM(ROUTE112_CABLE_CAR_STATION), -1, 6, 4);
+ SetWarpDestination(MAP_GROUP(ROUTE112_CABLE_CAR_STATION), MAP_NUM(ROUTE112_CABLE_CAR_STATION), -1, 6, 4);
}
else
{
- Overworld_SetWarpDestination(MAP_GROUP(MT_CHIMNEY_CABLE_CAR_STATION), MAP_NUM(MT_CHIMNEY_CABLE_CAR_STATION), -1, 6, 4);
+ SetWarpDestination(MAP_GROUP(MT_CHIMNEY_CABLE_CAR_STATION), MAP_NUM(MT_CHIMNEY_CABLE_CAR_STATION), -1, 6, 4);
}
}
@@ -1725,7 +1726,7 @@ const u16 gUnknown_085B2C06[][3] =
void SetDepartmentStoreFloorVar(void)
{
u8 deptStoreFloor;
- switch (gSaveBlock1Ptr->warp2.mapNum)
+ switch (gSaveBlock1Ptr->dynamicWarp.mapNum)
{
case MAP_NUM(LILYCOVE_CITY_DEPARTMENT_STORE_1F):
deptStoreFloor = 4;
@@ -1757,9 +1758,9 @@ u16 sub_81399F4(void)
gUnknown_0203AB60 = 0;
gUnknown_0203AB62 = 0;
- if (gSaveBlock1Ptr->warp2.mapGroup == 13)
+ if (gSaveBlock1Ptr->dynamicWarp.mapGroup == MAP_GROUP(LILYCOVE_CITY_DEPARTMENT_STORE_1F))
{
- switch (gSaveBlock1Ptr->warp2.mapNum)
+ switch (gSaveBlock1Ptr->dynamicWarp.mapNum)
{
case MAP_NUM(LILYCOVE_CITY_DEPARTMENT_STORE_5F):
gUnknown_0203AB60 = 0;
@@ -3233,12 +3234,12 @@ void sub_813AF48(void)
}
}
-void sub_813AFC8(void)
+void DoDeoxysRockInteraction(void)
{
- CreateTask(task_deoxys_sound, 8);
+ CreateTask(Task_DeoxysRockInteraction, 8);
}
-static const u16 gUnknown_085B3280[][16] = {
+static const u16 sDeoxysRockPalettes[][16] = {
INCBIN_U16("graphics/misc/deoxys1.gbapal"),
INCBIN_U16("graphics/misc/deoxys2.gbapal"),
INCBIN_U16("graphics/misc/deoxys3.gbapal"),
@@ -3252,25 +3253,25 @@ static const u16 gUnknown_085B3280[][16] = {
INCBIN_U16("graphics/misc/deoxys11.gbapal"),
};
-static const u8 gUnknown_085B33E0[][2] = {
- { 0x0f, 0x0c },
- { 0x0b, 0x0e },
- { 0x0f, 0x08 },
- { 0x13, 0x0e },
- { 0x0c, 0x0b },
- { 0x12, 0x0b },
- { 0x0f, 0x0e },
- { 0x0b, 0x0e },
- { 0x13, 0x0e },
- { 0x0f, 0x0f },
- { 0x0f, 0x0a },
+static const u8 sDeoxysRockCoords[][2] = {
+ { 15, 12 },
+ { 11, 14 },
+ { 15, 8 },
+ { 19, 14 },
+ { 12, 11 },
+ { 18, 11 },
+ { 15, 14 },
+ { 11, 14 },
+ { 19, 14 },
+ { 15, 15 },
+ { 15, 10 },
};
-static void task_deoxys_sound(u8 taskId)
+static void Task_DeoxysRockInteraction(u8 taskId)
{
- static const u8 gUnknown_085B33F6[] = { 0x04, 0x08, 0x08, 0x08, 0x04, 0x04, 0x04, 0x06, 0x03, 0x03 };
+ static const u8 sStoneMaxStepCounts[] = { 4, 8, 8, 8, 4, 4, 4, 6, 3, 3 };
- if (FlagGet(FLAG_0x8D4) == TRUE)
+ if (FlagGet(FLAG_DEOXYS_ROCK_COMPLETE) == TRUE)
{
gSpecialVar_Result = 3;
EnableBothScriptContexts();
@@ -3278,100 +3279,92 @@ static void task_deoxys_sound(u8 taskId)
}
else
{
- u16 temp1 = VarGet(VAR_0x4035);
- u16 temp2 = VarGet(VAR_0x4034);
+ u16 rockLevel = VarGet(VAR_DEOXYS_ROCK_LEVEL);
+ u16 stepCount = VarGet(VAR_DEOXYS_ROCK_STEP_COUNT);
- VarSet(VAR_0x4034, 0);
- if (temp1 != 0 && gUnknown_085B33F6[temp1 - 1] < temp2)
+ VarSet(VAR_DEOXYS_ROCK_STEP_COUNT, 0);
+ if (rockLevel != 0 && sStoneMaxStepCounts[rockLevel - 1] < stepCount)
{
- sub_813B0B4(0);
- VarSet(VAR_0x4035, 0);
+ // Player failed to take the shortest path to the stone, so it resets.
+ ChangeDeoxysRockLevel(0);
+ VarSet(VAR_DEOXYS_ROCK_LEVEL, 0);
gSpecialVar_Result = 0;
DestroyTask(taskId);
}
- else if (temp1 == 10)
+ else if (rockLevel == 10)
{
- FlagSet(FLAG_0x8D4);
+ FlagSet(FLAG_DEOXYS_ROCK_COMPLETE);
gSpecialVar_Result = 2;
EnableBothScriptContexts();
DestroyTask(taskId);
}
else
{
- temp1++;
- sub_813B0B4(temp1);
- VarSet(VAR_0x4035, temp1);
+ rockLevel++;
+ ChangeDeoxysRockLevel(rockLevel);
+ VarSet(VAR_DEOXYS_ROCK_LEVEL, rockLevel);
gSpecialVar_Result = 1;
DestroyTask(taskId);
}
}
}
-static void sub_813B0B4(u8 a0)
+static void ChangeDeoxysRockLevel(u8 rockLevel)
{
u8 eventObjectId;
- LoadPalette(&gUnknown_085B3280[a0], 0x1A0, 8);
+ LoadPalette(&sDeoxysRockPalettes[rockLevel], 0x1A0, 8);
TryGetEventObjectIdByLocalIdAndMap(1, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, &eventObjectId);
- if (a0 == 0)
- {
+ if (rockLevel == 0)
PlaySE(SE_W109);
- }
else
- {
PlaySE(SE_RG_DEOMOV);
- }
-
- CreateTask(sub_813B160, 8);
+ CreateTask(WaitForDeoxysRockMovement, 8);
gFieldEffectArguments[0] = 1;
gFieldEffectArguments[1] = 58;
gFieldEffectArguments[2] = 26;
- gFieldEffectArguments[3] = gUnknown_085B33E0[a0][0];
- gFieldEffectArguments[4] = gUnknown_085B33E0[a0][1];
+ gFieldEffectArguments[3] = sDeoxysRockCoords[rockLevel][0];
+ gFieldEffectArguments[4] = sDeoxysRockCoords[rockLevel][1];
- if (a0 == 0)
- {
+ if (rockLevel == 0)
gFieldEffectArguments[5] = 60;
- }
else
- {
gFieldEffectArguments[5] = 5;
- }
- FieldEffectStart(FLDEFF_66);
- Overworld_SetEventObjTemplateCoords(1, gUnknown_085B33E0[a0][0], gUnknown_085B33E0[a0][1]);
+ FieldEffectStart(FLDEFF_MOVE_DEOXYS_ROCK);
+ Overworld_SetEventObjTemplateCoords(1, sDeoxysRockCoords[rockLevel][0], sDeoxysRockCoords[rockLevel][1]);
}
-static void sub_813B160(u8 taskId)
+static void WaitForDeoxysRockMovement(u8 taskId)
{
- if (FieldEffectActiveListContains(FLDEFF_66) == FALSE)
+ if (FieldEffectActiveListContains(FLDEFF_MOVE_DEOXYS_ROCK) == FALSE)
{
EnableBothScriptContexts();
DestroyTask(taskId);
}
}
-void increment_var_x4026_on_birth_island_modulo_100(void)
+void IncrementBirthIslandRockStepCount(void)
{
- u16 var = VarGet(VAR_0x4034);
+ u16 var = VarGet(VAR_DEOXYS_ROCK_STEP_COUNT);
if (gSaveBlock1Ptr->location.mapNum == MAP_NUM(BIRTH_ISLAND_EXTERIOR) && gSaveBlock1Ptr->location.mapGroup == MAP_GROUP(BIRTH_ISLAND_EXTERIOR))
{
var++;
if (var > 99)
{
- VarSet(VAR_0x4034, 0);
+ VarSet(VAR_DEOXYS_ROCK_STEP_COUNT, 0);
}
else
{
- VarSet(VAR_0x4034, var);
+ VarSet(VAR_DEOXYS_ROCK_STEP_COUNT, var);
}
}
}
void sub_813B1D0(void)
{
- LoadPalette(&gUnknown_085B3280[(u8)VarGet(VAR_0x4035)], 0x1A0, 8);
+ LoadPalette(&sDeoxysRockPalettes[(u8)VarGet(VAR_DEOXYS_ROCK_LEVEL)], 0x1A0, 8);
BlendPalettes(0x04000000, 16, 0);
}
@@ -3616,7 +3609,7 @@ static void sub_813B57C(u8 taskId)
}
break;
case 1:
- if (sub_800A520() == TRUE)
+ if (IsLinkTaskFinished() == TRUE)
{
if (GetMultiplayerId() == 0)
{
@@ -3657,7 +3650,7 @@ static void sub_813B57C(u8 taskId)
}
break;
case 3:
- if (sub_800A520() == TRUE)
+ if (IsLinkTaskFinished() == TRUE)
{
if (GetMultiplayerId() != 0)
{
@@ -3709,14 +3702,14 @@ static void sub_813B57C(u8 taskId)
}
break;
case 7:
- if (sub_800A520() == 1)
+ if (IsLinkTaskFinished() == 1)
{
sub_800ADF8();
gTasks[taskId].data[0]++;
}
break;
case 8:
- if (sub_800A520() == 1)
+ if (IsLinkTaskFinished() == 1)
{
gTasks[taskId].data[0]++;
}
@@ -3813,7 +3806,7 @@ void sub_813B9A0(void)
{
if (gSaveBlock1Ptr->lastHealLocation.mapGroup == MAP_GROUP(DEWFORD_TOWN) && gSaveBlock1Ptr->lastHealLocation.mapNum == MAP_NUM(DEWFORD_TOWN))
{
- Overworld_SetHealLocationWarp(3);
+ SetLastHealLocationWarp(3);
}
}
diff --git a/src/field_tasks.c b/src/field_tasks.c
index 7a7f49120..22b8697d8 100644
--- a/src/field_tasks.c
+++ b/src/field_tasks.c
@@ -20,61 +20,60 @@
#include "constants/songs.h"
#include "constants/vars.h"
-struct MetatileOffset
+struct PacifidlogMetatileOffsets
{
s8 x;
s8 y;
u16 tileId;
};
-// this file's functions
static void DummyPerStepCallback(u8 taskId);
-static void PerStepCallback_8069F64(u8 taskId);
-static void PerStepCallback_8069AA0(u8 taskId);
-static void PerStepCallback_8069864(u8 taskId);
-static void PerStepCallback_8069DD4(u8 taskId);
-static void PerStepCallback_806A07C(u8 taskId);
+static void AshGrassPerStepCallback(u8 taskId);
+static void FortreeBridgePerStepCallback(u8 taskId);
+static void PacifidlogBridgePerStepCallback(u8 taskId);
+static void SootopolisGymIcePerStepCallback(u8 taskId);
+static void CrackedFloorPerStepCallback(u8 taskId);
static void Task_MuddySlope(u8 taskId);
-// const rom data
-static void (*const gUnknown_08510348[])(u8) =
+static const TaskFunc sPerStepCallbacks[] =
{
DummyPerStepCallback,
- PerStepCallback_8069F64,
- PerStepCallback_8069AA0,
- PerStepCallback_8069864,
- PerStepCallback_8069DD4,
+ AshGrassPerStepCallback,
+ FortreeBridgePerStepCallback,
+ PacifidlogBridgePerStepCallback,
+ SootopolisGymIcePerStepCallback,
EndTruckSequence,
- sub_80EA3E4,
- PerStepCallback_806A07C
+ SecretBasePerStepCallback,
+ CrackedFloorPerStepCallback
};
// they are in pairs but declared as 1D array
-static const struct MetatileOffset gUnknown_08510368[] =
+static const struct PacifidlogMetatileOffsets sHalfSubmergedBridgeMetatileOffsets[] =
{
- { 0, 0,0x259}, { 0, 1,0x261},
- { 0, -1,0x259}, { 0, 0,0x261},
- { 0, 0,0x252}, { 1, 0,0x253},
- { -1, 0,0x252}, { 0, 0,0x253}
+ { 0, 0, 0x259}, { 0, 1, 0x261},
+ { 0, -1, 0x259}, { 0, 0, 0x261},
+ { 0, 0, 0x252}, { 1, 0, 0x253},
+ { -1, 0, 0x252}, { 0, 0, 0x253}
};
-static const struct MetatileOffset gUnknown_08510388[] =
+static const struct PacifidlogMetatileOffsets sFullySubmergedBridgeMetatileOffsets[] =
{
- { 0, 0,0x25A}, { 0, 1,0x262},
- { 0, -1,0x25A}, { 0, 0,0x262},
- { 0, 0,0x254}, { 1, 0,0x255},
- { -1, 0,0x254}, { 0, 0,0x255}
+ { 0, 0, 0x25A}, { 0, 1, 0x262},
+ { 0, -1, 0x25A}, { 0, 0, 0x262},
+ { 0, 0, 0x254}, { 1, 0, 0x255},
+ { -1, 0, 0x254}, { 0, 0, 0x255}
};
-static const struct MetatileOffset gUnknown_085103A8[] =
+static const struct PacifidlogMetatileOffsets sFloatingBridgeMetatileOffsets[] =
{
- { 0, 0,0x258}, { 0, 1,0x260},
- { 0, -1,0x258}, { 0, 0,0x260},
- { 0, 0,0x250}, { 1, 0,0x251},
- { -1, 0,0x250}, { 0, 0,0x251}
+ { 0, 0, 0x258}, { 0, 1, 0x260},
+ { 0, -1, 0x258}, { 0, 0, 0x260},
+ { 0, 0, 0x250}, { 1, 0, 0x251},
+ { -1, 0, 0x250}, { 0, 0, 0x251}
};
-static const u16 gUnknown_085103C8[] =
+// Each element corresponds to a y coordinate row in the sootopolis gym 1F map.
+static const u16 sSootopolisGymIceRowVars[] =
{
0,
0,
@@ -104,13 +103,12 @@ static const u16 gUnknown_085103C8[] =
0
};
-static const u16 gUnknown_085103FC[] = {0xe8, 0xeb, 0xea, 0xe9};
+static const u16 sMuddySlopeMetatiles[] = {0xe8, 0xeb, 0xea, 0xe9};
-// code
static void Task_RunPerStepCallback(u8 taskId)
{
int idx = gTasks[taskId].data[0];
- gUnknown_08510348[idx](taskId);
+ sPerStepCallbacks[idx](taskId);
}
#define tState data[0]
@@ -159,14 +157,12 @@ void SetUpFieldTasks(void)
u8 taskId = CreateTask(Task_RunPerStepCallback, 0x50);
gTasks[taskId].data[0] = 0;
}
+
if (!FuncIsActiveTask(Task_MuddySlope))
- {
CreateTask(Task_MuddySlope, 0x50);
- }
+
if (!FuncIsActiveTask(Task_RunTimeBasedEvents))
- {
CreateTask(Task_RunTimeBasedEvents, 0x50);
- }
}
void ActivatePerStepCallback(u8 callbackId)
@@ -180,7 +176,7 @@ void ActivatePerStepCallback(u8 callbackId)
for (i = 0; i < 16; i++)
data[i] = 0;
- if (callbackId >= ARRAY_COUNT(gUnknown_08510348))
+ if (callbackId >= ARRAY_COUNT(sPerStepCallbacks))
{
data[0] = 0;
}
@@ -215,7 +211,7 @@ static void DummyPerStepCallback(u8 taskId)
}
-static const struct MetatileOffset *sub_809DA30(const struct MetatileOffset *offsets, u16 metatileBehavior)
+static const struct PacifidlogMetatileOffsets *GetPacifidlogBridgeMetatileOffsets(const struct PacifidlogMetatileOffsets *offsets, u16 metatileBehavior)
{
if (MetatileBehavior_IsPacifilogVerticalLog1(metatileBehavior))
return &offsets[0 * 2];
@@ -229,38 +225,37 @@ static const struct MetatileOffset *sub_809DA30(const struct MetatileOffset *off
return NULL;
}
-static void sub_809DA88(const struct MetatileOffset *offsets, s16 x, s16 y, bool32 flag)
+static void SetPacifidlogBridgeMetatiles(const struct PacifidlogMetatileOffsets *offsets, s16 x, s16 y, bool32 redrawMap)
{
- offsets = sub_809DA30(offsets, MapGridGetMetatileBehaviorAt(x, y));
-
- if (offsets != NULL)
+ offsets = GetPacifidlogBridgeMetatileOffsets(offsets, MapGridGetMetatileBehaviorAt(x, y));
+ if (offsets)
{
MapGridSetMetatileIdAt(x + offsets[0].x, y + offsets[0].y, offsets[0].tileId);
- if (flag)
+ if (redrawMap)
CurrentMapDrawMetatileAt(x + offsets[0].x, y + offsets[0].y);
MapGridSetMetatileIdAt(x + offsets[1].x, y + offsets[1].y, offsets[1].tileId);
- if (flag)
+ if (redrawMap)
CurrentMapDrawMetatileAt(x + offsets[1].x, y + offsets[1].y);
}
}
-static void sub_809DB10(s16 x, s16 y, bool32 flag)
+static void UpdateHalfSubmergedBridgeMetatiles(s16 x, s16 y, bool32 redrawMap)
{
- sub_809DA88(gUnknown_08510368, x, y, flag);
+ SetPacifidlogBridgeMetatiles(sHalfSubmergedBridgeMetatileOffsets, x, y, redrawMap);
}
-static void sub_809DB34(s16 x, s16 y, bool32 flag)
+static void UpdateFullySubmergedBridgeMetatiles(s16 x, s16 y, bool32 redrawMap)
{
- sub_809DA88(gUnknown_08510388, x, y, flag);
+ SetPacifidlogBridgeMetatiles(sFullySubmergedBridgeMetatileOffsets, x, y, redrawMap);
}
-static void sub_809DB58(s16 x, s16 y, bool32 flag)
+static void UpdateFloatingBridgeMetatiles(s16 x, s16 y, bool32 redrawMap)
{
- sub_809DA88(gUnknown_085103A8, x, y, flag);
+ SetPacifidlogBridgeMetatiles(sFloatingBridgeMetatileOffsets, x, y, redrawMap);
}
-static bool32 sub_809DB7C(s16 x1, s16 y1, s16 x2, s16 y2)
+static bool32 StandingOnNewPacifidlogBridge(s16 x1, s16 y1, s16 x2, s16 y2)
{
u16 metatileBehavior = MapGridGetMetatileBehaviorAt(x2, y2);
@@ -287,7 +282,7 @@ static bool32 sub_809DB7C(s16 x1, s16 y1, s16 x2, s16 y2)
return TRUE;
}
-static bool32 sub_809DC18(s16 x1, s16 y1, s16 x2, s16 y2)
+static bool32 StandingOnSamePacifidlogBridge(s16 x1, s16 y1, s16 x2, s16 y2)
{
u16 metatileBehavior = MapGridGetMetatileBehaviorAt(x1, y1);
@@ -314,7 +309,7 @@ static bool32 sub_809DC18(s16 x1, s16 y1, s16 x2, s16 y2)
return TRUE;
}
-static void PerStepCallback_8069864(u8 taskId)
+static void PacifidlogBridgePerStepCallback(u8 taskId)
{
s16 *data;
s16 x, y;
@@ -325,16 +320,16 @@ static void PerStepCallback_8069864(u8 taskId)
case 0:
data[2] = x;
data[3] = y;
- sub_809DB34(x, y, TRUE);
+ UpdateFullySubmergedBridgeMetatiles(x, y, TRUE);
data[1] = 1;
break;
case 1:
if (x != data[2] || y != data[3])
{
- if (sub_809DB7C(x, y, data[2], data[3]))
+ if (StandingOnNewPacifidlogBridge(x, y, data[2], data[3]))
{
- sub_809DB10(data[2], data[3], TRUE);
- sub_809DB58(data[2], data[3], FALSE);
+ UpdateHalfSubmergedBridgeMetatiles(data[2], data[3], TRUE);
+ UpdateFloatingBridgeMetatiles(data[2], data[3], FALSE);
data[4] = data[2];
data[5] = data[3];
data[1] = 2;
@@ -345,38 +340,37 @@ static void PerStepCallback_8069864(u8 taskId)
data[4] = -1;
data[5] = -1;
}
- if (sub_809DC18(x, y, data[2], data[3]))
+
+ if (StandingOnSamePacifidlogBridge(x, y, data[2], data[3]))
{
- sub_809DB10(x, y, TRUE);
+ UpdateHalfSubmergedBridgeMetatiles(x, y, TRUE);
data[1] = 2;
data[6] = 8;
}
+
data[2] = x;
data[3] = y;
if (MetatileBehavior_IsPacifidlogLog(MapGridGetMetatileBehaviorAt(x, y)))
- {
PlaySE(SE_MIZU);
- }
}
break;
case 2:
if ((--data[6]) == 0)
{
- sub_809DB34(x, y, TRUE);
+ UpdateFullySubmergedBridgeMetatiles(x, y, TRUE);
if (data[4] != -1 && data[5] != -1)
- {
- sub_809DB58(data[4], data[5], TRUE);
- }
+ UpdateFloatingBridgeMetatiles(data[4], data[5], TRUE);
+
data[1] = 1;
}
break;
}
}
-static void sub_809DE28(s16 x, s16 y)
+static void SetLoweredForetreeBridgeMetatile(s16 x, s16 y)
{
u8 z = PlayerGetZCoord();
- if (!(z & 0x01))
+ if (!(z & 1))
{
switch (MapGridGetMetatileIdAt(x, y))
{
@@ -390,10 +384,10 @@ static void sub_809DE28(s16 x, s16 y)
}
}
-static void sub_809DE8C(s16 x, s16 y)
+static void SetNormalFortreeBridgeMetatile(s16 x, s16 y)
{
u8 z = PlayerGetZCoord();
- if (!(z & 0x01))
+ if (!(z & 1))
{
switch (MapGridGetMetatileIdAt(x, y))
{
@@ -407,7 +401,7 @@ static void sub_809DE8C(s16 x, s16 y)
}
}
-static void PerStepCallback_8069AA0(u8 taskId)
+static void FortreeBridgePerStepCallback(u8 taskId)
{
bool8 isFortreeBridgeCur;
bool8 isFortreeBridgePrev;
@@ -424,7 +418,7 @@ static void PerStepCallback_8069AA0(u8 taskId)
data[3] = y;
if (MetatileBehavior_IsFortreeBridge(MapGridGetMetatileBehaviorAt(x, y)))
{
- sub_809DE28(x, y);
+ SetLoweredForetreeBridgeMetatile(x, y);
CurrentMapDrawMetatileAt(x, y);
}
data[1] = 1;
@@ -433,36 +427,33 @@ static void PerStepCallback_8069AA0(u8 taskId)
x2 = data[2];
y2 = data[3];
if (x == x2 && y == y2)
- {
break;
- }
+
isFortreeBridgeCur = MetatileBehavior_IsFortreeBridge(MapGridGetMetatileBehaviorAt(x, y));
isFortreeBridgePrev = MetatileBehavior_IsFortreeBridge(MapGridGetMetatileBehaviorAt(x2, y2));
z = PlayerGetZCoord();
flag = 0;
if ((u8)(z & 1) == 0)
- {
flag = 1;
- }
+
if (flag && (isFortreeBridgeCur == 1 || isFortreeBridgePrev == 1))
- {
PlaySE(SE_HASHI);
- }
+
if (isFortreeBridgePrev)
{
- sub_809DE8C(x2, y2);
+ SetNormalFortreeBridgeMetatile(x2, y2);
CurrentMapDrawMetatileAt(x2, y2);
- sub_809DE28(x, y);
+ SetLoweredForetreeBridgeMetatile(x, y);
CurrentMapDrawMetatileAt(x, y);
}
+
data[4] = x2;
data[5] = y2;
data[2] = x;
data[3] = y;
if (!isFortreeBridgePrev)
- {
break;
- }
+
data[6] = 16;
data[1] = 2;
// fallthrough
@@ -479,9 +470,9 @@ static void PerStepCallback_8069AA0(u8 taskId)
case 3:
break;
case 4:
- sub_809DE28(x2, y2);
+ SetLoweredForetreeBridgeMetatile(x2, y2);
CurrentMapDrawMetatileAt(x2, y2);
- sub_809DE8C(x2, y2);
+ SetNormalFortreeBridgeMetatile(x2, y2);
case 5:
case 6:
case 7:
@@ -495,28 +486,28 @@ static void PerStepCallback_8069AA0(u8 taskId)
}
}
-static bool32 sub_809E108(s16 x, s16 y)
+static bool32 CoordInIcePuzzleRegion(s16 x, s16 y)
{
- if ((u16)(x - 3) < 11 && (u16)(y - 6) < 14 && gUnknown_085103C8[y])
+ if ((u16)(x - 3) < 11 && (u16)(y - 6) < 14 && sSootopolisGymIceRowVars[y])
return TRUE;
else
return FALSE;
}
-static void sub_809E14C(s16 x, s16 y)
+static void MarkIcePuzzleCoordVisited(s16 x, s16 y)
{
- if (sub_809E108(x, y))
- *GetVarPointer(gUnknown_085103C8[y]) |= (1 << (x - 3));
+ if (CoordInIcePuzzleRegion(x, y))
+ *GetVarPointer(sSootopolisGymIceRowVars[y]) |= (1 << (x - 3));
}
-static bool32 sub_809E184(s16 x, s16 y)
+static bool32 IsIcePuzzleCoordVisited(s16 x, s16 y)
{
u32 var;
- if (!sub_809E108(x, y))
+ if (!CoordInIcePuzzleRegion(x, y))
return FALSE;
- var = VarGet(gUnknown_085103C8[y]) << 16;
- if (((1 << 16) << (x - 3)) & var) // TODO: fix that if
+ var = VarGet(sSootopolisGymIceRowVars[y]) << 16;
+ if ((0x10000 << (x - 3)) & var) // TODO: fix that if
return TRUE;
else
return FALSE;
@@ -531,19 +522,17 @@ void SetSootopolisGymCrackedIceMetatiles(void)
{
for (y = 0; y < height; y++)
{
- if (sub_809E184(x, y) == TRUE)
- {
+ if (IsIcePuzzleCoordVisited(x, y) == TRUE)
MapGridSetMetatileIdAt(x + 7, y + 7, 0x20e);
- }
}
}
}
-static void PerStepCallback_8069DD4(u8 taskId)
+static void SootopolisGymIcePerStepCallback(u8 taskId)
{
s16 x, y;
u16 tileBehavior;
- u16 *var;
+ u16 *iceStepCount;
s16 *data = gTasks[taskId].data;
switch (data[1])
{
@@ -560,10 +549,10 @@ static void PerStepCallback_8069DD4(u8 taskId)
data[2] = x;
data[3] = y;
tileBehavior = MapGridGetMetatileBehaviorAt(x, y);
- var = GetVarPointer(VAR_ICE_STEP_COUNT);
+ iceStepCount = GetVarPointer(VAR_ICE_STEP_COUNT);
if (MetatileBehavior_IsThinIce(tileBehavior) == TRUE)
{
- (*var)++;
+ (*iceStepCount)++;
data[6] = 4;
data[1] = 2;
data[4] = x;
@@ -571,7 +560,7 @@ static void PerStepCallback_8069DD4(u8 taskId)
}
else if (MetatileBehavior_IsCrackedIce(tileBehavior) == TRUE)
{
- *var = 0;
+ *iceStepCount = 0;
data[6] = 4;
data[1] = 3;
data[4] = x;
@@ -591,7 +580,7 @@ static void PerStepCallback_8069DD4(u8 taskId)
PlaySE(SE_RU_BARI);
MapGridSetMetatileIdAt(x, y, 0x20e);
CurrentMapDrawMetatileAt(x, y);
- sub_809E14C(x - 7, y - 7);
+ MarkIcePuzzleCoordVisited(x - 7, y - 7);
data[1] = 1;
}
break;
@@ -613,10 +602,10 @@ static void PerStepCallback_8069DD4(u8 taskId)
}
}
-static void PerStepCallback_8069F64(u8 taskId)
+static void AshGrassPerStepCallback(u8 taskId)
{
s16 x, y;
- u16 *var;
+ u16 *ashGatherCount;
s16 *data = gTasks[taskId].data;
PlayerGetDestCoords(&x, &y);
if (x != data[1] || y != data[2])
@@ -626,32 +615,27 @@ static void PerStepCallback_8069F64(u8 taskId)
if (MetatileBehavior_IsAshGrass(MapGridGetMetatileBehaviorAt(x, y)))
{
if (MapGridGetMetatileIdAt(x, y) == 0x20a)
- {
StartAshFieldEffect(x, y, 0x212, 4);
- }
else
- {
StartAshFieldEffect(x, y, 0x206, 4);
- }
+
if (CheckBagHasItem(ITEM_SOOT_SACK, 1))
{
- var = GetVarPointer(VAR_ASH_GATHER_COUNT);
- if (*var < 9999)
- {
- (*var)++;
- }
+ ashGatherCount = GetVarPointer(VAR_ASH_GATHER_COUNT);
+ if (*ashGatherCount < 9999)
+ (*ashGatherCount)++;
}
}
}
}
-static void sub_809E490(s16 x, s16 y)
+static void SetCrackedFloorHoleMetatile(s16 x, s16 y)
{
MapGridSetMetatileIdAt(x, y, MapGridGetMetatileIdAt(x, y) == 0x22f ? 0x206 : 0x237);
CurrentMapDrawMetatileAt(x, y);
}
-static void PerStepCallback_806A07C(u8 taskId)
+static void CrackedFloorPerStepCallback(u8 taskId)
{
s16 x, y;
u16 behavior;
@@ -659,17 +643,14 @@ static void PerStepCallback_806A07C(u8 taskId)
PlayerGetDestCoords(&x, &y);
behavior = MapGridGetMetatileBehaviorAt(x, y);
if (data[4] != 0 && (--data[4]) == 0)
- {
- sub_809E490(data[5], data[6]);
- }
+ SetCrackedFloorHoleMetatile(data[5], data[6]);
+
if (data[7] != 0 && (--data[7]) == 0)
- {
- sub_809E490(data[8], data[9]);
- }
+ SetCrackedFloorHoleMetatile(data[8], data[9]);
+
if (MetatileBehavior_IsCrackedFloorHole(behavior))
- {
VarSet(VAR_ICE_STEP_COUNT, 0); // this var does double duty
- }
+
if ((x != data[2] || y != data[3]))
{
data[2] = x;
@@ -677,9 +658,8 @@ static void PerStepCallback_806A07C(u8 taskId)
if (MetatileBehavior_IsCrackedFloor(behavior))
{
if (GetPlayerSpeed() != 4)
- {
VarSet(VAR_ICE_STEP_COUNT, 0); // this var does double duty
- }
+
if (data[4] == 0)
{
data[4] = 3;
@@ -696,17 +676,14 @@ static void PerStepCallback_806A07C(u8 taskId)
}
}
-static void sub_809E5DC(s16 *data, s16 x, s16 y)
+static void SetMuddySlopeMetatile(s16 *data, s16 x, s16 y)
{
u16 tile;
if ((--data[0]) == 0)
- {
tile = 0xe8;
- }
else
- {
- tile = gUnknown_085103FC[data[0] / 8];
- }
+ tile = sMuddySlopeMetatiles[data[0] / 8];
+
MapGridSetMetatileIdAt(x, y, tile);
CurrentMapDrawMetatileAt(x, y);
MapGridSetMetatileIdAt(x, y, 0xe8);
@@ -716,14 +693,14 @@ static void Task_MuddySlope(u8 taskId)
{
s16 x, y, x2, y2;
int i;
- u16 mapIndices;
+ u16 mapId;
s16 *data = gTasks[taskId].data;
PlayerGetDestCoords(&x, &y);
- mapIndices = (gSaveBlock1Ptr->location.mapGroup << 8) | gSaveBlock1Ptr->location.mapNum;
+ mapId = (gSaveBlock1Ptr->location.mapGroup << 8) | gSaveBlock1Ptr->location.mapNum;
switch (data[1])
{
case 0:
- data[0] = mapIndices;
+ data[0] = mapId;
data[2] = x;
data[3] = y;
data[1] = 1;
@@ -739,7 +716,7 @@ static void Task_MuddySlope(u8 taskId)
data[3] = y;
if (MetatileBehavior_IsMuddySlope(MapGridGetMetatileBehaviorAt(x, y)))
{
- for (i=4; i<14; i+=3)
+ for (i = 4; i < 14; i += 3)
{
if (data[i] == 0)
{
@@ -753,9 +730,9 @@ static void Task_MuddySlope(u8 taskId)
}
break;
}
- if (gCamera.active && mapIndices != data[0])
+ if (gCamera.active && mapId != data[0])
{
- data[0] = mapIndices;
+ data[0] = mapId;
x2 = gCamera.x;
y2 = gCamera.y;
}
@@ -764,13 +741,14 @@ static void Task_MuddySlope(u8 taskId)
x2 = 0;
y2 = 0;
}
+
for (i = 4; i < 14; i += 3)
{
if (data[i])
{
data[i + 1] -= x2;
data[i + 2] -= y2;
- sub_809E5DC(&data[i], data[i + 1], data[i + 2]);
+ SetMuddySlopeMetatile(&data[i], data[i + 1], data[i + 2]);
}
}
}
diff --git a/src/fieldmap.c b/src/fieldmap.c
index 4efbc1234..d2ff34b1c 100644
--- a/src/fieldmap.c
+++ b/src/fieldmap.c
@@ -24,84 +24,94 @@ struct ConnectionFlags
u8 east:1;
};
-EWRAM_DATA static u16 gUnknown_02032318[0x2800] = {0};
+EWRAM_DATA static u16 gBackupMapData[MAX_MAP_DATA_SIZE] = {0};
EWRAM_DATA struct MapHeader gMapHeader = {0};
EWRAM_DATA struct Camera gCamera = {0};
-EWRAM_DATA static struct ConnectionFlags gUnknown_02037340 = {0};
+EWRAM_DATA static struct ConnectionFlags gMapConnectionFlags = {0};
EWRAM_DATA static u32 sFiller_02037344 = 0; // without this, the next file won't align properly
-struct BackupMapLayout gUnknown_03005DC0;
+struct BackupMapLayout gBackupMapLayout;
static const struct ConnectionFlags sDummyConnectionFlags = {0};
+static void InitMapLayoutData(struct MapHeader *mapHeader);
+static void InitBackupMapLayoutData(u16 *map, u16 width, u16 height);
+static void FillSouthConnection(struct MapHeader const *mapHeader, struct MapHeader const *connectedMapHeader, s32 offset);
+static void FillNorthConnection(struct MapHeader const *mapHeader, struct MapHeader const *connectedMapHeader, s32 offset);
+static void FillWestConnection(struct MapHeader const *mapHeader, struct MapHeader const *connectedMapHeader, s32 offset);
+static void FillEastConnection(struct MapHeader const *mapHeader, struct MapHeader const *connectedMapHeader, s32 offset);
+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)
{
return Overworld_GetMapHeaderByGroupAndId(connection->mapGroup, connection->mapNum);
}
-void not_trainer_hill_battle_pyramid(void)
+void InitMap(void)
{
- mapheader_copy_mapdata_with_padding(&gMapHeader);
+ InitMapLayoutData(&gMapHeader);
sub_80E8EE0(gMapHeader.events);
mapheader_run_script_with_tag_x1();
}
-void sub_8087D74(void)
+void InitMapFromSavedGame(void)
{
- mapheader_copy_mapdata_with_padding(&gMapHeader);
+ InitMapLayoutData(&gMapHeader);
sub_80E9238(0);
sub_80E8EE0(gMapHeader.events);
- mapdata_from_sav2();
+ LoadSavedMapView();
mapheader_run_script_with_tag_x1();
- UpdateTVScreensOnMap(gUnknown_03005DC0.width, gUnknown_03005DC0.height);
+ UpdateTVScreensOnMap(gBackupMapLayout.width, gBackupMapLayout.height);
}
-void battle_pyramid_map_load_related(u8 a0)
+void InitBattlePyramidMap(u8 a0)
{
- CpuFastFill(0x03ff03ff, gUnknown_02032318, sizeof(gUnknown_02032318));
- sub_81AA078(gUnknown_02032318, a0);
+ CpuFastFill(0x03ff03ff, gBackupMapData, sizeof(gBackupMapData));
+ sub_81AA078(gBackupMapData, a0);
}
-void trainer_hill_map_load_related(void)
+void InitTrainerHillMap(void)
{
- CpuFastFill(0x03ff03ff, gUnknown_02032318, sizeof(gUnknown_02032318));
- sub_81D5FB4(gUnknown_02032318);
+ CpuFastFill(0x03ff03ff, gBackupMapData, sizeof(gBackupMapData));
+ sub_81D5FB4(gBackupMapData);
}
-void mapheader_copy_mapdata_with_padding(struct MapHeader *mapHeader)
+static void InitMapLayoutData(struct MapHeader *mapHeader)
{
struct MapLayout const *mapLayout;
int width;
int height;
mapLayout = mapHeader->mapLayout;
- CpuFastFill16(0x03ff, gUnknown_02032318, sizeof(gUnknown_02032318));
- gUnknown_03005DC0.map = gUnknown_02032318;
+ CpuFastFill16(0x03ff, gBackupMapData, sizeof(gBackupMapData));
+ gBackupMapLayout.map = gBackupMapData;
width = mapLayout->width + 15;
- gUnknown_03005DC0.width = width;
+ gBackupMapLayout.width = width;
height = mapLayout->height + 14;
- gUnknown_03005DC0.height = height;
- if (width * height <= 0x2800)
+ gBackupMapLayout.height = height;
+ if (width * height <= MAX_MAP_DATA_SIZE)
{
- map_copy_with_padding(mapLayout->map, mapLayout->width, mapLayout->height);
- mapheader_copy_mapdata_of_adjacent_maps(mapHeader);
+ InitBackupMapLayoutData(mapLayout->map, mapLayout->width, mapLayout->height);
+ InitBackupMapLayoutConnections(mapHeader);
}
}
-void map_copy_with_padding(u16 *map, u16 width, u16 height)
+static void InitBackupMapLayoutData(u16 *map, u16 width, u16 height)
{
u16 *dest;
int y;
- dest = gUnknown_03005DC0.map;
- dest += gUnknown_03005DC0.width * 7 + 7;
+ dest = gBackupMapLayout.map;
+ dest += gBackupMapLayout.width * 7 + 7;
for (y = 0; y < height; y++)
{
CpuCopy16(map, dest, width * 2);
- dest += width + 0xf;
+ dest += width + 15;
map += width;
}
}
-void mapheader_copy_mapdata_of_adjacent_maps(struct MapHeader *mapHeader)
+static void InitBackupMapLayoutConnections(struct MapHeader *mapHeader)
{
int count;
struct MapConnection *connection;
@@ -111,56 +121,54 @@ void mapheader_copy_mapdata_of_adjacent_maps(struct MapHeader *mapHeader)
{
count = mapHeader->connections->count;
connection = mapHeader->connections->connections;
-
- gUnknown_02037340 = sDummyConnectionFlags;
+ gMapConnectionFlags = sDummyConnectionFlags;
for (i = 0; i < count; i++, connection++)
{
struct MapHeader const *cMap = mapconnection_get_mapheader(connection);
u32 offset = connection->offset;
-
switch (connection->direction)
{
case CONNECTION_SOUTH:
- fillSouthConnection(mapHeader, cMap, offset);
- gUnknown_02037340.south = 1;
+ FillSouthConnection(mapHeader, cMap, offset);
+ gMapConnectionFlags.south = 1;
break;
case CONNECTION_NORTH:
- fillNorthConnection(mapHeader, cMap, offset);
- gUnknown_02037340.north = 1;
+ FillNorthConnection(mapHeader, cMap, offset);
+ gMapConnectionFlags.north = 1;
break;
case CONNECTION_WEST:
- fillWestConnection(mapHeader, cMap, offset);
- gUnknown_02037340.west = 1;
+ FillWestConnection(mapHeader, cMap, offset);
+ gMapConnectionFlags.west = 1;
break;
case CONNECTION_EAST:
- fillEastConnection(mapHeader, cMap, offset);
- gUnknown_02037340.east = 1;
+ FillEastConnection(mapHeader, cMap, offset);
+ gMapConnectionFlags.east = 1;
break;
}
}
}
}
-void sub_8087F54(int x, int y, struct MapHeader const *mapHeader, int x2, int y2, int width, int height)
+static void sub_8087F54(int x, int y, struct MapHeader const *connectedMapHeader, int x2, int y2, int width, int height)
{
int i;
u16 *src;
u16 *dest;
int mapWidth;
- mapWidth = mapHeader->mapLayout->width;
- src = &mapHeader->mapLayout->map[mapWidth * y2 + x2];
- dest = &gUnknown_03005DC0.map[gUnknown_03005DC0.width * y + x];
+ mapWidth = connectedMapHeader->mapLayout->width;
+ src = &connectedMapHeader->mapLayout->map[mapWidth * y2 + x2];
+ dest = &gBackupMapLayout.map[gBackupMapLayout.width * y + x];
for (i = 0; i < height; i++)
{
CpuCopy16(src, dest, width * 2);
- dest += gUnknown_03005DC0.width;
+ dest += gBackupMapLayout.width;
src += mapWidth;
}
}
-void fillSouthConnection(struct MapHeader const *mapHeader, struct MapHeader const *connectedMapHeader, s32 offset)
+static void FillSouthConnection(struct MapHeader const *mapHeader, struct MapHeader const *connectedMapHeader, s32 offset)
{
int x, y;
int x2;
@@ -176,26 +184,26 @@ void fillSouthConnection(struct MapHeader const *mapHeader, struct MapHeader con
{
x2 = -x;
x += cWidth;
- if (x < gUnknown_03005DC0.width)
+ if (x < gBackupMapLayout.width)
{
width = x;
}
else
{
- width = gUnknown_03005DC0.width;
+ width = gBackupMapLayout.width;
}
x = 0;
}
else
{
x2 = 0;
- if (x + cWidth < gUnknown_03005DC0.width)
+ if (x + cWidth < gBackupMapLayout.width)
{
width = cWidth;
}
else
{
- width = gUnknown_03005DC0.width - x;
+ width = gBackupMapLayout.width - x;
}
}
@@ -207,7 +215,7 @@ void fillSouthConnection(struct MapHeader const *mapHeader, struct MapHeader con
}
}
-void fillNorthConnection(struct MapHeader const *mapHeader, struct MapHeader const *connectedMapHeader, s32 offset)
+static void FillNorthConnection(struct MapHeader const *mapHeader, struct MapHeader const *connectedMapHeader, s32 offset)
{
int x;
int x2, y2;
@@ -224,26 +232,26 @@ void fillNorthConnection(struct MapHeader const *mapHeader, struct MapHeader con
{
x2 = -x;
x += cWidth;
- if (x < gUnknown_03005DC0.width)
+ if (x < gBackupMapLayout.width)
{
width = x;
}
else
{
- width = gUnknown_03005DC0.width;
+ width = gBackupMapLayout.width;
}
x = 0;
}
else
{
x2 = 0;
- if (x + cWidth < gUnknown_03005DC0.width)
+ if (x + cWidth < gBackupMapLayout.width)
{
width = cWidth;
}
else
{
- width = gUnknown_03005DC0.width - x;
+ width = gBackupMapLayout.width - x;
}
}
@@ -256,7 +264,7 @@ void fillNorthConnection(struct MapHeader const *mapHeader, struct MapHeader con
}
}
-void fillWestConnection(struct MapHeader const *mapHeader, struct MapHeader const *connectedMapHeader, s32 offset)
+static void FillWestConnection(struct MapHeader const *mapHeader, struct MapHeader const *connectedMapHeader, s32 offset)
{
int y;
int x2, y2;
@@ -271,26 +279,26 @@ void fillWestConnection(struct MapHeader const *mapHeader, struct MapHeader cons
if (y < 0)
{
y2 = -y;
- if (y + cHeight < gUnknown_03005DC0.height)
+ if (y + cHeight < gBackupMapLayout.height)
{
height = y + cHeight;
}
else
{
- height = gUnknown_03005DC0.height;
+ height = gBackupMapLayout.height;
}
y = 0;
}
else
{
y2 = 0;
- if (y + cHeight < gUnknown_03005DC0.height)
+ if (y + cHeight < gBackupMapLayout.height)
{
height = cHeight;
}
else
{
- height = gUnknown_03005DC0.height - y;
+ height = gBackupMapLayout.height - y;
}
}
@@ -302,7 +310,7 @@ void fillWestConnection(struct MapHeader const *mapHeader, struct MapHeader cons
}
}
-void fillEastConnection(struct MapHeader const *mapHeader, struct MapHeader const *connectedMapHeader, s32 offset)
+static void FillEastConnection(struct MapHeader const *mapHeader, struct MapHeader const *connectedMapHeader, s32 offset)
{
int x, y;
int y2;
@@ -316,26 +324,26 @@ void fillEastConnection(struct MapHeader const *mapHeader, struct MapHeader cons
if (y < 0)
{
y2 = -y;
- if (y + cHeight < gUnknown_03005DC0.height)
+ if (y + cHeight < gBackupMapLayout.height)
{
height = y + cHeight;
}
else
{
- height = gUnknown_03005DC0.height;
+ height = gBackupMapLayout.height;
}
y = 0;
}
else
{
y2 = 0;
- if (y + cHeight < gUnknown_03005DC0.height)
+ if (y + cHeight < gBackupMapLayout.height)
{
height = cHeight;
}
else
{
- height = gUnknown_03005DC0.height - y;
+ height = gBackupMapLayout.height - y;
}
}
@@ -364,10 +372,10 @@ u8 MapGridGetZCoordAt(int x, int y)
int i;
u16 *border;
- if (x >= 0 && x < gUnknown_03005DC0.width
- && y >= 0 && y < gUnknown_03005DC0.height)
+ if (x >= 0 && x < gBackupMapLayout.width
+ && y >= 0 && y < gBackupMapLayout.height)
{
- block = gUnknown_03005DC0.map[x + gUnknown_03005DC0.width * y];
+ block = gBackupMapLayout.map[x + gBackupMapLayout.width * y];
}
else
{
@@ -392,10 +400,10 @@ u8 MapGridIsImpassableAt(int x, int y)
int i;
u16 *border;
- if (x >= 0 && x < gUnknown_03005DC0.width
- && y >= 0 && y < gUnknown_03005DC0.height)
+ if (x >= 0 && x < gBackupMapLayout.width
+ && y >= 0 && y < gBackupMapLayout.height)
{
- block = gUnknown_03005DC0.map[x + gUnknown_03005DC0.width * y];
+ block = gBackupMapLayout.map[x + gBackupMapLayout.width * y];
}
else
{
@@ -421,10 +429,10 @@ u32 MapGridGetMetatileIdAt(int x, int y)
u16 *border;
u16 block2;
- if (x >= 0 && x < gUnknown_03005DC0.width
- && y >= 0 && y < gUnknown_03005DC0.height)
+ if (x >= 0 && x < gBackupMapLayout.width
+ && y >= 0 && y < gBackupMapLayout.height)
{
- block = gUnknown_03005DC0.map[x + gUnknown_03005DC0.width * y];
+ block = gBackupMapLayout.map[x + gBackupMapLayout.width * y];
}
else
{
@@ -462,22 +470,22 @@ u8 MapGridGetMetatileLayerTypeAt(int x, int y)
void MapGridSetMetatileIdAt(int x, int y, u16 metatile)
{
int i;
- if (x >= 0 && x < gUnknown_03005DC0.width
- && y >= 0 && y < gUnknown_03005DC0.height)
+ if (x >= 0 && x < gBackupMapLayout.width
+ && y >= 0 && y < gBackupMapLayout.height)
{
- i = x + y * gUnknown_03005DC0.width;
- gUnknown_03005DC0.map[i] = (gUnknown_03005DC0.map[i] & 0xf000) | (metatile & 0xfff);
+ i = x + y * gBackupMapLayout.width;
+ gBackupMapLayout.map[i] = (gBackupMapLayout.map[i] & 0xf000) | (metatile & 0xfff);
}
}
void MapGridSetMetatileEntryAt(int x, int y, u16 metatile)
{
int i;
- if (x >= 0 && x < gUnknown_03005DC0.width
- && y >= 0 && y < gUnknown_03005DC0.height)
+ if (x >= 0 && x < gBackupMapLayout.width
+ && y >= 0 && y < gBackupMapLayout.height)
{
- i = x + gUnknown_03005DC0.width * y;
- gUnknown_03005DC0.map[i] = metatile;
+ i = x + gBackupMapLayout.width * y;
+ gBackupMapLayout.map[i] = metatile;
}
}
@@ -507,76 +515,75 @@ void save_serialize_map(void)
u16 *mapView;
int width;
mapView = gSaveBlock1Ptr->mapView;
- width = gUnknown_03005DC0.width;
+ width = gBackupMapLayout.width;
x = gSaveBlock1Ptr->pos.x;
y = gSaveBlock1Ptr->pos.y;
for (i = y; i < y + 14; i++)
{
for (j = x; j < x + 15; j++)
{
- *mapView++ = gUnknown_02032318[width * i + j];
+ *mapView++ = gBackupMapData[width * i + j];
}
}
}
-int sub_8088438(void)
+static bool32 SavedMapViewIsEmpty(void)
{
u16 i;
- u32 r2;
- r2 = 0;
+ u32 marker = 0;
+
+ // BUG: This loop extends past the bounds of the mapView array. Its size is only 0x100.
for (i = 0; i < 0x200; i++)
- {
- r2 |= gSaveBlock1Ptr->mapView[i];
- }
- if (r2 == 0)
- {
- return 1;
- }
- return 0;
+ marker |= gSaveBlock1Ptr->mapView[i];
+
+ if (marker == 0)
+ return TRUE;
+ else
+ return FALSE;
}
-void sav2_mapdata_clear(void)
+static void ClearSavedMapView(void)
{
CpuFill16(0, gSaveBlock1Ptr->mapView, sizeof(gSaveBlock1Ptr->mapView));
}
-void mapdata_from_sav2(void)
+static void LoadSavedMapView(void)
{
- u8 a0;
+ u8 yMode;
int i, j;
int x, y;
u16 *mapView;
int width;
mapView = gSaveBlock1Ptr->mapView;
- if (!sub_8088438())
+ if (!SavedMapViewIsEmpty())
{
- width = gUnknown_03005DC0.width;
+ width = gBackupMapLayout.width;
x = gSaveBlock1Ptr->pos.x;
y = gSaveBlock1Ptr->pos.y;
for (i = y; i < y + 14; i++)
{
if (i == y && i != 0)
- a0 = 0;
+ yMode = 0;
else if (i == y + 13 && i != gMapHeader.mapLayout->height - 1)
- a0 = 1;
+ yMode = 1;
else
- a0 = -1;
+ yMode = 0xFF;
for (j = x; j < x + 15; j++)
{
- if (!sub_8088BF0(&gUnknown_02032318[j + width * i], width, a0))
- gUnknown_02032318[j + width * i] = *mapView;
+ if (!SkipCopyingMetatileFromSavedMap(&gBackupMapData[j + width * i], width, yMode))
+ gBackupMapData[j + width * i] = *mapView;
mapView++;
}
}
for (j = x; j < x + 15; j++)
{
if (y != 0)
- sub_80D423C(j, y - 1);
+ FixLongGrassMetatilesWindowTop(j, y - 1);
if (i < gMapHeader.mapLayout->height - 1)
- sub_80D42B8(j, y + 13);
+ FixLongGrassMetatilesWindowBottom(j, y + 13);
}
- sav2_mapdata_clear();
+ ClearSavedMapView();
}
}
@@ -592,7 +599,7 @@ void sub_80885C4(u8 a1)
int x, y;
int i, j;
mapView = gSaveBlock1Ptr->mapView;
- width = gUnknown_03005DC0.width;
+ width = gBackupMapLayout.width;
r9 = 0;
r8 = 0;
x0 = gSaveBlock1Ptr->pos.x;
@@ -627,13 +634,13 @@ void sub_80885C4(u8 a1)
desti = width * (y + y0);
srci = (y + r8) * 15 + r9;
src = &mapView[srci + i];
- dest = &gUnknown_02032318[x0 + desti + j];
+ dest = &gBackupMapData[x0 + desti + j];
*dest = *src;
i++;
j++;
}
}
- sav2_mapdata_clear();
+ ClearSavedMapView();
}
int GetMapBorderIdAt(int x, int y)
@@ -641,12 +648,12 @@ int GetMapBorderIdAt(int x, int y)
struct MapLayout const *mapLayout;
u16 block, block2;
int i, j;
- if (x >= 0 && x < gUnknown_03005DC0.width
- && y >= 0 && y < gUnknown_03005DC0.height)
+ if (x >= 0 && x < gBackupMapLayout.width
+ && y >= 0 && y < gBackupMapLayout.height)
{
- i = gUnknown_03005DC0.width;
+ i = gBackupMapLayout.width;
i *= y;
- block = gUnknown_03005DC0.map[x + i];
+ block = gBackupMapLayout.map[x + i];
if (block == 0x3ff)
{
goto fail;
@@ -668,9 +675,9 @@ fail:
return -1;
success:
- if (x >= (gUnknown_03005DC0.width - 8))
+ if (x >= (gBackupMapLayout.width - 8))
{
- if (!gUnknown_02037340.east)
+ if (!gMapConnectionFlags.east)
{
return -1;
}
@@ -678,15 +685,15 @@ success:
}
else if (x < 7)
{
- if (!gUnknown_02037340.west)
+ if (!gMapConnectionFlags.west)
{
return -1;
}
return CONNECTION_WEST;
}
- else if (y >= (gUnknown_03005DC0.height - 7))
+ else if (y >= (gBackupMapLayout.height - 7))
{
- if (!gUnknown_02037340.south)
+ if (!gMapConnectionFlags.south)
{
return -1;
}
@@ -694,7 +701,7 @@ success:
}
else if (y < 7)
{
- if (!gUnknown_02037340.north)
+ if (!gMapConnectionFlags.north)
{
return -1;
}
@@ -891,13 +898,13 @@ void sub_8088B3C(u16 x, u16 y)
gSaveBlock1Ptr->pos.y = y - 7;
}
-void sav1_camera_get_focus_coords(u16 *x, u16 *y)
+void GetCameraFocusCoords(u16 *x, u16 *y)
{
*x = gSaveBlock1Ptr->pos.x + 7;
*y = gSaveBlock1Ptr->pos.y + 7;
}
-void SetCameraCoords(u16 x, u16 y)
+void SetPlayerCoords(u16 x, u16 y)
{
gSaveBlock1Ptr->pos.x = x;
gSaveBlock1Ptr->pos.y = y;
@@ -911,26 +918,26 @@ void GetCameraCoords(u16 *x, u16 *y)
void sub_8088B94(int x, int y, int a2)
{
- if (x >= 0 && x < gUnknown_03005DC0.width && y >= 0 && y < gUnknown_03005DC0.height)
+ if (x >= 0 && x < gBackupMapLayout.width && y >= 0 && y < gBackupMapLayout.height)
{
if (a2 != 0)
- gUnknown_03005DC0.map[x + gUnknown_03005DC0.width * y] |= 0xC00;
+ gBackupMapLayout.map[x + gBackupMapLayout.width * y] |= 0xC00;
else
- gUnknown_03005DC0.map[x + gUnknown_03005DC0.width * y] &= 0xF3FF;
+ gBackupMapLayout.map[x + gBackupMapLayout.width * y] &= 0xF3FF;
}
}
-bool8 sub_8088BF0(u16* a0, u16 a1, u8 a2)
+static bool8 SkipCopyingMetatileFromSavedMap(u16* mapMetatilePtr, u16 mapWidth, u8 yMode)
{
- if (a2 == 0xFF)
+ if (yMode == 0xFF)
return FALSE;
- if (a2 == 0)
- a0 -= a1;
+ if (yMode == 0)
+ mapMetatilePtr -= mapWidth;
else
- a0 += a1;
+ mapMetatilePtr += mapWidth;
- if (sub_80FADE4(*a0 & 0x3FF, a2) == 1)
+ if (sub_80FADE4(*mapMetatilePtr & 0x3FF, yMode) == 1)
return TRUE;
return FALSE;
}
@@ -986,7 +993,7 @@ void apply_map_tileset_palette(struct Tileset const *tileset, u16 destOffset, u1
}
else
{
- LoadCompressedPalette((u16*)tileset->palettes, destOffset, size);
+ LoadCompressedPalette((u32*)tileset->palettes, destOffset, size);
nullsub_3(destOffset, size >> 1);
}
}
diff --git a/src/fight.c b/src/fight.c
index b7ca2e87a..c924effae 100644
--- a/src/fight.c
+++ b/src/fight.c
@@ -486,8 +486,8 @@ void sub_810CF30(struct Sprite *sprite)
sprite->pos1.x = GetBattlerSpriteCoord(battler, 2);
sprite->pos1.y = GetBattlerSpriteCoord(battler, 3);
- xMod = sub_80A861C(battler, 1) / 2;
- yMod = sub_80A861C(battler, 0) / 4;
+ xMod = GetBattlerSpriteCoordAttr(battler, BATTLER_COORD_ATTR_WIDTH) / 2;
+ yMod = GetBattlerSpriteCoordAttr(battler, BATTLER_COORD_ATTR_HEIGHT) / 4;
x = Random2() % xMod;
y = Random2() % yMod;
diff --git a/src/fldeff_cut.c b/src/fldeff_cut.c
index 60887a5cc..348a1f46c 100644
--- a/src/fldeff_cut.c
+++ b/src/fldeff_cut.c
@@ -624,7 +624,7 @@ static void CutGrassSpriteCallbackEnd(struct Sprite *sprite)
ScriptContext1_SetupScript(FarawayIsland_Interior_EventScript_267EDB);
}
-void sub_80D423C(s16 x, s16 y)
+void FixLongGrassMetatilesWindowTop(s16 x, s16 y)
{
u8 metatileBehavior = MapGridGetMetatileBehaviorAt(x, y);
if (MetatileBehavior_IsLongGrass_Duplicate(metatileBehavior))
@@ -647,7 +647,7 @@ void sub_80D423C(s16 x, s16 y)
}
}
-void sub_80D42B8(s16 x, s16 y)
+void FixLongGrassMetatilesWindowBottom(s16 x, s16 y)
{
if (MapGridGetMetatileIdAt(x, y) == METATILE_ID_GRASS)
{
diff --git a/src/fldeff_flash.c b/src/fldeff_flash.c
index 69d198c84..f3bd76cbf 100644
--- a/src/fldeff_flash.c
+++ b/src/fldeff_flash.c
@@ -156,7 +156,7 @@ static bool8 sub_8137304(void)
{
u8 i;
u8 v0 = GetLastUsedWarpMapType();
- u8 v1 = Overworld_GetMapTypeOfSaveblockLocation();
+ u8 v1 = GetCurrentMapType();
for (i = 0; gUnknown_085B27C8[i].unk0; i++)
{
diff --git a/src/fldeff_misc.c b/src/fldeff_misc.c
index 9d77383ae..df4576a7f 100644
--- a/src/fldeff_misc.c
+++ b/src/fldeff_misc.c
@@ -376,7 +376,7 @@ static void sub_80F9C90(u8 taskId)
task->data[7] = GetGpuReg(REG_OFFSET_BLDCNT);
task->data[8] = GetGpuReg(REG_OFFSET_BLDY);
- SetGpuReg(REG_OFFSET_BLDCNT, 0xBF);
+ SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT1_ALL | BLDCNT_EFFECT_LIGHTEN);
SetGpuReg(REG_OFFSET_BLDY, 0x10);
break;
@@ -452,7 +452,7 @@ static void sub_80F9DFC(u8 taskId)
{
task->data[5] = 0x50;
task->data[6] = 0x51;
- SetGpuReg(REG_OFFSET_BLDCNT, 0xBF);
+ SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT1_ALL | BLDCNT_EFFECT_LIGHTEN);
SetGpuReg(REG_OFFSET_BLDY, 0x10);
}
SetGpuReg(REG_OFFSET_WIN0V, WIN_RANGE(task->data[5], task->data[6]));
@@ -1166,23 +1166,23 @@ void GetShieldToyTVDecorationInfo(void)
}
}
-bool8 sub_80FADE4(u16 arg0, u8 arg1)
+bool8 sub_80FADE4(u16 metatileId, u8 arg1)
{
if (!CurrentMapIsSecretBase())
return FALSE;
if (!arg1)
{
- if (arg0 == 0x285 || arg0 == 0x286)
+ if (metatileId == 0x285 || metatileId == 0x286)
return TRUE;
- if (arg0 == 0x237)
+ if (metatileId == 0x237)
return TRUE;
}
else
{
- if (arg0 == 0x28d)
+ if (metatileId == 0x28d)
return TRUE;
- if (arg0 == 0x23F)
+ if (metatileId == 0x23F)
return TRUE;
}
diff --git a/src/frontier_util.c b/src/frontier_util.c
index c722230cd..40b1edbe3 100644
--- a/src/frontier_util.c
+++ b/src/frontier_util.c
@@ -2407,9 +2407,9 @@ void sub_81A4C30(void)
i = gPlayerPartyCount;
LoadPlayerParty();
- sub_8076D5C();
+ SetContinueGameWarpStatusToDynamicWarp();
TrySavingData(SAVE_LINK);
- sav2_gender2_inplace_and_xFE();
+ ClearContinueGameWarpStatus2();
gPlayerPartyCount = i;
for (i = 0; i < PARTY_SIZE; i++)
diff --git a/src/ghost.c b/src/ghost.c
index a755783b7..d26a4d1cb 100644
--- a/src/ghost.c
+++ b/src/ghost.c
@@ -800,7 +800,7 @@ void sub_81123C4(u8 taskId)
task->data[10] = gBattleAnimArgs[0];
baseX = GetBattlerSpriteCoord(gBattleAnimAttacker, 2);
- baseY = sub_80A861C(gBattleAnimAttacker, 3);
+ baseY = GetBattlerSpriteCoordAttr(gBattleAnimAttacker, BATTLER_COORD_ATTR_BOTTOM);
if (!IsContest())
{
for (battler = 0; battler < 4; battler++)
@@ -813,7 +813,7 @@ void sub_81123C4(u8 taskId)
if (spriteId != MAX_SPRITES)
{
x = GetBattlerSpriteCoord(battler, 2);
- y = sub_80A861C(battler, 3);
+ y = GetBattlerSpriteCoordAttr(battler, BATTLER_COORD_ATTR_BOTTOM);
gSprites[spriteId].data[0] = baseX << 4;
gSprites[spriteId].data[1] = baseY << 4;
gSprites[spriteId].data[2] = ((x - baseX) << 4) / gBattleAnimArgs[1];
@@ -1168,7 +1168,7 @@ void sub_8112C6C(u8 taskId)
task->data[1] = 16;
task->data[9] = GetBattlerSpriteCoord(gBattleAnimAttacker, 2);
task->data[10] = GetBattlerYCoordWithElevation(gBattleAnimAttacker);
- task->data[11] = (sub_80A861C(gBattleAnimAttacker, 1) / 2) + 8;
+ task->data[11] = (GetBattlerSpriteCoordAttr(gBattleAnimAttacker, BATTLER_COORD_ATTR_WIDTH) / 2) + 8;
task->data[7] = 0;
task->data[5] = GetBattlerSpriteBGPriority(gBattleAnimAttacker);
task->data[6] = GetBattlerSpriteSubpriority(gBattleAnimAttacker) - 2;
diff --git a/src/graphics.c b/src/graphics.c
index c0deb2883..10efd5043 100644
--- a/src/graphics.c
+++ b/src/graphics.c
@@ -897,9 +897,9 @@ const u32 gBattleStatMask6_Pal[] = INCBIN_U32("graphics/battle_anims/masks/stat6
const u32 gBattleStatMask7_Pal[] = INCBIN_U32("graphics/battle_anims/masks/stat7.gbapal.lz");
const u32 gBattleStatMask8_Pal[] = INCBIN_U32("graphics/battle_anims/masks/stat8.gbapal.lz");
-const u8 gUnknown_08C2DC68[] = INCBIN_U8("graphics/battle_anims/masks/cure_bubbles.4bpp.lz");
-const u16 gUnknown_08C2DDA4[] = INCBIN_U16("graphics/battle_anims/masks/cure_bubbles.gbapal.lz");
-const u8 gUnknown_08C2DDC4[] = INCBIN_U8("graphics/battle_anims/masks/cure_bubbles.bin.lz");
+const u32 gCureBubblesGfx[] = INCBIN_U32("graphics/battle_anims/masks/cure_bubbles.4bpp.lz");
+const u32 gCureBubblesPal[] = INCBIN_U32("graphics/battle_anims/masks/cure_bubbles.gbapal.lz");
+const u32 gCureBubblesTilemap[] = INCBIN_U32("graphics/battle_anims/masks/cure_bubbles.bin.lz");
const u32 gBattleAnimSpritePalette_245[] = INCBIN_U32("graphics/battle_anims/sprites/245.gbapal.lz");
const u32 gBattleAnimSpriteSheet_245[] = INCBIN_U32("graphics/battle_anims/sprites/245.4bpp.lz");
diff --git a/src/hall_of_fame.c b/src/hall_of_fame.c
index b973798f6..3f217b782 100644
--- a/src/hall_of_fame.c
+++ b/src/hall_of_fame.c
@@ -355,8 +355,8 @@ static bool8 InitHallOfFameScreen(void)
gMain.state++;
break;
case 2:
- SetGpuReg(REG_OFFSET_BLDCNT, 0x3F42);
- SetGpuReg(REG_OFFSET_BLDALPHA, 0x710);
+ SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT1_BG1 | BLDCNT_EFFECT_BLEND | BLDCNT_TGT2_ALL);
+ SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(16, 7));
SetGpuReg(REG_OFFSET_BLDY, 0);
sub_8174FAC();
sHofGfxPtr->state = 0;
@@ -817,8 +817,8 @@ void CB2_DoHallOfFamePC(void)
{
u8 taskId, i;
- SetGpuReg(REG_OFFSET_BLDCNT, 0x3F42);
- SetGpuReg(REG_OFFSET_BLDALPHA, 0x710);
+ SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT1_BG1 | BLDCNT_EFFECT_BLEND | BLDCNT_TGT2_ALL);
+ SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(16, 7));
SetGpuReg(REG_OFFSET_BLDY, 0);
taskId = CreateTask(Task_HofPC_CopySaveData, 0);
@@ -1299,7 +1299,7 @@ static bool8 sub_8175024(void)
CopyBgTilemapBufferToVram(3);
break;
case 3:
- sub_81971D0();
+ InitStandardTextBoxWindows();
sub_8197200();
break;
case 4:
diff --git a/src/ice.c b/src/ice.c
index 05ca630d5..77b3700ef 100644
--- a/src/ice.c
+++ b/src/ice.c
@@ -1599,12 +1599,12 @@ bool8 GenerateHailParticle(u8 a, u8 b, u8 taskId, u8 c)
switch (unk)
{
case 0:
- battlerX -= sub_80A861C(battler, 1) / 6;
- battlerY -= sub_80A861C(battler, 0) / 6;
+ battlerX -= GetBattlerSpriteCoordAttr(battler, BATTLER_COORD_ATTR_WIDTH) / 6;
+ battlerY -= GetBattlerSpriteCoordAttr(battler, BATTLER_COORD_ATTR_HEIGHT) / 6;
break;
case 1:
- battlerX += sub_80A861C(battler, 1) / 6;
- battlerY += sub_80A861C(battler, 0) / 6;
+ battlerX += GetBattlerSpriteCoordAttr(battler, BATTLER_COORD_ATTR_WIDTH) / 6;
+ battlerY += GetBattlerSpriteCoordAttr(battler, BATTLER_COORD_ATTR_HEIGHT) / 6;
break;
}
}
@@ -1692,7 +1692,7 @@ bool8 GenerateHailParticle(u8 a, u8 b, u8 taskId, u8 c)
_0810CA60:\n\
adds r0, r5, 0\n\
movs r1, 0x1\n\
- bl sub_80A861C\n\
+ bl GetBattlerSpriteCoordAttr\n\
lsls r0, 16\n\
asrs r0, 16\n\
movs r1, 0x6\n\
@@ -1704,7 +1704,7 @@ _0810CA60:\n\
lsrs r7, r1, 16\n\
adds r0, r5, 0\n\
movs r1, 0\n\
- bl sub_80A861C\n\
+ bl GetBattlerSpriteCoordAttr\n\
lsls r0, 16\n\
asrs r0, 16\n\
movs r1, 0x6\n\
@@ -1716,7 +1716,7 @@ _0810CA60:\n\
_0810CA96:\n\
adds r0, r5, 0\n\
movs r1, 0x1\n\
- bl sub_80A861C\n\
+ bl GetBattlerSpriteCoordAttr\n\
lsls r0, 16\n\
asrs r0, 16\n\
movs r1, 0x6\n\
@@ -1728,7 +1728,7 @@ _0810CA96:\n\
lsrs r7, r1, 16\n\
adds r0, r5, 0\n\
movs r1, 0\n\
- bl sub_80A861C\n\
+ bl GetBattlerSpriteCoordAttr\n\
lsls r0, 16\n\
asrs r0, 16\n\
movs r1, 0x6\n\
diff --git a/src/item_use.c b/src/item_use.c
index f82071a17..6a7f6cec0 100755
--- a/src/item_use.c
+++ b/src/item_use.c
@@ -32,6 +32,7 @@
#include "task.h"
#include "text.h"
#include "constants/bg_event_constants.h"
+#include "constants/event_objects.h"
#include "constants/flags.h"
#include "constants/items.h"
#include "constants/songs.h"
@@ -570,15 +571,15 @@ u8 sub_80FD9B0(s16 itemX, s16 itemY)
void sub_80FDA24(u8 direction)
{
- EventObjectClearHeldMovementIfFinished(&gEventObjects[GetEventObjectIdByLocalIdAndMap(0xFF, 0, 0)]);
- EventObjectClearHeldMovement(&gEventObjects[GetEventObjectIdByLocalIdAndMap(0xFF, 0, 0)]);
- UnfreezeEventObject(&gEventObjects[GetEventObjectIdByLocalIdAndMap(0xFF, 0, 0)]);
+ EventObjectClearHeldMovementIfFinished(&gEventObjects[GetEventObjectIdByLocalIdAndMap(EVENT_OBJ_ID_PLAYER, 0, 0)]);
+ EventObjectClearHeldMovement(&gEventObjects[GetEventObjectIdByLocalIdAndMap(EVENT_OBJ_ID_PLAYER, 0, 0)]);
+ UnfreezeEventObject(&gEventObjects[GetEventObjectIdByLocalIdAndMap(EVENT_OBJ_ID_PLAYER, 0, 0)]);
PlayerTurnInPlace(direction);
}
void sub_80FDA94(u8 taskId)
{
- if (EventObjectCheckHeldMovementStatus(&gEventObjects[GetEventObjectIdByLocalIdAndMap(0xFF, 0, 0)]) == TRUE)
+ if (EventObjectCheckHeldMovementStatus(&gEventObjects[GetEventObjectIdByLocalIdAndMap(EVENT_OBJ_ID_PLAYER, 0, 0)]) == TRUE)
DisplayItemMessageOnField(taskId, gText_ItemFinderNearby, sub_80FD5CC);
}
@@ -586,7 +587,7 @@ void sub_80FDADC(u8 taskId)
{
s16 *data = gTasks[taskId].data;
- if (EventObjectCheckHeldMovementStatus(&gEventObjects[GetEventObjectIdByLocalIdAndMap(0xFF, 0, 0)]) == TRUE
+ if (EventObjectCheckHeldMovementStatus(&gEventObjects[GetEventObjectIdByLocalIdAndMap(EVENT_OBJ_ID_PLAYER, 0, 0)]) == TRUE
|| data[2] == FALSE)
{
sub_80FDA24(gUnknown_085920E4[data[5]]);
@@ -627,7 +628,7 @@ void sub_80FDC00(u8 taskId)
{
if (!gPaletteFade.active)
{
- overworld_free_bg_tilemaps();
+ CleanupOverworldWindowsAndTilemaps();
OpenPokeblockCase(0, CB2_ReturnToField);
DestroyTask(taskId);
}
@@ -665,7 +666,7 @@ void ItemUseOutOfBattle_PowderJar(u8 taskId)
void sub_80FDD10(u8 taskId)
{
- if (IsPlayerFacingPlantedBerryTree() == TRUE)
+ if (IsPlayerFacingEmptyBerryTreePatch() == TRUE)
{
gUnknown_0203A0F4 = sub_80FDD74;
gFieldCallback = MapPostLoadHook_UseItem;
diff --git a/src/link.c b/src/link.c
index 1128ea436..bec9dddc6 100644
--- a/src/link.c
+++ b/src/link.c
@@ -1080,7 +1080,7 @@ bool8 sub_800A4D8(u8 a0)
return FALSE;
}
-bool8 sub_800A520(void)
+bool8 IsLinkTaskFinished(void)
{
if (gWirelessCommType == TRUE)
{
diff --git a/src/link_rfu.c b/src/link_rfu.c
index f67e11792..0f997591f 100644
--- a/src/link_rfu.c
+++ b/src/link_rfu.c
@@ -4123,7 +4123,7 @@ void sub_8010AAC(u8 taskId)
gTasks[taskId].data[0]++;
break;
case 5:
- if (sub_800A520() && GetBlockReceivedStatus() & 1)
+ if (IsLinkTaskFinished() && GetBlockReceivedStatus() & 1)
{
CpuFill16(0, gBlockRecvBuffer, sizeof(struct UnkRfuStruct_8010A14));
ResetBlockReceivedFlag(0);
@@ -4162,7 +4162,7 @@ void sub_8010D0C(u8 taskId)
}
break;
case 1:
- if (sub_800A520())
+ if (IsLinkTaskFinished())
gTasks[taskId].data[0]++;
break;
case 2:
diff --git a/src/load_save.c b/src/load_save.c
index 963626428..a7593d007 100644
--- a/src/load_save.c
+++ b/src/load_save.c
@@ -1,13 +1,14 @@
#include "global.h"
-#include "gba/flash_internal.h"
+#include "alloc.h"
+#include "item.h"
#include "load_save.h"
#include "main.h"
+#include "overworld.h"
#include "pokemon.h"
#include "pokemon_storage_system.h"
#include "random.h"
-#include "alloc.h"
-#include "item.h"
-#include "overworld.h"
+#include "save_location.h"
+#include "gba/flash_internal.h"
#include "decoration_inventory.h"
static void ApplyNewEncryptionKeyToAllEncryptedData(u32 encryptionKey);
@@ -136,30 +137,30 @@ void MoveSaveBlocks_ResetHeap(void)
gSaveBlock2Ptr->encryptionKey = encryptionKey;
}
-u32 GetSecretBase2Field_9(void)
+u32 UseContinueGameWarp(void)
{
- return gSaveBlock2Ptr->specialSaveWarp & 1;
+ return gSaveBlock2Ptr->specialSaveWarpFlags & CONTINUE_GAME_WARP;
}
-void ClearSecretBase2Field_9(void)
+void ClearContinueGameWarpStatus(void)
{
- gSaveBlock2Ptr->specialSaveWarp &= ~1;
+ gSaveBlock2Ptr->specialSaveWarpFlags &= ~CONTINUE_GAME_WARP;
}
-void SetSecretBase2Field_9(void)
+void SetContinueGameWarpStatus(void)
{
- gSaveBlock2Ptr->specialSaveWarp |= 1;
+ gSaveBlock2Ptr->specialSaveWarpFlags |= CONTINUE_GAME_WARP;
}
-void sub_8076D5C(void)
+void SetContinueGameWarpStatusToDynamicWarp(void)
{
- sub_8084FAC(0);
- gSaveBlock2Ptr->specialSaveWarp |= 1;
+ SetContinueGameWarpToDynamicWarp(0);
+ gSaveBlock2Ptr->specialSaveWarpFlags |= CONTINUE_GAME_WARP;
}
-void sav2_gender2_inplace_and_xFE(void)
+void ClearContinueGameWarpStatus2(void)
{
- gSaveBlock2Ptr->specialSaveWarp &= ~1;
+ gSaveBlock2Ptr->specialSaveWarpFlags &= ~CONTINUE_GAME_WARP;
}
void SavePlayerParty(void)
diff --git a/src/mail.c b/src/mail.c
index 7b096ed00..45e96e85e 100644
--- a/src/mail.c
+++ b/src/mail.c
@@ -170,29 +170,29 @@ static const u16 sUnknown_0859F2B0[][2] = {
static const struct MailGraphics sUnknown_0859F2B8[] = {
{
- gMailPalette_Orange, gMailTiles_Orange, gMailTilemap_Orange, 0x02c0, 0x0000, 0x294a, 0x6739
+ gMailPalette_Orange, gMailTiles_Orange, gMailTilemap_Orange, 0x02c0, 0, 0x294a, 0x6739
}, {
- gMailPalette_Harbor, gMailTiles_Harbor, gMailTilemap_Harbor, 0x02e0, 0x0000, 0x7fff, 0x4631
+ gMailPalette_Harbor, gMailTiles_Harbor, gMailTilemap_Harbor, 0x02e0, 0, 0x7fff, 0x4631
}, {
- gMailPalette_Glitter, gMailTiles_Glitter, gMailTilemap_Glitter, 0x0400, 0x0000, 0x294a, 0x6739
+ gMailPalette_Glitter, gMailTiles_Glitter, gMailTilemap_Glitter, 0x0400, 0, 0x294a, 0x6739
}, {
- gMailPalette_Mech, gMailTiles_Mech, gMailTilemap_Mech, 0x01e0, 0x0000, 0x7fff, 0x4631
+ gMailPalette_Mech, gMailTiles_Mech, gMailTilemap_Mech, 0x01e0, 0, 0x7fff, 0x4631
}, {
- gMailPalette_Wood, gMailTiles_Wood, gMailTilemap_Wood, 0x02e0, 0x0000, 0x7fff, 0x4631
+ gMailPalette_Wood, gMailTiles_Wood, gMailTilemap_Wood, 0x02e0, 0, 0x7fff, 0x4631
}, {
- gMailPalette_Wave, gMailTiles_Wave, gMailTilemap_Wave, 0x0300, 0x0000, 0x294a, 0x6739
+ gMailPalette_Wave, gMailTiles_Wave, gMailTilemap_Wave, 0x0300, 0, 0x294a, 0x6739
}, {
- gMailPalette_Bead, gMailTiles_Bead, gMailTilemap_Bead, 0x0140, 0x0000, 0x7fff, 0x4631
+ gMailPalette_Bead, gMailTiles_Bead, gMailTilemap_Bead, 0x0140, 0, 0x7fff, 0x4631
}, {
- gMailPalette_Shadow, gMailTiles_Shadow, gMailTilemap_Shadow, 0x0300, 0x0000, 0x7fff, 0x4631
+ gMailPalette_Shadow, gMailTiles_Shadow, gMailTilemap_Shadow, 0x0300, 0, 0x7fff, 0x4631
}, {
- gMailPalette_Tropic, gMailTiles_Tropic, gMailTilemap_Tropic, 0x0220, 0x0000, 0x294a, 0x6739
+ gMailPalette_Tropic, gMailTiles_Tropic, gMailTilemap_Tropic, 0x0220, 0, 0x294a, 0x6739
}, {
- gMailPalette_Dream, gMailTiles_Dream, gMailTilemap_Dream, 0x0340, 0x0000, 0x294a, 0x6739
+ gMailPalette_Dream, gMailTiles_Dream, gMailTilemap_Dream, 0x0340, 0, 0x294a, 0x6739
}, {
- gMailPalette_Fab, gMailTiles_Fab, gMailTilemap_Fab, 0x02a0, 0x0000, 0x294a, 0x6739
+ gMailPalette_Fab, gMailTiles_Fab, gMailTilemap_Fab, 0x02a0, 0, 0x294a, 0x6739
}, {
- gMailPalette_Retro, gMailTiles_Retro, gMailTilemap_Retro, 0x0520, 0x0000, 0x294a, 0x6739
+ gMailPalette_Retro, gMailTiles_Retro, gMailTilemap_Retro, 0x0520, 0, 0x294a, 0x6739
}
};
@@ -306,7 +306,7 @@ static bool8 MailReadBuildGraphics(void)
case 0:
SetVBlankCallback(NULL);
ScanlineEffect_Stop();
- SetGpuReg(REG_OFFSET_DISPCNT, 0x0000);
+ SetGpuReg(REG_OFFSET_DISPCNT, 0);
break;
case 1:
CpuFill16(0, (void *)OAM, OAM_SIZE);
@@ -323,16 +323,16 @@ static bool8 MailReadBuildGraphics(void)
case 5:
FreeAllSpritePalettes();
reset_temp_tile_data_buffers();
- SetGpuReg(REG_OFFSET_BG0HOFS, 0x0000);
- SetGpuReg(REG_OFFSET_BG0VOFS, 0x0000);
- SetGpuReg(REG_OFFSET_BG1HOFS, 0x0000);
- SetGpuReg(REG_OFFSET_BG1VOFS, 0x0000);
- SetGpuReg(REG_OFFSET_BG2VOFS, 0x0000);
- SetGpuReg(REG_OFFSET_BG2HOFS, 0x0000);
- SetGpuReg(REG_OFFSET_BG3HOFS, 0x0000);
- SetGpuReg(REG_OFFSET_BG3VOFS, 0x0000);
- SetGpuReg(REG_OFFSET_BLDCNT, 0x0000);
- SetGpuReg(REG_OFFSET_BLDALPHA, 0x0000);
+ SetGpuReg(REG_OFFSET_BG0HOFS, 0);
+ SetGpuReg(REG_OFFSET_BG0VOFS, 0);
+ SetGpuReg(REG_OFFSET_BG1HOFS, 0);
+ SetGpuReg(REG_OFFSET_BG1VOFS, 0);
+ SetGpuReg(REG_OFFSET_BG2VOFS, 0);
+ SetGpuReg(REG_OFFSET_BG2HOFS, 0);
+ SetGpuReg(REG_OFFSET_BG3HOFS, 0);
+ SetGpuReg(REG_OFFSET_BG3VOFS, 0);
+ SetGpuReg(REG_OFFSET_BLDCNT, 0);
+ SetGpuReg(REG_OFFSET_BLDALPHA, 0);
break;
case 6:
ResetBgsAndClearDma3BusyFlags(0);
diff --git a/src/menu.c b/src/menu.c
index e0e5eb4eb..f1b35b42e 100644
--- a/src/menu.c
+++ b/src/menu.c
@@ -48,8 +48,8 @@ struct Menu
bool8 APressMuted;
};
-static EWRAM_DATA u8 gStartMenuWindowId = 0;
-static EWRAM_DATA u8 gUnknown_0203CD8D = 0;
+static EWRAM_DATA u8 sStartMenuWindowId = 0;
+static EWRAM_DATA u8 sMapNamePopupWindowId = 0;
static EWRAM_DATA struct Menu gUnknown_0203CD90 = {0};
static EWRAM_DATA u16 gUnknown_0203CD9C = 0;
static EWRAM_DATA u8 gUnknown_0203CD9E = 0;
@@ -63,7 +63,7 @@ static EWRAM_DATA void *gUnknown_0203CDAC[0x20] = {NULL};
const u16 gUnknown_0860F074[] = INCBIN_U16("graphics/interface/860F074.gbapal");
static const u8 gUnknown_0860F094[] = { 8, 4, 1 };
-static const struct WindowTemplate gUnknown_0860F098[] =
+static const struct WindowTemplate sStandardTextBox_WindowTemplates[] =
{
{
.bg = 0,
@@ -77,7 +77,7 @@ static const struct WindowTemplate gUnknown_0860F098[] =
DUMMY_WIN_TEMPLATE
};
-static const struct WindowTemplate gUnknown_0860F0A8 =
+static const struct WindowTemplate sYesNo_WindowTemplates =
{
.bg = 0,
.tilemapLeft = 21,
@@ -137,14 +137,14 @@ extern u8 sub_8199134(s8, s8);
extern void sub_8198C78(void);
extern void task_free_buf_after_copying_tile_data_to_vram(u8 taskId);
-void sub_81971D0(void)
+void InitStandardTextBoxWindows(void)
{
- InitWindows(gUnknown_0860F098);
- gStartMenuWindowId = 0xFF;
- gUnknown_0203CD8D = 0xFF;
+ InitWindows(sStandardTextBox_WindowTemplates);
+ sStartMenuWindowId = 0xFF;
+ sMapNamePopupWindowId = 0xFF;
}
-void sub_81971F4(void)
+void FreeAllOverworldWindowBuffers(void)
{
FreeAllWindowBuffers();
}
@@ -460,12 +460,12 @@ void DisplayItemMessageOnField(u8 taskId, const u8 *string, TaskFunc callback)
void DisplayYesNoMenu(void)
{
- CreateYesNoMenu(&gUnknown_0860F0A8, STD_WINDOW_BASE_TILE_NUM, STD_WINDOW_PALETTE_NUM, 0);
+ CreateYesNoMenu(&sYesNo_WindowTemplates, STD_WINDOW_BASE_TILE_NUM, STD_WINDOW_PALETTE_NUM, 0);
}
void sub_8197948(u8 initialCursorPos)
{
- CreateYesNoMenu(&gUnknown_0860F0A8, STD_WINDOW_BASE_TILE_NUM, STD_WINDOW_PALETTE_NUM, initialCursorPos);
+ CreateYesNoMenu(&sYesNo_WindowTemplates, STD_WINDOW_BASE_TILE_NUM, STD_WINDOW_PALETTE_NUM, initialCursorPos);
}
u32 GetPlayerTextSpeed(void)
@@ -486,22 +486,22 @@ u8 GetPlayerTextSpeedDelay(void)
u8 sub_81979C4(u8 a1)
{
- if (gStartMenuWindowId == 0xFF)
- gStartMenuWindowId = sub_8198AA4(0, 0x16, 1, 7, (a1 * 2) + 2, 0xF, 0x139);
- return gStartMenuWindowId;
+ if (sStartMenuWindowId == 0xFF)
+ sStartMenuWindowId = sub_8198AA4(0, 0x16, 1, 7, (a1 * 2) + 2, 0xF, 0x139);
+ return sStartMenuWindowId;
}
u8 GetStartMenuWindowId(void)
{
- return gStartMenuWindowId;
+ return sStartMenuWindowId;
}
void RemoveStartMenuWindow(void)
{
- if (gStartMenuWindowId != 0xFF)
+ if (sStartMenuWindowId != 0xFF)
{
- RemoveWindow(gStartMenuWindowId);
- gStartMenuWindowId = 0xFF;
+ RemoveWindow(sStartMenuWindowId);
+ sStartMenuWindowId = 0xFF;
}
}
@@ -517,22 +517,22 @@ u16 sub_8197A38(void)
u8 AddMapNamePopUpWindow(void)
{
- if (gUnknown_0203CD8D == 0xFF)
- gUnknown_0203CD8D = sub_8198AA4(0, 1, 1, 10, 3, 14, 0x107);
- return gUnknown_0203CD8D;
+ if (sMapNamePopupWindowId == 0xFF)
+ sMapNamePopupWindowId = sub_8198AA4(0, 1, 1, 10, 3, 14, 0x107);
+ return sMapNamePopupWindowId;
}
u8 GetMapNamePopUpWindowId(void)
{
- return gUnknown_0203CD8D;
+ return sMapNamePopupWindowId;
}
void RemoveMapNamePopUpWindow(void)
{
- if (gUnknown_0203CD8D != 0xFF)
+ if (sMapNamePopupWindowId != 0xFF)
{
- RemoveWindow(gUnknown_0203CD8D);
- gUnknown_0203CD8D = 0xFF;
+ RemoveWindow(sMapNamePopupWindowId);
+ sMapNamePopupWindowId = 0xFF;
}
}
@@ -1934,8 +1934,8 @@ void sub_8199D98(void)
void sub_8199DF0(u32 bg, u8 a1, int a2, int a3)
{
- int temp = (!GetBgAttribute(bg, 4)) ? 0x20 : 0x40;
- void *addr = (void *)((GetBgAttribute(bg, 1) * 0x4000) + (GetBgAttribute(bg, 10) + a2) * temp);
+ int temp = (!GetBgAttribute(bg, BG_ATTR_PALETTEMODE)) ? 0x20 : 0x40;
+ void *addr = (void *)((GetBgAttribute(bg, BG_ATTR_CHARBASEINDEX) * 0x4000) + (GetBgAttribute(bg, BG_ATTR_BASETILE) + a2) * temp);
RequestDma3Fill(a1 << 24 | a1 << 16 | a1 << 8 | a1, addr + VRAM, a3 * temp, 1);
}
diff --git a/src/mirage_tower.c b/src/mirage_tower.c
index d002e1de4..a8dd5d9de 100644
--- a/src/mirage_tower.c
+++ b/src/mirage_tower.c
@@ -509,7 +509,7 @@ static void InitMirageTowerShake(u8 taskId)
{
case 0:
FreeAllWindowBuffers();
- SetBgAttribute(0, BG_CTRL_ATTR_MOSAIC, 2);
+ SetBgAttribute(0, BG_ATTR_PRIORITY, 2);
gTasks[taskId].data[0]++;
break;
case 1:
@@ -624,8 +624,8 @@ static void DoMirageTowerDisintegration(u8 taskId)
case 6:
SetGpuRegBits(REG_OFFSET_BG2CNT, BGCNT_PRIORITY(2));
SetGpuRegBits(REG_OFFSET_BG0CNT, BGCNT_PRIORITY(0));
- SetBgAttribute(0, BG_CTRL_ATTR_MOSAIC, 0);
- sub_81971D0();
+ SetBgAttribute(0, BG_ATTR_PRIORITY, 0);
+ InitStandardTextBoxWindows();
break;
case 7:
ShowBg(0);
diff --git a/src/mossdeep_gym.c b/src/mossdeep_gym.c
index 07920fe4c..d8adbe0c6 100644
--- a/src/mossdeep_gym.c
+++ b/src/mossdeep_gym.c
@@ -5,6 +5,7 @@
#include "mossdeep_gym.h"
#include "script_movement.h"
#include "constants/event_object_movement_constants.h"
+#include "constants/event_objects.h"
// Movement scripts.
extern const u8 gUnknown_08612698[];
@@ -52,7 +53,7 @@ void FinishMossdeepGymTiles(void)
if (gUnknown_0203CE50 != NULL)
FREE_AND_SET_NULL(gUnknown_0203CE50);
- id = GetEventObjectIdByLocalIdAndMap(0xFF, 0, 0);
+ id = GetEventObjectIdByLocalIdAndMap(EVENT_OBJ_ID_PLAYER, 0, 0);
EventObjectClearHeldMovementIfFinished(&gEventObjects[id]);
sub_80D338C();
}
diff --git a/src/naming_screen.c b/src/naming_screen.c
index e6d146b85..c310ceb9f 100644
--- a/src/naming_screen.c
+++ b/src/naming_screen.c
@@ -362,7 +362,7 @@ static void NamingScreen_InitBGs(void)
ChangeBgX(3, 0, 0);
ChangeBgY(3, 0, 0);
- sub_81971D0();
+ InitStandardTextBoxWindows();
sub_8197200();
for (i = 0; i < 5; i++)
diff --git a/src/new_game.c b/src/new_game.c
index 4804b28f3..8ecd48bc7 100644
--- a/src/new_game.c
+++ b/src/new_game.c
@@ -27,6 +27,7 @@
#include "pokedex.h"
#include "apprentice.h"
#include "frontier_util.h"
+#include "constants/maps.h"
extern u16 gSaveFileStatus;
extern u8 gUnknown_030060B0;
@@ -135,7 +136,7 @@ static void ClearFrontierRecord(void)
static void WarpToTruck(void)
{
- Overworld_SetWarpDestination(25, 40, -1, -1, -1); // inside of truck
+ SetWarpDestination(MAP_GROUP(INSIDE_OF_TRUCK), MAP_NUM(INSIDE_OF_TRUCK), -1, -1, -1);
WarpIntoMap();
}
@@ -168,7 +169,7 @@ void NewGameInitData(void)
ClearFrontierRecord();
ClearSav1();
ClearMailData();
- gSaveBlock2Ptr->specialSaveWarp = 0;
+ gSaveBlock2Ptr->specialSaveWarpFlags = 0;
gSaveBlock2Ptr->field_A8 = 0;
InitPlayerTrainerId();
PlayTimeCounter_Reset();
diff --git a/src/overworld.c b/src/overworld.c
index ea4b44cbf..ef424cff8 100644
--- a/src/overworld.c
+++ b/src/overworld.c
@@ -57,8 +57,10 @@
#include "constants/abilities.h"
#include "constants/map_types.h"
#include "constants/maps.h"
+#include "constants/region_map_sections.h"
#include "constants/songs.h"
#include "constants/species.h"
+#include "constants/weather.h"
// event scripts
extern const u8 EventScript_WhiteOut[];
@@ -100,7 +102,6 @@ extern void ApplyNewEncryptionKeyToWord(u32 *word, u32 newKey);
extern void mapheader_run_script_with_tag_x5(void);
extern void ResetFieldTasksArgs(void);
extern void sub_80A0A2C(void);
-extern void not_trainer_hill_battle_pyramid(void);
extern void apply_map_tileset2_palette(const struct MapLayout *);
extern void copy_map_tileset2_to_vram_2(const struct MapLayout *);
extern void RestartWildEncounterImmunitySteps(void);
@@ -114,7 +115,6 @@ extern void c2_change_map(void);
extern void sub_81D5DF8(void);
extern void sub_80EB218(void);
extern void sub_80AF3C8(void);
-extern void sub_81971F4(void);
extern void sub_808B578(void);
extern void sub_80AF314(void);
extern void sub_80AF214(void);
@@ -125,16 +125,12 @@ extern void sub_80AF168(void);
extern void sub_80AF3C8(void);
extern void ExecuteTruckSequence(void);
extern void sub_80A0A38(void);
-extern void trainer_hill_map_load_related(void);
-extern void sub_8087D74(void);
-extern void battle_pyramid_map_load_related(u8);
extern void WriteFlashScanlineEffectBuffer(u8);
-extern void sub_80E9238(u8);
extern void sub_81AA2F8(void);
extern void sub_8195E10(void);
extern void sub_80EDB44(void);
extern void sub_81D64C0(void);
-extern void sub_8098128(void);
+extern void InitFieldMessageBox(void);
extern void copy_map_tileset1_to_vram(const struct MapLayout *);
extern void copy_map_tileset2_to_vram(const struct MapLayout *);
extern void FieldUpdateBgTilemapScroll(void);
@@ -148,7 +144,6 @@ extern void SetUpFieldTasks(void);
extern void ShowStartMenu(void);
extern void sub_80AEE84(void);
extern void mapldr_default(void);
-extern void sub_8088B3C(u16, u16);
extern bool32 sub_800F0B8(void);
extern bool32 sub_8009F3C(void);
extern void sub_8010198(void);
@@ -339,7 +334,7 @@ const struct UCoords32 gDirectionToVectors[] =
},
};
-static const struct BgTemplate gUnknown_08339DAC[] =
+static const struct BgTemplate sOverworldBgTemplates[] =
{
{
.bg = 0,
@@ -433,7 +428,7 @@ void DoWhiteOut(void)
SetMoney(&gSaveBlock1Ptr->money, GetMoney(&gSaveBlock1Ptr->money) / 2);
HealPlayerParty();
Overworld_ResetStateAfterWhiteOut();
- Overworld_SetWarpDestToLastHealLoc();
+ SetWarpDestinationToLastHealLocation();
WarpIntoMap();
}
@@ -615,7 +610,7 @@ void ApplyCurrentWarp(void)
gFixedHoleWarp = sDummyWarpData;
}
-void set_warp2_warp3_to_neg_1(void)
+static void ClearDiveAndHoleWarps(void)
{
gFixedDiveWarp = sDummyWarpData;
gFixedHoleWarp = sDummyWarpData;
@@ -696,68 +691,66 @@ void WarpIntoMap(void)
SetPlayerCoordsFromWarp();
}
-void Overworld_SetWarpDestination(s8 mapGroup, s8 mapNum, s8 warpId, s8 x, s8 y)
+void SetWarpDestination(s8 mapGroup, s8 mapNum, s8 warpId, s8 x, s8 y)
{
SetWarpData(&sWarpDestination, mapGroup, mapNum, warpId, x, y);
}
-void warp1_set_2(s8 mapGroup, s8 mapNum, s8 warpId)
+void SetWarpDestinationToMapWarp(s8 mapGroup, s8 mapNum, s8 warpId)
{
- Overworld_SetWarpDestination(mapGroup, mapNum, warpId, -1, -1);
+ SetWarpDestination(mapGroup, mapNum, warpId, -1, -1);
}
-void saved_warp2_set(s32 unused, s8 mapGroup, s8 mapNum, s8 warpId)
+void SetDynamicWarp(s32 unused, s8 mapGroup, s8 mapNum, s8 warpId)
{
- SetWarpData(&gSaveBlock1Ptr->warp2, mapGroup, mapNum, warpId, gSaveBlock1Ptr->pos.x, gSaveBlock1Ptr->pos.y);
+ SetWarpData(&gSaveBlock1Ptr->dynamicWarp, mapGroup, mapNum, warpId, gSaveBlock1Ptr->pos.x, gSaveBlock1Ptr->pos.y);
}
-void saved_warp2_set_2(s32 unused, s8 mapGroup, s8 mapNum, s8 warpId, s8 x, s8 y)
+void SetDynamicWarpWithCoords(s32 unused, s8 mapGroup, s8 mapNum, s8 warpId, s8 x, s8 y)
{
- SetWarpData(&gSaveBlock1Ptr->warp2, mapGroup, mapNum, warpId, x, y);
+ SetWarpData(&gSaveBlock1Ptr->dynamicWarp, mapGroup, mapNum, warpId, x, y);
}
-void copy_saved_warp2_bank_and_enter_x_to_warp1(u8 unused)
+void SetWarpDestinationToDynamicWarp(u8 unusedWarpId)
{
- sWarpDestination = gSaveBlock1Ptr->warp2;
+ sWarpDestination = gSaveBlock1Ptr->dynamicWarp;
}
-void sub_8084CCC(u8 a1)
+void SetWarpDestinationToHealLocation(u8 healLocationId)
{
- const struct HealLocation *warp = GetHealLocation(a1);
-
+ const struct HealLocation *warp = GetHealLocation(healLocationId);
if (warp)
- Overworld_SetWarpDestination(warp->group, warp->map, -1, warp->x, warp->y);
+ SetWarpDestination(warp->group, warp->map, -1, warp->x, warp->y);
}
-void Overworld_SetWarpDestToLastHealLoc(void)
+void SetWarpDestinationToLastHealLocation(void)
{
sWarpDestination = gSaveBlock1Ptr->lastHealLocation;
}
-void Overworld_SetHealLocationWarp(u8 healLocationId)
+void SetLastHealLocationWarp(u8 healLocationId)
{
const struct HealLocation *healLocation = GetHealLocation(healLocationId);
-
- if (healLocation != NULL)
+ if (healLocation)
SetWarpData(&gSaveBlock1Ptr->lastHealLocation, healLocation->group, healLocation->map, -1, healLocation->x, healLocation->y);
}
-void sub_8084D5C(s16 a1, s16 a2)
+void UpdateEscapeWarp(s16 x, s16 y)
{
- u8 currMapType = Overworld_GetMapTypeOfSaveblockLocation();
+ u8 currMapType = GetCurrentMapType();
u8 destMapType = GetMapTypeByGroupAndId(sWarpDestination.mapGroup, sWarpDestination.mapNum);
if (is_map_type_1_2_3_5_or_6(currMapType) && is_map_type_1_2_3_5_or_6(destMapType) != TRUE)
- sub_8084DD4(gSaveBlock1Ptr->location.mapGroup, gSaveBlock1Ptr->location.mapNum, -1, a1 - 7, a2 - 6);
+ SetEscapeWarp(gSaveBlock1Ptr->location.mapGroup, gSaveBlock1Ptr->location.mapNum, -1, x - 7, y - 6);
}
-void sub_8084DD4(s8 mapGroup, s8 mapNum, s8 warpId, s8 x, s8 y)
+void SetEscapeWarp(s8 mapGroup, s8 mapNum, s8 warpId, s8 x, s8 y)
{
- SetWarpData(&gSaveBlock1Ptr->warp4, mapGroup, mapNum, warpId, x, y);
+ SetWarpData(&gSaveBlock1Ptr->escapeWarp, mapGroup, mapNum, warpId, x, y);
}
-void sub_8084E14(void)
+void SetWarpDestinationToEscapeWarp(void)
{
- sWarpDestination = gSaveBlock1Ptr->warp4;
+ sWarpDestination = gSaveBlock1Ptr->escapeWarp;
}
void SetFixedDiveWarp(s8 mapGroup, s8 mapNum, s8 warpId, s8 x, s8 y)
@@ -765,7 +758,7 @@ void SetFixedDiveWarp(s8 mapGroup, s8 mapNum, s8 warpId, s8 x, s8 y)
SetWarpData(&gFixedDiveWarp, mapGroup, mapNum, warpId, x, y);
}
-static void SetFixedDiveWarpAsDestination(void)
+static void SetWarpDestinationToDiveWarp(void)
{
sWarpDestination = gFixedDiveWarp;
}
@@ -775,34 +768,34 @@ void SetFixedHoleWarp(s8 mapGroup, s8 mapNum, s8 warpId, s8 x, s8 y)
SetWarpData(&gFixedHoleWarp, mapGroup, mapNum, warpId, x, y);
}
-void SetFixedHoleWarpAsDestination(s16 x, s16 y)
+void SetWarpDestinationToFixedHoleWarp(s16 x, s16 y)
{
if (IsDummyWarp(&gFixedHoleWarp) == TRUE)
sWarpDestination = gLastUsedWarp;
else
- Overworld_SetWarpDestination(gFixedHoleWarp.mapGroup, gFixedHoleWarp.mapNum, -1, x, y);
+ SetWarpDestination(gFixedHoleWarp.mapGroup, gFixedHoleWarp.mapNum, -1, x, y);
}
-void warp1_set_to_sav1w(void)
+static void SetWarpDestinationToContinueGameWarp(void)
{
- sWarpDestination = gSaveBlock1Ptr->warp1;
+ sWarpDestination = gSaveBlock1Ptr->continueGameWarp;
}
-void sub_8084F2C(s8 mapGroup, s8 mapNum, s8 warpId, s8 x, s8 y)
+void SetContinueGameWarp(s8 mapGroup, s8 mapNum, s8 warpId, s8 x, s8 y)
{
- SetWarpData(&gSaveBlock1Ptr->warp1, mapGroup, mapNum, warpId, x, y);
+ SetWarpData(&gSaveBlock1Ptr->continueGameWarp, mapGroup, mapNum, warpId, x, y);
}
-void sub_8084F6C(u8 a1)
+void SetContinueGameWarpToHealLocation(u8 healLocationId)
{
- const struct HealLocation *warp = GetHealLocation(a1);
+ const struct HealLocation *warp = GetHealLocation(healLocationId);
if (warp)
- SetWarpData(&gSaveBlock1Ptr->warp1, warp->group, warp->map, -1, warp->x, warp->y);
+ SetWarpData(&gSaveBlock1Ptr->continueGameWarp, warp->group, warp->map, -1, warp->x, warp->y);
}
-void sub_8084FAC(int unused)
+void SetContinueGameWarpToDynamicWarp(int unused)
{
- gSaveBlock1Ptr->warp1 = gSaveBlock1Ptr->warp2;
+ gSaveBlock1Ptr->continueGameWarp = gSaveBlock1Ptr->dynamicWarp;
}
const struct MapConnection *GetMapConnection(u8 dir)
@@ -827,14 +820,14 @@ static bool8 SetDiveWarp(u8 dir, u16 x, u16 y)
if (connection != NULL)
{
- Overworld_SetWarpDestination(connection->mapGroup, connection->mapNum, -1, x, y);
+ SetWarpDestination(connection->mapGroup, connection->mapNum, -1, x, y);
}
else
{
mapheader_run_script_with_tag_x6();
if (IsDummyWarp(&gFixedDiveWarp))
return FALSE;
- SetFixedDiveWarpAsDestination();
+ SetWarpDestinationToDiveWarp();
}
return TRUE;
}
@@ -853,7 +846,7 @@ void mliX_load_map(u8 mapGroup, u8 mapNum)
{
s32 paletteIndex;
- Overworld_SetWarpDestination(mapGroup, mapNum, -1, -1, -1);
+ SetWarpDestination(mapGroup, mapNum, -1, -1, -1);
if (gMapHeader.regionMapSectionId != 0x3A)
sub_8085810();
@@ -871,7 +864,7 @@ void mliX_load_map(u8 mapGroup, u8 mapNum)
SetDefaultFlashLevel();
Overworld_ClearSavedMusic();
mapheader_run_script_with_tag_x3();
- not_trainer_hill_battle_pyramid();
+ InitMap();
copy_map_tileset2_to_vram_2(gMapHeader.mapLayout);
apply_map_tileset2_palette(gMapHeader.mapLayout);
@@ -885,7 +878,7 @@ void mliX_load_map(u8 mapGroup, u8 mapNum)
ResetFieldTasksArgs();
mapheader_run_script_with_tag_x5();
- if (gMapHeader.regionMapSectionId != 0x3A || gMapHeader.regionMapSectionId != sLastMapSectionId)
+ if (gMapHeader.regionMapSectionId != MAPSEC_BATTLE_FRONTIER || gMapHeader.regionMapSectionId != sLastMapSectionId)
ShowMapNamePopup();
}
@@ -926,15 +919,15 @@ static void mli0_load_map(u32 a1)
UpdateLocationHistoryForRoamer();
RoamerMoveToOtherLocationSet();
if (gMapHeader.mapLayoutId == 0x169)
- battle_pyramid_map_load_related(0);
+ InitBattlePyramidMap(0);
else if (InTrainerHill())
- trainer_hill_map_load_related();
+ InitTrainerHillMap();
else
- not_trainer_hill_battle_pyramid();
+ InitMap();
if (a1 != 1 && indoors)
{
- UpdateTVScreensOnMap(gUnknown_03005DC0.width, gUnknown_03005DC0.height);
+ UpdateTVScreensOnMap(gBackupMapLayout.width, gBackupMapLayout.height);
sub_80E9238(1);
}
}
@@ -964,7 +957,7 @@ void StoreInitialPlayerAvatarState(void)
static struct InitialPlayerAvatarState *GetInitialPlayerAvatarState(void)
{
struct InitialPlayerAvatarState playerStruct;
- u8 mapType = Overworld_GetMapTypeOfSaveblockLocation();
+ u8 mapType = GetCurrentMapType();
u16 metatileBehavior = GetCenterScreenMetatileBehavior();
u8 transitionFlags = GetAdjustedInitialTransitionFlags(&gInitialPlayerAvatarState, metatileBehavior, mapType);
playerStruct.transitionFlags = transitionFlags;
@@ -1051,7 +1044,7 @@ u8 Overworld_GetFlashLevel(void)
return gSaveBlock1Ptr->flashLevel;
}
-void sub_8085524(u16 mapLayoutId)
+void SetCurrentMapLayout(u16 mapLayoutId)
{
gSaveBlock1Ptr->mapLayoutId = mapLayoutId;
gMapHeader.mapLayout = GetMapLayout();
@@ -1160,11 +1153,11 @@ u16 GetCurrLocationDefaultMusic(void)
// Play the desert music only when the sandstorm is active on Route 111.
if (gSaveBlock1Ptr->location.mapGroup == MAP_GROUP(ROUTE111)
&& gSaveBlock1Ptr->location.mapNum == MAP_NUM(ROUTE111)
- && GetSav1Weather() == 8)
+ && GetSav1Weather() == WEATHER_SANDSTORM)
return MUS_ASHROAD;
music = GetLocationMusic(&gSaveBlock1Ptr->location);
- if (music != 0x7FFF)
+ if (music != MUS_ROUTE_118)
{
return music;
}
@@ -1180,7 +1173,7 @@ u16 GetCurrLocationDefaultMusic(void)
u16 GetWarpDestinationMusic(void)
{
u16 music = GetLocationMusic(&sWarpDestination);
- if (music != 0x7FFF)
+ if (music != MUS_ROUTE_118)
{
return music;
}
@@ -1207,7 +1200,7 @@ void Overworld_PlaySpecialMapMusic(void)
{
if (gSaveBlock1Ptr->savedMusic)
music = gSaveBlock1Ptr->savedMusic;
- else if (Overworld_GetMapTypeOfSaveblockLocation() == MAP_TYPE_UNDERWATER)
+ else if (GetCurrentMapType() == MAP_TYPE_UNDERWATER)
music = MUS_DEEPDEEP;
else if (TestPlayerAvatarFlags(PLAYER_AVATAR_FLAG_SURFING))
music = MUS_NAMINORI;
@@ -1285,8 +1278,8 @@ void TryFadeOutOldMapMusic(void)
&& gSaveBlock1Ptr->location.mapNum == MAP_NUM(SOOTOPOLIS_CITY)
&& sWarpDestination.mapGroup == MAP_GROUP(SOOTOPOLIS_CITY)
&& sWarpDestination.mapNum == MAP_NUM(SOOTOPOLIS_CITY)
- && sWarpDestination.x == 0x1D
- && sWarpDestination.y == 0x35)
+ && sWarpDestination.x == 29
+ && sWarpDestination.y == 53)
return;
FadeOutMapMusic(GetMapMusicFadeoutSpeed());
}
@@ -1388,7 +1381,7 @@ u8 GetMapTypeByWarpData(struct WarpData *warp)
return GetMapTypeByGroupAndId(warp->mapGroup, warp->mapNum);
}
-u8 Overworld_GetMapTypeOfSaveblockLocation(void)
+u8 GetCurrentMapType(void)
{
return GetMapTypeByWarpData(&gSaveBlock1Ptr->location);
}
@@ -1430,12 +1423,12 @@ bool8 Overworld_MapTypeIsIndoors(u8 mapType)
return FALSE;
}
-u8 sav1_saved_warp2_map_get_name(void)
+u8 GetSavedWarpRegionMapSectionId(void)
{
- return Overworld_GetMapHeaderByGroupAndId(gSaveBlock1Ptr->warp2.mapGroup, gSaveBlock1Ptr->warp2.mapNum)->regionMapSectionId;
+ return Overworld_GetMapHeaderByGroupAndId(gSaveBlock1Ptr->dynamicWarp.mapGroup, gSaveBlock1Ptr->dynamicWarp.mapNum)->regionMapSectionId;
}
-u8 sav1_map_get_name(void)
+u8 GetCurrentRegionMapSectionId(void)
{
return Overworld_GetMapHeaderByGroupAndId(gSaveBlock1Ptr->location.mapGroup, gSaveBlock1Ptr->location.mapNum)->regionMapSectionId;
}
@@ -1445,30 +1438,30 @@ u8 GetCurrentMapBattleScene(void)
return Overworld_GetMapHeaderByGroupAndId(gSaveBlock1Ptr->location.mapGroup, gSaveBlock1Ptr->location.mapNum)->battleType;
}
-static void overworld_bg_setup(void)
+static void InitOverworldBgs(void)
{
- InitBgsFromTemplates(0, gUnknown_08339DAC, ARRAY_COUNT(gUnknown_08339DAC));
- SetBgAttribute(1, BG_CTRL_ATTR_PALETTEMODE, 1);
- SetBgAttribute(2, BG_CTRL_ATTR_PALETTEMODE, 1);
- SetBgAttribute(3, BG_CTRL_ATTR_PALETTEMODE, 1);
- gBGTilemapBuffers2 = AllocZeroed(0x800);
- gBGTilemapBuffers1 = AllocZeroed(0x800);
- gBGTilemapBuffers3 = AllocZeroed(0x800);
+ InitBgsFromTemplates(0, sOverworldBgTemplates, ARRAY_COUNT(sOverworldBgTemplates));
+ SetBgAttribute(1, BG_ATTR_MOSAIC, 1);
+ SetBgAttribute(2, BG_ATTR_MOSAIC, 1);
+ SetBgAttribute(3, BG_ATTR_MOSAIC, 1);
+ gBGTilemapBuffers2 = AllocZeroed(BG_SCREEN_SIZE);
+ gBGTilemapBuffers1 = AllocZeroed(BG_SCREEN_SIZE);
+ gBGTilemapBuffers3 = AllocZeroed(BG_SCREEN_SIZE);
SetBgTilemapBuffer(1, gBGTilemapBuffers2);
SetBgTilemapBuffer(2, gBGTilemapBuffers1);
SetBgTilemapBuffer(3, gBGTilemapBuffers3);
- sub_81971D0();
+ InitStandardTextBoxWindows();
}
-void overworld_free_bg_tilemaps(void)
+void CleanupOverworldWindowsAndTilemaps(void)
{
ClearMirageTowerPulseBlendEffect();
- sub_81971F4();
- if (gBGTilemapBuffers3 != NULL)
+ FreeAllOverworldWindowBuffers();
+ if (gBGTilemapBuffers3)
FREE_AND_SET_NULL(gBGTilemapBuffers3);
- if (gBGTilemapBuffers1 != NULL)
+ if (gBGTilemapBuffers1)
FREE_AND_SET_NULL(gBGTilemapBuffers1);
- if (gBGTilemapBuffers2 != NULL)
+ if (gBGTilemapBuffers2)
FREE_AND_SET_NULL(gBGTilemapBuffers2);
}
@@ -1762,7 +1755,7 @@ void CB2_ContinueSavedGame(void)
sub_81A3908();
LoadSaveblockMapHeader();
- set_warp2_warp3_to_neg_1();
+ ClearDiveAndHoleWarps();
trainerHillMapId = GetCurrentTrainerHillMapId();
if (gMapHeader.mapLayoutId == 0x169)
sub_81AA2F8();
@@ -1775,20 +1768,20 @@ void CB2_ContinueSavedGame(void)
DoTimeBasedEvents();
sub_8084788();
if (gMapHeader.mapLayoutId == 0x169)
- battle_pyramid_map_load_related(1);
+ InitBattlePyramidMap(1);
else if (trainerHillMapId != 0)
- trainer_hill_map_load_related();
+ InitTrainerHillMap();
else
- sub_8087D74();
+ InitMapFromSavedGame();
PlayTimeCounter_Start();
ScriptContext1_Init();
ScriptContext2_Disable();
sub_8195E10();
- if (GetSecretBase2Field_9() == 1)
+ if (UseContinueGameWarp() == TRUE)
{
- ClearSecretBase2Field_9();
- warp1_set_to_sav1w();
+ ClearContinueGameWarpStatus();
+ SetWarpDestinationToContinueGameWarp();
WarpIntoMap();
sub_80EDB44();
SetMainCallback2(CB2_LoadMap);
@@ -1861,7 +1854,7 @@ static bool32 map_loading_iteration_3(u8 *state)
switch (*state)
{
case 0:
- overworld_bg_setup();
+ InitOverworldBgs();
ScriptContext1_Init();
ScriptContext2_Disable();
sub_80867C8();
@@ -2147,8 +2140,8 @@ static void InitOverworldGraphicsRegisters(void)
clear_scheduled_bg_copies_to_vram();
reset_temp_tile_data_buffers();
SetGpuReg(REG_OFFSET_MOSAIC, 0);
- SetGpuReg(REG_OFFSET_WININ, 0x1F1F);
- SetGpuReg(REG_OFFSET_WINOUT, 0x101);
+ SetGpuReg(REG_OFFSET_WININ, WININ_WIN0_BG_ALL | WININ_WIN0_OBJ | WININ_WIN1_BG_ALL | WININ_WIN1_OBJ);
+ SetGpuReg(REG_OFFSET_WINOUT, WINOUT_WIN01_BG0 | WINOUT_WINOBJ_BG0);
SetGpuReg(REG_OFFSET_WIN0H, 0xFF);
SetGpuReg(REG_OFFSET_WIN0V, 0xFF);
SetGpuReg(REG_OFFSET_WIN1H, 0xFFFF);
@@ -2156,7 +2149,7 @@ static void InitOverworldGraphicsRegisters(void)
SetGpuReg(REG_OFFSET_BLDCNT, gUnknown_82EC7C4[1] | gUnknown_82EC7C4[2] | gUnknown_82EC7C4[3]
| BLDCNT_TGT2_OBJ | BLDCNT_EFFECT_BLEND);
SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(13, 7));
- overworld_bg_setup();
+ InitOverworldBgs();
schedule_bg_copy_tilemap_to_vram(1);
schedule_bg_copy_tilemap_to_vram(2);
schedule_bg_copy_tilemap_to_vram(3);
@@ -2174,7 +2167,7 @@ static void InitOverworldGraphicsRegisters(void)
ShowBg(1);
ShowBg(2);
ShowBg(3);
- sub_8098128();
+ InitFieldMessageBox();
}
static void sub_8086988(u32 a1)
@@ -2217,7 +2210,7 @@ static void mli4_mapscripts_and_other(void)
gTotalCameraPixelOffsetX = 0;
gTotalCameraPixelOffsetY = 0;
ResetEventObjects();
- sav1_camera_get_focus_coords(&x, &y);
+ GetCameraFocusCoords(&x, &y);
player = GetInitialPlayerAvatarState();
InitPlayerAvatar(x, y, player->direction, gSaveBlock2Ptr->playerGender);
SetPlayerAvatarTransitionFlags(player->transitionFlags);
@@ -2252,7 +2245,7 @@ static void sub_8086AC8(void)
static void sub_8086AE4(void)
{
u16 x, y;
- sav1_camera_get_focus_coords(&x, &y);
+ GetCameraFocusCoords(&x, &y);
sub_8088B3C(x + gUnknown_03005DB4, y);
}
@@ -2261,7 +2254,7 @@ static void sub_8086B14(void)
u16 i;
u16 x, y;
- sav1_camera_get_focus_coords(&x, &y);
+ GetCameraFocusCoords(&x, &y);
x -= gUnknown_03005DB4;
for (i = 0; i < gFieldLinkPlayerCount; i++)
diff --git a/src/palette.c b/src/palette.c
index 1e92f4bba..deb07b066 100644
--- a/src/palette.c
+++ b/src/palette.c
@@ -77,7 +77,7 @@ static const u8 sRoundedDownGrayscaleMap[] = {
31, 31
};
-void LoadCompressedPalette(const void *src, u16 offset, u16 size)
+void LoadCompressedPalette(const u32 *src, u16 offset, u16 size)
{
LZDecompressWram(src, gPaletteDecompressionBuffer);
CpuCopy16(gPaletteDecompressionBuffer, gPlttBufferUnfaded + offset, size);
diff --git a/src/party_menu.c b/src/party_menu.c
index ac26caa5d..00432e6db 100755
--- a/src/party_menu.c
+++ b/src/party_menu.c
@@ -4579,7 +4579,7 @@ static void CursorCb_Register(u8 taskId)
u16 species = GetMonData(&gPlayerParty[gUnknown_0203CEC8.unk9], MON_DATA_SPECIES);
u8 obedience = GetMonData(&gPlayerParty[gUnknown_0203CEC8.unk9], MON_DATA_OBEDIENCE);
- switch (sub_807A8D0(*(u32 *)sub_800F7DC() /* dirty cast, probably needs to be changed */, species2, species, obedience))
+ switch (sub_807A8D0(*(struct UnkLinkRfuStruct_02022B14Substruct *)sub_800F7DC(), species2, species, obedience))
{
case 1:
StringExpandPlaceholders(gStringVar4, gText_PkmnCantBeTradedNow);
@@ -4605,7 +4605,7 @@ static void CursorCb_Trade1(u8 taskId)
u16 species2 = GetMonData(&gPlayerParty[gUnknown_0203CEC8.unk9], MON_DATA_SPECIES2);
u16 species = GetMonData(&gPlayerParty[gUnknown_0203CEC8.unk9], MON_DATA_SPECIES);
u8 obedience = GetMonData(&gPlayerParty[gUnknown_0203CEC8.unk9], MON_DATA_OBEDIENCE);
- u32 stringId = sub_807A7E0(*(u32 *)sub_800F7DC() /* dirty cast, probably needs to be changed */, *(u32 *)&gUnknown_02022C38 /* dirty cast, probably needs to be changed */, species2, gUnknown_02022C3C, gUnknown_02022C3E, species, obedience);
+ u32 stringId = sub_807A7E0(*(struct UnkLinkRfuStruct_02022B14Substruct *)sub_800F7DC(), gUnknown_02022C38, species2, gUnknown_02022C3C, gUnknown_02022C3E, species, obedience);
if (stringId != 0)
{
@@ -4721,7 +4721,7 @@ static void CursorCb_FieldMove(u8 taskId)
gUnknown_0203CEC4->data[0] = fieldMove;
break;
case FIELD_MOVE_DIG:
- mapHeader = Overworld_GetMapHeaderByGroupAndId(gSaveBlock1Ptr->warp4.mapGroup, gSaveBlock1Ptr->warp4.mapNum);
+ mapHeader = Overworld_GetMapHeaderByGroupAndId(gSaveBlock1Ptr->escapeWarp.mapGroup, gSaveBlock1Ptr->escapeWarp.mapNum);
sub_81245DC(gStringVar1, mapHeader->regionMapSectionId);
StringExpandPlaceholders(gStringVar4, gText_EscapeFromHere);
sub_81B5674(taskId);
@@ -7249,7 +7249,7 @@ static void sub_81B9424(u8 taskId)
{
if (!gPaletteFade.active)
{
- overworld_free_bg_tilemaps();
+ CleanupOverworldWindowsAndTilemaps();
InitPartyMenu(2, 0, 11, 0, 0, sub_81B1370, sub_81B9470);
DestroyTask(taskId);
}
@@ -7276,7 +7276,7 @@ static void sub_81B94D0(u8 taskId)
{
if (!gPaletteFade.active)
{
- overworld_free_bg_tilemaps();
+ CleanupOverworldWindowsAndTilemaps();
InitPartyMenu(3, 0, 11, 0, 0, sub_81B1370, sub_81B9390);
DestroyTask(taskId);
}
@@ -7293,7 +7293,7 @@ static void sub_81B953C(u8 taskId)
{
if (!gPaletteFade.active)
{
- overworld_free_bg_tilemaps();
+ CleanupOverworldWindowsAndTilemaps();
InitPartyMenu(7, 0, 11, 0, 0, sub_81B1370, sub_81B9588);
DestroyTask(taskId);
}
@@ -7336,7 +7336,7 @@ static void sub_81B9640(u8 taskId)
{
if (!gPaletteFade.active)
{
- overworld_free_bg_tilemaps();
+ CleanupOverworldWindowsAndTilemaps();
InitPartyMenu(12, 0, 0, 0, 0, sub_81B1370, sub_81B9390);
DestroyTask(taskId);
}
diff --git a/src/player_pc.c b/src/player_pc.c
index b7380cee3..474cecaf5 100644
--- a/src/player_pc.c
+++ b/src/player_pc.c
@@ -491,7 +491,7 @@ static void Task_ItemStorage_Deposit(u8 taskId)
{
if (!gPaletteFade.active)
{
- overworld_free_bg_tilemaps();
+ CleanupOverworldWindowsAndTilemaps();
sub_81AAC14();
DestroyTask(taskId);
}
@@ -723,7 +723,7 @@ static void Mailbox_FadeAndReadMail(u8 taskId)
if (!gPaletteFade.active)
{
sub_81D1EC0();
- overworld_free_bg_tilemaps();
+ CleanupOverworldWindowsAndTilemaps();
ReadMail(&(gSaveBlock1Ptr->mail[playerPCItemPageInfo.itemsAbove + 6 + playerPCItemPageInfo.cursorPos]), Mailbox_ReturnToFieldFromReadMail, TRUE);
DestroyTask(taskId);
}
@@ -823,7 +823,7 @@ static void Mailbox_DoGiveMailPokeMenu(u8 taskId)
if (!gPaletteFade.active)
{
sub_81D1EC0();
- overworld_free_bg_tilemaps();
+ CleanupOverworldWindowsAndTilemaps();
sub_81B8448();
DestroyTask(taskId);
}
diff --git a/src/pokeball.c b/src/pokeball.c
index baa165649..1938d888d 100644
--- a/src/pokeball.c
+++ b/src/pokeball.c
@@ -1170,7 +1170,7 @@ static void sub_80768F0(struct Sprite *sprite)
sprite->callback = SpriteCallbackDummy;
}
-static void DestroySpriteAndFreeResources_(struct Sprite *sprite)
+static void Unref_DestroySpriteAndFreeResources(struct Sprite *sprite)
{
DestroySpriteAndFreeResources(sprite);
}
diff --git a/src/pokedex_area_screen.c b/src/pokedex_area_screen.c
index ca5b79a5e..eeea3c210 100755
--- a/src/pokedex_area_screen.c
+++ b/src/pokedex_area_screen.c
@@ -533,7 +533,7 @@ static void Task_PokedexAreaScreen_0(u8 taskId)
HideBg(0);
break;
case 1:
- SetBgAttribute(3, BG_CTRL_ATTR_VISIBLE, 3);
+ SetBgAttribute(3, BG_ATTR_CHARBASEINDEX, 3);
sub_81C4D70(&sUnknown_085B4018);
StringFill(sPokedexAreaScreen->charBuffer, CHAR_SPACE, 16);
break;
@@ -628,8 +628,8 @@ static void Task_PokedexAreaScreen_1(u8 taskId)
static void sub_813D6B4(void)
{
- SetBgAttribute(3, BG_CTRL_ATTR_VISIBLE, 0);
- SetBgAttribute(3, BG_CTRL_ATTR_SCREENSIZE, 0);
+ SetBgAttribute(3, BG_ATTR_CHARBASEINDEX, 0);
+ SetBgAttribute(3, BG_ATTR_PALETTEMODE, 0);
}
static void CreateAreaMarkerSprites(void)
diff --git a/src/pokemon.c b/src/pokemon.c
index 96f564a19..580216b2c 100644
--- a/src/pokemon.c
+++ b/src/pokemon.c
@@ -2588,7 +2588,7 @@ void CreateBoxMon(struct BoxPokemon *boxMon, u16 species, u8 level, u8 fixedIV,
SetBoxMonData(boxMon, MON_DATA_SPECIES, &species);
SetBoxMonData(boxMon, MON_DATA_EXP, &gExperienceTables[gBaseStats[species].growthRate][level]);
SetBoxMonData(boxMon, MON_DATA_FRIENDSHIP, &gBaseStats[species].friendship);
- value = sav1_map_get_name();
+ value = GetCurrentRegionMapSectionId();
SetBoxMonData(boxMon, MON_DATA_MET_LOCATION, &value);
SetBoxMonData(boxMon, MON_DATA_MET_LEVEL, &level);
SetBoxMonData(boxMon, MON_DATA_MET_GAME, &gGameVersion);
@@ -5457,7 +5457,7 @@ bool8 PokemonUseItemEffects(struct Pokemon *mon, u16 item, u8 partyIndex, u8 mov
{
if (GetMonData(mon, MON_DATA_POKEBALL, NULL) == 11)
friendship++;
- if (GetMonData(mon, MON_DATA_MET_LOCATION, NULL) == sav1_map_get_name())
+ if (GetMonData(mon, MON_DATA_MET_LOCATION, NULL) == GetCurrentRegionMapSectionId())
friendship++;
}
if (friendship < 0)
@@ -5483,7 +5483,7 @@ bool8 PokemonUseItemEffects(struct Pokemon *mon, u16 item, u8 partyIndex, u8 mov
{
if (GetMonData(mon, MON_DATA_POKEBALL, NULL) == 11)
friendship++;
- if (GetMonData(mon, MON_DATA_MET_LOCATION, NULL) == sav1_map_get_name())
+ if (GetMonData(mon, MON_DATA_MET_LOCATION, NULL) == GetCurrentRegionMapSectionId())
friendship++;
}
if (friendship < 0)
@@ -5508,7 +5508,7 @@ bool8 PokemonUseItemEffects(struct Pokemon *mon, u16 item, u8 partyIndex, u8 mov
{
if (GetMonData(mon, MON_DATA_POKEBALL, NULL) == 11)
friendship++;
- if (GetMonData(mon, MON_DATA_MET_LOCATION, NULL) == sav1_map_get_name())
+ if (GetMonData(mon, MON_DATA_MET_LOCATION, NULL) == GetCurrentRegionMapSectionId())
friendship++;
}
if (friendship < 0)
@@ -6156,7 +6156,7 @@ void AdjustFriendship(struct Pokemon *mon, u8 event)
{
if (GetMonData(mon, MON_DATA_POKEBALL, 0) == ITEM_LUXURY_BALL)
friendship++;
- if (GetMonData(mon, MON_DATA_MET_LOCATION, 0) == sav1_map_get_name())
+ if (GetMonData(mon, MON_DATA_MET_LOCATION, 0) == GetCurrentRegionMapSectionId())
friendship++;
}
if (friendship < 0)
@@ -6701,7 +6701,7 @@ const u32 *GetFrontSpritePalFromSpeciesAndPersonality(u16 species, u32 otId, u32
{
u32 shinyValue;
- if (species > SPECIES_EGG)
+ if (species > NUM_SPECIES)
return gMonPaletteTable[0].data;
shinyValue = HIHALF(otId) ^ LOHALF(otId) ^ HIHALF(personality) ^ LOHALF(personality);
diff --git a/src/pokemon_icon.c b/src/pokemon_icon.c
index 36a7da0ee..bcbb60e21 100644
--- a/src/pokemon_icon.c
+++ b/src/pokemon_icon.c
@@ -1045,7 +1045,7 @@ u8 CreateMonIcon(u16 species, void (*callback)(struct Sprite *), s16 x, s16 y, u
.paletteTag = POKE_ICON_BASE_PAL_TAG + gMonIconPaletteIndices[species],
};
- if (species > SPECIES_EGG)
+ if (species > NUM_SPECIES)
iconTemplate.paletteTag = POKE_ICON_BASE_PAL_TAG;
spriteId = CreateMonIconSprite(&iconTemplate, x, y, subpriority);
@@ -1091,7 +1091,7 @@ u16 GetIconSpecies(u16 species, u32 personality)
}
else
{
- if (species > SPECIES_EGG)
+ if (species > NUM_SPECIES)
result = 260;
else
result = species;
@@ -1149,7 +1149,7 @@ void LoadMonIconPalettes(void)
void SafeLoadMonIconPalette(u16 species)
{
u8 palIndex;
- if (species > SPECIES_EGG)
+ if (species > NUM_SPECIES)
species = 260;
palIndex = gMonIconPaletteIndices[species];
if (IndexOfSpritePaletteTag(gMonIconPaletteTable[palIndex].tag) == 0xFF)
@@ -1174,7 +1174,7 @@ void FreeMonIconPalettes(void)
void SafeFreeMonIconPalette(u16 species)
{
u8 palIndex;
- if (species > SPECIES_EGG)
+ if (species > NUM_SPECIES)
species = 260;
palIndex = gMonIconPaletteIndices[species];
FreeSpritePaletteByTag(gMonIconPaletteTable[palIndex].tag);
@@ -1207,7 +1207,7 @@ void sub_80D304C(u16 offset)
s32 i;
const struct SpritePalette* monIconPalettePtr;
- if(offset <= 0xA0)
+ if (offset <= 0xA0)
{
monIconPalettePtr = gMonIconPaletteTable;
for(i = 5; i >= 0; i--)
@@ -1221,7 +1221,7 @@ void sub_80D304C(u16 offset)
u8 GetValidMonIconPalIndex(u16 species)
{
- if (species > SPECIES_EGG)
+ if (species > NUM_SPECIES)
species = 260;
return gMonIconPaletteIndices[species];
}
@@ -1233,7 +1233,7 @@ u8 sub_80D30A0(u16 species)
const u16* GetValidMonIconPalettePtr(u16 species)
{
- if (species > SPECIES_EGG)
+ if (species > NUM_SPECIES)
species = 260;
return gMonIconPaletteTable[gMonIconPaletteIndices[species]].data;
}
diff --git a/src/pokemon_storage_system.c b/src/pokemon_storage_system.c
index 7b1d8da7c..36ed78a54 100644
--- a/src/pokemon_storage_system.c
+++ b/src/pokemon_storage_system.c
@@ -1759,7 +1759,7 @@ static void Task_PokemonStorageSystemPC(u8 taskId)
case 4:
if (!gPaletteFade.active)
{
- overworld_free_bg_tilemaps();
+ CleanupOverworldWindowsAndTilemaps();
Cb2_EnterPSS(task->data[2]);
RemoveWindow(task->data[15]);
DestroyTask(taskId);
@@ -8826,7 +8826,7 @@ static bool8 sub_80D024C(void)
FillBgTilemapBufferRect_Palette0(0, 0, 0, 0, 0x20, 0x20);
FillWindowPixelBuffer8Bit(sPSSData->field_2200, 0);
sub_80D07B0(sMoveMonsPtr->fromRow, sMoveMonsPtr->fromColumn);
- SetBgAttribute(0, 4, 1);
+ SetBgAttribute(0, BG_ATTR_PALETTEMODE, 1);
PutWindowTilemap(sPSSData->field_2200);
CopyWindowToVram8Bit(sPSSData->field_2200, 3);
BlendPalettes(0x3F00, 8, RGB_WHITE);
@@ -9246,7 +9246,7 @@ static void sub_80D0B5C(void)
{
ChangeBgX(0, 0, 0);
ChangeBgY(0, 0, 0);
- SetBgAttribute(0, 4, 0);
+ SetBgAttribute(0, BG_ATTR_PALETTEMODE, 0);
ClearGpuRegBits(REG_OFFSET_BG0CNT, BGCNT_256COLOR);
FillBgTilemapBufferRect_Palette0(0, 0, 0, 0, 32, 32);
CopyBgTilemapBufferToVram(0);
@@ -9865,7 +9865,7 @@ static bool8 sub_80D184C(void)
var = 0x15 - sPSSData->field_2236;
for (i = 0; i < var; i++)
{
- WriteSequenceToBgTilemapBuffer(0, GetBgAttribute(0, 10) + 0x14 + sPSSData->field_2236 + i, i, 13, 1, 7, 15, 21);
+ WriteSequenceToBgTilemapBuffer(0, GetBgAttribute(0, BG_ATTR_BASETILE) + 0x14 + sPSSData->field_2236 + i, i, 13, 1, 7, 15, 21);
}
sub_80D19B4(var);
@@ -9886,7 +9886,7 @@ static bool8 sub_80D18E4(void)
var = 0x15 - sPSSData->field_2236;
for (i = 0; i < var; i++)
{
- WriteSequenceToBgTilemapBuffer(0, GetBgAttribute(0, 10) + 0x14 + sPSSData->field_2236 + i, i, 13, 1, 7, 15, 21);
+ WriteSequenceToBgTilemapBuffer(0, GetBgAttribute(0, BG_ATTR_BASETILE) + 0x14 + sPSSData->field_2236 + i, i, 13, 1, 7, 15, 21);
}
if (var >= 0)
@@ -10423,7 +10423,7 @@ static const sUnkVars[][4] =
static void sub_80D2644(u8 id, u8 bg, const void *arg2, u16 arg3, u16 arg4)
{
- u16 attribute1, attribute2;
+ u16 bgScreenSize, bgType;
if (id >= gUnknown_02039D88)
return;
@@ -10434,11 +10434,11 @@ static void sub_80D2644(u8 id, u8 bg, const void *arg2, u16 arg3, u16 arg4)
gUnknown_02039D84[id].field_24 = arg3;
gUnknown_02039D84[id].field_26 = arg4;
- attribute1 = GetBgAttribute(bg, 3);
- attribute2 = GetBgAttribute(bg, 9);
- gUnknown_02039D84[id].field_20 = sUnkVars[attribute2][attribute1].a;
- gUnknown_02039D84[id].field_22 = sUnkVars[attribute2][attribute1].b;
- if (attribute2 != 0)
+ bgScreenSize = GetBgAttribute(bg, BG_ATTR_SCREENSIZE);
+ bgType = GetBgAttribute(bg, BG_ATTR_TYPE);
+ gUnknown_02039D84[id].field_20 = sUnkVars[bgType][bgScreenSize].a;
+ gUnknown_02039D84[id].field_22 = sUnkVars[bgType][bgScreenSize].b;
+ if (bgType != 0)
gUnknown_02039D84[id].field_2A = 1;
else
gUnknown_02039D84[id].field_2A = 2;
diff --git a/src/pokemon_summary_screen.c b/src/pokemon_summary_screen.c
index eedb9417b..14d5aa9dc 100644
--- a/src/pokemon_summary_screen.c
+++ b/src/pokemon_summary_screen.c
@@ -311,7 +311,7 @@ static const struct UnkStruct_61CC04 gUnknown_0861CC10 =
static const s8 gUnknown_0861CC1C[] = {0, 2, 3, 1, 4, 5};
static const struct WindowTemplate gUnknown_0861CC24[] =
{
- {
+ {//Text for Pokemon Info
.bg = 0,
.tilemapLeft = 0,
.tilemapTop = 0,
@@ -320,7 +320,7 @@ static const struct WindowTemplate gUnknown_0861CC24[] =
.paletteNum = 6,
.baseBlock = 1,
},
- {
+ {//Text for Pokemon Skills
.bg = 0,
.tilemapLeft = 0,
.tilemapTop = 0,
@@ -329,7 +329,7 @@ static const struct WindowTemplate gUnknown_0861CC24[] =
.paletteNum = 6,
.baseBlock = 23,
},
- {
+ {//Text for Battle Moves
.bg = 0,
.tilemapLeft = 0,
.tilemapTop = 0,
@@ -338,7 +338,7 @@ static const struct WindowTemplate gUnknown_0861CC24[] =
.paletteNum = 6,
.baseBlock = 45,
},
- {
+ {//Text for Contest Moves
.bg = 0,
.tilemapLeft = 0,
.tilemapTop = 0,
@@ -347,7 +347,7 @@ static const struct WindowTemplate gUnknown_0861CC24[] =
.paletteNum = 6,
.baseBlock = 67,
},
- {
+ { //Text on Pokemon Info: Button prompt: Cancel
.bg = 0,
.tilemapLeft = 22,
.tilemapTop = 0,
@@ -356,7 +356,7 @@ static const struct WindowTemplate gUnknown_0861CC24[] =
.paletteNum = 7,
.baseBlock = 89,
},
- {
+ {//Info button found under moves
.bg = 0,
.tilemapLeft = 22,
.tilemapTop = 0,
@@ -365,7 +365,7 @@ static const struct WindowTemplate gUnknown_0861CC24[] =
.paletteNum = 7,
.baseBlock = 105,
},
- {
+ {//Switch button under moves when viewing moves
.bg = 0,
.tilemapLeft = 22,
.tilemapTop = 0,
@@ -374,7 +374,7 @@ static const struct WindowTemplate gUnknown_0861CC24[] =
.paletteNum = 7,
.baseBlock = 121,
},
- {
+ {//Unknown
.bg = 0,
.tilemapLeft = 11,
.tilemapTop = 4,
@@ -383,7 +383,7 @@ static const struct WindowTemplate gUnknown_0861CC24[] =
.paletteNum = 6,
.baseBlock = 137,
},
- {
+ {//Unknown
.bg = 0,
.tilemapLeft = 11,
.tilemapTop = 4,
@@ -392,7 +392,7 @@ static const struct WindowTemplate gUnknown_0861CC24[] =
.paletteNum = 6,
.baseBlock = 137,
},
- {
+ {//Type on pokemon info page
.bg = 0,
.tilemapLeft = 11,
.tilemapTop = 6,
@@ -401,7 +401,7 @@ static const struct WindowTemplate gUnknown_0861CC24[] =
.paletteNum = 6,
.baseBlock = 173,
},
- {
+ {//HP, Attack and Defense text
.bg = 0,
.tilemapLeft = 10,
.tilemapTop = 7,
@@ -410,7 +410,7 @@ static const struct WindowTemplate gUnknown_0861CC24[] =
.paletteNum = 6,
.baseBlock = 209,
},
- {
+ {//Sp. atk, Sp. Def and Speed texxt
.bg = 0,
.tilemapLeft = 22,
.tilemapTop = 7,
@@ -419,7 +419,7 @@ static const struct WindowTemplate gUnknown_0861CC24[] =
.paletteNum = 6,
.baseBlock = 245,
},
- {
+ {//EXP and next lvl.
.bg = 0,
.tilemapLeft = 10,
.tilemapTop = 14,
@@ -428,7 +428,7 @@ static const struct WindowTemplate gUnknown_0861CC24[] =
.paletteNum = 6,
.baseBlock = 275,
},
- {
+ {//Unknown
.bg = 0,
.tilemapLeft = 0,
.tilemapTop = 18,
@@ -437,7 +437,7 @@ static const struct WindowTemplate gUnknown_0861CC24[] =
.paletteNum = 6,
.baseBlock = 319,
},
- {
+ {//move text: Power, Accuracy and their numeric values.
.bg = 0,
.tilemapLeft = 1,
.tilemapTop = 15,
@@ -446,7 +446,7 @@ static const struct WindowTemplate gUnknown_0861CC24[] =
.paletteNum = 6,
.baseBlock = 331,
},
- {
+ {//contest text: appeal and jam
.bg = 0,
.tilemapLeft = 1,
.tilemapTop = 15,
@@ -455,7 +455,7 @@ static const struct WindowTemplate gUnknown_0861CC24[] =
.paletteNum = 6,
.baseBlock = 367,
},
- {
+ {//Unknown
.bg = 0,
.tilemapLeft = 22,
.tilemapTop = 4,
@@ -464,7 +464,7 @@ static const struct WindowTemplate gUnknown_0861CC24[] =
.paletteNum = 6,
.baseBlock = 387,
},
- {
+ {//No.
.bg = 0,
.tilemapLeft = 1,
.tilemapTop = 2,
@@ -473,7 +473,7 @@ static const struct WindowTemplate gUnknown_0861CC24[] =
.paletteNum = 7,
.baseBlock = 387,
},
- {
+ {//Upper name
.bg = 0,
.tilemapLeft = 1,
.tilemapTop = 12,
@@ -482,7 +482,7 @@ static const struct WindowTemplate gUnknown_0861CC24[] =
.paletteNum = 6,
.baseBlock = 395,
},
- {
+ {//Lower name
.bg = 0,
.tilemapLeft = 1,
.tilemapTop = 14,
@@ -495,7 +495,7 @@ static const struct WindowTemplate gUnknown_0861CC24[] =
};
static const struct WindowTemplate gUnknown_0861CCCC[] =
{
- {
+ {//Original Trainer
.bg = 0,
.tilemapLeft = 11,
.tilemapTop = 4,
@@ -504,7 +504,7 @@ static const struct WindowTemplate gUnknown_0861CCCC[] =
.paletteNum = 6,
.baseBlock = 449,
},
- {
+ {//ID numbers
.bg = 0,
.tilemapLeft = 22,
.tilemapTop = 4,
@@ -513,7 +513,7 @@ static const struct WindowTemplate gUnknown_0861CCCC[] =
.paletteNum = 6,
.baseBlock = 471,
},
- {
+ {//Ability
.bg = 0,
.tilemapLeft = 11,
.tilemapTop = 9,
@@ -522,7 +522,7 @@ static const struct WindowTemplate gUnknown_0861CCCC[] =
.paletteNum = 6,
.baseBlock = 485,
},
- {
+ {//Trainer Memo
.bg = 0,
.tilemapLeft = 11,
.tilemapTop = 14,
@@ -534,7 +534,7 @@ static const struct WindowTemplate gUnknown_0861CCCC[] =
};
static const struct WindowTemplate gUnknown_0861CCEC[] =
{
- {
+ {//Held Item string
.bg = 0,
.tilemapLeft = 10,
.tilemapTop = 4,
@@ -543,7 +543,7 @@ static const struct WindowTemplate gUnknown_0861CCEC[] =
.paletteNum = 6,
.baseBlock = 449,
},
- {
+ {//Ribbon string
.bg = 0,
.tilemapLeft = 20,
.tilemapTop = 4,
@@ -552,7 +552,7 @@ static const struct WindowTemplate gUnknown_0861CCEC[] =
.paletteNum = 6,
.baseBlock = 469,
},
- {
+ {//Stat numbers left (HP, ATK & DEF)
.bg = 0,
.tilemapLeft = 16,
.tilemapTop = 7,
@@ -561,7 +561,7 @@ static const struct WindowTemplate gUnknown_0861CCEC[] =
.paletteNum = 6,
.baseBlock = 489,
},
- {
+ {//Stat numbers right (SP.ATK, SP.DEF & SPEED)
.bg = 0,
.tilemapLeft = 27,
.tilemapTop = 7,
@@ -570,7 +570,7 @@ static const struct WindowTemplate gUnknown_0861CCEC[] =
.paletteNum = 6,
.baseBlock = 525,
},
- {
+ {//Exp numbers
.bg = 0,
.tilemapLeft = 24,
.tilemapTop = 14,
@@ -582,7 +582,7 @@ static const struct WindowTemplate gUnknown_0861CCEC[] =
};
static const struct WindowTemplate gUnknown_0861CD14[] =
{
- {
+ {//Move names?
.bg = 0,
.tilemapLeft = 15,
.tilemapTop = 4,
@@ -591,7 +591,7 @@ static const struct WindowTemplate gUnknown_0861CD14[] =
.paletteNum = 6,
.baseBlock = 449,
},
- {
+ {//PP Numbers
.bg = 0,
.tilemapLeft = 24,
.tilemapTop = 4,
@@ -600,7 +600,7 @@ static const struct WindowTemplate gUnknown_0861CD14[] =
.paletteNum = 8,
.baseBlock = 539,
},
- {
+ {//Move description text
.bg = 0,
.tilemapLeft = 10,
.tilemapTop = 15,
@@ -1271,7 +1271,7 @@ static bool8 SummaryScreen_DecompressGraphics(void)
pssData->unk40F0++;
break;
case 12:
- LoadCompressedPalette(&gMoveTypes_Pal, 0x1D0, 0x60);
+ LoadCompressedPalette(gMoveTypes_Pal, 0x1D0, 0x60);
pssData->unk40F0 = 0;
return TRUE;
}
@@ -1688,15 +1688,15 @@ static void sub_81C0B8C(u8 taskId)
if (pssData->unk40C9 == 0)
{
data[1] = 1;
- SetBgAttribute(1, 7, 1);
- SetBgAttribute(2, 7, 2);
+ SetBgAttribute(1, BG_ATTR_PRIORITY, 1);
+ SetBgAttribute(2, BG_ATTR_PRIORITY, 2);
schedule_bg_copy_tilemap_to_vram(1);
}
else
{
data[1] = 2;
- SetBgAttribute(2, 7, 1);
- SetBgAttribute(1, 7, 2);
+ SetBgAttribute(2, BG_ATTR_PRIORITY, 1);
+ SetBgAttribute(1, BG_ATTR_PRIORITY, 2);
schedule_bg_copy_tilemap_to_vram(2);
}
ChangeBgX(data[1], 0, 0);
@@ -1745,14 +1745,14 @@ static void sub_81C0D44(u8 taskId)
s16 *data = gTasks[taskId].data;
if (pssData->unk40C9 == 0)
{
- SetBgAttribute(1, 7, 1);
- SetBgAttribute(2, 7, 2);
+ SetBgAttribute(1, BG_ATTR_PRIORITY, 1);
+ SetBgAttribute(2, BG_ATTR_PRIORITY, 2);
schedule_bg_copy_tilemap_to_vram(2);
}
else
{
- SetBgAttribute(2, 7, 1);
- SetBgAttribute(1, 7, 2);
+ SetBgAttribute(2, BG_ATTR_PRIORITY, 1);
+ SetBgAttribute(1, BG_ATTR_PRIORITY, 2);
schedule_bg_copy_tilemap_to_vram(1);
}
if (pssData->currPageIndex > 1)
diff --git a/src/post_battle_event_funcs.c b/src/post_battle_event_funcs.c
index fe5e1089e..3cbf6ecd2 100644
--- a/src/post_battle_event_funcs.c
+++ b/src/post_battle_event_funcs.c
@@ -34,12 +34,12 @@ int GameClear(void)
if (GetGameStat(GAME_STAT_FIRST_HOF_PLAY_TIME) == 0)
SetGameStat(GAME_STAT_FIRST_HOF_PLAY_TIME, (gSaveBlock2Ptr->playTimeHours << 16) | (gSaveBlock2Ptr->playTimeMinutes << 8) | gSaveBlock2Ptr->playTimeSeconds);
- SetSecretBase2Field_9();
+ SetContinueGameWarpStatus();
if (gSaveBlock2Ptr->playerGender == MALE)
- sub_8084F6C(HEAL_LOCATION_LITTLEROOT_TOWN_BRENDANS_HOUSE_2F);
+ SetContinueGameWarpToHealLocation(HEAL_LOCATION_LITTLEROOT_TOWN_BRENDANS_HOUSE_2F);
else
- sub_8084F6C(HEAL_LOCATION_LITTLEROOT_TOWN_MAYS_HOUSE_2F);
+ SetContinueGameWarpToHealLocation(HEAL_LOCATION_LITTLEROOT_TOWN_MAYS_HOUSE_2F);
ribbonGet = FALSE;
diff --git a/src/psychic.c b/src/psychic.c
index 371c24ce8..5756fe97f 100644
--- a/src/psychic.c
+++ b/src/psychic.c
@@ -641,8 +641,8 @@ void sub_810F634(struct Sprite *sprite)
void sub_810F6B0(struct Sprite *sprite)
{
- s16 x = sub_80A861C(gBattleAnimAttacker, 1) / 2;
- s16 y = sub_80A861C(gBattleAnimAttacker, 0) / -2;
+ s16 x = GetBattlerSpriteCoordAttr(gBattleAnimAttacker, BATTLER_COORD_ATTR_WIDTH) / 2;
+ s16 y = GetBattlerSpriteCoordAttr(gBattleAnimAttacker, BATTLER_COORD_ATTR_HEIGHT) / -2;
if (GetBattlerSide(gBattleAnimAttacker) == B_SIDE_OPPONENT)
x = -x;
@@ -753,8 +753,8 @@ void sub_810F940(u8 taskId)
task->data[13] = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2);
task->data[14] = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET);
- var0 = sub_80A861C(gBattleAnimAttacker, 1) / 3;
- var1 = sub_80A861C(gBattleAnimAttacker, 0) / 3;
+ var0 = GetBattlerSpriteCoordAttr(gBattleAnimAttacker, BATTLER_COORD_ATTR_WIDTH) / 3;
+ var1 = GetBattlerSpriteCoordAttr(gBattleAnimAttacker, BATTLER_COORD_ATTR_HEIGHT) / 3;
task->data[12] = var0 > var1 ? var0 : var1;
SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT2_ALL | BLDCNT_EFFECT_BLEND);
@@ -865,18 +865,18 @@ void sub_810FBF0(u8 taskId)
if (gBattleAnimArgs[0] == 1)
{
task->data[10] = -10;
- task->data[11] = sub_80A861C(gBattleAnimTarget, 5) - 8;
- task->data[12] = sub_80A861C(gBattleAnimTarget, 2) + 8;
- task->data[13] = sub_80A861C(gBattleAnimAttacker, 5) - 8;
- task->data[14] = sub_80A861C(gBattleAnimAttacker, 2) + 8;
+ task->data[11] = GetBattlerSpriteCoordAttr(gBattleAnimTarget, BATTLER_COORD_ATTR_RIGHT) - 8;
+ task->data[12] = GetBattlerSpriteCoordAttr(gBattleAnimTarget, BATTLER_COORD_ATTR_TOP) + 8;
+ task->data[13] = GetBattlerSpriteCoordAttr(gBattleAnimAttacker, BATTLER_COORD_ATTR_RIGHT) - 8;
+ task->data[14] = GetBattlerSpriteCoordAttr(gBattleAnimAttacker, BATTLER_COORD_ATTR_TOP) + 8;
}
else
{
task->data[10] = 10;
- task->data[11] = sub_80A861C(gBattleAnimAttacker, 4) + 8;
- task->data[12] = sub_80A861C(gBattleAnimAttacker, 3) - 8;
- task->data[13] = sub_80A861C(gBattleAnimTarget, 4) + 8;
- task->data[14] = sub_80A861C(gBattleAnimTarget, 3) - 8;
+ task->data[11] = GetBattlerSpriteCoordAttr(gBattleAnimAttacker, BATTLER_COORD_ATTR_LEFT) + 8;
+ task->data[12] = GetBattlerSpriteCoordAttr(gBattleAnimAttacker, BATTLER_COORD_ATTR_BOTTOM) - 8;
+ task->data[13] = GetBattlerSpriteCoordAttr(gBattleAnimTarget, BATTLER_COORD_ATTR_LEFT) + 8;
+ task->data[14] = GetBattlerSpriteCoordAttr(gBattleAnimTarget, BATTLER_COORD_ATTR_BOTTOM) - 8;
}
}
else
@@ -884,18 +884,18 @@ void sub_810FBF0(u8 taskId)
if (gBattleAnimArgs[0] == 1)
{
task->data[10] = -10;
- task->data[11] = sub_80A861C(gBattleAnimTarget, 4) + 8;
- task->data[12] = sub_80A861C(gBattleAnimTarget, 2) + 8;
- task->data[13] = sub_80A861C(gBattleAnimAttacker, 4) + 8;
- task->data[14] = sub_80A861C(gBattleAnimAttacker, 2) + 8;
+ task->data[11] = GetBattlerSpriteCoordAttr(gBattleAnimTarget, BATTLER_COORD_ATTR_LEFT) + 8;
+ task->data[12] = GetBattlerSpriteCoordAttr(gBattleAnimTarget, BATTLER_COORD_ATTR_TOP) + 8;
+ task->data[13] = GetBattlerSpriteCoordAttr(gBattleAnimAttacker, BATTLER_COORD_ATTR_LEFT) + 8;
+ task->data[14] = GetBattlerSpriteCoordAttr(gBattleAnimAttacker, BATTLER_COORD_ATTR_TOP) + 8;
}
else
{
task->data[10] = 10;
- task->data[11] = sub_80A861C(gBattleAnimAttacker, 5) - 8;
- task->data[12] = sub_80A861C(gBattleAnimAttacker, 3) - 8;
- task->data[13] = sub_80A861C(gBattleAnimTarget, 5) - 8;
- task->data[14] = sub_80A861C(gBattleAnimTarget, 3) - 8;
+ task->data[11] = GetBattlerSpriteCoordAttr(gBattleAnimAttacker, BATTLER_COORD_ATTR_RIGHT) - 8;
+ task->data[12] = GetBattlerSpriteCoordAttr(gBattleAnimAttacker, BATTLER_COORD_ATTR_BOTTOM) - 8;
+ task->data[13] = GetBattlerSpriteCoordAttr(gBattleAnimTarget, BATTLER_COORD_ATTR_RIGHT) - 8;
+ task->data[14] = GetBattlerSpriteCoordAttr(gBattleAnimTarget, BATTLER_COORD_ATTR_BOTTOM) - 8;
}
}
diff --git a/src/rayquaza_scene.c b/src/rayquaza_scene.c
index 94d81e30f..00a73a0a2 100644
--- a/src/rayquaza_scene.c
+++ b/src/rayquaza_scene.c
@@ -1708,7 +1708,7 @@ static void sub_81D752C(u8 taskId)
if (data[0] != 16)
{
data[0]++;
- SetGpuReg(REG_OFFSET_BLDALPHA, (data[0] << 8) | (16 - data[0]));
+ SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(16 - data[0], data[0]));
}
}
@@ -1954,7 +1954,7 @@ static void Task_RayTakesFlightAnim(u8 taskId)
sub_81D7E10();
sub_81D7E9C();
SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT1_OBJ | BLDCNT_TGT2_BG1 | BLDCNT_EFFECT_BLEND);
- SetGpuReg(REG_OFFSET_BLDALPHA, 0x808);
+ SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(8, 8));
BlendPalettes(-1, 0x10, 0);
SetVBlankCallback(VBlankCB_RayquazaScene);
CreateTask(sub_81D81A4, 0);
@@ -2153,7 +2153,7 @@ static void Task_RayDescendsAnim(u8 taskId)
sub_81D82B0();
sub_81D8358();
SetGpuRegBits(REG_OFFSET_BLDCNT, BLDCNT_TGT1_BG0 | BLDCNT_TGT2_BG1 | BLDCNT_TGT2_BG2 | BLDCNT_TGT2_BG3 | BLDCNT_TGT2_OBJ | BLDCNT_EFFECT_BLEND);
- SetGpuReg(REG_OFFSET_BLDALPHA, 0x1000);
+ SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(0, 16));
BlendPalettes(-1, 0x10, 0);
SetVBlankCallback(VBlankCB_RayquazaScene);
sRayScene->field_2008 = 0;
@@ -2509,7 +2509,7 @@ static void Task_RayChasesAwayAnim(u8 taskId)
sub_81D68C8();
ClearGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_BG2_ON);
SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT1_BG0 | BLDCNT_TGT2_BG1 | BLDCNT_EFFECT_BLEND);
- SetGpuReg(REG_OFFSET_BLDALPHA, 0xE09);
+ SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(9, 14));
BlendPalettes(-1, 0x10, 0);
SetVBlankCallback(VBlankCB_RayquazaScene);
data[0] = 0;
diff --git a/src/record_mixing.c b/src/record_mixing.c
index 2b497c82b..189033685 100644
--- a/src/record_mixing.c
+++ b/src/record_mixing.c
@@ -741,711 +741,184 @@ static u8 sub_80E7B54(void)
return gUnknown_03001160;
}
-#ifdef NONMATCHING
static void ReceiveDaycareMailData(struct RecordMixingDayCareMail *src, size_t recordSize, u8 which, TVShow *shows)
{
- // r9 = which
- u16 i;
- u16 j;
+ u16 i, j;
u8 linkPlayerCount;
- u16 language;
- u16 otNameLanguage;
- u16 nicknameLanguage;
- u32 version;
- u8 dcMail1;
- u8 dcMail2;
- u8 r1_80e7b54;
- struct DayCareMail *recordMixingMail;
+ u8 tableId;
struct RecordMixingDayCareMail *_src;
+ u8 which0, which1;
+ void *ptr;
u8 sp04[4];
u8 sp08[4];
- struct RecordMixingDayCareMail *sp0c[4]; // -> sp+48
- u8 sp1c[4][2]; // [][0] -> sp+4c, [][1] -> sp+50
+ struct RecordMixingDayCareMail *sp0c[4];
+ u8 sp1c[4][2];
u8 sp24[4][2];
- // sp+2c = src
- // sp+30 = recordSize
u8 sp34;
u16 oldSeed;
- bool32 anyRS; // sp+3c
+ bool32 anyRS;
oldSeed = Random2();
SeedRng2(gLinkPlayers[0].trainerId);
linkPlayerCount = GetLinkPlayerCount();
- for (i = 0; i < 4; i ++)
+ for (i = 0; i < 4; i++)
{
sp04[i] = 0xFF;
sp08[i] = 0;
sp1c[i][0] = 0;
sp1c[i][1] = 0;
}
+
anyRS = Link_AnyPartnersPlayingRubyOrSapphire();
- for (i = 0; i < GetLinkPlayerCount(); i ++) // r8 = i
+ for (i = 0; i < GetLinkPlayerCount(); i++)
{
- // sp+54 = linkPlayerCount << 16
- // sp+44 = which * recordSize
- _src = (void *)src + i * recordSize; // r7
- language = gLinkPlayers[i].language; // r9
- version = (u8)gLinkPlayers[i].version; // sp+40
- for (j = 0; j < _src->unk_70; j ++)
+ u32 language, version;
+
+ _src = (void *)src + i * recordSize;
+ language = gLinkPlayers[i].language;
+ version = gLinkPlayers[i].version & 0xFF;
+ for (j = 0; j < _src->numDaycareMons; j ++)
{
- // r10 = ~0x10
- recordMixingMail = &_src->unk_00[j];
- if (recordMixingMail->mail.itemId != ITEM_NONE)
+ u16 otNameLanguage, nicknameLanguage;
+ struct DayCareMail *recordMixingMail = &_src->mail[j];
+
+ if (!recordMixingMail->message.itemId)
+ continue;
+
+ if (anyRS)
{
- if (anyRS)
+ if (StringLength(recordMixingMail->OT_name) <= 5)
{
- if (StringLength(recordMixingMail->OT_name) <= 5)
- {
- otNameLanguage = LANGUAGE_JAPANESE;
- }
- else
- {
- StripExtCtrlCodes(recordMixingMail->OT_name);
- otNameLanguage = language;
- }
- if (recordMixingMail->monName[0] == EXT_CTRL_CODE_BEGIN && recordMixingMail->monName[1] == EXT_CTRL_CODE_JPN)
- {
- StripExtCtrlCodes(recordMixingMail->monName);
- nicknameLanguage = LANGUAGE_JAPANESE;
- }
- else
- {
- nicknameLanguage = language;
- }
- if (version == VERSION_RUBY || version == VERSION_SAPPHIRE)
- {
- recordMixingMail->language_maybe = otNameLanguage;
- recordMixingMail->unknown = nicknameLanguage;
- }
+ otNameLanguage = LANGUAGE_JAPANESE;
}
- else if (language == LANGUAGE_JAPANESE)
+ else
{
- if (IsStringJapanese(recordMixingMail->OT_name))
- {
- recordMixingMail->language_maybe = LANGUAGE_JAPANESE;
- }
- else
- {
- recordMixingMail->language_maybe = GAME_LANGUAGE;
- }
- if (IsStringJapanese(recordMixingMail->monName))
- {
- recordMixingMail->unknown = LANGUAGE_JAPANESE;
- }
- else
- {
- recordMixingMail->unknown = GAME_LANGUAGE;
- }
+ StripExtCtrlCodes(recordMixingMail->OT_name);
+ otNameLanguage = language;
+ }
+
+ if (recordMixingMail->monName[0] == EXT_CTRL_CODE_BEGIN && recordMixingMail->monName[1] == EXT_CTRL_CODE_JPN)
+ {
+ StripExtCtrlCodes(recordMixingMail->monName);
+ nicknameLanguage = LANGUAGE_JAPANESE;
+ }
+ else
+ {
+ nicknameLanguage = language;
+ }
+
+ if (version == VERSION_RUBY || version == VERSION_SAPPHIRE)
+ {
+ recordMixingMail->gameLanguage = otNameLanguage;
+ recordMixingMail->monLanguage = nicknameLanguage;
}
}
+ else if (language == LANGUAGE_JAPANESE)
+ {
+ if (IsStringJapanese(recordMixingMail->OT_name))
+ recordMixingMail->gameLanguage = LANGUAGE_JAPANESE;
+ else
+ recordMixingMail->gameLanguage = GAME_LANGUAGE;
+
+ if (IsStringJapanese(recordMixingMail->monName))
+ recordMixingMail->monLanguage = LANGUAGE_JAPANESE;
+ else
+ recordMixingMail->monLanguage = GAME_LANGUAGE;
+ }
}
}
+
sp34 = 0;
- for (i = 0; i < linkPlayerCount; i ++)
+ for (i = 0; i < linkPlayerCount; i++)
{
- _src = (void *)src + i * recordSize; // r7
- if (_src->unk_70 != 0)
+ _src = (void *)src + i * recordSize;
+ if (_src->numDaycareMons == 0)
+ continue;
+
+ for (j = 0; j < _src->numDaycareMons; j ++)
{
- for (j = 0; j < _src->unk_70; j ++)
- {
- if (_src->unk_74[j] == 0)
- {
- sp1c[i][j] = 1;
- }
- }
+ if (!_src->holdsItem[j])
+ sp1c[i][j] = 1;
}
}
- i = 0;
- for (j = 0; j < linkPlayerCount; j ++)
+
+ j = 0;
+ for (i = 0; i < linkPlayerCount; i++)
{
- _src = (void *)src + j * recordSize;
- if (sp1c[j][0] == TRUE || sp1c[j][1] == TRUE)
- {
- sp34 ++;
- }
- if (sp1c[j][0] == TRUE && sp1c[j][1] == FALSE)
+ _src = (void *)src + i * recordSize;
+ if (sp1c[i][0] == TRUE || sp1c[i][1] == TRUE)
+ sp34++;
+
+ if (sp1c[i][0] == TRUE && sp1c[i][1] == FALSE)
{
- sp24[i][0] = j;
- sp24[i][1] = 0;
- i ++;
+ sp24[j][0] = i;
+ sp24[j][1] = 0;
+ j++;
}
- else if (sp1c[j][0] == FALSE && sp1c[j][1] == TRUE)
+ else if (sp1c[i][0] == FALSE && sp1c[i][1] == TRUE)
{
- sp24[i][0] = j;
- sp24[i][1] = 0;
- i ++;
+ sp24[j][0] = i;
+ sp24[j][1] = 1;
+ j++;
}
- else if (sp1c[j][0] == TRUE && sp1c[j][1] == TRUE)
+ else if (sp1c[i][0] == TRUE && sp1c[i][1] == TRUE)
{
- sp24[i][0] = j;
- dcMail1 = sub_80E7A9C(&_src->unk_00[0]);
- dcMail2 = sub_80E7A9C(&_src->unk_00[1]);
- if (!dcMail1 && dcMail2)
+ u32 var1, var2;
+
+ sp24[j][0] = i;
+ var1 = sub_80E7A9C(&_src->mail[0]);
+ var2 = sub_80E7A9C(&_src->mail[1]);
+ if (!var1 && var2)
{
- sp24[i][1] = 1;
+ register u8 one asm("r0") = 1; // boo, a fakematch
+ sp24[j][1] = one;
}
- else if ((dcMail1 && dcMail2) || (!dcMail1 && !dcMail2))
+ else if ((var1 && var2) || (!var1 && !var2))
{
- sp24[i][1] = Random2() % 2;
+ sp24[j][1] = Random2() % 2;
}
- else
+ else if (var1 && !var2)
{
- sp24[i][1] = 0;
+ sp24[j][1] = 0;
}
- i ++;
+ j++;
}
}
- for (i = 0; i < 4; i ++)
+
+ for (i = 0; i < 4; i++)
{
_src = &src[which * recordSize];
sp0c[i] = _src;
}
- r1_80e7b54 = sub_80E7B54() % 3;
+
+ tableId = sub_80E7B54() % 3;
switch (sp34)
{
- case 2:
- sub_80E7AA4(src, recordSize, sp24, 0, 1);
- break;
- case 3:
- sub_80E7AA4(src, recordSize, sp24, gUnknown_0858CFB8[r1_80e7b54][0], gUnknown_0858CFB8[r1_80e7b54][1]);
- break;
- case 4:
- sub_80E7AA4(src, recordSize, sp24, gUnknown_0858CFBE[r1_80e7b54][0], gUnknown_0858CFBE[r1_80e7b54][1]);
- sub_80E7AA4(src, recordSize, sp24, gUnknown_0858CFBE[r1_80e7b54][2], gUnknown_0858CFBE[r1_80e7b54][3]);
- break;
+ case 2:
+ sub_80E7AA4(src, recordSize, sp24, 0, 1);
+ break;
+ case 3:
+ which0 = gUnknown_0858CFB8[tableId][0];
+ which1 = gUnknown_0858CFB8[tableId][1];
+ sub_80E7AA4(src, recordSize, sp24, which0, which1);
+ break;
+ case 4:
+ ptr = sp24;
+ which0 = gUnknown_0858CFBE[tableId][0];
+ which1 = gUnknown_0858CFBE[tableId][1];
+ sub_80E7AA4(src, recordSize, ptr, which0, which1);
+ which0 = gUnknown_0858CFBE[tableId][2];
+ which1 = gUnknown_0858CFBE[tableId][3];
+ sub_80E7AA4(src, recordSize, ptr, which0, which1);
+ break;
}
+
_src = (void *)src + which * recordSize;
- memcpy(&gSaveBlock1Ptr->daycare.mons[0].misc.mail, &_src->unk_00[0], sizeof(struct DayCareMail));
- memcpy(&gSaveBlock1Ptr->daycare.mons[1].misc.mail, &_src->unk_00[1], sizeof(struct DayCareMail));
+ memcpy(&gSaveBlock1Ptr->daycare.mons[0].mail, &_src->mail[0], sizeof(struct DayCareMail));
+ memcpy(&gSaveBlock1Ptr->daycare.mons[1].mail, &_src->mail[1], sizeof(struct DayCareMail));
SeedRng(oldSeed);
}
-#else
-NAKED
-static void ReceiveDaycareMailData(struct RecordMixingDayCareMail *src, size_t recordSize, u8 which, TVShow *shows)
-{
- asm_unified("\tpush {r4-r7,lr}\n"
- "\tmov r7, r10\n"
- "\tmov r6, r9\n"
- "\tmov r5, r8\n"
- "\tpush {r5-r7}\n"
- "\tsub sp, 0x58\n"
- "\tstr r0, [sp, 0x2C]\n"
- "\tstr r1, [sp, 0x30]\n"
- "\tlsls r2, 24\n"
- "\tlsrs r2, 24\n"
- "\tmov r9, r2\n"
- "\tbl Random2\n"
- "\tlsls r0, 16\n"
- "\tlsrs r0, 16\n"
- "\tstr r0, [sp, 0x38]\n"
- "\tldr r0, =gLinkPlayers\n"
- "\tldrh r0, [r0, 0x4]\n"
- "\tbl SeedRng2\n"
- "\tbl GetLinkPlayerCount\n"
- "\tlsls r0, 24\n"
- "\tlsrs r4, r0, 24\n"
- "\tmovs r0, 0\n"
- "\tmov r8, r0\n"
- "\tmov r1, sp\n"
- "\tadds r1, 0x1C\n"
- "\tstr r1, [sp, 0x4C]\n"
- "\tmov r2, sp\n"
- "\tadds r2, 0x1D\n"
- "\tstr r2, [sp, 0x50]\n"
- "\tmov r3, sp\n"
- "\tadds r3, 0xC\n"
- "\tstr r3, [sp, 0x48]\n"
- "\tmovs r7, 0xFF\n"
- "\tadd r3, sp, 0x8\n"
- "\tmovs r2, 0\n"
- "\tadds r6, r1, 0\n"
- "\tldr r5, [sp, 0x50]\n"
- "_080E7BB0:\n"
- "\tmov r1, sp\n"
- "\tadd r1, r8\n"
- "\tadds r1, 0x4\n"
- "\tldrb r0, [r1]\n"
- "\torrs r0, r7\n"
- "\tstrb r0, [r1]\n"
- "\tmov r1, r8\n"
- "\tadds r0, r3, r1\n"
- "\tstrb r2, [r0]\n"
- "\tlsls r1, 1\n"
- "\tadds r0, r6, r1\n"
- "\tstrb r2, [r0]\n"
- "\tadds r1, r5, r1\n"
- "\tstrb r2, [r1]\n"
- "\tmov r0, r8\n"
- "\tadds r0, 0x1\n"
- "\tlsls r0, 16\n"
- "\tlsrs r0, 16\n"
- "\tmov r8, r0\n"
- "\tcmp r0, 0x3\n"
- "\tbls _080E7BB0\n"
- "\tbl Link_AnyPartnersPlayingRubyOrSapphire\n"
- "\tstr r0, [sp, 0x3C]\n"
- "\tmovs r2, 0\n"
- "\tmov r8, r2\n"
- "\tlsls r4, 16\n"
- "\tstr r4, [sp, 0x54]\n"
- "\tldr r0, [sp, 0x30]\n"
- "\tmov r3, r9\n"
- "\tmuls r3, r0\n"
- "\tstr r3, [sp, 0x44]\n"
- "\tb _080E7D04\n"
- "\t.pool\n"
- "_080E7BF8:\n"
- "\tldr r1, [sp, 0x30]\n"
- "\tmov r0, r8\n"
- "\tmuls r0, r1\n"
- "\tldr r2, [sp, 0x2C]\n"
- "\tadds r7, r2, r0\n"
- "\tldr r1, =gLinkPlayers\n"
- "\tmov r3, r8\n"
- "\tlsls r0, r3, 3\n"
- "\tsubs r0, r3\n"
- "\tlsls r0, 2\n"
- "\tadds r0, r1\n"
- "\tldrh r1, [r0, 0x1A]\n"
- "\tmov r9, r1\n"
- "\tldrb r0, [r0]\n"
- "\tstr r0, [sp, 0x40]\n"
- "\tmovs r6, 0\n"
- "\tldr r0, [r7, 0x70]\n"
- "\tcmp r6, r0\n"
- "\tbcs _080E7CFA\n"
- "\tmovs r2, 0x10\n"
- "\tnegs r2, r2\n"
- "\tmov r10, r2\n"
- "_080E7C24:\n"
- "\tlsls r0, r6, 3\n"
- "\tsubs r0, r6\n"
- "\tlsls r0, 3\n"
- "\tadds r5, r7, r0\n"
- "\tldrh r0, [r5, 0x20]\n"
- "\tcmp r0, 0\n"
- "\tbeq _080E7CEE\n"
- "\tldr r3, [sp, 0x3C]\n"
- "\tcmp r3, 0\n"
- "\tbeq _080E7C9A\n"
- "\tadds r4, r5, 0\n"
- "\tadds r4, 0x24\n"
- "\tadds r0, r4, 0\n"
- "\tbl StringLength\n"
- "\tlsls r0, 16\n"
- "\tlsrs r0, 16\n"
- "\tcmp r0, 0x5\n"
- "\tbhi _080E7C54\n"
- "\tmovs r4, 0x1\n"
- "\tb _080E7C5C\n"
- "\t.pool\n"
- "_080E7C54:\n"
- "\tadds r0, r4, 0\n"
- "\tbl StripExtCtrlCodes\n"
- "\tmov r4, r9\n"
- "_080E7C5C:\n"
- "\tldrh r1, [r5, 0x2C]\n"
- "\tldr r0, =0x000015fc\n"
- "\tcmp r1, r0\n"
- "\tbne _080E7C74\n"
- "\tadds r0, r5, 0\n"
- "\tadds r0, 0x2C\n"
- "\tbl StripExtCtrlCodes\n"
- "\tmovs r1, 0x1\n"
- "\tb _080E7C76\n"
- "\t.pool\n"
- "_080E7C74:\n"
- "\tmov r1, r9\n"
- "_080E7C76:\n"
- "\tldr r0, [sp, 0x40]\n"
- "\tsubs r0, 0x1\n"
- "\tcmp r0, 0x1\n"
- "\tbhi _080E7CEE\n"
- "\tadds r2, r5, 0\n"
- "\tadds r2, 0x37\n"
- "\tmovs r0, 0xF\n"
- "\tands r4, r0\n"
- "\tldrb r0, [r2]\n"
- "\tmov r3, r10\n"
- "\tands r0, r3\n"
- "\torrs r0, r4\n"
- "\tlsls r1, 4\n"
- "\tmovs r3, 0xF\n"
- "\tands r0, r3\n"
- "\torrs r0, r1\n"
- "\tstrb r0, [r2]\n"
- "\tb _080E7CEE\n"
- "_080E7C9A:\n"
- "\tmov r0, r9\n"
- "\tcmp r0, 0x1\n"
- "\tbne _080E7CEE\n"
- "\tadds r0, r5, 0\n"
- "\tadds r0, 0x24\n"
- "\tbl IsStringJapanese\n"
- "\tcmp r0, 0\n"
- "\tbeq _080E7CBA\n"
- "\tadds r0, r5, 0\n"
- "\tadds r0, 0x37\n"
- "\tldrb r1, [r0]\n"
- "\tmov r2, r10\n"
- "\tands r1, r2\n"
- "\tmovs r2, 0x1\n"
- "\tb _080E7CC6\n"
- "_080E7CBA:\n"
- "\tadds r0, r5, 0\n"
- "\tadds r0, 0x37\n"
- "\tldrb r1, [r0]\n"
- "\tmov r3, r10\n"
- "\tands r1, r3\n"
- "\tmovs r2, 0x2\n"
- "_080E7CC6:\n"
- "\torrs r1, r2\n"
- "\tstrb r1, [r0]\n"
- "\tadds r4, r0, 0\n"
- "\tadds r0, r5, 0\n"
- "\tadds r0, 0x2C\n"
- "\tbl IsStringJapanese\n"
- "\tcmp r0, 0\n"
- "\tbeq _080E7CE2\n"
- "\tldrb r0, [r4]\n"
- "\tmovs r1, 0xF\n"
- "\tands r1, r0\n"
- "\tmovs r0, 0x10\n"
- "\tb _080E7CEA\n"
- "_080E7CE2:\n"
- "\tldrb r0, [r4]\n"
- "\tmovs r1, 0xF\n"
- "\tands r1, r0\n"
- "\tmovs r0, 0x20\n"
- "_080E7CEA:\n"
- "\torrs r1, r0\n"
- "\tstrb r1, [r4]\n"
- "_080E7CEE:\n"
- "\tadds r0, r6, 0x1\n"
- "\tlsls r0, 16\n"
- "\tlsrs r6, r0, 16\n"
- "\tldr r0, [r7, 0x70]\n"
- "\tcmp r6, r0\n"
- "\tbcc _080E7C24\n"
- "_080E7CFA:\n"
- "\tmov r0, r8\n"
- "\tadds r0, 0x1\n"
- "\tlsls r0, 16\n"
- "\tlsrs r0, 16\n"
- "\tmov r8, r0\n"
- "_080E7D04:\n"
- "\tbl GetLinkPlayerCount\n"
- "\tlsls r0, 24\n"
- "\tlsrs r0, 24\n"
- "\tcmp r8, r0\n"
- "\tbcs _080E7D12\n"
- "\tb _080E7BF8\n"
- "_080E7D12:\n"
- "\tmovs r0, 0\n"
- "\tstr r0, [sp, 0x34]\n"
- "\tmov r8, r0\n"
- "\tldr r1, [sp, 0x54]\n"
- "\tlsrs r0, r1, 16\n"
- "\tldr r2, [sp, 0x34]\n"
- "\tcmp r2, r0\n"
- "\tbcs _080E7D70\n"
- "\tadds r5, r0, 0\n"
- "_080E7D24:\n"
- "\tldr r3, [sp, 0x30]\n"
- "\tmov r0, r8\n"
- "\tmuls r0, r3\n"
- "\tldr r1, [sp, 0x2C]\n"
- "\tadds r7, r1, r0\n"
- "\tldr r0, [r7, 0x70]\n"
- "\tcmp r0, 0\n"
- "\tbeq _080E7D62\n"
- "\tmovs r6, 0\n"
- "\tcmp r6, r0\n"
- "\tbcs _080E7D62\n"
- "\tadds r3, r7, 0\n"
- "\tadds r3, 0x74\n"
- "\tldr r2, [sp, 0x4C]\n"
- "\tmov r0, r8\n"
- "\tlsls r1, r0, 1\n"
- "\tmovs r4, 0x1\n"
- "_080E7D46:\n"
- "\tlsls r0, r6, 1\n"
- "\tadds r0, r3, r0\n"
- "\tldrh r0, [r0]\n"
- "\tcmp r0, 0\n"
- "\tbne _080E7D56\n"
- "\tadds r0, r6, r1\n"
- "\tadds r0, r2, r0\n"
- "\tstrb r4, [r0]\n"
- "_080E7D56:\n"
- "\tadds r0, r6, 0x1\n"
- "\tlsls r0, 16\n"
- "\tlsrs r6, r0, 16\n"
- "\tldr r0, [r7, 0x70]\n"
- "\tcmp r6, r0\n"
- "\tbcc _080E7D46\n"
- "_080E7D62:\n"
- "\tmov r0, r8\n"
- "\tadds r0, 0x1\n"
- "\tlsls r0, 16\n"
- "\tlsrs r0, 16\n"
- "\tmov r8, r0\n"
- "\tcmp r8, r5\n"
- "\tbcc _080E7D24\n"
- "_080E7D70:\n"
- "\tmovs r6, 0\n"
- "\tmov r8, r6\n"
- "\tldr r1, [sp, 0x54]\n"
- "\tcmp r1, 0\n"
- "\tbeq _080E7E64\n"
- "\tadd r2, sp, 0x24\n"
- "\tmov r10, r2\n"
- "\tmovs r3, 0x25\n"
- "\tadd r3, sp\n"
- "\tmov r9, r3\n"
- "_080E7D84:\n"
- "\tldr r1, [sp, 0x30]\n"
- "\tmov r0, r8\n"
- "\tmuls r0, r1\n"
- "\tldr r2, [sp, 0x2C]\n"
- "\tadds r7, r2, r0\n"
- "\tmov r3, r8\n"
- "\tlsls r1, r3, 1\n"
- "\tldr r2, [sp, 0x4C]\n"
- "\tadds r0, r2, r1\n"
- "\tldrb r0, [r0]\n"
- "\tcmp r0, 0x1\n"
- "\tbeq _080E7DA6\n"
- "\tldr r3, [sp, 0x50]\n"
- "\tadds r0, r3, r1\n"
- "\tldrb r0, [r0]\n"
- "\tcmp r0, 0x1\n"
- "\tbne _080E7DB0\n"
- "_080E7DA6:\n"
- "\tldr r0, [sp, 0x34]\n"
- "\tadds r0, 0x1\n"
- "\tlsls r0, 24\n"
- "\tlsrs r0, 24\n"
- "\tstr r0, [sp, 0x34]\n"
- "_080E7DB0:\n"
- "\tldr r2, [sp, 0x4C]\n"
- "\tadds r0, r2, r1\n"
- "\tldrb r0, [r0]\n"
- "\tcmp r0, 0x1\n"
- "\tbne _080E7DD4\n"
- "\tldr r3, [sp, 0x50]\n"
- "\tadds r0, r3, r1\n"
- "\tldrb r2, [r0]\n"
- "\tcmp r2, 0\n"
- "\tbne _080E7DD4\n"
- "_080E7DC4:\n"
- "\tlsls r1, r6, 1\n"
- "\tmov r3, r10\n"
- "\tadds r0, r3, r1\n"
- "\tmov r3, r8\n"
- "\tstrb r3, [r0]\n"
- "\tadd r1, r9\n"
- "\tstrb r2, [r1]\n"
- "\tb _080E7E4E\n"
- "_080E7DD4:\n"
- "\tldr r2, [sp, 0x4C]\n"
- "\tadds r0, r2, r1\n"
- "\tldrb r0, [r0]\n"
- "\tcmp r0, 0\n"
- "\tbne _080E7DE8\n"
- "\tldr r3, [sp, 0x50]\n"
- "\tadds r0, r3, r1\n"
- "\tldrb r2, [r0]\n"
- "\tcmp r2, 0x1\n"
- "\tbeq _080E7DC4\n"
- "_080E7DE8:\n"
- "\tldr r2, [sp, 0x4C]\n"
- "\tadds r0, r2, r1\n"
- "\tldrb r0, [r0]\n"
- "\tcmp r0, 0x1\n"
- "\tbne _080E7E54\n"
- "\tldr r3, [sp, 0x50]\n"
- "\tadds r0, r3, r1\n"
- "\tldrb r0, [r0]\n"
- "\tcmp r0, 0x1\n"
- "\tbne _080E7E54\n"
- "\tlsls r5, r6, 1\n"
- "\tmov r1, r10\n"
- "\tadds r0, r1, r5\n"
- "\tmov r2, r8\n"
- "\tstrb r2, [r0]\n"
- "\tadds r0, r7, 0\n"
- "\tbl sub_80E7A9C\n"
- "\tadds r4, r0, 0\n"
- "\tlsls r4, 24\n"
- "\tlsrs r4, 24\n"
- "\tadds r0, r7, 0\n"
- "\tadds r0, 0x38\n"
- "\tbl sub_80E7A9C\n"
- "\tlsls r0, 24\n"
- "\tlsrs r1, r0, 24\n"
- "\tcmp r4, 0\n"
- "\tbne _080E7E30\n"
- "\tcmp r1, 0\n"
- "\tbeq _080E7E34\n"
- "\tmov r3, r9\n"
- "\tadds r1, r3, r5\n"
- "\tmovs r0, 0x1\n"
- "\tstrb r0, [r1]\n"
- "\tb _080E7E4E\n"
- "_080E7E30:\n"
- "\tcmp r1, 0\n"
- "\tbeq _080E7E48\n"
- "_080E7E34:\n"
- "\tbl Random2\n"
- "\tmov r1, r9\n"
- "\tadds r2, r1, r5\n"
- "\tlsls r0, 16\n"
- "\tlsrs r0, 16\n"
- "\tmovs r1, 0x1\n"
- "\tands r0, r1\n"
- "\tstrb r0, [r2]\n"
- "\tb _080E7E4E\n"
- "_080E7E48:\n"
- "\tmov r2, r9\n"
- "\tadds r0, r2, r5\n"
- "\tstrb r1, [r0]\n"
- "_080E7E4E:\n"
- "\tadds r0, r6, 0x1\n"
- "\tlsls r0, 16\n"
- "\tlsrs r6, r0, 16\n"
- "_080E7E54:\n"
- "\tmov r0, r8\n"
- "\tadds r0, 0x1\n"
- "\tlsls r0, 16\n"
- "\tlsrs r3, r0, 16\n"
- "\tmov r8, r3\n"
- "\tldr r1, [sp, 0x54]\n"
- "\tcmp r0, r1\n"
- "\tbcc _080E7D84\n"
- "_080E7E64:\n"
- "\tmovs r2, 0\n"
- "\tmov r8, r2\n"
- "\tldr r3, [sp, 0x44]\n"
- "\tlsls r0, r3, 4\n"
- "\tsubs r0, r3\n"
- "\tlsls r0, 3\n"
- "\tldr r1, [sp, 0x2C]\n"
- "\tadds r7, r1, r0\n"
- "\tldr r1, [sp, 0x48]\n"
- "_080E7E76:\n"
- "\tmov r2, r8\n"
- "\tlsls r0, r2, 2\n"
- "\tadds r0, r1, r0\n"
- "\tstr r7, [r0]\n"
- "\tmov r0, r8\n"
- "\tadds r0, 0x1\n"
- "\tlsls r0, 16\n"
- "\tlsrs r0, 16\n"
- "\tmov r8, r0\n"
- "\tcmp r0, 0x3\n"
- "\tbls _080E7E76\n"
- "\tbl sub_80E7B54\n"
- "\tlsls r0, 24\n"
- "\tlsrs r0, 24\n"
- "\tmovs r1, 0x3\n"
- "\tbl __umodsi3\n"
- "\tlsls r0, 24\n"
- "\tlsrs r1, r0, 24\n"
- "\tldr r3, [sp, 0x34]\n"
- "\tcmp r3, 0x3\n"
- "\tbeq _080E7EC8\n"
- "\tcmp r3, 0x3\n"
- "\tbgt _080E7EAE\n"
- "\tcmp r3, 0x2\n"
- "\tbeq _080E7EB6\n"
- "\tb _080E7F1C\n"
- "_080E7EAE:\n"
- "\tldr r0, [sp, 0x34]\n"
- "\tcmp r0, 0x4\n"
- "\tbeq _080E7EE8\n"
- "\tb _080E7F1C\n"
- "_080E7EB6:\n"
- "\tadd r2, sp, 0x24\n"
- "\tmovs r0, 0x1\n"
- "\tstr r0, [sp]\n"
- "\tldr r0, [sp, 0x2C]\n"
- "\tldr r1, [sp, 0x30]\n"
- "\tmovs r3, 0\n"
- "\tbl sub_80E7AA4\n"
- "\tb _080E7F1C\n"
- "_080E7EC8:\n"
- "\tldr r0, =gUnknown_0858CFB8\n"
- "\tlsls r1, 1\n"
- "\tadds r2, r1, r0\n"
- "\tldrb r3, [r2]\n"
- "\tadds r0, 0x1\n"
- "\tadds r1, r0\n"
- "\tldrb r0, [r1]\n"
- "\tadd r2, sp, 0x24\n"
- "\tstr r0, [sp]\n"
- "\tldr r0, [sp, 0x2C]\n"
- "\tldr r1, [sp, 0x30]\n"
- "\tbl sub_80E7AA4\n"
- "\tb _080E7F1C\n"
- "\t.pool\n"
- "_080E7EE8:\n"
- "\tadd r6, sp, 0x24\n"
- "\tldr r4, =gUnknown_0858CFBE\n"
- "\tlsls r5, r1, 2\n"
- "\tadds r0, r5, r4\n"
- "\tldrb r3, [r0]\n"
- "\tadds r0, r4, 0x1\n"
- "\tadds r0, r5, r0\n"
- "\tldrb r0, [r0]\n"
- "\tstr r0, [sp]\n"
- "\tldr r0, [sp, 0x2C]\n"
- "\tldr r1, [sp, 0x30]\n"
- "\tadds r2, r6, 0\n"
- "\tbl sub_80E7AA4\n"
- "\tadds r0, r4, 0x2\n"
- "\tadds r0, r5, r0\n"
- "\tldrb r3, [r0]\n"
- "\tadds r4, 0x3\n"
- "\tadds r5, r4\n"
- "\tldrb r0, [r5]\n"
- "\tstr r0, [sp]\n"
- "\tldr r0, [sp, 0x2C]\n"
- "\tldr r1, [sp, 0x30]\n"
- "\tadds r2, r6, 0\n"
- "\tbl sub_80E7AA4\n"
- "_080E7F1C:\n"
- "\tldr r1, [sp, 0x2C]\n"
- "\tldr r2, [sp, 0x44]\n"
- "\tadds r7, r1, r2\n"
- "\tldr r4, =gSaveBlock1Ptr\n"
- "\tldr r0, [r4]\n"
- "\tmovs r3, 0xC2\n"
- "\tlsls r3, 6\n"
- "\tadds r0, r3\n"
- "\tadds r1, r7, 0\n"
- "\tmovs r2, 0x38\n"
- "\tbl memcpy\n"
- "\tldr r0, [r4]\n"
- "\tldr r1, =0x0000310c\n"
- "\tadds r0, r1\n"
- "\tadds r1, r7, 0\n"
- "\tadds r1, 0x38\n"
- "\tmovs r2, 0x38\n"
- "\tbl memcpy\n"
- "\tldr r0, [sp, 0x38]\n"
- "\tbl SeedRng\n"
- "\tadd sp, 0x58\n"
- "\tpop {r3-r5}\n"
- "\tmov r8, r3\n"
- "\tmov r9, r4\n"
- "\tmov r10, r5\n"
- "\tpop {r4-r7}\n"
- "\tpop {r0}\n"
- "\tbx r0\n"
- "\t.pool");
-}
-#endif // NONMATCHING
+
static void ReceiveGiftItem(u16 *item, u8 which)
{
@@ -1481,14 +954,14 @@ static void sub_80E7FF8(u8 taskId)
task->data[0] = 6;
break;
case 2:
- sub_8076D5C();
+ SetContinueGameWarpStatusToDynamicWarp();
sub_8153430();
task->data[0] ++;
break;
case 3:
if (sub_8153474())
{
- sav2_gender2_inplace_and_xFE();
+ ClearContinueGameWarpStatus2();
task->data[0] = 4;
task->data[1] = 0;
}
@@ -1530,7 +1003,7 @@ static void sub_80E7FF8(u8 taskId)
task->data[0] ++;
break;
case 9:
- if (sub_800A520())
+ if (IsLinkTaskFinished())
DestroyTask(taskId);
break;
}
diff --git a/src/region_map.c b/src/region_map.c
index 4caf3147a..ff0c19167 100644
--- a/src/region_map.c
+++ b/src/region_map.c
@@ -25,6 +25,7 @@
#include "constants/region_map_sections.h"
#include "heal_location.h"
#include "constants/heal_locations.h"
+#include "constants/map_types.h"
#define MAP_WIDTH 28
#define MAP_HEIGHT 15
@@ -427,82 +428,82 @@ bool8 sub_8122DB0(void)
{
switch (gRegionMap->initStep)
{
- case 0:
- if (gRegionMap->bgManaged)
- {
- decompress_and_copy_tile_data_to_vram(gRegionMap->bgNum, sRegionMapBkgnd_GfxLZ, 0, 0, 0);
- }
- else
- {
- LZ77UnCompVram(sRegionMapBkgnd_GfxLZ, (u16 *)BG_CHAR_ADDR(2));
- }
- break;
- case 1:
- if (gRegionMap->bgManaged)
- {
- if (!free_temp_tile_data_buffers_if_possible())
- {
- decompress_and_copy_tile_data_to_vram(gRegionMap->bgNum, sRegionMapBkgnd_TilemapLZ, 0, 0, 1);
- }
- }
- else
- {
- LZ77UnCompVram(sRegionMapBkgnd_TilemapLZ, (u16 *)BG_SCREEN_ADDR(28));
- }
- break;
- case 2:
+ case 0:
+ if (gRegionMap->bgManaged)
+ {
+ decompress_and_copy_tile_data_to_vram(gRegionMap->bgNum, sRegionMapBkgnd_GfxLZ, 0, 0, 0);
+ }
+ else
+ {
+ LZ77UnCompVram(sRegionMapBkgnd_GfxLZ, (u16 *)BG_CHAR_ADDR(2));
+ }
+ break;
+ case 1:
+ if (gRegionMap->bgManaged)
+ {
if (!free_temp_tile_data_buffers_if_possible())
{
- LoadPalette(sRegionMapBkgnd_Pal, 0x70, 0x60);
- }
- break;
- case 3:
- LZ77UnCompWram(sRegionMapCursorSmallGfxLZ, gRegionMap->cursorSmallImage);
- break;
- case 4:
- LZ77UnCompWram(sRegionMapCursorLargeGfxLZ, gRegionMap->cursorLargeImage);
- break;
- case 5:
- RegionMap_InitializeStateBasedOnPlayerLocation();
- gRegionMap->playerIconSpritePosX = gRegionMap->cursorPosX;
- gRegionMap->playerIconSpritePosY = gRegionMap->cursorPosY;
- gRegionMap->mapSecId = CorrectSpecialMapSecId_Internal(gRegionMap->mapSecId);
- gRegionMap->iconDrawType = get_flagnr_blue_points(gRegionMap->mapSecId);
- GetMapName(gRegionMap->mapSecName, gRegionMap->mapSecId, 16);
- break;
- case 6:
- if (gRegionMap->zoomed == FALSE)
- {
- CalcZoomScrollParams(0, 0, 0, 0, 0x100, 0x100, 0);
- }
- else
- {
- gRegionMap->scrollX = gRegionMap->cursorPosX * 8 - 0x34;
- gRegionMap->scrollY = gRegionMap->cursorPosY * 8 - 0x44;
- gRegionMap->zoomedCursorPosX = gRegionMap->cursorPosX;
- gRegionMap->zoomedCursorPosY = gRegionMap->cursorPosY;
- CalcZoomScrollParams(gRegionMap->scrollX, gRegionMap->scrollY, 0x38, 0x48, 0x80, 0x80, 0);
+ decompress_and_copy_tile_data_to_vram(gRegionMap->bgNum, sRegionMapBkgnd_TilemapLZ, 0, 0, 1);
}
- break;
- case 7:
- RegionMap_GetPositionOfCursorWithinMapSection();
- UpdateRegionMapVideoRegs();
- gRegionMap->cursorSprite = NULL;
- gRegionMap->playerIconSprite = NULL;
- gRegionMap->cursorMovementFrameCounter = 0;
- gRegionMap->blinkPlayerIcon = FALSE;
- if (gRegionMap->bgManaged)
- {
- SetBgAttribute(gRegionMap->bgNum, BG_CTRL_ATTR_MAPBASEINDEX, 2);
- SetBgAttribute(gRegionMap->bgNum, BG_CTRL_ATTR_VISIBLE, gRegionMap->charBaseIdx);
- SetBgAttribute(gRegionMap->bgNum, BG_CTRL_ATTR_CHARBASEINDEX, gRegionMap->mapBaseIdx);
- SetBgAttribute(gRegionMap->bgNum, BG_CTRL_ATTR_PRIORITY, 1);
- SetBgAttribute(gRegionMap->bgNum, BG_CTRL_ATTR_SCREENSIZE, 1);
- }
- gRegionMap->initStep++;
- return FALSE;
- default:
- return FALSE;
+ }
+ else
+ {
+ LZ77UnCompVram(sRegionMapBkgnd_TilemapLZ, (u16 *)BG_SCREEN_ADDR(28));
+ }
+ break;
+ case 2:
+ if (!free_temp_tile_data_buffers_if_possible())
+ {
+ LoadPalette(sRegionMapBkgnd_Pal, 0x70, 0x60);
+ }
+ break;
+ case 3:
+ LZ77UnCompWram(sRegionMapCursorSmallGfxLZ, gRegionMap->cursorSmallImage);
+ break;
+ case 4:
+ LZ77UnCompWram(sRegionMapCursorLargeGfxLZ, gRegionMap->cursorLargeImage);
+ break;
+ case 5:
+ RegionMap_InitializeStateBasedOnPlayerLocation();
+ gRegionMap->playerIconSpritePosX = gRegionMap->cursorPosX;
+ gRegionMap->playerIconSpritePosY = gRegionMap->cursorPosY;
+ gRegionMap->mapSecId = CorrectSpecialMapSecId_Internal(gRegionMap->mapSecId);
+ gRegionMap->iconDrawType = get_flagnr_blue_points(gRegionMap->mapSecId);
+ GetMapName(gRegionMap->mapSecName, gRegionMap->mapSecId, 16);
+ break;
+ case 6:
+ if (gRegionMap->zoomed == FALSE)
+ {
+ CalcZoomScrollParams(0, 0, 0, 0, 0x100, 0x100, 0);
+ }
+ else
+ {
+ gRegionMap->scrollX = gRegionMap->cursorPosX * 8 - 0x34;
+ gRegionMap->scrollY = gRegionMap->cursorPosY * 8 - 0x44;
+ gRegionMap->zoomedCursorPosX = gRegionMap->cursorPosX;
+ gRegionMap->zoomedCursorPosY = gRegionMap->cursorPosY;
+ CalcZoomScrollParams(gRegionMap->scrollX, gRegionMap->scrollY, 0x38, 0x48, 0x80, 0x80, 0);
+ }
+ break;
+ case 7:
+ RegionMap_GetPositionOfCursorWithinMapSection();
+ UpdateRegionMapVideoRegs();
+ gRegionMap->cursorSprite = NULL;
+ gRegionMap->playerIconSprite = NULL;
+ gRegionMap->cursorMovementFrameCounter = 0;
+ gRegionMap->blinkPlayerIcon = FALSE;
+ if (gRegionMap->bgManaged)
+ {
+ SetBgAttribute(gRegionMap->bgNum, BG_ATTR_SCREENSIZE, 2);
+ SetBgAttribute(gRegionMap->bgNum, BG_ATTR_CHARBASEINDEX, gRegionMap->charBaseIdx);
+ SetBgAttribute(gRegionMap->bgNum, BG_ATTR_MAPBASEINDEX, gRegionMap->mapBaseIdx);
+ SetBgAttribute(gRegionMap->bgNum, BG_ATTR_WRAPAROUND, 1);
+ SetBgAttribute(gRegionMap->bgNum, BG_ATTR_PALETTEMODE, 1);
+ }
+ gRegionMap->initStep++;
+ return FALSE;
+ default:
+ return FALSE;
}
gRegionMap->initStep++;
return TRUE;
@@ -864,7 +865,7 @@ static void RegionMap_InitializeStateBasedOnPlayerLocation(void)
u16 y;
u16 dimensionScale;
u16 xOnMap;
- struct WarpData *storedWarp;
+ struct WarpData *warp;
if (gSaveBlock1Ptr->location.mapGroup == MAP_GROUP(SS_TIDAL_CORRIDOR)
&& (gSaveBlock1Ptr->location.mapNum == MAP_NUM(SS_TIDAL_CORRIDOR)
@@ -878,11 +879,11 @@ static void RegionMap_InitializeStateBasedOnPlayerLocation(void)
switch (GetMapTypeByGroupAndId(gSaveBlock1Ptr->location.mapGroup, gSaveBlock1Ptr->location.mapNum))
{
default:
- case 1:
- case 2:
- case 3:
- case 5:
- case 6:
+ case MAP_TYPE_TOWN:
+ case MAP_TYPE_CITY:
+ case MAP_TYPE_ROUTE:
+ case MAP_TYPE_UNDERWATER:
+ case MAP_TYPE_6:
gRegionMap->mapSecId = gMapHeader.regionMapSectionId;
gRegionMap->playerIsInCave = FALSE;
mapWidth = gMapHeader.mapLayout->width;
@@ -894,17 +895,17 @@ static void RegionMap_InitializeStateBasedOnPlayerLocation(void)
gRegionMap->playerIsInCave = TRUE;
}
break;
- case 4:
- case 7:
+ case MAP_TYPE_UNDERGROUND:
+ case MAP_TYPE_7:
if (gMapHeader.flags & 0x02)
{
- mapHeader = Overworld_GetMapHeaderByGroupAndId(gSaveBlock1Ptr->warp4.mapGroup, gSaveBlock1Ptr->warp4.mapNum);
+ mapHeader = Overworld_GetMapHeaderByGroupAndId(gSaveBlock1Ptr->escapeWarp.mapGroup, gSaveBlock1Ptr->escapeWarp.mapNum);
gRegionMap->mapSecId = mapHeader->regionMapSectionId;
gRegionMap->playerIsInCave = TRUE;
mapWidth = mapHeader->mapLayout->width;
mapHeight = mapHeader->mapLayout->height;
- x = gSaveBlock1Ptr->warp4.x;
- y = gSaveBlock1Ptr->warp4.y;
+ x = gSaveBlock1Ptr->escapeWarp.x;
+ y = gSaveBlock1Ptr->escapeWarp.y;
}
else
{
@@ -916,27 +917,26 @@ static void RegionMap_InitializeStateBasedOnPlayerLocation(void)
y = 1;
}
break;
- case 9:
- mapHeader = Overworld_GetMapHeaderByGroupAndId((u16)gSaveBlock1Ptr->warp2.mapGroup, (u16)gSaveBlock1Ptr->warp2.mapNum);
+ case MAP_TYPE_SECRET_BASE:
+ mapHeader = Overworld_GetMapHeaderByGroupAndId((u16)gSaveBlock1Ptr->dynamicWarp.mapGroup, (u16)gSaveBlock1Ptr->dynamicWarp.mapNum);
gRegionMap->mapSecId = mapHeader->regionMapSectionId;
gRegionMap->playerIsInCave = TRUE;
mapWidth = mapHeader->mapLayout->width;
mapHeight = mapHeader->mapLayout->height;
- x = gSaveBlock1Ptr->warp2.x;
- y = gSaveBlock1Ptr->warp2.y;
+ x = gSaveBlock1Ptr->dynamicWarp.x;
+ y = gSaveBlock1Ptr->dynamicWarp.y;
break;
- case 8:
-
+ case MAP_TYPE_INDOOR:
gRegionMap->mapSecId = gMapHeader.regionMapSectionId;
if (gRegionMap->mapSecId != MAPSEC_DYNAMIC)
{
- storedWarp = &gSaveBlock1Ptr->warp4;
- mapHeader = Overworld_GetMapHeaderByGroupAndId(storedWarp->mapGroup, storedWarp->mapNum);
+ warp = &gSaveBlock1Ptr->escapeWarp;
+ mapHeader = Overworld_GetMapHeaderByGroupAndId(warp->mapGroup, warp->mapNum);
}
else
{
- storedWarp = &gSaveBlock1Ptr->warp2;
- mapHeader = Overworld_GetMapHeaderByGroupAndId(storedWarp->mapGroup, storedWarp->mapNum);
+ warp = &gSaveBlock1Ptr->dynamicWarp;
+ mapHeader = Overworld_GetMapHeaderByGroupAndId(warp->mapGroup, warp->mapNum);
gRegionMap->mapSecId = mapHeader->regionMapSectionId;
}
if (RegionMap_IsPlayerInCave(gRegionMap->mapSecId))
@@ -949,8 +949,8 @@ static void RegionMap_InitializeStateBasedOnPlayerLocation(void)
}
mapWidth = mapHeader->mapLayout->width;
mapHeight = mapHeader->mapLayout->height;
- x = storedWarp->x;
- y = storedWarp->y;
+ x = warp->x;
+ y = warp->y;
break;
}
@@ -1902,25 +1902,25 @@ static void sub_8124E0C(void)
switch (sFlyMap->regionMap.mapSecId)
{
case MAPSEC_SOUTHERN_ISLAND:
- sub_8084CCC(HEAL_LOCATION_SOUTHERN_ISLAND_EXTERIOR);
+ SetWarpDestinationToHealLocation(HEAL_LOCATION_SOUTHERN_ISLAND_EXTERIOR);
break;
case MAPSEC_BATTLE_FRONTIER:
- sub_8084CCC(HEAL_LOCATION_BATTLE_FRONTIER_OUTSIDE_EAST);
+ SetWarpDestinationToHealLocation(HEAL_LOCATION_BATTLE_FRONTIER_OUTSIDE_EAST);
break;
case MAPSEC_LITTLEROOT_TOWN:
- sub_8084CCC(gSaveBlock2Ptr->playerGender == MALE ? HEAL_LOCATION_LITTLEROOT_TOWN_1 : HEAL_LOCATION_LITTLEROOT_TOWN_2);
+ SetWarpDestinationToHealLocation(gSaveBlock2Ptr->playerGender == MALE ? HEAL_LOCATION_LITTLEROOT_TOWN_1 : HEAL_LOCATION_LITTLEROOT_TOWN_2);
break;
case MAPSEC_EVER_GRANDE_CITY:
- sub_8084CCC(FlagGet(FLAG_LANDMARK_POKEMON_LEAGUE) && sFlyMap->regionMap.posWithinMapSec == 0 ? HEAL_LOCATION_EVER_GRANDE_CITY_2 : HEAL_LOCATION_EVER_GRANDE_CITY_1);
+ SetWarpDestinationToHealLocation(FlagGet(FLAG_LANDMARK_POKEMON_LEAGUE) && sFlyMap->regionMap.posWithinMapSec == 0 ? HEAL_LOCATION_EVER_GRANDE_CITY_2 : HEAL_LOCATION_EVER_GRANDE_CITY_1);
break;
default:
if (sMapHealLocations[sFlyMap->regionMap.mapSecId][2] != 0)
{
- sub_8084CCC(sMapHealLocations[sFlyMap->regionMap.mapSecId][2]);
+ SetWarpDestinationToHealLocation(sMapHealLocations[sFlyMap->regionMap.mapSecId][2]);
}
else
{
- warp1_set_2(sMapHealLocations[sFlyMap->regionMap.mapSecId][0], sMapHealLocations[sFlyMap->regionMap.mapSecId][1], -1);
+ SetWarpDestinationToMapWarp(sMapHealLocations[sFlyMap->regionMap.mapSecId][0], sMapHealLocations[sFlyMap->regionMap.mapSecId][1], -1);
}
break;
}
diff --git a/src/reshow_battle_screen.c b/src/reshow_battle_screen.c
index 06d2af5b7..1b17c372c 100644
--- a/src/reshow_battle_screen.c
+++ b/src/reshow_battle_screen.c
@@ -50,8 +50,8 @@ static void CB2_ReshowBattleScreenAfterMenu(void)
case 0:
ScanlineEffect_Clear();
BattleInitBgsAndWindows();
- SetBgAttribute(1, BG_CTRL_ATTR_VISIBLE, 0);
- SetBgAttribute(2, BG_CTRL_ATTR_VISIBLE, 0);
+ SetBgAttribute(1, BG_ATTR_CHARBASEINDEX, 0);
+ SetBgAttribute(2, BG_ATTR_CHARBASEINDEX, 0);
ShowBg(0);
ShowBg(1);
ShowBg(2);
diff --git a/src/rock.c b/src/rock.c
index ff3840fb3..ebf477ec1 100644
--- a/src/rock.c
+++ b/src/rock.c
@@ -421,7 +421,7 @@ void AnimTask_LoadSandstormBackground(u8 taskId)
sub_80A6B30(&unknownStruct);
sub_80A6CC0(unknownStruct.bgId, gUnknown_08D8D58C, unknownStruct.tilesOffset);
sub_80A6D60(&unknownStruct, gUnknown_08D8D410, 0);
- LoadCompressedPalette(&gBattleAnimSpritePalette_261, unknownStruct.unk8 * 16, 32);
+ LoadCompressedPalette(gBattleAnimSpritePalette_261, unknownStruct.unk8 * 16, 32);
if (gBattleAnimArgs[0] && GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER)
var0 = 1;
diff --git a/src/rom_8011DC0.c b/src/rom_8011DC0.c
index 066f7695c..813d143d2 100644
--- a/src/rom_8011DC0.c
+++ b/src/rom_8011DC0.c
@@ -1315,7 +1315,7 @@ u32 sub_8013B8C(struct UnkStruct_Group *arg0, s32 id)
if (gUnknown_02022C2C == 4 && structPtr->unk.field_0.unk_00.unk_01_2 != 3)
{
- if (!(gSaveBlock2Ptr->specialSaveWarp & 0x80))
+ if (!(gSaveBlock2Ptr->specialSaveWarpFlags & 0x80))
return 1;
else if (structPtr->unk.field_0.unk_00.unk_00_7)
return 0;
@@ -1633,8 +1633,8 @@ void sub_8014210(u16 battleFlags)
void sub_8014290(u16 arg0, u16 x, u16 y)
{
VarSet(VAR_0x4087, arg0);
- Overworld_SetWarpDestination(gSaveBlock1Ptr->location.mapGroup, gSaveBlock1Ptr->location.mapNum, -1, x, y);
- saved_warp2_set_2(0, gSaveBlock1Ptr->location.mapGroup, gSaveBlock1Ptr->location.mapNum, -1, x, y);
+ SetWarpDestination(gSaveBlock1Ptr->location.mapGroup, gSaveBlock1Ptr->location.mapNum, -1, x, y);
+ SetDynamicWarpWithCoords(0, gSaveBlock1Ptr->location.mapGroup, gSaveBlock1Ptr->location.mapNum, -1, x, y);
WarpIntoMap();
}
@@ -1645,7 +1645,7 @@ void sub_8014304(s8 mapGroup, s8 mapNum, s32 x, s32 y, u16 arg4)
gFieldLinkPlayerCount = GetLinkPlayerCount();
gUnknown_03005DB4 = GetMultiplayerId();
SetCableClubWarp();
- Overworld_SetWarpDestination(mapGroup, mapNum, -1, x, y);
+ SetWarpDestination(mapGroup, mapNum, -1, x, y);
WarpIntoMap();
}
@@ -1697,12 +1697,12 @@ void sub_801440C(u8 taskId)
{
case 65:
case 81:
- overworld_free_bg_tilemaps();
+ CleanupOverworldWindowsAndTilemaps();
gMain.savedCallback = sub_801AC54;
sub_81B8518(3);
break;
case 1:
- overworld_free_bg_tilemaps();
+ CleanupOverworldWindowsAndTilemaps();
sub_80143E4(gBlockSendBuffer, TRUE);
HealPlayerParty();
SavePlayerParty();
@@ -1711,7 +1711,7 @@ void sub_801440C(u8 taskId)
SetMainCallback2(sub_8014384);
break;
case 2:
- overworld_free_bg_tilemaps();
+ CleanupOverworldWindowsAndTilemaps();
HealPlayerParty();
SavePlayerParty();
LoadPlayerBag();
@@ -1720,7 +1720,7 @@ void sub_801440C(u8 taskId)
SetMainCallback2(sub_8014384);
break;
case 3:
- overworld_free_bg_tilemaps();
+ CleanupOverworldWindowsAndTilemaps();
HealPlayerParty();
SavePlayerParty();
LoadPlayerBag();
@@ -1730,18 +1730,18 @@ void sub_801440C(u8 taskId)
break;
case 4:
sub_80143E4(gBlockSendBuffer, TRUE);
- overworld_free_bg_tilemaps();
+ CleanupOverworldWindowsAndTilemaps();
sub_8014304(MAP_GROUP(TRADE_CENTER), MAP_NUM(TRADE_CENTER), 5, 8, 3);
SetMainCallback2(sub_8014384);
break;
case 15:
sub_80143E4(gBlockSendBuffer, TRUE);
- overworld_free_bg_tilemaps();
+ CleanupOverworldWindowsAndTilemaps();
sub_8014304(MAP_GROUP(RECORD_CORNER), MAP_NUM(RECORD_CORNER), 8, 9, 4);
SetMainCallback2(sub_8014384);
break;
case 68:
- overworld_free_bg_tilemaps();
+ CleanupOverworldWindowsAndTilemaps();
CreateTask(sub_8013F90, 0);
break;
case 5:
@@ -1838,7 +1838,7 @@ void sub_8014790(u8 taskId)
}
break;
case 3:
- if (sub_800A520())
+ if (IsLinkTaskFinished())
{
DestroyTask(taskId);
sub_80149D8();
@@ -2095,7 +2095,7 @@ void sub_8014A40(u8 taskId)
data->state++;
break;
case 17:
- if (sub_800A520())
+ if (IsLinkTaskFinished())
DestroyTask(taskId);
break;
}
@@ -2264,7 +2264,7 @@ void sub_8014F48(u8 taskId)
sub_800ADF8();
break;
case 12:
- if (sub_800A520())
+ if (IsLinkTaskFinished())
DestroyTask(taskId);
break;
}
@@ -2443,7 +2443,7 @@ void sub_80152F4(u8 taskId)
sub_800ADF8();
break;
case 14:
- if (sub_800A520())
+ if (IsLinkTaskFinished())
DestroyTask(taskId);
break;
}
@@ -2836,7 +2836,7 @@ void sub_80156E0(u8 taskId)
}
break;
case 41:
- if (sub_800A520())
+ if (IsLinkTaskFinished())
{
if (GetMultiplayerId() == 0)
{
@@ -3033,7 +3033,7 @@ void sub_80156E0(u8 taskId)
data->state = 15;
break;
case 15:
- if (sub_800A520())
+ if (IsLinkTaskFinished())
data->state = 16;
break;
case 16:
diff --git a/src/save.c b/src/save.c
index 905f075fb..cfbe5b848 100644
--- a/src/save.c
+++ b/src/save.c
@@ -77,7 +77,7 @@ extern void DoSaveFailedScreen(u8); // save_failed_screen
extern bool32 ProgramFlashSectorAndVerify(u8 sector, u8 *data);
extern void save_serialize_map(void);
extern void sub_800ADF8(void);
-extern bool8 sub_800A520(void);
+extern bool8 IsLinkTaskFinished(void);
// iwram common
u16 gLastWrittenSector;
@@ -914,7 +914,7 @@ void sub_8153688(u8 taskId)
taskData[0] = 2;
break;
case 2:
- if (sub_800A520())
+ if (IsLinkTaskFinished())
{
if (taskData[2] == 0)
save_serialize_map();
@@ -923,7 +923,7 @@ void sub_8153688(u8 taskId)
break;
case 3:
if (taskData[2] == 0)
- sub_8076D5C();
+ SetContinueGameWarpStatusToDynamicWarp();
sub_8153380();
taskData[0] = 4;
break;
@@ -946,12 +946,12 @@ void sub_8153688(u8 taskId)
break;
case 7:
if (taskData[2] == 0)
- sav2_gender2_inplace_and_xFE();
+ ClearContinueGameWarpStatus2();
sub_800ADF8();
taskData[0] = 8;
break;
case 8:
- if (sub_800A520())
+ if (IsLinkTaskFinished())
{
sub_8153408();
taskData[0] = 9;
@@ -962,7 +962,7 @@ void sub_8153688(u8 taskId)
taskData[0] = 10;
break;
case 10:
- if (sub_800A520())
+ if (IsLinkTaskFinished())
taskData[0]++;
break;
case 11:
diff --git a/src/save_location.c b/src/save_location.c
index d49afa736..2443b3161 100644
--- a/src/save_location.c
+++ b/src/save_location.c
@@ -2,11 +2,6 @@
#include "save_location.h"
#include "constants/maps.h"
-// specialSaveWarp flags
-#define POKECENTER_SAVEWARP (1 << 1)
-#define LOBBY_SAVEWARP (1 << 2)
-#define UNK_SPECIAL_SAVE_WARP_FLAG_3 (1 << 3)
-
static bool32 IsCurMapInLocationList(const u16 *list)
{
s32 i;
@@ -94,26 +89,26 @@ static bool32 sub_81AFCEC(void)
static void TrySetPokeCenterWarpStatus(void)
{
if (IsCurMapPokeCenter() == FALSE)
- gSaveBlock2Ptr->specialSaveWarp &= ~(POKECENTER_SAVEWARP);
+ gSaveBlock2Ptr->specialSaveWarpFlags &= ~(POKECENTER_SAVEWARP);
else
- gSaveBlock2Ptr->specialSaveWarp |= POKECENTER_SAVEWARP;
+ gSaveBlock2Ptr->specialSaveWarpFlags |= POKECENTER_SAVEWARP;
}
static void TrySetReloadWarpStatus(void)
{
if (!IsCurMapReloadLocation())
- gSaveBlock2Ptr->specialSaveWarp &= ~(LOBBY_SAVEWARP);
+ gSaveBlock2Ptr->specialSaveWarpFlags &= ~(LOBBY_SAVEWARP);
else
- gSaveBlock2Ptr->specialSaveWarp |= LOBBY_SAVEWARP;
+ gSaveBlock2Ptr->specialSaveWarpFlags |= LOBBY_SAVEWARP;
}
// this function definitely sets a warp status, but because the list is empty, it's unknown what this does yet.
static void sub_81AFD5C(void)
{
if (!sub_81AFCEC())
- gSaveBlock2Ptr->specialSaveWarp &= ~(UNK_SPECIAL_SAVE_WARP_FLAG_3);
+ gSaveBlock2Ptr->specialSaveWarpFlags &= ~(UNK_SPECIAL_SAVE_WARP_FLAG_3);
else
- gSaveBlock2Ptr->specialSaveWarp |= UNK_SPECIAL_SAVE_WARP_FLAG_3;
+ gSaveBlock2Ptr->specialSaveWarpFlags |= UNK_SPECIAL_SAVE_WARP_FLAG_3;
}
void TrySetMapSaveWarpStatus(void)
@@ -136,5 +131,5 @@ void sub_81AFDA0(void)
void sub_81AFDD0(void)
{
- gSaveBlock2Ptr->specialSaveWarp |= 0x80;
+ gSaveBlock2Ptr->specialSaveWarpFlags |= 0x80;
}
diff --git a/src/scrcmd.c b/src/scrcmd.c
index ab3af019d..837259a7f 100644
--- a/src/scrcmd.c
+++ b/src/scrcmd.c
@@ -49,12 +49,12 @@
#include "trainer_see.h"
#include "tv.h"
#include "window.h"
+#include "constants/event_objects.h"
typedef u16 (*SpecialFunc)(void);
typedef void (*NativeFunc)(void);
-extern const u8 *gUnknown_020375C0;
-
+EWRAM_DATA const u8 *gUnknown_020375C0 = NULL;
static EWRAM_DATA u32 gUnknown_020375C4 = 0;
static EWRAM_DATA u16 sPauseCounter = 0;
static EWRAM_DATA u16 sMovingNpcId = 0;
@@ -735,7 +735,7 @@ bool8 ScrCmd_setmaplayoutindex(struct ScriptContext *ctx)
{
u16 value = VarGet(ScriptReadHalfword(ctx));
- sub_8085524(value);
+ SetCurrentMapLayout(value);
return FALSE;
}
@@ -747,8 +747,8 @@ bool8 ScrCmd_warp(struct ScriptContext *ctx)
u16 x = VarGet(ScriptReadHalfword(ctx));
u16 y = VarGet(ScriptReadHalfword(ctx));
- Overworld_SetWarpDestination(mapGroup, mapNum, warpId, x, y);
- sub_80AF734();
+ SetWarpDestination(mapGroup, mapNum, warpId, x, y);
+ DoWarp();
ResetInitialPlayerAvatarState();
return TRUE;
}
@@ -761,8 +761,8 @@ bool8 ScrCmd_warpsilent(struct ScriptContext *ctx)
u16 x = VarGet(ScriptReadHalfword(ctx));
u16 y = VarGet(ScriptReadHalfword(ctx));
- Overworld_SetWarpDestination(mapGroup, mapNum, warpId, x, y);
- sp13E_warp_to_last_warp();
+ SetWarpDestination(mapGroup, mapNum, warpId, x, y);
+ DoDiveWarp();
ResetInitialPlayerAvatarState();
return TRUE;
}
@@ -775,8 +775,8 @@ bool8 ScrCmd_warpdoor(struct ScriptContext *ctx)
u16 x = VarGet(ScriptReadHalfword(ctx));
u16 y = VarGet(ScriptReadHalfword(ctx));
- Overworld_SetWarpDestination(mapGroup, mapNum, warpId, x, y);
- sub_80AF7D0();
+ SetWarpDestination(mapGroup, mapNum, warpId, x, y);
+ DoDoorWarp();
ResetInitialPlayerAvatarState();
return TRUE;
}
@@ -790,10 +790,10 @@ bool8 ScrCmd_warphole(struct ScriptContext *ctx)
PlayerGetDestCoords(&x, &y);
if (mapGroup == 0xFF && mapNum == 0xFF)
- SetFixedHoleWarpAsDestination(x - 7, y - 7);
+ SetWarpDestinationToFixedHoleWarp(x - 7, y - 7);
else
- Overworld_SetWarpDestination(mapGroup, mapNum, -1, x - 7, y - 7);
- sp13F_fall_to_last_warp();
+ SetWarpDestination(mapGroup, mapNum, -1, x - 7, y - 7);
+ DoFallWarp();
ResetInitialPlayerAvatarState();
return TRUE;
}
@@ -806,7 +806,7 @@ bool8 ScrCmd_warpteleport(struct ScriptContext *ctx)
u16 x = VarGet(ScriptReadHalfword(ctx));
u16 y = VarGet(ScriptReadHalfword(ctx));
- Overworld_SetWarpDestination(mapGroup, mapNum, warpId, x, y);
+ SetWarpDestination(mapGroup, mapNum, warpId, x, y);
sub_80AF848();
ResetInitialPlayerAvatarState();
return TRUE;
@@ -820,7 +820,7 @@ bool8 ScrCmd_warpD7(struct ScriptContext *ctx)
u16 x = VarGet(ScriptReadHalfword(ctx));
u16 y = VarGet(ScriptReadHalfword(ctx));
- Overworld_SetWarpDestination(mapGroup, mapNum, warpId, x, y);
+ SetWarpDestination(mapGroup, mapNum, warpId, x, y);
sub_80AF87C();
ResetInitialPlayerAvatarState();
return TRUE;
@@ -834,7 +834,7 @@ bool8 ScrCmd_setwarp(struct ScriptContext *ctx)
u16 x = VarGet(ScriptReadHalfword(ctx));
u16 y = VarGet(ScriptReadHalfword(ctx));
- Overworld_SetWarpDestination(mapGroup, mapNum, warpId, x, y);
+ SetWarpDestination(mapGroup, mapNum, warpId, x, y);
return FALSE;
}
@@ -846,7 +846,7 @@ bool8 ScrCmd_setdynamicwarp(struct ScriptContext *ctx)
u16 x = VarGet(ScriptReadHalfword(ctx));
u16 y = VarGet(ScriptReadHalfword(ctx));
- saved_warp2_set_2(0, mapGroup, mapNum, warpId, x, y);
+ SetDynamicWarpWithCoords(0, mapGroup, mapNum, warpId, x, y);
return FALSE;
}
@@ -882,7 +882,7 @@ bool8 ScrCmd_setescapewarp(struct ScriptContext *ctx)
u16 x = VarGet(ScriptReadHalfword(ctx));
u16 y = VarGet(ScriptReadHalfword(ctx));
- sub_8084DD4(mapGroup, mapNum, warpId, x, y);
+ SetEscapeWarp(mapGroup, mapNum, warpId, x, y);
return FALSE;
}
@@ -1239,11 +1239,11 @@ bool8 ScrCmd_lock(struct ScriptContext *ctx)
bool8 ScrCmd_releaseall(struct ScriptContext *ctx)
{
- u8 objectId;
+ u8 playerObjectId;
HideFieldMessageBox();
- objectId = GetEventObjectIdByLocalIdAndMap(0xFF, 0, 0);
- EventObjectClearHeldMovementIfFinished(&gEventObjects[objectId]);
+ playerObjectId = GetEventObjectIdByLocalIdAndMap(EVENT_OBJ_ID_PLAYER, 0, 0);
+ EventObjectClearHeldMovementIfFinished(&gEventObjects[playerObjectId]);
sub_80D338C();
UnfreezeEventObjects();
return FALSE;
@@ -1251,13 +1251,13 @@ bool8 ScrCmd_releaseall(struct ScriptContext *ctx)
bool8 ScrCmd_release(struct ScriptContext *ctx)
{
- u8 objectId;
+ u8 playerObjectId;
HideFieldMessageBox();
if (gEventObjects[gSelectedEventObject].active)
EventObjectClearHeldMovementIfFinished(&gEventObjects[gSelectedEventObject]);
- objectId = GetEventObjectIdByLocalIdAndMap(0xFF, 0, 0);
- EventObjectClearHeldMovementIfFinished(&gEventObjects[objectId]);
+ playerObjectId = GetEventObjectIdByLocalIdAndMap(EVENT_OBJ_ID_PLAYER, 0, 0);
+ EventObjectClearHeldMovementIfFinished(&gEventObjects[playerObjectId]);
sub_80D338C();
UnfreezeEventObjects();
return FALSE;
@@ -1998,7 +1998,7 @@ bool8 ScrCmd_setrespawn(struct ScriptContext *ctx)
{
u16 healLocationId = VarGet(ScriptReadHalfword(ctx));
- Overworld_SetHealLocationWarp(healLocationId);
+ SetLastHealLocationWarp(healLocationId);
return FALSE;
}
@@ -2235,7 +2235,7 @@ bool8 ScrCmd_warpD1(struct ScriptContext *ctx)
u16 x = VarGet(ScriptReadHalfword(ctx));
u16 y = VarGet(ScriptReadHalfword(ctx));
- Overworld_SetWarpDestination(mapGroup, mapNum, warpId, x, y);
+ SetWarpDestination(mapGroup, mapNum, warpId, x, y);
sub_808D074(GetPlayerFacingDirection());
sub_80B0244();
ResetInitialPlayerAvatarState();
@@ -2289,7 +2289,7 @@ bool8 ScrCmd_warpE0(struct ScriptContext *ctx)
u16 x = VarGet(ScriptReadHalfword(ctx));
u16 y = VarGet(ScriptReadHalfword(ctx));
- Overworld_SetWarpDestination(mapGroup, mapNum, warpId, x, y);
+ SetWarpDestination(mapGroup, mapNum, warpId, x, y);
sub_80AF79C();
ResetInitialPlayerAvatarState();
return TRUE;
diff --git a/src/script_pokemon_util_80F87D8.c b/src/script_pokemon_util_80F87D8.c
index 102e80064..15e91ac98 100755
--- a/src/script_pokemon_util_80F87D8.c
+++ b/src/script_pokemon_util_80F87D8.c
@@ -451,7 +451,7 @@ static void sub_80F9088(u8 taskId)
switch (gTasks[taskId].data[0])
{
case 0:
- if (sub_800A520())
+ if (IsLinkTaskFinished())
{
sub_800ADF8();
gTasks[taskId].data[0]++;
@@ -461,7 +461,7 @@ static void sub_80F9088(u8 taskId)
gTasks[taskId].data[0]++;
break;
default:
- if (sub_800A520() == 1)
+ if (IsLinkTaskFinished() == 1)
{
EnableBothScriptContexts();
DestroyTask(taskId);
diff --git a/src/secret_base.c b/src/secret_base.c
index 7e7b10a9a..dbb3c9be4 100644
--- a/src/secret_base.c
+++ b/src/secret_base.c
@@ -366,7 +366,7 @@ void sub_80E8F9C(void)
s8 idx;
idx = sCurSecretBaseId / 10 * 4;
- warp1_set_2(MAP_GROUP(SECRET_BASE_RED_CAVE1), gUnknown_0858CFE8[idx], gUnknown_0858CFE8[idx + 1]);
+ SetWarpDestinationToMapWarp(MAP_GROUP(SECRET_BASE_RED_CAVE1), gUnknown_0858CFE8[idx], gUnknown_0858CFE8[idx + 1]);
}
void sub_80E8FD0(u8 taskId)
@@ -400,7 +400,7 @@ void sub_80E9068(void)
{
CreateTask(sub_80E8FD0, 0);
FadeScreen(1, 0);
- saved_warp2_set(0, gSaveBlock1Ptr->location.mapGroup, gSaveBlock1Ptr->location.mapNum, -1);
+ SetDynamicWarp(0, gSaveBlock1Ptr->location.mapGroup, gSaveBlock1Ptr->location.mapNum, -1);
}
bool8 sub_80E909C(void)
@@ -445,7 +445,7 @@ void sub_80E916C(u8 taskId)
if (!gPaletteFade.active)
{
idx = sCurSecretBaseId / 10 * 4;
- Overworld_SetWarpDestination(gSaveBlock1Ptr->location.mapGroup, gSaveBlock1Ptr->location.mapNum, -1, gUnknown_0858CFE8[idx + 2], gUnknown_0858CFE8[idx + 3]);
+ SetWarpDestination(gSaveBlock1Ptr->location.mapGroup, gSaveBlock1Ptr->location.mapNum, -1, gUnknown_0858CFE8[idx + 2], gUnknown_0858CFE8[idx + 3]);
WarpIntoMap();
gFieldCallback = sub_80E9108;
SetMainCallback2(CB2_LoadMap);
@@ -610,7 +610,7 @@ void sub_80E9608(const struct MapPosition *position, const struct MapEvents *eve
}
}
-void sub_80E9668(const struct MapPosition *position, const struct MapEvents *events)
+void WarpIntoSecretBase(const struct MapPosition *position, const struct MapEvents *events)
{
sub_80E9608(position, events);
sub_80E8B6C();
@@ -643,7 +643,7 @@ void sub_80E96A4(u8 taskId)
}
break;
case 2:
- copy_saved_warp2_bank_and_enter_x_to_warp1(0x7e);
+ SetWarpDestinationToDynamicWarp(0x7e);
WarpIntoMap();
gFieldCallback = mapldr_default;
SetMainCallback2(CB2_LoadMap);
@@ -1170,7 +1170,7 @@ void sub_80EA354(void)
gSpecialVar_Result = gSaveBlock1Ptr->secretBases[secretBaseRecordId].sbr_field_1_5;
}
-void sub_80EA3E4(u8 taskId)
+void SecretBasePerStepCallback(u8 taskId)
{
s16 x;
s16 y;
diff --git a/src/start_menu.c b/src/start_menu.c
index ad7b4b6cc..0f608b1d2 100644
--- a/src/start_menu.c
+++ b/src/start_menu.c
@@ -623,7 +623,7 @@ static bool8 StartMenuPokedexCallback(void)
IncrementGameStat(GAME_STAT_CHECKED_POKEDEX);
PlayRainSoundEffect();
RemoveExtraStartMenuWindows();
- overworld_free_bg_tilemaps();
+ CleanupOverworldWindowsAndTilemaps();
SetMainCallback2(CB2_Pokedex);
return TRUE;
@@ -638,7 +638,7 @@ static bool8 StartMenuPokemonCallback(void)
{
PlayRainSoundEffect();
RemoveExtraStartMenuWindows();
- overworld_free_bg_tilemaps();
+ CleanupOverworldWindowsAndTilemaps();
SetMainCallback2(CB2_PartyMenuFromStartMenu); // Display party menu
return TRUE;
@@ -653,7 +653,7 @@ static bool8 StartMenuBagCallback(void)
{
PlayRainSoundEffect();
RemoveExtraStartMenuWindows();
- overworld_free_bg_tilemaps();
+ CleanupOverworldWindowsAndTilemaps();
SetMainCallback2(CB2_BagMenuFromStartMenu); // Display bag menu
return TRUE;
@@ -668,7 +668,7 @@ static bool8 StartMenuPokeNavCallback(void)
{
PlayRainSoundEffect();
RemoveExtraStartMenuWindows();
- overworld_free_bg_tilemaps();
+ CleanupOverworldWindowsAndTilemaps();
SetMainCallback2(CB2_PokeNav); // Display PokeNav
return TRUE;
@@ -683,7 +683,7 @@ static bool8 StartMenuPlayerNameCallback(void)
{
PlayRainSoundEffect();
RemoveExtraStartMenuWindows();
- overworld_free_bg_tilemaps();
+ CleanupOverworldWindowsAndTilemaps();
if (is_c1_link_related_active() || InUnionRoom())
{
@@ -722,7 +722,7 @@ static bool8 StartMenuOptionCallback(void)
{
PlayRainSoundEffect();
RemoveExtraStartMenuWindows();
- overworld_free_bg_tilemaps();
+ CleanupOverworldWindowsAndTilemaps();
SetMainCallback2(CB2_InitOptionMenu); // Display option menu
gMain.savedCallback = CB2_ReturnToFieldWithOpenMenu;
@@ -754,7 +754,7 @@ static bool8 StartMenuLinkModePlayerNameCallback(void)
if (!gPaletteFade.active)
{
PlayRainSoundEffect();
- overworld_free_bg_tilemaps();
+ CleanupOverworldWindowsAndTilemaps();
TrainerCard_ShowLinkCard(gUnknown_03005DB4, CB2_ReturnToFieldWithOpenMenu);
return TRUE;
@@ -784,7 +784,7 @@ static bool8 StartMenuBattlePyramidBagCallback(void)
{
PlayRainSoundEffect();
RemoveExtraStartMenuWindows();
- overworld_free_bg_tilemaps();
+ CleanupOverworldWindowsAndTilemaps();
SetMainCallback2(CB2_PyramidBagMenuFromStartMenu);
return TRUE;
@@ -1285,14 +1285,14 @@ static void sub_80A0550(u8 taskId)
}
break;
case 1:
- sub_8076D5C();
+ SetContinueGameWarpStatusToDynamicWarp();
sub_8153430();
*step = 2;
break;
case 2:
if (sub_8153474())
{
- sav2_gender2_inplace_and_xFE();
+ ClearContinueGameWarpStatus2();
*step = 3;
gSoftResetDisabled = 0;
}
diff --git a/src/starter_choose.c b/src/starter_choose.c
index afa3fabbf..2d4a1b1e1 100644
--- a/src/starter_choose.c
+++ b/src/starter_choose.c
@@ -425,7 +425,7 @@ void CB2_ChooseStarter(void)
SetGpuReg(REG_OFFSET_WINOUT, 0x1F);
SetGpuReg(REG_OFFSET_WIN0H, 0);
SetGpuReg(REG_OFFSET_WIN0V, 0);
- SetGpuReg(REG_OFFSET_BLDCNT, 0xFE);
+ SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT1_BG1 | BLDCNT_TGT1_BG2 | BLDCNT_TGT1_BG3 | BLDCNT_TGT1_OBJ | BLDCNT_TGT1_BD | BLDCNT_EFFECT_DARKEN);
SetGpuReg(REG_OFFSET_BLDALPHA, 0);
SetGpuReg(REG_OFFSET_BLDY, 7);
SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_WIN0_ON | DISPCNT_OBJ_ON | DISPCNT_OBJ_1D_MAP);
diff --git a/src/title_screen.c b/src/title_screen.c
index c6e9aa26f..48571ff96 100644
--- a/src/title_screen.c
+++ b/src/title_screen.c
@@ -553,7 +553,7 @@ void CB2_InitTitleScreen(void)
SetGpuReg(REG_OFFSET_WIN1V, 0);
SetGpuReg(REG_OFFSET_WININ, 0x1F1F);
SetGpuReg(REG_OFFSET_WINOUT, 0x3F1F);
- SetGpuReg(REG_OFFSET_BLDCNT, 0x84);
+ SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT1_BG2 | BLDCNT_EFFECT_LIGHTEN);
SetGpuReg(REG_OFFSET_BLDALPHA, 0);
SetGpuReg(REG_OFFSET_BLDY, 0xC);
SetGpuReg(REG_OFFSET_BG0CNT, BGCNT_PRIORITY(3) | BGCNT_CHARBASE(2) | BGCNT_SCREENBASE(26) | BGCNT_16COLOR | BGCNT_TXT256x256);
@@ -615,8 +615,8 @@ static void Task_TitleScreenPhase1(u8 taskId)
SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_1 | DISPCNT_OBJ_1D_MAP | DISPCNT_BG2_ON | DISPCNT_OBJ_ON);
SetGpuReg(REG_OFFSET_WININ, 0);
SetGpuReg(REG_OFFSET_WINOUT, 0);
- SetGpuReg(REG_OFFSET_BLDCNT, 0x3F50);
- SetGpuReg(REG_OFFSET_BLDALPHA, 0x10);
+ SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT1_OBJ | BLDCNT_EFFECT_BLEND | BLDCNT_TGT2_ALL);
+ SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(16, 0));
SetGpuReg(REG_OFFSET_BLDY, 0);
// Create left side of version banner
@@ -652,8 +652,8 @@ static void Task_TitleScreenPhase2(u8 taskId)
else
{
gTasks[taskId].tSkipToNext = TRUE;
- SetGpuReg(REG_OFFSET_BLDCNT, 0x2142);
- SetGpuReg(REG_OFFSET_BLDALPHA, 0xF06);
+ SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT1_BG1 | BLDCNT_EFFECT_BLEND | BLDCNT_TGT2_BG0 | BLDCNT_TGT2_BD);
+ SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(6, 15));
SetGpuReg(REG_OFFSET_BLDY, 0);
SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_1
| DISPCNT_OBJ_1D_MAP
diff --git a/src/trade.c b/src/trade.c
new file mode 100644
index 000000000..ccdd43986
--- /dev/null
+++ b/src/trade.c
@@ -0,0 +1,6389 @@
+#include "global.h"
+#include "alloc.h"
+#include "battle_anim.h"
+#include "battle_interface.h"
+#include "bg.h"
+#include "cable_club.h"
+#include "data2.h"
+#include "daycare.h"
+#include "decompress.h"
+#include "event_data.h"
+#include "evolution_scene.h"
+#include "field_screen_effect.h"
+#include "gpu_regs.h"
+#include "graphics.h"
+#include "international_string_util.h"
+#include "librfu.h"
+#include "link.h"
+#include "link_rfu.h"
+#include "load_save.h"
+#include "mail.h"
+#include "main.h"
+#include "overworld.h"
+#include "palette.h"
+#include "party_menu.h"
+#include "pokeball.h"
+#include "pokedex.h"
+#include "pokemon_icon.h"
+#include "pokemon_summary_screen.h"
+#include "random.h"
+#include "rom_8011DC0.h"
+#include "save.h"
+#include "script.h"
+#include "sound.h"
+#include "string_util.h"
+#include "strings.h"
+#include "task.h"
+#include "text.h"
+#include "text_window.h"
+#include "trainer_card.h"
+#include "trade.h"
+#include "util.h"
+#include "window.h"
+#include "constants/easy_chat.h"
+#include "constants/items.h"
+#include "constants/moves.h"
+#include "constants/species.h"
+#include "constants/songs.h"
+#include "constants/rgb.h"
+
+#define Trade_SendData(ptr) (SendBlock(bitmask_all_link_players_but_self(), ptr->linkData, 20))
+
+struct InGameTrade {
+ /*0x00*/ u8 name[11];
+ /*0x0C*/ u16 species;
+ /*0x0E*/ u8 ivs[6];
+ /*0x14*/ bool8 secondAbility;
+ /*0x18*/ u32 otId;
+ /*0x1C*/ u8 stats[5];
+ /*0x24*/ u32 personality;
+ /*0x28*/ u16 heldItem;
+ /*0x2A*/ u8 mailNum;
+ /*0x2B*/ u8 otName[11];
+ /*0x36*/ u8 otGender;
+ /*0x37*/ u8 sheen;
+ /*0x38*/ u16 playerSpecies;
+};
+
+static EWRAM_DATA u8 *gUnknown_02032184 = NULL;
+static EWRAM_DATA u8 *gUnknown_02032188[14] = {NULL};
+EWRAM_DATA struct MailStruct gUnknown_020321C0[PARTY_SIZE] = {0};
+EWRAM_DATA u8 gUnknown_02032298[2] = {0};
+static EWRAM_DATA struct {
+ /*0x0000*/ u8 unk_0;
+ /*0x0001*/ u8 unk_1;
+ /*0x0002*/ u8 filler_2[0x28 - 2];
+ /*0x0028*/ u8 partyIcons[2][PARTY_SIZE];
+ /*0x0034*/ u8 tradeMenuCursorSpriteIdx;
+ /*0x0035*/ u8 tradeMenuCursorPosition;
+ /*0x0036*/ u8 partyCounts[2];
+ /*0x0038*/ bool8 tradeMenuOptionsActive[12];
+ /*0x0044*/ u8 unk_44;
+ /*0x0045*/ u8 unk_45[2][PARTY_SIZE];
+ /*0x0051*/ u8 unk_51[2][PARTY_SIZE];
+ /*0x005D*/ u8 unk_5D[2][PARTY_SIZE];
+ /*0x0069*/ u8 unk_69;
+ /*0x006A*/ u8 filler_6A[0x6F - 0x6A];
+ /*0x006F*/ u8 unk_6F;
+ /*0x0070*/ u8 unk_70;
+ /*0x0071*/ u8 filler_71;
+ /*0x0072*/ u16 unk_72;
+ /*0x0074*/ u8 unk_74[2];
+ /*0x0076*/ u8 unk_76[2];
+ /*0x0078*/ u8 unk_78;
+ /*0x0079*/ u8 unk_79;
+ /*0x007A*/ u8 unk_7A;
+ /*0x007B*/ u8 unk_7B;
+ /*0x007C*/ u8 filler_7C[0x7E - 0x7C];
+ /*0x007E*/ u8 unk_7E;
+ /*0x007F*/ u8 filler_7F;
+ /*0x0080*/ u16 linkData[20];
+ /*0x00A8*/ u8 unk_A8;
+ /*0x00A9*/ u8 unk_A9[11];
+ /*0x00B4*/ u8 filler_B4[0x8D0-0xB4];
+ /*0x08D0*/ struct {
+ bool8 unk_0;
+ u16 unk_2;
+ u8 unk_4;
+ } unk_8D0[4];
+ /*0x08F0*/ u16 tilemapBuffer[0x400];
+} *gUnknown_0203229C = {NULL};
+static EWRAM_DATA struct {
+ /*0x00*/ struct Pokemon mon;
+ /*0x64*/ u32 timer;
+ /*0x68*/ u32 unk_68[2];
+ /*0x70*/ u8 filler_70[2];
+ /*0x72*/ u8 unk_72;
+ /*0x73*/ u8 unk_73;
+ /*0x74*/ u16 linkData[10];
+ /*0x88*/ u8 unk_88;
+ /*0x89*/ u8 unk_89;
+ /*0x8A*/ u16 unk_8A;
+ /*0x8C*/ u16 unk_8C;
+ /*0x8E*/ u8 pokePicSpriteIdxs[2];
+ /*0x90*/ u8 unk_90;
+ /*0x91*/ u8 unk_91;
+ /*0x92*/ u8 unk_92;
+ /*0x93*/ u8 unk_93;
+ /*0x94*/ u16 state;
+ /*0x96*/ u8 filler_96[0xD2 - 0x96];
+ /*0xD2*/ u8 unk_D2;
+ /*0xD3*/ u8 unk_D3;
+ /*0xD4*/ u16 unk_D4;
+ /*0xD6*/ u16 unk_D6;
+ /*0xD8*/ u16 unk_D8;
+ /*0xDA*/ u16 unk_DA;
+ /*0xDC*/ u16 unk_DC;
+ /*0xDE*/ u16 unk_DE;
+ /*0xE0*/ s16 bg1vofs;
+ /*0xE2*/ s16 bg1hofs;
+ /*0xE4*/ s16 bg2vofs;
+ /*0xE6*/ s16 bg2hofs;
+ /*0xE8*/ u16 unk_E8;
+ /*0xEA*/ u16 unk_EA;
+ /*0xEC*/ u16 unk_EC;
+ /*0xEE*/ bool8 isLinkTrade;
+ /*0xF0*/ u16 tradeSpecies[2];
+ /*0xF4*/ u16 cachedMapMusic;
+ /*0xF6*/ u8 unk_F6[3];
+ /*0xF9*/ u8 filler_F9;
+ /*0xFA*/ u8 unk_FA;
+ /*0xFB*/ u8 unk_FB;
+ /*0xFC*/ u8 unk_FC;
+ /*0xFD*/ u8 unk_FD;
+ /*0xFE*/ u8 unk_FE;
+} *gUnknown_020322A0 = {NULL};
+
+static bool32 sub_8077260(void);
+static void sub_80773D0(void);
+static void sub_807811C(void);
+static void sub_807825C(void);
+static void sub_80782B8(u8);
+static void sub_8078388(void);
+static bool8 shedinja_maker_maybe(void);
+static void sub_8078C34(void);
+static void sub_80795AC(void);
+static void sub_807967C(u8);
+static void sub_80796B4(u8);
+static u8 sub_8079A3C(u8 *, u8, u8);
+static void sub_8079AA4(u8 *, u8, u8);
+static void sub_8079BE0(u8);
+static void sub_8079C4C(u8, u8, u8, u8, u8, u8);
+static void sub_8079E44(u8);
+static void sub_8079F74(void);
+static void sub_8079F88(u8);
+static void sub_807A000(u8 taskId);
+static void sub_807A024(u8 taskId);
+static void sub_807A048(u16, u8);
+static u32 sub_807A09C(void);
+static void sub_807A0C4(void);
+static void sub_807A19C(u8);
+static bool8 sub_807A1F0(void);
+static void sub_807A308(const u8 *, u8 *, u8);
+static void sub_807A320(u8);
+static void sub_807A468(u8);
+static void sub_807A53C(void);
+static void sub_807A5B0(void);
+static u32 sub_807A5F4(struct Pokemon *, int, int);
+static void sub_807AA28(struct Sprite *sprite);
+static void sub_807AA7C(struct Sprite *sprite);
+static void sub_807AABC(struct Sprite *sprite);
+static void sub_807AAE0(struct Sprite *sprite);
+static void sub_807AB04(struct Sprite *sprite);
+static void sub_807B170(void);
+static void sub_807B60C(void);
+static void sub_807B62C(u8);
+static void sub_807BA94(void);
+static void SetTradeSceneStrings(void);
+static u8 sub_807BBC8(void);
+static u8 sub_807BBEC(void);
+static u8 sub_807CFC8(void);
+static void sub_807E55C(struct Sprite *sprite);
+static void sub_807E5D8(struct Sprite *sprite);
+static void sub_807E64C(struct Sprite *sprite);
+static void sub_807E6AC(struct Sprite *sprite);
+static void sub_807E784(void);
+static void sub_807E974(struct MailStruct *mail, const struct InGameTrade *trade);
+static void sub_807EA2C(void);
+static void sub_807EACC(void);
+static void sub_807EB50(void);
+static void c2_080543C4(void);
+static void sub_807F110(u8);
+static void sub_807F14C(void);
+static void c3_08054588(u8);
+static void c3_0805465C(u8);
+static void sub_807F39C(u8);
+static void sub_807F464(void);
+
+static const u32 sUnref_0832C6A8[] =
+{
+ 0x00000F2C,
+ 0x00003D88,
+ 0x0000001C,
+ 0x00000024,
+ 0x00000064,
+ 0x00000528
+};
+static const u16 gTradeMovesBoxTilemap[] = INCBIN_U16("graphics/trade/moves_box_map.bin");
+static const u16 gTradePartyBoxTilemap[] = INCBIN_U16("graphics/trade/party_box_map.bin");
+static const u8 gTradeStripesBG2Tilemap[] = INCBIN_U8("graphics/trade/stripes_bg2_map.bin");
+static const u8 gTradeStripesBG3Tilemap[] = INCBIN_U8("graphics/trade/stripes_bg3_map.bin");
+static const u8 gText_EmptyString7[] = _("");
+static const u8 gText_ClrWhtHltTrspntShdwDrkGry[] = _("{COLOR WHITE}{HIGHLIGHT TRANSPARENT}{SHADOW DARK_GREY}");
+const u8 gText_MaleSymbol4[] = _("♂");
+const u8 gText_FemaleSymbol4[] = _("♀");
+const u8 gText_GenderlessSymbol[] = _("");
+static const u8 gText_SpaceMove[] = _(" MOVE");
+static const u8 gText_NewLine3[] = _("\n");
+static const u8 gText_Slash2[] = _("/");
+static const u8 gText_Lv2[] = _("Lv. ");
+static const u8 gText_ThreeDashes2[] = _("---");
+static const u8 gText_FourQuestionMarks[] = _("????");
+static const u8 gText_832DAE4[] = _("");
+static const u8 gText_IsThisTradeOkay[] = _("Is this trade okay?");
+static const u8 gText_Cancel6[] = _("CANCEL");
+static const u8 gText_ChooseAPkmn[] = _("Choose a POKéMON.");
+static const u8 gText_Summary3[] = _("SUMMARY");
+static const u8 gText_Trade2[] = _("TRADE");
+static const u8 gText_CancelTrade[] = _("Cancel trade?");
+static const u8 gJPText_832DB2E[] = _("Bボタン で もどります");
+static const u8 gText_Summary4[] = _("SUMMARY");
+static const u8 gText_Trade3[] = _("TRADE");
+static const u8 gText_CommunicationStandby6[] = _("{COLOR DARK_GREY}{HIGHLIGHT WHITE}{SHADOW LIGHT_GREY}Communication standby…\nPlease wait.");
+static const u8 gText_TheTradeHasBeenCanceled[] = _("{COLOR DARK_GREY}{HIGHLIGHT WHITE}{SHADOW LIGHT_GREY}The trade has\nbeen canceled.");
+static const u8 gText_YourOnlyPkmnForBattle[] = _("That's your only\nPOKéMON for battle.");
+static const u8 gText_WaitingForYourFriend[] = _("{COLOR DARK_GREY}{HIGHLIGHT WHITE}{SHADOW LIGHT_GREY}Waiting for your friend\nto finish…");
+static const u8 gText_YourFriendWantsToTrade[] = _("Your friend wants\nto trade POKéMON.");
+
+static const struct OamData gOamData_832DC14 = {
+ .shape = ST_OAM_H_RECTANGLE,
+ .size = 2,
+ .priority = 1
+};
+
+static const struct OamData gOamData_832DC1C = {
+ .shape = ST_OAM_H_RECTANGLE,
+ .size = 3,
+ .priority = 1
+};
+
+static const union AnimCmd gSpriteAnim_832DC24[] = {
+ ANIMCMD_FRAME(0, 5),
+ ANIMCMD_END
+};
+
+static const union AnimCmd gSpriteAnim_832DC2C[] = {
+ ANIMCMD_FRAME(32, 5),
+ ANIMCMD_END
+};
+
+static const union AnimCmd *const gSpriteAnimTable_832DC34[] = {
+ gSpriteAnim_832DC24,
+ gSpriteAnim_832DC2C
+};
+
+static const struct SpriteSheet gUnknown_0832DC3C = {
+ gUnknown_08DDC6E4, 0x800, 300
+};
+
+static const struct SpritePalette gUnknown_0832DC44 = {
+ gUnknown_08DDB444, 2345
+};
+
+static const union AnimCmd gSpriteAnim_832DC4C[] = {
+ ANIMCMD_FRAME(0, 5),
+ ANIMCMD_END
+};
+
+static const union AnimCmd gSpriteAnim_832DC54[] = {
+ ANIMCMD_FRAME(8, 5),
+ ANIMCMD_END
+};
+
+static const union AnimCmd gSpriteAnim_832DC5C[] = {
+ ANIMCMD_FRAME(16, 5),
+ ANIMCMD_END
+};
+
+static const union AnimCmd gSpriteAnim_832DC64[] = {
+ ANIMCMD_FRAME(24, 5),
+ ANIMCMD_END
+};
+
+static const union AnimCmd gSpriteAnim_832DC6C[] = {
+ ANIMCMD_FRAME(32, 5),
+ ANIMCMD_END
+};
+
+static const union AnimCmd gSpriteAnim_832DC74[] = {
+ ANIMCMD_FRAME(40, 5),
+ ANIMCMD_END
+};
+
+static const union AnimCmd *const gSpriteAnimTable_832DC7C[] = {
+ gSpriteAnim_832DC4C,
+ gSpriteAnim_832DC54,
+ gSpriteAnim_832DC5C,
+ gSpriteAnim_832DC64,
+ gSpriteAnim_832DC6C,
+ gSpriteAnim_832DC74
+};
+
+static const struct SpriteTemplate gSpriteTemplate_832DC94 =
+{
+ .tileTag = 300,
+ .paletteTag = 2345,
+ .oam = &gOamData_832DC1C,
+ .anims = gSpriteAnimTable_832DC34,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = SpriteCallbackDummy,
+};
+
+static const struct SpriteTemplate gSpriteTemplate_832DCAC =
+{
+ .tileTag = 200,
+ .paletteTag = 4925,
+ .oam = &gOamData_832DC14,
+ .anims = gSpriteAnimTable_832DC7C,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = SpriteCallbackDummy,
+};
+
+static const u16 TradeScreenTextPalette[] = INCBIN_U16("graphics/trade/text.gbapal");
+static const struct SpritePalette gSpritePalette_TradeScreenText =
+{
+ TradeScreenTextPalette, 4925
+};
+
+// This is used to determine the next mon to select when the D-Pad is
+// pressed in a given direction.
+// Note that the mons are laid out like this.
+// 0-5 are the player's party and 6-11 are the trading partner's party.
+// 12 is the cancel button.
+// 0 1 6 7
+// 2 3 8 9
+// 4 5 10 11
+// 12
+
+static const u8 gTradeNextSelectedMonTable[][4][6] =
+{
+ {
+ {4, 2, 12, 12, 0, 0},
+ {2, 4, 12, 12, 0, 0},
+ {7, 6, 1, 0, 0, 0},
+ {1, 6, 7, 0, 0, 0}
+ },
+ {
+ {5, 3, 12, 12, 0, 0},
+ {3, 5, 12, 12, 0, 0},
+ {0, 7, 6, 1, 0, 0},
+ {6, 7, 0, 1, 0, 0}
+ },
+ {
+ {0, 0, 0, 0, 0, 0},
+ {4, 0, 0, 0, 0, 0},
+ {9, 8, 7, 6, 0, 0},
+ {3, 1, 0, 0, 0, 0}
+ },
+ {
+ {1, 1, 1, 1, 0, 0},
+ {5, 1, 1, 1, 0, 0},
+ {2, 9, 8, 7, 0, 0},
+ {8, 9, 6, 6, 0, 0}
+ },
+ {
+ {2, 2, 2, 2, 0, 0},
+ {0, 0, 0, 0, 0, 0},
+ {11, 10, 9, 8, 7, 6},
+ {5, 3, 1, 0, 0, 0}
+ },
+ {
+ {3, 3, 3, 3, 0, 0},
+ {1, 1, 1, 1, 0, 0},
+ {4, 4, 4, 4, 0, 0},
+ {10, 8, 6, 0, 0, 0}
+ },
+ {
+ {10, 8, 12, 0, 0, 0},
+ {8, 10, 12, 0, 0, 0},
+ {1, 0, 0, 0, 0, 0},
+ {7, 0, 1, 0, 0, 0}
+ },
+ {
+ {12, 0, 0, 0, 0, 0},
+ {9, 12, 0, 0, 0, 0},
+ {6, 0, 0, 0, 0, 0},
+ {0, 0, 0, 0, 0, 0}
+ },
+ {
+ {6, 0, 0, 0, 0, 0},
+ {10, 6, 0, 0, 0, 0},
+ {3, 2, 1, 0, 0, 0},
+ {9, 7, 0, 0, 0, 0}
+ },
+ {
+ {7, 0, 0, 0, 0, 0},
+ {11, 12, 0, 0, 0, 0},
+ {8, 0, 0, 0, 0, 0},
+ {2, 1, 0, 0, 0, 0}
+ },
+ {
+ {8, 0, 0, 0, 0, 0},
+ {6, 0, 0, 0, 0, 0},
+ {5, 4, 3, 2, 1, 0},
+ {11, 9, 7, 0, 0, 0}
+ },
+ {
+ {9, 0, 0, 0, 0, 0},
+ {12, 0, 0, 0, 0, 0},
+ {10, 0, 0, 0, 0, 0},
+ {4, 2, 0, 0, 0, 0}
+ },
+ {
+ {11, 9, 7, 6, 0, 0},
+ {7, 6, 0, 0, 0, 0},
+ {12, 0, 0, 0, 0, 0},
+ {12, 0, 0, 0, 0, 0}
+ }
+};
+
+static const u8 gTradeMonSpriteCoords[][2] =
+{
+ // Your party
+ {1, 5 },
+ {8, 5 },
+ {1, 10},
+ {8, 10},
+ {1, 15},
+ {8, 15},
+
+ // Friend's party
+ {16, 5 },
+ {23, 5 },
+ {16, 10},
+ {23, 10},
+ {16, 15},
+ {23, 15},
+
+ {23, 18} // CANCEL
+};
+
+static const u8 gTradeLevelDisplayCoords[][6][2] = {
+ {
+ // Your party
+ {5, 4},
+ {12, 4},
+ {5, 9},
+ {12, 9},
+ {5, 14},
+ {12, 14},
+ },
+ {
+ // Friend's party
+ {20, 4},
+ {27, 4},
+ {20, 9},
+ {27, 9},
+ {20, 14},
+ {27, 14}
+ }
+};
+
+static const u8 gTradeMonBoxCoords[][6][2] = {
+ {
+ // Your party
+ {1, 3},
+ {8, 3},
+ {1, 8},
+ {8, 8},
+ {1, 13},
+ {8, 13},
+ },
+ {
+ // Friend's party
+ {16, 3},
+ {23, 3},
+ {16, 8},
+ {23, 8},
+ {16, 13},
+ {23, 13}
+ }
+};
+
+static const u8 sUnref_0832DE6E[] = {
+ 0x00, 0x0e,
+ 0x0f, 0x1d,
+ 0x03, 0x05,
+ 0x03, 0x07,
+ 0x12, 0x05,
+ 0x12, 0x07,
+ 0x08, 0x07,
+ 0x16, 0x0c,
+ 0x08, 0x07,
+ 0x16, 0x0c,
+ 0x06, 0x07,
+ 0x18, 0x0c,
+ 0x06, 0x07,
+ 0x18, 0x0c,
+ 0x08, 0x07,
+ 0x16, 0x0c,
+ 0x07, 0x07,
+ 0x17, 0x0c
+};
+
+static const u8 *const gUnknown_0832DE94[] =
+{
+ gText_Cancel6,
+ gText_ChooseAPkmn,
+ gText_Summary3,
+ gText_Trade2,
+ gText_CancelTrade,
+ gJPText_832DB2E
+};
+
+static const struct MenuAction gUnknown_0832DEAC[] = {
+ {gText_Summary4, sub_807A000},
+ {gText_Trade3, sub_807A024}
+};
+
+static const u8 *const gUnknown_0832DEBC[] = {
+ gText_CommunicationStandby6,
+ gText_TheTradeHasBeenCanceled,
+ gText_YourOnlyPkmnForBattle,
+ gText_OnlyPkmnForBattle,
+ gText_WaitingForYourFriend,
+ gText_YourFriendWantsToTrade,
+ gText_PkmnCantBeTradedNow,
+ gText_EggCantBeTradedNow,
+ gText_OtherTrainersPkmnCantBeTraded
+};
+
+static const u8 gUnknown_0832DEE0[] = { 0, 1, 2 };
+
+static const struct BgTemplate gUnknown_0832DEE4[] =
+{
+ {
+ .bg = 0,
+ .charBaseIndex = 2,
+ .mapBaseIndex = 31,
+ .screenSize = 0,
+ .paletteMode = 0,
+ .priority = 0,
+ .baseTile = 0
+ },
+ {
+ .bg = 1,
+ .charBaseIndex = 0,
+ .mapBaseIndex = 5,
+ .screenSize = 0,
+ .paletteMode = 0,
+ .priority = 1,
+ .baseTile = 0
+ },
+ {
+ .bg = 2,
+ .charBaseIndex = 0,
+ .mapBaseIndex = 6,
+ .screenSize = 0,
+ .paletteMode = 0,
+ .priority = 2,
+ .baseTile = 0
+ },
+ {
+ .bg = 3,
+ .charBaseIndex = 0,
+ .mapBaseIndex = 7,
+ .screenSize = 0,
+ .paletteMode = 0,
+ .priority = 3,
+ .baseTile = 0
+ },
+};
+
+static const struct WindowTemplate gUnknown_0832DEF4[] =
+{
+ {
+ .bg = 0,
+ .tilemapLeft = 4,
+ .tilemapTop = 7,
+ .width = 22,
+ .height = 4,
+ .paletteNum = 15,
+ .baseBlock = 30
+ },
+ {
+ .bg = 0,
+ .tilemapLeft = 19,
+ .tilemapTop = 15,
+ .width = 10,
+ .height = 4,
+ .paletteNum = 15,
+ .baseBlock = 118
+ },
+ {
+ .bg = 0,
+ .tilemapLeft = 0,
+ .tilemapTop = 5,
+ .width = 8,
+ .height = 2,
+ .paletteNum = 13,
+ .baseBlock = 158
+ },
+ {
+ .bg = 0,
+ .tilemapLeft = 7,
+ .tilemapTop = 5,
+ .width = 8,
+ .height = 2,
+ .paletteNum = 13,
+ .baseBlock = 174
+ },
+ {
+ .bg = 0,
+ .tilemapLeft = 0,
+ .tilemapTop = 10,
+ .width = 8,
+ .height = 2,
+ .paletteNum = 13,
+ .baseBlock = 190
+ },
+ {
+ .bg = 0,
+ .tilemapLeft = 7,
+ .tilemapTop = 10,
+ .width = 8,
+ .height = 2,
+ .paletteNum = 13,
+ .baseBlock = 206
+ },
+ {
+ .bg = 0,
+ .tilemapLeft = 0,
+ .tilemapTop = 15,
+ .width = 8,
+ .height = 2,
+ .paletteNum = 13,
+ .baseBlock = 222
+ },
+ {
+ .bg = 0,
+ .tilemapLeft = 7,
+ .tilemapTop = 15,
+ .width = 8,
+ .height = 2,
+ .paletteNum = 13,
+ .baseBlock = 238
+ },
+ {
+ .bg = 0,
+ .tilemapLeft = 15,
+ .tilemapTop = 5,
+ .width = 8,
+ .height = 2,
+ .paletteNum = 13,
+ .baseBlock = 254
+ },
+ {
+ .bg = 0,
+ .tilemapLeft = 22,
+ .tilemapTop = 5,
+ .width = 8,
+ .height = 2,
+ .paletteNum = 13,
+ .baseBlock = 270
+ },
+ {
+ .bg = 0,
+ .tilemapLeft = 15,
+ .tilemapTop = 10,
+ .width = 8,
+ .height = 2,
+ .paletteNum = 13,
+ .baseBlock = 286
+ },
+ {
+ .bg = 0,
+ .tilemapLeft = 22,
+ .tilemapTop = 10,
+ .width = 8,
+ .height = 2,
+ .paletteNum = 13,
+ .baseBlock = 302
+ },
+ {
+ .bg = 0,
+ .tilemapLeft = 15,
+ .tilemapTop = 15,
+ .width = 8,
+ .height = 2,
+ .paletteNum = 13,
+ .baseBlock = 318
+ },
+ {
+ .bg = 0,
+ .tilemapLeft = 22,
+ .tilemapTop = 15,
+ .width = 8,
+ .height = 2,
+ .paletteNum = 13,
+ .baseBlock = 334
+ },
+ {
+ .bg = 0,
+ .tilemapLeft = 2,
+ .tilemapTop = 5,
+ .width = 14,
+ .height = 2,
+ .paletteNum = 13,
+ .baseBlock = 350
+ },
+ {
+ .bg = 0,
+ .tilemapLeft = 3,
+ .tilemapTop = 8,
+ .width = 11,
+ .height = 8,
+ .paletteNum = 15,
+ .baseBlock = 378
+ },
+ {
+ .bg = 0,
+ .tilemapLeft = 17,
+ .tilemapTop = 5,
+ .width = 14,
+ .height = 2,
+ .paletteNum = 15,
+ .baseBlock = 466
+ },
+ {
+ .bg = 0,
+ .tilemapLeft = 18,
+ .tilemapTop = 8,
+ .width = 11,
+ .height = 8,
+ .paletteNum = 15,
+ .baseBlock = 494
+ },
+ DUMMY_WIN_TEMPLATE,
+};
+
+static const struct WindowTemplate gUnknown_0832DF8C =
+{
+ .bg = 0,
+ .tilemapLeft = 23,
+ .tilemapTop = 13,
+ .width = 5,
+ .height = 4,
+ .paletteNum = 15,
+ .baseBlock = 582
+};
+
+static const u8 gJPText_Shedinja[] = _("ヌケニン");
+static const u8 gUnknown_0832DF99[][2] =
+{
+ {4, 3},
+ {19, 3},
+ {0, 0}
+};
+
+static const u16 gTradeBallPalette[] = INCBIN_U16("graphics/trade/ball.gbapal");
+static const u8 gTradeBallTiles[] = INCBIN_U8("graphics/trade/ball.4bpp");
+static const u8 gUnknown_832E5C0[] = INCBIN_U8("graphics/trade/pokeball_symbol.8bpp");
+static const u16 gUnknown_0832FFC0[] = INCBIN_U16("graphics/trade/cable_closeup_map.bin");
+static const u16 gUnknown_083307C0[] = INCBIN_U16("graphics/trade/pokeball_symbol_map.bin");
+static const u16 sUnref_083308C0[] = INCBIN_U16("graphics/trade/unknown_3308C0.gbapal");
+static const u16 gUnknown_083308E0[] = INCBIN_U16("graphics/trade/gba.gbapal");
+static const u16 gUnref_08330900[] = INCBIN_U16("graphics/trade/shadow.gbapal");
+static const u16 gUnref_08330920[] = INCBIN_U16("graphics/trade/black.gbapal");
+static const u16 gUnknown_08330940[] = INCBIN_U16("graphics/trade/misc.gbapal");
+static const u8 gTradeGlow1Tiles[] = INCBIN_U8("graphics/trade/glow1.4bpp");
+static const u8 gTradeGlow2Tiles[] = INCBIN_U8("graphics/trade/glow2.4bpp");
+static const u8 gTradeCableEndTiles[] = INCBIN_U8("graphics/trade/cable_end.4bpp");
+static const u8 gTradeGBAScreenTiles[] = INCBIN_U8("graphics/trade/gba_screen.4bpp");
+const u16 gUnknown_08331F60[] = INCBIN_U16("graphics/trade/shadow_map.bin");
+static const u8 gUnknown_08332F60[] = INCBIN_U8("graphics/trade/gba_affine.8bpp");
+static const u8 sFiller_08335760[64] = {};
+static const u8 gUnknown_083357A0[] = INCBIN_U8("graphics/trade/gba_affine_map_cable.bin");
+static const u8 gUnknown_083358A0[] = INCBIN_U8("graphics/trade/gba_affine_map_wireless.bin");
+static const u16 gUnknown_083359A0[] = INCBIN_U16("graphics/trade/gba_map_wireless.bin");
+static const u16 gUnknown_083369A0[] = INCBIN_U16("graphics/trade/gba_map_cable.bin");
+static const u32 gUnknown_083379A0[] = INCBIN_U32("graphics/trade/unknown_3379A0.bin.lz");
+static const u16 gUnknown_08337AA0[] = INCBIN_U16("graphics/trade/wireless_signal_send.gbapal");
+static const u16 gUnknown_08337CA0[] = INCBIN_U16("graphics/trade/wireless_signal_receive.gbapal");
+static const u16 gUnknown_08337EA0[] = INCBIN_U16("graphics/trade/black.gbapal");
+static const u32 gUnknown_08337EC0[] = INCBIN_U32("graphics/trade/wireless_signal.4bpp.lz");
+static const u32 gUnknown_08338550[] = INCBIN_U32("graphics/trade/wireless_signal.bin.lz");
+
+static const struct OamData gOamData_8338C44 = {
+ .affineMode = 1,
+ .size = 1
+};
+
+static const union AnimCmd gSpriteAnim_8338C4C[] = {
+ ANIMCMD_FRAME( 0, 3),
+ ANIMCMD_FRAME( 4, 3),
+ ANIMCMD_FRAME( 8, 3),
+ ANIMCMD_FRAME(12, 3),
+ ANIMCMD_FRAME(16, 3),
+ ANIMCMD_FRAME(20, 3),
+ ANIMCMD_FRAME(24, 3),
+ ANIMCMD_FRAME(28, 3),
+ ANIMCMD_FRAME(32, 3),
+ ANIMCMD_FRAME(36, 3),
+ ANIMCMD_FRAME(40, 3),
+ ANIMCMD_FRAME(44, 3),
+ ANIMCMD_LOOP(1),
+ ANIMCMD_FRAME( 0, 3),
+ ANIMCMD_END
+};
+
+static const union AnimCmd gSpriteAnim_8338C88[] = {
+ ANIMCMD_FRAME( 0, 3),
+ ANIMCMD_FRAME( 4, 3),
+ ANIMCMD_FRAME( 8, 3),
+ ANIMCMD_FRAME(12, 3),
+ ANIMCMD_FRAME(16, 3),
+ ANIMCMD_FRAME(20, 3),
+ ANIMCMD_FRAME(24, 3),
+ ANIMCMD_FRAME(28, 3),
+ ANIMCMD_FRAME(32, 3),
+ ANIMCMD_FRAME(36, 3),
+ ANIMCMD_FRAME(40, 3),
+ ANIMCMD_FRAME(44, 3),
+ ANIMCMD_LOOP(2),
+ ANIMCMD_FRAME( 0, 3),
+ ANIMCMD_END
+};
+
+static const union AnimCmd *const gSpriteAnimTable_8338C88[] = {
+ gSpriteAnim_8338C4C,
+ gSpriteAnim_8338C88
+};
+
+static const union AffineAnimCmd gSpriteAffineAnim_8338CCC[] = {
+ AFFINEANIMCMD_FRAME(0, 0, 0, 1),
+ AFFINEANIMCMD_END
+};
+
+static const union AffineAnimCmd gSpriteAffineAnim_8338CDC[] = {
+ AFFINEANIMCMD_FRAME(-8, 0, 0, 20),
+ AFFINEANIMCMD_END
+};
+
+static const union AffineAnimCmd gSpriteAffineAnim_8338CEC[] = {
+ AFFINEANIMCMD_FRAME(0x60, 0x100, 0, 0),
+ AFFINEANIMCMD_FRAME( 0, 0, 0, 5),
+ AFFINEANIMCMD_FRAME( 8, 0, 0, 20),
+ AFFINEANIMCMD_END
+};
+
+static const union AffineAnimCmd *const gSpriteAffineAnimTable_8338D0C[] = {
+ gSpriteAffineAnim_8338CCC,
+ gSpriteAffineAnim_8338CDC,
+ gSpriteAffineAnim_8338CEC
+};
+
+static const struct SpriteSheet gUnknown_08338D18 = {
+ gTradeBallTiles, 0x600, 5557
+};
+
+static const struct SpritePalette gUnknown_08338D20 = {
+ gTradeBallPalette, 5558
+};
+
+static const struct SpriteTemplate gSpriteTemplate_8338D28 = {
+ 5557,
+ 5558,
+ &gOamData_8338C44,
+ gSpriteAnimTable_8338C88,
+ NULL,
+ gSpriteAffineAnimTable_8338D0C,
+ sub_807E55C
+};
+
+static const struct OamData gOamData_8338D40 = {
+ .affineMode = 1,
+ .objMode = 1,
+ .size = 2,
+ .priority = 1
+};
+
+static const union AnimCmd gSpriteAnim_8338D48[] = {
+ ANIMCMD_FRAME(0, 5, .hFlip = TRUE, .vFlip = TRUE),
+ ANIMCMD_END
+};
+
+static const union AnimCmd *const gSpriteAnimTable_8338D50[] = {
+ gSpriteAnim_8338D48
+};
+
+static const union AffineAnimCmd gSpriteAffineAnim_8338D54[] = {
+ AFFINEANIMCMD_FRAME(-10, -10, 0, 5),
+ AFFINEANIMCMD_FRAME(10, 10, 0, 5),
+ AFFINEANIMCMD_JUMP(0)
+};
+
+static const union AffineAnimCmd *const gSpriteAffineAnimTable_8338D6C[] = {
+ gSpriteAffineAnim_8338D54
+};
+
+static const struct SpriteSheet gUnknown_08338D70 = {
+ gTradeGlow1Tiles, 0x200, 5550
+};
+
+static const struct SpritePalette gUnknown_08338D78 = {
+ gUnknown_08330940, 5551
+};
+
+static const struct SpritePalette gUnknown_08338D80 = {
+ gUnknown_083308E0, 5555
+};
+
+static const struct SpriteTemplate gUnknown_08338D88 = {
+ 5550,
+ 5551,
+ &gOamData_8338D40,
+ gSpriteAnimTable_8338D50,
+ NULL,
+ gSpriteAffineAnimTable_8338D6C,
+ sub_807AA28
+};
+
+static const struct OamData gOamData_8338DA0 = {
+ .shape = ST_OAM_V_RECTANGLE,
+ .size = 2,
+ .priority = 1
+};
+
+static const union AnimCmd gSpriteAnim_8338DA8[] = {
+ ANIMCMD_FRAME(0, 5, .vFlip = TRUE, .hFlip = TRUE),
+ ANIMCMD_END
+};
+
+static const union AnimCmd gSpriteAnim_8338DB0[] = {
+ ANIMCMD_FRAME(8, 5, .vFlip = TRUE, .hFlip = TRUE),
+ ANIMCMD_END
+};
+
+static const union AnimCmd *const gSpriteAnimTable_8338DB8[] = {
+ gSpriteAnim_8338DA8,
+ gSpriteAnim_8338DB0
+};
+
+static const struct SpriteSheet gUnknown_08338DC0 = {
+ gTradeGlow2Tiles, 0x300, 5552
+};
+
+static const struct SpriteTemplate gSpriteTemplate_8338DC8 = {
+ 5552,
+ 5551,
+ &gOamData_8338DA0,
+ gSpriteAnimTable_8338DB8,
+ NULL,
+ gDummySpriteAffineAnimTable,
+ sub_807AA7C
+};
+
+static const struct OamData gOamData_8338DE0 = {
+ .shape = ST_OAM_V_RECTANGLE,
+ .size = 2,
+ .priority = 1
+};
+
+static const union AnimCmd gSpriteAnim_8338DE8[] = {
+ ANIMCMD_FRAME(0, 10),
+ ANIMCMD_END
+};
+
+static const union AnimCmd *const gSpriteAnimTable_8338DF0[] = {
+ gSpriteAnim_8338DE8
+};
+
+static const struct SpriteSheet gUnknown_08338DF4 = {
+ gTradeCableEndTiles, 0x100, 5554
+};
+
+static const struct SpriteTemplate gSpriteTemplate_8338DFC = {
+ 5554,
+ 5555,
+ &gOamData_8338DE0,
+ gSpriteAnimTable_8338DF0,
+ NULL,
+ gDummySpriteAffineAnimTable,
+ sub_807AABC
+};
+
+static const struct OamData gOamData_8338E14 = {
+ .shape = ST_OAM_H_RECTANGLE,
+ .size = 3,
+ .priority = 1
+};
+
+static const union AnimCmd gSpriteAnim_8338E1C[] = {
+ ANIMCMD_FRAME( 0, 2, .vFlip = TRUE, .hFlip = TRUE),
+ ANIMCMD_FRAME(32, 2, .vFlip = TRUE, .hFlip = TRUE),
+ ANIMCMD_FRAME(64, 2, .vFlip = TRUE, .hFlip = TRUE),
+ ANIMCMD_FRAME(96, 2, .vFlip = TRUE, .hFlip = TRUE),
+ ANIMCMD_FRAME(64, 2, .vFlip = TRUE, .hFlip = TRUE),
+ ANIMCMD_FRAME(32, 2, .vFlip = TRUE, .hFlip = TRUE),
+ ANIMCMD_FRAME( 0, 2, .vFlip = TRUE, .hFlip = TRUE),
+ ANIMCMD_LOOP(8),
+ ANIMCMD_END
+};
+
+static const union AnimCmd gSpriteAnim_8338E40[] = {
+ ANIMCMD_FRAME( 0, 2, .vFlip = TRUE, .hFlip = TRUE),
+ ANIMCMD_FRAME(32, 2, .vFlip = TRUE, .hFlip = TRUE),
+ ANIMCMD_FRAME(64, 2, .vFlip = TRUE, .hFlip = TRUE),
+ ANIMCMD_FRAME(96, 2, .vFlip = TRUE, .hFlip = TRUE),
+ ANIMCMD_FRAME(64, 2, .vFlip = TRUE, .hFlip = TRUE),
+ ANIMCMD_FRAME(32, 2, .vFlip = TRUE, .hFlip = TRUE),
+ ANIMCMD_FRAME( 0, 2, .vFlip = TRUE, .hFlip = TRUE),
+ ANIMCMD_LOOP(2),
+ ANIMCMD_END
+};
+
+static const union AnimCmd *const gSpriteAnimTable_8338E64[] = {
+ gSpriteAnim_8338E1C
+};
+
+static const union AnimCmd *const gSpriteAnimTable_8338E68[] = {
+ gSpriteAnim_8338E40
+};
+
+static const struct SpriteSheet gUnknown_08338E6C = {
+ gTradeGBAScreenTiles, 0x1000, 5556
+};
+
+static const struct SpriteTemplate gSpriteTemplate_8338E74 = {
+ 5556,
+ 5555,
+ &gOamData_8338E14,
+ gSpriteAnimTable_8338E64,
+ NULL,
+ gDummySpriteAffineAnimTable,
+ sub_807AB04
+};
+
+static const struct SpriteTemplate gSpriteTemplate_8338E8C = {
+ 5556,
+ 5555,
+ &gOamData_8338E14,
+ gSpriteAnimTable_8338E68,
+ NULL,
+ gDummySpriteAffineAnimTable,
+ sub_807AB04
+};
+
+static const u16 gUnknown_08338EA4[] = INCBIN_U16("graphics/trade/unknown_338EA4.gbapal");
+
+static const union AffineAnimCmd gSpriteAffineAnim_8338EBC[] = {
+ AFFINEANIMCMD_FRAME(-0x100, 0x100, 0, 0),
+ AFFINEANIMCMD_JUMP(0)
+};
+
+static const union AffineAnimCmd *const gSpriteAffineAnimTable_8338ECC[] = {
+ gSpriteAffineAnim_8338EBC
+};
+
+static const struct InGameTrade gIngameTrades[] = {
+ {
+ _("DOTS"), SPECIES_SEEDOT,
+ 5, 4, 5, 4, 4, 4,
+ TRUE, 38726,
+ 30, 5, 5, 5, 5,
+ 0x84,
+ ITEM_CHESTO_BERRY, -1,
+ _("KOBE"), MALE, 10,
+ SPECIES_RALTS
+ }, {
+ _("PLUSES"), SPECIES_PLUSLE,
+ 4, 4, 4, 5, 5, 4,
+ FALSE, 73996,
+ 5, 5, 30, 5, 5,
+ 0x6F,
+ ITEM_WOOD_MAIL, 0,
+ _("ROMAN"), MALE, 10,
+ SPECIES_VOLBEAT
+ }, {
+ _("SEASOR"),
+ SPECIES_HORSEA,
+ 5, 4, 4, 4, 5, 4,
+ FALSE, 46285,
+ 5, 5, 5, 5, 30,
+ 0x7F,
+ ITEM_WAVE_MAIL, 1,
+ _("SKYLAR"), MALE, 10,
+ SPECIES_BAGON
+ }, {
+ _("MEOWOW"),
+ SPECIES_MEOWTH,
+ 4, 5, 4, 5, 4, 4,
+ FALSE, 91481,
+ 5, 5, 5, 30, 5,
+ 0x8B,
+ ITEM_RETRO_MAIL, 2,
+ _("ISIS"), FEMALE, 10,
+ SPECIES_SKITTY
+ }
+};
+
+static const u16 gIngameTradeMail[][10] = {
+ {
+ EC_WORD_BE,
+ EC_WORD_NICE,
+ EC_WORD_TO,
+ EC_POKEMON(PLUSLE),
+ EC_WORD_EXCL,
+ EC_POKEMON(VOLBEAT),
+ EC_WORD_WILL,
+ EC_WORD_BE,
+ EC_WORD_FANTASTIC,
+ 0
+ }, {
+ EC_WORD_I,
+ EC_WORD_WILL,
+ EC_WORD_MAKE,
+ EC_POKEMON(BAGON),
+ EC_WORD_TOUGH,
+ EC_WORD_PLEASE,
+ EC_WORD_TRAIN,
+ EC_POKEMON(HORSEA),
+ EC_WORD_WELL,
+ 0
+ }, {
+ EC_WORD_THANK_YOU,
+ EC_WORD_FOR,
+ EC_POKEMON(SKITTY),
+ EC_POKEMON2(MEOWTH),
+ EC_WORD_CRIES,
+ EC_WORD_IN,
+ EC_WORD_A,
+ EC_WORD_CUTE,
+ EC_WORD_WAY,
+ 0
+ }
+};
+
+static const struct WindowTemplate gUnknown_08338FFC[] =
+{
+ {
+ .bg = 0,
+ .tilemapLeft = 2,
+ .tilemapTop = 15,
+ .width = 26,
+ .height = 4,
+ .paletteNum = 0,
+ .baseBlock = 64
+ },
+ DUMMY_WIN_TEMPLATE
+};
+
+const struct WindowTemplate gUnknown_0833900C =
+{
+ .bg = 0,
+ .tilemapLeft = 21,
+ .tilemapTop = 9,
+ .width = 5,
+ .height = 4,
+ .paletteNum = 15,
+ .baseBlock = 188
+};
+
+static const struct BgTemplate gUnknown_08339014[] =
+{
+ {
+ .bg = 0,
+ .charBaseIndex = 3,
+ .mapBaseIndex = 31,
+ .screenSize = 0,
+ .paletteMode = 0,
+ .priority = 0,
+ .baseTile = 0
+ },
+ {
+ .bg = 1,
+ .charBaseIndex = 0,
+ .mapBaseIndex = 5,
+ .screenSize = 0,
+ .paletteMode = 0,
+ .priority = 2,
+ .baseTile = 0
+ },
+ {
+ .bg = 2,
+ .charBaseIndex = 1,
+ .mapBaseIndex = 18,
+ .screenSize = 1,
+ .paletteMode = 0,
+ .priority = 2,
+ .baseTile = 0
+ },
+ {
+ .bg = 3,
+ .charBaseIndex = 0,
+ .mapBaseIndex = 6,
+ .screenSize = 0,
+ .paletteMode = 0,
+ .priority = 3,
+ .baseTile = 0
+ },
+};
+
+static const s8 gTradeBallVerticalVelocityTable[] = {
+ 0, 0, 1, 0,
+ 1, 0, 1, 1,
+ 1, 1, 2, 2,
+ 2, 2, 3, 3,
+ 3, 3, 4, 4,
+ 4, 4, -4, -4,
+ -4, -3, -3, -3,
+ -3, -2, -2, -2,
+ -2, -1, -1, -1,
+ -1, 0, -1, 0,
+ -1, 0, 0, 0,
+ 0, 0, 1, 0,
+ 1, 0, 1, 1,
+ 1, 1, 2, 2,
+ 2, 2, 3, 3,
+ 3, 3, 4, 4,
+ 4, 4, -4, -3,
+ -3, -2, -2, -1,
+ -1, -1, 0, -1,
+ 0, 0, 0, 0,
+ 0, 0, 1, 0,
+ 1, 1, 1, 2,
+ 2, 3, 3, 4,
+ -4, -3, -2, -1,
+ -1, -1, 0, 0,
+ 0, 0, 1, 0,
+ 1, 1, 2, 3
+};
+
+static const u8 gUnknown_08339090[][2] =
+{
+ {0, 1},
+ {1, 1},
+ {2, 1},
+ {3, 1},
+ {4, 1},
+ {5, 2},
+ {6, 2},
+ {7, 2},
+ {8, 2},
+ {9, 2},
+ {10, 3},
+ {11, 3},
+ {12, 3},
+ {13, 4},
+ {14, 5},
+ {15, 2},
+ {0, 1},
+ {1, 1},
+ {2, 1},
+ {3, 1},
+ {4, 1},
+ {5, 2},
+ {6, 2},
+ {7, 2},
+ {8, 2},
+ {9, 2},
+ {10, 3},
+ {11, 3},
+ {12, 3},
+ {13, 4},
+ {14, 5},
+ {16, 1},
+ {16, -1},
+ {0, 0}
+};
+
+// external to this file
+extern const struct CompressedSpriteSheet gMonFrontPicTable[];
+extern const struct MonCoords gMonFrontPicCoords[];
+
+static bool8 sub_8077170(const void *a0, u32 a1)
+{
+ if (gUnknown_02022C2C == 29)
+ {
+ rfu_NI_setSendData(gUnknown_03004140.unk_00, 84, a0, a1);
+ return TRUE;
+ }
+ else
+ {
+ return SendBlock(0, a0, a1);
+ }
+}
+
+static void sub_80771AC(u8 a0)
+{
+ sub_800A4D8(a0);
+}
+
+static bool32 sub_80771BC(void)
+{
+ if (gUnknown_02022C2C == 29)
+ {
+ if (gUnknown_03007880[sub_800E87C(gUnknown_03004140.unk_00)]->unk_0 == 0)
+ {
+ return TRUE;
+ }
+ else
+ {
+ return FALSE;
+ }
+ }
+ else
+ {
+ return IsLinkTaskFinished();
+ }
+}
+
+static u32 _GetBlockReceivedStatus(void)
+{
+ return GetBlockReceivedStatus();
+}
+
+static void sub_8077210(void)
+{
+ if (sub_8077260())
+ {
+ rfu_clearSlot(12, gUnknown_03004140.unk_00);
+ }
+ else
+ {
+ ResetBlockReceivedFlags();
+ }
+}
+
+static void sub_8077234(u32 a0)
+{
+ if (sub_8077260())
+ {
+ rfu_clearSlot(12, gUnknown_03004140.unk_00);
+ }
+ else
+ {
+ ResetBlockReceivedFlag(a0);
+ }
+}
+
+static bool32 sub_8077260(void)
+{
+ if (gWirelessCommType && gUnknown_02022C2C == 29)
+ {
+ return TRUE;
+ }
+ else
+ {
+ return FALSE;
+ }
+}
+
+static void sub_8077288(u8 unused)
+{
+ sub_800ADF8();
+}
+
+static bool32 _IsLinkTaskFinished(void)
+{
+ return IsLinkTaskFinished();
+}
+
+static void sub_80772A4(void)
+{
+ ResetSpriteData();
+ FreeAllSpritePalettes();
+ ResetTasks();
+ ResetPaletteFade();
+
+ gPaletteFade.bufferTransferDisabled = TRUE;
+
+ SetVBlankCallback(sub_807811C);
+ LoadPalette(gUnknown_0860F074, 0xF0, 20);
+ LoadPalette(gUnknown_0860F074, 0xD0, 20);
+ ResetBgsAndClearDma3BusyFlags(0);
+ InitBgsFromTemplates(0, gUnknown_0832DEE4, ARRAY_COUNT(gUnknown_0832DEE4));
+ SetBgTilemapBuffer(1, gUnknown_0203229C->tilemapBuffer);
+
+ if (InitWindows(gUnknown_0832DEF4))
+ {
+ u32 i;
+
+ DeactivateAllTextPrinters();
+
+ for (i = 0; i < 18; i++)
+ {
+ ClearWindowTilemap(i);
+ FillWindowPixelBuffer(i, 0);
+ }
+
+ FillBgTilemapBufferRect(0, 0, 0, 0, 30, 20, 15);
+ LoadUserWindowBorderGfx_(0, 20, 0xC0);
+ LoadUserWindowBorderGfx(2, 1, 0xE0);
+ LoadMonIconPalettes();
+ gUnknown_0203229C->unk_69 = 0;
+ gUnknown_0203229C->unk_6F = 0;
+ gUnknown_0203229C->unk_70 = 0;
+ gUnknown_0203229C->unk_74[0] = 0;
+ gUnknown_0203229C->unk_74[1] = 0;
+ gUnknown_0203229C->unk_7A = 0;
+ gUnknown_0203229C->unk_7B = 0;
+ gUnknown_0203229C->unk_A8 = 0;
+ }
+}
+
+void sub_80773AC(void)
+{
+ SetMainCallback2(sub_80773D0);
+ gMain.callback1 = NULL;
+ gEnemyPartyCount = 0;
+}
+
+static void sub_80773D0(void)
+{
+ int i;
+ struct SpriteTemplate temp;
+ u8 id;
+ u32 xPos;
+
+ switch (gMain.state)
+ {
+ case 0:
+ gUnknown_0203229C = AllocZeroed(sizeof(*gUnknown_0203229C));
+ sub_80772A4();
+ gUnknown_02032184 = AllocZeroed(0xE00);
+
+ for (i = 0; i < 14; i++)
+ {
+ gUnknown_02032188[i] = &gUnknown_02032184[i * 256];
+ }
+
+ gMain.state++;
+ break;
+ case 1:
+ gPaletteFade.bufferTransferDisabled = FALSE;
+
+ for (i = 0; i < PARTY_SIZE; i++)
+ {
+ CreateMon(&gEnemyParty[i], SPECIES_NONE, 0, 0x20, FALSE, 0, 0, 0);
+ }
+
+ sub_807A19C(0);
+ ShowBg(0);
+
+ if (!gReceivedRemoteLinkPlayers)
+ {
+ gLinkType = 0x1122;
+ gUnknown_0203229C->unk_A8 = 0;
+
+ if (gWirelessCommType)
+ {
+ sub_800B488();
+ OpenLink();
+ sub_8011BA4();
+ }
+ else
+ {
+ OpenLink();
+ gMain.state++;
+ CreateTask(task00_08081A90, 1);
+ }
+ }
+ else
+ {
+ gMain.state = 4;
+ }
+ break;
+ case 2:
+ gUnknown_0203229C->unk_A8++;
+ if (gUnknown_0203229C->unk_A8 > 11)
+ {
+ gUnknown_0203229C->unk_A8 = 0;
+ gMain.state++;
+ }
+ break;
+ case 3:
+ if (GetLinkPlayerCount_2() >= sub_800AA48())
+ {
+ if (IsLinkMaster())
+ {
+ if (++gUnknown_0203229C->unk_A8 > 30)
+ {
+ sub_800A620();
+ gMain.state++;
+ }
+ }
+ else
+ {
+ gMain.state++;
+ }
+ }
+ break;
+ case 4:
+ if (gReceivedRemoteLinkPlayers == TRUE && IsLinkPlayerDataExchangeComplete() == TRUE)
+ {
+ sub_8011BD0();
+ CalculatePlayerPartyCount();
+ gMain.state++;
+ gUnknown_0203229C->unk_A8 = 0;
+ if (gWirelessCommType)
+ {
+ sub_801048C(TRUE);
+ sub_800ADF8();
+ }
+ }
+ break;
+ case 5:
+ if (gWirelessCommType)
+ {
+ if (sub_8010500())
+ {
+ gMain.state++;
+ sub_800E0E8();
+ CreateWirelessStatusIndicatorSprite(0, 0);
+ }
+ }
+ else
+ {
+ gMain.state++;
+ }
+ break;
+ case 6:
+ if (shedinja_maker_maybe())
+ {
+ sub_807A5B0();
+ gMain.state++;
+ }
+ break;
+ case 7:
+ CalculateEnemyPartyCount();
+ SetGpuReg(REG_OFFSET_DISPCNT, 0);
+ SetGpuReg(REG_OFFSET_BLDCNT, 0);
+ gUnknown_0203229C->partyCounts[0] = gPlayerPartyCount;
+ gUnknown_0203229C->partyCounts[1] = gEnemyPartyCount;
+
+ for (i = 0; i < gUnknown_0203229C->partyCounts[0]; i++)
+ {
+ struct Pokemon *mon = &gPlayerParty[i];
+ gUnknown_0203229C->partyIcons[0][i] = CreateMonIcon(GetMonData(mon, MON_DATA_SPECIES2),
+ sub_80D3014,
+ (gTradeMonSpriteCoords[i][0] * 8) + 14,
+ (gTradeMonSpriteCoords[i][1] * 8) - 12,
+ 1,
+ GetMonData(mon, MON_DATA_PERSONALITY),
+ TRUE);
+ }
+
+ for (i = 0; i < gUnknown_0203229C->partyCounts[1]; i++)
+ {
+ struct Pokemon *mon = &gEnemyParty[i];
+ gUnknown_0203229C->partyIcons[1][i] = CreateMonIcon(GetMonData(mon, MON_DATA_SPECIES2, NULL),
+ sub_80D3014,
+ (gTradeMonSpriteCoords[i + PARTY_SIZE][0] * 8) + 14,
+ (gTradeMonSpriteCoords[i + PARTY_SIZE][1] * 8) - 12,
+ 1,
+ GetMonData(mon, MON_DATA_PERSONALITY),
+ FALSE);
+ }
+ gMain.state++;
+ break;
+ case 8:
+ LoadHeldItemIcons();
+ sub_81B5D4C(&gUnknown_0203229C->partyCounts[0], gUnknown_0203229C->partyIcons[0], 0);
+ gMain.state++;
+ break;
+ case 9:
+ sub_81B5D4C(&gUnknown_0203229C->partyCounts[0], gUnknown_0203229C->partyIcons[0], 1);
+ gMain.state++;
+ break;
+ case 10:
+ sub_80C6D80(gSaveBlock2Ptr->playerName, gUnknown_02032188[0], 0, 0, 3);
+ id = GetMultiplayerId();
+ sub_80C6D80(gLinkPlayers[id ^ 1].name, gUnknown_02032188[3], 0, 0, 3);
+ sub_80C6D80(gUnknown_0832DE94[0], gUnknown_02032188[6], 0, 0, 2);
+ sub_807A308(gUnknown_0832DE94[1], gUnknown_02032188[8], 24);
+ gMain.state++;
+ gUnknown_0203229C->unk_A8 = 0;
+ break;
+ case 11:
+ if (sub_807A1F0())
+ gMain.state++;
+ break;
+ case 12:
+ xPos = GetStringCenterAlignXOffset(1, gSaveBlock2Ptr->playerName, 120);
+ for (i = 0; i < 3; i++)
+ {
+ temp = gSpriteTemplate_832DCAC;
+ temp.tileTag += i;
+ CreateSprite(&temp, xPos + (i * 32) + 16, 10, 1);
+ }
+
+ xPos = GetStringCenterAlignXOffset(1, gLinkPlayers[GetMultiplayerId() ^ 1].name, 120);
+ for (i = 0; i < 3; i++)
+ {
+ temp = gSpriteTemplate_832DCAC;
+ temp.tileTag += i + 3;
+ CreateSprite(&temp, xPos + (i * 32) + 136, 10, 1);
+ }
+ gMain.state++;
+ break;
+ case 13:
+ temp = gSpriteTemplate_832DCAC;
+ temp.tileTag += 6;
+ CreateSprite(&temp, 215, 152, 1);
+ temp = gSpriteTemplate_832DCAC;
+ temp.tileTag += 7;
+ CreateSprite(&temp, 247, 152, 1);
+
+ for (i = 0; i < PARTY_SIZE; i++)
+ {
+ temp = gSpriteTemplate_832DCAC;
+ temp.tileTag += i + 8;
+ CreateSprite(&temp, (i * 32) + 24, 150, 1);
+ }
+
+ gUnknown_0203229C->tradeMenuCursorSpriteIdx = CreateSprite(&gSpriteTemplate_832DC94, gTradeMonSpriteCoords[0][0] * 8 + 32, gTradeMonSpriteCoords[0][1] * 8, 2);
+ gUnknown_0203229C->tradeMenuCursorPosition = 0;
+ gMain.state++;
+ rbox_fill_rectangle(0);
+ break;
+ case 14:
+ sub_807A320(0);
+ sub_8079BE0(0);
+ gUnknown_0203229C->unk_0 = 0;
+ gUnknown_0203229C->unk_1 = 0;
+ sub_8078388();
+ gMain.state++;
+ PlayBGM(MUS_P_SCHOOL);
+ break;
+ case 15:
+ sub_807A320(1);
+ sub_8079BE0(1);
+ gMain.state++;
+ // fallthrough
+ case 16:
+ sub_80782B8(0);
+ gMain.state++;
+ break;
+ case 17:
+ sub_80782B8(1);
+ gMain.state++;
+ break;
+ case 18:
+ BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, RGB_BLACK);
+ gMain.state++;
+ break;
+ case 19:
+ SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_OBJ_1D_MAP | DISPCNT_OBJ_ON);
+ sub_80782B8(2);
+ gMain.state++;
+ break;
+ case 20:
+ sub_807A468(0);
+ gMain.state++;
+ break;
+ case 21:
+ sub_807A468(1);
+ sub_807A53C();
+ gMain.state++;
+ break;
+ case 22:
+ if (!gPaletteFade.active)
+ {
+ gMain.callback1 = sub_8078C34;
+ SetMainCallback2(sub_807825C);
+ }
+ break;
+ }
+
+ RunTextPrinters();
+ RunTasks();
+ AnimateSprites();
+ BuildOamBuffer();
+ UpdatePaletteFade();
+}
+
+static void sub_8077B74(void)
+{
+ int i;
+ struct SpriteTemplate temp;
+ u8 id;
+ u32 xPos;
+
+ switch (gMain.state)
+ {
+ case 0:
+ sub_80772A4();
+ gMain.state++;
+ break;
+ case 1:
+ gMain.state++;
+ gUnknown_0203229C->unk_A8 = 0;
+ break;
+ case 2:
+ gMain.state++;
+ break;
+ case 3:
+ gMain.state++;
+ break;
+ case 4:
+ CalculatePlayerPartyCount();
+ gMain.state++;
+ break;
+ case 5:
+ if (gWirelessCommType)
+ {
+ sub_800E0E8();
+ CreateWirelessStatusIndicatorSprite(0, 0);
+ }
+ gMain.state++;
+ break;
+ case 6:
+ gMain.state++;
+ break;
+ case 7:
+ CalculateEnemyPartyCount();
+ gUnknown_0203229C->partyCounts[0] = gPlayerPartyCount;
+ gUnknown_0203229C->partyCounts[1] = gEnemyPartyCount;
+ ClearWindowTilemap(0);
+ sub_8079BE0(0);
+ sub_8079BE0(1);
+
+ for (i = 0; i < gUnknown_0203229C->partyCounts[0]; i++)
+ {
+ struct Pokemon *mon = &gPlayerParty[i];
+ gUnknown_0203229C->partyIcons[0][i] = CreateMonIcon(GetMonData(mon, MON_DATA_SPECIES2, NULL),
+ sub_80D3014,
+ (gTradeMonSpriteCoords[i][0] * 8) + 14,
+ (gTradeMonSpriteCoords[i][1] * 8) - 12,
+ 1,
+ GetMonData(mon, MON_DATA_PERSONALITY),
+ TRUE);
+ }
+
+ for (i = 0; i < gUnknown_0203229C->partyCounts[1]; i++)
+ {
+ struct Pokemon *mon = &gEnemyParty[i];
+ gUnknown_0203229C->partyIcons[1][i] = CreateMonIcon(GetMonData(mon, MON_DATA_SPECIES2, NULL),
+ sub_80D3014,
+ (gTradeMonSpriteCoords[i + PARTY_SIZE][0] * 8) + 14,
+ (gTradeMonSpriteCoords[i + PARTY_SIZE][1] * 8) - 12,
+ 1,
+ GetMonData(mon, MON_DATA_PERSONALITY),
+ FALSE);
+ }
+ gMain.state++;
+ break;
+ case 8:
+ LoadHeldItemIcons();
+ sub_81B5D4C(&gUnknown_0203229C->partyCounts[0], gUnknown_0203229C->partyIcons[0], 0);
+ gMain.state++;
+ break;
+ case 9:
+ sub_81B5D4C(&gUnknown_0203229C->partyCounts[0], gUnknown_0203229C->partyIcons[0], 1);
+ gMain.state++;
+ break;
+ case 10:
+ sub_80C6D80(gSaveBlock2Ptr->playerName, gUnknown_02032188[0], 0, 0, 3);
+ id = GetMultiplayerId();
+ sub_80C6D80(gLinkPlayers[id ^ 1].name, gUnknown_02032188[3], 0, 0, 3);
+ sub_80C6D80(gUnknown_0832DE94[0], gUnknown_02032188[6], 0, 0, 2);
+ sub_807A308(gUnknown_0832DE94[1], gUnknown_02032188[8], 24);
+ gMain.state++;
+ gUnknown_0203229C->unk_A8 = 0;
+ break;
+ case 11:
+ if (sub_807A1F0())
+ gMain.state++;
+ break;
+ case 12:
+ xPos = GetStringCenterAlignXOffset(1, gSaveBlock2Ptr->playerName, 120);
+ for (i = 0; i < 3; i++)
+ {
+ temp = gSpriteTemplate_832DCAC;
+ temp.tileTag += i;
+ CreateSprite(&temp, xPos + (i * 32) + 16, 10, 1);
+ }
+
+ xPos = GetStringCenterAlignXOffset(1, gLinkPlayers[GetMultiplayerId() ^ 1].name, 120);
+ for (i = 0; i < 3; i++)
+ {
+ temp = gSpriteTemplate_832DCAC;
+ temp.tileTag += i + 3;
+ CreateSprite(&temp, xPos + (i * 32) + 136, 10, 1);
+ }
+ gMain.state++;
+ break;
+ case 13:
+ temp = gSpriteTemplate_832DCAC;
+ temp.tileTag += 6;
+ CreateSprite(&temp, 215, 152, 1);
+ temp = gSpriteTemplate_832DCAC;
+ temp.tileTag += 7;
+ CreateSprite(&temp, 247, 152, 1);
+
+ for (i = 0; i < PARTY_SIZE; i++)
+ {
+ temp = gSpriteTemplate_832DCAC;
+ temp.tileTag += i + 8;
+ CreateSprite(&temp, (i * 32) + 24, 150, 1);
+ }
+
+ if (gUnknown_0203229C->tradeMenuCursorPosition < PARTY_SIZE)
+ gUnknown_0203229C->tradeMenuCursorPosition = gUnknown_0203CF20;
+ else
+ gUnknown_0203229C->tradeMenuCursorPosition = gUnknown_0203CF20 + PARTY_SIZE;
+
+ gUnknown_0203229C->tradeMenuCursorSpriteIdx = CreateSprite(&gSpriteTemplate_832DC94, gTradeMonSpriteCoords[gUnknown_0203229C->tradeMenuCursorPosition][0] * 8 + 32, gTradeMonSpriteCoords[gUnknown_0203229C->tradeMenuCursorPosition][1] * 8, 2);
+ gMain.state = 16;
+ break;
+ case 16:
+ sub_80782B8(0);
+ gMain.state++;
+ break;
+ case 17:
+ sub_80782B8(1);
+ gUnknown_0203229C->unk_0 = 0;
+ gUnknown_0203229C->unk_1 = 0;
+ sub_8078388();
+ gMain.state++;
+ break;
+ case 18:
+ gPaletteFade.bufferTransferDisabled = FALSE;
+ BlendPalettes(0xFFFFFFFF, 16, RGB_BLACK);
+ BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, RGB_BLACK);
+ gMain.state++;
+ break;
+ case 19:
+ SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_OBJ_1D_MAP | DISPCNT_OBJ_ON);
+ sub_80782B8(2);
+ gMain.state++;
+ break;
+ case 20:
+ gMain.state++;
+ break;
+ case 21:
+ sub_807A53C();
+ gMain.state++;
+ break;
+ case 22:
+ if (!gPaletteFade.active)
+ {
+ SetMainCallback2(sub_807825C);
+ }
+ break;
+ }
+
+ RunTasks();
+ AnimateSprites();
+ BuildOamBuffer();
+ UpdatePaletteFade();
+}
+
+static void sub_807811C(void)
+{
+ LoadOam();
+ ProcessSpriteCopyRequests();
+ TransferPlttBuffer();
+}
+
+static void sub_8078130(void)
+{
+ if (++gUnknown_0203229C->unk_A8 > 15)
+ {
+ BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK);
+ gUnknown_0203229C->unk_6F = 10;
+ }
+}
+
+static void sub_807816C(void)
+{
+ if (!gPaletteFade.active)
+ {
+ gUnknown_02032298[0] = gUnknown_0203229C->tradeMenuCursorPosition;
+ gUnknown_02032298[1] = gUnknown_0203229C->unk_7E;
+
+ if (gWirelessCommType)
+ {
+ gUnknown_0203229C->unk_6F = 16;
+ }
+ else
+ {
+ sub_800ABF4(32);
+ gUnknown_0203229C->unk_6F = 13;
+ }
+ }
+}
+
+static void sub_80781C8(void)
+{
+ gMain.savedCallback = sub_80773AC;
+
+ if (gWirelessCommType)
+ {
+ if (sub_8010500())
+ {
+ Free(gUnknown_02032184);
+ FreeAllWindowBuffers();
+ Free(gUnknown_0203229C);
+ gMain.callback1 = NULL;
+ sub_800E084();
+ SetMainCallback2(sub_807AE50);
+ }
+ }
+ else
+ {
+ if (!gReceivedRemoteLinkPlayers)
+ {
+ Free(gUnknown_02032184);
+ FreeAllWindowBuffers();
+ Free(gUnknown_0203229C);
+ gMain.callback1 = NULL;
+ SetMainCallback2(sub_807AE50);
+ }
+ }
+}
+
+static void sub_807825C(void)
+{
+ u8 temp;
+
+ sub_80795AC();
+ sub_807A0C4();
+ sub_80796B4(0);
+ sub_80796B4(1);
+
+ SetGpuReg(REG_OFFSET_BG2HOFS, gUnknown_0203229C->unk_0++);
+ SetGpuReg(REG_OFFSET_BG3HOFS, gUnknown_0203229C->unk_1--);
+
+ RunTextPrintersAndIsPrinter0Active();
+ RunTasks();
+ AnimateSprites();
+ BuildOamBuffer();
+ UpdatePaletteFade();
+}
+
+static void sub_80782B8(u8 a0)
+{
+ int i;
+
+ switch (a0)
+ {
+ case 0:
+ LoadPalette(gUnknown_08DDB3E4, 0, 0x60);
+ LoadBgTiles(1, gUnknown_08DDB464, 0x1280, 0);
+ CopyToBgTilemapBufferRect_ChangePalette(1, gUnknown_08DDCF04, 0, 0, 32, 20, 0);
+ LoadBgTilemap(2, gTradeStripesBG2Tilemap, 0x800, 0);
+ break;
+ case 1:
+ LoadBgTilemap(3, gTradeStripesBG3Tilemap, 0x800, 0);
+ sub_8079E44(0);
+ sub_8079E44(1);
+ CopyBgTilemapBufferToVram(1);
+ break;
+ case 2:
+ for (i = 0; i < 4; i++)
+ {
+ SetGpuReg(REG_OFFSET_BG0HOFS + (i * 2), 0);
+ }
+ ShowBg(0);
+ ShowBg(1);
+ ShowBg(2);
+ ShowBg(3);
+ break;
+ }
+}
+
+static void sub_8078388(void)
+{
+ int i;
+
+ for (i = 0; i < PARTY_SIZE; i++)
+ {
+ if (i < gUnknown_0203229C->partyCounts[0])
+ {
+ gSprites[gUnknown_0203229C->partyIcons[0][i]].invisible = FALSE;
+ gUnknown_0203229C->tradeMenuOptionsActive[i] = TRUE;
+ }
+ else
+ {
+ gUnknown_0203229C->tradeMenuOptionsActive[i] = FALSE;
+ }
+
+ if (i < gUnknown_0203229C->partyCounts[1])
+ {
+ gSprites[gUnknown_0203229C->partyIcons[1][i]].invisible = FALSE;
+ gUnknown_0203229C->tradeMenuOptionsActive[i + PARTY_SIZE] = TRUE;
+ }
+ else
+ {
+ gUnknown_0203229C->tradeMenuOptionsActive[i + PARTY_SIZE] = FALSE;
+ }
+ }
+
+ gUnknown_0203229C->unk_44 = 1;
+}
+
+// why not just use memcpy?
+static void Trade_Memcpy(void *dataDest, const void *dataSrc, u32 count)
+{
+ u8 *dest = dataDest;
+ const u8 *src = dataSrc;
+ u32 i;
+
+ for (i = 0; i < count; i++)
+ {
+ dest[i] = src[i];
+ }
+}
+
+static bool8 shedinja_maker_maybe(void)
+{
+ u8 id = GetMultiplayerId();
+ int i;
+ struct Pokemon *mon;
+
+ switch (gUnknown_0203229C->unk_69)
+ {
+ case 0:
+ Trade_Memcpy(gBlockSendBuffer, &gPlayerParty[0], 2 * sizeof(struct Pokemon));
+ gUnknown_0203229C->unk_69++;
+ gUnknown_0203229C->unk_A8 = 0;
+ break;
+ case 1:
+ if (sub_80771BC())
+ {
+ if (_GetBlockReceivedStatus() == 0)
+ {
+ gUnknown_0203229C->unk_69++;
+ }
+ else
+ {
+ sub_8077210();
+ gUnknown_0203229C->unk_69++;
+ }
+ }
+ break;
+ case 3:
+ if (id == 0)
+ {
+ sub_80771AC(1);
+ }
+ gUnknown_0203229C->unk_69++;
+ break;
+ case 4:
+ if (_GetBlockReceivedStatus() == 3)
+ {
+ Trade_Memcpy(&gEnemyParty[0], gBlockRecvBuffer[id ^ 1], 2 * sizeof(struct Pokemon));
+ sub_8077210();
+ gUnknown_0203229C->unk_69++;
+ }
+ break;
+ case 5:
+ Trade_Memcpy(gBlockSendBuffer, &gPlayerParty[2], 2 * sizeof(struct Pokemon));
+ gUnknown_0203229C->unk_69++;
+ break;
+ case 7:
+ if (id == 0)
+ {
+ sub_80771AC(1);
+ }
+ gUnknown_0203229C->unk_69++;
+ break;
+ case 8:
+ if (_GetBlockReceivedStatus() == 3)
+ {
+ Trade_Memcpy(&gEnemyParty[2], gBlockRecvBuffer[id ^ 1], 200);
+ sub_8077210();
+ gUnknown_0203229C->unk_69++;
+ }
+ break;
+ case 9:
+ Trade_Memcpy(gBlockSendBuffer, &gPlayerParty[4], 200);
+ gUnknown_0203229C->unk_69++;
+ break;
+ case 11:
+ if (id == 0)
+ {
+ sub_80771AC(1);
+ }
+ gUnknown_0203229C->unk_69++;
+ break;
+ case 12:
+ if (_GetBlockReceivedStatus() == 3)
+ {
+ Trade_Memcpy(&gEnemyParty[4], gBlockRecvBuffer[id ^ 1], 200);
+ sub_8077210();
+ gUnknown_0203229C->unk_69++;
+ }
+ break;
+ case 13:
+ Trade_Memcpy(gBlockSendBuffer, gSaveBlock1Ptr->mail, 220);
+ gUnknown_0203229C->unk_69++;
+ break;
+ case 15:
+ if (id == 0)
+ {
+ sub_80771AC(3);
+ }
+ gUnknown_0203229C->unk_69++;
+ break;
+ case 16:
+ if (_GetBlockReceivedStatus() == 3)
+ {
+ Trade_Memcpy(gUnknown_020321C0, gBlockRecvBuffer[id ^ 1], 216);
+ sub_8077210();
+ gUnknown_0203229C->unk_69++;
+ }
+ break;
+ case 17:
+ Trade_Memcpy(gBlockSendBuffer, gSaveBlock1Ptr->giftRibbons, 11);
+ gUnknown_0203229C->unk_69++;
+ break;
+ case 19:
+ if (id == 0)
+ {
+ sub_80771AC(4);
+ }
+ gUnknown_0203229C->unk_69++;
+ break;
+ case 20:
+ if (_GetBlockReceivedStatus() == 3)
+ {
+ Trade_Memcpy(gUnknown_0203229C->unk_A9, gBlockRecvBuffer[id ^ 1], 11);
+ sub_8077210();
+ gUnknown_0203229C->unk_69++;
+ }
+ break;
+ case 21:
+ for (i = 0, mon = gEnemyParty; i < PARTY_SIZE; mon++, i++)
+ {
+ u8 name[POKEMON_NAME_LENGTH + 1];
+ u16 species = GetMonData(mon, MON_DATA_SPECIES);
+
+ if (species != SPECIES_NONE)
+ {
+ if (species == SPECIES_SHEDINJA && GetMonData(mon, MON_DATA_LANGUAGE) != LANGUAGE_JAPANESE)
+ {
+ GetMonData(mon, MON_DATA_NICKNAME, name);
+
+ if (!StringCompareWithoutExtCtrlCodes(name, gJPText_Shedinja))
+ {
+ SetMonData(mon, MON_DATA_NICKNAME, gSpeciesNames[SPECIES_SHEDINJA]);
+ }
+ }
+ }
+ }
+ return TRUE;
+ case 2:
+ case 6:
+ case 10:
+ case 14:
+ case 18:
+ gUnknown_0203229C->unk_A8++;
+ if (gUnknown_0203229C->unk_A8 > 10)
+ {
+ gUnknown_0203229C->unk_A8 = 0;
+ gUnknown_0203229C->unk_69++;
+ }
+ break;
+ }
+ return FALSE;
+}
+
+static void sub_80787B8(void)
+{
+ sub_807A308(gText_IsThisTradeOkay, (void *)(OBJ_VRAM0 + (gUnknown_0203229C->unk_72 * 32)), 24);
+}
+
+static void sub_80787E0(u8 a0, u8 a1)
+{
+ if (a1 & 1)
+ {
+ switch (gBlockRecvBuffer[0][0])
+ {
+ case 0xEEAA:
+ gUnknown_0203229C->unk_78 = 2;
+ break;
+ case 0xAABB:
+ gUnknown_0203229C->unk_78 = 1;
+ break;
+ case 0xBBBB:
+ gUnknown_0203229C->unk_7A = 1;
+ break;
+ case 0xBBCC:
+ gUnknown_0203229C->unk_7A = 2;
+ break;
+ }
+ sub_8077234(0);
+ }
+
+ if (a1 & 2)
+ {
+ switch (gBlockRecvBuffer[1][0])
+ {
+ case 0xEEAA:
+ gUnknown_0203229C->unk_79 = 2;
+ break;
+ case 0xAABB:
+ gUnknown_0203229C->unk_7E = gBlockRecvBuffer[1][1] + 6;
+ gUnknown_0203229C->unk_79 = 1;
+ break;
+ case 0xBBBB:
+ gUnknown_0203229C->unk_7B = 1;
+ break;
+ case 0xBBCC:
+ gUnknown_0203229C->unk_7B = 2;
+ break;
+ }
+ sub_8077234(1);
+ }
+}
+
+static void sub_8078900(u8 a0, u8 a1)
+{
+ if (a1 & 1)
+ {
+ switch (gBlockRecvBuffer[0][0])
+ {
+ case 0xEEBB:
+ BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK);
+ sub_807A19C(4);
+ gUnknown_0203229C->unk_6F = 11;
+ break;
+ case 0xEECC:
+ sub_807A19C(5);
+ gUnknown_0203229C->unk_6F = 8;
+ break;
+ case 0xDDDD:
+ gUnknown_0203229C->unk_7E = gBlockRecvBuffer[0][1] + 6;
+ rbox_fill_rectangle(0);
+ sub_807967C(gUnknown_0203229C->tradeMenuCursorPosition);
+ sub_807967C(gUnknown_0203229C->unk_7E);
+ gUnknown_0203229C->unk_6F = 7;
+ break;
+ case 0xCCDD:
+ BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK);
+ gUnknown_0203229C->unk_6F = 10;
+ break;
+ case 0xDDEE:
+ sub_807A19C(1);
+ gUnknown_0203229C->unk_6F = 8;
+ }
+ sub_8077234(0);
+ }
+
+ if (a1 & 2)
+ sub_8077234(1);
+}
+
+static void sub_80789FC(void)
+{
+ if (gUnknown_0203229C->unk_78 && gUnknown_0203229C->unk_79)
+ {
+ if (gUnknown_0203229C->unk_78 == 1 && gUnknown_0203229C->unk_79 == 1)
+ {
+ gUnknown_0203229C->unk_6F = 6;
+ gUnknown_0203229C->linkData[0] = 0xDDDD;
+ gUnknown_0203229C->linkData[1] = gUnknown_0203229C->tradeMenuCursorPosition;
+ sub_807A048(5, 0);
+ gUnknown_0203229C->unk_78 = gUnknown_0203229C->unk_79 = 0;
+ }
+ else if (gUnknown_0203229C->unk_78 == 1 && gUnknown_0203229C->unk_79 == 2)
+ {
+ sub_807A19C(1);
+ gUnknown_0203229C->linkData[0] = 0xEECC;
+ gUnknown_0203229C->linkData[1] = 0;
+ sub_807A048(5, 0);
+ gUnknown_0203229C->unk_7A = gUnknown_0203229C->unk_7B = 0;
+ gUnknown_0203229C->unk_78 = gUnknown_0203229C->unk_79 = 0;
+ gUnknown_0203229C->unk_6F = 8;
+ }
+ else if (gUnknown_0203229C->unk_78 == 2 && gUnknown_0203229C->unk_79 == 1)
+ {
+ sub_807A19C(5);
+ gUnknown_0203229C->linkData[0] = 0xDDEE;
+ gUnknown_0203229C->linkData[1] = 0;
+ sub_807A048(5, 0);
+ gUnknown_0203229C->unk_7A = gUnknown_0203229C->unk_7B = 0;
+ gUnknown_0203229C->unk_78 = gUnknown_0203229C->unk_79 = 0;
+ gUnknown_0203229C->unk_6F = 8;
+ }
+ else if (gUnknown_0203229C->unk_78 == 2 && gUnknown_0203229C->unk_79 == 2)
+ {
+ gUnknown_0203229C->linkData[0] = 0xEEBB;
+ gUnknown_0203229C->linkData[1] = 0;
+ sub_807A048(5, 0);
+ BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK);
+ gUnknown_0203229C->unk_78 = gUnknown_0203229C->unk_79 = 0;
+ gUnknown_0203229C->unk_6F = 11;
+ }
+ }
+
+ if (gUnknown_0203229C->unk_7A && gUnknown_0203229C->unk_7B)
+ {
+ if (gUnknown_0203229C->unk_7A == 1 && gUnknown_0203229C->unk_7B == 1)
+ {
+ gUnknown_0203229C->linkData[0] = 0xCCDD;
+ gUnknown_0203229C->linkData[1] = 0;
+ sub_807A048(5, 0);
+ gUnknown_0203229C->unk_7A = 0;
+ gUnknown_0203229C->unk_7B = 0;
+ gUnknown_0203229C->unk_6F = 9;
+ }
+
+ if (gUnknown_0203229C->unk_7A == 2 || gUnknown_0203229C->unk_7B == 2)
+ {
+ sub_807A19C(1);
+ gUnknown_0203229C->linkData[0] = 0xDDEE;
+ gUnknown_0203229C->linkData[1] = 0;
+ sub_807A048(5, 0);
+ gUnknown_0203229C->unk_7A = 0;
+ gUnknown_0203229C->unk_7B = 0;
+ gUnknown_0203229C->unk_6F = 8;
+ }
+ }
+}
+
+static void sub_8078BFC(u16 *a0, u16 a1, u16 a2)
+{
+ a0[0] = a1;
+ a0[1] = a2;
+ sub_807A048(5, 0);
+}
+
+static void sub_8078C10(u16 a0, u16 a1)
+{
+ sub_8078BFC(gUnknown_0203229C->linkData, a0, a1);
+}
+
+static void sub_8078C34(void)
+{
+ u8 mpId = GetMultiplayerId();
+ u8 status;
+
+ if ((status = _GetBlockReceivedStatus()))
+ {
+ if (mpId == 0)
+ sub_80787E0(mpId, status);
+ else
+ sub_8078900(mpId, status);
+ }
+
+ if (mpId == 0)
+ sub_80789FC();
+}
+
+static u8 sub_8078C6C(u8 oldPosition, u8 direction)
+{
+ int i;
+ u8 newPosition = 0;
+
+ for (i = 0; i < PARTY_SIZE; i++)
+ {
+ if (gUnknown_0203229C->tradeMenuOptionsActive[gTradeNextSelectedMonTable[oldPosition][direction][i]] == TRUE)
+ {
+ newPosition = gTradeNextSelectedMonTable[oldPosition][direction][i];
+ break;
+ }
+ }
+
+ return newPosition;
+}
+
+static void TradeMenuMoveCursor(u8 *tradeMenuCursorPosition, u8 direction)
+{
+ u8 newPosition = sub_8078C6C(*tradeMenuCursorPosition, direction);
+
+ if (newPosition == 12) // CANCEL
+ {
+ StartSpriteAnim(&gSprites[gUnknown_0203229C->tradeMenuCursorSpriteIdx], 1);
+ gSprites[gUnknown_0203229C->tradeMenuCursorSpriteIdx].pos1.x = 224;
+ gSprites[gUnknown_0203229C->tradeMenuCursorSpriteIdx].pos1.y = 160;
+ }
+ else
+ {
+ StartSpriteAnim(&gSprites[gUnknown_0203229C->tradeMenuCursorSpriteIdx], 0);
+ gSprites[gUnknown_0203229C->tradeMenuCursorSpriteIdx].pos1.x = gTradeMonSpriteCoords[newPosition][0] * 8 + 32;
+ gSprites[gUnknown_0203229C->tradeMenuCursorSpriteIdx].pos1.y = gTradeMonSpriteCoords[newPosition][1] * 8;
+ }
+
+ if (*tradeMenuCursorPosition != newPosition)
+ {
+ PlaySE(SE_SELECT);
+ }
+
+ *tradeMenuCursorPosition = newPosition;
+}
+
+static void sub_8078D78(void)
+{
+ sub_807A19C(0);
+ gUnknown_0203229C->unk_6F = 100;
+
+ if (GetMultiplayerId() == 1)
+ {
+ sub_8078C10(0xAABB, gUnknown_0203229C->tradeMenuCursorPosition);
+ }
+ else
+ {
+ gUnknown_0203229C->unk_78 = 1;
+ }
+}
+
+static void sub_8078DBC(void)
+{
+ if (gMain.newAndRepeatedKeys & DPAD_UP)
+ {
+ TradeMenuMoveCursor(&gUnknown_0203229C->tradeMenuCursorPosition, 0);
+ }
+ else if (gMain.newAndRepeatedKeys & DPAD_DOWN)
+ {
+ TradeMenuMoveCursor(&gUnknown_0203229C->tradeMenuCursorPosition, 1);
+ }
+ else if (gMain.newAndRepeatedKeys & DPAD_LEFT)
+ {
+ TradeMenuMoveCursor(&gUnknown_0203229C->tradeMenuCursorPosition, 2);
+ }
+ else if (gMain.newAndRepeatedKeys & DPAD_RIGHT)
+ {
+ TradeMenuMoveCursor(&gUnknown_0203229C->tradeMenuCursorPosition, 3);
+ }
+
+ if (gMain.newKeys & A_BUTTON)
+ {
+ PlaySE(SE_SELECT);
+
+ if (gUnknown_0203229C->tradeMenuCursorPosition < 6)
+ {
+ sub_8098858(1, 1, 14);
+ FillWindowPixelBuffer(1, 0x11);
+ PrintMenuTable(1, 2, gUnknown_0832DEAC);
+ InitMenuInUpperLeftCornerPlaySoundWhenAPressed(1, 2, 0);
+ PutWindowTilemap(1);
+ CopyWindowToVram(1, 3);
+ gUnknown_0203229C->unk_6F = 1;
+ }
+ else if (gUnknown_0203229C->tradeMenuCursorPosition < 12)
+ {
+ BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK);
+ gUnknown_0203229C->unk_6F = 2;
+ }
+ else if (gUnknown_0203229C->tradeMenuCursorPosition == 12)
+ {
+ CreateYesNoMenu(&gUnknown_0832DF8C, 1, 14, 0);
+ gUnknown_0203229C->unk_6F = 4;
+ sub_807A308(gUnknown_0832DE94[4], (void *)(OBJ_VRAM0 + gUnknown_0203229C->unk_72 * 32), 24);
+ }
+ }
+}
+
+static void sub_8078EF8(void)
+{
+ sub_8079F74();
+ gUnknown_0203229C->unk_6F = 0;
+ gSprites[gUnknown_0203229C->tradeMenuCursorSpriteIdx].invisible = FALSE;
+ sub_807A308(gUnknown_0832DE94[1], (void *)(OBJ_VRAM0 + gUnknown_0203229C->unk_72 * 32), 24);
+}
+
+static void sub_8078F50(void)
+{
+ switch (Menu_ProcessInputNoWrap())
+ {
+ case MENU_B_PRESSED:
+ PlaySE(SE_SELECT);
+ sub_8078EF8();
+ break;
+ case MENU_NOTHING_CHOSEN:
+ break;
+ case 0:
+ BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK);
+ gUnknown_0203229C->unk_6F = 2;
+ break;
+ case 1:
+ switch (sub_807A5F4(gPlayerParty, gPlayerPartyCount, gUnknown_0203229C->tradeMenuCursorPosition))
+ {
+ case 0:
+ sub_8078D78();
+ gSprites[gUnknown_0203229C->tradeMenuCursorSpriteIdx].invisible = TRUE;
+ break;
+ case 1:
+ sub_807A048(3, 3);
+ gUnknown_0203229C->unk_6F = 8;
+ break;
+ case 2:
+ case 4:
+ sub_807A048(3, 6);
+ gUnknown_0203229C->unk_6F = 8;
+ break;
+ case 3:
+ case 5:
+ sub_807A048(3, 7);
+ gUnknown_0203229C->unk_6F = 8;
+ break;
+ }
+ break;
+ }
+}
+
+static void sub_8079034(void)
+{
+ if ((gMain.newKeys & A_BUTTON) || (gMain.newKeys & B_BUTTON))
+ {
+ PlaySE(SE_SELECT);
+ sub_8078EF8();
+ }
+}
+
+static void sub_807905C(void)
+{
+ if (!gPaletteFade.active)
+ {
+ if (gUnknown_0203229C->tradeMenuCursorPosition < PARTY_SIZE)
+ {
+ ShowPokemonSummaryScreen(PSS_MODE_UNK1, gPlayerParty, gUnknown_0203229C->tradeMenuCursorPosition, gUnknown_0203229C->partyCounts[0] - 1, sub_8077B74);
+ }
+ else
+ {
+ ShowPokemonSummaryScreen(PSS_MODE_UNK1, gEnemyParty, gUnknown_0203229C->tradeMenuCursorPosition - PARTY_SIZE, gUnknown_0203229C->partyCounts[1] - 1, sub_8077B74);
+ }
+ FreeAllWindowBuffers();
+ }
+}
+
+static u8 sub_80790D4(u8 *a0, u8 a1, u8 a2, u8 a3)
+{
+ int i;
+ u16 species;
+ u8 res = 0;
+
+ for (i = 0; i < a1; i++)
+ {
+ if (a2 != i)
+ {
+ res += a0[i];
+ }
+ }
+
+ a3 %= PARTY_SIZE;
+ species = GetMonData(&gEnemyParty[a3], MON_DATA_SPECIES);
+
+ if (species == SPECIES_DEOXYS || species == SPECIES_MEW)
+ {
+ if (!GetMonData(&gEnemyParty[a3], MON_DATA_OBEDIENCE))
+ {
+ return 2;
+ }
+ }
+
+ if (!IsNationalPokedexEnabled())
+ {
+ if (gUnknown_0203229C->unk_51[1][a3] || !IsSpeciesInHoennDex(species))
+ {
+ return 2;
+ }
+ }
+
+ if (res)
+ {
+ res = 1;
+ }
+
+ return res;
+}
+
+static bool32 sub_8079174(void)
+{
+ int i;
+ u8 arr[12];
+
+ for (i = 0; i < gUnknown_0203229C->partyCounts[0]; i++)
+ {
+ arr[i] = gUnknown_0203229C->unk_45[0][i];
+ }
+
+ switch (sub_80790D4(arr, gUnknown_0203229C->partyCounts[0], gUnknown_0203229C->tradeMenuCursorPosition, gUnknown_0203229C->unk_7E))
+ {
+ case 0:
+ sub_807A048(3, 3);
+ sub_8078C10(0xBBCC, 0);
+ break;
+ case 1:
+ sub_807A048(3, 1);
+ sub_8078C10(0xBBBB, 0);
+ break;
+ case 2:
+ sub_807A048(3, 8);
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
+static void sub_8079218(void)
+{
+ switch (Menu_ProcessInputNoWrapClearOnChoose())
+ {
+ case 0:
+ if (!sub_8079174())
+ {
+ gUnknown_0203229C->unk_6F = 100;
+ }
+ else
+ {
+ gUnknown_0203229C->unk_6F = 17;
+ }
+ PutWindowTilemap(17);
+ break;
+ case 1:
+ case MENU_B_PRESSED:
+ sub_807A048(3, 1);
+ if (sub_80771BC())
+ sub_8078C10(0xBBCC, 0);
+ gUnknown_0203229C->unk_6F = 100;
+ PutWindowTilemap(17);
+ break;
+ }
+}
+
+static void sub_807929C(void)
+{
+ int i;
+
+ for (i = 0; i < gUnknown_0203229C->partyCounts[1] - 4; i++)
+ {
+ PutWindowTilemap(i + 12);
+ CopyWindowToVram(i + 12, 1);
+ }
+}
+
+static void sub_80792E4(void)
+{
+ switch (Menu_ProcessInputNoWrapClearOnChoose())
+ {
+ case 0:
+ sub_807A19C(4);
+ sub_8078C10(0xEEAA, 0);
+ gSprites[gUnknown_0203229C->tradeMenuCursorSpriteIdx].invisible = TRUE;
+ gUnknown_0203229C->unk_6F = 100;
+ sub_807929C();
+ break;
+ case 1:
+ case MENU_B_PRESSED:
+ PlaySE(SE_SELECT);
+ sub_8078EF8();
+ break;
+ }
+}
+
+static void sub_807935C(void)
+{
+ if (GetMultiplayerId() == 0)
+ {
+ rbox_fill_rectangle(0);
+ sub_807967C(gUnknown_0203229C->tradeMenuCursorPosition);
+ sub_807967C(gUnknown_0203229C->unk_7E);
+ }
+ gUnknown_0203229C->unk_6F = 7;
+}
+
+static void sub_8079398(void)
+{
+ if (gUnknown_0203229C->unk_74[0] == 5 && gUnknown_0203229C->unk_74[1] == 5)
+ {
+ sub_80787B8();
+ gUnknown_0203229C->unk_6F = 14;
+ }
+}
+
+static void DisplayMessageAndContinueTask(void)
+{
+ gUnknown_0203229C->unk_A8++;
+
+ if (gUnknown_0203229C->unk_A8 > 120)
+ {
+ CreateYesNoMenu(&gUnknown_0832DF8C, 1, 14, 0);
+ gUnknown_0203229C->unk_A8 = 0;
+ gUnknown_0203229C->unk_6F = 3;
+ }
+}
+
+static void sub_8079408(void)
+{
+ int i;
+
+ if (gMain.newKeys & A_BUTTON)
+ {
+ PlaySE(SE_SELECT);
+ rbox_fill_rectangle(0);
+ rbox_fill_rectangle(1);
+
+ for (i = 0; i < 4; i++)
+ {
+ FillWindowPixelBuffer(i + 14, 0);
+ rbox_fill_rectangle(i + 14);
+ }
+
+ sub_8079F88(0);
+ sub_8079F88(1);
+ gUnknown_0203229C->unk_6F = 0;
+ gSprites[gUnknown_0203229C->tradeMenuCursorSpriteIdx].invisible = FALSE;
+ }
+}
+
+static void sub_8079490(void)
+{
+ if (!gPaletteFade.active)
+ {
+ if (gWirelessCommType)
+ {
+ sub_800ADF8();
+ }
+ else
+ {
+ sub_800ABF4(12);
+ }
+
+ gUnknown_0203229C->unk_6F = 12;
+ }
+}
+
+static void sub_80794CC(void)
+{
+ if (gWirelessCommType)
+ {
+ if (sub_80771BC() && sub_807A09C() == 0)
+ {
+ Free(gUnknown_02032184);
+ Free(gUnknown_0203229C);
+ FreeAllWindowBuffers();
+ sub_800E084();
+ SetMainCallback2(c2_8056854);
+ }
+ }
+ else
+ {
+ if (!gReceivedRemoteLinkPlayers)
+ {
+ Free(gUnknown_02032184);
+ Free(gUnknown_0203229C);
+ FreeAllWindowBuffers();
+ SetMainCallback2(c2_8056854);
+ }
+ }
+}
+
+static void sub_8079550(void)
+{
+ if (!sub_801048C(FALSE) && sub_807A09C() == 0)
+ {
+ sub_800ADF8();
+ gUnknown_0203229C->unk_6F = 13;
+ }
+}
+
+static void sub_807957C(void)
+{
+ if (gMain.newKeys & A_BUTTON)
+ {
+ sub_8078C10(0xBBCC, 0);
+ gUnknown_0203229C->unk_6F = 100;
+ }
+}
+
+static void sub_80795AC(void)
+{
+ switch (gUnknown_0203229C->unk_6F)
+ {
+ case 0:
+ sub_8078DBC();
+ break;
+ case 1:
+ sub_8078F50();
+ break;
+ case 2:
+ sub_807905C();
+ break;
+ case 3:
+ sub_8079218();
+ break;
+ case 4:
+ sub_80792E4();
+ break;
+ case 6:
+ sub_807935C();
+ break;
+ case 7:
+ sub_8079398();
+ break;
+ case 8:
+ sub_8079408();
+ break;
+ case 9:
+ sub_8078130();
+ break;
+ case 10:
+ sub_807816C();
+ break;
+ case 11:
+ sub_8079490();
+ break;
+ case 12:
+ sub_80794CC();
+ break;
+ case 13:
+ sub_80781C8();
+ break;
+ case 14:
+ DisplayMessageAndContinueTask();
+ break;
+ case 15:
+ sub_8079034();
+ break;
+ case 16:
+ sub_8079550();
+ break;
+ case 17:
+ sub_807957C();
+ break;
+ }
+}
+
+static void sub_807967C(u8 a0)
+{
+ u8 whichParty = a0 / PARTY_SIZE;
+
+ if (gUnknown_0203229C->unk_74[whichParty] == 0)
+ {
+ gUnknown_0203229C->unk_74[whichParty] = 1;
+ gUnknown_0203229C->unk_76[whichParty] = a0;
+ }
+}
+
+static void sub_80796B4(u8 a0)
+{
+ s8 nameStringWidth;
+ u8 nickname[20];
+ u8 movesString[56];
+ u8 i;
+ u8 partyIdx;
+ u8 whichParty;
+ u8 monIdx = gUnknown_0203229C->unk_76[a0];
+
+ whichParty = 1;
+ if (gUnknown_0203229C->unk_76[a0] < PARTY_SIZE)
+ whichParty = 0;
+ partyIdx = monIdx % PARTY_SIZE;
+ nameStringWidth = 0;
+
+ switch (gUnknown_0203229C->unk_74[a0])
+ {
+ case 1:
+ for (i = 0; i < gUnknown_0203229C->partyCounts[a0]; i++)
+ {
+ gSprites[gUnknown_0203229C->partyIcons[0][i + (whichParty * PARTY_SIZE)]].invisible = TRUE;
+ }
+
+ for (i = 0; i < 6; i++)
+ {
+ ClearWindowTilemap(i + (a0 * 6 + 2));
+ }
+
+ gSprites[gUnknown_0203229C->partyIcons[0][partyIdx + (whichParty * PARTY_SIZE)]].invisible = FALSE;
+ gSprites[gUnknown_0203229C->partyIcons[0][partyIdx + (whichParty * PARTY_SIZE)]].data[0] = 20;
+ gSprites[gUnknown_0203229C->partyIcons[0][partyIdx + (whichParty * PARTY_SIZE)]].data[2] = (gTradeMonSpriteCoords[whichParty * PARTY_SIZE][0] + gTradeMonSpriteCoords[whichParty * PARTY_SIZE + 1][0]) / 2 * 8 + 14;
+ gSprites[gUnknown_0203229C->partyIcons[0][partyIdx + (whichParty * PARTY_SIZE)]].data[4] = (gTradeMonSpriteCoords[whichParty * PARTY_SIZE][1] * 8) - 12;
+ StoreSpriteCallbackInData6(&gSprites[gUnknown_0203229C->partyIcons[0][partyIdx + (whichParty * PARTY_SIZE)]], sub_80D3014);
+ gUnknown_0203229C->unk_74[a0]++;
+ sub_80A6DEC(&gSprites[gUnknown_0203229C->partyIcons[0][partyIdx + (whichParty * PARTY_SIZE)]]);
+ CopyToBgTilemapBufferRect_ChangePalette(1, gTradePartyBoxTilemap, a0 * 15, 0, 15, 17, 0);
+ CopyBgTilemapBufferToVram(1);
+ CopyBgTilemapBufferToVram(0);
+
+ if (whichParty == 0)
+ sub_8079F74();
+ break;
+ case 2:
+ if (gSprites[gUnknown_0203229C->partyIcons[0][partyIdx + (whichParty * PARTY_SIZE)]].callback == sub_80D3014)
+ gUnknown_0203229C->unk_74[a0] = 3;
+ break;
+ case 3:
+ CopyToBgTilemapBufferRect_ChangePalette(1, gTradeMovesBoxTilemap, whichParty * 15, 0, 15, 17, 0);
+ CopyBgTilemapBufferToVram(1);
+ gSprites[gUnknown_0203229C->partyIcons[0][partyIdx + (whichParty * PARTY_SIZE)]].pos1.x = (gTradeMonSpriteCoords[whichParty * PARTY_SIZE][0] + gTradeMonSpriteCoords[whichParty * PARTY_SIZE + 1][0]) / 2 * 8 + 14;
+ gSprites[gUnknown_0203229C->partyIcons[0][partyIdx + (whichParty * PARTY_SIZE)]].pos1.y = (gTradeMonSpriteCoords[whichParty * PARTY_SIZE][1] * 8) - 12;
+ gSprites[gUnknown_0203229C->partyIcons[0][partyIdx + (whichParty * PARTY_SIZE)]].pos2.x = 0;
+ gSprites[gUnknown_0203229C->partyIcons[0][partyIdx + (whichParty * PARTY_SIZE)]].pos2.y = 0;
+ nameStringWidth = sub_8079A3C(nickname, whichParty, partyIdx);
+ AddTextPrinterParameterized3((a0 * 2) + 14, 0, (80 - nameStringWidth) / 2, 4, gUnknown_0832DEE0, 0, nickname);
+ sub_8079AA4(movesString, whichParty, partyIdx);
+ AddTextPrinterParameterized4((a0 * 2) + 15, 1, 0, 0, 0, 0, gUnknown_0832DEE0, 0, movesString);
+ PutWindowTilemap((a0 * 2) + 14);
+ CopyWindowToVram((a0 * 2) + 14, 3);
+ PutWindowTilemap((a0 * 2) + 15);
+ CopyWindowToVram((a0 * 2) + 15, 3);
+ gUnknown_0203229C->unk_74[a0]++;
+ break;
+ case 4:
+ sub_8079C4C(a0, partyIdx, gUnknown_0832DF99[a0][0] + 4, gUnknown_0832DF99[a0][1] + 1, gUnknown_0832DF99[a0][0], gUnknown_0832DF99[a0][1]);
+ gUnknown_0203229C->unk_74[a0]++;
+ break;
+ }
+}
+
+static u8 sub_8079A3C(u8 *str, u8 whichParty, u8 monIdx)
+{
+ u8 nickname[12];
+
+ if (whichParty == 0)
+ GetMonData(&gPlayerParty[monIdx], MON_DATA_NICKNAME, nickname);
+ else
+ GetMonData(&gEnemyParty[monIdx], MON_DATA_NICKNAME, nickname);
+
+ StringCopy10(str, nickname);
+ return GetStringWidth(0, str, GetFontAttribute(0, FONTATTR_LETTER_SPACING));
+}
+
+static void sub_8079AA4(u8 *a0, u8 a1, u8 a2)
+{
+ u16 arr[4];
+ u16 i;
+
+ if (!gUnknown_0203229C->unk_51[a1][a2])
+ {
+ for (i = 0; i < MAX_MON_MOVES; i++)
+ {
+ if (!a1)
+ {
+ arr[i] = GetMonData(&gPlayerParty[a2], i + MON_DATA_MOVE1, NULL);
+ }
+ else
+ {
+ arr[i] = GetMonData(&gEnemyParty[a2], i + MON_DATA_MOVE1, NULL);
+ }
+ }
+
+ StringCopy(a0, gText_EmptyString7);
+
+ for (i = 0; i < MAX_MON_MOVES; i++)
+ {
+ if (arr[i] != MOVE_NONE)
+ {
+ StringAppend(a0, gMoveNames[arr[i]]);
+ }
+
+ StringAppend(a0, gText_NewLine3);
+ }
+ }
+ else
+ {
+ StringCopy(a0, gText_EmptyString7);
+ StringAppend(a0, gText_FourQuestionMarks);
+ }
+}
+
+static void sub_8079B84(u8 whichParty, u8 windowId, u8 *str)
+{
+ u8 xPos;
+ windowId += (whichParty * PARTY_SIZE) + 2;
+ xPos = GetStringCenterAlignXOffset(0, str, 64);
+ AddTextPrinterParameterized3(windowId, 0, xPos, 4, gUnknown_0832DEE0, 0, str);
+ PutWindowTilemap(windowId);
+ CopyWindowToVram(windowId, 3);
+}
+
+static void sub_8079BE0(u8 whichParty)
+{
+ u8 i;
+ u8 sp[20];
+ u8 sp14[32];
+ struct Pokemon *mons = whichParty == 0 ? gPlayerParty : gEnemyParty;
+
+ for (i = 0; i < gUnknown_0203229C->partyCounts[whichParty]; i++)
+ {
+ GetMonData(&mons[i], MON_DATA_NICKNAME, sp);
+ StringCopy10(sp14, sp);
+ sub_8079B84(whichParty, i, sp14);
+ }
+}
+
+static void sub_8079C4C(u8 whichParty, u8 monIdx, u8 a2, u8 a3, u8 a4, u8 a5)
+{
+ u8 level;
+ u32 r2;
+ u8 gender;
+ u8 nickname[12];
+
+ CopyToBgTilemapBufferRect_ChangePalette(1, gUnknown_08DDD704, a4, a5, 6, 3, 0);
+ CopyBgTilemapBufferToVram(1);
+
+ if (whichParty == 0)
+ level = GetMonData(&gPlayerParty[monIdx], MON_DATA_LEVEL, NULL);
+ else
+ level = GetMonData(&gEnemyParty[monIdx], MON_DATA_LEVEL, NULL);
+
+ if (gUnknown_0203229C->unk_51[whichParty][monIdx] == 0)
+ {
+ if (level / 10 != 0)
+ gUnknown_0203229C->tilemapBuffer[a2 + (a3 * 32)] = (level / 10) + 0x60;
+
+ gUnknown_0203229C->tilemapBuffer[a2 + (a3 * 32) + 1] = (level % 10) + 0x70;
+ }
+ else
+ {
+ gUnknown_0203229C->tilemapBuffer[a2 + (a3 * 32) - 32] = gUnknown_0203229C->tilemapBuffer[a2 + (a3 * 32) - 33];
+ gUnknown_0203229C->tilemapBuffer[a2 + (a3 * 32) - 31] = gUnknown_0203229C->tilemapBuffer[a2 + (a3 * 32) - 36] | 0x400;
+ }
+
+ if (gUnknown_0203229C->unk_51[whichParty][monIdx] != 0)
+ {
+ r2 = 0x480;
+ }
+ else
+ {
+ if (whichParty == 0)
+ {
+ gender = GetMonGender(&gPlayerParty[monIdx]);
+ GetMonData(&gPlayerParty[monIdx], MON_DATA_NICKNAME, nickname);
+ }
+ else
+ {
+ gender = GetMonGender(&gEnemyParty[monIdx]);
+ GetMonData(&gEnemyParty[monIdx], MON_DATA_NICKNAME, nickname);
+ }
+
+ switch (gender)
+ {
+ case MON_MALE:
+ r2 = !NameHasGenderSymbol(nickname, MON_MALE) ? 0x84 : 0x83;
+ break;
+ case MON_FEMALE:
+ r2 = !NameHasGenderSymbol(nickname, MON_FEMALE) ? 0x85 : 0x83;
+ break;
+ default:
+ r2 = 0x83;
+ break;
+ }
+ }
+ gUnknown_0203229C->tilemapBuffer[(a3 - 1) * 32 + a2 + 1] = r2;
+}
+
+// Very close but loop preamble not working.
+#ifdef NONMATCHING
+static void sub_8079E44(u8 whichParty)
+{
+ int i;
+
+ for (i = 0; i < gUnknown_0203229C->partyCounts[whichParty]; i++)
+ {
+ sub_8079C4C(whichParty, i, gTradeLevelDisplayCoords[whichParty][i][0], gTradeLevelDisplayCoords[whichParty][i][1], gTradeMonBoxCoords[whichParty][i][0], gTradeMonBoxCoords[whichParty][i][1]);
+ }
+}
+#else
+NAKED
+static void sub_8079E44(u8 whichParty)
+{
+ asm_unified("push {r4-r7,lr}\n\
+ sub sp, 0x8\n\
+ lsls r0, 24\n\
+ lsrs r6, r0, 24\n\
+ movs r7, 0\n\
+ ldr r0, =gUnknown_0203229C\n\
+ ldr r0, [r0]\n\
+ adds r0, 0x36\n\
+ adds r0, r6\n\
+ ldrb r0, [r0]\n\
+ cmp r7, r0\n\
+ bge _08079E94\n\
+ lsls r0, r6, 1\n\
+ adds r0, r6\n\
+ ldr r1, =gTradeLevelDisplayCoords\n\
+ lsls r0, 2\n\
+ adds r5, r0, r1\n\
+ ldr r1, =gTradeMonBoxCoords\n\
+ adds r4, r0, r1\n\
+_08079E6A:\n\
+ lsls r1, r7, 24\n\
+ lsrs r1, 24\n\
+ ldrb r2, [r5]\n\
+ ldrb r3, [r5, 0x1]\n\
+ ldrb r0, [r4]\n\
+ str r0, [sp]\n\
+ ldrb r0, [r4, 0x1]\n\
+ str r0, [sp, 0x4]\n\
+ adds r0, r6, 0\n\
+ bl sub_8079C4C\n\
+ adds r5, 0x2\n\
+ adds r4, 0x2\n\
+ adds r7, 0x1\n\
+ ldr r0, =gUnknown_0203229C\n\
+ ldr r0, [r0]\n\
+ adds r0, 0x36\n\
+ adds r0, r6\n\
+ ldrb r0, [r0]\n\
+ cmp r7, r0\n\
+ blt _08079E6A\n\
+_08079E94:\n\
+ add sp, 0x8\n\
+ pop {r4-r7}\n\
+ pop {r0}\n\
+ bx r0\n\
+ .pool");
+}
+#endif // NONMATCHING
+
+static void sub_8079EA8(u8 whichParty)
+{
+ int i;
+
+ for (i = 0; i < gUnknown_0203229C->partyCounts[whichParty]; i++)
+ {
+ gSprites[gUnknown_0203229C->partyIcons[whichParty][i]].invisible = FALSE;
+ gSprites[gUnknown_0203229C->partyIcons[whichParty][i]].pos1.x = gTradeMonSpriteCoords[(whichParty * PARTY_SIZE) + i][0] * 8 + 14;
+ gSprites[gUnknown_0203229C->partyIcons[whichParty][i]].pos1.y = gTradeMonSpriteCoords[(whichParty * PARTY_SIZE) + i][1] * 8 - 12;
+ gSprites[gUnknown_0203229C->partyIcons[whichParty][i]].pos2.x = 0;
+ gSprites[gUnknown_0203229C->partyIcons[whichParty][i]].pos2.y = 0;
+ }
+}
+
+static void sub_8079F74(void)
+{
+ rbox_fill_rectangle(1);
+ sub_8079BE0(1);
+}
+
+static void sub_8079F88(u8 a0)
+{
+ CopyToBgTilemapBufferRect_ChangePalette(1, gTradePartyBoxTilemap, a0 * 15, 0, 15, 17, 0);
+ CopyBgTilemapBufferToVram(1);
+ sub_8079E44(a0);
+ sub_8079BE0(a0);
+ sub_8079EA8(a0);
+ sub_807A308(gUnknown_0832DE94[1], (void *)(OBJ_VRAM0 + (gUnknown_0203229C->unk_72 * 32)), 24);
+ gUnknown_0203229C->unk_74[a0] = 0;
+}
+
+static void sub_807A000(u8 taskId)
+{
+ FillBgTilemapBufferRect_Palette0(0, 0, 0, 0, 30, 20);
+ CopyBgTilemapBufferToVram(0);
+}
+
+static void sub_807A024(u8 taskId)
+{
+ FillBgTilemapBufferRect_Palette0(0, 0, 0, 0, 30, 20);
+ CopyBgTilemapBufferToVram(0);
+}
+
+static void sub_807A048(u16 a0, u8 a1)
+{
+ int i;
+
+ for (i = 0; i < 4; i++)
+ {
+ if (!gUnknown_0203229C->unk_8D0[i].unk_0)
+ {
+ gUnknown_0203229C->unk_8D0[i].unk_2 = a0;
+ gUnknown_0203229C->unk_8D0[i].unk_4 = a1;
+ gUnknown_0203229C->unk_8D0[i].unk_0 = TRUE;
+ break;
+ }
+ }
+}
+
+static u32 sub_807A09C(void)
+{
+ u32 acc = 0;
+ int i;
+
+ for (i = 0; i < 4; i++)
+ {
+ acc += gUnknown_0203229C->unk_8D0[i].unk_0;
+ }
+
+ return acc;
+}
+
+static void sub_807A0C4(void)
+{
+ int i;
+
+ for (i = 0; i < 4; i++)
+ {
+ if (gUnknown_0203229C->unk_8D0[i].unk_0)
+ {
+ if (gUnknown_0203229C->unk_8D0[i].unk_2)
+ {
+ gUnknown_0203229C->unk_8D0[i].unk_2--;
+ }
+ else
+ {
+ switch (gUnknown_0203229C->unk_8D0[i].unk_4)
+ {
+ case 0:
+ sub_8077170(gUnknown_0203229C->linkData, 20);
+ break;
+ case 1:
+ sub_807A19C(0);
+ break;
+ case 2:
+ sub_807A19C(2);
+ break;
+ case 3:
+ case 4:
+ case 5:
+ sub_807A19C(3);
+ break;
+ case 6:
+ sub_807A19C(6);
+ break;
+ case 7:
+ sub_807A19C(7);
+ break;
+ case 8:
+ sub_807A19C(8);
+ break;
+ }
+ gUnknown_0203229C->unk_8D0[i].unk_0 = 0;
+ }
+ }
+ }
+}
+
+static void sub_807A19C(u8 a0)
+{
+ FillWindowPixelBuffer(0, 0x11);
+ AddTextPrinterParameterized(0, 1, gUnknown_0832DEBC[a0], 0, 1, TEXT_SPEED_FF, NULL);
+ sub_8098858(0, 20, 12);
+ PutWindowTilemap(0);
+ CopyWindowToVram(0, 3);
+}
+
+static bool8 sub_807A1F0(void)
+{
+ struct SpriteSheet sheet;
+
+ if (gUnknown_0203229C->unk_A8 < 14)
+ {
+ sheet.data = gUnknown_02032188[gUnknown_0203229C->unk_A8];
+ sheet.size = 0x100;
+ sheet.tag = 200 + gUnknown_0203229C->unk_A8;
+ }
+
+ switch (gUnknown_0203229C->unk_A8)
+ {
+ case 0 ... 7:
+ LoadSpriteSheet(&sheet);
+ gUnknown_0203229C->unk_A8++;
+ break;
+ case 8:
+ gUnknown_0203229C->unk_72 = LoadSpriteSheet(&sheet);
+ gUnknown_0203229C->unk_A8++;
+ break;
+ case 9 ... 13:
+ LoadSpriteSheet(&sheet);
+ gUnknown_0203229C->unk_A8++;
+ break;
+ case 14:
+ LoadSpritePalette(&gSpritePalette_TradeScreenText);
+ gUnknown_0203229C->unk_A8++;
+ break;
+ case 15:
+ LoadSpritePalette(&gUnknown_0832DC44);
+ gUnknown_0203229C->unk_A8++;
+ break;
+ case 16:
+ LoadSpriteSheet(&gUnknown_0832DC3C);
+ gUnknown_0203229C->unk_A8++;
+ break;
+ case 17:
+ gUnknown_0203229C->unk_A8 = 0;
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
+static void sub_807A308(const u8 *a0, u8 *a1, u8 unused)
+{
+ sub_80C6D80(a0, a1, 0, 0, 6);
+}
+
+static void sub_807A320(u8 who)
+{
+ int i;
+
+ switch (who)
+ {
+ case 0:
+ for (i = 0; i < gUnknown_0203229C->partyCounts[who]; i++)
+ {
+ if (GetMonData(&gPlayerParty[i], MON_DATA_IS_EGG) == TRUE)
+ {
+ gUnknown_0203229C->unk_45[who][i] = 0;
+ gUnknown_0203229C->unk_51[who][i] = 1;
+ }
+ else if (GetMonData(&gPlayerParty[i], MON_DATA_HP) == 0)
+ {
+ gUnknown_0203229C->unk_45[who][i] = 0;
+ gUnknown_0203229C->unk_51[who][i] = 0;
+ }
+ else
+ {
+ gUnknown_0203229C->unk_45[who][i] = 1;
+ gUnknown_0203229C->unk_51[who][i] = 0;
+ }
+ }
+ break;
+ case 1:
+ for (i = 0; i < gUnknown_0203229C->partyCounts[who]; i++)
+ {
+ if (GetMonData(&gEnemyParty[i], MON_DATA_IS_EGG) == TRUE)
+ {
+ gUnknown_0203229C->unk_45[who][i] = 0;
+ gUnknown_0203229C->unk_51[who][i] = 1;
+ }
+ else if (GetMonData(&gEnemyParty[i], MON_DATA_HP) == 0)
+ {
+ gUnknown_0203229C->unk_45[who][i] = 0;
+ gUnknown_0203229C->unk_51[who][i] = 0;
+ }
+ else
+ {
+ gUnknown_0203229C->unk_45[who][i] = 1;
+ gUnknown_0203229C->unk_51[who][i] = 0;
+ }
+ }
+ break;
+ }
+}
+
+static void sub_807A468(u8 who)
+{
+ u16 i, curHp, maxHp;
+
+ switch (who)
+ {
+ case 0:
+ for (i = 0; i < gUnknown_0203229C->partyCounts[0]; i++)
+ {
+ curHp = GetMonData(&gPlayerParty[i], MON_DATA_HP);
+ maxHp = GetMonData(&gPlayerParty[i], MON_DATA_MAX_HP);
+ gUnknown_0203229C->unk_5D[0][i] = GetHPBarLevel(curHp, maxHp);
+ }
+ break;
+ case 1:
+ for (i = 0; i < gUnknown_0203229C->partyCounts[1]; i++)
+ {
+ curHp = GetMonData(&gEnemyParty[i], MON_DATA_HP);
+ maxHp = GetMonData(&gEnemyParty[i], MON_DATA_MAX_HP);
+ gUnknown_0203229C->unk_5D[1][i] = GetHPBarLevel(curHp, maxHp);
+ }
+ break;
+ }
+}
+
+static void sub_807A53C(void)
+{
+ int i, j;
+
+ for (i = 0; i < 2; i++)
+ {
+ for (j = 0; j < gUnknown_0203229C->partyCounts[i]; j++)
+ {
+ sub_80D32C8(&gSprites[gUnknown_0203229C->partyIcons[i][j]], 4 - gUnknown_0203229C->unk_5D[i][j]);
+ }
+ }
+}
+
+static void sub_807A5B0(void)
+{
+ int i;
+
+ for (i = 0; i < 11; i++)
+ {
+ if (gSaveBlock1Ptr->giftRibbons[i] == 0 && gUnknown_0203229C->unk_A9[i] != 0)
+ {
+ if (gUnknown_0203229C->unk_A9[i] < 64)
+ gSaveBlock1Ptr->giftRibbons[i] = gUnknown_0203229C->unk_A9[i];
+ }
+ }
+}
+
+static u32 sub_807A5F4(struct Pokemon *monList, int a1, int monIdx)
+{
+ int i, sum;
+ struct LinkPlayer *player;
+ u32 species[6];
+ u32 species2[6];
+
+ for (i = 0; i < a1; i++)
+ {
+ species2[i] = GetMonData(&monList[i], MON_DATA_SPECIES2);
+ species[i] = GetMonData(&monList[i], MON_DATA_SPECIES);
+ }
+
+ if (!IsNationalPokedexEnabled())
+ {
+ if (species2[monIdx] == SPECIES_EGG)
+ {
+ return 3;
+ }
+
+ if (!IsSpeciesInHoennDex(species2[monIdx]))
+ {
+ return 2;
+ }
+ }
+
+ player = &gLinkPlayers[GetMultiplayerId() ^ 1];
+ if ((player->version & 0xFF) != VERSION_RUBY &&
+ (player->version & 0xFF) != VERSION_SAPPHIRE)
+ {
+ if ((player->name[10] & 0xF) == 0)
+ {
+ if (species2[monIdx] == SPECIES_EGG)
+ {
+ return 5;
+ }
+
+ if (!IsSpeciesInHoennDex(species2[monIdx]))
+ {
+ return 4;
+ }
+ }
+ }
+
+ if (species[monIdx] == SPECIES_DEOXYS || species[monIdx] == SPECIES_MEW)
+ {
+ if (!GetMonData(&monList[monIdx], MON_DATA_OBEDIENCE))
+ {
+ return 4;
+ }
+ }
+
+ for (i = 0; i < a1; i++)
+ {
+ if (species2[i] == SPECIES_EGG)
+ {
+ species2[i] = SPECIES_NONE;
+ }
+ }
+
+ for (sum = 0, i = 0; i < a1; i++)
+ {
+ if (i != monIdx)
+ {
+ sum += species2[i];
+ }
+ }
+
+ if (sum != 0)
+ {
+ return 0;
+ }
+ else
+ {
+ return 1;
+ }
+}
+
+#ifdef NONMATCHING
+s32 sub_807A728(void)
+{
+ s32 val;
+ u16 version;
+
+ if (gReceivedRemoteLinkPlayers)
+ {
+ val = 0;
+ version = (gLinkPlayers[GetMultiplayerId() ^ 1].version & 0xFF);
+
+ if (version == VERSION_RUBY || version == VERSION_SAPPHIRE || version == VERSION_EMERALD)
+ {
+ // this value could actually be anything 0 or less
+ val = 0;
+ }
+ else if (version == VERSION_FIRE_RED || version == VERSION_LEAF_GREEN)
+ {
+ val = 2;
+ }
+
+ if (val > 0)
+ {
+ if (gLinkPlayers[GetMultiplayerId()].name[10] & 0xF0)
+ {
+ if (val == 2)
+ {
+ if (gLinkPlayers[GetMultiplayerId() ^ 1].name[10] & 0xF0)
+ {
+ return 0;
+ }
+ else
+ {
+ return 2;
+ }
+ }
+ }
+ else
+ {
+ return 1;
+ }
+ }
+ }
+ return 0;
+}
+#else
+NAKED
+s32 sub_807A728(void)
+{
+ asm_unified("push {r4-r7,lr}\n\
+ ldr r0, =gReceivedRemoteLinkPlayers\n\
+ ldrb r0, [r0]\n\
+ cmp r0, 0\n\
+ beq _0807A7B4\n\
+ movs r4, 0\n\
+ bl GetMultiplayerId\n\
+ ldr r5, =gLinkPlayers\n\
+ movs r7, 0x1\n\
+ eors r0, r7\n\
+ lsls r0, 24\n\
+ lsrs r0, 24\n\
+ lsls r1, r0, 3\n\
+ subs r1, r0\n\
+ lsls r1, 2\n\
+ adds r1, r5\n\
+ ldrb r1, [r1]\n\
+ subs r0, r1, 0x1\n\
+ lsls r0, 16\n\
+ lsrs r0, 16\n\
+ cmp r0, 0x2\n\
+ bls _0807A7B4\n\
+ subs r0, r1, 0x4\n\
+ lsls r0, 16\n\
+ lsrs r0, 16\n\
+ cmp r0, 0x1\n\
+ bhi _0807A762\n\
+ movs r4, 0x2\n\
+_0807A762:\n\
+ cmp r4, 0\n\
+ ble _0807A7B4\n\
+ bl GetMultiplayerId\n\
+ lsls r0, 24\n\
+ lsrs r0, 24\n\
+ lsls r1, r0, 3\n\
+ subs r1, r0\n\
+ lsls r1, 2\n\
+ adds r1, r5\n\
+ ldrb r1, [r1, 0x12]\n\
+ movs r6, 0xF0\n\
+ adds r0, r6, 0\n\
+ ands r0, r1\n\
+ cmp r0, 0\n\
+ beq _0807A7B0\n\
+ cmp r4, 0x2\n\
+ bne _0807A7B4\n\
+ bl GetMultiplayerId\n\
+ eors r0, r7\n\
+ lsls r0, 24\n\
+ lsrs r0, 24\n\
+ lsls r1, r0, 3\n\
+ subs r1, r0\n\
+ lsls r1, 2\n\
+ adds r1, r5\n\
+ ldrb r1, [r1, 0x12]\n\
+ adds r0, r6, 0\n\
+ ands r0, r1\n\
+ cmp r0, 0\n\
+ bne _0807A7B4\n\
+ movs r0, 0x2\n\
+ b _0807A7B6\n\
+ .pool\n\
+_0807A7B0:\n\
+ movs r0, 0x1\n\
+ b _0807A7B6\n\
+_0807A7B4:\n\
+ movs r0, 0\n\
+_0807A7B6:\n\
+ pop {r4-r7}\n\
+ pop {r1}\n\
+ bx r1");
+}
+#endif // NONMATCHING
+
+static bool32 IsDeoxysOrMewUntradable(u16 species, bool8 isObedientBitSet)
+{
+ if (species == SPECIES_DEOXYS || species == SPECIES_MEW)
+ {
+ if (!isObedientBitSet)
+ return TRUE;
+ }
+ return FALSE;
+}
+
+int sub_807A7E0(struct UnkLinkRfuStruct_02022B14Substruct a0, struct UnkLinkRfuStruct_02022B14Substruct a1, u16 species1, u16 species2, u8 type, u16 species3, u8 isObedientBitSet)
+{
+ u8 r9 = a0.unk_01_0;
+ u8 r2 = a0.unk_00_7;
+ u8 r10 = a1.unk_01_0;
+ u8 r0 = a1.unk_00_7;
+ u8 r1 = a1.unk_01_2;
+
+ if (r1 != 3)
+ {
+ if (!r2)
+ {
+ return 8;
+ }
+ else if (!r0)
+ {
+ return 9;
+ }
+ }
+
+ if (IsDeoxysOrMewUntradable(species3, isObedientBitSet))
+ {
+ return 4;
+ }
+
+ if (species2 == SPECIES_EGG)
+ {
+ if (species1 != species2)
+ {
+ return 2;
+ }
+ }
+ else
+ {
+ if (gBaseStats[species1].type1 != type && gBaseStats[species1].type2 != type)
+ {
+ return 1;
+ }
+ }
+
+ if (species1 == SPECIES_EGG && species1 != species2)
+ {
+ return 3;
+ }
+
+ if (!r9)
+ {
+ if (species1 == SPECIES_EGG)
+ {
+ return 6;
+ }
+
+ if (!IsSpeciesInHoennDex(species1))
+ {
+ return 4;
+ }
+
+ if (!IsSpeciesInHoennDex(species2))
+ {
+ return 5;
+ }
+ }
+
+ if (!r10 && !IsSpeciesInHoennDex(species1))
+ {
+ return 7;
+ }
+
+ return 0;
+}
+
+int sub_807A8D0(struct UnkLinkRfuStruct_02022B14Substruct a0, u16 species, u16 a2, u8 a3)
+{
+ u8 unk = a0.unk_01_0;
+
+ if (IsDeoxysOrMewUntradable(a2, a3))
+ {
+ return 1;
+ }
+
+ if (unk)
+ {
+ return 0;
+ }
+
+ if (species == SPECIES_EGG)
+ {
+ return 2;
+ }
+
+ if (IsSpeciesInHoennDex(species))
+ {
+ return 0;
+ }
+
+ return 1;
+}
+
+// r6/r7 flip. Ugh.
+#ifdef NONMATCHING
+int sub_807A918(struct Pokemon *mon, u16 monIdx)
+{
+ int i, version, versions, unk, unk2;
+ int speciesArray[PARTY_SIZE];
+
+ for (i = 0; i < gPlayerPartyCount; i++)
+ {
+ speciesArray[i] = GetMonData(&mon[i], MON_DATA_SPECIES2);
+ if (speciesArray[i] == SPECIES_EGG)
+ {
+ speciesArray[i] = 0;
+ }
+ }
+
+ versions = 0;
+ unk = 1;
+ for (i = 0; i < GetLinkPlayerCount(); i++)
+ {
+ version = gLinkPlayers[i].version & 0xFF;
+ if (version == VERSION_FIRE_RED ||
+ version == VERSION_LEAF_GREEN)
+ {
+ versions = 0;
+ }
+ else
+ {
+ versions |= 1;
+ }
+ }
+
+ for (i = 0; i < GetLinkPlayerCount(); i++)
+ {
+ struct LinkPlayer *player = &gLinkPlayers[i];
+ if ((player->name[8] & 0xF) == 0)
+ {
+ unk = 0;
+ }
+
+ if (versions && (player->name[8] / 16))
+ {
+ unk = 0;
+ }
+ }
+
+ if (unk == 0)
+ {
+ if (!IsSpeciesInHoennDex(speciesArray[monIdx]))
+ {
+ return 2;
+ }
+
+ if (speciesArray[monIdx] == SPECIES_NONE)
+ {
+ return 3;
+ }
+ }
+
+ unk2 = 0;
+ for (i = 0; i < gPlayerPartyCount; i++)
+ {
+ if (monIdx != i)
+ {
+ unk2 += speciesArray[i];
+ }
+ }
+
+ if (!unk2)
+ {
+ return 1;
+ }
+ else
+ {
+ return 0;
+ }
+}
+#else
+NAKED
+int sub_807A918(struct Pokemon *mon, u16 a1)
+{
+ asm_unified("push {r4-r7,lr}\n\
+ mov r7, r8\n\
+ push {r7}\n\
+ sub sp, 0x18\n\
+ adds r6, r0, 0\n\
+ lsls r1, 16\n\
+ lsrs r1, 16\n\
+ mov r8, r1\n\
+ movs r5, 0\n\
+ ldr r0, =gPlayerPartyCount\n\
+ ldrb r0, [r0]\n\
+ cmp r5, r0\n\
+ bge _0807A95A\n\
+ mov r4, sp\n\
+_0807A934:\n\
+ movs r0, 0x64\n\
+ muls r0, r5\n\
+ adds r0, r6, r0\n\
+ movs r1, 0x41\n\
+ bl GetMonData\n\
+ str r0, [r4]\n\
+ movs r1, 0xCE\n\
+ lsls r1, 1\n\
+ cmp r0, r1\n\
+ bne _0807A94E\n\
+ movs r0, 0\n\
+ str r0, [r4]\n\
+_0807A94E:\n\
+ adds r4, 0x4\n\
+ adds r5, 0x1\n\
+ ldr r0, =gPlayerPartyCount\n\
+ ldrb r0, [r0]\n\
+ cmp r5, r0\n\
+ blt _0807A934\n\
+_0807A95A:\n\
+ movs r7, 0\n\
+ movs r6, 0x1\n\
+ movs r5, 0\n\
+ ldr r4, =gLinkPlayers\n\
+ b _0807A980\n\
+ .pool\n\
+_0807A96C:\n\
+ ldrb r0, [r4]\n\
+ subs r0, 0x4\n\
+ cmp r0, 0x1\n\
+ bhi _0807A978\n\
+ movs r7, 0\n\
+ b _0807A97C\n\
+_0807A978:\n\
+ movs r0, 0x1\n\
+ orrs r7, r0\n\
+_0807A97C:\n\
+ adds r4, 0x1C\n\
+ adds r5, 0x1\n\
+_0807A980:\n\
+ bl GetLinkPlayerCount\n\
+ lsls r0, 24\n\
+ lsrs r0, 24\n\
+ cmp r5, r0\n\
+ blt _0807A96C\n\
+ movs r5, 0\n\
+ movs r4, 0\n\
+ b _0807A9B4\n\
+_0807A992:\n\
+ ldr r0, =gLinkPlayers\n\
+ adds r2, r4, r0\n\
+ ldrb r1, [r2, 0x10]\n\
+ movs r0, 0xF\n\
+ ands r0, r1\n\
+ cmp r0, 0\n\
+ bne _0807A9A2\n\
+ movs r6, 0\n\
+_0807A9A2:\n\
+ cmp r7, 0\n\
+ beq _0807A9B0\n\
+ ldrb r0, [r2, 0x10]\n\
+ lsrs r0, 4\n\
+ cmp r0, 0\n\
+ beq _0807A9B0\n\
+ movs r6, 0\n\
+_0807A9B0:\n\
+ adds r4, 0x1C\n\
+ adds r5, 0x1\n\
+_0807A9B4:\n\
+ bl GetLinkPlayerCount\n\
+ lsls r0, 24\n\
+ lsrs r0, 24\n\
+ cmp r5, r0\n\
+ blt _0807A992\n\
+ cmp r6, 0\n\
+ bne _0807A9EA\n\
+ mov r1, r8\n\
+ lsls r0, r1, 2\n\
+ mov r1, sp\n\
+ adds r4, r1, r0\n\
+ ldrh r0, [r4]\n\
+ bl IsSpeciesInHoennDex\n\
+ cmp r0, 0\n\
+ bne _0807A9E0\n\
+ movs r0, 0x2\n\
+ b _0807AA1A\n\
+ .pool\n\
+_0807A9E0:\n\
+ ldr r0, [r4]\n\
+ cmp r0, 0\n\
+ bne _0807A9EA\n\
+ movs r0, 0x3\n\
+ b _0807AA1A\n\
+_0807A9EA:\n\
+ movs r2, 0\n\
+ movs r5, 0\n\
+ ldr r0, =gPlayerPartyCount\n\
+ ldrb r0, [r0]\n\
+ cmp r2, r0\n\
+ bge _0807AA0A\n\
+ adds r3, r0, 0\n\
+ mov r1, sp\n\
+_0807A9FA:\n\
+ cmp r8, r5\n\
+ beq _0807AA02\n\
+ ldr r0, [r1]\n\
+ adds r2, r0\n\
+_0807AA02:\n\
+ adds r1, 0x4\n\
+ adds r5, 0x1\n\
+ cmp r5, r3\n\
+ blt _0807A9FA\n\
+_0807AA0A:\n\
+ cmp r2, 0\n\
+ beq _0807AA18\n\
+ movs r0, 0\n\
+ b _0807AA1A\n\
+ .pool\n\
+_0807AA18:\n\
+ movs r0, 0x1\n\
+_0807AA1A:\n\
+ add sp, 0x18\n\
+ pop {r3}\n\
+ mov r8, r3\n\
+ pop {r4-r7}\n\
+ pop {r1}\n\
+ bx r1");
+}
+#endif // NONMATCHING
+
+static void sub_807AA28(struct Sprite *sprite)
+{
+ if (++sprite->data[0] == 10)
+ {
+ PlaySE(SE_BOWA);
+ sprite->data[0] = 0;
+ }
+}
+
+static void sub_807AA4C(struct Sprite *sprite)
+{
+ if (!sprite->invisible && ++sprite->data[0] == 10)
+ {
+ PlaySE(SE_W207B);
+ sprite->data[0] = 0;
+ }
+}
+
+static void sub_807AA7C(struct Sprite *sprite)
+{
+ if (!sprite->data[1])
+ {
+ if (++sprite->data[0] == 12)
+ sprite->data[0] = 0;
+
+ LoadPalette(&gUnknown_08338EA4[sprite->data[0]], (sprite->oam.paletteNum + 16) * 16 + 4, 2);
+ }
+}
+
+static void sub_807AABC(struct Sprite *sprite)
+{
+ sprite->data[0]++;
+ sprite->pos2.y++;
+
+ if (sprite->data[0] == 10)
+ DestroySprite(sprite);
+}
+
+static void sub_807AAE0(struct Sprite *sprite)
+{
+ sprite->data[0]++;
+ sprite->pos2.y--;
+
+ if (sprite->data[0] == 10)
+ DestroySprite(sprite);
+}
+
+static void sub_807AB04(struct Sprite *sprite)
+{
+ if (++sprite->data[0] == 15)
+ {
+ PlaySE(SE_W107);
+ sprite->data[0] = 0;
+ }
+}
+
+static void sub_807AB28(void)
+{
+ struct BgAffineDstData affine;
+
+ DoBgAffineSet(&affine, gUnknown_020322A0->unk_D4 * 0x100, gUnknown_020322A0->unk_D6 * 0x100, gUnknown_020322A0->unk_DC, gUnknown_020322A0->unk_DE, gUnknown_020322A0->unk_E8, gUnknown_020322A0->unk_E8, gUnknown_020322A0->unk_EC);
+ SetGpuReg(REG_OFFSET_BG2PA, affine.pa);
+ SetGpuReg(REG_OFFSET_BG2PB, affine.pb);
+ SetGpuReg(REG_OFFSET_BG2PC, affine.pc);
+ SetGpuReg(REG_OFFSET_BG2PD, affine.pd);
+ SetGpuReg(REG_OFFSET_BG2X_L, affine.dx);
+ SetGpuReg(REG_OFFSET_BG2X_H, affine.dx >> 16);
+ SetGpuReg(REG_OFFSET_BG2Y_L, affine.dy);
+ SetGpuReg(REG_OFFSET_BG2Y_H, affine.dy >> 16);
+}
+
+static void sub_807ABCC(void)
+{
+ u16 dispcnt;
+
+ SetGpuReg(REG_OFFSET_BG1VOFS, gUnknown_020322A0->bg1vofs);
+ SetGpuReg(REG_OFFSET_BG1HOFS, gUnknown_020322A0->bg1hofs);
+
+ dispcnt = GetGpuReg(REG_OFFSET_DISPCNT);
+ if ((dispcnt & 7) == DISPCNT_MODE_0)
+ {
+ SetGpuReg(REG_OFFSET_BG2VOFS, gUnknown_020322A0->bg2vofs);
+ SetGpuReg(REG_OFFSET_BG2HOFS, gUnknown_020322A0->bg2hofs);
+ }
+ else
+ {
+ sub_807AB28();
+ }
+}
+
+static void sub_807AC24(void)
+{
+ sub_807ABCC();
+ LoadOam();
+ ProcessSpriteCopyRequests();
+ TransferPlttBuffer();
+}
+
+static void sub_807AC3C(void)
+{
+ gUnknown_020322A0->unk_8A = 0;
+ gUnknown_020322A0->unk_88 = 0;
+ gUnknown_020322A0->unk_89 = 0;
+}
+
+static void sub_807AC64(void)
+{
+ if (gUnknown_020322A0->unk_88 == gUnknown_020322A0->unk_89)
+ gUnknown_020322A0->unk_8A++;
+ else
+ gUnknown_020322A0->unk_8A = 0;
+
+ if (gUnknown_020322A0->unk_8A > 300)
+ {
+ CloseLink();
+ SetMainCallback2(CB2_LinkError);
+ gUnknown_020322A0->unk_8A = 0;
+ gUnknown_020322A0->unk_89 = 0;
+ gUnknown_020322A0->unk_88 = 0;
+ }
+
+ gUnknown_020322A0->unk_89 = gUnknown_020322A0->unk_88;
+}
+
+static u32 sub_807ACDC(void)
+{
+ if (gReceivedRemoteLinkPlayers)
+ return GetMultiplayerId();
+ return 0;
+}
+
+static void sub_807ACFC(u8 whichParty, u8 a1)
+{
+ int pos = 0;
+ struct Pokemon *mon = NULL;
+ u16 species;
+ u32 personality;
+
+ if (whichParty == 0)
+ {
+ mon = &gPlayerParty[gUnknown_02032298[0]];
+ pos = 1;
+ }
+
+ if (whichParty == 1)
+ {
+ mon = &gEnemyParty[gUnknown_02032298[1] % PARTY_SIZE];
+ pos = 3;
+ }
+
+ switch (a1)
+ {
+ case 0:
+ species = GetMonData(mon, MON_DATA_SPECIES2);
+ personality = GetMonData(mon, MON_DATA_PERSONALITY);
+
+ if (whichParty == 0)
+ HandleLoadSpecialPokePic_2(&gMonFrontPicTable[species], gMonSpritesGfxPtr->sprites[1], species, personality);
+ else
+ HandleLoadSpecialPokePic_DontHandleDeoxys(&gMonFrontPicTable[species], gMonSpritesGfxPtr->sprites[whichParty * 2 + 1], species, personality);
+
+ LoadCompressedSpritePalette(GetMonSpritePalStruct(mon));
+ gUnknown_020322A0->tradeSpecies[whichParty] = species;
+ gUnknown_020322A0->unk_68[whichParty] = personality;
+ break;
+ case 1:
+ SetMultiuseSpriteTemplateToPokemon(GetMonSpritePalStruct(mon)->tag, pos);
+ gUnknown_020322A0->pokePicSpriteIdxs[whichParty] = CreateSprite(&gMultiuseSpriteTemplate, 120, 60, 6);
+ gSprites[gUnknown_020322A0->pokePicSpriteIdxs[whichParty]].invisible = TRUE;
+ gSprites[gUnknown_020322A0->pokePicSpriteIdxs[whichParty]].callback = SpriteCallbackDummy;
+ break;
+ }
+}
+
+void sub_807AE50(void)
+{
+ switch (gMain.state)
+ {
+ case 0:
+ if (!gReceivedRemoteLinkPlayers)
+ {
+ gLinkType = 0x1144;
+ CloseLink();
+ }
+ gUnknown_020322A0 = AllocZeroed(sizeof(*gUnknown_020322A0));
+ AllocateMonSpritesGfx();
+ ResetTasks();
+ ResetSpriteData();
+ FreeAllSpritePalettes();
+ SetVBlankCallback(sub_807AC24);
+ sub_807B170();
+ sub_807AC3C();
+ gMain.state++;
+ gUnknown_020322A0->unk_8C = 0;
+ gUnknown_020322A0->state = 0;
+ gUnknown_020322A0->isLinkTrade = TRUE;
+ gUnknown_020322A0->unk_D4 = 64;
+ gUnknown_020322A0->unk_D6 = 64;
+ gUnknown_020322A0->unk_D8 = 0;
+ gUnknown_020322A0->unk_DA = 0;
+ gUnknown_020322A0->unk_DC = 120;
+ gUnknown_020322A0->unk_DE = 80;
+ gUnknown_020322A0->unk_E8 = 256;
+ gUnknown_020322A0->unk_EC = 0;
+ break;
+ case 1:
+ if (!gReceivedRemoteLinkPlayers)
+ {
+ gUnknown_020322A0->unk_FA = 1;
+ OpenLink();
+ gMain.state++;
+ gUnknown_020322A0->timer = 0;
+ }
+ else
+ {
+ gMain.state = 4;
+ }
+ break;
+ case 2:
+ if (++gUnknown_020322A0->timer > 60)
+ {
+ gUnknown_020322A0->timer = 0;
+ gMain.state++;
+ }
+ break;
+ case 3:
+ if (IsLinkMaster())
+ {
+ if (GetLinkPlayerCount_2() >= sub_800AA48())
+ {
+ if (++gUnknown_020322A0->timer > 30)
+ {
+ sub_800A620();
+ gMain.state++;
+ }
+ }
+ else
+ {
+ sub_807AC64();
+ }
+ }
+ else
+ {
+ gMain.state++;
+ }
+ break;
+ case 4:
+ sub_807AC64();
+ if (gReceivedRemoteLinkPlayers == TRUE && IsLinkPlayerDataExchangeComplete() == TRUE)
+ gMain.state++;
+ break;
+ case 5:
+ gUnknown_020322A0->unk_72 = 0;
+ gUnknown_020322A0->unk_73 = 0;
+ gUnknown_020322A0->unk_93 = 0;
+ sub_807ACFC(0, 0);
+ gMain.state++;
+ break;
+ case 6:
+ sub_807ACFC(0, 1);
+ gMain.state++;
+ break;
+ case 7:
+ sub_807ACFC(1, 0);
+ gMain.state++;
+ break;
+ case 8:
+ sub_807ACFC(1, 1);
+ sub_807B154();
+ gMain.state++;
+ break;
+ case 9:
+ sub_807BA94();
+ LoadSpriteSheet(&gUnknown_08338D18);
+ LoadSpritePalette(&gUnknown_08338D20);
+ gMain.state++;
+ break;
+ case 10:
+ BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, RGB_BLACK);
+ ShowBg(0);
+ gMain.state++;
+ break;
+ case 11:
+ sub_807B140();
+ SetTradeSceneStrings();
+ gMain.state++;
+ break;
+ case 12:
+ if (!gPaletteFade.active)
+ {
+ if (gWirelessCommType)
+ {
+ sub_800E0E8();
+ CreateWirelessStatusIndicatorSprite(0, 0);
+ }
+ SetMainCallback2(sub_807EA2C);
+ }
+ break;
+ }
+ RunTasks();
+ RunTextPrinters();
+ AnimateSprites();
+ BuildOamBuffer();
+ UpdatePaletteFade();
+}
+
+void sub_807B140(void)
+{
+ sub_807B62C(5);
+ sub_807B62C(0);
+}
+
+void sub_807B154(void)
+{
+ FillWindowPixelBuffer(0, 0xFF);
+ PutWindowTilemap(0);
+ CopyWindowToVram(0, 3);
+}
+
+static void sub_807B170(void)
+{
+ SetGpuReg(REG_OFFSET_DISPCNT, 0);
+ ResetBgsAndClearDma3BusyFlags(0);
+ InitBgsFromTemplates(0, gUnknown_08339014, ARRAY_COUNT(gUnknown_08339014));
+ ChangeBgX(0, 0, 0);
+ ChangeBgY(0, 0, 0);
+ SetBgTilemapBuffer(0, Alloc(0x800));
+ SetBgTilemapBuffer(1, Alloc(0x800));
+ SetBgTilemapBuffer(3, Alloc(0x800));
+ DeactivateAllTextPrinters();
+ DecompressAndLoadBgGfxUsingHeap(0, gBattleTextboxTiles, 0, 0, 0);
+ LZDecompressWram(gBattleTextboxTilemap, gDecompressionBuffer);
+ CopyToBgTilemapBuffer(0, gDecompressionBuffer, 0x800, 0);
+ LoadCompressedPalette(gBattleTextboxPalette, 0, 0x20);
+ InitWindows(gUnknown_08338FFC);
+ DecompressAndLoadBgGfxUsingHeap(0, gBattleTextboxTiles, 0, 0, 0);
+ LZDecompressWram(gBattleTextboxTilemap, gDecompressionBuffer);
+ CopyToBgTilemapBuffer(0, gDecompressionBuffer, 0x800, 0);
+ LoadCompressedPalette(gBattleTextboxPalette, 0, 0x20);
+}
+
+// In-game trade init
+static void sub_807B270(void)
+{
+ u8 otName[11];
+
+ switch (gMain.state)
+ {
+ case 0:
+ gUnknown_02032298[0] = gSpecialVar_0x8005;
+ gUnknown_02032298[1] = 6;
+ StringCopy(gLinkPlayers[0].name, gSaveBlock2Ptr->playerName);
+ GetMonData(&gEnemyParty[0], MON_DATA_OT_NAME, otName);
+ StringCopy(gLinkPlayers[1].name, otName);
+ gLinkPlayers[0].language = LANGUAGE_ENGLISH;
+ gLinkPlayers[1].language = GetMonData(&gEnemyParty[0], MON_DATA_LANGUAGE);
+ gUnknown_020322A0 = AllocZeroed(sizeof(*gUnknown_020322A0));
+ AllocateMonSpritesGfx();
+ ResetTasks();
+ ResetSpriteData();
+ FreeAllSpritePalettes();
+ SetVBlankCallback(sub_807AC24);
+ sub_807B170();
+ gUnknown_020322A0->isLinkTrade = FALSE;
+ gUnknown_020322A0->unk_8C = 0;
+ gUnknown_020322A0->state = 0;
+ gUnknown_020322A0->unk_D4 = 64;
+ gUnknown_020322A0->unk_D6 = 64;
+ gUnknown_020322A0->unk_D8 = 0;
+ gUnknown_020322A0->unk_DA = 0;
+ gUnknown_020322A0->unk_DC = 120;
+ gUnknown_020322A0->unk_DE = 80;
+ gUnknown_020322A0->unk_E8 = 256;
+ gUnknown_020322A0->unk_EC = 0;
+ gUnknown_020322A0->timer = 0;
+ gMain.state = 5;
+ break;
+ case 5:
+ sub_807ACFC(0, 0);
+ gMain.state++;
+ break;
+ case 6:
+ sub_807ACFC(0, 1);
+ gMain.state++;
+ break;
+ case 7:
+ sub_807ACFC(1, 0);
+ ShowBg(0);
+ gMain.state++;
+ break;
+ case 8:
+ sub_807ACFC(1, 1);
+ FillWindowPixelBuffer(0, 0xFF);
+ PutWindowTilemap(0);
+ CopyWindowToVram(0, 3);
+ gMain.state++;
+ break;
+ case 9:
+ sub_807BA94();
+ LoadSpriteSheet(&gUnknown_08338D18);
+ LoadSpritePalette(&gUnknown_08338D20);
+ gMain.state++;
+ break;
+ case 10:
+ ShowBg(0);
+ gMain.state++;
+ break;
+ case 11:
+ sub_807B62C(5);
+ sub_807B62C(0);
+ SetTradeSceneStrings();
+ gMain.state++;
+ break;
+ case 12:
+ SetMainCallback2(sub_807B60C);
+ break;
+ }
+
+ RunTasks();
+ RunTextPrinters();
+ AnimateSprites();
+ BuildOamBuffer();
+ UpdatePaletteFade();
+}
+
+static void sub_807B464(u8 partyIdx)
+{
+ struct Pokemon *mon = &gPlayerParty[partyIdx];
+
+ if (!GetMonData(mon, MON_DATA_IS_EGG))
+ {
+ u16 species = GetMonData(mon, MON_DATA_SPECIES, NULL);
+ u32 personality = GetMonData(mon, MON_DATA_PERSONALITY, NULL);
+ species = SpeciesToNationalPokedexNum(species);
+ GetSetPokedexFlag(species, FLAG_SET_SEEN);
+ HandleSetPokedexFlag(species, FLAG_SET_CAUGHT, personality);
+ }
+}
+
+static void sub_807B4C4(void)
+{
+ u8 mpId = GetMultiplayerId();
+ // Originally in Ruby but commented out
+ /*if (gLinkPlayers[mpId ^ 1].lp_field_2 == 0x8000)
+ EnableNationalPokedex();*/
+}
+
+static void sub_807B4D0(u8 a0, u8 a1)
+{
+ u8 friendship;
+
+ struct Pokemon *playerMon = &gPlayerParty[a0];
+ u16 playerMail = GetMonData(playerMon, MON_DATA_MAIL);
+
+ struct Pokemon *partnerMon = &gEnemyParty[a1];
+ u16 partnerMail = GetMonData(partnerMon, MON_DATA_MAIL);
+
+ if (playerMail != 0xFF)
+ ClearMailStruct(&gSaveBlock1Ptr->mail[playerMail]);
+
+ // This is where the actual trade happens!!
+ gUnknown_020322A0->mon = *playerMon;
+ *playerMon = *partnerMon;
+ *partnerMon = gUnknown_020322A0->mon;
+
+ friendship = 70;
+ if (!GetMonData(playerMon, MON_DATA_IS_EGG))
+ SetMonData(playerMon, MON_DATA_FRIENDSHIP, &friendship);
+
+ if (partnerMail != 0xFF)
+ GiveMailToMon2(playerMon, &gUnknown_020321C0[partnerMail]);
+
+ sub_807B464(a0);
+ if (gReceivedRemoteLinkPlayers)
+ sub_807B4C4();
+}
+
+static void sub_807B5B8(void)
+{
+ switch (gUnknown_020322A0->unk_93)
+ {
+ case 1:
+ if (IsLinkTaskFinished())
+ {
+ Trade_SendData(gUnknown_020322A0);
+ gUnknown_020322A0->unk_93++;
+ }
+ // fallthrough
+ case 2:
+ gUnknown_020322A0->unk_93 = 0;
+ break;
+ }
+}
+
+static void sub_807B60C(void)
+{
+ sub_807BBC8();
+ RunTasks();
+ RunTextPrinters();
+ AnimateSprites();
+ BuildOamBuffer();
+ UpdatePaletteFade();
+}
+
+static void sub_807B62C(u8 a0)
+{
+ switch (a0)
+ {
+ case 0:
+ gUnknown_020322A0->bg2vofs = 0;
+ gUnknown_020322A0->bg2hofs = 180;
+ SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_0 |
+ DISPCNT_OBJ_1D_MAP |
+ DISPCNT_BG0_ON |
+ DISPCNT_BG2_ON |
+ DISPCNT_OBJ_ON);
+ SetGpuReg(REG_OFFSET_BG2CNT, BGCNT_PRIORITY(2) |
+ BGCNT_CHARBASE(1) |
+ BGCNT_16COLOR |
+ BGCNT_SCREENBASE(18) |
+ BGCNT_TXT512x256);
+ LoadPalette(gTradeGba2_Pal, 16, 0x60);
+ DmaCopyLarge16(3, gTradeGba_Gfx, (void *) BG_CHAR_ADDR(1), 0x1420, 0x1000);
+ DmaCopy16Defvars(3, gUnknown_08331F60, (void *) BG_SCREEN_ADDR(18), 0x1000);
+ break;
+ case 1:
+ gUnknown_020322A0->bg1hofs = 0;
+ gUnknown_020322A0->bg1vofs = 348;
+ SetGpuReg(REG_OFFSET_BG1VOFS, 348);
+ SetGpuReg(REG_OFFSET_BG1CNT, BGCNT_PRIORITY(2) |
+ BGCNT_CHARBASE(0) |
+ BGCNT_16COLOR |
+ BGCNT_SCREENBASE(5) |
+ BGCNT_TXT256x512);
+ SetGpuReg(REG_OFFSET_BG2CNT, BGCNT_PRIORITY(2) |
+ BGCNT_CHARBASE(1) |
+ BGCNT_16COLOR |
+ BGCNT_SCREENBASE(18) |
+ BGCNT_TXT256x512);
+
+ if (gUnknown_020322A0->unk_FA)
+ {
+ DmaCopy16Defvars(3, gUnknown_083369A0, (void *) BG_SCREEN_ADDR(5), 0x1000);
+ }
+ else
+ {
+ DmaCopy16Defvars(3, gUnknown_083359A0, (void *) BG_SCREEN_ADDR(5), 0x1000);
+ }
+
+ DmaCopyLarge16(3, gTradeGba_Gfx, (void *) BG_CHAR_ADDR(0), 0x1420, 0x1000);
+ SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_0 |
+ DISPCNT_OBJ_1D_MAP |
+ DISPCNT_BG1_ON |
+ DISPCNT_OBJ_ON);
+ break;
+ case 2:
+ gUnknown_020322A0->bg1vofs = 0;
+ gUnknown_020322A0->bg1hofs = 0;
+ if (!gUnknown_020322A0->unk_FA)
+ {
+ SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_1 |
+ DISPCNT_OBJ_1D_MAP |
+ DISPCNT_BG1_ON |
+ DISPCNT_OBJ_ON);
+ LZ77UnCompVram(gUnknown_083379A0, (void *) BG_SCREEN_ADDR(5));
+ BlendPalettes(0x8, 16, RGB_BLACK);
+ }
+ else
+ {
+ SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_1 |
+ DISPCNT_OBJ_1D_MAP |
+ DISPCNT_BG1_ON |
+ DISPCNT_OBJ_ON);
+ DmaCopy16Defvars(3, gUnknown_0832FFC0, (void *) BG_SCREEN_ADDR(5), 0x800);
+ BlendPalettes(0x1, 16, RGB_BLACK);
+ }
+ break;
+ case 3:
+ LoadPalette(gUnknown_08337EA0, 48, 0x20);
+ LZ77UnCompVram(gUnknown_08337EC0, (void *) BG_CHAR_ADDR(1));
+ LZ77UnCompVram(gUnknown_08338550, (void *) BG_SCREEN_ADDR(18));
+ gUnknown_020322A0->bg2vofs = 80;
+ SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_0 |
+ DISPCNT_OBJ_1D_MAP |
+ DISPCNT_BG1_ON |
+ DISPCNT_BG2_ON |
+ DISPCNT_OBJ_ON);
+ break;
+ case 4:
+ SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_1 |
+ DISPCNT_OBJ_1D_MAP |
+ DISPCNT_BG2_ON |
+ DISPCNT_OBJ_ON);
+ SetGpuReg(REG_OFFSET_BG2CNT, BGCNT_PRIORITY(3) |
+ BGCNT_CHARBASE(1) |
+ BGCNT_256COLOR |
+ BGCNT_SCREENBASE(18) |
+ BGCNT_AFF128x128);
+ gUnknown_020322A0->unk_D4 = 64;
+ gUnknown_020322A0->unk_D6 = 92;
+ gUnknown_020322A0->unk_E8 = 32;
+ gUnknown_020322A0->unk_EA = 1024;
+ gUnknown_020322A0->unk_EC = 0;
+
+ DmaCopyLarge16(3, gUnknown_08332F60, (void *) BG_CHAR_ADDR(1), 0x2840, 0x1000);
+
+ if (gUnknown_020322A0->unk_FA)
+ {
+ DmaCopy16Defvars(3, gUnknown_083357A0, (void *) BG_SCREEN_ADDR(18), 0x100);
+ }
+ else
+ {
+ DmaCopy16Defvars(3, gUnknown_083358A0, (void *) BG_SCREEN_ADDR(18), 0x100);
+ }
+ break;
+ case 5:
+ gUnknown_020322A0->bg1vofs = 0;
+ gUnknown_020322A0->bg1hofs = 0;
+ break;
+ case 6:
+ SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_1 |
+ DISPCNT_OBJ_1D_MAP |
+ DISPCNT_BG2_ON |
+ DISPCNT_OBJ_ON);
+ SetGpuReg(REG_OFFSET_BG2CNT, BGCNT_PRIORITY(3) |
+ BGCNT_CHARBASE(1) |
+ BGCNT_256COLOR |
+ BGCNT_SCREENBASE(18) |
+ BGCNT_AFF128x128);
+ gUnknown_020322A0->unk_D4 = 64;
+ gUnknown_020322A0->unk_D6 = 92;
+ gUnknown_020322A0->unk_E8 = 256;
+ gUnknown_020322A0->unk_EA = 128;
+ gUnknown_020322A0->unk_DC = 120;
+ gUnknown_020322A0->unk_DE = 80;
+ gUnknown_020322A0->unk_EC = 0;
+
+ DmaCopyLarge16(3, gUnknown_08332F60, (void *) BG_CHAR_ADDR(1), 0x2840, 0x1000);
+
+ if (gUnknown_020322A0->unk_FA)
+ {
+ DmaCopy16Defvars(3, gUnknown_083357A0, (void *) BG_SCREEN_ADDR(18), 0x100);
+ }
+ else
+ {
+ DmaCopy16Defvars(3, gUnknown_083358A0, (void *) BG_SCREEN_ADDR(18), 0x100);
+ }
+ break;
+ case 7:
+ gUnknown_020322A0->bg2vofs = 0;
+ gUnknown_020322A0->bg2hofs = 0;
+ SetGpuReg(REG_OFFSET_BLDCNT, 0);
+ SetGpuReg(REG_OFFSET_BG2CNT, BGCNT_PRIORITY(2) |
+ BGCNT_CHARBASE(1) |
+ BGCNT_16COLOR |
+ BGCNT_SCREENBASE(18) |
+ BGCNT_TXT512x256);
+ LoadPalette(gTradeGba2_Pal, 16, 0x60);
+ DmaCopyLarge16(3, gTradeGba_Gfx, (void *) BG_CHAR_ADDR(1), 0x1420, 0x1000);
+ DmaCopy16Defvars(3, gUnknown_08331F60, (void *) BG_SCREEN_ADDR(18), 0x1000);
+ break;
+ }
+}
+
+static void sub_807BA94(void)
+{
+ LoadSpriteSheet(&gUnknown_08338D70);
+ LoadSpriteSheet(&gUnknown_08338DC0);
+ LoadSpriteSheet(&gUnknown_08338DF4);
+ LoadSpriteSheet(&gUnknown_08338E6C);
+ LoadSpritePalette(&gUnknown_08338D78);
+ LoadSpritePalette(&gUnknown_08338D80);
+}
+
+static void SetTradeSceneStrings(void)
+{
+ /*Sets the variable strings printed on the
+ *actual trading screen. For use in strings
+ *like "[Pokemon] will be sent to [Trainer]."
+ */
+ u8 mpId;
+ u8 name[20];
+ const struct InGameTrade *ingameTrade;
+
+ if (gUnknown_020322A0->isLinkTrade)
+ {
+ mpId = GetMultiplayerId();
+ StringCopy(gStringVar1, gLinkPlayers[mpId ^ 1].name);
+ GetMonData(&gEnemyParty[gUnknown_02032298[1] % PARTY_SIZE], MON_DATA_NICKNAME, name);
+ StringCopy10(gStringVar3, name);
+ GetMonData(&gPlayerParty[gUnknown_02032298[0]], MON_DATA_NICKNAME, name);
+ StringCopy10(gStringVar2, name);
+ }
+ else
+ {
+ ingameTrade = &gIngameTrades[gSpecialVar_0x8004];
+ StringCopy(gStringVar1, ingameTrade->otName);
+ StringCopy10(gStringVar3, ingameTrade->name);
+ GetMonData(&gPlayerParty[gSpecialVar_0x8005], MON_DATA_NICKNAME, name);
+ StringCopy10(gStringVar2, name);
+ }
+}
+
+static u8 sub_807BBC8(void)
+{
+ if (gUnknown_020322A0->unk_FA)
+ {
+ return sub_807BBEC();
+ }
+ else
+ {
+ return sub_807CFC8();
+ }
+}
+
+static bool8 sub_807BBEC(void)
+{
+ u16 evoTarget;
+
+ switch (gUnknown_020322A0->state)
+ {
+ case 0:
+ gSprites[gUnknown_020322A0->pokePicSpriteIdxs[0]].invisible = FALSE;
+ gSprites[gUnknown_020322A0->pokePicSpriteIdxs[0]].pos2.x = -180;
+ gSprites[gUnknown_020322A0->pokePicSpriteIdxs[0]].pos2.y = gMonFrontPicCoords[gUnknown_020322A0->tradeSpecies[0]].y_offset;
+ gUnknown_020322A0->state++;
+ gUnknown_020322A0->cachedMapMusic = GetCurrentMapMusic();
+ PlayNewMapMusic(MUS_SHINKA);
+ break;
+ case 1:
+ if (gUnknown_020322A0->bg2hofs > 0)
+ {
+ gSprites[gUnknown_020322A0->pokePicSpriteIdxs[0]].pos2.x += 3;
+ gUnknown_020322A0->bg2hofs -= 3;
+ }
+ else
+ {
+ gSprites[gUnknown_020322A0->pokePicSpriteIdxs[0]].pos2.x = 0;
+ gUnknown_020322A0->bg2hofs = 0;
+ gUnknown_020322A0->state = 10;
+ }
+ break;
+ case 10:
+ StringExpandPlaceholders(gStringVar4, gText_XWillBeSentToY);
+ sub_807F1A8(0, gStringVar4, 0);
+
+ if (gUnknown_020322A0->tradeSpecies[0] != SPECIES_EGG)
+ {
+ PlayCry1(gUnknown_020322A0->tradeSpecies[0], 0);
+ }
+
+ gUnknown_020322A0->state = 11;
+ gUnknown_020322A0->timer = 0;
+ break;
+ case 11:
+ if (++gUnknown_020322A0->timer == 80)
+ {
+ gUnknown_020322A0->unk_D2 = sub_807671C(gUnknown_020322A0->pokePicSpriteIdxs[0], gSprites[gUnknown_020322A0->pokePicSpriteIdxs[0]].oam.paletteNum, 120, 32, 2, 1, 0x14, 0xfffff);
+ gUnknown_020322A0->state++;
+ StringExpandPlaceholders(gStringVar4, gText_ByeByeVar1);
+ sub_807F1A8(0, gStringVar4, 0);
+ }
+ break;
+ case 12:
+ if (gSprites[gUnknown_020322A0->unk_D2].callback == SpriteCallbackDummy)
+ {
+ gUnknown_020322A0->unk_D3 = CreateSprite(&gSpriteTemplate_8338D28, 120, 32, 0);
+ gSprites[gUnknown_020322A0->unk_D3].callback = sub_807E5D8;
+ DestroySprite(&gSprites[gUnknown_020322A0->unk_D2]);
+ gUnknown_020322A0->state++;
+ }
+ break;
+ case 13:
+ // The game waits here for the sprite to finish its animation sequence.
+ break;
+ case 14:
+ BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK);
+ gUnknown_020322A0->state = 20;
+ break;
+ case 20:
+ if (!gPaletteFade.active)
+ {
+ sub_807B62C(4);
+ FillWindowPixelBuffer(0, 0xFF);
+ CopyWindowToVram(0, 3);
+ gUnknown_020322A0->state++;
+ }
+ break;
+ case 21:
+ BeginNormalPaletteFade(0xFFFFFFFF, -1, 16, 0, RGB_BLACK);
+ gUnknown_020322A0->state++;
+ break;
+ case 22:
+ if (!gPaletteFade.active)
+ {
+ gUnknown_020322A0->state = 23;
+ }
+ break;
+ case 23:
+ if (gUnknown_020322A0->unk_EA > 0x100)
+ {
+ gUnknown_020322A0->unk_EA -= 0x34;
+ }
+ else
+ {
+ sub_807B62C(1);
+ gUnknown_020322A0->unk_EA = 0x80;
+ gUnknown_020322A0->state++;
+ gUnknown_020322A0->timer = 0;
+ }
+ gUnknown_020322A0->unk_E8 = 0x8000 / gUnknown_020322A0->unk_EA;
+ break;
+ case 24:
+ if (++gUnknown_020322A0->timer > 20)
+ {
+ sub_807AB28();
+ gUnknown_020322A0->unk_91 = CreateSprite(&gSpriteTemplate_8338E74, 120, 80, 0);
+ gUnknown_020322A0->state++;
+ }
+ break;
+ case 25:
+ if (gSprites[gUnknown_020322A0->unk_91].animEnded)
+ {
+ DestroySprite(&gSprites[gUnknown_020322A0->unk_91]);
+ SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_EFFECT_BLEND |
+ BLDCNT_TGT2_BG1 |
+ BLDCNT_TGT2_BG2);
+ SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(12, 4));
+ gUnknown_020322A0->state++;
+ }
+ break;
+ case 26:
+ if (--gUnknown_020322A0->bg1vofs == 316)
+ {
+ gUnknown_020322A0->state++;
+ }
+ if (gUnknown_020322A0->bg1vofs == 328)
+ {
+ gUnknown_020322A0->unk_92 = CreateSprite(&gSpriteTemplate_8338DFC, 128, 65, 0);
+ }
+ break;
+ case 27:
+ gUnknown_020322A0->unk_90 = CreateSprite(&gUnknown_08338D88, 128, 80, 3);
+ gUnknown_020322A0->unk_91 = CreateSprite(&gSpriteTemplate_8338DC8, 128, 80, 0);
+ StartSpriteAnim(&gSprites[gUnknown_020322A0->unk_91], 1);
+ gUnknown_020322A0->state++;
+ break;
+ case 28:
+ if ((gUnknown_020322A0->bg1vofs -= 2) == 166)
+ {
+ gUnknown_020322A0->state = 200;
+ }
+ SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_1 |
+ DISPCNT_OBJ_1D_MAP |
+ DISPCNT_BG1_ON |
+ DISPCNT_OBJ_ON);
+ break;
+ case 200:
+ gSprites[gUnknown_020322A0->unk_90].pos1.y -= 2;
+ gSprites[gUnknown_020322A0->unk_91].pos1.y -= 2;
+ if (gSprites[gUnknown_020322A0->unk_90].pos1.y < -8)
+ {
+ gUnknown_020322A0->state = 29;
+ }
+ break;
+ case 29:
+ BeginNormalPaletteFade(0xFFFFFFFF, -1, 0, 16, RGB_BLACK);
+ gUnknown_020322A0->state = 30;
+ break;
+ case 30:
+ if (!gPaletteFade.active)
+ {
+ DestroySprite(&gSprites[gUnknown_020322A0->unk_90]);
+ DestroySprite(&gSprites[gUnknown_020322A0->unk_91]);
+ sub_807B62C(2);
+ gUnknown_020322A0->state++;
+ }
+ break;
+ case 31:
+ BeginNormalPaletteFade(0xFFFFFFFF, -1, 16, 0, RGB_BLACK);
+ gUnknown_020322A0->unk_90 = CreateSprite(&gSpriteTemplate_8338DC8, 111, 170, 0);
+ gUnknown_020322A0->unk_91 = CreateSprite(&gSpriteTemplate_8338DC8, 129, -10, 0);
+ gUnknown_020322A0->state++;
+ break;
+ case 32:
+ if (!gPaletteFade.active)
+ {
+ PlaySE(SE_TK_WARPOUT);
+ gUnknown_020322A0->state++;
+ }
+ gSprites[gUnknown_020322A0->unk_90].pos2.y -= 3;
+ gSprites[gUnknown_020322A0->unk_91].pos2.y += 3;
+ break;
+ case 33:
+ gSprites[gUnknown_020322A0->unk_90].pos2.y -= 3;
+ gSprites[gUnknown_020322A0->unk_91].pos2.y += 3;
+ if (gSprites[gUnknown_020322A0->unk_90].pos2.y <= -90)
+ {
+ gSprites[gUnknown_020322A0->unk_90].data[1] = 1;
+ gSprites[gUnknown_020322A0->unk_91].data[1] = 1;
+ gUnknown_020322A0->state++;
+ }
+ break;
+ case 34:
+ BlendPalettes(0x1, 16, RGB_WHITEALPHA);
+ gUnknown_020322A0->state++;
+ break;
+ case 35:
+ BlendPalettes(0x1, 0, RGB_WHITEALPHA);
+ gUnknown_020322A0->state++;
+ break;
+ case 36:
+ BlendPalettes(0x1, 16, RGB_WHITEALPHA);
+ gUnknown_020322A0->state++;
+ break;
+ case 37:
+ if (!IsMonSpriteNotFlipped(gUnknown_020322A0->tradeSpecies[0]))
+ {
+ gSprites[gUnknown_020322A0->pokePicSpriteIdxs[0]].affineAnims = gSpriteAffineAnimTable_8338ECC;
+ gSprites[gUnknown_020322A0->pokePicSpriteIdxs[0]].oam.affineMode = 3;
+ CalcCenterToCornerVec(&gSprites[gUnknown_020322A0->pokePicSpriteIdxs[0]], 0, 3, 3);
+ StartSpriteAffineAnim(&gSprites[gUnknown_020322A0->pokePicSpriteIdxs[0]], 0);
+ }
+ else
+ {
+ StartSpriteAffineAnim(&gSprites[gUnknown_020322A0->pokePicSpriteIdxs[0]], 0);
+ }
+ StartSpriteAffineAnim(&gSprites[gUnknown_020322A0->pokePicSpriteIdxs[1]], 0);
+ gSprites[gUnknown_020322A0->pokePicSpriteIdxs[0]].pos1.x = 60;
+ gSprites[gUnknown_020322A0->pokePicSpriteIdxs[1]].pos1.x = 180;
+ gSprites[gUnknown_020322A0->pokePicSpriteIdxs[0]].pos1.y = 192;
+ gSprites[gUnknown_020322A0->pokePicSpriteIdxs[1]].pos1.y = -32;
+ gSprites[gUnknown_020322A0->pokePicSpriteIdxs[0]].invisible = FALSE;
+ gSprites[gUnknown_020322A0->pokePicSpriteIdxs[1]].invisible = FALSE;
+ gUnknown_020322A0->state++;
+ break;
+ case 38:
+ gSprites[gUnknown_020322A0->pokePicSpriteIdxs[0]].pos2.y -= 3;
+ gSprites[gUnknown_020322A0->pokePicSpriteIdxs[1]].pos2.y += 3;
+ if (gSprites[gUnknown_020322A0->pokePicSpriteIdxs[0]].pos2.y < -160 && gSprites[gUnknown_020322A0->pokePicSpriteIdxs[0]].pos2.y >= -163)
+ {
+ PlaySE(SE_TK_WARPIN);
+ }
+ if (gSprites[gUnknown_020322A0->pokePicSpriteIdxs[0]].pos2.y < -222)
+ {
+ gSprites[gUnknown_020322A0->unk_90].data[1] = 0;
+ gSprites[gUnknown_020322A0->unk_91].data[1] = 0;
+ gUnknown_020322A0->state++;
+ gSprites[gUnknown_020322A0->pokePicSpriteIdxs[0]].invisible = TRUE;
+ gSprites[gUnknown_020322A0->pokePicSpriteIdxs[1]].invisible = TRUE;
+ BlendPalettes(0x1, 0, RGB_WHITEALPHA);
+ }
+ break;
+ case 39:
+ gSprites[gUnknown_020322A0->unk_90].pos2.y -= 3;
+ gSprites[gUnknown_020322A0->unk_91].pos2.y += 3;
+ if (gSprites[gUnknown_020322A0->unk_90].pos2.y <= -222)
+ {
+ BeginNormalPaletteFade(0xFFFFFFFF, -1, 0, 16, RGB_BLACK);
+ gUnknown_020322A0->state++;
+ DestroySprite(&gSprites[gUnknown_020322A0->unk_90]);
+ DestroySprite(&gSprites[gUnknown_020322A0->unk_91]);
+ }
+ break;
+ case 40:
+ if (!gPaletteFade.active)
+ {
+ gUnknown_020322A0->state++;
+ sub_807B62C(1);
+ gUnknown_020322A0->bg1vofs = 166;
+ gUnknown_020322A0->unk_90 = CreateSprite(&gUnknown_08338D88, 128, -20, 3);
+ gUnknown_020322A0->unk_91 = CreateSprite(&gSpriteTemplate_8338DC8, 128, -20, 0);
+ StartSpriteAnim(&gSprites[gUnknown_020322A0->unk_91], 1);
+ }
+ break;
+ case 41:
+ BeginNormalPaletteFade(0xFFFFFFFF, -1, 16, 0, RGB_BLACK);
+ gUnknown_020322A0->state++;
+ break;
+ case 42:
+ SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_0 |
+ DISPCNT_OBJ_1D_MAP |
+ DISPCNT_BG1_ON |
+ DISPCNT_OBJ_ON);
+ if (!gPaletteFade.active)
+ {
+ gUnknown_020322A0->state++;
+ }
+ break;
+ case 43:
+ gSprites[gUnknown_020322A0->unk_90].pos2.y += 3;
+ gSprites[gUnknown_020322A0->unk_91].pos2.y += 3;
+ if (gSprites[gUnknown_020322A0->unk_90].pos2.y + gSprites[gUnknown_020322A0->unk_90].pos1.y == 64)
+ {
+ gUnknown_020322A0->state++;
+ }
+ break;
+ case 44:
+ if ((gUnknown_020322A0->bg1vofs += 2) > 316)
+ {
+ gUnknown_020322A0->bg1vofs = 316;
+ gUnknown_020322A0->state++;
+ }
+ break;
+ case 45:
+ DestroySprite(&gSprites[gUnknown_020322A0->unk_90]);
+ DestroySprite(&gSprites[gUnknown_020322A0->unk_91]);
+ gUnknown_020322A0->state++;
+ gUnknown_020322A0->timer = 0;
+ break;
+ case 46:
+ if (++gUnknown_020322A0->timer == 10)
+ {
+ gUnknown_020322A0->state++;
+ }
+ break;
+ case 47:
+ if (++gUnknown_020322A0->bg1vofs > 348)
+ {
+ gUnknown_020322A0->bg1vofs = 348;
+ gUnknown_020322A0->state++;
+ }
+ if (gUnknown_020322A0->bg1vofs == 328 && gUnknown_020322A0->unk_FA)
+ {
+ gUnknown_020322A0->unk_92 = CreateSprite(&gSpriteTemplate_8338DFC, 128, 65, 0);
+ gSprites[gUnknown_020322A0->unk_92].callback = sub_807AAE0;
+ }
+ break;
+ case 48:
+ gUnknown_020322A0->unk_91 = CreateSprite(&gSpriteTemplate_8338E74, 120, 80, 0);
+ gUnknown_020322A0->state = 50;
+ break;
+ case 50:
+ if (gSprites[gUnknown_020322A0->unk_91].animEnded)
+ {
+ DestroySprite(&gSprites[gUnknown_020322A0->unk_91]);
+ sub_807B62C(6);
+ gUnknown_020322A0->state++;
+ PlaySE(SE_W028);
+ }
+ break;
+ case 51:
+ if (gUnknown_020322A0->unk_EA < 0x400)
+ {
+ gUnknown_020322A0->unk_EA += 0x34;
+ }
+ else
+ {
+ gUnknown_020322A0->unk_EA = 0x400;
+ gUnknown_020322A0->state++;
+ }
+ gUnknown_020322A0->unk_E8 = 0x8000 / gUnknown_020322A0->unk_EA;
+ break;
+ case 52:
+ BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK);
+ gUnknown_020322A0->state = 60;
+ break;
+
+ case 60:
+ if (!gPaletteFade.active)
+ {
+ sub_807B62C(5);
+ sub_807B62C(7);
+ gPaletteFade.bufferTransferDisabled = TRUE;
+ gUnknown_020322A0->state++;
+ }
+ break;
+ case 61:
+ gPaletteFade.bufferTransferDisabled = FALSE;
+ BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, RGB_BLACK);
+ gUnknown_020322A0->state++;
+ break;
+ case 62:
+ SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_0 |
+ DISPCNT_OBJ_1D_MAP |
+ DISPCNT_BG2_ON |
+ DISPCNT_OBJ_ON);
+ if (!gPaletteFade.active)
+ {
+ gUnknown_020322A0->state++;
+ }
+ break;
+ case 63:
+ gUnknown_020322A0->unk_D3 = CreateSprite(&gSpriteTemplate_8338D28, 120, -8, 0);
+ gSprites[gUnknown_020322A0->unk_D3].data[3] = 74;
+ gSprites[gUnknown_020322A0->unk_D3].callback = sub_807E6AC;
+ StartSpriteAnim(&gSprites[gUnknown_020322A0->unk_D3], 1);
+ StartSpriteAffineAnim(&gSprites[gUnknown_020322A0->unk_D3], 2);
+ BlendPalettes(1 << (16 + gSprites[gUnknown_020322A0->unk_D3].oam.paletteNum), 16, RGB_WHITEALPHA);
+ gUnknown_020322A0->state++;
+ gUnknown_020322A0->timer = 0;
+ break;
+ case 64:
+ BeginNormalPaletteFade(1 << (16 + gSprites[gUnknown_020322A0->unk_D3].oam.paletteNum), 1, 16, 0, RGB_WHITEALPHA);
+ gUnknown_020322A0->state++;
+ break;
+ case 65:
+ if (gSprites[gUnknown_020322A0->unk_D3].callback == SpriteCallbackDummy)
+ {
+ HandleLoadSpecialPokePic_2(&gMonFrontPicTable[gUnknown_020322A0->tradeSpecies[1]], gMonSpritesGfxPtr->sprites[3], gUnknown_020322A0->tradeSpecies[1], gUnknown_020322A0->unk_68[1]);
+ gUnknown_020322A0->state++;
+ }
+ break;
+ case 66:
+ gSprites[gUnknown_020322A0->pokePicSpriteIdxs[1]].pos1.x = 120;
+ gSprites[gUnknown_020322A0->pokePicSpriteIdxs[1]].pos1.y = gMonFrontPicCoords[gUnknown_020322A0->tradeSpecies[1]].y_offset + 60;
+ gSprites[gUnknown_020322A0->pokePicSpriteIdxs[1]].pos2.x = 0;
+ gSprites[gUnknown_020322A0->pokePicSpriteIdxs[1]].pos2.y = 0;
+ StartSpriteAnim(&gSprites[gUnknown_020322A0->pokePicSpriteIdxs[1]], 0);
+ CreatePokeballSpriteToReleaseMon(gUnknown_020322A0->pokePicSpriteIdxs[1], gSprites[gUnknown_020322A0->pokePicSpriteIdxs[1]].oam.paletteNum, 120, 84, 2, 1, 20, 0xFFFFF, gUnknown_020322A0->tradeSpecies[1]);
+ FreeSpriteOamMatrix(&gSprites[gUnknown_020322A0->unk_D3]);
+ DestroySprite(&gSprites[gUnknown_020322A0->unk_D3]);
+ gUnknown_020322A0->state++;
+ break;
+ case 67:
+ SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_0 |
+ DISPCNT_OBJ_1D_MAP |
+ DISPCNT_BG0_ON |
+ DISPCNT_BG2_ON |
+ DISPCNT_OBJ_ON);
+ StringExpandPlaceholders(gStringVar4, gText_XSentOverY);
+ sub_807F1A8(0, gStringVar4, 0);
+ gUnknown_020322A0->state = 167;
+ gUnknown_020322A0->timer = 0;
+ break;
+ // 167 and 267 are extra cases added in for animations
+ case 167:
+ if (++gUnknown_020322A0->timer > 60)
+ {
+ gUnknown_020322A0->state = 267;
+ gUnknown_020322A0->timer = 0;
+ }
+ break;
+ case 267:
+ if (IsCryFinished())
+ {
+ gUnknown_020322A0->state = 68;
+ }
+ break;
+ case 68:
+ if (++gUnknown_020322A0->timer == 10)
+ {
+ PlayFanfare(MUS_FANFA5);
+ }
+ if (gUnknown_020322A0->timer == 250)
+ {
+ gUnknown_020322A0->state++;
+ StringExpandPlaceholders(gStringVar4, gText_TakeGoodCareOfX);
+ sub_807F1A8(0, gStringVar4, 0);
+ gUnknown_020322A0->timer = 0;
+ }
+ break;
+ case 69:
+ if (++gUnknown_020322A0->timer == 60)
+ {
+ gUnknown_020322A0->state++;
+ }
+ break;
+ case 70:
+ sub_807F14C();
+ gUnknown_020322A0->state++;
+ break;
+ case 71:
+ if (gUnknown_020322A0->isLinkTrade)
+ {
+ return TRUE;
+ }
+ else if (gMain.newKeys & A_BUTTON)
+ {
+ gUnknown_020322A0->state++;
+ }
+ break;
+ case 72: // Only if in-game trade
+ sub_807B4D0(gSpecialVar_0x8005, 0);
+ gCB2_AfterEvolution = sub_807B60C;
+ evoTarget = GetEvolutionTargetSpecies(&gPlayerParty[gUnknown_02032298[0]], TRUE, ITEM_NONE);
+ if (evoTarget != SPECIES_NONE)
+ {
+ TradeEvolutionScene(&gPlayerParty[gUnknown_02032298[0]], evoTarget, gUnknown_020322A0->pokePicSpriteIdxs[1], gUnknown_02032298[0]);
+ }
+ gUnknown_020322A0->state++;
+ break;
+ case 73:
+ BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK);
+ gUnknown_020322A0->state++;
+ break;
+ case 74:
+ if (!gPaletteFade.active)
+ {
+ PlayNewMapMusic(gUnknown_020322A0->cachedMapMusic);
+ if (gUnknown_020322A0)
+ {
+ FreeAllWindowBuffers();
+ Free(GetBgTilemapBuffer(3));
+ Free(GetBgTilemapBuffer(1));
+ Free(GetBgTilemapBuffer(0));
+ FreeMonSpritesGfx();
+ FREE_AND_SET_NULL(gUnknown_020322A0);
+ }
+ SetMainCallback2(CB2_ReturnToField);
+ sub_807E784();
+ }
+ break;
+ }
+ return FALSE;
+}
+
+static bool8 sub_807CFC8(void)
+{
+ u16 evoTarget;
+
+ switch (gUnknown_020322A0->state)
+ {
+ case 0:
+ gSprites[gUnknown_020322A0->pokePicSpriteIdxs[0]].invisible = FALSE;
+ gSprites[gUnknown_020322A0->pokePicSpriteIdxs[0]].pos2.x = -180;
+ gSprites[gUnknown_020322A0->pokePicSpriteIdxs[0]].pos2.y = gMonFrontPicCoords[gUnknown_020322A0->tradeSpecies[0]].y_offset;
+ gUnknown_020322A0->state++;
+ gUnknown_020322A0->cachedMapMusic = GetCurrentMapMusic();
+ PlayNewMapMusic(MUS_SHINKA);
+ break;
+ case 1:
+ if (gUnknown_020322A0->bg2hofs > 0)
+ {
+ gSprites[gUnknown_020322A0->pokePicSpriteIdxs[0]].pos2.x += 3;
+ gUnknown_020322A0->bg2hofs -= 3;
+ }
+ else
+ {
+ gSprites[gUnknown_020322A0->pokePicSpriteIdxs[0]].pos2.x = 0;
+ gUnknown_020322A0->bg2hofs = 0;
+ gUnknown_020322A0->state = 10;
+ }
+ break;
+ case 10:
+ StringExpandPlaceholders(gStringVar4, gText_XWillBeSentToY);
+ sub_807F1A8(0, gStringVar4, 0);
+
+ if (gUnknown_020322A0->tradeSpecies[0] != SPECIES_EGG)
+ {
+ PlayCry1(gUnknown_020322A0->tradeSpecies[0], 0);
+ }
+
+ gUnknown_020322A0->state = 11;
+ gUnknown_020322A0->timer = 0;
+ break;
+ case 11:
+ if (++gUnknown_020322A0->timer == 80)
+ {
+ gUnknown_020322A0->unk_D2 = sub_807671C(gUnknown_020322A0->pokePicSpriteIdxs[0], gSprites[gUnknown_020322A0->pokePicSpriteIdxs[0]].oam.paletteNum, 120, 32, 2, 1, 0x14, 0xfffff);
+ gUnknown_020322A0->state++;
+ StringExpandPlaceholders(gStringVar4, gText_ByeByeVar1);
+ sub_807F1A8(0, gStringVar4, 0);
+ }
+ break;
+ case 12:
+ if (gSprites[gUnknown_020322A0->unk_D2].callback == SpriteCallbackDummy)
+ {
+ gUnknown_020322A0->unk_D3 = CreateSprite(&gSpriteTemplate_8338D28, 120, 32, 0);
+ gSprites[gUnknown_020322A0->unk_D3].callback = sub_807E5D8;
+ DestroySprite(&gSprites[gUnknown_020322A0->unk_D2]);
+ gUnknown_020322A0->state++;
+ }
+ break;
+ case 13:
+ // The game waits here for the sprite to finish its animation sequence.
+ break;
+ case 14:
+ BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK);
+ gUnknown_020322A0->state = 20;
+ break;
+ case 20:
+ if (!gPaletteFade.active)
+ {
+ sub_807B62C(4);
+ FillWindowPixelBuffer(0, 0xFF);
+ CopyWindowToVram(0, 3);
+ gUnknown_020322A0->state++;
+ }
+ break;
+ case 21:
+ BeginNormalPaletteFade(0xFFFFFFFF, -1, 16, 0, RGB_BLACK);
+ gUnknown_020322A0->state++;
+ break;
+ case 22:
+ if (!gPaletteFade.active)
+ {
+ gUnknown_020322A0->state = 23;
+ }
+ break;
+ case 23:
+ if (gUnknown_020322A0->unk_EA > 0x100)
+ {
+ gUnknown_020322A0->unk_EA -= 0x34;
+ }
+ else
+ {
+ sub_807B62C(1);
+ gUnknown_020322A0->unk_EA = 0x80;
+ gUnknown_020322A0->state = 124;
+ gUnknown_020322A0->timer = 0;
+ }
+ gUnknown_020322A0->unk_E8 = 0x8000 / gUnknown_020322A0->unk_EA;
+ break;
+ case 124:
+ if (++gUnknown_020322A0->timer > 20)
+ {
+ sub_807B62C(3);
+ gUnknown_020322A0->unk_91 = CreateSprite(&gSpriteTemplate_8338E8C, 120, 80, 0);
+ gUnknown_020322A0->state++;
+ }
+ break;
+ case 125:
+ if (gSprites[gUnknown_020322A0->unk_91].animEnded)
+ {
+ DestroySprite(&gSprites[gUnknown_020322A0->unk_91]);
+ SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT1_BG1 |
+ BLDCNT_TGT1_OBJ |
+ BLDCNT_EFFECT_BLEND |
+ BLDCNT_TGT2_BG2);
+ SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(16, 4));
+ CreateTask(c3_08054588, 5);
+ gUnknown_020322A0->state++;
+ }
+ break;
+ case 126:
+ if (!FuncIsActiveTask(c3_08054588))
+ {
+ gUnknown_020322A0->state = 26;
+ }
+ break;
+ case 26:
+ if (--gUnknown_020322A0->bg1vofs == 316)
+ {
+ gUnknown_020322A0->state++;
+ }
+ break;
+ case 27:
+ gUnknown_020322A0->unk_90 = CreateSprite(&gUnknown_08338D88, 120, 80, 3);
+ gSprites[gUnknown_020322A0->unk_90].callback = sub_807AA4C;
+ gUnknown_020322A0->unk_91 = CreateSprite(&gSpriteTemplate_8338DC8, 120, 80, 0);
+ StartSpriteAnim(&gSprites[gUnknown_020322A0->unk_91], 1);
+ gUnknown_020322A0->state++;
+ break;
+ case 28:
+ if ((gUnknown_020322A0->bg1vofs -= 3) == 166)
+ {
+ gUnknown_020322A0->state = 200;
+ }
+ SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_1 |
+ DISPCNT_OBJ_1D_MAP |
+ DISPCNT_BG1_ON |
+ DISPCNT_OBJ_ON);
+ break;
+ case 200:
+ gSprites[gUnknown_020322A0->unk_90].pos1.y -= 2;
+ gSprites[gUnknown_020322A0->unk_91].pos1.y -= 2;
+ if (gSprites[gUnknown_020322A0->unk_90].pos1.y < -8)
+ {
+ gUnknown_020322A0->state = 29;
+ }
+ break;
+ case 29:
+ BeginNormalPaletteFade(0xFFFFFFFF, -1, 0, 16, RGB_BLACK);
+ gUnknown_020322A0->state = 30;
+ break;
+ case 30:
+ if (!gPaletteFade.active)
+ {
+ DestroySprite(&gSprites[gUnknown_020322A0->unk_90]);
+ DestroySprite(&gSprites[gUnknown_020322A0->unk_91]);
+ sub_807B62C(2);
+ gUnknown_020322A0->state++;
+ }
+ break;
+ case 31:
+ BeginNormalPaletteFade(0xFFFFFFFF, -1, 16, 0, RGB_BLACK);
+ gUnknown_020322A0->unk_90 = CreateSprite(&gSpriteTemplate_8338DC8, 111, 170, 0);
+ gUnknown_020322A0->unk_91 = CreateSprite(&gSpriteTemplate_8338DC8, 129, -10, 0);
+ gUnknown_020322A0->state++;
+ break;
+ case 32:
+ if (!gPaletteFade.active)
+ {
+ PlaySE(SE_TK_WARPOUT);
+ gUnknown_020322A0->state++;
+ }
+ gSprites[gUnknown_020322A0->unk_90].pos2.y -= 3;
+ gSprites[gUnknown_020322A0->unk_91].pos2.y += 3;
+ break;
+ case 33:
+ gSprites[gUnknown_020322A0->unk_90].pos2.y -= 3;
+ gSprites[gUnknown_020322A0->unk_91].pos2.y += 3;
+ if (gSprites[gUnknown_020322A0->unk_90].pos2.y <= -90)
+ {
+ gSprites[gUnknown_020322A0->unk_90].data[1] = 1;
+ gSprites[gUnknown_020322A0->unk_91].data[1] = 1;
+ gUnknown_020322A0->state++;
+ CreateTask(c3_0805465C, 5);
+ }
+ break;
+ case 34:
+ BlendPalettes(0x8, 16, RGB_WHITEALPHA);
+ gUnknown_020322A0->state++;
+ break;
+ case 35:
+ BlendPalettes(0x8, 16, RGB_WHITEALPHA);
+ gUnknown_020322A0->state++;
+ break;
+ case 36:
+ BlendPalettes(0x8, 16, RGB_WHITEALPHA);
+ gUnknown_020322A0->state++;
+ break;
+ case 37:
+ if (!IsMonSpriteNotFlipped(gUnknown_020322A0->tradeSpecies[0]))
+ {
+ gSprites[gUnknown_020322A0->pokePicSpriteIdxs[0]].affineAnims = gSpriteAffineAnimTable_8338ECC;
+ gSprites[gUnknown_020322A0->pokePicSpriteIdxs[0]].oam.affineMode = 3;
+ CalcCenterToCornerVec(&gSprites[gUnknown_020322A0->pokePicSpriteIdxs[0]], 0, 3, 3);
+ StartSpriteAffineAnim(&gSprites[gUnknown_020322A0->pokePicSpriteIdxs[0]], 0);
+ }
+ else
+ {
+ StartSpriteAffineAnim(&gSprites[gUnknown_020322A0->pokePicSpriteIdxs[0]], 0);
+ }
+ StartSpriteAffineAnim(&gSprites[gUnknown_020322A0->pokePicSpriteIdxs[1]], 0);
+ gSprites[gUnknown_020322A0->pokePicSpriteIdxs[0]].pos1.x = 40;
+ gSprites[gUnknown_020322A0->pokePicSpriteIdxs[1]].pos1.x = 200;
+ gSprites[gUnknown_020322A0->pokePicSpriteIdxs[0]].pos1.y = 192;
+ gSprites[gUnknown_020322A0->pokePicSpriteIdxs[1]].pos1.y = -32;
+ gSprites[gUnknown_020322A0->pokePicSpriteIdxs[0]].invisible = FALSE;
+ gSprites[gUnknown_020322A0->pokePicSpriteIdxs[1]].invisible = FALSE;
+ gUnknown_020322A0->state++;
+ break;
+ case 38:
+ gSprites[gUnknown_020322A0->pokePicSpriteIdxs[0]].pos2.y -= 3;
+ gSprites[gUnknown_020322A0->pokePicSpriteIdxs[1]].pos2.y += 3;
+ if (gSprites[gUnknown_020322A0->pokePicSpriteIdxs[0]].pos2.y < -160 && gSprites[gUnknown_020322A0->pokePicSpriteIdxs[0]].pos2.y >= -163)
+ {
+ PlaySE(SE_TK_WARPIN);
+ }
+ if (gSprites[gUnknown_020322A0->pokePicSpriteIdxs[0]].pos2.y < -222)
+ {
+ gSprites[gUnknown_020322A0->unk_90].data[1] = 0;
+ gSprites[gUnknown_020322A0->unk_91].data[1] = 0;
+ gUnknown_020322A0->state++;
+ gSprites[gUnknown_020322A0->pokePicSpriteIdxs[0]].invisible = TRUE;
+ gSprites[gUnknown_020322A0->pokePicSpriteIdxs[1]].invisible = TRUE;
+ CreateTask(sub_807F39C, 5);
+ }
+ break;
+ case 39:
+ gSprites[gUnknown_020322A0->unk_90].pos2.y -= 3;
+ gSprites[gUnknown_020322A0->unk_91].pos2.y += 3;
+ if (gSprites[gUnknown_020322A0->unk_90].pos2.y <= -222)
+ {
+ BeginNormalPaletteFade(0xFFFFFFFF, -1, 0, 16, RGB_BLACK);
+ gUnknown_020322A0->state++;
+ DestroySprite(&gSprites[gUnknown_020322A0->unk_90]);
+ DestroySprite(&gSprites[gUnknown_020322A0->unk_91]);
+ }
+ break;
+ case 40:
+ if (!gPaletteFade.active)
+ {
+ gUnknown_020322A0->state++;
+ sub_807B62C(1);
+ gUnknown_020322A0->bg1vofs = 166;
+ sub_807B62C(3);
+ gUnknown_020322A0->bg2vofs = 412;
+ gUnknown_020322A0->unk_90 = CreateSprite(&gUnknown_08338D88, 120, -20, 3);
+ gSprites[gUnknown_020322A0->unk_90].callback = sub_807AA4C;
+ gUnknown_020322A0->unk_91 = CreateSprite(&gSpriteTemplate_8338DC8, 120, -20, 0);
+ StartSpriteAnim(&gSprites[gUnknown_020322A0->unk_91], 1);
+ }
+ break;
+ case 41:
+ BeginNormalPaletteFade(0xFFFFFFFF, -1, 16, 0, RGB_BLACK);
+ gUnknown_020322A0->state++;
+ break;
+ case 42:
+ SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_0 |
+ DISPCNT_OBJ_1D_MAP |
+ DISPCNT_BG1_ON |
+ DISPCNT_OBJ_ON);
+ if (!gPaletteFade.active)
+ {
+ gUnknown_020322A0->state++;
+ }
+ break;
+ case 43:
+ gSprites[gUnknown_020322A0->unk_90].pos2.y += 4;
+ gSprites[gUnknown_020322A0->unk_91].pos2.y += 4;
+ if (gSprites[gUnknown_020322A0->unk_90].pos2.y + gSprites[gUnknown_020322A0->unk_90].pos1.y == 64)
+ {
+ gUnknown_020322A0->state = 144;
+ gUnknown_020322A0->timer = 0;
+ }
+ break;
+ case 144:
+ SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_0 |
+ DISPCNT_OBJ_1D_MAP |
+ DISPCNT_BG1_ON |
+ DISPCNT_BG2_ON |
+ DISPCNT_OBJ_ON);
+ gUnknown_020322A0->bg1vofs += 3;
+ gUnknown_020322A0->bg2vofs += 3;
+ if (++gUnknown_020322A0->timer == 10)
+ {
+ u8 taskId = CreateTask(c3_08054588, 5);
+ gTasks[taskId].data[2] = 1;
+ }
+ if (gUnknown_020322A0->bg1vofs > 316)
+ {
+ gUnknown_020322A0->bg1vofs = 316;
+ gUnknown_020322A0->state++;
+ }
+ break;
+ case 145:
+ DestroySprite(&gSprites[gUnknown_020322A0->unk_90]);
+ DestroySprite(&gSprites[gUnknown_020322A0->unk_91]);
+ gUnknown_020322A0->state++;
+ gUnknown_020322A0->timer = 0;
+ break;
+ case 146:
+ if (!FuncIsActiveTask(c3_08054588))
+ {
+ gUnknown_020322A0->state = 46;
+ gUnknown_020322A0->timer = 0;
+ }
+ break;
+ case 46:
+ if (++gUnknown_020322A0->timer == 10)
+ {
+ gUnknown_020322A0->state++;
+ }
+ break;
+ case 47:
+ if (++gUnknown_020322A0->bg1vofs > 348)
+ {
+ gUnknown_020322A0->bg1vofs = 348;
+ gUnknown_020322A0->state++;
+ }
+ break;
+ case 48:
+ gUnknown_020322A0->unk_91 = CreateSprite(&gSpriteTemplate_8338E74, 120, 80, 0);
+ gUnknown_020322A0->state = 50;
+ break;
+ case 50:
+ if (gSprites[gUnknown_020322A0->unk_91].animEnded)
+ {
+ DestroySprite(&gSprites[gUnknown_020322A0->unk_91]);
+ sub_807B62C(6);
+ gUnknown_020322A0->state++;
+ PlaySE(SE_W028);
+ }
+ break;
+ case 51:
+ if (gUnknown_020322A0->unk_EA < 0x400)
+ {
+ gUnknown_020322A0->unk_EA += 0x34;
+ }
+ else
+ {
+ gUnknown_020322A0->unk_EA = 0x400;
+ gUnknown_020322A0->state++;
+ }
+ gUnknown_020322A0->unk_E8 = 0x8000 / gUnknown_020322A0->unk_EA;
+ break;
+ case 52:
+ BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK);
+ gUnknown_020322A0->state = 60;
+ break;
+ case 60:
+ if (!gPaletteFade.active)
+ {
+ sub_807B62C(5);
+ sub_807B62C(7);
+ gPaletteFade.bufferTransferDisabled = TRUE;
+ gUnknown_020322A0->state++;
+ }
+ break;
+ case 61:
+ gPaletteFade.bufferTransferDisabled = FALSE;
+ BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, RGB_BLACK);
+ gUnknown_020322A0->state++;
+ break;
+ case 62:
+ SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_0 |
+ DISPCNT_OBJ_1D_MAP |
+ DISPCNT_BG2_ON |
+ DISPCNT_OBJ_ON);
+ if (!gPaletteFade.active)
+ {
+ gUnknown_020322A0->state++;
+ }
+ break;
+ case 63:
+ gUnknown_020322A0->unk_D3 = CreateSprite(&gSpriteTemplate_8338D28, 120, -8, 0);
+ gSprites[gUnknown_020322A0->unk_D3].data[3] = 74;
+ gSprites[gUnknown_020322A0->unk_D3].callback = sub_807E6AC;
+ StartSpriteAnim(&gSprites[gUnknown_020322A0->unk_D3], 1);
+ StartSpriteAffineAnim(&gSprites[gUnknown_020322A0->unk_D3], 2);
+ BlendPalettes(1 << (16 + gSprites[gUnknown_020322A0->unk_D3].oam.paletteNum), 16, RGB_WHITEALPHA);
+ gUnknown_020322A0->state++;
+ gUnknown_020322A0->timer = 0;
+ break;
+ case 64:
+ BeginNormalPaletteFade(1 << (16 + gSprites[gUnknown_020322A0->unk_D3].oam.paletteNum), 1, 16, 0, RGB_WHITEALPHA);
+ gUnknown_020322A0->state++;
+ break;
+ case 65:
+ if (gSprites[gUnknown_020322A0->unk_D3].callback == SpriteCallbackDummy)
+ {
+ HandleLoadSpecialPokePic_2(&gMonFrontPicTable[gUnknown_020322A0->tradeSpecies[1]], gMonSpritesGfxPtr->sprites[3], gUnknown_020322A0->tradeSpecies[1], gUnknown_020322A0->unk_68[1]);
+ gUnknown_020322A0->state++;
+ }
+ break;
+ case 66:
+ gSprites[gUnknown_020322A0->pokePicSpriteIdxs[1]].pos1.x = 120;
+ gSprites[gUnknown_020322A0->pokePicSpriteIdxs[1]].pos1.y = gMonFrontPicCoords[gUnknown_020322A0->tradeSpecies[1]].y_offset + 60;
+ gSprites[gUnknown_020322A0->pokePicSpriteIdxs[1]].pos2.x = 0;
+ gSprites[gUnknown_020322A0->pokePicSpriteIdxs[1]].pos2.y = 0;
+ StartSpriteAnim(&gSprites[gUnknown_020322A0->pokePicSpriteIdxs[1]], 0);
+ CreatePokeballSpriteToReleaseMon(gUnknown_020322A0->pokePicSpriteIdxs[1], gSprites[gUnknown_020322A0->pokePicSpriteIdxs[1]].oam.paletteNum, 120, 84, 2, 1, 20, 0xFFFFF, gUnknown_020322A0->tradeSpecies[1]);
+ FreeSpriteOamMatrix(&gSprites[gUnknown_020322A0->unk_D3]);
+ DestroySprite(&gSprites[gUnknown_020322A0->unk_D3]);
+ gUnknown_020322A0->state++;
+ break;
+ case 67:
+ SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_0 |
+ DISPCNT_OBJ_1D_MAP |
+ DISPCNT_BG0_ON |
+ DISPCNT_BG2_ON |
+ DISPCNT_OBJ_ON);
+ StringExpandPlaceholders(gStringVar4, gText_XSentOverY);
+ sub_807F1A8(0, gStringVar4, 0);
+ gUnknown_020322A0->state = 167;
+ gUnknown_020322A0->timer = 0;
+ break;
+ // 167 and 267 are extra cases added in for animations
+ case 167:
+ if (++gUnknown_020322A0->timer > 60)
+ {
+ gUnknown_020322A0->state = 267;
+ gUnknown_020322A0->timer = 0;
+ }
+ break;
+ case 267:
+ if (IsCryFinished())
+ {
+ gUnknown_020322A0->state = 68;
+ }
+ break;
+ case 68:
+ if (++gUnknown_020322A0->timer == 10)
+ {
+ PlayFanfare(MUS_FANFA5);
+ }
+ if (gUnknown_020322A0->timer == 250)
+ {
+ gUnknown_020322A0->state++;
+ StringExpandPlaceholders(gStringVar4, gText_TakeGoodCareOfX);
+ sub_807F1A8(0, gStringVar4, 0);
+ gUnknown_020322A0->timer = 0;
+ }
+ break;
+ case 69:
+ if (++gUnknown_020322A0->timer == 60)
+ {
+ gUnknown_020322A0->state++;
+ }
+ break;
+ case 70:
+ sub_807F14C();
+ gUnknown_020322A0->state++;
+ break;
+ case 71:
+ if (gUnknown_020322A0->isLinkTrade)
+ {
+ return TRUE;
+ }
+ else if (gMain.newKeys & A_BUTTON)
+ {
+ gUnknown_020322A0->state++;
+ }
+ break;
+ case 72: // Only if in-game trade
+ sub_807B4D0(gSpecialVar_0x8005, 0);
+ gCB2_AfterEvolution = sub_807B60C;
+ evoTarget = GetEvolutionTargetSpecies(&gPlayerParty[gUnknown_02032298[0]], TRUE, ITEM_NONE);
+ if (evoTarget != SPECIES_NONE)
+ {
+ TradeEvolutionScene(&gPlayerParty[gUnknown_02032298[0]], evoTarget, gUnknown_020322A0->pokePicSpriteIdxs[1], gUnknown_02032298[0]);
+ }
+ gUnknown_020322A0->state++;
+ break;
+ case 73:
+ BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK);
+ gUnknown_020322A0->state++;
+ break;
+ case 74:
+ if (!gPaletteFade.active)
+ {
+ PlayNewMapMusic(gUnknown_020322A0->cachedMapMusic);
+ if (gUnknown_020322A0)
+ {
+ FreeAllWindowBuffers();
+ Free(GetBgTilemapBuffer(3));
+ Free(GetBgTilemapBuffer(1));
+ Free(GetBgTilemapBuffer(0));
+ FreeMonSpritesGfx();
+ FREE_AND_SET_NULL(gUnknown_020322A0);
+ }
+ SetMainCallback2(CB2_ReturnToField);
+ sub_807E784();
+ }
+ break;
+ }
+ return FALSE;
+}
+
+static void c2_08053788(void)
+{
+ u16 evoTarget;
+ switch (gMain.state)
+ {
+ case 0:
+ gMain.state = 4;
+ gSoftResetDisabled = TRUE;
+ break;
+ case 4:
+ gCB2_AfterEvolution = sub_807EB50;
+ evoTarget = GetEvolutionTargetSpecies(&gPlayerParty[gUnknown_02032298[0]], TRUE, ITEM_NONE);
+ if (evoTarget != SPECIES_NONE)
+ TradeEvolutionScene(&gPlayerParty[gUnknown_02032298[0]], evoTarget, gUnknown_020322A0->pokePicSpriteIdxs[1], gUnknown_02032298[0]);
+ else if (sub_8077260())
+ SetMainCallback2(sub_807F464);
+ else
+ SetMainCallback2(sub_807EB50);
+ gUnknown_02032298[0] = 255;
+ break;
+ }
+ if (!HasLinkErrorOccurred())
+ RunTasks();
+ AnimateSprites();
+ BuildOamBuffer();
+ UpdatePaletteFade();
+}
+
+static void sub_807E4DC(void)
+{
+ u8 blockReceivedStatus;
+ sub_807ACDC();
+ blockReceivedStatus = GetBlockReceivedStatus();
+ if (blockReceivedStatus & 0x01)
+ {
+ if (gBlockRecvBuffer[0][0] == 0xDCBA)
+ {
+ SetMainCallback2(c2_08053788);
+ }
+ if (gBlockRecvBuffer[0][0] == 0xABCD)
+ {
+ gUnknown_020322A0->unk_72 = 1;
+ }
+ ResetBlockReceivedFlag(0);
+ }
+ if (blockReceivedStatus & 0x02)
+ {
+ if (gBlockRecvBuffer[1][0] == 0xABCD)
+ {
+ gUnknown_020322A0->unk_73 = 1;
+ }
+ ResetBlockReceivedFlag(1);
+ }
+}
+
+static void sub_807E55C(struct Sprite *sprite)
+{
+ sprite->pos1.y += sprite->data[0] / 10;
+ sprite->data[5] += sprite->data[1];
+ sprite->pos1.x = sprite->data[5] / 10;
+ if (sprite->pos1.y > 0x4c)
+ {
+ sprite->pos1.y = 0x4c;
+ sprite->data[0] = -(sprite->data[0] * sprite->data[2]) / 100;
+ sprite->data[3] ++;
+ }
+ if (sprite->pos1.x == 0x78)
+ sprite->data[1] = 0;
+ sprite->data[0] += sprite->data[4];
+ if (sprite->data[3] == 4)
+ {
+ sprite->data[7] = 1;
+ sprite->callback = SpriteCallbackDummy;
+ }
+}
+
+static void sub_807E5D8(struct Sprite *sprite)
+{
+ sprite->pos2.y += gTradeBallVerticalVelocityTable[sprite->data[0]];
+ if (sprite->data[0] == 22)
+ PlaySE(SE_KON);
+ if (++ sprite->data[0] == 44)
+ {
+ PlaySE(SE_W025);
+ sprite->callback = sub_807E64C;
+ sprite->data[0] = 0;
+ BeginNormalPaletteFade(1 << (16 + sprite->oam.paletteNum), -1, 0, 16, RGB_WHITEALPHA);
+ }
+}
+
+static void sub_807E64C(struct Sprite *sprite)
+{
+ if (sprite->data[1] == 20)
+ StartSpriteAffineAnim(sprite, 1);
+ if (++ sprite->data[1] > 20)
+ {
+ sprite->pos2.y -= gTradeBallVerticalVelocityTable[sprite->data[0]];
+ if (++ sprite->data[0] == 23)
+ {
+ DestroySprite(sprite);
+ gUnknown_020322A0->state = 14; // Resume the master trade animation
+ }
+ }
+}
+
+static void sub_807E6AC(struct Sprite *sprite)
+{
+ if (sprite->data[2] == 0)
+ {
+ if ((sprite->pos1.y += 4) > sprite->data[3])
+ {
+ sprite->data[2] ++;
+ sprite->data[0] = 0x16;
+ PlaySE(SE_KON);
+ }
+ }
+ else
+ {
+ if (sprite->data[0] == 0x42)
+ PlaySE(SE_KON2);
+ if (sprite->data[0] == 0x5c)
+ PlaySE(SE_KON3);
+ if (sprite->data[0] == 0x6b)
+ PlaySE(SE_KON4);
+ sprite->pos2.y += gTradeBallVerticalVelocityTable[sprite->data[0]];
+ if (++sprite->data[0] == 0x6c)
+ sprite->callback = SpriteCallbackDummy;
+ }
+}
+
+u16 GetInGameTradeSpeciesInfo(void)
+{
+ const struct InGameTrade *inGameTrade = &gIngameTrades[gSpecialVar_0x8004];
+ StringCopy(gStringVar1, gSpeciesNames[inGameTrade->playerSpecies]);
+ StringCopy(gStringVar2, gSpeciesNames[inGameTrade->species]);
+ return inGameTrade->playerSpecies;
+}
+
+static void sub_807E784(void)
+{
+ u8 nickname[32];
+ const struct InGameTrade *inGameTrade = &gIngameTrades[gSpecialVar_0x8004];
+ GetMonData(&gPlayerParty[gSpecialVar_0x8005], MON_DATA_NICKNAME, nickname);
+ StringCopy10(gStringVar1, nickname);
+ StringCopy(gStringVar2, gSpeciesNames[inGameTrade->species]);
+}
+
+static void _CreateInGameTradePokemon(u8 whichPlayerMon, u8 whichInGameTrade)
+{
+ const struct InGameTrade *inGameTrade = &gIngameTrades[whichInGameTrade];
+ u8 level = GetMonData(&gPlayerParty[whichPlayerMon], MON_DATA_LEVEL);
+
+ struct MailStruct mail;
+ u8 metLocation = 0xFE;
+ u8 isMail;
+ struct Pokemon *pokemon = &gEnemyParty[0];
+
+ CreateMon(pokemon, inGameTrade->species, level, 32, TRUE, inGameTrade->personality, TRUE, inGameTrade->otId);
+
+ SetMonData(pokemon, MON_DATA_HP_IV, &inGameTrade->ivs[0]);
+ SetMonData(pokemon, MON_DATA_ATK_IV, &inGameTrade->ivs[1]);
+ SetMonData(pokemon, MON_DATA_DEF_IV, &inGameTrade->ivs[2]);
+ SetMonData(pokemon, MON_DATA_SPEED_IV, &inGameTrade->ivs[3]);
+ SetMonData(pokemon, MON_DATA_SPATK_IV, &inGameTrade->ivs[4]);
+ SetMonData(pokemon, MON_DATA_SPDEF_IV, &inGameTrade->ivs[5]);
+ SetMonData(pokemon, MON_DATA_NICKNAME, inGameTrade->name);
+ SetMonData(pokemon, MON_DATA_OT_NAME, inGameTrade->otName);
+ SetMonData(pokemon, MON_DATA_OT_GENDER, &inGameTrade->otGender);
+ SetMonData(pokemon, MON_DATA_ALT_ABILITY, &inGameTrade->secondAbility);
+ SetMonData(pokemon, MON_DATA_BEAUTY, &inGameTrade->stats[1]);
+ SetMonData(pokemon, MON_DATA_CUTE, &inGameTrade->stats[2]);
+ SetMonData(pokemon, MON_DATA_COOL, &inGameTrade->stats[0]);
+ SetMonData(pokemon, MON_DATA_SMART, &inGameTrade->stats[3]);
+ SetMonData(pokemon, MON_DATA_TOUGH, &inGameTrade->stats[4]);
+ SetMonData(pokemon, MON_DATA_SHEEN, &inGameTrade->sheen);
+ SetMonData(pokemon, MON_DATA_MET_LOCATION, &metLocation);
+
+ isMail = FALSE;
+ if (inGameTrade->heldItem != ITEM_NONE)
+ {
+ if (ItemIsMail(inGameTrade->heldItem))
+ {
+ sub_807E974(&mail, inGameTrade);
+ gUnknown_020321C0[0] = mail;
+ SetMonData(pokemon, MON_DATA_MAIL, &isMail);
+ SetMonData(pokemon, MON_DATA_HELD_ITEM, &inGameTrade->heldItem);
+ }
+ else
+ {
+ SetMonData(pokemon, MON_DATA_HELD_ITEM, &inGameTrade->heldItem);
+ }
+ }
+ CalculateMonStats(&gEnemyParty[0]);
+}
+
+static void sub_807E974(struct MailStruct *mail, const struct InGameTrade *trade) {
+ s32 i;
+
+ for (i = 0; i < 9; i++)
+ {
+ mail->words[i] = gIngameTradeMail[trade->mailNum][i];
+ }
+
+ StringCopy(mail->playerName, trade->otName);
+ PadNameString(mail->playerName, CHAR_SPACE);
+
+ mail->trainerId[0] = trade->otId >> 24;
+ mail->trainerId[1] = trade->otId >> 16;
+ mail->trainerId[2] = trade->otId >> 8;
+ mail->trainerId[3] = trade->otId;
+ mail->species = trade->species;
+ mail->itemId = trade->heldItem;
+}
+
+u16 GetTradeSpecies(void)
+{
+ if (GetMonData(&gPlayerParty[gSpecialVar_0x8005], MON_DATA_IS_EGG))
+ return SPECIES_NONE;
+ return GetMonData(&gPlayerParty[gSpecialVar_0x8005], MON_DATA_SPECIES);
+}
+
+void CreateInGameTradePokemon(void)
+{
+ _CreateInGameTradePokemon(gSpecialVar_0x8005, gSpecialVar_0x8004);
+}
+
+static void sub_807EA2C(void)
+{
+ if (sub_807BBC8() == TRUE)
+ {
+ DestroySprite(&gSprites[gUnknown_020322A0->pokePicSpriteIdxs[0]]);
+ FreeSpriteOamMatrix(&gSprites[gUnknown_020322A0->pokePicSpriteIdxs[1]]);
+ sub_807B4D0(gUnknown_02032298[0], gUnknown_02032298[1] % 6);
+ if (!sub_8077260())
+ {
+ gUnknown_020322A0->linkData[0] = 0xABCD;
+ gUnknown_020322A0->unk_93 = 1;
+ }
+ SetMainCallback2(sub_807EACC);
+ }
+ sub_807B5B8();
+ sub_807E4DC();
+ RunTasks();
+ RunTextPrinters();
+ AnimateSprites();
+ BuildOamBuffer();
+ UpdatePaletteFade();
+}
+
+static void sub_807EACC(void)
+{
+ u8 mpId = sub_807ACDC();
+ if (sub_8077260())
+ {
+ SetMainCallback2(c2_08053788);
+ }
+ else
+ {
+ sub_807E4DC();
+ if (mpId == 0 && gUnknown_020322A0->unk_72 == 1 && gUnknown_020322A0->unk_73 == 1)
+ {
+ gUnknown_020322A0->linkData[0] = 0xDCBA;
+ Trade_SendData(gUnknown_020322A0);
+ gUnknown_020322A0->unk_72 = 2;
+ gUnknown_020322A0->unk_73 = 2;
+ }
+ }
+ RunTasks();
+ AnimateSprites();
+ BuildOamBuffer();
+ UpdatePaletteFade();
+}
+
+static void sub_807EB50(void)
+{
+ switch (gMain.state)
+ {
+ case 0:
+ gMain.state++;
+ StringExpandPlaceholders(gStringVar4, gText_CommunicationStandby5);
+ sub_807F1A8(0, gStringVar4, 0);
+ break;
+ case 1:
+ sub_8077288(0);
+ gMain.state = 100;
+ gUnknown_020322A0->timer = 0;
+ break;
+ case 100:
+ if (++gUnknown_020322A0->timer > 180)
+ {
+ gMain.state = 101;
+ gUnknown_020322A0->timer = 0;
+ }
+ if (_IsLinkTaskFinished())
+ {
+ gMain.state = 2;
+ }
+ break;
+ case 101:
+ if (_IsLinkTaskFinished())
+ {
+ gMain.state = 2;
+ }
+ break;
+ case 2:
+ gMain.state = 50;
+ StringExpandPlaceholders(gStringVar4, gText_SavingDontTurnOffPower);
+ sub_807F1A8(0, gStringVar4, 0);
+ break;
+ case 50:
+ if (!InUnionRoom())
+ IncrementGameStat(GAME_STAT_POKEMON_TRADES);
+ if (gWirelessCommType)
+ {
+ sub_801B990(2, gLinkPlayers[GetMultiplayerId() ^ 1].trainerId);
+ }
+ SetContinueGameWarpStatusToDynamicWarp();
+ sub_8153380();
+ gMain.state++;
+ gUnknown_020322A0->timer = 0;
+ break;
+ case 51:
+ if (++gUnknown_020322A0->timer == 5)
+ {
+ gMain.state++;
+ }
+ break;
+ case 52:
+ if (sub_81533AC())
+ {
+ ClearContinueGameWarpStatus2();
+ gMain.state = 4;
+ }
+ else
+ {
+ gUnknown_020322A0->timer = 0;
+ gMain.state = 51;
+ }
+ break;
+ case 4:
+ sub_81533E0();
+ gMain.state = 40;
+ gUnknown_020322A0->timer = 0;
+ break;
+ case 40:
+ if (++gUnknown_020322A0->timer > 50)
+ {
+ if (GetMultiplayerId() == 0)
+ {
+ gUnknown_020322A0->timer = Random() % 30;
+ }
+ else
+ {
+ gUnknown_020322A0->timer = 0;
+ }
+ gMain.state = 41;
+ }
+ break;
+ case 41:
+ if (gUnknown_020322A0->timer == 0)
+ {
+ sub_8077288(1);
+ gMain.state = 42;
+ }
+ else
+ {
+ gUnknown_020322A0->timer--;
+ }
+ break;
+ case 42:
+ if (_IsLinkTaskFinished())
+ {
+ sub_8153408();
+ gMain.state = 5;
+ }
+ break;
+ case 5:
+ if (++gUnknown_020322A0->timer > 60)
+ {
+ gMain.state++;
+ sub_8077288(2);
+ }
+ break;
+ case 6:
+ if (_IsLinkTaskFinished())
+ {
+ BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK);
+ gMain.state ++;
+ }
+ break;
+ case 7:
+ if (!gPaletteFade.active)
+ {
+ FadeOutBGM(3);
+ gMain.state++;
+ }
+ break;
+ case 8:
+ if (IsBGMStopped() == TRUE)
+ {
+ if (gWirelessCommType && gMain.savedCallback == sub_80773AC)
+ {
+ sub_8077288(3);
+ }
+ else
+ {
+ sub_800AC34();
+ }
+ gMain.state++;
+ }
+ break;
+ case 9:
+ if (gWirelessCommType && gMain.savedCallback == sub_80773AC)
+ {
+ if (_IsLinkTaskFinished())
+ {
+ gSoftResetDisabled = FALSE;
+ SetMainCallback2(c2_080543C4);
+ }
+ }
+ else if (!gReceivedRemoteLinkPlayers)
+ {
+ gSoftResetDisabled = FALSE;
+ SetMainCallback2(c2_080543C4);
+ }
+ break;
+ }
+ if (!HasLinkErrorOccurred())
+ {
+ RunTasks();
+ }
+ AnimateSprites();
+ BuildOamBuffer();
+ UpdatePaletteFade();
+}
+
+static void c2_080543C4(void)
+{
+ if (!gPaletteFade.active)
+ {
+ FreeAllWindowBuffers();
+ Free(GetBgTilemapBuffer(3));
+ Free(GetBgTilemapBuffer(1));
+ Free(GetBgTilemapBuffer(0));
+ FreeMonSpritesGfx();
+ FREE_AND_SET_NULL(gUnknown_020322A0);
+ if (gWirelessCommType)
+ sub_800E084();
+ SetMainCallback2(gMain.savedCallback);
+ }
+ RunTasks();
+ AnimateSprites();
+ BuildOamBuffer();
+ UpdatePaletteFade();
+}
+
+void DoInGameTradeScene(void)
+{
+ ScriptContext2_Enable();
+ CreateTask(sub_807F110, 10);
+ BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK);
+}
+
+static void sub_807F110(u8 taskId)
+{
+ if (!gPaletteFade.active)
+ {
+ SetMainCallback2(sub_807B270);
+ gFieldCallback = sub_80AF168;
+ DestroyTask(taskId);
+ }
+}
+
+static void sub_807F14C(void)
+{
+ u8 i;
+ u8 numRibbons = 0;
+ for (i = 0; i < 12; i ++)
+ {
+ numRibbons += GetMonData(&gEnemyParty[gUnknown_02032298[1] % 6], MON_DATA_CHAMPION_RIBBON + i);
+ }
+ if (numRibbons != 0)
+ FlagSet(FLAG_SYS_RIBBON_GET);
+}
+
+void sub_807F19C(void)
+{
+ sub_807B170();
+}
+
+void sub_807F1A8(u8 windowId, const u8 *str, u8 speed)
+{
+ FillWindowPixelBuffer(windowId, 0xFF);
+ gUnknown_020322A0->unk_F6[0] = 15;
+ gUnknown_020322A0->unk_F6[1] = 1;
+ gUnknown_020322A0->unk_F6[2] = 6;
+ AddTextPrinterParameterized4(windowId, 1, 0, 2, 0, 0, gUnknown_020322A0->unk_F6, speed, str);
+ CopyWindowToVram(windowId, 3);
+}
+
+static void c3_08054588(u8 taskId)
+{
+ s16 *data = gTasks[taskId].data;
+
+ u16 unk = gUnknown_08339090[data[0]][0] * 16;
+
+ if (!data[2])
+ {
+ if (unk == 0x100)
+ LoadPalette(gUnknown_08337EA0, 0x30, 32);
+ else
+ LoadPalette(&gUnknown_08337AA0[unk], 0x30, 32);
+ }
+ else
+ {
+ if (unk == 0x100)
+ LoadPalette(gUnknown_08337EA0, 0x30, 32);
+ else
+ LoadPalette(&gUnknown_08337CA0[unk], 0x30, 32);
+ }
+
+ if (gUnknown_08339090[data[0]][0] == 0 && data[1] == 0)
+ PlaySE(SE_W215);
+
+ if (data[1] == gUnknown_08339090[data[0]][1])
+ {
+ data[0]++;
+ data[1] = 0;
+ if (gUnknown_08339090[data[0]][1] == 0xFF)
+ {
+ DestroyTask(taskId);
+ }
+ }
+ else
+ {
+ data[1]++;
+ }
+}
+
+static void c3_0805465C(u8 taskId)
+{
+ s16 *data = gTasks[taskId].data;
+
+ if (data[0] == 0)
+ {
+ gUnknown_020322A0->unk_FB = gUnknown_020322A0->unk_FD = 120;
+ gUnknown_020322A0->unk_FC = 0;
+ gUnknown_020322A0->unk_FE = 160;
+ SetGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_WIN0_ON);
+ SetGpuReg(REG_OFFSET_WINOUT, WINOUT_WIN01_OBJ);
+ SetGpuReg(REG_OFFSET_WININ, WININ_WIN0_BG0 |
+ WININ_WIN0_BG1 |
+ WININ_WIN0_OBJ);
+ }
+
+ SetGpuReg(REG_OFFSET_WIN0H, WIN_RANGE2(gUnknown_020322A0->unk_FB, gUnknown_020322A0->unk_FD));
+ SetGpuReg(REG_OFFSET_WIN0V, WIN_RANGE2(gUnknown_020322A0->unk_FC, gUnknown_020322A0->unk_FE));
+
+ data[0]++;
+ gUnknown_020322A0->unk_FB -= 5;
+ gUnknown_020322A0->unk_FD += 5;
+
+ if (gUnknown_020322A0->unk_FB < 80)
+ {
+ DestroyTask(taskId);
+ }
+}
+
+static void sub_807F39C(u8 taskId)
+{
+ s16 *data = gTasks[taskId].data;
+
+ if (data[0] == 0)
+ {
+ gUnknown_020322A0->unk_FB = 80;
+ gUnknown_020322A0->unk_FD = 160;
+ SetGpuReg(REG_OFFSET_WINOUT, WINOUT_WIN01_OBJ);
+ SetGpuReg(REG_OFFSET_WININ, WININ_WIN0_BG0 |
+ WININ_WIN0_BG1 |
+ WININ_WIN0_OBJ);
+ }
+
+ SetGpuReg(REG_OFFSET_WIN0H, WIN_RANGE2(gUnknown_020322A0->unk_FB, gUnknown_020322A0->unk_FD));
+ SetGpuReg(REG_OFFSET_WIN0V, WIN_RANGE2(gUnknown_020322A0->unk_FC, gUnknown_020322A0->unk_FE));
+
+ if (gUnknown_020322A0->unk_FB != 120)
+ {
+ data[0]++;
+ gUnknown_020322A0->unk_FB += 5;
+ gUnknown_020322A0->unk_FD -= 5;
+
+ if (gUnknown_020322A0->unk_FB >= 116)
+ BlendPalettes(0x8, 0, RGB_WHITEALPHA);
+ }
+ else
+ {
+ ClearGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_WIN0_ON);
+ DestroyTask(taskId);
+ }
+}
+
+static void sub_807F464(void)
+{
+ switch (gMain.state)
+ {
+ case 0:
+ gMain.state = 1;
+ StringExpandPlaceholders(gStringVar4, gText_CommunicationStandby5);
+ sub_807F1A8(0, gStringVar4, 0);
+ break;
+ case 1:
+ sub_8077288(0);
+ gMain.state = 2;
+ gUnknown_020322A0->timer = 0;
+ break;
+ case 2:
+ if (_IsLinkTaskFinished())
+ {
+ gMain.state = 3;
+ StringExpandPlaceholders(gStringVar4, gText_SavingDontTurnOffPower);
+ sub_807F1A8(0, gStringVar4, 0);
+ IncrementGameStat(GAME_STAT_POKEMON_TRADES);
+ sub_8153380();
+ gUnknown_020322A0->timer = 0;
+ }
+ break;
+ case 3:
+ if (++gUnknown_020322A0->timer == 5)
+ {
+ gMain.state = 4;
+ }
+ break;
+ case 4:
+ if (sub_81533AC())
+ {
+ gMain.state = 5;
+ }
+ else
+ {
+ gUnknown_020322A0->timer = 0;
+ gMain.state = 3;
+ }
+ break;
+ case 5:
+ sub_81533E0();
+ gMain.state = 6;
+ gUnknown_020322A0->timer = 0;
+ break;
+ case 6:
+ if (++gUnknown_020322A0->timer > 10)
+ {
+ if (GetMultiplayerId() == 0)
+ {
+ gUnknown_020322A0->timer = Random() % 30;
+ }
+ else
+ {
+ gUnknown_020322A0->timer = 0;
+ }
+ gMain.state = 7;
+ }
+ break;
+ case 7:
+ if (gUnknown_020322A0->timer == 0)
+ {
+ sub_8077288(1);
+ gMain.state = 8;
+ }
+ else
+ {
+ gUnknown_020322A0->timer--;
+ }
+ break;
+ case 8:
+ if (_IsLinkTaskFinished())
+ {
+ sub_8153408();
+ gMain.state = 9;
+ }
+ break;
+ case 9:
+ if (++gUnknown_020322A0->timer > 60)
+ {
+ gMain.state++;
+ sub_8077288(2);
+ }
+ break;
+ case 10:
+ if (_IsLinkTaskFinished())
+ {
+ FadeOutBGM(3);
+ BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK);
+ gMain.state = 11;
+ }
+ break;
+ case 11:
+ if (!gPaletteFade.active && IsBGMStopped() == TRUE)
+ {
+ sub_8077288(3);
+ gMain.state = 12;
+ }
+ break;
+ case 12:
+ if (_IsLinkTaskFinished())
+ {
+ gSoftResetDisabled = FALSE;
+ SetMainCallback2(c2_080543C4);
+ }
+ break;
+ }
+
+ if (!HasLinkErrorOccurred())
+ RunTasks();
+ AnimateSprites();
+ BuildOamBuffer();
+ UpdatePaletteFade();
+}
diff --git a/src/tv.c b/src/tv.c
index b2a0ab0d8..8c76caa38 100644
--- a/src/tv.c
+++ b/src/tv.c
@@ -862,13 +862,13 @@ void SetTVMetatilesOnMap(int width, int height, u16 tileId)
void TurnOffTVScreen(void)
{
- SetTVMetatilesOnMap(gUnknown_03005DC0.width, gUnknown_03005DC0.height, 0x0002);
+ SetTVMetatilesOnMap(gBackupMapLayout.width, gBackupMapLayout.height, 0x0002);
DrawWholeMapView();
}
void TurnOnTVScreen(void)
{
- SetTVMetatilesOnMap(gUnknown_03005DC0.width, gUnknown_03005DC0.height, 0x0003);
+ SetTVMetatilesOnMap(gBackupMapLayout.width, gBackupMapLayout.height, 0x0003);
DrawWholeMapView();
}
diff --git a/src/unk_pokedex_area_screen_helper.c b/src/unk_pokedex_area_screen_helper.c
index 67fd52cb5..0041d628c 100644
--- a/src/unk_pokedex_area_screen_helper.c
+++ b/src/unk_pokedex_area_screen_helper.c
@@ -22,21 +22,21 @@ void sub_81C4D70(const struct UnkStruct_1C4D70 *template)
if (unk == 0)
{
- SetBgAttribute(template->bg, BG_CTRL_ATTR_WRAPAROUND, 0);
+ SetBgAttribute(template->bg, BG_ATTR_METRIC, 0);
decompress_and_copy_tile_data_to_vram(template->bg, gUnknown_0861D1A0, 0, template->unk2, unk);
sub_8199D3C(decompress_and_copy_tile_data_to_vram(template->bg, gUnknown_0861DEF4, 0, 0, 1), template->unk2, 32, 32, unk);
}
else
{
- SetBgAttribute(template->bg, BG_CTRL_ATTR_WRAPAROUND, 2);
- SetBgAttribute(template->bg, 9, 1);
+ SetBgAttribute(template->bg, BG_ATTR_METRIC, 2);
+ SetBgAttribute(template->bg, BG_ATTR_TYPE, 1);
decompress_and_copy_tile_data_to_vram(template->bg, gUnknown_0861E208, 0, template->unk2, 0);
sub_8199D3C(decompress_and_copy_tile_data_to_vram(template->bg, gUnknown_0861EF64, 0, 0, 1), template->unk2, 64, 64, 1);
}
ChangeBgX(template->bg, 0, 0);
ChangeBgY(template->bg, 0, 0);
- SetBgAttribute(template->bg, BG_CTRL_ATTR_SCREENSIZE, 1);
+ SetBgAttribute(template->bg, BG_ATTR_PALETTEMODE, 1);
CpuCopy32(gUnknown_0861D140, &gPlttBufferUnfaded[0x70], 0x60);
*gUnknown_0203CF28 = template->bg;
}
diff --git a/src/unk_transition.c b/src/unk_transition.c
index 7346e06ab..d56998b5b 100644
--- a/src/unk_transition.c
+++ b/src/unk_transition.c
@@ -337,8 +337,8 @@ static bool8 sub_81DAACC(struct Task *task)
else
{
sub_81DA700();
- SetGpuReg(REG_OFFSET_BLDCNT, 0x3F41);
- SetGpuReg(REG_OFFSET_BLDALPHA, 0x1000);
+ SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT1_BG0 | BLDCNT_EFFECT_BLEND | BLDCNT_TGT2_ALL);
+ SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(0, 16));
ChangeBgX(0, 0, 0);
ChangeBgY(0, 0, 0);
ChangeBgY(0, 0x500, 2);
@@ -368,11 +368,11 @@ static bool8 sub_81DAB4C(struct Task *task)
}
else
{
- u16 var;
+ u16 blnd;
task->data[2]++;
- var = task->data[2];
- SetGpuReg(REG_OFFSET_BLDALPHA, (var) | ((16 - var) << 8));
+ blnd = task->data[2];
+ SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(blnd, 16 - blnd));
}
return FALSE;
diff --git a/src/wallclock.c b/src/wallclock.c
index 58704c8a3..546750ba6 100644
--- a/src/wallclock.c
+++ b/src/wallclock.c
@@ -585,11 +585,11 @@ static void WallClockVblankCallback(void)
static void LoadWallClockGraphics(void)
{
SetVBlankCallback(NULL);
- SetGpuReg(REG_OFFSET_DISPCNT, 0x0000);
- SetGpuReg(REG_OFFSET_BG3CNT, 0x0000);
- SetGpuReg(REG_OFFSET_BG2CNT, 0x0000);
- SetGpuReg(REG_OFFSET_BG1CNT, 0x0000);
- SetGpuReg(REG_OFFSET_BG0CNT, 0x0000);
+ SetGpuReg(REG_OFFSET_DISPCNT, 0);
+ SetGpuReg(REG_OFFSET_BG3CNT, 0);
+ SetGpuReg(REG_OFFSET_BG2CNT, 0);
+ SetGpuReg(REG_OFFSET_BG1CNT, 0);
+ SetGpuReg(REG_OFFSET_BG0CNT, 0);
ChangeBgX(0, 0, 0);
ChangeBgY(0, 0, 0);
ChangeBgX(1, 0, 0);
@@ -633,9 +633,9 @@ static void WallClockInit(void)
EnableInterrupts(INTR_FLAG_VBLANK);
SetVBlankCallback(WallClockVblankCallback);
SetMainCallback2(WallClockMainCallback);
- SetGpuReg(REG_OFFSET_BLDCNT, 0x0000);
- SetGpuReg(REG_OFFSET_BLDALPHA, 0x0000);
- SetGpuReg(REG_OFFSET_BLDY, 0x0000);
+ SetGpuReg(REG_OFFSET_BLDCNT, 0);
+ SetGpuReg(REG_OFFSET_BLDALPHA, 0);
+ SetGpuReg(REG_OFFSET_BLDY, 0);
SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_OBJ_1D_MAP | DISPCNT_OBJ_ON);
ShowBg(0);
ShowBg(2);
diff --git a/src/window.c b/src/window.c
index aa1df3a12..3da529178 100644
--- a/src/window.c
+++ b/src/window.c
@@ -63,7 +63,7 @@ bool16 InitWindows(const struct WindowTemplate *templates)
if (gUnknown_03002F70[bgLayer] == NULL)
{
- attrib = GetBgAttribute(bgLayer, 0x8);
+ attrib = GetBgAttribute(bgLayer, BG_ATTR_METRIC);
if (attrib != 0xFFFF)
{
@@ -141,7 +141,7 @@ u16 AddWindow(const struct WindowTemplate *template)
if (gUnknown_03002F70[bgLayer] == NULL)
{
- attrib = GetBgAttribute(bgLayer, 0x8);
+ attrib = GetBgAttribute(bgLayer, BG_ATTR_METRIC);
if (attrib != 0xFFFF)
{
@@ -328,7 +328,7 @@ void PutWindowTilemap(u8 windowId)
WriteSequenceToBgTilemapBuffer(
windowLocal.window.bg,
- GetBgAttribute(windowLocal.window.bg, 0xA) + windowLocal.window.baseBlock,
+ GetBgAttribute(windowLocal.window.bg, BG_ATTR_BASETILE) + windowLocal.window.baseBlock,
windowLocal.window.tilemapLeft,
windowLocal.window.tilemapTop,
windowLocal.window.width,
@@ -340,7 +340,7 @@ void PutWindowTilemap(u8 windowId)
void PutWindowRectTilemapOverridePalette(u8 windowId, u8 x, u8 y, u8 width, u8 height, u8 palette)
{
struct Window windowLocal = gWindows[windowId];
- u16 currentRow = windowLocal.window.baseBlock + (y * windowLocal.window.width) + x + GetBgAttribute(windowLocal.window.bg, 0xA);
+ u16 currentRow = windowLocal.window.baseBlock + (y * windowLocal.window.width) + x + GetBgAttribute(windowLocal.window.bg, BG_ATTR_BASETILE);
int i;
for (i = 0; i < height; ++i)
@@ -376,7 +376,7 @@ void ClearWindowTilemap(u8 windowId)
void PutWindowRectTilemap(u8 windowId, u8 x, u8 y, u8 width, u8 height)
{
struct Window windowLocal = gWindows[windowId];
- u16 currentRow = windowLocal.window.baseBlock + (y * windowLocal.window.width) + x + GetBgAttribute(windowLocal.window.bg, 0xA);
+ u16 currentRow = windowLocal.window.baseBlock + (y * windowLocal.window.width) + x + GetBgAttribute(windowLocal.window.bg, BG_ATTR_BASETILE);
int i;
for (i = 0; i < height; ++i)
@@ -617,7 +617,7 @@ u16 AddWindow8Bit(const struct WindowTemplate *template)
bgLayer = template->bg;
if (gUnknown_03002F70[bgLayer] == 0)
{
- u16 attribute = GetBgAttribute(bgLayer, 8);
+ u16 attribute = GetBgAttribute(bgLayer, BG_ATTR_METRIC);
if (attribute != 0xFFFF)
{
s32 i;